Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop

This commit is contained in:
heqinghang
2022-04-08 15:13:36 +08:00
51 changed files with 1310 additions and 878 deletions

View File

@ -37,7 +37,9 @@ export class DatatableBusiindexComponent implements OnInit {
{ title: '客户预存款', index: 'czcgje', className: 'text-right', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.czcgje }) } },
{ title: '业绩量', index: 'yisje', className: 'text-center' },
{ title: '已收附加费', index: 'yisfjf', className: 'text-right', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yisfjf }) } },
{ title: '平均附加费率', index: 'fjfl', className: 'text-center' },
{ title: '平均附加费率', index: 'fjfl', className: 'text-center',format: (item)=> {
return item.fjfl + '%'
} },
{ title: '已开票金额', index: 'ykpje', className: 'text-right', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.ykpje }) } },
];
/**

View File

@ -0,0 +1,2 @@
<g2-custom delay="100" (render)="render($event)"></g2-custom>

View File

@ -0,0 +1,132 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-07 17:57:23
* @LastEditors : Shiming
* @LastEditTime : 2022-04-07 19:28:24
* @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\datascreen\\curve\\curve.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
import { G2MiniAreaClickItem } from '@delon/chart/mini-area';
import { DataService } from '../../../services/data.service';
// import DataSet from '@antv/data-set';
const DataSet = require('@antv/data-set');
import { Chart } from '@antv/g2';
@Component({
selector: 'app-financetable-curve-min',
templateUrl: './curve.component.html',
styleUrls: ['./curve.component.less']
})
export class DatatableCustomindexCurveMinComponent implements OnInit,OnChanges {
el: any;
@Input() chartData: any;
chart: any;
data = [
{ time: '01', type: '订单数', temperature: 7 },
{ time: '02', type: '运单数', temperature: 3.9 },
{ time: '03', type: '订单数', temperature: 6.9 },
{ time: '04', type: '订单数', temperature: 4.2 },
{ time: '05', type: '订单数', temperature: 9.5 },
{ time: '06', type: '订单数', temperature: 5.7 },
{ time: '06', type: '运单数', temperature: 5.7 },
{ time: '07', type: '运单数', temperature: 14.5 },
{ time: '08', type: '订单数', temperature: 8.5 },
{ time: '09', type: '订单数', temperature: 18.4 },
{ time: '10', type: '订单数', temperature: 11.9 },
{ time: '11', type: '订单数', temperature: 21.5 },
{ time: '12', type: '订单数', temperature: 15.2 },
{ time: '08', type: '运单数', temperature: 8.5 },
{ time: '09', type: '运单数', temperature: 18.4 },
{ time: '10', type: '运单数', temperature: 11.9 },
{ time: '11', type: '运单数', temperature: 21.5 },
{ time: '12', type: '订单数', temperature: 15.2 },
];
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(() => {
this.ngZone.runOutsideAngular(() => this.init(this.el));
}, 1000)
}
private init(el: HTMLElement): void {
this.chart = new Chart({
container: el,
autoFit: true,
height: 200,
});
let value: any = []
this.service.request(this.service.$api_getTradingTrend).subscribe((res: any) => {
if(res) {
res.forEach((element: any) => {
value.push({
time: element?.time,
type: element?.type == 'DD' ? '订单数' : '运单数',
temperature: element?.value,
});
});
console.log(value);
this.chartData = value
this.chart.data(this.chartData);
this.chart.scale({
time: {
range: [0, 1],
},
number: {
nice: true,
},
});
this.chart.tooltip({
showCrosshairs: true,
shared: true,
});
this.chart.axis('temperature', {
label: {
formatter: (val: any) => {
return val + '万';
},
},
});
this.chart
.line()
.position('time*temperature')
.color('type')
.shape('smooth');
this.chart
.point()
.position('time*temperature')
.color('type')
.shape('circle');
this.chart.render();
};
});
}
}

View File

@ -1 +0,0 @@
<g2-custom delay="100" (render)="render($event)"></g2-custom>

View File

@ -4,46 +4,71 @@
* @Author : Shiming
* @Date : 2022-04-06 10:57:56
* @LastEditors : Shiming
* @LastEditTime : 2022-04-07 01:26:56
* @LastEditTime : 2022-04-07 19:51:32
* @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\datascreen\\datascreen.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<!-- 页头 -->
<!-- <page-header-wrapper [title]="'运营报表'"></page-header-wrapper> -->
<div >
<div style="position: relative;">
<h1 style="display: flex; justify-content: center; align-items: center;margin: 0; padding: 0; font-size: 25px;font-weight: 700;">运多星网络货运平台</h1>
<div style="position: absolute; right: 0; display: flex;">
<img src="../../../../../assets/images/oclock.svg" alt="">&nbsp;
<span style="font-size: 16px; margin-top: 5px;">{{todayTime}}</span>
</div>
</div>
<h1 style="display: flex; justify-content: center; align-items: center;margin: 0; padding: 0;font-size: 25px;font-weight: 700;">实时交易监控</h1>
</div>
<div nz-row [nzGutter]="24">
<div nz-col class="gutter-row" [nzSpan]="8">
<nz-card nzTitle="">
<nz-card nzTitle="2022全年交易情况">
<nz-row [nzGutter]="16">
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(1949101 | number)!" [nzTitle]="'成交额'"></nz-statistic>
<nz-statistic [nzValue]="(allDeal?.dealAmount | currency)!" [nzTitle]="'成交额'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'结算额'"></nz-statistic>
<nz-statistic [nzValue]="(allDeal?.settlementAmount | currency)!" [nzTitle]="'结算额'"></nz-statistic>
</nz-col>
</nz-row>
<nz-row [nzGutter]="16">
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(1949101 | number)!" [nzTitle]="'订单数'"></nz-statistic>
<nz-statistic [nzValue]="(allDeal?.billQuantity | number)!" [nzTitle]="'订单数'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'货物吞吐()'"></nz-statistic>
<nz-statistic [nzValue]="(allDeal?.weight | number: '1.0-2')!" [nzTitle]="'货物吞吐()'"></nz-statistic>
</nz-col>
</nz-row>
</nz-card>
<nz-card nzTitle="本月交易趋势">
<g2-timeline
[data]="chartData"
[titleMap]="{ y1: '客流量', y2: '支付笔数' }"
[height]="200"
mask="MM月DD日"
[slider]="false"
></g2-timeline>
<nz-card nzTitle="本月交易趋势" >
<app-financetable-curve-min #curve [chartData]='chartData2'></app-financetable-curve-min>
</nz-card>
<nz-card nzTitle="实时货源">
<st #st multiSort bordered [columns]="columns" [ps]="5" [data]="service.$api_listShipperReportPage"
<st
[scroll]="{ y: '300px' }"
#st
multiSort
bordered
[columns]="columns"
[data]="service.$api_getRealTimeSupply"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: false, showSize: false, pageSizes: [5, 50, 100] }" [loading]="service.http.loading">
[res]="{ reName: { list: 'data' } }"
[page]="{ show: false, showSize: false, pageSizes: [5, 50, 100] }"
[loading]="service.http.loading"
>
<ng-template st-row="index" let-item let-index="index">
{{ index }}
</ng-template>
<ng-template st-row="weight" let-item let-index="index">
{{ item.weight ? item.weight + '吨' : '' }}
{{ item.volume ? item.volume + '方' : '' }}
</ng-template>
<ng-template st-row="weight" let-item let-index="index">
{{ item.weight ? item.weight + '吨' : '' }}
{{ item.volume ? item.volume + '方' : '' }}
</ng-template>
</st>
</nz-card>
</div>
@ -51,20 +76,20 @@
<nz-card>
<nz-row [nzGutter]="24">
<nz-col [nzSpan]="8">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'今日交易额'"></nz-statistic>
<nz-statistic [nzValue]="(headDeal?.todayAmount | currency)!" [nzTitle]="'今日交易额'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="8">
<nz-statistic [nzValue]="(1949101 | number)!" [nzTitle]="'本月交易额'"></nz-statistic>
<nz-statistic [nzValue]="(headDeal?.monthAmount | currency)!" [nzTitle]="'本月交易额'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="8">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'累计交易额'"></nz-statistic>
<nz-statistic [nzValue]="(headDeal?.cumulativeAmount | currency)!" [nzTitle]="'累计交易额'"></nz-statistic>
</nz-col>
</nz-row>
</nz-card>
<app-datatable-customindex-map style="max-height: 600px;" #map [chartData]="chartData"></app-datatable-customindex-map>
<app-datatable-customindex-map style="max-height: 600px" #map [chartData]="chartData"></app-datatable-customindex-map>
<nz-card>
<nz-row [nzGutter]="24">
<g2-bar height="200" [title]="'销售额趋势'" [data]="salesData" (clickItem)="handleClick($event)"></g2-bar>
<g2-bar #bar height="200" [delay]='500' repaint='true' [title]="'本月发货量排名'" [data]="salesData2" (ready)='genData()'></g2-bar>
</nz-row>
</nz-card>
</div>
@ -72,59 +97,78 @@
<nz-card>
<nz-row [nzGutter]="24">
<nz-col [nzSpan]="6">
<nz-statistic [nzValue]="(1949101 | number)!" [nzTitle]="'货主'"></nz-statistic>
<nz-statistic [nzValue]="(classifyDeal?.enterpriseTotal | number)!" [nzTitle]="'货主'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="6">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'合伙人'"></nz-statistic>
<nz-statistic [nzValue]="(classifyDeal?.partnerTotal | number: '1.0-2')!" [nzTitle]="'合伙人'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="6">
<nz-statistic [nzValue]="(1949101 | number)!" [nzTitle]="'司机'"></nz-statistic>
<nz-statistic [nzValue]="(classifyDeal?.driverTotal | number)!" [nzTitle]="'司机'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="6">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'车辆'"></nz-statistic>
<nz-statistic [nzValue]="(classifyDeal?.carTotal | number: '1.0-2')!" [nzTitle]="'车辆'"></nz-statistic>
</nz-col>
</nz-row>
</nz-card>
<nz-card nzTitle="今日交易情况">
<nz-row [nzGutter]="16">
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(1949101 | number)!" [nzTitle]="'订单数'"></nz-statistic>
<nz-statistic [nzValue]="(todaysDeal?.billQuantity | number)!" [nzTitle]="'订单数'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'有效订单'"></nz-statistic>
<nz-statistic [nzValue]="(todaysDeal?.billEffectiveQuantity | number: '1.0-2')!" [nzTitle]="'有效订单'"></nz-statistic>
</nz-col>
</nz-row>
<nz-row [nzGutter]="16">
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(1949101 | number)!" [nzTitle]="'运输金额()'"></nz-statistic>
<nz-statistic [nzValue]="(todaysDeal?.amount | currency)!" [nzTitle]="'运输金额()'"></nz-statistic>
</nz-col>
<nz-col [nzSpan]="12">
<nz-statistic [nzValue]="(2019.111 | number: '1.0-2')!" [nzTitle]="'货物吞吐()'"></nz-statistic>
<nz-statistic [nzValue]="(todaysDeal?.weight | number: '1.0-2')!" [nzTitle]="'货物吞吐()'"></nz-statistic>
</nz-col>
</nz-row>
</nz-card>
<nz-card nzTitle="本月运营质量监测">
<nz-row [nzGutter]="24">
<nz-col [nzSpan]="6">
<g2-pie percent="28" subTitle="中式快餐" total="28%" height="130"></g2-pie>
<nz-row [nzGutter]="24">
<nz-col [nzSpan]="12">
<div style="width: 200px; display: inline-block">
<g2-pie percent="28" subTitle="准点率" total="28%" height="100"></g2-pie>
</div>
</nz-col>
<nz-col [nzSpan]="6">
<g2-pie percent="28" subTitle="中式快餐" total="28%" height="130"></g2-pie>
<nz-col [nzSpan]="12">
<div style="width: 200px; display: inline-block">
<g2-pie percent="22" subTitle="货损率" total="22%" height="100"></g2-pie>
</div>
</nz-col>
<nz-col [nzSpan]="6">
<g2-pie percent="28" subTitle="中式快餐" total="28%" height="130"></g2-pie>
<nz-col [nzSpan]="12">
<div style="width: 200px; display: inline-block">
<g2-pie percent="22" subTitle="空车率" total="22%" height="100"></g2-pie>
</div>
</nz-col>
<nz-col [nzSpan]="6">
<g2-pie percent="28" subTitle="中式快餐" total="28%" height="130"></g2-pie>
<nz-col [nzSpan]="12">
<div style="width: 200px; display: inline-block">
<g2-pie percent="22" subTitle="结算率" total="22%" height="100" width="200"></g2-pie>
</div>
</nz-col>
</nz-row>
</nz-card>
<nz-card nzTitle="实时运单风控">
<st #st multiSort bordered [columns]="orderColumns" [ps]="5" [data]="service.$api_listShipperReportPage"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqOrderParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: false, showSize: false, pageSizes: [5, 50, 100] }" [loading]="service.http.loading">
</st>
<st
#st
multiSort
bordered
[scroll]="{y: '300px'}"
[columns]="orderColumns"
[data]="service.$api_getRealTimeWaybillRiskControl"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqOrderParams }"
[res]="{ reName: { list: 'data' } }"
[page]="{ show: false, showSize: false, pageSizes: [5, 50, 100] }"
[loading]="service.http.loading"
>
<ng-template st-row="carNo" let-item let-index="index">
{{ item?.driverName }}{{ item?.carNo ? '/' + item?.carNo : '' }}
</ng-template>
</st>
</nz-card>
</div>
</div>
</div>

View File

@ -4,5 +4,8 @@
color: #399ffd;
font-weight: bold;
}
.nz-statistic-number,.ant-statistic-content-value {
font-size: 20px;
}
}
}

View File

@ -1,11 +1,11 @@
import { map } from 'rxjs/operators';
/*
* @Description :
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-06 10:57:56
* @LastEditors : Shiming
* @LastEditTime : 2022-04-07 09:30:20
* @LastEditTime : 2022-04-07 19:48:19
* @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\datascreen\\datascreen.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -14,10 +14,10 @@ import { STColumn, STComponent } from '@delon/abc/st';
import { SFSchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { DataService } from '../../services/data.service';
import { DatatableCustomindexMapComponent } from './curve/map.component';
import { G2TimelineData } from '@delon/chart/timeline';
import { DatatableCustomindexMapComponent } from './map/map.component';
import { G2TimelineComponent, G2TimelineData } from '@delon/chart/timeline';
import { G2MiniAreaClickItem, G2MiniAreaData } from '@delon/chart/mini-area';
import { format } from 'date-fns';
import { FinanceTableCurveComponent } from '../financetable/curve/curve.component';
@Component({
@ -29,90 +29,121 @@ export class DatatableDatascreenComponent implements OnInit {
@ViewChild('st') private readonly st!: STComponent;
@ViewChild('orderSt') private readonly orderSt!: STComponent;
@ViewChild('map') private readonly map!: DatatableCustomindexMapComponent;
columns: STColumn[] = [];
chartData: G2TimelineData[] = [];
orderColumns: STColumn[] = [];
salesData = this.genData();
constructor(public service: DataService) {
}
@ViewChild('timeline', { static: false }) timeline!: G2TimelineComponent;
@ViewChild('curve') private readonly curve!: FinanceTableCurveComponent;
columns: STColumn[] = [];
chartData: any[] = [];
orderColumns: STColumn[] = [];
chartData2: any = {}
allDeal: any;
headDeal: any;
classifyDeal: any;
todaysDeal: any;
todayTime: string = '';
monthData: G2TimelineData[] = [];
monthData2:G2TimelineData[] =[];
salesData2: Array<any> = this.genData();
constructor(public service: DataService) {}
ngOnChanges(changes: any): void {
console.log(changes);
}
/**
* 查询参数
*/
get reqOrderParams() {
const params = {
}
const params = {};
return { ...params };
}
get reqParams() {
const params = {
}
const params = {};
return { ...params };
}
ngOnInit(): void {
this.initST()
this.initOrderST()
this.initData()
this.initLineData()
setInterval(() => {
this.setTime();
}, 1000);
this.initST();
this.initOrderST();
this.initData();
// this.initLineData();
}
initData(){
setTime() {
var myDate = new Date();
var mytime = myDate.toLocaleTimeString(); //获取当前时间
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
myDate.getMonth(); //获取当前月份(0-11,0代表1月)
myDate.getDate(); //获取当前日(1-31)
this.todayTime = myDate.getFullYear() + '-' + myDate.getMonth() + 1 + '-' + myDate.getDate() + ' ' + mytime;
}
initData() {
this.service.request(this.service.$api_getAnnualTransactions).subscribe((res: any) => {
this.allDeal = res;
});
this.service.request(this.service.$api_getTransactionAmount).subscribe((res: any) => {
this.headDeal = res;
});
this.service.request(this.service.$api_getCustomerStatistics).subscribe((res: any) => {
this.classifyDeal = res;
});
this.service.request(this.service.$api_getTradingToday).subscribe((res: any) => {
this.todaysDeal = res;
});
let value: any = [];
this.service.request(this.service.$api_getTransactionDistribution).subscribe((res: any) => {
if (res) {
res.forEach((element: any) => {
value.push({
name: element.province,
value: element.weight
});
});
console.log(value);
this.chartData = value;
this.map.reRender();
}
});
}
public genData(): G2MiniAreaData[] {
let value: any = [];
this.service.request(this.service.$api_getShipmentRanking).subscribe((res: any) => {
console.log(res);
})
}
initLineData(){
for (let i = 0; i < 20; i += 1) {
this.chartData.push({
time: new Date().getTime() + 1000 * 60 * 60 * 24 * i,
y1: Math.floor(Math.random() * 100) + 1000,
y2: Math.floor(Math.random() * 100) + 10,
res.forEach((element: any) => {
value.push({
x: element.city,
y: element.weight
});
});
}
});
console.log(value);
return value;
}
private genData(): G2MiniAreaData[] {
const beginDay = new Date().getTime();
const res: G2MiniAreaData[] = [];
for (let i = 0; i < 20; i += 1) {
res.push({
x: format(new Date(beginDay + 1000 * 60 * 60 * 24 * i), 'yyyy-MM-dd'),
y: Math.floor(Math.random() * 100) + 10,
});
}
return res;
initPillarData(){
this.curve.reRender()
}
/**
* 初始化数据列表
*/
* 初始化数据列表
*/
initST() {
this.columns = [
{ title: '序号', index: 'carNo', className: 'text-center' },
{ title: '发货地', index: 'carNoColorLabel', className: 'text-center' },
{ title: '卸货地', index: 'carModelLabel', className: 'text-center' },
{ title: '货物', index: 'carStatus', className: 'text-center'},
{ title: '数量', index: 'approvalStatus', className: 'text-center' },
{ title: '序号', render: 'index', className: 'text-center', width: '70px' },
{ title: '发货地', index: 'loadAddress', className: 'text-center', width: '90px' },
{ title: '卸货地', index: 'dischargeAddress', className: 'text-center', width: '90px' },
{ title: '货物', index: 'goodsName', className: 'text-center', width: '90px' },
{ title: '数量', render: 'weight', className: 'text-center', width: '120px' }
];
console.log(this.map);
setTimeout(() => {
if(this.map) {
this.map.reRender()
}
}, 500);
}
initOrderST() {
this.orderColumns = [
{ title: '运单号', index: 'carNo', className: 'text-center' },
{ title: '货主', index: 'carNoColorLabel', className: 'text-center' },
{ title: '时间', index: 'carModelLabel', className: 'text-center' },
{ title: '风险等级', index: 'carStatus', className: 'text-center'}
{ title: '运单号', index: 'wayCode', className: 'text-center', width: '150px' },
{ title: '司机/车辆', index: 'carNo', className: 'text-center', width: '120px' },
{ title: '货主', index: 'shipperName', className: 'text-center', width: '70px' },
{ title: '时间', index: 'createTime', className: 'text-center', width: '200px' },
{ title: '异常预警', index: 'warningTypeLabel', className: 'text-center', width: '120px' }
];
}
handleClick(data: G2MiniAreaClickItem): void {
this.service.msgSrv.info(`${data.item.x} - ${data.item.y}`);
}

View File

@ -0,0 +1,11 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-06 17:57:07
* @LastEditors : Shiming
* @LastEditTime : 2022-04-07 19:44:32
* @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\datascreen\\map\\map.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<g2-custom delay="200" (render)="render($event)" ></g2-custom>

View File

@ -49,7 +49,7 @@ export class DatatableCustomindexMapComponent implements OnInit, OnChanges {
this.chart = new Chart({
container: el,
autoFit: true,
height: 540,
height: 680,
padding: [0, 0]
});
this.chart.tooltip({
@ -87,16 +87,27 @@ export class DatatableCustomindexMapComponent implements OnInit, OnChanges {
});
// 可视化用户数据
this.userData = [
{ name: '山东', value: '21',trend:'#F51D27' },
{ name: '山东', value: 22},
{ name: '广东', value: 20,trend:'#0A61D7' },
{ name: '广东', value: 20 },
{ name: '四川', value: 120 },
{ name: '湖南', value: 200 },
{ name: '河北', value: 30 },
// this.userData = [
// { name: '山东', value: 21 },
// { name: '山东', value: 22},
// { name: '广东', value: 20, },
// { name: '广东', value: 20 },
// { name: '四川', value: 120 },
// { name: '湖南', value: 200 },
// { name: '河北', value: 30 },
];
// ];
let value: any = []
this.service.request(this.service.$api_getTransactionDistribution).subscribe((res: any) => {
if(res) {
res.forEach((element: any) => {
value.push({
name: element.province,
value: element.weight,
});
});
console.log(value);
this.userData = value
this.userDv = this.ds.createView().source(this.userData).transform({
geoDataView: this.worldMap,
field: 'name',
@ -105,31 +116,37 @@ export class DatatableCustomindexMapComponent implements OnInit, OnChanges {
}).transform({
type: 'map',
callback: (obj: { trend: string; value: number }) => {
obj.trend = obj.value > 100 ? '蓝色地区' : '红色地区';
if(obj.value < 500) {
obj.trend = '500以下';
} else if(obj.value >= 500 && obj.value < 1000){
obj.trend = '500-1000';
} else if(obj.value >= 1000 ){
obj.trend = '>1000';
}
return obj;
}
});
this.userView = this.chart.createView();
this.userView.data(this.userDv.rows);
// this.userView.scale({
// trend: {
// alias: '蓝色地区数量'
// }
// });
this.userView.scale({
trend: {
alias: '蓝色地区数量'
}
});
console.log(this.userView);
console.log('45545');
this.userView.polygon().position('longitude*latitude').color('trend', ['#000', '#76ddb2']).tooltip('').style({fillOpacity: 0.85 })
// .animate({
// leave: {
// animation: 'fade-out'
// }
// });
this.userView.polygon().position('longitude*latitude').color('trend', ['#0a3f80', '#1b6aca', '#5d93d4']).tooltip('name*trend*value').style({fillOpacity: 0.85 })
.animate({
leave: {
animation: 'fade-out'
}
});
this.userView.interaction('element-active');
this.chart.render();
}
})
});
console.log('9999');

View File

@ -1,10 +1,10 @@
/*
* @Description :
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-06 11:02:17
* @LastEditors : Shiming
* @LastEditTime : 2022-04-06 17:22:44
* @LastEditTime : 2022-04-07 18:29:39
* @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\datatable.module.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -40,7 +40,9 @@ import { FinancetablePillarComponent } from './components/financetable/pillar/pi
import { ComplianceCurveComponent } from './components/compliance/index/curve/curve.component';
import { BusitableCurveComponent } from './components/busitable/busiindex/curve/curve.component';
import { DatatableCustomindexCurveComponent } from './components/customtable/customindex/curve/curve.component';
import { DatatableCustomindexMapComponent } from './components/datascreen/curve/map.component';
import { DatatableCustomindexMapComponent } from './components/datascreen/map/map.component';
import { DatatableCustomindexCurveMinComponent } from './components/datascreen/curve/curve.component';
import { DatatableReportingvViewTrackComponent } from './reporting/components/view-track/view-track.component';
const COMPONENTS: Type<void>[] = [
DatatableDataindexComponent,
@ -74,7 +76,9 @@ const COMPONENTS: Type<void>[] = [
ComplianceCurveComponent,
BusitableCurveComponent,
DatatableCustomindexCurveComponent,
DatatableCustomindexMapComponent
DatatableCustomindexMapComponent,
DatatableCustomindexCurveMinComponent,
DatatableReportingvViewTrackComponent
]

View File

@ -3,10 +3,8 @@
<st #st [scroll]="{x:'1000px',y:'600px'}" [data]="service.$api_get_fund_valid_result" [columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams,process: beforeReq }"
[res]="{ reName: { list: 'data' } }" [page]="{ show: false,showSize:false}" [loading]="false" [bordered]="true">
<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="checkStatus" let-item>
<span [ngClass]="{'text-red-dark':item?.checkStatus === 2}">{{filterCheckStatus(item?.checkStatus)}}</span>
</ng-template>
</st>
</div>

View File

@ -51,16 +51,17 @@ export class DatatableReportingFundInfoComponent implements OnInit {
width: '10%',
type: 'enum',
enum: {
'0': '非必填',
'1': '必填',
0: '',
1: '',
},
},
{ title: '上传值', index: 'fieldValue', className: 'text-center', width: '15%', },
{
title: '本地校验',
index: 'checkStatus',
render: 'checkStatus',
className: 'text-center',
type: 'enum',
enum: {
'0': '校验中',
'1': '通过',
@ -97,6 +98,19 @@ export class DatatableReportingFundInfoComponent implements OnInit {
this.modalRef.destroy();
}
filterCheckStatus(status: number) {
switch (status) {
case 0:
return '校验中';
case 1:
return '通过';
case 2:
return '不通过';
default:
return '';
}
}
}

View File

@ -28,7 +28,7 @@
<st #st [scroll]="{x:'1200px'}" [data]="service.$api_get_fund_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: [1,10,20, 50, 100] }" (change)="changeSt($event)">
[page]="{ show: true, showSize: true, pageSizes: [10,20, 50, 100] }" (change)="changeSt($event)">
<ng-template st-row="uploadStatus" let-item>
<span [ngClass]="{'text-red-dark':item?.uploadStatus === '4'}">{{item?.uploadStatusLabel}}</span>
</ng-template>
@ -58,5 +58,6 @@
</div>
<button nz-button nzType="primary" (click)="upload()">上传</button>
<button nz-button nzType="primary" (click)="recall()">撤回</button>
<button nz-button nzType="primary" (click)="updateData()">更新数据</button>
</div>
</ng-template>

View File

@ -7,7 +7,6 @@ import { NzModalService } from 'ng-zorro-antd/modal';
import { ReportingService } from '../../services/reporting.service';
import { DatatableReportingFundInfoComponent } from '../fund-info/fund-info.component';
import { DatatableReportingUploadSettingComponent } from '../upload-setting/upload-setting.component';
import { DatatableReportingVerifyResultComponent } from '../verify-result/verify-result.component';
@Component({
selector: 'app-datatable-fund-reporting',
@ -117,7 +116,7 @@ export class DatatableFundReportingComponent implements OnInit {
title: '承运司机',
type: 'string',
ui: {
placeholder: '请输入司机姓名/手机号', visibleIf: {
placeholder: '请输入司机姓名', visibleIf: {
_$expand: (value: boolean) => value,
},
}
@ -147,11 +146,16 @@ export class DatatableFundReportingComponent implements OnInit {
uploadStatus: {
title: '上传状态',
type: 'string',
default: 0,
enum: [
{ label: '待上传', value: 0 },
{ label: '已上传', value: 1 },
{ label: '异常', value: 2 }
],
ui: {
placeholder: '请选择',
widget: 'dict-select',
params: { dictKey: 'service:type' },
containsAllLabel: true,
widget: 'select',
allowClear: true,
visibleIf: {
_$expand: (value: boolean) => value,
},
@ -160,17 +164,21 @@ export class DatatableFundReportingComponent implements OnInit {
verifyStatus: {
title: '本地校验',
type: 'string',
enum: [
{ label: '校验中', value: 0 },
{ label: '通过', value: 1 },
{ label: '不通过', value: 2 }
],
ui: {
placeholder: '请选择',
widget: 'dict-select',
params: { dictKey: 'service:type' },
containsAllLabel: true,
allowClear: true,
widget: 'select',
visibleIf: {
_$expand: (value: boolean) => value,
},
}
},
enterpriseInfoId: {
ltdId: {
title: '网络货运人',
type: 'string',
ui: {
@ -230,24 +238,24 @@ export class DatatableFundReportingComponent implements OnInit {
className: 'text-center',
width: '180px',
},
{ title: '运单号', render: 'wayBillCode', className: 'text-center', width: '150px', },
{ title: '运单号', render: 'wayBillCode', className: 'text-center', width: '180px', },
{
title: '网络货运人',
index: 'ltdName',
className: 'text-center',
width: '180px',
},
{ title: '实际承运人名称', index: 'carrier', className: 'text-center', width: '200px' },
{ title: '实际承运人证件号码', index: 'cardId', className: 'text-center', width: '120px' },
{ title: '实际承运人名称', index: 'carrier', className: 'text-center', width: '150px' },
{ title: '实际承运人证件号码', index: 'cardId', className: 'text-center', width: '200px' },
{ title: '车牌号', index: 'carNumber', className: 'text-center', width: '180px' },
{ title: '车牌颜色', index: 'carColor', className: 'text-center', width: '180px' },
{ title: '总金额', render: 'tolalAmount', className: 'text-center', width: '120px' },
{ title: '付款方式', index: 'payTypeLabel', className: 'text-center', width: '180px' },
{ title: '车队长', index: 'payee', className: 'text-center', width: '250px' },
{ title: '收款账户', index: 'collectionAccount', className: 'text-center', width: '200px' },
{ title: '付款方式', index: 'payType', className: 'text-center', width: '150px' },
{ title: '车队长', index: 'payee', className: 'text-center', width: '150px' },
{ title: '收款账户', index: 'collectionAccount', className: 'text-center', width: '180px' },
{ title: '收款银行', index: 'bankTypeLabel', className: 'text-center', width: '200px' },
{ title: '收款银行', index: 'bankTypeLabel', className: 'text-center', width: '150px' },
{ title: '银行流水号', index: 'bankSerialNumber', className: 'text-center', width: '180px' },
{ title: '实际支付金额', render: 'payAmount', className: 'text-center', width: '150px' },
@ -290,7 +298,9 @@ export class DatatableFundReportingComponent implements OnInit {
selectChange(item: any) {
this.selectedIndex = item?.value || '';
setTimeout(() => {
this.selectedRows = [];
this.st.load(1);
})
}
@ -378,14 +388,34 @@ export class DatatableFundReportingComponent implements OnInit {
})
}
/**
* 查看监管审核结果
*/
viewAuditResult(record: any) {
if (record?.verifyStatus !== '1') {
if (record?.verifyStatus !== '2') {
return;
}
this.openWainingModal('监管审核结果', record?.result)
this.openWainingModal('监管审核结果', record?.uploadResult)
}
/**
* 更新数据
*/
updateData() {
if (this.selectedRows.length === 0) {
this.openWainingModal('请选择需要更新的数据');
return;
}
const ids = this.selectedRows.map(i => i?.id);
this.service.request(this.service.$api_update_fund_data, ids).subscribe(res => {
if (res) {
this.selectedRows = [];
this.st.reload();
}
})
}

View File

@ -28,26 +28,28 @@
<st #st [scroll]="{x:'1200px'}" [data]="service.$api_get_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]="service.http.loading">
[page]="{ show: true, showSize: true, pageSizes: [10,20, 50, 100] }" [loading]="service.http.loading"
(change)="changeSt($event)">
<ng-template st-row="orderCheckStatus" let-item let-index="index">
<a (click)="viewAuditResult(item)"
*ngIf="item?.orderCheckStatus === '2'">{{filterStatus(item?.orderCheckStatus)}}</a>
<span *ngIf="item?.orderCheckStatus !== '2'">{{filterStatus(item?.orderCheckStatus)}}</span>
<a *ngIf="item?.orderCheckStatus === 2"
(click)="viewAuditResult(item)">{{filterStatus(item?.orderCheckStatus)}}</a>
<span *ngIf="item?.orderCheckStatus !== 2">{{filterStatus(item?.orderCheckStatus)}}</span>
</ng-template>
<ng-template st-row="driverCheckStatus" let-item let-index="index">
<a (click)="viewAuditResult(item)"
*ngIf="item?.driverCheckStatus === '2'">{{filterStatus(item?.driverCheckStatus)}}</a>
<span *ngIf="item?.driverCheckStatus !== '2'">{{filterStatus(item?.driverCheckStatus)}}</span>
*ngIf="item?.driverCheckStatus === 2">{{filterStatus(item?.driverCheckStatus)}}</a>
<span *ngIf="item?.driverCheckStatus !== 2">{{filterStatus(item?.driverCheckStatus)}}</span>
</ng-template>
<ng-template st-row="carCheckStatus" let-item let-index="index">
<a (click)="viewAuditResult(item)" *ngIf="item?.carCheckStatus === '2'">{{filterStatus(item?.carCheckStatus)}}</a>
<span *ngIf="item?.carCheckStatus !== '2'">{{filterStatus(item?.carCheckStatus)}}</span>
<a (click)="viewAuditResult(item)" *ngIf="item?.carCheckStatus === 2">{{filterStatus(item?.carCheckStatus)}}</a>
<span *ngIf="item?.carCheckStatus !== 2">{{filterStatus(item?.carCheckStatus)}}</span>
</ng-template>
<ng-template st-row="checkStatus" let-item let-index="index">
<a (click)="viewResult(item)" *ngIf="item?.billStatus === '2'">{{filterCheckStatus(item?.checkStatus)}}</a>
<span *ngIf="item?.billStatus !== '2'">{{filterCheckStatus(item?.checkStatus)}}</span>
<a (click)="viewResult(item)">{{filterCheckStatus(item?.checkStatus)}}</a>
<span *ngIf="item?.checkStatus !== 2">{{filterCheckStatus(item?.checkStatus)}}</span>
</ng-template>
<ng-template st-row="billCode" let-item>
<span class="text-red-dark">{{item?.billCode}}</span>
</ng-template>
@ -65,10 +67,10 @@
</ng-template>
<ng-template st-row="car" let-item let-index="index">
<a (click)="viewAuditResult(item)">查看轨迹</a>
<a (click)="viewTrack(item,'car')">查看轨迹</a>
</ng-template>
<ng-template st-row="driver" let-item let-index="index">
<a (click)="viewAuditResult(item)" *ngIf="item?.billStatus === '2'">查看轨迹</a>
<a (click)="viewTrack(item,'driver')">查看轨迹</a>
</ng-template>
</st>
</nz-card>
@ -80,6 +82,7 @@
</div>
<button nz-button nzType="primary" (click)="upload()">上传</button>
<button nz-button nzType="primary" (click)="recall()">撤回</button>
<button nz-button nzType="primary" (click)="updateData()">更新数据</button>
<button nz-button nzType="primary" (click)="uploadSetting()">上传设置</button>
</div>
</ng-template>

View File

@ -1,12 +1,13 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { STColumn, STComponent, STData } from '@delon/abc/st';
import { STChange, 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';
import { DatatableReportingvViewTrackComponent } from '../view-track/view-track.component';
@Component({
selector: 'app-datatable-order-reporting',
@ -28,9 +29,9 @@ export class DatatableOrderReportingComponent implements OnInit {
{ name: '异常', value: '4' },
{ name: '全部', value: '' }
];
selectedIndex = ''; //选择的项目
serviceTel = '';
selectedIndex = '1';
isLoading: boolean = false;
selectedRows: any[] = [];
constructor(
public service: ReportingService,
private router: Router,
@ -52,7 +53,7 @@ export class DatatableOrderReportingComponent implements OnInit {
*/
get reqParams() {
const params = Object.assign({}, this.sf?.value || {}, {
representationsStatus: this.selectedIndex,
putStatus: this.selectedIndex,
});
delete params._$expand;
return { ...params };
@ -61,9 +62,9 @@ export class DatatableOrderReportingComponent implements OnInit {
/**
* 选中行
*/
get selectedRows() {
return this.st?.list.filter((item: any) => item.checked) || [];
}
// get selectedRows() {
// return this.st?.list.filter((item: any) => item.checked) || [];
// }
/**
* 伸缩查询条件
@ -148,6 +149,7 @@ export class DatatableOrderReportingComponent implements OnInit {
putStatus: {
title: '上传状态',
type: 'string',
default: 0,
enum: [
{ label: '待上传', value: 0 },
{ label: '已上传', value: 1 },
@ -157,6 +159,7 @@ export class DatatableOrderReportingComponent implements OnInit {
ui: {
placeholder: '请选择',
widget: 'select',
allowClear: true,
visibleIf: {
_$expand: (value: boolean) => value,
},
@ -173,6 +176,7 @@ export class DatatableOrderReportingComponent implements OnInit {
ui: {
placeholder: '请选择',
widget: 'select',
allowClear: true,
visibleIf: {
_$expand: (value: boolean) => value,
},
@ -283,9 +287,9 @@ export class DatatableOrderReportingComponent implements OnInit {
title: '订单号',
render: 'billCode',
className: 'text-center',
width: '150px',
width: '180px',
},
{ title: '运单号', render: 'wayBillCode', className: 'text-center', width: '150px', },
{ title: '运单号', render: 'wayBillCode', className: 'text-center', width: '180px', },
{
title: '网络货运人',
@ -293,14 +297,13 @@ export class DatatableOrderReportingComponent implements OnInit {
className: 'text-center',
width: '180px',
},
{ title: '统一社会信用代码', index: 'unifiedSocialCreditCode', render: 'loadingPlace', className: 'text-center', width: '200px' },
{ title: '统一社会信用代码', index: 'unifiedSocialCreditCode', className: 'text-center', width: '200px' },
{ title: '运单生成时间', index: 'wayBillCreateTime', className: 'text-center', width: '180px' },
{ title: '发货时间', index: 'dispatchedDate', className: 'text-center', width: '180px' },
{ title: '收货时间', index: 'receivingDate', className: 'text-center', width: '180px' },
{ title: '托运人名称', index: 'shipperName', className: 'text-center', width: '250px' },
{ title: '托运人统一社会信用代码', index: 'shipperCreditCode', render: 'loadingPlace', className: 'text-center', width: '200px' },
{ title: '装货地址', index: 'loadingAddress', render: 'dischargePlace', className: 'text-center', width: '200px' },
{ title: '托运人统一社会信用代码', index: 'shipperCreditCode', className: 'text-center', width: '200px' },
{ title: '装货地址', index: 'loadingAddress', className: 'text-center', width: '200px' },
{ title: '收货方名称', index: 'receivingName', className: 'text-center', width: '150px' },
{ title: '收货地址', index: 'consigneeAddress', className: 'text-center', width: '150px' },
{ title: '运费金额', render: 'freightAmount', className: 'text-center', width: '250px' },
@ -364,9 +367,51 @@ export class DatatableOrderReportingComponent implements OnInit {
}
changeSt(e: STChange): void {
if (e.type === 'checkbox') {
const checkRows = (e.checkbox as STData[]) || [];
//判断当前页是否有选中的行
if (checkRows.length === 0) {
// 当前页没有存在已勾选的行,移除之前所记录的当前页的行
const stList = this.st.list;
stList.forEach(item => {
this.selectedRows = this.selectedRows.filter((e: any) => e.id !== item.id);
})
} else {
//添加新增的行
checkRows.forEach((item: any) => {
const newSelectedList = this.selectedRows.filter((r: any) => r.id === item.id);
if (newSelectedList.length === 0) {
this.selectedRows.push(item);
}
})
// 移除取消选中的行
const stList = this.st.list;
stList.forEach(item => {
if (!item.checked) {
const index = this.selectedRows.findIndex(_item => item.id === _item.id);
if (index !== -1) this.selectedRows.splice(index, 1);
}
})
}
} else if (e.type === 'loaded') {
// 页面加载时勾选
(e?.loaded || []).forEach((r: any) => {
this.selectedRows.forEach((x) => {
if (x.id === r.id) {
r.checked = true;
}
});
});
}
}
selectChange(item: any) {
this.selectedIndex = item?.representationsStatus || '';
this.selectedIndex = item?.value || '';
setTimeout(() => {
this.selectedRows = [];
this.st.load(1);
})
}
@ -465,6 +510,7 @@ export class DatatableOrderReportingComponent implements OnInit {
search() {
this.selectedRows = [];
this.st.load(1);
}
@ -483,14 +529,51 @@ export class DatatableOrderReportingComponent implements OnInit {
})
}
/**
* 查看轨迹
*/
viewTrack(_record: any, trajectory: string) {
const title = trajectory === 'car' ? '车辆' : '司机'
const modalRef = this.modal.create({
nzTitle: `查看${title}轨迹`,
nzWidth: 1000,
nzContent: DatatableReportingvViewTrackComponent,
nzComponentParams: {
id: _record?.orderId,
trajectory
},
nzFooter: null
});
modalRef.afterClose.subscribe(res => {
})
}
/**
* 更新数据
*/
updateData() {
if (this.selectedRows.length === 0) {
this.openWainingModal('请选择需要更新的数据');
return;
}
const ids = this.selectedRows.map(i => i?.id);
this.service.request(this.service.$api_update_order_data, ids).subscribe(res => {
if (res) {
this.selectedRows = [];
this.st.reload();
}
})
}
filterStatus(status: number) {
switch (status) {
case 0:
return '校验中';
return '待上传';
case 1:
return '通过';
return '已上传';
case 2:
return '不通过';
return '上传异常';
default:
return '';

View File

@ -5,14 +5,12 @@
</nz-tabset>
</div>
<div style="width: 90%;">
<st #st [scroll]="{x:'1000px',y:'600px'}" [data]="service.$api_get_order_reporting_page" [columns]="columns"
<st #st [scroll]="{x:'1000px',y:'600px'}" [data]="service.$api_get_order_valid_result" [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"
[res]="{ reName: { list: 'data', total: 'data.total' } }" [page]="{ show: false,showSize:false}" [loading]="false"
[bordered]="true">
<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="checkStatus" let-item>
<span [ngClass]="{'text-red-dark':item?.checkStatus === 2}">{{filterCheckStatus(item?.checkStatus)}}</span>
</ng-template>
</st>
</div>

View File

@ -1,8 +1,6 @@
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';
@ -11,26 +9,22 @@ import { ReportingService } from '../../services/reporting.service';
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' },
];
record: any = {};
tabs: any[] = [
{ name: '订单信息', value: 3 },
{ name: '司机信息', value: 2 },
{ name: '车辆信息', value: 4 },
];
subjectType = 3;
subjectId = '';
get reqParams() {
return {};
return {
subjectType: this.subjectType,
subjectId: this.record?.id
};
}
constructor(public service: ReportingService, private modalRef: NzModalRef, public router: Router) {
@ -46,13 +40,31 @@ export class DatatableReportingVerifyResultComponent implements OnInit {
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: 'thirdPartyFieldName', className: 'text-center', width: '120px', },
{ title: '系统字段', index: 'checkFieldName', 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', },
{
title: '是否必填',
index: 'requiredStatus',
className: 'text-center',
width: '100px',
type: 'enum',
enum: {
0: '否',
1: '是'
}
},
{ title: '上传值', index: 'fieldValue', className: 'text-center', width: '150px', },
{
title: '本地校验', index: 'checkStatus', className: 'text-center', width: '100px',
type: 'enum',
enum: {
0: '校验中',
1: '通过',
2: '不通过'
}
},
{ title: '错误内容', index: 'remark', className: 'text-center', width: '150px', },
]
}
@ -64,7 +76,10 @@ export class DatatableReportingVerifyResultComponent implements OnInit {
}
selectTab(e: any) {
setTimeout(() => {
this.subjectType = e?.value;
this.st.load(1);
})
}
update() {
@ -77,9 +92,23 @@ export class DatatableReportingVerifyResultComponent implements OnInit {
}
close(): void {
this.modalRef.destroy();
}
filterCheckStatus(status: number) {
switch (status) {
case 0:
return '校验中';
case 1:
return '通过';
case 2:
return '不通过';
default:
return '';
}
}
}

View File

@ -0,0 +1,5 @@
<div>
<!-- <amap-path-simplifier [mapList]="mapList" [mapHeight]="'600px'" [pois]="pois"></amap-path-simplifier> -->
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList" [pois]="pois">
</amap-path-simplifier>
</div>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { DatatableReportingvViewTrackComponent } from './view-track.component';
describe('DatatableReportingvViewTrackComponent', () => {
let component: DatatableReportingvViewTrackComponent;
let fixture: ComponentFixture<DatatableReportingvViewTrackComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [DatatableReportingvViewTrackComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DatatableReportingvViewTrackComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,92 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import format from 'date-fns/format';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { OrderManagementService } from 'src/app/routes/order-management/services/order-management.service';
@Component({
selector: 'app-datatable-view-track',
templateUrl: './view-track.component.html',
})
export class DatatableReportingvViewTrackComponent implements OnInit {
mapList: any[] = []; //地图点位数据组
addressItems: any[] = []; //打点地址数据组
trajectory = "car";
pois: any[] = [];
id = '';
constructor(public service: OrderManagementService, private modalRef: NzModalRef, public router: Router) {
}
ngOnInit(): void {
if (this.trajectory === 'car') {
this.getTrajectory();
} else if (this.trajectory === 'driver') {
this.getDriverTrajectory();
}
}
selectTab(e: any) {
}
close(): void {
this.modalRef.destroy();
}
// 车辆轨迹
getTrajectory() {
this.service.request(this.service.$api_get_getTrajectory, { id: this.id }).subscribe(res => {
if (res) {
const points = res.trackArray;
let list: any[] = [];
points?.forEach((item: any) => {
list.push({
name: item.hgt,
lnglat: [Number((Number(item.lon) / 600000).toFixed(6)), Number((Number(item.lat) / 600000).toFixed(6))]
});
});
this.mapList = list;
this.addressItems = [...res.cityArray];
if (this.addressItems && this.addressItems.length > 0) {
this.addressItems.forEach(item => {
item.vinOutTime = this.getLocalTime(item.vinOutTime);
});
}
}
});
}
// 获取司机轨迹
getDriverTrajectory() {
this.service.request(this.service.$api_get_getAppDriverPosition, { id: this.id }).subscribe(res => {
if (res) {
const points = res.tracks;
let list: any[] = [];
points?.forEach((item: any) => {
list.push({
name: item.hgt,
lnglat: [Number((Number(item.lon) / 600000).toFixed(6)), Number((Number(item.lat) / 600000).toFixed(6))]
});
});
this.mapList = list;
this.addressItems = [...res.enclosureDataAppTrack];
if (this.addressItems && this.addressItems.length > 0) {
this.addressItems.forEach(item => {
item.vinOutTime = item.vinOutTime ? this.getLocalTime(item.gtm) : '';
item.cityName = item.appAdress;
});
}
}
});
}
getLocalTime(time: any) {
return format(new Date(parseInt(time)), 'yyyy-MM-dd HH:mm:ss');
}
}

View File

@ -6,17 +6,20 @@ import { BaseService } from '@shared';
})
export class ReportingService extends BaseService {
$api_get_order_reporting_page = `/api/sdc/regulation/list/page`; // 订单上报列表
$api_get_order_reporting_page = `/api/sdc/regulation/list/queryPage`; // 订单上报-列表
$api_upload_order_reporting = `/api/sdc/regulation/push`; // 上传订单上报
$api_recall_order_reporting = `/api/sdc/regulation/withdraw`; // 撤回上传订单上报
$api_async_export_order_reporting_list = ``; // 导出订单上报
$api_get_upload_setting = `/api/sdc/regulation/getPushConfig`; // 获取上传设置
$api_upload_setting_save = `/api/sdc/regulation/setPushConfig`; // 保存上传设置
$api_get_order_valid_result = `/api/sdc/regulation/queryPage/checkRes`;//订单上报-校验结果
$api_update_order_data = `/api/sdc/regulation/renewalOrderById`;//订单批量更新订单数据
$api_get_fund_reporting_page = `/api/fcc/fundUploadHead/list/page`; // 资金上报列表
$api_fund_reporting_upload = `/api/fcc/fundUploadHead/uploadFundNumber`; // 资金批量上传
$api_fund_reporting_recall = `/api/fcc/fundUploadHead/recallUploadFundNumber`; //资金批量撤回
$api_get_fund_valid_result = `/api/fcc/capitalFieldCheck/getCapitalFieldCheckList`; // 查询资金校验表
$api_update_fund_data = `/api/fcc/fundUploadHead/updateUploadFundNumber`;//资金批量更新数据
constructor(public injector: Injector) {

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2021-12-27 10:30:56
* @LastEditors : Shiming
* @LastEditTime : 2022-04-07 09:30:16
* @LastEditTime : 2022-04-07 15:07:27
* @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\services\\data.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -82,6 +82,8 @@ export class DataService extends BaseService {
$api_getTradingTrend = `/api/sdc/reportDataLargeScreen/getTradingTrend`;
// 数据大屏-交易额(今日,本月,累计)
$api_getTransactionAmount = `/api/sdc/reportDataLargeScreen/getTransactionAmount`;
// 数据大屏-交易分布
$api_getTransactionDistribution = `/api/sdc/reportDataLargeScreen/getTransactionDistribution`;