# 前端重构接力说明 当前仓库处于“旧版逻辑 + Vite 构建 + 局部组件化”的中间态,后续需要继续完成 Pinia 状态拆分与组件化重构。以下信息供下一位开发者参考。 ## 已完成工作 1. **整体迁移**:旧版 `index.html + app.js` 的 DOM/逻辑已迁入 `static/src/App.vue` 与 `static/src/app.ts`,由 Vite + Vue 3 构建,入口 `main.ts` 使用标准 `createApp(App)`。 2. **组件抽离**: - `ConversationSidebar.vue`:对话历史侧栏、搜索、折叠按钮。 - `LeftPanel.vue`:左侧 Logo 卡 + 三合一面板(文件树/待办/子智能体)。 - `FileNode.vue`:文件树递归节点。 - `TokenDrawer.vue`:Token/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(例如 `useLegacySocket`、`useScrollLock`、`useEasterEgg`、`useToolActions`),并与 Pinia store 协调。 4. **样式模块化**:目前仍依赖 `static/style.css`,可逐步将各组件的样式拆至局部或 SCSS 文件,保持 `legacy` 视觉一致。 ## 推荐实施顺序 1. 建立基础 store(Connection/System/Conversation/Chat),先把最常用的 state 拆出去,再让 `ConversationSidebar`、`LeftPanel` 等组件改用 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.ensureCsrfToken`、`window.requestSocketToken`、`EasterEggRegistry` 等仍由后端注入,组件需要容错。 - 过程中可参考 `/tmp/backup_App_corrupted.vue` 或 `static/old_version_backup/前端备份/` 来比对原结构。 如遇上下文不足,可将正在拆分的模板块另存临时文件,逐段迁移。完成全部 Pinia + 组件化后,即可开始清理 `app.ts` 中不再需要的逻辑,并考虑拆分 CSS。祝顺利!