diff --git a/backend/src/main/java/com/designhub/controller/TaskItemController.java b/backend/src/main/java/com/designhub/controller/TaskItemController.java index ab0de6e..b94ffc4 100644 --- a/backend/src/main/java/com/designhub/controller/TaskItemController.java +++ b/backend/src/main/java/com/designhub/controller/TaskItemController.java @@ -57,9 +57,13 @@ public class TaskItemController { @Parameter(description = "搜索关键词") @RequestParam(required = false) String keyword, @Parameter(description = "筛选可接单部门ID") @RequestParam(required = false) Long filterDeptId, @Parameter(description = "排序方式: oldest(最早优先)/latest(最新优先,默认)") @RequestParam(defaultValue = "latest") String sortBy, - @Parameter(description = "是否包含排队中的任务") @RequestParam(defaultValue = "true") Boolean includeQueuing) { + @Parameter(description = "是否包含排队中的任务") @RequestParam(defaultValue = "true") Boolean includeQueuing, + @Parameter(description = "品牌ID") @RequestParam(required = false) Long brandId, + @Parameter(description = "类目ID") @RequestParam(required = false) Long categoryId, + @Parameter(description = "平台ID") @RequestParam(required = false) Long platformId, + @Parameter(description = "需求类型") @RequestParam(required = false) String taskSubType) { - IPage items = taskItemService.getAvailableItems(page, pageSize, taskTypeId, keyword, filterDeptId, sortBy, includeQueuing); + IPage items = taskItemService.getAvailableItems(page, pageSize, taskTypeId, keyword, filterDeptId, sortBy, includeQueuing, brandId, categoryId, platformId, taskSubType); return Result.success(items); } diff --git a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java index 60229ba..b230c8d 100644 --- a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java +++ b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java @@ -141,6 +141,79 @@ public interface TaskItemMapper extends BaseMapper { @Param("keyword") String keyword, @Param("allowedTaskTypeIds") List allowedTaskTypeIds); + /** + * 查询可接单的子任务列表(完整筛选版本,支持品牌、类目、平台等筛选) + */ + @Select("") + IPage selectAvailableItemsWithFilters(Page page, + @Param("taskTypeId") Long taskTypeId, + @Param("keyword") String keyword, + @Param("brandId") Long brandId, + @Param("categoryId") Long categoryId, + @Param("platformId") Long platformId, + @Param("taskSubType") String taskSubType, + @Param("allowedTaskTypeIds") List allowedTaskTypeIds); + /** * 查询进行中的子任务列表 * @param receiverId 接单人ID,null表示不按接单人过滤 diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index dc35696..b438ea3 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -73,12 +73,28 @@ public class TaskItemService { */ public IPage getAvailableItems(Integer page, Integer pageSize, Long taskTypeId, String keyword, Long filterDeptId, String sortBy, Boolean includeQueuing) { + return getAvailableItems(page, pageSize, taskTypeId, keyword, filterDeptId, sortBy, includeQueuing, null, null, null, null); + } + + /** + * 获取可接单的子任务列表(完整版,支持所有筛选条件) + * @param filterDeptId 筛选可接单部门ID(可选) + * @param sortBy 排序方式:oldest(最早优先) / latest(最新优先,默认) + * @param includeQueuing 是否包含排队中的任务 + * @param brandId 品牌ID筛选 + * @param categoryId 类目ID筛选 + * @param platformId 平台ID筛选 + * @param taskSubType 需求类型筛选 + */ + public IPage getAvailableItems(Integer page, Integer pageSize, Long taskTypeId, String keyword, + Long filterDeptId, String sortBy, Boolean includeQueuing, + Long brandId, Long categoryId, Long platformId, String taskSubType) { Page pageParam = new Page<>(page, pageSize); IPage result; // 如果没有指定筛选部门,直接查询 if (filterDeptId == null) { - result = taskItemMapper.selectAvailableItems(pageParam, taskTypeId, keyword); + result = taskItemMapper.selectAvailableItemsWithFilters(pageParam, taskTypeId, keyword, brandId, categoryId, platformId, taskSubType, null); } else { // 🔥 获取筛选部门及其所有子部门的ID列表 Set filterDeptAndChildIds = getDeptAndChildIds(filterDeptId); @@ -127,7 +143,7 @@ public class TaskItemService { } // 查询并筛选 - result = taskItemMapper.selectAvailableItemsByTaskTypes(pageParam, taskTypeId, keyword, filterDeptAllowedTypeIds); + result = taskItemMapper.selectAvailableItemsWithFilters(pageParam, taskTypeId, keyword, brandId, categoryId, platformId, taskSubType, filterDeptAllowedTypeIds); } // 🔥 填充排队状态信息 diff --git a/frontend/src/api/task.ts b/frontend/src/api/task.ts index 19270eb..53c23ba 100644 --- a/frontend/src/api/task.ts +++ b/frontend/src/api/task.ts @@ -418,6 +418,12 @@ export const getAvailableTaskItems = (params: { pageSize?: number taskTypeId?: number keyword?: string + brandId?: number + categoryId?: number + platformId?: number + taskSubType?: string + filterDeptId?: number + sortBy?: string }) => { return request.get('/tasks/items/available', { params }) }