Files
Mdeical_Sur_Report/工程分析/20260419_0344/需求分析.md
admin c1d2438d2b fix(editor): AI只聊天不修改——解绑SystemPrompt目标区域依赖 + 增加光标插入降级
- systemPrompt条件从'aiModifyEnabled && targetRegionEl'改为'aiModifyEnabled',确保开启修改模式后大模型始终返回updatedHtml
- 接收updatedHtml逻辑增加if/else分支:targetRegionEl存在时走diff弹窗,不存在时调用execCmd('insertHTML')降级插入光标位置
- 参考参考-ReportEditor.tsx中injectAIText的降级机制
2026-04-19 03:47:14 +08:00

54 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 需求分析
## 时间戳
2026-04-19 03:44
## 需求来源
用户在 report-editor 中输入「请随机填充文本内容」AI 在聊天气泡中正常回复,但编辑器中的「手术步骤-AI可编辑部分」没有修改。
## 现象
1. AI 聊天面板有输出reply
2. 编辑器中的 AI 可编辑区域内容未更新
3. 没有触发 diff 确认弹窗
## 根因分析
对比当前代码与 `参考-ReportEditor.tsx`,问题有两个层面:
### 层面 1System Prompt 条件过于严苛
当前代码:
```tsx
const systemPrompt = aiModifyEnabled && targetRegionEl ? '...修改HTML...' : '...纯聊天...'
```
`targetRegionEl` 的获取依赖 `aiTargetRegion`(默认 `'none'`)。如果用户未在下拉框中选中具体区域,`targetRegionEl``null`systemPrompt 降级为纯聊天模式,大模型根本不会返回 `updatedHtml` 字段。
参考代码:
```tsx
const systemPrompt = aiModifyEnabled ? '...修改HTML...' : '...纯聊天...'
```
只依赖 `aiModifyEnabled`,只要用户开启「允许修改正文」,大模型就会返回 `updatedHtml`
### 层面 2接收逻辑缺少降级插入
当前代码:
```tsx
if (responseJson.updatedHtml && aiModifyEnabled && targetRegionEl) {
setDiffModal({...})
}
```
同样因为 `targetRegionEl``null`,即使大模型返回了 `updatedHtml`,也会被丢弃。
参考代码 `injectAIText`
```tsx
if (targetRegion) {
targetRegion.innerHTML = ... // 注入目标区域
} else {
execCmd('insertHTML', htmlContent); // 降级:插入光标位置
}
```
找不到目标区域时,直接将内容插入编辑器当前光标位置。
## 约束条件
- 当前代码已有 `execCmd` 辅助函数,可直接复用
- 需要保留 diff 弹窗流程(目标区域存在时)
- `aiTargetRegion` 默认值 `'none'` 可保留,但需通过降级逻辑补偿