PDD 任务列表接入 SQLite Repository #9

Closed
opened 2026-08-06 16:26:51 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 阶段:2. SQLite 和本地任务列表
  • 依赖:#8

要解决什么

PDD 任务表格目前只支持内存模拟数据,应用启动后不会读取 SQLite。需要把页面信号与 TaskRepository 连接起来,让本机已领取任务可以按默认时间倒序显示、筛选、刷新并滚动加载。

做什么 / 不做什么

  • 做:
    • 在 client/src/pdd_ui_event.py 实现 PDD 页面与 TaskRepository 的事件绑定;
    • 应用启动时加载本地任务;
    • 搜索条件转换为领域层 TaskFilters,类型、状态和关键词采用 AND;
    • 点击刷新时使用当前筛选条件重新读取;
    • 每页读取 50 条,滚动到底后继续加载下一页;
    • 把 TaskSummary 转为只含表格字段的 TaskRow;
    • 在主窗口装配事件绑定,并保持对象生命周期;
    • 使用临时 SQLite 和离屏 Qt 测试。
  • 不做:
    • 不连接 Admin、uiautomator2 或 Android 设备;
    • 不实现“获取任务”按钮行为;
    • 不实现任务详情窗口;
    • 不把 admin_payload 或 pdd_data 放进表格模型;
    • 不修改数据库结构,不新增第三方依赖。

怎么做

  1. UI 文件只维护表格数据和加载信号,不写 SQL。
  2. 事件层持有 Repository,负责查询、条件映射和错误反馈。
  3. 首次/搜索/刷新先清空当前页,再读第一页。
  4. 模型通过 canFetchMore/fetchMore 请求后续页;用 beginInsertRows/endInsertRows 更新。
  5. 默认顺序沿用 Repository 的 updated_at DESC, id DESC。
  6. 使用 remote_task_id 恢复选择,不使用表格行号作为任务身份。
  7. SQLite 的 50 行本地索引查询允许同步执行;禁止在该入口加入网络或设备操作。

预计修改:

  • client/src/pdd_ui.py
  • client/src/pdd_ui_event.py
  • client/src/ui_main.py
  • client/test/test_pdd_ui_event.py

验收标准

  • 启动主窗口后自动读取默认数据库中的本地任务;
  • 默认按 updated_at DESC, id DESC 显示;
  • 一次最多加载 50 条,滚动可继续加载且无重复;
  • 类型、状态、关键词筛选正确转换并采用 AND;
  • 搜索和刷新不触发 Admin 或设备操作;
  • 任务类型、状态、金额和空值显示正确;
  • 查询失败显示可理解的加载失败信息;
  • 模型中不保存完整 JSON;
  • 离屏 Qt 测试、全量 unittest、语法检查和 git diff --check 通过。

怎么验证

从 client/ 执行:

