列表接口 GET /api/admin/v1/pdd-products 已固定 ORDER BY updated_at DESC, id DESC(server/app/goauto/product/service.go:272),并已支持 keyword、goodsId、status 查询参数(product/handler.go:34,service.go:256-267)。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
原始需求摘要
来源:用户于 2026-08-31 提出,SYB 商品未关联 PDD 商品时需人工用 PDD App 图片识别选定商品、切到 Agent 采集,再回到 SYB 商品点「去关联」,在「搜索并选择 PDD 商品」弹窗里重新搜索一次刚采集的商品,流程繁琐。用户明确要求:弹窗默认按采集时间倒序展示前 5 个 PDD 商品,输入商品 id 搜索后刷新列表。
补充需求一:用户于 2026-08-31 追加要求,搜索结果列表增加一列显示该 PDD 商品的第一张颜色图片,便于确认是否为刚采集的商品。
补充需求二:用户于 2026-08-31 追加要求,admin PDD 商品列表页去掉「销量 / 评价」字段,原位置改为显示第一张颜色图片。用户已确认接受「销量与评价此后只能在详情抽屉与编辑表单中查看」。
目的:省掉「刚采集完还要回来再搜一次」的重复步骤,让刚采集的商品在弹窗打开时就在列表首位,并让人工能凭图片而不是文字标题确认目标商品——人工在 PDD App 本来就是用图片识别选定商品的。
基线与已核实事实
代码基线:
4e05048(2026-08-31)。核验日期 2026-08-31。web/src/views/goauto/shopee-products/index.vue:44-53),标题「搜索并选择 PDD 商品」,当前empty-text为「请输入关键词查询」,打开时items为空数组(:253),必须先输入关键词并回车才会查询(:254-262)。action=link_pdd,已自动打开该弹窗(:288),跳转链路无需改动。GET /api/admin/v1/pdd-products已固定ORDER BY updated_at DESC, id DESC(server/app/goauto/product/service.go:272),并已支持keyword、goodsId、status查询参数(product/handler.go:34,service.go:256-267)。pdd_product.updated_at。数据核验(只读查询,2026-08-31):按updated_at DESC取前 5 依次为内部 id 1523、502、6425、8480、8470,与采集任务 109、108、107、105、104 的完成顺序完全一致。product.Detail单独查询pdd_product_color_image并按color ASC排序填充(service.go:227-237);makeCollectionViews不填充任何图片,因此列表接口从不返回图片。ProductView.ColorImages(service.go:75,json:"colorImages,omitempty")为列表与详情共用,列表只是从未填充。因此本单是「填充既有字段」,不新增结构体字段,也不改变分页与排序语义。ProductView内嵌models.PDDProduct,updatedAt已在列表响应中返回,前端新增「最近更新」列无需接口改动。pdd_product_color_image仅 20 条,全部来自 2026-08-29 15:28 之后完成的采集任务;更早采集的商品没有任何颜色图片。shopeeproduct.LinkPDD(service.go:267),其注释记录 #40 要求「禁止手工输入 id、只允许搜索并选择」,本单不改变该约束。目标
非目标
colorImages字段。LinkPDD写入逻辑、幂等语义或 #40 的「禁止手工输入 id」约束。前置依赖与并行性
product列表服务的一处填充逻辑与前端弹窗,可与 #164、#165 并行。/static代理修复:颜色图片路径为相对路径/static/...,开发服务器(9527)与后端(8010)不同源时会 404。已在工作区修改web/vite.config.mjs增加/static代理但尚未实机验证。代理未验证通过前不得进入本单的界面验收,否则列表每行都会显示「加载失败」,比不显示更糟。shopee-products/index.vue弹窗区域的任务不可并行。固定实施方案
改动集中在
web/src/views/goauto/shopee-products/index.vue:打开即预填
openPddPicker(target)在重置状态后立即调用一次查询,参数为{ page: 1, pageSize: 5, status: 'active' },不带keyword。查询期间显示 loading。默认只取可用商品
预填查询固定带
status=active,避免已停用商品占用前 5 个名额(停用商品在弹窗中本就不可选择,:50)。关键词搜索保持现有行为,不加status过滤,以免影响按 id 精确查找已停用商品的场景。关键词搜索与回退
searchPddPicker保持现有查询逻辑。关键词为空时按第 1 条的默认参数查询,即清空输入框后回到最近更新的前 5 条。增加可辨识信息
列表新增「最近更新」列,显示
updatedAt(接口已返回,用于人工确认刚采集的商品)。标题列保持完整标题与店铺名。文案修正
updated_at也会被手工编辑商品资料刷新,写成采集时间会造成误判。列表接口填充颜色图片(服务端)
在
makeCollectionViews中,按当页商品 id 批量查询一次pdd_product_color_image,每个商品取color ASC的第一张,填入既有的ColorImages字段(每个商品最多 1 条)。color ASC),避免同一商品在列表与详情显示不同图片。omitempty),不返回空对象。弹窗新增缩略图列(前端)
列表首列显示颜色缩略图,复用详情页颜色图片的既有展示规范(
pdd-products/index.vue:73的el-image,含lazy)。PDD 商品列表页替换列(前端)
web/src/views/goauto/pdd-products/index.vue:19的「销量 / 评价」列移除,原位置改为「颜色图」列。:69)与编辑表单(:114)保持原样,数据与接口均不改动。makeCollectionViews,本页调用的就是同一接口。设计证据
属于现有弹窗的小范围调整,复用当前「搜索并选择 PDD 商品」弹窗的既有布局与组件规范,不新增组件与页面,不需要完整原型。实施前提供改动后的标注截图交用户确认,覆盖:默认预填、搜索结果、清空关键词回退、无数据、加载中五个状态,并需同时覆盖「有颜色图」与「无颜色图占位」两种行。PDD 商品列表页另需提供替换列前后的对比截图,覆盖有图与无图两种行。
验收标准
activePDD 商品,无需先输入关键词。target='create')行为一致,不发生回归。colorImages。colorImages字段。/static代理已验证通过,列表图片请求返回 200。必测场景
action=link_pdd跳转与在虾皮商品详情内直接点「关联/更换」两个入口均正确预填。color ASC的第一张。风险与安全门禁
makeCollectionViews公共路径实现,同时影响弹窗与 PDD 商品列表页,性能验证需覆盖 PDD 商品列表页的正常分页大小。/static代理未修复时每行都会显示加载失败,比弹窗更显眼,故代理验证必须先于本页验收。文档影响
无长期文档影响。 本单不新增接口、参数、响应字段、数据结构、状态、业务规则与安全边界:颜色图片使用
ProductView中既有的colorImages字段,仅由列表接口开始填充;其余为既有弹窗的默认查询时机与展示文案调整。启动、测试、部署与排错方式均未变化。docs/08-agent-api-contract.md为 Agent 契约,本单改动的是 admin 接口,不受影响。因此跳过 Wiki 更新与同步。若实施时发现必须新增响应字段或改变列表接口语义,则文档影响需重新判断并回写本工单。
相邻问题(不在本单范围)
用户此前提出的「Agent 端待关联队列 + 采集后自动关联」(可进一步省掉回 admin 的步骤)已由用户明确暂缓,本单不实施,需要时另建工单。
状态
实施中(2026-08-31 创建;同日两次并入范围修订,均已由用户确认)。当前进度:列表接口颜色图片填充与弹窗改造已在工作区完成(含服务端单元测试),尚未提交;PDD 商品列表页列替换待实施;
/static代理修复待实机验证;界面截图待用户确认。优化:关联 PDD 商品弹窗默认预填最近更新的商品,减少采集后重复搜索to 优化:关联 PDD 商品弹窗默认预填最近更新的商品并显示颜色缩略图优化:关联 PDD 商品弹窗默认预填最近更新的商品并显示颜色缩略图to 优化:PDD 商品关联弹窗与商品列表页显示颜色图,弹窗默认预填最近更新商品实施完成,待验收
设计证据:用户于 2026-08-31 确认合并后的 PDD 选择器低保真设计。
实现:
active商品;不默认选择、高亮或自动关联。pdd_product_id ASC, color ASC取每个商品第一张;无图片时colorImages保持缺省。/static代理使用已存在的web/vite.config.mjs工作区修正,并已在 9530→8010 场景验证真实图片 HTTP 200。验证:
go test ./app/goauto/product:通过。新增测试证明图片只查询一次、每商品最多一张、按 color ASC 取第一张、无图不返回。pnpm exec eslint src/views/goauto/shopee-products/index.vue:通过。PLAYWRIGHT_TEST_BASE_URL=http://localhost:9530 PLAYWRIGHT_DISABLE_VIDEO=1 pnpm exec playwright test tests/e2e/shopee-pdd-picker.spec.ts:1/1 通过,覆盖打开预填、active 过滤、关键词搜索、已停用禁选、清空回退、有图加载失败占位与无图占位。pnpm build:prod:通过;仅有仓库既有 CSS 伪类和 chunk-size 警告。/static/uploadfile/goauto-color/f96f0134-8e44-4fdc-a028-f69d24face71.jpg经开发代理返回 200。文档影响:无长期文档影响;未新增接口、参数、字段、数据结构、权限或业务规则,跳过 Wiki。Agent 不受影响。
提交:
78f5895,已推送origin/main。无关 Android、SYB 文档和 task 工作区修改均保留未提交。状态:待用户验收。范围修订二实施完成,最终待验收
已完成 Claude 更新后新增的 PDD 商品主列表范围:
colorImages;有图显示 56×56 缩略图,无图或加载失败显示“暂无图片”。验证:
pnpm exec eslint src/views/goauto/pdd-products/index.vue:通过。pnpm build:prod:通过;仅有仓库既有 CSS 伪类和 chunk-size 警告。PLAYWRIGHT_TEST_BASE_URL=http://localhost:9530 PLAYWRIGHT_DISABLE_VIDEO=1 pnpm exec playwright test tests/e2e/pdd-product-module.spec.ts:5/5 通过。覆盖颜色图列、移除销量/评价列、无图/加载失败占位、详情仍显示销量评价、编辑保存数值、定位/查询/重置/批量采集回归。提交:
1340ba0,已推送origin/main。#168 的最终交付由两次提交组成:
78f5895:服务端列表首图、PDD 选择弹窗默认预填/搜索/首图、静态代理与测试。1340ba0:PDD 商品主列表颜色图列及回归测试。文档影响仍为无长期文档影响,未更新 Wiki。状态:最终待用户验收。
范围修订三:颜色裁剪图预览(用户已确认)
用户确认 PDD 选择弹窗与 PDD 商品主列表中的颜色缩略图支持单击/双击预览。这里的“原始图片”定义为服务端已保存的颜色规格裁剪图,不是整屏截图、商品主图或新下载图片。
固定边界:
el-image的预览能力,预览源为当前imagePath,不新增接口、字段、下载或存储。验收增加:两处有图缩略图可打开裁剪图预览;选择弹窗预览时不会触发关联;关闭预览后弹窗和搜索结果保持;无图/失败占位不可预览。
范围修订三实施完成:颜色裁剪图预览
实现:
验证:
pnpm exec eslint src/views/goauto/shopee-products/index.vue src/views/goauto/pdd-products/index.vue:通过。pnpm build:prod:通过;仅有仓库既有 CSS 伪类和 chunk-size 警告。PLAYWRIGHT_TEST_BASE_URL=http://localhost:9530 PLAYWRIGHT_DISABLE_VIDEO=1 pnpm exec playwright test tests/e2e/shopee-pdd-picker.spec.ts tests/e2e/pdd-product-module.spec.ts:6/6 通过。覆盖两处单击/双击预览、关闭返回、选择弹窗不自动关联、无图占位,以及 PDD 列表既有定位/查询/编辑/批量采集回归。提交:
1d0b0ce,已推送origin/main。#168 保持最终待用户验收。