element ui tree限制只能在同级上移下移的demo
时间: 2023-10-24 14:06:32 浏览: 73
element-ui tree结构实现增删改自定义功能代码
5星 · 资源好评率100%
以下是一个基于 Element UI Tree 的限制只能在同级上移下移的示例代码:
```html
<template>
<el-tree
:data="treeData"
:default-expanded-keys="defaultExpandedKeys"
:props="treeProps"
@node-drop="handleNodeDrop"
/>
</template>
<script>
export default {
data() {
return {
treeData: [
{
id: 1,
label: 'Node 1',
children: [
{
id: 2,
label: 'Node 1-1',
},
{
id: 3,
label: 'Node 1-2',
},
],
},
{
id: 4,
label: 'Node 2',
children: [
{
id: 5,
label: 'Node 2-1',
},
{
id: 6,
label: 'Node 2-2',
},
],
},
],
defaultExpandedKeys: [1, 4],
treeProps: {
label: 'label',
children: 'children',
},
};
},
methods: {
handleNodeDrop(event) {
const { node, dropNode, dropType } = event;
// 确保仅同级节点可以上移或下移
if (node.parent !== dropNode.parent) {
event.preventDefault();
return;
}
// 处理上移
if (dropType === 'before') {
const dropNodeIndex = node.parent.children.indexOf(dropNode);
const nodeIndex = node.parent.children.indexOf(node);
if (nodeIndex < dropNodeIndex) {
this.moveNode(node, dropNodeIndex - 1);
} else {
this.moveNode(node, dropNodeIndex);
}
}
// 处理下移
if (dropType === 'after') {
const dropNodeIndex = node.parent.children.indexOf(dropNode);
const nodeIndex = node.parent.children.indexOf(node);
if (nodeIndex < dropNodeIndex) {
this.moveNode(node, dropNodeIndex);
} else {
this.moveNode(node, dropNodeIndex + 1);
}
}
},
moveNode(node, index) {
node.parent.children.splice(node.parent.children.indexOf(node), 1);
node.parent.children.splice(index, 0, node);
},
},
};
</script>
```
在上面的示例代码中,我们使用了 `@node-drop` 事件来监听拖拽事件,并在方法 `handleNodeDrop` 中对节点的拖拽行为进行限制。具体来说,我们在 `handleNodeDrop` 方法中添加了以下逻辑:
1. 确保仅同级节点可以上移或下移。
2. 处理上移:根据拖拽节点的位置和目标节点的位置,计算出要移动的节点的新位置,然后调用 `moveNode` 方法移动节点。
3. 处理下移:根据拖拽节点的位置和目标节点的位置,计算出要移动的节点的新位置,然后调用 `moveNode` 方法移动节点。
在 `moveNode` 方法中,我们使用 `splice` 方法来移动节点,并且使用 `indexOf` 方法来获取节点在其父节点的子节点列表中的位置。
阅读全文