饼图遍历

24 阅读1分钟

需求:

Snipaste_2023-11-06_14-17-19.png

思路:一个一个添加过于麻烦,直接遍历数据源,重复渲染饼图

注意事项:因为需要遍历饼图,所以不能用id或者ref,而是需要使用class

  <div class="career-model" >
       <div v-for="(item,index) in tankInfoList" 
            :key="index" 
            class="career-model-item" >
               <div style="width:40%">{{item.name }} </div>
               <div class="career-chart-style">
                   <div class="career-chart"></div>
                </div>
                <div class="career-percentage">{{item.number }}%  </div>
         </div>
     </div>
.career-model{
    width: 400px;
    height: 140px;
    position: absolute;
    left: 200px;
    top: 20px;
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
}
.career-model-item{
    display: flex;
    align-items: center;
    width: auto;
    height: 20%;
    position: relative;
}
.career-chart-style{
  width: 60px;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}
.career-chart{
  width: 100%;
  height: 100%;
}
.career-percentage{
  width: 20%;
  height: auto;
  position: absolute;
  right: 44px;
  top: 0;
  display: flex;
  justify-content: flex-start;
  align-items: center;
}
//数据源
  tankInfoList:[
              {
                  name:'汽油',
                  number:0.2,
                  id:1
              },
              {
                name:'轻循环油',
                number:0.2,
                id:3
              },
              {
                name:'混合芳烃',
                number:0.7,
                id:5
              },
              {
                name:'生物柴油',
                number:21.6,
                id:7
              },
              {
                name:'甲醇',
                number:42.2,
                id:9
              },
              {
                  name:'燃料油',
                  number:12,
                  id:2
              },
​
              {
                  name:'正丁烷',
                  number:19.7,
                  id:4
              },
​
              {
                  name:'煤油',
                  number:0.3,
                  id:6
              },
​
              {
                  name:'其他',
                  number:3,
                  id:8
              },
​
          ],
//遍历渲染饼图
careerData(){
          let careerEChart = document.getElementsByClassName('career-chart');
          for(let i =0;i<careerEChart.length;i++){
            let careerChart = echarts.init(careerEChart[i]);
            let chartCareerOption = {
              color: ["#f2e5fe", "#aa75ed"] /*饼状图的颜色*/,
              tooltip: {
                show:false,
                trigger: "item",
                formatter: "{b}({d}%)" /*饼状图触碰之后显示的注释文字*/,
              },
              legend: {
                show:false,
              },
              series: [
                {
                  type: "pie", //饼状图
                  center: ["22%", "50%"], //显示位置
                  name: "",
                  animation:false,
                  radius: ["0%", "82%"] /*空心圆的占比*/,
                  silent:true,
                  data: [  {
                    value:100 - Number(this.tankInfoList[i].number),
                    name: "",
                  },
                    {
                      value:  Number(this.tankInfoList[i].number),
                      name: "",
                    },],
                  avoidLabelOverlap: false,
                  label: {
                    emphasis: {
                      show: false /*空心文字出现*/,
                    },
                  },
                  labelLine: {
                    normal: {
                      show: false,
                    },
                  },
                },
              ],
            };
            const option = deepClone(chartCareerOption);
            option && careerChart.setOption(option);
          }
​
        },
//挂载阶段调用
 mounted(){
        this.careerData();
    },

实际效果:

Snipaste_2023-11-06_14-16-43.png