vue项目中使用ElementUI-Table嵌套Echarts柱状图

项目场景:

项目场景:在VUE项目的一个页面中,需要使用Echarts中的柱状图进行数据可视化处理。 要求:每个柱状图的粗细要相等,颜色要自动使用不同颜色,特殊数据要固定黑色。 难点:页面中需要有多个柱状图,类似于表格里嵌套柱状图。 解决办法,使用v-for循环生成柱状图容器,使用v-bind动态绑定柱状图容器id值。


解决思路

按照Echarts的官方文档在项目中引入,使用el-table,通过v-for生成多个柱状图,放在table的列中,每个柱状图的div容器使用v-bind动态绑定id值。

html代码:

<el-table :data="projectList" id="proFunction" style="width: 100%;" max-height="670">
	<el-table-column v-for="(value,index) in functionList" :key="index" align=center min-width="230">
        <template slot-scope="scope">
          <!-- 柱状图放置区域 -->
          <div :id="scope.row.projectName+_+value.name" style="width:100%;height:200px;border:1px solid skyblue;margin: 0 auto;"></div>
        </template>
      </el-table-column>
</el-table>

js代码:

import echarts from echarts
methods: {
          
   
//柱状图数据处理和渲染
zhu () {
          
   
      let that = this
      let option = {
          
   }
      console.time(柱状图绘制)
      console.log(this.projectList)
      console.log(this.functionList)
      //数据处理部分
      //柱状图渲染部分
      option = {
          
   
              xAxis: {
          
   
                type: category,
                data: deptName,//横坐标名称集合
              },
              yAxis: {
          
   
                type: value
              },
              series: [
                {
          
   
                  data: deptUserNum,//纵坐标数据集
                  type: bar,
                  barWidth: 15,//柱子宽度
                  itemStyle: {
          
   
                    normal: {
          
   
                      label: {
          
   
                        show: true,		//开启数值显示
                        position: top,	//在上方显示
                        textStyle: {
          
   	    //数值样式
                          color: black,
                          fontSize: 16
                        }
                      },
                      color: function (params) {
          
   
                        // 定义颜色集合
                        var colorList = [
                          #C6E579, #B5C334, #FCCE10, #E87C25, #27727B,
                          #FE8463, #9BCA63, #FAD860, #F3A43B, #60C0DD,
                          #D7504B, #C1232B, #F4E001, #F0805A, #26C0C0
                        ];
                        //根据数据量返回颜色列表
                        if (params) {
          
   
                          if ($.inArray(params.name, that.Bgs) == -1) {
          
   
                            return colorList[params.dataIndex]
                          } else {
          
   
                          //特殊情况,如果横坐标数据名在特殊集合中,统一使用黑色渲染
                            return black
                          }
                        }
                      },
                    }
                  },
                  markLine: {
          
    // 设置平均线
                    data: [
                      {
          
   
                        type: "average",
                        name: "我是平均值",
                        color: "#baf"
                      }
                    ]
                  },
                }
              ]
            };
            //渲染
            myChart.setOption(option)
      }

效果展示:部分数据涉及公司保密,已打码

经验分享 程序员 微信小程序 职场和发展