Vue使用 dhtmlx-gantt 甘特图

2023-11-16

使用心得和一些坑分享出来

下载

 npm install  dhtmlx-gantt  -save

创建 ganttVue 组件

<template>
 	// ref 引用这个dom
  <div ref="gantt" class="highcharts-container"></div>
</template>
<script>
	// 引入 组件库
	import 'dhtmlx-gantt'
	import { gantt } from 'dhtmlx-gantt'
	export default{
	  name: 'gantt',
	 // 接受父级组件 传递的数据并规范类型 
	  props: {
	    tasks: {
	      type: Object,
	      default() {
	      	// data 数据  links 数据连接关系
	        return { data: [], links: [] }
	      },
	    },
	  },
	}
	methods:{
		 Add(task ,e) {
     // 通过 任务Id 来获取任务 
    var obj= gantt.getTask(task);
      console.log(obj)
      
      return false;
    },
	},
	// 卸载事件把所有绑定在Event 上的事件都卸载掉 官网好像有一个属性也可以配置 但是没使用
	destroyed(){
    	
    this.events.forEach(ele => {
      gantt.detachEvent(ele)
    })
   // gantt=null;
   gantt.clearAll();
  },
	// 初始化
	mounted(){
		//清除所有数据
		gantt.clearAll();
		// 格式化父级 数据  官网文档要求   {
			id,
			text 文本,
			start_date 开始时间,
			end_date 结束时间,
			progress 进度 100%1,
			name 名称,
			parent 父级Id 和上面的Id 要是想对应的
		}
		for (let i = 0; i < this.$props.tasks.data.length; i++) {
	      var task = this.$props.tasks.data[i]
	      this.$props.tasks.data[i] = {
	          id:task.id,
	          text: task.stepName,
	          start_date: new Date(this.$moment(task.startTime).format('YYYY-MM-DD')),
	          end_date: new Date(this.$moment(task.endTime).format('YYYY-MM-DD')),
	          progress: task.amount / 100,
	          name: task.stepName,
	          parent: task.parentId==0?"0":task.parentId,
	        }  
	    }
	    	// 配置
		 	gantt.config.open_split_tasks = true
		 	// 双击开启默认编辑框禁用
		    gantt.config.details_on_dblclick = false;
		    // 单击开启默认编辑框禁用
		    gantt.config.details_on_click = false;
		     // 下面是一些拖拽禁用 详情可以去看官方文档
		    gantt.config.drag_lightbox = false
		    gantt.config.drag_progress = false
		    gantt.config.drag_links = false
		    gantt.config.drag_move = false
		    gantt.config.drag_resize = false
		    // 开启提示
			 gantt.plugins({
		      marker: true,
		      tooltip: true,
		    })
		   // 设置表头 和对应的时间格式化 而且还可以设置步长
		    gantt.config.scales = [
			      { unit: 'year', format: '%Y年' },
			      { unit: 'month', format: '%M' },
			    //  { unit: 'day', step: 1, format: "%m月 %j号, 周%D" },
			    ]
		  // 设置表头 左侧表格描述   tree:true  是开启树结构
			  gantt.config.columns = [
		      { name: 'text', label: '任务名称', width: '120', align: 'center',tree:true },
		      { name: 'start_date', label: '开始时间', width: '100', align: 'center'} ,
		      { name: 'end_date', label: '结束时间', width: '100', align: 'center' },
		      {name:"duration",   label:"总用时/天",   align: "center" },
		      {name:"add",      align: "center" }
		    ]   
		     gantt.i18n.setLocale('cn') // 设置中文
			 // 设置时间表头高度 
			  gantt.config.scale_height=88;
			  gantt.config.bar_height = 24 //task高度
			  	// 函数作用域问题 需要把this 赋值给That;  moment.js 的时间转换
			   let that = this
			    gantt.templates.tooltip_text = function (start, end, task) {
			      return (
			        '<a-card> <b>任务名称:</b>' +
			        task.id +
			        '<br/><b>开始时间:</b> ' +
			        that.$moment(task.start_date).format('YYYY-MM-DD') +
			        '<br/><b>结束时间:</b> ' +
			        that.$moment(task.end_date).format('YYYY-MM-DD') +
			        '</a-card>'
			      )
			    }
			    // 自动大小自适应
			     gantt.config.autosize = true
			    //任务条上的文字大小 以及取消border自带样式
			    gantt.templates.task_class = function () {
			      return 'firstLevelTask'
			    }
			    // 初始化甘特图
			    gantt.init(this.$refs.gantt)
				// 初始化数据
				gantt.parse(this.$props.tasks)
				// 绑定事件 点击创建任务按钮的 反正两个都要加上去 不加上去 默认创建没有父级任务的会把组件内置的弹出 目前就研究出这个方法
				let onTaskCreated=  gantt.attachEvent('onTaskCreated',(e)=>{
			      console.log(e);
			      return false;
			    });
			    let onTaskClick=  gantt.attachEvent('onTaskClick',this.Add);
			    this.events.push(onTaskClick)
			   this.events.push(onTaskCreated)
			   	// 循环把所有树展开
			    gantt.eachTask(function (task) {
			      task.$open = true
			    })
	},
	 data(){
    return{
 	 // 后续存储绑定事件 在组件卸载时候 需要把 事件也卸载否则会出现事件重复触发的问题
      events:[]
    }
  },
}
</script>

