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':