效果:
- <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);
- }));