wupengfei
2025-09-24 ce190a7e169e6e632a89a952ec94f0a308ccf724
feat: 页面
7个文件已添加
12个文件已修改
864 ■■■■■ 已修改文件
.eslintrc-auto-import.json 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
auto-imports.d.ts 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pnpm-lock.yaml 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/apiEnum.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/enterprise.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/logs.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/enterpriseWallet.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/logRecords.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/user.ts 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EnterpriseManage/components/ConfigureDialog.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EnterpriseManage/components/WechatConfigureView.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/TraceIdLogManageList.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/DbAuditLogsView.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/ExceptionLogsView.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/ResourceLogsView.vue 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.eslintrc-auto-import.json
@@ -66,6 +66,7 @@
    "EnumRealAccessText": true,
    "EnumResourceController": true,
    "EnumResourceMethod": true,
    "EnumResourceMethodText": true,
    "EnumRoleWebApiDataPower": true,
    "EnumRoleWebApiDataPowerText": true,
    "EnumRoleWebApiDataPowerTextForFilter": true,
@@ -93,6 +94,7 @@
    "EnumTaskUserSignContractStatus": true,
    "EnumTaskUserSignContractStatusText": true,
    "EnumTaskUserSubmitCheckReceiveStatus": true,
    "EnumUserBankCardAccess": true,
    "EnumUserGender": true,
    "EnumUserGenderText": true,
    "EnumUserGenderTextForPerson": true,
auto-imports.d.ts
@@ -69,6 +69,7 @@
  const EnumRealAccessText: typeof import('./src/constants/enterprise')['EnumRealAccessText']
  const EnumResourceController: typeof import('./src/constants/apiEnum')['EnumResourceController']
  const EnumResourceMethod: typeof import('./src/constants/apiEnum')['EnumResourceMethod']
  const EnumResourceMethodText: typeof import('./src/constants/logs')['EnumResourceMethodText']
  const EnumRoleWebApiDataPower: typeof import('./src/constants/apiEnum')['EnumRoleWebApiDataPower']
  const EnumRoleWebApiDataPowerText: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText']
  const EnumRoleWebApiDataPowerTextForFilter: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter']
@@ -97,6 +98,7 @@
  const EnumTaskUserSignContractStatus: typeof import('./src/constants/apiEnum')['EnumTaskUserSignContractStatus']
  const EnumTaskUserSignContractStatusText: typeof import('./src/constants/enterpriseEmployee')['EnumTaskUserSignContractStatusText']
  const EnumTaskUserSubmitCheckReceiveStatus: typeof import('./src/constants/apiEnum')['EnumTaskUserSubmitCheckReceiveStatus']
  const EnumUserBankCardAccess: typeof import('./src/constants/apiEnum')['EnumUserBankCardAccess']
  const EnumUserGender: typeof import('./src/constants/apiEnum')['EnumUserGender']
  const EnumUserGenderText: typeof import('./src/constants/task')['EnumUserGenderText']
  const EnumUserGenderTextForPerson: typeof import('./src/constants/task')['EnumUserGenderTextForPerson']
@@ -268,7 +270,7 @@
  export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
  import('vue')
  // @ts-ignore
  export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum'
  export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum'
  import('./src/constants/apiEnum')
  // @ts-ignore
  export type { FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum, FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum } from './src/constants/cPerson'
@@ -375,6 +377,7 @@
    readonly EnumRealAccessText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumRealAccessText']>
    readonly EnumResourceController: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumResourceController']>
    readonly EnumResourceMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumResourceMethod']>
    readonly EnumResourceMethodText: UnwrapRef<typeof import('./src/constants/logs')['EnumResourceMethodText']>
    readonly EnumRoleWebApiDataPower: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumRoleWebApiDataPower']>
    readonly EnumRoleWebApiDataPowerText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText']>
    readonly EnumRoleWebApiDataPowerTextForFilter: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter']>
@@ -402,6 +405,7 @@
    readonly EnumTaskUserSignContractStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskUserSignContractStatus']>
    readonly EnumTaskUserSignContractStatusText: UnwrapRef<typeof import('./src/constants/enterpriseEmployee')['EnumTaskUserSignContractStatusText']>
    readonly EnumTaskUserSubmitCheckReceiveStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskUserSubmitCheckReceiveStatus']>
    readonly EnumUserBankCardAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserBankCardAccess']>
    readonly EnumUserGender: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserGender']>
    readonly EnumUserGenderText: UnwrapRef<typeof import('./src/constants/task')['EnumUserGenderText']>
    readonly EnumUserGenderTextForPerson: UnwrapRef<typeof import('./src/constants/task')['EnumUserGenderTextForPerson']>
package.json
@@ -77,6 +77,7 @@
    "vue": "3.5.11",
    "vue-component-type-helpers": "^2.1.6",
    "vue-echarts": "^7.0.3",
    "vue-json-viewer": "^3.0.4",
    "vue-router": "^4.4.5",
    "vue-types": "^5.1.3",
    "xlsx": "0.18.5",
