diff --git a/docs/task/178-兼容非滚动图片颜色采购选择.md b/docs/task/178-兼容非滚动图片颜色采购选择.md new file mode 100644 index 0000000..de4987f --- /dev/null +++ b/docs/task/178-兼容非滚动图片颜色采购选择.md @@ -0,0 +1,54 @@ +# 178 兼容非滚动图片颜色卡片的采购选择 + +- 类型:缺陷 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 +- 状态:已完成,待用户验收 +- 日期:2026-08-12 +- Gitea 工单: + +## 背景与目标 + +采购非滚动自绘规格面板时,代码使用固定高度估算颜色区域。较高的图片颜色卡片被区域下边界截断,安全校验拒绝点击,随后又执行无意义的横向滑动,最终误报“没有精确选中颜色”。本任务在保留精确匹配和点击后确认的前提下兼容这类卡片。 + +## 最终方案 + +- 目标没有可滚动祖先但已经出现在当前树时,使用完整可点击卡片、颜色标题、下一规格标题和屏幕边界计算静态颜色区域。 +- 左右部分露出或纵向越过下一规格标题的卡片仍拒绝点击。 +- 静态目标点击后未确认时立即失败,不再盲目横向滑动;明确滚动容器仍使用原左右扫描。 +- 点击后继续要求最新控件树提供 `selected/checked` 或“已选”摘要,不能以发出点击代替成功。 +- Adapter 区分目标不可见、缺少安全坐标和点击后未确认,并在失败时保存脱敏控件树。 + +## 改了哪些 + +- `client/src/util/select_color_size.py`:增加静态图片颜色区域、安全坐标计算、停止条件和失败阶段诊断。 +- `client/src/pdd_u2_purchase_adapter.py`:输出准确错误并保存脱敏选项失败控件树。 +- `client/test/test_select_color_size.py`:覆盖高图片卡片成功、未确认、部分露出和越过尺码标题。 +- `client/test/test_pdd_u2_purchase_adapter.py`:覆盖错误原因和脱敏诊断文件。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 完整显示的非滚动高图片卡片可以生成安全坐标 | 通过 | +| 点击后必须由最新树确认选中 | 通过 | +| 静态目标可见时不执行横向滑动 | 通过 | +| 部分露出或越过下一规格标题仍拒绝点击 | 通过 | +| 失败原因明确且保存脱敏诊断 | 通过 | +| 尺码选择及采购不可逆门禁不变 | 通过 | +| Client 全量测试通过 | 通过 | + +## 测试 + +- 执行的命令:在 `client` 目录执行 `C:/Python310/python.exe -m unittest discover -s test -p 'test_select_color_size.py'` +- 结果:4 个颜色选择测试全部通过。 +- 执行的命令:在 `client` 目录执行 `C:/Python310/python.exe -m unittest discover -s test -p 'test_pdd_u2_purchase_adapter.py'` +- 结果:29 个采购 Adapter 测试全部通过。 +- 执行的命令:在 `client` 目录执行 `$env:QT_QPA_PLATFORM='offscreen'; C:/Python310/python.exe -m unittest discover -s test -p 'test_*.py'` +- 结果:447 个 Client 测试全部通过。 +- 额外验证:手机当前控件树只读计算得到藏青色卡片 `[36,1188][352,1591]`,唯一中心点 `(194,1389)`;未点击手机。 +- **没验证到的部分**:未在真机重新执行采购;未进行任何真实下单或不可逆操作。 + +## 相关提交 + +- `cd9c552` fix: 兼容非滚动图片颜色采购选择 (#178)