diff --git a/Admin.NET/Admin.NET.Application/Configuration/Database.json b/Admin.NET/Admin.NET.Application/Configuration/Database.json index 5d36e072..4802749e 100644 --- a/Admin.NET/Admin.NET.Application/Configuration/Database.json +++ b/Admin.NET/Admin.NET.Application/Configuration/Database.json @@ -4,7 +4,7 @@ // 详细数据库配置见SqlSugar官网(第一个为默认库),极力推荐 PostgreSQL 数据库 // 数据库连接字符串参考地址:https://www.connectionstrings.com/ "DbConnection": { - "EnableConsoleSql": true, // 启用控制台打印SQL + "EnableConsoleSql": false, // 启用控制台打印SQL "ConnectionConfigs": [ { //"ConfigId": "1300000000001", // 默认库标识-禁止修改 diff --git a/Admin.NET/Admin.NET.Application/Service/App/Auth/AppAuthService.cs b/Admin.NET/Admin.NET.Application/Service/App/Auth/AppAuthService.cs index d389d907..8da37ab4 100644 --- a/Admin.NET/Admin.NET.Application/Service/App/Auth/AppAuthService.cs +++ b/Admin.NET/Admin.NET.Application/Service/App/Auth/AppAuthService.cs @@ -22,7 +22,7 @@ public class AppAuthService : IDynamicApiController, ITransient private readonly AppUserManager _appUserManager; private readonly SqlSugarRepository _sysUserRep; private readonly IHttpContextAccessor _httpContextAccessor; - private readonly SysMenuService _sysMenuService; + private readonly SysRoleService _sysRoleService; private readonly SysOnlineUserService _sysOnlineUserService; private readonly SysConfigService _sysConfigService; private readonly ICaptcha _captcha; @@ -31,7 +31,7 @@ public class AppAuthService : IDynamicApiController, ITransient public AppAuthService(AppUserManager appUserManager, SqlSugarRepository sysUserRep, IHttpContextAccessor httpContextAccessor, - SysMenuService sysMenuService, + SysRoleService sysRoleService, SysOnlineUserService sysOnlineUserService, SysConfigService sysConfigService, ICaptcha captcha, @@ -40,7 +40,7 @@ public class AppAuthService : IDynamicApiController, ITransient _appUserManager = appUserManager; _sysUserRep = sysUserRep; _httpContextAccessor = httpContextAccessor; - _sysMenuService = sysMenuService; + _sysRoleService = sysRoleService; _sysOnlineUserService = sysOnlineUserService; _sysConfigService = sysConfigService; _captcha = captcha; @@ -201,15 +201,14 @@ public class AppAuthService : IDynamicApiController, ITransient public virtual async Task GetUserInfo() { var user = await _sysUserRep.GetFirstAsync(u => u.Id == _appUserManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1011).StatusCode(401); - // 获取机构 + // 机构 var org = await _sysUserRep.ChangeRepository>().GetFirstAsync(u => u.Id == user.OrgId); - // 获取职位 + // 职位 var pos = await _sysUserRep.ChangeRepository>().GetFirstAsync(u => u.Id == user.PosId); - // 获取按钮集合 - var buttons = await _sysMenuService.GetOwnBtnPermList(); - // 获取角色集合 - var roleIds = await _sysUserRep.ChangeRepository>().AsQueryable() - .Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync(); + // 角色集合 + var roleIds = await _sysUserRep.ChangeRepository>().AsQueryable().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync(); + // 接口集合 + var apis = await _sysRoleService.GetUserApiList(); return new LoginUserOutput { @@ -227,7 +226,7 @@ public class AppAuthService : IDynamicApiController, ITransient OrgName = org?.Name, OrgType = org?.Type, PosName = pos?.Name, - Buttons = buttons, + Apis = apis, RoleIds = roleIds }; } diff --git a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj index ea96e932..7fe0210b 100644 --- a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj +++ b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj @@ -18,9 +18,9 @@ - - - + + + @@ -38,7 +38,7 @@ - + diff --git a/Admin.NET/Admin.NET.Core/Attribute/ThemeAttribute.cs b/Admin.NET/Admin.NET.Core/Attribute/ThemeAttribute.cs index 397e9020..72c04663 100644 --- a/Admin.NET/Admin.NET.Core/Attribute/ThemeAttribute.cs +++ b/Admin.NET/Admin.NET.Core/Attribute/ThemeAttribute.cs @@ -1,45 +1,22 @@ -// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 -// -// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 -// -// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! - -namespace Admin.NET.Core; - -/// -/// 枚举拓展主题样式 -/// -[SuppressSniffer] -[AttributeUsage(AttributeTargets.Enum | AttributeTargets.Field)] -public class ThemeAttribute : Attribute -{ - public string Theme { get; private set; } - - public ThemeAttribute(string theme) - { - this.Theme = theme; - } -} - -public static class ThemeExtend -{ - /// - /// 扩展方法 - /// - /// - /// - public static string GetTheme(this Enum enumValue) - { - Type type = enumValue.GetType(); - FieldInfo field = type.GetField(enumValue.ToString()); - if (field.IsDefined(typeof(ThemeAttribute), true)) - { - var themeAttribute = (ThemeAttribute)field.GetCustomAttribute(typeof(ThemeAttribute)); - return themeAttribute.Theme; - } - else - { - return string.Empty; - } - } +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core; + +/// +/// 枚举拓展主题样式 +/// +[SuppressSniffer] +[AttributeUsage(AttributeTargets.Enum | AttributeTargets.Field)] +public class ThemeAttribute : Attribute +{ + public string Theme { get; private set; } + + public ThemeAttribute(string theme) + { + this.Theme = theme; + } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Const/CacheConst.cs b/Admin.NET/Admin.NET.Core/Const/CacheConst.cs index 6114a8d7..071e4050 100644 --- a/Admin.NET/Admin.NET.Core/Const/CacheConst.cs +++ b/Admin.NET/Admin.NET.Core/Const/CacheConst.cs @@ -11,11 +11,6 @@ namespace Admin.NET.Core; /// public class CacheConst { - /// - /// 用户权限缓存(按钮集合) - /// - public const string KeyUserButton = "sys_user_button:"; - /// /// 用户接口缓存(接口集合) /// diff --git a/Admin.NET/Admin.NET.Core/Entity/SysMenu.cs b/Admin.NET/Admin.NET.Core/Entity/SysMenu.cs index 3f6a51a9..793d5cb6 100644 --- a/Admin.NET/Admin.NET.Core/Entity/SysMenu.cs +++ b/Admin.NET/Admin.NET.Core/Entity/SysMenu.cs @@ -74,7 +74,7 @@ public partial class SysMenu : EntityBase /// [SugarColumn(ColumnDescription = "图标", Length = 128)] [MaxLength(128)] - public string? Icon { get; set; } + public string? Icon { get; set; } = "ele-Menu"; /// /// 是否内嵌 diff --git a/Admin.NET/Admin.NET.Core/Entity/SysSchedule.cs b/Admin.NET/Admin.NET.Core/Entity/SysSchedule.cs index 5a036250..c6b28a0d 100644 --- a/Admin.NET/Admin.NET.Core/Entity/SysSchedule.cs +++ b/Admin.NET/Admin.NET.Core/Entity/SysSchedule.cs @@ -20,15 +20,33 @@ public class SysSchedule : EntityTenant public long UserId { get; set; } /// - /// 日程时间 + /// 日程日期 /// - [SugarColumn(ColumnDescription = "日程时间")] + [SugarColumn(ColumnDescription = "日程日期")] public DateTime? ScheduleTime { get; set; } + /// + /// 开始时间 + /// + [SugarColumn(ColumnDescription = "开始时间", Length = 10)] + public string? StartTime { get; set; } + + /// + /// 结束时间 + /// + [SugarColumn(ColumnDescription = "结束时间", Length = 10)] + public string? EndTime { get; set; } + /// /// 日程内容 /// [SugarColumn(ColumnDescription = "日程内容", Length = 256)] [Required, MaxLength(256)] public virtual string Content { get; set; } + + /// + /// 完成状态 + /// + [SugarColumn(ColumnDescription = "完成状态")] + public FinishStatusEnum Status { get; set; } = FinishStatusEnum.UnFinish; } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs b/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs index 61e5016b..208384b6 100644 --- a/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs +++ b/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs @@ -211,6 +211,18 @@ public enum ErrorCodeEnum [ErrorCodeItemMetadata("系统默认账号禁止删除")] D1029, + /// + /// 开放接口绑定账号禁止删除 + /// + [ErrorCodeItemMetadata("开放接口绑定账号禁止删除")] + D1030, + + /// + /// 开放接口绑定租户禁止删除 + /// + [ErrorCodeItemMetadata("开放接口绑定租户禁止删除")] + D1031, + /// /// 父机构不存在 /// diff --git a/Admin.NET/Admin.NET.Core/Enum/FinishStatusEnum.cs b/Admin.NET/Admin.NET.Core/Enum/FinishStatusEnum.cs new file mode 100644 index 00000000..d92aa89e --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Enum/FinishStatusEnum.cs @@ -0,0 +1,26 @@ +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core; + +/// +/// 完成状态枚举 +/// +[Description("完成状态枚举")] +public enum FinishStatusEnum +{ + /// + /// 已完成 + /// + [Description("已完成")] + Finish = 1, + + /// + /// 未完成 + /// + [Description("未完成")] + UnFinish = 0, +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Extension/EnumExtension.cs b/Admin.NET/Admin.NET.Core/Extension/EnumExtension.cs index 57f3b06f..7b8c8ee1 100644 --- a/Admin.NET/Admin.NET.Core/Extension/EnumExtension.cs +++ b/Admin.NET/Admin.NET.Core/Extension/EnumExtension.cs @@ -1,242 +1,242 @@ -// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 -// -// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 -// -// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! - -namespace Admin.NET.Core; - -/// -/// 枚举拓展 -/// -public static class EnumExtension -{ - // 枚举显示字典缓存 - private static readonly ConcurrentDictionary> EnumDisplayValueDict = new(); - - // 枚举值字典缓存 - private static readonly ConcurrentDictionary> EnumNameValueDict = new(); - - // 枚举类型缓存 - private static ConcurrentDictionary _enumTypeDict; - - /// - /// 获取枚举对象Key与名称的字典(缓存) - /// - /// - /// - public static Dictionary GetEnumDictionary(this Type enumType) - { - if (!enumType.IsEnum) - throw new ArgumentException("Type '" + enumType.Name + "' is not an enum."); - - // 查询缓存 - var enumDic = EnumNameValueDict.ContainsKey(enumType) ? EnumNameValueDict[enumType] : new Dictionary(); - if (enumDic.Count != 0) - return enumDic; - // 取枚举类型的Key/Value字典集合 - enumDic = GetEnumDictionaryItems(enumType); - - // 缓存 - EnumNameValueDict[enumType] = enumDic; - - return enumDic; - } - - /// - /// 获取枚举对象Key与名称的字典 - /// - /// - /// - private static Dictionary GetEnumDictionaryItems(this Type enumType) - { - // 获取类型的字段,初始化一个有限长度的字典 - var enumFields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static); - Dictionary enumDic = new(enumFields.Length); - - // 遍历字段数组获取key和name - foreach (var enumField in enumFields) - { - var intValue = (int)enumField.GetValue(enumType); - enumDic[intValue] = enumField.Name; - } - - return enumDic; - } - - /// - /// 获取枚举类型key与描述的字典(缓存) - /// - /// - /// - /// - public static Dictionary GetEnumDescDictionary(this Type enumType) - { - if (!enumType.IsEnum) - throw new ArgumentException("Type '" + enumType.Name + "' is not an enum."); - - // 查询缓存 - var enumDic = EnumDisplayValueDict.ContainsKey(enumType) - ? EnumDisplayValueDict[enumType] - : new Dictionary(); - if (enumDic.Count != 0) - return enumDic; - // 取枚举类型的Key/Value字典集合 - enumDic = GetEnumDescDictionaryItems(enumType); - - // 缓存 - EnumDisplayValueDict[enumType] = enumDic; - - return enumDic; - } - - /// - /// 获取枚举类型key与描述的字典(没有描述则获取name) - /// - /// - /// - /// - private static Dictionary GetEnumDescDictionaryItems(this Type enumType) - { - // 获取类型的字段,初始化一个有限长度的字典 - var enumFields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static); - Dictionary enumDic = new(enumFields.Length); - - // 遍历字段数组获取key和name - foreach (var enumField in enumFields) - { - var intValue = (int)enumField.GetValue(enumType); - var desc = enumField.GetDescriptionValue(); - enumDic[intValue] = desc != null && !string.IsNullOrEmpty(desc.Description) ? desc.Description : enumField.Name; - } - - return enumDic; - } - - /// - /// 从程序集中查找指定枚举类型 - /// - /// - /// - /// - public static Type TryToGetEnumType(Assembly assembly, string typeName) - { - // 枚举缓存为空则重新加载枚举类型字典 - _enumTypeDict ??= LoadEnumTypeDict(assembly); - - // 按名称查找 - return _enumTypeDict.ContainsKey(typeName) ? _enumTypeDict[typeName] : null; - } - - /// - /// 从程序集中加载所有枚举类型 - /// - /// - /// - private static ConcurrentDictionary LoadEnumTypeDict(Assembly assembly) - { - // 取程序集中所有类型 - var typeArray = assembly.GetTypes(); - - // 过滤非枚举类型,转成字典格式并返回 - var dict = typeArray.Where(o => o.IsEnum).ToDictionary(o => o.Name, o => o); - ConcurrentDictionary enumTypeDict = new(dict); - return enumTypeDict; - } - - /// - /// 获取枚举的Description - /// - /// - /// - public static string GetDescription(this System.Enum value) - { - return value.GetType().GetMember(value.ToString()).FirstOrDefault()?.GetCustomAttribute() - ?.Description; - } - - /// - /// 获取枚举的Description - /// - /// - /// - public static string GetDescription(this object value) - { - return value.GetType().GetMember(value.ToString() ?? string.Empty).FirstOrDefault() - ?.GetCustomAttribute()?.Description; - } - - /// - /// 获取枚举的Theme - /// - /// - /// - public static string GetTheme(this object value) - { - return value.GetType().GetMember(value.ToString() ?? string.Empty).FirstOrDefault() - ?.GetCustomAttribute()?.Theme; - } - - /// - /// 将枚举转成枚举信息集合 - /// - /// - /// - public static List EnumToList(this Type type) - { - if (!type.IsEnum) - throw new ArgumentException("Type '" + type.Name + "' is not an enum."); - var arr = System.Enum.GetNames(type); - return arr.Select(sl => - { - var item = System.Enum.Parse(type, sl); - return new EnumEntity - { - Name = item.ToString(), - Describe = item.GetDescription() ?? item.ToString(), - Theme = item.GetTheme() ?? string.Empty, - Value = item.GetHashCode() - }; - }).ToList(); - } - - /// - /// 枚举ToList - /// - /// - /// - /// - public static List EnumToList(this Type type) - { - if (!type.IsEnum) - throw new ArgumentException("Type '" + type.Name + "' is not an enum."); - var arr = System.Enum.GetNames(type); - return arr.Select(name => (T)System.Enum.Parse(type, name)).ToList(); - } -} - -/// -/// 枚举实体 -/// -public class EnumEntity -{ - /// - /// 枚举的描述 - /// - public string Describe { set; get; } - - /// - /// 枚举的样式 - /// - public string Theme { set; get; } - - /// - /// 枚举名称 - /// - public string Name { set; get; } - - /// - /// 枚举对象的值 - /// - public int Value { set; get; } +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core; + +/// +/// 枚举拓展 +/// +public static class EnumExtension +{ + // 枚举显示字典缓存 + private static readonly ConcurrentDictionary> EnumDisplayValueDict = new(); + + // 枚举值字典缓存 + private static readonly ConcurrentDictionary> EnumNameValueDict = new(); + + // 枚举类型缓存 + private static ConcurrentDictionary _enumTypeDict; + + /// + /// 获取枚举对象Key与名称的字典(缓存) + /// + /// + /// + public static Dictionary GetEnumDictionary(this Type enumType) + { + if (!enumType.IsEnum) + throw new ArgumentException("Type '" + enumType.Name + "' is not an enum."); + + // 查询缓存 + var enumDic = EnumNameValueDict.ContainsKey(enumType) ? EnumNameValueDict[enumType] : new Dictionary(); + if (enumDic.Count != 0) + return enumDic; + // 取枚举类型的Key/Value字典集合 + enumDic = GetEnumDictionaryItems(enumType); + + // 缓存 + EnumNameValueDict[enumType] = enumDic; + + return enumDic; + } + + /// + /// 获取枚举对象Key与名称的字典 + /// + /// + /// + private static Dictionary GetEnumDictionaryItems(this Type enumType) + { + // 获取类型的字段,初始化一个有限长度的字典 + var enumFields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static); + Dictionary enumDic = new(enumFields.Length); + + // 遍历字段数组获取key和name + foreach (var enumField in enumFields) + { + var intValue = (int)enumField.GetValue(enumType); + enumDic[intValue] = enumField.Name; + } + + return enumDic; + } + + /// + /// 获取枚举类型key与描述的字典(缓存) + /// + /// + /// + /// + public static Dictionary GetEnumDescDictionary(this Type enumType) + { + if (!enumType.IsEnum) + throw new ArgumentException("Type '" + enumType.Name + "' is not an enum."); + + // 查询缓存 + var enumDic = EnumDisplayValueDict.ContainsKey(enumType) + ? EnumDisplayValueDict[enumType] + : new Dictionary(); + if (enumDic.Count != 0) + return enumDic; + // 取枚举类型的Key/Value字典集合 + enumDic = GetEnumDescDictionaryItems(enumType); + + // 缓存 + EnumDisplayValueDict[enumType] = enumDic; + + return enumDic; + } + + /// + /// 获取枚举类型key与描述的字典(没有描述则获取name) + /// + /// + /// + /// + private static Dictionary GetEnumDescDictionaryItems(this Type enumType) + { + // 获取类型的字段,初始化一个有限长度的字典 + var enumFields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static); + Dictionary enumDic = new(enumFields.Length); + + // 遍历字段数组获取key和name + foreach (var enumField in enumFields) + { + var intValue = (int)enumField.GetValue(enumType); + var desc = enumField.GetDescriptionValue(); + enumDic[intValue] = desc != null && !string.IsNullOrEmpty(desc.Description) ? desc.Description : enumField.Name; + } + + return enumDic; + } + + /// + /// 从程序集中查找指定枚举类型 + /// + /// + /// + /// + public static Type TryToGetEnumType(Assembly assembly, string typeName) + { + // 枚举缓存为空则重新加载枚举类型字典 + _enumTypeDict ??= LoadEnumTypeDict(assembly); + + // 按名称查找 + return _enumTypeDict.ContainsKey(typeName) ? _enumTypeDict[typeName] : null; + } + + /// + /// 从程序集中加载所有枚举类型 + /// + /// + /// + private static ConcurrentDictionary LoadEnumTypeDict(Assembly assembly) + { + // 取程序集中所有类型 + var typeArray = assembly.GetTypes(); + + // 过滤非枚举类型,转成字典格式并返回 + var dict = typeArray.Where(o => o.IsEnum).ToDictionary(o => o.Name, o => o); + ConcurrentDictionary enumTypeDict = new(dict); + return enumTypeDict; + } + + /// + /// 获取枚举的Description + /// + /// + /// + public static string GetDescription(this System.Enum value) + { + return value.GetType().GetMember(value.ToString()).FirstOrDefault()?.GetCustomAttribute() + ?.Description; + } + + /// + /// 获取枚举的Description + /// + /// + /// + public static string GetDescription(this object value) + { + return value.GetType().GetMember(value.ToString() ?? string.Empty).FirstOrDefault() + ?.GetCustomAttribute()?.Description; + } + + /// + /// 获取枚举的Theme + /// + /// + /// + public static string GetTheme(this object value) + { + return value.GetType().GetMember(value.ToString() ?? string.Empty).FirstOrDefault() + ?.GetCustomAttribute()?.Theme; + } + + /// + /// 将枚举转成枚举信息集合 + /// + /// + /// + public static List EnumToList(this Type type) + { + if (!type.IsEnum) + throw new ArgumentException("Type '" + type.Name + "' is not an enum."); + var arr = System.Enum.GetNames(type); + return arr.Select(sl => + { + var item = System.Enum.Parse(type, sl); + return new EnumEntity + { + Name = item.ToString(), + Describe = item.GetDescription() ?? item.ToString(), + Theme = item.GetTheme() ?? string.Empty, + Value = item.GetHashCode() + }; + }).ToList(); + } + + /// + /// 枚举ToList + /// + /// + /// + /// + public static List EnumToList(this Type type) + { + if (!type.IsEnum) + throw new ArgumentException("Type '" + type.Name + "' is not an enum."); + var arr = System.Enum.GetNames(type); + return arr.Select(name => (T)System.Enum.Parse(type, name)).ToList(); + } +} + +/// +/// 枚举实体 +/// +public class EnumEntity +{ + /// + /// 枚举的描述 + /// + public string Describe { set; get; } + + /// + /// 枚举的样式 + /// + public string Theme { set; get; } + + /// + /// 枚举名称 + /// + public string Name { set; get; } + + /// + /// 枚举对象的值 + /// + public int Value { set; get; } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs b/Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs index 3e0d5661..a619fff2 100644 --- a/Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs +++ b/Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs @@ -1,149 +1,150 @@ -// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 -// -// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 -// -// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! - -namespace Admin.NET.Core; - -/// -/// 枚举转字典 -/// -[JobDetail("job_EnumToDictJob", Description = "枚举转字典", GroupName = "default", Concurrent = false)] -[PeriodSeconds(1, TriggerId = "trigger_EnumToDictJob", Description = "枚举转字典", MaxNumberOfRuns = 1, RunOnStart = true)] -public class EnumToDictJob : IJob -{ - private readonly IServiceScopeFactory _scopeFactory; - private readonly IJsonSerializerProvider _jsonSerializer; - - public EnumToDictJob(IServiceScopeFactory scopeFactory, IJsonSerializerProvider jsonSerializer) - { - _scopeFactory = scopeFactory; - _jsonSerializer = jsonSerializer; - } - - public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) - { - using var serviceScope = _scopeFactory.CreateScope(); - var sysEnumService = serviceScope.ServiceProvider.GetRequiredService(); - var db = serviceScope.ServiceProvider.GetRequiredService().CopyNew(); - - var enumTypeList = sysEnumService.GetEnumTypeList(); - var enumCodeList = enumTypeList.Select(u => u.TypeName); - var sysDictTypeCodeList = await db.Queryable().Where(u => enumCodeList.Contains(u.Code)).Select(u => u.Code).ToListAsync(stoppingToken); - - // 更新的枚举转换字典 - var uEnumType = enumTypeList.Where(u => sysDictTypeCodeList.Contains(u.TypeName)).ToList(); - var waitUpdateSysDictType = await db.Queryable().Where(u => uEnumType.Any(a => a.TypeName == u.Code)).ToListAsync(stoppingToken); - var waitUpdateSysDictTypeDict = waitUpdateSysDictType.ToDictionary(u => u.Code, u => u); - var waitUpdateSysDictData = await db.Queryable().Where(u => uEnumType.Any(a => a.TypeName == u.DictType.Code)).ToListAsync(stoppingToken); - var uSysDictType = new List(); - var uSysDictData = new List(); - if (uEnumType.Count > 0) - { - uEnumType.ForEach(e => - { - if (waitUpdateSysDictTypeDict.TryGetValue(e.TypeName, out SysDictType value)) - { - var uDictType = value; - uDictType.Name = e.TypeDescribe; - uDictType.Remark = e.TypeRemark; - var uDictData = waitUpdateSysDictData.Where(u => u.DictTypeId == uDictType.Id).ToList(); - if (uDictData.Count > 0) - { - uDictData.ForEach(dictData => - { - var enumData = e.EnumEntities.Where(u => dictData.Code == u.Name).FirstOrDefault(); - if (enumData != null) - { - dictData.Value = enumData.Value.ToString(); - dictData.Code = enumData.Name; - dictData.OrderNo = enumData.Value + 10; - dictData.Name = enumData.Describe; - uSysDictData.Add(dictData); - } - }); - } - if (!uSysDictType.Any(u => u.Id == uDictType.Id)) - uSysDictType.Add(uDictType); - } - }); - try - { - db.BeginTran(); - - if (uSysDictType.Count > 0) - await db.Updateable(uSysDictType).ExecuteCommandAsync(stoppingToken); - - if (uSysDictData.Count > 0) - await db.Updateable(uSysDictData).ExecuteCommandAsync(stoppingToken); - - db.CommitTran(); - } - catch (Exception error) - { - db.RollbackTran(); - Log.Error($"{context.Trigger.Description}更新枚举转换字典入库错误:" + _jsonSerializer.Serialize(error)); - throw new Exception($"{context.Trigger.Description}更新枚举转换字典入库错误"); - } - } - - // 新增的枚举转换字典 - var iEnumType = enumTypeList.Where(u => !sysDictTypeCodeList.Contains(u.TypeName)).ToList(); - if (iEnumType.Count > 0) - { - // 新增字典类型 - var iDictType = iEnumType.Select(u => new SysDictType - { - Id = YitIdHelper.NextId(), - Code = u.TypeName, - Name = u.TypeDescribe, - Remark = u.TypeRemark, - Status = StatusEnum.Enable - }).ToList(); - // 新增字典数据 - var dictData = iEnumType.Join(iDictType, t1 => t1.TypeName, t2 => t2.Code, (t1, t2) => new - { - data = t1.EnumEntities.Select(u => new SysDictData - { - Id = YitIdHelper.NextId(), // 性能优化,使用BulkCopyAsync必须手动获取Id - DictTypeId = t2.Id, - Name = u.Describe, - Value = u.Value.ToString(), - Code = u.Name, - Remark = t2.Remark, - OrderNo = u.Value + 10, - TagType = "info" - }).ToList() - }).ToList(); - var iDictData = new List(); - dictData.ForEach(item => - { - iDictData.AddRange(item.data); - }); - try - { - db.BeginTran(); - - if (iDictType.Count > 0) - await db.Insertable(iDictType).ExecuteCommandAsync(stoppingToken); - - if (iDictData.Count > 0) - await db.Insertable(iDictData).ExecuteCommandAsync(stoppingToken); - - db.CommitTran(); - } - catch (Exception error) - { - db.RollbackTran(); - Log.Error($"{context.Trigger.Description}新增枚举转换字典入库错误:" + _jsonSerializer.Serialize(error)); - throw new Exception($"{context.Trigger.Description}新增枚举转换字典入库错误"); - } - } - - var originColor = Console.ForegroundColor; - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"【{DateTime.Now}】系统枚举转换字典"); - Console.ForegroundColor = originColor; - } +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core; + +/// +/// 枚举转字典 +/// +[JobDetail("job_EnumToDictJob", Description = "枚举转字典", GroupName = "default", Concurrent = false)] +[PeriodSeconds(1, TriggerId = "trigger_EnumToDictJob", Description = "枚举转字典", MaxNumberOfRuns = 1, RunOnStart = true)] +public class EnumToDictJob : IJob +{ + private readonly IServiceScopeFactory _scopeFactory; + private readonly IJsonSerializerProvider _jsonSerializer; + + public EnumToDictJob(IServiceScopeFactory scopeFactory, IJsonSerializerProvider jsonSerializer) + { + _scopeFactory = scopeFactory; + _jsonSerializer = jsonSerializer; + } + + public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) + { + using var serviceScope = _scopeFactory.CreateScope(); + var sysEnumService = serviceScope.ServiceProvider.GetRequiredService(); + var db = serviceScope.ServiceProvider.GetRequiredService().CopyNew(); + + var enumTypeList = sysEnumService.GetEnumTypeList(); + var enumCodeList = enumTypeList.Select(u => u.TypeName); + var sysDictTypeCodeList = await db.Queryable().Where(u => enumCodeList.Contains(u.Code)).Select(u => u.Code).ToListAsync(stoppingToken); + + // 更新的枚举转换字典 + var uEnumType = enumTypeList.Where(u => sysDictTypeCodeList.Contains(u.TypeName)).ToList(); + var waitUpdateSysDictType = await db.Queryable().Where(u => uEnumType.Any(a => a.TypeName == u.Code)).ToListAsync(stoppingToken); + var waitUpdateSysDictTypeDict = waitUpdateSysDictType.ToDictionary(u => u.Code, u => u); + var waitUpdateSysDictData = await db.Queryable().Where(u => uEnumType.Any(a => a.TypeName == u.DictType.Code)).ToListAsync(stoppingToken); + var uSysDictType = new List(); + var uSysDictData = new List(); + if (uEnumType.Count > 0) + { + uEnumType.ForEach(e => + { + if (waitUpdateSysDictTypeDict.TryGetValue(e.TypeName, out SysDictType value)) + { + var uDictType = value; + uDictType.Name = e.TypeDescribe; + uDictType.Remark = e.TypeRemark; + var uDictData = waitUpdateSysDictData.Where(u => u.DictTypeId == uDictType.Id).ToList(); + if (uDictData.Count > 0) + { + uDictData.ForEach(dictData => + { + var enumData = e.EnumEntities.Where(u => dictData.Code == u.Name).FirstOrDefault(); + if (enumData != null) + { + dictData.Value = enumData.Value.ToString(); + dictData.Code = enumData.Name; + dictData.OrderNo = enumData.Value + 10; + dictData.Name = enumData.Describe; + dictData.TagType = enumData.Theme != "" ? enumData.Theme : "info"; + uSysDictData.Add(dictData); + } + }); + } + if (!uSysDictType.Any(u => u.Id == uDictType.Id)) + uSysDictType.Add(uDictType); + } + }); + try + { + db.BeginTran(); + + if (uSysDictType.Count > 0) + await db.Updateable(uSysDictType).ExecuteCommandAsync(stoppingToken); + + if (uSysDictData.Count > 0) + await db.Updateable(uSysDictData).ExecuteCommandAsync(stoppingToken); + + db.CommitTran(); + } + catch (Exception error) + { + db.RollbackTran(); + Log.Error($"{context.Trigger.Description}更新枚举转换字典入库错误:" + _jsonSerializer.Serialize(error)); + throw new Exception($"{context.Trigger.Description}更新枚举转换字典入库错误"); + } + } + + // 新增的枚举转换字典 + var iEnumType = enumTypeList.Where(u => !sysDictTypeCodeList.Contains(u.TypeName)).ToList(); + if (iEnumType.Count > 0) + { + // 新增字典类型 + var iDictType = iEnumType.Select(u => new SysDictType + { + Id = YitIdHelper.NextId(), + Code = u.TypeName, + Name = u.TypeDescribe, + Remark = u.TypeRemark, + Status = StatusEnum.Enable + }).ToList(); + // 新增字典数据 + var dictData = iEnumType.Join(iDictType, t1 => t1.TypeName, t2 => t2.Code, (t1, t2) => new + { + data = t1.EnumEntities.Select(u => new SysDictData + { + Id = YitIdHelper.NextId(), // 性能优化,使用BulkCopyAsync必须手动获取Id + DictTypeId = t2.Id, + Name = u.Describe, + Value = u.Value.ToString(), + Code = u.Name, + Remark = t2.Remark, + OrderNo = u.Value + 10, + TagType = u.Theme != "" ? u.Theme : "info" + }).ToList() + }).ToList(); + var iDictData = new List(); + dictData.ForEach(item => + { + iDictData.AddRange(item.data); + }); + try + { + db.BeginTran(); + + if (iDictType.Count > 0) + await db.Insertable(iDictType).ExecuteCommandAsync(stoppingToken); + + if (iDictData.Count > 0) + await db.Insertable(iDictData).ExecuteCommandAsync(stoppingToken); + + db.CommitTran(); + } + catch (Exception error) + { + db.RollbackTran(); + Log.Error($"{context.Trigger.Description}新增枚举转换字典入库错误:" + _jsonSerializer.Serialize(error)); + throw new Exception($"{context.Trigger.Description}新增枚举转换字典入库错误"); + } + } + + var originColor = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"【{DateTime.Now}】系统枚举转换字典"); + Console.ForegroundColor = originColor; + } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Job/OnlineUserJob.cs b/Admin.NET/Admin.NET.Core/Job/OnlineUserJob.cs index e5c333c2..092e88d3 100644 --- a/Admin.NET/Admin.NET.Core/Job/OnlineUserJob.cs +++ b/Admin.NET/Admin.NET.Core/Job/OnlineUserJob.cs @@ -31,9 +31,6 @@ public class OnlineUserJob : IJob var rep = serviceScope.ServiceProvider.GetRequiredService>(); await rep.CopyNew().AsDeleteable().ExecuteCommandAsync(stoppingToken); - // 缓存租户列表 - await serviceScope.ServiceProvider.GetRequiredService().CacheTenant(); - string msg = $"【{DateTime.Now}】清理在线用户成功!服务已重启..."; var originColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Red; @@ -42,5 +39,11 @@ public class OnlineUserJob : IJob // 自定义日志 _logger.LogInformation(msg); + + // 缓存租户列表 + await serviceScope.ServiceProvider.GetRequiredService().CacheTenant(); + + // 初始化管理员角色接口资源 + await serviceScope.ServiceProvider.GetRequiredService().InitAdminRoleApi(); } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Job/RoleApiJob.cs b/Admin.NET/Admin.NET.Core/Job/RoleApiJob.cs deleted file mode 100644 index 8d830f3e..00000000 --- a/Admin.NET/Admin.NET.Core/Job/RoleApiJob.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 -// -// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 -// -// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! - -using Furion.Logging.Extensions; - -namespace Admin.NET.Core; - -/// -/// 初始化管理员角色接口资源作业任务 -/// -[JobDetail("job_roleApi", Description = "初始化管理员角色接口资源", GroupName = "default", Concurrent = false)] -[PeriodSeconds(1, TriggerId = "trigger_roleApi", Description = "初始化管理员角色接口资源", MaxNumberOfRuns = 1, RunOnStart = true)] -public class RoleApiJob : IJob -{ - private readonly IServiceScopeFactory _scopeFactory; - private readonly ILogger _logger; - - public RoleApiJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory) - { - _scopeFactory = scopeFactory; - _logger = loggerFactory.CreateLogger(CommonConst.SysLogCategoryName); - } - - public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) - { - using var serviceScope = _scopeFactory.CreateScope(); - - // 获取所有接口列表-排除租户接口 - var apiList = App.GetRequiredService().GetApiList(); - - var index = 0; - var sysRoleApis = new List(); - foreach (var baseApi in apiList) - { - foreach (var controller in baseApi.Children) - { - // 排除租户管理接口 - if (controller.Name == "sysTenant") continue; - - foreach (var api in controller.Children) - { - // 为系统管理员分配接口 - sysRoleApis.Add(new SysRoleApi { Id = 1400000000101 + index, RoleId = 1300000000101, Route = api.Route }); - index++; - } - } - } - var db = serviceScope.ServiceProvider.GetRequiredService(); - var storage = db.StorageableByObject(sysRoleApis).ToStorage(); - storage.AsInsertable.ExecuteCommand(); - storage.AsUpdateable.ExecuteCommand(); - - var originColor = Console.ForegroundColor; - Console.ForegroundColor = ConsoleColor.Blue; - Console.WriteLine($"【{DateTime.Now}】初始化管理员角色接口资源"); - Console.ForegroundColor = originColor; - - // 自定义日志 - _logger.LogInformation($"【{DateTime.Now}】初始化管理员角色接口资源"); - - await Task.CompletedTask; - } -} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs b/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs index e996d89c..1b1efbfd 100644 --- a/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs +++ b/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs @@ -28,167 +28,167 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData new SysMenu{ Id=1310000000101, Pid=0, Title="系统管理", Path="/system", Name="system", Component="Layout", Icon="ele-Setting", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=10000 }, new SysMenu{ Id=1310000000111, Pid=1310000000101, Title="账号管理", Path="/system/user", Name="sysUser", Component="/system/user/index", Icon="ele-User", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000112, Pid=1310000000111, Title="查询", Permission="sysUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000113, Pid=1310000000111, Title="编辑", Permission="sysUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000114, Pid=1310000000111, Title="增加", Permission="sysUser:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000115, Pid=1310000000111, Title="删除", Permission="sysUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000116, Pid=1310000000111, Title="详情", Permission="sysUser:detail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000117, Pid=1310000000111, Title="授权角色", Permission="sysUser:grantRole", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000118, Pid=1310000000111, Title="重置密码", Permission="sysUser:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000119, Pid=1310000000111, Title="设置状态", Permission="sysUser:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000120, Pid=1310000000111, Title="强制下线", Permission="sysOnlineUser:forceOffline", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000121, Pid=1310000000111, Title="解除锁定", Permission="sysUser:unlockLogin", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000112, Pid=1310000000111, Title="查询", Permission="sysUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000113, Pid=1310000000111, Title="编辑", Permission="sysUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000114, Pid=1310000000111, Title="增加", Permission="sysUser:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000115, Pid=1310000000111, Title="删除", Permission="sysUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000116, Pid=1310000000111, Title="详情", Permission="sysUser:detail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000117, Pid=1310000000111, Title="授权角色", Permission="sysUser:grantRole", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000118, Pid=1310000000111, Title="重置密码", Permission="sysUser:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000119, Pid=1310000000111, Title="设置状态", Permission="sysUser:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000120, Pid=1310000000111, Title="强制下线", Permission="sysOnlineUser:forceOffline", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000121, Pid=1310000000111, Title="解除锁定", Permission="sysUser:unlockLogin", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000131, Pid=1310000000101, Title="角色管理", Path="/system/role", Name="sysRole", Component="/system/role/index", Icon="ele-Help", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 }, - new SysMenu{ Id=1310000000132, Pid=1310000000131, Title="查询", Permission="sysRole:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000133, Pid=1310000000131, Title="编辑", Permission="sysRole:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000134, Pid=1310000000131, Title="增加", Permission="sysRole:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000135, Pid=1310000000131, Title="删除", Permission="sysRole:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000136, Pid=1310000000131, Title="授权菜单", Permission="sysRole:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000137, Pid=1310000000131, Title="授权数据", Permission="sysRole:grantDataScope", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000138, Pid=1310000000131, Title="设置状态", Permission="sysRole:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000139, Pid=1310000000131, Title="授权接口", Permission="sysRole:grantApi", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000132, Pid=1310000000131, Title="查询", Permission="sysRole:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000133, Pid=1310000000131, Title="编辑", Permission="sysRole:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000134, Pid=1310000000131, Title="增加", Permission="sysRole:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000135, Pid=1310000000131, Title="删除", Permission="sysRole:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000136, Pid=1310000000131, Title="授权菜单", Permission="sysRole:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000137, Pid=1310000000131, Title="授权数据", Permission="sysRole:grantDataScope", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000138, Pid=1310000000131, Title="设置状态", Permission="sysRole:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000139, Pid=1310000000131, Title="授权接口", Permission="sysRole:grantApi", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000141, Pid=1310000000101, Title="机构管理", Path="/system/org", Name="sysOrg", Component="/system/org/index", Icon="ele-OfficeBuilding", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=120 }, - //new SysMenu{ Id=1310000000142, Pid=1310000000141, Title="查询", Permission="sysOrg:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000143, Pid=1310000000141, Title="编辑", Permission="sysOrg:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000144, Pid=1310000000141, Title="增加", Permission="sysOrg:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000145, Pid=1310000000141, Title="删除", Permission="sysOrg:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + ////new SysMenu{ Id=1310000000142, Pid=1310000000141, Title="查询", Permission="sysOrg:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000143, Pid=1310000000141, Title="编辑", Permission="sysOrg:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000144, Pid=1310000000141, Title="增加", Permission="sysOrg:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000145, Pid=1310000000141, Title="删除", Permission="sysOrg:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000151, Pid=1310000000101, Title="职位管理", Path="/system/pos", Name="sysPos", Component="/system/pos/index",Icon="ele-Mug", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 }, - new SysMenu{ Id=1310000000152, Pid=1310000000151, Title="查询", Permission="sysPos:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000153, Pid=1310000000151, Title="列表", Permission="sysPos:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000154, Pid=1310000000151, Title="编辑", Permission="sysPos:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000155, Pid=1310000000151, Title="增加", Permission="sysPos:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000156, Pid=1310000000151, Title="删除", Permission="sysPos:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000152, Pid=1310000000151, Title="查询", Permission="sysPos:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000153, Pid=1310000000151, Title="列表", Permission="sysPos:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000154, Pid=1310000000151, Title="编辑", Permission="sysPos:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000155, Pid=1310000000151, Title="增加", Permission="sysPos:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000156, Pid=1310000000151, Title="删除", Permission="sysPos:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000161, Pid=1310000000101, Title="个人中心", Path="/system/userCenter", Name="sysUserCenter", Component="/system/user/component/userCenter",Icon="ele-Medal", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 }, - new SysMenu{ Id=1310000000162, Pid=1310000000161, Title="修改密码", Permission="sysUser:changePwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000163, Pid=1310000000161, Title="基本信息", Permission="sysUser:baseInfo", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000164, Pid=1310000000161, Title="电子签名", Permission="sysFile:uploadSignature", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000165, Pid=1310000000161, Title="上传头像", Permission="sysFile:uploadAvatar", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000162, Pid=1310000000161, Title="修改密码", Permission="sysUser:changePwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000163, Pid=1310000000161, Title="基本信息", Permission="sysUser:baseInfo", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000164, Pid=1310000000161, Title="电子签名", Permission="sysFile:uploadSignature", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000165, Pid=1310000000161, Title="上传头像", Permission="sysFile:uploadAvatar", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000171, Pid=1310000000101, Title="通知公告", Path="/system/notice", Name="sysNotice", Component="/system/notice/index",Icon="ele-Bell", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=150 }, - new SysMenu{ Id=1310000000172, Pid=1310000000171, Title="查询", Permission="sysNotice:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000173, Pid=1310000000171, Title="编辑", Permission="sysNotice:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000174, Pid=1310000000171, Title="增加", Permission="sysNotice:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000175, Pid=1310000000171, Title="删除", Permission="sysNotice:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000176, Pid=1310000000171, Title="发布", Permission="sysNotice:public", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000177, Pid=1310000000171, Title="撤回", Permission="sysNotice:cancel", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000172, Pid=1310000000171, Title="查询", Permission="sysNotice:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000173, Pid=1310000000171, Title="编辑", Permission="sysNotice:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000174, Pid=1310000000171, Title="增加", Permission="sysNotice:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000175, Pid=1310000000171, Title="删除", Permission="sysNotice:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000176, Pid=1310000000171, Title="发布", Permission="sysNotice:public", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000177, Pid=1310000000171, Title="撤回", Permission="sysNotice:cancel", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000181, Pid=1310000000101, Title="三方账号", Path="/system/oAuthUser", Name="sysOAuthUser", Component="/system/oAuthUser/index",Icon="ele-ChatDotRound", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=160 }, - new SysMenu{ Id=1310000000182, Pid=1310000000181, Title="查询", Permission="sysOAuthUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000183, Pid=1310000000181, Title="编辑", Permission="sysOAuthUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000184, Pid=1310000000181, Title="增加", Permission="sysOAuthUser:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000185, Pid=1310000000181, Title="删除", Permission="sysOAuthUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000182, Pid=1310000000181, Title="查询", Permission="sysOAuthUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000183, Pid=1310000000181, Title="编辑", Permission="sysOAuthUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000184, Pid=1310000000181, Title="增加", Permission="sysOAuthUser:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000185, Pid=1310000000181, Title="删除", Permission="sysOAuthUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000191, Pid=1310000000101, Title="AD域配置", Path="/system/ldap", Name="sysLdap", Component="/system/ldap/index",Icon="ele-Place", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=170 }, - new SysMenu{ Id=1310000000192, Pid=1310000000191, Title="查询", Permission="sysLdap:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000193, Pid=1310000000191, Title="详情", Permission="sysLdap:detail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 }, - new SysMenu{ Id=1310000000194, Pid=1310000000191, Title="编辑", Permission="sysLdap:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=120 }, - new SysMenu{ Id=1310000000195, Pid=1310000000191, Title="增加", Permission="sysLdap:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 }, - new SysMenu{ Id=1310000000196, Pid=1310000000191, Title="删除", Permission="sysLdap:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 }, - new SysMenu{ Id=1310000000197, Pid=1310000000191, Title="同步域账户", Permission="sysLdap:syncUser", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=150 }, - new SysMenu{ Id=1310000000198, Pid=1310000000191, Title="同步域组织", Permission="sysLdap:syncOrg", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=160 }, + //new SysMenu{ Id=1310000000192, Pid=1310000000191, Title="查询", Permission="sysLdap:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000193, Pid=1310000000191, Title="详情", Permission="sysLdap:detail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 }, + //new SysMenu{ Id=1310000000194, Pid=1310000000191, Title="编辑", Permission="sysLdap:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=120 }, + //new SysMenu{ Id=1310000000195, Pid=1310000000191, Title="增加", Permission="sysLdap:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 }, + //new SysMenu{ Id=1310000000196, Pid=1310000000191, Title="删除", Permission="sysLdap:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 }, + //new SysMenu{ Id=1310000000197, Pid=1310000000191, Title="同步域账户", Permission="sysLdap:syncUser", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=150 }, + //new SysMenu{ Id=1310000000198, Pid=1310000000191, Title="同步域组织", Permission="sysLdap:syncOrg", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=160 }, new SysMenu{ Id=1310000000301, Pid=0, Title="平台管理", Path="/platform", Name="platform", Component="Layout", Icon="ele-Menu", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=11000 }, new SysMenu{ Id=1310000000311, Pid=1310000000301, Title="租户管理", Path="/platform/tenant", Name="sysTenant", Component="/system/tenant/index", Icon="ele-School", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000312, Pid=1310000000311, Title="查询", Permission="sysTenant:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000313, Pid=1310000000311, Title="编辑", Permission="sysTenant:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000314, Pid=1310000000311, Title="增加", Permission="sysTenant:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000315, Pid=1310000000311, Title="删除", Permission="sysTenant:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000316, Pid=1310000000311, Title="授权菜单", Permission="sysTenant:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000317, Pid=1310000000311, Title="重置密码", Permission="sysTenant:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000318, Pid=1310000000311, Title="生成库", Permission="sysTenant:createDb", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000319, Pid=1310000000311, Title="设置状态", Permission="sysTenant:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000312, Pid=1310000000311, Title="查询", Permission="sysTenant:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000313, Pid=1310000000311, Title="编辑", Permission="sysTenant:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000314, Pid=1310000000311, Title="增加", Permission="sysTenant:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000315, Pid=1310000000311, Title="删除", Permission="sysTenant:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000316, Pid=1310000000311, Title="授权菜单", Permission="sysTenant:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000317, Pid=1310000000311, Title="重置密码", Permission="sysTenant:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000318, Pid=1310000000311, Title="生成库", Permission="sysTenant:createDb", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000319, Pid=1310000000311, Title="设置状态", Permission="sysTenant:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000321, Pid=1310000000301, Title="菜单管理", Path="/platform/menu", Name="sysMenu", Component="/system/menu/index", Icon="ele-Menu", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 }, - new SysMenu{ Id=1310000000322, Pid=1310000000321, Title="查询", Permission="sysMenu:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000323, Pid=1310000000321, Title="编辑", Permission="sysMenu:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000324, Pid=1310000000321, Title="增加", Permission="sysMenu:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000325, Pid=1310000000321, Title="删除", Permission="sysMenu:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000322, Pid=1310000000321, Title="查询", Permission="sysMenu:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000323, Pid=1310000000321, Title="编辑", Permission="sysMenu:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000324, Pid=1310000000321, Title="增加", Permission="sysMenu:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000325, Pid=1310000000321, Title="删除", Permission="sysMenu:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000331, Pid=1310000000301, Title="参数配置", Path="/platform/config", Name="sysConfig", Component="/system/config/index", Icon="ele-DocumentCopy", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=120 }, - new SysMenu{ Id=1310000000332, Pid=1310000000331, Title="查询", Permission="sysConfig:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000333, Pid=1310000000331, Title="编辑", Permission="sysConfig:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000334, Pid=1310000000331, Title="增加", Permission="sysConfig:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000335, Pid=1310000000331, Title="删除", Permission="sysConfig:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000332, Pid=1310000000331, Title="查询", Permission="sysConfig:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000333, Pid=1310000000331, Title="编辑", Permission="sysConfig:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000334, Pid=1310000000331, Title="增加", Permission="sysConfig:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000335, Pid=1310000000331, Title="删除", Permission="sysConfig:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000341, Pid=1310000000301, Title="字典管理", Path="/platform/dict", Name="sysDict", Component="/system/dict/index", Icon="ele-Collection", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 }, - new SysMenu{ Id=1310000000342, Pid=1310000000341, Title="查询", Permission="sysDictType:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000343, Pid=1310000000341, Title="编辑", Permission="sysDictType:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000344, Pid=1310000000341, Title="增加", Permission="sysDictType:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000345, Pid=1310000000341, Title="删除", Permission="sysDictType:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000342, Pid=1310000000341, Title="查询", Permission="sysDictType:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000343, Pid=1310000000341, Title="编辑", Permission="sysDictType:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000344, Pid=1310000000341, Title="增加", Permission="sysDictType:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000345, Pid=1310000000341, Title="删除", Permission="sysDictType:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000351, Pid=1310000000301, Title="任务调度", Path="/platform/job", Name="sysJob", Component="/system/job/index", Icon="ele-AlarmClock", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 }, - new SysMenu{ Id=1310000000352, Pid=1310000000351, Title="查询", Permission="sysJob:pageJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000353, Pid=1310000000351, Title="编辑", Permission="sysJob:updateJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000354, Pid=1310000000351, Title="增加", Permission="sysJob:addJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000355, Pid=1310000000351, Title="删除", Permission="sysJob:deleteJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000352, Pid=1310000000351, Title="查询", Permission="sysJob:pageJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000353, Pid=1310000000351, Title="编辑", Permission="sysJob:updateJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000354, Pid=1310000000351, Title="增加", Permission="sysJob:addJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000355, Pid=1310000000351, Title="删除", Permission="sysJob:deleteJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000361, Pid=1310000000301, Title="系统监控", Path="/platform/server", Name="sysServer", Component="/system/server/index", Icon="ele-Monitor", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=150 }, new SysMenu{ Id=1310000000371, Pid=1310000000301, Title="缓存管理", Path="/platform/cache", Name="sysCache", Component="/system/cache/index", Icon="ele-Loading", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=160 }, - new SysMenu{ Id=1310000000372, Pid=1310000000371, Title="查询", Permission="sysCache:keyList", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000373, Pid=1310000000371, Title="删除", Permission="sysCache:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000372, Pid=1310000000371, Title="查询", Permission="sysCache:keyList", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000373, Pid=1310000000371, Title="删除", Permission="sysCache:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000381, Pid=1310000000301, Title="行政区域", Path="/platform/region", Name="sysRegion", Component="/system/region/index", Icon="ele-LocationInformation", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=170 }, - new SysMenu{ Id=1310000000382, Pid=1310000000381, Title="查询", Permission="sysRegion:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000383, Pid=1310000000381, Title="编辑", Permission="sysRegion:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000384, Pid=1310000000381, Title="增加", Permission="sysRegion:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000385, Pid=1310000000381, Title="删除", Permission="sysRegion:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000386, Pid=1310000000381, Title="同步", Permission="sysRegion:sync", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000382, Pid=1310000000381, Title="查询", Permission="sysRegion:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000383, Pid=1310000000381, Title="编辑", Permission="sysRegion:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000384, Pid=1310000000381, Title="增加", Permission="sysRegion:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000385, Pid=1310000000381, Title="删除", Permission="sysRegion:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000386, Pid=1310000000381, Title="同步", Permission="sysRegion:sync", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000391, Pid=1310000000301, Title="文件管理", Path="/platform/file", Name="sysFile", Component="/system/file/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=180 }, - new SysMenu{ Id=1310000000392, Pid=1310000000391, Title="查询", Permission="sysFile:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000393, Pid=1310000000391, Title="上传", Permission="sysFile:uploadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000394, Pid=1310000000391, Title="下载", Permission="sysFile:downloadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000395, Pid=1310000000391, Title="删除", Permission="sysFile:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000396, Pid=1310000000391, Title="编辑", Permission="sysFile:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2023-10-27 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000392, Pid=1310000000391, Title="查询", Permission="sysFile:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000393, Pid=1310000000391, Title="上传", Permission="sysFile:uploadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000394, Pid=1310000000391, Title="下载", Permission="sysFile:downloadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000395, Pid=1310000000391, Title="删除", Permission="sysFile:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000396, Pid=1310000000391, Title="编辑", Permission="sysFile:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2023-10-27 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000401, Pid=1310000000301, Title="打印模板", Path="/platform/print", Name="sysPrint", Component="/system/print/index", Icon="ele-Printer", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=190 }, - new SysMenu{ Id=1310000000402, Pid=1310000000401, Title="查询", Permission="sysPrint:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000403, Pid=1310000000401, Title="编辑", Permission="sysPrint:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000404, Pid=1310000000401, Title="增加", Permission="sysPrint:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000405, Pid=1310000000401, Title="删除", Permission="sysPrint:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000402, Pid=1310000000401, Title="查询", Permission="sysPrint:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000403, Pid=1310000000401, Title="编辑", Permission="sysPrint:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000404, Pid=1310000000401, Title="增加", Permission="sysPrint:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000405, Pid=1310000000401, Title="删除", Permission="sysPrint:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000411, Pid=1310000000301, Title="动态插件", Path="/platform/plugin", Name="sysPlugin", Component="/system/plugin/index", Icon="ele-Connection", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=200 }, - new SysMenu{ Id=1310000000412, Pid=1310000000411, Title="查询", Permission="sysPlugin:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000413, Pid=1310000000411, Title="编辑", Permission="sysPlugin:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000414, Pid=1310000000411, Title="增加", Permission="sysPlugin:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000415, Pid=1310000000411, Title="删除", Permission="sysPlugin:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000412, Pid=1310000000411, Title="查询", Permission="sysPlugin:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000413, Pid=1310000000411, Title="编辑", Permission="sysPlugin:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000414, Pid=1310000000411, Title="增加", Permission="sysPlugin:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000415, Pid=1310000000411, Title="删除", Permission="sysPlugin:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000421, Pid=1310000000301, Title="开放接口", Path="/platform/openAccess", Name="sysOpenAccess", Component="/system/openAccess/index", Icon="ele-Link", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=210 }, - new SysMenu{ Id=1310000000422, Pid=1310000000421, Title="查询", Permission="sysOpenAccess:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000423, Pid=1310000000421, Title="编辑", Permission="sysOpenAccess:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000424, Pid=1310000000421, Title="增加", Permission="sysOpenAccess:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000425, Pid=1310000000421, Title="删除", Permission="sysOpenAccess:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000422, Pid=1310000000421, Title="查询", Permission="sysOpenAccess:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000423, Pid=1310000000421, Title="编辑", Permission="sysOpenAccess:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000424, Pid=1310000000421, Title="增加", Permission="sysOpenAccess:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000425, Pid=1310000000421, Title="删除", Permission="sysOpenAccess:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000431, Pid=1310000000301, Title="系统配置", Path="/platform/infoSetting", Name="sysInfoSetting", Component="/system/infoSetting/index", Icon="ele-Setting", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=220 }, new SysMenu{ Id=1310000000441, Pid=1310000000301, Title="微信支付", Path="/platform/wechatpay", Name="sysWechatPay", Component="/system/weChatPay/index", Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=230 }, - new SysMenu{ Id=1310000000442, Pid=1310000000441, Title="微信支付下单Native", Permission="sysWechatPay:payTransactionNative", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000443, Pid=1310000000441, Title="查询退款信息", Permission="sysWechatPay:listRefund", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000444, Pid=1310000000441, Title="获取支付订单详情(本地库)", Permission="sysWechatPay:payInfo", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000445, Pid=1310000000441, Title="获取支付订单详情(微信接口)", Permission="sysWechatPay:payInfoFromWechat", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000446, Pid=1310000000441, Title="退款申请", Permission="sysWechatPay:refundDomestic", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000442, Pid=1310000000441, Title="微信支付下单Native", Permission="sysWechatPay:payTransactionNative", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000443, Pid=1310000000441, Title="查询退款信息", Permission="sysWechatPay:listRefund", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000444, Pid=1310000000441, Title="获取支付订单详情(本地库)", Permission="sysWechatPay:payInfo", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000445, Pid=1310000000441, Title="获取支付订单详情(微信接口)", Permission="sysWechatPay:payInfoFromWechat", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000446, Pid=1310000000441, Title="退款申请", Permission="sysWechatPay:refundDomestic", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000501, Pid=0, Title="日志管理", Path="/log", Name="log", Component="Layout", Icon="ele-DocumentCopy", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=12000 }, new SysMenu{ Id=1310000000511, Pid=1310000000501, Title="访问日志", Path="/log/vislog", Name="sysVisLog", Component="/system/log/vislog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000512, Pid=1310000000511, Title="查询", Permission="sysVislog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000513, Pid=1310000000511, Title="清空", Permission="sysVislog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000512, Pid=1310000000511, Title="查询", Permission="sysVislog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000513, Pid=1310000000511, Title="清空", Permission="sysVislog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000521, Pid=1310000000501, Title="操作日志", Path="/log/oplog", Name="sysOpLog", Component="/system/log/oplog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 }, - new SysMenu{ Id=1310000000522, Pid=1310000000521, Title="查询", Permission="sysOplog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000523, Pid=1310000000521, Title="清空", Permission="sysOplog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000524, Pid=1310000000521, Title="导出", Permission="sysOplog:export", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000522, Pid=1310000000521, Title="查询", Permission="sysOplog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000523, Pid=1310000000521, Title="清空", Permission="sysOplog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000524, Pid=1310000000521, Title="导出", Permission="sysOplog:export", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000531, Pid=1310000000501, Title="异常日志", Path="/log/exlog", Name="sysExLog", Component="/system/log/exlog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=120 }, - new SysMenu{ Id=1310000000532, Pid=1310000000531, Title="查询", Permission="sysExlog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000533, Pid=1310000000531, Title="清空", Permission="sysExlog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000534, Pid=1310000000531, Title="导出", Permission="sysExlog:export", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000532, Pid=1310000000531, Title="查询", Permission="sysExlog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000533, Pid=1310000000531, Title="清空", Permission="sysExlog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000534, Pid=1310000000531, Title="导出", Permission="sysExlog:export", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000541, Pid=1310000000501, Title="差异日志", Path="/log/difflog", Name="sysDiffLog", Component="/system/log/difflog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 }, - new SysMenu{ Id=1310000000542, Pid=1310000000541, Title="查询", Permission="sysDifflog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - new SysMenu{ Id=1310000000543, Pid=1310000000541, Title="清空", Permission="sysDifflog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000542, Pid=1310000000541, Title="查询", Permission="sysDifflog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000543, Pid=1310000000541, Title="清空", Permission="sysDifflog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000601, Pid=0, Title="开发工具", Path="/develop", Name="develop", Component="Layout", Icon="ele-Cpu", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=13000 }, new SysMenu{ Id=1310000000611, Pid=1310000000601, Title="库表管理", Path="/develop/database", Name="sysDatabase", Component="/system/database/index",Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, diff --git a/Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginUserOutput.cs b/Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginUserOutput.cs index 289b88a3..3b81c123 100644 --- a/Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginUserOutput.cs +++ b/Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginUserOutput.cs @@ -87,9 +87,9 @@ public class LoginUserOutput public string PosName { get; set; } /// - /// 按钮权限集合 + /// 接口权限集合 /// - public List Buttons { get; set; } + public List Apis { get; set; } /// /// 角色集合 diff --git a/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs b/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs index b427125a..09fd1b1c 100644 --- a/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs @@ -19,7 +19,7 @@ public class SysAuthService : IDynamicApiController, ITransient private readonly SqlSugarRepository _sysUserRep; private readonly SqlSugarRepository _sysUserLdap; private readonly IHttpContextAccessor _httpContextAccessor; - private readonly SysMenuService _sysMenuService; + private readonly SysRoleService _sysRoleService; private readonly SysOnlineUserService _sysOnlineUserService; private readonly SysConfigService _sysConfigService; private readonly ICaptcha _captcha; @@ -30,7 +30,7 @@ public class SysAuthService : IDynamicApiController, ITransient SqlSugarRepository sysUserRep, SqlSugarRepository sysUserLdapRep, IHttpContextAccessor httpContextAccessor, - SysMenuService sysMenuService, + SysRoleService sysRoleService, SysOnlineUserService sysOnlineUserService, SysConfigService sysConfigService, ICaptcha captcha, @@ -41,7 +41,7 @@ public class SysAuthService : IDynamicApiController, ITransient _sysUserRep = sysUserRep; _sysUserLdap = sysUserLdapRep; _httpContextAccessor = httpContextAccessor; - _sysMenuService = sysMenuService; + _sysRoleService = sysRoleService; _sysOnlineUserService = sysOnlineUserService; _sysConfigService = sysConfigService; _captcha = captcha; @@ -265,16 +265,15 @@ public class SysAuthService : IDynamicApiController, ITransient public virtual async Task GetUserInfo() { var user = await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1011).StatusCode(401); - // 获取机构 + // 机构 var org = await _sysUserRep.ChangeRepository>().GetFirstAsync(u => u.Id == user.OrgId); - // 获取职位 + // 职位 var pos = await _sysUserRep.ChangeRepository>().GetFirstAsync(u => u.Id == user.PosId); - // 获取按钮集合 - var buttons = await _sysMenuService.GetOwnBtnPermList(); - // 获取角色集合 - var roleIds = await _sysUserRep.ChangeRepository>().AsQueryable() - .Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync(); - // 获取水印文字(若系统水印为空则全局为空) + // 角色集合 + var roleIds = await _sysUserRep.ChangeRepository>().AsQueryable().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync(); + // 接口集合 + var apis = await _sysRoleService.GetUserApiList(); + // 水印文字(若系统水印为空则禁止显示) var watermarkText = await _sysConfigService.GetConfigValue(ConfigConst.SysWebWatermark); if (!string.IsNullOrWhiteSpace(watermarkText)) watermarkText += $"-{user.RealName}"; // $"-{user.RealName}-{_httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(true)}-{DateTime.Now}"; @@ -295,7 +294,7 @@ public class SysAuthService : IDynamicApiController, ITransient OrgName = org?.Name, OrgType = org?.Type, PosName = pos?.Name, - Buttons = buttons, + Apis = apis, RoleIds = roleIds, WatermarkText = watermarkText }; diff --git a/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs b/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs index d06287af..e4f34edf 100644 --- a/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs @@ -86,7 +86,7 @@ public class SysCommonService : IDynamicApiController, ITransient foreach (ApiDescription action in actions) { // 路由 - var route = action.RelativePath.Contains('{') ? action.RelativePath[..action.RelativePath.IndexOf('{')] : action.RelativePath; // 去掉路由参数 + var route = action.RelativePath.Contains('{') ? action.RelativePath[..(action.RelativePath.IndexOf('{') - 1)] : action.RelativePath; // 去掉路由参数 route = route[(route.IndexOf('/') + 1)..]; // 去掉路由前缀 // 接口分组/控制器信息 diff --git a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs index fb2cf9d1..7262700e 100644 --- a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs +++ b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs @@ -142,6 +142,7 @@ public class SysFileService : IDynamicApiController, ITransient /// /// /// + [DisplayName("文件预览")] [AllowAnonymous] public async Task GetPreview([FromRoute] long Id) { @@ -499,6 +500,7 @@ public class SysFileService : IDynamicApiController, ITransient /// /// /// + [DisplayName("根据关联查询附件")] public async Task> GetRelationFiles([FromQuery] RelationQueryInput input) { return await _sysFileRep.AsQueryable() diff --git a/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs b/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs index dcf3849e..7b885396 100644 --- a/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs @@ -130,9 +130,6 @@ public class SysMenuService : IDynamicApiController, ITransient CheckMenuParam(sysMenu); await _sysMenuRep.InsertAsync(sysMenu); - - // 清除缓存 - DeleteMenuCache(); } /// @@ -170,9 +167,6 @@ public class SysMenuService : IDynamicApiController, ITransient CheckMenuParam(sysMenu); await _sysMenuRep.AsUpdateable(sysMenu).ExecuteCommandAsync(); - - // 清除缓存 - DeleteMenuCache(); } /// @@ -192,9 +186,6 @@ public class SysMenuService : IDynamicApiController, ITransient // 级联删除角色菜单数据 await _sysRoleMenuService.DeleteRoleMenuByMenuIdList(menuIdList); - - // 清除缓存 - DeleteMenuCache(); } /// @@ -228,58 +219,6 @@ public class SysMenuService : IDynamicApiController, ITransient } } - /// - /// 获取用户拥有按钮权限集合(缓存) 🔖 - /// - /// - [DisplayName("获取按钮权限集合")] - public async Task> GetOwnBtnPermList() - { - var userId = _userManager.UserId; - var permissions = _sysCacheService.Get>(CacheConst.KeyUserButton + userId); - if (permissions == null) - { - var menuIdList = _userManager.SuperAdmin ? new List() : await GetMenuIdList(); - permissions = menuIdList.Count > 0 || _userManager.SuperAdmin - ? await _sysMenuRep.AsQueryable() - .Where(u => u.Type == MenuTypeEnum.Btn) - .WhereIF(menuIdList.Count > 0, u => menuIdList.Contains(u.Id)) - .Select(u => u.Permission).ToListAsync() - : new List(); - _sysCacheService.Set(CacheConst.KeyUserButton + userId, permissions, TimeSpan.FromDays(7)); - } - - return permissions; - } - - /// - /// 获取系统所有按钮权限集合(缓存) - /// - /// - [NonAction] - public async Task> GetAllBtnPermList() - { - var permissions = _sysCacheService.Get>(CacheConst.KeyUserButton + 0); - if (permissions == null || permissions.Count == 0) - { - permissions = await _sysMenuRep.AsQueryable() - .Where(u => u.Type == MenuTypeEnum.Btn) - .Select(u => u.Permission).ToListAsync(); - _sysCacheService.Set(CacheConst.KeyUserButton + 0, permissions); - } - - return permissions; - } - - /// - /// 清除菜单和按钮缓存 - /// - private void DeleteMenuCache() - { - // _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserMenu); - _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserButton); - } - /// /// 获取当前用户菜单Id集合 /// diff --git a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleApiService.cs b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleApiService.cs index 9b85f273..35e7e454 100644 --- a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleApiService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleApiService.cs @@ -43,7 +43,7 @@ public class SysRoleApiService : ITransient public async Task> GetRoleApiList(List roleIdList) { return await _sysRoleApiRep.AsQueryable() - .Where(u => roleIdList.Contains(u.RoleId)) + .WhereIF(roleIdList != null, u => roleIdList.Contains(u.RoleId)) .Select(u => u.Route).ToListAsync(); } diff --git a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleMenuService.cs b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleMenuService.cs index f8dce9bf..2f25831d 100644 --- a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleMenuService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleMenuService.cs @@ -47,10 +47,6 @@ public class SysRoleMenuService : ITransient MenuId = u }).ToList(); await _sysRoleMenuRep.InsertRangeAsync(menus); - - // 清除缓存 - // _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserMenu); - _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserButton); } /// diff --git a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs index 3a0ce6a1..01168757 100644 --- a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs @@ -21,6 +21,7 @@ public class SysRoleService : IDynamicApiController, ITransient private readonly SysOrgService _sysOrgService; private readonly SysUserRoleService _sysUserRoleService; private readonly SysCacheService _sysCacheService; + private readonly SysCommonService _sysCommonService; public SysRoleService(UserManager userManager, SqlSugarRepository sysRoleRep, @@ -30,7 +31,8 @@ public class SysRoleService : IDynamicApiController, ITransient SysBaseApiService sysBaseApiService, SysOrgService sysOrgService, SysUserRoleService sysUserRoleService, - SysCacheService sysCacheService) + SysCacheService sysCacheService, + SysCommonService sysCommonService) { _userManager = userManager; _sysRoleRep = sysRoleRep; @@ -41,6 +43,7 @@ public class SysRoleService : IDynamicApiController, ITransient _sysOrgService = sysOrgService; _sysUserRoleService = sysUserRoleService; _sysCacheService = sysCacheService; + _sysCommonService = sysCommonService; } /// @@ -181,13 +184,6 @@ public class SysRoleService : IDynamicApiController, ITransient [DisplayName("授权角色菜单")] public async Task GrantMenu(RoleMenuInput input) { - // 删除与该角色相关的用户菜单缓存 - var userIdList = await _sysUserRoleService.GetUserIdList(input.Id); - foreach (var userId in userIdList) - { - _sysCacheService.Remove(CacheConst.KeyUserButton + userId); - } - await _sysRoleMenuService.GrantRoleMenu(input); } @@ -314,10 +310,24 @@ public class SysRoleService : IDynamicApiController, ITransient var apiList = _sysCacheService.Get>(CacheConst.KeyUserApi + userId); if (apiList == null) { - // 当前用户已拥有的角色集合 - var roleIds = _userManager.SuperAdmin ? null : await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId); - - apiList = await _sysRoleApiService.GetRoleApiList(roleIds); + // 超管时获取所有接口资源 + if (_userManager.SuperAdmin) + { + var allApiList = _sysCommonService.GetApiList(); + apiList = new List(); + foreach (var apiOutput in allApiList) + { + foreach (var controller in apiOutput.Children) + { + apiList.AddRange(controller.Children.Select(u => u.Route)); + } + } + } + else + { + var roleIds = await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId); + apiList = await _sysRoleApiService.GetRoleApiList(roleIds); + } _sysCacheService.Set(CacheConst.KeyUserApi + userId, apiList, TimeSpan.FromDays(7)); } return apiList; @@ -351,4 +361,37 @@ public class SysRoleService : IDynamicApiController, ITransient } return apiList; } + + /// + /// 初始化管理员角色接口资源 + /// + /// + [DisplayName("初始化管理员角色接口资源")] + public async Task InitAdminRoleApi() + { + // 获取所有接口资源 + var allApiList = _sysCommonService.GetApiList(); + + var idIndex = 0; + var sysRoleApis = new List(); + foreach (var apiOutput in allApiList) + { + foreach (var controller in apiOutput.Children) + { + if (controller.Name == "sysTenant") continue; // 排除租户管理接口 + + foreach (var api in controller.Children) + { + sysRoleApis.Add(new SysRoleApi { Id = 1400000000101 + idIndex, RoleId = 1300000000101, Route = api.Route }); + idIndex++; + } + } + } + // 更新系统管理员角色的接口资源 + var storage = _sysRoleRep.Context.StorageableByObject(sysRoleApis).ToStorage(); + storage.AsInsertable.ExecuteCommand(); + storage.AsUpdateable.ExecuteCommand(); + + await Task.CompletedTask; + } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Schedule/Dto/ScheduleInput.cs b/Admin.NET/Admin.NET.Core/Service/Schedule/Dto/ScheduleInput.cs index eb2bfee0..bba7ff21 100644 --- a/Admin.NET/Admin.NET.Core/Service/Schedule/Dto/ScheduleInput.cs +++ b/Admin.NET/Admin.NET.Core/Service/Schedule/Dto/ScheduleInput.cs @@ -6,7 +6,15 @@ namespace Admin.NET.Core.Service; -public class ScheduleInput +public class ScheduleInput : BaseIdInput +{ + /// + /// 状态 + /// + public virtual FinishStatusEnum Status { get; set; } +} + +public class ListScheduleInput { public DateTime? StartTime { get; set; } diff --git a/Admin.NET/Admin.NET.Core/Service/Schedule/SysScheduleService.cs b/Admin.NET/Admin.NET.Core/Service/Schedule/SysScheduleService.cs index 3c3e20af..448c0f5e 100644 --- a/Admin.NET/Admin.NET.Core/Service/Schedule/SysScheduleService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Schedule/SysScheduleService.cs @@ -27,13 +27,13 @@ public class SysScheduleService : IDynamicApiController, ITransient /// /// [DisplayName("获取日程列表")] - public async Task> Page(ScheduleInput input) + public async Task> Page(ListScheduleInput input) { return await _sysSchedule.AsQueryable() .Where(u => u.UserId == _userManager.UserId) .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.ScheduleTime >= input.StartTime) .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.ScheduleTime <= input.EndTime) - .OrderBy(u => u.CreateTime, OrderByType.Asc) + .OrderBy(u => u.StartTime, OrderByType.Asc) .ToListAsync(); } @@ -84,4 +84,21 @@ public class SysScheduleService : IDynamicApiController, ITransient { await _sysSchedule.DeleteAsync(u => u.Id == input.Id); } + + /// + /// 设置日程状态 + /// + /// + /// + [DisplayName("设置日程状态")] + public async Task SetStatus(ScheduleInput input) + { + if (!Enum.IsDefined(typeof(FinishStatusEnum), input.Status)) + throw Oops.Oh(ErrorCodeEnum.D3005); + + return await _sysSchedule.AsUpdateable() + .SetColumns(u => u.Status == input.Status) + .Where(u => u.Id == input.Id) + .ExecuteCommandAsync(); + } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs b/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs index 03c9c42c..5244f6bf 100644 --- a/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs @@ -265,6 +265,11 @@ public class SysTenantService : IDynamicApiController, ITransient if (input.Id.ToString() == SqlSugarConst.MainConfigId) throw Oops.Oh(ErrorCodeEnum.D1023); + // 若账号为开放接口绑定租户则禁止删除 + var isOpenAccessTenant = await _sysTenantRep.ChangeRepository>().IsAnyAsync(u => u.BindTenantId == input.Id); + if (isOpenAccessTenant) + throw Oops.Oh(ErrorCodeEnum.D1031); + await _sysTenantRep.DeleteAsync(u => u.Id == input.Id); await CacheTenant(input.Id); diff --git a/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs b/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs index 274ade07..93a8b3e2 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs @@ -37,7 +37,6 @@ public class SysUserRoleService : ITransient RoleId = u }).ToList(); await _sysUserRoleRep.InsertRangeAsync(roles); - _sysCacheService.Remove(CacheConst.KeyUserButton + input.UserId); _sysCacheService.Remove(CacheConst.KeyUserApi + input.UserId); } @@ -53,7 +52,6 @@ public class SysUserRoleService : ITransient .Select(u => u.UserId) .ForEachAsync(userId => { - _sysCacheService.Remove(CacheConst.KeyUserButton + userId); _sysCacheService.Remove(CacheConst.KeyUserApi + userId); }); @@ -68,7 +66,6 @@ public class SysUserRoleService : ITransient public async Task DeleteUserRoleByUserId(long userId) { await _sysUserRoleRep.DeleteAsync(u => u.UserId == userId); - _sysCacheService.Remove(CacheConst.KeyUserButton + userId); _sysCacheService.Remove(CacheConst.KeyUserApi + userId); } diff --git a/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs b/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs index 36fd807e..7057f872 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs @@ -172,11 +172,17 @@ public class SysUserService : IDynamicApiController, ITransient throw Oops.Oh(ErrorCodeEnum.D1014); if (user.Id == _userManager.UserId) throw Oops.Oh(ErrorCodeEnum.D1001); + // 若账号为租户默认账号则禁止删除 var isTenantUser = await _sysUserRep.ChangeRepository>().IsAnyAsync(u => u.UserId == input.Id); if (isTenantUser) throw Oops.Oh(ErrorCodeEnum.D1029); + // 若账号为开放接口绑定账号则禁止删除 + var isOpenAccessUser = await _sysUserRep.ChangeRepository>().IsAnyAsync(u => u.BindUserId == input.Id); + if (isOpenAccessUser) + throw Oops.Oh(ErrorCodeEnum.D1030); + // 强制下线 await _sysOnlineUserService.ForceOffline(user.Id); diff --git a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs index 7d684e28..33f93a2d 100644 --- a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs +++ b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs @@ -284,6 +284,7 @@ public static class SqlSugarSetup // 初始化/创建数据库 if (config.DbSettings.EnableInitDb) { + Log.Information($"初始化数据库 {config.DbType} - {config.ConfigId} - {config.ConnectionString}"); if (config.DbType != SqlSugar.DbType.Oracle) dbProvider.DbMaintenance.CreateDatabase(); } @@ -291,6 +292,7 @@ public static class SqlSugarSetup // 初始化表结构 if (config.TableSettings.EnableInitTable) { + Log.Information($"初始化表结构 {config.DbType} - {config.ConfigId}"); var entityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass && u.IsDefined(typeof(SugarTable), false)) .Where(u => !u.GetCustomAttributes().Any()) .WhereIF(config.TableSettings.EnableIncreTable, u => u.IsDefined(typeof(IncreTableAttribute), false)).ToList(); @@ -302,8 +304,10 @@ public static class SqlSugarSetup else entityTypes = entityTypes.Where(u => u.GetCustomAttribute()?.configId.ToString() == config.ConfigId.ToString()).ToList(); // 自定义的库 + int count = 0, sum = entityTypes.Count; foreach (var entityType in entityTypes) { + Console.WriteLine($"创建表 {entityType} ({config.ConfigId} - {++count}/{sum})"); if (entityType.GetCustomAttribute() == null) dbProvider.CodeFirst.InitTables(entityType); else @@ -314,10 +318,12 @@ public static class SqlSugarSetup // 初始化种子数据 if (config.SeedSettings.EnableInitSeed) { + Log.Information($"初始化种子数据 {config.DbType} - {config.ConfigId}"); var seedDataTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass && u.GetInterfaces().Any(i => i.HasImplementedRawGeneric(typeof(ISqlSugarEntitySeedData<>)))) .WhereIF(config.SeedSettings.EnableIncreSeed, u => u.IsDefined(typeof(IncreSeedAttribute), false)) .OrderBy(u => u.GetCustomAttributes(typeof(SeedDataAttribute), false).Length > 0 ? ((SeedDataAttribute)u.GetCustomAttributes(typeof(SeedDataAttribute), false)[0]).Order : 0).ToList(); + int count = 0, sum = seedDataTypes.Count; foreach (var seedType in seedDataTypes) { var entityType = seedType.GetInterfaces().First().GetGenericArguments().First(); @@ -343,19 +349,32 @@ public static class SqlSugarSetup if (seedData == null) continue; var entityInfo = dbProvider.EntityMaintenance.GetEntityInfo(entityType); - if (entityInfo.Columns.Any(u => u.IsPrimarykey)) + Console.WriteLine($"添加数据 {entityInfo.DbTableName} ({config.ConfigId} - {++count}/{sum})"); + + if (entityType.GetCustomAttribute(true) != null) { - // 按主键进行批量增加和更新 - var storage = dbProvider.StorageableByObject(seedData.ToList()).ToStorage(); - storage.AsInsertable.ExecuteCommand(); - if (seedType.GetCustomAttribute() == null) // 有忽略更新种子特性时则不更新 - storage.AsUpdateable.IgnoreColumns(entityInfo.Columns.Where(u => u.PropertyInfo.GetCustomAttribute() != null).Select(u => u.PropertyName).ToArray()).ExecuteCommand(); + //拆分表的操作需要实体类型,而通过反射很难实现 + //所以,这里将Init方法写在“种子数据类”内部,再传入 db 反射调用 + var hasInitMethod = seedType.GetMethod("Init"); + var parameters = new object[] { db }; + hasInitMethod?.Invoke(instance, parameters); } else { - // 无主键则只进行插入 - if (!dbProvider.Queryable(entityInfo.DbTableName, entityInfo.DbTableName).Any()) - dbProvider.InsertableByObject(seedData.ToList()).ExecuteCommand(); + if (entityInfo.Columns.Any(u => u.IsPrimarykey)) + { + // 按主键进行批量增加和更新 + var storage = dbProvider.StorageableByObject(seedData.ToList()).ToStorage(); + storage.AsInsertable.ExecuteCommand(); + if (seedType.GetCustomAttribute() == null) // 有忽略更新种子特性时则不更新 + storage.AsUpdateable.IgnoreColumns(entityInfo.Columns.Where(u => u.PropertyInfo.GetCustomAttribute() != null).Select(u => u.PropertyName).ToArray()).ExecuteCommand(); + } + else + { + // 无主键则只进行插入 + if (!dbProvider.Queryable(entityInfo.DbTableName, entityInfo.DbTableName).Any()) + dbProvider.InsertableByObject(seedData.ToList()).ExecuteCommand(); + } } } } diff --git a/Admin.NET/Admin.NET.Web.Core/Startup.cs b/Admin.NET/Admin.NET.Web.Core/Startup.cs index 860e2221..5b6d62bc 100644 --- a/Admin.NET/Admin.NET.Web.Core/Startup.cs +++ b/Admin.NET/Admin.NET.Web.Core/Startup.cs @@ -79,8 +79,8 @@ public class Startup : AppStartup { setting.DateFormatHandling = DateFormatHandling.IsoDateFormat; setting.DateTimeZoneHandling = DateTimeZoneHandling.Local; - setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化 // setting.Converters.AddDateTimeTypeConverters(localized: true); // 时间本地化 + setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化 setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用 // setting.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决动态对象属性名大写 // setting.NullValueHandling = NullValueHandling.Ignore; // 忽略空值 diff --git a/Web/package.json b/Web/package.json index 7bb13d1a..9dc92791 100644 --- a/Web/package.json +++ b/Web/package.json @@ -2,7 +2,7 @@ "name": "admin.net.pro", "type": "module", "version": "2.4.33", - "lastBuildTime": "2024.07.18", + "lastBuildTime": "2024.07.20", "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架", "author": "zuohuaijun", "license": "MIT", @@ -57,7 +57,7 @@ "splitpanes": "^3.1.5", "vcrontab-3": "^3.3.22", "vform3-builds": "^3.0.10", - "vue": "^3.4.32", + "vue": "^3.4.33", "vue-clipboard3": "^2.0.0", "vue-demi": "^0.14.8", "vue-grid-layout": "3.0.0-beta1", @@ -68,8 +68,8 @@ "vue-signature-pad": "^3.0.2", "vue3-tree-org": "^4.2.2", "vuedraggable": "4.0.3", - "vxe-pc-ui": "^4.0.74", - "vxe-table": "^4.7.54", + "vxe-pc-ui": "^4.0.77", + "vxe-table": "^4.7.56", "vxe-table-plugin-element": "^4.0.4", "vxe-table-plugin-export-xlsx": "^4.0.5", "xe-utils": "^3.5.28", @@ -86,7 +86,7 @@ "@typescript-eslint/parser": "^7.16.1", "@vitejs/plugin-vue": "^5.0.5", "@vitejs/plugin-vue-jsx": "^4.0.0", - "@vue/compiler-sfc": "^3.4.32", + "@vue/compiler-sfc": "^3.4.33", "code-inspector-plugin": "^0.14.2", "eslint": "^9.7.0", "eslint-plugin-vue": "^9.27.0", diff --git a/Web/src/api-services/apis/sys-menu-api.ts b/Web/src/api-services/apis/sys-menu-api.ts index 208e8794..26e5aa93 100644 --- a/Web/src/api-services/apis/sys-menu-api.ts +++ b/Web/src/api-services/apis/sys-menu-api.ts @@ -19,7 +19,6 @@ import { Configuration } from '../configuration'; import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; import { AddMenuInput } from '../models'; import { AdminResultListMenuOutput } from '../models'; -import { AdminResultListString } from '../models'; import { AdminResultListSysMenu } from '../models'; import { DeleteMenuInput } from '../models'; import { MenuTypeEnum } from '../models'; @@ -222,49 +221,6 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati options: localVarRequestOptions, }; }, - /** - * - * @summary 获取用户拥有按钮权限集合(缓存) 🔖 - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - apiSysMenuOwnBtnPermListGet: async (options: AxiosRequestConfig = {}): Promise => { - const localVarPath = `/api/sysMenu/ownBtnPermList`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, 'https://example.com'); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - if (configuration && configuration.accessToken) { - const accessToken = typeof configuration.accessToken === 'function' - ? await configuration.accessToken() - : await configuration.accessToken; - localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; - } - - const query = new URLSearchParams(localVarUrlObj.search); - for (const key in localVarQueryParameter) { - query.set(key, localVarQueryParameter[key]); - } - for (const key in options.params) { - query.set(key, options.params[key]); - } - localVarUrlObj.search = (new URLSearchParams(query)).toString(); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, - options: localVarRequestOptions, - }; - }, /** * * @summary 更新菜单 🔖 @@ -378,19 +334,6 @@ export const SysMenuApiFp = function(configuration?: Configuration) { return axios.request(axiosRequestArgs); }; }, - /** - * - * @summary 获取用户拥有按钮权限集合(缓存) 🔖 - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { - const localVarAxiosArgs = await SysMenuApiAxiosParamCreator(configuration).apiSysMenuOwnBtnPermListGet(options); - return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { - const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; - return axios.request(axiosRequestArgs); - }; - }, /** * * @summary 更新菜单 🔖 @@ -454,15 +397,6 @@ export const SysMenuApiFactory = function (configuration?: Configuration, basePa async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig): Promise> { return SysMenuApiFp(configuration).apiSysMenuLoginMenuTreeGet(options).then((request) => request(axios, basePath)); }, - /** - * - * @summary 获取用户拥有按钮权限集合(缓存) 🔖 - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig): Promise> { - return SysMenuApiFp(configuration).apiSysMenuOwnBtnPermListGet(options).then((request) => request(axios, basePath)); - }, /** * * @summary 更新菜单 🔖 @@ -527,16 +461,6 @@ export class SysMenuApi extends BaseAPI { public async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig) : Promise> { return SysMenuApiFp(this.configuration).apiSysMenuLoginMenuTreeGet(options).then((request) => request(this.axios, this.basePath)); } - /** - * - * @summary 获取用户拥有按钮权限集合(缓存) 🔖 - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SysMenuApi - */ - public async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig) : Promise> { - return SysMenuApiFp(this.configuration).apiSysMenuOwnBtnPermListGet(options).then((request) => request(this.axios, this.basePath)); - } /** * * @summary 更新菜单 🔖 diff --git a/Web/src/api-services/apis/sys-role-api.ts b/Web/src/api-services/apis/sys-role-api.ts index 09bb98eb..49d5be8a 100644 --- a/Web/src/api-services/apis/sys-role-api.ts +++ b/Web/src/api-services/apis/sys-role-api.ts @@ -321,6 +321,49 @@ export const SysRoleApiAxiosParamCreator = function (configuration?: Configurati options: localVarRequestOptions, }; }, + /** + * + * @summary 初始化管理员角色接口资源 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysRoleInitAdminRoleApiPost: async (options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysRole/initAdminRoleApi`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, 'https://example.com'); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, /** * * @summary 获取角色列表 🔖 @@ -862,6 +905,19 @@ export const SysRoleApiFp = function(configuration?: Configuration) { return axios.request(axiosRequestArgs); }; }, + /** + * + * @summary 初始化管理员角色接口资源 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysRoleInitAdminRoleApiPost(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysRoleApiAxiosParamCreator(configuration).apiSysRoleInitAdminRoleApiPost(options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, /** * * @summary 获取角色列表 🔖 @@ -1057,6 +1113,15 @@ export const SysRoleApiFactory = function (configuration?: Configuration, basePa async apiSysRoleGrantMenuPost(body?: RoleMenuInput, options?: AxiosRequestConfig): Promise> { return SysRoleApiFp(configuration).apiSysRoleGrantMenuPost(body, options).then((request) => request(axios, basePath)); }, + /** + * + * @summary 初始化管理员角色接口资源 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysRoleInitAdminRoleApiPost(options?: AxiosRequestConfig): Promise> { + return SysRoleApiFp(configuration).apiSysRoleInitAdminRoleApiPost(options).then((request) => request(axios, basePath)); + }, /** * * @summary 获取角色列表 🔖 @@ -1223,6 +1288,16 @@ export class SysRoleApi extends BaseAPI { public async apiSysRoleGrantMenuPost(body?: RoleMenuInput, options?: AxiosRequestConfig) : Promise> { return SysRoleApiFp(this.configuration).apiSysRoleGrantMenuPost(body, options).then((request) => request(this.axios, this.basePath)); } + /** + * + * @summary 初始化管理员角色接口资源 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysRoleApi + */ + public async apiSysRoleInitAdminRoleApiPost(options?: AxiosRequestConfig) : Promise> { + return SysRoleApiFp(this.configuration).apiSysRoleInitAdminRoleApiPost(options).then((request) => request(this.axios, this.basePath)); + } /** * * @summary 获取角色列表 🔖 diff --git a/Web/src/api-services/apis/sys-schedule-api.ts b/Web/src/api-services/apis/sys-schedule-api.ts index a6e6e433..a24f4f0f 100644 --- a/Web/src/api-services/apis/sys-schedule-api.ts +++ b/Web/src/api-services/apis/sys-schedule-api.ts @@ -18,9 +18,11 @@ import { Configuration } from '../configuration'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; import { AddScheduleInput } from '../models'; +import { AdminResultInt32 } from '../models'; import { AdminResultListSysSchedule } from '../models'; import { AdminResultSysSchedule } from '../models'; import { DeleteScheduleInput } from '../models'; +import { ListScheduleInput } from '../models'; import { ScheduleInput } from '../models'; import { UpdateScheduleInput } from '../models'; /** @@ -177,12 +179,60 @@ export const SysScheduleApiAxiosParamCreator = function (configuration?: Configu /** * * @summary 获取日程列表 + * @param {ListScheduleInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysSchedulePagePost: async (body?: ListScheduleInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysSchedule/page`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, 'https://example.com'); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + localVarHeaderParameter['Content-Type'] = 'application/json-patch+json'; + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json'; + localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || ""); + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 设置日程状态 * @param {ScheduleInput} [body] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - apiSysSchedulePagePost: async (body?: ScheduleInput, options: AxiosRequestConfig = {}): Promise => { - const localVarPath = `/api/sysSchedule/page`; + apiSysScheduleSetStatusPost: async (body?: ScheduleInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysSchedule/setStatus`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, 'https://example.com'); let baseOptions; @@ -324,12 +374,26 @@ export const SysScheduleApiFp = function(configuration?: Configuration) { /** * * @summary 获取日程列表 + * @param {ListScheduleInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysSchedulePagePost(body?: ListScheduleInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysScheduleApiAxiosParamCreator(configuration).apiSysSchedulePagePost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, + /** + * + * @summary 设置日程状态 * @param {ScheduleInput} [body] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysSchedulePagePost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { - const localVarAxiosArgs = await SysScheduleApiAxiosParamCreator(configuration).apiSysSchedulePagePost(body, options); + async apiSysScheduleSetStatusPost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysScheduleApiAxiosParamCreator(configuration).apiSysScheduleSetStatusPost(body, options); return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; return axios.request(axiosRequestArgs); @@ -391,12 +455,22 @@ export const SysScheduleApiFactory = function (configuration?: Configuration, ba /** * * @summary 获取日程列表 + * @param {ListScheduleInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysSchedulePagePost(body?: ListScheduleInput, options?: AxiosRequestConfig): Promise> { + return SysScheduleApiFp(configuration).apiSysSchedulePagePost(body, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 设置日程状态 * @param {ScheduleInput} [body] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysSchedulePagePost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise> { - return SysScheduleApiFp(configuration).apiSysSchedulePagePost(body, options).then((request) => request(axios, basePath)); + async apiSysScheduleSetStatusPost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise> { + return SysScheduleApiFp(configuration).apiSysScheduleSetStatusPost(body, options).then((request) => request(axios, basePath)); }, /** * @@ -454,13 +528,24 @@ export class SysScheduleApi extends BaseAPI { /** * * @summary 获取日程列表 + * @param {ListScheduleInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysScheduleApi + */ + public async apiSysSchedulePagePost(body?: ListScheduleInput, options?: AxiosRequestConfig) : Promise> { + return SysScheduleApiFp(this.configuration).apiSysSchedulePagePost(body, options).then((request) => request(this.axios, this.basePath)); + } + /** + * + * @summary 设置日程状态 * @param {ScheduleInput} [body] * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof SysScheduleApi */ - public async apiSysSchedulePagePost(body?: ScheduleInput, options?: AxiosRequestConfig) : Promise> { - return SysScheduleApiFp(this.configuration).apiSysSchedulePagePost(body, options).then((request) => request(this.axios, this.basePath)); + public async apiSysScheduleSetStatusPost(body?: ScheduleInput, options?: AxiosRequestConfig) : Promise> { + return SysScheduleApiFp(this.configuration).apiSysScheduleSetStatusPost(body, options).then((request) => request(this.axios, this.basePath)); } /** * diff --git a/Web/src/api-services/models/add-schedule-input.ts b/Web/src/api-services/models/add-schedule-input.ts index 65934470..ded9e6da 100644 --- a/Web/src/api-services/models/add-schedule-input.ts +++ b/Web/src/api-services/models/add-schedule-input.ts @@ -12,6 +12,7 @@ * Do not edit the class manually. */ +import { FinishStatusEnum } from './finish-status-enum'; /** * * @@ -101,13 +102,35 @@ export interface AddScheduleInput { userId?: number; /** - * 日程时间 + * 日程日期 * * @type {Date} * @memberof AddScheduleInput */ scheduleTime?: Date | null; + /** + * 开始时间 + * + * @type {string} + * @memberof AddScheduleInput + */ + startTime?: string | null; + + /** + * 结束时间 + * + * @type {string} + * @memberof AddScheduleInput + */ + endTime?: string | null; + + /** + * @type {FinishStatusEnum} + * @memberof AddScheduleInput + */ + status?: FinishStatusEnum; + /** * 日程内容 * diff --git a/Web/src/api-services/models/finish-status-enum.ts b/Web/src/api-services/models/finish-status-enum.ts new file mode 100644 index 00000000..029aa2d9 --- /dev/null +++ b/Web/src/api-services/models/finish-status-enum.ts @@ -0,0 +1,24 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + +/** + * 完成状态枚举
 未完成 UnFinish = 0
 已完成 Finish = 1
