ElementUI中el-table合并1列单元格

1 功能说明

使用el-table中的span-method属性实现将混乱的列表数据合并行单元格显示。数据列表如下:

 [{ name:'张三', course:'英语', score:'90' },
 { name:'李四', course:'数学', score:'50' },
 { name:'王五', course:'语文', score:'90' },
 { name:'张三', course:'政治', score:'30' },
 { name:'李四', course:'英语', score:'80' }]

2 截图

3 源代码

<template>
  <div class="combine_cell">
    <div class="cc_con">
      <el-table
        v-bind:data="dataArr"
        v-bind:span-method="rowSpanMethod">
        <el-table-column prop='name' label='姓名'></el-table-column>
        <el-table-column prop='course' label='课程'></el-table-column>
        <el-table-column prop='score' label='成绩'></el-table-column>
      </el-table>
    </div>
  </div>
</template>

<script>

export default {
  name: 'CombineCell',

  data(){
    return{
      dataArr: new Array(),
      rowSpanArr: new Array()
    }
  },

  created(){
    this.dataArr = [
      { name:'张三', course:'英语', score:'90' },
      { name:'李四', course:'数学', score:'50' },
      { name:'王五', course:'语文', score:'90' },
      { name:'张三', course:'政治', score:'30' },

      { name:'李四', course:'英语', score:'80' },
      { name:'王五', course:'数学', score:'90' },
      { name:'张三', course:'语文', score:'70' },
      { name:'李四', course:'政治', score:'60' },
      
      { name:'王五', course:'英语', score:'70' },
      { name:'李四', course:'数学', score:'80' },
      { name:'张三', course:'语文', score:'90' },
      { name:'王五', course:'政治', score:'40' }

    ];

    this.dataArr = this.resetDataArr(this.dataArr, 'name');

    this.rowSpanArr = this.getRowSpanArr(this.dataArr, 'name');
  },

  methods:{

    // 重置数据, tempAttr是合并的那一列的属性名
    resetDataArr: function(tempDataArr, tempAttr){
      let newDataArr = new Array();

      tempDataArr.forEach(originItem => {
        let i=0;
        for(i=0; i<newDataArr.length; i++){
          if(originItem[tempAttr] === newDataArr[i][tempAttr]){
            newDataArr.splice(i, 0, originItem);
            break;
          }
        }
        if(i===newDataArr.length){
          newDataArr.push(originItem);
        }
      });

      return newDataArr;
    },

    // 设置合并的列
    rowSpanMethod: function(param){
      if(this.rowSpanArr.length === 0){
        return;
      }
      if(param.columnIndex === 0){
        const row = this.rowSpanArr[param.rowIndex];
        const col = row>0?1:0;
        return{
          rowspan:row,
          colspan:col
        }
      }
    },

    // 获得合并列的空行数
    getRowSpanArr: function(tempDataArr, tempAttr){      
      let tempRowSpanArr = new Array();
      let startIndex = 0;
      
      if(tempDataArr.length>1){
        tempRowSpanArr.push(1);
      }else{
        return tempRowSpanArr;
      }

      for(let i=1; i<tempDataArr.length; i++){
        if(tempDataArr[i][tempAttr] == tempDataArr[i-1][tempAttr]){
          tempRowSpanArr.push(0);
          tempRowSpanArr[startIndex] = tempRowSpanArr[startIndex] + 1;
        }else{
          tempRowSpanArr.push(1);
          startIndex = i;
        }
      }

      return tempRowSpanArr;
    }
  }

}
</script>

<style scoped>

</style>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ElementUIel-table 合并单元格可以使用 `span-method` 属性来实现,该属性可以指定一个函数,用于计算每个单元格需要合并的行数和数。 下面是一个示例代码: ```html <el-table :data="tableData" :span-method="mergeCells"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> ``` ```javascript methods: { mergeCells(row, column, rowIndex, columnIndex) { if (columnIndex === 0) { // 如果是第一列,向下合并所有相同值的单元格 let rowspan = 1; for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (this.tableData[i].name === row.name) { rowspan++; } else { break; } } return { rowspan, colspan: 1 } } else { // 其他合并 return { rowspan: 0, colspan: 0 } } } } ``` 在上面的代码,`mergeCells` 方法接受四个参数:`row` 表示当前行的数据,`column` 表示当前的数据,`rowIndex` 表示当前行的索引,`columnIndex` 表示当前的索引。该方法返回一个对象,其 `rowspan` 表示需要合并的行数,`colspan` 表示需要合并数。 在上面的示例代码,我们判断如果当前第一列,则向下合并所有相同值的单元格,否则不合并。 需要注意的是,由于 `rowspan` 和 `colspan` 只有在第一个单元格生效,因此如果需要合并多个单元格,需要在后续单元格返回 `{ rowspan: 0, colspan: 0 }`,表示不需要合并

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值