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,193 +1,193 @@
# <EFBFBD>「俶遭隕∝<EFBFBD>遲幃怙豎りッヲ霑?
# 标题摘要初筛需求详述
> **<EFBFBD>。」迚域悽<EFBFBD>?* v1.0
> **蛻帛サコ譌・譛滂シ?* 2025-10-29
> **扈エ謚、閠<EFBFBD><EFBFBD>** AI譎コ閭ス譁<EFBDBD>鍵蠑€蜿大屬髦?
> **文档版本:** v1.0
> **创建日期:** 2025-10-29
> **维护者:** AI智能文献开发团队
> **最后更新:** 2025-10-29
---
## 📋 文档说明
譛ャ譁<EFBFBD>。」隸ヲ扈<EFBFBD>緒霑ー譬<EFBFBD>「俶遭隕∝<EFBFBD>遲帶ィ。蝮礼噪蜉溯<EFBFBD>€豎ゑシ悟渕莠傘RD譁<EFBFBD>。」霑幄。梧黄螻募柱扈<EFBFBD>喧縲?
本文档详细描述标题摘要初筛模块的功能需求基于PRD文档进行扩展和细化。
---
## 🎯 功能概述
**<EFBFBD>「俶遭隕∝<EFBFBD><EFBFBD>**譏ッ遲幃€画オ∫ィ狗噪隨ャ荳€髦カ谿オ<E8B0BF>御サ<E5BEA1>渕莠取枚迪ョ逧<EFBDAE><E980A7><EFBFBD>「伜柱鞫倩ヲ∬ソ幄。悟ソォ騾溽ュ幃€€?
**标题摘要初筛**是筛选流程的第一阶段,仅基于文献的标题和摘要进行快速筛选。
### 譬ク蠢<EFBFBD>ュ占ァ<EFBFBD><EFBFBD>?
### 核心子视图
1. **隶セ鄂ョ荳主星蜉ィ隗<EFBFBD><EFBFBD>?* - 驟咲スョ遲幃€<C280><E794BB>㊥縲∝ッシ蜈・譁<EFBDA5>鍵縲∝星蜉ィ遲幃€?
2. **陦ィ譬シ蛹門ョ。譬ク蟾・菴懷床** - 蜿梧ィ。蝙輝ICS蛻、譁ュ縲∝<E7B8B2>遯∫ョ。逅<EFBDA1>€<C280>遲門宛螳?
3. **蛻晉ュ帷サ捺棡隗<EFBFBD>** - 扈溯ョ。讎りァ医€∫サ捺棡蛻苓。ィ縲∝ッシ蜃コ蜉溯<E89C89>?
1. **设置与启动视图** - 配置筛选标准、导入文献、启动筛选
2. **表格化审核工作台** - 双模型PICS判断、冲突管理、决策制定
3. **初筛结果视图** - 统计概览、结果列表、导出功能
---
## <EFBFBD>統 蜉溯<E89C89>€豎りッヲ霑?
## 📝 功能需求详述
### 髴€豎?: 隶セ鄂ョ荳主星蜉ィ隗<EFBDA8><E99A97>?
### 需求1: 设置与启动视图
#### FR-TSCR-01.1: <EFBFBD>㊥蜿り€<EFBFBD>ア慕、?
- **髴€豎?*: 鬘オ髱「鬘カ驛ィ螻慕、コ莉?遐皮ゥカ譁ケ譯<EFBDB9>"扈ァ謇ソ逧ПICO蜥悟<E89CA5>謗呈<E8AC97><E59188><EFBFBD>亥宵隸サ<E99AB8>?
- **莨伜<EFBFBD>郤?*: 鬮?
#### FR-TSCR-01.1: 标准参考展示
- **需求**: 页面顶部展示从"研究方案"继承的PICO和入排标准只读
- **优先级**:
- **验收标准**:
- 清晰展示PICO框架内容
- 螻慕、コ郤ウ蜈・譬<EFBFBD>㊥蜥梧賜髯、譬<EFBFBD><EFBFBD>?
- 謠蝉セ<EFBFBD>"隹<>紛譛ャ谺。遲幃€<C280><E794BB><EFBFBD>?蜈・蜿」
- 展示纳入标准和排除标准
- 提供"调整本次筛选标准"入口
#### FR-TSCR-01.2: 荳エ譌カ隹<EFBFBD>紛遲幃€<EFBFBD><EFBFBD><EFBFBD>?
- **髴€豎?*: 蜈∬ョク逕ィ謌キ霑幄。御サ<E5BEA1>ッケ譛ャ谺。遲幃€臥函謨育噪荳エ譌カ菫ョ謾ケ
- **莨伜<EFBFBD>郤?*: 鬮?
#### FR-TSCR-01.2: 临时调整筛选标准
- **需求**: 允许用户进行仅对本次筛选生效的临时修改
- **优先级**:
- **验收标准**:
- 蜿ッ菫ョ謾ケPICO蜥悟<EFBFBD>謗呈<EFBFBD><EFBFBD><EFBFBD>?
- 菫ョ謾ケ荳榊スア蜩榊次蟋狗<EFBFBD>皮ゥカ譁ケ譯?
- 蝨ィ螳。譬ク蟾・菴懷床譛画<EFBFBD>遑ョ謠千、?
- 可修改PICO和入排标准
- 修改不影响原始研究方案
- 在审核工作台有明确提示
#### FR-TSCR-01.3: 文献导入
- **髴€豎?*: 莉<>髪謖?荳贋シ<E8B48B>Excel譁<6C>サカ"譁ケ蠑擾シ梧署萓帶ィ。譚ソ荳玖ス?
- **莨伜<EFBFBD>郤?*: 鬮?
- **需求**: 仅支持"上传Excel文件"方式,提供模板下载
- **优先级**:
- **验收标准**:
- 支持Excel文件上传
- 提供标准模板下载
- 文件格式验证
- 导入结果预览
#### FR-TSCR-01.4: 蜷ッ蜉ィ遲幃€?
- **髴€豎?*: 蟇シ蜈・譁<EFBDA5>鍵蜷趣シ梧ソ€豢?蠑€蟋帰I蛻晉ュ<E69989>"謖蛾聴
- **莨伜<EFBFBD>郤?*: 鬮?
#### FR-TSCR-01.4: 启动筛选
- **需求**: 导入文献后,激活"开始AI初筛"按钮
- **优先级**:
- **验收标准**:
- 謖蛾聴迥カ諤∵而蛻?
- 轤ケ蜃サ蜷主星蜉ィAI遲幃€我ササ蜉?
- 按钮状态控制
- 点击后启动AI筛选任务
- 显示任务进度
---
### 髴€豎?: 陦ィ譬シ蛹門ョ。譬ク蟾・菴懷床隗<E5BA8A>崟 箝絶ュ絶ュ?
### 需求2: 表格化审核工作台视图 ⭐⭐⭐
#### FR-TSCR-02.1: 表格结构设计
- **髴€豎?*: 鬮倅ソ。諱ッ蟇<EFBDAF>コヲ逧<EFBDA6>。ィ譬シ蛹門ク<E99680>€
- **莨伜<EFBFBD>郤?*: 譫<><EFBFBD>
- **需求**: 高信息密度的表格化布局
- **优先级**: 极高
- **验收标准**:
- 荳、陦瑚。ィ螟エ扈捺桷<EFBFBD>域ィ。蝙句玄蝓?+ P/I/C/S蛻暦シ<EFBFBD>
- 荳サ陦悟桁蜷ォ謇€譛牙<EFBFBD>髞ョ菫。諱?
- 螻募シ€陦梧仞遉コ隸∵紺遏ュ隸?
- 两行表头结构(模型区域 + P/I/C/S列)
- 主行包含所有关键信息
- 展开行显示证据短语
- 支持展开/收起
#### FR-TSCR-02.2: 双模型PICS判断
- **髴€豎?*: DS蜥群3讓。蝙句<EFBFBD>蛻ォ蟇ケP/I/C/S蝗帑クェ扈エ蠎ヲ霑幄。悟愛譁ュ
- **莨伜<EFBFBD>郤?*: 譫<><EFBFBD>
- **需求**: DS和Q3模型分别对P/I/C/S四个维度进行判断
- **优先级**: 极高
- **验收标准**:
- 豈丈クェ扈エ蠎ヲ譏セ遉コ蛻、譁ュ扈捺棡<EFBFBD>遺恣/笨??<3F>?
- 每个维度显示判断结果(✓/✗/?
- 展示双模型的判断结果
- 支持查看详细判断理由
#### FR-TSCR-02.3: 证据短语提取
- **髴€豎?*: 螻慕、コAI謠仙叙逧<E58F99><E980A7>髞ョ隸∵紺遏ュ隸?
- **莨伜<EFBFBD>郤?*: 譫<><EFBFBD>
- **需求**: 展示AI提取的关键证据短语
- **优先级**: 极高
- **验收标准**:
- 螻募シ€陦梧仞遉コDS蜥群3逧<EFBFBD>ッ∵紺遏ュ隸?
- 展开行显示DS和Q3的证据短语
- 短语清晰标注对应的P/I/C/S维度
- 支持点击查看原文
#### FR-TSCR-02.4: 原文审查模态框
- **髴€豎?*: 轤ケ蜃サ蛻、譁ュ蝗セ譬<EFBDBE>シケ蜃コ蜿瑚ァ<E7919A>崟螳。譟・讓。諤∵。<E288B5>
- **莨伜<EFBFBD>郤?*: 譫<><EFBFBD>
- **需求**: 点击判断图标弹出双视图审查模态框
- **优先级**: 极高
- **验收标准**:
- 左侧显示摘要
- 蜿ウ萓ァ譏セ遉コ蜿梧ィ。蝙句愛譁ュ隸ヲ諠?
- 右侧显示双模型判断详情
- 原文自动高亮
- 支持来源引用查看
---
### 髴€豎?: 蜀イ遯∫ョ。逅<EFBDA1>
### 需求3: 冲突管理
#### FR-TSCR-03.1: 冲突识别
- **髴€豎?*: 閾ェ蜉ィ隸<EFBDA8>悪荳、讓。蝙句愛譁ュ荳堺ク€閾エ逧<EFBDB4>枚迪ョ
- **莨伜<EFBFBD>郤?*: 鬮?
- **需求**: 自动识别两模型判断不一致的文献
- **优先级**:
- **验收标准**:
- 自动检测冲突项
- <EFBFBD>ァ蛾ォ倅コョ<EFBFBD>亥ヲり。瑚レ譎ッ濶イ<EFBFBD>?
- 謾ッ謖∝<EFBFBD><EFBFBD>。ケ遲幃€?
- 视觉高亮(如行背景色)
- 支持冲突项筛选
#### FR-TSCR-03.2: 冲突处理
- **髴€豎?*: 蜈∬ョク逕ィ謌キ蟇ケ蜀イ遯<EFBDB2>。ケ霑幄。御ココ蟾・莉イ陬<EFBDB2>
- **莨伜<EFBFBD>郤?*: 鬮?
- **需求**: 允许用户对冲突项进行人工仲裁
- **优先级**:
- **验收标准**:
- 支持查看冲突详情
- 謾ッ謖<EFBFBD>€画叫譛€扈亥<EFBFBD>遲?
- 支持选择最终决策
- 记录决策原因
---
### 髴€豎?: 謇ケ驥乗桃菴<E6A183>
### 需求4: 批量操作
#### FR-TSCR-04.1: 批量决策
- **髴€豎?*: 謾ッ謖∝ッケ髱槫<E9ABB1><EFBFBD>。ケ霑幄。梧音驥丞<E9A9A5>遲?
- **莨伜<EFBFBD>郤?*: 荳?
- **需求**: 支持对非冲突项进行批量决策
- **优先级**:
- **验收标准**:
- 謾ッ謖∝、夐€画枚迪?
- 支持多选文献
- 批量设置决策结果
- 批量设置决策原因
---
### 髴€豎?: 蛻晉ュ帷サ捺棡隗<E6A3A1>
### 需求5: 初筛结果视图
#### FR-TSCR-05.1: 统计概览
- **髴€豎?*: 螻慕、コ遲幃€臥サ溯ョ。菫。諱?
- **莨伜<EFBFBD>郤?*: 鬮?
- **需求**: 展示筛选统计信息
- **优先级**:
- **验收标准**:
- 卡片形式展示统计数字
- <EFBFBD><EFBFBD>€サ隶。縲∫コウ蜈・縲∵賜髯、謨ー驥?
- 包括:总计、纳入、排除数量
#### FR-TSCR-05.2: PRISMA式排除总结
- **髴€豎?*: 螻慕、コ荳サ隕∵賜髯、蜴溷屏蜿頑焚驥?
- **莨伜<EFBFBD>郤?*: 鬮?
- **需求**: 展示主要排除原因及数量
- **优先级**:
- **验收标准**:
- 列表展示排除原因
- 显示对应文献数量
- 支持点击查看详情
#### FR-TSCR-05.3: 结果列表
- **髴€豎?*: Tab鬘オ蛻<EFBFBD>困譟・逵狗コウ蜈・蜥梧賜髯、逧<EFBFBD>枚迪ョ蛻苓。?
- **莨伜<EFBFBD>郤?*: 鬮?
- **需求**: Tab页切换查看纳入和排除的文献列表
- **优先级**:
- **验收标准**:
- 支持Tab切换
- 表格展示文献信息
- 支持筛选和搜索
#### FR-TSCR-05.4: 导出功能
- **髴€豎?*: 蟆<>サ捺棡蛻苓。ィ蟇シ蜃コ荳コExcel
- **莨伜<EFBFBD>郤?*: 鬮?
- **需求**: 将结果列表导出为Excel
- **优先级**:
- **验收标准**:
- 支持导出为Excel格式
- <EFBFBD>性螳梧紛逧<EFBFBD>枚迪ョ菫。諱?
- 包含完整的文献信息
- 格式规范清晰
---
## <EFBFBD>投 髱槫粥閭ス諤ァ髴€豎?
## 📊 非功能性需求
- **諤ァ閭ス**: 蜊墓ャ。遲幃€画髪謖?000+<EFBFBD>
- **蜩榊コ疲慮髣エ**: 蜊穂クェ譁<EFBDAA>鍵蛻、譁ュ < 5遘?
- **蟷カ蜿<EFBFBD>**: 謾ッ謖∝、夂畑謌キ蜷梧慮遲幃€?
- **蜿ッ髱<EFBFBD>諤?*: 謾ッ謖∽ササ蜉。荳ュ譁ュ蜥梧△螟?
- **性能**: 单次筛选支持1000+文献
- **响应时间**: 单个文献判断 < 5
- **并发**: 支持多用户同时筛选
- **可靠性**: 支持任务中断和恢复
---
## 📚 相关文档
- [PRD<EFBFBD>。」 - 蛻晉ュ帑ク主、咲ュ嫋(../../00-鬘ケ逶ョ讎りソー/AI譎コ閭ス譁<EFBDBD>鍵PRD<52>?<3F>?蛻晉ュ帑ク主、咲ュ?md)
- [PRD文档 - 初筛与复筛](../../00-项目概述/AI智能文献PRD2-初筛与复筛.md)
- [原型图](../../01-设计文档/AI智能文献-标题摘要初筛原型.html)
- [謨ー謐ョ蠎楢ョセ隶。](../02-謚€譛ッ隶セ隶?01-謨ー謐ョ蠎楢ョセ隶?md)
- [API隶セ隶。隗<EFBFBD>](../02-謚€譛ッ隶セ隶?02-API隶セ隶。隗<EFBDA1>.md)
- [数据库设计](../02-技术设计/01-数据库设计.md)
- [API设计规范](../02-技术设计/02-API设计规范.md)
---
**<EFBFBD>。」迚域悽<EFBFBD>?* v1.0
**文档版本:** v1.0
**最后更新:** 2025-10-29