From 588f577a14b2a51663d43f3bf2f303862d65b932 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 29 九月 2025 09:15:53 +0800
Subject: [PATCH] feat: 短信

---
 src/views/TraceIdLogManage/DbAuditLogs.vue                      |  230 +++++
 .eslintrc-auto-import.json                                      |    5 
 src/services/api/typings.d.ts                                   |  548 ++++++++++++-
 src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue |  105 +-
 src/views/EnterpriseManage/components/WechatConfigureView.vue   |   16 
 src/views/TraceIdLogManage/components/ResourceLogsView.vue      |  106 +-
 src/views/TraceIdLogManage/components/JsonViewerDialog.vue      |   31 
 src/constants/enterprise.ts                                     |    5 
 src/services/api/enterpriseWallet.ts                            |   12 
 src/views/System/SmsSettingManage.vue                           |  215 +++++
 src/services/api/sms.ts                                         |   42 +
 src/views/TraceIdLogManage/components/DbAuditLogsView.vue       |   75 -
 src/views/TraceIdLogManage/components/ExceptionLogsView.vue     |   27 
 src/services/api/index.ts                                       |    6 
 src/views/TraceIdLogManage/ThreeResourceLogs.vue                |  281 +++++++
 src/views/TraceIdLogManage/ResourceLogs.vue                     |  281 +++++++
 src/services/api/electronSign.ts                                |   21 
 auto-imports.d.ts                                               |   12 
 src/constants/apiEnum.ts                                        |   76 +
 src/views/TraceIdLogManage/ExceptionLogs.vue                    |  185 ++++
 src/services/api/logRecords.ts                                  |   39 +
 src/services/api/ocrUtils.ts                                    |   12 
 22 files changed, 2,006 insertions(+), 324 deletions(-)

diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index e20962f..0fb83b8 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -27,6 +27,7 @@
     "EnumClientType": true,
     "EnumClientTypeText": true,
     "EnumCodeUrlScene": true,
+    "EnumConsoleLogAccess": true,
     "EnumContractTemplateStatus": true,
     "EnumContractTemplateStatusText": true,
     "EnumContractTemplateStatusTextForEnterpriseFilter": true,
@@ -39,6 +40,7 @@
     "EnumDbAuditOperateText": true,
     "EnumElectronSignAccess": true,
     "EnumElectronSignAccessText": true,
+    "EnumElectronSignVerifyType": true,
     "EnumEnterpriseCostStatus": true,
     "EnumEnterpriseCostType": true,
     "EnumEnterpriseRealMethod": true,
@@ -52,6 +54,7 @@
     "EnumEnterpriseWalletSignStatusText": true,
     "EnumEnterpriseWalletTransactionType": true,
     "EnumGetEnterpriseEmployeesQuerySignContractStatus": true,
+    "EnumLogLevel": true,
     "EnumMenuType": true,
     "EnumMenuVisitLevel": true,
     "EnumOcrAccess": true,
@@ -78,6 +81,8 @@
     "EnumSettlementCycleText": true,
     "EnumSmsAccess": true,
     "EnumSmsAccessText": true,
+    "EnumSmsAccessTextUseInSms": true,
+    "EnumSmsStatus": true,
     "EnumTaskCheckReceiveStatus": true,
     "EnumTaskCheckReceiveStatusText": true,
     "EnumTaskRecommendStatus": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index 3399137..9d158b2 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -29,6 +29,7 @@
   const EnumClientType: typeof import('./src/constants/apiEnum')['EnumClientType']
   const EnumClientTypeText: typeof import('./src/constants/apiEnumText')['EnumClientTypeText']
   const EnumCodeUrlScene: typeof import('./src/constants/apiEnum')['EnumCodeUrlScene']
+  const EnumConsoleLogAccess: typeof import('./src/constants/apiEnum')['EnumConsoleLogAccess']
   const EnumContractTemplateStatus: typeof import('./src/constants/apiEnum')['EnumContractTemplateStatus']
   const EnumContractTemplateStatusText: typeof import('./src/constants/electronSign')['EnumContractTemplateStatusText']
   const EnumContractTemplateStatusTextForEnterpriseFilter: typeof import('./src/constants/electronSign')['EnumContractTemplateStatusTextForEnterpriseFilter']
@@ -41,6 +42,7 @@
   const EnumDbAuditOperateText: typeof import('./src/constants/apiEnumText')['EnumDbAuditOperateText']
   const EnumElectronSignAccess: typeof import('./src/constants/apiEnum')['EnumElectronSignAccess']
   const EnumElectronSignAccessText: typeof import('./src/constants/electronSign')['EnumElectronSignAccessText']
+  const EnumElectronSignVerifyType: typeof import('./src/constants/apiEnum')['EnumElectronSignVerifyType']
   const EnumEnterpriseCostStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseCostStatus']
   const EnumEnterpriseCostType: typeof import('./src/constants/apiEnum')['EnumEnterpriseCostType']
   const EnumEnterpriseRealMethod: typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']
@@ -55,6 +57,7 @@
   const EnumEnterpriseWalletTransactionStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionStatus']
   const EnumEnterpriseWalletTransactionType: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionType']
   const EnumGetEnterpriseEmployeesQuerySignContractStatus: typeof import('./src/constants/apiEnum')['EnumGetEnterpriseEmployeesQuerySignContractStatus']
+  const EnumLogLevel: typeof import('./src/constants/apiEnum')['EnumLogLevel']
   const EnumMenuType: typeof import('./src/constants/apiEnum')['EnumMenuType']
   const EnumMenuVisitLevel: typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']
   const EnumOcrAccess: typeof import('./src/constants/apiEnum')['EnumOcrAccess']
@@ -82,6 +85,8 @@
   const EnumSettlementCycleText: typeof import('./src/constants/task')['EnumSettlementCycleText']
   const EnumSmsAccess: typeof import('./src/constants/apiEnum')['EnumSmsAccess']
   const EnumSmsAccessText: typeof import('./src/constants/enterprise')['EnumSmsAccessText']
+  const EnumSmsAccessTextUseInSms: typeof import('./src/constants/enterprise')['EnumSmsAccessTextUseInSms']
+  const EnumSmsStatus: typeof import('./src/constants/apiEnum')['EnumSmsStatus']
   const EnumTaskCheckReceiveStatus: typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus']
   const EnumTaskCheckReceiveStatusText: typeof import('./src/constants/task')['EnumTaskCheckReceiveStatusText']
   const EnumTaskRecommendStatus: typeof import('./src/constants/apiEnum')['EnumTaskRecommendStatus']
@@ -271,7 +276,7 @@
   export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
   import('vue')
   // @ts-ignore
-  export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, 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'
+  export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum'
   import('./src/constants/apiEnum')
   // @ts-ignore
   export type { FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum, FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum } from './src/constants/cPerson'
@@ -339,6 +344,7 @@
     readonly EnumClientType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumClientType']>
     readonly EnumClientTypeText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumClientTypeText']>
     readonly EnumCodeUrlScene: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumCodeUrlScene']>
+    readonly EnumConsoleLogAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumConsoleLogAccess']>
     readonly EnumContractTemplateStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumContractTemplateStatus']>
     readonly EnumContractTemplateStatusText: UnwrapRef<typeof import('./src/constants/electronSign')['EnumContractTemplateStatusText']>
     readonly EnumContractTemplateStatusTextForEnterpriseFilter: UnwrapRef<typeof import('./src/constants/electronSign')['EnumContractTemplateStatusTextForEnterpriseFilter']>
@@ -351,6 +357,7 @@
     readonly EnumDbAuditOperateText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumDbAuditOperateText']>
     readonly EnumElectronSignAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumElectronSignAccess']>
     readonly EnumElectronSignAccessText: UnwrapRef<typeof import('./src/constants/electronSign')['EnumElectronSignAccessText']>
+    readonly EnumElectronSignVerifyType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumElectronSignVerifyType']>
     readonly EnumEnterpriseCostStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCostStatus']>
     readonly EnumEnterpriseCostType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCostType']>
     readonly EnumEnterpriseRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']>
@@ -364,6 +371,7 @@
     readonly EnumEnterpriseWalletSignStatusText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumEnterpriseWalletSignStatusText']>
     readonly EnumEnterpriseWalletTransactionType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionType']>
     readonly EnumGetEnterpriseEmployeesQuerySignContractStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumGetEnterpriseEmployeesQuerySignContractStatus']>
+    readonly EnumLogLevel: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumLogLevel']>
     readonly EnumMenuType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuType']>
     readonly EnumMenuVisitLevel: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']>
     readonly EnumOcrAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumOcrAccess']>
@@ -390,6 +398,8 @@
     readonly EnumSettlementCycleText: UnwrapRef<typeof import('./src/constants/task')['EnumSettlementCycleText']>
     readonly EnumSmsAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsAccess']>
     readonly EnumSmsAccessText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumSmsAccessText']>
+    readonly EnumSmsAccessTextUseInSms: UnwrapRef<typeof import('./src/constants/enterprise')['EnumSmsAccessTextUseInSms']>
+    readonly EnumSmsStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsStatus']>
     readonly EnumTaskCheckReceiveStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus']>
     readonly EnumTaskCheckReceiveStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskCheckReceiveStatusText']>
     readonly EnumTaskRecommendStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskRecommendStatus']>
diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts
index 3407d01..e869b1b 100644
--- a/src/constants/apiEnum.ts
+++ b/src/constants/apiEnum.ts
@@ -19,6 +19,8 @@
   PcWeb = 10,
   /**寰俊灏忕▼搴� */
   Wxmp = 20,
+  /**H5鐧诲綍 */
+  H5 = 30,
 }
 
 /** 缂栧彿鍦板潃鍦烘櫙 */
@@ -27,6 +29,14 @@
   InviteElectronSign = 1,
   /**绛剧害鍦板潃 */
   ElectronSignUrl = 10,
+}
+
+/** 鎺у埗鍙版棩蹇楅�氶亾 */
+export enum EnumConsoleLogAccess {
+  /**鍚庣 */
+  Back = 10,
+  /**鍓嶇 */
+  Front = 20,
 }
 
 /** 鍚堝悓鍒剁増鐘舵�� */
@@ -77,6 +87,14 @@
   BestSign = 10,
   /**鏀粯瀹濅俊浠荤 */
   AlipaySign = 20,
+}
+
+/** 鐢靛瓙绛炬牎楠岀被鍨� */
+export enum EnumElectronSignVerifyType {
+  /**鐭俊 */
+  SMS = 10,
+  /**浜鸿劯 */
+  Face = 20,
 }
 
 /** 浼佷笟鐢ㄩ噺鎵h垂鐘舵�� */
