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

This commit is contained in:
chengma
2026-08-11 09:43:29 +08:00
parent f9dc22161b
commit cc4c1c4c4c
5 changed files with 183 additions and 41 deletions
+11 -10
View File
@@ -35,9 +35,9 @@
```text
┌─────────────────────────────────────────────────────────────┐
│ PDD 任务 │
│ [自动获取] [类型▼] [状态▼] [关键词...] [搜索] [刷新] [已选0条] [重新执行] [重新上报] [删除] │
│ [自动获取] [类型▼] [状态▼] [关键词...] [搜索] [刷新] [全选] [反选] [已选0条] [重新执行] [重新上报] [删除] │
├─────────────────────────────────────────────────────────────┤
│ 类型 │ 商品标题 │ 颜色 │ 尺码 │ 价格 │ 数量 │ 状态 │ 更新时间 │详情│
│ 选择 │ 类型 │ 商品标题 │ 颜色 │ 尺码 │ 价格 │ 数量 │ 状态 │ 更新时间 │
│ │
│ 任务数据表格 │
│ │
@@ -83,10 +83,12 @@
筛选条件之间采用 AND。点击搜索或在关键词输入框按 Enter 执行本地数据库查询,不请求领取任务。活动筛选必须可见,筛选无结果时保留条件并提供清除入口。
### 4.3 刷新、重新执行、重新上报与删除
### 4.3 刷新、全选、反选与批量操作
- “刷新”紧邻“搜索”右侧,只重新读取本地任务列表,不请求 Admin,也不操作手机。
- 页面右侧显示“已选 N 条”,操作顺序是“重新执行”“重新上报”“删除”。
- 页面右侧显示“全选”“反选”和“已选 N 条”,之后依次是“重新执行”“重新上报”“删除”。
- “全选”和“反选”只作用于当前筛选条件下已经加载的真实任务行,空白占位行不参与。全选后新领取或继续增量加载的任务默认不勾选,防止批量操作范围在用户不知情时扩大。
- 没有真实任务,或正在重新执行、重新上报、删除时,禁用“全选”和“反选”。
- “重新执行”只在恰好勾选一条任务时启用;多选不允许批量操作手机。
- 点击后先校验任务,再显示明确的“重新采集”确认弹窗。弹窗显示任务编号、商品标题,并说明新结果会覆盖 Client 和 Admin 的当前采集数据。“暂不重新采集”是默认聚焦的安全操作,点击该按钮、按 `Escape` 或关闭弹窗都不得启动任务。
- 用户确认后,工作线程必须先检查已保存 Android 设备的实际连接状态,再重置任务和创建执行记录。检查失败时保留原任务状态、采集结果和执行历史。
@@ -128,7 +130,6 @@
| 数量 | 右对齐 | 采购数量;采集显示 `—` |
| 状态 | 居中 | 中文状态文字和状态图标/标记 |
| 更新时间 | 左对齐 | 本地时区,精确到秒或按产品确认格式 |
| 操作 | 居中 | “详情”链接或委托绘制按钮 |
### 5.2 数据行为
@@ -138,8 +139,8 @@
- 勾选集使用 `remote_task_id` 保存。普通刷新保留仍存在的勾选,搜索条件变化清空勾选,避免操作被筛选隐藏的旧任务。
- 初始加载有限批次,滚动时通过 `canFetchMore/fetchMore` 增量加载后续任务。
- 单击非交互区域只设置当前行和选择。
- 双击行、按 Enter 或点击“详情”执行相同的非破坏性详情命令。
- “详情”使用委托或链接语义,不为每行创建常驻 QWidget。
- 双击任务行的非复选框区域或按 Enter 执行非破坏性的详情命令;复选框只改变勾选状态。
- 表格提供“双击任务行或按 Enter 查看详情”的工具提示和无障碍说明。
- 空状态要分情况,文案不能一样:
- 加载中;
- **从没领取过任务** —— “还没有领取过任务,点击‘获取任务’开始领取”(不要写“暂无数据”,操作人员会以为是出错了);
@@ -212,7 +213,7 @@ class TaskTableModel(QAbstractTableModel):
| 直接 `self._rows.append(...)` 不加 `beginInsertRows` | 界面不刷新,或者直接崩 |
| 把整个 `pdd_data` 存进 `_rows` | 几万条 JSON 全在内存里,程序会变得很卡 |
| 在 `fetchMore` 里发网络请求 | 这是主线程,界面会卡住。这里只能查本地 SQLite |
| 给每个单元格 `setIndexWidget` 放按钮 | 几万个控件,内存直接爆。"详情"那列用委托画 |
| 给每个单元格 `setIndexWidget` 放按钮 | 几万个控件会明显增加内存;任务详情使用行默认操作,不创建单元格按钮 |
换筛选之后要恢复用户原来选中的行:**先记下当前行的 `remote_task_id`,重新加载完再按这个编号找回来**,不要记行号。
@@ -220,7 +221,7 @@ class TaskTableModel(QAbstractTableModel):
详情是信息查看,不要求用户立即决策,优先使用非模态详情窗口或右侧详情面板,不使用简单消息框承载长 JSON。
当前 Client 使用可调整大小的非模态详情窗口。用户可以点击表格“详情”、双击任务行,或选中任务后按 Enter 打开。相同任务只保留一个详情窗口;再次打开时切回已有窗口。按 Esc 或“关闭”按钮返回任务列表。
当前 Client 使用可调整大小的非模态详情窗口。用户可以双击任务行,或选中任务后按 Enter 打开。相同任务只保留一个详情窗口;再次打开时切回已有窗口。按 Esc 或“关闭”按钮返回任务列表。
详情面向采购人员,任务类型、状态、当前步骤和错误说明优先使用中文。数据库中的 `current_step` 等内部值只用于业务判断和日志,不直接显示;遇到尚未适配的新步骤时显示“未知步骤”。
采购演练和恢复至少要明确显示“演练已在提交前停止”、“结果待提交”、
@@ -410,7 +411,7 @@ self.show_recoverable_error(
## 10. 键盘与无障碍
- Tab 顺序:自动获取 → 类型 → 状态 → 关键词 → 搜索 → 刷新 → 重新执行 → 重新上报 → 删除 → 表格 → 状态区可操作项。
- Tab 顺序:自动获取 → 类型 → 状态 → 关键词 → 搜索 → 刷新 → 全选 → 反选 → 重新执行 → 重新上报 → 删除 → 表格 → 状态区可操作项。
- `Ctrl+F` 聚焦关键词,Enter 打开当前行详情。不绑定 `F5`——界面上没有需要刷新的远端数据。
- 仅图标按钮必须设置准确的无障碍名称和工具提示。
- 表单具有可见标签,占位符不能替代标签。