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