element-ui el-table 树形结构 父子级联动

el-table 表格

为 select 和 select-all 设置回调函数

<el-table :data="tableData" id="yc_load" ref="yc_load" height="500px" border default-expand-allrow-key="showId" :tree-props="{children: 'children'}"@select="select"@select-all="selectAll"><el-table-column type="selection" width="50"></el-table-column><el-table-column label="姓名" :fixed="true" prop="showName" align="left" header-align="left" width="230"></el-table-column>
</el-table>

简要数据格式

tableData: [{showId: xxx,showName: xxx,children: [{showId:xxx,showName:xxx,parentId:xxx},{showId:xxx,showName:xxx,parentId:xxx}]},{showId: xxx,showName: xxx}
],
ids: []

单选

select(selection,row){let vm = this// 操作行 row 在 已选范围 selection 内,认为是选中,否则是取消选中 if(selection.some((el)=>row.showId===el.showId)){// 设置当前行选中状态row.isChecked = true// 记录选中id this.addId(row)// 若存在子级,自己全选if(row.children) {row.children.map(c => {this.$refs.yc_load.toggleRowSelection(c,true)c.isChecked = truethis.addId(c)})}// 若存在父级,设置父级选中if(row.parentId){let pNode = vm.tableData.find(x => x.showId === row.parentId)this.$refs.yc_load.toggleRowSelection(pNode,true)pNode.isChecked = truethis.addId(pNode)}} else {row.isChecked = falsethis.deleteId(row)// 若存在子级,子级全部取消选中if(row.children){row.children.map((i)=>{this.$refs.yc_load.toggleRowSelection(i,false)i.isChecked = falsethis.deleteId(i)})}// 若存在父级,判断父级的子级(当前行的兄弟) ,若全部未选中,取消父级选中if(row.parentId) {let pNode = vm.tableData.find(x => x.showId === row.parentId)if(!pNode.children.some(el => el.isChecked == true)) {this.$refs.yc_load.toggleRowSelection(pNode,false)pNode.isChecked = falsethis.deleteId(pNode)}}}console.log(this.ids)
}

全选

selectAll(selection) {// 判断当前是否有已选中的let rA = this.tableData.some(el => {let r = falseif(el.children) {r = el.children.some(e => e.isChecked)}if(r) return rreturn el.isChecked})// 若有选中则全部取消,否则全部选中if(rA) {this.tableData.forEach(el => {el.isChecked = falsethis.$refs.yc_load.toggleRowSelection(el, false)this.deleteId(el)if(el.children) {el.children.forEach(e => {e.isChecked = falsethis.$refs.yc_load.toggleRowSelection(e, false)this.deleteId(e)})}})} else {this.tableData.forEach(el => {el.isChecked = truethis.$refs.yc_load.toggleRowSelection(el, true)this.addId(el)if(el.children) {el.children.forEach(e => {e.isChecked = truethis.$refs.yc_load.toggleRowSelection(e, true)this.addId(e)})}})}console.log(this.ids)
}

操作 ids

	// 增加选中addId(o) {let id = o.showIdif(this.ids.indexOf(id) < 0) {this.ids.push(id)}},// 删除选中deleteId(o) {let id = o.showIdthis.ids = this.ids.filter(item => item !== id);},

不再设置 selection-change 回调函数,直接监听ids

  // 监听idswatch: {ids: function (newVal, oldVal) {this.handleChange(newVal)}},

感谢 element-ui el-table 实现全选且父级子级联动 提供的思路
另附 el-table 文档

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OB Cloud助力泡泡玛特打造新一代分布式抽盒机系统

作为中国潮玩行业的领先者&#xff0c;泡泡玛特凭借 MOLLY、DIMOO、SKULLPANDA 等爆款 IP&#xff0c;以及线上线下全渠道营销收获了千万年轻人的喜爱&#xff0c;会员数达到 2600 多万。2022 年&#xff0c;泡泡玛特实现 46.2 亿元营收&#xff0c;其中线上渠道营收占比 41.8%…

Vue中过滤器如何使用?

过滤器是对即将显示的数据做进⼀步的筛选处理&#xff0c;然后进⾏显示&#xff0c;值得注意的是过滤器并没有改变原来 的数据&#xff0c;只是在原数据的基础上产⽣新的数据。过滤器分全局过滤器和本地过滤器&#xff08;局部过滤器&#xff09;。 目录 全局过滤器 本地过滤器…

判断EditText键盘输入的是中文还是英文,如何监听

为了判断EditText键盘输入的是中文还是英文&#xff0c;你可以使用InputMethodManager类来获取当前输入法的信息。在输入法切换时&#xff0c;你可以通过监听EditText的文本改变事件来判断输入法的类型。下面是一个简单的示例代码&#xff1a; // 监听EditText的文本改变事件 …

ROS实现一个节点同时发布订阅多个话题(C++版)

如果想在一个节点同时发布订阅多个话题就要使用到多线程机制&#xff0c;在C中如何使用多线程&#xff0c;在C中开多线程模板已经有了介绍&#xff0c;就是下面这个&#xff1a; #include<thread>void listenThread() {// 线程1内容 }void sendThread() {// 线程2内容 }…

前端面试基础面试题——6

