diff --git a/docs/task/82-优化重新采集取消交互.md b/docs/task/82-优化重新采集取消交互.md new file mode 100644 index 0000000..df77f39 --- /dev/null +++ b/docs/task/82-优化重新采集取消交互.md @@ -0,0 +1,78 @@ +# 82 优化重新执行提示、弹窗与取消交互 + +- 类型:缺陷 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP) +- 状态:已完成,待用户验收 +- 日期:2026-08-10 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/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` 优化重新采集取消交互