SYB 商品页新增批量使用退货 #349

Open
opened 2026-09-29 09:51:11 +08:00 by ila · 5 comments
Owner

基本信息

  • 类型:需求;单元工单。
  • 关联:#338 退货匹配、#341 角色权限、#347 当前页批量取消。
  • 阶段:v2 实施、验证、提交及推送完成;已合并 main(dd9160e),待人工验收,未发布。
  • 来源:用户对话,2026-09-29。用户反馈匹配成功后勾选多条“退货待确认”的 SYB 商品,缺少批量使用退货功能;随后明确要求“按照你的最小方案建工单”。

基线、依赖与并行

  • 核验日期 2026-09-29;main 基线 e7c049dbd6c8e89a82109f8b79f5ec95d6522fc3;#347 实现提交 a4c7b5e97b40cef14df5fd028310b83e05b0fa9f,已推送 feat/347-batch-return-cancel,尚未合并/部署,待验收。
  • #338 已有单条确认接口和状态机;#341 已有 admin / purchaser / after_sales 权限;#347 提供待确认勾选与批量结果模式。
  • 可独立补设计及验证既有接口;复用 #347 的 Web 实施前应核对其可用基线。#347 未合并时不得宣称 main/线上具备其能力,须先合并或明确以其提交作为开发基线。
  • 不与其他任务并行修改同一 SYB 列表页面;不必新建批量后台服务。

当前代码事实

  • server/app/goauto/returnmatch/service.go Confirm:锁定原匹配记录,在同一事务中检查 status=matched;改为 confirmed,记录 ConfirmedBy/ConfirmedAt,并写确认日志。其他状态返回 STATE_CONFLICT。
  • POST /api/admin/v1/return-matches/:id/confirm 已存在;Handler 沿用 admin / purchaser / after_sales 写权限。
  • web/src/api/goauto/return-matches.js 已有 confirmReturnMatch;SYB 列表仅在匹配详情提供单条确认,未发现列表批量确认入口。
  • purchase/process_stage.go 将有效 confirmed 匹配展示为 return_used(已用退货),继续拦截创建采购;不改变已有采购任务。
  • #347 明确不含批量确认,本单独立交付,不扩大 #347 范围。

目标与非目标

  • 目标:当前页批量使用退货,减少逐条打开详情的操作;保留一次确认、明确结果和失败手动重试。
  • 非目标:跨页全选、后台自动确认、批量取消采购、自动采购/支付、Yeeke 重出/发货调用、SYB 外部写入、额外审批、库存/物流校验、数据库或权限迁移。
  • “确认使用退货”仅为 GoAuto Admin 内部标记已用退货,不代表 Yeeke 已发货或重出,不修改既有采购/采集任务。

最小方案

  1. SYB 现有工具栏按“匹配退货 → 取消匹配 N → 使用退货 N”排列;沿用现有组件与样式,不重构筛选或表格。N 只统计当前页勾选且处理阶段 return_pending、当前有效匹配为 matched 的商品;已用退货、无候选或元数据不可用不参与。
  2. 点击时去重并冻结 SYB 商品 ID 与原 match ID,之后不按 SYB ID 追随重新匹配的新记录。保持现有单条确认、取消、备注功能。
  3. 一次确认:“确认使用选中的 N 条退货商品?确认后将标记为已用退货,不再创建采购任务。”补一句“不修改已有采购任务,也不会自动让 Yeeke 发货”。点击返回不写入。
  4. 复用 POST /api/admin/v1/return-matches/:id/confirm,前端逐条串行执行、每项独立事务。原服务已在锁内检查 matched,无需新增 expectedStatus 字段、批量接口或状态。
  5. 展示进度及成功/跳过/失败明细。已确认、已取消及状态冲突跳过;其他业务、权限或网络错误失败,不回滚其他已成功项。登录失效停止后续写入,未执行候选保留明确结果。
  6. 网络结果未知时只读回原 match ID;回读已确认显示原匹配已确认,不盲目自动重发;原记录仍待确认则允许用户手动重试;回读失败明确结果未知,不猜测成功。
  7. 执行期间防重复提交,与匹配退货、批量取消、单条确认/取消等写操作互斥。元数据加载中/失败禁用并给出原因;无操作权限隐藏。
  8. 完成后保持查询条件和页码刷新列表、处理阶段及匹配信息。成功项变为已用退货,在“退货待确认”筛选下自然移出;仅恢复当前页仍为原 matched 匹配的可重试失败项勾选。离页失败仍保留结果,不跨页隐式操作;旧异步结果不得覆盖新筛选。
  9. 不因放宽勾选让退货匹配行进入采购、采集、图搜或 AI 匹配候选。确认保留有效占用,不释放为可用退货池。

