当前位置:首页 > VUE

vue实现甘特图

2026-03-27 22:31:13VUE

使用 vue-ganttastic 库实现甘特图

vue-ganttastic 是一个轻量级的 Vue 甘特图组件库,支持任务拖拽、缩放和自定义样式。

安装依赖:

npm install vue-ganttastic

基础实现代码:

<template>
  <GanttChart :tasks="tasks" />
</template>

<script>
import { GanttChart } from 'vue-ganttastic'
export default {
  components: { GanttChart },
  data() {
    return {
      tasks: [
        {
          id: 'task1',
          name: '任务一',
          start: '2023-01-01',
          end: '2023-01-05',
          progress: 50
        },
        {
          id: 'task2',
          name: '任务二',
          start: '2023-01-03',
          end: '2023-01-08',
          progress: 20
        }
      ]
    }
  }
}
</script>

使用 dhtmlx-gantt 实现专业级甘特图

dhtmlx-gantt 是功能强大的商业甘特图库,提供 Vue 封装版本。

安装依赖:

npm install dhtmlx-gantt

基础实现代码:

<template>
  <div ref="gantt_container" style="width:100%; height:400px;"></div>
</template>

<script>
import { gantt } from 'dhtmlx-gantt'
import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'

export default {
  mounted() {
    gantt.init(this.$refs.gantt_container)
    gantt.parse({
      data: [
        { id: 1, text: "任务一", start_date: "2023-01-01", duration: 5 },
        { id: 2, text: "任务二", start_date: "2023-01-03", duration: 4 }
      ],
      links: [
        { id: 1, source: 1, target: 2, type: "0" }
      ]
    })
  }
}
</script>

自定义实现简单甘特图

对于简单需求,可以使用纯 Vue 实现基础甘特图功能。

实现代码示例:

vue实现甘特图

<template>
  <div class="gantt-container">
    <div v-for="task in tasks" :key="task.id" class="gantt-task" 
         :style="taskStyle(task)">
      {{ task.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tasks: [
        { id: 1, name: '任务A', start: 0, duration: 3 },
        { id: 2, name: '任务B', start: 2, duration: 4 }
      ],
      dayWidth: 50
    }
  },
  methods: {
    taskStyle(task) {
      return {
        width: `${task.duration * this.dayWidth}px`,
        left: `${task.start * this.dayWidth}px`,
        backgroundColor: `hsl(${task.id * 60}, 70%, 80%)`
      }
    }
  }
}
</script>

<style>
.gantt-container {
  position: relative;
  height: 300px;
  border: 1px solid #ddd;
}
.gantt-task {
  position: absolute;
  height: 30px;
  line-height: 30px;
  padding: 0 10px;
  border-radius: 3px;
  margin-top: 5px;
}
</style>

甘特图功能扩展建议

  1. 时间轴控制:添加缩放按钮调整时间粒度(天/周/月)
  2. 任务交互:实现拖拽调整任务时间、右键菜单操作
  3. 进度显示:在任务条上叠加进度指示条
  4. 依赖关系:用箭头线显示任务间的依赖关系
  5. 资源分配:添加人员/资源分配显示功能

性能优化方案

  1. 虚拟滚动:只渲染可视区域内的任务项
  2. 数据分页:对大规模数据采用分页加载
  3. 防抖处理:对频繁操作如拖拽进行防抖优化
  4. Web Worker:将复杂计算移入 Web Worker

标签: 甘特图vue
分享给朋友:

相关文章

vue实现简单的弹窗

vue实现简单的弹窗

使用 Vue 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="mod…

vue实现计时

vue实现计时

Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的方法: 使用 setInterval 实现基础计时器 通过 setInterval 和 clearInterva…

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理异…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…