You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

563 lines
18 KiB
Vue

<template>
<div style="display: flex;width:1680px;height: 250px">
<div style="display: block;width:50%;height: 250px">
<div style="border-bottom: #d5d8d9 solid 2px;height: 30px;width:90%;position: relative"><b style="font-size: 15px;">应收</b></div>
<div id="YSLine" style="width: 800px;height:220px" v-loading="feeloading" ></div>
</div>
<div style="display: block;width:50%;height: 250px">
<div style="border-bottom: #d5d8d9 solid 2px;height: 30px;width:90%;position: relative"><b style="font-size: 15px;">拆分准确</b></div>
<div id="divRightLine" style="width: 800px;height:220px" v-loading="loading" ></div>
</div>
</div>
<div style="display: flex;width:1680px;height: 250px">
<div style="display: block;width:50%;height: 250px">
<div style="border-bottom: #d5d8d9 solid 2px;height: 30px;width:90%;position: relative"><b style="font-size: 15px;">未拆分</b></div>
<div id="noDivLine" style="width: 800px;height:220px" v-loading="loading" ></div>
</div>
<div style="display: block;width:50%;height: 250px">
<div style="border-bottom: #d5d8d9 solid 2px;height: 30px;width:90%;position: relative"><b style="font-size: 15px;">未计费</b></div>
<div id="noFeeLine" style="width: 800px;height:220px" v-loading="loading" ></div>
</div>
</div>
<div style="display: flex;width:1680px;height: 250px">
<div style="display: block;width:50%;height: 250px">
<div style="border-bottom: #d5d8d9 solid 2px;height: 30px;width:90%;position: relative"><b style="font-size: 15px;">计费大于拆分</b></div>
<div id="lessDivLine" style="width: 800px;height:220px" v-loading="loading" ></div>
</div>
<div style="display: block;width:50%;height: 250px">
<div style="border-bottom: #d5d8d9 solid 2px;height: 30px;width:90%;position: relative"><b style="font-size: 15px;">计费小于拆分</b></div>
<div id="moreDivLine" style="width: 800px;height:220px" v-loading="loading" ></div>
</div>
</div>
</template>
<script>
import {ref } from 'vue';
import tool from '@/util/tool';
import {getDivDataList, getFeeTotal} from "@/util/api/api";
//import {getGantryPassDivStatList} from '../../../util/api/api.js'
var _this;
export default {
name: "echatsTotalLine",
data() {
return {
loading:ref(false),
feeloading:ref(false),
beginDate:"",
endDate:"",
dataType:"JT",
//dateTime:'2024-07-22'
}
},
methods: {
refreshData(beginDate,endDate,subcomno,roadno,stano){
this.loading=true;
this.feeloading=true;
this.queryStartTime= beginDate;
this.queryEndTime= endDate;
this.subcomno= subcomno;
this.roadno= roadno;
this.stano= stano;
var paramsObj={
"queryStartTime":beginDate,
"queryEndTime":endDate,
"subcomno":subcomno,
"roadno":roadno,
"stano":stano,
"isNoContainJm":"Y" //默认不包含减免的费用
}
getDivDataList(paramsObj).then(
res=>{
this.loading=false;
if (res.code > 0) {
let _data = res.data;
let dataX=[];
var dataRight = [];
var dataRightFlow = [];
var dataNoDiv = [];
var dataNoDivFlow = [];
var dataNoFee = [];
var dataNoFeeFlow = [];
var dataLessDiv = [];
var dataLessDivFee = [];
var dataLessDivFlow = [];
var dataMoreDiv = [];
var dataMoreDivFee = [];
var dataMoreDivFlow = [];
if(_data !==undefined ){
if (_data.length > 0) {
var _classdate="";
for(var k=0;k<_data.length;k++){
let divData=_data[k];
if(_classdate !== divData.classdate){
dataX.push(tool.formatDate(new Date(divData.classdate),"YYYY-MM-DD"));
_classdate=divData.classdate;
}
if(divData.status ==="1"){
dataRight.push(tool.NumRound(divData.fee));
dataRightFlow.push(divData.carcount);
}
if(divData.status ==="2"){//计费大于拆分
dataLessDiv.push(tool.NumRound(divData.fee));
dataLessDivFee.push(tool.NumRound(divData.divfee));
dataLessDivFlow.push(divData.carcount);
}
if(divData.status ==="3"){//计费小于拆分
dataMoreDiv.push(tool.NumRound(divData.fee));
dataMoreDivFee.push(tool.NumRound(divData.divfee));
dataMoreDivFlow.push(divData.carcount);
}
if(divData.status ==="4"){//未计费
dataNoFee.push(tool.NumRound(divData.divfee));
dataNoFeeFlow.push(divData.carcount);
}
if(divData.status ==="5"){//未拆分
dataNoDiv.push(tool.NumRound(divData.fee));
dataNoDivFlow.push(divData.carcount);
}
}
}
this.$nextTick(() => {
this.initOptionLine('divRightLine', dataX, dataRight, dataRightFlow);
this.initOptionLine('noDivLine', dataX, dataNoDiv, dataNoDivFlow);
this.initOptionLine('noFeeLine', dataX, dataNoFee, dataNoFeeFlow);
this.initOptionLineMoreLess('lessDivLine', dataX, dataLessDiv,dataLessDivFee, dataLessDivFlow);
this.initOptionLineMoreLess('moreDivLine', dataX, dataMoreDiv,dataMoreDivFee, dataMoreDivFlow);
})
}
}
}
)
getFeeTotal(paramsObj).then(
res=>{
this.feeloading=false;
if (res.code > 0) {
let _data = res.data;
if (_data.length > 0) {
let dataX=[];
var dataYS = [];
var dataYSFlow = [];
if(_data !==undefined ){
for(var k=0;k<_data.length;k++){
let divData=_data[k];
dataX.push(tool.formatDate(new Date(divData.classdate),"YYYY-MM-DD"));
dataYS.push(tool.NumRound(divData.fee));
dataYSFlow.push(divData.carcount);
}
}
this.$nextTick(() => {
this.initOptionLine('YSLine', dataX, dataYS, dataYSFlow);
})
}
}
}
)
},initOptionLine(divId,dataX,dataMoney,dataFlow) {
let myChart = this.$echarts.init(document.getElementById(divId))
// 绘制图表
this.option = {
title : {
text: '',
subtext: ''
},
tooltip : {
trigger: 'axis',
//position:['20px','20px']
},
legend: {
data:["流量(辆)","金额(元)"]
},
toolbox: {
show : true,
orient: 'vertical',
title : {
line : '折线图',
bar : '柱形图'
},
feature : {
mark : {show: true},
//垂直显示
//dataView : {show: true, readOnly: false},
magicType : {show: true,
title : {
line : '折线图',
bar : '柱形图'
},
type: ['line', 'bar']},
}
},
calculable : true,
xAxis :
{
type : 'category',
name:'日期',
nameTextStyle:{
lineHeight:30,
verticalAlign:'top'
},
boundaryGap : true,
axisTick: {
show: true,
alignWithLabel:true
},
axisLabel: { //设置x轴的文字
show:true,
interval:0,//使x轴横坐标全部显示
//rotate:45,
textStyle:{fontSize:10}
},
data : dataX
}, dataZoom: [{
type: 'slider',
show: true, //flase直接隐藏图形
xAxisIndex: [0],
backgroundColor:'rgb(233,236,238)',
handleColor:'rgba(147,145,145,0.81)',
fillerColor:'rgb(184,186,187)',
handleSize:30,//控制手柄大小
height:30,
left: '9%', //滚动条靠左侧的百分比
bottom: -5,
start: 0,//滚动条的起始位置
end: 110 //滚动条的截止位置按比例分割你的柱状图x轴长度
}],
yAxis :[
{
type : 'value',
axisLabel : {
formatter: '{value}'
},
show:false,
splitLine:{
show:true
},
lineStyle:{
color:'black',
type:'solid',
width:2
},
sync: true,
splitNumber:10,
position:'left'
},{
type : 'value',
axisLabel : {
formatter: '{value}'
},
show:false,
splitLine:{
show:true
},
lineStyle:{
color:'black',
type:'solid',
width:2
},
sync: true,
splitNumber:100,
position:'right'
}
],
series : [
{
name:'流量(辆)',
type:'line',
data:dataFlow,
label:{
show: true, // 显示标签
position: 'top', // 标签位置
formatter: '{c}' // 标签格式器,{c} 代表数据值
},
yAxisIndex:0
},{
name:'金额(元)',
type:'bar',
data:dataMoney,
label:{
show: true, // 显示标签
position: 'inside', // 标签位置
formatter: '{c}' // 标签格式器,{c} 代表数据值
},
yAxisIndex:1
}
]
};
myChart.setOption(this.option);
/*myChart.on('click', function(params) {
// 控制台打印数据的名称
_this.$emit("changeGantryCount",params.name);
});*/
},initOptionLineMoreLess(divId,dataX,dataMoney,dataFeeMoney,dataFlow) {
let myChart = this.$echarts.init(document.getElementById(divId))
// 绘制图表
this.option = {
title : {
text: '',
subtext: ''
},
tooltip : {
trigger: 'axis',
//position:['20px','20px']
},
legend: {
data:["流量(辆)","计费金额(元)","拆分金额(元)"]
},
toolbox: {
show : true,
orient: 'vertical',
title : {
line : '折线图',
bar : '柱形图'
},
feature : {
mark : {show: true},
//垂直显示
//dataView : {show: true, readOnly: false},
magicType : {show: true,
title : {
line : '折线图',
bar : '柱形图'
},
type: ['line', 'bar']},
}
},
calculable : true,
xAxis :
{
type : 'category',
name:'日期',
nameTextStyle:{
lineHeight:30,
verticalAlign:'top'
},
boundaryGap : true,
axisTick: {
show: true,
alignWithLabel:true
},
axisLabel: { //设置x轴的文字
show:true,
interval:0,//使x轴横坐标全部显示
//rotate:45,
textStyle:{fontSize:10}
},
data : dataX
}, dataZoom: [{
type: 'slider',
show: true, //flase直接隐藏图形
xAxisIndex: [0],
backgroundColor:'rgb(233,236,238)',
handleColor:'rgba(147,145,145,0.81)',
fillerColor:'rgb(184,186,187)',
handleSize:30,//控制手柄大小
height:30,
left: '9%', //滚动条靠左侧的百分比
bottom: -5,
start: 0,//滚动条的起始位置
end: 110 //滚动条的截止位置按比例分割你的柱状图x轴长度
}],
yAxis :[
{
type : 'value',
axisLabel : {
formatter: '{value}'
},
show:false,
splitLine:{
show:true
},
lineStyle:{
color:'black',
type:'solid',
width:2
},
sync: true,
splitNumber:10,
position:'left'
},{
type : 'value',
axisLabel : {
formatter: '{value}'
},
show:false,
splitLine:{
show:true
},
lineStyle:{
color:'black',
type:'solid',
width:2
},
sync: true,
splitNumber:100,
position:'right'
}
],
series : [
{
name:'流量(辆)',
type:'line',
data:dataFlow,
label:{
show: true, // 显示标签
position: 'top', // 标签位置
formatter: '{c}' // 标签格式器,{c} 代表数据值
},
yAxisIndex:0
},{
name:'计费金额(元)',
type:'bar',
data:dataMoney,
label:{
show: true, // 显示标签
position: 'inside', // 标签位置
formatter: '{c}' // 标签格式器,{c} 代表数据值
},
yAxisIndex:1
},{
name:'拆分金额(元)',
type:'bar',
data:dataFeeMoney,
label:{
show: true, // 显示标签
position: 'inside', // 标签位置
formatter: '{c}' // 标签格式器,{c} 代表数据值
},
yAxisIndex:1
}
]
};
myChart.setOption(this.option);
}
},mounted() {
_this=this;
/*
var paramsObj={
"beginDate":this.beginDate,
"endDate":this.endDate,
"dataType":this.dataType
}
getDivDataList(paramsObj).then(
res=>{
if (res.code > 0) {
let _data = res.data;
if (_data.length > 0) {
let dataX=[];
var dataYS = [];
var dataYSFlow = [];
var dataRight = [];
var dataRightFlow = [];
var dataNoDiv = [];
var dataNoDivFlow = [];
var dataNoFee = [];
var dataNoFeeFlow = [];
var dataLessDiv = [];
var dataLessDivFlow = [];
var dataMoreDiv = [];
var dataMoreDivFlow = [];
var dataYQ = [];
var dataYQFlow = [];
var dataJF = [];
var dataJFFlow = [];
if(_data !==undefined ){
for(var k=0;k<_data.length;k++){
dataX.push(tool.formatDate(new Date(_data[k].CLASSDATE),"YYYY-MM-DD"));
dataYS.push(tool.NumRound(_data[k].JTYSMONEY/10000));
dataYSFlow.push(_data[k].JTYSFLOW);
dataRight.push(tool.NumRound(_data[k].RIGHTMONEY /10000));
dataRightFlow.push(_data[k].RIGHTFLOW);
dataNoDiv.push(tool.NumRound(_data[k].NODIVMONEY/10000));
dataNoDivFlow.push(_data[k].NODIVFLOW);
dataNoFee.push(tool.NumRound(_data[k].NOFEEMONEY/10000));
dataNoFeeFlow.push(_data[k].NOFEEFLOW);
dataLessDiv.push(tool.NumRound(_data[k].LESSDIVMONEY/10000));
dataLessDivFlow.push(_data[k].LESSDIVFLOW);
dataMoreDiv.push(tool.NumRound(_data[k].MOREDIVMONEY/10000));
dataMoreDivFlow.push(_data[k].MOREDIVFLOW);
dataYQ.push(tool.NumRound(_data[k].YQMONEY/10000));
dataYQFlow.push(_data[k].YQFLOW);
dataJF.push(tool.NumRound(_data[k].JFMONEY/10000));
dataJFFlow.push(_data[k].JFFLOW);
}
}
this.initOptionLine('YSLine',dataX,dataYS,dataYSFlow);
this.initOptionLine('divRightLine',dataX,dataRight,dataRightFlow);
this.initOptionLine('noDivLine',dataX,dataNoDiv,dataNoDivFlow);
this.initOptionLine('noFeeLine',dataX,dataNoFee,dataNoFeeFlow);
this.initOptionLine('lessDivLine',dataX,dataLessDiv,dataLessDivFlow);
this.initOptionLine('moreDivLine',dataX,dataMoreDiv,dataMoreDivFlow);
this.initOptionLine('yqLine',dataX,dataYQ,dataYQFlow);
this.initOptionLine('jfLine',dataX,dataJF,dataJFFlow);
}
_this.loading=false;
}
}
)*/
}
}
/*function formatDate(dateString,format) {
const date = new Date(dateString);
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
let hour=date.getHours();
let minute=date.getMinutes();
let second=date.getSeconds();
if(hour<10){
hour ="0"+hour;
}
if(minute<10){
minute ="0"+minute;
}
if(second<10){
second ="0"+second;
}
const milSecond=date.getMilliseconds();
if(format=="YYYY-MM-DD"){
return `${year}-${month}-${day}`;
}else if(format=="YYYY-MM-DD HH:MM:SS"){
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}else if(format=="YYYY-MM-DD HH:MM:SS:SSS"){
return `${year}-${month}-${day} ${hour}:${minute}:${second}:${milSecond}`;
}else if(format=="HH:MM:SS"){
return `${hour}:${minute}:${second}:${milSecond}`;
}
return "";
}*/
</script>
<style>
</style>