import { Component, OnInit, ViewChild } from '@angular/core'; import { STColumn, STComponent, STRequestOptions } from '@delon/abc/st'; import { SFComponent, SFDateWidgetSchema, SFSchema, SFSchemaEnum, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; import { ModalHelper, _HttpClient } from '@delon/theme'; import { NzModalService } from 'ng-zorro-antd/modal'; import { map } from 'rxjs/operators'; import { OrderManagementService } from '../../services/order-management.service'; import { UpdateFreightComponent } from '../../modal/bulk/update-freight/update-freight.component'; import { ConfirReceiptComponent } from '../../modal/bulk/confir-receipt/confir-receipt.component'; import { of } from 'rxjs'; import { SearchDrawerService, ShipperBaseService } from '@shared'; import { Router } from '@angular/router'; import { orderManagementVoucherViewComponent } from '../../modal/audit/voucher-view/voucher-view.component'; import { BasicTableComponent } from 'src/app/routes/commom/components/basic-table/basic-table.component'; @Component({ selector: 'app-order-management-receipts-audit', templateUrl: './receipts-audit.component.html', styleUrls: ['../../../commom/less/commom-table.less', './receipts-audit.component.less'] }) export class OrderManagementReceiptsAuditComponent extends BasicTableComponent implements OnInit { uiView: SFUISchema = {}; schemaView: SFSchema = {}; auditMany = false; isVisibleView = false; isVisibleEvaluate = false; isVisible = false; @ViewChild('st') private readonly st!: STComponent; @ViewChild('sf', { static: false }) sf!: SFComponent; columns: STColumn[] = []; loading: boolean = true; resourceStatus: any; tabs = { receivedQuantity: 0, stayQuantity: 0, totalCount: 0 }; constructor( public service: OrderManagementService, private modal: NzModalService, public shipperservice: ShipperBaseService, private router: Router, public searchDrawerService: SearchDrawerService ) { super(searchDrawerService); } /** * 查询参数 */ get reqParams() { const a: any = {}; if (this.resourceStatus) { a.auditStatus = this.resourceStatus; } const params: any = Object.assign({}, this.sfValue || {}); delete params._$expand; return { ...a, ...params, createTime: { start: this.sfValue?.createTime?.[0] || '', end: this.sfValue?.createTime?.[1] || '' } }; } beforeReq = (requestOptions: STRequestOptions) => { const a: any = {}; if (this.resourceStatus) { a.auditStatus = this.resourceStatus; } const params: any = Object.assign({}, this.sfValue || {}); delete params._$expand; if (this.sfValue) { Object.assign(requestOptions.body, { ...a, ...params, createTime: { start: this.sfValue?.createTime?.[0] || '', end: this.sfValue?.createTime?.[1] || '' } }); } this.loading = true; return requestOptions; }; afterRes = (data: any[], rawData?: any) => { console.log(data); this.loading = false; return data.map(item => ({ ...item // disabled: item.billStatus !== '4' })); }; get selectedRows() { return this.st?.list.filter(item => item.checked) || []; } search() { this.st?.load(1); this.getGoodsSourceStatistical(); } getGoodsSourceStatistical() { this.tabs = { receivedQuantity: 0, stayQuantity: 0, totalCount: 0 }; const params: any = Object.assign({}, this.reqParams || {}); delete params.auditStatus; this.service.request(this.service.$api_get_getAuditStatistical, params).subscribe(res => { if (res) { let totalCount = 0; res.forEach((element: any) => { if (element.auditStatus == '1') { this.tabs.receivedQuantity = element.quantity; } else if (element.auditStatus == '2') { this.tabs.stayQuantity = element.quantity; } totalCount += element.quantity; }); this.tabs.totalCount = totalCount; } }); } selectChange(e: number) { this.resourceStatus = e; this.initST(); setTimeout(() => { this.st.load(); }, 500); } ngOnInit(): void { this.getGoodsSourceStatistical(); this.initSF(); this.initST(); } /** * 初始化查询表单 */ initSF() { this.schema = { properties: { _$expand: { type: 'boolean', ui: { hidden: true } }, billCode: { type: 'string', title: '订单号', ui: { placeholder: '请输入' } }, wayBillCode: { type: 'string', title: '运单号', ui: { placeholder: '请输入' } }, resourceCode: { type: 'string', title: '货源编号' }, shipperAppUserId: { type: 'string', title: '货主', ui: { widget: 'select', serverSearch: true, searchDebounceTime: 300, searchLoadingText: '搜索中...', allowClear: true, onSearch: (q: any) => { 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([]); } }, change: (q: any) => { this.getRegionCode(q); } } as SFSelectWidgetSchema }, enterpriseProjectId: { type: 'string', title: '所属项目', ui: { widget: 'select', placeholder: '请先选择货主', } as SFSelectWidgetSchema }, loadingPlace: { type: 'string', title: '装货地', ui: { } }, dischargePlace: { type: 'string', title: '卸货地', ui: { } }, driverName: { title: '承运司机', type: 'string', ui: { } }, carNo: { title: '车牌号', type: 'string', ui: { } }, carCaptainName: { title: '车队长', type: 'string', ui: { } }, paymentStatus: { title: '支付状态', type: 'string', ui: { widget: 'dict-select', params: { dictKey: 'overall:payment:status' }, containsAllLabel: true, } as SFSelectWidgetSchema }, enterpriseInfoId: { type: 'string', title: '网络货运人', ui: { widget: 'select', placeholder: '请选择', allowClear: true, asyncData: () => this.shipperservice.getNetworkFreightForwarder() } }, serviceType: { title: '服务类型', type: 'string', default: '', ui: { widget: 'dict-select', params: { dictKey: 'service:type' }, containsAllLabel: true, } as SFSelectWidgetSchema }, billStatus: { title: '运输状态', type: 'string', default: '', ui: { widget: 'dict-select', params: { dictKey: 'bill:status' }, containsAllLabel: true, } as SFSelectWidgetSchema }, loadingDocuments: { type: 'string', title: '装卸货凭证', enum: [ { label: '全部', value: '' }, { label: '无装卸货凭证', value: '1' }, { label: '装卸货凭证齐全', value: '2' }, { label: '只有装货凭证', value: '3' }, { label: '只有卸货凭证', value: '4' } ], ui: { widget: 'select', placeholder: '请选择', allowClear: true, } } }, type: 'object' }; } /** * 初始化数据列表 */ initST() { this.columns = [ { title: '', type: 'checkbox', fixed: 'left', width: '50px', className: 'text-center' }, { title: '订单号', width: '180px', fixed: 'left', className: 'text-left', render: 'billCode' }, { title: '运费明细', width: '250px', className: 'text-right', render: 'mybidDetailInfo' }, { title: '网络货运人', index: 'enterpriseInfoName', width: '250px', className: 'text-left' }, { title: '货主', index: 'shipperAppUserName', width: '250px', className: 'text-left' }, { title: '所属项目', index: 'enterpriseProjectName', width: '250px', className: 'text-left' }, { title: '货源编号', index: 'resourceCode', width: '180px', className: 'text-left' }, { title: '装货地', index: 'loadingAddressArr', width: '180px', className: 'text-left' }, { title: '卸货地', className: 'text-left', width: '180px', index: 'unloadingAddressArr' }, { title: '货物信息', className: 'text-left', width: '250px', render: 'goodsName' }, { title: '承运司机', className: 'text-left', width: '250px', index: 'driverName', render: 'driverName' }, { title: '车队长', className: 'text-left', width: '180px', index: 'payeeName', render: 'payeeName' }, { title: '装卸货时间', width: '200px', className: 'text-left', render: 'loadingTime' }, { title: '装货凭证', width: '180px', className: 'text-left', render: 'loadingLadingBillFilePath' }, { title: '卸货凭证', width: '180px', className: 'text-left', render: 'unloadingLadingBillFilePath' }, { title: '操作', fixed: 'right', width: '136px', className: 'text-center block-td', buttons: [ { text: '生成电子单据', click: _record => this.generate(_record, 2), iif: item => !item?.loadingElectronicsLadingBillFilePath || !item?.unloadingElectronicsLadingBillFilePath, acl: { ability: ['ORDER-RECEIPTS-electronicBillingOne'] } }, { text: '通过', click: _record => this.sign(_record), iif: item => !item?.loadingElectronicsLadingBillFilePath || !item?.unloadingElectronicsLadingBillFilePath, acl: { ability: ['ORDER-RECEIPTS-billAuditPassBatch'] } }, { text: '修改', click: _record => this.modification(_record), iif: item => !item?.loadingElectronicsLadingBillFilePath || !item?.unloadingElectronicsLadingBillFilePath, acl: { ability: ['ORDER-RECEIPTS-updateBillExamine'] } }, { text: '查看凭证', click: _record => this.generate(_record, 3), iif: item => item?.loadingElectronicsLadingBillFilePath && item?.unloadingElectronicsLadingBillFilePath, acl: { ability: ['ORDER-RECEIPTS-view'] } } ] } ]; } /** * 查询字段个数 */ get queryFieldCount(): number { return Object.keys(this.schema?.properties || {}).length; } tabChange(item: any) {} /** * 导入货源 */ importGoodsSource() {} audit(item: any) {} /** * 审核通过按钮 */ handleOK() {} OpenPrice(item: any) { this.isVisible = true; } // 修改 modification(item: any) { const modalRef = this.modal.create({ nzTitle: '修改', nzWidth: '50%', nzContent: orderManagementVoucherViewComponent, nzComponentParams: { i: item, Status: 1 }, nzFooter: null }); modalRef.afterClose.subscribe((result: any) => { this.st.load(1); this.getGoodsSourceStatistical(); }); } // 生成电子单据 generate(item: any, sts?: number) { let text = '查看凭证'; if (sts == 2) { text = '生成电子单据'; } const modalRef = this.modal.create({ nzTitle: text, nzWidth: '50%', nzContent: orderManagementVoucherViewComponent, nzComponentParams: { i: item, Status: sts }, nzFooter: null }); modalRef.afterClose.subscribe((result: any) => { if (result) { this.st.load(); this.getGoodsSourceStatistical(); } }); } // 通过 sign(item?: any) { let params: any = []; let text = ''; if (item === '1') { if (this.selectedRows.length <= 0) { this.service.msgSrv.error('请选择订单!'); return; } this.selectedRows.forEach(ite => { params.push(ite.id); }); text = `已选择${this.selectedRows.length}条订单,确认批量通过审核吗?`; } else { text = `确认通过审核吗?`; params.push(item.id); } console.log(this.selectedRows); console.log(params); this.modal.confirm({ nzTitle: text, nzContent: `通过后不可修改,可以再生成电子单据。`, nzOnOk: () => this.service.request(this.service.$api_get_billAuditPass, params).subscribe(res => { if (res === true) { this.service.msgSrv.success('操作成功!'); this.st?.reload(1); this.getGoodsSourceStatistical(); this.initST(); } this.st?.reload(1); this.getGoodsSourceStatistical(); }) }); } // 批量生成电子单据 sign1(item?: any) { if (this.selectedRows?.length <= 0) { this.service.msgSrv.error('请选择订单!'); return; } let params: any[] = []; this.selectedRows.forEach(item => { params.push(item?.id); }); this.modal.confirm({ nzTitle: `已选择${this.selectedRows.length}条订单,确认批量生成电子单据吗?`, nzContent: `确认后单据不可修改,请谨慎操作。`, nzOnOk: () => { this.service.downloadFile(this.service.$api_createBillEsignGoods, params); this.service.msgSrv.success('生成成功!'); this.st?.reload(); // this.getGoodsSourceStatistical(); } }); } // 获取所属项目 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.sf.getProperty('/enterpriseProjectId')!.schema.enum = res; this.sf.getProperty('/enterpriseProjectId')!.widget.reset(res); // if (this.enterpriseProjectIds) { // this.sf1.setValue('/enterpriseProjectId', this.enterpriseProjectIds); // } }); } // 导出 exprot() { this.service.exportStart({ ...this.reqParams, pageSize: -1 }, this.service.$api_get_asyncExportExamineBillList); } }