# 功能测试 - 反向追溯

> 模块：数据中台 / 基础追溯 / 反向追溯 (Backward Traceability)
> 路由：`/data_middleground/basic_traceability/reverse_direction_traceability`

## 测试前置条件

- 测试账号具备访问“反向追溯”的菜单权限。
- 准备至少 2 个电池条码：
  - 一个存在完整反向追溯关系图的电池条码。
  - 一个不存在追溯数据或数据为空的电池条码。
- 后端接口 `data_middleground/basic_traceability/reverse_direction_traceability/get_data` 和 `export_tree` 可正常访问。

## 测试任务列表

| 序号 | 测试项 | 操作步骤 | 预期结果 |
|---:|---|---|---|
| 1 | 页面入口 | 从菜单进入“反向追溯”，或直接访问 `/data_middleground/basic_traceability/reverse_direction_traceability` | 页面正常打开，显示电池条码输入框、查询、导出、重置按钮和空态区域 |
| 2 | 空输入查询 | 不输入电池条码，点击“查询” | 页面提示请输入电池条码，不发起有效查询 |
| 3 | 有效条码查询 | 输入存在追溯数据的电池条码，点击“查询” | 页面通过 relation-graph 展示追溯图谱，节点包含物料名称、编码、批次、工序、时间、设备等信息 |
| 4 | 无数据条码查询 | 输入不存在追溯数据的电池条码，点击“查询” | 页面保持空态或显示无节点，不出现脚本错误 |
| 5 | 横向/纵向切换 | 查询出数据后，切换“横向图谱”和“纵向图谱” | 追溯节点展示方向切换，页面不丢失数据 |
| 6 | 图谱拖拽与缩放 | 查询出数据后，在图谱空白区域拖拽，并使用鼠标滚轮缩放 | 图谱内容可以平移和缩放，节点不会被页面容器裁切 |
| 7 | 节点内容完整性 | 查看包含较多字段的节点，滚动节点内容区域 | 节点卡片外框完整显示，字段内容可在节点内部滚动查看 |
| 8 | 物料编码定位 | 查询出数据后，输入某个节点的物料编码，点击定位确认 | 匹配节点高亮并居中聚焦到可视区域 |
| 9 | 物料批次定位 | 输入某个节点的物料批次，点击定位确认 | 匹配节点高亮并居中聚焦到可视区域 |
| 10 | 工序单元定位 | 输入某个制成品节点的工序单元编码，点击定位确认 | 匹配节点高亮并居中聚焦到可视区域；不存在时提示未找到匹配节点 |
| 11 | 导出前校验 | 未输入电池条码时点击“导出” | 页面提示请输入电池条码 |
| 12 | 查询前导出 | 输入电池条码但未查询出追溯树，点击“导出” | 页面提示请先查询追溯数据后再导出 |
| 13 | 正常导出 | 查询出追溯树后点击“导出” | 调用导出接口，浏览器开始下载或打开导出文件 |
| 14 | 重置功能 | 查询出追溯树后点击“重置” | 输入框、追溯树、定位输入和高亮状态全部清空 |
| 15 | 国际化检查 | 切换中英文语言后重新进入页面 | 页面按钮、节点字段和提示文案随语言切换显示 |

## 回归关注点

- 接口返回 `relation_graph.nodes` 或 `relation_graph.lines` 为空时页面不能报错。
- 图谱必须使用 `relation-graph` 渲染，支持拖拽、缩放和定位聚焦。
- 节点字段较多时，节点卡片外框不应被裁切，内容应可在卡片内部滚动查看。
- 导出接口参数中的 `tree_list` 应为当前追溯树节点数组 JSON。
- 路由参数携带 `battery_id` 时，页面应能自动查询对应追溯数据。
