element table合并单元格

element ui中的table表格数据是动态生成的,如果要求我们对单元格进行合并,这个时候需要借助一个api,:span-method="arraySpanMethod",arraySpanMethod为我们自己编写的合并单元格的方法。

先在data中定义数据,合并几列就定义几个数组和索引

data() {
  return {
    tableData: [],//表格数据
    batchNoInArr:[],//合并入库编号
    batchNoInIndex:0,//合并入库编号索引
    supplierNameArr:[],//合并供应商
    supplierNameIndex:0,//合并供应商索引
  }
}

定义合并的函数,并编写代码,merge方法中的data是table的数据源,逻辑是以第一行为基准一层层对比 

// 初始化合并行数组
mergeInit() {
  this.batchNoInArr = []; //合并入库编号
  this.batchNoInIndex = 0;//合并入库编号索引
  this.supplierNameArr = []; //合并供应商
  this.supplierNameIndex = 0;//合并供应商索引
},
//  合并表格
merge() {
  this.mergeInit();
  let data = this.tableData;
  if (data.length > 0) {
    for (var i = 0; i < data.length; i++) {
      if (i === 0) {
        //第一行必须存在,以第一行为基准
        this.batchNoInArr.push(1); //合并入库编号
        this.batchNoInIndex = 0;
        this.supplierNameArr.push(1);//合并供应商
        this.supplierNameIndex = 0;
      } else {
        // 判断当前元素与上一元素是否相同
        // 合并入库编号
        if (data[i].batchNoIn == data[i - 1].batchNoIn) {
          this.batchNoInArr[this.batchNoInIndex] += 1;
          this.batchNoInArr.push(0);
        } else {
          this.batchNoInArr.push(1);
          this.batchNoInIndex = i;
        }
        //合并供应商,注意if条件以前面列为基准
        if (data[i].batchNoIn == data[i - 1].batchNoIn && data[i].supplierName == data[i - 1].supplierName) {
          this.supplierNameArr[this.supplierNameIndex] += 1;
          this.supplierNameArr.push(0);
        } else {
          this.supplierNameArr.push(1);
          this.supplierNameIndex = i;
        }
        
      }
    }
  }
},
//合并方法
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
  if (columnIndex === 0) {
    //第一列 入库编号
    const row1 = this.batchNoInArr[rowIndex];
    const col1 = row1 > 0 ? 1 : 0;
    return {
      rowspan: row1,
      colspan: col1
    };
  }else if (columnIndex === 1) {
    // 第二列 供应商
    const row2 = this.supplierNameArr[rowIndex];
    const col2 = row2 > 0 ? 1 : 0;
    return {
      rowspan: row2,
      colspan: col2,
    };
  } 
},
<el-table :data="tableData" :span-method="objectSpanMethod"></el-table>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element Plus是一套基于Vue.js 2.0的桌面端组件库,其中的table表格组件支持合并单元格。在Element Plus中,我们可以通过设置span-method属性来自定义合并单元格的方法。具体来说,我们需要在data中定义一个方法,该方法接收两个参数:row和column,分别表示当前单元格所在的行和列。在该方法中,我们可以根据需要返回一个对象,该对象包含两个属性:rowspan和colspan,分别表示需要合并的行数和列数。例如,如果我们需要将第一列中相同的单元格合并,可以编写如下的span-method方法: ``` spanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { let rowspan = 1; for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (this.tableData[i][columnIndex] === this.tableData[rowIndex][columnIndex]) { rowspan++; } else { break; } } return { rowspan, colspan: 1 }; } } ``` 在上述代码中,我们首先判断当前单元格是否为第一列,如果是,则遍历该列下面的所有单元格,找到相同的单元格并计算需要合并的行数,最后返回一个包含rowspan和colspan属性的对象即可。 除了自定义span-method方法外,我们还可以通过设置column的属性来实现合并单元格。具体来说,我们可以在column中设置prop属性来指定需要合并的列,然后在需要合并的单元格中设置rowspan和colspan属性即可。例如,如果我们需要将第一列中相同的单元格合并,可以编写如下的column配置: ``` columns: [ { label: '入库编号', prop: 'batchNo', rowspan: ({ row, column, rowIndex, columnIndex }) => { if (columnIndex === 0) { let rowspan = 1; for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (this.tableData[i][columnIndex] === this.tableData[rowIndex][columnIndex]) { rowspan++; } else { break; } } return rowspan; } } }, { label: '供应商', prop: 'supplierName', rowspan: ({ row, column, rowIndex, columnIndex }) => { if (columnIndex === 1) { let rowspan = 1; for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (this.tableData[i][columnIndex] === this.tableData[rowIndex][columnIndex]) { rowspan++; } else { break; } } return rowspan; } } }, // 其他列的配置 ] ``` 在上述代码中,我们在column中设置了prop属性来指定需要合并的列,然后在需要合并的单元格中设置了rowspan属性来指定需要合并的行数。需要注意的是,rowspan属性可以是一个函数,该函数接收一个参数,该参数包含row、column、rowIndex和columnIndex四个属性,分别表示当前单元格所在的行、列以及行索引和列索引。在该函数中,我们可以根据需要返回需要合并的行数即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值