瀏覽代碼

😎清理与格式化代码

zuohuaijun 1 年之前
父節點
當前提交
b09549f060
共有 57 個文件被更改,包括 294 次插入305 次删除
  1. 1 11
      Admin.NET/Admin.NET.Application/GlobalUsings.cs
  2. 0 1
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  3. 1 1
      Admin.NET/Admin.NET.Core/Const/ClaimConst.cs
  4. 1 1
      Admin.NET/Admin.NET.Core/Const/ConfigConst.cs
  5. 2 2
      Admin.NET/Admin.NET.Core/Const/SqlSugarConst.cs
  6. 9 9
      Admin.NET/Admin.NET.Core/Entity/SysApp.cs
  7. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs
  8. 6 6
      Admin.NET/Admin.NET.Core/Entity/SysCodeGenConfig.cs
  9. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysDictData.cs
  10. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysMenu.cs
  11. 2 2
      Admin.NET/Admin.NET.Core/Entity/SysTenant.cs
  12. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysUserLdap.cs
  13. 7 7
      Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs
  14. 1 1
      Admin.NET/Admin.NET.Core/Enum/MenuTypeEnum.cs
  15. 5 7
      Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs
  16. 1 1
      Admin.NET/Admin.NET.Core/SeedData/SysAppMenuSeedData.cs
  17. 1 1
      Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs
  18. 21 21
      Admin.NET/Admin.NET.Core/Service/Application/Dto/SysAppInput.cs
  19. 33 33
      Admin.NET/Admin.NET.Core/Service/Application/Dto/SysAppOutput.cs
  20. 20 20
      Admin.NET/Admin.NET.Core/Service/Application/SysAppService.cs
  21. 2 2
      Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginInput.cs
  22. 9 9
      Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs
  23. 2 2
      Admin.NET/Admin.NET.Core/Service/Auth/SysLdapService.cs
  24. 2 2
      Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs
  25. 25 24
      Admin.NET/Admin.NET.Core/Service/CodeGen/CustomViewEngine.cs
  26. 12 12
      Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenConfig.cs
  27. 4 4
      Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenInput.cs
  28. 1 1
      Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/ColumnOuput.cs
  29. 4 4
      Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/TableUniqueConfigItem.cs
  30. 1 1
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs
  31. 16 17
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs
  32. 6 7
      Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs
  33. 5 5
      Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs
  34. 2 2
      Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs
  35. 2 2
      Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs
  36. 1 1
      Admin.NET/Admin.NET.Core/Service/Job/SysJobService.cs
  37. 2 2
      Admin.NET/Admin.NET.Core/Service/Menu/Dto/MenuInput.cs
  38. 2 2
      Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs
  39. 3 3
      Admin.NET/Admin.NET.Core/Service/Message/SysEmailService.cs
  40. 2 2
      Admin.NET/Admin.NET.Core/Service/Message/SysSmsService.cs
  41. 2 2
      Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs
  42. 6 6
      Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs
  43. 2 2
      Admin.NET/Admin.NET.Core/Service/Region/SysRegionService.cs
  44. 11 11
      Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs
  45. 2 2
      Admin.NET/Admin.NET.Core/Service/Tenant/Dto/TenantInput.cs
  46. 1 1
      Admin.NET/Admin.NET.Core/Service/Tenant/Dto/TenantOutput.cs
  47. 9 8
      Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs
  48. 1 1
      Admin.NET/Admin.NET.Core/Service/User/SysUserMenuService.cs
  49. 3 3
      Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs
  50. 1 1
      Admin.NET/Admin.NET.Core/Service/User/UserManager.cs
  51. 19 19
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs
  52. 8 2
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarTypeProvider.cs
  53. 7 7
      Admin.NET/Admin.NET.Core/Utils/CodeGenUtil.cs
  54. 2 2
      Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs
  55. 1 1
      Admin.NET/Admin.NET.Core/Utils/ComputerUtil.cs
  56. 1 1
      Admin.NET/Admin.NET.Core/Utils/ExcelHelper.cs
  57. 0 5
      Admin.NET/Admin.NET.Web.Entry/Views/Home/Index.cshtml

+ 1 - 11
Admin.NET/Admin.NET.Application/GlobalUsings.cs

@@ -6,20 +6,10 @@
 
 global using Admin.NET.Core;
 global using Furion;
-global using Furion.DatabaseAccessor;
-global using Furion.DependencyInjection;
 global using Furion.DynamicApiController;
-global using Furion.FriendlyException;
-global using Mapster;
 global using Microsoft.AspNetCore.Authorization;
 global using Microsoft.AspNetCore.Mvc;
 global using Microsoft.Extensions.DependencyInjection;
-global using Magicodes.ExporterAndImporter.Core;
-global using Magicodes.ExporterAndImporter.Excel;
-global using SqlSugar;
 global using System;
 global using System.Collections.Generic;
-global using System.ComponentModel;
-global using System.ComponentModel.DataAnnotations;
-global using System.Threading.Tasks;
-global using System.Linq;
+global using System.Threading.Tasks;

+ 0 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -35,7 +35,6 @@
     <PackageReference Include="QRCoder" Version="1.6.0" />
     <PackageReference Include="RabbitMQ.Client" Version="6.8.1" />
     <PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.2" />
-    <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.8" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.6.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.9.0" />
     <PackageReference Include="SqlSugarCore" Version="5.1.4.170" />

+ 1 - 1
Admin.NET/Admin.NET.Core/Const/ClaimConst.cs

@@ -15,7 +15,7 @@ public class ClaimConst
     /// 应用Id
     /// </summary>
     public const string AppId = "AppId";
-    
+
     /// <summary>
     /// 用户Id
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Const/ConfigConst.cs

@@ -70,7 +70,7 @@ public class ConfigConst
     /// 域登录验证
     /// </summary>
     public const string SysDomainLogin = "sys_domain_login";
-    
+
     /// <summary>
     /// 租户域名隔离登录验证
     /// </summary>

+ 2 - 2
Admin.NET/Admin.NET.Core/Const/SqlSugarConst.cs

@@ -25,7 +25,7 @@ public class SqlSugarConst
     /// 默认表主键
     /// </summary>
     public const string PrimaryKey = "Id";
-    
+
     /// <summary>
     /// 默认租户Id
     /// </summary>
@@ -35,7 +35,7 @@ public class SqlSugarConst
     /// 默认租户Id
     /// </summary>
     public const long DefaultTenantId = 1300000000001;
-    
+
     /// <summary>
     /// 默认租户域名
     /// </summary>

+ 9 - 9
Admin.NET/Admin.NET.Core/Entity/SysApp.cs

@@ -18,49 +18,49 @@ public partial class SysApp : EntityBase
     /// </summary>
     [SugarColumn(ColumnDescription = "名称", Length = 32), Required, MaxLength(32)]
     public virtual string Name { get; set; }
-    
+
     /// <summary>
     /// 图标
     /// </summary>
     [SugarColumn(ColumnDescription = "图标", Length = 256), Required, MaxLength(256)]
     public virtual string? Logo { get; set; }
-    
+
     /// <summary>
     /// 标题
     /// </summary>
     [SugarColumn(ColumnDescription = "标题", Length = 32), MaxLength(32)]
     public string Title { get; set; }
-    
+
     /// <summary>
     /// 副标题
     /// </summary>
     [SugarColumn(ColumnDescription = "副标题", Length = 32), MaxLength(32)]
     public string ViceTitle { get; set; }
-    
+
     /// <summary>
     /// 副描述
     /// </summary>
     [SugarColumn(ColumnDescription = "副描述", Length = 64), MaxLength(64)]
     public string? ViceDesc { get; set; }
-   
+
     /// <summary>
     /// 水印
     /// </summary>
     [SugarColumn(ColumnDescription = "水印", Length = 32), MaxLength(32)]
     public string? Watermark { get; set; }
-    
+
     /// <summary>
     /// 版权信息
     /// </summary>
     [SugarColumn(ColumnDescription = "版权信息", Length = 64), MaxLength(64)]
     public string? Copyright { get; set; }
-    
+
     /// <summary>
     /// ICP备案号
     /// </summary>
     [SugarColumn(ColumnDescription = "ICP备案号", Length = 32), MaxLength(32)]
     public string? Icp { get; set; }
-    
+
     /// <summary>
     /// 排序
     /// </summary>
@@ -73,7 +73,7 @@ public partial class SysApp : EntityBase
     /// </summary>
     [SugarColumn(ColumnDescription = "备注", Length = 256), MaxLength(256)]
     public string? Remark { get; set; }
-    
+
     /// <summary>
     /// 应用租户
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs

@@ -84,7 +84,7 @@ public partial class SysCodeGen : EntityBase
     [SugarColumn(ColumnDescription = "业务名", Length = 128)]
     [MaxLength(128)]
     public string? BusName { get; set; }
-    
+
     /// <summary>
     /// 表唯一字段配置
     /// </summary>

+ 6 - 6
Admin.NET/Admin.NET.Core/Entity/SysCodeGenConfig.cs

@@ -25,7 +25,7 @@ public partial class SysCodeGenConfig : EntityBase
     [SugarColumn(ColumnDescription = "字段名称", Length = 128)]
     [Required, MaxLength(128)]
     public virtual string ColumnName { get; set; }
-    
+
     /// <summary>
     /// 主键
     /// </summary>
@@ -52,7 +52,7 @@ public partial class SysCodeGenConfig : EntityBase
     [SugarColumn(ColumnDescription = "字段描述", Length = 128)]
     [MaxLength(128)]
     public string? ColumnComment { get; set; }
-    
+
     /// <summary>
     /// 数据库中类型(物理类型)
     /// </summary>
@@ -115,7 +115,7 @@ public partial class SysCodeGenConfig : EntityBase
     [SugarColumn(ColumnDescription = "外键显示字段.NET类型", Length = 64)]
     [MaxLength(64)]
     public string? FkColumnNetType { get; set; }
-    
+
     /// <summary>
     /// 父级字段
     /// </summary>
