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

相关推荐
ouliten12 分钟前
cuda编程笔记(36)-- 应用Tensor Core加速矩阵乘法
笔记·cuda
孞㐑¥1 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Libraeking2 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
mango_mangojuice2 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
工程师老罗2 小时前
YOLOv1 核心知识点笔记
笔记·yolo
市场部需要一个软件开发岗位2 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
半壶清水4 小时前
[软考网规考点笔记]-软件开发、项目管理与知识产权核心知识与真题解析
网络·笔记·压力测试
JMchen1234 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
tq10864 小时前
先探索,后设计
笔记
hnult4 小时前
2026 在线培训考试系统选型指南:核心功能拆解与选型逻辑
人工智能·笔记·课程设计