PDD 任务表增加全选和反选并移除详情列 #131

Closed
opened 2026-08-11 09:31:49 +08:00 by ila · 5 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 Client 可运行任务闭环
  • 阶段:PDD 任务列表交互完善
  • 关联工单:#89(在已有逐行勾选和批量操作基础上继续优化)

要解决什么

PDD 任务表已经支持逐行勾选、重新执行、重新上报和删除,但任务较多时仍需逐条勾选,批量操作效率低;表格最后的“操作 / 详情”列又占用横向空间。需要增加明确的“全选”和“反选”入口,并在不丢失详情功能的前提下移除详情列,让采购人员更容易批量处理任务。

当前表格采用增量加载,因此“全选”必须有清楚且安全的作用范围,不能把尚未加载、用户尚未看到的任务自动加入删除或重新上报范围。

做什么 / 不做什么

  • 做:在批量操作区增加“全选”“反选”,与“已选 N 条”“重新执行”“重新上报”“删除”放在同一操作组,并保留窄窗口自适应布局。
  • 做:“全选”和“反选”只作用于当前筛选条件下、表格中已经加载的真实任务行;空白占位行不参与。
  • 做:全选后新领取或继续滚动加载的任务默认不勾选,避免批量操作范围在用户不知情时扩大。
  • 做:继续用稳定的 remote_task_id 保存勾选状态;普通刷新保留仍存在任务的勾选,修改搜索条件仍按现有规则清空勾选。
  • 做:移除表格最后的“操作 / 详情”列,释放商品标题等主要字段的显示空间。
  • 做:保留双击任务行或选中当前行后按 Enter 打开详情;点击复选框只改变勾选状态,不打开详情。
  • 做:更新任务列表界面规范、需求说明及过时的“详情列委托”示例。
  • 不做:不改变详情窗口内容和本地详情查询逻辑。
  • 不做:不修改重新执行、重新上报、删除的业务规则。
  • 不做:不修改 SQLite 表结构、Admin 接口、任务状态或 pdd_data 结构。
  • 不做:不增加批量手机自动化,不改变真实下单安全门禁。

已确认的实现方案

  1. 修改 client/src/pdd_ui.py:
    • 为 TaskTableModel 增加“勾选所有已加载真实任务”和“反选所有已加载真实任务”的直白方法;
    • 每次批量改变勾选后只发送一次最新勾选集合信号,避免逐行刷新造成界面抖动;
    • 操作区增加“全选”“反选”按钮,无真实任务或批量操作忙碌时禁用;
    • 删除“操作 / 详情”表头、详情列常量、委托绘制和单击详情列分支;
    • 保留表格 activated 信号作为双击 / Enter 的详情入口,并补充简短提示。
  2. 修改 client/test/test_pdd_ui.py:
    • 覆盖全选、反选、空表 / 占位行、增量加载后新增行默认不选;
    • 覆盖稳定任务编号、已选数量及批量按钮启用状态;
    • 覆盖移除详情列后双击 / Enter 仍发出正确详情信号,复选框操作不打开详情。
  3. 更新长期文档:
    • docs/client/01-requirements.md
    • docs/client/05-ui-specification.md
    • docs/client/00-glossary.md(移除已经失效的“详情列委托”示例)

预计不需要修改 client/src/pdd_ui_event.py;如果实施时发现事件层依赖详情列索引,先在本工单记录原因再做最小修改。

验收标准

  • 有真实任务时显示可访问的“全选”“反选”按钮;空表只有占位行时两个按钮禁用。
  • “全选”只勾选当前已加载的真实任务行,不勾选空白占位行。
  • “反选”准确切换当前已加载真实任务的勾选状态。
  • 全选后新领取或增量加载的任务保持未勾选,不会自动扩大重新上报或删除范围。
  • 勾选仍以 remote_task_id 为身份,“已选 N 条”及现有批量按钮状态准确更新。
  • 搜索条件变化清空勾选,普通刷新保留仍存在任务的勾选,行为不回归。
  • 表格不再显示“操作 / 详情”列,商品标题等主要字段获得可用横向空间。
  • 双击任务行或按 Enter 仍能打开正确任务详情;点击复选框不会打开详情。
  • 重新执行仍只允许恰好一条任务;重新上报和删除仍作用于当前勾选集。
  • PyQt5 离屏界面测试和 Client 全量测试通过;未启用真实下单。

验证方式

从 client/ 目录执行:

C:/Python310/python.exe -m py_compile src/pdd_ui.py
$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -m unittest test.test_pdd_ui -v
C:/Python310/python.exe -m unittest discover -s test -v
Remove-Item Env:QT_QPA_PLATFORM

手工界面验收:

C:/Python310/python.exe buyer_main.py

准备任务数量多于首屏加载量的数据,验证逐行勾选、全选、反选、继续加载、刷新、筛选、详情快捷入口和现有三种批量操作的按钮状态。

