import { Component, OnInit, ViewChild } from '@angular/core'; import { STColumn, STComponent } from '@delon/abc/st'; import { SFComponent, SFDateWidgetSchema, SFSchema, SFSchemaEnum, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; import { ModalHelper, _HttpClient } from '@delon/theme'; import { SearchDrawerService, ShipperBaseService } from '@shared'; import { NzModalService } from 'ng-zorro-antd/modal'; import { of } from 'rxjs'; import { map } from 'rxjs/operators'; import { BasicTableComponent } from 'src/app/routes/commom'; import { VehicleSureArriveComponent } from 'src/app/routes/order-management/modal/vehicle/sure-arrive/sure-arrive.component'; import { VehicleSureDepartComponent } from 'src/app/routes/order-management/modal/vehicle/sure-depart/sure-depart.component'; import { WaybillManagementServe } from '../../services/waybill-management.service'; @Component({ selector: 'app-supply-management-bulk', templateUrl: './bulk.component.html', styleUrls: ['../../../commom/less/commom-table.less','./bulk.component.less'] }) export class WaybillManagementBulkComponent extends BasicTableComponent implements OnInit { uiView: SFUISchema = {}; schemaView: SFSchema = {}; @ViewChild('st') private readonly st!: STComponent; columns: STColumn[] = []; resourceStatus: any; tabs = { signQuantity: 0, cancelQuantity: 0, receivedQuantity: 0, totalQuantity: 0, compolatelQuantity: 0, deltQuantity: 0 }; constructor( public service: WaybillManagementServe, private modal: NzModalService, public shipperservice: ShipperBaseService, public searchDrawerService: SearchDrawerService ) { super(searchDrawerService); } /** * 查询参数 */ get reqParams() { const a: any = {}; if (this.resourceStatus) { a.wayBillStatus = this.resourceStatus; } const params: any = Object.assign({}, this.sf?.value || {}); delete params._$expand; return { ...a, ...params, createTime: { start: this.sf?.value?.createTime?.[0] || '', end: this.sf?.value?.createTime?.[1] || '' } }; } get selectedRows() { return this.st?.list.filter(item => item.checked) || []; } ngOnInit(): void { this.initSF(); this.initST(); this.getGoodsSourceStatistical(); } /** * 初始化查询表单 */ initSF() { this.schema = { properties: { _$expand: { type: 'boolean', ui: { hidden: true } }, wayBillCode: { type: 'string', title: '运单号', ui: { placeholder: '最多100个运单,空号隔开' } }, billCode: { type: 'string', title: '订单号', ui: { placeholder: '最多100个单号,空号隔开' } }, resourceCode: { type: 'string', title: '货源编号' }, shipperAppUserId: { type: 'string', title: '货主', ui: { widget: 'select', serverSearch: true, searchDebounceTime: 300, searchLoadingText: '搜索中...', allowClear: true, onSearch: (q: any) => { console.log(q); let str = q.replace(/^\s+|\s+$/g, ''); if (str) { return this.service .request(this.service.$api_enterpriceList, { enterpriseName: str }) .pipe(map((res: any) => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum)))) .toPromise(); } else { return of([]); } } } as SFSelectWidgetSchema }, loadingPlace: { type: 'string', title: '装货地' }, dischargePlace: { type: 'string', title: '卸货地' }, driverName: { title: '承运司机', type: 'string' }, licenseCarNo: { title: '车牌号', type: 'string' }, carCaptainName: { title: '车队长', type: 'string' }, paymentstatus: { title: '支付状态', type: 'string', ui: { widget: 'dict-select', params: { dictKey: 'overall:payment:status' }, containsAllLabel: true } as SFSelectWidgetSchema }, serviceType: { title: '服务类型', type: 'string', ui: { widget: 'dict-select', containsAllLabel: true, params: { dictKey: 'service:type' } } as SFSelectWidgetSchema }, riskStatus: { type: 'string', title: '是否风险单', enum: [ { label: '全部', value: '' }, { label: '是', value: '3' }, { label: '否', value: '1' } ], ui: { widget: 'select', allowClear: true, placeholder: '请选择' } }, enterpriseInfoId: { type: 'string', title: '网络货运人', ui: { widget: 'select', placeholder: '请选择', allowClear: true, asyncData: () => this.shipperservice.getNetworkFreightForwarder() } }, createTime: { title: '创建时间', type: 'string', ui: { widget: 'date', mode: 'range', format: 'yyyy-MM-dd', allowClear: true } as SFDateWidgetSchema } }, type: 'object' }; } /** * 初始化数据列表 */ initST() { this.columns = [ { title: '', type: 'checkbox', fixed: 'left', width: '50px', className: 'text-center' }, { title: '运单号', width: '180px', fixed: 'left', className: 'text-left', render: 'wayBillCode' }, { title: '运费明细', width: '250px', className: 'text-right', render: 'billExpenseDetails' }, { title: '录单员', render: 'createUserName', width: '200px', className: 'text-left' }, { title: '网络货运人', index: 'enterpriseInfoName', width: '220px', className: 'text-left' }, { title: '货主', index: 'shipperAppUserName', width: '180px', className: 'text-left' }, { title: '关联订单号', index: 'billCode', width: '180px', className: 'text-left' }, { title: '货源编号', index: 'resourceCode', width: '180px', className: 'text-left' }, { title: '装货地', index: 'loadingPlace', width: '220px', className: 'text-left' }, { title: '卸货地', className: 'text-left', width: '220px', index: 'dischargePlace' }, { title: '货物信息', className: 'text-left', width: '250px', render: 'goodsInfos' }, { title: '运费单价', className: 'text-right', width: '150px', render: 'freightPrice' }, { title: '接单数量', index: 'orderReceivingQuantity', width: '200px', className: 'text-left' }, { title: '结算数量', index: '结算数量', width: '200px', className: 'text-left', format: (item: any) => `${item.settlementWeight || ''}` }, { title: '承运司机', className: 'text-left', width: '250px', render: 'driverName' }, { title: '车队长', className: 'text-left', width: '200px', render: 'payeeName' }, { title: '装卸货时间', className: 'text-left', width: '200px', render: 'loadingTime' }, { title: '创建时间', width: '180px', className: 'text-left', index: 'createTime' }, { title: '操作', fixed: 'right', width: '110px', className: 'text-center', buttons: [ { text: '确认发车', click: _record => this.sureDepart(_record), iif: item => item.wayBillStatus == '2', acl: { ability: ['WAYBILL-BULK-insertBulkStartCarInfo'] } }, { text: '确认到车', click: _record => this.sureArrive(_record), iif: item => item.wayBillStatus == '3', acl: { ability: ['WAYBILL-BULK-insertBulkUnloadCarInfo'] } } ] } ]; } search() { this.st?.load(1); this.getGoodsSourceStatistical(); } selectChange(e: number) { if (e >= 1) { this.resourceStatus = e + 1; } else { this.resourceStatus = 0; } this.initST(); setTimeout(() => { this.st.load(1); }, 500); } getGoodsSourceStatistical() { this.tabs = { signQuantity: 0, cancelQuantity: 0, receivedQuantity: 0, totalQuantity: 0, compolatelQuantity: 0, deltQuantity: 0 }; const params: any = Object.assign({}, this.reqParams || {}); delete params.wayBillStatus; this.service.request(this.service.$api_get_getBulkStatistics, params).subscribe(res => { if (res) { let totalCount = 0; res.forEach((ele: any) => { switch (ele.wayBillStatus) { case '2': this.tabs.receivedQuantity = ele?.count; break; case '3': this.tabs.cancelQuantity = ele?.count; break; case '4': this.tabs.signQuantity = ele?.count; break; case '5': this.tabs.compolatelQuantity = ele?.count; break; case '6': this.tabs.deltQuantity = ele?.count; break; } totalCount += ele.count; }); this.tabs.totalQuantity = totalCount; } }); } // *确认发车 sureDepart(item: any) { const modalRef = this.modal.create({ nzTitle: '确认发车', nzWidth: '50%', nzContent: VehicleSureDepartComponent, nzComponentParams: { i: item, Status: 2 }, nzFooter: null }); modalRef.afterClose.subscribe((result: any) => { this.st.load(1); this.getGoodsSourceStatistical(); }); } // 确认到车 sureArrive(item: any) { const modalRef = this.modal.create({ nzTitle: '确认到车', nzWidth: '50%', nzContent: VehicleSureArriveComponent, nzComponentParams: { i: item, Status: 2 }, nzFooter: null }); modalRef.afterClose.subscribe((result: any) => { this.st.load(1); this.getGoodsSourceStatistical(); }); } // 导出 exprot() { this.service.exportStart(this.reqParams, this.service.$api_asyncExportBulkList); } }