vue element-ui 根据某字段内容一致的进行合并

 记录一下动态合并el表格的代码

注:此处需要后端配合 后端的数据顺序必须将一致需要合并的数组放在一起

<template>
  <div class="fqb_content" v-if="navData.selectVal == 4 && fqbShow">
        <div class="fqb_close" @click="fqbCloseF">X</div>
        <el-table :data="tableData" height="600" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 3%">
            <!-- <el-table-column prop="id" label="一级分区" width="180" /> -->
            <el-table-column prop="level1Code" label="一级编号" />
            <el-table-column prop="level1Zone" label="一级分区" />
            <el-table-column prop="level2Code" label="二级编号" />
            <el-table-column prop="level2Zone" label="二级分区" />
            <el-table-column prop="level3Code" label="三级编号" />
            <el-table-column prop="level3Zone" label="三级分区" />
            <el-table-column prop="level4Code" label="四级编号" />
            <el-table-column prop="level4Zone" label="四级分区" />
            <!-- <el-table-column prop="level5Code" label="五级编号" />
            <el-table-column prop="level5Zone" label="五级分区" /> -->
        </el-table>
    </div>
</template>

<script lang="ts" setup>
interface User {
    id: string
    level1Code: string
    level1Zone: string
    level2Code: string
    level2Zone: string
    level3Code: string
    level3Zone: string
    level4Code: string
    level4Zone: string
    level5Code: string
    level5Zone: string
}
interface SpanMethodProps {
    row: User
    column: TableColumnCtx<User>
    rowIndex: number
    columnIndex: number
}
const objectSpanMethod = ({
    row,
    column,
    rowIndex,
    columnIndex,
}: SpanMethodProps) => {
    // 合并单元格
    // console.log('row', row, 'column', column, 'rowIndex', rowIndex, 'columnIndex', columnIndex);
    //定义需要合并的列字段,有哪些列需要合并,就自定义添加字段即可
    const fields = ['level1Code', 'level1Zone', 'level2Code', 'level2Zone', 'level3Code', 'level3Zone', 'level4Code', 'level4Zone']
    // 当前行的数据
    const cellValue = row[column.property]
    // if (rowIndex == 0) { // 实现表头下面第一行数据,第一列合计展示时2列合并
    //     if (columnIndex === 0) {
    //         return { rowspan: 1, colspan: 0 } // 隐藏表头下面第一行的第一列
    //     }
    //     if (columnIndex === 1) {
    //         return { rowspan: 1, colspan: 2 } // 将表头下面第一行的第一列和第二列合并
    //     }
    // }

    // 判断只合并定义字段的列数据
    if (cellValue && fields.includes(column.property)) {
        const prevRow = tableData[rowIndex - 1] //上一行数据
        let nextRow = tableData[rowIndex + 1] //下一行数据
        // 当上一行的数据等于当前行数据时,当前行单元格隐藏
        if (prevRow && prevRow[column.property] === cellValue) {
            return { rowspan: 0, colspan: 0 }
        } else {
            // 反之,则循环判断若下一行数据等于当前行数据,则当前行开始进行合并单元格
            let countRowspan = 1 //用于合并计数多少单元格
            while (nextRow && nextRow[column.property] === cellValue) {
                nextRow = tableData[++countRowspan + rowIndex]
            }
            if (countRowspan > 1) {
                return { rowspan: countRowspan, colspan: 1 }
            }
        }
    }
}
<script>

此处借鉴了大佬的内容

vue elementui 动态表头、表头合并、合并行、合并列、行根据某字段内容一致的进行合并、表格列展开收起功能_elementui合并表头-CSDN博客

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值