highcharts中gantt甘特图的使用

示例图:
在这里插入图片描述
官方文档参考:highcharts gantt
甘特图示例
使用示例:

<template>
  <div id="container"></div>
</template>

<script>
export default {
  mounted() {
    let month = "2022-12";
    const moment = this.$moment;
    const WEEKS = {
      0: "日",
      1: "一",
      2: "二",
      3: "三",
      4: "四",
      5: "五",
      6: "六",
    };
    const data = [
      {
        name: "1#机1",
        start: new Date("2022-12-01 09:00:00").getTime(),
        end: new Date("2022-12-11 09:00:00").getTime(),
        completed: 0.25,
        y: 0,
      },
      {
        name: "1#机1",
        start: new Date("2022-12-13 09:00:00").getTime(),
        end: new Date("2022-12-18 09:00:00").getTime(),
        y: 0,
      },
      {
        name: "2#机2",
        start: new Date("2022-12-08 09:00:00").getTime(),
        end: new Date("2022-12-10 19:20:40").getTime(),
        y: 1,
      },
      {
        name: "3#机3",
        start: new Date("2022-12-06 09:00:00").getTime(),
        end: new Date("2022-12-21 09:00:00").getTime(),
        completed: {
          amount: 0.12,
          fill: "red",
        },
        y: 2,
      },
      {
        name: "4#机4",
        start: new Date("2022-12-21 09:00:00").getTime(),
        end: new Date("2022-12-31 09:00:00").getTime(),
        y: 3,
      },
    ];
    // 自定义主题
    const my_skin = {
      //颜色数组,默认从数组第一个元素取色
      // colors: [
      //   "#33FF33",
      //   "#f45b5b",
      //   "#7798BF",
      //   "#aaeeee",
      //   "#ff0066",
      //   "#eeaaee",
      //   "#55BF3B",
      //   "#DF5353",
      //   "#7798BF",
      //   "#aaeeee",
      // ],
      //背景
      chart: {
        backgroundColor: "#364766",
      },
      xAxis: {
        labels: {
          style: {
            color: "#f5f7fa",
          },
        },
      },
      yAxis: {
        title: {
          style: { color: "#f5f7fa" },
        },
        markable: { enabled: false }, //不显示每一个点的实心
        labels: {
          style: {
            color: "#f5f7fa",
          },
        },
      },
      global: {
        useUTC: false, // 不使用utc时间
      },
      lang: {
        noData: "暂无数据",
      },
    };
    // 全局配置,需要在图标初始化之前配置
    this.$highcharts.setOptions(my_skin, {
      global: {
        useUTC: false, // 不使用utc时间
      },
      lang: {
        noData: "暂无数据",
      },
    });
    let max = moment(this.queryForm.plan_date2).add(1, "days");
    this.$highcharts.ganttChart("container", {
      xAxis: [
        {
          min: moment(month).valueOf(),
          // max: moment(max).valueOf(), // 根据时间区间选择
          max: moment(month).endOf("month").valueOf(), // 根据每个月选择
          gridLineEidth: 1,
          minTickInterval: 1000 * 60 * 60 * 24,
          currentDateIndicator: true,
          tickPixelInterval: 70,
          grid: {
            borderWidth: 1, // 右侧表头边框宽度
            cellHeight: 35, // 右侧日期表头高度
          },
          labels: {
            align: "center",
            formatter: function () {
              return `${WEEKS[moment(this.value).day()]}`;
            },
          },
        },
        {
          gridLineWidth: 1,
          minTickInterval: 1000 * 60 * 60 * 24,
          tickPixelInterval: 100,
          grid: {
            borderWidth: 1, // 右侧表头边框宽度
            cellHeight: 30, // 右侧日期表头高度
          },
          labels: {
            align: "center",
            formatter: function () {
              return `${moment(this.value).format("M-D")} `;
            },
          },
        },
      ],
      yAxis: {
        type: "category",
        grid: {
          enabled: true,
          borderColor: "#e6e6e6",
          borderWidth: 1,
          columns: [
            {
              title: {
                text: "设备",
              },
              labels: {
                format: "{point.name}",
              },
            },
          ],
        },
      },
      tooltip: {
        formatter: function () {
          return `<div>
            设备:${this.point.name}  
            <br />
            开始时间:${moment(this.point.start).format("YYYY-MM-DD HH:mm:ss")}
            <br />
            结束时间:${moment(this.point.end).format("YYYY-MM-DD HH:mm:ss")}
          </div>`;
        },
      },
      series: [
        {
          data,
        },
      ],
      plotOptions: {
        series: {
          animation: false, // Do not animate dependency connectors
          dragDrop: {
            draggableX: false, // 横向拖拽
            draggableY: false, // 纵向拖拽
            dragMinY: 0, // 纵向拖拽下限
            dragMaxY: 3, // 纵向拖拽上限
            dragPrecisionX: 3600000, // 横向拖拽精度,单位毫秒
          },
          dataLabels: {
            enabled: true,
            format: "{point.name}",
            style: {
              cursor: "default",
              pointerEvents: "none",
              color: "#ffffff",
            },
          },
          allowPointSelect: true,
        },
      },
      exporting: {
        sourceWidth: 1000,
      },
      credits: {
        // 去掉右下角版权信息
        enabled: false,
      },
      chart: {
        spacingLeft: 10,
        spacingTop: 10,
      },
      pane: {
        background: [
          {
            backgroundColor: "red",
          },
        ],
      },
    });
  },
};
</script>
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Highgantt 是用纯 JavaScript 编写的甘特图控件 主要优势(功能特点) browsers兼容性 Highstock 可以在所有的移动设备及电脑上的浏览器使用,包括 iPhone,iPad 和 IE6 以上的版本。在 IOS 和 Android 系统 Highstock 支持多点触摸功能,因而可以给您提供极致的用户体验。在现代的浏览器使用 SVG 技术进行图形绘制,在低版本 IE 则使用 VML 进行图形绘制。 free非商业使用免费 在个人网站、学校网站及非盈利机构使用 Highstock 完全不需要经过我们的许可,直接可以任意使用! 商业网站或网站,请查看我们的 使用协议及价格。 open开源 Highstock 最重要的特点之一就是:无论免费版还是付费版,你都可以下载源码并可以对其进行编辑。 基于开源社区我们可以第一时间获取用户的需求、Bug 修复及吸收社区贡献。 no-backend纯 JavaScript Highstock 完全基于 HTML5 技术,不需要再客户端安装任何插件,如 Flash 或 Java。此外你也不用配置任何服务端环境,不需要 PHP、Tomcat、ASP.NET 等,只需要两个 JS 文件即可运行。 chart-types图表种类丰富 Highstock 支持直线图、折线图、面积图、面积曲线图、柱形图、散点图、蜡烛图(OHLC)、K线图、标签图、面积范围图、柱形范围图等多种图表, 其很多图表可以集成在同一个图形形成混合图 config-syntax简单的配置语法 在 Highstock 设置配置选项不需要任何高级的编程技术,所有的配置都是 JSON 对象,只包含用冒号连接的键值对、用逗号进行分割、用括号进行对象包裹。JSON 具有易于人阅读和编写,同时也易于机器解析和生成的特点。 动态交互性 Highstock 支持丰富交互性,在图表创建完毕后,可以用丰富的 API 进行添加、移除或修改数据列、数据点、坐标轴等操作。 结合 jQuery 的 ajax 功能,可以做到实时刷新数据、用户手动修改数据等功能,结合事件处理,可以做到各种交互功能。 范围选择器 在处理大数据集时,我们可能需要查看不同时间范围的数据。Highstock 提供了范围选择器,方便的用它来选择预设范围的时间,例如 1个月、一季度、1年等,你可以通过时间输入框来选择自己想要查看数据范围。 滚动条和导航器 通过滚动条和导航器可以更加直观的操作和查看特定范围的数据。 事件标记 通过添加标志数据列可以为数据相关的事件做标记和注释。 支持多坐标轴 多个数据进行对比这是非常常见的需求,Highstock 可以让你为每个类型的数据添加坐标轴,每个轴可以定义放置的位置,所有的设置都可以独立生效,包括旋转、样式设计和定位,当然也支持多个数据共用一个坐标轴。 tooltip数据提示框 当鼠标划过图形时,Highstock 可以将数据点或数据列的信息展示在提示框,并且提示框会跟随用户的鼠标;我们做了大量工作,可以智能的显示离鼠标最近的点或被遮盖点的信息。 datetime时间轴 Highstock 对时间轴的处理非常智能,可以精确的计算出月、周、日、小时、分钟等时间刻度的位置。 data grouping数据分组与合并 如果数据集包含 10 万个,浏览器对每个点进行计算并渲染的话效率会非常低。Highstock 具有数据分类功能,可以以飞速的进行数据分组;放大至小范围的数据是会重新分组,因为你可以查看高度清晰的数据又不失效率和速度。 exporting导出和打印 Highstock 支持导出功能,用户可以一键导出 PNG、JPEG、PDF 或 SVG 文件,通过插件可以实现导出为 Excel 文件功能;另外,用户还可以从网页上直接打印图表。 zooming缩放和平移 除了通过滚动条或导航器控制放大和平移功能,你还可以通过鼠标和手指来进行这两个操作。 ajax方便加载外部数据 Highstock 的数据是 JavaScript 数组或对象,这些数据可以是本地的配置对象,独立的数据文件(JSON、CVS)甚至是不同的网站上定义。另外,这些数据可以用任何形式处理好并加载到 Highstock
下面是一个使用 React 和 Highcharts甘特图的示例代码: ```jsx import React, { Component } from 'react'; import Highcharts from 'highcharts'; import HighchartsGantt from 'highcharts/modules/gantt'; import HighchartsMore from 'highcharts/highcharts-more'; import moment from 'moment'; // 初始化 Highcharts 模块 HighchartsGantt(Highcharts); HighchartsMore(Highcharts); class GanttChart extends Component { componentDidMount() { // 初始化 Highcharts Gantt 图表 this.chart = Highcharts.ganttChart(this.container, { title: { text: '甘特图' }, xAxis: { currentDateIndicator: true, min: moment().startOf('day').valueOf(), max: moment().add(2, 'weeks').startOf('day').valueOf() }, yAxis: { uniqueNames: true }, series: [{ name: '项目', data: [{ name: '任务1', start: Date.UTC(2021, 4, 1), end: Date.UTC(2021, 4, 7), completed: 0.25 }, { name: '任务2', start: Date.UTC(2021, 4, 8), end: Date.UTC(2021, 4, 14), completed: 0 }] }] }); } componentWillUnmount() { // 销毁 Highcharts 图表实例 this.chart.destroy(); } render() { return ( <div ref={el => this.container = el}></div> ); } } export default GanttChart; ``` 在这个示例,我们首先导入了 React、Highcharts 和 moment 库,然后初始化了 Highcharts Gantt 图表实例,并且使用 `componentDidMount` 生命周期钩子函数将图表挂载到 DOM 上。在 `componentWillUnmount` 生命周期钩子函数,我们将 Highcharts 图表实例销毁以释放资源。 最后,我们在 `render` 函数返回一个 `div` 元素,用于渲染 Highcharts Gantt 图表的容器。您可以根据自己的需求更改配置和数据,以适配您的项目。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值