From dc763d874a4f6bb57c57f89c83e5319deb37caf6 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 26 Feb 2026 17:34:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BE=85=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 检查用户是否在当前节点的审批人列表中 - 排除已经审批过的申请 - 同时修复数据库节点7的审批人配置 问题:待审批列表没有验证用户是否为当前节点审批人 Co-Authored-By: Claude Opus 4.6 --- backend/app/service/BusinessTripService.php | 41 +++++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/backend/app/service/BusinessTripService.php b/backend/app/service/BusinessTripService.php index 19e8229..1525ea0 100644 --- a/backend/app/service/BusinessTripService.php +++ b/backend/app/service/BusinessTripService.php @@ -388,16 +388,41 @@ class BusinessTripService if (empty($pendingOrderIds)) { $query->whereRaw('1 = 0'); // 返回空结果 } else { - // 获取这些审批单中当前用户待审批的,排除已审批的 - $approvedOrderIds = ApprovalRecord::whereIn('order_id', $pendingOrderIds) - ->where('approver_id', $userId) - ->whereIn('action', ['approve', 'reject']) - ->pluck('order_id') - ->toArray(); + // 获取这些审批单的当前节点 + $pendingOrders = ApprovalOrder::whereIn('id', $pendingOrderIds)->get(); + $validOrderIds = []; - $pendingOrderIds = array_diff($pendingOrderIds, $approvedOrderIds); + foreach ($pendingOrders as $order) { + $currentNodes = $order->current_nodes ?? []; - $query->whereIn('approval_order_id', $pendingOrderIds); + // 检查用户是否在当前节点的审批人列表中 + $isApprover = false; + foreach ($currentNodes as $nodeId) { + $node = ApprovalNode::find($nodeId); + if ($node && in_array($userId, $node->approvers ?? [])) { + $isApprover = true; + break; + } + } + + // 如果用户是当前节点审批人,且未审批过,则加入列表 + if ($isApprover) { + $hasApproved = ApprovalRecord::where('order_id', $order->id) + ->where('approver_id', $userId) + ->whereIn('action', ['approve', 'reject']) + ->exists(); + + if (!$hasApproved) { + $validOrderIds[] = $order->id; + } + } + } + + if (empty($validOrderIds)) { + $query->whereRaw('1 = 0'); + } else { + $query->whereIn('approval_order_id', $validOrderIds); + } } break; case 'approved':