# ADMIN-运营管理?- 开发TODO清单 > **版本?* v1.3 > **创建日期?* 2026-01-11 > **最后更新:** 2026-01-12 > **总进度:** 98/110 (89%) > **状态:** ?Phase 3.5.5 已完成,Phase 4.0 租户管理已完? --- ## 📊 总体进度 ``` ████████░░ 89% ``` | Phase | 完成 | 总计 | 进度 | 状?| |-------|------|------|------|------| | Phase 0 | 10 | 10 | 100% | ?已完?| | Phase 1 | 15 | 15 | 100% | ?已完?| | Phase 2 | 20 | 20 | 100% | ?已完?| | Phase 3 | 12 | 12 | 100% | ?已完?| | Phase 3.5 | 18 | 18 | 100% | ?已完?2026-01-12 | | Phase 4 | 19 | 25 | 76% | 🚧 租户管理已完?2026-01-12 | | Phase 5 | 0 | 10 | 0% | ?待开?| --- ## 📋 测试账号信息(Seed数据? > ⚠️ 默认密码:`123456` > ?**登录测试通过**?026-01-11 ### 运营团队账号 | 手机?| 姓名 | 角色 | 租户 | 说明 | |--------|------|------|------|------| | `13800000001` | 超级管理?| SUPER_ADMIN | 壹证循科技 | 拥有所有权?| | `13800000002` | Prompt工程?| PROMPT_ENGINEER | 壹证循科技 | Prompt调试权限 | ### 医院测试账号 | 手机?| 姓名 | 角色 | 租户 | 科室 | |--------|------|------|------|------| | `13800000003` | 医院管理?| HOSPITAL_ADMIN | 北京积水潭医?| - | | `13800000004` | 科室主任 | DEPARTMENT_ADMIN | 北京积水潭医?| 骨科 | | `13800000005` | 普通医?| USER | 北京积水潭医?| 骨科 | ### 药企测试账号 | 手机?| 姓名 | 角色 | 租户 | |--------|------|------|------| | `13800000006` | 药企管理?| PHARMA_ADMIN | 武田制药 | | `13800000007` | 药企研究?| USER | 武田制药 | ### 个人用户账号 | 手机?| 姓名 | 角色 | 租户 | |--------|------|------|------| | `13800000008` | 个人用户 | USER | 个人用户 | ### 租户信息 | 租户Code | 名称 | 类型 | 状?| |----------|------|------|------| | `yizhengxun` | 壹证循科技 | INTERNAL | ?活跃 | | `jishuitan` | 北京积水潭医?| HOSPITAL | ?活跃 | | `takeda` | 武田制药 | PHARMA | ?活跃 | | `public` | 个人用户 | PUBLIC | ?活跃 | ### 登录URL | 类型 | URL | |------|-----| | 通用登录 | `http://localhost:3000/login` | | 壹证循科技 | `http://localhost:3000/t/yizhengxun/login` | | 北京积水潭医?| `http://localhost:3000/t/jishuitan/login` | | 武田制药 | `http://localhost:3000/t/takeda/login` | | 个人用户 | `http://localhost:3000/t/public/login` | --- ## Phase 0: 数据迁移?天)?已完? **目标?* 统一用户表,准备基础环境 > ⚠️ **注意**?026-01-11 因数据库事故,采用了"重建+seed"方式而非迁移方式。详?[事故总结](../../../08-项目管理/2026-01-11-数据库事故总结.md) ### 数据备份 - [x] 备份`public.users`表数??使用 backup_20260111_131506.sql - [x] 备份`platform_schema.User`表数??同上 - [x] 备份所有关联表(如AdminLog)✅ 同上 ### 数据迁移 - [x] 编写迁移脚本 ?改为使用 prisma/seed.ts 重建 - [x] 处理ID映射(旧ID ?新UUID)✅ 新UUID自动生成 - [x] 更新外键关联 ?schema.prisma 已定?- [x] 验证数据完整??verify_system.ts 验证通过 ### 数据清理 - [x] 重命名`public.users`为`public.users_backup` ?保留 mock 用户用于兼容 - [x] 设置7天后自动删除提醒 ?不再需要,已采用双表兼容方? ### 超级管理?- [x] 创建超级管理员账??13800000001 - [x] 验证账号可用 ?seed 执行成功 ### 验证 - [x] 数据条数一致性检??5用户?租户?科室?5权限 - [x] 关键字段完整性检??所有必填字段已填充 - [x] 编写验证报告 ?verify_all_users.ts --- ## Phase 1: 数据库Schema设计?天)?已完? **目标?* 创建所有核心表 > ?**完成日期**?026-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表扩??- [x] 添加`tenantId`字段 ?- [x] 添加`departmentId`字段 ?- [x] 修改`role`字段为Enum类型 ?`UserRole` - [x] 添加索引 ? #### tenant_members??- [x] 定义表结??`platform_schema.tenant_members` - [x] 建立与tenants和users的关??- [x] 添加`role`字段(租户内角色)✅ ### 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] 运行种子数据 ? ### 📝 Seed 用户信息汇总(完整? | 手机?| 密码 | 姓名 | 角色 | 租户 | 科室 | |--------|------|------|------|------|------| | 13800000001 | 123456 | 超级管理?| SUPER_ADMIN | 壹证循科技 | - | | 13800000002 | 123456 | Prompt工程?| PROMPT_ENGINEER | 壹证循科技 | - | | 13800000003 | 123456 | 医院管理?| HOSPITAL_ADMIN | 北京积水潭医?| - | | 13800000004 | 123456 | 科室主任 | DEPARTMENT_ADMIN | 北京积水潭医?| 骨科 | | 13800000005 | 123456 | 普通医?| USER | 北京积水潭医?| 骨科 | | 13800000006 | 123456 | 药企管理?| PHARMA_ADMIN | 武田制药 | - | | 13800000007 | 123456 | 药企研究?| USER | 武田制药 | - | | 13800000008 | 123456 | 个人用户 | USER | 个人用户 | - | **租户专属登录URL?* - 通用登录: `/login` - 壹证循科技: `/t/yizhengxun/login` - 北京积水潭医? `/t/jishuitan/login` - 武田制药: `/t/takeda/login` - 个人用户: `/t/public/login` > ⚠️ 使用默认密码登录会提示修改密码(可跳过) --- ## Phase 2: 后端认证系统?天)?已完? **目标?* 实现JWT认证和权限控? > 📁 代码位置: `backend/src/common/auth/` > ?**完成日期**?026-01-11 ### Day 1: JWT工具??已完? #### 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] 单元测试 ?命令行验证通过 ### Day 2: 认证API ?已完? #### 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] 测试权限控制 ? --- ## Phase 3: 前端认证对接?天)?已完? **目标?* 实现登录页面和权限对? > 📁 代码位置: `frontend-v2/src/framework/auth/`, `frontend-v2/src/pages/LoginPage.tsx` > ?**完成日期**?026-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] 未登录用户重定向到登录页 ? --- ## Phase 3.5: Prompt管理系统?天)?下一? **目标?* 实现生产环境灰度预览系统 > 🎯 **下一阶段重点** - 运营管理端核心功? > 📄 **详细计划?* [02-Prompt管理系统开发计?md](./02-Prompt管理系统开发计?md) ### 已确认需? | 需求项 | 确认结果 | |--------|---------| | 优先接入模块 | ?RVW 模块先行 | | 权限细分 | ?PROMPT_ENGINEER只能编辑,SUPER_ADMIN才能发布 | | 数据迁移 | ?自动迁移现有文件Prompt | | 调试范围 | ?可指定模?| ### 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] 编写迁移脚本 ?2026-01-11 - [x] 迁移 RVW 模块 Prompt?个)?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] 编写兜底Prompt(hardcoded)✅ 2026-01-11 ### Phase 3.5.3: 管理API(Day 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` - 回滚 ?2026-01-11 - [x] `POST /api/admin/prompts/debug` - 调试开关(支持模块选择)✅ 2026-01-11 - [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 编辑??2026-01-11 - [x] 简化配置(行号+换行+变量高亮+搜索+撤销)✅ - [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: 运营管理端MVP?天) **目标?* 实现核心租户管理功能 ### Day 1-2: 租户管理 #### 后端API - [ ] `GET /api/admin/tenants` - 获取租户列表 - [ ] `POST /api/admin/tenants` - 创建租户 - [ ] `GET /api/admin/tenants/:id` - 获取租户详情 - [ ] `PUT /api/admin/tenants/:id` - 更新租户 - [ ] `DELETE /api/admin/tenants/:id` - 删除租户(软删除? #### 前端页面 - [ ] `TenantListPage.tsx` - 租户列表 - [ ] `TenantFormPage.tsx` - 创建/编辑租户表单 - [ ] 基本信息(name, code, type? - [ ] 联系信息(contact, phone, email? - [ ] 状态管理(active/inactive?- [ ] `TenantDetailPage.tsx` - 租户详情 ### Day 3: 品牌配置 #### 后端API - [ ] `POST /api/admin/tenants/:id/branding` - 更新品牌配置 - [ ] `POST /api/admin/upload/logo` - 上传Logo到OSS - [ ] `POST /api/admin/upload/background` - 上传背景图到OSS - [ ] `GET /api/public/tenant-config/:code` - 获取租户配置(公开API? #### 前端页面 - [ ] `TenantBrandingPage.tsx` - 品牌配置 - [ ] Logo上传(拖拽或点击? - [ ] 背景图上? - [ ] 主题色选择器(Color Picker? - [ ] 系统名称自定? - [ ] 实时预览 #### OSS集成 - [ ] 配置阿里云OSS - [ ] 实现文件上传服务 - [ ] 生成公开访问URL ### Day 4: Feature Flag管理 #### 后端API - [ ] `GET /api/admin/feature-flags` - 获取所有Feature Flag - [ ] `PUT /api/admin/feature-flags/:id` - 更新Feature Flag - [ ] `POST /api/admin/feature-flags/:id/toggle` - 切换开? #### 前端页面 - [ ] `FeatureFlagListPage.tsx` - Feature Flag列表 - [ ] 模块列表(ASL/DC/IIT等) - [ ] 开关切? - [ ] 应用到租户配? ### Day 5: 集成测试 #### 功能测试 - [ ] 创建租户流程测试 - [ ] 品牌配置流程测试 - [ ] Feature Flag管理测试 #### 权限测试 - [ ] 超级管理员权限测?- [ ] 非管理员访问测试(应拒绝? #### 数据一致性测?- [ ] 租户创建后数据验?- [ ] 品牌配置保存验证 --- ## Phase 5: 租户专属登录?天) **目标?* 实现租户品牌化登录页 ### Day 1: 租户登录? #### TenantLoginPage.tsx - [ ] 创建租户登录页组?- [ ] 解析URL中的`tenantCode`参数 - [ ] 调用`/api/public/tenant-config/:code`获取配置 - [ ] 动态加载Logo - [ ] 动态设置背景图 - [ ] 动态应用主题色(CSS变量?- [ ] 动态设置页面标题(document.title? #### 样式定制 - [ ] 使用CSS变量支持动态主?- [ ] 响应式布局 - [ ] 加载态处?- [ ] 错误处理(租户不存在? ### Day 2: 路由分发 #### 登录后跳转逻辑 - [ ] 根据`role`判断跳转目标 - [ ] `SUPER_ADMIN` ?运营管理? - [ ] `PROMPT_ENGINEER` ?运营管理端(Prompt管理? - [ ] `HOSPITAL_ADMIN` ?机构管理端(医院? - [ ] `PHARMA_ADMIN` ?机构管理端(药企? - [ ] `USER` ?业务模块首页 #### 路由配置 - [ ] 配置`/t/:tenantCode/login`路由 - [ ] 配置通用登录页重定向逻辑 #### 测试 - [ ] 测试不同租户的品牌加?- [ ] 测试不同角色的路由跳?- [ ] 测试错误场景(无效tenantCode? --- ## Phase 6: 机构管理端(待定? **目标?* 实现医院端和药企端自服务管理 ### 医院管理?- [ ] 用户管理 - [ ] 科室管理(多级结构) - [ ] 配额分配(科?个人?- [ ] 审计日志查询 ### 药企管理?- [ ] 用户管理 - [ ] 项目管理 - [ ] 配额分配(项?个人?- [ ] 审计日志查询(FDA合规? **备注?* Phase 6依赖Phase 0-5完成,详细任务待运营端完成后分解 --- ## 🔧 持续性任? ### 文档维护 - [ ] 及时更新API文档 - [ ] 编写用户手册 ### 代码质量 - [ ] 代码审查(每个PR?- [ ] 单元测试覆盖?60% - [ ] ESLint检查通过 - [ ] TypeScript类型检查通过 ### 安全测试 - [ ] JWT Token安全测试 - [ ] 多租户隔离测?- [ ] SQL注入测试 - [ ] XSS攻击测试 ### 性能优化 - [ ] 数据库查询优?- [ ] 缓存策略优化 - [ ] 前端打包优化 --- ## 📝 使用说明 ### 如何更新TODO 1. **完成任务?* ```markdown - [x] 任务描述 ``` 2. **更新进度** ```markdown Phase 1: █████░░░░░ 50% (7/15) ``` 3. **添加备注** ```markdown - [x] 任务描述 ?2026-01-12完成 by张三 ``` ### 优先级标? - 🔴 P0 - 必须完成 - 🟡 P1 - 重要 - 🟢 P2 - 可? ### 状态标? - ?待开?- 🚧 进行?- ?已完?- ?已取?- ⚠️ 阻塞 --- ## 📊 快速统? ```bash # 统计完成任务?grep -c "- \[x\]" 01-TODO清单(可追踪?md # 统计总任务数 grep -c "- \[ \]" 01-TODO清单(可追踪?md ``` --- *最后更新:2026-01-11 Phase 3.5.4完成* **🚀 下一步:Phase 3.5.5 RVW模块集成 - 业务模块使用 PromptService?*