fix(网盘订单): 列表合并扩展字段、打通搜索并按业务调整展示列

- 新增 OrderCenterListExtend 监听器:从 eb_pt_virtual_order 合并
  product_id/status/complete_time 到列表行,修复商品ID与状态空白
- list() 搜索契约映射:order_no 走中台 keyword 前缀搜索、status 对应
  status_code,修复搜索不生效
- 列表去掉发货时间/退款状态/商品ID(网盘自动发货、无退款流程),
  新增商品名称/规格/金额
This commit is contained in:
吴昊天 2026-09-29 17:34:57 +08:00
parent 5134bb80b2
commit 29dd67bc0b
4 changed files with 103 additions and 12 deletions

View File

@ -25,14 +25,21 @@ class OrderController extends AuthController
/**
* 订单列表
* 从中台表查询 product_type=virtual 的订单
* 页面搜索契约:order_no 前缀搜索(走中台 keyword)、status 对应中台 status_code
* @param OrderCenterServices $centerServices
* @return \think\Response
*/
public function list(OrderCenterServices $centerServices)
{
$where = array_merge($this->request->param(), [
'product_type' => 'virtual',
]);
$where = ['product_type' => 'virtual'];
$orderNo = trim((string) $this->request->param('order_no', ''));
if ($orderNo !== '') {
$where['keyword'] = $orderNo;
}
$status = (string) $this->request->param('status', '');
if ($status !== '') {
$where['status_code'] = $status;
}
$page = (int) $this->request->param('page', 1);
$limit = (int) $this->request->param('limit', 20);
$list = $centerServices->getAdminList($where, $page, $limit);

View File

@ -42,5 +42,10 @@ return [
'OrderCenterDetailExtend' => [
\modules\product\virtual\listener\OrderCenterDetailExtendListener::class,
],
/** 订单中台列表扩展:合并网盘订单扩展字段(product_id/status/send_time/complete_time) */
'OrderCenterListExtend' => [
\modules\product\virtual\listener\OrderCenterListExtendListener::class,
],
],
];

View File

@ -0,0 +1,77 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare(strict_types=1);
namespace modules\product\virtual\listener;
use modules\product\virtual\dao\VirtualOrderDao;
use think\facade\Log;
/**
* 订单中心列表扩展监听器
* 合并网盘订单扩展字段(product_id/status/send_time/complete_time)到列表行,
* 供后台网盘订单列表渲染;退款状态以中台实体列为准,不在此覆盖
*/
class OrderCenterListExtendListener
{
/**
* 处理列表扩展
* @param array $eventData ['list' => &$list]
*/
public function handle($eventData): void
{
$list = &$eventData['list'];
if (empty($list)) {
return;
}
$orderNos = [];
foreach ($list as $item) {
if (($item['source_type'] ?? '') === 'virtual_order') {
$orderNos[] = $item['order_no'] ?? '';
}
}
$orderNos = array_filter(array_unique($orderNos));
if (empty($orderNos)) {
return;
}
try {
/** @var VirtualOrderDao $dao */
$dao = app(VirtualOrderDao::class);
$rows = $dao->getDb()
->whereIn('order_no', $orderNos)
->field('order_no, product_id, status, send_time, complete_time')
->select()
->toArray();
} catch (\Throwable $e) {
Log::error('[Virtual] OrderCenterListExtend 读取扩展表失败: ' . $e->getMessage());
return;
}
$map = [];
foreach ($rows as $row) {
$map[$row['order_no']] = $row;
}
foreach ($list as &$item) {
if (($item['source_type'] ?? '') !== 'virtual_order') {
continue;
}
$ext = $map[$item['order_no'] ?? ''] ?? [];
$item['product_id'] = (int)($ext['product_id'] ?? 0);
$item['status'] = (string)($ext['status'] ?? '');
$item['send_time'] = (int)($ext['send_time'] ?? 0);
$item['complete_time'] = (int)($ext['complete_time'] ?? 0);
}
unset($item);
}
}

View File

@ -30,23 +30,25 @@
<el-card shadow="never" :body-style="{ padding: '12px 20px' }" class="mt16">
<el-table :data="list" v-loading="loading" stripe empty-text="暂无数据">
<el-table-column label="订单号" min-width="200" prop="order_no" />
<el-table-column label="商品ID" min-width="90" prop="product_id" />
<el-table-column label="商品名称" min-width="180">
<template #default="{ row }">{{ row.title || '--' }}</template>
</el-table-column>
<el-table-column label="规格" min-width="90">
<template #default="{ row }">{{ row.extra_info?.items?.[0]?.sku || '--' }}</template>
</el-table-column>
<el-table-column label="金额" min-width="100">
<template #default="{ row }">
<span style="color: #ed4014; font-weight: bold">¥{{ row.pay_price || '0.00' }}</span>
</template>
</el-table-column>
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-tag :type="statusType(row.status)">{{ statusLabel(row.status) }}</el-tag>
</template>
</el-table-column>
<el-table-column label="发货时间" min-width="160">
<template #default="{ row }">{{ dateFormat(row.send_time) }}</template>
</el-table-column>
<el-table-column label="完成时间" min-width="160">
<template #default="{ row }">{{ dateFormat(row.complete_time) }}</template>
</el-table-column>
<el-table-column label="退款状态" min-width="100">
<template #default="{ row }">
<el-tag :type="row.refund_status ? 'danger' : 'info'">{{ row.refund_status ? '退款中' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" min-width="160">
<template #default="{ row }">{{ dateFormat(row.add_time) }}</template>
</el-table-column>