el-table 表头合并

本文介绍了如何在Vue.js中使用el-table组件实现多级表头的合并。关键在于header-cell-style方法,通过调整rowspan和colspan属性实现表头合并。在handerMethod中,根据rowIndex和columnIndex判断并设置单元格的合并。同时,文中提到了一个需要注意的bug,即row[0]=0, row[1]=2时合并效果才能生效。此外,还提及了内容合并的实现,通过比较列中的值来决定单元格的合并。" 79371755,7485047,VS2017社区版+OpenCV3.3.0配置教程,"['Visual Studio', 'OpenCV', 'C++开发', 'Windows开发', '软件配置']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果如下,圈起来的是一个表头对应两列,这里是多级表头(本篇借鉴而来,如有需要请留言删除!)

 

 先说合并表头,主要用到header-cell-style方法

 

这里有个非常坑的bug 必须是row[0]=0 row[1]=2才会生效 我也是试了很多次才得出这个结论

合并表头代码思路是将两个列通过handerMethod隐藏第一列的同时,让第二列占据两个单元格的宽度来实现合并效果

以上是一个版本描述,下面是另外一个描述:

主要看handerMethod这个方法
rowIndex代表当前行号(行索引),columnIndex 代表当前列号(列索引)
比如说表头是第一行,行号是0,表头第一行第一列,行号和列号都是0

rowspan规定单元格可占据的行数
colspan属性规定单元格可横跨的列数

理解这个之后,其实代码也就很好理解了,找到表头这一行要合并的两列,将第一列的colSpan设为2,代表单元格可以占据两列,将第二列隐藏
 

<template>
      <el-table
                ref="standTable"
                border
                :data="standTableList"
                show-summary
                row-key="id"            
                :header-cell-style="handerMethod"
              >
       <el-table-column  prop="one" label="多级表头第一行">
                  <el-table-column  prop="one" label="多级表头第二行"></el-table-column>
                  <el-table-column  prop="two" label="多级表头第二行"></el-table-column>
       </el-table-column>
    </el-table>
</template>
<script>

    
export default {
    methods:{
        
     //隐藏表头
     handerMethod({ row, column, rowIndex, columnIndex }) {
       if (row[0].level == 1) {
         //这里有个非常坑的bug 必须是row[0]=0 row[1]=2才会生效
         row[0].colSpan = 0    // 这行我使用的时候注释掉也可以
         row[1].colSpan = 2
         if (columnIndex === 0) {    // 我结合多级表头后不需要隐藏,往下合并就可以了,也没有隐           藏成功故此没用这个
           return { display: 'none' }
         }
       }
     },
     //隐藏表头  -- 我使用的代码如下
     handerMethod({ row, column, rowIndex, columnIndex }) {
       if (row[0].level == 1) {
         //这里有个非常坑的bug 必须是row[0]=0 row[1]=2才会生效
         row[1].rowSpan = 2
         
       }
     },

    }
}
</script>

如上就是列头合并,接来下是内容合并,依据列中的值进行表格合并,也可以多条件多单元格合并

 

<template>
  
</template>

<script>
export default {
objectSpanMethod ({ row, column, rowIndex, columnIndex }) {
                if (columnIndex === 0) {    // 需要多列在这里用 || 加上列下标
                    // this.tableData  修改
                    const _row = (this.flitterData(this.xueqianxxList).one)[rowIndex];
                    const _col = _row > 0 ? 1 : 0;
                    return {
                        rowspan: _row,
                        colspan: _col
                    };
                }
                else if (columnIndex ===1) {
                    const _row = (this.flitterData(this.xueqianxxList).two)[rowIndex];
                    const _col = _row > 0 ? 1 : 0; // 如果这一行隐藏了,这列也隐藏
                    return {
                        rowspan: _row, //合并的行数
                        colspan: _col, //合并的列数,设为0则直接不显示
                    };
                }
            },
flitterData (arr) {
    let spanOneArr = []
    let concatOne = 0

    let spanTwoArr = []
    let concatTwo = 0
    arr.forEach((item, index) => {
        if (index === 0) {
            spanOneArr.push(1);
            spanTwoArr.push(1)
        } else {
            //onelever 修改
            if (item.onelever === arr[index - 1].onelever) { //第一列需合并相同内容的判断条件
                spanOneArr[concatOne] += 1;
                spanOneArr.push(0);
            } else {
                spanOneArr.push(1);
                concatOne = index;
            };


            //name 修改
            if (item.twolever === arr[index - 1].twolever) { //第二列需合并相同内容的判断条件
                spanTwoArr[concatTwo] += 1;
                spanTwoArr.push(0);
            } else {
                spanTwoArr.push(1);
                concatTwo = index;
            };
        }
    });
    return {
        one: spanOneArr,
        two: spanTwoArr,
    }
},
}
</script>

<style>

</style>

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值