优化:采集/采购创建时默认预填上次选择的设备与规则 #179

Open
opened 2026-08-31 18:03:18 +08:00 by ila · 0 comments
Owner

Gitea MCP 未向当前会话暴露,按仓库规则回退项目根目录安全配置与 Gitea API 创建本工单;凭据未写入工单、代码或日志。

本单最初被用户要求并入 #178(采购任务批量软删除),但两者功能域、风险等级完全不同:#178 是高风险的删除数据变更,本单是低风险的界面便利性改动。按 AGENTS.md「只修改工单声明的交付单元…新发现的相邻问题记录或另建工单,不混入当前任务」单独建单,避免高风险确认门被无关内容拖慢。

2026-08-31 修订(已确认):用户确认记忆范围按「入口分别记忆」,不采用规则/设备各一个全局记忆值的默认方案。存放位置(浏览器本地存储)未见异议,按原方案保留。

原始需求摘要

来源:用户于 2026-08-31 提出「采集和采购时选择设备和规则时,默认是上一次选择的」。

目的:减少重复操作——运维通常固定用同一台设备、同一条规则批量创建采集/采购任务,每次都要重新选一遍。按入口分别记忆,是因为不同入口的业务场景不同(例如批量采集常用固定设备,单个创建时可能临时指定别的设备),不应互相污染。

基线与已核实事实

代码基线:5338dd0(2026-08-31)。核验日期 2026-08-31。已核实的设备/规则选择入口:

页面 位置 选择内容
web/src/views/goauto/pdd-products/index.vue:39-40 批量创建采集任务弹窗 batchData 采集规则 + Android 设备
web/src/views/goauto/syb-products/index.vue:73-74 批量创建采集任务弹窗 collectionBatchData 采集规则 + Android 设备
web/src/views/goauto/syb-products/index.vue:40 批量创建采购任务弹窗 relatedPurchase Android 设备(采购规则固定为线上默认规则,不在此处选择)
web/src/views/goauto/collection-tasks/index.vue:35-36 单个创建采集任务表单 form 采集规则 + Android 设备
  • 全仓 web/src/views/goauto 目前没有使用 localStorage 或任何"记住上次选择"的既有实现,本单没有现成模式可直接复用,需要新增。
  • 设备与规则均可被停用、删除或不再在线;记住的值必须能安全处理"不再有效"的情况,不能默认选中一个不可用项。

判断边界

  • 已确认(2026-08-31):记忆范围按「每个入口各自独立记忆」,即上表四个入口(pdd-products 批量采集、syb-products 批量采集、syb-products 批量采购、collection-tasks 单个创建)分别使用各自独立的规则/设备记忆值,互不共享、互不覆盖。
  • 记忆存放位置:按浏览器本地存储(不经服务端,不跨设备同步),理由是这是纯操作便利性偏好,不属于需要审计或多端同步的业务数据;如需跨设备同步会引入账号维度的服务端存储,属于更大改动,需用户另行确认(当前未提出该需求)。

目标

  1. 上述四个入口各自独立在弹窗/表单打开时,若该入口自身存在有效的历史选择,默认预填规则和设备;不读取、不受其他入口记忆值影响。
  2. 每次用户成功提交后更新记忆值为本次实际选择。
  3. 记忆的规则或设备如果已不存在、已停用或已下线,不预填、不报错,交由用户正常选择。

非目标

  • 不新增服务端存储、不新增接口;纯前端本地记忆。
  • 不跨浏览器、跨账号同步选择偏好。
  • 不改变规则/设备下拉列表本身的加载逻辑、排序或可选性判断。
  • 不改变任何创建接口的请求参数、校验或行为,deviceId 为空时"由空闲设备领取"的语义不变。
  • 不涉及采购规则选择(采购规则当前固定为服务端默认规则,不在本单范围)。

前置依赖与并行性

  • 无服务端依赖,纯前端改动。
  • 与 #172、#175、#177、#178 均无代码重叠,可并行。

固定实施方案(草案,待用户确认记忆范围后细化)

  1. 新增一个前端小工具(如 web/src/utils/goauto-preferences.js),封装对 localStorage 的读写。键名必须按入口区分,例如:

    • goauto.lastRule.pddBatchCollect / goauto.lastDevice.pddBatchCollect(pdd-products 批量采集)
    • goauto.lastRule.sybBatchCollect / goauto.lastDevice.sybBatchCollect(syb-products 批量采集)
    • goauto.lastDevice.sybBatchPurchase(syb-products 批量采购,只有设备)
    • goauto.lastRule.collectionTaskCreate / goauto.lastDevice.collectionTaskCreate(collection-tasks 单个创建)

    四组键各自独立读写,不共用同一个键,不做任何跨入口回退或复用。读写都做异常保护(localStorage 不可用时静默降级为不记忆,不影响页面正常使用)。

  2. 四个入口分别在自己的弹窗/表单初始化时,只读取自己对应的键,并与当前下拉选项列表比对:

    • 规则:记忆的 ruleId 存在于当前 options.rules 才预填。
    • 设备:记忆的 deviceId 存在于当前 options.devices/devices 且 selectable !== false 才预填;否则保持当前默认行为(不指定,由空闲设备领取)。
  3. 每个入口提交成功后,只把本次实际使用的 ruleId/deviceId 写回自己对应的键,不影响其他入口的记忆。deviceId 为空(不指定)时,默认保留该入口上一次的具体设备记忆,不用空值覆盖它,避免一次不指定设备就清空了该入口的长期习惯。

