美文网首页
13、vue2使用甘特图插件dhtmlx-gantt

13、vue2使用甘特图插件dhtmlx-gantt

作者: 蜗牛的学习方法 | 来源:发表于2023-04-10 15:54 被阅读0次

在项目中需要使用甘特图插件,在网上就找到了dhtmlx-gantt,下面是使用教程
下载插件:

npm install dhtmlx-gantt -save
<template>
    <div class="container">
        <div class="select-wrap">
            <el-select v-model="value" placeholder="请选择" @change="selectChange">
                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
            </el-select>
        </div>
        <div ref="gantt" class="gantt-container"></div>
    </div>
</template>
<script>
    import {
        gantt
    } from 'dhtmlx-gantt';
    import "dhtmlx-gantt/codebase/dhtmlxgantt.css"

    export default {
        name: 'gantt',
        data() {
            return {
                tasks: {
                    data: []
                },
                options: [{
                    value: '1',
                    label: '全部'
                }, {
                    value: '2',
                    label: '完成'
                }, {
                    value: '3',
                    label: '正常'
                }, {
                    value: '4',
                    label: '异常'
                }, {
                    value: '5',
                    label: '未启动'
                }],
                value: '1'
            }
        },
        methods: {
            //开始时间-结束时间参数
            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
            },
            initData: function() {
                this.tasks.data = [{
                        id: 1,
                        text: '概念设计',
                        start_date: '2020-04-08',
                        duration: 10,
                        open: true, //默认打开,
                        toolTipsTxt: 'xxx项目概念设计',
                        progress: 0.6,
                        status: "parent"
                    },
                    {
                        toolTipsTxt: 'xxx项目-项目启动会',
                        text: '项目启动会-外部', // 任务名
                        start_date: '2020-04-08', // 开始时间
                        id: 11, // 任务id
                        duration: 3, // 任务时长,从start_date开始计算
                        parent: 1, // 父任务ID
                        type: 1,
                        progress: 0.5,
                        status: "yellow"
                    },
                    {
                        toolTipsTxt: 'xxx项目-项目启动会议',
                        text: '项目启动会-内部',
                        start_date: '2020-04-11',
                        id: 12,
                        duration: 2,
                        parent: 1,
                        type: 2,
                        progress: 0.6,
                        status: "pink"
                    },
                    {
                        toolTipsTxt: 'xxx项目开工会',
                        text: '项目开工会',
                        start_date: '2020-04-13',
                        id: 13,
                        duration: 4,
                        parent: 1,
                        type: 3,
                        progress: 1,
                        status: "green"

                    }, {
                        toolTipsTxt: 'xxx项目-项目分析',
                        text: '项目分析',
                        start_date: '2020-04-13',
                        id: 14,
                        duration: 4,
                        parent: 1,
                        type: 4,
                        progress: 0.6,
                        status: "popular"
                    },

                    {
                        id: 2,
                        text: '方案设计',
                        start_date: '2020-04-08',
                        duration: 8,
                        open: true,
                        toolTipsTxt: 'xxx方案设计',
                        state: 'default',
                        // color:"#409EFF", //设置颜色
                        progress: 0.6,
                        status: "parent"
                    },
                    {
                        toolTipsTxt: 'xxx新项目原型图设计',
                        text: '原型图设计',
                        start_date: '2020-04-08',
                        id: 21,
                        duration: 2,
                        parent: 2,
                        type: 1,
                        progress: 0.6,
                        status: "yellow"
                    },
                    {
                        toolTipsTxt: 'xxx项目-项目设计图',
                        text: '设计图设计',
                        start_date: '2020-04-09',
                        id: 22,
                        duration: 2,
                        parent: 2,
                        type: 2,
                        progress: 0.6,
                        status: "pink"
                    },
                    {
                        toolTipsTxt: 'xxx项目-项目确认',
                        text: '项目确认',
                        start_date: '2020-04-11',
                        id: 23,
                        duration: 2,
                        parent: 2,
                        type: 3,
                        progress: 1,
                        status: "green"
                    }

                ].map(function(current, ind, arry) {
                    var newObj = {}
                    if (current.type) { //存在type字段 说明非一级菜单,判断阶段的具体类型 设置不同颜色
                        if (current.type == 1) { //冒烟
                            newObj = Object.assign({}, current, {
                                'color': '#fcca02'
                            })
                        } else if (current.type == 2) { //单元
                            newObj = Object.assign({}, current, {
                                'color': '#fec0dc'
                            })
                        } else if (current.type == 3) { //回归
                            newObj = Object.assign({}, current, {
                                'color': '#62ddd4'
                            })
                        } else if (current.type == 4) {
                            newObj = Object.assign({}, current, {
                                'color': '#d1a6ff'
                            })
                        }
                    } else { //一级菜单是蓝色的
                        newObj = Object.assign({}, current, {
                            'color': '#5692f0'
                        })
                    }

                    return newObj
                })
            },
            selectChange(val){
                console.log(val)

                //测试用例
                var obj = {
                        toolTipsTxt: '新增任务',
                        text: '新增任务', // 任务名
                        start_date: '2020-04-15', // 开始时间
                        id: 24, // 任务id
                        duration: 2, // 任务时长,从start_date开始计算
                        parent: 2, // 父任务ID
                        type: 4,
                        progress:0,
                        status: "popular"
                }
                this.tasks.data.push(obj)

                // 数据解析
                gantt.parse(this.tasks)
                // 刷新数据
                gantt.refreshData();
            }
        },
        mounted() {
            this.initData()


            //自适应甘特图的尺寸大小, 使得在不出现滚动条的情况下, 显示全部任务
            gantt.config.autosize = true
            //只读模式
            gantt.config.readonly = true
            //是否显示左侧树表格
            gantt.config.show_grid = true
            //表格列设置
            gantt.config.columns = [{
                    name: 'text',
                    label: '阶段名字',
                    tree: true,
                    width: '280',
                    onrender: function(task, node) {
                        node.setAttribute("class", "gantt_cell gantt_last_cell gantt_cell_tree " + task.status);
                    }
                },
                {
                    name: 'duration',
                    label: '时长',
                    align: 'center',
                    template: function(obj) {
                        return obj.duration + '天'
                    },
                    hide: true
                }
            ]



            var weekScaleTemplate = function(date) {
                var dateToStr = gantt.date.date_to_str("%m %d");
                var endDate = gantt.date.add(gantt.date.add(date, 1, "week"), -1, "day");
                var weekNum = gantt.date.date_to_str("第 %W 周");
                return weekNum(date)
            };
            var daysStyle = function(date) {
                var dateToStr = gantt.date.date_to_str("%D");
                if (dateToStr(date) == "六" || dateToStr(date) == "日") return "weekend";
                return "";
            };
            gantt.config.subscales = [{
                    unit: "week",
                    step: 1,
                    template: weekScaleTemplate
                },
                {
                    unit: "day",
                    step: 1,
                    format: "%d"
                }
            ];

            gantt.plugins({
                tooltip: true
            });
            gantt.attachEvent("onGanttReady", function() {
                var tooltips = gantt.ext.tooltips;
                gantt.templates.tooltip_text = function(start, end, task) {

                    return task.toolTipsTxt + "<br/>" +
                        "阶段:" + task.text + "<br/>" +
                        gantt.templates.tooltip_date_format(start)
                };


            });


            //设置任务条进度内容
            gantt.templates.progress_text = function(start, end, task) {
                return "<div style='text-align:left;color:#fff;padding-left:20px'>" + Math.round(task.progress * 100) +
                    "% </div>";
            };

            //任务条显示内容
            gantt.templates.task_text = function(start, end, task) {
                // return task.text + '(' + task.duration + '天)';
                return "<div style='text-align:center;color:#fff'>" + task.text + '(' + task.duration + '天)' +
                    "</div>";
            }


            // gantt.templates.scale_cell_class = function(date) {
            //     /*if(date.getDay()== 0 || date.getDay()== 6){
            //       return "weekend";
            //     }*/
            //     return 'weekend'
            // }


            //任务栏周末亮色
            /*gantt.templates.task_cell_class = function(item,date){
              if(date.getDay()== 0 || date.getDay()== 6){
                return "weekend";
              }
            };*/


            //任务条上的文字大小 以及取消border自带样式
            gantt.templates.task_class = function(start, end, item) {
                return item.$level == 0 ? 'firstLevelTask' : 'secondLevelTask'
            }

            gantt.config.layout = {
                css: "gantt_container",
                cols: [{
                        width: 280,
                        min_width: 280,
                        rows: [{
                                view: "grid",
                                scrollX: "gridScroll",
                                scrollable: true,
                                scrollY: "scrollVer"
                            },
                            {
                                view: "scrollbar",
                                id: "gridScroll",
                                group: "horizontal"
                            }
                        ]
                    },
                    {
                        resizer: true,
                        width: 1
                    },
                    {
                        rows: [{
                                view: "timeline",
                                scrollX: "scrollHor",
                                scrollY: "scrollVer"
                            },
                            {
                                view: "scrollbar",
                                id: "scrollHor",
                                group: "horizontal"
                            }
                        ]
                    },
                    {
                        view: "scrollbar",
                        id: "scrollVer"
                    }
                ]
            };

            //时间轴图表中,任务条形图的高度
            // gantt.config.task_height = 28
            //时间轴图表中,甘特图的高度
            // gantt.config.row_height = 36
            //时间轴图表中,如果不设置,只有行边框,区分上下的任务,设置之后带有列的边框,整个时间轴变成格子状。
            gantt.config.show_task_cells = true
            //当task的长度改变时,自动调整图表坐标轴区间用于适配task的长度
            gantt.config.fit_tasks = true
            gantt.config.min_column_width = 50;
            gantt.config.auto_types = true;
            gantt.config.xml_date = "%Y-%m-%d";
            gantt.config.scale_unit = "month";
            gantt.config.step = 1;
            gantt.config.date_scale = "%Y年%M";
            gantt.config.start_on_monday = true;
            gantt.config.scale_height = 90;
            gantt.config.autoscroll = true;
            gantt.config.calendar_property = "start_date";
            gantt.config.calendar_property = "end_date";
            gantt.config.readonly = true;
            gantt.i18n.setLocale('cn');

            // 初始化
            gantt.init(this.$refs.gantt)
            // 数据解析
            gantt.parse(this.tasks)
        }
    }
