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就相当于一个存储数据的小容器,…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...