4.2 KiB
4.2 KiB
实现方案 — 2026-04-19-02-26-05
1. 方案概述
基于现有 contentEditable 架构,引入 ai-region DOM 区块作为 AI 的"手术锚点"。通过标准 Fetch API 接入 Kimi 多模态接口,采用 JSON Schema 约束输出。所有 AI 状态集中在 ReportEditor 管理,TemplateManage 仅负责区域插入。
2. 详细步骤
步骤 1:src/types.ts — 扩展 SystemSettings
目标文件:src/types.ts
修改内容:
SystemSettings接口新增kimiApiKey?: string和kimiApiEndpoint?: string- 默认值兜底在
SystemSettings.tsx中处理
步骤 2:src/pages/SystemSettings.tsx — 完善 AI 接口配置
目标文件:src/pages/SystemSettings.tsx
修改内容:
- AI 接口集成卡片中,将现有的
apiEndpoint/apiKey的 placeholder 和 label 改为明确指向 Kimi testApi函数改为真实调用 Kimi/v1/models或简单 chat completion 进行连通性测试resetToDefault中保留新字段的默认空值
步骤 3:src/pages/TemplateManage.tsx — 工具栏新增 AI 区域按钮
目标文件:src/pages/TemplateManage.tsx
修改内容:
- import 中增加
Botfromlucide-react - 新增
insertAiRegion函数:prompt 输入名称 → 重名检查(querySelector([data-ai-id="..."]))→execCommand('insertHTML')插入标准ai-regionDOM - 工具栏 JSX 中在
ImageIcon右侧新增蓝色Bot按钮 - 插入后调用
saveTemplateContent()
步骤 4:src/pages/ReportEditor.tsx — 工具栏 + activeTab 扩展
目标文件:src/pages/ReportEditor.tsx
修改内容:
- import 中增加
Bot,Mic,MicOff,ImagePlus,Sparkles,Send等图标 activeTab类型扩展为'info' | 'video' | 'ai'- 工具栏 JSX 中在
ImageIcon右侧新增蓝色Bot按钮及insertAiRegion函数 - 右侧 Tab 按钮区新增 "AI撰写" 切换按钮
步骤 5:src/pages/ReportEditor.tsx — AI 核心状态与逻辑
目标文件:src/pages/ReportEditor.tsx
修改内容:
- 新增 State:
chatInput,chatMessages,isGeneratingaiSelectedFrames,aiTargetRegion,aiModifyEnabledisListening,aiUploadedImages,speechRecognitionRefquickPrompts,isEditingPromptsdiffModal
- 新增函数:
checkAiRegions(): 扫描编辑器内所有.ai-region返回 id/title 列表toggleListening(): Web Speech API 语音识别handleAIGenerate(text): 组装多模态 message → Fetch 调用 Kimi → 解析 JSON → 更新聊天 → 触发 DiffconfirmAiInjection(newHtml, regionId): 注入 HTML → 视觉高亮动画 → saveDraft
- 注意:所有 DOM 修改后必须同步
contentRef.current = editorRef.current.innerHTML并saveDraftToStorage()
步骤 6:src/pages/ReportEditor.tsx — AI 面板 UI
目标文件:src/pages/ReportEditor.tsx
修改内容:
- 在
activeTab === 'ai'分支中渲染完整面板:- 顶部:聊天气泡区(user 右蓝 / model 左白)
- 中部:区域锚定下拉 + "允许修改正文" checkbox
- 中下部:关键帧缩略图多选 + 本地图片预览
- 底部:快捷指令胶囊 + 多行输入框(带 Mic / ImagePlus / Send 按钮)
- 在最外层新增
diffModal弹窗 DOM(左右对比、可编辑右侧、确认/放弃按钮)
步骤 7:src/index.css — AI 区域打印样式
目标文件:src/index.css
修改内容:
@media print中隐藏.ai-region的蓝色边框和标签,或将其设为透明/灰色,避免打印时显示编辑态样式
3. 依赖关系
- 步骤 1(types)必须在步骤 2/3/4/5/6 之前
- 步骤 3(TemplateManage)和步骤 4-6(ReportEditor)可并行
- 步骤 2(SystemSettings)可独立并行
- 步骤 7(CSS)在最后执行
4. 风险预案
- 若 Kimi API 调用失败,catch 中向聊天列表追加
[系统错误]消息,不阻断页面 - 若
JSON.parse失败,尝试用正则提取 JSON 子串后再解析,仍失败则展示原始文本 - 若用户浏览器不支持 Web Speech API,点击麦克风时 alert 提示并优雅降级
- 若
ai-region被用户手动删除,下拉选择器实时扫描会同步更新为空