AntDesign-vue-Tree组件-拖动排序

2023-11-15

    <Tree
      ref="treeRef"
      :treeData="treeData"
      draggable // 开启拖动
      @drop="onDrop"  // 拖动完成的回调
    />
      const onDrop = (info: DropEvent) => {
        const dropKey = info.node.eventKey;
        const dragKey = info.dragNode.eventKey;
        const dragPos = info.dragNode.pos.split('-');
        const dropPos = info.node.pos.split('-');
        const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);
        // console.log('dropKey:', dropKey);
        // console.log('dragKey:', dragKey);
        // console.log('info:', info);
        // console.log('dragPos:', dragPos);
        // console.log('dropPos:', dropPos);
        // console.log('dropPosition:', dropPosition);

        // 层级
        const dragLevel = dragPos.length - 1;
        const dropLevel = dropPos.length - 1;
        const data = [...treeData.value];
        // 找到拖动的数组对象
        let dragObj: TreeDataItem = {};
        findInWhole(data, 'key', dragKey, (item: TreeDataItem, index: number, arr: TreeDataItem[]) => {
          arr.splice(index, 1);
          dragObj = item;
        });

        let ar: TreeDataItem[] = [];
        let i = 0;
        let Id = '';
        // 找到拖动的位置
        findInWhole(data, 'key', dropKey, (_: TreeDataItem, index: number, arr: TreeDataItem[], parentId) => {
          ar = arr;
          i = index;
          Id = parentId;
        });

        if (!info.dropToGap) {
          // Drop on the content
          findInWhole(data, 'key', dropKey, (item: TreeDataItem) => {
            item.children = item.children || [];
            // where to insert 添加到尾部
            item.children.push(dragObj);
          });
        } else {
          if (dropPosition === -1) {
            ar.splice(i, 0, dragObj);
          } else {
            ar.splice(i + 1, 0, dragObj);
          }
        }
        console.log(ar, Id, '------------');

        treeData.value = cloneDeep(data); // 赋值处理好的数据,更新树数据
      };
// 递归处理树数据,返回找的拖动节点,和拖动的兄弟节点数组,和拖动的父亲节点的id(可根据需求自己定义)
function findInWhole(list: any[], key = 'name', path: string, callback: any, parentId?: string) {
  list.forEach((item, index, arr) => {
    if (item[key] === path) {
      return callback(item, index, arr, parentId);
    }
    if (item.children) {
      return findInWhole(item.children, key, path, callback, item.id??'');
    }
  });
}

