Browse Source

fixed code

typings
npmrun 3 years ago
parent
commit
f025c0bba1
  1. 80
      packages/components/tree/node.vue
  2. 3
      packages/components/tree/tree.vue
  3. 4
      packages/playground/src/dev/tree.vue
  4. 1
      packages/theme-chalk/src/tree.scss

80
packages/components/tree/node.vue

@ -1,15 +1,5 @@
<template> <template>
<div> <div class="ps-tree-node component" :class="[{ draging: status === ENiuTreeStatus.DragIng }]">
<div :style="{ marginLeft: parentLevel * 10 + 'px' }" :class="[
{
'ps-tree-drag-in':
dataSourceKey != data.key &&
dataSourceKey &&
!isChildOf(data.key, dataSourceKey, list) &&
status === ENiuTreeStatus.DragInner,
},
]"></div>
<div class="ps-tree-node component" :class="[{ draging: status === ENiuTreeStatus.DragIng }]">
<div class="ps-tree-node-wrapper" ref="nodeEL" :draggable="draggable" @dragstart.stop="onDragstart" <div class="ps-tree-node-wrapper" ref="nodeEL" :draggable="draggable" @dragstart.stop="onDragstart"
@dragend.stop="onDragend" @drop.stop="onDrop" @dragover.stop="onDragover" @dragleave.stop="onDragleave" @dragend.stop="onDragend" @drop.stop="onDrop" @dragover.stop="onDragover" @dragleave.stop="onDragleave"
@click.stop="emit('click', data)"> @click.stop="emit('click', data)">
@ -22,7 +12,7 @@
{{ data.title }} - {{ level * 10 + 'px' }} {{ data.title }} - {{ level * 10 + 'px' }}
</div> </div>
</slot> </slot>
<div :style="{ marginLeft: level * 10 + 'px' }" :class="[ <div v-if="!opts.sort" :style="{ marginLeft: level * 10 + 'px' }" :class="[
{ {
'ps-tree-drag-up': 'ps-tree-drag-up':
dataSourceKey != data.key && dataSourceKey != data.key &&
@ -42,21 +32,17 @@
}, },
]"></div> ]"></div>
</div> </div>
<div v-if="opts.sort && dda.parentKey.value == data.key" :style="{ marginLeft: level * 10 + 'px' }"
class="ps-tree-drag-in"></div>
<div class="ps-tree-sub-node" v-if="(opts.justOpen || data.isExpand) && data.children && data.children.length"> <div class="ps-tree-sub-node" v-if="(opts.justOpen || data.isExpand) && data.children && data.children.length">
<template v-for="(item, index) in sortedList" :key="item.key"> <template v-for="(item, index) in sortedList" :key="item.key">
<node <node @onDragstart="(e: INiuTreeKey) => emit('onDragstart', e)"
@onDragstart="(e: INiuTreeKey)=>emit('onDragstart', e)" @onDragend="(e: INiuTreeKey) => emit('onDragend', e)"
@onDragend="(e: INiuTreeKey)=>emit('onDragend', e)" @onDrop="(e: INiuTreeKey, s?: ENiuTreeStatus) => emit('onDrop', e, s)"
@onDrop="(e: INiuTreeKey, s?: ENiuTreeStatus)=>emit('onDrop', e, s)" @onDragover="(e: INiuTreeKey) => emit('onDragover', e)"
@onDragover="(e: INiuTreeKey)=>emit('onDragover', e)" @onDragleave="(e: INiuTreeKey) => emit('onDragleave', e)"
@onDragleave="(e: INiuTreeKey)=>emit('onDragleave', e)" @expand="(e: INiuTreeData) => emit('expand', e)" @click="(e: INiuTreeData) => emit('click', e)"
@expand="(e: INiuTreeData)=>emit('expand', e)" :data-source-key="dataSourceKey" :data="item" :list="list" :level="level + 1">
@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}"> --> <!-- <template #default="{data, deep, dataSourceKey, status}: {data: INiuTreeData, deep: number, dataSourceKey:INiuTreeKey, status:ENiuTreeStatus}"> -->
<template #default="fuck"> <template #default="fuck">
<aa v-bind="fuck"></aa> <aa v-bind="fuck"></aa>
@ -67,20 +53,19 @@
</template> </template>
</div> </div>
</div> </div>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
// import node from './node.vue' // import node from './node.vue'
import { inject, ref, provide, renderSlot, useSlots, watch, readonly, computed } from 'vue' import { inject, ref, provide, renderSlot, useSlots, watch, readonly, computed, Ref } from 'vue'
import { findByKeyParent, isChildOf } from './util' import { findByKeyParent, isChildOf } from './util'
import renderNode from './renderNode' import renderNode from './renderNode'
import type { INiuTreeData, INiuTreeKey } from './type' import type { INiuTreeData, INiuTreeKey } from './type'
import { ENiuTreeStatus } from './type'; import { ENiuTreeStatus } from './type';
import {betterDirectorySort} from "./better-directory-sort" import { betterDirectorySort } from "./better-directory-sort"
const sortedList = computed(()=>{ const sortedList = computed(() => {
if(opts.sort){ if (opts.sort) {
return props.data.children.sort((a, b) => { return props.data.children.sort((a, b) => {
return betterDirectorySort( return betterDirectorySort(
{ name: a.title, isDirectory: a.isFolder }, { name: a.title, isDirectory: a.isFolder },
@ -104,18 +89,20 @@ const props = withDefaults(
} }
) )
const parentLevel = computed(()=>{ const parentLevel = computed(() => {
let level = props.level - 1 let level = props.level - 1
return level>=0?level:0 return level >= 0 ? level : 0
}) })
const slots = useSlots() const slots = useSlots()
const aa = (fuck: any)=>renderSlot(slots, "default", fuck) const aa = (fuck: any) => renderSlot(slots, "default", fuck)
watch(()=>props.data.isExpand, ()=>{ watch(() => props.data.isExpand, () => {
emit("expand", props.data) emit("expand", props.data)
}) })
const dda = inject<{
parentKey: Ref<INiuTreeKey>
}>("tree:data")
const opts = inject("tree:opts", { const opts = inject("tree:opts", {
justOpen: false, justOpen: false,
sort: false, sort: false,
@ -134,6 +121,7 @@ const status = ref<ENiuTreeStatus>()
const nodeEL = ref<HTMLDivElement>() const nodeEL = ref<HTMLDivElement>()
provide("draggable", draggable) provide("draggable", draggable)
function onDragstart(event: DragEvent) { function onDragstart(event: DragEvent) {
dda.parentKey.value = undefined
// //
if (event.dataTransfer) { if (event.dataTransfer) {
event.dataTransfer.dropEffect = 'move' event.dataTransfer.dropEffect = 'move'
@ -154,6 +142,7 @@ function onDragstart(event: DragEvent) {
} }
} }
function onDragend() { function onDragend() {
dda.parentKey.value = undefined
// //
let clone = document.getElementById('dragging_node') let clone = document.getElementById('dragging_node')
clone?.remove() clone?.remove()
@ -161,6 +150,7 @@ function onDragend() {
emit('onDragend', props.data.key) emit('onDragend', props.data.key)
} }
function onDrop(e: DragEvent) { function onDrop(e: DragEvent) {
dda.parentKey.value = undefined
e.preventDefault() e.preventDefault()
emit('onDrop', props.data.key, status.value) emit('onDrop', props.data.key, status.value)
status.value = undefined status.value = undefined
@ -177,7 +167,8 @@ function onDragover(event: DragEvent) {
return return
const y = event.offsetY const y = event.offsetY
const h = (event.currentTarget as HTMLDivElement).offsetHeight const h = (event.currentTarget as HTMLDivElement).offsetHeight
if(!opts.sort){ let activeKey = undefined
if (!opts.sort) {
if (y < h / 3) { if (y < h / 3) {
status.value = ENiuTreeStatus.DragUp status.value = ENiuTreeStatus.DragUp
} else if (y <= (h * 2) / 3 && y >= h / 3 && props.data.children) { } else if (y <= (h * 2) / 3 && y >= h / 3 && props.data.children) {
@ -187,22 +178,29 @@ function onDragover(event: DragEvent) {
} else { } else {
status.value = undefined status.value = undefined
} }
}else{ } else {
const parentSource = findByKeyParent(props.dataSourceKey, props.list)
const parentData = findByKeyParent(props.data.key, props.list)
if (props.data.children) { if (props.data.children) {
status.value = ENiuTreeStatus.DragIn status.value = ENiuTreeStatus.DragIn
activeKey = props.data.key
} else if (!props.data.children && opts.sort) { } else if (!props.data.children && opts.sort) {
const parentSource = findByKeyParent(props.dataSourceKey, props.list) if (parentSource && parentData && parentSource.key !== parentData.key) {
const parentData = findByKeyParent(props.data.key, props.list) activeKey = parentData.key
if(parentSource && parentData &&parentSource.key !== parentData.key){
status.value = ENiuTreeStatus.DragInner status.value = ENiuTreeStatus.DragInner
}else if(parentSource != parentData){ } else if (parentSource != parentData) {
if (parentData) {
activeKey = parentData.key
}
status.value = ENiuTreeStatus.DragInner status.value = ENiuTreeStatus.DragInner
} }
} }
dda.parentKey.value = activeKey
} }
emit('onDragover', props.data.key) emit('onDragover', props.data.key)
} }
function onDragleave() { function onDragleave() {
dda.parentKey.value = undefined
if (!props.dataSourceKey) return if (!props.dataSourceKey) return
if (props.dataSourceKey === props.data.key) return if (props.dataSourceKey === props.data.key) return
if ( if (

3
packages/components/tree/tree.vue

@ -98,6 +98,9 @@ const props = withDefaults(
const slot = useSlots() const slot = useSlots()
provide("tree:opts", props) provide("tree:opts", props)
provide("tree:data", {
parentKey: ref<INiuTreeKey>()
})
function onExpand(item: INiuTreeData) { function onExpand(item: INiuTreeData) {
emit("expand", item) emit("expand", item)

4
packages/playground/src/dev/tree.vue

@ -61,9 +61,9 @@ function onExpand(node: INiuTreeData) {
} }
const dropFn = (status: ENiuTreeStatus, data: INiuTreeData<any>, list: INiuTreeData<any>[]): Promise<boolean> => { const dropFn = (status: ENiuTreeStatus, data: INiuTreeData<any>, list: INiuTreeData<any>[]): Promise<boolean> => {
return new Promise((resolve) => { return new Promise((resolve) => {
// setTimeout(() => { setTimeout(() => {
resolve(true) resolve(true)
// }, 2000); }, 2000);
}) })
} }
</script> </script>

1
packages/theme-chalk/src/tree.scss

@ -8,7 +8,6 @@
} }
.ps-tree-node.component { .ps-tree-node.component {
position: relative; position: relative;
&.draging { &.draging {
opacity: 0.6; opacity: 0.6;
} }

Loading…
Cancel
Save