wupengfei
2025-09-29 588f577a14b2a51663d43f3bf2f303862d65b932
feat: 短信
6个文件已添加
16个文件已修改
2306 ■■■■ 已修改文件
.eslintrc-auto-import.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
auto-imports.d.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/apiEnum.ts 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/enterprise.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/electronSign.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/enterpriseWallet.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/index.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/logRecords.ts 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/ocrUtils.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/sms.ts 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 548 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EnterpriseManage/components/WechatConfigureView.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/System/SmsSettingManage.vue 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/DbAuditLogs.vue 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/ExceptionLogs.vue 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/ResourceLogs.vue 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/ThreeResourceLogs.vue 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/DbAuditLogsView.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/ExceptionLogsView.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/JsonViewerDialog.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/ResourceLogsView.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.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,
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']>
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,
}
/** 企业用量扣费状态 */
@@ -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,
}
/** 任务结算状态 */
src/constants/enterprise.ts
@@ -74,6 +74,11 @@
  [EnumSmsAccess.AliyunSms]: '阿里云',
};
export const EnumSmsAccessTextUseInSms = {
  [EnumSmsAccess.AliyunSms]: '阿里云',
  [EnumSmsAccess.ChengLiYe]: '诚立业',
};
export const EnumRealAccessText = {
  [EnumRealAccess.BestSign]: '上上签',
  [EnumRealAccess.AlipaySign]: '支付宝信任签',
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', {
  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 */
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 || {}),
  });
}
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,
};
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 || {}),
  });
}
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,
src/services/api/sms.ts
New file
@@ -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 || {}),
  });
}
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;
    /** 代码 */
    code?: string;
    /** 消息 */
    message?: string;
    pageModel?: PagedListQueryPageModel;
  }
@@ -3576,6 +3806,10 @@
  }
  interface GetExceptionLogsQueryResultItem {
    /** Id */
    id?: string;
    /** 跟踪Id */
    traceId?: string;
    /** 类型 */
    type?: string;
    /** 代码 */
@@ -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;
    /** 客户端IP地址 */
    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;
    /** 模板代码 */
    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;
    /** 模板代码 */
    templateCode?: string;
    /** 模板参数 */
    templateParam?: string;
    /** 有效期 */
    expiry?: string;
    /** 是否使用 */
    isUsed?: boolean;
    status?: EnumSmsStatus;
    /** 请求Id */
    requestId?: string;
    /** 回传代码 */
    code?: string;
    /** 回传消息 */
    message?: string;
    /** 操作人Id */
    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;
    /** 客户端IP地址 */
    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 {
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>
src/views/System/SmsSettingManage.vue
New file
@@ -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>
src/views/TraceIdLogManage/DbAuditLogs.vue
New file
@@ -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="操作人createdUser"
              @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="旧值oldValues"
              @on-click-search="getList()"
            >
            </SearchInput>
          </QueryFilterItem>
          <QueryFilterItem>
            <SearchInput
              v-model="extraParamState.newValues"
              style="width: 260px"
              placeholder="新值newValues"
              @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>
src/views/TraceIdLogManage/ExceptionLogs.vue
New file
@@ -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="操作人createdUser"
              @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="代码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>
src/views/TraceIdLogManage/ResourceLogs.vue
New file
@@ -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="操作人createdUser"
              @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="客户端IP地址clientIpAddress"
              @on-click-search="getList()"
            >
            </SearchInput>
          </QueryFilterItem>
          <QueryFilterItem>
            <SearchInput
              v-model="extraParamState.elapsedMillisecondsMin"
              style="width: 260px"
              placeholder="最小耗时毫秒数elapsedMillisecondsMin"
              @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>
src/views/TraceIdLogManage/ThreeResourceLogs.vue
New file
@@ -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="操作人createdUser"
              @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="客户端IP地址clientIpAddress"
              @on-click-search="getList()"
            >
            </SearchInput>
          </QueryFilterItem>
          <QueryFilterItem>
            <SearchInput
              v-model="extraParamState.elapsedMillisecondsMin"
              style="width: 260px"
              placeholder="最小耗时毫秒数elapsedMillisecondsMin"
              @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>
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>
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"
src/views/TraceIdLogManage/components/JsonViewerDialog.vue
@@ -1,12 +1,23 @@
<template>
  <ProDialog title="查看" v-model="visible" destroy-on-close draggable>
    <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"
          :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;
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>
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>