188 lines
11 KiB
Markdown
188 lines
11 KiB
Markdown
# 交互清单
|
||||
|
|
|
|||
|
|
> 本文把用户故事落成可实现、可测试的界面行为:用户如何触发、系统处于什么状态、如何
|
|||
|
|
> 反馈,以及失败时怎样恢复。覆盖 web 端页面与 desk 端桌面界面。
|
|||
|
|
|
|||
|
|
## 一、职责边界
|
|||
|
|
|
|||
|
|
| 信息 | 写在哪里 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 用户目标、价值与业务验收 | [用户故事清单](07-user-stories.md) |
|
|||
|
|
| MVP 范围与优先级 | [需求](02-requirements.md) |
|
|||
|
|
| 页面入口、路由和组件归属 | [路由与页面结构](routes.md) |
|
|||
|
|
| API、事件和错误格式 | [API 合约](api.md) |
|
|||
|
|
|
|||
|
|
IX 编号一经引用不再重用。交互清单不能扩大需求范围。
|
|||
|
|
|
|||
|
|
## 二、交互总表
|
|||
|
|
|
|||
|
|
| ID | 关联 US | 页面 / 组件 | 触发 | 用户目标 | 预期结果 | 优先级 | 状态 |
|
|||
|
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|||
|
|
| IX-001 | US-007 | web `/login` | 提交表单 | 进入管理后台 | 建立会话并进入原目标页或 `/tasks` | P0 | 已定 |
|
|||
|
|
| IX-002 | US-001 | web `/tasks/new` | 提交表单 | 建单 | 解析出 `goods_id` 并返回任务编号 | P0 | 已定 |
|
|||
|
|
| IX-003 | US-002 | web `/tasks` 查询条与泳道 | 输入 / 点选 | 找到要处理的任务 | 实时筛选、计数更新、空状态可清除 | P0 | 已定 |
|
|||
|
|
| IX-004 | US-002 | web `/tasks/{id}` | 进入页面 | 了解任务当前处境 | 按状态呈现唯一主区块与主动作 | P0 | 已定 |
|
|||
|
|
| IX-005 | US-004、US-005 | web 试选确认卡 | 查看后点确认 / 退回 | 确认机器选对了并授权 | 签发一次性授权并锁定单价,明确不付款 | P0 | 已定 |
|
|||
|
|
| IX-006 | US-006 | web 待付款核对卡 | 查看后手工标记 | 核对后付款 | 展示订单截图与授权信息;人付款后标记完成 | P0 | 已定 |
|
|||
|
|
| IX-007 | US-003 | desk 设备与参数页 | 填 serial → 连接检查 | 让设备就绪 | 连接成功并确认拼多多已安装 | P0 | 已定 |
|
|||
|
|
| IX-008 | US-003、US-008 | desk 采购执行页 | 开始 / 停止轮询 | 让手机自动跑并处理异常 | 待人工时显著提示缺什么;连续失败自动停 | P0 | 已定 |
|
|||
|
|
| IX-010 | US-005 | web 围栏前放弃授权入口 | 点击放弃 | 解开尚未提交的授权 | 授权作废,任务转待重新试选 | P0 | 已定 |
|
|||
|
|
| IX-011 | US-005、US-008 | web / desk 提交围栏与调和状态 | 真实点击前申请围栏;点击后回报 | 防止断网或重复操作产生第二笔订单 | 围栏前失败不点击;围栏后不明确只核查、不重试 | P0 | 已定 |
|
|||
|
|
|
|||
|
|
> IX-009(ERP 建单)随 F-003 移出 MVP,编号保留不重用。
|
|||
|
|
|
|||
|
|
## 三、交互详情(P0 高风险)
|
|||
|
|
|
|||
|
|
以下三项涉及资金、不可逆动作或权限,必须完整填写。其余交互保留总表条目。
|
|||
|
|
|
|||
|
|
### IX-005 试选确认与下单授权
|
|||
|
|
|
|||
|
|
- 关联用户故事:US-004、US-005
|
|||
|
|
- 关联需求 / 验收:F-007、F-008;[需求](02-requirements.md)第五节「决策与资金」
|
|||
|
|
- 页面 / 组件:web `/tasks/{id}` 的 `SpecTrialCard` + `AuthorizePanel`
|
|||
|
|
- 目标角色:采购管理员
|
|||
|
|
- 前置条件:已登录;任务状态为 `WAITING_CONFIRMATION`;已收到试选结果与规格面板截图
|
|||
|
|
- 触发方式:查看后点击「确认下单(不付款)」或「退回,不买」
|
|||
|
|
- 服务依赖:`POST /tasks/{id}/order-authorizations`、`POST /tasks/{id}/reject`
|
|||
|
|
- 关联原型:待补(`docs/design/`)
|
|||
|
|
|
|||
|
|
**这不是候选对照台。** 只有一个商品,人回答的是「机器选对了吗」,不是「哪个更好」。
|
|||
|
|
|
|||
|
|
**正常路径**
|
|||
|
|
|
|||
|
|
1. 用户进入详情页,看到需求与机器所选的逐项对照、单价、合计和规格面板截图。
|
|||
|
|
2. 各项均为 ✓ 时,「确认下单(不付款)」可用。
|
|||
|
|
3. 用户点击确认,系统签发授权并**锁定本次试选的单价**,任务转 `AUTHORIZED`。
|
|||
|
|
4. 页面明确提示:只会创建待付款订单,付款需人在拼多多完成。
|
|||
|
|
|
|||
|
|
**状态与异常清单**
|
|||
|
|
|
|||
|
|
| 场景 | 本交互约定 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 默认 / 可操作 | 各项 ✓ 时确认按钮可用;截图必须已加载出来才允许确认 |
|
|||
|
|
| 规格不一致(✗) | **确认按钮禁用**并说明哪一项不符;只能「退回,不买」或转人工 |
|
|||
|
|
| 金额超上限(✗) | **确认按钮禁用**并显示超出多少;不提供「仍然确认」入口 |
|
|||
|
|
| 加载 / 提交中 | 按钮禁用并显示进行中,防重复提交 |
|
|||
|
|
| 成功 | 跳回工作台,该任务进入「机器在跑」等待第二趟 |
|
|||
|
|
| 退回 | 二次确认后任务终止为 `CANCELED`,说明不会再自动执行 |
|
|||
|
|
| 服务或网络错误 | 保留页面状态,说明原因并允许重试 |
|
|||
|
|
| 权限不足 | 设备凭据调用此接口一律 403 并记录;页面不暴露任务内容 |
|
|||
|
|
| 冲突 / 重复提交 | `expected_task_version` 不匹配返回 409,提示任务已变化并刷新;重复提交幂等,只产生一笔订单 |
|
|||
|
|
| 破坏性操作 | 确认会导致真实下单。提交前必须显示授权金额上限与「系统只下单不付款」 |
|
|||
|
|
| 试选已过期 | 授权过期后任务转待重新试选;完成新试选前不显示确认入口,页面明确说明旧价不再有效 |
|
|||
|
|
| 中断 / 离线 | 未提交的备注不保存;重进页面回到未确认状态 |
|
|||
|
|
|
|||
|
|
**可访问性与多端**
|
|||
|
|
|
|||
|
|
- 确认与退回按钮可键盘到达,焦点可见。
|
|||
|
|
- ✓ / ✗ 不能只靠颜色区分,必须带文字。
|
|||
|
|
- 窄屏下截图可放大查看,不被裁切到看不清规格。
|
|||
|
|
|
|||
|
|
### IX-006 待付款核对与标记完成
|
|||
|
|
|
|||
|
|
- 关联用户故事:US-006 | 关联需求:F-009 收口
|
|||
|
|
- 页面 / 组件:web `/tasks/{id}` 的 `PaymentCheckCard`
|
|||
|
|
- 目标角色:采购管理员(采购执行员在拼多多完成人工付款并反馈结果)
|
|||
|
|
- 前置条件:任务状态为 `WAITING_PAYMENT`,已收到订单截图
|
|||
|
|
- 服务依赖:`POST /tasks/{id}/mark-paid`
|
|||
|
|
|
|||
|
|
**MVP 简化版**:系统只展示,不自动回读。自动核对是 F-016(V2)。
|
|||
|
|
|
|||
|
|
**正常路径**
|
|||
|
|
|
|||
|
|
1. 用户看到订单截图、商品、规格、数量和授权金额。
|
|||
|
|
2. 用户在拼多多手工核对并付款。
|
|||
|
|
3. 用户回到页面点「已付款」,任务转 `SUCCEEDED`。
|
|||
|
|
|
|||
|
|
**状态与异常清单**
|
|||
|
|
|
|||
|
|
| 场景 | 本交互约定 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 默认 | 显著提示「对不上就别付」,并说明不一致时回来标记异常而不是在拼多多改单 |
|
|||
|
|
| 成功 | 任务转已完成,记录标记人与时间 |
|
|||
|
|
| 金额或规格对不上 | 提供「标记异常」转 `NEEDS_MANUAL`,不允许直接标已付款 |
|
|||
|
|
| 截图缺失 | 说明证据缺失并转人工,**不允许在无证据情况下标记完成** |
|
|||
|
|
| 重复标记 | 幂等,不产生第二条完成记录 |
|
|||
|
|
| 破坏性操作 | 本交互不产生任何写平台动作,只改本地状态 |
|
|||
|
|
|
|||
|
|
### IX-008 桌面端定时轮询与人工接管
|
|||
|
|
|
|||
|
|
- 关联用户故事:US-003、US-008 | 关联需求:F-005、F-011
|
|||
|
|
- 页面 / 组件:desk 采购执行页 `PollControls` + `DeviceStatusBar`
|
|||
|
|
- 目标角色:采购执行员
|
|||
|
|
- 前置条件:web 端连接正常;设备已通过连接检查
|
|||
|
|
|
|||
|
|
**正常路径**
|
|||
|
|
|
|||
|
|
1. 用户确认两个连接状态都为绿,点击「开始轮询」。
|
|||
|
|
2. 每到间隔时间领取一条任务,界面显示**这一趟是试选还是下单**、商品、规格、当前步骤。
|
|||
|
|
3. 第一趟试选完成后**退出商品页释放手机**,继续下一轮轮询。
|
|||
|
|
|
|||
|
|
**状态与异常清单**
|
|||
|
|
|
|||
|
|
| 场景 | 本交互约定 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 默认 | 任一连接未就绪时「开始轮询」禁用并说明是哪一个 |
|
|||
|
|
| 轮询中 | 显示下次轮询倒计时与连续失败计数 |
|
|||
|
|
| 执行中 | 显示当前趟次与步骤;**真机步骤期间禁用硬取消和关闭窗口** |
|
|||
|
|
| 无可领任务 | 显示「暂无待领任务」并继续下一轮,**不当作错误、不计入失败计数** |
|
|||
|
|
| 待人工 | 整页显著变色,说明缺什么、下一步做什么;该任务不再被本端领取 |
|
|||
|
|
| 连续失败 | 达到阈值自动停止轮询并显示原因,**不无限重试** |
|
|||
|
|
| 关闭窗口 | 立即停止轮询,不留后台进程 |
|
|||
|
|
| 设备断连 | 当前任务标技术失败、保留现场;**不重试任何可能创建订单的点击** |
|
|||
|
|
| 安全校验 | 立即停止轮询、截图、转人工,**不提供绕过入口** |
|
|||
|
|
| 外部支付交接 | 立即停止并提示「订单可能已创建、支付未完成」;**不提供「继续」按钮** |
|
|||
|
|
| 点击提交后超时 | 转 `RECONCILIATION_REQUIRED` 并预留金额额度,**禁止自动重试**;授权保持永久围栏 |
|
|||
|
|
| 闸门二不通过 | 说明「价格已变:授权 ¥X,现价 ¥Y」并转人工,不自动下单也不自动放弃 |
|
|||
|
|
| 运行中变更 | 冻结设备切换和参数保存 |
|
|||
|
|
| 服务端不可达 | 保留本地结果与证据,提示待补传,不丢弃已完成工作 |
|
|||
|
|
|
|||
|
|
### IX-011 提交围栏与结果调和
|
|||
|
|
|
|||
|
|
- 关联用户故事:US-005、US-008 | 关联需求:F-017
|
|||
|
|
- 页面 / 组件:desk 采购执行页;web 任务详情的提交围栏摘要
|
|||
|
|
- 前置条件:已完成 dry-run;真实第二趟重新通过三道闸门;授权尚未消费且未建立围栏
|
|||
|
|
- 服务依赖:`order-dry-runs/start`、`order-dry-runs/{rid}/ready`、
|
|||
|
|
`order-submissions/start`、`order-submissions/{sid}/reconcile`、`manual-review`
|
|||
|
|
|
|||
|
|
**正常路径**
|
|||
|
|
|
|||
|
|
1. dry-run 以醒目的「只读演练」标识运行,到确认页读取并验证后退出,不出现提交动作。
|
|||
|
|
2. 真实第二趟在三道闸门通过后显示「正在申请提交围栏」,此时不允许点击或取消。
|
|||
|
|
3. 只有服务端明确返回 `click_permitted` 后执行一次点击,界面立即进入「正在核对订单结果」。
|
|||
|
|
4. 明确创建后转待付款;结果不明确则两端都显示同一 `submission_id` 与「可能已创建」,
|
|||
|
|
只提供人工核查,不提供重试或放弃。
|
|||
|
|
|
|||
|
|
**状态与异常清单**
|
|||
|
|
|
|||
|
|
| 场景 | 本交互约定 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| dry-run | 蓝色信息态并固定显示「不会提交订单」;完成后有证据摘要 |
|
|||
|
|
| 围栏申请中 | 主操作禁用、显示进度;关闭窗口受控,避免用户误以为可重来 |
|
|||
|
|
| 围栏申请失败 / 响应不明 | **不点击**;展示幂等键与核查入口 |
|
|||
|
|
| 围栏成功 | 显示唯一提交编号;只允许内部流程点击一次,不向用户暴露第二个提交按钮 |
|
|||
|
|
| 点击后明确创建 | 转待付款并显示订单证据 |
|
|||
|
|
| 点击后超时 / 外部支付 / 安全校验 | 转 `RECONCILIATION_REQUIRED`;显著提示可能已创建并预留额度 |
|
|||
|
|
| 重复打开或恢复 | 恢复同一提交编号和调和状态,不重新领取、不重新点击 |
|
|||
|
|
| 人工核查 | 可记录「已创建 / 未创建 / 仍不明确」及证据;系统本身不发起新的下单 |
|
|||
|
|
|
|||
|
|
## 四、通用要求
|
|||
|
|
|
|||
|
|
适用于所有 P0 交互:
|
|||
|
|
|
|||
|
|
- **禁用按钮必须说明原因**,不留用户猜。
|
|||
|
|
- **失败必须给下一步**,不只报错。
|
|||
|
|
- **空状态是邀请,不是错误**。
|
|||
|
|
- 破坏性与不可逆动作必须二次确认,并说明影响范围。
|
|||
|
|
- 键盘可达、焦点可见、`prefers-reduced-motion` 生效。
|
|||
|
|
- 状态不能只靠颜色表达。
|
|||
|
|
- 金额一律显示两位小数并标注币种。
|
|||
|
|
|
|||
|
|
## 五、交付前检查
|
|||
|
|
|
|||
|
|
- [ ] 每项 P0 交互回链至少一个 US 编号。
|
|||
|
|
- [ ] 涉及资金或不可逆动作的交互已填写完整状态表。
|
|||
|
|
- [ ] 所有禁用态都有说明文案。
|
|||
|
|
- [ ] 所有空状态都有可执行的下一步。
|
|||
|
|
- [ ] 未在本文自行定义接口路径、字段或状态码。
|