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即可。

相关推荐
柚鸥ASO优化1 小时前
安卓APP推广的“降本增效”密码:守好商店内,打好商店外
android·aso优化
llllliznc1 小时前
LLM 学习笔记 Day 5:Agent 核心组件——Planner、Memory 与 Reflection
笔记·学习
risc1234561 小时前
“解决了什么痛点”与“为什么有这个东西”的关系?
笔记
hj2862511 小时前
Docker 容器化技术标准化笔记
java·笔记·docker
hyhsandy18031 小时前
STM32F103 TIM学习笔记
笔记·stm32·学习
栈溢出了1 小时前
Redis 消息队列笔记:List 与 Pub/Sub
redis·笔记·list
我是一颗柠檬1 小时前
【Java项目技术亮点】EXPLAIN深度分析与慢查询治理
android·java·开发语言
Android-Flutter1 小时前
android compose shadow 阴影 使用
android·kotlin·compose
帅次2 小时前
Android 高级工程师面试:Java 多线程与并发 近1年高频追问 22 题
android·java·面试
2501_943782352 小时前
【共创季稿事节】摩斯电码转换器:编码表与双向转换的实现
android·华为·鸿蒙·鸿蒙系统