feat(admin): Add user management and upgrade to module permission system

Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
This commit is contained in:
2026-01-16 13:42:10 +08:00
parent 98d862dbd4
commit 66255368b7
560 changed files with 70424 additions and 52353 deletions

View File

@@ -1,113 +1,147 @@
# ADMIN-餈鞱𨯫蝞∠<EFBFBD>蝡?- <20><EFBFBD><EFBFBD><E69298>𤏸恣<F0A48FB8>?
> **<2A><>𧋦嚗?* v1.0
> **<EFBFBD>𥕦遣<EFBFBD><EFBFBD>嚗?* 2026-01-11
> **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹝嚗?* `00-<2D><><EFBFBD>銝舘<E98A9D><E88898><EFBFBD>蝟餅<E9A485><EFBC94>𥁒<EFBFBD>𠽤v1.0.md`
> **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <20><><E99C88>銝?
> **<EFBFBD>恣撌交<EFBFBD>嚗?* 3-4<><EFBFBD>20鈭箏予嚗?
# ADMIN-运营管理端 - 总体开发计划
> **版本:** v1.0
> **创建日期:** 2026-01-11
> **基于文档:** `00-权限与角色体系梳理报告_v1.0.md`
> **状态:** 📋 计划中
> **预计工期:** 3-4周20人天
---
## 📅 开发时间表
### 总览
| Phase | <EFBFBD>滨妍 | 撌交<E6928C> | <20><EFBFBD>?| 撘<>憪𧢲𠯫<F0A7A2B2>?| 蝏𤘪<E89D8F><F0A498AA><EFBFBD> |
| Phase | 名称 | 工期 | 状态 | 开始日期 | 结束日期 |
|-------|------|------|------|---------|---------|
| Phase 0 | <EFBFBD>唳旿餈<EFBFBD>宏 | 1憭?| <20>?敺<><E695BA>憪?| TBD | TBD |
| Phase 1 | <EFBFBD>唳旿摨廍chema霈曇恣 | 2憭?| <20>?敺<><E695BA>憪?| TBD | TBD |
| Phase 2 | <EFBFBD>𡒊垢霈方<EFBFBD>蝟餌<EFBFBD> | 3憭?| <20>?敺<><E695BA>憪?| TBD | TBD |
| Phase 3 | <EFBFBD>滨垢霈方<EFBFBD>撖寞𦻖 | 2憭?| <20>?敺<><E695BA>憪?| TBD | TBD |
| **Phase 3.5** | **<EFBFBD><EFBFBD> Prompt蝞∠<EFBFBD>蝟餌<EFBFBD>** | **5憭?* | **<EFBFBD>?敺<><E695BA>憪?* | **TBD** | **TBD** |
| Phase 4 | 餈鞱𨯫蝞∠<EFBFBD>蝡烘VP | 5憭?| <20>?敺<><E695BA>憪?| TBD | TBD |
| Phase 5 | <EFBFBD><EFBFBD>銝枏<EFBFBD><EFBFBD><EFBFBD> | 2憭?| <20>?敺<><E695BA>憪?| TBD | TBD |
| Phase 6 | <EFBFBD><EFBFBD>蝞∠<EFBFBD>蝡?| TBD | <EFBFBD>?敺<><E695BA>憪?| TBD | TBD |
| Phase 0 | 数据迁移 | 1天 | ⏳ 待开始 | TBD | TBD |
| Phase 1 | 数据库Schema设计 | 2天 | ⏳ 待开始 | TBD | TBD |
| Phase 2 | 后端认证系统 | 3天 | ⏳ 待开始 | TBD | TBD |
| Phase 3 | 前端认证对接 | 2天 | ⏳ 待开始 | TBD | TBD |
| **Phase 3.5** | **🆕 Prompt管理系统** | **5** | **⏳ 待开始** | **TBD** | **TBD** |
| Phase 4 | 运营管理端MVP | 5天 | ⏳ 待开始 | TBD | TBD |
| Phase 5 | 租户专属登录 | 2天 | ⏳ 待开始 | TBD | TBD |
| Phase 6 | 机构管理端 | TBD | ⏳ 待开始 | TBD | TBD |
**<EFBFBD>餉恣嚗?* 20憭抬<E686AD>銝滚鉄Phase 6<><EFBFBD>蝞∠<E89D9E>蝡荔<E89DA1>
**总计:** 20天不含Phase 6机构管理端
---
## <EFBFBD><20>𣬚<EFBFBD>蝣?
### M1: <20><EFBFBD>霈暹鴌撠梁貌嚗㇊hase 0-1嚗?憭抬<E686AD>
- <20>?<3F><EFBFBD>銵函<E98AB5><EFBFBD>嚗īublic.users <20>?platform_schema.users嚗?- <20>?<3F>唳旿摨廍chema摰峕㟲<E5B395>𥕦遣
- <20>?頞<>漣蝞∠<E89D9E><E288A0><EFBFBD>摮鞉㺭<E99E89>?
### M2: 霈方<E99C88>蝟餌<E89D9F><E9A48C>舐鍂嚗㇊hase 2-3嚗?憭抬<E686AD>
- <20>?JWT霈方<E99C88>蝟餌<E89D9F>摰䂿緵
- <20>?<3F><EFBFBD>/<2F>餃枂<E9A483><EFBFBD><E8A098>舐鍂
- <20>?<3F><><EFBFBD>𡅅PI<50><EFBFBD>霈方<E99C88>靽脲擪
## 🎯 里程碑
### M3: Prompt蝞∠<EFBFBD>蝟餌<EFBFBD><EFBFBD>舐鍂嚗㇊hase 3.5嚗?憭抬<E686AD>潃?- <20>?PromptService摰䂿緵
- <EFBFBD>?Prompt蝞∠<E89D9E>API
- <EFBFBD>?Prompt蝞∠<E89D9E><E288A0>滨垢<E6BBA8>屸𢒰
- <EFBFBD>?<3F><EFBFBD><EFBFBD><E99D9A><EFBFBD><E69298>?
### M4: 餈鞱𨯫蝞∠<E89D9E>蝡烘VP嚗㇊hase 4嚗?憭抬<E686AD>
- <20>?蝘<><E89D98>蝞∠<E89D9E>嚗㇃RUD嚗?- <20>?<3F><><EFBFBD><EFBFBD>滨蔭嚗𡿨ogo/<2F>峕艶/銝駁<E98A9D><E9A781><EFBFBD>
- <20>?Feature Flag蝞∠<E89D9E>
### M1: 基础设施就绪Phase 0-13天
- ✅ 用户表统一public.users → platform_schema.users
- ✅ 数据库Schema完整创建
- ✅ 超级管理员种子数据
### M5: <EFBFBD><EFBFBD>銝枏<EFBFBD><EFBFBD><EFBFBD>嚗㇊hase 5嚗?憭抬<E686AD>
- <EFBFBD>?蝘<><E89D98>銝枏<E98A9D><E69E8F><EFBFBD>憿蛛<E686BF>`/t/{code}/login`嚗?- <20>?<3F><><EFBFBD><EFBFBD><EFBFBD><E586BD><EFBFBD>頧?- <20>?<3F><EFBFBD>頝舐眏<E88890><E79C8F><EFBFBD>
### M2: 认证系统可用Phase 2-35天
- ✅ JWT认证系统实现
- ✅ 登录/登出功能可用
- ✅ 所有API加上认证保护
### M3: Prompt管理系统可用Phase 3.55天
- ✅ PromptService实现
- ✅ Prompt管理API
- ✅ Prompt管理前端界面
- ✅ 全局调试开关
### M4: 运营管理端MVPPhase 45天
- ✅ 租户管理CRUD
- ✅ 品牌配置Logo/背景/主题色)
- ✅ Feature Flag管理
### M5: 租户专属登录Phase 52天
- ✅ 租户专属登录页(`/t/{code}/login`
- ✅ 品牌动态加载
- ✅ 智能路由分发
### M6: 机构管理端Phase 6待定
- <EFBFBD><EFBFBD> <20>駁堺蝞∠<E89D9E>蝡?- <20><> <20><EFBFBD>蝞∠<E89D9E>蝡?
- 🔄 医院管理端
- 🔄 药企管理端
---
## <EFBFBD>𡤻 鈭箏<E988AD><EFBFBD><E99F8F><EFBFBD><EFBFBD>瘙?
## 👥 人力资源需求
### 核心团队配置
| 角色 | 人数 | 工作内容 | 时间投入 |
|------|------|---------|---------|
| **<EFBFBD>𡒊垢撘<EFBFBD><EFBFBD>?* | 1鈭?| Phase 0-2, 3.5<EFBFBD>𡒊垢, Phase 4<EFBFBD>𡒊垢 | 12憭?|
| **<EFBFBD>滨垢撘<EFBFBD><EFBFBD>?* | 1鈭?| Phase 3, 3.5<EFBFBD>滨垢, Phase 4<EFBFBD>滨垢, Phase 5 | 10憭?|
| **瘚贝<EFBFBD>** | 0.5鈭?| <20><><EFBFBD>瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂?| 3憭?|
| **鈭批<EFBFBD>/UI** | 0.2鈭?| <20><><EFBFBD>霈扎<E99C88><E6898E>I摰⊥瓲 | <20><EFBFBD> |
| **后端开发** | 1| Phase 0-2, 3.5后端, Phase 4后端 | 12|
| **前端开发** | 1| Phase 3, 3.5前端, Phase 4前端, Phase 5 | 10|
| **测试** | 0.5人 | 集成测试、安全测试 | 3|
| **产品/UI** | 0.2人 | 需求确认、UI审核 | 按需 |
**总人天:** 约25人天含测试
### 技能要求
**<EFBFBD>颱犖憭抬<EFBFBD>** 蝥?5鈭箏予嚗<E4BA88>鉄瘚贝<E7989A>嚗?
### <20><><EFBFBD><EFBFBD>瘙?
**后端开发:**
- <EFBFBD>?Node.js + Fastify
- <EFBFBD>?Prisma ORM
- <EFBFBD>?PostgreSQL
- <EFBFBD>?JWT霈方<EFBFBD>
- <EFBFBD>?憭𡁶<E686AD><F0A181B6>瑟沲<E7919F><E6B2B2><EFBFBD>撉?
- Node.js + Fastify
- Prisma ORM
- PostgreSQL
- JWT认证
- ✅ 多租户架构经验
**前端开发:**
- <EFBFBD>?React 19 + TypeScript
- <EFBFBD>?Ant Design 6.0
- <EFBFBD>?React Context/Hooks
- <EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD>蝏誯<E89D8F>
- React 19 + TypeScript
- Ant Design 6.0
- React Context/Hooks
- ✅ 权限控制经验
---
## <EFBFBD>𣑐 鈭支<E988AD><E694AF><EFBFBD><E68B87>?
## 📦 交付物清单
### Phase 0: 数据迁移
- [ ] <EFBFBD>唳旿餈<EFBFBD><EFBFBD>𡁏𧋦嚗𠄎QL嚗?- [ ] <20>唳旿撉諹<E69289><E8ABB9><EFBFBD>
- [ ] 数据迁移脚本SQL
- [ ] 数据验证报告
- [ ] 回滚方案文档
### Phase 1: 数据库Schema
- [ ] 完整的Prisma Schema
- [ ] 迁移脚本
- [ ] 种子数据脚本
- [ ] <EFBFBD>唳旿摨𡌃R<EFBFBD>?
### Phase 2: <20>𡒊垢霈方<E99C88>
- [ ] JWT撌亙<E6928C>蝐鳴<E89D90>`jwt.service.ts`嚗?- [ ] 霈方<E99C88>API嚗ǐegister/login/logout嚗?- [ ] 霈方<E99C88>銝剝𡢿隞塚<E99A9E>`auth.middleware.ts`嚗?- [ ] Postman瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>
- [ ] API<50><49>﹝嚗𠄎wagger嚗?
### Phase 3: <20>滨垢霈方<E99C88>
- [ ] <20><EFBFBD>憿菟𢒰嚗ǑLoginPage.tsx`嚗?- [ ] 霈方<E99C88>銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD>`AuthContext.tsx`嚗?- [ ] <20><><EFBFBD>銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD><EFBFBD>撖寞𦻖<E5AF9E>𡒊垢嚗?- [ ] <20>滨垢瘚贝<E7989A><E8B49D><EFBFBD>
- [ ] 数据库ER图
### Phase 3.5: Prompt蝞∠<E89D9E>蝟餌<E89D9F> 潃?- [ ] PromptService嚗Ǒprompt.service.ts`嚗?- [ ] Prompt蝞∠<E89D9E>API
### Phase 2: 后端认证
- [ ] JWT工具类`jwt.service.ts`
- [ ] 认证APIregister/login/logout
- [ ] 认证中间件(`auth.middleware.ts`
- [ ] Postman测试集合
- [ ] API文档Swagger
### Phase 3: 前端认证
- [ ] 登录页面(`LoginPage.tsx`
- [ ] 认证上下文(`AuthContext.tsx`
- [ ] 权限上下文更新(对接后端)
- [ ] 前端测试用例
### Phase 3.5: Prompt管理系统 ⭐
- [ ] PromptService`prompt.service.ts`
- [ ] Prompt管理API
- [ ] Prompt管理前端界面
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞?- [ ] Prompt蝞∠<E89D9E><E288A0><EFBFBD><E586BD><EFBFBD>
- [ ] 全局调试开关组件
- [ ] Prompt管理用户手册
### Phase 4: 运营管理端MVP
- [ ] 租户管理界面
- [ ] 品牌配置界面
- [ ] Feature Flag管理界面
- [ ] 餈鞱𨯫蝡舐鍂<EFBFBD><EFBFBD><EFBFBD>?
- [ ] 运营端用户手册
### Phase 5: 租户专属登录
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>憿蛛<EFBFBD>`TenantLoginPage.tsx`嚗?- [ ] 蝘<><E89D98><EFBFBD>滨蔭API嚗Ǒ/api/public/tenant-config`嚗?- [ ] <20><><EFBFBD><EFBFBD>㰘蝸<E3B098><EFBFBD>
- [ ] 租户登录页(`TenantLoginPage.tsx`
- [ ] 租户配置API`/api/public/tenant-config`
- [ ] 品牌加载逻辑
- [ ] 路由分发逻辑
---
## <EFBFBD><20><><EFBFBD><EFBFBD>韏?
### <20><EFBFBD>npm<70><6D><EFBFBD><EFBFBD>𡒊垢嚗?
## 🔧 技术依赖
### 新增npm包后端
```json
{
"dependencies": {
@@ -122,7 +156,8 @@
}
```
### <EFBFBD><EFBFBD>npm<EFBFBD><EFBFBD><EFBFBD><EFBFBD>滨垢嚗?
### 新增npm包前端
```json
{
"dependencies": {
@@ -133,9 +168,10 @@
### 基础设施要求
- <EFBFBD>?PostgreSQL 14+<EFBFBD>𣈲<EFBFBD><EFBFBD>ISTEN/NOTIFY嚗?- <20>?<3F><EFBFBD>鈭䭲SS嚗<53><E59A97><EFBFBD><EFBFBD>皞𣂼<E79A9E><F0A382BC><EFBFBD>
- <EFBFBD>?Node.js 18+
- <EFBFBD>?React 19
- PostgreSQL 14+支持LISTEN/NOTIFY
- ✅ 阿里云OSS品牌资源存储
- ✅ Node.js 18+
- ✅ React 19
---
@@ -144,7 +180,7 @@
### 进度计算公式
```
<EFBFBD><EFBFBD>摨?= (撌脣<E6928C><E884A3>𣂷遙<F0A382B7>⊥㺭 / <20>颱遙<E9A2B1>⊥㺭) <EFBFBD> 100%
总进度 = (已完成任务数 / 总任务数) × 100%
```
### 当前进度(示例)
@@ -158,20 +194,22 @@ Phase 3.5: ░░░░░░░░░░ 0% (0/18)
Phase 4: ░░░░░░░░░░ 0% (0/25)
Phase 5: ░░░░░░░░░░ 0% (0/10)
<EFBFBD><EFBFBD>摨? <20><><EFBFBD><EFBFBD><EFBFBD><E78897><EFBFBD><E78897><EFBFBD><E78897><EFBFBD> 1% (1/110)
总进度: █░░░░░░░░░ 1% (1/110)
```
---
## <EFBFBD>𩤃<EFBFBD> 憌𡡞埯銝𤾸<E98A9D>撖?
### 擃㗛<E69383><E3979B>拚★嚗<E29885><E59A97><EFBFBD><EFBFBD><E6BBA8>單釣嚗?
| 憌𡡞埯 | 蝥批<E89DA5> | 敶勗<E695B6> | 摨𥪜笆<F0A5AA9C>芣鴌 | 韐蠘提鈭?|
## ⚠️ 风险与应对
### 高风险项(需重点关注)
| 风险 | 级别 | 影响 | 应对措施 | 负责人 |
|------|------|------|---------|--------|
| **<EFBFBD>唳旿餈<EFBFBD>宏憭梯揖** | <EFBFBD>𣞁 擃?| <20><EFBFBD><E4ADBE>臬𢆡撘<F0A286A1><E69298>?| 1. 摰峕㟲憭<E39FB2><br>2. <EFBFBD><EFBFBD>郊餈<EFBFBD><br>3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <20>𡒊垢韐蠘提鈭?|
| **憭𡁶<EFBFBD><EFBFBD><EFBFBD>蝳餅<EFBFBD>瘣?* | <20>𣞁 擃?| <20>唳旿瘜<E697BF>蠧 | 1. 銝交聢隞<E881A2><E99A9E>摰⊥䰻<br>2. <20>芸𢆡<E88AB8>𡝗<EFBFBD>霂?br>3. 摰匧<E691B0>瘚贝<E7989A> | <20><EFBFBD> |
| **JWT摰匧<EFBFBD><EFBFBD><EFBFBD>** | <EFBFBD>椬 銝?| 霈方<E99C88>蝏閗<E89D8F> | 1. 雿輻鍂撘箏<E69298><E7AE8F>?br>2. <20><EFBFBD><E5899B><EFBFBD>𧒄<EFBFBD>?br>3. Token<65>瑟鰵<E7919F><EFBFBD> | <20>𡒊垢韐蠘提鈭?|
| **Prompt蝞∠<EFBFBD>憭齿<EFBFBD>摨?* | <20>椬 銝?| 撘<><E69298>穃辣<E7A983>?| 1. <20><><EFBFBD><EFBFBD>挽霈⊥<E99C88>獢?br>2. <20><><EFBFBD><EFBFBD>唳瓲敹<E793B2><E695B9><EFBFBD>?br>3. <20>啣漲<E595A3><EFBFBD> | <20><EFBFBD> |
| **<EFBFBD>滨垢<EFBFBD><EFBFBD><EFBFBD>撖寞𦻖** | <EFBFBD>叚 雿?| 頧餃凝撱嗆<E692B1> | 1. 憭滨鍂<E6BBA8><EFBFBD><EFBFBD>沲<br>2. 霂衣<E99C82><E8A1A3>亙藁<E4BA99><E89781>﹝ | <20>滨垢韐蠘提鈭?|
| **数据迁移失败** | 🔴 高 | 无法启动开发 | 1. 完整备份<br>2. 分步迁移<br>3. 准备回滚方案 | 后端负责人 |
| **多租户隔离漏洞** | 🔴 高 | 数据泄露 | 1. 严格代码审查<br>2. 自动化测试<br>3. 安全测试 | 全员 |
| **JWT安全问题** | 🟡 中 | 认证绕过 | 1. 使用强密钥<br>2. 短过期时间<br>3. Token刷新机制 | 后端负责人 |
| **Prompt管理复杂度** | 🟡 中 | 开发延期 | 1. 参考设计文档<br>2. 先实现核心功能<br>3. 灰度发布 | 全员 |
| **前端权限对接** | 🟢 低 | 轻微延期 | 1. 复用现有框架<br>2. 详细接口文档 | 前端负责人 |
---
@@ -179,7 +217,8 @@ Phase 5: ░░░░░░░░░░ 0% (0/10)
### Phase 0-1: 基础设施
- [ ] `platform_schema.users`表存在且包含所有必需字段
- [ ] <EFBFBD>漣蝞∠<EFBFBD><EFBFBD>䁅揭<EFBFBD>瑕虾隞亦蒈敶?- [ ] <20><><EFBFBD>㕑”蝏𤘪<E89D8F>蝚血<E89D9A>Schema霈曇恣
- [ ] 超级管理员账号可以登录
- [ ] 所有表结构符合Schema设计
### Phase 2-3: 认证系统
- [ ] 登录成功后返回有效JWT Token
@@ -194,9 +233,11 @@ Phase 5: ░░░░░░░░░░ 0% (0/10)
- [ ] 发布Prompt后缓存自动更新
### Phase 4: 运营管理端MVP
- [ ] <EFBFBD>臭誑<EFBFBD>𥕦遣蝘<EFBFBD><EFBFBD>撟園<EFBFBD>蝵桀抅<EFBFBD>砌縑<EFBFBD>?- [ ] <20>臭誑銝𠹺<E98A9D>Logo<67><EFBFBD><E8ABB9>臬㦛<E887AC>記SS
- [ ] 可以创建租户并配置基本信息
- [ ] 可以上传Logo和背景图到OSS
- [ ] 可以配置主题色并实时预览
- [ ] <EFBFBD>臭誑蝞∠<EFBFBD>Feature Flag<EFBFBD><EFBFBD>?
- [ ] 可以管理Feature Flag开关
### Phase 5: 租户专属登录
- [ ] `/t/{code}/login`显示租户品牌
- [ ] Logo、背景图、主题色正确加载
@@ -208,46 +249,54 @@ Phase 5: ░░░░░░░░░░ 0% (0/10)
### 设计文档
- `00-系统设计/00-权限与角色体系梳理报告_v1.0.md` - 总体架构
- `00-蝟餌<EFBFBD>霈曇恣/02-<2D>𡁶鍂<F0A181B6><EFBFBD><EFBFBD>10-<2D><><EFBFBD>雿梶頂璇喟<E79287><E5969F><EFBFBD>銝𦒘耨甇<E880A8>遣霈?md` - <EFBFBD><EFBFBD>撱箄悅
- `00-系统设计/02-通用能力层_10-权限体系梳理反馈与修正建议.md` - 反馈建议
### <EFBFBD><EFBFBD><EFBFBD><EFBFBD>獢?- `01-<2D><><EFBFBD><E79899><EFBFBD>?02-<2D>𡁶鍂<F0A181B6><EFBFBD><EFBFBD>07-餈鞱𨯫銝擧㦤<E693A7><E3A6A4><EFBFBD><E681A3>垢PRD_v2.1.md` - <20><><EFBFBD>祕餈?
### <20><><EFBFBD><EFBFBD>獢?- `02-<2D><><EFBFBD>航挽霈?03-Prompt蝞∠<E89D9E>蝟餌<E89D9F>敹恍<E695B9><EFBFBD><E7AC94>?md` - Prompt蝞∠<EFBFBD>摰䂿緵
- `02-<2D><><EFBFBD>航挽霈?02-<2D>𡁶鍂<F0A181B6><EFBFBD><EFBFBD>03-Prompt蝞∠<E89D9E>蝟餌<E89D9F>銝𡒊<E98A9D>摨阡<E691A8><EFBFBD>挽霈⊥䲮獢?md` - 霂衣<E99C82>霈曇恣
### 需求文档
- `01-需求分析/02-通用能力层_07-运营与机构管理端PRD_v2.1.md` - 需求详述
### 技术文档
- `02-技术设计/03-Prompt管理系统快速参考.md` - Prompt管理实现
- `02-技术设计/02-通用能力层_03-Prompt管理系统与灰度预览设计方案.md` - 详细设计
### 开发文档(本文件夹)
- `01-TODO清单可追踪.md` - 详细任务清单,实时跟踪进度
### 撘<><E69298><EFBFBD><EFBFBD><E78DA2><EFBFBD><EFBFBD>隞嗅允嚗?- `01-TODO皜<4F><E79A9C><EFBFBD>虾餈質葵嚗?md` - 霂衣<E99C82>隞餃𦛚皜<F0A69B9A><E79A9C><EFBFBD><E59A97><EFBFBD><EFBFBD>頦芾<E9A0A6>摨?
---
## 📞 联系方式
### 憿寧𤌍蝏?
### 项目组
| 角色 | 姓名 | 联系方式 | 主要职责 |
|------|------|---------|---------|
| **鈭批<EFBFBD>韐蠘提鈭?* | [<EFBFBD><EFBFBD>] | - | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?|
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>** | [<EFBFBD><EFBFBD>] | - | <EFBFBD><EFBFBD>霈曇恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑?|
| **<EFBFBD>𡒊垢撘<EFBFBD><EFBFBD>?* | [<EFBFBD><EFBFBD>] | - | <EFBFBD>𡒊垢摰䂿緵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>霈曇恣 |
| **<EFBFBD>滨垢撘<EFBFBD><EFBFBD>?* | [<EFBFBD><EFBFBD>] | - | <EFBFBD>滨垢摰䂿緵<EFBFBD><EFBFBD>I撖寞𦻖 |
| **瘚贝<EFBFBD>** | [<EFBFBD><EFBFBD>] | - | 瘚贝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?|
| **产品负责人** | [待定] | - | 需求澄清、验收 |
| **技术负责人** | [待定] | - | 架构设计、技术决策 |
| **后端开发** | [待定] | - | 后端实现、数据库设计 |
| **前端开发** | [待定] | - | 前端实现、UI对接 |
| **测试** | [待定] | - | 测试计划、质量保障 |
---
## 🎯 成功标准
### 憿寧𤌍<EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銋?
1. **<EFBFBD><EFBFBD>摰峕㟲<EFBFBD>?*
- <20>?<3F><><EFBFBD>侨0<E4BEA8><EFBFBD>摰䂿緵
- <EFBFBD>?撉峕𤣰<E5B395><F0A4A3B0><EFBFBD><EFBFBD><EFBFBD>
### 项目成功的定义
1. **功能完整性**
- ✅ 所有P0功能实现
- ✅ 验收标准通过
2. **质量标准**
- <EFBFBD>?<3F>0/P1 Bug
- <EFBFBD>?隞<><E99A9E>摰⊥䰻<E28AA5><EFBFBD>
- <EFBFBD>?摰匧<E691B0>瘚贝<E7989A><E8B49D><EFBFBD>
- ✅ 无P0/P1 Bug
- ✅ 代码审查通过
- ✅ 安全测试通过
3. **时间标准**
- <EFBFBD>?<3F>㕑恣<E39591><EFBFBD><E98DA6><EFBFBD><E7909C><EFBFBD>捂簣3憭抬<E686AD>
- <EFBFBD>?<3F>牐艇<E78990>滚辣<E6BB9A>?
- ✅ 按计划完成允许±3天
- ✅ 无严重延期
4. **文档标准**
- <EFBFBD>?API<EFBFBD><EFBFBD>﹝摰峕㟲
- <EFBFBD>?<3F><EFBFBD><E586BD><EFBFBD>摰峕㟲
- API文档完整
- ✅ 用户手册完整
---
@@ -257,16 +306,20 @@ Phase 5: ░░░░░░░░░░ 0% (0/10)
1. **数据安全第一**
- Phase 0必须有完整备份和回滚方案
- 憭𡁶<EFBFBD><EFBFBD><EFBFBD>蝳餃<EFBFBD>憿颱艇<EFBFBD><EFBFBD>霂?
2. **Prompt蝞∠<E89D9E><E288A0>舀瓲敹?*
- 多租户隔离必须严格测试
2. **Prompt管理是核心**
- Phase 3.5不可省略
- 撱箄悅銝窰hase 4撟嗉<EFBFBD><EFBFBD><EFBFBD>?
3. **皜鞱<E79A9C>撘誩<E69298><E8AAA9>?*
- 建议与Phase 4并行开发
3. **渐进式开发**
- 不要一次性改造所有API
- 优先保护敏感API
4. **持续测试**
- 瘥譍葵Phase摰峕<EFBFBD><EFBFBD>𡒊<EFBFBD><EFBFBD><EFBFBD>霂? - 銝滩<E98A9D>蝑匧<E89D91><E58CA7><EFBFBD><EFBFBD>𡡞<EFBFBD><F0A1A19E><EFBFBD>霂?
- 每个Phase完成后立即测试
- 不要等到最后集成测试
---
*最后更新2026-01-11*

View File

@@ -1,10 +1,11 @@
# ADMIN-餈鞱𨯫蝞∠<EFBFBD>蝡?- 撘<><E69298>騻ODO皜<4F><E79A9C>
# ADMIN-运营管理端 - 开发TODO清单
> **<EFBFBD><EFBFBD>𧋦嚗?* v1.3
> **<EFBFBD>𥕦遣<EFBFBD><EFBFBD>嚗?* 2026-01-11
> **版本:** v1.3
> **创建日期:** 2026-01-11
> **最后更新:** 2026-01-12
> **总进度:** 98/110 (89%)
> **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <EFBFBD>?Phase 3.5.5 撌脣<EFBFBD><EFBFBD><EFBFBD>Phase 4.0 <EFBFBD><EFBFBD>蝞∠<EFBFBD>撌脣<EFBFBD><EFBFBD>?
> **状态:** Phase 3.5.5 已完成,Phase 4.0 租户管理已完成
---
## 📊 总体进度
@@ -13,58 +14,59 @@
████████░░ 89%
```
| Phase | 摰峕<EFBFBD> | <20>餉恣 | 餈𥕦漲 | <20><EFBFBD>?|
| Phase | 完成 | 总计 | 进度 | 状态 |
|-------|------|------|------|------|
| Phase 0 | 10 | 10 | 100% | <EFBFBD>?撌脣<E6928C><E884A3>?|
| Phase 1 | 15 | 15 | 100% | <EFBFBD>?撌脣<E6928C><E884A3>?|
| Phase 2 | 20 | 20 | 100% | <EFBFBD>?撌脣<E6928C><E884A3>?|
| Phase 3 | 12 | 12 | 100% | <EFBFBD>?撌脣<E6928C><E884A3>?|
| Phase 3.5 | 18 | 18 | 100% | <EFBFBD>?撌脣<E6928C><E884A3>?2026-01-12 |
| Phase 4 | 19 | 25 | 76% | <EFBFBD>银 蝘<><E89D98>蝞∠<E89D9E>撌脣<E6928C><E884A3>?2026-01-12 |
| Phase 5 | 0 | 10 | 0% | <EFBFBD>?敺<><E695BA>憪?|
| 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% | ⏳ 待开始 |
---
## <EFBFBD><EFBFBD> 瘚贝<E7989A>韐血噡靽⊥<E99DBD>嚗𠄎eed<65>唳旿嚗?
## 📋 测试账号信息Seed数据
> ⚠️ 默认密码:`123456`
> <EFBFBD>?**<2A><EFBFBD>瘚贝<E7989A><E8B49D><EFBFBD>**嚗?026-01-11
> ✅ **登录测试通过**2026-01-11
### 运营团队账号
| <EFBFBD>𧢲㦤<EFBFBD>?| 憪枏<E686AA> | 閫坿𠧧 | 蝘<><E89D98> | 霂湔<E99C82> |
| 手机号 | 姓名 | 角色 | 租户 | 说明 |
|--------|------|------|------|------|
| `13800000001` | <EFBFBD>漣蝞∠<EFBFBD><EFBFBD>?| SUPER_ADMIN | 憯寡<EFBFBD>敺芰<EFBFBD><EFBFBD><EFBFBD> | <20><EFBFBD><E4BAA4><EFBFBD><EFBFBD><EFBFBD><E39787>?|
| `13800000002` | Prompt撌亦<EFBFBD>撣?| PROMPT_ENGINEER | 憯寡<EFBFBD>敺芰<EFBFBD><EFBFBD><EFBFBD> | Prompt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
| `13800000001` | 超级管理员 | SUPER_ADMIN | 壹证循科技 | 拥有所有权限 |
| `13800000002` | Prompt工程师 | PROMPT_ENGINEER | 壹证循科技 | Prompt调试权限 |
### 医院测试账号
| <EFBFBD>𧢲㦤<EFBFBD>?| 憪枏<E686AA> | 閫坿𠧧 | 蝘<><E89D98> | 蝘穃恕 |
| 手机号 | 姓名 | 角色 | 租户 | 科室 |
|--------|------|------|------|------|
| `13800000003` | <EFBFBD>駁堺蝞∠<EFBFBD><EFBFBD>?| HOSPITAL_ADMIN | <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| - |
| `13800000004` | 蝘穃恕銝颱遙 | DEPARTMENT_ADMIN | <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| 撉函<E69289> |
| `13800000005` | <EFBFBD><EFBFBD>𡁜龫<EFBFBD>?| USER | <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| 撉函<E69289> |
| `13800000003` | 医院管理员 | HOSPITAL_ADMIN | 北京积水潭医院 | - |
| `13800000004` | 科室主任 | DEPARTMENT_ADMIN | 北京积水潭医院 | 骨科 |
| `13800000005` | 普通医生 | USER | 北京积水潭医院 | 骨科 |
### 药企测试账号
| <EFBFBD>𧢲㦤<EFBFBD>?| 憪枏<E686AA> | 閫坿𠧧 | 蝘<><E89D98> |
| 手机号 | 姓名 | 角色 | 租户 |
|--------|------|------|------|
| `13800000006` | <EFBFBD><EFBFBD>蝞∠<EFBFBD><EFBFBD>?| PHARMA_ADMIN | 甇衣眎<EFBFBD>嗉晓 |
| `13800000007` | <EFBFBD><EFBFBD><EFBFBD>𠉛弦<EFBFBD>?| USER | 甇衣眎<EFBFBD>嗉晓 |
| `13800000006` | 药企管理员 | PHARMA_ADMIN | 武田制药 |
| `13800000007` | 药企研究员 | USER | 武田制药 |
### 个人用户账号
| <EFBFBD>𧢲㦤<EFBFBD>?| 憪枏<E686AA> | 閫坿𠧧 | 蝘<><E89D98> |
| 手机号 | 姓名 | 角色 | 租户 |
|--------|------|------|------|
| `13800000008` | 个人用户 | USER | 个人用户 |
### 租户信息
| <EFBFBD><EFBFBD>Code | <EFBFBD>滨妍 | 蝐餃<E89D90> | <20><EFBFBD>?|
| 租户Code | 名称 | 类型 | 状态 |
|----------|------|------|------|
| `yizhengxun` | 憯寡<EFBFBD>敺芰<EFBFBD><EFBFBD><EFBFBD> | INTERNAL | <EFBFBD>?瘣餉<E798A3> |
| `jishuitan` | <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| HOSPITAL | <EFBFBD>?瘣餉<E798A3> |
| `takeda` | 甇衣眎<EFBFBD>嗉晓 | PHARMA | <EFBFBD>?瘣餉<E798A3> |
| `public` | 銝芯犖<EFBFBD><EFBFBD> | PUBLIC | <EFBFBD>?瘣餉<E798A3> |
| `yizhengxun` | 壹证循科技 | INTERNAL | ✅ 活跃 |
| `jishuitan` | 北京积水潭医院 | HOSPITAL | ✅ 活跃 |
| `takeda` | 武田制药 | PHARMA | ✅ 活跃 |
| `public` | 个人用户 | PUBLIC | ✅ 活跃 |
### 登录URL
@@ -72,90 +74,123 @@
|------|-----|
| 通用登录 | `http://localhost:3000/login` |
| 壹证循科技 | `http://localhost:3000/t/yizhengxun/login` |
| <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| `http://localhost:3000/t/jishuitan/login` |
| 北京积水潭医院 | `http://localhost:3000/t/jishuitan/login` |
| 武田制药 | `http://localhost:3000/t/takeda/login` |
| 个人用户 | `http://localhost:3000/t/public/login` |
---
## Phase 0: <EFBFBD>唳旿餈<EFBFBD>宏嚗?憭抬<E686AD><E68AAC>?撌脣<E6928C><E884A3>?
**<2A><EFBFBD>嚗?* 蝏煺<E89D8F><E785BA><EFBFBD>銵剁<E98AB5><E58981><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7AE87><EFBFBD>
## Phase 0: 数据迁移1天✅ 已完成
> <EFBFBD>𩤃<EFBFBD> **瘜冽<E7989C>**嚗?026-01-11 <20>䭾㺭<E4ADBE><EFBFBD>鈭𧢲<E988AD>嚗屸<E59A97><E5B1B8><EFBFBD>"<22>滚遣+seed"<22><EFBFBD><E5ADB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5ADB5><EFBFBD>祕閫?[鈭𧢲<E988AD><F0A7A2B2><EFBFBD>](../../../08-憿寧𤌍蝞∠<E89D9E>/2026-01-11-<2D>唳旿摨㮖<E691A8><E3AE96><EFBFBD><EFBFBD><EFBFBD>.md)
**目标:** 统一用户表,准备基础环境
> ⚠️ **注意**2026-01-11 因数据库事故,采用了"重建+seed"方式而非迁移方式。详见 [事故总结](../../../08-项目管理/2026-01-11-数据库事故总结.md)
### 数据备份
- [x] <EFBFBD>`public.users`銵冽㺭<EFBFBD>?<3F>?雿輻鍂 backup_20260111_131506.sql
- [x] <EFBFBD>`platform_schema.User`銵冽㺭<EFBFBD>?<3F>?<3F><EFBFBD>
- [x] 备份`public.users`表数据 ✅ 使用 backup_20260111_131506.sql
- [x] 备份`platform_schema.User`表数据 ✅ 同上
- [x] 备份所有关联表如AdminLog✅ 同上
### 数据迁移
- [x] 蝻硋<EFBFBD><EFBFBD><EFBFBD>𡁏𧋦 <20>?<3F>嫣蛹雿輻鍂 prisma/seed.ts <EFBFBD>滚遣
- [x] <EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD><EFBFBD>唂ID <20>?<3F>託UID嚗争<E59A97> <20>託UID<49>芸𢆡<E88AB8><F0A286A1><EFBFBD>
- [x] <EFBFBD>湔鰵憭㚚睸<EFBFBD><EFBFBD> <20>?schema.prisma 撌脣<EFBFBD>銋?- [x] 撉諹<E69289><E8ABB9>唳旿摰峕㟲<E5B395>?<3F>?verify_system.ts 撉諹<E69289><E8ABB9><EFBFBD>
- [x] 编写迁移脚本 ✅ 改为使用 prisma/seed.ts 重建
- [x] 处理ID映射旧ID → 新UUID✅ 新UUID自动生成
- [x] 更新外键关联 ✅ schema.prisma 已定义
- [x] 验证数据完整性 ✅ verify_system.ts 验证通过
### 数据清理
- [x] <EFBFBD>滚𦶢<EFBFBD>public.users`銝槁public.users_backup` <EFBFBD>?靽萘<E99DBD> mock <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澆捆
- [x] 霈曄蔭7憭拙<EFBFBD><EFBFBD>芸𢆡<EFBFBD>𣳇膄<EFBFBD><EFBFBD> <20>?銝滚<E98A9D><E6BB9A><EFBFBD><EFBFBD><E996AC>撌脤<E6928C><E884A4><EFBFBD>銵典<E98AB5>摰寞䲮獢?
### 頞<>漣蝞∠<E89D9E><E288A0>?- [x] <20>𥕦遣頞<E981A3>漣蝞∠<E89D9E><E288A0>䁅揭<E48185>?<3F>?13800000001
- [x] 撉諹<E69289>韐血噡<E8A180>舐鍂 <20>?seed <20><EFBFBD><E689AF>𣂼<EFBFBD>
- [x] 重命名`public.users``public.users_backup` ✅ 保留 mock 用户用于兼容
- [x] 设置7天后自动删除提醒 ✅ 不再需要,已采用双表兼容方案
### 超级管理员
- [x] 创建超级管理员账号 ✅ 13800000001
- [x] 验证账号可用 ✅ seed 执行成功
### 验证
- [x] <EFBFBD>唳旿<EFBFBD>⊥㺭銝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?5<><EFBFBD><E586BD>?蝘<><E89D98><EFBFBD>?蝘穃恕<E7A983>?5<><35><EFBFBD>
- [x] <EFBFBD>喲睸摮埈挾摰峕㟲<EFBFBD><EFBFBD><EFBFBD>?<3F>?<3F><><EFBFBD><EFBFBD>憛怠<E6869B>畾萄歇憛怠<E6869B>
- [x] 蝻硋<EFBFBD>撉諹<EFBFBD><EFBFBD><EFBFBD> <20>?verify_all_users.ts
- [x] 数据条数一致性检查 ✅ 5用户、3租户、2科室、15权限
- [x] 关键字段完整性检查 ✅ 所有必填字段已填充
- [x] 编写验证报告 ✅ verify_all_users.ts
---
## Phase 1: <EFBFBD>唳旿摨廍chema霈曇恣嚗?憭抬<E686AD><E68AAC>?撌脣<E6928C><E884A3>?
**<2A><EFBFBD>嚗?* <20>𥕦遣<F0A595A6><E981A3><EFBFBD>㗇瓲敹<E793B2>
## Phase 1: 数据库Schema设计2天✅ 已完成
> <EFBFBD>?**摰峕<E691B0><E5B395><EFBFBD>**嚗?026-01-11 | 霂西<E99C82> `backend/prisma/schema.prisma` <20>?`backend/prisma/seed.ts`
**目标:** 创建所有核心表
### Day 1: 撟喳蝱<E596B3><EFBFBD>銵?<3F>?
#### tenants銵?<3F>?- [x] 摰帋<E691B0>Prisma Schema <20>?`platform_schema.tenants`
> ✅ **完成日期**2026-01-11 | 详见 `backend/prisma/schema.prisma` 和 `backend/prisma/seed.ts`
### Day 1: 平台核心表 ✅
#### tenants表 ✅
- [x] 定义Prisma Schema ✅ `platform_schema.tenants`
- [x] 添加必需字段id, code, name, type, status
- [x] 添加品牌配置字段config JSONB
- [x] 添加配额字段totalQuota, usedQuota
#### users銵冽<EFBFBD>撅?<3F>?- [x] 瘛餃<E7989B>`tenantId`摮埈挾 <20>?- [x] 瘛餃<E7989B>`departmentId`摮埈挾 <20>?- [x] 靽格㺿`role`摮埈挾銝慟num蝐餃<E89D90> <20>?`UserRole`
- [x] 瘛餃<EFBFBD><EFBFBD> <20>?
#### tenant_members銵?<3F>?- [x] 摰帋<E691B0>銵函<E98AB5><E587BD>?<3F>?`platform_schema.tenant_members`
- [x] 撱箇<EFBFBD>銝𤢂enants<EFBFBD>吴sers<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?- [x] 瘛餃<E7989B>`role`摮埈挾嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>閫坿𠧧嚗争<EFBFBD>
#### users表扩展 ✅
- [x] 添加`tenantId`字段 ✅
- [x] 添加`departmentId`字段 ✅
- [x] 修改`role`字段为Enum类型 ✅ `UserRole`
- [x] 添加索引 ✅
### Day 2: <20><EFBFBD>銝擧<E98A9D><E693A7>鞱” <20>?
#### tenant_quotas銵?<3F>?- [x] 摰帋<E691B0>銵函<E98AB5><E587BD>?<3F>?`platform_schema.tenant_quotas`
- [x] <EFBFBD><EFBFBD>tenants銵?<3F>?
#### tenant_quota_allocations銵?<3F>?<3F><>
- [x] 摰帋<E691B0>銵函<E98AB5><E587BD>?<3F>?`platform_schema.tenant_quota_allocations`
- [x] <20><EFBFBD>`targetType` (DEPARTMENT | USER) <20>?- [x] 瘛餃<E7989B>`limitAmount`<EFBFBD>䈣usedAmount`摮埈挾 <20>?
#### departments銵?<3F>?- [x] 摰帋<E691B0>銵函<E98AB5><E587BD>?<3F>?`platform_schema.departments`
- [x] <20><EFBFBD>`parentId`<EFBFBD><EFBFBD>蝥抒<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?- [x] <20><EFBFBD>tenants銵?<3F>?
#### tenant_modules銵?<3F>?- [x] 摰帋<E691B0>銵函<E98AB5><E587BD>?<3F>?`platform_schema.tenant_modules`
- [x] 瘛餃<E7989B>`moduleCode`摮埈挾 <20>?- [x] 瘛餃<E7989B>`isEnabled`<EFBFBD>䈣expiresAt`摮埈挾 <20>?
#### permissions銵?<3F>?- [x] 摰帋<E691B0>銵函<E98AB5><E587BD>?<3F>?`platform_schema.permissions`
- [x] <20><EFBFBD><E98DA6><EFBFBD><E7AE87><EFBFBD><EFBFBD><EFBFBD>唳旿 <20>?15銝芣<E98A9D><E88AA3>?- [x] <20><EFBFBD>`prompt:*`<EFBFBD><EFBFBD><EFBFBD> <20>?prompt:view/edit/debug/publish
#### tenant_members表 ✅
- [x] 定义表结构 ✅ `platform_schema.tenant_members`
- [x] 建立与tenants和users的关联 ✅
- [x] 添加`role`字段(租户内角色)✅
#### role_permissions銵?<3F>?- [x] 摰帋<E691B0>銵函<E98AB5><E587BD>?<3F>?`platform_schema.role_permissions`
- [x] <20><EFBFBD>roles<65>俰ermissions <20>?
### Prisma<6D><EFBFBD> <20>?- [x] 摰峕<E691B0>摰峕㟲<E5B395><E39FB2>schema.prisma`蝻硋<E89DBB> <20>?- [x] 餈鞱<E9A488>`npx prisma generate` <20>?- [x] 餈鞱<E9A488>`npx prisma db push` <20>?(瘚贝<E7989A><E8B49D><EFBFBD>雿輻鍂push)
### Day 2: 配额与权限表 ✅
#### tenant_quotas表 ✅
- [x] 定义表结构 ✅ `platform_schema.tenant_quotas`
- [x] 关联tenants表 ✅
#### tenant_quota_allocations表 ✅ 🆕
- [x] 定义表结构 ✅ `platform_schema.tenant_quota_allocations`
- [x] 支持`targetType` (DEPARTMENT | USER) ✅
- [x] 添加`limitAmount``usedAmount`字段 ✅
#### departments表 ✅
- [x] 定义表结构 ✅ `platform_schema.departments`
- [x] 支持`parentId`(多级结构)✅
- [x] 关联tenants表 ✅
#### tenant_modules表 ✅
- [x] 定义表结构 ✅ `platform_schema.tenant_modules`
- [x] 添加`moduleCode`字段 ✅
- [x] 添加`isEnabled``expiresAt`字段 ✅
#### permissions表 ✅
- [x] 定义表结构 ✅ `platform_schema.permissions`
- [x] 插入基础权限数据 ✅ 15个权限
- [x] 插入`prompt:*`权限 ✅ prompt:view/edit/debug/publish
#### role_permissions表 ✅
- [x] 定义表结构 ✅ `platform_schema.role_permissions`
- [x] 关联roles和permissions ✅
### Prisma相关 ✅
- [x] 完成完整的`schema.prisma`编写 ✅
- [x] 运行`npx prisma generate`
- [x] 运行`npx prisma db push` ✅ (测试环境使用push)
- [x] 编写种子数据脚本(`prisma/seed.ts`)✅
- [x] 餈鞱<EFBFBD>蝘滚<EFBFBD><EFBFBD>唳旿 <20>?
### <20><> Seed <20><EFBFBD>靽⊥<E99DBD><EFBFBD><E79899><EFBFBD>摰峕㟲嚗?
| <20>𧢲㦤<F0A7A2B2>?| 撖<><E69296> | 憪枏<E686AA> | 閫坿𠧧 | 蝘<><E89D98> | 蝘穃恕 |
- [x] 运行种子数据 ✅
### 📝 Seed 用户信息汇总(完整)
| 手机号 | 密码 | 姓名 | 角色 | 租户 | 科室 |
|--------|------|------|------|------|------|
| 13800000001 | 123456 | <EFBFBD>漣蝞∠<EFBFBD><EFBFBD>?| SUPER_ADMIN | 憯寡<EFBFBD>敺芰<EFBFBD><EFBFBD><EFBFBD> | - |
| 13800000002 | 123456 | Prompt撌亦<EFBFBD>撣?| PROMPT_ENGINEER | 憯寡<EFBFBD>敺芰<EFBFBD><EFBFBD><EFBFBD> | - |
| 13800000003 | 123456 | <EFBFBD>駁堺蝞∠<EFBFBD><EFBFBD>?| HOSPITAL_ADMIN | <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| - |
| 13800000004 | 123456 | 蝘穃恕銝颱遙 | DEPARTMENT_ADMIN | <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| 撉函<E69289> |
| 13800000005 | 123456 | <EFBFBD><EFBFBD>𡁜龫<EFBFBD>?| USER | <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?| 撉函<E69289> |
| 13800000006 | 123456 | <EFBFBD><EFBFBD>蝞∠<EFBFBD><EFBFBD>?| PHARMA_ADMIN | 甇衣眎<EFBFBD>嗉晓 | - |
| 13800000007 | 123456 | <EFBFBD><EFBFBD><EFBFBD>𠉛弦<EFBFBD>?| USER | 甇衣眎<EFBFBD>嗉晓 | - |
| 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 | 个人用户 | - |
**<EFBFBD><EFBFBD>銝枏<EFBFBD><EFBFBD><EFBFBD>URL嚗?*
**租户专属登录URL**
- 通用登录: `/login`
- 壹证循科技: `/t/yizhengxun/login`
- <EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>? `/t/jishuitan/login`
- 北京积水潭医院: `/t/jishuitan/login`
- 武田制药: `/t/takeda/login`
- 个人用户: `/t/public/login`
@@ -163,110 +198,218 @@
---
## Phase 2: <EFBFBD>𡒊垢霈方<EFBFBD>蝟餌<EFBFBD>嚗?憭抬<E686AD><E68AAC>?撌脣<E6928C><E884A3>?
**<2A><EFBFBD>嚗?* 摰䂿緵JWT霈方<E99C88><E696B9><EFBFBD><E5B395>鞉綉<E99E89>?
## Phase 2: 后端认证系统3天✅ 已完成
**目标:** 实现JWT认证和权限控制
> 📁 代码位置: `backend/src/common/auth/`
> <EFBFBD>?**摰峕<E691B0><E5B395><EFBFBD>**嚗?026-01-11
> ✅ **完成日期**2026-01-11
### Day 1: JWT撌亙<EFBFBD>蝐?<3F>?撌脣<E6928C><E884A3>?
#### jwt.service.ts <20>?- [x] 摰䂿緵`generateAccessToken(payload)` <20>?- [x] 摰䂿緵`generateRefreshToken(payload)` <20>?- [x] 摰䂿緵`generateTokens(payload)` <20>?<3F><><EFBFBD>摰峕㟲Token<65><EFBFBD>
- [x] 摰䂿緵`verifyToken(token)` <20>?- [x] 摰䂿緵`refreshToken(token, getUserById)` <20>?- [x] 摰䂿緵`extractTokenFromHeader(header)` <20>?- [x] <20>滨蔭JWT_SECRET<45><EFBFBD><E887AC><EFBFBD> <20>?撌脣銁 env.ts 銝剝<E98A9D>蝵?- [x] <20><EFBFBD>瘚贝<E7989A> <20>?<3F>賭誘銵屸<E98AB5><EFBFBD><E99C82><EFBFBD>
### Day 1: JWT工具类 ✅ 已完成
### Day 2: 霈方<E99C88>API <20>?撌脣<E6928C><E884A3>?
#### auth.controller.ts <20>?- [x] `POST /api/v1/auth/login/password` - 撖<><E69296><EFBFBD><EFBFBD> <20>?- [x] `POST /api/v1/auth/login/code` - 撉諹<E69289><E8ABB9><EFBFBD>蒈敶?<3F>?- [x] `POST /api/v1/auth/verification-code` - <20><EFBFBD><E785BE><EFBFBD><EFBFBD><E99C82> <20>?- [x] `POST /api/v1/auth/logout` - <20>餃枂 <20>?- [x] `GET /api/v1/auth/me` - <20><EFBFBD>敶枏<E695B6><E69E8F><EFBFBD>靽⊥<E99DBD> <20>?- [x] `POST /api/v1/auth/refresh` - <20>瑟鰵Token <20>?- [x] `POST /api/v1/auth/change-password` - 靽格㺿撖<E3BABF><E69296> <20>?
#### auth.service.ts <20>?- [x] 摰䂿緵`loginWithPassword()` <20>?- [x] 摰䂿緵`loginWithVerificationCode()` <20>?- [x] 摰䂿緵`getCurrentUser()` <20>?- [x] 摰䂿緵`changePassword()` <20>?- [x] 摰䂿緵`sendVerificationCode()` <20>?- [x] 摰䂿緵`refreshToken()` <20>?- [x] 摰䂿緵`getUserPermissions()` <20>?- [x] 撖<><E69296><EFBFBD><EFBFBD>嚗Ê̄cryptjs嚗争<E59A97>
#### jwt.service.ts ✅
- [x] 实现`generateAccessToken(payload)`
- [x] 实现`generateRefreshToken(payload)`
- [x] 实现`generateTokens(payload)` ✅ 生成完整Token响应
- [x] 实现`verifyToken(token)`
- [x] 实现`refreshToken(token, getUserById)`
- [x] 实现`extractTokenFromHeader(header)`
- [x] 配置JWT_SECRET环境变量 ✅ 已在 env.ts 中配置
- [x] 单元测试 ✅ 命令行验证通过
#### auth.routes.ts <20>?- [x] 頝舐眏摰帋<E691B0><E5B88B>玺chema撉諹<E69289> <20>?- [x] 瘜典<E7989C><E585B8>?index.ts <20>?`/api/v1/auth`
### Day 2: 认证API ✅ 已完成
### Day 3: 霈方<E99C88>銝剝𡢿隞?<3F>?撌脣<E6928C><E884A3>?
#### auth.middleware.ts <20>?- [x] `authenticate` - 撉諹<E69289>JWT Token <20>?- [x] `optionalAuthenticate` - <20><EFBFBD>㕑恕霂?<3F>?- [x] `requireRoles(...roles)` - 撉諹<E69289>閫坿𠧧 <20>?- [x] `requirePermission(permission)` - 撉諹<E69289><E8ABB9><EFBFBD><E7919A><EFBFBD><EFBFBD> <20>?- [x] `requireSameTenant` - 撉諹<E69289><EFBFBD><E89D98>霈輸䔮<E8BCB8><E494AE><EFBFBD> <20>?- [x] `registerAuthPlugin(fastify)` - 瘜典<E7989C><E585B8>雴辣 <20>?
#### 摨𠉛鍂銝剝𡢿隞?<3F>?- [x] 靽脲擪<E884B2><EFBFBD>Legacy API <20>?<3F><>𧒄靽脲<E99DBD><E884B2>澆捆
- [x] 靽脲擪RVW璅<EFBFBD>API <20>?<3F><>𧒄靽脲<E99DBD><E884B2>澆捆
- [x] 靽脲擪AIA璅<EFBFBD>API <20>?<3F><>𧒄靽脲<E99DBD><E884B2>澆捆
- [x] 靽脲擪PKB璅<EFBFBD>API <20>?<3F><>𧒄靽脲<E99DBD><E884B2>澆捆
#### auth.controller.ts ✅
- [x] `POST /api/v1/auth/login/password` - 密码登录 ✅
- [x] `POST /api/v1/auth/login/code` - 验证码登录 ✅
- [x] `POST /api/v1/auth/verification-code` - 发送验证码 ✅
- [x] `POST /api/v1/auth/logout` - 登出 ✅
- [x] `GET /api/v1/auth/me` - 获取当前用户信息 ✅
- [x] `POST /api/v1/auth/refresh` - 刷新Token ✅
- [x] `POST /api/v1/auth/change-password` - 修改密码 ✅
#### auth.service.ts ✅
- [x] 实现`loginWithPassword()`
- [x] 实现`loginWithVerificationCode()`
- [x] 实现`getCurrentUser()`
- [x] 实现`changePassword()`
- [x] 实现`sendVerificationCode()`
- [x] 实现`refreshToken()`
- [x] 实现`getUserPermissions()`
- [x] 密码加密bcryptjs
#### auth.routes.ts ✅
- [x] 路由定义和Schema验证 ✅
- [x] 注册到 index.ts ✅ `/api/v1/auth`
### Day 3: 认证中间件 ✅ 已完成
#### auth.middleware.ts ✅
- [x] `authenticate` - 验证JWT Token ✅
- [x] `optionalAuthenticate` - 可选认证 ✅
- [x] `requireRoles(...roles)` - 验证角色 ✅
- [x] `requirePermission(permission)` - 验证具体权限 ✅
- [x] `requireSameTenant` - 验证租户访问权限 ✅
- [x] `registerAuthPlugin(fastify)` - 注册插件 ✅
#### 应用中间件 ✅
- [x] 保护现有Legacy API ✅ 暂时保持兼容
- [x] 保护RVW模块API ✅ 暂时保持兼容
- [x] 保护AIA模块API ✅ 暂时保持兼容
- [x] 保护PKB模块API ✅ 暂时保持兼容
#### 测试 ✅
- [x] 编写Postman测试集合 ✅ 使用PowerShell Invoke-RestMethod验证
- [x] 测试所有认证流程 ✅
- [x] 测试权限控制 ✅
#### 瘚贝<E7989A> <20>?- [x] 蝻硋<E89DBB>Postman瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD> <20>?雿輻鍂PowerShell Invoke-RestMethod撉諹<E69289>
- [x] 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>㕑恕霂<E68195><E99C82>蝔?<3F>?- [x] 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>?
---
## Phase 3: <EFBFBD>滨垢霈方<EFBFBD>撖寞𦻖嚗?憭抬<E686AD><E68AAC>?撌脣<E6928C><E884A3>?
**<2A><EFBFBD>嚗?* 摰䂿緵<E482BF><EFBFBD>憿菟𢒰<E88F9F><EFBFBD><E5B395>𣂼笆<F0A382BC>?
## Phase 3: 前端认证对接2天✅ 已完成
**目标:** 实现登录页面和权限对接
> 📁 代码位置: `frontend-v2/src/framework/auth/`, `frontend-v2/src/pages/LoginPage.tsx`
> <EFBFBD>?**摰峕<E691B0><E5B395><EFBFBD>**嚗?026-01-11 | **瘚贝<EFBFBD><EFBFBD><EFBFBD>**
> ✅ **完成日期**2026-01-11 | **测试通过**
### Day 1: 登录页面 ✅
#### LoginPage.tsx ✅
- [x] 创建登录表单(手机号 + 密码 / 验证码)✅
- [x] 表单验证 ✅ Ant Design Form
- [x] 调用登录API ✅
- [x] 存储Token到localStorage ✅
- [x] 错误处理和提示 ✅
- [x] 默认密码修改提示弹窗 ✅
#### useAuth Hook (AuthContext) ✅
- [x] 实现`loginWithPassword()`方法 ✅
- [x] 实现`loginWithCode()`方法 ✅
- [x] 实现`logout()`方法 ✅
- [x] 实现`getCurrentUser()`方法 ✅
- [x] 实现`isAuthenticated`状态 ✅
### Day 2: 权限框架对接 ✅
#### AuthContext.tsx ✅
- [x] 创建认证上下文 ✅
- [x] 提供`user`状态 ✅
- [x] 提供`token`状态 ✅
- [x] 提供登录/登出方法 ✅
- [x] 自动刷新Token逻辑 ✅
#### PermissionContext.tsx更新 ✅
- [x] 删除MOCK_USER ✅ 改为从AuthContext获取
- [x] 从后端API获取用户信息 ✅
- [x] 从用户信息中解析权限 ✅
- [x] 更新`checkModulePermission`逻辑 ✅
- [x] 更新`checkFeaturePermission`逻辑 ✅
#### 路由保护 ✅
- [x] 更新`MainLayout`认证检查 ✅
- [x] 应用到所有业务模块路由 ✅
- [x] 未登录用户重定向到登录页 ✅
### Day 1: <20><EFBFBD>憿菟𢒰 <20>?
#### LoginPage.tsx <20>?- [x] <20>𥕦遣<F0A595A6><EFBFBD>銵典<E98AB5><EFBFBD><E59A97><EFBFBD>箏噡 + 撖<><E69296> / 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD><EFBFBD>?- [x] 銵典<E98AB5>撉諹<E69289> <20>?Ant Design Form
- [x]<><EFBFBD><EFBFBD>API <20>?- [x] 摮睃<E691AE>Token<65>追ocalStorage <20>?- [x] <20>躰秤憭<E7A7A4><E686AD><EFBFBD><EFBFBD>蝷?<3F>?- [x] 暺䁅恕撖<E68195><E69296>靽格㺿<E6A0BC>鞟內撘寧<E69298> <20>?
#### useAuth Hook (AuthContext) <20>?- [x] 摰䂿緵`loginWithPassword()`<60><EFBFBD> <20>?- [x] 摰䂿緵`loginWithCode()`<60><EFBFBD> <20>?- [x] 摰䂿緵`logout()`<60><EFBFBD> <20>?- [x] 摰䂿緵`getCurrentUser()`<60><EFBFBD> <20>?- [x] 摰䂿緵`isAuthenticated`<60><EFBFBD>?<3F>?
### Day 2: <20><><EFBFBD><EFBFBD>沲撖寞𦻖 <20>?
#### AuthContext.tsx <20>?- [x] <20>𥕦遣霈方<E99C88>銝𠹺<E98A9D><F0A0B9BA>?<3F>?- [x] <20>𣂷<EFBFBD>`user`<60><EFBFBD>?<3F>?- [x] <20>𣂷<EFBFBD>`token`<60><EFBFBD>?<3F>?- [x] <20>𣂷<EFBFBD><F0A382B7><EFBFBD>/<2F>餃枂<E9A483><EFBFBD> <20>?- [x] <20>芸𢆡<E88AB8>瑟鰵Token<65><EFBFBD> <20>?
#### PermissionContext.tsx<73>湔鰵 <20>?- [x] <20>𣳇膄MOCK_USER <20>?<3F>嫣蛹隞垾uthContext<78><EFBFBD>
- [x] 隞𤾸<E99A9E>蝡涉PI<50><EFBFBD><E79195><EFBFBD>靽⊥<E99DBD> <20>?- [x] 隞𡒊鍂<F0A1928A>瑚縑<E7919A>臭葉閫<E89189><E996AB><EFBFBD><EFBFBD><EFBFBD> <20>?- [x] <20>湔鰵`checkModulePermission`<EFBFBD><EFBFBD> <20>?- [x] <20>湔鰵`checkFeaturePermission`<EFBFBD><EFBFBD> <20>?
#### 頝舐眏靽脲擪 <20>?- [x] <20>湔鰵`MainLayout`霈方<E99C88><EFBFBD><E79289>?<3F>?- [x] 摨𠉛鍂<F0A0899B><EFBFBD><E594B3><EFBFBD><E58A90>⊥芋<E28AA5>𡑒楝<F0A19192>?<3F>?- [x] <20>芰蒈敶閧鍂<E996A7><EFBFBD>摰𡁜<E691B0><F0A1819C>啁蒈敶閖△ <20>?
---
## Phase 3.5: Prompt蝞∠<EFBFBD>蝟餌<EFBFBD>嚗?憭抬<E686AD>潃?銝衤<E98A9D>甇?
**<2A><EFBFBD>嚗?* 摰䂿緵<E482BF>煺漣<E785BA><EFBFBD><E887AC>啣漲憸<E6BCB2><E686B8>蝟餌<E89D9F>
## Phase 3.5: Prompt管理系统7天⭐ 下一步
> <EFBFBD>㴓 **銝衤<E98A9D><E8A1A4>嗆挾<E59786><EFBFBD>** - 餈鞱𨯫蝞∠<E89D9E>蝡舀瓲敹<E793B2><E695B9><EFBFBD>?
> <EFBFBD><EFBFBD> **霂衣<E99C82><E99C88>嚗?* [02-Prompt蝞∠<E89D9E>蝟餌<E89D9F><EFBFBD><E69298>𤏸恣<F0A48FB8>?md](./02-Prompt蝞∠<E89D9E>蝟餌<E89D9F><EFBFBD><E69298>𤏸恣<F0A48FB8>?md)
**目标:** 实现生产环境灰度预览系统
> 🎯 **下一阶段重点** - 运营管理端核心功能
> 📄 **详细计划:** [02-Prompt管理系统开发计划.md](./02-Prompt管理系统开发计划.md)
### 已确认需求
### 撌脩霈日<E99C88>瘙?
| 需求项 | 确认结果 |
|--------|---------|
| 隡睃<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>?RVW <EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>?PROMPT_ENGINEER<EFBFBD><EFBFBD>蝻𤥁<EFBFBD>嚗玺UPER_ADMIN<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
| <EFBFBD>唳旿餈<EFBFBD>宏 | <20>?<3F>芸𢆡餈<F0A286A1><EFBFBD><EFBFBD><E594B3><EFBFBD>Prompt |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>凒 | <20>?<3F><EFBFBD>摰𡁏芋<F0A1818F>?|
| 优先接入模块 | RVW 模块先行 |
| 权限细分 | PROMPT_ENGINEER只能编辑SUPER_ADMIN才能发布 |
| 数据迁移 | ✅ 自动迁移现有文件Prompt |
| 调试范围 | ✅ 可指定模块 |
### Phase 3.5.1: <EFBFBD><EFBFBD>霈暹鴌嚗㇄ay 1-2嚗争<E59A97> 撌脣<E6928C><E884A3>?
- [x] <20>𥕦遣 `capability_schema` Schema <20>?2026-01-11
- [x] <EFBFBD>湔鰵 `schema.prisma` 瘛餃<E7989B>Prompt璅<E79285> <20>?2026-01-11
- [x] <EFBFBD><EFBFBD> `prisma db push` <20>?2026-01-11
- [x] 瘛餃<EFBFBD> prompt:* <20><><EFBFBD> <20>?2026-01-11
### Phase 3.5.1: 基础设施Day 1-2✅ 已完成
- [x] 创建 `capability_schema` Schema ✅ 2026-01-11
- [x] 更新 `schema.prisma` 添加Prompt模型 ✅ 2026-01-11
- [x] 执行 `prisma db push`2026-01-11
- [x] 添加 prompt:* 权限 ✅ 2026-01-11
- `prompt:view` - 查看Prompt
- `prompt:edit` - 编辑Prompt
- `prompt:debug` - 调试Prompt
- `prompt:publish` - 发布Prompt
- [x] 更新角色权限SUPER_ADMIN全部PROMPT_ENGINEER无publish✅ 2026-01-11
- [x] 蝻硋<EFBFBD><EFBFBD><EFBFBD>𡁏𧋦 <20>?2026-01-11
- [x] <EFBFBD> RVW <EFBFBD> Prompt嚗?銝迎<E98A9D><E8BF8E>?2026-01-11
- `RVW_EDITORIAL` - 蝔輻漲閫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>隡? - `RVW_METHODOLOGY` - <20><EFBFBD>摮西捶<E8A5BF><EFBFBD>隡? - ~~`RVW_TOPIC_*`~~ - 撌脩宏<E884A9><EFBFBD><E6ADB9><EFBFBD><EFBFBD>摯銝滚<E98A9D>鈭竃VW璅<E79285>嚗?
### Phase 3.5.2: PromptService <20><EFBFBD>嚗㇄ay 3嚗争<E59A97> 撌脣<E6928C><E884A3>?
- [x] 摰䂿緵 `prompt.service.ts` <20>?2026-01-11
- [x] `get(code, variables, userId)` - <20>啣漲<E595A3><EFBFBD> <20>? - [x] `setDebugMode(userId, modules, enabled)` - 璅<E79285>蝥扯<E89DA5>霂?<3F>? - [x] `render(template, variables)` - <20><EFBFBD>皜脫<E79A9C> <20>? - [x] `extractVariables(content)` - <20><EFBFBD><E3979B>𣂼<EFBFBD> <20>? - [x] `validateVariables()` - <20><EFBFBD><E3979B><EFBFBD> <20>? - [x] `getFallback(code)` - <20>𨅯<EFBFBD>Prompt <20>?- [ ] 摰䂿緵 LISTEN/NOTIFY <20>剜凒<E5899C>?<3F><EFBFBD> <20><><EFBFBD>
- [x] 编写迁移脚本 ✅ 2026-01-11
- [x] 迁移 RVW 模块 Prompt2个2026-01-11
- `RVW_EDITORIAL` - 稿约规范性评估
- `RVW_METHODOLOGY` - 方法学质量评估
- ~~`RVW_TOPIC_*`~~ - 已移除选题评估不属于RVW模块
### Phase 3.5.2: PromptService 核心Day 3✅ 已完成
- [x] 实现 `prompt.service.ts` ✅ 2026-01-11
- [x] `get(code, variables, userId)` - 灰度核心 ✅
- [x] `setDebugMode(userId, modules, enabled)` - 模块级调试 ✅
- [x] `render(template, variables)` - 变量渲染 ✅
- [x] `extractVariables(content)` - 变量提取 ✅
- [x] `validateVariables()` - 变量校验 ✅
- [x] `getFallback(code)` - 兜底Prompt ✅
- [ ] 实现 LISTEN/NOTIFY 热更新 ⏸️ 暂缓
- [x] 编写兜底Prompthardcoded✅ 2026-01-11
### Phase 3.5.3: 蝞∠<EFBFBD>API嚗㇄ay 4嚗争<EFBFBD> 撌脣<E6928C><E884A3>?
- [x] `GET /api/admin/prompts` - <20>𡑒”嚗<E2809D>𣈲<EFBFBD><F0A388B2><EFBFBD>𡑒<EFBFBD>皛歹<E79A9B><E6ADB9>?2026-01-11
- [x] `GET /api/admin/prompts/:code` - 霂行<E99C82>+<2B><>𧋦<EFBFBD><F0A78BA6><20>?2026-01-11
- [x] `POST /api/admin/prompts/:code/draft` - 靽嘥<E99DBD><E598A5>厩阮 <20>?2026-01-11
### Phase 3.5.3: 管理APIDay 4)✅ 已完成
- [x] `GET /api/admin/prompts` - 列表(支持模块过滤)✅ 2026-01-11
- [x] `GET /api/admin/prompts/:code` - 详情+版本历史 ✅ 2026-01-11
- [x] `POST /api/admin/prompts/:code/draft` - 保存草稿 ✅ 2026-01-11
- [x] `POST /api/admin/prompts/:code/publish` - 发布需prompt:publish✅ 2026-01-11
- [x] `POST /api/admin/prompts/:code/rollback` - <EFBFBD><EFBFBD> <20>?2026-01-11
- [x] `POST /api/admin/prompts/:code/rollback` - 回滚 ✅ 2026-01-11
- [x] `POST /api/admin/prompts/debug` - 调试开关(支持模块选择)✅ 2026-01-11
- [x] `POST /api/admin/prompts/test-render` - 瘚贝<EFBFBD>皜脫<EFBFBD> <20>?2026-01-11
- [ ] <EFBFBD><EFBFBD><EFBFBD>銝剝𡢿隞嗆<EFBFBD><EFBFBD>?<3F><EFBFBD> <20><><EFBFBD><EFBFBD>歇瘜券<E7989C>嚗?
### Phase 3.5.4: <20>滨垢蝞∠<E89D9E><E288A0>屸𢒰嚗㇄ay 5-6嚗争<E59A97> 撌脣<E6928C><E884A3>?
- [x] <20>剖遣蝞∠<E89D9E>蝡臬抅蝖<E68A85><E89D96><EFBFBD> <20>?2026-01-11
- [x] `AdminLayout.tsx` - 餈鞱𨯫蝞∠<E89D9E>蝡臬<E89DA1><EFBFBD><EFBFBD><E59A97><EFBFBD>脖蜓憸矋<E686B8><E79F8B>? - [x] `OrgLayout.tsx` - <20><EFBFBD>蝞∠<E89D9E>蝡臬<E89DA1><EFBFBD><EFBFBD><E59A97><EFBFBD>脖蜓憸矋<E686B8><E79F8B>? - [x] `AdminDashboard.tsx` - 餈鞱𨯫璁<F0A8AFAB><E79281>憿?<3F>? - [x] `OrgDashboard.tsx` - <20><EFBFBD><EFBFBD><E79281>憿?<3F>? - [x] 頝舐眏<E88890>滨蔭 `/admin/*` <20>?`/org/*` <20>? - [x] 憭游<E686AD>銝𧢲<E98A9D><F0A7A2B2>𨅯<EFBFBD><F0A885AF><EFBFBD><EFBFBD>亙藁 <20>?- [x] `PromptListPage.tsx` - <20>𡑒”憿?<3F>?2026-01-11
- [x] <EFBFBD>蝑偦<EFBFBD>?<3F>? - [x] <20>𦦵揣<F0A6A6B5><EFBFBD> <20>? - [x] 靚<><E99D9A><EFBFBD><E69298><EFBFBD>憿園<E686BF><E59C92><EFBFBD>嚗争<E59A97>
- [x] `POST /api/admin/prompts/test-render` - 测试渲染 ✅ 2026-01-11
- [ ] 权限中间件检查 ⏸️ 暂缓(已注释)
### Phase 3.5.4: 前端管理界面Day 5-6✅ 已完成
- [x] 搭建管理端基础架构 ✅ 2026-01-11
- [x] `AdminLayout.tsx` - 运营管理端布局(浅色主题)✅
- [x] `OrgLayout.tsx` - 机构管理端布局(浅色主题)✅
- [x] `AdminDashboard.tsx` - 运营概览页 ✅
- [x] `OrgDashboard.tsx` - 机构概览页 ✅
- [x] 路由配置 `/admin/*``/org/*`
- [x] 头像下拉菜单切换入口 ✅
- [x] `PromptListPage.tsx` - 列表页 ✅ 2026-01-11
- [x] 模块筛选 ✅
- [x] 搜索功能 ✅
- [x] 调试开关(顶部全局)✅
- [x] 状态显示ACTIVE/DRAFT/ARCHIVED
- [x] `PromptEditor.tsx` - CodeMirror 6 蝻𤥁<EFBFBD><EFBFBD>?<3F>?2026-01-11
- [x] `PromptEditor.tsx` - CodeMirror 6 编辑器 ✅ 2026-01-11
- [x] 简化配置(行号+换行+变量高亮+搜索+撤销)✅
- [x] 銝剜<EFBFBD><EFBFBD>见末摮𦯀<EFBFBD> 15px <20>? - [x] <20><EFBFBD>擃䀝漁嚗<E6BC81><EFBFBD><EFBFBD><E882BD><EFBFBD><E88D94>? - [x] 摮㛖泵霈⊥㺭<E28AA5><E3BAAD><EFBFBD><EFBFBD><EFBFBD>霈?<3F>?- [x] `PromptEditorPage.tsx` - 蝻𤥁<E89DBB><F0A4A581>券△<E588B8>?<3F>?2026-01-11
- [x] <EFBFBD>箸𧋦靽⊥<EFBFBD>撅閧內 <20>? - [x] 靽嘥<E99DBD><E598A5>厩阮<E58EA9><EFBFBD> <20>? - [x] <20><EFBFBD><E7A983><EFBFBD><EFBFBD><E59A97><EFBFBD>鞉綉<E99E89><EFBFBD><E5A19A>? - [x] <20><>𧋦<EFBFBD><F0A78BA6><EFBFBD>園𡢿頧?<3F>? - [x] 瘚贝<E7989A>皜脫<E79A9C><E884AB><20>? - [x] <20><EFBFBD><E3979B>𡑒”撅閧內 <20>?
### Phase 3.5.5: RVW璅<E79285><E288AA><EFBFBD><EFBFBD>嚗㇄ay 7嚗争𢰧 銝衤<E98A9D>甇?
- [ ] <EFBFBD><EFBFBD>?`editorialService.ts` 雿輻鍂 `promptService.get('RVW_EDITORIAL')`
- [ ] <EFBFBD><EFBFBD>?`methodologyService.ts` 雿輻鍂 `promptService.get('RVW_METHODOLOGY')`
- [ ] <EFBFBD>𣳇膄<EFBFBD><EFBFBD>辣霂餃<EFBFBD><EFBFBD><EFBFBD>嚗īrompts/*.txt嚗?- [ ] 蝡臬<E89DA1>蝡舀<E89DA1>霂? - [ ] Prompt撌亦<E6928C><EFBFBD><E692A3>蝻𤥁<E89DBB><F0A4A581><EFBFBD>摮䁅<E691AE>蝔踱<E89D94><EFBFBD><E69298><EFBFBD>霂𨰝<E99C82>瘚贝<E7989A>
- [x] 中文友好字体 15px ✅
- [x] 变量高亮(淡蓝背景)✅
- [x] 字符计数和变量统计 ✅
- [x] `PromptEditorPage.tsx` - 编辑器页面 ✅ 2026-01-11
- [x] 基本信息展示 ✅
- [x] 保存草稿功能 ✅
- [x] 发布功能(权限控制)✅
- [x] 版本历史时间轴 ✅
- [x] 测试渲染面板 ✅
- [x] 变量列表展示 ✅
### 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: 餈鞱𨯫蝞∠<EFBFBD>蝡烘VP嚗?憭抬<E686AD>
## Phase 4: 运营管理端MVP5天
**<EFBFBD><EFBFBD>嚗?* 摰䂿緵<E482BF><EFBFBD><EFBFBD><E89D98>蝞∠<E89D9E><E288A0><EFBFBD>
**目标:** 实现核心租户管理功能
### Day 1-2: 租户管理
@@ -275,11 +418,15 @@
- [ ] `POST /api/admin/tenants` - 创建租户
- [ ] `GET /api/admin/tenants/:id` - 获取租户详情
- [ ] `PUT /api/admin/tenants/:id` - 更新租户
- [ ] `DELETE /api/admin/tenants/:id` - <EFBFBD>𣳇膄蝘<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣳇膄嚗?
- [ ] `DELETE /api/admin/tenants/:id` - 删除租户(软删除)
#### 前端页面
- [ ] `TenantListPage.tsx` - 租户列表
- [ ] `TenantFormPage.tsx` - 创建/编辑租户表单
- [ ] <EFBFBD>箸𧋦靽⊥<EFBFBD>嚗ěame, code, type嚗? - [ ] <20>𠉛頂靽⊥<E99DBD>嚗Ếontact, phone, email嚗? - [ ] <20><EFBFBD><E59786><EFBFBD><E681A3><EFBFBD>active/inactive嚗?- [ ] `TenantDetailPage.tsx` - 蝘<><E89D98>霂行<E99C82>
- [ ] 基本信息name, code, type
- [ ] 联系信息contact, phone, email
- [ ] 状态管理active/inactive
- [ ] `TenantDetailPage.tsx` - 租户详情
### Day 3: 品牌配置
@@ -287,10 +434,15 @@
- [ ] `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` - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滨蔭嚗<EFBFBD><EFBFBD><EFBFBD>API嚗?
- [ ] `GET /api/public/tenant-config/:code` - 获取租户配置(公开API
#### 前端页面
- [ ] `TenantBrandingPage.tsx` - 品牌配置
- [ ] Logo銝𠹺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>孵稬嚗? - [ ] <20>峕艶<E5B395><EFBFBD>隡? - [ ] 銝駁<E98A9D><E9A781><EFBFBD>㗇𥋘<E39787><EFBFBD>Color Picker嚗? - [ ] 蝟餌<E89D9F><E9A48C>滨妍<E6BBA8><EFBFBD>銋? - [ ] 摰墧𧒄憸<F0A79284><E686B8>
- [ ] Logo上传(拖拽或点击)
- [ ] 背景图上传
- [ ] 主题色选择器Color Picker
- [ ] 系统名称自定义
- [ ] 实时预览
#### OSS集成
- [ ] 配置阿里云OSS
@@ -302,11 +454,14 @@
#### 后端API
- [ ] `GET /api/admin/feature-flags` - 获取所有Feature Flag
- [ ] `PUT /api/admin/feature-flags/:id` - 更新Feature Flag
- [ ] `POST /api/admin/feature-flags/:id/toggle` - <EFBFBD><EFBFBD>揢撘<EFBFBD><EFBFBD>?
- [ ] `POST /api/admin/feature-flags/:id/toggle` - 切换开关
#### 前端页面
- [ ] `FeatureFlagListPage.tsx` - Feature Flag列表
- [ ] 模块列表ASL/DC/IIT等
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>? - [ ] 摨𠉛鍂<F0A0899B><EFBFBD><E59581><EFBFBD>蝵?
- [ ] 开关切换
- [ ] 应用到租户配置
### Day 5: 集成测试
#### 功能测试
@@ -315,70 +470,98 @@
- [ ] Feature Flag管理测试
#### 权限测试
- [ ] <EFBFBD>漣蝞∠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂?- [ ] <20>䂿恣<E482BF><E681A3><EFBFBD>霈輸䔮瘚贝<E7989A><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗?
#### <20>唳旿銝<E697BF><E98A9D><EFBFBD><EFBFBD>霂?- [ ] 蝘<><E89D98><EFBFBD>𥕦遣<F0A595A6>擧㺭<E693A7><EFBFBD>霂?- [ ] <20><><EFBFBD><EFBFBD>滨蔭靽嘥<E99DBD>撉諹<E69289>
- [ ] 超级管理员权限测试
- [ ] 非管理员访问测试(应拒绝)
#### 数据一致性测试
- [ ] 租户创建后数据验证
- [ ] 品牌配置保存验证
---
## Phase 5: <EFBFBD><EFBFBD>銝枏<EFBFBD><EFBFBD><EFBFBD>嚗?憭抬<E686AD>
## Phase 5: 租户专属登录2天
**<EFBFBD><EFBFBD>嚗?* 摰䂿緵蝘<E7B7B5><E89D98><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣇉蒈敶閖△
**目标:** 实现租户品牌化登录页
### Day 1: 租户登录页
### Day 1: 蝘<><E89D98><EFBFBD><EFBFBD>憿?
#### TenantLoginPage.tsx
- [ ] <EFBFBD>𥕦遣蝘<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憿萇<EFBFBD>隞?- [ ] 閫<><E996AB>URL銝剔<E98A9D>`tenantCode`<EFBFBD><EFBFBD>
- [ ] 创建租户登录页组件
- [ ] 解析URL中的`tenantCode`参数
- [ ] 调用`/api/public/tenant-config/:code`获取配置
- [ ] 动态加载Logo
- [ ] 动态设置背景图
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>其蜓憸䁅𠧧嚗㇃SS<EFBFBD><EFBFBD>嚗?- [ ] <20><EFBFBD><E586BD>挽蝵桅△<E6A185><EFBFBD>憸矋<E686B8>document.title嚗?
- [ ] 动态应用主题色CSS变量
- [ ] 动态设置页面标题document.title
#### 样式定制
- [ ] 雿輻鍂CSS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蜓憸?- [ ] <20><EFBFBD>撘誩<E69298><EFBFBD>
- [ ] <EFBFBD>㰘蝸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?- [ ] <20>躰秤憭<E7A7A4><E686AD><EFBFBD><E59A97><EFBFBD><EFBFBD>摮睃銁嚗?
- [ ] 使用CSS变量支持动态主题
- [ ] 响应式布局
- [ ] 加载态处理
- [ ] 错误处理(租户不存在)
### Day 2: 路由分发
#### 登录后跳转逻辑
- [ ] 根据`role`判断跳转目标
- [ ] `SUPER_ADMIN` <EFBFBD>?餈鞱𨯫蝞∠<E89D9E>蝡? - [ ] `PROMPT_ENGINEER` <20>?餈鞱𨯫蝞∠<E89D9E>蝡荔<E89DA1>Prompt蝞∠<E89D9E>嚗? - [ ] `HOSPITAL_ADMIN` <20>?<3F><EFBFBD>蝞∠<E89D9E>蝡荔<E89DA1><E88D94>駁堺嚗? - [ ] `PHARMA_ADMIN` <20>?<3F><EFBFBD>蝞∠<E89D9E>蝡荔<E89DA1><E88D94><EFBFBD>嚗? - [ ] `USER` <20>?銝𡁜𦛚璅<E79285>擐㚚△
- [ ] `SUPER_ADMIN` → 运营管理端
- [ ] `PROMPT_ENGINEER` → 运营管理端Prompt管理
- [ ] `HOSPITAL_ADMIN` → 机构管理端(医院)
- [ ] `PHARMA_ADMIN` → 机构管理端(药企)
- [ ] `USER` → 业务模块首页
#### 路由配置
- [ ] 配置`/t/:tenantCode/login`路由
- [ ] 配置通用登录页重定向逻辑
#### 测试
- [ ] 瘚贝<EFBFBD>銝滚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頧?- [ ] 瘚贝<E7989A>銝滚<E98A9D>閫坿𠧧<E59DBF><F0A0A7A7><EFBFBD>梯歲頧?- [ ] 瘚贝<E7989A><E8B49D>躰秤<E8BAB0>箸艶嚗<E889B6><E59A97><EFBFBD>ōenantCode嚗?
- [ ] 测试不同租户的品牌加载
- [ ] 测试不同角色的路由跳转
- [ ] 测试错误场景无效tenantCode
---
## Phase 6: <EFBFBD><EFBFBD>蝞∠<EFBFBD>蝡荔<EFBFBD><EFBFBD><EFBFBD>嚗?
**<2A><EFBFBD>嚗?* 摰䂿緵<E482BF>駁堺蝡臬<E89DA1><E887AC><EFBFBD>蝡航䌊<E888AA>滚𦛚蝞∠<E89D9E>
## Phase 6: 机构管理端(待定)
### <20>駁堺蝞∠<E89D9E>蝡?- [ ] <20><EFBFBD>蝞∠<E89D9E>
**目标:** 实现医院端和药企端自服务管理
### 医院管理端
- [ ] 用户管理
- [ ] 科室管理(多级结构)
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰?銝芯犖嚗?- [ ] 摰∟恣<E2889F><EFBFBD><E4BA99>亥砭
- [ ] 配额分配(科室/个人)
- [ ] 审计日志查询
### <EFBFBD><EFBFBD>蝞∠<EFBFBD>蝡?- [ ] <20><EFBFBD>蝞∠<E89D9E>
### 药企管理端
- [ ] 用户管理
- [ ] 项目管理
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?銝芯犖嚗?- [ ] 摰∟恣<E2889F><EFBFBD><E4BA99>亥砭嚗㇅DA<44><41><EFBFBD>嚗?
**憭<>釣嚗?* Phase 6靘肽<E99D98>Phase 0-5摰峕<E691B0>嚗諹祕蝏<E7A595><EFBFBD><EFBFBD>餈鞱𨯫蝡臬<E89DA1><E887AC>𣂼<EFBFBD><F0A382BC><EFBFBD>
- [ ] 配额分配(项目/个人)
- [ ] 审计日志查询FDA合规
**备注:** Phase 6依赖Phase 0-5完成详细任务待运营端完成后分解
---
## <EFBFBD><20><><EFBFBD>找遙<E689BE>?
## 🔧 持续性任务
### 文档维护
- [ ] 及时更新API文档
- [ ] 编写用户手册
### 代码质量
- [ ] <EFBFBD><EFBFBD>摰⊥䰻嚗<EFBFBD><EFBFBD>銝枉R嚗?- [ ] <20><EFBFBD>瘚贝<E7989A><EFBFBD><E996AC><EFBFBD>?60%
- [ ] 代码审查每个PR
- [ ] 单元测试覆盖率>60%
- [ ] ESLint检查通过
- [ ] TypeScript类型检查通过
### 安全测试
- [ ] JWT Token安全测试
- [ ] 憭𡁶<EFBFBD><EFBFBD><EFBFBD>蝳餅<EFBFBD>霂?- [ ] SQL瘜典<E7989C>瘚贝<E7989A>
- [ ] 多租户隔离测试
- [ ] SQL注入测试
- [ ] XSS攻击测试
### 性能优化
- [ ] <EFBFBD>唳旿摨𤘪䰻霂<EFBFBD><EFBFBD>?- [ ] 蝻枏<E89DBB>蝑𣇉裦隡睃<E99AA1>
- [ ] 数据库查询优化
- [ ] 缓存策略优化
- [ ] 前端打包优化
---
@@ -387,7 +570,7 @@
### 如何更新TODO
1. **摰峕<EFBFBD>隞餃𦛚<EFBFBD>?*
1. **完成任务时**
```markdown
- [x] 任务描述
```
@@ -399,29 +582,38 @@
3. **添加备注**
```markdown
- [x] 隞餃𦛚<EFBFBD>讛膩 <20>?2026-01-12摰峕<EFBFBD> by撘牐<E69298>
- [x] 任务描述 ✅ 2026-01-12完成 by张三
```
### 隡睃<EFBFBD>蝥扳<EFBFBD>霈?
### 优先级标记
- 🔴 P0 - 必须完成
- 🟡 P1 - 重要
- <EFBFBD> P2 - <EFBFBD><EFBFBD>?
### <20><EFBFBD><E59786><EFBFBD>霈?
- <20>?敺<><E695BA>憪?- <20>银 餈𥡝<E9A488>銝?- <20>?撌脣<E6928C><E884A3>?- <20>?撌脣<E6928C>瘨?- <20>𩤃<EFBFBD> <20><EFBFBD>
- 🟢 P2 - 可选
### 状态标记
- ⏳ 待开始
- 🚧 进行中
- ✅ 已完成
- ❌ 已取消
- ⚠️ 阻塞
---
## <EFBFBD><EFBFBD> 敹恍<E695B9><EFBFBD>霈?
## 📊 快速统计
```bash
# 蝏蠘恣摰峕<EFBFBD>隞餃𦛚<EFBFBD>?grep -c "- \[x\]" 01-TODO皜<4F><E79A9C><EFBFBD>虾餈質葵嚗?md
# 统计完成任务数
grep -c "- \[x\]" 01-TODO清单可追踪.md
# 统计总任务数
grep -c "- \[ \]" 01-TODO<EFBFBD><EFBFBD><EFBFBD>虾餈質葵嚗?md
grep -c "- \[ \]" 01-TODO清单(可追踪).md
```
---
*最后更新2026-01-11 Phase 3.5.4完成*
**<EFBFBD><EFBFBD> 銝衤<E98A9D>甇伐<E79487>Phase 3.5.5 RVW<EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 銝𡁜𦛚璅<E79285>雿輻鍂 PromptService嚗?*
**🚀 下一步:Phase 3.5.5 RVW模块集成 - 业务模块使用 PromptService**

View File

@@ -1,46 +1,57 @@
# Prompt邂。逅<EFBFBD>ウサ扈溷シ€蜿題ョ。蛻?
> **迚域悽<E59F9F>?* v1.2
> **蛻帛サコ譌・譛滂シ?* 2026-01-11
> **譖エ譁ー譌・譛滂シ?* 2026-01-12
> **莨伜<EFBFBD>郤ァ<EFBFBD><EFBFBD>** P0<50><EFBFBD>ク蠢<EFBDB8>€夂畑閭ス蜉幢シ?
> **迥カ諤<EFBFBD><EFBFBD>** 笨?Phase 3.5.1-3.5.5 蜈ィ驛ィ螳梧<E89EB3><E6A2A7>?00%<25>?
> **<EFBFBD>ョ。蟾・譛滂シ?* 7荳ェ蟾・菴懈律
> **螳樣刔螳梧<EFBFBD><EFBFBD>?* Day 1-7 蟾イ螳梧<E89EB3><E6A2A7><EFBFBD>2026-01-12<31>?
# Prompt管理系统开发计划
> **版本:** v1.2
> **创建日期:** 2026-01-11
> **更新日期:** 2026-01-12
> **优先级:** P0核心通用能力
> **状态:** ✅ Phase 3.5.1-3.5.5 全部完成100%
> **预计工期:** 7个工作日
> **实际完成:** Day 1-7 已完成2026-01-12
---
## <EFBFBD>識 蠢ォ騾溷ッシ闊ェ<E9978A><EFBDAA>2026-01-11譖エ譁ー<EFBFBD>?
### 笨?蟾イ螳梧<E89EB3><E6A2A7><EFBFBD>hase 3.5.1 - 3.5.5<EFBFBD>?
## 🎯 快速导航(2026-01-11更新)
### ✅ 已完成Phase 3.5.1 - 3.5.5
| 阶段 | 核心产出 | 文件位置 | 完成日期 |
|------|---------|---------|---------|
| **3.5.1 蝓コ遑€隶セ譁ス** | capability_schema縲∬。ィ扈捺桷縲∵揀髯舌€∬ソ∫ァ?| `backend/prisma/schema.prisma` | 2026-01-11 |
| **3.5.1 基础设施** | capability_schema、表结构、权限、迁移 | `backend/prisma/schema.prisma` | 2026-01-11 |
| **3.5.2 核心服务** | PromptService灰度、渲染、变量校验 | `backend/src/common/prompt/` | 2026-01-11 |
| **3.5.3 管理API** | 8个RESTful接口 | `backend/src/common/prompt/prompt.routes.ts` | 2026-01-11 |
| **3.5.4 前端界面** | 管理端架构、Prompt列表、编辑器 | `frontend-v2/src/pages/admin/` | 2026-01-11 |
| **3.5.5 荳壼苅髮<EFBFBD><EFBFBD>** | RVW讓。蝮鈴寔謌舌€∬ョ、隸∬ァ<EFBFBD>激蛹<EFBFBD> | `backend/src/modules/rvw/` | 2026-01-12 笨?|
| **3.5.5 业务集成** | RVW模块集成、认证规范化 | `backend/src/modules/rvw/` | 2026-01-12 |
### <EFBFBD><EFBFBD> Phase 3.5.5 螳梧<EFBFBD><EFBFBD>ョケ<EFBFBD>?026-01-12<EFBFBD>?
**RVW 讓。蝮鈴寔謌撰シ?*
- 笨?editorialService.ts - 髮<><E9ABAE> PromptService<63>檎ァサ髯、譁<EFBDA4>サカ隸サ蜿?- 笨?methodologyService.ts - 髮<><E9ABAE> PromptService<63>檎ァサ髯、譁<EFBDA4>サカ隸サ蜿?- 笨?reviewWorker.ts - 莨<>騾?userId 謾ッ謖∫<E8AC96>蠎ヲ鬚<EFBDA6><EFBFBD>
- 笨?菫ョ螟<EFBDAE> ReviewTask 螟夜醗郤ヲ譚滂シ郁キィ schema 髣ョ鬚假シ?
**蜈ィ讓。蝮苓ョ、隸∬ァ<E288AC>激蛹厄シ?*
- 笨?RVW/PKB/ASL/DC 讓。蝮玲キサ蜉<EFBDBB> authenticate 荳ュ髣エ莉?- 笨?扈滉ク€菴ソ逕ィ request.user?.userId<49>檎ァサ髯、謇€譛?MOCK_USER_ID
- 笨?蜑咲ォッ扈滉ク€菴ソ逕ィ apiClient<6E><74>xios + JWT interceptor<6F>?- 笨?蛻帛サコ `docs/04-蠑€蜿題ァ<E9A18C><EFBDA7>?10-讓。蝮苓ョ、隸∬ァ<E288AC>激.md`
### 🆕 Phase 3.5.5 完成内容2026-01-12
**逡碁擇莨伜喧<EFBFBD>?*
- 笨?Prompt 蛻苓。ィ讓。蝮怜<E89DAE>譏セ遉コ荳ュ譁<EFBDAD>錐遘?- 笨?迚域悽蜴<E682BD>彰蠅槫シコ<EFBDBC>域衍逵句<E980B5>螳ケ縲∝屓貊壼粥閭ス<E996AD><EFBDBD>
**RVW 模块集成:**
- ✅ editorialService.ts - 集成 PromptService移除文件读取
- ✅ methodologyService.ts - 集成 PromptService移除文件读取
- ✅ reviewWorker.ts - 传递 userId 支持灰度预览
- ✅ 修复 ReviewTask 外键约束(跨 schema 问题)
**全模块认证规范化:**
- ✅ RVW/PKB/ASL/DC 模块添加 authenticate 中间件
- ✅ 统一使用 request.user?.userId移除所有 MOCK_USER_ID
- ✅ 前端统一使用 apiClientaxios + JWT interceptor
- ✅ 创建 `docs/04-开发规范/10-模块认证规范.md`
**界面优化:**
- ✅ Prompt 列表模块列显示中文名称
- ✅ 版本历史增强(查看内容、回滚功能)
---
## 📋 目录
1. [项目概述](#1-项目概述)
2. [髴€豎ら。ョ隶、](#2-髴€豎ら。ョ隶?
3. [謚€譛ッ譫カ譫Ь(#3-謚€譛ッ譫カ譫?
4. [蠑€蜿題ョ。蛻綻(#4-蠑€蜿題ョ。蛻?
2. [需求确认](#2-需求确认)
3. [技术架构](#3-技术架构)
4. [开发计划](#4-开发计划)
5. [数据迁移计划](#5-数据迁移计划)
6. [权限设计](#6-权限设计)
7. [测试计划](#7-测试计划)
8. [鬟朱勦荳主コ泌ッケ](#8-鬟朱勦荳主コ泌ッ?
8. [风险与应对](#8-风险与应对)
---
@@ -48,47 +59,59 @@
### 1.1 项目目标
<EFBFBD>サコ荳€荳?*逕滉コァ邇ッ蠅<EFBDAF><E8A085>蠎ヲ鬚<EFBDA6>ァ育ウサ扈<EFBDBB>**<2A><EFBFBD>隶ク荳謎ク壻ココ蜻假シ<E58187>rompt蟾・遞句ク医€∽クエ蠎贋ク灘ョカ<EFBDAE>牙惠逕滉コァ邇ッ蠅<EFBDAF>ョ牙<EFBDAE><EFBFBD>ッ柊I Prompt<EFBFBD>悟ョ樒鴫<EFBFBD><EFBFBD>
构建一个**生产环境灰度预览系统**允许专业人员Prompt工程师、临床专家在生产环境安全调试AI Prompt,实现:
- ✅ Prompt 与代码分离(数据库存储)
- ✅ 版本管理与回滚能力
- ✅ 灰度预览调试者看DRAFT用户看ACTIVE
- ✅ 模块级调试范围控制
- ✅ 权限细分(编辑/发布分离)
### 1.2 核心价值
- 笨?Prompt 荳惹サ」遐∝<E98190>遖サ<E98196>域焚謐ョ蠎灘ュ伜お<E4BC9C><E3818A>
- 笨?迚域悽邂。逅<EFBDA1>ク主屓貊夊<E8B28A>蜉?- 笨?轣ー蠎ヲ鬚<EFBDA6>ァ茨シ郁ー<E98381>ッ戊€<E6888A>恚DRAFT<46>檎畑謌キ逵帰CTIVE<56>?- 笨?讓。蝮礼コァ隹<EFBDA7>ッ戊激蝗エ謗ァ蛻?- 笨?譚<>剞扈<E5899E><E68988><EFBFBD>育シ冶セ?蜿大ク<E5A4A7><EFBDB8>遖サ<E98196>?
### 1.2 譬ク蠢<EFBDB8>サキ蛟?
| 痛点 | 解决方案 |
|------|---------|
| 测试环境无法模拟真实数据 | 生产环境灰度预览 |
| 豈乗ャ。隹<EFBFBD>紛髴€謾ケ莉」遐≫<EFBFBD>驛ィ鄂イ<EFBFBD>?蛻<><EFBFBD>?| 謨ー謐ョ蠎灘勘諤<E58B98><E8ABA4>鄂ョ<E98482>檎ァ堤コァ逕滓譜 |
| 每次调整需改代码→部署5分钟 | 数据库动态配置,秒级生效 |
| 临床专家无法参与调试 | RBAC + 友好管理界面 |
| 蜿大ク<EFBFBD>錘譌<EFBFBD>豕募屓貊?| 迚域悽蜴<E682BD>彰 + 荳€髞ョ蝗樊サ?|
| 发布后无法回滚 | 版本历史 + 一键回滚 |
### 1.3 豸牙所讓。蝮嶺シ伜<EFBFBD>郤?
| 莨伜<E88EA8>郤?| 讓。蝮<EFBDA1> | Prompt謨ー驥<EFBDB0> | 螟肴揩蠎?| 迥カ諤?|
### 1.3 涉及模块优先级
| 优先级 | 模块 | Prompt数量 | 复杂度 | 状态 |
|--------|------|-----------|--------|------|
| <EFBFBD> P0 | **RVW** | 4荳?| 箝絶ュ<E7B5B6> | **鬥匁音謗・蜈・** |
| <EFBFBD> P1 | ASL | 8荳? | 箝絶ュ絶ュ絶ュ絶ュ?| 莠梧悄 |
| <EFBFBD> P1 | DC | 5荳? | 箝絶ュ絶ュ絶ュ<EFBFBD> | 莠梧悄 |
| <EFBFBD> P2 | PKB | 3荳?| 箝絶ュ絶ュ?| 荳画悄 |
| <EFBFBD> P2 | IIT | 3荳?| 箝絶ュ絶ュ絶ュ<E7B5B6> | 荳画悄 |
| <EFBFBD> P3 | AIA | **10荳ェ譎コ閭ス菴<EFBFBD>** | 箝絶ュ絶ュ?| 蠕<>€蜿第ィ。蝮?|
| 🔴 P0 | **RVW** | 4个 | ⭐⭐ | **首批接入** |
| 🟡 P1 | ASL | 8个+ | ⭐⭐⭐⭐⭐ | 二期 |
| 🟡 P1 | DC | 5个+ | ⭐⭐⭐⭐ | 二期 |
| 🟢 P2 | PKB | 3个 | ⭐⭐⭐ | 三期 |
| 🟢 P2 | IIT | 3个 | ⭐⭐⭐⭐ | 三期 |
| 🔵 P3 | AIA | **10个智能体** | ⭐⭐⭐ | 待开发模块 |
---
## 2. 髴€豎ら。ョ隶?
### 2.1 蟾イ遑ョ隶、髴€豎?
## 2. 需求确认
### 2.1 已确认需求
| 需求项 | 确认结果 |
|--------|---------|
| 莨伜<EFBFBD>謗・蜈・讓。蝮<EFBFBD> | 笨?RVW 讓。蝮怜<EFBFBD>陦鯉シ瑚オー騾壼錘謇ゥ螻<EFBFBD> |
| <EFBFBD>剞扈<EFBFBD><EFBFBD> | 笨?PROMPT_ENGINEER 蜿ェ閭ス郛冶セ托シ郡UPER_ADMIN 謇崎<EFBFBD>蜿大ク<EFBFBD> |
| 蛻晏ァ区焚謐ョ霑∫ァサ | 笨?閾ェ蜉ィ霑∫ァサ邇ー譛画枚莉カPrompt蛻ー謨ー謐ョ蠎<EFBDAE> |
| <EFBFBD>ッ戊激蝗エ | 笨?蜿ッ謖<EFBDAF>ョ壽ィ。蝮暦シ亥ヲょ宵隹<E5AEB5>ッ紐VW<56>御ク榊スア蜩喉SL<53>?|
| AIA譎コ閭ス菴?| 笨?鬚<>ョ。10荳ェ譎コ閭ス菴難シ梧悴譚・騾夊ソ⑰rompt邂。逅<EFBFBD> |
| 优先接入模块 | RVW 模块先行,走通后扩展 |
| 权限细分 | PROMPT_ENGINEER 只能编辑SUPER_ADMIN 才能发布 |
| 初始数据迁移 | ✅ 自动迁移现有文件Prompt到数据库 |
| 调试范围 | ✅ 可指定模块如只调试RVW不影响ASL |
| AIA智能体 | ✅ 预计10个智能体未来通过Prompt管理 |
### 2.2 系统现状
**邇ー譛臼rompt蟄伜お譁ケ蠑擾シ?*
**现有Prompt存储方式:**
```
backend/prompts/
笏懌楳笏€ review_editorial_system.txt # RVW - 遞ソ郤ヲ隗<EFBFBD>激諤ァ隸<EFBFBD>シ?笏懌楳笏€ review_methodology_system.txt # RVW - 譁ケ豕募ュヲ隸<EFBDA6>シ?笏懌楳笏€ topic_evaluation_system.txt # RVW - 騾蛾「倩ッ<E580A9>シー<EFBDBC><EFBDB0>ystem<65>?笏懌楳笏€ topic_evaluation_user.txt # RVW - 騾蛾「倩ッ<E580A9>シー<EFBDBC><EFBDB0>ser<65>?笏披楳笏€ asl/
├── review_editorial_system.txt # RVW - 稿约规范性评估
├── review_methodology_system.txt # RVW - 方法学评估
├── topic_evaluation_system.txt # RVW - 选题评估System
├── topic_evaluation_user.txt # RVW - 选题评估User
└── asl/
└── screening/
├── v1.0.0-mvp.txt
├── v1.1.0-lenient.txt
@@ -96,7 +119,7 @@ backend/prompts/
└── v1.1.0-strict.txt
```
**邇ー譛芽ー<EFBFBD>畑譁ケ蠑擾シ?*
**现有调用方式:**
```typescript
// 当前:从文件读取
@@ -108,18 +131,89 @@ const systemPrompt = await promptService.get('RVW_EDITORIAL', {}, userId);
---
## 3. 謚€譛ッ譫カ譫?
### 3.1 謨エ菴捺楔譫<E6A594><E8ADAB>?
```
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 霑占是邂。逅<EFBDA1>ォッ<EFBDAB>亥燕遶ッ<E981B6>? 笏?笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏?笏? 笏?Prompt蛻苓。ィ 笏? 笏?Prompt郛冶セ大<EFBDBE>?笏? 笏?<3F>閥 隹<>ッ募シ€蜈ウ<E89C88>亥庄騾画ィ。蝮暦シ<E69AA6> 笏?笏?笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?API隹<49>
笆?笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 蜷守ォッ API Layer 笏?笏? /api/admin/prompts - 邂。逅<EFBDA1>磁蜿」<E89CBF>磯怙隶、隸<EFBDA4>+譚<><EFBFBD>? 笏?笏? /api/admin/prompts/debug - 隹<>ッ墓ィ。蠑丞シ€蜈? 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 笆?笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? PromptService<63><EFBFBD>ク蠢<EFBDB8><EFBFBD> 笏?笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?笏? 笏?debugUsers 笏? 笏?activeCache 笏? 笏?moduleDebugMap 笏? 笏?笏? 笏?Map<userId, 笏? 笏?Map<code, 笏? 笏?Map<userId, 笏? 笏?笏? 笏? Set<module>>笏? 笏? content> 笏? 笏? Set<module>> 笏? 笏?笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?笏? 笏?笏? get(code, variables, userId) 竊?閾ェ蜉ィ轣ー蠎ヲ霍ッ逕ア 笏?笏? setDebugMode(userId, modules, enabled) 竊?讓。蝮礼コァ隹<EFBDA7>ッ? 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 笆?笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? PostgreSQL (capability_schema) 笏?笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?笏? 笏?prompt_templates 笏? 笏?prompt_versions 笏? 笏?笏? 笏?- code (蜚ッ荳€<C280><EFBFBD>) 笏? 笏?- status: DRAFT/ACTIVE/ARCHIVED 笏? 笏?笏? 笏?- module (讓。蝮<EFBDA1>) 笏? 笏?- content (Prompt蜀<74>ョケ) 笏? 笏?笏? 笏?- variables 笏? 笏?- model_config (讓。蝙句盾謨ー) 笏? 笏?笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?笏? 笏?笏? LISTEN/NOTIFY prompt_update 竊?螟壼ョ樔セ狗シ灘ュ伜酔豁? 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?```
## 3. 技术架构
### 3.2 譬ク蠢<EFBDB8>焚謐ョ豬?
```
逕ィ謌キ隸キ豎<EFBFBD> 竊?荳壼苅讓。蝮<EFBDA1> 竊?promptService.get(code, vars, userId)
笏? 笆? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?譽€譟?debugUsers 笏? 笏?+ moduleDebugMap 笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏エ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 笏? 笆? 笆? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?隹<>ッ戊€?+ 讓。蝮怜源驟<E6BA90> 笏? 笏?譎ョ騾夂畑謌?荳榊源驟? 笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 笏? 笆? 笆? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?譟・隸「 DRAFT 迚域悽 笏? 笏?譟・隸「 ACTIVE 郛灘ュ<E78198> 笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 笏? 笆? 笆? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?貂イ譟灘序驥剰ソ泌屓 笏? 笏?郛灘ュ俶悴蜻ス荳ュ蛻呎衍DB 笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 笆? 笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏?蜈懷コ包シ夂。ャ郛也<E9839B><E4B99F> 笏? 笏?FALLBACK_PROMPTS笏? 笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?```
### 3.1 整体架构图
```
┌─────────────────────────────────────────────────────────────────┐
│ 运营管理端(前端) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Prompt列表 │ │ Prompt编辑器 │ │ 🔴 调试开关(可选模块) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└───────────────────────────┬─────────────────────────────────────┘
│ API调用
┌─────────────────────────────────────────────────────────────────┐
│ 后端 API Layer │
│ /api/admin/prompts - 管理接口(需认证+权限) │
│ /api/admin/prompts/debug - 调试模式开关 │
└───────────────────────────┬─────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ PromptService核心
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────────┐ │
│ │ debugUsers │ │ activeCache │ │ moduleDebugMap │ │
│ │ Map<userId, │ │ Map<code, │ │ Map<userId, │ │
│ │ Set<module>>│ │ content> │ │ Set<module>> │ │
│ └───────────────┘ └───────────────┘ └───────────────────┘ │
│ │
│ get(code, variables, userId) → 自动灰度路由 │
│ setDebugMode(userId, modules, enabled) → 模块级调试 │
└───────────────────────────┬─────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ PostgreSQL (capability_schema) │
│ ┌─────────────────────┐ ┌─────────────────────────────────┐ │
│ │ prompt_templates │ │ prompt_versions │ │
│ │ - code (唯一标识) │ │ - status: DRAFT/ACTIVE/ARCHIVED │ │
│ │ - module (模块) │ │ - content (Prompt内容) │ │
│ │ - variables │ │ - model_config (模型参数) │ │
│ └─────────────────────┘ └─────────────────────────────────┘ │
│ │
│ LISTEN/NOTIFY prompt_update → 多实例缓存同步 │
└─────────────────────────────────────────────────────────────────┘
```
### 3.2 核心数据流
```
用户请求 → 业务模块 → promptService.get(code, vars, userId)
┌─────────────────────┐
│ 检查 debugUsers │
│ + moduleDebugMap │
└──────────┬──────────┘
┌────────────────┴────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 调试者 + 模块匹配 │ │ 普通用户/不匹配 │
└────────┬────────┘ └────────┬────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 查询 DRAFT 版本 │ │ 查询 ACTIVE 缓存 │
└────────┬────────┘ └────────┬────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 渲染变量返回 │ │ 缓存未命中则查DB │
└─────────────────┘ └────────┬────────┘
┌─────────────────┐
│ 兜底:硬编码 │
│ FALLBACK_PROMPTS│
└─────────────────┘
```
### 3.3 模块级调试设计
### 3.3 讓。蝮礼コァ隹<EFBDA7>ッ戊ョセ隶?
```typescript
// 调试模式数据结构
interface DebugState {
@@ -131,14 +225,19 @@ interface DebugState {
// 开启调试只调试RVW模块
await promptService.setDebugMode(userId, ['RVW'], true);
// 闔キ蜿鳳rompt譌カ閾ェ蜉ィ蛻、譁?const prompt = await promptService.get('RVW_EDITORIAL', vars, userId);
// 竊?霑泌屓DRAFT<46>亥屏荳コuserId蠑€蜷ッ莠<EFBDAF>VW隹<57>ッ包シ?
const prompt2 = await promptService.get('ASL_SCREENING', vars, userId);
// 竊?霑泌屓ACTIVE<56>亥屏荳コuserId譛ェ蠑€蜷ッASL隹<4C>ッ包シ?```
// 获取Prompt时自动判断
const prompt = await promptService.get('RVW_EDITORIAL', vars, userId);
// → 返回DRAFT因为userId开启了RVW调试
### 3.4 蜿倬㍼譬。鬪梧惻蛻カ<E89BBB><EFBDB6>ariable Validation<6F>解氣?
**髣ョ鬚伜惻譎ッ<E8AD8E>?* 郛冶セ大勣驥悟<E9A9A5><EFBFBD> `{{title}}`<60>御ス<E5BEA1> `variables` 蟄玲ョオ豐。驟咲ス?`title`<60>瑚ー<E7919A>ッ墓慮謚・髞吶€?
**隗」蜀ウ譁ケ譯茨シ?*
const prompt2 = await promptService.get('ASL_SCREENING', vars, userId);
// → 返回ACTIVE因为userId未开启ASL调试
```
### 3.4 变量校验机制Variable Validation🆕
**问题场景:** 编辑器里写了 `{{title}}`,但 `variables` 字段没配置 `title`,调试时报错。
**解决方案:**
```typescript
// 后端:保存时自动提取变量
@@ -152,23 +251,24 @@ function extractVariables(content: string): string[] {
return Array.from(variables);
}
// 菫晏ュ倩拷遞ソ譌カ閾ェ蜉ィ譖エ譁?variables 蟄玲ョオ
// 保存草稿时自动更新 variables 字段
async saveDraft(templateId: number, content: string, ...) {
const extractedVars = extractVariables(content);
// 閾ェ蜉ィ譖エ譁ー讓。譚ソ逧?variables 蟄玲ョオ
// 自动更新模板的 variables 字段
await prisma.prompt_templates.update({
where: { id: templateId },
data: { variables: extractedVars },
});
// 蛻帛サコ譁ー迚域<EFBFBD>? await prisma.prompt_versions.create({
// 创建新版本
await prisma.prompt_versions.create({
data: { template_id: templateId, content, ... }
});
}
```
**蜑咲ォッ<EFBFBD>夊ー<EFBFBD>ッ慕阜髱「閾ェ蜉ィ逕滓<EFBFBD>蜿倬㍼霎灘<EFBFBD>陦ィ蜊?*
**前端:调试界面自动生成变量输入表单**
```tsx
// PromptDebugPanel.tsx
@@ -195,29 +295,35 @@ const PromptDebugPanel = ({ variables }: { variables: string[] }) => {
};
```
**譬。鬪梧慮譛コ<EFBFBD>?*
**校验时机:**
| 时机 | 动作 |
|------|------|
| 菫晏ュ倩拷遞ソ譌?| 閾ェ蜉ィ謠仙叙蜿倬㍼<E580AC>梧峩譁?`variables` 蟄玲ョオ |
| 蜿大ク<EFBFBD><EFBFBD>?| 隴ヲ蜻奇シ壼ヲよ<EFBDA6>?DRAFT 逧<>序驥丈ク<E4B888> ACTIVE 荳榊酔<E6A68A>梧署遉?蜿倬㍼蟾イ蜿俶<E89CBF>? |
| <EFBFBD>ッ墓<EFBFBD>?| 蜑咲ォッ譬ケ謐ョ `variables` 閾ェ蜉ィ逕滓<E98095>霎灘<E99C8E>陦ィ蜊<EFBDA8> |
| 貂イ譟捺<EFBFBD>?| 譬。鬪梧署萓帷噪蜿倬㍼譏ッ蜷ヲ螳梧紛<E6A2A7>檎シコ螟ア蛻呎鴨蜃コ譏守。ョ髞呵ッ?|
| 保存草稿时 | 自动提取变量,更新 `variables` 字段 |
| 发布前 | 警告:如果 DRAFT 的变量与 ACTIVE 不同,提示"变量已变更" |
| 调试时 | 前端根据 `variables` 自动生成输入表单 |
| 渲染时 | 校验提供的变量是否完整,缺失则抛出明确错误 |
---
## 4. 蠑€蜿題ョ。蛻?
### 4.1 諤サ菴捺慮髣エ郤?
## 4. 开发计划
### 4.1 总体时间线
```
Day 1-2: 基础设施搭建
Day 3: PromptService 核心实现
Day 4: 邂。逅<EFBFBD>PI蠑€蜿?Day 5-6: 蜑咲ォッ邂。逅<EFBDA1>阜髱「
Day 7: RVW讓。蝮鈴寔謌<E5AF94> + 遶ッ蛻ー遶ッ豬玖ッ?```
Day 4: 管理API开发
Day 5-6: 前端管理界面
Day 7: RVW模块集成 + 端到端测试
```
### 4.2 详细任务清单
#### Phase 3.5.1: 蝓コ遑€隶セ譁ス<EFBFBD><EFBFBD>ay 1-2<EFBFBD>?
##### Day 1: 謨ー謐ョ蠎灘㊥螟?
#### Phase 3.5.1: 基础设施Day 1-2
##### Day 1: 数据库准备
- [ ] 创建 `capability_schema` Schema
```sql
CREATE SCHEMA IF NOT EXISTS capability_schema;
@@ -228,32 +334,39 @@ Day 7: RVW模块集成 + 端到端测
- [ ] `prompt_templates` 模型
- [ ] `prompt_versions` 模型
- [ ] 謇ァ陦<EFBFBD> `prisma db push` 蛻帛サコ陦?
- [ ] 豺サ蜉<EFBDBB> Prompt 譚<>剞蛻?`permissions` 陦? ```sql
- [ ] 执行 `prisma db push` 创建表
- [ ] 添加 Prompt 权限到 `permissions` 表
```sql
INSERT INTO platform_schema.permissions (code, name, description, module) VALUES
('prompt:view', '譟・逵輝rompt', '譟・逵輝rompt讓。譚ソ蛻苓。ィ蜥瑚ッヲ諠?, 'admin'),
('prompt:view', '查看Prompt', '查看Prompt模板列表和详情', 'admin'),
('prompt:edit', '编辑Prompt', '创建和修改Prompt草稿', 'admin'),
('prompt:debug', '<EFBFBD>ッ姫rompt', '€蜷ッ隹<EFBFBD>ッ墓ィ。蠑?, 'admin'),
('prompt:publish', '蜿大クケrompt', '<EFBFBD>拷遞ソ蜿大ク<EFBFBD>クコ豁」蠑冗<EFBFBD>?, 'admin');
('prompt:debug', '调试Prompt', '开启调试模式', 'admin'),
('prompt:publish', '发布Prompt', '将草稿发布为正式版', 'admin');
```
- [ ] 譖エ譁ー `role_permissions` 陦? - [ ] SUPER_ADMIN: prompt:view, prompt:edit, prompt:debug, prompt:publish
- [ ] PROMPT_ENGINEER: prompt:view, prompt:edit, prompt:debug<EFBFBD>域裏publish<EFBFBD>?
##### Day 2: 謨ー謐ョ霑∫ァサ<EFBDA7><EFBDBB>VW讓。蝮暦シ?
- [ ] 更新 `role_permissions`
- [ ] SUPER_ADMIN: prompt:view, prompt:edit, prompt:debug, prompt:publish
- [ ] PROMPT_ENGINEER: prompt:view, prompt:edit, prompt:debug无publish
##### Day 2: 数据迁移RVW模块
- [ ] 编写迁移脚本 `scripts/migrate-prompts.ts`
- [ ] 迁移 RVW 模块 Prompt
| 文件 | Code | 名称 |
|------|------|------|
| review_editorial_system.txt | RVW_EDITORIAL | 遞ソ郤ヲ隗<EFBFBD>激諤ァ隸<EFBFBD>シ?|
| review_methodology_system.txt | RVW_METHODOLOGY | 譁ケ豕募ュヲ隸<EFBFBD>シ?|
| review_editorial_system.txt | RVW_EDITORIAL | 稿约规范性评估 |
| review_methodology_system.txt | RVW_METHODOLOGY | 方法学评估 |
> 豕ィ<EFBFBD>topic_evaluation_*` 譏?騾蛾「倩ッ<E580A9>シー"蜉溯<E89C89><E6BAAF>御ク榊ア樔コ山VW螳。遞ソ讓。蝮<EFBDA1>
> 注:`topic_evaluation_*` 是"选题评估"功能不属于RVW审稿模块
- [ ] 验证迁移数据完整性
- [ ] 鬪瑚ッ∬ソ∫ァサ謨ー謐ョ螳梧紛諤?
---
#### Phase 3.5.2: PromptService 譬ク蠢<EFBFBD><EFBFBD>ay 3<EFBFBD>?
#### Phase 3.5.2: PromptService 核心Day 3
- [ ] 创建文件结构
```
backend/src/common/capabilities/prompt/
@@ -263,16 +376,23 @@ Day 7: RVW模块集成 + 端到端测
└── index.ts # 导出
```
- [ ] 螳樒鴫 `PromptService` 邀? - [ ] `get(code, variables, userId)` - 譬ク蠢<EFBDB8>執蜿匁婿豕<E5A9BF>
- [ ] `setDebugMode(userId, modules, enabled)` - 讓。蝮礼コァ隹<EFBDA7>ッ募シ€蜈? - [ ] `isDebugging(userId, module)` - 譽€譟・隹<EFBDA5>ッ慕憾諤? - [ ] `render(template, variables)` - Handlebars貂イ譟<EFBDB2>
- [ ] `getActiveVersion(code)` - 闔キ蜿泡CTIVE迚域悽<E59F9F>亥クヲ郛灘ュ假シ? - [ ] `getDraftVersion(code)` - 闔キ蜿縫RAFT迚域悽
- [ ] 实现 `PromptService`
- [ ] `get(code, variables, userId)` - 核心获取方法
- [ ] `setDebugMode(userId, modules, enabled)` - 模块级调试开关
- [ ] `isDebugging(userId, module)` - 检查调试状态
- [ ] `render(template, variables)` - Handlebars渲染
- [ ] `getActiveVersion(code)` - 获取ACTIVE版本带缓存
- [ ] `getDraftVersion(code)` - 获取DRAFT版本
- [ ] `getFallback(code)` - 获取兜底Prompt
- [ ] `extractVariables(content)` - 🆕 从内容提取变量名
- [ ] `validateVariables(content, providedVars)` - <EFBFBD><EFBFBD> 譬。鬪悟序驥丞ョ梧紛諤?
- [ ] 螳樒鴫辜ュ譖エ譁ー譛コ蛻? - [ ] `initHotReload()` - 逶大成 LISTEN/NOTIFY
- [ ] 謾カ蛻ー騾夂衍蜷取ク<E58F96>ゥ?`activeCache`
- [ ] `validateVariables(content, providedVars)` - 🆕 校验变量完整性
- [ ] 郛門<EFBFBD>蜈懷コ姫rompt<EFBFBD><EFBFBD>prompt.fallbacks.ts`<EFBFBD>? ```typescript
- [ ] 实现热更新机制
- [ ] `initHotReload()` - 监听 LISTEN/NOTIFY
- [ ] 收到通知后清空 `activeCache`
- [ ] 编写兜底Prompt`prompt.fallbacks.ts`
```typescript
export const FALLBACK_PROMPTS: Record<string, string> = {
'RVW_EDITORIAL': `你是一位资深的学术期刊编辑...`,
'RVW_METHODOLOGY': `你是一位方法学专家...`,
@@ -282,11 +402,13 @@ Day 7: RVW模块集成 + 端到端测
---
#### Phase 3.5.3: 邂。逅<EFBFBD>PI<EFBFBD><EFBFBD>ay 4<EFBFBD>?
#### Phase 3.5.3: 管理APIDay 4
- [ ] 创建文件结构
```
backend/src/modules/admin/prompt/
笏懌楳笏€ prompt.controller.ts # 謗ァ蛻カ蝎? 笏懌楳笏€ prompt.routes.ts # 霍ッ逕ア螳壻ケ<E5A3BB>
├── prompt.controller.ts # 控制器
├── prompt.routes.ts # 路由定义
└── prompt.schema.ts # 请求/响应Schema
```
@@ -296,61 +418,82 @@ Day 7: RVW模块集成 + 端到端测
|------|------|------|------|
| GET | `/api/admin/prompts` | prompt:view | 获取模板列表(支持模块过滤) |
| GET | `/api/admin/prompts/:id` | prompt:view | 获取模板详情+版本历史 |
| POST | `/api/admin/prompts` | prompt:edit | 蛻帛サコ譁ー讓。譚?|
| POST | `/api/admin/prompts` | prompt:edit | 创建新模板 |
| POST | `/api/admin/prompts/:id/draft` | prompt:edit | 保存草稿 |
| POST | `/api/admin/prompts/:id/publish` | prompt:publish | 蜿大ク<EFBFBD><EFBFBD>RAFT竊但CTIVE<EFBFBD>?|
| POST | `/api/admin/prompts/:id/rollback` | prompt:publish | 蝗樊サ壼芦謖<EFBFBD>ョ夂沿譛?|
| POST | `/api/admin/prompts/debug` | prompt:debug | €蜈ウ隹<EFBFBD>ッ墓ィ。蠑?|
| GET | `/api/admin/prompts/debug/status` | prompt:debug | 闔キ蜿門ス灘燕隹<EFBFBD>ッ慕憾諤?|
| POST | `/api/admin/prompts/:id/publish` | prompt:publish | 发布DRAFT→ACTIVE |
| POST | `/api/admin/prompts/:id/rollback` | prompt:publish | 回滚到指定版本 |
| POST | `/api/admin/prompts/debug` | prompt:debug | 开关调试模式 |
| GET | `/api/admin/prompts/debug/status` | prompt:debug | 获取当前调试状态 |
- [ ] 豺サ蜉<EFBFBD><EFBFBD>剞荳ュ髣エ莉カ譽€譟?
- [ ] 豕ィ蜀瑚キッ逕ア蛻?`index.ts`
- [ ] 添加权限中间件检查
- [ ] 注册路由到 `index.ts`
---
#### Phase 3.5.4: 蜑咲ォッ邂。逅<EFBFBD>阜髱「<EFBFBD><EFBFBD>ay 5-6<EFBFBD>?
##### Day 5: 蛻苓。ィ鬘?+ 隹<>ッ募シ€蜈?
#### Phase 3.5.4: 前端管理界面Day 5-6
##### Day 5: 列表页 + 调试开关
- [ ] 创建文件结构
```
frontend-v2/src/modules/admin/prompt/
├── pages/
笏? 笏懌楳笏€ PromptListPage.tsx # 蛻苓。ィ鬘? 笏? 笏披楳笏€ PromptEditorPage.tsx # 郛冶セ鷹。? 笏懌楳笏€ components/
笏? 笏懌楳笏€ PromptDebugSwitch.tsx # 隹<>ッ募シ€蜈? 笏? 笏懌楳笏€ PromptVersionHistory.tsx # 迚域悽蜴<E682BD>
笏? 笏披楳笏€ PromptPreview.tsx # 鬚<>ァ育サ<E882B2>サカ
│ ├── PromptListPage.tsx # 列表页
│ └── PromptEditorPage.tsx # 编辑页
├── components/
│ ├── PromptDebugSwitch.tsx # 调试开关
│ ├── PromptVersionHistory.tsx # 版本历史
│ └── PromptPreview.tsx # 预览组件
├── hooks/
笏? 笏披楳笏€ usePromptApi.ts # API<EFBFBD>
│ └── usePromptApi.ts # API调用
└── index.ts
```
- [ ] `PromptListPage.tsx`
- [ ] 模板列表展示
- [ ] 讓。蝮礼ュ幃€会シ<EFBFBD>VW/ASL/DC/...<EFBFBD>? - [ ] 迥カ諤∫ュ幃€会シ域怏闕臥ィ?譌<>闕臥ィソ<EFBDA8><EFBDBF>
- [ ] 模块筛选RVW/ASL/DC/...
- [ ] 状态筛选(有草稿/无草稿)
- [ ] 搜索功能
- [ ] `PromptDebugSwitch.tsx`
- [ ] <EFBFBD>剞譽€譟・<EFBFBD>井サ?prompt:debug 蜿ッ隗<EFBFBD>シ? - [ ] 讓。蝮鈴€画叫蝎ィ<E89D8E>亥庄螟夐€会シ<E4BC9A>
- [ ] 蠑€蜈ウ迥カ諤? - [ ] 蠑€蜷ッ蜷取仞遉コ隴ヲ蜻頑<E89CBB>?
##### Day 6: 郛冶セ大勣鬘オ髱?
- [ ] 权限检查(仅 prompt:debug 可见)
- [ ] 模块选择器(可多选)
- [ ] 开关状态
- [ ] 开启后显示警告条
##### Day 6: 编辑器页面
- [ ] `PromptEditorPage.tsx`
- [ ] 蝓コ譛ャ菫。諱ッ螻慕、コ<EFBFBD><EFBFBD>ode, name, module<EFBFBD>? - [ ] Prompt 蜀<>ョケ郛冶セ大勣<E5A4A7><E58BA3>onaco Editor / CodeMirror<6F>? - [ ] **蜿倬㍼閾ェ蜉ィ謠仙叙**<2A>夂シ冶セ第慮螳樊慮謇ォ謠<EFBDAB> `{{xxx}}`<60>梧仞遉コ蜿倬㍼蛻苓。?<3F><>
- [ ] modelConfig 郛冶セ托シ<E68998>SON譬シ蠑擾シ? - [ ] 菫晏ュ倩拷遞ソ謖蛾聴<E89BBE><EFBFBD>蜉ィ譖エ譁?variables 蟄玲ョオ<EFBDAE>? - [ ] 蜿大ク<E5A4A7>潔髓ョ<E9AB93>域揀髯先而蛻カ<E89BBB><EFBFBD>?prompt:publish 蛻咏ヲ∫畑<E288AB><E79591>
- [ ] 基本信息展示code, name, module
- [ ] Prompt 内容编辑器Monaco Editor / CodeMirror
- [ ] **变量自动提取**:编辑时实时扫描 `{{xxx}}`,显示变量列表 🆕
- [ ] modelConfig 编辑JSON格式
- [ ] 保存草稿按钮(自动更新 variables 字段)
- [ ] 发布按钮(权限控制:无 prompt:publish 则禁用)
- [ ] **变量变更警告**:发布前检查变量是否与 ACTIVE 版本不同 🆕
- [ ] 版本历史面板
- [ ] 蜿俶峩隸エ譏手セ灘<EFBFBD><EFBFBD><EFBFBD>hangelog<EFBFBD>?
- [ ] 变更说明输入changelog
- [ ] `PromptDebugPanel.tsx` 🆕
- [ ] 根据 variables 自动生成输入表单
- [ ] "豬玖ッ墓クイ譟<EFBFBD>"謖蛾聴<E89BBE>夐「<E5A490>ァ亥序驥乗崛謐「蜷守噪謨域<E8ACA8>? - [ ] 貂イ譟鍋サ捺棡螻慕、コ
- [ ] "测试渲染"按钮:预览变量替换后的效果
- [ ] 渲染结果展示
- [ ] `PromptVersionHistory.tsx`
- [ ] 版本列表
- [ ] 版本对比
- [ ] 荳€髞ョ蝗樊サ?
- [ ] 髮<><E9ABAE>蛻ー蟇シ闊? - [ ] 霑占是邂。逅<EFBDA1>ォッ萓ァ霎ケ譬乗キサ蜉<EFBDBB>蜈・蜿」
- [ ] 鬘カ驛ィ譬乗キサ蜉<EFBFBD><EFBFBD>ッ募シ€蜈?
- [ ] 一键回滚
- [ ] 集成到导航
- [ ] 运营管理端侧边栏添加入口
- [ ] 顶部栏添加调试开关
---
#### Phase 3.5.5: RVW讓。蝮鈴寔謌撰シ<EFBFBD>ay 7<EFBFBD>?
- [ ] 謾ケ騾?`editorialService.ts`
#### Phase 3.5.5: RVW模块集成Day 7
- [ ] 改造 `editorialService.ts`
```typescript
// Before
const systemPrompt = await fs.readFile(PROMPT_PATH, 'utf-8');
@@ -359,40 +502,42 @@ Day 7: RVW模块集成 + 端到端测
const systemPrompt = await promptService.get('RVW_EDITORIAL', {}, userId);
```
- [ ] 謾ケ騾?`methodologyService.ts`
- [ ] 改造 `methodologyService.ts`
- [ ] 謾ケ騾<EFBFBD>蜈カ莉?RVW 逶ク蜈ウ譛榊苅
- [ ] 改造其他 RVW 相关服务
- [ ] 遶ッ蛻ー遶ッ豬玖ッ? - [ ] 譎ョ騾夂畑謌キ<E8AC8C>壻スソ逕ィ ACTIVE 迚域悽
- [ ] 端到端测试
- [ ] 普通用户:使用 ACTIVE 版本
- [ ] 调试者开启RVW调试使用 DRAFT 版本
- [ ] 调试者未开启RVW调试使用 ACTIVE 版本
- [ ] 蜿大ク<EFBFBD>オ∫ィ具シ咼RAFT 竊?ACTIVE
- [ ] 发布流程DRAFT ACTIVE
- [ ] 回滚流程
---
### 4.3 莉サ蜉。霍溯クェ陦?
| ID | 莉サ蜉。 | 雍溯エ」莠?| 迥カ諤?| 螳梧<E89EB3>譌・譛<EFBDA5> |
### 4.3 任务跟踪表
| ID | 任务 | 负责人 | 状态 | 完成日期 |
|----|------|--------|------|---------|
| 3.5.1.1 | 蛻帛サコ capability_schema | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.1.2 | 譖エ譁ー schema.prisma | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.1.3 | 豺サ蜉<EFBFBD><EFBFBD>剞謨ー謐ョ | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.1.4 | 郛門<EFBFBD>霑∫ァサ閼壽悽 | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.1.5 | 霑∫ァサ RVW Prompt | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.2.1 | 螳樒鴫 PromptService | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.2.2 | 螳樒鴫辜ュ譖エ譁?| - | 竢ク<E7ABA2><EFBDB8> 證らシ難シ域焔蜉ィinvalidate<EFBFBD>?| - |
| 3.5.2.3 | 郛門<EFBFBD>蜈懷コ姫rompt | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.2.4 | 螳樒鴫蜿倬㍼謠仙叙 `extractVariables()` <EFBFBD><EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.2.5 | 螳樒鴫蜿倬㍼譬。鬪<EFBFBD> `validateVariables()` <EFBFBD><EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.3.1 | 螳樒鴫邂。逅<EFBFBD>PI | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.3.2 | 豺サ蜉<EFBFBD><EFBFBD>剞譽€譟?| - | 竢ク<E7ABA2><EFBDB8> 證らシ難シ域ウィ驥頑脂<E9A091>?| - |
| 3.5.4.0 | 謳ュ蟒コ邂。逅<EFBFBD>ォッ蝓コ遑€譫カ譫<EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.4.1 | 螳樒鴫蛻苓。ィ鬘?| AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.4.2 | 螳樒鴫隹<EFBFBD>ッ募シ€蜈?| AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.4.3 | 螳樒鴫郛冶セ大勣<EFBFBD><EFBFBD>odeMirror 6 €蛹也沿<EFBFBD>榎 AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.4.4 | 螳樒鴫隹<EFBFBD>ッ暮擇譚ソ<EFBFBD>亥序驥剰セ灘<EFBFBD>陦ィ蜊包シ解氣<EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
| 3.5.5.1 | 謾ケ騾?RVW 譛榊苅 | - | 竢?蠕<>€蟋?| - |
| 3.5.5.2 | 遶ッ蛻ー遶ッ豬玖ッ?| - | 竢?蠕<>€蟋?| - |
| 3.5.1.1 | 创建 capability_schema | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.1.2 | 更新 schema.prisma | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.1.3 | 添加权限数据 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.1.4 | 编写迁移脚本 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.1.5 | 迁移 RVW Prompt | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.2.1 | 实现 PromptService | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.2.2 | 实现热更新 | - | ⏸️ 暂缓(手动invalidate | - |
| 3.5.2.3 | 编写兜底Prompt | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.2.4 | 实现变量提取 `extractVariables()` 🆕 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.2.5 | 实现变量校验 `validateVariables()` 🆕 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.3.1 | 实现管理API | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.3.2 | 添加权限检查 | - | ⏸️ 暂缓(注释掉) | - |
| 3.5.4.0 | 搭建管理端基础架构 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.4.1 | 实现列表页 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.4.2 | 实现调试开关 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.4.3 | 实现编辑器CodeMirror 6 简化版)| AI | ✅ 已完成 | 2026-01-11 |
| 3.5.4.4 | 实现调试面板(变量输入表单)🆕 | AI | ✅ 已完成 | 2026-01-11 |
| 3.5.5.1 | 改造 RVW 服务 | - | ⏳ 待开始 | - |
| 3.5.5.2 | 端到端测试 | - | ⏳ 待开始 | - |
---
@@ -400,31 +545,31 @@ Day 7: RVW模块集成 + 端到端测
### 5.1 RVW模块迁移第一批
| 貅先枚莉?| Code | 蜷咲ァー | 讓。蝮<EFBDA1> | 迥カ諤?|
| 源文件 | Code | 名称 | 模块 | 状态 |
|--------|------|------|------|------|
| review_editorial_system.txt | RVW_EDITORIAL | 遞ソ郤ヲ隗<EFBFBD>激諤ァ隸<EFBFBD>シ?| RVW | ACTIVE |
| review_methodology_system.txt | RVW_METHODOLOGY | 譁ケ豕募ュヲ隸<EFBFBD>シ?| RVW | ACTIVE |
| review_editorial_system.txt | RVW_EDITORIAL | 稿约规范性评估 | RVW | ACTIVE |
| review_methodology_system.txt | RVW_METHODOLOGY | 方法学评估 | RVW | ACTIVE |
> 豕ィ<EFBFBD>topic_evaluation_*` 譏?騾蛾「倩ッ<E580A9>シー"蜉溯<E89C89><E6BAAF>御ク榊ア樔コ山VW螳。遞ソ讓。蝮暦シ梧悴霑∫ァサ
> 注:`topic_evaluation_*` 是"选题评估"功能不属于RVW审稿模块未迁移
### 5.2 ASL模块迁移第二批待定
| 貅先枚莉?| Code | 蜷咲ァー | 讓。蝮<EFBDA1> |
| 源文件 | Code | 名称 | 模块 |
|--------|------|------|------|
| v1.1.0-standard.txt | ASL_SCREENING_STANDARD | <EFBFBD>「俶遭隕∫ュ幃€?譬<>) | ASL |
| v1.1.0-strict.txt | ASL_SCREENING_STRICT | <EFBFBD>「俶遭隕∫ュ幃€?荳・譬シ) | ASL |
| v1.1.0-lenient.txt | ASL_SCREENING_LENIENT | <EFBFBD>「俶遭隕∫ュ幃€?螳ス譚セ) | ASL |
| fulltext-screening/system_prompt.md | ASL_FULLTEXT_SYSTEM | 蜈ィ譁<EFBFBD>ュ幃€?System) | ASL |
| fulltext-screening/user_prompt_template.md | ASL_FULLTEXT_USER | 蜈ィ譁<EFBFBD>ュ幃€?User) | ASL |
| v1.1.0-standard.txt | ASL_SCREENING_STANDARD | 标题摘要筛选(标准) | ASL |
| v1.1.0-strict.txt | ASL_SCREENING_STRICT | 标题摘要筛选(严格) | ASL |
| v1.1.0-lenient.txt | ASL_SCREENING_LENIENT | 标题摘要筛选(宽松) | ASL |
| fulltext-screening/system_prompt.md | ASL_FULLTEXT_SYSTEM | 全文筛选(System) | ASL |
| fulltext-screening/user_prompt_template.md | ASL_FULLTEXT_USER | 全文筛选(User) | ASL |
### 5.3 其他模块迁移(第三批,待定)
| 讓。蝮<EFBFBD> | 鬚<>ョ。Prompt謨ー驥<EFBDB0> | 莨伜<E88EA8>郤?|
| 模块 | 预计Prompt数量 | 优先级 |
|------|---------------|--------|
| DC | 5+ | P1 |
| PKB | 3 | P2 |
| IIT | 3 | P2 |
| AIA | 10<EFBFBD>域匱閭ス菴難シ?| P3<50>亥セ<E4BAA5>€蜿托シ<E68998> |
| AIA | 10(智能体) | P3待开发 |
---
@@ -434,30 +579,35 @@ Day 7: RVW模块集成 + 端到端测
| 权限 Code | 描述 | 风险等级 |
|-----------|------|---------|
| `prompt:view` | 譟・逵輝rompt蛻苓。ィ蜥瑚ッヲ諠?| 菴?|
| `prompt:edit` | 蛻帛サコ/菫ョ謾ケDRAFT迚域悽 | 荳?|
| `prompt:debug` | €蜷ッ隹<EFBFBD>ッ墓ィ。蠑?| 荳?|
| `prompt:publish` | 蜿大クゥRAFT竊但CTIVE | **鬮?* |
| `prompt:view` | 查看Prompt列表和详情 | 低 |
| `prompt:edit` | 创建/修改DRAFT版本 | |
| `prompt:debug` | 开启调试模式 | 中 |
| `prompt:publish` | 发布DRAFT→ACTIVE | **高** |
### 6.2 角色权限分配
| 角色 | prompt:view | prompt:edit | prompt:debug | prompt:publish |
|------|-------------|-------------|--------------|----------------|
| SUPER_ADMIN | 笨?| 笨?| 笨?| 笨?|
| PROMPT_ENGINEER | 笨?| 笨?| 笨?| 笶?|
| HOSPITAL_ADMIN | 笶?| 笶?| 笶?| 笶?|
| PHARMA_ADMIN | 笶?| 笶?| 笶?| 笶?|
| USER | 笶?| 笶?| 笶?| 笶?|
| SUPER_ADMIN | ✅ | ✅ | ✅ | ✅ |
| PROMPT_ENGINEER | ✅ | ✅ | ✅ | ❌ |
| HOSPITAL_ADMIN | ❌ | ❌ | ❌ | ❌ |
| PHARMA_ADMIN | ❌ | ❌ | ❌ | ❌ |
| USER | ❌ | ❌ | ❌ | ❌ |
### 6.3 典型工作流
### 6.3 蜈ク蝙句キ・菴懈オ?
```
1. Prompt蟾・遞句ク?逋サ蠖慕ウサ扈<EFBDBB>
2. 霑帛<EFBFBD> Prompt 邂。逅<EFBFBD>。オ髱「<EFBFBD>梧伽蛻?RVW_EDITORIAL
3. 菫ョ謾ケ蜀<EFBFBD>ョケ<EFBFBD>檎せ蜃?菫晏ュ倩拷遞ソ"
4. €蜷ッ隹<EFBFBD>ッ墓ィ。蠑擾シ磯€画叫 RVW 讓。蝮暦シ?5. 蛻<>困蛻?RVW 荳壼苅鬘オ髱「<E9ABB1>御ク贋シ<E8B48B>豬玖ッ慕ィソ莉?6. 鬪瑚ッ∵譜譫懶シ悟ヲよ棡OK<4F>? - 蜈ウ髣ュ隹<EFBDAD>ッ墓ィ。蠑<EFBDA1>
- 騾夂衍 雜<>コァ邂。逅<EFBDA1><E98085>?螳。譬ク
7. 雜<>コァ邂。逅<EFBDA1><E98085>?逋サ蠖包シ梧衍逵玖拷遞ソ<E9819E>檎せ蜃サ"蜿大ク<E5A4A7>"
8. 譁ー迚域悽逕滓<E98095>?```
1. Prompt工程师 登录系统
2. 进入 Prompt 管理页面,找到 RVW_EDITORIAL
3. 修改内容,点击"保存草稿"
4. 开启调试模式(选择 RVW 模块)
5. 切换到 RVW 业务页面,上传测试稿件
6. 验证效果如果OK
- 关闭调试模式
- 通知 超级管理员 审核
7. 超级管理员 登录,查看草稿,点击"发布"
8. 新版本生效
```
---
@@ -465,7 +615,7 @@ Day 7: RVW模块集成 + 端到端测
### 7.1 单元测试
| 豬玖ッ暮。?| 隕<>尠蜀<E5B0A0>ョケ |
| 测试项 | 覆盖内容 |
|--------|---------|
| PromptService.get() | 灰度路由逻辑 |
| PromptService.render() | 变量渲染 |
@@ -475,37 +625,40 @@ Day 7: RVW模块集成 + 端到端测
| 测试场景 | 预期结果 |
|---------|---------|
| 譎ョ騾夂畑謌キ隶ソ髣?| 霑泌屓 ACTIVE 迚域悽 |
| <EFBFBD>ッ戊€<EFBFBD>シ亥シ€蜷ッRVW隹<EFBFBD>ッ包シ芽ョソ髣?RVW Prompt | 霑泌屓 DRAFT 迚域悽 |
| <EFBFBD>ッ戊€<EFBFBD>シ亥シ€蜷ッRVW隹<EFBFBD>ッ包シ芽ョソ髣?ASL Prompt | 霑泌屓 ACTIVE 迚域悽 |
| 普通用户访问 | 返回 ACTIVE 版本 |
| 调试者开启RVW调试访问 RVW Prompt | 返回 DRAFT 版本 |
| 调试者开启RVW调试访问 ASL Prompt | 返回 ACTIVE 版本 |
| 调试者(未开启调试)访问 | 返回 ACTIVE 版本 |
| 譌?ACTIVE 迚域悽譌?| 霑泌屓 FALLBACK |
| 謨ー謐ョ蠎謎ク榊庄逕ィ譌?| 霑泌屓 FALLBACK |
| ACTIVE 版本时 | 返回 FALLBACK |
| 数据库不可用时 | 返回 FALLBACK |
### 7.3 端到端测试
### 7.3 遶ッ蛻ー遶ッ豬玖ッ?
| 测试流程 | 步骤 |
|---------|------|
| 螳梧紛郛冶セ第オ∫ィ<EFBFBD> | 逋サ蠖補<E8A096>譟・逵句<E980B5>陦ィ竊堤シ冶セ鯛<EFBDBE>菫晏ュ倩拷遞ソ竊貞シ€蜷ッ隹<EFBDAF>ッ補<EFBDAF>鬪瑚ッ≫<EFBDAF>蜿大ク?|
| 完整编辑流程 | 登录→查看列表→编辑→保存草稿→开启调试→验证→发布 |
| 回滚流程 | 发布错误版本→回滚→验证 |
| 权限测试 | PROMPT_ENGINEER 无法发布 |
---
## 8. 鬟朱勦荳主コ泌ッ?
### 8.1 謚€譛ッ鬟朱<E9AC9F>?
## 8. 风险与应对
### 8.1 技术风险
| 风险 | 影响 | 概率 | 应对策略 |
|------|------|------|---------|
| capability_schema 蛻帛サコ螟ア雍・ | 邉サ扈滓裏豕募星蜉ィ | 菴?| 迢ャ遶鬼QL閼壽悽<E5A3BD>悟庄謇句勘菫ョ螟<EFBDAE> |
| 謨ー謐ョ蠎捺衍隸「雜<EFBFBD><EFBFBD>?| 逕ィ謌キ隸キ豎ょ序諷「 | 菴?| 菴ソ逕ィ郛灘ュ<E78198> + 蜈懷コ<E687B7> |
| 螟壼ョ樔セ狗シ灘ュ倅ク堺ク€閾?| 逕ィ謌キ菴馴ェ御ク堺ク€閾?| 荳?| LISTEN/NOTIFY 蜷梧ュ・ |
| <EFBFBD>ッ戊€<EFBFBD>ッッ蜿大ク<EFBFBD>漠隸ッPrompt | 郤ソ荳顔畑謌キ蜿怜スア蜩?| 荳?| 譚<>剞蛻<E5899E>ヲサ + 迚域悽蝗樊サ<E6A88A> |
| capability_schema 创建失败 | 系统无法启动 | 低 | 独立SQL脚本可手动修复 |
| 数据库查询超时 | 用户请求变慢 | 低 | 使用缓存 + 兜底 |
| 多实例缓存不一致 | 用户体验不一致 | 中 | LISTEN/NOTIFY 同步 |
| 调试者误发布错误Prompt | 线上用户受影响 | 中 | 权限分离 + 版本回滚 |
### 8.2 业务风险
| 风险 | 影响 | 应对策略 |
|------|------|---------|
| Prompt 謾ケ蜉ィ蟇シ閾エAI謨域棡荳矩剄 | 荳壼苅蜿怜スア蜩?| 轣ー蠎ヲ鬪瑚ッ<E7919A> + 蠢ォ騾溷屓貊?|
| <EFBFBD>剞邂。逅<EFBFBD>キキ荵ア | 隸ッ謫堺ス?| 荳・譬シRBAC + 螳。隶。譌・蠢<EFBDA5> |
| Prompt 改动导致AI效果下降 | 业务受影响 | 灰度验证 + 快速回滚 |
| 权限管理混乱 | 误操作 | 严格RBAC + 审计日志 |
### 8.3 兜底策略
@@ -524,7 +677,8 @@ async get(code: string, variables: any, userId: string): Promise<string> {
return this.render(cached, variables);
}
// Level 3: 遑ャ郛也<EFBFBD><EFBFBD>蠎? logger.error('Cache miss, using fallback', { code });
// Level 3: 硬编码兜底
logger.error('Cache miss, using fallback', { code });
return this.render(this.getFallback(code), variables);
}
}
@@ -536,9 +690,9 @@ async get(code: string, variables: any, userId: string): Promise<string> {
### A. 相关文档
- [Prompt邂。逅<EFBFBD>ウサ扈滉ク守<EFBFBD>蠎ヲ鬚<EFBFBD>ァ郁ョセ隶。譁ケ譯<EFBFBD>(../02-謚€譛ッ隶セ隶?02-騾夂畑閭ス蜉帛ア<E5B89B>03-Prompt邂。逅<EFBDA1>ウサ扈滉ク守<EFBDB8>蠎ヲ鬚<EFBDA6>ァ郁ョセ隶。譁ケ譯?md)
- [Prompt邂。逅<EFBFBD>ウサ扈溷ソォ騾溷盾閠ゾ(../02-謚€譛ッ隶セ隶?03-Prompt邂。逅<EFBDA1>ウサ扈溷ソォ騾溷盾閠?md)
- [Prompt邂。逅<EFBFBD>錘蜿ー隶セ隶。](../02-謚€譛ッ隶セ隶?Prompt邂。逅<EFBDA1>錘蜿ー隶セ隶。.md)
- [Prompt管理系统与灰度预览设计方案](../02-技术设计/02-通用能力层_03-Prompt管理系统与灰度预览设计方案.md)
- [Prompt管理系统快速参考](../02-技术设计/03-Prompt管理系统快速参考.md)
- [Prompt管理后台设计](../02-技术设计/Prompt管理后台设计.md)
### B. 代码位置
@@ -552,17 +706,21 @@ async get(code: string, variables: any, userId: string): Promise<string> {
### C. 命名规范
**Prompt Code 蜻ス蜷崎ァ<EFBFBD><EFBFBD><EFBFBD>?*
**Prompt Code 命名规则:**
```
{MODULE}_{FUNCTION}_{ROLE}
遉コ萓具シ?- RVW_EDITORIAL # RVW讓。蝮<EFBDA1>-遞ソ郤ヲ隗<EFBDA6>激諤ァ隸<EFBDA7>シ?- RVW_METHODOLOGY # RVW讓。蝮<EFBDA1>-譁ケ豕募ュヲ隸<EFBDA6>シ?- ASL_SCREENING_STANDARD # ASL讓。蝮<EFBDA1>-譬<>㊥遲幃€?- AIA_AGENT_STATISTICIAN # AIA讓。蝮<EFBDA1>-扈溯ョ。蟶域匱閭ス菴<EFBDBD>
示例:
- RVW_EDITORIAL # RVW模块-稿约规范性评估
- RVW_METHODOLOGY # RVW模块-方法学评估
- ASL_SCREENING_STANDARD # ASL模块-标准筛选
- AIA_AGENT_STATISTICIAN # AIA模块-统计师智能体
```
---
*最后更新2026-01-11*
**<EFBFBD>噫 蜃<><EFBFBD>・ス蠑€蟋倶コ<E580B6><EFBFBD>滉サ?Phase 3.5.1 隨ャ荳€荳ェ莉サ蜉。蠑€蟋具シ<E585B7>**
**🚀 准备好开始了吗?从 Phase 3.5.1 第一个任务开始!**