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,141 +1,158 @@
# **壹证循AI平台 \- 运营与机构管理端 PRD**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦嚗?v2.1
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E695BA><EFBFBD>?(Ready for Dev)
文档版本: v2.1
状态: 待开发 (Ready for Dev)
优先级: P0
<EFBFBD><EFBFBD><EFBFBD>嚗?璅<E79285><E288AA><EFBFBD>雿?(Modular Monolith)
<EFBFBD>湔鰵<EFBFBD><EFBFBD>嚗?<3F><EFBFBD><E595A3>𨅯<EFBFBD><F0A885AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E79899>摰帋<E691B0>銝枏<E98A9D><E69E8F><EFBFBD>憿?URL 閫<><E996AB>嚗𤤿<E59A97><F0A4A4BF>𣇉<EFBFBD><F0A38789><EFBFBD>蝵桀<E89DB5>畾萸<E795BE>?
## **1\. 銝𡁜𦛚<F0A1819C>峕艶銝𡡞<E98A9D><EFBFBD><E79899><EFBFBD>?(Context & Requirements)**
架构模式: 模块化单体 (Modular Monolith)
更新摘要: 新增“品牌定制”需求;定义专属登录页 URL 规范;细化租户配置字段。
### **1.1 銝箔<E98A9D><EFBFBD><E98A8B><EFBFBD>𡁶恣<F0A181B6><E681A3>垢嚗?Why)**
## **1\. 业务背景与需求分析 (Context & Requirements)**
### **1.1 为什么要做管理端?(Why)**
目前的系统User App是一个强大的单兵作战工具但要转化为可规模化销售的 **SaaS 商业产品**,我们面临“管理真空”:
1. **<EFBFBD><EFBFBD>鈭支<EFBFBD> B 蝡?*嚗𡁜龫<F0A1819C>僭鈭<E583AD>頂蝏<E9A082><E89D8F>蝘睲蜓隞餅<E99A9E>瘜閙<E7989C>韐血噡<E8A180><E599A1><EFBFBD><EFBFBD><EFBFBD>嚗諹晓隡<E69993>僭鈭<E583AD>頂蝏<E9A082><E89D8F><EFBFBD><EFBFBD><E4ADBE>烐綉憿寧𤌍餈𥕦漲<F0A595A6>?
2. **AI <EFBFBD>鞉𧋦暺烐<EFBFBD>**嚗𡁶撩銋誩<E98A8B><EFBFBD><EFBFBD><E996AB><EFBFBD>?Token 瘨<><E798A8><EFBFBD><E39B96><EFBFBD><E694B9>閙活憭扯<E686AD>璅∩遙<E288A9><E288AA>賢紡<E8B3A2><EFBFBD><E6B8AF><EFBFBD>?
3. **<EFBFBD>𥪜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**嚗𡁏<E59A97>甈∟<E79488><E2889F>?Prompt嚗<74><E59A97>蝷箄<E89DB7>嚗厰<E59A97><E58EB0><EFBFBD><EFBFBD>㺿隞<E3BABF><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>敹恍<E695B9><EFBFBD>摨𥪯葩摨𠹺<E691A8>摰嗅笆 AI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E69390>?
### **1.2 撌桀<E6928C><E6A180><EFBFBD><EFBFBD>𤫇<EFBFBD>?(Who needs what)**
1. **无法交付 B 端**:医院买了系统,科主任无法把账号分给医生,药企买了系统,无法监控项目进度。
2. **AI 成本黑洞**:缺乏全局视角的 Token 消耗监控,单次大规模任务可能导致亏损。
3. **研发效能瓶颈**:每次调整 Prompt提示词都需要改代码、发版无法快速响应临床专家对 AI 效果的反馈。
#### **A. 餈鞱𨯫蝞∠<E89D9E>蝡?(Ops) \- "銝𠰴<E98A9D><EFBFBD><E996AB>"**
### **1.2 差异化需求画像 (Who needs what)**
* **<2A>𤤿<EFBFBD>**嚗帋<E59A97><E5B88B>仿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滨䰻<E6BBA8><EFBFBD><EFBFBD><E988AD>撠煾兝嚗䔶<E59A97><E494B6><EFBFBD>靘踹<E99D98><E8B8B9><EFBFBD><E59581>?
* **<2A><EFBFBD>霂㗇<E99C82>**嚗?
* **撘<><E69298>?*嚗𡁶<E59A97><F0A181B6>駁堺/<2F><EFBFBD><EFBFBD><E69298>𡁶<EFBFBD><F0A181B6><EFBFBD><E79880>滨蔭璅<E79285><EFBFBD><E59A97><EFBFBD><EFBFBD><E98A8B><EFBFBD><E99D9A><EFBFBD>?
* **靚<><E99D9A>**嚗𡁜銁銝齿<E98A9D><E9BDBF>啁鍂<E59581><EFBFBD><E7919E><EFBFBD><EFBFBD>銝页<E98A9D><EFBFBD><E99D9A> AI Prompt<70>?
* **憌擧綉**嚗𡁶<E59A97><F0A181B6>?Token 瘨<><E798A8><EFBFBD><EFBFBD><EFBFBD>娍鱏<E5A88D>?
#### **B. <20>駁堺<E9A781><EFBFBD>蝡?(Hospital Admin) \- "蝞∩犖銝𡒊恣<F0A1928A>?**
#### **A. 运营管理端 (Ops) \- "上帝视角"**
* **<EFBFBD>𤤿<EFBFBD>**嚗𡁜龫<F0A1819C><E9BEAB><EFBFBD><EFBFBD><EFBFBD>批之嚗𣬚<E59A97><F0A3AC9A>𠉛<EFBFBD>韐孵<E99F90><E5ADB5>漤𠗕<E6BCA4>?
* **<EFBFBD><EFBFBD>霂㗇<EFBFBD>**嚗?
* **<EFBFBD><EFBFBD><EFBFBD>敶鍦<EFBFBD><EFBFBD>?*嚗𡁶蒈敶閖△敹<E296B3><EFBFBD>臬龫<E887AC>䌊撌梁<E6928C>憭扳未<E689B3><EFBFBD><E68A92>?Logo嚗䔶<E59A97><E494B6><EFBFBD>𨀣𧋦<F0A880A3><EFBFBD><EFBCB9>𥪜像<F0A5AA9C><EFBFBD><EFBFBD>銝枏<E98A9D><E69E8F><EFBFBD>?
* **<EFBFBD>漣蝞∠<EFBFBD>**嚗𡁏<E59A97><F0A1818F>𦦵<EFBFBD>摰手<E691B0>萘恣<E89098><E681A3><EFBFBD><E9BEAB><EFBFBD><EFBFBD><E68692><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗剹<E59A97>?
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**嚗𡁜<E59A97>韐凋僭<E5878B><E583AD><EFBFBD>?Token 憸嘥漲<E598A5><E6BCB2><EFBFBD>蝏嗘<E89D8F><E59798>𣬚<EFBFBD>摰斗<E691B0>銝芯犖<E88AAF>?
#### **C. <20><EFBFBD><E887AD><EFBFBD>蝡?(Pharma Admin) \- "蝞⊿★<E28ABF><EFBFBD><E6A190><EFBFBD><EFBFBD>"**
* **痛点**:不知道谁在用,不知道花了多少钱,不敢随便发新版。
* **核心诉求**
* **开户**:给医院/药企开通租户,配置模块(卖什么给谁)。
* **调优**:在不打扰用户的情况下,调试 AI Prompt。
* **风控**:监控 Token 消耗,异常熔断。
#### **B. 医院机构端 (Hospital Admin) \- "管人与管钱"**
* **痛点**:医生流动性大,科研经费分配难。
* **核心诉求**
* **品牌归属感**:登录页必须是医院自己的大楼照片和 Logo体现“本院科研平台”的专属感。
* **层级管理**:按“科室”管理医生(如心内科、肿瘤科)。
* **配额分配**:将购买的总 Token 额度分配给不同科室或个人。
#### **C. 药企机构端 (Pharma Admin) \- "管项目与合规"**
* **痛点**IIT 项目分散在多家医院,数据进度不透明,合规风险大。
* **核心诉求**
* **品牌定制**:药企 Logo 必须时刻可见,符合企业 VI 规范。
* **项目视图**:不是管人,而是管“项目”(如某抗癌药临床研究)。
* **审计合规**所有操作必须有痕迹Audit Log
* **<2A>𤤿<EFBFBD>**嚗䥑IT 憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD><EFBFBD>摰嗅龫<E59785><EFBFBD><EFBD87>唳旿餈𥕦漲銝漤<E98A9D>𤩺<EFBFBD><EFBFBD><E59A97><EFBFBD><E996AB><EFBFBD>拙之<E68B99>?
* **<2A><EFBFBD>霂㗇<E99C82>**嚗?
* **<2A><><EFBFBD>摰𡁜<E691B0>**嚗朞晓隡?Logo 敹<><EFBFBD><EFBFBD><E59785><EFBFBD>嚗𣬚泵<F0A3AC9A><E6B3B5><EFBFBD>銝?VI 閫<><E996AB><EFBFBD>?
* **憿寧𤌍閫<F0A48C8D>㦛**嚗帋<E59A97><E5B88B>舐恣鈭綽<E988AD><E7B6BD>峕糓蝞﹦<E89D9E>𣈯★<F0A388AF><EFBFBD><EFBFBD><EFBFBD><E68692><EFBFBD><EFBFBD><E39B96>臭葩摨羓<E691A8>蝛塚<E89D9B><E5A19A>?
* **摰∟恣<E2889F><E681A3><EFBFBD>**嚗𡁏<E59A97><F0A1818F><EFBFBD>雿𨅯<E99BBF>憿餅<E686BF><E9A485>閗蕨嚗㇁udit Log嚗剹<E59A97>?
## **2\. 核心架构决策 (Architecture)**
1. **<EFBFBD><EFBFBD><EFBFBD>雿?*嚗𡁶誧蝏剜窒<E5899C>?/frontend-v2 <20><EFBFBD><EFBFBD><E99A9E>摨瓐<E691A8><E79390><EFBFBD><EFBFBD>**頝舐眏<E88890><EFBFBD>頧?*<2A><EFBFBD>銝滚<E98A9D>蝡胯<E89DA1>?
2. **<EFBFBD>唳旿<EFBFBD>𠉛氖**嚗𡁻<E59A97><EFBFBD><E9A489>𠉛氖嚗ōenant\_id嚗剹<EFBFBD>?
3. **<EFBFBD>煺漣<EFBFBD><EFBFBD><EFBFBD>啣漲**嚗𡁏𣈲<F0A1818F><F0A388B2><EFBFBD><E681A3><EFBFBD>/靚<><E99D9A><EFBFBD><EFBFBD><EFBFBD>煺漣<E785BA><EFBFBD>雿輻鍂 Draft <EFBFBD>?Prompt<EFBFBD>?
4. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>峕葡<EFBFBD>?*嚗𡁜<E59A97>蝡舀覔<E88880>?URL 頝臬<E9A09D><E887AC>𣇉<EFBFBD><F0A38789>?ID嚗<44>𢆡<EFBFBD><F0A286A1><EFBFBD>頧?CSS <20><EFBFBD><E3979B><EFBFBD><EFBFBD><E3A69B><EFBFBD>皞琜<E79A9E>摰䂿緵<E482BF>𨅯<EFBFBD>鈭箏<E988AD><E7AE8F><EFBFBD><EFBFBD> UI<EFBFBD>?
## **3\. 閫坿𠧧銝擧<E98A9D><E693A7>𣂷<EFBFBD>蝟?(RBAC v2)**
1. **模块化单体**:继续沿用 /frontend-v2 单一代码库。通过**路由懒加载**区分不同端。
2. **数据隔离**逻辑隔离tenant\_id)。
3. **生产环境灰度**:支持管理员/调试者在生产环境使用 Draft Prompt
4. **动态品牌渲染**:前端根据 URL 路径或租户 ID动态加载 CSS 变量和图片资源,实现“千人千面”的 UI
## **3\. 角色与权限体系 (RBAC v2)**
**设计原则**基于租户类型Tenant Type动态衍生角色。
**霈曇恣<E69B87><EFBFBD>**嚗𡁜抅鈭𡒊<E988AD><F0A1928A>瑞掩<E7919E><EFBFBD>Tenant Type嚗匧𢆡<E58CA7><F0A286A1><EFBFBD><EFBFBD><EFBFBD><E8A098><EFBFBD>?
| 角色 Code | 归属 | 权限范围 | URL 前缀 | 核心职责 |
| :---- | :---- | :---- | :---- | :---- |
| **SUPER\_ADMIN** | 平台 | 全局数据 | /admin | 租户开通、品牌配置、Prompt 调优 |
| **HOSPITAL\_ADMIN** | <EFBFBD>駁堺蝘<EFBFBD><EFBFBD> | <20>祇堺<E7A587>唳旿 | /org/hospital | 蝘穃恕蝞∠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憸嘥<EFBFBD><EFBFBD>?|
| **PHARMA\_ADMIN** | <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <20><EFBFBD>憿寧𤌍 | /org/pharma | 憿寧𤌍<EFBFBD>烐綉<EFBFBD><EFBFBD>RO 蝞∠<E89D9E><E288A0><EFBFBD>恣霈?|
| **USER** | 隞餅<EFBFBD><EFBFBD><EFBFBD> | 銝芯犖/鋡急<E98BA1><E680A5><EFBFBD><EFBFBD>?| /app | 蝘𤑳<E89D98>銝𡁜𦛚<F0A1819C><EFBFBD> |
| **HOSPITAL\_ADMIN** | 医院租户 | 本院数据 | /org/hospital | 科室管理、配额分配 |
| **PHARMA\_ADMIN** | 药企租户 | 本企项目 | /org/pharma | 项目监控、CRO 管理、审计 |
| **USER** | 任意租户 | 个人/被授权数据 | /app | 科研业务操作 |
## **4\. <EFBFBD><EFBFBD><EFBFBD>摰𡁜<EFBFBD>銝𦒘<EFBFBD>撅䂿蒈敶閗挽霈?(Tenant Branding) \[v2.1 <EFBFBD><EFBFBD>\]**
## **4\. 品牌定制与专属登录设计 (Tenant Branding) \[v2.1 新增\]**
### **4.1 URL 策略 (URL Strategy)**
銝箔<EFBFBD>雿擧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撅䂿蒈敶閖△嚗屸<EFBFBD><EFBFBD>?**頝臬<E9A09D><E887AC><EFBFBD>** <20><EFBFBD>嚗諹<E59A97><EFBFBD>摮𣂼<E691AE><F0A382BC>齿䲮獢<E4B2AE><E78DA2>?
* **<2A>𡁶鍂<F0A181B6><EFBFBD>**嚗冴ttps://app.yizhengxun.com/auth/login (<28>曄內憯寡<E686AF>敺芷<E695BA>霈?UI)
为了低成本实现专属登录页,采用 **路径前缀** 方案,而非子域名方案。
* **通用登录**https://app.yizhengxun.com/auth/login (显示壹证循默认 UI)
* **专属登录**https://app.yizhengxun.com/t/{tenant\_code}/login
* 示例:北京积水潭医院 \-\> /t/jst-hospital/login
* 蝷箔<EFBFBD>嚗𡁏<EFBFBD><EFBFBD>𧼮龫<EFBFBD>?\-\> /t/hengrui/login
* 示例:恒瑞医药 \-\> /t/hengrui/login
### **4.2 租户配置字段 (Tenant Config)**
<EFBFBD>?platform\_schema.tenants 銵函<EFBFBD> config JSONB 摮埈挾銝剜<EFBFBD>撅蓥誑銝见<EFBFBD><EFBFBD><EFBFBD>
platform\_schema.tenants 表的 config JSONB 字段中扩展以下属性:
{
"branding": {
"logoUrl": "https://oss.../jst\_logo.png", // 机构 Logo (透明背景)
"loginBackgroundUrl": "https://oss.../jst\_bldg.jpg", // <EFBFBD><EFBFBD>憿菔<EFBFBD><EFBFBD>臬之<EFBFBD>?
"primaryColor": "\#0056b3", // <EFBFBD><EFBFBD><EFBFBD>銝餉𠧧靚?(蝘舀偌瞏剛<E79E8F>)
"welcomeTitle": "<EFBFBD>𦯀漪蝘舀偌瞏剖龫<EFBFBD>?AI 銝游<E98A9D>蝘𤑳<E89D98>撟喳蝱", // <EFBFBD><EFBFBD>憿萄之<EFBFBD><EFBFBD><EFBFBD>
"welcomeSubTitle": "<EFBFBD><EFBFBD><EFBFBD>?繚 閫<><E996AB><EFBFBD>?繚 擃䀹<E69383><E480B9>? // <EFBFBD><EFBFBD>憿萄<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
"loginBackgroundUrl": "https://oss.../jst\_bldg.jpg", // 登录页背景大图
"primaryColor": "\#0056b3", // 品牌主色调 (积水潭蓝)
"welcomeTitle": "北京积水潭医院 AI 临床科研平台", // 登录页大标题
"welcomeSubTitle": "智能化 · 规范化 · 高效率" // 登录页副标题
}
}
### **4.3 交互流程 (User Flow)**
1. **霈輸䔮**嚗𡁶鍂<F0A181B6><EFBFBD><E7919E>餃龫<E9A483><EFBFBD>蝵煾曎<E785BE>?/t/jst-hospital/login<EFBFBD>?
2. **<EFBFBD>㰘蝸<EFBFBD>滨蔭**嚗𡁜<E59A97>蝡航圾<E888AA>?URL 銝剔<EFBFBD> jst-hospital嚗諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD> API /api/public/tenant-config?code=jst-hospital<EFBFBD>?
3. **皜脫<EFBFBD>**嚗?
* <EFBFBD>踵揢暺䁅恕<EFBFBD>峕艶<EFBFBD>曆蛹 loginBackgroundUrl<EFBFBD>?
* <EFBFBD>踵揢 "憯寡<E686AF>敺?AI" <20><><EFBFBD>銝?"<22>𦯀漪蝘舀偌瞏剖龫<E58996>?.."<EFBFBD>?
* <EFBFBD>踵揢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Logo<EFBFBD>?
4. **<EFBFBD><EFBFBD>**嚗𡁶鍂<F0A181B6><EFBFBD><E79181>亥揭<E4BAA5><EFBFBD><E79195><EFBFBD><EFBFBD>?
5. **餈𥕦<EFBFBD>蝟餌<EFBFBD>**嚗?
* 頝唾蓮<EFBFBD>?/app/dashboard<EFBFBD>?
* **<EFBFBD>喲睸<EFBFBD>?*嚗𡁻▲<F0A181BB>典紡<E585B8><EFBFBD> (Global Header) 撌虫<EFBFBD>閫埝遬蝷?**<2A>駁堺 Logo**嚗諹<E59A97><EFBFBD>撟喳蝱 Logo<EFBFBD>?
* Ant Design 銝駁<EFBFBD><EFBFBD>脰䌊<EFBFBD><EFBFBD><EFBFBD><EFBFBD>駁堺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
## **5\. 餈鞱𨯫蝞∠<E89D9E>蝡臬<E89DA1><E887AC>質祕閫?(Super Admin)**
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 主题色自动切换为医院品牌色。
**頝舐眏嚗?* /admin/\*
## **5\. 运营管理端功能详解 (Super Admin)**
**路由:** /admin/\*
### **5.1 租户与商业化配置 (Provisioning) \[更新\]**
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*嚗?
* **<EFBFBD><EFBFBD>靽⊥<EFBFBD>**嚗𡁜<E59A97>蝘啜<E89D98><E5959C><EFBFBD><EFBFBD>瑚誨<E7919A>?(Code嚗𣬚鍂鈭?URL)<EFBFBD>?
* **蝐餃<EFBFBD><EFBFBD>㗇𥋘**嚗䥅OSPITAL | PHARMA | JOURNAL<EFBFBD>?
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>滨蔭** (<28><EFBFBD>)嚗帋<E59A97>隡?Logo<67><6F><EFBFBD><EFBFBD>臬㦛嚗諹挽蝵?Slogan<EFBFBD>?
* **<EFBFBD><EFBFBD>**嚗𡁜㗲<F0A1819C>?ASL, DC, IIT 蝑剹<EFBFBD>?
* **<EFBFBD>滨蔭憸<EFBFBD><EFBFBD>**嚗𡁜銁<F0A1819C>𤾸蝱<F0A4BEB8>臭誑憸<E8AA91><E686B8>霂亦<E99C82><E4BAA6><EFBFBD><E7919E><EFBFBD>憿菜<E686BF><E88F9C><EFBFBD>?
### **5.2 Prompt 撌亦<E6928C><E4BAA6>硋像<E7A18B>?(Prompt Ops)**
* **租户开通**
* **基础信息**:名称、租户代码 (Code用于 URL)
* **类型选择**HOSPITAL | PHARMA | JOURNAL
* **品牌配置** (新增):上传 Logo、背景图设置 Slogan
* **模块订阅**:勾选 ASL, DC, IIT 等。
* **配置预览**:在后台可以预览该租户的登录页效果。
### **5.2 Prompt 工程化平台 (Prompt Ops)**
* **编辑器**Markdown \+ 变量高亮。
* **生产预览开关**:开启后,管理员在 /app 端操作时自动加载 Draft 版。
* **蝻𤥁<E89DBB><F0A4A581>?*嚗鐝arkdown \+ <20><EFBFBD>擃䀝漁<E4809D>?
* **<2A>煺漣憸<E6BCA3><E686B8><EFBFBD><E69298>?*嚗𡁜<E59A97><F0A1819C><EFBFBD>嚗𣬚恣<F0A3AC9A><E681A3><EFBFBD><EFBFBD>?/app 蝡舀<E89DA1>雿𨀣𧒄<F0A880A3>芸𢆡<E88AB8>㰘蝸 Draft <20><><EFBFBD>?
### **5.3 成本监控 (Cost)**
* **Token 瘞港<EFBFBD>**嚗帋<E59A97><E5B88B><EFBFBD><E4BAA4>?vs 憸<><E686B8><EFBFBD>?
## **6\. <20><EFBFBD>蝞∠<E89D9E>蝡荔<E89DA1><E88D94>駁堺<E9A781>?(Hospital Admin)**
* **Token 水位**:今日消耗 vs 预算。
**頝舐眏嚗?* /org/hospital/\*
## **6\. 机构管理端:医院版 (Hospital Admin)**
### **6.1 蝘穃恕銝擧<E98A9D><E693A7>条恣<E69DA1>?*
**路由:** /org/hospital/\*
* **蝘穃恕<E7A983>?*嚗𡁜遣蝡见龫<E8A781><EFBFBD><EFBFBD><EFBFBD><E6B2B2><EFBFBD>?
* **<2A>𣂼<EFBFBD>蝞∠<E89D9E>**嚗𡁏鸌<F0A1818F>誩紡<E8AAA9>亙龫<E4BA99><E9BEAB><EFBFBD><EFBFBD><EFBFBD>蝘穃恕<E7A983>?
### **6.2 蝏讛晶銝𡡞<E98A9D>憸?*
### **6.1 科室与成员管理**
* **<EFBFBD><EFBFBD>銝见<EFBFBD>**嚗𡁜<E59A97><F0A1819C>?Token 憸嘥漲<E598A5><E6BCB2><EFBFBD>蝏嗵<E89D8F>摰扎<E691B0>?
## **7\. <20><EFBFBD>蝞∠<E89D9E>蝡荔<E89DA1><E88D94><EFBFBD><E887AD>?(Pharma Admin)**
* **科室树**:建立医院组织架构。
* **成员管理**:批量导入医生,关联科室。
**頝舐眏嚗?* /org/pharma/\*
### **6.2 经费与配额**
* **配额下发**:将总 Token 额度分配给科室。
## **7\. 机构管理端:药企版 (Pharma Admin)**
**路由:** /org/pharma/\*
### **7.1 项目管理中心**
* **憿寧𤌍<EFBFBD>𡑒”**嚗𡁏䰻<F0A1818F>𧢲𧋦<F0A7A2B2><EFBFBD><E887AD>𤏸絲<F0A48FB8><E7B5B2><EFBFBD><EFBFBD>?IIT/IST 憿寧𤌍<EFBFBD>?
* **餈𥕦漲<EFBFBD>烐綉**嚗𡁏𦻖<F0A1818F>?IIT Manager Agent <EFBFBD>唳旿<EFBFBD>?
### **7.2 <20><><EFBFBD>銝𤾸恣霈?*
* **项目列表**:查看本药企发起的所有 IIT/IST 项目。
* **进度监控**:接入 IIT Manager Agent 数据。
* **<2A><EFBFBD>摰∟恣**嚗𡁏䰻<F0A1818F>𧢲㺭<F0A7A2B2>桐耨<E6A190><EFBFBD>餈嫘<E9A488>?
## **8\. 蝏煺<E89D8F><E785BA><EFBFBD>銝舘楝<E88898><EFBFBD><E58B97>?(Unified Entry)**
### **7.2 合规与审计**
* **操作审计**:查看数据修改痕迹。
## **8\. 统一登录与路由分发 (Unified Entry)**
### **8.1 智能路由策略**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>𠬍<EFBFBD><EFBFBD>滨垢<EFBFBD>寞旿 user.role <EFBFBD>?tenant.type 餈𥡝<EFBFBD>頝唾蓮嚗?
用户登录成功后,前端根据 user.role tenant.type 进行跳转:
function getRedirectPath(user, tenant) {
if (user.role \=== 'SUPER\_ADMIN') return '/admin/dashboard';
@@ -149,13 +166,13 @@ function getRedirectPath(user, tenant) {
return '/app/dashboard';
}
## **9\. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?(Technical Specs)**
## **9\. 技术实现规格 (Technical Specs)**
### **9.1 <EFBFBD>唳旿摨?Schema <EFBFBD>䀹凒**
### **9.1 数据库 Schema 变更**
\-- platform\_schema.tenants
ALTER TABLE tenants
ADD COLUMN code VARCHAR(50) UNIQUE, \-- <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (憒?jst-hospital)
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, ... }
@@ -167,26 +184,27 @@ ADD COLUMN department VARCHAR(100);
### **9.2 API 接口新增**
* GET /api/public/tenant-config?code={code}
* **<EFBFBD><EFBFBD><EFBFBD>**嚗𡁏<E59A97><F0A1818F><EFBFBD><EFBFBD><EFBFBD> (Public)<EFBFBD>?
* **<EFBFBD><EFBFBD>**嚗𡁏覔<F0A1818F><EFBFBD><E6A183>瑚誨<E7919A><E8AAA8><EFBFBD><EFBFBD>𧼮<EFBFBD><F0A7BCAE><EFBFBD>蝵桐縑<E6A190><EFBFBD><E88D94><EFBFBD><EFBFBD>蘨餈𥪜<E9A488> UI <20><EFBFBD><E8A9A8><EFBFBD><EFBFBD><EFBFBD>?
* **权限**:无需登录 (Public)
* **功能**:根据租户代码返回品牌配置信息(脱敏,只返回 UI 相关的)。
### **9.3 前端目录结构**
src/modules/
├── auth/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> LoginPage.tsx \# <EFBFBD>𡁶鍂<EFBFBD><EFBFBD>憿?
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> TenantLoginPage.tsx \# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝枏<EFBFBD><EFBFBD><EFBFBD>憿?(頝舐眏 /t/:code/login)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> admin/ \# 餈鞱𨯫蝞∠<EFBFBD>蝡?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> org/ \# <EFBFBD><EFBFBD>蝞∠<EFBFBD>蝡?
│ ├── LoginPage.tsx \# 通用登录页
│ ├── TenantLoginPage.tsx \# 动态渲染的专属登录页 (路由 /t/:code/login)
├── admin/ \# 运营管理端
├── org/ \# 机构管理端
└── ...
## **10\. 摰墧鴌頝舐瑪<EFBFBD>?(Roadmap v2.1)**
## **10\. 实施路线图 (Roadmap v2.1)**
* **P0 (Week 1\)**:
* DB Schema <EFBFBD>䀹凒嚗<EFBFBD><EFBFBD><EFBFBD>?Tenant Code, Config嚗剹<EFBFBD>?
* 摰䂿緵 /api/public/tenant-config <EFBFBD>亙藁<EFBFBD>?
* <EFBFBD><EFBFBD>?TenantLoginPage <EFBFBD>辣嚗<EFBFBD><EFBFBD><EFBFBD>啣𢆡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
* DB Schema 变更(增加 Tenant Code, Config)。
* 实现 /api/public/tenant-config 接口。
* 开发 TenantLoginPage 组件,实现动态换肤。
* **P1 (Week 2\)**:
* 餈鞱𨯫蝡臬<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>蝵栽<EFBFBD>肽”<EFBFBD>𤏪<EFBFBD>銝𠹺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?OSS嚗剹<E59A97>?
* 摰䂿緵<EFBFBD><EFBFBD> Header <EFBFBD>寞旿敶枏<EFBFBD><EFBFBD><EFBFBD> Tenant <EFBFBD>芸𢆡<EFBFBD><EFBFBD> Logo<EFBFBD>?
* 运营端增加“品牌配置”表单(上传图片到 OSS
* 实现全局 Header 根据当前用户 Tenant 自动切换 Logo
* **P2 (Week 3\)**:
* 摰䂿緵 /org/hospital <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 实现 /org/hospital 基础版。