zuohuaijun 3 лет назад
Родитель
Сommit
7e055142ed
33 измененных файлов с 264 добавлено и 3 удалено
  1. 3 0
      Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
  2. 8 0
      Admin.NET/Admin.NET.Application/Configuration/Enum.json
  3. 78 0
      Admin.NET/Admin.NET.Core/Admin.NET.Core.xml
  4. 1 0
      Admin.NET/Admin.NET.Core/Enum/AccountTypeEnum.cs
  5. 1 0
      Admin.NET/Admin.NET.Core/Enum/CacheTypeEnum.cs
  6. 1 0
      Admin.NET/Admin.NET.Core/Enum/CardTypeEnum.cs
  7. 1 0
      Admin.NET/Admin.NET.Core/Enum/CryptogramEnum.cs
  8. 1 0
      Admin.NET/Admin.NET.Core/Enum/CultureLevelEnum.cs
  9. 1 0
      Admin.NET/Admin.NET.Core/Enum/DataOpTypeEnum.cs
  10. 1 0
      Admin.NET/Admin.NET.Core/Enum/DataScopeEnum.cs
  11. 1 0
      Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs
  12. 1 0
      Admin.NET/Admin.NET.Core/Enum/GenderEnum.cs
  13. 1 0
      Admin.NET/Admin.NET.Core/Enum/JobStatusEnum.cs
  14. 1 0
      Admin.NET/Admin.NET.Core/Enum/LoginModeEnum.cs
  15. 1 0
      Admin.NET/Admin.NET.Core/Enum/LoginTypeEnum.cs
  16. 1 0
      Admin.NET/Admin.NET.Core/Enum/MenuTypeEnum.cs
  17. 1 0
      Admin.NET/Admin.NET.Core/Enum/MessageTypeEnum.cs
  18. 1 0
      Admin.NET/Admin.NET.Core/Enum/NoticeStatusEnum.cs
  19. 1 0
      Admin.NET/Admin.NET.Core/Enum/NoticeTypeEnum.cs
  20. 1 0
      Admin.NET/Admin.NET.Core/Enum/NoticeUserStatusEnum.cs
  21. 1 0
      Admin.NET/Admin.NET.Core/Enum/PlatformTypeEnum.cs
  22. 1 0
      Admin.NET/Admin.NET.Core/Enum/RequestTypeEnum.cs
  23. 1 0
      Admin.NET/Admin.NET.Core/Enum/StatusEnum.cs
  24. 1 0
      Admin.NET/Admin.NET.Core/Enum/TenantTypeEnum.cs
  25. 1 0
      Admin.NET/Admin.NET.Core/Enum/WechatReturnCodeEnum.cs
  26. 1 0
      Admin.NET/Admin.NET.Core/Enum/YesNoEnum.cs
  27. 1 1
      Admin.NET/Admin.NET.Core/Extension/EnumExtension.cs
  28. 1 2
      Admin.NET/Admin.NET.Core/GlobalUsings.cs
  29. 12 0
      Admin.NET/Admin.NET.Core/Option/EnumOptions.cs
  30. 31 0
      Admin.NET/Admin.NET.Core/Service/Enum/Dto/EnumInput.cs
  31. 22 0
      Admin.NET/Admin.NET.Core/Service/Enum/Dto/EnumOutput.cs
  32. 84 0
      Admin.NET/Admin.NET.Core/Service/Enum/SysEnumService.cs
  33. 1 0
      Admin.NET/Admin.NET.Web.Core/ProjectOptions.cs

+ 3 - 0
Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj

@@ -39,6 +39,9 @@
     <None Update="Configuration\Cache.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Update="Configuration\Enum.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Update="Configuration\CodeGen.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>

+ 8 - 0
Admin.NET/Admin.NET.Application/Configuration/Enum.json

@@ -0,0 +1,8 @@
+{
+    "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+
+    // 枚举实体所在程序集名称集合
+    "Enum": {
+        "EntityAssemblyNames": [ "Admin.NET.Core", "Admin.NET.Application", "Admin.NET.AppCPMS" ]
+    }
+}

+ 78 - 0
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -3818,6 +3818,16 @@
             默认邮件标题
             </summary>
         </member>
