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

79 lines
3.7 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.
# 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` 优化重新采集取消交互