feat(web): 采集任务页增加来源筛选与「取消未开始的任务」按钮 #298

Open
opened 2026-09-16 15:23:27 +08:00 by ila · 1 comment
Owner

来源:2026-09-16 讨论。用户在「两个按钮」与「筛选 + 一个按钮」之间选择了后者。

问题

采集任务页混着三种来源显示——image_search(图搜)、agent_current_page(真机拍照临时采集)、手动/批量创建的普通采集——但筛选只有 goodsId 和 状态 两项(web/src/views/goauto/collection-tasks/index.vue:10-11),没有来源筛选。

要批量取消未开始的任务时,无法限定范围。

为什么不用两个按钮

曾考虑「取消未开始的图搜任务」+「取消未开始的采集任务」两个按钮。否决理由:来源有三种不是两种,第二个按钮的文案说不清含不含拍照临时采集,而这是不可逆操作,最不该让人猜。将来新增来源还要再加按钮,把筛选条件编码进按钮,数量只会涨。

方案

  1. 增加「来源」筛选项。该筛选独立于取消功能本身也应当存在——页面早已混显三种来源。
  2. 增加一个「取消未开始的任务」按钮,只作用于当前筛选结果,所见即所得。

[必须] 两个安全措施,缺一不可:

  • 按钮上显示实时数量(如「取消未开始的任务(37)」),范围变化肉眼可见。
  • 确认框列出将被取消的任务,不能只给数字。尤其是不加筛选直接点的情况。

设计证据

复用现有规范:筛选项沿用该页既有 el-select 状态筛选的形态;按钮数量角标沿用 SYB 商品页「AI 匹配」「创建采购」的 action-count 做法;确认框沿用既有批量对话框。属于现有界面的小范围调整,按 AGENTS.md「明确复用的现有规范」一档。

非目标

  • 不取消 running 任务(服务端已禁止)。
  • 不改任务列表的既有列与分页。
  • 不做「只取消我刚才建的那一批」——库里没有批次标识,批量建的每个任务拿到的是各自独立的 create_request_id(按虾皮商品派生),要支持需新增批次列。暂不做。

依赖

依赖 #297(服务端放开 pending 取消)。

验收

  • 可按来源筛选任务列表。
  • 取消按钮只影响当前筛选结果中的未开始任务。
  • 按钮数量随筛选实时变化。
  • 确认框列出将被取消的任务。
  • 存在 running 任务时不受影响,提示说明「当前这个会跑完」。
  • 没有可取消任务时按钮禁用。

验证

Web 构建;本地构造批量 pending 后按来源筛选取消。

文档影响

采购员可见入口变化,按实际改动同步对应 Wiki 页面。

> 来源:2026-09-16 讨论。用户在「两个按钮」与「筛选 + 一个按钮」之间选择了后者。 ## 问题 采集任务页混着三种来源显示——`image_search`(图搜)、`agent_current_page`(真机拍照临时采集)、手动/批量创建的普通采集——但筛选只有 `goodsId` 和 `状态` 两项(`web/src/views/goauto/collection-tasks/index.vue:10-11`),**没有来源筛选**。 要批量取消未开始的任务时,无法限定范围。 ## 为什么不用两个按钮 曾考虑「取消未开始的图搜任务」+「取消未开始的采集任务」两个按钮。否决理由:来源有三种不是两种,第二个按钮的文案说不清含不含拍照临时采集,而这是不可逆操作,最不该让人猜。将来新增来源还要再加按钮,把筛选条件编码进按钮,数量只会涨。 ## 方案 1. 增加「来源」筛选项。该筛选独立于取消功能本身也应当存在——页面早已混显三种来源。 2. 增加一个「取消未开始的任务」按钮,**只作用于当前筛选结果**,所见即所得。 `[必须]` 两个安全措施,缺一不可: - 按钮上显示实时数量(如「取消未开始的任务(37)」),范围变化肉眼可见。 - 确认框**列出**将被取消的任务,不能只给数字。尤其是不加筛选直接点的情况。 ## 设计证据 复用现有规范:筛选项沿用该页既有 `el-select` 状态筛选的形态;按钮数量角标沿用 SYB 商品页「AI 匹配」「创建采购」的 `action-count` 做法;确认框沿用既有批量对话框。属于现有界面的小范围调整,按 AGENTS.md「明确复用的现有规范」一档。 ## 非目标 - 不取消 `running` 任务(服务端已禁止)。 - 不改任务列表的既有列与分页。 - 不做「只取消我刚才建的那一批」——库里没有批次标识,批量建的每个任务拿到的是各自独立的 `create_request_id`(按虾皮商品派生),要支持需新增批次列。暂不做。 ## 依赖 依赖 #297(服务端放开 pending 取消)。 ## 验收 - [ ] 可按来源筛选任务列表。 - [ ] 取消按钮只影响当前筛选结果中的未开始任务。 - [ ] 按钮数量随筛选实时变化。 - [ ] 确认框列出将被取消的任务。 - [ ] 存在 `running` 任务时不受影响,提示说明「当前这个会跑完」。 - [ ] 没有可取消任务时按钮禁用。 ## 验证 Web 构建;本地构造批量 pending 后按来源筛选取消。 ## 文档影响 采购员可见入口变化,按实际改动同步对应 Wiki 页面。
Author
Owner

