v1.4.1 - 修复TaskList组件自定义列及数据绑定问题 & SonarQube安全弱点修复

This commit is contained in:
LINING-PC\lining
2025-10-26 23:14:18 +08:00
parent b3ba0f1ec9
commit 65059e1978
11 changed files with 110 additions and 65 deletions
+26 -26
View File
@@ -354,7 +354,7 @@ const optimizedTimelineData = computed(() => {
const currentDay = new Date(day.year, day.month - 1, day.day)
currentDay.setHours(0, 0, 0, 0)
const daysDiff = Math.floor(
(currentDay.getTime() - dayStart.getTime()) / (1000 * 60 * 60 * 24)
(currentDay.getTime() - dayStart.getTime()) / (1000 * 60 * 60 * 24),
)
const totalHourOffset = daysDiff * 24
@@ -455,7 +455,7 @@ const computeAllMilestonesPositions = () => {
if (!isNaN(milestoneDate.getTime())) {
const startDiff = Math.floor(
(milestoneDate.getTime() - timelineConfig.value.startDate.getTime()) /
(1000 * 60 * 60 * 24)
(1000 * 60 * 60 * 24),
)
const left = startDiff * 30 + 30 / 2 - 12 // 30是dayWidth12是图标半径
@@ -489,7 +489,7 @@ const computeAllMilestonesPositions = () => {
if (!isNaN(milestoneDate.getTime())) {
const startDiff = Math.floor(
(milestoneDate.getTime() - timelineConfig.value.startDate.getTime()) /
(1000 * 60 * 60 * 24)
(1000 * 60 * 60 * 24),
)
const left = startDiff * 30 + 30 / 2 - 12
@@ -592,7 +592,7 @@ const handleTaskRowHover = (taskId: number | null) => {
window.dispatchEvent(
new CustomEvent('timeline-task-hover', {
detail: taskId,
})
}),
)
}
@@ -644,7 +644,7 @@ const handleMilestoneIconChange = (milestoneId: number, icon: string) => {
window.dispatchEvent(
new CustomEvent('milestone-icon-changed', {
detail: { milestoneId, icon },
})
}),
)
}
@@ -662,7 +662,7 @@ const handleMilestoneSave = (updatedMilestone: Milestone) => {
window.dispatchEvent(
new CustomEvent('milestone-data-updated', {
detail: { milestone: updatedMilestone },
})
}),
)
}
@@ -675,14 +675,14 @@ const handleMilestoneDelete = (milestoneId: number) => {
window.dispatchEvent(
new CustomEvent('milestone-deleted', {
detail: { milestoneId },
})
}),
)
// 广播里程碑数据变化事件,确保Timeline重新渲染
window.dispatchEvent(
new CustomEvent('milestone-data-changed', {
detail: { milestoneId },
})
}),
)
}
@@ -697,7 +697,7 @@ const handleMilestoneUpdate = (updatedMilestone: Milestone) => {
window.dispatchEvent(
new CustomEvent('milestone-data-updated', {
detail: { milestone: updatedMilestone },
})
}),
)
}
@@ -1017,7 +1017,7 @@ watch(
clearTimelineCache()
timelineData.value = generateTimelineData()
}
}
},
)
// 保证每次时间轴数据变化后都自动居中今日(仅初始化和外部props变更时触发,不因任务/里程碑变更触发)
@@ -1032,7 +1032,7 @@ watch(
})
}
},
{ deep: true }
{ deep: true },
)
// 将今日定位到时间线中间位置
@@ -1057,13 +1057,13 @@ const scrollToTodayCenter = (retry = 0) => {
startNormalized = new Date(
yearRange.startDate.getFullYear(),
yearRange.startDate.getMonth(),
yearRange.startDate.getDate()
yearRange.startDate.getDate(),
)
} else {
startNormalized = new Date(
timelineStart.getFullYear(),
timelineStart.getMonth(),
timelineStart.getDate()
timelineStart.getDate(),
)
}
@@ -1136,7 +1136,7 @@ const scrollToTodayCenter = (retry = 0) => {
}
const dayOffset = Math.floor(
(todayNormalized.getTime() - startOfQuarter.getTime()) / (1000 * 60 * 60 * 24)
(todayNormalized.getTime() - startOfQuarter.getTime()) / (1000 * 60 * 60 * 24),
)
const daysInQuarter =
Math.floor((endOfQuarter.getTime() - startOfQuarter.getTime()) / (1000 * 60 * 60 * 24)) + 1
@@ -1193,7 +1193,7 @@ const getTodayLinePositionInYearView = computed(() => {
const startNormalized = new Date(
yearRange.startDate.getFullYear(),
yearRange.startDate.getMonth(),
yearRange.startDate.getDate()
yearRange.startDate.getDate(),
)
const startYear = startNormalized.getFullYear()
@@ -1287,7 +1287,7 @@ const scrollToToday = () => {
const startNormalized = new Date(
timelineStart.getFullYear(),
timelineStart.getMonth(),
timelineStart.getDate()
timelineStart.getDate(),
)
// 计算今天距离时间线开始日期的天数
@@ -1338,7 +1338,7 @@ const updateTask = (updatedTask: Task) => {
window.dispatchEvent(
new CustomEvent('task-updated', {
detail: updatedTask,
})
}),
)
}
@@ -1398,7 +1398,7 @@ const handleTaskBarContextMenu = (event: { task: Task; position: { x: number; y:
window.dispatchEvent(
new CustomEvent('context-menu', {
detail: event,
})
}),
)
}
@@ -1481,7 +1481,7 @@ onMounted(() => {
// 监听TaskList的垂直滚动事件
window.addEventListener(
'task-list-vertical-scroll',
handleTaskListVerticalScroll as EventListener
handleTaskListVerticalScroll as EventListener,
)
// 监听语言变化
window.addEventListener('locale-changed', handleLocaleChange as EventListener)
@@ -1491,7 +1491,7 @@ onMounted(() => {
// 监听Timeline容器resize事件(TaskList切换等)
window.addEventListener(
'timeline-container-resized',
handleTimelineContainerResized as EventListener
handleTimelineContainerResized as EventListener,
)
// 监听里程碑点击定位事件
@@ -1581,7 +1581,7 @@ const handleTimelineBodyScroll = (event: Event) => {
window.dispatchEvent(
new CustomEvent('timeline-vertical-scroll', {
detail: { scrollTop },
})
}),
)
}
}
@@ -1594,7 +1594,7 @@ watch(
updateSvgSize()
})
},
{ immediate: true }
{ immediate: true },
)
// 拖拽滑动相关状态
@@ -1778,7 +1778,7 @@ const startAutoScroll = (direction: 'left' | 'right') => {
window.dispatchEvent(
new CustomEvent('timeline-auto-scroll', {
detail: { scrollDelta: newScrollLeft - currentScrollLeft },
})
}),
)
autoScrollTimer = window.setTimeout(scroll, 16) // 约60fps
@@ -1832,14 +1832,14 @@ onUnmounted(() => {
window.removeEventListener('task-list-hover', handleTaskListHover as EventListener)
window.removeEventListener(
'task-list-vertical-scroll',
handleTaskListVerticalScroll as EventListener
handleTaskListVerticalScroll as EventListener,
)
window.removeEventListener('locale-changed', handleLocaleChange as EventListener)
window.removeEventListener('splitter-drag-start', handleSplitterDragStart as EventListener)
window.removeEventListener('splitter-drag-end', handleSplitterDragEnd as EventListener)
window.removeEventListener(
'timeline-container-resized',
handleTimelineContainerResized as EventListener
handleTimelineContainerResized as EventListener,
)
window.removeEventListener('milestone-click-locate', handleMilestoneClickLocate as EventListener)
window.removeEventListener('drag-boundary-check', handleDragBoundaryCheck as EventListener)
@@ -1950,7 +1950,7 @@ watch(
}
})
},
{ deep: true }
{ deep: true },
)
// 处理里程碑点击定位事件