# ADMIN-è¿è¥ç®¡ç†ç«?- 模å—当å‰çжæ€ä¸Žå¼€å‘指å? > **æœ€åŽæ›´æ–°ï¼š** 2026-01-12 > **状æ€ï¼š** âœ?Phase 3.5.5 已完æˆï¼ŒPhase 4.0 租户管ç†å·²å®Œæˆ? > **版本ï¼?* v0.4 (Alpha) --- ## 🎯 一å¥è¯æ€»ç»“ **è¿è¥ç®¡ç†ç«¯æ˜¯AI临床研究平å°çš„æ ¸å¿ƒç®¡ç†åŽå°ï¼Œæä¾›å¤šç§Ÿæˆ·ç®¡ç†ã€Prompt工程化调试ã€ç”¨æˆ·æƒé™é…置等è¿è¥èƒ½åŠ›ã€?* --- ## 📊 当å‰å¼€å‘状æ€? ### âœ?已完æˆï¼ˆ2026-01-11ï¼? **Phase 0-3:基础架构** - [x] æ•°æ®åº?Schema 设计(platform_schema, capability_schemaï¼?- [x] JWT 认è¯ç³»ç»Ÿï¼ˆ`backend/src/common/auth/`ï¼?- [x] 登录/登出功能(å‰åŽç«¯å®Œæ•´å®žçްï¼?- [x] 认è¯ä¸­é—´ä»¶ï¼ˆFastifyï¼?- [x] å‰ç«¯è®¤è¯å¯¹æŽ¥ï¼ˆAuthContext, LoginPageï¼?- [x] 测试用户创建ï¼?个角色用户) **Phase 3.5.1:Prompt 基础设施** - [x] 创建 capability_schema - [x] 添加 prompt_templates å’?prompt_versions è¡?- [x] 添加 prompt:* æƒé™ï¼ˆview/edit/debug/publishï¼?- [x] è¿ç§» RVW Prompt 到数æ®åº“ï¼?个:EDITORIAL, METHODOLOGYï¼? **Phase 3.5.2:PromptService 核心** - [x] ç°åº¦é¢„览逻辑(DRAFT/ACTIVE 分å‘ï¼?- [x] 模å—级调试控制(setDebugModeï¼?- [x] Handlebars æ¨¡æ¿æ¸²æŸ“ - [x] å˜é‡æå–与校验(extractVariables, validateVariablesï¼?- [x] 三级容ç¾ï¼ˆæ•°æ®åº“→缓存→兜底ï¼?- [x] 兜底 Prompt(hardcoded fallbacksï¼? **Phase 3.5.3:管ç?API** - [x] 8ä¸?RESTful 接å£ï¼ˆåˆ—表ã€è¯¦æƒ…ã€ä¿å­˜ã€å‘布ã€å›žæ»šã€è°ƒè¯•ã€æµ‹è¯•æ¸²æŸ“ã€æ¸…缓存ï¼?- [x] 路由注册(`/api/admin/prompts`ï¼? **Phase 3.5.4:å‰ç«¯ç®¡ç†ç•Œé?* - [x] 管ç†ç«¯åŸºç¡€æž¶æž„(AdminLayout, OrgLayout, 路由ï¼?- [x] 头åƒä¸‹æ‹‰èœå•切æ¢å…¥å£ - [x] PromptListPageï¼ˆç­›é€‰ã€æœç´¢ã€è°ƒè¯•开关) - [x] PromptEditor(CodeMirror 6 简化版,中文å‹å¥½ï¼‰ - [x] PromptEditorPage(编辑ã€ä¿å­˜ã€å‘å¸ƒã€æµ‹è¯•ã€ç‰ˆæœ¬åކå²ï¼‰ **Phase 3.5.5:RVW 模å—集æˆ** âœ?已完æˆï¼ˆ2026-01-12ï¼?- [x] RVW editorialService é›†æˆ PromptService - [x] RVW methodologyService é›†æˆ PromptService - [x] RVW reviewWorker ä¼ é€?userId - [x] ä¿®å¤ ReviewTask 外键约æŸé—®é¢˜ï¼ˆè·¨ schema 外键ï¼?- [x] 全模å—认è¯è§„范化(RVW, PKB, ASL, DCï¼? **Phase 4.0:租户与模å—管ç†** âœ?已完æˆï¼ˆ2026-01-12ï¼?- [x] 新增 modules è¡¨ï¼ˆåŠ¨æ€æ¨¡å—管ç†ï¼‰ - [x] ModuleServiceï¼ˆå¤šç§Ÿæˆ·æ¨¡å—æƒé™åˆå¹¶ï¼?- [x] requireModule 中间件(模å—访问控制ï¼?- [x] æ‰€æœ‰ä¸šåŠ¡æ¨¡å—æ·»åŠ?requireModule 检æŸ?- [x] 租户管ç†åŽç«¯ API(CRUD + 模å—é…ç½®ï¼?- [x] 租户管ç†å‰ç«¯ç•Œé¢ï¼ˆåˆ—表ã€è¯¦æƒ…ã€ç¼–è¾‘ã€æ¨¡å—é…置) - [x] å‰ç«¯æ¨¡å—æƒé™åЍæ€è¿‡æ»¤ï¼ˆé¦–页 + 导航ï¼?- [x] Prompt 界é¢ä¼˜åŒ–(模å—中文显示ã€ç‰ˆæœ¬åކå²å¢žå¼ºï¼‰ ### â?å¾…å¼€å‘(按优先级ï¼? **P1 - 用户管ç†ï¼ˆWeek 4-5ï¼?* - [ ] 用户管ç†ç•Œé¢ï¼ˆåˆ—表ã€åˆ›å»ºã€ç¼–辑) - [ ] 用户多租户关è”é…ç½?- [ ] 角色分é…功能 - [ ] 用户æƒé™æŸ¥çœ‹ **P2 - Prompt 管ç†ä¼˜åŒ–** - [ ] Prompt 版本对比功能 - [ ] Prompt æ‰¹é‡æ“作 - [ ] Prompt 导入/导出 **P2 - 租户高级功能** - [ ] å“牌定制é…置(logoã€ä¸»é¢˜è‰²ï¼?- [ ] 租户专属登录é¡?- [ ] é…é¢ç®¡ç†ç•Œé¢ --- ## 🗄ï¸?æ•°æ®åº“状æ€? ### å·²æœ‰è¡¨ï¼ˆéœ€è¦æ•´åˆï¼‰ ```sql -- 现有的用户表(需è¦ç»Ÿä¸€ï¼?public.users -- 旧的用户è¡?platform_schema.User -- 新的用户表(Prismaï¼? -- 现有的审计表 public.AdminLog -- 旧的审计日志 ``` ### âœ?已创建的表(2026-01-12ï¼? **platform_schema(平å°åŸºç¡€ï¼?* - âœ?`users` - 用户表(å?phone, password, role, is_default_passwordï¼?- âœ?`tenants` - 租户表(å?PUBLIC 类型ï¼?- âœ?`tenant_members` - 租户æˆå‘˜ï¼ˆæ”¯æŒç”¨æˆ·åŠ å…¥å¤šä¸ªç§Ÿæˆ·ï¼‰ - âœ?`tenant_modules` - 租户订阅模å—(控制租户å¯è®¿é—®çš„功能) - âœ?`tenant_quotas` - 租户é…é¢ - âœ?`tenant_quota_allocations` - é…é¢åˆ†é… - âœ?`departments` - 科室è¡?- âœ?`permissions` - æƒé™è¡¨ï¼ˆå?prompt:*/tenant:* æƒé™ï¼?- âœ?`role_permissions` - 角色æƒé™ - âœ?`verification_codes` - 验è¯ç è¡¨ - âœ?`modules` - 系统模å—表(动æ€ç®¡ç†å¯ç”¨æ¨¡å—)🆕 2026-01-12 **capability_schema(通用能力ï¼?* âœ?新增 - âœ?`prompt_templates` - Promptæ¨¡æ¿ - âœ?`prompt_versions` - Prompt版本 **admin_schema(è¿è¥ç®¡ç†ï¼‰** - `admin_operation_logs` - è¿è¥æ“作日志 --- ## ðŸ—ï¸?架构概览 ``` ┌─────────────────────────────────────────────────â”?â”? è¿è¥ç®¡ç†ç«¯ï¼ˆADMIN Portalï¼? â”?├─────────────────────────────────────────────────â”?â”? ðŸ¢ ç§Ÿæˆ·ç®¡ç† â”? 👤 ç”¨æˆ·ç®¡ç† â”? 🎨 Promptç®¡ç† â”?â”? 📊 é…é¢ç®¡ç† â”? 🔠æƒé™é…ç½® â”? 📋 审计日志 â”?└─────────────────────────────────────────────────â”? â†?┌─────────────────────────────────────────────────â”?â”? Platform Layer (å¹³å°å±? â”?├─────────────────────────────────────────────────â”?â”? 认è¯ä¸­å¿ƒ â”?æƒé™ä¸­å¿ƒ â”?存储æœåŠ¡ â”?通知æœåŠ¡ â”?└─────────────────────────────────────────────────â”? â†?┌─────────────────────────────────────────────────â”?â”? Capability Layer (能力å±? â”?├─────────────────────────────────────────────────â”?â”? Promptç®¡ç† â”?LLM Gateway â”?文档引擎 â”?RAG引擎 â”?└─────────────────────────────────────────────────â”? â†?┌─────────────────────────────────────────────────â”?â”? Business Modules (业务模å—) â”?├─────────────────────────────────────────────────â”?â”? ASL â”?DC â”?IIT â”?PKB â”?AIA â”?RVW â”?SSA â”?ST â”?└─────────────────────────────────────────────────â”?``` --- ## 🔠角色与æƒé™çŸ©é˜? | åŠŸèƒ½æ¨¡å— | SUPER_ADMIN | PROMPT_ENGINEER | HOSPITAL_ADMIN | PHARMA_ADMIN | USER | |---------|-------------|-----------------|----------------|--------------|------| | ç§Ÿæˆ·ç®¡ç† | âœ?全部 | â?| â?| â?| â?| | Promptç®¡ç† | âœ?全部 | âœ?全部 | â?| â?| â?| | 用户管ç†ï¼ˆå…¨å±€ï¼?| âœ?| â?| â?| â?| â?| | 用户管ç†ï¼ˆç§Ÿæˆ·å†…ï¼?| âœ?| â?| âœ?| âœ?| â?| | é…é¢åˆ†é… | âœ?| â?| âœ?| âœ?| â?| | 审计日志(全局ï¼?| âœ?| â?| â?| â?| â?| | 审计日志(租户内ï¼?| âœ?| â?| âœ?| âœ?| â?| | 业务模å—使用 | âœ?| âœ?| âœ?| âœ?| âœ?| --- ## 📠代ç ç»“æž„ ### âœ?实际已完æˆçš„结构ï¼?026-01-12ï¼? **åŽç«¯** ``` backend/src/ ├── common/ â”? ├── auth/ # âœ?è®¤è¯æ¨¡å— â”? â”? ├── jwt.service.ts # JWT Tokenç®¡ç† â”? â”? ├── auth.service.ts # 业务逻辑 â”? â”? ├── auth.middleware.ts # 认è¯ä¸­é—´ä»?+ requireModule 🆕 â”? â”? ├── module.service.ts # 🆕 æ¨¡å—æƒé™æœåŠ¡ï¼ˆå¤šç§Ÿæˆ·åˆå¹¶ï¼?â”? â”? ├── auth.controller.ts # API控制å™?+ getUserModules 🆕 â”? â”? ├── auth.routes.ts # 路由 â”? â”? └── index.ts â”? â”?â”? └── prompt/ # âœ?Promptç®¡ç† â”? ├── prompt.types.ts # 类型定义 â”? ├── prompt.service.ts # 核心æœåŠ¡ â”? ├── prompt.controller.ts # API控制器(增强版本返回)ðŸ†?â”? ├── prompt.routes.ts # 路由 â”? ├── prompt.fallbacks.ts # 兜底Prompt â”? └── index.ts â”?├── modules/ â”? ├── admin/ # 🆕 ç§Ÿæˆ·ç®¡ç†æ¨¡å— â”? â”? ├── types/ â”? â”? â”? └── tenant.types.ts # 租户类型定义 â”? â”? ├── services/ â”? â”? â”? └── tenantService.ts # 租户业务逻辑 â”? â”? ├── controllers/ â”? â”? â”? └── tenantController.ts # 租户控制å™?â”? â”? └── routes/ â”? â”? └── tenantRoutes.ts # 租户路由 â”? â”?â”? ├── rvw/ # âœ?RVW模å—(已集æˆPromptServiceï¼?â”? ├── pkb/ # âœ?PKB模å—(已添加认è¯ï¼?â”? ├── asl/ # âœ?ASL模å—(已添加认è¯ï¼?â”? └── dc/ # âœ?DC模å—(已添加认è¯ï¼? backend/scripts/ ├── seed-modules.js # 🆕 æ¨¡å—æ•°æ®åˆå§‹åŒ?├── query-users.js # 查询用户和租户信æ?└── [其他脚本] ``` **å‰ç«¯** ``` frontend-v2/src/ ├── framework/ â”? ├── auth/ # âœ?è®¤è¯æ¡†æž¶ â”? â”? ├── AuthContext.tsx # 认è¯ä¸Šä¸‹æ–?â”? â”? ├── api.ts # 认è¯API â”? â”? ├── moduleApi.ts # 🆕 ç”¨æˆ·æ¨¡å—æƒé™API â”? â”? └── types.ts â”? â”?â”? ├── modules/ # âœ?æ¨¡å—æ³¨å†Œ â”? â”? ├── moduleRegistry.ts # æ¨¡å—æ³¨å†Œï¼ˆæ–°å¢žmoduleCode)ðŸ†?â”? â”? └── types.ts # 模å—类型定义 â”? â”?â”? └── layout/ # âœ?布局组件 â”? ├── MainLayout.tsx # 业务端布局 â”? ├── AdminLayout.tsx # è¿è¥ç®¡ç†ç«¯å¸ƒå±€ â”? ├── OrgLayout.tsx # 机构管ç†ç«¯å¸ƒå±€ â”? └── TopNavigation.tsx # é¡¶éƒ¨å¯¼èˆªï¼ˆæ¨¡å—æƒé™è¿‡æ»¤ï¼‰ðŸ†• â”?├── pages/ â”? ├── HomePage.tsx # é¦–é¡µï¼ˆæ¨¡å—æƒé™è¿‡æ»¤ï¼‰ðŸ†• â”? ├── admin/ # âœ?è¿è¥ç®¡ç†ç«¯é¡µé?â”? â”? ├── AdminDashboard.tsx # 概览é¡?â”? â”? ├── PromptListPage.tsx # Prompt列表(模å—中文显示)🆕 â”? â”? ├── PromptEditorPage.tsx # Prompt编辑(版本历å²å¢žå¼ºï¼‰ðŸ†• â”? â”? ├── tenants/ # 🆕 租户管ç†é¡µé¢ â”? â”? â”? ├── TenantListPage.tsx # 租户列表 â”? â”? â”? ├── TenantDetailPage.tsx # 租户详情/编辑/模å—é…ç½® â”? â”? â”? └── api/ â”? â”? â”? └── tenantApi.ts # 租户API调用 â”? â”? ├── PromptListPage.tsx # âœ?Prompt列表ï¼?54行) â”? â”? ├── PromptEditorPage.tsx # âœ?Prompt编辑器(399行) â”? â”? ├── components/ â”? â”? â”? └── PromptEditor.tsx # âœ?CodeMirror 6ï¼?45行) â”? â”? └── api/ â”? â”? └── promptApi.ts # âœ?API调用层(172行) â”? â”?â”? ├── org/ # âœ?机构管ç†ç«¯é¡µé?â”? â”? └── OrgDashboard.tsx # 概览é¡?â”? â”?â”? └── LoginPage.tsx # âœ?通用登录页(368行) ``` ### 📋 原计划结构(待开å‘) ### åŽç«¯ ``` backend/src/ ├── modules/ â”? └── admin/ # è¿è¥ç®¡ç†ç«¯æ¨¡å?â”? ├── controllers/ â”? â”? ├── tenant.controller.ts â”? â”? ├── user.controller.ts â”? â”? └── audit.controller.ts â”? ├── services/ â”? â”? ├── tenant.service.ts â”? â”? ├── user.service.ts â”? â”? └── audit.service.ts â”? └── routes/ â”? └── admin.routes.ts â”?├── common/ â”? ├── capabilities/ â”? â”? └── prompt/ # Prompt管ç†ç³»ç»Ÿ â”? â”? ├── prompt.service.ts # 核心逻辑 â”? â”? ├── prompt.controller.ts â”? â”? └── prompt.routes.ts â”? â”?â”? └── middleware/ â”? ├── auth.middleware.ts # JWTè®¤è¯ â”? ├── permission.middleware.ts # æƒé™æ£€æŸ?â”? └── tenant.middleware.ts # 租户隔离 â”?└── platform/ ├── auth/ â”? ├── auth.service.ts â”? └── jwt.service.ts └── permission/ └── permission.service.ts ``` ### å‰ç«¯ ``` frontend-v2/src/ ├── modules/ â”? └── admin/ # è¿è¥ç®¡ç†ç«¯æ¨¡å?â”? ├── pages/ â”? â”? ├── TenantManagement/ # ç§Ÿæˆ·ç®¡ç† â”? â”? ├── UserManagement/ # ç”¨æˆ·ç®¡ç† â”? â”? ├── PromptManagement/ # Promptç®¡ç† â”? â”? └── AuditLog/ # 审计日志 â”? â”?â”? ├── components/ â”? â”? ├── TenantForm/ â”? â”? ├── UserForm/ â”? â”? ├── PromptEditor/ â”? â”? └── PromptDebugSwitch/ # 全局调试开å…?â”? â”?â”? └── services/ â”? ├── tenant.service.ts â”? ├── user.service.ts â”? └── prompt.service.ts â”?└── framework/ ├── auth/ â”? └── AuthContext.tsx # 认è¯ä¸Šä¸‹æ–? └── permission/ └── PermissionContext.tsx # æƒé™ä¸Šä¸‹æ–?``` --- ## 🚀 快速开始开å? ### 1. 环境准备 ```bash # åŽç«¯ cd backend npm install jsonwebtoken bcryptjs handlebars npm install -D @types/jsonwebtoken @types/bcryptjs # å‰ç«¯ cd frontend-v2 # 无需é¢å¤–ä¾èµ–,使用现有技术栈 ``` ### 2. æ•°æ®åº“准å¤? ```bash # 1. å¤‡ä»½çŽ°æœ‰æ•°æ® cd backend npx prisma db pull --schema=./prisma/backup.prisma # 2. æ›´æ–°Schema # 编辑 prisma/schema.prisma,添加新è¡? # 3. 生æˆè¿ç§» npx prisma migrate dev --name add_admin_and_prompt_tables # 4. è¿è¡Œç§å­æ•°æ® npx prisma db seed ``` ### 3. å¼€å‘优先级 **🔴 必须先åšï¼ˆPhase 0ï¼?* 1. æ•°æ®åº“è¿ç§»ï¼ˆç»Ÿä¸€User表) 2. 创建超级管ç†å‘˜è´¦å?3. JWT认è¯ç³»ç»Ÿ **🟠 ç„¶åŽåšï¼ˆPhase 1ï¼?* 1. PromptService实现 2. Prompt管ç†API **🟡 最åŽåšï¼ˆPhase 2ï¼?* 1. 租户管ç†ç•Œé¢ 2. Prompt管ç†ç•Œé¢ --- ## 📚 核心文档导航 ### 必读文档(开å‘å‰ï¼? 1. **架构梳ç†** `00-系统设计/00-æƒé™ä¸Žè§’è‰²ä½“ç³»æ¢³ç†æŠ¥å‘Š_v1.0.md` â†?äº†è§£æ•´ä½“æž¶æž„ã€æ•°æ®åº“设计ã€å®žæ–½è·¯çº¿å›¾ 2. **需求文æ¡?* `01-需求分æž?02-通用能力层_07-è¿è¥ä¸Žæœºæž„管ç†ç«¯PRD_v2.1.md` â†?了解业务需求ã€ç”¨æˆ·æ•…事ã€éªŒæ”¶æ ‡å‡? 3. **Prompt管ç†ï¼ˆæ ¸å¿ƒï¼‰** `02-技术设è®?03-Prompt管ç†ç³»ç»Ÿå¿«é€Ÿå‚è€?md` â†?了解Prompt管ç†çš„实现细èŠ? ### å¼€å‘中å‚è€? 1. **技术设è®?* `02-技术设è®?02-通用能力层_03-Prompt管ç†ç³»ç»Ÿä¸Žç°åº¦é¢„览设计方æ¡?md` 2. **å馈建议** `00-系统设计/02-通用能力层_10-æƒé™ä½“系梳ç†å馈与修正建è®?md` --- ## 🔧 技术è¦ç‚? ### 1. JWTè®¤è¯ ```typescript // 生æˆToken const token = jwt.sign( { userId: user.id, role: user.role, tenantId: user.tenantId // 多租æˆ? }, process.env.JWT_SECRET, { expiresIn: '7d' } ); // 验è¯Token const decoded = jwt.verify(token, process.env.JWT_SECRET); ``` ### 2. 多租户隔ç¦? ```typescript // 中间件:自动注入tenantId fastify.addHook('preHandler', async (request, reply) => { const user = request.user; request.tenantId = user.tenantId; }); // ORM查询:自动过æ»?const projects = await prisma.project.findMany({ where: { tenantId: request.tenantId } }); ``` ### 3. Promptç°åº¦é¢„览 ```typescript // 核心逻辑 async get(code: string, variables: any, userId: string) { // 调试者看DRAFT版本 if (this.debugUsers.has(userId)) { const draft = await this.getDraftVersion(code); if (draft) return this.render(draft.content, variables); } // 普通用户看ACTIVE版本(带缓存ï¼? const active = await this.getActiveVersion(code); return this.render(active.content, variables); } ``` --- ## âš ï¸ å¸¸è§é—®é¢˜ ### Q1: 现有的`public.users`表怎么处ç†ï¼? **A:** Phase 0会执行数æ®è¿ç§»ï¼š 1. å°†`public.users`æ•°æ®è¿ç§»åˆ°`platform_schema.users` 2. é‡å‘½å为`public.users_backup`ä¿ç•™1å‘?3. éªŒè¯æ— è¯¯åŽåˆ é™? ### Q2: Prompt管ç†ä¼šå½±å“现有业务模å—å—ï¼? **A:** ä¸ä¼šã€‚Promptç®¡ç†æ˜¯å¢žé‡åŠŸèƒ½ï¼š - 现有硬编ç Prompt继续工作 - æ–°å¼€å‘æ¨¡å—调用`promptService.get()` - è€æ¨¡å—å¯é€æ­¥è¿ç§» ### Q3: 调试模å¼å®‰å…¨å—? **A:** 是的,有多层ä¿éšœï¼?- æƒé™æ£€æŸ¥ï¼ˆ`prompt:debug`ï¼?- 状æ€å­˜å‚¨åœ¨å†…存(登出自动失效) - 审计日志记录所有æ“ä½? ### Q4: 多租户隔离如何ä¿è¯ï¼Ÿ **A:** 三层防护ï¼?1. **APIå±?*:中间件检查`tenantId` 2. **Serviceå±?*:自动注入`tenantId`过滤 3. **DBå±?*:(Phase 2)Prisma Extension强制隔离 --- ## 📞 需è¦å¸®åŠ©ï¼Ÿ 1. **查看文档**:`README.md` å’Œå„æŠ€æœ¯è®¾è®¡æ–‡æ¡?2. **查看代ç **:å‚考DC/ASL等已有模å—的实现 3. **æé—®**:在开å‘记录中记录问题和解决方æ¡? --- ## 📅 下一步行åŠ? - [ ] Review架构设计文档 - [ ] ç¡®è®¤å¼€å‘æŽ’æœŸï¼ˆå»ºè®®4周) - [ ] 准备开å‘环å¢?- [ ] **å¯åЍPhase 0**:数æ®åº“è¿ç§» --- *ç¥å¼€å‘顺利ï¼ðŸš€*