Merge pull request 'main' (#6) from Admin.NET/Admin.NET.Pro:main into main

Reviewed-on: http://101.43.53.74:3000/shuerchoi/Admin.NET.Pro/pulls/6
This commit is contained in:
shuerchoi 2024-07-22 09:57:20 +08:00
commit bb46b55891
78 changed files with 1353 additions and 994 deletions

View File

@ -4,7 +4,7 @@
// SqlSugar PostgreSQL // SqlSugar PostgreSQL
// https://www.connectionstrings.com/ // https://www.connectionstrings.com/
"DbConnection": { "DbConnection": {
"EnableConsoleSql": true, // SQL "EnableConsoleSql": false, // SQL
"ConnectionConfigs": [ "ConnectionConfigs": [
{ {
//"ConfigId": "1300000000001", // - //"ConfigId": "1300000000001", // -

View File

@ -22,7 +22,7 @@ public class AppAuthService : IDynamicApiController, ITransient
private readonly AppUserManager _appUserManager; private readonly AppUserManager _appUserManager;
private readonly SqlSugarRepository<SysUser> _sysUserRep; private readonly SqlSugarRepository<SysUser> _sysUserRep;
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
private readonly SysMenuService _sysMenuService; private readonly SysRoleService _sysRoleService;
private readonly SysOnlineUserService _sysOnlineUserService; private readonly SysOnlineUserService _sysOnlineUserService;
private readonly SysConfigService _sysConfigService; private readonly SysConfigService _sysConfigService;
private readonly ICaptcha _captcha; private readonly ICaptcha _captcha;
@ -31,7 +31,7 @@ public class AppAuthService : IDynamicApiController, ITransient
public AppAuthService(AppUserManager appUserManager, public AppAuthService(AppUserManager appUserManager,
SqlSugarRepository<SysUser> sysUserRep, SqlSugarRepository<SysUser> sysUserRep,
IHttpContextAccessor httpContextAccessor, IHttpContextAccessor httpContextAccessor,
SysMenuService sysMenuService, SysRoleService sysRoleService,
SysOnlineUserService sysOnlineUserService, SysOnlineUserService sysOnlineUserService,
SysConfigService sysConfigService, SysConfigService sysConfigService,
ICaptcha captcha, ICaptcha captcha,
@ -40,7 +40,7 @@ public class AppAuthService : IDynamicApiController, ITransient
_appUserManager = appUserManager; _appUserManager = appUserManager;
_sysUserRep = sysUserRep; _sysUserRep = sysUserRep;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
_sysMenuService = sysMenuService; _sysRoleService = sysRoleService;
_sysOnlineUserService = sysOnlineUserService; _sysOnlineUserService = sysOnlineUserService;
_sysConfigService = sysConfigService; _sysConfigService = sysConfigService;
_captcha = captcha; _captcha = captcha;
@ -201,15 +201,14 @@ public class AppAuthService : IDynamicApiController, ITransient
public virtual async Task<LoginUserOutput> GetUserInfo() public virtual async Task<LoginUserOutput> GetUserInfo()
{ {
var user = await _sysUserRep.GetFirstAsync(u => u.Id == _appUserManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1011).StatusCode(401); var user = await _sysUserRep.GetFirstAsync(u => u.Id == _appUserManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1011).StatusCode(401);
// 获取机构 // 机构
var org = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysOrg>>().GetFirstAsync(u => u.Id == user.OrgId); var org = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysOrg>>().GetFirstAsync(u => u.Id == user.OrgId);
// 获取职位 // 职位
var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetFirstAsync(u => u.Id == user.PosId); var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetFirstAsync(u => u.Id == user.PosId);
// 获取按钮集合 // 角色集合
var buttons = await _sysMenuService.GetOwnBtnPermList(); var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
// 获取角色集合 // 接口集合
var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable() var apis = await _sysRoleService.GetUserApiList();
.Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
return new LoginUserOutput return new LoginUserOutput
{ {
@ -227,7 +226,7 @@ public class AppAuthService : IDynamicApiController, ITransient
OrgName = org?.Name, OrgName = org?.Name,
OrgType = org?.Type, OrgType = org?.Type,
PosName = pos?.Name, PosName = pos?.Name,
Buttons = buttons, Apis = apis,
RoleIds = roleIds RoleIds = roleIds
}; };
} }

View File

@ -18,9 +18,9 @@
<PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" /> <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" /> <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.14.6" /> <PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.14.6" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.4.6" /> <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.4.7" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.4.6" /> <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.4.7" />
<PackageReference Include="Furion.Pure" Version="4.9.4.6" /> <PackageReference Include="Furion.Pure" Version="4.9.4.7" />
<PackageReference Include="Hardware.Info" Version="100.1.0.1" /> <PackageReference Include="Hardware.Info" Version="100.1.0.1" />
<PackageReference Include="IPTools.China" Version="1.6.0" /> <PackageReference Include="IPTools.China" Version="1.6.0" />
<PackageReference Include="IPTools.International" Version="1.6.0" /> <PackageReference Include="IPTools.International" Version="1.6.0" />
@ -38,7 +38,7 @@
<PackageReference Include="SqlSugarCore" Version="5.1.4.166" /> <PackageReference Include="SqlSugarCore" Version="5.1.4.166" />
<PackageReference Include="SSH.NET" Version="2024.1.0" /> <PackageReference Include="SSH.NET" Version="2024.1.0" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.3" /> <PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.3" />
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1049" /> <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1051" />
<PackageReference Include="UAParser" Version="3.1.47" /> <PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" /> <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
</ItemGroup> </ItemGroup>

View File

@ -20,26 +20,3 @@ public class ThemeAttribute : Attribute
this.Theme = theme; this.Theme = theme;
} }
} }
public static class ThemeExtend
{
/// <summary>
/// 扩展方法
/// </summary>
/// <param name="enumValue"></param>
/// <returns></returns>
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;
}
}
}

View File

@ -11,11 +11,6 @@ namespace Admin.NET.Core;
/// </summary> /// </summary>
public class CacheConst public class CacheConst
{ {
/// <summary>
/// 用户权限缓存(按钮集合)
/// </summary>
public const string KeyUserButton = "sys_user_button:";
/// <summary> /// <summary>
/// 用户接口缓存(接口集合) /// 用户接口缓存(接口集合)
/// </summary> /// </summary>

View File

@ -74,7 +74,7 @@ public partial class SysMenu : EntityBase
/// </summary> /// </summary>
[SugarColumn(ColumnDescription = "图标", Length = 128)] [SugarColumn(ColumnDescription = "图标", Length = 128)]
[MaxLength(128)] [MaxLength(128)]
public string? Icon { get; set; } public string? Icon { get; set; } = "ele-Menu";
/// <summary> /// <summary>
/// 是否内嵌 /// 是否内嵌

View File

@ -20,15 +20,33 @@ public class SysSchedule : EntityTenant
public long UserId { get; set; } public long UserId { get; set; }
/// <summary> /// <summary>
/// 日程时间 /// 日程日期
/// </summary> /// </summary>
[SugarColumn(ColumnDescription = "日程时间")] [SugarColumn(ColumnDescription = "日程日期")]
public DateTime? ScheduleTime { get; set; } public DateTime? ScheduleTime { get; set; }
/// <summary>
/// 开始时间
/// </summary>
[SugarColumn(ColumnDescription = "开始时间", Length = 10)]
public string? StartTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
[SugarColumn(ColumnDescription = "结束时间", Length = 10)]
public string? EndTime { get; set; }
/// <summary> /// <summary>
/// 日程内容 /// 日程内容
/// </summary> /// </summary>
[SugarColumn(ColumnDescription = "日程内容", Length = 256)] [SugarColumn(ColumnDescription = "日程内容", Length = 256)]
[Required, MaxLength(256)] [Required, MaxLength(256)]
public virtual string Content { get; set; } public virtual string Content { get; set; }
/// <summary>
/// 完成状态
/// </summary>
[SugarColumn(ColumnDescription = "完成状态")]
public FinishStatusEnum Status { get; set; } = FinishStatusEnum.UnFinish;
} }

View File

@ -211,6 +211,18 @@ public enum ErrorCodeEnum
[ErrorCodeItemMetadata("系统默认账号禁止删除")] [ErrorCodeItemMetadata("系统默认账号禁止删除")]
D1029, D1029,
/// <summary>
/// 开放接口绑定账号禁止删除
/// </summary>
[ErrorCodeItemMetadata("开放接口绑定账号禁止删除")]
D1030,
/// <summary>
/// 开放接口绑定租户禁止删除
/// </summary>
[ErrorCodeItemMetadata("开放接口绑定租户禁止删除")]
D1031,
/// <summary> /// <summary>
/// 父机构不存在 /// 父机构不存在
/// </summary> /// </summary>

View File

@ -0,0 +1,26 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 完成状态枚举
/// </summary>
[Description("完成状态枚举")]
public enum FinishStatusEnum
{
/// <summary>
/// 已完成
/// </summary>
[Description("已完成")]
Finish = 1,
/// <summary>
/// 未完成
/// </summary>
[Description("未完成")]
UnFinish = 0,
}

View File

@ -60,6 +60,7 @@ public class EnumToDictJob : IJob
dictData.Code = enumData.Name; dictData.Code = enumData.Name;
dictData.OrderNo = enumData.Value + 10; dictData.OrderNo = enumData.Value + 10;
dictData.Name = enumData.Describe; dictData.Name = enumData.Describe;
dictData.TagType = enumData.Theme != "" ? enumData.Theme : "info";
uSysDictData.Add(dictData); uSysDictData.Add(dictData);
} }
}); });
@ -113,7 +114,7 @@ public class EnumToDictJob : IJob
Code = u.Name, Code = u.Name,
Remark = t2.Remark, Remark = t2.Remark,
OrderNo = u.Value + 10, OrderNo = u.Value + 10,
TagType = "info" TagType = u.Theme != "" ? u.Theme : "info"
}).ToList() }).ToList()
}).ToList(); }).ToList();
var iDictData = new List<SysDictData>(); var iDictData = new List<SysDictData>();

View File

@ -31,9 +31,6 @@ public class OnlineUserJob : IJob
var rep = serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysOnlineUser>>(); var rep = serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysOnlineUser>>();
await rep.CopyNew().AsDeleteable().ExecuteCommandAsync(stoppingToken); await rep.CopyNew().AsDeleteable().ExecuteCommandAsync(stoppingToken);
// 缓存租户列表
await serviceScope.ServiceProvider.GetRequiredService<SysTenantService>().CacheTenant();
string msg = $"【{DateTime.Now}】清理在线用户成功!服务已重启..."; string msg = $"【{DateTime.Now}】清理在线用户成功!服务已重启...";
var originColor = Console.ForegroundColor; var originColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Red;
@ -42,5 +39,11 @@ public class OnlineUserJob : IJob
// 自定义日志 // 自定义日志
_logger.LogInformation(msg); _logger.LogInformation(msg);
// 缓存租户列表
await serviceScope.ServiceProvider.GetRequiredService<SysTenantService>().CacheTenant();
// 初始化管理员角色接口资源
await serviceScope.ServiceProvider.GetRequiredService<SysRoleService>().InitAdminRoleApi();
} }
} }

View File

@ -1,66 +0,0 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Furion.Logging.Extensions;
namespace Admin.NET.Core;
/// <summary>
/// 初始化管理员角色接口资源作业任务
/// </summary>
[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<SysCommonService>().GetApiList();
var index = 0;
var sysRoleApis = new List<SysRoleApi>();
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<ISqlSugarClient>();
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;
}
}

View File

@ -28,167 +28,167 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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=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 }, 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 },

View File

@ -87,9 +87,9 @@ public class LoginUserOutput
public string PosName { get; set; } public string PosName { get; set; }
/// <summary> /// <summary>
/// 按钮权限集合 /// 接口权限集合
/// </summary> /// </summary>
public List<string> Buttons { get; set; } public List<string> Apis { get; set; }
/// <summary> /// <summary>
/// 角色集合 /// 角色集合