@@ -129,14 +129,14 @@ public partial class SysCodeGenConfig : EntityBase
     [SugarColumn(ColumnDescription = "字典编码", Length = 64)]
     [MaxLength(64)]
     public string? DictTypeCode { get; set; }
-    
+
     /// <summary>
     /// 查询方式
     /// </summary>
     [SugarColumn(ColumnDescription = "查询方式", Length = 16)]
     [MaxLength(16)]
     public string? QueryType { get; set; }
-    
+
     /// <summary>
     /// 是否是查询条件
     /// </summary>
@@ -178,7 +178,7 @@ public partial class SysCodeGenConfig : EntityBase
     [SugarColumn(ColumnDescription = "增改", Length = 8)]
     [MaxLength(8)]
     public string? WhetherAddUpdate { get; set; }
-    
+
     /// <summary>
     /// 导入
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/SysDictData.cs

@@ -86,7 +86,7 @@ public partial class SysDictData : EntityBase
     /// </summary>
     [SugarColumn(ColumnDescription = "状态")]
     public StatusEnum Status { get; set; } = StatusEnum.Enable;
-    
+
     /// <summary>
     /// 字典类型
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/SysMenu.cs

@@ -130,5 +130,5 @@ public partial class SysMenu : EntityBase
     /// 菜单子项
     /// </summary>
     [SugarColumn(IsIgnore = true)]
-    public List<SysMenu> Children { get; set; } = new ();
+    public List<SysMenu> Children { get; set; } = new();
 }

+ 2 - 2
Admin.NET/Admin.NET.Core/Entity/SysTenant.cs

@@ -18,7 +18,7 @@ public partial class SysTenant : EntityBase
     /// </summary>
     [SugarColumn(ColumnDescription = "应用Id")]
     public long AppId { get; set; }
-    
+
     /// <summary>
     /// 用户Id
     /// </summary>
@@ -88,7 +88,7 @@ public partial class SysTenant : EntityBase
     /// </summary>
     [SugarColumn(ColumnDescription = "状态")]
     public StatusEnum Status { get; set; } = StatusEnum.Enable;
-    
+
     /// <summary>
     /// 应用
     /// </summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysUserLdap.cs

@@ -65,6 +65,7 @@ public class SysUserLdap : EntityTenantId
     /// </summary>
     [SugarColumn(ColumnDescription = "检查账户是否已过期")]
     public bool AccountExpiresFlag { get; set; } = false;
+
     /// <summary>
     /// 密码设置是否永不过期
     /// </summary>

+ 7 - 7
Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs

@@ -222,7 +222,7 @@ public enum ErrorCodeEnum
     /// </summary>
     [ErrorCodeItemMetadata("开放接口绑定租户禁止删除")]
     D1031,
-    
+
     /// <summary>
     /// 手机号已存在
     /// </summary>
@@ -324,13 +324,13 @@ public enum ErrorCodeEnum
     /// </summary>
     [ErrorCodeItemMetadata("字典状态错误")]
     D3005,
-    
+
     /// <summary>
     /// 字典编码不能以Enum结尾
     /// </summary>
     [ErrorCodeItemMetadata("字典编码不能以Enum结尾")]
     D3006,
-    
+
     /// <summary>
     /// 禁止修改枚举类型的字典编码
     /// </summary>
@@ -552,7 +552,7 @@ public enum ErrorCodeEnum
     /// </summary>
     [ErrorCodeItemMetadata("租户从库配置错误")]
     D1302,
-    
+
     /// <summary>
     /// 已存在同名的租户域名
     /// </summary>
@@ -654,19 +654,19 @@ public enum ErrorCodeEnum
     /// </summary>
     [ErrorCodeItemMetadata("已存在同名功能或同名程序及插件")]
     D1900,
-    
+
     /// <summary>
     /// 禁止删除存在关联租户的应用
     /// </summary>
     [ErrorCodeItemMetadata("禁止删除存在关联租户的应用")]
     A1001,
-    
+
     /// <summary>
     /// 禁止删除存在关联菜单的应用
     /// </summary>
     [ErrorCodeItemMetadata("禁止删除存在关联菜单的应用")]
     A1002,
-    
+
     /// <summary>
     /// 找不到系统应用
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Enum/MenuTypeEnum.cs

@@ -15,7 +15,7 @@ public enum MenuTypeEnum
     /// <summary>
     /// 目录
     /// </summary>
-    
+
     [Description("目录"), Theme("warning")]
     Dir = 1,
 

+ 5 - 7
Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs

@@ -4,8 +4,6 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using System.Security.Cryptography;
-
 namespace Admin.NET.Core;
 
 /// <summary>
@@ -29,10 +27,10 @@ public class EnumToDictJob : IJob
         var originColor = Console.ForegroundColor;
         Console.ForegroundColor = ConsoleColor.Yellow;
         Console.WriteLine($"【{DateTime.Now}】系统枚举转换字典");
-        
+
         using var serviceScope = _scopeFactory.CreateScope();
         var db = serviceScope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
-        
+
         var sysEnumService = serviceScope.ServiceProvider.GetRequiredService<SysEnumService>();
         var sysDictTypeList = GetDictByEnumType(sysEnumService.GetEnumTypeList());
 
@@ -43,7 +41,7 @@ public class EnumToDictJob : IJob
         sysDictTypeList = sysDictTypeList.Where(x => x.Code.EndsWith("Enum")).ToList();
 
         await SyncEnumToDictInfoAsync(db, sysDictTypeList);