父级组件调用

父级组件调用时 需要注意的就是异步 问题 因为我用的是antd vue pro 的模板二次开发 ,STable 加载表格数据的方式就是一个异步 操作 子组件已经加载 单数据还没有赋值上去.

 // 所以 如果是异步的情况下我们需要注意一点 就是调用子组件的是 v-if 数据是否存在 这样当数据存在的时候我们在加载组件 就解决了这个问题。
 	import TgCharts from '@/components/Charts/Gantt.vue'
   <tg-charts v-if="tasks.data!=null" :tasks="tasks" />

学习总结 其实在大部分使用方式上还是要相信官方文档 前期把一些时间浪费在散的知识上 ,看了官方文档和自己的理解一整合很快就学会了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue使用 dhtmlx-gantt 甘特图 的相关文章

  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • socket.io 的良好初学者教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • 在新的 Google 协作平台 <嵌入 HTML> 中使用 localStorage 和 IndexedDB 不起作用

    我正在尝试将新的 Google 协作平台用于我开发的网页 但是 我在存储本地数据时遇到了问题 本地文件在 Windows 和 Apple safari chrome 中运行良好 从 Google 协作平台尝试一下 没有什么乐趣 此外 在 s
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 梦之光芒ctf小游戏闯关过程

    梦之光芒ctf游戏闯关 简介 玩这个游戏 您需要有JS 编码解码 XSS SQL注入 图片隐写 逆向分析等基本常识 游戏地址 http monyer com game game1 进入第1关 入口提示 请点击链接进入第1关 连接在左边 连接
  • max_binlog_size

    max binlog size 默认就是一个G最大值 但是有有什么会发现超过了一个G 原因就是 If a write to the binary log causes the current log file size to exceed
  • java application.yml 配置对象数组

    java application yml 配置对象数组 application yml 配置对象数组 常规对象中获取属性 场景 application yml 配置对象数组 定义配置文件结构 用于定义配置文件的数据结构 打印服务中用到的打印
  • Thinkpad在linux(ubuntu)下修改电池充电阈值,成功解决Thinkpad在Linux下的电池充电问题

    look this for more info http www thinkwiki org wiki Tp smapi 安装tp smapi aptitude install tp smapi dkms modprobe tp smapi
  • Kubernetes弃用Docker的由来和始末

    2020年12月初 Kubernetes在发布v1 20的时候重磅宣称将逐渐弃用Docker 一石激起千层浪 瞬间引爆容器圈 但没想到已经过去两个月时间了 还有文章用UC体误导吃瓜群众 还在学Docker Docker已死 额 累了 毁灭吧
  • mysql join 自己_用JOIN自己更新MySql

    HI我有查詢選擇了主鍵 id 1或外鍵 1的所有行 這是自己的連接 用JOIN自己更新MySql 選擇 SELECT f2 wz AS wz FROM d7x6r magazyn faktura zakupowa f LEFT JOIN S
  • 强化学习——基本概念

    什么是强化学习 强化学习关注与智能体 agent 如何与环境交互中不断学习以完成特定的目标 与有监督学习相比 不需要告诉智能体数据以及对应的标签 学习相应的模型 而是需要智能体在环境中一次次学习 哪些数据对应哪些标签 从而学习规律知道策略
  • Oracle 数据导入*.sql 提示ORA-01950

    今天执行远程Oracle 数据库数据导入时 提示ORA 01950 超出导入文件大小限制 cmd 远程连接oracle 数据库 sqlplus root root1234 192 50 68 246 orcl 导入指定位置的 sql文件 E
  • 双向广度优先搜索(介绍)

    双向广度优先搜索 广度优先搜索遵循从初始结点开始一层层扩展直到找到目标结点的搜索规则 它只能较好地解决状态不是太多的情况 承受力很有限 如果扩展结点较多 而目标结点又处在较深层 采用前文叙述的广度搜索解题 搜索量巨大是可想而知的 往往就会出
  • http请求 405错误

    http请求 405错误 方法不被允许 Method not allowed 405错误常常伴随着POST请求 所有有人会告诉你这些 但是时候他并不能解决你的问题 所以我说一点不一样的 假如你有一个user类 里面有两个属性userName
  • nat技术简介(转载)

    NAT Network Address Translation 网络地址转换 是将IP数据报文头中的IP地址转换为另一个IP地址的过程 在实际应用中 NAT主要用于实现私有网络访问公共网络的功能 这种通过使用少量的公网IP地址代表较多的私网
  • 快速搭建你的api数据交易平台-图文开发教程

    项目背景 如果你需要开发搭建自己的api数据交易平台 并且能在平台上面进行对客户管理 接口管理 套餐管理 账单管理 充值管理 那么下面将来介绍如何使用接口大师这个框架快速进行开发 安装 PhalApi专业版的运行环境要求如下 操作系统 Wi
  • nVidia TK1 基于深度学习框架 Caffe 的物体识别

    By Toradex 胡珊逢 1 简介 深度学习目前正吸引着越来越多人的关注 相关算法框架层出不穷 例如TensorFlow Caffe Keras CNTK Torch7等等 这些算法在数据分析 聚类 识别和预测方面提供了极大的帮助 因此
  • Python爬虫-某网酒店数据

    前言 本文是该专栏的第5篇 后面会持续分享python爬虫案例干货 记得关注 本文以某网的酒店数据为例 实现根据目标城市获取酒店数据 具体思路和方法跟着笔者直接往下看正文详细内容 附带完整代码 正文 地址 aHR0cHM6Ly93d3cuY
  • 基于核概念的KCCA算法

    基于核概念的KCCA算法 1 由CCA算法过渡至KCCA算法 2 KCCA算法的原理与推导 1 由CCA算法过渡至KCCA算法 典型相关分析 CCA 算法是一种标准的统计技术 用于寻找两个最大相关的随机向量的线性投影 CCA算法是一个计算两
  • 字符串初始化赋值

    在C语言中 字符串是当做字符数组来处理的 所以字符串有两种声明方式 一种是字符数组 一种是字符指针 1 直接逐个初始化字符数组 字符数组的初始化 最容易理解的方式就是逐个字符赋给数组中各元素 char str 10 I a m h a p
  • 单片机毕设项目分享 基于stm32的智能电子秤系统 - 物联网 嵌入式 单片机

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4 1 STM32F103C8T6 4 2 HX711压力传感器 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目
  • Linux下安装jre

    原文链接 https blog csdn net qq 34368587 article details 79559102 个人收藏教程 侵权联系我删除 现需要项目部署到Linux中 需要配置java运行环境 注 以下测试环境系统为cent
  • 我看Java虚拟机(2)---Java虚拟机内存区域详解

    虚拟机内存区域的组成 直接上图 程序计数器 对于Java方法 用来选取下一条要执行的字节码 对于本地方法 值为空 线程独有 虚拟机栈 执行Java方法 每一层都是一个栈帧 栈帧包括局部变量表 操作数栈 动态链接和方法出口等信息 线程独有 本
  • Vue使用 dhtmlx-gantt 甘特图

    使用心得和一些坑分享出来 下载 npm install dhtmlx gantt save 创建 ganttVue 组件