el-table 展开行表格,展开的内容高度可以变化时,导致的固定列错位的问题

问题描述

一个可展开的表格(列设置了type=“expand”),并且展开后的内容高度可以变化,会导致后面所有行的固定列错位,图如下,展示行中是一个树形表格,默认不展示子级,点击树形表格的展开展示子级后,外层表格展开后的内容高度发生变化,固定列发生错位
在这里插入图片描述

问题分析

网上提供了三种解决方案,
1、使用table.doLayout() —— 不生效
2、结合使用列的width —— 还是没有生效
操作一列中,fixed=“right”,需要指定宽度 width
与操作列相邻的一列不加width,其他的列指定宽度
3、使用:key=“timeStap”,更新表格 —— 没有效果
4、使用this.$forceUpdate(),强制刷新 —— 没有效果
5、table加上class=“table-fixed”,使用样式进行覆盖 —— 没有效果

当展开内容中的树形表格,默认展开子级后,固定列没有错位,但是当收起子级后,固定列还是错位;

根本问题

表格展开列的高度发生变化后,固定列的对应的行的高度并没有动态变化,导致的错位;当我们在控制台手动修改对应行的高度时,会发现,可以达到目标效果
在这里插入图片描述

解决方案

每次当展开表格的内容高度发生变化时,触发重新计算固定列对应行高度的重新计算,直接操作对应行的dom来解决当前问题;
需要知道是哪一行($index)的内容高度发生了变化,当前表格的ref,展开行内容元素的className

expandTableContentHeightChange(index) { //todo 展开表格的内容高度发生变化时
  this.$nextTick(() => {
    const goodsTableForm:any = this.$refs.goodsTableForm;
    resetFixedExpandedRowHeight(index, goodsTableForm, 'contract_line_expand')
  })
}

/**
 * * 重置固定列中展开行的高度
 * @param index 需要更新的当前行索引
 * @param currentTable 当前表格的ref
 * @param contentBoxClassName 展开行的内容类名
 */
