Files
AIclinicalresearch/docs/03-业务模块/ADMIN-运营管理端/00-Phase3.5完成总结.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

8.5 KiB
Raw Blame History

Phase 3.5 Prompt管理系统 - 完成总结

完成日期: 2026-01-11
完成度: 83%Phase 3.5.1-3.5.4 已完成)
下一步: Phase 3.5.5 RVW 模块集成


📊 完成概览

阶段 工作量 状态 完成日期
Phase 3.5.1: 基础设施搭建 7任务 完成 2026-01-11
Phase 3.5.2: PromptService 核心 5任务 完成 2026-01-11
Phase 3.5.3: 管理 API 8接口 完成 2026-01-11
Phase 3.5.4: 前端管理界面 6组件 完成 2026-01-11
Phase 3.5.5: RVW 模块集成 3任务 待开始 -

🎯 核心成果

1. 数据库层capability_schema

新增表

-- Prompt 模板表
capability_schema.prompt_templates
  ├── id (主键)
  ├── code (唯一标识,如 'RVW_EDITORIAL')
  ├── name (人类可读名称)
  ├── module (所属模块: RVW, ASL, DC...)
  ├── variables (变量列表,JSON)
  └── versions (一对多)

-- Prompt 版本表
capability_schema.prompt_versions
  ├── id (主键)
  ├── template_id (关联模板)
  ├── version (版本号)
  ├── content (Prompt 内容,TEXT)
  ├── model_config (模型配置,JSON)
  ├── status (DRAFT/ACTIVE/ARCHIVED)
  ├── changelog (变更说明)
  └── created_by (创建人)

新增权限

prompt:view     - 查看Prompt
prompt:edit     - 编辑Prompt
prompt:debug    - 调试Prompt
prompt:publish  - 发布Prompt

角色分配

  • SUPER_ADMIN: 全部权限view + edit + debug + publish
  • PROMPT_ENGINEER: 无 publishview + edit + debug

已迁移数据

  • RVW_EDITORIAL稿约规范性评估5101字符v1 ACTIVE
  • RVW_METHODOLOGY方法学质量评估4891字符v1 ACTIVE

2. 后端服务层

文件清单

backend/src/common/prompt/
├── prompt.types.ts           (70行) - 类型定义
├── prompt.service.ts        (596行) - 核心服务 ⭐
├── prompt.controller.ts     (419行) - API控制器
├── prompt.routes.ts         (224行) - 路由定义
├── prompt.fallbacks.ts      (101行) - 兜底Prompt
└── index.ts                  (34行) - 模块导出

核心功能

功能 方法 说明
灰度预览 get(code, variables, userId) 调试者看DRAFT用户看ACTIVE
模块级调试 setDebugMode(userId, modules, enabled) 可指定['RVW']或['ALL']
模板渲染 render(template, variables) Handlebars 引擎
变量提取 extractVariables(content) {{xxx}} 自动提取
变量校验 validateVariables(content, vars) 检查缺失/多余变量
三级容灾 getActiveVersion() + cache + fallback 数据库→缓存→兜底

API 接口

