el-table中根据某些字段信息合并单元格

 在使用element的table的时候,有些数据需求合并,但是官方提供的只有向下合并的方法,达不到我们预期的效果,或者没办法根据我们的需求和列数进行合并,就需要针对合并方法去指定符合我们需求的合并方法

let { data: res } = await this.$axios.get(`xxxxxxxxxxx`, { params });  //xxxxxxxxx为你的接口
      this.tableData = res.list
      for (let i = 0; i < this.tableData.length; i++) {
        // 如果是第一个数据,就将列表mergeList添加一个1,表示暂时只有一个名字相同的、且将索引mergeNum赋值为0
        if (i === 0) {
          this.mergeList.push(1);
          this.mergeNum = 0
        } else {
          // 判断当前元素与上一个元素是否相同
          if (this.tableData[i].payId === this.tableData[i - 1].payId) {
            // 如果相同就将索引为 mergeNum 的值加一
            this.mergeList[this.mergeNum] += 1;
            // 且将数组添加 0 
            this.mergeList.push(0);
          } else {
            // 如果元素不同了,就可以通过索引为 mergeNum 的值知晓应该需要合并的行数
            // 同时,我们再次添加一个值1,表示重新开始判断重复姓名的次数
            this.mergeList.push(1);
            // 同时 索引加一
            this.mergeNum = i;
          }
        }
      }

 关键代码

 判断是否与上个元素的根据合并的标识符相同,等循环结束就得到一个需要向下合并数量的数组this.mergeList以及需要向下进行合并的索引值this.mergeNum

然后根据官方给出的方法

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 3 || columnIndex === 4) {
        const _row = this.mergeList[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col
        }
      }
    },

 这样table就会根据payId(示例)相同的进行合并列

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于el-table动态列的单元合并,可以通过循环数据源数据获取该列需要合并的行数,然后在el-table的template使用v-if指令来判断是否需要合并单元,如果需要则使用rowspan属性来合并单元。具体实现可以参考以下步骤: 1. 在el-table的columns定义需要合并的列,并设置prop属性为该列的数据源字段名。 2. 在el-table的template使用v-for指令循环数据源,并使用v-if指令判断是否需要合并单元。 3. 如果需要合并单元,则使用rowspan属性来合并单元,同时将该单元的内容设置为空。 4. 如果不需要合并单元,则正常显示该单元的内容。 例如,假设我们需要合并动态列的第二列单元,可以按照以下方式实现: ```html <el-table :data="tableData"> <el-table-column label="姓名" prop="name"></el-table-column> <el-table-column label="动态列" v-for="(column, index) in dynamicColumns" :key="index" :prop="column.prop"> <template slot-scope="scope"> <div v-if="index === 1 && scope.row.span > 1" :rowspan="scope.row.span" :style="{ 'line-height': (scope.row.span * 40) + 'px' }"></div> <div v-else>{{ scope.row[column.prop] }}</div> </template> </el-table-column> </el-table> ``` 其,tableData为el-table的数据源,dynamicColumns为动态列的配置数组,每个元素包含prop属性表示该列的数据源字段名。在template,我们使用v-for指令循环动态列,并使用v-if指令判断是否需要合并单元。如果需要合并单元,则使用rowspan属性来合并单元,并设置该单元的内容为空。如果不需要合并单元,则正常显示该单元的内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值