fix: 修复审批详情显示问题

- 修复用户不存在时仍然显示审批人ID的问题
- 即使部分用户不存在,也保留其ID信息显示
- 优化审批人和抄送人的查询逻辑

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-03-01 10:21:15 +08:00
parent 3ebbbefb8d
commit 78a1921f06
+33 -11
View File
@@ -280,20 +280,42 @@ class ApprovalService
// 获取实际审批人的完整用户信息
$actualApproverUsers = [];
$actualApproverIdsArray = [];
if (!empty($actualApproverIds)) {
$actualApproverUsers = User::whereIn('id', $actualApproverIds)
->get()
->keyBy('id')
->toArray();
$users = User::whereIn('id', $actualApproverIds)->get()->keyBy('id');
foreach ($actualApproverIds as $approverId) {
if ($users->has($approverId)) {
$actualApproverUsers[$approverId] = $users->get($approverId)->toArray();
} else {
// 用户不存在,至少保留ID信息
$actualApproverUsers[$approverId] = [
'id' => $approverId,
'name' => '用户' . $approverId . '(不存在)',
'status' => 0,
];
}
$actualApproverIdsArray[] = (int)$approverId;
}
}
// 获取实际抄送人的完整用户信息
$actualCcUserObjects = [];
$actualCcUserIdsArray = [];
if (!empty($actualCcUserIds)) {
$actualCcUserObjects = User::whereIn('id', $actualCcUserIds)
->get()
->keyBy('id')
->toArray();
$users = User::whereIn('id', $actualCcUserIds)->get()->keyBy('id');
foreach ($actualCcUserIds as $ccUserId) {
if ($users->has($ccUserId)) {
$actualCcUserObjects[$ccUserId] = $users->get($ccUserId)->toArray();
} else {
// 用户不存在,至少保留ID信息
$actualCcUserObjects[$ccUserId] = [
'id' => $ccUserId,
'name' => '用户' . $ccUserId . '(不存在)',
'status' => 0,
];
}
$actualCcUserIdsArray[] = (int)$ccUserId;
}
}
// 处理节点信息,添加实际审批人
@@ -305,7 +327,7 @@ class ApprovalService
// 为审批节点添加实际审批人信息
if (in_array($node->type, ['approver', 'and_approve', 'or_approve'])) {
$nodeArray['actual_approvers'] = [];
foreach ($actualApproverIds as $approverId) {
foreach ($actualApproverIdsArray as $approverId) {
if (isset($actualApproverUsers[$approverId])) {
$nodeArray['actual_approvers'][] = $actualApproverUsers[$approverId];
}
@@ -313,7 +335,7 @@ class ApprovalService
// 获取每个实际审批人的审批状态
$nodeArray['approver_statuses'] = [];
foreach ($actualApproverIds as $approverId) {
foreach ($actualApproverIdsArray as $approverId) {
$record = ApprovalRecord::where('order_id', $orderId)
->where('node_id', $node->id)
->where('approver_id', $approverId)
@@ -334,7 +356,7 @@ class ApprovalService
// 为通知节点添加实际抄送人
if ($node->type === 'notify') {
$nodeArray['actual_cc_users'] = [];
foreach ($actualCcUserIds as $ccUserId) {
foreach ($actualCcUserIdsArray as $ccUserId) {
if (isset($actualCcUserObjects[$ccUserId])) {
$nodeArray['actual_cc_users'][] = $actualCcUserObjects[$ccUserId];
}