antd——a-tree组件拖拽节点功能——技能提升

news2024/11/17 3:31:09

之前写过一篇文章关于:

antd——使用a-tree组件实现 检索+自动展开+自定义增删改查功能——技能提升:http://t.csdn.cn/13qT7
在这里插入图片描述
现在有个需求:就是要实现节点的拖拽功能。

tree组件节点的拖拽功能实现

tree组件是有拖拽功能的,通过下面几种拖拽方式来进行汇总规律:

1.同级别拖拽——最终位置是10,目标节点位置是11,小于代表在上面

在这里插入图片描述

2.子级拖拽——最终位置是7,目标节点位置是7,表示是成为目标节点的子级

在这里插入图片描述

3.跨级别拖拽——最终位置是-1,目标节点位置是0,小于代表在上面

在这里插入图片描述
三张图中的位置0-7-0,是代表的是索引。

1.第一个:0代表是外层数组只有一项,索引是0
2.第二个:7代表是当前是索引为7的子级
3.第三个:0代表是索引为7的子级的第0项

代码如下:

html代码

<a-tree
  ref="treeNode"
  :showIcon="false"
  class="tree-list"
  draggable
  :treeData="treeData"
  :defaultExpandAll="true"
  :expandedKeys.sync="defaultExpandedKeys"
  tree-default-expand-all
  :replaceFields="replaceFields"
  @dragenter="onDragEnter"
  @drop="onDrop"
></a-tree>

js代码

onDragEnter(info) {
      // console.log('onDragEnter', info);
    },
    onDrop(info) {
      const dropKey = info.node.eventKey;
      const dragKey = info.dragNode.eventKey;
      console.log(
        '目标节点',
        info.node.pos,
        info.node.dataRef.title,
        info.dropPosition
      );
      console.log(
        '当前节点',
        info.dragNode.pos,
        info.dragNode.dataRef.title,
        info.dropPosition
      );
      //当前拖拽的节点key dragKey;
      const dropPos = info.node.pos.split('-');
      const dropPosition =
        info.dropPosition - Number(dropPos[dropPos.length - 1]);
      const loop = (data, key, callback) => {
        data.forEach((item, index, arr) => {
          if (item.key === key) {
            return callback(item, index, arr);
          }
          if (item.children) {
            return loop(item.children, key, callback);
          }
        });
      };
      const data = [...this.treeData];
      let dragObj;
      loop(data, dragKey, (item, index, arr) => {
        arr.splice(index, 1);
        dragObj = item;
      });
      if (!info.dropToGap) {
        // Drop on the content
        loop(data, dropKey, (item) => {
          item.children = item.children || [];
          // where to insert 示例添加到尾部,可以是随意位置
          item.children.push(dragObj);
        });
      } else if (
        (info.node.children || []).length > 0 && // Has children
        info.node.expanded && // Is expanded
        dropPosition === 1 // On the bottom gap
      ) {
        loop(data, dropKey, (item) => {
          item.children = item.children || [];
          // where to insert 示例添加到尾部,可以是随意位置
          item.children.unshift(dragObj);
        });
      } else {
        let ar;
        let i;
        loop(data, dropKey, (item, index, arr) => {
          ar = arr;
          i = index;
        });
        if (dropPosition === -1) {
          ar.splice(i, 0, dragObj);
        } else {
          ar.splice(i + 1, 0, dragObj);
        }
      }
      //在此处可以调取接口,接口成功后,再给treeData赋值,否则就不要赋值。
      this.treeData = data;
    },

完成!!!多多积累,多多收获!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flink-conf.yaml的参数

参数 ⚫jobmanager.memory.process.size&#xff1a;对 JobManager 进程可使用到的全部内存进行配置&#xff0c; 包括 JVM元空间和其他开销&#xff0c;默认为 1600M&#xff0c;可以根据集群规模进行适当调整。⚫ taskmanager.memory.process.size&#xff1a;对 TaskManage…

线性代数中基向量变换参照原理

经常需要用到&#xff0c;又记不住&#xff0c;所以这里记录下来方便以后翻阅。 很重要。 截图出自书为&#xff1a;

Spring Boot 中的 MyBatis 是什么,如何使用

Spring Boot 中的 MyBatis 是什么&#xff0c;如何使用 简介 MyBatis 是一种流行的 Java 持久化框架&#xff0c;可以将 SQL 查询映射到对象上&#xff0c;并提供了简单易用的 API 来执行 CRUD 操作。Spring Boot 可以与 MyBatis 集成&#xff0c;提供了简化配置和自动化配置…

基于单片机的智能台灯 灯光控制系统人体感应楼梯灯系统的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;主通过光敏采集当前光线强度&#xff1b;通过PMW灯光调节电路&#xff0c;我们可以根据不同的光线亮度&#xff0c;进行3挡调节&#xff1b;通过人体红外检测当前是否有人&#xff1b;通过不同光线情况下使用PWM脉冲电路进行调节…

Apifox 已上架至 TitanIDE

Apifox 目前已上架至 TitanIDE 模板&#xff0c;为 TitanIDE 用户提供快速使用接口调试工具的入口。 可以通过 TitanIDE 的「创建项目」快速新建 Apifox 模版&#xff0c;开箱即用。TitanIDE 的模板包括开发者常用的 IDE 及周边开发工具&#xff0c;如数据建模用的 PDmaner、数…

【STM32】GPIO

