Files
cmautobuy/docs/task/107-领取任务后立即刷新列表并调整任务栏布局.md

3.7 KiB
Raw Permalink Blame History

107 领取任务后立即刷新列表并调整任务栏布局

背景与目标

统一任务分派器领取新任务后会立即写入 SQLite,但原代码没有把“任务已经落库” 这个中间状态通知界面。任务表格要等整轮手机采集或采购完成后才刷新,用户无法及时 确认任务已经领取。

本任务让新任务落库后立即刷新任务列表,同时把按钮文案统一为“自动获取”,并缩短 关键词输入框。

最终方案

  • TaskDispatcher 接收一个只传任务编号的 task_saved 回调。只有新领取任务成功 写入 SQLite 且可以重新读取时才调用;重复任务不误报。
  • ClaimTaskWorker 把该回调转换为已有的 taskSaved Qt 信号。界面仍只在主线程中 按当前筛选条件刷新,后台线程不访问 QWidget。
  • 手机执行结束后的最终状态刷新保持不变,因此列表既能及时出现新任务,也能显示 最终执行结果。
  • 停止状态按钮统一显示“自动获取”,运行状态继续显示“停止自动获取”;无障碍名称 跟随按钮状态更新。
  • 关键词输入框宽度调整为 150~240,保留 Qt 布局和紧凑/宽窗口重排逻辑。
  • 同步更新 Client 架构与界面交互基线文档。

实现与建单方案一致。额外同步了两份长期基线文档,避免按钮文案与代码不一致;没有 改变任务状态机、Admin 接口、请求次数或 PDD 自动化流程。

改了哪些

  • client/src/task_dispatcher.py:在新任务落库后发出轻量通知。
  • client/src/pdd_ui_event.py:把落库通知转换为 Qt 信号并复用列表刷新入口。
  • client/src/pdd_ui.py:调整按钮文案、无障碍名称和关键词框宽度。
  • client/test/test_task_dispatcher.py:验证通知发生在落库后、执行前。
  • client/test/test_pdd_ui_event.py:阻塞后台采集,验证执行结束前表格已经刷新。
  • client/test/test_pdd_ui.py:验证按钮状态文案、无障碍名称和宽度约束。
  • docs/client/02-architecture.md:同步主按钮文案。
  • docs/client/05-ui-specification.md:同步按钮和关键词框规范。

验收结果

验收标准 结果
新任务落库后立即按当前筛选刷新,不等待手机执行结束 通过
手机执行结束后继续刷新最终状态 通过
按钮显示“自动获取”/“停止自动获取”,无障碍名称一致 通过
关键词框最大宽度 240,最小宽度 150,布局保持自适应 通过
不改变 Admin 请求、调度顺序、任务状态机和自动化流程 通过
专项测试、Client 全量测试和离屏启动通过 通过

测试

  • 执行的命令:
    • C:/Python310/python.exe -m py_compile src/task_dispatcher.py src/pdd_ui_event.py src/pdd_ui.py
    • C:/Python310/python.exe -m pytest test/test_task_dispatcher.py test/test_pdd_ui_event.py test/test_pdd_ui.py -q
    • C:/Python310/python.exe -m pytest test -q
    • 设置 QT_QPA_PLATFORM=offscreen 后创建 MainWindow 的离屏冒烟命令
    • git diff --check
  • 结果:专项测试 53 项通过;Client 全量测试 294 项通过;离屏冒烟输出 OK; 语法和差异检查通过。
  • 没验证到的部分:未连接真实 Admin 和 Android 设备验证领取后的实际刷新时序; 未人工检查 Windows 100%~200% DPI、浅色、深色和高对比度下的视觉效果。

相关提交

  • 39686d7 fix: 领取任务后立即刷新列表 (#107)