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

新建role没有配菜单的时候,initDataByBtnList

shiqian 4 жил өмнө
parent
commit
54d279f472

+ 24 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/RoleEnum.java

@@ -112,6 +112,30 @@ public enum RoleEnum {
             result.add(jsonObject);
         }
 
+        return result;
+    }
+
+   /**
+    * 功能描述: 新配的角色,点选菜单,判断菜单对应的表的menuRole
+    *
+    * @param btnList 点选菜单,判断菜单对应的表的menuRoleList
+    * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
+    */
+    public static List<Map<String, Object>> initDataByBtnList(List<String> btnList) {
+        List<String> roles = roles();
+        List<Map<String, Object>> result = new ArrayList<>(roles.size());
+        for (String role : roles) {
+            Map<String, Object> jsonObject = new HashMap<>(2);
+            jsonObject.put("name", role);
+            if (btnList.contains(role)) {
+                // 显示框框,但是不勾选
+                jsonObject.put("type", false);
+            } else {
+                jsonObject.put("type", "0");
+            }
+            result.add(jsonObject);
+        }
+
         return result;
     }
 }

+ 2 - 1
boman-api/boman-domain/src/main/java/com.boman.domain/dto/RoleMenuDto.java

@@ -29,11 +29,12 @@ public class RoleMenuDto {
     }
 
     /**
-     * 功能描述: 返回tableName
+     * 功能描述: 返回tableName, menu表中有sys_table_name
      *
      * @param perms perms
      * @return java.lang.String
      */
+    @Deprecated
     public static String getTableNameFromPerms(String perms) {
         // sys_user:A
         String[] split = perms.split(":");

+ 16 - 3
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysMenuServiceImpl.java

@@ -575,6 +575,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Override
     public Map<String, Object> listMenus(Long roleId, Long menuId) {
         SysMenu menu = selectMenuById(menuId);
+        requireNonNull(menu, "当前菜单不存在,id = " + menuId);
         List<SysMenu> allMenu = menuMapper.selectMenuList(new SysMenu());
         List<SysMenu> tempList = Lists.newArrayListWithCapacity(16);
         recursionList(allMenu, menu, tempList);
@@ -594,14 +595,15 @@ public class SysMenuServiceImpl implements ISysMenuService {
         // 找到当前menuId对应的所有的叶子结点
         List<SysMenu> leafNodes = allLeafNodeById(menuId);
         List<Long> menuIdList = map(leafNodes, SysMenu::getId);
+        List<String> allBtnList = RoleEnum.roles();
         List<SysRoleMenu> roleMenuList = roleMenuService.listByRoleIdMenuIdList(roleId, menuIdList);
         if (isEmpty(roleMenuList)) {
-            result.put("sysMenus", tempList);
+            initWhenRoleMenuIsEmpty(menuId, menu);
+            result.put("sysMenus", Collections.singletonList(menu));
             return result;
         }
 
         List<Long> roleMenuIdList = map(roleMenuList, SysRoleMenu::getMenuId);
-        List<String> allBtnList = RoleEnum.roles();
 
         for (SysMenu sysMenu : tempList) {
             List<Map<String, Object>> containsHead = RoleEnum.initData();
@@ -612,7 +614,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
 
             List<String> btnList = getBtnFromMenu(roleMenuIdList, childList);
 
-            String tableName = RoleMenuDto.getTableNameFromPerms(childList.get(0).getPerms());
+            String tableName = childList.get(0).getSysTableName();
             GenTable genTable = redisService.getCacheObject(RedisKey.TABLE_INFO + tableName);
             if (isEmpty(genTable)) {
                 continue;
@@ -643,6 +645,17 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return result;
     }
 
+    private void initWhenRoleMenuIsEmpty(Long menuId, SysMenu menu) {
+        String menuTableName = menu.getSysTableName();
+        GenTable menuGenTable = redisService.getCacheObject(RedisKey.TABLE_INFO + menuTableName);
+        if (isEmpty(menuGenTable)) {
+            requireNonNull(menuGenTable, "当前菜单对应的表不存在,menuId = " + menuId + ", tableName = " + menuTableName);
+        }
+
+        List<String> menuRoleList = ArrayUtils.split(menuGenTable.getMenuRole(), "");
+        menu.setContainsHead(RoleEnum.initDataByBtnList(menuRoleList));
+    }
+
     /**
      * 功能描述: roleMenuIdList包含childList中的id的全部取出来
      *