219 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /*
 | ||
|  * @Description  :
 | ||
|  * @Version      : 1.0
 | ||
|  * @Author       : Shiming
 | ||
|  * @Date         : 2021-12-14 14:03:07
 | ||
|  * @LastEditors  : Shiming
 | ||
|  * @LastEditTime : 2022-01-24 17:04:28
 | ||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\modal\\bulk\\update-freight\\update-freight.component.ts
 | ||
|  * Copyright (C) 2022 huzhenhong. All rights reserved.
 | ||
|  */
 | ||
| import { Component, Input, OnInit, ViewChild } from '@angular/core';
 | ||
| import { SFComponent, SFNumberWidgetSchema, SFSchema, SFSelectWidgetSchema, SFStringWidgetSchema, SFTextWidgetSchema } from '@delon/form';
 | ||
| import { NzModalRef } from 'ng-zorro-antd/modal';
 | ||
| import { Subscription } from 'rxjs';
 | ||
| import { OrderManagementService } from '../../../services/order-management.service';
 | ||
| 
 | ||
| @Component({
 | ||
|   selector: 'app-order-management-update-freight',
 | ||
|   templateUrl: './update-freight.component.html',
 | ||
|   styleUrls: ['./update-freight.component.less']
 | ||
| })
 | ||
| export class UpdateFreightComponent implements OnInit {
 | ||
|   @ViewChild('sf', { static: false }) sf!: SFComponent;
 | ||
|   schema!: SFSchema;
 | ||
| 
 | ||
|   @Input()
 | ||
|   data: any;
 | ||
|   freightTypeOptions: any;
 | ||
| 
 | ||
|   calculateSub!: Subscription;
 | ||
|   constructor(private service: OrderManagementService, private modal: NzModalRef) {}
 | ||
| 
 | ||
|   ngOnInit(): void {
 | ||
|     this.schema = this.initSF(this.data);
 | ||
|     this.service.getDictByKey('freight:type').subscribe(res => {
 | ||
|       this.freightTypeOptions = res;
 | ||
|     });
 | ||
|   }
 | ||
| 
 | ||
|   /**
 | ||
|    * 初始化表单
 | ||
|    */
 | ||
|   private initSF(data: any): SFSchema {
 | ||
|     return {
 | ||
|       properties: {
 | ||
|         freightPrice: {
 | ||
|           type: 'number',
 | ||
|           title: '运费单价',
 | ||
|           ui: {
 | ||
|             placeholder: '请输入',
 | ||
|             widget: 'custom',
 | ||
|             grid: { span: 12 },
 | ||
|             change: (val: any) => this.changeNumVal()
 | ||
|           } as SFStringWidgetSchema,
 | ||
|           default: data.freightPrice
 | ||
|         },
 | ||
|         rule: {
 | ||
|           title: '',
 | ||
|           type: 'string',
 | ||
|           default: data.rule,
 | ||
|           enum: [
 | ||
|             { label: '保留小数', value: '1' },
 | ||
|             { label: '抹除小数', value: '2' },
 | ||
|             { label: '抹除个数', value: '3' }
 | ||
|           ],
 | ||
|           ui: {
 | ||
|             widget: 'select',
 | ||
|             spanLabelFixed: 10,
 | ||
|             grid: {
 | ||
|               span: 10
 | ||
|             }
 | ||
|           } as SFSelectWidgetSchema
 | ||
|         },
 | ||
|         settlementBasis: {
 | ||
|           title: '结算依据',
 | ||
|           type: 'string',
 | ||
|           default: data.settlementBasis,
 | ||
|           ui: {
 | ||
|             widget: 'dict-select',
 | ||
|             params: { dictKey: 'goodresource:settlement:type' },
 | ||
|             containsAllLabel: false,
 | ||
|             placeholder: '结算依据',
 | ||
|             errors: { required: '请选择结算依据' },
 | ||
|             grid: {span: 12}
 | ||
|           } as SFSelectWidgetSchema
 | ||
|         },
 | ||
|         blank1: {
 | ||
|           title: '',
 | ||
|           type: 'string',
 | ||
|           ui: { widget: 'text', grid: { span: 12 }, class: 'input-back' },
 | ||
|           default: ' '
 | ||
|         },
 | ||
|         freightType: {
 | ||
|           title: '',
 | ||
|           type: 'string',
 | ||
|           ui: { hidden: true },
 | ||
|           default: data.freightType
 | ||
|         },
 | ||
|         loadWeight: {
 | ||
|           type: 'number',
 | ||
|           title: '装货重量',
 | ||
|           default: data.loadWeight || 0,
 | ||
|           minimum: 0,
 | ||
|           maximum: 99999,
 | ||
|           ui: {
 | ||
|             unit: '吨',
 | ||
|             placeholder: '请输入',
 | ||
|             grid: {
 | ||
|               span: 12
 | ||
|             },
 | ||
|             hideStep: true,
 | ||
|             change: (val: any) => this.changeNumVal()
 | ||
|           } as SFNumberWidgetSchema
 | ||
|         },
 | ||
|         loadVolume: {
 | ||
|           type: 'number',
 | ||
|           title: '装货体积',
 | ||
|           default: data.loadVolume || 0,
 | ||
|           minimum: 0,
 | ||
|           maximum: 99999,
 | ||
|           ui: {
 | ||
|             unit: '方',
 | ||
|             placeholder: '请输入',
 | ||
|             grid: {
 | ||
|               span: 12
 | ||
|             },
 | ||
|             hideStep: true,
 | ||
|             change: (val: any) => this.changeNumVal()
 | ||
|           } as SFNumberWidgetSchema
 | ||
|         },
 | ||
|         settlementWeight: {
 | ||
|           type: 'number',
 | ||
|           title: '卸货重量',
 | ||
|           default: data.settlementWeight || 0,
 | ||
|           minimum: 0,
 | ||
|           maximum: 99999,
 | ||
|           ui: {
 | ||
|             unit: '吨',
 | ||
|             placeholder: '请输入',
 | ||
|             grid: {
 | ||
|               span: 12
 | ||
|             },
 | ||
|             hideStep: true,
 | ||
|             change: (val: any) => this.changeNumVal()
 | ||
|           } as SFNumberWidgetSchema
 | ||
|         },
 | ||
|         settlementVolume: {
 | ||
|           type: 'number',
 | ||
|           title: '卸货体积',
 | ||
|           default: data.settlementVolume || 0,
 | ||
|           minimum: 0,
 | ||
|           maximum: 99999,
 | ||
|           ui: {
 | ||
|             unit: '方',
 | ||
|             placeholder: '请输入',
 | ||
|             grid: {
 | ||
|               span: 12
 | ||
|             },
 | ||
|             hideStep: true,
 | ||
|             change: (val: any) => this.changeNumVal()
 | ||
|           } as SFNumberWidgetSchema
 | ||
|         },
 | ||
|         changeCause: {
 | ||
|           title: '审核备注',
 | ||
|           type: 'string',
 | ||
|           maxLength: 100,
 | ||
|           default: data.changeCause,
 | ||
|           ui: {
 | ||
|             widget: 'textarea',
 | ||
|             span: 24,
 | ||
|             placeholder: '选填,最多不超过100字',
 | ||
|             autosize: {
 | ||
|               minRows: 3,
 | ||
|               maxRows: 5
 | ||
|             }
 | ||
|           } as SFTextWidgetSchema
 | ||
|         },
 | ||
|       },
 | ||
|       required: ['freightPrice', 'settlementBasis']
 | ||
|     };
 | ||
|   }
 | ||
| 
 | ||
|   changeNumVal() {
 | ||
|     if (this.calculateSub) {
 | ||
|       this.calculateSub.unsubscribe();
 | ||
|     }
 | ||
|     const params =  { billId: this.data.billId, changeCause: this.sf.value.changeCause, dto: {...this.sf.value}  }
 | ||
|     this.calculateSub = this.service
 | ||
|       .request(this.service.$api_calculate_cost, params)
 | ||
|       .subscribe((res: any) => {
 | ||
|         if (res) {
 | ||
|           Object.assign(this.data, {
 | ||
|             totalFreight: res.totalFreight,
 | ||
|             freight: res.freight,
 | ||
|             surcharge: res.surcharge
 | ||
|           });
 | ||
|         }
 | ||
|       });
 | ||
|   }
 | ||
| 
 | ||
|   save(value: any): void {
 | ||
|     if (!this.sf.valid) {
 | ||
|       this.sf.validator({ emitError: true });
 | ||
|       return;
 | ||
|     }
 | ||
|     const params =  { billId: this.data.billId, changeCause: this.sf.value.changeCause, dto: {...this.sf.value}  }
 | ||
|     this.service.request(this.service.$api_change_bulk,params).subscribe((res: any) => {
 | ||
|       if (res) {
 | ||
|         this.service.msgSrv.success('变更运费成功!');
 | ||
|         this.modal.destroy(true);
 | ||
|       }
 | ||
|     });
 | ||
|   }
 | ||
| 
 | ||
|   close(): void {
 | ||
|     this.modal.destroy();
 | ||
|   }
 | ||
| }
 |