Files
supplier-dispatch-h5/src/views/rvDriverAuthentication/carInfoAudit.vue
T

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>