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就相当于一个存储数据的小容器,…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...
21-Oracle 23 ai-Automatic SQL Plan Management(SPM)
小伙伴们,有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL, 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始,OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...
