完美解决ElementUI中树形结构table勾选问题

embedded/2025/3/14 13:07:12/

完美解决ElementUI中树形结构table勾选问题

  • 实现功能
  • 效果图
    • 全选
    • 取消全选
    • 取消父节点
    • 取消某个子节点
  • 关键代码

实现功能

1. 全选/取消全选,更新所有节点勾选状态
2. 勾选父/子节点,子/父节点状态和全选框状态更新

效果图

全选

在这里插入图片描述

取消全选

在这里插入图片描述

取消父节点

在这里插入图片描述

取消某个子节点

在这里插入图片描述

关键代码

这里是vue2写法,不管什么写法逻辑是一样滴!

<template><el-tableref="multipleTable"v-loading="loading"row-key="id":data="tableList":tree-props="{ children: 'children' }"@select-all="selectAll"@select="handleSelect"><el-table-column type="selection" width="55"> </el-table-column></el-table>
</template>
<script>
export default {methods: {// 递归设置子节点的勾选状态setChildrenSelection(children, selected) {if (!children || children.length === 0) return;children.forEach((child) => {this.$refs.multipleTable.toggleRowSelection(child, selected);this.setChildrenSelection(child.children, selected);});},// 更新父节点的勾选状态updateParentSelection(node) {if (!node || !node.pid) return; // 如果没有父节点,递归终止const parent = this.findNodeById(node.pid);if (!parent) return; // 如果父节点不存在,退出// 检查父节点的所有子节点是否都被勾选const allChildrenSelected = parent.children.every((child) =>this.$refs.multipleTable.selection.some((item) => item.id === child.id));// 根据子节点的勾选状态更新父节点的勾选状态this.$refs.multipleTable.toggleRowSelection(parent, allChildrenSelected);// 递归更新父节点的父节点this.updateParentSelection(parent);},// 根据 ID 查找节点findNodeById(id) {const stack = [...this.tableList];while (stack.length) {const node = stack.pop();if (node.id === id) return node;if (node.children && node.children.length) {stack.push(...node.children);}}return null;},// 勾选事件处理handleSelect(selection, row) {if (row.children && row.children.length) {// 如果当前节点有子节点,递归设置子节点的勾选状态const isCurrentSelected = selection.some((item) => item.id === row.id);this.setChildrenSelection(row.children, isCurrentSelected);}// 更新父节点的勾选状态this.updateParentSelection(row);},// 全选事件处理selectAll(selection) {this.tableList.forEach((row) => {const isRowSelected = selection.some((item) => item.id === row.id);this.$refs.multipleTable.toggleRowSelection(row, isRowSelected);// 递归设置子节点的勾选状态this.setChildrenSelection(row.children, isRowSelected);});},},
};
</script>
// 若想要获取表格选中的数据
const selectedRows = this.$refs.multipleTable.selection;

http://www.ppmy.cn/embedded/172496.html

相关文章

通义万相 2.1 × 蓝耘智算:AIGC 界的「黄金搭档」如何重塑创作未来?

我的个人主页 我的专栏&#xff1a; 人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01; 点赞&#x1f44d;收藏❤ 引言 在当今数字化浪潮席卷的时代&#xff0c;AIGC&#xff08;生成式人工智能&#xff09;领域正…

医院本地化DeepSeek R1对接混合数据库技术实战方案研讨

1. 引言 Deep SEEK R1是一个医疗智能化平台,通过本地化部署实现数据的安全性和可控性,同时提供高效的计算能力。随着医疗信息化的迅速发展,各种数据源的增加使得医院面临更多复杂的挑战,包括如何处理实时监测数据、如何进行大数据环境下的复杂查询以及如何整合多模态数据等…

Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南

文章核心价值 技术热点:结合全球最流行的编程语言与国产顶尖AI模型实用场景:覆盖代码开发/数据分析/办公自动化等高频需求流量密码:揭秘大模型在编程中的创造性应用目录结构 环境搭建:5分钟快速接入DeepSeek场景一:AI辅助代码开发(智能补全+调试)场景二:数据分析超级助…

【从零开始学习计算机科学】编程语言(一)常用编程语言的发展与介绍

【从零开始学习计算机科学】编程语言(一)常用编程语言的发展与介绍 编程语言可读性可写性可靠性代价影响编程语言的因素编程语言的分类编程语言设计中的权衡编程语言的实现方法编程环境编程语言的发展过程低级语言时代高级语言时代第一个高级语言—Fortran第一个结构化程序设…

【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理

第十五届省赛真题代码题解析 前言赛题代码思路笔记竞赛板配置建立模板明确基本要求显示功能部分频率界面正常显示高位熄灭 参数界面基础写法&#xff1a;两个界面分开来写优化写法&#xff1a;两个界面合一起写 时间界面回显界面校准校准过程校准错误显示 DAC输出部分按键功能部…

2024 年第四届高校大数据挑战赛-赛题 A:岩石的自动鉴定

问题1&#xff1a;沉积岩薄片识别模型设计问题分析核心任务&#xff1a;基于“南京大学沉积岩教学薄片照片数据集”&#xff0c;构建多类别分类模型&#xff0c;区分火山碎屑岩、砂岩、泥页岩等9类沉积岩。特征提取需求&#xff1a; 颜色特征&#xff1a;矿物成分差异导致偏光下…

Spring Boot 集成 Lua 脚本:实现高效业务逻辑处理

1. 前言 1.1 什么是Lua Lua是一种轻量级、高性能的脚本语言,常用于游戏开发、嵌入式系统、配置文件解析等领域。Lua语法简洁,易于学习和使用,且具有强大的扩展性。 1.2 Spring Boot与Lua集成的意义 将Lua集成到Spring Boot应用中,可以实现动态配置业务逻辑、简化复杂业…

electron + vue3 + vite 渲染进程与渲染进程之间的消息端口通信

渲染进程与渲染进程之间的通信有两种&#xff1a; 通过主进程进行消息转发&#xff08;通过组合主进程与渲染进程之间的单向、双向通信可以实现&#xff0c;可以自己动手尝试&#xff0c;该篇不讲解&#xff09;通过消息端口进行直接通信 该篇主要用示例讲解下单项目内多个窗口…