sign-stream/src/views/upload-id-card/content/one.vue
2024-07-29 14:25:36 +08:00

279 lines
6.5 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.

<script setup>
import {scan_id_card, upload_img} from "@/apis/index.js";
import {useUserStore} from '@/stores/userStore.js'
import defaultImage1 from '@/assets/images/zu1172@2x.png';
import storage from "@/utils/storage.js";
import {storeToRefs} from "pinia";
import {ref} from "vue";
import dayjs from "dayjs";
const userStore = useUserStore()
const {idCardInfo,iDCardImage} = storeToRefs(userStore);
const Num=ref(0)
const afterRead = async (file, num) => {
Num.value=num
const res = await upload_img({
file: file.file,
source: "artwork",
type: 'image'
})
if (res.status === 0) {
if (num === 0) {
iDCardImage.value.front = res.data.ori_url
} else if (num === 1) {
iDCardImage.value.back = res.data.ori_url
}
await cardFace(res.data.ori_url, num)
}
}
const compareDate=(givenDate)=> {
const inputDate = dayjs(givenDate);
const now = dayjs();
if (inputDate.isBefore(now)) {
return '证件已到期,请尽快更新,否则将影响部分功能使用!';
} else if (inputDate.isBefore(now.add(3, 'month'))) {
return '证件即将到期,请尽快更新,否则将影响部分功能使用!';
} else {
return ''
}
}
const cardFace = async (img, num) => {
const res = await scan_id_card({
idCardUrl: img,
Side: num + 1
})
if (res.status === 0) {
if (res.data.iDNum) {
idCardInfo.value=res.data
}else if (res.data.expirationDate || res.data.issueDate) {
idCardInfo.value.expirationDate=res.data.expirationDate
idCardInfo.value.issueDate=res.data.issueDate
}
}else if (res.status === 1) {
iDCardImage.value.front=''
iDCardImage.value.back=''
}
}
</script>
<template>
<div class="one-content">
<div class="content2">
<van-uploader :after-read="(e)=>{afterRead(e,0)}">
<div class="wrap1">
<div class="wrap1_1">
<div class="wrap1_1_1">
<img :src="iDCardImage.front || defaultImage1" alt="">
</div>
<div class="wrap1_1_2" v-if="iDCardImage.front">更换</div>
</div>
<div class="wrap1_2">上传身份证人像面</div>
</div>
</van-uploader>
</div>
<div class="content3">
<van-uploader :after-read="(e)=>{afterRead(e,1)}">
<div class="wrap1">
<div class="wrap1_1">
<div class="wrap1_1_1">
<img :src="iDCardImage.back || defaultImage1" alt="">
</div>
<div class="wrap1_1_2" v-if="iDCardImage.back">更换</div>
</div>
<div class="wrap1_2">上传身份证国徽面</div>
</div>
</van-uploader>
</div>
<div class="content4" v-if="iDCardImage.front&&iDCardImage.back">
<div class="wrap1">
<div class="wrap1_1">
<div class="wrap1_1_1">姓名</div>
<div class="wrap1_1_2">{{ idCardInfo.realName }}</div>
</div>
</div>
<div class="wrap1">
<div class="wrap1_1">
<div class="wrap1_1_1">性别</div>
<div class="wrap1_1_2">{{idCardInfo.sex}}</div>
</div>
</div>
<div class="wrap1">
<div class="wrap1_1">
<div class="wrap1_1_1">身份证号码</div>
<div class="wrap1_1_2">{{idCardInfo.iDNum}}</div>
</div>
</div>
<div class="wrap1">
<div class="wrap1_1">
<div class="wrap1_1_1">有效日期</div>
<div class="wrap1_1_2">{{idCardInfo.issueDate?dayjs(idCardInfo.issueDate).format('YYYY年MM月DD日'):''}}-{{idCardInfo.expirationDate?dayjs(idCardInfo.expirationDate).format('YYYY年MM月DD日'):''}}</div>
</div>
</div>
</div>
<div class="content5">*自动识别内容请仔细核对</div>
<div class="content6" v-if="iDCardImage.front&&iDCardImage.back&&compareDate(idCardInfo.expirationDate)">{{compareDate(idCardInfo.expirationDate)}}</div>
</div>
</template>
<style scoped lang="scss">
.content6 {
margin-top: 5px;
width: 100%;
height: 46px;
background-color: #E74747;
color: #fff;
font-size: 12px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 10px;
}
.content5 {
text-align: right;
font-size: 10px;
color: #FFFFFF;
margin-top: 8px;
}
.content4 {
margin-top: 20px;
background-color: #fff;
overflow: hidden;
border-radius: 12px;
.wrap1 {
padding-left: 14px;
padding-right: 14px;
&:last-child .wrap1_1 {
border-bottom: none;
}
.wrap1_1 {
padding-top: 14px;
padding-bottom: 14px;
border-bottom: #BBC5E0 solid 1px;
display: flex;
.wrap1_1_2 {
padding-left: 10px;
color: #24437E;
font-size: 12px;
}
.wrap1_1_1 {
flex-shrink: 0;
display: flex;
align-items: center;
border-right: #BBC5E0 solid 1px;
width: 92px;
font-size: 12px;
color: #000;
padding-left: 10px;
}
}
}
}
.content3 {
.wrap1 {
width: 332px;
height: 220px;
background-color: #fff;
border-radius: 10px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.wrap1_2 {
margin-top: 3px;
color: #2159C4;
font-size: 12px;
}
.wrap1_1 {
width: 293px;
height: 170px;
position: relative;
.wrap1_1_2 {
font-size: 14px;
display: flex;
justify-content: center;
align-items: center;
color: white;
background-color: #2159C4;
width: 48px;
height: 32px;
border-radius: 20px;
position: absolute;
bottom: 12px;
right: 12px;
}
.wrap1_1_1 {
img {
width: 293px;
height: 170px;
}
}
}
}
}
.content2 {
margin-bottom: 20px;
.wrap1 {
width: 332px;
height: 220px;
background-color: #fff;
border-radius: 10px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.wrap1_2 {
margin-top: 3px;
color: #2159C4;
font-size: 12px;
}
.wrap1_1 {
width: 293px;
height: 170px;
position: relative;
.wrap1_1_2 {
font-size: 14px;
display: flex;
justify-content: center;
align-items: center;
color: white;
background-color: #2159C4;
width: 48px;
height: 32px;
border-radius: 20px;
position: absolute;
bottom: 12px;
right: 12px;
}
.wrap1_1_1 {
img {
width: 293px;
height: 170px;
}
}
}
}
}
</style>