element el-table列合并

新建tableMerge.js文件

/**
 *                                      合并表格单元格类
 * 提示:
 *     1.如果table表格需要加合并后的序号,只需要给el-table-column标签加 prop="group" 即可
 * 使用方式:
 *     1.在script中引入tableMerge.js文件 import tableMerge from "@/utils/tableMerge.js";
 *     2.在data()函数中定义变量newTableMerge=null
 *     3.在created生命周期中实例化tableMerge类:
 *          this.newTableMerge = new tableMerge(this.needMergeArr);
 *       提示:
 *           this.needMergeArr为要合并的单元格属性数组,比如:this.needMergeArr=["indicatorName", "tz", "jjcl"]
 *     4.在获取完tableData列表数据的下一行执行合并数据函数this.newTableMerge.tableDataMerge(this.tableData)
 *     5.在el-table标签中添加函数事件:span-method="(params) => newTableMerge.objectSpanMethod(params)"
 */     
export default class tableMerge {
    constructor(needMergeArr) {
        // tableData数据
        this.tableData = []
        // needMergeArr 需要合并列的属性array形式
        this.needMergeArr = needMergeArr
        console.log(this.needMergeArr)
        this.spanArr = []
    }
    // tableData的数据合并
    tableDataMerge(tableData) {
        this.tableData = tableData
        let contactDot = 0;
        this.spanArr = [];
        let n = "";
        this.tableData.forEach((item, index) => {
            item.index = index;
            if (index === 0) {
                this.spanArr.push(1);
                item.group = 1; //先设置组号赋值为0 也就是序号
            } else {
                for (let i = 0; i < this.needMergeArr.length; i++) {
                    let reg = /(=== | &&)/g;
                    let nArr = n.replace(reg, " ");
                    if (!nArr.includes(`item["${this.needMergeArr[i]}"]`)) {
                        n += `item["${this.needMergeArr[i]}"] === 
                   _this.tableData[index - 1]["${this.needMergeArr[i]}"]
                 && `;
                    }
                }
                let str = n.replace(/( && ){1}$/g, "");
                // n='贷款规模 === 贷款规模 && 年初资产总额 === 年初资产总额'
                if (eval(str)) {
                    this.spanArr[contactDot] += 1;
                    this.spanArr.push(0);
                    item.group = this.tableData[index - 1].group; //如果一样 将组号改为和上一个数据相同
                } else {
                    this.spanArr.push(1);
                    contactDot = index;
                    item.group = this.tableData[index - 1].group + 1; //如果不一样 将组号设置为上一个数据的组号加1
                }
            }
        })
    }
    // table的:span-method函数
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
        // group为合并序号  
        let n = 'column.property === "group" ||'
        for (let i = 0; i < this.needMergeArr.length; i++) {
            let reg = /(=== | \|\|)/g;
            let nArr = n.replace(reg, " ");
            if (!nArr.includes(`item["${this.needMergeArr[i]}"]`)) {
                n += `column.property === "${this.needMergeArr[i]}"
                   || `;
            }
        }
        let reg = /( \|\| ){1}$/g
        let str = n.replace(reg, "");
        if (
            eval(str)
        ) {
            const _row = this.spanArr[rowIndex];
            const _col = _row > 0 ? 1 : 0;
            return {
                rowspan: _row,
                colspan: _col,
            };
        }
    }
}
Element UI的el-table组件中,如果你需要同时合并行和,你可以使用`span-method`属性结合`rowspan`和`colspan`。`span-method`是一个自定义函数,它接收当前单元格的信息作为参数,包括行索引、索引和当前行的总宽度等。 这是一个示例: ```html <template> <el-table :data="tableData" :span-method="handleSpan"> <!-- 表头 --> <el-table-column type="index"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <!-- 合并的例子 --> <el-table-column span-method="{ rowspan: 2 }" label="合并标题"></el-table-column> <!-- 合并行的例子 --> <el-table-column prop="address" label="地址" :span-method="{ colspan: 3 }"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20, address: '北京' }, { name: '李四', age: 30, address: '上海' }, { name: '王五', age: 40, address: '广州' }, { name: '赵六', age: 50, address: '深圳' } ] }; }, methods: { handleSpan({ row, column, rowIndex, columnIndex }) { // 根据实际需求返回行高和宽的设置 if (rowIndex === 0) { return { rowspan: 2 }; // 第一行合并两行 } else if (columnIndex === 0) { return { colspan: 3 }; // 第一合并 } } } }; </script> ``` 在这个例子中,第一行的数据会被合并两行显示,第一的数据则会合并显示。记得在`handleSpan`方法中根据实际需求调整行高(`rowspan`)和宽(`colspan`)的计算规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力让自己的选择变得正确

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值