HTML中使用Vue+Dhtmlxgantt制作任务进度图

Dhtmlxgantt官网: https://dhtmlx.com/docs/products/dhtmlxGantt/

参考文章

甘特图配置大佬翻译的官方文档 ,https://blog.csdn.net/qq_24472595/article/details/81630117;
实现搜索 新增 编辑 删除 设置具体时间格式 突出周末显示https://blog.csdn.net/CX_silent/article/details/83589451
从0开始使用Dhtmlxgantt https://blog.csdn.net/honantic/article/details/51314672 ;
代码部分

HTML部分:

       //需要引用dhtmlxgantt.css、dhtmlxgantt.js、locale_cn.js(汉化文件)
<div>
<div id="gantt_here" style='width:100%; height:550px;' ref="gantt"></div>
</div>

js部分:

 $(function () {
window.App = new Vue({
el: "#app",
data: function () {
return {
tasks: {
data: []
}
}
};
},
methods: {
QueryClick: function () {
var that = this;
//每次点击查询前清空
that.InitData();
that.Ajax({
url: "/JHProcess/GetProcessContrast",//从后台读取数据
data: {
XXXX//后台查询条件
},
success: function (result) {
var data = result.Data.Data;
var arry = [];
for (var i = 0; i < data.length; i++) {
var current = data[i];
arry.push({
text: current.名称,
start_date: new Date(current.开始时间),
end_date: new Date(current.结束时间),
duration: that.DateDifference(current.开始时间, current.结束时间),
progress: Number((current.计划进度 / current.本年投资计划完成).toFixed(2))
});
}
that.tasks.data = arry;
that.Init(); //加载数据之后初始化
}
});
},
weekScaleTemplate: function (date) {
var dateToStr = gantt.date.date_to_str("%d%M");
var weekNum = gantt.date.date_to_str("(周%W)");
var endDate = gantt.date.add(gantt.date.add(date, 1, "week"), - 1, "day");
return dateToStr(date) + " - " + dateToStr(endDate) + "" + weekNum(date);
},
DateDifference: function (strDateStart, strDateEnd) {
var begintime_ms = Date.parse(new Date(strDateStart.replace(/-/g, "/"))); //begintime 为开始时间
var endtime_ms = Date.parse(new Date(strDateEnd.replace(/-/g, "/"))); // endtime 为结束时间
var date3 = endtime_ms - begintime_ms; //时间差的毫秒数
var days = Math.floor(date3 / (24 * 3600 * 1000));
return days;
},
Init: function () {
var that = this;
gantt.config.scale_unit = "month"; //时间坐标轴单位“minute”, “hour”, “day”, “week”, “quarter”, “month”, “year”
gantt.config.date_scale = "%d,%D";//日期格式 先数字后文字
gantt.config.row_height = 30; //甘特图的行高
gantt.config.scale_height = 20;//甘特图的表头高度
gantt.config.scroll_on_click = false;
gantt.config.min_column_width = 60;
gantt.config.duration_unit = "day";
gantt.config.scale_height = 20 * 3;
//gantt.config.row_height = 28;
gantt.config.drag_resize = false;//两边不可拖动
gantt.config.readonly = true;//只读模式
gantt.config.subscales = [{ //时间坐标为月份的时候 先显示年份再月份
unit: "month",
step: 1,
date: "%Y,%F"
}];
//配置显示列 //name:绑定数据的名称 align:对其方式 label显示在表头的名称
gantt.config.columns = [
{ name: "text", tree: true, width: '*', align: "center", label: "计划名称", resize: true },
{ name: "start_date", align: "center", resize: true },
{ name: "end_date", align: "center", label: "结束时间", resize: true },
{ name: "duration", align: "center" }
];
//显示到进度条上的文本 计划名称和任务进度百分比
gantt.templates.task_text = function (start, end, task) {
return "<b style='text-align:left;'>计划名称:</b> " + task.text +" <span style='text-align:left;'>" +"完成计划:"+ Math.round(task.progress * 100) + "% </span>";
};
gantt.init(that.$refs.gantt); gantt.parse(that.tasks);
},
InitData: function () {
//清空数据
gantt.clearAll();
}
},
mounted() {
var that = this;
that.Ajax = top.Helper.Current.Ajax;
//注入一个用户信息
that.User = top.Helper.Current.User;
console.log(that.$refs.gantt);
that.SizeChange = function () {
var that = this;
var h = $("#app").height();
if (that.WindowSize != h) {
that.WindowSize = (h - 135);
console.log(that.WindowSize);
}
};
gantt.config.min_column_width = 60;
gantt.config.scale_height = 20 * 3;
gantt.config.subscales = [{
unit: "month",
step: 1,
date: "%Y,%F"
}];
//配置显示列 //name:绑定数据的名称 align:对其方式 label显示在表头的名称
gantt.config.columns = [
{ name: "text", tree: true, width: '*', align: "center", label: "计划名称", resize: true },
{ name: "start_date", align: "center", resize: true },
{ name: "end_date", align: "center", label: "结束时间", resize: true },
{ name: "duration", align: "center" }
];
gantt.init(that.$refs.gantt);
}
});
});