1.CSS 隐藏元素的几种方法&#xff08;至少说出三种&#xff09; 2.页面导入样式时&#xff0c;使用 link 和import 有什么区别&#xff1f; 3.伪元素和伪类的区别&#xff1f; 4.行内元素和块级元素的具体区别是什么&#xff1f;行内元素的 padding 和 margin 可设置吗&…

将虚拟机网络适配器改为仅主机模式,Vmware弹出“仅主机模式适配器驱动程序似乎未运行

这个问题的原因是&#xff0c;主机上缺乏VMware安装后没有VMnet1和VMnet8网卡。 所以

win10下使用composer安装依赖ssl报错处理

报错&#xff1a;you are running Composer with SSL/TLS protection disabled. https://repo.packagist.org could not be fully loaded (curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: unable to get local issuer c…

Springboot 实践(13)spring boot 整合RabbitMq

前文讲解了RabbitMQ的下载和安装&#xff0c;此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目&#xff0c;名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件&#xff0c;添加amqp使用jar包 <!-- RabbitMQ --> <dependency&g…

EXCEL 中find,if and,if or

接上一篇sql中find函数的作用&#xff0c;由于工作需求是用帆软做报表&#xff0c;他的一些代码不仅有js&#xff0c;sql中的还有一些excel的相关知识&#xff0c;故作整理。 FIND() excel中的find原理和sql中相似&#xff0c;具体可查看 SQL函数 $FIND_Yangshiwei....的博客…

Python,如何安装lap,pip安装lap出现问题

Linux可以&#xff1a; pip install cpython pip install gitgit://github.com/gatagat/lap.gitwindows可以&#xff1a; 下载https://github.com/gatagat/lap 后解压&#xff0c; 安装pip install cpython 安装VS2019企业版&#xff1a; key BF8Y8-GN2QH-T84XB-QVY3B-RC4D…

自动化测试

1. 什么是自动化 1.1 自动化概念 自动化就是解放测试人员双手&#xff0c;测试工作由代码代替人工执行测试工作。 自动化不能完全代替手工测试。 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或系统&#xff0c;预设条件包括正常和异常&#xff0c;最…

qt 信号与槽机制,登录界面跳转

登录界面跳转 配置文件 .pro QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # d…

CSS3常用的新功能总结

CSS3常用的新功能包括圆角、阴渐变、2D变换、3D旋转、动画、viewpor和媒体查询。 圆角、阴影 border-redius 对一个元素实现圆角效果&#xff0c;是通过border-redius完成的。属性为两种方式&#xff1a; 一个属性值&#xff0c;表示设置所有四个角的半径为相同值&#xff…

免费SSL/TLS域名证书Certbot配置详细过程

文章目录 1. 在服务器上安装 Certbot2. 停止 web 服务器3. 运行 certbot 命令4. 证书生成位置5. 配置 web 服务器6. 重新加载 web 服务器7. 验证8. 配置自动续期发现问题1. Problem binding to port 80: Could not bind to IPv4 or IPv6.2. live directory exists for example.…

Clion 使用ffmpeg 学习1 开发环境配置

Clion 使用ffmpeg 学习1 开发环境配置 一、准备工作1. 准备环境2. 下载FFmpeg 二、操作步骤1. Clion 新建一个C项目2. 修改 CMakeLists.txt3. 修改配置4. 运行测试5. 打印rtsp 流信息的 demo 一、准备工作 在视频处理和多媒体应用程序开发中&#xff0c;FFmpeg 是一个强大的开…

MS1826A HDMI 多功能视频处理器 HDMI4进1出画面分割芯片

基本介绍 MS1826A 是一款多功能视频处理器&#xff0c;包含 4 路独立 HDMI 音视频输入通道、1 路 HDMI 音视 频输出通道以及 1 路独立可配置为输入或者输出的 SPDIF、I2S 音频信号。支持 4 个独立的字库定 制型 OSD&#xff1b;可处理隔行和逐行视频或者图形输入信号&#xff1…

数学建模--逻辑回归算法的Python实现

首先感谢CSDN上发布吴恩达的机器学习逻辑回归算法任务的各位大佬. 通过大佬的讲解和代码才勉强学会. 这篇文章也就是简单记录一下过程和代码. CSDN上写有关这类文章的大佬有很多,大家都可以多看一看学习学习. 机器学习方面主要还是过程和方法. 这篇文章只完成了线性可分方面的任…

Promise常用方法笔记

mixin.methods.getList(xxx) 是axios的二次封装 是通过Promise进行基本封装 let a mixin.methods.getList(toosSet.gettype);let b mixin.methods.getList(toosSet.gettypes);let c mixin.methods.getList(toosSet.gettypess);Promise.all([a, b, c]).then((res) > {aler…

Python中的函数式编程是什么?

Python中的函数式编程是一种编程范式&#xff0c;它强调使用纯函数和避免可变状态来构建程序。函数式编程的核心思想是将计算视为函数的求值&#xff0c;而不是通过改变状态来实现。在函数式编程中&#xff0c;函数被视为一等公民&#xff0c;可以作为参数传递给其他函数&#…

音频应用编程

目录 ALSA 概述alsa-lib 简介sound 设备节点alsa-lib 移植编写一个简单地alsa-lib 应用程序一些基本概念打开PCM 设备设置硬件参数读/写数据示例代码之PCM 播放示例代码值PCM 录音 使用异步方式PCM 播放示例-异步方式PCM 录音示例-异步方式 使用poll()函数使用poll I/O 多路复用…