diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index c224908..c9c77ea 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -223,7 +223,7 @@ public class TaskItemService { // 检查用户部门或其父部门是否在允许列表中(子部门继承父部门权限) String[] allowedIds = allowedDeptIds.split(","); Set allowedDeptIdSet = new HashSet<>(); - for (String allowedId : allowedIds) { + for (String allowedId : allowedIds) { try { allowedDeptIdSet.add(Long.parseLong(allowedId.trim())); } catch (NumberFormatException e) { @@ -236,9 +236,9 @@ public class TaskItemService { Long currentDeptId = user.getDeptId(); while (currentDeptId != null) { if (allowedDeptIdSet.contains(currentDeptId)) { - isAllowed = true; - break; - } + isAllowed = true; + break; + } // 向上查找父部门 com.designhub.entity.Department currentDept = departmentMapper.selectById(currentDeptId); if (currentDept != null && currentDept.getParentId() != null) { @@ -248,8 +248,8 @@ public class TaskItemService { } } - if (!isAllowed) { - throw new BusinessException(ResultCode.FORBIDDEN, "您的部门无权接收此类型的任务"); + if (!isAllowed) { + throw new BusinessException(ResultCode.FORBIDDEN, "您的部门无权接收此类型的任务"); } } } @@ -880,8 +880,8 @@ public class TaskItemService { // 格式化工时显示(与第一轮一致) String hoursDisplay = formatEstimatedHours(item.getEstimatedHours()); - - content.append(" \n"); + + content.append(" \n"); content.append("▸ **").append(deptName).append("** | ") .append(item.getTotalScore()).append("分 | ") .append(hoursDisplay).append(" \n"); @@ -901,7 +901,7 @@ public class TaskItemService { content.append("  └ ").append(typeName) .append(" ×").append(qty) .append(" = ").append(score).append("分 \n"); - } + } } catch (Exception e) { log.warn("解析任务类型明细失败: {}", e.getMessage()); } diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index a749902..d9dad6b 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -540,6 +540,11 @@ 待审核 + + + + 加急 + @@ -3717,12 +3722,33 @@ const loadInProgressTasks = async () => { totalCount = allTasks.length } } else { - // 接单部门用户(设计师):只看子任务卡片 - const itemResponse = await taskApi.getInProgressTaskItems(params) + // 接单部门用户(设计师):看子任务卡片 + 直接分配给自己的普通任务 + const [itemResponse, taskResponse] = await Promise.all([ + taskApi.getInProgressTaskItems(params), + // 获取直接分配给当前用户的普通任务(非流水线任务) + taskApi.getTasks({ + ...params, + role: 'receiver' // 以接单人身份查询 + }) + ]) + + // 处理子任务 if (itemResponse.data && itemResponse.data.records) { const items = itemResponse.data.records.map((item: any) => mapTaskItemToTask(item)) - allTasks = items - totalCount = itemResponse.data.total || 0 + allTasks = [...allTasks, ...items] + totalCount += itemResponse.data.total || 0 + } + + // 处理直接分配的普通任务(排除流水线任务,因为流水线任务由子任务显示) + if (taskResponse.data && taskResponse.data.records) { + const normalTasks = taskResponse.data.records + .filter((task: any) => task.isPipeline !== 1) // 排除流水线任务 + .map((task: any) => ({ + ...task, + isSubTask: false + })) + allTasks = [...allTasks, ...normalTasks] + totalCount += normalTasks.length } }