Arrastre del árbol de elementos de interfaz de usuario (admite el arrastre de nodos secundarios, los nodos secundarios no se pueden arrastrar hacia afuera y el nodo principal más externo se puede configurar para que no se pueda arrastrar)

Arrastre del componente del árbol elementUI (admite el arrastre de nodos secundarios, los nodos secundarios no se pueden arrastrar hacia afuera y el nodo principal más externo se puede configurar para que no se pueda arrastrar)

resultado
Efecto: 1. El nodo HAS-BLED más externo no se puede arrastrar.
2. El nodo secundario es antiguo y solo se puede arrastrar dentro del nodo principal actual. No se puede arrastrar a los nodos de prueba 111 y HAS-BLED
. 3. Los nodos en la prueba 444 y la prueba 333. También arrastre solo dentro del área de prueba 111 del nodo principal

HTML

 			<el-tree
                  ref="rightTree"
                  :data="rightTreeData"
                  node-key="labelId"
                  default-expand-all
                  @node-click="nodeClick"
                  :props="defaultProps"
                  draggable
                  @node-drop="handleDrop"
                  :allow-drop="allowDrop"
                  :allow-drag="allowDrag"
                >
		 </el-tree>

Propiedades operativas

arrastrable: configura el componente del árbol para que se pueda arrastrar.
@node-drop es un evento que se activa cuando el arrastre se completa con éxito.
Allow-drag determina si el nodo se puede arrastrar.
Allow-drop determina si el nodo de destino se puede colocar al arrastrar. El parámetro de tipo tiene tres situaciones: 'anterior', 'interior' y 'siguiente', que significan respectivamente colocar antes del nodo de destino, insertar en el nodo de destino y colocar después del nodo de destino.

js

   // 最外层父节点不可拖拽
    allowDrag(draggingNode) {
    
    
      console.log(draggingNode)
      return draggingNode.data.labelTypeId;//唯一键,最外层父节点无labelTypeId属性,则不可拓展
    },
    allowDrop(moveNode, inNode, type) {
    
    
      // allow-drop属性是用来限制树节点拖拽后是否可以放置在当前位置,属性值为true时可以,为false时不可以。
      // 1.子节点禁止外托
      // 2.禁止拖进有子节点的层级
      // 3.没有设置一级节点判断 不可拖拽在allowDrag设置
      console.log(moveNode.nextSibling,moveNode.parent.id,inNode.parent.id)
          // 二级拖动到二级 高龄、测试111
            if (
                moveNode.level == 2 &&
                inNode.level == 2 &&
                moveNode.parent.id == inNode.parent.id
            ) {
    
    
                // 四种情况
                if (moveNode.nextSibling == undefined) {
    
    
                    return type == 'prev';
                } else if (inNode.nextSibling == undefined) {
    
    
                    return type == 'next';
                } else if (moveNode.nextSibling.id !== inNode.id) {
    
    
                    return type == 'prev';
                } else {
    
    
                    return type == 'next';
                }
            }
			//三级内拖拽 测试222,测试333,测试444
            if (
                moveNode.level == 3 &&
                inNode.level == 3 &&
                moveNode.parent.id == inNode.parent.id
            ) {
    
    
                // 四种情况
                if (moveNode.nextSibling == undefined) {
    
    
                    return type == 'prev';
                } else if (inNode.nextSibling == undefined) {
    
    
                    return type == 'next';
                } else if (moveNode.nextSibling.id !== inNode.id) {
    
    
                    return type == 'prev';
                } else {
    
    
                    return type == 'next';
                }
            }
    },

Supongo que te gusta

Origin blog.csdn.net/qq_22167557/article/details/125535650
Recomendado
Clasificación