Files
AIclinicalresearch/docs/03-业务模块/ADMIN-运营管理端/04-开发计划/01-TODO清单(可追踪).md
HaHafeng d595037316 feat(admin): Complete tenant management and module access control system
Major Features:
- Tenant management CRUD (list, create, edit, delete, module configuration)
- Dynamic module management system (modules table with 8 modules)
- Multi-tenant module permission merging (ModuleService)
- Module access control middleware (requireModule)
- User module permission API (GET /api/v1/auth/me/modules)
- Frontend module permission filtering (HomePage + TopNavigation)

Module Integration:
- RVW module integrated with PromptService (editorial + methodology)
- All modules (RVW/PKB/ASL/DC) added authenticate + requireModule middleware
- Fixed ReviewTask foreign key constraint (cross-schema issue)
- Removed all MOCK_USER_ID, unified to request.user?.userId

Prompt Management Enhancements:
- Module names displayed in Chinese (RVW -> 智能审稿)
- Enhanced version history with view content and rollback features
- List page shows both activeVersion and draftVersion columns

Database Changes:
- Added platform_schema.modules table
- Modified tenant_modules table (added index and UUID)
- Removed ReviewTask foreign key to public.users (cross-schema fix)
- Seeded 8 modules: RVW, PKB, ASL, DC, IIT, AIA, SSA, ST

Documentation Updates:
- Updated ADMIN module development status
- Updated TODO checklist (89% progress)
- Updated Prompt management plan (Phase 3.5.5 completed)
- Added module authentication specification

Files Changed: 80+
Status: All features tested and verified locally
Next: User management module development
2026-01-13 07:34:30 +08:00

19 KiB
Raw Blame History

ADMIN-运营管理端 - 开发TODO清单

版本: v1.3
创建日期: 2026-01-11
最后更新: 2026-01-12
总进度: 98/110 (89%)
状态: Phase 3.5.5 已完成Phase 4.0 租户管理已完成


📊 总体进度

████████░░ 89%
Phase 完成 总计 进度 状态
Phase 0 10 10 100% 已完成
Phase 1 15 15 100% 已完成
Phase 2 20 20 100% 已完成
Phase 3 12 12 100% 已完成
Phase 3.5 18 18 100% 已完成 2026-01-12
Phase 4 19 25 76% 🚧 租户管理已完成 2026-01-12
Phase 5 0 10 0% 待开始

📋 测试账号信息Seed数据

⚠️ 默认密码:123456
登录测试通过2026-01-11

运营团队账号

手机号 姓名 角色 租户 说明
13800000001 超级管理员 SUPER_ADMIN 壹证循科技 拥有所有权限
13800000002 Prompt工程师 PROMPT_ENGINEER 壹证循科技 Prompt调试权限

医院测试账号

手机号 姓名 角色 租户 科室
13800000003 医院管理员 HOSPITAL_ADMIN 北京积水潭医院 -
13800000004 科室主任 DEPARTMENT_ADMIN 北京积水潭医院 骨科
13800000005 普通医生 USER 北京积水潭医院 骨科

药企测试账号

手机号 姓名 角色 租户
13800000006 药企管理员 PHARMA_ADMIN 武田制药
13800000007 药企研究员 USER 武田制药

个人用户账号

手机号 姓名 角色 租户
13800000008 个人用户 USER 个人用户

租户信息

租户Code 名称 类型 状态
yizhengxun 壹证循科技 INTERNAL 活跃
jishuitan 北京积水潭医院 HOSPITAL 活跃
takeda 武田制药 PHARMA 活跃
public 个人用户 PUBLIC 活跃

登录URL

类型 URL
通用登录 http://localhost:3000/login
壹证循科技 http://localhost:3000/t/yizhengxun/login
北京积水潭医院 http://localhost:3000/t/jishuitan/login
武田制药 http://localhost:3000/t/takeda/login
个人用户 http://localhost:3000/t/public/login

Phase 0: 数据迁移1天 已完成

目标: 统一用户表,准备基础环境

⚠️ 注意2026-01-11 因数据库事故,采用了"重建+seed"方式而非迁移方式。详见 事故总结