$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" -v
C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py src/ui_main.py test/test_pdd_ui_event.py
Remove-Item Env:QT_QPA_PLATFORM
## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:#2 / MVP - 阶段:2. SQLite 和本地任务列表 - 依赖:#8 ## 要解决什么 PDD 任务表格目前只支持内存模拟数据,应用启动后不会读取 SQLite。需要把页面信号与 TaskRepository 连接起来,让本机已领取任务可以按默认时间倒序显示、筛选、刷新并滚动加载。 ## 做什么 / 不做什么 - 做: - 在 `client/src/pdd_ui_event.py` 实现 PDD 页面与 TaskRepository 的事件绑定; - 应用启动时加载本地任务; - 搜索条件转换为领域层 `TaskFilters`,类型、状态和关键词采用 AND; - 点击刷新时使用当前筛选条件重新读取; - 每页读取 50 条,滚动到底后继续加载下一页; - 把 `TaskSummary` 转为只含表格字段的 `TaskRow`; - 在主窗口装配事件绑定,并保持对象生命周期; - 使用临时 SQLite 和离屏 Qt 测试。 - 不做: - 不连接 Admin、uiautomator2 或 Android 设备; - 不实现“获取任务”按钮行为; - 不实现任务详情窗口; - 不把 `admin_payload` 或 `pdd_data` 放进表格模型; - 不修改数据库结构,不新增第三方依赖。 ## 怎么做 1. UI 文件只维护表格数据和加载信号,不写 SQL。 2. 事件层持有 Repository,负责查询、条件映射和错误反馈。 3. 首次/搜索/刷新先清空当前页,再读第一页。 4. 模型通过 `canFetchMore/fetchMore` 请求后续页;用 `beginInsertRows/endInsertRows` 更新。 5. 默认顺序沿用 Repository 的 `updated_at DESC, id DESC`。 6. 使用 `remote_task_id` 恢复选择,不使用表格行号作为任务身份。 7. SQLite 的 50 行本地索引查询允许同步执行;禁止在该入口加入网络或设备操作。 预计修改: - `client/src/pdd_ui.py` - `client/src/pdd_ui_event.py` - `client/src/ui_main.py` - `client/test/test_pdd_ui_event.py` ## 验收标准 - [x] 启动主窗口后自动读取默认数据库中的本地任务; - [x] 默认按 `updated_at DESC, id DESC` 显示; - [x] 一次最多加载 50 条,滚动可继续加载且无重复; - [x] 类型、状态、关键词筛选正确转换并采用 AND; - [x] 搜索和刷新不触发 Admin 或设备操作; - [x] 任务类型、状态、金额和空值显示正确; - [x] 查询失败显示可理解的加载失败信息; - [x] 模型中不保存完整 JSON; - [x] 离屏 Qt 测试、全量 unittest、语法检查和 `git diff --check` 通过。 ## 怎么验证 从 `client/` 执行: ```powershell $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" -v C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py src/ui_main.py test/test_pdd_ui_event.py Remove-Item Env:QT_QPA_PLATFORM ```
Author
Owner

状态:进行中。已确认并保留现有 PDD 页面文字调整;本工单只接入本地 SQLite 列表查询与分页。

状态:进行中。已确认并保留现有 PDD 页面文字调整;本工单只接入本地 SQLite 列表查询与分页。
Author
Owner

实施完成,等待用户验收

  • PDD 页面启动时读取 SQLite,本地搜索和刷新保持当前筛选条件;
  • 列表每页 50 条,通过 canFetchMore/fetchMore 继续加载;
  • 事件层完成中文筛选值、领域枚举与轻量 TaskRow 的转换;
  • 查询失败会停止分页并显示本地数据库错误说明;
  • 未连接 Admin、Android、uiautomator2、详情窗口或“获取任务”行为。

验证:全量 22 项 unittest 通过,语法检查和 git diff --check 通过。首轮离屏错误断言使用了会受父窗口显示状态影响的 isVisible(),已改为检查控件是否被显式隐藏,重跑通过。Qt 输出本机字体目录警告,不影响结果。

实现提交:583e441。归档提交:0d38eed。本地归档:docs/task/9-pdd任务列表接入-sqlite-repository.md。

工单保持打开,等待用户验收。

## 实施完成,等待用户验收 - PDD 页面启动时读取 SQLite,本地搜索和刷新保持当前筛选条件; - 列表每页 50 条,通过 `canFetchMore/fetchMore` 继续加载; - 事件层完成中文筛选值、领域枚举与轻量 `TaskRow` 的转换; - 查询失败会停止分页并显示本地数据库错误说明; - 未连接 Admin、Android、uiautomator2、详情窗口或“获取任务”行为。 验证:全量 22 项 unittest 通过,语法检查和 `git diff --check` 通过。首轮离屏错误断言使用了会受父窗口显示状态影响的 `isVisible()`,已改为检查控件是否被显式隐藏,重跑通过。Qt 输出本机字体目录警告,不影响结果。 实现提交:`583e441`。归档提交:`0d38eed`。本地归档:`docs/task/9-pdd任务列表接入-sqlite-repository.md`。 工单保持打开,等待用户验收。
Author
Owner

用户已要求继续下一阶段,视为 Task #9 验收通过。关闭本工单。

用户已要求继续下一阶段,视为 Task #9 验收通过。关闭本工单。
ila closed this issue 2026-08-06 16:34:04 +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#9