From d433d0660d8be2eba59cc9a8d7147949e53369ee Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Mon, 18 Aug 2025 14:30:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(portal):=20=E6=9E=84=E5=BB=BA=E5=AE=98?= =?UTF-8?q?=E7=BD=91=E8=8F=9C=E5=8D=95=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 HwWebMenu 模型中添加 children 属性,用于存储子菜单 - 实现 HwWebMenuServiceImpl 中的 buildWebMenuTree 方法,用于构建菜单树 - 添加 recursionFn、getChildList 和 hasChild 等辅助方法,用于递归构建菜单树 --- .../com/ruoyi/portal/domain/HwWebMenu.java | 12 ++++ .../service/impl/HwWebMenuServiceImpl.java | 62 +++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/domain/HwWebMenu.java b/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/domain/HwWebMenu.java index 7c7dec7..b89425e 100644 --- a/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/domain/HwWebMenu.java +++ b/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/domain/HwWebMenu.java @@ -5,6 +5,8 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.List; + /** * haiwei官网菜单对象 hw_web_menu * @@ -42,6 +44,8 @@ public class HwWebMenu extends BaseEntity @Excel(name = "图片地址") private String webMenuPic; + private List children; + public void setWebMenuId(Long webMenuId) { this.webMenuId = webMenuId; @@ -106,6 +110,14 @@ public class HwWebMenu extends BaseEntity return webMenuPic; } + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/service/impl/HwWebMenuServiceImpl.java b/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/service/impl/HwWebMenuServiceImpl.java index ac393a7..c0fbdeb 100644 --- a/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/service/impl/HwWebMenuServiceImpl.java +++ b/ruoyi-modules/hw-portal/src/main/java/com/ruoyi/portal/service/impl/HwWebMenuServiceImpl.java @@ -1,11 +1,15 @@ package com.ruoyi.portal.service.impl; import java.util.List; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.portal.mapper.HwWebMenuMapper; import com.ruoyi.portal.domain.HwWebMenu; import com.ruoyi.portal.service.IHwWebMenuService; +import com.ruoyi.common.core.utils.StringUtils; /** * haiwei官网菜单Service业务层处理 @@ -90,4 +94,62 @@ public class HwWebMenuServiceImpl implements IHwWebMenuService { return hwWebMenuMapper.deleteHwWebMenuByWebMenuId(webMenuId); } + + /** + * 构建前端所需要树结构(根据传入的平铺菜单列表构造树) + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + public List buildWebMenuTree(List menus) { + List returnList = new ArrayList<>(); + List tempList = menus.stream().map(HwWebMenu::getWebMenuId).collect(Collectors.toList()); + for (HwWebMenu menu : menus) { + // 如果是顶级节点(parent为null、0或者不在当前列表中), 遍历该父节点的所有子节点 + if (menu.getParent() == null || menu.getParent() == 0L || !tempList.contains(menu.getParent())) { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) { + returnList = menus; + } + return returnList; + } + + /** + * 递归设置子节点 + */ + private void recursionFn(List list, HwWebMenu t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (HwWebMenu tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, HwWebMenu t) { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) { + HwWebMenu n = it.next(); + if (StringUtils.isNotNull(n.getParent()) && n.getParent().longValue() == t.getWebMenuId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, HwWebMenu t) { + return !getChildList(list, t).isEmpty(); + } }