diff --git a/backend/src/main/java/com/designhub/controller/TaskController.java b/backend/src/main/java/com/designhub/controller/TaskController.java index a9e5850..46f58c9 100644 --- a/backend/src/main/java/com/designhub/controller/TaskController.java +++ b/backend/src/main/java/com/designhub/controller/TaskController.java @@ -65,11 +65,12 @@ public class TaskController { @Parameter(description = "发布者部门ID") @RequestParam(required = false) Long publisherDeptId, @Parameter(description = "发布者部门ID列表(逗号分隔)") @RequestParam(required = false) String publisherDeptIds, @Parameter(description = "接收部门ID") @RequestParam(required = false) Long receiverDeptId, + @Parameter(description = "排除的状态列表(逗号分隔,如 draft,completed,cancelled)") @RequestParam(required = false) String excludeStatuses, @Parameter(description = "页码") @RequestParam(defaultValue = "1") Integer page, @Parameter(description = "每页数量") @RequestParam(defaultValue = "20") Integer pageSize) { - log.info("查询任务列表: status={}, taskTypeId={}, publisherDeptId={}, publisherDeptIds={}, receiverDeptId={}, page={}, pageSize={}", - status, taskTypeId, publisherDeptId, publisherDeptIds, receiverDeptId, page, pageSize); + log.info("查询任务列表: status={}, taskTypeId={}, publisherDeptId={}, publisherDeptIds={}, receiverDeptId={}, excludeStatuses={}, page={}, pageSize={}", + status, taskTypeId, publisherDeptId, publisherDeptIds, receiverDeptId, excludeStatuses, page, pageSize); // 处理多个发布者部门ID List publisherDeptIdList = null; @@ -81,7 +82,16 @@ public class TaskController { .collect(Collectors.toList()); } - IPage taskPage = taskService.getTaskList(page, pageSize, status, taskTypeId, publisherDeptId, publisherDeptIdList, receiverDeptId); + // 处理排除状态列表 + List excludeStatusList = null; + if (excludeStatuses != null && !excludeStatuses.isEmpty()) { + excludeStatusList = Arrays.stream(excludeStatuses.split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + } + + IPage taskPage = taskService.getTaskList(page, pageSize, status, taskTypeId, publisherDeptId, publisherDeptIdList, receiverDeptId, excludeStatusList); return Result.success(taskPage); } diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index 4367056..90cc828 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -707,6 +707,14 @@ public class TaskService { * 获取任务列表 */ public IPage getTaskList(Integer page, Integer pageSize, String status, Long taskTypeId, Long publisherDeptId, List publisherDeptIds, Long receiverDeptId) { + return getTaskList(page, pageSize, status, taskTypeId, publisherDeptId, publisherDeptIds, receiverDeptId, null); + } + + /** + * 获取任务列表(支持排除指定状态) + * @param excludeStatuses 要排除的状态列表(如 draft,completed,cancelled) + */ + public IPage getTaskList(Integer page, Integer pageSize, String status, Long taskTypeId, Long publisherDeptId, List publisherDeptIds, Long receiverDeptId, List excludeStatuses) { Page pageParam = new Page<>(page, pageSize); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -715,6 +723,12 @@ public class TaskService { wrapper.eq(Task::getStatus, status); } + // 🔥 排除指定状态(需求部门负责人查看"处理中"任务时使用) + if (excludeStatuses != null && !excludeStatuses.isEmpty()) { + wrapper.notIn(Task::getStatus, excludeStatuses); + log.info("排除状态: excludeStatuses={}", excludeStatuses); + } + // 根据任务类型筛选 if (taskTypeId != null) { wrapper.eq(Task::getTaskTypeId, taskTypeId); diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index 609a40c..24a0b45 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -4521,24 +4521,21 @@ const loadInProgressTasks = async () => { console.log('需求部门负责人查询的部门ID列表:', demandDeptIds) - // 需求部门负责人:不传递status参数,查询所有非草稿的任务 + // 需求部门负责人:查询所有处理中的任务(排除 draft、completed、cancelled) const { status: _, ...paramsWithoutStatus } = params const taskResponse = await taskApi.getTasks({ ...paramsWithoutStatus, - publisherDeptIds: demandDeptIds.join(',') // 按多个发布者部门过滤 + publisherDeptIds: demandDeptIds.join(','), // 按多个发布者部门过滤 + excludeStatuses: 'draft,completed,cancelled' // 🔥 后端排除指定状态 }) if (taskResponse.data && taskResponse.data.records) { - // 需求部门负责人:显示所有已发布且未完成的任务(pending、in_progress、review等) - const tasksWithInProgress = taskResponse.data.records.filter((task: any) => { - // 排除草稿和已完成的任务 - const excludeStatuses = ['draft', 'completed', 'cancelled'] - return !excludeStatuses.includes(task.status) - }) - allTasks = tasksWithInProgress.map((task: any) => ({ + // 需求部门负责人:显示所有处理中的任务(后端已过滤) + allTasks = taskResponse.data.records.map((task: any) => ({ ...task, isSubTask: false })) - totalCount = allTasks.length + // 🔥 使用后端返回的总数,确保分页正确 + totalCount = taskResponse.data.total || allTasks.length } } }