feat: 优化任务表批量选择和详情入口 (#131)
This commit is contained in:
@@ -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`——界面上没有需要刷新的远端数据。
|
||||
- 仅图标按钮必须设置准确的无障碍名称和工具提示。
|
||||
- 表单具有可见标签,占位符不能替代标签。
|
||||
|
||||
Reference in New Issue
Block a user