import { debounceTime } from 'rxjs/operators'; import { Subject } from 'rxjs'; import { ChangeDetectorRef, Component, Input, OnInit, Output } from '@angular/core'; import { BaseService } from '@shared'; import { EventEmitter } from '@angular/core'; @Component({ selector: 'app-rebate-table', templateUrl: './rebate-table.component.html', styleUrls: ['./rebate-table.component.less'] }) export class RebateTableComponent implements OnInit { @Input() data: any = []; // 数据 @Input() type: any; // 配置类型 1全部等级 2不同等级 @Input() hiden!: boolean; // 判断新增/查看 @Output() private dataChange: EventEmitter = new EventEmitter(); emit() { this.dataChange.emit(this.data); } headers: any[] = []; gradeConfigId: string = ''; grage: any[] = []; formatterDollar = (value: number): string => `${value}`; changeSub = new Subject(); constructor(public service: BaseService, private cdr: ChangeDetectorRef) {} ngOnInit(): void { if (this.type == '2') { this.loadData(); } // 新增-不同等级情况 if (!this.hiden && this.type == '2') { this.data = [ { gradeConfigId: '', startAmount: 0, endAmount: 0, managementFeeRatio: 0, } ]; // 新增-全部等级情况 } else if (!this.hiden && this.type == '1'){ this.data = [ { gradeConfigId: '0', managementFeeRatio: 0, } ]; } this.changeendAmountAction(); } loadData() { this.service.request('/api/mdc/partnerGradeConfig/listPartnerGradeConfig').subscribe(res => { if (res) { this.grage = res; this.cdr.detectChanges(); } }); } /** * 修改结束公里数 * @param event 车长 * @param i 下标 */ changeendAmount(event: any, i: number) { if (event) { this.changeSub.next(`${event},${i}`); } } changeendAmountAction() { this.changeSub.pipe(debounceTime(500)).subscribe((res: string) => { if (res) { const paras = res.split(','); const num = Number(paras[0]); const i = Number(paras[1]); if (num <= this.data[i]?.startAmount) { this.data[i].endAmount = null; setTimeout(() => { this.data[i].endAmount = this.data[i]?.startAmount + 1; }, 0); this.changeNextstartAmount(this.data[i]?.startAmount + 1, i + 1); return; } this.data[i].endAmount = num; this.changeNextstartAmount(num, i + 1); } }); } add() { const tem = this.data[this.data?.length - 1]; if (tem) { this.data.push({ gradeConfigId: '', startAmount: 0, endAmount: 0, managementFeeRatio: 0 }); this.data = [...this.data]; } } deleteRow(index: number) { var newArr = this.data.concat(); newArr.splice(this.data.length - 1, 1); // this.data = this.data.pop() this.data = [...newArr]; } /** * 遍历同步后置位公里数 * @param event 车长 * @param i 下标 */ private changeNextstartAmount(event: number, i: number) { if (this.data[i]) { this.data[i].startAmount = event; if (this.data[i].endAmount <= event) { this.data[i].endAmount = this.data[i].startAmount + 1; this.changeNextstartAmount(event + 1, i + 1); } } } }