import { DatePipe } from '@angular/common'; import { Component, OnInit, ViewChild } from '@angular/core'; import { Router } from '@angular/router'; import { STComponent, STColumn, STChange } from '@delon/abc/st'; import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema, SFSelectWidgetSchema } from '@delon/form'; import { ShipperBaseService } from '@shared'; import { NzModalService } from 'ng-zorro-antd/modal'; import { ContractManagementService } from '../../services/contract-management.service'; @Component({ selector: 'app-contract-management-contract-frame', templateUrl: './contract-frame.component.html', styleUrls: ['./contract-frame.component.less'], providers: [DatePipe] }) export class ContractManagementFrameComponent implements OnInit { url = `/rule?_allow_anonymous=true`; @ViewChild('st', { static: true }) st!: STComponent; @ViewChild('sf', { static: false }) sf!: SFComponent; @ViewChild('auditModal', { static: false }) auditModal!: any; schema: SFSchema = {}; columns: STColumn[] = []; ui: SFUISchema = {}; _$expand = false; selectedRows: any[] = []; isLoading: boolean = false; constructor( public service: ContractManagementService, private nzModalService: NzModalService, private router: Router, public shipperservice: ShipperBaseService, private datePipe: DatePipe ) {} ngOnInit(): void { this.initST(); this.initSF(); } /** * 查询参数 */ get reqParams() { const params = { ...this.sf?.value }; delete params.signTime; delete params._$expand; if ( this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss') ) { params.signTime = { start: this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss'), end: this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss') }; } if ( this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[1], 'yyyy-MM-dd HH:mm:ss') ) { params.effectiveEndTime = { start: this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[0], 'yyyy-MM-dd HH:mm:ss'), end: this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[1], 'yyyy-MM-dd HH:mm:ss') }; } return { ...params }; } /** * 初始化数据列表 */ initST() { this.columns = [ { title: '合同编号', width: '130px', className: 'text-center', render: 'contractCode' }, { title: '签约对象', width: '100px', className: 'text-center', index: 'signingObjectLabel' }, { title: '合同类型', width: '100px', className: 'text-center', index: 'contractTypeLabel' }, { title: '合同名称', width: '100px', className: 'text-center', index: 'contractName' }, { title: '网络货运人', index: 'enterpriseInfoName', width: '120px', className: 'text-center' }, { title: '合同对象', index: 'contractObjectName', width: '120px', className: 'text-center' }, { title: '有效期至', className: 'text-center', width: '120px', index: 'effectiveEndTime' }, { title: '签署日期', className: 'text-center', width: '120px', index: 'signTime' }, { title: '状态', className: 'text-center', width: '120px', type: 'badge', index: 'esignFlowStatus', badge: { '0': { text: '未发起', color: 'default' }, '1': { text: '待签章', color: 'default' }, '2': { text: '已生效', color: 'success' }, '3': { text: '已撤销', color: 'warning' }, '4': { text: '已作废', color: 'warning' }, '5': { text: '已过期', color: 'warning' }, '7': { text: '已拒签', color: 'warning' } } }, { title: '操作', className: 'text-center', fixed: 'right', width: '80px', buttons: [ { text: '签署', iif: item => item.esignFlowStatus === '0' || item.esignFlowStatus === '1' || item.esignFlowStatus === '13', click: item => this.service.StartTheProcessToESignById(item.id, () => this.st.load(1)) } ] } ]; } /** * 初始化查询表单 */ initSF() { this.schema = { properties: { _$expand: { type: 'boolean', ui: { hidden: true } }, contractCode: { type: 'string', title: '合同编号' }, signingObject: { type: 'string', title: '签约对象', enum: [ { label: '全部', value: '' }, { label: '货主', value: 1 }, { label: '司机', value: 2 } ], ui: { widget: 'select', placeholder: '请选择' } }, contractType: { title: '合同类型', type: 'string', default: '', ui: { widget: 'dict-select', containsAllLable: true, params: { dictKey: 'contract:type' }, containAllLable: true } as SFSelectWidgetSchema }, enterpriseInfoId: { type: 'string', title: '网络货运人', ui: { widget: 'select', placeholder: '请选择', allowClear: true, visibleIf: { _$expand: (value: boolean) => value }, asyncData: () => this.shipperservice.getNetworkFreightForwarder() } }, contractObjectName: { type: 'string', title: '合同对象', ui: { visibleIf: { _$expand: (value: boolean) => value } } }, signTime: { title: '签署日期', type: 'string', ui: { widget: 'custom', visibleIf: { _$expand: (value: boolean) => value } } }, effectiveEndTime: { title: '有效期', type: 'string', ui: { widget: 'custom', visibleIf: { _$expand: (value: boolean) => value } } }, esignFlowStatus: { title: '状态', type: 'string', default: '', ui: { widget: 'dict-select', containsAllLable: true, params: { dictKey: 'esign:flow:status' }, containAllLable: true, visibleIf: { _$expand: (value: boolean) => value } } as SFSelectWidgetSchema } }, type: 'object' }; this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } }; } /** * 查询字段个数 */ get queryFieldCount(): number { return Object.keys(this.schema?.properties || {}).length; } stChange(e: STChange): void { switch (e.type) { case 'checkbox': this.selectedRows = e.checkbox!; break; case 'filter': this.st.load(); break; } } approval(): void {} add(): void {} routeTo(item: any) { this.router.navigate(['/ticket/invoice-requested-detail/1']); } auditAction(item: any) { const modal = this.nzModalService.create({ nzTitle: '审核', nzContent: this.auditModal, nzFooter: [ { label: '拒绝', type: 'default', onClick: () => { modal.destroy(); } }, { label: '通过', type: 'primary', onClick: () => { modal.destroy(); } } ] }); modal.afterClose.subscribe(res => { this.st.load(); }); } showReason(item: any) { const modal = this.nzModalService.create({ nzTitle: '查看原因', nzContent: '运单数据异常,暂时无法开票,请联系客服400-xxxx-xxxx', nzFooter: [ { label: '关闭', type: 'primary', onClick: () => { modal.destroy(); } } ] }); } /** * 重置表单 */ resetSF() { this.sf.reset(); this._$expand = false; this.isLoading = true; } /** * 伸缩查询条件 */ expandToggle(): void { this._$expand = !this._$expand; this.sf?.setValue('/_$expand', this._$expand); } }