T61 优化 SYB 商品筛选与列表列宽 #74

Closed
opened 2026-08-24 14:56:01 +08:00 by ila · 4 comments
Owner

原始需求摘要

用户于 2026-08-24 要求优化 SYB 商品页面:

  1. 现有搜索框只用于订单号,并支持粘贴多行、一次查询多个订单号;不再搜索蝦皮商品 ID、商品标题,也不增加商品关键词输入。
  2. 在订单号输入框左边增加店铺搜索输入框。
  3. 删除冗余的“蝦皮关联”列;关联状态合并到“蝦皮商品”列。
  4. 释放的 80px 平均分给“采购准备”和“操作”:分别增加 40px。

目标与范围

  • Web:调整筛选栏、订单号多行交互、列显示与列宽。
  • Server:SYB 列表接口增加明确的 shopName 与多个 orderCodes 筛选,移除 keyword 的商品 ID/标题模糊搜索语义。
  • 测试:固定筛选解析、组合条件、页面请求与布局。
  • 无数据库迁移、无 Android 变更、无采购状态变化。

已确认查询规则

  • 筛选顺序:店铺、订单号、解析状态、查询、重置、创建采购。
  • 店铺按去除首尾空格后的名称做包含匹配。
  • 订单号每行一个;前端和服务端均去除空行、首尾空格并去重。
  • 订单号最多 100 个,每个最长 64 个字符;超过限制返回普通人可理解的错误。
  • 订单号使用精确 IN 匹配;一张订单的多条颜色/尺码明细全部返回。
  • 店铺、订单号、解析状态之间使用 AND。
  • Enter 在订单号框中换行;点击“查询”执行,并支持 Ctrl+Enter 查询。
  • 不再提供蝦皮商品 ID 或商品标题搜索。

实施方案

Server

  • ListRequest 改为 ShopName 与 OrderCodes []string,保留分页和解析状态。
  • Handler 接收单个逗号分隔的 orderCodes 查询参数;前端把多行内容规范化后发送。
  • 服务端仍独立校验、去重,不能信任前端;无有效订单号时不加订单条件。
  • 店铺使用参数化 LIKE,订单号使用参数化 IN,禁止字符串拼接 SQL。
  • 补充多订单、重复/空值、店铺+订单+状态组合及超限测试。

Web

  • 店铺输入框位于订单号左侧。
  • 订单号使用自动高度 textarea:默认 1 行,最多 4 行,提示“每行一个订单号,最多 100 个”。
  • 查询前规范化为逗号分隔参数;重置清空店铺、订单号和解析状态。
  • “蝦皮商品”列:已关联时商品 ID 可点击;未关联时 ID 使用普通文本并在同列显示“未关联”标签。
  • 删除宽 80px 的“蝦皮关联”列。
  • “采购准备”由 min-width 170 调整为 210;“操作”由 width 92 调整为 132。
  • 根据 2026-08-24 验收反馈,删除列表底部“本页不展示采购任务、PDD 订单号、快递单号和支付状态。”提示及对应占位。
  • “蝦皮商品”列由 min-width 421 缩小为固定 width 260(约为原来的 60%);商品标题单行省略并通过悬停查看完整内容,把横向空间让给“采购准备”列。
  • 根据后续验收反馈,店铺输入改为可输入的联想下拉框:首次使用时异步加载“SYB 店铺”现有数据,选项包含启用和停用店铺并标明状态;输入部分名称时在下拉中做包含匹配,同时保留任意历史店铺名手动输入能力。
  • 店铺选项加载不得阻塞商品列表;加载失败时提示用户,但继续允许输入并按现有 shopName 包含查询。

设计证据

这是既有页面的小范围筛选与列布局调整,不新增页面、导航、权限、状态或采购流程。用户已确认以下低保真布局与精确尺寸,复用现有 go-admin-ui 筛选栏和表格组件,无需新增 QuantUX/HTML:

店铺 | 订单号(1~4 行,每行一个) | 解析状态 | 查询 | 重置 | 创建采购

状态覆盖:

  • 正常:订单号多行精确查询。
  • 空:不按订单号筛选。
  • 超限/过长:服务端拒绝并显示可读提示。
  • 未关联蝦皮商品:蝦皮商品列内显示“未关联”,不能点击虚假链接。
  • 加载/预检失败:沿用 #73 已确认的独立状态。