设计证据

现有弹窗/表单的默认值行为调整,不新增页面、不改变布局与交互控件,属最小范围改动;复用现有下拉选择器,不需要完整原型。实施前提供标注说明交用户确认,覆盖:有有效记忆时预填、记忆值已失效时回退默认、首次无记忆时行为不变三个状态。

验收标准

  • 四个入口在存在有效历史选择时正确预填规则和设备。
  • 记忆的规则/设备已失效(停用、删除、离线)时不预填,不报错,正常显示可选列表供用户选择。
  • 首次使用(无历史记忆)时行为与当前完全一致。
  • 提交成功后记忆值正确更新,下次打开对应入口生效。
  • localStorage 不可用(隐私模式等)时页面功能不受影响,仅不记忆。
  • 未修改任何创建接口的请求参数与服务端行为。
  • Web 单元测试与既有 e2e 测试通过。

必测场景

  • 首次打开,无记忆,行为不变。
  • 选择规则 A + 设备 B 并成功提交后,重新打开同一入口,预填 A/B。
  • 记忆的规则已被删除、记忆的设备已下线/停用,分别验证不预填且不报错。
  • 入口隔离:在入口一(如 pdd-products 批量采集)选定规则/设备并提交后,打开入口二(如 collection-tasks 单个创建)时不应被入口一的记忆值预填,各入口互不影响。
  • 提交时不指定设备(留空),验证记忆是否按确认的语义处理。

风险与安全门禁

  • 纯前端展示层默认值调整,不涉及权限、安全、并发、数据库变化。
  • 不得默认预填一个已失效/不可用的设备或规则,避免用户误以为选中了实际不可用的目标而提交出错误任务。

文档影响

无长期文档影响。 未新增接口、参数或数据结构,仅调整前端表单默认值来源;启动、测试、部署与排错方式均未变化。因此跳过 Wiki 更新与同步。

状态

待确认(2026-08-31 创建;记忆范围已于同日确认为「按入口分别记忆」;等待用户确认界面说明截图后方可实施)。