影响与范围

  • Web:syb-products/index.vue、相关批量操作辅助逻辑、return-matches.js 请求包装及受影响测试。
  • Server:复用既有 Confirm 状态事务与权限,必要时补针对性回归测试;首版不规划生产 Server 行为变化。若真实阻塞需要改接口、数据或权限,先补方案并取得授权,不混入。
  • Android 无变化;无迁移、无新权限、无外部服务写入。

设计证据与门禁

  • 2026-09-29 用户调整:按钮“确认使用退货”改为“使用退货”,移至“取消匹配”后;已更新 v2,其他范围及一次确认逻辑不变。v1 被 v2 替代,未被批准。
  • 版本:#349 v2,2026-09-29;轻量设计已确认,开始实施。
  • 线上审核:https://qux.ilapage.cn/#/apps/6abb1a24191a826306a801e1.html
  • QuantUX App ID:6abb1a24191a826306a801e1;App 名称:GoAuto #349 v2 · SYB 批量使用退货(轻量审核)。画面顶部标注 #349 v2,底部提供场景切换。
  • 沿用 #347 的既有页面与批量反馈样式,仅在“取消匹配”后新增“使用退货 N”,不增加新页面或审批。
  • 10 个审核场景:按钮与勾选、一次确认、执行进度、部分成功、失败项保留、空与加载失败、禁用与竞态、无操作权限、全部成功、网络与登录。
  • 确认框注明:标记已用退货、不再创建采购;不修改已有采购任务,不自动让 Yeeke 发货。当前页范围、原匹配身份、串行互斥、失败恢复、认证停止及网络先回读见画面标注。
  • 原型使用虚构 DEMO 数据,不调用任何业务接口;进度/结果与失败重试为场景示意,不代表实际批处理或真实网络。底部场景按钮仅用于审核,不是生产页面新增功能。
  • QuantUX 回读核验:10 screens、792 widgets、108 lines,所有引用均存在,Label/Button 同时设置 props.label 与 props.text,避免既有导出器空文案问题。
  • 用户确认人:用户;确认时间:2026-09-29,本会话“原型通过,做#349”;覆盖 v2 的按钮名称、顺序及十类场景。
  • 设计阶段仅更新原型/工单;用户确认 v2 后实施,结果及 Wiki 证据见下文。未修改真实业务状态、迁移或发布。

验收标准

  • 当前页退货待确认可勾选;新增确认按钮顺序正确,计数仅有效待确认项;无候选/资料不可用/执行中禁用,无权限隐藏。
  • 一次确认,返回不写入;快照原匹配 ID,去重、串行、防重复及写操作互斥。
  • mixed selection 只确认 matched 候选,confirmed/cancelled 跳过,不确认后来的替代匹配。
  • 成功更新 confirmed、操作人/时间及日志,保持有效占用;阶段显示已用退货,不创建采购、不修改已有任务或调用 Yeeke 发货。
  • 每项独立结果;部分失败不回滚成功项,网络未知先回读,登录失效停止,未执行项有明确说明。
  • 刷新保留筛选及页码;当前页可重试失败项保留勾选;离页失败保留结果;旧请求不会覆盖较新查询。
  • 管理员、采购员、售后沿用现有权限;原单条确认、取消、匹配及采购/采集候选规则不回归。

验证计划

  • Server 隔离测试:matched 确认、重复/取消冲突、不存在、确认审计、权限及确认/取消状态竞态;不能把 SQLite 模拟描述为生产 MySQL 并发验证。
  • Web 单元与 mock 浏览器:候选计数、一次确认/返回、冻结身份、串行及互斥、部分失败、认证停止、网络回读、失败选择恢复、筛选代次、现有操作回归。
  • 受影响 ESLint、Web 生产构建、必要 Server 回归、git diff --check。
  • 不操作生产数据;真实确认、合并/发布、权限或数据库变更另需授权。