风险和回退

  • 风险:如果“全选”包含未加载任务,会让删除或重新上报的范围超出用户可见内容;本方案固定为“仅当前已加载行”。
  • 风险:删除详情列后入口可发现性降低;保留通用的双击 / Enter 行默认操作,并在表格提示和文档中说明。
  • 回退:按本工单实现提交整体回退;无数据库迁移、无 Admin 接口变更,不影响既有任务数据。
## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:#2 Client 可运行任务闭环 - 阶段:PDD 任务列表交互完善 - 关联工单:#89(在已有逐行勾选和批量操作基础上继续优化) ## 要解决什么 PDD 任务表已经支持逐行勾选、重新执行、重新上报和删除,但任务较多时仍需逐条勾选,批量操作效率低;表格最后的“操作 / 详情”列又占用横向空间。需要增加明确的“全选”和“反选”入口,并在不丢失详情功能的前提下移除详情列,让采购人员更容易批量处理任务。 当前表格采用增量加载,因此“全选”必须有清楚且安全的作用范围,不能把尚未加载、用户尚未看到的任务自动加入删除或重新上报范围。 ## 做什么 / 不做什么 - 做:在批量操作区增加“全选”“反选”,与“已选 N 条”“重新执行”“重新上报”“删除”放在同一操作组,并保留窄窗口自适应布局。 - 做:“全选”和“反选”只作用于当前筛选条件下、表格中已经加载的真实任务行;空白占位行不参与。 - 做:全选后新领取或继续滚动加载的任务默认不勾选,避免批量操作范围在用户不知情时扩大。 - 做:继续用稳定的 `remote_task_id` 保存勾选状态;普通刷新保留仍存在任务的勾选,修改搜索条件仍按现有规则清空勾选。 - 做:移除表格最后的“操作 / 详情”列,释放商品标题等主要字段的显示空间。 - 做:保留双击任务行或选中当前行后按 Enter 打开详情;点击复选框只改变勾选状态,不打开详情。 - 做:更新任务列表界面规范、需求说明及过时的“详情列委托”示例。 - 不做:不改变详情窗口内容和本地详情查询逻辑。 - 不做:不修改重新执行、重新上报、删除的业务规则。 - 不做:不修改 SQLite 表结构、Admin 接口、任务状态或 `pdd_data` 结构。 - 不做:不增加批量手机自动化,不改变真实下单安全门禁。 ## 已确认的实现方案 1. 修改 `client/src/pdd_ui.py`: - 为 `TaskTableModel` 增加“勾选所有已加载真实任务”和“反选所有已加载真实任务”的直白方法; - 每次批量改变勾选后只发送一次最新勾选集合信号,避免逐行刷新造成界面抖动; - 操作区增加“全选”“反选”按钮,无真实任务或批量操作忙碌时禁用; - 删除“操作 / 详情”表头、详情列常量、委托绘制和单击详情列分支; - 保留表格 `activated` 信号作为双击 / Enter 的详情入口,并补充简短提示。 2. 修改 `client/test/test_pdd_ui.py`: - 覆盖全选、反选、空表 / 占位行、增量加载后新增行默认不选; - 覆盖稳定任务编号、已选数量及批量按钮启用状态; - 覆盖移除详情列后双击 / Enter 仍发出正确详情信号,复选框操作不打开详情。 3. 更新长期文档: - `docs/client/01-requirements.md` - `docs/client/05-ui-specification.md` - `docs/client/00-glossary.md`(移除已经失效的“详情列委托”示例) 预计不需要修改 `client/src/pdd_ui_event.py`;如果实施时发现事件层依赖详情列索引,先在本工单记录原因再做最小修改。 ## 验收标准 - [ ] 有真实任务时显示可访问的“全选”“反选”按钮;空表只有占位行时两个按钮禁用。 - [ ] “全选”只勾选当前已加载的真实任务行,不勾选空白占位行。 - [ ] “反选”准确切换当前已加载真实任务的勾选状态。 - [ ] 全选后新领取或增量加载的任务保持未勾选,不会自动扩大重新上报或删除范围。 - [ ] 勾选仍以 `remote_task_id` 为身份,“已选 N 条”及现有批量按钮状态准确更新。 - [ ] 搜索条件变化清空勾选,普通刷新保留仍存在任务的勾选,行为不回归。 - [ ] 表格不再显示“操作 / 详情”列,商品标题等主要字段获得可用横向空间。 - [ ] 双击任务行或按 Enter 仍能打开正确任务详情;点击复选框不会打开详情。 - [ ] 重新执行仍只允许恰好一条任务;重新上报和删除仍作用于当前勾选集。 - [ ] PyQt5 离屏界面测试和 Client 全量测试通过;未启用真实下单。 ## 验证方式 从 `client/` 目录执行: ```powershell C:/Python310/python.exe -m py_compile src/pdd_ui.py $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m unittest test.test_pdd_ui -v C:/Python310/python.exe -m unittest discover -s test -v Remove-Item Env:QT_QPA_PLATFORM ``` 手工界面验收: ```powershell C:/Python310/python.exe buyer_main.py ``` 准备任务数量多于首屏加载量的数据,验证逐行勾选、全选、反选、继续加载、刷新、筛选、详情快捷入口和现有三种批量操作的按钮状态。 ## 风险和回退 - 风险:如果“全选”包含未加载任务,会让删除或重新上报的范围超出用户可见内容;本方案固定为“仅当前已加载行”。 - 风险:删除详情列后入口可发现性降低;保留通用的双击 / Enter 行默认操作,并在表格提示和文档中说明。 - 回退:按本工单实现提交整体回退;无数据库迁移、无 Admin 接口变更,不影响既有任务数据。
Author
Owner

