diff --git a/docs/task/187-多地址面板只修改默认地址.md b/docs/task/187-多地址面板只修改默认地址.md new file mode 100644 index 0000000..b08e543 --- /dev/null +++ b/docs/task/187-多地址面板只修改默认地址.md @@ -0,0 +1,55 @@ +# 187 多地址面板只修改已设默认地址 + +- 类型:缺陷 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 +- 状态:已完成,待用户验收 +- 日期:2026-08-12 +- Gitea 工单: + +## 背景与目标 + +采购进入包含多条收货地址的面板后,整页存在多个“修改”按钮,旧代码要求全页只有一个候选,因此安全停止。页面还同时暴露 PDD 标题栏返回和 Android 系统导航返回。本任务只修改带唯一“已设默认”标记的地址,并排除系统导航栏。 + +## 最终方案 + +- 把地址列表 RecyclerView 的直接子节点作为独立地址卡片。 +- 多张地址卡片存在时,定位唯一包含精确“已设默认”文字的卡片,只提取该卡片内部的唯一“修改”。 +- 默认卡片可以位于任意行;不按列表顺序选择第一条。 +- 没有默认卡片、默认卡片不唯一或默认卡片内“修改”不唯一时安全停止。 +- 单地址旧页面继续使用全页唯一“修改”,保持兼容。 +- 保存后的地址面板使用相同的默认卡片规则识别。 +- 返回目标必须属于 PDD 包并位于页面左上标题栏,排除 Android 系统导航栏。 +- 继续沿用 #179 的稳定读取和有界重试,以及 #180 的保存单击和系统浮层限制。 + +## 改了哪些 + +- `client/src/pdd_u2_purchase_adapter.py`:增加 PDD 包内文字目标、地址卡片、默认卡片修改和标题栏返回解析。 +- `client/test/test_pdd_u2_purchase_adapter.py`:增加多地址最小控件树及默认地址在不同位置、默认缺失/重复、卡片内修改歧义、系统返回共存测试。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 多地址面板只定位唯一“已设默认”卡片内的修改 | 通过 | +| 默认卡片不在第一行时仍能正确定位 | 通过 | +| 不点击其他地址及其他操作 | 通过 | +| 默认缺失、不唯一或卡片内修改不唯一时停止 | 通过 | +| 单地址旧页面保持兼容 | 通过 | +| 保存后能识别多地址面板 | 通过 | +| 返回只选择 PDD 标题栏并排除系统导航栏 | 通过 | +| 保存、下单和不可逆门禁未修改 | 通过 | +| Client 全量测试通过 | 通过 | + +## 测试 + +- 执行的命令:在 `client` 目录执行 `C:/Python310/python.exe -m unittest discover -s test -p 'test_pdd_u2_purchase_adapter.py'` +- 结果:42 个采购 Adapter 测试全部通过。 +- 执行的命令:在 `client` 目录执行 `$env:QT_QPA_PLATFORM='offscreen'; C:/Python310/python.exe -m unittest discover -s test -p 'test_*.py'` +- 结果:460 个 Client 测试全部通过;仅有测试环境 Qt 字体目录警告。 +- 固件验证:只读解析本机 `addresses_panel.xml`,得到默认卡片唯一修改目标和 PDD 标题栏唯一返回目标;原始 XML 未提交。 +- **没验证到的部分**:未点击真机;未执行真实地址修改、保存、提交订单或其他不可逆操作。 + +## 相关提交 + +- `9c014ef` fix: 多地址面板选择默认地址 (#187)