</script>
<style lang="scss">
    .firstLevelTask {
        border: none;

        .gantt_task_content {
            font-size: 13px;
        }
    }

    .secondLevelTask {
        border: none;
    }

    .thirdLevelTask {
        border: 2px solid #da645d;
        color: #da645d;
        background: #da645d;
    }

    .milestone-default {
        border: none;
        background: rgba(0, 0, 0, 0.45);
    }

    .milestone-unfinished {
        border: none;
        background: #5692f0;
    }

    .milestone-finished {
        border: none;
        background: #84bd54;
    }

    .milestone-canceled {
        border: none;
        background: #da645d;
    }

    html,
    body {
        margin: 0px;
        padding: 0px;
        height: 100%;
        overflow: hidden;
    }

    .container {
        height: 100%;
        width: 100%;
        position: relative;
        .gantt_grid_head_cell {
            padding-left: 20px;
            text-align: left !important;
            font-size: 14px;
            color: #333;
        }

        .select-wrap {
            position: absolute;
            top: 25px;
            z-index: 99;
            width: 90px;
            left: 180px;

            .el-input__inner {
                border: none;
            }
        }

        .left-container {
            height: 100%;
        }

        .parent {
            .gantt_tree_icon {
                &.gantt_folder_open {
                    background-image: url(assets/gantt-icon.svg) !important;
                }
                &.gantt_folder_closed{
                    background-image: url(assets/gantt-icon-up.svg) !important;
                }
            }
        }

        .green,
        .yellow,
        .pink,
        .popular {
            .gantt_tree_icon.gantt_file {
                background: none;
                position: relative;

                &::before {
                    content: "";
                    width: 10px;
                    height: 10px;
                    border-radius: 50%;
                    position: absolute;
                    left: 50%;
                    top: 50%;
                    transform: translate(-50%, -50%);
                }
            }
        }

        .green {
            .gantt_tree_icon.gantt_file {
                &::before {
                    background: #84bd54;
                }
            }
        }

        .yellow {
            .gantt_tree_icon.gantt_file {
                &::before {
                    background: #fcca02;
                }
            }
        }

        .pink {
            .gantt_tree_icon.gantt_file {
                &::before {
                    background: #da645d;
                }
            }
        }

        .popular {
            .gantt_tree_icon.gantt_file {
                &::before {
                    background: #d1a6ff;
                }
            }
        }

    }

    .left-container {
        height: 100%;
    }

    .gantt_task_content {
        text-align: left;
        padding-left: 10px;
    }
