Element UI table el-table 表格合并行 合并的行数不一样

效果图如下:
在这里插入图片描述

表格是要分页显示的,所以进行了分页处理

<template>
  <div class="process-table-wrapper">
    <div class="page" v-for="(tableData, idx) in tableList" :key="idx">
      <el-table :data="tableData" border :span-method="(params) => onMergeRow(params, idx)">
        <el-table-column prop="category" label="测试列" align="center" />
        <el-table-column prop="name" label="姓名" align="center" />
        <el-table-column prop="volume" label="年龄" align="center" />
      </el-table>
    </div>
  </div>
</template>

相关的js代码

import _ from 'lodash';

export default {
  name: 'Table',
  data() {
    return {
      rowIndexList: [],
      tableData: [
        {
          category: 'test',
          name: 'Marco',
        },
        {
          category: 'test',
          name: 'Bob',
        },
        {
          category: 'test',
          name: 'Alice',
        },
        {
          category: 'test',
          name: 'Alisa',
        },
        {
          category: 'test',
          name: 'Jorge',
        },
        {
          category: 'test',
          name: 'William',
        },
        {
          category: 'other',
          name: 'Cynthia',
        },
        {
          category: 'other',
          name: 'Jeff',
        },
        {
          category: 'other',
          name: 'Drew',
        },
      ],
      tableList: [],
    }
  },
  created() {
    this.tableList = _.chunk(this.tableData, 35);
    this.tableList.forEach((tableItem, index) => {
      const groupList = Object.values(_.groupBy(tableItem, 'category') || []);
      const indexArr = _.fill(Array(tableItem?.length), 0);
      groupList.forEach((item, idx) => {
        if (idx > 0) {
          const arr = _.cloneDeep(groupList).splice(0, idx).map((item) => item.length);
          const sum = arr.reduce((prev, curr) => prev + curr);
          indexArr[sum] = item.length;
        } else {
          indexArr[idx] = item.length;
        }
      });
      this.rowIndexList[index] = indexArr;
    });
  },
  methods: {
    onMergeRow({ columnIndex, rowIndex }, idx) {
      if (columnIndex === 0) {
        if (this.rowIndexList[idx][rowIndex]) {
          return {
            rowspan: this.rowIndexList[idx][rowIndex],
            colspan: 1,
          };
        } else {
          return {
            rowspan: 0,
            colspan: 0,
          };
        }
      }
    },
  },
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值