上述代码就是 AntDesign-vue-Tree组件-拖动排序的代码,当然这个排序完成的结构是需要传递给后端的,具体的形式,可以自行讨论。在代码查找树节点的时候使用了递归查找,所以处理数据量不宜过大,数据量大的需要用户自行判断改变处理算法。核心思想就是把处理好的数据重新赋值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AntDesign-vue-Tree组件-拖动排序 的相关文章

  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • CSS 内边框?

    我纯粹用 CSS 创建了左侧的按钮 它是一个div 中的一个div 然而 右侧的三个按钮是background属性于img标签 我这样做是为了按照以下说明模拟翻转效果here http kyleschaeffer com best prac
  • JS文件中的System.register是什么意思?

    在 Angular 2 中使用指令时 JS 文件中的 System register 是什么意思 我认为这个问题并不特定于 Angular2 中的指令 它是关于 ES6 TypeScript 和其他使用 SystemJS 的现代编译器的一般
  • 有没有办法在 React 中自动播放音频而不使用 onClick 事件?

    我在尝试在 componentDidMount 中播放音频时收到此错误 未捕获 承诺中 DOMException play 失败 因为用户没有先与文档交互 componentDidMount document getElementById
  • setTimeout范围问题

    我在控制玩家重生的函数内部定义了一个 setTimeout 我正在创建一个游戏 var player death function this alive false Console log death var timer3 setTimeo
  • Angular UI-Router:多个 URL 到单一状态

    我已经开始使用 Angular 的 ui router 并且我正在尝试弄清楚如何让多个 URL 引用单个状态 例如 orgs 12354 overview retyrns the same pages as org overview 我的
  • 如何将本地文本文件上传到文本区域(网页内)

    我是一名新手程序员 需要一些帮助来弄清楚如何将本地文本文件上传到我正在构建的网站内的文本区域 我非常精通 HTML CSS 对 Javascript JQuery 有相当的了解 而且我刚刚学习 PHP 您能提供的任何帮助我将不胜感激 我有一
  • 什么可能导致 Firefox 中出现此 HTML/CSS 渲染问题?

    款式 h2 color 71D0FF font size 11px font weight bold margin 0px 0px 5px 0px a box color FFFFFF important cursor pointer di
  • 对使用“new”创建的数组上“map”的行为感到困惑[重复]

    这个问题在这里已经有答案了 我对结果感到困惑mapping 使用创建的数组new function returnsFourteen return 14 var a new Array 4 gt undefined x 4 in Chrome
  • jquery 中可点击 div 中的按钮

    我有整个 div 您可以单击它来切换该 div 的主要部分 问题是我在该 div 中也有可点击的按钮 当我点击它时 它会执行它应该做的事情 但同时也会切换整个 div 我怎样才能禁用它 Use event stopPropagation 单
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • IE localStorage 事件失火

    在 Internet Explorer 9 和 10 中 localStorage 实现意外地触发事件 这里有很棒的线索 Chrome 的 localStorage 实现存在错误 https stackoverflow com questi
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • JQuery $.ajax() 在 java servlet 中发布数据

    我想将数据发送到 java servlet 进行处理 数据将具有可变长度并采用键 值对 A1984 1 A9873 5 A1674 2 A8724 1 A3574 3 A1165 5 数据不需要这样格式化 这就是我现在的方式 var sav
  • 在 Chrome 开发者工具中禁用调试器语句

    我正在尝试对恶意 JavaScript 进行逆向工程 当我最初加载侧面时 会注入 JS 代码 其中包括 debugger 语句并将断点注入我的 chrome 开发人员控制台 通过stackoverflow阅读 禁用所有断点does not帮
  • 居中

    我的问题 http i56 tinypic com ff3jmo png http i56 tinypic com ff3jmo png 项目符号点未对齐 我要做的只是 text align center ing ul 所在的类 我可以对齐
  • 检查浏览器空闲的替代方法

    我有一个简单的网络信息亭 在鼠标未使用 jQuery 移动 30 秒后显示用户操作提示 var i null body wrap mousemove function clearTimeout i overlay fadeOut i set
  • 为什么我的 D3 SVG 图上的轴不会更新?

    I have 简单的 D3 散点图 http www raxacoricofallapatorius com test scattertest html我在显示数据的几个不同属性之间切换 但是虽然我可以更改数据点 并按照我想要的方式进行转换
  • 如果 jquery 验证激活,如何在单选按钮中放置红色边框[重复]

    这个问题在这里已经有答案了 我的问题是 如果 jquery 验证像示例图片中那样激活 我无法使单选按钮具有红色边框 任何人都可以帮我解决这个问题吗 http i38 photobucket com albums e149 eloginko
  • VS Code 扩展 - 获取完整路径

    我正在为 VS Code 编写一个插件 我需要知道调用扩展的文件的路径 无论是从编辑器上下文菜单或资源管理器上下文菜单调用还是用户只需键入扩展命令 function activate context get full path of the

