From d059481aeda830efac31413210381b16324f728f Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 31 Mar 2026 16:47:14 +0800 Subject: [PATCH] fix: narrow pending review groups to actual approver dept --- .../designhub/service/TaskItemService.java | 26 +++++++------------ frontend/src/views/TaskHall.vue | 13 ++++++++-- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index 80d927f..ce018e9 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -1845,28 +1845,21 @@ public class TaskItemService { hasPermission = true; log.info("管理员模式,有权限"); } else { - // 部门负责人:检查子任务的任务类型配置的 allowed_dept_ids 是否包含该部门 + // 部门负责人只应看到真正路由到自己部门负责人审核的子任务组, + // 不能仅因任务类型配置里包含父级/兄弟部门就放行。 List targetDeptIds = getTargetDeptIdsFromTaskType(item.getTaskTypeId()); log.info("子任务 {} 的目标部门ID列表: {}, 查询的部门ID: {}", item.getId(), targetDeptIds, receiverDeptId); - - if (targetDeptIds.contains(receiverDeptId)) { - hasPermission = true; - log.info("匹配成功(通过任务类型配置)"); - } - if (!hasPermission) { - com.designhub.entity.Department approvalDept = resolveReceivingApprovalDeptForItem(item); - if (approvalDept != null && approvalDept.getId().equals(receiverDeptId)) { + + com.designhub.entity.Department approvalDept = resolveReceivingApprovalDeptForItem(item); + if (approvalDept != null) { + log.info("子任务 {} 实际审核部门: {} ({})", + item.getId(), approvalDept.getId(), approvalDept.getDeptName()); + if (approvalDept.getId().equals(receiverDeptId)) { hasPermission = true; - log.info("匹配成功(通过子任务接单部门负责人兜底)"); + log.info("匹配成功(通过实际审核部门)"); } } - // 兼容:也检查主任务的 receiver_dept_id - if (!hasPermission && mainTask.getReceiverDeptId() != null - && mainTask.getReceiverDeptId().equals(receiverDeptId)) { - hasPermission = true; - log.info("匹配成功(通过主任务接单部门)"); - } } log.info("子任务 {} 权限检查结果: {}", item.getId(), hasPermission); @@ -1980,6 +1973,7 @@ public class TaskItemService { if (approvalDept != null && approvalDept.getLeaderId() != null) { com.designhub.entity.User leader = userMapper.selectById(approvalDept.getLeaderId()); if (leader != null) { + groupInfo.put("currentApproverId", leader.getId()); groupInfo.put("currentApproverName", leader.getRealName()); groupInfo.put("currentApproverRole", "receiving_leader"); groupInfo.put("approvalStatus", "pending_receiving_approval"); diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index c378d0e..1a1ec41 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -626,11 +626,19 @@