feat: 在任务详情中显示进行中任务的完成截止时间
- 在任务详情抽屉的基本信息部分添加完成截止时间字段 - 添加getTaskDeadline函数计算任务的完成截止时间 - 流水线任务:从接单时间开始 + 所有子任务预估工时总和 - 普通任务:从接单时间开始 + 任务预估工时 - 添加isTaskDeadlineOverdue函数判断截止时间是否过期 - 优先使用后端返回的deadline字段,如果没有则前端计算
This commit is contained in:
parent
b589b8d77c
commit
01d9468e6f
@ -2096,6 +2096,11 @@
|
||||
<a-descriptions-item label="预估积分">{{ selectedTask.score }} 分</a-descriptions-item>
|
||||
<a-descriptions-item label="时效要求">{{ formatEstimatedTime(selectedTask.estimatedHours) }}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="!selectedTask.isSubTask" label="数量">{{ selectedTask.quantity || '--' }} 个</a-descriptions-item>
|
||||
<a-descriptions-item v-if="selectedTask.status === 'in_progress' && getTaskDeadline(selectedTask)" label="完成截止时间">
|
||||
<span :class="{ 'text-error': isTaskDeadlineOverdue(selectedTask) }">
|
||||
{{ formatTime(getTaskDeadline(selectedTask) || undefined) }}
|
||||
</span>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</div>
|
||||
|
||||
@ -2924,6 +2929,49 @@ const getSubTaskDeadline = (subTask: any) => {
|
||||
return dayjs(subTask.deadline).format('MM月DD日HH时')
|
||||
}
|
||||
|
||||
// 获取任务完成截止时间(用于进行中的任务)
|
||||
// 计算方式:从任务接单开始 + 子任务耗时(流水线任务)或任务耗时(普通任务)
|
||||
const getTaskDeadline = (task: any): string | null => {
|
||||
if (!task || task.status !== 'in_progress') return null
|
||||
|
||||
// 优先使用后端返回的deadline字段(如果存在且有效)
|
||||
if (task.deadline) {
|
||||
return task.deadline
|
||||
}
|
||||
|
||||
// 如果没有deadline,尝试计算(流水线任务:从接单时间开始 + 所有子任务预估工时;普通任务:从接单时间开始 + 任务预估工时)
|
||||
if (task.startTime) {
|
||||
let totalHours = 0
|
||||
|
||||
// 流水线任务:累加所有子任务的预估工时
|
||||
if (task.isPipeline === 1 && task.subTasks && task.subTasks.length > 0) {
|
||||
totalHours = task.subTasks.reduce((sum: number, subTask: any) => {
|
||||
return sum + (subTask.estimatedHours || 0)
|
||||
}, 0)
|
||||
} else if (task.estimatedHours) {
|
||||
// 普通任务:使用任务的预估工时
|
||||
totalHours = task.estimatedHours
|
||||
}
|
||||
|
||||
if (totalHours > 0) {
|
||||
// 简单计算:接单时间 + 预估工时(小时)
|
||||
// 注意:这是简化计算,不考虑工作时间配置,最准确的应该使用后端计算的deadline
|
||||
const startTime = dayjs(task.startTime)
|
||||
const deadline = startTime.add(totalHours, 'hour')
|
||||
return deadline.format('YYYY-MM-DD HH:mm:ss')
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
// 判断任务截止时间是否已过期
|
||||
const isTaskDeadlineOverdue = (task: any): boolean => {
|
||||
const deadline = getTaskDeadline(task)
|
||||
if (!deadline) return false
|
||||
return dayjs().isAfter(dayjs(deadline))
|
||||
}
|
||||
|
||||
// 展开/折叠任务子任务详情
|
||||
const expandedTaskSubtasks = ref<Record<number, boolean>>({})
|
||||
const toggleTaskSubtasks = (taskId: number) => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user