fix bug
This commit is contained in:
		| @ -244,7 +244,7 @@ export class ContractManagementTemplateFrameComponent implements OnInit { | ||||
|         this.service.request(this.service.$api_deletebatch_contractTemplate, [value.id]).subscribe(res => { | ||||
|           if (res) { | ||||
|             this.service.msgSrv.success('删除成功!'); | ||||
|             this.st.reload(1) | ||||
|             this.st.reload() | ||||
|           } | ||||
|         }) | ||||
|     }); | ||||
|  | ||||
| @ -244,7 +244,7 @@ export class ContractManagementTemplatePartnerComponent implements OnInit { | ||||
|         this.service.request(this.service.$api_deletebatch_contractTemplate, [value.id]).subscribe(res => { | ||||
|           if (res) { | ||||
|             this.service.msgSrv.success('删除成功!'); | ||||
|             this.st.reload(1) | ||||
|             this.st.reload() | ||||
|           } | ||||
|         }) | ||||
|     }); | ||||
|  | ||||
| @ -0,0 +1,50 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [title]="'业务报表'"></page-header-wrapper> | ||||
| <nz-card nzTitle="运多星平台业务情况" [nzExtra]="extraTemplate"> | ||||
|   <ng-template #extraTemplate> | ||||
|     <div class="chooseBox"> | ||||
|       <button nz-button nzType="primary" (click)="exportFun()">导出</button> | ||||
|       <div class="timeBox"> | ||||
|         <nz-radio-group [(ngModel)]="mode" nzButtonStyle="solid" (ngModelChange)="changeData()"> | ||||
|           <label nz-radio-button nzValue="year">年</label> | ||||
|           <label nz-radio-button nzValue="month">月</label> | ||||
|           <label nz-radio-button nzValue="date">日</label> | ||||
|           <label nz-radio-button nzValue="define">自定义</label> | ||||
|         </nz-radio-group> | ||||
|         <div class="dateBox"> | ||||
|           <nz-date-picker [(ngModel)]="date" [nzMode]="mode" [nzFormat]="dateFormat" *ngIf="mode !== 'define'" [nzDisabledDate]="disabledDate" (ngModelChange)="onChange($event)"></nz-date-picker> | ||||
|           <nz-range-picker [(ngModel)]="defineDate" [nzFormat]="dateFormat" *ngIf="mode === 'define'" [nzDisabledDate]="disabledDate" (ngModelChange)="onChange($event)"></nz-range-picker> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </ng-template> | ||||
|   <st #st multiSort [columns]="columns" [ps]="20" [data]="service.$api_listPerformanceReportPage" | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [scroll]="{ x: '1200px' }" [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [20, 50, 100] }" [loading]="false"></st> | ||||
| </nz-card> | ||||
| <nz-card nzTitle="业绩报表" [nzExtra]="extraTemplate01"> | ||||
|   <ng-template #extraTemplate01> | ||||
|     <div class="chooseBox"> | ||||
|       <div class="timeBox"> | ||||
|         <nz-radio-group [(ngModel)]="modeNext" nzButtonStyle="solid" (ngModelChange)="changeDataNext()"> | ||||
|           <label nz-radio-button nzValue="year">年</label> | ||||
|           <label nz-radio-button nzValue="month">月</label> | ||||
|         </nz-radio-group> | ||||
|         <div class="dateBox"> | ||||
|           <nz-date-picker [(ngModel)]="dateNext" [nzDisabledDate]="disabledDate" [nzMode]="mode" (ngModelChange)="onChangeNext($event)"></nz-date-picker> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </ng-template> | ||||
|   <div nz-row [nzGutter]="64"> | ||||
|     <div nz-col class="gutter-row" [nzSpan]="12"> | ||||
|       <app-busitable-curve [chartData]="chartData.chainRatio"></app-busitable-curve> | ||||
|     </div> | ||||
|     <div nz-col class="gutter-row" [nzSpan]="12"> | ||||
|       <app-busitable-pillar [chartData]="chartData.performance"></app-busitable-pillar> | ||||
|     </div> | ||||
|  | ||||
|   </div> | ||||
|    | ||||
| </nz-card> | ||||
| @ -0,0 +1,11 @@ | ||||
| .chooseBox{ | ||||
|     display: flex; | ||||
| } | ||||
| .timeBox{ | ||||
|     display: flex; | ||||
|     margin: 0 0 0 10px; | ||||
| } | ||||
| .dateBox{ | ||||
|     display: inline-block; | ||||
|     margin: 0 0 0 10px; | ||||
| } | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableBusiindexComponent } from './busiindex.component'; | ||||
|  | ||||
| describe('DatatableBusiindexComponent', () => { | ||||
|   let component: DatatableBusiindexComponent; | ||||
|   let fixture: ComponentFixture<DatatableBusiindexComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [ DatatableBusiindexComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableBusiindexComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,125 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { DatePipe, _HttpClient } from '@delon/theme'; | ||||
| import { differenceInCalendarDays } from 'date-fns'; | ||||
| import { DataService } from '../../../services/data.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-busiindex', | ||||
|   templateUrl: './busiindex.component.html', | ||||
|   styleUrls: ['./busiindex.component.less'], | ||||
|   providers: [DatePipe] | ||||
|  | ||||
| }) | ||||
| export class DatatableBusiindexComponent implements OnInit { | ||||
|   @ViewChild('st') private readonly st!: STComponent; | ||||
|   type = 1; | ||||
|   mode = 'year'; | ||||
|   date: any = null; | ||||
|   time: any = ['2022-01-01 00:00:00'] | ||||
|   defineDate = []; | ||||
|   dateNext: any = null; | ||||
|   modeNext = 'year'; | ||||
|   timeNext: any = ['2022-01-01 00:00:00'] | ||||
|   dateFormat = 'yyyy-MM-dd'; | ||||
|   today = new Date(); | ||||
|   chartData: any = [] | ||||
|  | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '运营主体', index: 'networkTransporterName', className: 'text-center' }, | ||||
|     { title: '合伙人数', index: 'partnerNumber', className: 'text-center' }, | ||||
|     { title: '客户数', index: 'enterpriseNumbe', className: 'text-center' }, | ||||
|     { title: '订单数', index: 'zsl', className: 'text-center' }, | ||||
|     { title: '客户预存款', index: 'czcgje', className: 'text-center' }, | ||||
|     { title: '业绩量', index: 'yisje', className: 'text-center' }, | ||||
|     { title: '已收附加费', index: 'yisfjf', className: 'text-center' }, | ||||
|     { title: '平均附加费率', index: 'fjfl', className: 'text-center' }, | ||||
|     { title: '已开票金额', index: 'ykpje', className: 'text-center' } | ||||
|   ]; | ||||
|   /** | ||||
|    * 查询参数 | ||||
|    */ | ||||
|    get reqParams() { | ||||
|     if(this.mode === 'year') { | ||||
|       this.type = 1 | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.type = 2 | ||||
|     } else if(this.mode === 'date') { | ||||
|       this.type = 3 | ||||
|     } else { | ||||
|       this.type = 4 | ||||
|     } | ||||
|     let params: any = { | ||||
|       time: this.time, | ||||
|       type: this.type | ||||
|      }; | ||||
|    | ||||
|     delete params._$expand; | ||||
|     return { ...params }; | ||||
|   } | ||||
|  | ||||
|   constructor(public service: DataService, private datePipe: DatePipe) { } | ||||
|   ngOnInit(): void { | ||||
|     this.initData() | ||||
|   } | ||||
|   initData(){ | ||||
|     let type = 1 | ||||
|     if(this.mode === 'year') { | ||||
|       type = 1 | ||||
|     } else if(this.mode === 'month') { | ||||
|       type = 2 | ||||
|     } | ||||
|     const params: any = { | ||||
|       time: this.timeNext, | ||||
|       type | ||||
|      }; | ||||
|     this.service.getPerformanceReportHistogram(params).subscribe(res => { | ||||
|       if (res) { | ||||
|         this.chartData = res | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|   changeData(){ | ||||
|     if(this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } else { | ||||
|       this.dateFormat = 'yyyy-MM-dd' | ||||
|     }  | ||||
|   } | ||||
|   onChange(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } else if(this.mode === 'date') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } else{ | ||||
|       this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + '00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } | ||||
|     this.st.reload({ ...this.reqParams }); | ||||
|   } | ||||
|  | ||||
|   changeDataNext() { | ||||
|     if(this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } | ||||
|   } | ||||
|   onChangeNext(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } | ||||
|   } | ||||
|   disabledDate = (current: Date): boolean => | ||||
|     // Can not select days before today and today | ||||
|     differenceInCalendarDays(current, this.today) > 0; | ||||
|   exportFun(){ | ||||
|  | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1 @@ | ||||
| <g2-custom delay="100" (render)="render($event)"></g2-custom> | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableDataindexComponent } from './dataindex.component'; | ||||
|  | ||||
| describe('DatatableDataindexComponent', () => { | ||||
|   let component: DatatableDataindexComponent; | ||||
|   let fixture: ComponentFixture<DatatableDataindexComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [ DatatableDataindexComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableDataindexComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,74 @@ | ||||
| import { Component, ElementRef, Input, NgZone, OnInit, ViewChild } from '@angular/core'; | ||||
| import { G2MiniAreaClickItem } from '@delon/chart/mini-area'; | ||||
| import DataSet from '@antv/data-set'; | ||||
| import { Chart } from '@antv/g2'; | ||||
| import { DataService } from 'src/app/routes/datatable/services/data.service'; | ||||
| @Component({ | ||||
|   selector: 'app-busitable-curve', | ||||
|   templateUrl: './curve.component.html', | ||||
|   styleUrls: ['./curve.component.less'] | ||||
| }) | ||||
| export class busitableCurveComponent implements OnInit { | ||||
|   @Input() chartData: any = {} | ||||
|   constructor(private service: DataService, private ngZone: NgZone) { | ||||
|  | ||||
|   } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|  | ||||
|   } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   handleClick(data: G2MiniAreaClickItem): void { | ||||
|     this.service.msgSrv.info(`${data.item.x} - ${data.item.y}`); | ||||
|   } | ||||
|  | ||||
|   render(el: ElementRef<HTMLDivElement>): void { | ||||
|     this.ngZone.runOutsideAngular(() => this.init(el.nativeElement)); | ||||
|   } | ||||
|   private init(el: HTMLElement): void { | ||||
|     const data = [ | ||||
|       { month: '01月', value: 3 }, | ||||
|       { month: '02月', value: 4 }, | ||||
|       { month: '03月', value: 3.5 }, | ||||
|       { month: '04月', value: 5 }, | ||||
|       { month: '05月', value: 4.9 }, | ||||
|       { month: '06月', value: 6 }, | ||||
|       { month: '07月', value: 7 }, | ||||
|       { month: '08月', value: 9 }, | ||||
|       { month: '09月', value: 13 }, | ||||
|       { month: '10月', value: 13 }, | ||||
|       { month: '11月', value: 13 }, | ||||
|       { month: '12月', value: 13 }, | ||||
|     ]; | ||||
|     const chart = new Chart({ | ||||
|       container: el, | ||||
|       autoFit: true, | ||||
|       height: 500, | ||||
|     }); | ||||
|      | ||||
|     chart.data(data); | ||||
|     chart.scale({ | ||||
|       month: { | ||||
|         range: [0, 1], | ||||
|       }, | ||||
|       value: { | ||||
|         min: 0, | ||||
|         nice: true, | ||||
|       }, | ||||
|     }); | ||||
|      | ||||
|     chart.tooltip({ | ||||
|       showCrosshairs: true, // 展示 Tooltip 辅助线 | ||||
|       shared: true, | ||||
|     }); | ||||
|      | ||||
|     chart.line().position('month*value').label('value'); | ||||
|     //chart.point().position('month*value'); | ||||
|      | ||||
|     chart.render(); | ||||
| } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1 @@ | ||||
| <g2-custom delay="100" (render)="render($event)"></g2-custom> | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableDataindexComponent } from './dataindex.component'; | ||||
|  | ||||
| describe('DatatableDataindexComponent', () => { | ||||
|   let component: DatatableDataindexComponent; | ||||
|   let fixture: ComponentFixture<DatatableDataindexComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [ DatatableDataindexComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableDataindexComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,52 @@ | ||||
| import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core'; | ||||
| import { Chart } from '@antv/g2'; | ||||
| import { DataService } from 'src/app/routes/datatable/services/data.service'; | ||||
| @Component({ | ||||
|   selector: 'app-busitable-pillar', | ||||
|   templateUrl: './pillar.component.html', | ||||
|   styleUrls: ['./pillar.component.less'] | ||||
| }) | ||||
| export class busitablePillarComponent implements OnInit { | ||||
|   el: any; | ||||
|   @Input() chartData: any ; | ||||
|   constructor(private service: DataService, private ngZone: NgZone) { | ||||
|  | ||||
|   } | ||||
|   ngOnInit(): void { | ||||
|     this.initData() | ||||
|   } | ||||
|   initData(){ | ||||
|     this.service.request(this.service.$api_performanceReportHistogram).subscribe(res => { | ||||
|       if (res) { | ||||
|         this.chartData = res.performance | ||||
|         this.ngZone.runOutsideAngular(() => this.init(this.el)); | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|   render(el: ElementRef<HTMLDivElement>): void { | ||||
|     this.el = el | ||||
|   } | ||||
|  | ||||
|  | ||||
|   private init(el: HTMLElement): void { | ||||
|     const chart = new Chart({ | ||||
|       container: el, | ||||
|       autoFit: true, | ||||
|       height: 500, | ||||
|     }); | ||||
|    | ||||
|     chart.data(this.chartData); | ||||
|  | ||||
|     chart.tooltip({ | ||||
|       showMarkers: false, | ||||
|     }); | ||||
|  | ||||
|     chart.interval().position('time*number'); | ||||
|  | ||||
|     chart.interaction('element-active'); | ||||
|  | ||||
|     chart.render(); | ||||
|  | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [title]="'业务报表'"></page-header-wrapper> | ||||
| <nz-card nzTitle="业务员报表" [nzExtra]="extraTemplate"> | ||||
|   <ng-template #extraTemplate> | ||||
|     <div class="chooseBox"> | ||||
|       <div class="timeBox"> | ||||
|         <nz-radio-group [(ngModel)]="mode" nzButtonStyle="solid" (ngModelChange)="changeData()"> | ||||
|           <label nz-radio-button nzValue="year">年</label> | ||||
|           <label nz-radio-button nzValue="month">月</label> | ||||
|           <label nz-radio-button nzValue="date">日</label> | ||||
|           <label nz-radio-button nzValue="define">自定义</label> | ||||
|         </nz-radio-group> | ||||
|         <div class="dateBox"> | ||||
|           <nz-date-picker [(ngModel)]="date" [nzMode]="mode" [nzFormat]="dateFormat" *ngIf="mode !== 'define'" [nzDisabledDate]="disabledDate" (ngModelChange)="onChange($event)"></nz-date-picker> | ||||
|           <nz-range-picker [(ngModel)]="defineDate" [nzFormat]="dateFormat" *ngIf="mode === 'define'" [nzDisabledDate]="disabledDate" (ngModelChange)="onChange($event)"></nz-range-picker> | ||||
|         </div> | ||||
|  | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
|   </ng-template> | ||||
|   <st #st multiSort [columns]="columns" [ps]="20" [data]="service.$api_listOperationalReportPage" | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [scroll]="{ x: '1200px' }" [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [20, 50, 100] }" [loading]="false"></st> | ||||
| </nz-card> | ||||
| <nz-card nzTitle="业绩报表" [nzExtra]="extraTemplate01"> | ||||
|   <ng-template #extraTemplate01> | ||||
|     <div class="chooseBox"> | ||||
|       <div class="timeBox"> | ||||
|         <nz-radio-group [(ngModel)]="modeNext" nzButtonStyle="solid" (ngModelChange)="changeDataNext()"> | ||||
|           <label nz-radio-button nzValue="year">年</label> | ||||
|           <label nz-radio-button nzValue="month">月</label> | ||||
|         </nz-radio-group> | ||||
|         <div class="dateBox"> | ||||
|           <nz-date-picker [(ngModel)]="dateNext" [nzDisabledDate]="disabledDate" [nzMode]="mode" (ngModelChange)="onChangeNext($event)"></nz-date-picker> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </ng-template> | ||||
|   <app-datatable-curve></app-datatable-curve> | ||||
| </nz-card> | ||||
| @ -0,0 +1,11 @@ | ||||
| .chooseBox{ | ||||
|     display: flex; | ||||
| } | ||||
| .timeBox{ | ||||
|     display: flex; | ||||
|     margin: 0 0 0 10px; | ||||
| } | ||||
| .dateBox{ | ||||
|     display: inline-block; | ||||
|     margin: 0 0 0 10px; | ||||
| } | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableMantableComponent } from './mantable.component'; | ||||
|  | ||||
| describe('DatatableMantableComponent', () => { | ||||
|   let component: DatatableMantableComponent; | ||||
|   let fixture: ComponentFixture<DatatableMantableComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [ DatatableMantableComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableMantableComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,109 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { DatePipe, _HttpClient } from '@delon/theme'; | ||||
| import { differenceInCalendarDays } from 'date-fns'; | ||||
| import { DataService } from '../../../services/data.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-mantable', | ||||
|   templateUrl: './mantable.component.html', | ||||
|   styleUrls: ['./mantable.component.less'], | ||||
|   providers: [DatePipe] | ||||
|  | ||||
| }) | ||||
| export class DatatableMantableComponent implements OnInit { | ||||
|   @ViewChild('st') private readonly st!: STComponent; | ||||
|   type = 1; | ||||
|   mode = 'year'; | ||||
|   date: any = null; | ||||
|   defineDate = []; | ||||
|   time: any = ['2022-01-01 00:00:00'] | ||||
|   dateFormat = 'yyyy-MM-dd'; | ||||
|   today = new Date(); | ||||
|   dateNext: any = null; | ||||
|   modeNext = 'year'; | ||||
|   timeNext: any = ['2022-01-01 00:00:00'] | ||||
|  | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '部门', index: 'networkTransporterName', className: 'text-center' }, | ||||
|     { title: '业务员', index: 'zsl', className: 'text-center' }, | ||||
|     { title: '合伙人数', index: 'yingsje', className: 'text-center' }, | ||||
|     { title: '客户数', index: 'cys', className: 'text-center' }, | ||||
|     { title: '客户活跃率', index: 'yingfyf', className: 'text-center' }, | ||||
|     { title: '客户预存款', index: 'yl', className: 'text-center' }, | ||||
|     { title: '订单数', index: 'djd', className: 'text-center' }, | ||||
|     { title: '订单金额', index: 'ysz', className: 'text-center' }, | ||||
|     { title: '业绩量', index: 'yswc', className: 'text-center' }, | ||||
|     { title: '附加费金额', index: 'yisje', className: 'text-center' }, | ||||
|     { title: '平均附加费率', index: 'yifyf', className: 'text-center' }, | ||||
|     { title: '已开票金额', index: 'yifyf', className: 'text-center' } | ||||
|   ]; | ||||
|   /** | ||||
|    * 查询参数 | ||||
|    */ | ||||
|    get reqParams() { | ||||
|     if(this.mode === 'year') { | ||||
|       this.type = 1 | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.type = 2 | ||||
|     } else if(this.mode === 'date') { | ||||
|       this.type = 3 | ||||
|     } else { | ||||
|       this.type = 4 | ||||
|     } | ||||
|     let params: any = { | ||||
|       time: this.time, | ||||
|       type: this.type | ||||
|      }; | ||||
|    | ||||
|     delete params._$expand; | ||||
|     return { ...params }; | ||||
|   } | ||||
|  | ||||
|   constructor(public service: DataService, private datePipe: DatePipe) { } | ||||
|   ngOnInit(): void { } | ||||
|  | ||||
|   changeData(){ | ||||
|     if(this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } else { | ||||
|       this.dateFormat = 'yyyy-MM-dd' | ||||
|     }  | ||||
|   } | ||||
|   onChange(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } else if(this.mode === 'date') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } else{ | ||||
|       this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + '00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } | ||||
|     this.st.reload({ ...this.reqParams }); | ||||
|   } | ||||
|  | ||||
|   changeDataNext() { | ||||
|     if(this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } | ||||
|   } | ||||
|   onChangeNext(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } | ||||
|   } | ||||
|   disabledDate = (current: Date): boolean => | ||||
|     // Can not select days before today and today | ||||
|     differenceInCalendarDays(current, this.today) > 0; | ||||
|   exportFun(){ | ||||
|  | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,6 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [title]="'数据报表'"></page-header-wrapper> | ||||
| <nz-card> | ||||
|   <sf mode="search" [schema]="searchSchema" (formSubmit)="st.reset($event)" (formReset)="st.reset($event)"></sf> | ||||
|   <st #st [data]="url" [columns]="columns"></st> | ||||
| </nz-card> | ||||
| @ -0,0 +1,45 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFSchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-compliance-customer', | ||||
|   templateUrl: './customer.component.html', | ||||
| }) | ||||
| export class DatatableComplianceCustomerComponent implements OnInit { | ||||
|   url = `/user`; | ||||
|   searchSchema: SFSchema = { | ||||
|     properties: { | ||||
|       no: { | ||||
|         type: 'string', | ||||
|         title: '编号' | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
|   @ViewChild('st') private readonly st!: STComponent; | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '编号', index: 'no' }, | ||||
|     { title: '调用次数', type: 'number', index: 'callNo' }, | ||||
|     { title: '头像', type: 'img', width: '50px', index: 'avatar' }, | ||||
|     { title: '时间', type: 'date', index: 'updatedAt' }, | ||||
|     { | ||||
|       title: '', | ||||
|       buttons: [ | ||||
|         // { text: '查看', click: (item: any) => `/form/${item.id}` }, | ||||
|         // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' }, | ||||
|       ] | ||||
|     } | ||||
|   ]; | ||||
|  | ||||
|   constructor(private http: _HttpClient, private modal: ModalHelper) { } | ||||
|  | ||||
|   ngOnInit(): void { } | ||||
|  | ||||
|   add(): void { | ||||
|     // this.modal | ||||
|     //   .createStatic(FormEditComponent, { i: { id: 0 } }) | ||||
|     //   .subscribe(() => this.st.reload()); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,66 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [title]="'合规监控报表'"></page-header-wrapper> | ||||
| <nz-card> | ||||
|   <!-- 搜索区 --> | ||||
|   <div nz-row> | ||||
|     <div nz-col nzSpan="18"> | ||||
|       <sf #sf [ui]="ui" [schema]="schema" [button]="'none'"></sf> | ||||
|     </div> | ||||
|     <div nz-col nzSpan="6"> | ||||
|       <div class="chooseBox"> | ||||
|         <div class="timeBox"> | ||||
|           <nz-radio-group [(ngModel)]="mode" nzButtonStyle="solid" (ngModelChange)="changeData()"> | ||||
|             <label nz-radio-button nzValue="year">年</label> | ||||
|             <label nz-radio-button nzValue="month">月</label> | ||||
|           </nz-radio-group> | ||||
|           <div class="dateBox"> | ||||
|             <nz-date-picker [(ngModel)]="date" [nzMode]="mode" [nzFormat]="dateFormat" (ngModelChange)="onChange($event)"></nz-date-picker> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </nz-card> | ||||
|  | ||||
| <div nz-row [nzGutter]="16"> | ||||
|   <div nz-col class="gutter-row" [nzSpan]="6"> | ||||
|     <g2-card [title]="'订单合格率'" [bordered]="true" [total]="'95.00%'" [footer]="footer1" contentHeight="46"> | ||||
|       <ng-template #footer1> | ||||
|         <div class="card-f"> | ||||
|           <span class="card-f-l">合格:12423</span> <span>不合格:12423</span> | ||||
|         </div> | ||||
|       </ng-template> | ||||
|     </g2-card> | ||||
|   </div> | ||||
|   <div nz-col class="gutter-row" [nzSpan]="6"> | ||||
|     <g2-card [title]="'货源单占比'" [bordered]="true" [total]="'94.00%'" [footer]="footer2" contentHeight="46"> | ||||
|       <ng-template #footer2> | ||||
|         <div class="card-f"> | ||||
|           <span class="card-f-l">货源单:12423</span> <span>合同单:12423</span> | ||||
|         </div> | ||||
|       </ng-template> | ||||
|     </g2-card> | ||||
|   </div> | ||||
|   <div nz-col class="gutter-row" [nzSpan]="6"> | ||||
|     <g2-card [title]="'运费直付占比'" [bordered]="true" [total]="'95.10%'" [footer]="footer3" contentHeight="46"> | ||||
|       <ng-template #footer3> | ||||
|         <div class="card-f"> | ||||
|           <span class="card-f-l">司机:12423</span> <span>车队长:12423</span> | ||||
|         </div> | ||||
|       </ng-template> | ||||
|     </g2-card> | ||||
|     </div> | ||||
|   <div nz-col class="gutter-row" [nzSpan]="6"> | ||||
|     <g2-card [title]="'付款及时率'" [bordered]="true" [total]="'90.00%'" [footer]="footer4" contentHeight="46"> | ||||
|       <ng-template #footer4> | ||||
|         <div class="card-f"> | ||||
|           <span class="card-f-l">准时:12423</span> <span>逾期:12423</span> | ||||
|         </div> | ||||
|       </ng-template> | ||||
|     </g2-card> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| <nz-card nzTitle="平台合规情况监控报表"> | ||||
|   <g2-custom delay="100" (render)="render($event)"></g2-custom> | ||||
| </nz-card> | ||||
| @ -0,0 +1,17 @@ | ||||
| .card-f{ | ||||
|     color: #5a5a5a; | ||||
|     .card-f-l{ | ||||
|       margin-right: 24px;   | ||||
|     } | ||||
| } | ||||
| .chooseBox{ | ||||
|   display: flex; | ||||
| } | ||||
| .timeBox{ | ||||
|   display: flex; | ||||
|   margin: 0 0 0 10px; | ||||
| } | ||||
| .dateBox{ | ||||
|   display: inline-block; | ||||
|   margin: 0 0 0 10px; | ||||
| } | ||||
| @ -0,0 +1,125 @@ | ||||
| import { Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core'; | ||||
| import { DatePipe, ModalHelper, _HttpClient } from '@delon/theme'; | ||||
| import { G2MiniAreaClickItem, G2MiniAreaData } from '@delon/chart/mini-area'; | ||||
| import { format } from 'date-fns'; | ||||
| import { SFComponent, SFDateWidgetSchema, SFRadioWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; | ||||
| import { G2TimelineData, G2TimelineMap } from '@delon/chart/timeline'; | ||||
| import { Chart } from '@antv/g2'; | ||||
| const DataSet = require('@antv/data-set'); | ||||
| @Component({ | ||||
|   selector: 'app-datatable-compliance-index', | ||||
|   templateUrl: './index.component.html', | ||||
|   styleUrls: ['./index.component.less'], | ||||
|   providers: [DatePipe] | ||||
| }) | ||||
| export class DatatableComplianceIndexComponent implements OnInit { | ||||
|   @ViewChild('sf', { static: false }) | ||||
|   sf!: SFComponent; | ||||
|   ui!: SFUISchema; | ||||
|   schema: SFSchema = {}; | ||||
|  | ||||
|   mode = 'year'; | ||||
|   date: any = null; | ||||
|   dateFormat = 'yyyy-MM-dd'; | ||||
|   time: any = ['2022-01-01 00:00:00'] | ||||
|   constructor(private http: _HttpClient, private modal: ModalHelper, private ngZone: NgZone, private datePipe: DatePipe) {} | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.initSF(); | ||||
|   } | ||||
|  | ||||
|   changeData(){ | ||||
|     if(this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } else { | ||||
|       this.dateFormat = 'yyyy-MM-dd' | ||||
|     }  | ||||
|   } | ||||
|  | ||||
|   onChange(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   initSF() { | ||||
|     this.schema = { | ||||
|       properties: { | ||||
|         name: { | ||||
|           type: 'string', | ||||
|           title: '', | ||||
|           ui: { | ||||
|             widget: 'select', | ||||
|             placeholder: '网络货运人' | ||||
|           } | ||||
|         }, | ||||
|         name2: { | ||||
|           type: 'string', | ||||
|           title: '', | ||||
|           ui: { | ||||
|             widget: 'select', | ||||
|             placeholder: '部门' | ||||
|           } | ||||
|         }, | ||||
|         name3: { | ||||
|           type: 'string', | ||||
|           title: '', | ||||
|           ui: { | ||||
|             placeholder: '业务员' | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }; | ||||
|     this.ui = { | ||||
|       '*': { | ||||
|         grid: { span: 4 } | ||||
|       } | ||||
|     }; | ||||
|  | ||||
|   } | ||||
|  | ||||
|   data = [ | ||||
|     { Date: '22 February', 订单合格率: 50000, 付款及时率: 125000 }, | ||||
|     { Date: '28 February', 订单合格率: 60000, 付款及时率: 150000 }, | ||||
|     { Date: '3 March', 订单合格率: 100000, 付款及时率: 250000 }, | ||||
|     { Date: '20 March', 订单合格率: 200000, 付款及时率: 500000 }, | ||||
|     { Date: '7 April', 订单合格率: 250000, 付款及时率: 625000 }, | ||||
|     { Date: '13 June', 订单合格率: 210000, 付款及时率: 525000 } | ||||
|   ]; | ||||
|   render(el: ElementRef<HTMLDivElement>) { | ||||
|     this.ngZone.runOutsideAngular(() => this.init(el.nativeElement)); | ||||
|   } | ||||
|  | ||||
|   private init(el: HTMLElement): void { | ||||
|     const chart = new Chart({ | ||||
|       container: el, | ||||
|       autoFit: true, | ||||
|       height: 400 | ||||
|     }); | ||||
|     // 以三组数据为例, 需要展示 91/92/93年中a/b/c数据走势 | ||||
| 		const data = [ | ||||
| 			{x: '1991', z: 'a', y: 1}, | ||||
| 			{x: '1991', z: 'b', y: 2}, | ||||
| 			{x: '1991', z: 'c', y: 3}, | ||||
|  | ||||
| 			{x: '1992', z: 'a', y: 11}, | ||||
| 			{x: '1992', z: 'b', y: 22}, | ||||
| 			{x: '1992', z: 'c', y: 33}, | ||||
| 			 | ||||
| 			{x: '1993', z: 'a', y: 1}, | ||||
| 			{x: '1993', z: 'b', y: 2}, | ||||
| 			{x: '1993', z: 'c', y: 3} | ||||
| 		]; | ||||
|  | ||||
|     chart.data(data); | ||||
| 		// 在x*y的坐标点上按z值绘制线条, 如果z值相同将使用直线连接 | ||||
| 		chart.line().position('x*y').color('z'); | ||||
| 		// 在x*y的坐标上按z值绘制圆点 | ||||
| 		chart.point().position('x*y').size(4).color('z').shape('circle'); | ||||
| 		chart.render(); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,6 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [title]="'数据报表'"></page-header-wrapper> | ||||
| <nz-card> | ||||
|   <sf mode="search" [schema]="searchSchema" (formSubmit)="st.reset($event)" (formReset)="st.reset($event)"></sf> | ||||
|   <st #st [data]="url" [columns]="columns"></st> | ||||
| </nz-card> | ||||
| @ -0,0 +1,45 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFSchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-compliance-salesman', | ||||
|   templateUrl: './salesman.component.html', | ||||
| }) | ||||
| export class DatatableComplianceSalesmanComponent implements OnInit { | ||||
|   url = `/user`; | ||||
|   searchSchema: SFSchema = { | ||||
|     properties: { | ||||
|       no: { | ||||
|         type: 'string', | ||||
|         title: '编号' | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
|   @ViewChild('st') private readonly st!: STComponent; | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '编号', index: 'no' }, | ||||
|     { title: '调用次数', type: 'number', index: 'callNo' }, | ||||
|     { title: '头像', type: 'img', width: '50px', index: 'avatar' }, | ||||
|     { title: '时间', type: 'date', index: 'updatedAt' }, | ||||
|     { | ||||
|       title: '', | ||||
|       buttons: [ | ||||
|         // { text: '查看', click: (item: any) => `/form/${item.id}` }, | ||||
|         // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' }, | ||||
|       ] | ||||
|     } | ||||
|   ]; | ||||
|  | ||||
|   constructor(private http: _HttpClient, private modal: ModalHelper) { } | ||||
|  | ||||
|   ngOnInit(): void { } | ||||
|  | ||||
|   add(): void { | ||||
|     // this.modal | ||||
|     //   .createStatic(FormEditComponent, { i: { id: 0 } }) | ||||
|     //   .subscribe(() => this.st.reload()); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -32,7 +32,6 @@ | ||||
|           <nz-date-picker [(ngModel)]="date" [nzMode]="mode" [nzFormat]="dateFormat" *ngIf="mode !== 'define'" [nzDisabledDate]="disabledDate" (ngModelChange)="onChange($event)"></nz-date-picker> | ||||
|           <nz-range-picker [(ngModel)]="defineDate" [nzFormat]="dateFormat" *ngIf="mode === 'define'" [nzDisabledDate]="disabledDate" (ngModelChange)="onChange($event)"></nz-range-picker> | ||||
|         </div> | ||||
|  | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
| @ -51,7 +50,7 @@ | ||||
|           <label nz-radio-button nzValue="month">月</label> | ||||
|         </nz-radio-group> | ||||
|         <div class="dateBox"> | ||||
|           <nz-date-picker [nzDisabledDate]="disabledDate" [nzMode]="mode" (ngModelChange)="onChange($event)"></nz-date-picker> | ||||
|           <nz-date-picker [nzDisabledDate]="disabledDate" [(ngModel)]="dateNext" [nzMode]="modeNext" (ngModelChange)="onChangeNext($event)"></nz-date-picker> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
| @ -20,6 +20,9 @@ export class DatatableCustomindexComponent implements OnInit { | ||||
|   time: any = ['2022-01-01 00:00:00'] | ||||
|   dateFormat = 'yyyy-MM-dd'; | ||||
|   today = new Date(); | ||||
|   dateNext: any = null; | ||||
|   modeNext = 'year'; | ||||
|   timeNext: any = ['2022-01-01 00:00:00'] | ||||
|  | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '用户类型', index: 'networkTransporterName', className: 'text-center' }, | ||||
| @ -34,12 +37,12 @@ export class DatatableCustomindexComponent implements OnInit { | ||||
|   /** | ||||
|    * 查询参数 | ||||
|    */ | ||||
|    get reqParams() { | ||||
|     if(this.mode === 'year') { | ||||
|   get reqParams() { | ||||
|     if (this.mode === 'year') { | ||||
|       this.type = 1 | ||||
|     } else if(this.mode === 'month') { | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.type = 2 | ||||
|     } else if(this.mode === 'date') { | ||||
|     } else if (this.mode === 'date') { | ||||
|       this.type = 3 | ||||
|     } else { | ||||
|       this.type = 4 | ||||
| @ -47,8 +50,8 @@ export class DatatableCustomindexComponent implements OnInit { | ||||
|     let params: any = { | ||||
|       time: this.time, | ||||
|       type: this.type | ||||
|      }; | ||||
|    | ||||
|     }; | ||||
|  | ||||
|     delete params._$expand; | ||||
|     return { ...params }; | ||||
|   } | ||||
| @ -56,23 +59,23 @@ export class DatatableCustomindexComponent implements OnInit { | ||||
|   constructor(public service: DataService, private datePipe: DatePipe) { } | ||||
|   ngOnInit(): void { } | ||||
|  | ||||
|   changeData(){ | ||||
|     if(this.mode === 'year') { | ||||
|   changeData() { | ||||
|     if (this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } else { | ||||
|       this.dateFormat = 'yyyy-MM-dd' | ||||
|     }  | ||||
|     } | ||||
|   } | ||||
|   onChange(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|     if (this.mode === 'year') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } else if(this.mode === 'date') { | ||||
|     } else if (this.mode === 'date') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } else{ | ||||
|     } else { | ||||
|       this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + '00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } | ||||
|     this.st.reload({ ...this.reqParams }); | ||||
| @ -80,7 +83,22 @@ export class DatatableCustomindexComponent implements OnInit { | ||||
|   disabledDate = (current: Date): boolean => | ||||
|     // Can not select days before today and today | ||||
|     differenceInCalendarDays(current, this.today) > 0; | ||||
|   exportFun(){ | ||||
|  | ||||
|   changeDataNext() { | ||||
|     if (this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } | ||||
|   } | ||||
|   onChangeNext(result: any) { | ||||
|     if (this.mode === 'year') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } | ||||
|   } | ||||
|   exportFun() { | ||||
|  | ||||
|   } | ||||
|  | ||||
|  | ||||
| @ -0,0 +1,9 @@ | ||||
| <page-header [action]="phActionTpl"> | ||||
|   <ng-template #phActionTpl> | ||||
|     <button (click)="add()" nz-button nzType="primary">新建</button> | ||||
|   </ng-template> | ||||
| </page-header> | ||||
| <nz-card> | ||||
|   <sf mode="search" [schema]="searchSchema" (formSubmit)="st.reset($event)" (formReset)="st.reset($event)"></sf> | ||||
|   <st #st [data]="url" [columns]="columns"></st> | ||||
| </nz-card> | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableMancustomtableComponent } from './mancustomtable.component'; | ||||
|  | ||||
| describe('DatatableMancustomtableComponent', () => { | ||||
|   let component: DatatableMancustomtableComponent; | ||||
|   let fixture: ComponentFixture<DatatableMancustomtableComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [ DatatableMancustomtableComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableMancustomtableComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,45 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFSchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-mancustomtable', | ||||
|   templateUrl: './mancustomtable.component.html', | ||||
| }) | ||||
| export class DatatableMancustomtableComponent implements OnInit { | ||||
|   url = `/user`; | ||||
|   searchSchema: SFSchema = { | ||||
|     properties: { | ||||
|       no: { | ||||
|         type: 'string', | ||||
|         title: '编号' | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
|   @ViewChild('st') private readonly st!: STComponent; | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '编号', index: 'no' }, | ||||
|     { title: '调用次数', type: 'number', index: 'callNo' }, | ||||
|     { title: '头像', type: 'img', width: '50px', index: 'avatar' }, | ||||
|     { title: '时间', type: 'date', index: 'updatedAt' }, | ||||
|     { | ||||
|       title: '', | ||||
|       buttons: [ | ||||
|         // { text: '查看', click: (item: any) => `/form/${item.id}` }, | ||||
|         // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' }, | ||||
|       ] | ||||
|     } | ||||
|   ]; | ||||
|  | ||||
|   constructor(private http: _HttpClient, private modal: ModalHelper) { } | ||||
|  | ||||
|   ngOnInit(): void { } | ||||
|  | ||||
|   add(): void { | ||||
|     // this.modal | ||||
|     //   .createStatic(FormEditComponent, { i: { id: 0 } }) | ||||
|     //   .subscribe(() => this.st.reload()); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,43 @@ | ||||
| <!-- <page-header [title]="'订单管理'"> </page-header> --> | ||||
| <nz-card [nzBordered]="false"> | ||||
|   <!-- 搜索表单 --> | ||||
|   <div nz-row nzGutter="8"> | ||||
|     <!-- 查询字段小于或等于3个时,不显示伸缩按钮 --> | ||||
|     <div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4"> | ||||
|         <sf #sf mode="search" [schema]="schema" [button]="'none'"> | ||||
|           <button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="false" | ||||
|             (click)="st?.load(1)" acl [acl-ability]="['companyStaff-search']">查询</button> | ||||
|           <button nz-button (click)="resetSF()">重置</button> | ||||
|         </sf> | ||||
|     </div> | ||||
|  | ||||
|     <!-- 查询字段大于3个时,根据展开状态调整布局 --> | ||||
|     <ng-container *ngIf="queryFieldCount > 4"> | ||||
|       <div nz-col [nzSpan]="_$expand ? 24 : 18"> | ||||
|         <sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf> | ||||
|       </div> | ||||
|       <div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand"> | ||||
|         <button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="false" | ||||
|           (click)="st?.load(1)" acl [acl-ability]="['companyStaff-search']">查询</button> | ||||
|         <button nz-button (click)="resetSF()">重置</button> | ||||
|         <button nz-button nzType="link" (click)="expandToggle()"> | ||||
|           {{ !_$expand ? '展开' : '收起' }} | ||||
|           <i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i> | ||||
|         </button> | ||||
|       </div> | ||||
|     </ng-container> | ||||
|   </div> | ||||
|  | ||||
| </nz-card> | ||||
| <nz-card> | ||||
|   <div class="list-table-header-btn"> | ||||
|     <!-- <button nz-button nzType="default" (click)="gotoInviteRecord()">员工邀请记录</button> --> | ||||
|   </div> | ||||
|   <!-- 数据列表 --> | ||||
|   <st #st multiSort bordered [data]="service.$api_listOperationalReportPage" [columns]="columns" [ps]="20" | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [20, 50, 100] }" [loading]="false"> | ||||
|   </st> | ||||
|  | ||||
| </nz-card> | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatablePartnertableComponent } from './partnertable.component'; | ||||
|  | ||||
| describe('DatatablePartnertableComponent', () => { | ||||
|   let component: DatatablePartnertableComponent; | ||||
|   let fixture: ComponentFixture<DatatablePartnertableComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [ DatatablePartnertableComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatablePartnertableComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,147 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STChange, STColumn, STComponent, STData } from '@delon/abc/st'; | ||||
| import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; | ||||
| import { ModalHelper } from '@delon/theme'; | ||||
| import { EAEnvironmentService } from '@shared'; | ||||
| import { NzModalService } from 'ng-zorro-antd/modal'; | ||||
| import { DataService } from '../../../services/data.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-partnertable', | ||||
|   templateUrl: './partnertable.component.html', | ||||
| }) | ||||
| export class DatatablePartnertableComponent implements OnInit { | ||||
|   @ViewChild('st', { static: false }) st!: STComponent; | ||||
|   @ViewChild('sf', { static: false }) sf!: SFComponent; | ||||
|   _$expand = false; | ||||
|   ui!: SFUISchema; | ||||
|   schema!: SFSchema; | ||||
|   phone = ''; | ||||
|   columns!: STColumn[]; | ||||
|  | ||||
|   constructor( | ||||
|     public service: DataService, | ||||
|     private modalSrv: NzModalService, | ||||
|     private modal: ModalHelper, | ||||
|     private envSrv: EAEnvironmentService, | ||||
|   ) {} | ||||
|  | ||||
|   /** | ||||
|    * 查询字段个数 | ||||
|    */ | ||||
|   get queryFieldCount(): number { | ||||
|     return Object.keys(this.schema?.properties || {}).length; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 查询参数 | ||||
|    */ | ||||
|   get reqParams() { | ||||
|     const params = Object.assign({}, this.sf?.value || {}); | ||||
|     delete params._$expand; | ||||
|     return { ...params }; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 选中行 | ||||
|    */ | ||||
|   get selectedRows() { | ||||
|     return this.st?.list.filter((item) => item.checked) || []; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 伸缩查询条件 | ||||
|    */ | ||||
|   expandToggle() { | ||||
|     this._$expand = !this._$expand; | ||||
|     this.sf?.setValue('/_$expand', this._$expand); | ||||
|   } | ||||
|   /** | ||||
|    * 重置表单 | ||||
|    */ | ||||
|    resetSF() { | ||||
|     this.sf.reset(); | ||||
|     this._$expand = false; | ||||
|   } | ||||
|   /** | ||||
|    * 程序初始化入口 | ||||
|    */ | ||||
|   ngOnInit() { | ||||
|     this.initSF(); | ||||
|     this.initST() | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 初始化查询表单 | ||||
|    */ | ||||
|   initSF() { | ||||
|     this.schema = { | ||||
|       properties: { | ||||
|         _$expand: { type: 'boolean', ui: { hidden: true } }, | ||||
|         name: { | ||||
|           title: '合伙人名称', | ||||
|           type: 'string', | ||||
|           ui: { placeholder: '请输入' }, | ||||
|           readOnly: false, | ||||
|         }, | ||||
|         phone: { | ||||
|           title: '合伙人类型', | ||||
|           type: 'string', | ||||
|           ui: {  | ||||
|             widget: 'select', | ||||
|             placeholder: '请输入' }, | ||||
|           readOnly: false, | ||||
|         }, | ||||
|         phone01: { | ||||
|           title: '合伙人状态', | ||||
|           type: 'string', | ||||
|           ui: {  | ||||
|             widget: 'select', | ||||
|             placeholder: '请输入' }, | ||||
|           readOnly: false, | ||||
|         }, | ||||
|         createTime: { | ||||
|           type: 'string', | ||||
|           title: '注册时间', | ||||
|           ui: { widget: 'sl-from-to', type: 'date', format: 'yyyy-MM-dd' } as SFDateWidgetSchema, | ||||
|         }, | ||||
|       }, | ||||
|       type: 'object', | ||||
|     }; | ||||
|     this.ui = { '*': { spanLabelFixed: 80, grid: { span: 8, gutter: 4 }, enter: () => this.st?.load(1) } }; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 初始化数据列表 | ||||
|    */ | ||||
|   initST() { | ||||
|     this.columns = [ | ||||
|       { title: '合伙人名称', index: 'name', className: 'text-center' }, | ||||
|       { title: '注册时间', index: 'telephone', className: 'text-center' }, | ||||
|       { title: '注册时间', index: 'roleName', className: 'text-center' }, | ||||
|       { title: '业务员', index: 'lastLoginDate', className: 'text-center' }, | ||||
|       { | ||||
|         title: '合伙人状态', | ||||
|         index: 'stateLocked', | ||||
|         className: 'text-center', | ||||
|         type: 'enum', | ||||
|         enum: { 0: '正常', 1: '冻结' }, | ||||
|       }, | ||||
|       { title: '客户数', index: 'lastLoginDate', className: 'text-center' }, | ||||
|       { title: '收益额', index: 'lastLoginDate', className: 'text-center' }, | ||||
|       { title: '已提现金额', index: 'lastLoginDate', className: 'text-center' }, | ||||
|       { title: '订单数', index: 'lastLoginDate', className: 'text-center' }, | ||||
|       { title: '订单金额', index: 'lastLoginDate', className: 'text-center' }, | ||||
|       { title: '应收订单数', index: 'lastLoginDate', className: 'text-center' }, | ||||
|     ]; | ||||
|   } | ||||
|   | ||||
|   /** | ||||
|    * 数据列表状态变化事件 | ||||
|    */ | ||||
|   change(change: STChange) { | ||||
|     // console.log(change); | ||||
|   } | ||||
|  | ||||
|   | ||||
| } | ||||
| @ -0,0 +1,6 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [title]="'数据报表'"></page-header-wrapper> | ||||
| <nz-card> | ||||
|   <sf mode="search" [schema]="searchSchema" (formSubmit)="st.reset($event)" (formReset)="st.reset($event)"></sf> | ||||
|   <st #st [data]="url" [columns]="columns"></st> | ||||
| </nz-card> | ||||
| @ -0,0 +1,45 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFSchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-financetable', | ||||
|   templateUrl: './financetable.component.html', | ||||
| }) | ||||
| export class DatatableFinancetableComponent implements OnInit { | ||||
|   url = `/user`; | ||||
|   searchSchema: SFSchema = { | ||||
|     properties: { | ||||
|       no: { | ||||
|         type: 'string', | ||||
|         title: '编号' | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
|   @ViewChild('st') private readonly st!: STComponent; | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '编号', index: 'no' }, | ||||
|     { title: '调用次数', type: 'number', index: 'callNo' }, | ||||
|     { title: '头像', type: 'img', width: '50px', index: 'avatar' }, | ||||
|     { title: '时间', type: 'date', index: 'updatedAt' }, | ||||
|     { | ||||
|       title: '', | ||||
|       buttons: [ | ||||
|         // { text: '查看', click: (item: any) => `/form/${item.id}` }, | ||||
|         // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' }, | ||||
|       ] | ||||
|     } | ||||
|   ]; | ||||
|  | ||||
|   constructor(private http: _HttpClient, private modal: ModalHelper) { } | ||||
|  | ||||
|   ngOnInit(): void { } | ||||
|  | ||||
|   add(): void { | ||||
|     // this.modal | ||||
|     //   .createStatic(FormEditComponent, { i: { id: 0 } }) | ||||
|     //   .subscribe(() => this.st.reload()); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [title]="'开票数据报表'"></page-header-wrapper> | ||||
| <nz-card nzTitle="开票数据报表"> | ||||
|   <st | ||||
|     #st | ||||
|     [data]="data" | ||||
|     [columns]="columns" | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }" | ||||
|     [loadingDelay]="500" | ||||
|   > | ||||
|   </st> | ||||
| </nz-card> | ||||
| @ -0,0 +1,70 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFSchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-invoicetable', | ||||
|   templateUrl: './invoicetable.component.html', | ||||
| }) | ||||
| export class DatatableInvoicetableComponent implements OnInit { | ||||
|   @ViewChild('st', { static: false }) | ||||
|   st!: STComponent; | ||||
|   columns!: STColumn[]; | ||||
|  | ||||
|   data=[{name1:1111}] | ||||
|   constructor(private http: _HttpClient, private modal: ModalHelper) { } | ||||
|  | ||||
|   /** | ||||
|    * 查询参数 | ||||
|    */ | ||||
|    get reqParams() { | ||||
|     return {  }; | ||||
|   } | ||||
|   ngOnInit(): void {  | ||||
|     this.initST(); | ||||
|   } | ||||
|   initST() { | ||||
|     this.columns = [ | ||||
|       { | ||||
|         title: '运营主体', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|       { | ||||
|         title: '已开票总金额', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|       { | ||||
|         title: '当月已开票金额', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|       { | ||||
|         title: '已申请待开金额', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|       { | ||||
|         title: '未申请开票金额(历史)', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|       { | ||||
|         title: '未申请开票金额(当月)', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|       { | ||||
|         title: '当月发票张数', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|       { | ||||
|         title: '剩余发票张数', | ||||
|         index: 'name1' | ||||
|       }, | ||||
|        | ||||
|     ]; | ||||
|   } | ||||
|   add(): void { | ||||
|     // this.modal | ||||
|     //   .createStatic(FormEditComponent, { i: { id: 0 } }) | ||||
|     //   .subscribe(() => this.st.reload()); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -37,7 +37,7 @@ export class OperationtableCurveComponent implements OnInit { | ||||
|       { name: '订单数', month: '05', count: 47 }, | ||||
|       { name: '承运数', month: '05', count: 124 }, | ||||
|       { name: '订单数', month: '06', count: 203 }, | ||||
|       { name: '承运数', month: '06', count: 213 }, | ||||
|       { name: '承运数', month: '06', count: 203 }, | ||||
|       { name: '订单数', month: '07', count: 24 }, | ||||
|       { name: '订单数', month: '08', count: 356 }, | ||||
|       { name: '承运数', month: '09', count: 124 },  | ||||
|  | ||||
| @ -25,17 +25,19 @@ | ||||
|     [scroll]="{ x: '1200px' }" [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [20, 50, 100] }" [loading]="false"></st> | ||||
| </nz-card> | ||||
| <nz-card nzTitle="运营报表" [nzExtra]="extraTemplate"> | ||||
|   <ng-template #extraTemplate> | ||||
| <nz-card nzTitle="运营报表" [nzExtra]="extraTemplate01"> | ||||
|   <ng-template #extraTemplate01> | ||||
|     <div class="chooseBox"> | ||||
|       <button nz-button nzType="primary" (click)="exportFun()">导出</button> | ||||
|       <nz-select [(ngModel)]="enterpriseInfoId" style="width: 200px" (ngModelChange)="changeCurve()"> | ||||
|         <nz-option [nzValue]="item.value" [nzLabel]="item.label" *ngFor="let item of interManlist"></nz-option> | ||||
|       </nz-select> | ||||
|       <div class="timeBox"> | ||||
|         <nz-radio-group [(ngModel)]="mode" nzButtonStyle="solid" (ngModelChange)="changeData()"> | ||||
|         <nz-radio-group [(ngModel)]="modeNext" nzButtonStyle="solid" (ngModelChange)="changeDataNext()"> | ||||
|           <label nz-radio-button nzValue="year">年</label> | ||||
|           <label nz-radio-button nzValue="month">月</label> | ||||
|         </nz-radio-group> | ||||
|         <div class="dateBox"> | ||||
|           <nz-date-picker [nzDisabledDate]="disabledDate" [nzMode]="mode" (ngModelChange)="onChange($event)"></nz-date-picker> | ||||
|           <nz-date-picker [nzDisabledDate]="disabledDate" [(ngModel)]="dateNext" [nzMode]="modeNext" (ngModelChange)="onChangeNext($event)"></nz-date-picker> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @ -43,5 +45,8 @@ | ||||
|   <app-datatable-curve></app-datatable-curve> | ||||
| </nz-card> | ||||
| <nz-card nzTitle="运单状态分布"> | ||||
|   <nz-select [(ngModel)]="enterpriseInfoIdPie" style="width: 200px" (ngModelChange)="changeCurve()"> | ||||
|     <nz-option [nzValue]="item.value" [nzLabel]="item.label" *ngFor="let item of interManlist"></nz-option> | ||||
|   </nz-select> | ||||
| <app-opeationtable-pie></app-opeationtable-pie> | ||||
| </nz-card> | ||||
| @ -19,8 +19,13 @@ export class DatatableOperationtableComponent implements OnInit { | ||||
|   defineDate = []; | ||||
|   time: any = ['2022-01-01 00:00:00'] | ||||
|   dateFormat = 'yyyy-MM-dd'; | ||||
|   dateNext: any = null; | ||||
|   modeNext = 'year'; | ||||
|   timeNext: any = ['2022-01-01 00:00:00'] | ||||
|   today = new Date(); | ||||
|  | ||||
|   enterpriseInfoId = '' | ||||
|   enterpriseInfoIdPie = '' | ||||
|   interManlist: any = [] | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '运营主体', index: 'networkTransporterName', className: 'text-center' }, | ||||
|     { title: '订单数', index: 'zsl', className: 'text-center' }, | ||||
| @ -37,12 +42,12 @@ export class DatatableOperationtableComponent implements OnInit { | ||||
|   /** | ||||
|    * 查询参数 | ||||
|    */ | ||||
|    get reqParams() { | ||||
|     if(this.mode === 'year') { | ||||
|   get reqParams() { | ||||
|     if (this.mode === 'year') { | ||||
|       this.type = 1 | ||||
|     } else if(this.mode === 'month') { | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.type = 2 | ||||
|     } else if(this.mode === 'date') { | ||||
|     } else if (this.mode === 'date') { | ||||
|       this.type = 3 | ||||
|     } else { | ||||
|       this.type = 4 | ||||
| @ -50,32 +55,41 @@ export class DatatableOperationtableComponent implements OnInit { | ||||
|     let params: any = { | ||||
|       time: this.time, | ||||
|       type: this.type | ||||
|      }; | ||||
|    | ||||
|     }; | ||||
|  | ||||
|     delete params._$expand; | ||||
|     return { ...params }; | ||||
|   } | ||||
|  | ||||
|   constructor(public service: DataService, private datePipe: DatePipe) { } | ||||
|   ngOnInit(): void { } | ||||
|   ngOnInit(): void { | ||||
|     this.initData() | ||||
|   } | ||||
|   initData() { | ||||
|     this.service.getNetworkFreightForwarder().subscribe(res => { | ||||
|       this.interManlist = res | ||||
|       this.enterpriseInfoId = res[0].value | ||||
|       this.enterpriseInfoIdPie = res[0].value | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   changeData(){ | ||||
|     if(this.mode === 'year') { | ||||
|   changeData() { | ||||
|     if (this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } else { | ||||
|       this.dateFormat = 'yyyy-MM-dd' | ||||
|     }  | ||||
|     } | ||||
|   } | ||||
|   onChange(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|     if (this.mode === 'year') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|     } else if (this.mode === 'month') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } else if(this.mode === 'date') { | ||||
|     } else if (this.mode === 'date') { | ||||
|       this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } else{ | ||||
|     } else { | ||||
|       this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + '00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00'] | ||||
|     } | ||||
|     this.st.reload({ ...this.reqParams }); | ||||
| @ -83,8 +97,27 @@ export class DatatableOperationtableComponent implements OnInit { | ||||
|   disabledDate = (current: Date): boolean => | ||||
|     // Can not select days before today and today | ||||
|     differenceInCalendarDays(current, this.today) > 0; | ||||
|   exportFun(){ | ||||
|   exportFun() { | ||||
|  | ||||
|   } | ||||
|   changeCurve(){ | ||||
|  | ||||
|   } | ||||
|   changePie(){ | ||||
|  | ||||
|   } | ||||
|   changeDataNext() { | ||||
|     if(this.mode === 'year') { | ||||
|       this.dateFormat = 'yyyy' | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.dateFormat = 'yyyy-MM' | ||||
|     } | ||||
|   } | ||||
|   onChangeNext(result: any) { | ||||
|     if(this.mode === 'year') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00'] | ||||
|     } else if(this.mode === 'month') { | ||||
|       this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00'] | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -6,14 +6,34 @@ import { DatatableDriverComponent } from './components/customtable/driver/driver | ||||
| import { DatatableOperationtableComponent } from './components/operationtable/operationtable.component'; | ||||
| import { DatatableOrderReportingComponent } from './reporting/components/order-reporting/order-reporting.component'; | ||||
| import { DatatableDataindexComponent } from './components/dataindex/dataindex.component'; | ||||
| import { DatatableComplianceIndexComponent } from './components/compliance/index/index.component'; | ||||
| import { DatatableFinancetableComponent } from './components/financetable/financetable.component'; | ||||
| import { DatatableInvoicetableComponent } from './components/invoicetable/invoicetable.component'; | ||||
| import { DatatableComplianceSalesmanComponent } from './components/compliance/salesman/salesman.component'; | ||||
| import { DatatableComplianceCustomerComponent } from './components/compliance/customer/customer.component'; | ||||
| import { DatatableFundReportingComponent } from './reporting/components/fund-reporting/fund-reporting.component'; | ||||
| import { DatatableMancustomtableComponent } from './components/customtable/mancustomtable/mancustomtable.component'; | ||||
| import { DatatablePartnertableComponent } from './components/customtable/partnertable/partnertable.component'; | ||||
| import { DatatableBusiindexComponent } from './components/busitable/busiindex/busiindex.component'; | ||||
| import { DatatableMantableComponent } from './components/busitable/mantable/mantable.component'; | ||||
|  | ||||
| const routes: Routes = [ | ||||
|   { path: 'dataindex', component: DatatableDataindexComponent }, | ||||
|   { path: 'customtable/customindex', component: DatatableCustomindexComponent }, | ||||
|   { path: 'customtable/owner', component: DatatableOwnerComponent }, | ||||
|   { path: 'customtable/driver', component: DatatableDriverComponent }, | ||||
|   { path: 'customtable/mancustomtable', component: DatatableMancustomtableComponent }, | ||||
|   { path: 'customtable/partnertable', component: DatatablePartnertableComponent }, | ||||
|   { path: 'operationtable', component: DatatableOperationtableComponent }, | ||||
|   { path: 'reporting/order', component: DatatableOrderReportingComponent }]; | ||||
|   { path: 'reporting/order', component: DatatableOrderReportingComponent }, | ||||
|   { path: 'compliancetabel/index', component: DatatableComplianceIndexComponent }, | ||||
|   { path: 'compliancetabel/salesman', component: DatatableComplianceSalesmanComponent }, | ||||
|   { path: 'compliancetabel/customer', component: DatatableComplianceCustomerComponent }, | ||||
|   { path: 'financetable', component: DatatableFinancetableComponent }, | ||||
|   { path: 'invoicetable', component: DatatableInvoicetableComponent }, | ||||
|   { path: 'reporting/fund', component: DatatableFundReportingComponent }, | ||||
|   { path: 'busitable/busiindex', component: DatatableBusiindexComponent }, | ||||
|   { path: 'busitable/mantable', component: DatatableMantableComponent }]; | ||||
|    | ||||
|  | ||||
| @NgModule({ | ||||
|  | ||||
| @ -9,6 +9,20 @@ import { OperationtablePieComponent } from './components/operationtable/pie/pie. | ||||
| import { DatatableOrderReportingComponent } from './reporting/components/order-reporting/order-reporting.component'; | ||||
| import { DatatableDataindexComponent } from './components/dataindex/dataindex.component'; | ||||
| import { OperationtableCurveComponent } from './components/operationtable/curve/curve.component'; | ||||
| import { DatatableComplianceIndexComponent } from './components/compliance/index/index.component'; | ||||
| import { DatatableFinancetableComponent } from './components/financetable/financetable.component'; | ||||
| import { DatatableInvoicetableComponent } from './components/invoicetable/invoicetable.component'; | ||||
| import { DatatableComplianceSalesmanComponent } from './components/compliance/salesman/salesman.component'; | ||||
| import { DatatableComplianceCustomerComponent } from './components/compliance/customer/customer.component'; | ||||
| import { DatatableReportingUploadSettingComponent } from './reporting/components/upload-setting/upload-setting.component'; | ||||
| import { DatatableReportingVerifyResultComponent } from './reporting/components/verify-result/verify-result.component'; | ||||
| import { DatatableFundReportingComponent } from './reporting/components/fund-reporting/fund-reporting.component'; | ||||
| import { DatatableMancustomtableComponent } from './components/customtable/mancustomtable/mancustomtable.component'; | ||||
| import { DatatablePartnertableComponent } from './components/customtable/partnertable/partnertable.component'; | ||||
| import { DatatableBusiindexComponent } from './components/busitable/busiindex/busiindex.component'; | ||||
| import { DatatableMantableComponent } from './components/busitable/mantable/mantable.component'; | ||||
| import { busitableCurveComponent } from './components/busitable/busiindex/curve/curve.component'; | ||||
| import { busitablePillarComponent } from './components/busitable/busiindex/pillar/pillar.component'; | ||||
|  | ||||
| const COMPONENTS: Type<void>[] = [ | ||||
|   DatatableDataindexComponent, | ||||
| @ -18,8 +32,23 @@ const COMPONENTS: Type<void>[] = [ | ||||
|   DatatableOperationtableComponent, | ||||
|   OperationtablePieComponent, | ||||
|   DatatableOrderReportingComponent, | ||||
|   OperationtableCurveComponent | ||||
| ]; | ||||
|   OperationtableCurveComponent, | ||||
|   DatatableComplianceIndexComponent, | ||||
|   DatatableFinancetableComponent, | ||||
|   DatatableInvoicetableComponent, | ||||
|   DatatableComplianceSalesmanComponent, | ||||
|   DatatableComplianceCustomerComponent, | ||||
|   DatatableReportingUploadSettingComponent, | ||||
|   DatatableReportingVerifyResultComponent, | ||||
|   DatatableFundReportingComponent, | ||||
|   DatatableMancustomtableComponent, | ||||
|   DatatablePartnertableComponent, | ||||
|   DatatableBusiindexComponent, | ||||
|   DatatableMantableComponent, | ||||
|   busitableCurveComponent, | ||||
|   busitablePillarComponent | ||||
| ] | ||||
|   | ||||
|  | ||||
| @NgModule({ | ||||
|   imports: [ | ||||
|  | ||||
| @ -0,0 +1,57 @@ | ||||
| <page-header-wrapper [title]="''"></page-header-wrapper> | ||||
|  | ||||
| <nz-card> | ||||
|   <!-- 搜索表单 --> | ||||
|   <div nz-row nzGutter="8"> | ||||
|     <div nz-col [nzSpan]="_$expand ? 24 : 18"> | ||||
|       <sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf> | ||||
|     </div> | ||||
|     <div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand"> | ||||
|       <button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="false" (click)="search()" acl | ||||
|         [acl-ability]="['RiskOrder-Search']">查询</button> | ||||
|       <button nz-button (click)="resetSF()">重置</button> | ||||
|       <button nz-button (click)="resetSF()">导出</button> | ||||
|       <button nz-button nzType="link" (click)="expandToggle()"> | ||||
|         {{ !_$expand ? '展开' : '收起' }} | ||||
|         <i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i> | ||||
|       </button> | ||||
|     </div> | ||||
|   </div> | ||||
| </nz-card> | ||||
| <nz-card> | ||||
|   <nz-tabset [nzTabBarExtraContent]="extraTemplate" *ngIf="tabs.length>0"> | ||||
|  | ||||
|     <nz-tab *ngFor="let tab of tabs" [nzTitle]="tab.name" (nzSelect)="selectChange(tab)"> | ||||
|     </nz-tab> | ||||
|   </nz-tabset> | ||||
|   <!-- 数据列表 --> | ||||
|   <st #st [scroll]="{x:'1200px'}" [data]="service.$api_order_reporting_page" [columns]="columns" | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [10,20, 50, 100] }" [loading]="false"> | ||||
|     <ng-template st-row="orderStatus" let-item let-index="index"> | ||||
|       <a (click)="viewAuditResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a> | ||||
|       <span *ngIf="item?.billStatus !== '2'">{{item?.billStatusLabel}}</span> | ||||
|  | ||||
|     </ng-template> | ||||
|  | ||||
|     <ng-template st-row="localValid" let-item let-index="index"> | ||||
|       <a (click)="viewResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a> | ||||
|       <span *ngIf="item?.billStatus !== '2'">{{item?.billStatusLabel}}</span> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="amount" let-item let-index="index"> | ||||
|       <div class="text-right">{{item?.amount | currency :' '}}</div> | ||||
|     </ng-template> | ||||
|   </st> | ||||
| </nz-card> | ||||
| <ng-template #extraTemplate> | ||||
|   <div class="d-flex align-items-center"> | ||||
|     <div class="mr-md"> | ||||
|       已选择 | ||||
|       <strong class="text-red">{{ selectedRows.length }}</strong> 条数据 | ||||
|     </div> | ||||
|     <button nz-button nzType="primary" (click)="upload()">上传</button> | ||||
|     <button nz-button nzType="primary" (click)="recall()">撤回</button> | ||||
|     <button nz-button nzType="primary" (click)="uploadSetting()">上传设置</button> | ||||
|   </div> | ||||
| </ng-template> | ||||
| @ -0,0 +1,5 @@ | ||||
| :host { | ||||
|   .text-black { | ||||
|     color: #000; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableFundReportingComponent } from './fund-reporting.component'; | ||||
|  | ||||
| describe('DatatableFundReportingComponent', () => { | ||||
|   let component: DatatableFundReportingComponent; | ||||
|   let fixture: ComponentFixture<DatatableFundReportingComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [DatatableFundReportingComponent] | ||||
|     }) | ||||
|       .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableFundReportingComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,445 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { ActivatedRoute, Router } from '@angular/router'; | ||||
| import { STColumn, STComponent, STData } from '@delon/abc/st'; | ||||
| import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; | ||||
| import { ShipperBaseService } from '@shared'; | ||||
| import { NzModalService } from 'ng-zorro-antd/modal'; | ||||
| import { ReportingService } from '../../services/reporting.service'; | ||||
| import { DatatableReportingUploadSettingComponent } from '../upload-setting/upload-setting.component'; | ||||
| import { DatatableReportingVerifyResultComponent } from '../verify-result/verify-result.component'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-fund-reporting', | ||||
|   templateUrl: './fund-reporting.component.html', | ||||
|   styleUrls: ['./fund-reporting.component.less'] | ||||
| }) | ||||
| export class DatatableFundReportingComponent implements OnInit { | ||||
|   _$expand = false; | ||||
|   ui!: SFUISchema; | ||||
|   schema!: SFSchema; | ||||
|   columns!: STColumn[]; | ||||
|   @ViewChild('st', { static: false }) st!: STComponent; | ||||
|   @ViewChild('sf', { static: false }) sf!: SFComponent; | ||||
|   tabType!: string; | ||||
|   tabs: any[] = [ | ||||
|     { name: '待上传', value: '1' }, | ||||
|     { name: '上传中', value: '2' }, | ||||
|     { name: '已上传', value: '3' }, | ||||
|     { name: '异常', value: '4' }, | ||||
|     { name: '全部', value: '' } | ||||
|   ]; | ||||
|   selectedIndex = ''; //选择的项目 | ||||
|   serviceTel = ''; | ||||
|   constructor( | ||||
|     public service: ReportingService, | ||||
|     private router: Router, | ||||
|     private ar: ActivatedRoute, | ||||
|     private modal: NzModalService, | ||||
|     public shipperSrv: ShipperBaseService | ||||
|   ) { | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 查询字段个数 | ||||
|    */ | ||||
|   get queryFieldCount(): number { | ||||
|     return Object.keys(this.schema?.properties || {}).length; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 查询参数 | ||||
|    */ | ||||
|   get reqParams() { | ||||
|     const params = Object.assign({}, this.sf?.value || {}, { | ||||
|       representationsStatus: this.selectedIndex, | ||||
|     }); | ||||
|     delete params._$expand; | ||||
|     return { ...params }; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 选中行 | ||||
|    */ | ||||
|   get selectedRows() { | ||||
|     return this.st?.list.filter((item: any) => item.checked) || []; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 伸缩查询条件 | ||||
|    */ | ||||
|   expandToggle() { | ||||
|     this._$expand = !this._$expand; | ||||
|     this.sf?.setValue('/_$expand', this._$expand); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 重置表单 | ||||
|    */ | ||||
|   resetSF() { | ||||
|     this.sf.reset(); | ||||
|     this._$expand = false; | ||||
|   } | ||||
|   /** | ||||
|    * 程序初始化入口 | ||||
|    */ | ||||
|   ngOnInit() { | ||||
|     this.initSF(); | ||||
|     this.initST(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 初始化查询表单 | ||||
|    */ | ||||
|   initSF() { | ||||
|     this.schema = { | ||||
|       properties: { | ||||
|         _$expand: { type: 'boolean', ui: { hidden: true } }, | ||||
|         billCode: { title: '订单号', type: 'string', ui: { placeholder: '请输入' } }, | ||||
|         resourceCode: { | ||||
|           type: 'string', | ||||
|           title: '运单号', | ||||
|           ui: { | ||||
|             placeholder: '请输入', | ||||
|           }, | ||||
|         }, | ||||
|         enterpriseInfoId: { | ||||
|           title: '网络货运人', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             placeholder: '请选择', | ||||
|             widget: 'select', | ||||
|             asyncData: () => this.shipperSrv.getNetworkFreightForwarder({}, false), | ||||
|  | ||||
|             allowClear: true | ||||
|           } | ||||
|         }, | ||||
|         externalResourceCode: { | ||||
|           title: '货主', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             placeholder: '请输入', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
|         driverName: { | ||||
|           title: '承运司机', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             placeholder: '请输入司机姓名/手机号', visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
|         carNo: { | ||||
|           title: '车牌号', | ||||
|           type: 'string', | ||||
|           maxLength: 9, | ||||
|           ui: { | ||||
|             placeholder: '请输入', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
|         serviceType: { | ||||
|           title: '上传状态', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             placeholder: '请选择', | ||||
|             widget: 'dict-select', | ||||
|             params: { dictKey: 'service:type' }, | ||||
|             containsAllLabel: true, | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
|         serviceType1: { | ||||
|           title: '本地校验', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             placeholder: '请选择', | ||||
|             widget: 'dict-select', | ||||
|             params: { dictKey: 'service:type' }, | ||||
|             containsAllLabel: true, | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
|         createTime: { | ||||
|           title: '上传时间', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             widget: 'sl-from-to', | ||||
|             type: 'date', | ||||
|             format: 'yyyy-MM-dd', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } as SFDateWidgetSchema, | ||||
|         }, | ||||
|         createTime1: { | ||||
|           title: '运单生成时间', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             widget: 'sl-from-to', | ||||
|             type: 'date', | ||||
|             format: 'yyyy-MM-dd', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } as SFDateWidgetSchema, | ||||
|         }, | ||||
|         createTime2: { | ||||
|           title: '发货时间', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             widget: 'sl-from-to', | ||||
|             type: 'date', | ||||
|             format: 'yyyy-MM-dd', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } as SFDateWidgetSchema, | ||||
|         }, | ||||
|         createTime3: { | ||||
|           title: '收货时间', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             widget: 'sl-from-to', | ||||
|             type: 'date', | ||||
|             format: 'yyyy-MM-dd', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } as SFDateWidgetSchema, | ||||
|         }, | ||||
|  | ||||
|         loadingPlace: { | ||||
|           title: '车辆轨迹', | ||||
|           type: 'string', | ||||
|           enum: [ | ||||
|             { label: '全部', value: '' }, | ||||
|             { label: '有', value: '1' }, | ||||
|             { label: '无', value: '0' } | ||||
|           ], | ||||
|           ui: { | ||||
|             placeholder: '请选择', | ||||
|             widget: 'select', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
|         loadingPlace1: { | ||||
|           title: '司机轨迹', | ||||
|           type: 'string', | ||||
|           enum: [ | ||||
|             { label: '全部', value: '' }, | ||||
|             { label: '有', value: '1' }, | ||||
|             { label: '无', value: '0' } | ||||
|           ], | ||||
|           ui: { | ||||
|             placeholder: '请选择', | ||||
|             widget: 'select', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
|       }, | ||||
|     }; | ||||
|     this.ui = { | ||||
|       '*': { spanLabelFixed: 120, grid: { span: 8, gutter: 4 }, enter: () => this.search() }, | ||||
|       $time: { grid: { span: 24 } }, | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 初始化数据列表 | ||||
|    */ | ||||
|   initST() { | ||||
|     this.columns = [ | ||||
|       { title: '', type: 'checkbox', className: 'text-center', width: '60px', }, | ||||
|       { title: '订单状态', render: 'orderStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '司机状态', render: 'driverStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '车辆状态', render: 'carStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '本地校验', render: 'localValid', className: 'text-center', width: '120px', }, | ||||
|       { | ||||
|         title: '订单号', | ||||
|         render: 'billComplianceVOS', | ||||
|         className: 'text-center', | ||||
|         width: '150px', | ||||
|       }, | ||||
|       { title: '运单号', render: 'freightDetails', className: 'text-center', width: '150px', }, | ||||
|  | ||||
|       { | ||||
|         title: '网络货运人', | ||||
|         render: 'serviceType', | ||||
|         className: 'text-center', | ||||
|         width: '180px', | ||||
|       }, | ||||
|       { title: '统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '200px' }, | ||||
|       { title: '业务类型', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '120px' }, | ||||
|       { title: '运单生成时间', render: 'goodsInfoVOList', className: 'text-center', width: '180px' }, | ||||
|       { title: '发货时间', render: 'driver', className: 'text-center', width: '180px' }, | ||||
|       { title: '收货时间', render: 'payeeName', className: 'text-center', width: '180px' }, | ||||
|       { title: '托运人名称', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '托运人统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '200px' }, | ||||
|       { title: '装货地址', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '200px' }, | ||||
|       { title: '收货方名称', render: 'driver', className: 'text-center', width: '150px' }, | ||||
|       { title: '收货地址', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '运费金额', render: 'amount', className: 'text-center', width: '250px' }, | ||||
|       { title: '车牌号', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '车牌颜色', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '司机姓名', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '司机手机号码', render: 'transportInfo', className: 'text-center', width: '200px' }, | ||||
|       { title: '司机身份证号', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '货物信息', render: 'transportInfo', className: 'text-center', width: '180px' }, | ||||
|       { title: '实际承运人名称', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '实际承运人证件号码', render: 'transportInfo', className: 'text-center', width: '200px' }, | ||||
|       { title: '实际承运人道路运输许可证号', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '车辆轨迹', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '司机轨迹', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '上传次数', render: 'transportInfo', className: 'text-center', width: '150px' }, | ||||
|       { title: '上传时间', render: 'transportInfo', className: 'text-center', width: '180px' }, | ||||
|     ]; | ||||
|   } | ||||
|  | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    *撤销 | ||||
|    * @param record 记录实例 | ||||
|    */ | ||||
|   recall() { | ||||
|     if (this.selectedRows.length === 0) { | ||||
|       this.openWainingModal('请选择需要撤回的数据'); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     this.service.request(this.service.$api_recall_reporting, { rows: this.selectedRows }).subscribe((res: any) => { | ||||
|       if (res) { | ||||
|         this.search(); | ||||
|       } | ||||
|     }) | ||||
|  | ||||
|   } | ||||
|  | ||||
|   selectChange(item: any) { | ||||
|     this.selectedIndex = item?.representationsStatus || ''; | ||||
|     setTimeout(() => { | ||||
|       this.st.load(1); | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 查看当行数据 | ||||
|    */ | ||||
|   view(record: STData) { | ||||
|     // this.router.navigate(['../view', record.uuid], { relativeTo: this.ar }); | ||||
|     this.router.navigate(['../detail'], { | ||||
|       queryParams: { | ||||
|         id: record.id, | ||||
|       }, | ||||
|       relativeTo: this.ar | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   // appeal(item: any) { | ||||
|   //   const modalRef = this.modal.create({ | ||||
|   //     nzTitle: '申诉', | ||||
|   //     nzWidth: '40%', | ||||
|   //     nzContent: CtcAppealComponent, | ||||
|   //     nzComponentParams: { | ||||
|   //       i: item, | ||||
|   //       status: 'add' | ||||
|   //     }, | ||||
|   //     nzFooter: null | ||||
|   //   }); | ||||
|   //   modalRef.afterClose.subscribe(res => { | ||||
|   //     if (res) { | ||||
|   //       this.search({ representationsStatus: '' }); | ||||
|   //     } | ||||
|   //   }) | ||||
|   // } | ||||
|  | ||||
|   /** | ||||
|    * 上传 | ||||
|    */ | ||||
|   upload() { | ||||
|     if (this.selectedRows.length === 0) { | ||||
|       this.openWainingModal('请选择需要上传的数据'); | ||||
|       return; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    * | ||||
|    * @param params 上传设置 | ||||
|    */ | ||||
|   uploadSetting() { | ||||
|     const modalRef = this.modal.create({ | ||||
|       nzTitle: '上传设置', | ||||
|       nzWidth: 600, | ||||
|       nzContent: DatatableReportingUploadSettingComponent, | ||||
|       nzComponentParams: {}, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|     modalRef.afterClose.subscribe(res => { | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 查看校验结果 | ||||
|    */ | ||||
|   viewResult(item: any) { | ||||
|     const modalRef = this.modal.create({ | ||||
|       nzTitle: '校验结果', | ||||
|       nzWidth: 1200, | ||||
|       nzContent: DatatableReportingVerifyResultComponent, | ||||
|       nzComponentParams: { | ||||
|         record: item | ||||
|       }, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|     modalRef.afterClose.subscribe(res => { | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 查看监管审核结果 | ||||
|    */ | ||||
|   viewAuditResult(record: any) { | ||||
|     if (record?.billStatus !== '2') { | ||||
|       return; | ||||
|     } | ||||
|     this.openWainingModal('监管审核结果', record?.result) | ||||
|   } | ||||
|  | ||||
|  | ||||
|   search() { | ||||
|     this.st.load(1); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|   * 异步导出 | ||||
|   */ | ||||
|   export() { | ||||
|     this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list); | ||||
|   } | ||||
|  | ||||
|   openWainingModal(content: string, title = '提示') { | ||||
|     this.modal.warning({ | ||||
|       nzMask: false, | ||||
|       nzTitle: title, | ||||
|       nzContent: content, | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -29,57 +29,29 @@ | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [10,20, 50, 100] }" [loading]="false"> | ||||
|     <ng-template st-row="orderSn" let-item let-index="index"> | ||||
|       <a (click)="view(item)">{{item.billCode}}</a> | ||||
|     <ng-template st-row="orderStatus" let-item let-index="index"> | ||||
|       <a (click)="viewAuditResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a> | ||||
|       <span *ngIf="item?.billStatus !== '2'">{{item?.billStatusLabel}}</span> | ||||
|  | ||||
|     </ng-template> | ||||
|     <ng-template st-row="freightDetails" let-item> | ||||
|       <div *ngFor="let item of item.freightDetails"> | ||||
|         <div>{{item.expenseName}}:{{item.price | currency}} </div> | ||||
|       </div> | ||||
|  | ||||
|     <ng-template st-row="localValid" let-item let-index="index"> | ||||
|       <a (click)="viewResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a> | ||||
|       <span *ngIf="item?.billStatus !== '2'">{{item?.billStatusLabel}}</span> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="loadingPlace" let-item let-index="index"> | ||||
|       <div *ngFor="let address of item.loadingAddressArr">{{ address }} </div> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="dischargePlace" let-item let-index="index"> | ||||
|       <div *ngFor="let address of item.unloadingAddressArr">{{ address }}</div> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="goodsInfoVOList" let-item> | ||||
|       <div *ngFor="let item of item.goodsInfoVOList"> | ||||
|         <div>货物名称 : {{item.goodsName}}</div> | ||||
|         <div>重量/体积 : {{item.weight}}/{{item.volume}}</div> | ||||
|         <div>车型/车长 :{{item.carModelLabel}}/{{item.carLengthLabel}}</div> | ||||
|       </div> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="driver" let-item> | ||||
|       <div> {{item.driverName}}</div> | ||||
|       <div>{{item.driverPhone}}</div> | ||||
|       <div>{{item.carNo}}</div> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="payeeName" let-item> | ||||
|       <div>{{item.payeeName}}</div> | ||||
|       <div>{{item.payeePhone}}</div> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="transportInfo" let-item> | ||||
|       <div>创建时间:{{item.createTime}}</div> | ||||
|       <div>装货时间:{{item.loadTime}}</div> | ||||
|       <div>卸货时间:{{item.unloadTime}}</div> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="billComplianceVOS" let-item> | ||||
|       <div *ngFor="let item of item?.billComplianceVOS">{{item?.complianceName}}</div> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="serviceType" let-item> | ||||
|       <div>{{item?.billTypeLabel}} ({{item?.serviceTypeLabel}}) </div> | ||||
|     <ng-template st-row="amount" let-item let-index="index"> | ||||
|       <div class="text-right">{{item?.amount | currency :' '}}</div> | ||||
|     </ng-template> | ||||
|   </st> | ||||
| </nz-card> | ||||
| <ng-template #extraTemplate> | ||||
|   <div class="d-flex align-items-center "> | ||||
|   <div class="d-flex align-items-center"> | ||||
|     <div class="mr-md"> | ||||
|       已选择 | ||||
|       <strong class="text-red">{{ selectedRows.length }}</strong> 条数据 | ||||
|     </div> | ||||
|     <button nz-button nzType="primary" (click)="upload()">上传</button> | ||||
|     <button nz-button nzType="primary" (click)="recall({})">撤回</button> | ||||
|     <button nz-button nzType="primary" (click)="recall()">撤回</button> | ||||
|     <button nz-button nzType="primary" (click)="uploadSetting()">上传设置</button> | ||||
|   </div> | ||||
| </ng-template> | ||||
|  | ||||
| @ -0,0 +1,5 @@ | ||||
| :host { | ||||
|   .text-black { | ||||
|     color: #000; | ||||
|   } | ||||
| } | ||||
| @ -1,15 +1,17 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { Router, ActivatedRoute } from '@angular/router'; | ||||
| import { ActivatedRoute, Router } from '@angular/router'; | ||||
| import { STColumn, STComponent, STData } from '@delon/abc/st'; | ||||
| import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
| import { ShipperBaseService } from '@shared'; | ||||
| import { NzModalService } from 'ng-zorro-antd/modal'; | ||||
| import { ReportingService } from '../../services/reporting.service'; | ||||
| import { DatatableReportingUploadSettingComponent } from '../upload-setting/upload-setting.component'; | ||||
| import { DatatableReportingVerifyResultComponent } from '../verify-result/verify-result.component'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-order-reporting', | ||||
|   templateUrl: './order-reporting.component.html', | ||||
|   styleUrls: ['./order-reporting.component.less'] | ||||
| }) | ||||
| export class DatatableOrderReportingComponent implements OnInit { | ||||
|   _$expand = false; | ||||
| @ -226,7 +228,7 @@ export class DatatableOrderReportingComponent implements OnInit { | ||||
|           ], | ||||
|           ui: { | ||||
|             placeholder: '请选择', | ||||
|  | ||||
|             widget: 'select', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
| @ -242,7 +244,7 @@ export class DatatableOrderReportingComponent implements OnInit { | ||||
|           ], | ||||
|           ui: { | ||||
|             placeholder: '请选择', | ||||
|  | ||||
|             widget: 'select', | ||||
|             visibleIf: { | ||||
|               _$expand: (value: boolean) => value, | ||||
|             }, | ||||
| @ -261,11 +263,11 @@ export class DatatableOrderReportingComponent implements OnInit { | ||||
|    */ | ||||
|   initST() { | ||||
|     this.columns = [ | ||||
|       { title: '', type: 'checkbox', className: 'text-center', width: '80px', }, | ||||
|       { title: '订单状态', index: 'name', className: 'text-center', width: '120px', }, | ||||
|       { title: '司机状态', index: 'name', className: 'text-center', width: '120px', }, | ||||
|       { title: '车辆状态', index: 'name', className: 'text-center', width: '120px', }, | ||||
|       { title: '本地校验', render: 'orderSn', className: 'text-center', width: '180px', }, | ||||
|       { title: '', type: 'checkbox', className: 'text-center', width: '60px', }, | ||||
|       { title: '订单状态', render: 'orderStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '司机状态', render: 'driverStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '车辆状态', render: 'carStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '本地校验', render: 'localValid', className: 'text-center', width: '120px', }, | ||||
|       { | ||||
|         title: '订单号', | ||||
|         render: 'billComplianceVOS', | ||||
| @ -278,71 +280,50 @@ export class DatatableOrderReportingComponent implements OnInit { | ||||
|         title: '网络货运人', | ||||
|         render: 'serviceType', | ||||
|         className: 'text-center', | ||||
|         width: '120px', | ||||
|         width: '180px', | ||||
|       }, | ||||
|       { title: '统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '300px' }, | ||||
|       { title: '业务类型', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '300px' }, | ||||
|       { title: '运单生成时间', render: 'goodsInfoVOList', className: 'text-center', width: '200px' }, | ||||
|       { title: '发货时间', render: 'driver', className: 'text-center', width: '150px' }, | ||||
|       { title: '收货时间', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '200px' }, | ||||
|       { title: '业务类型', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '120px' }, | ||||
|       { title: '运单生成时间', render: 'goodsInfoVOList', className: 'text-center', width: '180px' }, | ||||
|       { title: '发货时间', render: 'driver', className: 'text-center', width: '180px' }, | ||||
|       { title: '收货时间', render: 'payeeName', className: 'text-center', width: '180px' }, | ||||
|       { title: '托运人名称', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '托运人统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '300px' }, | ||||
|       { title: '装货地址', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '300px' }, | ||||
|       { title: '运单生成时间', render: 'goodsInfoVOList', className: 'text-center', width: '200px' }, | ||||
|       { title: '托运人统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '200px' }, | ||||
|       { title: '装货地址', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '200px' }, | ||||
|       { title: '收货方名称', render: 'driver', className: 'text-center', width: '150px' }, | ||||
|       { title: '收货地址', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '运费金额', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '运费金额', render: 'amount', className: 'text-center', width: '250px' }, | ||||
|       { title: '车牌号', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '车牌颜色', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '司机姓名', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '司机手机号码', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '司机手机号码', render: 'transportInfo', className: 'text-center', width: '200px' }, | ||||
|       { title: '司机身份证号', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '货物信息', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '货物信息', render: 'transportInfo', className: 'text-center', width: '180px' }, | ||||
|       { title: '实际承运人名称', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '实际承运人证件号码', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '实际承运人证件号码', render: 'transportInfo', className: 'text-center', width: '200px' }, | ||||
|       { title: '实际承运人道路运输许可证号', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '车辆轨迹', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '司机轨迹', render: 'payeeName', className: 'text-center', width: '150px' }, | ||||
|       { title: '上传次数', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { title: '上传时间', render: 'transportInfo', className: 'text-center', width: '250px' }, | ||||
|       { | ||||
|         title: '操作', | ||||
|         width: '200px', | ||||
|         className: 'text-center', | ||||
|         buttons: [ | ||||
|           // { text: '编辑', click: (_record: any) => this.appeal(_record) }, | ||||
|           { | ||||
|             text: '申诉', | ||||
|             // click: (record) => this.appeal(record), | ||||
|             iif: (_record) => _record.representationsStatus === '1', | ||||
|             acl: { 'ability': ['RiskOrder-Appeal'] } | ||||
|           }, | ||||
|           { | ||||
|             text: '撤销申诉', | ||||
|             pop: { | ||||
|               title: '是否确定立即撤销申诉?', | ||||
|               okType: 'danger', | ||||
|             }, | ||||
|             click: (record) => this.recall(record), | ||||
|             iif: (_record) => _record.representationsStatus === '2', | ||||
|             acl: { 'ability': ['RiskOrder-CancleAppeal'] } | ||||
|           }, | ||||
|           { text: '详情', click: (_record: any) => this.view(_record), acl: { 'ability': ['RiskOrder-Detail'] } }, | ||||
|         ], | ||||
|       }, | ||||
|       { title: '上传次数', render: 'transportInfo', className: 'text-center', width: '150px' }, | ||||
|       { title: '上传时间', render: 'transportInfo', className: 'text-center', width: '180px' }, | ||||
|     ]; | ||||
|   } | ||||
|  | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    * 删除单个实例 | ||||
|    *撤销 | ||||
|    * @param record 记录实例 | ||||
|    */ | ||||
|   recall(record: STData) { | ||||
|     this.service.request(this.service.$api_recall_reporting, { id: record?.id }).subscribe((res: any) => { | ||||
|   recall() { | ||||
|     if (this.selectedRows.length === 0) { | ||||
|       this.openWainingModal('请选择需要撤回的数据'); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     this.service.request(this.service.$api_recall_reporting, { rows: this.selectedRows }).subscribe((res: any) => { | ||||
|       if (res) { | ||||
|         this.search({ representationsStatus: '' }); | ||||
|         this.search(); | ||||
|       } | ||||
|     }) | ||||
|  | ||||
| @ -390,7 +371,10 @@ export class DatatableOrderReportingComponent implements OnInit { | ||||
|    * 上传 | ||||
|    */ | ||||
|   upload() { | ||||
|  | ||||
|     if (this.selectedRows.length === 0) { | ||||
|       this.openWainingModal('请选择需要上传的数据'); | ||||
|       return; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
| @ -399,10 +383,46 @@ export class DatatableOrderReportingComponent implements OnInit { | ||||
|    * @param params 上传设置 | ||||
|    */ | ||||
|   uploadSetting() { | ||||
|  | ||||
|     const modalRef = this.modal.create({ | ||||
|       nzTitle: '上传设置', | ||||
|       nzWidth: 600, | ||||
|       nzContent: DatatableReportingUploadSettingComponent, | ||||
|       nzComponentParams: {}, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|     modalRef.afterClose.subscribe(res => { | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   search(params = {}) { | ||||
|   /** | ||||
|    * 查看校验结果 | ||||
|    */ | ||||
|   viewResult(item: any) { | ||||
|     const modalRef = this.modal.create({ | ||||
|       nzTitle: '校验结果', | ||||
|       nzWidth: 1200, | ||||
|       nzContent: DatatableReportingVerifyResultComponent, | ||||
|       nzComponentParams: { | ||||
|         record: item | ||||
|       }, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|     modalRef.afterClose.subscribe(res => { | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 查看监管审核结果 | ||||
|    */ | ||||
|   viewAuditResult(record: any) { | ||||
|     if (record?.billStatus !== '2') { | ||||
|       return; | ||||
|     } | ||||
|     this.openWainingModal('监管审核结果', record?.result) | ||||
|   } | ||||
|  | ||||
|  | ||||
|   search() { | ||||
|     this.st.load(1); | ||||
|   } | ||||
|  | ||||
| @ -413,4 +433,13 @@ export class DatatableOrderReportingComponent implements OnInit { | ||||
|     this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list); | ||||
|   } | ||||
|  | ||||
|   openWainingModal(content: string, title = '提示') { | ||||
|     this.modal.warning({ | ||||
|       nzMask: false, | ||||
|       nzTitle: title, | ||||
|       nzContent: content, | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,8 @@ | ||||
| <nz-spin [nzSpinning]="!i"></nz-spin> | ||||
| <sf *ngIf="i" #sf mode="edit" [schema]="schema" [ui]="ui" [formData]="i" button="none"> | ||||
|   <div class="modal-footer"> | ||||
|     <button nz-button type="button" (click)="close()">取消</button> | ||||
|     <button nz-button type="submit" nzType="primary" (click)="save(sf.value)" [disabled]="!sf.valid" | ||||
|       [nzLoading]="service.http.loading">修改</button> | ||||
|   </div> | ||||
| </sf> | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableReportingUploadSettingComponent } from './upload-setting.component'; | ||||
|  | ||||
| describe('DatatableReportingUploadSettingComponent', () => { | ||||
|   let component: DatatableReportingUploadSettingComponent; | ||||
|   let fixture: ComponentFixture<DatatableReportingUploadSettingComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [DatatableReportingUploadSettingComponent] | ||||
|     }) | ||||
|       .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableReportingUploadSettingComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,109 @@ | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { SFSchema, SFUISchema } from '@delon/form'; | ||||
| import { NzModalRef } from 'ng-zorro-antd/modal'; | ||||
| import { ReportingService } from '../../services/reporting.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-upload-setting', | ||||
|   templateUrl: './upload-setting.component.html', | ||||
| }) | ||||
| export class DatatableReportingUploadSettingComponent implements OnInit { | ||||
|   record: any = {}; | ||||
|   i: any = {}; | ||||
|   schema!: SFSchema; | ||||
|   ui!: SFUISchema; | ||||
|  | ||||
|   constructor( | ||||
|     private modal: NzModalRef, | ||||
|     public service: ReportingService | ||||
|   ) { } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.initSF(); | ||||
|     // this.loadData(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|  * 初始化查询表单 | ||||
|  */ | ||||
|   initSF() { | ||||
|     this.schema = { | ||||
|       properties: { | ||||
|         no: { | ||||
|           type: 'string', | ||||
|           title: '订单数据', | ||||
|           enum: [ | ||||
|             { | ||||
|               label: '手动上传', | ||||
|               value: '1' | ||||
|             }, | ||||
|             { | ||||
|               label: '自动上传', | ||||
|               value: '2' | ||||
|             } | ||||
|           ], | ||||
|           description: '开启自动上传后,订单将在支付完成且风险单校验通过后自动上传', | ||||
|           ui: { | ||||
|             widget: 'radio', | ||||
|  | ||||
|           } | ||||
|         }, | ||||
|         owner: { | ||||
|           type: 'string', | ||||
|           title: '资金数据', | ||||
|           enum: [ | ||||
|             { | ||||
|               label: '手动上传', | ||||
|               value: '1' | ||||
|             }, | ||||
|             { | ||||
|               label: '自动上传', | ||||
|               value: '2' | ||||
|             } | ||||
|           ], | ||||
|           description: '开启自动上传后,订单将在支付完成且风险单校验通过后自动上传', | ||||
|           ui: { | ||||
|             widget: 'radio', | ||||
|  | ||||
|           } | ||||
|         }, | ||||
|       }, | ||||
|       required: ['owner', 'no'], | ||||
|     } | ||||
|     this.ui = { | ||||
|       '*': { | ||||
|         spanLabelFixed: 100, | ||||
|         grid: { span: 24 }, | ||||
|       }, | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 获取设置数据 | ||||
|    */ | ||||
|   loadData() { | ||||
|     this.service.request(this.service.$api_get_upload_setting, {}).subscribe(res => { | ||||
|       if (res) { | ||||
|         this.i = res; | ||||
|  | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 修改 | ||||
|    * @param value | ||||
|    */ | ||||
|   save(value: any): void { | ||||
|     this.service.request(this.service.$api_upload_setting_save, { ...value }).subscribe(res => { | ||||
|       if (res) { | ||||
|         this.service.msgSrv.success('保存成功'); | ||||
|         this.modal.close(true); | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   close(): void { | ||||
|     this.modal.destroy(); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,22 @@ | ||||
| <div nz-row> | ||||
|   <div style="width: 10%;"> | ||||
|     <nz-tabset [nzTabPosition]="'left'" style="height: 100%;"> | ||||
|       <nz-tab [nzTitle]="item?.name" *ngFor="let item of tabs" (nzSelect)="selectTab(item)"></nz-tab> | ||||
|     </nz-tabset> | ||||
|   </div> | ||||
|   <div style="width: 90%;"> | ||||
|     <st #st [scroll]="{x:'1000px'}" [data]="service.$api_order_reporting_page" [columns]="columns" | ||||
|       [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|       [res]="{ reName: { list: 'data.records', total: 'data.total' } }" [page]="{ show: false}" [loading]="false"> | ||||
|       <ng-template st-row="freightDetails" let-item> | ||||
|         <div *ngFor="let item of item.freightDetails"> | ||||
|           <div>{{item.expenseName}}:{{item.price | currency}} </div> | ||||
|         </div> | ||||
|       </ng-template> | ||||
|     </st> | ||||
|   </div> | ||||
| </div> | ||||
| <div class="modal-footer"> | ||||
|   <button nz-button type="button" (click)="close()">取消</button> | ||||
|   <button nz-button type="submit" nzType="primary" (click)="update()" [nzLoading]="service.http.loading">修改</button> | ||||
| </div> | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { DatatableReportingVerifyResultComponent } from './verify-result.component'; | ||||
|  | ||||
| describe('DatatableReportingVerifyResultComponent', () => { | ||||
|   let component: DatatableReportingVerifyResultComponent; | ||||
|   let fixture: ComponentFixture<DatatableReportingVerifyResultComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [DatatableReportingVerifyResultComponent] | ||||
|     }) | ||||
|       .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(DatatableReportingVerifyResultComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,85 @@ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { Router } from '@angular/router'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFSchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
| import { NzModalRef } from 'ng-zorro-antd/modal'; | ||||
| import { ReportingService } from '../../services/reporting.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-datatable-verify-result', | ||||
|   templateUrl: './verify-result.component.html', | ||||
| }) | ||||
| export class DatatableReportingVerifyResultComponent implements OnInit { | ||||
|   url = `/user`; | ||||
|   searchSchema: SFSchema = { | ||||
|     properties: { | ||||
|       no: { | ||||
|         type: 'string', | ||||
|         title: '编号' | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
|   @ViewChild('st') private readonly st!: STComponent; | ||||
|   columns: STColumn[] = []; | ||||
|   record: any = {} | ||||
|   tabs: any[] = [ | ||||
|     { name: '订单信息', value: '1' }, | ||||
|     { name: '司机信息', value: '2' }, | ||||
|     { name: '车辆信息', value: '3' }, | ||||
|   ]; | ||||
|  | ||||
|   get reqParams() { | ||||
|     return {}; | ||||
|   } | ||||
|   constructor(public service: ReportingService, private modalRef: NzModalRef, public router: Router) { | ||||
|  | ||||
|   } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.initST(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|  * 初始化数据列表 | ||||
|  */ | ||||
|   initST() { | ||||
|     this.columns = [ | ||||
|       { title: '序号', type: 'no', className: 'text-center', width: '60px', }, | ||||
|       { title: '监管平台字段', index: 'orderStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '系统字段', index: 'orderStatus', className: 'text-center', width: '100px', }, | ||||
|       { title: '归属模块', index: 'orderStatus', className: 'text-center', width: '120px', }, | ||||
|       { title: '是否必填', index: 'orderStatus', className: 'text-center', width: '100px', }, | ||||
|       { title: '上传值', index: 'orderStatus', className: 'text-center', width: '150px', }, | ||||
|       { title: '本地校验', index: 'orderStatus', className: 'text-center', width: '100px', }, | ||||
|       { title: '错误内容', index: 'orderStatus', className: 'text-center', width: '150px', }, | ||||
|     ] | ||||
|   } | ||||
|  | ||||
|  | ||||
|   add(): void { | ||||
|     // this.modal | ||||
|     //   .createStatic(FormEditComponent, { i: { id: 0 } }) | ||||
|     //   .subscribe(() => this.st.reload()); | ||||
|   } | ||||
|  | ||||
|   selectTab(e: any) { | ||||
|  | ||||
|   } | ||||
|  | ||||
|   update() { | ||||
|     if (this.record?.billType === '1') { | ||||
|       window.open(location.origin + `/#/order-management/vehicle-detailChange/${this.record?.id}`) | ||||
|  | ||||
|     } else if (this.record.billType === '2') { | ||||
|       window.open(location.origin + `/#/order-management/bulk-detailChange/${this.record?.id}`); | ||||
|     } | ||||
|  | ||||
|  | ||||
|   } | ||||
|   close(): void { | ||||
|     this.modalRef.destroy(); | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -6,9 +6,11 @@ import { BaseService } from '@shared'; | ||||
| }) | ||||
| export class ReportingService extends BaseService { | ||||
|  | ||||
|   $api_order_reporting_page = ``; // 订单上报列表 | ||||
|   $api_order_reporting_page = `/api/sdc/billOperate/listWholePage`; // 订单上报列表 | ||||
|   $api_recall_reporting = ``; // 撤回 | ||||
|   $api_async_export_order_reporting_list = ``; // 导出订单上报 | ||||
|   $api_get_upload_setting = ``; // 修改上传设置 | ||||
|   $api_upload_setting_save = ``; // 修改上传设置 | ||||
|   constructor(public injector: Injector) { | ||||
|     super(injector); | ||||
|   } | ||||
|  | ||||
| @ -23,10 +23,44 @@ export class DataService extends BaseService { | ||||
|  | ||||
|   // 查询运营报表 | ||||
|   $api_listOperationalReportPage = `/api/sdc/report/listOperationalReportPage`; | ||||
|   // 查询业绩报表 | ||||
|   $api_listPerformanceReportPage = `/api/sdc/report/listPerformanceReportPage`; | ||||
|   // 运营报表运单状态分布 | ||||
|   $api_operationalReportWaybillStatusDistribution = `/api/sdc/report/operationalReportWaybillStatusDistribution`; | ||||
|  | ||||
|   // 获取网络货运人 | ||||
|   $api_get_network_freight_forwarder_list = `/api/mdc/cuc/networkTransporter/findAll`; | ||||
|   // 业绩报表柱状图 | ||||
|   $api_performanceReportHistogram = `/api/sdc/report/performanceReportHistogram`; | ||||
|   constructor(public injector: Injector) { | ||||
|     super(injector); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| * 获取网络货运人 | ||||
| * @returns | ||||
| */ | ||||
|   getNetworkFreightForwarder(params = {}, containerAll = false) {    | ||||
|     return this.request(this.$api_get_network_freight_forwarder_list, params).pipe( | ||||
|       map((res: any) => { | ||||
|         if (!res) { | ||||
|           return []; | ||||
|         } | ||||
|         const list = res.map((item: any) => { | ||||
|           return { | ||||
|             label: item.enterpriseName, | ||||
|             value: item.id | ||||
|           }; | ||||
|         }); | ||||
|         const obj = []; | ||||
|         if (containerAll) { | ||||
|           obj.push({ label: '全部', value: '' }); | ||||
|         } | ||||
|         return [...obj, ...list]; | ||||
|       }) | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   getPerformanceReportHistogram(params = {}){ | ||||
|     return this.request(this.$api_performanceReportHistogram, params) | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2021-12-06 20:20:26 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-29 11:09:00 | ||||
|  * @LastEditTime : 2022-03-29 14:30:12 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\bulk-detail\\bulk-detail.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -222,7 +222,7 @@ | ||||
|     </ng-template> | ||||
|   </div> | ||||
| </nz-card> | ||||
| <nz-card> | ||||
| <nz-card *ngIf="!route?.snapshot?.queryParams?.sts"> | ||||
|   <nz-tabset > | ||||
|     <nz-tab nzTitle="风险异常检测"> | ||||
|       <button nz-button nzType="primary"[disabled]="">申 诉</button> | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2021-12-06 20:20:26 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-23 14:44:43 | ||||
|  * @LastEditTime : 2022-03-29 14:30:11 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\bulk-detail\\bulk-detail.component.ts | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
|  */ | ||||
| @ -65,14 +65,17 @@ export class OrderManagementBulkeDetailComponent implements OnInit { | ||||
|   mapList:any[] = [];  //地图点位数据组 | ||||
|   addressItems:any[] = [];  //打点地址数据组 | ||||
|   constructor( | ||||
|     private route: ActivatedRoute, | ||||
|     public route: ActivatedRoute, | ||||
|     private msgSrv: NzMessageService, | ||||
|     private service: OrderManagementService, | ||||
|     private router: Router, | ||||
|     private modal: NzModalService | ||||
|   ) {} | ||||
|   ) { | ||||
|   } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     console.log(this.route?.snapshot?.queryParams?.sts); | ||||
|      | ||||
|     this.initData(); | ||||
|     this.getTrajectory(); | ||||
|   } | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-01-04 17:29:18 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-01-18 17:18:54 | ||||
|  * @LastEditTime : 2022-03-29 16:26:09 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\complaint-detail\\complaint-detail.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -21,7 +21,7 @@ | ||||
|   <ng-template #cardTemplate> | ||||
|     <button nz-button nzType="primary" [nzLoading]="false" (click)="viewEvaluate()" *ngIf="complaint?.complaintStatus == 1" [disabled]="complaintStatus">处理</button> | ||||
| </ng-template> | ||||
|   <h2>投诉单号:{{datailList?.id}}</h2> | ||||
|   <h2>投诉单号:{{datailList?.complaintCode}}</h2> | ||||
|   <sf #sf [compact]="true" [ui]="ui" [schema]="schema" [button]="'none'" *ngIf="schema" [formData]="datailList"> | ||||
|     <ng-template sf-template="imgUrls" let-schema="schema" let-item let-ui="ui"> | ||||
|       <app-imagelist [imgList]="datailList?.imgUrls"></app-imagelist> | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-01-12 10:52:50 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-23 10:11:08 | ||||
|  * @LastEditTime : 2022-03-29 16:13:40 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\complaint\\complaint.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -21,10 +21,10 @@ | ||||
| <nz-card> | ||||
|   <div nz-row nzGutter="12"> | ||||
|     <!-- 查询字段大于3个时,根据展开状态调整布局 --> | ||||
|       <div nz-col [nzSpan]="18"> | ||||
|       <div nz-col [nzSpan]="24"> | ||||
|         <sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf> | ||||
|       </div> | ||||
|       <div nz-col [nzSpan]="6" > | ||||
|       <div nz-col [nzSpan]="24" style="display: flex; justify-content: flex-end;"> | ||||
|         <button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="false" | ||||
|           (click)="st?.load(1)"  acl  [acl-ability]="['ORDER-COMPLAINT-search']">查询</button> | ||||
|         <button nz-button nzType="primary" acl  [acl-ability]="['ORDER-COMPLAINT-export']" | ||||
|  | ||||
| @ -106,18 +106,24 @@ export class OrderManagementComplaintComponent implements OnInit { | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             widget: 'dict-select', | ||||
|             params: { dictKey: 'complaint:cause' }, | ||||
|             params: { dictKey: 'drvcomplaint:cause' }, | ||||
|             containsAllLabel: true, | ||||
|           } as SFSelectWidgetSchema | ||||
|         }, | ||||
|         complainantTime: { | ||||
|           type: 'string', | ||||
|            | ||||
|           title: '投诉时间', | ||||
|           ui: { widget: 'sl-from-to', type: 'date', format: 'yyyy-MM-dd' } as SFDateWidgetSchema, | ||||
|           ui: { | ||||
|             widget: 'sl-from-to', type: 'date', format: 'yyyy-MM-dd' } as SFDateWidgetSchema, | ||||
|         }, | ||||
|       }, | ||||
|     }; | ||||
|     this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } }; | ||||
|     this.ui =  | ||||
|     { | ||||
|      '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 8 } }, | ||||
|     | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @ -145,7 +151,7 @@ export class OrderManagementComplaintComponent implements OnInit { | ||||
|         className: 'text-center', | ||||
|       }, | ||||
|       { title: '托运方', index: 'shipperAppUserName', width: '200px', className: 'text-center' }, | ||||
|       { title: '司机', index: 'driverIdLabel', width: '120px', className: 'text-center' }, | ||||
|       { title: '司机', index: 'driverName', width: '120px', className: 'text-center' }, | ||||
|       { | ||||
|         title: '投诉原因', | ||||
|         className: 'text-center', | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-01-12 10:52:50 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-25 13:44:42 | ||||
|  * @LastEditTime : 2022-03-29 14:28:39 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\compliance-audit\\compliance-audit.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -88,7 +88,7 @@ | ||||
|       </ng-template> | ||||
|       <ng-template st-row="billCode" let-item let-index="index"> | ||||
|         <a *ngIf="item.billType == '1'" [routerLink]="'/order-management/vehicle/vehicle-detail/' + item.id">{{ item.billCode }}</a> | ||||
|         <a *ngIf="item.billType == '2'"  [routerLink]="'/order-management/bulk/bulk-detail/' + item.id">{{ item.billCode }}</a> | ||||
|         <a *ngIf="item.billType == '2'"  [routerLink]="'/order-management/bulk/bulk-detail/' + item.id" [queryParams]="{ sts :1}">{{ item.billCode }}</a> | ||||
|         <a *ngIf="item.billType == '3'"  [routerLink]="'/order-management/vehicle/vehicle-detail/' + item.id">{{ item.billCode }}</a> | ||||
|         <div> | ||||
|           <span>{{ item?.billStatusLabel }}</span> | ||||
|  | ||||
| @ -25,6 +25,7 @@ export class OrderManagementComplianceAuditComponent implements OnInit { | ||||
|   changeId: any;       // 主页面查看运费变更记录id - 用于运费变更记录 | ||||
|   changeViewId: any;  // 查看运费变更记录id - 用于查看 | ||||
|   auditId: any; | ||||
|   auditIdR: any; | ||||
|   auditMany = false; | ||||
|   isVisibleView = false; | ||||
|   isVisibleEvaluate = false; | ||||
| @ -142,7 +143,6 @@ export class OrderManagementComplianceAuditComponent implements OnInit { | ||||
|           type: 'string', | ||||
|           title: '订单号', | ||||
|           ui: { | ||||
|             placeholder: '最多100个单号,空号隔开' | ||||
|           } | ||||
|         }, | ||||
|         resourceCode: { | ||||
| @ -629,7 +629,7 @@ export class OrderManagementComplianceAuditComponent implements OnInit { | ||||
|         idList.push(item.id); | ||||
|       }); | ||||
|     } else { | ||||
|       idList.push(this.sfView.value.billCode) | ||||
|       idList.push(this?.auditIdR) | ||||
|     } | ||||
|     const parms = { | ||||
|       ids: idList, | ||||
| @ -681,7 +681,8 @@ export class OrderManagementComplianceAuditComponent implements OnInit { | ||||
|   audit(item?: any) { | ||||
|     if (item) { | ||||
|       this.isVisibleRE = true; | ||||
|       this.auditId = item.id; | ||||
|       this.auditId = item.billCode; | ||||
|       this.auditIdR = item.id; | ||||
|       this.initSTAudit(1); | ||||
|     } else { | ||||
|       if (this.selectedRows.length <= 0) { | ||||
|  | ||||
| @ -146,14 +146,14 @@ export class OrderManagementReceiptsAuditComponent implements OnInit { | ||||
|           type: 'string', | ||||
|           title: '订单号', | ||||
|           ui: { | ||||
|             placeholder: '最多100个单号,空号隔开' | ||||
|             placeholder: '请输入' | ||||
|           } | ||||
|         }, | ||||
|         wayBillCode: { | ||||
|           type: 'string', | ||||
|           title: '运单号', | ||||
|           ui: { | ||||
|             placeholder: '最多100个运单,空号隔开' | ||||
|             placeholder: '请输入' | ||||
|           } | ||||
|         }, | ||||
|         resourceCode: { | ||||
|  | ||||
| @ -229,7 +229,30 @@ | ||||
|     </ng-template> | ||||
|   </div> | ||||
| </nz-card> | ||||
|  | ||||
| <nz-card *ngIf="!route?.snapshot?.queryParams?.sts"> | ||||
|   <nz-tabset > | ||||
|     <nz-tab nzTitle="风险异常检测"> | ||||
|       <button nz-button nzType="primary"[disabled]="">申 诉</button> | ||||
|       <div> | ||||
|         您的订单可能存在交易风险,请及时提交申诉材料,提交成功后,平台将及时完成审核并通知您! | ||||
|       </div> | ||||
|       <div>如果您的运单没有问题,可以提出申诉,并提供相关资料,我们将24小时内审核反馈</div> | ||||
|       <ul *ngFor="let item of abnormalList"> | ||||
|         <li>系统识别:{{item?.complianceTypeName}}</li> | ||||
|         <li>{{item?.determineDetails}},您可在企业端提交申诉材料或联系客服。</li> | ||||
|         <li>2021-11-07 03:20:15</li> | ||||
|       </ul> | ||||
|     </nz-tab> | ||||
|     <nz-tab nzTitle="异常预警"> | ||||
|       <st  #st [data]="addressItems" [columns]="logColumns2" [ps]="0" [page]="{ show: false, showSize: false }"> | ||||
|       </st> | ||||
|     </nz-tab> | ||||
|     <nz-tab nzTitle="操作日志"> | ||||
|       <st  #st [data]="addressItems" [columns]="logColumns2" [ps]="0" [page]="{ show: false, showSize: false }"> | ||||
|       </st> | ||||
|     </nz-tab> | ||||
|   </nz-tabset> | ||||
| </nz-card> | ||||
| <nz-modal [(nzVisible)]="isVisible"   nzWidth="1000px"  [nzFooter]="nzModalFooter" [nzTitle]="modalTitle"  (nzOnOk)="handleOK()" (nzOnCancel)="handleCancel()"> | ||||
|   <ng-container *nzModalContent> | ||||
|     <div *ngIf="!modalcontent">暂无附件信息</div> | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2021-12-28 14:42:03 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-23 14:45:58 | ||||
|  * @LastEditTime : 2022-03-29 16:08:56 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\vehicle-detail\\vehicle-detail.component.ts | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
|  */ | ||||
| @ -29,6 +29,7 @@ export class OrderManagementVehicleDetailComponent implements OnInit { | ||||
|   mapList: any[] = []; //地图点位数据组 | ||||
|   pois: any[] = []; | ||||
|   addressItems: any[] = []; //打点地址数据组 | ||||
|   abnormalList: any[] = []; | ||||
|   i: any = { | ||||
|     unLoadingPlaceList: [], | ||||
|     billExpenseDetails: [], | ||||
| @ -66,7 +67,7 @@ export class OrderManagementVehicleDetailComponent implements OnInit { | ||||
|     } | ||||
|   ]; | ||||
|   constructor( | ||||
|     private route: ActivatedRoute, | ||||
|     public route: ActivatedRoute, | ||||
|     private msgSrv: NzMessageService, | ||||
|     private service: OrderManagementService, | ||||
|     private router: Router, | ||||
| @ -102,6 +103,19 @@ export class OrderManagementVehicleDetailComponent implements OnInit { | ||||
|         this.i.scheduleVOList = this.i?.scheduleVOList?.filter((data: any) => data.displayStatus !== 'HIDE'); | ||||
|       } | ||||
|     }); | ||||
|     this.service.request(this.service.$api_listBillComplianceAbnormalByBillId, { id: this.id }).subscribe(res => { | ||||
|       if (res) { | ||||
|       console.log('风险详情') | ||||
|       console.log(res) | ||||
|       this.abnormalList = res | ||||
|       } | ||||
|     }); | ||||
|     this.service.request(this.service.$api_getAbnormalWarningByBillId, { id: this.id }).subscribe(res => { | ||||
|       if (res) { | ||||
|       console.log('异常预警') | ||||
|       console.log(res) | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   // 取消订单 | ||||
|   cancellation() { | ||||
|  | ||||
| @ -71,6 +71,9 @@ export class PartnerListComponent { | ||||
|       nzComponentParams: { info: { ...item, enterpriseName: item.enterpriseName || item.contactName }, sourcePage: '合伙人审核列表' }, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|     modal.afterClose.subscribe(res => { | ||||
|       modal.destroy(); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   editTemplateAction(item: any) { | ||||
| @ -102,6 +105,7 @@ export class PartnerListComponent { | ||||
|           .subscribe(res => { | ||||
|             if (res) { | ||||
|               this.service.msgSrv.success('修改成功'); | ||||
|               this.st.load(1); | ||||
|               this.nzModalService.closeAll(); | ||||
|             } | ||||
|           }); | ||||
| @ -161,6 +165,7 @@ export class PartnerListComponent { | ||||
|             if (res) { | ||||
|               this.service.msgSrv.success('修改成功'); | ||||
|               this.nzModalService.closeAll(); | ||||
|               this.st.load(1); | ||||
|             } | ||||
|           }); | ||||
|       } | ||||
| @ -185,6 +190,7 @@ export class PartnerListComponent { | ||||
|             } else { | ||||
|               this.service.msgSrv.warning('发起失败'); | ||||
|             } | ||||
|             this.st.load(1); | ||||
|           }); | ||||
|       } | ||||
|     }); | ||||
|  | ||||
| @ -112,6 +112,7 @@ export class PartnerAuditModalComponent implements OnInit { | ||||
|     }; | ||||
|     this.service | ||||
|       .request(this.service.$api_audit_partner, { | ||||
|         ...params, | ||||
|         auditStatusEnum: params.auditStatusEnum, | ||||
|         id: params.id, | ||||
|         approvalOpinion: params.approvalOpinion, | ||||
|  | ||||
| @ -16,8 +16,8 @@ | ||||
|                 <p style="margin-bottom: 0">{{ detailData?.enterpriseName }}</p> | ||||
|               </div> | ||||
|               <div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> | ||||
|                 <nz-badge nzStatus="success" nzText="正常" *ngIf="detailData?.stateLocked === 0"> </nz-badge> | ||||
|                 <nz-badge nzStatus="error" nzText="冻结" *ngIf="detailData?.stateLocked === 1"></nz-badge> | ||||
|                 <nz-badge nzStatus="success" nzText="正常" *ngIf="detailData?.lockedStatus === 0"> </nz-badge> | ||||
|                 <nz-badge nzStatus="error" nzText="冻结" *ngIf="detailData?.lockedStatus === 1"></nz-badge> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div nz-row> | ||||
| @ -46,12 +46,12 @@ | ||||
|             </ng-container> | ||||
|             <ng-container *ngIf="detailData?.approvalStatus != 10"> | ||||
|               <button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="enable" | ||||
|                 (nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.stateLocked" | ||||
|                 (nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.lockedStatus" | ||||
|                 acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"> | ||||
|                 启用 | ||||
|               </button> | ||||
|               <button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen" | ||||
|                 (nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.stateLocked" | ||||
|                 (nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.lockedStatus" | ||||
|                 acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"> | ||||
|                 冻结 | ||||
|               </button> | ||||
|  | ||||
| @ -117,8 +117,10 @@ export class PartnerDetailComponent implements OnInit, OnDestroy { | ||||
|   freezeOrResume(type: number) { | ||||
|     this.service.http | ||||
|       .post(this.service.$api_lock_freight, { | ||||
|         id: this.route.snapshot.params.id, | ||||
|         statedLocked: !!type | ||||
|         appUserId: [this.detailData.appUserId], | ||||
|         freezeOrResume: !!type, | ||||
|         pageName: '合伙人详情', | ||||
|         telephone: this.detailData.adminUserInfo.mobile | ||||
|       }) | ||||
|       .subscribe(res => { | ||||
|         if (res.data === true) { | ||||
| @ -138,7 +140,7 @@ export class PartnerDetailComponent implements OnInit, OnDestroy { | ||||
|     const modal = this.nzModalService.create({ | ||||
|       nzTitle: '审核', | ||||
|       nzContent: PartnerAuditModalComponent, | ||||
|       nzComponentParams: { info: { ...this.detailData, isPass },sourcePage:'合伙人审核详情'  }, | ||||
|       nzComponentParams: { info: { ...this.detailData, isPass }, sourcePage: '合伙人审核详情' }, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|   } | ||||
| @ -274,7 +276,7 @@ export class PartnerDetailComponent implements OnInit, OnDestroy { | ||||
|       operatingEndTime: this.datePipe.transform(dateil.operatingEndTime, 'yyyy-MM-dd'), | ||||
|       operatingStartTime: this.datePipe.transform(dateil.operatingStartTime, 'yyyy-MM-dd') | ||||
|     }); | ||||
|      | ||||
|  | ||||
|     this.service.request(this.service.$api_save_entp_partner, params).subscribe(res => { | ||||
|       if (res) { | ||||
|         this.service.msgSrv.success('企业合伙人修改成功'); | ||||
|  | ||||
| @ -16,8 +16,8 @@ | ||||
|                 <p style="margin-bottom: 0">{{ detailData?.adminUserInfo?.name }}</p> | ||||
|               </div> | ||||
|               <div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> | ||||
|                 <nz-badge nzStatus="success" nzText="正常" *ngIf="detailData?.stateLocked === 0"> </nz-badge> | ||||
|                 <nz-badge nzStatus="error" nzText="冻结" *ngIf="detailData?.stateLocked === 1"></nz-badge> | ||||
|                 <nz-badge nzStatus="success" nzText="正常" *ngIf="detailData?.lockedStatus === 0"> </nz-badge> | ||||
|                 <nz-badge nzStatus="error" nzText="冻结" *ngIf="detailData?.lockedStatus === 1"></nz-badge> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div nz-row> | ||||
| @ -46,12 +46,12 @@ | ||||
|             </ng-container> | ||||
|             <ng-container *ngIf="detailData?.approvalStatus != 10"> | ||||
|               <button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="enable" | ||||
|                 (nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.stateLocked" | ||||
|                 (nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.lockedStatus" | ||||
|                 acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"> | ||||
|                 启用 | ||||
|               </button> | ||||
|               <button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen" | ||||
|                 (nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.stateLocked" | ||||
|                 (nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.lockedStatus" | ||||
|                 acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"> | ||||
|                 冻结 | ||||
|               </button> | ||||
|  | ||||
| @ -92,8 +92,10 @@ export class PersonalPartnerDetailComponent implements OnInit { | ||||
|   freezeOrResume(type: number) { | ||||
|     this.service.http | ||||
|       .post(this.service.$api_lock_freight, { | ||||
|         id: this.route.snapshot.params.id, | ||||
|         statedLocked: !!type | ||||
|         appUserId: [this.detailData.appUserId], | ||||
|         freezeOrResume: !!type, | ||||
|         pageName: '合伙人详情', | ||||
|         telephone: this.detailData.adminUserInfo.mobile | ||||
|       }) | ||||
|       .subscribe(res => { | ||||
|         if (res.data === true) { | ||||
|  | ||||
| @ -38,7 +38,7 @@ export class PartnerListService extends ShipperBaseService { | ||||
|   // 渠道销售修改详情 | ||||
|   $api_get_partner_change_list = '/api/mdc/partnerChannelRelLog/partnerChannelUpdateDetaiList'; | ||||
|   // 冻结/启用企业业 | ||||
|   $api_lock_freight = '/api/mdc/cuc/enterpriseInfo/operate/lock'; | ||||
|   $api_lock_freight = '/api/mdc/cuc/userApp/freezeOrResume'; | ||||
|  | ||||
|   // 根据地区code查询列表 | ||||
|   $api_get_region_by_code = '/api/mdc/pbc/region/getRegionByCode'; | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-02-24 20:09:49 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-10 15:12:03 | ||||
|  * @LastEditTime : 2022-03-29 13:40:16 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-record\\rebate-record.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -33,7 +33,7 @@ | ||||
|   <!-- 数据列表 --> | ||||
|   <st | ||||
|     #st | ||||
|     [data]="data" | ||||
|     [data]="service.$api_get_getIncomeByBillpage" | ||||
|     [columns]="columns" | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
| @ -41,8 +41,8 @@ | ||||
|     [loadingDelay]="500" | ||||
|     [loading]="service.http.loading" | ||||
|   > | ||||
|   <ng-template st-row='name44' let-item let-index='index'> | ||||
|     <div style="color: #f59a23;" (click)="feedback()">1223</div> | ||||
|   <ng-template st-row='abnormalFeedback' let-item let-index='index'> | ||||
|     <div style="color: #f59a23;" (click)="feedback()">123212{{item?.abnormalFeedback}}</div> | ||||
|   </ng-template> | ||||
|   </st> | ||||
| </nz-card> | ||||
|  | ||||
| @ -32,30 +32,12 @@ export class ParterRebateManageMentRecordComponent implements OnInit { | ||||
|     public shipperservice: ShipperBaseService, | ||||
|   ) {} | ||||
|   /** | ||||
|    * 查询字段个数 | ||||
|    */ | ||||
|   get queryFieldCount(): number { | ||||
|     return Object.keys(this.schema?.properties || {}).length; | ||||
|   } | ||||
|     /** | ||||
|   * 伸缩查询条件 | ||||
|   */ | ||||
|      expandToggle(): void { | ||||
|       this._$expand = !this._$expand; | ||||
|       this.sf?.setValue('/_$expand', this._$expand); | ||||
|     } | ||||
|   /** | ||||
|  * 查询参数 | ||||
|  */ | ||||
|    get reqParams() { | ||||
|     const params: any = Object.assign({}, this.sf?.value || {}); | ||||
|     delete params._$expand; | ||||
|     return {  | ||||
|       ...params, | ||||
|       deadlineTime: { | ||||
|         start: this.sf?.value?.deadlineTime?.[0] || '', | ||||
|         end: this.sf?.value?.deadlineTime?.[1] || '', | ||||
|       }, | ||||
|      }; | ||||
|   } | ||||
|   ngOnInit() { | ||||
| @ -66,7 +48,6 @@ export class ParterRebateManageMentRecordComponent implements OnInit { | ||||
|   initSF() { | ||||
|     this.schema = { | ||||
|       properties: { | ||||
|         _$expand: { type: 'boolean', ui: { hidden: true } }, | ||||
|         month: { | ||||
|           type: 'string', | ||||
|           title: '时间月份', | ||||
| @ -90,7 +71,8 @@ export class ParterRebateManageMentRecordComponent implements OnInit { | ||||
|     this.columns = [ | ||||
|       { | ||||
|         title: '月份', | ||||
|         index: 'name1' | ||||
|         index: 'month', | ||||
|         format: (item: any) => {return item?.month ? item?.month + '月' : ''} | ||||
|       }, | ||||
|       { | ||||
|         title: '返佣金额(元)', | ||||
| @ -98,7 +80,7 @@ export class ParterRebateManageMentRecordComponent implements OnInit { | ||||
|       }, | ||||
|       { | ||||
|         title: '合伙人名称', | ||||
|         index: 'name1' | ||||
|         index: 'partnerName' | ||||
|       }, | ||||
|       { | ||||
|         title: '实际等级', | ||||
| @ -106,7 +88,7 @@ export class ParterRebateManageMentRecordComponent implements OnInit { | ||||
|       }, | ||||
|       { | ||||
|         title: '管理费比例', | ||||
|         index: 'name1' | ||||
|         index: 'rebateRatio' | ||||
|       }, | ||||
|       { | ||||
|         title: '返佣时间', | ||||
| @ -114,7 +96,7 @@ export class ParterRebateManageMentRecordComponent implements OnInit { | ||||
|       }, | ||||
|       { | ||||
|         title: '异常反馈', | ||||
|         render: 'name44' | ||||
|         render: 'abnormalFeedback' | ||||
|       }, | ||||
|       { | ||||
|         title: '操作', | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-02-24 20:09:49 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-29 10:51:52 | ||||
|  * @LastEditTime : 2022-03-29 11:14:08 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-setting\\rebate-setting.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -41,6 +41,7 @@ | ||||
|     #st | ||||
|     [data]="service.$api_get_rebateConfig" | ||||
|     [columns]="columns" | ||||
|     [scroll]="{x: '1200px'}" | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }" | ||||
|  | ||||
| @ -23,7 +23,6 @@ export class ParterRebateManageMentSettingComponent implements OnInit { | ||||
|   sf!: SFComponent; | ||||
|   spuStatus = '1'; | ||||
|   _$expand = false; | ||||
|   data = [{ name1: 1111 }]; | ||||
|   constructor( | ||||
|     public router: Router, | ||||
|     public ar: ActivatedRoute, | ||||
| @ -32,30 +31,12 @@ export class ParterRebateManageMentSettingComponent implements OnInit { | ||||
|     public shipperservice: ShipperBaseService, | ||||
|   ) {} | ||||
|   /** | ||||
|    * 查询字段个数 | ||||
|    */ | ||||
|   get queryFieldCount(): number { | ||||
|     return Object.keys(this.schema?.properties || {}).length; | ||||
|   } | ||||
|     /** | ||||
|   * 伸缩查询条件 | ||||
|   */ | ||||
|      expandToggle(): void { | ||||
|       this._$expand = !this._$expand; | ||||
|       this.sf?.setValue('/_$expand', this._$expand); | ||||
|     } | ||||
|   /** | ||||
|  * 查询参数 | ||||
|  */ | ||||
|    get reqParams() { | ||||
|     const params: any = Object.assign({}, this.sf?.value || {}); | ||||
|     delete params._$expand; | ||||
|     return {  | ||||
|       ...params, | ||||
|       deadlineTime: { | ||||
|         start: this.sf?.value?.deadlineTime?.[0] || '', | ||||
|         end: this.sf?.value?.deadlineTime?.[1] || '', | ||||
|       }, | ||||
|      }; | ||||
|   } | ||||
|   ngOnInit() { | ||||
| @ -66,15 +47,22 @@ export class ParterRebateManageMentSettingComponent implements OnInit { | ||||
|   initSF() { | ||||
|     this.schema = { | ||||
|       properties: { | ||||
|         _$expand: { type: 'boolean', ui: { hidden: true } }, | ||||
|         month: { | ||||
|         configName: { | ||||
|           type: 'string', | ||||
|           title: '配置名称', | ||||
|           format: 'configName', | ||||
|         }, | ||||
|         stateLocked: { | ||||
|           type: 'string', | ||||
|           title: '状态' | ||||
|           title: '状态', | ||||
|           enum: [ | ||||
|             {label: '全部', value: ''}, | ||||
|             {label: '启用', value: 0}, | ||||
|             {label: '禁用', value: 1}, | ||||
|           ], | ||||
|           ui: { | ||||
|             widget: 'select', | ||||
|           }, | ||||
|          | ||||
|         }, | ||||
|       } | ||||
|     }; | ||||
| @ -90,35 +78,44 @@ export class ParterRebateManageMentSettingComponent implements OnInit { | ||||
|     this.columns = [ | ||||
|       { | ||||
|         title: '配置名称', | ||||
|         index: 'configName' | ||||
|         index: 'configName', | ||||
|         width: '200px', | ||||
|       }, | ||||
|       { | ||||
|         title: '配置类型', | ||||
|         render: 'configType' | ||||
|         render: 'configType', | ||||
|         width: '200px', | ||||
|  | ||||
|       }, | ||||
|       { | ||||
|         title: '备注', | ||||
|         index: 'remark' | ||||
|         index: 'remark', | ||||
|         width: '250px', | ||||
|       }, | ||||
|       { | ||||
|         title: '关联合伙人范围', | ||||
|         render: 'partnerType' | ||||
|         render: 'partnerType', | ||||
|         width: '200px', | ||||
|       }, | ||||
|       { | ||||
|         title: '创建时间', | ||||
|         index: 'enableTime' | ||||
|         index: 'enableTime', | ||||
|         width: '200px', | ||||
|       }, | ||||
|       { | ||||
|         title: '启用时间', | ||||
|         index: 'enableTime' | ||||
|         index: 'enableTime', | ||||
|         width: '200px', | ||||
|       }, | ||||
|       { | ||||
|         title: '优先级', | ||||
|         index: 'priority' | ||||
|         index: 'priority', | ||||
|         width: '100px', | ||||
|       }, | ||||
|       { | ||||
|         title: '状态', | ||||
|         render: 'stateLocked' | ||||
|         render: 'stateLocked', | ||||
|         width: '100px', | ||||
|       }, | ||||
|       { | ||||
|         title: '操作', | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-03-10 11:19:00 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-10 13:51:05 | ||||
|  * @LastEditTime : 2022-03-29 11:26:38 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\services\\rebate-management.service.ts | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
|  */ | ||||
| @ -23,6 +23,10 @@ export class RebateManagementService extends BaseService { | ||||
|   public $api_save_rebateConfig = '/api/mdc/rebateConfig/save'; | ||||
|   // 启用/禁用返佣配置 | ||||
|   public $api_set_updateRebateConfig = '/api/mdc/rebateConfig/updateRebateConfig'; | ||||
|  | ||||
|  | ||||
|   // 运营端查询合伙人返佣 | ||||
|   public $api_get_getIncomeByBillpage = '/api/bpc/partnerIncomeHead/getIncomeByBillpage'; | ||||
|     // 查询合伙人信息-分页 | ||||
|   public $api_get_partner_page = '/api/mdc/partner/list/page'; | ||||
|   constructor(public injector: Injector) { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user