diff --git a/assets/res/Enums.ln b/assets/res/Fields.ln
similarity index 100%
rename from assets/res/Enums.ln
rename to assets/res/Fields.ln
diff --git a/build/prebuild.targets b/build/prebuild.targets
index fe986614..ffa1687e 100644
--- a/build/prebuild.targets
+++ b/build/prebuild.targets
@@ -16,8 +16,8 @@
Languages/Nations.ln
-
- Languages/Enums.ln
+
+ Languages/Fields.ln
Languages/Ln.resx
diff --git a/src/backend/NetAdmin.Domain/Attributes/IndicatorAttribute.cs b/src/backend/NetAdmin.Domain/Attributes/IndicatorAttribute.cs
new file mode 100644
index 00000000..2f3ff8ac
--- /dev/null
+++ b/src/backend/NetAdmin.Domain/Attributes/IndicatorAttribute.cs
@@ -0,0 +1,14 @@
+namespace NetAdmin.Domain.Attributes;
+
+///
+/// 标记一个枚举的状态指示
+///
+///
+[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
+public sealed class IndicatorAttribute(string indicate) : Attribute
+{
+ ///
+ /// 状态指示
+ ///
+ public string Indicate { get; init; } = indicate;
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Domain/Enums/Sys/JobStatues.cs b/src/backend/NetAdmin.Domain/Enums/Sys/JobStatues.cs
index b4afbd5a..69ee91da 100644
--- a/src/backend/NetAdmin.Domain/Enums/Sys/JobStatues.cs
+++ b/src/backend/NetAdmin.Domain/Enums/Sys/JobStatues.cs
@@ -1,3 +1,5 @@
+using NetAdmin.Domain.Attributes;
+
namespace NetAdmin.Domain.Enums.Sys;
///
@@ -9,6 +11,7 @@ public enum JobStatues
///
/// 空闲
///
+ [Indicator(nameof(Indicates.Success))]
[ResourceDescription(nameof(Ln.空闲))]
Idle = 1
@@ -17,6 +20,7 @@ public enum JobStatues
///
/// 运行
///
+ [Indicator(nameof(Indicates.Warning))]
[ResourceDescription(nameof(Ln.运行))]
Running = 2
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs
index cdd1954b..a1983a3b 100644
--- a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs
+++ b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs
@@ -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}}"
diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs
index d74355e7..f1b950eb 100644
--- a/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs
+++ b/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs
@@ -5,8 +5,7 @@ namespace NetAdmin.Infrastructure.Configuration.Options;
///
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()
diff --git a/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs b/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs
index 0c20ed29..9830743c 100644
--- a/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs
+++ b/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs
@@ -10,69 +10,71 @@ namespace NetAdmin.Infrastructure.Constant;
///
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";
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Infrastructure/Enums/Indicates.cs b/src/backend/NetAdmin.Infrastructure/Enums/Indicates.cs
new file mode 100644
index 00000000..0eecef3f
--- /dev/null
+++ b/src/backend/NetAdmin.Infrastructure/Enums/Indicates.cs
@@ -0,0 +1,41 @@
+namespace NetAdmin.Infrastructure.Enums;
+
+///
+/// 状态表示
+///
+[Export]
+public enum Indicates
+{
+ ///
+ /// 信息
+ ///
+ Info = 1
+
+ ,
+
+ ///
+ /// 主要
+ ///
+ Primary = 2
+
+ ,
+
+ ///
+ /// 警告
+ ///
+ Warning = 3
+
+ ,
+
+ ///
+ /// 成功
+ ///
+ Success = 4
+
+ ,
+
+ ///
+ /// 危险
+ ///
+ Danger = 5
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs
index 29a43831..50749517 100644
--- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs
+++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs
@@ -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, IConstantSe
{
var ret = App.EffectiveTypes.Where(x => x.IsEnum && x.GetCustomAttribute(false) != null)
.ToDictionary(x => x.Name, x => //
- x.GetEnumValues()
- .Cast()
- .ToDictionary( //
- y => y.ToString()
- , y => new[] {
- Convert.ToInt64(y, CultureInfo.InvariantCulture)
- .ToString(CultureInfo.InvariantCulture)
- , y.ResDesc()
- }));
+ x.GetEnumValues().Cast().ToDictionary(y => y.ToString(), GetDicValue));
- ret.Add($"{nameof(HttpStatusCode)}s", Enum.GetNames()
- .ToDictionary( //
- x => x, x => new[] {
- Convert.ToInt64( //
- Enum.Parse(x)
- , CultureInfo.InvariantCulture)
- .ToString(CultureInfo.InvariantCulture)
- , x
- }));
+ ret.Add( //
+ $"{nameof(HttpStatusCode)}s" //
+ , Enum.GetNames()
+ .ToDictionary(
+ x => x
+ , x => new[] {
+ Convert.ToInt64(Enum.Parse(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()
+ };
+ var indicate = y.GetAttributeOfType()?.Indicate.ToLowerInvariant();
+ return indicate.NullOrEmpty() ? ret : [..ret, indicate];
+ }
}
///
diff --git a/src/frontend/admin/src/components/naColIndicator/index.vue b/src/frontend/admin/src/components/naColIndicator/index.vue
index f28e00c0..b6c5386c 100644
--- a/src/frontend/admin/src/components/naColIndicator/index.vue
+++ b/src/frontend/admin/src/components/naColIndicator/index.vue
@@ -1,23 +1,12 @@
-
-
-
- {{ item.text }}
-
-
-
-
+
\ No newline at end of file
diff --git a/src/frontend/admin/src/components/naIndicator/index.vue b/src/frontend/admin/src/components/naIndicator/index.vue
new file mode 100644
index 00000000..ee6b9eb6
--- /dev/null
+++ b/src/frontend/admin/src/components/naIndicator/index.vue
@@ -0,0 +1,37 @@
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
\ 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 3ebc7269..d9696302 100644
--- a/src/frontend/admin/src/components/scTable/index.vue
+++ b/src/frontend/admin/src/components/scTable/index.vue
@@ -116,22 +116,55 @@
:command="menu"
:key="index"
:title="`${menu}`">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -153,6 +186,7 @@ import columnSetting from './columnSetting'
import scContextmenuItem from '@/components/scContextmenu/item.vue'
import scContextmenu from '@/components/scContextmenu/index.vue'
import { h } from 'vue'
+import tool from '@/utils/tool'
export default {
name: 'scTable',
@@ -222,6 +256,9 @@ export default {
},
},
computed: {
+ tool() {
+ return tool
+ },
_height() {
return Number(this.height) ? Number(this.height) + 'px' : this.height
},
@@ -321,9 +358,9 @@ export default {
try {
value = await this.$prompt(`仅显示 ${kv[0]} ${kv[1]}:`, '高级筛选', {
inputPlaceholder: '一行一个',
- inputPattern: /.+/,
+ inputPattern: /.*/,
inputType: 'textarea',
- inputValue: command.split('^|^')[2],
+ inputValue: kv[2],
})
} catch {
return
diff --git a/src/frontend/admin/src/utils/request.js b/src/frontend/admin/src/utils/request.js
index 736494e7..5e7b9b63 100644
--- a/src/frontend/admin/src/utils/request.js
+++ b/src/frontend/admin/src/utils/request.js
@@ -85,6 +85,35 @@ axios.interceptors.response.use(
if (response.headers['x-access-token']) {
setCookie('X-ACCESS-TOKEN', response.headers['x-access-token'])
}
+ //此处判断是否下载请求
+ if (response.headers['content-type'] === 'application/octet-stream') {
+ //根据响应头获取文件名称
+ console.error(response.headers['content-disposition'])
+ let fileName = response.headers['content-disposition'].match(/filename\*=UTF-8''([^;]+)/)[1]
+ if (fileName) {
+ fileName = decodeURI(fileName)
+ } else {
+ //此处表示后台没有设置响应头 content-disposition,请根据业务场景自行处理
+ fileName = Date.now() + 'download.txt'
+ }
+ const blob = new Blob([response.data], { type: 'application/octet-stream' })
+ if (typeof window.navigator.msSaveBlob !== 'undefined') {
+ window.navigator.msSaveBlob(blob, fileName)
+ } else {
+ const blobURL = window.URL.createObjectURL(blob)
+ const tempLink = document.createElement('a')
+ tempLink.style.display = 'none'
+ tempLink.href = blobURL
+ tempLink.setAttribute('download', fileName)
+ if (typeof tempLink.download === 'undefined') {
+ tempLink.setAttribute('target', '_blank')
+ }
+ document.body.appendChild(tempLink)
+ tempLink.click()
+ document.body.removeChild(tempLink)
+ window.URL.revokeObjectURL(blobURL)
+ }
+ }
return response
},
async (error) => {
diff --git a/src/frontend/admin/src/views/sys/job/index.vue b/src/frontend/admin/src/views/sys/job/index.vue
index 9a125d2a..3664a3da 100644
--- a/src/frontend/admin/src/views/sys/job/index.vue
+++ b/src/frontend/admin/src/views/sys/job/index.vue
@@ -93,10 +93,11 @@