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
5.3 KiB
5.3 KiB
PRD:Tool C - 科研数据编辑器 (The Research Editor)
| 文档版本 | V2.1 (扁平化 + 长宽转换版) |
|---|---|
| 产品形态 | Web 端在线编辑器(Local-First 架构,类 Excel 体验) |
| 核心价值 | 提供比 Excel 更懂科研的轻量级清洗工具。通过“扁平化工具栏”和“智能侧边栏”,让医生在不写代码的情况下完成变量加工、质量治理和样本筛选。 |
| 目标用户 | 对数据质量有洁癖的科研人员、临床医生 |
一、 产品流程图 (User Flow)
数据导入(上传/流转) -> 性能准入与降采样 -> 在线清洗(工具栏全局操作 + 侧边栏列操作) -> 版本快照 -> 导出分析集
二、 核心功能需求 (Functional Requirements)
1. 顶部扁平工具栏 (The Flat Toolbar) —— 核心交互
不再使用复杂的 Tab 分组,核心科研功能一字排开,所见即所得。
1.1 变量加工 (Variable Processing)
- P0: 生成新变量 (Generate Variable):
- 功能: 弹窗提供公式构建器。
- 支持: 加减乘除、括号、以及 ln() (对数)、exp() 等医学常用函数。
- 场景: 计算 BMI = weight / (height/100)^2。
- P0: 计算时间差 (Time Delta):
- 功能: 选择 起始日期列 和 结束日期列,自动生成差值。
- 单位: 支持按 天、月、年 输出。
- 场景: 计算 年龄、住院天数、PFS/OS。
- P0: 长宽转换 (Reshape/Pivot) —— [V2.1 新增]:
- 功能: 将“一人多行(长表)”转换为“一人一行(宽表)”。
- 配置项:
- 唯一ID (Index): 如 病人ID。
- 区分列 (Columns): 如 就诊时间 或 次序 (用于生成后缀)。
- 值列 (Values): 如 白细胞, B超 (需要铺平的数据)。
- 场景: 处理重复测量数据,为 SPSS 重复测量方差分析做准备。
1.2 数据治理 (Data Governance)
- P0: 拆分数据集 (Split Dataset):
- 功能: 按某一列的唯一值(如“中心ID”),将大表拆分为多个 Excel 文件或 Sheet。
- P0: 跨列规则检查 (Cross-column Logic):
- 功能: 定义逻辑规则(如 IF 性别='男' AND 怀孕='是'),在网格中高亮错误行。
1.3 样本筛选 (Cohort Selection)
- P0: 构建入排标准 (Cohort Builder):
- 功能: 高级筛选器。支持多条件组合(AND/OR)。
- 输出: 筛选结果可“另存为新数据集”或“标记为排除”。
2. 右侧智能侧边栏 (Smart Insight Panel) —— 交互灵魂
当用户点击表格的某一列时,侧边栏自动滑出,根据列类型提供特定的清洗工具。
2.1 选中“数值型”列(如年龄、白细胞)
- P0: 统计概览: 显示分布直方图 (Histogram)、最大值、最小值。
- P0: 异常值检测:
- 自动标记偏离分布(如 > 3σ)的值。
- 提供按钮:处理异常(支持截断或置空)。
- P0: 生成分类变量 (Binning):
- 功能: 将连续数值转为分类。
- 交互: 设置切点(如 60),生成新列(<60, >=60)。
- P0: 缺失值填补: 提供 均值、中位数 填补选项。
2.2 选中“文本/分类”列(如性别、诊断)
- P0: 统计概览: 显示频次图 (Bar Chart)。
- P0: 数值映射 (Recode):
- 功能: 将文本转为统计数值。
- 交互: 列出所有唯一值(Male, Female),用户输入目标值(1, 0)。
- P0: 设为敏感字段 (Masking): 一键脱敏(替换为 ******)。
- P1: 智能纯化 (Smart Clean): 若检测到 >10、<0.01 等含符号数值,提供一键提取数字功能。
3. 超级网格 (The Grid)
- P0: 视觉反馈:
- 空值: 背景显示淡红色。
- 脏数据: 类型不匹配的值显示紫色文字。
- 列头图标: 明确标识变量类型(# 数值, A 文本, 📅 日期)。
- P0: 基础操作: 列宽拖拽、列排序、双击单元格编辑。
4. 性能与导出 (System)
- P0: 性能准入 (Guardrails):
- 行数 < 5万:全量加载。
- 行数 > 5万:提示降采样预览,或引导使用后端批处理。
- P1: 自动快照 (Auto-Save): 每 10 次操作自动保存到 IndexedDB,防止浏览器崩溃丢失。
- P0: 导出定义:
- 导出 Excel/CSV。
- 加分项: 导出时附带变量类型定义(Metadata)。
三、 界面原型参考 (UI Reference)
请参考 工具C_科研数据编辑器_原型设计_V2_演示.html。
- 布局: 顶部单行工具栏 + 中间全屏网格 + 右侧可折叠侧边栏。
- 交互: 点击“长宽转换”按钮弹出配置模态框。
四、 风险规避 (Risk Mitigation)
- 计算精度丢失:
- 解法: 必须集成 math.js 库进行所有数学运算。
- Pivot 导致内存溢出:
- 问题: 长宽转换可能会导致列数爆炸(Column Explosion)。
- 解法: 在执行 Pivot 前,预计算结果列数。如果列数 > 1000,阻止操作并提示用户减少“区分列”的唯一值数量。