vue利用echarts绘制项目进度条,实例详解

在这里插入图片描述
如图所示,想要实现清晰表达当前项目的进度,还要清晰的表达当前项目进度的4种状态:当前进度,是否落后,是否超前,正确进度。可以使用百度的免费插件echarts。官网地址:https://echarts.apache.org/zh/index.html

里面文档和api都很齐全,如果还是不太懂,可以去看看echarts社区的开发者开源的各种实例,非常齐全。地址:点击进入

在这里插入图片描述
百度echarts安装我这里就不赘述,有大量的资料可以查询。下面我们就开始开发我们的项目进度条。

一、封装一个进度条的echarts公共组件

在这里插入图片描述

<!--进度条-->
<template>
  <div class="c_chart" ref="progressChartRef"></div>
</template>
<script>
import echarts from "echarts";
export default {
  props: {
    chartData: {
      default: () => {
        return {};
      },
    },
  },
  data() {
    return {
      chart: null,
    };
  },
  computed: {
    queryChartData() {
      return this.chartData || [];
    },
  },
  mounted() { 
    this.initChart();
  },
  methods: {
    initChart() {
      // 根据状态值 设置颜色
      let chartColor = {};
      if (this.chartData.jd === "进度落后") {
        chartColor = "#FF7A06"
      } else if (this.chartData.jd === "进度刚好") {
        chartColor = "#38C8B5"
      } else if (this.chartData.jd === "进度超前") {
        chartColor = "#2D6EFB"
      }
      // 基于准备好的dom,初始化echarts
      this.chart = echarts.init(this.$refs["progressChartRef"]);
      let option = {
        grid: {
          left: "0",
          right: "0",
        },
        xAxis: {
          show: false,
          type: "value",
        },
        yAxis: [
          {
            splitLine: {
              show: false,
            },
            axisTick: {
              show: false,
            },
            axisLine: {
              show: false,
            },
            data: [""], //数据点名称
          },
        ],
        legend: {
          orient: "vertical",
          x: "left",
          show: false,
        },
        series: [
          {
            name: "计划完成",
            type: "bar",
            silent: true, //取消点击高亮
            zlevel: 1,
            itemStyle: {
              normal: {
                color: "rgba(255,122,6,0.2)", 
              },
            },
            barWidth: 16,
            data: [this.chartData.fjhwc], //值
          },
          {
            name: "实际完成",
            type: "bar",
            silent: true, //取消点击高亮
            zlevel: 2,
            itemStyle: {
              normal: {
                color: chartColor
              },
            },
            barWidth: 16,
            data: [this.chartData.fsjwc], //值
          },
          {
            name: "总占比",
            type: "bar",
            silent: true, //取消点击高亮
            barWidth: 16,
            barGap: "-100%",
            data: [100],
            itemStyle: {
              normal: {
                color: "#1D2639", 
              },
            },
          },
        ],
      };
      this.chart.setOption(option);
    },
  },
  beforeDestroy() {
    if (this.chart) {
      this.chart.clear();
      this.chart.dispose();
    }
  },
};
</script>
<style lang="scss" scoped>
</style>

二、再父组件调用这个echarts子组件

在这里插入图片描述

这个时候是没有当前正确进度的白色竖线的,如果想要实现在当前进度这个百分百有个小竖线,如图所示。

在这里插入图片描述

我们可以在同级写一个div,然后,设置一个相对定位,距离左侧的距离就是他的百分比

在这里插入图片描述

在这里插入图片描述
如此,便能清晰的展示这个当前项目进度的4种状态。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值