实施进度

已完成第一轮代码与文档修改:

  • 增加“全选”“反选”,范围固定为当前已加载真实任务;占位行和后续新增页不自动勾选。
  • 批量勾选一次只发一次模型变化信号。
  • 移除“操作 / 详情”列,保留非复选框区域双击或 Enter 打开详情。
  • 增加空表、增量加载、详情入口和按钮状态测试。

当前针对性测试 9 项通过,语法检查通过;正在执行 Client 全量回归和离屏窗口验证。未修改数据库、Admin 接口或采购安全规则。

## 实施进度 已完成第一轮代码与文档修改: - 增加“全选”“反选”,范围固定为当前已加载真实任务;占位行和后续新增页不自动勾选。 - 批量勾选一次只发一次模型变化信号。 - 移除“操作 / 详情”列,保留非复选框区域双击或 Enter 打开详情。 - 增加空表、增量加载、详情入口和按钮状态测试。 当前针对性测试 9 项通过,语法检查通过;正在执行 Client 全量回归和离屏窗口验证。未修改数据库、Admin 接口或采购安全规则。
Author
Owner

实现与验证完成

实现提交:cc4c1c4 feat: 优化任务表批量选择和详情入口 (#131)

验证结果:

  • py_compile src/pdd_ui.py:通过
  • PDD UI 针对性测试:10 项通过
  • Client 全量回归:364 项通过
  • 主窗口 PyQt5 离屏初始化:输出 OK
  • 1000px 紧凑布局与 1500px 宽布局离屏截图检查:未发现按钮重叠
  • git diff --check:通过

实现与原方案一致。为避免宽窗口单行命令过挤,响应式断点调整为 1460px,紧凑模式把筛选和批量操作分成三行;这是布局实现细节,不改变功能范围。

未验证:真实 Windows 桌面的浅色/深色/高对比度、100%–200% DPI、Narrator 及人工鼠标/键盘验收。测试环境存在既有的 PyQt5 字体目录警告,但不影响测试通过。当前进入待用户验收,接下来补充本地归档。

## 实现与验证完成 实现提交:`cc4c1c4` `feat: 优化任务表批量选择和详情入口 (#131)` 验证结果: - `py_compile src/pdd_ui.py`:通过 - PDD UI 针对性测试:10 项通过 - Client 全量回归:364 项通过 - 主窗口 PyQt5 离屏初始化:输出 `OK` - 1000px 紧凑布局与 1500px 宽布局离屏截图检查:未发现按钮重叠 - `git diff --check`:通过 实现与原方案一致。为避免宽窗口单行命令过挤,响应式断点调整为 1460px,紧凑模式把筛选和批量操作分成三行;这是布局实现细节,不改变功能范围。 未验证:真实 Windows 桌面的浅色/深色/高对比度、100%–200% DPI、Narrator 及人工鼠标/键盘验收。测试环境存在既有的 PyQt5 字体目录警告,但不影响测试通过。当前进入待用户验收,接下来补充本地归档。
Author
Owner

本地归档完成

  • 归档文档:docs/task/131-PDD任务表全选反选和详情列调整.md
  • 归档提交:b1a78f3 docs: 归档任务 #131
  • 实现提交:cc4c1c4

工单保持开启,状态为待用户验收。用户验收通过后再关闭 #131,并将 #1、#2 中的清单更新为完成。

## 本地归档完成 - 归档文档:`docs/task/131-PDD任务表全选反选和详情列调整.md` - 归档提交:`b1a78f3` `docs: 归档任务 #131` - 实现提交:`cc4c1c4` 工单保持开启,状态为待用户验收。用户验收通过后再关闭 #131,并将 #1、#2 中的清单更新为完成。
Author
Owner

新增后续任务表数据展示工单 #136:在 #131 的列结构基础上增加“店铺名”和“用时”,店铺名使用轻量摘要字段,用时关联最新一次 task_runs 计算。#136 涉及 SQLite 版本 5 迁移,独立实施和验收。

新增后续任务表数据展示工单 #136:在 #131 的列结构基础上增加“店铺名”和“用时”,店铺名使用轻量摘要字段,用时关联最新一次 `task_runs` 计算。#136 涉及 SQLite 版本 5 迁移,独立实施和验收。
Author
Owner

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:ad44f83。现关闭工单。

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:`ad44f83`。现关闭工单。
ila closed this issue 2026-08-13 15:57:46 +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#131