el-tree常用操作
一、定义
<el-treeclass="myTreeClass":data="dirTreeData":props="dirTreeProps":filter-node-method="filterDirTree":expand-on-click-node="false"node-key="id"@node-click="dirTreeNodeClick":allow-drop="dirTreeAllowDrop"@node-drop="dirTreeNodeDrop"ref="dirTreeRef"style="margin-top: 10px"draggable>
</el-tree>
- data:dirTreeData 数组
- props:dirTreeProps 可指定树的label/children等数据
const dirTreeProps = ref({children:'children',label: function (node){return node.dirItem.name} })
二、插槽
插槽中可以定义icon、目录名称样式等数据
<template #default="{ node,data }"><div style="display: flex;flex-grow:1"><div style="display: flex"><el-icon style="margin-right: 3px"><FolderOpened v-if="node.expanded" /><Folder v-else /></el-icon><div><div v-if="data.isEdit" style="margin-left: 8px"><el-input class="dirNameInput" v-model="data.dirItem.name" size="small" @blur="updateDirName(node)"></el-input></div><div v-else style="margin-left: 8px">{{node.label}}</div></div></div><div style="display:flex;margin-left: auto"><div>{{data.dirItem.countNow}}</div><div style="margin-left: 2px">({{data.dirItem.countAll}})</div></div></div></template>
三、拖拽目录限制判断
通过el-tree绑定:allow-drop="dirTreeAllowDrop",实现对拖拽目标不能是根节点的限制
const dirTreeAllowDrop = (moveNode,inNode)=>{// 拖拽的目标节点不能是根节点return inNode.data.id !== rootNodeId.value;
}
四、拖拽目录完成后事件处理
通过el-tree绑定@node-drop="dirTreeNodeDrop",实现对拖拽目标不能是根节点的限制
const dirTreeNodeDrop = (moveNode,inNode,type)=>{if (type === 'inner'){emitClickTreeNode(inNode)}else {emitClickTreeNode(moveNode)}
}
五、设置某个节点选中状态
dirTreeRef.value.setCurrentKey(targetNode.key)
六、调用某个节点点击事件
dirTreeRef.value.$emit('node-click',targetNode.data,targetNode,null)
七、根据nodeId获取当前节点data数据
const findTreeDataById = (nodeId)=>{const traverse = (nodes)=>{for(const node of nodes){if (node.id === nodeId) return node;if (node.children && node.children.length > 0){const found = traverse(node.children)if (found) return found}}}return traverse(dirTreeData.value)
}
八、根据nodeId获取父节点data数据
const findParentTreeDataById = (nodeId)=>{const traverse = (nodes)=>{for(const node of nodes){if (node.children && node.children.length > 0){if (node.children.some(child=>child.id === nodeId)){return node;}const parentNode = traverse(node.children)if (parentNode) return parentNode}}}return traverse(dirTreeData.value)
}
九、根据nodeId获取Tree组件中当前节点node
const parentNode = dirTreeRef.value.getNode(parentData.id)
十、新增目录
const addDir = async ()=>{if (!currentSelectedNode.value){ElMessage.error('未找当前节点,请刷新后重试')return}// 后台请求新增目录let newDir = {xxxx}const dirAddResp = await dirService.dirAdd(newDir)const {data:{data:dirAddId}} = dirAddRespif(!dirAddId){ElMessage.error('保存失败,未获取到新增目录id')return}// 增加对应树节点let newDirData = {id:dirAddId,dirItem:{id:dirAddId,name:'新建目录',countNew:0,countAll:0},isEdit:true,children:[]}currentSelectedNode.value.children.push(newDirData)await nextTick(()=>{// 展开其父节点const parentData = findParentTreeDataById(newDirData.id)const parentNode = dirTreeRef.value.getNode(parentData.id)parentNode.expand()// 定位到当前节点const newDirNode = dirTreeRef.value.getNode(newDirData.id)emitClickTreeNode(newDirNode)// 输入框焦点定位nextTick(()=>{setTimeout(()=>{const input = document.querySelector('.dirNameInput .el-input__inner')if (input){input.focus()}},500)})})
}
十一、删除目录
const deleteDir = async ()=>{// 后台请求删除节点const dirDeleteResp = await dirService.caseDirDelete(currentSelectedNode.value.id)const {data:{errno:respErrno}} = dirDeleteRespif (respErrno !== 0) {ElMessage.error('节点删除失败,请刷新后重试')return}// 从父节点中移除当前节点const parentData = findParentTreeDataById(currentSelectedNode.value.id)const index = parentData.children.indexOf(currentSelectedNode.value)parentData.children.splice(index,1)// 将焦点定位至父节点const parentNode = dirTreeRef.value.getNode(parentData.id)await nextTick(()=>{emitClickTreeNode(parentNode)})
}
十二、目录重命名
先把目录的输入框显示出来,并将焦点置于输入框
const editDirName = async ()=>{const treeData = findTreeDataById(currentSelectedNode.value.id)treeData.isEdit = trueawait nextTick(()=>{const input = document.querySelector('.dirNameInput .el-input__inner')if (input){input.focus()}})
}
然后再input @blur=updateDirName时,调用后台保存
const updateDirName = async(node)=>{// 后台请求重命名目录const dirRenameResp = await dirService.dirRename(node.data.id,node.data.dirItem.name)const {data:{errno:respErrno}} = dirRenameRespif (respErrno !== 0) {ElMessage.error('节点重命名失败,请刷新后重试')return}node.data.isEdit = false
}
相关文章:
el-tree常用操作
一、定义 <el-treeclass"myTreeClass":data"dirTreeData":props"dirTreeProps":filter-node-method"filterDirTree":expand-on-click-node"false"node-key"id"node-click"dirTreeNodeClick":allow-…...
SQL 语言:存储过程和触发器
文章目录 基本概述创建触发器更改和删除触发器总结 基本概述 存储过程,类似于高阶语言的函数或者方法,包含SQL语句序列,是可复用的语句,保存在数据库中,在服务器中执行。特点是复用,提高了效率,…...
Ubuntu Linux 24.04 使用certbot生成ssl证书
设置域名 1. 将需要生成SSL证书的域名解析到IP地址 idealand.xyz <> 64.176.82.190 检查防火墙的设置 1. 首先查看防火墙的状态: # ufw status 2. 如果防火墙开启了,要开放80和443端口用于certbot验证 # ufw allow 80 # ufw allow 443 生…...
Vivado 比特流编译时间获取以及FPGA电压温度获取(实用)
Vivado 比特流编译时间获取以及FPGA电压温度获取 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado Vivado 比特流编译时间获取以及FPGA电压温度获取一、引言二、 获取FPGA 当前程序的编译时间verilog中直接调用下面源语2. FPGA电压温度获取(1&a…...
Window下VS2019编译WebRTC通关版
这段时间需要实现这样一个功能,使用WebRTC实现语音通话功能,第一步要做的事情就是编译WebRTC源码,也是很多码友会遇到的问题。 经过我很多天的踩坑终于踩出来一条通往胜利的大路,下面就为大家详细介绍,编译步骤以及踩…...
【云原生 | 60】Docker中通过docker-compose部署kafka集群
🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…...
allure测试报告用例数和 pytest执行用例数不相同问题
我出现的奇怪问题: pytest执行了9条用例,但是测试报告确只显示3条用例 我将其中的一个代码删除后,发现allure测试报告又正常了 我觉得很奇怪这个代码只是删除了二维数组的第一列,我检查了半天都找不到问题,只有降低版本…...
Ubuntu 离线安装 gcc、g++、make 等依赖包
前言 项目现场的服务器无法连接互联网,需要提前获取 gcc、g、make 等依赖包。 一、如何获取依赖包 需要准备一台可以连接互联网的电脑(如:个人电脑上的虚拟机安装一个与服务器一样的系统),用于下载依赖包。之后把通过…...
Vxe UI vxe-upload 上传组件,显示进度条的方法
vxe-upload 上传组件 查看官网 https://vxeui.com 显示进度条很简单,需要后台支持进度就可以了,后台实现逻辑具体可以百度,这里只介绍前端逻辑。 上传附件 相关参数说明,具体可以看文档: multiple 是否允许多选 li…...
探索API接口:技术深度解析与应用实践
在当今的软件开发和数据交换领域,API(应用程序编程接口)已经成为了一个不可或缺的工具。它允许不同的软件应用程序或组件之间进行交互和通信,从而实现了数据的共享和功能的扩展。本文将深入探讨API接口的技术原理、设计原则以及在…...
ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的系统隔离属性
安全之安全(security)博客目录导读 目录 一、系统隔离属性 1、系统配置完整性 1.1、时间隔离 2、关键错误的报告 一、系统隔离属性 1、系统配置完整性 MSD必须确保任何可能危及其安全保证的系统寄存器的正确性和完整性。例如,MSD必须确认内存控制器配置是一致…...
一个班有n个学生,需要把每个学生的简单材料(姓名和学号)输入计算机保存。然后可以通过输入某一学生的姓名查找其有关资料。
当输入一个姓名后,程序就查找该班中有无此学生,如果有,则输出他的姓名和学号,如果查不到,则输出"本班无此人"。 为解此问题,可以分别编写两个函数,函数input_data用来输人n个…...
python的range() 函数
range() 函数 《红楼梦》,又名《石头记》,实际上是一颗神石在人间游历的故事。而这块石头,就是我们的主人公贾宝玉。神石在投胎成宝玉前,向茫茫大士和渺渺真人讲起了自己的故事: 女娲氏炼石补天之时,于大…...
ClickHouse数据管理与同步的关键技术
2024年 5 月 18 日,ClickHouse官方首届杭州 Meetup 活动成功举行。本次活动由 ClickHouse 和阿里云主办,NineData 和云数据库技术社区协办。围绕ClickHouse的核心技术、应用案例、最佳实践、数据管理、以及迁移同步等方面,和行业专家展开交流…...
【一竞技DOTA2】东南亚Bleed战队官宣Emo正式加盟
1、近日东南亚Bleed战队正式发布公告官宣,中国选手Emo以及来自蒙古选手Se加盟战队。 【公告内容如下】 我们很高兴宣布,战队DOTA2名单中添加了两位新成员,请和我们一起欢迎来自中国经验丰富的老将Emo以及来自蒙古的后起之秀Se 一号位&#…...
算法学习笔记(7.3)-贪心算法(最大切分乘问题)
目录 ##问题描述 ##问题思考 ##贪心策略确定 ##代码实现 ##时间复杂度 ##正确性验证 ##问题描述 给定一个正整数 𝑛 ,将其切分为至少两个正整数的和,求切分后所有整数的乘积最大是多少 ##问题思考 假设我们将 𝑛 切分为 &…...
大型企业用什么文件加密软件,五款适合企业的文件加密软件
大型企业在选择文件加密软件时,通常会倾向于那些能够提供全面数据保护、具有高度可定制性、易于管理且能适应复杂组织结构的解决方案。以下是一些适合大型企业使用的文件加密软件: 1.域智盾软件: 作为一款企业级文件加密软件,支持…...
【数据结构】二叉树运用及相关例题
文章目录 前言查第K层的节点个数判断该二叉树是否为完全二叉树例题一 - Leetcode - 226反转二叉树例题一 - Leetcode - 110平衡二叉树 前言 在笔者的前几篇篇博客中介绍了二叉树的基本概念及基本实现方法,有兴趣的朋友自己移步看看。 这篇文章主要介绍一下二叉树的…...
Java基础知识点(反射、注解、JDBC、TCP/UDP/URL)
文章目录 反射反射的定义class对象反射的操作 注解注解的定义注解的应用注解的分类基准注解元注解 自定义注解自定义规则自定义demo JDBCTCP/UDP/URLTCPUDPURL 反射 反射的定义 Java Reflection是Java被视为动态语言的基础啊, 反射机制允许程序在执行期间接入Refl…...
postgressql——Tuple学习(2)
Tuple含义 作用 PG并没有像Oracle那样的undo来存放旧数据,而且PG没有真正意义上的delete,而是将旧版本直接存放于relation文件中,也就是成为了dead tuple。我们可以理解成“过期的数据”含义 tuple就相当于一个存储数据的小容器,…...
技术赋能B端拓客:号码核验行业的破局与价值重塑,氪迹科技法人股东号码筛选系统,阶梯式价格
2026年,B端拓客正式迈入智能内卷时代,“精准获客、降本增效”成为企业突破业绩瓶颈的核心关键词,而号码核验作为拓客流程的前置过滤环节,直接决定了线索质量与人力效能,成为影响拓客投入回报比的关键变量。当前&#x…...
2025版等离子体期刊分区解析:从PRL到PPAP的投稿指南
1. 2025版等离子体期刊分区概览 对于从事等离子体研究的科研人员来说,选择合适的期刊投稿是研究成果传播的关键一步。2025版中科院期刊分区将等离子体相关期刊划分为三个主要层级,每个层级都有其独特的定位和特点。 先说说最顶级的中科院一区期刊。这个层…...
别再死记硬背了!用5分钟搞懂NPN和PNP三极管的电流流向(附快速判断技巧)
5分钟掌握NPN与PNP三极管的电流奥秘:从生活场景到实战技巧 记得第一次拆解收音机时,那些黑色的小方块上延伸出的金属腿让我一头雾水——它们看起来平平无奇,却能控制电流的放大与开关。直到导师用浇花的水管作比喻,三极管的秘密才…...
5个技巧让CUDA应用在非NVIDIA显卡发挥最大价值——ZLUDA完全指南
5个技巧让CUDA应用在非NVIDIA显卡发挥最大价值——ZLUDA完全指南 【免费下载链接】ZLUDA CUDA on Intel GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 在AI与高性能计算领域,CUDA生态的垄断地位让许多开发者和企业面临硬件选择困境。跨平台…...
3步搞定AtlasOS系统技术故障:Xbox控制器驱动完全解决方案
3步搞定AtlasOS系统技术故障:Xbox控制器驱动完全解决方案 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/at…...
AI人脸生成新范式:IP-Adapter-FaceID PlusV2双重嵌入技术解析
AI人脸生成新范式:IP-Adapter-FaceID PlusV2双重嵌入技术解析 【免费下载链接】IP-Adapter-FaceID 项目地址: https://ai.gitcode.com/hf_mirrors/h94/IP-Adapter-FaceID 在AI人脸生成领域,如何在保持身份一致性的同时实现风格的灵活控制&#x…...
基于Whisper-large-v3的语音搜索引擎开发
基于Whisper-large-v3的语音搜索引擎开发 你有没有遇到过这种情况?手头有几百个小时的会议录音、课程录像或者播客音频,想找其中某个人说过的一句话,或者某个特定的知识点,结果只能从头到尾听一遍,费时又费力。或者&a…...
Betaflight 4.5配置文件升级实战:从STM32H743到AOCODARC H7Dual的硬件适配指南
Betaflight 4.5硬件适配深度解析:从STM32H743到AOCODARC H7Dual的实战迁移指南 穿越机飞控系统的核心在于硬件与软件的完美协同,而Betaflight作为开源飞控领域的标杆,其4.5版本在硬件抽象层进行了重大革新。本文将聚焦STM32H743芯片与AOCODAR…...
4个维度解析EAS CLI:移动开发效率提升工具
4个维度解析EAS CLI:移动开发效率提升工具 【免费下载链接】eas-cli Fastest way to build, submit, and update iOS and Android apps 项目地址: https://gitcode.com/gh_mirrors/ea/eas-cli 定位核心价值:重新定义移动开发工作流 在移动应用开…...
工业自动化场景信捷 PLC EtherNet/IP 转 TCP/IP 通信方案
EtherNet/IP转TCP/IP网关应用:信捷PLC工业自动化数据采集实战案例一、项目背景本次项目落地于国内某大型3C电子精密组装工厂,聚焦智能手机中框自动化组装产线,属于当前工业自动化领域高增速、高前景的主流场景,也是工业物联网落地…...
