Files
one-pipe-system/openspec/changes/update-order-upload-and-device-switch-mode/design.md
sexygoat 1990a3ccba
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 4m4s
fix: bug
2026-05-11 15:51:50 +08:00

59 lines
3.1 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.
# Design: 订单上传态与设备切卡模式调整
## Context
当前代码中已经存在订单创建弹窗、设备切卡模式弹窗和设备实时信息卡片,但实现和最新需求存在三个明显差异:
- 订单支付凭证上传采用异步上传对象存储的方式,但提交按钮仍固定显示 `提交`,没有把上传中的状态暴露给用户。
- 设备切卡模式前端当前只提交 `switch_mode`,而最新接口要求同时提交 `iot_card_id`
- 设备实时信息当前展示了 `IP 地址``WAN IP``LAN IP` 等字段,最新需求只要求移除 `IP 地址` 这一项。
## Goals / Non-Goals
- Goals:
- 让订单创建流程在支付凭证上传期间给出明确、不可误解的提交反馈
- 让设备切卡模式请求与最新接口契约保持一致
- 让设备实时信息展示符合最新页面要求
- Non-Goals:
- 不改造订单上传的后端流程或存储协议
- 不改动切卡模式接口路径或 HTTP 方法
- 不移除 `WAN IP``LAN IP``MAC 地址` 等其他实时信息字段
## Decisions
- Decision: 为订单创建弹窗引入独立的“凭证上传中”状态,而不是复用 `createLoading`
- Rationale: `createLoading` 表示“正在创建订单”,`voucherUploading` 表示“正在上传图片”,两者语义不同,混用会导致按钮文案和禁用逻辑失真。
- Decision: 切卡模式弹窗改为同时收集 `iot_card_id``switch_mode`
- Rationale: 最新接口契约要求请求体必须包含这两个字段,前端需要在提交前把选择结果显式建模。
- Decision: 设备未配置 IMEI 或没有任何绑定卡时,前端直接阻止提交
- Rationale: 这是当前确认保留的前置条件,应该在界面层尽早反馈,而不是把失败留到接口返回后再处理。
- Decision: 设备列表页和资产信息页共用同一套切卡模式弹窗提交契约
- Rationale: 两个入口都在执行相同的业务动作,统一参数结构和校验逻辑可以避免行为漂移。
- Decision: 只移除设备实时信息里的 `IP 地址` 字段,不影响 `WAN IP``LAN IP`
- Rationale: 需求文本只点名删除 `IP 地址`,当前没有证据表明其他网络字段也需要一起隐藏。
## Risks / Trade-offs
- 订单弹窗在上传中被关闭、删除凭证或上传失败时,必须正确清理上传状态和 `payment_voucher_key`,否则容易残留脏状态。
- 设备列表页与资产信息页使用的绑定卡数据结构不完全一致,实施时需要统一成弹窗可消费的数据结构。
## Migration Plan
1. 扩展设备切卡模式的请求类型与 API service 签名。
2. 改造切卡模式弹窗,使其支持选择绑定卡并输出完整请求体。
3. 改造设备列表页和资产信息页的调用逻辑传入设备标识、IMEI 条件和绑定卡列表。
4. 改造订单创建弹窗,在支付凭证上传中切换按钮文案与禁用状态。
5. 删除设备实时信息卡片中的 `IP 地址` 展示项。
## Open Questions
- 暂无。若产品后续希望连同 `WAN IP` / `LAN IP` 一并隐藏,应另开变更明确说明。