| | |
| | | </div> |
| | | <ExInput :label="$t('realName')" :disabled="disabled()" :clearBtn="!disabled()" |
| | | :placeholderText="$t('entryRealName')" v-model="name" /> |
| | | |
| | | <ExInput :label="$t('credentPassport')" :disabled="disabled()" :clearBtn="!disabled()" |
| | | :placeholderText="$t('entryCredentPassport')" v-model="idnumber" /> |
| | | |
| | | <ExInput :label="$t('phoneNum')" :disabled="disabled()" :clearBtn="!disabled()" |
| | | :placeholderText="$t('entryPhone')" v-model="phone" :area="true" :dialCode="dialCode" |
| | | @selectArea="onSelectArea" :icon="icon" v-if="!disabled()" /> |
| | | |
| | | <p class="label mt-2 textColor" v-if="disabled()">{{ $t("phoneNum") }}</p> |
| | | <div class="iptbox inputBackground" v-if="disabled()"> |
| | | <input class="inputBackground textColor" style="background: none;" type="text" v-model="phone" disabled /> |
| | | </div> |
| | | |
| | | <!-- 验证码输入框已隐藏 --> |
| | | <!-- <p class="label mt-2 textColor" v-if="!disabled()">{{ $t("verificationCode") }}</p> |
| | | <div class="iptbox inputBackground" v-if="!disabled()"> |
| | | <input class="inputBackground textColor" type="text" :placeholder="$t('entryVerifyCode')" v-model="verifyCode" |
| | | :disabled="disabled()" /> |
| | | <span @click="sendCode" :class="{ 'disabled': time > 0 }"> |
| | | {{ $t("sendVerifyCode") }} |
| | | <template v-if="time"> ({{ time }})s</template> |
| | | </span> |
| | | </div> --> |
| | | <div> |
| | | <div v-if="resultArr.length > 0" class="mt-1 mb-3 textColor">{{ $t('uploadCredentPassport') }} </div> |
| | | <div v-else class="mt-4 mb-12 textColor">{{ $t('uploadPicCredentPassport') }}</div> |
| | |
| | | </div> |
| | | <div class="text-28 h-10 textColor1">{{ $t('credentObverse') }}</div> |
| | | </div> |
| | | <!-- <div class="flex-1 flex flex-col text-center justify-center items-center"> |
| | | <div class="flex-1 flex flex-col text-center justify-center items-center"> |
| | | <div class="upload-wrap"> |
| | | <img src="../../assets/image/kyc/2.png" alt="" class="w-full" |
| | | v-if="[1, 2].includes(status) && fileList.length === 0" /> |
| | |
| | | :after-read="afterRead" @click-upload="onClickUpload('fileList')" v-else /> |
| | | </div> |
| | | <div class="text-28 h-10" style="color:#868D9A;">{{ $t('handCredent') }}</div> |
| | | </div> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <template v-if="!disabled()"> |
| | | <!-- <div class="text-28 mb-8 textColor">{{ $t('photoExample') }}</div> --> |
| | | <!-- <img src="@/assets/image/kyc/kyc-demo.png" alt="" style="width:100%;height:auto;" class="w-auto h-56 mb-5"> --> |
| | | <div class="text-28 mb-8 textColor">{{ $t('photoExample') }}</div> |
| | | <img src="@/assets/image/kyc/kyc-demo.png" alt="" style="width:100%;height:auto;" class="w-auto h-56 mb-5"> |
| | | <!-- <div class="mb-5 flex justify-center"> |
| | | <div class="flex flex-1 justify-center"> |
| | | <img src="../../assets/image/kyc/kyc_demo1.png" alt="" class="w-80 h-80" /> |
| | |
| | | </template> |
| | | <button class="apply-btn btnMain text-white text-26 h-24 rounded" @click="onSubmit" v-if="!disabled()">{{ |
| | | $t('Apply') |
| | | }}</button> |
| | | }}</button> |
| | | <div class="pt-9 pb-16 text-24" v-if="!disabled() || status === 3"> |
| | | <span class="text-grey">{{ $t('uploadTitle1') }} {{ $t('photoExample') }}</span> |
| | | <span class="text-blue service-text" @click="tokefu"> {{ $t('ContactService') }}</span> |
| | | </div> |
| | | <nationality-list ref='controlChild' :title="$t('selectNation')" @getName="getName" v-if="!disabled()"> |
| | | </nationality-list> |
| | | |
| | | <nationality-list ref="controlChildRef" :title="$t('selectArea')" @getName="getName1"></nationality-list> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <script setup> |
| | | import { _getIdentify, _info, _applyIdentify } from "@/service/user.api.js"; |
| | | import { _uploadImage } from "@/service/upload.api.js"; |
| | | import { _sendVerifyCode } from "@/service/login.api.js"; |
| | | import { onMounted, onBeforeUnmount, ref } from 'vue'; |
| | | import { onMounted, ref } from 'vue'; |
| | | import nationalityList from './components/nationalityList.vue' |
| | | import { useRouter } from "vue-router"; |
| | | import { showToast, Uploader } from "vant" |
| | | import ExInput from "@/components/ex-input/index.vue"; |
| | | // import ExInput from "@/components/ex-input"; |
| | | import countries from "./components/countryList"; |
| | | import { getCurrentInstance } from 'vue'; |
| | | import { useI18n } from "vue-i18n"; |
| | |
| | | const countryCode = ref('af') |
| | | const idnumber = ref('') |
| | | const name = ref('') |
| | | const phone = ref('') |
| | | const icon = ref('') |
| | | const dialCode = ref('') |
| | | const verifyCode = ref('') |
| | | const time = ref(0) |
| | | const timer = ref(null) |
| | | const frontFile = ref([]) |
| | | const reverseFile = ref([]) |
| | | const fileList = ref([]) |
| | |
| | | onMounted(() => { |
| | | fetchInfo(); |
| | | }) |
| | | |
| | | onBeforeUnmount(() => { |
| | | if (timer.value) { |
| | | clearInterval(timer.value) |
| | | timer.value = null |
| | | } |
| | | }) |
| | | const loginOut = () => { |
| | | router.push('/certificationCenter') |
| | | } |
| | |
| | | |
| | | idnumber.value = data.idnumber |
| | | name.value = data.name |
| | | phone.value = data.phone || '' |
| | | frontFile.value = data.idimg_1 ? [{ url: data.idimg_1_path, resURL: data.idimg_1 }] : [] |
| | | reverseFile.value = data.idimg_2 ? [{ url: data.idimg_2_path, resURL: data.idimg_2 }] : [] |
| | | // fileList.value = data.idimg_3 ? [{ url: data.idimg_3_path, resURL: data.idimg_3 }] : [] |
| | | fileList.value = data.idimg_3 ? [{ url: data.idimg_3_path, resURL: data.idimg_3 }] : [] |
| | | } |
| | | }) |
| | | } |
| | |
| | | countryCode.value = params.code; |
| | | } |
| | | |
| | | //获取到当前选中国家的手机号code值 |
| | | const getName1 = (params) => { |
| | | icon.value = params.code; |
| | | dialCode.value = params.dialCode; |
| | | }; |
| | | |
| | | const controlChildRef = ref(null); |
| | | const onSelectArea = () => { |
| | | controlChildRef.value.open(); |
| | | }; |
| | | |
| | | // 发送验证码 |
| | | const sendCode = () => { |
| | | if (!phone.value) { |
| | | showToast(t('entryPhone')) |
| | | return |
| | | } |
| | | // 校验手机号格式:必须是数字 |
| | | if (isNaN(phone.value) || phone.value.trim() === '') { |
| | | showToast(t('请输入正确的手机号码')) |
| | | return |
| | | } |
| | | if (time.value > 0) { |
| | | return false |
| | | } |
| | | _sendVerifyCode({ |
| | | target: `${dialCode.value || ''}${phone.value}`, |
| | | }).then((res) => { |
| | | showToast(t("sendSuccess")) |
| | | time.value = 30 |
| | | timer.value = setInterval(() => { |
| | | if (time.value > 0) { |
| | | time.value = time.value - 1 |
| | | } else { |
| | | time.value = 0 |
| | | clearInterval(timer.value) |
| | | timer.value = null |
| | | } |
| | | }, 1000) |
| | | }).catch(err => { |
| | | if (err.msg !== undefined) { |
| | | showToast(err.msg) |
| | | } else { |
| | | showToast(t('sendFailed')) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const onSubmit = () => { |
| | | if (!countryName.value) { |
| | | showToast(t('selectNation')) |
| | |
| | | showToast(t('entryCredent')) |
| | | return |
| | | } |
| | | if (!phone.value) { |
| | | showToast(t('entryPhone')) |
| | | return |
| | | } |
| | | // 校验手机号格式:必须是数字 |
| | | if (isNaN(phone.value) || phone.value.trim() === '') { |
| | | showToast(t('请输入正确的手机号码')) |
| | | return |
| | | } |
| | | // 验证码校验已隐藏 |
| | | // if (!verifyCode.value) { |
| | | // showToast(t('entryVerifyCode')) |
| | | // return |
| | | // } |
| | | // if (verifyCode.value.length < 6) { |
| | | // showToast(t('entryVerifyTips')) |
| | | // return |
| | | // } |
| | | // if (!frontFile.value.length || !reverseFile.value.length || !fileList.value.length) { |
| | | if (!frontFile.value.length || !reverseFile.value.length) { |
| | | if (!frontFile.value.length || !reverseFile.value.length || !fileList.value.length) { |
| | | showToast(t('uploadComplete')) |
| | | return |
| | | } |
| | | _applyIdentify({ |
| | | name: name.value, |
| | | idnumber: idnumber.value, |
| | | phone: "" + dialCode.value + phone.value, |
| | | code: '', // 验证码已隐藏,传空值 |
| | | frontFile: frontFile.value, |
| | | reverseFile: reverseFile.value, |
| | | // fileList: fileList.value, |
| | | fileList: fileList.value, |
| | | countryName: countryCode.value // this.countryName 存储的 code, 回来再遍历 |
| | | }).then(() => { |
| | | showToast(t('submitSuccess')) |
| | | // router.push('/verified') |
| | | router.go(-1) |
| | | router.push('/verified') |
| | | // this.fetchInfo() |
| | | }).catch(err => { |
| | | if (err.code === 'ECONNABORTED') { showToast('网络超时!'); } |
| | |
| | | |
| | | .pt-35 { |
| | | padding-top: 16px; |
| | | } |
| | | |
| | | .label { |
| | | font-size: 14px; |
| | | margin-bottom: 9px; |
| | | } |
| | | |
| | | .iptbox { |
| | | height: 44px; |
| | | margin-top: 8px; |
| | | padding: 0 10px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | border-radius: 3px; |
| | | |
| | | input { |
| | | flex: 1; |
| | | height: 100%; |
| | | border: none; |
| | | padding-left: 10px; |
| | | color: $text_color; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | span { |
| | | color: $color_main; |
| | | font-size: 14px; |
| | | cursor: pointer; |
| | | white-space: nowrap; |
| | | margin-left: 10px; |
| | | |
| | | &.disabled { |
| | | color: $text_color1; |
| | | cursor: not-allowed; |
| | | } |
| | | } |
| | | } |
| | | </style> |