Vue单页面实现el-tree el-breadcrumb功能、el-tree右键点击树节点展示菜单功能、树节点编辑节点字段名称功能
(1) 点击el-tree节点 使用el-breadcrumb展示选中树节点及父项数据
重点:handleNodeClick方法、getTreeNode方法
(2) 选择el-breadcrumb-item设置el-tree节点选中
必须设置属性: current-node-key="currentNodeKey" 、 node-key="id"
重点: 设置树节点渲染 this.$refs.tree.setCurrentKey(item.id)
(3) 右键点击树节点展示菜单
重点:handleNodeContextmenu方法、showTreeMenu方法、设置active样式
(4) 树节点编辑节点字段名称
重点:handleTreeNodeNameEdit方法、submitTreeNodeNameEdit方法
<template><div class="sqm-file-page"><el-row><el-col :span="4"><div class="grid-left-content"><el-tree ref="tree" :data="treeData" :props="defaultProps" node-key="id" highlight-current :default-expanded-keys="defaultExpandedKeys" :current-node-key="currentNodeKey" :expand-on-click-node="false" @node-click="handleNodeClick" @node-contextmenu="handleNodeContextmenu"><template #default="{ node, data }"><!-- 如果是编辑状态 --><template v-if="data.isEdit == 1"><el-input ref="treeNodeNameInput" v-model="treeNodeName" class="name-input" @blur="() => submitTreeNodeNameEdit(node, data)" /></template><!-- 如果不是编辑状态 --><span v-else v-text="data.name" /><i class='el-icon-edit-outline' @click.stop="() => handleTreeNodeNameEdit(node, data)" /> </template></el-tree><div ref="treeMenu" class="tree-menu">树节点右键菜单内容</div></div></el-col><el-col :span="20"><div class="grid-right-content"><el-breadcrumb separator-class="el-icon-arrow-right"><el-breadcrumb-item v-for="(item, index) in breadList" :key="index" @click.native="handleBreadcrumbItem(item, index)">{{ item.name }}</el-breadcrumb-item></el-breadcrumb></div></el-col></el-row></div>
</template><script>
import {findTree} from '@/api/sqm//qf/api'export default {name: 'SqmFileList',data() {return {treeData: [],defaultExpandedKeys: [1],currentNodeKey: '',defaultProps: {children: 'sqmFileList',label: 'name'},activeNode: {}, // 选中的节点 breadList: [], // 面包屑数组treeNodeName: '' // 树节点编辑时名称}},created() {const that = thisthat.getTree()},methods: {// el-tree数据getTree() {const that = thisfindTree().then(res => {let expandedKeys = []for (let i = 0; i < res.data.length; i++) {expandedKeys.push(res.data[i].id)}that.defaultExpandedKeys = expandedKeysthat.treeData = res.datathat.breadList = res.data })},// 树节点点击handleNodeClick(data, node) {const that = this// 设置树节点选中this.$set(data, 'isChecked', true) // 获取面包屑this.breadList = []this.getTreeNode(this.$refs.tree.getNode(data.id))that.activeNode = data},// 获取当前树节点和其父级节点getTreeNode(node) {if (node && node.data.name) {this.breadList.unshift(node.data)this.getTreeNode(node.parent) // 递归}},// 点击面包屑handleBreadcrumbItem(item, index) {// 设置树节点当前选中的keythis.currentNodeKey = item.id// 重点: 设置树节点渲染this.$refs.tree.setCurrentKey(item.id)// 删除选中面包屑后面的面包屑this.breadList.splice(index + 1, this.breadList.length)},// 树节点鼠标右键点击handleNodeContextmenu(e, data, node, target) {// 树节点选中之后才能展示树节点菜单if (data.isChecked) {this.showTreeMenu(e, data, node, target)}},// 展示树节点菜单showTreeMenu(e, data, node, target) {const menu = this.$refs.treeMenuconst menuHeight = menu.clientHeightconsole.log(menuHeight)const x = e.pageX // 触发点到页面窗口左边的距离const y = e.pageY // 触发点到页面窗口顶部的距离if ((document.body.clientHeight - y) >= menuHeight) {menu.style.top = y + 'px'menu.style.bottom = 'auto'} else {menu.style.top = 'auto'menu.style.bottom = document.body.clientHeight - y + 'px'}menu.style.left = x + 'px'menu.classList.add('active')console.log(menu)},// 树节点编辑handleTreeNodeNameEdit(node, data) {this.$set(data, 'isEdit', 1)this.treeNodeName = data.namethis.$nextTick(() => {this.$refs.treeNodeNameInput.focus()})},// 树节点编辑后输入框失焦提交submitTreeNodeNameEdit(node, data) {if (data.name == this.treeNodeName) {console.log('没有修改')this.treeNodeName = ''this.$set(data, 'isEdit', 0)} else {this.$set(data, 'name', this.treeNodeName)this.treeNodeName = ''this.$set(data, 'isEdit', 0)// 此处...编辑完成后调用接口}},}}
</script><style lang="less" scoped>
.sqm-file-page {.grid-left-content {margin-right: 10px;::v-deep.el-tree-node {position: relative;font-size: 14px;// 设置选中节点样式&.is-current>.el-tree-node__content {background-color: #1456F01A;color: #1456F0;}.custom-tree-node {width: 100%;align-items: center;justify-content: space-between;i {padding-right: 20px;}.el-icon-edit-outline {position: absolute;right: 20px;top: 5px;}div.name-input {.el-input__inner {width: 55%;height: 21px;}}}}// 树节点右键菜单样式.tree-menu {position: fixed;width: 130px;border: 1px solid #DEDEDF;border-radius: 6px;background-color: #ffffff;box-shadow: 0 6px 24px #F4F5F5;visibility: hidden;}.active {visibility: visible;z-index: 2;}}.grid-right-content {::v-deep.el-breadcrumb {padding: 40px 0 20px 0;.el-breadcrumb__item {cursor: pointer;.el-breadcrumb__inner {font-size: 16px;color: #646A73;}&:last-child {.el-breadcrumb__inner {color: #1F2329;}}}}}
}
</style>
代码仅供参考 具体实现根据具体实际情况!
相关文章:
Vue单页面实现el-tree el-breadcrumb功能、el-tree右键点击树节点展示菜单功能、树节点编辑节点字段名称功能
(1) 点击el-tree节点 使用el-breadcrumb展示选中树节点及父项数据 重点:handleNodeClick方法、getTreeNode方法 (2) 选择el-breadcrumb-item设置el-tree节点选中 必须设置属性: current-node-key"currentNodeKey" 、 node-key"id" 重点: 设置…...
C++核心编程之函数高级使用
目录 一、函数的默认参数 二、函数占位参数 三、函数重载 四、函数重载-注意事项 一、函数的默认参数 在C中,函数的形参列表中的形参是可以有默认值的 语法:返回值类型 函数名 (参数默认值){} 示例1: #includ…...
如何创建智能合约游戏系统
区块技术的发展,智能合约成为了一个热门话题。智能合约是一种基于区块技术的自动化合约,它可以自动执行合同中规定的条款,从而实现去中心化的信任和价值传递。在游戏领域,智能合约可以让玩家在游戏中实现各种交易和交互࿰…...
如何用rust实现一个异步channel
目录 前言思路实现功能代码实现 测试先引测试版包测试代码结果与分析思考 尾语 前言 使用通信来共享内存,而不是通过共享内存来通信 上面这句话,是每个go开发者在 处理多线程通信时 的座右铭,go甚至把实现这个理念的channel直接焊在编译器里&…...
gitee上传项目到仓库
目录 一些常用的Git命令切换到其他盘符:列出目录下的所有文件:以树状图的形式显示目录下的文件和子目录:返回上一层目录:写的C#代码文件上传到新建的Git仓库中,可以按照以下步骤进行操作:出现的错误: 一些常…...
day27 贪心算法
1.什么是贪心? 比如10张钞票,有1,5,20,100等面额,取五张,如何取得到数额最多的钱?每次取面额最大的那张钞票;就是每个阶段的局部最优;全局最优就是最后拿到的…...
Java实现字符串反转
起因 自己在刷题的过程中,想把一个字符串翻转一下,便写了下面的代码: String str "abcd";str str.reverse();发现行不通,这是为什么呢? 分析 在Java中,字符串是不可变的对象,这意…...
vue - 常见的性能优化
文章目录 vue使用中常见的性能优化1, v-for 遍历避免同时使用 v-if2, 如果需要使用v-for给每项元素绑定事件时 可以使用事件代理**3, 一些数据不做响应式4,一些页面采用keep-alive缓存组件5,第三方UI库按需导入6&#…...
微服务系列文章 之 Nginx服务状态监控的方法
在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编译的时候加一下即可。 1. 模块安装 先使用命令查看是否已经安装这个模块: [rootihxb123Z nginx]# ./nginx -V (V大写会显示版本号和…...
【网络系统集成】路由器实验
1.实验名称:路由器RIP协议配置 2.实验目的 在PacketTracer中进行模拟实验,配置RIP协议,验证RIP协议更新时间及路由状态变化,加深对路由器RIP协议相关知识的理解与掌握。 3.实验内容 (1)拓扑结构图 (2)ip地址分配与端口分配...
【mac 安装Miniconda】
1.下载Miniconda 注意mac是什么版本,m1下载m1版本 https://docs.conda.io/en/latest/miniconda.html#macos-installers 2.安装Miniconda 在下载文件所在目录下打开终端,输入一下命令: bash Miniconda3-latest-MacOSX-x86_64.sh 一路回车&…...
螺栓疲劳计算-风电行业,参考GL2010, ST0361,1993-1-9
由于不想再重新排版了,于是转成了图片。...
QT学习之旅 - QThread多线程
文章目录 首先是主线程 其次是一个程序 通过一个QThread来放入程序 进阶一点: 手动开启关闭线程俩个线程 其实QT中的thread(线程)是很容易的 首先是主线程 #include "mainwindow.h" #include "ui_mainwindow.h"#include <QDebug>MainWindow::MainWin…...
PROFINET转TCP/IP网关TCP/IP协议的含义是
大家好,今天要和大家分享一款自主研发的通讯网关,远创智控YC-PN-TCPIP。这款网关可是集多种功能于一身,PROFINET从站功能,让它在通讯领域独领风骚。想知道这款网关如何实现PROFINET和TCP/IP网络的连接吗?一起来看看吧&…...
计算机网络基础第六章
一、应用层概述 1.1 网络应用模型 1.1.1 客户/服务器(C/S)模型 1.1.2 P2P模型 二、域名解析系统——DNS系统 2.1 域名 2.2 域名服务器 2.3 域名解析过程 三、文件传输协议——FTP 3.1 FTP服务器和用户端 3.2 FTP工作原理 四、电子邮件 4.1 电子邮件系统概述 4.2 简单邮件传送…...
MobPush:Android客户端SDK厂商通道回执配置指南
华为厂商回执配置 登录华为AppGallery Connect网站。在左侧菜单点击增长 - 推送服务,进入推送服务页面后,点击配置页签,检查应用回执状态,如未开通请点击右侧开通按钮。 如已开通,点击修改按钮,弹出“选择…...
Karmada: Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration
Karmada是一个开源的多云应用编排和管理平台,旨在帮助用户在多个云提供商之间无缝地部署、编排和管理应用程序。 Karmada(Kubernetes Armada)是一个Kubernetes管理系统,它使您能够在多个Kubernetes集群和云环境中运行云原生应用程…...
arcgis拓扑检查
不能有悬挂点 不能有伪结点***路网处理很重要,看研究吧。 一直默认到最后。 导入要素类,单个 toupu2右键新建拓扑(T) 一般选不能有悬挂点,不能重叠。 一路默认 是 拉进图层可视化 线要素的话记得添加字段length&#…...
icp许可证 办理流程(icp资质申请条件)
icp许可证 办理流程(icp资质申请条件)是什么? ICP经营许可证是可以线上无忧办理的,包下证,流程也很简单,只需要你提供企业营业执照、法人身份证这些基础材料就可以。加急10-20工作日拿证,普通20-60工作日拿证。 在了解…...
三菱PLC 控制灯一秒钟交替闪烁
三菱PLC中常用的特殊继电器: M8000 上电一直ON标志 M8002 上电导通一次 M8004 PLC出错 M8005 PLC备用电池电量低标志 M8011 10ms时钟脉冲 M8012 100ms时钟脉冲 M8013 1s时钟脉冲 M8014 1min时钟脉冲 M8034…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
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"…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