@@ -189,6 +207,22 @@
   Pass = 30,
 }
 
+/** 鏃ュ織绾у埆 */
+export enum EnumLogLevel {
+  /**璺熻釜 */
+  Trace = 10,
+  /**璋冭瘯 */
+  Debug = 20,
+  /**淇℃伅 */
+  Information = 30,
+  /**璀﹀憡 */
+  Warning = 40,
+  /**閿欒 */
+  Error = 50,
+  /**涓ラ噸 */
+  Critical = 60,
+}
+
 /** 鑿滃崟绫诲瀷 */
 export enum EnumMenuType {
   /**鑿滃崟 */
@@ -217,6 +251,8 @@
 export enum EnumOcrAccess {
   /**鐧惧害 */
   Baidu = 10,
+  /**涓婁笂绛� */
+  BestSign = 20,
 }
 
 /** 鍒嗛〉鍒楄〃鎺掑簭 */
@@ -309,28 +345,30 @@
   CommonServerLogRecords = 7,
   /**鍚屾鏁版嵁搴� */
   CommonServerSyncDatabase = 8,
+  /**鐭俊宸ュ叿 */
+  CommonServerSmsUtils = 9,
   /**鐢ㄦ埛璁よ瘉 */
-  UserServerAuth = 9,
+  UserServerAuth = 10,
   /**鐢ㄦ埛鑿滃崟 */
-  UserServerMenu = 10,
+  UserServerMenu = 11,
   /**鐢ㄦ埛璧勬簮 */
-  UserServerResource = 11,
+  UserServerResource = 12,
   /**鐢ㄦ埛瑙掕壊 */
-  UserServerRole = 12,
+  UserServerRole = 13,
   /**鐢ㄦ埛淇℃伅 */
-  UserServerUser = 13,
+  UserServerUser = 14,
   /**鐢靛瓙绛� */
-  UserServerElectronSign = 14,
+  UserServerElectronSign = 15,
   /**鐢ㄦ埛绠�鍘� */
-  UserServerUserResume = 15,
+  UserServerUserResume = 16,
   /**浼佷笟淇℃伅 */
-  UserServerEnterprise = 16,
+  UserServerEnterprise = 17,
   /**浼佷笟閽卞寘 */
-  UserServerEnterpriseWallet = 17,
+  UserServerEnterpriseWallet = 18,
   /**鐏靛伐淇℃伅 */
-  UserServerEnterpriseEmployee = 18,
+  UserServerEnterpriseEmployee = 19,
   /**鐢靛瓙绛� */
-  ElectronSignServerElectronSign = 19,
+  ElectronSignServerElectronSign = 20,
 }
 
 /** 璧勬簮璇锋眰鏂瑰紡 */
@@ -375,8 +413,24 @@
 
 /** 鐭俊閫氶亾 */
 export enum EnumSmsAccess {
+  /**鏃� */
+  None = 0,
   /**闃块噷浜戠煭淇� */
   AliyunSms = 10,
+  /**璇氱珛涓� */
+  ChengLiYe = 20,
+}
+
+/** 鐭俊鐘舵�� */
+export enum EnumSmsStatus {
+  /**寰呭彂閫� */
+  Wait = 0,
+  /**鍙戦�佷腑 */
+  InProcess = 10,
+  /**鍙戦�佹垚鍔� */
+  Success = 20,
+  /**鍙戦�佸け璐� */
+  Fail = 30,
 }
 
 /** 浠诲姟缁撶畻鐘舵�� */
diff --git a/src/constants/enterprise.ts b/src/constants/enterprise.ts
index f12b706..be49de0 100644
--- a/src/constants/enterprise.ts
+++ b/src/constants/enterprise.ts
@@ -74,6 +74,11 @@
   [EnumSmsAccess.AliyunSms]: '闃块噷浜�',
 };
 
+export const EnumSmsAccessTextUseInSms = {
+  [EnumSmsAccess.AliyunSms]: '闃块噷浜�',
+  [EnumSmsAccess.ChengLiYe]: '璇氱珛涓�',
+};
+
 export const EnumRealAccessText = {
   [EnumRealAccess.BestSign]: '涓婁笂绛�',
   [EnumRealAccess.AlipaySign]: '鏀粯瀹濅俊浠荤',
diff --git a/src/services/api/electronSign.ts b/src/services/api/electronSign.ts
index abd2700..8b63a80 100644
--- a/src/services/api/electronSign.ts
+++ b/src/services/api/electronSign.ts
@@ -166,8 +166,6 @@
       method: 'GET',
       params: {
         ...params,
-        request: undefined,
-        ...params['request'],
       },
       ...(options || {}),
     }
@@ -179,14 +177,17 @@
   body: API.PersonalUserFaceRealCommand,
   options?: API.RequestConfig
 ) {
-  return request<string>('/api/user/electronSign/personalUserFaceReal', {
-    method: 'POST',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
-    },
-    data: body,
-    ...(options || {}),
-  });
+  return request<API.PersonalUserFaceRealCommandResult>(
+    '/api/user/electronSign/personalUserFaceReal',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
 }
 
 /** 涓汉涓夎绱犲疄鍚嶈璇� POST /api/user/electronSign/personalUserIdentity3Real */
diff --git a/src/services/api/enterpriseWallet.ts b/src/services/api/enterpriseWallet.ts
index dc65418..3ccb9f2 100644
--- a/src/services/api/enterpriseWallet.ts
+++ b/src/services/api/enterpriseWallet.ts
@@ -330,15 +330,3 @@
     }
   );
 }
-
-/** 娴嬭瘯闃块噷鏀粯 POST /api/user/enterpriseWallet/testAliPay */
-export async function testAliPay(body: API.TestAliPayCommand, options?: API.RequestConfig) {
-  return request<string>('/api/user/enterpriseWallet/testAliPay', {
-    method: 'POST',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
-    },
-    data: body,
-    ...(options || {}),
-  });
-}
diff --git a/src/services/api/index.ts b/src/services/api/index.ts
index 2d2b182..c27a0d6 100644
--- a/src/services/api/index.ts
+++ b/src/services/api/index.ts
@@ -5,10 +5,12 @@
 import * as enterpriseEmployee from './enterpriseEmployee';
 import * as user from './user';
 import * as role from './role';
+import * as sms from './sms';
 import * as ocrUtils from './ocrUtils';
 import * as task from './task';
 import * as enterprise from './enterprise';
 import * as resource from './resource';
+import * as logRecords from './logRecords';
 import * as dictionary from './dictionary';
 import * as enterpriseWallet from './enterpriseWallet';
 import * as codeUrl from './codeUrl';
@@ -18,17 +20,18 @@
 import * as taskCheckReceive from './taskCheckReceive';
 import * as taskUser from './taskUser';
 import * as menu from './menu';
-import * as logRecords from './logRecords';
 import * as fileUtils from './fileUtils';
 import * as syncDatabase from './syncDatabase';
 export default {
   enterpriseEmployee,
   user,
   role,
+  sms,
   ocrUtils,
   task,
   enterprise,
   resource,
+  logRecords,
   dictionary,
   enterpriseWallet,
   codeUrl,
@@ -38,7 +41,6 @@
   taskCheckReceive,
   taskUser,
   menu,
-  logRecords,
   fileUtils,
   syncDatabase,
 };
