问题一:实现el–tree 删除、添加、编辑后默认展开该节点
操作视频如下
节点代码
<template>
<el-tree
v-loading="loading"
ref="tree"
element-loading-text="加载中"
highlight-current
:data="treeData"
:props="defaultProps"
node-key="id"
:default-expanded-keys="defaultKey"
@node-click="handleNodeClick"
/>
</template>
实现步骤:
逻辑代码如下
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 同级节点拖拽并进行前后端排序+筛选
操作视频如下
节点代码
<template>
<el-tree
v-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>
实现步骤:
- 通过el-tree的
draggable
属性开启可拖拽功能 - 通过el-tree的
allow-drop
属性写方法判断节点能否被拖拽 - 通过el-tree的
node-drop
属性获取拖拽成功节点的子级id - 将获取拖拽节点的子集id传给后端
- 外加筛选是用到了
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 = [];
// 获取子级id
for (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;
},
原文地址:https://blog.csdn.net/hangnan315/article/details/134690678
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_34244.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。