From 32ad8aaea986223ffd2a5e4eb55d2e185724d506 Mon Sep 17 00:00:00 2001
From: 1549469775 <1549469775@qq.com>
Date: Thu, 23 Jun 2022 00:54:32 +0800
Subject: [PATCH] fixed bug

---
 packages/components/tree/node.vue    | 21 ++++++++++++++++++---
 packages/components/tree/tree.vue    | 13 ++-----------
 packages/playground/package.json     |  1 +
 packages/playground/src/dev/tree.vue |  3 ++-
 pnpm-lock.yaml                       |  2 ++
 5 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/packages/components/tree/node.vue b/packages/components/tree/node.vue
index 03e84e8..9e14a05 100644
--- a/packages/components/tree/node.vue
+++ b/packages/components/tree/node.vue
@@ -33,8 +33,24 @@
             ]"></div>
         </div>
         <div class="ps-tree-sub-node" v-if="(opts.justOpen || data.isExpand) && data.children && data.children.length">
-            <slot name="children" :datalist="data.children" :level="level + 1" :status="status">
-            </slot>
+            <template v-for="(item, index) in data.children" :key="item.key">
+                <node
+                    @onDragstart="(e: INiuTreeKey)=>emit('onDragstart', e)"
+                    @onDragend="(e: INiuTreeKey)=>emit('onDragend', e)"
+                    @onDrop="(e: INiuTreeKey, s?: ENiuTreeStatus)=>emit('onDrop', e, s)"
+                    @onDragover="(e: INiuTreeKey)=>emit('onDragover', e)"
+                    @onDragleave="(e: INiuTreeKey)=>emit('onDragleave', e)"
+                    @click="(e: INiuTreeData)=>emit('click', e)"
+                    :data-source-key="dataSourceKey"
+                    :data="item"
+                    :list="list"
+                    :level="level + 1"
+                >
+                    <template #default="{data, deep, dataSourceKey, status}: {data: INiuTreeData, deep: number, dataSourceKey:INiuTreeKey, status:ENiuTreeStatus}">
+                        <slot :data="data" :deep="deep" :dataSourceKey="dataSourceKey" :status="status"></slot>
+                    </template>
+                </node>
+            </template>
         </div>
     </div>
 </template>
@@ -43,7 +59,6 @@
 import node from './node.vue'
 import { inject, ref, provide, useSlots } from 'vue'
 import { isChildOf } from './util'
-import TreeDrag from './tree-drag.vue';
 import { ENiuTreeStatus, INiuTreeData, INiuTreeKey } from './type';
 const props = withDefaults(
     defineProps<{
diff --git a/packages/components/tree/tree.vue b/packages/components/tree/tree.vue
index 1d3a1fa..32b08b2 100644
--- a/packages/components/tree/tree.vue
+++ b/packages/components/tree/tree.vue
@@ -7,17 +7,6 @@
                     #default="{ data, deep, dataSourceKey, status }: { data: INiuTreeData, deep: number, dataSourceKey: INiuTreeKey, status: ENiuTreeStatus }">
                     <slot :data="data" :deep="deep" :dataSourceKey="dataSourceKey" :status="status"></slot>
                 </template>
-                <template #children="{datalist, level}">
-                    <template v-for="(item, index) in datalist" :key="index">
-                        <node @onDragstart="onDragstart" @onDragEnd="onDragEnd" @onDrop="onDrop" :data-source-key="dataSourceKey"
-                            :data="item" :list="list" :level="level" @click="(item) => clickNode(item)">
-                            <template
-                                #default="{ data, deep, dataSourceKey, status }: { data: INiuTreeData, deep: number, dataSourceKey: INiuTreeKey, status: ENiuTreeStatus }">
-                                <slot :data="data" :deep="deep" :dataSourceKey="dataSourceKey" :status="status"></slot>
-                            </template>
-                        </node>
-                    </template>
-                </template>
             </node>
         </template>
     </div>
@@ -68,11 +57,13 @@ function clickNode(item: INiuTreeData) {
 
 const emit = defineEmits<{
     (e: 'change'): void
+    (e: 'itemDragstart'): void
 }>()
 
 const dataSourceKey = ref()
 function onDragstart(key: INiuTreeKey) {
     dataSourceKey.value = key
+    emit("itemDragstart")
 }
 function onDragEnd(key: INiuTreeKey) {
     dataSourceKey.value = undefined
diff --git a/packages/playground/package.json b/packages/playground/package.json
index 663ee7b..1279b1d 100644
--- a/packages/playground/package.json
+++ b/packages/playground/package.json
@@ -14,6 +14,7 @@
   "devDependencies": {
     "@types/lodash": "^4.14.182",
     "@vitejs/plugin-vue": "^2.3.3",
+    "@vue/runtime-core": "^3.2.37",
     "typescript": "^4.5.4",
     "unplugin-vue-components": "^0.19.5",
     "vite": "^2.9.9",
diff --git a/packages/playground/src/dev/tree.vue b/packages/playground/src/dev/tree.vue
index 89fedc1..8f3b325 100644
--- a/packages/playground/src/dev/tree.vue
+++ b/packages/playground/src/dev/tree.vue
@@ -9,7 +9,8 @@ const list = ref(convertTreeData([
         children: [
             {
                 key: 5,
-                title: "5"
+                title: "5",
+                children: []
             },
         ]
     },
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index be15eff..8530eea 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -88,6 +88,7 @@ importers:
     specifiers:
       '@types/lodash': ^4.14.182
       '@vitejs/plugin-vue': ^2.3.3
+      '@vue/runtime-core': ^3.2.37
       lodash: ^4.17.21
       typescript: ^4.5.4
       unplugin-vue-components: ^0.19.5
@@ -102,6 +103,7 @@ importers:
     devDependencies:
       '@types/lodash': 4.14.182
       '@vitejs/plugin-vue': 2.3.3_vite@2.9.12+vue@3.2.37
+      '@vue/runtime-core': 3.2.37
       typescript: 4.7.4
       unplugin-vue-components: 0.19.6_vite@2.9.12+vue@3.2.37
       vite: 2.9.12