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

Closed
opened 2026-08-10 08:58:25 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP)
  • 阶段:PDD 任务交互完善

要解决什么

PDD 任务“重新执行”确认和错误反馈不容易取消:重新采集运行时按钮被禁用,用户没有可见的停止入口;错误 InfoBar 只能点击较小的关闭图标,连续失败还可能堆叠多个提示。

做什么 / 不做什么

  • 做:提供“停止重新采集”入口和“正在停止”状态;让确认弹窗可通过清晰取消按钮、Escape 和关闭行为安全退出;错误提示增加显式“关闭提示”按钮并避免重复堆叠;处理取消后的迟到结果。
  • 不做:不修改 Admin 接口、SQLite 表结构、采集业务结果结构、采购流程和真实下单安全逻辑;不强制终止 QThread 或正在执行的单次 ADB/uiautomator2 调用。

怎么做

  • 修改 client/src/pdd_ui.py,为重新执行按钮建立空闲、运行、取消中三个明确状态;运行时按钮变为“停止重新采集”,取消中变������正在停止…”并禁止重复点击。
  • 修改 client/src/pdd_ui_event.py,复用 Worker 现有取消标记发起协作式取消;取消后等待当前手机调用返回,并在安全检查点停止。
  • 修改 client/src/collect_task_service.py,确保任务在 Collector 启动前收到取消时也持久化取消结果,不遗留“待执行”状态。
  • 保存当前重新采集错误 InfoBar 引用,新错误替换旧错误;提示中增加可见“关闭提示”按钮。
  • 确认弹窗默认聚焦安全的取消操作,并统一取消按钮、Escape 和窗口关闭行为。
  • 修改 client/test/test_pdd_ui_event.py,覆盖取消、迟到信号、提示防堆叠和确认框取消。
  • 同步 docs/client/05-ui-specification.md。

验收标准

  • 重新采集运行时可点击“停止重新采集”。
  • 点击停止后显示“正在停止…”,且不会重复发起取消。
  • 当前 ADB/uiautomator2 调用返回后在安全点停止,不强杀线程。
  • 确认弹窗可通过取消按钮、Escape 和窗口关闭安全退出,且不会启动任务。
  • 重新采集错误提示有清晰的“关闭提示”按钮。
  • 同一时间最多显示一条重新采集错误提示,新错误替换旧错误。
  • 取消后的迟到成功信号不会把界面显示成成功。
  • Client 相关测试和全量回归通过。

怎么���证

从 client/ 执行:

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"
C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py

另执行 Qt 离屏交互测试,验证按钮状态、取消信号、InfoBar 防堆叠、Escape 和关闭路径。真机只验证协作式取消,不执行采购或付款。

风险和回退

风险:uiautomator2/ADB 的单次阻塞调用不能即时中断,点击停止后可能仍需等待数秒。界面必须明确显示“正在等待手机当前操作结束”,不能谎称已经取消。若出现回归,可回退本工单提交,恢复原有仅等待任务自然结束的行为。

## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP) - 阶段:PDD 任务交互完善 ## 要解决什么 PDD 任务“重新执行”确认和错误反馈不容易取消:重新采集运行时按钮被禁用,用户没有可见的停止入口;错误 InfoBar 只能点击较小的关闭图标,连续失败还可能堆叠多个提示。 ## 做什么 / 不做什么 - 做:提供“停止重新采集”入口和“正在停止”状态;让确认弹窗可通过清晰取消按钮、Escape 和关闭行为安全退出;错误提示增加显式“关闭提示”按钮并避免重复堆叠;处理取消后的迟到结果。 - 不做:不修改 Admin 接口、SQLite 表结构、采集业务结果结构、采购流程和真实下单安全逻辑;不强制终止 QThread 或正在执行的单次 ADB/uiautomator2 调用。 ## 怎么做 - 修改 `client/src/pdd_ui.py`,为重新执行按钮建立空闲、运行、取消中三个明确状态;运行时按钮变为“停止重新采集”,取消中变������正在停止…”并禁止重复点击。 - 修改 `client/src/pdd_ui_event.py`,复用 Worker 现有取消标记发起协作式取消;取消后等待当前手机调用返回,并在安全检查点停止。 - 修改 `client/src/collect_task_service.py`,确保任务在 Collector 启动前收到取消时也持久化取消结果,不遗留“待执行”状态。 - 保存当前重新采集错误 InfoBar 引用,新错误替换旧错误;提示中增加可见“关闭提示”按钮。 - 确认弹窗默认聚焦安全的取消操作,并统一取消按钮、Escape 和窗口关闭行为。 - 修改 `client/test/test_pdd_ui_event.py`,覆盖取消、迟到信号、提示防堆叠和确认框取消。 - 同步 `docs/client/05-ui-specification.md`。 ## 验收标准 - [ ] 重新采集运行时可点击“停止重新采集”。 - [ ] 点击停止后显示“正在停止…”,且不会重复发起取消。 - [ ] 当前 ADB/uiautomator2 调用返回后在安全点停止,不强杀线程。 - [ ] 确认弹窗可通过取消按钮、Escape 和窗口关闭安全退出,且不会启动任务。 - [ ] 重新采集错误提示有清晰的“关闭提示”按钮。 - [ ] 同一时间最多显示一条重新采集错误提示,新错误替换旧错误。 - [ ] 取消后的迟到成功信号不会把界面显示成成功。 - [ ] Client 相关测试和全量回归通过。 ## 怎么���证 从 `client/` 执行: 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" C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py 另执行 Qt 离屏交互测试,验证按钮状态、取消信号、InfoBar 防堆叠、Escape 和关闭路径。真机只验证协作式取消,不执行采购或付款。 ## 风险和回退 风险:uiautomator2/ADB 的单次阻塞调用不能即时中断,点击停止后可能仍需等待数秒。界面必须明确显示“正在等待手机当前操作结束”,不能谎称已经取消。若出现回归,可回退本工单提交,恢复原有仅等待任务自然结束的行为。
Author
Owner

