echarts甘特图

工单甘特图

最近项目需要工单的甘特图,所以上echarts官网搜了一遍没有关于甘特图的案例,于是自己动手写了一个甘特图,当然 ,一部分是从各个网站拆分过来的,最后组成了自己的工单甘特图。

写出来后的效果

在这里插入图片描述

直接上代码

<template>
  <el-card class="box-card">
    <div slot="header" class="clearfix">
      <i style="font-size: 20px;">工单甘特图</i>
      <div class="grol">
        <div style="display: inline-block;background: #f6071c;" class="man"></div> 小于3<div style="display: inline-block;background: #faa019" class="man"></div> 小于5<div style="display: inline-block;background: #0aeabc;" class="man"></div> 大于4</div>
    </div>
    <div style="text-align: center">
      <div id="renwu" style="width: 100%;height: 650px">任务进度</div>
    </div>
  </el-card>
</template>

<script>
import * as echarts from 'echarts'
export default {
  name: 'TaskProgress',
  data() {
    let projectItem = ['任务一','任务二','任务三','任务四','任务五', '任务六'],
      projectItemStart = ['2021-01-01 12:32:09','2021-01-02 12:32:09','2021-01-10 12:32:09','2021-01-14 12:32:09','2021-01-03 12:32:09','2021-01-18 12:32:09'],
      projectItemEnd = ['2021-01-03 10:32:09','2021-01-12 06:32:09','2021-01-16 16:32:09','2021-01-17 15:32:09','2021-01-09 16:32:09','2021-01-23 18:32:09'];
    let projectItemStartValue = projectItemStart.map((item)=>{
      return new Date(item).valueOf() // 在这把日期转换成数字
    })
    let projectItemDuringValue = projectItemEnd.map((item,i)=>{
      return new Date(item).valueOf()-projectItemStartValue[i]
    })

    let dateMin = projectItemStartValue[0];
    return {
      option3: {

        title: {
          subtext: '任务日期'
        },
        tooltip: {
          trigger: 'axis',
          formatter: function (params) {
            const tar = params[1];
            let start;
            let enDate;
            for (let i=0; i<projectItem.length; i++){
              if (tar.axisValue === projectItem[i]){
                start=projectItemStart[i];
                enDate=projectItemEnd[i];
              }
            }
            return tar.name + '<br/>' +
              tar.seriesName + ' : ' + Math.round(tar.value/(1000*60*60*24))+'天'+'<br/>'+
              '开始:'+start+'<br/>'+
              '结束:'+enDate;
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '15%',
          containLabel: true
        },
        yAxis: {
          type: 'category',
          splitLine: {
            show: false
          },
          data: projectItem
        },
        xAxis: {
          type: 'value',
          min: dateMin,
          axisLabel: {
            color: '#333', // 坐标轴文字颜色
            formatter: function (param) {
              let date = new Date(param);
              let dateLabel = date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate(); //x轴显示的日期格式
              return dateLabel;
            }
          }
        },
        series: [{
          name: 'Placeholder',
          type: 'bar',
          stack: 'Total',
          itemStyle: {
            borderColor: 'transparent',
            color: 'transparent'
          },
          emphasis: {
            itemStyle: {
              borderColor: 'transparent',
              color: 'transparent'
            }
          },
          data: projectItemStartValue
        },
          {
            name: '周期',
            type: 'bar',
            stack: 'Total',
            barWidth: '30%',
            itemStyle:{
              normal: {
                color: function (params) {
                  var dater = params.data/(1000*60*60*24)
                  //自定义颜色
                  let number ;
                  if(dater < 3){
                    number=0
                  }else if (dater < 5){
                    number = 1
                  }else {
                    number=2
                  }
                  const colorList = [
                    '#f6071c', '#faa019', '#0aeabc'
                  ];
                  return colorList[number]
                }
              }
            },
            data: projectItemDuringValue
          }
        ]
      }
    }
  },
      mounted() {
      // 基于准备好的dom,初始化echarts实例
      setTimeout(() => {
        let chartDom = document.getElementById('renwu')
        let myChart = echarts.init(chartDom)
        // 绘制图表
        myChart.setOption(this.option3)
      }, 400)
    }
  }
</script>

<style scoped>
.grol{
  text-align: right;
  float: right;
  margin-right: 10%
}
.man{
  width: 40px;
  height: 17px;
  margin-left: 10px;
}
</style>

有看不懂的可以联系

还是那句话为中华人民服务。

微信:mayir_1
  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts 大屏页面模板是一种用于数据可视化展示的工具。它通过 Echarts 这个强大的 JavaScript 图表库,结合页面模板的搭建,可以快速、简单地建立一个专业的数据大屏展示页面。在模板中,我们可以根据需要插入各种类型的图表,比如折线图、柱状图、饼图、地图等,用于展示各种数据信息。 Echarts 大屏页面模板的优势在于它提供了丰富的数据可视化图表,并且可以灵活的进行定制和调整。同时,Echarts 还支持大规模数据的展示,可以处理数千甚至数十万条数据,无论是实时数据还是历史数据都可以得到清晰直观的展示。另外,Echarts 还提供了丰富的交互功能,比如可以通过点击、拖拽、鼠标悬停等方式实现交互操作,让用户可以更加直观、方便地进行数据的查看和分析。 使用 Echarts 大屏页面模板,能够帮助用户更好地展示数据信息,从而更好地进行数据分析和决策。无论是企业的数据监控大屏、展会的数据展示、还是政府的数据公示,都可以通过 Echarts 大屏页面模板来实现。同时,Echarts 作为一个开放性的工具,也支持各种数据源的接入,比如数据库、接口数据、文件数据等,能够满足不同场景的数据展示需求。 总的来说,Echarts 大屏页面模板是一种功能强大、灵活定制的数据可视化展示工具,可以帮助用户快速、高效地建立自己的数据大屏展示页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值