网站建设公司介绍ppt重庆 机械有限公司 江北网站建设

news/2025/9/23 0:04:44/文章来源:
网站建设公司介绍ppt,重庆 机械有限公司 江北网站建设,沧州网站建设哪家好,搜索关键词排名推广目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端实现 2.1 判断是否能进行拖拽 2.2 收集受影响的节点#xff0c;提交给服务器 三、后端实现 四、总结 一、总述 这个拖拽功能对于这种树形的列表#xff0c;整体的搬迁是很方便的。但是其实现却并不是那么的简单。 …目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端实现 2.1 判断是否能进行拖拽 2.2 收集受影响的节点提交给服务器 三、后端实现 四、总结 一、总述 这个拖拽功能对于这种树形的列表整体的搬迁是很方便的。但是其实现却并不是那么的简单。 1.1 前端思路 花样主要体现在前端上面前端有两个大的部分一个是使用elementUI提供给我们的api判断是否能够进行拖拽因为并不是能够随意的拖拽的因为这个树形列表是三级分类受到了三级的限制。另外一个部分就是拖拽之后会有一些节点的信息将发生改变需要进行收集然后统一发到后端服务器进行修改 1.2 后端思路 而后端的话没什么就一个修改接口就行了。 二、前端实现 当然最开始肯定得开启树形控件的可拖拽功能 默认是未开启的需要我们手动开启 2.1 判断是否能进行拖拽 完成这个功能需要依靠elementUI提供给我们的api我下面简单的介绍一下这个api 然后在树形控件的参数那里放上这个参数并给上一个方法 然后根据它提供给我们的这三个信息来进行判断最终决定是否能拖拽成功。 这个判断的核心逻辑是 1. 先计算出被拖拽节点的最大层数 计算方法是使用打擂台的方式计算出子节点的最大深度并递归的计算其又子节点的最大深度得到这个目标节点的子节点的最大深度但这个只是子节点的最大深度并不是以被拖拽节点为始发层的最大层数那么如何计算呢实际上就是求差现在求得是总的我们并不需要前面的那一截了因为等下我要换地方了前面的那一截就换了而被拖拽的那一部分是不变的那前面的那一部分又该怎样得到呢 其实就是当前拖拽节点的层级然后使用子节点的最大深度 - 当前拖拽节点的层数 1 就得到了当前被拖拽节点的最大层数。  1.1 使用打擂台的方式计算出子节点的最大深度 computerMaxLevel(node){var childrenNodeList node.childNodes;//console.log(childrenNodeList,childrenNodeList);if(childrenNodeList!null){for(let i 0;ichildrenNodeList.length;i){//console.log(1111);if(childrenNodeList[i].levelthis.maxLevel){this.maxLevel childrenNodeList[i].level;}this.computerMaxLevel(childrenNodeList[i]);}}} 2. 计算拖拽后总层数也就是目标结果 现在的话拖的一部分已经有了但是拖到的位置那里所占据的层数还没有考虑现在的工作就是加上新地方的层数。 现在的计算得按照不同情况进行计算因为有两种情况 2.1 与拖到的目标节点同层级互为兄弟 那么就是目标节点的父节点的层级  刚刚求出的被拖拽节点的最大层数 2.2 是拖到的目标节点的孩子 那么直接就是目标节点的层级 刚刚求出的被拖拽节点的最大层数 3. 直接判断 当拖拽后的总层数3时判断方法返回true拖拽成功 否则拖拽失败 allowDrop(draggingNode, dropNode, type) {this.maxLevel draggingNode.level;console.log(draggingNode, dropNode, type);this.computerMaxLevel(draggingNode);console.log(maxLevel,this.maxLevel);var deep this.maxLevel - draggingNode.level 1;console.log(deep,deep);if(type before|| type next){return (deep dropNode.parent.level)3;}else{return (deep dropNode.level)3;}} 2.2 收集受影响的节点提交给服务器 首先要明白有哪些节点会受到影响。 1. 前序的数据域中数据的定义 一、考虑影响了别人 其实就是影响了兄弟。 如果说被拖拽节点与目标节点经拖拽后互为兄弟关系的话那么就会影响到其他兄弟的排序顺序因为现在多加了一个节点势必这个新增节点之后的节点顺序都要向后推一位。这些兄弟就需要收集起来 当然如果被拖拽节点与目标节点经拖拽后互为父子关系的话那么就改变了目标节点的子节点的那些兄弟。 二、考虑影响了自己 被拖拽节点拖拽后到其他父节点上面去了因此被拖拽节点的父节点也发生了改变另外被拖拽节点的层级也将发生变化其被拖拽节点的子节点的父节点不会变还是被拖拽节点可是其子节点的层级肯定发生了改变其子节点的字节点的层级也发生了改变因此需要递归操作 总的来说标红的三处地方就是需要提交到服务器的节点但是并不是需要提供节点的完整信息而是提供需要修改的信息即可 1. 对于那些兄弟节点提供兄弟节点的 id和 排序值就可以了根据id主键进行修改 2. 对于那个被拖拽节点需要提供被拖拽节点的 id、父节点、还有最新的层级 3. 对于其被拖拽节点的字节点需要提供其节点的id 以及节点最新的层级即可 最后将这三部分的节点提交给服务器就行了。 思路我说了最后代码进一步的简洁我已经说的很明白了在截图中这里为什么和我刚刚说了有点不一样就是那个sort字段为什么任何时候都需要加上这个是因为其实数据库本来全是0的正是靠这个算法才赋上值当然这里也不全面只涉及到修改了的部分详细的代码参考如下 handleDrop(draggingNode, dropNode, dropType){//受影响的数组var nodes null;if(dropType before || dropType next){nodes dropNode.parent.childNodes;this.pCid dropNode.parent.data.catIdundefined?0:dropNode.parent.data.catId;}else{nodes dropNode.childNodes;this.pCid dropNode.data.catId;}console.log(nodes,nodes);for(let i0;inodes.length;i){if(nodes[i].data.catId draggingNode.data.catId){this.updateNodes.push({catId:nodes[i].data.catId,sort:i,parentCid:this.pCid,level:nodes[i].level})if(nodes[i].data.level ! nodes[i].level){//因为被拖拽的节点的层级发生了改变因此其子节点的层级也会跟着改变this.updateChirenLevel(nodes[i]);} }else{this.updateNodes.push({catId:nodes[i].data.catId,sort:i})}}console.log(updateNodes,this.updateNodes);},//修改子节点的levelupdateChirenLevel(node){if(node.childNodes!null node.childNodes.length0){for(let i0;inode.childNodes.length;i){this.updateNodes.push({catId:node.childNodes[i].data.catId,level:node.childNodes[i].level,sort:i});this.updateChirenLevel(node.childNodes[i]);}}}, 最终将需要更新的节点数组作为请求参数提交给后端在后端修改即可 三、后端实现 后端的话很简单就一个修改接口使用MP的方法根据主键进行批量修改。  /*** 批量修改商品分类信息*/ApiOperation(批量修改商品分类信息)Log(title 批量修改商品分类信息,businessType BusinessType.UPDATE)PutMapping(/batchUpdateCategory)public AjaxResult batchEdit(RequestBody ListCategory categoryList){return toAjax(categoryService.updateBatchById(categoryList));} 四、总结 其实总的来说只要想清楚了其实还是很简单的。 这里关键是前端的逻辑稍微有那么点复杂有写算法题的那味了但是仔细一想还是挺简单的。 主要是关系还有数量关系等比如说求被拖拽节点的最大层数需要用到数量计算表达式 其实就是一个减法用子节点的最大深度减去被拖拽节点的层数  1 即可求得其被拖拽节点的最大层数有了这个最大层数然后再配合目标那里的层数按照不同的条件进行相加最后总的层数不就出来了吗有了总层数当然是否能拖拽就好判断了。 另外还有就是搬过来之后会导致一些节点的信息发送改变此时就需要收集起来发给后端再后端进行修改这里关键是想明白到底哪些节点修改了需要收集哪些属性其实也是很简单的想清楚就好了。

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

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

