vue实现el-tree操作后默认展开该节点和同级节点拖拽并进行前后端排序

问题一:实现el-tree 删除、添加、编辑后默认展开该节点

操作视频如下

el-tree节点操作后仍展开

节点代码

<template><el-treev-loading="loading"ref="tree"element-loading-text="加载中"highlight-current:data="treeData":props="defaultProps"node-key="id":default-expanded-keys="defaultKey"@node-click="handleNodeClick"/>
</template>

实现步骤:

  1. 通过el-tree的node-click事件获取点击节点的数据
  2. 通过递归获取点击节点的所有父级的id
  3. 通过node-keydefault-expanded-keys属性绑定获取的父级id和自身id

逻辑代码如下

	data() {return {treeData:[], // el-tree数据defaultKey:[], // 默认展开的数据defaultProps: {children: 'child',label: 'name',},}},methods: {/*** @func 获取当前点击节点数据,根据当前数据查询该数据的所有父级id* @params {Object} data* @return void*/async handleNodeClick(data) {// 使用递归——编辑、删除、添加完成之后该节点仍是展开状态let dataArr = this.findParentIds(this.treeData, data.id);this.defaultKey = dataArr;},/*** 根据树子节点ID查找所有父节点ID* @param {array} dataSource 树形结构数据源* @param {number} nodeId 子节点ID* @returns {array} 包含所有父节点ID的数组,按照从根节点到直接父节点的顺序排序*/findParentIds(dataSource, nodeId) {const parentIds = []; // 用于存储所有父节点ID的数组// 定义一个递归函数,用于遍历整棵树并查找子节点的所有父节点function traverse(node, nodeId) {if (node.id === nodeId) {// 如果当前节点的ID等于子节点的ID,则表示已经找到了子节点,可以开始向上查找父节点return true; // 返回true表示已经找到了子节点}if (node.child) {// 如果当前节点有子节点,则继续遍历子节点for (const childNode of node.child) {if (traverse(childNode, nodeId)) {// 如果在子节点中找到了子节点的父节点,则将当前节点的ID添加到父节点ID数组中,并返回true表示已经找到了子节点parentIds.push(node.id);return true;}}}return false; // 如果当前节点不是子节点的父节点,则返回false}// 从根节点开始遍历整棵树,并调用递归函数查找子节点的所有父节点for (const node of dataSource) {if (traverse(node, nodeId)) {// 如果在当前节点的子树中找到了子节点的父节点,则直接退出循环break;}}return parentIds.length ? [...parentIds, nodeId] : [nodeId]; // 返回所有父节点ID和自身id},}

问题二:el-tree 同级节点拖拽并进行前后端排序+筛选

操作视频如下

el-tree 同级拖拽排序

节点代码

<template><el-treev-loading="loading"ref="tree"element-loading-text="加载中"highlight-current:data="treeData":props="defaultProps":draggable="true":allow-drop="allowDrop":filter-node-method="filterNode"@node-drop="handleDrop"/>
</template>

实现步骤:

  1. 通过el-tree的draggable属性开启可拖拽功能
  2. 通过el-tree的allow-drop属性写方法判断节点能否被拖拽
  3. 通过el-tree的node-drop属性获取拖拽成功节点的子级id
  4. 将获取拖拽节点的子集id传给后端
  5. 外加筛选是用到了filter-node-method属性

逻辑代码如下

		/*** @func  判断拖拽的数据是否是同一层级*/allowDrop(draggingNode, dropNode, type) {if (draggingNode.level === dropNode.level) {if (draggingNode.data.pid === dropNode.data.pid) {return type === 'prev' || type === 'next';}} else {return false;}},/*** @func  拖拽成功事件*/handleDrop(draggingNode, dropNode) {let list = [];// 获取子级idfor (let item of dropNode.parent.childNodes) {list.push(item.data.id);}// 将该节点排序后的子级id传给后端this.funGetDragSort(list);},/*** @func  调后端接口——子级id传给后端*/async funGetDragSort(val) {await datamanagement.updateCategorySort(val);},/*** @func  左侧el-tree控件搜索* @return void*/filterNode(value, data) {if (!value) return true;return data.name.indexOf(value) !== -1;},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web系列二十七】Vue实现dom元素拖拽并限制移动范围

目录 需求 拖拽功能封装 使用拖拽功能 vite-env.d.ts main.ts test.vue 需求 dom元素拖拽并限制在父组件范围内 拖拽功能封装 export const initVDrag (vue) > {vue.directive(drag, (el) > {const oDiv el // 当前元素oDiv.onmousedown (e) > {let target…

Spark---创建DataFrame的方式

1、读取json格式的文件创建DataFrame 注意&#xff1a; 1、可以两种方式读取json格式的文件。 2、df.show()默认显示前20行数据。 3、DataFrame原生API可以操作DataFrame。 4、注册成临时表时&#xff0c;表中的列默认按ascii顺序显示列。 df.createTempView("mytab…

《HelloGitHub》第 92 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …

enote笔记法之附录1——“语法词”(即“关联词”)(ver0.24)

enote笔记法之附录1——“语法词”&#xff08;即“关联词”&#xff09;&#xff08;ver0.24&#xff09; 最上面的是截屏的完整版&#xff0c;分割线下面的是纯文字版本&#xff1a; 作者姓名&#xff08;本人的真实姓名&#xff09;&#xff1a;胡佳吉 居住地&#xff1…

定向网络攻击主要风险检查表

一、互联网入口攻击 二、内部网络横向攻击 三、集权类系统风险和要求 软件开发全资料获取&#xff1a;点我获取 定向网络攻击主要风险检查表分类测评项风险描述检查项检查结果整改建议互联网入口攻击应用网站安全漏洞应用系统和网站存在高风险安全漏洞&#xff0c;可能直接被…

推荐一款好用的BMP转PNG工具BMP2PNG

推荐一款好用的BMP转PNG工具BMP2PNG 自己写的一个BMP转PNG工具BMP2PNG 写这个工具是因为要使用传奇的部分素材在COCOS2DX使用&#xff0c; 但是COCOS2DX不支持BMP 如果直接将BMP转换到PNG的话&#xff0c;网上找到的工具都不支持透明色转换。难道要用PS一个一个抠图吗&#xf…

k8s-daemonset、job、cronjob控制器 6

Daemonset控制器&#xff08;一个节点部署一个&#xff09; 、 创建Daemonset控制器 控制节点上不能进行部署&#xff0c;有污点 解决方式&#xff1a; 扩容节点&#xff0c;token值过期的解决方法&#xff1a; 回收pod job控制器 需要使用perl镜像&#xff0c;仓库没有&…

Java 中的 Switch 是如何支持 String 的?为什么不支持 long ?

引言 在Java中&#xff0c;switch语句是一种用于根据表达式的值选择执行不同代码块的流程控制语句。最初&#xff0c;switch语句仅支持基本数据类型&#xff0c;如int、char等&#xff0c;但自从Java 7版本开始&#xff0c;它还开始支持String类型。这个改变为开发者提供了更多…

OSCP系列靶场-Esay-1

总结 getwebshell : ftp可匿名登录 → 发现隐藏文件夹 → 发现ssh密钥 → 猜解ssh用户名 → ssh密钥登录 提 权 思 路 : 发现suid权限文件 → cpulimit提权 准备工作 启动VPN 获取攻击机IP → 192.168.45.191 启动靶机 获取目标机器IP → 192.168.179.130 信息收集-端口扫…

论文阅读——SEEM

arxiv: 分割模型向比较灵活的分割的趋势的转变&#xff1a;封闭到开放&#xff0c;通用到特定、one-shot到交互式。From closed-set to open-vocabulary segmentation&#xff0c;From generic to referring segmentation&#xff0c;From one-shot to interactive segmentati…

Java结合源码-字符串

1、简介 字符串是一系列字符串的序列。在Java语言中字符串是用一对对双引号“”&#xff0c;括起来的字符系列。例如“Hello”&#xff0c;“你好”。从数组的角度来说&#xff0c;字符串可以是看成是一个个字符组成的数组。 2、字符串分类 程序中用到的字符串可以分成两大类…

深入解析CPU工作原理与细节

计算机是现代社会中不可或缺的工具&#xff0c;而CPU&#xff08;中央处理器&#xff09;则是计算机的核心组件。CPU负责执行指令和控制计算机的各种操作&#xff0c;它的性能直接影响着计算机的速度和效率。 1. CPU的基本结构 CPU通常由以下几个主要组成部分构成&#xff1a…

IDEA中springboot 提示 java: 找不到符号 符号: 变量 log

在以下位置加上该配置"-Djps.track.ap.dependenciesfalse" 然后重新启动项目&#xff0c;到此问题解决&#xff01;&#xff01;&#xff01;

SpringCloud原理】OpenFeign之FeignClient动态代理生成原理

大家好&#xff0c;前面我已经剖析了OpenFeign的动态代理生成原理和Ribbon的运行原理&#xff0c;这篇文章来继续剖析SpringCloud组件原理&#xff0c;来看一看OpenFeign是如何基于Ribbon来实现负载均衡的&#xff0c;两组件是如何协同工作的。 一、Feign动态代理调用实现rpc流…

Vue3 中el-tree-select使用中遇到的一些问题

<el-tree-selectv-model"userFormParams.deptId":data"deptTree.data"placeholder"请选择"filterableautocomplete"off"aria-autocomplete"none":render-after-expand"false"></el-tree-select> 1、…

指纹芯片的工作原理及应用领域详解

指纹芯片是一种利用指纹识别技术的电子设备,可以通过扫描人体指纹的纹理特征,将其转化为数字化信息并进行存储和识别。指纹芯片广泛应用于各个领域,包括智能手机、银行和金融、门禁系统、身份验证等,因其高度准确、快速便捷的特点,得到了广大用户的青睐。 指纹芯片的原理是基于…

【MYSQL】表的基本查询

目录 前言 一、Create&#xff08;增&#xff09; 1.单行数据 全列插入 2.多行数据 指定列插入 3.插入否则更新 4.替换 二、Retrieve&#xff08;查&#xff09; 1.select列 1.1全列查询 1.2指定列查询 1.3查询字段为表达式 1.4为查询结果指定别名 1.5结果去重 …

2948. 交换得到字典序最小的数组 (分组排序)

Problem: 2948. 交换得到字典序最小的数组 文章目录 题目思路Code 题目 给你一个下标从 0 开始的 正整数 数组 nums 和一个 正整数 limit 。 在一次操作中&#xff0c;你可以选择任意两个下标 i 和 j&#xff0c;如果 满足 |nums[i] - nums[j]| < limit &#xff0c;则交换…

基于webserver的工业数据采集项目源代码

通过浏览器&#xff0c;实现Modbus Slave端数据采集和设备控制 数据采集函数 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> #include <arpa/inet.h> #include …

[node] Node.js的Web 模块

[node] Node.js的Web 模块 什么是 Web 服务器&#xff1f;Web的应用架构http使用方式使用 Node 创建 Web 服务器使用 Node 创建 Web 客户端 什么是 Web 服务器&#xff1f; Web服务器一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序&#xff0c;Web服务器…