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 != ''">