666
This commit is contained in:
		@ -0,0 +1,2 @@
 | 
			
		||||
<g2-custom delay="100" (render)="render($event)"></g2-custom>
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,91 @@
 | 
			
		||||
import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
 | 
			
		||||
import { G2MiniAreaClickItem } from '@delon/chart/mini-area';
 | 
			
		||||
 | 
			
		||||
// import DataSet from '@antv/data-set';
 | 
			
		||||
const DataSet = require('@antv/data-set');
 | 
			
		||||
import { Chart } from '@antv/g2';
 | 
			
		||||
import { DataService } from 'src/app/routes/datatable/services/data.service';
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-compliance-curve',
 | 
			
		||||
  templateUrl: './curve.component.html',
 | 
			
		||||
  styleUrls: ['./curve.component.less']
 | 
			
		||||
})
 | 
			
		||||
export class ComplianceCurveComponent implements OnInit,OnChanges {
 | 
			
		||||
  el: any;
 | 
			
		||||
  @Input() chartData: any;
 | 
			
		||||
  chart: any;
 | 
			
		||||
  constructor(private service: DataService, private ngZone: NgZone) {
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
  ngOnChanges(changes: SimpleChanges): void {
 | 
			
		||||
    if (this.chartData) {
 | 
			
		||||
      // setTimeout(()=>{
 | 
			
		||||
      //   this.chart.render(true)
 | 
			
		||||
      // }, 1000)
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
  reRender() {
 | 
			
		||||
    setTimeout(() => {
 | 
			
		||||
      this.chart.data(this.chartData);
 | 
			
		||||
      this.chart.render();
 | 
			
		||||
    }, 1000)
 | 
			
		||||
  }
 | 
			
		||||
  render(el: ElementRef<HTMLDivElement>): void {
 | 
			
		||||
    this.el = el.nativeElement
 | 
			
		||||
    setTimeout(() => {
 | 
			
		||||
      console.log(this.chartData)
 | 
			
		||||
      this.ngZone.runOutsideAngular(() => this.init(this.el));
 | 
			
		||||
      }, 1000)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private init(el: HTMLElement): void {
 | 
			
		||||
    this.chart = new Chart({
 | 
			
		||||
      container: el,
 | 
			
		||||
      autoFit: true,
 | 
			
		||||
      height: 500,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.chart.data(this.chartData);
 | 
			
		||||
    this.chart.scale({
 | 
			
		||||
      time: {
 | 
			
		||||
        range: [0, 1],
 | 
			
		||||
      },
 | 
			
		||||
      number: {
 | 
			
		||||
        min: 0,
 | 
			
		||||
        nice: true,
 | 
			
		||||
      },
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    this.chart.tooltip({
 | 
			
		||||
      showCrosshairs: true,
 | 
			
		||||
      shared: true,
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    this.chart.axis('proportion', {
 | 
			
		||||
      label: {
 | 
			
		||||
        formatter: (val: any) => {
 | 
			
		||||
          return val*100+ ' %';
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    this.chart
 | 
			
		||||
      .line()
 | 
			
		||||
      .position('situationDate*proportion')
 | 
			
		||||
      .color('type')
 | 
			
		||||
      .tooltip('proportion*type', function(name: any, value: any) {
 | 
			
		||||
        return {
 | 
			
		||||
          name: name*100+'%',
 | 
			
		||||
          value: value
 | 
			
		||||
        };
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    this.chart.render();
 | 
			
		||||
    
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -24,37 +24,37 @@
 | 
			
		||||
 | 
			
		||||
<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">
 | 
			
		||||
    <g2-card [title]="'订单合格率'" [bordered]="true" [total]="cardData1?.proportion" [footer]="footer1" contentHeight="46">
 | 
			
		||||
      <ng-template #footer1>
 | 
			
		||||
        <div class="card-f">
 | 
			
		||||
          <span class="card-f-l">合格:12423</span> <span>不合格:12423</span>
 | 
			
		||||
          <span class="card-f-l">合格:{{cardData1?.leftQuantity}}</span> <span>不合格:{{cardData1?.rightQuantity}}</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">
 | 
			
		||||
    <g2-card [title]="'货源单占比'" [bordered]="true" [total]="cardData2?.proportion" [footer]="footer2" contentHeight="46">
 | 
			
		||||
      <ng-template #footer2>
 | 
			
		||||
        <div class="card-f">
 | 
			
		||||
          <span class="card-f-l">货源单:12423</span> <span>合同单:12423</span>
 | 
			
		||||
          <span class="card-f-l">货源单:{{cardData2?.leftQuantity}}</span> <span>合同单:{{cardData2?.rightQuantity}}</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">
 | 
			
		||||
    <g2-card [title]="'运费直付占比'" [bordered]="true" [total]="cardData3?.proportion" [footer]="footer3" contentHeight="46">
 | 
			
		||||
      <ng-template #footer3>
 | 
			
		||||
        <div class="card-f">
 | 
			
		||||
          <span class="card-f-l">司机:12423</span> <span>车队长:12423</span>
 | 
			
		||||
          <span class="card-f-l">司机:{{cardData3?.leftQuantity}}</span> <span>车队长:{{cardData3?.rightQuantity}}</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">
 | 
			
		||||
    <g2-card [title]="'付款及时率'" [bordered]="true" [total]="cardData4?.proportion" [footer]="footer4" contentHeight="46">
 | 
			
		||||
      <ng-template #footer4>
 | 
			
		||||
        <div class="card-f">
 | 
			
		||||
          <span class="card-f-l">准时:12423</span> <span>逾期:12423</span>
 | 
			
		||||
          <span class="card-f-l">准时:{{cardData4?.leftQuantity}}</span> <span>逾期:{{cardData4?.rightQuantity}}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </ng-template>
 | 
			
		||||
    </g2-card>
 | 
			
		||||
@ -62,5 +62,6 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nz-card nzTitle="平台合规情况监控报表">
 | 
			
		||||
  <g2-custom delay="100" (render)="render($event)"></g2-custom>
 | 
			
		||||
  <app-compliance-curve #curve [chartData]="chartData"></app-compliance-curve>
 | 
			
		||||
  <!-- <g2-custom delay="100" (render)="render($event)"></g2-custom> -->
 | 
			
		||||
</nz-card>
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,9 @@ 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';
 | 
			
		||||
import { DataService } from '../../../services/data.service';
 | 
			
		||||
import { ComplianceCurveComponent } from './curve/curve.component';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-datatable-compliance-index',
 | 
			
		||||
  templateUrl: './index.component.html',
 | 
			
		||||
@ -12,51 +15,107 @@ import { Chart } from '@antv/g2';
 | 
			
		||||
  providers: [DatePipe]
 | 
			
		||||
})
 | 
			
		||||
export class DatatableComplianceIndexComponent implements OnInit {
 | 
			
		||||
  @ViewChild('curve') private readonly curve!: ComplianceCurveComponent;
 | 
			
		||||
  @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) {}
 | 
			
		||||
  dateFormat = 'yyyy';
 | 
			
		||||
  time: any = '2022'
 | 
			
		||||
  chartData: any = {}
 | 
			
		||||
 | 
			
		||||
  cardData1:any;
 | 
			
		||||
  cardData2:any;
 | 
			
		||||
  cardData3:any;
 | 
			
		||||
  cardData4:any;
 | 
			
		||||
 
 | 
			
		||||
  constructor(private http: _HttpClient, private modal: ModalHelper, private ngZone: NgZone,public service: DataService, private datePipe: DatePipe) {}
 | 
			
		||||
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
    this.initSF();
 | 
			
		||||
    this.initdData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  initdData(){
 | 
			
		||||
    const params ={
 | 
			
		||||
      ...this.sf?.value,
 | 
			
		||||
      timeType:this.mode ==='month'?'M':'Y',
 | 
			
		||||
      time:this.time
 | 
			
		||||
    }
 | 
			
		||||
    this.service.request(this.service.$api_getBillRateQualified, params).subscribe(res => {
 | 
			
		||||
        if (res) {
 | 
			
		||||
         this.cardData1 = res;
 | 
			
		||||
         this.cardData1.proportion = this.cardData1.proportion*100 +'%'
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    this.service.request(this.service.$api_getBillRateProportion, params).subscribe(res => {
 | 
			
		||||
        if (res) {
 | 
			
		||||
         this.cardData2 = res;
 | 
			
		||||
         this.cardData2.proportion = this.cardData2.proportion*100 +'%'
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    this.service.request(this.service.$api_getBillRateDirectPayment, params).subscribe(res => {
 | 
			
		||||
        if (res) {
 | 
			
		||||
         this.cardData3 = res;
 | 
			
		||||
         this.cardData3.proportion = this.cardData3.proportion*100 +'%'
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    this.service.request(this.service.$api_getBillTimelyPayment, params).subscribe(res => {
 | 
			
		||||
        if (res) {
 | 
			
		||||
         this.cardData4 = res;
 | 
			
		||||
         this.cardData4.proportion = this.cardData4.proportion*100 +'%'
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.service.request(this.service.$api_listMonitorSituation, params).subscribe(res => {
 | 
			
		||||
      if (res) {
 | 
			
		||||
        this.chartData = res
 | 
			
		||||
        this.curve.reRender();
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  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']
 | 
			
		||||
      this.time = this.datePipe.transform(this.date, 'yyyy')
 | 
			
		||||
    } else if(this.mode === 'month') {
 | 
			
		||||
      this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00']
 | 
			
		||||
      this.time = this.datePipe.transform(this.date, 'yyyy-MM')
 | 
			
		||||
    }
 | 
			
		||||
    this.initdData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  initSF() {
 | 
			
		||||
    this.schema = {
 | 
			
		||||
      properties: {
 | 
			
		||||
        name: {
 | 
			
		||||
        enterpriseInfoId: {
 | 
			
		||||
          type: 'string',
 | 
			
		||||
          title: '',
 | 
			
		||||
          ui: {
 | 
			
		||||
            widget: 'select',
 | 
			
		||||
            placeholder: '网络货运人'
 | 
			
		||||
            placeholder: '网络货运人',
 | 
			
		||||
            asyncData: () => this.service.getNetworkFreightForwarder({}),
 | 
			
		||||
            change:()=>{
 | 
			
		||||
              this.initdData();
 | 
			
		||||
            },
 | 
			
		||||
            allowClear: true
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        name2: {
 | 
			
		||||
        enterpriseProjectId: {
 | 
			
		||||
          type: 'string',
 | 
			
		||||
          title: '',
 | 
			
		||||
          ui: {
 | 
			
		||||
@ -64,11 +123,12 @@ export class DatatableComplianceIndexComponent implements OnInit {
 | 
			
		||||
            placeholder: '部门'
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        name3: {
 | 
			
		||||
        salesmanId: {
 | 
			
		||||
          type: 'string',
 | 
			
		||||
          title: '',
 | 
			
		||||
          ui: {
 | 
			
		||||
            placeholder: '业务员'
 | 
			
		||||
            placeholder: '业务员',
 | 
			
		||||
            enter: () => this.initdData(),
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@ -81,6 +141,9 @@ export class DatatableComplianceIndexComponent implements OnInit {
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  render(el: ElementRef<HTMLDivElement>) {
 | 
			
		||||
    this.ngZone.runOutsideAngular(() => this.init(el.nativeElement));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user