Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop
This commit is contained in:
		| @ -335,22 +335,26 @@ export class OrderManagementReceiptsAuditComponent implements OnInit { | ||||
|           { | ||||
|             text: '通过', | ||||
|             click: _record => this.sign(_record), | ||||
|             iif: item => item.auditStatus == '1' | ||||
|             iif: item => item.auditStatus == '1', | ||||
|             acl: { ability: ['ORDER-RECEIPTS-billAuditPassBatch'] }, | ||||
|           }, | ||||
|           { | ||||
|             text: '生成电子单据', | ||||
|             click: _record => this.generate(_record, 2), | ||||
|             iif: item => item.auditStatus == '1' | ||||
|             iif: item => item.auditStatus == '1', | ||||
|             acl: { ability: ['ORDER-RECEIPTS-generate'] }, | ||||
|           }, | ||||
|           { | ||||
|             text: '查看凭证', | ||||
|             click: _record => this.generate(_record, 3), | ||||
|             iif: item => item.auditStatus == '2' | ||||
|             iif: item => item.auditStatus == '2', | ||||
|             acl: { ability: ['ORDER-RECEIPTS-view'] }, | ||||
|           }, | ||||
|           { | ||||
|             text: '修改', | ||||
|             click: _record => this.modification(_record), | ||||
|             iif: item => item.auditStatus == '1'  | ||||
|             iif: item => item.auditStatus == '1' , | ||||
|             acl: { ability: ['ORDER-RECEIPTS-updateBillExamine'] }, | ||||
|           }, | ||||
|         ] | ||||
|       } | ||||
|  | ||||
| @ -0,0 +1,48 @@ | ||||
| <div class="modal-header"> | ||||
|     <div class="modal-title">添加司机</div> | ||||
| </div> | ||||
| <!-- <nz-spin *ngIf="!i" class="modal-spin"></nz-spin> --> | ||||
| <div class="sfBox"> | ||||
|     <sf #sf [compact]="true" [ui]="ui" [schema]="schema" [button]="'none'" *ngIf="schema"> | ||||
|         <ng-template sf-template="tipsA" let-me let-ui="ui" let-schema="schema"> | ||||
|             <div class="pr"> | ||||
|                 <dl class="tips"> | ||||
|                     <dt>正面照</dt> | ||||
|                     <dd>示例</dd> | ||||
|                 </dl> | ||||
|                 <div class="pa"><img height="104" src="/assets/images/eg01.png" /></div> | ||||
|             </div> | ||||
|         </ng-template> | ||||
|         <ng-template sf-template="tipsB" let-me let-ui="ui" let-schema="schema"> | ||||
|             <div class="pr"> | ||||
|                 <dl class="tips"> | ||||
|                     <dt>背面照</dt> | ||||
|                     <dd>示例</dd> | ||||
|                 </dl> | ||||
|                 <div class="pa"><img height="104" src="/assets/images/eg02.png" /></div> | ||||
|             </div> | ||||
|         </ng-template> | ||||
|     </sf> | ||||
|     <sf #sf1 [compact]="true" [ui]="ui" [schema]="schema1" [button]="'none'" *ngIf="schema1"> | ||||
|     </sf> | ||||
|     <sf #sf2 [compact]="true" [ui]="ui" [schema]="schema2" [button]="'none'" *ngIf="schema2"> | ||||
|     </sf> | ||||
|     <img class="drivercard" height="104" src="/assets/images/drivercard.png" /> | ||||
|     <img class="jopcard" height="104" src="/assets/images/jopcard.png" /> | ||||
|     <!-- <div class="example" (click)="showExample()"> | ||||
|       查看示例 | ||||
|       <div class="popBox" *ngIf="showCardFlag"> | ||||
|           <img src="https://ng.ant.design/assets/img/logo.svg" alt=""> | ||||
|       </div> | ||||
|   </div> | ||||
|   <div class="example positionSet" (click)="showJopExample()"> | ||||
|       查看示例 | ||||
|       <div class="popBox" *ngIf="showJopFlag"> | ||||
|           <img src="https://ng.ant.design/assets/img/logo.svg" alt=""> | ||||
|       </div> | ||||
|   </div> --> | ||||
| </div> | ||||
| <div class="modal-footer"> | ||||
|     <button nz-button type="button" (click)="close()">关闭</button> | ||||
|     <button nz-button type="button" nzType="primary" (click)="submitForm()" [disabled]="!(sf?.valid && sf1?.valid && sf2?.valid)">确定</button> | ||||
| </div> | ||||
| @ -0,0 +1,51 @@ | ||||
| .sfBox{ | ||||
|   position: relative; | ||||
| } | ||||
| .pr { | ||||
|   position: relative; | ||||
| } | ||||
|  | ||||
| .pa { | ||||
|   position: absolute; | ||||
|   top: 35px; | ||||
|   left: 150px; | ||||
|   img{border: solid 1px #ebf0fb;} | ||||
| } | ||||
|  | ||||
| .tips { | ||||
|   display: flex; | ||||
|   margin-bottom: 0; | ||||
|   color: #333; | ||||
|  | ||||
|   dt { | ||||
|     width: 150px; | ||||
|   } | ||||
|  | ||||
|   dd { | ||||
|     width: 190px; | ||||
|     margin-bottom: 0; | ||||
|     text-align: center; | ||||
|   } | ||||
| } | ||||
| .drivercard{ | ||||
|   position: absolute; | ||||
|   top: 710px; | ||||
|   left: 330px; | ||||
|   border: solid 1px #ebf0fb; | ||||
| } | ||||
| .jopcard{ | ||||
|   position: absolute; | ||||
|   top: 1115px; | ||||
|   left: 330px; | ||||
|   border: solid 1px #ebf0fb; | ||||
| } | ||||
| :host{ | ||||
|   ::ng-deep { | ||||
|   .ant-input-borderless{ | ||||
|       padding: 0; | ||||
|       padding-top: 4px; | ||||
|       color: black; | ||||
|       resize:none; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { CarSettleAddDriverComponent } from './add-driver.component'; | ||||
|  | ||||
| describe('CarSettleAddDriverComponent', () => { | ||||
|   let component: CarSettleAddDriverComponent; | ||||
|   let fixture: ComponentFixture<CarSettleAddDriverComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [ CarSettleAddDriverComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(CarSettleAddDriverComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,608 @@ | ||||
| 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') { | ||||
|                 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) { | ||||
|     // 识别身份证 参数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 params:any = { | ||||
|       source: 2, | ||||
|       mobile: this.sf.value.mobile, | ||||
|       bankCardNo: this.sf.value.bankCardNo, | ||||
|       bankName: this.sf.value.bankName, | ||||
|       identityInfoDTO:{ | ||||
|         ...this.sf.value, | ||||
|         certificatePhotoFront: this.detailData.certificatePhotoFront, | ||||
|         certificatePhotoBack: this.detailData.certificatePhotoBack, | ||||
|       }, | ||||
|       userDriverLicenseDTO: { | ||||
|         ...this.sf1.value, | ||||
|         certificatePhoto: this.detailData.userDriverLicenseDTO.certificatePhoto, | ||||
|       }, | ||||
|       userPracticeSeniorityDTO: { | ||||
|         ...this.sf2.value, | ||||
|         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) | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
| } | ||||
| @ -29,7 +29,7 @@ | ||||
|   </div> | ||||
| </nz-card> | ||||
| <nz-card class="content-box"> | ||||
|   <nz-tabset [nzSelectedIndex]="1"> | ||||
|   <nz-tabset [nzSelectedIndex]="1"  [nzTabBarExtraContent]="extraTemplate"> | ||||
|     <nz-tab nzTitle="全部" (nzClick)="selectChange(null)"></nz-tab> | ||||
|     <nz-tab nzTitle="待审核" (nzClick)="selectChange(10)"></nz-tab> | ||||
|     <nz-tab nzTitle="已审核" (nzClick)="selectChange(20)"></nz-tab> | ||||
| @ -55,4 +55,9 @@ | ||||
|       </se> | ||||
|     </div> | ||||
|   </div> | ||||
| </ng-template> | ||||
| <ng-template #extraTemplate> | ||||
|   <div> | ||||
|     <button nz-button nzType="primary" (click)="add()">添加司机</button> | ||||
|   </div> | ||||
| </ng-template> | ||||
| @ -2,10 +2,12 @@ import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { ActivatedRoute, Router } from '@angular/router'; | ||||
| import { STColumn, STColumnBadge, STComponent, STData } from '@delon/abc/st'; | ||||
| import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; | ||||
| import { ModalHelper } from '@delon/theme'; | ||||
| import { DynamicSettingModalComponent } from '@shared'; | ||||
| import { NzModalService } from 'ng-zorro-antd/modal'; | ||||
| import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component'; | ||||
| import { UsermanageService } from '../../services/usercenter.service'; | ||||
| import { CarSettleAddDriverComponent } from './add-driver/add-driver.component'; | ||||
| @Component({ | ||||
|   selector: 'app-usercenter-components-driver', | ||||
|   styleUrls: ['./driver.component.less'], | ||||
| @ -24,7 +26,7 @@ export class UserCenterComponentsDriverComponent implements OnInit { | ||||
|   promotersTelephone = ''; | ||||
|  | ||||
|   resourceStatus: any = 10; | ||||
|   constructor(public service: UsermanageService, private modal: NzModalService, private router: Router, private ar: ActivatedRoute) {} | ||||
|   constructor(public service: UsermanageService, private modal: NzModalService, private router: Router, private ar: ActivatedRoute,private modalHelper: ModalHelper) {} | ||||
|  | ||||
|   /** | ||||
|    * 查询参数 | ||||
| @ -245,7 +247,12 @@ export class UserCenterComponentsDriverComponent implements OnInit { | ||||
|       } | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   add() { | ||||
|     this.modalHelper.create(CarSettleAddDriverComponent, { size: 900 }).subscribe((res) => { | ||||
|       // this.initData() | ||||
|       console.log(res) | ||||
|     }); | ||||
|   } | ||||
|   private initST(): STColumn[] { | ||||
|     return [ | ||||
|       { title: '司机姓名', className: 'text-center', index: 'name' , width: 150}, | ||||
|  | ||||
| @ -110,8 +110,19 @@ export class UsermanageService extends ShipperBaseService { | ||||
|   // 获取个人刷脸结果 | ||||
|   $api_getFaceFlowQuery = '/api/mdc/pbc/factorsVerify/getFaceFlowQuery'; | ||||
|  | ||||
|   /////////////////// | ||||
|   // 识别身份证 | ||||
|   $api_checkIdCard = '/api/mdc/pbc/hwc/ocr/recognizeIdCard'; | ||||
|   // 从业资格证 | ||||
|   $api_recognizeQualificationCertificate = '/api/mdc/pbc/hwc/ocr/recognizeQualificationCertificate'; | ||||
|   // 驾驶证识别 | ||||
|   $api_recognizeDriverLicense = `/api/mdc/pbc/hwc/ocr/recognizeDriverLicense`; | ||||
|   // 根据地区code查询列表 | ||||
|   $api_getRegionByCode = '/api/mdc/pbc/region/getRegionByCode'; | ||||
|   // 新增熟车 | ||||
|   $api_enterpriseVehicleSave = `/api/mdc/cuc/enterpriseVehicle/save`; | ||||
|   constructor(public injector: Injector, private nzModalService: NzModalService, public eaCacheSrv: EACacheService) { | ||||
|     super(injector,eaCacheSrv); | ||||
|     super(injector, eaCacheSrv); | ||||
|   } | ||||
|  | ||||
|   showImg(url: any) { | ||||
|  | ||||
| @ -22,6 +22,7 @@ import { FreightComponentsUserComponent } from './components/freight/user/user.c | ||||
| import { UsercenterRoutingModule } from './usercenter-routing.module'; | ||||
| import { AuditAdminComponent } from './components/freight/enterprise-audit/audit-admin/audit-admin.component'; | ||||
| import { CaptainDetailComponent } from './components/driver/captain/captain-detail/captain-detail.component'; | ||||
| import { CarSettleAddDriverComponent } from './components/driver/add-driver/add-driver.component'; | ||||
|  | ||||
| const COMPONENTS = [ | ||||
|   FreightComponentsListComponent, | ||||
| @ -36,7 +37,8 @@ const COMPONENTS = [ | ||||
|   UserCenterComponentsDriverDetailComponent, | ||||
|   UserCenterComponentsDriverCaptainComponent, | ||||
|   CaptainDetailComponent, | ||||
|   AuditAdminComponent | ||||
|   AuditAdminComponent, | ||||
|   CarSettleAddDriverComponent | ||||
| ]; | ||||
|  | ||||
| @NgModule({ | ||||
|  | ||||
| @ -212,6 +212,9 @@ export class VehicleComponentsListComponent implements OnInit { | ||||
|           false: { text: '空闲', color: 'default' } | ||||
|         } | ||||
|       }, | ||||
|       { title: '道运证', width: '150px', className: 'text-center', index: 'roadTransportNo' }, | ||||
|       { title: '审核人', width: '150px', className: 'text-center', index: 'approvalUserName' }, | ||||
|  | ||||
|       { | ||||
|         title: '行驶证到期状态', | ||||
|         width: '180px', | ||||
|  | ||||
		Reference in New Issue
	
	Block a user