From eb5dedde3c6fc7605b92d31d0885d23693c73fc6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 2 Apr 2026 11:14:46 +0800 Subject: [PATCH] fix: show pending approval tasks in leader workbench --- .../com/designhub/service/TaskService.java | 107 +++++++++++++++--- frontend/src/views/LeaderWorkbench.vue | 66 +++++++++-- 2 files changed, 151 insertions(+), 22 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index c0b69bb..bd22641 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -3184,23 +3184,102 @@ public class TaskService { log.info("查询负责人任务列表: userId={}, auditStatus={}", userId, auditStatus); User user = userService.getUserById(userId); - if (user == null || user.getDeptId() == null) { - throw new BusinessException("用户不存在或未分配部门"); + if (user == null) { + throw new BusinessException("用户不存在"); } - - Department dept = departmentService.getDepartmentById(user.getDeptId()); - if (dept == null) { - throw new BusinessException("部门不存在"); + + List managedDeptIds = departmentService.getUserManagedPublishingDepartments(userId).stream() + .map(Department::getId) + .distinct() + .collect(Collectors.toList()); + + if (managedDeptIds.isEmpty()) { + throw new BusinessException("只有需求部门负责人才能查看该视图"); } - - // 检查是否是部门负责人 - if (!userId.equals(dept.getLeaderId())) { - throw new BusinessException("只有部门负责人才能查看该视图"); - } - - // 查询部门内所有任务 + Page pageParam = new Page<>(page, pageSize); - return taskMapper.selectLeaderTaskPage(pageParam, user.getDeptId(), auditStatus); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(Task::getPublisherDeptId, managedDeptIds) + .eq(Task::getDeleted, 0); + + applyLeaderTaskAuditFilter(wrapper, auditStatus); + wrapper.orderByDesc(Task::getCreateTime); + + IPage result = taskMapper.selectPage(pageParam, wrapper); + enrichLeaderTaskList(result.getRecords()); + return result; + } + + private void applyLeaderTaskAuditFilter(LambdaQueryWrapper wrapper, String auditStatus) { + if (!StringUtils.hasText(auditStatus)) { + return; + } + + switch (auditStatus) { + case "draft": + wrapper.and(w -> w + .eq(Task::getAuditStatus, "draft") + .and(x -> x.isNull(Task::getApprovalStatus) + .or() + .eq(Task::getApprovalStatus, "draft"))); + return; + case "pending_audit": + wrapper.and(w -> w + .eq(Task::getAuditStatus, "pending_audit") + .or() + .in(Task::getApprovalStatus, Arrays.asList("pending_primary_approval", "pending_demand_approval"))); + return; + case "audit_pass": + wrapper.and(w -> w + .eq(Task::getAuditStatus, "audit_pass") + .or() + .eq(Task::getApprovalStatus, "approved")); + return; + case "audit_reject": + wrapper.and(w -> w + .eq(Task::getAuditStatus, "audit_reject") + .or() + .in(Task::getApprovalStatus, Arrays.asList("rejected", "rejected_by_demand", "rejected_by_receiving"))); + return; + default: + wrapper.eq(Task::getAuditStatus, auditStatus); + } + } + + private void enrichLeaderTaskList(List tasks) { + if (tasks == null || tasks.isEmpty()) { + return; + } + + for (Task task : tasks) { + if (task.getPublisherId() != null && !StringUtils.hasText(task.getPublisherName())) { + User publisher = userMapper.selectById(task.getPublisherId()); + if (publisher != null) { + task.setPublisherName(publisher.getRealName()); + } + } + + if (task.getPublisherDeptId() != null && !StringUtils.hasText(task.getPublisherDeptName())) { + Department publisherDept = departmentMapper.selectById(task.getPublisherDeptId()); + if (publisherDept != null) { + task.setPublisherDeptName(publisherDept.getDeptName()); + } + } + + if (task.getAuditorId() != null && !StringUtils.hasText(task.getAuditorName())) { + User auditor = userMapper.selectById(task.getAuditorId()); + if (auditor != null) { + task.setAuditorName(auditor.getRealName()); + } + } + + if (task.getCurrentApproverId() != null && !StringUtils.hasText(task.getCurrentApproverName())) { + User approver = userMapper.selectById(task.getCurrentApproverId()); + if (approver != null) { + task.setCurrentApproverName(approver.getRealName()); + } + } + } } /** diff --git a/frontend/src/views/LeaderWorkbench.vue b/frontend/src/views/LeaderWorkbench.vue index bb4e897..0e1a134 100644 --- a/frontend/src/views/LeaderWorkbench.vue +++ b/frontend/src/views/LeaderWorkbench.vue @@ -71,8 +71,8 @@ {{ getStatusText(task.status) }} - - {{ getAuditStatusText(task.auditStatus) }} + + {{ getReviewBadgeText(task) }} @@ -123,7 +123,7 @@