效果:
-
<template>
-
<div class="wrapper">
-
<Row v-for="(items, index) in secondeData" :key="index">
-
<Col span="12" v-for="m in items" :key="m">
-
<div class="chart" :ref="m.targetName" style="height: 400px;margin: 10px;box-shadow: 0 0 8px"></div>
-
</Col>
-
</Row>
-
</div>
-
</template>
-
<script>
-
var appName='';
-
//引入Echarts主模块
-
let echarts=require('echarts/lib/echarts');
-
//引入柱状图
-
require('echarts/lib/chart/bar');
-
//引入圆饼图
-
require('echarts/lib/chart/pie');
-
//引入所需组件
-
require('echarts/lib/component/tooltip');
-
require('echarts/lib/component/legend');
-
-
import 'static/js/macarons.js'
-
export default {
-
-
data(){
-
return {
-
charts:{},
-
echartsData:[],
-
appCode:'',
-
appName:'',
-
monitorAlarmMessage:{
-
startAlarmTime:new Date(new Date().getTime()-600000),
-
endAlarmTime:new Date()
-
}
-
}
-
},
-
computed: {
-
// 计算属性的 getter
-
secondeData: function () {
-
let newData = [], c = this.echartsData.length % 2 == 0, l = c ? this.echartsData.length : this.echartsData.length - 1 ;
-
for (let i = 0; i < l; i = i+2) {
-
newData.push([this.echartsData[i], this.echartsData[i+1]]);
-
}
-
if(!c){
-
newData.push([this.echartsData[this.echartsData.length - 1]]);
-
}
-
return newData;
-
}
-
},
-
methods:{
-
setData(arrays){
-
let _this = this;
-
_this.echartsData = arrays;
-
_this.$nextTick(function () {
-
let newTargets = [];
-
for (let index = 0; index < arrays.length; index++) {
-
let item = arrays[index], doms = _this.$refs[item.targetName];
-
newTargets[index] = item.targetName;
-
if(!_this.charts[item.targetName]){
-
console.log("不存在,开始重新绘制div ->" + item.targetName);
-
_this.createChartOne(item.targetName, doms[0]);
-
}
-
_this.chartMonitorTargetUpdate(item.targetName, item);
-
}
-
for (const key in _this.charts) {
-
if (newTargets.indexOf(key) < 0) {
-
console.log("删除 ->" + key);
-
delete _this.charts[key];
-
}
-
}
-
})
-
},
-
showInfluxDBMonitorAlarmByAppCode(){
-
this.$http.post('/influxDBMonitorAnalyze/showInfluxDBMonitorAlarmByAppCode',{//查询请求接口
-
appName:this.appName,
-
appCode:this.appCode
-
}).then((res)=>{
-
//alert(JSON.stringify(res.data.data));
-
this.setData(res.data.data.filter(function(item){
-
return item != null;
-
}));
-
//this.echartsDataSize= this.echartsData.length;
-
console.log(this.echartsData);
-
}).catch((err)=>{
-
this.$Modal.error({ title: "请求失败", content: err });
-
})
-
},
-
createChartOne(targetName, ref){
-
//this.chartMonitorTarget=echarts.init(this.$refs.chartOne);
-
this.charts[targetName] = echarts.init(ref, 'macarons');
-
this.charts[targetName].setOption({
-
tooltip: {
-
trigger: 'axis'
-
},
-
grid:{
-
top:100,
-
bottom:40,
-
left:40,
-
right:45
-
},
-
xAxis: {
-
name:'时间', //坐标轴名称
-
type: 'category',
-
nameGap:15, //坐标轴名称与轴线之间的距离
-
nameRotate:0, //坐标轴名字旋转,角度值
-
boundaryGap: true,
-
data: [],
-
axisTick:{ //坐标轴刻度是否朝内,默认朝外。
-
length:5 //坐标轴刻度的长度。
-
},
-
axisLabel: {
-
interval:"auto",
-
rotate:30
-
}
-
},
-
yAxis: {
-
name:'', //坐标轴名称
-
type: 'value',
-
axisLabel: {
-
formatter: '{value}'
-
}
-
},
-
series: []
-
})
-
},
-
chartMonitorTargetUpdate(targetName, data){
-
this.charts[targetName].setOption({
-
title: {
-
text: targetName,
-
textStyle: {
-
fontWeight: 'bolder', //标题颜色
-
color: '#408829'
-
},
-
subtext: ''
-
},
-
legend: {
-
left:'center',
-
top:'30',
-
bottom:'auto',
-
orient:'horizontal',
-
data:data.legend.data
-
},
-
xAxis: {
-
data: data.xaxisData
-
},
-
series: data.influxDBMonitorAlarm.seriesList
-
});
-
},
-
test(){
-
var arrays = [], count = Math.round(Math.random()*10);
-
console.log("随机生成个数:" + count);
-
for (let index = 0; index < count; index++) {
-
//let count = Math.round(Math.random()*10);
-
let xaxis = [10];
-
for (let k = 0; k < 10; k++) {
-
xaxis[k] = "8:" + Math.round(Math.random()*60);
-
}
-
-
let datas = [4];
-
for (let j = 0; j < 4; j++) {
-
let is = [10];
-
for (let i = 0; i < 10; i++) {
-
is[i] = Math.round(Math.random()*100);
-
}
-
datas[j] = is;
-
}
-
arrays.push({
-
"legend": {
-
"data": ["基线值", "当前值", "基线上浮值", "基线下浮值"]
-
},
-
"targetName": "targetName" + index,
-
"appName": null,
-
"xaxisData": xaxis,
-
"influxDBMonitorAlarm": {
-
"seriesList": [{
-
"name": "基线值",
-
"type": "line",
-
"data": datas[3],
-
"markPoint": {
-
"data": [{
-
"type": "max",
-
"name": "最大值"
-
}, {
-
"type": "min",
-
"name": "最小值"
-
}]
-
}
-
}, {
-
"name": "当前值",
-
"type": "line",
-
"data": datas[0],
-
"markPoint": {
-
"data": [{
-
"type": "max",
-
"name": "最大值"
-
}, {
-
"type": "min",
-
"name": "最小值"
-
}]
-
}
-
}, {
-
"name": "基线上浮值",
-
"type": "line",
-
"data": datas[1],
-
"markPoint": {
-
"data": [{
-
"type": "max",
-
"name": "最大值"
-
}, {
-
"type": "min",
-
"name": "最小值"
-
}]
-
}
-
}, {
-
"name": "基线下浮值",
-
"type": "line",
-
"data": datas[2],
-
"markPoint": {
-
"data": [{
-
"type": "max",
-
"name": "最大值"
-
}, {
-
"type": "min",
-
"name": "最小值"
-
}]
-
}
-
}]
-
}
-
});
-
}
-
this.setData(arrays);
-
}
-
},
-
created(){
-
-
},
-
activated(){
-
let _this = this;
-
appName=_this.$route.query.appName
-
_this.appCode=_this.$route.query.appCode
-
_this.appName=_this.$route.query.appName
-
_this.showInfluxDBMonitorAlarmByAppCode();
-
// _this.test();
-
-
window.setInterval(function(){
-
_this.showInfluxDBMonitorAlarmByAppCode();
-
}, 5000);
-
},destroyed(){
-
-
}
-
-
}
-
</script>
-
<style lang="scss" scoped>//-----------------------------------------------------------css样式代码start
-
//编写样式
-
.ivu-form-item {
-
margin-bottom: 24px;
-
}
-
</style>
js:macarons.js
-
(function (root, factory) {
-
if (typeof define === 'function' && define.amd) {
-
// AMD. Register as an anonymous module.
-
define(['exports', 'echarts'], factory);
-
} else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
-
// CommonJS
-
factory(exports, require('echarts'));
-
} else {
-
// Browser globals
-
factory({}, root.echarts);
-
}
-
}(this, function (exports, echarts) {
-
var log = function (msg) {
-
if (typeof console !== 'undefined') {
-
console && console.error && console.error(msg);
-
}
-
};
-
if (!echarts) {
-
log('ECharts is not Loaded');
-
return;
-
}
-
-
var colorPalette = [
-
'#2ec7c9','#b6a2de','#5ab1ef','#ffb980','#d87a80',
-
'#8d98b3','#e5cf0d','#97b552','#95706d','#dc69aa',
-
'#07a2a4','#9a7fd1','#588dd5','#f5994e','#c05050',
-
'#59678c','#c9ab00','#7eb00a','#6f5553','#c14089'
-
];
-
-
-
var theme = {
-
color: colorPalette,
-
-
title: {
-
textStyle: {
-
fontWeight: 'normal',
-
color: '#008acd'
-
}
-
},
-
-
visualMap: {
-
itemWidth: 15,
-
color: ['#5ab1ef','#e0ffff']
-
},
-
-
toolbox: {
-
iconStyle: {
-
normal: {
-
borderColor: colorPalette[0]
-
}
-
}
-
},
-
-
tooltip: {
-
backgroundColor: 'rgba(50,50,50,0.5)',
-
axisPointer : {
-
type : 'line',
-
lineStyle : {
-
color: '#008acd'
-
},
-
crossStyle: {
-
color: '#008acd'
-
},
-
shadowStyle : {
-
color: 'rgba(200,200,200,0.2)'
-
}
-
}
-
},
-
-
dataZoom: {
-
dataBackgroundColor: '#efefff',
-
fillerColor: 'rgba(182,162,222,0.2)',
-
handleColor: '#008acd'
-
},
-
-
grid: {
-
borderColor: '#eee'
-
},
-
-
categoryAxis: {
-
axisLine: {
-
lineStyle: {
-
color: '#008acd'
-
}
-
},
-
splitLine: {
-
lineStyle: {
-
color: ['#eee']
-
}
-
}
-
},
-
-
valueAxis: {
-
axisLine: {
-
lineStyle: {
-
color: '#008acd'
-
}
-
},
-
splitArea : {
-
show : true,
-
areaStyle : {
-
color: ['rgba(250,250,250,0.1)','rgba(200,200,200,0.1)']
-
}
-
},
-
splitLine: {
-
lineStyle: {
-
color: ['#eee']
-
}
-
}
-
},
-
-
timeline : {
-
lineStyle : {
-
color : '#008acd'
-
},
-
controlStyle : {
-
normal : { color : '#008acd'},
-
emphasis : { color : '#008acd'}
-
},
-
symbol : 'emptyCircle',
-
symbolSize : 3
-
},
-
-
line: {
-
smooth : true,
-
symbol: 'emptyCircle',
-
symbolSize: 3
-
},
-
-
candlestick: {
-
itemStyle: {
-
normal: {
-
color: '#d87a80',
-
color0: '#2ec7c9',
-
lineStyle: {
-
color: '#d87a80',
-
color0: '#2ec7c9'
-
}
-
}
-
}
-
},
-
-
scatter: {
-
symbol: 'circle',
-
symbolSize: 4
-
},
-
-
map: {
-
label: {
-
normal: {
-
textStyle: {
-
color: '#d87a80'
-
}
-
}
-
},
-
itemStyle: {
-
normal: {
-
borderColor: '#eee',
-
areaColor: '#ddd'
-
},
-
emphasis: {
-
areaColor: '#fe994e'
-
}
-
}
-
},
-
-
graph: {
-
color: colorPalette
-
},
-
-
gauge : {
-
axisLine: {
-
lineStyle: {
-
color: [[0.2, '#2ec7c9'],[0.8, '#5ab1ef'],[1, '#d87a80']],
-
width: 10
-
}
-
},
-
axisTick: {
-
splitNumber: 10,
-
length :15,
-
lineStyle: {
-
color: 'auto'
-
}
-
},
-
splitLine: {
-
length :22,
-
lineStyle: {
-
color: 'auto'
-
}
-
},
-
pointer : {
-
width : 5
-
}
-
}
-
};
-
-
echarts.registerTheme('macarons', theme);
-
}));