diff --git a/CHANGELOG.md b/CHANGELOG.md index 846afb6..e7007d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,8 +19,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - 🔧 修复:仅删除Story层级后,子Task升级后关系线丢失问题 +- 🔧 修复:Task拖方后数据的Bug - 🔧 修复:修复已知问题 - 🔧 Fixed: Issue of missing relationship lines after upgrading child Tasks when only deleting Story +- 🔧 Fixed: Bug in Task data after dragging and dropping - 🔧 Fixed: Fixed issues ## [1.5.0] - 2025-12-13 diff --git a/demo/App.vue b/demo/App.vue index a58193b..6902cbe 100644 --- a/demo/App.vue +++ b/demo/App.vue @@ -511,6 +511,8 @@ const handleTaskUpdateEvent = (e: { task: Task }) => { // 任务添加事件处理器 const handleTaskAddEvent = (e: { task: Task }) => { + // 打印全部的tasks + console.log('当前所有任务:', tasks.value) const newTask = e.task showMessage(`Demo 任务[${newTask.name}] 已创建`, 'success') diff --git a/demo/public/sitemap.xml b/demo/public/sitemap.xml index c6f47ee..2ec312f 100644 --- a/demo/public/sitemap.xml +++ b/demo/public/sitemap.xml @@ -2,8 +2,8 @@ https://nelson820125.github.io/jordium-gantt-vue3/ - 2025-12-11 + 2025-12-14 weekly - 1.0 + 1.6.0 diff --git a/demo/version-history.json b/demo/version-history.json index fa892e3..8b453eb 100644 --- a/demo/version-history.json +++ b/demo/version-history.json @@ -388,6 +388,7 @@ "🎉 新增:Task List行样式设置属性 - task-list-row-class-name和task-list-row-style", "🎉 新增:为兼容旧版本TaskListColumnConfig,提供task-list-column-render-mode属性开关,可以通过设置选择Task表格列定义方式", "🔧 修复:仅删除Story层级后,子Task升级后关系线丢失问题", + "🔧 修复:Task拖方后数据的Bug", "🔧 修复:修复已知问题", "特别感谢 osc_85545913@gitee的使用及反馈", "🎉 Added: Declarative definition method for Task Table columns using the TaskListColumn component", @@ -395,6 +396,7 @@ "🎉 Added: Task List row style setting properties - task-list-row-class-name and task-list-row-style", "🎉 Added: A switch for task-list-column-render-mode attribute to choose Task Table column definition method for compatibility with older versions of TaskListColumnConfig", "🔧 Fixed: Issue of missing relationship lines after upgrading child Tasks when only deleting Story", + "🔧 Fixed: Bug in Task data after dragging and dropping", "🔧 Fixed: Fixed issues", "Special thanks to osc_85545913@gitee for their use and feedback" ] diff --git a/npm-demo/src/components/GanttTest.vue b/npm-demo/src/components/GanttTest.vue index 5d6dc1a..1206686 100644 --- a/npm-demo/src/components/GanttTest.vue +++ b/npm-demo/src/components/GanttTest.vue @@ -1,6 +1,6 @@ - + @@ -400,23 +413,23 @@ const onTaskAdded = (res) => { transition: all 0.3s; } -.gantt-btn-primary { +.btn-primary { background: #409eff; color: white; border-color: #409eff; } -.gantt-btn-primary:hover { +.btn-primary:hover { background: #66b1ff; border-color: #66b1ff; } -.gantt-btn-default { +.btn-default { background: white; color: #606266; } -.gantt-btn-default:hover { +.btn-default:hover { color: #409eff; border-color: #409eff; } @@ -431,4 +444,4 @@ const onTaskAdded = (res) => { from { transform: translateX(100%); } to { transform: translateX(0); } } - + \ No newline at end of file diff --git a/src/components/GanttChart.vue b/src/components/GanttChart.vue index 1e6142f..2d7d5e7 100644 --- a/src/components/GanttChart.vue +++ b/src/components/GanttChart.vue @@ -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, + }) } // 全部折叠任务 diff --git a/src/components/TaskList.vue b/src/components/TaskList.vue index 37c2436..0a07f41 100644 --- a/src/components/TaskList.vue +++ b/src/components/TaskList.vue @@ -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 计算 }) }