From 76d07c0c336eafb918fba27450d63865baeb0642 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期一, 29 九月 2025 09:19:56 +0800 Subject: [PATCH] Merge branch 'master' into dev-1.1.2 --- src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue | 6 src/views/TraceIdLogManage/DbAuditLogs.vue | 230 ++++++ src/views/EnterpriseManage/components/ConfigureDialog.vue | 9 .eslintrc-auto-import.json | 4 src/services/api/typings.d.ts | 435 ++++++++++- src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue | 105 +- src/views/EnterpriseManage/components/WechatConfigureView.vue | 51 src/views/TraceIdLogManage/components/ResourceLogsView.vue | 106 +- src/views/TraceIdLogManage/components/JsonViewerDialog.vue | 31 src/constants/enterprise.ts | 15 src/views/System/SmsSettingManage.vue | 215 +++++ src/services/api/sms.ts | 42 + src/views/TraceIdLogManage/components/DbAuditLogsView.vue | 75 - src/views/TraceIdLogManage/components/ExceptionLogsView.vue | 27 src/services/api/index.ts | 2 src/views/TraceIdLogManage/ThreeResourceLogs.vue | 281 +++++++ src/views/TraceIdLogManage/ResourceLogs.vue | 281 +++++++ auto-imports.d.ts | 10 src/constants/apiEnum.ts | 64 + src/views/TraceIdLogManage/ExceptionLogs.vue | 185 +++++ src/services/api/logRecords.ts | 39 + 21 files changed, 1,906 insertions(+), 307 deletions(-) diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json index 292270a..0fb83b8 100644 --- a/.eslintrc-auto-import.json +++ b/.eslintrc-auto-import.json @@ -27,6 +27,7 @@ "EnumClientType": true, "EnumClientTypeText": true, "EnumCodeUrlScene": true, + "EnumConsoleLogAccess": true, "EnumContractTemplateStatus": true, "EnumContractTemplateStatusText": true, "EnumContractTemplateStatusTextForEnterpriseFilter": true, @@ -53,6 +54,7 @@ "EnumEnterpriseWalletSignStatusText": true, "EnumEnterpriseWalletTransactionType": true, "EnumGetEnterpriseEmployeesQuerySignContractStatus": true, + "EnumLogLevel": true, "EnumMenuType": true, "EnumMenuVisitLevel": true, "EnumOcrAccess": true, @@ -79,6 +81,8 @@ "EnumSettlementCycleText": true, "EnumSmsAccess": true, "EnumSmsAccessText": true, + "EnumSmsAccessTextUseInSms": true, + "EnumSmsStatus": true, "EnumTaskCheckReceiveStatus": true, "EnumTaskCheckReceiveStatusText": true, "EnumTaskRecommendStatus": true, diff --git a/auto-imports.d.ts b/auto-imports.d.ts index 4ee3e55..9d158b2 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -29,6 +29,7 @@ const EnumClientType: typeof import('./src/constants/apiEnum')['EnumClientType'] const EnumClientTypeText: typeof import('./src/constants/apiEnumText')['EnumClientTypeText'] const EnumCodeUrlScene: typeof import('./src/constants/apiEnum')['EnumCodeUrlScene'] + const EnumConsoleLogAccess: typeof import('./src/constants/apiEnum')['EnumConsoleLogAccess'] const EnumContractTemplateStatus: typeof import('./src/constants/apiEnum')['EnumContractTemplateStatus'] const EnumContractTemplateStatusText: typeof import('./src/constants/electronSign')['EnumContractTemplateStatusText'] const EnumContractTemplateStatusTextForEnterpriseFilter: typeof import('./src/constants/electronSign')['EnumContractTemplateStatusTextForEnterpriseFilter'] @@ -56,6 +57,7 @@ const EnumEnterpriseWalletTransactionStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionStatus'] const EnumEnterpriseWalletTransactionType: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionType'] const EnumGetEnterpriseEmployeesQuerySignContractStatus: typeof import('./src/constants/apiEnum')['EnumGetEnterpriseEmployeesQuerySignContractStatus'] + const EnumLogLevel: typeof import('./src/constants/apiEnum')['EnumLogLevel'] const EnumMenuType: typeof import('./src/constants/apiEnum')['EnumMenuType'] const EnumMenuVisitLevel: typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel'] const EnumOcrAccess: typeof import('./src/constants/apiEnum')['EnumOcrAccess'] @@ -83,6 +85,8 @@ const EnumSettlementCycleText: typeof import('./src/constants/task')['EnumSettlementCycleText'] const EnumSmsAccess: typeof import('./src/constants/apiEnum')['EnumSmsAccess'] const EnumSmsAccessText: typeof import('./src/constants/enterprise')['EnumSmsAccessText'] + const EnumSmsAccessTextUseInSms: typeof import('./src/constants/enterprise')['EnumSmsAccessTextUseInSms'] + const EnumSmsStatus: typeof import('./src/constants/apiEnum')['EnumSmsStatus'] const EnumTaskCheckReceiveStatus: typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus'] const EnumTaskCheckReceiveStatusText: typeof import('./src/constants/task')['EnumTaskCheckReceiveStatusText'] const EnumTaskRecommendStatus: typeof import('./src/constants/apiEnum')['EnumTaskRecommendStatus'] @@ -272,7 +276,7 @@ export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' import('vue') // @ts-ignore - export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum' + export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum' import('./src/constants/apiEnum') // @ts-ignore export type { FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum, FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum } from './src/constants/cPerson' @@ -340,6 +344,7 @@ readonly EnumClientType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumClientType']> readonly EnumClientTypeText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumClientTypeText']> readonly EnumCodeUrlScene: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumCodeUrlScene']> + readonly EnumConsoleLogAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumConsoleLogAccess']> readonly EnumContractTemplateStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumContractTemplateStatus']> readonly EnumContractTemplateStatusText: UnwrapRef<typeof import('./src/constants/electronSign')['EnumContractTemplateStatusText']> readonly EnumContractTemplateStatusTextForEnterpriseFilter: UnwrapRef<typeof import('./src/constants/electronSign')['EnumContractTemplateStatusTextForEnterpriseFilter']> @@ -366,6 +371,7 @@ readonly EnumEnterpriseWalletSignStatusText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumEnterpriseWalletSignStatusText']> readonly EnumEnterpriseWalletTransactionType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionType']> readonly EnumGetEnterpriseEmployeesQuerySignContractStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumGetEnterpriseEmployeesQuerySignContractStatus']> + readonly EnumLogLevel: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumLogLevel']> readonly EnumMenuType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuType']> readonly EnumMenuVisitLevel: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']> readonly EnumOcrAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumOcrAccess']> @@ -392,6 +398,8 @@ readonly EnumSettlementCycleText: UnwrapRef<typeof import('./src/constants/task')['EnumSettlementCycleText']> readonly EnumSmsAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsAccess']> readonly EnumSmsAccessText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumSmsAccessText']> + readonly EnumSmsAccessTextUseInSms: UnwrapRef<typeof import('./src/constants/enterprise')['EnumSmsAccessTextUseInSms']> + readonly EnumSmsStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsStatus']> readonly EnumTaskCheckReceiveStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus']> readonly EnumTaskCheckReceiveStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskCheckReceiveStatusText']> readonly EnumTaskRecommendStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskRecommendStatus']> diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts index 5e7d264..e869b1b 100644 --- a/src/constants/apiEnum.ts +++ b/src/constants/apiEnum.ts @@ -31,6 +31,14 @@ ElectronSignUrl = 10, } +/** 鎺у埗鍙版棩蹇楅�氶亾 */ +export enum EnumConsoleLogAccess { + /**鍚庣 */ + Back = 10, + /**鍓嶇 */ + Front = 20, +} + /** 鍚堝悓鍒剁増鐘舵�� */ export enum EnumContractTemplateStatus { /**寰呭埗鐗� */ @@ -199,6 +207,22 @@ Pass = 30, } +/** 鏃ュ織绾у埆 */ +export enum EnumLogLevel { + /**璺熻釜 */ + Trace = 10, + /**璋冭瘯 */ + Debug = 20, + /**淇℃伅 */ + Information = 30, + /**璀﹀憡 */ + Warning = 40, + /**閿欒 */ + Error = 50, + /**涓ラ噸 */ + Critical = 60, +} + /** 鑿滃崟绫诲瀷 */ export enum EnumMenuType { /**鑿滃崟 */ @@ -321,28 +345,30 @@ CommonServerLogRecords = 7, /**鍚屾鏁版嵁搴� */ CommonServerSyncDatabase = 8, + /**鐭俊宸ュ叿 */ + CommonServerSmsUtils = 9, /**鐢ㄦ埛璁よ瘉 */ - UserServerAuth = 9, + UserServerAuth = 10, /**鐢ㄦ埛鑿滃崟 */ - UserServerMenu = 10, + UserServerMenu = 11, /**鐢ㄦ埛璧勬簮 */ - UserServerResource = 11, + UserServerResource = 12, /**鐢ㄦ埛瑙掕壊 */ - UserServerRole = 12, + UserServerRole = 13, /**鐢ㄦ埛淇℃伅 */ - UserServerUser = 13, + UserServerUser = 14, /**鐢靛瓙绛� */ - UserServerElectronSign = 14, + UserServerElectronSign = 15, /**鐢ㄦ埛绠�鍘� */ - UserServerUserResume = 15, + UserServerUserResume = 16, /**浼佷笟淇℃伅 */ - UserServerEnterprise = 16, + UserServerEnterprise = 17, /**浼佷笟閽卞寘 */ - UserServerEnterpriseWallet = 17, + UserServerEnterpriseWallet = 18, /**鐏靛伐淇℃伅 */ - UserServerEnterpriseEmployee = 18, + UserServerEnterpriseEmployee = 19, /**鐢靛瓙绛� */ - ElectronSignServerElectronSign = 19, + ElectronSignServerElectronSign = 20, } /** 璧勬簮璇锋眰鏂瑰紡 */ @@ -387,8 +413,24 @@ /** 鐭俊閫氶亾 */ export enum EnumSmsAccess { + /**鏃� */ + None = 0, /**闃块噷浜戠煭淇� */ AliyunSms = 10, + /**璇氱珛涓� */ + ChengLiYe = 20, +} + +/** 鐭俊鐘舵�� */ +export enum EnumSmsStatus { + /**寰呭彂閫� */ + Wait = 0, + /**鍙戦�佷腑 */ + InProcess = 10, + /**鍙戦�佹垚鍔� */ + Success = 20, + /**鍙戦�佸け璐� */ + Fail = 30, } /** 浠诲姟缁撶畻鐘舵�� */ diff --git a/src/constants/enterprise.ts b/src/constants/enterprise.ts index efc3d0b..be49de0 100644 --- a/src/constants/enterprise.ts +++ b/src/constants/enterprise.ts @@ -20,10 +20,10 @@ * 鐭俊閫氶亾閰嶇疆 */ ShortMessage = 4, - // /** - // * 寰俊鏀粯閰嶇疆 - // */ - // Wechat = 5, + /** + * 寰俊鏀粯閰嶇疆 + */ + Wechat = 5, } export const EnterpriseConfigureTypeText = { @@ -31,7 +31,7 @@ [EnterpriseConfigureType.AliPay]: '鏀粯瀹濋厤缃�', [EnterpriseConfigureType.Electronic]: '鐢靛瓙绛鹃厤缃�', [EnterpriseConfigureType.ShortMessage]: '鐭俊閫氶亾閰嶇疆', - // [EnterpriseConfigureType.Wechat]: '寰俊鏀粯閰嶇疆', + [EnterpriseConfigureType.Wechat]: '寰俊鏀粯閰嶇疆', }; export enum VerifyStatus { @@ -74,6 +74,11 @@ [EnumSmsAccess.AliyunSms]: '闃块噷浜�', }; +export const EnumSmsAccessTextUseInSms = { + [EnumSmsAccess.AliyunSms]: '闃块噷浜�', + [EnumSmsAccess.ChengLiYe]: '璇氱珛涓�', +}; + export const EnumRealAccessText = { [EnumRealAccess.BestSign]: '涓婁笂绛�', [EnumRealAccess.AlipaySign]: '鏀粯瀹濅俊浠荤', diff --git a/src/services/api/index.ts b/src/services/api/index.ts index 99078ea..c27a0d6 100644 --- a/src/services/api/index.ts +++ b/src/services/api/index.ts @@ -5,6 +5,7 @@ import * as enterpriseEmployee from './enterpriseEmployee'; import * as user from './user'; import * as role from './role'; +import * as sms from './sms'; import * as ocrUtils from './ocrUtils'; import * as task from './task'; import * as enterprise from './enterprise'; @@ -25,6 +26,7 @@ enterpriseEmployee, user, role, + sms, ocrUtils, task, enterprise, diff --git a/src/services/api/logRecords.ts b/src/services/api/logRecords.ts index 0cb3919..4780141 100644 --- a/src/services/api/logRecords.ts +++ b/src/services/api/logRecords.ts @@ -2,6 +2,18 @@ // @ts-ignore import { request } from '@/utils/request'; +/** 鎺у埗鍙版棩蹇楀垎椤靛垪琛ㄦ煡璇� POST /api/common/logRecords/getConsoleLogs */ +export async function getConsoleLogs(body: API.GetConsoleLogsQuery, options?: API.RequestConfig) { + return request<API.GetConsoleLogsQueryResult>('/api/common/logRecords/getConsoleLogs', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 鏌ヨ鏁版嵁搴撳璁℃棩蹇楀垎椤靛垪琛� POST /api/common/logRecords/getDbAuditLogs */ export async function getDbAuditLogs(body: API.GetDbAuditLogsQuery, options?: API.RequestConfig) { return request<API.GetDbAuditLogsQueryResult>('/api/common/logRecords/getDbAuditLogs', { @@ -32,6 +44,18 @@ /** 璧勬簮鏃ュ織鍒嗛〉鍒楄〃鏌ヨ POST /api/common/logRecords/getResourceLogs */ export async function getResourceLogs(body: API.GetResourceLogsQuery, options?: API.RequestConfig) { return request<API.GetResourceLogsQueryResult>('/api/common/logRecords/getResourceLogs', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** 鏌ヨ鐭俊鏃ュ織 POST /api/common/logRecords/getSmsLogs */ +export async function getSmsLogs(body: API.GetSmsLogsQuery, options?: API.RequestConfig) { + return request<API.GetSmsLogsQueryResult>('/api/common/logRecords/getSmsLogs', { method: 'POST', headers: { 'Content-Type': 'application/json-patch+json', @@ -85,3 +109,18 @@ ...(options || {}), }); } + +/** 淇濆瓨鍓嶇鏃ュ織 POST /api/common/logRecords/saveFrontConsoleLog */ +export async function saveFrontConsoleLog( + body: API.SaveFrontConsoleLogCommand, + options?: API.RequestConfig +) { + return request<string>('/api/common/logRecords/saveFrontConsoleLog', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/src/services/api/sms.ts b/src/services/api/sms.ts new file mode 100644 index 0000000..5a65279 --- /dev/null +++ b/src/services/api/sms.ts @@ -0,0 +1,42 @@ +/* eslint-disable */ +// @ts-ignore +import { request } from '@/utils/request'; + +/** 鏌ヨ鐭俊閰嶇疆 POST /api/common/sms/getSmsSetting */ +export async function getSmsSetting(body: API.GetSmsSettingQuery, options?: API.RequestConfig) { + return request<API.GetSmsSettingQueryResult>('/api/common/sms/getSmsSetting', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** 淇濆瓨鐭俊閰嶇疆 POST /api/common/sms/saveSmsSetting */ +export async function saveSmsSetting(body: API.SaveSmsSettingCommand, options?: API.RequestConfig) { + return request<string>('/api/common/sms/saveSmsSetting', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** 璇氱珛涓氱煭淇″钩鍙板洖浼犻�氱煡 POST /api/common/sms/smsChengLiYeNotify */ +export async function smsChengLiYeNotify( + body: API.SmsChengLiYeNotifyCommand, + options?: API.RequestConfig +) { + return request<boolean>('/api/common/sms/smsChengLiYeNotify', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts index 5623a46..80e7e2c 100644 --- a/src/services/api/typings.d.ts +++ b/src/services/api/typings.d.ts @@ -563,6 +563,13 @@ ElectronSignUrl = 10, } + enum EnumConsoleLogAccess { + /**鍚庣 */ + Back = 10, + /**鍓嶇 */ + Front = 20, + } + enum EnumContractTemplateStatus { /**寰呭埗鐗� */ Wait = 10, @@ -714,6 +721,21 @@ Pass = 30, } + enum EnumLogLevel { + /**璺熻釜 */ + Trace = 10, + /**璋冭瘯 */ + Debug = 20, + /**淇℃伅 */ + Information = 30, + /**璀﹀憡 */ + Warning = 40, + /**閿欒 */ + Error = 50, + /**涓ラ噸 */ + Critical = 60, + } + enum EnumMenuType { /**鑿滃崟 */ Menu = 10, @@ -825,28 +847,30 @@ CommonServerLogRecords = 7, /**鍚屾鏁版嵁搴� */ CommonServerSyncDatabase = 8, + /**鐭俊宸ュ叿 */ + CommonServerSmsUtils = 9, /**鐢ㄦ埛璁よ瘉 */ - UserServerAuth = 9, + UserServerAuth = 10, /**鐢ㄦ埛鑿滃崟 */ - UserServerMenu = 10, + UserServerMenu = 11, /**鐢ㄦ埛璧勬簮 */ - UserServerResource = 11, + UserServerResource = 12, /**鐢ㄦ埛瑙掕壊 */ - UserServerRole = 12, + UserServerRole = 13, /**鐢ㄦ埛淇℃伅 */ - UserServerUser = 13, + UserServerUser = 14, /**鐢靛瓙绛� */ - UserServerElectronSign = 14, + UserServerElectronSign = 15, /**鐢ㄦ埛绠�鍘� */ - UserServerUserResume = 15, + UserServerUserResume = 16, /**浼佷笟淇℃伅 */ - UserServerEnterprise = 16, + UserServerEnterprise = 17, /**浼佷笟閽卞寘 */ - UserServerEnterpriseWallet = 17, + UserServerEnterpriseWallet = 18, /**鐏靛伐淇℃伅 */ - UserServerEnterpriseEmployee = 18, + UserServerEnterpriseEmployee = 19, /**鐢靛瓙绛� */ - ElectronSignServerElectronSign = 19, + ElectronSignServerElectronSign = 20, } enum EnumResourceMethod { @@ -887,8 +911,23 @@ } enum EnumSmsAccess { + /**鏃� */ + None = 0, /**闃块噷浜戠煭淇� */ AliyunSms = 10, + /**璇氱珛涓� */ + ChengLiYe = 20, + } + + enum EnumSmsStatus { + /**寰呭彂閫� */ + Wait = 0, + /**鍙戦�佷腑 */ + InProcess = 10, + /**鍙戦�佹垚鍔� */ + Success = 20, + /**鍙戦�佸け璐� */ + Fail = 30, } enum EnumTaskCheckReceiveStatus { @@ -1223,6 +1262,24 @@ /** 閿欒鐮� */ errorCode?: string; data?: GetCodeUrlQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetConsoleLogsQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetConsoleLogsQueryResult; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -1889,6 +1946,42 @@ /** 閿欒鐮� */ errorCode?: string; data?: GetSettlementTaskUsersQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetSmsLogsQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetSmsLogsQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetSmsSettingQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetSmsSettingQueryResult; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -2999,6 +3092,58 @@ paramValue5?: string; } + interface GetConsoleLogsQuery { + access?: EnumConsoleLogAccess; + level?: EnumLogLevel; + /** 鍒涘缓鏃堕棿-璧峰 */ + createdTimeBegin?: string; + /** 鍒涘缓鏃堕棿-鎴 */ + createdTimeEnd?: string; + /** 鎿嶄綔浜� */ + createdUser?: string; + /** 璺熻釜Id */ + traceId?: string; + /** 鍐呭 */ + content?: string; + /** 閾炬帴鍦板潃 */ + url?: string; + /** 浼犲弬 */ + request?: string; + /** 鎵╁睍 */ + ext?: string; + pageModel?: PagedListQueryPageModel; + } + + interface GetConsoleLogsQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetConsoleLogsQueryResultItem[]; + } + + interface GetConsoleLogsQueryResultItem { + /** Id */ + id?: string; + /** 璺熻釜Id */ + traceId?: string; + access?: EnumConsoleLogAccess; + level?: EnumLogLevel; + /** 鍐呭 */ + content: string; + /** 鍫嗘爤璺熻釜 */ + stackTrace?: string; + /** 閾炬帴鍦板潃 */ + url?: string; + /** 浼犲弬 */ + request?: string; + /** 鎵╁睍 */ + ext?: string; + /** 瀹㈡埛IP鍦板潃 */ + clientIpAddress?: string; + createdUser?: GetLogsQueryResultItemCreatedUser; + /** 鍒涘缓鏃堕棿 */ + createdTime?: string; + } + interface GetContractTemplateEnterprisesQuery { /** 鍏抽敭瀛� */ keywords?: string; @@ -3074,14 +3219,23 @@ type GetCurrentLogierMenusQuery = Record<string, any>; interface GetDbAuditLogsQuery { - /** 璺熻釜Id */ - traceId?: string; - /** 鍏抽敭瀛� */ - keywords?: string; /** 鍒涘缓鏃堕棿-璧峰 */ createdTimeBegin?: string; /** 鍒涘缓鏃堕棿-鎴 */ createdTimeEnd?: string; + /** 鎿嶄綔浜� */ + createdUser?: string; + /** 璺熻釜Id */ + traceId?: string; + /** 琛ㄥ悕 */ + tableName?: string; + /** 涓婚敭 */ + primaryKey?: string; + operate?: EnumDbAuditOperate; + /** 鏃у�� */ + oldValues?: string; + /** 鏂板�� */ + newValues?: string; pageModel?: PagedListQueryPageModel; } @@ -3092,6 +3246,10 @@ } interface GetDbAuditLogsQueryResultItem { + /** Id */ + id?: string; + /** 璺熻釜Id */ + traceId?: string; /** 琛ㄥ悕 */ tableName?: string; /** 涓婚敭 */ @@ -3101,7 +3259,7 @@ oldValues?: string; /** 鏂板�� */ newValues?: string; - createdUser?: GetResourceLogsQueryResultItemCreatedUser; + createdUser?: GetLogsQueryResultItemCreatedUser; /** 鍒涘缓鏃堕棿 */ createdTime?: string; } @@ -3624,14 +3782,20 @@ } interface GetExceptionLogsQuery { - /** 璺熻釜Id */ - traceId?: string; - /** 鍏抽敭瀛� */ - keywords?: string; /** 鍒涘缓鏃堕棿-璧峰 */ createdTimeBegin?: string; /** 鍒涘缓鏃堕棿-鎴 */ createdTimeEnd?: string; + /** 鎿嶄綔浜� */ + createdUser?: string; + /** 璺熻釜Id */ + traceId?: string; + /** 绫诲瀷 */ + type?: string; + /** 浠g爜 */ + code?: string; + /** 娑堟伅 */ + message?: string; pageModel?: PagedListQueryPageModel; } @@ -3642,6 +3806,10 @@ } interface GetExceptionLogsQueryResultItem { + /** Id */ + id?: string; + /** 璺熻釜Id */ + traceId?: string; /** 绫诲瀷 */ type?: string; /** 浠g爜 */ @@ -3650,7 +3818,7 @@ message?: string; /** 鍫嗘爤璺熻釜 */ stackTrace?: string; - createdUser?: GetResourceLogsQueryResultItemCreatedUser; + createdUser?: GetLogsQueryResultItemCreatedUser; /** 鍒涘缓鏃堕棿 */ createdTime?: string; } @@ -3701,6 +3869,20 @@ /** 鍦板潃 */ url?: string; model?: BaiduOcrBusinessLicenseResultModel; + } + + interface GetLogsQueryResultItemCreatedUser { + /** Id */ + id?: string; + type?: EnumUserType; + /** 濮撳悕 */ + name?: string; + /** 鐢ㄦ埛鍚� */ + userName?: string; + /** 浼佷笟Id */ + enterpriseId?: string; + /** 浼佷笟鍏ㄧО */ + enterpriseName?: string; } interface GetMenuQueryResult { @@ -4366,14 +4548,29 @@ } interface GetResourceLogsQuery { - /** 璺熻釜Id */ - traceId?: string; - /** 鍏抽敭瀛� */ - keywords?: string; /** 鍒涘缓鏃堕棿-璧峰 */ createdTimeBegin?: string; /** 鍒涘缓鏃堕棿-鎴 */ createdTimeEnd?: string; + /** 鎿嶄綔浜� */ + createdUser?: string; + /** 璺熻釜Id */ + traceId?: string; + method?: EnumResourceMethod; + /** 鍩熷悕 */ + domain?: string; + /** 鍦板潃 */ + path?: string; + /** 璇锋眰鍙傛暟 */ + request?: string; + /** 鍝嶅簲缁撴灉 */ + response?: string; + /** 鏄惁鎴愬姛 */ + isSuccess?: boolean; + /** 瀹㈡埛绔疘P鍦板潃 */ + clientIpAddress?: string; + /** 鏈�灏忚�楁椂姣鏁� */ + elapsedMillisecondsMin?: number; pageModel?: PagedListQueryPageModel; } @@ -4386,6 +4583,8 @@ interface GetResourceLogsQueryResultItem { /** Id */ id?: string; + /** 璺熻釜Id */ + traceId?: string; method?: EnumResourceMethod; /** 鍩熷悕 */ domain?: string; @@ -4409,23 +4608,9 @@ consoleLogs?: string; /** 鑰楁椂姣鏁� */ elapsedMilliseconds?: number; - createdUser?: GetResourceLogsQueryResultItemCreatedUser; + createdUser?: GetLogsQueryResultItemCreatedUser; /** 鍒涘缓鏃堕棿 */ createdTime?: string; - } - - interface GetResourceLogsQueryResultItemCreatedUser { - /** Id */ - id?: string; - type?: EnumUserType; - /** 濮撳悕 */ - name?: string; - /** 鐢ㄦ埛鍚� */ - userName?: string; - /** 浼佷笟Id */ - enterpriseId?: string; - /** 浼佷笟鍏ㄧО */ - enterpriseName?: string; } interface GetResourcesQueryResultItem { @@ -4644,6 +4829,89 @@ createdTime?: string; /** 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴 */ ereceiptDownloadOssUrl?: string; + } + + interface GetSmsLogsQuery { + /** 鍒涘缓鏃堕棿-璧峰 */ + createdTimeBegin?: string; + /** 鍒涘缓鏃堕棿-鎴 */ + createdTimeEnd?: string; + /** 鎿嶄綔浜� */ + createdUser?: string; + /** 璺熻釜Id */ + traceId?: string; + access?: EnumSmsAccess; + /** 鎵嬫満鍙风爜 */ + phoneNumber?: string; + /** 妯℃澘浠g爜 */ + templateCode?: string; + /** 妯℃澘鍙傛暟 */ + templateParam?: string; + /** 鏄惁浣跨敤 */ + isUsed?: boolean; + status?: EnumSmsStatus; + pageModel?: PagedListQueryPageModel; + } + + interface GetSmsLogsQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetSmsLogsQueryResultItem[]; + } + + interface GetSmsLogsQueryResultItem { + /** Id */ + id?: string; + /** 璺熻釜Id */ + traceId?: string; + access?: EnumSmsAccess; + /** 鎵嬫満鍙风爜 */ + phoneNumber?: string; + /** 妯℃澘浠g爜 */ + templateCode?: string; + /** 妯℃澘鍙傛暟 */ + templateParam?: string; + /** 鏈夋晥鏈� */ + expiry?: string; + /** 鏄惁浣跨敤 */ + isUsed?: boolean; + status?: EnumSmsStatus; + /** 璇锋眰Id */ + requestId?: string; + /** 鍥炰紶浠g爜 */ + code?: string; + /** 鍥炰紶娑堟伅 */ + message?: string; + /** 鎿嶄綔浜篒d */ + createdUserId?: string; + createdUser?: GetLogsQueryResultItemCreatedUser; + /** 鍒涘缓鏃堕棿 */ + createdTime?: string; + } + + type GetSmsSettingQuery = Record<string, any>; + + interface GetSmsSettingQueryResult { + /** 鏄惁绂佺敤 */ + isDisabled?: boolean; + /** 甯﹀嚭鍙傛暟 */ + withoutParams?: boolean; + /** 姣忓垎閽熸渶澶ф暟閲� */ + minutelyMaxCount?: number; + /** 姣忓皬鏃舵渶澶ф暟閲� */ + hourlyMaxCount?: number; + /** 姣忓ぉ鏈�澶ф暟閲� */ + dailyMaxCount?: number; + /** 閫氶亾閰嶇疆 */ + accesses?: GetSmsSettingQueryResultAccess[]; + } + + interface GetSmsSettingQueryResultAccess { + access?: EnumSmsAccess; + /** 鏄惁绂佺敤 */ + isDisabled?: boolean; + /** 鎺掑簭 */ + sort?: number; } interface GetTaskEnterpriseQueryResult { @@ -4929,14 +5197,29 @@ } interface GetThreeResourceLogsQuery { - /** 璺熻釜Id */ - traceId?: string; - /** 鍏抽敭瀛� */ - keywords?: string; /** 鍒涘缓鏃堕棿-璧峰 */ createdTimeBegin?: string; /** 鍒涘缓鏃堕棿-鎴 */ createdTimeEnd?: string; + /** 鎿嶄綔浜� */ + createdUser?: string; + /** 璺熻釜Id */ + traceId?: string; + method?: EnumResourceMethod; + /** 鍩熷悕 */ + domain?: string; + /** 鍦板潃 */ + path?: string; + /** 璇锋眰鍙傛暟 */ + request?: string; + /** 鍝嶅簲缁撴灉 */ + response?: string; + /** 鏄惁鎴愬姛 */ + isSuccess?: boolean; + /** 瀹㈡埛绔疘P鍦板潃 */ + clientIpAddress?: string; + /** 鏈�灏忚�楁椂姣鏁� */ + elapsedMillisecondsMin?: number; pageModel?: PagedListQueryPageModel; } @@ -4949,6 +5232,8 @@ interface GetThreeResourceLogsQueryResultItem { /** Id */ id?: string; + /** 璺熻釜Id */ + traceId?: string; method?: EnumResourceMethod; /** 鍩熷悕 */ domain?: string; @@ -4966,23 +5251,9 @@ isSuccess?: boolean; /** 鑰楁椂姣鏁� */ elapsedMilliseconds?: number; - createdUser?: GetThreeResourceLogsQueryResultItemCreatedUser; + createdUser?: GetLogsQueryResultItemCreatedUser; /** 鍒涘缓鏃堕棿 */ createdTime?: string; - } - - interface GetThreeResourceLogsQueryResultItemCreatedUser { - /** Id */ - id?: string; - type?: EnumUserType; - /** 濮撳悕 */ - name?: string; - /** 鐢ㄦ埛鍚� */ - userName?: string; - /** 浼佷笟Id */ - enterpriseId?: string; - /** 浼佷笟鍏ㄧО */ - enterpriseName?: string; } interface GetTraceIdLogQueryResult { @@ -4994,6 +5265,8 @@ exceptionLogs?: GetExceptionLogsQueryResultItem[]; /** 鏁版嵁搴撳璁℃棩蹇� */ dbAuditLogs?: GetDbAuditLogsQueryResultItem[]; + /** 鎺у埗鍙版棩蹇� */ + consoleLogs?: GetConsoleLogsQueryResultItem[]; } interface GetUserInfoRolesQueryResultItem { @@ -5466,6 +5739,7 @@ } interface PersonalUserElectronSignCommandResult { + userSignContractStatus?: EnumTaskUserSignContractStatus; /** 绛剧讲鍚堝悓鐭摼鎺� */ signContractShortUrl?: string; /** 绛剧讲鍚堝悓闀块摼鎺� */ @@ -5495,6 +5769,8 @@ isReal?: boolean; realMethod?: EnumUserRealMethod; realStatus?: EnumPersonalUserRealStatus; + /** 鏄惁缁戝畾閾惰鍗� */ + isBindBankCard?: boolean; /** 浜鸿劯璇嗗埆鍦板潃 */ faceUrl?: string; } @@ -5691,6 +5967,22 @@ status?: EnumEnterpriseCostStatus; } + interface SaveFrontConsoleLogCommand { + /** 璺熻釜Id */ + traceId?: string; + level?: EnumLogLevel; + /** 鍐呭 */ + content: string; + /** 鍫嗘爤璺熻釜 */ + stackTrace?: string; + /** 閾炬帴鍦板潃 */ + url?: string; + /** 浼犲弬 */ + request?: string; + /** 鎵╁睍 */ + ext?: string; + } + interface SaveMenuButtonCommand { /** 鑿滃崟Id */ parentId?: string; @@ -5848,6 +6140,29 @@ menuIds?: string[]; /** 璧勬簮 */ resources?: GetRoleQueryResultResource[]; + } + + interface SaveSmsSettingCommand { + /** 鏄惁绂佺敤 */ + isDisabled?: boolean; + /** 甯﹀嚭鍙傛暟 */ + withoutParams?: boolean; + /** 姣忓垎閽熸渶澶ф暟閲� */ + minutelyMaxCount?: number; + /** 姣忓皬鏃舵渶澶ф暟閲� */ + hourlyMaxCount?: number; + /** 姣忓ぉ鏈�澶ф暟閲� */ + dailyMaxCount?: number; + /** 閫氶亾閰嶇疆 */ + accesses?: SaveSmsSettingCommandAccess[]; + } + + interface SaveSmsSettingCommandAccess { + access?: EnumSmsAccess; + /** 鏄惁绂佺敤 */ + isDisabled?: boolean; + /** 鎺掑簭 */ + sort?: number; } interface SaveTaskInfoCommand { @@ -6113,6 +6428,8 @@ status?: EnumUserStatus; } + type SmsChengLiYeNotifyCommand = Record<string, any>; + interface SmsLoginCommand { /** 鎵嬫満鍙风爜 */ phoneNumber?: string; diff --git a/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue b/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue index b5d4e92..d69605a 100644 --- a/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue +++ b/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue @@ -68,7 +68,7 @@ </ProFormItemV2> </ProFormColItem> <ProFormColItem :span="8"> - <ProFormItemV2 label="鎵�灞炶涓�:" prop="industryTypeId"> + <ProFormItemV2 label="鎵�灞炶涓�:" prop="industryTypeCode"> <ProFormSelect v-model="form.industryTypeCode" placeholder="璇烽�夋嫨鎵�灞炶涓�" @@ -248,8 +248,6 @@ password: '', }); -console.log('form: ', form); - const { isLoading } = useQuery({ queryKey: ['enterpriseServices/getEnterprise', id], queryFn: async () => { @@ -266,7 +264,7 @@ form.legalPerson = data.legalPerson; form.legalIdentity = data.legalIdentity; form.societyCreditCode = data.societyCreditCode; - form.industryTypeCode = data.industryTypeCode; + form.industryTypeCode = data.industryTypeCode ?? ''; form.mainBusiness = data.mainBusiness; form.contacts = data.contacts; form.contactPhoneNumber = data.contactPhoneNumber; diff --git a/src/views/EnterpriseManage/components/ConfigureDialog.vue b/src/views/EnterpriseManage/components/ConfigureDialog.vue index ad4c081..ae35d49 100644 --- a/src/views/EnterpriseManage/components/ConfigureDialog.vue +++ b/src/views/EnterpriseManage/components/ConfigureDialog.vue @@ -13,9 +13,9 @@ <el-tab-pane lazy :name="EnterpriseConfigureType.AliPay"> <AliPayConfigureView :id="form.id" ref="aliPayConfigureViewRef" /> </el-tab-pane> - <!-- <el-tab-pane lazy :name="EnterpriseConfigureType.Wechat"> + <el-tab-pane lazy :name="EnterpriseConfigureType.Wechat"> <WechatConfigureView :id="form.id" ref="wechatConfigureViewRef" /> - </el-tab-pane> --> + </el-tab-pane> <el-tab-pane lazy :name="EnterpriseConfigureType.Electronic"> <ElectronicConfigureView :id="form.id" ref="electronicConfigureViewRef" /> </el-tab-pane> @@ -87,10 +87,9 @@ res = await electronicConfigureViewRef.value?.onConfirm?.(); } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.ShortMessage) { res = await shortMessageConfigureViewRef.value?.onConfirm?.(); + } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.Wechat) { + res = await wechatConfigureViewRef.value?.onConfirm?.(); } - // else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.Wechat) { - // res = await wechatConfigureViewRef.value?.onConfirm?.(); - // } if (res) { emit('onConfirm'); } diff --git a/src/views/EnterpriseManage/components/WechatConfigureView.vue b/src/views/EnterpriseManage/components/WechatConfigureView.vue index 24c7f4d..92ed870 100644 --- a/src/views/EnterpriseManage/components/WechatConfigureView.vue +++ b/src/views/EnterpriseManage/components/WechatConfigureView.vue @@ -1,6 +1,6 @@ <template> <LoadingLayout :loading="isLoading"> - <ProForm :model="form" ref="dialogForm" label-width="120px"> + <ProForm :model="form" ref="dialogForm" label-width="130px"> <ProFormItemV2 label="鑱旂郴浜哄鍚�:" prop="name" @@ -14,6 +14,23 @@ :checkRules="[{ message: '璇烽�夋嫨鑱旂郴浜虹被鍨�' }]" > <ProFormRadio v-model.trim="form.name" :value-enum="[]" button-style /> + </ProFormItemV2> + <ProFormItemV2 + label="涓氬姟鍔炵悊鎺堟潈鍑�:" + prop="url" + :check-rules="[{ type: 'upload', message: '璇蜂笂浼犱笟鍔″姙鐞嗘巿鏉冨嚱' }]" + > + <div style="display: flex"> + <ProFormUpload + v-model:file-url="form.url" + :limit="1" + :limitFileSize="10" + accept="png,jpg,jpeg,pdf" + ></ProFormUpload> + <el-button style="margin-left: 10px" type="primary" link @click="downloadTemplate" + >妯℃澘涓嬭浇</el-button + > + </div> </ProFormItemV2> <ProFormItemV2 label="鎵嬫満鍙�:" @@ -33,12 +50,13 @@ <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="璇烽�夋嫨涓讳綋绫诲瀷"> </ProFormSelect> </ProFormItemV2> - <ProFormItemV2 - label="鍟嗘埛绠�绉�:" - prop="name" - :checkRules="[{ type: 'phone', message: '璇疯緭鍏ュ晢鎴风畝绉�' }]" - > - <ProFormText :maxlength="64" v-model.trim="form.name" placeholder="璇疯緭鍏ュ晢鎴风畝绉�" /> + <ProFormItemV2 label="鍟嗘埛绠�绉�:" prop="name" :checkRules="[{ message: '璇疯緭鍏ュ晢鎴风畝绉�' }]"> + <ProFormText + :maxlength="64" + show-word-limit + v-model.trim="form.name" + placeholder="璇疯緭鍏ュ晢鎴风畝绉�" + /> </ProFormItemV2> <ProFormItemV2 label="瀹㈡湇鐢佃瘽:" @@ -79,17 +97,13 @@ <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="璇烽�夋嫨缁撶畻璐︽埛"> </ProFormSelect> </ProFormItemV2> - <ProFormItemV2 - label="寮�鎴烽摱琛�:" - prop="name" - :checkRules="[{ type: 'phone', message: '璇疯緭鍏ュ紑鎴烽摱琛�' }]" - > - <ProFormText :maxlength="64" v-model.trim="form.name" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" /> + <ProFormItemV2 label="寮�鎴烽摱琛�:" prop="name" :checkRules="[{ message: '璇疯緭鍏ュ紑鎴烽摱琛�' }]"> + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" /> </ProFormItemV2> <ProFormItemV2 label="閾惰璐﹀彿:" prop="name" - :checkRules="[{ type: 'tel', message: '璇疯緭鍏ラ摱琛岃处鍙�' }]" + :checkRules="[{ message: '璇疯緭鍏ラ摱琛岃处鍙�', type: 'bankCard' }]" > <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ラ摱琛岃处鍙�" /> </ProFormItemV2> @@ -112,7 +126,7 @@ } from '@bole-core/components'; import * as enterpriseWalletServices from '@/services/api/enterpriseWallet'; import { useQuery } from '@tanstack/vue-query'; -import { convertWalletApiToFiles, convertWalletFilesToApi } from '@/utils'; +import { convertWalletApiToFiles, convertWalletFilesToApi, downloadFileByUrl } from '@/utils'; defineOptions({ name: 'WechatConfigureView', @@ -167,6 +181,13 @@ } catch (error) {} } +function downloadTemplate() { + downloadFileByUrl( + 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E4%B8%9A%E5%8A%A1%E5%8A%9E%E7%90%86%E6%8E%88%E6%9D%83%E5%87%BD.png', + '涓氬姟鍔炵悊鎺堟潈鍑�' + ); +} + defineExpose({ onConfirm: enterpriseWalletExpandindirectCreate, }); diff --git a/src/views/System/SmsSettingManage.vue b/src/views/System/SmsSettingManage.vue new file mode 100644 index 0000000..08b5b50 --- /dev/null +++ b/src/views/System/SmsSettingManage.vue @@ -0,0 +1,215 @@ +<template> + <LoadingLayout :loading="isLoading"> + <AppContainer> + <PageFormLayout> + <ProForm :model="form" ref="formRef" label-width="120px" :is-read="isRead"> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="鏄惁绂佺敤:" prop="isDisabled"> + <ProFormRadio + v-model="form.isDisabled" + :value-enum="BooleanOptions" + :button-style="false" + ></ProFormRadio> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="甯﹀嚭鍙傛暟:" prop="withoutParams"> + <ProFormRadio + v-model="form.withoutParams" + :value-enum="BooleanOptions" + :button-style="false" + ></ProFormRadio> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="姣忓垎閽熸渶澶ф暟閲�:" prop="minutelyMaxCount"> + <ProFormInputNumber + :controls="false" + :min="0" + v-model="form.minutelyMaxCount" + placeholder="璇疯緭鍏�" + ></ProFormInputNumber> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="姣忓皬鏃舵渶澶ф暟閲�:" prop="hourlyMaxCount"> + <ProFormInputNumber + :controls="false" + :min="0" + v-model="form.hourlyMaxCount" + placeholder="璇疯緭鍏�" + ></ProFormInputNumber> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="姣忓ぉ鏈�澶ф暟閲�:" prop="dailyMaxCount"> + <ProFormInputNumber + :controls="false" + :min="0" + v-model="form.dailyMaxCount" + placeholder="璇疯緭鍏�" + ></ProFormInputNumber> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="閫氶亾閰嶇疆:" prop="accesses"> + <div class="access-list"> + <div class="access-item" v-for="(item, index) in form.accesses" :key="index"> + <div class="access-item-label"> + {{ EnumSmsAccessTextUseInSms[item.access] }} + </div> + <ProFormRadio + v-model="item.isDisabled" + :value-enum="BooleanOptions" + :button-style="false" + ></ProFormRadio> + <ProFormInputNumber + :controls="false" + :min="0" + v-model="item.sort" + placeholder="璇疯緭鍏�" + ></ProFormInputNumber> + </div> + </div> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + </ProForm> + <template #footer> + <el-button type="primary" v-if="isRead" @click="isRead = false">缂栬緫</el-button> + <el-button type="primary" v-else @click="handleConfirm">纭</el-button> + </template> + </PageFormLayout> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + LoadingLayout, + AppContainer, + PageFormLayout, + ProForm, + ProFormCol, + ProFormColItem, + ProFormItemV2, + ProFormInputNumber, + ProFormRadio, +} from '@bole-core/components'; +import { useQuery } from '@tanstack/vue-query'; +import * as smsServices from '@/services/api/sms'; +import { BooleanOptions, EnumSmsAccessTextUseInSms } from '@/constants'; +import { FormInstance } from 'element-plus'; +import { Message } from '@bole-core/core'; + +defineOptions({ + name: 'SmsSettingManage', +}); + +const form = reactive({ + isDisabled: false, + withoutParams: false, + minutelyMaxCount: 0, + hourlyMaxCount: 0, + dailyMaxCount: 0, + accesses: [] as API.SaveSmsSettingCommandAccess[], +}); + +const isRead = ref(true); + +const { isLoading } = useQuery({ + queryKey: ['smsServices/getSmsSetting'], + queryFn: async () => { + return await smsServices.getSmsSetting( + {}, + { + showLoading: false, + } + ); + }, + placeholderData: () => ({} as API.GetSmsSettingQueryResult), + onSuccess(data) { + form.isDisabled = data.isDisabled; + form.withoutParams = data.withoutParams; + form.minutelyMaxCount = data.minutelyMaxCount; + form.hourlyMaxCount = data.hourlyMaxCount; + form.dailyMaxCount = data.dailyMaxCount; + form.accesses = data.accesses; + }, +}); + +const formRef = ref<FormInstance>(); + +function handleConfirm() { + if (!formRef.value) return; + formRef.value.validate((valid) => { + if (valid) { + submit(); + } else { + return; + } + }); +} + +async function submit() { + try { + let params: API.SaveSmsSettingCommand = { + isDisabled: form.isDisabled, + withoutParams: form.withoutParams, + minutelyMaxCount: form.minutelyMaxCount, + hourlyMaxCount: form.hourlyMaxCount, + dailyMaxCount: form.dailyMaxCount, + accesses: form.accesses, + }; + let res = await smsServices.saveSmsSetting(params); + if (res) { + Message.successMessage('鎿嶄綔鎴愬姛'); + isRead.value = true; + } + } catch (error) {} +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; + +.access-list { + flex: 1; + min-width: 0; + + :deep() { + .el-form-item__content { + flex-direction: column; + align-items: flex-start; + } + } +} + +.access-item { + display: flex; + align-items: center; + margin-bottom: 10px; + + .access-item-label { + margin-right: 20px; + word-break: keep-all; + } + + :deep() { + .el-radio-group { + margin-right: 20px; + } + } +} +</style> diff --git a/src/views/TraceIdLogManage/DbAuditLogs.vue b/src/views/TraceIdLogManage/DbAuditLogs.vue new file mode 100644 index 0000000..9b62f3a --- /dev/null +++ b/src/views/TraceIdLogManage/DbAuditLogs.vue @@ -0,0 +1,230 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem tip-content="鎿嶄綔"> + <FieldRadio + v-model="extraParamState.operate" + :value-enum="EnumDbAuditOperateText" + buttonStyle + showAllBtn + :all-btn-value="null" + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem tip-content="鍒涘缓鏃堕棿"> + <FieldDatePicker + v-model="extraParamState.createdTime" + type="daterange" + range-separator="~" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + clearable + @change="getList()" + ></FieldDatePicker> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.createdUser" + style="width: 260px" + placeholder="鎿嶄綔浜篶reatedUser" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.traceId" + style="width: 260px" + placeholder="璺熻釜Id(traceId)" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.tableName" + style="width: 260px" + placeholder="琛ㄥ悕tableName" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.primaryKey" + style="width: 260px" + placeholder="涓婚敭primaryKey" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.oldValues" + style="width: 260px" + placeholder="鏃у�紀ldValues" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.newValues" + style="width: 260px" + placeholder="鏂板�糿ewValues" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns"> + <template #oldValues="{ row }"> + <el-button + v-if="row.oldValues" + type="primary" + link + @click="handleAdd({ json: { oldValues: JSON.parse(row.oldValues) } })" + >鏌ョ湅</el-button + > + </template> + <template #newValues="{ row }"> + <el-button + v-if="row.newValues" + type="primary" + link + @click="handleAdd({ json: { newValues: JSON.parse(row.newValues) } })" + >鏌ョ湅</el-button + > + </template> + <template #createdUser="{ row }"> + <el-button + v-if="row.createdUser" + type="primary" + link + @click=" + handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } }) + " + >鏌ョ湅</el-button + > + </template> + </ProTableV2> + <JsonViewerDialog v-bind="dialogProps" /> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + ProTableV2, + FieldRadio, + FieldDatePicker, + useFormDialog, +} from '@bole-core/components'; +import { EnumDbAuditOperateText } from '@/constants'; +import * as logRecordsServices from '@/services/api/logRecords'; +import { ModelValueType } from 'element-plus'; +import { format } from '@/utils'; +import JsonViewerDialog from './components/JsonViewerDialog.vue'; + +defineOptions({ + name: 'DbAuditLogs', +}); + +const operationBtnMap: Record<string, OperationBtnType> = { + detailBtn: { emits: { onClick: (role) => openDialog(role) } }, +}; + +const { column, operationBtns } = useAccess({ + operationBtnMap, +}); + +const BaseState = { + loading: true, +}; + +const state = reactive({ ...BaseState }); + +onMounted(async () => { + await getList(); + state.loading = false; +}); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetDbAuditLogsQuery = { + pageModel: { + rows: pageSize, + page: pageIndex, + // orderInput: extraParamState.orderInput, + }, + createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), + createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), + createdUser: extraParamState.createdUser, + traceId: extraParamState.traceId, + tableName: extraParamState.tableName, + primaryKey: extraParamState.primaryKey, + operate: extraParamState.operate, + oldValues: extraParamState.oldValues, + newValues: extraParamState.newValues, + }; + let res = await logRecordsServices.getDbAuditLogs(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) {} + }, + { + defaultExtraParams: { + createdUser: '', + traceId: '', + operate: '' as any as EnumDbAuditOperate, + tableName: '', + primaryKey: '', + oldValues: '', + newValues: '', + createdTime: [] as unknown as ModelValueType, + orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }], + }, + columnsRenderProps: { + createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + operate: { type: 'enum', valueEnum: EnumDbAuditOperateText }, + }, + } +); + +const { dialogProps, handleAdd } = useFormDialog({ + defaultFormParams: { + json: null, + }, +}); + +function openDialog(row: API.GetDbAuditLogsQueryResultItem) { + handleAdd({ + json: { + oldValues: JSON.parse(row.oldValues), + newValues: JSON.parse(row.newValues), + createdUser: JSON.parse(JSON.stringify(row.createdUser)), + }, + }); +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/TraceIdLogManage/ExceptionLogs.vue b/src/views/TraceIdLogManage/ExceptionLogs.vue new file mode 100644 index 0000000..b6e0c69 --- /dev/null +++ b/src/views/TraceIdLogManage/ExceptionLogs.vue @@ -0,0 +1,185 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem tip-content="鍒涘缓鏃堕棿"> + <FieldDatePicker + v-model="extraParamState.createdTime" + type="daterange" + range-separator="~" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + clearable + @change="getList()" + ></FieldDatePicker> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.createdUser" + style="width: 260px" + placeholder="鎿嶄綔浜篶reatedUser" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.traceId" + style="width: 260px" + placeholder="璺熻釜Id(traceId)" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.type" + style="width: 260px" + placeholder="绫诲瀷type" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.code" + style="width: 260px" + placeholder="浠g爜code" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.message" + style="width: 260px" + placeholder="娑堟伅message" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns"> + <template #createdUser="{ row }"> + <el-button + v-if="row.createdUser" + type="primary" + link + @click=" + handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } }) + " + >鏌ョ湅</el-button + > + </template> + </ProTableV2> + <JsonViewerDialog v-bind="dialogProps" /> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + ProTableV2, + FieldRadio, + FieldDatePicker, + useFormDialog, +} from '@bole-core/components'; +import * as logRecordsServices from '@/services/api/logRecords'; +import { ModelValueType } from 'element-plus'; +import { format } from '@/utils'; +import JsonViewerDialog from './components/JsonViewerDialog.vue'; + +defineOptions({ + name: 'ExceptionLogs', +}); + +const operationBtnMap: Record<string, OperationBtnType> = { + detailBtn: { emits: { onClick: (role) => openDialog(role) } }, +}; + +const { column, operationBtns } = useAccess({ + operationBtnMap, +}); + +const BaseState = { + loading: true, +}; + +const state = reactive({ ...BaseState }); + +onMounted(async () => { + await getList(); + state.loading = false; +}); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetExceptionLogsQuery = { + pageModel: { + rows: pageSize, + page: pageIndex, + // orderInput: extraParamState.orderInput, + }, + createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), + createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), + createdUser: extraParamState.createdUser, + traceId: extraParamState.traceId, + type: extraParamState.type, + code: extraParamState.code, + message: extraParamState.message, + }; + let res = await logRecordsServices.getExceptionLogs(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) {} + }, + { + defaultExtraParams: { + createdUser: '', + traceId: '', + type: '', + code: '', + message: '', + createdTime: [] as unknown as ModelValueType, + orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }], + }, + columnsRenderProps: { + createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + }, + } +); + +const { dialogProps, handleAdd } = useFormDialog({ + defaultFormParams: { + json: null, + }, +}); + +function openDialog(row: API.GetResourceLogsQueryResultItem) { + handleAdd({ + json: { + createdUser: JSON.parse(JSON.stringify(row.createdUser)), + }, + }); +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/TraceIdLogManage/ResourceLogs.vue b/src/views/TraceIdLogManage/ResourceLogs.vue new file mode 100644 index 0000000..ff92f5e --- /dev/null +++ b/src/views/TraceIdLogManage/ResourceLogs.vue @@ -0,0 +1,281 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem tip-content="鏄惁鎴愬姛"> + <FieldRadio + v-model="extraParamState.isSuccess" + :value-enum="[ + { label: '鎴愬姛', value: true }, + { label: '澶辫触', value: false }, + ]" + buttonStyle + showAllBtn + :all-btn-value="null" + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem tip-content="鍒涘缓鏃堕棿"> + <FieldDatePicker + v-model="extraParamState.createdTime" + type="daterange" + range-separator="~" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + clearable + @change="getList()" + ></FieldDatePicker> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.createdUser" + style="width: 260px" + placeholder="鎿嶄綔浜篶reatedUser" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.traceId" + style="width: 260px" + placeholder="璺熻釜Id(traceId)" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.domain" + style="width: 260px" + placeholder="鍩熷悕domain" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.path" + style="width: 260px" + placeholder="鍦板潃path" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.request" + style="width: 260px" + placeholder="璇锋眰鍙傛暟request" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.response" + style="width: 260px" + placeholder="鍝嶅簲缁撴灉response" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.clientIpAddress" + style="width: 260px" + placeholder="瀹㈡埛绔疘P鍦板潃clientIpAddress" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.elapsedMillisecondsMin" + style="width: 260px" + placeholder="鏈�灏忚�楁椂姣鏁癳lapsedMillisecondsMin" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns"> + <template #requestHeaders="{ row }"> + <el-button + v-if="row.requestHeaders" + type="primary" + link + @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })" + >鏌ョ湅</el-button + > + </template> + <template #request="{ row }"> + <el-button + v-if="row.request" + type="primary" + link + @click="handleAdd({ json: { request: JSON.parse(row.request) } })" + >鏌ョ湅</el-button + > + </template> + <template #responseHeaders="{ row }"> + <el-button + v-if="row.responseHeaders" + type="primary" + link + @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })" + >鏌ョ湅</el-button + > + </template> + <template #response="{ row }"> + <el-button + v-if="row.response" + type="primary" + link + @click="handleAdd({ json: { response: JSON.parse(row.response) } })" + >鏌ョ湅</el-button + > + </template> + <template #createdUser="{ row }"> + <el-button + v-if="row.createdUser" + type="primary" + link + @click=" + handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } }) + " + >鏌ョ湅</el-button + > + </template> + </ProTableV2> + <JsonViewerDialog v-bind="dialogProps" /> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + ProTableV2, + FieldRadio, + FieldDatePicker, + useFormDialog, +} from '@bole-core/components'; +import * as logRecordsServices from '@/services/api/logRecords'; +import { ModelValueType } from 'element-plus'; +import { format } from '@/utils'; +import JsonViewerDialog from './components/JsonViewerDialog.vue'; + +defineOptions({ + name: 'ResourceLogs', +}); + +const operationBtnMap: Record<string, OperationBtnType> = { + detailBtn: { emits: { onClick: (role) => openDialog(role) } }, +}; + +const { column, operationBtns } = useAccess({ + operationBtnMap, +}); + +const BaseState = { + loading: true, +}; + +const state = reactive({ ...BaseState }); + +onMounted(async () => { + await getList(); + state.loading = false; +}); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetResourceLogsQuery = { + pageModel: { + rows: pageSize, + page: pageIndex, + // orderInput: extraParamState.orderInput, + }, + createdUser: extraParamState.createdUser, + createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), + createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), + traceId: extraParamState.traceId, + method: extraParamState.method, + domain: extraParamState.domain, + path: extraParamState.path, + request: extraParamState.request, + response: extraParamState.response, + isSuccess: extraParamState.isSuccess, + clientIpAddress: extraParamState.clientIpAddress, + elapsedMillisecondsMin: extraParamState.elapsedMillisecondsMin, + }; + let res = await logRecordsServices.getResourceLogs(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) {} + }, + { + defaultExtraParams: { + createdUser: '', + traceId: '', + method: '' as any as EnumResourceMethod, + domain: '', + path: '', + request: '', + response: '', + isSuccess: null as any as boolean, + clientIpAddress: '', + elapsedMillisecondsMin: null, + createdTime: [] as unknown as ModelValueType, + orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }], + }, + columnsRenderProps: { + createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + method: { type: 'enum', valueEnum: EnumResourceMethodText }, + isSuccess: { + formatter: (row: API.GetResourceLogsQueryResultItem) => { + return row.isSuccess ? '鏄�' : '鍚�'; + }, + }, + }, + } +); + +const { dialogProps, handleAdd } = useFormDialog({ + defaultFormParams: { + json: null, + }, +}); + +function openDialog(row: API.GetResourceLogsQueryResultItem) { + handleAdd({ + json: { + requestHeaders: JSON.parse(row.requestHeaders), + request: JSON.parse(row.request), + responseHeaders: JSON.parse(row.responseHeaders), + response: JSON.parse(row.response), + createdUser: JSON.parse(JSON.stringify(row.createdUser)), + }, + }); +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/TraceIdLogManage/ThreeResourceLogs.vue b/src/views/TraceIdLogManage/ThreeResourceLogs.vue new file mode 100644 index 0000000..0f2115a --- /dev/null +++ b/src/views/TraceIdLogManage/ThreeResourceLogs.vue @@ -0,0 +1,281 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem tip-content="鏄惁鎴愬姛"> + <FieldRadio + v-model="extraParamState.isSuccess" + :value-enum="[ + { label: '鎴愬姛', value: true }, + { label: '澶辫触', value: false }, + ]" + buttonStyle + showAllBtn + :all-btn-value="null" + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem tip-content="鍒涘缓鏃堕棿"> + <FieldDatePicker + v-model="extraParamState.createdTime" + type="daterange" + range-separator="~" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + clearable + @change="getList()" + ></FieldDatePicker> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.createdUser" + style="width: 260px" + placeholder="鎿嶄綔浜篶reatedUser" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.traceId" + style="width: 260px" + placeholder="璺熻釜Id(traceId)" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.domain" + style="width: 260px" + placeholder="鍩熷悕domain" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.path" + style="width: 260px" + placeholder="鍦板潃path" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.request" + style="width: 260px" + placeholder="璇锋眰鍙傛暟request" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.response" + style="width: 260px" + placeholder="鍝嶅簲缁撴灉response" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.clientIpAddress" + style="width: 260px" + placeholder="瀹㈡埛绔疘P鍦板潃clientIpAddress" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.elapsedMillisecondsMin" + style="width: 260px" + placeholder="鏈�灏忚�楁椂姣鏁癳lapsedMillisecondsMin" + @on-click-search="getList()" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns"> + <template #requestHeaders="{ row }"> + <el-button + v-if="row.requestHeaders" + type="primary" + link + @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })" + >鏌ョ湅</el-button + > + </template> + <template #request="{ row }"> + <el-button + v-if="row.request" + type="primary" + link + @click="handleAdd({ json: { request: JSON.parse(row.request) } })" + >鏌ョ湅</el-button + > + </template> + <template #responseHeaders="{ row }"> + <el-button + v-if="row.responseHeaders" + type="primary" + link + @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })" + >鏌ョ湅</el-button + > + </template> + <template #response="{ row }"> + <el-button + v-if="row.response" + type="primary" + link + @click="handleAdd({ json: { response: JSON.parse(row.response) } })" + >鏌ョ湅</el-button + > + </template> + <template #createdUser="{ row }"> + <el-button + v-if="row.createdUser" + type="primary" + link + @click=" + handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } }) + " + >鏌ョ湅</el-button + > + </template> + </ProTableV2> + <JsonViewerDialog v-bind="dialogProps" /> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + ProTableV2, + FieldRadio, + FieldDatePicker, + useFormDialog, +} from '@bole-core/components'; +import * as logRecordsServices from '@/services/api/logRecords'; +import { ModelValueType } from 'element-plus'; +import { format } from '@/utils'; +import JsonViewerDialog from './components/JsonViewerDialog.vue'; + +defineOptions({ + name: 'ThreeResourceLogs', +}); + +const operationBtnMap: Record<string, OperationBtnType> = { + detailBtn: { emits: { onClick: (role) => openDialog(role) } }, +}; + +const { column, operationBtns } = useAccess({ + operationBtnMap, +}); + +const BaseState = { + loading: true, +}; + +const state = reactive({ ...BaseState }); + +onMounted(async () => { + await getList(); + state.loading = false; +}); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetThreeResourceLogsQuery = { + pageModel: { + rows: pageSize, + page: pageIndex, + // orderInput: extraParamState.orderInput, + }, + createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), + createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), + createdUser: extraParamState.createdUser, + traceId: extraParamState.traceId, + method: extraParamState.method, + domain: extraParamState.domain, + path: extraParamState.path, + request: extraParamState.request, + response: extraParamState.response, + isSuccess: extraParamState.isSuccess, + clientIpAddress: extraParamState.clientIpAddress, + elapsedMillisecondsMin: extraParamState.elapsedMillisecondsMin, + }; + let res = await logRecordsServices.getThreeResourceLogs(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) {} + }, + { + defaultExtraParams: { + createdUser: '', + traceId: '', + method: '' as any as EnumResourceMethod, + domain: '', + path: '', + request: '', + response: '', + isSuccess: null as any as boolean, + clientIpAddress: '', + elapsedMillisecondsMin: null, + createdTime: [] as unknown as ModelValueType, + orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }], + }, + columnsRenderProps: { + createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + method: { type: 'enum', valueEnum: EnumResourceMethodText }, + isSuccess: { + formatter: (row: API.GetResourceLogsQueryResultItem) => { + return row.isSuccess ? '鏄�' : '鍚�'; + }, + }, + }, + } +); + +const { dialogProps, handleAdd } = useFormDialog({ + defaultFormParams: { + json: null, + }, +}); + +function openDialog(row: API.GetResourceLogsQueryResultItem) { + handleAdd({ + json: { + requestHeaders: JSON.parse(row.requestHeaders), + request: JSON.parse(row.request), + responseHeaders: JSON.parse(row.responseHeaders), + response: JSON.parse(row.response), + createdUser: JSON.parse(JSON.stringify(row.createdUser)), + }, + }); +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/TraceIdLogManage/components/DbAuditLogsView.vue b/src/views/TraceIdLogManage/components/DbAuditLogsView.vue index 5d6f420..4521b6a 100644 --- a/src/views/TraceIdLogManage/components/DbAuditLogsView.vue +++ b/src/views/TraceIdLogManage/components/DbAuditLogsView.vue @@ -1,44 +1,4 @@ <template> - <!-- <el-collapse v-model="activeName" accordion> - <el-collapse-item - v-for="item in dbAuditLogs" - :key="item.createdTime" - name="1" - style="overflow: auto; max-height: 600px" - > - <ProForm :model="item" is-read> - <ProFormItemV2 label="tableName:"> - {{ item.tableName }} - </ProFormItemV2> - <ProFormItemV2 label="primaryKey:">{{ item.primaryKey }} </ProFormItemV2> - <ProFormItemV2 label="operate:"> {{ EnumDbAuditOperateText[item.operate] }}</ProFormItemV2> - <ProFormItemV2 label="oldValues:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.oldValues)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="newValues:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.newValues)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="createdUser:"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(JSON.stringify(item.createdUser))" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="createdTime:"> - {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2 - > - </ProForm> - </el-collapse-item> - </el-collapse> --> <AppContainer> <ProTableV2 :columns="columns" @@ -47,12 +7,18 @@ :column-render-map="columnsRenderProps" > <template #oldValues="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.stringify(row.oldValues) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { oldValues: JSON.parse(row.oldValues) } })" >鏌ョ湅</el-button > </template> <template #newValues="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.stringify(row.newValues) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { newValues: JSON.parse(row.newValues) } })" >鏌ョ湅</el-button > </template> @@ -60,7 +26,7 @@ <el-button type="primary" link - @click="handleAdd({ json: JSON.parse(JSON.stringify(row.createdUser)) })" + @click="handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })" >鏌ョ湅</el-button > </template> @@ -76,6 +42,7 @@ defineColumns, ProTableV2Props, useFormDialog, + defineOperationBtns, } from '@bole-core/components'; import JsonViewerDialog from './JsonViewerDialog.vue'; @@ -107,6 +74,18 @@ })) ); +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'detailBtn', + name: '鏌ョ湅', + }, + emits: { + onClick: (role) => openDialog(role), + }, + }, +]); + const columnsRenderProps: ProTableV2Props['columnRenderMap'] = { operate: { type: 'enum', valueEnum: EnumDbAuditOperateText }, createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, @@ -117,6 +96,16 @@ json: null, }, }); + +function openDialog(row: API.GetDbAuditLogsQueryResultItem) { + handleAdd({ + json: { + oldValues: JSON.parse(row.oldValues), + newValues: JSON.parse(row.newValues), + createdUser: JSON.parse(JSON.stringify(row.createdUser)), + }, + }); +} </script> <style lang="scss" scoped> diff --git a/src/views/TraceIdLogManage/components/ExceptionLogsView.vue b/src/views/TraceIdLogManage/components/ExceptionLogsView.vue index 1181afd..6625456 100644 --- a/src/views/TraceIdLogManage/components/ExceptionLogsView.vue +++ b/src/views/TraceIdLogManage/components/ExceptionLogsView.vue @@ -1,31 +1,4 @@ <template> - <!-- <el-collapse v-model="activeName" accordion> - <el-collapse-item - v-for="item in exceptionLogs" - :key="item.createdTime" - name="1" - style="overflow: auto; max-height: 600px" - > - <ProForm :model="item" is-read> - <ProFormItemV2 label="type:"> - {{ item.type }} - </ProFormItemV2> - <ProFormItemV2 label="code:">{{ item.code }} </ProFormItemV2> - <ProFormItemV2 label="message:"> {{ item.message }}</ProFormItemV2> - <ProFormItemV2 label="stackTrace:"> {{ item.stackTrace }}</ProFormItemV2> - <ProFormItemV2 label="createdUser:"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(JSON.stringify(item.createdUser))" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="createdTime:"> - {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2 - > - </ProForm> - </el-collapse-item> - </el-collapse> --> <AppContainer> <ProTableV2 :columns="columns" diff --git a/src/views/TraceIdLogManage/components/JsonViewerDialog.vue b/src/views/TraceIdLogManage/components/JsonViewerDialog.vue index 013001b..5346c74 100644 --- a/src/views/TraceIdLogManage/components/JsonViewerDialog.vue +++ b/src/views/TraceIdLogManage/components/JsonViewerDialog.vue @@ -1,12 +1,23 @@ <template> <ProDialog title="鏌ョ湅" v-model="visible" destroy-on-close draggable> - <json-viewer - :copyable="true" - :boxed="true" - :preview-mode="true" - :value="form.json" - expanded - ></json-viewer> + <ProForm :model="form" ref="dialogForm" label-width="120px"> + <ProFormItemV2 + v-for="(item, index) in jsonList" + :label="`${item}锛歚" + :key="index" + prop="electronSignAccesses" + required + > + <json-viewer + :copyable="true" + :boxed="true" + :preview-mode="true" + :value="form.json?.[item]" + expanded + ></json-viewer> + </ProFormItemV2> + </ProForm> + <template #footer> <span class="dialog-footer"> <el-button @click="emit('onCancel')">鍙� 娑�</el-button> @@ -17,7 +28,7 @@ </template> <script setup lang="ts"> -import { ProDialog } from '@bole-core/components'; +import { ProDialog, ProForm, ProFormItemV2 } from '@bole-core/components'; import JsonViewer from 'vue-json-viewer'; defineOptions({ @@ -37,6 +48,10 @@ const form = defineModel<Form>('form'); +const jsonList = computed(() => { + return Object.keys(form.value.json); +}); + const emit = defineEmits<{ (e: 'onConfirm'): void; (e: 'onCancel'): void; diff --git a/src/views/TraceIdLogManage/components/ResourceLogsView.vue b/src/views/TraceIdLogManage/components/ResourceLogsView.vue index 1c2096b..f7b9f3c 100644 --- a/src/views/TraceIdLogManage/components/ResourceLogsView.vue +++ b/src/views/TraceIdLogManage/components/ResourceLogsView.vue @@ -1,66 +1,4 @@ <template> - <!-- <el-collapse v-model="activeName" accordion> - <el-collapse-item - v-for="item in resourceLogs" - :key="item.id" - name="1" - style="overflow: auto; max-height: 600px" - > - <template #title> - <el-button type="primary" @click="resend(item.id)" link>閲嶆柊鍙戦��</el-button> - </template> - <ProForm :model="item" is-read style="padding: 0 20px"> - <ProFormItemV2 label="method:"> - {{ EnumResourceMethodText[item.method] }} - </ProFormItemV2> - <ProFormItemV2 label="domain:">{{ item.domain }} </ProFormItemV2> - <ProFormItemV2 label="path:"> {{ item.path }}</ProFormItemV2> - <ProFormItemV2 label="requestHeaders:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.requestHeaders)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="request:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.request)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="responseHeaders:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.responseHeaders)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="response:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.response)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="isSuccess:"> {{ item.isSuccess ? '鏄�' : '鍚�' }}</ProFormItemV2> - <ProFormItemV2 label="clientIpAddress:"> {{ item.clientIpAddress }}</ProFormItemV2> - <ProFormItemV2 label="refererUrl:"> {{ item.refererUrl }}</ProFormItemV2> - <ProFormItemV2 label="consoleLogs:"> {{ item.consoleLogs }}</ProFormItemV2> - <ProFormItemV2 label="elapsedMilliseconds:"> {{ item.elapsedMilliseconds }}</ProFormItemV2> - <ProFormItemV2 label="createdUser:"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(JSON.stringify(item.createdUser))" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="createdTime:"> - {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2 - > - </ProForm> - </el-collapse-item> - </el-collapse> --> <AppContainer> <ProTableV2 :columns="columns" @@ -70,22 +8,34 @@ :column-render-map="columnsRenderProps" > <template #requestHeaders="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.requestHeaders) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })" >鏌ョ湅</el-button > </template> <template #request="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.request) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { request: JSON.parse(row.request) } })" >鏌ョ湅</el-button > </template> <template #responseHeaders="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.responseHeaders) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })" >鏌ョ湅</el-button > </template> <template #response="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.response) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { response: JSON.parse(row.response) } })" >鏌ョ湅</el-button > </template> @@ -93,7 +43,7 @@ <el-button type="primary" link - @click="handleAdd({ json: JSON.parse(JSON.stringify(row.createdUser)) })" + @click="handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })" >鏌ョ湅</el-button > </template> @@ -115,6 +65,7 @@ import * as logRecordsServices from '@/services/api/logRecords'; import { Message } from '@bole-core/core'; import JsonViewerDialog from './JsonViewerDialog.vue'; +import { request } from 'http'; defineOptions({ name: 'ResourceLogsView', @@ -155,6 +106,15 @@ const operationBtns = defineOperationBtns([ { data: { + enCode: 'detailBtn', + name: '鏌ョ湅', + }, + emits: { + onClick: (role) => openDialog(role), + }, + }, + { + data: { enCode: 'reSendBtn', name: '閲嶆柊鍙戦��', }, @@ -189,6 +149,18 @@ } } catch (error) {} } + +function openDialog(row: API.GetResourceLogsQueryResultItem) { + handleAdd({ + json: { + requestHeaders: row.requestHeaders, + request: row.request, + responseHeaders: row.responseHeaders, + response: row.response, + createdUser: JSON.stringify(row.createdUser), + }, + }); +} </script> <style lang="scss" scoped> diff --git a/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue b/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue index e650493..333817d 100644 --- a/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue +++ b/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue @@ -1,84 +1,40 @@ <template> - <!-- <el-collapse v-model="activeName" accordion> - <el-collapse-item - v-for="item in threeResourceLogs" - :key="item.id" - name="1" - style="overflow: auto; max-height: 600px" - > - <ProForm :model="item" is-read> - <ProFormItemV2 label="method:"> - {{ EnumResourceMethodText[item.method] }} - </ProFormItemV2> - <ProFormItemV2 label="domain:">{{ item.domain }} </ProFormItemV2> - <ProFormItemV2 label="path:"> {{ item.path }}</ProFormItemV2> - <ProFormItemV2 label="requestHeaders:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.requestHeaders)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="request:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.request)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="responseHeaders:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.responseHeaders)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="response:" label-position="top"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(item.response)" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="isSuccess:"> {{ item.isSuccess ? '鏄�' : '鍚�' }}</ProFormItemV2> - <ProFormItemV2 label="elapsedMilliseconds:"> {{ item.elapsedMilliseconds }}</ProFormItemV2> - <ProFormItemV2 label="createdUser:"> - <json-viewer - :copyable="true" - :boxed="true" - :value="JSON.parse(JSON.stringify(item.createdUser))" - ></json-viewer> - </ProFormItemV2> - <ProFormItemV2 label="createdTime:"> - {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2 - > - </ProForm> - </el-collapse-item> - </el-collapse> --> <AppContainer> <ProTableV2 :columns="columns" - :show-pagination="false" + :operationBtns="operationBtns" :table-data="threeResourceLogs" :column-render-map="columnsRenderProps" > <template #requestHeaders="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.requestHeaders) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })" >鏌ョ湅</el-button > </template> <template #request="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.request) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { request: JSON.parse(row.request) } })" >鏌ョ湅</el-button > </template> <template #responseHeaders="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.responseHeaders) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })" >鏌ョ湅</el-button > </template> <template #response="{ row }"> - <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.response) })" + <el-button + type="primary" + link + @click="handleAdd({ json: { response: JSON.parse(row.response) } })" >鏌ョ湅</el-button > </template> @@ -86,7 +42,7 @@ <el-button type="primary" link - @click="handleAdd({ json: JSON.parse(JSON.stringify(row.createdUser)) })" + @click="handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })" >鏌ョ湅</el-button > </template> @@ -102,6 +58,7 @@ defineColumns, ProTableV2Props, useFormDialog, + defineOperationBtns, } from '@bole-core/components'; import { EnumResourceMethodText } from '@/constants'; import JsonViewerDialog from './JsonViewerDialog.vue'; @@ -138,6 +95,18 @@ })) ); +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'detailBtn', + name: '鏌ョ湅', + }, + emits: { + onClick: (role) => openDialog(role), + }, + }, +]); + const columnsRenderProps: ProTableV2Props['columnRenderMap'] = { method: { type: 'enum', valueEnum: EnumResourceMethodText }, isSuccess: { @@ -153,4 +122,16 @@ json: null, }, }); + +function openDialog(row: API.GetResourceLogsQueryResultItem) { + handleAdd({ + json: { + requestHeaders: JSON.parse(row.requestHeaders), + request: JSON.parse(row.request), + responseHeaders: JSON.parse(row.responseHeaders), + response: JSON.parse(row.response), + createdUser: JSON.parse(JSON.stringify(row.createdUser)), + }, + }); +} </script> -- Gitblit v1.9.1