447 lines
16 KiB
Vue
447 lines
16 KiB
Vue
<template>
|
|
<div class="content">
|
|
<div class="navBar">
|
|
<van-nav-bar
|
|
title="车辆信息认证"
|
|
left-arrow
|
|
left-arrow-color="#FFFFFF"
|
|
:border="false"
|
|
:fixed="true"
|
|
:safe-area-inset-top="true"
|
|
@click-left="goListPage"
|
|
/>
|
|
</div>
|
|
<tip-bar :title="'应国家政策要求:从事货运行业的司机用户,身份证照片、驾驶证信息、行驶证信息、人车合影及承运资质信息必须进行实名认证。'"></tip-bar>
|
|
<div class="titleWrap">
|
|
<div class="natureWrap">
|
|
<span class="title"><span class="star">*</span>业务性质</span>
|
|
<van-radio-group @change="radioChange" v-model="form.businessNature" class="flexWrap">
|
|
<van-radio :name="1">全国跑圈业务</van-radio>
|
|
<van-radio :name="2">固定区域救援业务</van-radio>
|
|
</van-radio-group>
|
|
</div>
|
|
<div class="natureWrap regionWrap" v-if="form.businessNature == 2" >
|
|
<span class="title"><span class="star">*</span>所在地区</span>
|
|
<div class="pickerWrap picker" @click="areaShow = true" >{{regionText}}</div>
|
|
</div>
|
|
</div>
|
|
<photo-item title="上传行驶证" :left-url="form.vehicleLicenseFront || driveFront" :right-url="form.vehicleLicenseBack || driveBack" v-if="type != 'simple'"
|
|
:show="show" @leftImg="vehicleFrontHandler" @rightImg="vehicleBackHandler"></photo-item>
|
|
<photo-item title="上传车辆照片" :left-url="form.vehicleFrontPhoto || carHead" :right-url="form.peopleVehiclePhoto || personCar" v-if="type != 'simple'"
|
|
:show="show" @leftImg="carPhotoHandler" @rightImg="personPhotoHandler"></photo-item>
|
|
<photo-item title="是否有救援责任险/货物运输险" :url-list="form.carrierLiabilityInsurancePhoto" :in-sure="form.hasInsurancePhoto"
|
|
:show="show" @urlList="carrierHandler" @insureHandle="insureHandle"></photo-item>
|
|
<div class="titleWrap">
|
|
<div class="natureWrap">
|
|
<span class="title"><span class="star">*</span>随车小轮个数</span>
|
|
<van-radio-group v-model="form.wheelNum" class="flexWrap">
|
|
<van-radio v-for="item in tyreOptions" :key="item.value" :name="item.value">{{item.name}}</van-radio>
|
|
</van-radio-group>
|
|
</div>
|
|
</div>
|
|
<div class="carInfo" v-if="type != 'simple'">
|
|
<div class="left_wrap title">
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>车牌号</span>
|
|
</div>
|
|
<span class="phone">{{form.licensePlateNumber}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>车架号</span>
|
|
</div>
|
|
<span class="phone">{{form.vinCode}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>车型</span>
|
|
</div>
|
|
<span class="phone">{{form.vehicleType}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>品牌车型</span>
|
|
</div>
|
|
<span class="phone">{{form.vehicleLicenseModel}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>行驶证人</span>
|
|
</div>
|
|
<span class="phone">{{form.vehicleLicenseOwner}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span>检验记录</span>
|
|
</div>
|
|
<span class="phone">{{form.inspectionRecord}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>总质量</span>
|
|
</div>
|
|
<span class="phone">{{form.totalWeight}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>整备质量</span>
|
|
</div>
|
|
<span class="phone">{{form.curbWeight}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>外廓尺寸</span>
|
|
</div>
|
|
<span class="phone">{{form.overallDimension}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star"></span>
|
|
<span>档案编号</span>
|
|
</div>
|
|
<span class="phone">{{form.vehicleLicenseRecordNumber}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star"></span>
|
|
<span>行驶证备注</span>
|
|
</div>
|
|
<span class="phone">{{form.vehicleLicenseRemarks}}</span>
|
|
</div>
|
|
<div class="form_item">
|
|
<div>
|
|
<span class="star">*</span>
|
|
<span>车头照片中的车牌号码</span>
|
|
</div>
|
|
<span class="phone">{{form.carNumber}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<fixed-button @myClick="clickHandler" v-if="showFun()" :noBg="true"></fixed-button>
|
|
<van-popup
|
|
v-model="areaShow"
|
|
position="bottom"
|
|
>
|
|
<van-area title="标题" :area-list="areaList" :columns-num="3" closeable="true" :value="form.areaCode ? String(form.areaCode) : ''"
|
|
@cancel="areaShow = false" @confirm="confirmHandle"/>
|
|
</van-popup>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import fixedButton from "./component/fixedButton";
|
|
import photoItem from "./component/photoItem";
|
|
import tipBar from "./component/tipBar";
|
|
import {ocrRecognize, driverInfoVerify, driverInfoVerifyDetail, infoVerifyProgress} from '@/api/authentication.js'
|
|
import { leftCopy } from '@/utils/common.js'
|
|
import { myMixins } from '@/utils/myMixins.js'
|
|
import {areaList} from "@vant/area-data";
|
|
export default {
|
|
name: "carInfoAudit",
|
|
components: {
|
|
tipBar,
|
|
photoItem,
|
|
fixedButton,
|
|
},
|
|
mixins: [myMixins],
|
|
data() {
|
|
return {
|
|
areaList: areaList,
|
|
areaShow:false,
|
|
region: [],
|
|
driveFront: require('@/assets/authentication/carInfo_icon1.png'),
|
|
driveBack: require('@/assets/authentication/carInfo_icon2.png'),
|
|
carHead:require('@/assets/authentication/carInfo_icon3.png'),
|
|
personCar:require('@/assets/authentication/carInfo_icon4.png'),
|
|
liabilityInsurance:require('@/assets/authentication/carInfo_icon5.png'),
|
|
form: {
|
|
vehicleLicenseFront: '', // 行驶证主页照片
|
|
vehicleLicenseBack: '', // 行驶证副页照片
|
|
vehicleLicenseAddress: '', // 行驶证地址
|
|
engineNumber: '', // 行驶证发动机号
|
|
licensePlateNumber: '', // 车牌号
|
|
vinCode: '', // 车架号
|
|
vehicleType: '', // 车型
|
|
vehicleLicenseModel: '', // 行驶证车辆品牌车型
|
|
vehicleLicenseOwner: '', // 行驶证所有人
|
|
inspectionRecord: '', // 检验记录
|
|
totalWeight: '', // 总质量
|
|
curbWeight: '', // 整备质量
|
|
overallDimension: '', // 外廓尺寸
|
|
vehicleLicenseRecordNumber: '', // 行驶证档案编号
|
|
vehicleLicenseRemarks: '', // 行驶证备注
|
|
vehicleFrontPhoto: '', // 车头照片
|
|
carNumber: '', // 车头照片中的车牌号码
|
|
peopleVehiclePhoto: '', // 人车合影照片
|
|
carrierLiabilityInsurancePhoto: [], // 承运人责任险照片,如多张用英文逗号分开
|
|
businessNature:'',
|
|
areaCode:'',
|
|
hasInsurancePhoto:'',
|
|
wheelNum:-1,
|
|
region:[],
|
|
},
|
|
show: undefined,
|
|
type: 'full',
|
|
tyreOptions:[{value:0,name:'0'},{value:2,name:'2'},{value:4,name:'4'}]
|
|
}
|
|
},
|
|
async mounted() {
|
|
// 禁止双击放大
|
|
let lastTouchEnd = 0;
|
|
document.addEventListener('touchend', (event) => {
|
|
const now = Date.now();
|
|
if (now - lastTouchEnd <= 300) {
|
|
event.preventDefault(); // 阻止双击放大
|
|
}
|
|
lastTouchEnd = now;
|
|
}, { passive: false });
|
|
|
|
// if(options?.show) {
|
|
this.show = true
|
|
// }
|
|
if(this.show) {
|
|
await this.getDetail()
|
|
}
|
|
},
|
|
methods: {
|
|
confirmHandle(val){
|
|
this.region=[]
|
|
val?.forEach(item => this.region.push(item.name))
|
|
let code=[]
|
|
val?.forEach(item => code.push(item.code))
|
|
this.form.areaCode=code[code.length - 1]
|
|
this.areaShow=false
|
|
},
|
|
radioChange(){
|
|
if(this.form.businessNature==1){
|
|
this.region=[]
|
|
this.form.areaCode=''
|
|
}
|
|
},
|
|
async getDetail() { // 认证详情
|
|
let res = await driverInfoVerifyDetail( {
|
|
verifyType: 3
|
|
})
|
|
leftCopy(this.form, {...res?.data?.vehicleInfoData})
|
|
console.log("this.form",this.form)
|
|
this.form.carrierLiabilityInsurancePhoto=this.form.carrierLiabilityInsurancePhoto ? res?.data?.vehicleInfoData?.carrierLiabilityInsurancePhoto?.split(',') : []
|
|
if(this.form.businessNature==2){
|
|
this.region=res?.data?.vehicleInfoData?.region
|
|
if(this.region[0].includes('市')){
|
|
this.region?.unshift(this.region[0])
|
|
}
|
|
}else {
|
|
this.region=[]
|
|
}
|
|
},
|
|
async clickHandler() {
|
|
if( this.type != 'simple' ) {
|
|
if(!this.form.businessNature){
|
|
this.$toast('请选择业务性质')
|
|
return
|
|
}
|
|
if(this.form.businessNature==2 && !this.form.areaCode){
|
|
this.$toast('请选择所在地区')
|
|
return
|
|
}
|
|
if(!this.form.vehicleLicenseFront) {
|
|
this.$toast('行驶证主页未上传')
|
|
return
|
|
}
|
|
if(!this.form.licensePlateNumber || !this.form.vehicleType ) {
|
|
this.$toast('行驶证主页信息识别错误')
|
|
return
|
|
}
|
|
if(!this.form.vehicleLicenseBack) {
|
|
this.$toast('行驶证副页未上传')
|
|
return
|
|
}
|
|
if(!this.form.totalWeight) {
|
|
this.$toast('行驶证副页信息识别错误')
|
|
return
|
|
}
|
|
if(!this.form.carNumber) {
|
|
this.$toast('车辆信息识别错误')
|
|
return
|
|
}
|
|
if( !this.form.peopleVehiclePhoto ) {
|
|
this.$toast('人车合影未上传')
|
|
return
|
|
}
|
|
if(this.form.hasInsurancePhoto == -1){
|
|
this.$toast('请选择是否有救援责任险')
|
|
return
|
|
}
|
|
if(this.form.hasInsurancePhoto==1 && this.form.carrierLiabilityInsurancePhoto?.length<=0){
|
|
this.$toast('救援责任险/货物运输险未上传')
|
|
return
|
|
}
|
|
if(this.form.wheelNum==-1){
|
|
this.$toast('请选择随车小轮个数')
|
|
return
|
|
}
|
|
}
|
|
await driverInfoVerify( {
|
|
verifyType: 3,
|
|
type: this.type || 'full',
|
|
...this.form,
|
|
carrierLiabilityInsurancePhoto:this.form.carrierLiabilityInsurancePhoto?.length>0 ? this.form.carrierLiabilityInsurancePhoto?.join(',') : ''
|
|
})
|
|
this.$toast('操作成功')
|
|
await this.getRegisterInfo({
|
|
verifyType: 3
|
|
})
|
|
setTimeout(() => {
|
|
this.goListPage()
|
|
}, 100)
|
|
},
|
|
async getRegisterInfo(data) {
|
|
let res = await infoVerifyProgress( data)
|
|
localStorage.setItem('infoVerify', res?.data?.infoVerify?.code)
|
|
localStorage.setItem('failReason', res?.data?.verifyRemark)
|
|
localStorage.setItem('authIsSuccess', res?.data?.authIsSuccess)
|
|
localStorage.setItem('name', res?.data?.name)
|
|
},
|
|
carrierHandler(data) { // 承运人责任险照片
|
|
console.log("data",data)
|
|
this.form.carrierLiabilityInsurancePhoto = data
|
|
},
|
|
insureHandle(val){
|
|
this.form.hasInsurancePhoto=val
|
|
},
|
|
vehicleFrontInit() {
|
|
this.form.licensePlateNumber = ''
|
|
this.form.vinCode = ''
|
|
this.form.vehicleType = ''
|
|
this.form.vehicleLicenseModel = ''
|
|
this.form.vehicleLicenseOwner = ''
|
|
},
|
|
async vehicleFrontHandler(data) { // 行驶证正面照,及ocr识别
|
|
console.log("vehicleFrontHandler",data)
|
|
await this.vehicleFrontInit()
|
|
this.form.vehicleLicenseFront = data
|
|
let vehicleInfo = await this.orcHandler(this.form.vehicleLicenseFront, 3)
|
|
let tempInfo = vehicleInfo?.data?.data?.face?.data
|
|
this.form.licensePlateNumber = tempInfo.licensePlateNumber
|
|
this.form.vinCode = tempInfo.vinCode
|
|
this.form.vehicleType = tempInfo.vehicleType
|
|
this.form.vehicleLicenseModel = tempInfo.model
|
|
this.form.vehicleLicenseOwner = tempInfo.owner
|
|
this.form.vehicleLicenseAddress = tempInfo.address
|
|
this.form.engineNumber = tempInfo.engineNumber
|
|
},
|
|
vehicleBackInit() {
|
|
this.form.inspectionRecord = ''
|
|
this.form.totalWeight = ''
|
|
this.form.curbWeight = ''
|
|
this.form.overallDimension = ''
|
|
this.form.vehicleLicenseRecordNumber = ''
|
|
this.form.vehicleLicenseRemarks = ''
|
|
},
|
|
async vehicleBackHandler(data) {
|
|
await this.vehicleBackInit()
|
|
this.form.vehicleLicenseBack = data
|
|
let vehicleInfo = await this.orcHandler(this.form.vehicleLicenseBack, 3)
|
|
let tempInfo = vehicleInfo?.data?.data?.back?.data
|
|
this.form.inspectionRecord = tempInfo.inspectionRecord
|
|
this.form.totalWeight = tempInfo.totalWeight
|
|
this.form.curbWeight = tempInfo.curbWeight
|
|
this.form.overallDimension = tempInfo.overallDimension
|
|
this.form.vehicleLicenseRecordNumber = tempInfo.recordNumber
|
|
this.form.vehicleLicenseRemarks = tempInfo.remarks
|
|
},
|
|
async carPhotoHandler(data) { // 车头照
|
|
this.form.carNumber = ''
|
|
this.form.vehicleFrontPhoto = data
|
|
let carInfo = await this.orcHandler(this.form.vehicleFrontPhoto, 6)
|
|
this.form.carNumber = carInfo?.data
|
|
},
|
|
personPhotoHandler(data){ // 人车合影
|
|
this.form.peopleVehiclePhoto = data
|
|
},
|
|
async orcHandler(url, type) { // ocr 识别
|
|
let res = await ocrRecognize( {
|
|
ocrType: type,
|
|
imageUrl: url
|
|
});
|
|
return res;
|
|
},
|
|
goListPage(){
|
|
this.goPage('auditList',{
|
|
token:localStorage.getItem('token')
|
|
})
|
|
},
|
|
},
|
|
computed: {
|
|
regionText() {
|
|
return this.region.length ? `${this.region[0]}/${this.region[1]}/${this.region[2]}` : '请选择所在地区';
|
|
}
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@import "@/styles/common.scss";
|
|
@import "@/styles/infoShow.scss";
|
|
page {
|
|
background: #F4F5F7;
|
|
}
|
|
.navBar{
|
|
margin-bottom: 46px;
|
|
}
|
|
.content {
|
|
padding-bottom: 86px;
|
|
height: 100%;
|
|
overflow-y: auto;
|
|
-webkit-overflow-scrolling: touch; /* 启用iOS惯性滚动 */
|
|
scroll-behavior: smooth; /* 平滑滚动(部分浏览器支持) */
|
|
}
|
|
.carInfo .title {
|
|
width: 100% !important;
|
|
}
|
|
.form_item {
|
|
line-height: 30px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
.carInfo {
|
|
padding-bottom: 86px;
|
|
}
|
|
.star{
|
|
color: red;
|
|
margin-right: 3px;
|
|
}
|
|
.titleWrap{
|
|
margin-bottom: 10px;
|
|
background-color: #FFFFFF;
|
|
padding: 15px 12px 15px 17px;
|
|
.natureWrap{
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
font-size: 13px !important;
|
|
}
|
|
.regionWrap{
|
|
margin-top: 8px;
|
|
}
|
|
.flexWrap{
|
|
display:flex;
|
|
align-items: center;
|
|
::v-deep .van-radio__icon{
|
|
transform: scale(0.8);
|
|
transform-origin: center; /* 保持中心点不变 */
|
|
}
|
|
}
|
|
}
|
|
</style>
|