View File

@ -19,7 +19,7 @@ public class SysAuthService : IDynamicApiController, ITransient
private readonly SqlSugarRepository<SysUser> _sysUserRep; private readonly SqlSugarRepository<SysUser> _sysUserRep;
private readonly SqlSugarRepository<SysUserLdap> _sysUserLdap; private readonly SqlSugarRepository<SysUserLdap> _sysUserLdap;
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
private readonly SysMenuService _sysMenuService; private readonly SysRoleService _sysRoleService;
private readonly SysOnlineUserService _sysOnlineUserService; private readonly SysOnlineUserService _sysOnlineUserService;
private readonly SysConfigService _sysConfigService; private readonly SysConfigService _sysConfigService;
private readonly ICaptcha _captcha; private readonly ICaptcha _captcha;
@ -30,7 +30,7 @@ public class SysAuthService : IDynamicApiController, ITransient
SqlSugarRepository<SysUser> sysUserRep, SqlSugarRepository<SysUser> sysUserRep,
SqlSugarRepository<SysUserLdap> sysUserLdapRep, SqlSugarRepository<SysUserLdap> sysUserLdapRep,
IHttpContextAccessor httpContextAccessor, IHttpContextAccessor httpContextAccessor,
SysMenuService sysMenuService, SysRoleService sysRoleService,
SysOnlineUserService sysOnlineUserService, SysOnlineUserService sysOnlineUserService,
SysConfigService sysConfigService, SysConfigService sysConfigService,
ICaptcha captcha, ICaptcha captcha,
@ -41,7 +41,7 @@ public class SysAuthService : IDynamicApiController, ITransient
_sysUserRep = sysUserRep; _sysUserRep = sysUserRep;
_sysUserLdap = sysUserLdapRep; _sysUserLdap = sysUserLdapRep;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
_sysMenuService = sysMenuService; _sysRoleService = sysRoleService;
_sysOnlineUserService = sysOnlineUserService; _sysOnlineUserService = sysOnlineUserService;
_sysConfigService = sysConfigService; _sysConfigService = sysConfigService;
_captcha = captcha; _captcha = captcha;
@ -265,16 +265,15 @@ public class SysAuthService : IDynamicApiController, ITransient
public virtual async Task<LoginUserOutput> GetUserInfo() public virtual async Task<LoginUserOutput> GetUserInfo()
{ {
var user = await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1011).StatusCode(401); var user = await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1011).StatusCode(401);
// 获取机构 // 机构
var org = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysOrg>>().GetFirstAsync(u => u.Id == user.OrgId); var org = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysOrg>>().GetFirstAsync(u => u.Id == user.OrgId);
// 获取职位 // 职位
var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetFirstAsync(u => u.Id == user.PosId); var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetFirstAsync(u => u.Id == user.PosId);
// 获取按钮集合 // 角色集合
var buttons = await _sysMenuService.GetOwnBtnPermList(); var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
// 获取角色集合 // 接口集合
var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable() var apis = await _sysRoleService.GetUserApiList();
.Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync(); // 水印文字(若系统水印为空则禁止显示)
// 获取水印文字(若系统水印为空则全局为空)
var watermarkText = await _sysConfigService.GetConfigValue<string>(ConfigConst.SysWebWatermark); var watermarkText = await _sysConfigService.GetConfigValue<string>(ConfigConst.SysWebWatermark);
if (!string.IsNullOrWhiteSpace(watermarkText)) if (!string.IsNullOrWhiteSpace(watermarkText))
watermarkText += $"-{user.RealName}"; // $"-{user.RealName}-{_httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(true)}-{DateTime.Now}"; watermarkText += $"-{user.RealName}"; // $"-{user.RealName}-{_httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(true)}-{DateTime.Now}";
@ -295,7 +294,7 @@ public class SysAuthService : IDynamicApiController, ITransient
OrgName = org?.Name, OrgName = org?.Name,
OrgType = org?.Type, OrgType = org?.Type,
PosName = pos?.Name, PosName = pos?.Name,
Buttons = buttons, Apis = apis,
RoleIds = roleIds, RoleIds = roleIds,
WatermarkText = watermarkText WatermarkText = watermarkText
}; };

View File

@ -86,7 +86,7 @@ public class SysCommonService : IDynamicApiController, ITransient
foreach (ApiDescription action in actions) 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)..]; // 去掉路由前缀 route = route[(route.IndexOf('/') + 1)..]; // 去掉路由前缀
// 接口分组/控制器信息 // 接口分组/控制器信息

View File

@ -142,6 +142,7 @@ public class SysFileService : IDynamicApiController, ITransient
/// </summary> /// </summary>
/// <param name="Id"></param> /// <param name="Id"></param>
/// <returns></returns> /// <returns></returns>
[DisplayName("文件预览")]
[AllowAnonymous] [AllowAnonymous]
public async Task<IActionResult> GetPreview([FromRoute] long Id) public async Task<IActionResult> GetPreview([FromRoute] long Id)
{ {
@ -499,6 +500,7 @@ public class SysFileService : IDynamicApiController, ITransient
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentNullException"></exception>
[DisplayName("根据关联查询附件")]
public async Task<List<FileOutput>> GetRelationFiles([FromQuery] RelationQueryInput input) public async Task<List<FileOutput>> GetRelationFiles([FromQuery] RelationQueryInput input)
{ {
return await _sysFileRep.AsQueryable() return await _sysFileRep.AsQueryable()

View File

@ -130,9 +130,6 @@ public class SysMenuService : IDynamicApiController, ITransient
CheckMenuParam(sysMenu); CheckMenuParam(sysMenu);
await _sysMenuRep.InsertAsync(sysMenu); await _sysMenuRep.InsertAsync(sysMenu);
// 清除缓存
DeleteMenuCache();
} }
/// <summary> /// <summary>
@ -170,9 +167,6 @@ public class SysMenuService : IDynamicApiController, ITransient
CheckMenuParam(sysMenu); CheckMenuParam(sysMenu);
await _sysMenuRep.AsUpdateable(sysMenu).ExecuteCommandAsync(); await _sysMenuRep.AsUpdateable(sysMenu).ExecuteCommandAsync();
// 清除缓存
DeleteMenuCache();
} }
/// <summary> /// <summary>
@ -192,9 +186,6 @@ public class SysMenuService : IDynamicApiController, ITransient
// 级联删除角色菜单数据 // 级联删除角色菜单数据
await _sysRoleMenuService.DeleteRoleMenuByMenuIdList(menuIdList); await _sysRoleMenuService.DeleteRoleMenuByMenuIdList(menuIdList);
// 清除缓存
DeleteMenuCache();
} }
/// <summary> /// <summary>
@ -228,58 +219,6 @@ public class SysMenuService : IDynamicApiController, ITransient
} }
} }
/// <summary>
/// 获取用户拥有按钮权限集合(缓存) 🔖
/// </summary>
/// <returns></returns>
[DisplayName("获取按钮权限集合")]
public async Task<List<string>> GetOwnBtnPermList()
{
var userId = _userManager.UserId;
var permissions = _sysCacheService.Get<List<string>>(CacheConst.KeyUserButton + userId);
if (permissions == null)
{
var menuIdList = _userManager.SuperAdmin ? new List<long>() : 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<string>();
_sysCacheService.Set(CacheConst.KeyUserButton + userId, permissions, TimeSpan.FromDays(7));
}
return permissions;
}
/// <summary>
/// 获取系统所有按钮权限集合(缓存)
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<List<string>> GetAllBtnPermList()
{
var permissions = _sysCacheService.Get<List<string>>(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;
}
/// <summary>
/// 清除菜单和按钮缓存
/// </summary>
private void DeleteMenuCache()
{
// _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserMenu);
_sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserButton);
}
/// <summary> /// <summary>
/// 获取当前用户菜单Id集合 /// 获取当前用户菜单Id集合
/// </summary> /// </summary>

View File

@ -43,7 +43,7 @@ public class SysRoleApiService : ITransient
public async Task<List<string>> GetRoleApiList(List<long> roleIdList) public async Task<List<string>> GetRoleApiList(List<long> roleIdList)
{ {
return await _sysRoleApiRep.AsQueryable() return await _sysRoleApiRep.AsQueryable()
.Where(u => roleIdList.Contains(u.RoleId)) .WhereIF(roleIdList != null, u => roleIdList.Contains(u.RoleId))
.Select(u => u.Route).ToListAsync(); .Select(u => u.Route).ToListAsync();
} }

View File

@ -47,10 +47,6 @@ public class SysRoleMenuService : ITransient
MenuId = u MenuId = u
}).ToList(); }).ToList();
await _sysRoleMenuRep.InsertRangeAsync(menus); await _sysRoleMenuRep.InsertRangeAsync(menus);
// 清除缓存
// _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserMenu);
_sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserButton);
} }
/// <summary> /// <summary>

View File

@ -21,6 +21,7 @@ public class SysRoleService : IDynamicApiController, ITransient
private readonly SysOrgService _sysOrgService; private readonly SysOrgService _sysOrgService;
private readonly SysUserRoleService _sysUserRoleService; private readonly SysUserRoleService _sysUserRoleService;
private readonly SysCacheService _sysCacheService; private readonly SysCacheService _sysCacheService;
private readonly SysCommonService _sysCommonService;
public SysRoleService(UserManager userManager, public SysRoleService(UserManager userManager,
SqlSugarRepository<SysRole> sysRoleRep, SqlSugarRepository<SysRole> sysRoleRep,
@ -30,7 +31,8 @@ public class SysRoleService : IDynamicApiController, ITransient
SysBaseApiService sysBaseApiService, SysBaseApiService sysBaseApiService,
SysOrgService sysOrgService, SysOrgService sysOrgService,
SysUserRoleService sysUserRoleService, SysUserRoleService sysUserRoleService,
SysCacheService sysCacheService) SysCacheService sysCacheService,
SysCommonService sysCommonService)
{ {
_userManager = userManager; _userManager = userManager;
_sysRoleRep = sysRoleRep; _sysRoleRep = sysRoleRep;
@ -41,6 +43,7 @@ public class SysRoleService : IDynamicApiController, ITransient
_sysOrgService = sysOrgService; _sysOrgService = sysOrgService;
_sysUserRoleService = sysUserRoleService; _sysUserRoleService = sysUserRoleService;
_sysCacheService = sysCacheService; _sysCacheService = sysCacheService;
_sysCommonService = sysCommonService;
} }
/// <summary> /// <summary>
@ -181,13 +184,6 @@ public class SysRoleService : IDynamicApiController, ITransient
[DisplayName("授权角色菜单")] [DisplayName("授权角色菜单")]
public async Task GrantMenu(RoleMenuInput input) 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); await _sysRoleMenuService.GrantRoleMenu(input);
} }
@ -314,10 +310,24 @@ public class SysRoleService : IDynamicApiController, ITransient
var apiList = _sysCacheService.Get<List<string>>(CacheConst.KeyUserApi + userId); var apiList = _sysCacheService.Get<List<string>>(CacheConst.KeyUserApi + userId);
if (apiList == null) if (apiList == null)
{ {
// 当前用户已拥有的角色集合 // 超管时获取所有接口资源
var roleIds = _userManager.SuperAdmin ? null : await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId); if (_userManager.SuperAdmin)
{
var allApiList = _sysCommonService.GetApiList();
apiList = new List<string>();
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); apiList = await _sysRoleApiService.GetRoleApiList(roleIds);
}
_sysCacheService.Set(CacheConst.KeyUserApi + userId, apiList, TimeSpan.FromDays(7)); _sysCacheService.Set(CacheConst.KeyUserApi + userId, apiList, TimeSpan.FromDays(7));
} }
return apiList; return apiList;
@ -351,4 +361,37 @@ public class SysRoleService : IDynamicApiController, ITransient
} }
return apiList; return apiList;
} }
/// <summary>
/// 初始化管理员角色接口资源
/// </summary>
/// <returns></returns>
[DisplayName("初始化管理员角色接口资源")]
public async Task InitAdminRoleApi()
{
// 获取所有接口资源
var allApiList = _sysCommonService.GetApiList();
var idIndex = 0;
var sysRoleApis = new List<SysRoleApi>();
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;
}
} }

