<draggable tag="ul" v-model="dataDep" :animation="200" :scroll="true"
@end="dragEnd" handle=".canDragon" filter=".holdings" :move="onMove">
<li v-for=" (item, index) in dataDep" :key="index"
:class="{'holdings':item.isFirstNode==1}">
<!--
handle属性:当鼠标落在handle指定的元素上面时才允许拖动
filter属性:某个元素或对象不允许拖动拖拽,值为class名,配合move属性
-->
<h3 class="canDragon">{{item.departmentname||' '}}</h3>
<div class="arrtd">
<a>{{item.deptypename}}</a>
</div>
</li>
</draggable>
data() {
return {
dataDep: [],
dataDragon: [],
}
},
created(){
this.dataDep= [
{
depid: 1,
departmentname: '财务部',
deptypename: '类型一',
isFirstNode: 1
},
{
depid: 2,
departmentname: '人事部',
deptypename: '类型二',
isFirstNode: 0
},
{
depid: 3,
departmentname: '财务部',
deptypename: '类型一',
isFirstNode: 0
},
]
this.dataDragon = JSON.parse(JSON.stringify(this.dataDep))
},
methods: {
onMove(e) {
//relatedContext: 将停靠的对象,设置为false表示不允许停靠和拖拽
if (e.relatedContext.element.isFirstNode == 1) return false;
return true;
},
dragEnd(event) {
//调换顺序
let oldIndex = event.oldIndex//移动初始位置
let newIndex = event.newIndex//运动终止位置
let diff = Math.abs(newIndex - oldIndex)//插值绝对值
let index = this.dataDragon[oldIndex]
if (eval(oldIndex) > eval(newIndex)) {
for (var i = 0; i < diff; i++) {
this.dataDragon[oldIndex - i] = this.dataDragon[oldIndex - i - 1]
}
this.dataDragon[newIndex] = index
} else {
for (var i = 0; i < diff; i++) {
this.dataDragon[oldIndex + i] = this.dataDragon[oldIndex + i + 1]
}
this.dataDragon[newIndex] = index
}
this.dataDragon.forEach((item, index) => {
item.showorder = index
})
},
}