diff --git a/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.html b/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.html new file mode 100644 index 00000000..b7cdae43 --- /dev/null +++ b/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.html @@ -0,0 +1,236 @@ + + +
货源单设置
+
+
+ + {{ i.value }} + +
+
+
+ + +
装卸货信息预计公里数:{{ totalDistance }}km,预计行程耗时:{{ totalTime }}小时
+ +
+
+
+
+ + 装货地 + +
+ + + + +
+
+
+ + 联系人 +
+ + + + + + +
+
+
+
+
+
+ +
+
+
+
+ + 卸货地 + +
+ + + + +
+
+
+ + 联系人 +
+ + + + + + +
+
+
+
+
+ +
+
+ + +
货物信息
+
+
+ + + + + + + + + + + + + +
+ + + + + + + +

例如 付司机运费 = 重量*单价 = 999.99

+

保留小数,即 999.99

+

抹除小数,即 999.00

+

抹除个位,即 990.00

+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+ + +
补充信息
+
+
+ + +
+
+
+ +
+
+ 天内支付运费 +
+
+
+
+
+
+
+
+ + +
+ + +
+
diff --git a/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.less b/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.less new file mode 100644 index 00000000..f95432e8 --- /dev/null +++ b/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.less @@ -0,0 +1,22 @@ +.tip-font { + margin-left: 16px; + font-weight: 500; + font-size: 12px; +} + +.card-title { + margin-bottom: 24px; + font-weight: bold; + font-size: 16px; +} + +.align-center { + display: flex; + align-items: center; + justify-content: center; +} + +#container { + width: 300px; + height: 180px; +} diff --git a/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.ts b/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.ts new file mode 100644 index 00000000..01ce703f --- /dev/null +++ b/src/app/routes/supply-management/components/bulk-release-publish/bulk-release-publish.component.ts @@ -0,0 +1,595 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { + SFArrayWidgetSchema, + SFComponent, + SFNumberWidgetSchema, + SFSchema, + SFSchemaEnum, + SFSelectWidgetSchema, + SFTextareaWidgetSchema, + SFUISchema +} from '@delon/form'; +import { SettingsService, _HttpClient } from '@delon/theme'; +import format from 'date-fns/format'; +import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal'; +import { of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { AmapPoiPickerComponent, AmapService } from 'src/app/shared/components/amap'; +import { SupplyManagementService } from '../../services/supply-management.service'; +import { PublishGoodsChooseFamifiarComponent } from '../choose-famifiar/choose-famifiar.component'; + +// import { PublishGoodsChooseFamifiarComponent } from '../choose-famifiar-bulk/choose-famifiar.component'; +import { PublishAddressListComponent } from '../onecar-publish/address-list/address-list.component'; +import { PublishSuccessComponent } from '../onecar-publish/publish-success/publish-success.component'; +// import { PublishSuccessComponent } from '../publish-success/publish-success.component'; +@Component({ + selector: 'app-publish-goods-bulk-publish', + templateUrl: './bulk-release-publish.component.html', + styleUrls: ['./bulk-release-publish.component.less'] +}) +export class SupplyManagementBulkReleasePublishComponent implements OnInit { + validateForm1: FormGroup; + sf1data: any; // 货源单设置回显 + sf3data: any; // 货源单设置回显 + sf4data: any; // 货源单设置回显 + sf5data: any; // 货源单设置回显 + sf6data: any; // 货源单设置回显 + sf7data: any; // 货源单设置回显 + creatTime: any; // 货源单设置回显 + modifyTime: any; // 货源单设置回显 + totalFees: any; // 总数信息 + id = ''; + type = 'add'; + // // 单位 + unit1 = '吨'; + unit2 = '方'; + unit3 = '保价费金额'; + startInfo: any[] = []; + endInfo: any[] = []; + + totalDistance = 0.0; //总里程 + totalTime = 0.0; //路程总时间 + + currentGoodsTypeName: any; + + freightTypeOptions: any; + ruleOptions: any; + constructor( + private http: _HttpClient, + fb: FormBuilder, + private modalService: NzModalService, + private settingSrv: SettingsService, + private service: SupplyManagementService, + private router: Router, + private route: ActivatedRoute, + private amapService: AmapService + ) { + this.validateForm1 = fb.group({ + loadAddress0: [null, [Validators.required]], + loadName0: [null, [Validators.required]], + loadPhone0: [null, [Validators.required]], + unloadAddress0: [null, [Validators.required]], + unloadName0: [null, [Validators.required]], + unloadPhone0: [null, [Validators.required]] + }); + } + + @ViewChild('sf1', { static: false }) sf1!: SFComponent; + schema1: SFSchema = {}; + ui1!: SFUISchema; + + @ViewChild('sf3', { static: false }) sf3!: SFComponent; + schema3: SFSchema = {}; + ui3!: SFUISchema; + + @ViewChild('sf4', { static: false }) sf4!: SFComponent; + schema4: SFSchema = {}; + ui4!: SFUISchema; + + @ViewChild('sf6', { static: false }) sf6!: SFComponent; + schema6: SFSchema = {}; + ui6!: SFUISchema; + + ngOnInit(): void { + this.initSF1(); + this.initSF3(); + this.initSF4(); + this.initSF6(); + this.startInfo = [ + { + detailedAddress: '', + appUserName: '', + contractTelephone: '', + latitude: '', + longitude: '', + province: '', + city: '', + area: '', + type: '1' + } + ]; + this.endInfo = [ + { + detailedAddress: '', + appUserName: '', + contractTelephone: '', + latitude: '', + longitude: '', + province: '', + city: '', + area: '', + type: '2' + } + ] + } + + + + 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: any[]) => (res as any[]).map((i) => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum)))) + .toPromise(); + } else { + return of([]); + } + }, + change: (q: any) => { + this.getRegionCode(q) + }, + visibleIf: { + _$expand: (value: boolean) => value, + }, + } as SFSelectWidgetSchema, + }, + enterpriseProjectId: { + type: 'string', + title: '项目', + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + } as SFSelectWidgetSchema + }, + enterpriseInfoName: { + type: 'string', + title: '网络货运人', + ui: { + widget: 'custom' + }, + default: '天津市怡亚通XXXX有限公司' + }, + deadlineTime: { + title: '截至日期', + type: 'string', + format: 'date-time', + ui: { + placeholder: '请输入', + format: 'yyyy-MM-dd HH:mm:ss' + } + }, + dispatchId: { + type: 'string', + title: '调度员', + enum: [ + { label: '周涛', value: 1 }, + { label: '李诞', value: 2 } + ], + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + optionalHelp: '选择调度员,司机直接联系调度员 ; 不选择,司机直接联系您' + // asyncData: () => + // this.service.loadChildData2('0', '2').pipe( + // map((data: any) => { + // return data.map((m: any) => { + // return { label: m.name, value: m.id }; + // }); + // }), + // ), + // change: (i) => this.updateCategory(i, '/categoryId2'), + } as SFSelectWidgetSchema + } + }, + required: ['deadlineTime'] + }; + this.ui1 = { + '*': { + spanLabelFixed: 90, + grid: { span: 12 } + }, + $enterpriseInfoName: { + grid: { span: 24 } + } + }; + } + + initSF3() { + this.schema3 = { + properties: { + goodsTypeId: { + type: 'string', + title: '货物名称', + enum: [ + { label: '服装', value: '1' }, + { label: '电子产品', value: '2' }, + { label: '其他', value: '3' } + ], + ui: { + widget: 'select', + placeholder: '请选择', + errors: { required: '请填写货物名称' }, + change: (value, data) => { + this.currentGoodsTypeName = data; + } + // asyncData: () => + // this.categoryService.loadChildData2('0', '2').pipe( + // map((data: any) => { + // return data.map((m: any) => { + // return { label: m.name, value: m.id }; + // }); + // }), + // ), + // change: (i) => this.updateCategory(i, '/categoryId2'), + } as SFSelectWidgetSchema + }, + goodsName: { + type: 'string', + title: '', + maxLength: 20, + ui: { + errors: { required: '请填写货物名称' }, + visibleIf: { + goodsType: value => value === '其他' + } + } + } + }, + required: ['goodsTypeId', 'goodsName'] + }; + this.ui3 = { + '*': { + spanLabelFixed: 90, + grid: { span: 12 } + } + }; + } + initSF4() { + this.schema4 = { + properties: { + freightPrice: { + type: 'string', + title: '运费单价', + ui: { + errors: { required: '请选择运费单价' }, + widget: 'custom', + placeholder: '请输入' + } + }, + freightType: { + type: 'string', + title: '', + ui: { + hidden: true + }, + default: '1' + }, + + rule: { + type: 'string', + title: '', + ui: { + widget: 'custom', + errors: { required: '请选择运费取整规则' } + } + }, + settlementBasis: { + type: 'string', + title: '', + ui: { + widget: 'dict-select', + params: { dictKey: 'goodresource:settlement:type' }, + placeholder: '结算依据', + errors: { required: '请选择结算依据' } + } as SFSelectWidgetSchema + }, + 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: '车型/车长', + default: [], + ui: { + widget: 'dict-select', + params: { dictKey: 'car:model' }, + mode: 'multiple', + placeholder: '请选择车型', + errors: { required: '请选择车型' } + } + }, + maxCube: { + type: 'string', + title: '', + default: [], + ui: { + widget: 'dict-select', + params: { dictKey: 'car:length' }, + mode: 'multiple', + placeholder: '请选择车长', + errors: { required: '请选择车长' } + } + } + }, + required: ['weight', 'maxWeight', 'maxCube', 'freightPrice', 'rule', 'settlementBasis'] + }; + this.ui4 = { + '*': { + spanLabelFixed: 90, + grid: { span: 24 } + }, + $freightPrice: { + grid: { span: 8 } + }, + $rule: { + grid: { span: 8 } + }, + $settlementBasis: { + grid: { span: 8 } + }, + $weight: { + grid: { span: 8 } + }, + $volume: { + grid: { span: 8 } + }, + $number: { + grid: { span: 8 } + }, + $maxWeight: { + grid: { span: 12 } + }, + $maxCube: { + grid: { span: 12 } + } + }; + } + + initSF6() { + this.schema6 = { + properties: { + paymentDays: { + type: 'string', + title: '到货后', + ui: { + widget: 'custom', + placeholder: '请输入', + errors: { required: '请输入付款承诺天数' } + } + }, + remarks: { + type: 'string', + title: '备注', + maxLength: 200, + ui: { + widget: 'textarea', + placeholder: '请输入', + autosize: { minRows: 3, maxRows: 3 } + } as SFTextareaWidgetSchema + } + }, + required: ['paymentDays'] + }; + this.ui6 = { + '*': { + spanLabelFixed: 90, + grid: { span: 24 } + } + }; + } + + //指派熟车 + chooseFamifiar(item: any) { + // this.modalService.create({ + // nzTitle: '指派熟车', + // nzContent: PublishGoodsChooseFamifiarComponent, + // nzComponentParams: { + // submitParams: item, + // submitUrl: this.service.$api_save_bulk_assign + // }, + // nzWidth: 1300 + // }); + } + 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 }); + if (this.validateForm1.invalid || !this.sf1.valid || !this.sf3.valid || !this.sf4.valid || !this.sf6.valid) { + return; + } + + // //装卸货信息 + const LoadingList = this.startInfo.concat(this.endInfo); + // // 货物信息 + const goodsInfoList = [ + { + ...this.sf3.value, + goodsTypeName: this.currentGoodsTypeName.label, + goodsName: '电子', + goodsNameId: '1', + ...this.sf4.value, + maxWeight: this.sf4.value.maxWeight.join(','), + maxCube: this.sf4.value.maxCube.join(',') + } + ]; + const params = { + id: '', + ...this.sf1.value, + unLoadingPlaceDTOList: LoadingList, + goodsInfoDTOList: goodsInfoList, + ...this.sf6.value + }; + + let reqUrl = this.service.$api_consignBulk; + if (submitType === 'assign') { + console.log('params', params); + this.chooseFamifiar(params); + } else { + this.service.request(reqUrl, params).subscribe(res => { + if (res) { + this.modalService.create({ + nzTitle: '', + nzContent: PublishSuccessComponent, + nzWidth: 900, + nzFooter: null, + nzComponentParams: { type: 'bulk' } + }); + } else { + this.service.msgSrv.error(res.msg); + } + }); + } + } + // 获取城市列表 + 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); + }); + } + // 打开地图 + 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; + 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; + break; + default: + break; + } + if (this.startInfo[0]?.area && this.endInfo[0]?.area) { + this.amapService.drivingCompute([...this.startInfo], [...this.endInfo]).subscribe(res => { + this.totalDistance = res.distance; + this.totalTime = res.time; + }); + } + } + }); + } + + chooseAddress(index: number, type: string) { + const modalRef = this.modalService.create({ + nzTitle: '选择地址', + nzContent: PublishAddressListComponent, + nzWidth: 900, + nzComponentParams: { spuStatus: '1' }, + nzOnOk: item => { + 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; + } + } + }); + } +} diff --git a/src/app/routes/supply-management/components/bulk/bulk.component.html b/src/app/routes/supply-management/components/bulk/bulk.component.html index a1be75ca..b63ce950 100644 --- a/src/app/routes/supply-management/components/bulk/bulk.component.html +++ b/src/app/routes/supply-management/components/bulk/bulk.component.html @@ -34,12 +34,18 @@ + +
+ + +
+
- + diff --git a/src/app/routes/supply-management/components/bulk/bulk.component.ts b/src/app/routes/supply-management/components/bulk/bulk.component.ts index e78b0689..d50adc8b 100644 --- a/src/app/routes/supply-management/components/bulk/bulk.component.ts +++ b/src/app/routes/supply-management/components/bulk/bulk.component.ts @@ -395,13 +395,19 @@ export class SupplyManagementBulkComponent implements OnInit { */ handleCancel(type: any) { this.isVisible = false -} + } + /** + * 代发货源 + */ + releaseGoods() { + this.router.navigate(['/supply-management/bulk-release']); + } /** -* 审核通过按钮 -*/ -handleOK() { + * 审核通过按钮 + */ + handleOK() { -} + } // 修改单价 modification(item: any) { const modalRef = this.modal.create({ diff --git a/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.html b/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.html index 44c8bd24..78549df3 100644 --- a/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.html +++ b/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.html @@ -222,21 +222,20 @@ -
运费信息
- - -
{{totalFees | currency: '¥'}}
-
+ + ¥{{i.value}} + ¥{{i.value}}(费率:{{currentRate | number: '0.2-4' }}%) + ¥{{i.value}}
- - +
天内支付运费 @@ -250,7 +249,7 @@
- - + +
diff --git a/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.ts b/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.ts index 178dc06b..b828a4b5 100644 --- a/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.ts +++ b/src/app/routes/supply-management/components/onecar-publish/onecar-publish.component.ts @@ -40,6 +40,8 @@ export class SupplyManagementOnecarPublishComponent implements OnInit { totalFees: any; // 总数信息 totalDistance = 0.0; //总里程 totalTime = 0.0; //路程总时间 + currentRate = 0 //实时计算的费率 + npp =false id = this.route.snapshot.params.id; // // 单位 @@ -369,7 +371,6 @@ export class SupplyManagementOnecarPublishComponent implements OnInit { } }; } - initSF6() { this.schema6 = { properties: { @@ -392,6 +393,7 @@ export class SupplyManagementOnecarPublishComponent implements OnInit { ui: { widget: 'dict-select', params: { dictKey: 'receipt:type' }, + containsAllLable:false, placeholder: '请选择', errors: { required: '请选择' }, visibleIf: { @@ -399,56 +401,55 @@ export class SupplyManagementOnecarPublishComponent implements OnInit { } } }, - receiptUserId: { + receiptAddressId: { type: 'string', title: '选择地址', ui: { widget: 'custom', placeholder: '请点击选择收回单地址', - validator: val => (this.sf6?.value?.receiptType === '2' ? [{ keyword: 'required', message: '请点击选择收回单地址' }] : []), + // validator: val => (this.sf6?.value?.receiptType === '2' ? [{ keyword: 'required', message: '请点击选择收回单地址' }] : []), visibleIf: { - receiptType: value => value === 2 + receiptType: value => value === '2' } }, - default: '1212' + default: '' }, - name4: { + receiptUserName: { type: 'string', title: '联系人', ui: { visibleIf: { - receiptType: value => value === 2 + receiptType: value => value === '2' } }, readOnly: true }, - name5: { + phon: { type: 'string', title: '联系电话', ui: { visibleIf: { - receiptType: value => value === 2 + receiptType: value => value === '2' } }, readOnly: true }, - name6: { + area: { type: 'string', title: '所在地区', ui: { visibleIf: { - receiptType: value => value === 2 + receiptType: value => value === '2' } }, readOnly: true }, - receiptAddress: { + address: { type: 'string', title: '详细地址', - maxLength: 20, ui: { visibleIf: { - receiptType: value => value === 2 + receiptType: value => value === '2' } }, readOnly: true @@ -464,7 +465,7 @@ export class SupplyManagementOnecarPublishComponent implements OnInit { } as SFTextareaWidgetSchema } }, - required: ['stateReceipt', 'receiptType'] + required: ['stateReceipt', 'receiptType','receiptAddressId'] }; this.ui6 = { '*': { @@ -480,50 +481,43 @@ export class SupplyManagementOnecarPublishComponent implements OnInit { initSF7() { this.schema7 = { properties: { - prePay: { type: 'number', title: '预付', default: 0, ui: { prefix: '¥', change: ()=> { - this.changeValue(); - }, - } as SFNumberWidgetSchema }, - toPay: { type: 'number', title: '到付', default: 0, ui: { prefix: '¥',change: ()=> { - this.changeValue(); - }, - } as SFNumberWidgetSchema }, - oilCardPay: { type: 'number', title: '油卡', default: 0, ui: { prefix: '¥',change: ()=> {this.changeValue();} , - } as SFNumberWidgetSchema }, - receiptPay: { type: 'number', title: '回单付', default: 0, ui: { prefix: '¥',change: ()=> { - this.changeValue();}, - } as SFNumberWidgetSchema }, - subtotal: { - type: 'string', - title: '小计', + prePay: { + type: 'number', + title: '预付', + default: 0, ui: { - widget: 'custom', - placeholder: '请输入', - }, + prefix: '¥', + change: args => this.payChange() + } as SFNumberWidgetSchema }, - appendFee: { - type: 'string', - title: '附加费', - ui: { - widget: 'custom', - placeholder: '请输入', - }, - + toPay: { + type: 'number', + title: '到付', + default: 0, + ui: { prefix: '¥', change: args => this.payChange() } as SFNumberWidgetSchema }, - totalFee: { - type: 'string', - title: '总费用', - ui: { - widget: 'custom', - placeholder: '请输入' - } + oilCardPay: { + type: 'number', + title: '油卡', + default: 0, + ui: { prefix: '¥', change: args => this.payChange() } as SFNumberWidgetSchema }, + receiptPay: { + type: 'number', + title: '回单付', + default: 0, + ui: { prefix: '¥', 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: '请输入付款承诺天数' } } } }, @@ -536,6 +530,28 @@ export class SupplyManagementOnecarPublishComponent implements OnInit { } }; } + payChange() { + const subtotal = (this.sf7.value.prePay + this.sf7.value.toPay + this.sf7.value.oilCardPay + this.sf7.value.receiptPay) || 0; + const oilCardPay = this.sf7.value.oilCardPay || 0; + 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; + } else { + this.service.msgSrv.error(res.msg); + } + }); + } else { + this.service.msgSrv.error(res.msg); + } + }); + + } + addStartInfo(event: any) { if (this.startInfo.length < 5) { diff --git a/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.html b/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.html index e34bac36..78d34769 100644 --- a/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.html +++ b/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.html @@ -1,3 +1,11 @@ +
diff --git a/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.ts b/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.ts index 0bb34a43..b9257186 100644 --- a/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.ts +++ b/src/app/routes/supply-management/components/onecar-publish/publish-success/publish-success.component.ts @@ -1,11 +1,3 @@ -/* - * @Author: your name - * @Date: 2021-12-14 20:39:34 - * @LastEditTime: 2021-12-14 20:43:18 - * @LastEditors: Please set LastEditors - * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE - * @FilePath: \tms-obc-web\src\app\routes\supply-management\components\onecar-publish\publish-success\publish-success.component.ts - */ import { Component } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { NzMessageService } from 'ng-zorro-antd/message'; @@ -17,6 +9,7 @@ import { NzMessageService } from 'ng-zorro-antd/message'; }) export class PublishSuccessComponent { type = 'onecar'; + resourceObj: any = null; constructor(private route: ActivatedRoute, private router: Router, public msg: NzMessageService) { this.type = route.snapshot.queryParams.type || 'onecar'; } diff --git a/src/app/routes/supply-management/components/release-publish/release-publish.component.html b/src/app/routes/supply-management/components/release-publish/release-publish.component.html new file mode 100644 index 00000000..302e7ee4 --- /dev/null +++ b/src/app/routes/supply-management/components/release-publish/release-publish.component.html @@ -0,0 +1,236 @@ + + +
货源单设置
+
+
+ + {{ i.value }} + +
+
+
+ + +
装卸货信息预计公里数:{{ totalDistance }}km,预计行程耗时:{{ totalTime }}小时
+ +
+
+
+
+ + 装货地 + +
+ + + + + +
+
+
+ + 联系人 +
+ + + + + + +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ + 卸货地 + +
+ + + + + +
+
+
+ + 联系人 +
+ + + + + + +
+
+
+
+
+ +
+
+
+
+
+ + 装货时间 + + + + +
+
+
+ + 卸货时间 + + + + +
+
+ +
+
+ + +
货物信息
+
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ + +
服务信息
+
+
+
+ 购买货运险 + +
+
+
+ 推荐投保,填写货值自动估保费,司机接单后不可退保。详见《投保告知》 +
+
+ + +
+ + + +

注意事项:

+

①请仔细阅读《投保告知》

+

②港澳台、西藏不在投保范围内,不予承保

+

③保价费最低收费2元,请按真实货值填写,录入的所有信息必须确保真实,不如实录入的内容,不承担对应赔偿责任。

+
+
+
+
+
+
+
+ + +
补充信息
+
+
+ + + + + +
+
+
+ + +
运费信息
+
+
+ + ¥{{i.value}} + ¥{{i.value}}(费率:{{currentRate | number: '0.2-4' }}%) + ¥{{i.value}} + +
+
+
+ +
+
+ 天内支付运费 +
+
+
+
+
+
+
+
+ +
+ + + + +
+
diff --git a/src/app/routes/supply-management/components/release-publish/release-publish.component.less b/src/app/routes/supply-management/components/release-publish/release-publish.component.less new file mode 100644 index 00000000..2af010e4 --- /dev/null +++ b/src/app/routes/supply-management/components/release-publish/release-publish.component.less @@ -0,0 +1,30 @@ +:host { + ::ng-deep { + nz-input-number{width: 100%;} + } +} + +.tip-font { + margin-left: 16px; + font-weight: 500; + font-size: 12px; +} + +.card-title { + margin-bottom: 24px; + font-weight: bold; + font-size: 16px; +} + +.align-center { + display: flex; + align-items: center; + justify-content: center; +} + +#container { + width: 300px; + height: 180px; +} + + diff --git a/src/app/routes/supply-management/components/release-publish/release-publish.component.ts b/src/app/routes/supply-management/components/release-publish/release-publish.component.ts new file mode 100644 index 00000000..626b3cfe --- /dev/null +++ b/src/app/routes/supply-management/components/release-publish/release-publish.component.ts @@ -0,0 +1,811 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { cacheConf } from '@conf/cache.conf'; +import { + SFArrayWidgetSchema, + SFComponent, + SFNumberWidgetSchema, + SFSchema, + SFSchemaEnum, + SFSelectWidgetSchema, + SFTextareaWidgetSchema, + SFUISchema +} from '@delon/form'; +import { SettingsService, _HttpClient } from '@delon/theme'; +import { EACacheService } from '@shared'; +import format from 'date-fns/format'; +import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal'; +import { of } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { AmapPoiPickerComponent, AmapService } from 'src/app/shared/components/amap'; +import { SupplyManagementService } from '../../services/supply-management.service'; +import { SupplyManagementVehicleAssignedCarComponent } from '../assigned-car/assigned-car.component'; +import { PublishAddressListComponent } from '../onecar-publish/address-list/address-list.component'; +import { PublishSuccessComponent } from '../onecar-publish/publish-success/publish-success.component'; + +@Component({ + selector: 'app-publish-goods-onecar-publish', + templateUrl: './release-publish.component.html', + styleUrls: ['./release-publish.component.less'] +}) +export class SupplyManagementReleasePublishComponent implements OnInit { + // 环境信息 appId、tenantId + envInfo = this.eaCacheSrv.get(cacheConf.env); + + validateForm1: FormGroup; + sf1data: any; // 货源单设置回显 + sf3data: any; // 货源单设置回显 + sf4data: any; // 货源单设置回显 + sf5data: any; // 货源单设置回显 + sf6data: any; // 货源单设置回显 + sf7data: any; // 货源单设置回显 + creatTime: any; // 货源单设置回显 + modifyTime: any; // 货源单设置回显 + totalFees: any; // 总数信息 + id = ''; + type = 'add'; + + // // 单位 + unit1 = '吨'; + unit2 = '方'; + unit3 = '保价费金额'; + startInfo: any[] = []; + endInfo: any[] = []; + totalDistance = 0.0; //总里程 + totalTime = 0.0; //路程总时间 + + currentGoodsTypeName: any; + currentRate = 0 //实时计算的费率 + + // formatterRmb = (value: number): string => `¥ ${value}`; + // parserRmb = (value: string): string => value.replace('¥ ', ''); + constructor( + private http: _HttpClient, + fb: FormBuilder, + private modalService: NzModalService, + private settingSrv: SettingsService, + public service: SupplyManagementService, + private router: Router, + private route: ActivatedRoute, + private eaCacheSrv: EACacheService, + private amapService: AmapService + ) { + this.validateForm1 = fb.group({ + loadingTime: [null, [Validators.required]], + unloadingTime: [null, [Validators.required]] + }); + } + + @ViewChild('sf1', { static: false }) sf1!: SFComponent; + schema1: SFSchema = {}; + ui1!: 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 { + this.initSF1(); + this.initSF3(); + this.initSF4(); + this.initSF5(); + this.initSF6(); + this.initSF7(); + this.addStartInfo(); + this.addEndInfo(); + } + + 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) + }, + visibleIf: { + _$expand: (value: boolean) => value, + }, + } as SFSelectWidgetSchema, + }, + enterpriseProjectId: { + type: 'string', + title: '项目', + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + } as SFSelectWidgetSchema + }, + enterpriseInfoName: { + type: 'string', + title: '网络货运人', + ui: { + widget: 'custom' + }, + default: '天津市怡亚通XXXX有限公司' + }, + externalResourceCode: { + type: 'string', + title: '外部货源号', + maxLength: 30, + ui: { + placeholder: '请输入' + } + }, + dispatchId: { + type: 'string', + title: '调度员', + enum: [ + { label: '周涛', value: 1 }, + { label: '李诞', value: 2 } + ], + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + optionalHelp: '选择调度员,司机直接联系调度员 ; 不选择,司机直接联系您' + // asyncData: () => + // this.service.loadChildData2('0', '2').pipe( + // map((data: any) => { + // return data.map((m: any) => { + // return { label: m.name, value: m.id }; + // }); + // }), + // ), + // change: (i) => this.updateCategory(i, '/categoryId2'), + } as SFSelectWidgetSchema + } + } + }; + this.ui1 = { + '*': { + spanLabelFixed: 90, + grid: { span: 12 } + }, + $enterpriseInfoName: { + 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); + }); + } + initSF3() { + this.schema3 = { + properties: { + goodsTypeId: { + type: 'string', + title: '货物名称', + enum: [ + { label: '服装', value: '1' }, + { label: '电子产品', value: '2' }, + { label: '其他', value: '3' } + ], + ui: { + widget: 'select', + placeholder: '请选择', + errors: { required: '请选择货物名称' }, + change: (value, data) => { + this.currentGoodsTypeName = data; + } + // asyncData: () => + // this.categoryService.loadChildData2('0', '2').pipe( + // map((data: any) => { + // return data.map((m: any) => { + // return { label: m.name, value: m.id }; + // }); + // }), + // ), + // change: (i) => this.updateCategory(i, '/categoryId2'), + } as SFSelectWidgetSchema + }, + goodsName: { + type: 'string', + title: '', + maxLength: 20, + ui: { + errors: { required: '请填写货物名称' }, + visibleIf: { + goodsTypeId: value => value === '其他' + } + } + } + }, + required: ['goodsTypeId', 'goodsName'] + }; + 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' + } + } + } + }; + this.ui5 = { + '*': { + spanLabelFixed: 90, + grid: { span: 24 } + } + }; + } + + 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' }, + containsAllLable:false, + placeholder: '请选择', + errors: { required: '请选择' }, + visibleIf: { + stateReceipt: value => value === true + } + } + }, + receiptAddressId: { + type: 'string', + title: '选择地址', + ui: { + widget: 'custom', + placeholder: '请点击选择收回单地址', + // validator: val => (this.sf6?.value?.receiptType === '2' ? [{ keyword: 'required', message: '请点击选择收回单地址' }] : []), + visibleIf: { + receiptType: value => value === '2' + } + }, + default: '' + }, + receiptUserName: { + type: 'string', + title: '联系人', + ui: { + visibleIf: { + receiptType: value => value === '2' + } + }, + readOnly: true + }, + phon: { + type: 'string', + title: '联系电话', + ui: { + visibleIf: { + receiptType: value => value === '2' + } + }, + readOnly: true + }, + area: { + type: 'string', + title: '所在地区', + ui: { + visibleIf: { + receiptType: value => value === '2' + } + }, + readOnly: true + }, + address: { + type: 'string', + title: '详细地址', + ui: { + visibleIf: { + receiptType: value => value === '2' + } + }, + readOnly: true + }, + remarks: { + type: 'string', + title: '备注', + maxLength: 200, + ui: { + widget: 'textarea', + placeholder: '请输入', + autosize: { minRows: 3, maxRows: 3 } + } as SFTextareaWidgetSchema + } + }, + required: ['stateReceipt', 'receiptType','receiptAddressId'] + }; + this.ui6 = { + '*': { + spanLabelFixed: 90, + grid: { span: 24 } + } + }; + } + + initSF7() { + this.schema7 = { + properties: { + prePay: { + type: 'number', + title: '预付', + default: 0, + ui: { + prefix: '¥', + change: args => this.payChange() + } as SFNumberWidgetSchema + }, + toPay: { + type: 'number', + title: '到付', + default: 0, + ui: { prefix: '¥', change: args => this.payChange() } as SFNumberWidgetSchema + }, + oilCardPay: { + type: 'number', + title: '油卡', + default: 0, + ui: { prefix: '¥', change: args => this.payChange() } as SFNumberWidgetSchema + }, + receiptPay: { + type: 'number', + title: '回单付', + default: 0, + ui: { prefix: '¥', 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 } + } + }; + } + + payChange() { + const subtotal = (this.sf7.value.prePay + this.sf7.value.toPay + this.sf7.value.oilCardPay + this.sf7.value.receiptPay) || 0; + const oilCardPay = this.sf7.value.oilCardPay || 0; + this.service.request(this.service.$api_getCalculatedSurcharge+`?totalFreight=${subtotal}&fuelCardAmount=${oilCardPay}`).subscribe((res: any) => { + 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: any) => { + if (res) { + this.currentRate = res.rate; + } else { + this.service.msgSrv.error(res.msg); + } + }); + } else { + this.service.msgSrv.error(res.msg); + } + }); + + } + + addStartInfo() { + 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) { + this.startInfo.splice(index, 1); + this.validateForm1.removeControl(`loadAddress${index}`); + this.validateForm1.removeControl(`loadName${index}`); + this.validateForm1.removeControl(`loadPhone${index}`); + } + + addEndInfo() { + 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) { + this.endInfo.splice(index, 1); + this.validateForm1.removeControl(`unloadAddress${index}`); + this.validateForm1.removeControl(`unloadName${index}`); + this.validateForm1.removeControl(`unloadPhone${index}`); + } + + //指派熟车 + chooseFamifiar(item: any) { + const modalRef = this.modalService.create({ + nzTitle: '指派熟车', + nzContent: SupplyManagementVehicleAssignedCarComponent, + nzWidth: 1200, + nzComponentParams: { + status: 'new', + url: this.service.$api_save_assign_bulk, + params: item + }, + nzFooter: null + }); + modalRef.afterClose.subscribe(result => { + if (result) { + this.openFinishPage(result); + } + }); + } + submit(submitType: string): void { + Object.keys(this.validateForm1.controls).forEach(key => { + this.validateForm1.controls[key].markAsDirty(); + this.validateForm1.controls[key].updateValueAndValidity(); + }); + this.sf3.validator({ emitError: true }); + this.sf4.validator({ emitError: true }); + this.sf6.validator({ emitError: true }); + this.sf7.validator({ emitError: true }); + if (this.validateForm1.invalid || !this.sf3.valid || !this.sf4.valid || !this.sf6.valid || !this.sf7.valid) { + return; + } + + //装卸货信息 + const LoadingList = this.startInfo.concat(this.endInfo); + // 货物信息 + const goodsInfoList = [ + { + ...this.sf3.value, + goodsTypeName: this.currentGoodsTypeName.label, + goodsName: '电子', + goodsNameId: '1', + ...this.sf4.value, + maxWeight: this.sf4.value.maxWeight.join(','), + maxCube: this.sf4.value.maxCube.join(',') + } + ]; + // 运费信息 + const expenseList = [ + { expenseCode: 'PRE', expenseName: '预付', price: this.sf7.value.prePay, id: this.sf7data?.prePayId ? this.sf7data?.prePayId : '' }, + { expenseCode: 'RECE', expenseName: '到付', price: this.sf7.value.toPay, id: this.sf7data?.toPayId ? this.sf7data?.toPayId : '' }, + { + expenseCode: 'OIL', + expenseName: '油卡', + price: this.sf7.value.oilCardPay, + id: this.sf7data?.oilCardPayId ? this.sf7data?.oilCardPayId : '' + }, + { + expenseCode: 'BACK', + expenseName: '回单付', + price: this.sf7.value.receiptPay, + id: this.sf7data?.receiptPayId ? this.sf7data?.receiptPayId : '' + } + ]; + const params = { + id: '', + ...this.sf1.value, + unLoadingPlaceDTOList: LoadingList, + unloadingTime: format(this.validateForm1.value.unloadingTime, 'yyyy-MM-dd HH:mm:ss'), + loadingTime: format(this.validateForm1.value.loadingTime, 'yyyy-MM-dd HH:mm:ss'), + goodsInfoDTOList: goodsInfoList, + ...this.sf5.value, + ...this.sf6.value, + expenseDTOList: expenseList, + paymentDays: this.sf7.value.paymentDays + }; + + let reqUrl = this.service.$api_consignWhole; + if (submitType === 'assign') { + this.chooseFamifiar(params); + return; + } + + this.service.request(reqUrl, params).subscribe((res: any) => { + if (res) { + this.openFinishPage(); + } else { + this.service.msgSrv.error(res.msg); + } + }); + } + + // 打开地图 + 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; + 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; + break; + default: + break; + } + + if (this.startInfo[0]?.area && this.endInfo[0]?.area) { + this.amapService.drivingCompute([...this.startInfo], [...this.endInfo]).subscribe(res => { + this.totalDistance = res.distance; + this.totalTime = res.time; + }); + } + } + }); + } + + backBillChange() { + const modalRef = this.modalService.create({ + nzTitle: '选择收回单地址', + nzContent: PublishAddressListComponent, + nzWidth: 900, + nzComponentParams: { spuStatus: '2' }, + nzOnOk: item => { + const data = item.seleteData; + if (JSON.stringify(data) === '{}') return; + this.sf6.setValue('/receiptAddressId', data.id); + this.sf6.setValue('/receiptUserName', data.contactName); + this.sf6.setValue('/phon', data.contactTelephone); + this.sf6.setValue('/area', `${data.province}-${data.city}-${data.area}`); + this.sf6.setValue('/address', data.detailedAddress); + } + }); + } + + chooseAddress(index: number, type: string) { + const modalRef = this.modalService.create({ + nzTitle: '选择地址', + nzContent: PublishAddressListComponent, + nzWidth: 900, + nzComponentParams: { spuStatus: '1' }, + nzOnOk: item => { + 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; + } + } + }); + } + + + + // 打开下单完成页面 + openFinishPage(resourceObj: any = null) { + this.modalService.create({ + nzTitle: '', + nzContent: PublishSuccessComponent, + nzWidth: 900, + nzFooter: null, + nzComponentParams: { type: 'onecar', resourceObj } + }); + } + + /** + * 取消 + */ + close() { + window.history.go(-1); + } +} diff --git a/src/app/routes/supply-management/components/vehicle/vehicle.component.html b/src/app/routes/supply-management/components/vehicle/vehicle.component.html index ad829a47..cadd966d 100644 --- a/src/app/routes/supply-management/components/vehicle/vehicle.component.html +++ b/src/app/routes/supply-management/components/vehicle/vehicle.component.html @@ -1,3 +1,11 @@ +
@@ -67,7 +75,7 @@
- +
diff --git a/src/app/routes/supply-management/components/vehicle/vehicle.component.ts b/src/app/routes/supply-management/components/vehicle/vehicle.component.ts index 7958f967..3251f184 100644 --- a/src/app/routes/supply-management/components/vehicle/vehicle.component.ts +++ b/src/app/routes/supply-management/components/vehicle/vehicle.component.ts @@ -207,6 +207,12 @@ export class SupplyManagementVehicleComponent implements OnInit { sta: 2 } }); + } + /** + * 代发货源 + */ + releaseGoods() { + this.router.navigate(['/supply-management/vehicle-release']); } /** * 取消货源 diff --git a/src/app/routes/supply-management/services/supply-management.service.ts b/src/app/routes/supply-management/services/supply-management.service.ts index a7297b5b..3350d79a 100644 --- a/src/app/routes/supply-management/services/supply-management.service.ts +++ b/src/app/routes/supply-management/services/supply-management.service.ts @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-12-03 11:10:14 - * @LastEditTime: 2021-12-28 10:15:55 + * @LastEditTime: 2021-12-28 19:53:40 * @LastEditors: Please set LastEditors * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: \tms-obc-web\src\app\routes\supply-management\services\supply-management.service.ts @@ -46,7 +46,14 @@ export class SupplyManagementService extends BaseService { public $api_enterpriceList = '/api/mdc/cuc/enterpriseInfo/operate/enterpriceList'; // 取消货源 public $api_cancelSource = '/api/sdc/goodsResourceOperate/cancelSource'; - + // 整车计算附加费 + $api_getCalculatedSurcharge = `/api/sdc/expense/getCalculatedSurcharge`; + // 整车计算附加费率 + $api_getcalculatedServiceRate = `/api/sdc/expense/getcalculatedServiceRate`; + // 代发整车货源 + $api_consignWhole = `/api/sdc/goodsResourceOperate/consignWhole`; + // 代发大宗货源 + $api_consignBulk = `/api/sdc/goodsResourceOperate/consignBulk`; diff --git a/src/app/routes/supply-management/supply-management-routing.module.ts b/src/app/routes/supply-management/supply-management-routing.module.ts index 79aab0ad..ba78a636 100644 --- a/src/app/routes/supply-management/supply-management-routing.module.ts +++ b/src/app/routes/supply-management/supply-management-routing.module.ts @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-12-03 11:10:14 - * @LastEditTime: 2021-12-27 15:25:01 + * @LastEditTime: 2021-12-28 20:07:09 * @LastEditors: Please set LastEditors * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: \tms-obc-web\src\app\routes\supply-management\supply-management-routing.module.ts @@ -16,13 +16,18 @@ import { SupplyManagementAddDriversComponent } from './components/add-drivers/ad import { SupplyManagementOnecarPublishComponent } from './components/onecar-publish/onecar-publish.component'; import { SupplyManagementBulkPublishComponent } from './components/bulk-publish/bulk-publish.component'; import { SupplyManagementBulkDetailComponent } from './components/bulk-detail/bulk-detail.component'; +import { SupplyManagementReleasePublishComponent } from './components/release-publish/release-publish.component'; +import { SupplyManagementBulkReleasePublishComponent } from './components/bulk-release-publish/bulk-release-publish.component'; const routes: Routes = [ { path: 'index', component: SupplyManagementIndexComponent }, { path: 'bulk-detail/:id', component: SupplyManagementBulkDetailComponent }, { path: 'vehicle-detail/:id', component: SupplyManagementVehicleDetailComponent }, + { path: 'vehicle-detail/:id', component: SupplyManagementVehicleDetailComponent }, { path: 'add-drivers', component: SupplyManagementAddDriversComponent }, { path: 'vehicle-amend/:id', component: SupplyManagementOnecarPublishComponent }, + { path: 'vehicle-release', component: SupplyManagementReleasePublishComponent }, + { path: 'bulk-release', component: SupplyManagementBulkReleasePublishComponent }, { path: 'bulk-amend/:id', component: SupplyManagementBulkPublishComponent }, ]; diff --git a/src/app/routes/supply-management/supply-management.module.ts b/src/app/routes/supply-management/supply-management.module.ts index 9f00c1cb..cbcc0a68 100644 --- a/src/app/routes/supply-management/supply-management.module.ts +++ b/src/app/routes/supply-management/supply-management.module.ts @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-12-03 11:10:14 - * @LastEditTime: 2021-12-21 11:04:45 + * @LastEditTime: 2021-12-28 20:31:23 * @LastEditors: Please set LastEditors * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: \tms-obc-web\src\app\routes\supply-management\supply-management.module.ts @@ -29,6 +29,8 @@ import { PublishSuccessComponent } from './components/onecar-publish/publish-suc import { CarAddDriverComponent } from './components/add-driver/add-driver.component'; import { CarAddmodalComponent } from './components/addmodal/addmodal.component'; import { SupplyManagementBulkDetailComponent } from './components/bulk-detail/bulk-detail.component'; +import { SupplyManagementReleasePublishComponent } from './components/release-publish/release-publish.component'; +import { SupplyManagementBulkReleasePublishComponent } from './components/bulk-release-publish/bulk-release-publish.component'; const COMPONENTS: Type[] = [ @@ -51,7 +53,9 @@ const COMPONENTS: Type[] = [ PublishSuccessComponent, CarAddDriverComponent, CarAddmodalComponent, - SupplyManagementBulkDetailComponent + SupplyManagementBulkDetailComponent, + SupplyManagementReleasePublishComponent, + SupplyManagementBulkReleasePublishComponent ]; @NgModule({ diff --git a/src/style-icons.ts b/src/style-icons.ts index 9ec6b095..fe76ee4e 100644 --- a/src/style-icons.ts +++ b/src/style-icons.ts @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-11-29 20:03:55 - * @LastEditTime: 2021-12-28 09:33:19 + * @LastEditTime: 2021-12-28 20:35:15 * @LastEditors: Please set LastEditors * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: \tms-obc-web\src\style-icons.ts @@ -23,7 +23,11 @@ import { CheckCircleOutline, QuestionCircleFill, LeftOutline, - FileDoneOutline + FileDoneOutline, + MenuOutline, + SwapOutline, + EnvironmentOutline, + ExclamationCircleOutline } from '@ant-design/icons-angular/icons'; export const ICONS = [ @@ -41,5 +45,9 @@ export const ICONS = [ CheckCircleOutline, QuestionCircleFill, LeftOutline, - FileDoneOutline + FileDoneOutline, + MenuOutline, + SwapOutline, + EnvironmentOutline, + ExclamationCircleOutline ];