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