+ * @export + * @enum {string} + */ +export enum FinishStatusEnum { + NUMBER_0 = 0, + NUMBER_1 = 1 +} + diff --git a/Web/src/api-services/models/index.ts b/Web/src/api-services/models/index.ts index 7cfa56e3..a29d34d1 100644 --- a/Web/src/api-services/models/index.ts +++ b/Web/src/api-services/models/index.ts @@ -190,6 +190,7 @@ export * from './file-output'; export * from './filter'; export * from './filter-logic-enum'; export * from './filter-operator-enum'; +export * from './finish-status-enum'; export * from './from'; export * from './gen-auth-url-input'; export * from './gender-enum'; @@ -211,6 +212,7 @@ export * from './job-detail-input'; export * from './job-detail-output'; export * from './job-trigger-input'; export * from './layout-kind'; +export * from './list-schedule-input'; export * from './log-input'; export * from './log-level'; export * from './log-vis-output'; diff --git a/Web/src/api-services/models/list-schedule-input.ts b/Web/src/api-services/models/list-schedule-input.ts new file mode 100644 index 00000000..e0338c6e --- /dev/null +++ b/Web/src/api-services/models/list-schedule-input.ts @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + + /** + * + * + * @export + * @interface ListScheduleInput + */ +export interface ListScheduleInput { + + /** + * @type {Date} + * @memberof ListScheduleInput + */ + startTime?: Date | null; + + /** + * @type {Date} + * @memberof ListScheduleInput + */ + endTime?: Date | null; +} diff --git a/Web/src/api-services/models/login-user-output.ts b/Web/src/api-services/models/login-user-output.ts index a1f448ad..594becad 100644 --- a/Web/src/api-services/models/login-user-output.ts +++ b/Web/src/api-services/models/login-user-output.ts @@ -140,12 +140,12 @@ export interface LoginUserOutput { posName?: string | null; /** - * 按钮权限集合 + * 接口权限集合 * * @type {Array} * @memberof LoginUserOutput */ - buttons?: Array | null; + apis?: Array | null; /** * 角色集合 diff --git a/Web/src/api-services/models/schedule-input.ts b/Web/src/api-services/models/schedule-input.ts index 56c8cbf6..1357d0c2 100644 --- a/Web/src/api-services/models/schedule-input.ts +++ b/Web/src/api-services/models/schedule-input.ts @@ -12,6 +12,7 @@ * Do not edit the class manually. */ +import { FinishStatusEnum } from './finish-status-enum'; /** * * @@ -21,14 +22,16 @@ export interface ScheduleInput { /** - * @type {Date} + * 主键Id + * + * @type {number} * @memberof ScheduleInput */ - startTime?: Date | null; + id: number; /** - * @type {Date} + * @type {FinishStatusEnum} * @memberof ScheduleInput */ - endTime?: Date | null; + status?: FinishStatusEnum; } diff --git a/Web/src/api-services/models/sys-schedule.ts b/Web/src/api-services/models/sys-schedule.ts index 2b1ee14b..be23b7fd 100644 --- a/Web/src/api-services/models/sys-schedule.ts +++ b/Web/src/api-services/models/sys-schedule.ts @@ -12,6 +12,7 @@ * Do not edit the class manually. */ +import { FinishStatusEnum } from './finish-status-enum'; /** * 系统日程表 * @@ -101,13 +102,29 @@ export interface SysSchedule { userId?: number; /** - * 日程时间 + * 日程日期 * * @type {Date} * @memberof SysSchedule */ scheduleTime?: Date | null; + /** + * 开始时间 + * + * @type {string} + * @memberof SysSchedule + */ + startTime?: string | null; + + /** + * 结束时间 + * + * @type {string} + * @memberof SysSchedule + */ + endTime?: string | null; + /** * 日程内容 * @@ -115,4 +132,10 @@ export interface SysSchedule { * @memberof SysSchedule */ content: string; + + /** + * @type {FinishStatusEnum} + * @memberof SysSchedule + */ + status?: FinishStatusEnum; } diff --git a/Web/src/api-services/models/update-schedule-input.ts b/Web/src/api-services/models/update-schedule-input.ts index 091f849d..87907a42 100644 --- a/Web/src/api-services/models/update-schedule-input.ts +++ b/Web/src/api-services/models/update-schedule-input.ts @@ -12,6 +12,7 @@ * Do not edit the class manually. */ +import { FinishStatusEnum } from './finish-status-enum'; /** * * @@ -101,13 +102,35 @@ export interface UpdateScheduleInput { userId?: number; /** - * 日程时间 + * 日程日期 * * @type {Date} * @memberof UpdateScheduleInput */ scheduleTime?: Date | null; + /** + * 开始时间 + * + * @type {string} + * @memberof UpdateScheduleInput + */ + startTime?: string | null; + + /** + * 结束时间 + * + * @type {string} + * @memberof UpdateScheduleInput + */ + endTime?: string | null; + + /** + * @type {FinishStatusEnum} + * @memberof UpdateScheduleInput + */ + status?: FinishStatusEnum; + /** * 日程内容 * diff --git a/Web/src/components/auth/auth.vue b/Web/src/components/auth/auth.vue index 05858885..b49a1e0e 100644 --- a/Web/src/components/auth/auth.vue +++ b/Web/src/components/auth/auth.vue @@ -1,5 +1,5 @@ diff --git a/Web/src/components/auth/authAll.vue b/Web/src/components/auth/authAll.vue index 911a7975..9239af16 100644 --- a/Web/src/components/auth/authAll.vue +++ b/Web/src/components/auth/authAll.vue @@ -1,5 +1,5 @@ diff --git a/Web/src/components/auth/auths.vue b/Web/src/components/auth/auths.vue index 41b8b278..284b7d59 100644 --- a/Web/src/components/auth/auths.vue +++ b/Web/src/components/auth/auths.vue @@ -1,5 +1,5 @@ diff --git a/Web/src/views/home/widgets/components/scheduleEdit.vue b/Web/src/views/home/widgets/components/scheduleEdit.vue index cee9a032..c0fd2f0f 100644 --- a/Web/src/views/home/widgets/components/scheduleEdit.vue +++ b/Web/src/views/home/widgets/components/scheduleEdit.vue @@ -9,9 +9,20 @@ - + - + + + + + + + + + + + + @@ -34,7 +45,7 @@ + + diff --git a/Web/src/views/system/cache/index.vue b/Web/src/views/system/cache/index.vue index 66eae3c6..ffad7ae1 100644 --- a/Web/src/views/system/cache/index.vue +++ b/Web/src/views/system/cache/index.vue @@ -7,7 +7,7 @@
{{ `缓存数据${state.cacheKey ? `【${state.cacheKey}】` : ''}` }} - 删除缓存 + 删除缓存
diff --git a/Web/src/views/system/config/index.vue b/Web/src/views/system/config/index.vue index aa048a6e..6614afab 100644 --- a/Web/src/views/system/config/index.vue +++ b/Web/src/views/system/config/index.vue @@ -28,7 +28,7 @@ - 查询 + 查询 重置 @@ -38,7 +38,7 @@ @@ -54,10 +54,10 @@ diff --git a/Web/src/views/system/dict/index.vue b/Web/src/views/system/dict/index.vue index 5d6e95d3..3491672b 100644 --- a/Web/src/views/system/dict/index.vue +++ b/Web/src/views/system/dict/index.vue @@ -21,7 +21,7 @@ - 查询 + 查询 重置 @@ -32,7 +32,7 @@ @@ -77,7 +77,7 @@ - 查询 + 查询 重置 @@ -88,7 +88,7 @@ diff --git a/Web/src/views/system/file/index.vue b/Web/src/views/system/file/index.vue index 5d8225d5..c9065031 100644 --- a/Web/src/views/system/file/index.vue +++ b/Web/src/views/system/file/index.vue @@ -26,7 +26,7 @@ - 查询 + 查询 重置 @@ -36,7 +36,7 @@ diff --git a/Web/src/views/system/job/index.vue b/Web/src/views/system/job/index.vue index 2d628a94..81ce75c0 100644 --- a/Web/src/views/system/job/index.vue +++ b/Web/src/views/system/job/index.vue @@ -19,7 +19,7 @@ - 查询 + 查询 重置 @@ -31,7 +31,7 @@