一、GPIO简介 1. 基本介绍 GPIO是通用输入输出端口的简称&#xff0c;STM32芯片通过GPIO与外设连接&#xff0c;从而实现与外设的数据收发。 最基本的输出功能是由STM32控制引脚输出高、低电平&#xff0c;实现开关控制。如把GPIO引脚接入到LED灯控制LED亮灭&#xff0c;或者…

中小企业的必然选择——构建高效、安全的企业网络

在当今技术驱动的商业环境中&#xff0c;可靠且高效的企业网络对中小型企业的成功是至关重要的。随着对数据密集型应用的需求不断增加&#xff0c;无线网络技术随之迅速发展&#xff0c;企业必须构建一个更快、更安全的网络以保证业务安全稳定开展。本文重点讲解中小型企业网络…

常用stream方法记录

目录 过滤filter()获取最大最小值根据条件统计数量list转mapkey值唯一key值不唯一 distinct去重groupingBy分组map遍历取list中某元素组成新的listlist转数组String基本数据类型数组转换 数组转listArrays.asList(&#xff09;Collections.addAll基本数据类型数组转list 源码和…

阿里云绑定域名

在阿里云安全组与宝塔安全放开8081端口 server {listen 8081;server_name www.whxyyds.top;charset utf-8;location / {root /home/ruoyi/projects/ruoyi-ui;try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/ {proxy_set_header …

途乐证券|A股自动驾驶概念“夏日躁动”

进入7月以后&#xff0c;A股智能汽车产业链——尤其是自动驾驶板块&#xff0c;开始逐渐收复去年失地。 香港途乐证券有限公司&#xff08;191883.com&#xff09;是香港最优秀的股票投资平台&#xff0c;平台致力于为投资者提供专业、安全、诚信的股票策略服务&#xff0c;通过…

微信内置h5浏览器 getBrandWCPayRequest支付

目录 getBrandWCPayRequest支付 什么是getBrandWCPayRequest支付&#xff1f; 如何使用getBrandWCPayRequest支付&#xff1f; getBrandWCPayRequest支付的特点和优势 结论 WeixinJSBridge&#xff1a;微信浏览器的JavaScript桥接工具 WeixinJSBridge的作用 WeixinJSBri…

【震惊】Top1清华考研985考研专业课惨遭团灭!

原谅我今天用了个“UC的标题”&#xff0c;只是他真的太令我震惊了&#xff01;&#xff08;请本次事件受影响者&#xff0c;务必看到最后&#xff0c;我会给出我的建议&#xff09; 事情的起因这样的&#xff1a;这周二有同学发我一条通知&#xff0c;清华大学通信考研考试科…

关于DBC文件的创建增加几点补充

上一节说了&#xff1a;DBC文件的简介与创建 这一节补充几点&#xff1a;关于DBC文件的创建增加几点补充 关于节点地址的定义和修改 有些朋友发现新建某个节点的时候&#xff0c;address栏的内容是灰色的&#xff0c;无法进行定义和修改 这个数值的更改不是在这里进行设置的…

18.ADC模数转换

1.STM32ADC简介&#xff1a; ADC(Analog to Digital Converter)即模数转换器&#xff0c;它可以将模拟信号转换成数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。 STM32 ADC主要特性&#xff1a; 12位分辨率&#xff1b;转换结束、注入…

Vue基础 -- 生命周期 数据共享

1 组件的生命周期 1.1 生命周期 & 生命周期函数 生命周期&#xff08;Life Cycle&#xff09;是指一个组件从创建 -> 运行 -> 销毁的整个阶段&#xff0c;强调的是一个时间段。 生命周期函数&#xff1a;是由 vue 框架提供的内置函数&#xff0c;会伴随着组件的生命…

UNI-APP_vmin横屏适配问题

vmax和vmin vmax 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax vmin 相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin当竖屏布局时750rpx是竖屏布局屏幕的宽度 vmin不管横竖屏的情况下&#xff0c;100vmin都是手机屏幕…

Web漏洞-敏感信息泄露-Git操作

实验目的 熟悉常见git常见操作&#xff0c;如上传、回归、修改仓库等操作。 实验环境 git操作服务器&#xff0c;1台 web安全操作机&#xff0c;1台&#xff08;可选&#xff09; 实验内容 1.安装Git&#xff1a;sudo apt-get install git 2.安装Apache&#xff0c;为了模…

机器学习技术(二)——Python科学运算模块(Numpy、Pandas)

机器学习技术&#xff08;二&#xff09;——Python科学运算模块&#xff08;Numpy、Pandas&#xff09; 文章目录 机器学习技术&#xff08;二&#xff09;——Python科学运算模块&#xff08;Numpy、Pandas&#xff09;一、Numpy1、介绍、安装与导入2、Numpy常用操作 二、Pan…

Java面向对象程序开发——多线程开发

文章目录 前言多线程多线程的实现①、继承Thread类Thread常用方法Thread的构造器优缺点 ②、实现Runnable接口优缺点 ③、实现Callable接口Runnable接口和继承Thread类的区别 线程同步机制volatile同步锁 同步方法lock锁 线程池 前言 线程(thread)是一个程序内部的一条执行路径…

shared_ptr产生内存泄漏的场景

使用 shared_ptr 可以帮助管理动态分配的内存&#xff0c;它使用引用计数的方式来跟踪共享对象的引用数量&#xff0c;当引用计数为零时&#xff0c;会自动释放内存。然而&#xff0c;shared_ptr 也存在一些潜在的内存泄漏的场景&#xff0c;下面是一些常见的情况&#xff1a; …