From fc017033910bcac63e58eeb88fd36f72edc38ce3 Mon Sep 17 00:00:00 2001 From: aguoxing <2933575030@qq.com> Date: Mon, 13 Dec 2021 11:07:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysMenuController.java | 14 ++ .../ruoyi/system/service/ISysMenuService.java | 9 ++ .../service/impl/SysMenuServiceImpl.java | 54 ++++++++ .../resources/mapper/system/SysMenuMapper.xml | 6 + ruoyi-ui/src/api/system/menu.js | 129 ++++++++++-------- ruoyi-ui/src/views/system/menu/index.vue | 20 ++- 6 files changed, 168 insertions(+), 64 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java index 9ab14d2ab..944cf6f00 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java @@ -1,6 +1,8 @@ package com.ruoyi.web.controller.system; import java.util.List; + +import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -44,6 +46,18 @@ public class SysMenuController extends BaseController return AjaxResult.success(menus); } + /** + * 分页获取菜单列表 + */ + @PreAuthorize("@ss.hasPermi('system:menu:list')") + @GetMapping("/listTreeByPage") + public TableDataInfo listTreeByPage(SysMenu menu) + { + startPage(); + List<SysMenu> menus = menuService.selectTreeByPage(menu, getUserId()); + return getDataTable(menus); + } + /** * 根据菜单编号获取详细信息 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index 59009be01..2f54bd41f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -133,4 +133,13 @@ public interface ISysMenuService * @return 结果 */ public String checkMenuNameUnique(SysMenu menu); + + /** + * 分页查询菜单树 + * + * @param menu + * @param userId + * @return + */ + public List<SysMenu> selectTreeByPage(SysMenu menu, Long userId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index d113cfe0e..e386e3c17 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -79,6 +79,60 @@ public class SysMenuServiceImpl implements ISysMenuService return menuList; } + /** + * 分页查询菜单树 + * + * @param menu + * @param userId + * @return + */ + @Override + public List<SysMenu> selectTreeByPage(SysMenu menu, Long userId) + { + List<SysMenu> menuList = null; + menu.setParentId(0L); + + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) { + menuList = menuMapper.selectMenuList(menu); + } + else + { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return findChildren(menuList, userId); + } + + public List<SysMenu> findChildren(List<SysMenu> sysMenuList, Long userId) + { + List<SysMenu> children = null; + SysMenu menu = new SysMenu(); + + for (SysMenu sysMenu : sysMenuList) + { + menu.setParentId(sysMenu.getMenuId()); + + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) + { + children = menuMapper.selectMenuList(menu); + } + else + { + menu.getParams().put("userId", userId); + children = menuMapper.selectMenuListByUserId(menu); + } + + if (StringUtils.isNotNull(children) && children.size() > 0) + { + findChildren(children, userId); + sysMenu.setChildren(children); + } + } + return sysMenuList; + } + /** * 根据用户ID查询权限 * diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index 144adb1b9..73cfea258 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -35,6 +35,9 @@ <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult"> <include refid="selectMenuVo"/> <where> + <if test="parentId != null"> + AND parent_id = #{parentId} + </if> <if test="menuName != null and menuName != ''"> AND menu_name like concat('%', #{menuName}, '%') </if> @@ -61,6 +64,9 @@ left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id where ur.user_id = #{params.userId} + <if test="parentId != null and parentId != ''"> + AND m.parent_id = #{parentId} + </if> <if test="menuName != null and menuName != ''"> AND m.menu_name like concat('%', #{menuName}, '%') </if> diff --git a/ruoyi-ui/src/api/system/menu.js b/ruoyi-ui/src/api/system/menu.js index 97258ee61..4f4b44efd 100644 --- a/ruoyi-ui/src/api/system/menu.js +++ b/ruoyi-ui/src/api/system/menu.js @@ -1,60 +1,69 @@ -import request from '@/utils/request' - -// 查询菜单列表 -export function listMenu(query) { - return request({ - url: '/system/menu/list', - method: 'get', - params: query - }) -} - -// 查询菜单详细 -export function getMenu(menuId) { - return request({ - url: '/system/menu/' + menuId, - method: 'get' - }) -} - -// 查询菜单下拉树结构 -export function treeselect() { - return request({ - url: '/system/menu/treeselect', - method: 'get' - }) -} - -// 根据角色ID查询菜单下拉树结构 -export function roleMenuTreeselect(roleId) { - return request({ - url: '/system/menu/roleMenuTreeselect/' + roleId, - method: 'get' - }) -} - -// 新增菜单 -export function addMenu(data) { - return request({ - url: '/system/menu', - method: 'post', - data: data - }) -} - -// 修改菜单 -export function updateMenu(data) { - return request({ - url: '/system/menu', - method: 'put', - data: data - }) -} - -// 删除菜单 -export function delMenu(menuId) { - return request({ - url: '/system/menu/' + menuId, - method: 'delete' - }) -} \ No newline at end of file +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} + +// 分页查询菜单列表 +export function listTreeByPage(query) { + return request({ + url: '/system/menu/listTreeByPage', + method: 'get', + params: query + }) +} + +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get' + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: '/system/menu/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增菜单 +export function addMenu(data) { + return request({ + url: '/system/menu', + method: 'post', + data: data + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/menu', + method: 'put', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/views/system/menu/index.vue b/ruoyi-ui/src/views/system/menu/index.vue index d65773ad2..89317d413 100644 --- a/ruoyi-ui/src/views/system/menu/index.vue +++ b/ruoyi-ui/src/views/system/menu/index.vue @@ -78,7 +78,7 @@ </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> - <el-button + <el-button size="mini" type="text" icon="el-icon-edit" @@ -103,6 +103,14 @@ </el-table-column> </el-table> + <pagination + v-show="total>0" + :total="total" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + <!-- 添加或修改菜单对话框 --> <el-dialog :title="title" :visible.sync="open" width="680px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="100px"> @@ -276,7 +284,7 @@ </template> <script> -import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/menu"; +import { listMenu, getMenu, delMenu, addMenu, updateMenu, listTreeByPage } from "@/api/system/menu"; import Treeselect from "@riophae/vue-treeselect"; import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import IconSelect from "@/components/IconSelect"; @@ -305,9 +313,12 @@ export default { refreshTable: true, // 查询参数 queryParams: { + pageNum: 1, + pageSize: 10, menuName: undefined, visible: undefined }, + total: 0, // 表单参数 form: {}, // 表单校验 @@ -335,8 +346,9 @@ export default { /** 查询菜单列表 */ getList() { this.loading = true; - listMenu(this.queryParams).then(response => { - this.menuList = this.handleTree(response.data, "menuId"); + listTreeByPage(this.queryParams).then(response => { + this.menuList = response.rows; + this.total = response.total; this.loading = false; }); }, From 223b4091da14aa29ffac31943470bc58162f6330 Mon Sep 17 00:00:00 2001 From: aguoxing <2933575030@qq.com> Date: Thu, 16 Dec 2021 16:02:12 +0800 Subject: [PATCH 2/2] fix --- ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index 73cfea258..8036f03ba 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -64,7 +64,7 @@ left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id where ur.user_id = #{params.userId} - <if test="parentId != null and parentId != ''"> + <if test="parentId != null"> AND m.parent_id = #{parentId} </if> <if test="menuName != null and menuName != ''">