Files
bbq/src/app/routes/usercenter/components/driver/add-driver/add-driver.component.ts
wangshiming 6857f9a9da fix bug
2022-02-16 09:49:36 +08:00

621 lines
20 KiB
TypeScript
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.

import { Component, OnInit, ViewChild } from '@angular/core';
import { apiConf } from '@conf/api.conf';
import { cacheConf } from '@conf/cache.conf';
import { SFComponent, SFUISchema, SFSchema, SFUploadWidgetSchema, SFDateWidgetSchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { EACacheService, EAEnvironmentService } from '@shared';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { NzUploadFile } from 'ng-zorro-antd/upload';
import { Observable, Observer, of } from 'rxjs';
import { map } from 'rxjs/operators';
import { UsermanageService } from '../../../services/usercenter.service';
@Component({
selector: 'app-car-add-driver',
templateUrl: './add-driver.component.html',
styleUrls: ['./add-driver.component.less']
})
export class CarSettleAddDriverComponent implements OnInit {
@ViewChild('sf', { static: false }) sf!: SFComponent;
@ViewChild('sf1', { static: false }) sf1!: SFComponent;
@ViewChild('sf2', { static: false }) sf2!: SFComponent;
record: any = {};
i: any;
ui: SFUISchema = {};
schema: SFSchema = {};
schema1: SFSchema = {};
schema2: SFSchema = {};
showCardFlag = false;
showJopFlag = false;
detailData: any = {
identityInfoDTO: {},
userDriverLicenseDTO: {},
userPracticeSeniorityDTO: {}
};
companyData: any = {};
constructor(
private modal: NzModalRef,
public service: UsermanageService,
private envSrv: EAEnvironmentService,
private eaCacheSrv: EACacheService,
) { }
ngOnInit(): void {
this.companyData = this.eaCacheSrv.get(cacheConf.env)
this.initSF()
}
initSF() {
this.schema = {
properties: {
titleA: {
title: '司机信息(必填)',
type: 'string',
ui: {
widget: 'text',
},
default: '照片上传后会自动识别文字并填充下列内容栏'
},
mobile: {
title: '手机号',
type: 'string',
format: 'mobile',
maxLength: 11,
ui: {
widget: '',
},
},
showName: {
title: '身份证照片',
type: 'string',
readOnly: true,
ui: {
widget: 'textarea',
borderless:true,
showRequired: true,
},
default: '请上传身份证原件的高清照片,若上传复印件,则需加盖公司印章及法人签字;上传后系统会自动识别并填写',
},
tipsA: {
title: '',
type: 'string',
ui: {
widget: 'custom',
offsetControl: 6,
},
},
certificatePhotoFrontWatermark: {
type: 'string',
title: '',
ui: {
offsetControl: 6,
action: apiConf.fileUpload,
fileType: 'image/png,image/jpeg,image/jpg,image/gif',
limit: 1,
limitFileCount: 1,
resReName: 'data.fullFileWatermarkPath',
urlReName: 'data.fullFileWatermarkPath',
widget: 'upload',
descriptionI18n: '图片支持jpg、jpeg、png、gif格式大小不超过2M',
data: {
appId: this.envSrv.env.appId,
},
name: 'multipartFile',
multiple: false,
listType: 'picture-card',
change: (args: any) => {
if (args.type === 'success') {
console.log(args.file.response.data.fullFilePath)
this.detailData.certificatePhotoFront = args.file.response.data.fullFilePath
this.checkIdCard(args.file.response.data.fullFilePath, 'front', 0);
}
},
beforeUpload: (file: any, _fileList: any) => {
return new Observable((observer: Observer<boolean>) => {
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.service.msgSrv.warning('图片大小超过2M!');
observer.complete();
return;
}
observer.next(isLt2M);
observer.complete();
});
},
// previewFile: (file: NzUploadFile) => of(file.url),
}
},
tipsB: {
title: '',
type: 'string',
ui: {
widget: 'custom',
offsetControl: 6,
},
},
certificatePhotoBackWatermark: {
type: 'string',
title: '',
ui: {
offsetControl: 6,
action: apiConf.fileUpload,
fileType: 'image/png,image/jpeg,image/jpg,image/gif',
limit: 1,
limitFileCount: 1,
resReName: 'data.fullFileWatermarkPath',
urlReName: 'data.fullFileWatermarkPath',
widget: 'upload',
descriptionI18n: '图片支持jpg、jpeg、png、gif格式大小不超过2M',
data: {
appId: this.envSrv.env.appId,
},
name: 'multipartFile',
multiple: false,
listType: 'picture-card',
change: (args: any) => {
if (args.type === 'success') {
this.detailData.certificatePhotoBack = args.file.response.data.fullFilePath
this.checkIdCard(args.file.response.data.fullFilePath, 'back', 0);
}
},
beforeUpload: (file: any, _fileList: any) => {
return new Observable((observer: Observer<boolean>) => {
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.service.msgSrv.warning('图片大小超过2M!');
observer.complete();
return;
}
observer.next(isLt2M);
observer.complete();
});
},
// previewFile: (file: NzUploadFile) => of(file.url),
}
},
name: {
title: '姓名',
type: 'string',
maxLength: 32,
ui: {
widget: '',
placeholder: '请输入姓名',
},
},
certificateNumber: {
title: '身份证号',
type: 'string',
format: 'id-card',
minLength: 1,
maxLength: 18,
ui: {
widget: '',
placeholder: '请输入法定代表人证件号',
errors: {
required: '请输入18位身份证号码',
},
},
},
bankCardNo: {
title: '银行卡号',
type: 'string',
maxLength: 18,
ui: {
widget: '',
placeholder: '请输入银行卡号',
// change: (val: any) =>{
// const value = val.replace(/\D/g,'')
// this.sf.setValue('/bankCardNo', value)
// },
},
default: ''
},
bankName: {
title: '开户行',
type: 'string',
ui: {
widget: '',
},
default: ''
},
},
required: [
'certificatePhotoFrontWatermark',
'certificatePhotoBackWatermark',
'name',
'certificateNumber',
'bankCardNo'
],
};
this.schema1 = {
properties: {
titleB: {
title: '驾驶证信息(必填)',
type: 'string',
ui: {
widget: 'text',
},
default: '照片上传后会自动识别文字并填充下列内容栏'
},
certificatePhotoWatermark: {
type: 'string',
title: '驾驶证照片',
ui: {
action: apiConf.fileUpload,
fileType: 'image/png,image/jpeg,image/jpg,image/gif',
limit: 1,
limitFileCount: 1,
resReName: 'data.fullFileWatermarkPath',
urlReName: 'data.fullFileWatermarkPath',
widget: 'upload',
descriptionI18n: '请上传驾驶证照片支持JPG、PNG格式文件小于5M。照片信息缺失、拼凑、过度PS、模糊不清都不会通过审核。',
data: {
appId: this.envSrv.env.appId,
},
name: 'multipartFile',
multiple: false,
listType: 'picture-card',
change: (args: any) => {
if (args.type === 'success') {
this.detailData.userDriverLicenseDTO.certificatePhoto = args.file.response.data.fullFilePath
this.checkDriverCard(args.file.response.data.fullFilePath, 'front', 0);
} else {
this.detailData.userDriverLicenseDTO.certificatePhoto = ''
}
},
beforeUpload: (file: any, _fileList: any) => {
return new Observable((observer: Observer<boolean>) => {
const isLt4M = file.size / 1024 / 1024 < 4;
if (!isLt4M) {
this.service.msgSrv.warning('图片大小超过4M!');
observer.complete();
return;
}
observer.next(isLt4M);
observer.complete();
});
},
// previewFile: (file: NzUploadFile) => of(file.url),
}
},
licenseNo: {
title: '驾驶证号',
type: 'string',
ui: {
// widget: 'text',
placeholder: '请输入',
},
// default: this.ar.snapshot.queryParams.licenseNo
},
driverModel: {
title: '准驾车型',
type: 'string',
ui: {
widget: 'select',
mode: 'multiple',
containsAllLabel: false,
placeholder: '请选择准驾车型',
asyncData: () =>
this.service.request(this.service.$api_getDictValue, { dictKey: 'driverModel' }).pipe(
map((data) => {
return data.map((m: any) => {
return { label: m.label, value: m.label };
});
}),
),
},
},
validStartTime: {
title: '有效期起',
type: 'string',
ui: {
widget: 'date',
format: 'yyyy-MM-dd',
placeholder: '请选择',
errors: {
required: '请选择起始日期',
},
change: (i) => { },
} as SFDateWidgetSchema,
},
validEndTime: {
title: '有效期止',
type: 'string',
ui: {
widget: 'date',
format: 'yyyy-MM-dd',
placeholder: '请选择',
errors: {
required: '请选择终止日期',
},
change: (i) => { },
} as SFDateWidgetSchema,
},
signingOrganization: {
title: '签发机关',
type: 'string',
maxLength: 30,
ui: {
// widget: this.detailData.commitFlag !== 0 ? 'text' : '',
placeholder: '请输入',
},
},
},
required: [
'certificatePhotoWatermark',
'licenseNo',
'driverModel',
'validStartTime',
'validEndTime',
],
};
this.schema2 = {
properties: {
titleC: {
title: '从业资格证(选填)',
type: 'string',
ui: {
widget: 'text',
},
default: '照片上传后会自动识别文字并填充下列内容栏',
},
certificatePhotoWatermark: {
type: 'string',
title: '',
ui: {
offsetControl: 6,
action: apiConf.fileUpload,
fileType: 'image/png,image/jpeg,image/jpg,image/gif',
limit: 1,
limitFileCount: 1,
resReName: 'data.fullFileWatermarkPath',
urlReName: 'data.fullFileWatermarkPath',
widget: 'upload',
descriptionI18n: '图片支持jpg、jpeg、png、gif格式大小不超过5M',
data: {
appId: this.envSrv.env.appId,
},
name: 'multipartFile',
multiple: false,
listType: 'picture-card',
change: (args: any) => {
if (args.type === 'success') {
this.detailData.userPracticeSeniorityDTO.certificatePhoto = args.file.response.data.fullFilePath
this.checkQualificationCertificate(args.file.response.data.fullFilePath);
} else {
this.detailData.userPracticeSeniorityDTO.certificatePhoto = ''
}
},
beforeUpload: (file: any, _fileList: any) => {
return new Observable((observer: Observer<boolean>) => {
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.service.msgSrv.warning('图片大小超过2M!');
observer.complete();
return;
}
observer.next(isLt2M);
observer.complete();
});
},
// previewFile: (file: NzUploadFile) => of(file.url),
}
},
licenseNo: {
title: '从业资格证号',
type: 'string',
maxLength: 30,
ui: {
// widget: this.detailData.commitFlag !== 0 ? 'text' : '',
placeholder: '请输入',
},
},
regionCode: {
title: '签发省份',
type: 'string',
ui: {
widget: 'select',
placeholder: '请选择',
asyncData: () => this.getProvinceData(),
} as SFDateWidgetSchema,
},
validStartTime: {
title: '发证日期',
type: 'string',
ui: {
widget: 'date',
format: 'yyyy-MM-dd',
placeholder: '请选择',
errors: {
required: '请选择起始日期',
},
change: (i) => { },
} as SFDateWidgetSchema,
},
validEndTime: {
title: '有效期止',
type: 'string',
ui: {
widget: 'date',
format: 'yyyy-MM-dd',
placeholder: '请选择',
errors: {
required: '请选择终止日期',
},
change: (i) => { },
} as SFDateWidgetSchema,
},
},
required: [
],
};
this.ui = {
'*': {
spanLabelFixed: 180,
grid: { span: 24 },
width: 700,
},
$title1: {
spanLabelFixed: 0,
},
$title2: {
spanLabelFixed: 0,
},
$title3: {
spanLabelFixed: 0,
},
$title4: {
spanLabelFixed: 0,
},
$enterpriseRegistrationTime: {
width: 680,
},
$operatingEndTime: {
grid: { span: 9 },
},
$dateType: {
grid: { span: 4 },
},
$validEndTime: {
grid: { span: 9 },
},
$dateType01: {
grid: { span: 4 },
},
$registrationCapital: {
grid: { span: 12 },
},
$unit: {
spanLabelFixed: 20,
grid: { span: 3 },
},
};
}
getProvinceData() {
return this.service.request(this.service.$api_getRegionByCode, { regionCode: '' }).pipe(
map(res => {
const result: any = []
if (res) {
res.map((m: any) => {
const item = { label: m.name, value: m.regionCode }
result.push(item)
});
}
return result
})
);
}
checkIdCard(imgurl: any, side: any, type: any) {
// 识别身份证 参数side0-正面、1-背面type0-申请人身份证1-法定代表人身份证
const params = {
idCardUrl: imgurl,
side,
};
this.service.request(this.service.$api_checkIdCard, params).subscribe((res) => {
if (res) {
if (type === 0) {
// 法定代表人身份证
if (side === 'front') {
// 正面
this.sf.setValue('/name', res.name);
this.sf.setValue('/certificateNumber', res.number);
}
}
}
});
}
checkQualificationCertificate(imgurl: any) {
// 识别从业资格证 参数side0-正面、1-背面type0-申请人身份证1-法定代表人身份证
const params = {
qualificationCertificateUrl: imgurl,
};
this.service.request(this.service.$api_recognizeQualificationCertificate, params).subscribe((res) => {
if (res) {
this.sf.setValue('/licenseNo', res.continuingEducationInfo);
//this.sf.setValue('/validStartTime', res.continuingEducationInfo);
}
});
}
checkDriverCard(imgurl: any, side: any, type: any) {
// 识别身份证 参数side0-正面、1-背面type0-申请人身份证1-法定代表人身份证
const params = {
driverLicenseUrl: imgurl,
side,
};
this.service.request(this.service.$api_recognizeDriverLicense, params).subscribe((res) => {
if (res) {
if (type === 0) {
// 法定代表人身份证
if (side === 'front') {
// 正面
this.sf1.setValue('/licenseNo', res.number);
this.sf1.setValue('/driverModel', [(res.classType).toUpperCase()]);
this.sf1.setValue('/validStartTime', res.validFrom);
this.sf1.setValue('/validEndTime', res.validTo);
this.sf1.setValue('/signingOrganization', res.issuingAuthority);
}
}
}
});
}
close(): void {
this.modal.destroy();
}
showExample(){
this.showCardFlag = !this.showCardFlag
}
showJopExample(){
this.showJopFlag = !this.showJopFlag
}
submitForm(){
const items: any = this.sf.value
items.certificatePhotoFrontWatermark = this.sf.value?.certificatePhotoFrontWatermark.data.fullFilePath
items.certificatePhotoBackWatermark = this.sf.value?.certificatePhotoBackWatermark.data.fullFilePath
const items2: any = this.sf1.value
items2.certificatePhotoWatermark = this.sf1.value?.certificatePhotoWatermark.data.fullFilePath
const items3: any = this.sf2.value
items3.certificatePhotoWatermark = this.sf2.value?.certificatePhotoWatermark.data.fullFilePath
const params:any = {
source: 2,
mobile: this.sf.value.mobile,
bankCardNo: this.sf.value.bankCardNo,
bankName: this.sf.value.bankName,
identityInfoDTO:{
...items,
certificatePhotoFront: this.detailData.certificatePhotoFront,
certificatePhotoBack: this.detailData.certificatePhotoBack,
},
userDriverLicenseDTO: {
...items2,
certificatePhoto: this.detailData.userDriverLicenseDTO.certificatePhoto,
},
userPracticeSeniorityDTO: {
...items3,
certificatePhoto: this.detailData.userPracticeSeniorityDTO.certificatePhoto,
},
};
if(params.userPracticeSeniorityDTO.certificatePhoto === '' || params.userPracticeSeniorityDTO.certificatePhotoWatermark === '') {
delete params.userPracticeSeniorityDTO.certificatePhotoWatermark
delete params.userPracticeSeniorityDTO.certificatePhoto
}
params.userDriverLicenseDTO.driverModel = params.userDriverLicenseDTO.driverModel.join(',')
delete params.identityInfoDTO.showName;
delete params.identityInfoDTO.titleA;
delete params.userDriverLicenseDTO.titleB;
delete params.userPracticeSeniorityDTO.titleC;
delete params.userDriverLicenseDTO.tipsA;
delete params.userPracticeSeniorityDTO.tipsC;
if(JSON.stringify(params.userPracticeSeniorityDTO) === '{}') {
params.userPracticeSeniorityDTO = null
}
this.service.request(this.service.$api_enterpriseVehicleSave, params).subscribe(res => {
if(res){
this.service.msgSrv.success('添加成功')
this.modal.close(true)
}
})
}
}