php ztree 拖拽排序,关于vue.js:Vue-ElTree-拖拽排序方法通用

最近在把旧版本的ztree部门排序实现后,详情见 zTree通用拖拽排序

寻思着把新版本的el-tree也给退出排序功能,毕竟一碗水要端平(性能都是本人写的。。。),因为二者表构造也相似,外围也还是那几个字段 id、pid、order,就看了下ElementUI官网的文档,便有了这么一篇,原则上还是以尽可能的少改变数据为优先

首先咱们的Vue文件申明如下(因为文件内容多,只贴要害代码),次要退出了draggable属性和node-drop事件,反对拖拽

:data="deptTree"

:props="defaultProps"

:expand-on-click-node="false"

:filter-node-method="filterNode"

highlight-current

node-key="id"

ref="tree"

default-expand-all

@node-click="handleNodeClick"

@node-drop="handleDrop"

draggable

>

在vue mounted中增加handleDrop办法,通过对draggingNode、dropNode屡次剖析数据结构后,发现法则以及和ztree的不同

el-tree的level规定断定和ztree不一样,ztree能肉眼可见的第一层级level为0,el-tree则为1

ztree的第一层级的penart为null,el-tree第一层级还能向上,失去level为0的节点

ztree的源节点在拖拽后主动会变更该节点的pId和parentTid,这是ztree本人的属性,而非咱们本人的pid,咱们本人的pid在拖拽实现后是不变的,原来的父节点还是原来的父节点(认真看pId和pid是有区别的)

具体实现如下,具体实现思路在正文中注明:

// 拖拽事件 参数顺次为:被拖拽节点对应的 Node、完结拖拽时最初进入的节点、被拖拽节点的搁置地位(before、after、inner)、event

handleDrop: async function(draggingNode, dropNode, dropType, ev) {

var paramData = [];

// 当拖拽类型不为inner,阐明只是同级或者跨级排序,只须要寻找指标节点的父ID,获取其对象以及所有的子节点,并为子节点设置以后对象的ID为父ID即可

// 当拖拽类型为inner,阐明拖拽节点成为了指标节点的子节点,只须要获取指标节点对象即可

var data = dropType != "inner" ? dropNode.parent.data : dropNode.data;

var nodeData = dropNode.level == 1 && dropType != "inner" ? data : data.children;

// 设置父ID,当level为1阐明在第一级,pid为空

nodeData.forEach(element => {

element.pid = dropNode.level == 1 ? "" : data.id;

});

nodeData.forEach((element, i) => {

var dept = {

deptId: element.id,

parentDeptId: element.pid,

order: i

};

paramData.push(dept);

});

this.loading = true;

// 失去这次操作须要变更的数据范畴,申请后盾批量解决即可...

DeptAPI.updateDeptTreeOrder(JSON.stringify(paramData)).then(res => {

console.log(res);

//自行逻辑,能够加提示框message

this.loading = false;

});

},

把DeptAPI也贴出来吧,是我引入的dept.js文件

/**

* 部门排序

* @param {*} data

*/

const updateDeptTreeOrder = data => {

return request({

url: '...',

method: "POST",

headers: {

'Content-Type': 'application/json;charset=UTF-8'

},

data: data

})

}

export default {

updateDeptTreeOrder

};

后端Controller层应用@RequestBody接管List对象,具体能够见文章SpringBoot 接管List<Bean>参数问题(POST申请形式)

留神须要设置axios的Content-Type为application/json;charset=UTF-8

下期见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值