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,7 +1,7 @@
# 2025-12-02 工作总结
**日期**: 2025-12-02
**寮€鍙戜汉鍛?*: AI Assistant
**开发人员**: AI Assistant
**工作时长**: 全天
**Git Commit**: `d4d3352`
@@ -9,12 +9,12 @@
## 🎯 今日成果总览
### 鉁?涓昏<E6B693>鎴愬氨
### ✅ 主要成就
1. **DC妯″潡Phase 1瀹屾垚** - Portal宸ヤ綔鍙伴〉闈?(100%)
2. **鏁版嵁搴撻獙璇?* - 纭<><E7BAAD>4寮犺〃宸插垱寤?
1. **DC模块Phase 1完成** - Portal工作台页面 (100%)
2. **数据库验证** - 确认4张表已创建
3. **后端API验证** - 确认6个端点已就绪
4. **UI浼樺寲** - 100%瀵规爣鍘熷瀷鍥捐<EFBFBD>璁?
4. **UI优化** - 100%对标原型图设计
5. **Git提交** - 所有代码安全备份到远程仓库
---
@@ -23,98 +23,98 @@
| 类型 | 数量 | 说明 |
|------|------|------|
| **鏂板<EFBFBD>** | 21,893琛?| 鍓嶇<E98D93>+鍚庣<E98D9A>+鏂囨。 |
| **鏂板<EFBFBD>鏂囦欢** | 83涓?| 缁勪欢銆佹枃妗c€佽剼鏈?|
| **鍓嶇<EFBFBD>缁勪欢** | 3涓?| ToolCard, TaskList, AssetLibrary |
| **TypeScript浠g爜** | 715琛?| DC妯″潡鍓嶇<EFBFBD> |
| **鏂囨。** | 10+绡?| 璁捐<E79281>鏂囨。銆佸紑鍙戣<E98D99>褰?|
| **Git Commit** | 1涓?| 璇︾粏璁板綍浜嗘墍鏈夊彉鏇?|
| **新增代码** | 21,893行 | 前端+后端+文档 |
| **新增文件** | 83个 | 组件、文档、脚本 |
| **前端组件** | 3| ToolCard, TaskList, AssetLibrary |
| **TypeScript代码** | 715| DC模块前端 |
| **文档** | 10+篇 | 设计文档、开发记录 |
| **Git Commit** | 1个 | 详细记录了所有变更 |
---
## 馃彈锔?DC妯″潡 Phase 1 瀹屾垚鍐呭<EFBFBD>
## 🏗️ DC模块 Phase 1 完成内容
### 1. **鍓嶇<EFBFBD>寮€鍙?*
### 1. **前端开发**
#### Portal涓婚〉闈?
- 鉁?`pages/Portal.tsx` - 涓诲叆鍙i〉闈?
- 鉁?閫傞厤绯荤粺椤堕儴瀵艰埅
- 鉁?鍝嶅簲寮忓竷灞€锛坙g鏂<67>偣2:1姣斾緥锛?
#### Portal主页面
- `pages/Portal.tsx` - 主入口页面
- ✅ 适配系统顶部导航
- ✅ 响应式布局lg断点2:1比例
#### 鏍稿績缁勪欢锛?涓<>
#### 核心组件3个
1. **ToolCard.tsx** - 工具卡片
- 瑁呴グ鎬у渾褰㈣儗鏅?
- 装饰性圆形背景
- 精致hover动画缩放、平移、变色
- 鍥哄畾楂樺害瀵归綈锛坔-10锛?
- <EFBFBD>紓鍖栬<EFBFBD>鍔ㄦ寜閽?
- 固定高度对齐h-10
- 差异化行动按钮
2. **TaskList.tsx** - 鏈€杩戜换鍔″垪琛?
2. **TaskList.tsx** - 最近任务列表
- 原生Table布局
- 宸ュ叿鏍囩<EFBFBD>甯﹀浘鏍?
- 绮捐嚧杩涘害鏉★紙h-1.5锛?
- 工具标签带图标
- 精致进度条(h-1.5
- 流转按钮逻辑
3. **AssetLibrary.tsx** - 鏁版嵁璧勪骇搴?
- 3涓猅ab鍒嗙被锛堝叏閮?澶勭悊缁撴灉/鍘熷<E98D98>涓婁紶锛?
3. **AssetLibrary.tsx** - 数据资产库
- 3个Tab分类全部/处理结果/原始上传)
- 紧凑文件卡片
- 瓒呭皬鏍囩<EFBFBD>锛坱ext-[10px]锛?
- <EFBFBD>紓鍖栭<EFBFBD>鑹?
- 超小标签text-[10px]
- 差异化颜色
#### <EFBFBD>畾涔塇ooks锛?涓<>
- 鉁?`useRecentTasks.ts` - 浠诲姟鐘舵€佺<EFBFBD>鐞?
- 鉁?`useAssets.ts` - 璧勪骇鐘舵€佺<EFBFBD>鐞?
#### 自定义Hooks2个
- `useRecentTasks.ts` - 任务状态管理
- `useAssets.ts` - 资产状态管理
#### 类型定义
- 鉁?`types/portal.ts` - TypeScript绫诲瀷绯荤粺
- `types/portal.ts` - TypeScript类型系统
### 2. **后端验证**
#### 代码验证
- 鉁?**1,495琛屼唬鐮佸凡楠岃瘉**
- 鉁?4涓猄ervice绫诲畬鏁?
- 鉁?1涓狢ontroller绫伙紙6涓<EFBFBD><EFBFBD>鐐癸級
- 鉁?璺<>敱閰嶇疆姝
- **1,495行代码已验证**
- ✅ 4个Service类完整
- ✅ 1个Controller6个端点
- ✅ 路由配置正确
#### 鏁版嵁搴撻獙璇?
- 鉁?**dc_schema宸插垱寤?*
- 鉁?**4寮犺〃宸插垱寤?*锛?
- dc_health_checks (2鏉¤<EFBFBD>褰?
- dc_templates (3鏉¢<EFBFBD>璁炬ā鏉?
- dc_extraction_tasks (1鏉¤<EFBFBD>褰?
- dc_extraction_items (4鏉¤<EFBFBD>褰?
#### 数据库验证
- **dc_schema已创建**
- **4张表已创建**
- dc_health_checks (2条记录)
- dc_templates (3条预设模板)
- dc_extraction_tasks (1条记录)
- dc_extraction_items (4条记录)
#### API测试
- 鉁?`GET /api/v1/dc/tool-b/templates` 娴嬭瘯閫氳繃
- 鉁?杩斿洖3涓<33><E6B693>璁炬ā鏉挎暟鎹<E69A9F><E98EB9>纭?
- `GET /api/v1/dc/tool-b/templates` 测试通过
- ✅ 返回3个预设模板数据正确
### 3. **UI优化**
#### 瀵规爣鍘熷瀷鍥?
- 鉁?**100%杩樺師鍘熷瀷鍥捐<EFBFBD>璁?*
- 鉁?瑁呴グ鎬у渾褰㈣儗鏅?
- 鉁?绮捐嚧鐨刪over鍔ㄧ敾
- 鉁?姝鐨勯<E990A8>鑹茬郴缁燂紙slate鑹茬郴锛?
- 鉁?缁熶竴鐨勫瓧浣撳昂瀵?
- 鉁?缁嗚吇鐨勮繃娓℃晥鏋?
#### 对标原型图
- **100%还原原型图设计**
- ✅ 装饰性圆形背景
- ✅ 精致的hover动画
- ✅ 正确的颜色系统slate色系
- ✅ 统一的字体尺寸
- ✅ 细腻的过渡效果
#### 设计系统
- 鉁?鑹插僵锛歴late涓昏壊绯?
- 鉁?鍦嗚<E98DA6>锛歳ounded-xl鍗$墖
- 鉁?闃村奖锛歴hadow-sm闈欐€侊紝hover:shadow-md
- 鉁?瀛椾綋锛歭g/sm/xs/[10px]
- 鉁?鍔ㄧ敾锛歴cale/translate/color transitions
- ✅ 色彩slate主色系
- ✅ 圆角rounded-xl卡片
- ✅ 阴影shadow-sm静态,hover:shadow-md
- ✅ 字体lg/sm/xs/[10px]
- ✅ 动画scale/translate/color transitions
### 4. **文档完善**
#### 寮€鍙戣<EFBFBD>褰?
- 鉁?鏁版嵁搴撻獙璇佹姤鍛?
- 鉁?鍚庣<E98D9A>API娴嬭瘯鎶ュ憡
- 鉁?Phase 1瀹屾垚鎬荤粨
- 鉁?Portal椤甸潰UI浼樺寲鎶ュ憡
#### 开发记录
- ✅ 数据库验证报告
- ✅ 后端API测试报告
- Phase 1完成总结
- Portal页面UI优化报告
#### 寮€鍙戣<EFBFBD>鍒?
- 鉁?DC妯″潡Tool-B寮€鍙戣<E98D99>鍒?
- 鉁?DC妯″潡Tool-B寮€鍙戜换鍔℃竻鍗?
#### 开发计划
- ✅ DC模块Tool-B开发计划
- ✅ DC模块Tool-B开发任务清单
---
@@ -124,35 +124,35 @@
```
frontend-v2/src/modules/dc/
├── components/
鈹? 鈹溾攢鈹€ AssetLibrary.tsx (151琛?
鈹? 鈹溾攢鈹€ TaskList.tsx (167琛?
鈹? 鈹斺攢鈹€ ToolCard.tsx (124琛?
│ ├── AssetLibrary.tsx (151行)
│ ├── TaskList.tsx (167行)
│ └── ToolCard.tsx (124行)
├── hooks/
鈹? 鈹溾攢鈹€ useAssets.ts (106琛?
鈹? 鈹斺攢鈹€ useRecentTasks.ts (96琛?
│ ├── useAssets.ts (106行)
│ └── useRecentTasks.ts (96行)
├── pages/
鈹? 鈹斺攢鈹€ Portal.tsx (88琛?
│ └── Portal.tsx (88行)
├── types/
鈹? 鈹斺攢鈹€ portal.ts (45琛?
鈹斺攢鈹€ index.tsx (74琛?
│ └── portal.ts (45行)
└── index.tsx (74行)
鎬昏<EFBFBD>锛殈851琛?
总计:~851
```
### 鍚庣<EFBFBD>爜锛堝凡楠岃瘉锛?
### 后端代码(已验证)
```
backend/src/modules/dc/tool-b/
├── controllers/
鈹? 鈹斺攢鈹€ ExtractionController.ts
│ └── ExtractionController.ts
├── services/
鈹? 鈹溾攢鈹€ HealthCheckService.ts
鈹? 鈹溾攢鈹€ TemplateService.ts
鈹? 鈹溾攢鈹€ DualModelExtractionService.ts
鈹? 鈹斺攢鈹€ ConflictDetectionService.ts
│ ├── HealthCheckService.ts
│ ├── TemplateService.ts
│ ├── DualModelExtractionService.ts
│ └── ConflictDetectionService.ts
└── routes/
└── index.ts
鎬昏<EFBFBD>锛殈1,495琛?
总计:~1,495
```
---
@@ -160,20 +160,20 @@ backend/src/modules/dc/tool-b/
## 🎨 设计质量
### 视觉效果
- 猸愨瓙猸愨瓙猸?**100%瀵规爣鍘熷瀷鍥?*
- 猸愨瓙猸愨瓙猸?**绮捐嚧鐨勫姩鐢绘晥鏋?*
- 猸愨瓙猸愨瓙猸?**缁熶竴鐨剆late鑹茬郴**
- 猸愨瓙猸愨瓙猸?**涓板瘜鐨勮<E990A8>瑙夊眰娆?*
- ⭐⭐⭐⭐⭐ **100%对标原型图**
- ⭐⭐⭐⭐⭐ **精致的动画效果**
- ⭐⭐⭐⭐⭐ **统一的slate色系**
- ⭐⭐⭐⭐⭐ **丰富的视觉层次**
### 代码质量
- 鉁?**Linter鏃犻敊璇?*
- 鉁?**TypeScript绫诲瀷瀹夊叏**
- 鉁?**缁勪欢缁撴瀯娓呮櫚**
- 鉁?**澶嶇敤鎬у己**
- **Linter无错误**
- **TypeScript类型安全**
- **组件结构清晰**
- **复用性强**
---
## 鉁?Git鎻愪氦璁板綍
## Git提交记录
### Commit信息
```
@@ -187,11 +187,11 @@ Changes:
- 1,631 deletions(-)
```
### 鎺ㄩ€佺粨鏋?
### 推送结果
```
鉁?Successfully pushed to origin/master
鉁?Remote: https://gitee.com/hahafeng117/AIclinicalresearch.git
鉁?Branch: master
Successfully pushed to origin/master
Remote: https://gitee.com/hahafeng117/AIclinicalresearch.git
Branch: master
```
---
@@ -200,13 +200,13 @@ Changes:
### 1. **采用方案A独立Portal页面**
- Portal作为DC模块入口
- 3涓猅ool<EFBFBD>珛瀛愰〉闈?
- 閬垮厤浜嗕晶杈规爮瀵艰埅鐨勫<EFBFBD>鏉傛€?
- 3个Tool独立子页面
- 避免了侧边栏导航的复杂性
### 2. **100%瀵规爣鍘熷瀷鍥?*
### 2. **100%对标原型图**
- 用户反馈UI不够精致
- 娣卞叆鍒嗘瀽鍘熷瀷鍥剧粏鑺?
- 閲嶆瀯鎵€鏈夌粍浠惰揪鍒板師鍨嬭川閲?
- 深入分析原型图细节
- 重构所有组件达到原型质量
### 3. **Mock数据优先**
- 后端API尚未完全对接
@@ -215,64 +215,64 @@ Changes:
---
## 馃殌 涓嬩竴姝ヨ<E5A79D>鍒?
## 🚀 下一步计划
### Phase 2: Tool B - Step 1 & 2
**预计工时**: 6小时
**任务**:
1. Step 1: 鏂囦欢涓婁紶涓庡仴搴锋<EFBFBD>鏌ワ紙3h锛?
2. Step 2: 鏅鸿兘妯℃澘閰嶇疆锛?h锛?
1. Step 1: 文件上传与健康检查3h
2. Step 2: 智能模板配置3h
**寮€濮嬫椂闂?*: 鏄庢棩锛?025-12-03锛?
**开始时间**: 明日2025-12-03
---
## 💡 经验总结
### 成功经验
1. 鉁?**姣忔棩Git鎻愪氦** - 闃叉<EFBFBD>爜涓㈠け
2. 鉁?**缁嗚嚧瀵规爣鍘熷瀷** - 鎻愬崌UI璐ㄩ噺
3. 鉁?**缁勪欢鍖栬<E98D96>璁?* - 鎻愰珮浠g爜澶嶇敤
4. 鉁?**TypeScript绫诲瀷** - 鍑忓皯bug
5. 鉁?**Mock鏁版嵁鍏堣<EFBFBD>** - 鍔犲揩寮€鍙戦€熷害
1. **每日Git提交** - 防止代码丢失
2. **细致对标原型** - 提升UI质量
3. **组件化设计** - 提高代码复用
4. **TypeScript类型** - 减少bug
5. **Mock数据先行** - 加快开发速度
### 改进空间
1. ⚠️ 可以使用WebSocket替代轮询
2. 鈿狅笍 鍙<>互浣跨敤React Query绠$悊鐘舵€?
2. ⚠️ 可以使用React Query管理状态
3. ⚠️ 可以添加性能监控埋点
---
## 鈴?鏃堕棿鍒嗛厤
## ⏰ 时间分配
| 任务 | 耗时 | 占比 |
|------|------|------|
| 鏁版嵁搴?API楠岃瘉 | 2h | 25% |
| Portal椤甸潰寮€鍙?| 3h | 37.5% |
| 数据库/API验证 | 2h | 25% |
| Portal页面开发 | 3h | 37.5% |
| UI优化对标原型 | 2h | 25% |
| Git鎻愪氦鍜屾枃妗?| 1h | 12.5% |
| Git提交和文档 | 1h | 12.5% |
| **总计** | **8h** | **100%** |
---
## 馃幆 閲岀▼纰?
## 🎯 里程碑
- 鉁?**DC妯″潡鍚<EFBFBD>** - 2025-11-28
- 鉁?**鍚庣<E98D9A>閲嶅缓瀹屾垚** - 2025-11-29
- 鉁?**Phase 0瀹屾垚** - 2025-12-02锛堟暟鎹<EFBFBD>簱/API楠岃瘉锛?
- 鉁?**Phase 1瀹屾垚** - 2025-12-02锛圥ortal椤甸潰锛?
- 鈴?**Phase 2寮€濮?* - 2025-12-03锛圱ool B Step1&2锛?
- **DC模块启动** - 2025-11-28
- **后端重建完成** - 2025-11-29
- **Phase 0完成** - 2025-12-02(数据库/API验证
- **Phase 1完成** - 2025-12-02Portal页面)
- **Phase 2开始** - 2025-12-03Tool B Step1&2
---
## 📞 备注
### 閬靛畧鐨勮<EFBFBD>鑼?
- 鉁?Git鎻愪氦瑙勮寖锛堣嫳鏂嘽ommit message锛?
- 鉁?浜戝師鐢熷紑鍙戣<E98D99>鑼冿紙澶嶇敤骞冲彴鑳藉姏锛?
- 鉁?TypeScript浠g爜瑙勮寖
- 鉁?姣忔棩鎻愪氦鍘熷垯
### 遵守的规范
- Git提交规范英文commit message
- ✅ 云原生开发规范(复用平台能力)
- TypeScript代码规范
- ✅ 每日提交原则
### 工具使用
- Vite + React 19
@@ -283,14 +283,14 @@ Changes:
---
**宸ヤ綔鐘舵€?*: 鉁?浠婃棩浠诲姟100%瀹屾垚
**浠g爜瀹夊叏**: 鉁?宸叉帹閫佸埌杩滅▼浠撳簱
**鏂囨。瀹屽杽**: 鉁?寮€鍙戣<E98D99>褰曞凡鏇存柊
**涓嬬彮鏃堕棿**: <EFBFBD>互瀹夊績涓嬬彮锛侌煄?
**工作状态**: ✅ 今日任务100%完成
**代码安全**: ✅ 已推送到远程仓库
**文档完善**: ✅ 开发记录已更新
**下班时间**: 可以安心下班!🎉
---
**寮€鍙戣€?*: AI Assistant
**开发者**: AI Assistant
**日期**: 2025-12-02
**版本**: V1.0
@@ -348,6 +348,5 @@ Changes: