官方例子效果图:

可以横向以及纵向鼠标拖拽表格滑动。可以手动调整列宽等功能

1、安装gantt-elastic

npm install --save gantt-elastic

2、安装gantt-elastic-header

npm install --save gantt-elastic-header

3、当然你项目里面没有安装dayjs的话还需要安装一下,因为他官网的例子用到了

npm install dayjs --save

4、到这里如果你项目里面安了less-loader可能会报错

说你的less-loader版本太高,必须是2.3.1或者3.0.0版本 ,因为我的是5.0版本的

 此时需要再次安装指定版本的less-loader

 npm install less-loader@3.0.0 --save

然后再次安装dayjs。就ok了

 5、官方例子全代码。复制粘贴即可。

<template>
    <q-page class="q-pa-sm">
        <gantt-elastic :options="options" :tasks="tasks" @tasks-changed="tasksUpdate" @options-changed="optionsUpdate" @dynamic-style-changed="styleUpdate">
            <gantt-header slot="header"></gantt-header>
        </gantt-elastic>
        <div class="q-mt-md" />
        <q-btn @click="addTask" icon="mdi-plus" label="Add task" />
    </q-page>
</template>
 
<style>
</style>
 
<script>
import GanttElastic from "gantt-elastic";
import GanttHeader from "gantt-elastic-header";
import dayjs from "dayjs";
 
// just helper to get current dates
function getDate(hours) {
    const currentDate = new Date();
    const currentYear = currentDate.getFullYear();
    const currentMonth = currentDate.getMonth();
    const currentDay = currentDate.getDate();
    const timeStamp = new Date(
        currentYear,
        currentMonth,
        currentDay,
        0,
        0,
        0
    ).getTime();
    return new Date(timeStamp   hours * 60 * 60 * 1000).getTime();
}
let tasks = [
    {
        id: 1,
        label: "大任务1",
        user:
            '<a href="https://www.google.com/search?q=John Doe" target="_blank" style="color:#0077c0;">John Doe</a>',
        start: getDate(-24 * 5),
        duration: 15 * 24 * 60 * 60 * 1000,
        percent: 85,
        type: "project"
        //collapsed: true,
    },
    {
        id: 2,
        label: "With great power comes great responsibility",
        user:
            '<a href="https://www.google.com/search?q=Peter Parker" target="_blank" style="color:#0077c0;">Peter Parker</a>',
        parentId: 1,
        start: getDate(-24 * 4),
        duration: 4 * 24 * 60 * 60 * 1000,
        percent: 50,
        type: "milestone",
        collapsed: true,
        style: {
            base: {
                fill: "#1EBC61",
                stroke: "#0EAC51"
            }
        }
    },
    {
        id: 3,
        label: "Courage is being scared to death, but saddling up anyway.",
        user:
            '<a href="https://www.google.com/search?q=John Wayne" target="_blank" style="color:#0077c0;">John Wayne</a>',
        parentId: 2,
        start: getDate(-24 * 3),
        duration: 2 * 24 * 60 * 60 * 1000,
        percent: 100,
        type: "task"
    },
    {
        id: 4,
        label: "Put that toy AWAY!",
        user:
            '<a href="https://www.google.com/search?q=Clark Kent" target="_blank" style="color:#0077c0;">Clark Kent</a>',
        start: getDate(-24 * 2),
        duration: 2 * 24 * 60 * 60 * 1000,
        percent: 50,
        type: "task",
        dependentOn: [3]
    },
    {
        id: 5,
        label:
            "One billion, gajillion, fafillion... shabadylu...mil...shabady......uh, Yen.",
        user:
            '<a href="https://www.google.com/search?q=Austin Powers" target="_blank" style="color:#0077c0;">Austin Powers</a>',
        parentId: 4,
        start: getDate(0),
        duration: 2 * 24 * 60 * 60 * 1000,
        percent: 10,
        type: "milestone",
        style: {
            base: {
                fill: "#0287D0",
                stroke: "#0077C0"
            }
        }
    },
    {
        id: 6,
        label: "Butch Mario and the Luigi Kid",
        user:
            '<a href="https://www.google.com/search?q=Mario Bros" target="_blank" style="color:#0077c0;">Mario Bros</a>',
        parentId: 5,
        start: getDate(24),
        duration: 1 * 24 * 60 * 60 * 1000,
        percent: 50,
        type: "task",
        collapsed: true,
        style: {
            base: {
                fill: "#8E44AD",
                stroke: "#7E349D"
            }
        }
    },
    {
        id: 7,
        label: "Devon, the old man wanted me, it was his dying request",
        user:
            '<a href="https://www.google.com/search?q=Knight Rider" target="_blank" style="color:#0077c0;">Knight Rider</a>',
        parentId: 2,
        dependentOn: [6],
        start: getDate(24 * 2),
        duration: 4 * 60 * 60 * 1000,
        percent: 20,
        type: "task",
        collapsed: true
    },
    {
        id: 8,
        label: "Hey, Baby! Anybody ever tell you I have beautiful eyes?",
        user:
            '<a href="https://www.google.com/search?q=Johhny Bravo" target="_blank" style="color:#0077c0;">Johhny Bravo</a>',
        parentId: 7,
        dependentOn: [7],
        start: getDate(24 * 3),
        duration: 1 * 24 * 60 * 60 * 1000,
        percent: 0,
        type: "task"
    },
    {
        id: 9,
        label:
            "This better be important, woman. You are interrupting my very delicate calculations.",
        user:
            '<a href="https://www.google.com/search?q=Dexter\'s Laboratory" target="_blank" style="color:#0077c0;">Dexter\'s Laboratory</a>',
        parentId: 8,
        dependentOn: [8, 7],
        start: getDate(24 * 4),
        duration: 4 * 60 * 60 * 1000,
        percent: 20,
        type: "task",
        style: {
            base: {
                fill: "#8E44AD",
                stroke: "#7E349D"
            }
        }
    },
    {
        id: 10,
        label: "current task",
        user:
            '<a href="https://www.google.com/search?q=Johnattan Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>',
        start: getDate(24 * 5),
        duration: 24 * 60 * 60 * 1000,
        percent: 0,
        type: "task"
    },
    {
        id: 11,
        label: "test task",
        user:
            '<a href="https://www.google.com/search?q=Johnattan Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>',
        start: getDate(24 * 6),
        duration: 24 * 60 * 60 * 1000,
        percent: 0,
        type: "task"
    },
    {
        id: 12,
        label: "test task",
        user:
            '<a href="https://www.google.com/search?q=Johnattan Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>',
        start: getDate(24 * 7),
        duration: 24 * 60 * 60 * 1000,
        percent: 0,
        type: "task",
        parentId: 11
    },
    {
        id: 13,
        label: "test task",
        user:
            '<a href="https://www.google.com/search?q=Johnattan Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>',
        start: getDate(24 * 8),
        duration: 24 * 60 * 60 * 1000,
        percent: 0,
        type: "task"
    },
    {
        id: 14,
        label: "test task",
        user:
            '<a href="https://www.google.com/search?q=Johnattan Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>',
        start: getDate(24 * 9),
        duration: 24 * 60 * 60 * 1000,
        percent: 0,
        type: "task"
    },
    {
        id: 15,
        label: "test task",
        user:
            '<a href="https://www.google.com/search?q=Johnattan Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>',
        start: getDate(24 * 16),
        duration: 24 * 60 * 60 * 1000,
        percent: 0,
        type: "task"
    }
];
let options = {
    taskMapping: {
        progress: "percent"
    },
    maxRows: 100,
    maxHeight: 500,
    title: {
        label: "Your project title as html (link or whatever...)",
        html: false
    },
    row: {
        height: 24
    },
    calendar: {
        hour: {
            display: true
        }
    },
    chart: {
        progress: {
            bar: false
        },
        expander: {
            display: true
        }
    },
    taskList: {
        expander: {
            straight: false
        },
        columns: [
            {
                id: 1,
                label: "ID",
                value: "id",
                width: 40
            },
            {
                id: 2,
                label: "Description",
                value: "label",
                width: 200,
                expander: true,
                html: true,
                events: {
                    click({ data, column }) {
                        alert("description clicked!\n"   data.label);
                    }
                }
            },
            {
                id: 3,
                label: "Assigned to",
                value: "user",
                width: 130,
                html: true
            },
            {
                id: 3,
                label: "Start",
                value: task => dayjs(task.start).format("YYYY-MM-DD"),
                width: 78
            },
            {
                id: 4,
                label: "Type",
                value: "type",
                width: 68
            },
            {
                id: 5,
                label: "%",
                value: "progress",
                width: 35,
                style: {
                    "task-list-header-label": {
                        "text-align": "center",
                        width: "100%"
                    },
                    "task-list-item-value-container": {
                        "text-align": "center",
                        width: "100%"
                    }
                }
            }
        ]
    },
    locale: {
        name: "en",
        Now: "Now",
        "X-Scale": "Zoom-X",
        "Y-Scale": "Zoom-Y",
        "Task list width": "Task list",
        "Before/After": "Expand",
        "Display task list": "Task list"
    }
};
 
export default {
    name: "Gantt",
    components: {
        GanttElastic,
        GanttHeader
    },
    data() {
        return {
            tasks,
            options,
            dynamicStyle: {},
            lastId: 16
        };
    },
    methods: {
        addTask() {
            this.tasks.push({
                id: this.lastId  ,
                label:
                    '<a href="https://images.pexels.com/photos/423364/pexels-photo-423364.jpeg?auto=compress&cs=tinysrgb&h=650&w=940" target="_blank" style="color:#0077c0;">Yeaahh! you have added a task bro!</a>',
                user:
                    '<a href="https://images.pexels.com/photos/423364/pexels-photo-423364.jpeg?auto=compress&cs=tinysrgb&h=650&w=940" target="_blank" style="color:#0077c0;">Awesome!</a>',
                start: getDate(24 * 3),
                duration: 1 * 24 * 60 * 60 * 1000,
                percent: 50,
                type: "project"
            });
        },
        tasksUpdate(tasks) {
            this.tasks = tasks;
        },
        optionsUpdate(options) {
            this.options = options;
        },
        styleUpdate(style) {
            this.dynamicStyle = style;
        }
    }
};
</script>

运行成功就是这样的页面了。

当然他不一定符合你的需求比如表头设置,因此需要通过设置参数数据去实现不同的效果。

缺点:没有开发文档,英文的都没有,很多参数设置需要自己研究。如果改动不大的话还可以参考,跟需求差的多的话不建议使用~~

到此这篇关于vue中使用gantt-elastic实现可拖拽甘特图的文章就介绍到这了,更多相关vue可拖拽甘特图内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

vue中使用gantt-elastic实现可拖拽甘特图的示例代码的更多相关文章

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. vue使用动画实现滚动表格效果

    这篇文章主要为大家详细介绍了vue使用动画实现滚动表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. 关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧

  5. Vue子组件props从父组件接收数据并存入data

    这篇文章主要介绍了Vue子组件props从父组件接收数据并存入data的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Vue h函数的使用详解

    本文主要介绍了Vue h函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. VUE响应式原理的实现详解

    这篇文章主要为大家详细介绍了VUE响应式原理的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. iview+vue实现导入EXCEL预览功能

    这篇文章主要为大家详细介绍了iview+vue实现导入EXCEL预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部