随机推荐

  • Windows7之天镜漏洞扫描工具安装

    01 天镜漏洞扫描工具安装 01 安装天镜 02 升级漏洞 03 重启win7 多次重复升级过程 1次可能没办法成功 04 成功之后查看版本
  • Java8 Stream Lambda sorted()之正序倒序

    下面代码以自然序排序一个list list stream sorted 自然序逆序元素 使用Comparator 提供的reverseOrder 方法 list stream sorted Comparator reverseOrder 使
  • 解决zipfile压缩的文件路径太深,直接调用即可

    import os import zipfile import shutil def zipDir dirpath outdir 把路径中最后一个文件夹的名字取出来作为雅苏报的名字 zip path dirpath split 1 prin
  • unix命令

    一 查看机器上是否还有java线程 ps ef grep java 二 查看和清理机器文件 1 查看机器磁盘总空间以及剩余空间大小 root localhost df h 2 查看当前目录使用的总空间大小 root localhost ho
  • 入职1024天,写于万般困顿之时

    最近攻关一个项目到杭州出差 预计还要十多天才能回去 每天在小黑屋里加班到很晚 外加大领导很凶 双重压力之下累的喘不上来气 猛然发现自己已经入职整整1024天了 照照镜子也没入职前那么意气风发了 今天还是太晚了 明天还要早起 留个档占个位置
  • Python---正则表达式

    专栏 python 个人主页 HaiFan 专栏简介 Python在学 希望能够得到各位的支持 正则表达式 前言 概念 作用和特点 使用场景 正则符号 re模块 re compile match search span findall gr
  • Python中pip安装与使用

    一 Pip的安装方法 1 在Windows中的安装方法 操作环境 Windows10 Python3 7 其实你在安装python的时候 pip就随同一起安装了 一般情况下 可以直接使用 如果不能使用 基本上就是没有添加环境变量而已 添加下
  • 性能监控诊断,cpu,I/O,内存,网络诊断

    1 内存 cpu 网络 磁盘 2 当系统出现问题时 我们需要从应用程序 操作系统 服务器设备 网络环节系统资源等多方面综合排查 定位分析问题 然后集中解决问题 3 响应时间 服务器响应时间 网络时间 4 总体来说 系统提供了比较多的有用信息
  • 【Mysql】日期、行变列(IF、CASE WHEN THEN)语句总结

    获取昨天的日期 日期相减函数 datediff select datediff curdate INTERVAL 1 DAY 删除Person表中重复的Email数据 只保留id最小的一条 delete p1 from Person p1
  • mock方法常用框架_Mock框架Mockito入门教程

    在开发中 我们经常会依赖同事或者第三方提供的接口 如果该接口无法正常工作 比如接口正在修复 或者网络异常等 那么便会对需要依赖该接口的开发造成很大影响 遇到这种情况 我们可能会想到模拟该接口以提供正常的返回值 用来继续当前的工作 使用Moc
  • Qt信号槽进阶及误区

    lambda写法 Qt 中信号槽lambda表达式优缺点 好处 代码更加紧凑 不用特意费力去定义一个常规的函数 坏处 一旦写的过长 臃肿 代码可读性会变差 C 中lambda表达式构成 capture parameters mutable
  • 数据模型及E-R模型

    数据模型的基本概念 模型就是对现实世界特征的模拟和抽象 数据模型是对现实世界数据特征的抽象 对于具体的模型人们并不陌生 如航模飞机 地图和建筑设计沙盘等都是具体的模型 最常用的数据模型分为概念数据模型和基本数据模型 1 概念数据模型 概念数
  • 不拼花哨,只拼实用:unittest指南,干货为王!

    Python为开发者提供了内置的单元测试框架 unittest 它是一种强大的工具 能够有效地编写和执行单元测试 unittest 提供了完整的测试结构 支持自动化测试的执行 能够对测试用例进行组织 并且提供了丰富的断言方法 最终 unit
  • 网络编程基础

    目录 一 网络的概念 1 认识网络 2 网络的发展 二 协议 1 网络问题的产生 2 什么是协议 3 网络协议 三 协议分层 1 协议分层的概念 2 OSI七层模型 3 TCP IP四层 五层 模型 1 物理层 2 数据链路层 网卡层 3
  • 宝塔面板获取默认账号密码

    bt default
  • 安装ssl证书后报错Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

    刚刚安装完ssl证书后 报错 org apache catalina LifecycleException Protocol handler start failed at org apache catalina connector Con
  • 物联网毕设 -- 智能热水器(GPRS+APP+OneNET)

    目录 前言 一 连线图 1 原理图 2 PCB效果 3 实物效果 4 功能概括 1 硬件端 2 APP端 3 云平台端 演示视频 二 底层代码使用方式 1 使用说明 2 下载程序 3 查看云平台 三 APP使用方式 1 下载APP 1 操作
  • 【XGBoost】第 5 章:XGBoost 揭幕

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 增益带宽积 压摆率

    带宽 它指的是电路可以保持稳定工作的频率范围 选高速运放能减少对贷款的影响 只要能够完美再现方波 就是高带宽电路 带宽与压摆率同时变化 高频下 增益就缩小了 说明增益是有带宽的 在一定频率内增益才稳定 一倍放大 与 10倍放大输出用1 10
  • AntDesign-vue-Tree组件-拖动排序