-        
+
         Console.ForegroundColor = ConsoleColor.Yellow;
         try
         {
@@ -54,7 +52,7 @@ public class EnumToDictJob : IJob
                 .ToStorageAsync();
             await storageable1.BulkCopyAsync();
             await storageable1.BulkUpdateAsync();
-            
+
             Console.WriteLine($"【{DateTime.Now}】系统枚举类转字典类型数据: 插入{storageable1.InsertList.Count}条, 更新{storageable1.UpdateList.Count}条, 共{storageable1.TotalList.Count}条。");
 
             var storageable2 = await db.Storageable(sysDictTypeList.SelectMany(x => x.Children).ToList())
@@ -94,7 +92,7 @@ public class EnumToDictJob : IJob
         {
             var enumDictType = list.First(x => x.Code == dbDictType.Code);
             if (enumDictType.Id == dbDictType.Id) continue;
-            
+
             // 数据不一致则删除
             await db.Deleteable<SysDictData>().Where(x => x.DictTypeId == dbDictType.Id).ExecuteCommandAsync();
             await db.Deleteable<SysDictType>().Where(x => x.Id == dbDictType.Id).ExecuteCommandAsync();

+ 1 - 1
Admin.NET/Admin.NET.Core/SeedData/SysAppMenuSeedData.cs

@@ -18,6 +18,6 @@ public class SysAppMenuSeedData : ISqlSugarEntitySeedData<SysAppMenu>
     public IEnumerable<SysAppMenu> HasData()
     {
         long id = 1300000000001;
-        return new SysMenuSeedData().HasData().Select(m => new SysAppMenu { Id=id++, AppId=SqlSugarConst.DefaultAppId, MenuId=m.Id });
+        return new SysMenuSeedData().HasData().Select(m => new SysAppMenu { Id = id++, AppId = SqlSugarConst.DefaultAppId, MenuId = m.Id });
     }
 }

+ 1 - 1
Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs

@@ -98,7 +98,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000001315, Pid=1310000001311, Title="删除", Permission="sysApp:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000001316, Pid=1310000001311, Title="授权菜单", Permission="sysApp:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000001317, Pid=1310000001311, Title="切换应用", Permission="sysApp:changeApp", Type=MenuTypeEnum.Btn, 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=1310000000313, Pid=1310000000311, Title="编辑", Permission="sysTenant:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },

+ 21 - 21
Admin.NET/Admin.NET.Core/Service/Application/Dto/SysAppInput.cs

@@ -1,7 +1,7 @@
 // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-// 
+//
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-// 
+//
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
 namespace Admin.NET.Core.Service;
@@ -15,56 +15,56 @@ public class SysAppBaseInput
     /// 主键Id
     /// </summary>
     public virtual long? Id { get; set; }
-    
+
     /// <summary>
     /// 名称
     /// </summary>
     [Required(ErrorMessage = "名称不能为空")]
     public virtual string Name { get; set; }
-    
+
     /// <summary>
     /// 标题
     /// </summary>
     [Required(ErrorMessage = "标题不能为空")]
     public virtual string Title { get; set; }
-    
+
     /// <summary>
     /// 副标题
     /// </summary>
     [Required(ErrorMessage = "副标题不能为空")]
     public virtual string ViceTitle { get; set; }
-    
+
     /// <summary>
     /// 副描述
     /// </summary>
     public virtual string? ViceDesc { get; set; }
-    
+
     /// <summary>
     /// 水印
     /// </summary>
     public virtual string? Watermark { get; set; }
-    
+
     /// <summary>
     /// 版权信息
     /// </summary>
     public virtual string? Copyright { get; set; }
-    
+
     /// <summary>
     /// ICP备案号
     /// </summary>
     public virtual string? Icp { get; set; }
-    
+
     /// <summary>
     /// 排序
     /// </summary>
     [Required(ErrorMessage = "排序不能为空")]
     public virtual int? OrderNo { get; set; }
-    
+
     /// <summary>
     /// 备注
     /// </summary>
     public virtual string? Remark { get; set; }
-    
+
     /// <summary>
     /// 图标
     /// </summary>
@@ -81,43 +81,43 @@ public class AddSysAppInput
     /// </summary>
     [Required(ErrorMessage = "Logo不能为空")]
     public string Logo { get; set; }
-    
+
     /// <summary>
     /// 名称
     /// </summary>
     [Required(ErrorMessage = "名称不能为空")]
     public string Name { get; set; }
-    
+
     /// <summary>
     /// 标题
     /// </summary>
     [Required(ErrorMessage = "标题不能为空")]
     public string Title { get; set; }
-    
+
     /// <summary>
     /// 副标题
     /// </summary>
     [Required(ErrorMessage = "副标题不能为空")]
     public string ViceTitle { get; set; }
-    
+
     /// <summary>
     /// 副描述
     /// </summary>
     [Required(ErrorMessage = "副描述不能为空")]
     public string ViceDesc { get; set; }
-    
+
     /// <summary>
     /// 水印
     /// </summary>
     [Required(ErrorMessage = "水印不能为空")]
     public string Watermark { get; set; }
-    
+
     /// <summary>
     /// 版权信息
     /// </summary>
     [Required(ErrorMessage = "版权信息不能为空")]
     public string Copyright { get; set; }
-    
+
     /// <summary>
     /// ICP备案号
     /// </summary>
@@ -129,7 +129,7 @@ public class AddSysAppInput
     /// </summary>
     [Required(ErrorMessage = "排序不能为空")]
     public int OrderNo { get; set; } = 100;
-    
+
     /// <summary>
     /// 备注
     /// </summary>
@@ -144,7 +144,7 @@ public class UpdateSysAppInput : AddSysAppInput
 {
     /// <summary>
     /// 主键Id
-    /// </summary>    
+    /// </summary>
     [Required(ErrorMessage = "主键Id不能为空")]
     public long Id { get; set; }
 }

+ 33 - 33
Admin.NET/Admin.NET.Core/Service/Application/Dto/SysAppOutput.cs

@@ -1,7 +1,7 @@
 // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-// 
+//
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-// 
+//
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
 namespace Admin.NET.Core.Service;
@@ -14,88 +14,88 @@ public class SysAppOutput
     /// <summary>
     /// 主键Id
     /// </summary>
-    public long Id { get; set; }    
-    
+    public long Id { get; set; }
+
     /// <summary>
     /// 名称
     /// </summary>
     public string Name { get; set; }
-    
+
     /// <summary>
     /// 图标
     /// </summary>
     public string? Logo { get; set; }
-    
+
     /// <summary>
     /// 标题
     /// </summary>
     public string Title { get; set; }
-    
+
     /// <summary>
     /// 副标题
     /// </summary>
-    public string ViceTitle { get; set; }    
-    
+    public string ViceTitle { get; set; }
+
     /// <summary>
     /// 副描述
     /// </summary>
-    public string? ViceDesc { get; set; }    
-    
+    public string? ViceDesc { get; set; }
+
     /// <summary>
     /// 水印
     /// </summary>
-    public string? Watermark { get; set; }    
-    
+    public string? Watermark { get; set; }
+
     /// <summary>
     /// 版权信息
     /// </summary>
-    public string? Copyright { get; set; }    
-    
+    public string? Copyright { get; set; }
+
     /// <summary>
     /// ICP备案号
     /// </summary>
-    public string? Icp { get; set; }    
-    
+    public string? Icp { get; set; }
+
     /// <summary>
     /// 排序
     /// </summary>
-    public int OrderNo { get; set; }    
-    
+    public int OrderNo { get; set; }
+
     /// <summary>
     /// 备注
     /// </summary>
-    public string? Remark { get; set; }    
-    
+    public string? Remark { get; set; }
+
     /// <summary>
     /// 创建时间
     /// </summary>
-    public DateTime? CreateTime { get; set; }    
-    
+    public DateTime? CreateTime { get; set; }
+
     /// <summary>
     /// 更新时间
     /// </summary>
-    public DateTime? UpdateTime { get; set; }    
-    
+    public DateTime? UpdateTime { get; set; }
+
     /// <summary>
     /// 创建者Id
     /// </summary>
-    public long? CreateUserId { get; set; }    
-    
+    public long? CreateUserId { get; set; }
+
     /// <summary>
     /// 创建者姓名
     /// </summary>
-    public string? CreateUserName { get; set; }    
-    
+    public string? CreateUserName { get; set; }
+
     /// <summary>
     /// 修改者Id
     /// </summary>
-    public long? UpdateUserId { get; set; }    
-    
+    public long? UpdateUserId { get; set; }
+
     /// <summary>
     /// 修改者姓名
     /// </summary>
-    public string? UpdateUserName { get; set; }    
-    
+    public string? UpdateUserName { get; set; }
+
     /// <summary>
     /// 软删除
     /// </summary>

+ 20 - 20
Admin.NET/Admin.NET.Core/Service/Application/SysAppService.cs

@@ -1,7 +1,7 @@
 // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-// 
+//
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-// 
+//
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
 namespace Admin.NET.Core.Service;
@@ -36,12 +36,12 @@ public class SysAppService : IDynamicApiController, ITransient
     {
         input.Keyword = input.Keyword?.Trim();
         var query = _sysAppRep.AsQueryable()
-            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) || 
-               u.Title.Contains(input.Keyword) || u.ViceTitle.Contains(input.Keyword) || 
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) ||
+               u.Title.Contains(input.Keyword) || u.ViceTitle.Contains(input.Keyword) ||
                u.ViceDesc.Contains(input.Keyword) || u.Remark.Contains(input.Keyword))
             .OrderBy(u => new { u.OrderNo, u.Id })
             .Select<SysAppOutput>();
-		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+        return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
     }
 
     /// <summary>
@@ -67,7 +67,7 @@ public class SysAppService : IDynamicApiController, ITransient
     public async Task Update(UpdateSysAppInput input)
     {
         _ = await _sysAppRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        
+
         var entity = input.Adapt<SysApp>();
         await _sysAppRep.AsUpdateable(entity).ExecuteCommandAsync();
     }
@@ -82,16 +82,16 @@ public class SysAppService : IDynamicApiController, ITransient
     public async Task Delete(BaseIdInput input)
     {
         var entity = await _sysAppRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        
+
         // 禁止删除存在关联租户的应用
         if (await _sysAppRep.Context.Queryable<SysTenant>().AnyAsync(u => u.AppId == input.Id)) throw Oops.Oh(ErrorCodeEnum.A1001);
-        
+
         // 禁止删除存在关联菜单的应用
         if (await _sysAppMenuRep.AsQueryable().AnyAsync(u => u.AppId == input.Id)) throw Oops.Oh(ErrorCodeEnum.A1002);
-        
+
         await _sysAppRep.DeleteAsync(entity);
     }
-    
+
     /// <summary>
     /// 获取授权菜单 🔖
     /// </summary>
@@ -100,11 +100,11 @@ public class SysAppService : IDynamicApiController, ITransient
     [UnitOfWork]
     [DisplayName("获取授权菜单")]
     [ApiDescriptionSettings(Name = "GrantMenu"), HttpGet]
-    public async Task<List<long>> GrantMenu([FromQuery]long id)
+    public async Task<List<long>> GrantMenu([FromQuery] long id)
     {
-         return await _sysAppMenuRep.AsQueryable().Where(u => u.AppId == id).Select(u => u.MenuId).ToListAsync();
+        return await _sysAppMenuRep.AsQueryable().Where(u => u.AppId == id).Select(u => u.MenuId).ToListAsync();
     }
-    
+
     /// <summary>
     /// 授权菜单 🔖
     /// </summary>
@@ -116,11 +116,11 @@ public class SysAppService : IDynamicApiController, ITransient
     public async Task GrantMenu(UpdateAppMenuInput input)
     {
         input.MenuIdList ??= new();
-        
+
         await _sysAppMenuRep.DeleteAsync(u => u.AppId == input.Id);
-        
+
         var list = input.MenuIdList.Select(id => new SysAppMenu { AppId = input.Id, MenuId = id }).ToList();
-        
+
         await _sysAppMenuRep.InsertRangeAsync(list);
 
         // 清除应用下其他模块越权的授权数据,包括角色菜单,用户收藏菜单
@@ -130,7 +130,7 @@ public class SysAppService : IDynamicApiController, ITransient
         await _sysAppRep.Context.Deleteable<SysRoleMenu>().Where(u => roleIds.Contains(u.RoleId) && !input.MenuIdList.Contains(u.MenuId)).ExecuteCommandAsync();
         await _sysAppRep.Context.Deleteable<SysUserMenu>().Where(u => userIds.Contains(u.UserId) && !input.MenuIdList.Contains(u.MenuId)).ExecuteCommandAsync();
     }
-    
+
     /// <summary>
     /// 获取切换应用数据 🔖
     /// </summary>
@@ -159,7 +159,7 @@ public class SysAppService : IDynamicApiController, ITransient
             })
         };
     }
-    
+
     /// <summary>
     /// 切换应用 🔖
     /// </summary>
@@ -172,10 +172,10 @@ public class SysAppService : IDynamicApiController, ITransient
     {
         _ = await _sysAppRep.Context.Queryable<SysTenant>().FirstAsync(u => u.Id == input.TenantId) ?? throw Oops.Oh(ErrorCodeEnum.Z1003);
         _ = await _sysAppRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        
+
         var user = await _sysAppRep.Context.Queryable<SysUser>().FirstAsync(u => u.Id == _userManager.UserId);
         user.TenantId = input.TenantId;
-        
+
         return await _sysAuthService.CreateToken(user, input.Id);
     }
 

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginInput.cs

@@ -24,7 +24,7 @@ public class LoginInput
     /// <example>123456</example>
     [Required(ErrorMessage = "密码不能为空"), MinLength(3, ErrorMessage = "密码不能少于3个字符")]
     public string Password { get; set; }
-    
+
     /// <summary>
     /// 租户域名
     /// </summary>
@@ -58,7 +58,7 @@ public class LoginPhoneInput
     /// <example>123456</example>
     [Required(ErrorMessage = "验证码不能为空"), MinLength(4, ErrorMessage = "验证码不能少于4个字符")]
     public string Code { get; set; }
-    
+
     /// <summary>
     /// 租户域名
     /// </summary>

