From ca3c5fd2c940345042a23fbc65d93b9798dad690 Mon Sep 17 00:00:00 2001 From: weitang Date: Fri, 27 Jun 2025 11:39:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20=E6=96=B0=E5=A2=9E=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E4=B8=8A=E7=A7=BB=E5=92=8C=E4=B8=8B=E7=A7=BB=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/MenuController.java | 13 +++++ .../system/service/IMenuService.java | 3 ++ .../system/service/impl/MenuServiceImpl.java | 50 +++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java index b8d6038..713f343 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java @@ -47,6 +47,19 @@ public class MenuController { } } + /** + * 上移/下移菜单 + */ + @PostMapping("/changeOrder") + public ResponseResult changeOrder(@RequestParam String menuId, @RequestParam String direction) { + boolean result = menuService.changeOrder(menuId, direction); + if (result) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + /*********************************** * 用途说明:修改菜单及按钮根据ID * 参数说明 diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java index 0e7d950..5bcb013 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java @@ -49,4 +49,7 @@ public interface IMenuService extends IService { * 返回值说明: 菜单结构树集合 ***********************************/ List> permissionAssignment(String appId ,String roleId); + + boolean changeOrder(String menuId, String direction); + } diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java index f2c836a..c7f5459 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java @@ -214,6 +214,56 @@ public class MenuServiceImpl extends ServiceImpl implements IM return listTree; } + @Override + public boolean changeOrder(String menuId, String direction) { + Menu currentMenu = menuMapper.selectById(menuId); + if (currentMenu == null) { + return false; + } + + String parentId = currentMenu.getParentid(); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("parentid", parentId); + wrapper.orderByAsc("orderno"); + + List siblings = menuMapper.selectList(wrapper); + + int index = -1; + for (int i = 0; i < siblings.size(); i++) { + if (siblings.get(i).getId().equals(menuId)) { + index = i; + break; + } + } + + if ("up".equals(direction)) { + if (index > 0) { + swapOrder(siblings.get(index), siblings.get(index - 1)); + } else { + return false; // 已是第一个,无法上移 + } + } else if ("down".equals(direction)) { + if (index < siblings.size() - 1) { + swapOrder(siblings.get(index), siblings.get(index + 1)); + } else { + return false; // 已是最后一个,无法下移 + } + } else { + return false; // 方向错误 + } + return true; + } + + private void swapOrder(Menu m1, Menu m2) { + Integer temp = m1.getOrderno(); + m1.setOrderno(m2.getOrderno()); + m2.setOrderno(temp); + + menuMapper.updateById(m1); + menuMapper.updateById(m2); + } + /********************************** * 用途说明: 生成权菜单权限树 * 参数说明 sysMenus