文档影响

  • 实施后更新 Architecture-and-Code-Map:列表批量确认调用链。
  • 实施后更新 Business-Rules-and-Glossary:当前页确认范围、已用退货语义与重试规则。
  • 实施后更新 Android-Agent-API-Contract 的 Admin 接口说明:复用确认接口与结果处理;不改 Agent 契约或 HTTP 字段。
  • 仅建单阶段不更新长期 Wiki、不导出任务快照。

风险与回退

  • 真实确认是业务状态写入:主要风险是选中后状态变化、重复提交、网络结果未知。复用原匹配 ID、已有锁内 matched 校验、操作互斥和只读回读控制,不增加复杂门禁。
  • 回退仅隐藏新按钮/回退代码,不覆盖数据库或抹除确认审计。误确认沿用已有单条取消,后续是否采购仍按 readiness 判断。

工单访问

本会话未发现项目 Gitea MCP 工具,建单回退使用项目安全配置的 Gitea API;不输出凭据。

实施交付与验证(2026-09-29,待验收)

  • 开发基线:#347 a4c7b5e97b40cef14df5fd028310b83e05b0fa9f;origin/main 仍 e7c049d。分支 feat/349-batch-return-use,未合并 main/部署,不宣称线上已具备功能。
  • 实现提交:4280115e11ae26366a27e88818e73f34254ceb35;文档与浏览器收尾提交:14231c62a75789613fbada2c309f0b147f9a2618。已推送并回读远端分支,HEAD 与远端一致。
  • “使用退货 N”位于“取消匹配”之后,沿用既有组件。仅当前页有效待确认明细去重计数;一次确认、原 match ID 冻结、串行写入、互斥其他退货写操作、进度及成功/跳过/失败明细。
  • 复用确认接口和原 Server 事务;只有 Web 生产改动,Server 仅追加回归测试。没有迁移、新权限、Android、Yeeke 发货或采购创建/取消行为变更。
  • 网络失败回读原记录,验证身份,回读已确认/已取消归为跳过而不是本次成功;仍待确认才保留手动重试资格。登录失效停止后续写入,结果保留明确未执行。刷新保持筛选/页码,按 generation 与原匹配恢复当前页失败选择,不跨页或追随替代匹配。