数据备份

  • 备份public.users表数据 使用 backup_20260111_131506.sql
  • 备份platform_schema.User表数据 同上
  • 备份所有关联表如AdminLog 同上

数据迁移

  • 编写迁移脚本 改为使用 prisma/seed.ts 重建
  • 处理ID映射旧ID → 新UUID 新UUID自动生成
  • 更新外键关联 schema.prisma 已定义
  • 验证数据完整性 verify_system.ts 验证通过

数据清理

  • 重命名public.userspublic.users_backup 保留 mock 用户用于兼容
  • 设置7天后自动删除提醒 不再需要,已采用双表兼容方案

超级管理员

  • 创建超级管理员账号 13800000001
  • 验证账号可用 seed 执行成功

验证

  • 数据条数一致性检查 5用户、3租户、2科室、15权限
  • 关键字段完整性检查 所有必填字段已填充
  • 编写验证报告 verify_all_users.ts

Phase 1: 数据库Schema设计2天 已完成

目标: 创建所有核心表

完成日期2026-01-11 | 详见 backend/prisma/schema.prismabackend/prisma/seed.ts

Day 1: 平台核心表

tenants表

  • 定义Prisma Schema platform_schema.tenants
  • 添加必需字段id, code, name, type, status
  • 添加品牌配置字段config JSONB
  • 添加配额字段totalQuota, usedQuota

users表扩展

  • 添加tenantId字段
  • 添加departmentId字段
  • 修改role字段为Enum类型 UserRole
  • 添加索引

tenant_members表

  • 定义表结构 platform_schema.tenant_members
  • 建立与tenants和users的关联
  • 添加role字段(租户内角色)

Day 2: 配额与权限表

tenant_quotas表

  • 定义表结构 platform_schema.tenant_quotas
  • 关联tenants表

tenant_quota_allocations表 🆕

  • 定义表结构 platform_schema.tenant_quota_allocations
  • 支持targetType (DEPARTMENT | USER)
  • 添加limitAmountusedAmount字段

departments表

  • 定义表结构 platform_schema.departments
  • 支持parentId(多级结构)
  • 关联tenants表

tenant_modules表

  • 定义表结构 platform_schema.tenant_modules
  • 添加moduleCode字段
  • 添加isEnabledexpiresAt字段

permissions表

  • 定义表结构 platform_schema.permissions
  • 插入基础权限数据 15个权限
  • 插入prompt:*权限 prompt:view/edit/debug/publish

role_permissions表

  • 定义表结构 platform_schema.role_permissions
  • 关联roles和permissions

