From 8a20f32c2bb9af8991732ab1404b8003cda1a9af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=98=8A=E5=A4=A9?= <442384644@qq.com> Date: Tue, 29 Sep 2026 11:34:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=AE=9E=E7=89=A9=E8=AE=A2=E5=8D=95):=20?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA=E9=85=8D?= =?UTF-8?q?=E9=80=81=E6=96=B9=E5=BC=8F=E5=B9=B6=E4=BF=AE=E5=A4=8D=E5=B7=B2?= =?UTF-8?q?=E5=8F=91=E8=B4=A7=E8=AF=AF=E5=88=A4=E6=9C=AA=E5=8F=91=E8=B4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrderCenterListExtendListener.php | 52 ++++++++++--------- .../normal/order/components/OrderTable.vue | 24 ++++++++- 2 files changed, 49 insertions(+), 27 deletions(-) diff --git a/backend/modules/product/normal/listener/OrderCenterListExtendListener.php b/backend/modules/product/normal/listener/OrderCenterListExtendListener.php index 231c280a8..d2531d21d 100644 --- a/backend/modules/product/normal/listener/OrderCenterListExtendListener.php +++ b/backend/modules/product/normal/listener/OrderCenterListExtendListener.php @@ -13,6 +13,7 @@ declare(strict_types=1); namespace modules\product\normal\listener; use modules\product\normal\dao\NormalOrderDao; +use think\facade\Log; /** * 订单中心列表扩展监听器 @@ -53,36 +54,37 @@ class OrderCenterListExtendListener } } $missingOrderNos = array_filter(array_unique($missingOrderNos)); - if (empty($missingOrderNos)) { - return; - } - // 批量查询扩展表获取配送信息 - try { - /** @var NormalOrderDao $orderDao */ - $orderDao = app(NormalOrderDao::class); - $extDeliveryMap = $orderDao->getModel() - ->whereIn('order_no', $missingOrderNos) - ->field('order_no, delivery_name, delivery_id, delivery_type') - ->select() - ->toArray(); - $mappedExtDeliveries = []; - foreach ($extDeliveryMap as $row) { - $orderNo = (string)($row['order_no'] ?? ''); - if ($orderNo === '') { - continue; + // 批量查询扩展表获取配送信息(仅存在缺失时查询;查询失败不阻断归一化,仍用 extra_info/中台数据兜底) + $mappedExtDeliveries = []; + if (!empty($missingOrderNos)) { + try { + /** @var NormalOrderDao $orderDao */ + $orderDao = app(NormalOrderDao::class); + $extDeliveryMap = $orderDao->getDb() + ->whereIn('order_no', $missingOrderNos) + ->field('order_no, delivery_name, delivery_id, delivery_type') + ->select() + ->toArray(); + foreach ($extDeliveryMap as $row) { + $orderNo = (string)($row['order_no'] ?? ''); + if ($orderNo === '') { + continue; + } + $mappedExtDeliveries[$orderNo] = [ + 'delivery_name' => (string)($row['delivery_name'] ?? ''), + 'delivery_id' => (string)($row['delivery_id'] ?? ''), + 'delivery_type' => (string)($row['delivery_type'] ?? ''), + ]; } - $mappedExtDeliveries[$orderNo] = [ - 'delivery_name' => (string)($row['delivery_name'] ?? ''), - 'delivery_id' => (string)($row['delivery_id'] ?? ''), - 'delivery_type' => (string)($row['delivery_type'] ?? ''), - ]; + } catch (\Throwable $e) { + Log::error('[Normal] OrderCenterListExtend 读取扩展表配送信息失败: ' . $e->getMessage()); } - } catch (\Throwable $e) { - return; } - // 回填到列表数据(统一顶层 + nested 格式) + // 回填到列表数据(统一顶层 + nested 格式),对所有 normal 订单执行, + // 保证顶层始终存在 delivery_type/delivery_name/delivery_id,前端列表按顶层字段渲染; + // 即使本页全部订单配送信息完整,也不能跳过本循环,否则前端会把已发货订单误判为未发货 foreach ($list as &$item) { if (($item['source_type'] ?? '') !== 'normal_order') { continue; diff --git a/frontend/admin/src/pages/plugin/normal/order/components/OrderTable.vue b/frontend/admin/src/pages/plugin/normal/order/components/OrderTable.vue index d7f98fc82..300b835f2 100644 --- a/frontend/admin/src/pages/plugin/normal/order/components/OrderTable.vue +++ b/frontend/admin/src/pages/plugin/normal/order/components/OrderTable.vue @@ -39,6 +39,9 @@ {{ scope.row.order_no }} + + [{{ getShippingTypeLabel(scope.row) }}] + 用户已删除 用户已取消物流查询 - 未发货 + {{ + isPickupOrder(scope.row) ? '--' : '未发货' + }} @@ -368,8 +373,23 @@ function canConfirm(row) { return statusCode === 'pending_receive' || statusCode === 'pending_pickup'; } +/** + * 判断是否到店自提订单 + */ +function isPickupOrder(row) { + return row?.extra_info?.delivery_type === 'pickup' || row?.shipping_type === 2; +} + +/** + * 配送方式文案(shipping_type:1快递 2自提 3上门) + */ +function getShippingTypeLabel(row) { + const type = Number(row?.shipping_type ?? 1); + return type === 2 ? '到店自提' : type === 3 ? '上门服务' : '快递配送'; +} + function getConfirmLabel(row) { - return row?.extra_info?.delivery_type === 'pickup' || row?.shipping_type === 2 ? '到店核销' : '确认收货'; + return isPickupOrder(row) ? '到店核销' : '确认收货'; } /**