多级表头的显示和动态对接数据

223 阅读2分钟

一,el-tabe的表格封装多级表头

浅谈一下,我们公司是自己封装的表格,在el-table的基础上进行封装使用的,因此需要一个表头的label的封装和展示 下面是封装的数据;

export const double = [{
    type: 'index',
    label: '序号',
    key: '序号',
    showOverflowTooltip: true,
    width: 65,
    align: 'center',
  },
{
    label: '石油 煤炭及其他燃料加工业',
    align: 'center',
    width: 260,
    showOverflowTooltip: true,
    children: [{
        key: 'tradeCodeRate0',
        label: '占比',
        align: 'center',
        width: 120,
        showOverflowTooltip: true,
      },
      {
        key: 'tradeConsNum0',
        label: '户数',
        align: 'center',
        width: 120,
        showOverflowTooltip: true,
      }
    ]
  },
  {
    label: '化学原料和化学制品制造业',
    width: 220,
    align: 'center',
    showOverflowTooltip: true,
    children: [{
        key: 'tradeCodeRate1',
        label: '占比',
        align: 'center',
        width: 120,
        showOverflowTooltip: true,
      },
      {
        key: 'tradeConsNum1',
        label: '户数',
        align: 'center',
        width: 120,
        showOverflowTooltip: true,
      }
    ]
  },

  {
    label: '黑色金属冶炼和压延加工业',
    width: 260,
    align: 'center',
    showOverflowTooltip: true,
    children: [{
        key: 'tradeCodeRate3',
        label: '占比',
        align: 'center',
        width: 120,
        showOverflowTooltip: true,
      },
      {
        key: 'tradeConsNum3',
        label: '户数',
        align: 'center',
        width: 120,
        showOverflowTooltip: true,
      }
    ]
  },
]

这个是多级表头的展示,在js里面也是需要处理一下的

方法中methods:{
    setColSpan() {
      // console.log(document.getElementsByClassName("el-table__header"))
      // 获取表头的所有单元格
      var x = 
      document.getElementsByClassName('el-table__header')[0].rows[0].cells;
      // // 将第二列表头单元格的colSpan设为2
      x[7].colSpan = 2;
      x[10].colSpan = 2;
      x[14].colSpan = 2;
    },
    }

因为是进入此页面就要显示,因此需要处理一下此函数

  mounted() {
    this.$nextTick(function () {
      this.setColSpan();
    });
  },

这样一个多级表头就可以正常显示了

关于后台获取的数据格式,我获取到的是数组嵌套数组中的数据 类似于这样

res.data.list = {
 a:'',
 b:'',
 c:'',
 info:[
   {
     new:'',
     name:"",
   },
  {
     new:'',
     name:"",
   },
 {
     new:'',
     name:"",
   },
 ]
}


因此只需要把数组中的数组展开放到第一层数组就可以了,并且由于字段名相同,只好另起一个名字进行展示数据。 需要把获取的数据进行以下处理即可

     this. tableData = [],
      res.data.list = [上述数组格式即可],
     this.tableData = res.data.list.map((item) => {
            let obj = {};
            let tradeInfoList = item.Info;
            Info.forEach((v, index) => {
              obj['new' + index] = v.new + '%';
              obj['name' + index] = v.name;
            });
            return {
              ...item,
              ...obj,
            };
          });
        // console.log(this.tableData);

以上处理之后,数组中既可以保留原数组中的数据,又新增了需要的数据,即把数据展开,无需进行push或者扩展运算就可以得到想要的数据。

仅供参考~~~~~