ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ElementUI el-tree实现节点拖拽功能

2021-10-26 16:02:51  阅读:234  来源: 互联网

标签:el ElementUI tree 节点 inner element dropNode data 拖拽


el-tree代码,主要加入了draggable属性和node-drophandleDragEnd事件

<el-tree
            node-key="id"
            default-expand-all
            :data="collectionList"
            :props="defaultProps"
            :expand-on-click-node="false"
            :filter-node-method="filterNode"
            highlight-current
            ref="tree"
            style="margin-top: 10px"
            @node-drag-end="handleDragEnd"
            @node-drop="handleDrop"
            draggable
            :allow-drop="allowDrop">

handleDrop事件代码

// 拖拽事件 参数依次为:被拖拽节点对应的 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为0
      nodeData.forEach(element => {
        element.pid = dropNode.level == 1 ? 0 : data.id;
      });
      nodeData.forEach((element, i) => {
        var collection = {
          collectionId: element.id,
          parentId: element.pid,
          sort: i+1
        };
        paramData.push(collection);
      });
    
      this.loading = true;
      updateCollection(JSON.stringify(paramData)).then(response => {
          this.msgSuccess("排序成功");
          this.loading = false;
          });
    },

后端接收前端传入的数组数据批量修改即可

标签:el,ElementUI,tree,节点,inner,element,dropNode,data,拖拽
来源: https://www.cnblogs.com/huturen/p/15466187.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有