diff --git a/assets/seed-data/Sys_Menu.json b/assets/seed-data/Sys_Menu.json
index 210b0238..8de79b03 100644
--- a/assets/seed-data/Sys_Menu.json
+++ b/assets/seed-data/Sys_Menu.json
@@ -6,7 +6,7 @@
"Id": 373837717815301,
"Name": "home",
"Path": "/home",
- "Sort": 100,
+ "Sort": 999,
"Title": "主控面板",
"Type": 1
},
diff --git a/assets/seed-data/Sys_RoleApi.json b/assets/seed-data/Sys_RoleApi.json
index 41e8e8ac..ff017513 100644
--- a/assets/seed-data/Sys_RoleApi.json
+++ b/assets/seed-data/Sys_RoleApi.json
@@ -14,5 +14,25 @@
{
"ApiId": "api/sys/user",
"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,
}
]
\ No newline at end of file
diff --git a/build/code.quality.props b/build/code.quality.props
index 0960b406..bdb6e183 100644
--- a/build/code.quality.props
+++ b/build/code.quality.props
@@ -23,7 +23,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/src/backend/NetAdmin.AdmServer.Tests/NetAdmin.AdmServer.Tests.csproj b/src/backend/NetAdmin.AdmServer.Tests/NetAdmin.AdmServer.Tests.csproj
index 0fa6cfde..aeb8f972 100644
--- a/src/backend/NetAdmin.AdmServer.Tests/NetAdmin.AdmServer.Tests.csproj
+++ b/src/backend/NetAdmin.AdmServer.Tests/NetAdmin.AdmServer.Tests.csproj
@@ -4,6 +4,6 @@
-
+
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Application/Services/RedLockerService.cs b/src/backend/NetAdmin.Application/Services/RedLockerService.cs
new file mode 100644
index 00000000..59a3336b
--- /dev/null
+++ b/src/backend/NetAdmin.Application/Services/RedLockerService.cs
@@ -0,0 +1,29 @@
+using NetAdmin.Application.Repositories;
+using NetAdmin.Domain.DbMaps.Dependency;
+using RedLockNet;
+
+namespace NetAdmin.Application.Services;
+
+///
+/// RedLocker Service Base
+///
+public abstract class RedLockerService(DefaultRepository rpo, RedLocker redLocker)
+ : RepositoryService(rpo)
+ where T1 : EntityBase
+{
+ ///
+ /// 获取锁
+ ///
+ /// NetAdminGetLockerException
+ protected async Task 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();
+ }
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs b/src/backend/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs
index 80b056d9..0f9e85b0 100644
--- a/src/backend/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs
+++ b/src/backend/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs
@@ -12,7 +12,7 @@ public sealed class MobileAttribute : RegexAttribute
public MobileAttribute() //
: base(Chars.RGX_MOBILE)
{
- ErrorMessageResourceName = nameof(Ln.手机号码不正确);
+ ErrorMessageResourceName = nameof(Ln.手机号不正确);
ErrorMessageResourceType = typeof(Ln);
}
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs
index a5246585..4117c689 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs
@@ -61,7 +61,11 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort
///
/// 部门描述
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Summary { get; init; }
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs
index ee9d9ac6..5bad6d10 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs
@@ -68,21 +68,33 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
///
/// 请求体
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string RequestBody { get; init; }
///
/// 请求头
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string RequestHeader { get; init; }
///
/// 请求的网络地址
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string RequestUrl { get; init; }
@@ -94,7 +106,11 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
public virtual JobStatues Status { get; init; }
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Summary { get; init; }
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs
index a2368452..21896848 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs
@@ -48,14 +48,22 @@ public record Sys_JobRecord : LiteImmutableEntity
///
/// 请求体
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string RequestBody { get; init; }
///
/// 请求头
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string RequestHeader { get; init; }
@@ -69,14 +77,22 @@ public record Sys_JobRecord : LiteImmutableEntity
///
/// 响应体
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string ResponseBody { get; init; }
///
/// 响应头
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string ResponseHeader { get; init; }
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs
index dc3275c1..34c0151a 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs
@@ -35,14 +35,22 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient
///
/// 创建者来源地址
///
- [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]
public string CreatedReferer { get; init; }
///
/// 创建者客户端用户代理
///
- [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]
public virtual string CreatedUserAgent { get; init; }
@@ -63,14 +71,22 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient
///
/// 异常信息
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Exception { get; init; }
///
/// 附加数据
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string ExtraData { get; init; }
@@ -91,14 +107,22 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient
///
/// 来源地址
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string ReferUrl { get; init; }
///
/// 请求内容
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string RequestBody { get; init; }
@@ -112,7 +136,11 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient
///
/// 请求头信息
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string RequestHeaders { get; init; }
@@ -126,7 +154,11 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient
///
/// 响应内容
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string ResponseBody { get; init; }
@@ -140,7 +172,11 @@ public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient
///
/// 响应头
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string ResponseHeaders { get; init; }
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs
index 97eb6462..56bc95df 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs
@@ -85,7 +85,11 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
///
/// 备注
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Summary { get; init; }
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs
index dcf87705..b4d264bc 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs
@@ -14,7 +14,11 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
///
/// 消息内容
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Content { get; init; }
@@ -55,14 +59,22 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
///
/// 消息摘要
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Summary { get; init; }
///
/// 消息主题
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Title { get; init; }
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs
index c18aded9..d29be8e1 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs
@@ -85,7 +85,11 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
///
/// 描述
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public virtual string Summary { get; init; }
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs
index 7e2bb7e4..b8ac0a48 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs
@@ -33,7 +33,11 @@ public record Sys_VerifyCode : VersionEntity
///
/// 发送报告
///
+ #if DBTYPE_SQLITE
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
+ #else
+ [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
+ #endif
[JsonIgnore]
public string Report { get; init; }
diff --git a/src/backend/NetAdmin.Domain/Dto/Sys/User/CheckMobileAvailableReq.cs b/src/backend/NetAdmin.Domain/Dto/Sys/User/CheckMobileAvailableReq.cs
index ba06098e..d467f50e 100644
--- a/src/backend/NetAdmin.Domain/Dto/Sys/User/CheckMobileAvailableReq.cs
+++ b/src/backend/NetAdmin.Domain/Dto/Sys/User/CheckMobileAvailableReq.cs
@@ -11,6 +11,6 @@ public sealed record CheckMobileAvailableReq : Sys_User
///
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[Mobile]
- [Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.手机号码不能为空))]
+ [Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.手机号不能为空))]
public override string Mobile { get; init; }
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj b/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj
index f5ca3bd1..3d157497 100644
--- a/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj
+++ b/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj
@@ -1,4 +1,7 @@
+
+ DBTYPE_SQLITE
+
diff --git a/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs b/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs
index 67797ff6..3fba2bd5 100644
--- a/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs
+++ b/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs
@@ -24,7 +24,12 @@ public sealed class RequestAuditMiddleware(
// 跳过处理的情况:
if (!context.Request.Path.StartsWithSegments(_defaultRoutePrefix) // 非api请求
|| 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);
return;
}
diff --git a/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj b/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj
index 4fdb361d..065173c0 100644
--- a/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj
+++ b/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj
@@ -8,6 +8,7 @@
+
diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs
index c4eb9ad4..d7c02805 100644
--- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs
+++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs
@@ -291,7 +291,7 @@ public sealed class UserService(
}
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 (!await verifyCodeService.VerifyAsync(req.OriginVerifySmsCodeReq).ConfigureAwait(false)) {
- throw new NetAdminInvalidOperationException($"{Ln.旧手机号码验证码不正确}");
+ throw new NetAdminInvalidOperationException($"{Ln.旧手机号验证码不正确}");
}
if (user.Mobile != req.OriginVerifySmsCodeReq.DestDevice) {
- throw new NetAdminInvalidOperationException($"{Ln.旧手机号码不正确}");
+ throw new NetAdminInvalidOperationException($"{Ln.旧手机号不正确}");
}
}
// 验证新手机号
if (!await verifyCodeService.VerifyAsync(req.NewVerifySmsCodeReq).ConfigureAwait(false)) {
- throw new NetAdminInvalidOperationException($"{Ln.新手机号码验证码不正确}");
+ throw new NetAdminInvalidOperationException($"{Ln.新手机号验证码不正确}");
}
if (await Rpo.UpdateDiy
diff --git a/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj b/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj
index a88bfb57..dfc9cfb0 100644
--- a/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj
+++ b/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj
@@ -3,9 +3,9 @@
-
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/src/frontend/admin/package.json b/src/frontend/admin/package.json
index e1a4db88..9bd2a78a 100644
--- a/src/frontend/admin/package.json
+++ b/src/frontend/admin/package.json
@@ -11,14 +11,14 @@
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@tinymce/tinymce-vue": "^5.1.1",
- "ace-builds": "^1.33.1",
+ "ace-builds": "^1.33.2",
"axios": "^1.6.8",
"clipboard": "^2.0.11",
- "core-js": "^3.37.0",
+ "core-js": "^3.37.1",
"cropperjs": "^1.6.2",
"crypto-js": "^4.2.0",
"echarts": "^5.5.0",
- "element-plus": "^2.7.1",
+ "element-plus": "^2.7.3",
"json-bigint": "^1.0.0",
"json5-to-table": "^0.1.8",
"markdown-it": "^14.1.0",
@@ -29,23 +29,23 @@
"sortablejs": "^1.15.2",
"tinymce": "^6.8.3",
"vkbeautify": "^0.99.3",
- "vue": "^3.4.25",
+ "vue": "^3.4.27",
"vue-i18n": "^9.13.1",
"vue-router": "^4.3.2",
"vue3-ace-editor": "^2.2.4",
"vue3-json-viewer": "^2.2.2",
"vuedraggable": "^4.0.3",
"vuex": "^4.1.0",
- "xgplayer": "^3.0.16",
- "xgplayer-hls": "^3.0.16"
+ "xgplayer": "^3.0.17",
+ "xgplayer-hls": "^3.0.17"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.0.4",
"prettier": "^3.2.5",
"prettier-plugin-organize-attributes": "^1.0.0",
- "sass": "^1.75.0",
- "terser": "^5.30.4",
- "vite": "^5.2.10"
+ "sass": "^1.77.2",
+ "terser": "^5.31.0",
+ "vite": "^5.2.11"
},
"browserslist": [
"> 1%",
diff --git a/src/frontend/admin/src/assets/icons/Email.vue b/src/frontend/admin/src/assets/icons/Email.vue
new file mode 100644
index 00000000..e3f2b931
--- /dev/null
+++ b/src/frontend/admin/src/assets/icons/Email.vue
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/src/frontend/admin/src/assets/icons/MailCode.vue b/src/frontend/admin/src/assets/icons/MailCode.vue
new file mode 100644
index 00000000..f28fa142
--- /dev/null
+++ b/src/frontend/admin/src/assets/icons/MailCode.vue
@@ -0,0 +1,13 @@
+
+
+
\ No newline at end of file
diff --git a/src/frontend/admin/src/assets/icons/Mobile.vue b/src/frontend/admin/src/assets/icons/Mobile.vue
new file mode 100644
index 00000000..4d37c4b2
--- /dev/null
+++ b/src/frontend/admin/src/assets/icons/Mobile.vue
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/src/frontend/admin/src/assets/icons/SmsCode.vue b/src/frontend/admin/src/assets/icons/SmsCode.vue
index 7b423cf2..a119be93 100644
--- a/src/frontend/admin/src/assets/icons/SmsCode.vue
+++ b/src/frontend/admin/src/assets/icons/SmsCode.vue
@@ -1,15 +1,16 @@
-
\ No newline at end of file
diff --git a/src/frontend/admin/src/assets/icons/index.js b/src/frontend/admin/src/assets/icons/index.js
index dedc5487..2023f048 100644
--- a/src/frontend/admin/src/assets/icons/index.js
+++ b/src/frontend/admin/src/assets/icons/index.js
@@ -44,7 +44,6 @@ export { default as Robot } from './Robot.vue'
export { default as Role } from './Role.vue'
export { default as ScheduledJob } from './ScheduledJob.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 Sync } from './Sync.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 Performance } from './Performance.vue'
export { default as Proxy } from './Proxy.vue'
-export { default as ECharts } from './ECharts.vue'
\ No newline at end of file
+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'
\ No newline at end of file
diff --git a/src/frontend/admin/src/components/scTable/index.vue b/src/frontend/admin/src/components/scTable/index.vue
index f32c437e..93c743db 100644
--- a/src/frontend/admin/src/components/scTable/index.vue
+++ b/src/frontend/admin/src/components/scTable/index.vue
@@ -312,7 +312,7 @@ export default {
} catch {
return
}
- await this.vue.deleteRow(this.current.row)
+ await this.vue.rowDel(this.current.row)
return
}
diff --git a/src/frontend/admin/src/config/iconSelect.js b/src/frontend/admin/src/config/iconSelect.js
index 5e433878..6823f1e4 100644
--- a/src/frontend/admin/src/config/iconSelect.js
+++ b/src/frontend/admin/src/config/iconSelect.js
@@ -1 +1 @@
-export default{"icons":[{"icons":["el-icon-add-location","el-icon-aim","el-icon-alarm-clock","el-icon-apple","el-icon-arrow-down","el-icon-arrow-down-bold","el-icon-arrow-left","el-icon-arrow-left-bold","el-icon-arrow-right","el-icon-arrow-right-bold","el-icon-arrow-up","el-icon-arrow-up-bold","el-icon-avatar","el-icon-back","el-icon-baseball","el-icon-basketball","el-icon-bell","el-icon-bell-filled","el-icon-bicycle","el-icon-bottom","el-icon-bottom-left","el-icon-bottom-right","el-icon-bowl","el-icon-box","el-icon-briefcase","el-icon-brush","el-icon-brush-filled","el-icon-burger","el-icon-calendar","el-icon-camera","el-icon-camera-filled","el-icon-caret-bottom","el-icon-caret-left","el-icon-caret-right","el-icon-caret-top","el-icon-cellphone","el-icon-chat-dot-round","el-icon-chat-dot-square","el-icon-chat-line-round","el-icon-chat-line-square","el-icon-chat-round","el-icon-chat-square","el-icon-check","el-icon-checked","el-icon-cherry","el-icon-chicken","el-icon-circle-check","el-icon-circle-check-filled","el-icon-circle-close","el-icon-circle-close-filled","el-icon-circle-plus","el-icon-circle-plus-filled","el-icon-clock","el-icon-close","el-icon-close-bold","el-icon-cloudy","el-icon-coffee","el-icon-coffee-cup","el-icon-coin","el-icon-cold-drink","el-icon-collection","el-icon-collection-tag","el-icon-comment","el-icon-compass","el-icon-connection","el-icon-coordinate","el-icon-copy-document","el-icon-cpu","el-icon-credit-card","el-icon-crop","el-icon-d-arrow-left","el-icon-d-arrow-right","el-icon-d-caret","el-icon-data-analysis","el-icon-data-board","el-icon-data-line","el-icon-delete","el-icon-delete-filled","el-icon-delete-location","el-icon-dessert","el-icon-discount","el-icon-dish","el-icon-dish-dot","el-icon-document","el-icon-document-add","el-icon-document-checked","el-icon-document-copy","el-icon-document-delete","el-icon-document-remove","el-icon-download","el-icon-drizzling","el-icon-edit","el-icon-edit-pen","el-icon-eleme","el-icon-eleme-filled","el-icon-element-plus","el-icon-expand","el-icon-failed","el-icon-female","el-icon-files","el-icon-film","el-icon-filter","el-icon-finished","el-icon-first-aid-kit","el-icon-flag","el-icon-fold","el-icon-folder","el-icon-folder-add","el-icon-folder-checked","el-icon-folder-delete","el-icon-folder-opened","el-icon-folder-remove","el-icon-food","el-icon-football","el-icon-fork-spoon","el-icon-fries","el-icon-full-screen","el-icon-goblet","el-icon-goblet-full","el-icon-goblet-square","el-icon-goblet-square-full","el-icon-goods","el-icon-goods-filled","el-icon-grape","el-icon-grid","el-icon-guide","el-icon-headset","el-icon-help","el-icon-help-filled","el-icon-hide","el-icon-histogram","el-icon-home-filled","el-icon-hot-water","el-icon-house","el-icon-ice-cream","el-icon-ice-cream-round","el-icon-ice-cream-square","el-icon-ice-drink","el-icon-ice-tea","el-icon-info-filled","el-icon-iphone","el-icon-key","el-icon-knife-fork","el-icon-lightning","el-icon-link","el-icon-list","el-icon-loading","el-icon-location","el-icon-location-filled","el-icon-location-information","el-icon-lock","el-icon-lollipop","el-icon-magic-stick","el-icon-magnet","el-icon-male","el-icon-management","el-icon-map-location","el-icon-medal","el-icon-menu","el-icon-message","el-icon-message-box","el-icon-mic","el-icon-microphone","el-icon-milk-tea","el-icon-minus","el-icon-money","el-icon-monitor","el-icon-moon","el-icon-moon-night","el-icon-more","el-icon-more-filled","el-icon-mostly-cloudy","el-icon-mouse","el-icon-mug","el-icon-mute","el-icon-mute-notification","el-icon-no-smoking","el-icon-notebook","el-icon-notification","el-icon-odometer","el-icon-office-building","el-icon-open","el-icon-operation","el-icon-opportunity","el-icon-orange","el-icon-paperclip","el-icon-partly-cloudy","el-icon-pear","el-icon-phone","el-icon-phone-filled","el-icon-picture","el-icon-picture-filled","el-icon-picture-rounded","el-icon-pie-chart","el-icon-place","el-icon-platform","el-icon-plus","el-icon-pointer","el-icon-position","el-icon-postcard","el-icon-pouring","el-icon-present","el-icon-price-tag","el-icon-printer","el-icon-promotion","el-icon-question-filled","el-icon-rank","el-icon-reading","el-icon-reading-lamp","el-icon-refresh","el-icon-refresh-left","el-icon-refresh-right","el-icon-refrigerator","el-icon-remove","el-icon-remove-filled","el-icon-right","el-icon-scale-to-original","el-icon-school","el-icon-scissor","el-icon-search","el-icon-select","el-icon-sell","el-icon-semi-select","el-icon-service","el-icon-set-up","el-icon-setting","el-icon-share","el-icon-ship","el-icon-shop","el-icon-shopping-bag","el-icon-shopping-cart","el-icon-shopping-cart-full","el-icon-smoking","el-icon-soccer","el-icon-sold-out","el-icon-sort","el-icon-sort-down","el-icon-sort-up","el-icon-stamp","el-icon-star","el-icon-star-filled","el-icon-stopwatch","el-icon-success-filled","el-icon-sugar","el-icon-suitcase","el-icon-sunny","el-icon-sunrise","el-icon-sunset","el-icon-switch","el-icon-switch-button","el-icon-takeaway-box","el-icon-ticket","el-icon-tickets","el-icon-timer","el-icon-toilet-paper","el-icon-tools","el-icon-top","el-icon-top-left","el-icon-top-right","el-icon-trend-charts","el-icon-trophy","el-icon-turn-off","el-icon-umbrella","el-icon-unlock","el-icon-upload","el-icon-upload-filled","el-icon-user","el-icon-user-filled","el-icon-van","el-icon-video-camera","el-icon-video-camera-filled","el-icon-video-pause","el-icon-video-play","el-icon-view","el-icon-wallet","el-icon-wallet-filled","el-icon-warning","el-icon-warning-filled","el-icon-watch","el-icon-watermelon","el-icon-wind-power","el-icon-zoom-in","el-icon-zoom-out"],"name":"默认"},{"icons":["sc-icon-Vue","sc-icon-Code","sc-icon-Wechat","sc-icon-BugFill","sc-icon-BugLine","sc-icon-FileWord","sc-icon-FileExcel","sc-icon-FilePpt","sc-icon-Organization","sc-icon-Upload","sc-icon-Download","sc-icon-Role","sc-icon-Dept","sc-icon-Js","sc-icon-Memory","sc-icon-Dashboard","sc-icon-Api","sc-icon-Code2","sc-icon-Csharp","sc-icon-Dic","sc-icon-Position","sc-icon-Tpl","sc-icon-Demo","sc-icon-Link","sc-icon-Unlink","sc-icon-Send","sc-icon-SmsCode","sc-icon-Meter","sc-icon-Grafana","sc-icon-Elastic","sc-icon-Kibana","sc-icon-Kafka","sc-icon-Resource","sc-icon-Robot","sc-icon-Device","sc-icon-Business","sc-icon-App","sc-icon-App2","sc-icon-Sync","sc-icon-Drone","sc-icon-Gitea","sc-icon-Docker","sc-icon-Task","sc-icon-ProductCategory","sc-icon-Product","sc-icon-Error","sc-icon-Warning","sc-icon-Stats","sc-icon-Log","sc-icon-OperLog","sc-icon-LoginLog","sc-icon-ExLog","sc-icon-Key","sc-icon-OpenDoor","sc-icon-Alert","sc-icon-Device","sc-icon-Task","sc-icon-Resource","sc-icon-Report","sc-icon-Daily","sc-icon-AccountReport","sc-icon-Element","sc-icon-ApiDoc","sc-icon-Help","sc-icon-Version","sc-icon-Home","sc-icon-Exception","sc-icon-Collect","sc-icon-FreeSql","sc-icon-Performance","sc-icon-Proxy","sc-icon-ECharts"],"name":"扩展"}]}
\ No newline at end of file
+export default{"icons":[{"icons":["el-icon-add-location","el-icon-aim","el-icon-alarm-clock","el-icon-apple","el-icon-arrow-down","el-icon-arrow-down-bold","el-icon-arrow-left","el-icon-arrow-left-bold","el-icon-arrow-right","el-icon-arrow-right-bold","el-icon-arrow-up","el-icon-arrow-up-bold","el-icon-avatar","el-icon-back","el-icon-baseball","el-icon-basketball","el-icon-bell","el-icon-bell-filled","el-icon-bicycle","el-icon-bottom","el-icon-bottom-left","el-icon-bottom-right","el-icon-bowl","el-icon-box","el-icon-briefcase","el-icon-brush","el-icon-brush-filled","el-icon-burger","el-icon-calendar","el-icon-camera","el-icon-camera-filled","el-icon-caret-bottom","el-icon-caret-left","el-icon-caret-right","el-icon-caret-top","el-icon-cellphone","el-icon-chat-dot-round","el-icon-chat-dot-square","el-icon-chat-line-round","el-icon-chat-line-square","el-icon-chat-round","el-icon-chat-square","el-icon-check","el-icon-checked","el-icon-cherry","el-icon-chicken","el-icon-circle-check","el-icon-circle-check-filled","el-icon-circle-close","el-icon-circle-close-filled","el-icon-circle-plus","el-icon-circle-plus-filled","el-icon-clock","el-icon-close","el-icon-close-bold","el-icon-cloudy","el-icon-coffee","el-icon-coffee-cup","el-icon-coin","el-icon-cold-drink","el-icon-collection","el-icon-collection-tag","el-icon-comment","el-icon-compass","el-icon-connection","el-icon-coordinate","el-icon-copy-document","el-icon-cpu","el-icon-credit-card","el-icon-crop","el-icon-d-arrow-left","el-icon-d-arrow-right","el-icon-d-caret","el-icon-data-analysis","el-icon-data-board","el-icon-data-line","el-icon-delete","el-icon-delete-filled","el-icon-delete-location","el-icon-dessert","el-icon-discount","el-icon-dish","el-icon-dish-dot","el-icon-document","el-icon-document-add","el-icon-document-checked","el-icon-document-copy","el-icon-document-delete","el-icon-document-remove","el-icon-download","el-icon-drizzling","el-icon-edit","el-icon-edit-pen","el-icon-eleme","el-icon-eleme-filled","el-icon-element-plus","el-icon-expand","el-icon-failed","el-icon-female","el-icon-files","el-icon-film","el-icon-filter","el-icon-finished","el-icon-first-aid-kit","el-icon-flag","el-icon-fold","el-icon-folder","el-icon-folder-add","el-icon-folder-checked","el-icon-folder-delete","el-icon-folder-opened","el-icon-folder-remove","el-icon-food","el-icon-football","el-icon-fork-spoon","el-icon-fries","el-icon-full-screen","el-icon-goblet","el-icon-goblet-full","el-icon-goblet-square","el-icon-goblet-square-full","el-icon-goods","el-icon-goods-filled","el-icon-grape","el-icon-grid","el-icon-guide","el-icon-headset","el-icon-help","el-icon-help-filled","el-icon-hide","el-icon-histogram","el-icon-home-filled","el-icon-hot-water","el-icon-house","el-icon-ice-cream","el-icon-ice-cream-round","el-icon-ice-cream-square","el-icon-ice-drink","el-icon-ice-tea","el-icon-info-filled","el-icon-iphone","el-icon-key","el-icon-knife-fork","el-icon-lightning","el-icon-link","el-icon-list","el-icon-loading","el-icon-location","el-icon-location-filled","el-icon-location-information","el-icon-lock","el-icon-lollipop","el-icon-magic-stick","el-icon-magnet","el-icon-male","el-icon-management","el-icon-map-location","el-icon-medal","el-icon-menu","el-icon-message","el-icon-message-box","el-icon-mic","el-icon-microphone","el-icon-milk-tea","el-icon-minus","el-icon-money","el-icon-monitor","el-icon-moon","el-icon-moon-night","el-icon-more","el-icon-more-filled","el-icon-mostly-cloudy","el-icon-mouse","el-icon-mug","el-icon-mute","el-icon-mute-notification","el-icon-no-smoking","el-icon-notebook","el-icon-notification","el-icon-odometer","el-icon-office-building","el-icon-open","el-icon-operation","el-icon-opportunity","el-icon-orange","el-icon-paperclip","el-icon-partly-cloudy","el-icon-pear","el-icon-phone","el-icon-phone-filled","el-icon-picture","el-icon-picture-filled","el-icon-picture-rounded","el-icon-pie-chart","el-icon-place","el-icon-platform","el-icon-plus","el-icon-pointer","el-icon-position","el-icon-postcard","el-icon-pouring","el-icon-present","el-icon-price-tag","el-icon-printer","el-icon-promotion","el-icon-question-filled","el-icon-rank","el-icon-reading","el-icon-reading-lamp","el-icon-refresh","el-icon-refresh-left","el-icon-refresh-right","el-icon-refrigerator","el-icon-remove","el-icon-remove-filled","el-icon-right","el-icon-scale-to-original","el-icon-school","el-icon-scissor","el-icon-search","el-icon-select","el-icon-sell","el-icon-semi-select","el-icon-service","el-icon-set-up","el-icon-setting","el-icon-share","el-icon-ship","el-icon-shop","el-icon-shopping-bag","el-icon-shopping-cart","el-icon-shopping-cart-full","el-icon-smoking","el-icon-soccer","el-icon-sold-out","el-icon-sort","el-icon-sort-down","el-icon-sort-up","el-icon-stamp","el-icon-star","el-icon-star-filled","el-icon-stopwatch","el-icon-success-filled","el-icon-sugar","el-icon-suitcase","el-icon-sunny","el-icon-sunrise","el-icon-sunset","el-icon-switch","el-icon-switch-button","el-icon-takeaway-box","el-icon-ticket","el-icon-tickets","el-icon-timer","el-icon-toilet-paper","el-icon-tools","el-icon-top","el-icon-top-left","el-icon-top-right","el-icon-trend-charts","el-icon-trophy","el-icon-turn-off","el-icon-umbrella","el-icon-unlock","el-icon-upload","el-icon-upload-filled","el-icon-user","el-icon-user-filled","el-icon-van","el-icon-video-camera","el-icon-video-camera-filled","el-icon-video-pause","el-icon-video-play","el-icon-view","el-icon-wallet","el-icon-wallet-filled","el-icon-warning","el-icon-warning-filled","el-icon-watch","el-icon-watermelon","el-icon-wind-power","el-icon-zoom-in","el-icon-zoom-out"],"name":"默认"},{"icons":["sc-icon-Vue","sc-icon-Code","sc-icon-Wechat","sc-icon-BugFill","sc-icon-BugLine","sc-icon-FileWord","sc-icon-FileExcel","sc-icon-FilePpt","sc-icon-Organization","sc-icon-Upload","sc-icon-Download","sc-icon-Role","sc-icon-Dept","sc-icon-Js","sc-icon-Memory","sc-icon-Dashboard","sc-icon-Api","sc-icon-Code2","sc-icon-Csharp","sc-icon-Dic","sc-icon-Position","sc-icon-Tpl","sc-icon-Demo","sc-icon-Link","sc-icon-Unlink","sc-icon-Send","sc-icon-SmsCode","sc-icon-Meter","sc-icon-Grafana","sc-icon-Elastic","sc-icon-Kibana","sc-icon-Kafka","sc-icon-Resource","sc-icon-Robot","sc-icon-Device","sc-icon-Business","sc-icon-App","sc-icon-App2","sc-icon-Sync","sc-icon-Drone","sc-icon-Gitea","sc-icon-Docker","sc-icon-Task","sc-icon-ProductCategory","sc-icon-Product","sc-icon-Error","sc-icon-Warning","sc-icon-Stats","sc-icon-Log","sc-icon-OperLog","sc-icon-LoginLog","sc-icon-ExLog","sc-icon-Key","sc-icon-OpenDoor","sc-icon-Alert","sc-icon-Device","sc-icon-Task","sc-icon-Resource","sc-icon-Report","sc-icon-Daily","sc-icon-AccountReport","sc-icon-Element","sc-icon-ApiDoc","sc-icon-Help","sc-icon-Version","sc-icon-Home","sc-icon-Exception","sc-icon-Collect","sc-icon-FreeSql","sc-icon-Performance","sc-icon-Proxy","sc-icon-ECharts","sc-icon-Mobile","sc-icon-Email","sc-icon-SmsCode","sc-icon-MailCode"],"name":"扩展"}]}
\ No newline at end of file
diff --git a/src/frontend/admin/src/views/home/widgets/components/ver.vue b/src/frontend/admin/src/views/home/widgets/components/ver.vue
index 72a76104..17eb5063 100644
--- a/src/frontend/admin/src/views/home/widgets/components/ver.vue
+++ b/src/frontend/admin/src/views/home/widgets/components/ver.vue
@@ -45,11 +45,9 @@ export default {
justify-content: center;
align-items: center;
}
-
.main {
height: 25rem;
}
-
.wrap {
gap: 1rem;
}