# 交互清单 > 本文把 P0 用户故事转换成可实现、可测试的 Web 和 Android 行为。页面入口见 > [路由](routes.md),接口字段见 [API](api.md)。 ## 交互总表 | ID | 用户故事 | 页面/组件 | 触发 | 预期结果 | 优先级 | 状态 | | --- | --- | --- | --- | --- | --- | --- | | IX-001 | US-007 | 管理 Web 登录 | 提交账号密码 | 建立管理会话或显示通用错误 | P0 | 已定 | | IX-002 | US-001 | 新建任务表单 | 填写并提交 | 创建 `PENDING` 任务 | P0 | 已定 | | IX-003 | US-002 | 任务列表/详情 | 打开、刷新、取消 | 查看最新状态、证据和允许动作 | P0 | 已定 | | IX-004 | US-007 | App 登录/设备绑定 | 登录或会话恢复 | 建立人员+设备身份 | P0 | 已定 | | IX-005 | US-003 | App 任务页 | 点击“获取任务” | 就绪检查后领取一条任务或显示原因 | P0 | 已定 | | IX-006 | US-004 | App 执行页 | 确认开始/自动步骤 | 显示步骤并有界执行搜索与候选判断 | P0 | 已定 | | IX-007 | US-005 | App 候选确认 | 接受/拒绝/转人工 | 停止自动化并回传人员结论 | P0 | 已定 | | IX-008 | US-006 | App/管理端错误状态 | 自动失败、取消、重试上传 | 显示结构化原因和恢复动作 | P0 | 已定 | ## IX-001 管理 Web 登录 - 页面:`/login` - 角色:采购管理员 - 前置条件:种子管理账号已建立。 - 服务依赖:管理会话创建。 - 关联原型:[管理登录](design/admin-login.html)(T-202)。 **正常路径** 1. 用户输入账号和密码并提交。 2. 提交期间按钮禁用并显示进度,密码不回显。 3. 成功后进入原目标页或 `/tasks`。 **状态与异常** - 默认:账号框自动聚焦;密码可切换显示但默认隐藏。 - 校验:空字段在字段附近提示;服务端仍执行完整校验。 - 失败:统一显示“账号或密码不正确”,不暴露账号是否存在。 - 网络错误:保留账号,清空密码,允许重试。 - 会话过期:跳转登录并保留安全的返回路径。 **可访问性** - 标签与输入框显式关联;错误摘要可被读屏感知。 - Enter 提交;焦点移到首个错误字段。 ## IX-002 创建采购任务 - 页面:`/tasks/new` - 角色:采购管理员 - 服务依赖:`POST /api/v1/assets`、`POST /api/v1/tasks` - 关联原型:[新建任务](design/admin-task-create.html)(T-202)。 **正常路径** 1. 输入标题、SKU、描述、数量、可选商品总预算并选择一张图片。 2. 浏览器展示图片预览、文件名和大小。 3. 提交期间锁定重复提交并显示“正在创建”。 4. 成功后进入任务详情,显示编号和 `PENDING`。 **状态与异常** - 标题和 SKU 必填,描述可空;数量默认 1,只接受正整数。 - 商品总预算为空表示不设置上限;填写时表示当前任务全部数量的商品金额上限。 - 图片类型、大小或解码失败时在图片控件旁提示。 - 上传成功但创建失败时重用已上传 asset,不重复上传。 - 网络状态不确定时使用幂等键查询结果,不直接再创建。 - 离开含未提交内容的表单时提示确认。 **可访问性与小屏** - 字段错误使用文本说明,不只使用颜色。 - 图片选择有可访问名称;预览提供来源文件名。 - 小屏下表单单列,提交按钮不遮挡最后一个字段。 ## IX-003 查看任务与证据 - 页面:`/tasks`、`/tasks/{id}` - 角色:采购管理员 - 服务依赖:任务列表、详情、取消和资产读取 API。 - 关联原型:[任务列表](design/admin-task-list.html)、 [任务详情](design/admin-task-detail.html)(T-202)。 **正常路径** 1. 列表按最近创建时间展示编号、标题、状态、设备和更新时间。 2. 进入详情查看原始输入、状态时间线、AI 派生结果、候选和证据。 3. 仅 `PENDING`/允许状态展示取消命令,取消前二次确认。 **状态与异常** - 加载:保留页面框架和筛选条件,显示明确进度。 - 空状态:说明还没有任务并提供“新建任务”入口。 - 失败:保留上一次内容但标明可能过期,提供重试。 - 权限不足/不存在:分别处理,但都不泄露任务内容。 - 截图加载失败:显示占位和重试,不影响其他证据查看。 - `SUCCEEDED` 详情必须醒目展示“验证完成,未提交订单”。 **可访问性** - 状态同时使用文字,不只用颜色。 - 时间线使用有序列表语义;图片有描述性替代文本。 - 列表在窄屏转换为可扫描行,不使用水平溢出遮挡操作。 ## IX-004 App 登录与设备绑定 - 页面:Android“登录/设备绑定” - 角色:采购执行员 - 服务依赖:`POST /api/v1/auth/token`、设备心跳。 - 关联原型:[App 登录](design/android-login.html)、 [设备设置](design/android-settings.html)(T-202)。 **正常路径** 1. 用户输入采购账号并确认后端已预授权的当前设备身份。 2. 成功后令牌存入 Android 安全存储,进入任务页。 3. App 上报版本和就绪能力,不上传敏感设备内容。 **状态与异常** - 账号或设备被禁用:解释联系管理员,不反复重试。 - 未预授权、token 错误或已绑定其他采购员的设备不能在 App 中“重新登记”,联系 管理员重新预置。 - 网络错误:保留非敏感账号字段,密码清空。 - 会话恢复失败:退出到登录页;活跃任务先查询服务端再决定状态。 - 退出登录:有运行任务时禁止直接退出,先安全停止。T-204 只实现服务端 token 签发和验证;本地清除与服务端撤销接入属于 T-206。 **可访问性** - 支持系统字体缩放;输入与错误不重叠。 - 软键盘不遮挡提交按钮,返回键不会静默丢失运行状态。 ## IX-005 手动获取任务 - 页面:Android“任务” - 角色:采购执行员 - 服务依赖:设备预检、`POST /api/v1/tasks/claim-next` - 关联原型:[任务主页](design/android-task-home.html)、 [任务预览](design/android-task-preview.html)、 [设备设置](design/android-settings.html)(T-202)。 **正常路径** 1. 页面显示无障碍、拼多多、网络和当前任务的就绪状态。 2. 全部就绪时“获取任务”可用;点击后立即禁用防重复。 3. 成功后展示任务预览和“开始采购”,此时状态为 `CLAIMED`。 **状态与异常** - 无任务:显示安静的空状态和手动刷新,不循环弹错。 - 权限缺失:提供打开对应系统设置的命令。 - 已有任务:显示“继续任务”,不再领取。 - 请求超时:先查询当前设备活跃任务,再允许重试。 - 租约到期:预览页提示任务已释放,返回任务页。 **可访问性** - 就绪状态使用图标加文字;系统设置命令有明确名称。 - 主要控件满足 Android 最小触控区域,加载不改变控件尺寸。 ## IX-006 执行采购任务 - 页面:Android“任务执行”及拼多多前台 - 角色:采购执行员 - 服务依赖:start、heartbeat、AI、event API 和 Android 自动化。 - 关联原型:[任务预览](design/android-task-preview.html)、 [任务执行](design/android-task-running.html)(T-202)。 **正常路径** 1. 用户检查原始需求并点击“开始采购”。 2. App 启动前台服务,进入预检并显示当前步骤。 3. 解析需求,打开拼多多,搜索并检查最多 5 个候选。 4. 每一步上报事件;找到结果后进入 `WAITING_CONFIRMATION`。 **状态与异常** - 运行中禁止第二次开始;持续通知提供“返回任务”和“停止”。 - App 切换到拼多多时,通知是回到执行页的稳定入口。 - 用户请求停止后进入“正在安全停止”,不立即在动作中间销毁状态。 - 进程重启时查询任务和 execution;无法证明可安全恢复则标记失败。 - 验证码、风控、登录、支付和未知页面立即停止,不展示“自动继续”。 - AI 超时最多按配置重试;输出无效或低置信度转人工。 - 候选商品价乘以任务数量达到总预算上限校验失败,或运费/优惠导致总价无法确认时, 不能进入接受状态。 **可访问性与反馈** - 当前步骤使用文字和进度列表,不显示虚假百分比。 - 错误、暂停和等待人工使用不同语义,不只依赖颜色。 - 通知操作名称明确;动态更新通过适度的 live region/无障碍播报。 ## IX-007 人工确认候选 - 页面:Android“候选确认” - 角色:采购执行员 - 服务依赖:`POST /api/v1/tasks/{id}/complete` - 关联原型:[候选确认](design/android-candidate-confirm.html)、 [任务结果](design/android-task-result.html)(T-202)。 **正常路径** 1. 展示原始需求、候选标题/价格、匹配项、缺失项和证据截图。 2. 用户选择“接受候选”“拒绝候选”或“需人工处理”。 3. 每种选择要求确认,必要时填写简短原因。 4. 结果幂等回传,页面显示“验证完成,未提交订单”。 **状态与异常** - 没有候选时只允许确认“无匹配”或“需人工处理”。 - 存在商品总价超预算、最终商品金额无法确认或关键属性未知时禁用“接受候选”并 说明原因。 - 回传超时:保留选择和原因,查询最终状态后再重试。 - 返回键不能恢复自动点击;等待确认一旦到达就是硬停止点。 - 所有结果都写入 `order_submitted=false`。 **可访问性** - 候选信息按标题、价格、匹配和风险分组。 - 确认对话框默认焦点在取消;破坏性/拒绝动作不能与接受动作混淆。 ## IX-008 失败、取消和恢复 - 页面:Android“任务执行/结果”、Web 任务详情 - 角色:采购执行员、采购管理员 - 服务依赖:fail、event、asset API。 - 关联原型:[管理任务详情](design/admin-task-detail.html)、 [App 任务执行](design/android-task-running.html)、 [App 任务结果](design/android-task-result.html)(T-202)。 **正常路径** 1. 系统停止动作,保存失败步骤和错误类别。 2. App 显示发生了什么、是否已停止和建议下一步。 3. 证据上传成功后,管理详情显示相同结论。 **状态与异常** - 上传失败:本地加密/受控保留待传证据,显示“结果待同步”。 - 取消:说明不会自动恢复;服务端终态后清理前台服务。 - 可恢复设备问题:只提供“修复后重新领取/新建尝试”,不原地猜测继续。 - 安全错误 `SAFETY_*` 不允许自动重试。 - 清理本地证据仅在服务端确认接收或超过明确保留策略后发生。 **验收证据** - 每类错误至少有一个自动化或 fake 测试。 - 验证码/未知页/支付边界至少在受控环境各验证一次安全停止。 ## 通用交互约束 - Web 和 App 的所有提交都防重复,网络超时后以服务端状态为准。 - 状态名称使用用户可理解中文,同时保留稳定机器状态码。 - 不在 UI 暴露模型密钥、设备令牌、内部堆栈或文件绝对路径。 - 字体放大、窄屏、软键盘和系统返回操作下,主要命令和错误不能被遮挡。 - P0 页面实现前按 [`design/README.md`](design/README.md) 生成低保真原型并人工确认。