fix: 优化任务卡片显示 - 标题排版、任务类型、时效要求、预览图

This commit is contained in:
Your Name 2026-01-06 21:14:40 +08:00
parent 3f989e49db
commit 6e3095c6b1

View File

@ -244,15 +244,15 @@
<div class="task-info">
<div class="info-item">
<span class="label">任务类型</span>
<span class="value">{{ getTaskTypeName(task.taskTypeId) }}</span>
<span class="value">{{ getTaskTypeName(task.taskTypeId, task.taskTypeName) }}</span>
</div>
<div class="info-item">
<span class="label">预估积分</span>
<span class="value text-brand">{{ task.score }} 分</span>
<span class="value text-brand">{{ task.score || '--' }} 分</span>
</div>
<div class="info-item">
<span class="label">数量</span>
<span class="value">{{ task.quantity || '--' }} 个</span>
<span class="value">{{ task.quantity || 1 }} 个</span>
</div>
</div>
@ -309,7 +309,7 @@
<span class="icon">
<Icon name="clock" size="sm" color="#31f08b" />
</span>
<span>截止: {{ formatDeadline(task.deadline) }}</span>
<span>时效要求: {{ formatEstimatedTime(task.estimatedHours) }}</span>
</div>
<div class="detail-item">
<span class="icon">
@ -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 {