瀏覽代碼

菜单新增修改逻辑调整

fanghuisheng 17 小時之前
父節點
當前提交
0b23f24c92

+ 4 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysMenuController.java

@@ -113,9 +113,9 @@ public class SysMenuController extends BaseController
     @PostMapping
     public ApiResult add(@Validated @RequestBody SysMenu menu)
     {
-        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuPathUnique(menu)))
         {
-            return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+            return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "新增菜单'" + menu.getMenuName() + "'失败,路由地址已存在");
         }
         else if (UserConstants.YES_FRAME.equals(menu.getIsFrame())
         && !StringUtils.startsWithAny(menu.getPath(), CommonConst.HTTP_PREFIX, CommonConst.HTTPS_PREFIX))
@@ -133,9 +133,9 @@ public class SysMenuController extends BaseController
     @PutMapping
     public ApiResult edit(@Validated @RequestBody SysMenu menu)
     {
-        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuPathUnique(menu)))
         {
-            return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+            return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "修改菜单'" + menu.getMenuName() + "'失败,路由地址已存在");
         }
         else if (UserConstants.YES_FRAME.equals(menu.getIsFrame())
         && !StringUtils.startsWithAny(menu.getPath(), CommonConst.HTTP_PREFIX, CommonConst.HTTPS_PREFIX))

+ 10 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysMenuMapper.java

@@ -154,6 +154,16 @@ public interface SysMenuMapper extends CrudMapper<SysMenu> {
     public SysMenu checkMenuNameUnique(@Param("menuName") String menuName,
                                        @Param("parentId") Long parentId);
 
+    /**
+     * 校验路由地址是否唯一(同一父菜单下)
+     *
+     * @param path     路由地址
+     * @param parentId 父菜单ID
+     * @return 结果
+     */
+    public SysMenu checkMenuPathUnique(@Param("path") String path,
+                                       @Param("parentId") Long parentId);
+
     public List<SysMenu> getSysMenuList(String menuType);
 
     public List<SysMenu> getTenantPlatformMenuList(@Param("tenantId") Integer tenantId,@Param("platformId") Integer platformId);

+ 8 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysMenuService.java

@@ -193,6 +193,14 @@ public interface ISysMenuService extends CrudService<SysMenu>
      */
     public String checkMenuNameUnique(SysMenu menu);
 
+    /**
+     * 校验路由地址是否唯一(同一父菜单下;path 为空时视为唯一)
+     *
+     * @param menu 菜单信息
+     * @return 结果
+     */
+    public String checkMenuPathUnique(SysMenu menu);
+
     /**
      * 根据角色ID查询应用菜单树信息
      * @return 选中菜单列表

+ 14 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysMenuServiceImpl.java

@@ -614,6 +614,20 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
         return UserConstants.UNIQUE;
     }
 
+    @Override
+    public String checkMenuPathUnique(SysMenu menu) {
+        // 按钮等场景 path 常为空,不做重复校验
+        if (StringUtils.isEmpty(menu.getPath())) {
+            return UserConstants.UNIQUE;
+        }
+        Long menuId = Objects.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
+        SysMenu info = menuMapper.checkMenuPathUnique(menu.getPath(), menu.getParentId());
+        if (Objects.nonNull(info) && info.getMenuId().longValue() != menuId.longValue()) {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
     /**
      * 获取路由名称
      *

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -367,6 +367,11 @@
         where menu_name=#{menuName} and parent_id = #{parentId} limit 1
     </select>
 
+    <select id="checkMenuPathUnique" resultMap="SysMenuResult">
+        <include refid="selectMenuVo"/>
+        where path = #{path} and parent_id = #{parentId} limit 1
+    </select>
+
     <update id="updateMenu" parameterType="com.usky.system.domain.SysMenu">
         update sys_menu
         <set>