当前位置: 首页 > news >正文

vue3+elementplus+虚拟树el-tree-v2+多条件筛选过滤filter-method

筛选条件

<el-inputv-model="searchForm.searchTreeValue"@input="searchTreeData"style="flex: 1; margin-right: 0.0694rem"placeholder="请输入要搜索的设备"clearable/><imgclass="refresh-img"src="com_refresh.png"alt="refresh"@click="refreshTree"/>     <el-selectv-model="searchForm.deviceType"placeholder="请选择"size="small"style="flex: 1"@change="searchTreeData"><el-optionv-for="item in data":key="item.value":label="item.label":value="item.value"/></el-select><el-selectv-model="searchForm.deviceSource"placeholder="请选择"size="small"style="flex: 1"@change="searchTreeData"><el-optionv-for="item in data":key="item.value":label="item.label":value="item.value"/></el-select>

el-tree-v2

 <el-tree-v2class="treev2-t"ref="treeRef"style="width: 100%":height="treeHeight":data="treeData":filter-method="filterNode":default-expanded-keys="expandedKeys"node-key="hightlightKey":expand-on-click-node="true":show-checkbox="true"empty-text="暂无组织数据"></tree>

script-初始化

const treeData = reactive([]) // 后端接口树形数据
const treeRef = ref(null)
const searchForm = reactive({searchTreeValue: '',deviceType: '',deviceSource: '',deviceTag: '',
})
watch(searchForm,(newValue, oldValue) => {closeDialog()treeRef.value?.filter()},{ immediate: true, deep: true }
)

script-过滤

