546 lines
17 KiB
TypeScript
546 lines
17 KiB
TypeScript
import { Component, OnInit, ViewChild } from '@angular/core';
|
||
import { ActivatedRoute, Router } from '@angular/router';
|
||
import { apiConf } from '@conf/api.conf';
|
||
import {
|
||
SFCascaderWidgetSchema,
|
||
SFCheckboxWidgetSchema,
|
||
SFComponent,
|
||
SFDateWidgetSchema,
|
||
SFSchema,
|
||
SFTextareaWidgetSchema,
|
||
SFUISchema,
|
||
SFUploadWidgetSchema
|
||
} from '@delon/form';
|
||
import { NzUploadFile } from 'ng-zorro-antd/upload';
|
||
import { of } from 'rxjs';
|
||
import { SystemService } from '../../../services/system.service';
|
||
|
||
|
||
const IMAGECONFIG = {
|
||
previewFile: (file: NzUploadFile) => of(file.url),
|
||
action: apiConf.waterFileUpload,
|
||
fileType: 'image/png,image/jpeg,image/jpg,image/gif',
|
||
fileSize: 5120,
|
||
limit: 1,
|
||
limitFileCount: 1,
|
||
resReName: 'data.fullFileWatermarkPath',
|
||
urlReName: 'data.fullFileWatermarkPath',
|
||
widget: 'upload',
|
||
name: 'multipartFile',
|
||
multiple: false,
|
||
listType: 'picture-card'
|
||
} as SFUploadWidgetSchema;
|
||
|
||
const DATECONFIG = {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
widget: 'date',
|
||
format: 'yyyy-MM-dd',
|
||
placeholder: '请选择'
|
||
};
|
||
|
||
@Component({
|
||
selector: 'app-network-freight-new-component',
|
||
templateUrl: './new.component.html',
|
||
styleUrls: ['./new.component.less']
|
||
})
|
||
export class NetworkFreightNewComponent implements OnInit {
|
||
@ViewChild('sf', { static: false })
|
||
sf!: SFComponent;
|
||
@ViewChild('sf1', { static: false })
|
||
sf1!: SFComponent;
|
||
schema: SFSchema = this.initOthersSF();
|
||
schema1: SFSchema = this.initBasicInfoSF();
|
||
ui: SFUISchema = {
|
||
'*': {
|
||
spanLabelFixed: 180,
|
||
grid: { span: 24 }
|
||
},
|
||
$title1: {
|
||
spanLabelFixed: 0
|
||
},
|
||
$title99: {
|
||
spanLabelFixed: 0
|
||
},
|
||
$title2: {
|
||
spanLabelFixed: 0
|
||
},
|
||
$registrationCapital: {
|
||
spanLabelFixed: 180,
|
||
grid: { xxl: 13, xl: 18, lg: 22, md: 22 }
|
||
},
|
||
$unit: {
|
||
grid: { xxl: 6, xl: 6, lg: 2, md: 2 }
|
||
},
|
||
$isLoingDate: {
|
||
spanLabelFixed: 100,
|
||
grid: { xxl: 6, xl: 6, lg: 4, md: 6 }
|
||
}
|
||
};
|
||
|
||
constructor(private router: Router, public service: SystemService) {}
|
||
ngOnInit() {}
|
||
|
||
submitForm() {
|
||
if (!this.sf1.valid || !this.sf.valid) {
|
||
this.sf.validator({ emitError: true });
|
||
this.sf1.validator({ emitError: true });
|
||
this.service.msgSrv.warning('请修改填写错误信息');
|
||
return;
|
||
}
|
||
const enterpriseRegistrationTime = new Date(this.sf1.value.enterpriseRegistrationTime);
|
||
const operatingStartTime = new Date(this.sf1.value.operatingStartTime);
|
||
if (enterpriseRegistrationTime.getTime() > operatingStartTime.getTime()) {
|
||
this.service.msgSrv.warning('营业期限不能小于成立日期');
|
||
return;
|
||
}
|
||
if (this.sf1.value.operatingEndTime) {
|
||
const operatingEndTime = new Date(this.sf1.value.operatingEndTime);
|
||
if (operatingStartTime.getTime() > operatingEndTime.getTime()) {
|
||
this.service.msgSrv.warning('营业期限不能小于期限开始日期');
|
||
return;
|
||
}
|
||
}
|
||
const sfVlaue = this.sf1.value;
|
||
const params: any = {};
|
||
Object.assign(
|
||
params,
|
||
{
|
||
...this.sf.value ,
|
||
enterpriseInfoDTO: this.sf1.value
|
||
}
|
||
);
|
||
console.log(params);
|
||
console.log(this.sf.value);
|
||
console.log(this.sf1.value);
|
||
params.enterpriseInfoDTO.enterpriseAddressCode = this.sf1.value?.enterpriseAddressCode?.[2];
|
||
this.service.request(this.service.$api_networkTransporter_save, params).subscribe(res => {
|
||
if (res) {
|
||
this.service.msgSrv.success('网络货运人新增成功');
|
||
this.goBack();
|
||
}
|
||
});
|
||
}
|
||
|
||
/*
|
||
* 根据地区code查询地区列表
|
||
*/
|
||
getRegionDetailByCode(regionCode: any) {
|
||
return this.service.request(this.service.$api_get_region_by_code, { regionCode });
|
||
}
|
||
|
||
// 识别身份证 参数isFront:front-正面、back-背面;type:0-申请人身份证,1-法定代表人身份证
|
||
checkIdCard(imgurl: any, isFront: string, type: number) {
|
||
const params = {
|
||
idCardUrl: imgurl,
|
||
side: isFront
|
||
};
|
||
this.service.request(this.service.$api_ocr_recognize_id_card, params).subscribe(res => {
|
||
if (res) {
|
||
if (type === 1) {
|
||
// 法定代表人证件照
|
||
if (isFront === 'front') {
|
||
// 正面
|
||
if (res.name) {
|
||
this.sf1.setValue('/legalPersonIdentityDTO/name', res.name);
|
||
}
|
||
if (res.number) {
|
||
this.sf1.setValue('/legalPersonIdentityDTO/certificateType', 0);
|
||
this.sf1.setValue('/legalPersonIdentityDTO/certificateNumber', res.number);
|
||
}
|
||
}
|
||
}
|
||
// 企业管理员证件照
|
||
if (type === 0) {
|
||
if (isFront === 'front') {
|
||
// 正面
|
||
if (res.name) {
|
||
this.sf.setValue('/name', res.name);
|
||
}
|
||
if (res.number) {
|
||
this.sf.setValue('/certificateNumber', res.number);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
// 识别营业执照
|
||
checkBusinessLicense(imgurl: any) {
|
||
this.service.request(this.service.$api_ocr_recognize_business_license, { businessLicenseUrl: imgurl }).subscribe(res => {
|
||
if (res) {
|
||
if (res.registrationNumber) {
|
||
this.sf1.setValue('/unifiedSocialCreditCode', res.registrationNumber);
|
||
}
|
||
if (res.name) {
|
||
this.sf1.setValue('/enterpriseName', res.name);
|
||
}
|
||
if (res.addressRegionCodes) {
|
||
this.sf1.setValue('/enterpriseAddressCode', res.addressRegionCodes);
|
||
}
|
||
if (res.address) {
|
||
this.sf1.setValue('/enterpriseAddress', res.address);
|
||
}
|
||
if (res.registeredCapital) {
|
||
this.sf1.setValue('/registrationCapital', res.registeredCapital);
|
||
}
|
||
if (res.foundDate) {
|
||
this.sf1.setValue('/enterpriseRegistrationTime', res.foundDate);
|
||
}
|
||
if (res.businessTermStartDate) {
|
||
this.sf1.setValue('/operatingStartTime', res.businessTermStartDate);
|
||
}
|
||
if (res.businessTermEndDate) {
|
||
this.sf1.setValue('/operatingEndTime', res.businessTermEndDate);
|
||
} else {
|
||
this.sf1.setValue('/isLoingDate', true);
|
||
}
|
||
if (res.businessScope) {
|
||
this.sf1.setValue('/businessScope', res.businessScope);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
goBack() {
|
||
window.history.go(-1);
|
||
}
|
||
|
||
private initBasicInfoSF(): SFSchema {
|
||
return {
|
||
properties: {
|
||
title1: { title: '', type: 'string', ui: { widget: 'custom' } },
|
||
tips: { title: '', type: 'string', ui: { widget: 'custom', offsetControl: 6 } },
|
||
licensePhoto: { title: '', type: 'string', ui: { hidden: true } },
|
||
licensePhotoWatermark: {
|
||
type: 'string',
|
||
title: '营业执照',
|
||
ui: {
|
||
...IMAGECONFIG,
|
||
descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M',
|
||
change: args => {
|
||
if (args.type === 'success') {
|
||
this.sf1.setValue('/licensePhoto', args.fileList[0].response.data.fullFilePath);
|
||
this.checkBusinessLicense(args.fileList[0].response.data.fullFilePath);
|
||
}
|
||
}
|
||
} as SFUploadWidgetSchema
|
||
},
|
||
enterpriseName: {
|
||
title: '公司名称',
|
||
type: 'string',
|
||
minLength: 1,
|
||
maxLength: 100,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
placeholder: '请输入公司名称',
|
||
errors: {
|
||
required: '请输入公司名称'
|
||
}
|
||
}
|
||
},
|
||
unifiedSocialCreditCode: {
|
||
title: '统一社会信用代码',
|
||
type: 'string',
|
||
minLength: 1,
|
||
maxLength: 30,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
optionalHelp:
|
||
'为了企业用户的使用体验,若公司代码即统一社会信用代码已在本应用其他关联平台注册,则此处填写的公司资料将同步更新至对应已注册的平台',
|
||
placeholder: '请输入营业执照上的统一社会信用代码',
|
||
errors: {
|
||
required: '请输入18位公司代码'
|
||
}
|
||
}
|
||
},
|
||
certificateType2: {
|
||
type: 'string',
|
||
title: '行业',
|
||
enum: [
|
||
{ label: '大陆身份证', value: 0 },
|
||
{ label: '港澳居民通行证', value: 1 },
|
||
{ label: '香港居民通行证', value: 2 }
|
||
],
|
||
default: 0,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
widget: 'select'
|
||
}
|
||
},
|
||
enterpriseAddressCode: {
|
||
type: 'number',
|
||
title: '营业执照所在地',
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
widget: 'cascader',
|
||
valueProperty: 'regionCode',
|
||
labelProperty: 'name',
|
||
asyncData: (node: any, index: any) => {
|
||
return new Promise(resolve => {
|
||
this.getRegionDetailByCode(node?.regionCode || '').subscribe(
|
||
res => {
|
||
node.children = res.map((item: any) => ({ ...item, isLeaf: index === 1 }));
|
||
},
|
||
_ => {},
|
||
() => {
|
||
resolve();
|
||
}
|
||
);
|
||
});
|
||
}
|
||
} as SFCascaderWidgetSchema
|
||
},
|
||
enterpriseAddress: {
|
||
title: '营业执照详细地址',
|
||
type: 'string',
|
||
minLength: 1,
|
||
maxLength: 240,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
widget: 'textarea',
|
||
autosize: { minRows: 2, maxRows: 5 },
|
||
placeholder: '请输入营业执照上的完整详细地址',
|
||
errors: {
|
||
required: '请输入营业执照上的完整详细地址'
|
||
}
|
||
} as SFTextareaWidgetSchema
|
||
},
|
||
registrationCapital: {
|
||
title: '注册资本',
|
||
type: 'number',
|
||
minimum: 1,
|
||
maximum: 99999999999999999999,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 22, md: 22 },
|
||
placeholder: '请输入营业执照上的注册资本',
|
||
errors: {
|
||
required: '请输入营业执照上的注册资本'
|
||
},
|
||
precision: 0
|
||
}
|
||
},
|
||
staffNumber: {
|
||
title: '从业人数',
|
||
type: 'number',
|
||
minimum: 1,
|
||
maximum: 99999999999999999999,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 22, md: 22 },
|
||
placeholder: '请输入从业人数',
|
||
errors: {
|
||
required: '请输入从业人数'
|
||
},
|
||
precision: 0
|
||
}
|
||
},
|
||
enterpriseRegistrationTime: {
|
||
title: '成立日期',
|
||
type: 'string',
|
||
ui: {
|
||
...DATECONFIG,
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
errors: {
|
||
required: '请选择开始日期'
|
||
}
|
||
} as SFDateWidgetSchema
|
||
},
|
||
|
||
operatingStartTime: {
|
||
title: '营业期限',
|
||
type: 'string',
|
||
ui: {
|
||
...DATECONFIG,
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
errors: {
|
||
required: '请选择开始日期'
|
||
}
|
||
} as SFDateWidgetSchema
|
||
},
|
||
operatingEndTime: {
|
||
title: '',
|
||
type: 'string',
|
||
ui: {
|
||
...DATECONFIG,
|
||
grid: { xxl: 13, xl: 18, lg: 20, md: 18 },
|
||
errors: {
|
||
required: '请选择截止日期'
|
||
},
|
||
change: i => {
|
||
this.sf1?.setValue('/isLoingDate', false);
|
||
setTimeout(() => {
|
||
console.log(this.sf1.value);
|
||
}, 1000);
|
||
}
|
||
} as SFDateWidgetSchema
|
||
},
|
||
isLoingDate: {
|
||
title: '长期',
|
||
type: 'boolean',
|
||
ui: {
|
||
class: 'input-back',
|
||
widget: 'checkbox',
|
||
change: i => this.sf1?.setValue('/operatingEndTime', null)
|
||
} as SFCheckboxWidgetSchema
|
||
},
|
||
businessScope: {
|
||
title: '经营范围',
|
||
type: 'string',
|
||
minLength: 1,
|
||
maxLength: 500,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
widget: 'textarea',
|
||
autosize: { minRows: 3, maxRows: 5 },
|
||
placeholder: '请输入营业执照上的营经营范围',
|
||
errors: {
|
||
required: '请输入营业执照上的营经营范围'
|
||
}
|
||
} as SFTextareaWidgetSchema
|
||
},
|
||
taxAuthority: {
|
||
title: '税务机关',
|
||
type: 'string',
|
||
minLength: 1,
|
||
maxLength: 30,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
placeholder: '请输入营业执照上的税务机关',
|
||
errors: {
|
||
required: '请输入营业执照上的税务机关'
|
||
}
|
||
}
|
||
},
|
||
taxStatus: {
|
||
title: '纳税状态',
|
||
type: 'string',
|
||
minLength: 1,
|
||
maxLength: 30,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
placeholder: '请输入纳税状态',
|
||
errors: {
|
||
required: '请输入纳税状态'
|
||
}
|
||
}
|
||
},
|
||
|
||
legalPersonIdentityDTO: {
|
||
type: 'object',
|
||
properties: {
|
||
title2: { title: '', type: 'string', ui: { widget: 'custom' } },
|
||
tipsC: { title: '法定代表人证件照', type: 'string', ui: { widget: 'custom' } },
|
||
tipsA: { title: '', type: 'string', ui: { widget: 'custom', offsetControl: 6 } },
|
||
certificatePhotoFrontWatermark: {
|
||
type: 'string',
|
||
title: '',
|
||
ui: {
|
||
...IMAGECONFIG,
|
||
descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M',
|
||
change: args => {
|
||
if (args.type === 'success') {
|
||
this.sf1.setValue('/legalPersonIdentityDTO/certificatePhotoFront', args.fileList[0].response.data.fullFilePath);
|
||
this.checkIdCard(args.fileList[0].response.data.fullFilePath, 'front', 1);
|
||
}
|
||
}
|
||
} as SFUploadWidgetSchema
|
||
},
|
||
tipsB: { title: '', type: 'string', ui: { widget: 'custom', offsetControl: 6 } },
|
||
certificatePhotoFront: { title: '', type: 'string', ui: { hidden: true } },
|
||
certificatePhotoBack: { title: '', type: 'string', ui: { hidden: true } },
|
||
certificatePhotoBackWatermark: {
|
||
type: 'string',
|
||
title: '',
|
||
ui: {
|
||
...IMAGECONFIG,
|
||
descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M',
|
||
change: args => {
|
||
if (args.type === 'success') {
|
||
this.sf1.setValue('/legalPersonIdentityDTO/certificatePhotoBack', args.fileList[0].response.data.fullFilePath);
|
||
this.checkIdCard(args.fileList[0].response.data.fullFilePath, 'back', 1);
|
||
}
|
||
}
|
||
} as SFUploadWidgetSchema
|
||
},
|
||
name: {
|
||
title: '法人姓名',
|
||
type: 'string',
|
||
maxLength: 8,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
placeholder: '请输入法人姓名'
|
||
}
|
||
},
|
||
certificateType: {
|
||
type: 'string',
|
||
title: '法人证件类型',
|
||
enum: [
|
||
{ label: '大陆身份证', value: 0 },
|
||
{ label: '港澳居民通行证', value: 1 },
|
||
{ label: '香港居民通行证', value: 2 }
|
||
],
|
||
default: 0,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
widget: 'select'
|
||
}
|
||
},
|
||
certificateNumber: {
|
||
title: ' 法定代表人证件号',
|
||
type: 'string',
|
||
format: 'id-card',
|
||
minLength: 1,
|
||
maxLength: 18,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
placeholder: '请输入法定代表人证件号'
|
||
}
|
||
}
|
||
},
|
||
required: ['certificatePhotoFront', 'certificatePhotoBack', 'name', 'certificateType', 'certificateNumber',]
|
||
}
|
||
},
|
||
required: [
|
||
'licensePhotoWatermark',
|
||
'unifiedSocialCreditCode',
|
||
'enterpriseName',
|
||
'enterpriseAddressCode',
|
||
'enterpriseAddress',
|
||
'registrationCapital',
|
||
'enterpriseRegistrationTime',
|
||
'operatingStartTime',
|
||
'businessScope',
|
||
'taxStatus',
|
||
'staffNumber',
|
||
'taxAuthority'
|
||
]
|
||
};
|
||
}
|
||
|
||
private initOthersSF(): SFSchema {
|
||
return {
|
||
properties: {
|
||
title99: { title: '', type: 'string', ui: { widget: 'custom' } },
|
||
website: {
|
||
title: '平台网址',
|
||
type: 'string',
|
||
maxLength: 70,
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
placeholder: '请输入平台网址'
|
||
}
|
||
},
|
||
costRate: {
|
||
title: '成本费率',
|
||
type: 'string',
|
||
ui: {
|
||
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
|
||
placeholder: '请输入成本费率'
|
||
}
|
||
}
|
||
},
|
||
required: ['website', 'bankAccount']
|
||
};
|
||
}
|
||
}
|