来源:2026-09-16 讨论。用户在「两个按钮」与「筛选 + 一个按钮」之间选择了后者。
采集任务页混着三种来源显示——image_search(图搜)、agent_current_page(真机拍照临时采集)、手动/批量创建的普通采集——但筛选只有 goodsId 和 状态 两项(web/src/views/goauto/collection-tasks/index.vue:10-11),没有来源筛选。
image_search
agent_current_page
goodsId
状态
web/src/views/goauto/collection-tasks/index.vue:10-11
要批量取消未开始的任务时,无法限定范围。
曾考虑「取消未开始的图搜任务」+「取消未开始的采集任务」两个按钮。否决理由:来源有三种不是两种,第二个按钮的文案说不清含不含拍照临时采集,而这是不可逆操作,最不该让人猜。将来新增来源还要再加按钮,把筛选条件编码进按钮,数量只会涨。
[必须] 两个安全措施,缺一不可:
[必须]
复用现有规范:筛选项沿用该页既有 el-select 状态筛选的形态;按钮数量角标沿用 SYB 商品页「AI 匹配」「创建采购」的 action-count 做法;确认框沿用既有批量对话框。属于现有界面的小范围调整,按 AGENTS.md「明确复用的现有规范」一档。
el-select
action-count
running
create_request_id
依赖 #297(服务端放开 pending 取消)。
Web 构建;本地构造批量 pending 后按来源筛选取消。
采购员可见入口变化,按实际改动同步对应 Wiki 页面。
提交 03647dd。由 sonnet 子代理实施,我独立复核并补入修正。
03647dd
建单时写的是前端单,实施中确认 AdminList(task/admin_service.go:175)只支持 status / goodsId / deviceId,不支持 source,因此必须带服务端改动。列表响应本就含 source(AdminTaskItem 内嵌 models.CollectionTask),只缺查询过滤。
AdminList
task/admin_service.go:175
source
AdminTaskItem
models.CollectionTask
另:页面的 statuses 数组缺 cancelled,不补则 #297 新增的状态在界面显示为原始英文且无法筛选。statusType 给 info 而非 danger——取消不是错误,与失败共用红色会误导。
statuses
cancelled
statusType
info
danger
[必须] 实施版本把 goodsId 排除在取消范围之外,按钮数量也忽略它。后果是:按 goods_id 筛出两条、按钮显示并取消三十几条。这违背了本单选择「筛选 + 一个按钮」而非「两个固定按钮」的全部理由——所见即所得。
已补齐:BatchCancelRequest 增加 GoodsID,与 AdminList 用同一种 LIKE 匹配(否则两边范围会悄悄错开);前端三个调用点与 watch 均接入;确认框文案写明 Goods ID 维度。新增用例 TestBatchCancelHonoursTheGoodsIDFilter。
BatchCancelRequest
GoodsID
watch
TestBatchCancelHonoursTheGoodsIDFilter
服务端 gofmt / go vet / go build 干净,task / purchase / access 全绿;sybimport 仍为 12 条,与 #285 基线一致;Web npm run build:prod 通过。
gofmt
go vet
go build
task
purchase
access
sybimport
npm run build:prod
未在浏览器人工核对:筛选联动、角标实时变化、确认框列表、hasMore 提示。需本地重启后进行。
待验收。
No dependencies set.
The note is not visible to the blocked user.
问题
采集任务页混着三种来源显示——
image_search(图搜)、agent_current_page(真机拍照临时采集)、手动/批量创建的普通采集——但筛选只有goodsId和状态两项(web/src/views/goauto/collection-tasks/index.vue:10-11),没有来源筛选。要批量取消未开始的任务时,无法限定范围。
为什么不用两个按钮
曾考虑「取消未开始的图搜任务」+「取消未开始的采集任务」两个按钮。否决理由:来源有三种不是两种,第二个按钮的文案说不清含不含拍照临时采集,而这是不可逆操作,最不该让人猜。将来新增来源还要再加按钮,把筛选条件编码进按钮,数量只会涨。
方案
[必须]两个安全措施,缺一不可:设计证据
复用现有规范:筛选项沿用该页既有
el-select状态筛选的形态;按钮数量角标沿用 SYB 商品页「AI 匹配」「创建采购」的action-count做法;确认框沿用既有批量对话框。属于现有界面的小范围调整,按 AGENTS.md「明确复用的现有规范」一档。非目标
running任务(服务端已禁止)。create_request_id(按虾皮商品派生),要支持需新增批次列。暂不做。依赖
依赖 #297(服务端放开 pending 取消)。
验收
running任务时不受影响,提示说明「当前这个会跑完」。验证
Web 构建;本地构造批量 pending 后按来源筛选取消。
文档影响
采购员可见入口变化,按实际改动同步对应 Wiki 页面。
实施
提交
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 基线一致;Webnpm run build:prod通过。未验证
未在浏览器人工核对:筛选联动、角标实时变化、确认框列表、hasMore 提示。需本地重启后进行。
状态
待验收。