export const resetFixedExpandedRowHeight = (index, currentTable, contentBoxClassName) => {
	const element = currentTable.$el;
	element.querySelector('.el-table__fixed')
	const fixedTableAllTrList = element.querySelectorAll('.el-table__fixed-body-wrapper .el-table__body tbody > .el-table__row');
	const originTableAllTrList = element.querySelectorAll('.el-table__body-wrapper .el-table__body tbody > .el-table__row');
	const fixedTableTrList = [...fixedTableAllTrList].filter(originTr => {
		return originTr.className.indexOf('el-table__row--level') === -1
	});
	const originTableTrList = [...originTableAllTrList].filter(originTr => originTr.className.indexOf('el-table__row--level') === -1);
	if (originTableTrList.length && originTableTrList[index]) {
		const originContentDiv = originTableTrList[index].nextSibling.querySelector(`.${contentBoxClassName}`);
		const { height: originTableTrHeight } = originContentDiv.getBoundingClientRect();
		const fixedContentDiv = fixedTableTrList[index].nextSibling.querySelector(`.${contentBoxClassName}`);
		fixedContentDiv.style.height = `${originTableTrHeight}px`;
	}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/301943.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R4S软路由如何在iStoreOS后配置远程桌面本地电脑公网地址

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是:** 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家…

斑马斑马跳

欢迎来到程序小院 斑马斑马跳 玩法:行走的斑马,点击鼠标左键斑马左右跳动,左右两侧有大树,和移动的小鸟, 撞到大树和小鸟游戏结束,统计分数,快去斑马跳吧^^。开始游戏https://www.ormcc.com/pl…

项目总体测试计划书

一、 前言 (一) 背景 (二) 目的 (三) 测试目标 (四) 适用范围与读者对象 (五) 术语与缩写 二、 软件测试实施流程 (一) 测试工作总体流…

系统编程--VIM特辑

这里写目录标题 vim三种工作模式进入文本模式的快捷键在命令模式下进行文本编辑删除快捷键复制粘贴查找替换查找替换 vim其他操作 vim打造简易IDE vim 三种工作模式 具体可见第二章对vim的详细介绍 需要注意的是,在末行模式下执行完一次命令,就可以直接…

RTTI结构详细分析(VC++)

对于RTTI结构的资料真的屈指可数,类的逆向也一直是一个不好弄的问题.对此我只想贡献我的一份力量。 文中我不会分析类的内存布局,因为有很多资料已经分析的挺好的了(见参考资料)。但是现有我能找到的资料对RTTI结构的表述不完整,或者表述模糊不清,参考Clang的部分源码后&#…

什么是VR、AR、MR、XR?

VR、AR、MR、XR的定义 VR虚拟现实是利用计算机技术创造虚拟世界,用户可以通过穿戴VR设备,进入虚拟现实的环境,感受身临其境的体验。 AR增强现实技术是将现实和虚拟世界结合在一起,用户可以通过手机、平板电脑等设备,看…

Weblogic安全漫谈(四)

黑名单机制必然会推动两种研究方向的发展:一是挖掘不在黑名单的新组件,是为绕过规则;二是发掘检查的盲区,是为绕过逻辑。 CVE-2020-14756 二次反序列化具有对抗检查逻辑的天生丽质,在CVE-2018-2893中就有利用字节数组…

文件夹重命名:如何一键完成简体中文文件夹名到繁体中文的批量转换

随着科技的发展,人类越来越依赖计算机和电子设备进行文件管理。在这个过程中,经常会遇到要将简体中文文件夹名转换为繁体中文的情况。这有助于统一文件名的格式,也能提高文件的可读性和检索性。那如何一键完成简体中文文件夹名到繁体中文的批…

【精通C语言】:分支结构switch语句的灵活运用

🎥 屿小夏 : 个人主页 🔥个人专栏 : C语言详解 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、switch语句1.1 语法1.2 代码示例 二、switch的控制语句2.1 break2.2 defualt子句 三、…

前端下载文件问题之如何获取报错信息

问题:点击下载后。接口会生成并返回文件流。在极端情况下接口数据返回异常,需要抛出错误信息,比如后端拼接错误情况、空文件情况。 难点:responseType设置为Blob后,返回内容为二进制文件流,从而无法获取错误…

03、Kafka ------ CMAK(Kafka 图形界面管理工具) 下载、安装、启动

目录 CMAK(Kafka 图形界面管理工具)下载安装启动打开 cmak 图形界面 CMAK(Kafka 图形界面管理工具) Kafka本身并没有提供Web管理工具,而是推荐使用bin目录下各种工具命令来管理Kafka, 这些工具命令其实用起…

安达发|基于APS排程系统的PDM功能

APS系统(Advanced Planning and Scheduling,先进计划与排程)是一种基于APS系统(Advanced Planning and Scheduling,先进计划与排程)是一种基于供应链管理和生产管理的综合性软件系统。它通过整合企业内外部…

安达发APS排产软件之PDM产品工艺数据管理

PDM(Product Data Management,产品数据管理)是一种用于管理产品全生命周期内所有与产品相关的信息和数据的技术。在制造业中,PDM系统被广泛应用于产品工艺数据管理,以提高生产效率、降低成本、保证产品质量和缩短产品上…

Vue3+Pinia实现持久化动态主题切换

PC端主题切换大家都用过,下面用Vue3Pinia实现一下这个过程; 【源码地址】 1、准备工作 npm install pinia npm install pinia-plugin-persist2、基础配置 // main.js import { createApp } from vue import App from ./App.vue import bootstrap from "../bo…

Java面向对象(抽象类,接口,内部类)

文章目录 今日内容教学目标 第一章 抽象类1.1 概述1.1.1 抽象类引入 1.2 abstract使用格式1.2.1 抽象方法1.2.2 抽象类1.2.3 抽象类的使用 1.3 抽象类的特征1.4 抽象类的细节1.5 抽象类存在的意义 第二章 接口2.1 概述2.2 定义格式2.3 接口成分的特点2.3.1.抽象方法2.3.2 常量2…

麒麟KYLINOS禁用IPV6地址

原文链接:麒麟KYLINOS操作系统上禁用IPv6的方法 hello,大家好啊!今天我要给大家介绍的是在麒麟KYLINOS操作系统上禁用IPv6的方法。IPv6是最新的网络通信协议,旨在解决IPv4地址耗尽的问题。然而,在某些特定的网络环境或…

MYSQL 索引使用规则

索引失效 最左前缀法则 where之后写的顺序不重要&#xff0c;存在就可以 范围查询后面的索引查询失效&#xff08;比如>&#xff09;,但是>或者<是不会失效的 不要在索引列上进行运算操作&#xff0c;否则索引失效。 字符串类型字段不加引号索引会失效 尾部模糊匹配…

ThreadLocalRandom类原理剖析

ThreadLocalRandom 类是JDK7在JUC包下新增的随机数生成器&#xff0c;它弥补了Random类在多线程下的缺陷。 Random 类及其局限性 在JDK7之前包括现在&#xff0c;java.util.Random都是使用比较广泛的随机数生成工具类&#xff0c;而且java.lang.Math中的随机数生成也使用的是…

网安面试三十到题(结束)

121 有文件上传了漏洞了&#xff0c;linux下怎么找xx.conf的文件 目录遍历,目录扫描 122 反序列化漏洞原理 ## 你要把别人序列化好的文件进行反序列化进行利用&#xff0c;但是在序列化的过程中&#xff0c;被别人注入了攻击代码、魔 法函数之类的&#xff0c;当你反序列化的时…

花为缘积萨伯爵名表工艺之美,传承卓越

腕表是时间的载体&#xff0c;也是品味的象征。在现代人眼中&#xff0c;它们不仅仅是时间的工具&#xff0c;更是一种艺术形式。在制表工艺的殿堂中&#xff0c;花为缘积萨伯爵名表以其独特的创造力和严谨缜密的要求&#xff0c;创作了一系列典范之作&#xff0c;将技术与美学…