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
164 lines
7.9 KiB
Markdown
164 lines
7.9 KiB
Markdown
# **AI 临床医生与医院知识库 \- MVP 阶段产品需求文档 (PRD) V5.0**
|
||
|
||
|
|
||
|
||
| 版本号 | 日期 | 修改人 | 修改内容 |
|
||
| V4.0 | 2024-06-XX | Product Lead | 降维策略 MVP |
|
||
| V5.0 | 2024-06-XX | Product Lead | 完整落地版:基于“全量阅读”策略,补全 UI/UX 规范与详细功能定义 |
|
||
|
||
## **1\. 核心战略与范围 (Strategy & Scope)**
|
||
|
||
### **1.1 核心价值主张**
|
||
|
||
放弃传统的“切片式 RAG”,利用 DeepSeek-V3 / Qwen-Max 的长窗口能力,通过 **Document-Level RAG (文档级阅读)** 技术,为医生提供**逻辑完整、引用精准**的知识库问答体验。
|
||
|
||
### **1.2 MVP 阶段边界 (Scope Freeze)**
|
||
|
||
* **适用终端:** Web 端 (PC/Mac 浏览器),兼容 iPad。
|
||
* **支持格式:** PDF, Word (.docx), PPT (.pptx)。
|
||
* **硬性限制:** 单库文件数 ≤ 30 个;单文件大小 ≤ 20MB。
|
||
* **核心场景:** 循证检索 (指南)、深度研读 (文献)、用药助手 (药品)、考典刷题 (考试)。
|
||
|
||
## **2\. 功能模块详情 (Detailed Requirements)**
|
||
|
||
### **2.1 模块一:仪表盘 (Dashboard)**
|
||
|
||
**用户故事:** 作为医生,我希望一眼看到我有多少个知识库,并能快速创建一个新的专科知识库。
|
||
|
||
#### **2.1.1 页面布局与 UI 规范**
|
||
|
||
* **布局结构:**
|
||
* **顶部:** 全局导航栏 (Logo \+$$智能统计$$$$智能清洗$$$$\*\*AI 知识库\*\*$$$$AI 问答$$
|
||
\+ 头像)。
|
||
* **主体:** "1+3" 卡片阵列布局 (Grid System)。
|
||
* **卡片设计:**
|
||
* **Slot 1 (新建入口):**
|
||
* **样式:** 浅蓝色渐变背景 (bg-blue-50),深蓝色虚线边框。
|
||
* **内容:** 大号 "+" 图标,文案 "创建知识库",下方并列展示 5 个场景图标 (指南/文献/病例/药品/考试) 以提示能力。
|
||
* **Slot 2-N (现有知识库):**
|
||
* **样式:** 白色卡片,微阴影 (shadow-sm \-\> hover shadow-md)。
|
||
* **内容:** 图标(左上) \+ 标题(加粗) \+ 类型标签(胶囊样式) \+ "进入工作台"按钮(底部通栏)。
|
||
|
||
#### **2.1.2 交互流程:创建知识库**
|
||
|
||
* **触发:** 点击“创建知识库”卡片 \-\> 弹出模态框 (Modal)。
|
||
* **Step 1: 类型选择 (Type Selection)**
|
||
* **UI:** 5 个大卡片网格。
|
||
* **选项:**
|
||
1. **循证检索 (指南):** 图标 BookOpen (Blue)。文案:"查诊疗标准、用药剂量"。
|
||
2. **深度研读 (文献):** 图标 Microscope (Purple)。文案:"文献综述、横向对比"。
|
||
3. **临床决策 (病例):** 图标 Stethoscope (Green)。文案:"疑难病例参考"。
|
||
4. **用药助手 (药品):** 图标 Pill (Rose)。文案:"查配伍禁忌"。
|
||
5. **考典刷题 (考试):** 图标 GraduationCap (Orange)。文案:"主治/副高备考"。
|
||
* **Step 2: 基础信息 & 角色注入**
|
||
* **字段:** 知识库名称 (必填)、所属科室 (下拉选:心内/呼吸/消化...)。
|
||
* **逻辑:** 选中“心内科”后,后端自动在 System Prompt 中注入 *"你是一名心内科专家..."*。
|
||
* **Step 3: 文件上传 (Upload)**
|
||
* **UI:** 大面积拖拽上传区 (Dropzone)。
|
||
* **逻辑:**
|
||
* 前端校验大小 (\>20MB 飘红报错)。
|
||
* 前端校验数量 (\>30 个 飘红报错)。
|
||
* 上传成功后显示列表,状态流转:上传中... \-\> 就绪。
|
||
|
||
### **2.2 模块二:沉浸式工作台 (Workspace)**
|
||
|
||
**用户故事:** 作为医生,我希望在一个无干扰的环境中与我的资料对话,并能随时核对原文。
|
||
|
||
#### **2.2.1 全局框架 (Immersive Layout)**
|
||
|
||
* **顶部导航 (Header):**
|
||
* **样式:** 深色背景 (bg-slate-900),高度 56px。
|
||
* **左侧:** \< 返回 (白色文字按钮,点击返回 Dashboard)。
|
||
* **中间:** 知识库名称 \+ 图标。
|
||
* **右侧:** 简单的设置齿轮。
|
||
* **模式切换 (Tabs):**
|
||
* 位于 Header 下方,白色背景,高度 48px。
|
||
* **Tab A:** \[💬 智能问答\] (默认选中,底部蓝条)。
|
||
* **Tab B:** \[📂 知识资产\] (显示文件计数 Badge)。
|
||
|
||
#### **2.2.2 视图 A:智能问答 (Smart Chat)**
|
||
|
||
* **布局:**
|
||
* **默认:** 单栏宽屏聊天窗口 (最大宽度 900px,居中)。
|
||
* **扩展:** 当点击引用或手动展开时,右侧滑出 PDF 阅读器 (占比 45%),聊天窗自动收缩至左侧。
|
||
* **对话交互 (Chat Interaction):**
|
||
* **输入框:** 底部固定。支持 Shift+Enter 换行。
|
||
* **AI 回答:** 流式输出 (Typewriter Effect)。
|
||
* **引用标注:** 必须以 \[文档名\] 或 \[1\] 形式高亮显示,颜色为品牌蓝。
|
||
* **后端策略路由 (核心逻辑):**
|
||
* **场景一 (小库直读):** 知识库总 Token \< 32k。
|
||
* *UI:* 顶部 Toast 提示 "已加载全量上下文,AI 具备全知视角"。
|
||
* **场景二 (大库路由):** 知识库总 Token \> 32k。
|
||
* *UI:* 用户提问后,输入框上方出现微型 Loading 状态 —— "正在分析摘要..." \-\> "已定位至《2024指南》等 3 篇文档" \-\> 开始回答。
|
||
|
||
#### **2.2.3 视图 B:知识资产 (Assets Management)**
|
||
|
||
* **UI 形式:** 全屏数据表格 (Table)。
|
||
* **列定义:**
|
||
1. **文件名:** 图标 (PDF/Word) \+ 名称。
|
||
2. **AI 摘要:** 展示 2-3 行核心摘要文本 (由 DeepSeek 生成),支持 hover 查看全部。
|
||
3. **状态:** 准备中 (灰色) / 就绪 (绿色) / 失败 (红色)。
|
||
4. **操作:** 预览、删除。
|
||
* **筛选器:** 右上角“筛选”按钮,点击弹出下拉面板 (按时间/状态/类型)。
|
||
|
||
## **3\. 详细 UI/UX 设计规范 (Design Specs)**
|
||
|
||
为确保还原度,请 UI 设计师和前端开发遵循以下规范:
|
||
|
||
### **3.1 色彩体系 (Color Palette)**
|
||
|
||
使用 Tailwind CSS 默认色板:
|
||
|
||
* **主色 (Primary):** Blue-600 (\#2563EB) \- 用于按钮、链接、高亮。
|
||
* **场景色 (Category Colors):**
|
||
* 指南: Blue-500
|
||
* 文献: Purple-600
|
||
* 病例: Emerald-600
|
||
* 药品: Rose-600
|
||
* 考试: Orange-500
|
||
* **中性色:** Slate-50 (背景), Slate-900 (Header), Slate-500 (次要文字)。
|
||
|
||
### **3.2 图标系统 (Iconography)**
|
||
|
||
* **风格:** 线性图标 (Stroke 2px)。
|
||
* **技术:** 使用 **Inline SVG** (参考 TDD V3.0 的 Icons 常量),严禁引入外部 Icon Font。
|
||
|
||
### **3.3 字体与排版**
|
||
|
||
* **字体:** 系统默认无衬线字体 (Inter, Roboto, PingFang SC)。
|
||
* **字号:**
|
||
* H1 (页面标题): 20px Bold
|
||
* H2 (模块标题): 16px Bold
|
||
* Body (正文): 14px Regular (行高 1.6)
|
||
* Caption (说明): 12px Text-Slate-400
|
||
|
||
## **4\. 异常流程与边界处理 (Exception Handling)**
|
||
|
||
### **4.1 上传失败**
|
||
|
||
* **场景:** 用户上传了加密 PDF 或损坏文件。
|
||
* **后端:** 解析器捕获异常,返回 status: FAILED,error\_msg: "File encrypted"。
|
||
* **前端:** 资产列表中该行变红,显示“解析失败:文件已加密”,并提供“删除”按钮。
|
||
|
||
### **4.2 AI 回答超时/失败**
|
||
|
||
* **场景:** DeepSeek API 响应超时 (\>60s)。
|
||
* **UI:**
|
||
* 消息气泡显示红色感叹号。
|
||
* 提示文案: "AI 思考超时,请尝试精简问题或重试。"
|
||
* 提供$$重试$$
|
||
按钮。
|
||
|
||
### **4.3 引用源定位失败**
|
||
|
||
* **场景:** 用户点击 \[1\],但该文件已被删除。
|
||
* **UI:** 弹出 Toast 提示 "源文件已被删除,无法查看原文"。
|
||
|
||
## **5\. 验收测试标准 (QA Acceptance)**
|
||
|
||
| ID | 测试点 | 预期结果 | 优先级 |
|
||
| TC01 | 格式兼容性 | 上传 .pdf, .docx, .pptx 文件,均能在资产列表显示“就绪”,且能被检索到。 | P0 |
|
||
| TC02 | 边界限制 | 尝试上传第 31 个文件,前端应阻止上传并弹窗提示限制。 | P0 |
|
||
| TC03 | 引用跳转 | 提问后,点击回答中的 \[文档名\],右侧面板应滑出并正确加载该文档。 | P0 |
|
||
| TC04 | Word表格解析 | 上传包含表格的 Word 指南,询问表格内数据,AI 应能准确回答数值。 | P1 |
|
||
| TC05 | 路由逻辑 | 在 \>32k Token 的库中提问,观察 Network 请求,应看到系统先请求了摘要接口,再请求了全文接口。 | P1 | |