+ 9 - 9
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -66,7 +66,7 @@ public class SysAuthService : IDynamicApiController, ITransient
 
         // 判断是否开启验证码,其校验验证码
         if (await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysCaptcha) && !_captcha.Validate(input.CodeId.ToString(), input.Code)) throw Oops.Oh(ErrorCodeEnum.D0008);
-        
+
         // 获取登录租户和用户
         var (tenant, user) = await GetLoginUserAndTenant(input.Host, account: input.Account);
 
@@ -95,7 +95,7 @@ public class SysAuthService : IDynamicApiController, ITransient
 
         return await CreateToken(user, tenant.AppId);
     }
-    
+
     /// <summary>
     /// 获取登录租户和用户
     /// </summary>
@@ -104,20 +104,20 @@ public class SysAuthService : IDynamicApiController, ITransient
     /// <param name="phone"></param>
     /// <returns></returns>
     [NonAction]
-    public async Task<(SysTenant tenant, SysUser user)> GetLoginUserAndTenant(string host, string account=null, string phone=null)
+    public async Task<(SysTenant tenant, SysUser user)> GetLoginUserAndTenant(string host, string account = null, string phone = null)
     {
         // 是否租户隔离登录验证
         var isTenantHostLogin = await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysTenantHostLogin);
-        
+
         SysUser user;
         SysTenant tenant;
-        
+
         // 租户隔离登录
         if (isTenantHostLogin)
         {
             // 若租户域名为空或为本地域名,则取默认租户域名
             if (string.IsNullOrWhiteSpace(host) || host.StartsWith("localhost")) host = SqlSugarConst.DefaultTenantHost;
-            
+
             // 租户是否存在或已禁用
             tenant = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().GetFirstAsync(u => u.Host == host.ToLower());
             if (tenant?.Status != StatusEnum.Enable) throw Oops.Oh(ErrorCodeEnum.Z1003);
@@ -129,7 +129,7 @@ public class SysAuthService : IDynamicApiController, ITransient
                 .WhereIF(!string.IsNullOrWhiteSpace(phone), u => u.Phone.Equals(phone))
                 .FirstAsync();
             _ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009);
-            
+
             // 若登录的是超级管理员,则引用当前绑定的租户,这样登陆后操作的租户数据会与该租户关联
             if (user.AccountType == AccountTypeEnum.SuperAdmin) user.TenantId = tenant.Id;
         }
@@ -141,7 +141,7 @@ public class SysAuthService : IDynamicApiController, ITransient
                 .WhereIF(!string.IsNullOrWhiteSpace(phone), u => u.Phone.Equals(phone))
                 .FirstAsync();
             _ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009);
-            
+
             // 租户是否存在或已禁用
             tenant = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().GetFirstAsync(u => u.Id == user.TenantId);
             if (tenant?.Status != StatusEnum.Enable) throw Oops.Oh(ErrorCodeEnum.Z1003);
@@ -227,7 +227,7 @@ public class SysAuthService : IDynamicApiController, ITransient
     {
         // 校验短信验证码
         App.GetRequiredService<SysSmsService>().VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code });
-        
+
         // 获取登录租户和用户
         var (tenant, user) = await GetLoginUserAndTenant(input.Host, phone: input.Phone);
 

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Auth/SysLdapService.cs

@@ -216,7 +216,7 @@ public class SysLdapService : IDynamicApiController, ITransient
                 {
                     var sysUserLdap = CreateSysUserLdap(attrs, sysLdap.BindAttrAccount, sysLdap.BindAttrEmployeeId, deptCode);
                     sysUserLdap.Dn = ldapEntry.Dn;
-                    sysUserLdap.TenantId=sysLdap.TenantId;
+                    sysUserLdap.TenantId = sysLdap.TenantId;
                     userLdapList.Add(sysUserLdap);
                 }
             }
@@ -274,7 +274,7 @@ public class SysLdapService : IDynamicApiController, ITransient
         var pwdLastSet = !attrs.ContainsKey("pwdLastSet") ? null : attrs.GetAttribute("pwdLastSet")?.StringValue;
         if (!pwdLastSet!.Equals("0")) userLdap.PwdLastSetTime = DateTime.FromFileTime(Convert.ToInt64(pwdLastSet));
         var userAccountControl = !attrs.ContainsKey("userAccountControl") ? null : attrs.GetAttribute("userAccountControl")?.StringValue;
-        if ((Convert.ToInt32(userAccountControl) & 0x2) == 0x2) // 检查账户是否已过期(通过检查userAccountControl属性的特定位)  
+        if ((Convert.ToInt32(userAccountControl) & 0x2) == 0x2) // 检查账户是否已过期(通过检查userAccountControl属性的特定位)
             userLdap.AccountExpiresFlag = true;
         if ((Convert.ToInt32(userAccountControl) & 0x10000) == 0x10000) // 检查账户密码设置是否永不过期
             userLdap.DontExpiresFlag = true;

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs

@@ -4,7 +4,6 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using NewLife.Reflection;
 using Newtonsoft.Json;
 
 namespace Admin.NET.Core.Service;
@@ -139,7 +138,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
     private static string Key(string cacheName, object[] obs)
     {
         if (obs.OfType<TimeSpan>().Any()) throw new Exception("缓存参数类型不能能是:TimeSpan类型");
-        StringBuilder sb = new (cacheName + ":");
+        StringBuilder sb = new(cacheName + ":");
         foreach (var a in obs) sb.Append($"<{KeySingle(a)}>");
         return sb.ToString();
     }
@@ -311,6 +310,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
         var hash = GetHashMap<T>(key);
         hash.Add(hashKey, value);
     }
+
     /// <summary>
     /// 添加或更新一条HASH
     /// </summary>

+ 25 - 24
Admin.NET/Admin.NET.Core/Service/CodeGen/CustomViewEngine.cs

@@ -23,7 +23,7 @@ public class CustomViewEngine : ViewEngineModel
     public string NameSpace { get; set; }
 
     public string ClassName { get; set; }
-    
+
     public string LowerClassName { get; set; }
 
     public string ProjectLastName { get; set; }
@@ -33,39 +33,39 @@ public class CustomViewEngine : ViewEngineModel
     public string PrintType { get; set; }
 
     public string PrintName { get; set; }
-    
+
     public bool HasLikeQuery { get; set; }
-    
+
     public bool HasJoinTable { get; set; }
-    
+
     public bool HasEnumField { get; set; }
-    
+
     public bool HasDictField { get; set; }
-    
+
     public bool HasConstField { get; set; }
-    
+
     public bool HasSetStatus => TableField.Any(IsStatus);
-    
+
     public List<CodeGenConfig> TableField { get; set; }
-    
+
     public List<CodeGenConfig> ImportFieldList { get; set; }
-    
+
     public List<CodeGenConfig> UploadFieldList { get; set; }
 
     public List<CodeGenConfig> QueryWhetherList { get; set; }
-    
+
     public List<CodeGenConfig> ApiTreeFieldList { get; set; }
-    
+
     public List<CodeGenConfig> DropdownFieldList { get; set; }
-    
+
     public List<CodeGenConfig> AddUpdateFieldList { get; set; }
-    
+
     public List<CodeGenConfig> PrimaryKeyFieldList { get; set; }
-    
+
     public List<TableUniqueConfigItem> TableUniqueConfigList { get; set; }
 
     public List<CodeGenConfig> IgnoreUpdateFieldList => TableField.Where(u => u.WhetherAddUpdate == "N" && u.ColumnKey != "True" && u.WhetherCommon != "Y").ToList();
-    
+
     /// <summary>
     /// 格式化主键查询条件
     /// 例: PrimaryKeysFormat(" || ", "u.{0} == input.{0}")
@@ -77,12 +77,13 @@ public class CustomViewEngine : ViewEngineModel
     /// <param name="lowerFirstLetter">字段首字母小写</param>
     /// <returns></returns>
     public string PrimaryKeysFormat(string separator, string format, bool lowerFirstLetter = false) => string.Join(separator, PrimaryKeyFieldList.Select(u => string.Format(format, lowerFirstLetter ? u.LowerPropertyName : u.PropertyName)));
-    
+
     /// <summary>
     /// 注入的服务
     /// </summary>
     /// <returns></returns>
