fix bug
This commit is contained in:
@ -335,22 +335,26 @@ export class OrderManagementReceiptsAuditComponent implements OnInit {
|
|||||||
{
|
{
|
||||||
text: '通过',
|
text: '通过',
|
||||||
click: _record => this.sign(_record),
|
click: _record => this.sign(_record),
|
||||||
iif: item => item.auditStatus == '1'
|
iif: item => item.auditStatus == '1',
|
||||||
|
acl: { ability: ['ORDER-RECEIPTS-billAuditPassBatch'] },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '生成电子单据',
|
text: '生成电子单据',
|
||||||
click: _record => this.generate(_record, 2),
|
click: _record => this.generate(_record, 2),
|
||||||
iif: item => item.auditStatus == '1'
|
iif: item => item.auditStatus == '1',
|
||||||
|
acl: { ability: ['ORDER-RECEIPTS-generate'] },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '查看凭证',
|
text: '查看凭证',
|
||||||
click: _record => this.generate(_record, 3),
|
click: _record => this.generate(_record, 3),
|
||||||
iif: item => item.auditStatus == '2'
|
iif: item => item.auditStatus == '2',
|
||||||
|
acl: { ability: ['ORDER-RECEIPTS-view'] },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '修改',
|
text: '修改',
|
||||||
click: _record => this.modification(_record),
|
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>
|
</div>
|
||||||
</nz-card>
|
</nz-card>
|
||||||
<nz-card class="content-box">
|
<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(null)"></nz-tab>
|
||||||
<nz-tab nzTitle="待审核" (nzClick)="selectChange(10)"></nz-tab>
|
<nz-tab nzTitle="待审核" (nzClick)="selectChange(10)"></nz-tab>
|
||||||
<nz-tab nzTitle="已审核" (nzClick)="selectChange(20)"></nz-tab>
|
<nz-tab nzTitle="已审核" (nzClick)="selectChange(20)"></nz-tab>
|
||||||
@ -55,4 +55,9 @@
|
|||||||
</se>
|
</se>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</ng-template>
|
||||||
|
<ng-template #extraTemplate>
|
||||||
|
<div>
|
||||||
|
<button nz-button nzType="primary" (click)="add()">添加司机</button>
|
||||||
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
@ -2,10 +2,12 @@ import { Component, OnInit, ViewChild } from '@angular/core';
|
|||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { STColumn, STColumnBadge, STComponent, STData } from '@delon/abc/st';
|
import { STColumn, STColumnBadge, STComponent, STData } from '@delon/abc/st';
|
||||||
import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
|
import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
|
||||||
|
import { ModalHelper } from '@delon/theme';
|
||||||
import { DynamicSettingModalComponent } from '@shared';
|
import { DynamicSettingModalComponent } from '@shared';
|
||||||
import { NzModalService } from 'ng-zorro-antd/modal';
|
import { NzModalService } from 'ng-zorro-antd/modal';
|
||||||
import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component';
|
import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component';
|
||||||
import { UsermanageService } from '../../services/usercenter.service';
|
import { UsermanageService } from '../../services/usercenter.service';
|
||||||
|
import { CarSettleAddDriverComponent } from './add-driver/add-driver.component';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-usercenter-components-driver',
|
selector: 'app-usercenter-components-driver',
|
||||||
styleUrls: ['./driver.component.less'],
|
styleUrls: ['./driver.component.less'],
|
||||||
@ -24,7 +26,7 @@ export class UserCenterComponentsDriverComponent implements OnInit {
|
|||||||
promotersTelephone = '';
|
promotersTelephone = '';
|
||||||
|
|
||||||
resourceStatus: any = 10;
|
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[] {
|
private initST(): STColumn[] {
|
||||||
return [
|
return [
|
||||||
{ title: '司机姓名', className: 'text-center', index: 'name' , width: 150},
|
{ 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_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) {
|
constructor(public injector: Injector, private nzModalService: NzModalService, public eaCacheSrv: EACacheService) {
|
||||||
super(injector,eaCacheSrv);
|
super(injector, eaCacheSrv);
|
||||||
}
|
}
|
||||||
|
|
||||||
showImg(url: any) {
|
showImg(url: any) {
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import { FreightComponentsUserComponent } from './components/freight/user/user.c
|
|||||||
import { UsercenterRoutingModule } from './usercenter-routing.module';
|
import { UsercenterRoutingModule } from './usercenter-routing.module';
|
||||||
import { AuditAdminComponent } from './components/freight/enterprise-audit/audit-admin/audit-admin.component';
|
import { AuditAdminComponent } from './components/freight/enterprise-audit/audit-admin/audit-admin.component';
|
||||||
import { CaptainDetailComponent } from './components/driver/captain/captain-detail/captain-detail.component';
|
import { CaptainDetailComponent } from './components/driver/captain/captain-detail/captain-detail.component';
|
||||||
|
import { CarSettleAddDriverComponent } from './components/driver/add-driver/add-driver.component';
|
||||||
|
|
||||||
const COMPONENTS = [
|
const COMPONENTS = [
|
||||||
FreightComponentsListComponent,
|
FreightComponentsListComponent,
|
||||||
@ -36,7 +37,8 @@ const COMPONENTS = [
|
|||||||
UserCenterComponentsDriverDetailComponent,
|
UserCenterComponentsDriverDetailComponent,
|
||||||
UserCenterComponentsDriverCaptainComponent,
|
UserCenterComponentsDriverCaptainComponent,
|
||||||
CaptainDetailComponent,
|
CaptainDetailComponent,
|
||||||
AuditAdminComponent
|
AuditAdminComponent,
|
||||||
|
CarSettleAddDriverComponent
|
||||||
];
|
];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
|
|||||||
@ -212,6 +212,9 @@ export class VehicleComponentsListComponent implements OnInit {
|
|||||||
false: { text: '空闲', color: 'default' }
|
false: { text: '空闲', color: 'default' }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{ title: '道运证', width: '150px', className: 'text-center', index: 'roadTransportNo' },
|
||||||
|
{ title: '审核人', width: '150px', className: 'text-center', index: 'approvalUserName' },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: '行驶证到期状态',
|
title: '行驶证到期状态',
|
||||||
width: '180px',
|
width: '180px',
|
||||||
|
|||||||
BIN
src/assets/images/drivercard.png
Normal file
BIN
src/assets/images/drivercard.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 50 KiB |
BIN
src/assets/images/driverfront.png
Normal file
BIN
src/assets/images/driverfront.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
src/assets/images/eg01.png
Normal file
BIN
src/assets/images/eg01.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 50 KiB |
BIN
src/assets/images/eg02.png
Normal file
BIN
src/assets/images/eg02.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 51 KiB |
BIN
src/assets/images/jopcard.png
Normal file
BIN
src/assets/images/jopcard.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
Reference in New Issue
Block a user