03-1008260-对话框添加到文章.md
5.08 KB
需求 1008260 - 对话框添加到文章中
原始需求(一字不差)
需求标题:【工作台】对话框,添加到文章中
状态:规划中 | 负责人:尹帮会 | 优先级:High | 创建者:Ryan章桦
创建时间:2026-03-11 14:41:03 | 修改时间:2026-03-12 17:32:34
原始描述:
点击按钮之后,把对话上面的内容,添加到当前编辑器打开的Markdown文件的光标处。
[图片: https://file.tapd.cn//tfl/captures/2026-03/tapd_67139335_base64_1773211208_459.png]
AI Plan(TAPD 自动生成,仅供参考):
### 需求摘要
在 LinkMed 工作台,点击对话框中的「添加到文章」按钮,将当前对话上方的指定内容插入到当前已打开 Markdown 编辑器的光标位置。
### 涉及模块
- linkmed-vue3/workspace
- linkmed-vue3/shared
### 改动文件清单
1. linkmed-vue3/src/pages/Workspace.vue
### 需要新增/修改的接口
无(不涉及后端接口调用)
### 数据库变更(Flyway)
无
### 开发步骤
1. 确认当前 Workspace.vue 中是否存在对话框组件、Markdown 编辑器组件及其对外暴露的 insertContentAtCursor 方法
2. 在对话框组件中新增「添加到文章」按钮
3. 实现点击按钮时获取当前对话上方指定内容的逻辑
4. 调用 Markdown 编辑器或状态管理的插入内容方法,将获取到的对话内容插入到光标处
### 验收用例
1. 当未打开任何 Markdown 文件时,点击「添加到文章」按钮,不执行插入且有友好提示
2. 当打开 Markdown 文件但光标未定位时,点击「添加到文章」按钮,内容插入到文件末尾
3. 当打开 Markdown 文件且光标定位在中间时,点击「添加到文章」按钮,内容准确插入到光标位置
4. 插入的内容格式需符合 Markdown 规范(保留换行、标题等原始格式)
### 风险与依赖
- 依赖现有对话框组件能正确暴露或获取当前对话内容的能力
- 依赖现有 Markdown 编辑器组件或状态管理能提供稳定的 insertContentAtCursor 方法
复杂度:Low
图片理解
设计图尺寸:2016 × 1604 像素(完整页面截图)
图片内容描述:
整体布局是工作台双栏视图:
- 左侧:文档编辑区域,显示正在编辑的医学文档(放疗相关内容,包含公式和分段文字)
- 右侧:AI Chat 对话面板,展示 AI 生成的回答内容
关键标注:红色箭头指向左侧文档区域底部的输入框旁边,注释文字写道:「增加一个按钮,'添加到文章中'」
按钮位置:图中红色箭头明确指向对话框底部操作区(AI 回答气泡下方的操作按钮栏),说明「添加到文章」按钮应该紧挨着 AI 回答气泡,在每条 AI 回复下方的操作行中显示。
设计意图:用户在工作台看到 AI 生成的内容后,可以一键将该条 AI 回答插入到当前正在编辑的文档中的光标位置。
实现方案
功能描述
在每条 AI 回答气泡下方的操作区,新增「添加到文章」按钮。点击后将该条回答的 Markdown 内容插入到当前激活编辑器的光标位置。
调用链路
AgentPanelBody.vue(按钮点击)
→ emit('add-to-article', content)
→ IntelligencePanel.vue(透传)
→ emit('add-to-article', content)
→ Workspace.vue(处理)
→ activeEditorRef.insertTextAtCursor(content)
实现细节
-
AffineEditor.vue:在
defineExpose中暴露insertTextAtCursor方法(原已有,只新增暴露) -
AgentPanelBody.vue:
- 新增
add-to-articleemit 事件 - ask 模式和 agent 模式的 AI 回答操作区都新增「添加到文章」按钮
- 添加
handleAddToArticle处理函数
- 新增
-
IntelligencePanel.vue:新增
add-to-articleemit 并透传 -
Workspace.vue:实现
handleAddToArticle,检查当前 tab 类型,调用编辑器插入
图标
创建 public/tianjia.svg - 文档加号图标(SVG 格式,带加号的文档图标)
修改的文件
-
src/components/Workspace/AffineEditor.vue:暴露 insertTextAtCursor -
src/components/AgentPanel/AgentPanelBody.vue:添加按钮和事件 -
src/layout/IntelligencePanel.vue:透传事件 -
src/pages/Workspace.vue:监听事件并调用编辑器 -
public/tianjia.svg:新增图标文件
测试结果
-
npm run type-check通过,无 TypeScript 错误
测试覆盖
单元测试(vitest)
文件:src/test/features/text-reference-format.test.ts(1008260 相关部分)
| 测试组 | 用例 |
|---|---|
| 添加到文章内容校验 | 有内容通过;空字符串失败并提示;纯空白失败;Markdown 格式内容通过;前后空白 trim 后有内容则通过 |
E2E 测试(Playwright)
文件:e2e/tests/workspace-features.spec.ts(含 1008260 相关 3 个用例)
- 工作台右侧对话区存在 AI 回答操作栏
- 对话区 AI 回答操作区包含添加到文章按钮(tianjia.svg 图标)
- AgentChat 输入区存在文本引用或截图预览区域挂载点