Files
Mdeical_Sur_Report/工程分析/20260419_2344/功能变更需求文档.md
admin e549419a4c feat: 模板切换重置AI对话+Diff间距修复+API密钥DOM安全+模型切换(20260419_2344)
- 切换模板时同步清空 chatMessages/chatInput/aiUploadedImages/aiSelectedFrames
- 修复stripHtml双换行导致diff modal原始版本段落间距过大
- API密钥input改为ref非受控组件, DOM中不再出现value=sk-xxx属性
- 默认模型名改为 moonshot-v1-32k-vision-preview
2026-04-19 23:50:51 +08:00

59 lines
2.3 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.
# 功能变更需求文档20260419_2344
## 需求 1切换模板时重置 AI 对话内容
### 问题背景
当前在顶部下拉框切换模板时,代码只替换了编辑器内容和 reportData但右侧 AI 聊天面板中的历史对话chatMessages和输入框内容chatInput仍然残留与新模板不匹配。
### 需求描述
`ReportEditor.tsx` 模板切换的 `useEffect` 中,同步清空 AI 相关状态:
- `setChatMessages([])`
- `setChatInput('')`
- `setAiUploadedImages([])`
- `setAiSelectedFrames([])`
---
## 需求 2修复"AI 修改确认"弹窗原始版本段落间距过大
### 问题背景
Diff 弹窗左侧"原始版本"中,段落之间的间距明显过大(截图显示有大段空白),而右侧"AI 提议版本"间距正常。
### 根因分析
`stripHtml` 函数中手动在每个 `</p>` 后插入 `\n`
```ts
tmp.innerHTML = html.replace(/<\/p>/gi, '</p>\n').replace(/<br\s*\/?>/gi, '\n');
```
而浏览器 `innerText` 本身就会在块级 `<p>` 元素之间自动插入换行。两者叠加导致双换行 → `computeDiffHtml``\n` 转为 `<br>` → 左侧显示双 `<br>` 间距。
### 需求描述
移除 `stripHtml``</p>\n` 的手动插入,仅保留 `<br>``\n` 的逻辑,让 `innerText` 自然处理段落间距。
---
## 需求 3修复 API 密钥在 DOM 源码中暴露
### 问题背景
即使 `type="password"`,浏览器的 Elements 面板中仍可直接看到 `<input value="sk-2IAFn8ORoSdUcCxYX6DmXJWbH7BxftSSA8kN88mD1KUDTmkv">` 的完整明文。
### 需求描述
将 API Key 输入框从 React 受控组件(`value={...}`)改为 ref 控制的非受控组件:
- JSX 中不写 `value` / `defaultValue` prop
- 通过 `useEffect` + `useRef` 在 JavaScript 层面设置 DOM 的 `value` property非 HTML attribute
- 当 provider 切换或 apiKey 变化时ref 同步更新 input 值
- 添加安全检查:仅当 ref 当前值与目标值不同时才设置,避免覆盖用户正在输入的字符
---
## 需求 4默认模型名改为 moonshot-v1-32k-vision-preview
### 需求描述
将 Kimi 默认模型从 `moonshot-v1-auto` 改为 `moonshot-v1-32k-vision-preview`,支持视觉输入。
---
## 影响范围
- `src/pages/ReportEditor.tsx`
- `src/pages/SystemSettings.tsx`
- `src/types.ts`