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 {