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,19 +1,19 @@
# ASL妯″潡寮€鍙戣<EFBFBD>褰?
# ASL模块开发记录
<EFBFBD>洰褰曡<EFBFBD>褰旳SL锛圓I鏅鸿兘鏂囩尞绛涢€夛級妯″潡鐨勫畬鏁村紑鍙戝巻绋嬨€?
本目录记录ASLAI智能文献筛选模块的完整开发历程。
---
## 📁 文档索引
### Week 1 瀹屾垚鎶ュ憡锛?025-11-18锛?
### Week 1 完成报告2025-11-18
| 鏂囨。 | 鍐呭<E98D90> | 閲嶈<E996B2>鎬?|
| 文档 | 内容 | 重要性 |
|------|------|--------|
| **浠婃棩宸ヤ綔鎬荤粨.md** | 2025-11-18鍏ㄥぉ宸ヤ綔鎬荤粨 | 猸愨瓙猸愨瓙猸?|
| **涓ゆ<EFBFBD>娴嬭瘯瀹屾暣鎶ュ憡.md** | 鍥藉唴澶栨ā鍨嬪<E98DA8>姣?+ 涓夌<E6B693>椋庢牸娴嬭瘯 | 猸愨瓙猸愨瓙猸?|
| **今日工作总结.md** | 2025-11-18全天工作总结 | ⭐⭐⭐⭐⭐ |
| **两步测试完整报告.md** | 国内外模型对比 + 三种风格测试 | ⭐⭐⭐⭐⭐ |
| **卒中数据泛化测试报告.md** | 最初的泛化能力测试 | ⭐⭐⭐⭐ |
| **Prompt璁捐<EFBFBD>涓庢祴璇曞畬鎴愭姤鍛?md** | Prompt v1.0.0娴嬭瘯 | 猸愨瓙猸?|
| **Prompt设计与测试完成报告.md** | Prompt v1.0.0测试 | ⭐⭐⭐ |
| **Week1完成报告.md** | Week 1开发完成总结 | ⭐⭐⭐⭐ |
---
@@ -22,17 +22,17 @@
### 1. 根本问题确认
**鍑嗙‘鐜囦笉楂樼殑鏍规湰鍘熷洜** = AI涓庝汉绫诲<E7BBAB>杈圭晫鎯呭喌鐨勭悊瑙樊寮?
**准确率不高的根本原因** = AI与人类对边界情况的理解差异
**不是**:
- 鉂?妯″瀷鏅哄晢涓嶅<E6B693>
- 鉂?Prompt璁捐<EFBFBD>涓嶅ソ
- 鉂?瀹芥澗/涓ユ牸绋嬪害涓嶅<E6B693>
- ❌ 模型智商不够
- Prompt设计不好
- ❌ 宽松/严格程度不对
**而是**:
- 鉁?绾虫帓鏍囧噯瀛樺湪闅愬惈瑙勫垯
- 鉁?杈圭晫鎯呭喌瀹氫箟涓嶆槑纭?
- 鉁?AI鏃犳硶鐚滄祴鐢ㄦ埛鐪熷疄鎰忓浘
- ✅ 纳排标准存在隐含规则
- ✅ 边界情况定义不明确
- ✅ AI无法猜测用户真实意图
---
@@ -40,32 +40,32 @@
#### 短期方案(已实现)✅
**涓夌<EFBFBD>绛涢€夐<EFBFBD>鏍?*:
- 瀹芥澗妯″紡锛氬垵绛涗娇鐢<EFBFBD>紝瀹佸彲澶氱撼鍏?
- 鏍囧噯妯″紡锛氬父瑙勪娇鐢<EFBFBD>紝骞宠 鍑嗙鐜?
**三种筛选风格**:
- 宽松模式:初筛使用,宁可多纳入
- 标准模式:常规使用,平衡准确率
- 严格模式:精筛使用,宁可错杀
**鐘舵€?*: 鍚庣<E98D9A>瀹屾垚锛屽墠绔<E5A2A0>緟寮€鍙?
**状态**: 后端完成,前端待开发
---
#### <EFBFBD>湡鏂规<EFBFBD>锛堟帹鑽愶級猸?
#### 中期方案(推荐)⭐
**鐢ㄦ埛鑷<EFBFBD>畾涔夎竟鐣屾儏鍐?*:
**用户自定义边界情况**:
1. 用户输入PICOS + 纳排标准
2. LLM鍒嗘瀽鐢熸垚20绉嶈竟鐣屾儏鍐?
3. 鐢ㄦ埛纭<EFBFBD><EFBFBD>姣忕<EFBFBD>鎯呭喌鐨勫<EFBFBD>鐞嗘柟寮?
2. LLM分析生成20种边界情况
3. 用户确认每种情况的处理方式
4. 系统生成定制化Prompt
**浼樼偣**: 娑堥櫎AI涓庝汉绫荤悊瑙樊寮?
**优点**: 消除AI与人类理解差异
---
#### 闀挎湡鏂规<EFBFBD>锛圴1.0+锛夝煍?
#### 长期方案V1.0+)🔮
**Few-shot学习**:
- 从用户纠正中学习
- 鎸佺画浼樺寲鍑嗙‘鐜?
- 持续优化准确率
- 个性化Prompt
---
@@ -74,49 +74,49 @@
### 模型性能对比
| 妯″瀷 | 鍑嗙‘鐜?| 涓€鑷寸巼 | 閫熷害 | JSON绋冲畾鎬?|
| 模型 | 准确率 | 一致率 | 速度 | JSON稳定性 |
|------|--------|--------|------|-----------|
| DeepSeek-V3 + Qwen-Max | 40% | 60% | 16绉?| 鉁?100% |
| GPT-4o + Claude-4.5 | 0%* | 80% | 10绉?| 鉂?20% |
| DeepSeek-V3 + Qwen-Max | 40% | 60% | 16秒 | ✅ 100% |
| GPT-4o + Claude-4.5 | 0%* | 80% | 10秒 | ❌ 20% |
*因JSON格式错误导致失败
### 绛涢€夐<EFBFBD>鏍煎<EFBFBD>姣?
### 筛选风格对比
| 椋庢牸 | 鍑嗙‘鐜?| 鍙<>洖鐜?| 绮剧‘鐜?|
| 风格 | 准确率 | 召回率 | 精确率 |
|------|--------|--------|--------|
| 标准模式 | 60% | 0% | 100% |
| 宽松模式 | 20% | 50% | 0% |
| 涓ユ牸妯″紡 | 鏈<>祴璇?| - | - |
| 严格模式 | 未测试 | - | - |
---
## 馃殌 涓嬩竴姝ヨ<E5A79D>鍒?
## 🚀 下一步计划
### 本周任务
1. 猬?鍓嶇<E98D93>寮€鍙戯細绛涢€夐<E282AC>鏍奸€夋嫨鍣?
2. 猬?API闆嗘垚锛氫紶閫抈style`鍙傛暟
3. 猬?鎵╁ぇ娴嬭瘯锛?0绡囩湡瀹炴暟鎹?
4. 猬?鐢ㄦ埛鍩硅<E98DA9>锛氫笁绉嶉<E7BB89>鏍间娇鐢ㄥ満鏅?
1. ⬜ 前端开发:筛选风格选择器
2. API集成:传递`style`参数
3. ⬜ 扩大测试20篇真实数据
4. ⬜ 用户培训:三种风格使用场景
### Week 2任务
1. 猬?璁捐<E79281>杈圭晫鎯呭喌纭<E5968C><E7BAAD>UI
2. 猬?瀹炵幇LLM杈圭晫鎯呭喌鐢熸垚
3. 猬?鐢ㄦ埛纭<E59F9B><E7BAAD>娴佺▼寮€鍙?
4. 猬?瀹氬埗鍖朠rompt鐢熸垚
1. ⬜ 设计边界情况确认UI
2. ⬜ 实现LLM边界情况生成
3. ⬜ 用户确认流程开发
4. ⬜ 定制化Prompt生成
---
## 馃摑 蹇<>€熼摼鎺?
## 📝 快速链接
### 测试脚本
- `backend/scripts/test-stroke-screening.ts` - 标准模式测试
- `backend/scripts/test-stroke-screening-lenient.ts` - 宽松模式测试
- `backend/scripts/test-stroke-screening-international-models.ts` - 模型对比
- `backend/scripts/test-json-parser.ts` - JSON瑙f瀽鍣ㄦ祴璇?
- `backend/scripts/test-json-parser.ts` - JSON解析器测试
### Prompt文件
@@ -127,21 +127,21 @@
### 核心代码
- `backend/src/modules/asl/schemas/screening.schema.ts` - Prompt生成
- `backend/src/modules/asl/services/llmScreeningService.ts` - 绛涢€夋湇鍔?
- `backend/src/common/utils/jsonParser.ts` - JSON瑙f瀽鍣?
- `backend/src/modules/asl/services/llmScreeningService.ts` - 筛选服务
- `backend/src/common/utils/jsonParser.ts` - JSON解析器
---
## 💡 重要提示
1. **JSON解析器已修复** - 支持中文引号自动转换
2. **涓夌<EFBFBD>椋庢牸宸插疄鐜?* - 鍚庣<E98D9A>瀹屾垚锛屽墠绔<E5A2A0>緟寮€鍙?
3. **鏍规湰闂<EFBFBD><EFBFBD>宸茬璁?* - 闇€瑕佺敤鎴疯嚜瀹氫箟杈圭晫鎯呭喌
2. **三种风格已实现** - 后端完成,前端待开发
3. **根本问题已确认** - 需要用户自定义边界情况
---
**更新日期**: 2025-11-18
**缁存姢浜?*: AI Assistant
**维护人**: AI Assistant
**版本**: v1.0