diff --git a/src/services/api/logRecords.ts b/src/services/api/logRecords.ts
index 0cb3919..4780141 100644
--- a/src/services/api/logRecords.ts
+++ b/src/services/api/logRecords.ts
@@ -2,6 +2,18 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
+/** 鎺у埗鍙版棩蹇楀垎椤靛垪琛ㄦ煡璇� POST /api/common/logRecords/getConsoleLogs */
+export async function getConsoleLogs(body: API.GetConsoleLogsQuery, options?: API.RequestConfig) {
+  return request<API.GetConsoleLogsQueryResult>('/api/common/logRecords/getConsoleLogs', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鏌ヨ鏁版嵁搴撳璁℃棩蹇楀垎椤靛垪琛� POST /api/common/logRecords/getDbAuditLogs */
 export async function getDbAuditLogs(body: API.GetDbAuditLogsQuery, options?: API.RequestConfig) {
   return request<API.GetDbAuditLogsQueryResult>('/api/common/logRecords/getDbAuditLogs', {
@@ -32,6 +44,18 @@
 /** 璧勬簮鏃ュ織鍒嗛〉鍒楄〃鏌ヨ POST /api/common/logRecords/getResourceLogs */
 export async function getResourceLogs(body: API.GetResourceLogsQuery, options?: API.RequestConfig) {
   return request<API.GetResourceLogsQueryResult>('/api/common/logRecords/getResourceLogs', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ鐭俊鏃ュ織 POST /api/common/logRecords/getSmsLogs */
+export async function getSmsLogs(body: API.GetSmsLogsQuery, options?: API.RequestConfig) {
+  return request<API.GetSmsLogsQueryResult>('/api/common/logRecords/getSmsLogs', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json-patch+json',
@@ -85,3 +109,18 @@
     ...(options || {}),
   });
 }
+
+/** 淇濆瓨鍓嶇鏃ュ織 POST /api/common/logRecords/saveFrontConsoleLog */
+export async function saveFrontConsoleLog(
+  body: API.SaveFrontConsoleLogCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/common/logRecords/saveFrontConsoleLog', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/ocrUtils.ts b/src/services/api/ocrUtils.ts
index 75d1669..c342ddd 100644
--- a/src/services/api/ocrUtils.ts
+++ b/src/services/api/ocrUtils.ts
@@ -2,6 +2,18 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
+/** 鏌ヨ閾惰鍗¤瘑鍒� POST /api/common/ocrUtils/getBankOcr */
+export async function getBankOcr(body: API.GetBankOcrCommand, options?: API.RequestConfig) {
+  return request<API.GetBankOcrCommandResult>('/api/common/ocrUtils/getBankOcr', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鏂囧瓧璇嗗埆韬唤璇佽儗闈� POST /api/common/ocrUtils/getIdentityBackOcr */
 export async function getIdentityBackOcr(
   body: API.GetIdentityBackOcrCommand,
diff --git a/src/services/api/sms.ts b/src/services/api/sms.ts
new file mode 100644
index 0000000..5a65279
--- /dev/null
+++ b/src/services/api/sms.ts
@@ -0,0 +1,42 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鏌ヨ鐭俊閰嶇疆 POST /api/common/sms/getSmsSetting */
+export async function getSmsSetting(body: API.GetSmsSettingQuery, options?: API.RequestConfig) {
+  return request<API.GetSmsSettingQueryResult>('/api/common/sms/getSmsSetting', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 淇濆瓨鐭俊閰嶇疆 POST /api/common/sms/saveSmsSetting */
+export async function saveSmsSetting(body: API.SaveSmsSettingCommand, options?: API.RequestConfig) {
+  return request<string>('/api/common/sms/saveSmsSetting', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 璇氱珛涓氱煭淇″钩鍙板洖浼犻�氱煡 POST /api/common/sms/smsChengLiYeNotify */
+export async function smsChengLiYeNotify(
+  body: API.SmsChengLiYeNotifyCommand,
+  options?: API.RequestConfig
+) {
+  return request<boolean>('/api/common/sms/smsChengLiYeNotify', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index 93aa633..80e7e2c 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -161,6 +161,8 @@
   }
 
   interface APIgetPersonalUserBankCardParams {
+    /** 鐏靛伐Id */
+    enterpriseEmployeeId?: string;
     /** 閫氶亾 */
     access?: EnumUserBankCardAccess;
   }
@@ -173,8 +175,8 @@
   }
 
   interface APIgetPersonalUserRealResultParams {
-    /** 鏌ヨ涓汉瀹炲悕缁撴灉 */
-    request?: GetPersonalUserRealResultQuery;
+    /** 鐏靛伐Id */
+    enterpriseEmployeeId?: string;
   }
 
   interface APIgetPersonalUserTransactionParams {
@@ -550,6 +552,8 @@
     PcWeb = 10,
     /**寰俊灏忕▼搴� */
     Wxmp = 20,
+    /**H5鐧诲綍 */
+    H5 = 30,
   }
 
   enum EnumCodeUrlScene {
@@ -557,6 +561,13 @@
     InviteElectronSign = 1,
     /**绛剧害鍦板潃 */
     ElectronSignUrl = 10,
+  }
+
+  enum EnumConsoleLogAccess {
+    /**鍚庣 */
+    Back = 10,
+    /**鍓嶇 */
+    Front = 20,
   }
 
   enum EnumContractTemplateStatus {
@@ -601,6 +612,13 @@
     BestSign = 10,
     /**鏀粯瀹濅俊浠荤 */
     AlipaySign = 20,
+  }
+
+  enum EnumElectronSignVerifyType {
+    /**鐭俊 */
+    SMS = 10,
+    /**浜鸿劯 */
+    Face = 20,
   }
 
   enum EnumEnterpriseCostStatus {
@@ -703,6 +721,21 @@
     Pass = 30,
   }
 
+  enum EnumLogLevel {
+    /**璺熻釜 */
+    Trace = 10,
+    /**璋冭瘯 */
+    Debug = 20,
+    /**淇℃伅 */
+    Information = 30,
+    /**璀﹀憡 */
+    Warning = 40,
+    /**閿欒 */
+    Error = 50,
+    /**涓ラ噸 */
+    Critical = 60,
+  }
+
   enum EnumMenuType {
     /**鑿滃崟 */
     Menu = 10,
@@ -728,6 +761,8 @@
   enum EnumOcrAccess {
     /**鐧惧害 */
     Baidu = 10,
+    /**涓婁笂绛� */
+    BestSign = 20,
   }
 
   enum EnumPagedListOrder {
@@ -812,28 +847,30 @@
     CommonServerLogRecords = 7,
     /**鍚屾鏁版嵁搴� */
     CommonServerSyncDatabase = 8,
+    /**鐭俊宸ュ叿 */
+    CommonServerSmsUtils = 9,
     /**鐢ㄦ埛璁よ瘉 */
-    UserServerAuth = 9,
+    UserServerAuth = 10,
     /**鐢ㄦ埛鑿滃崟 */
-    UserServerMenu = 10,
+    UserServerMenu = 11,
     /**鐢ㄦ埛璧勬簮 */
-    UserServerResource = 11,
+    UserServerResource = 12,
     /**鐢ㄦ埛瑙掕壊 */
-    UserServerRole = 12,
+    UserServerRole = 13,
     /**鐢ㄦ埛淇℃伅 */
-    UserServerUser = 13,
+    UserServerUser = 14,
     /**鐢靛瓙绛� */
-    UserServerElectronSign = 14,
+    UserServerElectronSign = 15,
     /**鐢ㄦ埛绠�鍘� */
-    UserServerUserResume = 15,
+    UserServerUserResume = 16,
     /**浼佷笟淇℃伅 */
-    UserServerEnterprise = 16,
+    UserServerEnterprise = 17,
     /**浼佷笟閽卞寘 */
-    UserServerEnterpriseWallet = 17,
+    UserServerEnterpriseWallet = 18,
     /**鐏靛伐淇℃伅 */
-    UserServerEnterpriseEmployee = 18,
+    UserServerEnterpriseEmployee = 19,
     /**鐢靛瓙绛� */
-    ElectronSignServerElectronSign = 19,
+    ElectronSignServerElectronSign = 20,
   }
 
   enum EnumResourceMethod {
@@ -874,8 +911,23 @@
   }
 
   enum EnumSmsAccess {
+    /**鏃� */
+    None = 0,
     /**闃块噷浜戠煭淇� */
     AliyunSms = 10,
+    /**璇氱珛涓� */
+    ChengLiYe = 20,
+  }
+
+  enum EnumSmsStatus {
+    /**寰呭彂閫� */
+    Wait = 0,
+    /**鍙戦�佷腑 */
+    InProcess = 10,
+    /**鍙戦�佹垚鍔� */
+    Success = 20,
+    /**鍙戦�佸け璐� */
+    Fail = 30,
   }
 
   enum EnumTaskCheckReceiveStatus {
@@ -1112,6 +1164,24 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultGetBankOcrCommandResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetBankOcrCommandResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetCheckReceiveTaskQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -1192,6 +1262,24 @@
     /** 閿欒鐮� */
     errorCode?: string;
     data?: GetCodeUrlQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetConsoleLogsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetConsoleLogsQueryResult;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
@@ -1858,6 +1946,42 @@
     /** 閿欒鐮� */
     errorCode?: string;
     data?: GetSettlementTaskUsersQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetSmsLogsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetSmsLogsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetSmsSettingQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetSmsSettingQueryResult;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
@@ -2604,6 +2728,24 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultPersonalUserFaceRealCommandResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: PersonalUserFaceRealCommandResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultRechargeEnterpriseWalletCommandResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -2706,7 +2848,7 @@
   }
 
   interface GetArrangeTaskUsersQueryResultItem {
-    /** 浠诲姟浜哄憳Id */
+    /** 鐏靛伐Id */
     id?: string;
     /** 澶村儚 */
     avatar?: string;
@@ -2737,6 +2879,21 @@
     /** 宸ヤ綔缁忛獙 */
     workExperience?: string;
     arrangeStatus?: EnumTaskUserArrangeStatus;
+  }
+
+  interface GetBankOcrCommand {
+    access?: EnumOcrAccess;
+    /** 鍦烘櫙 */
+    scene?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃 */
+    isOssUrl?: boolean;
+  }
+
+  interface GetBankOcrCommandResult {
+    /** 鍗″彿 */
+    number?: string;
   }
 
   interface GetCheckReceiveTaskQuery {
@@ -2935,6 +3092,58 @@
     paramValue5?: string;
   }
 
+  interface GetConsoleLogsQuery {
+    access?: EnumConsoleLogAccess;
+    level?: EnumLogLevel;
+    /** 鍒涘缓鏃堕棿-璧峰 */
+    createdTimeBegin?: string;
+    /** 鍒涘缓鏃堕棿-鎴 */
+    createdTimeEnd?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鍐呭 */
+    content?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 浼犲弬 */
+    request?: string;
+    /** 鎵╁睍 */
+    ext?: string;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetConsoleLogsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetConsoleLogsQueryResultItem[];
+  }
+
+  interface GetConsoleLogsQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    access?: EnumConsoleLogAccess;
+    level?: EnumLogLevel;
+    /** 鍐呭 */
+    content: string;
+    /** 鍫嗘爤璺熻釜 */
+    stackTrace?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 浼犲弬 */
+    request?: string;
+    /** 鎵╁睍 */
+    ext?: string;
+    /** 瀹㈡埛IP鍦板潃 */
+    clientIpAddress?: string;
+    createdUser?: GetLogsQueryResultItemCreatedUser;
+    /** 鍒涘缓鏃堕棿 */
+    createdTime?: string;
+  }
+
   interface GetContractTemplateEnterprisesQuery {
     /** 鍏抽敭瀛� */
     keywords?: string;
@@ -3010,14 +3219,23 @@
   type GetCurrentLogierMenusQuery = Record<string, any>;
 
   interface GetDbAuditLogsQuery {
-    /** 璺熻釜Id */
-    traceId?: string;
-    /** 鍏抽敭瀛� */
-    keywords?: string;
     /** 鍒涘缓鏃堕棿-璧峰 */
     createdTimeBegin?: string;
     /** 鍒涘缓鏃堕棿-鎴 */
     createdTimeEnd?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 琛ㄥ悕 */
+    tableName?: string;
+    /** 涓婚敭 */
+    primaryKey?: string;
+    operate?: EnumDbAuditOperate;
+    /** 鏃у�� */
+    oldValues?: string;
+    /** 鏂板�� */
+    newValues?: string;
     pageModel?: PagedListQueryPageModel;
   }
 
@@ -3028,6 +3246,10 @@
   }
 
   interface GetDbAuditLogsQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
     /** 琛ㄥ悕 */
     tableName?: string;
     /** 涓婚敭 */
@@ -3037,7 +3259,7 @@
     oldValues?: string;
     /** 鏂板�� */
     newValues?: string;
-    createdUser?: GetResourceLogsQueryResultItemCreatedUser;
+    createdUser?: GetLogsQueryResultItemCreatedUser;
     /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
   }
@@ -3202,6 +3424,8 @@
     enterpriseId?: string;
     /** 鍏抽敭瀛� */
     keywords?: string;
+    /** 閫氶亾 */
+    accesses?: EnumElectronSignAccess[];
     status?: EnumContractTemplateStatus;
     /** 瀹㈡埛涓婁紶鏃堕棿-璧峰 */
     createdTimeBegin?: string;
@@ -3558,14 +3782,20 @@
   }
 
   interface GetExceptionLogsQuery {
-    /** 璺熻釜Id */
-    traceId?: string;
-    /** 鍏抽敭瀛� */
-    keywords?: string;
     /** 鍒涘缓鏃堕棿-璧峰 */
     createdTimeBegin?: string;
     /** 鍒涘缓鏃堕棿-鎴 */
     createdTimeEnd?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 绫诲瀷 */
+    type?: string;
+    /** 浠g爜 */
+    code?: string;
+    /** 娑堟伅 */
+    message?: string;
     pageModel?: PagedListQueryPageModel;
   }
 
@@ -3576,6 +3806,10 @@
   }
 
   interface GetExceptionLogsQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
     /** 绫诲瀷 */
     type?: string;
     /** 浠g爜 */
@@ -3584,7 +3818,7 @@
     message?: string;
     /** 鍫嗘爤璺熻釜 */
     stackTrace?: string;
-    createdUser?: GetResourceLogsQueryResultItemCreatedUser;
+    createdUser?: GetLogsQueryResultItemCreatedUser;
     /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
   }
@@ -3635,6 +3869,20 @@
     /** 鍦板潃 */
     url?: string;
     model?: BaiduOcrBusinessLicenseResultModel;
+  }
+
+  interface GetLogsQueryResultItemCreatedUser {
+    /** Id */
+    id?: string;
+    type?: EnumUserType;
+    /** 濮撳悕 */
+    name?: string;
+    /** 鐢ㄦ埛鍚� */
+    userName?: string;
+    /** 浼佷笟Id */
+    enterpriseId?: string;
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName?: string;
   }
 
   interface GetMenuQueryResult {
@@ -3965,6 +4213,8 @@
 
   interface GetPersonalUserBankCardQueryResult {
     access?: EnumUserBankCardAccess;
+    /** 閾惰鍗$収鐗囧湴鍧� */
+    bankImageUrl?: string;
     /** 閾惰鍗″彿 */
     code?: string;
     /** 鎵�灞為摱琛� */
@@ -4111,9 +4361,9 @@
     signContractTime?: string;
   }
 
-  type GetPersonalUserRealResultQuery = Record<string, any>;
-
   interface GetPersonalUserRealResultQueryResult {
+    /** 鐢ㄦ埛Id */
+    id?: string;
     /** 鏄惁瀹炲悕 */
     isReal?: boolean;
     /** 瀹炲悕鏃堕棿 */
@@ -4298,14 +4548,29 @@
   }
 
   interface GetResourceLogsQuery {
-    /** 璺熻釜Id */
-    traceId?: string;
-    /** 鍏抽敭瀛� */
-    keywords?: string;
     /** 鍒涘缓鏃堕棿-璧峰 */
     createdTimeBegin?: string;
     /** 鍒涘缓鏃堕棿-鎴 */
     createdTimeEnd?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    method?: EnumResourceMethod;
+    /** 鍩熷悕 */
+    domain?: string;
+    /** 鍦板潃 */
+    path?: string;
+    /** 璇锋眰鍙傛暟 */
+    request?: string;
+    /** 鍝嶅簲缁撴灉 */
+    response?: string;
+    /** 鏄惁鎴愬姛 */
+    isSuccess?: boolean;
+    /** 瀹㈡埛绔疘P鍦板潃 */
+    clientIpAddress?: string;
+    /** 鏈�灏忚�楁椂姣鏁� */
+    elapsedMillisecondsMin?: number;
     pageModel?: PagedListQueryPageModel;
   }
 
@@ -4318,6 +4583,8 @@
   interface GetResourceLogsQueryResultItem {
     /** Id */
     id?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
     method?: EnumResourceMethod;
     /** 鍩熷悕 */
     domain?: string;
@@ -4341,23 +4608,9 @@
     consoleLogs?: string;
     /** 鑰楁椂姣鏁� */
     elapsedMilliseconds?: number;
-    createdUser?: GetResourceLogsQueryResultItemCreatedUser;
+    createdUser?: GetLogsQueryResultItemCreatedUser;
     /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
-  }
-
-  interface GetResourceLogsQueryResultItemCreatedUser {
-    /** Id */
-    id?: string;
-    type?: EnumUserType;
-    /** 濮撳悕 */
-    name?: string;
-    /** 鐢ㄦ埛鍚� */
-    userName?: string;
-    /** 浼佷笟Id */
-    enterpriseId?: string;
-    /** 浼佷笟鍏ㄧО */
-    enterpriseName?: string;
   }
 
   interface GetResourcesQueryResultItem {
@@ -4576,6 +4829,89 @@
     createdTime?: string;
     /** 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴 */
     ereceiptDownloadOssUrl?: string;
+  }
+
+  interface GetSmsLogsQuery {
+    /** 鍒涘缓鏃堕棿-璧峰 */
+    createdTimeBegin?: string;
+    /** 鍒涘缓鏃堕棿-鎴 */
+    createdTimeEnd?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    access?: EnumSmsAccess;
+    /** 鎵嬫満鍙风爜 */
+    phoneNumber?: string;
+    /** 妯℃澘浠g爜 */
+    templateCode?: string;
+    /** 妯℃澘鍙傛暟 */
+    templateParam?: string;
+    /** 鏄惁浣跨敤 */
+    isUsed?: boolean;
+    status?: EnumSmsStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetSmsLogsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetSmsLogsQueryResultItem[];
+  }
+
+  interface GetSmsLogsQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    access?: EnumSmsAccess;
+    /** 鎵嬫満鍙风爜 */
+    phoneNumber?: string;
+    /** 妯℃澘浠g爜 */
+    templateCode?: string;
+    /** 妯℃澘鍙傛暟 */
+    templateParam?: string;
+    /** 鏈夋晥鏈� */
+    expiry?: string;
+    /** 鏄惁浣跨敤 */
+    isUsed?: boolean;
+    status?: EnumSmsStatus;
+    /** 璇锋眰Id */
+    requestId?: string;
+    /** 鍥炰紶浠g爜 */
+    code?: string;
+    /** 鍥炰紶娑堟伅 */
+    message?: string;
+    /** 鎿嶄綔浜篒d */
+    createdUserId?: string;
+    createdUser?: GetLogsQueryResultItemCreatedUser;
+    /** 鍒涘缓鏃堕棿 */
+    createdTime?: string;
+  }
+
+  type GetSmsSettingQuery = Record<string, any>;
+
+  interface GetSmsSettingQueryResult {
+    /** 鏄惁绂佺敤 */
+    isDisabled?: boolean;
+    /** 甯﹀嚭鍙傛暟 */
+    withoutParams?: boolean;
+    /** 姣忓垎閽熸渶澶ф暟閲� */
+    minutelyMaxCount?: number;
+    /** 姣忓皬鏃舵渶澶ф暟閲� */
+    hourlyMaxCount?: number;
+    /** 姣忓ぉ鏈�澶ф暟閲� */
+    dailyMaxCount?: number;
+    /** 閫氶亾閰嶇疆 */
+    accesses?: GetSmsSettingQueryResultAccess[];
+  }
+
+  interface GetSmsSettingQueryResultAccess {
+    access?: EnumSmsAccess;
+    /** 鏄惁绂佺敤 */
+    isDisabled?: boolean;
+    /** 鎺掑簭 */
+    sort?: number;
   }
 
   interface GetTaskEnterpriseQueryResult {
@@ -4861,14 +5197,29 @@
   }
 
   interface GetThreeResourceLogsQuery {
-    /** 璺熻釜Id */
-    traceId?: string;
-    /** 鍏抽敭瀛� */
-    keywords?: string;
     /** 鍒涘缓鏃堕棿-璧峰 */
     createdTimeBegin?: string;
     /** 鍒涘缓鏃堕棿-鎴 */
     createdTimeEnd?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    method?: EnumResourceMethod;
+    /** 鍩熷悕 */
+    domain?: string;
+    /** 鍦板潃 */
+    path?: string;
+    /** 璇锋眰鍙傛暟 */
+    request?: string;
+    /** 鍝嶅簲缁撴灉 */
+    response?: string;
+    /** 鏄惁鎴愬姛 */
+    isSuccess?: boolean;
+    /** 瀹㈡埛绔疘P鍦板潃 */
+    clientIpAddress?: string;
+    /** 鏈�灏忚�楁椂姣鏁� */
+    elapsedMillisecondsMin?: number;
     pageModel?: PagedListQueryPageModel;
   }
 
@@ -4881,6 +5232,8 @@
   interface GetThreeResourceLogsQueryResultItem {
     /** Id */
     id?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
     method?: EnumResourceMethod;
     /** 鍩熷悕 */
     domain?: string;
@@ -4898,23 +5251,9 @@
     isSuccess?: boolean;
     /** 鑰楁椂姣鏁� */
     elapsedMilliseconds?: number;
-    createdUser?: GetThreeResourceLogsQueryResultItemCreatedUser;
+    createdUser?: GetLogsQueryResultItemCreatedUser;
     /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
-  }
-
-  interface GetThreeResourceLogsQueryResultItemCreatedUser {
-    /** Id */
-    id?: string;
-    type?: EnumUserType;
-    /** 濮撳悕 */
-    name?: string;
-    /** 鐢ㄦ埛鍚� */
-    userName?: string;
-    /** 浼佷笟Id */
-    enterpriseId?: string;
-    /** 浼佷笟鍏ㄧО */
-    enterpriseName?: string;
   }
 
   interface GetTraceIdLogQueryResult {
@@ -4926,6 +5265,8 @@
     exceptionLogs?: GetExceptionLogsQueryResultItem[];
     /** 鏁版嵁搴撳璁℃棩蹇� */
     dbAuditLogs?: GetDbAuditLogsQueryResultItem[];
+    /** 鎺у埗鍙版棩蹇� */
+    consoleLogs?: GetConsoleLogsQueryResultItem[];
   }
 
   interface GetUserInfoRolesQueryResultItem {
@@ -5389,9 +5730,16 @@
     id?: string;
     /** 閭�绾︾煭淇$紪鍙凤紙浜岄�変竴锛� */
     smsCode?: string;
+    /** 鍚堝悓妯℃澘Id锛堢绾﹀伐鍏锋椂浣跨敤锛� */
+    contractTemplateId?: string;
+    /** 绛剧害鏍¢獙绫诲瀷 */
+    verifyTypes?: EnumElectronSignVerifyType[];
+    /** 绛剧害瀹屾垚鍚庤皟鏁村湴鍧� */
+    returnUrl?: string;
   }
 
   interface PersonalUserElectronSignCommandResult {
+    userSignContractStatus?: EnumTaskUserSignContractStatus;
     /** 绛剧讲鍚堝悓鐭摼鎺� */
     signContractShortUrl?: string;
     /** 绛剧讲鍚堝悓闀块摼鎺� */
@@ -5407,6 +5755,24 @@
     identityImg: string;
     /** 韬唤璇佸浗寰介潰 */
     identityBackImg: string;
+    /** 浜鸿劯璇嗗埆鎴愬姛璋冩暣椤甸潰 */
+    faceRealCallbackUrl?: string;
+  }
+
+  interface PersonalUserFaceRealCommandResult {
+    /** 鐢ㄦ埛Id */
+    userId?: string;
+    /** 鐏靛伐Id */
+    enterpriseEmployeeId?: string;
+    userSignContractStatus?: EnumTaskUserSignContractStatus;
+    /** 鏄惁瀹炲悕 */
+    isReal?: boolean;
+    realMethod?: EnumUserRealMethod;
+    realStatus?: EnumPersonalUserRealStatus;
+    /** 鏄惁缁戝畾閾惰鍗� */
+    isBindBankCard?: boolean;
+    /** 浜鸿劯璇嗗埆鍦板潃 */
+    faceUrl?: string;
   }
 
   interface PersonalUserIdentity3RealCommand {
@@ -5601,6 +5967,22 @@
     status?: EnumEnterpriseCostStatus;
   }
 
+  interface SaveFrontConsoleLogCommand {
+    /** 璺熻釜Id */
+    traceId?: string;
+    level?: EnumLogLevel;
+    /** 鍐呭 */
+    content: string;
+    /** 鍫嗘爤璺熻釜 */
+    stackTrace?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 浼犲弬 */
+    request?: string;
+    /** 鎵╁睍 */
+    ext?: string;
+  }
+
   interface SaveMenuButtonCommand {
     /** 鑿滃崟Id */
     parentId?: string;
@@ -5725,7 +6107,11 @@
   }
 
   interface SavePersonalUserBankCardCommand {
+    /** 鐏靛伐Id */
+    enterpriseEmployeeId?: string;
     access?: EnumUserBankCardAccess;
+    /** 閾惰鍗$収鐗囧湴鍧� */
+    bankImageUrl?: string;
     /** 閾惰鍗″彿 */
     code?: string;
     /** 鎵�灞為摱琛� */
@@ -5754,6 +6140,29 @@
     menuIds?: string[];
     /** 璧勬簮 */
     resources?: GetRoleQueryResultResource[];
+  }
+
+  interface SaveSmsSettingCommand {
+    /** 鏄惁绂佺敤 */
+    isDisabled?: boolean;
+    /** 甯﹀嚭鍙傛暟 */
+    withoutParams?: boolean;
+    /** 姣忓垎閽熸渶澶ф暟閲� */
+    minutelyMaxCount?: number;
+    /** 姣忓皬鏃舵渶澶ф暟閲� */
+    hourlyMaxCount?: number;
+    /** 姣忓ぉ鏈�澶ф暟閲� */
+    dailyMaxCount?: number;
+    /** 閫氶亾閰嶇疆 */
+    accesses?: SaveSmsSettingCommandAccess[];
+  }
+
+  interface SaveSmsSettingCommandAccess {
+    access?: EnumSmsAccess;
+    /** 鏄惁绂佺敤 */
+    isDisabled?: boolean;
+    /** 鎺掑簭 */
+    sort?: number;
   }
 
   interface SaveTaskInfoCommand {
@@ -5986,6 +6395,10 @@
   interface SetTaskUserArrangeCommand {
     /** 浠诲姟浜哄憳Id */
     id?: string;
+    /** 浠诲姟Id */
+    taskInfoId?: string;
+    /** 鐏靛伐Id */
+    enterpriseEmployeeId?: string;
     arrangeStatus?: EnumTaskUserArrangeStatus;
   }
 
@@ -6014,6 +6427,8 @@
     ids?: string[];
     status?: EnumUserStatus;
   }
+
+  type SmsChengLiYeNotifyCommand = Record<string, any>;
 
   interface SmsLoginCommand {
     /** 鎵嬫満鍙风爜 */
@@ -6167,11 +6582,6 @@
     status?: EnumUserStatus;
     /** 澶囨敞 */
     remark?: string;
-  }
-
-  interface TestAliPayCommand {
-    code?: string;
-    freezeNo?: string;
   }
 
   interface UpdatePhoneNumberVerifyCodeCommand {
diff --git a/src/views/EnterpriseManage/components/WechatConfigureView.vue b/src/views/EnterpriseManage/components/WechatConfigureView.vue
index e2fd7b3..92ed870 100644
--- a/src/views/EnterpriseManage/components/WechatConfigureView.vue
+++ b/src/views/EnterpriseManage/components/WechatConfigureView.vue
@@ -50,11 +50,7 @@
         <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="璇烽�夋嫨涓讳綋绫诲瀷">
         </ProFormSelect>
       </ProFormItemV2>
-      <ProFormItemV2
-        label="鍟嗘埛绠�绉�:"
-        prop="name"
-        :checkRules="[{ type: 'phone', message: '璇疯緭鍏ュ晢鎴风畝绉�' }]"
-      >
+      <ProFormItemV2 label="鍟嗘埛绠�绉�:" prop="name" :checkRules="[{ message: '璇疯緭鍏ュ晢鎴风畝绉�' }]">
         <ProFormText
           :maxlength="64"
           show-word-limit
@@ -101,17 +97,13 @@
         <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="璇烽�夋嫨缁撶畻璐︽埛">
         </ProFormSelect>
       </ProFormItemV2>
-      <ProFormItemV2
-        label="寮�鎴烽摱琛�:"
-        prop="name"
-        :checkRules="[{ type: 'phone', message: '璇疯緭鍏ュ紑鎴烽摱琛�' }]"
-      >
-        <ProFormText :maxlength="64" v-model.trim="form.name" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" />
+      <ProFormItemV2 label="寮�鎴烽摱琛�:" prop="name" :checkRules="[{ message: '璇疯緭鍏ュ紑鎴烽摱琛�' }]">
+        <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" />
       </ProFormItemV2>
       <ProFormItemV2
         label="閾惰璐﹀彿:"
         prop="name"
-        :checkRules="[{ type: 'tel', message: '璇疯緭鍏ラ摱琛岃处鍙�' }]"
+        :checkRules="[{ message: '璇疯緭鍏ラ摱琛岃处鍙�', type: 'bankCard' }]"
       >
         <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ラ摱琛岃处鍙�" />
       </ProFormItemV2>
diff --git a/src/views/System/SmsSettingManage.vue b/src/views/System/SmsSettingManage.vue
new file mode 100644
index 0000000..08b5b50
--- /dev/null
+++ b/src/views/System/SmsSettingManage.vue
@@ -0,0 +1,215 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <AppContainer>
+      <PageFormLayout>
+        <ProForm :model="form" ref="formRef" label-width="120px" :is-read="isRead">
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="鏄惁绂佺敤:" prop="isDisabled">
+                <ProFormRadio
+                  v-model="form.isDisabled"
+                  :value-enum="BooleanOptions"
+                  :button-style="false"
+                ></ProFormRadio>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="甯﹀嚭鍙傛暟:" prop="withoutParams">
+                <ProFormRadio
+                  v-model="form.withoutParams"
+                  :value-enum="BooleanOptions"
+                  :button-style="false"
+                ></ProFormRadio>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="姣忓垎閽熸渶澶ф暟閲�:" prop="minutelyMaxCount">
+                <ProFormInputNumber
+                  :controls="false"
+                  :min="0"
+                  v-model="form.minutelyMaxCount"
+                  placeholder="璇疯緭鍏�"
+                ></ProFormInputNumber>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="姣忓皬鏃舵渶澶ф暟閲�:" prop="hourlyMaxCount">
+                <ProFormInputNumber
+                  :controls="false"
+                  :min="0"
+                  v-model="form.hourlyMaxCount"
+                  placeholder="璇疯緭鍏�"
+                ></ProFormInputNumber>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="姣忓ぉ鏈�澶ф暟閲�:" prop="dailyMaxCount">
+                <ProFormInputNumber
+                  :controls="false"
+                  :min="0"
+                  v-model="form.dailyMaxCount"
+                  placeholder="璇疯緭鍏�"
+                ></ProFormInputNumber>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="閫氶亾閰嶇疆:" prop="accesses">
+                <div class="access-list">
+                  <div class="access-item" v-for="(item, index) in form.accesses" :key="index">
+                    <div class="access-item-label">
+                      {{ EnumSmsAccessTextUseInSms[item.access] }}
+                    </div>
+                    <ProFormRadio
+                      v-model="item.isDisabled"
+                      :value-enum="BooleanOptions"
+                      :button-style="false"
+                    ></ProFormRadio>
+                    <ProFormInputNumber
+                      :controls="false"
+                      :min="0"
+                      v-model="item.sort"
+                      placeholder="璇疯緭鍏�"
+                    ></ProFormInputNumber>
+                  </div>
+                </div>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+        </ProForm>
+        <template #footer>
+          <el-button type="primary" v-if="isRead" @click="isRead = false">缂栬緫</el-button>
+          <el-button type="primary" v-else @click="handleConfirm">纭</el-button>
+        </template>
+      </PageFormLayout>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  LoadingLayout,
+  AppContainer,
+  PageFormLayout,
+  ProForm,
+  ProFormCol,
+  ProFormColItem,
+  ProFormItemV2,
+  ProFormInputNumber,
+  ProFormRadio,
+} from '@bole-core/components';
+import { useQuery } from '@tanstack/vue-query';
+import * as smsServices from '@/services/api/sms';
+import { BooleanOptions, EnumSmsAccessTextUseInSms } from '@/constants';
+import { FormInstance } from 'element-plus';
+import { Message } from '@bole-core/core';
+
+defineOptions({
+  name: 'SmsSettingManage',
+});
+
+const form = reactive({
+  isDisabled: false,
+  withoutParams: false,
+  minutelyMaxCount: 0,
+  hourlyMaxCount: 0,
+  dailyMaxCount: 0,
+  accesses: [] as API.SaveSmsSettingCommandAccess[],
+});
+
+const isRead = ref(true);
+
+const { isLoading } = useQuery({
+  queryKey: ['smsServices/getSmsSetting'],
+  queryFn: async () => {
+    return await smsServices.getSmsSetting(
+      {},
+      {
+        showLoading: false,
+      }
+    );
+  },
+  placeholderData: () => ({} as API.GetSmsSettingQueryResult),
+  onSuccess(data) {
+    form.isDisabled = data.isDisabled;
+    form.withoutParams = data.withoutParams;
+    form.minutelyMaxCount = data.minutelyMaxCount;
+    form.hourlyMaxCount = data.hourlyMaxCount;
+    form.dailyMaxCount = data.dailyMaxCount;
+    form.accesses = data.accesses;
+  },
+});
+
+const formRef = ref<FormInstance>();
+
+function handleConfirm() {
+  if (!formRef.value) return;
+  formRef.value.validate((valid) => {
+    if (valid) {
+      submit();
+    } else {
+      return;
+    }
+  });
+}
+
+async function submit() {
+  try {
+    let params: API.SaveSmsSettingCommand = {
+      isDisabled: form.isDisabled,
+      withoutParams: form.withoutParams,
+      minutelyMaxCount: form.minutelyMaxCount,
+      hourlyMaxCount: form.hourlyMaxCount,
+      dailyMaxCount: form.dailyMaxCount,
+      accesses: form.accesses,
+    };
+    let res = await smsServices.saveSmsSetting(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      isRead.value = true;
+    }
+  } catch (error) {}
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+
+.access-list {
+  flex: 1;
+  min-width: 0;
+
+  :deep() {
+    .el-form-item__content {
+      flex-direction: column;
+      align-items: flex-start;
+    }
+  }
+}
+
+.access-item {
+  display: flex;
+  align-items: center;
+  margin-bottom: 10px;
+
+  .access-item-label {
+    margin-right: 20px;
+    word-break: keep-all;
+  }
+
+  :deep() {
+    .el-radio-group {
+      margin-right: 20px;
+    }
+  }
+}
+</style>
diff --git a/src/views/TraceIdLogManage/DbAuditLogs.vue b/src/views/TraceIdLogManage/DbAuditLogs.vue
new file mode 100644
index 0000000..9b62f3a
--- /dev/null
+++ b/src/views/TraceIdLogManage/DbAuditLogs.vue
@@ -0,0 +1,230 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="鎿嶄綔">
+            <FieldRadio
+              v-model="extraParamState.operate"
+              :value-enum="EnumDbAuditOperateText"
+              buttonStyle
+              showAllBtn
+              :all-btn-value="null"
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="鍒涘缓鏃堕棿">
+            <FieldDatePicker
+              v-model="extraParamState.createdTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="寮�濮嬫椂闂�"
+              end-placeholder="缁撴潫鏃堕棿"
+              clearable
+              @change="getList()"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.createdUser"
+              style="width: 260px"
+              placeholder="鎿嶄綔浜篶reatedUser"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.traceId"
+              style="width: 260px"
+              placeholder="璺熻釜Id(traceId)"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.tableName"
+              style="width: 260px"
+              placeholder="琛ㄥ悕tableName"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.primaryKey"
+              style="width: 260px"
+              placeholder="涓婚敭primaryKey"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.oldValues"
+              style="width: 260px"
+              placeholder="鏃у�紀ldValues"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.newValues"
+              style="width: 260px"
+              placeholder="鏂板�糿ewValues"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+        <template #oldValues="{ row }">
+          <el-button
+            v-if="row.oldValues"
+            type="primary"
+            link
+            @click="handleAdd({ json: { oldValues: JSON.parse(row.oldValues) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #newValues="{ row }">
+          <el-button
+            v-if="row.newValues"
+            type="primary"
+            link
+            @click="handleAdd({ json: { newValues: JSON.parse(row.newValues) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #createdUser="{ row }">
+          <el-button
+            v-if="row.createdUser"
+            type="primary"
+            link
+            @click="
+              handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })
+            "
+            >鏌ョ湅</el-button
+          >
+        </template>
+      </ProTableV2>
+      <JsonViewerDialog v-bind="dialogProps" />
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  ProTableV2,
+  FieldRadio,
+  FieldDatePicker,
+  useFormDialog,
+} from '@bole-core/components';
+import { EnumDbAuditOperateText } from '@/constants';
+import * as logRecordsServices from '@/services/api/logRecords';
+import { ModelValueType } from 'element-plus';
+import { format } from '@/utils';
+import JsonViewerDialog from './components/JsonViewerDialog.vue';
+
+defineOptions({
+  name: 'DbAuditLogs',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: { emits: { onClick: (role) => openDialog(role) } },
+};
+
+const { column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetDbAuditLogsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          // orderInput: extraParamState.orderInput,
+        },
+        createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        createdUser: extraParamState.createdUser,
+        traceId: extraParamState.traceId,
+        tableName: extraParamState.tableName,
+        primaryKey: extraParamState.primaryKey,
+        operate: extraParamState.operate,
+        oldValues: extraParamState.oldValues,
+        newValues: extraParamState.newValues,
+      };
+      let res = await logRecordsServices.getDbAuditLogs(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      createdUser: '',
+      traceId: '',
+      operate: '' as any as EnumDbAuditOperate,
+      tableName: '',
+      primaryKey: '',
+      oldValues: '',
+      newValues: '',
+      createdTime: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
+      operate: { type: 'enum', valueEnum: EnumDbAuditOperateText },
+    },
+  }
+);
+
+const { dialogProps, handleAdd } = useFormDialog({
+  defaultFormParams: {
+    json: null,
+  },
+});
+
+function openDialog(row: API.GetDbAuditLogsQueryResultItem) {
+  handleAdd({
+    json: {
+      oldValues: JSON.parse(row.oldValues),
+      newValues: JSON.parse(row.newValues),
+      createdUser: JSON.parse(JSON.stringify(row.createdUser)),
+    },
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/TraceIdLogManage/ExceptionLogs.vue b/src/views/TraceIdLogManage/ExceptionLogs.vue
new file mode 100644
index 0000000..b6e0c69
--- /dev/null
+++ b/src/views/TraceIdLogManage/ExceptionLogs.vue
@@ -0,0 +1,185 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="鍒涘缓鏃堕棿">
+            <FieldDatePicker
+              v-model="extraParamState.createdTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="寮�濮嬫椂闂�"
+              end-placeholder="缁撴潫鏃堕棿"
+              clearable
+              @change="getList()"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.createdUser"
+              style="width: 260px"
+              placeholder="鎿嶄綔浜篶reatedUser"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.traceId"
+              style="width: 260px"
+              placeholder="璺熻釜Id(traceId)"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.type"
+              style="width: 260px"
+              placeholder="绫诲瀷type"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.code"
+              style="width: 260px"
+              placeholder="浠g爜code"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.message"
+              style="width: 260px"
+              placeholder="娑堟伅message"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+        <template #createdUser="{ row }">
+          <el-button
+            v-if="row.createdUser"
+            type="primary"
+            link
+            @click="
+              handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })
+            "
+            >鏌ョ湅</el-button
+          >
+        </template>
+      </ProTableV2>
+      <JsonViewerDialog v-bind="dialogProps" />
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  ProTableV2,
+  FieldRadio,
+  FieldDatePicker,
+  useFormDialog,
+} from '@bole-core/components';
+import * as logRecordsServices from '@/services/api/logRecords';
+import { ModelValueType } from 'element-plus';
+import { format } from '@/utils';
+import JsonViewerDialog from './components/JsonViewerDialog.vue';
+
+defineOptions({
+  name: 'ExceptionLogs',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: { emits: { onClick: (role) => openDialog(role) } },
+};
+
+const { column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetExceptionLogsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          // orderInput: extraParamState.orderInput,
+        },
+        createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        createdUser: extraParamState.createdUser,
+        traceId: extraParamState.traceId,
+        type: extraParamState.type,
+        code: extraParamState.code,
+        message: extraParamState.message,
+      };
+      let res = await logRecordsServices.getExceptionLogs(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      createdUser: '',
+      traceId: '',
+      type: '',
+      code: '',
+      message: '',
+      createdTime: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
+    },
+  }
+);
+
+const { dialogProps, handleAdd } = useFormDialog({
+  defaultFormParams: {
+    json: null,
+  },
+});
+
+function openDialog(row: API.GetResourceLogsQueryResultItem) {
+  handleAdd({
+    json: {
+      createdUser: JSON.parse(JSON.stringify(row.createdUser)),
+    },
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/TraceIdLogManage/ResourceLogs.vue b/src/views/TraceIdLogManage/ResourceLogs.vue
new file mode 100644
index 0000000..ff92f5e
--- /dev/null
+++ b/src/views/TraceIdLogManage/ResourceLogs.vue
@@ -0,0 +1,281 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="鏄惁鎴愬姛">
+            <FieldRadio
+              v-model="extraParamState.isSuccess"
+              :value-enum="[
+                { label: '鎴愬姛', value: true },
+                { label: '澶辫触', value: false },
+              ]"
+              buttonStyle
+              showAllBtn
+              :all-btn-value="null"
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="鍒涘缓鏃堕棿">
+            <FieldDatePicker
+              v-model="extraParamState.createdTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="寮�濮嬫椂闂�"
+              end-placeholder="缁撴潫鏃堕棿"
+              clearable
+              @change="getList()"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.createdUser"
+              style="width: 260px"
+              placeholder="鎿嶄綔浜篶reatedUser"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.traceId"
+              style="width: 260px"
+              placeholder="璺熻釜Id(traceId)"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.domain"
+              style="width: 260px"
+              placeholder="鍩熷悕domain"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.path"
+              style="width: 260px"
+              placeholder="鍦板潃path"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.request"
+              style="width: 260px"
+              placeholder="璇锋眰鍙傛暟request"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.response"
+              style="width: 260px"
+              placeholder="鍝嶅簲缁撴灉response"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.clientIpAddress"
+              style="width: 260px"
+              placeholder="瀹㈡埛绔疘P鍦板潃clientIpAddress"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.elapsedMillisecondsMin"
+              style="width: 260px"
+              placeholder="鏈�灏忚�楁椂姣鏁癳lapsedMillisecondsMin"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+        <template #requestHeaders="{ row }">
+          <el-button
+            v-if="row.requestHeaders"
+            type="primary"
+            link
+            @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #request="{ row }">
+          <el-button
+            v-if="row.request"
+            type="primary"
+            link
+            @click="handleAdd({ json: { request: JSON.parse(row.request) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #responseHeaders="{ row }">
+          <el-button
+            v-if="row.responseHeaders"
+            type="primary"
+            link
+            @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #response="{ row }">
+          <el-button
+            v-if="row.response"
+            type="primary"
+            link
+            @click="handleAdd({ json: { response: JSON.parse(row.response) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #createdUser="{ row }">
+          <el-button
+            v-if="row.createdUser"
+            type="primary"
+            link
+            @click="
+              handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })
+            "
+            >鏌ョ湅</el-button
+          >
+        </template>
+      </ProTableV2>
+      <JsonViewerDialog v-bind="dialogProps" />
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  ProTableV2,
+  FieldRadio,
+  FieldDatePicker,
+  useFormDialog,
+} from '@bole-core/components';
+import * as logRecordsServices from '@/services/api/logRecords';
+import { ModelValueType } from 'element-plus';
+import { format } from '@/utils';
+import JsonViewerDialog from './components/JsonViewerDialog.vue';
+
+defineOptions({
+  name: 'ResourceLogs',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: { emits: { onClick: (role) => openDialog(role) } },
+};
+
+const { column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetResourceLogsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          // orderInput: extraParamState.orderInput,
+        },
+        createdUser: extraParamState.createdUser,
+        createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        traceId: extraParamState.traceId,
+        method: extraParamState.method,
+        domain: extraParamState.domain,
+        path: extraParamState.path,
+        request: extraParamState.request,
+        response: extraParamState.response,
+        isSuccess: extraParamState.isSuccess,
+        clientIpAddress: extraParamState.clientIpAddress,
+        elapsedMillisecondsMin: extraParamState.elapsedMillisecondsMin,
+      };
+      let res = await logRecordsServices.getResourceLogs(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      createdUser: '',
+      traceId: '',
+      method: '' as any as EnumResourceMethod,
+      domain: '',
+      path: '',
+      request: '',
+      response: '',
+      isSuccess: null as any as boolean,
+      clientIpAddress: '',
+      elapsedMillisecondsMin: null,
+      createdTime: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
+      method: { type: 'enum', valueEnum: EnumResourceMethodText },
+      isSuccess: {
+        formatter: (row: API.GetResourceLogsQueryResultItem) => {
+          return row.isSuccess ? '鏄�' : '鍚�';
+        },
+      },
+    },
+  }
+);
+
+const { dialogProps, handleAdd } = useFormDialog({
+  defaultFormParams: {
+    json: null,
+  },
+});
+
+function openDialog(row: API.GetResourceLogsQueryResultItem) {
+  handleAdd({
+    json: {
+      requestHeaders: JSON.parse(row.requestHeaders),
+      request: JSON.parse(row.request),
+      responseHeaders: JSON.parse(row.responseHeaders),
+      response: JSON.parse(row.response),
+      createdUser: JSON.parse(JSON.stringify(row.createdUser)),
+    },
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/TraceIdLogManage/ThreeResourceLogs.vue b/src/views/TraceIdLogManage/ThreeResourceLogs.vue
new file mode 100644
index 0000000..0f2115a
--- /dev/null
+++ b/src/views/TraceIdLogManage/ThreeResourceLogs.vue
@@ -0,0 +1,281 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="鏄惁鎴愬姛">
+            <FieldRadio
+              v-model="extraParamState.isSuccess"
+              :value-enum="[
+                { label: '鎴愬姛', value: true },
+                { label: '澶辫触', value: false },
+              ]"
+              buttonStyle
+              showAllBtn
+              :all-btn-value="null"
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="鍒涘缓鏃堕棿">
+            <FieldDatePicker
+              v-model="extraParamState.createdTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="寮�濮嬫椂闂�"
+              end-placeholder="缁撴潫鏃堕棿"
+              clearable
+              @change="getList()"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.createdUser"
+              style="width: 260px"
+              placeholder="鎿嶄綔浜篶reatedUser"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.traceId"
+              style="width: 260px"
+              placeholder="璺熻釜Id(traceId)"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.domain"
+              style="width: 260px"
+              placeholder="鍩熷悕domain"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.path"
+              style="width: 260px"
+              placeholder="鍦板潃path"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.request"
+              style="width: 260px"
+              placeholder="璇锋眰鍙傛暟request"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.response"
+              style="width: 260px"
+              placeholder="鍝嶅簲缁撴灉response"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.clientIpAddress"
+              style="width: 260px"
+              placeholder="瀹㈡埛绔疘P鍦板潃clientIpAddress"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.elapsedMillisecondsMin"
+              style="width: 260px"
+              placeholder="鏈�灏忚�楁椂姣鏁癳lapsedMillisecondsMin"
+              @on-click-search="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+        <template #requestHeaders="{ row }">
+          <el-button
+            v-if="row.requestHeaders"
+            type="primary"
+            link
+            @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #request="{ row }">
+          <el-button
+            v-if="row.request"
+            type="primary"
+            link
+            @click="handleAdd({ json: { request: JSON.parse(row.request) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #responseHeaders="{ row }">
+          <el-button
+            v-if="row.responseHeaders"
+            type="primary"
+            link
+            @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #response="{ row }">
+          <el-button
+            v-if="row.response"
+            type="primary"
+            link
+            @click="handleAdd({ json: { response: JSON.parse(row.response) } })"
+            >鏌ョ湅</el-button
+          >
+        </template>
+        <template #createdUser="{ row }">
+          <el-button
+            v-if="row.createdUser"
+            type="primary"
+            link
+            @click="
+              handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })
+            "
+            >鏌ョ湅</el-button
+          >
+        </template>
+      </ProTableV2>
+      <JsonViewerDialog v-bind="dialogProps" />
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  ProTableV2,
+  FieldRadio,
+  FieldDatePicker,
+  useFormDialog,
+} from '@bole-core/components';
+import * as logRecordsServices from '@/services/api/logRecords';
+import { ModelValueType } from 'element-plus';
+import { format } from '@/utils';
+import JsonViewerDialog from './components/JsonViewerDialog.vue';
+
+defineOptions({
+  name: 'ThreeResourceLogs',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: { emits: { onClick: (role) => openDialog(role) } },
+};
+
+const { column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetThreeResourceLogsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          // orderInput: extraParamState.orderInput,
+        },
+        createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        createdUser: extraParamState.createdUser,
+        traceId: extraParamState.traceId,
+        method: extraParamState.method,
+        domain: extraParamState.domain,
+        path: extraParamState.path,
+        request: extraParamState.request,
+        response: extraParamState.response,
+        isSuccess: extraParamState.isSuccess,
+        clientIpAddress: extraParamState.clientIpAddress,
+        elapsedMillisecondsMin: extraParamState.elapsedMillisecondsMin,
+      };
+      let res = await logRecordsServices.getThreeResourceLogs(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      createdUser: '',
+      traceId: '',
+      method: '' as any as EnumResourceMethod,
+      domain: '',
+      path: '',
+      request: '',
+      response: '',
+      isSuccess: null as any as boolean,
+      clientIpAddress: '',
+      elapsedMillisecondsMin: null,
+      createdTime: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
+      method: { type: 'enum', valueEnum: EnumResourceMethodText },
+      isSuccess: {
+        formatter: (row: API.GetResourceLogsQueryResultItem) => {
+          return row.isSuccess ? '鏄�' : '鍚�';
+        },
+      },
+    },
+  }
+);
+
+const { dialogProps, handleAdd } = useFormDialog({
+  defaultFormParams: {
+    json: null,
+  },
+});
+
+function openDialog(row: API.GetResourceLogsQueryResultItem) {
+  handleAdd({
+    json: {
+      requestHeaders: JSON.parse(row.requestHeaders),
+      request: JSON.parse(row.request),
+      responseHeaders: JSON.parse(row.responseHeaders),
+      response: JSON.parse(row.response),
+      createdUser: JSON.parse(JSON.stringify(row.createdUser)),
+    },
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/TraceIdLogManage/components/DbAuditLogsView.vue b/src/views/TraceIdLogManage/components/DbAuditLogsView.vue
index 5d6f420..4521b6a 100644
--- a/src/views/TraceIdLogManage/components/DbAuditLogsView.vue
+++ b/src/views/TraceIdLogManage/components/DbAuditLogsView.vue
@@ -1,44 +1,4 @@
 <template>
-  <!-- <el-collapse v-model="activeName" accordion>
-    <el-collapse-item
-      v-for="item in dbAuditLogs"
-      :key="item.createdTime"
-      name="1"
-      style="overflow: auto; max-height: 600px"
-    >
-      <ProForm :model="item" is-read>
-        <ProFormItemV2 label="tableName:">
-          {{ item.tableName }}
-        </ProFormItemV2>
-        <ProFormItemV2 label="primaryKey:">{{ item.primaryKey }} </ProFormItemV2>
-        <ProFormItemV2 label="operate:"> {{ EnumDbAuditOperateText[item.operate] }}</ProFormItemV2>
-        <ProFormItemV2 label="oldValues:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.oldValues)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="newValues:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.newValues)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="createdUser:">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(JSON.stringify(item.createdUser))"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="createdTime:">
-          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
-        >
-      </ProForm>
-    </el-collapse-item>
-  </el-collapse> -->
   <AppContainer>
     <ProTableV2
       :columns="columns"
@@ -47,12 +7,18 @@
       :column-render-map="columnsRenderProps"
     >
       <template #oldValues="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.stringify(row.oldValues) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { oldValues: JSON.parse(row.oldValues) } })"
           >鏌ョ湅</el-button
         >
       </template>
       <template #newValues="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.stringify(row.newValues) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { newValues: JSON.parse(row.newValues) } })"
           >鏌ョ湅</el-button
         >
       </template>
@@ -60,7 +26,7 @@
         <el-button
           type="primary"
           link
-          @click="handleAdd({ json: JSON.parse(JSON.stringify(row.createdUser)) })"
+          @click="handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })"
           >鏌ョ湅</el-button
         >
       </template>
@@ -76,6 +42,7 @@
   defineColumns,
   ProTableV2Props,
   useFormDialog,
+  defineOperationBtns,
 } from '@bole-core/components';
 import JsonViewerDialog from './JsonViewerDialog.vue';
 
@@ -107,6 +74,18 @@
   }))
 );
 
