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

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);
        }
    });
});

原文地址:https://www.cnblogs.com/wofeiliangren/p/11678297.html

时间: 2024-10-13 20:41:14

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

CocoStudio使用笔记2:cocos2dx3.9使用CocoStudio制作的进度条LoadingBar

作为菜鸟曾一直使用手写cocos2dx界面,最近一直在研究cocostudio这个工具.尝试着使用工具来快速的开发游戏,折腾了一个多星期了,每天不停的搜索资料. 记录下本人试用cocostudio制作的启动界面所遇到的问题和经验,方便以后查阅. 首先设置编辑器的分辨率为480*800安卓分辨率的大小. 添加一个sprite精灵使用大小为480*800的图片(background.png)作为背景,然后添加sprite精灵作为游戏logo(logo.png),继续添加sprite作为进度条的背景(

在Altium Designer中使用AUTOCAD快速制作元件封装

笔者通过使用AutoCAD处理图形,并将其导入Altium Designer中,快速绘制元件封装,省去算间距的时间. 本例中以NPN管(B772),封装为SOT-89为例: 第一步:使用PDF Editor工具打开B772的说明文档,并定位到封装页面. 将该页面单独导出为pdf格式. 第二步:利用pdf2pxf工具,将导出的含有封装的单页pdf转化为dxf格式. 第三步:使用AutoCAD打开,并标注其中任意一边长,会发现标注和封装上的示数不同.这时使用缩放工具,成功缩放至相同示数. 第四步:删

C#的WinForm中制作饼状图和柱状图

using System; using System.IO;//用于文件存取 using System.Data;//用于数据访问 using System.Drawing;//提供画GDI+图形的基本功能 using System.Drawing.Text;//提供画GDI+图形的高级功能 using System.Drawing.Drawing2D;//提供画高级二维,矢量图形功能 using System.Drawing.Imaging;//提供画GDI+图形的高级功能 namespace

js代码中包含vue标签

tree组件绘制节点代码报错,babel不认识js代码中的vue标签 renderContent(h, { node, data, store }) { return ( <span> <span> <span>{node.label}</span> </span> <span style="float: right; margin-right: 20px"> <el-button size="mi

在Flash CS6中安装动画辅助制作插件DragonBones

提示:本文后面提供的附件是我从网络上搜索到的一个相当不错的针对Flash CS 6.0的扩展插件,它是在原有的Dragonbone 2.0的基础上作了适当修改,以便导致更多类型的符合COCOS2D-X开发的动画文件.当然,有的动画文件也可以为CocoStudio(例如我讲课中使用的1.4.0.1)中的动画编辑器所导入作进一步修改使用. 有关Dragonbones(http://dragonbones.effecthub.com/)这个东西,相信我不需要再费过多的口舌了.这是一个世界著名的Flas

IDEA 中使用 Vue 提示 namespace is not bound

今天在 IDEA 中使用 vue.js 时提示我如下错误信息 解决方法: 把这个校验项目去掉就可以了. 原文地址:https://www.cnblogs.com/qufanblog/p/8434659.html

在webpack构建的项目中使用vue

一.复习在普通网页中使用vue1.使用script引入vue2.在index中创建 id为app的容器3.通过new vue得到vm实例二.在webpack中尝试使用vue://注意 : 在webpack中 使用 import Vue from 'vue' 导入的Vue构造函数,功能不完整,只提供了runtime-onley的方式 病没有提供想网页中那样的使用方式npm install vue -S import Vue from 'vue'// import Vue from '../node

在webpack中配置vue.js

在webpack中配置vue.js 这里有两种在webpack中配置vue.js的方法,如下: 1.在main.js中引入vue的包: index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,

如何在嵌套的app中运用vue去写单页面H5

本文主要介绍移动端.为了避免移动端兼容出现各种奇奇怪怪的bug,所以秉承着能不用复杂的语法就不用,尽量用最基础的语法. 可用惯了各种ES6语法的童鞋们,写原生真是头疼,再加上各种领导催工期,肯定是内心各种烦躁.这里介绍一下,如何在H5中运vue 去写,嵌套到用到app中. 首先引入vue CDN ,记得去扒一个vue.js. 下载下来,不要用htpp,这样可以避免有些模块因为网卡导致,页面加载错乱. <script src="./js/vue.min.js"></sc