2.1 KiB
2.1 KiB
前端组件化 Phase 3 – 聊天区实时化
阶段目标
- 将 legacy
static/app.js中的聊天逻辑迁移到 Vue/Pinia,覆盖历史记录、实时消息、输入/工具/上传等能力。 - 建立统一的状态/通知体系(用量、资源、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 正逐步替换。
下一阶段计划
- 工具卡片增强:支持命令输出、文件 diff、错误详情等,匹配 legacy Tool UI。
- 提示体系统一:将所有
pushToast/confirmAction调用迁到 Pinia store,统一文案与样式。 - 右侧聚焦/个性化面板:组件化 Focus Files 与 Personalization Drawer,与新聊天区联动。
- 样式统一:整理 CSS/变量,让 Token Drawer、聊天气泡、工具卡片等跟 legacy 视觉一致,避免层级堆叠。
- 其它交互:如滚动锁、终端入口、工具提示等,让新版 UI 完全覆盖旧版功能。
完成上述步骤后即可进入 Phase 4,重点处理聚焦面板、个性化设置、全局主题与其它页面。