+        <member name="T:Admin.NET.Core.EnumOptions">
+            <summary>
+            枚举配置选项
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.EnumOptions.EntityAssemblyNames">
+            <summary>
+            枚举实体程序集名称集合
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.OAuthOptions">
             <summary>
             第三方登录授权配置选项
@@ -5474,6 +5484,74 @@
             <param name="input"></param>
             <returns></returns>
         </member>
+        <member name="T:Admin.NET.Core.Service.EnumInput">
+            <summary>
+            枚举输入参数
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.EnumInput.EnumName">
+            <summary>
+            枚举类型名称
+            </summary>
+            <example>AccountTypeEnum</example>
+        </member>
+        <member name="P:Admin.NET.Core.Service.QueryEnumDataInput.EntityName">
+            <summary>
+            实体名称
+            </summary>
+            <example>SysUser</example>
+        </member>
+        <member name="P:Admin.NET.Core.Service.QueryEnumDataInput.FieldName">
+            <summary>
+            字段名称
+            </summary>
+            <example>AccountType</example>
+        </member>
+        <member name="T:Admin.NET.Core.Service.EnumTypeOutput">
+            <summary>
+            枚举类型输出参数
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.EnumTypeOutput.TypeDescribe">
+            <summary>
+            枚举类型描述
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.EnumTypeOutput.TypeName">
+            <summary>
+            枚举类型名称
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.EnumTypeOutput.TypeRemark">
+            <summary>
+            枚举类型备注
+            </summary>
+        </member>
+        <member name="T:Admin.NET.Core.Service.SysEnumService">
+            <summary>
+            系统枚举服务
+            </summary>
+        </member>
+        <member name="M:Admin.NET.Core.Service.SysEnumService.GetEnumTypeList">
+            <summary>
+            获取所有枚举类型
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.Service.SysEnumService.GetEnumDataList(Admin.NET.Core.Service.EnumInput)">
+            <summary>
+            通过枚举类型获取枚举值集合
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.Service.SysEnumService.GetEnumDataListByField(Admin.NET.Core.Service.QueryEnumDataInput)">
+            <summary>
+            通过实体的字段名获取相关枚举值集合(目前仅支持枚举类型)
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
         <member name="P:Admin.NET.Core.Service.PageFileInput.FileName">
             <summary>
             文件名称

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/AccountTypeEnum.cs

@@ -3,6 +3,7 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 账号类型枚举
 /// </summary>
+[Description("账号类型枚举")]
 public enum AccountTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/CacheTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 缓存类型枚举
 /// </summary>
+[Description("缓存类型枚举")]
 public enum CacheTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/CardTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 证件类型枚举
 /// </summary>
+[Description("证件类型枚举")]
 public enum CardTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/CryptogramEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 密码加密枚举
 /// </summary>
+[Description("密码加密枚举")]
 public enum CryptogramEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/CultureLevelEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 文化程度枚举
 /// </summary>
+[Description("文化程度枚举")]
 public enum CultureLevelEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/DataOpTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 数据操作类型枚举
 /// </summary>
+[Description("数据操作类型枚举")]
 public enum DataOpTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/DataScopeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 角色数据范围枚举
 /// </summary>
