在 Vue 3 中使用 DHTMLX 甘特图组件

简介: 本文将介绍如何在 Vue 3 项目中集成 DHTMLX 甘特图组件,详细讲解安装、模块导入以及基本用法。通过示例代码,您将学会如何配置甘特图的任务、样式和交互功能,帮助您在项目中更有效地管理和展示任务时间线。

安装

npm install dhtmlx-gantt

模块导入

import gantt from "dhtmlx-gantt"; // 引入模块
import "dhtmlx-gantt/codebase/dhtmlxgantt.css"; // 引入甘特图样式

使用示例

<template>
  <div class="gantt-container">
    <div ref="gantt" class="gantt-content"></div>
  </div>
</template>

<script>
import gantt from 'dhtmlx-gantt';
import 'dhtmlx-gantt/codebase/dhtmlxgantt.css';
import { parseTime } from '@/utils'; // 自定义时间格式化方法

export default {
  name: 'GanttTask',
  data() {
    return {
      tasks: {
        data: [
          { id: 11, text: '任务1', start_date: '18-04-2018', end_date: '19-04-2018', progress: 1 },
          { id: 12, text: '任务2', start_date: '19-04-2018', end_date: '22-04-2018', progress: 0.6 },
          // 更多任务...
        ]
      }
    };
  },
  mounted() {
    this.initGantt();
  },
  methods: {
    initGantt() {
      gantt.config.fit_tasks = true;
      gantt.config.drag_project = true;
      gantt.config.scale_height = 80;
      gantt.config.row_height = 60;
      gantt.config.bar_height = 40;
      gantt.i18n.setLocale('cn');
      gantt.config.autosize = true;
      gantt.config.readonly = true;
      gantt.config.show_grid = true;
      gantt.plugins({ tooltip: true });
      gantt.templates.tooltip_text = (start, end, task) => `
        <div>
          <div>任务:${task.text}</div>
          <div>开始时间:${parseTime(task.start_date, '{y}-{m}-{d}')}</div>
          <div>结束时间:${parseTime(task.end_date, '{y}-{m}-{d}')}</div>
          <div>进度:${task.progress * 100}%</div>
        </div>`;
      gantt.config.scales = [
        { unit: 'month', step: 1, date: '%F, %Y' },
        { unit: 'day', step: 1, date: '%j, %D' }
      ];
      gantt.config.columns = [
        { name: 'text', label: '任务内容', width: '120', align: 'center' }
      ];
      gantt.init(this.$refs.gantt);
      gantt.parse(this.tasks);
    }
  }
};
</script>

<style lang="scss">
.gantt_task {
  background: #79bbff;
}
.gantt_task_progress {
  background: #53a8ff;
}
.gantt_grid_data .gantt_row.gantt_selected {
  background: #f0f3f9;
}
</style>

效果图

甘特图示例

目录
相关文章
|
4天前
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
126 57
|
23小时前
|
移动开发 JavaScript 前端开发
💻揭秘!如何用 Vue 3 实现酷炫的色彩魔方游戏✨
本文分享了开发基于Canvas技术的小游戏"色彩魔方挑战"的完整过程。游戏旨在考验玩家的观察力和耐心,通过随机生成的颜色矩阵和一个变化点,玩家需在两幅画布中找出不同的颜色点。文章详细讲解了游戏的核心功能,包括随机颜色矩阵生成、点的闪烁提示、自定义配色方案等。此外,作者展示了使用Vue 3和TypeScript开发的代码实现,带领读者一步步深入了解游戏的逻辑与细节。
95 66
|
1天前
|
JavaScript API
Vue3实现面板分割
Vue3实现面板分割
9 1
|
23小时前
|
JavaScript 前端开发 UED
Vue 组件设计:构建生动多彩的树形结构组件
本文介绍了如何使用 Vue 构建一个功能强大的树形结构组件。该组件支持递归渲染节点及其子节点,提供了自定义节点颜色、文本和布局的功能。通过独特的样式处理不同层级的节点,展示出丰富的视觉效果。组件还支持动态布局和缩放,确保灵活的界面展示和用户体验。文章提供了详细的代码实现,包括 HTML、JavaScript 和 SCSS,帮助开发者快速集成和定制自己的树形结构组件。
8 0
Vue 组件设计:构建生动多彩的树形结构组件
|
2天前
|
JavaScript 搜索推荐
Vue 插槽全攻略:重塑组件灵活性
【10月更文挑战第7天】 Vue 的插槽(Slots)是一个强大的特性,用于增强组件的灵活性和可扩展性。插槽允许父组件向子组件传递内容,实现组件的复用和个性化展示。主要包括默认插槽、具名插槽和作用域插槽三种类型,分别适用于不同场景。通过插槽,可以提高组件的复用性、实现灵活的布局,并促进团队协作。
13 1
|
3天前
|
JavaScript
vue 函数化组件
【10月更文挑战第1天】 Vue.js 的函数化组件通过设置 `functional: true`,使其无状态和无实例,从而减少渲染开销。通过 `render` 函数的 `context` 参数传递数据。示例中,`smart-item` 组件根据 `data.type` 动态选择并渲染 `ImgItem`、`VideoItem` 或 `TextItem` 组件。根实例 `app` 通过按钮切换不同类型的组件数据。函数化组件适用于程序化选择组件和操作传递数据的场景。
|
4天前
Vue3 使用mapState
【10月更文挑战第8天】
6 1
|
4天前
|
JavaScript 前端开发
VUE学习三:双向绑定指令(v-mode)、组件化开发(全局组件/局部组卷/组件通信)、组件化高级(slot插槽使用)
这篇文章是关于Vue.js框架中的v-model指令和组件化开发的详细教程,涵盖了从基础使用到高级功能的多个方面。
18 1
|
4天前
|
JavaScript 程序员 开发者
你真的完全了解vue组件的概念吗?
【10月更文挑战第7天】你真的完全了解vue组件的概念吗?
|
4天前
|
缓存 JavaScript 前端开发
对比一下Vue2和Vue3?
本文首发于微信公众号“前端徐徐”,详细对比了 Vue 2 和 Vue 3 在原理、生命周期、性能、编码方式、API、Diff 算法、打包构建、TS 支持等八个方面的差异,帮助读者全面了解两者的不同之处。
33 0
对比一下Vue2和Vue3?