ecahrts饼状图vue封装

效果图如下:

新建一个pie.vue文件

<template>
  <div class="common-wrapper">
    <div class="common-wrapper" id="pie"></div>
  </div>
</template>

<script>
export default {
  name: '',
  props: {
    m2R2Data: {
      type: Array
    }
  },
  data () {
    return {
    }
  },

  components: {},

  computed: {},

  beforeMount () {},

  mounted () {
    this.drawPie()
  },

  methods: {
    drawPie () {
      let myChart = this.$echarts.init(document.getElementById('pie'))
      let _that = this
      let _totalNum = this.getTotal(this.m2R2Data)
      myChart.setOption({
        backgroundColor: '#fff',
        title: [
          {
            text: _totalNum,
            subtext: '总数',
            textStyle: {
              fontSize: 28,
              color: '#666666'
            },
            subtextStyle: {
              fontSize: 16,
              color: '#666666'
            },
            textAlign: 'center',
            x: '34.5%',
            y: '44%'
          }],
        tooltip: {
          trigger: 'item',
          formatter: function (parms) {
            var str = parms.seriesName + '</br>' +
                    parms.marker + '' + parms.data.name + '</br>' + '数量:' + parms.data.value + '</br>' + '占比:' + parms.percent + '%'
            return str
          }
        },
        legend: {
          type: 'scroll',
          icon: 'circle',
          orient: 'vertical',
          left: '70%',
          align: 'left',
          top: 'middle',
          textStyle: {
            color: '#8C8C8C'
          },
          height: 250,
          formatter: function (name) {
	        	let oa = _that.m2R2Data
	        	// let num = oa[0].value
	        	for (var i = 0; i < _that.m2R2Data.length; i++) {
              if (name == oa[i].name) {
                return name + '     ' + oa[i].value + '     ' + (oa[i].value / _totalNum * 100).toFixed(1) + '%'
              }
	        	}
	        }
        },
        series: [
          {
            name: '标题',
            type: 'pie',
            center: ['35%', '50%'],
            radius: ['70%', '85%'],
            clockwise: false, // 饼图的扇区是否是顺时针排布
            avoidLabelOverlap: false,
            label: {
              normal: {
                show: false
              }
            },
            data: this.m2R2Data
          }
        ]
      })
    },
    getTotal (val) {
      let totalNum = 0
      for (let i = 0; i < val.length; i++) {
        totalNum = totalNum + val[i].value
      }
      return totalNum
    }
  },

  watch: {}

}

</script>
<style lang='' scoped>

</style>

在父组件引入

import pie from '@/components/echarts/pie.vue'

别忘记在父组件components中加入pie

在父组件需要引入的地方写下:

<pie :m2R2Data=ecahrtsData></pie>

最后数据格式

ecahrtsData: [

{ value: 10, name: '在线', itemStyle: { color: '#36d996' } },

{ value: 10, name: '离线', itemStyle: { color: '#fcd800' } }

],

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值