端点 方法 功能
/api/admin/prompts GET 列表(支持 ?module=RVW 筛选)
/api/admin/prompts/:code GET 详情+版本历史
/api/admin/prompts/:code/draft POST 保存草稿
/api/admin/prompts/:code/publish POST 发布(需 prompt:publish
/api/admin/prompts/:code/rollback POST 回滚到指定版本
/api/admin/prompts/debug GET 获取调试状态
/api/admin/prompts/debug POST 设置调试模式
/api/admin/prompts/test-render POST 测试渲染

3. 前端管理界面

架构成果

frontend-v2/src/
├── framework/layout/
│   ├── AdminLayout.tsx      (237行) ✅ 运营管理端布局(浅色主题)
│   ├── OrgLayout.tsx        (260行) ✅ 机构管理端布局(浅色主题)
│   └── TopNavigation.tsx    (171行) ✅ 更新(添加切换入口)
│
└── pages/
    ├── admin/
    │   ├── AdminDashboard.tsx       (147行) ✅ 运营概览
    │   ├── PromptListPage.tsx       (254行) ✅ Prompt列表
    │   ├── PromptEditorPage.tsx     (399行) ✅ Prompt编辑器
    │   ├── components/
    │   │   └── PromptEditor.tsx     (245行) ✅ CodeMirror 6
    │   └── api/
    │       └── promptApi.ts         (172行) ✅ API调用
    │
    └── org/
        └── OrgDashboard.tsx         (164行) ✅ 机构概览

路由系统

/                     → 业务应用端MainLayout蓝色主题
/admin/*              → 运营管理端AdminLayout翠绿主题 #10b981
/org/*                → 机构管理端OrgLayout深蓝主题 #003a8c

CodeMirror 6 简化配置

  • 行号 + 自动换行
  • 变量高亮({{xxx}} 淡蓝背景)
  • 撤销/重做Ctrl+Z/Y
  • 搜索Ctrl+F
  • 字符计数 + 变量统计
  • 中文友好字体15px行高1.8
  • 保存快捷键Ctrl+S

权限UI体现

  • PROMPT_ENGINEER 看到"发布"按钮是禁用状态 + 提示"需要SUPER_ADMIN权限"

🔑 关键设计点

1. 变量校验机制(新增)

后端自动提取

// 保存草稿时自动提取变量
const variables = extractVariables(content); // ['title', 'author']
await prisma.prompt_templates.update({
  where: { code },
  data: { variables },
});

前端自动生成表单

// 根据 variables 生成测试输入框
{variables.map(varName => (
  <Input label={varName} placeholder={`输入 ${varName} 的值`} />
))}

2. 灰度预览工作流

Prompt工程师:
  ① 编辑 RVW_EDITORIAL保存草稿DRAFT
  ② 开启调试模式:选择 RVW 模块
  ③ 切换到业务端 /rvw使用真实数据测试
     → 系统自动加载 DRAFT 版本
     → 普通用户仍使用 ACTIVE 版本
  ④ 测试通过,关闭调试模式
  ⑤ 提交发布请求

SUPER_ADMIN:
  ⑥ 审核并点击"发布"DRAFT → ACTIVE
  ⑦ 新版本生效,所有用户使用新 Prompt

3. 三级容灾机制

Level 1: 数据库(正常)
  └─> 从 capability_schema.prompt_versions 获取

Level 2: 内存缓存(数据库不可用)
  └─> 从 PromptService.cache 获取

Level 3: 兜底Prompt缓存也失效
  └─> 从 prompt.fallbacks.ts 硬编码获取

📦 代码统计

类别 文件数 代码行数
后端服务 6 ~2,044行
前端界面 9 ~1,735行
脚本工具 4 ~473行
合计 19 ~4,252行

🧪 测试状态

已测试

后端单元测试

  • test-prompt-service.ts - PromptService 核心功能测试7项全通过
  • test-prompt-api.ts - API 接口测试5项全通过

前端功能测试

  • 待用户手动测试

待测试Phase 3.5.5

  • RVW 模块集成测试
  • 端到端灰度预览测试
  • 多用户并发调试测试

🚀 下一步Phase 3.5.5

任务清单

  1. 改造 RVW 服务

    • 修改 editorialService.ts:使用 promptService.get('RVW_EDITORIAL')
    • 修改 methodologyService.ts:使用 promptService.get('RVW_METHODOLOGY')
    • 删除文件读取逻辑
  2. 端到端测试

    • Prompt 工程师编辑 → 保存草稿
    • 开启调试 → 切换到 RVW → 测试真实数据
    • 关闭调试 → 发布 → 验证生效
  3. 文档更新

    • 更新 RVW 模块开发指南
    • 添加 Prompt 管理使用手册

📝 注意事项

给新 AI 助手的提示

  1. 代码位置

    • 后端:backend/src/common/prompt/
    • 前端:frontend-v2/src/pages/admin/
    • 脚本:backend/scripts/
  2. 关键文件

    • prompt.service.ts核心逻辑596行灰度预览的核心
    • PromptEditorPage.tsx前端编辑器399行完整功能
  3. 已安装依赖

    • 后端:handlebars@^4.7.8(已有)
    • 前端:codemirror@^6.x + @codemirror/*2026-01-11 已安装)
  4. 测试账号

    • SUPER_ADMIN: 13800000001 / 123456
    • PROMPT_ENGINEER: 13800000002 / 123456
  5. API 路由

    • 已注册:/api/admin/prompts
    • 已测试8个接口全部正常

🎉 里程碑

这是 AI临床研究平台的重要里程碑

  1. 首个生产环境灰度预览系统 - 允许专业人员安全调试 Prompt
  2. Prompt 与代码分离 - 临床专家可独立调整,无需开发人员
  3. 三端架构初步形成 - 业务端 + 机构管理端 + 运营管理端
  4. 权限体系完善 - 6个角色 + 细粒度权限控制

文档生成2026-01-11
下次对话请阅读:04-开发计划/01-TODO清单可追踪.md 了解详细任务