SYB 订单商品列表支持 200/500 条每页,默认 100 条 #339

Open
opened 2026-09-24 14:26:43 +08:00 by ila · 3 comments
Owner

来源与原始需求摘要

  • 来源:用户 2026-09-24 本地试用 #338「匹配退货」时提出。
  • 用户原话:「现在syb商品页的列表页默认是20条,可选的是20条,50条,100条,可以增加200条和500条一页,默认100条页面吗」;确认方案后:「同意,建单,做」。
  • 目的:一次勾选更多 SYB 订单商品做批量操作(主要是批量匹配退货)。

前置依赖

  • #338(退货匹配,分支 feat/338-return-match,未合并):SYB 商品页已被 #338 改动(「匹配退货」按钮等)。本单基于 feat/338-return-match 开分支,合并顺序:#338 先于本单。
  • 不可并行修改 web/src/views/goauto/syb-products/index.vue。

当前事实(代码核对,基于 1e944b9)

  • 前端 syb-products/index.vue:默认 pageSize: 20(初始化与重置两处),分页可选 20/50/100。
  • 服务端 sybimport/service.go:PageSize > 100 时强制改为 100。
  • 每页加载后调用采购预检 previewPurchaseTasks({sybProductIds}) 计算处理阶段/可采购/可匹配等行状态;预检入口与批量创建共用 purchase/batch.go 的 maxBatchPurchaseItems = 100,超过即拒绝。
  • 批量创建采购上限 100(maxBatchPurchaseItems),批量重试上限 100,批量取消任务上限 500;「匹配退货」(#338)目前无上限;创建采集、AI 匹配、图搜采集的上限待实施时核对。

目标

  1. 每页条数选项 20/50/100/200/500,默认 100(初始化与「重置」一致)。
  2. 服务端 SYB 商品列表每页上限调为 500。
  3. 前端采购预检按每批 100 条分批调用并合并结果;预检接口上限不变。
  4. 各批量操作按钮在勾选数超过其服务端上限时禁用并提示原因(如「一次最多 100 条」),不自动拆分提交。创建采购上限保持 100,不放宽。
  5. 「匹配退货」服务端增加上限 500(超过返回明确错误),前端同样禁用提示。

非目标

  • 不放宽创建采购、重试等任何高风险批量接口的上限;不做自动分批创建采购。
  • 不做跨页保留勾选。
  • 不改其他列表页的分页。

方案

  • 前端:分页 page-sizes 增加 200/500;默认与重置改为 100;预检改为按 100 分组并发或顺序调用后合并(保持现有错误处理与 loading 语义,任一组失败按现有失败展示);各批量按钮计算勾选数与上限,超限禁用 + tooltip 说明。
  • 服务端:sybimport 列表上限 100→500;returnmatch 批量匹配请求 >500 返回 INVALID_REQUEST。
  • 性能:处理阶段为按页有界批量查询(无 N+1);实施时用本地真实数据测 500 条/页加载耗时并回写。

设计证据

  • 小范围调整,复用现有 Element Plus 分页组件与现有「按钮禁用 + tooltip 说明原因」规范(同页 AI 匹配按钮已有先例),不新增原型。

验收

  1. 分页可选 20/50/100/200/500,首次进入与「重置」后均为 100 条/页。
  2. 选择 200、500 条/页时列表实际返回对应条数(数据足够时),行状态(处理阶段、可勾选性、按钮计数)正确。
  3. 预检分批:500 条/页时预检调用 5 次且结果完整合并;单组失败时按现有方式提示,不出现部分行状态错乱。
  4. 勾选超过 100 条时「创建采购」禁用并提示「一次最多 100 条」;服务端上限仍为 100(未改动)。
  5. 其他批量按钮按各自上限同样处理;「匹配退货」>500 服务端拒绝、前端禁用提示。
  6. 20/50/100 条/页行为与改动前一致(回归)。
  7. 服务端测试、pnpm run build:prod 通过;本地实测 500 条/页加载耗时回写工单。

验证

  • Go:sybimport 分页上限测试、returnmatch 上限测试;受影响包回归(sybimport 既有 12 个失败保持不变)。
  • Web:build;本地真实数据手动验证 100/200/500 条/页。

风险

  • 页面一次渲染与预检 500 行,加载变慢;以本地实测为准,必要时再评估。
  • 预检分批后并发请求增加服务端负载;采用顺序或小并发。
  • 批量按钮上限判断遗漏会导致服务端报错(不会产生错误数据,但体验差)——逐个核对。

文档影响

  • 无长期文档影响:仅列表分页选项与前端批量按钮限制提示;服务端列表上限调整属实现细节。若 Wiki 已记录 SYB 列表 pageSize 上限,则在 #338 的 Wiki 同步轮次一并更新。
## 来源与原始需求摘要 - 来源:用户 2026-09-24 本地试用 #338「匹配退货」时提出。 - 用户原话:「现在syb商品页的列表页默认是20条,可选的是20条,50条,100条,可以增加200条和500条一页,默认100条页面吗」;确认方案后:「同意,建单,做」。 - 目的:一次勾选更多 SYB 订单商品做批量操作(主要是批量匹配退货)。 ## 前置依赖 - #338(退货匹配,分支 `feat/338-return-match`,未合并):SYB 商品页已被 #338 改动(「匹配退货」按钮等)。本单**基于 `feat/338-return-match` 开分支**,合并顺序:#338 先于本单。 - 不可并行修改 `web/src/views/goauto/syb-products/index.vue`。 ## 当前事实(代码核对,基于 `1e944b9`) - 前端 `syb-products/index.vue`:默认 `pageSize: 20`(初始化与重置两处),分页可选 20/50/100。 - 服务端 `sybimport/service.go`:`PageSize > 100` 时强制改为 100。 - 每页加载后调用采购预检 `previewPurchaseTasks({sybProductIds})` 计算处理阶段/可采购/可匹配等行状态;预检入口与批量创建共用 `purchase/batch.go` 的 `maxBatchPurchaseItems = 100`,超过即拒绝。 - 批量创建采购上限 100(`maxBatchPurchaseItems`),批量重试上限 100,批量取消任务上限 500;「匹配退货」(#338)目前无上限;创建采集、AI 匹配、图搜采集的上限待实施时核对。 ## 目标 1. 每页条数选项 20/50/100/200/500,默认 100(初始化与「重置」一致)。 2. 服务端 SYB 商品列表每页上限调为 500。 3. 前端采购预检按每批 100 条分批调用并合并结果;预检接口上限不变。 4. 各批量操作按钮在勾选数超过其服务端上限时禁用并提示原因(如「一次最多 100 条」),不自动拆分提交。**创建采购上限保持 100,不放宽。** 5. 「匹配退货」服务端增加上限 500(超过返回明确错误),前端同样禁用提示。 ## 非目标 - 不放宽创建采购、重试等任何高风险批量接口的上限;不做自动分批创建采购。 - 不做跨页保留勾选。 - 不改其他列表页的分页。 ## 方案 - 前端:分页 `page-sizes` 增加 200/500;默认与重置改为 100;预检改为按 100 分组并发或顺序调用后合并(保持现有错误处理与 loading 语义,任一组失败按现有失败展示);各批量按钮计算勾选数与上限,超限禁用 + tooltip 说明。 - 服务端:`sybimport` 列表上限 100→500;`returnmatch` 批量匹配请求 >500 返回 INVALID_REQUEST。 - 性能:处理阶段为按页有界批量查询(无 N+1);实施时用本地真实数据测 500 条/页加载耗时并回写。 ## 设计证据 - 小范围调整,复用现有 Element Plus 分页组件与现有「按钮禁用 + tooltip 说明原因」规范(同页 AI 匹配按钮已有先例),不新增原型。 ## 验收 1. 分页可选 20/50/100/200/500,首次进入与「重置」后均为 100 条/页。 2. 选择 200、500 条/页时列表实际返回对应条数(数据足够时),行状态(处理阶段、可勾选性、按钮计数)正确。 3. 预检分批:500 条/页时预检调用 5 次且结果完整合并;单组失败时按现有方式提示,不出现部分行状态错乱。 4. 勾选超过 100 条时「创建采购」禁用并提示「一次最多 100 条」;服务端上限仍为 100(未改动)。 5. 其他批量按钮按各自上限同样处理;「匹配退货」>500 服务端拒绝、前端禁用提示。 6. 20/50/100 条/页行为与改动前一致(回归)。 7. 服务端测试、`pnpm run build:prod` 通过;本地实测 500 条/页加载耗时回写工单。 ## 验证 - Go:sybimport 分页上限测试、returnmatch 上限测试;受影响包回归(sybimport 既有 12 个失败保持不变)。 - Web:build;本地真实数据手动验证 100/200/500 条/页。 ## 风险 - 页面一次渲染与预检 500 行,加载变慢;以本地实测为准,必要时再评估。 - 预检分批后并发请求增加服务端负载;采用顺序或小并发。 - 批量按钮上限判断遗漏会导致服务端报错(不会产生错误数据,但体验差)——逐个核对。 ## 文档影响 - 无长期文档影响:仅列表分页选项与前端批量按钮限制提示;服务端列表上限调整属实现细节。若 Wiki 已记录 SYB 列表 pageSize 上限,则在 #338 的 Wiki 同步轮次一并更新。
Author
Owner

开始实施 #339。

改动文件:

  • web/src/views/goauto/syb-products/index.vue:分页选项改为 20/50/100/200/500,默认与重置均为 100;loadPurchaseReadiness 预检按 100 一组顺序分批调用并合并结果(任一组失败按现有整页失败展示);各批量按钮补充禁用 + tooltip。
  • server/app/goauto/sybimport/service.go:List 的 PageSize 上限 100→500(+ 新增测试)。
  • server/app/goauto/returnmatch/service.go、handler.go:BatchMatch 新增 500 条上限,超出返回 INVALID_REQUEST(+ 新增测试)。

核对到的各按钮服务端上限:

  • 创建采购(purchase/batch.go maxBatchPurchaseItems):100,不放宽。
  • AI 匹配(同样走 purchase/batch.go validateBatchIDs):100。
  • 创建采集(task/admin_service.go BatchCreate,按去重后 PDD 商品数):100。
  • 图搜采集(task/image_search.go imageSearchMaxBatchTasks,按去重后蝦皮商品数):50(沿用既有常量,按钮层新增禁用+提示,原先只在弹窗内提示)。
  • 匹配退货(returnmatch/service.go,新增 maxBatchMatchItems):500。
开始实施 #339。 改动文件: - web/src/views/goauto/syb-products/index.vue:分页选项改为 20/50/100/200/500,默认与重置均为 100;`loadPurchaseReadiness` 预检按 100 一组顺序分批调用并合并结果(任一组失败按现有整页失败展示);各批量按钮补充禁用 + tooltip。 - server/app/goauto/sybimport/service.go:List 的 PageSize 上限 100→500(+ 新增测试)。 - server/app/goauto/returnmatch/service.go、handler.go:BatchMatch 新增 500 条上限,超出返回 INVALID_REQUEST(+ 新增测试)。 核对到的各按钮服务端上限: - 创建采购(purchase/batch.go maxBatchPurchaseItems):100,不放宽。 - AI 匹配(同样走 purchase/batch.go validateBatchIDs):100。 - 创建采集(task/admin_service.go BatchCreate,按去重后 PDD 商品数):100。 - 图搜采集(task/image_search.go imageSearchMaxBatchTasks,按去重后蝦皮商品数):50(沿用既有常量,按钮层新增禁用+提示,原先只在弹窗内提示)。 - 匹配退货(returnmatch/service.go,新增 maxBatchMatchItems):500。
Author
Owner

实施回写(2026-09-24)

分支:feat/339-syb-page-size(基于 feat/338-return-match 1e944b9),提交 00fb274,已推送。未合并;合并顺序须 #338 在前。

改动

  • web/src/views/goauto/syb-products/index.vue:分页 20/50/100/200/500;初始化与「重置」默认 100;采购预检按每组 100 条顺序调用并合并,任一组失败回退到原有整页失败状态,翻页时丢弃过期结果;各批量按钮超限禁用并提示。
  • server/app/goauto/sybimport/service.go:列表每页上限 100→500。
  • server/app/goauto/returnmatch:批量匹配上限 500,超限返回 400 INVALID_REQUEST,且不写批次记录。

各批量按钮上限(服务端实际值,未放宽任何一个)

按钮 服务端上限 来源
创建采购 100 条 purchase/batch.go maxBatchPurchaseItems(未改)
AI 匹配 100 条 同上
创建采集 100 个 PDD 商品(去重) task/admin_service.go BatchCreate
图搜采集 50 个蝦皮商品(去重) task/image_search.go imageSearchMaxBatchTasks(原先只在确认弹窗内校验,现按钮上也禁用提示)
匹配退货 500 条 returnmatch.maxBatchMatchItems(本单新增)

验证

  • 新增测试 TestServiceListCapsPageSizeAt500、TestBatchMatch_RejectsMoreThan500Items 通过;returnmatch、purchase 包全部通过;sybimport 仍为既有 12 个失败(与干净 main 一致)。
  • gofmt、go build ./...、go vet(sybimport/returnmatch/purchase)干净;pnpm run build:prod 通过(仅既有 chunk 体积告警)。
  • 本地真实数据服务端耗时(只读计时程序,列表 + 分组预检,各跑两轮):20 条/页约 30ms;100 条约 38ms;200 条约 60–68ms;500 条约 124ms(列表约 30ms + 5 组预检约 92ms)。
  • 本地运行实例已切到 00fb274(无迁移),API 健康检查 200,页面编译正常。

未验证 / 遗留

  • 浏览器端 500 行表格渲染耗时未测(无法在本机无头登录),待用户实际使用确认。
  • 未做跨页保留勾选(非目标)。

状态:待验收。

## 实施回写(2026-09-24) **分支**:`feat/339-syb-page-size`(基于 `feat/338-return-match` `1e944b9`),提交 `00fb274`,已推送。**未合并**;合并顺序须 #338 在前。 ### 改动 - `web/src/views/goauto/syb-products/index.vue`:分页 20/50/100/200/500;初始化与「重置」默认 100;采购预检按每组 100 条顺序调用并合并,任一组失败回退到原有整页失败状态,翻页时丢弃过期结果;各批量按钮超限禁用并提示。 - `server/app/goauto/sybimport/service.go`:列表每页上限 100→500。 - `server/app/goauto/returnmatch`:批量匹配上限 500,超限返回 400 `INVALID_REQUEST`,且不写批次记录。 ### 各批量按钮上限(服务端实际值,未放宽任何一个) | 按钮 | 服务端上限 | 来源 | |---|---|---| | 创建采购 | 100 条 | `purchase/batch.go maxBatchPurchaseItems`(未改) | | AI 匹配 | 100 条 | 同上 | | 创建采集 | 100 个 PDD 商品(去重) | `task/admin_service.go` BatchCreate | | 图搜采集 | 50 个蝦皮商品(去重) | `task/image_search.go imageSearchMaxBatchTasks`(原先只在确认弹窗内校验,现按钮上也禁用提示) | | 匹配退货 | 500 条 | `returnmatch.maxBatchMatchItems`(本单新增) | ### 验证 - 新增测试 `TestServiceListCapsPageSizeAt500`、`TestBatchMatch_RejectsMoreThan500Items` 通过;returnmatch、purchase 包全部通过;sybimport 仍为既有 12 个失败(与干净 main 一致)。 - `gofmt`、`go build ./...`、`go vet`(sybimport/returnmatch/purchase)干净;`pnpm run build:prod` 通过(仅既有 chunk 体积告警)。 - **本地真实数据服务端耗时**(只读计时程序,列表 + 分组预检,各跑两轮):20 条/页约 30ms;100 条约 38ms;200 条约 60–68ms;500 条约 124ms(列表约 30ms + 5 组预检约 92ms)。 - 本地运行实例已切到 `00fb274`(无迁移),API 健康检查 200,页面编译正常。 ### 未验证 / 遗留 - 浏览器端 500 行表格渲染耗时未测(无法在本机无头登录),待用户实际使用确认。 - 未做跨页保留勾选(非目标)。 状态:**待验收**。
Author
Owner

补充(2026-09-24,用户试用时提出:「订单号输入框的宽度缩小到现在的80%」):SYB 商品页订单号筛选输入框宽度 210px → 168px,提交 8b4db9c;本地运行实例已更新并确认样式生效。

补充(2026-09-24,用户试用时提出:「订单号输入框的宽度缩小到现在的80%」):SYB 商品页订单号筛选输入框宽度 210px → 168px,提交 `8b4db9c`;本地运行实例已更新并确认样式生效。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#339