wupengfei
4 天以前 609eb7a2d87dc7ce0546bf55d6096ea660f8f9be
feat: 微信
1个文件已添加
10个文件已修改
2383 ■■■■■ 已修改文件
.eslintrc-auto-import.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
auto-imports.d.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/apiEnum.ts 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/enterprise.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/enterpriseWallet.ts 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/identify.ts 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/enterpriseWallet.ts 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 842 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EnterpriseManage/components/ConfigureDialog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EnterpriseManage/components/WechatConfigureView.vue 1183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.eslintrc-auto-import.json
@@ -117,6 +117,25 @@
    "EnumUserWalletTransactionTypeText": true,
    "EnumWalletTransactionStatus": true,
    "EnumWalletTransactionStatusText": true,
    "EnumWeChatPayApplymentBankAccountType": true,
    "EnumWeChatPayApplymentCertType": true,
    "EnumWeChatPayApplymentCertTypeTextForSHZZ": true,
    "EnumWeChatPayApplymentCertTypeTextForSYDW": true,
    "EnumWeChatPayApplymentCertTypeTextForZFJG": true,
    "EnumWeChatPayApplymentContactType": true,
    "EnumWeChatPayApplymentContactTypeText": true,
    "EnumWeChatPayApplymentContactTypeTextForZFJG": true,
    "EnumWeChatPayApplymentFinanceType": true,
    "EnumWeChatPayApplymentIdDocType": true,
    "EnumWeChatPayApplymentIdDocTypeText": true,
    "EnumWeChatPayApplymentIdHolderType": true,
    "EnumWeChatPayApplymentIdHolderTypeText": true,
    "EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL": true,
    "EnumWeChatPayApplymentSalesScenesType": true,
    "EnumWeChatPayApplymentSalesScenesTypeText": true,
    "EnumWeChatPayApplymentState": true,
    "EnumWeChatPayApplymentSubjectType": true,
    "EnumWeChatPayApplymentSubjectTypeText": true,
    "ExtractDefaultPropTypes": true,
    "ExtractPropTypes": true,
    "ExtractPublicPropTypes": true,
@@ -287,6 +306,8 @@
    "useUser": true,
    "useVModel": true,
    "useVModels": true,
    "userCredentialVerifyOcrIDCard": true,
    "vatLicense": true,
    "watch": true,
    "watchEffect": true,
    "watchPostEffect": true,
auto-imports.d.ts
@@ -121,6 +121,25 @@
  const EnumUserWalletTransactionTypeText: typeof import('./src/constants/finance')['EnumUserWalletTransactionTypeText']
  const EnumWalletTransactionStatus: typeof import('./src/constants/apiEnum')['EnumWalletTransactionStatus']
  const EnumWalletTransactionStatusText: typeof import('./src/constants/finance')['EnumWalletTransactionStatusText']
  const EnumWeChatPayApplymentBankAccountType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentBankAccountType']
  const EnumWeChatPayApplymentCertType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentCertType']
  const EnumWeChatPayApplymentCertTypeTextForSHZZ: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentCertTypeTextForSHZZ']
  const EnumWeChatPayApplymentCertTypeTextForSYDW: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentCertTypeTextForSYDW']
  const EnumWeChatPayApplymentCertTypeTextForZFJG: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentCertTypeTextForZFJG']
  const EnumWeChatPayApplymentContactType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentContactType']
  const EnumWeChatPayApplymentContactTypeText: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentContactTypeText']
  const EnumWeChatPayApplymentContactTypeTextForZFJG: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentContactTypeTextForZFJG']
  const EnumWeChatPayApplymentFinanceType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentFinanceType']
  const EnumWeChatPayApplymentIdDocType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentIdDocType']
  const EnumWeChatPayApplymentIdDocTypeText: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentIdDocTypeText']
  const EnumWeChatPayApplymentIdHolderType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentIdHolderType']
  const EnumWeChatPayApplymentIdHolderTypeText: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentIdHolderTypeText']
  const EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL']
  const EnumWeChatPayApplymentSalesScenesType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentSalesScenesType']
  const EnumWeChatPayApplymentSalesScenesTypeText: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentSalesScenesTypeText']
  const EnumWeChatPayApplymentState: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentState']
  const EnumWeChatPayApplymentSubjectType: typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentSubjectType']
  const EnumWeChatPayApplymentSubjectTypeText: typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentSubjectTypeText']
  const FastButtonMap: typeof import('./src/constants/module')['FastButtonMap']
  const FastColumnList: typeof import('./src/constants/module')['FastColumnList']
  const FastDataButtonList: typeof import('./src/constants/module')['FastDataButtonList']
@@ -269,6 +288,8 @@
  const useUser: typeof import('./src/hooks/useUser')['useUser']
  const useVModel: typeof import('./src/hooks/help')['useVModel']
  const useVModels: typeof import('./src/hooks/help')['useVModels']
  const userCredentialVerifyOcrIDCard: typeof import('./src/hooks/identify')['userCredentialVerifyOcrIDCard']
  const vatLicense: typeof import('./src/hooks/identify')['vatLicense']
  const watch: typeof import('vue')['watch']
  const watchEffect: typeof import('vue')['watchEffect']
  const watchPostEffect: typeof import('vue')['watchPostEffect']
@@ -280,7 +301,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, 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'
  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, EnumWeChatPayApplymentBankAccountType, EnumWeChatPayApplymentCertType, EnumWeChatPayApplymentContactType, EnumWeChatPayApplymentFinanceType, EnumWeChatPayApplymentIdDocType, EnumWeChatPayApplymentIdHolderType, EnumWeChatPayApplymentSalesScenesType, EnumWeChatPayApplymentState, EnumWeChatPayApplymentSubjectType, 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, EnumWeChatPayApplymentBankAccountType, EnumWeChatPayApplymentCertType, EnumWeChatPayApplymentContactType, EnumWeChatPayApplymentFinanceType, EnumWeChatPayApplymentIdDocType, EnumWeChatPayApplymentIdHolderType, EnumWeChatPayApplymentSalesScenesType, EnumWeChatPayApplymentState, EnumWeChatPayApplymentSubjectType, 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'
@@ -438,6 +459,25 @@
    readonly EnumUserWalletTransactionTypeText: UnwrapRef<typeof import('./src/constants/finance')['EnumUserWalletTransactionTypeText']>
    readonly EnumWalletTransactionStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWalletTransactionStatus']>
    readonly EnumWalletTransactionStatusText: UnwrapRef<typeof import('./src/constants/finance')['EnumWalletTransactionStatusText']>
    readonly EnumWeChatPayApplymentBankAccountType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentBankAccountType']>
    readonly EnumWeChatPayApplymentCertType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentCertType']>
    readonly EnumWeChatPayApplymentCertTypeTextForSHZZ: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentCertTypeTextForSHZZ']>
    readonly EnumWeChatPayApplymentCertTypeTextForSYDW: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentCertTypeTextForSYDW']>
    readonly EnumWeChatPayApplymentCertTypeTextForZFJG: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentCertTypeTextForZFJG']>
    readonly EnumWeChatPayApplymentContactType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentContactType']>
    readonly EnumWeChatPayApplymentContactTypeText: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentContactTypeText']>
    readonly EnumWeChatPayApplymentContactTypeTextForZFJG: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentContactTypeTextForZFJG']>
    readonly EnumWeChatPayApplymentFinanceType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentFinanceType']>
    readonly EnumWeChatPayApplymentIdDocType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentIdDocType']>
    readonly EnumWeChatPayApplymentIdDocTypeText: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentIdDocTypeText']>
    readonly EnumWeChatPayApplymentIdHolderType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentIdHolderType']>
    readonly EnumWeChatPayApplymentIdHolderTypeText: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentIdHolderTypeText']>
    readonly EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL']>
    readonly EnumWeChatPayApplymentSalesScenesType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentSalesScenesType']>
    readonly EnumWeChatPayApplymentSalesScenesTypeText: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentSalesScenesTypeText']>
    readonly EnumWeChatPayApplymentState: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentState']>
    readonly EnumWeChatPayApplymentSubjectType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWeChatPayApplymentSubjectType']>
    readonly EnumWeChatPayApplymentSubjectTypeText: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumWeChatPayApplymentSubjectTypeText']>
    readonly FastButtonMap: UnwrapRef<typeof import('./src/constants/module')['FastButtonMap']>
    readonly FastColumnList: UnwrapRef<typeof import('./src/constants/module')['FastColumnList']>
    readonly FastDataButtonList: UnwrapRef<typeof import('./src/constants/module')['FastDataButtonList']>
@@ -586,6 +626,8 @@
    readonly useUser: UnwrapRef<typeof import('./src/hooks/useUser')['useUser']>
    readonly useVModel: UnwrapRef<typeof import('./src/hooks/help')['useVModel']>
    readonly useVModels: UnwrapRef<typeof import('./src/hooks/help')['useVModels']>
    readonly userCredentialVerifyOcrIDCard: UnwrapRef<typeof import('./src/hooks/identify')['userCredentialVerifyOcrIDCard']>
    readonly vatLicense: UnwrapRef<typeof import('./src/hooks/identify')['vatLicense']>
    readonly watch: UnwrapRef<typeof import('vue')['watch']>
    readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
    readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