pnpm-lock.yaml
@@ -15,7 +15,7 @@
dependencies:
  '@bole-12333/chat-kit':
    specifier: latest
    version: 1.0.1(@tencentcloud/chat-uikit-engine@2.5.5)(lodash@4.17.21)(vue@3.5.11)
    version: 1.0.1(@tencentcloud/chat-uikit-engine@2.5.6)(lodash@4.17.21)(vue@3.5.11)
  '@bole-12333/customer-chat':
    specifier: latest
    version: 1.0.3(@bole-12333/chat-kit@1.0.1)(@tiptap/core@2.1.13)(@tiptap/extension-document@2.1.13)(@tiptap/extension-image@2.1.13)(@tiptap/extension-mention@2.1.13)(@tiptap/extension-paragraph@2.1.13)(@tiptap/extension-placeholder@2.1.13)(@tiptap/extension-text@2.1.13)(@tiptap/pm@2.1.13)(@tiptap/suggestion@2.1.13)(dayjs@1.11.6)(vue@3.5.11)
@@ -184,6 +184,9 @@
  vue-echarts:
    specifier: ^7.0.3
    version: 7.0.3(echarts@5.5.1)(vue@3.5.11)
  vue-json-viewer:
    specifier: ^3.0.4
    version: 3.0.4(vue@3.5.11)
  vue-router:
    specifier: ^4.4.5
    version: 4.4.5(vue@3.5.11)
@@ -1853,14 +1856,14 @@
      '@babel/helper-validator-identifier': 7.25.9
    dev: false
  /@bole-12333/chat-kit@1.0.1(@tencentcloud/chat-uikit-engine@2.5.5)(lodash@4.17.21)(vue@3.5.11):
  /@bole-12333/chat-kit@1.0.1(@tencentcloud/chat-uikit-engine@2.5.6)(lodash@4.17.21)(vue@3.5.11):
    resolution: {integrity: sha512-yeSh4XLagaM+uNZRdcG49mhDJO3UbYEpIYZS4Lk303ROnTwxuZyuh5jkoflnCFwWN3Ib3AolfQy999oOqF012A==}
    peerDependencies:
      '@tencentcloud/chat-uikit-engine': '*'
      lodash: '*'
      vue: 3.5.11
    dependencies:
      '@tencentcloud/chat-uikit-engine': 2.5.5
      '@tencentcloud/chat-uikit-engine': 2.5.6
      lodash: 4.17.21
      vue: 3.5.11(typescript@4.6.4)
    dev: false
@@ -1881,7 +1884,7 @@
      dayjs: '*'
      vue: 3.5.11
    dependencies:
      '@bole-12333/chat-kit': 1.0.1(@tencentcloud/chat-uikit-engine@2.5.5)(lodash@4.17.21)(vue@3.5.11)
      '@bole-12333/chat-kit': 1.0.1(@tencentcloud/chat-uikit-engine@2.5.6)(lodash@4.17.21)(vue@3.5.11)
      '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
      '@tiptap/extension-document': 2.1.13(@tiptap/core@2.1.13)
      '@tiptap/extension-image': 2.1.13(@tiptap/core@2.1.13)
@@ -3786,8 +3789,8 @@
      '@tencentcloud/tui-core': 2.5.1
    dev: false
  /@tencentcloud/chat-uikit-engine@2.5.5:
    resolution: {integrity: sha512-WWFmtpRwNXgtRXWgb0mhzeigFGZimMbgvi1fVmu9sY5+RtF9RiayC/ESokaMVs591l7mcZf4/BXCQNtUi3eZiQ==}
  /@tencentcloud/chat-uikit-engine@2.5.6:
    resolution: {integrity: sha512-hzGkruR3j5S/9hx7HfGBWvHAZ7FZqpkl5LEz0z9sVm3faG/IaBkeTCjPmvN9kGIdDIan8Jn6mhVW57EEx7E8UQ==}
    dependencies:
      '@tencentcloud/chat': 3.5.9
      tim-profanity-filter-plugin: 1.1.0
@@ -3810,7 +3813,7 @@
      '@tencentcloud/call-uikit-vue': 4.0.9
      '@tencentcloud/call-uikit-vue2': 4.0.9
      '@tencentcloud/call-uikit-vue2.6': 4.0.9(vue@3.5.11)
      '@tencentcloud/chat-uikit-engine': 2.5.5
      '@tencentcloud/chat-uikit-engine': 2.5.6
      '@tencentcloud/tui-core': 2.5.1
      '@tencentcloud/tui-customer-service-plugin': 2.2.6(@tencentcloud/tui-core@2.5.1)(vue@3.5.11)
      '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
@@ -17110,6 +17113,15 @@
      - supports-color
    dev: true
  /vue-json-viewer@3.0.4(vue@3.5.11):
    resolution: {integrity: sha512-pnC080rTub6YjccthVSNQod2z9Sl5IUUq46srXtn6rxwhW8QM4rlYn+CTSLFKXWfw+N3xv77Cioxw7B4XUKIbQ==}
    peerDependencies:
      vue: 3.5.11
    dependencies:
      clipboard: 2.0.11
      vue: 3.5.11(typescript@4.6.4)
    dev: false
  /vue-router@4.4.5(vue@3.5.11):
    resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==}
    peerDependencies:
