wupengfei
3 天以前 697b0b83320f5bb420abc9b22461fc0c64b9c770
src/views/EnterpriseManage/components/WechatConfigureView.vue
@@ -1,111 +1,1088 @@
<template>
  <LoadingLayout :loading="isLoading">
    <ProForm :model="form" ref="dialogForm" label-width="130px">
    <ProForm :model="form" ref="dialogForm" label-width="210px">
      <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="请输入超级管理员姓名"
          show-word-limit
        >
        </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_begin"
          :check-rules="[{ message: '请选择证件有效期开始时间' }]"
        >
          <ProFormDatePicker v-model="form.contact_period_begin" type="date"></ProFormDatePicker>
        </ProFormItemV2>
        <ProFormItemV2 label="证件有效期是否为长期:" prop="contact_period_isLong">
          <ProFormRadio
            v-model.trim="form.contact_period_isLong"
            :value-enum="BooleanOptions"
            :button-style="false"
          />
        </ProFormItemV2>
        <ProFormItemV2
          v-if="!form.contact_period_isLong"
          label="证件有效期结束时间:"
          prop="contact_period_end"
          :check-rules="[
            {
              message: '请选择证件有效期结束时间',
              validator: (rule, value, callback) => {
                if (dayjs(value).isAfter(dayjs(form.contact_period_begin))) {
                  callback();
                }
                callback(new Error('结束时间不能小于开始时间'));
              },
            },
          ]"
        >
          <ProFormDatePicker
            v-model="form.contact_period_end"
            type="date"
            placeholder="请选择证件有效期结束时间"
          ></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="jpg/jpeg,png"
            ></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"
          ></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="请输入法人姓名"
            show-word-limit
          />
        </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="请输入商户名称"
            show-word-limit
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="注册地址:"
          prop="cert_company_address"
          :checkRules="[{ message: '请输入注册地址' }]"
        >
          <ProFormText
            :minlength="4"
            :maxlength="128"
            v-model.trim="form.cert_company_address"
            placeholder="请输入注册地址"
            show-word-limit
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="法定代表人:"
          prop="cert_legal_person"
          :checkRules="[{ message: '请输入法定代表人' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="100"
            v-model.trim="form.cert_legal_person"
            placeholder="请输入法定代表人"
            show-word-limit
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="证件有效期开始时间:"
          prop="cert_period_begin"
          :check-rules="[{ message: '请选择证件有效期开始时间' }]"
        >
          <ProFormDatePicker v-model="form.cert_period_begin" type="date"></ProFormDatePicker>
        </ProFormItemV2>
        <ProFormItemV2 label="证件有效期是否为长期:" prop="cert_period_isLong">
          <ProFormRadio
            v-model.trim="form.cert_period_isLong"
            :value-enum="BooleanOptions"
            :button-style="false"
          />
        </ProFormItemV2>
        <ProFormItemV2
          v-if="!form.cert_period_isLong"
          label="证件有效期结束时间:"
          prop="cert_period_end"
          :check-rules="[
            {
              message: '请选择证件有效期结束时间',
              validator: (rule, value, callback) => {
                if (dayjs(value).isAfter(dayjs(form.cert_period_begin))) {
                  callback();
                }
                callback(new Error('结束时间不能小于开始时间'));
              },
            },
          ]"
        >
          <ProFormDatePicker
            v-model="form.cert_period_end"
            type="date"
            placeholder="请选择证件有效期结束时间"
          ></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"
            accept="jpg/jpeg,png"
          ></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: '请上传身份证人像面' }]"
        >
          <ProFormImageUpload
            v-model:file-url="form.id_card_copy"
            :limit-file-count="1"
            :on-success="handleFrontImgUrlChange"
          ></ProFormImageUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证国徽面:"
          prop="id_card_national"
          :check-rules="[{ type: 'upload', message: '请上传身份证国徽面' }]"
        >
          <ProFormImageUpload
            v-model:file-url="form.id_card_national"
            :limit-file-count="1"
          ></ProFormImageUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证姓名:"
          prop="id_card_name"
          :checkRules="[{ message: '请输入身份证姓名' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="100"
            v-model.trim="form.id_card_name"
            placeholder="请输入身份证姓名"
            show-word-limit
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证号码:"
          prop="id_card_number"
          :checkRules="[{ message: '请输入身份证号码', type: 'idCard' }]"
        >
          <ProFormText v-model.trim="form.id_card_number" placeholder="请输入身份证号码" />
        </ProFormItemV2>
        <ProFormItemV2
          v-if="form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_ENTERPRISE"
          label="身份证居住地址:"
          prop="id_card_address"
          :checkRules="[{ message: '请输入身份证居住地址' }]"
        >
          <ProFormText v-model.trim="form.id_card_address" placeholder="请输入身份证居住地址" />
        </ProFormItemV2>
        <ProFormItemV2
          label="身份证有效期开始时间:"
          prop="card_period_begin"
          :checkRules="[{ message: '请选择身份证有效期开始时间' }]"
        >
          <ProFormDatePicker
            v-model="form.card_period_begin"
            type="date"
            placeholder="请选择身份证有效期开始时间"
          ></ProFormDatePicker>
        </ProFormItemV2>
        <ProFormItemV2 label="身份证有效期是否为长期:" prop="card_period_isLong">
          <ProFormRadio
            v-model.trim="form.card_period_isLong"
            :value-enum="BooleanOptions"
            :button-style="false"
          />
        </ProFormItemV2>
        <ProFormItemV2
          v-if="!form.card_period_isLong"
          label="身份证有效期结束时间:"
          prop="card_period_end"
          :checkRules="[
            {
              message: '请选择身份证有效期结束时间',
              validator: (rule, value, callback) => {
                if (dayjs(value).isAfter(dayjs(form.card_period_begin))) {
                  callback();
                }
                callback(new Error('结束时间不能小于开始时间'));
              },
            },
          ]"
        >
          <ProFormDatePicker
            v-model="form.card_period_end"
            type="date"
            placeholder="请选择身份证有效期结束时间"
          ></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"
          ></ProFormUpload>
        </ProFormItemV2>
        <ProFormItemV2
          label="证件姓名:"
          prop="id_doc_name"
          :checkRules="[{ message: '请输入证件姓名' }]"
        >
          <ProFormText
            :minlength="2"
            :maxlength="100"
            v-model.trim="form.id_doc_name"
            placeholder="请输入证件姓名"
            show-word-limit
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="证件号码:"
          prop="id_doc_number"
          :checkRules="[{ message: '请输入证件号码' }]"
        >
          <ProFormText v-model.trim="form.id_doc_number" placeholder="请输入证件号码" />
        </ProFormItemV2>
        <ProFormItemV2
          label="证件有效期开始时间:"
          prop="doc_period_begin"
          :checkRules="[{ message: '请选择证件有效期开始时间' }]"
        >
          <ProFormDatePicker v-model="form.doc_period_begin" type="date"></ProFormDatePicker>
        </ProFormItemV2>
        <ProFormItemV2 label="证件有效期是否为长期:" prop="doc_period_isLong">
          <ProFormRadio
            v-model.trim="form.doc_period_isLong"
            :value-enum="BooleanOptions"
            :button-style="false"
          />
        </ProFormItemV2>
        <ProFormItemV2
          v-if="!form.doc_period_isLong"
          label="证件有效期结束时间:"
          prop="doc_period_end"
          :checkRules="[
            {
              message: '请选择证件有效期结束时间',
              validator: (rule, value, callback) => {
                if (dayjs(value).isAfter(dayjs(form.doc_period_begin))) {
                  callback();
                }
                callback(new Error('结束时间不能小于开始时间'));
              },
            },
          ]"
        >
          <ProFormDatePicker
            v-model="form.doc_period_end"
            type="date"
            placeholder="请选择证件有效期结束时间"
          ></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="`受益人证件类型:`"
            :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="`受益人证件正面照片:`"
            :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
            v-if="
              item.ubo_id_doc_type !==
              EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_OVERSEA_PASSPORT
            "
            :label="`受益人证件反面照片:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_copy_back`"
            :check-rules="[{ type: 'upload', message: '请上传证件反面照片' }]"
          >
            <ProFormImageUpload
              v-model:file-url="item.ubo_id_doc_copy_back"
              :limit-file-count="1"
            ></ProFormImageUpload>
          </ProFormItemV2>
          <ProFormItemV2
            :label="`受益人证件姓名:`"
            :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="请输入证件姓名"
              show-word-limit
            />
          </ProFormItemV2>
          <ProFormItemV2
            :label="`受益人证件号码:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_number`"
            :checkRules="[{ message: '请输入证件号码' }]"
          >
            <ProFormText v-model.trim="item.ubo_id_doc_number" placeholder="请输入证件号码" />
          </ProFormItemV2>
          <ProFormItemV2
            :label="`受益人证件居住地址:`"
            :prop="`ubo_info_list.${index}.ubo_id_doc_address`"
            :checkRules="[{ message: '请输入证件居住地址' }]"
          >
            <ProFormText v-model.trim="item.ubo_id_doc_address" placeholder="请输入证件居住地址" />
          </ProFormItemV2>
          <ProFormItemV2
            :label="`证件有效期开始时间:`"
            :prop="`ubo_info_list.${index}.ubo_period_begin`"
            :checkRules="[{ message: '请选择证件有效期开始时间' }]"
          >
            <ProFormDatePicker
              v-model="item.ubo_period_begin"
              type="date"
              placeholder="请选择证件有效期开始时间"
            ></ProFormDatePicker>
          </ProFormItemV2>
          <ProFormItemV2
            label="证件有效期是否为长期:"
            :prop="`ubo_info_list.${index}.ubo_period_isLong`"
          >
            <ProFormRadio
              v-model.trim="item.ubo_period_isLong"
              :value-enum="BooleanOptions"
              :button-style="false"
            />
          </ProFormItemV2>
          <ProFormItemV2
            v-if="!item.ubo_period_isLong"
            :label="`证件有效期结束时间:`"
            :prop="`ubo_info_list.${index}.ubo_period_end`"
            :checkRules="[
              {
                message: '请选择证件有效期结束时间',
                validator: (rule, value, callback) => {
                  if (dayjs(value).isAfter(dayjs(item.ubo_period_begin))) {
                    callback();
                  }
                  callback(new Error('结束时间不能小于开始时间'));
                },
              },
            ]"
          >
            <ProFormDatePicker
              v-model="item.ubo_period_end"
              type="date"
              placeholder="请选择证件有效期结束时间"
            ></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="请输入线下场所名称"
            show-word-limit
          />
        </ProFormItemV2>
        <ProFormItemV2
          label="线下场所省市编码:"
          prop="biz_address_code"
          :checkRules="[{ message: '请输入线下场所省市编码', type: 'number' }]"
        >
          <div style="display: flex; width: 100%">
            <ProFormText
              v-model.trim="form.biz_address_code"
              placeholder="请输入线下场所省市编码"
            />
            <el-button type="primary" link @click="downloadAddressCodeTemplate"
              >省市编码模板</el-button
            >
          </div>
        </ProFormItemV2>
        <ProFormItemV2
          label="线下场所地址:"
          prop="biz_store_address"
          :checkRules="[{ message: '请输入线下场所地址' }]"
        >
          <ProFormText
            :maxlength="512"
            :minlength="4"
            v-model.trim="form.biz_store_address"
            placeholder="请输入线下场所地址"
            show-word-limit
          />
        </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_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="jpg/jpeg,png,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_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_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="请输入所属行业(详细参见费率结算规则对照表)"
          show-word-limit
        />
      </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="bank_alias"
        :checkRules="[{ message: '请输入开户银行' }]"
      >
        <WeChatPayWalletBanksSelect
          v-model:bank_alias="form.bank_alias"
          v-model:account_bank="form.account_bank"
          v-model:account_bank_code="form.account_bank_code"
          v-model:bank_alias_code="form.bank_alias_code"
          v-model:need_bank_branch="form.need_bank_branch"
          placeholder="请输入开户银行"
          clearable
          filterable
        />
      </ProFormItemV2>
      <template v-if="form.need_bank_branch">
        <ProFormItemV2
          label="开户支行省市编码:"
          prop="bank_branch_area"
          :checkRules="[{ message: '请输入开户银行银行号' }]"
        >
          <WeChatPayWalletBankBranchAreaCascader v-model:areaList="form.bank_branch_area" />
        </ProFormItemV2>
        <ProFormItemV2
          label="开户银行全称(含支行):"
          prop="bank_branch_id"
          :checkRules="[{ message: '请输入开户银行全称(含支行)' }]"
        >
          <WeChatPayWalletBankBranchsSelect
            v-model:bank_branch_id="form.bank_branch_id"
            placeholder="请输入"
            :bank_alias_code="form.bank_alias_code"
            :need_bank_branch="form.need_bank_branch"
            :city_code="form.bank_branch_area?.[1]"
          />
        </ProFormItemV2>
      </template>
      <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>
