vue dhtmlx-gantt实现甘特图(接入后台数据)

在这里插入图片描述

<div ref="gantt" style="width: 100%; height: 550px" class="gantts"></div>

关于gantt的数据格式要求
在这里插入图片描述
官网数据格式详细:https://docs.dhtmlx.com/gantt/desktop__loading.html

<script>
import gantt from "dhtmlx-gantt"; // 引入模块
import "dhtmlx-gantt/codebase/skins/dhtmlxgantt_terrace.css"; //皮肤
export default{
	data(){
	},
	mounted(){
		this.initGantt()
		this.getData() // 获取数据
	},
	methods:{
		initGantt(){
			//自适应甘特图的尺寸大小, 使得在不出现滚动条的情况下, 显示全部任务
     		gantt.config.autosize = true;
     		// 设置日期格式
      		gantt.config.date_format = "%Y-%m-%d";
      		// 工期计算的基本单位
     		gantt.config.duration_unit = "day";
     		//设置x轴日期
      		gantt.config.scale_unit = "day";
      		gantt.config.step = 1;
      		gantt.config.date_scale = "%d %M";
      		//只读模式
      		gantt.config.readonly = true;
      		// 水平或垂直滚动条尺寸
     		gantt.config.scroll_size = 10;
     		gantt.plugins({ // 提示信息
        		tooltip: true// 启用 tooltip 插件
     		})
     		// 在时间线上增加一行年份显示
      		// gantt.config.subscales = [
      		//   {
      		//     unit: "year",
      		//     step: 1,
      		//     date: "%Y",
      		//   },
      		// ];
     		// 表格列宽自适应
     		gantt.config.autofit = true;
     		// 把任务或者连线拖拽到浏览器屏幕外时,自动触发滚动效果,相当于拖动滚动条
     		gantt.config.autoscroll = true;
     		// 自定义 tooltips 显示内容
      		gantt.attachEvent("onGanttReady", () => {
        		gantt.templates.tooltip_text = function (start, end, task) {
        			return (
        				"【任务名称:" + task.name + "】" +
              			"<br/>" +
              			"【负责人:" + task.relevant_person + "】"
        			)
          		}
      		});
     		// 表格列设置
     		gantt.config.columns = [
        		{
          			name: "type",
          			align: "center",
          			tree: true, // 展示 tree 型数据结构
          			resize: true, // 允许通过拖拽的方式border改变列的宽度**(pro收费版支持)**
          			width: 150,
          			label: "任务类型",
        		},
        		{
          			name: "start_date",
          			align: "center",
          			resize: true,
          			label: "预计开始时间",
          			width: 150,
        		},
        		{
         	 		name: "end_date",
          			align: "center",
          			resize: true,
          			label: "预计结束时间",
          			width: 150,
        		},
      		];
      		// 当task的长度改变时,自动调整图标坐标轴区间用于适配task的长度
      		gantt.config.fit_tasks = true;
      		// 初始化
      		gantt.init(this.$refs.gantt);
      		// 数据解析
      		gantt.parse(this.tasks);
		}
	},
	reload() {
      gantt.clearAll();// 从甘特图中删除所有任务和其他元素(包括标记)
      gantt.parse(this.tasks); // 数据解析
      gantt.render(); // 呈现整个甘特图
    },
    getData(){
    	Api().then(res => {
    		this.tasks.data = res.data
    		// 如果需要折叠父子关系(tree)
    		this.tasks.data = [
    		{id:1,text: '123'},
    		{id:2,text: '234'},
    		{id:3,text: '345',parent: 2,}
    		]
    		this.reload()
    	})
    }
}
</script>

从后台获取数据之后,才去渲染甘特图

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到 Vue DHTMLX-Gantt 导出甘特图到 Excel 的详细教程时,以下是一步一步的指南: 1. 确保您的项目中已经安装了 VueDHTMLX-Gantt。如果尚未安装,请使用以下命令进行安装: ```bash npm install vue dhtmlx-gantt ``` 2. 在您的 Vue 组件中引入所需的库和样式: ```javascript import 'dhtmlx-gantt'; import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'; import * as XLSX from 'xlsx'; import FileSaver from 'file-saver'; ``` 3. 创建一个 Vue 组件,并在模板中添加一个 Gantt 图表和一个按钮: ```html <template> <div ref="ganttContainer" style="width: 100%; height: 600px;"></div> <button @click="exportGantt">导出 Excel</button> </template> <script> export default { mounted() { const ganttContainer = this.$refs.ganttContainer; gantt.init(ganttContainer); // 设置 Gantt 图表的配置和数据 // 示例数据 const tasks = [ { id: 1, text: '任务1', start_date: '2022-01-01', duration: 5, progress: 0.5 }, { id: 2, text: '任务2', start_date: '2022-01-06', duration: 4, progress: 0.2 }, // 其他任务... ]; gantt.parse({ data: tasks }); }, methods: { exportGantt() { const gantt = this.$refs.ganttContainer.$gantt; const data = gantt.serialize(); const worksheet = XLSX.utils.json_to_sheet(data); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, 'Gantt Data'); const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); const excelData = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); FileSaver.saveAs(excelData, 'gantt_data.xlsx'); }, }, }; </script> <style> /* 可选的样式 */ </style> ``` 4. 在上述示例代码中,需要注意以下部分: - 在 `mounted` 钩子中,使用 `gantt.init(ganttContainer)` 初始化 Gantt 图表,并根据您的需求设置其配置和数据。 - `exportGantt` 方法用于将 Gantt 图表数据导出到 Excel。确保在 `exportGantt` 方法中的 `this.$refs.ganttContainer.$gantt` 是对 Gantt 图表组件的正确引用。 - 点击 "导出 Excel" 按钮时,将会生成一个名为 `gantt_data.xlsx` 的 Excel 文件,其中包含了 Gantt 图表的数据。 这就是使用 Vue DHTMLX-Gantt 导出甘特图到 Excel 的详细教程。希望对您有所帮助!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值