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` 组件可以通过指定的属性来实现合并的功能。具体来说,合并通常涉及以下两个属性: 1. `span-method`: 这是一个方法属性,用于指定一个函数,该函数会传入行的行号 `row`、号 `column`、当前单元格的值 `row`、当前行 `column` 和 `row` 所在的表格的 `table` 实例作为参数,返回一个包含两个属性的对象: - `colspan`: 合并的单元格数量 该函数返回的对象定义了当前单元格需要合并的行数和数。 2. `type`: 在定义中设置此属性,可以指定当前是横向合并(`type: 'merge'`)还是纵向合并(`type: 'index'`)。通常,`type: 'index'`用于纵向合并,表示索引,即会根据传入的`span-method`函数返回的`rowspan`值来决定合并多少行。 合并单元格的示例代码如下: ```html <template> <el-table :data="tableData" border style="width: 100%"> <el-table-column label="姓名" width="180"> <template slot-scope="scope"> <!-- 合并单元格的内容 --> {{ scope.row.name }} </template> </el-table-column> <el-table-column label="日期" width="180"> <template slot-scope="scope"> <!-- 合并单元格的内容 --> {{ scope.row.date }} </template> </el-table-column> <el-table-column label="操作" type="expand"> <!-- 操作 --> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [{ name: '王小虎', date: '2016-05-02', }, { name: '王小虎', date: '2016-05-04', }, { name: '王小虎', date: '2016-05-01', address: '上海市普陀区金沙江路 1518 弄' }, { name: '王小虎', date: '2016-05-03', }] } }, methods: { getRowspan(row, column) { // 根据需要返回具体的rowspan值 }, getColspan(row, column) { // 根据需要返回具体的colspan值 } } } </script> ``` 请注意,实际的合并逻辑需要根据你的数据结构和显示需求编写相应的`getRowspan`和`getColspan`方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

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

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

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

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

打赏作者

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

抵扣说明:

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

余额充值