相关文章

网站被攻击 是vps问题还是dz程序广州优化网站建设

首先,在 switch 开关添加一个 change 事件,并且通过作用域插槽的形式,将该行数据作为参数传入,目的是为了后续的修改。 在函数内我们将传递过来的参数作为我们请求的参数,通过 put 方式修改我们的后台数据 。

网站设计公司案例做电子商务网站多少钱

本文转自微信公众号:Datawhale(强烈推荐) 原创: AIUnion Datawhale 今天 【导读】 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献…

盗版小说网站怎么赚钱Wordpress 转发后查看

一、基本组件栈 在Flink整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富且友好的接口。从下图中可以看出整个Flink的架构体系基本上可以分为三层,由上往下依次是 …

pc端网站建设哪里有美德的网站建设

在C#中,垃圾回收(Garbage Collection)是一种自动管理内存的机制。它负责跟踪和释放不再使用的内存,以便程序可以有效地使用内存资源。 C#中的垃圾回收器是由.NET运行时(CLR)提供和管理的。它使用了一种叫做…

技术支持 嘉兴网站建设网站 免费空间

一、基础内容 在Python中,路径可以以不同的表现形式进行表示。以下是一些常用的路径表现形式: 1. 绝对路径:它是完整的路径,从根目录开始直到要操作的文件或文件夹。在Windows系统中,绝对路径以盘符开始,…

质量好网站建设价格wordpress数据库加速插件

