From d2f22d7ecf3d46f2806b79f5ece2f0ccd60467df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AF=E4=B9=90=E5=8A=A0=E5=86=B0?= <11869599+addie66@user.noreply.gitee.com> Date: Fri, 23 Oct 2026 00:15:38 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(split):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9F=A5=E8=AF=A2=E6=89=8B=E5=8A=A8=E5=88=86?= =?UTF-8?q?=E8=B4=A6=E8=A6=86=E7=9B=96=E5=92=8C=E5=8F=98=E6=9B=B4=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 SplitManualService::orderIdsWithOverride 方法用于批量查询存在手动覆盖的订单 - 新增 SplitManualService::orderIdsWithLog 方法用于批量查询存在变更历史的订单 - 在订单列表页面优化性能,批量查询订单的手动覆盖和变更历史状态 - 添加 can_view_manual_history 权限控制,允许成功/失败后查看变更历史 - 更新前端界面显示逻辑,优化变更历史查看权限判断 - 增强操作提示文案,说明变更历史查看功能 ``` --- .../library/split/SplitManualService.php | 28 +++++++++++++++++++ .../admin/controller/shopro/split/Order.php | 20 ++++++++++++- .../admin/view/shopro/split/order/index.html | 5 ++-- .../assets/js/backend/shopro/split/order.js | 5 ++++ 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/addons/shopro/library/split/SplitManualService.php b/addons/shopro/library/split/SplitManualService.php index b2d7a29..2e000aa 100644 --- a/addons/shopro/library/split/SplitManualService.php +++ b/addons/shopro/library/split/SplitManualService.php @@ -26,6 +26,34 @@ class SplitManualService return (bool) SplitManual::where('order_id', intval($orderId))->find(); } + /** + * 批量:存在手动覆盖的 order_id + * @param int[] $orderIds + * @return int[] + */ + public function orderIdsWithOverride(array $orderIds) + { + $orderIds = array_values(array_unique(array_filter(array_map('intval', $orderIds)))); + if (!$orderIds) { + return []; + } + return array_map('intval', SplitManual::where('order_id', 'in', $orderIds)->column('order_id')); + } + + /** + * 批量:存在变更历史的 order_id + * @param int[] $orderIds + * @return int[] + */ + public function orderIdsWithLog(array $orderIds) + { + $orderIds = array_values(array_unique(array_filter(array_map('intval', $orderIds)))); + if (!$orderIds) { + return []; + } + return array_map('intval', SplitManualLog::where('order_id', 'in', $orderIds)->group('order_id')->column('order_id')); + } + /** * 供 SplitCalculator 使用的明细 * @return array diff --git a/application/admin/controller/shopro/split/Order.php b/application/admin/controller/shopro/split/Order.php index 2f841ff..e338702 100644 --- a/application/admin/controller/shopro/split/Order.php +++ b/application/admin/controller/shopro/split/Order.php @@ -135,6 +135,18 @@ class Order extends Base protected function formatSplitOrderList($list) { $rows = []; + $manualService = new SplitManualService(); + $orderIds = []; + foreach ($list as $item) { + $data = is_array($item) ? $item : $item->toArray(); + $oid = intval($data['order_id'] ?? 0); + if ($oid > 0) { + $orderIds[] = $oid; + } + } + $overrideOrderIds = array_flip($manualService->orderIdsWithOverride($orderIds)); + $logOrderIds = array_flip($manualService->orderIdsWithLog($orderIds)); + foreach ($list as $item) { $data = is_array($item) ? $item : $item->toArray(); @@ -193,8 +205,14 @@ class Order extends Base $orderSplitSource = $data['split_source'] ?? 'auto'; $data['split_source'] = $orderSplitSource; $data['split_source_text'] = $orderSplitSource === 'manual' ? '手动指定' : $data['calc_source_text']; - $data['has_manual_override'] = (new SplitManualService())->hasOverride($orderId); + $hasOverride = isset($overrideOrderIds[$orderId]); + $hasManualLog = isset($logOrderIds[$orderId]); + $data['has_manual_override'] = $hasOverride; + $data['has_manual_log'] = $hasManualLog; $data['can_edit_manual'] = ($status === 4 && $channel === 'huifu'); + // 变更历史:成功/失败后均可查看,不限于 status=4 + $data['can_view_manual_history'] = ($channel === 'huifu') + && ($hasOverride || $hasManualLog || $orderSplitSource === 'manual'); unset($data['order'], $data['receivers']); $rows[] = $data; diff --git a/application/admin/view/shopro/split/order/index.html b/application/admin/view/shopro/split/order/index.html index 2498382..590360f 100644 --- a/application/admin/view/shopro/split/order/index.html +++ b/application/admin/view/shopro/split/order/index.html @@ -377,7 +377,7 @@ @@ -395,7 +395,7 @@ @size-change="onSizeChange"> -

失败汇付单可「指定接收方」改人改金额后重试;「同步」只更新状态,不会重复扣款。

+

失败汇付单可「指定接收方」改人改金额后重试;分账成功或失败后均可点「变更历史」查看每次改人记录。「同步」只更新状态,不会重复扣款。

@@ -452,6 +452,7 @@ 取消 + 查看变更历史 清除手动指定 仅保存 保存并重试 diff --git a/public/assets/js/backend/shopro/split/order.js b/public/assets/js/backend/shopro/split/order.js index e45518a..4abc751 100644 --- a/public/assets/js/backend/shopro/split/order.js +++ b/public/assets/js/backend/shopro/split/order.js @@ -258,7 +258,12 @@ define(['jquery', 'bootstrap', 'backend', 'form'], function ($, undefined, Backe }); }, openHistoryDrawer(row) { + if (!row || !row.order_id) { + Layer.msg('无法加载变更历史'); + return; + } this.historyRow = row; + this.manualDialogVisible = false; this.historyDrawerVisible = true; this.historyLoading = true; this.historyList = [];