3.4 KiB
3.4 KiB
9 PDD 任务列表接入 SQLite Repository
- 类型:需求
- 父级大工单:#1
- 所属 MVP / 版本:#2 / MVP
- 状态:已实现,待验收
- 日期:2026-08-06
- Gitea 工单:#9
背景与目标
PDD 任务表格原来只处理内存模拟数据,应用启动后不会读取 SQLite。本任务把页面的搜索、刷新和滚动加载信号连接到 TaskRepository,让本机已领取任务能够直接显示在表格中。
最终方案
PDDTaskPageEvent持有TaskRepository,页面文件不写 SQL。- 主窗口创建并保存事件对象,页面创建后自动加载本地任务第一页。
- 中文任务类型和状态在事件层转换为领域枚举,类型、状态和关键词通过 Repository 进行 AND 查询。
- 搜索和刷新先清空旧结果,再按当前条件读取第一页。
- 表格模型每页请求 50 条;滚动到底时通过
canFetchMore/fetchMore请求下一页。 - 列表继续使用 Repository 的
updated_at DESC, id DESC稳定顺序。 - 表格模型只保存
TaskRow轻量字段,不保存admin_payload或pdd_data。 - 查询失败时停止继续分页,并在页面显示可理解的本地数据库错误信息。
- 本工单没有连接 Admin、uiautomator2、Android 设备、任务详情或“获取任务”行为。
改了哪些
client/src/pdd_ui.py:把内存模拟分页改为事件驱动的数据库分页,增加重载和追加页面接口。client/src/pdd_ui_event.py:实现筛选转换、Repository 查询、摘要到表格行转换和错误处理。client/src/ui_main.py:装配 PDD 页面事件对象并在启动时加载任务。client/test/test_pdd_ui_event.py:增加分页、稳定排序、组合筛选、错误提示、轻量行和主窗口装配测试。
验收结果
| 验收标准 | 结果 |
|---|---|
| 主窗口启动后读取本地任务 | 通过 |
默认按 updated_at DESC, id DESC 显示 |
通过 |
| 每页最多 50 条,能继续加载且无重复 | 通过 |
| 类型、状态和关键词采用 AND | 通过 |
| 搜索和刷新仅访问本地 Repository | 通过 |
| 类型、状态、金额和空值映射正确 | 通过 |
| 查询失败显示可理解信息 | 通过 |
| 表格模型不保存完整 JSON | 通过 |
| 离屏测试、语法和差异检查通过 | 通过 |
测试
-
执行的命令:
$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 git diff --check -
结果:新增测试与已有测试合计 22 项全部通过,输出
Ran 22 tests ... OK;语法检查和差异检查通过。 -
环境提示:离屏 Qt 输出本机 PyQt5 字体目录缺失警告,不影响测试结果;未修改依赖。
-
没验证到的部分:没有连接真实 Admin 或 Android 设备,没有执行 PDD 自动化和真实下单,也没有人工检查包含大量真实数据时的滚动手感。
遗留问题
- “获取任务”按钮仍未连接 Admin,下一阶段应先实现 Admin Mock/Gateway 契约。
- 任务详情窗口尚未实现,后续按独立工单接入
TaskRepository.get_task()。
相关提交
583e441PDD 任务列表接入 SQLite Repository