Prisma相关

  • 完成完整的schema.prisma编写
  • 运行npx prisma generate
  • 运行npx prisma db push (测试环境使用push)
  • 编写种子数据脚本(prisma/seed.ts
  • 运行种子数据

📝 Seed 用户信息汇总(完整)

手机号 密码 姓名 角色 租户 科室
13800000001 123456 超级管理员 SUPER_ADMIN 壹证循科技 -
13800000002 123456 Prompt工程师 PROMPT_ENGINEER 壹证循科技 -
13800000003 123456 医院管理员 HOSPITAL_ADMIN 北京积水潭医院 -
13800000004 123456 科室主任 DEPARTMENT_ADMIN 北京积水潭医院 骨科
13800000005 123456 普通医生 USER 北京积水潭医院 骨科
13800000006 123456 药企管理员 PHARMA_ADMIN 武田制药 -
13800000007 123456 药企研究员 USER 武田制药 -
13800000008 123456 个人用户 USER 个人用户 -

租户专属登录URL

  • 通用登录: /login
  • 壹证循科技: /t/yizhengxun/login
  • 北京积水潭医院: /t/jishuitan/login
  • 武田制药: /t/takeda/login
  • 个人用户: /t/public/login

⚠️ 使用默认密码登录会提示修改密码(可跳过)


Phase 2: 后端认证系统3天 已完成

目标: 实现JWT认证和权限控制

📁 代码位置: backend/src/common/auth/
完成日期2026-01-11

Day 1: JWT工具类 已完成

jwt.service.ts

  • 实现generateAccessToken(payload)
  • 实现generateRefreshToken(payload)
  • 实现generateTokens(payload) 生成完整Token响应
  • 实现verifyToken(token)
  • 实现refreshToken(token, getUserById)
  • 实现extractTokenFromHeader(header)
  • 配置JWT_SECRET环境变量 已在 env.ts 中配置
  • 单元测试 命令行验证通过

Day 2: 认证API 已完成

auth.controller.ts

  • POST /api/v1/auth/login/password - 密码登录
  • POST /api/v1/auth/login/code - 验证码登录
  • POST /api/v1/auth/verification-code - 发送验证码
  • POST /api/v1/auth/logout - 登出
  • GET /api/v1/auth/me - 获取当前用户信息
  • POST /api/v1/auth/refresh - 刷新Token
  • POST /api/v1/auth/change-password - 修改密码

auth.service.ts

  • 实现loginWithPassword()
  • 实现loginWithVerificationCode()
  • 实现getCurrentUser()
  • 实现changePassword()
  • 实现sendVerificationCode()
  • 实现refreshToken()
  • 实现getUserPermissions()
  • 密码加密bcryptjs

auth.routes.ts

  • 路由定义和Schema验证
  • 注册到 index.ts /api/v1/auth

Day 3: 认证中间件 已完成

auth.middleware.ts

  • authenticate - 验证JWT Token
  • optionalAuthenticate - 可选认证
  • requireRoles(...roles) - 验证角色
  • requirePermission(permission) - 验证具体权限
  • requireSameTenant - 验证租户访问权限
  • registerAuthPlugin(fastify) - 注册插件

应用中间件

  • 保护现有Legacy API 暂时保持兼容
  • 保护RVW模块API 暂时保持兼容
  • 保护AIA模块API 暂时保持兼容
  • 保护PKB模块API 暂时保持兼容

测试

  • 编写Postman测试集合 使用PowerShell Invoke-RestMethod验证
  • 测试所有认证流程
  • 测试权限控制

Phase 3: 前端认证对接2天 已完成

目标: 实现登录页面和权限对接

📁 代码位置: frontend-v2/src/framework/auth/, frontend-v2/src/pages/LoginPage.tsx
完成日期2026-01-11 | 测试通过

Day 1: 登录页面

LoginPage.tsx

  • 创建登录表单(手机号 + 密码 / 验证码)
  • 表单验证 Ant Design Form
  • 调用登录API
  • 存储Token到localStorage
  • 错误处理和提示
  • 默认密码修改提示弹窗

useAuth Hook (AuthContext)

  • 实现loginWithPassword()方法
  • 实现loginWithCode()方法
  • 实现logout()方法
  • 实现getCurrentUser()方法
  • 实现isAuthenticated状态

Day 2: 权限框架对接

AuthContext.tsx

  • 创建认证上下文
  • 提供user状态
  • 提供token状态
  • 提供登录/登出方法
  • 自动刷新Token逻辑

PermissionContext.tsx更新

  • 删除MOCK_USER 改为从AuthContext获取
  • 从后端API获取用户信息
  • 从用户信息中解析权限
  • 更新checkModulePermission逻辑
  • 更新checkFeaturePermission逻辑

路由保护

  • 更新MainLayout认证检查
  • 应用到所有业务模块路由
  • 未登录用户重定向到登录页

Phase 3.5: Prompt管理系统7天 下一步

目标: 实现生产环境灰度预览系统

🎯 下一阶段重点 - 运营管理端核心功能
📄 详细计划: 02-Prompt管理系统开发计划.md

已确认需求

需求项 确认结果
优先接入模块 RVW 模块先行
权限细分 PROMPT_ENGINEER只能编辑SUPER_ADMIN才能发布
数据迁移 自动迁移现有文件Prompt
调试范围 可指定模块

Phase 3.5.1: 基础设施Day 1-2 已完成

  • 创建 capability_schema Schema 2026-01-11
  • 更新 schema.prisma 添加Prompt模型 2026-01-11
  • 执行 prisma db push 2026-01-11
  • 添加 prompt:* 权限 2026-01-11
    • prompt:view - 查看Prompt
    • prompt:edit - 编辑Prompt
    • prompt:debug - 调试Prompt
    • prompt:publish - 发布Prompt
  • 更新角色权限SUPER_ADMIN全部PROMPT_ENGINEER无publish 2026-01-11
  • 编写迁移脚本 2026-01-11
  • 迁移 RVW 模块 Prompt2个 2026-01-11
    • RVW_EDITORIAL - 稿约规范性评估
    • RVW_METHODOLOGY - 方法学质量评估
    • RVW_TOPIC_* - 已移除选题评估不属于RVW模块

Phase 3.5.2: PromptService 核心Day 3 已完成

  • 实现 prompt.service.ts 2026-01-11
    • get(code, variables, userId) - 灰度核心
    • setDebugMode(userId, modules, enabled) - 模块级调试
    • render(template, variables) - 变量渲染
    • extractVariables(content) - 变量提取
    • validateVariables() - 变量校验
    • getFallback(code) - 兜底Prompt
  • 实现 LISTEN/NOTIFY 热更新 ⏸️ 暂缓
  • 编写兜底Prompthardcoded 2026-01-11

Phase 3.5.3: 管理APIDay 4 已完成

  • GET /api/admin/prompts - 列表(支持模块过滤) 2026-01-11
  • GET /api/admin/prompts/:code - 详情+版本历史 2026-01-11
  • POST /api/admin/prompts/:code/draft - 保存草稿 2026-01-11
  • POST /api/admin/prompts/:code/publish - 发布需prompt:publish 2026-01-11
  • POST /api/admin/prompts/:code/rollback - 回滚 2026-01-11
  • POST /api/admin/prompts/debug - 调试开关(支持模块选择) 2026-01-11
  • POST /api/admin/prompts/test-render - 测试渲染 2026-01-11
  • 权限中间件检查 ⏸️ 暂缓(已注释)

Phase 3.5.4: 前端管理界面Day 5-6 已完成

  • 搭建管理端基础架构 2026-01-11
    • AdminLayout.tsx - 运营管理端布局(浅色主题)
    • OrgLayout.tsx - 机构管理端布局(浅色主题)
    • AdminDashboard.tsx - 运营概览页
    • OrgDashboard.tsx - 机构概览页
    • 路由配置 /admin/*/org/*
    • 头像下拉菜单切换入口
  • PromptListPage.tsx - 列表页 2026-01-11
    • 模块筛选
    • 搜索功能
    • 调试开关(顶部全局)
    • 状态显示ACTIVE/DRAFT/ARCHIVED
  • PromptEditor.tsx - CodeMirror 6 编辑器 2026-01-11
    • 简化配置(行号+换行+变量高亮+搜索+撤销)
    • 中文友好字体 15px
    • 变量高亮(淡蓝背景)
    • 字符计数和变量统计
  • PromptEditorPage.tsx - 编辑器页面 2026-01-11
    • 基本信息展示
    • 保存草稿功能
    • 发布功能(权限控制)
    • 版本历史时间轴
    • 测试渲染面板
    • 变量列表展示

Phase 3.5.5: RVW模块集成Day 7 下一步

  • 改造 editorialService.ts 使用 promptService.get('RVW_EDITORIAL')
  • 改造 methodologyService.ts 使用 promptService.get('RVW_METHODOLOGY')
  • 删除文件读取逻辑prompts/*.txt
  • 端到端测试
    • Prompt工程师编辑→保存草稿→开启调试→测试
    • SUPER_ADMIN审核→发布
    • 验证灰度预览调试者看DRAFT普通用户看ACTIVE

Phase 4: 运营管理端MVP5天

目标: 实现核心租户管理功能

Day 1-2: 租户管理

后端API

  • GET /api/admin/tenants - 获取租户列表
  • POST /api/admin/tenants - 创建租户
  • GET /api/admin/tenants/:id - 获取租户详情
  • PUT /api/admin/tenants/:id - 更新租户
  • DELETE /api/admin/tenants/:id - 删除租户(软删除)

前端页面

  • TenantListPage.tsx - 租户列表
  • TenantFormPage.tsx - 创建/编辑租户表单
    • 基本信息name, code, type
    • 联系信息contact, phone, email
    • 状态管理active/inactive
  • TenantDetailPage.tsx - 租户详情

Day 3: 品牌配置

后端API

  • POST /api/admin/tenants/:id/branding - 更新品牌配置
  • POST /api/admin/upload/logo - 上传Logo到OSS
  • POST /api/admin/upload/background - 上传背景图到OSS
  • GET /api/public/tenant-config/:code - 获取租户配置公开API

前端页面

  • TenantBrandingPage.tsx - 品牌配置
    • Logo上传拖拽或点击
    • 背景图上传
    • 主题色选择器Color Picker
    • 系统名称自定义
    • 实时预览

OSS集成

  • 配置阿里云OSS
  • 实现文件上传服务
  • 生成公开访问URL

Day 4: Feature Flag管理

后端API

  • GET /api/admin/feature-flags - 获取所有Feature Flag
  • PUT /api/admin/feature-flags/:id - 更新Feature Flag
  • POST /api/admin/feature-flags/:id/toggle - 切换开关

前端页面

  • FeatureFlagListPage.tsx - Feature Flag列表
    • 模块列表ASL/DC/IIT等
    • 开关切换
    • 应用到租户配置

Day 5: 集成测试

功能测试

  • 创建租户流程测试
  • 品牌配置流程测试
  • Feature Flag管理测试

权限测试

  • 超级管理员权限测试
  • 非管理员访问测试(应拒绝)

数据一致性测试

  • 租户创建后数据验证
  • 品牌配置保存验证

Phase 5: 租户专属登录2天

目标: 实现租户品牌化登录页

Day 1: 租户登录页

TenantLoginPage.tsx

  • 创建租户登录页组件
  • 解析URL中的tenantCode参数
  • 调用/api/public/tenant-config/:code获取配置
  • 动态加载Logo
  • 动态设置背景图
  • 动态应用主题色CSS变量
  • 动态设置页面标题document.title

样式定制

  • 使用CSS变量支持动态主题
  • 响应式布局
  • 加载态处理
  • 错误处理(租户不存在)

Day 2: 路由分发

登录后跳转逻辑

  • 根据role判断跳转目标
    • SUPER_ADMIN → 运营管理端
    • PROMPT_ENGINEER → 运营管理端Prompt管理
    • HOSPITAL_ADMIN → 机构管理端(医院)
    • PHARMA_ADMIN → 机构管理端(药企)
    • USER → 业务模块首页

路由配置

  • 配置/t/:tenantCode/login路由
  • 配置通用登录页重定向逻辑

测试

  • 测试不同租户的品牌加载
  • 测试不同角色的路由跳转
  • 测试错误场景无效tenantCode

Phase 6: 机构管理端(待定)

目标: 实现医院端和药企端自服务管理

医院管理端

  • 用户管理
  • 科室管理(多级结构)
  • 配额分配(科室/个人)
  • 审计日志查询

药企管理端

  • 用户管理
  • 项目管理
  • 配额分配(项目/个人)
  • 审计日志查询FDA合规

备注: Phase 6依赖Phase 0-5完成详细任务待运营端完成后分解


🔧 持续性任务

文档维护

  • 及时更新API文档
  • 编写用户手册

代码质量

  • 代码审查每个PR
  • 单元测试覆盖率>60%
  • ESLint检查通过
  • TypeScript类型检查通过

安全测试

  • JWT Token安全测试
  • 多租户隔离测试
  • SQL注入测试
  • XSS攻击测试

性能优化

  • 数据库查询优化
  • 缓存策略优化
  • 前端打包优化

📝 使用说明

如何更新TODO

  1. 完成任务时

    - [x] 任务描述
    
  2. 更新进度

    Phase 1: █████░░░░░ 50% (7/15)
    
  3. 添加备注

    - [x] 任务描述 ✅ 2026-01-12完成 by张三
    

优先级标记

  • 🔴 P0 - 必须完成
  • 🟡 P1 - 重要
  • 🟢 P2 - 可选

状态标记

  • 待开始
  • 🚧 进行中
  • 已完成
  • 已取消
  • ⚠️ 阻塞

📊 快速统计

# 统计完成任务数
grep -c "- \[x\]" 01-TODO清单可追踪.md

# 统计总任务数
grep -c "- \[ \]" 01-TODO清单可追踪.md

最后更新2026-01-11 Phase 3.5.4完成

🚀 下一步Phase 3.5.5 RVW模块集成 - 业务模块使用 PromptService