大家都知道什么是实时操作系统,但是,大家熟知的实时操作系统,站在更广的角度来看,其实它就是一个实时内核。一、实时内核和实时操作系统一个实时内核是管理微处理器(MPU)、微控制器(MCU&#xf…

洛谷 P13973 [VKOSHP 2024] Nightmare Sum

先用单调栈预处理出 i 位置左右第一个小于 a[i] 的位置,然后计算出 tot 数组 (tot[i]: 所有以 a[i] 为最小值的子数组总数) 和 pos 数组去记录每个数的位置所在 (每个数互不相同)。构造离线查询,对于固定的 i,枚举所…

单调栈01

单调栈01代码问题 困惑什么样的问题会让你想到利用栈这个数据结构? 栈(尤其是单调栈)非常适合解决 “在数组中寻找元素的特定邻居(如下一个更大 / 更小元素、第一个满足条件的元素等)” 类问题。这类问题的核心是…

网站更换关键词怎么做好快速搭建网站软件

1.当想输入一个数字再输入一个字符串要多一个nextLine(); int a scan.nextInt(); String b scan.nextLine(); 在Java编程语言中,使用Scanner类进行输入时,需要注意nextInt()和nextLine()方法的使用。nextInt()用于读取下一个整数,而nextLi…

发布/订阅(Publish/Subscribe)与交换机(Exchange)

本章目标理解交换机(Exchange)在RabbitMQ中的核心作用。掌握发布/订阅模式(Publish/Subscribe)的实现。学习扇形交换机(Fanout Exchange)的使用。理解绑定(Binding)的概念。实现一个日志广播系统。一、理论部分…

线性结构之链表

离散存储[链表]:定义:n个结点的离散分配彼此通过指针相连每个结点只有一个前续结点每个结点只有一个后续结点首结点没有前续结点尾结点没有后续结点专业术语:首结点:第一个有效结点,存放第一个有效数据尾结点:最…

高职教育双高建设网站佛山建设网站公司哪家好

1、基础用法就不再赘述了,重要的属性配置: Disable Catalog Update on Startup:禁用时在初始化Addressables的时候自动更新远程的catalog(启用后可以通过代码 Addressables.CheckForCatalogUpdates()更新) Use…

营销型网站软件建立网站需要多少钱就蓷y湖南岚鸿推荐

目录 一、为什么要有动态内存分配​ 二、C/C中程序内存区域划分​ 三、malloc和free​ 2.1、malloc 2.2、free​ 四、calloc和realloc​ 3.1、calloc​ 3.2、realloc​ 3.3realloc在调整内存空间的是存在两种情况: 3.4realloc有malloc的功能 五、常见的动…

简单的购物网站设计大型免费网页游戏排行榜

SH文件介绍 介绍SH文件示例执行SH文件具体用法 介绍 SH文件通常指的是 Shell 脚本文件,文件后缀名为.sh,其中包含一系列要由操作系统的命令解释器执行的命令。 在 Unix 和类 Unix 操作系统中,通常使用 Bourne Shell(sh&#xff…

博客网站建设源码上海互联网推广找哪家

打卡记录 同积元组&#xff08;哈希表 排列组合&#xff09; 链接 思路&#xff1a;用哈希表将数组中出现的两不同数乘积依次记录&#xff0c;将出现两次以上的乘积组通过排列组合计算总情况个数。 class Solution { public:int tupleSameProduct(vector<int>& num…

分类信息网站如何优化wordpress会员通知插件

一、Array方法 方法参数返回值描述以下Api会修改原属组pushitem1, item2, ...数组新长度向数组的末尾添加一个或多个元素&#xff0c;并返回新的长度pop删除的元素删除数组的最后一个元素&#xff0c;并返回删除的元素unshiftitem1,item2, ...数组新长度向数组的开头添加一个或…

展示型网站一样做seo优化网站维护合同范本

原网址&#xff1a;http://pichcar.iteye.com/blog/676292 URL中的特殊字符 有些符号在URL中是不能直接传递的&#xff0c;如果要在URL中传递这些特殊符号&#xff0c;那么就要使用他们的编码了。编码的格式为&#xff1a;%加字符的ASCII码&#xff0c;即一个百分号%&#xff0…

网站建设和管理是教什么科目成都房地产政策

服务器数据恢复环境&#xff1a; 某单位一台DS5300存储&#xff0c;1个主机4个扩展柜&#xff0c;组建了2组RAID5&#xff08;一组27块硬盘&#xff0c;一组23块盘&#xff09;。27块盘的那组RAID5阵列存放Oracle数据库文件&#xff0c;存储系统一共分了11个卷。 服务器故障&a…

可以做手机网页的网站个人怎么进行网站建设

一、点查看自定义快捷键可以定义一些快速启动方式 然后用不习惯的快捷键也能在这里改 二、android studio 快捷键导出备份 导入方法&#xff1a; android studio &#xff0d;>file->import setting ->选择jar包即可 导出studio的设置方法&#xff1a; android …

AI 编程“效率幻觉”:为何你感觉快了,项目却慢了?

AI 编码工具普及,但为何开发者感觉很快,实际项目却变慢了?本文深入剖析 AI 编程“感知差距”背后的根源,探讨如何通过结构化输入,真正释放 AI 潜能。一、AI 编程的“速度与激情”背后 2025 年,如果你问一个开发者…