手摸手教你最简单的树拖拽
![在简单拖拽](https://img-blog.csdnimg.cn/3f452aaef31147468fc89e1cdbd8b5e6.png#pic_center)
从树型控件中找到需要的变量拖拽添加到我们自己的盒子,为我所用!代码如下:
<div class="tree-drag">
<div class="tree">
<div class="tree-top">
<span>可选成员</span>
<span><i class="el-icon-s-custom" />{{ peopleNum }}人</span>
</div>
<div class="tree-content">
<el-input
v-model="filterText"
placeholder="请输入成员姓名"
suffix-icon="el-icon-search"
/>
<el-tree
ref="tree"
:data="treeData"
node-key="id"
default-expand-all
draggable
:allow-drop="allowDrop"
:allow-drag="allowDrag"
:filter-node-method="filterNode"
@node-drag-start="handleDragStart"
@node-drag-end="handleDragEnd"
>
<span slot-scope="{node,data}" class="custom-tree-node" :style="{cursor: node.data.type===1? 'move' : 'not-allowed'}">
<span v-if="node.data.type===1" style="margin-right: 5px;"><i class="el-icon-s-custom" /> </span>
<span>{{ data.label }}</span>
</span>
</el-tree>
</div>
moveTrue: false,
dialogAdd: false,
mode: 'transfer',
fromData: [
{
id: '1',
pid: 0,
label: '一级 1',
children: [
{
id: '1-1',
pid: '1',
label: '二级 1-1',
children: []
},
{
id: '1-2',
pid: '1',
label: '二级 1-2',
children: [
{
id: '1-2-1',
pid: '1-2',
children: [],
label: '二级 1-2-1'
},
{
id: '1-2-2',
pid: '1-2',
children: [],
label: '二级 1-2-2'
}
]
}
]
}
],
toData: [],
title: ['可选成员', '已选成员'],
treeData: [{
}],
rightList: [],
filterText: '',
signIndex: {},
peopleNum: 0
```watch: {
filterText(val) {
this.$refs.tree.filter(val)
}
},
mounted() {
},
methods: {
subPeople() {
if (this.rightList.length > 0) {
this.rightList.map(res => {
res.memberId = res.id
res.memberName = res.label
res.memberDeptName = res.deptName
res.memberPrivilege = 'view'
})
this.$emit('subPeople', this.rightList)
this.hide()
} else {
this.$message.error('成员添加不能为空!')
}
},
hide() {
this.rightList = []
this.dialogAdd = false
},
showView() {
this.dialogAdd = true
},
add(fromData, toData, obj) {
},
remove(fromData, toData, obj) {
},
handleDragStart(node, ev) {
this.moveTrue = true
ev.dataTransfer.setData('tree-item', JSON.stringify(node.data))
},
handleDragEnd(draggingNode, endNode, position, event) {
if (!draggingNode.data.disabled) {
this.rightList.map(res => {
if (this.rightList.length > 0 && res.id === draggingNode.data.id) {
draggingNode.data.label = draggingNode.data.label + '(已添加)'
draggingNode.data.disabled = true
}
})
} else {
this.$Message.error('成员已存在,不可重复添加!')
}
},
allowDrop(draggingNode, dropNode, type) {
return false
},
allowDrag(draggingNode) {
if (draggingNode.data.type === 1 && !draggingNode.data.disabled) {
return draggingNode.data
} else {
return false
}
},
drop(event) {
const data = event.dataTransfer.getData('tree-item')
this.rightList.push(JSON.parse(data))
this.rightList = _.uniqBy(this.rightList, 'id')
},
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
menuListFilter (arr) {
arr.forEach(item => {
if (item.disabled) {
delete item.disabled
}
if (item.children && item.children.length > 0) {
this.menuListFilter(item.children)
}
})
},
clearBtn() {
this.rightList = []
this.$emit('subPeopleTwo')
}
}
## 全部代码就在这里啦---很丝滑吧
## 因为我本地还有上页面的数据回显功能,所以上面有冗余代码请自行根据需要删减哦
*上图上图
![好看吧](https://img-blog.csdnimg.cn/093a842775a0459e8ff89d8420545af4.png#pic_center)
*![美滋滋](https://img-blog.csdnimg.cn/908368ce459f425796bc653697e211be.png#pic_center)
## 欢迎关注!点赞!!转发哦!!!