element tree 设置check-strictly=true后,手动重写逻辑实现父子关联

前言

遇到需求如下:

  • 当取消勾选某个节点为按钮时,并且该节点的同级节点都为按钮时(此时父级是勾选状态),不管同级节点是否都取消勾选,那么父级不取消勾选。除非手动取消父级勾选(原因是:页面和按钮不构成联动逻辑
  • 当同级节点为按钮和菜单混合,或者都为菜单时,并且同级都取消勾选了,那么父级勾选。

综上,想了下,打算设置element tree 父子不关联,然后手动重写关联逻辑。

代码

<template><div><el-tree :data="treeData" node-key="id" :props="defaultProps" @check="handleCurrCheck":check-strictly="checkStrictly" ref="treeRef" default-expand-all show-checkbox></el-tree><el-button type="primary" style="margin-top: 20px;" @click="handleTreeChecked">获取当前选中数据</el-button></div>
</template><script>
/*** 设置父子不关联。根据业务需求手动重写父子关联逻辑* type: 1 为按钮 0 为菜单*/
export default {data() {return {treeData: [{id: 1,label: '一级 1',children: [{id: 4,label: '二级 1-1',parentId: 1,children: [{id: 7,label: '三级 1-1-1',parentId: 4},{id: 8,label: '三级 1-1-2',parentId: 4}]}]},{id: 2,label: '一级 2',children: [{id: 5,label: '按钮 2-1',type: 1,parentId: 2}]},{id: 3,label: '一级 3',children: [{id: 6,label: '按钮 3-1',type: 1,parentId: 3},{id: 9,label: '二级 3-2',type: 0,parentId: 3}]}],defaultProps: {children: 'children',label: 'label'},checkStrictly: true,};},methods: {handleCurrCheck(data) {let currentNode = this.$refs.treeRef.getNode(data)if (currentNode.checked) { // 选中this.recursionParentChecked(currentNode.parent, true) // 该级以上,父级选中this.recursionChildChecked(currentNode.childNodes, true) // 该级以下,子级全部选中} else { // 取消this.recursionChildChecked(currentNode.childNodes, false)// 该级以下,子级全部取消// if (data.type != 1) { // 是菜单,父级就正常取消this.recursionParentChecked(currentNode.parent, false, data.type) // 该级以上,父级需要判断// }}},recursionParentChecked(node, isChecked, type) { // 递归父级if (node.level != 0) {if (isChecked) { // 勾选if (node) {this.$refs.treeRef.setChecked(node.data, true)this.recursionParentChecked(node.parent, isChecked)}} else { // 取消勾选if (node && node.childNodes) {const res = node.childNodes.filter(item => !item.checked)const isExistMenu = node.childNodes.some(item => !item.data.type)if (node.childNodes.length == res.length && isExistMenu) { // 子级全部取消了,并且没有菜单,则父级取消勾选状态this.$refs.treeRef.setChecked(node.data, false)}this.recursionParentChecked(node.parent, isChecked, type)}}}},recursionChildChecked(node = [], isChecked) { // 递归子级node.forEach(item => {this.$refs.treeRef.setChecked(item.data, isChecked)this.recursionChildChecked(item.childNodes, isChecked)})},handleTreeChecked() {const res = this.$refs.treeRef.getCheckedKeys()console.log(res);}}
};
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {margin: 40px 0 0;
}ul {list-style-type: none;padding: 0;
}li {display: inline-block;margin: 0 10px;
}a {color: #42b983;
}
</style>

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

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

相关文章

[python] Python日志记录库loguru使用指北

Loguru是一个功能强大且易于使用的开源Python日志记录库。它建立在Python标准库中的logging模块之上&#xff0c;并提供了更加简洁直观、功能丰富的接口。Logging模块的使用见&#xff1a;Python日志记录库logging总结。Loguru官方仓库见&#xff1a;loguru&#xff0c;loguru官…

用合成数据训练边缘侧火灾检测器

火灾是人类面临的重大威胁&#xff0c;检测火灾至关重要。目前的火焰传感器在距离检测方面存在局限性。为了克服这个问题&#xff0c;我的目标是使用机器学习方法创建一个轻量级且高度准确的火灾检测系统。当需要实时数据处理或机器学习模型可用的数据集很少时&#xff0c;这个…

ELK企业级实战

一、Elstic stack在企业的常⻅架构 https://www.bilibili.com/video/BV1x94y1674x/?buvidXY705117E90F73A790429C9CFBD5F70F22168&vd_source939ea718db29535a3847d861e5fe37ef ELK 解决取得问题 痛点1: ⽣产出现故障后&#xff0c;运维需要不停的查看各种不同的⽇志进⾏…

深入解析Java和Go语言中String与byte数组的转换原理

1.Java String与byte[]互相转换存在的问题 java中&#xff0c;按照byte[] 》string 》byte[]的流程转换后&#xff0c;byte数据与最初的byte不一致。 多说无益&#xff0c;上代码&#xff0c;本地macos机器执行&#xff0c;统一使用的UTF-8编码。 import java.nio.charset.S…

逻辑操作符

目录 && --- 逻辑与操作符 || --- 逻辑或操作符 && --- 逻辑与操作符 逻辑与操作符有并且的意思&#xff0c;一般用于判断语句中 逻辑与操作符运行规则是都要为真&#xff0c;才会继续执行或计算 360笔试题&#xff1a; 有关前置(--)&#xff0c;后置(-…

树莓派安装windows系统

第1步&#xff1a; https://uupdump.net/下载对应的系统文件&#xff0c;所有选择项都默认选择。 第2步&#xff1a; 解压下载后的文件&#xff0c;双击运行下面文件。等待下载完成&#xff0c;等待过程很漫长&#xff0c;很考验耐心。 第3步&#xff1a; 提示已经finish了&…

Streamer-Sales 销冠 —— 卖货主播大模型来了,一键让你成为销冠!

今天给大家推荐一个在GitHub上非常火的卖货主播大模型 Streamer-Sales&#xff0c;旨在让你成为销冠。 这是一个能够根据商品特点进行解说的卖货主播大模型&#xff0c;通过生成的细腻、独到的解说词&#xff0c;激发用户的购买欲望。 相关链接 项目地址&#xff1a;github.c…

黑龙江等保测评流程

一、等保测评概述 黑龙江等保测评&#xff0c;即信息安全等级保护测评&#xff0c;是一项依据国家网络安全等级保护制度规定&#xff0c;对非涉及国家秘密的网络安全等级保护状况进行检测评估的活动。它包括标准符合性评判活动和风险评估活动&#xff0c;旨在依据网络安全等级…

一文入门Nanomsg通信库

转载自本人博客&#xff1a;https://www.jjy2023.cn/2024/06/27/%e4%b8%80%e6%96%87%e5%85%a5%e9%97%a8nanomsg%e9%80%9a%e4%bf%a1%e5%ba%93/ 1. Nanomsg介绍 Nanomsg官方在线文档&#xff1a;https://nanomsg.org/index.html 本文全部代码用C实现。 以前一直在使用ZeroMQ库处理…

点云从入门到精通技术详解100篇-基于卷积和注意力机制的3D点云特征提取

目录 前言 国内外研究现状 卷积神经网络 三维卷积神经网络 稀疏卷积[21] 基于3D点云数据的目标分类任务 基于Transformer[12]的点云特征提取 神经网络归一化策略 基于3D点云的语义分割任务[45] 基于3D点云的实例分割任务 基于3D点云的目标检测任务[73], [74] 2 相关…

关于Unity运行时动态修改材质的小秘密

一、问题背景 在以往的Unity项目中涉及到修改材质的需求时&#xff0c;也只是改改材质贴图&#xff0c;材质颜色等&#xff0c;也没遇到那么多动态修改材质的坑。最近在做Unity App Demo时也遇到了要修改材质的小需求&#xff0c;本以为几分钟就能完成了&#xff0c;却花费了我…

淘宝商品评论爬虫实战指南:基于Requests与Cookies的实现

在本指南中&#xff0c;我们将深入探讨如何使用Python的requests库结合Cookies机制&#xff0c;高效且合法地爬取淘宝网上的任意商品评论数据。此教程不仅涵盖技术细节&#xff0c;还涉及道德与合规性考量&#xff0c;旨在为读者提供一个全面且实用的爬虫开发框架。 一、前言与…

Cesium Model 中的剪裁平面 (ClippingPlane)

Cesium Model 中的剪裁平面 (ClippingPlane) 参考: https://www.cnblogs.com/webgl-angela/p/9197672.html Cesium Model 中的剪裁平面 (ClippingPlane) // 相关类: class ClippingPlaneCollection {} class ClippingPlane {}// 剪裁的整体流程: Model.prototype.update () …

牛客小白月赛97 (个人题解)(待补完)

前言&#xff1a; 前天晚上写的一场牛客上比赛&#xff0c;虽然只写出了三道&#xff0c;但比起之前的成绩感觉自己明显有了一点进步了&#xff0c;继续努力吧&#xff0c; 正文&#xff1a; 链接&#xff1a;牛客小白月赛97_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞…

如何用DCA1000持续采集雷达数据

摘要&#xff1a;本文介绍一下如何通过mmwave studio软件&#xff0c;搭配DCA1000数据采集卡&#xff0c;对AWR1843BOOST进行不间断的数据采集。本文要求读者已经掌握了有关基础知识。 本文开放获取&#xff0c;无需关注。 到SensorConfig页面下&#xff0c;一步步操作&#xf…

ubuntu 18 虚拟机安装(3)安装mysql

ubuntu 18 虚拟机安装&#xff08;3&#xff09;安装mysql 参考 https://cloud.tencent.com/developer/article/1700780 技术分享 | MySQL 设置管理员密码无法生效一例 https://cloud.tencent.com/developer/article/2014384 在Ubuntu18.04上安装MySQL &#xff5c; 超级详细…

283. 移动零【快慢指针】【C++】

题目描述 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nu…

无人机挂载抛弹吊舱技术详解

随着无人机技术的飞速发展&#xff0c;无人机在军事、安全、农业、环保等领域的应用越来越广泛。其中&#xff0c;挂载抛弹吊舱的无人机在精确打击、应急处置等场合发挥着重要作用。抛弹吊舱技术通过将弹药、物资等有效载荷挂载在无人机下方&#xff0c;实现了无人机的远程投放…

昇思25天学习打卡营第7天|模型训练

模型训练 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 前面几天依次学习了前面几个步骤的操作&#xff0c;今天继续学习模型训练。 数据集和神经网络模型这个前面已经有详细的介绍。准确…

JVM(13):虚拟机性能分析和故障解决工具之Visual VM

1 Visual VM作用 是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序&#xff0c;并且可以遇见在未来一段时间内都是官方主力发展的虚拟机故障处理工具。官方在VisualVM的软件说明中写上了“All-in-One”的描述字样&#xff0c;预示着他除了运行监视、故障处理外&…