style:甘特图样式修改

pull/1/head
黄伟杰 1 month ago
parent 95b81fce39
commit 062bdce1df

@ -89,6 +89,20 @@ const formatGanttDate = (value: unknown) => {
return date.format('YYYY-MM-DD HH:mm')
}
const getDeviceTaskRangeByChildren = (planTasks: any[]) => {
const starts = planTasks.map((item: any) => dayjs(item?.start_date)).filter((item: any) => item.isValid())
const ends = planTasks.map((item: any) => dayjs(item?.end_date)).filter((item: any) => item.isValid())
if (!starts.length || !ends.length) return undefined
const earliestStart = starts.reduce((min: any, current: any) => (current.valueOf() < min.valueOf() ? current : min))
const latestEnd = ends.reduce((max: any, current: any) => (current.valueOf() > max.valueOf() ? current : max))
const duration = Math.max(latestEnd.endOf('day').diff(earliestStart.startOf('day'), 'day') + 1, 1)
return {
start_date: earliestStart.toDate(),
end_date: latestEnd.toDate(),
duration
}
}
const buildPreviewGanttData = (scheduleList: any[]) => {
const tasks: any[] = []
const links: any[] = []
@ -105,19 +119,23 @@ const buildPreviewGanttData = (scheduleList: any[]) => {
.filter((plan: any) => plan._start.isValid() && plan._end.isValid())
.sort((a: any, b: any) => a._start.valueOf() - b._start.valueOf())
const firstPlan = validPlans[0]
const lastPlan = validPlans[validPlans.length - 1]
const parentDuration =
firstPlan && lastPlan ? Math.max(lastPlan._end.endOf('day').diff(firstPlan._start.startOf('day'), 'day') + 1, 1) : 1
const deviceRange = getDeviceTaskRangeByChildren(
validPlans.map((item: any) => ({
start_date: item?._start,
end_date: item?._end
}))
)
tasks.push({
id: deviceId,
text: `${device.deviceName ?? '-'}`,
start_date: formatGanttDate(firstPlan?._start),
end_date: formatGanttDate(lastPlan?._end),
duration: parentDuration,
start_date: formatGanttDate(deviceRange?.start_date ?? firstPlan?._start),
end_date: formatGanttDate(deviceRange?.end_date ?? firstPlan?._end),
duration: deviceRange?.duration ?? 1,
parent: 0,
progress: 0,
open: true,
readonly: true,
deviceName: device.deviceName ?? '-',
_deviceData: device
})
@ -181,6 +199,23 @@ const syncPlanTimeFromTask = (task: any) => {
activePreviewDevice.value = task._deviceData
}
const syncDeviceTaskRangeFromChildren = (task: any) => {
if (!task?._planData) return
const deviceTaskId = task.parent
if (!deviceTaskId) return
const childTaskIds = gantt.getChildren(deviceTaskId)
if (!Array.isArray(childTaskIds) || !childTaskIds.length) return
const childTasks = childTaskIds.map((childId: string | number) => gantt.getTask(childId)).filter((item: any) => item?._planData)
if (!childTasks.length) return
const deviceRange = getDeviceTaskRangeByChildren(childTasks)
if (!deviceRange) return
const deviceTask = gantt.getTask(deviceTaskId)
deviceTask.start_date = deviceRange.start_date
deviceTask.end_date = deviceRange.end_date
deviceTask.duration = deviceRange.duration
gantt.updateTask(deviceTaskId)
}
const refreshTimelineRangeByTasks = () => {
let minStart = Number.POSITIVE_INFINITY
let maxEnd = Number.NEGATIVE_INFINITY
@ -318,18 +353,28 @@ const initGanttPreview = () => {
return true
})
const beforeDragEventId = gantt.attachEvent('onBeforeTaskDrag', (id) => {
const task = gantt.getTask(id)
if (!task?._planData) return false
return String(task?._planData?.sourceType ?? '').toUpperCase() === 'CURRENT'
})
const dragEventId = gantt.attachEvent('onAfterTaskDrag', (id) => {
syncPlanTimeFromTask(gantt.getTask(id))
const task = gantt.getTask(id)
syncPlanTimeFromTask(task)
syncDeviceTaskRangeFromChildren(task)
refreshTimelineRangeByTasks()
})
const updateEventId = gantt.attachEvent('onAfterTaskUpdate', (id) => {
syncPlanTimeFromTask(gantt.getTask(id))
const task = gantt.getTask(id)
syncPlanTimeFromTask(task)
syncDeviceTaskRangeFromChildren(task)
refreshTimelineRangeByTasks()
gantt.refreshTask(id)
})
ganttEventIds.value.push(clickEventId, dragEventId, updateEventId)
ganttEventIds.value.push(clickEventId, beforeDragEventId, dragEventId, updateEventId)
}
const handlePreviewSave = async () => {

Loading…
Cancel
Save