Element UI Tree 实现父节点内节点拖拽

由于代码量过大,我这里进行部分代码粘贴 可以好好研究官方文档的api,很有价值
官方api

 <el-tree
      :data="treeData"
      ref="tree"
      :key="tree_key"
      node-key="id" 
      class="margin-top10"
      @node-click="nodeClick"
      :filter-node-method="filterNode"
      :default-expanded-keys="defaultExpand"
      empty-text="选定系统没有组织结构"
      :render-content="renderContent"
      draggable
      :allow-drop="allowDrop"
      @node-drop="sort"
    ></el-tree>

:allow-drop 开始拖拽
@node-drop 拖拽结束时的操作,包括 拖动的节点,结束时的节点,位置,event

我的数据在查询时都是安装sort字段进行排序,直接更改sort字段值即可。
若不存在排序字段,参考思路:将当前父节点下的所有新的排列好的数组更新到原来的数据库中,进行覆盖操作,也可以做一个批量修改,将当前拖拽的两个节点进行交换。

   //节点拖拽 
    allowDrop(draggingNode, dropNode, type){
          //非组织结点拖拽处理
          if (draggingNode.data.type  === 1) {
            return false
          }
          //同一父节点下实现拖拽
          if (draggingNode.data.parentId === dropNode.data.parentId) {
            return type === 'prev' || type === 'next'
          } else {
            // 不同父节点处理
            return false
          }
    },
    //更新节点位置
    sort(draggingNode,dropNode,type,event) {
          draggingNode = draggingNode.data;
          dropNode = dropNode.data;
          // console.log("draggingNode",draggingNode)
          // console.log("dropNode",dropNode)
          // console.log("type",type)
          //拖拽至节点上方
          if (type === 'after') {
            //当前结点已经为最低
            if (draggingNode.sort === 1) {
              return ;
            }
            let params = {
              id :draggingNode.id,
              sort : dropNode.sort - 1,
            };
            //sysOrgUpdate 为服务端接口
            sysOrgUpdate(params).then(res => {
              let _this = this;
              if (res.code === 200) {
                _this.$message({
                  type: "success",
                  message: "节点位置更新成功",
              });
              } else {
                _this.$message({
                  type: "error",
                  message: res.message,
                  });    
              }
            });
          }
          //拖拽至节点下方
          if (type === 'before') {
            //修改移动结点的sort为dropNode结点 sort+1
            let params = {
              id :draggingNode.id,
              sort : dropNode.sort + 1,
            };
            sysOrgUpdate(params).then(res => {
                let _this = this;
              if (res.code === 200) {
                _this.$message({
                  type: "success",
                  message: "节点位置更新成功",
              });
              } else {
                _this.$message({
                  type: "error",
                  message: res.message,
                  });    
              }
            });
          }
          
    },
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值