mirror of
https://github.com/nsnail/NetAdmin.git
synced 2025-06-20 02:38:15 +08:00
14
src/backend/NetAdmin.Domain/Attributes/IndicatorAttribute.cs
Normal file
14
src/backend/NetAdmin.Domain/Attributes/IndicatorAttribute.cs
Normal file
@ -0,0 +1,14 @@
|
||||
namespace NetAdmin.Domain.Attributes;
|
||||
|
||||
/// <summary>
|
||||
/// 标记一个枚举的状态指示
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
|
||||
public sealed class IndicatorAttribute(string indicate) : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// 状态指示
|
||||
/// </summary>
|
||||
public string Indicate { get; init; } = indicate;
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
using NetAdmin.Domain.Attributes;
|
||||
|
||||
namespace NetAdmin.Domain.Enums.Sys;
|
||||
|
||||
/// <summary>
|
||||
@ -9,6 +11,7 @@ public enum JobStatues
|
||||
/// <summary>
|
||||
/// 空闲
|
||||
/// </summary>
|
||||
[Indicator(nameof(Indicates.Success))]
|
||||
[ResourceDescription<Ln>(nameof(Ln.空闲))]
|
||||
Idle = 1
|
||||
|
||||
@ -17,6 +20,7 @@ public enum JobStatues
|
||||
/// <summary>
|
||||
/// 运行
|
||||
/// </summary>
|
||||
[Indicator(nameof(Indicates.Warning))]
|
||||
[ResourceDescription<Ln>(nameof(Ln.运行))]
|
||||
Running = 2
|
||||
}
|
@ -254,7 +254,7 @@ public static class ServiceCollectionExtensions
|
||||
#endif
|
||||
private static (string Date, string LogName, string LogFormat) ParseMessage(LogMessage message, bool showColor)
|
||||
{
|
||||
var date = message.LogDateTime.ToString(Chars.TPL_DATE_HH_MM_SS_FFFFFF, CultureInfo.InvariantCulture);
|
||||
var date = $"{message.LogDateTime:HH:mm:ss.ffffff}";
|
||||
var logName = message.LogName.PadRight(64, ' ')[^64..];
|
||||
var format = showColor
|
||||
? $"[{nameof(ConsoleColor.Gray)}][[{{0}} {{1}} {{2,-{64}}} #{{3,4}}]][/] {{4}}"
|
||||
|
@ -5,8 +5,7 @@ namespace NetAdmin.Infrastructure.Configuration.Options;
|
||||
/// </summary>
|
||||
public sealed record CaptchaOptions : OptionAbstraction
|
||||
{
|
||||
private static readonly double _seed
|
||||
= BitConverter.ToInt32(Chars.TPL_DATE_YYYYMMDD[..4].Select(x => (byte)x).ToArray());
|
||||
private static readonly double _seed = BitConverter.ToInt32("yyyyMMdd"[..4].Select(x => (byte)x).ToArray());
|
||||
|
||||
#pragma warning disable S3963
|
||||
static CaptchaOptions()
|
||||
|
@ -10,69 +10,71 @@ namespace NetAdmin.Infrastructure.Constant;
|
||||
/// </remarks>
|
||||
public static class Chars
|
||||
{
|
||||
public const string FLG_CONTEXT_MEMBER_INFO = nameof(FLG_CONTEXT_MEMBER_INFO);
|
||||
public const string FLG_CONTEXT_OWNER_DEPT_ID = nameof(FLG_CONTEXT_OWNER_DEPT_ID);
|
||||
public const string FLG_CONTEXT_USER_ID = nameof(FLG_CONTEXT_USER_ID);
|
||||
public const string FLG_CONTEXT_USER_INFO = nameof(FLG_CONTEXT_USER_INFO);
|
||||
public const string FLG_CRON_PER_SECS = "* * * * * *";
|
||||
public const string FLG_DB_EXCEPTION_PRIVATE_KEY_CONFLICT = "PRIMARY KEY";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR = "nvarchar";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_1022 = "nvarchar(1022)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_127 = "nvarchar(127)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_15 = "nvarchar(15)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_255 = "nvarchar(255)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_31 = "nvarchar(31)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_4094 = "nvarchar(4094)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_510 = "nvarchar(510)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_63 = "nvarchar(63)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_7 = "nvarchar(7)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_MAX = "nvarchar(max)";
|
||||
public const string FLG_DB_FIELD_TYPE_SMALL_INT = "smallint";
|
||||
public const string FLG_DB_FIELD_TYPE_TEXT = "text";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR = "varchar";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_1022 = "varchar(1022)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_127 = "varchar(127)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_15 = "varchar(15)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_255 = "varchar(255)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_31 = "varchar(31)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_4094 = "varchar(4094)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_510 = "varchar(510)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_63 = "varchar(63)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_7 = "varchar(7)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_MAX = "varchar(max)";
|
||||
public const string FLG_DB_INDEX_PREFIX = "idx_{tablename}_";
|
||||
public const string FLG_DB_TABLE_NAME_PREFIX = "";
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_DATA = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DATA);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_DELETE = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DELETE);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_MEMBER = nameof(FLG_FREE_SQL_GLOBAL_FILTER_MEMBER);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_SELF = nameof(FLG_FREE_SQL_GLOBAL_FILTER_SELF);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_TENANT = nameof(FLG_FREE_SQL_GLOBAL_FILTER_TENANT);
|
||||
public const string FLG_HTTP_HEADER_KEY_ACCESS_TOKEN = "ACCESS-TOKEN";
|
||||
public const string FLG_HTTP_HEADER_KEY_AUTHORIZATION = "Authorization";
|
||||
public const string FLG_HTTP_HEADER_KEY_REFERER = "Referer";
|
||||
public const string FLG_HTTP_HEADER_KEY_USER_AGENT = "User-Agent";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN = "X-ACCESS-TOKEN";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY = "X-Authorization";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR = "X-Forwarded-For";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_REAL_IP = "X-Real-IP";
|
||||
public const string FLG_HTTP_HEADER_VALUE_APPLICATION_JSON = "application/json";
|
||||
public const string FLG_HTTP_HEADER_VALUE_APPLICATION_URLENCODED = "application/x-www-form-urlencoded";
|
||||
public const string FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA = "Bearer";
|
||||
public const string FLG_HTTP_METHOD_CONNECT = "CONNECT";
|
||||
public const string FLG_HTTP_METHOD_DELETE = "DELETE";
|
||||
public const string FLG_HTTP_METHOD_GET = "GET";
|
||||
public const string FLG_HTTP_METHOD_HEAD = "HEAD";
|
||||
public const string FLG_HTTP_METHOD_OPTIONS = "OPTIONS";
|
||||
public const string FLG_HTTP_METHOD_PATCH = "PATCH";
|
||||
public const string FLG_HTTP_METHOD_POST = "POST";
|
||||
public const string FLG_HTTP_METHOD_PUT = "PUT";
|
||||
public const string FLG_HTTP_METHOD_TRACE = "TRACE";
|
||||
public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd";
|
||||
public const string FLG_PATH_PREFIX_HEALTH_CHECK = "probe/health.check";
|
||||
public const string FLG_RANDOM_UNAME_PWD = "VcXlp7WY";
|
||||
public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
|
||||
public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
|
||||
public const string FLG_SYSTEM_PREFIX = "sc_";
|
||||
public const string FLG_CONTEXT_MEMBER_INFO = nameof(FLG_CONTEXT_MEMBER_INFO);
|
||||
public const string FLG_CONTEXT_OWNER_DEPT_ID = nameof(FLG_CONTEXT_OWNER_DEPT_ID);
|
||||
public const string FLG_CONTEXT_USER_ID = nameof(FLG_CONTEXT_USER_ID);
|
||||
public const string FLG_CONTEXT_USER_INFO = nameof(FLG_CONTEXT_USER_INFO);
|
||||
public const string FLG_CRON_PER_SECS = "* * * * * *";
|
||||
public const string FLG_DB_EXCEPTION_PRIVATE_KEY_CONFLICT = "PRIMARY KEY";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR = "nvarchar";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_1022 = "nvarchar(1022)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_127 = "nvarchar(127)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_15 = "nvarchar(15)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_255 = "nvarchar(255)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_31 = "nvarchar(31)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_4094 = "nvarchar(4094)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_510 = "nvarchar(510)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_63 = "nvarchar(63)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_7 = "nvarchar(7)";
|
||||
public const string FLG_DB_FIELD_TYPE_NVARCHAR_MAX = "nvarchar(max)";
|
||||
public const string FLG_DB_FIELD_TYPE_SMALL_INT = "smallint";
|
||||
public const string FLG_DB_FIELD_TYPE_TEXT = "text";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR = "varchar";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_1022 = "varchar(1022)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_127 = "varchar(127)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_15 = "varchar(15)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_255 = "varchar(255)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_31 = "varchar(31)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_4094 = "varchar(4094)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_510 = "varchar(510)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_63 = "varchar(63)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_7 = "varchar(7)";
|
||||
public const string FLG_DB_FIELD_TYPE_VARCHAR_MAX = "varchar(max)";
|
||||
public const string FLG_DB_INDEX_PREFIX = "idx_{tablename}_";
|
||||
public const string FLG_DB_TABLE_NAME_PREFIX = "";
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_DATA = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DATA);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_DELETE = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DELETE);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_MEMBER = nameof(FLG_FREE_SQL_GLOBAL_FILTER_MEMBER);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_SELF = nameof(FLG_FREE_SQL_GLOBAL_FILTER_SELF);
|
||||
public const string FLG_FREE_SQL_GLOBAL_FILTER_TENANT = nameof(FLG_FREE_SQL_GLOBAL_FILTER_TENANT);
|
||||
public const string FLG_HTTP_HEADER_KEY_ACCESS_TOKEN = "ACCESS-TOKEN";
|
||||
public const string FLG_HTTP_HEADER_KEY_AUTHORIZATION = "Authorization";
|
||||
public const string FLG_HTTP_HEADER_KEY_REFERER = "Referer";
|
||||
public const string FLG_HTTP_HEADER_KEY_USER_AGENT = "User-Agent";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN = "X-ACCESS-TOKEN";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY = "X-Authorization";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR = "X-Forwarded-For";
|
||||
public const string FLG_HTTP_HEADER_KEY_X_REAL_IP = "X-Real-IP";
|
||||
public const string FLG_HTTP_HEADER_VALUE_APPLICATION_JSON = "application/json";
|
||||
public const string FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM = "application/octet-stream";
|
||||
public const string FLG_HTTP_HEADER_VALUE_APPLICATION_URLENCODED = "application/x-www-form-urlencoded";
|
||||
public const string FLG_HTTP_HEADER_VALUE_ATTACHMENT = "attachment";
|
||||
public const string FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA = "Bearer";
|
||||
public const string FLG_HTTP_METHOD_CONNECT = "CONNECT";
|
||||
public const string FLG_HTTP_METHOD_DELETE = "DELETE";
|
||||
public const string FLG_HTTP_METHOD_GET = "GET";
|
||||
public const string FLG_HTTP_METHOD_HEAD = "HEAD";
|
||||
public const string FLG_HTTP_METHOD_OPTIONS = "OPTIONS";
|
||||
public const string FLG_HTTP_METHOD_PATCH = "PATCH";
|
||||
public const string FLG_HTTP_METHOD_POST = "POST";
|
||||
public const string FLG_HTTP_METHOD_PUT = "PUT";
|
||||
public const string FLG_HTTP_METHOD_TRACE = "TRACE";
|
||||
public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd";
|
||||
public const string FLG_PATH_PREFIX_HEALTH_CHECK = "probe/health.check";
|
||||
public const string FLG_RANDOM_UNAME_PWD = "VcXlp7WY";
|
||||
public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
|
||||
public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
|
||||
public const string FLG_SYSTEM_PREFIX = "sc_";
|
||||
|
||||
public const string FLGL_HTTP_HEADER_VALUE_UA_MOBILE
|
||||
= "Mozilla/5.0 (Linux; Android 9; Redmi Note 8 Pro Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36";
|
||||
@ -105,10 +107,4 @@ public static class Chars
|
||||
|
||||
public const string RGXL_IP_V4
|
||||
= @"^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}$";
|
||||
|
||||
public const string TPL_DATE_HH_MM_SS_FFFFFF = "HH:mm:ss.ffffff";
|
||||
public const string TPL_DATE_YYYY_MM_DD = "yyyy-MM-dd";
|
||||
public const string TPL_DATE_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
|
||||
public const string TPL_DATE_YYYYMMDD = "yyyyMMdd";
|
||||
public const string TPL_DATE_YYYYMMDDHHMMSSFFFZZZZ = "yyyyMMddHHmmssfffzzz";
|
||||
}
|
41
src/backend/NetAdmin.Infrastructure/Enums/Indicates.cs
Normal file
41
src/backend/NetAdmin.Infrastructure/Enums/Indicates.cs
Normal file
@ -0,0 +1,41 @@
|
||||
namespace NetAdmin.Infrastructure.Enums;
|
||||
|
||||
/// <summary>
|
||||
/// 状态表示
|
||||
/// </summary>
|
||||
[Export]
|
||||
public enum Indicates
|
||||
{
|
||||
/// <summary>
|
||||
/// 信息
|
||||
/// </summary>
|
||||
Info = 1
|
||||
|
||||
,
|
||||
|
||||
/// <summary>
|
||||
/// 主要
|
||||
/// </summary>
|
||||
Primary = 2
|
||||
|
||||
,
|
||||
|
||||
/// <summary>
|
||||
/// 警告
|
||||
/// </summary>
|
||||
Warning = 3
|
||||
|
||||
,
|
||||
|
||||
/// <summary>
|
||||
/// 成功
|
||||
/// </summary>
|
||||
Success = 4
|
||||
|
||||
,
|
||||
|
||||
/// <summary>
|
||||
/// 危险
|
||||
/// </summary>
|
||||
Danger = 5
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
using Microsoft.OpenApi.Extensions;
|
||||
using NetAdmin.Application.Services;
|
||||
using NetAdmin.Domain.Attributes;
|
||||
using NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys;
|
||||
@ -20,26 +22,29 @@ public sealed class ConstantService : ServiceBase<IConstantService>, IConstantSe
|
||||
{
|
||||
var ret = App.EffectiveTypes.Where(x => x.IsEnum && x.GetCustomAttribute<ExportAttribute>(false) != null)
|
||||
.ToDictionary(x => x.Name, x => //
|
||||
x.GetEnumValues()
|
||||
.Cast<Enum>()
|
||||
.ToDictionary( //
|
||||
y => y.ToString()
|
||||
, y => new[] {
|
||||
Convert.ToInt64(y, CultureInfo.InvariantCulture)
|
||||
.ToString(CultureInfo.InvariantCulture)
|
||||
, y.ResDesc<Ln>()
|
||||
}));
|
||||
x.GetEnumValues().Cast<Enum>().ToDictionary(y => y.ToString(), GetDicValue));
|
||||
|
||||
ret.Add($"{nameof(HttpStatusCode)}s", Enum.GetNames<HttpStatusCode>()
|
||||
.ToDictionary( //
|
||||
x => x, x => new[] {
|
||||
Convert.ToInt64( //
|
||||
Enum.Parse<HttpStatusCode>(x)
|
||||
, CultureInfo.InvariantCulture)
|
||||
.ToString(CultureInfo.InvariantCulture)
|
||||
, x
|
||||
}));
|
||||
ret.Add( //
|
||||
$"{nameof(HttpStatusCode)}s" //
|
||||
, Enum.GetNames<HttpStatusCode>()
|
||||
.ToDictionary(
|
||||
x => x
|
||||
, x => new[] {
|
||||
Convert.ToInt64(Enum.Parse<HttpStatusCode>(x), CultureInfo.InvariantCulture)
|
||||
.ToString(CultureInfo.InvariantCulture)
|
||||
, x
|
||||
}));
|
||||
return ret;
|
||||
|
||||
static string[] GetDicValue(Enum y)
|
||||
{
|
||||
var ret = new[] {
|
||||
Convert.ToInt64(y, CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture)
|
||||
, y.ResDesc<Ln>()
|
||||
};
|
||||
var indicate = y.GetAttributeOfType<IndicatorAttribute>()?.Indicate.ToLowerInvariant();
|
||||
return indicate.NullOrEmpty() ? ret : [..ret, indicate];
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
Reference in New Issue
Block a user