From 992cbcf4f4804f9ca64a6b55430c04e82f6b491e Mon Sep 17 00:00:00 2001 From: "LINING-PC\\lining" Date: Fri, 12 Sep 2025 17:10:18 +0800 Subject: [PATCH] v1.3.0 - bugfix --- src/components/GanttChart.vue | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/components/GanttChart.vue b/src/components/GanttChart.vue index efd5a7b..6037452 100644 --- a/src/components/GanttChart.vue +++ b/src/components/GanttChart.vue @@ -9,6 +9,7 @@ import { formatPredecessorDisplay } from '../utils/predecessorUtils' import jsPDF from 'jspdf' import html2canvas from 'html2canvas' import type { Task } from '../models/classes/Task' +import type { Milestone } from '../models/classes/Milestone' import type { ToolbarConfig } from '../models/configs/ToolbarConfig' import { TimelineScale } from '../models/types/TimelineScale' import { useMessage } from '../composables/useMessage' @@ -604,6 +605,25 @@ const tasksForTimeline = computed(() => { return result }) +// 将Task[]转换为Milestone[]的计算属性,确保类型兼容 +const milestonesForTimeline = computed((): Milestone[] => { + if (!props.milestones) return [] + + // 过滤出有startDate的里程碑,并转换为Milestone类型 + return props.milestones + .filter((task): task is Task & { startDate: string } => !!task.startDate) + .map(task => ({ + id: task.id, + name: task.name, + startDate: task.startDate, // 此时已确保非空 + endDate: task.endDate, + assignee: task.assignee, + type: task.type || 'milestone', + icon: task.icon, + description: task.description, + })) +}) + // 计算所有任务和里程碑的最小开始时间和最大结束时间 const timelineDateRange = computed(() => { // 扁平化所有任务和子任务 @@ -1549,7 +1569,7 @@ function handleTaskDelete(task: Task, deleteChildren?: boolean) {