fix(实物订单): 订单列表展示配送方式并修复已发货误判未发货

This commit is contained in:
吴昊天 2026-09-29 11:34:32 +08:00
parent 5bf347b19e
commit 8a20f32c2b
2 changed files with 49 additions and 27 deletions

View File

@ -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;

View File

@ -39,6 +39,9 @@
<el-table-column label="订单号" width="180">
<template #default="scope">
<div>{{ scope.row.order_no }}</div>
<div style="font-size: 11px; color: var(--prev-color-text-secondary)">
[{{ getShippingTypeLabel(scope.row) }}]
</div>
<span v-if="scope.row.is_del === 1" style="color: #ed4014; font-size: 12px">用户已删除</span>
<span v-if="scope.row.is_cancel === 1 && scope.row.is_del === 0" style="color: #ed4014; font-size: 12px"
>用户已取消</span
@ -140,7 +143,9 @@
>物流查询</a
>
</template>
<span v-else style="color: var(--prev-color-text-secondary)">未发货</span>
<span v-else style="color: var(--prev-color-text-secondary)">{{
isPickupOrder(scope.row) ? '--' : '未发货'
}}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" width="160">
@ -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) ? '到店核销' : '确认收货';
}
/**