+const operationBtns = defineOperationBtns([
+  {
+    data: {
+      enCode: 'detailBtn',
+      name: '鏌ョ湅',
+    },
+    emits: {
+      onClick: (role) => openDialog(role),
+    },
+  },
+]);
+
 const columnsRenderProps: ProTableV2Props['columnRenderMap'] = {
   operate: { type: 'enum', valueEnum: EnumDbAuditOperateText },
   createdTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
@@ -117,6 +96,16 @@
     json: null,
   },
 });
+
+function openDialog(row: API.GetDbAuditLogsQueryResultItem) {
+  handleAdd({
+    json: {
+      oldValues: JSON.parse(row.oldValues),
+      newValues: JSON.parse(row.newValues),
+      createdUser: JSON.parse(JSON.stringify(row.createdUser)),
+    },
+  });
+}
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/TraceIdLogManage/components/ExceptionLogsView.vue b/src/views/TraceIdLogManage/components/ExceptionLogsView.vue
index 1181afd..6625456 100644
--- a/src/views/TraceIdLogManage/components/ExceptionLogsView.vue
+++ b/src/views/TraceIdLogManage/components/ExceptionLogsView.vue
@@ -1,31 +1,4 @@
 <template>
-  <!-- <el-collapse v-model="activeName" accordion>
-    <el-collapse-item
-      v-for="item in exceptionLogs"
-      :key="item.createdTime"
-      name="1"
-      style="overflow: auto; max-height: 600px"
-    >
-      <ProForm :model="item" is-read>
-        <ProFormItemV2 label="type:">
-          {{ item.type }}
-        </ProFormItemV2>
-        <ProFormItemV2 label="code:">{{ item.code }} </ProFormItemV2>
-        <ProFormItemV2 label="message:"> {{ item.message }}</ProFormItemV2>
-        <ProFormItemV2 label="stackTrace:"> {{ item.stackTrace }}</ProFormItemV2>
-        <ProFormItemV2 label="createdUser:">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(JSON.stringify(item.createdUser))"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="createdTime:">
-          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
-        >
-      </ProForm>
-    </el-collapse-item>
-  </el-collapse> -->
   <AppContainer>
     <ProTableV2
       :columns="columns"
