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

@@ -2,9 +2,9 @@
> **文档类型**: 技术债务
> **创建日期**: 2025-12-06
> **浼樺厛绾?*: P2锛堜腑鏈熶紭鍖栵級
> **棰勮<EFBFBD>宸ユ椂**: 2-3澶?
> **褰卞搷妯″潡**: AIA銆丳KB銆乀ool C銆佹湭鏉<E6B9AD>I鐭ヨ瘑搴撴ā鍧?
> **优先级**: P2中期优化
> **预计工时**: 2-3
> **影响模块**: AIA、PKB、Tool C、未来AI知识库模块
---
@@ -12,37 +12,37 @@
### 当前现状
**鍚庣<EFBFBD>瀵硅瘽鑳藉姏鍒嗗竷**锛?
**后端对话能力分布**
```
鉁?閫氱敤鑳藉姏灞傦紙common/锛?
鈹溾攢鈹€ llm/adapters/ 鈫?LLM閫傞厤鍣<EFBFBD>紙瀹屾暣锛?
鈹? 鈹溾攢鈹€ LLMFactory.ts 鈫?缁熶竴宸ュ巶绫?
鈹? 鈹溾攢鈹€ DeepSeekAdapter.ts
鈹? 鈹溾攢鈹€ QwenAdapter.ts
鈹? 鈹溾攢鈹€ GPT5Adapter.ts
鈹? 鈹斺攢鈹€ ClaudeAdapter.ts
鈹溾攢鈹€ rag/ 鈫?RAG妫€绱<EFBFBD>紙瀹屾暣锛?
鈹? 鈹斺攢鈹€ DifyClient.ts
鈹斺攢鈹€ storage/, logging/, cache/ 鈫?鍩虹<E98DA9>璁炬柦锛堝畬鏁达級
✅ 通用能力层(common/
├── llm/adapters/ LLM适配器(完整)
│ ├── LLMFactory.ts ← 统一工厂类
│ ├── DeepSeekAdapter.ts
│ ├── QwenAdapter.ts
│ ├── GPT5Adapter.ts
│ └── ClaudeAdapter.ts
├── rag/ RAG检索(完整)
│ └── DifyClient.ts
└── storage/, logging/, cache/ ← 基础设施(完整)
鈿狅笍 涓氬姟灞傦紙legacy/锛?
⚠️ 业务层(legacy/
└── services/
鈹斺攢鈹€ conversationService.ts 鈫?瀵硅瘽绠$悊閫昏緫锛?25琛岋級
└── conversationService.ts ← 对话管理逻辑625行
├── 创建对话
鈹溾攢鈹€ 鍙戦€佹秷鎭?
├── 发送消息
├── 流式输出
鈹溾攢鈹€ 涓婁笅鏂囩粍瑁?
├── 上下文组装
├── 历史管理
鈹斺攢鈹€ 鐭ヨ瘑搴撴<E690B4>绱㈤泦鎴?
└── 知识库检索集成
```
**鍓嶇<EFBFBD>缁勪欢鍒嗗竷**锛?
**前端组件分布**
```
鉂?缂哄皯閫氱敤瀵硅瘽缁勪欢
❌ 缺少通用对话组件
各模块重复实现:
├── AIA模块 - 自己实现对话UI
├── PKB模块 - 自己实现对话UI
鈹斺攢鈹€ Tool C妯″潡 - 鑷<>繁瀹炵幇瀵硅瘽UI锛圖ay 3锛?
└── Tool C模块 - 自己实现对话UIDay 3
```
---
@@ -51,25 +51,25 @@
### 代码重复
| 鍔熻兘 | 褰撳墠鐘舵€?| 閲嶅<E996B2>搴?|
| 功能 | 当前状态 | 重复度 |
|------|---------|--------|
| **LLM璋冪敤** | 鉁?宸叉娊鍙栵紙common/llm锛?| 0% |
| **LLM调用** | ✅ 已抽取(common/llm | 0% |
| **对话管理** | ⚠️ 未抽取legacy中 | 80% |
| **消息存储** | ⚠️ 各模块独立表 | 60% |
| **涓婁笅鏂囩粍瑁?* | 鈿狅笍 鍚勬ā鍧楅噸澶嶅疄鐜?| 70% |
| **娴佸紡杈撳嚭** | 鈿狅笍 鍚勬ā鍧楅噸澶嶅疄鐜?| 80% |
| **鍓嶇<EFBFBD>瀵硅瘽UI** | 鉂?瀹屽叏鏈<E58F8F>娊鍙?| 90% |
| **上下文组装** | ⚠️ 各模块重复实现 | 70% |
| **流式输出** | ⚠️ 各模块重复实现 | 80% |
| **前端对话UI** | ❌ 完全未抽取 | 90% |
### 影响范围
**鐜版湁妯″潡**锛?
- AIA锛圓I鏅鸿兘闂<EFBFBD>瓟锛? 浣跨敤legacy/conversationService
- PKB锛堜釜浜虹煡璇嗗簱锛? 浣跨敤legacy/conversationService
**现有模块**
- AIAAI智能问答- 使用legacy/conversationService
- PKB(个人知识库)- 使用legacy/conversationService
- Tool C数据清洗- Day 3自己实现~150行重复代码
**<EFBFBD>潵妯″潡**锛?
- AI鐭ヨ瘑搴撴ā鍧?- 闇€瑕侀噸澶嶅疄鐜?
- 鍏朵粬AI瀵硅瘽鍦烘櫙 - 闇€瑕侀噸澶嶅疄鐜?
**未来模块**
- AI知识库模块 - 需要重复实现
- 其他AI对话场景 - 需要重复实现
---
@@ -77,21 +77,21 @@
### 方案:抽取通用对话服务
#### <EFBFBD>竴闃舵<EFBFBD>锛氬悗绔<EFBFBD>湇鍔℃娊鍙?
#### 第一阶段:后端服务抽取
**鍒涘缓閫氱敤瀵硅瘽鏈嶅姟**锛?
**创建通用对话服务**
```typescript
// backend/src/common/conversation/ConversationService.ts
export class ConversationService {
/**
* 通用对话接口
* <EFBFBD>寔澶氱<EFBFBD>鍦烘櫙锛欰IA銆丳KB銆乀ool C绛?
* 支持多种场景AIA、PKB、Tool C
*/
async chat(config: ChatConfig): Promise<ChatResponse> {
// 1. 鏋勫缓娑堟伅涓婁笅鏂?
// 1. 构建消息上下文
const messages = await this.buildContext(config);
// 2. 璋冪敤LLM锛堝<EFBFBD>鐢↙LMFactory锛?
// 2. 调用LLM复用LLMFactory
const llm = LLMFactory.createAdapter(config.modelType);
const response = await llm.chat(messages, config.options);
@@ -118,10 +118,10 @@ export class ConversationService {
/**
* 获取对话历史
* <EFBFBD>寔澶氱<EFBFBD>瀛樺偍鏂瑰紡锛堢粺涓€鎺ュ彛锛屼笉鍚岃〃锛?
* 支持多种存储方式(统一接口,不同表)
*/
async getHistory(conversationId: string, options?: HistoryOptions) {
// 鏍规嵁conversationType<EFBFBD>敱鍒颁笉鍚岀殑琛?
// 根据conversationType路由到不同的表
const adapter = this.getStorageAdapter(options.conversationType);
return await adapter.getHistory(conversationId, options);
}
@@ -136,8 +136,8 @@ export class ConversationService {
}
/**
* 鏋勫缓涓婁笅鏂?
* <EFBFBD>寔锛歋ystem Prompt + 鍘嗗彶娑堟伅 + 褰撳墠娑堟伅 + RAG妫€绱?
* 构建上下文
* 支持System Prompt + 历史消息 + 当前消息 + RAG检索
*/
private async buildContext(config: ChatConfig): Promise<Message[]> {
const messages: Message[] = [];
@@ -189,7 +189,7 @@ interface ChatConfig {
}
```
**瀛樺偍閫傞厤鍣?*锛堟敮鎸佷笉鍚屾ā鍧楃殑涓嶅悓琛<E68293>級锛?
**存储适配器**(支持不同模块的不同表):
```typescript
// backend/src/common/conversation/adapters/StorageAdapter.ts
interface ConversationStorageAdapter {
@@ -197,7 +197,7 @@ interface ConversationStorageAdapter {
saveMessage(conversationId: string, userMsg: string, aiResponse: any): Promise<void>;
}
// AIA/PKB浣跨敤閫氱敤琛?
// AIA/PKB使用通用表
class GeneralStorageAdapter implements ConversationStorageAdapter {
async getHistory(conversationId: string) {
return await prisma.generalMessage.findMany({
@@ -208,7 +208,7 @@ class GeneralStorageAdapter implements ConversationStorageAdapter {
}
}
// Tool C浣跨敤鐙<EFBFBD>珛琛?
// Tool C使用独立表
class ToolCStorageAdapter implements ConversationStorageAdapter {
async getHistory(conversationId: string) {
return await prisma.dcToolCAiHistory.findMany({
@@ -222,16 +222,16 @@ class ToolCStorageAdapter implements ConversationStorageAdapter {
---
#### <EFBFBD>簩闃舵<EFBFBD>锛氬墠绔<EFBFBD>粍浠舵娊鍙?
#### 第二阶段:前端组件抽取
**鍒涘缓閫氱敤瀵硅瘽缁勪欢搴?*锛?
**创建通用对话组件库**
```tsx
// frontend-v2/src/shared/components/Chat/
ChatContainer.tsx // 瀵硅瘽瀹瑰櫒锛堝竷灞€锛?
ChatContainer.tsx // 对话容器(布局)
MessageList.tsx // 消息列表(虚拟滚动)
MessageItem.tsx // 鍗曟潯娑堟伅锛堢敤鎴?AI锛?
MessageInput.tsx // 杈撳叆妗嗭紙鏀<EFBFBD>寔澶氳<EFBFBD>銆佸揩鎹烽敭锛?
StreamingMessage.tsx // 娴佸紡娓叉煋锛堟墦瀛楁満鏁堟灉锛?
MessageItem.tsx // 单条消息(用户/AI
MessageInput.tsx // 输入框(支持多行、快捷键)
StreamingMessage.tsx // 流式渲染(打字机效果)
CitationBadge.tsx // 引用标记
LoadingIndicator.tsx // 加载动画
index.ts
@@ -249,42 +249,42 @@ import { ChatContainer } from '@/shared/components/Chat';
/>
```
**缁勪欢鐗规€?*锛?
- 鉁?鏀<>寔娴佸紡/闈炴祦寮忔覆鏌?
- 鉁?鏀<>寔寮曠敤璺宠浆
- 鉁?鏀<>寔鍘嗗彶娑堟伅鍔犺浇
- 鉁?鏀<>Markdown娓叉煋
- 鉁?鏀<>寔浠爜楂樹寒
- 鉁?鍝嶅簲寮忓竷灞€
**组件特性**
- ✅ 支持流式/非流式渲染
- ✅ 支持引用跳转
- ✅ 支持历史消息加载
- ✅ 支持Markdown渲染
- ✅ 支持代码高亮
- ✅ 响应式布局
---
## 馃搳 鏀归€犲墠鍚庡<E98D9A>姣?
## 📊 改造前后对比
### 爜閲忓<EFBFBD>姣?
### 代码量对比
| 模块 | 改造前 | 改造后 | 减少 |
|------|--------|--------|------|
| **后端** |
| AIA瀵硅瘽閫昏緫 | 200琛?| 50琛岋紙璋冪敤閫氱敤鏈嶅姟锛?| -75% |
| PKB瀵硅瘽閫昏緫 | 180琛?| 50琛?| -72% |
| Tool C瀵硅瘽閫昏緫 | 150琛?| 50琛?| -67% |
| 閫氱敤鏈嶅姟 | 0琛?| 300琛岋紙鏂板缓锛?| +300琛?|
| **鎬昏<EFBFBD>** | 530琛?| 450琛?| **-15%** |
| AIA对话逻辑 | 200| 50行(调用通用服务) | -75% |
| PKB对话逻辑 | 180| 50| -72% |
| Tool C对话逻辑 | 150| 50| -67% |
| 通用服务 | 0| 300行(新建) | +300|
| **总计** | 530| 450| **-15%** |
| **前端** |
| 鍚勬ā鍧楀<EFBFBD>璇漊I | 600琛屆? | 200琛屆?锛堣皟鐢ㄩ€氱敤缁勪欢锛?| -67% |
| 閫氱敤缁勪欢 | 0琛?| 500琛岋紙鏂板缓锛?| +500琛?|
| **鎬昏<EFBFBD>** | 1800琛?| 1100琛?| **-39%** |
| **鍏ㄩ儴鍚堣<EFBFBD>** | 2330琛?| 1550琛?| **-33%** |
| 各模块对话UI | 600×3 | 200×3调用通用组件 | -67% |
| 通用组件 | 0| 500行(新建) | +500|
| **总计** | 1800| 1100| **-39%** |
| **全部合计** | 2330| 1550| **-33%** |
### 质量提升
| 指标 | 改造前 | 改造后 | 提升 |
|------|--------|--------|------|
| 浠g爜澶嶇敤鐜?| 20% | 80% | +300% |
| 缁熶竴浜や簰浣撻獙 | 鉂?| 鉁?| 100% |
| <EFBFBD>潵鎵╁睍鎴愭湰 | 楂橈紙姣忔<E5A7A3>閲嶅<E996B2>锛?| 浣庯紙鐩存帴澶嶇敤锛?| -80% |
| 缁存姢鎴愭湰 | 楂橈紙澶氬<E6BEB6><EFBFBD>敼锛?| 浣庯紙鍗曠偣淇<E581A3>敼锛?| -70% |
| 代码复用率 | 20% | 80% | +300% |
| 统一交互体验 | ❌ | ✅ | 100% |
| 未来扩展成本 | 高(每次重复) | 低(直接复用) | -80% |
| 维护成本 | 高(多处修改) | 低(单点修改) | -70% |
---
@@ -292,25 +292,25 @@ import { ChatContainer } from '@/shared/components/Chat';
### 阶段1后端服务抽取1.5天)
**Day 1涓婂崍锛氳<EFBFBD>璁?*
**Day 1上午:设计**
- [ ] 设计ConversationService接口
- [ ] 设计StorageAdapter接口
- [ ] 设计ChatConfig配置结构
**Day 1涓嬪崍锛氬疄鐜版牳蹇冩湇鍔?*
**Day 1下午:实现核心服务**
- [ ] 实现ConversationService核心逻辑
- [ ] 实现GeneralStorageAdapter
- [ ] 实现ToolCStorageAdapter
**Day 2涓婂崍锛氳縼绉荤幇鏈夋ā鍧?*
- [ ] AIA妯″潡鏀归€狅紙浣跨敤閫氱敤鏈嶅姟锛?
- [ ] PKB妯″潡鏀归€狅紙浣跨敤閫氱敤鏈嶅姟锛?
- [ ] Tool C妯″潡鏀归€狅紙浣跨敤閫氱敤鏈嶅姟锛?
**Day 2上午:迁移现有模块**
- [ ] AIA模块改造(使用通用服务)
- [ ] PKB模块改造(使用通用服务)
- [ ] Tool C模块改造(使用通用服务)
**Day 2涓嬪崍锛氭祴璇?*
**Day 2下午:测试**
- [ ] 单元测试
- [ ] 集成测试
- [ ] 鍥炲綊娴嬭瘯锛堢‘淇濆師鍔熻兘姝e父锛?
- [ ] 回归测试(确保原功能正常)
---
@@ -318,21 +318,21 @@ import { ChatContainer } from '@/shared/components/Chat';
**Day 3上午设计与实现**
- [ ] 设计ChatContainer API
- [ ] 瀹炵幇鏍稿績缁勪欢锛?涓<>
- [ ] 实现核心组件6个
- [ ] 样式统一
**Day 3下午迁移与测试**
- [ ] AIA妯″潡鍓嶇<EFBFBD>鏀归€?
- [ ] PKB妯″潡鍓嶇<EFBFBD>鏀归€?
- [ ] Tool C妯″潡鍓嶇<EFBFBD>鏀归€?
- [ ] AIA模块前端改造
- [ ] PKB模块前端改造
- [ ] Tool C模块前端改造
- [ ] UI测试
---
### 闃舵<EFBFBD>3锛氭枃妗笌鍩硅<EFBFBD>锛?.5澶╋級
### 阶段3文档与培训0.5天)
- [ ] 编写使用文档
- [ ] 缂栧啓鏈€浣冲疄璺?
- [ ] 编写最佳实践
- [ ] 团队培训
---
@@ -345,7 +345,7 @@ import { ChatContainer } from '@/shared/components/Chat';
- [ ] Tool C模块对话功能正常
- [ ] 流式输出正常
- [ ] 历史消息加载正常
- [ ] RAG妫€绱㈤泦鎴愭<EFBFBD>甯?
- [ ] RAG检索集成正常
### 代码质量
- [ ] 代码复用率≥80%
@@ -354,8 +354,8 @@ import { ChatContainer } from '@/shared/components/Chat';
- [ ] 无ESLint警告
### 用户体验
- [ ] 瀵硅瘽浜や簰娴佺晠锛堝搷搴?2绉掞級
- [ ] 娴佸紡杈撳嚭娴佺晠锛堟棤鍗¢】锛?
- [ ] 对话交互流畅(响应<2秒
- [ ] 流式输出流畅(无卡顿)
- [ ] UI统一美观
- [ ] 移动端适配良好
@@ -363,92 +363,91 @@ import { ChatContainer } from '@/shared/components/Chat';
## 💰 收益分析
### <EFBFBD>湡鏀剁泭锛?涓<>湀鍐咃級
### 短期收益1个月内
1. **代码质量提升**
- 减少重复代码33%
- 提升代码复用率至80%
- 降低维护成本70%
2. **寮€鍙戞晥鐜囨彁鍗?*
- 鏂版ā鍧楀<EFBFBD>璇濆姛鑳藉紑鍙戞椂闂达細浠?澶┾啋0.5澶╋紙-75%锛?
- Bug<EFBFBD><EFBFBD>鏁堢巼锛氬崟鐐逛慨鏀癸紝褰卞搷鍏ㄥ眬锛?200%锛?
2. **开发效率提升**
- 新模块对话功能开发时间从2天→0.5天(-75%
- Bug修复效率:单点修改,影响全局(+200%
3. **用户体验统一**
- 统一交互模式
- 统一视觉风格
- 统一性能标准
### 闀挎湡鏀剁泭锛?-6涓<36>湀锛?
### 长期收益3-6个月
1. **支持未来模块**
- AI鐭ヨ瘑搴撴ā鍧楋細鐩存帴澶嶇敤锛?棰濆<E6A3B0>寮€鍙?
- 鍏朵粬AI瀵硅瘽鍦烘櫙锛氬揩閫熷疄鐜?
- AI知识库模块直接复用0额外开发
- 其他AI对话场景快速实现
2. **鎶€鏈<EFBFBD>灦鏋勪紭鍖?*
2. **技术架构优化**
- 真正实现分层架构(业务层→通用层)
- 涓哄井鏈嶅姟鎷嗗垎鍋氬噯澶?
- 为微服务拆分做准备
3. **鍟嗕笟浠峰€?*
- 妯″潡鐙<EFBFBD>珛閮ㄧ讲鏇村<EFBFBD>鏄?
- 妯″潡鐙<EFBFBD>珛鍞<EFBFBD>崠鏇寸伒娲?
3. **商业价值**
- 模块独立部署更容易
- 模块独立售卖更灵活
- 客户定制成本降低
---
## 鈿狅笍 椋庨櫓涓庡簲瀵?
## ⚠️ 风险与应对
### 椋庨櫓1锛氬洖褰掓祴璇曞伐浣滈噺澶?
**搴斿<EFBFBD>**锛?
- 浼樺厛瀹炵幇鑷<EFBFBD>姩鍖栨祴璇?
### 风险1回归测试工作量大
**应对**
- 优先实现自动化测试
- 分模块逐步迁移
- 淇濈暀鍘熶唬鐮佷綔涓哄<EFBFBD>浠?
- 保留原代码作为备份
### 椋庨櫓2锛氬巻鍙叉暟鎹<EFBFBD>縼绉?
**搴斿<EFBFBD>**锛?
- 涓嶉渶瑕佽縼绉绘暟鎹?
### 风险2历史数据迁移
**应对**
- 不需要迁移数据
- 只迁移代码逻辑
- 各模块保留独立表
### 风险3前端组件复杂度
**搴斿<EFBFBD>**锛?
- 閲囩敤娓愯繘寮忛噸鏋?
- 鍏堟娊鍙栨牳蹇冪粍浠?
**应对**
- 采用渐进式重构
- 先抽取核心组件
- 后续迭代优化
---
## 📅 建议执行时间
**鎺ㄨ崘鏃堕棿绐楀彛**锛?
- **閫夐」1**锛歍ool C MVP瀹屾垚鍚庯紙Day 10-13锛?
- **閫夐」2**锛氭墍鏈塂C妯″潡瀹屾垚鍚庯紙Week 8-9锛?
- **閫夐」3**锛欰I鐭ヨ瘑搴撴ā鍧楀惎鍔ㄥ墠锛圦uarter 2锛?
**推荐时间窗口**
- **选项1**Tool C MVP完成后(Day 10-13
- **选项2**所有DC模块完成后Week 8-9
- **选项3**AI知识库模块启动前Quarter 2
**褰撳墠鍐崇瓥**锛氬欢鍚庤嚦Tool C MVP瀹屾垚鍚?
**当前决策**:延后至Tool C MVP完成后
---
## 🔗 相关文档
- [系统架构分层设计](../../00-系统总体设计/01-系统架构分层设计.md)
- [浜戝師鐢熷紑鍙戣<EFBFBD>鑼僝(../../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
- [Tool C Day 3寮€鍙戣<EFBFBD>鍒抅(../../03-涓氬姟妯″潡/DC-鏁版嵁娓呮礂鏁寸悊/04-寮€鍙戣<E98D99>鍒?宸ュ叿C_Day3寮€鍙戣<E98D99>鍒?md)
- [云原生开发规范](../../04-开发规范/08-云原生开发规范.md)
- [Tool C Day 3开发计划](../../03-业务模块/DC-数据清洗整理/04-开发计划/工具C_Day3开发计划.md)
---
## 📝 更新记录
| 鏃ユ湡 | 鐗堟湰 | 鏇存柊鍐呭<E98D90> | 鏇存柊浜?|
| 日期 | 版本 | 更新内容 | 更新人 |
|------|------|---------|--------|
| 2025-12-06 | V1.0 | 初始创建 | AI Assistant |
---
**鏂囨。鐘舵€?*: 鉁?宸插垱寤?
**浼樺厛绾?*: P2锛堜腑鏈熶紭鍖栵級
**涓嬩竴姝?*: 瀹屾垚Tool C Day 3 MVP鍚庨噸鏂拌瘎浼?
**文档状态**: ✅ 已创建
**优先级**: P2中期优化
**下一步**: 完成Tool C Day 3 MVP后重新评估