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:
@@ -1,122 +1,204 @@
|
||||
# 撌亙<EFBFBD>C MVP撘<EFBFBD><EFBFBD>?- To-do List
|
||||
# 工具C MVP开发 - To-do List
|
||||
|
||||
> **文档版本**:v1.4
|
||||
> **<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>**嚗?025-12-06
|
||||
> **<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*嚗?025-12-10
|
||||
> **憸<EFBFBD>恣撌交<EFBFBD>**嚗?<3F>剁<EFBFBD>15銝芸極雿𨀣𠯫嚗?
|
||||
> **摰鮋<EFBFBD>餈𥕦漲**嚗阳eek 1-2摰峕<E691B0>嚗<EFBFBD><E59A97><EFBFBD>賣<EFBFBD><E8B3A3>娑hase 1-2摰峕<E691B0><E5B395>?+ NA憭<41><E686AD>隡睃<E99AA1><E79D83>?+ Pivot<6F>烾◇摨譍<E691A8><E8AD8D>砽<EFBFBD>
|
||||
> **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>獢?*嚗靀撌亙<E6928C>C_MVP撘<50><E69298>𤏸恣<F0A48FB8>𦚱V1.0.md](./撌亙<EFBFBD>C_MVP撘<EFBFBD><EFBFBD>𤏸恣<EFBFBD>𦚱V1.0.md), [撌亙<EFBFBD>C_<EFBFBD>蠘<EFBFBD><EFBFBD>厰僼撘<EFBFBD><EFBFBD>𤏸恣<EFBFBD>𦚱V1.0.md](./撌亙<E6928C>C_<43>蠘<EFBFBD><E8A098>厰僼撘<E583BC><E69298>𤏸恣<F0A48FB8>𦚱V1.0.md)
|
||||
> **创建日期**:2025-12-06
|
||||
> **最后更新**:2025-12-10
|
||||
> **预计工期**:3周(15个工作日)
|
||||
> **实际进度**:Week 1-2完成,功能按钮Phase 1-2完成✅ + NA处理优化✅ + Pivot列顺序优化✅
|
||||
> **参考文档**:[工具C_MVP开发计划_V1.0.md](./工具C_MVP开发计划_V1.0.md), [工具C_功能按钮开发计划_V1.0.md](./工具C_功能按钮开发计划_V1.0.md)
|
||||
|
||||
---
|
||||
|
||||
## 📊 整体进度概览
|
||||
|
||||
| <EFBFBD>嗆挾 | 隞餃𦛚<E9A483>?| 撌脣<E6928C><E884A3>?| 餈𥡝<E9A488>銝?| 敺<><E695BA>憪?| 摰峕<E691B0><E5B395>?|
|
||||
| 阶段 | 任务数 | 已完成 | 进行中 | 待开始 | 完成率 |
|
||||
|------|-------|-------|-------|-------|--------|
|
||||
| **Week 1: <EFBFBD>箇<EFBFBD><EFBFBD>嗆<EFBFBD>** | 12 | 12 | 0 | 0 | 100% <EFBFBD>?|
|
||||
| **Week 1: 基础架构** | 12 | 12 | 0 | 0 | 100% ✅ |
|
||||
| **Week 2: 核心功能** | 10 | 0 | 0 | 10 | 0% |
|
||||
| **Week 3: 测试优化** | 8 | 0 | 0 | 8 | 0% |
|
||||
| **总计** | **30** | **12** | **0** | **18** | **40%** |
|
||||
|
||||
**<EFBFBD><EFBFBD><EFBFBD>唳凒<EFBFBD>?*嚗?025-12-08 16:00 **<EFBFBD>蠘<EFBFBD><EFBFBD>厰僼Phase 1-2摰峕<EFBFBD>** + 7銝芸<EFBFBD><EFBFBD>賭<EFBFBD>蝥?
|
||||
---
|
||||
|
||||
## <20><> <20><><EFBFBD>啗<EFBFBD>撅𤏪<E69285>2025-12-10嚗?
|
||||
### <20>?<3F>蠘<EFBFBD><E8A098>厰僼撘<E583BC><E69298>𡢅<EFBFBD>Phase 1-2嚗?
|
||||
**7銝芣瓲敹<E793B2><E695B9><EFBFBD>賢歇摰峕<E691B0>**嚗?1. <20>?擃条漣蝑偦<E89D91>匧膥嚗<E886A5><E59A97><EFBFBD>∩辣AND/OR + 銝箇征/銝滢蛹蝛箸辺隞塚<E99A9E>
|
||||
2. <20>?<3F>啣<EFBFBD>潭<EFBFBD>撠<EFBFBD><E692A0><EFBFBD>滨<EFBFBD><E6BBA8>?+ NA憭<41><E686AD><EFBFBD>厰★嚗帋<E59A97><E5B88B>?<3F>惩<EFBFBD>/<2F>𣳇膄嚗?3. <20>?<3F><><EFBFBD><EFBFBD><EFBFBD>掩<EFBFBD>㗛<EFBFBD>嚗<EFBFBD><E59A97>摰?蝑厰<E89D91>/<2F>芸<EFBFBD>銋匧<E98A8B><E58CA7>?+ NA憭<41><E686AD><EFBFBD>厰★嚗?4. <20>?<3F>∩辣<E288A9><E8BEA3><EFBFBD><EFBFBD>梹<EFBFBD>IF-THEN-ELSE + 銝箇征/銝滢蛹蝛箸辺隞塚<E99A9E>
|
||||
5. <20>?<3F>𣳇膄蝻箏仃<E7AE8F>潘<EFBFBD><E6BD98>㕑<EFBFBD>/<2F>梹<EFBFBD><E6A2B9><EFBFBD><EFBFBD>潭綉<E6BDAD>塚<EFBFBD>
|
||||
6. <20>?霈∠<E99C88><E288A0>梹<EFBFBD><E6A2B9>寞<EFBFBD>B嚗𡁜<E59A97><F0A1819C>典<EFBFBD><E585B8>齿<EFBFBD>撠<EFBFBD><E692A0><EFBFBD>舀<EFBFBD><E88880>寞<EFBFBD>摮㛖泵<E39B96>堒<EFBFBD>嚗?7. <20>?Pivot頧祆揢嚗<E68FA2>鵭銵兩<E98AB5>摰質” + 靽萘<E99DBD><E89098>芷<EFBFBD>匧<EFBFBD> + <20>笔<EFBFBD><E7AC94>烾◇摨𧶏<E691A8>
|
||||
|
||||
**<EFBFBD><EFBFBD><EFBFBD>舀沲<EFBFBD>?*嚗?- <20>?憸<><E686B8>Python<6F>賣㺭<E8B3A3>嗆<EFBFBD>嚗<EFBFBD>迅摰𠾼<E691B0><F0A0BEBC><EFBFBD><EFBFBD>具<EFBFBD><E585B7><EFBFBD><EFBFBD>扯<EFBFBD>嚗?- <20>?7銝枉ython operations璅∪<E79285>
|
||||
- <20>?7銝服PI蝡舐<E89DA1>嚗Ǒ/api/operations/*`嚗?- <20>?摰峕㟲<E5B395><E39FB2><EFBFBD><EFBFBD>𡒊垢<F0A1928A><E59EA2><EFBFBD>
|
||||
- <20>?<3F>见末<E8A781><E69CAB>I鈭支<E988AD>嚗㇄ialog + 摰墧𧒄撉諹<E69289>嚗?
|
||||
### <20>?NA憭<41><E686AD>隡睃<E99AA1>嚗?025-12-09~10嚗?
|
||||
**4銝芸<E98A9D><E88AB8>賣𣈲<E8B3A3><F0A388B2>征<EFBFBD>澆<EFBFBD><E6BE86>?*嚗?1. <20>?<3F>啣<EFBFBD>潭<EFBFBD>撠?- NA憭<41><E686AD><EFBFBD>厰★嚗<E29885><E59A97><EFBFBD><EFBFBD>A/<2F>惩<EFBFBD>銝箸<E98A9D>摰𡁜<E691B0>?<3F>𣳇膄銵䕘<E98AB5>
|
||||
2. <20>?擃条漣蝑偦<E89D91>?- 銝箇征/銝滢蛹蝛箸辺隞塚<E99A9E><E5A19A><EFBFBD><EFBFBD><EFBFBD>舀<EFBFBD>嚗?3. <20>?<3F><><EFBFBD><EFBFBD><EFBFBD>掩<EFBFBD>㗛<EFBFBD> - NA憭<41><E686AD><EFBFBD>厰★嚗<E29885><E59A97><EFBFBD><EFBFBD>蛹蝛?<3F><>扇銝?蝻箏仃"/<2F><><EFBFBD><EFBFBD>唳<EFBFBD>摰𡁶<E691B0>嚗?4. <20>?<3F>∩辣<E288A9><E8BEA3><EFBFBD><EFBFBD>?- 銝箇征/銝滢蛹蝛箄<E89D9B>蝞㛖泵
|
||||
|
||||
### <20>?Pivot<6F>烾◇摨譍<E691A8><E8AD8D>吔<EFBFBD>2025-12-10嚗?
|
||||
- <20>?靽萘<E99DBD><E89098>芷<EFBFBD>㗇𥋘<E39787><F0A58B98><EFBFBD>嚗<EFBFBD>虾<EFBFBD>匧<EFBFBD><E58CA7>踝<EFBFBD>
|
||||
- <20>?<3F>芷<EFBFBD>匧<EFBFBD><E58CA7>𡁜<EFBFBD><F0A1819C>孵<EFBFBD>嚗<EFBFBD><E59A97>蝚砌<E89D9A>銝芸<E98A9D>?<3F>碶<EFBFBD><E7A2B6>?<3F>硋<EFBFBD><E7A18B>潘<EFBFBD>
|
||||
- <20>?靽脲<E99DBD><E884B2>笔<EFBFBD><E7AC94>烾◇摨𧶏<E691A8>頧祆揢<E7A586>𤾸<EFBFBD><F0A4BEB8>匧<EFBFBD><E58CA7><EFBFBD>辣憿箏<E686BF><E7AE8F>鍦<EFBFBD>嚗?- <20>?<3F>讛<EFBFBD><E8AE9B>堒<EFBFBD>潭<EFBFBD>擐𡝗活<F0A19D97>箇緵憿箏<E686BF><E7AE8F>鍦<EFBFBD>
|
||||
|
||||
### <20>?UX隡睃<E99AA1>嚗?025-12-09嚗?
|
||||
- <20>?<3F>堒仍tooltip嚗<70><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨀣遬蝷箏<E89DB7><E7AE8F>游<EFBFBD><E6B8B8>㵪<EFBFBD>
|
||||
- <20>?50銵屸<E98AB5>閫<EFBFBD><E996AB>蝷箏虾<E7AE8F>喲𡡒
|
||||
- <20>?憿菟𢒰皛𡁜𢆡<F0A1819C>∩<EFBFBD><E288A9>吔<EFBFBD><E59094><EFBFBD><EFBFBD>皛𡁜𢆡嚗峕<E59A97><E5B395>湧△皛𡁜𢆡嚗?
|
||||
### <20>?霈∠<E99C88><E288A0>埈䲮獢㇂摰墧鴌嚗?025-12-09嚗?
|
||||
- <20>?<3F>滨垢摰匧<E691B0><E58CA7>堒<EFBFBD><E5A092>惩<EFBFBD>嚗Ếol_0, col_1...嚗?- <20>?<3F>𡒊垢columnMapping摮睃<E691AE><E79D83>䔶<EFBFBD><E494B6>?- <20>?Python蝡臭蝙<E887AD>牢olumnMapping霈∠<E99C88>嚗<EFBFBD>𣈲<EFBFBD><F0A388B2>鸌畾𠰴<E795BE>蝚血<E89D9A><E8A180>㵪<EFBFBD>
|
||||
|
||||
**<EFBFBD>啣<EFBFBD><EFBFBD>蠘<EFBFBD>嚗?025-12-10銝见<E98A9D>嚗?*嚗?- <20>?蝻箏仃<E7AE8F>澆‵銵伐<E98AB5>6蝘齿䲮瘜𤏪<E7989C><F0A48FAA><EFBFBD><EFBFBD>?銝凋<E98A9D><E5878B>?隡埈㺭/<2F>箏<EFBFBD><E7AE8F>?<3F>滚<EFBFBD>憛怠<E6869B>/<2F>𤾸<EFBFBD>憛怠<E6869B>嚗? 撌脣<E6928C><E884A3>?- <20>银 MICE憭𡁻<E686AD><F0A181BB>坿‘ - 撌脤<E6928C><E884A4>琜<EFBFBD>DataFrame shape<70>桅<EFBFBD>敺<EFBFBD><E695BA>霂?- <20>?<3F>芸𢆡蝎曉漲璉<E6BCB2>瘚?- 憛怨‘<E680A8>潸䌊<E6BDB8>典龪<E585B8>滚<EFBFBD>憪𧢲㺭<F0A7A2B2>桀<EFBFBD><E6A180>唬<EFBFBD><E594AC>?- <20>?<3F><>掩<EFBFBD>𡑒<EFBFBD><F0A19192>?- MICE<43>芸𢆡頝唾<E9A09D><E594BE><EFBFBD>掩<EFBFBD>堒僎<E5A092>鞟內
|
||||
- <20>?<3F>蠘<EFBFBD><E8A098>厰僼隡睃<E99AA1> - 蝘駁膄"<22>駁<EFBFBD>"<22>?憭𡁻<E686AD><F0A181BB>坿‘"<22>祉<EFBFBD><E7A589>厰僼嚗<E583BC><E59A97>撟嗅<E6929F>"蝻箏仃<E7AE8F>澆<EFBFBD><E6BE86>?
|
||||
- <20>?<3F>芸𢆡<E88AB8>𡝗<EFBFBD>霂閗<E99C82><E99697>?- 18銝芣<E98A9D>霂閧鍂靘页<E99D98>test_fillna_operations.py嚗?
|
||||
**<2A>啣<EFBFBD><E595A3>蠘<EFBFBD>嚗?025-12-10<31>帋<EFBFBD>嚗? UX隡睃<E99AA1><E79D83>滚之<E6BB9A>寡<EFBFBD>** <20><><EFBFBD>
|
||||
- <20>?<3F>𣳇膄"<22>?0銵屸<E98AB5>閫?<3F>鞟內<E99E9F>?- <20>冽<EFBFBD>雿㯄<E99BBF>隡睃<E99AA1>
|
||||
- <20>?瘛餃<E7989B>銵<EFBFBD>噡<EFBFBD>?- <20>箏<EFBFBD><E7AE8F>刻”<E588BB>澆椰靘改<E99D98><E694B9>啗𠧧<E59597>峕艶嚗?蝚血噡<E8A180>堒仍
|
||||
- <20>?<3F>堒仍蝑偦<E89D91>匧<EFBFBD><E58CA7>?- Excel憌擧聢嚗龦ommunity<74><79>𧋦嚗䔶葉<E494B6><E89189>𧋦<EFBFBD>啣<EFBFBD>嚗峕遬蝷箏𣈲銝<F0A388B2><E98A9D>澆<EFBFBD>霈⊥㺭
|
||||
- <20>?<3F>券<EFBFBD><E588B8>唳旿<E594B3>㰘蝸 - 銝滚<E98A9D><E6BB9A>𣂼<EFBFBD>50銵䕘<E98AB5>蝑偦<E89D91>匧抅鈭𤾸<E988AD><F0A4BEB8>𤩺㺭<F0A4A9BA>殷<EFBFBD>蝏𤘪<E89D8F>蝎曄&
|
||||
- <20>?<3F>券<EFBFBD><E588B8>唳旿餈𥪜<E9A488> - <20><><EFBFBD>匧翰<E58CA7><E7BFB0><EFBFBD>雿頣<E99BBF>蝑偦<E89D91>?<3F>惩<EFBFBD>/<2F><>拳/<2F>∩辣/<2F>賫A/霈∠<E99C88>/Pivot嚗匧<E59A97><E58CA7>讛<EFBFBD><E8AE9B>?- <20>?**皛𡁜𢆡<F0A1819C>∠<EFBFBD><E288A0><EFBFBD>耨憭?* - 靽格㺿MainLayout銝箏𤐄摰𡁻<E691B0>摨佗<E691A8>h-screen嚗㚁<E59A97><E39A81>港葵瘚讛<E7989A><E8AE9B>函<EFBFBD><E587BD><EFBFBD><EFBFBD>皛𡁜𢆡<F0A1819C>∴<EFBFBD><E288B4>芣<EFBFBD>AG Grid<69><64><EFBFBD>皛𡁜𢆡
|
||||
- <20>?霈∠<E99C88><E288A0>堒<EFBFBD>閫鍦<E996AB>蝚虫耨憭?- <20>芸𢆡頧祆揢銝剜<E98A9D><E5899C>砍噡蝑匧<E89D91>閫鍦<E996AB>蝚?- <20>?霈∠<E99C88><E288A0>㛖鸌畾𠰴<E795BE>蝚血<E89D9A><E8A180>滢耨憭?- 摰<><E691B0><EFBFBD>堒<EFBFBD><E5A092>齿㦤<E9BDBF>塚<EFBFBD><E5A19A>舀<EFBFBD>隞餅<E99A9E><E9A485>寞<EFBFBD>摮㛖泵<E39B96>堒<EFBFBD>
|
||||
|
||||
**敶枏<E695B6><E69E8F>嗆<EFBFBD>?*嚗?- <20>?**Tool C <20>港<EFBFBD>摰峕<E691B0>摨佗<E691A8>98%** - <20>詨<EFBFBD><E8A9A8>蠘<EFBFBD><E8A098>券<EFBFBD>摰峕<E691B0>嚗𣬚鍂<F0A3AC9A>瑚<EFBFBD>撉峕遬<E5B395>埈<EFBFBD><E59F88>?- <20><> **隞<><E99A9E>蝏蠘恣**嚗䥪ython ~1800銵?+ Node.js ~3500銵?+ <20>滨垢 ~4000銵?+ <20>𡁶鍂Chat ~968銵?= **~10268銵?*
|
||||
**最新更新**:2025-12-08 16:00 **功能按钮Phase 1-2完成** + 7个功能上线
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>㴓 <20>詨<EFBFBD><E8A9A8>𣬚<EFBFBD>蝣𡢅<E89DA3>敹<EFBFBD>◆摰峕<E691B0>嚗?
|
||||
## 🎉 最新进展(2025-12-10)
|
||||
|
||||
### ✅ 功能按钮开发(Phase 1-2)
|
||||
|
||||
**7个核心功能已完成**:
|
||||
1. ✅ 高级筛选器(多条件AND/OR + 为空/不为空条件)
|
||||
2. ✅ 数值映射(重编码 + NA处理选项:保持/映射/删除)
|
||||
3. ✅ 生成分类变量(等宽/等频/自定义切点 + NA处理选项)
|
||||
4. ✅ 条件生成列(IF-THEN-ELSE + 为空/不为空条件)
|
||||
5. ✅ 删除缺失值(按行/列,阈值控制)
|
||||
6. ✅ 计算列(方案B:安全列名映射,支持特殊字符列名)
|
||||
7. ✅ Pivot转换(长表→宽表 + 保留未选列 + 原始列顺序)
|
||||
|
||||
**技术架构**:
|
||||
- ✅ 预写Python函数架构(稳定、安全、高性能)
|
||||
- ✅ 7个Python operations模块
|
||||
- ✅ 7个API端点(`/api/operations/*`)
|
||||
- ✅ 完整的前后端集成
|
||||
- ✅ 友好的UI交互(Dialog + 实时验证)
|
||||
|
||||
### ✅ NA处理优化(2025-12-09~10)
|
||||
|
||||
**4个功能支持空值处理**:
|
||||
1. ✅ 数值映射 - NA处理选项(保持NA/映射为指定值/删除行)
|
||||
2. ✅ 高级筛选 - 为空/不为空条件(原有支持)
|
||||
3. ✅ 生成分类变量 - NA处理选项(保持为空/标记为"缺失"/分配到指定组)
|
||||
4. ✅ 条件生成列 - 为空/不为空运算符
|
||||
|
||||
### ✅ Pivot列顺序优化(2025-12-10)
|
||||
|
||||
- ✅ 保留未选择的列(可选功能)
|
||||
- ✅ 未选列聚合方式(取第一个值/取众数/取均值)
|
||||
- ✅ 保持原始列顺序(转换后列按原文件顺序排列)
|
||||
- ✅ 透视列值按首次出现顺序排列
|
||||
|
||||
### ✅ UX优化(2025-12-09)
|
||||
|
||||
- ✅ 列头tooltip(鼠标悬停显示完整列名)
|
||||
- ✅ 50行预览提示可关闭
|
||||
- ✅ 页面滚动条优化(内部滚动,无整页滚动)
|
||||
|
||||
### ✅ 计算列方案B实施(2025-12-09)
|
||||
|
||||
- ✅ 前端安全列名映射(col_0, col_1...)
|
||||
- ✅ 后端columnMapping存储和传递
|
||||
- ✅ Python端使用columnMapping计算(支持特殊字符列名)
|
||||
|
||||
**新增功能(2025-12-10下午)**:
|
||||
- ✅ 缺失值填补(6种方法:均值/中位数/众数/固定值/前向填充/后向填充)- 已开发
|
||||
- 🚧 MICE多重插补 - 已集成,DataFrame shape问题待调试
|
||||
- ✅ 自动精度检测 - 填补值自动匹配原始数据小数位数
|
||||
- ✅ 分类列识别 - MICE自动跳过分类列并提示
|
||||
- ✅ 功能按钮优化 - 移除"去重"和"多重插补"独立按钮,合并到"缺失值处理"
|
||||
- ✅ 自动化测试脚本 - 18个测试用例(test_fillna_operations.py)
|
||||
|
||||
**新增功能(2025-12-10晚上)- UX优化重大改进** ✅:
|
||||
- ✅ 删除"前50行预览"提示条 - 用户体验优化
|
||||
- ✅ 添加行号列 - 固定在表格左侧,灰色背景,#符号列头
|
||||
- ✅ 列头筛选功能 - Excel风格,Community版本,中文本地化,显示唯一值及计数
|
||||
- ✅ 全量数据加载 - 不再限制50行,筛选基于全量数据,结果精确
|
||||
- ✅ 全量数据返回 - 所有快速操作(筛选/映射/分箱/条件/删NA/计算/Pivot)全量返回
|
||||
- ✅ **滚动条终极修复** - 修改MainLayout为固定高度(h-screen),整个浏览器窗口无滚动条,只有AG Grid内部滚动
|
||||
- ✅ 计算列全角字符修复 - 自动转换中文括号等全角字符
|
||||
- ✅ 计算列特殊字符列名修复 - 完善列别名机制,支持任意特殊字符列名
|
||||
|
||||
**当前状态**:
|
||||
- ✅ **Tool C 整体完成度:98%** - 核心功能全部完成,用户体验显著提升
|
||||
- 📊 **代码统计**:Python ~1800行 + Node.js ~3500行 + 前端 ~4000行 + 通用Chat ~968行 = **~10268行**
|
||||
|
||||
---
|
||||
|
||||
## 🎯 核心里程碑(必须完成)
|
||||
|
||||
- [x] **M1**:Python代码执行环境搭建完成(Day 1)✅ 2025-12-06
|
||||
- [x] **M2**:AI生成代码能力验证通过(Day 3)✅ 2025-12-07
|
||||
- [x] **M3**嚗𡁜<E59A97>蝡烘VP摰峕<E691B0>嚗𣬚垢<F0A3AC9A>啁垢<E59581>舐鍂嚗㇄ay 5嚗争<EFBFBD> 2025-12-07 **摰峕<EFBFBD>嚗?*
|
||||
- [ ] **M4**嚗𡁏<E59A97>颱<EFBFBD><E9A2B1>𣂼<EFBFBD><F0A382BC>?> 80%嚗㇄ay 6-7嚗争虬儭?敺<><E695BA>憪?
|
||||
- [x] **M3**:前端MVP完成,端到端可用(Day 5)✅ 2025-12-07 **完成!**
|
||||
- [ ] **M4**:总体成功率 > 80%(Day 6-7)⏸️ 待开始
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> <20><><EFBFBD>啗<EFBFBD>撅𤏪<E69285>2025-12-07嚗?
|
||||
### <20>?撌脣<E6928C><E884A3>?- **Day 1** (2025-12-06): Python敺格<E695BA><E6A0BC>⊥<EFBFBD>撅?<3F>? - dc_executor.py嚗?27銵䕘<E98AB5>
|
||||
- AST摰匧<E691B0>璉<EFBFBD><E79289>?+ Pandas<61>扯<EFBFBD>
|
||||
## 🚀 最新进展(2025-12-07)
|
||||
|
||||
### ✅ 已完成
|
||||
- **Day 1** (2025-12-06): Python微服务扩展 ✅
|
||||
- dc_executor.py(427行)
|
||||
- AST安全检查 + Pandas执行
|
||||
- 测试通过率:100%
|
||||
|
||||
- **Day 2** (2025-12-06): Session蝞∠<EFBFBD> + <20>唳旿憭<E697BF><E686AD> <20>? - SessionService.ts嚗?83銵䕘<E98AB5>
|
||||
- DataProcessService.ts嚗?03銵䕘<E98AB5>
|
||||
- SessionController.ts嚗?00銵䕘<E98AB5>
|
||||
- **Day 2** (2025-12-06): Session管理 + 数据处理 ✅
|
||||
- SessionService.ts(383行)
|
||||
- DataProcessService.ts(303行)
|
||||
- SessionController.ts(300行)
|
||||
- 数据库表:dc_tool_c_sessions
|
||||
- 测试通过率:100% (7/7 API)
|
||||
|
||||
- **Day 3** (2025-12-07): AI隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滚𦛚 <20>? - AICodeService.ts嚗?50銵䕘<E98AB5>
|
||||
- AIController.ts嚗?57銵䕘<E98AB5>
|
||||
- **Day 3** (2025-12-07): AI代码生成服务 ✅
|
||||
- AICodeService.ts(550行)
|
||||
- AIController.ts(257行)
|
||||
- 数据库表:dc_tool_c_ai_history
|
||||
- 10个Few-shot示例
|
||||
- <EFBFBD>芣<EFBFBD>靽格迤<EFBFBD>箏<EFBFBD>嚗<EFBFBD><EFBFBD>憭?甈⊿<E79488>霂𤏪<E99C82>
|
||||
- 自我修正机制(最多3次重试)
|
||||
- 测试通过率:81.8% (9/11场景)
|
||||
|
||||
- **Day 4** (2025-12-07): <EFBFBD>滨垢<EFBFBD>箇<EFBFBD>獢<EFBFBD>沲 <20>? - index.tsx嚗?58銵䕘<E98AB5>
|
||||
- **Day 4** (2025-12-07): 前端基础框架 ✅
|
||||
- index.tsx(258行)
|
||||
- Header + Toolbar + DataGrid (AG Grid)
|
||||
- Sidebar骨架
|
||||
- API封装(toolC.ts, 218行)
|
||||
- 路由配置完成
|
||||
- Portal启用Tool C
|
||||
|
||||
- **Day 5** (2025-12-07): AI Chat<EFBFBD>X踎摰峕<EFBFBD> + Ant Design X <EFBFBD><EFBFBD><EFBFBD> <20>?**<2A>滚之<E6BB9A>𣬚<EFBFBD>蝣𡢅<E89DA3>**
|
||||
- [x] Ant Design 6.0 <EFBFBD><EFBFBD>漣 <20>? - [x] @ant-design/x + x-sdk <20><><EFBFBD> <20>? - [x] <20>𡁶鍂 Chat 蝏<>辣撘<E8BEA3><E69298>𡢅<EFBFBD>~968銵䕘<E98AB5><E49598>? - ChatContainer, MessageRenderer, CodeBlockRenderer
|
||||
- 摰峕㟲蝐餃<E89D90>摰帋<E691B0><E5B88B>峕<EFBFBD>獢? - [x] Tool C <20><><EFBFBD> ChatContainer <20>? - [x] <20><>辣銝𠹺<E98A9D>摰峕㟲瘚<E39FB2><E7989A> <20>? - [x] API 摰峕㟲撖寞𦻖 <20>? - [x] UI 隡睃<E99AA1>嚗?銝芷䔮憸䀝耨憭㵪<E686AD><E3B5AA>? - [x] 蝡臬<E89DA1>蝡舀<E89DA1>霂閖<E99C82>朞<EFBFBD> <20>? - **<EFBFBD>啣<EFBFBD>隞<EFBFBD><EFBFBD>嚗鰺2100銵?*
|
||||
- **Day 5** (2025-12-07): AI Chat面板完成 + Ant Design X 集成 ✅ **重大里程碑!**
|
||||
- [x] Ant Design 6.0 升级 ✅
|
||||
- [x] @ant-design/x + x-sdk 集成 ✅
|
||||
- [x] 通用 Chat 组件开发(~968行)✅
|
||||
- ChatContainer, MessageRenderer, CodeBlockRenderer
|
||||
- 完整类型定义和文档
|
||||
- [x] Tool C 集成 ChatContainer ✅
|
||||
- [x] 文件上传完整流程 ✅
|
||||
- [x] API 完整对接 ✅
|
||||
- [x] UI 优化(7个问题修复)✅
|
||||
- [x] 端到端测试通过 ✅
|
||||
- **新增代码:~2100行**
|
||||
|
||||
### ⏸️ 待开始
|
||||
- **Day 6-7**: 优化与测试(成功率 > 80%)
|
||||
- **Day 8-10**: 高级功能(撤销/重做、导出)
|
||||
- **Day 11-15**: 全面测试与验收
|
||||
|
||||
### <20>賂<EFBFBD> 敺<><E695BA>憪?- **Day 6-7**: 隡睃<E99AA1>銝擧<E98A9D>霂𤏪<E99C82><F0A48FAA>𣂼<EFBFBD><F0A382BC>?> 80%嚗?- **Day 8-10**: 擃条漣<E69DA1>蠘<EFBFBD>嚗<EFBFBD>伃<EFBFBD><E4BC83>/<2F>滚<EFBFBD><E6BB9A><EFBFBD>紡<EFBFBD>綽<EFBFBD>
|
||||
- **Day 11-15**: <20>券𢒰瘚贝<E7989A>銝𡡞<E98A9D><F0A1A19E>?
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> Week 1嚗𡁜抅蝖<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD>剖遣嚗㇄ay 1-5嚗?
|
||||
### Day 1嚗䥪ython<6F>滚𦛚<E6BB9A>拙<EFBFBD> + <20>臬<EFBFBD>撉諹<E69289> 潃?<3F>?**撌脣<E6928C><E884A3>?2025-12-06**
|
||||
## 📅 Week 1:基础架构搭建(Day 1-5)
|
||||
|
||||
### Day 1:Python服务扩展 + 环境验证 ⭐ ✅ **已完成 2025-12-06**
|
||||
|
||||
#### Python微服务扩展
|
||||
- [x] **P0** 创建 `extraction_service/services/dc_executor.py` ✅
|
||||
- [x] 实现 `validate_code(code)` - AST静态检查 ✅
|
||||
- [x] 实现 `execute_pandas_code(data, code)` - 代码执行 ✅
|
||||
- [x] 添加危险模块黑名单(os、sys、subprocess等)✅
|
||||
- [x] 添加超时保护(30秒)✅
|
||||
- [x] 添加异常捕获和错误消息 ✅
|
||||
|
||||
- [x] **P0** 扩展 `extraction_service/main.py` ✅
|
||||
- [x] 添加 `POST /api/dc/execute` 端点 ✅
|
||||
- [x] 添加 `POST /api/dc/validate` 端点 ✅
|
||||
- [x] 添加请求日志记录 ✅
|
||||
- [x] 添加错误处理中间件 ✅
|
||||
|
||||
- [x] **P0** 测试Python服务 ✅
|
||||
- [x] 启动服务 ✅
|
||||
- [x] 测试健康检查 ✅
|
||||
- [x] 测试代码验证 ✅
|
||||
- [x] 测试代码执行 ✅
|
||||
- [x] 验证AST拦截 ✅
|
||||
|
||||
#### Python敺格<E695BA><E6A0BC>⊥<EFBFBD>撅?- [x] **P0** <20>𥕦遣 `extraction_service/services/dc_executor.py` <20>? - [x] 摰䂿緵 `validate_code(code)` - AST<53>蹱<EFBFBD><E8B9B1><EFBFBD><EFBFBD>?<3F>? - [x] 摰䂿緵 `execute_pandas_code(data, code)` - 隞<><E99A9E><EFBFBD>扯<EFBFBD> <20>? - [x] 瘛餃<E7989B><E9A483>梢埯璅∪<E79285>暺穃<E69ABA><E7A983>𤏪<EFBFBD>os<6F><73>ys<79><73>ubprocess蝑㚁<E89D91><E39A81>? - [x] 瘛餃<E7989B>頞<EFBFBD>𧒄靽脲擪嚗?0蝘𡜐<E89D98><F0A19C90>? - [x] 瘛餃<E7989B>撘<EFBFBD>虜<EFBFBD>閗繮<E99697>屸<EFBFBD>霂舀<E99C82><E88880>?<3F>?
|
||||
- [x] **P0** <20>拙<EFBFBD> `extraction_service/main.py` <20>? - [x] 瘛餃<E7989B> `POST /api/dc/execute` 蝡舐<E89DA1> <20>? - [x] 瘛餃<E7989B> `POST /api/dc/validate` 蝡舐<E89DA1> <20>? - [x] 瘛餃<E7989B>霂瑟<E99C82><E7919F>亙<EFBFBD>霈啣<E99C88> <20>? - [x] 瘛餃<E7989B><E9A483>躰秤憭<E7A7A4><E686AD>銝剝𡢿隞?<3F>?
|
||||
- [x] **P0** 瘚贝<E7989A>Python<6F>滚𦛚 <20>? - [x] <20>臬𢆡<E887AC>滚𦛚 <20>? - [x] 瘚贝<E7989A><E8B49D>亙熒璉<E78692><E79289>?<3F>? - [x] 瘚贝<E7989A>隞<EFBFBD><E99A9E>撉諹<E69289> <20>? - [x] 瘚贝<E7989A>隞<EFBFBD><E99A9E><EFBFBD>扯<EFBFBD> <20>? - [x] 撉諹<E69289>AST<53>行⏛ <20>?
|
||||
#### Node.js后端集成
|
||||
- [x] **P0** <EFBFBD>𥕦遣<EFBFBD>𡒊垢<EFBFBD><EFBFBD>辣憭寧<EFBFBD><EFBFBD>?<3F>?
|
||||
- [x] **P0** 摰䂿緵 `PythonExecutorService.ts` <20>? - [x] 摰䂿緵 `executeCode(data, code)` <20>寞<EFBFBD> <20>? - [x] 摰䂿緵 `validateCode(code)` <20>寞<EFBFBD> <20>? - [x] 瘛餃<E7989B>頞<EFBFBD>𧒄<EFBFBD>批<EFBFBD>嚗?0蝘𡜐<E89D98><F0A19C90>? - [x] 瘛餃<E7989B><E9A483>亙<EFBFBD>霈啣<E99C88> <20>? - [x] 瘛餃<E7989B><E9A483>躰秤憭<E7A7A4><E686AD><EFBFBD>屸<EFBFBD>霂閙㦤<E99699>?<3F>?
|
||||
- [x] **P1** <EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD><EFBFBD>滨蔭 <20>?
|
||||
- [x] **P0** 创建后端文件夹结构 ✅
|
||||
|
||||
- [x] **P0** 实现 `PythonExecutorService.ts` ✅
|
||||
- [x] 实现 `executeCode(data, code)` 方法 ✅
|
||||
- [x] 实现 `validateCode(code)` 方法 ✅
|
||||
- [x] 添加超时控制(30秒)✅
|
||||
- [x] 添加日志记录 ✅
|
||||
- [x] 添加错误处理和重试机制 ✅
|
||||
|
||||
- [x] **P1** 环境变量配置 ✅
|
||||
|
||||
#### 验收标准
|
||||
- [x] Python<EFBFBD>滚𦛚<EFBFBD>賣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵𣬚<EFBFBD><EFBFBD>𠠬andas隞<EFBFBD><EFBFBD> <20>?- [x] AST璉<54><E79289>亥<EFBFBD><E4BAA5>行⏛<E8A18C>梢埯隞<E59FAF><E99A9E> <20>?- [x] Node.js<6A>賣<EFBFBD><E8B3A3>蠘<EFBFBD><E8A098>沌ython<6F>滚𦛚撟嗉繮<E59789>𣇉<EFBFBD><F0A38789>?<3F>?- [x] <20><><EFBFBD>㗇𠯫敹埈迤撣貉<E692A3><E8B289>箏<EFBFBD><E7AE8F>批<EFBFBD><E689B9>?<3F>?
|
||||
- [x] Python服务能成功执行简单Pandas代码 ✅
|
||||
- [x] AST检查能拦截危险代码 ✅
|
||||
- [x] Node.js能成功调用Python服务并获取结果 ✅
|
||||
- [x] 所有日志正常输出到控制台 ✅
|
||||
|
||||
---
|
||||
|
||||
### Day 2嚗𡁏㺭<EFBFBD>桀<EFBFBD> + Session蝞∠<EFBFBD> <20>?**撌脣<E6928C><E884A3>?2025-12-06**
|
||||
### Day 2:数据库 + Session管理 ✅ **已完成 2025-12-06**
|
||||
|
||||
#### 数据库Schema设计
|
||||
- [x] **P0** 创建Prisma Schema(`prisma/schema.prisma`)✅
|
||||
@@ -139,31 +221,41 @@
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **P0** <EFBFBD>扯<EFBFBD><EFBFBD>唳旿摨栞<EFBFBD>蝘? ```bash
|
||||
- [ ] **P0** 执行数据库迁移
|
||||
```bash
|
||||
npx prisma db push
|
||||
npx prisma generate
|
||||
```
|
||||
|
||||
- [ ] **P1** 撉諹<EFBFBD>銵典<EFBFBD>撱箸<EFBFBD><EFBFBD>? ```sql
|
||||
- [ ] **P1** 验证表创建成功
|
||||
```sql
|
||||
SELECT * FROM dc.dc_tool_c_sessions LIMIT 1;
|
||||
```
|
||||
|
||||
#### SessionService实现
|
||||
- [ ] **P0** 实现 `SessionService.ts`
|
||||
- [ ] `createSession(userId, fileName, fileBuffer)` - 创建会话
|
||||
- [ ] 銝𠹺<EFBFBD>Excel<EFBFBD>記SS嚗<EFBFBD><EFBFBD><EFBFBD>?`storage.uploadBuffer`嚗? - [ ] 閫<><E996AB>Excel<65>衷SON嚗<4E>蝙<EFBFBD>肝lsx摨橒<E691A8>
|
||||
- [ ] 靽嘥<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>桀<EFBFBD><EFBFBD>唳旿摨橒<EFBFBD>prisma嚗? - [ ] `getSession(sessionId)` - <20>瑕<EFBFBD>隡朞<E99AA1>
|
||||
- [ ] 隞擧㺭<EFBFBD>桀<EFBFBD>霂餃<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>? - [ ] 隞窻SS銝贝蝸<E8B49D>唳旿嚗<E697BF><E59A97><EFBFBD><EFBFBD>閬<EFBFBD><E996AC>
|
||||
- [ ] 上传Excel到OSS(复用 `storage.uploadBuffer`)
|
||||
- [ ] 解析Excel到JSON(使用xlsx库)
|
||||
- [ ] 保存元数据到数据库(prisma)
|
||||
- [ ] `getSession(sessionId)` - 获取会话
|
||||
- [ ] 从数据库读取元数据
|
||||
- [ ] 从OSS下载数据(如需要)
|
||||
- [ ] `deleteSession(sessionId)` - 删除会话
|
||||
- [ ] 删除OSS文件
|
||||
- [ ] <EFBFBD>𣳇膄<EFBFBD>唳旿摨栞扇敶?
|
||||
- [ ] 删除数据库记录
|
||||
|
||||
- [ ] **P1** 添加Excel解析逻辑
|
||||
- [ ] 使用 `xlsx` 库读取Excel
|
||||
- [ ] 转换为JSON格式(数组对象)
|
||||
- [ ] 璉<EFBFBD>瘚讠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝剜<EFBFBD><EFBFBD>舀<EFBFBD>嚗? - [ ] <20>𣂼<EFBFBD><F0A382BC>堒<EFBFBD><E5A092>峕㺭<E5B395>桃掩<E6A183>?
|
||||
- [ ] 检测编码(中文支持)
|
||||
- [ ] 提取列名和数据类型
|
||||
|
||||
#### 验收标准
|
||||
- [ ] <EFBFBD>賣<EFBFBD><EFBFBD>煺<EFBFBD>隡?0MB隞亙<E99A9E><E4BA99><EFBFBD>xcel<EFBFBD><EFBFBD>辣
|
||||
- [ ] <EFBFBD>唳旿甇<EFBFBD>&靽嘥<EFBFBD><EFBFBD>記SS嚗<EFBFBD>妟<EFBFBD>賜<EFBFBD>嚗?- [ ] Session<6F><6E>㺭<EFBFBD>格迤蝖桀<E89D96><E6A180>典<EFBFBD><E585B8>唳旿摨?- [ ] <20>賡<EFBFBD>朞<EFBFBD>sessionId璉<64>蝝W<E89D9D>摰峕㟲<E5B395>唳旿
|
||||
- [ ] 能成功上传10MB以内的Excel文件
|
||||
- [ ] 数据正确保存到OSS(零落盘)
|
||||
- [ ] Session元数据正确存储到数据库
|
||||
- [ ] 能通过sessionId检索到完整数据
|
||||
|
||||
---
|
||||
|
||||
@@ -171,40 +263,52 @@
|
||||
|
||||
#### AICodeService实现
|
||||
- [ ] **P0** 实现 `AICodeService.ts`
|
||||
- [ ] <EFBFBD><EFBFBD><EFBFBD>LLMFactory嚗<EFBFBD><EFBFBD><EFBFBD>?`@/common/llm`嚗? - [ ] 摰䂿緵 `generateCode(prompt, dataContext)` <20>寞<EFBFBD>
|
||||
- [ ] <EFBFBD><EFBFBD>遣System Prompt嚗<74><E59A97><EFBFBD>?0銝東ew-shot蝷箔<E89DB7>嚗? - [ ] 瘜典<E7989C><E585B8>唳旿銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD>銵峕㺭<E5B395><E3BAAD><EFBFBD><EFBFBD>溻<EFBFBD><E6BABB>甅<EFBFBD>祆㺭<E7A586>殷<EFBFBD>
|
||||
- [ ] 集成LLMFactory(复用 `@/common/llm`)
|
||||
- [ ] 实现 `generateCode(prompt, dataContext)` 方法
|
||||
- [ ] 构建System Prompt(包含10个Few-shot示例)
|
||||
- [ ] 注入数据上下文(行数、列名、样本数据)
|
||||
- [ ] 调用LLM生成代码
|
||||
- [ ] <EFBFBD>𣂼<EFBFBD>蝥臭誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>駁膄Markdown<EFBFBD>澆<EFBFBD>嚗? - [ ] 摰䂿緵 `fixCode(originalCode, errorMsg, dataContext)` <20>寞<EFBFBD>
|
||||
- [ ] 提取纯代码(去除Markdown格式)
|
||||
- [ ] 实现 `fixCode(originalCode, errorMsg, dataContext)` 方法
|
||||
- [ ] AI自我修复逻辑
|
||||
- [ ] <EFBFBD><EFBFBD>憭𡁻<EFBFBD>霂?甈?
|
||||
- [ ] 最多重试1次
|
||||
|
||||
- [ ] **P0** System Prompt设计
|
||||
- [ ] <EFBFBD>箇<EFBFBD><EFBFBD>箸艶蝷箔<EFBFBD>嚗?銝迎<E98A9D>
|
||||
- [ ] 銝剔<EFBFBD><EFBFBD>箸艶蝷箔<EFBFBD>嚗?銝迎<E98A9D>
|
||||
- [ ] 擃条漣<EFBFBD>箸艶蝷箔<EFBFBD>嚗?銝迎<E98A9D>
|
||||
- [ ] 基础场景示例(5个)
|
||||
- [ ] 中等场景示例(3个)
|
||||
- [ ] 高级场景示例(2个)
|
||||
- [ ] 安全规范说明
|
||||
- [ ] 输出格式要求
|
||||
|
||||
- [ ] **P1** 代码提取逻辑
|
||||
- [ ] 识别 ` ```python ... ``` ` 格式
|
||||
- [ ] 霂<EFBFBD><EFBFBD>蝥臭誨<EFBFBD><EFBFBD>聢撘? - [ ] <20>駁膄瘜券<E7989C><E588B8>諹秩<E8ABB9>?
|
||||
- [ ] 识别纯代码格式
|
||||
- [ ] 去除注释和说明
|
||||
|
||||
#### 验收标准
|
||||
- [ ] AI<EFBFBD>賜<EFBFBD><EFBFBD>鞉迤蝖桃<EFBFBD>Pandas隞<EFBFBD><EFBFBD>嚗<EFBFBD>抅蝖<EFBFBD><EFBFBD>箸艶嚗?- [ ] <20><><EFBFBD><EFBFBD><EFBFBD>誨<EFBFBD><E8AAA8>泵<EFBFBD><E6B3B5><EFBFBD><EFBFBD>刻<EFBFBD><E588BB><EFBFBD><EFBFBD><EFBFBD>惩暒<E683A9>拙紡<E68B99>伐<EFBFBD>
|
||||
- [ ] <EFBFBD>賣迤蝖桀<EFBFBD><EFBFBD><EFBFBD>葉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?- [ ] 隞<><E99A9E><EFBFBD>𣂼<EFBFBD><F0A382BC><EFBFBD>&<EFBFBD>?> 95%
|
||||
- [ ] AI能生成正确的Pandas代码(基础场景)
|
||||
- [ ] 生成的代码符合安全规范(无危险导入)
|
||||
- [ ] 能正确处理中文列名
|
||||
- [ ] 代码提取准确率 > 95%
|
||||
|
||||
---
|
||||
|
||||
### Day 4:前端基础框架
|
||||
|
||||
#### <EFBFBD>滨垢<EFBFBD><EFBFBD>辣憭寧<EFBFBD><EFBFBD>?- [ ] **P0** <20>𥕦遣<F0A595A6>滨垢<E6BBA8>桀<EFBFBD>
|
||||
#### 前端文件夹结构
|
||||
- [ ] **P0** 创建前端目录
|
||||
```
|
||||
frontend-v2/src/modules/dc/pages/tool-c/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> index.tsx # 銝駁△<EFBFBD>W<EFBFBD><EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> components/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> DataTable.tsx # AG Grid<69>唳旿銵冽聢
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> AICopilot.tsx # AI撖寡<E69296>靘扯器<E689AF>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> FileUploader.tsx # <20><>辣銝𠹺<E98A9D>
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> Toolbar.tsx # 憿園<E686BF>撌亙<E6928C><E4BA99>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> ChatMessage.tsx # 撖寡<E69296>瘨<EFBFBD><E798A8>蝏<EFBFBD>辣
|
||||
├── index.tsx # 主页面入口
|
||||
├── components/
|
||||
│ ├── DataTable.tsx # AG Grid数据表格
|
||||
│ ├── AICopilot.tsx # AI对话侧边栏
|
||||
│ ├── FileUploader.tsx # 文件上传
|
||||
│ ├── Toolbar.tsx # 顶部工具栏
|
||||
│ └── ChatMessage.tsx # 对话消息组件
|
||||
├── hooks/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> useSession.ts # Session蝞∠<EFBFBD>
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> useAIChat.ts # AI撖寡<EFBFBD>
|
||||
│ ├── useSession.ts # Session管理
|
||||
│ └── useAIChat.ts # AI对话
|
||||
├── types.ts # TypeScript类型定义
|
||||
└── api.ts # API封装
|
||||
```
|
||||
@@ -216,58 +320,87 @@
|
||||
```
|
||||
|
||||
#### 主页面布局
|
||||
- [ ] **P0** 摰䂿緵 `index.tsx`嚗<EFBFBD>蜓撣<EFBFBD><EFBFBD>嚗? - [ ] 撌虫儒嚗𡁏㺭<F0A1818F>株”<E6A0AA>澆躹<E6BE86><E8BAB9><EFBFBD>70%摰賢漲嚗? - [ ] <20>喃儒嚗鋫I Copilot靘扯器<E689AF>𧶏<EFBFBD>30%摰賢漲嚗? - [ ] 憿園<E686BF>嚗𡁏<E59A97>撟喳極<E596B3>瑟<EFBFBD>嚗<EFBFBD><E59A97>隞嗡<E99A9E>隡𨬭<E99AA1><F0A8ACAD>紡<EFBFBD>箝<EFBFBD><E7AE9D>伃<EFBFBD><E4BC83>嚗? - [ ] <20>嗆<EFBFBD><E59786>恣<EFBFBD><E681A3><EFBFBD>useState/useReducer
|
||||
- [ ] **P0** 实现 `index.tsx`(主布局)
|
||||
- [ ] 左侧:数据表格区域(70%宽度)
|
||||
- [ ] 右侧:AI Copilot侧边栏(30%宽度)
|
||||
- [ ] 顶部:扁平工具栏(文件上传、导出、撤销)
|
||||
- [ ] 状态管理:useState/useReducer
|
||||
|
||||
- [ ] **P1** 实现 `FileUploader.tsx`
|
||||
- [ ] 拖拽上传支持
|
||||
- [ ] <EFBFBD><EFBFBD>辣蝐餃<EFBFBD>撉諹<EFBFBD>嚗<EFBFBD><EFBFBD>Excel嚗? - [ ] <20><>辣憭批<E686AD><E689B9>𣂼<EFBFBD>嚗?0MB嚗? - [ ] 銝𠹺<E98A9D>餈𥕦漲<F0A595A6>曄內
|
||||
- [ ] 文件类型验证(仅Excel)
|
||||
- [ ] 文件大小限制(10MB)
|
||||
- [ ] 上传进度显示
|
||||
|
||||
#### 验收标准
|
||||
- [ ] 憿菟𢒰撣<EFBFBD><EFBFBD>甇<EFBFBD>&嚗<EFBFBD>椰銵冽聢<EFBFBD>莧I嚗?- [ ] <20>賣<EFBFBD><E8B3A3>煺<EFBFBD>隡𪊲xcel<65><6C>辣
|
||||
- [ ] 銝𠹺<EFBFBD><EFBFBD>舘<EFBFBD><EFBFBD>见<EFBFBD><EFBFBD>㰘蝸<EFBFBD>嗆<EFBFBD>?- [ ] <20>滚<EFBFBD>撘誩<E69298>撅<EFBFBD>嚗<EFBFBD><E59A97>撠誩捐摨?280px嚗?
|
||||
- [ ] 页面布局正确(左表格右AI)
|
||||
- [ ] 能成功上传Excel文件
|
||||
- [ ] 上传后能看到加载状态
|
||||
- [ ] 响应式布局(最小宽度1280px)
|
||||
|
||||
---
|
||||
|
||||
### Day 5嚗𡁏㺭<EFBFBD>株”<EFBFBD>澆<EFBFBD><EFBFBD>堆<EFBFBD>AG Grid嚗?
|
||||
### Day 5:数据表格实现(AG Grid)
|
||||
|
||||
#### DataTable组件
|
||||
- [ ] **P0** 实现 `DataTable.tsx`
|
||||
- [ ] 集成AG Grid
|
||||
- [ ] <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD>摰帋<EFBFBD>嚗<EFBFBD>覔<EFBFBD>圃xcel<EFBFBD>芸𢆡<EFBFBD><EFBFBD><EFBFBD>嚗? - [ ] <20>訫<EFBFBD><E8A8AB>潛<EFBFBD>颲穃<E9A2B2><E7A983>? - [ ] <20>𤩺㺭<F0A4A9BA>格<EFBFBD>霈堆<E99C88>暺<EFBFBD>𠧧擃䀝漁嚗? - [ ] <20><>△<EFBFBD>舀<EFBFBD>嚗<EFBFBD><E59A97>憿?00銵䕘<E98AB5>
|
||||
- [ ] 动态列定义(根据Excel自动生成)
|
||||
- [ ] 单元格编辑功能
|
||||
- [ ] 脏数据标记(黄色高亮)
|
||||
- [ ] 分页支持(每页100行)
|
||||
|
||||
- [ ] **P1** 配置AG Grid主题
|
||||
- [ ] 使用 `ag-theme-alpine`
|
||||
- [ ] <EFBFBD>芸<EFBFBD>銋㗇甅撘𧶏<EFBFBD>Ant Design憌擧聢嚗? - [ ] <20>堒捐<E5A092>芷<EFBFBD><E88AB7><EFBFBD>
|
||||
- [ ] 自定义样式(Ant Design风格)
|
||||
- [ ] 列宽自适应
|
||||
|
||||
- [ ] **P1** 表格功能
|
||||
- [ ] <EFBFBD>埈<EFBFBD>摨? - [ ] <20>㛖<EFBFBD><E39B96>? - [ ] 銵屸<E98AB5>㗇𥋘嚗<F0A58B98><E59A97><EFBFBD>㚁<EFBFBD>
|
||||
- [ ] 撖澆枂CSV嚗㇁G Grid<69><64>蔭嚗?
|
||||
- [ ] 列排序
|
||||
- [ ] 列筛选
|
||||
- [ ] 行选择(多选)
|
||||
- [ ] 导出CSV(AG Grid内置)
|
||||
|
||||
#### 验收标准
|
||||
- [ ] <EFBFBD>賣迤蝖格遬蝷慟xcel<EFBFBD>唳旿嚗?00銵?嚗?- [ ] <20>堒捐<E5A092>芷<EFBFBD><E88AB7><EFBFBD>銝𥪜虾<F0A5AA9C>见𢆡靚<F0A286A1>㟲
|
||||
- [ ] <EFBFBD>訫<EFBFBD><EFBFBD>潛<EFBFBD>颲穃<EFBFBD><EFBFBD>厰<EFBFBD><EFBFBD>脫<EFBFBD>霈?- [ ] 銵冽聢<E586BD>扯<EFBFBD>瘚<EFBFBD><E7989A>嚗?000銵䔶<E98AB5><E494B6>⊿▼嚗?
|
||||
- [ ] 能正确显示Excel数据(100行+)
|
||||
- [ ] 列宽自适应且可手动调整
|
||||
- [ ] 单元格编辑后有黄色标记
|
||||
- [ ] 表格性能流畅(1000行不卡顿)
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> Week 2嚗𡁏瓲敹<EFBFBD><EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>堆<EFBFBD>Day 6-10嚗?
|
||||
## 📅 Week 2:核心功能实现(Day 6-10)
|
||||
|
||||
### Day 6:AI对话UI
|
||||
|
||||
#### AICopilot组件
|
||||
- [ ] **P0** 实现 `AICopilot.tsx`
|
||||
- [ ] 对话消息列表(滚动)
|
||||
- [ ] 输入框(多行,支持Enter发送)
|
||||
- [ ] <EFBFBD>煾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>? - [ ] <20>㰘蝸<E3B098>嗆<EFBFBD><E59786><EFBFBD>AI<41>肽<EFBFBD><E882BD>葉...嚗?
|
||||
- [ ] 发送按钮
|
||||
- [ ] 加载状态(AI思考中...)
|
||||
|
||||
- [ ] **P0** 实现 `ChatMessage.tsx`
|
||||
- [ ] 用户消息(右对齐,蓝色)
|
||||
- [ ] AI消息(左对齐,灰色)
|
||||
- [ ] 隞<EFBFBD><EFBFBD><EFBFBD>烾<EFBFBD>鈭殷<EFBFBD>雿輻鍂 `react-syntax-highlighter`嚗? - [ ] <20>園𡢿<E59C92>單遬蝷?
|
||||
- [ ] 代码块高亮(使用 `react-syntax-highlighter`)
|
||||
- [ ] 时间戳显示
|
||||
|
||||
- [ ] **P1** 消息历史管理
|
||||
- [ ] 保存到localStorage
|
||||
- [ ] <EFBFBD><EFBFBD>憭帋<EFBFBD>摮?0<>? - [ ] 皜<>征<EFBFBD><E5BE81>蟮<EFBFBD>厰僼
|
||||
- [ ] 最多保存50条
|
||||
- [ ] 清空历史按钮
|
||||
|
||||
#### 验收标准
|
||||
- [ ] 对话界面美观(参考原型设计)
|
||||
- [ ] 瘨<EFBFBD><EFBFBD><EFBFBD>煾<EFBFBD>?<3F>交𤣰瘚<F0A4A3B0><E7989A>
|
||||
- [ ] 隞<EFBFBD><EFBFBD><EFBFBD>埈迤蝖桅<EFBFBD>鈭?- [ ] 皛𡁜𢆡<F0A1819C>唳<EFBFBD><E594B3>唳<EFBFBD><E594B3>?
|
||||
- [ ] 消息发送/接收流畅
|
||||
- [ ] 代码块正确高亮
|
||||
- [ ] 滚动到最新消息
|
||||
|
||||
---
|
||||
|
||||
### Day 7嚗鋫I<EFBFBD><EFBFBD><EFBFBD>隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 潃?
|
||||
### Day 7:AI生成代码集成 ⭐
|
||||
|
||||
#### API集成
|
||||
- [ ] **P0** 实现 `api.ts`
|
||||
- [ ] `uploadFile(file)` - 上传Excel
|
||||
@@ -275,64 +408,79 @@
|
||||
- [ ] `executeCode(sessionId, code)` - 执行代码
|
||||
- [ ] `getSessionData(sessionId)` - 获取数据
|
||||
|
||||
- [ ] **P0** <EFBFBD>𡒊垢API摰䂿緵嚗ǑToolCController.ts`嚗? - [ ] `POST /api/v1/dc/tool-c/upload` - <20><>辣銝𠹺<E98A9D>
|
||||
- [ ] **P0** 后端API实现(`ToolCController.ts`)
|
||||
- [ ] `POST /api/v1/dc/tool-c/upload` - 文件上传
|
||||
- [ ] `POST /api/v1/dc/tool-c/chat` - AI对话
|
||||
- [ ] `POST /api/v1/dc/tool-c/execute` - 执行代码
|
||||
- [ ] `GET /api/v1/dc/tool-c/sessions/:id` - 获取会话
|
||||
|
||||
#### 业务逻辑实现
|
||||
- [ ] **P0** 实现完整流程
|
||||
1. [ ] <EFBFBD>冽<EFBFBD><EFBFBD>煾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?AICodeService<EFBFBD><EFBFBD><EFBFBD>隞<EFBFBD><EFBFBD>
|
||||
2. [ ] <EFBFBD>滨垢撅閧內<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>誨<EFBFBD><EFBFBD><EFBFBD>Markdown<EFBFBD>澆<EFBFBD>嚗? 3. [ ] <20>冽<EFBFBD><E586BD>孵稬"<22>扯<EFBFBD>"<22>厰僼 <20>?靚<>鍂Python<6F>滚𦛚
|
||||
4. [ ] <EFBFBD>扯<EFBFBD><EFBFBD>𣂼<EFBFBD> <20>?<3F>瑟鰵銵冽聢<E586BD>唳旿
|
||||
5. [ ] <EFBFBD>扯<EFBFBD>憭梯揖 <20>?AI<41>芣<EFBFBD>靽桀<E99DBD> <20>?<3F>滩<EFBFBD>
|
||||
1. [ ] 用户发送消息 → AICodeService生成代码
|
||||
2. [ ] 前端展示生成的代码(Markdown格式)
|
||||
3. [ ] 用户点击"执行"按钮 → 调用Python服务
|
||||
4. [ ] 执行成功 → 刷新表格数据
|
||||
5. [ ] 执行失败 → AI自我修复 → 重试
|
||||
|
||||
- [ ] **P1** 错误处理
|
||||
- [ ] AST璉<EFBFBD><EFBFBD>亙仃韐?<3F>?<3F>鞟內<E99E9F>冽<EFBFBD>
|
||||
- [ ] <20>扯<EFBFBD>頞<EFBFBD>𧒄嚗?0蝘𡜐<E89D98> <20>?<3F>鞟內<E99E9F>冽<EFBFBD>
|
||||
- [ ] AI<EFBFBD><EFBFBD><EFBFBD>憭梯揖 <20>?<3F>滩<EFBFBD><E6BBA9>箏<EFBFBD>
|
||||
- [ ] AST检查失败 → 提示用户
|
||||
- [ ] 执行超时(30秒) → 提示用户
|
||||
- [ ] AI生成失败 → 重试机制
|
||||
|
||||
#### 验收标准
|
||||
- [ ] **<EFBFBD>箇<EFBFBD><EFBFBD>箸艶瘚贝<EFBFBD>嚗?銝迎<E98A9D><E8BF8E>𣂼<EFBFBD><F0A382BC>?> 90%**
|
||||
- [ ] "<EFBFBD>𠰴僑樴<EFBFBD>之鈭?0<><30><EFBFBD>霈唬蛹<E594AC><E89BB9>僑蝏?
|
||||
- [ ] **基础场景测试(5个)成功率 > 90%**
|
||||
- [ ] "把年龄大于60的标记为老年组"
|
||||
- [ ] "删除所有患者ID为空的行"
|
||||
- [ ] "<EFBFBD>𦠜<EFBFBD>批<EFBFBD>頧砌蛹<EFBFBD>啣<EFBFBD>嚗𣬚琸1憟?"
|
||||
- [ ] "把性别转为数字,男1女0"
|
||||
- [ ] "计算BMI = 体重 / (身高/100)^2"
|
||||
- [ ] "<EFBFBD>𣳇膄蝻箏仃<EFBFBD><EFBFBD><EFBFBD>餈?0%<25><><EFBFBD>"
|
||||
- [ ] "删除缺失率超过50%的列"
|
||||
|
||||
---
|
||||
|
||||
### Day 8:UI锁定机制
|
||||
|
||||
#### 鈭埝棅<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?- [ ] **P0** <20>滨垢<E6BBA8>嗆<EFBFBD><E59786>恣<EFBFBD>? - [ ] 瘛餃<E7989B> `isAIProcessing` <20>嗆<EFBFBD>? - [ ] AI撖寡<E69296>銝?<3F>?<3F><><EFBFBD>銵冽聢蝻𤥁<E89DBB>
|
||||
- [ ] <20>曄內<E69B84>见末<E8A781>鞟內嚗?AI甇<49>銁憭<E98A81><E686AD>嚗諹窈蝔滚<E89D94>?.."
|
||||
#### 互斥锁实现
|
||||
- [ ] **P0** 前端状态管理
|
||||
- [ ] 添加 `isAIProcessing` 状态
|
||||
- [ ] AI对话中 → 锁定表格编辑
|
||||
- [ ] 显示友好提示:"AI正在处理,请稍候..."
|
||||
|
||||
- [ ] **P0** 表格锁定逻辑
|
||||
- [ ] `isAIProcessing=true` <20>?AG Grid霈曄蔭銝箏蘨霂? - [ ] 蝳<>鍂撌亙<E6928C><E4BA99>𤩺<EFBFBD><F0A4A9BA>殷<EFBFBD>撖澆枂<E6BE86>文<EFBFBD>嚗? - [ ] <20>曄內<E69B84>𢠃<EFBFBD>𤩺<EFBFBD><F0A4A9BA>坔<EFBFBD>
|
||||
- [ ] `isAIProcessing=true` → AG Grid设置为只读
|
||||
- [ ] 禁用工具栏按钮(导出除外)
|
||||
- [ ] 显示半透明蒙层
|
||||
|
||||
- [ ] **P1** 视觉反馈
|
||||
- [ ] 銵冽聢<E586BD>𢠃<EFBFBD>𤩺<EFBFBD>嚗èpacity: 0.6嚗? - [ ] <20>曄內<E69B84>㰘蝸<E3B098>函𤫇
|
||||
- [ ] 憿園<E686BF><E59C92>曄內餈𥕦漲<F0A595A6>?
|
||||
- [ ] 表格半透明(opacity: 0.6)
|
||||
- [ ] 显示加载动画
|
||||
- [ ] 顶部显示进度条
|
||||
|
||||
#### 验收标准
|
||||
- [ ] AI处理时,表格无法编辑
|
||||
- [ ] <20><><EFBFBD><EFBFBD>嗆<EFBFBD><E59786><EFBFBD><EFBFBD>擧遬<E693A7><E981AC><EFBFBD>閫匧<E996AB>擐?- [ ] AI摰峕<E691B0><E5B395>𠬍<EFBFBD>銵冽聢<E586BD>芸𢆡閫<F0A286A1><E996AB>
|
||||
- [ ] <20>冽<EFBFBD>雿㯄<E99BBF>瘚<EFBFBD><E7989A>嚗<EFBFBD><E59A97><EFBFBD>⊿▼嚗?
|
||||
- [ ] 锁定状态有明显的视觉反馈
|
||||
- [ ] AI完成后,表格自动解锁
|
||||
- [ ] 用户体验流畅(无卡顿)
|
||||
|
||||
---
|
||||
|
||||
### Day 9嚗朞䌊<EFBFBD>冽<EFBFBD><EFBFBD>亦<EFBFBD>嚗㇃heckpoint嚗?
|
||||
### Day 9:自动检查点(Checkpoint)
|
||||
|
||||
#### 数据快照管理
|
||||
- [ ] **P0** 实现检查点逻辑
|
||||
- [ ] 瘥𤩺活AI<41>扯<EFBFBD><E689AF>𣂼<EFBFBD> <20>?<3F>芸𢆡靽嘥<E99DBD>敹怎<E695B9>
|
||||
- [ ] <20><>憭帋<E686AD>摮?0銝芣<E98A9D><E88AA3>亦<EFBFBD>
|
||||
- [ ] 敹怎<E695B9><E6808E>唳旿摮睃<E691AE><E79D83>記SS嚗<53><E59A97>蝻咐SON嚗?
|
||||
- [ ] 每次AI执行成功 → 自动保存快照
|
||||
- [ ] 最多保存10个检查点
|
||||
- [ ] 快照数据存储到OSS(压缩JSON)
|
||||
|
||||
- [ ] **P0** 回滚功能
|
||||
- [ ] 撌亙<E6928C><E4BA99>𤩺溶<F0A4A9BA>?<3F>日<EFBFBD>"<22>厰僼
|
||||
- [ ] <20>孵稬<E5ADB5>日<EFBFBD> <20>?<3F>W<EFBFBD><EFBCB7>唬<EFBFBD>銝<EFBFBD>銝芣<E98A9D><E88AA3>亦<EFBFBD>
|
||||
- [ ] <20><>憭𡁏𣈲<F0A1818F>?0甈⊥伃<E28AA5><E4BC83>
|
||||
- [ ] 工具栏添加"撤销"按钮
|
||||
- [ ] 点击撤销 → 恢复到上一个检查点
|
||||
- [ ] 最多支持10次撤销
|
||||
|
||||
- [ ] **P1** 检查点列表UI
|
||||
- [ ] 侧边栏显示检查点列表
|
||||
- [ ] 瘥譍葵璉<E891B5><E79289>亦<EFBFBD><E4BAA6>曄內嚗𡁏𧒄<F0A1818F>氬<EFBFBD><E6B0AC><EFBFBD>雿𨀣<E99BBF>餈? - [ ] <20>孵稬璉<E7A8AC><E79289>亦<EFBFBD> <20>?<3F>W<EFBFBD><EFBCB7>啗砲<E59597>嗆<EFBFBD>?
|
||||
- [ ] 每个检查点显示:时间、操作描述
|
||||
- [ ] 点击检查点 → 恢复到该状态
|
||||
|
||||
#### 验收标准
|
||||
- [ ] 每次AI操作后自动保存检查点
|
||||
- [ ] 撤销功能正常工作
|
||||
@@ -346,35 +494,41 @@
|
||||
#### 导出功能实现
|
||||
- [ ] **P0** 后端导出API
|
||||
- [ ] `POST /api/v1/dc/tool-c/export/:sessionId`
|
||||
- [ ] 雿輻鍂 `openpyxl`嚗㇊ython嚗㗇<EFBFBD> `xlsx`嚗𠃊ode.js嚗? - [ ] 靽萘<E99DBD><E89098>笔<EFBFBD>Excel<65>澆<EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>MVP<56>航歲餈<E6ADB2><E9A488>
|
||||
- [ ] 使用 `openpyxl`(Python)或 `xlsx`(Node.js)
|
||||
- [ ] 保留原始Excel格式(可选,MVP可跳过)
|
||||
|
||||
- [ ] **P0** 前端导出按钮
|
||||
- [ ] 撌亙<E6928C><E4BA99>𤩺溶<F0A4A9BA>?撖澆枂"<22>厰僼
|
||||
- [ ] <20>孵稬 <20>?銝贝蝸Excel<EFBFBD><EFBFBD>辣
|
||||
- [ ] 工具栏添加"导出"按钮
|
||||
- [ ] 点击 → 下载Excel文件
|
||||
- [ ] 文件名:`原文件名_cleaned_YYYYMMDD.xlsx`
|
||||
|
||||
- [ ] **P1** 导出选项(可选)
|
||||
- [ ] 隞<>紡<EFBFBD>箔耨<E7AE94>寧<EFBFBD>銵? - [ ] 靽萘<E99DBD><E89098>瑕<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>臬辣<E887AC>𠬍<EFBFBD>
|
||||
- [ ] 仅导出修改的行
|
||||
- [ ] 保留样式(复杂,可延后)
|
||||
|
||||
#### 验收标准
|
||||
- [ ] 能成功导出Excel文件
|
||||
- [ ] 撖澆枂<E6BE86><E69E82>㺭<EFBFBD>桐<EFBFBD>銵冽聢銝<E881A2><E98A9D>?- [ ] <20><>辣<EFBFBD>齿迤蝖?- [ ] 銝贝蝸<E8B49D>笔漲敹恬<E695B9>< 3蝘𡜐<E89D98>
|
||||
- [ ] 导出的数据与表格一致
|
||||
- [ ] 文件名正确
|
||||
- [ ] 下载速度快(< 3秒)
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> Week 3嚗𡁏<EFBFBD>霂蓥<EFBFBD><EFBFBD>吔<EFBFBD>Day 11-15嚗?
|
||||
### Day 11嚗帋葉蝑匧㦤<E58CA7>舀<EFBFBD>霂?<3F>椬
|
||||
## 📅 Week 3:测试优化(Day 11-15)
|
||||
|
||||
### Day 11:中等场景测试 🟡
|
||||
|
||||
#### 测试用例执行
|
||||
- [ ] **P0** 准备测试数据
|
||||
- [ ] <20>𥕦遣瘚贝<E7989A>Excel<65><6C>辣嚗<E8BEA3><E59A97><EFBFBD>怠<EFBFBD>銝芸<E98A9D>嚗? - [ ] <20><>鉄<EFBFBD>笔<EFBFBD><E7AC94>餌<EFBFBD><E9A48C>唳旿蝷箔<E89DB7>
|
||||
- [ ] 创建测试Excel文件(包含多个列)
|
||||
- [ ] 包含真实医疗数据示例
|
||||
|
||||
- [ ] **P0** 銝剔<E98A9D><E58994>箸艶瘚贝<E7989A>嚗?銝迎<E98A9D>
|
||||
- [ ] **P0** 中等场景测试(5个)
|
||||
1. [ ] "把诊断日期和出院日期计算天数差,如果出院日期早于诊断日期则标记为异常"
|
||||
2. [ ] "<EFBFBD>寞旿<EFBFBD>賜<EFBFBD><EFBFBD>𠺶<EFBFBD><EFBFBD>葉<EFBFBD>抒<EFBFBD>蝏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌渡<EFBFBD><EFBFBD>硺<EFBFBD>銝芣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>霈∠<EFBFBD>NLR嚗<EFBFBD>僎<EFBFBD>?.5<EFBFBD><EFBFBD>蛹擃䀝<EFBFBD>銝斤<EFBFBD>"
|
||||
3. [ ] "隞𡒊<EFBFBD><EFBFBD><EFBFBD>𥁒<EFBFBD>𠰴<EFBFBD>銝剜<EFBFBD><EFBFBD>巁NM<EFBFBD><EFBFBD><EFBFBD>嚗𣬚<EFBFBD><EFBFBD>鞉鰵<EFBFBD>?
|
||||
4. [ ] "<EFBFBD>𡃏<EFBFBD><EFBFBD>见<EFBFBD><EFBFBD>?120/80'<27>澆<EFBFBD><E6BE86><EFBFBD><EFBFBD><EFBFBD>鞉𤣰蝻拙<E89DBB><E68B99>諹<EFBFBD>撘惩<E69298>嚗<EFBFBD>僎<EFBFBD>斗鱏<E69697>臬炏擃䁅<E69383><E48185>?
|
||||
5. [ ] "<EFBFBD>𣳇膄<EFBFBD>滚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D嚗䔶<EFBFBD><EFBFBD>蹱<EFBFBD><EFBFBD>啁<EFBFBD>銝<EFBFBD><EFBFBD>∟扇敶𤏪<EFBFBD><EFBFBD>寞旿撠梯<EFBFBD><EFBFBD>交<EFBFBD>嚗?
|
||||
2. [ ] "根据白细胞、中性粒细胞、淋巴细胞三个指标,计算NLR,并按2.5分为高低两组"
|
||||
3. [ ] "从病理报告列中提取TNM分期,生成新列"
|
||||
4. [ ] "把血压列的'120/80'格式拆分成收缩压和舒张压,并判断是否高血压"
|
||||
5. [ ] "删除重复的患者ID,保留最新的一条记录(根据就诊日期)"
|
||||
|
||||
#### 优化AI Prompt
|
||||
- [ ] **P1** 根据失败案例优化Prompt
|
||||
@@ -383,18 +537,19 @@
|
||||
- [ ] 增加边界情况说明
|
||||
|
||||
#### 验收标准
|
||||
- [ ] **銝剔<EFBFBD><EFBFBD>箸艶<EFBFBD>𣂼<EFBFBD><EFBFBD>?> 80%嚗?/5<>𣂼<EFBFBD>嚗?*
|
||||
- [ ] **中等场景成功率 > 80%(4/5成功)**
|
||||
|
||||
---
|
||||
|
||||
### Day 12嚗𡁻<EFBFBD>蝥批㦤<EFBFBD>舀<EFBFBD>霂?<3F>𣞁
|
||||
### Day 12:高级场景测试 🔴
|
||||
|
||||
#### 擃条漣<EFBFBD>箸艶瘚贝<EFBFBD>嚗?銝迎<E98A9D>
|
||||
#### 高级场景测试(5个)
|
||||
- [ ] **P0** 复杂场景测试
|
||||
1. [ ] "对于每个患者,找出第一次化疗日期和最后一次化疗日期,计算化疗持续时间"
|
||||
2. [ ] "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>笔<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>笔<EFBFBD><EFBFBD>園𡢿"嚗<><E59A97><EFBFBD><EFBFBD>辺隞園<E99A9E>餉<EFBFBD>嚗? 3. [ ] "<22>寞旿ALT<4C><54>ST<53><54>LP<4C><50>BIL<49>斗鱏<E69697>嘥<EFBFBD><E598A5>賢<EFBFBD>蝥?
|
||||
4. [ ] "<EFBFBD>㗇<EFBFBD><EFBFBD><EFBFBD>D<EFBFBD><EFBFBD><EFBFBD>嚗諹恣蝞埈<EFBFBD>甈⊿<EFBFBD>霈輻㮾瘥𥪯<EFBFBD>甈∠<EFBFBD><EFBFBD>輻𠈔憭批<EFBFBD><EFBFBD>睃<EFBFBD><EFBFBD>?
|
||||
5. [ ] "<EFBFBD>寞旿<EFBFBD>仿堺<EFBFBD>園𡢿嚗諹恣蝞堒迤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧶏<EFBFBD>蝏蠘恣銝滚<EFBFBD>摮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>犖<EFBFBD>?
|
||||
2. [ ] "生成生存状态和生存时间"(复杂条件逻辑)
|
||||
3. [ ] "根据ALT、AST、ALP、TBIL判断肝功能分级"
|
||||
4. [ ] "按患者ID分组,计算每次随访相比上次的肿瘤大小变化率"
|
||||
5. [ ] "根据入院时间,计算季节变量,统计不同季节的发病人数"
|
||||
|
||||
#### Prompt深度优化
|
||||
- [ ] **P1** 针对失败场景优化
|
||||
@@ -403,8 +558,8 @@
|
||||
- [ ] 增加医学规则示例
|
||||
|
||||
#### 验收标准
|
||||
- [ ] **擃条漣<EFBFBD>箸艶<EFBFBD>𣂼<EFBFBD><EFBFBD>?> 60%嚗?/5<>𣂼<EFBFBD>嚗?*
|
||||
- [ ] **<EFBFBD>颱<EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>?> 80%嚗?2/15<EFBFBD>𣂼<EFBFBD>嚗?*
|
||||
- [ ] **高级场景成功率 > 60%(3/5成功)**
|
||||
- [ ] **总体成功率 > 80%(12/15成功)**
|
||||
|
||||
---
|
||||
|
||||
@@ -412,32 +567,39 @@
|
||||
|
||||
#### 性能测试
|
||||
- [ ] **P1** 测试性能指标
|
||||
- [ ] <20><>辣銝𠹺<E98A9D><F0A0B9BA>笔漲嚗?0MB<4D><42>辣 < 5蝘𡜐<E89D98>
|
||||
- [ ] AI隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>笔漲嚗? 10蝘𡜐<E89D98>
|
||||
- [ ] Python<EFBFBD>扯<EFBFBD><EFBFBD>笔漲嚗? 5蝘𡜐<E89D98>
|
||||
- [ ] 銵冽聢<E586BD>瑟鰵<E7919F>笔漲嚗? 2蝘𡜐<E89D98>
|
||||
- [ ] 文件上传速度(10MB文件 < 5秒)
|
||||
- [ ] AI代码生成速度(< 10秒)
|
||||
- [ ] Python执行速度(< 5秒)
|
||||
- [ ] 表格刷新速度(< 2秒)
|
||||
- [ ] 端到端流程(< 20秒)
|
||||
|
||||
#### 优化措施
|
||||
- [ ] **P1** 前端优化
|
||||
- [ ] AG Grid虚拟滚动
|
||||
- [ ] React.memo优化渲染
|
||||
- [ ] <20>脫<EFBFBD>颲枏<E9A2B2>嚗Ê̌ebounce 300ms嚗?
|
||||
- [ ] 防抖输入(debounce 300ms)
|
||||
|
||||
- [ ] **P1** 后端优化
|
||||
- [ ] 数据压缩(OSS上传前)
|
||||
- [ ] 缓存会话数据(Redis可选)
|
||||
- [ ] 撟嗅<E6929F><E59785>批<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>嗅<EFBFBD><E59785>嗆<EFBFBD>銵峕㺭嚗?
|
||||
- [ ] 并发控制(限制同时执行数)
|
||||
|
||||
#### 验收标准
|
||||
- [ ] 蝡臬<E89DA1>蝡舀<E89DA1>雿?< 20蝘?- [ ] 1000銵峕㺭<E5B395>株”<E6A0AA>潔<EFBFBD><E6BD94>⊿▼
|
||||
- [ ] <20>惩<EFBFBD>摮䀹<E691AE>瞍?
|
||||
- [ ] 端到端操作 < 20秒
|
||||
- [ ] 1000行数据表格不卡顿
|
||||
- [ ] 无内存泄漏
|
||||
|
||||
---
|
||||
|
||||
### Day 14嚗𡁻<EFBFBD><EFBFBD>鞉<EFBFBD>霂?
|
||||
#### 蝡臬<E89DA1>蝡舀<E89DA1>霂?- [ ] **P0** 摰峕㟲瘚<E39FB2><E7989A>瘚贝<E7989A>嚗?0甈∴<E79488>
|
||||
### Day 14:集成测试
|
||||
|
||||
#### 端到端测试
|
||||
- [ ] **P0** 完整流程测试(10次)
|
||||
1. [ ] 上传Excel文件
|
||||
2. [ ] 查看数据表格
|
||||
3. [ ] 发送AI指令
|
||||
4. [ ] <EFBFBD>扯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>誨<EFBFBD>? 5. [ ] 撉諹<E69289>銵冽聢<E586BD>瑟鰵
|
||||
4. [ ] 执行生成的代码
|
||||
5. [ ] 验证表格刷新
|
||||
6. [ ] 测试撤销功能
|
||||
7. [ ] 导出Excel文件
|
||||
8. [ ] 验证导出数据正确
|
||||
@@ -451,19 +613,30 @@
|
||||
#### Bug修复
|
||||
- [ ] **P1** 修复测试中发现的问题
|
||||
- [ ] 记录所有bug到GitHub Issues
|
||||
- [ ] <20>劐<EFBFBD><E58A90><EFBFBD>漣靽桀<E99DBD>嚗㇊0 > P1 > P2嚗?
|
||||
- [ ] 按优先级修复(P0 > P1 > P2)
|
||||
|
||||
#### 验收标准
|
||||
- [ ] 蝡臬<E89DA1>蝡舀<E89DA1>蝔?00%<25>朞<EFBFBD>
|
||||
- [ ] 端到端流程100%通过
|
||||
- [ ] 无P0级别bug
|
||||
- [ ] P1蝥批<EFBFBD>bug < 3銝?
|
||||
- [ ] P1级别bug < 3个
|
||||
|
||||
---
|
||||
|
||||
### Day 15:MVP验收 🎉
|
||||
|
||||
#### <EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD><EFBFBD>嗆<EFBFBD>霂?- [ ] **P0** 15銝芸㦤<E88AB8>臬<EFBFBD>閬<EFBFBD><E996AC>瘚贝<E7989A>
|
||||
- [ ] <20>箇<EFBFBD><E7AE87>箸艶嚗?/5 <20>? - [ ] 銝剔<E98A9D><E58994>箸艶嚗?/5 <20>? - [ ] 擃条漣<E69DA1>箸艶嚗?/5 <20>? - [ ] **<EFBFBD>颱<EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>?> 80%**
|
||||
#### 最终验收测试
|
||||
- [ ] **P0** 15个场景全覆盖测试
|
||||
- [ ] 基础场景:5/5 ✅
|
||||
- [ ] 中等场景:4/5 ✅
|
||||
- [ ] 高级场景:3/5 ✅
|
||||
- [ ] **总体成功率 > 80%**
|
||||
|
||||
- [ ] **P0** 非功能性验收
|
||||
- [ ] 性能:端到端 < 20秒 ✅
|
||||
- [ ] 安全:AST拦截危险代码 ✅
|
||||
- [ ] 稳定:10次测试无崩溃 ✅
|
||||
- [ ] 易用:用户能独立完成任务 ✅
|
||||
|
||||
- [ ] **P0** <20>𧼮<EFBFBD><F0A7BCAE>賣<EFBFBD>折<EFBFBD><E68A98>? - [ ] <20>扯<EFBFBD>嚗𡁶垢<F0A181B6>啁垢 < 20蝘?<3F>? - [ ] 摰匧<E691B0>嚗鋫ST<53>行⏛<E8A18C>梢埯隞<E59FAF><E99A9E> <20>? - [ ] 蝔喳<E89D94>嚗?0甈⊥<E79488>霂閙<E99C82>撏拇<E6928F> <20>? - [ ] <20>梶鍂嚗𡁶鍂<F0A181B6>瑁<EFBFBD><E79181>祉<EFBFBD>摰峕<E691B0>隞餃𦛚 <20>?
|
||||
#### 文档完善
|
||||
- [ ] **P1** 更新文档
|
||||
- [ ] 用户使用手册
|
||||
@@ -472,17 +645,20 @@
|
||||
- [ ] 已知问题清单
|
||||
|
||||
#### 验收决策
|
||||
- [ ] <20>?**<2A>朞<EFBFBD>**嚗𡁏<E59A97>颱<EFBFBD><E9A2B1>𣂼<EFBFBD><F0A382BC>?> 80%嚗諹<E59A97><E8ABB9>乩<EFBFBD>銝<EFBFBD><E98A9D>嗆挾
|
||||
- [ ] <20>?**憭梯揖**嚗𡁏<E59A97>颱<EFBFBD><E9A2B1>𣂼<EFBFBD><F0A382BC>?< 60%嚗屸<E59A97>閬<EFBFBD>ivot<6F>唳芋<E594B3>踹<EFBFBD>璅∪<E79285>
|
||||
- [ ] ✅ **通过**:总体成功率 > 80%,进入下一阶段
|
||||
- [ ] ❌ **失败**:总体成功率 < 60%,需要Pivot到模板库模式
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>𤣳 瘥𤩺𠯫蝡嗘<E89DA1>璉<EFBFBD><E79289>交<EFBFBD><E4BAA4>?
|
||||
## 🔥 每日站会检查清单
|
||||
|
||||
### 每天工作开始前
|
||||
- [ ] 查看昨日遗留问题
|
||||
- [ ] 确认今日任务清单
|
||||
- [ ] 璉<><E79289>亦㴓憓<E3B493>糓<EFBFBD>行迤撣賂<E692A3>Python<6F>滚𦛚<E6BB9A><F0A69B9A>㺭<EFBFBD>桀<EFBFBD><E6A180><EFBFBD><EFBFBD>蝡留ev server嚗?
|
||||
### 瘥誩予撌乩<E6928C>蝏𤘪<E89D8F><F0A498AA>?- [ ] <20>湔鰵To-do List餈𥕦漲
|
||||
- [ ] 检查环境是否正常(Python服务、数据库、前端dev server)
|
||||
|
||||
### 每天工作结束前
|
||||
- [ ] 更新To-do List进度
|
||||
- [ ] 提交代码到Git(✅ 重要!防止丢失)
|
||||
- [ ] 记录遇到的问题和解决方案
|
||||
- [ ] 规划明日任务
|
||||
@@ -491,50 +667,60 @@
|
||||
|
||||
## ⚠️ 风险提示
|
||||
|
||||
### <EFBFBD><EFBFBD><EFBFBD>舫<EFBFBD><EFBFBD>?1. **AI<41><49><EFBFBD>韐券<E99F90>銝滨迅摰?*
|
||||
### 技术风险
|
||||
1. **AI生成质量不稳定**
|
||||
- 缓解:多轮测试,优化Prompt
|
||||
- 憭<><E686AD>㚁<EFBFBD>憭梯揖<E6A2AF>𦒘犖撌亦<E6928C><E4BAA6>蹱芋<E8B9B1>?
|
||||
- 备选:失败后人工编写模板
|
||||
|
||||
2. **Python执行安全问题**
|
||||
- 蝻栞圾嚗鋫ST<53>蹱<EFBFBD><E8B9B1><EFBFBD><EFBFBD>?+ 頞<>𧒄<EFBFBD>批<EFBFBD>
|
||||
- 憭<><E686AD>㚁<EFBFBD>Docker瘝嗵拳<E597B5>𠉛氖嚗㇊hase 2嚗?
|
||||
3. **<EFBFBD>扯<EFBFBD>銝滩噢<EFBFBD>?*
|
||||
- 缓解:AST静态检查 + 超时控制
|
||||
- 备选:Docker沙箱隔离(Phase 2)
|
||||
|
||||
3. **性能不达标**
|
||||
- 缓解:分步优化,设定性能基准
|
||||
- 憭<><E686AD>㚁<EFBFBD><E39A81>滢<EFBFBD><E6BBA2>唳旿<E594B3>讛<EFBFBD>瘙<EFBFBD><E79899>10MB <EFBFBD>?5MB嚗?
|
||||
- 备选:降低数据量要求(10MB → 5MB)
|
||||
|
||||
### 进度风险
|
||||
1. **AI<41><49><EFBFBD><EFBFBD>𣂼<EFBFBD><F0A382BC>?< 60%**
|
||||
1. **AI生成成功率 < 60%**
|
||||
- 应对:紧急会议,决定是否Pivot
|
||||
|
||||
2. **<EFBFBD>滨垢撘<EFBFBD><EFBFBD>穃辣<EFBFBD>?*
|
||||
- 摨𥪜笆嚗𡁶<E59A97><F0A181B6>𨯅I嚗諹<E59A97><E8ABB9>行瓲敹<E793B2><E695B9><EFBFBD>?
|
||||
2. **前端开发延期**
|
||||
- 应对:简化UI,聚焦核心功能
|
||||
|
||||
---
|
||||
|
||||
## 📊 成功标准(最终验收)
|
||||
|
||||
| <EFBFBD><EFBFBD><EFBFBD> | <20>格<EFBFBD> | 敶枏<E695B6> | <20>嗆<EFBFBD>?|
|
||||
| 指标 | 目标 | 当前 | 状态 |
|
||||
|------|------|------|------|
|
||||
| **<EFBFBD>箇<EFBFBD><EFBFBD>箸艶<EFBFBD>𣂼<EFBFBD><EFBFBD>?* | > 90% | 0% | <EFBFBD>𣞁 |
|
||||
| **銝剔<EFBFBD><EFBFBD>箸艶<EFBFBD>𣂼<EFBFBD><EFBFBD>?* | > 80% | 0% | <EFBFBD>𣞁 |
|
||||
| **擃条漣<EFBFBD>箸艶<EFBFBD>𣂼<EFBFBD><EFBFBD>?* | > 60% | 0% | <EFBFBD>𣞁 |
|
||||
| **<EFBFBD>颱<EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>?* | > 80% | 0% | <EFBFBD>𣞁 |
|
||||
| **蝡臬<EFBFBD>蝡舀<EFBFBD>扯<EFBFBD>** | < 20蝘?| 0蝘?| <20>𣞁 |
|
||||
| **隞<EFBFBD><EFBFBD>摰匧<EFBFBD><EFBFBD>?* | 100%<EFBFBD>行⏛ | 0% | <EFBFBD>𣞁 |
|
||||
| **基础场景成功率** | > 90% | 0% | 🔴 |
|
||||
| **中等场景成功率** | > 80% | 0% | 🔴 |
|
||||
| **高级场景成功率** | > 60% | 0% | 🔴 |
|
||||
| **总体成功率** | > 80% | 0% | 🔴 |
|
||||
| **端到端性能** | < 20秒 | 0秒 | 🔴 |
|
||||
| **代码安全性** | 100%拦截 | 0% | 🔴 |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 下一步行动(启动开发)
|
||||
|
||||
### 蝡见朖撘<EFBFBD>憪页<EFBFBD>Day 1嚗?1. **<2A>拙<EFBFBD>Python<6F>滚𦛚**嚗?撠𤩺𧒄嚗? ```bash
|
||||
### 立即开始(Day 1)
|
||||
1. **扩展Python服务**(2小时)
|
||||
```bash
|
||||
cd AIclinicalresearch/extraction_service
|
||||
# 创建dc_executor.py
|
||||
# <EFBFBD>拙<EFBFBD>main.py瘛餃<EFBFBD>2銝芰垢<EFBFBD>? # 瘚贝<E7989A><E8B49D>滚𦛚
|
||||
# 扩展main.py添加2个端点
|
||||
# 测试服务
|
||||
```
|
||||
|
||||
2. **<EFBFBD>𥕦遣<EFBFBD>𡒊垢<EFBFBD><EFBFBD>辣憭?*嚗?撠𤩺𧒄嚗? ```bash
|
||||
2. **创建后端文件夹**(1小时)
|
||||
```bash
|
||||
cd AIclinicalresearch/backend/src/modules/dc
|
||||
mkdir -p tool-c/services tool-c/controllers tool-c/routes tool-c/utils
|
||||
```
|
||||
|
||||
3. **摰䂿緵PythonExecutorService**嚗?撠𤩺𧒄嚗? - 蝻硋<E89DBB>隞<EFBFBD><E99A9E>
|
||||
3. **实现PythonExecutorService**(2小时)
|
||||
- 编写代码
|
||||
- 单元测试
|
||||
- 集成测试
|
||||
|
||||
|
||||
Reference in New Issue
Block a user