diff --git a/src/views/TraceIdLogManage/components/JsonViewerDialog.vue b/src/views/TraceIdLogManage/components/JsonViewerDialog.vue
index 013001b..5346c74 100644
--- a/src/views/TraceIdLogManage/components/JsonViewerDialog.vue
+++ b/src/views/TraceIdLogManage/components/JsonViewerDialog.vue
@@ -1,12 +1,23 @@
 <template>
   <ProDialog title="鏌ョ湅" v-model="visible" destroy-on-close draggable>
-    <json-viewer
-      :copyable="true"
-      :boxed="true"
-      :preview-mode="true"
-      :value="form.json"
-      expanded
-    ></json-viewer>
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <ProFormItemV2
+        v-for="(item, index) in jsonList"
+        :label="`${item}锛歚"
+        :key="index"
+        prop="electronSignAccesses"
+        required
+      >
+        <json-viewer
+          :copyable="true"
+          :boxed="true"
+          :preview-mode="true"
+          :value="form.json?.[item]"
+          expanded
+        ></json-viewer>
+      </ProFormItemV2>
+    </ProForm>
+
     <template #footer>
       <span class="dialog-footer">
         <el-button @click="emit('onCancel')">鍙� 娑�</el-button>
@@ -17,7 +28,7 @@
 </template>
 
 <script setup lang="ts">