验收标准

  • 店铺输入位于订单号左边,店铺包含匹配可用。
  • 订单号框支持 1~4 行、每行一个、Ctrl+Enter 查询。
  • 多订单号去空、去重并精确匹配,最多 100 个;组合筛选使用 AND。
  • 不再按蝦皮商品 ID 或商品标题搜索。
  • “蝦皮关联”列已删除,未关联状态合并到“蝦皮商品”列。
  • “采购准备”最小宽度 210px,“操作”固定宽度 132px。
  • 列表底部范围提示已删除,不再占用纵向空间。
  • “蝦皮商品”固定宽度 260px,长标题单行省略且可悬停查看完整标题;常见窗口宽度下“采购准备”可见。
  • 店铺筛选可从现有 SYB 店铺联想下拉中选择,包含并标识已停用店铺。
  • 输入部分或历史店铺名仍可直接查询;下拉选项加载失败不阻断商品列表和手动查询。
  • 现有采购选择、预检、详情和创建入口不受影响。
  • Server 受影响测试、Web lint/构建和 Playwright 页面测试通过。
  • Wiki-first 文档与本地镜像一致,DevHarness 严格检查通过。

风险、依赖与文档影响

  • 依赖 #73 的列表/采购准备异步加载实现,不可与修改同一页面和 SYB List 接口的任务并行。
  • GET 查询参数按最多 100 个、单项 64 字符限界;实际 SYB 订单号远短于上限。若未来需要数百条再单独设计 POST 搜索接口。
  • 更新 Architecture and Code Map、Business Rules and Glossary 或相关 API 说明;无数据库迁移。
## 原始需求摘要 用户于 2026-08-24 要求优化 SYB 商品页面: 1. 现有搜索框只用于订单号,并支持粘贴多行、一次查询多个订单号;不再搜索蝦皮商品 ID、商品标题,也不增加商品关键词输入。 2. 在订单号输入框左边增加店铺搜索输入框。 3. 删除冗余的“蝦皮关联”列;关联状态合并到“蝦皮商品”列。 4. 释放的 80px 平均分给“采购准备”和“操作”:分别增加 40px。 ## 目标与范围 - Web:调整筛选栏、订单号多行交互、列显示与列宽。 - Server:SYB 列表接口增加明确的 `shopName` 与多个 `orderCodes` 筛选,移除 `keyword` 的商品 ID/标题模糊搜索语义。 - 测试:固定筛选解析、组合条件、页面请求与布局。 - 无数据库迁移、无 Android 变更、无采购状态变化。 ## 已确认查询规则 - 筛选顺序:店铺、订单号、解析状态、查询、重置、创建采购。 - 店铺按去除首尾空格后的名称做包含匹配。 - 订单号每行一个;前端和服务端均去除空行、首尾空格并去重。 - 订单号最多 100 个,每个最长 64 个字符;超过限制返回普通人可理解的错误。 - 订单号使用精确 `IN` 匹配;一张订单的多条颜色/尺码明细全部返回。 - 店铺、订单号、解析状态之间使用 AND。 - Enter 在订单号框中换行;点击“查询”执行,并支持 Ctrl+Enter 查询。 - 不再提供蝦皮商品 ID 或商品标题搜索。 ## 实施方案 ### Server - `ListRequest` 改为 `ShopName` 与 `OrderCodes []string`,保留分页和解析状态。 - Handler 接收单个逗号分隔的 `orderCodes` 查询参数;前端把多行内容规范化后发送。 - 服务端仍独立校验、去重,不能信任前端;无有效订单号时不加订单条件。 - 店铺使用参数化 `LIKE`,订单号使用参数化 `IN`,禁止字符串拼接 SQL。 - 补充多订单、重复/空值、店铺+订单+状态组合及超限测试。 ### Web - 店铺输入框位于订单号左侧。 - 订单号使用自动高度 textarea:默认 1 行,最多 4 行,提示“每行一个订单号,最多 100 个”。 - 查询前规范化为逗号分隔参数;重置清空店铺、订单号和解析状态。 - “蝦皮商品”列:已关联时商品 ID 可点击;未关联时 ID 使用普通文本并在同列显示“未关联”标签。 - 删除宽 80px 的“蝦皮关联”列。 - “采购准备”由 min-width 170 调整为 210;“操作”由 width 92 调整为 132。 - 根据 2026-08-24 验收反馈,删除列表底部“本页不展示采购任务、PDD 订单号、快递单号和支付状态。”提示及对应占位。 - “蝦皮商品”列由 min-width 421 缩小为固定 width 260(约为原来的 60%);商品标题单行省略并通过悬停查看完整内容,把横向空间让给“采购准备”列。 - 根据后续验收反馈,店铺输入改为可输入的联想下拉框:首次使用时异步加载“SYB 店铺”现有数据,选项包含启用和停用店铺并标明状态;输入部分名称时在下拉中做包含匹配,同时保留任意历史店铺名手动输入能力。 - 店铺选项加载不得阻塞商品列表;加载失败时提示用户,但继续允许输入并按现有 `shopName` 包含查询。 ## 设计证据 这是既有页面的小范围筛选与列布局调整,不新增页面、导航、权限、状态或采购流程。用户已确认以下低保真布局与精确尺寸,复用现有 go-admin-ui 筛选栏和表格组件,无需新增 QuantUX/HTML: ```text 店铺 | 订单号(1~4 行,每行一个) | 解析状态 | 查询 | 重置 | 创建采购 ``` 状态覆盖: - 正常:订单号多行精确查询。 - 空:不按订单号筛选。 - 超限/过长:服务端拒绝并显示可读提示。 - 未关联蝦皮商品:蝦皮商品列内显示“未关联”,不能点击虚假链接。 - 加载/预检失败:沿用 #73 已确认的独立状态。 ## 验收标准 - [ ] 店铺输入位于订单号左边,店铺包含匹配可用。 - [ ] 订单号框支持 1~4 行、每行一个、Ctrl+Enter 查询。 - [ ] 多订单号去空、去重并精确匹配,最多 100 个;组合筛选使用 AND。 - [ ] 不再按蝦皮商品 ID 或商品标题搜索。 - [ ] “蝦皮关联”列已删除,未关联状态合并到“蝦皮商品”列。 - [ ] “采购准备”最小宽度 210px,“操作”固定宽度 132px。 - [ ] 列表底部范围提示已删除,不再占用纵向空间。 - [ ] “蝦皮商品”固定宽度 260px,长标题单行省略且可悬停查看完整标题;常见窗口宽度下“采购准备”可见。 - [ ] 店铺筛选可从现有 SYB 店铺联想下拉中选择,包含并标识已停用店铺。 - [ ] 输入部分或历史店铺名仍可直接查询;下拉选项加载失败不阻断商品列表和手动查询。 - [ ] 现有采购选择、预检、详情和创建入口不受影响。 - [ ] Server 受影响测试、Web lint/构建和 Playwright 页面测试通过。 - [ ] Wiki-first 文档与本地镜像一致,DevHarness 严格检查通过。 ## 风险、依赖与文档影响 - 依赖 #73 的列表/采购准备异步加载实现,不可与修改同一页面和 SYB List 接口的任务并行。 - GET 查询参数按最多 100 个、单项 64 字符限界;实际 SYB 订单号远短于上限。若未来需要数百条再单独设计 POST 搜索接口。 - 更新 Architecture and Code Map、Business Rules and Glossary 或相关 API 说明;无数据库迁移。
Author
Owner