</style>

效果如图:


image.png

获取任务节点

//获取任务节点
gantt.getTask(14) //index: 13 rendered_type: "task" rendered_parent: 1 所有属性
 
//返回下一个项目的ID(无论嵌套级别是什么:相同或不同)
gantt.getNext( taskId ); //没有就返回null
gantt.getNextSibling(taskId );//没有就返回null 
//返回上一个项目的ID: 
gantt.getPrev(tsakId) 
//返回上一个同级项目的ID: 
gantt.getPrevSibling(tsakId) 
//返回父任务的ID: 
gantt.getParent(tsakId)
 
//返回任务栏的HTML元素
gantt.getTaskNode('10');//-><div task_id="2" class="gantt_task_line" …>…</div> 
gantt.getTaskRowNode('10');//-><div class="gantt_row" task_id="2">…</div>
 
//根据指定条件查找任务 
var userTasks = gantt.getTaskBy("user_id", 5); 
var userTasks2 = gantt.getTaskBy(function(task){ 
    return task.user_id == 5 || !task.user_id; 
}); 
var userTasks = gantt.getTaskBy(task => task.user_id == 5);
 
//通过其全局任务索引返回任务
var globalTaskIndex = gantt.getGlobalTaskIndex(19); // -> 10 var task = gantt.getTaskByIndex(10);
 