/*** 树搜索*/
function filterNode(value, data) {if ((!value &&!searchForm.deviceType &&!searchForm.deviceSource &&!searchForm.deviceTag) ||data.toiName == undefined ||data.mac == undefined ||data.channelCode == undefined)return truereturn checkNodeMatch(data)
}
// 检查节点是否匹配所有条件
const checkNodeMatch = (node) => {let idsArr = []if (node.infos && node.infos.length > 0) {cliIds = node.infos.map((item) => item.id)}const conditions = [{value: searchForm.searchTreeValue,match: () =>node.name?.toLowerCase().includes(searchForm.searchTreeValue.toLowerCase()) },{value: searchForm.deviceType,match: () =>!searchForm.deviceType ||node.channelType == searchForm.deviceType,},{value: searchForm.deviceSource,match: () =>!searchForm.deviceSource ||idsArr.includes(searchForm.deviceSource),},]return conditions.every((condition) => !condition.value || condition.match())
}const treeFilterData = computed(() => {if (!hasSearchConditions()) {return treeData}return filterTree(treeData)
})
// 检查是否有搜索条件
const hasSearchConditions = () => {return Object.values(searchForm).some((value) => value !== '')
}// 递归过滤树数据
const filterTree = (data) => {if (!data) return []return data.reduce((acc, node) => {// 创建节点副本const newNode = { ...node }// 检查节点是否匹配const isMatch = checkNodeMatch(newNode)// 处理子节点if (node.children?.length) {const filteredChildren = filterTree(node.children)if (filteredChildren.length) {newNode.children = filteredChildrenacc.push(newNode)return acc}}// 如果当前节点匹配,添加到结果中if (isMatch) {if (!newNode.children?.length) {delete newNode.children}acc.push(newNode)}return acc}, [])
}const searchTreeData = useDebounce(handleSearchTreeData, 300) // 300ms 的防抖延迟
// 定义你想要执行的配套函数
function handleSearchTreeData() {//  ???// 触发重新渲染treeRef.value?.setData(treeFilterData.value)
}
// 使用 useDebounce 创建一个防抖版本的函数
const refreshTree = useDebounce(handleRefreshTree, 300) // 300ms 的防抖延迟
function handleRefreshTree(){searchForm.deviceSource = ''searchForm.deviceTag = ''searchForm.deviceType = ''searchForm.searchTreeValue = ''treeRef.value?.setCheckedKeys([], false)
}
// 防抖
export const useDebounce = (fn, delay = 300) => {let timer = nullreturn (...args) => {clearTimeout(timer)timer = setTimeout(() => {fn(...args)}, delay)}
}

相关文章:

vue3+elementplus+虚拟树el-tree-v2+多条件筛选过滤filter-method

筛选条件 <el-inputv-model"searchForm.searchTreeValue"input"searchTreeData"style"flex: 1; margin-right: 0.0694rem"placeholder"请输入要搜索的设备"clearable/><imgclass"refresh-img"src"com_refres…...

【C#设计模式(4)——构建者模式(Builder Pattern)】

前言 C#设计模式(4)——构建者模式(Builder Pattern) 运行结果 代码 public class Computer {private string part1 "CPU";private string part2 "主板";private string part3 "内存";private string part4 "显卡";private st…...

LabVIEW实验室液压制动系统

压制动系统是许多实验设备的重要安全组件&#xff0c;尤其在高负荷、高速实验环境下&#xff0c;制动系统的性能对设备和操作人员的安全至关重要。传统的实验室液压制动系统监测方法存在数据采集实时性差、精度低、故障预警不及时等问题。为了提高实验安全性和设备运行的稳定性…...

解决:Loading class `com.mysql.jdbc.Driver‘. This is deprecated

问题&#xff1a;Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 解决方式&#xff…...

【寻找重复数字】——脑筋急转弯...

寻找重复数字 287. 寻找重复数 题目难度 中等 相关标签与企业信息 [相关标签] [相关企业] 题目描述 给定一个包含 n 1 n 1 n1 个整数的数组 nums&#xff0c;其数字都在 [ 1 , n ] [1, n] [1,n] 范围内&#xff08;包括 1 1 1 和 n n n&#xff09;&#xff0c;可…...

AI基础知识

目录 1.激活函数:one: 激活函数的作用:two: sigmoid函数:three: tanh函数:four: ReLu:five: Leaky ReLU 2.Softmax函数3.优化器:one: 优化器的作用:two: BGD&#xff08;批梯度下降&#xff09;:three: SGD&#xff08;随机梯度下降&#xff09;:four: MBGD&#xff08;Mini Ba…...

ubuntu 22.04 硬件配置 查看 显卡

ubuntu 22.04 硬件配置 查看 显卡 1. 参考文档 ubuntu 安装 nvidia 驱动 https://blog.51cto.com/u_13628828/7056095 input: HDA NVidia HDMI/DP,pcm3 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input11 input: HDA NVidia HDMI/DP,pcm7 as /devices/…...

【计算机网络】网络框架

一、网络协议和分层 1.理解协议 什么是协议&#xff1f;实际上就是约定。如果用计算机语言进行表达&#xff0c;那就是计算机协议。 2.理解分层 分层是软件设计方面的优势&#xff08;低耦合&#xff09;&#xff1b;每一层都要解决特定的问题 TCP/IP四层模型和OSI七层模型…...

linux nvidia/cuda安装

1.查看显卡型号 lspci |grep -i vga2.nvidia安装 2.1在线安装 终端输入&#xff08;当显卡插上之后&#xff0c;系统会有推荐的安装版本&#xff09; ubuntu-drivers devices可得到如下内容 vendor : NVIDIA Corporation model : TU104GL [Tesla T4] driver : nvid…...

硬件设备网络安全问题与潜在漏洞分析及渗透测试应用

以下笔记学习来自B站泷羽Sec&#xff1a; B站泷羽Sec 一、硬件设备的网络安全问题点 1.1 物理安全问题 设备被盗或损坏渗透测试视角 攻击者可能会物理接近硬件设备&#xff0c;尝试窃取设备或破坏其物理结构。例如&#xff0c;通过撬锁、 伪装成维修人员等方式进入设备存放…...

#渗透测试#SRC漏洞挖掘#CSRF漏洞的防御

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

C++ | Leetcode C++题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {int m matrix.size(), n matrix[0].size();// 初始化动态规划的数组&#xff0c;所有的距离值都设置为一个很大的…...

RabbitMQ 不公平分发介绍

RabbitMQ 是一个流行的开源消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。在 RabbitMQ 中&#xff0c;消息分发策略对于系统的性能和负载均衡至关重要。默认情况下&#xff0c;RabbitMQ 使用公平分发&#xff08;Fair Dispatch&#xff09;策…...

测试实项中的偶必现难测bug--一键登录失败

问题描述:安卓和ios有出现部分一键登录失败的场景,由于场景比较极端,衍生了很多不好评估的情况。 产生原因分析: 目前有解决过多次这种行为的问题,每次的产生原因都有所不同,这边根据我个人测试和收集复现的情况列举一些我碰到的: 1、由于我们调用的是友盟的一键登录的…...

危!这些高危端口再不知道问题就大了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 端口作为网络通信的基本单元&#xff0c;用于标识网络服务和应用程序。 但某些端口由于其开放性和易受攻击的…...

Redis集群模式之Redis Sentinel vs. Redis Cluster

在分布式系统环境中&#xff0c;Redis以其高性能、低延迟和丰富的数据结构而广受青睐。随着数据量的增长和访问需求的增加&#xff0c;单一Redis实例往往难以满足高可用性和扩展性的要求。为此&#xff0c;Redis提供了两种主要的集群模式&#xff1a;Redis Sentinel和Redis Clu…...

Leetcode 罗马数字转整数

代码的算法思想可以分为以下几步&#xff1a; 建立映射表&#xff1a; 首先&#xff0c;代码使用 HashMap 来存储罗马数字字符与其对应的整数值关系。例如&#xff0c;I 对应 1&#xff0c;V 对应 5&#xff0c;以此类推。这是为了方便后续快速查找每个罗马字符对应的整数值。 …...

东方通TongWeb替换Tomcat的踩坑记录

一、背景 由于信创需要&#xff0c;原来项目的用到的一些中间件、软件都要逐步替换为国产品牌&#xff0c;决定先从web容器入手&#xff0c;将Tomcat替换掉。在网上搜了一些资料&#xff0c;结合项目当前情况&#xff0c;考虑在金蝶AAS和东方通TongWeb里面选择&#xff0c;后又…...

ceph介绍和搭建

1 为什么要使用ceph存储 什么是对象存储&#xff1f; 对象存储并没有向文件系统那样划分为元数据区域和数据区域&#xff0c;而是按照不同的对象进行存储&#xff0c;而且每个对象内部维护着元数据和数据区域。因此每个对象都有自己独立的管理格式。 对象存储优点&#xff1a…...

树莓派安装FreeSWITCH

1、下载相关资源&#xff1a; # 假设所有资源都下载到/opt/目录下 cd /opt # 下载FreeSWITCH源码 git clone https://github.com/signalwire/freeswitch # 下载libks源码 git clone https://github.com/signalwire/libks # 下载sofia-sip源码 git clone https://github.com/fr…...

OpenSSL 生成根证书、中间证书和网站证书

OpenSSL 生成根证书、中间证书和网站证书 一、生成根证书&#xff08;ChinaRootCA&#xff09;二、生成中间 CA&#xff08;GuangDongCA&#xff09;三、生成网站证书&#xff08;gdzwfw&#xff09; 一、生成根证书&#xff08;ChinaRootCA&#xff09; 创建私钥&#xff1a; …...

MySQL核心业务大表归档过程

记录一下2年前的MySQL大表的归档&#xff0c;当时刚到公司&#xff0c;发现MySQL的业务核心库&#xff0c;超过亿条的有7张表&#xff0c;最大的表有9亿多条&#xff0c;有37张表超过5百万条&#xff0c;部分表行数如下&#xff1a; 在测试的MySQL环境 &#xff1a; pt-archiv…...

dapp获取钱包地址,及签名

npm install ethersimport {ethers} from ethers const accounts await ethereum.request({method: eth_requestAccounts}); // 获取钱包地址 this.form.address accounts[0] console.log("accounts:" this.address)const provider new ethers.BrowserProvider(…...

探索Dijkstra算法的普遍最优性:从经典算法到最新学术突破

引言 在计算机科学中&#xff0c;Dijkstra算法是解决单源最短路径问题的经典算法&#xff0c;尤其在地图导航、网络通信和机器人路径规划等领域有着广泛应用。近期&#xff0c;学术界在此算法上取得了重大突破&#xff1a;研究人员证明了Dijkstra算法的“普遍最优性”&#xff…...

‍️代码的华尔兹:在 Makefile 的指尖上舞动自动化的诗篇

文章目录 &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️背景——一个优秀工程师必备技能&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️一、&#x1f929;&#x1f929;快速了解…...

函数式编程Stream流(通俗易懂!!!)

目录 1.Lambda表达式 1.1 基本用法 1.2 省略规则 2.Stream流 2.1 常规操作 2.1.1 创建流 2.1.2 中间操作 filter map distinct sorted limit ​编辑skip flatMap 2.1.3 终结操作 foreach count max&min collect anyMatch allMatch noneMatch …...

数据分析:转录组差异fgsea富集分析

文章目录 介绍加载R包数据链接导入数据数据预处理DE testing: 2BP vs no-BP比较limma-voomLoad steroid dataIn No-BP patientsIn 2BP patientsCompare gene expression vs bacterial mass其他系统信息介绍 转录组差异fgsea富集分析是一种基于基因集的富集分析方法,它关注的是…...

在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能

在Django中可以使用CKEditor4和CKEditor5两个版本&#xff0c;分别对应软件包django-ckeditor和django-ckeditor-5。原来使用的是CKEditor4&#xff0c;python manager.py makemigrations时总是提示CKEditor4有安全风险&#xff0c;建议升级到CKEditor5。故卸载了CKEditor4&…...

AI笔筒操作说明及应用场景

AI笔筒由来&#xff1a; 在快节奏的现代办公环境中&#xff0c;我们一直在寻找既能提升效率、增添便利&#xff0c;又能融入企业文化、展现个人品味的桌面伙伴。为此&#xff0c;我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版&#xff0c;它集高科技与实用性于一身…...

Android自启动管控

1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外&#xff0c;还会导致占用过多的系统CPU和内存资源&#xff0c;造成系统卡顿、发热、电池消耗过快&#xff1b;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…...

四川做网站有哪些公司/宣传软文怎么写

在日常工作和生活中&#xff0c;我们经常会遇到一件事情要重复做很多次的这种情况发生。在编程中&#xff0c;我们也会遇到这种情况&#xff0c;循环这种机制&#xff0c;就是专门用来处理这种需要不断重复做的事情的方法。通过几分钟的阅读&#xff0c;你将会掌握这种机制和编…...

百度只收录wordpress/上海疫情突然消失的原因

k-means聚类算法描述 1、假定我们要对N个样本观测做聚类&#xff0c;要求聚为K类&#xff0c;首先选择K个点作为初始中心点&#xff1b; 2、接下来&#xff0c;按照距离初始中心点最小的原则&#xff0c;把所有观测分到各中心点所在的类中&#xff1b; 3、每类中有若干个观测&…...

我赢网seo优化网站/十大暗网搜索引擎

郁闷&#xff01;今天淘宝被差评 郁闷&#xff01;今天淘宝被差评。经历了淘宝近5个月的掌柜后&#xff08;全职1个半月&#xff09;&#xff0c;淘宝创业的心酸苦辣也是尝了不少&#xff0c;知道淘宝掌柜最怕啥吗&#xff1f;我总结了3大怕5小怕&#xff0c;今天来说一大怕吧-…...

淘宝上做进出口网站有哪些/市场调研报告的基本框架

上一篇简单的实现了获取url返回的内容&#xff0c;在这一篇就要第返回的内容进行提取&#xff0c;并将结果保存到html中。 一 、 需求: 抓取主页面&#xff1a;百度百科Python词条 https://baike.baidu.com/item/Python/407313 分析上面的源码格式&#xff0c;便于提取&#…...

wordpress英文版下载地址/六盘水seo

正确卸载CleanMyMac 想要卸载CleanMyMac比较好的方法就是通过它本身卸载。它的卸载功能可以帮助我们解决很多软件难卸载问题。 点击界面中的“卸载器”选项&#xff0c;勾选选框&#xff0c;点击“卸载”即可&#xff0c;操作非常简单且能准确清除应用程序所有的安装文件。 若…...

建筑挂靠十大网站/360营销平台

描述&#xff1a;有一个会员表&#xff0c;有个birthday字段&#xff0c;值为YYYY-MM-DD格式&#xff0c;现在要查询一个时间段内过生日的会员&#xff0c;比如06-03到07-08这个时间段内所有过生日的会员。SQL语句&#xff1a; Select * From user Where date_format(birthday,…...