1121 lines
35 KiB
TypeScript
1121 lines
35 KiB
TypeScript
import { Component, OnInit, ViewChild } from '@angular/core';
|
|
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
|
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
import {
|
|
SFComponent,
|
|
SFNumberWidgetSchema,
|
|
SFSchema,
|
|
SFSchemaEnum,
|
|
SFSelectWidgetSchema,
|
|
SFTextareaWidgetSchema,
|
|
SFUISchema
|
|
} from '@delon/form';
|
|
import { _HttpClient } from '@delon/theme';
|
|
import { AmapPoiPickerComponent, AmapService, ShipperBaseService } from '@shared';
|
|
import { NzModalService } from 'ng-zorro-antd/modal';
|
|
import { of } from 'rxjs';
|
|
import { map } from 'rxjs/operators';
|
|
import { SupplyManagementService } from '../../services/supply-management.service';
|
|
import { SupplyManagementVehicleAssignedCarComponent } from '../assigned-car/assigned-car.component';
|
|
import { TranAgreementComponent } from '../tran-agreement/tran-agreement.component';
|
|
import { PublishAddressListComponent } from './address-list/address-list.component';
|
|
import { PublishSuccessComponent } from './publish-success/publish-success.component';
|
|
@Component({
|
|
selector: 'app-publish-goods-onecar-publish',
|
|
templateUrl: './onecar-publish.component.html',
|
|
styleUrls: ['./onecar-publish.component.less']
|
|
})
|
|
export class SupplyManagementOnecarPublishComponent implements OnInit {
|
|
validateForm1: FormGroup;
|
|
sf1data: any; // 货源单设置回显
|
|
sf3data: any; // 货源单设置回显
|
|
sf4data: any; // 货源单设置回显
|
|
sf5data: any; // 货源单设置回显
|
|
sf6data: any; // 货源单设置回显
|
|
sf7data: any; // 货源单设置回显
|
|
creatTime: any; // 货源单设置回显
|
|
loadingTime: any; // 货源单设置回显
|
|
unloadingTime: any; // 货源单设置回显
|
|
totalFees: any; // 总数信息
|
|
totalDistance = 0.0; //总里程
|
|
totalTime = 0.0; //路程总时间
|
|
currentRate = 0; //实时计算的费率
|
|
id = this.route.snapshot.params.id;
|
|
// // 单位
|
|
startInfo: any = []; // 发货地数据
|
|
endInfo: any = []; // 卸货地数据
|
|
PageStatus = '';
|
|
enterpriseProjectIds: any;
|
|
constructor(
|
|
private http: _HttpClient,
|
|
fb: FormBuilder,
|
|
private router: Router,
|
|
private route: ActivatedRoute,
|
|
private modalService: NzModalService,
|
|
public service: SupplyManagementService,
|
|
private amapService: AmapService,
|
|
public shipperSrv: ShipperBaseService
|
|
) {
|
|
this.validateForm1 = fb.group({
|
|
loadAddress0: [null, [Validators.required]],
|
|
loadName0: [null, [Validators.required]],
|
|
loadPhone0: [null, [Validators.required,Validators.pattern('^[0-9]*$')]],
|
|
unloadAddress0: [null, [Validators.required]],
|
|
unloadName0: [null, [Validators.required]],
|
|
unloadPhone0: [null, [Validators.required,Validators.pattern('^[0-9]*$')]],
|
|
loadingTime: [null, []],
|
|
unloadingTime: [null, []]
|
|
});
|
|
}
|
|
@ViewChild('sf1', { static: false }) sf1!: SFComponent;
|
|
schema1: SFSchema = {};
|
|
ui1!: SFUISchema;
|
|
|
|
@ViewChild('sf2', { static: false }) sf2!: SFComponent;
|
|
schema2: SFSchema = {};
|
|
ui2!: SFUISchema;
|
|
|
|
@ViewChild('sf3', { static: false }) sf3!: SFComponent;
|
|
schema3: SFSchema = {};
|
|
ui3!: SFUISchema;
|
|
|
|
@ViewChild('sf4', { static: false }) sf4!: SFComponent;
|
|
schema4: SFSchema = {};
|
|
ui4!: SFUISchema;
|
|
|
|
@ViewChild('sf5', { static: false }) sf5!: SFComponent;
|
|
schema5: SFSchema = {};
|
|
ui5!: SFUISchema;
|
|
|
|
@ViewChild('sf6', { static: false }) sf6!: SFComponent;
|
|
schema6: SFSchema = {};
|
|
ui6!: SFUISchema;
|
|
|
|
@ViewChild('sf7', { static: false }) sf7!: SFComponent;
|
|
schema7: SFSchema = {};
|
|
ui7!: SFUISchema;
|
|
// 页面初始化
|
|
ngOnInit(): void {
|
|
if (this.route.snapshot?.queryParams?.sta === '1') {
|
|
this.PageStatus = '整车修改';
|
|
} else if (this.route.snapshot?.queryParams?.sta === '2') {
|
|
this.PageStatus = '整车下一单';
|
|
}
|
|
this.initSF1();
|
|
this.initSF3();
|
|
this.initSF4();
|
|
this.initSF5();
|
|
this.initSF6();
|
|
this.initSF7();
|
|
this.initdata();
|
|
}
|
|
initSF1() {
|
|
this.schema1 = {
|
|
properties: {
|
|
shipperAppUserId: {
|
|
title: '货主',
|
|
type: 'string',
|
|
maxLength: 30,
|
|
ui: {
|
|
widget: 'select',
|
|
// serverSearch: true,
|
|
searchDebounceTime: 300,
|
|
searchLoadingText: '搜索中...',
|
|
onSearch: (q: any) => {
|
|
if (!!q) {
|
|
return this.service
|
|
.request(this.service.$api_enterpriceList, { enterpriseName: q })
|
|
.pipe(map(res => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum))))
|
|
.toPromise();
|
|
} else {
|
|
return of([]);
|
|
}
|
|
},
|
|
change: (q: any) => {
|
|
this.getRegionCode(q);
|
|
}
|
|
} as SFSelectWidgetSchema
|
|
},
|
|
enterpriseProjectId: {
|
|
type: 'string',
|
|
title: '项目',
|
|
ui: {
|
|
widget: 'select',
|
|
placeholder: '请选择'
|
|
} as SFSelectWidgetSchema
|
|
},
|
|
enterpriseInfoName: {
|
|
type: 'string',
|
|
title: '网络货运人',
|
|
ui: {
|
|
widget: 'text'
|
|
}
|
|
},
|
|
externalResourceCode: {
|
|
type: 'string',
|
|
title: '外部货源号',
|
|
maxLength: 30,
|
|
ui: {
|
|
placeholder: '请输入'
|
|
}
|
|
},
|
|
dispatchPhone: {
|
|
type: 'string',
|
|
title: '手机号',
|
|
maxLength: 30,
|
|
ui: {
|
|
hidden: true,
|
|
placeholder: '请输入'
|
|
}
|
|
},
|
|
dispatchName: {
|
|
type: 'string',
|
|
title: '名字',
|
|
maxLength: 30,
|
|
ui: {
|
|
hidden: true,
|
|
placeholder: '请输入'
|
|
}
|
|
},
|
|
dispatchId: {
|
|
type: 'string',
|
|
title: '调度员',
|
|
ui: {
|
|
widget: 'select',
|
|
placeholder: '请选择',
|
|
allowClear: true,
|
|
optionalHelp: '选择调度员,司机直接联系调度员 ; 不选择,司机直接联系您',
|
|
change: (_value: any, data: any) => {
|
|
if (data.label) {
|
|
const dat = data.label.split('/');
|
|
this.sf1.setValue('/dispatchName', dat[0]);
|
|
this.sf1.setValue('/dispatchPhone', dat[1]);
|
|
}
|
|
},
|
|
asyncData: () => this.shipperSrv.getStaffList2()
|
|
} as SFSelectWidgetSchema
|
|
}
|
|
},
|
|
required: ['shipperAppUserId', 'enterpriseProjectId']
|
|
};
|
|
this.ui1 = {
|
|
'*': {
|
|
spanLabelFixed: 120,
|
|
grid: { span: 8 }
|
|
}
|
|
};
|
|
}
|
|
initSF3() {
|
|
this.schema3 = {
|
|
properties: {
|
|
goodsTypeId: {
|
|
type: 'string',
|
|
title: '货物名称',
|
|
ui: {
|
|
widget: 'select',
|
|
placeholder: '请选择',
|
|
errors: { required: '请选择货物类型' },
|
|
asyncData: () =>
|
|
this.shipperSrv.loadConfigByKey('goods.name.config.type').pipe(
|
|
map((data: any) => {
|
|
return data[0].children?.map((m: any) => {
|
|
return { label: m.name, value: m.id };
|
|
});
|
|
})
|
|
),
|
|
change: (value, data: any) => {
|
|
this.changeGoodsType(value, data);
|
|
this.sf3.setValue('/goodsTypeName', data.label);
|
|
}
|
|
} as SFSelectWidgetSchema
|
|
},
|
|
goodsTypeName: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
hidden: true
|
|
}
|
|
},
|
|
goodsNameId: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
widget: 'select',
|
|
placeholder: '请选择',
|
|
errors: { required: '请填写货物名称' },
|
|
change: (_value: any, data: any) => {
|
|
this.sf3.setValue('/goodsName', data.label);
|
|
},
|
|
visibleIf: {
|
|
goodsTypeName: (value: any) => value && value !== '其它'
|
|
}
|
|
}
|
|
},
|
|
goodsName: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
hidden: true,
|
|
visibleIf: {
|
|
goodsTypeName: (value: any) => value && value !== '其它'
|
|
}
|
|
}
|
|
},
|
|
goodsName1: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
errors: { required: '请填写货物名称' },
|
|
visibleIf: {
|
|
goodsTypeName: (value: any) => value && value === '其它'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
required: ['goodsTypeId', 'goodsName', 'goodsNameId']
|
|
};
|
|
this.ui3 = {
|
|
'*': {
|
|
spanLabelFixed: 90,
|
|
grid: { span: 12 }
|
|
}
|
|
};
|
|
}
|
|
initSF4() {
|
|
this.schema4 = {
|
|
properties: {
|
|
weight: {
|
|
type: 'string',
|
|
title: '货物数量',
|
|
ui: {
|
|
widget: 'custom',
|
|
placeholder: '请输入',
|
|
errors: { required: '必填项' }
|
|
}
|
|
},
|
|
volume: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
widget: 'custom',
|
|
placeholder: '请输入'
|
|
}
|
|
},
|
|
number: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
widget: 'custom',
|
|
placeholder: '请输入'
|
|
}
|
|
},
|
|
maxWeight: {
|
|
type: 'string',
|
|
title: '车型/车长',
|
|
ui: {
|
|
widget: 'dict-select',
|
|
params: { dictKey: 'car:model' },
|
|
mode: 'multiple',
|
|
placeholder: '请选择车型',
|
|
errors: { required: '请选择车型' }
|
|
}
|
|
},
|
|
maxCube: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
widget: 'dict-select',
|
|
params: { dictKey: 'car:length' },
|
|
mode: 'multiple',
|
|
placeholder: '请选择车长',
|
|
errors: { required: '请选择车长' }
|
|
}
|
|
}
|
|
},
|
|
required: ['weight', 'maxWeight', 'maxCube']
|
|
};
|
|
this.ui4 = {
|
|
'*': {
|
|
spanLabelFixed: 90,
|
|
grid: { span: 24 }
|
|
},
|
|
$weight: {
|
|
grid: { span: 8 }
|
|
},
|
|
$volume: {
|
|
grid: { span: 8 }
|
|
},
|
|
$number: {
|
|
grid: { span: 8 }
|
|
},
|
|
$maxWeight: {
|
|
grid: { span: 12 }
|
|
},
|
|
$maxCube: {
|
|
grid: { span: 12 }
|
|
}
|
|
};
|
|
}
|
|
|
|
initSF5() {
|
|
this.schema5 = {
|
|
properties: {
|
|
goodsValue: {
|
|
type: 'string',
|
|
title: '货物价值',
|
|
ui: {
|
|
widget: 'custom'
|
|
}
|
|
},
|
|
insureInfo: {
|
|
type: 'string',
|
|
title: '',
|
|
ui: {
|
|
widget: 'custom'
|
|
}
|
|
}
|
|
},
|
|
required: ['goodsValue']
|
|
};
|
|
this.ui5 = {
|
|
'*': {
|
|
spanLabelFixed: 90,
|
|
grid: { span: 12 }
|
|
}
|
|
};
|
|
}
|
|
initSF6() {
|
|
this.schema6 = {
|
|
properties: {
|
|
stateReceipt: {
|
|
type: 'string',
|
|
title: '是否回单',
|
|
enum: [
|
|
{ label: '需要', value: true },
|
|
{ label: '不需要', value: false }
|
|
],
|
|
ui: {
|
|
widget: 'select',
|
|
errors: { required: '请选择' },
|
|
placeholder: '请选择'
|
|
}
|
|
},
|
|
receiptType: {
|
|
type: 'string',
|
|
title: '回单类型',
|
|
ui: {
|
|
widget: 'dict-select',
|
|
params: { dictKey: 'receipt:type' },
|
|
containsAllLabel: false,
|
|
placeholder: '请选择',
|
|
errors: { required: '请选择' },
|
|
visibleIf: {
|
|
stateReceipt: value => value === true
|
|
}
|
|
}
|
|
},
|
|
receiptUserName: {
|
|
type: 'string',
|
|
title: '联系人',
|
|
maxLength: 15,
|
|
ui: {
|
|
visibleIf: {
|
|
receiptType: value => value === '2'
|
|
}
|
|
},
|
|
},
|
|
receiptUserPhone: {
|
|
type: 'string',
|
|
title: '联系电话',
|
|
maxLength: 11,
|
|
ui: {
|
|
visibleIf: {
|
|
receiptType: value => value === '2'
|
|
}
|
|
},
|
|
},
|
|
receiptAddressArea: {
|
|
type: 'string',
|
|
title: '所在地区',
|
|
maxLength: 30,
|
|
ui: {
|
|
visibleIf: {
|
|
receiptType: value => value === '2'
|
|
}
|
|
},
|
|
},
|
|
receiptAddress: {
|
|
type: 'string',
|
|
title: '详细地址',
|
|
maxLength: 30,
|
|
ui: {
|
|
visibleIf: {
|
|
receiptType: value => value === '2'
|
|
}
|
|
},
|
|
},
|
|
remarks: {
|
|
type: 'string',
|
|
title: '备注',
|
|
maxLength: 200,
|
|
ui: {
|
|
widget: 'textarea',
|
|
placeholder: '请输入',
|
|
autosize: { minRows: 3, maxRows: 3 }
|
|
} as SFTextareaWidgetSchema
|
|
}
|
|
},
|
|
required: ['stateReceipt', 'receiptType', 'receiptUserName','receiptUserPhone','receiptAddressArea','receiptAddress']
|
|
};
|
|
this.ui6 = {
|
|
'*': {
|
|
spanLabelFixed: 90,
|
|
grid: { span: 24 }
|
|
}
|
|
};
|
|
}
|
|
initSF7() {
|
|
this.schema7 = {
|
|
properties: {
|
|
prePay: {
|
|
type: 'number',
|
|
title: '预付',
|
|
minimum: 0,
|
|
maximum: 999999,
|
|
default: 0,
|
|
ui: {
|
|
prefix: '¥',
|
|
widgetWidth: 300,
|
|
change: _args => this.payChange()
|
|
} as SFNumberWidgetSchema
|
|
},
|
|
toPay: {
|
|
type: 'number',
|
|
title: '到付',
|
|
minimum: 0,
|
|
maximum: 999999,
|
|
default: 0,
|
|
ui: {
|
|
prefix: '¥',
|
|
widgetWidth: 300,
|
|
change: _args => this.payChange()
|
|
} as SFNumberWidgetSchema
|
|
},
|
|
// oilCardPay: {
|
|
// type: 'number',
|
|
// title: '油卡',
|
|
// minimum: 0,
|
|
// maximum: 999999,
|
|
// default: 0,
|
|
// ui: {
|
|
// prefix: '¥',
|
|
// widgetWidth: 300,
|
|
// change: _args => this.payChange()
|
|
// } as SFNumberWidgetSchema
|
|
// },
|
|
receiptPay: {
|
|
type: 'number',
|
|
title: '回单付',
|
|
minimum: 0,
|
|
maximum: 999999,
|
|
default: 0,
|
|
ui: {
|
|
prefix: '¥',
|
|
widgetWidth: 300,
|
|
change: _args => this.payChange()
|
|
} as SFNumberWidgetSchema
|
|
},
|
|
subtotal: { type: 'number', title: '小计', default: 0, ui: { widget: 'custom' } as SFNumberWidgetSchema },
|
|
appendFee: { type: 'number', title: '附加费', default: 0, ui: { widget: 'custom' } as SFNumberWidgetSchema },
|
|
total: { type: 'number', title: '总费用', default: 0, ui: { widget: 'custom' } as SFNumberWidgetSchema },
|
|
paymentDays: {
|
|
type: 'string',
|
|
title: '到货后',
|
|
ui: {
|
|
widget: 'custom',
|
|
placeholder: '请输入',
|
|
errors: { required: '请输入付款承诺天数' }
|
|
}
|
|
}
|
|
},
|
|
required: ['paymentDays']
|
|
};
|
|
this.ui7 = {
|
|
'*': {
|
|
spanLabelFixed: 90,
|
|
grid: { span: 24 }
|
|
}
|
|
};
|
|
}
|
|
// 获取城市列表
|
|
getRegionCode(regionCode: any) {
|
|
console.log(regionCode);
|
|
return this.service
|
|
.request(this.service.$api_get_enterprise_project, { id: regionCode })
|
|
.pipe(
|
|
map(res =>
|
|
res.map((item: any) => ({
|
|
label: item.projectName,
|
|
value: item.id
|
|
}))
|
|
)
|
|
)
|
|
.subscribe(res => {
|
|
this.sf1.getProperty('/enterpriseProjectId')!.schema.enum = res;
|
|
this.sf1.getProperty('/enterpriseProjectId')!.widget.reset(res);
|
|
if (this.enterpriseProjectIds) {
|
|
this.sf1.setValue('/enterpriseProjectId', this.enterpriseProjectIds);
|
|
}
|
|
});
|
|
}
|
|
changeValue() {
|
|
this.totalFees =
|
|
Number(this.sf7?.value?.appendFee) +
|
|
Number(this.sf7?.value?.prePay) +
|
|
Number(this.sf7?.value?.receiptPay) +
|
|
Number(this.sf7?.value?.toPay);
|
|
console.log(this.totalFees);
|
|
}
|
|
payChange(value?: any) {
|
|
let subtotal: any = {};
|
|
let oilCardPay: any = 0;
|
|
if (value) {
|
|
subtotal = value.prePay + value.toPay + value.receiptPay || 0;
|
|
// oilCardPay = value.oilCardPay || 0;
|
|
} else {
|
|
subtotal = this.sf7.value.prePay + this.sf7.value.toPay+ this.sf7.value.receiptPay || 0;
|
|
// oilCardPay = this.sf7.value.oilCardPay || 0;
|
|
}
|
|
console.log(this.sf7.value);
|
|
this.service
|
|
.request(this.service.$api_getCalculatedSurcharge + `?totalFreight=${subtotal}&fuelCardAmount=${oilCardPay}`)
|
|
.subscribe(res => {
|
|
if (res) {
|
|
this.sf7.setValue('/appendFee', res.surcharge);
|
|
this.sf7.setValue('/subtotal', subtotal);
|
|
this.sf7.setValue('/total', subtotal + res.surcharge);
|
|
this.service
|
|
.request(this.service.$api_getcalculatedServiceRate + `?invoiceAmount=${subtotal + res.surcharge}&totalFreight=${subtotal}`)
|
|
.subscribe(res => {
|
|
if (res) {
|
|
this.currentRate = res.rate * 100;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
// 添加 删除发货卸货地址
|
|
addStartInfo(_event: any) {
|
|
if (this.startInfo.length < 5) {
|
|
const controlId = this.startInfo.length;
|
|
this.startInfo.push({
|
|
detailedAddress: '',
|
|
appUserName: '',
|
|
contractTelephone: '',
|
|
latitude: '',
|
|
longitude: '',
|
|
province: '',
|
|
city: '',
|
|
area: '',
|
|
type: 1
|
|
});
|
|
this.validateForm1.addControl(`loadAddress${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`loadName${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`loadPhone${controlId}`, new FormControl(null, Validators.required));
|
|
}
|
|
}
|
|
// 添加 删除发货卸货地址
|
|
subStartInfo(event: any, index: number, id?: any) {
|
|
console.log(event, index, id);
|
|
if (id) {
|
|
this.service.request(this.service.$api_delete_Wholedeletebatch, [id]).subscribe(res => {
|
|
console.log(res);
|
|
});
|
|
}
|
|
this.startInfo.splice(index, 1);
|
|
this.validateForm1.removeControl(`loadAddress${index}`);
|
|
this.validateForm1.removeControl(`loadName${index}`);
|
|
this.validateForm1.removeControl(`loadPhone${index}`);
|
|
}
|
|
// 添加 删除发货卸货地址
|
|
addEndInfo(_event: any) {
|
|
if (this.addEndInfo.length < 5) {
|
|
const controlId = this.endInfo.length;
|
|
this.endInfo.push({
|
|
detailedAddress: '',
|
|
appUserName: '',
|
|
contractTelephone: '',
|
|
latitude: '',
|
|
longitude: '',
|
|
province: '',
|
|
city: '',
|
|
area: '',
|
|
type: 2
|
|
});
|
|
this.validateForm1.addControl(`unloadAddress${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`unloadName${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`unloadPhone${controlId}`, new FormControl(null, Validators.required));
|
|
}
|
|
}
|
|
// 添加 删除发货卸货地址
|
|
subEndInfo(event: any, index: number, id?: any) {
|
|
if (id) {
|
|
this.service.request(this.service.$api_delete_Wholedeletebatch, [id]).subscribe(res => {
|
|
console.log(res);
|
|
});
|
|
}
|
|
console.log(event, index, id);
|
|
this.endInfo.splice(index, 1);
|
|
this.validateForm1.removeControl(`unloadAddress${index}`);
|
|
this.validateForm1.removeControl(`unloadName${index}`);
|
|
this.validateForm1.removeControl(`unloadPhone${index}`);
|
|
}
|
|
changeGoodsType(value: string, data: any) {
|
|
if (data.label === '其它') return;
|
|
const params = {
|
|
pageIndex: 1,
|
|
pageSize: 100,
|
|
configId: value
|
|
};
|
|
this.service
|
|
.request(this.service.$api_get_config_item_page, params)
|
|
.pipe(
|
|
map(data => {
|
|
return data.records?.map((m: any) => {
|
|
return { label: m.name, value: m.id };
|
|
});
|
|
})
|
|
)
|
|
.subscribe(res => {
|
|
if (res) {
|
|
this.sf3.getProperty('/goodsNameId')!.schema.enum = res;
|
|
this.sf3.getProperty('/goodsNameId')!.widget?.reset(res);
|
|
if (this.sf3data.goodsNameId) {
|
|
this.sf3.setValue('/goodsNameId', this.sf3data.goodsNameId);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
//指派熟车
|
|
chooseFamifiar(item: any) {
|
|
console.log('999');
|
|
const modalRef = this.modalService.create({
|
|
nzTitle: '指派熟车',
|
|
nzContent: SupplyManagementVehicleAssignedCarComponent,
|
|
nzWidth: 1200,
|
|
nzComponentParams: {
|
|
status: 'new',
|
|
url: this.service.$api_save_assign_whole,
|
|
params: item,
|
|
type: 'next'
|
|
},
|
|
nzFooter: null
|
|
});
|
|
modalRef.afterClose.subscribe(result => {
|
|
if (result) {
|
|
this.openFinishPage(result);
|
|
}
|
|
});
|
|
}
|
|
// 打开下单完成页面
|
|
openFinishPage(resourceObj: any = null, change?: any) {
|
|
this.modalService.create({
|
|
nzTitle: '',
|
|
nzContent: PublishSuccessComponent,
|
|
nzWidth: 900,
|
|
nzFooter: null,
|
|
nzComponentParams: { type: 'onecar', resourceObj, change: change }
|
|
});
|
|
}
|
|
// 提交前确认,委托运输协议弹窗
|
|
submitConfirm(submitType?: any) {
|
|
Object.keys(this.validateForm1.controls).forEach(key => {
|
|
this.validateForm1.controls[key].markAsDirty();
|
|
this.validateForm1.controls[key].updateValueAndValidity();
|
|
});
|
|
this.sf1.validator({ emitError: true });
|
|
this.sf3.validator({ emitError: true });
|
|
this.sf4.validator({ emitError: true });
|
|
this.sf6.validator({ emitError: true });
|
|
this.sf7.validator({ emitError: true });
|
|
console.log(this.sf1.valid);
|
|
if (this.validateForm1.invalid || !this.sf3.valid || !this.sf1.valid || !this.sf4.valid || !this.sf6.valid || !this.sf7.valid) {
|
|
return;
|
|
}
|
|
|
|
const modalRef = this.modalService.create({
|
|
nzTitle: '运输协议',
|
|
nzContent: TranAgreementComponent,
|
|
nzWidth: 900,
|
|
nzFooter: null,
|
|
nzComponentParams: { type: 'next' }
|
|
});
|
|
modalRef.afterClose.subscribe(result => {
|
|
if (result) {
|
|
this.submit(submitType);
|
|
}
|
|
});
|
|
}
|
|
// 提交
|
|
submit(submitType?: string): void {
|
|
Object.keys(this.validateForm1.controls).forEach(key => {
|
|
this.validateForm1.controls[key].markAsDirty();
|
|
this.validateForm1.controls[key].updateValueAndValidity();
|
|
});
|
|
this.sf1.validator({ emitError: true });
|
|
this.sf3.validator({ emitError: true });
|
|
this.sf4.validator({ emitError: true });
|
|
this.sf6.validator({ emitError: true });
|
|
this.sf7.validator({ emitError: true });
|
|
console.log(this.sf1.valid);
|
|
if (this.validateForm1.invalid || !this.sf3.valid || !this.sf1.valid || !this.sf4.valid || !this.sf6.valid || !this.sf7.valid) {
|
|
return;
|
|
}
|
|
console.log(this.validateForm1.value?.unloadingTime)
|
|
if (typeof this.validateForm1.value.unloadingTime !== 'string') {
|
|
var c = new Date(this.validateForm1.value.unloadingTime);
|
|
this.validateForm1.value.unloadingTime =
|
|
c.getFullYear() +
|
|
'-' +
|
|
this.addPreZero(c.getMonth() + 1) +
|
|
'-' +
|
|
this.addPreZero(c.getDate()) +
|
|
' ' +
|
|
this.addPreZero(c.getHours()) +
|
|
':' +
|
|
this.addPreZero(c.getMinutes()) +
|
|
':' +
|
|
this.addPreZero(c.getSeconds());
|
|
}
|
|
if (typeof this.validateForm1.value.loadingTime !== 'string') {
|
|
var c = new Date(this.validateForm1.value.loadingTime);
|
|
this.validateForm1.value.loadingTime =
|
|
c.getFullYear() +
|
|
'-' +
|
|
this.addPreZero(c.getMonth() + 1) +
|
|
'-' +
|
|
this.addPreZero(c.getDate()) +
|
|
' ' +
|
|
this.addPreZero(c.getHours()) +
|
|
':' +
|
|
this.addPreZero(c.getMinutes()) +
|
|
':' +
|
|
this.addPreZero(c.getSeconds());
|
|
}
|
|
const params: any = {
|
|
...this.sf1.value,
|
|
...this.sf5.value,
|
|
...this.sf6.value,
|
|
paymentDays: this.sf7.value.paymentDays,
|
|
loadingTime: this.validateForm1?.value?.loadingTime,
|
|
unloadingTime: this.validateForm1?.value?.unloadingTime,
|
|
unLoadingPlaceDTOList: [...this.startInfo, ...this.endInfo],
|
|
goodsInfoDTOList: [
|
|
{
|
|
...this.sf4.value,
|
|
...this.sf3.value,
|
|
maxWeight: this.sf4.value.maxWeight.join(','),
|
|
maxCube: this.sf4.value.maxCube.join(',')
|
|
}
|
|
]
|
|
};
|
|
params.shippingInformationDTO = {
|
|
...this.sf7.value,
|
|
totalFees: this.totalFees
|
|
};
|
|
console.log(params);
|
|
if (submitType) {
|
|
if (submitType == 'assign') {
|
|
this.chooseFamifiar(params);
|
|
return;
|
|
}
|
|
}
|
|
if (this.PageStatus === '整车修改') {
|
|
this.requests(this.service.$api_set_WholeModify, params, 1);
|
|
} else if (this.PageStatus === '整车下一单') {
|
|
this.requests(this.service.$api_set_saveAnotherWholeOrder, params, 2);
|
|
}
|
|
}
|
|
addPreZero(num: any) {
|
|
if (num < 10) {
|
|
return '0' + num;
|
|
} else {
|
|
return num;
|
|
}
|
|
}
|
|
// 下单成功提示弹窗
|
|
requests(url: any, params: any, change?: any) {
|
|
this.service.request(url, params).subscribe((res: any) => {
|
|
if (res) {
|
|
this.modalService.create({
|
|
nzTitle: '',
|
|
nzContent: PublishSuccessComponent,
|
|
nzWidth: 900,
|
|
nzFooter: null,
|
|
nzComponentParams: { type: 'onecar', change: change }
|
|
});
|
|
}
|
|
});
|
|
}
|
|
// 打开地图
|
|
openMap(type: string, index: number) {
|
|
const modalRef = this.modalService.create({
|
|
nzTitle: '',
|
|
nzContent: AmapPoiPickerComponent,
|
|
nzWidth: 900,
|
|
nzOnOk: item => {
|
|
const poi = item.poi;
|
|
const locList = poi.pois;
|
|
switch (type) {
|
|
case 'start':
|
|
this.startInfo[index].detailedAddress = poi.formattedAddress;
|
|
this.startInfo[index].longitude = locList[0];
|
|
this.startInfo[index].latitude = locList[1];
|
|
this.startInfo[index].province = poi.addressComponent.province;
|
|
this.startInfo[index].city = poi.addressComponent.city;
|
|
this.startInfo[index].area = poi.addressComponent.district;
|
|
this.startInfo[index].address = poi.formattedAddress;
|
|
break;
|
|
case 'end':
|
|
this.endInfo[index].detailedAddress = poi.formattedAddress;
|
|
this.endInfo[index].longitude = locList[0];
|
|
this.endInfo[index].latitude = locList[1];
|
|
this.endInfo[index].province = poi.addressComponent.province;
|
|
this.endInfo[index].city = poi.addressComponent.city;
|
|
this.endInfo[index].area = poi.addressComponent.district;
|
|
this.endInfo[index].address = poi.formattedAddress;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (this.startInfo[0]?.area && this.endInfo[0]?.area) {
|
|
this.amapService.drivingCompute([...this.startInfo], [...this.endInfo]).subscribe((res: any) => {
|
|
this.totalDistance = res.distance;
|
|
this.totalTime = res.time;
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
// 返回上一页
|
|
goBack() {
|
|
window.history.go(-1);
|
|
}
|
|
// 初始化赋值信息
|
|
initdata() {
|
|
this.service.request(`${this.service.$api_get_getCompleteVehicleDetail}`, { id: this.id }).subscribe(res => {
|
|
this.dataR(res);
|
|
});
|
|
}
|
|
// 初始化赋值信息函数
|
|
dataR(res: any) {
|
|
if (res?.shipperAppUserName) {
|
|
const List: any = [];
|
|
this.service.request(this.service.$api_enterpriceList, { enterpriseName: res?.shipperAppUserName }).subscribe(rs => {
|
|
rs?.forEach((element: any) => {
|
|
List.push({ label: element.enterpriseName, value: element.id });
|
|
});
|
|
this.sf1.getProperty('/shipperAppUserId')!.schema.enum = List;
|
|
this.sf1.getProperty('/shipperAppUserId')!.widget.reset(List);
|
|
if (res?.shipperAppUserId) {
|
|
this.sf1.setValue('/shipperAppUserId', res?.shipperAppUserId);
|
|
this.getRegionCode(res?.shipperAppUserId);
|
|
}
|
|
});
|
|
}
|
|
if (res?.enterpriseProjectId) {
|
|
this.enterpriseProjectIds = res.enterpriseProjectId;
|
|
}
|
|
this.sf1data = {
|
|
enterpriseInfoName: res?.enterpriseInfoName,
|
|
dispatchPhone: res?.dispatchPhone,
|
|
dispatchName: res?.dispatchName,
|
|
externalResourceCode: res?.externalResourceCode,
|
|
dispatchId: res?.dispatchId
|
|
};
|
|
if (this.PageStatus === '整车修改') {
|
|
this.sf1data.id = res?.id;
|
|
}
|
|
res?.unLoadingPlaceVOList.forEach((element: any) => {
|
|
if (element.type === 1 || element.type === '1') {
|
|
const controlId = this.startInfo.length;
|
|
if (this.PageStatus === '整车修改') {
|
|
this.startInfo.push({
|
|
detailedAddress: element.detailedAddress,
|
|
appUserName: element.appUserName,
|
|
contractTelephone: element.contractTelephone,
|
|
latitude: element.latitude,
|
|
longitude: element.longitude,
|
|
province: element.province,
|
|
city: element.city,
|
|
area: element.area,
|
|
type: element.type,
|
|
id: element.id
|
|
});
|
|
} else {
|
|
this.startInfo.push({
|
|
detailedAddress: element.detailedAddress,
|
|
appUserName: element.appUserName,
|
|
contractTelephone: element.contractTelephone,
|
|
latitude: element.latitude,
|
|
longitude: element.longitude,
|
|
province: element.province,
|
|
city: element.city,
|
|
area: element.area,
|
|
type: element.type
|
|
});
|
|
}
|
|
|
|
this.validateForm1.addControl(`loadAddress${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`loadName${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`loadPhone${controlId}`, new FormControl(null, Validators.required));
|
|
} else if (element.type === 2 || element.type === '2') {
|
|
const controlId = this.endInfo.length;
|
|
if (this.PageStatus === '整车修改') {
|
|
this.endInfo.push({
|
|
detailedAddress: element?.detailedAddress,
|
|
appUserName: element?.appUserName,
|
|
contractTelephone: element?.contractTelephone,
|
|
latitude: element.latitude,
|
|
longitude: element.longitude,
|
|
province: element.province,
|
|
city: element.city,
|
|
area: element.area,
|
|
type: element.type,
|
|
id: element.id
|
|
});
|
|
} else {
|
|
this.endInfo.push({
|
|
detailedAddress: element?.detailedAddress,
|
|
appUserName: element?.appUserName,
|
|
contractTelephone: element?.contractTelephone,
|
|
latitude: element.latitude,
|
|
longitude: element.longitude,
|
|
province: element.province,
|
|
city: element.city,
|
|
area: element.area,
|
|
type: element.type
|
|
});
|
|
}
|
|
this.validateForm1.addControl(`unloadAddress${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`unloadName${controlId}`, new FormControl(null, Validators.required));
|
|
this.validateForm1.addControl(`unloadPhone${controlId}`, new FormControl(null, Validators.required));
|
|
}
|
|
});
|
|
|
|
this.sf3data = {
|
|
goodsTypeId: res?.goodsInfoVOList[0]?.goodsTypeId || '',
|
|
goodsTypeName: res?.goodsInfoVOList[0]?.goodsTypeName || '',
|
|
goodsNameId: res?.goodsInfoVOList[0]?.goodsNameId || '',
|
|
goodsName: res?.goodsInfoVOList[0]?.goodsName || ''
|
|
};
|
|
if (this.sf3data.goodsTypeName === '其它') {
|
|
this.sf3data.goodsName1 = res?.goodsInfoVOList[0]?.goodsName || '';
|
|
}
|
|
this.changeGoodsType(this.sf3data.goodsTypeId, { label: this.sf3data.goodsTypeName, value: this.sf3data.goodsTypeId });
|
|
this.sf4data = {
|
|
weight: res?.goodsInfoVOList[0]?.weight,
|
|
volume: res?.goodsInfoVOList[0]?.volume,
|
|
vehicleDemand: res?.goodsInfoVOList[0]?.vehicleDemand,
|
|
maxCube: res?.goodsInfoVOList[0]?.maxCube?.split(','),
|
|
maxWeight: res?.goodsInfoVOList[0]?.maxWeight?.split(',') || '',
|
|
number: res?.goodsInfoVOList[0]?.number,
|
|
goodsTypeName: res?.goodsInfoVOList[0]?.goodsTypeName,
|
|
modifyUserId: res?.goodsInfoVOList[0]?.modifyUserId,
|
|
resourceId: res?.goodsInfoVOList[0]?.resourceId,
|
|
rule: res?.goodsInfoVOList[0]?.rule,
|
|
settlementBasis: res?.goodsInfoVOList[0]?.settlementBasis
|
|
};
|
|
if (res?.loadingTime) {
|
|
this.loadingTime = res?.loadingTime;
|
|
}
|
|
if (res?.unloadingTime) {
|
|
this.unloadingTime = res?.unloadingTime;
|
|
}
|
|
if (this.PageStatus === '整车修改') {
|
|
this.sf4data.id = res?.goodsInfoVOList[0]?.id;
|
|
}
|
|
this.totalFees = res?.shippingInformationVO?.totalFee || '0';
|
|
this.sf5data = {
|
|
goodsValue: res?.goodsValue
|
|
};
|
|
console.log(res?.stateReceipt);
|
|
// this.sf6data = {
|
|
// stateReceipt: res?.stateReceipt,
|
|
// receiptType: res?.receiptType,
|
|
// receiptUserId: res?.receiptUserId,
|
|
// remarks: res?.remarks
|
|
// };
|
|
this.sf6data = {
|
|
stateReceipt: res?.stateReceipt,
|
|
receiptType: res?.receiptType || '',
|
|
receiptUserName: res?.receiptUserName || '',
|
|
receiptAddressArea: res?.receiptAddressArea || '',
|
|
receiptUserPhone: res?.receiptUserPhone || '',
|
|
receiptAddress: res?.receiptAddress || '',
|
|
remarks: res?.supplementaryInformationVO?.remarks || ''
|
|
};
|
|
// if (this.PageStatus === '整车修改') {
|
|
// this.sf6data.id = res?.supplementaryInformationVO?.id
|
|
// }
|
|
this.sf7data = {
|
|
prePay: res?.shippingInformationVO?.prePay,
|
|
toPay: res?.shippingInformationVO?.toPay,
|
|
oilCardPay: 0,
|
|
receiptPay: res?.shippingInformationVO?.receiptPay,
|
|
subtotal: res?.shippingInformationVO?.totalFee,
|
|
total: res?.shippingInformationVO?.totalFee,
|
|
appendFee: res?.shippingInformationVO?.appendFee,
|
|
paymentDays: res?.paymentDays
|
|
};
|
|
this.payChange(this.sf7data);
|
|
}
|
|
|
|
// 选择地址
|
|
chooseAddress(index: number, type: string) {
|
|
const modalRef = this.modalService.create({
|
|
nzTitle: '选择地址',
|
|
nzContent: PublishAddressListComponent,
|
|
nzWidth: 900,
|
|
nzComponentParams: { spuStatus: '1' },
|
|
nzOnOk: item => {
|
|
console.log(item);
|
|
console.log(type);
|
|
const data = item.seleteData;
|
|
if (JSON.stringify(data) === '{}') return;
|
|
switch (type) {
|
|
case 'start':
|
|
this.startInfo[index] = {
|
|
detailedAddress: data.detailedAddress,
|
|
appUserName: data.contactName,
|
|
contractTelephone: data.contactTelephone,
|
|
latitude: data.contactTelephone,
|
|
longitude: data.latitude,
|
|
province: data.province,
|
|
city: data.city,
|
|
area: data.area,
|
|
type: '1'
|
|
};
|
|
break;
|
|
case 'end':
|
|
this.endInfo[index] = {
|
|
detailedAddress: data.detailedAddress,
|
|
appUserName: data.contactName,
|
|
contractTelephone: data.contactTelephone,
|
|
latitude: data.contactTelephone,
|
|
longitude: data.latitude,
|
|
province: data.province,
|
|
city: data.city,
|
|
area: data.area,
|
|
type: '2'
|
|
};
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|