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

vue-org-tree搜索到对应项高亮展开

效果图:

代码:

<template><div class="AllTree"><el-form :inline="true" :model="formInline" class="demo-form-inline"><el-form-item><el-input v-model="formInline.user" placeholder="请输入名称"></el-input></el-form-item><el-form-item><el-button type="primary" @click="handleSearch">查询</el-button></el-form-item></el-form><div ref="treeContainer" class="tree-container"><org-tree :data="data" :horizontal="true" name="test" :label-class-name="labelClassName" collapsable@on-expand="onExpand" @on-node-click="clickTree" ref="orgTree" :label-width="150":line-style="{ stroke: '#ccc', strokeWidth: 2 }"></org-tree></div><!-- 俱乐部信息弹窗 --><el-drawer title="俱乐部信息" :visible.sync="drawer" :before-close="handleClose"><span>我来啦!</span></el-drawer></div>
</template>

 初始化定义数据:

import OrgTree from 'vue2-org-tree';
import 'vue2-org-tree/dist/style.css';export default {components: {orgTree: OrgTree},data() {return {formInline: {user: ''},id: null,drawer: false,data:{},data1: {id: 0,label: "XX俱乐部",children: [{id: 2,label: "xx合伙人",children: [{id: 5,label: "研发-前端",children: [{id: 55,label: "前端1",children: [{id: 555,label: "前端1111",},{id: 556,label: "前端2222",},{id: 557,label: "前端3333",children: [{id: 5557,label: "前端11111",},{id: 5558,label: "前端22222",},{id: 5559,label: "前端33333",},{id: 5560,label: "前端44444",},{id: 5561,label: "前端55555",}]},{id: 558,label: "前端3333",}]},{id: 56,label: "前端2"},{id: 57,label: "前端3"},{id: 58,label: "前端4"}]},{id: 6,label: "研发-后端"},{id: 9,label: "UI设计"},{id: 10,label: "产品经理"}]},{id: 3,label: "销售部",children: [{id: 7,label: "销售一部",children: [{id: 78,label: "销售一部组长",children: [{id: 788,label: "销售一部A",},{id: 789,label: "销售一部B",},{id: 790,label: "销售一部C",},{id: 791,label: "销售一部D",}]}]},{id: 8,label: "销售二部"}]},{id: 4,label: "财务部"},{id: 9,label: "HR人事"}]},defaultProps: {children: 'children',label: 'label'},zoom: 1,BasicSwich: false,collapsable: true,labelClassName: "org-bg-white",clickTimeout: null};},

 搜索事件定义方法:

 created() {this.getTreeData();},methods: {//获取节点数据getTreeData(){this.data=this.data1this.expandChange();},renderContent(h, data) {return data.label;},// 树状结构折叠打开onExpand(e, data) {if ("expand" in data) {data.expand = !data.expand;if (!data.expand && data.children) {this.collapse(data.children);}} else {this.$set(data, "expand", true);}},collapse(list) {var _this = this;list.forEach(function (child) {if (child.expand) {child.expand = false;}child.children && _this.collapse(child.children);});},expandChange() {this.toggleExpand(this.data, true);},toggleExpand(data, val) {var _this = this;if (Array.isArray(data)) {data.forEach(function (item) {_this.$set(item, "expand", val);if (item.children) {_this.toggleExpand(item.children, val);}});} else {this.$set(data, "expand", val);if (data.children) {_this.toggleExpand(data.children, val);}}},// 搜索事件handleSearch() {const isLabelFound = this.findLabel(this.data, this.formInline.user.trim());console.log('isLabelFound',isLabelFound)},findLabel(node, targetLabel) {// 清除先前设置的背景色this.clearHighlight();const searchInChildren = (node) => {if (node.id == 0) {node.expand = true          }//检查当前节点if (node.label === targetLabel) {this.id = node.id;node.expand = true;this.highlightLabel(targetLabel, "#46a6ff"); // 设置背景色为 pinkreturn true;//找到目标节点}//递归搜索子节点if (node.children) {for (let child of node.children) {if (searchInChildren(child)) {child.expand = truereturn true;//如果在子节点找到目标节点,直接返回true}}}return false;//当前节点及其子节点都未找到目标节点}const found = searchInChildren(node)if (!found) {this.$message.warning('未找到该项')}return found ? this.id : false},highlightLabel(targetLabel, color) {// 异步更新,等待 DOM 渲染完成后再操作setTimeout(() => {let orgTreeList = document.getElementsByClassName('org-tree-node-label-inner');for (let i = 0; i < orgTreeList.length; i++) {if (orgTreeList[i].innerText === targetLabel) {orgTreeList[i].style.backgroundColor = color;break; // 找到第一个匹配的节点后即可退出循环}}}, 0);},clearHighlight() {let orgTreeList = document.getElementsByClassName('org-tree-node-label-inner');for (let i = 0; i < orgTreeList.length; i++) {orgTreeList[i].style.backgroundColor = ""; // 清除背景色}},//点击事件clickTree(e, data) {if (this.clickTimeout) {// 如果存在单击事件的计时器,则视为双击事件clearTimeout(this.clickTimeout);this.$router.push({path: "/dataVisualization/recommendedLinksDetail",query: {id: data.id,},});} else {// 否则,启动单击事件计时器this.clickTimeout = setTimeout(() => {this.drawer = truethis.clickTimeout = null; // 清除计时器}, 500); // 200毫秒内判断是否双击}// const depth = this.getNodeDepth(data);// if (depth === 1) {//   // 第一层节点,显示弹窗或其他操作//   this.drawer = true// } else {//   // this.$router.push({//   //   path: "/dataVisualization/recommendedLinksDetail",//   //   query: {//   //     id: data.id,//   //   },//   // });//   console.log(111)// }},getNodeDepth(node, depth = 0) {// 递归计算节点的深度(层级)console.log(node)console.log(node.parent)if (node.parent) {return this.getNodeDepth(node.parent, depth + 1);}return depth;},handleClose() {this.drawer = false}}
}

相关文章:

vue-org-tree搜索到对应项高亮展开

效果图&#xff1a; 代码&#xff1a; <template><div class"AllTree"><el-form :inline"true" :model"formInline" class"demo-form-inline"><el-form-item><el-input v-model"formInline.user&quo…...

FullCalendar日历组件集成实战(17)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…...

【图像分割】mask2former:通用的图像分割模型详解

最近看到几个项目都用mask2former做图像分割&#xff0c;虽然是1年前的论文&#xff0c;但是其attention的设计还是很有借鉴意义&#xff0c;同时&#xff0c;mask2former参考了detr的query设计&#xff0c;实现了语义和实例分割任务的统一。 1.背景 1.1 detr简介 detr算是第…...

【不锈钢酸退作业区退火炉用高温辐射计快速安装】

项目名称 不锈钢酸退作业区退火炉用高温辐射计快速安装 改造实施项目简介项目提出前状况:不锈钢生产过程中,各种型号的不锈钢带钢在退火工艺中对带钢温度的准确性要求很高,带钢温度的检测直接影响带钢的产品质量,不锈钢带钢温度测量依靠的是高温辐射计,其测量的准确性、稳…...

Studying-代码随想录训练营day29| 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

第29天&#xff0c;贪心part03&#xff0c;快过半了(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 134.加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列 134.加油站 文档讲解&#xff1a;代码随想录加油站 视频讲解&#xff1a;手撕加油站…...

Understanding Zero Knowledge Proofs (ZKP)

Bilingual Tutorial: Understanding Zero Knowledge Proofs (ZKP) 双语教程&#xff1a;理解零知识证明&#xff08;ZKP&#xff09; Introduction 介绍 English: Zero Knowledge Proofs (ZKP) are a fascinating concept in cryptography where one party (the prover) can…...

微信小程序 DOM 问题

DOM 渲染问题 问题 Dom limit exceeded, please check if theres any mistake youve made.测试页面 1 <template><scroll-view scroll"screen" style"width: 100%;height: 100vh;" :scroll-y"true" :scroll-with-animation"tru…...

可视化作品集(03):旅游景区的应用,美爆啦。

景区可视化通常指的是利用现代科技手段&#xff0c;如地图、虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;、无人机航拍等技术&#xff0c;将景区的地理信息、景点分布、交通路线、游客服务设施等内容以可视化的方式呈现给游客或者管理者&#xff0…...

嵌入式实时操作系统:Intewell操作系统与VxWorks操作系统有啥区别

Intewell操作系统和VxWorks操作系统都是工业领域常用的操作系统&#xff0c;它们各有特点和优势。以下是它们之间的一些主要区别&#xff1a; 架构差异&#xff1a; Intewell操作系统采用微内核架构&#xff0c;这使得它具有高实时性、高安全性和强扩展性的特点。微内核架构…...

PCDN技术如何提高内容分发效率?(壹)

PCDN技术提高内容分发效率的操作主要体现在以下几个方面&#xff1a; 利用P2P技术&#xff1a;PCDN以P2P技术为基础&#xff0c;通过挖掘利用边缘网络的海量碎片化闲置资源&#xff0c;实现内容的分发。这种方式可以有效减轻中心服务器的压力&#xff0c;降低内容传输的延迟&a…...

Java 中Json中既有对象又有数组的参数 如何转化成对象

1.示例一&#xff1a;解析一个既包含对象又包含数组的JSON字符串&#xff0c;并将其转换为Java对象 在Java中处理JSON数据&#xff0c;尤其是当JSON结构中既包含对象又包含数组时&#xff0c;常用的库有org.json、Gson和Jackson。这里我将以Gson为例来展示如何解析一个既包含对…...

什么是数据挖掘(python)

文章目录 1.什么是数据挖掘2.为什么要做数据挖掘&#xff1f;3数据挖掘有什么用处&#xff1f;3.1分类问题3.2聚类问题3.3回归问题3.4关联问题 4.数据挖掘怎么做?4.1业务理解&#xff08;Business Understanding&#xff09;4.2数据理解&#xff08;Data Understanding&#x…...

【Tomcat】Linux下安装帆软(fineReport)服务器 Tomcat

需求&#xff1a;帆软&#xff08;fineReport&#xff09;数据集上传至服务器 工具&#xff1a;XSHELL XFTP 帮助文档 一. 安装帆软服务器Tomcat 提供 Linux X86 和 Linux ARM 两种类型的部署包 &#xff0c;所以在下载部署钱需要确认系统架构不支持在 32 位操作系统上安装 查…...

C++ | Leetcode C++题解之第213题打家劫舍II

题目&#xff1a; 题解&#xff1a; class Solution { public:int robRange(vector<int>& nums, int start, int end) {int first nums[start], second max(nums[start], nums[start 1]);for (int i start 2; i < end; i) {int temp second;second max(fi…...

windows系统中快速删除node_modules文件

npx命令方式 npx rimraf node_modules 项目中设置 "scripts": {# 安装依赖"i": "pnpm install",# 检测可更新依赖"npm:check": "npx npm-check-updates",# 删除 node_modules"clean": "npx rimraf node_m…...

Spring MVC数据绑定和响应——页面跳转(一)返回值为void类型的页面跳转

一、返回值为void类型的页面跳转到默认页面 当Spring MVC方法的返回值为void类型&#xff0c;方法执行后会跳转到默认的页面。默认页面的路径由方法映射路径和视图解析器中的前缀、后缀拼接成&#xff0c;拼接格式为“前缀方法映射路径后缀”。如果Spring MVC的配置文件中没有配…...

CSS动画keyframes简单样例

一、代码部分 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href…...

LabVIEW风机跑合监控系统

开发了一种基于LabVIEW的风机跑合监控系统&#xff0c;提高风机测试的效率和安全性。系统通过自动控制风机的启停、实时监控电流和功率数据&#xff0c;并具有过流保护功能&#xff0c;有效减少了人工操作和安全隐患&#xff0c;提升了工业设备测试的自动化和智能化水平。 项目…...

sql语句练习注意点

1、时间可以进行排序&#xff0c;也可以用聚合函数对时间求最大值max&#xff08;时间&#xff09; 例如下面的例子&#xff1a;取最晚入职的人&#xff0c;那就是将入职时间倒序排序&#xff0c;然后limit 1 表&#xff1a; 场景&#xff1a;查找最晚入职员工的所有信息 se…...

如视“VR+AI”实力闪耀2024世界人工智能大会

7月4日&#xff0c;2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;以下简称为“WAIC 2024”&#xff09;在上海盛大开幕&#xff0c;本届大会由外交部、国家发展和改革委员会、教育部等部门共同主办&#xff0c;围绕“以共商促共享 以善治促善智”主题&#xf…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...