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 {