Showing
1 changed file
with
109 additions
and
59 deletions
| @@ -10,7 +10,7 @@ | @@ -10,7 +10,7 @@ | ||
| 10 | :showOkBtn="false" | 10 | :showOkBtn="false" |
| 11 | > | 11 | > |
| 12 | <div class="wrapper"> | 12 | <div class="wrapper"> |
| 13 | - <div class="inner item" v-for="(item, index) in chartData" :key="index"> | 13 | + <div class="inner item" v-for="(item, index) in initChartData" :key="index"> |
| 14 | <p style="display: none">{{ item }}</p> | 14 | <p style="display: none">{{ item }}</p> |
| 15 | <div :id="`chart${index}`" :style="{ height, width }"></div> | 15 | <div :id="`chart${index}`" :style="{ height, width }"></div> |
| 16 | </div> | 16 | </div> |
| @@ -22,6 +22,8 @@ | @@ -22,6 +22,8 @@ | ||
| 22 | import { ref, PropType, nextTick } from 'vue'; | 22 | import { ref, PropType, nextTick } from 'vue'; |
| 23 | import { BasicModal, useModalInner } from '/@/components/Modal'; | 23 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
| 24 | import * as echarts from 'echarts'; | 24 | import * as echarts from 'echarts'; |
| 25 | + import { exportViewChartApi } from '/@/api/export/exportManager'; | ||
| 26 | + import moment from 'moment'; | ||
| 25 | 27 | ||
| 26 | defineProps({ | 28 | defineProps({ |
| 27 | width: { | 29 | width: { |
| @@ -34,72 +36,120 @@ | @@ -34,72 +36,120 @@ | ||
| 34 | }, | 36 | }, |
| 35 | }); | 37 | }); |
| 36 | defineEmits(['register']); | 38 | defineEmits(['register']); |
| 37 | - | ||
| 38 | const heightNum = ref(800); | 39 | const heightNum = ref(800); |
| 39 | - const chartData = ref([1, 2, 3, 4]); | ||
| 40 | - const [register] = useModalInner((data) => { | ||
| 41 | - console.log(data); | ||
| 42 | - //TODO待服务端返回值 | ||
| 43 | - nextTick(() => { | ||
| 44 | - chartData.value.forEach((_, index) => { | ||
| 45 | - let myChart = echarts.init(document.getElementById(`chart${index}`) as HTMLElement); | ||
| 46 | - let myOption = { | ||
| 47 | - title: { | ||
| 48 | - text: '报表趋势图', | ||
| 49 | - subtext: `图${index + 1}`, | ||
| 50 | - left: 'left', | ||
| 51 | - }, | ||
| 52 | - tooltip: { | ||
| 53 | - trigger: 'axis', | ||
| 54 | - }, | ||
| 55 | - legend: { | ||
| 56 | - data: ['CO', 'CO2', 'Temp'], | ||
| 57 | - top: '20px', | ||
| 58 | - }, | ||
| 59 | - toolbox: {}, | ||
| 60 | - grid: { | ||
| 61 | - left: '3%', | ||
| 62 | - right: '4%', | ||
| 63 | - bottom: '3%', | ||
| 64 | - containLabel: true, | ||
| 65 | - }, | ||
| 66 | - xAxis: { | ||
| 67 | - type: 'category', | ||
| 68 | - data: ['1', '2', '3', '4', '5', '6', '7'], | ||
| 69 | - boundaryGap: false, | ||
| 70 | - }, | ||
| 71 | - yAxis: { | ||
| 72 | - type: 'value', | ||
| 73 | - boundaryGap: false, | ||
| 74 | - }, | ||
| 75 | - series: [ | ||
| 76 | - { | ||
| 77 | - name: 'CO', | ||
| 78 | - type: 'line', | ||
| 79 | - stack: 'Total', | ||
| 80 | - data: [150, 230, 224, 218, 135, 147, 260], | ||
| 81 | - }, | ||
| 82 | - { | ||
| 83 | - name: 'CO2', | ||
| 84 | - type: 'line', | ||
| 85 | - stack: 'Total', | ||
| 86 | - data: [15, 23, 22, 28, 15, 17, 20], | ||
| 87 | - }, | 40 | + const getItem: any = ref([]); |
| 41 | + const initChartData: any = ref([]); | ||
| 42 | + //生成随机颜色 | ||
| 43 | + let getRandomColor = function () { | ||
| 44 | + return ( | ||
| 45 | + 'rgb(' + | ||
| 46 | + Math.round(Math.random() * 255) + | ||
| 47 | + ',' + | ||
| 48 | + Math.round(Math.random() * 255) + | ||
| 49 | + ',' + | ||
| 50 | + Math.round(Math.random() * 10) + | ||
| 51 | + ')' | ||
| 52 | + ); | ||
| 53 | + }; | ||
| 54 | + const [register, { setModalProps }] = useModalInner(async (data) => { | ||
| 55 | + setModalProps({ loading: true }); | ||
| 56 | + try { | ||
| 57 | + const entityId = data.record.executeCondition?.executeAttributes.map((m) => m?.device); | ||
| 58 | + let key = data.record.executeCondition?.executeAttributes.map((m) => m?.attributes); | ||
| 59 | + let params: any = {}; | ||
| 60 | + params = { | ||
| 61 | + ...data.record.executeCondition?.executeCondition, | ||
| 62 | + ...{ | ||
| 63 | + keys: key.length !== 0 ? key.join(',') : '', | ||
| 64 | + }, | ||
| 65 | + }; | ||
| 66 | + const result = await exportViewChartApi(entityId[0], params); | ||
| 67 | + getItem.value = Object.entries(result).map((item) => { | ||
| 68 | + const [attr, val] = item; | ||
| 69 | + return { attr, val }; | ||
| 70 | + }); | ||
| 71 | + //服务端返回值 | ||
| 72 | + initChartData.value = getItem.value.map((item): any => { | ||
| 73 | + const seriesData = item.val.map((m1) => Number(m1.value)); | ||
| 74 | + return { | ||
| 75 | + attr: item.attr, | ||
| 76 | + lengendData: [item.attr], | ||
| 77 | + xAxisData: item.val.map((m) => moment(m.ts).format('YYYY-MM-DD HH:mm:ss')), | ||
| 78 | + seriesData: [ | ||
| 88 | { | 79 | { |
| 89 | - name: 'Temp', | 80 | + name: item.attr, |
| 90 | type: 'line', | 81 | type: 'line', |
| 91 | - stack: 'Total', | ||
| 92 | - data: [15, 23, 22, 28, 15, 17, 20], | 82 | + data: seriesData, |
| 83 | + lineStyle: { | ||
| 84 | + color: getRandomColor(), | ||
| 85 | + }, | ||
| 93 | }, | 86 | }, |
| 94 | ], | 87 | ], |
| 95 | }; | 88 | }; |
| 96 | - myChart.setOption(myOption); | ||
| 97 | - //自适应 | ||
| 98 | - window.addEventListener('resize', () => { | ||
| 99 | - myChart.resize(); | 89 | + }); |
| 90 | + nextTick(() => { | ||
| 91 | + initChartData.value.forEach((item, index) => { | ||
| 92 | + let myChart = echarts.init(document.getElementById(`chart${index}`) as HTMLElement); | ||
| 93 | + let myOption = { | ||
| 94 | + title: { | ||
| 95 | + text: `${item.attr}趋势图`, | ||
| 96 | + subtext: `${item.attr}`, | ||
| 97 | + left: 'left', | ||
| 98 | + }, | ||
| 99 | + tooltip: { | ||
| 100 | + trigger: 'axis', | ||
| 101 | + }, | ||
| 102 | + legend: { | ||
| 103 | + data: item.lengendData, | ||
| 104 | + top: '20px', | ||
| 105 | + }, | ||
| 106 | + toolbox: {}, | ||
| 107 | + grid: { | ||
| 108 | + left: '3%', | ||
| 109 | + right: '4%', | ||
| 110 | + bottom: '3%', | ||
| 111 | + containLabel: true, | ||
| 112 | + }, | ||
| 113 | + dataZoom: [ | ||
| 114 | + { | ||
| 115 | + type: 'slider', | ||
| 116 | + show: true, | ||
| 117 | + start: 0, | ||
| 118 | + end: 30, | ||
| 119 | + xAxisIndex: [0], | ||
| 120 | + }, | ||
| 121 | + ], | ||
| 122 | + xAxis: { | ||
| 123 | + type: 'category', | ||
| 124 | + data: item.xAxisData, | ||
| 125 | + boundaryGap: false, | ||
| 126 | + axisPointer: { type: 'shadow' }, | ||
| 127 | + axisLabel: { | ||
| 128 | + color: '#333', | ||
| 129 | + // 让x轴文字方向为竖向 | ||
| 130 | + interval: 0, | ||
| 131 | + rotate: 90, | ||
| 132 | + // formatter: function (value) { | ||
| 133 | + // return value.split('').join('\n'); | ||
| 134 | + // }, | ||
| 135 | + }, | ||
| 136 | + }, | ||
| 137 | + yAxis: { | ||
| 138 | + type: 'value', | ||
| 139 | + boundaryGap: false, | ||
| 140 | + }, | ||
| 141 | + series: item.seriesData, | ||
| 142 | + }; | ||
| 143 | + myChart.setOption(myOption); | ||
| 144 | + //自适应 | ||
| 145 | + window.addEventListener('resize', () => { | ||
| 146 | + myChart.resize(); | ||
| 147 | + }); | ||
| 100 | }); | 148 | }); |
| 101 | }); | 149 | }); |
| 102 | - }); | 150 | + } finally { |
| 151 | + setModalProps({ loading: false }); | ||
| 152 | + } | ||
| 103 | }); | 153 | }); |
| 104 | </script> | 154 | </script> |
| 105 | <style lang="less" scoped> | 155 | <style lang="less" scoped> |