-    public Dictionary<string, string> InjectServiceMap {
+    public Dictionary<string, string> InjectServiceMap
+    {
         get
         {
             var injectMap = new Dictionary<string, string>();
@@ -92,33 +93,33 @@ public class CustomViewEngine : ViewEngineModel
             return injectMap;
         }
     }
-    
+
     /// <summary>
     /// 服务构造参数
     /// </summary>
-    public string InjectServiceArgs => InjectServiceMap.Count > 0 ? ", " +string.Join(", ", InjectServiceMap.Select(kv => $"{kv.Key} {kv.Value}")) : "";
-    
+    public string InjectServiceArgs => InjectServiceMap.Count > 0 ? ", " + string.Join(", ", InjectServiceMap.Select(kv => $"{kv.Key} {kv.Value}")) : "";
+
     /// <summary>
     /// 判断字段是否为状态字段
     /// </summary>
     /// <param name="column"></param>
     /// <returns></returns>
     public bool IsStatus(CodeGenConfig column) => column.PropertyName == nameof(SysUser.Status) && column.NetType == nameof(StatusEnum);
-    
+
     /// <summary>
     /// 获取首字母小写字符串
     /// </summary>
     /// <param name="text"></param>
     /// <returns></returns>
     public string ToLowerFirstLetter(string text) => string.IsNullOrWhiteSpace(text) ? text : text[..1].ToLower() + text[1..];
-    
+
     /// <summary>
     /// 将基本字段类型转为可空类型
     /// </summary>
     /// <param name="netType"></param>
     /// <returns></returns>
     public string GetNullableNetType(string netType) => Regex.IsMatch(netType, "(.*?Enum|bool|char|int|long|double|float|decimal)[?]?") ? netType.TrimEnd('?') + "?" : netType;
-    
+
     /// <summary>
     /// 获取前端表格列定义的属性
     /// </summary>

+ 12 - 12
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenConfig.cs

@@ -25,7 +25,7 @@ public class CodeGenConfig
     /// 数据库字段名
     /// </summary>
     public string ColumnName { get; set; }
-    
+
     /// <summary>
     /// 主外键
     /// </summary>
@@ -55,12 +55,12 @@ public class CodeGenConfig
     /// .NET类型
     /// </summary>
     public string NetType { get; set; }
-    
+
     /// <summary>
     /// 数据库中类型(物理类型)
     /// </summary>
     public string DataType { get; set; }
-    
+
     /// <summary>
     /// 可空.NET类型
     /// </summary>
@@ -95,14 +95,14 @@ public class CodeGenConfig
     /// 外键链接字段
     /// </summary>
     public string FkLinkColumnName { get; set; }
-    
+
     /// <summary>
     /// 外键显示字段
     /// </summary>
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
     public string FkDisplayColumns { get; set; }
-    
+
     /// <summary>
     /// 外键显示字段
     /// </summary>
@@ -117,17 +117,17 @@ public class CodeGenConfig
     /// 外键显示字段.NET类型
     /// </summary>
     public string FkColumnNetType { get; set; }
-    
+
     /// <summary>
     /// 父级字段
     /// </summary>
     public string PidColumn { get; set; }
-    
+
     /// <summary>
     /// 字典code
     /// </summary>
     public string DictTypeCode { get; set; }
-    
+
     /// <summary>
     /// 查询方式
     /// </summary>
@@ -162,7 +162,7 @@ public class CodeGenConfig
     /// 增改
     /// </summary>
     public string WhetherAddUpdate { get; set; }
-    
+
     /// <summary>
     /// 导入
     /// </summary>
@@ -172,7 +172,7 @@ public class CodeGenConfig
     /// 是否是通用字段
     /// </summary>
     public string WhetherCommon { get; set; }
-    
+
     /// <summary>
     /// 排序
     /// </summary>
@@ -182,7 +182,7 @@ public class CodeGenConfig
     /// 是否是选择器控件
     /// </summary>
     public bool IsSelectorEffectType => Regex.IsMatch(EffectType ?? "", "Selector$|ForeignKey", RegexOptions.IgnoreCase);
-    
+
     /// <summary>
     /// 去掉尾部Id的属性名
     /// </summary>
@@ -217,7 +217,7 @@ public class CodeGenConfig
             return displayPropertyName[..1].ToLower() + displayPropertyName[1..];
         }
     }
-    
+
     /// <summary>
     /// 获取外键显示值语句
     /// </summary>

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenInput.cs

@@ -70,19 +70,19 @@ public class CodeGenInput : BasePageInput
     /// 功能名(数据库表名称)
     /// </summary>
     public virtual string TableComment { get; set; }
-    
+
     /// <summary>
     /// 表唯一字段
     /// </summary>
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
     public virtual string TableUniqueConfig { get; set; }
-    
+
     /// <summary>
     /// 表唯一字段列表
     /// </summary>
     public virtual List<TableUniqueConfigItem> TableUniqueList { get; set; }
-    
+
     /// <summary>
     /// 菜单应用分类(应用编码)
     /// </summary>
@@ -144,7 +144,7 @@ public class AddCodeGenInput : CodeGenInput
     /// </summary>
     [Required(ErrorMessage = "作者姓名不能为空")]
     public override string AuthorName { get; set; }
-    
+
     ///// <summary>
     ///// 类名
     ///// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/ColumnOuput.cs

@@ -45,7 +45,7 @@ public class ColumnOuput
     /// .NET字段类型
     /// </summary>
     public string NetType { get; set; }
-    
+
     /// <summary>
     /// 字典编码
     /// </summary>

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/TableUniqueConfigItem.cs

@@ -1,7 +1,7 @@
 // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-// 
+//
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-// 
+//
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
 namespace Admin.NET.Core.Service;
@@ -15,12 +15,12 @@ public class TableUniqueConfigItem
     /// 字段列表
     /// </summary>
     public List<string> Columns { get; set; }
-    
+
     /// <summary>
     /// 描述信息
     /// </summary>
     public string Message { get; set; }
-    
+
     /// <summary>
     /// 格式化查询条件
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs

@@ -131,7 +131,7 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
             codeGenConfig.QueryType = GetDefaultQueryType(codeGenConfig); // QueryTypeEnum.eq.ToString();
             codeGenConfig.OrderNo = orderNo;
             codeGenConfigs.Add(codeGenConfig);
-            
+
             if (!string.IsNullOrWhiteSpace(tableColumn.DictTypeCode))
             {
                 codeGenConfig.QueryType = "==";

+ 16 - 17
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -15,7 +15,7 @@ namespace Admin.NET.Core.Service;
 public class SysCodeGenService : IDynamicApiController, ITransient
 {
     private readonly ISqlSugarClient _db;
-    
+
     private readonly SysCodeGenConfigService _codeGenConfigService;
     private readonly CodeGenOptions _codeGenOptions;
     private readonly IViewEngine _viewEngine;
@@ -365,14 +365,14 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         }
 
         if (input.GenerateMenu) await AddMenu(input.TableName, input.BusName, input.MenuPid ?? 0, input.MenuIcon, input.PagePath, tableFieldList);
-        
+
         // 非ZIP压缩返回空
         if (!input.GenerateType.StartsWith('1')) return null;
-        
+
         // 判断是否存在同名称文件
         string downloadPath = zipPath + ".zip";
         if (File.Exists(downloadPath)) File.Delete(downloadPath);
-        
+
         // 创建zip文件并返回下载地址
         ZipFile.CreateFromDirectory(zipPath, downloadPath);
         return new { url = $"{App.HttpContext.Request.Scheme}://{App.HttpContext.Request.Host.Value}/codeGen/{input.TableName}.zip" };
@@ -383,7 +383,6 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("获取代码生成预览")]
-    // ReSharper disable once MemberCanBePrivate.Global
     public async Task<Dictionary<string, string>> Preview(SysCodeGen input)
     {
         var (_, result) = await RenderTemplateAsync(input);
@@ -413,7 +412,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             ProjectLastName = input.NameSpace!.Split('.').Last(),
             LowerClassName = input.TableName![..1].ToLower() + input.TableName[1..],
             TableUniqueConfigList = input.TableUniqueList ?? new(),
-            
+
             TableField = tableFieldList,
             QueryWhetherList = tableFieldList.Where(u => u.WhetherQuery == "Y").ToList(),
             ImportFieldList = tableFieldList.Where(u => u.WhetherImport == "Y").ToList(),
@@ -422,7 +421,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             AddUpdateFieldList = tableFieldList.Where(u => u.WhetherAddUpdate == "Y").ToList(),
             ApiTreeFieldList = tableFieldList.Where(u => u.EffectType == "ApiTreeSelector").ToList(),
             DropdownFieldList = tableFieldList.Where(u => u.EffectType is "ForeignKey" or "ApiTreeSelector").ToList(),
-            
+
             HasJoinTable = joinTableList.Count > 0,
             HasDictField = tableFieldList.Any(u => u.EffectType == "DictSelector"),
             HasEnumField = tableFieldList.Any(u => u.EffectType == "EnumSelector"),
@@ -445,7 +444,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
                 builder.AddAssemblyReferenceByName("System.Text.RegularExpressions");
                 builder.AddAssemblyReferenceByName("System.Collections");
                 builder.AddAssemblyReferenceByName("System.Linq");
-                
+
                 builder.AddUsing("System.Text.RegularExpressions");
                 builder.AddUsing("System.Collections.Generic");
                 builder.AddUsing("System.Linq");
@@ -474,11 +473,11 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         var parentMenuPath = "";
         var appId = _userManager.AppId;
         var appMenuList = new List<SysAppMenu>();
-        var lowerClassName =  className[..1].ToLower() + className[1..];
+        var lowerClassName = className[..1].ToLower() + className[1..];
         if (pid == 0)
         {
             // 新增目录,并记录Id
-            var dirMenu = new SysMenu { Pid=0, Title=title, Type=MenuTypeEnum.Dir, Icon="robot", Path="/" + className.ToLower(), Component="Layout" };
+            var dirMenu = new SysMenu { Pid = 0, Title = title, Type = MenuTypeEnum.Dir, Icon = "robot", Path = "/" + className.ToLower(), Component = "Layout" };
             pid = (await _db.Insertable(dirMenu).ExecuteReturnEntityAsync()).Id;
             appMenuList.Add(new SysAppMenu { AppId = appId, MenuId = pid });
         }
@@ -487,9 +486,9 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             var parentMenu = await _db.Queryable<SysMenu>().FirstAsync(u => u.Id == pid) ?? throw Oops.Oh(ErrorCodeEnum.D1505);
             parentMenuPath = parentMenu.Path;
         }
-        
+
         // 新增菜单,并记录Id
-        var rootMenu = new SysMenu { Pid=pid, Title=title, Type=MenuTypeEnum.Menu, Icon=menuIcon, Path=$"{parentMenuPath}/{className.ToLower()}", Component=$"/{pagePath}/{lowerClassName}/index" };
+        var rootMenu = new SysMenu { Pid = pid, Title = title, Type = MenuTypeEnum.Menu, Icon = menuIcon, Path = $"{parentMenuPath}/{className.ToLower()}", Component = $"/{pagePath}/{lowerClassName}/index" };
         pid = (await _db.Insertable(rootMenu).ExecuteReturnEntityAsync()).Id;
         appMenuList.Add(new SysAppMenu { AppId = appId, MenuId = pid });
 
@@ -509,13 +508,13 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         };
 
         if (tableFieldList.Any(u => u.EffectType is "ForeignKey" or "ApiTreeSelector" && (u.WhetherAddUpdate == "Y" || u.WhetherQuery == "Y")))
