feat(web): 采集任务页新增按设备筛选 #383

Open
opened 2026-10-12 16:56:11 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:小范围界面改动(Web:Admin 采集任务页新增「设备」筛选)。
  • 状态:已建单,待实施;本次只建单。
  • 来源:2026-10-12 用户问「admin采集任务模块要不要也增加采集设备和采集创建账号的筛选条件呢?」;Claude Code 建议设备筛选只改 Web、创建账号视用途;用户选「A」(只做按设备筛选),并确认「直接建这张小单」(不并入 #382)。Gitea MCP 不可用,回退 REST。
  • 关联:#382(采购管理按设备/创建人筛选,含迁移,独立推进)。

已核验事实(origin/main 16e3d35,2026-10-12)

  • 服务端已支持:GET 采集任务列表读取 deviceId(server/app/goauto/task/admin_handler.go:25,admin_service.go:36 AdminListRequest.DeviceID),非法值返回 INVALID_REQUEST。
  • Web 缺少该筛选:web/src/views/goauto/collection-tasks/index.vue 筛选区只有 Goods ID、状态、来源(:10–12);新建任务弹窗已用 listDevices({ page: 1, pageSize: 100 }) 加载设备(:168)。
  • 线上只读:采集任务全部带设备(admin 254、agent_current_page 343、image_search 2314,device_id 为空 0 条),共涉及 6 台设备。

目标

采集任务列表可按设备筛选。

非目标

  • 不改服务端、数据库、Android、API。
  • 不做按创建账号筛选(用户选 A)。
  • 不改列表列、详情和新建弹窗。

方案

  1. 筛选区在「来源」后新增「设备」下拉(el-select,可清空、可搜索,样式与「来源」一致),选项为设备名称,包含已停用设备(历史任务仍可筛)。
  2. 选项在页面加载时用现有 listDevices 获取,与新建弹窗共用同一份数据或同一调用;加载失败时下拉为空并不影响列表查询。
  3. 查询时传 deviceId,「重置」清空;分页、刷新沿用当前筛选。

设计证据

现有页面小范围变化:筛选区追加一个与「来源」同样式的下拉,复用现有组件,无布局变化,不需要原型。

子项目影响、依赖与并行

  • 仅 Web:web/src/views/goauto/collection-tasks/index.vue(如需要 web/src/api/goauto/ 内既有 listDevices 调用,不改接口)。
  • 无依赖;与 #381、#382 文件不重叠,可并行。

验收标准

  • 选择设备后列表只显示该设备的任务,与其他筛选组合正确;重置后恢复全部。
  • 设备列表加载失败不影响列表查询。
  • 前端构建与相关测试通过;浏览器检查一次(本地或经授权的环境)。
  • 发布需用户另行授权。

风险与回退

  • 低风险:仅新增查询参数传递。回退为移除下拉。

文档影响

无长期文档影响:服务端早已支持该参数,仅补齐既有 Admin 页面的筛选入口,不改变接口、数据或业务规则。

## 基本信息 - 类型:小范围界面改动(Web:Admin 采集任务页新增「设备」筛选)。 - 状态:**已建单,待实施**;本次只建单。 - 来源:2026-10-12 用户问「admin采集任务模块要不要也增加采集设备和采集创建账号的筛选条件呢?」;Claude Code 建议设备筛选只改 Web、创建账号视用途;用户选「A」(只做按设备筛选),并确认「直接建这张小单」(不并入 #382)。Gitea MCP 不可用,回退 REST。 - 关联:#382(采购管理按设备/创建人筛选,含迁移,独立推进)。 ## 已核验事实(`origin/main` `16e3d35`,2026-10-12) - 服务端已支持:`GET` 采集任务列表读取 `deviceId`(`server/app/goauto/task/admin_handler.go:25`,`admin_service.go:36` `AdminListRequest.DeviceID`),非法值返回 `INVALID_REQUEST`。 - Web 缺少该筛选:`web/src/views/goauto/collection-tasks/index.vue` 筛选区只有 Goods ID、状态、来源(:10–12);新建任务弹窗已用 `listDevices({ page: 1, pageSize: 100 })` 加载设备(:168)。 - 线上只读:采集任务全部带设备(admin 254、agent_current_page 343、image_search 2314,`device_id` 为空 0 条),共涉及 6 台设备。 ## 目标 采集任务列表可按设备筛选。 ## 非目标 - 不改服务端、数据库、Android、API。 - 不做按创建账号筛选(用户选 A)。 - 不改列表列、详情和新建弹窗。 ## 方案 1. 筛选区在「来源」后新增「设备」下拉(`el-select`,可清空、可搜索,样式与「来源」一致),选项为设备名称,包含已停用设备(历史任务仍可筛)。 2. 选项在页面加载时用现有 `listDevices` 获取,与新建弹窗共用同一份数据或同一调用;加载失败时下拉为空并不影响列表查询。 3. 查询时传 `deviceId`,「重置」清空;分页、刷新沿用当前筛选。 ## 设计证据 现有页面小范围变化:筛选区追加一个与「来源」同样式的下拉,复用现有组件,无布局变化,不需要原型。 ## 子项目影响、依赖与并行 - 仅 Web:`web/src/views/goauto/collection-tasks/index.vue`(如需要 `web/src/api/goauto/` 内既有 `listDevices` 调用,不改接口)。 - 无依赖;与 #381、#382 文件不重叠,可并行。 ## 验收标准 - [ ] 选择设备后列表只显示该设备的任务,与其他筛选组合正确;重置后恢复全部。 - [ ] 设备列表加载失败不影响列表查询。 - [ ] 前端构建与相关测试通过;浏览器检查一次(本地或经授权的环境)。 - [ ] 发布需用户另行授权。 ## 风险与回退 - 低风险:仅新增查询参数传递。回退为移除下拉。 ## 文档影响 无长期文档影响:服务端早已支持该参数,仅补齐既有 Admin 页面的筛选入口,不改变接口、数据或业务规则。
Author
Owner

开始实施(2026-10-12,Claude Code)

用户:「按照顺序安排subagent用sonnet做#381 #382 #383。」

  • worktree D:/OPC/goauto-worktrees/issue-383,分支 feat/383-collection-device-filter,基线 origin/main 16e3d35。
  • 由 Sonnet 子 Agent 实施,Claude Code 审查。推送、合并、发布需用户授权。Gitea MCP 不可用,回退 REST。
## 开始实施(2026-10-12,Claude Code) 用户:「按照顺序安排subagent用sonnet做#381 #382 #383。」 - worktree `D:/OPC/goauto-worktrees/issue-383`,分支 `feat/383-collection-device-filter`,基线 `origin/main` `16e3d35`。 - 由 Sonnet 子 Agent 实施,Claude Code 审查。推送、合并、发布需用户授权。Gitea MCP 不可用,回退 REST。
Author
Owner

实现回写(2026-10-12,Claude Code)

用户授权:「按照顺序做1,2,3,4。」。Sonnet 子 Agent 实施,Claude Code 审查。Gitea MCP 不可用,回退 REST。

  • 分支 feat/383-collection-device-filter 已推送:0745b2d,仅 collection-tasks/index.vue(+12/−7)。
  • 「来源」后新增「设备」下拉(可清空、可搜索、含停用设备),选项来自 listDevices,失败时为空不影响查询;查询传 deviceId,重置清空。
  • 偏离(审查认可):批量取消接口不支持设备维度,选中设备时禁用「取消未开始任务」并计数为 0,避免取消范围超出当前列表。如需按设备批量取消另建服务端单。
  • 验证:改动文件 eslint 与基线一致(5 个旧问题),build:prod 成功;未做浏览器交互检查。
## 实现回写(2026-10-12,Claude Code) 用户授权:「按照顺序做1,2,3,4。」。Sonnet 子 Agent 实施,Claude Code 审查。Gitea MCP 不可用,回退 REST。 - 分支 `feat/383-collection-device-filter` 已推送:`0745b2d`,仅 `collection-tasks/index.vue`(+12/−7)。 - 「来源」后新增「设备」下拉(可清空、可搜索、含停用设备),选项来自 `listDevices`,失败时为空不影响查询;查询传 `deviceId`,重置清空。 - 偏离(审查认可):批量取消接口不支持设备维度,选中设备时禁用「取消未开始任务」并计数为 0,避免取消范围超出当前列表。如需按设备批量取消另建服务端单。 - 验证:改动文件 eslint 与基线一致(5 个旧问题),`build:prod` 成功;未做浏览器交互检查。
Author
Owner

合并、发布与 Wiki(2026-10-12,Claude Code)

用户授权:「按照顺序做1,2,3,4。如果线上有采集和采购任务进行着,等待无任务时再重启」;发布前用户选择「A」(按 main 发布,含 #378)。Gitea MCP 不可用,回退 REST。

  • 本单无长期文档影响(正文已说明);Business-Rules 顺带记一行入口说明。
  • 待业务验收:线上采集任务页按设备筛选。
  • 合并:干净 worktree 基于 origin/main 16e3d35,依次 --no-ff 合并 #381 → c5709a0、#382 → 0893b55、#383 → 15bab9c,无冲突,已推送。合并后 go test ./... 除既有失败外通过(sybimport 基线已有失败;apprelease TestParseBuiltAgentAPKWhenAvailable 为本地有 Debug APK 时才运行的过时用例),Linux 构建与 Web build:prod 通过。
  • 发布(122.228.200.167):用户选择按 main 发布(含此前未发布的 #378 Server 与迁移)。目录 /home/goauto/releases/20261012-15bab9c-381-382-383;数据库备份 /home/goauto/backups/20261012-381-382-383;迁移 1791600000000、1791700000000 执行成功并回读;迁移前与切换前无执行中的采集/采购/同步/AI/自动匹配任务;current 原子切换并重启,active。server SHA256 f3486444…ff3695(进程一致),index.html a4c85aa8…d5853。
  • 按内容验收:首页/登录页为新 index,10 项 JS/CSS 200,验证码 200,未登录业务接口(含 filter-options)401,日志无 panic/fatal/1146/1054;采购1/2 心跳恢复在线。
  • 回滚:current 切回 /home/goauto/releases/20261010-3d5e964-372v3-web 并重启;新增列/表保留。
  • Wiki:Business-Rules-and-Glossary c8aa5a4716d0b9a462677b1276a7362d7227c95c、Architecture-and-Code-Map 72fa776c9adb4993c84918494b37516f3156d354、Deployment-and-Operations 4103d9b6174bdba2886c4916e85e0763ce2dcd53,回读一致;sync 与 sync --check 各一次通过,镜像 ac112b5 已推送 main。
## 合并、发布与 Wiki(2026-10-12,Claude Code) 用户授权:「按照顺序做1,2,3,4。如果线上有采集和采购任务进行着,等待无任务时再重启」;发布前用户选择「A」(按 main 发布,含 #378)。Gitea MCP 不可用,回退 REST。 - 本单无长期文档影响(正文已说明);Business-Rules 顺带记一行入口说明。 - 待业务验收:线上采集任务页按设备筛选。 - 合并:干净 worktree 基于 `origin/main` `16e3d35`,依次 `--no-ff` 合并 #381 → `c5709a0`、#382 → `0893b55`、#383 → `15bab9c`,无冲突,已推送。合并后 `go test ./...` 除既有失败外通过(`sybimport` 基线已有失败;`apprelease` `TestParseBuiltAgentAPKWhenAvailable` 为本地有 Debug APK 时才运行的过时用例),Linux 构建与 Web `build:prod` 通过。 - 发布(122.228.200.167):用户选择按 main 发布(含此前未发布的 #378 Server 与迁移)。目录 `/home/goauto/releases/20261012-15bab9c-381-382-383`;数据库备份 `/home/goauto/backups/20261012-381-382-383`;迁移 `1791600000000`、`1791700000000` 执行成功并回读;迁移前与切换前无执行中的采集/采购/同步/AI/自动匹配任务;current 原子切换并重启,active。server SHA256 `f3486444…ff3695`(进程一致),index.html `a4c85aa8…d5853`。 - 按内容验收:首页/登录页为新 index,10 项 JS/CSS 200,验证码 200,未登录业务接口(含 `filter-options`)401,日志无 panic/fatal/1146/1054;采购1/2 心跳恢复在线。 - 回滚:current 切回 `/home/goauto/releases/20261010-3d5e964-372v3-web` 并重启;新增列/表保留。 - Wiki:Business-Rules-and-Glossary `c8aa5a4716d0b9a462677b1276a7362d7227c95c`、Architecture-and-Code-Map `72fa776c9adb4993c84918494b37516f3156d354`、Deployment-and-Operations `4103d9b6174bdba2886c4916e85e0763ce2dcd53`,回读一致;`sync` 与 `sync --check` 各一次通过,镜像 `ac112b5` 已推送 main。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#383