From ce190a7e169e6e632a89a952ec94f0a308ccf724 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期三, 24 九月 2025 15:09:26 +0800 Subject: [PATCH] feat: 页面 --- src/views/EnterpriseManage/components/ConfigureDialog.vue | 10 .eslintrc-auto-import.json | 2 src/services/api/typings.d.ts | 162 ++++++++++ src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue | 82 +++++ src/views/EnterpriseManage/components/WechatConfigureView.vue | 173 +++++++++++ src/views/TraceIdLogManage/components/ResourceLogsView.vue | 105 +++++++ src/constants/enterprise.ts | 5 src/services/api/enterpriseWallet.ts | 20 + pnpm-lock.yaml | 26 + src/views/TraceIdLogManage/TraceIdLogManageList.vue | 84 +++++ src/views/TraceIdLogManage/components/DbAuditLogsView.vue | 66 ++++ src/views/TraceIdLogManage/components/ExceptionLogsView.vue | 52 +++ package.json | 1 auto-imports.d.ts | 6 src/constants/logs.ts | 7 src/constants/apiEnum.ts | 12 src/constants/index.ts | 1 src/services/api/logRecords.ts | 18 + src/services/api/user.ts | 32 ++ 19 files changed, 842 insertions(+), 22 deletions(-) diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json index 27c2f1d..651a1ab 100644 --- a/.eslintrc-auto-import.json +++ b/.eslintrc-auto-import.json @@ -66,6 +66,7 @@ "EnumRealAccessText": true, "EnumResourceController": true, "EnumResourceMethod": true, + "EnumResourceMethodText": true, "EnumRoleWebApiDataPower": true, "EnumRoleWebApiDataPowerText": true, "EnumRoleWebApiDataPowerTextForFilter": true, @@ -93,6 +94,7 @@ "EnumTaskUserSignContractStatus": true, "EnumTaskUserSignContractStatusText": true, "EnumTaskUserSubmitCheckReceiveStatus": true, + "EnumUserBankCardAccess": true, "EnumUserGender": true, "EnumUserGenderText": true, "EnumUserGenderTextForPerson": true, diff --git a/auto-imports.d.ts b/auto-imports.d.ts index a2503d3..f51352d 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -69,6 +69,7 @@ const EnumRealAccessText: typeof import('./src/constants/enterprise')['EnumRealAccessText'] const EnumResourceController: typeof import('./src/constants/apiEnum')['EnumResourceController'] const EnumResourceMethod: typeof import('./src/constants/apiEnum')['EnumResourceMethod'] + const EnumResourceMethodText: typeof import('./src/constants/logs')['EnumResourceMethodText'] const EnumRoleWebApiDataPower: typeof import('./src/constants/apiEnum')['EnumRoleWebApiDataPower'] const EnumRoleWebApiDataPowerText: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText'] const EnumRoleWebApiDataPowerTextForFilter: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter'] @@ -97,6 +98,7 @@ const EnumTaskUserSignContractStatus: typeof import('./src/constants/apiEnum')['EnumTaskUserSignContractStatus'] const EnumTaskUserSignContractStatusText: typeof import('./src/constants/enterpriseEmployee')['EnumTaskUserSignContractStatusText'] const EnumTaskUserSubmitCheckReceiveStatus: typeof import('./src/constants/apiEnum')['EnumTaskUserSubmitCheckReceiveStatus'] + const EnumUserBankCardAccess: typeof import('./src/constants/apiEnum')['EnumUserBankCardAccess'] const EnumUserGender: typeof import('./src/constants/apiEnum')['EnumUserGender'] const EnumUserGenderText: typeof import('./src/constants/task')['EnumUserGenderText'] const EnumUserGenderTextForPerson: typeof import('./src/constants/task')['EnumUserGenderTextForPerson'] @@ -268,7 +270,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, 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, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, 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, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum' + export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, 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, 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' import('./src/constants/apiEnum') // @ts-ignore export type { FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum, FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum } from './src/constants/cPerson' @@ -375,6 +377,7 @@ readonly EnumRealAccessText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumRealAccessText']> readonly EnumResourceController: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumResourceController']> readonly EnumResourceMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumResourceMethod']> + readonly EnumResourceMethodText: UnwrapRef<typeof import('./src/constants/logs')['EnumResourceMethodText']> readonly EnumRoleWebApiDataPower: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumRoleWebApiDataPower']> readonly EnumRoleWebApiDataPowerText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText']> readonly EnumRoleWebApiDataPowerTextForFilter: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter']> @@ -402,6 +405,7 @@ readonly EnumTaskUserSignContractStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskUserSignContractStatus']> readonly EnumTaskUserSignContractStatusText: UnwrapRef<typeof import('./src/constants/enterpriseEmployee')['EnumTaskUserSignContractStatusText']> readonly EnumTaskUserSubmitCheckReceiveStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskUserSubmitCheckReceiveStatus']> + readonly EnumUserBankCardAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserBankCardAccess']> readonly EnumUserGender: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserGender']> readonly EnumUserGenderText: UnwrapRef<typeof import('./src/constants/task')['EnumUserGenderText']> readonly EnumUserGenderTextForPerson: UnwrapRef<typeof import('./src/constants/task')['EnumUserGenderTextForPerson']> diff --git a/package.json b/package.json index 8a1f328..f1a0151 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "vue": "3.5.11", "vue-component-type-helpers": "^2.1.6", "vue-echarts": "^7.0.3", + "vue-json-viewer": "^3.0.4", "vue-router": "^4.4.5", "vue-types": "^5.1.3", "xlsx": "0.18.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a8f54f..68a9f92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ dependencies: '@bole-12333/chat-kit': specifier: latest - version: 1.0.1(@tencentcloud/chat-uikit-engine@2.5.5)(lodash@4.17.21)(vue@3.5.11) + version: 1.0.1(@tencentcloud/chat-uikit-engine@2.5.6)(lodash@4.17.21)(vue@3.5.11) '@bole-12333/customer-chat': specifier: latest version: 1.0.3(@bole-12333/chat-kit@1.0.1)(@tiptap/core@2.1.13)(@tiptap/extension-document@2.1.13)(@tiptap/extension-image@2.1.13)(@tiptap/extension-mention@2.1.13)(@tiptap/extension-paragraph@2.1.13)(@tiptap/extension-placeholder@2.1.13)(@tiptap/extension-text@2.1.13)(@tiptap/pm@2.1.13)(@tiptap/suggestion@2.1.13)(dayjs@1.11.6)(vue@3.5.11) @@ -184,6 +184,9 @@ vue-echarts: specifier: ^7.0.3 version: 7.0.3(echarts@5.5.1)(vue@3.5.11) + vue-json-viewer: + specifier: ^3.0.4 + version: 3.0.4(vue@3.5.11) vue-router: specifier: ^4.4.5 version: 4.4.5(vue@3.5.11) @@ -1853,14 +1856,14 @@ '@babel/helper-validator-identifier': 7.25.9 dev: false - /@bole-12333/chat-kit@1.0.1(@tencentcloud/chat-uikit-engine@2.5.5)(lodash@4.17.21)(vue@3.5.11): + /@bole-12333/chat-kit@1.0.1(@tencentcloud/chat-uikit-engine@2.5.6)(lodash@4.17.21)(vue@3.5.11): resolution: {integrity: sha512-yeSh4XLagaM+uNZRdcG49mhDJO3UbYEpIYZS4Lk303ROnTwxuZyuh5jkoflnCFwWN3Ib3AolfQy999oOqF012A==} peerDependencies: '@tencentcloud/chat-uikit-engine': '*' lodash: '*' vue: 3.5.11 dependencies: - '@tencentcloud/chat-uikit-engine': 2.5.5 + '@tencentcloud/chat-uikit-engine': 2.5.6 lodash: 4.17.21 vue: 3.5.11(typescript@4.6.4) dev: false @@ -1881,7 +1884,7 @@ dayjs: '*' vue: 3.5.11 dependencies: - '@bole-12333/chat-kit': 1.0.1(@tencentcloud/chat-uikit-engine@2.5.5)(lodash@4.17.21)(vue@3.5.11) + '@bole-12333/chat-kit': 1.0.1(@tencentcloud/chat-uikit-engine@2.5.6)(lodash@4.17.21)(vue@3.5.11) '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13) '@tiptap/extension-document': 2.1.13(@tiptap/core@2.1.13) '@tiptap/extension-image': 2.1.13(@tiptap/core@2.1.13) @@ -3786,8 +3789,8 @@ '@tencentcloud/tui-core': 2.5.1 dev: false - /@tencentcloud/chat-uikit-engine@2.5.5: - resolution: {integrity: sha512-WWFmtpRwNXgtRXWgb0mhzeigFGZimMbgvi1fVmu9sY5+RtF9RiayC/ESokaMVs591l7mcZf4/BXCQNtUi3eZiQ==} + /@tencentcloud/chat-uikit-engine@2.5.6: + resolution: {integrity: sha512-hzGkruR3j5S/9hx7HfGBWvHAZ7FZqpkl5LEz0z9sVm3faG/IaBkeTCjPmvN9kGIdDIan8Jn6mhVW57EEx7E8UQ==} dependencies: '@tencentcloud/chat': 3.5.9 tim-profanity-filter-plugin: 1.1.0 @@ -3810,7 +3813,7 @@ '@tencentcloud/call-uikit-vue': 4.0.9 '@tencentcloud/call-uikit-vue2': 4.0.9 '@tencentcloud/call-uikit-vue2.6': 4.0.9(vue@3.5.11) - '@tencentcloud/chat-uikit-engine': 2.5.5 + '@tencentcloud/chat-uikit-engine': 2.5.6 '@tencentcloud/tui-core': 2.5.1 '@tencentcloud/tui-customer-service-plugin': 2.2.6(@tencentcloud/tui-core@2.5.1)(vue@3.5.11) '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13) @@ -17110,6 +17113,15 @@ - supports-color dev: true + /vue-json-viewer@3.0.4(vue@3.5.11): + resolution: {integrity: sha512-pnC080rTub6YjccthVSNQod2z9Sl5IUUq46srXtn6rxwhW8QM4rlYn+CTSLFKXWfw+N3xv77Cioxw7B4XUKIbQ==} + peerDependencies: + vue: 3.5.11 + dependencies: + clipboard: 2.0.11 + vue: 3.5.11(typescript@4.6.4) + dev: false + /vue-router@4.4.5(vue@3.5.11): resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==} peerDependencies: diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts index 2a81620..3407d01 100644 --- a/src/constants/apiEnum.ts +++ b/src/constants/apiEnum.ts @@ -109,6 +109,8 @@ Alipay = 10, /**骞冲畨閾惰 */ PingAnPay = 20, + /**寰俊 */ + WeChatPay = 30, } /** 浼佷笟閽卞寘浠h繘浠跺崟闄勪欢绫诲瀷 */ @@ -475,6 +477,16 @@ Fail = 40, } +/** 鐢ㄦ埛閾惰鍗¢�氶亾 */ +export enum EnumUserBankCardAccess { + /**閾惰鍗� */ + Bank = 1, + /**鏀粯瀹� */ + AliPay = 10, + /**寰俊 */ + WeChatPay = 20, +} + /** 鐢ㄦ埛鎬у埆 */ export enum EnumUserGender { /**鐢� */ diff --git a/src/constants/enterprise.ts b/src/constants/enterprise.ts index 167088d..efc3d0b 100644 --- a/src/constants/enterprise.ts +++ b/src/constants/enterprise.ts @@ -20,6 +20,10 @@ * 鐭俊閫氶亾閰嶇疆 */ ShortMessage = 4, + // /** + // * 寰俊鏀粯閰嶇疆 + // */ + // Wechat = 5, } export const EnterpriseConfigureTypeText = { @@ -27,6 +31,7 @@ [EnterpriseConfigureType.AliPay]: '鏀粯瀹濋厤缃�', [EnterpriseConfigureType.Electronic]: '鐢靛瓙绛鹃厤缃�', [EnterpriseConfigureType.ShortMessage]: '鐭俊閫氶亾閰嶇疆', + // [EnterpriseConfigureType.Wechat]: '寰俊鏀粯閰嶇疆', }; export enum VerifyStatus { diff --git a/src/constants/index.ts b/src/constants/index.ts index fb702a3..564c7e7 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -21,3 +21,4 @@ export * from './electronSign'; export * from './enterpriseWallet'; export * from './finance'; +export * from './logs'; diff --git a/src/constants/logs.ts b/src/constants/logs.ts new file mode 100644 index 0000000..491e8ff --- /dev/null +++ b/src/constants/logs.ts @@ -0,0 +1,7 @@ +export const EnumResourceMethodText = { + [EnumResourceMethod.None]: '鏃�', + [EnumResourceMethod.Get]: '鏌ヨ', + [EnumResourceMethod.Post]: '鎻愪氦', + [EnumResourceMethod.Put]: '淇敼', + [EnumResourceMethod.Delete]: '鍒犻櫎', +}; diff --git a/src/services/api/enterpriseWallet.ts b/src/services/api/enterpriseWallet.ts index a71c0c5..dc65418 100644 --- a/src/services/api/enterpriseWallet.ts +++ b/src/services/api/enterpriseWallet.ts @@ -239,6 +239,26 @@ ); } +/** 鏌ヨ宸茬绾︿紒涓氶挶鍖呴�氶亾閫夋嫨鍣ㄦ暟鎹� GET /api/user/enterpriseWallet/getEnterpriseWalletAccessSelect */ +export async function getEnterpriseWalletAccessSelect( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetEnterpriseWalletAccessSelectParams, + options?: API.RequestConfig +) { + return request<API.SelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption[]>( + '/api/user/enterpriseWallet/getEnterpriseWalletAccessSelect', + { + method: 'GET', + params: { + ...params, + request: undefined, + ...params['request'], + }, + ...(options || {}), + } + ); +} + /** 鏌ヨ鏀粯瀹濊祫閲戜簩绾у晢鎴稫YB浠h繘浠跺崟璇︽儏 GET /api/user/enterpriseWallet/getEnterpriseWalletExpandindirectOrder */ export async function getEnterpriseWalletExpandindirectOrder( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) diff --git a/src/services/api/logRecords.ts b/src/services/api/logRecords.ts index ed70d74..0cb3919 100644 --- a/src/services/api/logRecords.ts +++ b/src/services/api/logRecords.ts @@ -41,6 +41,24 @@ }); } +/** 绗笁鏂硅祫婧愭棩蹇楀垎椤靛垪琛ㄦ煡璇� POST /api/common/logRecords/getThreeResourceLogs */ +export async function getThreeResourceLogs( + body: API.GetThreeResourceLogsQuery, + options?: API.RequestConfig +) { + return request<API.GetThreeResourceLogsQueryResult>( + '/api/common/logRecords/getThreeResourceLogs', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + } + ); +} + /** 璺熻釜Id鏃ュ織鏌ヨ GET /api/common/logRecords/getTraceIdLog */ export async function getTraceIdLog( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts index 737d081..93aa633 100644 --- a/src/services/api/typings.d.ts +++ b/src/services/api/typings.d.ts @@ -112,6 +112,11 @@ id?: string; } + interface APIgetEnterpriseWalletAccessSelectParams { + /** 鏌ヨ宸茬绾︿紒涓氶挶鍖呴�氶亾閫夋嫨鍣ㄦ暟鎹� */ + request?: GetEnterpriseWalletAccessSelectQuery; + } + interface APIgetEnterpriseWalletExpandindirectOrderParams { /** 浼佷笟Id */ enterpriseId?: string; @@ -156,8 +161,8 @@ } interface APIgetPersonalUserBankCardParams { - /** 鏌ヨ涓汉鐢ㄦ埛閾惰鍗′俊鎭� */ - request?: GetPersonalUserBankCardQuery; + /** 閫氶亾 */ + access?: EnumUserBankCardAccess; } interface APIgetPersonalUserElectronSignParams { @@ -412,6 +417,10 @@ ids: string[]; } + interface DeletePersonalUserBankCardCommand { + access?: EnumUserBankCardAccess; + } + interface DeleteRoleCommand { ids: string[]; } @@ -620,6 +629,8 @@ Alipay = 10, /**骞冲畨閾惰 */ PingAnPay = 20, + /**寰俊 */ + WeChatPay = 30, } enum EnumEnterpriseWalletExpandindirectOrderFileType { @@ -953,6 +964,15 @@ Success = 30, /**楠屾敹鏈�氳繃 */ Fail = 40, + } + + enum EnumUserBankCardAccess { + /**閾惰鍗� */ + Bank = 1, + /**鏀粯瀹� */ + AliPay = 10, + /**寰俊 */ + WeChatPay = 20, } enum EnumUserGender { @@ -1938,6 +1958,24 @@ timestamp?: number; } + interface FriendlyResultGetThreeResourceLogsQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetThreeResourceLogsQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + interface FriendlyResultGetTraceIdLogQueryResult { /** 璺熻釜Id */ traceId?: string; @@ -2355,6 +2393,25 @@ errorCode?: string; /** 鏁版嵁 */ data?: SelectOptionGuidGetEnterpriseContractTemplateSelectQueryOption[]; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultListSelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + /** 鏁版嵁 */ + data?: SelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption[]; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -2980,8 +3037,6 @@ oldValues?: string; /** 鏂板�� */ newValues?: string; - /** 鎿嶄綔浜篒d */ - createdUserId?: string; createdUser?: GetResourceLogsQueryResultItemCreatedUser; /** 鍒涘缓鏃堕棿 */ createdTime?: string; @@ -3397,6 +3452,14 @@ isConfigured?: boolean; } + type GetEnterpriseWalletAccessSelectQuery = Record<string, any>; + + interface GetEnterpriseWalletAccessSelectQueryOption { + /** Id */ + id?: string; + access?: EnumEnterpriseWalletAccess; + } + interface GetEnterpriseWalletExpandindirectOrderQueryResult { /** 鍗曞彿 */ outBizNo?: string; @@ -3521,8 +3584,6 @@ message?: string; /** 鍫嗘爤璺熻釜 */ stackTrace?: string; - /** 鎿嶄綔浜篒d */ - createdUserId?: string; createdUser?: GetResourceLogsQueryResultItemCreatedUser; /** 鍒涘缓鏃堕棿 */ createdTime?: string; @@ -3880,6 +3941,8 @@ avatar?: string; /** 濮撳悕 */ name?: string; + /** 韬唤璇佸彿 */ + identity?: string; /** 鎵嬫満鍙� */ contactPhoneNumber?: string; /** 鏄惁瀹炲悕 */ @@ -3896,12 +3959,12 @@ hireRefuseTaskCount?: number; /** 浣欓 */ balance?: number; + /** 宸茬粦瀹氱殑閾惰鍗¢�氶亾 */ + bankCardAAccesses?: EnumUserBankCardAccess[]; } - type GetPersonalUserBankCardQuery = Record<string, any>; - interface GetPersonalUserBankCardQueryResult { - access?: EnumEnterpriseWalletAccess; + access?: EnumUserBankCardAccess; /** 閾惰鍗″彿 */ code?: string; /** 鎵�灞為摱琛� */ @@ -4278,8 +4341,6 @@ consoleLogs?: string; /** 鑰楁椂姣鏁� */ elapsedMilliseconds?: number; - /** 鎿嶄綔浜篒d */ - createdUserId?: string; createdUser?: GetResourceLogsQueryResultItemCreatedUser; /** 鍒涘缓鏃堕棿 */ createdTime?: string; @@ -4487,6 +4548,8 @@ interface GetSettlementTaskUsersQueryResultItem { /** 缁撶畻鍚嶅崟Id */ id?: string; + /** 鐢ㄦ埛淇℃伅Id */ + userId?: string; /** 濮撳悕 */ name?: string; /** 韬唤璇佸彿 */ @@ -4797,9 +4860,68 @@ hireStatus?: EnumTaskUserHireStatus; } + interface GetThreeResourceLogsQuery { + /** 璺熻釜Id */ + traceId?: string; + /** 鍏抽敭瀛� */ + keywords?: string; + /** 鍒涘缓鏃堕棿-璧峰 */ + createdTimeBegin?: string; + /** 鍒涘缓鏃堕棿-鎴 */ + createdTimeEnd?: string; + pageModel?: PagedListQueryPageModel; + } + + interface GetThreeResourceLogsQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetThreeResourceLogsQueryResultItem[]; + } + + interface GetThreeResourceLogsQueryResultItem { + /** Id */ + id?: string; + method?: EnumResourceMethod; + /** 鍩熷悕 */ + domain?: string; + /** 鍦板潃 */ + path?: string; + /** 璇锋眰澶� */ + requestHeaders?: string; + /** 璇锋眰鍙傛暟 */ + request?: string; + /** 璇锋眰澶� */ + responseHeaders?: string; + /** 鍝嶅簲缁撴灉 */ + response?: string; + /** 鏄惁鎴愬姛 */ + isSuccess?: boolean; + /** 鑰楁椂姣鏁� */ + elapsedMilliseconds?: number; + createdUser?: GetThreeResourceLogsQueryResultItemCreatedUser; + /** 鍒涘缓鏃堕棿 */ + createdTime?: string; + } + + interface GetThreeResourceLogsQueryResultItemCreatedUser { + /** Id */ + id?: string; + type?: EnumUserType; + /** 濮撳悕 */ + name?: string; + /** 鐢ㄦ埛鍚� */ + userName?: string; + /** 浼佷笟Id */ + enterpriseId?: string; + /** 浼佷笟鍏ㄧО */ + enterpriseName?: string; + } + interface GetTraceIdLogQueryResult { /** 璧勬簮鏃ュ織 */ resourceLogs?: GetResourceLogsQueryResultItem[]; + /** 绗笁鏂硅祫婧愭棩蹇� */ + threeResourceLogs?: GetThreeResourceLogsQueryResultItem[]; /** 寮傚父鏃ュ織 */ exceptionLogs?: GetExceptionLogsQueryResultItem[]; /** 鏁版嵁搴撳璁℃棩蹇� */ @@ -5603,7 +5725,7 @@ } interface SavePersonalUserBankCardCommand { - access?: EnumEnterpriseWalletAccess; + access?: EnumUserBankCardAccess; /** 閾惰鍗″彿 */ code?: string; /** 鎵�灞為摱琛� */ @@ -5612,6 +5734,8 @@ bankBranch?: string; /** 閾惰棰勭暀鎵嬫満鍙� */ phoneNumber?: string; + /** 楠岃瘉鐮� */ + verifyCode?: string; } interface SaveRoleCommand { @@ -5747,6 +5871,14 @@ data?: GetEnterpriseContractTemplateSelectQueryOption; } + interface SelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption { + /** 鍊� */ + value?: string; + /** 鏍囩 */ + label?: string; + data?: GetEnterpriseWalletAccessSelectQueryOption; + } + interface SelectOptionGuidGetTaskSelectQueryOption { /** 鍊� */ value?: string; @@ -5782,6 +5914,11 @@ phoneNumber: string; /** 韬唤璇佸彿 */ identity: string; + } + + interface SendSavePersonalUserBankCardVerifyCodeCommand { + /** 鎵嬫満鍙风爜 */ + phoneNumber: string; } interface SetDictionaryDataIsDisabledCommand { @@ -5904,6 +6041,7 @@ interface SureTaskSettlementCommand { /** 浠诲姟Id */ taskInfoId?: string; + settlementAccess?: EnumEnterpriseWalletAccess; } type SyncDatabaseCommand = Record<string, any>; diff --git a/src/services/api/user.ts b/src/services/api/user.ts index d06c228..10561c9 100644 --- a/src/services/api/user.ts +++ b/src/services/api/user.ts @@ -2,6 +2,21 @@ // @ts-ignore import { request } from '@/utils/request'; +/** 鍒犻櫎鐢ㄦ埛閾惰鍗′俊鎭� DELETE /api/user/user/deletePersonalUserBankCard */ +export async function deletePersonalUserBankCard( + body: API.DeletePersonalUserBankCardCommand, + options?: API.RequestConfig +) { + return request<number>('/api/user/user/deletePersonalUserBankCard', { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 鏌ヨ杩愯惀绔敤鎴峰垎椤靛垪琛ㄦ暟鎹� POST /api/user/user/getOperationUserInfos */ export async function getOperationUserInfos( body: API.GetOperationUserInfosQuery, @@ -30,8 +45,6 @@ method: 'GET', params: { ...params, - request: undefined, - ...params['request'], }, ...(options || {}), }); @@ -154,6 +167,21 @@ }); } +/** 鍙戦�佺粦瀹氶摱琛屽崱鐭俊 POST /api/user/user/sendSavePersonalUserBankCardVerifyCode */ +export async function sendSavePersonalUserBankCardVerifyCode( + body: API.SendSavePersonalUserBankCardVerifyCodeCommand, + options?: API.RequestConfig +) { + return request<string>('/api/user/user/sendSavePersonalUserBankCardVerifyCode', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 璁剧疆鐢ㄦ埛淇℃伅瑙掕壊 PUT /api/user/user/setUserInfoRoles */ export async function setUserInfoRoles( body: API.SetUserInfoRolesCommand, diff --git a/src/views/EnterpriseManage/components/ConfigureDialog.vue b/src/views/EnterpriseManage/components/ConfigureDialog.vue index e96bea7..ad4c081 100644 --- a/src/views/EnterpriseManage/components/ConfigureDialog.vue +++ b/src/views/EnterpriseManage/components/ConfigureDialog.vue @@ -13,6 +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"> + <WechatConfigureView :id="form.id" ref="wechatConfigureViewRef" /> + </el-tab-pane> --> <el-tab-pane lazy :name="EnterpriseConfigureType.Electronic"> <ElectronicConfigureView :id="form.id" ref="electronicConfigureViewRef" /> </el-tab-pane> @@ -36,6 +39,7 @@ import AliPayConfigureView from './AliPayConfigureView.vue'; import ElectronicConfigureView from './ElectronicConfigureView.vue'; import ShortMessageConfigureView from './ShortMessageConfigureView.vue'; +import WechatConfigureView from './WechatConfigureView.vue'; defineOptions({ name: 'ConfigureDialog', @@ -65,6 +69,9 @@ 'shortMessageConfigureViewRef' ); +const wechatConfigureViewRef = + useTemplateRef<InstanceType<typeof WechatConfigureView>>('wechatConfigureViewRef'); + function onDialogClose() { // if (!dialogForm.value) return; // dialogForm.value.resetFields(); @@ -81,6 +88,9 @@ } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.ShortMessage) { res = await shortMessageConfigureViewRef.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 new file mode 100644 index 0000000..24c7f4d --- /dev/null +++ b/src/views/EnterpriseManage/components/WechatConfigureView.vue @@ -0,0 +1,173 @@ +<template> + <LoadingLayout :loading="isLoading"> + <ProForm :model="form" ref="dialogForm" label-width="120px"> + <ProFormItemV2 + label="鑱旂郴浜哄鍚�:" + prop="name" + :checkRules="[{ message: '璇疯緭鍏ヨ仈绯讳汉濮撳悕' }]" + > + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ヨ仈绯讳汉濮撳悕"> </ProFormText> + </ProFormItemV2> + <ProFormItemV2 + label="鑱旂郴浜虹被鍨�:" + prop="name" + :checkRules="[{ message: '璇烽�夋嫨鑱旂郴浜虹被鍨�' }]" + > + <ProFormRadio v-model.trim="form.name" :value-enum="[]" button-style /> + </ProFormItemV2> + <ProFormItemV2 + label="鎵嬫満鍙�:" + prop="name" + :checkRules="[{ type: 'phone', message: '璇疯緭鍏ユ墜鏈哄彿' }]" + > + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ユ墜鏈哄彿" /> + </ProFormItemV2> + <ProFormItemV2 + label="鐢靛瓙閭:" + prop="name" + :checkRules="[{ type: 'email', message: '璇疯緭鍏ョ數瀛愰偖绠�' }]" + > + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ョ數瀛愰偖绠�" /> + </ProFormItemV2> + <ProFormItemV2 label="涓讳綋绫诲瀷:" prop="name" :checkRules="[{ message: '璇烽�夋嫨涓讳綋绫诲瀷' }]"> + <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> + <ProFormItemV2 + label="瀹㈡湇鐢佃瘽:" + prop="name" + :checkRules="[{ type: 'tel', message: '璇疯緭鍏ュ鏈嶇數璇�' }]" + > + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ鏈嶇數璇�" /> + </ProFormItemV2> + <ProFormItemV2 label="缁忚惀鍦烘櫙:" prop="name" :checkRules="[{ message: '璇烽�夋嫨缁忚惀鍦烘櫙' }]"> + <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="璇烽�夋嫨缁忚惀鍦烘櫙"> + </ProFormSelect> + </ProFormItemV2> + <ProFormItemV2 + label="鍏ラ┗缁撶畻ID:" + prop="name" + :checkRules="[{ message: '璇疯緭鍏ュ叆椹荤粨绠桰D' }]" + > + <div style="display: flex; width: 100%"> + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ叆椹荤粨绠桰D" /> + <el-button style="margin-left: 10px" type="primary" link @click="openOuterSettleRule" + >璐圭巼缁撶畻瑙勫垯瀵圭収琛�</el-button + > + </div> + </ProFormItemV2> + <ProFormItemV2 + label="鐗规畩璧勮川鐓х墖:" + prop="url" + :check-rules="[{ type: 'upload', message: '璇蜂笂浼犵壒娈婅祫璐ㄧ収鐗�' }]" + > + <ProFormUpload + v-model:file-url="form.url" + :limit="5" + :limitFileSize="10" + accept="png,jpg,jpeg,pdf" + ></ProFormUpload> + </ProFormItemV2> + <ProFormItemV2 label="缁撶畻璐︽埛:" prop="name" :checkRules="[{ message: '璇烽�夋嫨缁撶畻璐︽埛' }]"> + <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> + <ProFormItemV2 + label="閾惰璐﹀彿:" + prop="name" + :checkRules="[{ type: 'tel', message: '璇疯緭鍏ラ摱琛岃处鍙�' }]" + > + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ラ摱琛岃处鍙�" /> + </ProFormItemV2> + </ProForm> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { FormInstance } from 'element-plus'; +import { + ProForm, + ProFormItemV2, + ProFormText, + LoadingLayout, + UploadUserFile, + ProFormSelect, + ProFormUpload, + useFormDialog, + ProFormRadio, +} from '@bole-core/components'; +import * as enterpriseWalletServices from '@/services/api/enterpriseWallet'; +import { useQuery } from '@tanstack/vue-query'; +import { convertWalletApiToFiles, convertWalletFilesToApi } from '@/utils'; + +defineOptions({ + name: 'WechatConfigureView', +}); + +type Props = { + id: string; +}; + +const props = withDefaults(defineProps<Props>(), {}); + +const dialogForm = ref<FormInstance>(); + +const form = reactive({ + name: '', + url: [] as UploadUserFile[], +}); + +const { isLoading, refetch } = useQuery({ + queryKey: [ + 'enterpriseWalletServices/getEnterpriseWallet', + props.id, + EnumEnterpriseWalletAccess.Alipay, + ], + queryFn: async (ctx) => { + return await enterpriseWalletServices.getEnterpriseWallet({ + enterpriseId: props.id, + access: EnumEnterpriseWalletAccess.Alipay, + }); + }, + onSuccess(data) { + form.name = data.name; + form.url = convertWalletApiToFiles( + data.files, + EnumEnterpriseWalletExpandindirectOrderFileType.Scene + ); + }, +}); + +function openOuterSettleRule() { + window.open('https://kf.qq.com/faq/220228IJb2UV220228uEjU3Q.html', '_blank'); +} + +async function enterpriseWalletExpandindirectCreate() { + try { + if (!dialogForm.value) return; + const valid = await dialogForm.value.validate(); + if (!valid) return; + let params: API.EnterpriseWalletExpandindirectCreateCommand = {}; + let res = await enterpriseWalletServices.enterpriseWalletExpandindirectCreate(params); + return res; + } catch (error) {} +} + +defineExpose({ + onConfirm: enterpriseWalletExpandindirectCreate, +}); +</script> diff --git a/src/views/TraceIdLogManage/TraceIdLogManageList.vue b/src/views/TraceIdLogManage/TraceIdLogManageList.vue new file mode 100644 index 0000000..e70f0f8 --- /dev/null +++ b/src/views/TraceIdLogManage/TraceIdLogManageList.vue @@ -0,0 +1,84 @@ +<template> + <LoadingLayout :loading="isLoading"> + <AppContainer> + <ProTableQueryFilterBar :show-reset-btn="false"> + <template #query> + <QueryFilterItem> + <SearchInput + v-model="state.traceId" + style="width: 260px" + placeholder="traceID" + @on-click-search="refetch" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTabs v-model="state.tabType" hasBorder> + <ProTabPane lazy label="璧勬簮鏃ュ織" name="resourceLogs"> + <ResourceLogsView + :resourceLogs="detail.resourceLogs" + @resend="refetch" + ></ResourceLogsView> + </ProTabPane> + <ProTabPane lazy label="绗笁鏂硅祫婧愭棩蹇�" name="threeResourceLogs"> + <ThreeResourceLogsView + :threeResourceLogs="detail.threeResourceLogs" + ></ThreeResourceLogsView> + </ProTabPane> + <ProTabPane lazy label="寮傚父鏃ュ織" name="exceptionLogs"> + <ExceptionLogsView :exceptionLogs="detail.exceptionLogs"></ExceptionLogsView> + </ProTabPane> + <ProTabPane lazy label="鏁版嵁搴撳璁℃棩蹇�" name="dbAuditLogs"> + <DbAuditLogsView :dbAuditLogs="detail.dbAuditLogs"></DbAuditLogsView> + </ProTabPane> + </ProTabs> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + ProTabs, + ProTabPane, +} from '@bole-core/components'; +import * as logRecordsServices from '@/services/api/logRecords'; +import { useQuery } from '@tanstack/vue-query'; +import ResourceLogsView from './components/ResourceLogsView.vue'; +import ThreeResourceLogsView from './components/ThreeResourceLogsView.vue'; +import ExceptionLogsView from './components/ExceptionLogsView.vue'; +import DbAuditLogsView from './components/DbAuditLogsView.vue'; + +defineOptions({ + name: 'TraceIdLogManageList', +}); + +const BaseState = { + traceId: '', + tabType: 'resourceLogs', +}; + +const state = reactive({ ...BaseState }); + +const { + isLoading, + data: detail, + refetch, +} = useQuery({ + queryKey: ['logRecordsServices/getTraceIdLog', state.traceId], + queryFn: async () => { + return await logRecordsServices.getTraceIdLog({ traceId: state.traceId }); + }, + placeholderData: () => ({} as API.GetTraceIdLogQueryResult), + enabled: computed(() => !!state.traceId), +}); +</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 new file mode 100644 index 0000000..af3d68d --- /dev/null +++ b/src/views/TraceIdLogManage/components/DbAuditLogsView.vue @@ -0,0 +1,66 @@ +<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> +</template> + +<script setup lang="ts"> +import { ProForm, ProFormItemV2 } from '@bole-core/components'; +import { EnumDbAuditOperateText } from '@/constants'; +import JsonViewer from 'vue-json-viewer'; + +import { format } from '@/utils'; + +defineOptions({ + name: 'DbAuditLogsView', +}); + +type Props = { + dbAuditLogs: API.GetDbAuditLogsQueryResultItem[]; +}; +const activeName = ref('1'); +const props = withDefaults(defineProps<Props>(), { + dbAuditLogs: () => [] as API.GetDbAuditLogsQueryResultItem[], +}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/TraceIdLogManage/components/ExceptionLogsView.vue b/src/views/TraceIdLogManage/components/ExceptionLogsView.vue new file mode 100644 index 0000000..fe1d91d --- /dev/null +++ b/src/views/TraceIdLogManage/components/ExceptionLogsView.vue @@ -0,0 +1,52 @@ +<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> +</template> + +<script setup lang="ts"> +import { ProForm, ProFormItemV2 } from '@bole-core/components'; +import JsonViewer from 'vue-json-viewer'; + +import { format } from '@/utils'; + +defineOptions({ + name: 'ExceptionLogsView', +}); + +type Props = { + exceptionLogs: API.GetExceptionLogsQueryResultItem[]; +}; +const activeName = ref('1'); +const props = withDefaults(defineProps<Props>(), { + exceptionLogs: () => [] as API.GetExceptionLogsQueryResultItem[], +}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/TraceIdLogManage/components/ResourceLogsView.vue b/src/views/TraceIdLogManage/components/ResourceLogsView.vue new file mode 100644 index 0000000..e5f4f6d --- /dev/null +++ b/src/views/TraceIdLogManage/components/ResourceLogsView.vue @@ -0,0 +1,105 @@ +<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> +</template> + +<script setup lang="ts"> +import { ProForm, ProFormItemV2 } from '@bole-core/components'; +import { EnumResourceMethodText } from '@/constants'; +import JsonViewer from 'vue-json-viewer'; +import * as logRecordsServices from '@/services/api/logRecords'; + +import { format } from '@/utils'; +import { Message } from '@bole-core/core'; + +defineOptions({ + name: 'ResourceLogsView', +}); + +type Props = { + resourceLogs: API.GetResourceLogsQueryResultItem[]; +}; + +const activeName = ref('1'); + +const props = withDefaults(defineProps<Props>(), { + resourceLogs: () => [] as API.GetResourceLogsQueryResultItem[], +}); + +const emit = defineEmits<{ + (e: 'resend'): void; +}>(); + +async function resend(id: string) { + try { + let res = await logRecordsServices.resendResource({ id: id }); + if (res) { + Message.successMessage('鎿嶄綔鎴愬姛'); + } + } catch (error) {} +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue b/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue new file mode 100644 index 0000000..1d9dd8a --- /dev/null +++ b/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue @@ -0,0 +1,82 @@ +<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> +</template> + +<script setup lang="ts"> +import { ProForm, ProFormItemV2 } from '@bole-core/components'; +import { EnumResourceMethodText } from '@/constants'; +import JsonViewer from 'vue-json-viewer'; + +import { format } from '@/utils'; + +defineOptions({ + name: 'ThreeResourceLogsView', +}); + +type Props = { + threeResourceLogs: API.GetThreeResourceLogsQueryResultItem[]; +}; +const activeName = ref('1'); +const props = withDefaults(defineProps<Props>(), { + threeResourceLogs: () => [] as API.GetThreeResourceLogsQueryResultItem[], +}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> -- Gitblit v1.9.1