From ae2d1c4932bf1229ea36d28d486beaee8de16d53 Mon Sep 17 00:00:00 2001 From: nsnail Date: Sat, 15 Jun 2024 21:41:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20=E6=A1=86=E6=9E=B6=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=90=8C=E6=AD=A5=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: tk --- assets/res/{Enums.ln => Fields.ln} | 0 build/prebuild.targets | 4 +- .../Attributes/IndicatorAttribute.cs | 14 ++ .../NetAdmin.Domain/Enums/Sys/JobStatues.cs | 4 + .../Extensions/ServiceCollectionExtensions.cs | 2 +- .../Configuration/Options/CaptchaOptions.cs | 3 +- .../NetAdmin.Infrastructure/Constant/Chars.cs | 134 +++++++++--------- .../Enums/Indicates.cs | 41 ++++++ .../Services/Sys/ConstantService.cs | 41 +++--- .../src/components/naColIndicator/index.vue | 23 +-- .../src/components/naIndicator/index.vue | 37 +++++ .../admin/src/components/scTable/index.vue | 73 +++++++--- src/frontend/admin/src/utils/request.js | 29 ++++ .../admin/src/views/sys/job/index.vue | 11 +- .../admin/src/views/sys/job/record/index.vue | 2 +- .../admin/src/views/sys/msg/index.vue | 2 +- .../admin/src/views/sys/role/index.vue | 2 +- 17 files changed, 285 insertions(+), 137 deletions(-) rename assets/res/{Enums.ln => Fields.ln} (100%) create mode 100644 src/backend/NetAdmin.Domain/Attributes/IndicatorAttribute.cs create mode 100644 src/backend/NetAdmin.Infrastructure/Enums/Indicates.cs create mode 100644 src/frontend/admin/src/components/naIndicator/index.vue 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 @@ \ 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 @@ + + \ 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 @@