Files
cashier-web/src/views/applyments/applyment_in.vue
2026-01-17 10:37:37 +08:00

915 lines
38 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 选择商户以及进件渠道 -->
<template>
<div class="gyq_container">
<div class="gyq_content" ref="containerRef">
<div class="row">
<el-form ref="formRef" :model="form" :rules="rules" label-width="250px" label-position="right">
<el-form-item label="选择商户类型" prop="merchantBaseInfo.userType">
<el-radio-group v-model="form.merchantBaseInfo.userType">
<el-radio label="个体商户" value="0"></el-radio>
<el-radio label="企业商户" value="1"></el-radio>
</el-radio-group>
</el-form-item>
<div class="title_row">
<div class="t">
<el-text size="large" type="primary">商户基础信息</el-text>
</div>
</div>
<el-form-item label="企业类型" v-if="form.merchantBaseInfo.userType == '1'">
<el-radio-group v-model="form.merchantBaseInfo.companyChildType">
<el-radio label="普通企业" value="1"></el-radio>
<el-radio label="事业单位" value="2"></el-radio>
<el-radio label="政府机关" value="3"></el-radio>
<el-radio label="社会组织" value="4"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="商户简称" prop="merchantBaseInfo.shortName">
<el-input v-model.trim="form.merchantBaseInfo.shortName" placeholder="请输入商户简称"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="行业类别码" prop="merchantBaseInfo.mccCode">
<selectCategory v-model="form.merchantBaseInfo.mccCode" />
</el-form-item>
<el-form-item label="支付宝账号" prop="merchantBaseInfo.alipayAccount">
<el-input v-model.trim="form.merchantBaseInfo.alipayAccount" placeholder="请输入支付宝账号"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="联系人类型">
<el-radio-group v-model="form.merchantBaseInfo.contactPersonType">
<el-radio label="经营者/法定代表人" :value="'LEGAL'"></el-radio>
<el-radio label="经办人" :value="'SUPER'"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="证件类型">
<el-radio-group v-model="form.merchantBaseInfo.certType">
<el-radio label="身份证" value="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="联系人身份证号" prop="merchantBaseInfo.contactPersonId">
<el-input v-model.trim="form.merchantBaseInfo.contactPersonId" placeholder="请输入联系人身份证号"
style="width: 300px;" v-loading="contactIdCardFrontPicUploadLoading"></el-input>
</el-form-item>
<el-form-item label="联系人证件有效期开始日期" prop="merchantBaseInfo.contactPersonIdStartDate"
v-loading="contactIdCardBackPicUploadLoading">
<el-date-picker v-model="form.merchantBaseInfo.contactPersonIdStartDate" type="date" placeholder="选择日期"
value-format="YYYY-MM-DD" style="width: 300px;" />
</el-form-item>
<el-form-item label="联系人证件有效期结束日期" prop="merchantBaseInfo.contactPersonIdEndDate"
v-loading="contactIdCardBackPicUploadLoading">
<div class="center">
<el-date-picker v-model="form.merchantBaseInfo.contactPersonIdEndDate" type="date" placeholder="选择日期"
value-format="YYYY-MM-DD" style="width: 300px;" />
<el-checkbox
@change="e => e ? form.merchantBaseInfo.contactPersonIdEndDate = longTime : form.merchantBaseInfo.contactPersonIdEndDate = ''">长期有效</el-checkbox>
</div>
</el-form-item>
<el-form-item label="联系人身份证正面照片" prop="merchantBaseInfo.contactIdCardFrontPic.url">
<div class="column">
<single-image-upload :maxFileSize="2" v-model="form.merchantBaseInfo.contactIdCardFrontPic.url"
@on-success="contactIdCardFrontPicUpload" />
<div class="tips">国徽面为正面 (上传图片自动识别 有效期)</div>
</div>
</el-form-item>
<el-form-item label="联系人身份证反面照片" prop="merchantBaseInfo.contactIdCardBackPic.url">
<div class="column">
<single-image-upload :maxFileSize="2" v-model="form.merchantBaseInfo.contactIdCardBackPic.url"
@on-success="contactIdCardBackPicUpload" />
<div class="tips">人像面为反面 (上传图片自动识别 身份证名称 身份证号)</div>
</div>
</el-form-item>
<el-form-item label="联系人手机号" prop="merchantBaseInfo.contactPhone">
<el-input v-model.trim="form.merchantBaseInfo.contactPhone" placeholder="请输入联系人手机号"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="联系人地址" prop="merchantBaseInfo.contactAddr">
<el-input v-model.trim="form.merchantBaseInfo.contactAddr" placeholder="请输入联系人地址"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="联系人电子邮箱" prop="merchantBaseInfo.contactEmail">
<el-input v-model.trim="form.merchantBaseInfo.contactEmail" placeholder="请输入联系人电子邮箱"
style="width: 300px;"></el-input>
</el-form-item>
<div class="title_row">
<div class="t">
<el-text size="large" type="primary">法人信息</el-text>
</div>
</div>
<el-form-item label="身份证手持图片" prop="legalPersonInfo.idCardHandPic.url">
<single-image-upload :maxFileSize="2" v-model="form.legalPersonInfo.idCardHandPic.url" />
</el-form-item>
<el-form-item label="身份证正面图片" prop="legalPersonInfo.idCardFrontPic.url">
<div class="column">
<single-image-upload :maxFileSize="2" v-model="form.legalPersonInfo.idCardFrontPic.url"
@on-success="idCardFrontPicSuccess" />
<div class="tips">国徽面为正面 (上传图片自动识别 有效期)</div>
</div>
</el-form-item>
<el-form-item label="身份证反面图片" prop="legalPersonInfo.idCardBackPic.url">
<div class="column">
<single-image-upload :maxFileSize="2" v-model="form.legalPersonInfo.idCardBackPic.url"
@on-success="idCardBackPicSuccess" />
<div class="tips">人像面为反面 (上传图片自动识别 身份证名称 身份证号)</div>
</div>
</el-form-item>
<el-form-item label="法定代表人姓名" prop="legalPersonInfo.legalPersonName" v-loading="idCardFrontPicSuccessLoading">
<el-input v-model.trim="form.legalPersonInfo.legalPersonName" placeholder="请输入法定代表人姓名"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="法定代表人身份证号" prop="legalPersonInfo.legalPersonId" v-loading="idCardFrontPicSuccessLoading">
<el-input v-model.trim="form.legalPersonInfo.legalPersonId" placeholder="请输入法定代表人身份证号"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="法定代表人身份证开始日期" prop="legalPersonInfo.legalIdPersonStartDate"
v-loading="idCardBackPicSuccessLoading">
<el-date-picker v-model="form.legalPersonInfo.legalIdPersonStartDate" type="date" placeholder="选择日期"
value-format="YYYY-MM-DD" style="width: 300px;" />
</el-form-item>
<el-form-item label="法定代表人身份证结束日期" prop="legalPersonInfo.legalPersonIdEndDate"
v-loading="idCardBackPicSuccessLoading">
<div class="center">
<el-date-picker v-model="form.legalPersonInfo.legalPersonIdEndDate" type="date" placeholder="选择日期"
value-format="YYYY-MM-DD" style="width: 300px;" />
<el-checkbox
@change="e => e ? form.legalPersonInfo.legalPersonIdEndDate = longTime : form.legalPersonInfo.legalPersonIdEndDate = ''">长期有效</el-checkbox>
</div>
</el-form-item>
<el-form-item label="法定代表人手机号" prop="legalPersonInfo.legalPersonPhone">
<el-input v-model.trim="form.legalPersonInfo.legalPersonPhone" placeholder="请输入法定代表人手机号"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="法定代表人电子邮箱" prop="legalPersonInfo.legalPersonEmail">
<el-input v-model.trim="form.legalPersonInfo.legalPersonEmail" placeholder="请输入法定代表人电子邮箱"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="法定代表人性别" prop="legalPersonInfo.legalGender">
<el-radio-group v-model="form.legalPersonInfo.legalGender">
<el-radio label="男" :value="'0'"></el-radio>
<el-radio label="女" :value="'1'"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="法定代表人联系地址" prop="legalPersonInfo.legalAddress">
<el-input v-model.trim="form.legalPersonInfo.legalAddress" placeholder="请输入法定代表人联系地址"
style="width: 300px;"></el-input>
</el-form-item>
<div class="title_row">
<div class="t">
<el-text size="large" type="primary">营业执照信息</el-text>
</div>
</div>
<el-form-item label="营业执照全称" prop="businessLicenceInfo.licenceName">
<el-input v-model.trim="form.businessLicenceInfo.licenceName" placeholder="请输入营业执照全称"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="营业执照注册号" prop="businessLicenceInfo.licenceNo" v-loading="licensePicSuccessLoading">
<el-input v-model.trim="form.businessLicenceInfo.licenceNo" placeholder="请输入营业执照注册号"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="营业执照有效期开始日期" prop="businessLicenceInfo.licenceStartDate">
<el-date-picker v-model="form.businessLicenceInfo.licenceStartDate" type="date" placeholder="选择日期"
value-format="YYYY-MM-DD" style="width: 300px;" />
</el-form-item>
<el-form-item label="营业执照有效期结束日期" prop="businessLicenceInfo.licenceEndDate">
<div class="center">
<el-date-picker v-model="form.businessLicenceInfo.licenceEndDate" type="date" placeholder="选择日期"
value-format="YYYY-MM-DD" style="width: 300px;" />
<el-checkbox
@change="e => e ? form.businessLicenceInfo.licenceEndDate = longTime : form.businessLicenceInfo.licenceEndDate = ''">长期有效</el-checkbox>
</div>
</el-form-item>
<el-form-item label="注册地址" prop="businessLicenceInfo.registeredAddress">
<el-input v-model.trim="form.businessLicenceInfo.registeredAddress" placeholder="请输入注册地址"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="营业执照照片" prop="businessLicenceInfo.licensePic.url">
<div class="column">
<single-image-upload :maxFileSize="2" v-model="form.businessLicenceInfo.licensePic.url"
@on-success="licensePicSuccess" />
<div class="tips">(上传图片自动识别 营业执照编号)</div>
</div>
</el-form-item>
<div class="title_row">
<div class="t">
<el-text size="large" type="primary">门店信息</el-text>
</div>
</div>
<el-form-item label="商户归属省市区" prop="storeInfo.mercProvCode">
<selectAddress v-model:provCode="form.storeInfo.mercProvCode" v-model:cityCode="form.storeInfo.mercCityCode"
v-model:areaCode="form.storeInfo.mercAreaCode" v-model:prov="form.storeInfo.mercProv"
v-model:city="form.storeInfo.mercCity" v-model:area="form.storeInfo.mercArea" />
</el-form-item>
<el-form-item label="营业地址" prop="storeInfo.businessAddress">
<el-input v-model.trim="form.storeInfo.businessAddress" placeholder="请输入营业地址"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="经营场所内设照片" prop="storeInfo.insidePic.url">
<single-image-upload :maxFileSize="2" v-model="form.storeInfo.insidePic.url" />
</el-form-item>
<el-form-item label="门头照" prop="storeInfo.doorPic.url">
<single-image-upload :maxFileSize="2" v-model="form.storeInfo.doorPic.url" />
</el-form-item>
<el-form-item label="收银台照" prop="storeInfo.cashierDeskPic.url">
<single-image-upload :maxFileSize="2" v-model="form.storeInfo.cashierDeskPic.url" />
</el-form-item>
<div class="title_row">
<div class="t">
<el-text size="large" type="primary">结算信息</el-text>
</div>
</div>
<el-form-item label="结算类型" prop="settlementInfo.settlementType">
<el-radio-group v-model="form.settlementInfo.settlementType">
<el-radio label="非法人结算" value="0" disabled></el-radio>
<el-radio label="法人结算" value="1"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="结算卡类型" prop="settlementInfo.settlementCardType">
<el-radio-group v-model="form.settlementInfo.settlementCardType">
<el-radio label="对私借记卡" :value="'11'"></el-radio>
<el-radio label="对公借记卡" :value="'21'"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="结算卡号" prop="settlementInfo.settlementCardNo">
<el-input v-model.trim="form.settlementInfo.settlementCardNo" placeholder="请输入结算卡号"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="开户名称" prop="settlementInfo.settlementName" v-loading="bankCardFrontPicSuccessLoading">
<el-input v-model.trim="form.settlementInfo.settlementName" placeholder="请输入开户名称"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="结算银行预留手机号" prop="settlementInfo.bankMobile">
<el-input v-model.trim="form.settlementInfo.bankMobile" placeholder="请输入结算银行预留手机号"
style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="开户行省市区" prop="settlementInfo.openAccProvinceId">
<selectAddress v-model:wxProvinceCode="wxProvinceCode"
v-model:provCode="form.settlementInfo.openAccProvinceId"
v-model:cityCode="form.settlementInfo.openAccCityId" v-model:areaCode="form.settlementInfo.openAccAreaId"
v-model:prov="form.settlementInfo.openAccProvince" v-model:city="form.settlementInfo.openAccCity"
v-model:area="form.settlementInfo.openAccArea" />
</el-form-item>
<el-form-item label="开户行" prop="settlementInfo.bankInstId">
<selectBank :province="form.settlementInfo.openAccProvince" :city="form.settlementInfo.openAccCity"
:city-code="wxProvinceCode" v-model:bankInstId="form.settlementInfo.bankInstId"
v-model:bankName="form.settlementInfo.bankName"
v-model:bank-branch-code="form.settlementInfo.bankBranchCode"
v-model:bank-branch-name="form.settlementInfo.bankBranchName" />
</el-form-item>
<el-form-item label="银行卡正面" prop="settlementInfo.bankCardFrontPic.url">
<div class="column">
<SingleImageUpload :maxFileSize="2" v-model="form.settlementInfo.bankCardFrontPic.url"
@on-success="bankCardFrontPicSuccess" />
<div class="tips">(上传图片自动识别 银行卡号)</div>
</div>
</el-form-item>
<el-form-item label="银行卡反面" prop="settlementInfo.bankCardBackPic.url">
<SingleImageUpload :maxFileSize="2" v-model="form.settlementInfo.bankCardBackPic.url" />
</el-form-item>
<el-form-item label="开户许可证" prop="settlementInfo.openAccountLicencePic.url">
<SingleImageUpload :maxFileSize="2" v-model="form.settlementInfo.openAccountLicencePic.url" />
</el-form-item>
</el-form>
</div>
<div class="btn_wrap" :style="{ width: `${containerDomInfo.width}px`, left: `${containerDomInfo.left}px` }"
v-if="formType != 'check'">
<div class="btn_content">
<div class="btn">
<el-button type="primary" size="large" style="width: 100%;" :loading="loading"
@click="submitForm">提交</el-button>
</div>
<div class="btn">
<el-button style="width: 100%;" size="large" @click="router.back()">取消</el-button>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted, onUnmounted } from "vue";
import selectAddress from "./components/selectAddress.vue";
import selectBank from "./components/selectBank.vue";
import selectCategory from "./components/selectCategory.vue";
import SingleImageUpload from "@/components/Upload/SingleImageUpload.vue";
import { entryManagerPost, getInfoByImg, entryManagerDetail } from '@/api/common'
import _ from 'lodash'
import dayjs from "dayjs";
import { isValidMobile } from "@/utils";
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
const containerRef = ref<any>(null)
const containerDomInfo = ref({
left: 0,
width: 0
})
const longTime = ref('2099-12-31')
const wxProvinceCode = ref('')
// 获取进件详情
async function getDetailAjax(shopId: string) {
try {
const res: any = await entryManagerDetail({
shopId: shopId
})
if (res && res.shopId) {
form.value = res
}
} catch (error) {
console.log(error);
}
}
// 获取containerDomInfo信息
function getContainerDomInfo() {
containerDomInfo.value = containerRef.value?.getBoundingClientRect() ?? {}
}
const debouncedCheckWidth = _.debounce(getContainerDomInfo, 100)
onMounted(() => {
getContainerDomInfo()
window.addEventListener('resize', debouncedCheckWidth)
const type = route.query.type
const shopId: string = String(route.query.shopId ?? '')
const licenceNo: string = String(route.query.licenceNo ?? '')
if (shopId) {
getDetailAjax(shopId)
}
if (licenceNo && type && type == 'editor') {
formType.value = 'editor'
}
if (type && type == 'check') {
formType.value = 'check'
}
})
onUnmounted(() => {
window.removeEventListener('resize', debouncedCheckWidth)
})
// 表单操作类型 add添加 editor编辑 check查看
const formType = ref('add')
const formRef = ref<any>(null);
const form = ref({
shopId: route.query.shopId,
merchantCode: '',
// 【必填】商户基础信息
merchantBaseInfo: {
userType: '0', // 0: 个体商户;1: 企业商户;3: 小微商户 暂不支持
shortName: '', // 商户简称--企业、个体必填
mccCode: '', // 行业类别码--必填
alipayAccount: '', // 【必填】支付宝账号
contactPersonType: 'LEGAL', // 联系人类型 LEGAL: 经营者/法定代表人 SUPER: 经办人 默认LEGAL
contactName: '', // 联系人姓名
certType: '0', // 证件类型 目前只支持身份证 传值0
contactPersonId: '', // 联系人身份证号
contactPersonIdStartDate: '', // 联系人证件有效期开始日期
contactPersonIdEndDate: '', // 联系人证件有效期结束日期
// 联系人身份证反面照片
contactIdCardBackPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 联系人身份证正面照片
contactIdCardFrontPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
contactPhone: '', // 联系人手机号
contactAddr: '', // 联系人地址
contactEmail: '', // 联系人电子邮箱
companyChildType: '1', // 企业类型1普通企业2事业单位3政府机关4社会组织 默认值:1
},
// 【必填】法人信息
legalPersonInfo: {
legalPersonName: '', // 法定代表人姓名
legalPersonId: '', // 法定代表人身份证号
legalIdPersonStartDate: '', // 法定代表人证件有效期开始日期
legalPersonIdEndDate: '', // 法定代表人证件有效期结束日期
legalPersonPhone: '', // 法定代表人手机号
legalPersonEmail: '', // 法定代表人电子邮箱
legalGender: '', // 法人性别0男 1女
legalAddress: '', // 法人联系地址
// 身份证手持 图片
idCardHandPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 身份证正面 图片
idCardFrontPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 身份证反面 图片
idCardBackPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
},
// 【必填】营业执照信息
businessLicenceInfo: {
licenceName: '', // 营业执照全称--非小微必填
licenceNo: '', // 营业执照注册号--非小微必填
licenceStartDate: '', // 营业执照有效期开始日期--非小微必填
licenceEndDate: '', // 营业执照有效期结束日期--非小微必填
registeredAddress: '', // 注册地址--非小微必填
licensePic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
},
// 【必填】门店信息
storeInfo: {
mercProvCode: '', // 【必填】商户归属省Code
mercCityCode: '', // 【必填】商户归属市Code
mercAreaCode: '', // 【必填】商户归属区Code
mercProv: '', // 商户归属省
mercCity: '', // 商户归属市
mercArea: '', // 商户归属区
businessAddress: '', // 【必填】 营业地址
// 经营场所内设照片
insidePic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 门头照
doorPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 收银台照
cashierDeskPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
},
// 【必填】结算信息
settlementInfo: {
settlementType: '1', // 结算类型 0:非法人结算, 1:法人结算
noLegalName: '', // 非法人姓名
noLegalId: '', // 非法人身份证号
settlementCardType: '', // 结算卡类型 必填 11 对私借记卡(结算卡正面照、结算卡反面照图片必传) 21 对公借记卡(只须结算卡正面照片)
settlementCardNo: '', // 结算卡号
settlementName: '', // 开户名称
bankMobile: '', // 结算银行预留手机号
openAccProvinceId: '', // 开户行省ID
openAccCityId: '', // 开户行市ID
openAccAreaId: '', // 开户行区ID
openAccProvince: '', // 开户行省
openAccCity: '', // 开户行市
openAccArea: '', // 开户行区
bankName: '', // 开户行别名名称 bankAlias
bankInstId: '', // 开户行缩写 bankCode
bankType: '', // 开户行编号 bankAliasCode
bankBranchName: '', // 支行开户行行别名称 branchName
bankBranchCode: '', // 支行开户行编号 bankCode
// 银行卡正面
bankCardFrontPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 银行卡反面
bankCardBackPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 开户许可证
openAccountLicencePic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 非法人手持结算授权书
noLegalHandSettleAuthPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 非法人结算授权书
noLegalSettleAuthPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 非法人身份证正面
noLegalIdCardFrontPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
// 非法人身份证反面
noLegalIdCardBackPic: {
url: '',
wechatId: '', // 微信图片ID
alipayId: '', // 支付宝图片ID
},
}
});
const rules = reactive({
'merchantBaseInfo.userType': [{ required: true, message: '请选择商户类型', trigger: 'change' }],
'merchantBaseInfo.shortName': [{ required: true, message: '请输入商户简称', trigger: 'blur' }],
'merchantBaseInfo.mccCode': [{ required: true, message: '请输入行业类别码', trigger: 'change' }],
'merchantBaseInfo.alipayAccount': [{ required: true, message: '请输入支付宝账号', trigger: 'blur' }],
'merchantBaseInfo.contactPersonId': [{ required: true, message: '请输入联系人身份证号', trigger: 'blur' }],
'merchantBaseInfo.contactPersonIdStartDate': [{ required: true, message: '请选择联系人证件有效期开始日期', trigger: 'change' }],
'merchantBaseInfo.contactPersonIdEndDate': [{ required: true, message: '请选择联系人证件有效期结束日期', trigger: 'change' }],
'merchantBaseInfo.contactIdCardFrontPic.url': [{ required: true, message: '请上传联系人身份证正面照片', trigger: 'blur' }],
'merchantBaseInfo.contactIdCardBackPic.url': [{ required: true, message: '请上传联系人身份证反面照片', trigger: 'blur' }],
'merchantBaseInfo.contactPhone': [
{ required: true, message: '请输入联系人手机号', trigger: 'blur' },
{
validator: (rule: any, value: any, callback: any) => {
if (!isValidMobile(value)) {
callback(new Error('请输入正确的手机号'))
} else {
callback()
}
}
}
],
'merchantBaseInfo.contactAddr': [{ required: true, message: '请输入联系人地址', trigger: 'blur' }],
'merchantBaseInfo.contactEmail': [{ required: true, message: '请输入联系人电子邮箱', trigger: 'blur' }],
'legalPersonInfo.idCardHandPic.url': [{ required: true, message: '请上传身份证手持图片', trigger: 'blur' }],
'legalPersonInfo.idCardFrontPic.url': [{ required: true, message: '请上传身份证正面图片', trigger: 'blur' }],
'legalPersonInfo.idCardBackPic.url': [{ required: true, message: '请上传身份证反面图片', trigger: 'blur' }],
'legalPersonInfo.legalPersonName': [{ required: true, message: '请输入法定代表人姓名', trigger: 'blur' }],
'legalPersonInfo.legalPersonId': [{ required: true, message: '请输入法定代表人身份证号', trigger: 'blur' }],
'legalPersonInfo.legalIdPersonStartDate': [{ required: true, message: '请输入法定代表人身份证开始日期', trigger: 'blur' }],
'legalPersonInfo.legalPersonIdEndDate': [{ required: true, message: '请输入法定代表人身份证结束日期', trigger: 'blur' }],
'legalPersonInfo.legalPersonPhone': [
{ required: true, message: '请输入法定代表人手机号', trigger: 'blur' },
{
validator: (rule: any, value: any, callback: any) => {
if (!isValidMobile(value)) {
callback(new Error('请输入正确的手机号'))
} else {
callback()
}
}
}
],
'legalPersonInfo.legalPersonEmail': [{ required: true, message: '请输入法定代表人电子邮箱', trigger: 'blur' }],
'legalPersonInfo.legalGender': [{ required: true, message: '请选择法定代表人性别', trigger: 'change' }],
'legalPersonInfo.legalAddress': [{ required: true, message: '请输入法定代表人联系地址', trigger: 'blur' }],
// 营业执照信息
'businessLicenceInfo.licenceName': [{ required: true, message: '请输入营业执照全称', trigger: 'blur' }],
'businessLicenceInfo.licenceNo': [{ required: true, message: '请输入营业执照注册号', trigger: 'blur' }],
'businessLicenceInfo.licenceStartDate': [{ required: true, message: '请输入营业执照有效期开始日期', trigger: 'blur' }],
'businessLicenceInfo.licenceEndDate': [{ required: true, message: '请输入营业执照有效期结束日期', trigger: 'blur' }],
'businessLicenceInfo.registeredAddress': [{ required: true, message: '请输入注册地址', trigger: 'blur' }],
'businessLicenceInfo.licensePic.url': [{ required: true, message: '请上传营业执照照片', trigger: 'blur' }],
// 门店信息
'storeInfo.mercProvCode': [{ required: true, message: '请选择商户归属省市区', trigger: 'change' }],
'storeInfo.mercCityCode': [{ required: true, message: '请选择商户归属市', trigger: 'change' }],
'storeInfo.mercAreaCode': [{ required: true, message: '请选择商户归属区', trigger: 'change' }],
'storeInfo.businessAddress': [{ required: true, message: '请输入营业地址', trigger: 'blur' }],
'storeInfo.insidePic.url': [{ required: true, message: '请上传经营场所内设照片', trigger: 'blur' }],
'storeInfo.doorPic.url': [{ required: true, message: '请上传门头照', trigger: 'blur' }],
'storeInfo.cashierDeskPic.url': [{ required: true, message: '请上传收银台照', trigger: 'blur' }],
// 结算信息
'settlementInfo.settlementType': [{ required: true, message: '请选择结算类型', trigger: 'change' }],
'settlementInfo.settlementCardType': [{ required: true, message: '请选择结算卡类型', trigger: 'change' }],
'settlementInfo.settlementCardNo': [{ required: true, message: '请输入结算卡号', trigger: 'blur' }],
'settlementInfo.settlementName': [{ required: true, message: '请输入开户名称', trigger: 'blur' }],
'settlementInfo.bankMobile': [
{ required: true, message: '请输入结算银行预留手机号', trigger: 'blur' },
{
validator: (rule: any, value: any, callback: any) => {
if (!isValidMobile(value)) {
callback(new Error('请输入正确的手机号'))
} else {
callback()
}
}
}
],
'settlementInfo.openAccProvinceId': [
{
required: true,
validator: (rule: any, value: any, callback: any) => {
if (form.value.settlementInfo.openAccProvinceId == '' || form.value.settlementInfo.openAccCityId == '' || form.value.settlementInfo.openAccAreaId == '') {
callback(new Error('请选择开户行省市区'))
} else {
callback()
}
},
trigger: 'change'
}
],
'settlementInfo.bankInstId': [
{
required: true,
validator: (rule: any, value: any, callback: any) => {
if (form.value.settlementInfo.bankInstId == '') {
callback(new Error('请选择开户行以及支行'))
} else {
callback()
}
},
trigger: 'change'
}
],
'settlementInfo.bankCardFrontPic.url': [
{
required: true,
message: '请上传银行卡正面图片',
trigger: 'blur'
}
],
'settlementInfo.bankCardBackPic.url': [
{
required: true,
message: '请上传银行卡反面图片',
trigger: 'blur'
}
],
'settlementInfo.openAccountLicencePic.url': [
{
required: true,
message: '请上传开户许可证图片',
trigger: 'blur'
}
]
})
// 联系人身份证正面照片
const contactIdCardFrontPicUploadLoading = ref(false)
async function contactIdCardFrontPicUpload(url: string) {
try {
form.value.merchantBaseInfo.contactIdCardBackPic.alipayId = ''
form.value.merchantBaseInfo.contactIdCardBackPic.wechatId = ''
contactIdCardFrontPicUploadLoading.value = true
const res: any = await getInfoByImg({
url: url,
type: 'IdCard'
})
let date = res.subImages[0].kvInfo.data.validPeriod.split('-')
form.value.merchantBaseInfo.contactPersonIdStartDate = dayjs(date[0]).format('YYYY-MM-DD')
form.value.merchantBaseInfo.contactPersonIdEndDate = dayjs(date[1]).format('YYYY-MM-DD')
} catch (error) {
console.log(error);
}
contactIdCardFrontPicUploadLoading.value = false
}
// 联系人身份证反面照片
const contactIdCardBackPicUploadLoading = ref(false)
async function contactIdCardBackPicUpload(url: any) {
try {
form.value.merchantBaseInfo.contactIdCardFrontPic.alipayId = ''
form.value.merchantBaseInfo.contactIdCardFrontPic.wechatId = ''
contactIdCardBackPicUploadLoading.value = true
const res: any = await getInfoByImg({
url: url,
type: 'IdCard'
})
form.value.merchantBaseInfo.contactPersonId = res.subImages[0].kvInfo.data.idNumber
} catch (error) {
console.log(error);
}
contactIdCardBackPicUploadLoading.value = false
}
// 法人信息 身份证正面图片
const idCardFrontPicSuccessLoading = ref(false)
async function idCardFrontPicSuccess(url: string) {
try {
form.value.legalPersonInfo.idCardBackPic.alipayId = ''
form.value.legalPersonInfo.idCardBackPic.wechatId = ''
idCardFrontPicSuccessLoading.value = true
const res: any = await getInfoByImg({
url: url,
type: 'IdCard'
})
let date = res.subImages[0].kvInfo.data.validPeriod.split('-')
form.value.legalPersonInfo.legalIdPersonStartDate = dayjs(date[0]).format('YYYY-MM-DD')
form.value.legalPersonInfo.legalPersonIdEndDate = dayjs(date[1]).format('YYYY-MM-DD')
} catch (error) {
console.log(error);
}
idCardFrontPicSuccessLoading.value = false
}
// 法人信息 身份证反图片
const idCardBackPicSuccessLoading = ref(false)
async function idCardBackPicSuccess(url: string) {
try {
form.value.legalPersonInfo.idCardFrontPic.alipayId = ''
form.value.legalPersonInfo.idCardFrontPic.wechatId = ''
idCardBackPicSuccessLoading.value = true
const res: any = await getInfoByImg({
url: url,
type: 'IdCard'
})
form.value.legalPersonInfo.legalPersonName = res.subImages[0].kvInfo.data.name
form.value.legalPersonInfo.legalPersonId = res.subImages[0].kvInfo.data.idNumber
} catch (error) {
console.log(error);
}
idCardBackPicSuccessLoading.value = false
}
// 营业执照信息 营业执照照片
const licensePicSuccessLoading = ref(false)
async function licensePicSuccess(url: string) {
try {
form.value.businessLicenceInfo.licensePic.alipayId = ''
form.value.businessLicenceInfo.licensePic.wechatId = ''
licensePicSuccessLoading.value = true
const res: any = await getInfoByImg({
url: url,
type: 'BusinessLicense'
})
let data = res.subImages[0].kvInfo.data
// console.log('营业执照照片', data);
form.value.businessLicenceInfo.licenceName = data.companyName
form.value.businessLicenceInfo.licenceNo = data.creditCode
// form.value.businessLicenceInfo.licenceStartDate = data.companyName
// form.value.businessLicenceInfo.licenceEndDate = data.companyName
form.value.businessLicenceInfo.registeredAddress = data.businessAddress
} catch (error) {
console.log(error);
}
licensePicSuccessLoading.value = false
}
// 结算信息 银行卡正面
const bankCardFrontPicSuccessLoading = ref(false)
async function bankCardFrontPicSuccess(url: string) {
try {
form.value.settlementInfo.bankCardFrontPic.alipayId = ''
form.value.settlementInfo.bankCardFrontPic.wechatId = ''
bankCardFrontPicSuccessLoading.value = true
const res: any = await getInfoByImg({
url: url,
type: 'BankCard'
})
let data = res.subImages[0].kvInfo.data
// console.log('银行卡正面', data);
form.value.settlementInfo.settlementCardNo = data.cardNumber
form.value.settlementInfo.bankName = data.bankName
} catch (error) {
console.log(error);
}
bankCardFrontPicSuccessLoading.value = false
}
const loading = ref(false)
function submitForm() {
console.log('提交的表单数据:', form.value);
console.log('formRef', formRef.value);
formRef.value.validate(async (valid: boolean) => {
console.log('valid===', valid);
if (valid) {
console.log('表单验证通过,可以提交');
try {
loading.value = true
await entryManagerPost(form.value)
ElNotification({
title: '注意',
message: '提交成功',
type: 'success'
})
router.back()
} catch (error) {
console.log(error);
}
loading.value = false
} else {
console.log('表单验证失败,请检查输入项');
return false;
}
});
}
</script>
<style scoped lang="scss">
.gyq_container {
padding: 14px;
.gyq_content {
padding: 14px;
background-color: #fff;
border-radius: 8px;
padding-bottom: 100px;
}
}
.row {
&.mt14 {
margin-top: 14px;
}
}
.center {
display: flex;
align-items: center;
gap: 10px;
}
.column {
display: flex;
flex-direction: column;
}
.tips {
--bg: #ffeed8;
font-size: 12px;
background-color: var(--bg);
color: #c57000;
display: flex;
align-items: center;
padding: 0 10px;
border-radius: 6px;
margin-top: 15px;
position: relative;
&::after {
content: '';
position: absolute;
width: 12px;
height: 12px;
background-color: var(--bg);
border: 1px solid var(--bg);
border-radius: 4px;
transform: rotate(-45deg);
top: -7px;
left: 40px;
transform-origin: center;
translate: -50% 0;
}
}
.title_row {
padding: 14px 50px;
position: relative;
display: flex;
align-items: center;
&::after {
content: "";
width: 100%;
border-bottom: 1px solid #ececec;
position: absolute;
left: 0;
top: 50%;
z-index: 1;
}
.t {
position: relative;
z-index: 2;
background-color: #fff;
padding: 0 14px;
}
}
.btn_wrap {
width: 100%;
position: fixed;
z-index: 10;
bottom: 10px;
padding-bottom: 24px;
.btn_content {
display: flex;
justify-content: center;
gap: 14px;
.btn {
width: 200px;
}
}
}
</style>