From 6e3095c6b19fbb36310015c7cbe02724ca543d8e Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 6 Jan 2026 21:14:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=8D=A1=E7=89=87=E6=98=BE=E7=A4=BA=20-=20=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E6=8E=92=E7=89=88=E3=80=81=E4=BB=BB=E5=8A=A1=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E3=80=81=E6=97=B6=E6=95=88=E8=A6=81=E6=B1=82=E3=80=81=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/TaskHall.vue | 44 ++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index 818447b..94b8538 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -244,15 +244,15 @@
任务类型 - {{ getTaskTypeName(task.taskTypeId) }} + {{ getTaskTypeName(task.taskTypeId, task.taskTypeName) }}
预估积分 - {{ task.score }} 分 + {{ task.score || '--' }} 分
数量 - {{ task.quantity || '--' }} 个 + {{ task.quantity || 1 }} 个
@@ -309,7 +309,7 @@ - 截止: {{ formatDeadline(task.deadline) }} + 时效要求: {{ formatEstimatedTime(task.estimatedHours) }}
@@ -2272,6 +2272,7 @@ interface TaskOrSubTask extends Task { groupNo?: number // 子任务组号 taskDescription?: string // 主任务描述 submitTime?: string // 提交时间 + taskTypeName?: string // 任务类型名称(子任务直接返回) } const router = useRouter() @@ -2451,7 +2452,9 @@ const completedPagination = reactive({ }) // 获取任务类型名称 -const getTaskTypeName = (typeId: number) => { +const getTaskTypeName = (typeId: number, taskTypeName?: string) => { + // 如果有直接传入的类型名称,优先使用 + if (taskTypeName) return taskTypeName const type = demandTypes.value.find(t => t.id === typeId) return type?.name || '未知类型' } @@ -2499,6 +2502,23 @@ const formatDeadline = (deadline: string | undefined) => { } } +// 格式化时效要求(工时转换为天+小时,8小时=1天) +const formatEstimatedTime = (hours: number | undefined) => { + if (!hours) return '--' + const WORK_HOURS_PER_DAY = 8 + const days = Math.floor(hours / WORK_HOURS_PER_DAY) + const remainingHours = Math.round((hours % WORK_HOURS_PER_DAY) * 100) / 100 + + if (days === 0) { + return Number.isInteger(remainingHours) ? `${remainingHours}小时` : `${remainingHours.toFixed(1)}小时` + } else if (remainingHours === 0) { + return `${days}天` + } else { + const hourStr = Number.isInteger(remainingHours) ? `${remainingHours}小时` : `${remainingHours.toFixed(1)}小时` + return `${days}天${hourStr}` + } +} + /** * 获取任务流程阶段 * @param task 任务对象 @@ -2624,8 +2644,11 @@ const loadTasks = async () => { // 保留子任务的其他字段 groupNo: item.groupNo, taskTypeId: item.taskTypeId, - score: item.score, + taskTypeName: item.taskTypeName, // 任务类型名称 + score: item.totalScore || item.score, // 预估积分 estimatedHours: item.estimatedHours, + quantity: item.quantity || 1, // 数量 + previewImage: item.previewImage, // 预览图 description: item.description || item.taskDescription })) allTasks = [...allTasks, ...items] @@ -4605,6 +4628,15 @@ onUnmounted(() => { color: $text-primary; margin: 0; flex: 1; + // 限制标题最多显示2行 + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + line-height: 1.4; + max-height: 2.8em; + word-break: break-all; } .badge {