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,27 +1,27 @@
# <EFBFBD><EFBFBD>憭滨<EFBFBD><EFBFBD><EFBFBD>𤏸恣<EFBFBD>?- <20>湔鰵霂湔<E99C82>
# 全文复筛开发计划 - 更新说明
> **<EFBFBD>湔鰵<EFBFBD><EFBFBD>**嚗?025-11-22
> **更新日期**2025-11-22
> **版本**V1.1
> **<EFBFBD>湔鰵<EFBFBD><EFBFBD>**嚗𡁜抅鈭舘捶<E88898><EFBFBD><E8AD8D>𦦵<EFBFBD><F0A6A6B5>亥悄霈綽<E99C88>隡睃<E99AA1><E79D83><EFBFBD><EFBFBD>舀䲮獢?
> **更新原因**:基于质量保障策略讨论,优化技术方案
---
## 📊 核心变更总结
### 1儭謿<EFBFBD> **<2A>𣂼<EFBFBD>蝑𣇉裦嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD>甈⊥<E79488>?+ Prompt撌亦<EFBFBD>隡睃<EFBFBD>**
### 1️⃣ **提取策略:全文一次性 + Prompt工程优化**
**决策**:采用全文一次性输入策略,而非分段提取
**<EFBFBD><EFBFBD>眏**嚗?
- <EFBFBD>?摰䂿緵憭齿<E686AD>摨虫<E691A8>嚗?<3F>?vs 3<EFBFBD><EFBFBD>
- <EFBFBD>?敹恍<E695B9><EFBFBD><EFBFBD>虾銵峕<E98AB5>?
- <EFBFBD>?Nougat蝏𤘪<EFBFBD><EFBFBD>硋歇<EFBFBD><EFBFBD>憭扳芋<EFBFBD><EFBFBD><EFBFBD>?
- <EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD>rompt撌亦<E6928C><E4BAA6>臭誑<E887AD>讛蝠Lost in the Middle
**理由**
- ✅ 实现复杂度低2周 vs 3周)
- ✅ 快速验证可行性
- Nougat结构化已降低大模型负担
- ✅ 先进的Prompt工程可以减轻Lost in the Middle
**<EFBFBD><EFBFBD>隡睃<EFBFBD>**嚗?
1. **Nougat隡睃<EFBFBD>**嚗朞㘚<E69C9E><E3989A><EFBFBD><E68D8F>鍂Nougat<61>𣂼<EFBFBD><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>Markdown嚗?
2. **Section-Aware Prompting**嚗𡁜<E59A97>撖嘴LM<4C><EFBFBD><E99E9F><EFBFBD><EFBFBD><EFBFBD>?
3. **Few-shot<EFBFBD><EFBFBD>摨?*嚗𡁶鸌<F0A181B6>怠撩靚?靽⊥<E99DBD><E28AA5>其葉<E585B6><EFBFBD>蝵?<3F><><EFBFBD>靘?
**核心优化**
1. **Nougat优先**英文论文用Nougat提取结构化Markdown
2. **Section-Aware Prompting**引导LLM逐章节处理
3. **Few-shot案例库**:特别强调"信息在中间位置"的案例
4. **JSON Schema约束**:强制证据链 + 处理日志 + 自我验证
---
@@ -30,104 +30,104 @@
**变更**:从 GPT-4o + Claude-4.5 改为 DeepSeek-V3 + Qwen3-Max
**<EFBFBD><EFBFBD>眏**嚗?
- <EFBFBD>?<3F>鞉𧋦<E99E89>见末嚗块?.06/蝭?vs 0.10/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>40%嚗?
- <EFBFBD>?<3F>𡁶鍂<F0A181B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?銝剜<E98A9D><E5899C><EFBFBD><EFBFBD>见末
- <EFBFBD>?MVP<EFBFBD>嗆挾隡睃<EFBFBD>撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈賣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
**理由**
- ✅ 成本友好¥0.06/vs ¥0.10/篇(节省40%
- ✅ 通用能力层已支持
- ✅ 中文文献友好
- MVP阶段优先验证可行性,而非追求极致准确率
---
### 3⃣ **质量保障Cochrane标准 + 医学逻辑验证**
**<EFBFBD><EFBFBD><EFBFBD>滚𦛚**嚗?
1. **MedicalLogicValidator**嚗<>龫摮阡<E691AE><EFBFBD>撉諹<E69289>嚗?
**新增服务**
1. **MedicalLogicValidator**(医学逻辑验证)
- RCT必须有随机化
- 双盲研究必须说明盲法
- <EFBFBD>瑟𧋦<EFBFBD><EFBFBD><EFBFBD>箇瑪<EFBFBD>唳旿銝<EFBFBD><EFBFBD><EFBFBD>?
- 蝑?..<2E>?<3F><EFBFBD><E2889F>?
- 样本量与基线数据一致性
- 等...共5条规则
2. **EvidenceChainValidator**嚗<><E59A97><EFBFBD>桅曎撉諹<E69289>嚗?
2. **EvidenceChainValidator**(证据链验证)
- 强制原文引用≥50字
- 位置信息(章节、段落)
- 处理日志验证
3. **ConflictDetectionService**(增强)
- <EFBFBD><EFBFBD>Cochrane<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨血<EFBFBD>蝥?
- 基于Cochrane标准的严重程度分级
- 关键字段特殊处理
---
### 4⃣ **Prompt模板结构化分层**
**<EFBFBD>啁𤌍敶閧<EFBFBD><EFBFBD>?*嚗?
**新目录结构**
```
prompts/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> system_prompt.md # System Prompt嚗𠄎ection-Aware嚗?
├── system_prompt.md # System PromptSection-Aware
├── user_prompt_template.md # User Prompt模板
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> cochrane_standards/ # Cochrane<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讛膩嚗<EFBFBD><EFBFBD>摮埈挾嚗?
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> <20>𤩺㦤<F0A4A9BA>𡝗䲮瘜?md
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> <20><EFBFBD>.md
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> 蝏𤘪<E89D8F>摰峕㟲<E5B395>?md
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> ...嚗<><E59A97>12銝迎<E98A9D>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> few_shot_examples/ # Few-shot<EFBFBD>餃郎獢<EFBFBD><EFBFBD>摨?
├── cochrane_standards/ # Cochrane标准描述(分字段)
│ ├── 随机化方法.md
│ ├── 盲法.md
│ ├── 结果完整性.md
│ └── ...共12个
└── few_shot_examples/ # Few-shot医学案例库
├── 高质量RCT.md
├── 质量不足案例.md
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 靽⊥<E99DBD><E28AA5>其葉<E585B6><EFBFBD>蝵格<E89DB5>靘?md # <EFBFBD>?<3F><EFBFBD><E5ADB5><EFBFBD>
└── 信息在中间位置案例.md # ← 特别重要
```
---
### 5儭謿<EFBFBD> **撘<><E69298>穃𪂹<E7A983><F0AA82B9><EFBFBD>2<EFBFBD>?+ MVP撉諹<E69289>3憭?*
### 5️⃣ **开发周期2周 + MVP验证3天**
**<EFBFBD>㟲**嚗?
**调整**
- Week 1-2开发保持2周
- Week 3Day 11-13MVP验证 + 条件升级决策
**MVP撉諹<EFBFBD><EFBFBD>喲睸**嚗?
- 瘚贝<EFBFBD>10-15<EFBFBD>犖撌交<EFBFBD>瘜刻捏<EFBFBD>?
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?5%嚗?
**MVP验证关键**
- 测试10-15篇人工标注论文
- 评估准确率目标≥85%
- 如果<80%,升级为混合策略(关键字段分段提取)
---
### 6儭謿<EFBFBD> **<2A>唳旿摨栞挽霈<E99C88>撘?*
### 6️⃣ **数据库设计增强**
**<EFBFBD><EFBFBD>摮埈挾**嚗?
- `promptVersion`嚗䥪rompt<EFBFBD><EFBFBD>𧋦<EFBFBD>?
- `extractionMethod`嚗?nougat' | 'pymupdf'
- `structuredFormat`嚗𡁏糓<EFBFBD>虫蛹蝏𤘪<EFBFBD><EFBFBD>𡝗聢撘?
**新增字段**
- `promptVersion`Prompt版本号
- `extractionMethod`'nougat' | 'pymupdf'
- `structuredFormat`:是否为结构化格式
- `processingLog`:处理日志(验证逐章节处理)
- `logicValidation`:医学逻辑验证结果
- `evidenceComplete`:证据链是否完整
- `conflictSeverity`嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨?
- `conflictSeverity`:冲突严重程度
- `reviewPriority`:复核优先级
---
## <EFBFBD><20>喲睸<E596B2><E79DB8><EFBFBD><EFBFBD><E888AA>?
## 🎯 关键技术要点
### Prompt工程核心策略
#### 1. Section-Aware Prompting
```markdown
<EFBFBD>𩤃<EFBFBD> <20><EFBFBD>嚗𡁏𧋦<F0A1818F><F0A78BA6>糓摰峕㟲<E5B395><EFBFBD><EFBFBD>漲20,000摮梹<E691AE>嚗諹窈<E8ABB9><EFBFBD><E58EA9><EFBFBD><EFBFBD>鞉郊憭<E9838A><E686AD><EFBFBD>?
⚠️ 重要本文是完整全文约20,000字请按章节逐步处理。
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>憿駁<EFBFBD><EFBFBD><EFBFBD>嚗?
## 处理流程(必须遵守):
### Step 1: 章节定位
敹恍<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>喲睸蝡㰘<EFBFBD>嚗㇁bstract<EFBFBD><EFBFBD>ethods<EFBFBD><EFBFBD>esults...嚗?
快速浏览全文识别关键章节Abstract、Methods、Results...
### Step 2: <EFBFBD><EFBFBD><EFBFBD>畾菜<EFBFBD><EFBFBD>?
撖嫣<EFBFBD>瘥譍葵摮埈挾嚗?
### Step 2: 分字段提取
对于每个字段:
1. 标注预期位置
2. 摰帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
2. 定位到章节
3. **逐段仔细阅读**(不要跳过中间)
4. 提取信息
5. 霈啣<EFBFBD>撘閧鍂<EFBFBD><EFBFBD>蝵?
5. 记录引用和位置
<EFBFBD>𩤃<EFBFBD> <20><EFBFBD>瘜冽<E7989C>嚗?
⚠️ 特别注意:
- Methods和Results在中间位置最容易遗漏
- 这些章节很长,请分段阅读
@@ -141,15 +141,15 @@ prompts/
### 案例1信息在Methods中间段落易遗漏
全文19,500字
- Methods嚗?,000摮梹<EFBFBD>
- 蝚?畾蛛<E795BE><E89B9B>𠉛弦霈曇恣璁<E681A3>
- 蝚?畾蛛<E795BE><E89B9B><EFBFBD><E4BAA4><EFBFBD><EFBFBD>
- **蝚?畾蛛<E795BE><E89B9B>𤩺㦤<F0A4A9BA>𡝗䲮瘜?* <20>?<3F>喲睸嚗<E79DB8>銁銝剝𡢿
- 蝚?畾蛛<E795BE><E89B9B><EFBFBD>
- Methods4,000字)
- 第1段研究设计概述
- 第2段入排标准
- **第3段随机化方法** ← 关键!在中间
- 第4段盲法
- ...
正确做法✅:逐段阅读,不跳过
<EFBFBD>躰秤蝷箔<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>憭游<EFBFBD>蝏枏偏嚗諹歲餈<EFBFBD><EFBFBD>?
错误示例❌:只看开头和结尾,跳过中间
```
#### 3. JSON Schema强制约束
@@ -159,15 +159,15 @@ prompts/
"processing_log": {
"sections_reviewed": ["Abstract", "Methods", "Results", "Tables"],
"paragraphs_read_per_section": {
"Methods": 7, // <EFBFBD><EFBFBD>?
"Results": 5 // <EFBFBD><EFBFBD>?
"Methods": 7, // 必须≥3
"Results": 5 // 必须≥3
},
"middle_sections_attention": true // 必须关注中间
},
"verification": {
"keywords_searched": ["randomization", "blinding", "ITT"],
"reread_count": 2, // <EFBFBD><EFBFBD><EFBFBD>滩粉1甈?
"reread_count": 2, // 至少重读1次
"found_missed_info": false
}
}
@@ -179,30 +179,30 @@ prompts/
| 指标 | 目标 | 验证方法 |
|------|------|----------|
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MVP嚗?* | <EFBFBD>?85% | 鈭箏極<EFBFBD><EFBFBD>釣10-15蝭<35><E89DAD>霂?|
| **Methods蝡㰘<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?* | <EFBFBD>?83% | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隡?|
| **Results蝡㰘<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?* | <EFBFBD>?83% | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隡?|
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?* | 100% | <EFBFBD>芸𢆡璉<EFBFBD><EFBFBD>?|
| **<EFBFBD>餃郎<EFBFBD><EFBFBD>撉諹<EFBFBD>** | 100% | <EFBFBD><EFBFBD>撘閙<EFBFBD><EFBFBD><EFBFBD>?|
| **<EFBFBD>鞉𧋦** | <EFBFBD>?瞼0.06/蝭?| 摰鮋<E691B0><EFBFBD><E798A8><EFBFBD>霈?|
| **<EFBFBD><EFBFBD><EFBFBD>園𡢿** | <EFBFBD>?3<><33><EFBFBD>/蝭?| <20><EFBFBD>瘚贝<E7989A> |
| **准确率MVP** | 85% | 人工标注10-15篇测试 |
| **Methods章节准确率** | 83% | 分章节评估 |
| **Results章节准确率** | 83% | 分章节评估 |
| **证据链完整性** | 100% | 自动检查 |
| **医学逻辑验证** | 100% | 规则引擎检查 |
| **成本** | ≤ ¥0.06/篇 | 实际消耗统计 |
| **处理时间** | ≤ 3分钟/篇 | 性能测试 |
---
## 🚀 条件升级路径
<EFBFBD><EFBFBD>MVP<EFBFBD><EFBFBD><EFBFBD>?80%嚗<><E59A97>蝥找蛹**瘛瑕<E7989B>蝑𣇉裦**嚗?
如果MVP准确率<80%,升级为**混合策略**
```
<EFBFBD>喲睸摮埈挾嚗?銝迎<E98A9D><E8BF8E>?<3F><><EFBFBD>𣂼<EFBFBD>
- <EFBFBD>𤩺㦤<EFBFBD>𡝗䲮瘜𤏪<EFBFBD>Methods嚗?
- <EFBFBD><EFBFBD>嚗㇈ethods嚗?
- 蝏𤘪<EFBFBD>摰峕㟲<EFBFBD><EFBFBD>Results + Figures嚗?
关键字段3个→ 分段提取
- 随机化方法(Methods
- 盲法Methods
- 结果完整性(Results + Figures
<EFBFBD><EFBFBD>摮埈挾嚗?銝迎<E98A9D><E8BF8E>?靽脲<E99DBD><E884B2><EFBFBD><E586BD>𣂼<EFBFBD>
其他字段9个→ 保持全文提取
- 研究设计、研究人群、干预措施等
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧶏<EFBFBD>+1<>?
开发增量:+1周
预期准确率90%+
```
@@ -210,15 +210,15 @@ prompts/
## 📚 相关文档
- [<EFBFBD><EFBFBD>憭滨<EFBFBD>韐券<EFBFBD>靽嗪<EFBFBD>蝑𣇉裦](../02-<2D><><EFBFBD>航挽霈?08-<2D><EFBFBD>憭滨<E686AD>韐券<E99F90>靽嗪<E99DBD>蝑𣇉裦.md)
- [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>韐券<EFBFBD>靽嗪<EFBFBD>蝑𣇉裦](../02-<2D><><EFBFBD>航挽霈?06-韐券<E99F90>靽嗪<E99DBD>銝𤾸虾餈賣滲蝑𣇉裦.md)
- [<EFBFBD>唳旿摨栞挽霈(../02-<2D><><EFBFBD>航挽霈?01-<2D>唳旿摨栞挽霈?md)
- [API霈曇恣閫<EFBFBD><EFBFBD>](../02-<EFBFBD><EFBFBD><EFBFBD>航挽霈?02-API霈曇恣閫<E681A3><E996AB>.md)
- [全文复筛质量保障策略](../02-技术设计/08-全文复筛质量保障策略.md)
- [标题摘要初筛质量保障策略](../02-技术设计/06-质量保障与可追溯策略.md)
- [数据库设计](../02-技术设计/01-数据库设计.md)
- [API设计规范](../02-技术设计/02-API设计规范.md)
---
**<EFBFBD>湔鰵<EFBFBD><EFBFBD>**嚗?
- 2025-11-22: V1.1 - <EFBFBD><EFBFBD>韐券<EFBFBD>靽嗪<EFBFBD>霈刻捏嚗𣬚摰𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>甈⊥<EFBFBD>?Prompt隡睃<E99AA1>蝑𣇉裦
**更新日志**
- 2025-11-22: V1.1 - 基于质量保障讨论,确定全文一次性+Prompt优化策略
- 2025-11-22: V1.0 - 初始版本