//返回指定时间段内发生的任务的集合
var tasks = gantt.getTaskByTime(new Date(2013,3,10),new Date(2013,4,10)); 
for (var i=0; i<tasks.length; i++){ 
    alert(tasks[i].text); 
} 
var tasks = gantt.getTaskByTime();//returns all tasks
 
//返回指定父分支的第一级子任务
gantt.getChildren( taskId)
 
//返回指定任务的兄弟姐妹(包括自身)
gantt.getSiblings("t_1"); -> //["t_1", "t_2]
 
// 检查当前是否选择了指定的任务
gantt.isSelectedTask(task.id)
 
// 检查指定任务是否存在
gantt.isTaskExists(10); // ->true
 
// 检查指定任务是否当前在甘特图中呈现
gantt.isTaskVisible("t_1"); // ->true

// 返回配置
gantt.getScale() //返回事件的配置事件头单元格宽度70高度12,总的宽度5600。列数80,每格的做边距0,70,140……;单位day
 
// 获取甘特图中当前加载的任务数
gantt.getTaskCount();
 
// 获取分支中任务的索引
var taskIndex = gantt.getTaskIndex("t_1"); // -> 0 
var globalTaskIndex = gantt.getGlobalTaskIndex("t_1"); // -> 1
 
//返回任务的类型
var type = gantt.getTaskType(gantt.getTask(12));
 
//通过左边表格里列的名称返回列的索引
var index = gantt.getColumnIndex("start_date"); // => 1
 
//根据 taskId 返回所有相关任务以及相关的链接
gantt.getConnectedGroup(18);
 
//获取所有的ID
gantt.getDatastore("task").fullOrder
 
//获取所有节点
gantt.getDatastore("task").pull
 
//返回日期的列索引columnIndexByDate
gantt.columnIndexByDate(new Date(2017, 03, 11)); // ->10
 
//返回所选任务的ID:
gantt.getSelectedId()
 
//返回当前选定任务的数组:
gantt.getSelectedTasks();//getLastSelectedTask; isSelectedTask
 
//检查指定项目是否具有子任务:
gantt.hasChild("p_1"); //-> true
 
// 获取屏幕上可见的任务数(未折叠的任务):
gantt.getVisibleTaskCount();

位置相关可能用到API

//返回任务的可见高度 
var height = gantt.getTaskHeight(); // -> 30 
 
//任务的DOM元素在时间轴区域中的位置和大小 
var sizes = gantt.getTaskPosition(task, task.planned_start, task.planned_end); //=>left,top,height,width 
 
//获取任务的DOM元素在时间轴区域中的最高位置 
gantt.getTaskTop('10'); 
 
//获取指定日期在图表区域中的相对水平位置 gantt.posFromDate(new Date(2013,02,31)); // -> 0 
gantt.posFromDate(new Date(2013,03,1)); // -> 74 
gantt.posFromDate(new Date(2013,03,2)); // -> 148 
 
//滚动图表区域以使指定的日期可见 
gantt.showDate(new Date()); //shows the current date 
 
// 在甘特图中启用/禁用多任务选择: 
gantt.config.multiselect = false; 
 
// 指定在一个或任何级别内是否可以使用多任务选择: 
gantt.config.multiselect_one_level = true; 

//甘特图任务悬浮框位置
gantt.config.tooltip_offset_x = 10;
gantt.config.tooltip_offset_y = 30;

//激活列表展开(折叠)功能
gantt.config.open_split_tasks = true;

//甘特图图表宽度自适应
gantt.config.autofit = true;

//用户可以通过拖拽调整行高
gantt.config.resize_rows = true;