+[Description("角色数据范围枚举")]
 public enum DataScopeEnum
 {
     /// <summary>

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

@@ -4,6 +4,7 @@
 /// 系统错误码
 /// </summary>
 [ErrorCodeType]
+[Description("系统错误码")]
 public enum ErrorCodeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/GenderEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 性别枚举
 /// </summary>
+[Description("性别枚举")]
 public enum GenderEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/JobStatusEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 岗位状态枚举
 /// </summary>
+[Description("岗位状态枚举")]
 public enum JobStatusEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/LoginModeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 登录模式枚举
 /// </summary>
+[Description("登录模式枚举")]
 public enum LoginModeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/LoginTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 登录类型枚举
 /// </summary>
+[Description("登录类型枚举")]
 public enum LoginTypeEnum
 {
     /// <summary>

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

@@ -3,6 +3,7 @@
 /// <summary>
 /// 系统菜单类型枚举
 /// </summary>
+[Description("系统菜单类型枚举")]
 public enum MenuTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/MessageTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 消息类型枚举
 /// </summary>
+[Description("消息类型枚举")]
 public enum MessageTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/NoticeStatusEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 通知公告状态枚举
 /// </summary>
+[Description("通知公告状态枚举")]
 public enum NoticeStatusEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/NoticeTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 通知公告状类型枚举
 /// </summary>
+[Description("通知公告状类型枚举")]
 public enum NoticeTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/NoticeUserStatusEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 通知公告用户状态枚举
 /// </summary>
+[Description("通知公告用户状态枚举")]
 public enum NoticeUserStatusEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/PlatformTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 平台类型枚举
 /// </summary>
+[Description("平台类型枚举")]
 public enum PlatformTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/RequestTypeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// HTTP请求类型
 /// </summary>
+[Description("HTTP请求类型")]
 public enum RequestTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/StatusEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 通用状态枚举
 /// </summary>
+[Description("通用状态枚举")]
 public enum StatusEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/TenantTypeEnum.cs

@@ -3,6 +3,7 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 租户类型枚举
 /// </summary>
+[Description("租户类型枚举")]
 public enum TenantTypeEnum
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/WechatReturnCodeEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 微信开发返回码
 /// </summary>
+[Description("微信开发返回码")]
 public enum WechatReturnCodeEnum
 {
     SenparcWeixinSDK配置错误 = -99, // 0xFFFFFF9D

+ 1 - 0
Admin.NET/Admin.NET.Core/Enum/YesNoEnum.cs

@@ -3,6 +3,7 @@
 /// <summary>
 /// 是否枚举
 /// </summary>
+[Description("是否枚举")]
 public enum YesNoEnum
 {
     /// <summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Extension/EnumExtension.cs

@@ -176,7 +176,7 @@ public static class EnumExtension
             return new EnumEntity
             {
                 Name = item.ToString(),
-                Describe = item.GetDescription(),
+                Describe = item.GetDescription() ?? item.ToString(),
                 Value = item.GetHashCode()
             };
         }).ToList();

+ 1 - 2
Admin.NET/Admin.NET.Core/GlobalUsings.cs

@@ -12,7 +12,6 @@ global using Furion.JsonSerialization;
 global using Furion.Logging;
 global using Furion.RemoteRequest.Extensions;
 global using Furion.Schedule;
-global using Furion.SensitiveDetection;
 global using Furion.UnifyResult;
 global using Furion.ViewEngine;
 global using Mapster;
@@ -47,4 +46,4 @@ global using System.Text;
 global using System.Text.RegularExpressions;
 global using System.Web;
 global using UAParser;
-global using Yitter.IdGenerator;
+global using Yitter.IdGenerator;

+ 12 - 0
Admin.NET/Admin.NET.Core/Option/EnumOptions.cs

@@ -0,0 +1,12 @@
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 枚举配置选项
+/// </summary>
+public sealed class EnumOptions : IConfigurableOptions
+{
+    /// <summary>
+    /// 枚举实体程序集名称集合
+    /// </summary>
+    public List<string> EntityAssemblyNames { get; set; }
+}

+ 31 - 0
Admin.NET/Admin.NET.Core/Service/Enum/Dto/EnumInput.cs

@@ -0,0 +1,31 @@
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 枚举输入参数
+/// </summary>
+public class EnumInput
+{
+    /// <summary>
+    /// 枚举类型名称
+    /// </summary>
+    /// <example>AccountTypeEnum</example>
+    [Required(ErrorMessage = "枚举类型不能为空")]
+    public string EnumName { get; set; }
+}
+
+public class QueryEnumDataInput
+{
+    /// <summary>
+    /// 实体名称
+    /// </summary>
+    /// <example>SysUser</example>
+    [Required(ErrorMessage = "实体名称不能为空")]
+    public string EntityName { get; set; }
+
+    /// <summary>
+    /// 字段名称
+    /// </summary>
+    /// <example>AccountType</example>
+    [Required(ErrorMessage = "字段名称不能为空")]
+    public string FieldName { get; set; }
+}

+ 22 - 0
Admin.NET/Admin.NET.Core/Service/Enum/Dto/EnumOutput.cs

@@ -0,0 +1,22 @@
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 枚举类型输出参数
+/// </summary>
+public class EnumTypeOutput
+{
+    /// <summary>
+    /// 枚举类型描述
+    /// </summary>
+    public string TypeDescribe { get; set; }
+
+    /// <summary>
+    /// 枚举类型名称
+    /// </summary>
+    public string TypeName { get; set; }
+
+    /// <summary>
+    /// 枚举类型备注
+    /// </summary>
+    public string TypeRemark { get; set; }
+}

+ 84 - 0
Admin.NET/Admin.NET.Core/Service/Enum/SysEnumService.cs

@@ -0,0 +1,84 @@
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 系统枚举服务
+/// </summary>
+[ApiDescriptionSettings(Order = 275)]
+[AllowAnonymous]
+public class SysEnumService : IDynamicApiController, ITransient
+{
+    private readonly EnumOptions _enumOptions;
+
+    public SysEnumService(IOptions<EnumOptions> enumOptions)
+    {
+        _enumOptions = enumOptions.Value;
+    }
+
+    /// <summary>
+    /// 获取所有枚举类型
+    /// </summary>
+    /// <returns></returns>
+    [DisplayName("获取所有枚举类型")]
+    public List<EnumTypeOutput> GetEnumTypeList()
+    {        
+        var enumTypeList = App.EffectiveTypes.Where(t => t.IsEnum && _enumOptions.EntityAssemblyNames.Contains(t.Assembly.GetName().Name)).ToList();
+
+        var result = new List<EnumTypeOutput>();
+        foreach (var item in enumTypeList)
+        {
+            result.Add(GetEnumDescription(item));
+        }
+        return result;
+    }
+
+    private EnumTypeOutput GetEnumDescription(Type type)
+    {
+        string description = type.Name;
+        var attrs = type.GetCustomAttributes(typeof(DescriptionAttribute), false);
+        if (attrs.Any())
+        {
+            var att = ((DescriptionAttribute[])attrs)[0];
+            description = att.Description;
+        }
+        return new EnumTypeOutput
+        {
+            TypeDescribe = description,
+            TypeName = type.Name,
+            TypeRemark = description
+        };
+    }
+
+    /// <summary>
+    /// 通过枚举类型获取枚举值集合
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("通过枚举类型获取枚举值集合")]
+    public List<EnumEntity> GetEnumDataList([FromQuery] EnumInput input)
+    {
+        var enumType = App.EffectiveTypes.FirstOrDefault(t => t.IsEnum && t.Name == input.EnumName);
+        if (enumType is not { IsEnum: true })
+            throw Oops.Oh(ErrorCodeEnum.D1503);
+
+        return enumType.EnumToList();
+    }
+
+    /// <summary>
+    /// 通过实体的字段名获取相关枚举值集合(目前仅支持枚举类型)
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("通过实体的字段名获取相关枚举值集合")]
+    public List<EnumEntity> GetEnumDataListByField([FromQuery] QueryEnumDataInput input)
+    {
+        // 获取实体类型属性
+        Type entityType = App.EffectiveTypes.FirstOrDefault(t => t.Name == input.EntityName) ?? throw Oops.Oh(ErrorCodeEnum.D1504);
+
+        // 获取字段类型
+        var fieldType = entityType.GetProperties().FirstOrDefault(p => p.Name == input.FieldName)?.PropertyType;
+        if (fieldType is not { IsEnum: true })
+            throw Oops.Oh(ErrorCodeEnum.D1503);
+
+        return fieldType.EnumToList();
+    }
+}

+ 1 - 0
Admin.NET/Admin.NET.Web.Core/ProjectOptions.cs

@@ -25,6 +25,7 @@ public static class ProjectOptions
         services.AddConfigurableOptions<WechatMessageOptions>();
         services.AddConfigurableOptions<PayCallBackOptions>();
         services.AddConfigurableOptions<CodeGenOptions>();
+        services.AddConfigurableOptions<EnumOptions>();
         services.AddConfigurableOptions<APIJSONOptions>();
         services.AddConfigurableOptions<EmailOptions>();
         services.AddConfigurableOptions<OAuthOptions>();