HTML中使用Vue+Dhtmlxgantt制作任务进度图的更多相关文章

  1. 使用Vue.js制作仿Metronic高级表格(一)静态设计

    Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...

  2. webstorm中关于vue的一些问题

    在进行vue开发中,我使用了webstorm,但是过程坎坷艰辛,遇到了很多问题,我将问题和解决方案贴上,以作参考. 1.vue项目部署在webstorm中,第一个遇到的问题是,webstorm卡住了, ...

  3. 在pycharm中开发vue

    一.在pycharm中开发vue ''' webstorm(vue) pycharm(python) goland(Go语言) idea(java) andrioStuidio(安卓) Php(PHP ...

  4. vue生命周期图示中英文版Vue实例生命周期钩子

    vue生命周期图示中英文版Vue实例生命周期钩子知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,Vue.js 作者尤雨溪12月4日正面回应了该问题.以下是尤雨溪回复 ...

  5. 在webpack构建的项目中使用vue

    一.复习在普通网页中使用vue1.使用script引入vue2.在index中创建 id为app的容器3.通过new vue得到vm实例二.在webpack中尝试使用vue://注意 : 在webpa ...

  6. django项目中使用项目环境制作脚本 通过终端命令运行脚本文件

    在实际的django项目开发中,有时候需要制作一些脚本文件对项目数据进行处理,然后通过终端命令运行脚本. 完整的实现流程如下: 1.在一个应用目录下(app, 必须是在应用目录下,可以专门创建一个应用 ...

  7. 在webpack中配置vue.js

    在webpack中配置vue.js 这里有两种在webpack中配置vue.js的方法,如下: 1.在main.js中引入vue的包: index.html: <!DOCTYPE html> ...

  8. IDEA 中使用 Vue 提示 namespace is not bound

    今天在 IDEA 中使用 vue.js 时提示我如下错误信息 解决方法: 把这个校验项目去掉就可以了.

  9. webstorn中的vue文件识别es6代码

    webstorn中的vue文件识别es6代码 1.webstorm中es6语法报错,解决方法: 打开 Settings => Languages & Frameworks => J ...

随机推荐

  1. Python--day40--主线程和子线程代码讲解

    1,最简单的线程例子: 2,多线程并发: import time from threading import Thread #多线程并发 def func(n): time.sleep(1) prin ...

  2. springboot2.0.2+redis+spring-session 解决session共享的问题

    准备工作 新建两个springboot2.0.2版本的服务,配置文件添加: #在默认设置下,Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为 eurek ...

  3. .gitkeep常用写法

    # win & OSX system files .DS_Store Thumbs.db ehthumbs.db Desktop.ini # IDE files .idea # project ...

  4. Spring Security 5.x兼容多种密码加密方式

    1 spring security PasswordEncoder spring security 5不需要配置密码的加密方式,而是用户密码加前缀的方式表明加密方式,如: {MD5}88e2d8cd1 ...

  5. ZeroNet搭建个人网站,一些搞笑图片

    ZeroNet是一个利用比特币加密和BT技术提供不受审查的网络与通信的BT平台,ZeroNet网络功能已经得到完整的种子的支持和加密连接,保证用户通信和文件共享的安全.使用ZeroNet,你可以匿名上 ...

  6. POJ 1511 Invitation Cards(逆向思维 SPFA)

    Description In the age of television, not many people attend theater performances. Antique Comedians ...

  7. Linux 内核kobject 缺省属性

    当被创建时, 每个 kobject 被给定一套缺省属性. 这些属性通过 kobj_type 结构来指定. 这个结构, 记住, 看来如此: struct kobj_type { void (*relea ...

  8. linux PCI 寻址

    每个 PCI 外设有一个总线号, 一个设备号, 一个功能号标识. PCI 规范允许单个系统占 用多达 256 个总线, 但是因为 256 个总线对许多大系统是不够的, Linux 现在支持 PCI 域 ...

  9. vue-learning:24 - component - 目录

    component 组件 组件的概念 Vue 组件同时也都是 Vue 实例,可接受相同的选项对象option (除了一些根级特有的选项) 和使用相同的生命周期钩子,以及模板调用方式. 组件的构建和注册 ...

  10. Django 中配置MySQL数据库

    在Django的项目中会默认使用sqlite的数据库 配置MySQL需要在setting.py 里加入以下设置: 配置数据库 DATABASES = { 'default': { 'ENGINE': ...