- Intercept Ctrl+Z/Y keyboard shortcuts in keydown listener and route
to custom undoStack/redoStack to fix undo inconsistency.
- Replace execCommand('insertHTML') with precise Range.insertNode()
in insertSmartField to prevent <span> escaping out of <p> when
preceded by <br>.
83 lines
3.0 KiB
Markdown
83 lines
3.0 KiB
Markdown
# 测试方案 — 2026-04-17-13-32-07
|
||
|
||
## 测试目标
|
||
|
||
验证 `TemplateManage.tsx` 中以下两项修复是否生效且无副作用:
|
||
1. `Ctrl+Z` / `Ctrl+Y` / `Ctrl+Shift+Z` 快捷键正确调用自定义 Undo/Redo。
|
||
2. 在段落末尾(含 `<br>`)插入 `smart-field-wrapper` 不再换行错位。
|
||
|
||
---
|
||
|
||
## 测试步骤
|
||
|
||
### 1. 编译检查
|
||
```bash
|
||
npm run lint
|
||
```
|
||
- **预期结果**:`tsc --noEmit` 通过,0 errors。
|
||
|
||
---
|
||
|
||
### 2. 快捷键 Undo/Redo 测试
|
||
|
||
**前置条件**:登录后进入 `/template-manage`,选中任意模板。
|
||
|
||
#### 2.1 删除字段后撤销
|
||
1. 在编辑器中点击一个已有的 `smart-field-wrapper` 的 × 按钮(或通过 Backspace/Delete 删除字段)。
|
||
2. **立刻按下 `Ctrl+Z`**。
|
||
- **预期结果**:被删除的字段完整恢复,内容与样式均正常。
|
||
|
||
#### 2.2 撤销后再重做
|
||
1. 完成步骤 2.1 后,**按下 `Ctrl+Y`**(或 `Ctrl+Shift+Z`)。
|
||
- **预期结果**:刚刚恢复的字段再次被删除。
|
||
|
||
#### 2.3 插入字段后撤销
|
||
1. 从右侧字段库点击任意字段插入到编辑器。
|
||
2. **按下 `Ctrl+Z`**。
|
||
- **预期结果**:刚插入的字段消失,编辑器恢复到插入前的状态。
|
||
|
||
#### 2.4 多次撤销
|
||
1. 连续进行多次编辑操作(插入字段、删除字段、输入文字)。
|
||
2. 连续多次按 `Ctrl+Z`。
|
||
- **预期结果**:每次按 `Ctrl+Z` 都按自定义历史栈顺序回退一步;不会触发浏览器原生 undo 造成状态混乱。
|
||
|
||
---
|
||
|
||
### 3. 插入字段排版测试
|
||
|
||
**前置条件**:编辑器中存在一个以 `<br>` 结尾的 `<p>` 标签,例如:
|
||
```html
|
||
<p style="font-family: SimSun;">
|
||
<strong>手术日期:</strong><br>
|
||
</p>
|
||
```
|
||
|
||
#### 3.1 在 `<br>` 后插入字段
|
||
1. 将光标放到 `<strong>手术日期:</strong>` 后面的空白处(即 `<br>` 附近)。
|
||
2. 从右侧字段库点击 `手术日期` 字段插入。
|
||
- **预期结果**:`smart-field-wrapper` 出现在 `<p>` 标签内部,与 `<strong>手术日期:</strong>` 保持在同一行,**不会**跑到 `<p>` 外面形成新段落。
|
||
|
||
#### 3.2 段中插入字段
|
||
1. 在正常段落(如 `姓名:xxx`)中间插入字段。
|
||
- **预期结果**:字段与前后文字保持在同一行,排版正常。
|
||
|
||
#### 3.3 已有字段附近插入
|
||
1. 在已有的 `smart-field-wrapper` 前后插入新字段(只要字段 key 不同,允许插入)。
|
||
- **预期结果**:新字段正确插入,不会与已有字段重叠或被挤到下一行。
|
||
|
||
---
|
||
|
||
### 4. 回归测试
|
||
|
||
1. **保存模板**:进行任意编辑后点击「保存模板」,刷新页面,确认内容已持久化。
|
||
2. **打印预览**:点击打印预览按钮,确认字段显示正常。
|
||
3. **工具栏撤销/重做按钮**:确认点击工具栏的撤销/重做按钮依然工作正常。
|
||
4. **Backspace/Delete 边界拦截**:确认光标紧邻字段时按 Backspace/Delete 仍然只删除字段本身,不会误删整段。
|
||
|
||
---
|
||
|
||
## 判定标准
|
||
|
||
- 所有编译检查和手工测试均通过,方可认为任务完成。
|
||
- 若任一测试失败,回滚修改并重新分析根因。
|