src/constants/apiEnum.ts
@@ -605,6 +605,138 @@
  Fail = 50,
}
/** 微信支付-银行账户类型枚举 */
export enum EnumWeChatPayApplymentBankAccountType {
  /**对公银行账户 */
  BANK_ACCOUNT_TYPE_CORPORATE = 0,
  /**经营者个人银行卡(仅个体户可选择) */
  BANK_ACCOUNT_TYPE_PERSONAL = 1,
}
/** 微信支付-登记证书类型枚举 */
export enum EnumWeChatPayApplymentCertType {
  /**事业单位法人证书(主体为事业单位时选择) */
  CERTIFICATE_TYPE_2388 = 0,
  /**统一社会信用代码证书(主体为政府机关/社会组织时选择) */
  CERTIFICATE_TYPE_2389 = 1,
  /**社会团体法人登记证书(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2394 = 2,
  /**民办非企业单位登记证书(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2395 = 3,
  /**基金会法人登记证书(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2396 = 4,
  /**执业许可证/执业证(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2520 = 5,
  /**基层群众性自治组织特别法人统一社会信用代码证(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2521 = 6,
  /**农村集体经济组织登记证(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2522 = 7,
  /**宗教活动场所登记证(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2399 = 8,
  /**政府部门下发的其他有效证明文件(主体为社会组织时选择) */
  CERTIFICATE_TYPE_2400 = 9,
}
/** 微信支付-超级管理员类型枚举 */
export enum EnumWeChatPayApplymentContactType {
  /**经营者/法定代表人 */
  LEGAL = 0,
  /**经办人(经商户授权办理微信支付业务的人员) */
  SUPER = 1,
}
/** 微信支付-金融机构类型枚举 */
export enum EnumWeChatPayApplymentFinanceType {
  /**银行业(适用于商业银行、政策性银行、农村合作银行、村镇银行、开发性金融机构等) */
  BANK_AGENT = 0,
  /**支付机构(适用于非银行类支付机构) */
  PAYMENT_AGENT = 1,
  /**保险业(适用于保险、保险中介、保险代理、保险经纪等保险类业务) */
  INSURANCE = 2,
  /**交易及结算类金融机构(适用于交易所、登记结算类机构、银行卡清算机构、资金清算中心等) */
  TRADE_AND_SETTLE = 3,
  /**其他金融机构(适用于财务公司、信托公司、金融资产管理公司、金融租赁公司、汽车金融公司、贷款公司、货币经纪公司、消费金融公司、证券业、金融控股公司、股票、期货、货币兑换、小额贷款公司、金融资产管理、担保公司、商业保理公司、典当行、融资租赁公司、财经咨询等其他金融业务) */
  OTHER = 4,
}
/** 微信支付-证件类型枚举 */
export enum EnumWeChatPayApplymentIdDocType {
  /**中国大陆居民 */
  IDENTIFICATION_TYPE_IDCARD = 0,
  /**其他国家或地区居民 */
  IDENTIFICATION_TYPE_OVERSEA_PASSPORT = 1,
  /**中国香港居民 */
  IDENTIFICATION_TYPE_HONGKONG_PASSPORT = 2,
  /**中国澳门居民 */
  IDENTIFICATION_TYPE_MACAO_PASSPORT = 3,
  /**中国台湾居民 */
  IDENTIFICATION_TYPE_TAIWAN_PASSPORT = 4,
  /**外国人居留证 */
  IDENTIFICATION_TYPE_FOREIGN_RESIDENT = 5,
  /**港澳居民证 */
  IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT = 6,
  /**台湾居民证 */
  IDENTIFICATION_TYPE_TAIWAN_RESIDENT = 7,
}
/** 微信支付-证件持有人类型枚举 */
export enum EnumWeChatPayApplymentIdHolderType {
  /**经营者/法定代表人 */
  LEGAL = 0,
  /**经办人(经商户授权办理微信支付业务的人员,授权范围包括但不限于签约,入驻过程需完成账户验证) */
  SUPER = 1,
}
/** 微信支付-经营场景类型枚举 */
export enum EnumWeChatPayApplymentSalesScenesType {
  /**线下场所 */
  SALES_SCENES_STORE = 0,
  /**服务号与公众号 */
  SALES_SCENES_MP = 1,
  /**小程序 */
  SALES_SCENES_MINI_PROGRAM = 2,
  /**互联网网站 */
  SALES_SCENES_WEB = 3,
  /**App */
  SALES_SCENES_APP = 4,
  /**企业微信 */
  SALES_SCENES_WEWORK = 5,
}
/** 微信支付申请单状态枚举 */
export enum EnumWeChatPayApplymentState {
  /**编辑中,提交申请发生错误导致,请尝试重新提交 */
  APPLYMENT_STATE_EDITTING = 0,
  /**审核中,申请单正在审核中,超级管理员用微信打开“签约链接”,完成绑定微信号后,申请单进度将通过微信公众号通知超级管理员,引导完成后续步骤 */
  APPLYMENT_STATE_AUDITING = 1,
  /**已驳回,请按照驳回原因修改申请资料,超级管理员用微信打开“签约链接”,完成绑定微信号,后续申请单进度将通过微信公众号通知超级管理员 */
  APPLYMENT_STATE_REJECTED = 2,
  /**待账户验证,请超级管理员使用微信打开返回的“签约链接”,根据页面指引完成账户验证 */
  APPLYMENT_STATE_TO_BE_CONFIRMED = 3,
  /**待签约,请超级管理员使用微信打开返回的“签约链接”,根据页面指引完成签约 */
  APPLYMENT_STATE_TO_BE_SIGNED = 4,
  /**开通权限中,系统开通相关权限中,请耐心等待 */
  APPLYMENT_STATE_SIGNING = 5,
  /**已完成,商户入驻申请已完成 */
  APPLYMENT_STATE_FINISHED = 6,
  /**已作废,申请单已被撤销 */
  APPLYMENT_STATE_CANCELED = 7,
}
/** 微信支付-主体类型枚举 */
export enum EnumWeChatPayApplymentSubjectType {
  /**个体户(营业执照上的主体类型一般为个体户、个体工商户、个体经营) */
  SUBJECT_TYPE_INDIVIDUAL = 0,
  /**企业(营业执照上的主体类型一般为有限公司、有限责任公司) */
  SUBJECT_TYPE_ENTERPRISE = 1,
  /**政府机关(包括各级、各类政府机关,如机关党委、税务、民政、人社、工商、商务、市监等) */
  SUBJECT_TYPE_GOVERNMENT = 2,
  /**事业单位(包括国内各类事业单位,如:医疗、教育、学校等单位) */
  SUBJECT_TYPE_INSTITUTIONS = 3,
  /**社会组织(包括社会团体、民办非企业、基金会、基层群众性自治组织、农村集体经济组织等组织) */
  SUBJECT_TYPE_OTHERS = 4,
}
/** 我的报名分页列表-状态 */
export enum GetPersonalApplyTaskInfosQueryStatus {
  /**待确认 */
src/constants/enterprise.ts
@@ -31,7 +31,7 @@
  [EnterpriseConfigureType.AliPay]: '支付宝配置',
  [EnterpriseConfigureType.Electronic]: '电子签配置',
  [EnterpriseConfigureType.ShortMessage]: '短信通道配置',
  // [EnterpriseConfigureType.Wechat]: '微信支付配置',
  [EnterpriseConfigureType.Wechat]: '微信支付配置',
};
export enum VerifyStatus {
src/constants/enterpriseWallet.ts
@@ -20,3 +20,78 @@
  `${TempFolderPath}/alipayExpandindirectScene/scene4.png`,
  `${TempFolderPath}/alipayExpandindirectScene/scene5.png`,
];
export const EnumWeChatPayApplymentContactTypeText = {
  [EnumWeChatPayApplymentContactType.LEGAL]: '经营者/法定代表人',
  [EnumWeChatPayApplymentContactType.SUPER]: '经办人',
};
export const EnumWeChatPayApplymentContactTypeTextForZFJG = {
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_IDCARD]: '中国大陆居民-身份证',
};
export const EnumWeChatPayApplymentIdDocTypeText = {
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_IDCARD]: '中国大陆居民-身份证',
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_OVERSEA_PASSPORT]: '其他国家或地区居民-护照',
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_HONGKONG_PASSPORT]:
    '中国香港居民-来往内地通行证',
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_MACAO_PASSPORT]:
    '中国澳门居民-来往内地通行证',
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_TAIWAN_PASSPORT]:
    '中国台湾居民-来往大陆通行证',
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_FOREIGN_RESIDENT]: '外国人居留证',
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT]: '港澳居民证',
  [EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_TAIWAN_RESIDENT]: '台湾居民证',
};
export const EnumWeChatPayApplymentSubjectTypeText = {
  [EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INDIVIDUAL]: '个体户',
  [EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_ENTERPRISE]: '企业',
  [EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_GOVERNMENT]: '政府机关',
  [EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INSTITUTIONS]: '事业单位',
  [EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_OTHERS]: '社会组织',
};
export const EnumWeChatPayApplymentCertTypeTextForSYDW = {
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2388]: '事业单位法人证书',
};
export const EnumWeChatPayApplymentCertTypeTextForZFJG = {
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2389]: '统一社会信用代码证书',
};
export const EnumWeChatPayApplymentCertTypeTextForSHZZ = {
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2394]: '社会团体法人登记证书',
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2395]: '民办非企业单位登记证书',
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2396]: '基金会法人登记证书',
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2520]: '执业许可证/执业证',
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2521]:
    '基层群众性自治组织特别法人统一社会信用代码证',
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2522]: '农村集体经济组织登记证',
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2399]: '宗教活动场所登记证',
  [EnumWeChatPayApplymentCertType.CERTIFICATE_TYPE_2400]: '政府部门下发的其他有效证明文件',
};
export const EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL = {
  [EnumWeChatPayApplymentIdHolderType.LEGAL]: '经营者/法定代表人',
};
export const EnumWeChatPayApplymentIdHolderTypeText = {
  [EnumWeChatPayApplymentIdHolderType.LEGAL]: '经营者/法定代表人',
  [EnumWeChatPayApplymentIdHolderType.SUPER]: '经办人',
};
export const EnumWeChatPayApplymentSalesScenesTypeText = {
  [EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_STORE]: '线下场所',
  [EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_MP]: '服务号与公众号',
  [EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_MINI_PROGRAM]: '小程序',
  [EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_WEB]: '互联网网站',
  [EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_APP]: 'App',
  [EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_WEWORK]: '企业微信',
};
export const EnumWeChatPayApplymentBankAccountTypeText = {
  [EnumWeChatPayApplymentBankAccountType.BANK_ACCOUNT_TYPE_CORPORATE]: '对公银行账户',
  [EnumWeChatPayApplymentBankAccountType.BANK_ACCOUNT_TYPE_PERSONAL]:
    '经营者个人银行卡(仅个体户可选择)',
};
src/hooks/identify.ts
New file
@@ -0,0 +1,43 @@
import * as ocrUtilsServices from '@/services/api/ocrUtils';
import { UploadUserFile } from '@bole-core/components';
import _ from 'lodash';
type VatLicenseOptions = {
  onSuccess?: (res: API.BaiduOcrBusinessLicenseResultModel) => any;
};
export async function vatLicense(response: UploadUserFile, options: VatLicenseOptions = {}) {
  try {
    if (response?.url) {
      const { onSuccess } = options;
      let res = await ocrUtilsServices.getLicenseOcr({
        url: response.url,
      });
      onSuccess?.(res.model);
    }
  } catch (error) {}
}
type UserCredentialVerifyOcrIDCardOptions = {
  access?: EnumOcrAccess;
  scene?: string;
  isOssUrl?: boolean;
  url?: string;
  onSuccess?: (res: API.BaiduOcrIdentityFrontResultModel) => any;
};
export async function userCredentialVerifyOcrIDCard(
  options: UserCredentialVerifyOcrIDCardOptions = {}
) {
  try {
    const { onSuccess, access, isOssUrl, url, scene } = options;
    if (url) {
      let res = await ocrUtilsServices.getIdentityFrontOcr({
        access: access,
        url: url,
        isOssUrl: isOssUrl,
      });
      onSuccess?.(res.model);
    }
  } catch (error) {}
}
src/hooks/index.ts
@@ -10,3 +10,4 @@
export * from './menu';
export * from './portraitTable';
export * from './electronSign';
export * from './identify';
src/services/api/enterpriseWallet.ts
@@ -295,6 +295,24 @@
  );
}
/** 查询企业微信支付钱包详情 GET /api/user/enterpriseWallet/getEnterpriseWeChatPayWallet */
export async function getEnterpriseWeChatPayWallet(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetEnterpriseWeChatPayWalletParams,
  options?: API.RequestConfig
) {
  return request<API.GetEnterpriseWeChatPayWalletQueryResult>(
    '/api/user/enterpriseWallet/getEnterpriseWeChatPayWallet',
    {
      method: 'GET',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** 开通企业钱包 POST /api/user/enterpriseWallet/openEnterpriseWallet */
export async function openEnterpriseWallet(
  body: API.OpenEnterpriseWalletCommand,
@@ -313,6 +331,24 @@
  );
}
/** 开通企业微信钱包 POST /api/user/enterpriseWallet/openEnterpriseWeChatPayWallet */
export async function openEnterpriseWeChatPayWallet(
  body: API.OpenEnterpriseWeChatPayWalletCommand,
  options?: API.RequestConfig
) {
  return request<API.OpenEnterpriseWeChatPayWalletCommandResult>(
    '/api/user/enterpriseWallet/openEnterpriseWeChatPayWallet',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 企业钱包充值 POST /api/user/enterpriseWallet/rechargeEnterpriseWallet */
export async function rechargeEnterpriseWallet(
  body: API.RechargeEnterpriseWalletCommand,
src/services/api/typings.d.ts
@@ -134,6 +134,11 @@
    id?: string;
  }
  interface APIgetEnterpriseWeChatPayWalletParams {
    /** 企业Id */
    enterpriseId?: string;
  }
  interface APIgetFileUrlParams {
    /** 地址 */
    url?: string;
@@ -336,6 +341,7 @@
  }
  interface BaiduOcrIdentityFrontResultModel {
    /** 姓名 */
    name?: string;
    /** 身份证号 */
    identity?: string;
@@ -1085,6 +1091,129 @@
    Fail = 50,
  }
  enum EnumWeChatPayApplymentBankAccountType {
    /**对公银行账户 */
    BANK_ACCOUNT_TYPE_CORPORATE = 0,
    /**经营者个人银行卡(仅个体户可选择) */
    BANK_ACCOUNT_TYPE_PERSONAL = 1,
  }
  enum EnumWeChatPayApplymentCertType {
    /**事业单位法人证书(主体为事业单位时选择) */
    CERTIFICATE_TYPE_2388 = 0,
    /**统一社会信用代码证书(主体为政府机关/社会组织时选择) */
    CERTIFICATE_TYPE_2389 = 1,
    /**社会团体法人登记证书(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2394 = 2,
    /**民办非企业单位登记证书(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2395 = 3,
    /**基金会法人登记证书(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2396 = 4,
    /**执业许可证/执业证(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2520 = 5,
    /**基层群众性自治组织特别法人统一社会信用代码证(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2521 = 6,
    /**农村集体经济组织登记证(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2522 = 7,
    /**宗教活动场所登记证(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2399 = 8,
    /**政府部门下发的其他有效证明文件(主体为社会组织时选择) */
    CERTIFICATE_TYPE_2400 = 9,
  }
  enum EnumWeChatPayApplymentContactType {
    /**经营者/法定代表人 */
    LEGAL = 0,
    /**经办人(经商户授权办理微信支付业务的人员) */
    SUPER = 1,
  }
  enum EnumWeChatPayApplymentFinanceType {
    /**银行业(适用于商业银行、政策性银行、农村合作银行、村镇银行、开发性金融机构等) */
    BANK_AGENT = 0,
    /**支付机构(适用于非银行类支付机构) */
    PAYMENT_AGENT = 1,
    /**保险业(适用于保险、保险中介、保险代理、保险经纪等保险类业务) */
    INSURANCE = 2,
    /**交易及结算类金融机构(适用于交易所、登记结算类机构、银行卡清算机构、资金清算中心等) */
    TRADE_AND_SETTLE = 3,
    /**其他金融机构(适用于财务公司、信托公司、金融资产管理公司、金融租赁公司、汽车金融公司、贷款公司、货币经纪公司、消费金融公司、证券业、金融控股公司、股票、期货、货币兑换、小额贷款公司、金融资产管理、担保公司、商业保理公司、典当行、融资租赁公司、财经咨询等其他金融业务) */
    OTHER = 4,
  }
  enum EnumWeChatPayApplymentIdDocType {
    /**中国大陆居民 */
    IDENTIFICATION_TYPE_IDCARD = 0,
    /**其他国家或地区居民 */
    IDENTIFICATION_TYPE_OVERSEA_PASSPORT = 1,
    /**中国香港居民 */
    IDENTIFICATION_TYPE_HONGKONG_PASSPORT = 2,
    /**中国澳门居民 */
    IDENTIFICATION_TYPE_MACAO_PASSPORT = 3,
    /**中国台湾居民 */
    IDENTIFICATION_TYPE_TAIWAN_PASSPORT = 4,
    /**外国人居留证 */
    IDENTIFICATION_TYPE_FOREIGN_RESIDENT = 5,
    /**港澳居民证 */
    IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT = 6,
    /**台湾居民证 */
    IDENTIFICATION_TYPE_TAIWAN_RESIDENT = 7,
  }
  enum EnumWeChatPayApplymentIdHolderType {
    /**经营者/法定代表人 */
    LEGAL = 0,
    /**经办人(经商户授权办理微信支付业务的人员,授权范围包括但不限于签约,入驻过程需完成账户验证) */
    SUPER = 1,
  }
  enum EnumWeChatPayApplymentSalesScenesType {
    /**线下场所 */
    SALES_SCENES_STORE = 0,
    /**服务号与公众号 */
    SALES_SCENES_MP = 1,
    /**小程序 */
    SALES_SCENES_MINI_PROGRAM = 2,
    /**互联网网站 */
    SALES_SCENES_WEB = 3,
    /**App */
    SALES_SCENES_APP = 4,
    /**企业微信 */
    SALES_SCENES_WEWORK = 5,
  }
  enum EnumWeChatPayApplymentState {
    /**编辑中,提交申请发生错误导致,请尝试重新提交 */
    APPLYMENT_STATE_EDITTING = 0,
    /**审核中,申请单正在审核中,超级管理员用微信打开“签约链接”,完成绑定微信号后,申请单进度将通过微信公众号通知超级管理员,引导完成后续步骤 */
    APPLYMENT_STATE_AUDITING = 1,
    /**已驳回,请按照驳回原因修改申请资料,超级管理员用微信打开“签约链接”,完成绑定微信号,后续申请单进度将通过微信公众号通知超级管理员 */
    APPLYMENT_STATE_REJECTED = 2,
    /**待账户验证,请超级管理员使用微信打开返回的“签约链接”,根据页面指引完成账户验证 */
    APPLYMENT_STATE_TO_BE_CONFIRMED = 3,
    /**待签约,请超级管理员使用微信打开返回的“签约链接”,根据页面指引完成签约 */
    APPLYMENT_STATE_TO_BE_SIGNED = 4,
    /**开通权限中,系统开通相关权限中,请耐心等待 */
    APPLYMENT_STATE_SIGNING = 5,
    /**已完成,商户入驻申请已完成 */
    APPLYMENT_STATE_FINISHED = 6,
    /**已作废,申请单已被撤销 */
    APPLYMENT_STATE_CANCELED = 7,
  }
  enum EnumWeChatPayApplymentSubjectType {
    /**个体户(营业执照上的主体类型一般为个体户、个体工商户、个体经营) */
    SUBJECT_TYPE_INDIVIDUAL = 0,
    /**企业(营业执照上的主体类型一般为有限公司、有限责任公司) */
    SUBJECT_TYPE_ENTERPRISE = 1,
    /**政府机关(包括各级、各类政府机关,如机关党委、税务、民政、人社、工商、商务、市监等) */
    SUBJECT_TYPE_GOVERNMENT = 2,
    /**事业单位(包括国内各类事业单位,如:医疗、教育、学校等单位) */
    SUBJECT_TYPE_INSTITUTIONS = 3,
    /**社会组织(包括社会团体、民办非企业、基金会、基层群众性自治组织、农村集体经济组织等组织) */
    SUBJECT_TYPE_OTHERS = 4,
  }
  interface ExportTaskCheckReceiveTaskUsersCommand {
    /** 任务Id */
    id?: string;
@@ -1536,6 +1665,24 @@
    /** 错误码 */
    errorCode?: string;
    data?: GetEnterpriseWalletTransactionQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetEnterpriseWeChatPayWalletQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetEnterpriseWeChatPayWalletQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -2614,6 +2761,24 @@
    /** 错误码 */
    errorCode?: string;
    data?: OpenEnterpriseWalletCommandResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultOpenEnterpriseWeChatPayWalletCommandResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: OpenEnterpriseWeChatPayWalletCommandResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -3801,6 +3966,33 @@
    /** 订单支付时间 */
    transDate?: string;
    transactionStatus?: EnumWalletTransactionStatus;
  }
  interface GetEnterpriseWeChatPayWalletQueryResult {
    /** 钱包Id */
    id?: string;
    /** 超级管理员签约链接
1、超级管理员用微信扫码,关注“微信支付商家助手”公众号后,公众号将自动发送签约消息;超管需点击消息,根据指引完成核对联系信息、账户验证、签约等操作;
2、超管完成核对联系信息,后续申请单进度可通过公众号自动通知超级管理员 */
    sign_url?: string;
    applyment_state?: EnumWeChatPayApplymentState;
    /** 申请状态描述 */
    applyment_state_msg?: string;
    /** 驳回原因详情,各项资料的审核情况,当申请状态为APPLYMENT_STATE_REJECTED时才返回 */
    audit_detail?: WeChatPayGetApplymentResponseAuditDetail[];
    /** 余额 */
    balance?: number;
    /** 业务申请编号
1、只能由数字、字母或下划线组成,建议前缀为服务商商户号;
2、服务商自定义的唯一编号;
3、每个编号对应一个申请单,每个申请单审核通过后会生成一个微信支付商户号。 */
    business_code: string;
    contact_info: WeChatPayApplymentBodyParametersContactInfo;
    subject_info: WeChatPayApplymentBodyParametersSubjectInfo;
    business_info: WeChatPayApplymentBodyParametersBusinessInfo;
    settlement_info: WeChatPayApplymentBodyParametersSettlementInfo;
    bank_account_info: WeChatPayApplymentBodyParametersBankAccountInfo;
    addition_info?: WeChatPayApplymentBodyParametersAdditionInfo;
  }
  interface GetExceptionLogsQuery {
@@ -5682,6 +5874,36 @@
    signUrl?: string;
  }
  interface OpenEnterpriseWeChatPayWalletCommand {
    /** 企业Id */
    enterpriseId?: string;
    /** 业务申请编号
1、只能由数字、字母或下划线组成,建议前缀为服务商商户号;
2、服务商自定义的唯一编号;
3、每个编号对应一个申请单,每个申请单审核通过后会生成一个微信支付商户号。 */
    business_code: string;
    contact_info: WeChatPayApplymentBodyParametersContactInfo;
    subject_info: WeChatPayApplymentBodyParametersSubjectInfo;
    business_info: WeChatPayApplymentBodyParametersBusinessInfo;
    settlement_info: WeChatPayApplymentBodyParametersSettlementInfo;
    bank_account_info: WeChatPayApplymentBodyParametersBankAccountInfo;
    addition_info?: WeChatPayApplymentBodyParametersAdditionInfo;
  }
  interface OpenEnterpriseWeChatPayWalletCommandResult {
    /** 钱包Id */
    id?: string;
    /** 超级管理员签约链接
1、超级管理员用微信扫码,关注“微信支付商家助手”公众号后,公众号将自动发送签约消息;超管需点击消息,根据指引完成核对联系信息、账户验证、签约等操作;
2、超管完成核对联系信息,后续申请单进度可通过公众号自动通知超级管理员 */
    sign_url?: string;
    applyment_state?: EnumWeChatPayApplymentState;
    /** 申请状态描述 */
    applyment_state_msg?: string;
    /** 驳回原因详情,各项资料的审核情况,当申请状态为APPLYMENT_STATE_REJECTED时才返回 */
    audit_detail?: WeChatPayGetApplymentResponseAuditDetail[];
  }
  interface PagedListQueryPageModel {
    /** 行数 */
    rows?: number;
@@ -6672,6 +6894,626 @@
    url?: string;
  }
  interface WeChatPayApplymentBodyParametersAdditionInfo {
    /** 法定代表人开户承诺函
1、请上传法定代表人或负责人亲笔签署的开户承诺函扫描件(下载模板)。亲笔签名承诺函内容清晰可见,不得有涂污,破损,字迹不清晰现象;
2、请填写通过图片上传API预先上传图片生成好的MediaID 。 */
    legal_person_commitment?: string;
    /** 法定代表人开户意愿视频
1、建议法定代表人按如下话术录制“法定代表人开户意愿视频”:
我是#公司全称#的法定代表人(或负责人),特此证明本公司申请的商户号为我司真实意愿开立且用于XX业务(或XX服务)。我司现有业务符合法律法规及腾讯的相关规定。
2、支持上传20M内的视频,格式可为avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb;
3、请填写通过视频上传API预先上传视频生成好的MediaID 。 */
    legal_person_video?: string;
    /** 补充材料
1、最多可上传5张照片;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    business_addition_pics?: string[];
    /** 补充说明
512字以内 */
    business_addition_msg?: string;
  }
  interface WeChatPayApplymentBodyParametersBankAccountInfo {
    bank_account_type: EnumWeChatPayApplymentBankAccountType;
    /** 开户名称
1、选择“经营者个人银行卡”时,开户名称必须与“经营者证件姓名”一致;
2、选择“对公银行账户”时,开户名称必须与营业执照上的“商户名称”一致;
3、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    account_name: string;
    /** 开户银行
对私银行调用:查询支持个人业务的银行列表API
对公银行调用:查询支持对公业务的银行列表API */
    account_bank: string;
    /** 开户银行省市编码
该字段即将下线处理,无需传入
至少精确到市,详细参见省市区编号对照表
注:仅当省市区编号对照表中无对应的省市区编号时,可向上取该银行对应市级编号或省级编号。 */
    bank_address_code?: string;
    /** 开户银行银行号
1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行,开户银行全称(含支行)和开户银行联行号二选一;
2、详细需调用查询支行列表API查看查询结果。 */
    bank_branch_id?: string;
    /** 开户银行全称(含支行)
1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行,开户银行全称(含支行)和开户银行联行号二选一;
2、详细需调用查询支行列表API查看查询结果。 */
    bank_name?: string;
    /** 银行账号
1、数字,长度遵循系统支持的卡号长度要求表;
2、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    account_number: string;
  }
  interface WeChatPayApplymentBodyParametersBusinessInfo {
    /** 商户简称
在支付完成页向买家展示,需与微信经营类目相关
1、请输入1-64个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、仅支持utf-8格式;
6、简称要求
(1)不支持单纯以人名来命名,若为个体户经营,可用“个体户+经营者名称”或“经营者名称+业务”命名,如“个体户张三”或“张三餐饮店”;
(2)不支持无实际意义的文案,如“XX特约商户”、“800”、“XX客服电话XXX”。 */
    merchant_shortname: string;
    /** 客服电话
将在交易记录中向买家展示,请确保电话畅通以便平台回拨确认
1、前后不能有空格、制表符、换行符;
2、需满足以下任一条件;
11位数字的手机号码;
5-20位数字、连字符“-”、加号“+”。 */
    service_phone: string;
    sales_info: WeChatPayApplymentBodyParametersBusinessInfoSalesInfo;
  }
  interface WeChatPayApplymentBodyParametersBusinessInfoSalesInfo {
    /** 经营场景类型
1、请勾选实际售卖商品/提供服务场景(至少一项),以便为你开通需要的支付权限;
2、建议只勾选目前必须的场景,以便尽快通过入驻审核,其他支付权限可在入驻后再根据实际需要发起申请 */
    sales_scenes_type: EnumWeChatPayApplymentSalesScenesType[];
    biz_store_info?: WeChatPayApplymentBodyParametersBusinessInfoSalesInfoBizStoreInfo;
    mp_info?: WeChatPayApplymentBodyParametersBusinessInfoSalesInfoMpInfo;
    mini_program_info?: WeChatPayApplymentBodyParametersBusinessInfoSalesInfoMiniProgramInfo;
    app_info?: WeChatPayApplymentBodyParametersBusinessInfoSalesInfoAppInfo;
    web_info?: WeChatPayApplymentBodyParametersBusinessInfoSalesInfoWebInfo;
    wework_info?: WeChatPayApplymentBodyParametersBusinessInfoSalesInfoWeworkInfo;
  }
  interface WeChatPayApplymentBodyParametersBusinessInfoSalesInfoAppInfo {
    /** 服务商应用AppID
1、服务商应用AppID与商家应用AppID,二选一必填;
2、可填写当前服务商商户号已绑定的应用AppID。 */
    app_appid?: string;
    /** 商家应用AppID
1、服务商应用AppID与商家应用AppID,二选一必填;
2、可填写与商家主体一致且已认证的应用AppID,需是已认证的App;
3、审核通过后,系统将发起特约商家商户号与该AppID的绑定(即配置为sub_appid),服务商随后可在发起支付时选择传入该AppID,以完成支付,并获取sub_openid用于数据统计,营销等业务场景。 */
    app_sub_appid?: string;
    /** App截图
1、请提供APP首页截图、尾页截图、应用内截图、支付页截图各1张;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    app_pics: string[];
  }
  interface WeChatPayApplymentBodyParametersBusinessInfoSalesInfoBizStoreInfo {
    /** 线下场所名称
请填写门店名称
1、长度为1-50个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、仅支持utf-8格式。 */
    biz_store_name: string;
    /** 线下场所省市编码
1、只能由数字组成;
2、详细参见微信支付提供的省市对照表。 */
    biz_address_code: string;
    /** 线下场所地址
请填写详细的经营场所信息,如有多个场所,选择一个主要场所填写即可。
1、长度为4-512个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、仅支持utf-8格式。 */
    biz_store_address: string;
    /** 线下场所门头照片
1、请上传门头正面照片(要求门店招牌、门框完整、清晰、可辨识);若为停车场等无固定门头照片的经营场所,可上传岗亭/出入闸口。具体参考【指引文档】;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    store_entrance_pic: string[];
    /** 线下场所内部照片
1、请上传门店内部环境照片(可辨识经营内容)。若为停车场等无固定门头的经营场所,可上传停车场内部照片。具体参考【指引文档】;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    indoor_pic: string[];
    /** 线下场所对应的商家AppID
1、可填写与商家主体一致且已认证的服务号或公众号、小程序、APP的AppID,其中服务号或公众号AppID需是已认证的服务号、政府或媒体类型的公众号;
2、审核通过后,系统将额外为商家开通付款码支付、JSAPI支付的自有交易权限,并完成商家商户号与该AppID的绑定。 */
    biz_sub_appid?: string;
  }
  interface WeChatPayApplymentBodyParametersBusinessInfoSalesInfoMiniProgramInfo {
    /** 服务商小程序AppID
1、服务商小程序AppID与商家小程序AppID,二选一必填;
2、可填写当前服务商商户号已绑定的小程序AppID。 */
    mini_program_appid?: string;
    /** 商家小程序AppID
1、服务商小程序AppID与商家小程序AppID,二选一必填;
2、请填写已认证的小程序AppID;
3、完成进件后,系统发起特约商户号与该AppID的绑定(即配置为sub_appid可在发起支付时传入)
(1)若AppID主体与商家主体/服务商主体一致,则直接完成绑定;
(2)若AppID主体与商家主体/服务商主体不一致,则商户签约时显示《联合营运承诺函》,并且AppID的管理员需登录公众平台确认绑定意愿。 */
    mini_program_sub_appid?: string;
    /** 小程序截图
1、请提供展示商品/服务的页面截图/设计稿(最多5张),若小程序未建设完善或未上线 请务必提供;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    mini_program_pics?: string[];
  }
  interface WeChatPayApplymentBodyParametersBusinessInfoSalesInfoMpInfo {
    /** 服务商服务号或公众号AppID
1、服务商服务号或公众号AppID、商家服务号或公众号AppID,二选一必填;
2、可填写当前服务商商户号已绑定的服务号或公众号AppID。 */
    mp_appid?: string;
    /** 商家服务号或公众号AppID
1、服务商服务号或公众号AppID、商家服务号或公众号AppID,二选一必填;
2、可填写与商家主体一致且已认证的服务号或公众号AppID,需是已认证的服务号、政府或媒体类型的公众号;
3、审核通过后,系统将发起特约商家商户号与该AppID的绑定(即配置为sub_appid),服务商随后可在发起支付时选择传入该appid,以完成支付,并获取sub_openid用于数据统计,营销等业务场景。 */
    mp_sub_appid?: string;
    /** 服务号或公众号页面截图
1、请提供展示商品/服务的页面截图/设计稿(最多5张),若服务号或公众号未建设完善或未上线请务必提供;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    mp_pics: string[];
  }
  interface WeChatPayApplymentBodyParametersBusinessInfoSalesInfoWebInfo {
    /** 互联网网站域名
1、如为PC端商城、智能终端等场景,可上传官网链接;
2、网站域名需ICP备案,若备案主体与申请主体不同,请上传加盖公章的网站授权函。 */
    domain: string;
    /** 网站授权函
1、若备案主体与申请主体不同,请务必上传加盖公章的网站授权函.doc;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    web_authorisation?: string;
    /** 互联网网站对应的商家AppID
1、可填写已认证的服务号或公众号、小程序、APP的AppID,其中服务号或公众号AppID需是已认证的服务号、政府或媒体类型的公众号;
2、完成进件后,系统发起特约商户号与该AppID的绑定(即配置为sub_appid,可在发起支付时传入)
  (1)若APPID主体与商家主体一致,则直接完成绑定;
  (2)若APPID主体与商家主体不一致,则商户签约时显示《联合营运承诺函》,并且 AppID的管理员需登录公众平台确认绑定意愿;( 暂不支持绑定异主体的应用APPID)。 */
    web_appid?: string;
  }
  interface WeChatPayApplymentBodyParametersBusinessInfoSalesInfoWeworkInfo {
    /** 商家企业微信CorpID
1、可填写与商家主体一致且已认证的企业微信CorpID;
2、审核通过后,系统将为商家开通企业微信专区的自有交易权限,并完成商家商户号与该AppID的绑定,商家可自行发起交易。 */
    sub_corp_id: string;
    /** 企业微信页面截图
1、最多可上传5张照片;
2、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    wework_pics: string[];
  }
  interface WeChatPayApplymentBodyParametersContactInfo {
    contact_type: EnumWeChatPayApplymentContactType;
    /** 超级管理员姓名
1、长度为2-100个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符。
该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    contact_name: string;
    contact_id_doc_type?: EnumWeChatPayApplymentIdDocType;
    /** 超级管理员身份证件号码
1、当超级管理员类型是经办人时,请上传超级管理员证件号码;
2、可传身份证、来往内地通行证、来往大陆通行证、护照等证件号码,号码规范如下:
身份证(限中国大陆居民):17位数字+1位数字|X;
护照(限境外人士):4-15位 数字|字母|连字符;
中国香港居民--来往内地通行证:H/h开头+8或10位数字/字母;
中国澳门居民--来往内地通行证:M/m开头+8或10位数字/字母;
中国台湾居民--来往大陆通行证:8位数字或10位数字;
外国人居留证:15位 数字|字母;
台湾居民居住证/港澳居民居住证:17位数字+1位数字|X;
3、超级管理员签约时,校验微信号绑定的银行卡实名信息,是否与该证件号码一致;
4、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    contact_id_number?: string;
    /** 超级管理员证件正面照片
1、当超级管理员类型是经办人时,请上传超级管理员证件的正面照片;
2、若证件类型为身份证,请上传人像面照片;
3、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
4、请上传彩色照片或彩色扫描件或复印件(需加盖公章鲜章),可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
5、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    contact_id_doc_copy?: string;
    /** 超级管理员证件反面照片
1、当超级管理员类型是经办人时,请上传超级管理员证件的反面照片;
2、若证件类型为护照,无需上传反面照片;
3、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
4、请上传彩色照片或彩色扫描件,复印件需加盖公章鲜章,可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
5、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    contact_id_doc_copy_back?: string;
    /** 超级管理员证件有效期开始时间
1、当超级管理员类型是经办人时,请上传证件有效期开始时间;
2、请按照示例值填写,日期格式应满足合法的YYYY-MM-DD格式;
3、开始时间不能小于1900-01-01,开始时间不能大于等于当前日期。 */
    contact_period_begin?: string;
    /** 超级管理员证件有效期结束时间
1、当超级管理员类型是经办人时,请上传证件有效期结束时间;
2、请按照示例值填写,日期格式应满足合法的YYYY-MM-DD格式,若证件有效期为长期,请填写:长期;
3、结束时间大于开始时间。 */
    contact_period_end?: string;
    /** 业务办理授权函
该字段即将下线处理,无需传入
1、当超级管理员类型是经办人时,请上传业务办理授权函;
2、请参照示例图打印业务办理授权函,全部信息需打印,不支持手写商户信息,并加盖公章;
3、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    business_authorization_letter?: string;
    /** 超级管理员微信OpenID
该字段选填,若上传为超级管理员签约时,会校验微信号是否与该微信OpenID一致 */
    openid?: string;
    /** 联系手机
1、前后不能有空格、制表符、换行符;
2、需满足以下任一条件:
11位数字的手机号码;
5-20位数字、连字符“-”、加号“+”;
3、用于接收微信支付的重要管理信息及日常操作验证码;
4、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    mobile_phone: string;
    /** 联系邮箱
1、用于接收微信支付的开户邮件及日常业务通知;
2、需要带@,遵循邮箱格式校验 ,该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    contact_email: string;
  }
  interface WeChatPayApplymentBodyParametersSettlementInfo {
    /** 入驻结算规则ID
请选择结算规则ID,详细参见费率结算规则对照表 */
    settlement_id: string;
    /** 所属行业
填写指定行业名称,详细参见费率结算规则对照表 */
    qualification_type: string;
    /** 特殊资质图片
1、仅当商户选择了必需提交特殊资质的行业时,需要提供该项资料;若商户选择了无需特殊资质的行业,或未选择行业时,无需提交该项资料,详情查看《费率结算规则对照表》;
2、最多可上传5张照片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    qualifications?: string[];
    /** 优惠费率活动ID
选择指定活动ID,如果商户有意向报名优惠费率活动,该字段必填。详细参见《优惠费率活动对照表》 */
    activities_id?: string;
    /** 优惠费率活动值
根据优惠费率活动规则,由合作伙伴自定义填写,支持两个小数点,需在优惠费率活动ID指定费率范围内
(1)2023年7月17日-9月17日,各合作伙伴平台可选择只传入“活动费率值”,或分别传入“信用卡优惠活动费率值” 与 “非信用卡优惠活动费率值”,只传入“活动费率值”的情况下,平台将协助将申请单中的 “优惠活动费率值” 回填入新增的 “信用卡优惠活动费率值” 与 “非信用卡优惠活动费率值”中 ;
(2)2023年9月18日起,平台将不再提供如上兼容能力,届时仅能分别传入“信用卡优惠活动费率值” 与 “非信用卡优惠活动费率值”,否则接口将会报错。为避免影响正常进件,请在兼容期间完成相关调整。 */
    activities_rate?: string;
    /** 优惠费率活动补充材料
1、根据所选优惠费率活动,提供相关材料,详细参见《优惠费率活动对照表》;
2、最多可上传5张照片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    activities_additions?: string[];
    /** 非信用卡活动费率值
用户支付方式为借记卡时收取的手续费费率:
1、若填写了优惠费率活动ID,则该字段必填;
2、仅能填入2位以内小数,且在优惠费率活动ID指定费率范围内。 */
    debit_activities_rate?: string;
    /** 信用卡活动费率值
用户支付方式为信用卡时收取的手续费费率:
1、若填写了优惠费率活动ID,则该字段必填;
2、仅能填入2位以内小数,且在优惠费率活动ID指定费率范围内。 */
    credit_activities_rate?: string;
  }
  interface WeChatPayApplymentBodyParametersSubjectInfo {
    subject_type: EnumWeChatPayApplymentSubjectType;
    /** 是否是金融机构
选填,请根据申请主体的实际情况填写,可参考选择金融机构指引:
1、若商户主体是金融机构,则填写:true;
2、若商户主体不是金融机构,则填写:false。
若未传入将默认填写:false。 */
    finance_institution?: boolean;
    business_license_info?: WeChatPayApplymentBodyParametersSubjectInfoBusinessLicenseInfo;
    certificate_info?: WeChatPayApplymentBodyParametersSubjectInfoCertificateInfo;
    finance_institution_info?: WeChatPayApplymentBodyParametersSubjectInfoFinanceInstitutionInfo;
    identity_info: WeChatPayApplymentBodyParametersSubjectInfoIdentityInfo;
    /** 最终受益人信息列表(UBO)
1、主体类型个体户/社会组织/政府机关/事业单位时,无需填写
2、主体类型为企业时,按照下述要求填写
1)若经营者/法定代表人不是最终受益所有人,则需提填写受益所有人信息,最多上传4个。
2)若经营者/法定代表人是最终受益所有人之一,可在此填写其他受益所有人信息,最多上传3个。
根据国家相关法律法规,需要提供公司受益所有人信息,受益所有人需符合至少以下条件之一:
▪️直接或者间接拥有超过25%公司股权或者表决权的自然人。
▪️通过人事、财务等其他方式对公司进行控制的自然人。
▪️公司的高级管理人员,包括公司的经理、副经理、财务负责人、上市公司董事会秘书和公司章程规定的其他人员。 */
    ubo_info_list?: WeChatPayApplymentBodyParametersSubjectInfoUboInfo[];
  }
  interface WeChatPayApplymentBodyParametersSubjectInfoBusinessLicenseInfo {
    /** 营业执照照片
1、照片应正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
2、上传彩色照片、彩色扫描件,复印件需加盖公章鲜章;
3、水印仅限于微信支付业务相关;
4、指引与示例可参考【指引文档】;
5、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    license_copy: string;
    /** 注册号/统一社会信用代码
1、主体为“个体工商户”时,请填写营业执照上的注册号/统一社会信用代码,格式需满足以下任一条件:
-15位数字;
-18位阿拉伯数字或大写英文字母(不得包含英文字母I/O/Z/S/V),并且以9开头。
2、主体为“企业”时,请填写营业执照上的注册号/统一社会信用代码,格式如下:
-18位阿拉伯数字或大写英文字母(不得包含英文字母I/O/Z/S/V),并且以9开头。 */
    license_number: string;
    /** 商户名称
1、长度为2-128个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、仅支持utf-8格式;
6、个体户证件为以下情况时,按照个体户XXX命名(XXX是营业执照经营人姓名):营业执照登记名称为空、仅含数字、仅含特殊字符、“无”、“无字号”;
7、个体户不能使用“企业”“公司”或“农民专业合作社”结尾。 */
    merchant_name: string;
    /** 个体户经营者/法定代表人姓名
请填写营业执照的经营者/法定代表人姓名
1、长度为2-100个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符。 */
    legal_person: string;
    /** 注册地址
建议填写营业执照的注册地址,若该字段未填写,系统将会查询国家工商信息填入。需注意若工商信息查询不到,则会被审核驳回。
1、长度为4-128个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、仅支持utf-8格式。 */
    license_address?: string;
    /** 有效期限开始日期
建议填写营业执照的有效期限开始时间,若该字段未填写,系统将会查询国家工商信息填入。需注意若工商信息查询不到,则会被审核驳回。
1、日期格式应满足合法的YYYY-MM-DD格式;
2、开始时间不能小于1900-01-01;
3、开始时间不能大于等于当前日期。 */
    period_begin?: string;
    /** 有效期限结束日期
建议填写营业执照的有效期限结束时间,若该字段未填写,系统将会查询国家工商信息填入。需注意若工商信息查询不到,则会被审核驳回。
1、日期格式应满足合法的YYYY-MM-DD格式或长期;
2、结束时间需大于开始时间。 */
    period_end?: string;
  }
  interface WeChatPayApplymentBodyParametersSubjectInfoCertificateInfo {
    /** 登记证书照片
1、照片应正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
2、上传彩色照片、彩色扫描件,复印件需加盖公章鲜章;
3、水印仅限于微信支付业务相关;
4、指引与示例可参考【指引文档】;
5、请填写通过图片上传API预先上传图片生成好的MediaID。 */
    cert_copy: string;
    cert_type: EnumWeChatPayApplymentCertType;
    /** 证书号
请输入与所选证书类型相匹配且符合国家标准规范的证书号,其中除政府证明文件外,需满足18位阿拉伯数字或大写英文字母(不得包含英文字母I/O/Z/S/V) */
    cert_number: string;
    /** 商户名称
请填写登记证书上的商户名称
1、长度为2-128个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、仅支持utf-8格式。 */
    merchant_name: string;
    /** 注册地址
请填写登记证书的注册地址
1、长度为4-128个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、仅支持utf-8格式。 */
    company_address: string;
    /** 法定代表人
请填写登记证书上的法定代表人姓名
1、长度为2-100个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符。 */
    legal_person: string;
    /** 有效期限开始日期
1、日期格式应满足合法的YYYY-MM-DD格式;
2、开始时间不能小于1900-01-01;
3、开始时间不能大于等于当前日期。 */
    period_begin: string;
    /** 有效期限结束日期
1、日期格式应满足合法的YYYY-MM-DD格式或长期;
2、结束时间需大于开始时间。 */
    period_end: string;
    /** 单位证明函照片
1、主体类型为政府机关、事业单位选传:
  (1)若上传,则审核通过后即可签约,无需汇款验证;
  (2)若未上传,则审核通过后,需汇款验证。
2、主体为个体户、企业、其他组织等,不需要上传本字段;
3、请参照示例图打印单位证明函,全部信息需打印,不支持手写商户信息,并加盖公章;
4、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    certificate_letter_copy?: string;
  }
  interface WeChatPayApplymentBodyParametersSubjectInfoFinanceInstitutionInfo {
    finance_type: EnumWeChatPayApplymentFinanceType;
    /** 金融机构许可证图片
1、照片应正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
2、上传彩色照片、彩色扫描件,复印件需加盖公章鲜章;
3、水印仅限于微信支付业务相关;
4、根据所属金融机构类型的许可证要求提供,详情查看金融机构指引;
5、请提供为“申请商家主体”所属的许可证,可授权使用总公司/分公司的特殊资质;
6、最多可上传5张照片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    finance_license_pics: string[];
  }
  interface WeChatPayApplymentBodyParametersSubjectInfoIdentityInfo {
    id_holder_type?: EnumWeChatPayApplymentIdHolderType;
    id_doc_type?: EnumWeChatPayApplymentIdDocType;
    /** 法定代表人说明函
1、当证件持有人类型为经办人时,必须上传。其他情况,无需上传;
2、若因特殊情况,无法提供法定代表人证件时,请参照示例图打印法定代表人说明函,全部信息需打印,不支持手写商户信息,并加盖公章;
3、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    authorize_letter_copy?: string;
    id_card_info?: WeChatPayApplymentBodyParametersSubjectInfoIdentityInfoIdCardInfo;
    id_doc_info?: WeChatPayApplymentBodyParametersSubjectInfoIdentityInfoIdDocInfo;
  }
  interface WeChatPayApplymentBodyParametersSubjectInfoIdentityInfoIdCardInfo {
    /** 身份证人像面照片
1、请上传个体户经营者/法定代表人的身份证人像面照片;
2、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
3、请上传彩色照片or彩色扫描件,复印件需加盖公章鲜章,可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
4、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    id_card_copy: string;
    /** 身份证国徽面照片
1、请上传个体户经营者/法定代表人的身份证国徽面照片;
2、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
3、请上传彩色照片or彩色扫描件,复印件需加盖公章鲜章,可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
4、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    id_card_national: string;
    /** 身份证姓名
1、请填写个体户经营者/法定代表人对应身份证的姓名;
2、长度为2-100个字符;
3、前后不能有空格、制表符、换行符;
4、不能仅含数字、特殊字符;
5、仅能填写数字、英文字母、汉字及特殊字符;
6、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    id_card_name: string;
    /** 身份证号码
1、请填写个体户经营者/法定代表人对应身份证的号码;
2、17位数字+1位数字|X ,该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    id_card_number: string;
    /** 身份证居住地址
1、主体类型为企业时,需要填写。其他主体类型,无需上传;
2、请按照身份证住址填写,如广东省深圳市南山区xx路xx号xx室;
3、长度为4-128个字符;
4、前后不能有空格、制表符、换行符;
5、不能仅含数字、特殊字符;
6、仅能填写数字、英文字母、汉字及特殊字符;
7、仅支持utf-8格式;
8、 该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    id_card_address?: string;
    /** 身份证有效期开始时间
1、日期格式应满足合法的YYYY-MM-DD格式;
2、开始时间不能小于1900-01-01;
3、开始时间不能大于等于当前日期。 */
    card_period_begin: string;
    /** 身份证有效期结束时间
1、日期格式应满足合法的YYYY-MM-DD格式或长期;
2、结束时间需大于开始时间。 */
    card_period_end: string;
  }
  interface WeChatPayApplymentBodyParametersSubjectInfoIdentityInfoIdDocInfo {
    /** 证件正面照片
1、证件类型不为“身份证”时,上传证件正面照片;
2、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
3、请上传彩色照片or彩色扫描件,复印件需加盖公章鲜章,可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
4、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    id_doc_copy: string;
    /** 证件反面照片
1、若证件类型为往来通行证、外国人居留证、港澳居住证、台湾居住证时,上传证件反面照片;
2、若证件类型为护照,无需上传反面照片;
3、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
4、请上传彩色照片or彩色扫描件,复印件需加盖公章鲜章,可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
5、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    id_doc_copy_back?: string;
    /** 证件姓名
1、请填写经营者/法定代表人的证件姓名;
2、长度为2-100个字符;
3、前后不能有空格、制表符、换行符;
4、不能仅含数字、特殊字符;
5、仅能填写数字、英文字母、汉字及特殊字符;
6、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    id_doc_name: string;
    /** 证件号码
1、请填写经营者/法定代表人的证件号码:
护照(限境外人士):4-15位 数字|字母|连字符;
中国香港居民--来往内地通行证:H/h开头+8或10位数字/字母;
中国澳门居民--来往内地通行证:M/m开头+8或10位数字/字母;
中国台湾居民--来往大陆通行证:8位数字或10位数字;
外国人居留证:15位 数字|字母;
台湾居民居住证/港澳居民居住证:17位数字+1位数字|X;
2、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    id_doc_number: string;
    /** 证件居住地址
1、主体类型为企业时,需要填写。其他主体类型,无需上传;
2、请按照身份证住址填写,如广东省深圳市南山区xx路xx号xx室;
3、长度为4-128个字符;
4、前后不能有空格、制表符、换行符;
5、不能仅含数字、特殊字符;
6、仅能填写数字、英文字母、汉字及特殊字符;
7、仅支持utf-8格式;
8、 该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    id_doc_address?: string;
    /** 证件有效期开始时间
1、日期格式应满足合法的YYYY-MM-DD格式;
2、开始时间不能小于1900-01-01;
3、开始时间不能大于等于当前日期。 */
    doc_period_begin: string;
    /** 证件有效期结束时间
1、日期格式应满足合法的YYYY-MM-DD格式或长期;
2、结束时间需大于开始时间。 */
    doc_period_end: string;
  }
  interface WeChatPayApplymentBodyParametersSubjectInfoUboInfo {
    ubo_id_doc_type: EnumWeChatPayApplymentIdDocType;
    /** 证件正面照片
1、请上传受益人证件的正面照片;
2、若证件类型为身份证,请上传人像面照片;
3、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
4、请上传彩色照片or彩色扫描件,复印件需加盖公章鲜章,可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
5、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    ubo_id_doc_copy: string;
    /** 证件反面照片
1、请上传受益人证件的反面照片;
2、若证件类型为身份证,请上传国徽面照片;
3、若证件类型为护照,无需上传反面照片;
4、正面拍摄、清晰、四角完整、无反光或遮挡;不得翻拍、截图、镜像、PS;
5、请上传彩色照片or彩色扫描件,复印件需加盖公章鲜章,可添加“微信支付”相关水印(如微信支付认证),见【指引文档】;
6、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。 */
    ubo_id_doc_copy_back?: string;
    /** 证件姓名
1、长度为2-100个字符;
2、前后不能有空格、制表符、换行符;
3、不能仅含数字、特殊字符;
4、仅能填写数字、英文字母、汉字及特殊字符;
5、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    ubo_id_doc_name: string;
    /** 证件号码
1、可传身份证、来往内地通行证、来往大陆通行证、护照等证件号码,号码规范如下:
身份证(限中国大陆居民):17位数字+1位数字|X;
护照(限境外人士):4-15位 数字|字母|连字符;
中国香港居民--来往内地通行证:H/h开头+8或10位数字/字母;
中国澳门居民--来往内地通行证:M/m开头+8或10位数字/字母;
中国台湾居民--来往大陆通行证:8位数字或10位数字;
外国人居留证:15位 数字|字母;
台湾居民居住证/港澳居民居住证:17位数字+1位数字|X。
2、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    ubo_id_doc_number: string;
    /** 证件居住地址
1、请按照身份证住址填写,如广东省深圳市南山区xx路xx号xx室;
2、长度为4-128个字符;
3、前后不能有空格、制表符、换行符;
4、不能仅含数字、特殊字符;
5、仅能填写数字、英文字母、汉字及特殊字符;
6、仅支持utf-8格式;
7、 该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 */
    ubo_id_doc_address: string;
    /** 证件有效期开始时间
1、日期格式应满足合法的YYYY-MM-DD格式;
2、开始时间不能小于1900-01-01;
3、开始时间不能大于等于当前日期。 */
    ubo_period_begin: string;
    /** 证件有效期结束时间
1、日期格式应满足合法的YYYY-MM-DD格式或长期;
2、结束时间需大于开始时间。 */
    ubo_period_end: string;
  }
  interface WeChatPayGetApplymentResponseAuditDetail {
    /** 提交申请单的资料项字段名 */
    field: string;
    /** 提交申请单的资料项字段名称 */
    field_name: string;
    /** 提交资料项被驳回的原因 */
    reject_reason: string;
  }
  interface WxmpLoginCommand {
    /** 用户登录凭证 */
    code: string;
src/views/EnterpriseManage/components/ConfigureDialog.vue
@@ -13,9 +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">
      <el-tab-pane lazy :name="EnterpriseConfigureType.Wechat">
        <WechatConfigureView :id="form.id" ref="wechatConfigureViewRef" />
      </el-tab-pane> -->
      </el-tab-pane>
      <el-tab-pane lazy :name="EnterpriseConfigureType.Electronic">
        <ElectronicConfigureView :id="form.id" ref="electronicConfigureViewRef" />
      </el-tab-pane>
src/views/EnterpriseManage/components/WechatConfigureView.vue
@@ -1,118 +1,922 @@
<template>
  <LoadingLayout :loading="isLoading">
    <ProForm :model="form" ref="dialogForm" label-width="130px">
    <ProForm :model="form" ref="dialogForm" label-width="150px">
      <ProFormItemV2
        label="联系人姓名:"
        prop="name"
        :checkRules="[{ message: '请输入联系人姓名' }]"
        label="业务申请编号:"
        prop="business_code"
        :checkRules="[{ message: '请输入业务申请编号', pattern: /^[a-zA-Z0-9_]+$/ }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入联系人姓名"> </ProFormText>
        <ProFormText v-model.trim="form.business_code" placeholder="请输入业务申请编号">
        </ProFormText>
      </ProFormItemV2>
      <ProFormItemV2
        label="联系人类型:"
        prop="name"
        :checkRules="[{ message: '请选择联系人类型' }]"
        label="超级管理员类型:"
        prop="contact_type"
        :checkRules="[{ message: '请选择超级管理员类型' }]"
      >
        <ProFormRadio v-model.trim="form.name" :value-enum="[]" button-style />
        <ProFormRadio
          v-model.trim="form.contact_type"
          :value-enum="EnumWeChatPayApplymentContactTypeText"
          :button-style="false"
        />
      </ProFormItemV2>
      <ProFormItemV2
        label="业务办理授权函:"
        prop="url"
        :check-rules="[{ type: 'upload', message: '请上传业务办理授权函' }]"
        label="超级管理员姓名:"
        prop="contact_name"
        :checkRules="[{ message: '请输入超级管理员姓名' }]"
      >
        <ProFormText
          :minlength="2"
          :maxlength="100"
          v-model.trim="form.contact_name"
          placeholder="请输入超级管理员姓名"
        >
        </ProFormText>
      </ProFormItemV2>
      <template v-if="form.contact_type === EnumWeChatPayApplymentContactType.SUPER">
        <ProFormItemV2
          label="超级管理员证件类型:"
          prop="contact_id_doc_type"
          :checkRules="[{ message: '请选择超级管理员证件类型' }]"
        >
          <ProFormSelect
            v-model="form.contact_id_doc_type"
            :valueEnum="EnumWeChatPayApplymentIdDocTypeText"
            placeholder="请选择超级管理员证件类型"
          >
          </ProFormSelect>
        </ProFormItemV2>
        <ProFormItemV2
          label="超级管理员证件号码:"
          prop="contact_id_number"
          :checkRules="[{ message: '请输入超级管理员证件号码' }]"
        >
          <ProFormText v-model.trim="form.contact_id_number" placeholder="请输入超级管理员证件号码">
          </ProFormText>
        </ProFormItemV2>
        <ProFormItemV2
          label="证件正面照片:"
          prop="contact_id_doc_copy"
          :check-rules="[{ type: 'upload', message: '请上传证件正面照片' }]"
        >
          <ProFormImageUpload
            v-model:file-url="form.contact_id_doc_copy"
            :limit-file-count="1"
          ></ProFormImageUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="证件反面照片:"
          prop="contact_id_doc_copy_back"
          :check-rules="[{ type: 'upload', message: '请上传证件反面照片' }]"
        >
          <ProFormImageUpload
            v-model:file-url="form.contact_id_doc_copy_back"
            :limit-file-count="1"
          ></ProFormImageUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="证件有效期:"
          prop="contact_period"
          :check-rules="[{ type: 'array', message: '请选择证件有效期' }]"
        >
          <ProFormDatePicker
            v-model="form.contact_period"
            type="daterange"
            range-separator="~"
            start-placeholder="起始日期"
            end-placeholder="到期日期"
            clearable
          ></ProFormDatePicker>
        </ProFormItemV2>
        <ProFormItemV2
          label="业务办理授权函:"
          prop="business_authorization_letter"
          :check-rules="[{ type: 'upload', message: '请上传业务办理授权函' }]"
        >
          <div style="display: flex">
            <ProFormUpload
              v-model:file-url="form.business_authorization_letter"
              :limit="1"
              :limitFileSize="10"
              accept="png,jpg,jpeg,pdf"
            ></ProFormUpload>
            <el-button style="margin-left: 10px" type="primary" link @click="downloadTemplate"
              >模板下载</el-button
            >
          </div>
        </ProFormItemV2>
      </template>
      <ProFormItemV2
        label="联系手机:"
        prop="mobile_phone"
        :checkRules="[{ type: 'phone', message: '请输入联系手机' }]"
      >
        <ProFormText v-model.trim="form.mobile_phone" placeholder="请输入联系手机" />
      </ProFormItemV2>
      <ProFormItemV2
        label="联系邮箱:"
        prop="contact_email"
        :checkRules="[{ type: 'email', message: '请输入联系邮箱' }]"
      >
        <ProFormText v-model.trim="form.contact_email" placeholder="请输入联系邮箱" />
      </ProFormItemV2>
      <ProFormItemV2
        label="主体类型:"
        prop="subject_type"
        :checkRules="[{ message: '请选择主体类型' }]"
      >
        <ProFormSelect
          v-model="form.subject_type"
          :valueEnum="EnumWeChatPayApplymentSubjectTypeText"
          placeholder="请选择主体类型"
        >
        </ProFormSelect>
      </ProFormItemV2>
      <template
        v-if="
          form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INDIVIDUAL ||
          form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_ENTERPRISE
        "
      >
        <ProFormItemV2
          label="营业执照:"
          prop="license_copy"
          :check-rules="[{ type: 'upload', message: '请上传营业执照' }]"
        >
          <ProFormUpload
            v-model:file-url="form.license_copy"
            :limitFileCount="1"
            :on-success="handleLicenseUrlChange"
            accept="jpg/jpeg,png,pdf"
          ></ProFormUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="商户名称:"
          prop="merchant_name"
          :checkRules="[{ message: '请输入商户名称' }]"
        >
          <ProFormText
            :maxlength="128"
            :minlength="2"
            show-word-limit
            v-model.trim="form.merchant_name"
            placeholder="请输入商户名称"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="统一社会信用代码:"
          prop="license_number"
          :checkRules="[{ message: '请输入统一社会信用代码', type: 'societyCreditCode' }]"
        >
          <ProFormText v-model.trim="form.license_number" placeholder="请输入统一社会信用代码" />
        </ProFormItemV2>
        <ProFormItemV2
          label="法人姓名:"
          prop="legal_person"
          :checkRules="[{ message: '请输入法人姓名' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="100"
            v-model.trim="form.legal_person"
            placeholder="请输入法人姓名"
          />
        </ProFormItemV2>
      </template>
      <template
        v-if="
          form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_GOVERNMENT ||
          form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INSTITUTIONS ||
          form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_OTHERS
        "
      >
        <ProFormItemV2
          label="登记证书照片:"
          prop="cert_copy"
          :check-rules="[{ type: 'upload', message: '请上传登记证书照片' }]"
        >
          <ProFormImageUpload
            v-model:file-url="form.cert_copy"
            :limit-file-count="1"
          ></ProFormImageUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="登记证书类型:"
          prop="cert_type"
          :checkRules="[{ message: '请选择登记证书类型' }]"
        >
          <ProFormSelect
            v-model="form.cert_type"
            :valueEnum="EnumWeChatPayApplymentCertTypeTextList"
            placeholder="请选择登记证书类型"
          >
          </ProFormSelect>
        </ProFormItemV2>
        <ProFormItemV2
          label="登记证书号:"
          prop="cert_number"
          :checkRules="[{ message: '请输入登记证书号' }]"
        >
          <ProFormText v-model.trim="form.cert_number" placeholder="请输入登记证书号" />
        </ProFormItemV2>
        <ProFormItemV2
          label="商户名称:"
          prop="cert_merchant_name"
          :checkRules="[{ message: '请输入商户名称' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="128"
            v-model.trim="form.cert_merchant_name"
            placeholder="请输入商户名称"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="注册地址:"
          prop="cert_company_address"
          :checkRules="[{ message: '请输入注册地址' }]"
        >
          <ProFormText
            :minlength="4"
            :maxlength="128"
            v-model.trim="form.cert_company_address"
            placeholder="请输入注册地址"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="法定代表人:"
          prop="cert_legal_person"
          :checkRules="[{ message: '请输入法定代表人' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="100"
            v-model.trim="form.cert_legal_person"
            placeholder="请输入法定代表人"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="证件有效期:"
          prop="cert_period"
          :check-rules="[{ type: 'array', message: '请选择证件有效期' }]"
        >
          <ProFormDatePicker
            v-model="form.cert_period"
            type="daterange"
            range-separator="~"
            start-placeholder="起始日期"
            end-placeholder="到期日期"
            clearable
          ></ProFormDatePicker>
        </ProFormItemV2>
      </template>
      <ProFormItemV2
        label="证件持有人类型:"
        prop="id_holder_type"
        :checkRules="[{ message: '请选择证件持有人类型' }]"
      >
        <ProFormSelect
          v-model="form.id_holder_type"
          :valueEnum="EnumWeChatPayApplymentIdHolderTypeTextList"
          placeholder="请选择证件持有人类型"
        >
        </ProFormSelect>
      </ProFormItemV2>
      <ProFormItemV2
        v-if="form.id_holder_type === EnumWeChatPayApplymentIdHolderType.LEGAL"
        label="证件持有人证件类型:"
        prop="id_doc_type"
        :checkRules="[{ message: '请选择证件持有人证件类型' }]"
      >
        <ProFormSelect
          v-model="form.id_doc_type"
          :valueEnum="id_doc_typeList"
          placeholder="请选择证件持有人证件类型"
        >
        </ProFormSelect>
      </ProFormItemV2>
      <ProFormItemV2
        v-if="form.id_holder_type === EnumWeChatPayApplymentIdHolderType.SUPER"
        label="法定代表人说明函:"
        prop="authorize_letter_copy"
        :check-rules="[{ type: 'upload', message: '请上传法定代表人说明函' }]"
      >
        <div style="display: flex">
          <ProFormUpload
            v-model:file-url="form.url"
            v-model:file-url="form.authorize_letter_copy"
            :limit="1"
            :limitFileSize="10"
            accept="png,jpg,jpeg,pdf"
          ></ProFormUpload>
          <el-button style="margin-left: 10px" type="primary" link @click="downloadTemplate"
          <el-button style="margin-left: 10px" type="primary" link @click="downloadFRTemplate"
            >模板下载</el-button
          >
        </div>
      </ProFormItemV2>
      <ProFormItemV2
        label="手机号:"
        prop="name"
        :checkRules="[{ type: 'phone', message: '请输入手机号' }]"
      <template
        v-if="
          form.id_holder_type === EnumWeChatPayApplymentIdHolderType.LEGAL &&
          form.id_doc_type === EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_IDCARD
        "
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入手机号" />
      </ProFormItemV2>
      <ProFormItemV2
        label="电子邮箱:"
        prop="name"
        :checkRules="[{ type: 'email', message: '请输入电子邮箱' }]"
        <ProFormItemV2
          label="身份证人像面:"
          prop="id_card_copy"
          :check-rules="[{ type: 'upload', message: '请上传身份证人像面' }]"
        >
          <ProFormUpload
            v-model:file-url="form.id_card_copy"
            :limitFileCount="1"
            :on-success="handleFrontImgUrlChange"
            accept="jpg/jpeg,png,pdf"
          ></ProFormUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证国徽面:"
          prop="id_card_national"
          :check-rules="[{ type: 'upload', message: '请上传身份证国徽面' }]"
        >
          <ProFormUpload
            v-model:file-url="form.id_card_national"
            :limitFileCount="1"
            accept="jpg/jpeg,png,pdf"
          ></ProFormUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证姓名:"
          prop="id_card_name"
          :checkRules="[{ message: '请输入身份证姓名' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="100"
            v-model.trim="form.id_card_name"
            placeholder="请输入身份证姓名"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证号码:"
          prop="id_card_number"
          :checkRules="[{ message: '请输入身份证号码', type: 'idCard' }]"
        >
          <ProFormText v-model.trim="form.id_card_number" placeholder="请输入身份证号码" />
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证有效期:"
          prop="id_card_period"
          :checkRules="[{ message: '请选择身份证有效期', type: 'array' }]"
        >
          <ProFormDatePicker
            v-model="form.id_card_period"
            type="daterange"
            range-separator="~"
            start-placeholder="起始日期"
            end-placeholder="到期日期"
            clearable
          ></ProFormDatePicker>
        </ProFormItemV2>
      </template>
      <template
        v-if="
          form.id_holder_type === EnumWeChatPayApplymentIdHolderType.LEGAL &&
          form.id_doc_type !== EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_IDCARD
        "
      >
        <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="[{ message: '请输入商户简称' }]">
        <ProFormItemV2
          label="证件正面照片:"
          prop="id_doc_copy"
          :check-rules="[{ type: 'upload', message: '请上传证件正面照片' }]"
        >
          <ProFormUpload
            v-model:file-url="form.id_doc_copy"
            :limitFileCount="1"
            accept="jpg/jpeg,png,pdf"
          ></ProFormUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="证件姓名:"
          prop="id_doc_name"
          :checkRules="[{ message: '请输入证件姓名' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="100"
            v-model.trim="form.id_doc_name"
            placeholder="请输入证件姓名"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="证件号码:"
          prop="id_doc_number"
          :checkRules="[{ message: '请输入证件号码' }]"
        >
          <ProFormText v-model.trim="form.id_doc_number" placeholder="请输入证件号码" />
        </ProFormItemV2>
        <ProFormItemV2
          label="证件有效期:"
          prop="id_doc_period"
          :checkRules="[{ message: '请选择证件有效期', type: 'array' }]"
        >
          <ProFormDatePicker
            v-model="form.id_doc_period"
            type="daterange"
            range-separator="~"
            start-placeholder="起始日期"
            end-placeholder="到期日期"
            clearable
          ></ProFormDatePicker>
        </ProFormItemV2>
      </template>
      <div
        class="ubo-info-list-wrapper"
        v-if="form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_ENTERPRISE"
      >
        <div class="ubo-info-list-top">
          <div class="ubo-info-list-title">最终受益人信息列表</div>
          <div class="ubo-info-list-btn">
            <el-button type="primary" link @click="addUboInfo">添加</el-button>
          </div>
        </div>
        <div v-for="(item, index) in form.ubo_info_list" :key="index">
          <ProFormItemV2
            :label="`第${index + 1}个证件类型:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_type`"
            :checkRules="[{ message: '请选择证件类型' }]"
          >
            <ProFormSelect
              v-model="item.ubo_id_doc_type"
              :valueEnum="EnumWeChatPayApplymentIdDocTypeText"
              placeholder="请选择证件类型"
            >
            </ProFormSelect>
          </ProFormItemV2>
          <ProFormItemV2
            :label="`第${index + 1}个证件正面照片:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_copy`"
            :check-rules="[{ type: 'upload', message: '请上传证件正面照片' }]"
          >
            <ProFormImageUpload
              v-model:file-url="item.ubo_id_doc_copy"
              :limit-file-count="1"
            ></ProFormImageUpload>
          </ProFormItemV2>
          <ProFormItemV2
            :label="`第${index + 1}个证件姓名:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_name`"
            :checkRules="[{ message: '请输入证件姓名' }]"
          >
            <ProFormText
              :minlength="2"
              :maxlength="100"
              v-model.trim="item.ubo_id_doc_name"
              placeholder="请输入证件姓名"
            />
          </ProFormItemV2>
          <ProFormItemV2
            :label="`第${index + 1}个证件号码:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_number`"
            :checkRules="[{ message: '请输入证件号码' }]"
          >
            <ProFormText v-model.trim="item.ubo_id_doc_number" placeholder="请输入证件号码" />
          </ProFormItemV2>
          <ProFormItemV2
            :label="`第${index + 1}个证件居住地址:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_address`"
            :checkRules="[{ message: '请输入证件居住地址' }]"
          >
            <ProFormText v-model.trim="item.ubo_id_doc_address" placeholder="请输入证件居住地址" />
          </ProFormItemV2>
          <ProFormItemV2
            :label="`第${index + 1}个证件有效期:`"
            :prop="`ubo_info_list.${index}.ubo_period`"
            :checkRules="[{ message: '请选择证件有效期', type: 'array' }]"
          >
            <ProFormDatePicker
              v-model="item.ubo_period"
              type="daterange"
              range-separator="~"
              start-placeholder="起始日期"
              end-placeholder="到期日期"
              clearable
            ></ProFormDatePicker>
          </ProFormItemV2>
          <el-button type="primary" link @click="deleteUboInfo(index)">删除</el-button>
        </div>
      </div>
      <ProFormItemV2
        label="商户简称:"
        prop="merchant_shortname"
        :checkRules="[{ message: '请输入商户简称' }]"
      >
        <ProFormText
          :maxlength="64"
          :minlength="1"
          :maxlength="60"
          show-word-limit
          v-model.trim="form.name"
          v-model.trim="form.merchant_shortname"
          placeholder="请输入商户简称"
        />
      </ProFormItemV2>
      <ProFormItemV2
        label="客服电话:"
        prop="name"
        prop="service_phone"
        :checkRules="[{ type: 'tel', message: '请输入客服电话' }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入客服电话" />
        <ProFormText v-model.trim="form.service_phone" placeholder="请输入客服电话" />
      </ProFormItemV2>
      <ProFormItemV2 label="经营场景:" prop="name" :checkRules="[{ message: '请选择经营场景' }]">
        <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="请选择经营场景">
      <ProFormItemV2
        label="经营场景类型:"
        prop="sales_scenes_type"
        :checkRules="[{ message: '请选择经营场景类型' }]"
      >
        <ProFormSelect
          v-model="form.sales_scenes_type"
          :valueEnum="EnumWeChatPayApplymentSalesScenesTypeText"
          placeholder="请选择经营场景类型"
          multiple
        >
        </ProFormSelect>
      </ProFormItemV2>
      <template
        v-if="
          form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_STORE)
        "
      >
        <ProFormItemV2
          label="线下场所名称:"
          prop="biz_store_name"
          :checkRules="[{ message: '请输入线下场所名称' }]"
        >
          <ProFormText
            :maxlength="50"
            v-model.trim="form.biz_store_name"
            placeholder="请输入线下场所名称"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="线下场所省市编码:"
          prop="biz_address_code"
          :checkRules="[{ message: '请输入线下场所省市编码' }]"
        >
          <ProFormInputNumber
            v-model.trim="form.biz_address_code"
            placeholder="请输入线下场所省市编码"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="线下场所地址:"
          prop="biz_store_address"
          :checkRules="[{ message: '请输入线下场所地址' }]"
        >
          <ProFormText
            :maxlength="512"
            :minlength="4"
            v-model.trim="form.biz_store_address"
            placeholder="请输入线下场所地址"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="线下场所门头照片:"
          prop="store_entrance_pic"
          :check-rules="[{ type: 'upload', message: '请上传线下场所门头照片' }]"
        >
          <ProFormUpload
            v-model:file-url="form.store_entrance_pic"
            accept="jpg/jpeg,png"
          ></ProFormUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="线下场所内部照片:"
          prop="indoor_pic"
          :check-rules="[{ type: 'upload', message: '请上传线下场所内部照片' }]"
        >
          <ProFormUpload v-model:file-url="form.indoor_pic" accept="jpg/jpeg,png"></ProFormUpload>
        </ProFormItemV2>
      </template>
      <template
        v-if="
          form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_MP)
        "
      >
        <ProFormItemV2
          label="服务商服务号或公众号AppID:"
          prop="mp_appid"
          :checkRules="[
            {
              message: '服务商服务号或公众号AppID',
              validator: (rule, value, callback) => {
                if (form.mp_appid || form.mp_sub_appid) {
                  callback();
                }
                callback(new Error('请输入服务商服务号或公众号AppID'));
              },
            },
          ]"
        >
          <ProFormText
            v-model.trim="form.mp_appid"
            placeholder="请输入服务商服务号或公众号AppID(服务商服务号或公众号AppID、商家服务号或公众号AppID,二选一必填)"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="商家服务号或公众号AppID:"
          prop="mp_sub_appid"
          :checkRules="[
            {
              message: '请输入商家服务号或公众号AppID',
              validator: (rule, value, callback) => {
                if (form.mp_appid || form.mp_sub_appid) {
                  callback();
                }
                callback(new Error('请输入商家服务号或公众号AppID'));
              },
            },
          ]"
        >
          <ProFormText
            v-model.trim="form.mp_sub_appid"
            placeholder="请输入商家服务号或公众号AppID(服务商服务号或公众号AppID、商家服务号或公众号AppID,二选一必填)"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="小程序截图:"
          prop="mp_pics"
          :check-rules="[{ type: 'upload', message: '请上传小程序截图' }]"
        >
          <ProFormUpload
            v-model:file-url="form.mp_pics"
            :limitFileCount="5"
            accept="jpg/jpeg,png"
          ></ProFormUpload>
        </ProFormItemV2>
      </template>
      <template
        v-if="
          form.sales_scenes_type.includes(
            EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_MINI_PROGRAM
          )
        "
      >
        <ProFormItemV2
          label="服务商小程序AppID:"
          prop="mini_program_appid"
          :checkRules="[
            {
              message: '请输入服务商小程序AppID',
              validator: (rule, value, callback) => {
                if (form.mini_program_appid || form.mini_program_sub_appid) {
                  callback();
                }
                callback(new Error('请输入服务商小程序AppID'));
              },
            },
          ]"
        >
          <ProFormText
            v-model.trim="form.mini_program_appid"
            placeholder="请输入服务商小程序AppID(服务商小程序AppID与商家小程序AppID,二选一必填)"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="商家小程序AppID:"
          prop="mini_program_sub_appid"
          :checkRules="[
            {
              message: '请输入商家小程序AppID',
              validator: (rule, value, callback) => {
                if (form.mini_program_appid || form.mini_program_sub_appid) {
                  callback();
                }
                callback(new Error('请输入服务商小程序AppID'));
              },
            },
          ]"
        >
          <ProFormText
            v-model.trim="form.mini_program_sub_appid"
            placeholder="请输入商家小程序AppID(服务商小程序AppID与商家小程序AppID,二选一必填)"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="小程序截图:"
          prop="mini_program_pics"
          :check-rules="[{ type: 'upload', message: '请上传小程序截图' }]"
        >
          <ProFormUpload
            v-model:file-url="form.mini_program_pics"
            :limitFileCount="5"
            accept="jpg/jpeg,png"
          ></ProFormUpload>
        </ProFormItemV2>
      </template>
      <template
        v-if="
          form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_APP)
        "
      >
        <ProFormItemV2
          label="服务商应用AppID:"
          prop="app_appid"
          :checkRules="[
            {
              message: '服务商应用AppID',
              validator: (rule, value, callback) => {
                if (form.app_appid || form.mp_sub_appid) {
                  callback();
                }
                callback(new Error('请输入服务商应用AppID'));
              },
            },
          ]"
        >
          <ProFormText
            v-model.trim="form.app_appid"
            placeholder="请输入服务商应用AppID(服务商应用AppID与商家应用AppID,二选一必填)"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="商家应用AppID:"
          prop="app_sub_appid"
          :checkRules="[
            {
              message: '请输入商家应用AppID',
              validator: (rule, value, callback) => {
                if (form.mp_appid || form.app_sub_appid) {
                  callback();
                }
                callback(new Error('请输入商家应用AppID'));
              },
            },
          ]"
        >
          <ProFormText
            v-model.trim="form.app_sub_appid"
            placeholder="请输入商家应用AppID(服务商应用AppID与商家应用AppID,二选一必填)"
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="App截图:"
          prop="app_pics"
          :check-rules="[{ type: 'upload', message: '请上传App截图' }]"
        >
          <ProFormUpload
            v-model:file-url="form.app_pics"
            :limitFileCount="4"
            accept="jpg/jpeg,png"
          ></ProFormUpload>
        </ProFormItemV2>
      </template>
      <template
        v-if="
          form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_WEB)
        "
      >
        <ProFormItemV2
          label="互联网网站域名:"
          prop="domain"
          :checkRules="[{ message: '请输入互联网网站域名' }]"
        >
          <ProFormText v-model.trim="form.domain" placeholder="请输入互联网网站域名" />
        </ProFormItemV2>
        <ProFormItemV2 label="网站授权函:" prop="web_authorisation">
          <div style="display: flex">
            <ProFormUpload
              v-model:file-url="form.web_authorisation"
              :limit="1"
              :limitFileSize="10"
              accept="png,jpg,jpeg,pdf"
            ></ProFormUpload>
            <el-button
              style="margin-left: 10px"
              type="primary"
              link
              @click="downloadWebAuthorisationTemplate"
              >模板下载</el-button
            >
          </div>
        </ProFormItemV2>
      </template>
      <template
        v-if="
          form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_WEWORK)
        "
      >
        <ProFormItemV2
          label="商家企业微信CorpID:"
          prop="sub_corp_id"
          :checkRules="[{ message: '请输入商家企业微信CorpID' }]"
        >
          <ProFormText v-model.trim="form.sub_corp_id" placeholder="请输入商家企业微信CorpID" />
        </ProFormItemV2>
        <ProFormItemV2
          label="企业微信页面截图:"
          prop="wework_pics"
          :check-rules="[{ type: 'upload', message: '请上传企业微信页面截图' }]"
        >
          <ProFormUpload
            v-model:file-url="form.wework_pics"
            :limitFileCount="5"
            accept="jpg/jpeg,png"
          ></ProFormUpload>
        </ProFormItemV2>
      </template>
      <ProFormItemV2
        label="入驻结算ID:"
        prop="name"
        :checkRules="[{ message: '请输入入驻结算ID' }]"
        label="入驻结算规则ID:"
        prop="settlement_id"
        :checkRules="[{ message: '请输入入驻结算规则ID' }]"
      >
        <div style="display: flex; width: 100%">
          <ProFormText v-model.trim="form.name" placeholder="请输入入驻结算ID" />
          <ProFormText v-model.trim="form.settlement_id" 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: '请上传特殊资质照片' }]"
        label="所属行业:"
        prop="qualification_type"
        :checkRules="[{ message: '请输入所属行业' }]"
      >
        <ProFormUpload
          v-model:file-url="form.url"
          :limit="5"
          :limitFileSize="10"
          accept="png,jpg,jpeg,pdf"
        ></ProFormUpload>
        <ProFormText
          :maxlength="50"
          v-model.trim="form.qualification_type"
          placeholder="请输入所属行业(详细参见费率结算规则对照表)"
        />
      </ProFormItemV2>
      <ProFormItemV2 label="结算账户:" prop="name" :checkRules="[{ message: '请选择结算账户' }]">
        <ProFormSelect v-model="form.name" :valueEnum="[]" placeholder="请选择结算账户">
      <ProFormItemV2 label="特殊资质图片:" prop="qualifications">
        <ProFormUpload v-model:file-url="form.qualifications" accept="jpg/jpeg,png"></ProFormUpload>
      </ProFormItemV2>
      <ProFormItemV2
        label="结算银行账户类型:"
        prop="bank_account_type"
        :checkRules="[{ message: '请选择结算银行账户类型' }]"
      >
        <ProFormSelect
          v-model="form.bank_account_type"
          :valueEnum="EnumWeChatPayApplymentBankAccountTypeText"
          placeholder="请选择结算银行账户类型"
        >
        </ProFormSelect>
      </ProFormItemV2>
      <ProFormItemV2 label="开户银行:" prop="name" :checkRules="[{ message: '请输入开户银行' }]">
        <ProFormText v-model.trim="form.name" placeholder="请输入开户银行" />
      <ProFormItemV2
        label="开户名称:"
        prop="account_name"
        :checkRules="[{ message: '请输入开户名称' }]"
      >
        <ProFormText v-model.trim="form.account_name" placeholder="请输入开户名称" />
      </ProFormItemV2>
      <ProFormItemV2
        label="开户银行:"
        prop="account_bank"
        :checkRules="[{ message: '请输入开户银行' }]"
      >
        <ProFormText v-model.trim="form.account_bank" placeholder="请输入开户银行" />
      </ProFormItemV2>
      <ProFormItemV2
        label="开户银行银行号:"
        prop="bank_branch_id"
        :checkRules="[{ message: '请输入开户银行银行号' }]"
      >
        <ProFormText v-model.trim="form.bank_branch_id" placeholder="请输入开户银行银行号" />
      </ProFormItemV2>
      <ProFormItemV2
        label="开户银行全称(含支行):"
        prop="bank_name"
        :checkRules="[{ message: '请输入开户银行全称(含支行)' }]"
      >
        <ProFormText v-model.trim="form.bank_name" placeholder="请输入开户银行全称(含支行)" />
      </ProFormItemV2>
      <ProFormItemV2
        label="银行账号:"
        prop="name"
        prop="account_number"
        :checkRules="[{ message: '请输入银行账号', type: 'bankCard' }]"
      >
        <ProFormText v-model.trim="form.name" placeholder="请输入银行账号" />
        <ProFormText v-model.trim="form.account_number" placeholder="请输入银行账号" />
      </ProFormItemV2>
    </ProForm>
  </LoadingLayout>
