echarts bar chart pie chart switching

Code:

<template>
  <div class="wrap">
    <div  v-for="(item,index) in cuurentData" :key="index">
      <div class="chartsBar" :id="`chartsBar${index}`" :style="{ width: '315px', height: '270px' }" :v-show="show['barShow'+index]"></div>
      <div class="chartsPie" :id="`chartsPie${index}`" :style="{ width: '315px', height: '270px' }" :v-show="show['pieShow'+index]"></div>
    </div>
  </div>
</template>

<script>
export default {
  props:['chartData'],
  data() {
    return {
      show:{},
      cuurentData:[],
      pieShow:{}
    };
  },
  watch:{
    chartData:{
      handler(newValue){
        this.cuurentData = newValue;
        if(this.cuurentData.length>0){
          for (let i = 0; i < this.cuurentData.length; i++) {
            this.$set(this.show,'barShow'+i,false);
            this.$set(this.show,'pieShow'+i,false);
          }
          this.$nextTick(()=>{
            this.initChart()
          })
        }
      },

      deep:true
    }
  },
  created() {},
  mounted() {},
  methods: {
    // 折线、柱状
    initChart(){
      let that = this;
      let optionBar;
      let optionPie;
      let chartBar;
      let chartPie;
      let colors =['rgba(166, 83, 90, 1)','rgba(254, 215, 26, 1)','rgba(239, 130, 160, 1)','rgba(183, 63, 160, 1)',
        'rgba(92, 30, 25, 1)','rgba(131, 167, 141, 1)','rgba(128, 118, 163, 1)','rgba(36, 116, 181, 1)',
        'rgba(142, 139, 88, 1)','rgba(186, 207, 101, 1)', 'rgba(238, 44, 37, 1)','rgba(59, 129, 140, 1)',
        'rgba(19, 72, 87, 1)','rgba(153, 164, 157, 1)','rgba(55, 182, 65, 1)','rgba(224, 147, 0, 1)',
        'rgba(24, 45, 180, 1)','rgba(125, 190, 255, 1)','rgba(100, 88, 34, 1)','rgba(239, 111, 72, 1)',
        'rgba(86, 88, 91, 1)','rgba(156, 21, 8, 1)','rgba(51, 91, 63, 1)','rgba(85,239,229,1)',
        'rgba(99,243,136,1)'];
      for (let i = 0; i < this.cuurentData.length; i++) {
        let barSeries = []
        for (let j = 0; j < this.cuurentData[i].data.yaxisData.length; j++) { // 柱状图系列数据处理
          barSeries.push({
            type: 'bar',
            name: this.cuurentData[i].data.yaxisData[j].name,
            data: this.cuurentData[i].data.yaxisData[j].data,
            itemStyle: {
              normal: {
                color: function (d) {
                  // return "#"+Math.floor(Math.random()*(256*256*256-1)).toString(16);
                  return colors[Math.floor(Math.random() * 26)]
                }
              }
            }
          })
        }

        if(this.cuurentData[i].data.pieData){ // 是否显示饼图按钮
          this.$set(this.pieShow, 'myPieShow' + i, true )
        }else {
          this.$set(this.pieShow, 'myPieShow' + i, false )
        }
        chartBar = this.$echarts.init(document.getElementById(`chartsBar${i}`));
        chartPie = this.$echarts.init(document.getElementById(`chartsPie${i}`));
        // 初始让所有的饼图隐藏位置
        document.getElementById('chartsPie'+i).style.display = 'none';
        // 柱状图配置
        optionBar = {
          title: {
            text: this.cuurentData[i].title,
            subtext:this.cuurentData[i].subTitle,
            textStyle:{
              fontSize:16,
              lineHeight:10,
            },
            subtextStyle:{
              fontSize:14,
              color:'#545454',
              fontWeight:'bold',
            },
            top:5
          },
          tooltip: {
            trigger: 'axis',
            position: ['10%', '50%'],
          },
          grid:{
            left:37,
            bottom:'21%',
            top:'22%'
          },
          toolbox: {
            show: true,
            itemSize:18,
            showTitle:true,
            feature: {
              magicType: { show: true, type: ['line', 'bar'] },
              myPie: {
                show: this.pieShow['myPieShow'+i], // 切换饼图的按钮是否显示
                title: '切换为饼状图',
                icon: 'path://M512 0a512 512 0 1 0 512 512A512 512 0 0 0 512 0z m460.1856 489.8816H537.6V52.0192a461.2096 461.2096 0 0 1 434.5856 437.8624z m0 51.2a458.752 458.752 0 0 1-93.3888 249.4464L582.0416 541.0816zM512 972.8a460.8 460.8 0 0 1-25.6-921.6v464.2816a25.8048 25.8048 0 0 0 9.8304 20.48L845.6192 829.44a459.776 459.776 0 0 1-333.6192 143.36z',
                onclick: ()=> {
                  chartPie.setOption(optionPie);
                  this.$nextTick(()=>{
                    document.getElementById('chartsBar'+i).style.display = 'none';
                    document.getElementById('chartsPie'+i).style.display = 'block';
                  })
                }
              },
              restore: { show: true },
            },
            position:[20,20]
          },
          calculable: true,
          xAxis: [
            {
              type: 'category',
              data: this.cuurentData[i].data.xaxisData,
              axisLabel: {
                interval:0,
                formatter:function(value) {
                  return value.split("").join("\n");
                }
              }
            }
          ],
          yAxis: {
            type: 'value',
            axisLabel: {
              color: '#444343',
              formatter: function (value, index) {
                // value大于10000时除以10000并拼接w,小于1000按原格式显示
                if (value >= 10000) {
                  value = value / 10000 + 'w';
                } else if (value < 10000) {
                  value;
                }
                return value;
              },
            },
          },
          series: barSeries,
        };

        // 饼状图配置
        optionPie = {
          title: {
            text: this.cuurentData[i].title,
            subtext:this.cuurentData[i].subTitle,
            textStyle:{
              fontSize:16,
              lineHeight:10,
            },
            subtextStyle:{
              fontSize:14,
              color:'#545454',
              fontWeight:'bold',
            },
            top:5
          },
          tooltip: {
            position: ['10%', '50%'],
            formatter: '{a}: <br/>{b} : {c} ({d}%)',
          },
          toolbox: {
            show: true,
            itemSize:18,
            showTitle:true,
            feature: {
              myBar: {
                show: true,
                title: '切换为柱状图',
                icon: 'image://data:image/png;base64,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',
                onclick: () => {
                  chartBar.setOption(optionBar);
                  this.$nextTick(() => {
                    document.getElementById('chartsBar' + i).style.display = 'block';
                    document.getElementById('chartsPie' + i).style.display = 'none';
                  })
                }
              },
              myPie: {
                show: true,
                title: '切换为饼状图',
                icon: 'path://M512 0a512 512 0 1 0 512 512A512 512 0 0 0 512 0z m460.1856 489.8816H537.6V52.0192a461.2096 461.2096 0 0 1 434.5856 437.8624z m0 51.2a458.752 458.752 0 0 1-93.3888 249.4464L582.0416 541.0816zM512 972.8a460.8 460.8 0 0 1-25.6-921.6v464.2816a25.8048 25.8048 0 0 0 9.8304 20.48L845.6192 829.44a459.776 459.776 0 0 1-333.6192 143.36z',
                onclick: function () {
                }
              },
              restore: {show: true},
            }
          },
          calculable: true,
          series:
            [
            {
              name: "人口数",
              type: 'pie',
              radius: '50%',
              top:40,
              data: this.cuurentData[i].data.pieData,
              itemStyle: {
                normal: {
                  color: function(d){
                    // return "#"+Math.floor(Math.random()*(256*256*256-1)).toString(16);
                    return colors[Math.floor(Math.random()*26)]
                  }
                }
              }
            }
          ]
        };

        // 使用刚指定的配置项和数据显示图表。
        chartBar.setOption(optionBar);
        chartPie.setOption(optionPie);
      }
    },
  }
};
</script>

<style scoped>
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.wrap,
.chartsBar,
.chartsPie{
  width: 100%;
  height: 260px;
}
</style>

Rendering:

Guess you like

Origin blog.csdn.net/weixin_46029283/article/details/131396435