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,9 +1,9 @@
# PKB妯″潡鍓嶇<EFBFBD>V3璁捐<EFBFBD>瀹炵幇 - 寮€鍙戣<E98D99>褰?
# PKB模块前端V3设计实现 - 开发记录
> **鏃ユ湡锛?* 2026-01-07
> **寮€鍙戣€咃細** PKB寮€鍙戝洟闃?
> **鐗堟湰锛?* v1.0
> **鐘舵€侊細** 鉁?鍩虹<E98DA9>妗嗘灦瀹屾垚锛屽緟缁嗗寲浼樺寲
> **日期:** 2026-01-07
> **开发者:** PKB开发团队
> **版本:** v1.0
> **状态:** ✅ 基础框架完成,待细化优化
---
@@ -13,119 +13,119 @@
1. **后端模块迁移**将PKB后端代码迁移到新的模块化架构
2. **前端V3设计实现**基于原型图实现Dashboard和Workspace页面
3. **3绉嶅伐浣滄ā寮忓疄鐜?*锛氬叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊
3. **3种工作模式实现**:全文阅读、逐篇精读、批处理
4. **Chat组件集成**使用Ant Design X Chat组件实现AI对话
---
## 鉁?瀹屾垚鐨勫伐浣?
## ✅ 完成的工作
### 1. 后端模块迁移
**杩佺Щ鍐呭<EFBFBD>**锛?
- 灏咰ontroller銆丼ervice銆丷oute浠g爜杩佺Щ鍒?`backend/src/modules/pkb/`
**迁移内容**
- 将Controller、Service、Route代码迁移到 `backend/src/modules/pkb/`
- 更新import路径
- 娉ㄥ唽鏂癆PI璺<EFBFBD> `/api/v1/pkb/*`
- 注册新API路由 `/api/v2/pkb/*`
- 保持旧版路由 `/api/v1/knowledge*` 兼容
**<EFBFBD>綍缁撴瀯**锛?
**目录结构**
```
backend/src/modules/pkb/
├── controllers/
鈹? 鈹溾攢鈹€ knowledgeBaseController.ts
鈹? 鈹溾攢鈹€ documentController.ts
鈹? 鈹斺攢鈹€ batchController.ts
│ ├── knowledgeBaseController.ts
│ ├── documentController.ts
│ └── batchController.ts
├── services/
鈹? 鈹溾攢鈹€ knowledgeBaseService.ts
鈹? 鈹溾攢鈹€ documentService.ts
鈹? 鈹斺攢鈹€ batchService.ts
│ ├── knowledgeBaseService.ts
│ ├── documentService.ts
│ └── batchService.ts
├── routes/
鈹? 鈹斺攢鈹€ index.ts
│ └── index.ts
└── index.ts
```
**<EFBFBD>敱娉ㄥ唽**锛?
- v2<EFBFBD>敱锛歚/api/v1/pkb/knowledge`锛堟柊鏋舵瀯锛?
**路由注册**
- v2路由:`/api/v2/pkb/knowledge`(新架构)
- v1路由`/api/v1/knowledge``/api/v1/batch-tasks`(兼容)
### 2. 前端V3设计实现
**鍩轰簬鍘熷瀷鍥?*锛?
- `鐭ヨ瘑搴撲华琛ㄧ洏V5.html` 鈫?DashboardPage
- `宸ヤ綔鍙癡3.html` 鈫?WorkspacePage
**基于原型图**
- `知识库仪表盘V5.html` DashboardPage
- `工作台V3.html` WorkspacePage
**鍓嶇<EFBFBD><EFBFBD>綍缁撴瀯**锛?
**前端目录结构**
```
frontend-v2/src/modules/pkb/
├── api/
鈹? 鈹斺攢鈹€ knowledgeBaseApi.ts # API瀹㈡埛绔?
│ └── knowledgeBaseApi.ts # API客户端
├── stores/
鈹? 鈹斺攢鈹€ useKnowledgeBaseStore.ts # Zustand鐘舵€佺<EFBFBD>鐞?
│ └── useKnowledgeBaseStore.ts # Zustand状态管理
├── pages/
鈹? 鈹溾攢鈹€ DashboardPage.tsx # <EFBFBD>〃鐩橀〉闈?
鈹? 鈹斺攢鈹€ WorkspacePage.tsx # 宸ヤ綔鍙伴〉闈?
│ ├── DashboardPage.tsx # 仪表盘页面
│ └── WorkspacePage.tsx # 工作台页面
├── components/
鈹? 鈹斺攢鈹€ Workspace/
鈹? 鈹溾攢鈹€ WorkModeSelector.tsx # 宸ヤ綔妯″紡閫夋嫨鍣?
鈹? 鈹溾攢鈹€ FullTextMode.tsx # 鍏ㄦ枃闃呰<EFBFBD>妯″紡
鈹? 鈹溾攢鈹€ DeepReadMode.tsx # 閫愮瘒绮捐<EFBFBD>妯″紡
鈹? 鈹溾攢鈹€ BatchMode.tsx # 鎵瑰<EFBFBD>鐞嗘ā寮?
鈹? 鈹斺攢鈹€ BatchModeComplete.tsx # 鎵瑰<EFBFBD>鐞嗗畬鏁村疄鐜?
│ └── Workspace/
├── WorkModeSelector.tsx # 工作模式选择器
├── FullTextMode.tsx # 全文阅读模式
├── DeepReadMode.tsx # 逐篇精读模式
├── BatchMode.tsx # 批处理模式
└── BatchModeComplete.tsx # 批处理完整实现
├── hooks/
鈹? 鈹斺攢鈹€ useWorkMode.ts # 宸ヤ綔妯″紡Hook
│ └── useWorkMode.ts # 工作模式Hook
├── types/
鈹? 鈹斺攢鈹€ index.ts # 绫诲瀷瀹氫箟
│ └── index.ts # 类型定义
└── styles/
鈹斺攢鈹€ workspace.css # <EFBFBD>畾涔夋牱寮?
└── workspace.css # 自定义样式
```
### 3. WorkspacePage布局设计
**鏈€缁堥噰鐢ㄧ殑甯冨眬**锛?
**最终采用的布局**
```
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?[杩斿洖] 鈹?鐭ヨ瘑搴撳悕 鈹?[闂<>瓟][璧勪骇] 鈹?璁剧疆 澶村儚 鈹?Header 56px
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?[宸ヤ綔妯″紡鈻糫 [鏂囨。鈻糫 宸插姞杞?x/y 绡?鈹?宸ヤ綔妯″紡鏍?40px
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? 鈹?
鈹? 鑱婂ぉ鍖哄煙锛堟渶澶у寲锛? 鈹?
鈹? 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
┌─────────────────────────────────────────────────┐
│ [返回] │ 知识库名 │ [问答][资产] │ 设置 头像 │ Header 56px
├─────────────────────────────────────────────────┤
│ [工作模式▼] [文档▼] 已加载 x/y 篇 │ 工作模式栏 40px
├─────────────────────────────────────────────────┤
聊天区域(最大化)
└─────────────────────────────────────────────────┘
```
**璁捐<EFBFBD>鐗圭偣**锛?
**设计特点**
- 单层Header整合导航和Tab切换
- 绱у噾鐨勫伐浣滄ā寮忛€夋嫨鏍?
- 鏈€澶у寲鐨勮亰澶╁尯鍩?
- 鍏ㄥ睆妯″紡锛坒ixed瀹氫綅锛?
- 紧凑的工作模式选择栏
- 最大化的聊天区域
- 全屏模式fixed定位
### 4. 3绉嶅伐浣滄ā寮?
### 4. 3种工作模式
| 模式 | 说明 | 后端API |
|------|------|---------|
| **全文阅读** | 加载全部文档AI具备全知视角 | `/api/v1/chat/stream` |
| **閫愮瘒绮捐<EFBFBD>** | 閫夋嫨1-5绡囨枃妗繁搴﹁В璇?| `/api/v1/chat/stream` |
| **鎵瑰<EFBFBD>鐞?* | 鎵归噺鎻愬彇淇℃伅锛岀敓鎴愮粨鏋勫寲琛ㄦ牸 | `/api/v1/batch-tasks` |
| **逐篇精读** | 选择1-5篇文档深度解读 | `/api/v1/chat/stream` |
| **批处理** | 批量提取信息,生成结构化表格 | `/api/v1/batch-tasks` |
### 5. Chat组件集成
**浣跨敤Ant Design X Chat缁勪欢**锛?
**使用Ant Design X Chat组件**
- 复用 `frontend-v2/src/shared/components/Chat/`
- 支持SSE流式响应
- 自定义消息渲染(引用格式化)
- 涓婁笅鏂囩<EFBFBD>鐞?
- 上下文管理
---
## 馃敡 鎶€鏈<E282AC>粏鑺?
## 🔧 技术细节
### API调用配置
```typescript
// knowledgeBaseApi.ts
const api = axios.create({
baseURL: `${API_BASE_URL}/api/v1/pkb`,
baseURL: `${API_BASE_URL}/api/v2/pkb`,
timeout: 30000,
});
@@ -135,20 +135,20 @@ const chatApi = axios.create({
});
```
### 鐘舵€佺<EFBFBD>鐞?
### 状态管理
使用Zustand管理全局状态
- 鐭ヨ瘑搴撳垪琛?
- 褰撳墠鐭ヨ瘑搴?
- 知识库列表
- 当前知识库
- 文档列表
- 工作模式
- 閫変腑鐨勬枃妗?
- 选中的文档
### 样式方案
- TailwindCSS作为主要样式方案
- Ant Design缁勪欢搴?
- <EFBFBD>畾涔塁SS澶勭悊鐗规畩鏍峰紡锛坵orkspace.css锛?
- Ant Design组件库
- 自定义CSS处理特殊样式workspace.css
---
@@ -156,32 +156,32 @@ const chatApi = axios.create({
### 1. 批处理执行功能待调试
- **问题**:批处理模式无法执行
- **鍘熷洜**锛氬悗绔疉PI `/api/v1/batch-tasks` 闇€瑕侀獙璇?
- **浼樺厛绾?*锛氿煍?楂?
- **原因**后端API `/api/v1/batch-tasks` 需要验证
- **优先级**:🔴 高
### 2. 鐭ヨ瘑璧勪骇椤甸潰瀵艰埅鏉?
### 2. 知识资产页面导航条
- **问题**:知识资产页面缺少导航条
- **褰卞搷**锛氱敤鎴锋棤娉曞湪璧勪骇椤甸潰杩涜<E69DA9>绛涢€夋搷浣?
- **浼樺厛绾?*锛氿煙?涓?
- **影响**:用户无法在资产页面进行筛选操作
- **优先级**:🟡 中
### 3. UI绮剧粏鍖?
- **<EFBFBD><EFBFBD>**锛氫笌鍘熷瀷鍥句粛鏈夊樊璺濓紝闇€瑕佽繘涓€姝ヤ紭鍖?
- **褰卞搷**锛氱敤鎴蜂綋楠?
- **浼樺厛绾?*锛氿煙?涓?
### 3. UI精细化
- **问题**:与原型图仍有差距,需要进一步优化
- **影响**:用户体验
- **优先级**:🟡 中
---
## 馃摑 涓嬩竴姝ヨ<E5A79D>鍒?
## 📝 下一步计划
### 高优先级
1. 调试批处理API执行功能
2. 瀹屽杽鐭ヨ瘑璧勪骇椤甸潰瀵艰埅鏉?
3. 寮曠敤鏍煎紡鍖栦紭鍖?
2. 完善知识资产页面导航条
3. 引用格式化优化
### 中优先级
4. UI绮剧粏鍖栵紙涓庡師鍨嬪浘瀵规瘮浼樺寲锛?
4. UI精细化(与原型图对比优化)
5. 错误处理完善
6. 鍔犺浇鐘舵€佷紭鍖?
6. 加载状态优化
### 低优先级
7. RAG检索模式实现后端待开发
@@ -194,40 +194,39 @@ const chatApi = axios.create({
| 文件 | 行数 | 说明 |
|------|------|------|
| WorkspacePage.tsx | ~513 | 工作台主页面 |
| DashboardPage.tsx | ~450 | <EFBFBD>〃鐩橀〉闈?|
| BatchModeComplete.tsx | ~511 | 鎵瑰<EFBFBD>鐞嗗畬鏁村疄鐜?|
| WorkModeSelector.tsx | ~200 | 宸ヤ綔妯″紡閫夋嫨鍣?|
| DashboardPage.tsx | ~450 | 仪表盘页面 |
| BatchModeComplete.tsx | ~511 | 批处理完整实现 |
| WorkModeSelector.tsx | ~200 | 工作模式选择器 |
| FullTextMode.tsx | ~150 | 全文阅读模式 |
| DeepReadMode.tsx | ~150 | 逐篇精读模式 |
| knowledgeBaseApi.ts | ~200 | API瀹㈡埛绔?|
| useKnowledgeBaseStore.ts | ~150 | 鐘舵€佺<EFBFBD>鐞?|
| **鎬昏<EFBFBD>** | **~2300琛?* | PKB鍓嶇<EFBFBD>妯″潡 |
| knowledgeBaseApi.ts | ~200 | API客户端 |
| useKnowledgeBaseStore.ts | ~150 | 状态管理 |
| **总计** | **~2300行** | PKB前端模块 |
---
## 🎯 总结
今天完成了PKB模块的核心前端框架搭建实现了
- 鉁?鍚庣<E98D9A>妯″潡杩佺Щ鍜岃矾鐢辨敞鍐?
- 鉁?鍓嶇<E98D93>V3璁捐<E79281>鍩虹<E98DA9>瀹炵幇
- 鉁?3绉嶅伐浣滄ā寮忔<E5AFAE>鏋?
- 鉁?Chat缁勪欢闆嗘垚
- 鉁?鍝嶅簲寮忓竷灞€
- ✅ 后端模块迁移和路由注册
- ✅ 前端V3设计基础实现
- ✅ 3种工作模式框架
- Chat组件集成
- ✅ 响应式布局
铏界劧杩樻湁涓€浜涘姛鑳介渶瑕佽皟璇曞拰浼樺寲锛屼絾鏁翠綋鏋舵瀯宸茬粡鎼<EFBFBD>缓瀹屾垚锛屽彲浠ヤ綔涓哄悗缁<EFBFBD>紑鍙戠殑鍩虹<EFBFBD>銆?
虽然还有一些功能需要调试和优化,但整体架构已经搭建完成,可以作为后续开发的基础。
---
**Git鎻愪氦**锛?
**Git提交**
```
5a17d09 feat(pkb): Complete PKB module frontend migration with V3 design
```
---
**鏂囨。缂栧啓鏃堕棿**锛?026-01-07
**涓嬫<EFBFBD>鏇存柊**锛氭壒澶勭悊鍔熻兘璋冭瘯瀹屾垚鍚?
**文档编写时间**2026-01-07
**下次更新**:批处理功能调试完成后