</template>
<script setup lang="ts">
import { FormInstance } from 'element-plus';
import { FormInstance, ModelValueType } from 'element-plus';
import {
  ProForm,
  ProFormItemV2,
@@ -123,10 +927,39 @@
  ProFormUpload,
  useFormDialog,
  ProFormRadio,
  ProFormDatePicker,
  ProFormImageUpload,
  ProFormInputNumber,
} from '@bole-core/components';
import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
import { useQuery } from '@tanstack/vue-query';
import { convertWalletApiToFiles, convertWalletFilesToApi, downloadFileByUrl } from '@/utils';
import { vatLicense, userCredentialVerifyOcrIDCard } from '@/hooks';
import {
  EnumWeChatPayApplymentContactType,
  EnumWeChatPayApplymentContactTypeText,
  EnumWeChatPayApplymentIdDocType,
  EnumWeChatPayApplymentIdDocTypeText,
  EnumWeChatPayApplymentSubjectType,
  EnumWeChatPayApplymentSubjectTypeText,
  EnumWeChatPayApplymentCertTypeTextForSYDW,
  EnumWeChatPayApplymentCertTypeTextForZFJG,
  EnumWeChatPayApplymentCertTypeTextForSHZZ,
  EnumWeChatPayApplymentIdHolderType,
  EnumWeChatPayApplymentIdHolderTypeText,
  EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL,
  EnumWeChatPayApplymentSalesScenesType,
  EnumWeChatPayApplymentSalesScenesTypeText,
  EnumWeChatPayApplymentBankAccountTypeText,
} from '@/constants';
import {
  convertApi2FormUrl,
  convertApi2FormUrlOnlyOne,
  convertWalletApiToFiles,
  convertWalletFilesToApi,
  downloadFileByUrl,
  format,
} from '@/utils';
import { Message } from '@bole-core/core';
defineOptions({
  name: 'WechatConfigureView',
@@ -136,13 +969,117 @@
  id: string;
};
type UboInfo = {
  ubo_id_doc_type: EnumWeChatPayApplymentIdDocType;
  ubo_id_doc_copy: UploadUserFile[];
  ubo_id_doc_name: string;
  ubo_id_doc_number: string;
  ubo_id_doc_address: string;
  ubo_period: ModelValueType;
};
const props = withDefaults(defineProps<Props>(), {});
const dialogForm = ref<FormInstance>();
const form = reactive({
  name: '',
  url: [] as UploadUserFile[],
  business_code: '',
  contact_type: '' as any as EnumWeChatPayApplymentContactType,
  contact_name: '',
  contact_id_doc_type: '' as any as EnumWeChatPayApplymentIdDocType,
  contact_id_number: '',
  contact_id_doc_copy: [] as UploadUserFile[],
  contact_id_doc_copy_back: [] as UploadUserFile[],
  contact_period: [] as ModelValueType,
  business_authorization_letter: [] as UploadUserFile[],
  mobile_phone: '',
  contact_email: '',
  subject_type: '' as any as EnumWeChatPayApplymentSubjectType,
  license_copy: [] as UploadUserFile[],
  merchant_name: '',
  license_number: '',
  legal_person: '',
  cert_copy: [] as UploadUserFile[],
  cert_type: '' as any as EnumWeChatPayApplymentCertType,
  cert_number: '',
  cert_merchant_name: '',
  cert_company_address: '',
  cert_legal_person: '',
  cert_period: [] as ModelValueType,
  id_holder_type: '' as any as EnumWeChatPayApplymentIdHolderType,
  id_doc_type: '' as any as EnumWeChatPayApplymentIdDocType,
  authorize_letter_copy: [] as UploadUserFile[],
  id_card_copy: [] as UploadUserFile[],
  id_card_national: [] as UploadUserFile[],
  id_card_name: '',
  id_card_number: '',
  id_card_address: '',
  id_card_period: [] as ModelValueType,
  id_doc_copy: [] as UploadUserFile[],
  id_doc_name: '',
  id_doc_number: '',
  id_doc_period: [] as ModelValueType,
  ubo_info_list: [] as UboInfo[],
  merchant_shortname: '',
  service_phone: '',
  sales_scenes_type: [] as any as EnumWeChatPayApplymentSalesScenesType[],
  biz_store_name: '',
  biz_address_code: null as Number,
  biz_store_address: '',
  store_entrance_pic: [] as UploadUserFile[],
  indoor_pic: [] as UploadUserFile[],
  mp_appid: '',
  mp_sub_appid: '',
  mp_pics: [] as UploadUserFile[],
  mini_program_appid: '',
  mini_program_sub_appid: '',
  mini_program_pics: [] as UploadUserFile[],
  app_appid: '',
  app_sub_appid: '',
  app_pics: [] as UploadUserFile[],
  domain: '',
  web_authorisation: [] as UploadUserFile[],
  sub_corp_id: '',
  wework_pics: [] as UploadUserFile[],
  settlement_id: '',
  qualification_type: '',
  qualifications: [] as UploadUserFile[],
  bank_account_type: '' as any as EnumWeChatPayApplymentBankAccountType,
  account_name: '',
  account_bank: '',
  bank_branch_id: '',
  bank_name: '',
  account_number: '',
});
const EnumWeChatPayApplymentCertTypeTextList = computed(() => {
  if (form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INSTITUTIONS) {
    return EnumWeChatPayApplymentCertTypeTextForSYDW;
  }
  if (form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_GOVERNMENT) {
    return EnumWeChatPayApplymentCertTypeTextForZFJG;
  }
  if (form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_OTHERS) {
    return EnumWeChatPayApplymentCertTypeTextForSHZZ;
  }
  return [];
});
const EnumWeChatPayApplymentIdHolderTypeTextList = computed(() => {
  if (
    form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INSTITUTIONS ||
    form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_GOVERNMENT
  ) {
    return EnumWeChatPayApplymentIdHolderTypeText;
  }
  return EnumWeChatPayApplymentIdHolderTypeTextOnlyLEGAL;
});
const id_doc_typeList = computed(() => {
  if (form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_GOVERNMENT) {
    return EnumWeChatPayApplymentContactTypeTextForZFJG;
  }
  return EnumWeChatPayApplymentIdDocTypeText;
});
const { isLoading, refetch } = useQuery({
@@ -152,19 +1089,100 @@
    EnumEnterpriseWalletAccess.Alipay,
  ],
  queryFn: async (ctx) => {
    return await enterpriseWalletServices.getEnterpriseWallet({
    return await enterpriseWalletServices.getEnterpriseWeChatPayWallet({
      enterpriseId: props.id,
      access: EnumEnterpriseWalletAccess.Alipay,
    });
  },
  onSuccess(data) {
    form.name = data.name;
    form.url = convertWalletApiToFiles(
      data.files,
      EnumEnterpriseWalletExpandindirectOrderFileType.Scene
    form.business_code = data.business_code ?? '';
    form.contact_type = data.contact_info?.contact_type;
    form.contact_name = data.contact_info?.contact_name ?? '';
    form.contact_id_doc_type = data.contact_info?.contact_id_doc_type;
    form.contact_id_number = data.contact_info?.contact_id_number ?? '';
    form.contact_id_doc_copy = convertApi2FormUrlOnlyOne(
      data.contact_info?.contact_id_doc_copy ?? ''
    );
    form.contact_id_doc_copy_back = convertApi2FormUrlOnlyOne(
      data.contact_info?.contact_id_doc_copy_back ?? ''
    );
    form.contact_period = [
      format(data.contact_info?.contact_period_begin, 'YYYY-MM-DD'),
      format(data.contact_info?.contact_period_end, 'YYYY-MM-DD'),
    ];
    form.business_authorization_letter = convertApi2FormUrlOnlyOne(
      data.contact_info?.business_authorization_letter ?? ''
    );
    form.mobile_phone = data.contact_info?.mobile_phone ?? '';
    form.contact_email = data.contact_info?.contact_email ?? '';
    form.subject_type = data.subject_info?.subject_type;
    form.license_copy = convertApi2FormUrlOnlyOne(
      data.subject_info?.business_license_info?.license_copy ?? ''
    );
    form.merchant_name = data.subject_info?.business_license_info?.merchant_name ?? '';
    form.license_number = data.subject_info?.business_license_info?.license_number ?? '';
    form.legal_person = data.subject_info?.business_license_info?.legal_person ?? '';
    form.cert_copy = convertApi2FormUrlOnlyOne(
      data.subject_info?.certificate_info?.cert_copy ?? ''
    );
    form.cert_type = data.subject_info?.certificate_info?.cert_type;
    form.cert_number = data.subject_info?.certificate_info?.cert_number ?? '';
    form.cert_merchant_name = data.subject_info?.certificate_info?.merchant_name ?? '';
    form.cert_company_address = data.subject_info?.certificate_info?.company_address ?? '';
    form.cert_legal_person = data.subject_info?.certificate_info?.legal_person ?? '';
    form.cert_period = [
      format(data.subject_info?.certificate_info?.period_begin, 'YYYY-MM-DD'),
      format(data.subject_info?.certificate_info?.period_end, 'YYYY-MM-DD'),
    ];
  },
});
function addUboInfo() {
  if (form.ubo_info_list.length >= 3) {
    Message.errorMessage('最多添加3个受益人');
    return;
  }
  form.ubo_info_list.push({
    ubo_id_doc_type: '' as any as EnumWeChatPayApplymentIdDocType,
    ubo_id_doc_copy: [],
    ubo_id_doc_name: '',
    ubo_id_doc_number: '',
    ubo_id_doc_address: '',
    ubo_period: [],
  });
}
function deleteUboInfo(index: number) {
  form.ubo_info_list.splice(index, 1);
}
const handleLicenseUrlChange = (response: UploadUserFile) => {
  vatLicense(response, {
    onSuccess(res) {
      let tips: string[] = [];
      res?.enterpriseName ? (form.merchant_name = res.enterpriseName) : tips.push('商户名称');
      res?.societyCreditCode
        ? (form.license_number = res.societyCreditCode)
        : tips.push('统一社会信用代码');
      res?.legalPerson ? (form.legal_person = res.legalPerson) : tips.push('法人姓名');
      if (tips.length > 0) {
        Message.errorMessage(
          `未能识别到您上传的图片,请重新上传清晰的图片或手动输入${tips.join('和')}`
        );
      }
    },
  });
};
function handleFrontImgUrlChange(response: UploadUserFile) {
  userCredentialVerifyOcrIDCard({
    url: response?.url,
    access: EnumOcrAccess.Baidu,
    onSuccess(res) {
      if (res.name) form.id_card_name = res.name;
      if (res.identity) form.id_card_number = res.identity;
    },
  });
}
function openOuterSettleRule() {
  window.open('https://kf.qq.com/faq/220228IJb2UV220228uEjU3Q.html', '_blank');
@@ -181,6 +1199,13 @@
  } catch (error) {}
}
function downloadFRTemplate() {
  downloadFileByUrl(
    'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E6%B3%95%E4%BA%BA%E4%BB%A3%E8%A1%A8%E8%AF%B4%E6%98%8E%E5%87%BD.png',
    '法定代表人说明函'
  );
}
function downloadTemplate() {
  downloadFileByUrl(
    'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E4%B8%9A%E5%8A%A1%E5%8A%9E%E7%90%86%E6%8E%88%E6%9D%83%E5%87%BD.png',
@@ -188,7 +1213,33 @@
  );
}
function downloadWebAuthorisationTemplate() {
  downloadFileByUrl(
    'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E7%BD%91%E7%AB%99%E6%8E%88%E6%9D%83%E5%87%BD.doc',
    '网站授权函'
  );
}
defineExpose({
  onConfirm: enterpriseWalletExpandindirectCreate,
});
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
.ubo-info-list-wrapper {
  .ubo-info-list-top {
    display: flex;
    justify-content: space-between;
    .ubo-info-list-title {
      margin: 12px 0;
      font-size: 16px;
      font-weight: bold;
      color: getCssVar('text-color', 'primary');
      line-height: 24px;
    }
  }
}
</style>