diff --git a/docs/task/270-client自绘颜色行安全点击误判.md b/docs/task/270-client自绘颜色行安全点击误判.md new file mode 100644 index 0000000..4b61ed7 --- /dev/null +++ b/docs/task/270-client自绘颜色行安全点击误判.md @@ -0,0 +1,58 @@ +# 270 Client:修复自绘颜色行与款式节点导致的安全点击误判 + +- 类型:缺陷 +- 父级大工单:#96(Client Epic #1) +- 所属 MVP / 版本:#253 采购运行时 AI 规格纠偏闭环 +- 状态:已完成 +- 日期:2026-08-18 +- Gitea 工单: + +## 背景与目标 + +部分 PDD 商品的规格面板使用没有 `scrollable=true` 的自绘横向颜色行。同一行的颜色选项可能叫“款式”,旧逻辑会把该选项误判为规格标题,导致真实颜色区域计算错误,最终报出“目标颜色没有完整可见的安全点击位置”。 + +目标是在保持安全点击和繁简匹配规则的前提下,正确识别自绘颜色行中的完整目标卡片。 + +## 最终方案 + +- 无滚动属性的颜色行中,先从目标颜色节点向上寻找完整、可点击、宽度足够且高度受限的父级行作为安全区域。 +- 只有找不到可靠父级行时,才继续使用原有的颜色标题和下一规格标题推算逻辑。 +- `normalize_spec_text()` 仍只用于繁简等价比较;实际点击和选中确认继续使用页面/任务原始文字。 +- 保留繁简归一化后的多候选歧义停止规则,不使用模糊坐标或盲点。 +- 增加脱敏 XML 回归测试,覆盖长繁体颜色、同一行“款式”节点和无滚动属性。 + +## 改了哪些 + +- `client/src/util/select_color_size.py`:增加目标节点父级颜色行区域识别,避免同名“款式”节点干扰区域计算。 +- `client/test/test_select_color_size.py`:增加自绘颜色行和繁体原文点击回归测试。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 同行存在“款式”颜色选项时不再误判颜色分类标题 | 通过 | +| 无 `scrollable=true` 的自绘颜色行中完整目标颜色可以安全点击并确认 | 通过 | +| 长繁体目标可匹配页面原文,点击仍使用原始文字 | 通过 | +| 繁简归一化后存在多个候选时仍停止并报告歧义 | 通过(原有测试通过) | +| 既有简体颜色、尺码、套餐和多行颜色测试通过 | 通过 | +| 数量、价格、地址、不可逆下单和只读核单门禁未改变 | 通过(未修改相关代码) | +| Python 3.10 单元测试、编译和离屏 UI 检查通过 | 通过 | + +## 测试 + +- 执行的命令: + - `C:/Python310/python.exe -m pytest test/test_select_color_size.py test/test_pdd_u2_purchase_adapter.py -q` + - `C:/Python310/python.exe -m pytest test -q` + - `C:/Python310/python.exe -m py_compile src/util/select_color_size.py src/pdd_u2_purchase_adapter.py` + - 设置 `QT_QPA_PLATFORM=offscreen` 后创建并关闭 `MainWindow`。 +- 结果:规格选择和采购适配器测试 84 项通过;Client 全量测试 533 项通过、2 项失败,失败均为工作区现有版本号 `0.1.3` 与旧测试固定期望 `0.1.0` 不一致,与本任务无关;编译和离屏 UI 检查通过。 +- **没验证到的部分**:未使用真实 Android 设备复现并执行完整采购链路,未连接真实 Admin,未执行自动付款。 + +## 遗留问题 + +- 真实 PDD 页面和设备上的端到端回归仍需单独执行。 +- 工作区已有的版本号测试断言不在本任务范围内。 + +## 相关提交 + +- `e2ed00c` 修复自绘颜色行安全点击误判。