feat(admin): Complete Phase 3.5.1-3.5.4 Prompt Management System (83%)
Summary: - Implement Prompt management infrastructure and core services - Build admin portal frontend with light theme - Integrate CodeMirror 6 editor for non-technical users Phase 3.5.1: Infrastructure Setup - Create capability_schema for Prompt storage - Add prompt_templates and prompt_versions tables - Add prompt:view/edit/debug/publish permissions - Migrate RVW prompts to database (RVW_EDITORIAL, RVW_METHODOLOGY) Phase 3.5.2: PromptService Core - Implement gray preview logic (DRAFT for debuggers, ACTIVE for users) - Module-level debug control (setDebugMode) - Handlebars template rendering - Variable extraction and validation (extractVariables, validateVariables) - Three-level disaster recovery (database -> cache -> hardcoded fallback) Phase 3.5.3: Management API - 8 RESTful endpoints (/api/admin/prompts/*) - Permission control (PROMPT_ENGINEER can edit, SUPER_ADMIN can publish) Phase 3.5.4: Frontend Management UI - Build admin portal architecture (AdminLayout, OrgLayout) - Add route system (/admin/*, /org/*) - Implement PromptListPage (filter, search, debug switch) - Implement PromptEditor (CodeMirror 6 simplified for clinical users) - Implement PromptEditorPage (edit, save, publish, test, version history) Technical Details: - Backend: 6 files, ~2044 lines (prompt.service.ts 596 lines) - Frontend: 9 files, ~1735 lines (PromptEditorPage.tsx 399 lines) - CodeMirror 6: Line numbers, auto-wrap, variable highlight, search, undo/redo - Chinese-friendly: 15px font, 1.8 line-height, system fonts Next Step: Phase 3.5.5 - Integrate RVW module with PromptService Tested: Backend API tests passed (8/8), Frontend pending user testing Status: Ready for Phase 3.5.5 RVW integration
This commit is contained in:
210
docs/03-业务模块/ADMIN-运营管理端/01-需求分析/02-通用能力层_07-运营与机构管理端PRD_v2.1.md
Normal file
210
docs/03-业务模块/ADMIN-运营管理端/01-需求分析/02-通用能力层_07-运营与机构管理端PRD_v2.1.md
Normal file
@@ -0,0 +1,210 @@
|
||||
# **壹证循AI平台 \- 运营与机构管理端 PRD**
|
||||
|
||||
文档版本: v2.1
|
||||
状态: 待开发 (Ready for Dev)
|
||||
优先级: P0
|
||||
架构模式: 模块化单体 (Modular Monolith)
|
||||
更新摘要: 新增“品牌定制”需求;定义专属登录页 URL 规范;细化租户配置字段。
|
||||
|
||||
## **1\. 业务背景与需求分析 (Context & Requirements)**
|
||||
|
||||
### **1.1 为什么要做管理端?(Why)**
|
||||
|
||||
目前的系统(User App)是一个强大的单兵作战工具,但要转化为可规模化销售的 **SaaS 商业产品**,我们面临“管理真空”:
|
||||
|
||||
1. **无法交付 B 端**:医院买了系统,科主任无法把账号分给医生,药企买了系统,无法监控项目进度。
|
||||
2. **AI 成本黑洞**:缺乏全局视角的 Token 消耗监控,单次大规模任务可能导致亏损。
|
||||
3. **研发效能瓶颈**:每次调整 Prompt(提示词)都需要改代码、发版,无法快速响应临床专家对 AI 效果的反馈。
|
||||
|
||||
### **1.2 差异化需求画像 (Who needs what)**
|
||||
|
||||
#### **A. 运营管理端 (Ops) \- "上帝视角"**
|
||||
|
||||
* **痛点**:不知道谁在用,不知道花了多少钱,不敢随便发新版。
|
||||
* **核心诉求**:
|
||||
* **开户**:给医院/药企开通租户,配置模块(卖什么给谁)。
|
||||
* **调优**:在不打扰用户的情况下,调试 AI Prompt。
|
||||
* **风控**:监控 Token 消耗,异常熔断。
|
||||
|
||||
#### **B. 医院机构端 (Hospital Admin) \- "管人与管钱"**
|
||||
|
||||
* **痛点**:医生流动性大,科研经费分配难。
|
||||
* **核心诉求**:
|
||||
* **品牌归属感**:登录页必须是医院自己的大楼照片和 Logo,体现“本院科研平台”的专属感。
|
||||
* **层级管理**:按“科室”管理医生(如心内科、肿瘤科)。
|
||||
* **配额分配**:将购买的总 Token 额度分配给不同科室或个人。
|
||||
|
||||
#### **C. 药企机构端 (Pharma Admin) \- "管项目与合规"**
|
||||
|
||||
* **痛点**:IIT 项目分散在多家医院,数据进度不透明,合规风险大。
|
||||
* **核心诉求**:
|
||||
* **品牌定制**:药企 Logo 必须时刻可见,符合企业 VI 规范。
|
||||
* **项目视图**:不是管人,而是管“项目”(如某抗癌药临床研究)。
|
||||
* **审计合规**:所有操作必须有痕迹(Audit Log)。
|
||||
|
||||
## **2\. 核心架构决策 (Architecture)**
|
||||
|
||||
1. **模块化单体**:继续沿用 /frontend-v2 单一代码库。通过**路由懒加载**区分不同端。
|
||||
2. **数据隔离**:逻辑隔离(tenant\_id)。
|
||||
3. **生产环境灰度**:支持管理员/调试者在生产环境使用 Draft 版 Prompt。
|
||||
4. **动态品牌渲染**:前端根据 URL 路径或租户 ID,动态加载 CSS 变量和图片资源,实现“千人千面”的 UI。
|
||||
|
||||
## **3\. 角色与权限体系 (RBAC v2)**
|
||||
|
||||
**设计原则**:基于租户类型(Tenant Type)动态衍生角色。
|
||||
|
||||
| 角色 Code | 归属 | 权限范围 | URL 前缀 | 核心职责 |
|
||||
| :---- | :---- | :---- | :---- | :---- |
|
||||
| **SUPER\_ADMIN** | 平台 | 全局数据 | /admin | 租户开通、品牌配置、Prompt 调优 |
|
||||
| **HOSPITAL\_ADMIN** | 医院租户 | 本院数据 | /org/hospital | 科室管理、配额分配 |
|
||||
| **PHARMA\_ADMIN** | 药企租户 | 本企项目 | /org/pharma | 项目监控、CRO 管理、审计 |
|
||||
| **USER** | 任意租户 | 个人/被授权数据 | /app | 科研业务操作 |
|
||||
|
||||
## **4\. 品牌定制与专属登录设计 (Tenant Branding) \[v2.1 新增\]**
|
||||
|
||||
### **4.1 URL 策略 (URL Strategy)**
|
||||
|
||||
为了低成本实现专属登录页,采用 **路径前缀** 方案,而非子域名方案。
|
||||
|
||||
* **通用登录**:https://app.yizhengxun.com/auth/login (显示壹证循默认 UI)
|
||||
* **专属登录**:https://app.yizhengxun.com/t/{tenant\_code}/login
|
||||
* 示例:北京积水潭医院 \-\> /t/jst-hospital/login
|
||||
* 示例:恒瑞医药 \-\> /t/hengrui/login
|
||||
|
||||
### **4.2 租户配置字段 (Tenant Config)**
|
||||
|
||||
在 platform\_schema.tenants 表的 config JSONB 字段中扩展以下属性:
|
||||
|
||||
{
|
||||
"branding": {
|
||||
"logoUrl": "https://oss.../jst\_logo.png", // 机构 Logo (透明背景)
|
||||
"loginBackgroundUrl": "https://oss.../jst\_bldg.jpg", // 登录页背景大图
|
||||
"primaryColor": "\#0056b3", // 品牌主色调 (积水潭蓝)
|
||||
"welcomeTitle": "北京积水潭医院 AI 临床科研平台", // 登录页大标题
|
||||
"welcomeSubTitle": "智能化 · 规范化 · 高效率" // 登录页副标题
|
||||
}
|
||||
}
|
||||
|
||||
### **4.3 交互流程 (User Flow)**
|
||||
|
||||
1. **访问**:用户点击医院内网链接 /t/jst-hospital/login。
|
||||
2. **加载配置**:前端解析 URL 中的 jst-hospital,调用公开 API /api/public/tenant-config?code=jst-hospital。
|
||||
3. **渲染**:
|
||||
* 替换默认背景图为 loginBackgroundUrl。
|
||||
* 替换 "壹证循 AI" 标题为 "北京积水潭医院..."。
|
||||
* 替换登录框上方的 Logo。
|
||||
4. **登录**:用户输入账号密码。
|
||||
5. **进入系统**:
|
||||
* 跳转至 /app/dashboard。
|
||||
* **关键点**:顶部导航栏 (Global Header) 左上角显示 **医院 Logo**,而非平台 Logo。
|
||||
* Ant Design 主题色自动切换为医院品牌色。
|
||||
|
||||
## **5\. 运营管理端功能详解 (Super Admin)**
|
||||
|
||||
**路由:** /admin/\*
|
||||
|
||||
### **5.1 租户与商业化配置 (Provisioning) \[更新\]**
|
||||
|
||||
* **租户开通**:
|
||||
* **基础信息**:名称、租户代码 (Code,用于 URL)。
|
||||
* **类型选择**:HOSPITAL | PHARMA | JOURNAL。
|
||||
* **品牌配置** (新增):上传 Logo、背景图,设置 Slogan。
|
||||
* **模块订阅**:勾选 ASL, DC, IIT 等。
|
||||
* **配置预览**:在后台可以预览该租户的登录页效果。
|
||||
|
||||
### **5.2 Prompt 工程化平台 (Prompt Ops)**
|
||||
|
||||
* **编辑器**:Markdown \+ 变量高亮。
|
||||
* **生产预览开关**:开启后,管理员在 /app 端操作时自动加载 Draft 版。
|
||||
|
||||
### **5.3 成本监控 (Cost)**
|
||||
|
||||
* **Token 水位**:今日消耗 vs 预算。
|
||||
|
||||
## **6\. 机构管理端:医院版 (Hospital Admin)**
|
||||
|
||||
**路由:** /org/hospital/\*
|
||||
|
||||
### **6.1 科室与成员管理**
|
||||
|
||||
* **科室树**:建立医院组织架构。
|
||||
* **成员管理**:批量导入医生,关联科室。
|
||||
|
||||
### **6.2 经费与配额**
|
||||
|
||||
* **配额下发**:将总 Token 额度分配给科室。
|
||||
|
||||
## **7\. 机构管理端:药企版 (Pharma Admin)**
|
||||
|
||||
**路由:** /org/pharma/\*
|
||||
|
||||
### **7.1 项目管理中心**
|
||||
|
||||
* **项目列表**:查看本药企发起的所有 IIT/IST 项目。
|
||||
* **进度监控**:接入 IIT Manager Agent 数据。
|
||||
|
||||
### **7.2 合规与审计**
|
||||
|
||||
* **操作审计**:查看数据修改痕迹。
|
||||
|
||||
## **8\. 统一登录与路由分发 (Unified Entry)**
|
||||
|
||||
### **8.1 智能路由策略**
|
||||
|
||||
用户登录成功后,前端根据 user.role 和 tenant.type 进行跳转:
|
||||
|
||||
function getRedirectPath(user, tenant) {
|
||||
if (user.role \=== 'SUPER\_ADMIN') return '/admin/dashboard';
|
||||
|
||||
if (user.role \=== 'TENANT\_ADMIN') {
|
||||
if (tenant.type \=== 'HOSPITAL') return '/org/hospital/dashboard';
|
||||
if (tenant.type \=== 'PHARMA') return '/org/pharma/dashboard';
|
||||
}
|
||||
|
||||
if (tenant.type \=== 'JOURNAL') return '/app/rvw/dashboard';
|
||||
|
||||
return '/app/dashboard';
|
||||
}
|
||||
|
||||
## **9\. 技术实现规格 (Technical Specs)**
|
||||
|
||||
### **9.1 数据库 Schema 变更**
|
||||
|
||||
\-- platform\_schema.tenants
|
||||
ALTER TABLE tenants
|
||||
ADD COLUMN code VARCHAR(50) UNIQUE, \-- 租户代码 (如 jst-hospital)
|
||||
ADD COLUMN type VARCHAR(20) NOT NULL DEFAULT 'HOSPITAL',
|
||||
ADD COLUMN config JSONB DEFAULT '{}';
|
||||
\-- config 包含 branding: { logoUrl, loginBackgroundUrl, ... }
|
||||
|
||||
\-- platform\_schema.users
|
||||
ALTER TABLE users
|
||||
ADD COLUMN department VARCHAR(100);
|
||||
|
||||
### **9.2 API 接口新增**
|
||||
|
||||
* GET /api/public/tenant-config?code={code}
|
||||
* **权限**:无需登录 (Public)。
|
||||
* **功能**:根据租户代码返回品牌配置信息(脱敏,只返回 UI 相关的)。
|
||||
|
||||
### **9.3 前端目录结构**
|
||||
|
||||
src/modules/
|
||||
├── auth/
|
||||
│ ├── LoginPage.tsx \# 通用登录页
|
||||
│ ├── TenantLoginPage.tsx \# 动态渲染的专属登录页 (路由 /t/:code/login)
|
||||
├── admin/ \# 运营管理端
|
||||
├── org/ \# 机构管理端
|
||||
└── ...
|
||||
|
||||
## **10\. 实施路线图 (Roadmap v2.1)**
|
||||
|
||||
* **P0 (Week 1\)**:
|
||||
* DB Schema 变更(增加 Tenant Code, Config)。
|
||||
* 实现 /api/public/tenant-config 接口。
|
||||
* 开发 TenantLoginPage 组件,实现动态换肤。
|
||||
* **P1 (Week 2\)**:
|
||||
* 运营端增加“品牌配置”表单(上传图片到 OSS)。
|
||||
* 实现全局 Header 根据当前用户 Tenant 自动切换 Logo。
|
||||
* **P2 (Week 3\)**:
|
||||
* 实现 /org/hospital 基础版。
|
||||
Reference in New Issue
Block a user