fix: 优化任务卡片显示 - 标题排版、任务类型、时效要求、预览图
This commit is contained in:
parent
3f989e49db
commit
6e3095c6b1
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user