Files
supplier-dispatch-h5/src/views/index/driverAdd.vue
2024-05-15 20:04:49 +08:00

455 lines
14 KiB
Vue

<template>
<div class="wrap driverAdd">
<div class="navBar">
<van-nav-bar
:title="id ? '修改司机信息' : '添加司机'"
left-arrow
left-arrow-color="#FFFFFF"
:border="false"
:fixed="true"
:safe-area-inset-top="true"
@click-left="h5GoBack"
/>
</div>
<div class="itemContent">
<div class="titleType">
<img class="startImg" src="@/assets/start.png" />
<span>身份证正面</span>
</div>
<van-uploader
v-model="identityCardFrontList"
:after-read="identityCardFrontHandler"
:max-size="5 * 1024 * 1024"
max-count="1"
:preview-size="54"
accept="image "
/>
</div>
<div class="lineBot"></div>
<div class="itemContent">
<div class="titleType">
<img class="startImg" src="@/assets/start.png" />
<span>身份证反面</span>
</div>
<van-uploader
v-model="identityCardContraryList"
:after-read="identityCardBackHandler"
max-count="1"
:preview-size="54"
accept="image "
/>
</div>
<div class="lineBot"></div>
<div class="itemContent">
<div class="titleType">
<img class="startImg" src="@/assets/start.png" />
<span>驾驶证主页</span>
</div>
<van-uploader
v-model="drivingLicenceFrontList"
:after-read="drivingLicenceFrontHandler"
max-count="1"
:max-size="5 * 1024 * 1024"
:preview-size="54"
accept="image "
/>
</div>
<div class="lineBot"></div>
<div class="itemContent">
<div class="titleType">
<img class="startImg" src="@/assets/start.png" />
<span>驾驶证副页</span>
</div>
<van-uploader
v-model="drivingLicenceContraryList"
:after-read="drivingLicenceContraryHandler"
max-count="1"
:preview-size="54"
accept="image "
/>
</div>
<div class="lineBot"></div>
<div class="itemContent">
<div class="titleType">
<span>头像</span>
</div>
<van-uploader
v-model="iconList"
:after-read="iconListHandler"
max-count="1"
:preview-size="54"
accept="image "
/>
</div>
<div class="lineBot"></div>
<!-- :disabled="supplierType ==1 ? true:false"-->
<cell-group label="司机姓名" placeholder="司机姓名" v-model="driverName" disabled />
<cell-group label="手机号码" v-model="driverPhone" placeholder="手机号码" />
<cell-group label="身份证号" v-model="identityCardNumber" placeholder="身份证号" disabled />
<div class="itemContent">
<div class="titleType">
<img class="startImg" src="@/assets/start.png" />
<span>准驾车型</span>
</div>
<select id="mySelect" class="mySelect" v-model="drivingModel" disabled >
<option value="A1">A1</option>
<option value="A2">A2</option>
<option value="A3">A3</option>
<option value="B1">B1</option>
<option value="B2">B2</option>
<option value="C1">C1</option>
<option value="C2">C2</option>
</select>
</div>
<div class="lineBot"></div>
<div class="itemContent">
<div class="titleType">
<img class="startImg" src="@/assets/start.png" />
<span>司机状态</span>
</div>
<div class="isJoin">
<van-radio-group v-model="states" @change="isUse" class="joinWrap">
<van-radio :name="1" style="margin-right: 26px" class="item">
启用
<img
slot="icon"
slot-scope="props"
:src="props.checked ? activeIcon : inactiveIcon"
>
</van-radio>
<van-radio :name="0" class="item">
停用
<img
slot="icon"
slot-scope="props"
:src="props.checked ? activeIcon : inactiveIcon"
>
</van-radio>
</van-radio-group>
</div>
</div>
<div class="lineBot"></div>
<two-common-btn class="btn" @cancelClick="h5GoBack" @submitClick="submitBtn" />
</div>
</template>
<script>
import {myMixins} from "@/utils/myMixins"
import {saveDriver, uploadImage, ocrHandler} from "@/api/mine"
import TwoCommonBtn from "@/components/twoBtnCommon.vue"
import CellGroup from "@/components/cellGroup.vue"
import {formatDate1} from "@/utils/common"
export default {
name: "driverAdd",
mixins:[myMixins],
data(){
return{
id:'',
driverName:"",
driverPhone:"",
identityCardNumber:"",
drivingModel:'',
states:'',
activeIcon: require('@/assets/check.png'),
inactiveIcon: require('@/assets/uncheck.png'),
supplierType:'',
createTime:'',
identityCardFront: '', // 身份证正面
identityCardFrontList: [], // 身份证正面 列表
identityCardContrary: '', // 身份证反面
identityCardContraryList: [], // 身份证反面 列表
drivingLicenceFront: '', // 驾驶证正面
drivingLicenceFrontList: [], // 驾驶证正面 列表
drivingLicenceContrary: '', // 驾驶证反面
drivingLicenceContraryList: [], // 驾驶证反面 列表
icon: '',
iconList: [],
driverInfo: {},
drivingLicenceName: '',
idCardAuthority:'',
idCardValidStartTime:'',
idCardValidEndTime:'',
}
},
mounted() {
this.id = this.$route.params?.id;
this.driverName = this.$route.params?.name;
this.driverPhone = this.$route.params?.phone;
this.drivingModel = this.$route.params?.drivingModel;
this.identityCardNumber = this.$route.params?.identityCardNumber;
this.states = this.$route.params?.states;
this.supplierType=this.$route.params?.supplierType;
this.createTime=this.$route.params?.createTime;
this.driverInfo.drivingBeginDate = this.$route.params?.drivingBeginDate;
this.drivingLicenceContrary = this.$route.params?.drivingLicenceContrary;
this.drivingLicenceFront = this.$route.params?.drivingLicenceFront;
this.driverInfo.drivingLicenceValidityDate = this.$route.params?.drivingLicenceValidityDate;
this.icon = this.$route.params?.icon;
this.identityCardContrary = this.$route.params?.identityCardContrary;
this.identityCardFront = this.$route.params?.identityCardFront;
this.driverInfo.lssueDate = this.$route.params?.lssueDate;
this.drivingLicenceName = this.$route.params?.drivingLicenceName;
if( this.identityCardFront ) {
this.identityCardFrontList = [{ url : this.identityCardFront }];
}
if( this.identityCardContrary ) {
this.identityCardContraryList = [{ url : this.identityCardContrary }];
}
if( this.drivingLicenceFront ) {
this.drivingLicenceFrontList = [{ url : this.drivingLicenceFront }];
}
if( this.drivingLicenceContrary ) {
this.drivingLicenceContraryList = [{ url : this.drivingLicenceContrary }];
}
if( this.icon ) {
this.iconList = [{ url : this.icon }];
}
const selectElement = document.getElementById('mySelect');
selectElement.addEventListener('change', function() {
const selectedValue = selectElement.value;
this.drivingModel=selectedValue
});
},
methods:{
isUse(e){
this.states=e
},
async identityCardFrontHandler(file) { // 上传身份证正面照片
const formData = new FormData();
formData.append("file" , file.file);
let res = await uploadImage(formData)
this.identityCardFront = res.data;
await this.idCardOcrHandler();
},
async identityCardBackHandler(file) { // 上传身份证反面照片
const formData = new FormData();
formData.append("file" , file.file);
let res = await uploadImage(formData)
this.identityCardContrary = res.data;
await this.idCardBackOcrHandler();
},
async drivingLicenceFrontHandler(file) { // 上传驾驶证主页
const formData = new FormData();
formData.append("file" , file.file);
let res = await uploadImage(formData)
this.drivingLicenceFront = res.data;
await this.drivingLicenceOcrHandler();
},
async drivingLicenceContraryHandler(file) { // 上传驾驶证副页
const formData = new FormData();
formData.append("file" , file.file);
let res = await uploadImage(formData)
this.drivingLicenceContrary = res.data;
},
async iconListHandler(file) { // 上传头像
const formData = new FormData();
formData.append("file" , file.file);
let res = await uploadImage(formData)
this.icon = res.data;
},
async idCardOcrHandler() { // 身份证正面 ocr识别
this.driverName = '';
this.identityCardNumber = '';
let res = await ocrHandler({
ocrType: 1,
imageUrl: this.identityCardFront,
cardSide: 'FRONT'
})
this.driverName = res?.data?.name;
this.identityCardNumber = res?.data?.idNum;
let aaa=''
if(this.drivingLicenceName){
aaa = this.drivingLicenceName.replace(/[^\u4e00-\u9fff]+/g, '');
}
let bbb=this.driverName.replace(/[^\u4e00-\u9fff]+/g, '');
if( this.drivingLicenceName && aaa != bbb ) {
this.$toast('身份证信息与驾驶证信息不匹配')
}
},
async idCardBackOcrHandler() { // 身份证反面 ocr识别
let res = await ocrHandler({
ocrType: 1,
imageUrl: this.identityCardContrary,
cardSide: 'BACK'
});
this.idCardAuthority=res.data.authority
let date=res.data.validDate.split('-')
this.idCardValidStartTime=formatDate1(date[0]) +' '+ '00:00:00';
if(date[1] == '长期'){
this.idCardValidEndTime='2099/12/12' +' '+ '00:00:00';
}else{
this.idCardValidEndTime=formatDate1(date[1]) +' '+ '00:00:00';
}
console.log("==",this.idCardValidEndTime)
},
async drivingLicenceOcrHandler() { // 驾驶证正面 ocr识别
this.driverInfo.drivingLicenceValidityDate = '';
this.driverInfo.drivingBeginDate = '';
this.driverInfo.lssueDate = '';
this.drivingModel = '';
this.drivingLicenceName = '';
let res = await ocrHandler({
ocrType: 2,
imageUrl: this.drivingLicenceFront,
cardSide: 'FRONT'
});
if( res?.data ) {
this.driverInfo.drivingBeginDate = res?.data?.dateOfFirstIssue || '';
this.driverInfo.lssueDate = res?.data?.dateOfFirstIssue ? (res?.data?.dateOfFirstIssue + ' 00:00:00') : '';
if( res?.data?.endDate.indexOf('长期') != -1 ) {
this.driverInfo.drivingLicenceValidityDate = '2099-01-01';
} else {
this.driverInfo.drivingLicenceValidityDate = res?.data?.endDate;
}
this.drivingModel = res.data?.class_;
this.drivingLicenceName = res.data?.name
let aaa=''
if(this.driverName){
aaa = this.driverName.replace(/[^\u4e00-\u9fff]+/g, '');
}
let bbb = this.drivingLicenceName.replace(/[^\u4e00-\u9fff]+/g, '');
if( this.driverName && bbb != aaa ) {
this.$toast('身份证信息与驾驶证信息不匹配')
}
}
},
async submitBtn(){
if(!this.identityCardFront) {
this.$toast('身份证正面照未上传')
return
}
if(!this.identityCardContrary) {
this.$toast('身份证反面照未上传')
return
}
if(!this.drivingLicenceFront) {
this.$toast('驾驶证首页未上传')
return
}
if(!this.drivingLicenceContrary) {
this.$toast('驾驶证副页未上传')
return
}
let drivingLicenceName=this.drivingLicenceName.replace(/[^\u4e00-\u9fff]+/g, '');
let driverName=this.driverName.replace(/[^\u4e00-\u9fff]+/g, '');
if( drivingLicenceName != driverName ) {
this.$toast('身份证信息与驾驶证信息不匹配')
return
}
if( this.driverInfo.drivingLicenceValidityDate ) {
if(this.driverInfo.drivingLicenceValidityDate && new Date(this.driverInfo.drivingLicenceValidityDate).getTime() < new Date().getTime() ) {
this.$toast('驾驶证已过期')
return
}
} else {
this.$toast('驾驶证信息识别错误,请重新上传')
return
}
await saveDriver({
driverId:this.id ? this.id : '',
driverName:this.driverName ,
driverPhone:this.driverPhone,
identityCardNumber:this.identityCardNumber,
drivingModel:this.drivingModel,
states:Number(this.states),
createTime:this.createTime || '',
identityCardFront: this.identityCardFront,
identityCardContrary: this.identityCardContrary,
drivingLicenceFront: this.drivingLicenceFront,
drivingLicenceContrary: this.drivingLicenceContrary,
icon: this.icon,
drivingLicenceName: this.drivingLicenceName,
idCardAuthority:this.idCardAuthority,
idCardValidStartTime:this.idCardValidStartTime,
idCardValidEndTime:this.idCardValidEndTime,
...this.driverInfo
})
if(this.id){
this.$toast('修改成功')
}else{
this.$toast('添加成功')
}
setTimeout(()=>{
this.$router.back();
},2000)
},
},
components:{
TwoCommonBtn,
CellGroup
}
}
</script>
<style>
.driverAdd .van-field__control:disabled {
color: #323643 !important;
-webkit-text-fill-color: #323643 !important;
}
</style>
<style scoped lang="scss">
@import "@/styles/mixin.scss";
@import "@/styles/common.scss";
.wrap{
@include wh(100%,100%);
box-sizing: border-box;
padding-left: 16px;
padding-bottom: 100px;
overflow-y: auto;
}
.mySelect{
@include fontWeightSize(bold,13px);
width: 44px;
color: #323643;
appearance: none;
padding-right: 16px;
background: url('@/assets/arrow_bot.png') no-repeat right center / 15px 14px;
}
.navBar{
margin-bottom: 46px;
}
.itemContent{
@include flexColBet;
line-height: 56px;
box-sizing: border-box;
padding-right: 25px;
.titleType{
@include fontWeightSize(bold,14px);
color: #323643;
}
.isJoin{
display: flex;
.joinWrap, .item{
@include flexCenter;
}
img{
@include widHeiMar(16px,16px,6px)
}
}
.startImg{
@include widHeiMar(6px,6px,3px);
vertical-align: super;
}
input{
border: none;
text-align: right;
@include fontWeightSize(bold,13px);
opacity: .5;
}
}
.lineBot{
@include wh(100%,1px);
background: #E9E9EA;
opacity: 0.6;
}
.btn{
margin-left: 8px;
width: 91%;
position: fixed;
bottom: 30px;
}
</style>