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
7.9 KiB
7.9 KiB
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)。
- 顶部: 全局导航栏 (Logo +
- 卡片设计:
- Slot 1 (新建入口):
- 样式: 浅蓝色渐变背景 (bg-blue-50),深蓝色虚线边框。
- 内容: 大号 "+" 图标,文案 "创建知识库",下方并列展示 5 个场景图标 (指南/文献/病例/药品/考试) 以提示能力。
- Slot 2-N (现有知识库):
- 样式: 白色卡片,微阴影 (shadow-sm -> hover shadow-md)。
- 内容: 图标(左上) + 标题(加粗) + 类型标签(胶囊样式) + "进入工作台"按钮(底部通栏)。
- Slot 1 (新建入口):
2.1.2 交互流程:创建知识库
- 触发: 点击“创建知识库”卡片 -> 弹出模态框 (Modal)。
- Step 1: 类型选择 (Type Selection)
- UI: 5 个大卡片网格。
- 选项:
- 循证检索 (指南): 图标 BookOpen (Blue)。文案:"查诊疗标准、用药剂量"。
- 深度研读 (文献): 图标 Microscope (Purple)。文案:"文献综述、横向对比"。
- 临床决策 (病例): 图标 Stethoscope (Green)。文案:"疑难病例参考"。
- 用药助手 (药品): 图标 Pill (Rose)。文案:"查配伍禁忌"。
- 考典刷题 (考试): 图标 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 篇文档" -> 开始回答。
- 场景一 (小库直读): 知识库总 Token < 32k。
2.2.3 视图 B:知识资产 (Assets Management)
- UI 形式: 全屏数据表格 (Table)。
- 列定义:
- 文件名: 图标 (PDF/Word) + 名称。
- AI 摘要: 展示 2-3 行核心摘要文本 (由 DeepSeek 生成),支持 hover 查看全部。
- 状态: 准备中 (灰色) / 就绪 (绿色) / 失败 (红色)。
- 操作: 预览、删除。
- 筛选器: 右上角“筛选”按钮,点击弹出下拉面板 (按时间/状态/类型)。
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 |