vue3、Ant Design Vue表格组件单元格行合并

效果如下图所示,只合并相邻相同行在这里插入图片描述

列表数据: 0不显示 1独占一行 其它如3合并3行

export const columns: BasicColumn[] = [
  {
    title: '用途层级1',
    align: 'center',
    width: 100,
    dataIndex: 'useLevel1',
    customCell: (record, index, column) => {
      return { rowSpan: record.useLevel1Rowspan ?? 1 };
    },
  },
  {
    title: '用途层级2',
    align: 'center',
    width: 100,
    dataIndex: 'useLevel2',
    customCell: (record, index, column) => {
      return { rowSpan: record.useLevel2Rowspan ?? 1 };
    },
  },
  {
    title: '用途层级3',
    align: 'center',
    width: 100,
    dataIndex: 'useLevel3',
    customCell: (record, index, column) => {
      return { rowSpan: record.useLevel3Rowspan ?? 1 };
    },
  },
  {
    title: '用途层级4',
    align: 'center',
    width: 100,
    dataIndex: 'useLevel4',
    customCell: (record, index, column) => {
      return { rowSpan: record.useLevel4Rowspan ?? 1 };
    },
  },
  {
    title: '能源类别',
    align: 'center',
    width: 100,
    dataIndex: 'energyType',
  }
 ]

组件内使用

  import { columns } from './jsfile.data';

  let newTableData = reactive([]);
  // 是否已经合并防止重复监听
  let isMerge = ref(false);
  // 需要合并的属性列
  const needTomergeColumnsIndex = ['useLevel1', 'useLevel2', 'useLevel3', 'useLevel4'];
  // 监听表格数据
 watch(tableDataSource, async (newTableDataSource) => {
    if (newTableDataSource && newTableDataSource.length > 1 && !isMerge.value) {
      let tableData = newTableDataSource;
      isMerge.value = true;
      // 遍历需要合并的属性列
      await needTomergeColumnsIndex.forEach((columnDataIndex) => {
        // 存储结果和计算每个属性的出现次数。
        const dynamicVariables = {};
        // 属性的Rowspan,分别表示该对象在需要合并列属性上的rowspan 值
        const variableName = columnDataIndex + 'Rowspan';
        // 计算每个属性的 rowspan
        tableData.forEach((item, index) => {
          dynamicVariables[variableName] = 0;
          if (tableData[index - 1] && item[columnDataIndex] === tableData[index - 1][columnDataIndex]) {
            dynamicVariables[variableName] = 0;
          } else {
            for (let i = index; i < tableData.length; i++) {
              if (tableData[i][columnDataIndex] === item[columnDataIndex]) {
                dynamicVariables[variableName]++;
              } else {
                break;
              }
            }
          }
          item[variableName] = dynamicVariables[variableName];
        });
        console.log(tableData);
      });
      // 表格赋具有合并属性的新值
      newTableData = tableData;
    }
  });
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值