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

news/2024/10/25 15:22:48/

问题一:实现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.ppmy.cn/news/1249860.html

相关文章

动态规划:解决复杂问题的利器(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

对继承和对象组合的理解

对象组合和继承是面向对象编程中两种常见的代码复用和组织结构的方式&#xff0c;在设计模式中也经常出现 继承 是指一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和方法&#xff0c;并可以扩展或修改它们。通过…

【Android知识笔记】架构专题(一)

什么是 MVC 其实我们日常开发中的Activity,Fragment和XML界面就相当于是一个MVC的架构模式,但往往Activity中需要处理绑定UI,用户交互,以及数据处理。 这种开发方式的缺点就是业务量复杂的时候一个Activity过于臃肿。但是页面结构不复杂的情况下使用这种方式就会显得很简…

[Java]JUC并发编程

JUC并发编程 一、什么是JUC 使用到 java.util 工具包、包、分类 二、线程和进程 进程&#xff1a;一个正在运行的程序&#xff0c;QQ.exe Music.exe 程序的集合&#xff1b; 一个进程往往可以包含多个线程&#xff0c;至少包含一个&#xff01; Java默认有两个线程&#x…

linux /proc 文件系统

/proc系统是一个伪文件系统&#xff0c;它只存在内存当中&#xff0c;而不占用外存空间&#xff0c;以文件系统的方式为内核与进程提供通信的接口。 /proc目录下有很多以数字命名的目录&#xff0c;每个数字代表进程号PID它们是进程目录。系统中当前运行的每一个进程在/proc下都…

Android进阶之路 - TextView文本渐变

那天做需求的时候&#xff0c;遇到一个小功能&#xff0c;建立在前人栽树&#xff0c;后人乘凉的情况下&#xff0c;仅用片刻就写完了&#xff1b;说来惭愧&#xff0c;我以前并未写过文本渐变的需求&#xff0c;脑中也仅有一个shape渐变带来的大概思路&#xff0c;回头来看想着…

Apache Flink(三):Flink核心特性及应用场景

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…