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
+2
View File
@@ -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
+2
View File
@@ -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')
+2 -2
View File
@@ -2,8 +2,8 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://nelson820125.github.io/jordium-gantt-vue3/</loc>
<lastmod>2025-12-11</lastmod>
<lastmod>2025-12-14</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
<priority>1.6.0</priority>
</url>
</urlset>
+2
View File
@@ -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",
"🔧 修复:修复已知问题",
"<span style=\"font-weight: bold; color: #f00;\">特别感谢 osc_85545913@gitee的使用及反馈</span>",
"🎉 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",
"<span style=\"font-weight: bold; color: #f00;\">Special thanks to osc_85545913@gitee for their use and feedback</span>"
]
+39 -26
View File
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { ref } from 'vue'
import { GanttChart } from 'jordium-gantt-vue3'
import { GanttChart, TaskListColumn } from 'jordium-gantt-vue3'
import 'jordium-gantt-vue3/dist/assets/jordium-gantt-vue3.css'
const tasks = ref([
@@ -123,8 +123,9 @@ const addMilestone = () => {
startDate: newTask.value.startDate,
progress: 0,
type: 'milestone',
icon: 'diamond',
icon: 'diamond'
});
console.log('milestones: ', milestones.value)
newTask.value = { name: '', startDate: '', endDate: '' };
showAddMilestoneDialog.value = false;
}
@@ -152,47 +153,48 @@ const handleTaskRowMoved = async (payload: {
// parentIdTaskList/Timeline
//
// 1.
const oldParentName = oldParent?.name || '根目录'
const newParentName = newParent?.name || '根目录'
const positionText = position === 'after' ? '在目标任务之后' : '作为目标任务的子任务'
alert(`任务 [${draggedTask.name}] 已从 [${oldParentName}] 移动到 [${newParentName}] (${positionText})`, 'success')
// 2. API
// 1. API
// API
/*
try {
await api.updateTaskHierarchy({
await fetch('/api/tasks/update-hierarchy', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
taskId: draggedTask.id,
targetTaskId: targetTask.id,
position: position,
oldParentId: oldParent?.id,
newParentId: newParent?.id,
})
})
console.log('任务层级保存成功')
} catch (error) {
console.error('保存任务层级失败:', error)
alert('保存失败,请刷新页面')
}
*/
// 3.
// ...
}
//
// use-default-drawer="true"tasks
// assigneeassigneeName
const onTaskAdded = (res) => {
//
const addedTask = tasks.value.find(t => t.id === res.task.id);
if (addedTask) {
// 使addedTask.assigneeassigneeOptionslabel
if (addedTask && addedTask.assignee) {
// assigneelabelassigneeName
const assigneeOption = assigneeOptions.value.find(option => option.value === addedTask.assignee);
if (assigneeOption) {
addedTask.assigneeName = assigneeOption.label;
}
} else {
// 使addedTask.assigneeassigneeOptionslabel
const assigneeOption = assigneeOptions.value.find(option => option.value === res.task.assignee);
if (assigneeOption) {
res.task.assigneeName = assigneeOption.label;
}
tasks.value.push(res.task);
}
// push
};
</script>
@@ -204,12 +206,13 @@ const onTaskAdded = (res) => {
:milestones="milestones"
:task-list-config="taskListConfig"
:toolbar-config="toolbarConfig"
:use-default-drawer="false"
:use-default-drawer="true"
:use-default-milestone-dialog="false"
:locale-messages="customMessages"
:allow-drag-and-resize="true"
:enable-task-row-move="true"
:assignee-options="assigneeOptions"
task-list-column-render-mode="declarative"
@task-row-moved="handleTaskRowMoved"
@add-milestone="showAddMilestoneDialog = true"
@task-double-click="onTaskDblclick"
@@ -217,6 +220,16 @@ const onTaskAdded = (res) => {
@milestone-double-click="onMilestoneDblclick"
@task-added="onTaskAdded"
>
<TaskListColumn prop="name" label="任务名称" width="300">
<template #header>
<strong style="color: #1890ff;">任务名称 (自定义Header)</strong>
</template>
<template #default="scope">
<span style="color: #52c41a;">{{ scope.row.name }}</span>
</template>
</TaskListColumn>
<TaskListColumn prop="startDate" label="开始时间" width="250" />
<TaskListColumn prop="endDate" label="结束时间" width="250" />
</GanttChart>
</div>
<!-- 自定义添加任务按钮 -->
@@ -251,8 +264,8 @@ const onTaskAdded = (res) => {
</div>
<div class="drawer-footer">
<button class="gantt-btn gantt-btn-primary" @click="addTask">确定</button>
<button class="gantt-btn gantt-btn-default" @click="showAddTaskDrawer = false">取消</button>
<button class="btn btn-primary" @click="addTask">确定</button>
<button class="btn btn-default" @click="showAddTaskDrawer = false">取消</button>
</div>
</div>
</div>
@@ -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;
}
+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
}) => {
// TaskListprops.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,
})
}
//
+5 -20
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 GanttChart GanttChart tasks
//
emit('task-row-moved', {
draggedTask: result.movedTask,
draggedTask,
targetTask,
position,
oldParent: result.oldParent,
newParent: result.newParent,
})
oldParent: null, // GanttChart
newParent: null, // GanttChart
})
}