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 { ShipperBaseService } from '@shared'; import { NzModalService } from 'ng-zorro-antd/modal'; import { NzUploadChangeParam } from 'ng-zorro-antd/upload'; import { of } from 'rxjs'; import { map } from 'rxjs/operators'; 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-vehicle', templateUrl: './vehicle.component.html', styleUrls: ['./vehicle.component.less', '../../../commom/less/expend-but.less', '../../../commom/less/box.less'] }) export class WaybillManagementVehicleComponent implements OnInit { ui: SFUISchema = {}; schema: SFSchema = {}; auditMany = false; isVisibleView = false; isVisibleEvaluate = false; isVisible = false; _$expand = false; resourceStatus: any; @ViewChild('st') private readonly st!: STComponent; @ViewChild('stFloat') private readonly stFloat!: STComponent; @ViewChild('stFloatView') private readonly stFloatView!: STComponent; @ViewChild('sf', { static: false }) sf!: SFComponent; @ViewChild('sfFre', { static: false }) sfFre!: SFComponent; columns: STColumn[] = []; columnsFloat: STColumn[] = []; columnsFloatView: STColumn[] = []; datass: any = [ { one: '1', two: '1', three: '1', id: 1 }, { one: '2', two: '2', three: '2', id: 2 } ]; tabs = { signQuantity: 0, cancelQuantity: 0, receivedQuantity: 0, stayQuantity: 0, totalQuantity: 0, compolatelQuantity: 0 }; constructor( public service: WaybillManagementServe, private modal: NzModalService, public service2: ShipperBaseService) {} /** * 查询参数 */ get reqParams() { const a: any = {}; if (this.resourceStatus) { a.wayBillStatus = this.resourceStatus; } return { ...a, ...this.sf?.value }; } get selectedRows() { return this.st?.list.filter(item => item.checked) || []; } ngOnInit(): void { this.initSF(); this.initST(); this.getGoodsSourceStatistical(); this.initSTFloat(); this.initSTFloatView(); } /** * 初始化查询表单 */ initSF() { this.schema = { properties: { _$expand: { type: 'boolean', ui: { hidden: true } }, wayBillCode: { type: 'string', title: '运单号' }, resourceCode: { type: 'string', title: '货源编号' }, shipperAppUserId: { type: 'string', title: '货主', ui: { widget: 'select', serverSearch: true, searchDebounceTime: 300, searchLoadingText: '搜索中...', onSearch: (q: any) => { console.log(q) 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([]); } }, } as SFSelectWidgetSchema, }, loadingPlace: { type: 'string', title: '装货地', ui: { visibleIf: { _$expand: (value: boolean) => value } } }, dischargePlace: { type: 'string', title: '卸货地', ui: { visibleIf: { _$expand: (value: boolean) => value } } }, driverId: { title: '承运司机', type: 'string', ui: { widget: 'select', serverSearch: true, searchDebounceTime: 300, searchLoadingText: '搜索中...', onSearch: (q: any) => { if (!!q) { return this.service .request(this.service.$api_get_getDriverInfo, { keyword: q, model: 1, type: 1 }) .pipe(map(res => (res as any[]).map(i => ({ label: i.name, value: i.id } as SFSchemaEnum)))) .toPromise(); } else { return of([]); } }, visibleIf: { _$expand: (value: boolean) => value } } as SFSelectWidgetSchema }, carNo: { title: '车牌号', type: 'string', ui: { widget: 'select', serverSearch: true, searchDebounceTime: 300, searchLoadingText: '搜索中...', onSearch: (q: any) => { if (!!q) { return this.service .request(this.service.$api_get_getCarLicenseListByCarNo, { carNo: q }) .pipe(map((res: any) => (res?.records as any[]).map(i => ({ label: i.carNo, value: i.carNo } as SFSchemaEnum)))) .toPromise(); } else { return of([]); } }, visibleIf: { _$expand: (value: boolean) => value } } as SFSelectWidgetSchema }, payeeId: { title: '车队长', type: 'string', ui: { widget: 'select', serverSearch: true, searchDebounceTime: 300, searchLoadingText: '搜索中...', onSearch: (q: any) => { if (!!q) { return this.service .request(this.service.$api_get_getDriverInfo, { keyword: q, model: 1, type: 2 }) .pipe(map(res => (res as any[]).map(i => ({ label: i.name, value: i.id } as SFSchemaEnum)))) .toPromise(); } else { return of([]); } }, visibleIf: { _$expand: (value: boolean) => value } } as SFSelectWidgetSchema }, paymentstatus: { title: '支付状态', type: 'string', ui: { widget: 'dict-select', params: { dictKey: 'payment:status' }, containAllLable: true, visibleIf: { _$expand: (value: boolean) => value } } as SFSelectWidgetSchema }, createTime: { title: '创建时间', type: 'string', ui: { widget: 'date', mode: 'range', format: 'yyyy-MM-dd', visibleIf: { _$expand: (value: boolean) => value } } as SFDateWidgetSchema }, isRiskSheet: { type: 'string', title: '是否风险单', enum: [ { label: '全部', value: '' }, { label: '是', value: '1' }, { label: '否', value: '2' } ], ui: { widget: 'select', placeholder: '请选择', visibleIf: { _$expand: (value: boolean) => value } } }, enterpriseInfoName: { type: 'string', title: '网络货运人', ui: { widget: 'select', placeholder: '请选择', visibleIf: { _$expand: (value: boolean) => value }, allowClear: true, asyncData: () => this.service2.getNetworkFreightForwarder() } }, // goodsName: { // type: 'string', // title: '货物名称', // ui: { // placeholder: '请选择', // visibleIf: { // _$expand: (value: boolean) => value // }, // } // } goodsNameId: { type: 'string', title: '货物名称', ui: { widget: 'select', placeholder: '请选择', errors: { required: '请选择货物类型' }, visibleIf: { _$expand: (value: boolean) => value }, asyncData: () => this.service2.loadConfigByKey('goods.name.config.type').pipe( map((data: any) => { return data[0].children?.map((m: any) => { return { label: m.name, value: m.id }; }); }) ), } as SFSelectWidgetSchema }, }, type: 'object' }; this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } }; } /** * 初始化数据列表 */ 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: '150px', className: 'text-left', index: 'resourceCode' }, { title: '货主出价', width: '250px', className: 'text-left', render: 'billExpenseDetailVOList2' }, { title: '费用明细', width: '250px', className: 'text-left', render: 'billExpenseDetailVOList' }, { title: '网络货运人', index: 'enterpriseInfoName', width: '180px', className: 'text-left' }, { title: '货主', index: 'shipperAppUserName', width: '150px', className: 'text-left' }, { title: '关联订单号', render: 'wayBill', width: '180px', className: 'text-left' }, { title: '装货地', index: 'loadingPlace', width: '180px', className: 'text-left' }, { title: '卸货地', className: 'text-left', width: '180px', index: 'dischargePlace' }, { title: '货物信息', className: 'text-left', width: '180px', render: 'goodsInfos' }, { title: '承运司机', className: 'text-left', width: '120px', index: 'driverName' }, { title: '收款人', className: 'text-left', width: '120px', index: 'payeeName' }, { title: '装卸货时间', className: 'text-left', width: '200px', render: 'loadingTime' }, { title: '创建时间', width: '180px', className: 'text-left', index: 'createTime' }, { title: '操作', fixed: 'right', width: '110px', className: 'text-left', buttons: [ { text: '查看评价', click: _record => this.viewEvaluate(_record) }, { text: '确认发车', click: _record => this.sureDepart(_record), iif: item => item.wayBillStatus == '2' }, { text: '确认到车', click: _record => this.sureArrive(_record), iif: item => item.wayBillStatus == '3' } ] } ]; } initSTFloat() { this.columnsFloat = [ { title: '序号', className: 'text-center', index: 'one' }, { title: '操作时间', className: 'text-center', index: 'two' }, { title: '操作人', className: 'text-center', index: 'three' }, { title: '状态', index: 'externalSn', className: 'text-center' }, { title: '操作', fixed: 'right', className: 'text-left', buttons: [ { text: '查看', click: _record => this.FloatView(_record) }, { text: '撤销', click: _record => this.audit(_record) } ] } ]; } initSTFloatView() { this.columnsFloatView = [ { title: '费用名称', width: '100px', className: 'text-center', render: 'goodsId' }, { title: '变更前', width: '100px', className: 'text-center' }, { title: '变更值', index: 'externalSn', width: '120px', className: 'text-center' }, { title: '变更后', index: 'externalSn', width: '120px', className: 'text-center' } ]; } /** * 查询字段个数 */ get queryFieldCount(): number { return Object.keys(this.schema?.properties || {}).length; } /** * 伸缩查询条件 */ expandToggle(): void { this._$expand = !this._$expand; this.sf?.setValue('/_$expand', this._$expand); } tabChange(item: any) { console.log(item); } /** * 重置表单 */ resetSF(): void { this.sf.reset(); this._$expand = false; } search() { this.st?.load(1); this.getGoodsSourceStatistical() } // 获取录单员 getCatalogueMember() { const params = {}; return this.service.request(this.service.$api_get_catalogue_member, params, 'GET').pipe( map(res => { if (res) { console.log(res); } }) ); } selectChange(e: number) { console.log(e); this.resourceStatus = e; this.initST(); setTimeout(() => { this.st.load(); this.getGoodsSourceStatistical(); }, 500); } /** * 导入货源 */ importGoodsSource() {} audit(item: any) { console.log(item); } /* * 审核关闭弹窗 view: 1 浮动费用: 0 查看评价: 3 */ handleCancel(type: string) { console.log(type); if (type === '0') { this.isVisible = false; } else if (type === '1') { console.log(type); this.isVisibleView = false; } else if (type === '2') { console.log(type); this.isVisibleEvaluate = false; } } /** * 审核通过按钮 */ handleOK() {} OpenPrice() { this.isVisible = true; } /** * 浮动费用查看 */ FloatView(item: any) { console.log(item); this.isVisibleView = true; } /** *查看评价 */ viewEvaluate(item: any) { console.log(item); this.isVisibleEvaluate = true; } getGoodsSourceStatistical() { this.service.request(this.service.$api_get_getWholeStatistics).subscribe(res => { if (res) { let totalCount = 0; res.forEach((ele: any) => { switch (ele.wayBillStatus) { case '1': this.tabs.stayQuantity = ele?.count; break; 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; } totalCount += ele.count }); this.tabs.totalQuantity = totalCount } }); } // *确认发车 sureDepart(item: any) { const modalRef = this.modal.create({ nzTitle: '确认发车', nzWidth: '50%', nzContent: VehicleSureDepartComponent, nzComponentParams: { i: item, Status: 1 }, 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: 1 }, nzFooter: null }); modalRef.afterClose.subscribe((result: any) => { this.st.load(1); this.getGoodsSourceStatistical() }); } }