src/constants/apiEnum.ts
@@ -109,6 +109,8 @@
  Alipay = 10,
  /**平安银行 */
  PingAnPay = 20,
  /**微信 */
  WeChatPay = 30,
}
/** 企业钱包代进件单附件类型 */
@@ -475,6 +477,16 @@
  Fail = 40,
}
/** 用户银行卡通道 */
export enum EnumUserBankCardAccess {
  /**银行卡 */
  Bank = 1,
  /**支付宝 */
  AliPay = 10,
  /**微信 */
  WeChatPay = 20,
}
/** 用户性别 */
export enum EnumUserGender {
  /**男 */
src/constants/enterprise.ts
@@ -20,6 +20,10 @@
   * 短信通道配置
   */
  ShortMessage = 4,
  // /**
  //  * 微信支付配置
  //  */
  // Wechat = 5,
}
export const EnterpriseConfigureTypeText = {
@@ -27,6 +31,7 @@
  [EnterpriseConfigureType.AliPay]: '支付宝配置',
  [EnterpriseConfigureType.Electronic]: '电子签配置',
  [EnterpriseConfigureType.ShortMessage]: '短信通道配置',
  // [EnterpriseConfigureType.Wechat]: '微信支付配置',
};
export enum VerifyStatus {
src/constants/index.ts
@@ -21,3 +21,4 @@
export * from './electronSign';
export * from './enterpriseWallet';
export * from './finance';
export * from './logs';
src/constants/logs.ts
New file
@@ -0,0 +1,7 @@
export const EnumResourceMethodText = {
  [EnumResourceMethod.None]: '无',
  [EnumResourceMethod.Get]: '查询',
  [EnumResourceMethod.Post]: '提交',
  [EnumResourceMethod.Put]: '修改',
  [EnumResourceMethod.Delete]: '删除',
};
src/services/api/enterpriseWallet.ts
@@ -239,6 +239,26 @@
  );
}
/** 查询已签约企业钱包通道选择器数据 GET /api/user/enterpriseWallet/getEnterpriseWalletAccessSelect */
export async function getEnterpriseWalletAccessSelect(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetEnterpriseWalletAccessSelectParams,
  options?: API.RequestConfig
) {
  return request<API.SelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption[]>(
    '/api/user/enterpriseWallet/getEnterpriseWalletAccessSelect',
    {
      method: 'GET',
      params: {
        ...params,
        request: undefined,
        ...params['request'],
      },
      ...(options || {}),
    }
  );
}
/** 查询支付宝资金二级商户KYB代进件单详情 GET /api/user/enterpriseWallet/getEnterpriseWalletExpandindirectOrder */
export async function getEnterpriseWalletExpandindirectOrder(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
src/services/api/logRecords.ts
@@ -41,6 +41,24 @@
  });
}
/** 第三方资源日志分页列表查询 POST /api/common/logRecords/getThreeResourceLogs */
export async function getThreeResourceLogs(
  body: API.GetThreeResourceLogsQuery,
  options?: API.RequestConfig
) {
  return request<API.GetThreeResourceLogsQueryResult>(
    '/api/common/logRecords/getThreeResourceLogs',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 跟踪Id日志查询 GET /api/common/logRecords/getTraceIdLog */
export async function getTraceIdLog(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
src/services/api/typings.d.ts
@@ -112,6 +112,11 @@
    id?: string;
  }
  interface APIgetEnterpriseWalletAccessSelectParams {
    /** 查询已签约企业钱包通道选择器数据 */
    request?: GetEnterpriseWalletAccessSelectQuery;
  }
  interface APIgetEnterpriseWalletExpandindirectOrderParams {
    /** 企业Id */
    enterpriseId?: string;
@@ -156,8 +161,8 @@
  }
  interface APIgetPersonalUserBankCardParams {
    /** 查询个人用户银行卡信息 */
    request?: GetPersonalUserBankCardQuery;
    /** 通道 */
    access?: EnumUserBankCardAccess;
  }
  interface APIgetPersonalUserElectronSignParams {
@@ -412,6 +417,10 @@
    ids: string[];
  }
  interface DeletePersonalUserBankCardCommand {
    access?: EnumUserBankCardAccess;
  }
  interface DeleteRoleCommand {
    ids: string[];
  }
@@ -620,6 +629,8 @@
    Alipay = 10,
    /**平安银行 */
    PingAnPay = 20,
    /**微信 */
    WeChatPay = 30,
  }
  enum EnumEnterpriseWalletExpandindirectOrderFileType {
@@ -953,6 +964,15 @@
    Success = 30,
    /**验收未通过 */
    Fail = 40,
  }
  enum EnumUserBankCardAccess {
    /**银行卡 */
    Bank = 1,
    /**支付宝 */
    AliPay = 10,
    /**微信 */
    WeChatPay = 20,
  }
  enum EnumUserGender {
@@ -1938,6 +1958,24 @@
    timestamp?: number;
  }
  interface FriendlyResultGetThreeResourceLogsQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetThreeResourceLogsQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetTraceIdLogQueryResult {
    /** 跟踪Id */
    traceId?: string;
@@ -2355,6 +2393,25 @@
    errorCode?: string;
    /** 数据 */
    data?: SelectOptionGuidGetEnterpriseContractTemplateSelectQueryOption[];
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultListSelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    /** 数据 */
    data?: SelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption[];
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -2980,8 +3037,6 @@
    oldValues?: string;
    /** 新值 */
    newValues?: string;
    /** 操作人Id */
    createdUserId?: string;
    createdUser?: GetResourceLogsQueryResultItemCreatedUser;
    /** 创建时间 */
    createdTime?: string;
@@ -3397,6 +3452,14 @@
    isConfigured?: boolean;
  }
  type GetEnterpriseWalletAccessSelectQuery = Record<string, any>;
  interface GetEnterpriseWalletAccessSelectQueryOption {
    /** Id */
    id?: string;
    access?: EnumEnterpriseWalletAccess;
  }
  interface GetEnterpriseWalletExpandindirectOrderQueryResult {
    /** 单号 */
    outBizNo?: string;
@@ -3521,8 +3584,6 @@
    message?: string;
    /** 堆栈跟踪 */
    stackTrace?: string;
    /** 操作人Id */
    createdUserId?: string;
    createdUser?: GetResourceLogsQueryResultItemCreatedUser;
    /** 创建时间 */
    createdTime?: string;
@@ -3880,6 +3941,8 @@
    avatar?: string;
    /** 姓名 */
    name?: string;
    /** 身份证号 */
    identity?: string;
    /** 手机号 */
    contactPhoneNumber?: string;
    /** 是否实名 */
@@ -3896,12 +3959,12 @@
    hireRefuseTaskCount?: number;
    /** 余额 */
    balance?: number;
    /** 已绑定的银行卡通道 */
    bankCardAAccesses?: EnumUserBankCardAccess[];
  }
  type GetPersonalUserBankCardQuery = Record<string, any>;
  interface GetPersonalUserBankCardQueryResult {
    access?: EnumEnterpriseWalletAccess;
    access?: EnumUserBankCardAccess;
    /** 银行卡号 */
    code?: string;
    /** 所属银行 */
@@ -4278,8 +4341,6 @@
    consoleLogs?: string;
    /** 耗时毫秒数 */
    elapsedMilliseconds?: number;
    /** 操作人Id */
    createdUserId?: string;
    createdUser?: GetResourceLogsQueryResultItemCreatedUser;
    /** 创建时间 */
    createdTime?: string;
@@ -4487,6 +4548,8 @@
  interface GetSettlementTaskUsersQueryResultItem {
    /** 结算名单Id */
    id?: string;
    /** 用户信息Id */
    userId?: string;
    /** 姓名 */
    name?: string;
    /** 身份证号 */
@@ -4797,9 +4860,68 @@
    hireStatus?: EnumTaskUserHireStatus;
  }
  interface GetThreeResourceLogsQuery {
    /** 跟踪Id */
    traceId?: string;
    /** 关键字 */
    keywords?: string;
    /** 创建时间-起始 */
    createdTimeBegin?: string;
    /** 创建时间-截止 */
    createdTimeEnd?: string;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetThreeResourceLogsQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetThreeResourceLogsQueryResultItem[];
  }
  interface GetThreeResourceLogsQueryResultItem {
    /** Id */
    id?: string;
    method?: EnumResourceMethod;
    /** 域名 */
    domain?: string;
    /** 地址 */
    path?: string;
    /** 请求头 */
    requestHeaders?: string;
    /** 请求参数 */
    request?: string;
    /** 请求头 */
    responseHeaders?: string;
    /** 响应结果 */
    response?: string;
    /** 是否成功 */
    isSuccess?: boolean;
    /** 耗时毫秒数 */
    elapsedMilliseconds?: number;
    createdUser?: GetThreeResourceLogsQueryResultItemCreatedUser;
    /** 创建时间 */
    createdTime?: string;
  }
  interface GetThreeResourceLogsQueryResultItemCreatedUser {
    /** Id */
    id?: string;
    type?: EnumUserType;
    /** 姓名 */
    name?: string;
    /** 用户名 */
    userName?: string;
    /** 企业Id */
    enterpriseId?: string;
    /** 企业全称 */
    enterpriseName?: string;
  }
  interface GetTraceIdLogQueryResult {
    /** 资源日志 */
    resourceLogs?: GetResourceLogsQueryResultItem[];
    /** 第三方资源日志 */
    threeResourceLogs?: GetThreeResourceLogsQueryResultItem[];
    /** 异常日志 */
    exceptionLogs?: GetExceptionLogsQueryResultItem[];
    /** 数据库审计日志 */
@@ -5603,7 +5725,7 @@
  }
  interface SavePersonalUserBankCardCommand {
    access?: EnumEnterpriseWalletAccess;
    access?: EnumUserBankCardAccess;
    /** 银行卡号 */
    code?: string;
    /** 所属银行 */
@@ -5612,6 +5734,8 @@
    bankBranch?: string;
    /** 银行预留手机号 */
    phoneNumber?: string;
    /** 验证码 */
    verifyCode?: string;
  }
  interface SaveRoleCommand {
@@ -5747,6 +5871,14 @@
    data?: GetEnterpriseContractTemplateSelectQueryOption;
  }
  interface SelectOptionGuidGetEnterpriseWalletAccessSelectQueryOption {
    /** 值 */
    value?: string;
    /** 标签 */
    label?: string;
    data?: GetEnterpriseWalletAccessSelectQueryOption;
  }
  interface SelectOptionGuidGetTaskSelectQueryOption {
    /** 值 */
    value?: string;
@@ -5782,6 +5914,11 @@
    phoneNumber: string;
    /** 身份证号 */
    identity: string;
  }
  interface SendSavePersonalUserBankCardVerifyCodeCommand {
    /** 手机号码 */
    phoneNumber: string;
  }
  interface SetDictionaryDataIsDisabledCommand {
@@ -5904,6 +6041,7 @@
  interface SureTaskSettlementCommand {
    /** 任务Id */
    taskInfoId?: string;
    settlementAccess?: EnumEnterpriseWalletAccess;
  }
  type SyncDatabaseCommand = Record<string, any>;
src/services/api/user.ts
@@ -2,6 +2,21 @@
// @ts-ignore
import { request } from '@/utils/request';
/** 删除用户银行卡信息 DELETE /api/user/user/deletePersonalUserBankCard */
export async function deletePersonalUserBankCard(
  body: API.DeletePersonalUserBankCardCommand,
  options?: API.RequestConfig
) {
  return request<number>('/api/user/user/deletePersonalUserBankCard', {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 查询运营端用户分页列表数据 POST /api/user/user/getOperationUserInfos */
export async function getOperationUserInfos(
  body: API.GetOperationUserInfosQuery,
@@ -30,8 +45,6 @@
    method: 'GET',
    params: {
      ...params,
      request: undefined,
      ...params['request'],
    },
    ...(options || {}),
  });
@@ -154,6 +167,21 @@
  });
}
/** 发送绑定银行卡短信 POST /api/user/user/sendSavePersonalUserBankCardVerifyCode */
export async function sendSavePersonalUserBankCardVerifyCode(
  body: API.SendSavePersonalUserBankCardVerifyCodeCommand,
  options?: API.RequestConfig
) {
  return request<string>('/api/user/user/sendSavePersonalUserBankCardVerifyCode', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 设置用户信息角色 PUT /api/user/user/setUserInfoRoles */
export async function setUserInfoRoles(
  body: API.SetUserInfoRolesCommand,
src/views/EnterpriseManage/components/ConfigureDialog.vue
@@ -13,6 +13,9 @@
      <el-tab-pane lazy :name="EnterpriseConfigureType.AliPay">
        <AliPayConfigureView :id="form.id" ref="aliPayConfigureViewRef" />
      </el-tab-pane>
      <!-- <el-tab-pane lazy :name="EnterpriseConfigureType.Wechat">
        <WechatConfigureView :id="form.id" ref="wechatConfigureViewRef" />
      </el-tab-pane> -->
      <el-tab-pane lazy :name="EnterpriseConfigureType.Electronic">
        <ElectronicConfigureView :id="form.id" ref="electronicConfigureViewRef" />
      </el-tab-pane>
@@ -36,6 +39,7 @@
import AliPayConfigureView from './AliPayConfigureView.vue';
import ElectronicConfigureView from './ElectronicConfigureView.vue';
import ShortMessageConfigureView from './ShortMessageConfigureView.vue';
import WechatConfigureView from './WechatConfigureView.vue';
defineOptions({
  name: 'ConfigureDialog',
@@ -65,6 +69,9 @@
  'shortMessageConfigureViewRef'
);
const wechatConfigureViewRef =
  useTemplateRef<InstanceType<typeof WechatConfigureView>>('wechatConfigureViewRef');
function onDialogClose() {
  // if (!dialogForm.value) return;
  // dialogForm.value.resetFields();
@@ -81,6 +88,9 @@
  } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.ShortMessage) {
    res = await shortMessageConfigureViewRef.value?.onConfirm?.();
  }
  //  else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.Wechat) {
  //   res = await wechatConfigureViewRef.value?.onConfirm?.();
  // }
  if (res) {
    emit('onConfirm');
  }
src/views/EnterpriseManage/components/WechatConfigureView.vue
New file
@@ -0,0 +1,173 @@
<template>
  <LoadingLayout :loading="isLoading">
    <ProForm :model="form" ref="dialogForm" label-width="120px">
      <ProFormItemV2
        label="联系人姓名:"
        prop="name"
        :checkRules="[{ message: '请输入联系人姓名' }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入联系人姓名"> </ProFormText>
      </ProFormItemV2>
      <ProFormItemV2
        label="联系人类型:"
        prop="name"
        :checkRules="[{ message: '请选择联系人类型' }]"
      >
        <ProFormRadio v-model.trim="form.name" :value-enum="[]" button-style />
      </ProFormItemV2>
      <ProFormItemV2
        label="手机号:"
        prop="name"
        :checkRules="[{ type: 'phone', message: '请输入手机号' }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入手机号" />
      </ProFormItemV2>
      <ProFormItemV2
        label="电子邮箱:"
        prop="name"
        :checkRules="[{ type: 'email', message: '请输入电子邮箱' }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入电子邮箱" />
      </ProFormItemV2>
      <ProFormItemV2 label="主体类型:" prop="name" :checkRules="[{ message: '请选择主体类型' }]">
        <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="请选择主体类型">
        </ProFormSelect>
      </ProFormItemV2>
      <ProFormItemV2
        label="商户简称:"
        prop="name"
        :checkRules="[{ type: 'phone', message: '请输入商户简称' }]"
      >
        <ProFormText :maxlength="64" v-model.trim="form.name" placeholder="请输入商户简称" />
      </ProFormItemV2>
      <ProFormItemV2
        label="客服电话:"
        prop="name"
        :checkRules="[{ type: 'tel', message: '请输入客服电话' }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入客服电话" />
      </ProFormItemV2>
      <ProFormItemV2 label="经营场景:" prop="name" :checkRules="[{ message: '请选择经营场景' }]">
        <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="请选择经营场景">
        </ProFormSelect>
      </ProFormItemV2>
      <ProFormItemV2
        label="入驻结算ID:"
        prop="name"
        :checkRules="[{ message: '请输入入驻结算ID' }]"
      >
        <div style="display: flex; width: 100%">
          <ProFormText v-model.trim="form.name" placeholder="请输入入驻结算ID" />
          <el-button style="margin-left: 10px" type="primary" link @click="openOuterSettleRule"
            >费率结算规则对照表</el-button
          >
        </div>
      </ProFormItemV2>
      <ProFormItemV2
        label="特殊资质照片:"
        prop="url"
        :check-rules="[{ type: 'upload', message: '请上传特殊资质照片' }]"
      >
        <ProFormUpload
          v-model:file-url="form.url"
          :limit="5"
          :limitFileSize="10"
          accept="png,jpg,jpeg,pdf"
        ></ProFormUpload>
      </ProFormItemV2>
      <ProFormItemV2 label="结算账户:" prop="name" :checkRules="[{ message: '请选择结算账户' }]">
        <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="请选择结算账户">
        </ProFormSelect>
      </ProFormItemV2>
      <ProFormItemV2
        label="开户银行:"
        prop="name"
        :checkRules="[{ type: 'phone', message: '请输入开户银行' }]"
      >
        <ProFormText :maxlength="64" v-model.trim="form.name" placeholder="请输入开户银行" />
      </ProFormItemV2>
      <ProFormItemV2
        label="银行账号:"
        prop="name"
        :checkRules="[{ type: 'tel', message: '请输入银行账号' }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入银行账号" />
      </ProFormItemV2>
    </ProForm>
  </LoadingLayout>
</template>
<script setup lang="ts">
import { FormInstance } from 'element-plus';
import {
  ProForm,
  ProFormItemV2,
  ProFormText,
  LoadingLayout,
  UploadUserFile,
  ProFormSelect,
  ProFormUpload,
  useFormDialog,
  ProFormRadio,
} from '@bole-core/components';
import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
import { useQuery } from '@tanstack/vue-query';
import { convertWalletApiToFiles, convertWalletFilesToApi } from '@/utils';
defineOptions({
  name: 'WechatConfigureView',
});
type Props = {
  id: string;
};
const props = withDefaults(defineProps<Props>(), {});
const dialogForm = ref<FormInstance>();
const form = reactive({
  name: '',
  url: [] as UploadUserFile[],
});
const { isLoading, refetch } = useQuery({
  queryKey: [
    'enterpriseWalletServices/getEnterpriseWallet',
    props.id,
    EnumEnterpriseWalletAccess.Alipay,
  ],
  queryFn: async (ctx) => {
    return await enterpriseWalletServices.getEnterpriseWallet({
      enterpriseId: props.id,
      access: EnumEnterpriseWalletAccess.Alipay,
    });
  },
  onSuccess(data) {
    form.name = data.name;
    form.url = convertWalletApiToFiles(
      data.files,
      EnumEnterpriseWalletExpandindirectOrderFileType.Scene
    );
  },
});
function openOuterSettleRule() {
  window.open('https://kf.qq.com/faq/220228IJb2UV220228uEjU3Q.html', '_blank');
}
async function enterpriseWalletExpandindirectCreate() {
  try {
    if (!dialogForm.value) return;
    const valid = await dialogForm.value.validate();
    if (!valid) return;
    let params: API.EnterpriseWalletExpandindirectCreateCommand = {};
    let res = await enterpriseWalletServices.enterpriseWalletExpandindirectCreate(params);
    return res;
  } catch (error) {}
}
defineExpose({
  onConfirm: enterpriseWalletExpandindirectCreate,
});
</script>
src/views/TraceIdLogManage/TraceIdLogManageList.vue
New file
@@ -0,0 +1,84 @@
<template>
  <LoadingLayout :loading="isLoading">
    <AppContainer>
      <ProTableQueryFilterBar :show-reset-btn="false">
        <template #query>
          <QueryFilterItem>
            <SearchInput
              v-model="state.traceId"
              style="width: 260px"
              placeholder="traceID"
              @on-click-search="refetch"
            >
            </SearchInput>
          </QueryFilterItem>
        </template>
      </ProTableQueryFilterBar>
      <ProTabs v-model="state.tabType" hasBorder>
        <ProTabPane lazy label="资源日志" name="resourceLogs">
          <ResourceLogsView
            :resourceLogs="detail.resourceLogs"
            @resend="refetch"
          ></ResourceLogsView>
        </ProTabPane>
        <ProTabPane lazy label="第三方资源日志" name="threeResourceLogs">
          <ThreeResourceLogsView
            :threeResourceLogs="detail.threeResourceLogs"
          ></ThreeResourceLogsView>
        </ProTabPane>
        <ProTabPane lazy label="异常日志" name="exceptionLogs">
          <ExceptionLogsView :exceptionLogs="detail.exceptionLogs"></ExceptionLogsView>
        </ProTabPane>
        <ProTabPane lazy label="数据库审计日志" name="dbAuditLogs">
          <DbAuditLogsView :dbAuditLogs="detail.dbAuditLogs"></DbAuditLogsView>
        </ProTabPane>
      </ProTabs>
    </AppContainer>
  </LoadingLayout>
</template>
<script setup lang="ts">
import {
  ProTableQueryFilterBar,
  SearchInput,
  LoadingLayout,
  AppContainer,
  QueryFilterItem,
  ProTabs,
  ProTabPane,
} from '@bole-core/components';
import * as logRecordsServices from '@/services/api/logRecords';
import { useQuery } from '@tanstack/vue-query';
import ResourceLogsView from './components/ResourceLogsView.vue';
import ThreeResourceLogsView from './components/ThreeResourceLogsView.vue';
import ExceptionLogsView from './components/ExceptionLogsView.vue';
import DbAuditLogsView from './components/DbAuditLogsView.vue';
defineOptions({
  name: 'TraceIdLogManageList',
});
const BaseState = {
  traceId: '',
  tabType: 'resourceLogs',
};
const state = reactive({ ...BaseState });
const {
  isLoading,
  data: detail,
  refetch,
} = useQuery({
  queryKey: ['logRecordsServices/getTraceIdLog', state.traceId],
  queryFn: async () => {
    return await logRecordsServices.getTraceIdLog({ traceId: state.traceId });
  },
  placeholderData: () => ({} as API.GetTraceIdLogQueryResult),
  enabled: computed(() => !!state.traceId),
});
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
</style>
src/views/TraceIdLogManage/components/DbAuditLogsView.vue
New file
@@ -0,0 +1,66 @@
<template>
  <el-collapse v-model="activeName" accordion>
    <el-collapse-item
      v-for="item in dbAuditLogs"
      :key="item.createdTime"
      name="1"
      style="overflow: auto; max-height: 600px"
    >
      <ProForm :model="item" is-read>
        <ProFormItemV2 label="tableName:">
          {{ item.tableName }}
        </ProFormItemV2>
        <ProFormItemV2 label="primaryKey:">{{ item.primaryKey }} </ProFormItemV2>
        <ProFormItemV2 label="operate:"> {{ EnumDbAuditOperateText[item.operate] }}</ProFormItemV2>
        <ProFormItemV2 label="oldValues:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.oldValues)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="newValues:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.newValues)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="createdUser:">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(JSON.stringify(item.createdUser))"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="createdTime:">
          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
        >
      </ProForm>
    </el-collapse-item>
  </el-collapse>
</template>
<script setup lang="ts">
import { ProForm, ProFormItemV2 } from '@bole-core/components';
import { EnumDbAuditOperateText } from '@/constants';
import JsonViewer from 'vue-json-viewer';
import { format } from '@/utils';
defineOptions({
  name: 'DbAuditLogsView',
});
type Props = {
  dbAuditLogs: API.GetDbAuditLogsQueryResultItem[];
};
const activeName = ref('1');
const props = withDefaults(defineProps<Props>(), {
  dbAuditLogs: () => [] as API.GetDbAuditLogsQueryResultItem[],
});
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
</style>
src/views/TraceIdLogManage/components/ExceptionLogsView.vue
New file
@@ -0,0 +1,52 @@
<template>
  <el-collapse v-model="activeName" accordion>
    <el-collapse-item
      v-for="item in exceptionLogs"
      :key="item.createdTime"
      name="1"
      style="overflow: auto; max-height: 600px"
    >
      <ProForm :model="item" is-read>
        <ProFormItemV2 label="type:">
          {{ item.type }}
        </ProFormItemV2>
        <ProFormItemV2 label="code:">{{ item.code }} </ProFormItemV2>
        <ProFormItemV2 label="message:"> {{ item.message }}</ProFormItemV2>
        <ProFormItemV2 label="stackTrace:"> {{ item.stackTrace }}</ProFormItemV2>
        <ProFormItemV2 label="createdUser:">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(JSON.stringify(item.createdUser))"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="createdTime:">
          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
        >
      </ProForm>
    </el-collapse-item>
  </el-collapse>
</template>
<script setup lang="ts">
import { ProForm, ProFormItemV2 } from '@bole-core/components';
import JsonViewer from 'vue-json-viewer';
import { format } from '@/utils';
defineOptions({
  name: 'ExceptionLogsView',
});
type Props = {
  exceptionLogs: API.GetExceptionLogsQueryResultItem[];
};
const activeName = ref('1');
const props = withDefaults(defineProps<Props>(), {
  exceptionLogs: () => [] as API.GetExceptionLogsQueryResultItem[],
});
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
</style>
src/views/TraceIdLogManage/components/ResourceLogsView.vue
New file
@@ -0,0 +1,105 @@
<template>
  <el-collapse v-model="activeName" accordion>
    <el-collapse-item
      v-for="item in resourceLogs"
      :key="item.id"
      name="1"
      style="overflow: auto; max-height: 600px"
    >
      <template #title>
        <el-button type="primary" @click="resend(item.id)" link>重新发送</el-button>
      </template>
      <ProForm :model="item" is-read style="padding: 0 20px">
        <ProFormItemV2 label="method:">
          {{ EnumResourceMethodText[item.method] }}
        </ProFormItemV2>
        <ProFormItemV2 label="domain:">{{ item.domain }} </ProFormItemV2>
        <ProFormItemV2 label="path:"> {{ item.path }}</ProFormItemV2>
        <ProFormItemV2 label="requestHeaders:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.requestHeaders)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="request:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.request)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="responseHeaders:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.responseHeaders)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="response:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.response)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="isSuccess:"> {{ item.isSuccess ? '是' : '否' }}</ProFormItemV2>
        <ProFormItemV2 label="clientIpAddress:"> {{ item.clientIpAddress }}</ProFormItemV2>
        <ProFormItemV2 label="refererUrl:"> {{ item.refererUrl }}</ProFormItemV2>
        <ProFormItemV2 label="consoleLogs:"> {{ item.consoleLogs }}</ProFormItemV2>
        <ProFormItemV2 label="elapsedMilliseconds:"> {{ item.elapsedMilliseconds }}</ProFormItemV2>
        <ProFormItemV2 label="createdUser:">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(JSON.stringify(item.createdUser))"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="createdTime:">
          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
        >
      </ProForm>
    </el-collapse-item>
  </el-collapse>
</template>
<script setup lang="ts">
import { ProForm, ProFormItemV2 } from '@bole-core/components';
import { EnumResourceMethodText } from '@/constants';
import JsonViewer from 'vue-json-viewer';
import * as logRecordsServices from '@/services/api/logRecords';
import { format } from '@/utils';
import { Message } from '@bole-core/core';
defineOptions({
  name: 'ResourceLogsView',
});
type Props = {
  resourceLogs: API.GetResourceLogsQueryResultItem[];
};
const activeName = ref('1');
const props = withDefaults(defineProps<Props>(), {
  resourceLogs: () => [] as API.GetResourceLogsQueryResultItem[],
});
const emit = defineEmits<{
  (e: 'resend'): void;
}>();
async function resend(id: string) {
  try {
    let res = await logRecordsServices.resendResource({ id: id });
    if (res) {
      Message.successMessage('操作成功');
    }
  } catch (error) {}
}
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
</style>
src/views/TraceIdLogManage/components/ThreeResourceLogsView.vue
New file
@@ -0,0 +1,82 @@
<template>
  <el-collapse v-model="activeName" accordion>
    <el-collapse-item
      v-for="item in threeResourceLogs"
      :key="item.id"
      name="1"
      style="overflow: auto; max-height: 600px"
    >
      <ProForm :model="item" is-read>
        <ProFormItemV2 label="method:">
          {{ EnumResourceMethodText[item.method] }}
        </ProFormItemV2>
        <ProFormItemV2 label="domain:">{{ item.domain }} </ProFormItemV2>
        <ProFormItemV2 label="path:"> {{ item.path }}</ProFormItemV2>
        <ProFormItemV2 label="requestHeaders:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.requestHeaders)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="request:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.request)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="responseHeaders:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.responseHeaders)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="response:" label-position="top">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(item.response)"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="isSuccess:"> {{ item.isSuccess ? '是' : '否' }}</ProFormItemV2>
        <ProFormItemV2 label="elapsedMilliseconds:"> {{ item.elapsedMilliseconds }}</ProFormItemV2>
        <ProFormItemV2 label="createdUser:">
          <json-viewer
            :copyable="true"
            :boxed="true"
            :value="JSON.parse(JSON.stringify(item.createdUser))"
          ></json-viewer>
        </ProFormItemV2>
        <ProFormItemV2 label="createdTime:">
          {{ format(item.createdTime, 'YYYY-MM-DD HH:mm:ss') }}</ProFormItemV2
        >
      </ProForm>
    </el-collapse-item>
  </el-collapse>
</template>
<script setup lang="ts">
import { ProForm, ProFormItemV2 } from '@bole-core/components';
import { EnumResourceMethodText } from '@/constants';
import JsonViewer from 'vue-json-viewer';
import { format } from '@/utils';
defineOptions({
  name: 'ThreeResourceLogsView',
});
type Props = {
  threeResourceLogs: API.GetThreeResourceLogsQueryResultItem[];
};
const activeName = ref('1');
const props = withDefaults(defineProps<Props>(), {
  threeResourceLogs: () => [] as API.GetThreeResourceLogsQueryResultItem[],
});
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
</style>