update 强化菜单
This commit is contained in:
@@ -20,9 +20,9 @@ namespace Ewide.Core
|
||||
MENU = 1,
|
||||
|
||||
/// <summary>
|
||||
/// 按钮
|
||||
/// 功能
|
||||
/// </summary>
|
||||
[Description("按钮")]
|
||||
BTN = 2
|
||||
[Description("功能")]
|
||||
FUNCTION = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2417,9 +2417,9 @@
|
||||
菜单
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Ewide.Core.MenuType.BTN">
|
||||
<member name="F:Ewide.Core.MenuType.FUNCTION">
|
||||
<summary>
|
||||
按钮
|
||||
功能
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Ewide.Core.MenuWeight">
|
||||
@@ -4933,7 +4933,7 @@
|
||||
路由元信息(路由附带扩展信息)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Ewide.Core.Service.AntDesignTreeNode.Path">
|
||||
<member name="P:Ewide.Core.Service.AntDesignTreeNode.Link">
|
||||
<summary>
|
||||
路径
|
||||
</summary>
|
||||
@@ -4943,6 +4943,11 @@
|
||||
控制路由和子路由是否显示在 sidebar
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Ewide.Core.Service.AntDesignTreeNode.OpenType">
|
||||
<summary>
|
||||
打开方式
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Ewide.Core.Service.Meta">
|
||||
<summary>
|
||||
路由元信息内部类
|
||||
@@ -5068,6 +5073,11 @@
|
||||
菜单类型(字典 0目录 1菜单 2按钮)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Ewide.Core.Service.AddMenuInput.OpenType">
|
||||
<summary>
|
||||
打开方式(字典 0无 1组件 2内链 3外链)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Ewide.Core.Service.DeleteMenuInput.Id">
|
||||
<summary>
|
||||
菜单Id
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace Ewide.Core
|
||||
OpTime = DateTime.Now,
|
||||
Account = httpContext.User?.FindFirstValue(ClaimConst.CLAINM_ACCOUNT)
|
||||
};
|
||||
await sysOpLog.InsertAsync();
|
||||
await sysOpLog.InsertNowAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,12 +38,17 @@
|
||||
/// <summary>
|
||||
/// 路径
|
||||
/// </summary>
|
||||
public string Path { get; set; }
|
||||
public string Link { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 控制路由和子路由是否显示在 sidebar
|
||||
/// </summary>
|
||||
public bool Hidden { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 打开方式
|
||||
/// </summary>
|
||||
public int OpenType { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace Ewide.Core.Service
|
||||
/// <summary>
|
||||
/// 菜单类型(字典 0目录 1菜单 2按钮)
|
||||
/// </summary>
|
||||
public virtual string Type { get; set; }
|
||||
public virtual int Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 图标
|
||||
@@ -55,7 +55,7 @@ namespace Ewide.Core.Service
|
||||
/// <summary>
|
||||
/// 打开方式(字典 0无 1组件 2内链 3外链)
|
||||
/// </summary>
|
||||
public virtual string OpenType { get; set; }
|
||||
public virtual int OpenType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否可见(Y-是,N-否)
|
||||
@@ -99,7 +99,13 @@ namespace Ewide.Core.Service
|
||||
/// 菜单类型(字典 0目录 1菜单 2按钮)
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "菜单类型不能为空")]
|
||||
public override string Type { get; set; }
|
||||
public override int Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 打开方式(字典 0无 1组件 2内链 3外链)
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "打开方式不能为空")]
|
||||
public override int OpenType { get; set; }
|
||||
}
|
||||
|
||||
public class DeleteMenuInput
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace Ewide.Core.Service
|
||||
var roleIdList = await _sysUserRoleService.GetUserRoleIdList(userId);
|
||||
var menuIdList = await _sysRoleMenuService.GetRoleMenuIdList(roleIdList);
|
||||
permissions = await _sysMenuRep.DetachedEntities.Where(u => menuIdList.Contains(u.Id))
|
||||
.Where(u => u.Type == (int)MenuType.BTN)
|
||||
.Where(u => u.Type == (int)MenuType.FUNCTION)
|
||||
.Where(u => u.Status == (int)CommonStatus.ENABLE)
|
||||
.Select(u => u.Permission).ToListAsync();
|
||||
#if DEBUG
|
||||
@@ -83,7 +83,7 @@ namespace Ewide.Core.Service
|
||||
sysMenuList = await _sysMenuRep.DetachedEntities
|
||||
.Where(u => u.Status == (int)CommonStatus.ENABLE)
|
||||
.Where(u => u.Application == appCode)
|
||||
.Where(u => u.Type != (int)MenuType.BTN)
|
||||
.Where(u => u.Type != (int)MenuType.FUNCTION)
|
||||
.Where(u => u.Weight != (int)MenuWeight.DEFAULT_WEIGHT)
|
||||
.OrderBy(u => u.Sort).ToListAsync();
|
||||
}
|
||||
@@ -96,7 +96,7 @@ namespace Ewide.Core.Service
|
||||
.Where(u => menuIdList.Contains(u.Id))
|
||||
.Where(u => u.Status == (int)CommonStatus.ENABLE)
|
||||
.Where(u => u.Application == appCode)
|
||||
.Where(u => u.Type != (int)MenuType.BTN)
|
||||
.Where(u => u.Type != (int)MenuType.FUNCTION)
|
||||
.OrderBy(u => u.Sort).ToListAsync();
|
||||
}
|
||||
// 转换成登录菜单
|
||||
@@ -106,8 +106,9 @@ namespace Ewide.Core.Service
|
||||
Pid = u.Pid,
|
||||
Name = u.Code,
|
||||
Component = u.Component,
|
||||
Redirect = u.OpenType == (int)MenuOpenType.OUTER ? u.Link : u.Redirect,
|
||||
Path = u.OpenType == (int)MenuOpenType.OUTER ? u.Link : u.Router,
|
||||
Redirect = u.Redirect,
|
||||
Link = u.Link,
|
||||
OpenType = u.OpenType,
|
||||
Meta = new Meta
|
||||
{
|
||||
Title = u.Name,
|
||||
@@ -185,7 +186,7 @@ namespace Ewide.Core.Service
|
||||
/// 增加和编辑时检查参数
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
private static void CheckMenuParam(MenuInput input)
|
||||
private async Task CheckMenuParam(MenuInput input)
|
||||
{
|
||||
var type = input.Type;
|
||||
var router = input.Router;
|
||||
@@ -195,17 +196,17 @@ namespace Ewide.Core.Service
|
||||
|
||||
if (type.Equals((int)MenuType.DIR))
|
||||
{
|
||||
if (string.IsNullOrEmpty(router))
|
||||
throw Oops.Oh(ErrorCode.D4001);
|
||||
//if (string.IsNullOrEmpty(router))
|
||||
// throw Oops.Oh(ErrorCode.D4001);
|
||||
}
|
||||
else if (type.Equals((int)MenuType.MENU))
|
||||
{
|
||||
if (string.IsNullOrEmpty(router))
|
||||
throw Oops.Oh(ErrorCode.D4001);
|
||||
if (string.IsNullOrEmpty(openType))
|
||||
throw Oops.Oh(ErrorCode.D4002);
|
||||
//if (string.IsNullOrEmpty(router))
|
||||
// throw Oops.Oh(ErrorCode.D4001);
|
||||
//if (string.IsNullOrEmpty(openType))
|
||||
// throw Oops.Oh(ErrorCode.D4002);
|
||||
}
|
||||
else if (type.Equals((int)MenuType.BTN))
|
||||
else if (type.Equals((int)MenuType.FUNCTION))
|
||||
{
|
||||
if (string.IsNullOrEmpty(permission))
|
||||
throw Oops.Oh(ErrorCode.D4003);
|
||||
@@ -217,10 +218,37 @@ namespace Ewide.Core.Service
|
||||
//if (!urlSet.Contains(permission.Replace(":","/")))
|
||||
// throw Oops.Oh(ErrorCode.meu1005);
|
||||
}
|
||||
//按钮可以设置绑定菜单
|
||||
if(!isVisibleParent && type.Equals((int)MenuType.BTN))
|
||||
|
||||
// 检查上级菜单的类型是否正确
|
||||
var pid = input.Pid;
|
||||
var flag = true;
|
||||
var empty = System.Guid.Empty.ToString();
|
||||
switch(type)
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.D4004);
|
||||
// 目录必须在顶级下
|
||||
case (int)MenuType.DIR:
|
||||
flag = pid.Equals(empty);
|
||||
break;
|
||||
// 菜单必须在顶级或目录下
|
||||
case (int)MenuType.MENU:
|
||||
if (!pid.Equals(empty))
|
||||
{
|
||||
var parent = await _sysMenuRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == pid);
|
||||
flag = parent.Type.Equals((int)MenuType.DIR);
|
||||
}
|
||||
break;
|
||||
// 功能必须在菜单下
|
||||
case (int)MenuType.FUNCTION:
|
||||
{
|
||||
var parent = await _sysMenuRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == pid);
|
||||
flag = parent == null ? false : parent.Type.Equals((int)MenuType.MENU);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!flag)
|
||||
{
|
||||
throw Oops.Oh("父级菜单类型错误");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,7 +268,7 @@ namespace Ewide.Core.Service
|
||||
}
|
||||
|
||||
// 校验参数
|
||||
CheckMenuParam(input);
|
||||
await CheckMenuParam(input);
|
||||
|
||||
var menu = input.Adapt<SysMenu>();
|
||||
menu.Pids = await CreateNewPids(input.Pid);
|
||||
@@ -296,7 +324,7 @@ namespace Ewide.Core.Service
|
||||
}
|
||||
|
||||
// 校验参数
|
||||
CheckMenuParam(input);
|
||||
await CheckMenuParam(input);
|
||||
// 如果是编辑,父id不能为自己的子节点
|
||||
var childIdList = await _sysMenuRep.DetachedEntities.Where(u => u.Pids.Contains(input.Id.ToString()))
|
||||
.Select(u => u.Id).ToListAsync();
|
||||
@@ -360,7 +388,7 @@ namespace Ewide.Core.Service
|
||||
// 更新当前菜单
|
||||
oldMenu = input.Adapt<SysMenu>();
|
||||
oldMenu.Pids = newPids;
|
||||
await oldMenu.UpdateAsync(ignoreNullValues: true);
|
||||
await oldMenu.UpdateExcludeAsync(new[] { nameof(SysMenu.Type) }, ignoreNullValues: true);
|
||||
|
||||
// 清除缓存
|
||||
await _sysCacheService.DelByPatternAsync(CommonConst.CACHE_KEY_MENU);
|
||||
|
||||
Reference in New Issue
Block a user