| <!-- |
| node-key 每个树节点用来作为唯一标识的属性,整棵树应该是唯一的 |
| node-click 节点被点击时的回调 |
| node-contextmenu 当某一节点被鼠标右键点击时会触发该事件 |
| data 展示数据 |
| default-expand-all 是否默认展开所有节点 |
| node-drag-start 节点开始拖拽时触发的事件 |
| node-drag-enter 拖拽进入其他节点时触发的事件 |
| node-drag-leave 拖拽离开某个节点时触发的事件 |
| node-drag-over 在拖拽节点时触发的事件(类似浏览器的 mouseover 事件) |
| node-drag-end 拖拽结束时(可能未成功)触发的事件 |
| node-drop 拖拽成功完成时触发的事件 |
| allow-drop 拖拽时判定目标节点能否被放置。type 参数有三种情况:'prev'、'inner' 和 'next',分别表示放置在目标节点前、插入至目标节点和放置在目标节点后 |
| allow-drag 判断节点能否被拖拽 |
| expand-on-click-node 是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。 |
| draggable 是否开启拖拽节点功能 |
| highlight-current 是否高亮当前选中节点,默认值是 false。 |
| --> |
| <el-tree |
| :data="data" |
| node-key="id" |
| default-expand-all |
| @node-drag-start="handleDragStart" |
| @node-drag-enter="handleDragEnter" |
| @node-drag-leave="handleDragLeave" |
| @node-drag-over="handleDragOver" |
| @node-drag-end="handleDragEnd" |
| @node-drop="handleDrop" |
| draggable |
| :allow-drop="allowDrop" |
| :allow-drag="allowDrag"> |
| </el-tree> |
| |
| <script> |
| export default { |
| data() { |
| return { |
| data: [{ |
| id: 1, |
| label: '一级 1', |
| children: [{ |
| id: 4, |
| label: '二级 1-1', |
| children: [{ |
| id: 9, |
| label: '三级 1-1-1' |
| }, { |
| id: 10, |
| label: '三级 1-1-2' |
| }] |
| }] |
| }, { |
| id: 2, |
| label: '一级 2', |
| children: [{ |
| id: 5, |
| label: '二级 2-1' |
| }, { |
| id: 6, |
| label: '二级 2-2' |
| }] |
| }, { |
| id: 3, |
| label: '一级 3', |
| children: [{ |
| id: 7, |
| label: '二级 3-1' |
| }, { |
| id: 8, |
| label: '二级 3-2', |
| children: [{ |
| id: 11, |
| label: '三级 3-2-1' |
| }, { |
| id: 12, |
| label: '三级 3-2-2' |
| }, { |
| id: 13, |
| label: '三级 3-2-3' |
| }] |
| }] |
| }], |
| defaultProps: { |
| children: 'children', |
| label: 'label' |
| } |
| }; |
| }, |
| methods: { |
| handleDragStart(node, ev) { |
| console.log('drag start', node); |
| }, |
| handleDragEnter(draggingNode, dropNode, ev) { |
| console.log('tree drag enter: ', dropNode.label); |
| }, |
| handleDragLeave(draggingNode, dropNode, ev) { |
| console.log('tree drag leave: ', dropNode.label); |
| }, |
| handleDragOver(draggingNode, dropNode, ev) { |
| console.log('tree drag over: ', dropNode.label); |
| }, |
| handleDragEnd(draggingNode, dropNode, dropType, ev) { |
| console.log('tree drag end: ', dropNode && dropNode.label, dropType); |
| }, |
| handleDrop(draggingNode, dropNode, dropType, ev) { |
| console.log('tree drop: ', dropNode.label, dropType); |
| }, |
| allowDrop(draggingNode, dropNode, type) { |
| if (dropNode.data.label === '二级 3-1') { |
| return type !== 'inner'; |
| } else { |
| return true; |
| } |
| }, |
| allowDrag(draggingNode) { |
| return draggingNode.data.label.indexOf('三级 3-2-2') === -1; |
| } |
| } |
| }; |
| </script> |