实施进度:交互和取消链路已完成。

  • 重新采集运行时按钮改为“停止重新采集”,点击后显示“正在停止…”并防止重复请求。
  • 复用 Worker 协作式取消,等待当前 uiautomator2/ADB 调用返回后在安全点停止,不强杀线程。
  • Collector 尚未启动时收到取消也会保存取消结果,不遗留“待执行”状态。
  • 确认框安全按钮改为“暂不重新采集”并默认聚焦;离屏实测 Escape 返回取消。
  • 重新采集警告/错误增加“关闭提示”,同一时间只保留一条。
  • 取消后的迟到结果不会覆盖取消状态提示。

验证:采集应用层 6 项通过;PDD UI 事件 28 项通过;Client 全量 216 项通过;py_compile 通过;MessageBox Escape 离屏检查输出 ESC_CANCELLED。未连接真机验证单次 ADB 调用返回所需时间。

实施进度:交互和取消链路已完成。 - 重新采集运行时按钮改为“停止重新采集”,点击后显示“正在停止…”并防止重复请求。 - 复用 Worker 协作式取消,等待当前 uiautomator2/ADB 调用返回后在安全点停止,不强杀线程。 - Collector 尚未启动时收到取消也会保存取消结果,不遗留“待执行”状态。 - 确认框安全按钮改为“暂不重新采集”并默认聚焦;离屏实测 Escape 返回取消。 - 重新采集警告/错误增加“关闭提示”,同一时间只保留一条。 - 取消后的迟到结果不会覆盖取消状态提示。 验证:采集应用层 6 项通过;PDD UI 事件 28 项通过;Client 全量 216 项通过;py_compile 通过;MessageBox Escape 离屏检查输出 `ESC_CANCELLED`。未连接真机验证单次 ADB 调用返回所需时间。
Author
Owner

实施完成,等待用户验收。

  • 实现提交:39f4a8e fix: 优化重新采集取消交互 (#82)
  • 归档提交:ad44c3e docs: 归档任务 #82
  • 归档文档:docs/task/82-优化重新采集取消交互.md

最终验证:Client 全量 216 项通过;专项 6 + 28 项通过;语法检查通过;真实 Fluent MessageBox 离屏 Escape 验证输出 ESC_CANCELLED。未连接真实 Android 设备验证单次 uiautomator2/ADB 阻塞调用的停止等待时间。工作区原有的 pdd_ui.py 文案/标题改动及其他未提交文件均未纳入 #82。

实施完成,等待用户验收。 - 实现提交:`39f4a8e fix: 优化重新采集取消交互 (#82)` - 归档提交:`ad44c3e docs: 归档任务 #82` - 归档文档:`docs/task/82-优化重新采集取消交互.md` 最终验证:Client 全量 216 项通过;专项 6 + 28 项通过;语法检查通过;真实 Fluent `MessageBox` 离屏 Escape 验证输出 `ESC_CANCELLED`。未连接真实 Android 设备验证单次 uiautomator2/ADB 阻塞调用的停止等待时间。工作区原有的 `pdd_ui.py` 文案/标题改动及其他未提交文件均未纳入 #82。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:15 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#82