# 9 PDD 任务列表接入 SQLite Repository - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:#2 / MVP - 状态:已实现,待验收 - 日期:2026-08-06 - Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/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 | 通过 | | 离屏测试、语法和差异检查通过 | 通过 | ## 测试 - 执行的命令: ```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 git diff --check ``` - 结果:新增测试与已有测试合计 22 项全部通过,输出 `Ran 22 tests ... OK`;语法检查和差异检查通过。 - 环境提示:离屏 Qt 输出本机 PyQt5 字体目录缺失警告,不影响测试结果;未修改依赖。 - **没验证到的部分**:没有连接真实 Admin 或 Android 设备,没有执行 PDD 自动化和真实下单,也没有人工检查包含大量真实数据时的滚动手感。 ## 遗留问题 - “获取任务”按钮仍未连接 Admin,下一阶段应先实现 Admin Mock/Gateway 契约。 - 任务详情窗口尚未实现,后续按独立工单接入 `TaskRepository.get_task()`。 ## 相关提交 - `583e441` PDD 任务列表接入 SQLite Repository