@@ -121,12 +1098,37 @@
  UploadUserFile,
  ProFormSelect,
  ProFormUpload,
  useFormDialog,
  ProFormRadio,
  ProFormDatePicker,
  ProFormImageUpload,
} 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,
  BooleanOptions,
} from '@/constants';
import { convertApi2FormUrlOnlyOne, downloadFileByUrl, format, convertApi2FormUrls } from '@/utils';
import { Message } from '@bole-core/core';
import WeChatPayWalletBanksSelect from './WeChatPayWalletBanksSelect.vue';
import WeChatPayWalletBankBranchsSelect from './WeChatPayWalletBankBranchsSelect.vue';
import WeChatPayWalletBankBranchAreaCascader from './WeChatPayWalletBankBranchAreaCascader.vue';
import dayjs from 'dayjs';
defineOptions({
  name: 'WechatConfigureView',
@@ -136,13 +1138,134 @@
  id: string;
};
type UboInfo = {
  ubo_id_doc_type: EnumWeChatPayApplymentIdDocType;
  ubo_id_doc_copy: UploadUserFile[];
  ubo_id_doc_copy_back: UploadUserFile[];
  ubo_id_doc_name: string;
  ubo_id_doc_number: string;
  ubo_id_doc_address: string;
  ubo_period_begin: string;
  ubo_period_end: string;
  ubo_period_isLong: boolean;
};
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_begin: '',
  contact_period_end: '',
  contact_period_isLong: false,
  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_begin: '',
  cert_period_end: '',
  cert_period_isLong: false,
  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: '',
  card_period_begin: '',
  card_period_end: '',
  card_period_isLong: false,
  id_doc_copy: [] as UploadUserFile[],
  id_doc_name: '',
  id_doc_number: '',
  doc_period_begin: '',
  doc_period_end: '',
  doc_period_isLong: false,
  ubo_info_list: [] as UboInfo[],
  merchant_shortname: '',
  service_phone: '',
  sales_scenes_type: [] as any as EnumWeChatPayApplymentSalesScenesType[],
  biz_store_name: '',
  biz_address_code: '',
  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_address_code: '',
  bank_branch_id: '',
  bank_name: '',
  account_number: '',
  bank_alias_code: '',
  bank_alias: '',
  account_bank_code: '' as any as number,
  need_bank_branch: false,
  bank_branch_area: [] as 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,33 +1275,447 @@
    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 ?? ('' as any);
    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_begin = format(data.contact_info?.contact_period_begin, 'YYYY-MM-DD');
    form.contact_period_isLong = !dayjs(data.contact_info?.contact_period_end).isValid();
    form.contact_period_end = dayjs(data.contact_info?.contact_period_end).isValid()
      ? format(data.contact_info?.contact_period_end, 'YYYY-MM-DD')
      : data.contact_info?.contact_period_end;
    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_begin = format(
      data.subject_info?.certificate_info?.period_begin,
      'YYYY-MM-DD'
    );
    form.cert_period_isLong = !dayjs(data.subject_info?.certificate_info?.period_end).isValid();
    form.cert_period_end = dayjs(data.subject_info?.certificate_info?.period_end).isValid()
      ? format(data.subject_info?.certificate_info?.period_end, 'YYYY-MM-DD')
      : data.subject_info?.certificate_info?.period_end;
    form.id_holder_type = data.subject_info?.identity_info?.id_holder_type;
    form.id_doc_type = data.subject_info?.identity_info?.id_doc_type;
    form.authorize_letter_copy = convertApi2FormUrlOnlyOne(
      data.subject_info?.identity_info?.authorize_letter_copy ?? ''
    );
    form.id_card_copy = convertApi2FormUrlOnlyOne(
      data.subject_info?.identity_info?.id_card_info?.id_card_copy ?? ''
    );
    form.id_card_national = convertApi2FormUrlOnlyOne(
      data.subject_info?.identity_info?.id_card_info?.id_card_national ?? ''
    );
    form.id_card_name = data.subject_info?.identity_info?.id_card_info?.id_card_name ?? '';
    form.id_card_number = data.subject_info?.identity_info?.id_card_info?.id_card_number ?? '';
    form.id_card_address = data.subject_info?.identity_info?.id_card_info?.id_card_address ?? '';
    form.card_period_begin = format(
      data.subject_info?.identity_info?.id_card_info?.card_period_begin,
      'YYYY-MM-DD'
    );
    form.card_period_isLong = !dayjs(
      data.subject_info?.identity_info?.id_card_info?.card_period_end
    ).isValid();
    form.card_period_end = dayjs(
      data.subject_info?.identity_info?.id_card_info?.card_period_end
    ).isValid()
      ? format(data.subject_info?.identity_info?.id_card_info?.card_period_end, 'YYYY-MM-DD')
      : data.subject_info?.identity_info?.id_card_info?.card_period_end;
    form.id_doc_copy = convertApi2FormUrlOnlyOne(
      data.subject_info?.identity_info?.id_doc_info?.id_doc_copy ?? ''
    );
    form.id_doc_name = data.subject_info?.identity_info?.id_doc_info?.id_doc_name ?? '';
    form.id_doc_number = data.subject_info?.identity_info?.id_doc_info?.id_doc_number ?? '';
    form.doc_period_begin = format(
      data.subject_info?.identity_info?.id_doc_info?.doc_period_begin,
      'YYYY-MM-DD'
    );
    form.doc_period_isLong = !dayjs(
      data.subject_info?.identity_info?.id_doc_info?.doc_period_end
    ).isValid();
    form.doc_period_end = dayjs(
      data.subject_info?.identity_info?.id_doc_info?.doc_period_end
    ).isValid()
      ? format(data.subject_info?.identity_info?.id_doc_info?.doc_period_end, 'YYYY-MM-DD')
      : data.subject_info?.identity_info?.id_doc_info?.doc_period_end;
    form.ubo_info_list =
      data.subject_info?.ubo_info_list?.length > 0
        ? data.subject_info?.ubo_info_list.map((x) => ({
            ubo_id_doc_type: x.ubo_id_doc_type,
            ubo_id_doc_copy: convertApi2FormUrlOnlyOne(x.ubo_id_doc_copy ?? ''),
            ubo_id_doc_copy_back: convertApi2FormUrlOnlyOne(x.ubo_id_doc_copy_back ?? ''),
            ubo_id_doc_name: x.ubo_id_doc_name,
            ubo_id_doc_number: x.ubo_id_doc_number,
            ubo_id_doc_address: x.ubo_id_doc_address,
            ubo_period_begin: format(x.ubo_period_begin, 'YYYY-MM-DD'),
            ubo_period_isLong: !dayjs(x.ubo_period_end).isValid(),
            ubo_period_end: dayjs(x.ubo_period_end).isValid()
              ? format(x.ubo_period_end, 'YYYY-MM-DD')
              : x.ubo_period_end,
          }))
        : [
            {
              ubo_id_doc_type: '' as any as EnumWeChatPayApplymentIdDocType,
              ubo_id_doc_copy: [],
              ubo_id_doc_copy_back: [],
              ubo_id_doc_name: '',
              ubo_id_doc_number: '',
              ubo_id_doc_address: '',
              ubo_period_begin: '',
              ubo_period_end: '',
              ubo_period_isLong: false,
            },
          ];
    form.merchant_shortname = data.business_info?.merchant_shortname ?? '';
    form.service_phone = data.business_info?.service_phone ?? '';
    form.sales_scenes_type = data.business_info?.sales_info?.sales_scenes_type ?? [];
    form.biz_store_name = data.business_info?.sales_info?.biz_store_info?.biz_store_name ?? '';
    form.biz_address_code = data.business_info?.sales_info?.biz_store_info?.biz_address_code;
    form.biz_store_address =
      data.business_info?.sales_info?.biz_store_info?.biz_store_address ?? '';
    form.store_entrance_pic = convertApi2FormUrls(
      data.business_info?.sales_info?.biz_store_info?.store_entrance_pic
    );
    form.indoor_pic = convertApi2FormUrls(
      data.business_info?.sales_info?.biz_store_info?.indoor_pic
    );
    form.mp_appid = data.business_info?.sales_info?.mp_info?.mp_appid ?? '';
    form.mp_sub_appid = data.business_info?.sales_info?.mp_info?.mp_sub_appid ?? '';
    form.mp_pics = convertApi2FormUrls(data.business_info?.sales_info?.mp_info?.mp_pics);
    form.mini_program_appid =
      data.business_info?.sales_info?.mini_program_info?.mini_program_appid ?? '';
    form.mini_program_sub_appid =
      data.business_info?.sales_info?.mini_program_info?.mini_program_sub_appid ?? '';
    form.mini_program_pics = convertApi2FormUrls(
      data.business_info?.sales_info?.mini_program_info?.mini_program_pics
    );
    form.app_appid = data.business_info?.sales_info?.app_info?.app_appid ?? '';
    form.app_sub_appid = data.business_info?.sales_info?.app_info?.app_sub_appid ?? '';
    form.app_pics = convertApi2FormUrls(data.business_info?.sales_info?.app_info?.app_pics);
    form.domain = data.business_info?.sales_info?.web_info?.domain ?? '';
    form.web_authorisation = convertApi2FormUrlOnlyOne(
      data.business_info?.sales_info?.web_info?.web_authorisation ?? ''
    );
    form.sub_corp_id = data.business_info?.sales_info?.wework_info?.sub_corp_id ?? '';
    form.wework_pics = convertApi2FormUrls(
      data.business_info?.sales_info?.wework_info?.wework_pics
    );
    form.settlement_id = data.settlement_info?.settlement_id ?? '';
    form.qualification_type = data.settlement_info?.qualification_type ?? '';
    form.qualifications = convertApi2FormUrls(data.settlement_info?.qualifications);
    form.bank_account_type = data.bank_account_info?.bank_account_type;
    form.account_name = data.bank_account_info?.account_name ?? '';
    form.account_bank = data.bank_account_info?.account_bank ?? '';
    form.bank_address_code = data.bank_account_info?.bank_address_code ?? '';
    form.bank_branch_id = data.bank_account_info?.bank_branch_id ?? '';
    form.bank_name = data.bank_account_info?.bank_name ?? '';
    form.account_number = data.bank_account_info?.account_number ?? '';
    form.bank_alias_code = data.bank_account_info?.bank_alias_code ?? '';
    form.bank_alias = data.bank_account_info?.bank_alias ?? '';
    form.account_bank_code = data.bank_account_info?.account_bank_code;
    form.need_bank_branch = data.bank_account_info?.need_bank_branch ?? false;
    form.bank_branch_area = [
      data.bank_account_info?.province_code,
      data.bank_account_info?.city_code,
    ].filter(Boolean);
  },
});
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_copy_back: [],
    ubo_id_doc_name: '',
    ubo_id_doc_number: '',
    ubo_id_doc_address: '',
    ubo_period_begin: '',
    ubo_period_end: '',
    ubo_period_isLong: false,
  });
}
function deleteUboInfo(index: number) {
  if (form.ubo_info_list.length <= 1) {
    Message.errorMessage('至少保留一个受益人');
    return;
  }
  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');
}
async function enterpriseWalletExpandindirectCreate() {
async function openEnterpriseWeChatPayWallet() {
  try {
    if (!dialogForm.value) return;
    const valid = await dialogForm.value.validate();
    if (!valid) return;
    let params: API.EnterpriseWalletExpandindirectCreateCommand = {};
    let res = await enterpriseWalletServices.enterpriseWalletExpandindirectCreate(params);
    let params: API.OpenEnterpriseWeChatPayWalletCommand = {
      enterpriseId: props.id,
      business_code: form.business_code,
      contact_info: {
        contact_type: form.contact_type,
        contact_name: form.contact_name,
        mobile_phone: form.mobile_phone,
        contact_email: form.contact_email,
      },
      subject_info: {
        subject_type: form.subject_type,
        identity_info: {
          id_holder_type: form.id_holder_type,
        },
      },
      business_info: {
        merchant_shortname: form.merchant_shortname,
        service_phone: form.service_phone,
        sales_info: {
          sales_scenes_type: form.sales_scenes_type,
        },
      },
      settlement_info: {
        settlement_id: form.settlement_id,
        qualification_type: form.qualification_type,
        qualifications:
          form.qualifications?.length > 0 ? form.qualifications?.map((x) => x.path) : [],
      },
      bank_account_info: {
        bank_account_type: form.bank_account_type,
        account_name: form.account_name,
        account_bank: form.account_bank,
        bank_address_code: form.bank_address_code,
        bank_branch_id: form.bank_branch_id,
        bank_name: form.bank_name,
        account_number: form.account_number,
        bank_alias_code: form.bank_alias_code,
        province_code: form.bank_branch_area?.[0],
        city_code: form.bank_branch_area?.[1],
        bank_alias: form.bank_alias,
        account_bank_code: form.account_bank_code,
        need_bank_branch: form.need_bank_branch,
      },
    };
    if (form.contact_type === EnumWeChatPayApplymentContactType.SUPER) {
      params.contact_info.contact_id_doc_type = form.contact_id_doc_type;
      params.contact_info.contact_id_number = form.contact_id_number;
      params.contact_info.contact_id_doc_copy = form.contact_id_doc_copy?.[0]?.path;
      params.contact_info.contact_id_doc_copy_back = form.contact_id_doc_copy_back?.[0]?.path;
      params.contact_info.contact_period_begin = format(form.contact_period_begin, 'YYYY-MM-DD');
      params.contact_info.contact_period_end = form.contact_period_isLong
        ? '长期'
        : format(form.contact_period_end, 'YYYY-MM-DD');
      params.contact_info.business_authorization_letter =
        form.business_authorization_letter?.[0]?.path;
    }
    if (
      form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INDIVIDUAL ||
      form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_ENTERPRISE
    ) {
      params.subject_info.business_license_info = {
        license_copy: form.license_copy?.[0]?.path,
        merchant_name: form.merchant_name,
        license_number: form.license_number,
        legal_person: form.legal_person,
      };
    }
    if (
      form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_GOVERNMENT ||
      form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_INSTITUTIONS ||
      form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_OTHERS
    ) {
      params.subject_info.certificate_info.cert_copy = form.cert_copy?.[0]?.path;
      params.subject_info.certificate_info.cert_type = form.cert_type;
      params.subject_info.certificate_info.cert_number = form.cert_number;
      params.subject_info.certificate_info.merchant_name = form.cert_merchant_name;
      params.subject_info.certificate_info.company_address = form.cert_company_address;
      params.subject_info.certificate_info.legal_person = form.cert_legal_person;
      params.subject_info.certificate_info.period_begin = format(
        form.cert_period_begin,
        'YYYY-MM-DD'
      );
      params.subject_info.certificate_info.period_end = form.cert_period_isLong
        ? '长期'
        : format(form.cert_period_end, 'YYYY-MM-DD');
    }
    if (form.id_holder_type === EnumWeChatPayApplymentIdHolderType.LEGAL) {
      params.subject_info.identity_info.id_doc_type = form.id_doc_type;
    }
    if (form.id_holder_type === EnumWeChatPayApplymentIdHolderType.SUPER) {
      params.subject_info.identity_info.authorize_letter_copy =
        form.authorize_letter_copy?.[0]?.path;
    }
    if (
      form.id_holder_type === EnumWeChatPayApplymentIdHolderType.LEGAL &&
      form.id_doc_type === EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_IDCARD
    ) {
      params.subject_info.identity_info.id_card_info = {
        id_card_copy: form.id_card_copy?.[0]?.path,
        id_card_national: form.id_card_national?.[0]?.path,
        id_card_name: form.id_card_name,
        id_card_number: form.id_card_number,
        card_period_begin: format(form.card_period_begin, 'YYYY-MM-DD'),
        card_period_end: form.card_period_isLong
          ? '长期'
          : format(form.card_period_end, 'YYYY-MM-DD'),
        id_card_address:
          form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_ENTERPRISE
            ? form.id_card_address
            : '',
      };
    }
    if (
      form.id_holder_type === EnumWeChatPayApplymentIdHolderType.LEGAL &&
      form.id_doc_type !== EnumWeChatPayApplymentIdDocType.IDENTIFICATION_TYPE_IDCARD
    ) {
      params.subject_info.identity_info.id_doc_info = {
        id_doc_copy: form.id_doc_copy?.[0]?.path,
        id_doc_name: form.id_doc_name,
        id_doc_number: form.id_doc_number,
        doc_period_begin: format(form.doc_period_begin, 'YYYY-MM-DD'),
        doc_period_end: form.doc_period_isLong ? '长期' : format(form.doc_period_end, 'YYYY-MM-DD'),
      };
    }
    if (form.subject_type === EnumWeChatPayApplymentSubjectType.SUBJECT_TYPE_ENTERPRISE) {
      params.subject_info.ubo_info_list =
        form.ubo_info_list?.length > 0
          ? form.ubo_info_list.map((x) => ({
              ubo_id_doc_type: x.ubo_id_doc_type,
              ubo_id_doc_copy: x.ubo_id_doc_copy?.[0]?.path,
              ubo_id_doc_copy_back: x.ubo_id_doc_copy_back?.[0]?.path,
              ubo_id_doc_name: x.ubo_id_doc_name,
              ubo_id_doc_number: x.ubo_id_doc_number,
              ubo_id_doc_address: x.ubo_id_doc_address,
              ubo_period_begin: format(x.ubo_period_begin, 'YYYY-MM-DD'),
              ubo_period_end: x.ubo_period_isLong ? '长期' : format(x.ubo_period_end, 'YYYY-MM-DD'),
            }))
          : [];
    }
    if (form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_STORE)) {
      params.business_info.sales_info.biz_store_info = {
        biz_store_name: form.biz_store_name,
        biz_address_code: form.biz_address_code,
        biz_store_address: form.biz_store_address,
        store_entrance_pic:
          form.store_entrance_pic?.length > 0 ? form.store_entrance_pic?.map((x) => x.path) : [],
        indoor_pic: form.indoor_pic?.length > 0 ? form.indoor_pic?.map((x) => x.path) : [],
      };
    }
    if (form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_MP)) {
      params.business_info.sales_info.mp_info = {
        mp_appid: form.mp_appid,
        mp_sub_appid: form.mp_sub_appid,
        mp_pics: form.mp_pics?.length > 0 ? form.mp_pics?.map((x) => x.path) : [],
      };
    }
    if (
      form.sales_scenes_type.includes(
        EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_MINI_PROGRAM
      )
    ) {
      params.business_info.sales_info.mini_program_info = {
        mini_program_appid: form.mini_program_appid,
        mini_program_sub_appid: form.mini_program_sub_appid,
        mini_program_pics:
          form.mini_program_pics?.length > 0 ? form.mini_program_pics?.map((x) => x.path) : [],
      };
    }
    if (form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_APP)) {
      params.business_info.sales_info.app_info = {
        app_appid: form.app_appid,
        app_sub_appid: form.app_sub_appid,
        app_pics: form.app_pics?.length > 0 ? form.app_pics?.map((x) => x.path) : [],
      };
    }
    if (form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_WEB)) {
      params.business_info.sales_info.web_info = {
        domain: form.domain,
        web_authorisation: form.web_authorisation?.[0]?.path,
      };
    }
    if (
      form.sales_scenes_type.includes(EnumWeChatPayApplymentSalesScenesType.SALES_SCENES_WEWORK)
    ) {
      params.business_info.sales_info.wework_info = {
        sub_corp_id: form.sub_corp_id,
        wework_pics: form.wework_pics?.length > 0 ? form.wework_pics?.map((x) => x.path) : [],
      };
    }
    let res = await enterpriseWalletServices.openEnterpriseWeChatPayWallet(params);
    return res;
  } catch (error) {}
  } catch (error) {
    console.log('error: ', 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() {
@@ -188,7 +1725,39 @@
  );
}
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',
    '网站授权函'
  );
}
function downloadAddressCodeTemplate() {
  downloadFileByUrl(
    'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E3%80%8A%E7%9C%81%E5%B8%82%E5%8C%BA%E7%BC%96%E5%8F%B7%E5%AF%B9%E7%85%A7%E8%A1%A8%E3%80%8B.xlsx',
    '省市编码模版'
  );
}
defineExpose({
  onConfirm: enterpriseWalletExpandindirectCreate,
  onConfirm: openEnterpriseWeChatPayWallet,
});
</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>