View File

@ -6,7 +6,15 @@
namespace Admin.NET.Core.Service; namespace Admin.NET.Core.Service;
public class ScheduleInput public class ScheduleInput : BaseIdInput
{
/// <summary>
/// 状态
/// </summary>
public virtual FinishStatusEnum Status { get; set; }
}
public class ListScheduleInput
{ {
public DateTime? StartTime { get; set; } public DateTime? StartTime { get; set; }

View File

@ -27,13 +27,13 @@ public class SysScheduleService : IDynamicApiController, ITransient
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[DisplayName("获取日程列表")] [DisplayName("获取日程列表")]
public async Task<List<SysSchedule>> Page(ScheduleInput input) public async Task<List<SysSchedule>> Page(ListScheduleInput input)
{ {
return await _sysSchedule.AsQueryable() return await _sysSchedule.AsQueryable()
.Where(u => u.UserId == _userManager.UserId) .Where(u => u.UserId == _userManager.UserId)
.WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.ScheduleTime >= input.StartTime) .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.ScheduleTime >= input.StartTime)
.WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.ScheduleTime <= input.EndTime) .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.ScheduleTime <= input.EndTime)
.OrderBy(u => u.CreateTime, OrderByType.Asc) .OrderBy(u => u.StartTime, OrderByType.Asc)
.ToListAsync(); .ToListAsync();
} }
@ -84,4 +84,21 @@ public class SysScheduleService : IDynamicApiController, ITransient
{ {
await _sysSchedule.DeleteAsync(u => u.Id == input.Id); await _sysSchedule.DeleteAsync(u => u.Id == input.Id);
} }
/// <summary>
/// 设置日程状态
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("设置日程状态")]
public async Task<int> 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();
}
} }

View File

@ -265,6 +265,11 @@ public class SysTenantService : IDynamicApiController, ITransient
if (input.Id.ToString() == SqlSugarConst.MainConfigId) if (input.Id.ToString() == SqlSugarConst.MainConfigId)
throw Oops.Oh(ErrorCodeEnum.D1023); throw Oops.Oh(ErrorCodeEnum.D1023);
// 若账号为开放接口绑定租户则禁止删除
var isOpenAccessTenant = await _sysTenantRep.ChangeRepository<SqlSugarRepository<SysOpenAccess>>().IsAnyAsync(u => u.BindTenantId == input.Id);
if (isOpenAccessTenant)
throw Oops.Oh(ErrorCodeEnum.D1031);
await _sysTenantRep.DeleteAsync(u => u.Id == input.Id); await _sysTenantRep.DeleteAsync(u => u.Id == input.Id);
await CacheTenant(input.Id); await CacheTenant(input.Id);

View File

@ -37,7 +37,6 @@ public class SysUserRoleService : ITransient
RoleId = u RoleId = u
}).ToList(); }).ToList();
await _sysUserRoleRep.InsertRangeAsync(roles); await _sysUserRoleRep.InsertRangeAsync(roles);
_sysCacheService.Remove(CacheConst.KeyUserButton + input.UserId);
_sysCacheService.Remove(CacheConst.KeyUserApi + input.UserId); _sysCacheService.Remove(CacheConst.KeyUserApi + input.UserId);
} }
@ -53,7 +52,6 @@ public class SysUserRoleService : ITransient
.Select(u => u.UserId) .Select(u => u.UserId)
.ForEachAsync(userId => .ForEachAsync(userId =>
{ {
_sysCacheService.Remove(CacheConst.KeyUserButton + userId);
_sysCacheService.Remove(CacheConst.KeyUserApi + userId); _sysCacheService.Remove(CacheConst.KeyUserApi + userId);
}); });
@ -68,7 +66,6 @@ public class SysUserRoleService : ITransient
public async Task DeleteUserRoleByUserId(long userId) public async Task DeleteUserRoleByUserId(long userId)
{ {
await _sysUserRoleRep.DeleteAsync(u => u.UserId == userId); await _sysUserRoleRep.DeleteAsync(u => u.UserId == userId);
_sysCacheService.Remove(CacheConst.KeyUserButton + userId);
_sysCacheService.Remove(CacheConst.KeyUserApi + userId); _sysCacheService.Remove(CacheConst.KeyUserApi + userId);
} }

View File

@ -172,11 +172,17 @@ public class SysUserService : IDynamicApiController, ITransient
throw Oops.Oh(ErrorCodeEnum.D1014); throw Oops.Oh(ErrorCodeEnum.D1014);
if (user.Id == _userManager.UserId) if (user.Id == _userManager.UserId)
throw Oops.Oh(ErrorCodeEnum.D1001); throw Oops.Oh(ErrorCodeEnum.D1001);
// 若账号为租户默认账号则禁止删除 // 若账号为租户默认账号则禁止删除
var isTenantUser = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().IsAnyAsync(u => u.UserId == input.Id); var isTenantUser = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().IsAnyAsync(u => u.UserId == input.Id);
if (isTenantUser) if (isTenantUser)
throw Oops.Oh(ErrorCodeEnum.D1029); throw Oops.Oh(ErrorCodeEnum.D1029);
// 若账号为开放接口绑定账号则禁止删除
var isOpenAccessUser = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysOpenAccess>>().IsAnyAsync(u => u.BindUserId == input.Id);
if (isOpenAccessUser)
throw Oops.Oh(ErrorCodeEnum.D1030);
// 强制下线 // 强制下线
await _sysOnlineUserService.ForceOffline(user.Id); await _sysOnlineUserService.ForceOffline(user.Id);

View File

@ -284,6 +284,7 @@ public static class SqlSugarSetup
// 初始化/创建数据库 // 初始化/创建数据库
if (config.DbSettings.EnableInitDb) if (config.DbSettings.EnableInitDb)
{ {
Log.Information($"初始化数据库 {config.DbType} - {config.ConfigId} - {config.ConnectionString}");
if (config.DbType != SqlSugar.DbType.Oracle) if (config.DbType != SqlSugar.DbType.Oracle)
dbProvider.DbMaintenance.CreateDatabase(); dbProvider.DbMaintenance.CreateDatabase();
} }
@ -291,6 +292,7 @@ public static class SqlSugarSetup
// 初始化表结构 // 初始化表结构
if (config.TableSettings.EnableInitTable) 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)) var entityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass && u.IsDefined(typeof(SugarTable), false))
.Where(u => !u.GetCustomAttributes<IgnoreTableAttribute>().Any()) .Where(u => !u.GetCustomAttributes<IgnoreTableAttribute>().Any())
.WhereIF(config.TableSettings.EnableIncreTable, u => u.IsDefined(typeof(IncreTableAttribute), false)).ToList(); .WhereIF(config.TableSettings.EnableIncreTable, u => u.IsDefined(typeof(IncreTableAttribute), false)).ToList();
@ -302,8 +304,10 @@ public static class SqlSugarSetup
else else
entityTypes = entityTypes.Where(u => u.GetCustomAttribute<TenantAttribute>()?.configId.ToString() == config.ConfigId.ToString()).ToList(); // 自定义的库 entityTypes = entityTypes.Where(u => u.GetCustomAttribute<TenantAttribute>()?.configId.ToString() == config.ConfigId.ToString()).ToList(); // 自定义的库
int count = 0, sum = entityTypes.Count;
foreach (var entityType in entityTypes) foreach (var entityType in entityTypes)
{ {
Console.WriteLine($"创建表 {entityType} ({config.ConfigId} - {++count}/{sum})");
if (entityType.GetCustomAttribute<SplitTableAttribute>() == null) if (entityType.GetCustomAttribute<SplitTableAttribute>() == null)
dbProvider.CodeFirst.InitTables(entityType); dbProvider.CodeFirst.InitTables(entityType);
else else
@ -314,10 +318,12 @@ public static class SqlSugarSetup
// 初始化种子数据 // 初始化种子数据
if (config.SeedSettings.EnableInitSeed) 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<>)))) 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)) .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(); .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) foreach (var seedType in seedDataTypes)
{ {
var entityType = seedType.GetInterfaces().First().GetGenericArguments().First(); var entityType = seedType.GetInterfaces().First().GetGenericArguments().First();
@ -343,6 +349,18 @@ public static class SqlSugarSetup
if (seedData == null) continue; if (seedData == null) continue;
var entityInfo = dbProvider.EntityMaintenance.GetEntityInfo(entityType); var entityInfo = dbProvider.EntityMaintenance.GetEntityInfo(entityType);
Console.WriteLine($"添加数据 {entityInfo.DbTableName} ({config.ConfigId} - {++count}/{sum})");
if (entityType.GetCustomAttribute<SplitTableAttribute>(true) != null)
{
//拆分表的操作需要实体类型,而通过反射很难实现
//所以这里将Init方法写在“种子数据类”内部再传入 db 反射调用
var hasInitMethod = seedType.GetMethod("Init");
var parameters = new object[] { db };
hasInitMethod?.Invoke(instance, parameters);
}
else
{
if (entityInfo.Columns.Any(u => u.IsPrimarykey)) if (entityInfo.Columns.Any(u => u.IsPrimarykey))
{ {
// 按主键进行批量增加和更新 // 按主键进行批量增加和更新
@ -360,6 +378,7 @@ public static class SqlSugarSetup
} }
} }
} }
}
/// <summary> /// <summary>
/// 初始化租户业务数据库 /// 初始化租户业务数据库

View File

