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) => { 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) => { 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) => { 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) => { 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) { // 识别身份证 参数side:0-正面、1-背面;type:0-申请人身份证,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) { // 识别从业资格证 参数side:0-正面、1-背面;type:0-申请人身份证,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) { // 识别身份证 参数side:0-正面、1-背面;type:0-申请人身份证,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) } }) } }