From 44e416525d342cb709c4888e3e6e70c26aa435ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Thu, 23 Jul 2026 08:00:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(shopOrder):=20=E4=BF=AE=E5=A4=8D=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=95=86=E5=93=81=E6=80=BB=E6=95=B0=E9=87=8F=E5=92=8C?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AF=BC=E5=87=BA=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 getGoodsTotalNum 函数,基于订单商品明细求总数量,修正商品总数量计算错误 - 修改导出商品总数量列,避免使用订单级 totalNum 字段,确保数量正确 - 补齐导出字段,从8列扩展至15列,包含收货人、联系电话、配送方式等物流关键字段 - 导出数据信息同步商品明细,通过 Promise.all 调用逐单获取商品详情 - 支持按当前标签筛选导出,确保导出数据符合当前视图筛选条件 - 增加辅助函数优化代码结构,如 getShopName、getDeliveryTypeLabel 等 --- .workbuddy/memory/2026-07-23.md | 24 +++++++++++++++++++ .../shop/shopOrder/components/search.vue | 8 ++++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 .workbuddy/memory/2026-07-23.md diff --git a/.workbuddy/memory/2026-07-23.md b/.workbuddy/memory/2026-07-23.md new file mode 100644 index 0000000..7f2020f --- /dev/null +++ b/.workbuddy/memory/2026-07-23.md @@ -0,0 +1,24 @@ +# 2026-07-23 + +## 订单导出字段补齐(物流部发货用) +- 文件:`src/views/shop/shopOrder/components/search.vue` 的 `handleExport` +- 原来只导出 8 列(订单编号/订单标题[实际是 comments]/买家姓名/手机/实付金额/支付方式/付款时间/下单时间),且缺物流发货关键字段。 +- 新增并补齐到 15 列:收货人、联系电话、收货地址、配送方式(0快递/1自提/2商家送货)、商品明细(商品名x数量)、商品总数量、实付金额、配送时间、自提码、发货/自提店铺、买家备注、支付方式、发货状态(10未发/20已发/30部分)、下单时间。 +- 新增辅助函数:`getDeliveryTypeLabel` / `getDeliveryStatusLabel` / `getGoodsSummary` / `getShopName`。 +- 注意:枚举值与 `deliveryModal.vue` 一致(deliveryType 0快递 1无需发货/自提 2商家送货)。 +- 环境提示:本机 Grep 工具因缺 libpcre2 不可用,搜代码改用 Python 脚本遍历。 + +## 导出跟随当前标签筛选(避免混入非待发货订单) +- index.vue:新增 `statusFilterForExport` computed = `getStatusFilterByTab(activeKey)`,并通过 `:status-filter` 传给 ``。 +- search.vue:给 props 加 `statusFilter?`,导出请求改为 `listShopOrder({ ...where, statusFilter: props.statusFilter })`。 +- 效果:导出所见即所得——切到「待发货」标签再导出,只导出待发货;其它标签同理。全部标签下 statusFilter=undefined 不额外过滤。 + +## 修复:导出的商品明细为空 +- 根因:`listShopOrder`(非分页列表接口)不返回 `orderGoods` 嵌套;页面表格/详情用的是 `pageShopOrder` 和单独的 `listShopOrderGoods` 取明细。 +- 修复:导出时在 `search.vue` 中用 `Promise.all` 按 `orderId` 逐个调 `listShopOrderGoods({orderId})` 补齐商品明细,再写入「商品明细」列。 +- 商品明细格式升级为 `商品名(规格) x数量`,规格取自 ShopOrderGoods.spec,便于物流发对型号。 +- 单订单请求失败时 `.catch(() => [])` 兜底,不影响其它订单。 + +## 修复:商品总数量计算不对 +- 根因:「商品总数量」列原本用订单级 `d.totalNum`,但 `listShopOrder` 列表接口未返回该字段(与 orderGoods 同理),导致算错/为空。 +- 修复:新增 `getGoodsTotalNum(goods)`,对 `listShopOrderGoods` 取到的明细 `goodsList[idx]` 逐行 `totalNum` 求和。改动后「商品总数量」与「商品明细」列同源,必然对得上。 diff --git a/src/views/shop/shopOrder/components/search.vue b/src/views/shop/shopOrder/components/search.vue index 903a188..034b5ef 100644 --- a/src/views/shop/shopOrder/components/search.vue +++ b/src/views/shop/shopOrder/components/search.vue @@ -230,6 +230,12 @@ const getGoodsSummary = (goods?: any[]) => { .join(';'); }; +// 商品总数量:基于实际取到的商品明细求和(订单级 totalNum 列表接口可能不返回,以明细为准) +const getGoodsTotalNum = (goods?: any[]) => { + if (!goods || !goods.length) return 0; + return goods.reduce((sum, g) => sum + (Number(g.totalNum) || 0), 0); +}; + // 自提/发货店铺名称 const getShopName = (d: ShopOrder) => { if (d.deliveryType === 1) return d.selfTakeMerchantName || ''; @@ -278,7 +284,7 @@ const handleExport = async () => { `${d.address || ''}`, `${getDeliveryTypeLabel(d.deliveryType)}`, `${getGoodsSummary(goodsList[idx])}`, - `${d.totalNum ?? ''}`, + `${getGoodsTotalNum(goodsList[idx])}`, `${d.payPrice || ''}`, `${ d.sendStartTime && d.sendEndTime