@@ -9,6 +9,7 @@ import { formatPredecessorDisplay } from '../utils/predecessorUtils'
99import jsPDF from ' jspdf'
1010import html2canvas from ' html2canvas'
1111import type { Task } from ' ../models/classes/Task'
12+ import type { Milestone } from ' ../models/classes/Milestone'
1213import type { ToolbarConfig } from ' ../models/configs/ToolbarConfig'
1314import { TimelineScale } from ' ../models/types/TimelineScale'
1415import { useMessage } from ' ../composables/useMessage'
@@ -604,6 +605,25 @@ const tasksForTimeline = computed(() => {
604605 return result
605606})
606607
608+ // 将Task[]转换为Milestone[]的计算属性,确保类型兼容
609+ const milestonesForTimeline = computed ((): Milestone [] => {
610+ if (! props .milestones ) return []
611+
612+ // 过滤出有startDate的里程碑,并转换为Milestone类型
613+ return props .milestones
614+ .filter ((task ): task is Task & { startDate: string } => !! task .startDate )
615+ .map (task => ({
616+ id: task .id ,
617+ name: task .name ,
618+ startDate: task .startDate , // 此时已确保非空
619+ endDate: task .endDate ,
620+ assignee: task .assignee ,
621+ type: task .type || ' milestone' ,
622+ icon: task .icon ,
623+ description: task .description ,
624+ }))
625+ })
626+
607627// 计算所有任务和里程碑的最小开始时间和最大结束时间
608628const timelineDateRange = computed (() => {
609629 // 扁平化所有任务和子任务
@@ -1549,7 +1569,7 @@ function handleTaskDelete(task: Task, deleteChildren?: boolean) {
15491569 <Timeline
15501570 ref =" timelineRef"
15511571 :tasks =" tasksForTimeline"
1552- :milestones =" props.milestones "
1572+ :milestones =" milestonesForTimeline "
15531573 :start-date =" timelineDateRange.min"
15541574 :end-date =" timelineDateRange.max"
15551575 :working-hours =" props.workingHours"
0 commit comments