v1.6.0 - bugfix Task拖放功能

This commit is contained in:
LINING-PC\lining
2025-12-14 21:43:06 +08:00
parent 9a3bdad65b
commit 141919fb5c
7 changed files with 103 additions and 74 deletions
+28 -3
View File
@@ -8,6 +8,7 @@ import TaskDrawer from './TaskDrawer.vue'
import MilestoneDialog from './MilestoneDialog.vue'
import { useI18n, setCustomMessages } from '../composables/useI18n'
import { formatPredecessorDisplay } from '../utils/predecessorUtils'
import { moveTask, findTaskParent } from '../utils/taskTreeUtils'
import jsPDF from 'jspdf'
import html2canvas from 'html2canvas'
import type { Task } from '../models/classes/Task'
@@ -641,12 +642,36 @@ const handleTaskRowMoved = (payload: {
oldParent: Task | null
newParent: Task | null
}) => {
// TaskList已经通过对象引用直接修改了props.tasks的内容
// 但computed不会因为对象内部变化而重新计算,需要手动触发
const { draggedTask, targetTask, position } = payload
if (!props.tasks) return
// 在 GanttChart 层面执行移动操作,直接修改原始 props.tasks
// 这样确保修改的是正确的数据源,而不是计算属性的临时结果
const result = moveTask(props.tasks, draggedTask.id, targetTask.id, position)
if (!result) {
return
}
// 强制触发计算属性重新计算
updateTaskTrigger.value++
// 通知 TaskList 更新父级任务数据
nextTick(() => {
window.dispatchEvent(new CustomEvent('task-updated', {
detail: result.movedTask
}))
})
// 向外传递事件,让外部组件进行额外处理(完全可选)
emit('task-row-moved', payload)
emit('task-row-moved', {
draggedTask: result.movedTask,
targetTask,
position,
oldParent: result.oldParent,
newParent: result.newParent,
})
}
// 全部折叠任务
+8 -23
View File
@@ -523,29 +523,14 @@ const handleTaskRowMoved = (payload: {
if (!props.tasks) return
// 执行移动操作(直接修改 props.tasks 对象,保持引用不变)
const result = moveTask(props.tasks, draggedTask.id, targetTask.id, position)
if (!result) {
return
}
// moveTask 已直接修改了 props.tasks,无需手动 splice
// 强制触发下一次更新,确保视图刷新
nextTick(() => {
// 更新父级任务数据(重新计算进度和日期)
updateParentTasksData()
// 触发事件,通知外部组件(可选)
// 外部可以监听此事件进行额外处理,如调用API保存、显示提示等
// 但不需要更新 tasks,组件已自动完成
emit('task-row-moved', {
draggedTask: result.movedTask,
targetTask,
position,
oldParent: result.oldParent,
newParent: result.newParent,
})
// 直接 emit 事件给父组件(GanttChart)处理,由 GanttChart 修改原始 tasks 数据
// 这样可以确保修改的是正确的数据源,避免修改计算属性的临时结果
emit('task-row-moved', {
draggedTask,
targetTask,
position,
oldParent: null, // 将由 GanttChart 计算
newParent: null, // 将由 GanttChart 计算
})
}