实施

提交 03647dd。由 sonnet 子代理实施,我独立复核并补入修正。

范围较建单时扩大

建单时写的是前端单,实施中确认 AdminList(task/admin_service.go:175)只支持 status / goodsId / deviceId,不支持 source,因此必须带服务端改动。列表响应本就含 source(AdminTaskItem 内嵌 models.CollectionTask),只缺查询过滤。

另:页面的 statuses 数组缺 cancelled,不补则 #297 新增的状态在界面显示为原始英文且无法筛选。statusType 给 info 而非 danger——取消不是错误,与失败共用红色会误导。

复核阶段补入:取消范围必须包含 goodsId

[必须] 实施版本把 goodsId 排除在取消范围之外,按钮数量也忽略它。后果是:按 goods_id 筛出两条、按钮显示并取消三十几条。这违背了本单选择「筛选 + 一个按钮」而非「两个固定按钮」的全部理由——所见即所得。

已补齐:BatchCancelRequest 增加 GoodsID,与 AdminList 用同一种 LIKE 匹配(否则两边范围会悄悄错开);前端三个调用点与 watch 均接入;确认框文案写明 Goods ID 维度。新增用例 TestBatchCancelHonoursTheGoodsIDFilter。

已验证

服务端 gofmt / go vet / go build 干净,task / purchase / access 全绿;sybimport 仍为 12 条,与 #285 基线一致;Web npm run build:prod 通过。

未验证

未在浏览器人工核对:筛选联动、角标实时变化、确认框列表、hasMore 提示。需本地重启后进行。

状态

待验收。

## 实施 提交 `03647dd`。由 sonnet 子代理实施,我独立复核并补入修正。 ### 范围较建单时扩大 建单时写的是前端单,实施中确认 `AdminList`(`task/admin_service.go:175`)只支持 status / goodsId / deviceId,**不支持 source**,因此必须带服务端改动。列表响应本就含 `source`(`AdminTaskItem` 内嵌 `models.CollectionTask`),只缺查询过滤。 另:页面的 `statuses` 数组缺 `cancelled`,不补则 #297 新增的状态在界面显示为原始英文且无法筛选。`statusType` 给 `info` 而非 `danger`——取消不是错误,与失败共用红色会误导。 ### 复核阶段补入:取消范围必须包含 goodsId `[必须]` 实施版本把 `goodsId` 排除在取消范围之外,按钮数量也忽略它。后果是:按 goods_id 筛出两条、按钮显示并取消三十几条。这违背了本单选择「筛选 + 一个按钮」而非「两个固定按钮」的**全部理由**——所见即所得。 已补齐:`BatchCancelRequest` 增加 `GoodsID`,与 `AdminList` 用同一种 LIKE 匹配(否则两边范围会悄悄错开);前端三个调用点与 `watch` 均接入;确认框文案写明 Goods ID 维度。新增用例 `TestBatchCancelHonoursTheGoodsIDFilter`。 ## 已验证 服务端 `gofmt` / `go vet` / `go build` 干净,`task` / `purchase` / `access` 全绿;`sybimport` 仍为 12 条,与 #285 基线一致;Web `npm run build:prod` 通过。 ## 未验证 未在浏览器人工核对:筛选联动、角标实时变化、确认框列表、hasMore 提示。需本地重启后进行。 ## 状态 待验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#298