-            menuList.Add(new SysMenu { Title="下拉列表数据", Permission=$"{lowerClassName}:dropdownData", Pid=pid, Type=MenuTypeEnum.Btn, OrderNo=orderNo+=10});
-        
+            menuList.Add(new SysMenu { Title = "下拉列表数据", Permission = $"{lowerClassName}:dropdownData", Pid = pid, Type = MenuTypeEnum.Btn, OrderNo = orderNo += 10 });
+
         foreach (var column in tableFieldList.Where(u => u.EffectType == "Upload"))
-            menuList.Add(new SysMenu { Title=$"上传{column.ColumnComment}", Permission=$"{lowerClassName}:upload{column.PropertyName}", Pid=pid, Type=MenuTypeEnum.Btn, OrderNo=orderNo+=10});
-        
+            menuList.Add(new SysMenu { Title = $"上传{column.ColumnComment}", Permission = $"{lowerClassName}:upload{column.PropertyName}", Pid = pid, Type = MenuTypeEnum.Btn, OrderNo = orderNo += 10 });
+
         await _db.Insertable(menuList).ExecuteCommandAsync();
-        
+
         // 新增应用菜单关联
         appMenuList.AddRange(menuList.Select(u => new SysAppMenu { AppId = appId, MenuId = u.Id }));
         await _db.Insertable(appMenuList).ExecuteCommandAsync();

+ 6 - 7
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -94,7 +94,7 @@ public class SysConfigService : IDynamicApiController, ITransient
     public async Task DeleteConfig(DeleteConfigInput input)
     {
         var config = await _sysConfigRep.GetFirstAsync(u => u.Id == input.Id);
-        
+
         // 禁止删除系统参数
         if (config.SysFlag == YesNoEnum.Y) throw Oops.Oh(ErrorCodeEnum.D9001);
 
@@ -115,7 +115,7 @@ public class SysConfigService : IDynamicApiController, ITransient
         foreach (var id in ids)
         {
             var config = await _sysConfigRep.GetFirstAsync(u => u.Id == id);
-            
+
             // 禁止删除系统参数
             if (config.SysFlag == YesNoEnum.Y) continue;
 
@@ -225,7 +225,7 @@ public class SysConfigService : IDynamicApiController, ITransient
         {
             var info = await _sysConfigRep.GetFirstAsync(c => c.Code == Config.Code);
             if (info == null) continue;
-            
+
             await _sysConfigRep.AsUpdateable().SetColumns(u => u.Value == Config.Value).Where(u => u.Code == Config.Code).ExecuteCommandAsync();
             Remove(info);
         }
@@ -248,7 +248,7 @@ public class SysConfigService : IDynamicApiController, ITransient
         // var sysCopyright = await GetConfigValue<string>(ConfigConst.SysWebCopyright);
         // var sysIcp = await GetConfigValue<string>(ConfigConst.SysWebIcp);
         var app = await App.GetRequiredService<SysAppService>().GetCurrentAppInfo();
-        
+
         var sysIcpUrl = await GetConfigValue<string>(ConfigConst.SysWebIcpUrl);
         var sysSecondVer = await GetConfigValue<bool>(ConfigConst.SysSecondVer);
         var sysCaptcha = await GetConfigValue<bool>(ConfigConst.SysCaptcha);
@@ -297,7 +297,7 @@ public class SysConfigService : IDynamicApiController, ITransient
 
             // 删除已存在文件
             if (File.Exists(oldSysLogoAbsoluteFilePath)) File.Delete(oldSysLogoAbsoluteFilePath);
-    
+
             // 创建文件夹
             var absoluteFileDir = Path.GetDirectoryName(absoluteFilePath);
             if (!Directory.Exists(absoluteFileDir)) Directory.CreateDirectory(absoluteFileDir);
@@ -317,7 +317,7 @@ public class SysConfigService : IDynamicApiController, ITransient
         app.Icp = input.SysIcp;
 
         await _sysConfigRep.Context.Updateable(app).ExecuteCommandAsync();
-        
+
         await UpdateConfigValue(ConfigConst.SysWebIcpUrl, input.SysIcpUrl);
         await UpdateConfigValue(ConfigConst.SysSecondVer, (input.SysSecondVer ?? false).ToString());
         await UpdateConfigValue(ConfigConst.SysCaptcha, (input.SysCaptcha ?? true).ToString());
@@ -329,6 +329,5 @@ public class SysConfigService : IDynamicApiController, ITransient
         _sysCacheService.Remove($"{CacheConst.KeyConfig}Remark:{config.Code}");
         _sysCacheService.Remove($"{CacheConst.KeyConfig}{config.GroupCode}:GroupWithCache");
         _sysCacheService.Remove($"{CacheConst.KeyConfig}{config.Code}");
-
     }
 }

+ 5 - 5
Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

@@ -342,7 +342,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
         // 再使用第一个主键排序
         query = query.OrderBy(dbColumnInfos.First(u => u.IsPrimarykey).DbColumnName);
         var records = ((IEnumerable)await query.ToListAsync()).ToDynamicList();
-        
+
         // 过滤已存在的数据
         if (input.FilterExistingData && records.Any())
         {
@@ -372,14 +372,14 @@ public class SysDatabaseService : IDynamicApiController, ITransient
                     {
                         string fullName = seedDataTypes[i].FullName;
                         if ((fullName == doNotFilterFullName1) || (fullName == doNotFilterFullName2)) continue;
-                        
+
                         // 删除重复数据
                         var instance = Activator.CreateInstance(seedDataTypes[i]);
                         var hasDataMethod = seedDataTypes[i].GetMethod("HasData");
                         var seedData = ((IEnumerable)hasDataMethod?.Invoke(instance, null))?.Cast<object>();
                         if (seedData == null) continue;
 
-                        List<object> recordsToRemove = new ();
+                        List<object> recordsToRemove = new();
                         foreach (var record in records)
                         {
                             object recordId = pkInfo.GetValue(record);
@@ -425,7 +425,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
         //         jsonIgnoreInfo.Add(record);
         //     }
         // }
-        
+
         // 获取所有字段信息
         var propertyList = entityType.GetProperties().Where(x => false == (x.GetCustomAttribute<SugarColumn>()?.IsIgnore ?? false)).ToList();
         for (var i = 0; i < propertyList.Count; i++)
@@ -480,7 +480,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
             builder.AddUsing("System.Collections.Generic");
             builder.AddUsing("System.Linq");
         });
-        
+
         var targetPath = GetSeedDataTargetPath(input);
         await File.WriteAllTextAsync(targetPath, tResult, Encoding.UTF8);
     }

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs

@@ -72,7 +72,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     public async Task AddDictType(AddDictTypeInput input)
     {
         if (input.Code.ToLower().EndsWith("enum")) throw Oops.Oh(ErrorCodeEnum.D3006);
-        
+
         var isExist = await _sysDictTypeRep.IsAnyAsync(u => u.Code == input.Code);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D3001);
 
@@ -91,7 +91,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     {
         var dict = await _sysDictTypeRep.GetFirstAsync(x => x.Id == input.Id);
         if (dict == null) throw Oops.Oh(ErrorCodeEnum.D3000);
-        
+
         if (dict.Code.ToLower().EndsWith("enum") && input.Code != dict.Code) throw Oops.Oh(ErrorCodeEnum.D3007);
 
         var isExist = await _sysDictTypeRep.IsAnyAsync(u => u.Code == input.Code && u.Id != input.Id);

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs

@@ -65,7 +65,7 @@ public class UploadFileInput
     /// 允许格式:.jpeg.jpg.png.bmp.gif.tif
     /// </summary>
     public string AllowSuffix { get; set; }
-    
+
     /// <summary>
     /// 文件类型
     /// </summary>
@@ -81,7 +81,7 @@ public class UploadFileFromBase64Input
     /// 文件名
     /// </summary>
     public string? FileName { get; set; }
-    
+
     /// <summary>
     /// 文件内容
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Job/SysJobService.cs

@@ -109,7 +109,7 @@ public class SysJobService : IDynamicApiController, ITransient
                 throw new NotSupportedException();
         }
 
-        _schedulerFactory.AddJob( JobBuilder.Create(jobType).LoadFrom(input.Adapt<SysJobDetail>() ).SetJobType(jobType));
+        _schedulerFactory.AddJob(JobBuilder.Create(jobType).LoadFrom(input.Adapt<SysJobDetail>()).SetJobType(jobType));
 
         // 延迟一下等待持久化写入,再执行其他字段的更新
         await Task.Delay(500);

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Menu/Dto/MenuInput.cs

@@ -17,12 +17,12 @@ public class MenuInput
     /// 菜单类型(1目录 2菜单 3按钮)
     /// </summary>
     public MenuTypeEnum? Type { get; set; }
-    
+
     /// <summary>
     /// 获取所有菜单
     /// </summary>
     public bool All { get; set; }
-    
+
     /// <summary>
     /// 应用Id
     /// </summary>

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -187,10 +187,10 @@ public class SysMenuService : IDynamicApiController, ITransient
 
         // 级联删除角色菜单数据
         await _sysRoleMenuService.DeleteRoleMenuByMenuIdList(menuIdList);
-        
+
         // 级联删除用户收藏菜单
         await _sysUserMenuService.DeleteMenuList(menuIdList);
-        
+
         // 删除应用菜单关联
         await _sysAppMenuRep.AsDeleteable().Where(u => menuIdList.Contains(u.MenuId)).ExecuteCommandAsync();
 

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/Message/SysEmailService.cs

@@ -37,13 +37,13 @@ public class SysEmailService : IDynamicApiController, ITransient
         var webTitle = await _sysConfigService.GetConfigValue<string>(ConfigConst.SysWebTitle);
         title = string.IsNullOrWhiteSpace(title) ? $"{webTitle} 系统邮件" : title;
         var message = new MimeMessage();
-        
+
         message.From.Add(new MailboxAddress(_emailOptions.DefaultFromEmail, _emailOptions.DefaultFromEmail));
