# 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)