From d81aa25b134bc74f8a591411ae5e7cc4646453de Mon Sep 17 00:00:00 2001 From: chengma Date: Mon, 10 Aug 2026 10:57:41 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/task/89-PDD任务批量勾选和重新上报.md | 67 +++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/task/89-PDD任务批量勾选和重新上报.md diff --git a/docs/task/89-PDD任务批量勾选和重新上报.md b/docs/task/89-PDD任务批量勾选和重新上报.md new file mode 100644 index 0000000..edcb8fa --- /dev/null +++ b/docs/task/89-PDD任务批量勾选和重新上报.md @@ -0,0 +1,67 @@ +# 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` 增加任务批量勾选和重新上报