Files
luo 16effb69f3
All checks were successful
构建并部署前端到测试环境 / deploy (push) Successful in 55s
fix: some
2026-10-13 17:43:38 +08:00

68 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: 换货新资产手机号绑定冲突提示
后台创建换货和确认完成 SHALL 在错误码 `1202` 时用一次文本弹窗原样展示后端 `msg`。`1202` 同时用于已换货等业务拒绝,只有错误响应带有效字符串 `data.phone` 且用户有原查看权限时 MUST 提供解除关联跳转;处理 MUST 覆盖业务失败与 HTTP 错误,不自动解绑或扩大权限。
#### Scenario: 1202 返回手机号
- **WHEN** `POST /api/admin/exchanges` 或 `POST /api/admin/exchanges/{id}/complete` 返回 `code=1202` 且含 `data.phone`
- **THEN** 页面 MUST 原样展示后端 `msg`,不得拼接手机号或替换为固定文案
- **AND** 有原查看权限且已知新资产时 MUST 提供「前往手机号资产关联」按钮并带参跳转
- **AND** 默认错误提示与该弹窗 MUST NOT 重复展示
- **AND** 手机号 MUST 只用于用户主动发起的路由参数,不额外写日志或本地存储
- **AND** 前端 MUST NOT 自动调用单条、批量或 CSV 解绑接口
#### Scenario: 号码缺失或无管理权限
- **WHEN** 1202 响应不含有效号码,或用户没有关联管理入口权限
- **THEN** 页面 MUST 使用仅有「知道了」的提示弹窗原样展示 `msg`,不展示跳转/解绑按钮
- **AND** MUST 不根据选中资产 `associated_phones` 推断该错误为手机号绑定冲突
#### Scenario: 已完成过换货的 1202
- **WHEN** 接口返回 `code=1202,data=null,msg=该资产已完成过换货,如需再次换货请使用换货后的新资产`
- **THEN** 页面 MUST 显示该原始 `msg` 和「知道了」,不显示「前往手机号资产关联」
### Requirement: 换货冲突后保持数据并允许手动重试
1202 失败后后台 SHALL 保留当前创建表单或后端原完成状态,解除关联后允许用户手动再次提交。非 1202 错误 MUST 保留原统一反馈及业务判断。
#### Scenario: 创建失败保留表单
- **WHEN** 创建换货因 1202 被拒绝
- **THEN** 当前新旧资产、原因、换货类型和其他表单值 MUST 保留
- **AND** loading MUST 结束,取消提示 MUST NOT 被当作成功
- **AND** 用户解除关联后 MUST 可手动再次提交原接口
#### Scenario: 确认完成被拒绝
- **WHEN** 确认完成接口因 1202 被拒绝
- **THEN** 页面 MUST 刷新原换货单,并保持后端「已发货待确认」状态
- **AND** MUST NOT 乐观标记换货完成或清空当前单据
- **AND** 用户解除关联后 MUST 可手动重新确认
#### Scenario: 其他错误及原流程不变
- **WHEN** 换货接口返回非 1202 错误,包括退款拦截、权限失败、迁移失败或网络错误
- **THEN** 页面 MUST 继续按原业务文案及统一错误分类反馈,不重复弹错
- **AND** MUST NOT 新增依据扫码历史或退款状态的前置拒绝逻辑
- **AND** 当前换货迁移字段、角色限制和接口成功行为 MUST 保持不变
### Requirement: 换货冲突跳转携带新资产与手机号
收到带有效 `data.phone` 的 1202 后,用户点击「前往手机号资产关联」时,后台 SHALL 通过 `asset_identifier` 和 `phone` 路由参数传递本次提交的新资产标识与错误响应手机号。创建换货 MUST 使用提交时选中的新卡 ICCID 或设备虚拟号;确认完成 MUST 使用换货单的新资产标识,不得带入旧资产。手机号缺失时 MUST 不从 `associated_phones` 回退生成解绑入口。
#### Scenario: 创建换货选择新资产后被拒
- **WHEN** 创建请求因新资产已有手机号关联返回 1202,用户选择跳转
- **THEN** 路由 MUST 携带选中新资产的 `asset_identifier` 与对应 `phone`
- **AND** 新旧资产同时存在手机号关联时 MUST NOT 使用旧资产标识或旧手机号
- **AND** 长 ICCID MUST 保持字符串,不转为数值
#### Scenario: 确认完成失败后跳转
- **WHEN** 确认完成返回 1202,用户选择跳转
- **THEN** 路由 MUST 携带该换货单的 `new_asset_identifier` 和错误响应手机号
- **AND** 参数不完整时 MUST 不猜测缺失值或自动执行解绑