Files
cmautobuy/docs/task/89-PDD任务批量勾选和重新上报.md
T

68 lines
3.9 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.
# 89 PDD 任务表增加批量勾选和重新上报
- 类型:需求
- 父级大工单:#1
- 所属 MVP / 版本:#2
- 状态:已完成,用户验收通过
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/89
## 背景与目标
原来的 PDD 任务表只能依赖当前行执行操作,不方便明确选择任务,也不能把客户端已有的采集或采购结果再次提交给 Admin。
本次给任务表增加逐行勾选和批量重新上报能力,同时调整按钮位置,让“搜索”和“刷新”相邻,并避免重新上报误触发手机自动化。
## 最终方案
- 表格最左侧增加“选择”列,勾选状态使用 `remote_task_id` 保存,刷新后仍存在的任务保持勾选。
- 搜索时清空勾选,避免对筛选前不可见的任务执行操作。
- “重新执行”只接受一条已勾选任务,继续沿用原有采集任务校验,不增加批量手机自动化。
- “重新上报”接受多条已勾选任务,读取每条任务最新的 `collect_result` 或 `purchase_result` Outbox 原始负载和幂等键,再提交给 Admin。
- 重新上报不操作 Android 设备、不创建新 Outbox、不生成任务失败事件,也不修改本地采集或采购结果。
- 成功上报的任务自动取消勾选;失败或跳过的任务保留勾选,并显示成功、失败和跳过数量。
- 自动获取、重新执行和重新上报互斥,关闭页面时等待重新上报线程安全退出。
- 宽窗口使用一行操作区;窄窗口自动改为两行,搜索按钮和刷新按钮始终相邻。
实现与建单方案一致,没有修改数据库结构和 Admin 接口。
## 改了哪些
- `client/src/pdd_ui.py`:增加选择列、勾选状态、重新上报按钮和响应式操作区。
- `client/src/pdd_ui_event.py`:增加重新上报工作线程、确认提示、进度反馈和任务互斥控制。
- `client/src/task_repository.py`:增加读取任务最新结果 Outbox 的方法。
- `client/test/test_pdd_ui.py`:增加任务表选择状态和响应式布局测试。
- `client/test/test_pdd_ui_event.py`:增加重新上报成功、失败、跳过、取消和线程退出测试。
- `client/test/test_task_repository.py`:增加最新结果 Outbox 查询测试。
- `client/AGENTS.md`:补充重新上报操作的开发约束。
- `docs/client/05-ui-specification.md`:更新 PDD 任务列表界面和交互规范。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 表格左侧可以逐行勾选,空白占位行不能勾选 | 通过 |
| 普通刷新保留仍存在任务的勾选,搜索清空勾选 | 通过 |
| “刷新”位于“搜索”右侧,“重新上报”位于“重新执行”右侧 | 通过 |
| “重新执行”只允许一条已勾选任务 | 通过 |
| “重新上报”可以处理多条任务,并复用原始结果负载和幂等键 | 通过 |
| 重新上报不调用 Android 自动化,也不创建新 Outbox | 通过 |
| 成功任务取消勾选,失败或跳过任务保留勾选 | 通过 |
| 自动获取、重新执行和重新上报互斥 | 通过 |
| 窄窗口操作区自动换行,搜索和刷新保持相邻 | 通过 |
| Client 完整自动测试通过 | 通过,共 232 项 |
## 测试
- 执行的命令:`C:/Python310/python.exe -m unittest discover -s client/test -p "test_*.py"`
- 结果:`Ran 232 tests in 10.121s`,`OK`。
- 执行的命令:使用 `QT_QPA_PLATFORM=offscreen` 创建并关闭 `MainWindow`。
- 结果:窗口初始化冒烟测试通过,输出 `OK`。
- 执行的命令:`git diff --cached --check`
- 结果:通过,没有空白错误。
- **没验证到的部分**:没有连接真实 Admin 手工执行批量重新上报;没有在真实 Windows 显示器上逐项检查不同 DPI、窗口宽度和主题下的视觉效果。
## 相关提交
- `34ff39a` 增加任务批量勾选和重新上报