Major Features: - Tenant management CRUD (list, create, edit, delete, module configuration) - Dynamic module management system (modules table with 8 modules) - Multi-tenant module permission merging (ModuleService) - Module access control middleware (requireModule) - User module permission API (GET /api/v1/auth/me/modules) - Frontend module permission filtering (HomePage + TopNavigation) Module Integration: - RVW module integrated with PromptService (editorial + methodology) - All modules (RVW/PKB/ASL/DC) added authenticate + requireModule middleware - Fixed ReviewTask foreign key constraint (cross-schema issue) - Removed all MOCK_USER_ID, unified to request.user?.userId Prompt Management Enhancements: - Module names displayed in Chinese (RVW -> 智能审稿) - Enhanced version history with view content and rollback features - List page shows both activeVersion and draftVersion columns Database Changes: - Added platform_schema.modules table - Modified tenant_modules table (added index and UUID) - Removed ReviewTask foreign key to public.users (cross-schema fix) - Seeded 8 modules: RVW, PKB, ASL, DC, IIT, AIA, SSA, ST Documentation Updates: - Updated ADMIN module development status - Updated TODO checklist (89% progress) - Updated Prompt management plan (Phase 3.5.5 completed) - Added module authentication specification Files Changed: 80+ Status: All features tested and verified locally Next: User management module development
620 lines
19 KiB
Markdown
620 lines
19 KiB
Markdown
# ADMIN-运营管理端 - 开发TODO清单
|
||
|
||
> **版本:** v1.3
|
||
> **创建日期:** 2026-01-11
|
||
> **最后更新:** 2026-01-12
|
||
> **总进度:** 98/110 (89%)
|
||
> **状态:** ✅ Phase 3.5.5 已完成,Phase 4.0 租户管理已完成
|
||
|
||
---
|
||
|
||
## 📊 总体进度
|
||
|
||
```
|
||
████████░░ 89%
|
||
```
|
||
|
||
| Phase | 完成 | 总计 | 进度 | 状态 |
|
||
|-------|------|------|------|------|
|
||
| Phase 0 | 10 | 10 | 100% | ✅ 已完成 |
|
||
| Phase 1 | 15 | 15 | 100% | ✅ 已完成 |
|
||
| Phase 2 | 20 | 20 | 100% | ✅ 已完成 |
|
||
| Phase 3 | 12 | 12 | 100% | ✅ 已完成 |
|
||
| Phase 3.5 | 18 | 18 | 100% | ✅ 已完成 2026-01-12 |
|
||
| Phase 4 | 19 | 25 | 76% | 🚧 租户管理已完成 2026-01-12 |
|
||
| Phase 5 | 0 | 10 | 0% | ⏳ 待开始 |
|
||
|
||
---
|
||
|
||
## 📋 测试账号信息(Seed数据)
|
||
|
||
> ⚠️ 默认密码:`123456`
|
||
> ✅ **登录测试通过**:2026-01-11
|
||
|
||
### 运营团队账号
|
||
|
||
| 手机号 | 姓名 | 角色 | 租户 | 说明 |
|
||
|--------|------|------|------|------|
|
||
| `13800000001` | 超级管理员 | SUPER_ADMIN | 壹证循科技 | 拥有所有权限 |
|
||
| `13800000002` | Prompt工程师 | PROMPT_ENGINEER | 壹证循科技 | Prompt调试权限 |
|
||
|
||
### 医院测试账号
|
||
|
||
| 手机号 | 姓名 | 角色 | 租户 | 科室 |
|
||
|--------|------|------|------|------|
|
||
| `13800000003` | 医院管理员 | HOSPITAL_ADMIN | 北京积水潭医院 | - |
|
||
| `13800000004` | 科室主任 | DEPARTMENT_ADMIN | 北京积水潭医院 | 骨科 |
|
||
| `13800000005` | 普通医生 | USER | 北京积水潭医院 | 骨科 |
|
||
|
||
### 药企测试账号
|
||
|
||
| 手机号 | 姓名 | 角色 | 租户 |
|
||
|--------|------|------|------|
|
||
| `13800000006` | 药企管理员 | PHARMA_ADMIN | 武田制药 |
|
||
| `13800000007` | 药企研究员 | USER | 武田制药 |
|
||
|
||
### 个人用户账号
|
||
|
||
| 手机号 | 姓名 | 角色 | 租户 |
|
||
|--------|------|------|------|
|
||
| `13800000008` | 个人用户 | USER | 个人用户 |
|
||
|
||
### 租户信息
|
||
|
||
| 租户Code | 名称 | 类型 | 状态 |
|
||
|----------|------|------|------|
|
||
| `yizhengxun` | 壹证循科技 | INTERNAL | ✅ 活跃 |
|
||
| `jishuitan` | 北京积水潭医院 | HOSPITAL | ✅ 活跃 |
|
||
| `takeda` | 武田制药 | PHARMA | ✅ 活跃 |
|
||
| `public` | 个人用户 | PUBLIC | ✅ 活跃 |
|
||
|
||
### 登录URL
|
||
|
||
| 类型 | URL |
|
||
|------|-----|
|
||
| 通用登录 | `http://localhost:3000/login` |
|
||
| 壹证循科技 | `http://localhost:3000/t/yizhengxun/login` |
|
||
| 北京积水潭医院 | `http://localhost:3000/t/jishuitan/login` |
|
||
| 武田制药 | `http://localhost:3000/t/takeda/login` |
|
||
| 个人用户 | `http://localhost:3000/t/public/login` |
|
||
|
||
---
|
||
|
||
## Phase 0: 数据迁移(1天)✅ 已完成
|
||
|
||
**目标:** 统一用户表,准备基础环境
|
||
|
||
> ⚠️ **注意**:2026-01-11 因数据库事故,采用了"重建+seed"方式而非迁移方式。详见 [事故总结](../../../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用户、3租户、2科室、15权限
|
||
- [x] 关键字段完整性检查 ✅ 所有必填字段已填充
|
||
- [x] 编写验证报告 ✅ verify_all_users.ts
|
||
|
||
---
|
||
|
||
## Phase 1: 数据库Schema设计(2天)✅ 已完成
|
||
|
||
**目标:** 创建所有核心表
|
||
|
||
> ✅ **完成日期**: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表扩展 ✅
|
||
- [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: 后端认证系统(3天)✅ 已完成
|
||
|
||
**目标:** 实现JWT认证和权限控制
|
||
|
||
> 📁 代码位置: `backend/src/common/auth/`
|
||
> ✅ **完成日期**:2026-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: 前端认证对接(2天)✅ 已完成
|
||
|
||
**目标:** 实现登录页面和权限对接
|
||
|
||
> 📁 代码位置: `frontend-v2/src/framework/auth/`, `frontend-v2/src/pages/LoginPage.tsx`
|
||
> ✅ **完成日期**: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] 未登录用户重定向到登录页 ✅
|
||
|
||
---
|
||
|
||
## Phase 3.5: Prompt管理系统(7天)⭐ 下一步
|
||
|
||
**目标:** 实现生产环境灰度预览系统
|
||
|
||
> 🎯 **下一阶段重点** - 运营管理端核心功能
|
||
> 📄 **详细计划:** [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(2个)✅ 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(5天)
|
||
|
||
**目标:** 实现核心租户管理功能
|
||
|
||
### Day 1-2: 租户管理
|
||
|
||
#### 后端API
|
||
- [ ] `GET /api/admin/tenants` - 获取租户列表
|
||
- [ ] `POST /api/admin/tenants` - 创建租户
|
||
- [ ] `GET /api/admin/tenants/:id` - 获取租户详情
|
||
- [ ] `PUT /api/admin/tenants/:id` - 更新租户
|
||
- [ ] `DELETE /api/admin/tenants/:id` - 删除租户(软删除)
|
||
|
||
#### 前端页面
|
||
- [ ] `TenantListPage.tsx` - 租户列表
|
||
- [ ] `TenantFormPage.tsx` - 创建/编辑租户表单
|
||
- [ ] 基本信息(name, code, type)
|
||
- [ ] 联系信息(contact, phone, email)
|
||
- [ ] 状态管理(active/inactive)
|
||
- [ ] `TenantDetailPage.tsx` - 租户详情
|
||
|
||
### Day 3: 品牌配置
|
||
|
||
#### 后端API
|
||
- [ ] `POST /api/admin/tenants/:id/branding` - 更新品牌配置
|
||
- [ ] `POST /api/admin/upload/logo` - 上传Logo到OSS
|
||
- [ ] `POST /api/admin/upload/background` - 上传背景图到OSS
|
||
- [ ] `GET /api/public/tenant-config/:code` - 获取租户配置(公开API)
|
||
|
||
#### 前端页面
|
||
- [ ] `TenantBrandingPage.tsx` - 品牌配置
|
||
- [ ] Logo上传(拖拽或点击)
|
||
- [ ] 背景图上传
|
||
- [ ] 主题色选择器(Color Picker)
|
||
- [ ] 系统名称自定义
|
||
- [ ] 实时预览
|
||
|
||
#### OSS集成
|
||
- [ ] 配置阿里云OSS
|
||
- [ ] 实现文件上传服务
|
||
- [ ] 生成公开访问URL
|
||
|
||
### Day 4: Feature Flag管理
|
||
|
||
#### 后端API
|
||
- [ ] `GET /api/admin/feature-flags` - 获取所有Feature Flag
|
||
- [ ] `PUT /api/admin/feature-flags/:id` - 更新Feature Flag
|
||
- [ ] `POST /api/admin/feature-flags/:id/toggle` - 切换开关
|
||
|
||
#### 前端页面
|
||
- [ ] `FeatureFlagListPage.tsx` - Feature Flag列表
|
||
- [ ] 模块列表(ASL/DC/IIT等)
|
||
- [ ] 开关切换
|
||
- [ ] 应用到租户配置
|
||
|
||
### Day 5: 集成测试
|
||
|
||
#### 功能测试
|
||
- [ ] 创建租户流程测试
|
||
- [ ] 品牌配置流程测试
|
||
- [ ] Feature Flag管理测试
|
||
|
||
#### 权限测试
|
||
- [ ] 超级管理员权限测试
|
||
- [ ] 非管理员访问测试(应拒绝)
|
||
|
||
#### 数据一致性测试
|
||
- [ ] 租户创建后数据验证
|
||
- [ ] 品牌配置保存验证
|
||
|
||
---
|
||
|
||
## Phase 5: 租户专属登录(2天)
|
||
|
||
**目标:** 实现租户品牌化登录页
|
||
|
||
### Day 1: 租户登录页
|
||
|
||
#### TenantLoginPage.tsx
|
||
- [ ] 创建租户登录页组件
|
||
- [ ] 解析URL中的`tenantCode`参数
|
||
- [ ] 调用`/api/public/tenant-config/:code`获取配置
|
||
- [ ] 动态加载Logo
|
||
- [ ] 动态设置背景图
|
||
- [ ] 动态应用主题色(CSS变量)
|
||
- [ ] 动态设置页面标题(document.title)
|
||
|
||
#### 样式定制
|
||
- [ ] 使用CSS变量支持动态主题
|
||
- [ ] 响应式布局
|
||
- [ ] 加载态处理
|
||
- [ ] 错误处理(租户不存在)
|
||
|
||
### Day 2: 路由分发
|
||
|
||
#### 登录后跳转逻辑
|
||
- [ ] 根据`role`判断跳转目标
|
||
- [ ] `SUPER_ADMIN` → 运营管理端
|
||
- [ ] `PROMPT_ENGINEER` → 运营管理端(Prompt管理)
|
||
- [ ] `HOSPITAL_ADMIN` → 机构管理端(医院)
|
||
- [ ] `PHARMA_ADMIN` → 机构管理端(药企)
|
||
- [ ] `USER` → 业务模块首页
|
||
|
||
#### 路由配置
|
||
- [ ] 配置`/t/:tenantCode/login`路由
|
||
- [ ] 配置通用登录页重定向逻辑
|
||
|
||
#### 测试
|
||
- [ ] 测试不同租户的品牌加载
|
||
- [ ] 测试不同角色的路由跳转
|
||
- [ ] 测试错误场景(无效tenantCode)
|
||
|
||
---
|
||
|
||
## Phase 6: 机构管理端(待定)
|
||
|
||
**目标:** 实现医院端和药企端自服务管理
|
||
|
||
### 医院管理端
|
||
- [ ] 用户管理
|
||
- [ ] 科室管理(多级结构)
|
||
- [ ] 配额分配(科室/个人)
|
||
- [ ] 审计日志查询
|
||
|
||
### 药企管理端
|
||
- [ ] 用户管理
|
||
- [ ] 项目管理
|
||
- [ ] 配额分配(项目/个人)
|
||
- [ ] 审计日志查询(FDA合规)
|
||
|
||
**备注:** Phase 6依赖Phase 0-5完成,详细任务待运营端完成后分解
|
||
|
||
---
|
||
|
||
## 🔧 持续性任务
|
||
|
||
### 文档维护
|
||
- [ ] 及时更新API文档
|
||
- [ ] 编写用户手册
|
||
|
||
### 代码质量
|
||
- [ ] 代码审查(每个PR)
|
||
- [ ] 单元测试覆盖率>60%
|
||
- [ ] ESLint检查通过
|
||
- [ ] TypeScript类型检查通过
|
||
|
||
### 安全测试
|
||
- [ ] JWT Token安全测试
|
||
- [ ] 多租户隔离测试
|
||
- [ ] SQL注入测试
|
||
- [ ] XSS攻击测试
|
||
|
||
### 性能优化
|
||
- [ ] 数据库查询优化
|
||
- [ ] 缓存策略优化
|
||
- [ ] 前端打包优化
|
||
|
||
---
|
||
|
||
## 📝 使用说明
|
||
|
||
### 如何更新TODO
|
||
|
||
1. **完成任务时**
|
||
```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!**
|
||
|