vue elementui tree 任意级别拖拽功能代码


Posted in Javascript onAugust 31, 2020

我的是根据父级id做的一些判断

<el-tree
     draggable :allow-drop="allowDrop" @node-drop="sort"
     accordion style="font-size:14px;width:250px;"
     ref="tree" :data="catalogList" :props="defaultProps" :expand-on-click-node="false"
     node-key="id" :highlight-current="true" :load="loadNode"
     lazy :render-content="renderContent" @node-click="handleNodeClick"
     empty-text="暂无数据">
 
   allowDrop(draggingNode, dropNode, type){
   //注掉的是同级拖拽
   /* if (draggingNode.data.level === dropNode.data.level) {
    if (draggingNode.data.aboveId === dropNode.data.aboveId) {
     return type === 'prev' || type === 'next'
    }
   } else {
    // 不同级进行处理
    return false
   } */
   //任意级别拖拽
   if (draggingNode.data.aboveId === dropNode.data.aboveId) {
     return type === 'prev' || type === 'next'
   } else {
    return type === 'prev' || type === 'next' || type === 'inner'
   }
  },
  //拖拽完成之后要重新排序
  /* 
  * draggingNode:被拖拽节点对应的 Node
  * dropNode:结束拖拽时最后进入的节点
  * type: 被拖拽节点的放置位置(before、after、inner)
  * event
  */
  sort(draggingNode,dropNode,type,event) {
   console.log(draggingNode)
   console.log(dropNode)
   if (draggingNode.data.aboveId === dropNode.data.aboveId) {
    let obj = {
     aboveId:'',
     arr:[]
    }
    obj.aboveId = dropNode.data.aboveId
    for (let item of dropNode.parent.childNodes) {
     obj.arr.push(item.data.id)
    }
    console.log(obj)
    this.updateOrderMe(obj)
   } else {
    let obj = {
     aboveId:'',
     id:'',
     newAboveId:''
    }
    obj.aboveId = draggingNode.data.aboveId
    obj.id = draggingNode.data.id
    obj.newAboveId = dropNode.data.id
    this.randomDrag(obj)
   }
  },
  randomDrag(obj) {
   this.$http
    .post(url, obj).then(res =>{
	    if (!res.data.success) {
	     this.$message.warning(res.data.msg)
	    }
    })
  },
  updateOrderMe(obj) {
   this.$http
    .post(url, {
     aboveId:obj.aboveId,
     ids: obj.arr
    }).then(res =>{
	    if (!res.data.success) {
	     this.$message.warning(res.data.msg)
	    }
    })
  }

补充知识:element-ui tree 实现同级拖拽

我就废话不多说了,大家还是直接看代码吧~

<template>
 <div>
  <el-tree
   draggable
   :allow-drop="allowDrop"
   @node-drop="sort"
   ref="tree"
   :data="data2"
   :props="defaultProps"
   show-checkbox
   default-expand-all
   node-key="id"
   highlight-current
  ></el-tree>
 
  <div class="buttons">
   <el-button @click="getCheckedNodes">通过 node 获取</el-button>
   <el-button @click="getCheckedKeys">通过 key 获取</el-button>
   <el-button @click="setCheckedNodes">通过 node 设置</el-button>
   <el-button @click="setCheckedKeys">通过 key 设置</el-button>
   <el-button @click="resetChecked">清空</el-button>
  </div>
 </div>
</template>
 
<script>
// import draggable from "vuedraggable";
// import Sortable from "sortablejs";
export default {
 methods: {
  getCheckedNodes() {
   console.log(this.$refs.tree.getCheckedNodes());
  },
  getCheckedKeys() {
   console.log(this.$refs.tree.getCheckedKeys());
  },
  setCheckedNodes() {
   this.$refs.tree.setCheckedNodes([
    {
     id: 5,
     label: "二级 2-1"
    },
    {
     id: 9,
     label: "三级 1-1-1"
    }
   ]);
  },
  setCheckedKeys() {
   this.$refs.tree.setCheckedKeys([3]);
  },
  resetChecked() {
   this.$refs.tree.setCheckedKeys([]);
  }
 },
 mounted() {
  const el = document.querySelectorAll(".el-tree")[0];
  console.log(el);
 },
 data() {
  return {
   data2: [
    {
     id: 1,
     label: "一级 1",
     children: [
      {
       id: 4,
       label: "二级 1-1",
       prop: "4"
      }
     ]
    },
    {
     id: 2,
     label: "一级 2",
     children: [
      {
       id: 5,
       label: "二级 2-1",
       prop: "5"
      },
      {
       id: 6,
       label: "二级 2-2",
       prop: "6"
      }
     ]
    },
    {
     id: 3,
     label: "一级 3",
     children: [
      {
       id: 7,
       label: "二级 3-1",
       prop: "7"
      },
      {
       id: 8,
       label: "二级 3-2",
       prop: "9"
      }
     ]
    },
    {
     id: 9,
     label: "一级4"
    }
   ],
   defaultProps: {
    children: "children",
    label: "label"
   },
   allowDrop(draggingNode, dropNode, type) {
    if (draggingNode.level === dropNode.level) {
     if (draggingNode.parent.id === dropNode.parent.id) {
      // 向上拖拽 || 向下拖拽
      return type === "prev" || type === "next";
     }
    } else {
     // 不同级进行处理
     return false;
    }
   },
   sort(draggingNode, dropNode, type, event) {
    // console.log('排序')
    // console.log("<><><>>><><<><><><><><><><>")
    // 拖拽之后的重新组合的数组
    // console.log(dropNode.parent); //dropNode.parent.childNodes =[]
    let obj = {
     aboveId: "",
     arr: []
    };
    obj.aboveId = dropNode.data.aboveId;
    for (let item of dropNode.parent.childNodes) {
     obj.arr.push(item.data.id);
    }
   }
  };
 }
};
</script>

以上这篇vue elementui tree 任意级别拖拽功能代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
js 复制或插入Html的实现方法小结
May 19 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
Aug 28 Javascript
javascript 中的 delete及delete运算符
Nov 15 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
JavaScript解八皇后问题的方法总结
Jun 12 Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
Jun 18 Javascript
浅谈javascript事件环微任务和宏任务队列原理
Sep 12 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
Aug 31 #Javascript
JS遍历树层级关系实现原理解析
Aug 31 #Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
Aug 31 #Javascript
Vue循环中多个input绑定指定v-model实例
Aug 31 #Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 #Javascript
vue中v-model对select的绑定操作
Aug 31 #Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
Aug 31 #Javascript
You might like
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
Javascript学习笔记2 函数
2010/01/11 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
感恩母亲节活动总结
2015/02/10 职场文书
科技馆观后感
2015/06/08 职场文书
雷锋观后感
2015/06/10 职场文书
值班管理制度范本
2015/08/06 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
python百行代码实现汉服圈图片爬取
2021/11/23 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