mirror of
				https://github.com/nsnail/NetAdmin.git
				synced 2025-11-01 03:35:28 +08:00 
			
		
		
		
	| @@ -6,7 +6,7 @@ | |||||||
|     "Id": 373837717815301, |     "Id": 373837717815301, | ||||||
|     "Name": "home", |     "Name": "home", | ||||||
|     "Path": "/home", |     "Path": "/home", | ||||||
|     "Sort": 100, |     "Sort": 999, | ||||||
|     "Title": "主控面板", |     "Title": "主控面板", | ||||||
|     "Type": 1 |     "Type": 1 | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -14,5 +14,25 @@ | |||||||
|   { |   { | ||||||
|     "ApiId": "api/sys/user", |     "ApiId": "api/sys/user", | ||||||
|     "RoleId": 371729946431493 |     "RoleId": 371729946431493 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "ApiId": "api/sys/site.msg/unread.count", | ||||||
|  |     "RoleId": 371729946431493, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "ApiId": "api/sys/site.msg", | ||||||
|  |     "RoleId": 371729946431493, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "ApiId": "api/sys/site.msg/get.mine", | ||||||
|  |     "RoleId": 371729946431493, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "ApiId": "api/sys/site.msg/paged.query.mine", | ||||||
|  |     "RoleId": 371729946431493, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "ApiId": "api/sys/site.msg/set.site.msg.status", | ||||||
|  |     "RoleId": 371729946431493, | ||||||
|   } |   } | ||||||
| ] | ] | ||||||
| @@ -23,7 +23,7 @@ | |||||||
|             <PrivateAssets>all</PrivateAssets> |             <PrivateAssets>all</PrivateAssets> | ||||||
|             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||||
|         </PackageReference> |         </PackageReference> | ||||||
|         <PackageReference Include="SonarAnalyzer.CSharp" Version="9.25.0.90414"> |         <PackageReference Include="SonarAnalyzer.CSharp" Version="9.25.1.91650"> | ||||||
|             <PrivateAssets>all</PrivateAssets> |             <PrivateAssets>all</PrivateAssets> | ||||||
|             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||||
|         </PackageReference> |         </PackageReference> | ||||||
|   | |||||||
| @@ -4,6 +4,6 @@ | |||||||
|         <ProjectReference Include="../NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj"/> |         <ProjectReference Include="../NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj"/> | ||||||
|     </ItemGroup> |     </ItemGroup> | ||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0-release-24177-07"/> |         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0"/> | ||||||
|     </ItemGroup> |     </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
| @@ -0,0 +1,29 @@ | |||||||
|  | using NetAdmin.Application.Repositories; | ||||||
|  | using NetAdmin.Domain.DbMaps.Dependency; | ||||||
|  | using RedLockNet; | ||||||
|  |  | ||||||
|  | namespace NetAdmin.Application.Services; | ||||||
|  |  | ||||||
|  | /// <summary> | ||||||
|  | ///     RedLocker Service Base | ||||||
|  | /// </summary> | ||||||
|  | public abstract class RedLockerService<T1, T2>(DefaultRepository<T1> rpo, RedLocker redLocker) | ||||||
|  |     : RepositoryService<T1, T2>(rpo) | ||||||
|  |     where T1 : EntityBase | ||||||
|  | { | ||||||
|  |     /// <summary> | ||||||
|  |     ///     获取锁 | ||||||
|  |     /// </summary> | ||||||
|  |     /// <exception cref="NetAdminGetLockerException">NetAdminGetLockerException</exception> | ||||||
|  |     protected async Task<IRedLock> GetLockerAsync(string lockName) | ||||||
|  |     { | ||||||
|  |         // 加锁 | ||||||
|  |         var redLock = await redLocker.RedLockFactory.CreateLockAsync( // | ||||||
|  |                                          lockName, TimeSpan.FromSeconds(Numbers.SECS_RED_LOCK_EXPIRY) | ||||||
|  |                                        , TimeSpan.FromSeconds(Numbers.SECS_RED_LOCK_WAIT) | ||||||
|  |                                        , TimeSpan.FromSeconds(Numbers.SECS_RED_LOCK_RETRY)) | ||||||
|  |                                      .ConfigureAwait(false); | ||||||
|  |  | ||||||
|  |         return redLock.IsAcquired ? redLock : throw new NetAdminGetLockerException(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -12,7 +12,7 @@ public sealed class MobileAttribute : RegexAttribute | |||||||
|     public MobileAttribute() // |     public MobileAttribute() // | ||||||
|         : base(Chars.RGX_MOBILE) |         : base(Chars.RGX_MOBILE) | ||||||
|     { |     { | ||||||
|         ErrorMessageResourceName = nameof(Ln.手机号码不正确); |         ErrorMessageResourceName = nameof(Ln.手机号不正确); | ||||||
|         ErrorMessageResourceType = typeof(Ln); |         ErrorMessageResourceType = typeof(Ln); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -61,7 +61,11 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     部门描述 |     ///     部门描述 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Summary { get; init; } |     public virtual string Summary { get; init; } | ||||||
| } | } | ||||||
| @@ -68,21 +68,33 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     请求体 |     ///     请求体 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string RequestBody { get; init; } |     public virtual string RequestBody { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     请求头 |     ///     请求头 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string RequestHeader { get; init; } |     public virtual string RequestHeader { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     请求的网络地址 |     ///     请求的网络地址 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string RequestUrl { get; init; } |     public virtual string RequestUrl { get; init; } | ||||||
|  |  | ||||||
| @@ -94,7 +106,11 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary | |||||||
|     public virtual JobStatues Status { get; init; } |     public virtual JobStatues Status { get; init; } | ||||||
|  |  | ||||||
|     /// <inheritdoc cref="IFieldSummary.Summary" /> |     /// <inheritdoc cref="IFieldSummary.Summary" /> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Summary { get; init; } |     public virtual string Summary { get; init; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -48,14 +48,22 @@ public record Sys_JobRecord : LiteImmutableEntity | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     请求体 |     ///     请求体 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string RequestBody { get; init; } |     public virtual string RequestBody { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     请求头 |     ///     请求头 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string RequestHeader { get; init; } |     public virtual string RequestHeader { get; init; } | ||||||
|  |  | ||||||
| @@ -69,14 +77,22 @@ public record Sys_JobRecord : LiteImmutableEntity | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     响应体 |     ///     响应体 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string ResponseBody { get; init; } |     public virtual string ResponseBody { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     响应头 |     ///     响应头 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string ResponseHeader { get; init; } |     public virtual string ResponseHeader { get; init; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,14 +35,22 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     创建者来源地址 |     ///     创建者来源地址 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|     [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     #if DBTYPE_SQLITE | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public string CreatedReferer { get; init; } |     public string CreatedReferer { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     创建者客户端用户代理 |     ///     创建者客户端用户代理 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|     [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     #if DBTYPE_SQLITE | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string CreatedUserAgent { get; init; } |     public virtual string CreatedUserAgent { get; init; } | ||||||
|  |  | ||||||
| @@ -63,14 +71,22 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     异常信息 |     ///     异常信息 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Exception { get; init; } |     public virtual string Exception { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     附加数据 |     ///     附加数据 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string ExtraData { get; init; } |     public virtual string ExtraData { get; init; } | ||||||
|  |  | ||||||
| @@ -91,14 +107,22 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     来源地址 |     ///     来源地址 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string ReferUrl { get; init; } |     public virtual string ReferUrl { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     请求内容 |     ///     请求内容 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string RequestBody { get; init; } |     public virtual string RequestBody { get; init; } | ||||||
|  |  | ||||||
| @@ -112,7 +136,11 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     请求头信息 |     ///     请求头信息 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string RequestHeaders { get; init; } |     public virtual string RequestHeaders { get; init; } | ||||||
|  |  | ||||||
| @@ -126,7 +154,11 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     响应内容 |     ///     响应内容 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string ResponseBody { get; init; } |     public virtual string ResponseBody { get; init; } | ||||||
|  |  | ||||||
| @@ -140,7 +172,11 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     响应头 |     ///     响应头 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string ResponseHeaders { get; init; } |     public virtual string ResponseHeaders { get; init; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -85,7 +85,11 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     备注 |     ///     备注 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Summary { get; init; } |     public virtual string Summary { get; init; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,7 +14,11 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     消息内容 |     ///     消息内容 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Content { get; init; } |     public virtual string Content { get; init; } | ||||||
|  |  | ||||||
| @@ -55,14 +59,22 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     消息摘要 |     ///     消息摘要 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Summary { get; init; } |     public virtual string Summary { get; init; } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     消息主题 |     ///     消息主题 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Title { get; init; } |     public virtual string Title { get; init; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -85,7 +85,11 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     描述 |     ///     描述 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public virtual string Summary { get; init; } |     public virtual string Summary { get; init; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,7 +33,11 @@ public record Sys_VerifyCode : VersionEntity | |||||||
|     /// <summary> |     /// <summary> | ||||||
|     ///     发送报告 |     ///     发送报告 | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  |     #if DBTYPE_SQLITE | ||||||
|     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] | ||||||
|  |     #else | ||||||
|  |     [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)] | ||||||
|  |     #endif | ||||||
|     [JsonIgnore] |     [JsonIgnore] | ||||||
|     public string Report { get; init; } |     public string Report { get; init; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,6 +11,6 @@ public sealed record CheckMobileAvailableReq : Sys_User | |||||||
|     /// <inheritdoc cref="Sys_User.Mobile" /> |     /// <inheritdoc cref="Sys_User.Mobile" /> | ||||||
|     [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] |     [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] | ||||||
|     [Mobile] |     [Mobile] | ||||||
|     [Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.手机号码不能为空))] |     [Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.手机号不能为空))] | ||||||
|     public override string Mobile { get; init; } |     public override string Mobile { get; init; } | ||||||
| } | } | ||||||
| @@ -1,4 +1,7 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|  |     <PropertyGroup> | ||||||
|  |         <DefineConstants>DBTYPE_SQLITE</DefineConstants> | ||||||
|  |     </PropertyGroup> | ||||||
|     <Import Project="$(SolutionDir)/build/code.quality.props"/> |     <Import Project="$(SolutionDir)/build/code.quality.props"/> | ||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|         <Content Include="$(SolutionDir)/assets/seed-data/**" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/> |         <Content Include="$(SolutionDir)/assets/seed-data/**" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/> | ||||||
|   | |||||||
| @@ -24,7 +24,12 @@ public sealed class RequestAuditMiddleware( | |||||||
|         // 跳过处理的情况: |         // 跳过处理的情况: | ||||||
|         if (!context.Request.Path.StartsWithSegments(_defaultRoutePrefix)       // 非api请求 |         if (!context.Request.Path.StartsWithSegments(_defaultRoutePrefix)       // 非api请求 | ||||||
|             || context.Request.Path.StartsWithSegments(_healthCheckRoutePrefix) // 健康检查 |             || context.Request.Path.StartsWithSegments(_healthCheckRoutePrefix) // 健康检查 | ||||||
|             || context.Request.Method == Chars.FLG_HTTP_METHOD_OPTIONS) {       // is options 请求 |             || context.Request.Method == Chars.FLG_HTTP_METHOD_OPTIONS          // is options 请求 | ||||||
|  |             || (context.Request.ContentType?.StartsWith("multipart/form-data", true, CultureInfo.InvariantCulture) ?? | ||||||
|  |                 false) // 文件上传 | ||||||
|  |             #pragma warning disable SA1009 | ||||||
|  |            ) { | ||||||
|  |             #pragma warning restore SA1009 | ||||||
|             await next(context).ConfigureAwait(false); |             await next(context).ConfigureAwait(false); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -8,6 +8,7 @@ | |||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|         <PackageReference Include="Cronos" Version="0.8.4"/> |         <PackageReference Include="Cronos" Version="0.8.4"/> | ||||||
|         <PackageReference Include="FreeSql.DbContext.NS" Version="3.2.821-ns1"/> |         <PackageReference Include="FreeSql.DbContext.NS" Version="3.2.821-ns1"/> | ||||||
|  |         <PackageReference Include="FreeSql.Provider.SqlServer.NS" Version="3.2.821-ns1"/> | ||||||
|         <PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.821-ns1"/> |         <PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.821-ns1"/> | ||||||
|         <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.3"/> |         <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.3"/> | ||||||
|         <PackageReference Include="Furion.Extras.ObjectMapper.Mapster.NS" Version="4.9.3-ns1"/> |         <PackageReference Include="Furion.Extras.ObjectMapper.Mapster.NS" Version="4.9.3-ns1"/> | ||||||
|   | |||||||
| @@ -291,7 +291,7 @@ public sealed class UserService( | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (user.Mobile != req.VerifySmsCodeReq.DestDevice) { |             if (user.Mobile != req.VerifySmsCodeReq.DestDevice) { | ||||||
|                 throw new NetAdminInvalidOperationException($"{Ln.手机号码不正确}"); |                 throw new NetAdminInvalidOperationException($"{Ln.手机号不正确}"); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -330,17 +330,17 @@ public sealed class UserService( | |||||||
|         if (!user.Mobile.NullOrEmpty()) { |         if (!user.Mobile.NullOrEmpty()) { | ||||||
|             // 已有手机号,需验证旧手机 |             // 已有手机号,需验证旧手机 | ||||||
|             if (!await verifyCodeService.VerifyAsync(req.OriginVerifySmsCodeReq).ConfigureAwait(false)) { |             if (!await verifyCodeService.VerifyAsync(req.OriginVerifySmsCodeReq).ConfigureAwait(false)) { | ||||||
|                 throw new NetAdminInvalidOperationException($"{Ln.旧手机号码验证码不正确}"); |                 throw new NetAdminInvalidOperationException($"{Ln.旧手机号验证码不正确}"); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (user.Mobile != req.OriginVerifySmsCodeReq.DestDevice) { |             if (user.Mobile != req.OriginVerifySmsCodeReq.DestDevice) { | ||||||
|                 throw new NetAdminInvalidOperationException($"{Ln.旧手机号码不正确}"); |                 throw new NetAdminInvalidOperationException($"{Ln.旧手机号不正确}"); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // 验证新手机号 |         // 验证新手机号 | ||||||
|         if (!await verifyCodeService.VerifyAsync(req.NewVerifySmsCodeReq).ConfigureAwait(false)) { |         if (!await verifyCodeService.VerifyAsync(req.NewVerifySmsCodeReq).ConfigureAwait(false)) { | ||||||
|             throw new NetAdminInvalidOperationException($"{Ln.新手机号码验证码不正确}"); |             throw new NetAdminInvalidOperationException($"{Ln.新手机号验证码不正确}"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (await Rpo.UpdateDiy |         if (await Rpo.UpdateDiy | ||||||
|   | |||||||
| @@ -3,9 +3,9 @@ | |||||||
|         <ProjectReference Include="../NetAdmin.Host/NetAdmin.Host.csproj"/> |         <ProjectReference Include="../NetAdmin.Host/NetAdmin.Host.csproj"/> | ||||||
|     </ItemGroup> |     </ItemGroup> | ||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|         <PackageReference Include="xunit" Version="2.8.0"/> |         <PackageReference Include="xunit" Version="2.8.1"/> | ||||||
|         <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.0-preview.4.24267.6"/> |         <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.0-preview.4.24267.6"/> | ||||||
|         <PackageReference Include="xunit.runner.visualstudio" Version="2.8.0"> |         <PackageReference Include="xunit.runner.visualstudio" Version="2.8.1"> | ||||||
|             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||||
|             <PrivateAssets>all</PrivateAssets> |             <PrivateAssets>all</PrivateAssets> | ||||||
|         </PackageReference> |         </PackageReference> | ||||||
|   | |||||||
| @@ -11,14 +11,14 @@ | |||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@element-plus/icons-vue": "^2.3.1", |         "@element-plus/icons-vue": "^2.3.1", | ||||||
|         "@tinymce/tinymce-vue": "^5.1.1", |         "@tinymce/tinymce-vue": "^5.1.1", | ||||||
|         "ace-builds": "^1.33.1", |         "ace-builds": "^1.33.2", | ||||||
|         "axios": "^1.6.8", |         "axios": "^1.6.8", | ||||||
|         "clipboard": "^2.0.11", |         "clipboard": "^2.0.11", | ||||||
|         "core-js": "^3.37.0", |         "core-js": "^3.37.1", | ||||||
|         "cropperjs": "^1.6.2", |         "cropperjs": "^1.6.2", | ||||||
|         "crypto-js": "^4.2.0", |         "crypto-js": "^4.2.0", | ||||||
|         "echarts": "^5.5.0", |         "echarts": "^5.5.0", | ||||||
|         "element-plus": "^2.7.1", |         "element-plus": "^2.7.3", | ||||||
|         "json-bigint": "^1.0.0", |         "json-bigint": "^1.0.0", | ||||||
|         "json5-to-table": "^0.1.8", |         "json5-to-table": "^0.1.8", | ||||||
|         "markdown-it": "^14.1.0", |         "markdown-it": "^14.1.0", | ||||||
| @@ -29,23 +29,23 @@ | |||||||
|         "sortablejs": "^1.15.2", |         "sortablejs": "^1.15.2", | ||||||
|         "tinymce": "^6.8.3", |         "tinymce": "^6.8.3", | ||||||
|         "vkbeautify": "^0.99.3", |         "vkbeautify": "^0.99.3", | ||||||
|         "vue": "^3.4.25", |         "vue": "^3.4.27", | ||||||
|         "vue-i18n": "^9.13.1", |         "vue-i18n": "^9.13.1", | ||||||
|         "vue-router": "^4.3.2", |         "vue-router": "^4.3.2", | ||||||
|         "vue3-ace-editor": "^2.2.4", |         "vue3-ace-editor": "^2.2.4", | ||||||
|         "vue3-json-viewer": "^2.2.2", |         "vue3-json-viewer": "^2.2.2", | ||||||
|         "vuedraggable": "^4.0.3", |         "vuedraggable": "^4.0.3", | ||||||
|         "vuex": "^4.1.0", |         "vuex": "^4.1.0", | ||||||
|         "xgplayer": "^3.0.16", |         "xgplayer": "^3.0.17", | ||||||
|         "xgplayer-hls": "^3.0.16" |         "xgplayer-hls": "^3.0.17" | ||||||
|     }, |     }, | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@vitejs/plugin-vue": "^5.0.4", |         "@vitejs/plugin-vue": "^5.0.4", | ||||||
|         "prettier": "^3.2.5", |         "prettier": "^3.2.5", | ||||||
|         "prettier-plugin-organize-attributes": "^1.0.0", |         "prettier-plugin-organize-attributes": "^1.0.0", | ||||||
|         "sass": "^1.75.0", |         "sass": "^1.77.2", | ||||||
|         "terser": "^5.30.4", |         "terser": "^5.31.0", | ||||||
|         "vite": "^5.2.10" |         "vite": "^5.2.11" | ||||||
|     }, |     }, | ||||||
|     "browserslist": [ |     "browserslist": [ | ||||||
|         "> 1%", |         "> 1%", | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								src/frontend/admin/src/assets/icons/Email.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/frontend/admin/src/assets/icons/Email.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <template> | ||||||
|  |     <svg class="icon" height="256" p-id="2661" t="1716619036537" version="1.1" viewBox="0 0 1024 1024" width="256" xmlns="http://www.w3.org/2000/svg"> | ||||||
|  |         <path | ||||||
|  |             d="M874.666667 181.333333H149.333333c-40.533333 0-74.666667 34.133333-74.666666 74.666667v512c0 40.533333 34.133333 74.666667 74.666666 74.666667h725.333334c40.533333 0 74.666667-34.133333 74.666666-74.666667V256c0-40.533333-34.133333-74.666667-74.666666-74.666667z m-725.333334 64h725.333334c6.4 0 10.666667 4.266667 10.666666 10.666667v25.6L512 516.266667l-373.333333-234.666667V256c0-6.4 4.266667-10.666667 10.666666-10.666667z m725.333334 533.333334H149.333333c-6.4 0-10.666667-4.266667-10.666666-10.666667V356.266667l356.266666 224c4.266667 4.266667 10.666667 4.266667 17.066667 4.266666s12.8-2.133333 17.066667-4.266666l356.266666-224V768c0 6.4-4.266667 10.666667-10.666666 10.666667z" | ||||||
|  |             p-id="2662"></path> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
							
								
								
									
										13
									
								
								src/frontend/admin/src/assets/icons/MailCode.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/frontend/admin/src/assets/icons/MailCode.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | <template> | ||||||
|  |     <svg class="icon" height="256" p-id="9218" t="1716619196030" version="1.1" viewBox="0 0 1024 1024" width="256" xmlns="http://www.w3.org/2000/svg"> | ||||||
|  |         <path | ||||||
|  |             d="M642.0992 501.5552a33.28 33.28 0 0 1 52.4288 40.6528l-3.328 4.2496-154.624 168.96a33.28 33.28 0 0 1-41.6256 6.144l-4.3008-3.072-128-107.008a33.28 33.28 0 0 1 38.1952-54.1696l4.4544 3.072 103.5776 86.6304 133.2224-145.4592z" | ||||||
|  |             p-id="9219"></path> | ||||||
|  |         <path | ||||||
|  |             d="M793.6 153.6a102.4 102.4 0 0 1 102.4 102.4v512a102.4 102.4 0 0 1-102.4 102.4h-563.2a102.4 102.4 0 0 1-102.4-102.4V256a102.4 102.4 0 0 1 102.4-102.4h563.2z m0 66.56h-563.2a35.84 35.84 0 0 0-35.5328 30.976L194.56 256v512a35.84 35.84 0 0 0 30.976 35.5328l4.864 0.3072h563.2a35.84 35.84 0 0 0 35.5328-30.976L829.44 768V256a35.84 35.84 0 0 0-30.976-35.5328L793.6 220.16z" | ||||||
|  |             p-id="9220"></path> | ||||||
|  |         <path | ||||||
|  |             d="M821.248 242.176a33.28 33.28 0 0 1 36.352 55.3984l-4.5056 2.9696-300.7488 164.096a84.48 84.48 0 0 1-72.9088 3.84l-7.68-3.6864-304.128-164.1472a33.28 33.28 0 0 1 26.7264-60.7744l4.9152 2.2016 304.128 164.1984a17.92 17.92 0 0 0 13.7728 1.3312l3.2768-1.3824 300.8-164.096z" | ||||||
|  |             p-id="9221"></path> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
							
								
								
									
										7
									
								
								src/frontend/admin/src/assets/icons/Mobile.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/frontend/admin/src/assets/icons/Mobile.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <template> | ||||||
|  |     <svg class="icon" height="256" p-id="3820" t="1716618918266" version="1.1" viewBox="0 0 1024 1024" width="256" xmlns="http://www.w3.org/2000/svg"> | ||||||
|  |         <path | ||||||
|  |             d="M736 0h-448C235.2 0 192 43.2 192 96v832c0 52.8 43.2 96 96 96h448c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM384 48h256v32H384v-32zM512 960a64 64 0 1 1 0-128 64 64 0 0 1 0 128z m256-192H256V128h512v640z" | ||||||
|  |             p-id="3821"></path> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
| @@ -1,15 +1,16 @@ | |||||||
| <template> | <template> | ||||||
|     <svg |     <svg class="icon" height="256" p-id="5451" t="1716619102648" version="1.1" viewBox="0 0 1024 1024" width="256" xmlns="http://www.w3.org/2000/svg"> | ||||||
|         class="icon" |  | ||||||
|         height="128" |  | ||||||
|         p-id="17757" |  | ||||||
|         t="1708507211716" |  | ||||||
|         version="1.1" |  | ||||||
|         viewBox="0 0 1024 1024" |  | ||||||
|         width="128" |  | ||||||
|         xmlns="http://www.w3.org/2000/svg"> |  | ||||||
|         <path |         <path | ||||||
|             d="M179.2 742.4v102.4c0 26.368 21.6576 48.128 49.408 50.8928l6.0416 0.3072h554.7008c28.5696 0 52.1216-19.968 55.1424-45.6192l0.3072-5.5808v-102.4h51.2v102.4c0 54.1184-44.9536 98.4064-101.888 102.144l-7.8336 0.256H237.7216c-57.9584 0-105.472-41.984-109.4656-95.0784L128 844.8v-102.4h51.2z m682.5984-399.36v45.6192l-65.8944 78.336c49.7664 2.7648 78.336 40.0896 78.336 97.2288 0 61.2864-35.0208 106.9056-102.2976 106.9056-67.7376 0-102.7584-45.1584-102.7584-106.4448v-0.9216l56.6784-3.6864v3.6864c0 40.0896 18.8928 58.5216 46.08 58.5216 26.7264 0 45.6192-18.432 45.6192-58.5216s-17.9712-58.5216-47.0016-58.5216a50.3296 50.3296 0 0 0-22.1184 5.0688l-27.648-30.4128 74.1888-88.0128h-115.6608V343.04h182.4768z m-570.2144 0v273.2544h61.7472V665.6H172.2368v-49.3056h62.6688V403.4048l-62.6688 25.8048V375.7568L243.6608 343.04h47.9232z m220.8256-5.5296c60.8256 0 99.9936 42.3936 99.9936 97.6896 0 32.7168-11.52 52.5312-31.7952 76.032l-92.6208 105.5232h124.416V665.6H412.416v-41.0112l123.9552-142.848c14.7456-17.0496 19.3536-29.952 19.3536-46.08 0-32.256-17.9712-49.3056-43.3152-49.3056-25.8048 0-43.3152 17.0496-43.3152 49.3056v11.0592l-56.6784-3.6864V435.2c0-55.296 37.3248-97.6896 99.9936-97.6896z m273.92-260.7104c57.9072 0 105.3696 41.984 109.4144 95.0784l0.256 7.3216v102.4h-51.2v-102.4c0-26.368-21.6576-48.128-49.408-50.8928l-6.0416-0.3072H234.6496c-28.5696 0-52.1216 19.968-55.1424 45.6192L179.2 179.2v102.4h-51.2v-102.4c0-54.1184 44.9536-98.4064 101.888-102.144l7.8336-0.256h548.5568z" |             d="M932.8 1024H495.274667c-50.304 0-91.242667-41.088-91.242667-91.562667V588.032a21.333333 21.333333 0 1 1 42.666667 0v344.405333A48.789333 48.789333 0 0 0 495.274667 981.333333h437.525333A48.768 48.768 0 0 0 981.333333 932.437333V310.208a48.768 48.768 0 0 0-48.533333-48.874667H771.2a21.333333 21.333333 0 1 1 0-42.666666h161.578667c50.282667 0 91.2 41.066667 91.2 91.541333v622.229333C1024 982.912 983.082667 1024 932.8 1024z" | ||||||
|             p-id="17758"></path> |             p-id="5452"></path> | ||||||
|  |         <path | ||||||
|  |             d="M930.133333 876.394667H497.941333a21.333333 21.333333 0 0 1-21.333333-21.333334V599.786667a21.333333 21.333333 0 1 1 42.666667 0v233.941333H908.8V342.656h-121.92a21.333333 21.333333 0 1 1 0-42.666667H930.133333a21.333333 21.333333 0 0 1 21.333334 21.333334v533.738666a21.333333 21.333333 0 0 1-21.333334 21.333334zM745.770667 951.04H682.24a21.333333 21.333333 0 1 1 0-42.666667h63.530667a21.333333 21.333333 0 1 1 0 42.666667z" | ||||||
|  |             p-id="5453"></path> | ||||||
|  |         <path | ||||||
|  |             d="M780.352 699.285333a21.269333 21.269333 0 0 1-5.973333-0.853333l-334.421334-97.621333c-13.866667 1.024-26.688 1.514667-39.104 1.514666C179.818667 602.325333 0 467.221333 0 301.162667S179.818667 0 400.832 0s400.832 135.104 400.832 301.162667c0 6.656-0.32 13.312-0.874667 19.861333-7.36 85.205333-63.552 164.522667-152.170666 216.938667l145.536 123.733333a21.312 21.312 0 0 1-13.802667 37.589333z m-338.154667-141.376c2.026667 0 4.032 0.298667 5.973334 0.853334l242.197333 70.677333-93.141333-79.168a21.312 21.312 0 0 1 4.416-35.392c91.264-44.821333 149.824-118.656 156.650666-197.482667 0.448-5.333333 0.704-10.794667 0.704-16.256C758.997333 158.634667 598.336 42.666667 400.832 42.666667 203.349333 42.666667 42.666667 158.634667 42.666667 301.162667s160.682667 258.496 358.186666 258.496c12.437333 0 25.386667-0.533333 39.658667-1.685334 0.554667-0.042667 1.130667-0.064 1.685333-0.064z" | ||||||
|  |             p-id="5454"></path> | ||||||
|  |         <path | ||||||
|  |             d="M190.528 355.946667a77.802667 77.802667 0 0 0 39.488 11.157333c22.528 0 35.690667-11.904 35.690667-29.141333 0-15.914667-9.130667-25.066667-32.149334-33.877334-27.84-9.898667-45.056-24.32-45.056-48.362666 0-26.581333 22.016-46.314667 55.168-46.314667 17.450667 0 30.144 4.032 37.717334 8.362667l-6.08 17.962666a67.776 67.776 0 0 0-32.405334-8.106666c-23.296 0-32.128 13.930667-32.128 25.557333 0 15.957333 10.368 23.786667 33.898667 32.938667 28.864 11.114667 43.541333 25.024 43.541333 50.069333 0 26.346667-19.498667 49.130667-59.733333 49.130667-16.448 0-34.410667-4.821333-43.541333-10.88l5.589333-18.496zM462.186667 307.882667c-1.258667-23.829333-2.773333-52.394667-2.538667-73.664h-0.768a1007.829333 1007.829333 0 0 1-21.482667 64.789333l-30.144 82.773333h-16.682666l-27.584-81.237333c-8.106667-24.064-14.954667-46.08-19.754667-66.325333h-0.512c-0.490667 21.269333-1.770667 49.834667-3.285333 75.434666l-4.544 73.130667h-21.013334l11.904-170.602667h28.096l29.098667 82.517334c7.082667 21.013333 12.885333 39.722667 17.216 57.450666h0.768c4.309333-17.194667 10.389333-35.946667 17.962667-57.450666l30.378666-82.517334h28.096l10.645334 170.602667h-21.525334l-4.330666-74.901333zM518.997333 355.946667a77.76 77.76 0 0 0 39.509334 11.157333c22.506667 0 35.669333-11.904 35.669333-29.141333 0-15.914667-9.130667-25.066667-32.128-33.877334-27.882667-9.898667-45.077333-24.32-45.077333-48.362666 0-26.581333 22.037333-46.314667 55.146666-46.314667 17.450667 0 30.122667 4.032 37.738667 8.362667l-6.08 17.962666a67.776 67.776 0 0 0-32.405333-8.106666c-23.296 0-32.170667 13.930667-32.170667 25.557333 0 15.957333 10.368 23.786667 33.941333 32.938667 28.864 11.114667 43.541333 25.024 43.541334 50.069333 0 26.346667-19.477333 49.130667-59.733334 49.130667-16.448 0-34.432-4.821333-43.562666-10.88l5.610666-18.496z" | ||||||
|  |             p-id="5455"></path> | ||||||
|     </svg> |     </svg> | ||||||
| </template> | </template> | ||||||
| @@ -44,7 +44,6 @@ export { default as Robot } from './Robot.vue' | |||||||
| export { default as Role } from './Role.vue' | export { default as Role } from './Role.vue' | ||||||
| export { default as ScheduledJob } from './ScheduledJob.vue' | export { default as ScheduledJob } from './ScheduledJob.vue' | ||||||
| export { default as Send } from './Send.vue' | export { default as Send } from './Send.vue' | ||||||
| export { default as SmsCode } from './SmsCode.vue' |  | ||||||
| export { default as Stats } from './Stats.vue' | export { default as Stats } from './Stats.vue' | ||||||
| export { default as Sync } from './Sync.vue' | export { default as Sync } from './Sync.vue' | ||||||
| export { default as Task } from './Task.vue' | export { default as Task } from './Task.vue' | ||||||
| @@ -67,4 +66,8 @@ export { default as Collect } from './Collect.vue' | |||||||
| export { default as FreeSql } from './FreeSql.vue' | export { default as FreeSql } from './FreeSql.vue' | ||||||
| export { default as Performance } from './Performance.vue' | export { default as Performance } from './Performance.vue' | ||||||
| export { default as Proxy } from './Proxy.vue' | export { default as Proxy } from './Proxy.vue' | ||||||
| export { default as ECharts } from './ECharts.vue' | export { default as ECharts } from './ECharts.vue' | ||||||
|  | export { default as Mobile } from './Mobile.vue' | ||||||
|  | export { default as Email } from './Email.vue' | ||||||
|  | export { default as SmsCode } from './SmsCode.vue' | ||||||
|  | export { default as MailCode } from './MailCode.vue' | ||||||
| @@ -312,7 +312,7 @@ export default { | |||||||
|                 } catch { |                 } catch { | ||||||
|                     return |                     return | ||||||
|                 } |                 } | ||||||
|                 await this.vue.deleteRow(this.current.row) |                 await this.vue.rowDel(this.current.row) | ||||||
|                 return |                 return | ||||||
|             } |             } | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -45,11 +45,9 @@ export default { | |||||||
|     justify-content: center; |     justify-content: center; | ||||||
|     align-items: center; |     align-items: center; | ||||||
| } | } | ||||||
|  |  | ||||||
| .main { | .main { | ||||||
|     height: 25rem; |     height: 25rem; | ||||||
| } | } | ||||||
|  |  | ||||||
| .wrap { | .wrap { | ||||||
|     gap: 1rem; |     gap: 1rem; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 GitHub
						GitHub