diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/system/SysMenuController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/system/SysMenuController.java index 457f44b5a..60b89e3b4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/system/SysMenuController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/system/SysMenuController.java @@ -10,6 +10,8 @@ import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.satoken.utils.LoginHelper; import com.ruoyi.system.domain.SysMenu; +import com.ruoyi.system.domain.bo.SysMenuBo; +import com.ruoyi.system.domain.vo.SysMenuVo; import com.ruoyi.system.service.ISysMenuService; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; @@ -48,7 +50,7 @@ public class SysMenuController extends BaseController { */ @SaCheckPermission("system:menu:query") @GetMapping(value = "/{menuId}") - public R getInfo(@PathVariable Long menuId) { + public R getInfo(@PathVariable Long menuId) { return R.ok(menuService.selectMenuById(menuId)); } @@ -81,13 +83,13 @@ public class SysMenuController extends BaseController { @SaCheckPermission("system:menu:add") @Log(title = "菜单管理", businessType = BusinessType.INSERT) @PostMapping - public R add(@Validated @RequestBody SysMenu menu) { - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { - return R.fail("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); - } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { - return R.fail("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + public R add(@Validated @RequestBody SysMenuBo bo) { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(bo))) { + return R.fail("新增菜单'" + bo.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(bo.getIsFrame()) && !StringUtils.ishttp(bo.getPath())) { + return R.fail("新增菜单'" + bo.getMenuName() + "'失败,地址必须以http(s)://开头"); } - return toAjax(menuService.insertMenu(menu)); + return toAjax(menuService.insertMenu(bo)); } /** @@ -96,15 +98,15 @@ public class SysMenuController extends BaseController { @SaCheckPermission("system:menu:edit") @Log(title = "菜单管理", businessType = BusinessType.UPDATE) @PutMapping - public R edit(@Validated @RequestBody SysMenu menu) { - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { - return R.fail("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); - } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { - return R.fail("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); - } else if (menu.getMenuId().equals(menu.getParentId())) { - return R.fail("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); + public R edit(@Validated @RequestBody SysMenuBo bo) { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(bo))) { + return R.fail("修改菜单'" + bo.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(bo.getIsFrame()) && !StringUtils.ishttp(bo.getPath())) { + return R.fail("修改菜单'" + bo.getMenuName() + "'失败,地址必须以http(s)://开头"); + } else if (bo.getMenuId().equals(bo.getParentId())) { + return R.fail("修改菜单'" + bo.getMenuName() + "'失败,上级菜单不能选择自己"); } - return toAjax(menuService.updateMenu(menu)); + return toAjax(menuService.updateMenu(bo)); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java index d8bb1a7a9..aec2f3b5a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java @@ -31,26 +31,21 @@ public class SysMenu extends TreeEntity { /** * 菜单名称 */ - @NotBlank(message = "菜单名称不能为空") - @Size(min = 0, max = 50, message = "菜单名称长度不能超过{max}个字符") private String menuName; /** * 显示顺序 */ - @NotNull(message = "显示顺序不能为空") private Integer orderNum; /** * 路由地址 */ - @Size(min = 0, max = 200, message = "路由地址不能超过{max}个字符") private String path; /** * 组件路径 */ - @Size(min = 0, max = 200, message = "组件路径不能超过{max}个字符") private String component; /** @@ -71,7 +66,6 @@ public class SysMenu extends TreeEntity { /** * 类型(M目录 C菜单 F按钮) */ - @NotBlank(message = "菜单类型不能为空") private String menuType; /** @@ -87,8 +81,6 @@ public class SysMenu extends TreeEntity { /** * 权限字符串 */ - @JsonInclude(JsonInclude.Include.NON_NULL) - @Size(min = 0, max = 100, message = "权限标识长度不能超过{max}个字符") private String perms; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysMenuBo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysMenuBo.java new file mode 100644 index 000000000..4770d9d41 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysMenuBo.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.domain.bo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.mybatis.core.domain.TreeEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +import java.util.Date; + +import com.ruoyi.common.mybatis.core.domain.BaseEntity; + +/** + * 菜单权限业务对象 sys_menu + * + * @author ruoyi + * @date 2023-02-01 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SysMenuBo extends TreeEntity { + + /** + * 菜单ID + */ + @NotNull(message = "菜单ID不能为空", groups = { EditGroup.class }) + private Long menuId; + + /** + * 菜单名称 + */ + @NotBlank(message = "菜单名称不能为空", groups = { AddGroup.class, EditGroup.class }) + @Size(min = 0, max = 50, message = "菜单名称长度不能超过{max}个字符") + private String menuName; + + /** + * 显示顺序 + */ + @NotNull(message = "显示顺序不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer orderNum; + + /** + * 路由地址 + */ + @Size(min = 0, max = 200, message = "路由地址不能超过{max}个字符") + private String path; + + /** + * 组件路径 + */ + @Size(min = 0, max = 200, message = "组件路径不能超过{max}个字符") + private String component; + + /** + * 路由参数 + */ + private String queryParam; + + /** + * 是否为外链(0是 1否) + */ + private Integer isFrame; + + /** + * 是否缓存(0缓存 1不缓存) + */ + private Integer isCache; + + /** + * 菜单类型(M目录 C菜单 F按钮) + */ + @NotBlank(message = "菜单类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String menuType; + + /** + * 显示状态(0显示 1隐藏) + */ + private String visible; + + /** + * 菜单状态(0正常 1停用) + */ + private String status; + + /** + * 权限标识 + */ + @JsonInclude(JsonInclude.Include.NON_NULL) + @Size(min = 0, max = 100, message = "权限标识长度不能超过{max}个字符") + private String perms; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysMenuVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysMenuVo.java new file mode 100644 index 000000000..9da959f41 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysMenuVo.java @@ -0,0 +1,108 @@ +package com.ruoyi.system.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 菜单权限视图对象 sys_menu + * + * @author ruoyi + * @date 2023-02-01 + */ +@Data +public class SysMenuVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 菜单ID + */ + private Long menuId; + + /** + * 菜单名称 + */ + private String menuName; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 路由地址 + */ + private String path; + + /** + * 组件路径 + */ + private String component; + + /** + * 路由参数 + */ + private String queryParam; + + /** + * 是否为外链(0是 1否) + */ + private String isFrame; + + /** + * 是否缓存(0缓存 1不缓存) + */ + private String isCache; + + /** + * 菜单类型(M目录 C菜单 F按钮) + */ + private String menuType; + + /** + * 显示状态(0显示 1隐藏) + */ + private String visible; + + /** + * 菜单状态(0正常 1停用) + */ + private String status; + + /** + * 权限标识 + */ + private String perms; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 创建部门 + */ + private Long createDept; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java index 366115a3f..936a0127e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.system.domain.SysMenu; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; +import com.ruoyi.system.domain.vo.SysMenuVo; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -15,7 +16,7 @@ import java.util.List; * * @author Lion Li */ -public interface SysMenuMapper extends BaseMapperPlus { +public interface SysMenuMapper extends BaseMapperPlus { /** * 根据用户所有权限 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index fa4f4187a..7602b6bc6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -2,7 +2,9 @@ package com.ruoyi.system.service; import cn.hutool.core.lang.tree.Tree; import com.ruoyi.system.domain.SysMenu; +import com.ruoyi.system.domain.bo.SysMenuBo; import com.ruoyi.system.domain.vo.RouterVo; +import com.ruoyi.system.domain.vo.SysMenuVo; import java.util.List; import java.util.Set; @@ -85,7 +87,7 @@ public interface ISysMenuService { * @param menuId 菜单ID * @return 菜单信息 */ - SysMenu selectMenuById(Long menuId); + SysMenuVo selectMenuById(Long menuId); /** * 是否存在菜单子节点 @@ -106,18 +108,18 @@ public interface ISysMenuService { /** * 新增保存菜单信息 * - * @param menu 菜单信息 + * @param bo 菜单信息 * @return 结果 */ - int insertMenu(SysMenu menu); + int insertMenu(SysMenuBo bo); /** * 修改保存菜单信息 * - * @param menu 菜单信息 + * @param bo 菜单信息 * @return 结果 */ - int updateMenu(SysMenu menu); + int updateMenu(SysMenuBo bo); /** * 删除菜单管理信息 @@ -130,8 +132,8 @@ public interface ISysMenuService { /** * 校验菜单名称是否唯一 * - * @param menu 菜单信息 + * @param bo 菜单信息 * @return 结果 */ - String checkMenuNameUnique(SysMenu menu); + String checkMenuNameUnique(SysMenuBo bo); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 4db0a1469..17bf77642 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ObjectUtil; @@ -15,8 +16,10 @@ import com.ruoyi.common.satoken.utils.LoginHelper; import com.ruoyi.system.domain.SysMenu; import com.ruoyi.system.domain.SysRole; import com.ruoyi.system.domain.SysRoleMenu; +import com.ruoyi.system.domain.bo.SysMenuBo; import com.ruoyi.system.domain.vo.MetaVo; import com.ruoyi.system.domain.vo.RouterVo; +import com.ruoyi.system.domain.vo.SysMenuVo; import com.ruoyi.system.mapper.SysMenuMapper; import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.mapper.SysRoleMenuMapper; @@ -221,8 +224,8 @@ public class SysMenuServiceImpl implements ISysMenuService { * @return 菜单信息 */ @Override - public SysMenu selectMenuById(Long menuId) { - return baseMapper.selectById(menuId); + public SysMenuVo selectMenuById(Long menuId) { + return baseMapper.selectVoById(menuId); } /** @@ -250,22 +253,24 @@ public class SysMenuServiceImpl implements ISysMenuService { /** * 新增保存菜单信息 * - * @param menu 菜单信息 + * @param bo 菜单信息 * @return 结果 */ @Override - public int insertMenu(SysMenu menu) { + public int insertMenu(SysMenuBo bo) { + SysMenu menu = BeanUtil.toBean(bo, SysMenu.class); return baseMapper.insert(menu); } /** * 修改保存菜单信息 * - * @param menu 菜单信息 + * @param bo 菜单信息 * @return 结果 */ @Override - public int updateMenu(SysMenu menu) { + public int updateMenu(SysMenuBo bo) { + SysMenu menu = BeanUtil.toBean(bo, SysMenu.class); return baseMapper.updateById(menu); } @@ -283,15 +288,15 @@ public class SysMenuServiceImpl implements ISysMenuService { /** * 校验菜单名称是否唯一 * - * @param menu 菜单信息 + * @param bo 菜单信息 * @return 结果 */ @Override - public String checkMenuNameUnique(SysMenu menu) { + public String checkMenuNameUnique(SysMenuBo bo) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() - .eq(SysMenu::getMenuName, menu.getMenuName()) - .eq(SysMenu::getParentId, menu.getParentId()) - .ne(ObjectUtil.isNotNull(menu.getMenuId()), SysMenu::getMenuId, menu.getMenuId())); + .eq(SysMenu::getMenuName, bo.getMenuName()) + .eq(SysMenu::getParentId, bo.getParentId()) + .ne(ObjectUtil.isNotNull(bo.getMenuId()), SysMenu::getMenuId, bo.getMenuId())); if (exist) { return UserConstants.NOT_UNIQUE; }