docs: 归档任务 #82

This commit is contained in:
chengma
2026-08-10 09:10:18 +08:00
parent 39f4a8ee4f
commit ad44c3ee86
@@ -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` 优化重新采集取消交互