-import { ProDialog } from '@bole-core/components';
+import { ProDialog, ProForm, ProFormItemV2 } from '@bole-core/components';
 import JsonViewer from 'vue-json-viewer';
 
 defineOptions({
@@ -37,6 +48,10 @@
 
 const form = defineModel<Form>('form');
 
+const jsonList = computed(() => {
+  return Object.keys(form.value.json);
+});
+
 const emit = defineEmits<{
   (e: 'onConfirm'): void;
   (e: 'onCancel'): void;
diff --git a/src/views/TraceIdLogManage/components/ResourceLogsView.vue b/src/views/TraceIdLogManage/components/ResourceLogsView.vue
index 1c2096b..f7b9f3c 100644
--- a/src/views/TraceIdLogManage/components/ResourceLogsView.vue
+++ b/src/views/TraceIdLogManage/components/ResourceLogsView.vue
@@ -1,66 +1,4 @@
 <template>
-  <!-- <el-collapse v-model="activeName" accordion>
-    <el-collapse-item
-      v-for="item in resourceLogs"
-      :key="item.id"
-      name="1"
-      style="overflow: auto; max-height: 600px"
-    >
-      <template #title>
-        <el-button type="primary" @click="resend(item.id)" link>閲嶆柊鍙戦��</el-button>
-      </template>
-      <ProForm :model="item" is-read style="padding: 0 20px">
-        <ProFormItemV2 label="method:">
-          {{ EnumResourceMethodText[item.method] }}
-        </ProFormItemV2>
-        <ProFormItemV2 label="domain:">{{ item.domain }} </ProFormItemV2>
-        <ProFormItemV2 label="path:"> {{ item.path }}</ProFormItemV2>
-        <ProFormItemV2 label="requestHeaders:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.requestHeaders)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="request:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.request)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="responseHeaders:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.responseHeaders)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="response:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.response)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="isSuccess:"> {{ item.isSuccess ? '鏄�' : '鍚�' }}</ProFormItemV2>
-        <ProFormItemV2 label="clientIpAddress:"> {{ item.clientIpAddress }}</ProFormItemV2>
-        <ProFormItemV2 label="refererUrl:"> {{ item.refererUrl }}</ProFormItemV2>
-        <ProFormItemV2 label="consoleLogs:"> {{ item.consoleLogs }}</ProFormItemV2>
-        <ProFormItemV2 label="elapsedMilliseconds:"> {{ item.elapsedMilliseconds }}</ProFormItemV2>
-        <ProFormItemV2 label="createdUser:">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(JSON.stringify(item.createdUser))"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="createdTime:">
-          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
-        >
-      </ProForm>
-    </el-collapse-item>
-  </el-collapse> -->
   <AppContainer>
     <ProTableV2
       :columns="columns"
@@ -70,22 +8,34 @@
       :column-render-map="columnsRenderProps"
     >
       <template #requestHeaders="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.requestHeaders) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })"
           >鏌ョ湅</el-button
         >
       </template>
       <template #request="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.request) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { request: JSON.parse(row.request) } })"
           >鏌ョ湅</el-button
         >
       </template>
       <template #responseHeaders="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.responseHeaders) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })"
           >鏌ョ湅</el-button
         >
       </template>
       <template #response="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.response) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { response: JSON.parse(row.response) } })"
           >鏌ョ湅</el-button
         >
       </template>
@@ -93,7 +43,7 @@
         <el-button
           type="primary"
           link
-          @click="handleAdd({ json: JSON.parse(JSON.stringify(row.createdUser)) })"
+          @click="handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })"
           >鏌ョ湅</el-button
         >
       </template>
@@ -115,6 +65,7 @@
 import * as logRecordsServices from '@/services/api/logRecords';
 import { Message } from '@bole-core/core';
 import JsonViewerDialog from './JsonViewerDialog.vue';
+import { request } from 'http';
 
 defineOptions({
   name: 'ResourceLogsView',
@@ -155,6 +106,15 @@
 const operationBtns = defineOperationBtns([
   {
     data: {
+      enCode: 'detailBtn',
+      name: '鏌ョ湅',
+    },
+    emits: {
+      onClick: (role) => openDialog(role),
+    },
+  },
+  {
+    data: {
       enCode: 'reSendBtn',
       name: '閲嶆柊鍙戦��',
     },
@@ -189,6 +149,18 @@
     }
   } catch (error) {}
 }
+
+function openDialog(row: API.GetResourceLogsQueryResultItem) {
+  handleAdd({
+    json: {
+      requestHeaders: row.requestHeaders,
+      request: row.request,
+      responseHeaders: row.responseHeaders,
+      response: row.response,
+      createdUser: JSON.stringify(row.createdUser),
+    },
+  });
+}
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue b/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue
index e650493..333817d 100644
--- a/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue
+++ b/src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue
@@ -1,84 +1,40 @@
 <template>
-  <!-- <el-collapse v-model="activeName" accordion>
-    <el-collapse-item
-      v-for="item in threeResourceLogs"
-      :key="item.id"
-      name="1"
-      style="overflow: auto; max-height: 600px"
-    >
-      <ProForm :model="item" is-read>
-        <ProFormItemV2 label="method:">
-          {{ EnumResourceMethodText[item.method] }}
-        </ProFormItemV2>
-        <ProFormItemV2 label="domain:">{{ item.domain }} </ProFormItemV2>
-        <ProFormItemV2 label="path:"> {{ item.path }}</ProFormItemV2>
-        <ProFormItemV2 label="requestHeaders:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.requestHeaders)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="request:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.request)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="responseHeaders:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.responseHeaders)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="response:" label-position="top">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(item.response)"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="isSuccess:"> {{ item.isSuccess ? '鏄�' : '鍚�' }}</ProFormItemV2>
-        <ProFormItemV2 label="elapsedMilliseconds:"> {{ item.elapsedMilliseconds }}</ProFormItemV2>
-        <ProFormItemV2 label="createdUser:">
-          <json-viewer
-            :copyable="true"
-            :boxed="true"
-            :value="JSON.parse(JSON.stringify(item.createdUser))"
-          ></json-viewer>
-        </ProFormItemV2>
-        <ProFormItemV2 label="createdTime:">
-          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
-        >
-      </ProForm>
-    </el-collapse-item>
-  </el-collapse> -->
   <AppContainer>
     <ProTableV2
       :columns="columns"
-      :show-pagination="false"
+      :operationBtns="operationBtns"
       :table-data="threeResourceLogs"
       :column-render-map="columnsRenderProps"
     >
       <template #requestHeaders="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.requestHeaders) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { requestHeaders: JSON.parse(row.requestHeaders) } })"
           >鏌ョ湅</el-button
         >
       </template>
       <template #request="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.request) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { request: JSON.parse(row.request) } })"
           >鏌ョ湅</el-button
         >
       </template>
       <template #responseHeaders="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.responseHeaders) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { responseHeaders: JSON.parse(row.responseHeaders) } })"
           >鏌ョ湅</el-button
         >
       </template>
       <template #response="{ row }">
-        <el-button type="primary" link @click="handleAdd({ json: JSON.parse(row.response) })"
+        <el-button
+          type="primary"
+          link
+          @click="handleAdd({ json: { response: JSON.parse(row.response) } })"
           >鏌ョ湅</el-button
         >
       </template>
@@ -86,7 +42,7 @@
         <el-button
           type="primary"
           link
-          @click="handleAdd({ json: JSON.parse(JSON.stringify(row.createdUser)) })"
+          @click="handleAdd({ json: { createdUser: JSON.parse(JSON.stringify(row.createdUser)) } })"
           >鏌ョ湅</el-button
         >
       </template>
@@ -102,6 +58,7 @@
   defineColumns,
   ProTableV2Props,
   useFormDialog,
+  defineOperationBtns,
 } from '@bole-core/components';
 import { EnumResourceMethodText } from '@/constants';
 import JsonViewerDialog from './JsonViewerDialog.vue';
@@ -138,6 +95,18 @@
   }))
 );
 
+const operationBtns = defineOperationBtns([
+  {
+    data: {
+      enCode: 'detailBtn',
+      name: '鏌ョ湅',
+    },
+    emits: {
+      onClick: (role) => openDialog(role),
+    },
+  },
+]);
+
 const columnsRenderProps: ProTableV2Props['columnRenderMap'] = {
   method: { type: 'enum', valueEnum: EnumResourceMethodText },
   isSuccess: {
@@ -153,4 +122,16 @@
     json: null,
   },
 });
+
+function openDialog(row: API.GetResourceLogsQueryResultItem) {
+  handleAdd({
+    json: {
+      requestHeaders: JSON.parse(row.requestHeaders),
+      request: JSON.parse(row.request),
+      responseHeaders: JSON.parse(row.responseHeaders),
+      response: JSON.parse(row.response),
+      createdUser: JSON.parse(JSON.stringify(row.createdUser)),
+    },
+  });
+}
 </script>

--
Gitblit v1.9.1