> Gitea MCP 未向当前会话暴露,按仓库规则回退项目根目录安全配置与 Gitea API 创建本工单;凭据未写入工单、代码或日志。 > > 本单最初被用户要求并入 #178(采购任务批量软删除),但两者功能域、风险等级完全不同:#178 是高风险的删除数据变更,本单是低风险的界面便利性改动。按 `AGENTS.md`「只修改工单声明的交付单元…新发现的相邻问题记录或另建工单,不混入当前任务」单独建单,避免高风险确认门被无关内容拖慢。 > > **2026-08-31 修订(已确认)**:用户确认记忆范围按「入口分别记忆」,不采用规则/设备各一个全局记忆值的默认方案。存放位置(浏览器本地存储)未见异议,按原方案保留。 ## 原始需求摘要 来源:用户于 2026-08-31 提出「采集和采购时选择设备和规则时,默认是上一次选择的」。 目的:减少重复操作——运维通常固定用同一台设备、同一条规则批量创建采集/采购任务,每次都要重新选一遍。按入口分别记忆,是因为不同入口的业务场景不同(例如批量采集常用固定设备,单个创建时可能临时指定别的设备),不应互相污染。 ## 基线与已核实事实 代码基线:`5338dd0`(2026-08-31)。核验日期 2026-08-31。已核实的设备/规则选择入口: | 页面 | 位置 | 选择内容 | |---|---|---| | `web/src/views/goauto/pdd-products/index.vue:39-40` | 批量创建采集任务弹窗 `batchData` | 采集规则 + Android 设备 | | `web/src/views/goauto/syb-products/index.vue:73-74` | 批量创建采集任务弹窗 `collectionBatchData` | 采集规则 + Android 设备 | | `web/src/views/goauto/syb-products/index.vue:40` | 批量创建采购任务弹窗 `relatedPurchase` | Android 设备(采购规则固定为线上默认规则,不在此处选择) | | `web/src/views/goauto/collection-tasks/index.vue:35-36` | 单个创建采集任务表单 `form` | 采集规则 + Android 设备 | - 全仓 `web/src/views/goauto` 目前没有使用 `localStorage` 或任何"记住上次选择"的既有实现,本单没有现成模式可直接复用,需要新增。 - 设备与规则均可被停用、删除或不再在线;记住的值必须能安全处理"不再有效"的情况,不能默认选中一个不可用项。 ## 判断边界 - **已确认(2026-08-31)**:记忆范围按「每个入口各自独立记忆」,即上表四个入口(`pdd-products` 批量采集、`syb-products` 批量采集、`syb-products` 批量采购、`collection-tasks` 单个创建)分别使用各自独立的规则/设备记忆值,互不共享、互不覆盖。 - 记忆存放位置:按**浏览器本地存储**(不经服务端,不跨设备同步),理由是这是纯操作便利性偏好,不属于需要审计或多端同步的业务数据;如需跨设备同步会引入账号维度的服务端存储,属于更大改动,需用户另行确认(当前未提出该需求)。 ## 目标 1. 上述四个入口各自独立在弹窗/表单打开时,若该入口自身存在有效的历史选择,默认预填规则和设备;不读取、不受其他入口记忆值影响。 2. 每次用户成功提交后更新记忆值为本次实际选择。 3. 记忆的规则或设备如果已不存在、已停用或已下线,不预填、不报错,交由用户正常选择。 ## 非目标 - 不新增服务端存储、不新增接口;纯前端本地记忆。 - 不跨浏览器、跨账号同步选择偏好。 - 不改变规则/设备下拉列表本身的加载逻辑、排序或可选性判断。 - 不改变任何创建接口的请求参数、校验或行为,`deviceId` 为空时"由空闲设备领取"的语义不变。 - 不涉及采购规则选择(采购规则当前固定为服务端默认规则,不在本单范围)。 ## 前置依赖与并行性 - 无服务端依赖,纯前端改动。 - 与 #172、#175、#177、#178 均无代码重叠,可并行。 ## 固定实施方案(草案,待用户确认记忆范围后细化) 1. 新增一个前端小工具(如 `web/src/utils/goauto-preferences.js`),封装对 `localStorage` 的读写。键名必须按入口区分,例如: - `goauto.lastRule.pddBatchCollect` / `goauto.lastDevice.pddBatchCollect`(`pdd-products` 批量采集) - `goauto.lastRule.sybBatchCollect` / `goauto.lastDevice.sybBatchCollect`(`syb-products` 批量采集) - `goauto.lastDevice.sybBatchPurchase`(`syb-products` 批量采购,只有设备) - `goauto.lastRule.collectionTaskCreate` / `goauto.lastDevice.collectionTaskCreate`(`collection-tasks` 单个创建) 四组键各自独立读写,不共用同一个键,不做任何跨入口回退或复用。读写都做异常保护(`localStorage` 不可用时静默降级为不记忆,不影响页面正常使用)。 2. 四个入口分别在自己的弹窗/表单初始化时,只读取自己对应的键,并与当前下拉选项列表比对: - 规则:记忆的 `ruleId` 存在于当前 `options.rules` 才预填。 - 设备:记忆的 `deviceId` 存在于当前 `options.devices`/`devices` 且 `selectable !== false` 才预填;否则保持当前默认行为(不指定,由空闲设备领取)。 3. 每个入口提交成功后,只把本次实际使用的 `ruleId`/`deviceId` 写回自己对应的键,不影响其他入口的记忆。`deviceId` 为空(不指定)时,默认保留该入口上一次的具体设备记忆,不用空值覆盖它,避免一次不指定设备就清空了该入口的长期习惯。 ## 设计证据 现有弹窗/表单的默认值行为调整,不新增页面、不改变布局与交互控件,属最小范围改动;复用现有下拉选择器,不需要完整原型。实施前提供标注说明交用户确认,覆盖:有有效记忆时预填、记忆值已失效时回退默认、首次无记忆时行为不变三个状态。 ## 验收标准 - [ ] 四个入口在存在有效历史选择时正确预填规则和设备。 - [ ] 记忆的规则/设备已失效(停用、删除、离线)时不预填,不报错,正常显示可选列表供用户选择。 - [ ] 首次使用(无历史记忆)时行为与当前完全一致。 - [ ] 提交成功后记忆值正确更新,下次打开对应入口生效。 - [ ] `localStorage` 不可用(隐私模式等)时页面功能不受影响,仅不记忆。 - [ ] 未修改任何创建接口的请求参数与服务端行为。 - [ ] Web 单元测试与既有 e2e 测试通过。 ## 必测场景 - 首次打开,无记忆,行为不变。 - 选择规则 A + 设备 B 并成功提交后,重新打开同一入口,预填 A/B。 - 记忆的规则已被删除、记忆的设备已下线/停用,分别验证不预填且不报错。 - 入口隔离:在入口一(如 `pdd-products` 批量采集)选定规则/设备并提交后,打开入口二(如 `collection-tasks` 单个创建)时不应被入口一的记忆值预填,各入口互不影响。 - 提交时不指定设备(留空),验证记忆是否按确认的语义处理。 ## 风险与安全门禁 - 纯前端展示层默认值调整,不涉及权限、安全、并发、数据库变化。 - 不得默认预填一个已失效/不可用的设备或规则,避免用户误以为选中了实际不可用的目标而提交出错误任务。 ## 文档影响 **无长期文档影响。** 未新增接口、参数或数据结构,仅调整前端表单默认值来源;启动、测试、部署与排错方式均未变化。因此跳过 Wiki 更新与同步。 ## 状态 待确认(2026-08-31 创建;记忆范围已于同日确认为「按入口分别记忆」;等待用户确认界面说明截图后方可实施)。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#179