31 lines
2.1 KiB
Markdown
31 lines
2.1 KiB
Markdown
# 前端组件化 Phase 3 – 聊天区实时化
|
||
|
||
## 阶段目标
|
||
1. 将 legacy `static/app.js` 中的聊天逻辑迁移到 Vue/Pinia,覆盖历史记录、实时消息、输入/工具/上传等能力。
|
||
2. 建立统一的状态/通知体系(用量、资源、toast/confirm),为后续样式统一和其它页面迁移打基础。
|
||
|
||
## 交付进度
|
||
|
||
### Step 1 – 历史消息
|
||
- `useChatStore` 加载 `/api/conversations/<id>/messages` 并在 ChatArea 显示历史记录,支持错误提示/滚动。
|
||
|
||
### Step 2 – 实时通信 + 输入区 + 快捷菜单
|
||
- `useConnectionStore` 接入 `socket.io-client`,`useChatStore` 监听 `ai_message_start`/`thinking_*`/`text_*`/`ai_message_end`/工具事件并渲染流式内容。
|
||
- ChatArea 输入区支持 Ctrl+Enter 发送、停止按钮、快捷菜单(上传 & 工具开关),操作成功/失败都通过 toast 提示。
|
||
|
||
### Step 3 – Token/资源面板 + 工具卡片/Markdown
|
||
- `useResourceStore` + `TokenDrawer` 负责 Token/Quota/容器/存储可视化并定时轮询。
|
||
- MarkdownBlock 结合 `marked + prismjs` 渲染聊天内容/思考流,代码块支持高亮与复制。
|
||
- 工具事件在消息下方以卡片展示状态/提示/结果,彻底脱离 legacy DOM。
|
||
- `useToolStore` 管理 `/api/tool-settings`,QuickMenu UI 与上传入口迁至 Vue。
|
||
- 新的 `useUiStore` + `ToastStack/ConfirmDialog` 提供全局通知/确认,旧版 alert/confirm 正逐步替换。
|
||
|
||
## 下一阶段计划
|
||
1. **工具卡片增强**:支持命令输出、文件 diff、错误详情等,匹配 legacy Tool UI。
|
||
2. **提示体系统一**:将所有 `pushToast`/`confirmAction` 调用迁到 Pinia store,统一文案与样式。
|
||
3. **右侧聚焦/个性化面板**:组件化 Focus Files 与 Personalization Drawer,与新聊天区联动。
|
||
4. **样式统一**:整理 CSS/变量,让 Token Drawer、聊天气泡、工具卡片等跟 legacy 视觉一致,避免层级堆叠。
|
||
5. **其它交互**:如滚动锁、终端入口、工具提示等,让新版 UI 完全覆盖旧版功能。
|
||
|
||
完成上述步骤后即可进入 Phase 4,重点处理聚焦面板、个性化设置、全局主题与其它页面。
|