Vue 可拖动树节点从一棵树到另一棵树

Vue draggable tree nodes from one tree to another

我有 2 个 vue 可拖动树(TreeATreeB)。我想将 TreeNodeATreeA 拖到 TreeB。也像 TreeNodeBTreeBTreeA.

更新

最重要的 属性 之一是那棵树很像 static structure。如果我拖动一个节点(this is a product),则必须将 only product 拖动到一个节点内。 不是完整节点。我的意思是 我的树是静态的 。我只想在节点内拖动 product

可以吗。有什么想法吗?

谁能帮帮我?

谁有这样的经历?

终于解决了。这是我的代码

 var Main = {
  data() {
    return {
      treeData1: [{
        id: 1,
        label: "Item 1",
        children: [{
          id: 4,
          label: "Item 1 Child 1",
          children: [{id: 9,label: "Item 1 Grand Child 1"},
                    {id: 9,label: "Item 1 Grand Child 1"}]
        }],
      }],
      treeData2: [{
        id: 2,
        label: "Item 2",
        children: [{
          id: 5,
          label: "Item 2 Child 1",
          children: [{id: 8,label: "Item 2 Grand Child 1"}],
        }],
      }],
    };
  },
  methods: {
    handleDragstart (node, event) {
      this.$refs.tree2.$emit('tree-node-drag-start', event, {node: node});
    },
    handleDragend (draggingNode, endNode, position, event) {
      
      let emptyData = {id: (+new Date), children: []};
      this.$refs.tree1.insertBefore(emptyData, draggingNode);

      this.$refs.tree2.$emit('tree-node-drag-end', event);
      this.$nextTick(() => {
        
        if (this.$refs.tree1.getNode(draggingNode.data)) {
          this.$refs.tree1.remove(emptyData);
        } else {
          
          let data = JSON.parse(JSON.stringify(draggingNode.data));
          this.$refs.tree1.insertAfter(data, this.$refs.tree1.getNode(emptyData));
          this.$refs.tree1.remove(emptyData);
        }
      })
    },
    returnTrue () {
      return true;
    },
    returnFalse () {
      return false;
    }
  }
}
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')
.tree {
  display: inline-block;
  vertical-align: top;
  width: 180px;
  margin-left: 10px;
  height: 300px;
  border: 1px solid blue;
}
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui/lib/index.js"></script>
<div id="app">
  <div class="tree-drag">
    <el-tree
      :data="treeData1"
      ref="tree1"
      class="tree" 
      node-key="id"
      draggable
      default-expand-all
      :allow-drop="returnFalse"
      @node-drag-start="handleDragstart"
      @node-drag-end="handleDragend"
    ></el-tree>
    
    <el-tree
      :data="treeData2" 
      ref="tree2"
      class="tree" 
      node-key="id"
      draggable
      default-expand-all
      :allow-drop="returnTrue"
    ></el-tree>
  </div>
</div>