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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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>