//界面初始化时展开图表树形结构
gantt.config.open_tree_initially = true;
//默认滚动到当前时间
gantt.showDate(new Date()); //shows the current date 
 
//使指定的任务在屏幕上可见 
gantt.showTask('10'); 

//设置甘特图表头高度
gantt.config.scale_height = 50;

//设置行高
gantt.config.row_height = 44;

//配置甘特图时间刻度高度
gantt.config.scale_height = 40;
 
//跳转定位 
let colIndex = simulationGantt.columnIndexByDate(new Date( task.start_date )); 
simulationGantt.scrollTo( (colIndex-5)*col_width, (task.$index-2)*34);
 
//滚动到位置 scrollTo 
//返回滚动位置
var sPos = gantt.getScrollState(); // {x:58,y:180} 
var posX = sPos.x; var posY = sPos.y; 
 
//当甘特图滚动到特定点时触发onGanttScroll(数左,数顶部){...} gantt.attachEvent("onGanttScroll", function (left, top){ 
    // any custom logic here 
}) 
 
//获取图表区域中指定水平位置的日期//参数相当于列的index 
gantt.dateFromPos(0);//返回第0列的日期


消息弹框API

//消息框 
gantt.message({
  type:"confirm-warning", 
  text:"Are you sure you want to do it?", 
  expire: 1000,//过期时间 
}); 
 
//模态框 
gantt.modalbox({ 
  title: "Close", 
  type: "alert-warning" 
}); 
 
//屏幕右上角的红色弹出窗口显示(第一个参数必为false) 
gantt.assert( false, task.text); 
//调用确认消息框 
gantt.confirm({ 
  text: "Continue?", 
  ok:"Yes", cancel:"No", 
  callback: function(result){ 
    if(result){  
      gantt.message("Yes!"); 
    }else{ 
      gantt.message("No..."); 
    } 
  } 
}); 
//警报框的配置 
gantt.alert({ //confirm,message,modalbox 
  title:"Alert", 
  type:"alert-error", 
  text:"You can't do this" 
}); 
gantt.assert( false, task.text);

标记标签

//在灯箱区域添加标记 
gantt.plugins({ marker: true }); 
gantt.config.task_date = "%Y-%m-%d"; 
var dateToStr = gantt.date.date_to_str(gantt.config.task_date); 
var todayMarker = null; 
var startTime = new Date("2020-12-13"); 
todayMarker = gantt.addMarker({ 
  start_date: startTime, 
  end_date: simulationGantt.calculateEndDate(new Date("2020-12-13"), task.duration), 
  css: "gantt-start-line", 
  text: "开始时间", 
}); 
 
//删除灯箱区域添加标记 
gantt.deleteMarker(todayMarker); 
 