-        
+
         message.To.Add(string.IsNullOrWhiteSpace(toEmail)
             ? new MailboxAddress(_emailOptions.DefaultToEmail, _emailOptions.DefaultToEmail)
             : new MailboxAddress(toEmail, toEmail));
-        
+
         message.Subject = title;
         message.Body = new TextPart("html")
         {

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Message/SysSmsService.cs

@@ -53,9 +53,9 @@ public class SysSmsService : IDynamicApiController, ITransient
     public bool VerifyCode(SmsVerifyCodeInput input)
     {
         var verifyCode = _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
-        
+
         if (string.IsNullOrWhiteSpace(verifyCode)) throw Oops.Oh("验证码不存在或已失效,请重新获取!");
-        
+
         if (verifyCode != input.Code) throw Oops.Oh("验证码错误!");
 
         return true;

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs

@@ -91,9 +91,9 @@ public class SysNoticeService : IDynamicApiController, ITransient
     public async Task DeleteNotice(DeleteNoticeInput input)
     {
         var sysNotice = await _sysNoticeRep.GetByIdAsync(input.Id);
-        
+
         if (sysNotice.CreateUserId != _userManager.UserId) throw Oops.Oh(ErrorCodeEnum.D7003);
-        
+
         if (sysNotice.Status == NoticeStatusEnum.PUBLIC) throw Oops.Oh(ErrorCodeEnum.D7001);
 
         await _sysNoticeRep.DeleteAsync(u => u.Id == input.Id);

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

@@ -300,19 +300,19 @@ public class SysOrgService : IDynamicApiController, ITransient
 
         // 本人创建机构集合
         var orgList0 = await _sysOrgRep.AsQueryable().Where(u => u.CreateUserId == userId).Select(u => u.Id).ToListAsync();
-        
+
         // 扩展机构集合
         var orgList1 = await _sysUserExtOrgService.GetUserExtOrgList(userId);
-        
+
         // 角色机构集合
         var orgList2 = await GetUserRoleOrgIdList(userId, userOrgId);
-        
+
         // 机构并集
         orgIdList = orgList1.Select(u => u.OrgId).Union(orgList2).Union(orgList0).ToList();
-        
+
         // 当前所属机构
         if (!orgIdList.Contains(userOrgId)) orgIdList.Add(userOrgId);
-        
+
         _sysCacheService.Set($"{CacheConst.KeyUserOrg}{userId}", orgIdList, TimeSpan.FromDays(7)); // 存缓存
         return orgIdList;
     }
@@ -326,7 +326,7 @@ public class SysOrgService : IDynamicApiController, ITransient
     private async Task<List<long>> GetUserRoleOrgIdList(long userId, long userOrgId)
     {
         var roleList = await _sysUserRoleService.GetUserRoleList(userId);
-        
+
         if (roleList.Count < 1) return new(); // 空机构Id集合
 
         return await GetUserOrgIdList(roleList, userId, userOrgId);

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Region/SysRegionService.cs

@@ -186,11 +186,11 @@ public class SysRegionService : IDynamicApiController, ITransient
                         Remark = item1.Href,
                         Level = 2,
                     };
-                    
+
                     // 若URL中查询的一级行政区域缺少Code则通过二级区域填充
                     if (list.Count == 1 && !string.IsNullOrEmpty(region1.Code))
                         region.Code = region1.Code.Substring(0, 2).PadRight(region1.Code.Length, '0');
-                    
+
                     // 同步层级为“1-省级”退出
                     if (syncLevel < 2) break;
 

+ 11 - 11
Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs

@@ -192,19 +192,19 @@ public class SysRoleService : IDynamicApiController, ITransient
                 case (int)DataScopeEnum.All: throw Oops.Oh(ErrorCodeEnum.D1016);
                 // 若数据范围自定义,则判断授权数据范围是否有权限
                 case (int)DataScopeEnum.Define:
-                {
-                    var grantOrgIdList = input.OrgIdList;
-                    if (grantOrgIdList.Count > 0)
                     {
-                        var orgIdList = await _sysOrgService.GetUserOrgIdList();
-                        if (orgIdList.Count < 1)
-                            throw Oops.Oh(ErrorCodeEnum.D1016);
-                        if (!grantOrgIdList.All(u => orgIdList.Any(c => c == u)))
-                            throw Oops.Oh(ErrorCodeEnum.D1016);
+                        var grantOrgIdList = input.OrgIdList;
+                        if (grantOrgIdList.Count > 0)
+                        {
+                            var orgIdList = await _sysOrgService.GetUserOrgIdList();
+                            if (orgIdList.Count < 1)
+                                throw Oops.Oh(ErrorCodeEnum.D1016);
+                            if (!grantOrgIdList.All(u => orgIdList.Any(c => c == u)))
+                                throw Oops.Oh(ErrorCodeEnum.D1016);
+                        }
+
+                        break;
                     }
-
-                    break;
-                }
             }
         }
         role.DataScope = (DataScopeEnum)dataScope;

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Tenant/Dto/TenantInput.cs

@@ -34,7 +34,7 @@ public class AddTenantInput : TenantOutput
     /// </summary>
     [Required(ErrorMessage = "应用不能为空")]
     public new long? AppId { get; set; }
-    
+
     /// <summary>
     /// 租户名称
     /// </summary>
@@ -46,7 +46,7 @@ public class AddTenantInput : TenantOutput
     /// </summary>
     [Required(ErrorMessage = "租管账号不能为空"), MinLength(3, ErrorMessage = "租管账号不能少于3个字符")]
     public override string AdminAccount { get; set; }
-    
+
     /// <summary>
     /// 租户域名
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Tenant/Dto/TenantOutput.cs

@@ -12,7 +12,7 @@ public class TenantOutput : SysTenant
     /// 租户名称
     /// </summary>
     public virtual string Name { get; set; }
-    
+
     /// <summary>
     /// 关联应用名称
     /// </summary>

+ 9 - 8
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -117,7 +117,7 @@ public class SysTenantService : IDynamicApiController, ITransient
     {
         var isExist = await _sysOrgRep.IsAnyAsync(u => u.Name == input.Name);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D1300);
-        
+
         input.Host = input.Host.ToLower();
         isExist = await _sysTenantRep.IsAnyAsync(u => u.Host == input.Host);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D1303);
@@ -180,20 +180,21 @@ public class SysTenantService : IDynamicApiController, ITransient
         var tenantName = tenant.Name;
 
         // 初始化机构
-        var newOrg = new SysOrg { TenantId=tenantId, Pid=0, Name=tenantName, Code=tenantName, Remark=tenantName, };
+        var newOrg = new SysOrg { TenantId = tenantId, Pid = 0, Name = tenantName, Code = tenantName, Remark = tenantName, };
         await _sysOrgRep.InsertAsync(newOrg);
 
         // 初始化角色
-        var newRole = new SysRole { TenantId=tenantId, Name="租管-" + tenantName, Code=CommonConst.SysAdminRole, DataScope=DataScopeEnum.All, Remark=tenantName };
+        var newRole = new SysRole { TenantId = tenantId, Name = "租管-" + tenantName, Code = CommonConst.SysAdminRole, DataScope = DataScopeEnum.All, Remark = tenantName };
         await _sysRoleRep.InsertAsync(newRole);
 
         // 初始化职位
-        var newPos = new SysPos { TenantId=tenantId, Name="租管-" + tenantName, Code=tenantName, Remark=tenantName };
+        var newPos = new SysPos { TenantId = tenantId, Name = "租管-" + tenantName, Code = tenantName, Remark = tenantName };
         await _sysPosRep.InsertAsync(newPos);
 
         // 初始化系统账号
         var password = await _sysConfigService.GetConfigValue<string>(ConfigConst.SysPassword);
-        var newUser = new SysUser {
+        var newUser = new SysUser
+        {
             TenantId = tenantId,
             Account = tenant.AdminAccount,
             Password = CryptogramUtil.Encrypt(password),
@@ -284,7 +285,7 @@ public class SysTenantService : IDynamicApiController, ITransient
         input.Host = input.Host.ToLower();
         isExist = await _sysTenantRep.IsAnyAsync(u => u.Host == input.Host && u.Id != input.Id);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D1303);
-        
+
         isExist = await _sysUserRep.AsQueryable().ClearFilter().AnyAsync(u => u.AccountType == AccountTypeEnum.SuperAdmin && u.Account == input.AdminAccount && u.Id != input.UserId);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D1301);
 
@@ -378,11 +379,11 @@ public class SysTenantService : IDynamicApiController, ITransient
             _sysTenantRep.AsTenant().RemoveConnection(tenantId);
 
         var tenantList = await _sysTenantRep.GetListAsync();
-        
+
         // 对租户库连接进行SM2加密
         foreach (var tenant in tenantList.Where(tenant => !string.IsNullOrWhiteSpace(tenant.Connection)))
             tenant.Connection = CryptogramUtil.SM2Encrypt(tenant.Connection);
-        
+
         _sysCacheService.Set(CacheConst.KeyTenant, tenantList);
     }
 

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/User/SysUserMenuService.cs

@@ -77,7 +77,7 @@ public class SysUserMenuService : IDynamicApiController, ITransient
         return await _sysUserMenuRep.AsQueryable()
             .Where(u => u.UserId == _userManager.UserId).Select(u => u.MenuId).ToListAsync();
     }
-    
+
     /// <summary>
     /// 删除指定用户的收藏菜单
     /// </summary>

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -103,7 +103,7 @@ public class SysUserService : IDynamicApiController, ITransient
         // 是否租户隔离登录验证
         var isTenantHostLogin = await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysTenantHostLogin);
         var query = _sysUserRep.AsQueryable().ClearFilter().WhereIF(isTenantHostLogin, u => u.TenantId == _userManager.TenantId || u.AccountType == AccountTypeEnum.SuperAdmin);
-        
+
         if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
         if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
 
