gulimall项目笔记:P54三级分类拖拽功能实现

gulimall项目笔记:P54三级分类拖拽功能实现

技术方案

采用ElementUI的Tree树形控件实现分类拖拽功能

功能规则

  • 层级限制:分类结构最多支持3级
  • 拖拽验证:通过ElementUI的allow-drop事件实现

核心参数

allow-drop事件包含三个关键参数:

  1. draggingNode - 拖拽中的节点
  2. dropNode - 目标放置节点
  3. type - 拖拽类型('prev'、'inner'、'next')

参数draggingNodedropNode包含两个重要属性:

  • childNodes - 子节点集合
  • level - 节点层级

实现逻辑

1.计算子树深度(countNodeLevel方法)

首先通过计算当前拖拽节点draggingNode的最大子树的level

js 复制代码
countNodeLevel(node) {
	if(node.childNodes != null && node.childNodes.length > 0){
		for(let i = 0; i< node.childNodes.length; i ++){
			if(node.childNodes[i].level > this.maxLevel){
				this.maxLevel = node.childNodes[i].level;
			}
			this.countNodeLevel(node.childNodes[i]);
		}	
	}
}

然后在计算出draggingNode的最大深度deep
deep = this.maxLevel -- draggingNode.level + 1

基于这些参数,三级目录结构可归纳为三种情况:

2.允许拖拽判断(allowDrop方法):

然后根据拖拽放置类型type(inner表示插入目标节点内,prev或next表示放置在目标节点前后)来判断是否允许拖拽。如果是inner类型,判断deep + dropNode.level <= 3;如果是before或after类型,判断deep + dropNode.parent.level <= 3。

js 复制代码
if (type == 'inner') {
	return deep + dropNode.level <= 3;
}else{
	return deep + dropNode.parent.level <= 3;
}

扩展

如果层级限制的分类结构最多支持n级,我们只需要把<= 3改成<= n即可。

相关推荐
_dindong12 分钟前
牛客101:链表
数据结构·c++·笔记·学习·算法·链表
JJJJ_iii14 分钟前
【机器学习06】神经网络的实现、训练与向量化
人工智能·笔记·深度学习·神经网络·学习·机器学习·线性回归
sakoba20 分钟前
MySQL的json处理相关方法
android·学习·mysql·json
神仙别闹22 分钟前
Android 端 2D 横屏动作冒险类闯关游戏
android·游戏
坏小虎27 分钟前
Android App Startup 库使用说明文档,初始化不再用Application了...
android
瑞士卷@37 分钟前
spring从入门到精通(spring学习笔记,持续更新中)
笔记·学习·spring
我先去打把游戏先43 分钟前
ESP32学习笔记(基于IDF):SmartConfig一键配网
笔记·嵌入式硬件·mcu·物联网·学习·esp32·硬件工程
摇滚侠5 小时前
Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
spring boot·笔记·后端
LXS_3576 小时前
Day 05 C++ 入门 之 指针
开发语言·c++·笔记·学习方法·改行学it
lichong9518 小时前
Android studio 修改包名
android·java·前端·ide·android studio·大前端·大前端++