import { Component, OnInit, ViewChild } from '@angular/core'; import { Router, ActivatedRoute } from '@angular/router'; import { STColumn, STComponent, STRequestOptions, STData, STChange } from '@delon/abc/st'; import { SFUISchema, SFSchema, SFComponent, SFDateWidgetSchema } from '@delon/form'; import { ShipperBaseService, DynamicSettingModalComponent } from '@shared'; import { NzModalService } from 'ng-zorro-antd/modal'; import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component'; import { UsermanageService } from '../../../services/usercenter.service'; @Component({ selector: 'app-freight-config', templateUrl: './freight-config.component.html', styleUrls: ['../../../../commom/less/box.less', '../../../../commom/less/expend-but.less'] }) export class FreightConfigComponent implements OnInit { schema: SFSchema = this.initSF(); columns: STColumn[] = this.initST(); @ViewChild('st', { static: false }) st!: STComponent; @ViewChild('sf', { static: false }) sf!: SFComponent; selectedRows: any[] = []; @ViewChild('IWModal', { static: false }) IWModal!: any; @ViewChild('roleModal', { static: false }) roleModal!: any; ltdId: any = []; roles: any = []; networkTransporter = null; roleId = null; _$expand = false; constructor(public service: UsermanageService, private modal: NzModalService, public shipperservice: ShipperBaseService) {} ngOnInit() { this.initST(); this.loadltdId(); this.loadRoles(); } beforeReq = (requestOptions: STRequestOptions) => { Object.assign(requestOptions.body, { listSource: 1 }); if (this.sf?.value) { Object.assign(requestOptions.body, { ...this.sf.value }); if (this.sf?.value.createTime) { Object.assign(requestOptions.body, { createTime: { start: this.sf?.value.createTime[0], end: this.sf?.value.createTime[1] } }); } } return requestOptions; }; stChange(e: STChange): void { switch (e.type) { case 'checkbox': this.selectedRows = e.checkbox!; break; } } settingAction(item?: any) { const modal = this.modal.create({ nzTitle: '配置', nzContent: DynamicSettingModalComponent, nzWidth: 900, nzComponentParams: { extendType: '2', businessId: item.id, formatTypeList: (item: any[]) => [ ...item, { name: '权限配置', configType: 1, items: [ { itemType: 999 } ] }, { name: '费率变更记录', configType: 2, items: [ { itemType: 999 } ] } ] }, nzFooter: null }); modal.afterClose.subscribe(res => { if (res) { this.st.load(1); } }); } editRoleBatch() { if (this.selectedRows?.length <= 0) { this.service.msgSrv.warning('请选择企业'); return; } this.roleId = null; const modal = this.modal.create({ nzTitle: '修改角色', nzContent: this.roleModal, nzOnOk: () => { if (!this.roleId) { return false; } this.service .request(this.service.$api_update_enter_role_batch, { enterpriseIdList: this.selectedRows.map(i => i.id), roleId: this.roleId }) .subscribe((res: Array) => { if (res) { this.service.msgSrv.success('修改成功'); this.st.load(1); modal.destroy(); } }); return false; } }); } editIWBatch() { if (this.selectedRows?.length <= 0) { this.service.msgSrv.warning('请选择企业'); return; } this.networkTransporter = null; const modal = this.modal.create({ nzTitle: '修改网络货运人', nzContent: this.IWModal, nzOnOk: () => { if (!this.networkTransporter) { return false; } this.service .request(this.service.$api_update_enter_newowork_batch, { enterpriseIdList: this.selectedRows.map(i => i.id), networkTransporterId: this.networkTransporter }) .subscribe((res: Array) => { if (res && res.length === 0) { this.service.msgSrv.success('修改成功'); this.st.load(1); modal.destroy(); } else { this.service.msgSrv.error(`企业${res?.join(',')}修改失败`); modal.destroy(); this.st.load(); } }); return false; } }); } exportList() { const params = { listSource: 1, pageIndex: this.st.pi, pageSize: this.st.ps }; if (this.sf) { Object.assign(params, { ...this.sf.value }); } this.service.downloadFile(this.service.$api_export_freight_config, params); } loadltdId() { this.service.getNetworkFreightForwarder().subscribe(res => { if (res) { this.ltdId = res; } }); } loadRoles() { this.service.getRoles({ enterpriseId: 0, projectId: 0 }).subscribe(res => { if (res) { this.roles = res; } }); } /** * 伸缩查询条件 */ expandToggle(): void { this._$expand = !this._$expand; this.sf?.setValue('/_$expand', this._$expand); } /** * 重置表单 */ resetSF(): void { this.sf.reset(); this._$expand = false; } private initSF(): SFSchema { return { properties: { _$expand: { type: 'boolean', ui: { hidden: true } }, enterpriseName: { title: '企业名称', type: 'string', ui: { placeholder: '请输入', showRequired: false } }, networkTransporter: { type: 'string', title: '网络货运人', ui: { widget: 'select', placeholder: '请选择', allowClear: true, asyncData: () => this.shipperservice.getNetworkFreightForwarder() } }, goodsSurchargeRatio: { title: '货源单费率', type: 'string', ui: { placeholder: '请输入', showRequired: false } }, contractSurchargeRatio: { title: '合同单费率', type: 'string', ui: { placeholder: '请输入', showRequired: false, visibleIf: { _$expand: (value: boolean) => value } } }, createTime: { title: '注册时间', type: 'string', ui: { widget: 'sl-from-to-search', format: 'yyyy-MM-dd', placeholder: '请选择', nzShowTime: true, visibleIf: { _$expand: (value: boolean) => value } } as SFDateWidgetSchema } } }; } initST(): STColumn[] { return [ { title: '', index: 'key', type: 'checkbox' }, { title: '企业名称', className: 'text-center', index: 'enterpriseName', width: 350 }, { title: '网络货运人', className: 'text-center', index: 'netTranName', width: 160 }, { title: '货源单费率', className: 'text-right', index: 'contractSurchargeRatio', width: 130, format: item => `${item.contractSurchargeRatio}%` }, { title: '合同单费率', className: 'text-right', index: 'goodsSurchargeRatio', width: 130, format: item => `${item.goodsSurchargeRatio}%` }, { title: '合同单业务量(元)', index: 'contractQuota', width: 160, type: 'widget', className: 'text-right', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.contractQuota }) } }, { title: '货源单业务量(元)', index: 'goodsQuota', width: 160, type: 'widget', className: 'text-right', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.goodsQuota }) } }, { title: '注册时间', index: 'createTime', width: 180, className: 'text-right' }, { title: '操作', width: '90px', fixed: 'right', className: 'text-center', buttons: [ { text: '配置', click: item => this.settingAction(item) } ] } ]; } }