agent-Specialization/doc/frontend/next_steps.md

3.3 KiB
Raw Blame History

前端重构接力说明

当前仓库处于“旧版逻辑 + Vite 构建 + 局部组件化”的中间态,后续需要继续完成 Pinia 状态拆分与组件化重构。以下信息供下一位开发者参考。

已完成工作

  1. 整体迁移:旧版 index.html + app.js 的 DOM/逻辑已迁入 static/src/App.vuestatic/src/app.ts,由 Vite + Vue 3 构建,入口 main.ts 使用标准 createApp(App)
  2. 组件抽离
    • ConversationSidebar.vue:对话历史侧栏、搜索、折叠按钮。
    • LeftPanel.vue:左侧 Logo 卡 + 三合一面板(文件树/待办/子智能体)。
    • FileNode.vue:文件树递归节点。
    • TokenDrawer.vueToken/Quota/资源统计抽屉。
    • FocusPanel.vue:右侧聚焦文件展示。
    • PersonalizationDrawer.vue:个人空间抽屉。
  3. 依赖抽离:图标常量集中在 static/src/utils/icons.ts组件复用。KaTeX/Prism/Socket.IO 改用 npm 依赖。
  4. 构建验证npm run build 能通过,static/dist 生成最新产物。

待办事项

  1. Pinia Store 拆分:按照 doc/frontend/componentization_plan.md 中的表格,将 app.ts 的 state/methods 拆成多个 store连接、系统、对话、聊天、资源、文件、工具、个性化、UI 等),组件通过 store 获取/更新状态,逐步移除 this.xxx
  2. 组件化剩余区域
    • 聊天区消息列表、Action 卡、append/modify/system 块)。
    • 输入区/Quick Menu/Quick Settings。
    • Toast/Confirm/ContextMenu/EasterEgg overlay。
    • 右侧聚焦的滚动锁/按钮等交互细节。
  3. 逻辑封装:将 Socket 事件、滚动锁、彩蛋执行、工具栈维护等重逻辑拆到 composables例如 useLegacySocketuseScrollLockuseEasterEgguseToolActions),并与 Pinia store 协调。
  4. 样式模块化:目前仍依赖 static/style.css,可逐步将各组件的样式拆至局部或 SCSS 文件,保持 legacy 视觉一致。

推荐实施顺序

  1. 建立基础 storeConnection/System/Conversation/Chat先把最常用的 state 拆出去,再让 ConversationSidebarLeftPanel 等组件改用 store。
  2. 按模块迁移模板:聊天区 → 输入区 → Toast/Overlay → 右侧面板。每次迁移时将相关 methods 搬入 store/composable。
  3. 集中处理高阶逻辑Quick Menu、工具禁用、彩蛋、子智能体轮询、Token/Quota 轮询等,确保事件流与旧版一致。
  4. 每完成一块运行 npm run build 并手测:对话切换、发送/停止、工具流式、彩蛋触发、个人空间 CRUD、聚焦面板更新等确保与 static/old_version_backup/前端备份 一致。

注意事项

  • 保持旧版 API 和 Socket 事件名称不变。
  • UI 细节aria-label、按钮提示、SVG需与备份版一致参见 doc/frontend/legacy_ui_spec.md
  • window.ensureCsrfTokenwindow.requestSocketTokenEasterEggRegistry 等仍由后端注入,组件需要容错。
  • 过程中可参考 /tmp/backup_App_corrupted.vuestatic/old_version_backup/前端备份/ 来比对原结构。

如遇上下文不足,可将正在拆分的模板块另存临时文件,逐段迁移。完成全部 Pinia + 组件化后,即可开始清理 app.ts 中不再需要的逻辑,并考虑拆分 CSS。祝顺利