el-table大数据量树形表格虚拟渲染,结合复选框的功能实现,利用vxe-table组件可实现该功能,不是手写!!!

server/2025/1/11 10:23:53/

公司最近有个需求优化,el-table的树形表格,结合复选框,在数据量大的情况下,会导致整个页面卡顿,且勾选全选功能时,间隔几秒才能响应。忍无可忍,于是疯狂找百度,寻找好的组件使用。终于给我找到了一套好用的组件,优化了 el-table+树形+复选框(快速渲染,点击复选框不会卡顿)。

先上官网:

Vxe Table v4icon-default.png?t=O83Ahttps://vxetable.cn/#/component/table/scroll/tree具体页面效果:

注意(踩坑)
刚开始我是跟着官网安装最新版本,最新版本好像出现些问题,点击全选全部勾选上,再点击取消某个最内层子级复选框时,父级按钮确实变为半选状态,但是父级以上的层级就会出现问题,并不会变为半选状态。

解决方案:

于是我还是用回了稳定的版本,如果您不在意这个细节的话也可以使用最新版本,以下附上我的使用版本:

这里我介绍主要的几个属性:

属性说明数据类型

checkbox-config

复选框配置项object
checkbox-config.checkField绑定选中属性(行数据中必须存在该字段,否则无效)string
checkbox-config.checkMethod是否允许勾选的方法,该方法,的返回值用来决定这一行的 checkbox 是否可以勾选({ row }) => boolean
属性说明数据类型
tree-config树形结构配置项object
tree-config.transform自动将列表转为树结构(支持虚拟滚动)boolean
tree-config.parentField用于 tree-config.transform,树父节点的字段名string
属性说明数据类型

scroll-y

纵向滚动配置object
scroll-y.enabled是否启用boolean
scroll-y.gt指定大于指定行时自动启动纵向虚拟滚动,如果为 0 则总是启用;如果需要关闭,可以设置 enabled 为 false(注:启用纵向虚拟滚动之后将不能支持动态行高)number
事件名说明
checkbox-change只对 type=checkbox 有效,当手动勾选并且值发生改变时触发的事件
checkbox-all只对 type=checkbox 有效,当手动勾选全选时触发的事件

当点击全选或勾选某个时,我们可以获得已选中的行数据,数据格式如下,我们可以获取records字段即可获取已选中的行数据:

注意data属性接收的数据结构是一维数据,一般后端返回给我们的都是树形结构的数组,我们拿到还需要将其扁平化

主要代码:

html:

<vxe-tableref="vxeTable"show-overflowempty-text="暂无数据":header-cell-style="{background: '#EFF0F2',color: '#1A1E25',fontWeight: 400,}":row-config="{isHover: true,}":checkbox-config="{checkField: 'transferStatus',checkMethod: checkboxCheckMethod,}":tree-config="{parentField: 'parentId',iconClose: 'el-icon-arrow-right',iconOpen: 'el-icon-arrow-down',transform: true,}":scroll-y="{enabled: true,gt: 0,}":data="tableData":min-height="100":max-height="700"border="inner"@checkbox-change="handleCheckboxChange"@checkbox-all="handleCheckboxChange"
><vxe-columnfield="name"title="移交目录清单":tree-node="true"min-width="100"/><vxe-columntitle="最近移交时间"field="transferTime"align="center"/><vxe-columntype="checkbox"title="是否移交"width="120"align="center"/>
</vxe-table>

js:

checkboxCheckMethod({ row }) {if (this.disabled) {return false}return true
},
handleCheckboxChange(data) {this.selectionList = data.records
},
// 展开所有
expandTree() {this.$refs.vxeTable.setAllTreeExpand(true)
},
flattenTreeData(treeData, result = []) {for (let i = 0; i < treeData.length; i++) {const node = treeData[i]result.push(node) // 将当前节点添加到结果数组中if (node.children && node.children.length > 0) {this.flattenTreeData(node.children, result) // 递归处理子节点}}return result
}


http://www.ppmy.cn/server/157438.html

相关文章

如何解决HTML和CSS相关的问题,什么情况下会导致元素被遮挡?

在开发过程中&#xff0c;HTML 和 CSS 中的元素遮挡问题通常是由于布局、定位、层级等因素导致的。在使用 Vue.js 时&#xff0c;这些问题依然常见&#xff0c;尤其是涉及到动态渲染、条件渲染和组件嵌套的场景。以下是一些常见的导致元素被遮挡的原因&#xff0c;并通过 Vue.j…

【C++多线程编程:六种锁】

目录 普通互斥锁&#xff1a; 轻量级锁 独占锁&#xff1a; std::lock_guard&#xff1a; std::unique_lock: 共享锁&#xff1a; 超时的互斥锁 递归锁 普通互斥锁&#xff1a; std::mutex确保任意时刻只有一个线程可以访问共享资源&#xff0c;在多线程中常用于保…

常见的图形库对比 Echarts Highcharts AntV

图形库 图形库特点图表类型适用场景依赖项官网/文档ECharts功能丰富&#xff0c;支持大规模数据&#xff0c;交互性强折线图、柱状图、饼图、地图、雷达图、散点图、热力图等复杂数据可视化无https://echarts.apache.org/Chart.js简单易用&#xff0c;轻量级&#xff0c;支持响…

C++ STL 中的 `unordered_map` 和 `unordered_set` 总结

1. unordered_map unordered_map 是一个基于哈希表实现的容器&#xff0c;存储键值对&#xff08;key-value&#xff09;&#xff0c;每个键必须唯一&#xff0c;可以快速插入、删除、查找。 基本特性 存储结构&#xff1a;键值对 (key-value)。键唯一性&#xff1a;每个键在…

netty解码器LengthFieldBasedFrameDecoder用法详解

Netty Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对并发和异步编程的抽象,使得开发网络应用程序变得更加简单和高效。 在Netty中,EventLoopGroup是处理I/O操作的多线程事件循环器。在上面的示例中,我们创建了两个EventLoopGroup实例:bossGroup和worker…

OSPF - 影响OSPF邻居建立的因素

总结为这么10种 routerID 冲突区域id不一致认证MA网络掩码需一致区域类型(特殊区域)hello、dead时间MTU(如果开启检查)静默接口网络类型不匹配MA网络中路由器接口优先级全为0 如何建立邻居可以查看上一篇文章&#xff0c;可以直接专栏找&#xff08;&#x1f92b;挂链接会没流…

排序:插入、选择、交换、归并排序

排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;…

代码管理助手-Git

前言 Git 是一个版本控制系统&#xff0c;可以帮助你记录文件的每一次修改。这样&#xff0c;如果你在编程时不小心把代码写错了&#xff0c;可以很容易地回退到之前的版本。最重要的是&#xff0c;Git 是完全免费的&#xff0c;用户可以在自己的计算机上安装和使用 Git&#x…