el-table表格动态行/表头合并

一、行合并

1、:span-method="spanMethod"    //  table上的默认事件绑定 spanMethod

// 合并表格方法
function objectSpanMethod({ row, column}) {
    if (row.mergeCell.includes(column.property)) {
        const rowspan = row[`rowspan_${column.property}`];
        if (rowspan) {
            return { rowspan: rowspan, colspan: 1 };
        } else {
            return { rowspan: 0, colspan: 0 };
        }
    }
};
function setTableRowSpan(tableData, fieldArr, effectMerge = {}) {
    let lastItem = {};
    fieldArr.forEach((field, index) => {
        lastItem = {};
        let judgeArr = fieldArr.slice(0, index + 1);
        if (effectMerge[field]) {
            judgeArr = [...effectMerge[field], field];
        }
        tableData.forEach(item => {
            item.mergeCell = fieldArr;
            const rowSpan = `rowspan_${field}`;
            // 判断是否合并到上个单元格。
            if (judgeArr.every(e => lastItem[e] === item[e] && item[e] !== '')) {
                // 判断是否所在行的列对应的值全部相同,并且此列的值不为空
                // 是:合并行
                item[rowSpan] = 0;
                lastItem[rowSpan] += 1;
            } else {
                // 否:完成一次同类合并。lastItem重新赋值,进入下一次合并计算。
                item[rowSpan] = 1;
                lastItem = item;
            }
        });
    });
}
export {
    objectSpanMethod,
    setTableRowSpan,
    }

2、数据加载完成后对数据处理下  ######唯一需要修改的地方,#########

//、、、第一个参数就是表头column数组、、、、['需合并字段1','需合并字段2',....]
setTableRowSpan(this.billForm.column, ['goodsNo', 'goodsName', 'goodsColor']);

3、table合并列自动调用默认事件 spanMethod

// 合并单元
spanMethod({ row, column}){
            return objectSpanMethod({ row, column}, /* 其他参数 */);
       }

二、表头合并

:header-cell-class-name="headerCellClassName"

1、给多行表头添加一个class,根据实际情况修改

headerCellClassName({row,column, rowIndex, columnIndex }){
                if (rowIndex == 0 && columnIndex!=2) {
                    return 'aaa'   //添加类名表头第一行
                }
                if(rowIndex==1 && columnIndex!=0){
                    return 'bbb' //添加类名表头第二行
                }
            },

2、对表头不同列进行合并  根据实际情况修改

headerEditStyle(){
                let doms0 = document.querySelectorAll('.aaa')
                let doms1 = document.querySelectorAll('.bbb')
                doms1.forEach(function (item) {
                    item.rowSpan = 0
                    item.colSpan = 0
                    item.style.display = 'none'
                })
                doms0.forEach(function (item) {
                    item.rowSpan = 2
                })
            },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
element-ui的表格el-table本身并不支持动态合并单元格(和列),但可以通过自定义表格的slot-scope和span-method来实现动态合并单元格的功能。首先,我们需要在表格定义时添加span-method属性,并指定一个方法来计算单元格的合并数和列数。例如: ```html <el-table :data="tableData" :span-method="mergeCells"> ... </el-table> ``` 然后,在methods中定义mergeCells方法来计算单元格的合并数和列数。该方法有四个参数分别是({row, column, rowIndex, columnIndex}),我们可以根据需要通过判断索引和列索引来返回合适的数和列数,例如合并第一的两列可以这样实现: ```javascript methods: { mergeCells({row, column, rowIndex, columnIndex}) { if (rowIndex === 0 && columnIndex < 2) { return { rowspan: 1, colspan: 2 }; } } } ``` 这样就实现了动态合并第一的两个单元格。如果想要合并其他或列,可以根据需要进判断和返回。 给表头添加斜线可以通过自定义表头的样式来实现。可以通过CSS的`::before`或`::after`伪元素来添加斜线样式。例如,给第一列的表头添加斜线可以这样实现: ```html <el-table ...> <el-table-column label="姓名"> <template slot="header" slot-scope="scope"> <div class="header-wrapper"> <div class="header-content"> <span>{{scope.column.label}}</span> </div> </div> </template> </el-table-column> ... </el-table> ``` 然后在样式中定义斜线效果: ```css <style> .header-content::before { content: ""; display: block; border-bottom: 1px solid #333; transform: skew(-45deg); width: 80%; margin-left: 10%; } </style> ``` 这样就实现了给第一列的表头添加斜线的效果。可以根据需要调整斜线的样式和位置来达到期望的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值