Files
bbq/src/app/routes/ticket-management/components/invoice-detail/invoice-detail.component.ts
Taric Xin f25fdea3db edit
2022-04-28 16:54:08 +08:00

317 lines
9.0 KiB
TypeScript

import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
import { SFComponent, SFSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { TicketService } from '../../services/ticket.service';
@Component({
selector: 'app-invoice-detail',
templateUrl: './invoice-detail.component.html',
styleUrls: ['./invoice-detail.component.less']
})
export class InvoiceDetailComponent implements OnInit {
@ViewChild('orderST', { static: true })
orderST!: STComponent;
@ViewChild('orderSf', { static: false })
orderSf!: SFComponent;
orderColumns: STColumn[] = this.initOrderST();
orderSchema: SFSchema = this.initOrderSF();
@ViewChild('costST', { static: true })
costST!: STComponent;
@ViewChild('costSf', { static: false })
costSf!: SFComponent;
costColumns: STColumn[] = this.initCostST();
costSchema: SFSchema = this.initCostSF();
@ViewChild('invoiceST', { static: true })
invoiceST!: STComponent;
invoiceColumns: STColumn[] = this.initInvoiceST();
isCanEdit = false;
isEdit = false;
headerInfo: any = {};
routesInfo: any = {
mailNo: '',
routes: []
};
id: any = null;
ltdId: any = null;
type: any = 1;
selectedIndex = 0;
services: any[] = [];
constructor(public service: TicketService, private route: ActivatedRoute) {
this.isCanEdit = route.snapshot.queryParams.type === '1';
const expressno = route.snapshot.queryParams.expressno;
this.type = route.snapshot.queryParams.type;
this.id = route.snapshot.params.id;
this.ltdId = route.snapshot.queryParams.ltdId;
this.loadInvoiceHeader(this.id);
if (expressno) {
this.loadRoutes(expressno);
}
}
ngOnInit(): void {
this.getDictByKey();
}
beforeReq = (requestOptions: STRequestOptions) => {
Object.assign(requestOptions.body, { vatinvHId: this.id });
if (this.orderSf) {
Object.assign(requestOptions.body, { ...this.orderSf.value });
}
if (this.costSf) {
Object.assign(requestOptions.body, { ...this.costSf.value });
}
return requestOptions;
};
getDictByKey() {
this.service.request('/api/mdc/pbc/dictItems/getDictValue', { dictKey: 'invoice:service:type' }).subscribe(res => {
this.services = res;
});
}
loadInvoiceHeader(id: string) {
this.service.request(this.service.$api_get_invoice_header_detail, { id }).subscribe(res => {
if (res) {
this.headerInfo = res;
}
});
}
loadRoutes(expressno: string) {
this.service.request(this.service.$api_get_express_routes, expressno).subscribe(res => {
if (res) {
res.routes = res.routes.map((route: any) => ({ time: route.acceptTime, value: route.remark + route.acceptAddress, color: 'gray' }));
this.routesInfo = res;
}
});
}
goBack() {
history.go(-1);
}
saveInvoices() {
const list = this.invoiceST._data.map(item => {
const rs = { ...item };
delete rs._values;
return rs;
});
this.service
.request(this.service.$api_update_evatinh, {
id: this.id,
updatEvatinvDetailDTO: list
})
.subscribe(res => {
if (res) {
this.service.msgSrv.success('修改成功');
this.invoiceST.load(1);
this.isEdit = false;
}
});
}
/**
* 重置表单
*/
resetSF(tab: number) {
switch (tab) {
case 1:
this.orderSf.reset();
break;
case 2:
this.costSf.reset();
break;
default:
break;
}
}
exportList() {
const params = { listSource: 1, pageSize: -1, vatinvHId: this.id };
if (this.orderSf) {
Object.assign(params, {
...this.orderSf.value
});
}
this.service.exportStart(params, this.service.$api_export_invoice_order_detail);
}
private initOrderSF(): SFSchema {
return {
properties: {
billHCode: {
type: 'string',
title: '订单号',
ui: {
autocomplete: 'off'
}
},
billType: {
type: 'string',
title: '订单类型',
enum: [
{ label: '全部', value: '' },
{ label: '整车', value: 1 },
{ label: '大宗', value: 2 }
],
ui: {
widget: 'select',
placeholder: '请选择'
},
default: ''
},
projectId: {
type: 'string',
title: '所属项目',
ui: {
widget: 'select',
serverSearch: true,
searchDebounceTime: 300,
searchLoadingText: '搜索中...',
allowClear: true,
onSearch: (q: any) => this.service.getProjectList({ projectName: q, enterpriseId: this.headerInfo?.shipperId })
// widget: 'select',
// placeholder: '请选择',
// allowClear: true,
// asyncData: () => this.service.getEnterpriseProject({ id: this.ltdId })
},
default: ''
}
}
};
}
private initOrderST(): STColumn[] {
return [
{ title: '订单号', index: 'billHCode', width: 180 },
{ title: '订单完成日期', index: 'billfinTime', type: 'date', width: 150 },
{ title: '所属项目', index: 'projectIdName', width: 180 },
{ title: '订单类型', index: 'billTypeLabel', width: 120 },
{ title: '装货地', index: 'loadingfrom', width: 200 },
{ title: '卸货地', index: 'loadingto', width: 220 },
{ title: '货物信息', index: 'goodsinfo', width: 140 },
{ title: '承运司机', index: 'driverinfo', width: 280 },
// {
// title: '税额',
// index: 'billvatrate',
// width: 120,
// className: 'text-right',
// format: item => `${item.billvatrate ? ((item.billvatrate as number) * 100).toFixed(2) : 0}%`
// },
{
title: '申请金额',
index: 'billkpnotax',
width: 120,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: this.type === '2' ? record.billkpmoney : record.billkpnotax }) }
},
{
title: '运输费',
index: 'fjfmoney2',
width: 120,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.fjfmoney2 }) }
},
{
title: '附加费',
index: 'fjfmoney',
width: 120,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.fjfmoney }) }
},
{
title: '开票金额',
index: 'billkpmoney',
width: 120,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.billkpmoney }) }
}
];
}
private initCostSF(): SFSchema {
return {
properties: {
billHCode: {
type: 'string',
title: '订单号',
ui: {
autocomplete: 'off'
}
},
feeHId: {
type: 'string',
title: '费用号',
ui: {
autocomplete: 'off'
}
}
}
};
}
private initCostST(): STColumn[] {
return [
{ title: '费用号', index: 'feeHId' },
{ title: '订单号', index: 'billHCode' },
{ title: '订单日期', index: 'createTime', type: 'date' },
{ title: '计费日期', index: 'feeDate', type: 'date' },
{ title: '税率', index: 'vatrate', format: item => `${item.vatrate ? ((item.vatrate as number) * 100).toFixed(2) : 0}%` },
{
title: '申请金额',
render: 'vatmoney'
},
{
title: '开票金额',
index: 'vatmoney',
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.vatmoney }) }
}
];
}
private initInvoiceST(): STColumn[] {
return [
{ title: '服务名称', render: 'vatnameLabel', width: 350 },
{ title: '规格型号', render: 'vatmodel' },
{ title: '单位', render: 'vatunit', width: 100 },
{ title: '数量', render: 'vatqty', width: 140, className: 'text-right' },
{
title: '金额',
index: 'vatmoney',
width: 140,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.vatmoney }) }
},
{
title: '税率',
index: 'vatrate',
width: 140,
className: 'text-right',
format: item => `${item.vatrate ? ((item.vatrate as number) * 100).toFixed(2) : 0}%`
},
{
title: '税额',
index: 'vattax',
width: 140,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.vattax }) }
}
];
}
}