Эх сурвалжийг харах

菜单树不包含叶子节点

shiqian 4 жил өмнө
parent
commit
ce523224e7

+ 1 - 1
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysRoleController.java

@@ -41,7 +41,7 @@ public class SysRoleController extends BaseController
     @GetMapping("/list")
     @GetMapping("/list")
     public TableDataInfo list(SysRole role)
     public TableDataInfo list(SysRole role)
     {
     {
-        startPage();
+//        startPage();
         List<SysRole> list = roleService.selectRoleList(role);
         List<SysRole> list = roleService.selectRoleList(role);
         return getDataTable(list);
         return getDataTable(list);
     }
     }

+ 32 - 18
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysMenuServiceImpl.java

@@ -9,6 +9,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
+import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.system.api.domain.SysMenu;
 import com.boman.system.api.domain.SysMenu;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -189,29 +190,42 @@ public class SysMenuServiceImpl implements ISysMenuService
      * @return 树结构列表
      * @return 树结构列表
      */
      */
     @Override
     @Override
-    public List<SysMenu> buildMenuTree(List<SysMenu> menus)
-    {
-        List<SysMenu> returnList = new ArrayList<SysMenu>();
-        List<Long> tempList = new ArrayList<Long>();
-        for (SysMenu dept : menus)
-        {
-            tempList.add(dept.getId());
-        }
-        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
-        {
-            SysMenu menu = (SysMenu) iterator.next();
+    public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
+        List<SysMenu> returnList = new ArrayList<>();
+        List<Long> allMenuId = ObjectUtils.map(menus, SysMenu::getId);
+        for (SysMenu menu : menus) {
             // 如果是顶级节点, 遍历该父节点的所有子节点
             // 如果是顶级节点, 遍历该父节点的所有子节点
-            if (!tempList.contains(menu.getParentId()))
-            {
-                recursionFn(menus, menu);
+            if (!allMenuId.contains(menu.getParentId())) {
+                recursionNotAddLeafNode(menus, menu);
                 returnList.add(menu);
                 returnList.add(menu);
             }
             }
         }
         }
-        if (returnList.isEmpty())
-        {
-            returnList = menus;
+
+        return returnList.isEmpty() ? menus : returnList;
+    }
+
+    /**
+     * 功能描述: 递归调用,叶子节点不放到父类中
+     *
+     * @param list 所有的菜单
+     * @param menu 当前菜单
+     */
+    private void recursionNotAddLeafNode(List<SysMenu> list, SysMenu menu) {
+        // 叶子结点
+        int count = 0;
+        // 得到子节点列表
+        List<SysMenu> childList = getChildList(list, menu);
+        for (SysMenu tChild : childList) {
+            if (hasChild(list, tChild)) {
+                recursionFn(list, tChild);
+            } else {
+                // 为叶子节点
+                count++;
+            }
+        }
+        if (count != childList.size()) {
+            menu.setChildren(childList);
         }
         }
-        return returnList;
     }
     }
 
 
     /**
     /**