diff --git a/backend/modules/product/virtual/controller/admin/OrderController.php b/backend/modules/product/virtual/controller/admin/OrderController.php index 2d5dec01d..ca24cfd4e 100644 --- a/backend/modules/product/virtual/controller/admin/OrderController.php +++ b/backend/modules/product/virtual/controller/admin/OrderController.php @@ -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); diff --git a/backend/modules/product/virtual/event.php b/backend/modules/product/virtual/event.php index 749542e0e..3773a0b34 100644 --- a/backend/modules/product/virtual/event.php +++ b/backend/modules/product/virtual/event.php @@ -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, + ], ], ]; diff --git a/backend/modules/product/virtual/listener/OrderCenterListExtendListener.php b/backend/modules/product/virtual/listener/OrderCenterListExtendListener.php new file mode 100644 index 000000000..871735429 --- /dev/null +++ b/backend/modules/product/virtual/listener/OrderCenterListExtendListener.php @@ -0,0 +1,77 @@ + +// +---------------------------------------------------------------------- +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); + } +} diff --git a/frontend/admin/src/pages/plugin/virtual/order/List.vue b/frontend/admin/src/pages/plugin/virtual/order/List.vue index 81922d6d1..6245c3f96 100644 --- a/frontend/admin/src/pages/plugin/virtual/order/List.vue +++ b/frontend/admin/src/pages/plugin/virtual/order/List.vue @@ -30,23 +30,25 @@ - + + + + + + + + + - - - - - -