实施完成,等待验收

已按确认方案完成并推送到 main。

实现

  • 店铺筛选位于订单号左侧,按店铺名包含匹配。
  • 订单号改为多行输入;清理空行、去重后最多 100 个,每个最长 64 字符,服务端按订单号精确集合查询。
  • 店铺、订单号、解析状态使用 AND 组合;订单号输入框支持 Ctrl+Enter。
  • 删除独立“蝦皮关联”列,未关联提示并入“蝦皮商品”列。
  • “采购准备”列调整为 210px,“操作”列调整为 132px。
  • 不涉及数据库迁移、Android Agent 或采购流程。

验证

  • go test ./app/goauto/...:通过
  • ESLint:通过
  • Playwright 回归:6 项通过
  • pnpm build:prod:通过(仅既有警告)
  • Harness strict 与 Wiki sync check:通过
  • git diff --check:通过

证据

  • 提交:0fccbc9d
  • Wiki 归档:Task-74-优化-SYB-商品筛选与列表列宽
  • 归档 revision:ae41b7dfac1c773fa7c2408c717317f620c39263
  • Architecture revision:5f88de723d9ca9124383cd4abcfa5c27ddcd6d48
  • Business Rules revision:5adb7b0f05c4562e23fe92fe7ff89625d697c2d4

工单保持开启,等待用户在真实页面验收。

## 实施完成,等待验收 已按确认方案完成并推送到 `main`。 ### 实现 - 店铺筛选位于订单号左侧,按店铺名包含匹配。 - 订单号改为多行输入;清理空行、去重后最多 100 个,每个最长 64 字符,服务端按订单号精确集合查询。 - 店铺、订单号、解析状态使用 AND 组合;订单号输入框支持 `Ctrl+Enter`。 - 删除独立“蝦皮关联”列,未关联提示并入“蝦皮商品”列。 - “采购准备”列调整为 210px,“操作”列调整为 132px。 - 不涉及数据库迁移、Android Agent 或采购流程。 ### 验证 - `go test ./app/goauto/...`:通过 - ESLint:通过 - Playwright 回归:6 项通过 - `pnpm build:prod`:通过(仅既有警告) - Harness strict 与 Wiki sync check:通过 - `git diff --check`:通过 ### 证据 - 提交:`0fccbc9d` - Wiki 归档:[Task-74-优化-SYB-商品筛选与列表列宽](https://git.ilapage.cn/OPC/goauto/wiki/Task-74-%E4%BC%98%E5%8C%96-SYB-%E5%95%86%E5%93%81%E7%AD%9B%E9%80%89%E4%B8%8E%E5%88%97%E8%A1%A8%E5%88%97%E5%AE%BD.-) - 归档 revision:`ae41b7dfac1c773fa7c2408c717317f620c39263` - Architecture revision:`5f88de723d9ca9124383cd4abcfa5c27ddcd6d48` - Business Rules revision:`5adb7b0f05c4562e23fe92fe7ff89625d697c2d4` 工单保持开启,等待用户在真实页面验收。
Author
Owner

