123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <template>
- <el-tree
- :allow-drop="allowDrop"
- :allow-drag="allowDrag"
- :data="data"
- draggable
- default-expand-all
- node-key="id"
- @node-drag-start="handleDragStart"
- @node-drag-enter="handleDragEnter"
- @node-drag-leave="handleDragLeave"
- @node-drag-over="handleDragOver"
- @node-drag-end="handleDragEnd"
- @node-drop="handleDrop"
- />
- </template>
- <script lang="ts" setup>
- import type Node from 'element-plus/es/components/tree/src/model/node'
- import type { DragEvents } from 'element-plus/es/components/tree/src/model/useDragNode'
- import type {
- AllowDropType,
- NodeDropType,
- } from 'element-plus/es/components/tree/src/tree.type'
- const handleDragStart = (node: Node, ev: DragEvents) => {
- console.log('drag start', node)
- }
- const handleDragEnter = (
- draggingNode: Node,
- dropNode: Node,
- ev: DragEvents
- ) => {
- console.log('tree drag enter:', dropNode.label)
- }
- const handleDragLeave = (
- draggingNode: Node,
- dropNode: Node,
- ev: DragEvents
- ) => {
- console.log('tree drag leave:', dropNode.label)
- }
- const handleDragOver = (draggingNode: Node, dropNode: Node, ev: DragEvents) => {
- console.log('tree drag over:', dropNode.label)
- }
- const handleDragEnd = (
- draggingNode: Node,
- dropNode: Node,
- dropType: NodeDropType,
- ev: DragEvents
- ) => {
- console.log('tree drag end:', dropNode && dropNode.label, dropType)
- }
- const handleDrop = (
- draggingNode: Node,
- dropNode: Node,
- dropType: NodeDropType,
- ev: DragEvents
- ) => {
- console.log('tree drop:', dropNode.label, dropType)
- }
- const allowDrop = (draggingNode: Node, dropNode: Node, type: AllowDropType) => {
- if (dropNode.data.label === 'Level two 3-1') {
- return type !== 'inner'
- } else {
- return true
- }
- }
- const allowDrag = (draggingNode: Node) => {
- return !draggingNode.data.label.includes('Level three 3-1-1')
- }
- const data = [
- {
- label: 'Level one 1',
- children: [
- {
- label: 'Level two 1-1',
- children: [
- {
- label: 'Level three 1-1-1',
- },
- ],
- },
- ],
- },
- {
- label: 'Level one 2',
- children: [
- {
- label: 'Level two 2-1',
- children: [
- {
- label: 'Level three 2-1-1',
- },
- ],
- },
- {
- label: 'Level two 2-2',
- children: [
- {
- label: 'Level three 2-2-1',
- },
- ],
- },
- ],
- },
- {
- label: 'Level one 3',
- children: [
- {
- label: 'Level two 3-1',
- children: [
- {
- label: 'Level three 3-1-1',
- },
- ],
- },
- {
- label: 'Level two 3-2',
- children: [
- {
- label: 'Level three 3-2-1',
- },
- ],
- },
- ],
- },
- ]
- </script>
|