From d94395e07e980a0d04d7bceae4dd1d5b7f61cdf4 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 7 Jan 2026 19:34:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=8C=E5=96=84=E5=AD=90=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=BB=84=E5=AE=A1=E6=A0=B8=E5=8D=A1=E7=89=87=EF=BC=8C?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8E=E4=B8=BB=E4=BB=BB=E5=8A=A1=E7=9B=B8?= =?UTF-8?q?=E5=90=8C=E7=9A=84=E5=AE=8C=E6=95=B4=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 后端增强getPendingApprovalGroups返回完整数据: - 品牌、类目、平台、SPU信息 - 发起人姓名和部门 - 任务类型明细 - 预览图和附件 - 计算子任务组总积分 - 前置任务的素材下载链接(流水线继承) 2. 前端修改: - 子任务组使用与主任务相同的数据结构 - 卡片显示完整的任务信息 - 显示前置素材下载按钮 --- .../designhub/service/TaskItemService.java | 84 +++++++++++++- frontend/src/views/TaskHall.vue | 108 ++++++++++++------ 2 files changed, 155 insertions(+), 37 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index 8437988..117e30f 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -1069,13 +1069,95 @@ public class TaskItemService { groupInfo.put("taskTitle", mainTask.getTitle()); groupInfo.put("taskNo", mainTask.getTaskNo()); groupInfo.put("groupNo", item.getGroupNo()); - groupInfo.put("groupId", item.getGroupNo()); // 前端使用groupId作为唯一标识 + groupInfo.put("groupId", item.getGroupNo()); groupInfo.put("itemCount", 1); groupInfo.put("createTime", item.getCreateTime()); + + // 添加主任务的完整信息 + groupInfo.put("brandId", mainTask.getBrandId()); + groupInfo.put("brandName", mainTask.getBrandName()); + groupInfo.put("categoryId", mainTask.getCategoryId()); + groupInfo.put("categoryName", mainTask.getCategoryName()); + groupInfo.put("platformId", mainTask.getPlatformId()); + groupInfo.put("platformName", mainTask.getPlatformName()); + groupInfo.put("spuInfo", mainTask.getSpuInfo()); + groupInfo.put("quantity", mainTask.getQuantity()); + groupInfo.put("previewImage", mainTask.getPreviewImage()); + groupInfo.put("attachmentUrl", mainTask.getAttachmentUrl()); + groupInfo.put("remark", mainTask.getRemark()); + groupInfo.put("typeDetails", mainTask.getTypeDetails()); + + // 发起人信息 + groupInfo.put("publisherId", mainTask.getPublisherId()); + if (mainTask.getPublisherId() != null) { + com.designhub.entity.User publisher = userMapper.selectById(mainTask.getPublisherId()); + if (publisher != null) { + groupInfo.put("publisherName", publisher.getRealName()); + groupInfo.put("publisherDeptName", publisher.getDeptName()); + } + } + + // 子任务的任务类型信息 + groupInfo.put("taskTypeId", item.getTaskTypeId()); + if (item.getTaskTypeId() != null) { + com.designhub.entity.DemandType taskType = demandTypeMapper.selectById(item.getTaskTypeId()); + if (taskType != null) { + groupInfo.put("taskTypeName", taskType.getName()); + } + } + + // 计算子任务组总积分 + groupInfo.put("totalScore", item.getScore() != null ? item.getScore() : 0); + + // 获取前置子任务的素材下载链接(流水线继承) + if (item.getGroupNo() != null && item.getGroupNo() > 1) { + // 查找前一组已完成的子任务的下载链接 + List prevGroupItems = taskItemMapper.selectList( + new LambdaQueryWrapper() + .eq(TaskItem::getTaskId, item.getTaskId()) + .eq(TaskItem::getGroupNo, item.getGroupNo() - 1) + .eq(TaskItem::getStatus, "completed") + ); + if (!prevGroupItems.isEmpty()) { + // 收集所有前置子任务的下载链接 + List prevDownloadUrls = prevGroupItems.stream() + .filter(pi -> pi.getDownloadUrl() != null && !pi.getDownloadUrl().isEmpty()) + .map(TaskItem::getDownloadUrl) + .collect(java.util.stream.Collectors.toList()); + if (!prevDownloadUrls.isEmpty()) { + groupInfo.put("prevDownloadUrls", prevDownloadUrls); + } + } + } + + // 存储子任务列表,用于显示详情 + List> itemsList = new java.util.ArrayList<>(); + Map itemInfo = new HashMap<>(); + itemInfo.put("id", item.getId()); + itemInfo.put("itemNo", item.getItemNo()); + itemInfo.put("taskTypeId", item.getTaskTypeId()); + itemInfo.put("score", item.getScore()); + itemsList.add(itemInfo); + groupInfo.put("items", itemsList); + groupMap.put(key, groupInfo); } else { Map groupInfo = groupMap.get(key); groupInfo.put("itemCount", (Integer) groupInfo.get("itemCount") + 1); + // 累加积分 + Integer currentScore = (Integer) groupInfo.get("totalScore"); + Integer itemScore = item.getScore() != null ? item.getScore() : 0; + groupInfo.put("totalScore", currentScore + itemScore); + + // 添加到子任务列表 + @SuppressWarnings("unchecked") + List> itemsList = (List>) groupInfo.get("items"); + Map itemInfo = new HashMap<>(); + itemInfo.put("id", item.getId()); + itemInfo.put("itemNo", item.getItemNo()); + itemInfo.put("taskTypeId", item.getTaskTypeId()); + itemInfo.put("score", item.getScore()); + itemsList.add(itemInfo); } } } diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index f338dbf..5980169 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -554,21 +554,17 @@
-
+
任务类型 {{ getTaskTypeName(task.taskTypeId, task.taskTypeName, task.taskSubType) }}
-
- 子任务数量 - {{ task._groupData?.itemCount || 0 }} 个 -
预估积分 - {{ task.totalScore || task.score || task._groupData?.totalScore || 0 }} 分 + {{ task.totalScore || task.score || 0 }} 分
-
- 数量 - {{ task.quantity || '--' }} 个 +
+ {{ task._itemType === 'taskGroup' ? '子任务数' : '数量' }} + {{ task._itemType === 'taskGroup' ? (task._groupData?.itemCount || 1) : (task.quantity || '--') }} 个
@@ -580,8 +576,8 @@
- -
+ +
任务类型明细
@@ -594,12 +590,6 @@
- - - - 任务编号: {{ task.taskNo || task._groupData?.taskNo || '--' }} -
-
@@ -611,43 +601,43 @@ 接单人: {{ task.receiverName || '--' }}
-
+
品牌: {{ task.brandName }}
-
+
类目: {{ task.categoryName }}
-
+
平台: {{ task.platformName }}
-
+
SPU: {{ task.spuInfo }}
-
+
子类型: {{ task.taskSubType }}
-
+
交付路径: {{ task.deliveryPath }}
-
+
@@ -664,6 +654,30 @@
+ +
+ + + + 前置素材: + + 下载{{ index + 1 }} + + +
+
+ + +
+ + {{ task.taskNo || '--' }}
@@ -3846,7 +3860,7 @@ const loadReviewTasks = async () => { }) } - // 处理子任务组(如果有) + // 处理子任务组(如果有)- 使用与主任务相同的数据结构 if (groupsResponse && groupsResponse.code === 200 && groupsResponse.data) { for (const group of groupsResponse.data) { allItems.push({ @@ -3854,8 +3868,30 @@ const loadReviewTasks = async () => { title: group.taskTitle || '子任务组', taskNo: group.taskNo || '', score: group.totalScore || 0, + totalScore: group.totalScore || 0, createTime: group.createTime, - _itemType: 'taskGroup', // 标记类型 + // 继承主任务的完整信息 + brandId: group.brandId, + brandName: group.brandName, + categoryId: group.categoryId, + categoryName: group.categoryName, + platformId: group.platformId, + platformName: group.platformName, + spuInfo: group.spuInfo, + quantity: group.itemCount || 1, // 子任务数量作为数量显示 + previewImage: group.previewImage, + attachmentUrl: group.attachmentUrl, + remark: group.remark, + typeDetails: group.typeDetails, + taskTypeId: group.taskTypeId, + taskTypeName: group.taskTypeName, + publisherId: group.publisherId, + publisherName: group.publisherName, + publisherDeptName: group.publisherDeptName, + // 前置任务的素材下载链接 + prevDownloadUrls: group.prevDownloadUrls || [], + // 标记类型 + _itemType: 'taskGroup', _groupData: group // 保存原始子任务组数据 }) } @@ -4616,16 +4652,16 @@ const loadAllTabCounts = async () => { ) } else { // 普通用户:只计算主任务 - promises.push( - taskApi.getAllPendingApprovalTasks({ - page: 1, - pageSize: 1 - }).then(res => { - if (res.data && res.data.total !== undefined) { - reviewTotal.value = res.data.total - } - }).catch(() => {}) - ) + promises.push( + taskApi.getAllPendingApprovalTasks({ + page: 1, + pageSize: 1 + }).then(res => { + if (res.data && res.data.total !== undefined) { + reviewTotal.value = res.data.total + } + }).catch(() => {}) + ) } // 4. 已完成任务数量