3.3 KiB
3.3 KiB
前端重构接力说明
当前仓库处于“旧版逻辑 + Vite 构建 + 局部组件化”的中间态,后续需要继续完成 Pinia 状态拆分与组件化重构。以下信息供下一位开发者参考。
已完成工作
- 整体迁移:旧版
index.html + app.js的 DOM/逻辑已迁入static/src/App.vue与static/src/app.ts,由 Vite + Vue 3 构建,入口main.ts使用标准createApp(App)。 - 组件抽离:
ConversationSidebar.vue:对话历史侧栏、搜索、折叠按钮。LeftPanel.vue:左侧 Logo 卡 + 三合一面板(文件树/待办/子智能体)。FileNode.vue:文件树递归节点。TokenDrawer.vue:Token/Quota/资源统计抽屉。FocusPanel.vue:右侧聚焦文件展示。PersonalizationDrawer.vue:个人空间抽屉。
- 依赖抽离:图标常量集中在
static/src/utils/icons.ts,组件复用。KaTeX/Prism/Socket.IO 改用 npm 依赖。 - 构建验证:
npm run build能通过,static/dist生成最新产物。
待办事项
- Pinia Store 拆分:按照
doc/frontend/componentization_plan.md中的表格,将app.ts的 state/methods 拆成多个 store(连接、系统、对话、聊天、资源、文件、工具、个性化、UI 等),组件通过 store 获取/更新状态,逐步移除this.xxx。 - 组件化剩余区域:
- 聊天区(消息列表、Action 卡、append/modify/system 块)。
- 输入区/Quick Menu/Quick Settings。
- Toast/Confirm/ContextMenu/EasterEgg overlay。
- 右侧聚焦的滚动锁/按钮等交互细节。
- 逻辑封装:将 Socket 事件、滚动锁、彩蛋执行、工具栈维护等重逻辑拆到 composables(例如
useLegacySocket、useScrollLock、useEasterEgg、useToolActions),并与 Pinia store 协调。 - 样式模块化:目前仍依赖
static/style.css,可逐步将各组件的样式拆至局部或 SCSS 文件,保持legacy视觉一致。
推荐实施顺序
- 建立基础 store(Connection/System/Conversation/Chat),先把最常用的 state 拆出去,再让
ConversationSidebar、LeftPanel等组件改用 store。 - 按模块迁移模板:聊天区 → 输入区 → Toast/Overlay → 右侧面板。每次迁移时将相关 methods 搬入 store/composable。
- 集中处理高阶逻辑:Quick Menu、工具禁用、彩蛋、子智能体轮询、Token/Quota 轮询等,确保事件流与旧版一致。
- 每完成一块运行
npm run build并手测:对话切换、发送/停止、工具流式、彩蛋触发、个人空间 CRUD、聚焦面板更新等,确保与static/old_version_backup/前端备份一致。
注意事项
- 保持旧版 API 和 Socket 事件名称不变。
- UI 细节(aria-label、按钮提示、SVG)需与备份版一致,参见
doc/frontend/legacy_ui_spec.md。 window.ensureCsrfToken、window.requestSocketToken、EasterEggRegistry等仍由后端注入,组件需要容错。- 过程中可参考
/tmp/backup_App_corrupted.vue或static/old_version_backup/前端备份/来比对原结构。
如遇上下文不足,可将正在拆分的模板块另存临时文件,逐段迁移。完成全部 Pinia + 组件化后,即可开始清理 app.ts 中不再需要的逻辑,并考虑拆分 CSS。祝顺利!