From 392a4c0acc8c15535ccbf9c3c7382c32d2baa2b3 Mon Sep 17 00:00:00 2001 From: zou Date: Mon, 6 Jul 2026 12:29:06 +0800 Subject: [PATCH] =?UTF-8?q?fix(F006-W12.7):=20=E5=AE=9E=E7=89=A9=E5=95=86?= =?UTF-8?q?=E5=93=81=203=20=E6=9D=A1=20fallback=20=E2=86=92=20/supplier/go?= =?UTF-8?q?od/search=20=E7=9C=9F=E6=95=B0=E6=8D=AE=2016080=20=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: 用户验收发现商品管理 (实物商品) 只显示 3 条, 标签 服务商品(→实物商品) 太丑 根因: - W3.xC 时 /supplier/good/page 端点当时 404, 故 GoodListView 写死 FALLBACK 3 条 - 现在 /supplier/good/page 实际是 200 + code=400 (按 id 查, 不是分页), /supplier/good/search 才是真分页端点 - /supplier/good/search 返 16080 条, 字段精简 (缺 enterpriseName/unitName/createDate/checkStatus/checkOpinion) - menu-labels 写 "服务商品(→实物商品)" 是 W3.xC redirect 模式下的过渡标签 修法: - GoodListView.load() 改调 /supplier/good/search, 字段补齐 (缺字段用 -- 占位, checkStatus 默认 2 已通过, supplierGoodId 用 G+id 拼) - menu-labels "服务商品" 标签去掉 "(→实物商品)" 角标, 只留 "服务商品" - (后端没 /supplier/servicegood/* 端点, servicegood 路由被 menu-labels 改 path 跳到 /supplier/good, redirect 是设计意图) 验证 (Playwright + token): - title="商品管理" rows=10 sub="共 16080 个商品" - /supplier/good/search 200 OK, 10 行真数据 (铝合金门窗/VV62/WDZ-RYJS/WDZN-YJY23/RVV 等) - 封面图正常加载, 分类 2 级 (门窗/电缆) 正常 已知遗留 (不阻塞使用): - enterpriseName/unitName/createDate search 端点不返, 表格显示 -- 占位 - 状态 tab (待审核/已通过/已驳回) 暂不能筛选, 因 search 不返 checkStatus --- src/config/menu-labels.ts | 2 +- src/modules/supplier/good/GoodListView.vue | 33 +++++++++++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/config/menu-labels.ts b/src/config/menu-labels.ts index 4041dd7..6bb4731 100644 --- a/src/config/menu-labels.ts +++ b/src/config/menu-labels.ts @@ -74,7 +74,7 @@ export const MENU_LABELS: MenuLabel[] = [ // ===== 供应商模块 ===== { url: 'supplier/good', label: '实物商品', icon: 'Box', path: '/supplier/good', sort: 300 }, - { url: 'supplier/servicegood', label: '服务商品(→实物商品)', icon: 'Box', path: '/supplier/good', sort: 301 }, + { url: 'supplier/servicegood', label: '服务商品', icon: 'Box', path: '/supplier/good', sort: 301 }, { url: 'supplier/activityzone', label: '活动专区', icon: 'Promotion', path: '/supplier/activity', sort: 302 }, { url: 'supplier/coupon', label: '优惠券', icon: 'Ticket', path: '/supplier/coupon', sort: 303 }, { url: 'supplier/promoter', label: '推广返佣', icon: 'UserFilled', path: '/supplier/promoter', sort: 304 }, diff --git a/src/modules/supplier/good/GoodListView.vue b/src/modules/supplier/good/GoodListView.vue index 89f4ac2..9847d5a 100644 --- a/src/modules/supplier/good/GoodListView.vue +++ b/src/modules/supplier/good/GoodListView.vue @@ -143,18 +143,37 @@ async function load() { loading.value = true error.value = null try { - // 端点: /supplier/good/page 后端 404, 用 FALLBACK - await new Promise(r => setTimeout(r, 200)) - let rows = [...FALLBACK] - if (filters.title) rows = rows.filter(r => r.title.toLowerCase().includes(filters.title.toLowerCase())) + // 后端 /supplier/good/page 400 (按 id 查), 真实分页端点是 /supplier/good/search (16080 条) + const data = await httpGet<{ total: number | string; list: any[] }>('/supplier/good/search', { + page: page.value, + limit: limit.value, + ...(filters.title ? { title: filters.title } : {}) + }) + let rows = (data.list || []).map((it: any) => ({ + id: String(it.id), + supplierGoodId: 'G' + String(it.id), + icon: it.icon || null, + title: it.title || '--', + enterpriseName: '--', // search 端点不返, 留占位 + firstCategoryName: it.firstCategoryName || '', + secondCategoryName: it.secondCategoryName || '', + thirdCategoryName: it.thirdCategoryName || '', + brandName: it.brandName || '--', + unitName: '--', // search 端点不返 + onShelf: it.onShelf ?? 1, + checkOpinion: '', + checkStatus: 2, // search 不返, 默认已通过 + createDate: '', + raw: it + })) if (filters.enterpriseName) rows = rows.filter(r => r.enterpriseName.includes(filters.enterpriseName)) if (filters.checkStatus) rows = rows.filter(r => String(r.checkStatus) === filters.checkStatus) list.value = rows - total.value = rows.length + total.value = Number(data.total) || 0 } catch (e: any) { error.value = e?.msg || e?.message || '加载失败' - list.value = FALLBACK - total.value = FALLBACK.length + list.value = [] + total.value = 0 } finally { loading.value = false }