已执行验证

  • Node Web 单元:node --test web/tests/unit/syb-return-confirm.test.cjs web/tests/unit/syb-return-cancel.test.cjs,32/32 通过(#349 新增 17、#347 回归 15)。
  • 隔离浏览器:syb-return-confirm.spec.ts 8 项、syb-return-cancel.spec.ts 7 项,共 15/15 通过;补充等待对话框结束后再次跑新增 8 项,8/8 通过,并目视检查截图的按钮顺序与失败项选择。API 全部使用 MOCK 拦截,没有连接真实业务数据。
  • 受影响 4 个 Web 源文件 ESLint 通过。
  • pnpm build:prod 通过。保留已有 CSS 伪类/伪元素与大 chunk 警告,不混入无关修复。
  • go test ./app/goauto/returnmatch ./app/goauto/purchase -count=1 通过;确认覆盖三角色、禁止角色、取消/确认冲突、不存在、原记录被取消后重匹配、重复确认、审计回滚和占用保留。采用隔离 SQLite,不冒称 MySQL 真实并发验证。
  • git diff --check 通过;临时 Vite 验证服务已停止。
  • python dev_scripts/harness.py check --strict 未通过:既有 docs/evidence/pdd-home-35727-summary.md(#277,a16e692)是未登记 Wiki 镜像;相对本单基线该文件无改动,不扩大 #349 修复。

长期文档闭环

仅在线追加本单已实施事实,回读内容及 revision 后一次 sync、一次 sync --check(退出码 0,17 个核心镜像一致):

  • Architecture-and-Code-Map:9b4a1a06b8e2f6a8dfdbaef87817d840dfa45389。
  • Business-Rules-and-Glossary:9a7317728132c450c7abf244c3e5eaac7bfb71bc。
  • Android-Agent-API-Contract(仅 Admin 补充):102d40fb2d960b05684e2a82e85729362070fdb5。
  • 三个相关镜像已提交。完整同步也暴露既有 SYB-ERP 镜像与线上源的差异;docs/12-syb-erp-interface.md 保持未提交,未反向覆盖线上或混入本单。其他原工作区变更保留。
  • 未创建任务归档/本地原型快照。本会话无 Gitea MCP,工单与 Wiki 使用 API 回退,未输出凭据。

待人工验收 / 未验证范围

  • 原型已批准不等于真实业务验收;工单保持 open。
  • 未执行真实退货确认、生产数据修改、MySQL 并发、正式账号线上浏览器测试或合并发布。无需数据库迁移;后续合并 #347/#349 并发布仍需用户明确授权。
## 基本信息 - 类型:需求;单元工单。 - 关联:#338 退货匹配、#341 角色权限、#347 当前页批量取消。 - 阶段:v2 实施、验证、提交及推送完成;已合并 main(dd9160e),待人工验收,未发布。 - 来源:用户对话,2026-09-29。用户反馈匹配成功后勾选多条“退货待确认”的 SYB 商品,缺少批量使用退货功能;随后明确要求“按照你的最小方案建工单”。 ## 基线、依赖与并行 - 核验日期 2026-09-29;main 基线 e7c049dbd6c8e89a82109f8b79f5ec95d6522fc3;#347 实现提交 a4c7b5e97b40cef14df5fd028310b83e05b0fa9f,已推送 feat/347-batch-return-cancel,尚未合并/部署,待验收。 - #338 已有单条确认接口和状态机;#341 已有 admin / purchaser / after_sales 权限;#347 提供待确认勾选与批量结果模式。 - 可独立补设计及验证既有接口;复用 #347 的 Web 实施前应核对其可用基线。#347 未合并时不得宣称 main/线上具备其能力,须先合并或明确以其提交作为开发基线。 - 不与其他任务并行修改同一 SYB 列表页面;不必新建批量后台服务。 ## 当前代码事实 - server/app/goauto/returnmatch/service.go Confirm:锁定原匹配记录,在同一事务中检查 status=matched;改为 confirmed,记录 ConfirmedBy/ConfirmedAt,并写确认日志。其他状态返回 STATE_CONFLICT。 - POST /api/admin/v1/return-matches/:id/confirm 已存在;Handler 沿用 admin / purchaser / after_sales 写权限。 - web/src/api/goauto/return-matches.js 已有 confirmReturnMatch;SYB 列表仅在匹配详情提供单条确认,未发现列表批量确认入口。 - purchase/process_stage.go 将有效 confirmed 匹配展示为 return_used(已用退货),继续拦截创建采购;不改变已有采购任务。 - #347 明确不含批量确认,本单独立交付,不扩大 #347 范围。 ## 目标与非目标 - 目标:当前页批量使用退货,减少逐条打开详情的操作;保留一次确认、明确结果和失败手动重试。 - 非目标:跨页全选、后台自动确认、批量取消采购、自动采购/支付、Yeeke 重出/发货调用、SYB 外部写入、额外审批、库存/物流校验、数据库或权限迁移。 - “确认使用退货”仅为 GoAuto Admin 内部标记已用退货,不代表 Yeeke 已发货或重出,不修改既有采购/采集任务。 ## 最小方案 1. SYB 现有工具栏按“匹配退货 → 取消匹配 N → 使用退货 N”排列;沿用现有组件与样式,不重构筛选或表格。N 只统计当前页勾选且处理阶段 return_pending、当前有效匹配为 matched 的商品;已用退货、无候选或元数据不可用不参与。 2. 点击时去重并冻结 SYB 商品 ID 与原 match ID,之后不按 SYB ID 追随重新匹配的新记录。保持现有单条确认、取消、备注功能。 3. 一次确认:“确认使用选中的 N 条退货商品?确认后将标记为已用退货,不再创建采购任务。”补一句“不修改已有采购任务,也不会自动让 Yeeke 发货”。点击返回不写入。 4. 复用 POST /api/admin/v1/return-matches/:id/confirm,前端逐条串行执行、每项独立事务。原服务已在锁内检查 matched,无需新增 expectedStatus 字段、批量接口或状态。 5. 展示进度及成功/跳过/失败明细。已确认、已取消及状态冲突跳过;其他业务、权限或网络错误失败,不回滚其他已成功项。登录失效停止后续写入,未执行候选保留明确结果。 6. 网络结果未知时只读回原 match ID;回读已确认显示原匹配已确认,不盲目自动重发;原记录仍待确认则允许用户手动重试;回读失败明确结果未知,不猜测成功。 7. 执行期间防重复提交,与匹配退货、批量取消、单条确认/取消等写操作互斥。元数据加载中/失败禁用并给出原因;无操作权限隐藏。 8. 完成后保持查询条件和页码刷新列表、处理阶段及匹配信息。成功项变为已用退货,在“退货待确认”筛选下自然移出;仅恢复当前页仍为原 matched 匹配的可重试失败项勾选。离页失败仍保留结果,不跨页隐式操作;旧异步结果不得覆盖新筛选。 9. 不因放宽勾选让退货匹配行进入采购、采集、图搜或 AI 匹配候选。确认保留有效占用,不释放为可用退货池。 ## 影响与范围 - Web:syb-products/index.vue、相关批量操作辅助逻辑、return-matches.js 请求包装及受影响测试。 - Server:复用既有 Confirm 状态事务与权限,必要时补针对性回归测试;首版不规划生产 Server 行为变化。若真实阻塞需要改接口、数据或权限,先补方案并取得授权,不混入。 - Android 无变化;无迁移、无新权限、无外部服务写入。 ## 设计证据与门禁 - 2026-09-29 用户调整:按钮“确认使用退货”改为“使用退货”,移至“取消匹配”后;已更新 v2,其他范围及一次确认逻辑不变。v1 被 v2 替代,未被批准。 - 版本:#349 v2,2026-09-29;轻量设计已确认,开始实施。 - 线上审核:https://qux.ilapage.cn/#/apps/6abb1a24191a826306a801e1.html - QuantUX App ID:6abb1a24191a826306a801e1;App 名称:GoAuto #349 v2 · SYB 批量使用退货(轻量审核)。画面顶部标注 #349 v2,底部提供场景切换。 - 沿用 #347 的既有页面与批量反馈样式,仅在“取消匹配”后新增“使用退货 N”,不增加新页面或审批。 - 10 个审核场景:按钮与勾选、一次确认、执行进度、部分成功、失败项保留、空与加载失败、禁用与竞态、无操作权限、全部成功、网络与登录。 - 确认框注明:标记已用退货、不再创建采购;不修改已有采购任务,不自动让 Yeeke 发货。当前页范围、原匹配身份、串行互斥、失败恢复、认证停止及网络先回读见画面标注。 - 原型使用虚构 DEMO 数据,不调用任何业务接口;进度/结果与失败重试为场景示意,不代表实际批处理或真实网络。底部场景按钮仅用于审核,不是生产页面新增功能。 - QuantUX 回读核验:10 screens、792 widgets、108 lines,所有引用均存在,Label/Button 同时设置 props.label 与 props.text,避免既有导出器空文案问题。 - 用户确认人:用户;确认时间:2026-09-29,本会话“原型通过,做#349”;覆盖 v2 的按钮名称、顺序及十类场景。 - 设计阶段仅更新原型/工单;用户确认 v2 后实施,结果及 Wiki 证据见下文。未修改真实业务状态、迁移或发布。 ## 验收标准 - [ ] 当前页退货待确认可勾选;新增确认按钮顺序正确,计数仅有效待确认项;无候选/资料不可用/执行中禁用,无权限隐藏。 - [ ] 一次确认,返回不写入;快照原匹配 ID,去重、串行、防重复及写操作互斥。 - [ ] mixed selection 只确认 matched 候选,confirmed/cancelled 跳过,不确认后来的替代匹配。 - [ ] 成功更新 confirmed、操作人/时间及日志,保持有效占用;阶段显示已用退货,不创建采购、不修改已有任务或调用 Yeeke 发货。 - [ ] 每项独立结果;部分失败不回滚成功项,网络未知先回读,登录失效停止,未执行项有明确说明。 - [ ] 刷新保留筛选及页码;当前页可重试失败项保留勾选;离页失败保留结果;旧请求不会覆盖较新查询。 - [ ] 管理员、采购员、售后沿用现有权限;原单条确认、取消、匹配及采购/采集候选规则不回归。 ## 验证计划 - Server 隔离测试:matched 确认、重复/取消冲突、不存在、确认审计、权限及确认/取消状态竞态;不能把 SQLite 模拟描述为生产 MySQL 并发验证。 - Web 单元与 mock 浏览器:候选计数、一次确认/返回、冻结身份、串行及互斥、部分失败、认证停止、网络回读、失败选择恢复、筛选代次、现有操作回归。 - 受影响 ESLint、Web 生产构建、必要 Server 回归、git diff --check。 - 不操作生产数据;真实确认、合并/发布、权限或数据库变更另需授权。 ## 文档影响 - 实施后更新 Architecture-and-Code-Map:列表批量确认调用链。 - 实施后更新 Business-Rules-and-Glossary:当前页确认范围、已用退货语义与重试规则。 - 实施后更新 Android-Agent-API-Contract 的 Admin 接口说明:复用确认接口与结果处理;不改 Agent 契约或 HTTP 字段。 - 仅建单阶段不更新长期 Wiki、不导出任务快照。 ## 风险与回退 - 真实确认是业务状态写入:主要风险是选中后状态变化、重复提交、网络结果未知。复用原匹配 ID、已有锁内 matched 校验、操作互斥和只读回读控制,不增加复杂门禁。 - 回退仅隐藏新按钮/回退代码,不覆盖数据库或抹除确认审计。误确认沿用已有单条取消,后续是否采购仍按 readiness 判断。 ## 工单访问 本会话未发现项目 Gitea MCP 工具,建单回退使用项目安全配置的 Gitea API;不输出凭据。 ## 实施交付与验证(2026-09-29,待验收) - 开发基线:#347 a4c7b5e97b40cef14df5fd028310b83e05b0fa9f;origin/main 仍 e7c049d。分支 feat/349-batch-return-use,未合并 main/部署,不宣称线上已具备功能。 - 实现提交:4280115e11ae26366a27e88818e73f34254ceb35;文档与浏览器收尾提交:14231c62a75789613fbada2c309f0b147f9a2618。已推送并回读远端分支,HEAD 与远端一致。 - “使用退货 N”位于“取消匹配”之后,沿用既有组件。仅当前页有效待确认明细去重计数;一次确认、原 match ID 冻结、串行写入、互斥其他退货写操作、进度及成功/跳过/失败明细。 - 复用确认接口和原 Server 事务;只有 Web 生产改动,Server 仅追加回归测试。没有迁移、新权限、Android、Yeeke 发货或采购创建/取消行为变更。 - 网络失败回读原记录,验证身份,回读已确认/已取消归为跳过而不是本次成功;仍待确认才保留手动重试资格。登录失效停止后续写入,结果保留明确未执行。刷新保持筛选/页码,按 generation 与原匹配恢复当前页失败选择,不跨页或追随替代匹配。 ### 已执行验证 - Node Web 单元:node --test web/tests/unit/syb-return-confirm.test.cjs web/tests/unit/syb-return-cancel.test.cjs,32/32 通过(#349 新增 17、#347 回归 15)。 - 隔离浏览器:syb-return-confirm.spec.ts 8 项、syb-return-cancel.spec.ts 7 项,共 15/15 通过;补充等待对话框结束后再次跑新增 8 项,8/8 通过,并目视检查截图的按钮顺序与失败项选择。API 全部使用 MOCK 拦截,没有连接真实业务数据。 - 受影响 4 个 Web 源文件 ESLint 通过。 - pnpm build:prod 通过。保留已有 CSS 伪类/伪元素与大 chunk 警告,不混入无关修复。 - go test ./app/goauto/returnmatch ./app/goauto/purchase -count=1 通过;确认覆盖三角色、禁止角色、取消/确认冲突、不存在、原记录被取消后重匹配、重复确认、审计回滚和占用保留。采用隔离 SQLite,不冒称 MySQL 真实并发验证。 - git diff --check 通过;临时 Vite 验证服务已停止。 - python dev_scripts/harness.py check --strict 未通过:既有 docs/evidence/pdd-home-35727-summary.md(#277,a16e692)是未登记 Wiki 镜像;相对本单基线该文件无改动,不扩大 #349 修复。 ### 长期文档闭环 仅在线追加本单已实施事实,回读内容及 revision 后一次 sync、一次 sync --check(退出码 0,17 个核心镜像一致): - Architecture-and-Code-Map:9b4a1a06b8e2f6a8dfdbaef87817d840dfa45389。 - Business-Rules-and-Glossary:9a7317728132c450c7abf244c3e5eaac7bfb71bc。 - Android-Agent-API-Contract(仅 Admin 补充):102d40fb2d960b05684e2a82e85729362070fdb5。 - 三个相关镜像已提交。完整同步也暴露既有 SYB-ERP 镜像与线上源的差异;docs/12-syb-erp-interface.md 保持未提交,未反向覆盖线上或混入本单。其他原工作区变更保留。 - 未创建任务归档/本地原型快照。本会话无 Gitea MCP,工单与 Wiki 使用 API 回退,未输出凭据。 ### 待人工验收 / 未验证范围 - 原型已批准不等于真实业务验收;工单保持 open。 - 未执行真实退货确认、生产数据修改、MySQL 并发、正式账号线上浏览器测试或合并发布。无需数据库迁移;后续合并 #347/#349 并发布仍需用户明确授权。
Author
Owner

轻量设计已补齐:#349 v1,App ID 6abb1a24191a826306a801e1,审核链接 https://qux.ilapage.cn/#/apps/6abb1a24191a826306a801e1.html 。已通过 QuantUX MCP 创建并回读结构,浏览器打开审核入口、检查页面预览与一次确认框,文案正常显示;未验证完整模拟器点击链,静态状态及演示导航不等于真实业务执行。沿用 #347 样式,并按 UI/UX 规范区分确认/取消、禁用说明及结果反馈。完整版本与覆盖范围已写入正文,等待用户原型审核。生产代码/业务状态/迁移/发布均未改动,无新增长期事实,本阶段跳过 Wiki 同步。本会话无 Gitea MCP,工单更新回退使用 Gitea API。

轻量设计已补齐:#349 v1,App ID 6abb1a24191a826306a801e1,审核链接 https://qux.ilapage.cn/#/apps/6abb1a24191a826306a801e1.html 。已通过 QuantUX MCP 创建并回读结构,浏览器打开审核入口、检查页面预览与一次确认框,文案正常显示;未验证完整模拟器点击链,静态状态及演示导航不等于真实业务执行。沿用 #347 样式,并按 UI/UX 规范区分确认/取消、禁用说明及结果反馈。完整版本与覆盖范围已写入正文,等待用户原型审核。生产代码/业务状态/迁移/发布均未改动,无新增长期事实,本阶段跳过 Wiki 同步。本会话无 Gitea MCP,工单更新回退使用 Gitea API。
ila changed title from SYB 商品页新增批量确认使用退货 to SYB 商品页新增批量使用退货 2026-09-29 10:05:42 +08:00
Author
Owner

已按用户本次要求更新 #349 v2:统一显示“使用退货”,工具栏顺序为“匹配退货 → 取消匹配 N → 使用退货 N”。QuantUX App ID/链接不变,名称和画面顶部均标注 v2。回读检查全部 10 个场景:有权限场景按钮顺序一致,间距 12px、无重叠,无权限仍隐藏;旧“确认使用退货”文案已清除,流程连线与原确认规则不变。本次仅调整原型和工单,未改生产代码。尚待用户审核。无 Gitea MCP,继续 API 回退;无长期事实变化,跳过 Wiki。

已按用户本次要求更新 #349 v2:统一显示“使用退货”,工具栏顺序为“匹配退货 → 取消匹配 N → 使用退货 N”。QuantUX App ID/链接不变,名称和画面顶部均标注 v2。回读检查全部 10 个场景:有权限场景按钮顺序一致,间距 12px、无重叠,无权限仍隐藏;旧“确认使用退货”文案已清除,流程连线与原确认规则不变。本次仅调整原型和工单,未改生产代码。尚待用户审核。无 Gitea MCP,继续 API 回退;无长期事实变化,跳过 Wiki。
Author
Owner

开始实施 #349。用户已确认 v2:匹配退货 → 取消匹配 → 使用退货。以已推送 #347 提交 a4c7b5e 为明确开发基线,独立 feat/349-batch-return-use / D:/OPC/goauto-349;origin/main 仍 e7c049d,未将 #347 视为已合并。复用既有确认事务/API,首版仅 Web 生产改动和隔离回归测试;不迁移、不改权限、不操作真实退货、不合并或发布。工单/Wiki 无 Gitea MCP,继续使用 API 回退。

开始实施 #349。用户已确认 v2:匹配退货 → 取消匹配 → 使用退货。以已推送 #347 提交 a4c7b5e 为明确开发基线,独立 feat/349-batch-return-use / D:/OPC/goauto-349;origin/main 仍 e7c049d,未将 #347 视为已合并。复用既有确认事务/API,首版仅 Web 生产改动和隔离回归测试;不迁移、不改权限、不操作真实退货、不合并或发布。工单/Wiki 无 Gitea MCP,继续使用 API 回退。
Author
Owner

已完成 #349 v2 并推送 feat/349-batch-return-use,HEAD 14231c6(实现 4280115),待验收。工具栏:匹配退货 → 取消匹配 → 使用退货。32 项 Web 单元、15 项隔离浏览器回归(收尾后新增 8 项再跑通过)、Server 两包回归、ESLint、生产构建、diff 检查及 Wiki 一次同步/一致性检查通过。严格 harness 仅被既有 #277 未登记镜像阻止,已记录。未合并/部署、无迁移、未操作真实业务数据。完整提交、未验证项、Wiki revisions 及同步暴露但未提交的无关镜像差异已写回正文。

已完成 #349 v2 并推送 feat/349-batch-return-use,HEAD 14231c6(实现 4280115),待验收。工具栏:匹配退货 → 取消匹配 → 使用退货。32 项 Web 单元、15 项隔离浏览器回归(收尾后新增 8 项再跑通过)、Server 两包回归、ESLint、生产构建、diff 检查及 Wiki 一次同步/一致性检查通过。严格 harness 仅被既有 #277 未登记镜像阻止,已记录。未合并/部署、无迁移、未操作真实业务数据。完整提交、未验证项、Wiki revisions 及同步暴露但未提交的无关镜像差异已写回正文。
Author
Owner

2026-09-29 按用户“合并 main”授权,#349 连同依赖 #347 已无冲突合并并推送 origin/main。合并提交 dd9160ec423546ab93df65927cd7f5d3fb0c1565;包含 a4c7b5e、4280115、14231c6,远端 main 已回读核对。合并树与已验证 #349 分支完全一致。合并后重新执行:32/32 Web 单元测试、Server returnmatch/purchase 两包回归、受影响文件 ESLint、Web 生产构建及 git diff --check 全部通过(保留已有 CSS/包体积警告)。原 15 项隔离浏览器回归证据仍适用同一代码树。仅合并代码,未部署、重启、迁移、权限写入或操作真实业务数据;保持打开待验收。本次合并无新增长期行为/契约变化,复用工单已记录的 Wiki 更新与同步证据,不重复同步。Gitea MCP 当前不可用,按项目规则回退已配置 Gitea API。

2026-09-29 按用户“合并 main”授权,#349 连同依赖 #347 已无冲突合并并推送 origin/main。合并提交 dd9160ec423546ab93df65927cd7f5d3fb0c1565;包含 a4c7b5e、4280115、14231c6,远端 main 已回读核对。合并树与已验证 #349 分支完全一致。合并后重新执行:32/32 Web 单元测试、Server returnmatch/purchase 两包回归、受影响文件 ESLint、Web 生产构建及 git diff --check 全部通过(保留已有 CSS/包体积警告)。原 15 项隔离浏览器回归证据仍适用同一代码树。仅合并代码,未部署、重启、迁移、权限写入或操作真实业务数据;保持打开待验收。本次合并无新增长期行为/契约变化,复用工单已记录的 Wiki 更新与同步证据,不重复同步。Gitea MCP 当前不可用,按项目规则回退已配置 Gitea API。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#349