@@ -140,7 +140,7 @@ public class SysUserService : IDynamicApiController, ITransient
         var isTenantHostLogin = await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysTenantHostLogin);
         var query = _sysUserRep.AsQueryable().ClearFilter().Where(u => u.Id != input.Id)
             .WhereIF(isTenantHostLogin, u => u.TenantId == _userManager.TenantId || u.AccountType == AccountTypeEnum.SuperAdmin);
-        
+
         if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
         if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
 
@@ -211,7 +211,7 @@ public class SysUserService : IDynamicApiController, ITransient
 
         // 删除域账号
         await _sysUserLdapService.DeleteUserLdapByUserId(input.Id);
-        
+
         // 删除用户收藏菜单
         await _sysUserMenuService.DeleteUserMenuList(input.Id);
 

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/User/UserManager.cs

@@ -12,7 +12,7 @@ namespace Admin.NET.Core;
 public class UserManager : IScoped
 {
     private readonly IHttpContextAccessor _httpContextAccessor;
-    
+
     /// <summary>
     /// 应用ID
     /// </summary>

+ 19 - 19
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -376,18 +376,18 @@ public static class SqlSugarSetup
     /// <param name="config"></param>
     private static void InitSeedData(SqlSugarScope db, DbConnectionConfig config)
     {
-        SqlSugarScopeProvider dbProvider = db.GetConnectionScope(config.ConfigId); 
+        SqlSugarScopeProvider dbProvider = db.GetConnectionScope(config.ConfigId);
         _isHandlingSeedData = true;
-        
+
         Log.Information($"初始化种子数据 {config.DbType} - {config.ConfigId}");
         var seedDataTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass && u.GetInterfaces().Any(i => i.HasImplementedRawGeneric(typeof(ISqlSugarEntitySeedData<>))))
             .WhereIF(config.SeedSettings.EnableIncreSeed, u => u.IsDefined(typeof(IncreSeedAttribute), false))
             .OrderBy(u => u.GetCustomAttributes(typeof(SeedDataAttribute), false).Length > 0 ? ((SeedDataAttribute)u.GetCustomAttributes(typeof(SeedDataAttribute), false)[0]).Order : 0).ToList();
-        
-        int count = 0, sum = seedDataTypes.Count; 
-        foreach (var seedType in seedDataTypes) 
-        { 
-            var entityType = seedType.GetInterfaces().First().GetGenericArguments().First(); 
+
+        int count = 0, sum = seedDataTypes.Count;
+        foreach (var seedType in seedDataTypes)
+        {
+            var entityType = seedType.GetInterfaces().First().GetGenericArguments().First();
             if (config.ConfigId.ToString() == SqlSugarConst.MainConfigId) // 默认库(有系统表特性、没有日志表和租户表特性)
             {
                 if (entityType.GetCustomAttribute<SysTableAttribute>() == null && (entityType.GetCustomAttribute<LogTableAttribute>() != null || entityType.GetCustomAttribute<TenantAttribute>() != null)) continue;
@@ -401,17 +401,17 @@ public static class SqlSugarSetup
                 var att = entityType.GetCustomAttribute<TenantAttribute>(); // 自定义的库
                 if (att == null || att.configId.ToString() != config.ConfigId.ToString()) continue;
             }
-            
-            var instance = Activator.CreateInstance(seedType); 
-            var hasDataMethod = seedType.GetMethod("HasData"); 
-            var seedData = ((IEnumerable)hasDataMethod?.Invoke(instance, null))?.Cast<object>(); 
+
+            var instance = Activator.CreateInstance(seedType);
+            var hasDataMethod = seedType.GetMethod("HasData");
+            var seedData = ((IEnumerable)hasDataMethod?.Invoke(instance, null))?.Cast<object>();
             if (seedData == null) continue;
-            
-            var entityInfo = dbProvider.EntityMaintenance.GetEntityInfo(entityType); 
-            Console.WriteLine($"添加数据 {entityInfo.DbTableName} ({config.ConfigId} - {++count}/{sum},数据量:{seedData.Count()})"); 
-            
+
+            var entityInfo = dbProvider.EntityMaintenance.GetEntityInfo(entityType);
+            Console.WriteLine($"添加数据 {entityInfo.DbTableName} ({config.ConfigId} - {++count}/{sum},数据量:{seedData.Count()})");
+
             // 若实体包含Id字段,则设置为当前租户Id递增1
-            if (entityInfo.Columns.Any(u => u.PropertyName == nameof(EntityBaseId.Id))) 
+            if (entityInfo.Columns.Any(u => u.PropertyName == nameof(EntityBaseId.Id)))
             {
                 var seedId = config.ConfigId.ToLong();
                 foreach (var sd in seedData)
@@ -420,8 +420,8 @@ public static class SqlSugarSetup
                     if (id != null && (id.ToString() == "0" || string.IsNullOrWhiteSpace(id.ToString())))
                         sd.GetType().GetProperty(nameof(EntityBaseId.Id))!.SetValue(sd, ++seedId);
                 }
-            } 
-            
+            }
+
             if (entityType.GetCustomAttribute<SplitTableAttribute>(true) != null)
             {
                 //拆分表的操作需要实体类型,而通过反射很难实现
@@ -436,7 +436,7 @@ public static class SqlSugarSetup
                 {
                     // 按主键进行批量增加和更新
                     var storage = dbProvider.StorageableByObject(seedData.ToList()).ToStorage();
-                    
+
                     // 先修改再插入,否则会更新修改时间字段
                     if (seedType.GetCustomAttribute<IgnoreUpdateSeedAttribute>() == null) // 有忽略更新种子特性时则不更新
                     {

+ 8 - 2
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarTypeProvider.cs

@@ -1,4 +1,10 @@
-using System.Linq.Dynamic.Core.CustomTypeProviders;
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using System.Linq.Dynamic.Core.CustomTypeProviders;
 
 namespace Admin.NET.Core;
 
@@ -7,7 +13,7 @@ namespace Admin.NET.Core;
 /// </summary>
 public class SqlSugarTypeProvider : DefaultDynamicLinqCustomTypeProvider
 {
-    public SqlSugarTypeProvider( bool cacheCustomTypes = true) : base(ParsingConfig.Default, cacheCustomTypes)
+    public SqlSugarTypeProvider(bool cacheCustomTypes = true) : base(ParsingConfig.Default, cacheCustomTypes)
     {
     }
 

+ 7 - 7
Admin.NET/Admin.NET.Core/Utils/CodeGenUtil.cs

@@ -67,20 +67,20 @@ public static class CodeGenUtil
         switch (dataType.ToLower())
         {
             case "interval year to month": return "int";
-            
+
             case "interval day to second": return "TimeSpan";
-            
+
             case "smallint": return "Int16";
-            
+
             case "int":
             case "integer": return "int";
-            
+
             case "long": return "long";
-            
+
             case "float": return "float";
-            
+
             case "decimal": return "decimal";
-            
+
             case "number":
                 if (length == null) return "decimal";
                 return scale switch

+ 2 - 2
Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs

@@ -39,7 +39,7 @@ public static class CommonUtil
             return Math.Abs(hash1 + (hash2 * 1566083941));
         }
     }
-    
+
     /// <summary>
     /// 生成百分数
     /// </summary>
@@ -215,7 +215,7 @@ public static class CommonUtil
         IImporter importer = new ExcelImporter();
         var res = await importer.Import<T>(file.OpenReadStream());
         var message = string.Empty;
-        
+
         if (!res.HasError) return res.Data;
 
         if (res.Exception != null)

+ 1 - 1
Admin.NET/Admin.NET.Core/Utils/ComputerUtil.cs

@@ -348,7 +348,7 @@ public class MemoryMetricsClient
         var metrics = new MemoryMetrics();
         var memory = output.Split(' ', (char)StringSplitOptions.RemoveEmptyEntries);
         if (memory.Length != 2) return metrics;
- 
+
         metrics.Total = double.Parse(memory[0]) / 1024;
         metrics.Free = double.Parse(memory[1]) / 1024;
         metrics.Used = metrics.Total - metrics.Free;

+ 1 - 1
Admin.NET/Admin.NET.Core/Utils/ExcelHelper.cs

@@ -112,7 +112,7 @@ public class ExcelHelper
                     if (dict != null)
                     {// 填充字典值value为下列列表
                         dataList = App.GetService<SysDictTypeService>().GetDataList(new GetDataDictTypeInput
-                            { Code = dict.DictTypeCode }).Result?.Select(x => x.Label).ToList();
+                        { Code = dict.DictTypeCode }).Result?.Select(x => x.Label).ToList();
                     }
                 }
             }

+ 0 - 5
Admin.NET/Admin.NET.Web.Entry/Views/Home/Index.cshtml

@@ -4,9 +4,4 @@
 
 <div style="text-align:center;margin-top:50px;">
     <img src="~/images/logo.png" style="height:100px;" />
-    <div align="center">
-        <p><a href="https://gitee.com/dotnetchina/Furion/stargazers"><img src="https://gitee.com/dotnetchina/Furion/badge/star.svg?theme=gvp" alt="star"></a> <a href="https://gitee.com/dotnetchina/Furion/members"><img src="https://gitee.com/dotnetchina/Furion/badge/fork.svg?theme=gvp" alt="fork"></a> <a href="https://github.com/MonkSoul/Furion/stargazers"><img src="https://img.shields.io/github/stars/MonkSoul/Furion?logo=github" alt="GitHub stars"></a> <a href="https://github.com/MonkSoul/Furion/network"><img src="https://img.shields.io/github/forks/MonkSoul/Furion?logo=github" alt="GitHub forks"></a> <a href="https://github.com/MonkSoul/Furion/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MulanPSL--2.0-orange" alt="GitHub license"></a> <a href="https://www.nuget.org/packages/Furion"><img src="https://img.shields.io/nuget/v/Furion.svg?cacheSeconds=10800" alt="nuget"></a></p>
-    </div>
-    <p>@ViewBag.Description</p>
-    <p><a href="/api">API 接口</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://gitee.com/dotnetchina/Furion" target="_blank">源码地址</a></p>
 </div>