验收反馈调整已完成

已按 2026-08-24 的确认意见继续实施:

  • 删除“本页不展示采购任务、PDD 订单号、快递单号和支付状态。”及其纵向占位。
  • “蝦皮商品”列由 421px 缩小为固定 260px。
  • 商品标题改为单行省略,鼠标悬停可查看完整标题。
  • “采购准备”仍保持最小 210px,释放出的横向空间用于确保该列显示。

验证

  • ESLint:通过
  • Playwright 布局测试:1 项通过
  • pnpm build:prod:通过(仅既有 CSS 与包体积警告)
  • git diff --check:通过

证据

  • 本次提交:c706f1e
  • 累计提交:0fccbc9d、c706f1e
  • Wiki 归档 revision:c9311cc

Gitea MCP 读取中文 Wiki 页时发生重复 URL 编码并返回 404,因此本次归档更新回退为 Wiki Git 仓库提交;写入和推送均已成功。工单继续保持开启,等待页面验收。

## 验收反馈调整已完成 已按 2026-08-24 的确认意见继续实施: - 删除“本页不展示采购任务、PDD 订单号、快递单号和支付状态。”及其纵向占位。 - “蝦皮商品”列由 421px 缩小为固定 260px。 - 商品标题改为单行省略,鼠标悬停可查看完整标题。 - “采购准备”仍保持最小 210px,释放出的横向空间用于确保该列显示。 ### 验证 - ESLint:通过 - Playwright 布局测试:1 项通过 - `pnpm build:prod`:通过(仅既有 CSS 与包体积警告) - `git diff --check`:通过 ### 证据 - 本次提交:`c706f1e` - 累计提交:`0fccbc9d`、`c706f1e` - Wiki 归档 revision:`c9311cc` Gitea MCP 读取中文 Wiki 页时发生重复 URL 编码并返回 404,因此本次归档更新回退为 Wiki Git 仓库提交;写入和推送均已成功。工单继续保持开启,等待页面验收。
Author
Owner

店铺联想筛选调整已完成

已继续并入 #74:

  • 店铺筛选改为“选择或输入店铺”的联想下拉框。
  • 第一次使用时异步读取现有 SYB 店铺,不阻塞商品列表。
  • 下拉包含已启用和已停用店铺,已停用项明确标记。
  • 输入部分店铺名时做包含联想。
  • 允许直接输入已删除等历史店铺名,继续复用现有服务端包含查询。
  • 店铺选项加载失败时显示“仍可直接输入”的提示,手动查询保持可用。
  • 长店铺名支持省略及悬停查看完整名称。

验证

  • 产品 JS/Vue ESLint:通过
  • Playwright:2 项通过(正常/停用店铺联想,以及选项加载失败后的历史店铺查询)
  • pnpm build:prod:通过(仅既有 CSS 与包体积警告)
  • git diff --check:通过

证据

  • 本次提交:3a8ec20
  • #74 累计提交:0fccbc9d、c706f1e、3a8ec20
  • Wiki 归档 revision:60d4518

工单继续保持开启,等待页面验收。

## 店铺联想筛选调整已完成 已继续并入 #74: - 店铺筛选改为“选择或输入店铺”的联想下拉框。 - 第一次使用时异步读取现有 SYB 店铺,不阻塞商品列表。 - 下拉包含已启用和已停用店铺,已停用项明确标记。 - 输入部分店铺名时做包含联想。 - 允许直接输入已删除等历史店铺名,继续复用现有服务端包含查询。 - 店铺选项加载失败时显示“仍可直接输入”的提示,手动查询保持可用。 - 长店铺名支持省略及悬停查看完整名称。 ### 验证 - 产品 JS/Vue ESLint:通过 - Playwright:2 项通过(正常/停用店铺联想,以及选项加载失败后的历史店铺查询) - `pnpm build:prod`:通过(仅既有 CSS 与包体积警告) - `git diff --check`:通过 ### 证据 - 本次提交:`3a8ec20` - #74 累计提交:`0fccbc9d`、`c706f1e`、`3a8ec20` - Wiki 归档 revision:`60d4518` 工单继续保持开启,等待页面验收。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:34 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#74