Files
cmautobuy/docs/task/82-优化重新采集取消交互.md
T
2026-08-10 09:10:18 +08:00

3.7 KiB
Raw Blame History

82 优化重新执行提示、弹窗与取消交互

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP)
  • 状态:已完成,待用户验收
  • 日期:2026-08-10
  • Gitea 工单:#82

背景与目标

PDD 任务重新采集开始后,原按钮会被禁用,用户没有明确的 停止入口。重新采集警告和错误只能通过较小的关闭图标消除, 连续出错时还会堆叠。本任务让确认、停止和关闭提示都有清晰、 安全且可见的入口。

最终方案

  • 为“重新执行”建立空闲、运行和取消中三个界面状态。
  • 运行时按钮变为可点击的“停止重新采集”;点击后变为 “正在停止…”并禁止重复点击。
  • 复用 Worker 的取消标记,等待 uiautomator2/ADB 当前单次调用 返回后,在采集安全检查点停止,不强制结束工作线程。
  • 取消发生在 Collector 启动前时,也创建执行记录并持久化 取消结果,避免任务留在“待执行”。
  • 取消后的迟到成功信号不再将底部状态覆盖为成功。
  • 确认弹窗将安全按钮改为“暂不重新采集”并默认聚焦; 点击、Escape 和关闭窗口均不启动采集。
  • 重新采集警告和错误 InfoBar 增加“关闭提示”按钮, 新提示会替换旧提示。

实施中比建单方案多修改了 collect_task_service.py,原因是发现 用户在 Worker 刚刚启动时取消,原逻辑可能在创建执行记录前返回, 使已准备重新执行的任务留在待执行状态。该变更已在实施期间 同步到 Gitea 工单。

改了哪些文件

  • client/src/pdd_ui.py:重新采集按钮的三态显示和取消信号。
  • client/src/pdd_ui_event.py:取消请求、迟到结果保护、提示替换和关闭。
  • client/src/collect_task_service.py:持久化采集启动前的取消结果。
  • client/test/test_pdd_ui_event.py:界面取消、确认框、提示和迟到信号测试。
  • client/test/test_collect_task_service.py:早期取消持久化测试。
  • docs/client/05-ui-specification.md:同步重新采集取消交互规范。

本任务没有修改 SQLite 表结构、Admin 接口或采购流程。

验收结果

验收标准 结果
运行时可点击“停止重新采集” 通过
停止后显示“正在停止…”并防止重复取消 通过
取消使用安全检查点,不强杀线程 通过
采集启动前取消也能正确落库 通过
确认框安全按钮、Escape 和关闭路径不启动任务 通过
警告和错误有可见“关闭提示” 通过
同一时间最多一条重新采集提示 通过
迟到成功不覆盖取消状态提示 通过
Client 全量回归 通过

测试

  • 执行的命令:
    • C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py src/collect_task_service.py
    • C:/Python310/python.exe -m unittest discover -s test -p "test_collect_task_service.py" -v
    • C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_ui_event.py" -v
    • C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
    • 离屏创建真实 MessageBox,使用 Qt Test 发送 Escape。
  • 结果:语法检查通过;采集应用层 6 项通过;PDD 事件层 28 项通过;Client 全量 216 项通过;Escape 检查输出 ESC_CANCELLED。Qt 同时输出开发环境缺少字体目录警告,不影响测试结果。
  • 未验证到的部分:未连接真实 Android 设备测量正在执行的 uiautomator2/ADB 单次调用需要多久才返回;未执行采购、下单或付款。

相关提交

  • 39f4a8e 优化重新采集取消交互