From c66e2209b8003f47e77561bc599b190d0379aa47 Mon Sep 17 00:00:00 2001 From: "LINING-PC\\lining" Date: Wed, 24 Sep 2025 16:10:39 +0800 Subject: [PATCH] v1.3.2 - Bugfix; SonarQube Upgrades. --- src/components/DatePicker.vue | 6 ++-- src/components/MilestonePoint.vue | 32 +++++++++---------- src/components/TaskBar.vue | 44 +++++++++++++------------- src/components/TaskList.vue | 16 +++++----- src/components/TaskRow.vue | 2 +- src/components/Timeline.vue | 52 +++++++++++++++---------------- 6 files changed, 76 insertions(+), 76 deletions(-) diff --git a/src/components/DatePicker.vue b/src/components/DatePicker.vue index 407ab88..b788ced 100644 --- a/src/components/DatePicker.vue +++ b/src/components/DatePicker.vue @@ -168,7 +168,7 @@ watch( selectedTime.value = parsed.timeStr } }, - { immediate: true } + { immediate: true }, ) // 处理单日期输入变化(预留,当前版本不使用) @@ -297,7 +297,7 @@ const scrollToSelectedTime = () => { const containerHeight = 160 // el-time-column-list 的高度 const scrollTop = Math.max( 0, - selectedHourIndex * itemHeight - containerHeight / 2 + itemHeight / 2 + selectedHourIndex * itemHeight - containerHeight / 2 + itemHeight / 2, ) hourListRef.value.scrollTop = scrollTop } @@ -312,7 +312,7 @@ const scrollToSelectedTime = () => { const containerHeight = 160 const scrollTop = Math.max( 0, - selectedMinuteIndex * itemHeight - containerHeight / 2 + itemHeight / 2 + selectedMinuteIndex * itemHeight - containerHeight / 2 + itemHeight / 2, ) minuteListRef.value.scrollTop = scrollTop } diff --git a/src/components/MilestonePoint.vue b/src/components/MilestonePoint.vue index 6b6c859..20b5657 100644 --- a/src/components/MilestonePoint.vue +++ b/src/components/MilestonePoint.vue @@ -152,7 +152,7 @@ const handleMouseMove = (e: MouseEvent) => { mouseX: e.clientX, isDragging: isDragging.value, }, - }) + }), ) const deltaX = e.clientX - dragStartX.value @@ -179,7 +179,7 @@ const handleMouseUp = () => { mouseX: 0, isDragging: false, }, - }) + }), ) // 只有在真正拖拽了(有临时数据)且状态为拖拽中时才触发更新 @@ -241,7 +241,7 @@ const handleMilestoneClick = (e: MouseEvent) => { scrollLeft: targetScrollLeft, smooth: true, }, - }) + }), ) } } @@ -304,14 +304,14 @@ const milestoneStyle = computed(() => { const centerPosition = calculateMilestonePositionFromTimelineData( milestoneDate, props.timelineData, - props.currentTimeScale + props.currentTimeScale, ) left = centerPosition - size / 2 // 从中心位置偏移到图标左上角 } else { // 日视图:保持原有逻辑 const startDiff = Math.floor( - (milestoneDate.getTime() - props.startDate.getTime()) / (1000 * 60 * 60 * 24) + (milestoneDate.getTime() - props.startDate.getTime()) / (1000 * 60 * 60 * 24), ) left = startDiff * props.dayWidth + props.dayWidth / 2 - size / 2 } @@ -377,7 +377,7 @@ const milestoneVisibility = computed(() => { if (iconRight <= leftBoundary + iconSize / 2) { // 检查左侧是否有其他停靠的里程碑,需要判断推挤优先级 const leftStickyMilestones = otherMilestones.filter( - m => m.id !== currentId && m.stickyPosition === 'left' && m.isSticky + m => m.id !== currentId && m.stickyPosition === 'left' && m.isSticky, ) // 如果有其他里程碑已经停靠在左侧,比较优先级决定推挤顺序 @@ -423,7 +423,7 @@ const milestoneVisibility = computed(() => { if (iconLeft >= rightBoundary - iconSize / 2) { // 检查右侧是否有其他停靠的里程碑,需要判断推挤优先级 const rightStickyMilestones = otherMilestones.filter( - m => m.id !== currentId && m.stickyPosition === 'right' && m.isSticky + m => m.id !== currentId && m.stickyPosition === 'right' && m.isSticky, ) // 如果有其他里程碑已经停靠在右侧,比较优先级决定推挤顺序 @@ -581,13 +581,13 @@ const calculateYearViewMilestonePosition = (targetDate: Date, baseStartDate: Dat const daysInHalfYear = month <= 6 ? Math.floor( - (new Date(targetYear, 6, 1).getTime() - new Date(targetYear, 0, 1).getTime()) / - (1000 * 60 * 60 * 24) - ) + (new Date(targetYear, 6, 1).getTime() - new Date(targetYear, 0, 1).getTime()) / + (1000 * 60 * 60 * 24), + ) : Math.floor( - (new Date(targetYear + 1, 0, 1).getTime() - new Date(targetYear, 6, 1).getTime()) / - (1000 * 60 * 60 * 24) - ) + (new Date(targetYear + 1, 0, 1).getTime() - new Date(targetYear, 6, 1).getTime()) / + (1000 * 60 * 60 * 24), + ) const dayPositionInHalfYear = (dayOffset / daysInHalfYear) * halfYearWidth position += dayPositionInHalfYear @@ -601,12 +601,12 @@ const calculateHourViewMilestonePosition = (targetDate: Date, baseStartDate: Dat const targetNormalized = new Date( targetDate.getFullYear(), targetDate.getMonth(), - targetDate.getDate() + targetDate.getDate(), ) const baseNormalized = new Date( baseStartDate.getFullYear(), baseStartDate.getMonth(), - baseStartDate.getDate() + baseStartDate.getDate(), ) const timeDiff = targetNormalized.getTime() - baseNormalized.getTime() const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)) @@ -694,7 +694,7 @@ const calculateQuarterViewMilestonePosition = (targetDate: Date, baseStartDate: const calculateMilestonePositionFromTimelineData = ( targetDate: Date, timelineData: any, - timeScale: TimelineScale + timeScale: TimelineScale, ) => { // 回退到原来的逻辑用于其他时间刻度 let cumulativePosition = 0 diff --git a/src/components/TaskBar.vue b/src/components/TaskBar.vue index c7a93c0..d2eeb08 100644 --- a/src/components/TaskBar.vue +++ b/src/components/TaskBar.vue @@ -198,13 +198,13 @@ const taskBarStyle = computed(() => { const startDateOnly = new Date( startDate.getFullYear(), startDate.getMonth(), - startDate.getDate() + startDate.getDate(), ) const endDateOnly = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()) const baseStartOnly = new Date( baseStart.getFullYear(), baseStart.getMonth(), - baseStart.getDate() + baseStart.getDate(), ) if (props.currentTimeScale === TimelineScale.YEAR) { @@ -226,7 +226,7 @@ const taskBarStyle = computed(() => { const startPosition = calculatePositionFromTimelineData( startDateOnly, props.timelineData, - props.currentTimeScale + props.currentTimeScale, ) // 计算结束位置:为结束日期添加一天来获取正确的结束位置 const nextDay = new Date(endDateOnly) @@ -234,7 +234,7 @@ const taskBarStyle = computed(() => { let endPosition = calculatePositionFromTimelineData( nextDay, props.timelineData, - props.currentTimeScale + props.currentTimeScale, ) // 如果结束日期+1天超出范围,使用结束日期的位置+一天的宽度 @@ -249,7 +249,7 @@ const taskBarStyle = computed(() => { calculatePositionFromTimelineData( endDateOnly, props.timelineData, - props.currentTimeScale + props.currentTimeScale, ) + dayWidth } @@ -258,7 +258,7 @@ const taskBarStyle = computed(() => { } else { // 日视图:基于日期的简单计算 const startDiff = Math.floor( - (startDateOnly.getTime() - baseStartOnly.getTime()) / (1000 * 60 * 60 * 24) + (startDateOnly.getTime() - baseStartOnly.getTime()) / (1000 * 60 * 60 * 24), ) // 计算持续天数(基于日期,忽略时间) @@ -437,7 +437,7 @@ const handleMouseMove = (e: MouseEvent) => { mouseX: e.clientX, isDragging: isDragging.value || isResizingLeft.value || isResizingRight.value, }, - }) + }), ) if (isDragging.value) { @@ -560,7 +560,7 @@ const handleMouseMove = (e: MouseEvent) => { const newDurationDays = newWidth / props.dayWidth const newEndDate = addDaysToLocalDate( props.startDate, - resizeStartLeft.value / props.dayWidth + newDurationDays - 1 + resizeStartLeft.value / props.dayWidth + newDurationDays - 1, ) // 只更新临时数据,不触发事件 @@ -580,7 +580,7 @@ const handleMouseUp = () => { mouseX: 0, isDragging: false, }, - }) + }), ) // 如果有临时数据,说明发生了拖拽或拉伸,提交数据更新 @@ -661,7 +661,7 @@ watch( reportBarPosition() }) }, - { deep: true } + { deep: true }, ) // 处理TaskBar双击事件 @@ -951,7 +951,7 @@ watch( } }, 200) } - } + }, ) // 监听外部hideBubbles属性变化,确保Timeline的容器变化能及时反应 @@ -964,7 +964,7 @@ watch( // 强制重新计算bubbleIndicator,确保容器宽度变化后正确显示半圆 }) } - } + }, ) // 监听TaskBar可见性变化,只在滚动时实现重新出现动画 @@ -973,7 +973,7 @@ watch( () => { // TaskBar重新出现时,不需要动画效果 // 半圆会自然消失,TaskBar会立即显示 - } + }, ) // 监听页面缩放和大小变化,重新计算气泡位置 @@ -1133,13 +1133,13 @@ const calculateYearViewPosition = (targetDate: Date, baseStartDate: Date): numbe const daysInHalfYear = month <= 6 ? Math.floor( - (new Date(targetYear, 6, 1).getTime() - new Date(targetYear, 0, 1).getTime()) / - (1000 * 60 * 60 * 24) - ) + (new Date(targetYear, 6, 1).getTime() - new Date(targetYear, 0, 1).getTime()) / + (1000 * 60 * 60 * 24), + ) : Math.floor( - (new Date(targetYear + 1, 0, 1).getTime() - new Date(targetYear, 6, 1).getTime()) / - (1000 * 60 * 60 * 24) - ) + (new Date(targetYear + 1, 0, 1).getTime() - new Date(targetYear, 6, 1).getTime()) / + (1000 * 60 * 60 * 24), + ) const dayPositionInHalfYear = (dayOffset / daysInHalfYear) * halfYearWidth position += dayPositionInHalfYear @@ -1163,7 +1163,7 @@ const calculatePositionFromTimelineData = ( subDays: Array<{ date: Date; dayOfWeek?: number }> }> }>, - timeScale: TimelineScale + timeScale: TimelineScale, ) => { let cumulativePosition = 0 @@ -1181,11 +1181,11 @@ const calculatePositionFromTimelineData = ( // 找到目标日期所在的季度 const quarterWidth = 60 const daysInQuarter = Math.ceil( - (quarterEnd.getTime() - quarterStart.getTime()) / (1000 * 60 * 60 * 24) + (quarterEnd.getTime() - quarterStart.getTime()) / (1000 * 60 * 60 * 24), ) const dayWidth = quarterWidth / daysInQuarter const dayInQuarter = Math.ceil( - (targetDate.getTime() - quarterStart.getTime()) / (1000 * 60 * 60 * 24) + (targetDate.getTime() - quarterStart.getTime()) / (1000 * 60 * 60 * 24), ) return cumulativePosition + dayInQuarter * dayWidth } diff --git a/src/components/TaskList.vue b/src/components/TaskList.vue index a429678..9488970 100644 --- a/src/components/TaskList.vue +++ b/src/components/TaskList.vue @@ -61,7 +61,7 @@ const handleTaskRowHover = (taskId: number | null) => { window.dispatchEvent( new CustomEvent('task-list-hover', { detail: taskId, - }) + }), ) } @@ -85,14 +85,14 @@ const handleTaskRowDoubleClick = (task: Task) => { window.dispatchEvent( new CustomEvent('task-row-double-click', { detail: task, - }) + }), ) } } // 计算父级任务的进度和日期范围 const calculateParentTaskData = ( - task: Task + task: Task, ): { progress: number; startDate: string; endDate: string } => { if (!task.children || task.children.length === 0) { return { @@ -198,7 +198,7 @@ watch( // 更新父级任务数据 updateParentTasksData() }, - { immediate: true, deep: true } + { immediate: true, deep: true }, ) function toggleCollapse(task: Task) { @@ -258,7 +258,7 @@ const handleRequestTaskList = () => { window.dispatchEvent( new CustomEvent('task-list-updated', { detail: allTasks, - }) + }), ) } @@ -297,7 +297,7 @@ const handleTaskListScroll = (event: Event) => { window.dispatchEvent( new CustomEvent('task-list-vertical-scroll', { detail: { scrollTop }, - }) + }), ) } @@ -319,7 +319,7 @@ const handleTaskRowContextMenu = (event: { task: Task; position: { x: number; y: window.dispatchEvent( new CustomEvent('context-menu', { detail: event, - }) + }), ) } catch (error) { console.error('TaskList - Failed to dispatch context-menu event', error) @@ -371,7 +371,7 @@ onUnmounted(() => { window.removeEventListener('timeline-task-hover', handleTimelineHover as EventListener) window.removeEventListener( 'timeline-vertical-scroll', - handleTimelineVerticalScroll as EventListener + handleTimelineVerticalScroll as EventListener, ) window.removeEventListener('milestone-icon-changed', handleMilestoneIconChange as EventListener) window.removeEventListener('splitter-drag-start', handleSplitterDragStart as EventListener) diff --git a/src/components/TaskRow.vue b/src/components/TaskRow.vue index 9ac5838..b960829 100644 --- a/src/components/TaskRow.vue +++ b/src/components/TaskRow.vue @@ -186,7 +186,7 @@ watch( updateTimer() } }, - { immediate: true } + { immediate: true }, ) // 右键菜单相关状态 diff --git a/src/components/Timeline.vue b/src/components/Timeline.vue index 62a7634..0e8ed34 100644 --- a/src/components/Timeline.vue +++ b/src/components/Timeline.vue @@ -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是dayWidth,12是图标半径 @@ -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 }, - }) + }), ) } @@ -997,7 +997,7 @@ watch( clearTimelineCache() timelineData.value = generateTimelineData() } - } + }, ) // 保证每次时间轴数据变化后都自动居中今日(仅初始化和外部props变更时触发,不因任务/里程碑变更触发) @@ -1012,7 +1012,7 @@ watch( }) } }, - { deep: true } + { deep: true }, ) // 将今日定位到时间线中间位置 @@ -1037,13 +1037,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(), ) } @@ -1116,7 +1116,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 @@ -1173,7 +1173,7 @@ const getTodayLinePositionInYearView = computed(() => { const startNormalized = new Date( yearRange.startDate.getFullYear(), yearRange.startDate.getMonth(), - yearRange.startDate.getDate() + yearRange.startDate.getDate(), ) const startYear = startNormalized.getFullYear() @@ -1267,7 +1267,7 @@ const scrollToToday = () => { const startNormalized = new Date( timelineStart.getFullYear(), timelineStart.getMonth(), - timelineStart.getDate() + timelineStart.getDate(), ) // 计算今天距离时间线开始日期的天数 @@ -1318,7 +1318,7 @@ const updateTask = (updatedTask: Task) => { window.dispatchEvent( new CustomEvent('task-updated', { detail: updatedTask, - }) + }), ) } @@ -1378,7 +1378,7 @@ const handleTaskBarContextMenu = (event: { task: Task; position: { x: number; y: window.dispatchEvent( new CustomEvent('context-menu', { detail: event, - }) + }), ) } @@ -1461,7 +1461,7 @@ onMounted(() => { // 监听TaskList的垂直滚动事件 window.addEventListener( 'task-list-vertical-scroll', - handleTaskListVerticalScroll as EventListener + handleTaskListVerticalScroll as EventListener, ) // 监听语言变化 window.addEventListener('locale-changed', handleLocaleChange as EventListener) @@ -1471,7 +1471,7 @@ onMounted(() => { // 监听Timeline容器resize事件(TaskList切换等) window.addEventListener( 'timeline-container-resized', - handleTimelineContainerResized as EventListener + handleTimelineContainerResized as EventListener, ) // 监听里程碑点击定位事件 @@ -1561,7 +1561,7 @@ const handleTimelineBodyScroll = (event: Event) => { window.dispatchEvent( new CustomEvent('timeline-vertical-scroll', { detail: { scrollTop }, - }) + }), ) } } @@ -1574,7 +1574,7 @@ watch( updateSvgSize() }) }, - { immediate: true } + { immediate: true }, ) // 拖拽滑动相关状态 @@ -1758,7 +1758,7 @@ const startAutoScroll = (direction: 'left' | 'right') => { window.dispatchEvent( new CustomEvent('timeline-auto-scroll', { detail: { scrollDelta: newScrollLeft - currentScrollLeft }, - }) + }), ) autoScrollTimer = window.setTimeout(scroll, 16) // 约60fps @@ -1812,14 +1812,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) @@ -1930,7 +1930,7 @@ watch( } }) }, - { deep: true } + { deep: true }, ) // 处理里程碑点击定位事件