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,29 +1,29 @@
# 模块配置更新报告
> **鏇存柊鏃堕棿锛?* 2025-11-12
> **鏇存柊鍐呭<EFBFBD>锛?* 鎸夌収骞冲彴鏋舵瀯鏂囨。璋冩暣妯″潡閰嶇疆
> **鍙傝€冩枃妗o細** `docs/01-骞冲彴鍩虹<EFBFBD>灞?06-鍓嶇<E98D93>鏋舵瀯/01-鍓嶇<E98D93>鎬讳綋鏋舵瀯璁捐<E79281>.md`
> **更新时间:** 2025-11-12
> **更新内容:** 按照平台架构文档调整模块配置
> **参考文档:** `docs/01-平台基础层/06-前端架构/01-前端总体架构设计.md`
---
## 鉁?鏇存柊鍐呭<E98D90>
## ✅ 更新内容
### 1. 妯″潡鏁伴噺鍜岄『搴忚皟鏁?
### 1. 模块数量和顺序调整
**璋冩暣鍓嶏紙5涓<EFBFBD>ā鍧楋級锛?*
**调整前5个模块**
1. AI智能文献 (asl) - `/literature`
2. AI智能问答 (aia) - `/ai-qa`
3. 鐭ヨ瘑搴?(pkb) - `/knowledge`
4. 瀹$ǹ绯荤粺 (rvw) - `/review` 鉂?
3. 知识库 (pkb) - `/knowledge`
4. 审稿系统 (rvw) - `/review`
5. 数据清洗 (dc) - `/data-cleaning`
**璋冩暣鍚庯紙6涓<EFBFBD>ā鍧楋級锛?*
1. **AI<EFBFBD>** (ai-qa) - `/ai-qa` 鉁?
2. **AI鏅鸿兘鏂囩尞** (literature-platform) - `/literature` 鉁?
3. **鐭ヨ瘑搴?* (knowledge-base) - `/knowledge-base` 鉁?
4. **鏅鸿兘鏁版嵁娓呮礂** (data-cleaning) - `/data-cleaning` 鉁?
5. **鏅鸿兘缁熻<EFBFBD>鍒嗘瀽** (statistical-analysis) - `/intelligent-analysis` 鉁?鏂板<E98F82>
6. **缁熻<EFBFBD>鍒嗘瀽宸ュ叿** (statistical-tools) - `/statistical-tools` 鉁?鏂板<E98F82>
**调整后6个模块**
1. **AI问答** (ai-qa) - `/ai-qa`
2. **AI智能文献** (literature-platform) - `/literature`
3. **知识库** (knowledge-base) - `/knowledge-base`
4. **智能数据清洗** (data-cleaning) - `/data-cleaning`
5. **智能统计分析** (statistical-analysis) - `/intelligent-analysis` ✨ 新增
6. **统计分析工具** (statistical-tools) - `/statistical-tools` ✨ 新增
---
@@ -31,19 +31,19 @@
### 1. 模块注册中心 (moduleRegistry.ts)
#### <EFBFBD>敼鐨勬ā鍧?
#### 修改的模块
| 椤圭洰 | 淇<>敼鍓?| 淇<>敼鍚?| 璇存槑 |
| 项目 | 修改前 | 修改后 | 说明 |
|------|--------|--------|------|
| **模块1** | AI智能文献首位 | AI问答首位 | 调整顺序 |
| **模块ID** | `aia` | `ai-qa` | 统一命名规范 |
| **模块ID** | `asl` | `literature-platform` | 统一命名规范 |
| **模块ID** | `pkb` | `knowledge-base` | 统一命名规范 |
| **<EFBFBD>敱璺<EFBFBD>** | `/knowledge` | `/knowledge-base` | 鎸夋枃妗<EFBFBD>鑼?|
| **路由路径** | `/knowledge` | `/knowledge-base` | 按文档规范 |
#### 鏂板<EFBFBD>鐨勬ā鍧?
#### 新增的模块
**妯″潡5锛氭櫤鑳界粺璁″垎鏋?*
**模块5智能统计分析**
```typescript
{
id: 'statistical-analysis',
@@ -58,7 +58,7 @@
}
```
**妯″潡6锛氱粺璁″垎鏋愬伐鍏?*
**模块6统计分析工具**
```typescript
{
id: 'statistical-tools',
@@ -73,9 +73,9 @@
}
```
#### 鍒犻櫎鐨勬ā鍧?
#### 删除的模块
- 鉂?**瀹$ǹ绯荤粺** (rvw) - 鏋舵瀯鏂囨。涓<EFBFBD>湭瀹氫箟姝ゆā鍧?
- **审稿系统** (rvw) - 架构文档中未定义此模块
---
@@ -91,50 +91,50 @@ isExternal?: boolean
### 3. 模块目录结构
**鏂板<EFBFBD><EFBFBD>綍锛?*
- 鉁?`src/modules/ssa/index.tsx` - 鏅鸿兘缁熻<EFBFBD>鍒嗘瀽妯″潡
- 鉁?`src/modules/st/index.tsx` - 缁熻<EFBFBD>鍒嗘瀽宸ュ叿妯″潡
**新增目录:**
- `src/modules/ssa/index.tsx` - 智能统计分析模块
- `src/modules/st/index.tsx` - 统计分析工具模块
**鍒犻櫎鐩<EFBFBD>綍锛?*
- 鉂?`src/modules/rvw/index.tsx` - 瀹$ǹ绯荤粺妯″潡
**删除目录:**
- `src/modules/rvw/index.tsx` - 审稿系统模块
---
### 4. 首页 (HomePage.tsx)
**缁熻<EFBFBD>鏁版嵁鏇存柊锛?*
- 涓氬姟妯″潡鏁伴噺锛? 鈫?**6**
**统计数据更新:**
- 业务模块数量5 → **6**
**鐘舵€佹爣绛鹃€昏緫浼樺寲锛?*
**状态标签逻辑优化:**
```typescript
// AI鏅鸿兘鏂囩尞锛堝紑鍙戜腑锛?
// AI智能文献(开发中)
{!module.placeholder && module.id === 'literature-platform' && (
<span className="text-green-600 bg-green-50">Week 3 ?/span>
<span className="text-green-600 bg-green-50">Week 3 </span>
)}
// 澶栭儴妯″潡锛圝ava鍥㈤槦锛?
// 外部模块Java团队
{module.placeholder && module.isExternal && (
<span className="text-purple-600 bg-purple-50"></span>
)}
// 其他占位模块
{module.placeholder && !module.isExternal && (
<span className="text-orange-500 bg-orange-50">?/span>
<span className="text-orange-500 bg-orange-50"></span>
)}
```
---
## 馃搳 妯″潡瀵圭収琛?
## 📊 模块对照表
| 搴忓彿 | 妯″潡鍚嶇О | 妯″潡ID | 璺<>敱璺<E695B1>緞 | 寮€鍙戠姸鎬?| 鏉冮檺瑕佹眰 | 鐗规畩鏍囪<E98F8D> |
| 序号 | 模块名称 | 模块ID | 路由路径 | 开发状态 | 权限要求 | 特殊标记 |
|------|---------|--------|---------|---------|---------|---------|
| 1 | AI<EFBFBD> | `ai-qa` | `/ai-qa` | 瑙勫垝涓?| 鍩虹<E98DA9>鐗? | - |
| 2 | AI鏅鸿兘鏂囩尞 | `literature-platform` | `/literature` | Week 3寮€鍙?| 楂樼骇鐗? | 鏀<>寔鐙<E5AF94>珛杩愯<E69DA9> |
| 3 | 鐭ヨ瘑搴?| `knowledge-base` | `/knowledge-base` | 瑙勫垝涓?| 鍩虹<E98DA9>鐗? | - |
| 4 | 鏅鸿兘鏁版嵁娓呮礂 | `data-cleaning` | `/data-cleaning` | 瑙勫垝涓?| 楂樼骇鐗? | - |
| 5 | 鏅鸿兘缁熻<EFBFBD>鍒嗘瀽 | `statistical-analysis` | `/intelligent-analysis` | 澶栭儴闆嗘垚 | 鏃楄埌鐗?| Java鍥㈤槦寮€鍙?|
| 6 | 缁熻<EFBFBD>鍒嗘瀽宸ュ叿 | `statistical-tools` | `/statistical-tools` | 澶栭儴闆嗘垚 | 鏃楄埌鐗?| Java鍥㈤槦寮€鍙?|
| 1 | AI问答 | `ai-qa` | `/ai-qa` | 规划中 | 基础版+ | - |
| 2 | AI智能文献 | `literature-platform` | `/literature` | Week 3开发 | 高级版+ | 支持独立运行 |
| 3 | 知识库 | `knowledge-base` | `/knowledge-base` | 规划中 | 基础版+ | - |
| 4 | 智能数据清洗 | `data-cleaning` | `/data-cleaning` | 规划中 | 高级版+ | - |
| 5 | 智能统计分析 | `statistical-analysis` | `/intelligent-analysis` | 外部集成 | 旗舰版 | Java团队开发 |
| 6 | 统计分析工具 | `statistical-tools` | `/statistical-tools` | 外部集成 | 旗舰版 | Java团队开发 |
---
@@ -143,25 +143,25 @@ isExternal?: boolean
### 顶部导航(从左到右)
```
馃彞 AI涓村簥鐮旂┒骞冲彴 馃挰AI闂<49>瓟(瑙勫垝涓? 馃搫AI鏅鸿兘鏂囩尞 馃搧鐭ヨ瘑搴?瑙勫垝涓?
馃Ч鏅鸿兘鏁版嵁娓呮礂(瑙勫垝涓? 馃搳鏅鸿兘缁熻<E7BC81>鍒嗘瀽(瑙勫垝涓?
馃搱缁熻<EFBFBD>鍒嗘瀽宸ュ叿(瑙勫垝涓? 馃懁鐮旂┒鍛樷柤
🏥 AI临床研究平台 💬AI问答(规划中) 📄AI智能文献 📁知识库(规划中)
🧹智能数据清洗(规划中) 📊智能统计分析(规划中)
📈统计分析工具(规划中) 👤研究员▼
```
### 首页模块卡片
```
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? 馃挰 鈹?鈹? 馃搫 鈹?鈹? 馃搧 鈹?
鈹? AI<EFBFBD> 鈹?鈹?AI鏅鸿兘鏂囩尞 鈹?鈹? 鐭ヨ瘑搴? 鈹?
鈹? 瑙勫垝涓? 鈹?鈹?Week 3寮€鍙? 鈹?鈹? 瑙勫垝涓? 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
┌────────────┐ ┌────────────┐ ┌────────────┐
💬 │ │ 📄 │ │ 📁 │
AI问答 │ │ AI智能文献 │ │ 知识库
│ 规划中 │ │ Week 3开发 │ │ 规划中 │
└────────────┘ └────────────┘ └────────────┘
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? 馃Ч 鈹?鈹? 馃搳 鈹?鈹? 馃搱 鈹?
鈹傛櫤鑳芥暟鎹<EFBFBD>竻娲?鈹?鈹傛櫤鑳界粺璁″垎鏋?鈹?鈹傜粺璁″垎鏋愬伐鍏?鈹?
鈹? 瑙勫垝涓? 鈹?鈹? 澶栭儴闆嗘垚 鈹?鈹? 澶栭儴闆嗘垚 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
┌────────────┐ ┌────────────┐ ┌────────────┐
🧹 │ │ 📊 │ │ 📈 │
│智能数据清洗 │ │智能统计分析 │ │统计分析工具 │
│ 规划中 │ │ 外部集成 │ │ 外部集成 │
└────────────┘ └────────────┘ └────────────┘
📊 系统统计
[ 6 业务模块 ] [ 10 Schema ] [ 4 LLM ]
@@ -169,65 +169,65 @@ isExternal?: boolean
---
## 鉁?楠屾敹鏍囧噯
## ✅ 验收标准
- [x] 顶部导航显示6个模块顺序正确
- [x] 妯″潡鍛藉悕涓庢灦鏋勬枃妗d竴鑷?
- [x] <EFBFBD>敱璺<EFBFBD>緞涓庢灦鏋勬枃妗竴鑷?
- [x] 棣栭〉缁熻<EFBFBD>鏁版嵁鏄剧ず"6涓<36>笟鍔℃ā鍧?
- [x] AI鏅鸿兘鏂囩尞鏄剧ず"Week 3 寮€鍙?锛堢豢鑹诧級
- [x] 模块命名与架构文档一致
- [x] 路由路径与架构文档一致
- [x] 首页统计数据显示"6个业务模块"
- [x] AI智能文献显示"Week 3 开发"(绿色)
- [x] Java团队模块显示"外部集成"(紫色)
- [x] 鍏朵粬妯″潡鏄剧ず"瑙勫垝涓?锛堟<E9949B>鑹诧級
- [x] 其他模块显示"规划中"(橙色)
- [x] 删除了架构文档中未定义的审稿系统模块
---
## 馃搧 淇<>敼鐨勬枃浠舵竻鍗?
## 📁 修改的文件清单
1. 鉁?`src/framework/modules/moduleRegistry.ts` - 妯″潡娉ㄥ唽閰嶇疆
2. 鉁?`src/framework/modules/types.ts` - 绫诲瀷瀹氫箟
3. 鉁?`src/pages/HomePage.tsx` - 棣栭〉缁熻<EFBFBD>鍜屾爣绛鹃€昏緫
4. 鉁?`src/modules/ssa/index.tsx` - 鏂板<EFBFBD>鏅鸿兘缁熻<EFBFBD>鍒嗘瀽妯″潡
5. 鉁?`src/modules/st/index.tsx` - 鏂板<EFBFBD>缁熻<EFBFBD>鍒嗘瀽宸ュ叿妯″潡
6. 鉂?`src/modules/rvw/index.tsx` - 鍒犻櫎瀹$ǹ绯荤粺妯″潡
1. `src/framework/modules/moduleRegistry.ts` - 模块注册配置
2. `src/framework/modules/types.ts` - 类型定义
3. `src/pages/HomePage.tsx` - 首页统计和标签逻辑
4. `src/modules/ssa/index.tsx` - 新增智能统计分析模块
5. `src/modules/st/index.tsx` - 新增统计分析工具模块
6. `src/modules/rvw/index.tsx` - 删除审稿系统模块
---
## 馃幆 涓庢灦鏋勬枃妗g殑涓€鑷存€?
## 🎯 与架构文档的一致性
| 椤圭洰 | 鏋舵瀯鏂囨。瑕佹眰 | 褰撳墠瀹炵幇 | 鐘舵€?|
| 项目 | 架构文档要求 | 当前实现 | 状态 |
|------|-------------|---------|------|
| 妯″潡鏁伴噺 | 6涓?| 6涓?| 鉁?|
| 妯″潡椤哄簭 | AI闂<49>瓟鈫扐I鏅鸿兘鏂囩尞鈫掔煡璇嗗簱鈫?.. | 涓€鑷?| 鉁?|
| 妯″潡ID鍛藉悕 | `ai-qa`, `literature-platform`绛?| 涓€鑷?| 鉁?|
| <EFBFBD>敱璺<EFBFBD> | `/ai-qa`, `/literature`绛?| 涓€鑷?| 鉁?|
| 鏉冮檺閰嶇疆 | 鍩虹<E98DA9>鐗?楂樼骇鐗?鏃楄埌鐗?| 涓€鑷?| 鉁?|
| 澶栭儴妯″潡鏍囪<EFBFBD> | Java鍥㈤槦妯″潡闇€鏍囪<E98F8D> | 宸叉爣璁?| 鉁?|
| 模块数量 | 6| 6个 | ✅ |
| 模块顺序 | AI问答→AI智能文献→知识库→... | 一致 | ✅ |
| 模块ID命名 | `ai-qa`, `literature-platform`等 | 一致 | ✅ |
| 路由路径 | `/ai-qa`, `/literature`等 | 一致 | ✅ |
| 权限配置 | 基础版/高级版/旗舰版 | 一致 | ✅ |
| 外部模块标记 | Java团队模块需标记 | 已标记 | ✅ |
---
## 🚀 后续工作
1. **Week 3 Day 1-2锛?* AI鏅鸿兘鏂囩尞妯″潡寮€鍙戝墠鍑嗗<E98D91>
- 鏁版嵁搴撹<EFBFBD>璁★紙asl_schema锛?
1. **Week 3 Day 1-2** AI智能文献模块开发前准备
- 数据库设计(asl_schema
- API设计
- 前端页面设计
2. **<EFBFBD>潵锛?* 澶栭儴妯″潡闆嗘垚
- 鏅鸿兘缁熻<EFBFBD>鍒嗘瀽锛圝ava鍥㈤槦锛?
- 缁熻<EFBFBD>鍒嗘瀽宸ュ叿锛圝ava鍥㈤槦锛?
2. **未来:** 外部模块集成
- 智能统计分析Java团队
- 统计分析工具Java团队
- 前端仅做导航集成和iframe嵌入
3. **<EFBFBD>潵锛?* 鍏朵粬妯″潡寮€鍙?
3. **未来:** 其他模块开发
- AI问答模块重写
- 鐭ヨ瘑搴撴ā鍧楅噸鍐?
- 鏅鸿兘鏁版嵁娓呮礂妯″潡寮€鍙?
- 知识库模块重写
- 智能数据清洗模块开发
---
**鏇存柊瀹屾垚锛?* 鉁?
**更新完成!**
鎵€鏈夋ā鍧楅厤缃<EFBFBD>凡涓庡钩鍙版灦鏋勬枃妗繚鎸佷竴鑷淬€?
所有模块配置已与平台架构文档保持一致。