@ -79,8 +79,8 @@ public class Startup : AppStartup
{ {
setting.DateFormatHandling = DateFormatHandling.IsoDateFormat; setting.DateFormatHandling = DateFormatHandling.IsoDateFormat;
setting.DateTimeZoneHandling = DateTimeZoneHandling.Local; setting.DateTimeZoneHandling = DateTimeZoneHandling.Local;
setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化
// setting.Converters.AddDateTimeTypeConverters(localized: true); // 时间本地化 // setting.Converters.AddDateTimeTypeConverters(localized: true); // 时间本地化
setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化
setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用 setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用
// setting.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决动态对象属性名大写 // setting.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决动态对象属性名大写
// setting.NullValueHandling = NullValueHandling.Ignore; // 忽略空值 // setting.NullValueHandling = NullValueHandling.Ignore; // 忽略空值

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro", "name": "admin.net.pro",
"type": "module", "type": "module",
"version": "2.4.33", "version": "2.4.33",
"lastBuildTime": "2024.07.18", "lastBuildTime": "2024.07.20",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架", "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun", "author": "zuohuaijun",
"license": "MIT", "license": "MIT",
@ -57,7 +57,7 @@
"splitpanes": "^3.1.5", "splitpanes": "^3.1.5",
"vcrontab-3": "^3.3.22", "vcrontab-3": "^3.3.22",
"vform3-builds": "^3.0.10", "vform3-builds": "^3.0.10",
"vue": "^3.4.32", "vue": "^3.4.33",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"vue-demi": "^0.14.8", "vue-demi": "^0.14.8",
"vue-grid-layout": "3.0.0-beta1", "vue-grid-layout": "3.0.0-beta1",
@ -68,8 +68,8 @@
"vue-signature-pad": "^3.0.2", "vue-signature-pad": "^3.0.2",
"vue3-tree-org": "^4.2.2", "vue3-tree-org": "^4.2.2",
"vuedraggable": "4.0.3", "vuedraggable": "4.0.3",
"vxe-pc-ui": "^4.0.74", "vxe-pc-ui": "^4.0.77",
"vxe-table": "^4.7.54", "vxe-table": "^4.7.56",
"vxe-table-plugin-element": "^4.0.4", "vxe-table-plugin-element": "^4.0.4",
"vxe-table-plugin-export-xlsx": "^4.0.5", "vxe-table-plugin-export-xlsx": "^4.0.5",
"xe-utils": "^3.5.28", "xe-utils": "^3.5.28",
@ -86,7 +86,7 @@
"@typescript-eslint/parser": "^7.16.1", "@typescript-eslint/parser": "^7.16.1",
"@vitejs/plugin-vue": "^5.0.5", "@vitejs/plugin-vue": "^5.0.5",
"@vitejs/plugin-vue-jsx": "^4.0.0", "@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", "code-inspector-plugin": "^0.14.2",
"eslint": "^9.7.0", "eslint": "^9.7.0",
"eslint-plugin-vue": "^9.27.0", "eslint-plugin-vue": "^9.27.0",

View File

@ -19,7 +19,6 @@ import { Configuration } from '../configuration';
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AddMenuInput } from '../models'; import { AddMenuInput } from '../models';
import { AdminResultListMenuOutput } from '../models'; import { AdminResultListMenuOutput } from '../models';
import { AdminResultListString } from '../models';
import { AdminResultListSysMenu } from '../models'; import { AdminResultListSysMenu } from '../models';
import { DeleteMenuInput } from '../models'; import { DeleteMenuInput } from '../models';
import { MenuTypeEnum } from '../models'; import { MenuTypeEnum } from '../models';
@ -222,49 +221,6 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
options: localVarRequestOptions, options: localVarRequestOptions,
}; };
}, },
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysMenuOwnBtnPermListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
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 🔖 * @summary 🔖
@ -378,19 +334,6 @@ export const SysMenuApiFp = function(configuration?: Configuration) {
return axios.request(axiosRequestArgs); return axios.request(axiosRequestArgs);
}; };
}, },
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListString>>> {
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 🔖 * @summary 🔖
@ -454,15 +397,6 @@ export const SysMenuApiFactory = function (configuration?: Configuration, basePa
async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListMenuOutput>> { async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListMenuOutput>> {
return SysMenuApiFp(configuration).apiSysMenuLoginMenuTreeGet(options).then((request) => request(axios, basePath)); return SysMenuApiFp(configuration).apiSysMenuLoginMenuTreeGet(options).then((request) => request(axios, basePath));
}, },
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListString>> {
return SysMenuApiFp(configuration).apiSysMenuOwnBtnPermListGet(options).then((request) => request(axios, basePath));
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -527,16 +461,6 @@ export class SysMenuApi extends BaseAPI {
public async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListMenuOutput>> { public async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListMenuOutput>> {
return SysMenuApiFp(this.configuration).apiSysMenuLoginMenuTreeGet(options).then((request) => request(this.axios, this.basePath)); 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<AxiosResponse<AdminResultListString>> {
return SysMenuApiFp(this.configuration).apiSysMenuOwnBtnPermListGet(options).then((request) => request(this.axios, this.basePath));
}
/** /**
* *
* @summary 🔖 * @summary 🔖

View File

@ -321,6 +321,49 @@ export const SysRoleApiAxiosParamCreator = function (configuration?: Configurati
options: localVarRequestOptions, options: localVarRequestOptions,
}; };
}, },
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysRoleInitAdminRoleApiPost: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
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 🔖 * @summary 🔖
@ -862,6 +905,19 @@ export const SysRoleApiFp = function(configuration?: Configuration) {
return axios.request(axiosRequestArgs); return axios.request(axiosRequestArgs);
}; };
}, },
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysRoleInitAdminRoleApiPost(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
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 🔖 * @summary 🔖
@ -1057,6 +1113,15 @@ export const SysRoleApiFactory = function (configuration?: Configuration, basePa
async apiSysRoleGrantMenuPost(body?: RoleMenuInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> { async apiSysRoleGrantMenuPost(body?: RoleMenuInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysRoleApiFp(configuration).apiSysRoleGrantMenuPost(body, options).then((request) => request(axios, basePath)); 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<AxiosResponse<void>> {
return SysRoleApiFp(configuration).apiSysRoleInitAdminRoleApiPost(options).then((request) => request(axios, basePath));
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -1223,6 +1288,16 @@ export class SysRoleApi extends BaseAPI {
public async apiSysRoleGrantMenuPost(body?: RoleMenuInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> { public async apiSysRoleGrantMenuPost(body?: RoleMenuInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysRoleApiFp(this.configuration).apiSysRoleGrantMenuPost(body, options).then((request) => request(this.axios, this.basePath)); 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<AxiosResponse<void>> {
return SysRoleApiFp(this.configuration).apiSysRoleInitAdminRoleApiPost(options).then((request) => request(this.axios, this.basePath));
}
/** /**
* *
* @summary 🔖 * @summary 🔖

View File

@ -18,9 +18,11 @@ import { Configuration } from '../configuration';
// @ts-ignore // @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AddScheduleInput } from '../models'; import { AddScheduleInput } from '../models';
import { AdminResultInt32 } from '../models';
import { AdminResultListSysSchedule } from '../models'; import { AdminResultListSysSchedule } from '../models';
import { AdminResultSysSchedule } from '../models'; import { AdminResultSysSchedule } from '../models';
import { DeleteScheduleInput } from '../models'; import { DeleteScheduleInput } from '../models';
import { ListScheduleInput } from '../models';
import { ScheduleInput } from '../models'; import { ScheduleInput } from '../models';
import { UpdateScheduleInput } from '../models'; import { UpdateScheduleInput } from '../models';
/** /**
@ -177,12 +179,60 @@ export const SysScheduleApiAxiosParamCreator = function (configuration?: Configu
/** /**
* *
* @summary * @summary
* @param {ListScheduleInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysSchedulePagePost: async (body?: ListScheduleInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
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 {ScheduleInput} [body]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
apiSysSchedulePagePost: async (body?: ScheduleInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { apiSysScheduleSetStatusPost: async (body?: ScheduleInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysSchedule/page`; const localVarPath = `/api/sysSchedule/setStatus`;
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com'); const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions; let baseOptions;
@ -324,12 +374,26 @@ export const SysScheduleApiFp = function(configuration?: Configuration) {
/** /**
* *
* @summary * @summary
* @param {ListScheduleInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysSchedulePagePost(body?: ListScheduleInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListSysSchedule>>> {
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 {ScheduleInput} [body]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async apiSysSchedulePagePost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListSysSchedule>>> { async apiSysScheduleSetStatusPost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultInt32>>> {
const localVarAxiosArgs = await SysScheduleApiAxiosParamCreator(configuration).apiSysSchedulePagePost(body, options); const localVarAxiosArgs = await SysScheduleApiAxiosParamCreator(configuration).apiSysScheduleSetStatusPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs); return axios.request(axiosRequestArgs);
@ -391,12 +455,22 @@ export const SysScheduleApiFactory = function (configuration?: Configuration, ba
/** /**
* *
* @summary * @summary
* @param {ListScheduleInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysSchedulePagePost(body?: ListScheduleInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListSysSchedule>> {
return SysScheduleApiFp(configuration).apiSysSchedulePagePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {ScheduleInput} [body] * @param {ScheduleInput} [body]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async apiSysSchedulePagePost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListSysSchedule>> { async apiSysScheduleSetStatusPost(body?: ScheduleInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultInt32>> {
return SysScheduleApiFp(configuration).apiSysSchedulePagePost(body, options).then((request) => request(axios, basePath)); return SysScheduleApiFp(configuration).apiSysScheduleSetStatusPost(body, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
@ -454,13 +528,24 @@ export class SysScheduleApi extends BaseAPI {
/** /**
* *
* @summary * @summary
* @param {ListScheduleInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysScheduleApi
*/
public async apiSysSchedulePagePost(body?: ListScheduleInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListSysSchedule>> {
return SysScheduleApiFp(this.configuration).apiSysSchedulePagePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {ScheduleInput} [body] * @param {ScheduleInput} [body]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof SysScheduleApi * @memberof SysScheduleApi
*/ */
public async apiSysSchedulePagePost(body?: ScheduleInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListSysSchedule>> { public async apiSysScheduleSetStatusPost(body?: ScheduleInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultInt32>> {
return SysScheduleApiFp(this.configuration).apiSysSchedulePagePost(body, options).then((request) => request(this.axios, this.basePath)); return SysScheduleApiFp(this.configuration).apiSysScheduleSetStatusPost(body, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
* *

View File

@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { FinishStatusEnum } from './finish-status-enum';
/** /**
* *
* *
@ -101,13 +102,35 @@ export interface AddScheduleInput {
userId?: number; userId?: number;
/** /**
* *
* *
* @type {Date} * @type {Date}
* @memberof AddScheduleInput * @memberof AddScheduleInput
*/ */
scheduleTime?: Date | null; scheduleTime?: Date | null;
/**
*
*
* @type {string}
* @memberof AddScheduleInput
*/
startTime?: string | null;
/**
*
*
* @type {string}
* @memberof AddScheduleInput
*/
endTime?: string | null;
/**
* @type {FinishStatusEnum}
* @memberof AddScheduleInput
*/
status?: FinishStatusEnum;
/** /**
* *
* *

View File

@ -0,0 +1,24 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* 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.
*/
/**
* <br />&nbsp; UnFinish = 0<br />&nbsp; Finish = 1<br />
* @export
* @enum {string}
*/
export enum FinishStatusEnum {
NUMBER_0 = 0,
NUMBER_1 = 1
}

View File

@ -190,6 +190,7 @@ export * from './file-output';
export * from './filter'; export * from './filter';
export * from './filter-logic-enum'; export * from './filter-logic-enum';
export * from './filter-operator-enum'; export * from './filter-operator-enum';
export * from './finish-status-enum';
export * from './from'; export * from './from';
export * from './gen-auth-url-input'; export * from './gen-auth-url-input';
export * from './gender-enum'; export * from './gender-enum';
@ -211,6 +212,7 @@ export * from './job-detail-input';
export * from './job-detail-output'; export * from './job-detail-output';
export * from './job-trigger-input'; export * from './job-trigger-input';
export * from './layout-kind'; export * from './layout-kind';
export * from './list-schedule-input';
export * from './log-input'; export * from './log-input';
export * from './log-level'; export * from './log-level';
export * from './log-vis-output'; export * from './log-vis-output';

View File

@ -0,0 +1,34 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* 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;
}

View File

@ -140,12 +140,12 @@ export interface LoginUserOutput {
posName?: string | null; posName?: string | null;
/** /**
* *
* *
* @type {Array<string>} * @type {Array<string>}
* @memberof LoginUserOutput * @memberof LoginUserOutput
*/ */
buttons?: Array<string> | null; apis?: Array<string> | null;
/** /**
* *

View File

@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { FinishStatusEnum } from './finish-status-enum';
/** /**
* *
* *
@ -21,14 +22,16 @@
export interface ScheduleInput { export interface ScheduleInput {
/** /**
* @type {Date} * Id
*
* @type {number}
* @memberof ScheduleInput * @memberof ScheduleInput
*/ */
startTime?: Date | null; id: number;
/** /**
* @type {Date} * @type {FinishStatusEnum}
* @memberof ScheduleInput * @memberof ScheduleInput
*/ */
endTime?: Date | null; status?: FinishStatusEnum;
} }

View File

@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { FinishStatusEnum } from './finish-status-enum';
/** /**
* *
* *
@ -101,13 +102,29 @@ export interface SysSchedule {
userId?: number; userId?: number;
/** /**
* *
* *
* @type {Date} * @type {Date}
* @memberof SysSchedule * @memberof SysSchedule
*/ */
scheduleTime?: Date | null; 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 * @memberof SysSchedule
*/ */
content: string; content: string;
/**
* @type {FinishStatusEnum}
* @memberof SysSchedule
*/
status?: FinishStatusEnum;
} }

View File

@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { FinishStatusEnum } from './finish-status-enum';
/** /**
* *
* *
@ -101,13 +102,35 @@ export interface UpdateScheduleInput {
userId?: number; userId?: number;
/** /**
* *
* *
* @type {Date} * @type {Date}
* @memberof UpdateScheduleInput * @memberof UpdateScheduleInput
*/ */
scheduleTime?: Date | null; scheduleTime?: Date | null;
/**
*
*
* @type {string}
* @memberof UpdateScheduleInput
*/
startTime?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateScheduleInput
*/
endTime?: string | null;
/**
* @type {FinishStatusEnum}
* @memberof UpdateScheduleInput
*/
status?: FinishStatusEnum;
/** /**
* *
* *

View File

@ -1,5 +1,5 @@
<template> <template>
<slot v-if="getUserAuthBtnList" /> <slot v-if="getUserAuthApiList" />
</template> </template>
<script setup lang="ts" name="auth"> <script setup lang="ts" name="auth">
@ -20,7 +20,7 @@ const stores = useUserInfo();
const { userInfos } = storeToRefs(stores); const { userInfos } = storeToRefs(stores);
// pinia // pinia
const getUserAuthBtnList = computed(() => { const getUserAuthApiList = computed(() => {
return userInfos.value.authBtnList.some((v: string) => v === props.value); return userInfos.value.authApiList.some((v: string) => v === props.value);
}); });
</script> </script>

View File

@ -1,5 +1,5 @@
<template> <template>
<slot v-if="getUserAuthBtnList" /> <slot v-if="getUserAuthApiList" />
</template> </template>
<script setup lang="ts" name="authAll"> <script setup lang="ts" name="authAll">
@ -21,7 +21,7 @@ const stores = useUserInfo();
const { userInfos } = storeToRefs(stores); const { userInfos } = storeToRefs(stores);
// pinia // pinia
const getUserAuthBtnList = computed(() => { const getUserAuthApiList = computed(() => {
return judgementSameArr(props.value, userInfos.value.authBtnList); return judgementSameArr(props.value, userInfos.value.authApiList);
}); });
</script> </script>

View File

@ -1,5 +1,5 @@
<template> <template>
<slot v-if="getUserAuthBtnList" /> <slot v-if="getUserAuthApiList" />
</template> </template>
<script setup lang="ts" name="auths"> <script setup lang="ts" name="auths">
@ -20,9 +20,9 @@ const stores = useUserInfo();
const { userInfos } = storeToRefs(stores); const { userInfos } = storeToRefs(stores);
// pinia // pinia
const getUserAuthBtnList = computed(() => { const getUserAuthApiList = computed(() => {
let flag = false; let flag = false;
userInfos.value.authBtnList.map((val: string) => { userInfos.value.authApiList.map((val: string) => {
props.value.map((v) => { props.value.map((v) => {
if (val === v) flag = true; if (val === v) flag = true;
}); });

View File

@ -13,7 +13,7 @@ export function authDirective(app: App) {
app.directive('auth', { app.directive('auth', {
mounted(el, binding) { mounted(el, binding) {
const stores = useUserInfo(); const stores = useUserInfo();
if (!stores.userInfos.authBtnList.some((v: string) => v === binding.value)) el.parentNode.removeChild(el); if (!stores.userInfos.authApiList.some((v: string) => v === binding.value)) el.parentNode.removeChild(el);
}, },
}); });
// 多个权限验证满足一个则显示v-auths="[xxx,xxx]" // 多个权限验证满足一个则显示v-auths="[xxx,xxx]"
@ -21,7 +21,7 @@ export function authDirective(app: App) {
mounted(el, binding) { mounted(el, binding) {
let flag = false; let flag = false;
const stores = useUserInfo(); const stores = useUserInfo();
stores.userInfos.authBtnList.map((val: string) => { stores.userInfos.authApiList.map((val: string) => {
binding.value.map((v: string) => { binding.value.map((v: string) => {
if (val === v) flag = true; if (val === v) flag = true;
}); });
@ -33,7 +33,7 @@ export function authDirective(app: App) {
app.directive('auth-all', { app.directive('auth-all', {
mounted(el, binding) { mounted(el, binding) {
const stores = useUserInfo(); const stores = useUserInfo();
const flag = judgementSameArr(binding.value, stores.userInfos.authBtnList); const flag = judgementSameArr(binding.value, stores.userInfos.authApiList);
if (!flag) el.parentNode.removeChild(el); if (!flag) el.parentNode.removeChild(el);
}, },
}); });

View File

@ -83,7 +83,7 @@ export const useUserInfo = defineStore('userInfo', {
orgName: d.orgName, orgName: d.orgName,
posName: d.posName, posName: d.posName,
roles: d.roleIds, roles: d.roleIds,
authBtnList: d.buttons, authApiList: d.apis,
time: new Date().getTime(), time: new Date().getTime(),
}; };
// vue-next-admin 提交Id225bce7 提交消息admin-23.03.26:发布v2.4.32版本 // vue-next-admin 提交Id225bce7 提交消息admin-23.03.26:发布v2.4.32版本

View File

@ -4,7 +4,7 @@
// 用户信息 // 用户信息
declare interface UserInfos<T = any> { declare interface UserInfos<T = any> {
authBtnList: string[]; authApiList: string[];
photo: string; photo: string;
roles: string[]; roles: string[];
time: number; time: number;

View File

@ -9,7 +9,7 @@ import { resolveDirective, withDirectives } from 'vue';
*/ */
export function auth(value: string): boolean { export function auth(value: string): boolean {
const stores = useUserInfo(); const stores = useUserInfo();
return stores.userInfos.authBtnList.some((v: string) => v === value); return stores.userInfos.authApiList.some((v: string) => v === value);
} }
/** /**
@ -20,7 +20,7 @@ export function auth(value: string): boolean {
export function auths(value: Array<string>): boolean { export function auths(value: Array<string>): boolean {
let flag = false; let flag = false;
const stores = useUserInfo(); const stores = useUserInfo();
stores.userInfos.authBtnList.map((val: string) => { stores.userInfos.authApiList.map((val: string) => {
value.map((v: string) => { value.map((v: string) => {
if (val === v) flag = true; if (val === v) flag = true;
}); });
@ -35,7 +35,7 @@ export function auths(value: Array<string>): boolean {
*/ */
export function authAll(value: Array<string>): boolean { export function authAll(value: Array<string>): boolean {
const stores = useUserInfo(); const stores = useUserInfo();
return judgementSameArr(value, stores.userInfos.authBtnList); return judgementSameArr(value, stores.userInfos.authApiList);
} }
/** /**
* VNode * VNode

View File

@ -23,16 +23,19 @@
</el-calendar> </el-calendar>
</div> </div>
<div class="schedule-list"> <div class="schedule-list">
<div class="item" v-for="(item, index) in state.TodayScheduleData" :key="index" @click="openEditSchedule(item)"> <div class="item" v-for="(item, index) in state.TodayScheduleData" :key="index">
<el-icon style="display: inline; vertical-align: middle"> <ele-Calendar /> </el-icon> <el-icon v-if="item.status == 1" class="icon" @click="changeStatus(item)"> <ele-CircleCheck /> </el-icon>
<span class="content" style="padding-left: 10px"> <el-icon v-else class="icon" @click="changeStatus(item)"> <ele-Edit /> </el-icon>
<span>
{{ item.scheduleTime }} <span class="content" style="padding-left: 10px" @click="openEditSchedule(item)">
</span> <span> {{ item.startTime }} - {{ item.endTime }} </span>
<span style="padding-left: 15px; font-weight: 600; color: var(--el-color-primary)"> <span :class="item.status == 1 ? 'finish' : 'no'" style="padding-left: 15px; font-weight: 600; color: var(--el-color-primary)">
{{ item.content }} {{ item.content }}
</span> </span>
</span> </span>
<span style="float: right">
<el-icon class="icon" @click="delItem(item)"> <ele-CircleClose /> </el-icon>
</span>
</div> </div>
</div> </div>
@ -50,7 +53,7 @@ export default {
<script setup lang="ts"> <script setup lang="ts">
import { reactive, onMounted, ref } from 'vue'; import { reactive, onMounted, ref } from 'vue';
import { dayjs } from 'element-plus'; import { dayjs, ElMessage, ElMessageBox } from 'element-plus';
import calendar from '/@/utils/calendar.js'; import calendar from '/@/utils/calendar.js';
import EditSchedule from '/@/views/home/widgets/components/scheduleEdit.vue'; import EditSchedule from '/@/views/home/widgets/components/scheduleEdit.vue';
@ -78,6 +81,7 @@ onMounted(async () => {
// //
const handleQuery = async () => { const handleQuery = async () => {
// debugger;
state.queryParams.startTime = GetMonthFirstDay(state.calendarValue); state.queryParams.startTime = GetMonthFirstDay(state.calendarValue);
state.queryParams.endTime = GetMonthLastDay(state.calendarValue); state.queryParams.endTime = GetMonthLastDay(state.calendarValue);
@ -91,6 +95,35 @@ const handleQuery = async () => {
} }
}; };
//
const delItem = (row: any) => {
console.log(row);
ElMessageBox.confirm(`确定删日程:${row.startTime}-${row.endTime}${row.content}】?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(async () => {
await getAPI(SysScheduleApi).apiSysScheduleDeletePost(row);
await handleQuery();
ElMessage.success('删除成功');
})
.catch(() => {});
};
//
const changeStatus = async (row: any) => {
await getAPI(SysScheduleApi)
.apiSysScheduleSetStatusPost({ id: row.id, status: row.status == 1 ? 0 : 1 })
.then(() => {
row.status = row.status == 1 ? 0 : 1;
ElMessage.success('日程状态设置成功');
})
.catch(() => {
ElMessage.success('日程状态设置异常');
});
};
// //
const solarDate2lunar = (solarDate: any) => { const solarDate2lunar = (solarDate: any) => {
var solar = solarDate.split('-'); var solar = solarDate.split('-');
@ -110,31 +143,36 @@ const handleQueryByDate = async (date: any) => {
// //
const openAddSchedule = () => { const openAddSchedule = () => {
var timerange = GetRecentTime();
state.editTitle = '添加日程'; state.editTitle = '添加日程';
editScheduleRef.value?.openDialog({ id: undefined, status: 1, orderNo: 100 }); editScheduleRef.value?.openDialog({ id: undefined, status: 0, orderNo: 100, startTime: timerange.startTime, endTime: timerange.endTime });
}; };
// //
const openEditSchedule = async (row: any) => { const openEditSchedule = async (row: any) => {
if (row.status == 1) return;
state.editTitle = '编辑日程'; state.editTitle = '编辑日程';
editScheduleRef.value?.openDialog(row, true); editScheduleRef.value?.openDialog(row, true);
}; };
// //
async function handleClickDate(data: any) { const handleClickDate = async (data: any) => {
await handleQueryByDate(data.day); await handleQueryByDate(data.day);
} };
function GetMonthFirstDay(date: any) { //
const GetMonthFirstDay = (date: any) => {
var newDate = new Date(date); var newDate = new Date(date);
newDate.setDate(1); newDate.setDate(1);
newDate.setHours(0); newDate.setHours(0);
newDate.setMinutes(0); newDate.setMinutes(0);
newDate.setSeconds(0); newDate.setSeconds(0);
return newDate; return newDate;
} };
function GetMonthLastDay(date: any) { //
const GetMonthLastDay = (date: any) => {
var newDate = new Date(date); var newDate = new Date(date);
newDate.setMonth(newDate.getMonth() + 1); newDate.setMonth(newDate.getMonth() + 1);
newDate.setDate(0); newDate.setDate(0);
@ -142,29 +180,83 @@ function GetMonthLastDay(date: any) {
newDate.setMinutes(0); newDate.setMinutes(0);
newDate.setSeconds(0); newDate.setSeconds(0);
return newDate; return newDate;
} };
// //
function FormatDateDelHMS(date: any) { const FormatDateDelHMS = (date: any) => {
var newDate = new Date(date); var newDate = new Date(date);
newDate.setHours(0); newDate.setHours(0);
newDate.setMinutes(0); newDate.setMinutes(0);
newDate.setSeconds(0); newDate.setSeconds(0);
return newDate; return newDate;
} };
function FormatDateEndHMS(date: any) { const FormatDateEndHMS = (date: any) => {
var newDate = new Date(date); var newDate = new Date(date);
newDate.setHours(23); newDate.setHours(23);
newDate.setMinutes(59); newDate.setMinutes(59);
newDate.setSeconds(59); newDate.setSeconds(59);
return newDate; return newDate;
} };
// //
function FormatDate(date: any) { const FormatDate = (date: any) => {
return dayjs(date).format('YYYY-MM-DD'); return dayjs(date).format('YYYY-MM-DD');
};
// EndTimeStartTime + 1(hour)
const GetRecentTime = () => {
var date = new Date();
//
var currentHour = date.getHours();
var currentMin = date.getMinutes();
var starHour = dayjs(date).format('HH');
var endHour = dayjs(date).format('HH');
var starMin = '00';
var endMin = '00';
// 23 starHourendHour23
if (currentHour == 23) {
starHour = '23';
endHour = '23';
starMin = '00';
endMin = '45';
} else {
//
if (currentMin < 15) {
starMin = '15';
endMin = '15';
//
date.setHours(date.getHours() + 1);
endHour = dayjs(date).format('HH');
} else if (currentMin >= 15 && currentMin < 30) {
starMin = '30';
endMin = '30';
//
date.setHours(date.getHours() + 1);
endHour = dayjs(date).format('HH');
} else if (currentMin >= 30 && currentMin < 45) {
starMin = '45';
endMin = '45';
//
date.setHours(date.getHours() + 1);
endHour = dayjs(date).format('HH');
} else if (currentMin >= 45) {
// : 00
starMin = '00';
endMin = '00';
// +1
date.setHours(date.getHours() + 1);
starHour = dayjs(date).format('HH');
//
date.setHours(date.getHours() + 1);
endHour = dayjs(date).format('HH');
} }
}
return { startTime: starHour + ':' + starMin, endTime: endHour + ':' + endMin };
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -241,6 +333,14 @@ function FormatDate(date: any) {
color: #666; color: #666;
font-size: 14px; font-size: 14px;
} }
.icon {
display: inline;
vertical-align: middle;
color: var(--el-color-primary);
}
.finish {
text-decoration: line-through 2px var(--el-color-danger) !important;
}
} }
} }
</style> </style>

View File

@ -9,9 +9,20 @@
</template> </template>
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto"> <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto">
<el-row :gutter="35"> <el-row :gutter="35">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8" class="mb20 time-padding-right">
<el-form-item label="日程时间" prop="scheduleTime" :rules="[{ required: true, message: '日程时间不能为空', trigger: 'blur' }]"> <el-form-item label="日程时间" prop="scheduleTime" :rules="[{ required: true, message: '日程时间不能为空', trigger: 'blur' }]">
<el-date-picker v-model="state.ruleForm.scheduleTime" type="datetime" placeholder="请选择日程时间" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" class="w100" /> <el-date-picker v-model="state.ruleForm.scheduleTime" type="datetime" placeholder="请选择日程日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" class="w100" />
</el-form-item>
</el-col>
<el-col :xs="5" :sm="5" :md="5" :lg="5" :xl="5" class="mb20 time-padding">
<el-form-item prop="startTime" :rules="[{ required: true, message: '开始时间不能为空', trigger: 'blur' }]">
<el-time-select v-model="state.ruleForm.startTime" format="HH:mm" start="00:00" end="23:45" step="00:15" class="w100" clearable @change="ChangeEndTime()" />
</el-form-item>
</el-col>
<span></span>
<el-col :xs="5" :sm="5" :md="5" :lg="5" :xl="5" class="mb20 time-padding">
<el-form-item prop="endTime" :rules="[{ required: true, message: '结束时间不能为空', trigger: 'blur' }]">
<el-time-select v-model="state.ruleForm.endTime" :min-time="state.ruleForm.startTime" format="HH:mm" start="00:00" end="23:45" step="00:15" class="w100" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@ -34,7 +45,7 @@
<script lang="ts" setup name="editSchedule"> <script lang="ts" setup name="editSchedule">
import { onMounted, reactive, ref } from 'vue'; import { onMounted, reactive, ref } from 'vue';
import { dayjs, ElMessageBox, ElMessage, ElNotification } from 'element-plus'; import { dayjs, ElMessageBox, ElMessage } from 'element-plus';
import { getAPI } from '/@/utils/axios-utils'; import { getAPI } from '/@/utils/axios-utils';
import { SysScheduleApi } from '/@/api-services/api'; import { SysScheduleApi } from '/@/api-services/api';
@ -53,7 +64,7 @@ const state = reactive({
}); });
// //
onMounted(async () => {}); onMounted(() => {});
// //
const openDialog = (row: any, showRemove: boolean = false) => { const openDialog = (row: any, showRemove: boolean = false) => {
@ -104,6 +115,44 @@ const remove = () => {
.catch(() => {}); .catch(() => {});
}; };
//
const ChangeEndTime = () => {
//
var timeStr = state.ruleForm.startTime;
var parts = timeStr.split(':');
var hours = parseInt(parts[0], 10);
var minutes = parseInt(parts[1], 10);
var startTime = new Date();
startTime.setHours(hours);
startTime.setMinutes(minutes);
if (startTime.getHours() < 23) {
startTime.setHours(startTime.getHours() + 1);
state.ruleForm.endTime = dayjs(startTime).format('HH:mm');
} else {
state.ruleForm.endTime = '23:45';
}
};
// //
defineExpose({ openDialog }); defineExpose({ openDialog });
</script> </script>
<style lang="scss" scoped>
.editSchedule-container {
.no-pre-icon {
color: red;
}
}
:v-deep(.el-select__prefix) {
display: none !important;
}
.time-padding-right {
padding-right: 1px !important;
}
.time-padding {
padding-left: 10px !important;
padding-right: 10px !important;
}
</style>

View File

@ -7,7 +7,7 @@
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span>缓存列表</span> <span>缓存列表</span>
<el-button icon="ele-Refresh" size="small" circle text @click="handleQuery" v-auth="'sysCache:keyList'" /> <el-button icon="ele-Refresh" size="small" circle text @click="handleQuery" v-auth="'sysCache/keyList'" />
</div> </div>
</template> </template>
<el-tree <el-tree
@ -29,7 +29,7 @@
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span>{{ `缓存数据${state.cacheKey ? `${state.cacheKey}` : ''}` }}</span> <span>{{ `缓存数据${state.cacheKey ? `${state.cacheKey}` : ''}` }}</span>
<el-button icon="ele-Delete" size="small" type="danger" @click="delCache" v-auth="'sysCache:delete'"> 删除缓存 </el-button> <el-button icon="ele-Delete" size="small" type="danger" @click="delCache" v-auth="'sysCache/delete'"> 删除缓存 </el-button>
</div> </div>
</template> </template>
<vue-json-pretty :data="state.cacheValue" showLength showIcon showLineNumber showSelectController /> <vue-json-pretty :data="state.cacheValue" showLength showIcon showLineNumber showSelectController />

View File

@ -28,7 +28,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysConfig:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysConfig/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -38,7 +38,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysConfig:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysConfig/add'"> 新增 </el-button>
<!-- <el-button v-if="state.selectList.length > 0" type="danger" icon="ele-Delete" @click="handleBacthDelete" > 批量删除 </el-button> --> <!-- <el-button v-if="state.selectList.length > 0" type="danger" icon="ele-Delete" @click="handleBacthDelete" > 批量删除 </el-button> -->
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
@ -54,10 +54,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysConfig:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysConfig/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysConfig:delete'" :disabled="row.sysFlag === 1" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysConfig/delete'" :disabled="row.sysFlag === 1" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -21,7 +21,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysDictType:page'" :loading="optionsDictType.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysDictType/page'" :loading="optionsDictType.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="optionsDictType.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="optionsDictType.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -32,7 +32,7 @@
<vxe-grid ref="xGridDictType" class="xGrid-style" v-bind="optionsDictType" v-on="gridEventsDictType" @cell-click="handleDictData"> <vxe-grid ref="xGridDictType" class="xGrid-style" v-bind="optionsDictType" v-on="gridEventsDictType" @cell-click="handleDictData">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-icon size="16" style="margin-right: 3px; margin-top: 2px; display: inline; vertical-align: middle"><ele-Collection /></el-icon> <el-icon size="16" style="margin-right: 3px; margin-top: 2px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>
<el-button type="primary" style="margin-left: 10px" icon="ele-Plus" @click="handleAdd" v-auth="'sysDictType:add'"> 新增 </el-button> <el-button type="primary" style="margin-left: 10px" icon="ele-Plus" @click="handleAdd" v-auth="'sysDictType/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -47,10 +47,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysDictType:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysDictType/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysDictType:delete'" @click="handleDeleteDictType(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysDictType/delete'" @click="handleDeleteDictType(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>
@ -77,7 +77,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQueryDictData" v-auth="'sysDictType:page'" :loading="optionsDictData.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQueryDictData" v-auth="'sysDictType/page'" :loading="optionsDictData.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQueryDictData" :loading="optionsDictData.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQueryDictData" :loading="optionsDictData.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -88,7 +88,7 @@
<vxe-grid ref="xGridDictData" class="xGrid-style" v-bind="optionsDictData" v-on="gridEventsDictData"> <vxe-grid ref="xGridDictData" class="xGrid-style" v-bind="optionsDictData" v-on="gridEventsDictData">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-icon size="16" style="margin-right: 3px; margin-top: 2px; display: inline; vertical-align: middle"><ele-Collection /></el-icon> <el-icon size="16" style="margin-right: 3px; margin-top: 2px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>
<el-button type="primary" style="margin-left: 10px" icon="ele-Plus" @click="handleAddDictData" v-auth="'sysDictType:add'"> 新增 </el-button> <el-button type="primary" style="margin-left: 10px" icon="ele-Plus" @click="handleAddDictData" v-auth="'sysDictType/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -110,10 +110,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysDictType:update'" @click="handleEditDictData(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysDictType/update'" @click="handleEditDictData(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysDictType:delete'" @click="handleDeleteDictData(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysDictType/delete'" @click="handleDeleteDictData(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -26,7 +26,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysFile:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysFile/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -36,7 +36,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="showUpload" v-auth="'sysFile:uploadFile'"> 上传 </el-button> <el-button type="primary" icon="ele-Plus" @click="showUpload" v-auth="'sysFile/uploadFile'"> 上传 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -60,16 +60,16 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysFile:update'" /> <el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysFile/update'" />
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysFile:delete'" /> <el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysFile/delete'" />
</el-tooltip> </el-tooltip>
<el-tooltip content="预览" placement="top"> <el-tooltip content="预览" placement="top">
<el-button icon="ele-View" size="small" text type="primary" @click="showPreviewDialog(row)" v-auth="'sysFile:delete'" /> <el-button icon="ele-View" size="small" text type="primary" @click="showPreviewDialog(row)" v-auth="'sysFile/preview'" />
</el-tooltip> </el-tooltip>
<el-tooltip content="下载" placement="top"> <el-tooltip content="下载" placement="top">
<el-button icon="ele-Download" size="small" text type="primary" @click="handleDownload(row)" v-auth="'sysFile:downloadFile'" /> <el-button icon="ele-Download" size="small" text type="primary" @click="handleDownload(row)" v-auth="'sysFile/downloadFile'" />
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -19,7 +19,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery(true)" v-auth="'sysJob:pageJobDetail'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery(true)" v-auth="'sysJob/pageJobDetail'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -31,7 +31,7 @@
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button-group> <el-button-group>
<el-tooltip content="增加作业"> <el-tooltip content="增加作业">
<el-button icon="ele-CirclePlus" @click="handleAdd" v-auth="'sysJob:addJobDetail'"> </el-button> <el-button icon="ele-CirclePlus" @click="handleAdd" v-auth="'sysJob/addJobDetail'"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="启动所有作业"> <el-tooltip content="启动所有作业">
<el-button icon="ele-VideoPlay" @click="startAllJob" /> <el-button icon="ele-VideoPlay" @click="startAllJob" />
@ -191,10 +191,10 @@
<el-button size="small" type="primary" icon="ele-CircleClose" text @click="cancelJob(row)" /> <el-button size="small" type="primary" icon="ele-CircleClose" text @click="cancelJob(row)" />
</el-tooltip> </el-tooltip>
<el-tooltip content="编辑作业"> <el-tooltip content="编辑作业">
<el-button size="small" type="primary" icon="ele-Edit" text @click="handleEdit(row)" v-auth="'sysJob:updateJobDetail'"> </el-button> <el-button size="small" type="primary" icon="ele-Edit" text @click="handleEdit(row)" v-auth="'sysJob/updateJobDetail'"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除作业"> <el-tooltip content="删除作业">
<el-button size="small" type="danger" icon="ele-Delete" text @click="handleDelete(row)" v-auth="'sysJob:deleteJobDetail'"> </el-button> <el-button size="small" type="danger" icon="ele-Delete" text @click="handleDelete(row)" v-auth="'sysJob/deleteJobDetail'"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
<template #pager> <template #pager>

View File

@ -16,10 +16,10 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysLdap:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysLdap/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
<el-button icon="ele-Filter" type="primary" :loading="options.loading" @click="state.visible = true" v-auth="'sysLdap:page'" style="margin-left: 12px"> 高级查询</el-button> <el-button icon="ele-Filter" type="primary" :loading="options.loading" @click="state.visible = true" v-auth="'sysLdap/page'" style="margin-left: 12px"> 高级查询</el-button>
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
@ -53,7 +53,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysLdap:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysLdap/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -68,12 +68,12 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysLdap:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysLdap/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysLdap:delete'" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysLdap/delete'" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-button icon="ele-Refresh" text type="danger" v-auth="'sysLdap:syncUser'" @click="handleSync(row)">同步域账户</el-button> <el-button icon="ele-Refresh" text type="danger" v-auth="'sysLdap/syncUser'" @click="handleSync(row)">同步域账户</el-button>
</template> </template>
</vxe-grid> </vxe-grid>
</el-card> </el-card>

View File

@ -21,7 +21,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysDifflog:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysDifflog/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -31,7 +31,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysDifflog:clear'"> 清空 </el-button> <el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysDifflog/clear'"> 清空 </el-button>
</template> </template>
<template #toolbar_tools> <template #toolbar_tools>
<vxe-button circle icon="vxe-icon-upload" name="导入" code="showImport" class="mr12" /> <vxe-button circle icon="vxe-icon-upload" name="导入" code="showImport" class="mr12" />

View File

@ -31,7 +31,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysExlog:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysExlog/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -41,7 +41,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents" @cell-dblclick="handleView"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents" @cell-dblclick="handleView">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysExlog:clear'"> 清空 </el-button> <el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysExlog/clear'"> 清空 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>

View File

@ -31,7 +31,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysOplog:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysOplog/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -41,7 +41,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents" @cell-dblclick="handleView"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents" @cell-dblclick="handleView">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysOplog:clear'"> 清空 </el-button> <el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysOplog/clear'"> 清空 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>

View File

@ -31,7 +31,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysVislog:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysVislog/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -41,7 +41,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysVislog:clear'"> 清空 </el-button> <el-button icon="ele-DeleteFilled" type="danger" @click="handleClear" v-auth="'sysVislog/clear'"> 清空 </el-button>
<el-button icon="ele-MapLocation" type="primary" @click="handleMap"> 热力图 </el-button> <el-button icon="ele-MapLocation" type="primary" @click="handleMap"> 热力图 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>

View File

@ -31,7 +31,7 @@
<el-radio-group v-model="state.ruleForm.type"> <el-radio-group v-model="state.ruleForm.type">
<el-radio :value="1">目录</el-radio> <el-radio :value="1">目录</el-radio>
<el-radio :value="2">菜单</el-radio> <el-radio :value="2">菜单</el-radio>
<el-radio :value="3">按钮</el-radio> <!-- <el-radio :value="3">按钮</el-radio> -->
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -25,7 +25,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysMenu:list'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysMenu/list'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -35,7 +35,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysMenu:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysMenu/add'"> 新增 </el-button>
<el-button-group style="padding-left: 12px"> <el-button-group style="padding-left: 12px">
<el-button type="primary" icon="ele-Expand" @click="handleExpand"> 全部展开 </el-button> <el-button type="primary" icon="ele-Expand" @click="handleExpand"> 全部展开 </el-button>
<el-button type="primary" icon="ele-Fold" @click="handleFold"> 全部折叠 </el-button> <el-button type="primary" icon="ele-Fold" @click="handleFold"> 全部折叠 </el-button>
@ -63,10 +63,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysMenu:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysMenu/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysMenu:delete'" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysMenu/delete'" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -24,7 +24,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysNotice:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysNotice/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -34,7 +34,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysNotice:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysNotice/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -53,12 +53,12 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysNotice:update'" :disabled="row.status === 1" /> <el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysNotice/update'" :disabled="row.status === 1" />
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysNotice:delete'" :disabled="row.status === 1" /> <el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysNotice/delete'" :disabled="row.status === 1" />
</el-tooltip> </el-tooltip>
<el-button icon="ele-Position" size="small" text type="primary" @click="handlePublic(row)" v-auth="'sysNotice:public'" :disabled="row.status === 1">发布</el-button> <el-button icon="ele-Position" size="small" text type="primary" @click="handlePublic(row)" v-auth="'sysNotice/public'" :disabled="row.status === 1">发布</el-button>
</template> </template>
</vxe-grid> </vxe-grid>
</el-card> </el-card>

View File

@ -21,7 +21,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysOAuthUser:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysOAuthUser/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -55,10 +55,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysOAuthUser:update'" :disabled="row.status === 1" /> <el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysOAuthUser/update'" :disabled="row.status === 1" />
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysOAuthUser:delete'" :disabled="row.status === 1" /> <el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysOAuthUser/delete'" :disabled="row.status === 1" />
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -47,7 +47,7 @@
<el-button icon="ele-Position" text type="primary" @click="openSendMessage(row)"> </el-button> <el-button icon="ele-Position" text type="primary" @click="openSendMessage(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="强制下线" placement="top"> <el-tooltip content="强制下线" placement="top">
<el-button icon="ele-CircleCloseFilled" text type="danger" v-auth="'sysOnlineUser:forceOffline'" @click="forceOffline(row)"> </el-button> <el-button icon="ele-CircleCloseFilled" text type="danger" v-auth="'sysOnlineUser/forceOffline'" @click="forceOffline(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -16,7 +16,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysOpenAccess:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysOpenAccess/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -26,7 +26,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysOpenAccess:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysOpenAccess/add'"> 新增 </el-button>
<el-button icon="ele-QuestionFilled" @click="openHelp"> 说明 </el-button> <el-button icon="ele-QuestionFilled" @click="openHelp"> 说明 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
@ -38,10 +38,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysOpenAccess:update'" :disabled="row.status === 1" /> <el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysOpenAccess/update'" :disabled="row.status === 1" />
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysOpenAccess:delete'" :disabled="row.status === 1" /> <el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysOpenAccess/delete'" :disabled="row.status === 1" />
</el-tooltip> </el-tooltip>
<el-tooltip content="生成签名" placement="top"> <el-tooltip content="生成签名" placement="top">
<el-button icon="ele-EditPen" size="small" text type="warning" @click="handleSign(row)" /> <el-button icon="ele-EditPen" size="small" text type="warning" @click="handleSign(row)" />

View File

@ -89,7 +89,7 @@ const props = defineProps({
title: String, title: String,
orgData: Array<SysOrg>, orgData: Array<SysOrg>,
}); });
const emits = defineEmits(['handleQuery']); const emits = defineEmits(['reload']);
const ruleFormRef = ref(); const ruleFormRef = ref();
const state = reactive({ const state = reactive({
isShowDialog: false, isShowDialog: false,
@ -111,7 +111,7 @@ const openDialog = (row: any) => {
// //
const closeDialog = () => { const closeDialog = () => {
emits('handleQuery', true); emits('reload', true);
state.isShowDialog = false; state.isShowDialog = false;
}; };

View File

@ -38,6 +38,7 @@
:filter-node-method="filterNode" :filter-node-method="filterNode"
@node-click="nodeClick" @node-click="nodeClick"
:show-checkbox="state.isShowCheckbox" :show-checkbox="state.isShowCheckbox"
:default-expanded-keys="state.orgData[0] && [state.orgData[0].id]"
:default-checked-keys="state.ownOrgData" :default-checked-keys="state.ownOrgData"
highlight-current highlight-current
:check-strictly="!state.strictly" :check-strictly="!state.strictly"

View File

@ -44,7 +44,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px; flex: 1"> <el-card class="full-table" shadow="hover" style="margin-top: 5px; flex: 1">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysOrg:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysOrg/add'"> 新增 </el-button>
<el-button-group style="padding-left: 12px"> <el-button-group style="padding-left: 12px">
<el-button type="primary" icon="ele-Expand" @click="handleExpand"> 全部展开 </el-button> <el-button type="primary" icon="ele-Expand" @click="handleExpand"> 全部展开 </el-button>
<el-button type="primary" icon="ele-Fold" @click="handleFold"> 全部折叠 </el-button> <el-button type="primary" icon="ele-Fold" @click="handleFold"> 全部折叠 </el-button>
@ -63,10 +63,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysOrg:update'"></el-button> <el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysOrg/update'"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysOrg:delete'"></el-button> <el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysOrg/delete'"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>
@ -81,7 +81,6 @@
<script lang="ts" setup name="sysOrg"> <script lang="ts" setup name="sysOrg">
import { onMounted, reactive, ref, nextTick } from 'vue'; import { onMounted, reactive, ref, nextTick } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus'; import { ElMessageBox, ElMessage } from 'element-plus';
import { auth } from '/@/utils/authFunction';
import { VxeGridInstance, VxeGridListeners } from 'vxe-table'; import { VxeGridInstance, VxeGridListeners } from 'vxe-table';
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook'; import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';

View File

@ -16,7 +16,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysPlugin:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysPlugin/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -26,7 +26,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysPlugin:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysPlugin/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -41,10 +41,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysPlugin:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysPlugin/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysPlugin:delete'" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysPlugin/delete'" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -21,7 +21,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysPos:page'"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysPos/page'"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -31,7 +31,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysPos:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysPos/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -46,10 +46,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysPos:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysPos/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysPos:delete'" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysPos/delete'" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -16,7 +16,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysPrint:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysPrint/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -26,7 +26,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysPrint:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysPrint/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -41,10 +41,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysPrint:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysPrint/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysPrint:delete'" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysPrint/delete'" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -27,7 +27,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysRegion:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysRegion/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -37,8 +37,8 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px; flex: 1"> <el-card class="full-table" shadow="hover" style="margin-top: 5px; flex: 1">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents" :tree-config="{ transform: true, parentField: 'pid' }"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents" :tree-config="{ transform: true, parentField: 'pid' }">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysRegion:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysRegion/add'"> 新增 </el-button>
<el-button type="danger" icon="ele-Lightning" @click="handlSync" v-auth="'sysRegion:add'"> 同步统计局 </el-button> <el-button type="danger" icon="ele-Lightning" @click="handlSync" v-auth="'sysRegion/add'"> 同步统计局 </el-button>
<el-button-group style="padding-left: 12px"> <el-button-group style="padding-left: 12px">
<el-button type="primary" icon="ele-Expand" @click="handleExpand"> 全部展开 </el-button> <el-button type="primary" icon="ele-Expand" @click="handleExpand"> 全部展开 </el-button>
<el-button type="primary" icon="ele-Fold" @click="handleFold"> 全部折叠 </el-button> <el-button type="primary" icon="ele-Fold" @click="handleFold"> 全部折叠 </el-button>
@ -50,10 +50,10 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysRegion:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysRegion/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysRegion:delete'" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysRegion/delete'" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</vxe-grid> </vxe-grid>

View File

@ -21,7 +21,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysRole:page'"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysRole/page'"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -31,7 +31,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysRole:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysRole/add'"> 新增 </el-button>
<el-button type="primary" icon="ele-Link" @click="openBaseApi" plain> 设置基础接口资源 </el-button> <el-button type="primary" icon="ele-Link" @click="openBaseApi" plain> 设置基础接口资源 </el-button>
</template> </template>
<template #toolbar_tools></template> <template #toolbar_tools></template>
@ -54,13 +54,13 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysRole:update'"></el-button> <el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysRole/update'"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysRole:delete'"></el-button> <el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysRole/delete'"></el-button>
</el-tooltip> </el-tooltip>
<el-button icon="ele-Link" size="small" text type="primary" @click="openGrantApi(row)" v-auth="'sysRole:grantApi'"> 接口资源 </el-button> <el-button icon="ele-Link" size="small" text type="primary" @click="openGrantApi(row)" v-auth="'sysRole/grantApi'"> 接口资源 </el-button>
<el-button icon="ele-OfficeBuilding" size="small" text type="primary" @click="openGrantData(row)" v-auth="'sysRole:grantDataScope'">数据范围</el-button> <el-button icon="ele-OfficeBuilding" size="small" text type="primary" @click="openGrantData(row)" v-auth="'sysRole/grantDataScope'">数据范围</el-button>
</template> </template>
</vxe-grid> </vxe-grid>
</el-card> </el-card>
@ -75,7 +75,6 @@
<script lang="ts" setup name="sysRole"> <script lang="ts" setup name="sysRole">
import { onMounted, reactive, ref } from 'vue'; import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus'; import { ElMessageBox, ElMessage } from 'element-plus';
import { auth } from '/@/utils/authFunction';
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table'; import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook'; import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
import { Local } from '/@/utils/storage'; import { Local } from '/@/utils/storage';

View File

@ -21,7 +21,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysTenant:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysTenant/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -31,7 +31,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> <el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button icon="ele-Plus" type="primary" @click="handleAdd" v-auth="'sysTenant:add'"> 新增 </el-button> <el-button icon="ele-Plus" type="primary" @click="handleAdd" v-auth="'sysTenant/add'"> 新增 </el-button>
<el-button type="danger" icon="ele-Refresh" @click="syncTenantDb" plain> 同步所有租户数据库 </el-button> <el-button type="danger" icon="ele-Refresh" @click="syncTenantDb" plain> 同步所有租户数据库 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
@ -77,16 +77,16 @@
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysTenant:update'" /> <el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysTenant/update'" />
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" @click="handleDelete(row)" :v-auth="'sysTenant:delete'" :disabled="row.id == 1300000000001"> </el-button> <el-button icon="ele-Delete" text type="danger" @click="handleDelete(row)" :v-auth="'sysTenant/delete'" :disabled="row.id == 1300000000001"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="重置密码" placement="top"> <el-tooltip content="重置密码" placement="top">
<el-button icon="ele-RefreshLeft" text type="danger" @click="resetTenantPwd(row)" :v-auth="'sysTenant:resetPwd'"> </el-button> <el-button icon="ele-RefreshLeft" text type="danger" @click="resetTenantPwd(row)" :v-auth="'sysTenant/resetPwd'"> </el-button>
</el-tooltip> </el-tooltip>
<el-button icon="ele-Coin" size="small" text type="danger" @click="createTenant(row)" v-auth="'sysTenant:createDb'" :disabled="row.tenantType == 0"> 创建库 </el-button> <el-button icon="ele-Coin" size="small" text type="danger" @click="createTenant(row)" v-auth="'sysTenant/createDb'" :disabled="row.tenantType == 0"> 创建库 </el-button>
<el-button icon="ele-Menu" size="small" text type="primary" @click="openGrantMenu(row)" :v-auth="'sysTenant:grantMenu'"> 授权菜单 </el-button> <el-button icon="ele-Menu" size="small" text type="primary" @click="openGrantMenu(row)" :v-auth="'sysTenant/grantMenu'"> 授权菜单 </el-button>
<el-button icon="ele-Link" size="small" text type="primary" @click="openGrantApi(row)"> 授权接口 </el-button> <el-button icon="ele-Link" size="small" text type="primary" @click="openGrantApi(row)"> 授权接口 </el-button>
</template> </template>
</vxe-grid> </vxe-grid>
@ -154,7 +154,7 @@ const options = useVxeTable<TenantOutput>(
{ field: 'slaveConnections', title: '从库连接', showOverflow: 'tooltip' }, { field: 'slaveConnections', title: '从库连接', showOverflow: 'tooltip' },
{ field: 'orderNo', title: '排序', width: 80, showOverflow: 'tooltip' }, { field: 'orderNo', title: '排序', width: 80, showOverflow: 'tooltip' },
{ field: '', title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } }, { field: '', title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
{ title: '操作', fixed: 'right', width: 380, showOverflow: true, slots: { default: 'row_buttons' } }, { title: '操作', fixed: 'right', width: 300, showOverflow: true, slots: { default: 'row_buttons' } },
], ],
}, },
// vxeGrid()vxe-table // vxeGrid()vxe-table

View File

@ -8,7 +8,7 @@
</div> </div>
</template> </template>
<el-tabs v-loading="state.loading" v-model="state.selectedTabName"> <el-tabs v-loading="state.loading" v-model="state.selectedTabName">
<el-tab-pane label="基础信息" style="height: 550px"> <el-tab-pane label="基础信息" style="height: 550px; overflow-y: auto; overflow-x: hidden">
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto"> <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@ -144,7 +144,7 @@
</el-row> </el-row>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="档案信息" style="height: 550px"> <el-tab-pane label="档案信息" style="height: 550px; overflow-y: auto; overflow-x: hidden">
<el-form :model="state.ruleForm" label-width="auto"> <el-form :model="state.ruleForm" label-width="auto">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">

View File

@ -33,7 +33,7 @@
<div class="image-signature"> <div class="image-signature">
<el-image :src="userInfos.signature" fit="contain" alt="电子签名" loading="lazy" style="width: 100%; height: 100%"> </el-image> <el-image :src="userInfos.signature" fit="contain" alt="电子签名" loading="lazy" style="width: 100%; height: 100%"> </el-image>
</div> </div>
<el-button icon="ele-Edit" type="primary" @click="openSignDialog" v-auth="'sysFile:uploadSignature'"> 电子签名 </el-button> <el-button icon="ele-Edit" type="primary" @click="openSignDialog" v-auth="'sysFile/uploadSignature'"> 电子签名 </el-button>
<el-upload <el-upload
ref="uploadSignRef" ref="uploadSignRef"
action="" action=""
@ -45,7 +45,7 @@
:on-exceed="uploadSignFileExceed" :on-exceed="uploadSignFileExceed"
style="display: inline-block; margin-left: 12px; position: absolute" style="display: inline-block; margin-left: 12px; position: absolute"
> >
<el-button icon="ele-UploadFilled" v-auth="'sysFile:uploadSignature'">上传手写签名</el-button> <el-button icon="ele-UploadFilled" v-auth="'sysFile/uploadSignature'">上传手写签名</el-button>
</el-upload> </el-upload>
</el-card> </el-card>
</el-col> </el-col>
@ -101,7 +101,7 @@
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item> <el-form-item>
<el-button icon="ele-SuccessFilled" type="primary" @click="submitUserBase" v-auth="'sysUser:baseInfo'"> 保存基本信息 </el-button> <el-button icon="ele-SuccessFilled" type="primary" @click="submitUserBase" v-auth="'sysUser/baseInfo'"> 保存基本信息 </el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -123,7 +123,7 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button icon="ele-Refresh" @click="resetPassword"> </el-button> <el-button icon="ele-Refresh" @click="resetPassword"> </el-button>
<el-button icon="ele-SuccessFilled" type="primary" @click="submitPassword" v-auth="'sysUser:changePwd'"> </el-button> <el-button icon="ele-SuccessFilled" type="primary" @click="submitPassword" v-auth="'sysUser/changePwd'"> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>

View File

@ -32,7 +32,7 @@
<el-row> <el-row>
<el-col> <el-col>
<el-button-group> <el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysUser:page'" :loading="options.loading"> 查询 </el-button> <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysUser/page'" :loading="options.loading"> 查询 </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button> <el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
</el-button-group> </el-button-group>
</el-col> </el-col>
@ -42,7 +42,7 @@
<el-card class="full-table" shadow="hover" style="margin-top: 5px; flex: 1"> <el-card class="full-table" shadow="hover" style="margin-top: 5px; flex: 1">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents"> <vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons> <template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysUser:add'"> 新增 </el-button> <el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysUser/add'"> 新增 </el-button>
</template> </template>
<template #toolbar_tools> </template> <template #toolbar_tools> </template>
<template #empty> <template #empty>
@ -64,20 +64,20 @@
<el-tag v-else>其他</el-tag> <el-tag v-else>其他</el-tag>
</template> </template>
<template #row_status="{ row }"> <template #row_status="{ row }">
<el-switch v-model="row.status" :active-value="1" :inactive-value="2" size="small" @change="changeStatus(row)" v-auth="'sysUser:setStatus'" /> <el-switch v-model="row.status" :active-value="1" :inactive-value="2" size="small" @change="changeStatus(row)" v-auth="'sysUser/setStatus'" />
</template> </template>
<template #row_record="{ row }"> <template #row_record="{ row }">
<ModifyRecord :data="row" /> <ModifyRecord :data="row" />
</template> </template>
<template #row_buttons="{ row }"> <template #row_buttons="{ row }">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button icon="ele-Edit" text type="primary" v-auth="'sysUser:update'" @click="handleEdit(row)"> </el-button> <el-button icon="ele-Edit" text type="primary" v-auth="'sysUser/update'" @click="handleEdit(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button icon="ele-Delete" text type="danger" v-auth="'sysUser:delete'" @click="handleDelete(row)"> </el-button> <el-button icon="ele-Delete" text type="danger" v-auth="'sysUser/delete'" @click="handleDelete(row)"> </el-button>
</el-tooltip> </el-tooltip>
<el-button icon="ele-RefreshLeft" text type="danger" v-auth="'sysUser:resetPwd'" @click="resetQueryPwd(row)">重置密码</el-button> <el-button icon="ele-RefreshLeft" text type="danger" v-auth="'sysUser/resetPwd'" @click="resetQueryPwd(row)">重置密码</el-button>
<el-button icon="ele-Unlock" text type="primary" v-auth="'sysUser:unlockLogin'" @click="handleUnlock(row)">解除锁定</el-button> <el-button icon="ele-Unlock" text type="primary" v-auth="'sysUser/unlockLogin'" @click="handleUnlock(row)">解除锁定</el-button>
</template> </template>
</vxe-grid> </vxe-grid>
</el-card> </el-card>
@ -91,7 +91,6 @@
<script lang="ts" setup name="sysUser"> <script lang="ts" setup name="sysUser">
import { onMounted, reactive, ref, onActivated } from 'vue'; import { onMounted, reactive, ref, onActivated } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus'; import { ElMessageBox, ElMessage } from 'element-plus';
import { auth } from '/@/utils/authFunction';
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table'; import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook'; import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
import { Local } from '/@/utils/storage'; import { Local } from '/@/utils/storage';