<template>
|
<ContentScrollView :paddingH="false">
|
<nut-form :model-value="form" ref="formRef" :rules="rules">
|
<ProFormItemCell label="身份证照片:" required>
|
<div class="id-imgUrl-wrapper">
|
<nut-form-item label=" " class="bole-form-item" prop="identityImg" label-width="0px">
|
<Uploader
|
v-model:file-list="form.identityImg"
|
:maximum="1"
|
:limitFileSize="10"
|
class="bole-uploader nopaddingtop"
|
@my-success="handleFrontImgUrlChange"
|
>
|
<template #upload-icon>
|
<div class="photograph-wrapper">
|
<Photograph color="#808080" />
|
<div>身份证人像面</div>
|
</div>
|
</template>
|
</Uploader>
|
</nut-form-item>
|
<nut-form-item label=" " class="bole-form-item" prop="identityBackImg" label-width="0px">
|
<Uploader
|
v-model:file-list="form.identityBackImg"
|
:maximum="1"
|
:limitFileSize="10"
|
class="bole-uploader nopaddingtop"
|
>
|
<template #upload-icon>
|
<div class="photograph-wrapper">
|
<Photograph color="#808080" />
|
<div>身份证国徽面</div>
|
</div>
|
</template>
|
</Uploader>
|
</nut-form-item>
|
</div>
|
|
<div class="pro-form-item-tips">
|
请上传身份证的正反面照片,确保身份证清晰可见,支持png/jpg/jpeg格式,文件大小不超过10MB
|
</div>
|
</ProFormItemCell>
|
<nut-form-item label="姓名:" class="bole-form-item" prop="name" required>
|
<nut-input
|
v-model.trim="form.name"
|
class="nut-input-text bole-input-text"
|
placeholder="请填写姓名"
|
type="text"
|
/>
|
</nut-form-item>
|
<nut-form-item label="身份证号:" class="bole-form-item" prop="identity" required>
|
<nut-input
|
v-model.trim="form.identity"
|
class="nut-input-text bole-input-text"
|
placeholder="请填写身份证号码"
|
type="text"
|
/>
|
</nut-form-item>
|
<template v-if="type === 'realName'">
|
<nut-form-item label="手机号:" class="bole-form-item" prop="phoneNumber" required>
|
<nut-input
|
v-model.trim="form.phoneNumber"
|
class="nut-input-text bole-input-text"
|
placeholder="请填写手机号码"
|
type="text"
|
>
|
<template #right>
|
<ProFormCaptcha
|
:onGetCaptcha="() => onGetCaptcha(form.phoneNumber)"
|
:phonePropName="['phoneNumber', 'name', 'identity']"
|
:validateField="formRef?.validate"
|
></ProFormCaptcha>
|
</template>
|
</nut-input>
|
</nut-form-item>
|
<nut-form-item label="短信验证码:" class="bole-form-item" prop="verifyCode" required>
|
<nut-input
|
v-model.trim="form.verifyCode"
|
class="nut-input-text bole-input-text"
|
placeholder="请输入验证码"
|
type="number"
|
/>
|
</nut-form-item>
|
</template>
|
</nut-form>
|
</ContentScrollView>
|
<PageFooter :isOnlyAction="false">
|
<PageFooterBtn type="primary" @click="handleSubmit()" :loading="loading"
|
>提交认证</PageFooterBtn
|
>
|
</PageFooter>
|
</template>
|
|
<script setup lang="ts">
|
import { ProFormCaptcha, ProFormItemCell } from 'senin-mini/components';
|
import * as electronSignServices from '@12333/services/apiV2/electronSign';
|
import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type';
|
import { Photograph } from '@nutui/icons-vue-taro';
|
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
|
import { FormValidator } from '@12333/utils';
|
import Taro from '@tarojs/taro';
|
|
defineOptions({
|
name: 'InnerPage',
|
});
|
|
const router = Taro.useRouter();
|
const type = router.params?.type ?? '';
|
|
const form = reactive({
|
identityImg: [] as FileItem[],
|
identityBackImg: [] as FileItem[],
|
name: '',
|
identity: '',
|
phoneNumber: '',
|
verifyCode: '',
|
});
|
|
const formRef = ref<any>(null);
|
const loading = ref(false);
|
|
const rules: FormRules = {
|
name: [{ required: true, message: '请填写姓名' }],
|
identityImg: [
|
{ required: true, message: '请上传身份证人像面', validator: FormValidator.validatorArray },
|
],
|
identityBackImg: [
|
{ required: true, message: '请上传身份证国徽面', validator: FormValidator.validatorArray },
|
],
|
identity: [
|
{ required: true, message: '请填写身份证号码' },
|
{ message: '请输入正确的身份证号码', validator: FormValidator.validatorIDCard },
|
],
|
phoneNumber: [
|
{ required: true, message: '请填写手机号码' },
|
{ message: '请输入正确的手机号码', validator: FormValidator.validatorPhoneNumber },
|
],
|
verifyCode: [{ required: true, message: '请输入验证码' }],
|
};
|
|
async function onGetCaptcha(phoneNumber: string) {
|
await electronSignServices.sendPersonalUserIdentity3RealSms(
|
{
|
name: form.name,
|
identity: form.identity,
|
phoneNumber: form.phoneNumber,
|
},
|
{ showLoading: false }
|
);
|
}
|
|
function handleFrontImgUrlChange(response: FileItem) {
|
// userCredentialVerifyOcrIDCard(response, {
|
// onSuccess(res) {
|
// if (res.realName) form.legalPersonName = res.realName;
|
// if (res.idcardNum) form.legalPersonIdNumber = res.idcardNum;
|
// },
|
// });
|
}
|
|
function handleSubmit() {
|
if (!formRef.value) return;
|
formRef.value.validate().then(({ valid, errors }: any) => {
|
if (valid) {
|
submit();
|
}
|
});
|
}
|
|
function submit() {
|
if (type === 'realName') {
|
personalUserIdentity3Real();
|
}
|
if (type === 'face') {
|
personalUserFaceReal();
|
}
|
}
|
|
async function personalUserFaceReal() {
|
try {
|
let params: API.PersonalUserIdentity3RealCommand = {
|
name: form.name,
|
phoneNumber: form.phoneNumber,
|
identity: form.identity,
|
identityImg: form.identityImg?.[0]?.path ?? '',
|
identityBackImg: form.identityBackImg?.[0]?.path ?? '',
|
verifyCode: form.verifyCode,
|
};
|
let res = await electronSignServices.personalUserIdentity3Real(params);
|
} catch (error) {}
|
}
|
|
async function personalUserIdentity3Real() {
|
try {
|
let params: API.PersonalUserFaceRealCommand = {
|
name: form.name,
|
identity: form.identity,
|
identityImg: form.identityImg?.[0]?.path ?? '',
|
identityBackImg: form.identityBackImg?.[0]?.path ?? '',
|
};
|
let res = await electronSignServices.personalUserFaceReal(params);
|
} catch (error) {}
|
}
|
</script>
|
|
<style lang="scss">
|
@import '@/styles/common.scss';
|
|
.authenticationRealName-page-wrapper {
|
.photograph-wrapper {
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
justify-content: center;
|
}
|
}
|
</style>
|