vue2+elementUI表格实现实现多列动态合并

在这里插入图片描述

<template>
    <el-table :data="tableData" border max-height="800" :span-method="objectSpanMethod">
        <el-table-column type="index" width="50">
        </el-table-column>
        <el-table-column prop="id" label="id" width="150"></el-table-column>
        <el-table-column prop="cloudTypeName" label="资质证书编号" width="200"></el-table-column>
        <el-table-column prop="accName" label="资质名称" width="250"></el-table-column>
        <el-table-column prop="crashAmount" label="发证日期" width="130"></el-table-column>
        <el-table-column prop="creditAmount" label="	发证有效期" width="130"></el-table-column>
        <el-table-column prop="availaleAmount" label="	发证机关" width="178"></el-table-column>

    </el-table>
</template>
  
<script>
export default {
    name: 'demo',
    data() {
        return {
            tableData: [
                {
                    id: 1,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm1",
                    crashAmount: 0.1,
                    creditAmount: 240000.0,
                    availaleAmount: 83548.66,
                },
                {
                    id: 2,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm1",
                    crashAmount: 0.0,
                    creditAmount: 150000.0,
                    availaleAmount: 83548.66,
                },
                {
                    id: 3,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm1",
                    crashAmount: 0.0,
                    creditAmount: 150000.0,
                    availaleAmount: 53045.89,
                },
                {
                    id: 4,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm4",
                    crashAmount: 0.0,
                    creditAmount: 1351000.0,
                    availaleAmount: 1244354.9,
                },
                {
                    id: 5,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm4",
                    crashAmount: 0.0,
                    creditAmount: 0.0,
                    availaleAmount: -5033739.0,
                },
                {
                    id: 5,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm5",
                    crashAmount: 0.0,
                    creditAmount: 0.0,
                    availaleAmount: -5033739.0,
                },
                {
                    id: 5,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm5",
                    crashAmount: 0.0,
                    creditAmount: 0.0,
                    availaleAmount: -5033739.0,
                },
            ],
            // 那个字段写在前面就以哪个为开始,
            needMergeArr: ["cloudTypeName","accName", "crashAmount", "creditAmount"],

            rowMergeArrs: [],
        }
    },
    mounted() {
        this.rowMergeArrs = this.rowMergeHandle(this.needMergeArr, this.tableData);
        console.log('数据', this.rowMergeArrs)
    },
    methods: {
        rowMergeHandle(arr, data) {
            if (!Array.isArray(arr) && !arr.length) return false;
            if (!Array.isArray(data) && !data.length) return false;
            let needMerge = {};
            arr.forEach((i, idx) => {
                needMerge[i] = {
                    rowArr: [],
                    rowMergeNum: 0,
                };
                if (idx == 0) {
                    data.forEach((item, index) => {
                        // 表格首个数据单独处理
                        if (index === 0) {
                            needMerge[i].rowArr.push(1);
                            needMerge[i].rowMergeNum = 0;
                        } else {
                            if (item[i] === data[index - 1][i]) {
                                needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                                needMerge[i].rowArr.push(0);
                            } else {
                                needMerge[i].rowArr.push(1);
                                needMerge[i].rowMergeNum = index;
                            }
                        }
                    });
                } else {
                    let firstRowArr = needMerge[arr[0]].rowArr;
                    let firstRowArrDeal = [];
                    firstRowArr.forEach((item, index) => {
                        if (item > 0) {
                            firstRowArrDeal.push(index);
                        }
                    });
                    data.forEach((item, index) => {
                        let sign = false;
                        if (firstRowArrDeal.indexOf(index) > 0) {
                            needMerge[i].rowMergeNum = index;
                            sign = true;
                        }
                        // 表格首个数据单独处理
                        if (index === 0) {
                            needMerge[i].rowArr.push(1);
                            needMerge[i].rowMergeNum = 0;
                        } else {
                            if (item[i] === data[index - 1][i]) {
                                if (sign) {
                                    needMerge[i].rowArr.push(1);
                                } else {
                                    needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                                    needMerge[i].rowArr.push(0);
                                }
                            } else {
                                needMerge[i].rowArr.push(1);
                                needMerge[i].rowMergeNum = index;
                            }
                        }
                    });
                }
            });
            return needMerge;
        },
        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
            for (let res in this.needMergeArr) {
                if (this.needMergeArr[res] == column.property) {
                    return this.mergeAction(column.property, rowIndex, columnIndex);
                }
            }
        },
        mergeAction(val, rowIndex) {
            let _row = this.rowMergeArrs[val].rowArr[rowIndex];
            let _col = _row > 0 ? 1 : 0;
            return [_row, _col];
        },
    }
}
</script>
<style scoped></style>
  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

曾不错吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值