element 表格第一列合并,使用expand 第二列展开后出现错位情况

错位展示:
在这里插入图片描述
多个同时展开:
在这里插入图片描述
最终结果:
在这里插入图片描述

解决思路:展开行,在dom上其实是新增了一行的高度,合并上新增一个高度就可以
具体如下:
1、:首先添加@expand-change 展开/收起事件
expandChange
2、在data中添加一个用来存储展开、收起的数据变量

data() {
    return {
      expandeList: []
    };
  },

3、通过:span-method="spanMethod"和 @expand-change=“expandChange” 进行处理。

   expandChange(row, expandedRows) {
      this.expandeList = expandedRows.map(item => item.teamName) //teamName为第一列合并单元格的配置,也是上图中的标注名称字段
    },
    spanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
      	//tableData 是表格的data数据
          if (rowIndex === 0 || row.teamName !== this.tableData[rowIndex - 1].teamName) {
          	//不展开数据时,需要合并第一列。 
            let rowspan = 1;
            for (let i = rowIndex + 1; i < this.tableData.length; i++) {
              if (row.teamName === this.tableData[i].teamName) {
                rowspan++;
              } else {
                break;
              }
            }
            //针对展开后,错位处理,是由于每展开一次就会多出一行,同时不确定有多少数据
            const sameTeamNameLength = this.getArrItemNum(this.expandeList)
            return { rowspan: sameTeamNameLength.get(row.teamName)?sameTeamNameLength.get(row.teamName) + rowspan : rowspan, colspan: 1 };
          } else {
            return { rowspan: 0, colspan: 0 };
          }
        }
    },
    //统计 同时展开多条行,相同标注名称出现的次数
    getArrItemNum(arr) {
      let mapObj = new Map();
      arr.forEach(element => {
        let num = mapObj.get(element);
        if (num) {
          mapObj.set(element, ++num);
        } else {
          mapObj.set(element, 1);
        }
      });
      return mapObj;
    },
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值