v1.6.0 - bugfix Task拖放功能
This commit is contained in:
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
// 全部折叠任务
|
||||
|
||||
@@ -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 计算
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user