beta 1.0.0 - 正式外测版本

This commit is contained in:
LINING-PC\lining
2025-06-29 20:21:53 +08:00
parent 5a9a55cd1f
commit c10cb7fef5
13 changed files with 1297 additions and 1220 deletions
+54 -57
View File
@@ -8,24 +8,10 @@ import packageInfo from '../package.json'
// 导入主题变量
import '../src/styles/theme-variables.css'
import VersionHistoryDrawer from './VersionHistoryDrawer.vue'
import { useMessage } from '../src/composables/useMessage'
import type { Task } from '../src/models/Task'
interface Task {
id: number
name: string
predecessor?: string
assignee?: string
startDate?: string
endDate?: string
progress?: number
estimatedHours?: number
actualHours?: number
children?: Task[]
collapsed?: boolean
isParent?: boolean
type?: string
description?: string
parentId?: number // 上级任务ID
}
const { showMessage } = useMessage()
const tasks = ref<Task[]>([])
const milestones = ref<Task[]>([])
@@ -56,9 +42,7 @@ const toolbarConfig = {
// 自定义CSV导出处理器(可选)
const handleCustomCsvExport = () => {
console.log('自定义CSV导出被调用')
console.log('当前任务数据:', tasks.value)
console.log('当前里程碑数据:', milestones.value)
showMessage('自定义CSV导出被调用', 'info', { closable: true })
// 这里可以实现自定义的CSV导出逻辑
// 例如:添加额外的数据处理、格式化、或发送到服务器等
@@ -86,11 +70,11 @@ const handleAddMilestone = () => {
}
const handleLanguageChange = (lang: 'zh' | 'en') => {
console.log('语言切换到:', lang)
showMessage(`语言切换到:${lang}`, 'info', { closable: true })
}
const handleThemeChange = (isDark: boolean) => {
console.log('主题切换到:', isDark ? '暗黑模式' : '明亮模式')
showMessage(`主题切换到:${isDark ? '暗黑模式' : '明亮模式'}`, 'info', { closable: true })
}
// 里程碑保存处理器示例
@@ -116,13 +100,11 @@ const handleMilestoneSave = (milestone: Task) => {
// 里程碑删除处理器
const handleMilestoneDelete = async (milestoneId: number) => {
console.log('删除里程碑,ID', milestoneId)
// 从里程碑数据中删除
const milestoneIndex = milestones.value.findIndex(m => m.id === milestoneId)
if (milestoneIndex !== -1) {
milestones.value.splice(milestoneIndex, 1)
console.log('里程碑删除成功')
showMessage('里程碑删除成功', 'success', { closable: false })
// 等待DOM更新完成
await nextTick()
@@ -148,10 +130,6 @@ const handleMilestoneDelete = async (milestoneId: number) => {
// 任务更新处理器
const handleTaskUpdate = (updatedTask: Task) => {
console.log('Demo App 接收到任务更新:', updatedTask)
console.log('updatedTask.type:', updatedTask.type)
console.log('updatedTask.parentId:', updatedTask.parentId)
// 先找到原任务,检查parentId是否改变了
const findOriginalTask = (taskArray: Task[]): Task | null => {
for (const task of taskArray) {
@@ -168,7 +146,7 @@ const handleTaskUpdate = (updatedTask: Task) => {
const originalTask = findOriginalTask(tasks.value)
if (!originalTask) {
console.log('未找到要更新的任务,ID', updatedTask.id)
showMessage(`未找到要更新的任务,ID ${updatedTask.id}`, 'warning', { closable: true })
return
}
@@ -177,13 +155,10 @@ const handleTaskUpdate = (updatedTask: Task) => {
if (parentIdChanged) {
// parentId改变了,需要移除任务并重新添加到新位置
console.log('任务父级关系改变,执行移动操作')
const removeTaskFromArray = (taskArray: Task[]): Task | null => {
for (let i = 0; i < taskArray.length; i++) {
if (taskArray[i].id === updatedTask.id) {
const removedTask = taskArray.splice(i, 1)[0]
console.log('从数组中移除任务:', removedTask)
return removedTask
}
@@ -218,7 +193,6 @@ const handleTaskUpdate = (updatedTask: Task) => {
if (!task.children) task.children = []
task.children.push(taskToAdd)
task.isParent = true
console.log('已将任务添加到新父任务的children中,父任务ID', taskToAdd.parentId)
return true
}
if (task.children && task.children.length > 0) {
@@ -229,17 +203,16 @@ const handleTaskUpdate = (updatedTask: Task) => {
}
if (!addToParentChildren(tasks.value)) {
console.warn('未找到新父任务,ID', taskToAdd.parentId, ',将作为顶级任务添加')
showMessage(`未找到新父任务,ID ${taskToAdd.parentId},将作为顶级任务添加`, 'warning', {
closable: true,
})
tasks.value.push(taskToAdd)
}
} else {
tasks.value.push(taskToAdd)
console.log('已将任务添加为顶级任务')
}
} else {
// parentId没有改变,只是就地更新任务数据
console.log('任务父级关系未变,执行就地更新')
const updateTaskInPlace = (taskArray: Task[]): boolean => {
for (let i = 0; i < taskArray.length; i++) {
if (taskArray[i].id === updatedTask.id) {
@@ -251,7 +224,6 @@ const handleTaskUpdate = (updatedTask: Task) => {
updatedTask.type === 'story' ||
(taskArray[i].children && taskArray[i].children.length > 0),
}
console.log('已就地更新任务数据:', taskArray[i])
return true
}
@@ -265,18 +237,15 @@ const handleTaskUpdate = (updatedTask: Task) => {
}
if (!updateTaskInPlace(tasks.value)) {
console.log('就地更新失败,未找到任务,ID', updatedTask.id)
showMessage(`就地更新失败,未找到任务,ID ${updatedTask.id}`, 'warning', { closable: true })
}
}
console.log('任务更新完成,当前任务数据:', tasks.value)
showMessage('任务更新完成', 'success', { closable: false })
}
// 任务添加处理器
const handleTaskAdd = (newTask: Task) => {
console.log('Demo App 接收到新增任务:', newTask)
console.log('newTask.type:', newTask.type)
// 为新任务生成ID(如果没有的话)
if (!newTask.id) {
// 找到当前最大的ID,然后+1
@@ -304,7 +273,6 @@ const handleTaskAdd = (newTask: Task) => {
}
// 将新任务添加到父任务的children中
task.children.push({ ...newTask })
console.log('已将子任务添加到父任务的children中,父任务ID', newTask.parentId)
return true
}
// 递归查找父任务(支持多层嵌套)
@@ -331,15 +299,13 @@ const handleTaskAdd = (newTask: Task) => {
// 任务删除处理器
const handleTaskDelete = (taskToDelete: Task) => {
console.log('删除任务:', taskToDelete)
// 递归查找和删除任务(支持嵌套结构)
const deleteTaskFromArray = (taskArray: Task[]): boolean => {
for (let i = 0; i < taskArray.length; i++) {
if (taskArray[i].id === taskToDelete.id) {
// 找到任务,删除它
taskArray.splice(i, 1)
console.log('已删除任务')
showMessage('已删除任务', 'success', { closable: false })
return true
}
@@ -354,20 +320,17 @@ const handleTaskDelete = (taskToDelete: Task) => {
}
if (!deleteTaskFromArray(tasks.value)) {
console.log('未找到要删除的任务,ID', taskToDelete.id)
showMessage(`未找到要删除的任务,ID ${taskToDelete.id}`, 'warning', { closable: true })
}
}
// 里程碑图标变更处理器
const handleMilestoneIconChange = (milestoneId: number, icon: string) => {
console.log('里程碑图标变更:', { milestoneId, icon })
const milestoneIndex = milestones.value.findIndex(m => m.id === milestoneId)
if (milestoneIndex !== -1) {
milestones.value[milestoneIndex].icon = icon
console.log('已更新里程碑图标')
} else {
console.log('未找到要更新图标的里程碑,ID', milestoneId)
showMessage(`未找到要更新图标的里程碑,ID ${milestoneId}`, 'warning', { closable: true })
}
}
@@ -411,14 +374,45 @@ const handleGiteeDocsClick = (event: Event) => {
window.open('https://gitee.com/jordium-gantt/jordium-gantt-vue3#readme', '_blank')
}
// 任务拖拽/拉伸/里程碑拖拽监听
function handleTaskbarDragOrResizeEnd(newTask) {
const oldTask = findTaskDeep(tasks.value, newTask.id)
if (!oldTask) return
showMessage(
`任务【${newTask.name}\n` +
`开始: ${oldTask.startDate}${newTask.startDate}\n` +
`结束: ${oldTask.endDate}${newTask.endDate}`,
'info',
{ closable: true },
)
}
function handleMilestoneDragEnd(newMilestone) {
const oldMilestone = findTaskDeep(milestones.value, newMilestone.id)
if (!oldMilestone) return
showMessage(
`里程碑【${newMilestone.name}\n` +
`开始: ${oldMilestone.endDate}${newMilestone.startDate}`,
'info',
{ closable: true },
)
}
onMounted(() => {
tasks.value = demoData.tasks as Task[]
milestones.value = demoData.milestones as Task[]
// 调试信息:打印原始任务数据
console.log('原始任务数据:', tasks.value)
console.log('里程碑数据:', milestones.value)
})
// 递归查找任务/里程碑,因为原始结构一致
function findTaskDeep(taskArray: Task[], id: number): Task | null {
for (const task of taskArray) {
if (task.id === id) return task
if (task.children && task.children.length > 0) {
const found = findTaskDeep(task.children, id)
if (found) return found
}
}
return null
}
</script>
<template>
@@ -469,6 +463,9 @@ onMounted(() => {
:on-task-add="handleTaskAdd"
:on-task-delete="handleTaskDelete"
:on-milestone-icon-change="handleMilestoneIconChange"
@taskbar-drag-end="handleTaskbarDragOrResizeEnd"
@taskbar-resize-end="handleTaskbarDragOrResizeEnd"
@milestone-drag-end="handleMilestoneDragEnd"
/>
</div>
<div class="license-info">
-3
View File
@@ -1,3 +0,0 @@
# README.md
This file has been deprecated. Please refer to the main project `README.md` for documentation.
+12
View File
@@ -68,5 +68,17 @@
"version": "alpha 0.9.8",
"date": "2025-06-28",
"notes": ["按钮样式统一管理"]
},
{
"version": "beta 1.0.0",
"date": "2025-06-29",
"notes": [
"GanttChart接口增强",
"添加GanttChart的拖拽事件回调",
"添加GanttChart的里程碑拖拽事件回调",
"修复里程碑点的样式问题",
"更新README文档",
"重构项目目录结构"
]
}
]