Przeglądaj źródła

feat: 菜单保存增加父节点不能为按钮类型判断

许俊杰 2 lat temu
rodzic
commit
40aca8e403

+ 6 - 0
Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs

@@ -346,6 +346,12 @@ public enum ErrorCodeEnum
     [ErrorCodeItemMetadata("路由名称重复")]
     D4009,
 
+    /// <summary>
+    /// 父节点不能为按钮类型
+    /// </summary>
+    [ErrorCodeItemMetadata("父节点不能为按钮类型")]
+    D4010,
+
     /// <summary>
     /// 已存在同名或同编码应用
     /// </summary>

+ 20 - 0
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -122,6 +122,12 @@ public class SysMenuService : IDynamicApiController, ITransient
                 throw Oops.Oh(ErrorCodeEnum.D4009);
         }
 
+        if (input.Pid != 0)
+        {
+            if (await _sysMenuRep.IsAnyAsync(u => u.Id == input.Pid && u.Type == MenuTypeEnum.Btn))
+                throw Oops.Oh(ErrorCodeEnum.D4010);
+        }
+
         // 校验菜单参数
         var sysMenu = input.Adapt<SysMenu>();
         CheckMenuParam(sysMenu);
@@ -150,6 +156,18 @@ public class SysMenuService : IDynamicApiController, ITransient
         if (isExist)
             throw Oops.Oh(ErrorCodeEnum.D4000);
 
+        if (!string.IsNullOrWhiteSpace(input.Name))
+        {
+            if (await _sysMenuRep.IsAnyAsync(u => u.Id != input.Id && u.Name == input.Name))
+                throw Oops.Oh(ErrorCodeEnum.D4009);
+        }
+
+        if (input.Pid != 0)
+        {
+            if (await _sysMenuRep.IsAnyAsync(u => u.Id == input.Pid && u.Type == MenuTypeEnum.Btn))
+                throw Oops.Oh(ErrorCodeEnum.D4010);
+        }
+
         // 校验菜单参数
         var sysMenu = input.Adapt<SysMenu>();
         CheckMenuParam(sysMenu);
@@ -233,6 +251,7 @@ public class SysMenuService : IDynamicApiController, ITransient
                 : new List<string>();
             _sysCacheService.Set(CacheConst.KeyUserButton + userId, permissions);
         }
+
         return permissions;
     }
 
@@ -251,6 +270,7 @@ public class SysMenuService : IDynamicApiController, ITransient
                 .Select(u => u.Permission).ToListAsync();
             _sysCacheService.Set(CacheConst.KeyUserButton + 0, permissions);
         }
+
         return permissions;
     }