这里写自定义目录标题
1筛选出数组中的最大值
function calMax(arr) {
var max = arr[0];
for (var i = 1; i < arr.length; i++) { // 求出一组数组中的最大值
if (max < arr[i]) {
max = arr[i];
}
}
var maxint = Math.ceil(max); //向上取整
var maxval = maxint + 1; // 最终设置的最大值+1是为了当所有返回数据为0时保证y轴有最大值1
return maxval; // 输出最大值
}
因为我的echarts图表是循环得来的,只有其中一个有双Y轴,所以做了Y轴判断,echarts是在vue中使用的,鉴于VUE使用还不是很熟练,暂时是在option上做的判断
这是echarts图表的图片
后台返回图表格式
获取返回最大值
//分别取各个电流电压温度的最大值,因为是循环所以需要判断
var BCurr = that.data.label == '电流'? calMax(that.data.dataB.map(item => {return item.bphaseCurr})):""
var ACurr = that.data.label == '电流'? calMax(that.data.dataA.map(item => {return item.aphaseCurr})):""
var CCurr = that.data.label == '电流'? calMax(that.data.dataC.map(item => {return item.cphaseCurr})):""
var BVolt = that.data.label == '电压'?calMax(that.data.dataB.map(item => {return item.bphaseVolt})):""
var AVolt = that.data.label == '电压'?calMax(that.data.dataA.map(item => {return item.aphaseVolt})):""
var CVolt = that.data.label == '电压'?calMax(that.data.dataC.map(item => {return item.cphaseVolt})):""
var ATemp = that.data.label == '温度'?calMax(that.data.dataA.map(item => {return item.aphaseTemp})):""
var BTemp = that.data.label == '温度'?calMax(that.data.dataB.map(item => {return item.bphaseTemp})):""
var CTemp = that.data.label == '温度'?calMax(that.data.dataC.map(item => {return item.cphaseTemp})):""
var boxTemp = that.data.label == '温度'?calMax(that.data.dataD.map(item => {return item.boxTemp})):""
//将各个电流电压温度的最大值封装成一个数组
var newVoltMaxl = [];
newVoltMaxl.push(BVolt,AVolt,CVolt)
var newCurrMaxl = [];
newCurrMaxl.push(BCurr,ACurr,CCurr)
var newTempMaxl = [];
newTempMaxl.push(ATemp,BTemp,CTemp,boxTemp)
//取新数组的最大值
var CurrMax = calMax(newCurrMaxl)
var VoltMax = calMax(newVoltMaxl)
var Temp = calMax(newTempMaxl)
完整代码:
<script>
var echarts = require('echarts');
var moment = require('moment');
export default {
name: "lineChart",
props: ['data'],
data(){
return {
}
},
mounted(){
this.getEchart()
},
methods: {
getEchart(){
var myChart = echarts.init(this.$refs.chart);
var that = this;
function calMax(arr) {
var max = arr[0];
for (var i = 1; i < arr.length; i++) { // 求出一组数组中的最大值
if (max < arr[i]) {
max = arr[i];
}
}
var maxint = Math.ceil(max); //向上取整
var maxval = maxint + 1; // 最终设置的最大值+1是为了当所有返回数据为0时保证y轴有最大值1
return maxval; // 输出最大值
}
//分别取各个电流电压温度的最大值,因为是循环所以需要判断
var BCurr = that.data.label == '电流'? calMax(that.data.dataB.map(item => {return item.bphaseCurr})):""
var ACurr = that.data.label == '电流'? calMax(that.data.dataA.map(item => {return item.aphaseCurr})):""
var CCurr = that.data.label == '电流'? calMax(that.data.dataC.map(item => {return item.cphaseCurr})):""
var BVolt = that.data.label == '电压'?calMax(that.data.dataB.map(item => {return item.bphaseVolt})):""
var AVolt = that.data.label == '电压'?calMax(that.data.dataA.map(item => {return item.aphaseVolt})):""
var CVolt = that.data.label == '电压'?calMax(that.data.dataC.map(item => {return item.cphaseVolt})):""
var ATemp = that.data.label == '温度'?calMax(that.data.dataA.map(item => {return item.aphaseTemp})):""
var BTemp = that.data.label == '温度'?calMax(that.data.dataB.map(item => {return item.bphaseTemp})):""
var CTemp = that.data.label == '温度'?calMax(that.data.dataC.map(item => {return item.cphaseTemp})):""
var boxTemp = that.data.label == '温度'?calMax(that.data.dataD.map(item => {return item.boxTemp})):""
//将各个电流电压温度的最大值封装成一个数组
var newVoltMaxl = [];
newVoltMaxl.push(BVolt,AVolt,CVolt)
var newCurrMaxl = [];
newCurrMaxl.push(BCurr,ACurr,CCurr)
var newTempMaxl = [];
newTempMaxl.push(ATemp,BTemp,CTemp,boxTemp)
//取新数组的最大值
var CurrMax = calMax(newCurrMaxl)
var VoltMax = calMax(newVoltMaxl)
var Temp = calMax(newTempMaxl)
let option = {
title: {
text: that.data.label + '趋势变化图',
subtext:that.data.label == '电流'?'额定'+ that.data.label+':' + that.data.aphaseCurrThr.aphaseCurrThr+'A '+' 剩余电流阀值:'+that.data.aftercurrentThr.aftercurrentThr+'mA' : (that.data.label == '电压'? '额定'+that.data.label + ':220A' : that.data.label+ '阀值:'+that.data.aphaseTempThr.aphaseTempThr+'℃'+' 箱体温度阈值:'+that.data.boxTempThr.boxTempThr+'℃')
},
tooltip: {
trigger: 'axis'
},
legend: {
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '15%',
containLabel: true
},
dataZoom: [{
type: 'inside'
}, {
type: 'slider',
bottom: 10,
}],
xAxis: {
type: 'category',
boundaryGap: false,
data: that.data.dataA.map(item => {
return item.createTime
})
},
yAxis: [{
type: 'value',
axisLabel:{
formatter:that.data.label == '电流'?'{value}A' : "{value}"
},
min: 0,
max:that.data.label == '电流'? CurrMax: that.data.label == '电压'? VoltMax: Temp, // 计算最大值
interval:that.data.label == '电流'? (CurrMax-0)/5 : that.data.label == '电压'? (VoltMax-0)/5:( Temp-0)/5 // 平均分为5份
},
{
type: 'value',
name:that.data.data ? "剩余电流":"",
axisLine: {
show: false,
},
axisTick:{
show:false
},
axisLabel:{
formatter:'{value}mA'
},
min: 0,
max: that.data.data ? calMax(that.data.data.map(item => {return item.aftercurrent})) : "", // 计算最大值
interval:that.data.data ? (calMax(that.data.data.map(item => {return item.aftercurrent}))-0)/5 : "" // 平均分为5份
}
],
series: [
{
name: 'A相'+that.data.label,
yAxisIndex:0,
type: 'line',
symbol:'diamond',
symbolSize: 7,
itemStyle: {
normal:{
color: '#F7A35C',
lineStyle:{
color: '#F7A35C',
}
}},
data: that.data.label == '温度'? that.data.dataA.map(item => {return item.aphaseTemp}) : (that.data.label == '电压'? that.data.dataA.map(item => {return item.aphaseVolt}) : that.data.dataA.map(item => {return item.aphaseCurr}) )
},
{
name: 'B相'+that.data.label,
type: 'line',
symbol:'triangle',
symbolSize: 7,
itemStyle: {
normal:{
color: 'green',
lineStyle:{
color: 'green',
}
}
},
yAxisIndex:0,
data: that.data.label == '温度'? that.data.dataB.map(item => {return item.bphaseTemp}) :(that.data.label == '电压'? that.data.dataB.map(item => {return item.bphaseVolt}) : that.data.dataB.map(item => {return item.bphaseCurr}) )
},
{
name: 'C相'+that.data.label,
type: 'line',
symbol:'circle',
symbolSize: 6,
itemStyle: {
normal:{
color: 'red',
lineStyle:{
color: 'red',
}
}
},
yAxisIndex:0,
data:that.data.label == '温度'? that.data.dataC.map(item => {return item.cphaseTemp}) : (that.data.label == '电压'? that.data.dataC.map(item => {return item.cphaseVolt}) : that.data.dataC.map(item => {return item.cphaseCurr}) )
},
{
// name: '箱体'+that.data.label,
name: that.data.dataD ? '箱体' + that.data.label : that.data.data ? '剩余' + that.data.label :'' ,
type: 'line',
symbol:'rectangle',
symbolSize: 6,
itemStyle: {
normal:{
color: 'blue',
lineStyle:{
color: 'blue',
}
}
},
yAxisIndex:that.data.data ? 1:0,
data: that.data.label == '温度'? that.data.dataD.map(item => {return item.boxTemp}) : (that.data.label == '电流'? that.data.data.map(item => {return item.aftercurrent}) : '')
},
]
};
myChart.setOption(option);
}
}
}
</script>
html代码:
<template>
<div class="chart_inline_wrapper" ref="chart"></div>
</template>
父组件完整代码
<template>
<div class="history_chart_panel">
<base-empty-data v-if="realTimesList.current.length == 0"></base-empty-data>
<div class="chart_item" v-for="(item, index) in realTimesList.current" :key="index" v-if="realTimesList.current.length > 0">
<div class="label_conside">
<span class="label">{{item.label}}</span>
</div>
<div class="chart_wrap">
<linechart label_name="有功功率" :data="item"></linechart >
</div>
</div>
</div>
</template>
<script>
import linechart from './LineChart.vue'
export default {
components: {
linechart
},
data(){
return {
}
},
computed: {
realTimesList(){
let store = this.$store.state.historyStore;
if( store.historyLoading ) return;
let { historyDetail } = store;
return historyDetail
},
},
methods :{
fetchPage(page){
let param = this.$store.state.historyStore.historyParam;;
param.page = page;
this.$store.commit('historyParam', param)
this.$store.dispatch('historyFromService', param)
},
}
}
</script>
<style lang="scss">
.history_chart_panel{
// margin-top: 16px;
background: white;
padding: 30px 0;
.chart_item{
width: 94%;
height: 380px;
display: flex;
margin: 0 3% 30px 3%;
box-shadow: 0 0 5px rgba(0,0,0,0.3);
border-radius: 8px;
padding: 10px;
box-sizing: border-box;
.label_conside{
width: 5%;
max-width: 80px;
float: left;
text-align: center;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
.label{
width: 22px;
background: #ffb607;
color: white;
border-radius: 20px;
text-align: center;
padding: 20px 0
}
}
.chart_wrap{
float: left;
height: 100%;
flex: 1;
margin-right: 20px;
}
}
}
#main{
box-shadow: 0 0 5px rgba(0,0,0,0.3);
height: 380px;
margin-bottom: 20px;
background: #ffffff;
border-radius: 8px;
}
</style>