<style> 
.gantt-end-line{ background-color: #ffeb3b; color: #fff; } 
.gantt-start-line { background-color: #0ca30a; color: #fff; } 
</style>

事件

// 选择指定的任务、从所选任务中删除选择
gantt.selectTask("t_1"); gantt.unselectTask();
 
// 在网格中排序任务:
gantt.sort("text",true);//排序的列的名称/true-降序排序,false-升序排序。默认情况下为false
 
// 将任务移到新位置
gantt.moveTask("t_1", 1);
 
// 打开具有指定ID的分支
gantt.open("p_1");
 
// 激活指定的插件
gantt.plugins({
   quick_info: true,
   keyboard_navigation: true,
   // multiselect: true,// 激活多任务选择 
});
 
// 更新指定的任务
var taskId = gantt.addTask({ 
  id:10, 
  text:"Task #10", 
  start_date:"02-04-2013", 
  duration:8, 
}); 
gantt.getTask(taskId).text = "Task #13"; //changes task's 
data gantt.updateTask(taskId); //renders the updated task
 
//初始化promise的回调
gantt.Promise(function(resolve, reject) { 
  setTimeout(function(){ resolve(); }, 5000);
 }).then(function(){ alert("Resolved") });
 
//添加链接
var linkId = gantt.addLink({ id:1, source:1, target:2, type:gantt.config.links.finish_to_start });
 
//绑定事件【attachEvent(GanttEventName名称,函数处理程序,对象设置);对象设置可以没有】
var myEvent = gantt.attachEvent("onTaskClick", function(id, e) { 
  alert("You've just clicked an item with id="+id); 
}, {id: "my-click", once: true }); //可以指定id,是否只执行一次 
//取消绑定的事件 
gantt.detachEvent("my-click"); 
gantt.detachEvent(myEvent); 
 
// 是指定任务不触发内部事件或服务器端调用:silent
//双击任务触发(每一行)
gantt.attachEvent("onTaskDblClick", function (id, e) {return true})
//将任务添加到Gantt之前触发
gantt.attachEvent("onAfterTaskAdd",function(id,item){return true})
//用户选择任务时触发
gantt.attachEvent("onTaskSelected",function(id){return true})
//用户悬停Gantt时触发
gantt.attachEvent("onMouseMove",function(id,e){})
//用户拖拽任务后释放鼠标之后,应用更改之前触发
gantt.attachEvent("onAfterTaskDrag",function(id,mode,e){return true})
//点击“+”进行添加任务操作触发
gantt.attachEvent("onTaskCreated",function(task){return true})
//用户打开Gantt内置弹出框之前触发
gantt.attachEvent("onBeforeLightbox",function(id){return true})
 
//自动排程:需要插件auto_scheduling插件。
gantt.autoSchedule();
//要从特定任务开始重新计算计划,请将任务的id作为参数传递给autoSchedule()方法 
gantt.autoSchedule(taskId);
 
//全屏
gantt.expand();//全屏 
gantt.collapse();//退出全屏
 
//计算完成任务的日期
gantt.calculateEndDate({start_date: new Date(2013,02,15), duration: 48}); 
gantt.calculateEndDate(new Date(2013,02,15), 48);
 
//判断是否存在参数,则返回false;否则返回true
if(gantt.defined(task.custom_property)){ 
  // .. 
}
 
//销毁甘特图实
var myGantt = Gantt.getGanttInstance(); myGantt.destructor();
 
//隐藏灯箱模式叠加层,以阻止与其余屏幕的交互
gantt.hideCover(gantt.getLightbox());
 
//如果灯箱当前处于活动状态,则将其关闭
gantt.showLightbox(1); gantt.hideLightbox()

遍历节点

//遍历甘特图中指定任务的所有父任务 
gantt.eachParent(function(task){ 
  alert(task.text); 
}, taskId); 
//遍历甘特图中的所有选定任务 eachSelectedTask 
//遍历特定任务或整个甘特图的所有子任务 eachTask 
//遍历被选中的节点 eachSelectedTask
 

导入导出

exportToExcel、exportToMSProject、exportToICal、exportToPDF、exportToPNG、exportToJSON
importFromMSProject

参考链接

插件文档地址:https://docs.dhtmlx.com/gantt/api__refs__gantt.html
https://blog.csdn.net/qq_24641385/article/details/112464817
https://www.cnblogs.com/zyfenblog/p/15608310.html

相关文章

  • vue2下实现swiper图片轮播滚动

    vue2下实现swiper图片轮播滚动,可以使用使用vue-awesome-swiper滑块插件。swiper这么...

  • R语言可视化(二十二):甘特图绘制

    22. 甘特图绘制 清除当前环境中的变量 设置工作目录 使用plotrix包绘制甘特图 使用vistime包绘制甘特图

  • 使用vue2开发chrome插件

    从原型到源码 本次要开发的插件其实是很简单功能,显示每天的待办清单,能够添加,能够打勾,其它差不多就行了。之前对c...

  • vue2使用lazyload插件报错

    package.json 的 dependencies 加上指定版本的vue-lazyload 其他一切按照官网或...

  • 以Toast为例玩一玩Vue3

    在 Vue2 时写过一个 toast 插件。详见 Vue | 如何封装一个toast插件[https://www....

  • vue2 使用别的插件(例如axios)

    安装 配置 在main.js中配置 就是把插件对象加到vue的原型上去,访问的时候记得是this.$http.xx...

  • VUE2——插件

    各种插件的集合:awesome-vue 各种插件的集合,需要的时候可以过来找找,不过需要注意是否支持vue2 数据...

  • vue2插件

    插件 插件通常用来为 Vue 添加全局功能。插件的功能范围没有严格的限制——一般有下面几种: 添加全局方法或者 p...

  • XMind甘特图之使用方法第一篇

    如果你是使用XMind的用户,可能平常并不曾在意过它还有一个很好使用的功能,那就是甘特图,使用甘特图能够有效的帮助...

  • XMind甘特图之使用方法第二篇

    紧接着上期关于XMind甘特图基本使用方法,本文将接着上次甘特图的使用补充一些使用的小细节。首先我还是以上次思维导...

网友评论

      本文标题:13、vue2使用甘特图插件dhtmlx-gantt

      本文链接:https://www.haomeiwen.com/subject/kxcwddtx.html