Procházet zdrojové kódy

更新 MenuPageController 和 RolePageController

reghao před 6 měsíci
rodič
revize
58e7f312e1

+ 0 - 93
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/MenuController.java

@@ -1,93 +0,0 @@
-package cn.reghao.devops.mgr.admin.controller;
-
-import cn.reghao.devops.mgr.admin.model.vo.MenuTree;
-import cn.reghao.devops.mgr.admin.service.MenuService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.devops.mgr.admin.model.dto.MenuDto;
-import cn.reghao.devops.mgr.admin.model.po.Menu;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "资源接口")
-@RequestMapping("/api/rbac/menu")
-@RestController
-public class MenuController {
-    private final MenuService menuService;
-
-    public MenuController(MenuService menuService) {
-        this.menuService = menuService;
-    }
-
-    @ApiOperation(value = "添加资源", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addMenu(@Validated Menu menu) {
-        Result result = menuService.addMenu(menu);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "修改资源", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/edit", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String modifyMenu(@Validated MenuDto menuDto) {
-        Result result = menuService.updateMenu(menuDto);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "修改资源状态", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/status/{enabled}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String menuStatus(@PathVariable("enabled") boolean enabled, @RequestParam("ids") List<Integer> ids) {
-        menuService.updateMenusStatus(enabled, ids);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除资源", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteMenu(@PathVariable("id") Integer menuId) {
-        /*Result result = menuService.deleteMenu(menuId);
-        return WebResult.result(result);*/
-        return WebResult.failWithMsg("接口未实现");
-    }
-
-    @ApiOperation(value = "获取指定状态的菜单", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping(value = "/ztree/{enabled}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String list(@PathVariable(value = "enabled") Boolean enabled) {
-        List<MenuTree> list = menuService.getMenusByStatus(enabled);
-        return WebResult.success(list);
-    }
-
-    @ApiOperation(value = "返回所有 dir menu", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping(value = "/ztree/parent", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getDirMenus() {
-        List<MenuTree> list = menuService.getDirMenus();
-        return WebResult.success(list);
-    }
-
-    @ApiOperation(value = "对同一 pid 组内的资源进行排序", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping(value = "/sorted/{pid}/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String sortList(@PathVariable(value = "pid") int pid,
-                           @PathVariable(value = "id", required = false) Menu menu) {
-        /*Map<Integer, String> map = menuService.getSortedChildGroupByPid(pid);
-        // 排除当前 menu
-        if (menu != null) {
-            map.remove(menu.getPos());
-        }*/
-        return WebResult.failWithMsg("接口未实现");
-    }
-}

+ 0 - 80
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/RoleController.java

@@ -1,80 +0,0 @@
-package cn.reghao.devops.mgr.admin.controller;
-
-import cn.reghao.devops.mgr.admin.model.dto.RoleDto;
-import cn.reghao.devops.mgr.admin.model.po.Menu;
-import cn.reghao.devops.mgr.admin.model.po.Role;
-import cn.reghao.devops.mgr.admin.model.vo.MenuTree;
-import cn.reghao.devops.mgr.admin.service.MenuService;
-import cn.reghao.devops.mgr.admin.service.RoleService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "角色接口")
-@RequestMapping("/api/rbac/role")
-@RestController
-public class RoleController {
-    private final RoleService roleService;
-    private final MenuService menuService;
-
-    public RoleController(RoleService roleService, MenuService menuService) {
-        this.roleService = roleService;
-        this.menuService = menuService;
-    }
-
-    @ApiOperation(value = "添加或修改角色", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addOrModifyRole(@Validated RoleDto roleDto) {
-        roleService.addOrUpdate(roleDto);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除角色", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @DeleteMapping(value = "/{roleId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteRole(@PathVariable("roleId") Integer roleId) {
-        Result result = roleService.deleteRole(roleId);
-        return WebResult.result(result);
-    }
-
-    /**
-     * spring data jpa 会自动根据 id 参数查询 Role 实例
-     *
-     * @param
-     * @return
-     * @date 2024-07-30 16:08:42
-     */
-    @ApiOperation(value = "获取角色可访问的资源", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping(value = "/menus/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getRoleMenus(@PathVariable("id") Role role) {
-        List<MenuTree> allMenus = menuService.getMenusByRole(role);
-        return WebResult.success(allMenus);
-    }
-
-    @ApiOperation(value = "设置角色可访问的资源", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/menus", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String setRoleMenus(@RequestParam(value = "id") Integer roleId,
-                               @RequestParam(value = "menuId", required = false) Set<Menu> menus) {
-        if (menus == null) {
-            menus = Collections.emptySet();
-        }
-        roleService.setRoleMenus(roleId, menus);
-        return WebResult.success();
-    }
-}

+ 82 - 0
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/MenuPageController.java

@@ -1,12 +1,19 @@
 package cn.reghao.devops.mgr.admin.controller.page;
 
+import cn.reghao.devops.mgr.admin.model.dto.MenuDto;
 import cn.reghao.devops.mgr.admin.model.po.Menu;
+import cn.reghao.devops.mgr.admin.model.vo.MenuTree;
 import cn.reghao.devops.mgr.admin.model.vo.RoleVO;
+import cn.reghao.devops.mgr.admin.service.MenuService;
+import cn.reghao.jutil.jdk.result.Result;
+import cn.reghao.jutil.web.WebResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
@@ -20,6 +27,12 @@ import java.util.stream.Collectors;
 @RequestMapping("/rbac/menu")
 @Controller
 public class MenuPageController {
+    private final MenuService menuService;
+
+    public MenuPageController(MenuService menuService) {
+        this.menuService = menuService;
+    }
+
     @ApiOperation(value = "资源列表页面", notes = "N")
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @GetMapping
@@ -56,4 +69,73 @@ public class MenuPageController {
         model.addAttribute("list", list);
         return "/admin/menu/roles";
     }
+
+    @ApiOperation(value = "添加资源", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String addMenu(@Validated Menu menu) {
+        Result result = menuService.addMenu(menu);
+        return WebResult.result(result);
+    }
+
+    @ApiOperation(value = "修改资源", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(value = "/edit", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String modifyMenu(@Validated MenuDto menuDto) {
+        Result result = menuService.updateMenu(menuDto);
+        return WebResult.result(result);
+    }
+
+    @ApiOperation(value = "修改资源状态", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(value = "/status/{enabled}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String menuStatus(@PathVariable("enabled") boolean enabled, @RequestParam("ids") List<Integer> ids) {
+        menuService.updateMenusStatus(enabled, ids);
+        return WebResult.success();
+    }
+
+    @ApiOperation(value = "删除资源", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String deleteMenu(@PathVariable("id") Integer menuId) {
+        /*Result result = menuService.deleteMenu(menuId);
+        return WebResult.result(result);*/
+        return WebResult.failWithMsg("接口未实现");
+    }
+
+    @ApiOperation(value = "获取指定状态的菜单", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping(value = "/ztree/{enabled}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String list(@PathVariable(value = "enabled") Boolean enabled) {
+        List<MenuTree> list = menuService.getMenusByStatus(enabled);
+        return WebResult.success(list);
+    }
+
+    @ApiOperation(value = "返回所有 dir menu", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping(value = "/ztree/parent", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String getDirMenus() {
+        List<MenuTree> list = menuService.getDirMenus();
+        return WebResult.success(list);
+    }
+
+    @ApiOperation(value = "对同一 pid 组内的资源进行排序", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping(value = "/sorted/{pid}/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String sortList(@PathVariable(value = "pid") int pid,
+                           @PathVariable(value = "id", required = false) Menu menu) {
+        /*Map<Integer, String> map = menuService.getSortedChildGroupByPid(pid);
+        // 排除当前 menu
+        if (menu != null) {
+            map.remove(menu.getPos());
+        }*/
+        return WebResult.failWithMsg("接口未实现");
+    }
 }

+ 61 - 1
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/RolePageController.java

@@ -1,18 +1,29 @@
 package cn.reghao.devops.mgr.admin.controller.page;
 
+import cn.reghao.devops.mgr.admin.model.dto.RoleDto;
+import cn.reghao.devops.mgr.admin.model.po.Menu;
+import cn.reghao.devops.mgr.admin.model.po.Role;
 import cn.reghao.devops.mgr.admin.model.po.User;
+import cn.reghao.devops.mgr.admin.model.vo.MenuTree;
 import cn.reghao.devops.mgr.admin.model.vo.RoleVO;
+import cn.reghao.devops.mgr.admin.service.MenuService;
 import cn.reghao.devops.mgr.admin.service.RoleService;
+import cn.reghao.jutil.jdk.result.Result;
+import cn.reghao.jutil.web.WebResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author reghao
@@ -23,9 +34,11 @@ import java.util.List;
 @Controller
 public class RolePageController {
     private final RoleService roleService;
+    private final MenuService menuService;
 
-    public RolePageController(RoleService roleService) {
+    public RolePageController(RoleService roleService, MenuService menuService) {
         this.roleService = roleService;
+        this.menuService = menuService;
     }
 
     @ApiOperation(value = "角色列表页面", notes = "N")
@@ -86,4 +99,51 @@ public class RolePageController {
         model.addAttribute("list", list);
         return "/admin/role/users";
     }
+
+    @ApiOperation(value = "添加或修改角色", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String addOrModifyRole(@Validated RoleDto roleDto) {
+        roleService.addOrUpdate(roleDto);
+        return WebResult.success();
+    }
+
+    @ApiOperation(value = "删除角色", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @DeleteMapping(value = "/{roleId}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String deleteRole(@PathVariable("roleId") Integer roleId) {
+        Result result = roleService.deleteRole(roleId);
+        return WebResult.result(result);
+    }
+
+    /**
+     * spring data jpa 会自动根据 id 参数查询 Role 实例
+     *
+     * @param
+     * @return
+     * @date 2024-07-30 16:08:42
+     */
+    @ApiOperation(value = "获取角色可访问的资源", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping(value = "/menus/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String getRoleMenus(@PathVariable("id") Role role) {
+        List<MenuTree> allMenus = menuService.getMenusByRole(role);
+        return WebResult.success(allMenus);
+    }
+
+    @ApiOperation(value = "设置角色可访问的资源", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(value = "/menus", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String setRoleMenus(@RequestParam(value = "id") Integer roleId,
+                               @RequestParam(value = "menuId", required = false) Set<Menu> menus) {
+        if (menus == null) {
+            menus = Collections.emptySet();
+        }
+        roleService.setRoleMenus(roleId, menus);
+        return WebResult.success();
+    }
 }

+ 3 - 3
mgr/src/main/resources/templates/admin/menu/add.html

@@ -6,7 +6,7 @@
 </head>
 <body>
 <div class="layui-form timo-compile">
-    <form th:action="@{/api/rbac/menu}">
+    <form th:action="@{/rbac/menu}">
         <div class="layui-form-item">
             <label class="layui-form-label required">菜单类型</label>
             <div class="layui-input-inline">
@@ -19,7 +19,7 @@
             <label class="layui-form-label required">父级菜单</label>
             <div class="layui-input-inline">
                 <label>
-                    <input class="layui-input select-tree" th:attr="data-url=@{/api/rbac/menu/ztree/parent}"
+                    <input class="layui-input select-tree" th:attr="data-url=@{/rbac/menu/ztree/parent}"
                            type="text" name="pid"  placeholder="请选择父级菜单">
                 </label>
             </div>
@@ -45,7 +45,7 @@
             <div class="layui-input-inline">
                 <label>
                     <select class="select-pos" name="pos" lay-verify="pos"
-                            th:attr="data-url=@{/api/rbac/menu/sorted}"></select>
+                            th:attr="data-url=@{/rbac/menu/sorted}"></select>
                 </label>
             </div>
             <div class="layui-input-info">(之后)</div>

+ 2 - 2
mgr/src/main/resources/templates/admin/menu/edit.html

@@ -5,7 +5,7 @@
 </head>
 <body>
 <div class="layui-form timo-compile">
-    <form th:action="@{/api/rbac/menu/edit}">
+    <form th:action="@{/rbac/menu/edit}">
         <input type="hidden" name="menuId" th:value="${menu.id}"/>
         <div class="layui-form-item">
             <label class="layui-form-label required">名字</label>
@@ -38,7 +38,7 @@
             <div class="layui-input-inline">
                 <label>
                     <select class="select-pos" name="pos" lay-verify="pos"
-                            th:attr="data-url=@{/api/rbac/menu/sorted}, data-id=${menu.id}, data-pos=${menu.pos}"></select>
+                            th:attr="data-url=@{/rbac/menu/sorted}, data-id=${menu.id}, data-pos=${menu.pos}"></select>
                 </label>
             </div>
             <div class="layui-input-info">(之后)</div>

+ 4 - 4
mgr/src/main/resources/templates/admin/menu/index.html

@@ -5,7 +5,7 @@
         <link rel="stylesheet" th:href="@{/lib/zTree_v3/css/zTreeStyle/zTreeStyle.css}" type="text/css">
     </head>
     <body class="timo-layout-page">
-        <div class="layui-card timo-tree" th:attr="data-url=@{'/api/rbac/menu/ztree/' + ${enabled}}">
+        <div class="layui-card timo-tree" th:attr="data-url=@{'/rbac/menu/ztree/' + ${enabled}}">
             <div class="layui-card-header timo-card-header">
                 <span>
                     <i class="fa fa-bars"></i>
@@ -45,10 +45,10 @@
                                 </button>
                                 <dl class="layui-nav-child layui-anim layui-anim-upbit">
                                     <dd>
-                                        <a class="ajax-status" th:href="@{/api/rbac/menu/status/1}">启用</a>
+                                        <a class="ajax-status" th:href="@{/rbac/menu/status/1}">启用</a>
                                     </dd>
                                     <dd>
-                                        <a class="ajax-status" th:href="@{/api/rbac/menu/status/0}">停用</a>
+                                        <a class="ajax-status" th:href="@{/rbac/menu/status/0}">停用</a>
                                     </dd>
                                 </dl>
                             </div>
@@ -92,7 +92,7 @@
                                            th:attr="data-url=@{'/rbac/menu/edit/{{id}}'}" href="#">编辑
                                         </a>
                                         <a class="ajax-delete popup-delete" th:attr="data-msg='确定要删除 {{name}}?'"
-                                           th:href="@{'/api/rbac/menu/{{id}}'}">删除
+                                           th:href="@{'/rbac/menu/{{id}}'}">删除
                                         </a>
                                     </td>
                                 </tr>

+ 1 - 1
mgr/src/main/resources/templates/admin/role/add.html

@@ -4,7 +4,7 @@
 </head>
 <body>
 <div class="layui-form timo-compile">
-    <form th:action="@{/api/rbac/role}">
+    <form th:action="@{/rbac/role}">
         <input type="hidden" name="id" th:if="${role}" th:value="${role?.id}"/>
         <div class="layui-form-item">
             <label class="layui-form-label required">角色名</label>

+ 1 - 1
mgr/src/main/resources/templates/admin/role/index.html

@@ -63,7 +63,7 @@
                         <a class="open-popup" data-title="详细信息" th:attr="data-url=@{'/rbac/role/detail/'+${item.id}}"
                            data-size="640,480" href="#">详细</a>
                         <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.name} + '?'"
-                           th:href="@{'/api/rbac/role/' + ${item.id}}">删除</a>
+                           th:href="@{'/rbac/role/' + ${item.id}}">删除</a>
                     </td>
                 </tr>
                 </tbody>

+ 2 - 2
mgr/src/main/resources/templates/admin/role/menus.html

@@ -20,9 +20,9 @@
 </head>
 <body>
 <div class="layui-form timo-compile">
-    <ul id="authTree" class="ztree" th:attr="data-url=@{'/api/rbac/role/menus/'+${roleId}}"></ul>
+    <ul id="authTree" class="ztree" th:attr="data-url=@{'/rbac/role/menus/'+${roleId}}"></ul>
     <div class="layui-form-item timo-finally">
-        <button id="submit" class="layui-btn" th:attr="data-url=@{/api/rbac/role/menus}, data-id=${roleId}">
+        <button id="submit" class="layui-btn" th:attr="data-url=@{/rbac/role/menus}, data-id=${roleId}">
             <i class="fa fa-check-circle"></i> 保存
         </button>
         <button class="layui-btn btn-secondary close-popup">