664 lines
17 KiB
Vue
664 lines
17 KiB
Vue
<template>
|
||
<div class="app-container print-work">
|
||
<div class="level-title">
|
||
<h1>{{ info.EQUIPMENTNAME }}:实时监测数据 {{ info.OPERATTIME }}</h1>
|
||
</div>
|
||
<div style="display: flex">
|
||
<div v-if="info.WINDDIRECTION != '-'" id="main4"/>
|
||
<div v-if="info.TEMPERATURE != '-'" id="main5"/>
|
||
<div v-if="info.WINDSPEED != '-'" id="main6"/>
|
||
</div>
|
||
<table class="table-ui">
|
||
<tr>
|
||
<td class="bbg-transparent">风速监测</td>
|
||
<td>{{ info.WINDSPEED }}</td>
|
||
<td class="bbg-transparent">风向监测</td>
|
||
<td>{{ info.WINDDIRECTION }}</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="bbg-transparent">温度监测</td>
|
||
<td>{{ info.TEMPERATURE }}</td>
|
||
<td class="bbg-transparent">湿度监测</td>
|
||
<td>{{ info.COUNTARCHIVE }}</td>
|
||
</tr>
|
||
</table>
|
||
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { requestFN } from '@/utils/request'
|
||
import * as echarts from 'echarts'
|
||
|
||
let myChart4 = null
|
||
let myChart5 = null
|
||
let myChart6 = null
|
||
export default {
|
||
props: {
|
||
id: {
|
||
type: String,
|
||
default() {
|
||
return ''
|
||
}
|
||
},
|
||
type: {
|
||
type: String,
|
||
default() {
|
||
return ''
|
||
}
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
timer: '',
|
||
config: config,
|
||
info: {}
|
||
}
|
||
},
|
||
mounted() {
|
||
window.onresize = function() {
|
||
myChart4 && myChart4.resize()
|
||
myChart5 && myChart5.resize()
|
||
myChart6 && myChart6.resize()
|
||
}
|
||
this.getMeteorologicalinfo()
|
||
this.start()
|
||
},
|
||
beforeDestroy() {
|
||
myChart4 = null
|
||
myChart5 = null
|
||
myChart6 = null
|
||
console.log('定时器关闭')
|
||
clearInterval(this.timer)
|
||
},
|
||
|
||
methods: {
|
||
// 定时器
|
||
start() {
|
||
console.log('定时器开启')
|
||
this.timer = setInterval(this.getMeteorologicalinfo, 10000) // 注意: 第一个参数为方法名的时候不要加括号;
|
||
},
|
||
over() {
|
||
clearInterval(this.timer)
|
||
},
|
||
getMeteorologicalinfo() {
|
||
requestFN(
|
||
'/map/getById',
|
||
{
|
||
id: this.id,
|
||
TYPE: this.type
|
||
}
|
||
).then((data) => {
|
||
this.listLoading = false
|
||
this.info = data.pd
|
||
this.info.COUNTARCHIVE = data.pd.COUNTARCHIVE || '-'
|
||
this.info.TEMPERATURE = data.pd.TEMPERATURE || '-'
|
||
this.info.WINDSPEED = data.pd.WINDSPEED || '-'
|
||
this.info.WINDDIRECTION = data.pd.WINDDIRECTION || '-'
|
||
this.$nextTick(() => {
|
||
if (data.pd.WINDDIRECTION != '-') {
|
||
console.log(this.info.WINDDIRECTION)
|
||
this.initEcharts1(data)
|
||
this.info.WINDDIRECTION = this.calculateWindDirection(this.info.WINDDIRECTION)
|
||
console.log(this.info.WINDDIRECTION)
|
||
}
|
||
if (data.pd.TEMPERATURE != '-') {
|
||
this.initEcharts2(data)
|
||
}
|
||
if (data.pd.WINDSPEED != '-') {
|
||
this.initEcharts3(data)
|
||
}
|
||
})
|
||
}).catch((e) => {
|
||
})
|
||
},
|
||
initEcharts1(data) {
|
||
myChart4 = echarts.init(document.querySelector('#main4'))
|
||
var option = {
|
||
title: {
|
||
// x: "center",
|
||
top: 0,
|
||
text: '风向监测',
|
||
textStyle: {
|
||
fontWeight: 'normal',
|
||
fontSize: 16,
|
||
color: '#fff'
|
||
}
|
||
},
|
||
series: {
|
||
name: '',
|
||
type: 'gauge',
|
||
min: 0,
|
||
max: 360,
|
||
startAngle: 90,
|
||
endAngle: -269.9999,
|
||
radius: '55%',
|
||
splitNumber: 8,
|
||
axisLine: {
|
||
lineStyle: {
|
||
width: 15,
|
||
shadowBlur: 0,
|
||
color: [
|
||
[0.25, '#DDBD4D'],
|
||
[0.5, '#E43F3D'],
|
||
[0.75, '#7CBB55'],
|
||
[1, '#9CD6CE']
|
||
]
|
||
}
|
||
},
|
||
axisTick: {
|
||
show: true,
|
||
splitNumber: 5,
|
||
lineStyle: {
|
||
color: '#fff'
|
||
}
|
||
},
|
||
splitLine: {
|
||
length: 10,
|
||
lineStyle: {
|
||
width: 5,
|
||
color: '#fff'
|
||
}
|
||
},
|
||
axisLabel: {
|
||
formatter: function(e) {
|
||
switch (e + '') {
|
||
case '0':
|
||
return '北'
|
||
case '45':
|
||
return '东北'
|
||
case '135':
|
||
return '东南'
|
||
case '225':
|
||
return '西南'
|
||
case '315':
|
||
return '西北'
|
||
case '360':
|
||
return '北'
|
||
case '180':
|
||
return '南'
|
||
case '90':
|
||
return '东'
|
||
case '270':
|
||
return '西'
|
||
default:
|
||
return e
|
||
}
|
||
},
|
||
distance: -60,
|
||
textStyle: {
|
||
fontSize: 14,
|
||
fontWeight: '',
|
||
color: '#fff'
|
||
}
|
||
},
|
||
pointer: {
|
||
show: true,
|
||
length: '80%',
|
||
width: 5
|
||
},
|
||
detail: {
|
||
formatter: function(param) {
|
||
var level = ''
|
||
if (param > 0 && param < 90) {
|
||
level = '东北'
|
||
} else if (param > 90 && param < 180) {
|
||
level = '东南'
|
||
} else if (param > 180 && param < 270) {
|
||
level = '西南'
|
||
} else if (param > 270 && param < 360) {
|
||
level = '西北'
|
||
} else if (param == 360) {
|
||
level = '正北'
|
||
} else if (param == 270) {
|
||
level = '正西'
|
||
} else if (param == 90) {
|
||
level = '正东'
|
||
} else if (param == 180) {
|
||
level = '正南'
|
||
}
|
||
return '当前风向:' + level + '(' + param + '°)'
|
||
},
|
||
offsetCenter: [0, 150],
|
||
textStyle: {
|
||
fontSize: 14,
|
||
color: '#fff'
|
||
}
|
||
},
|
||
data: [data.pd.WINDDIRECTION]
|
||
}
|
||
}
|
||
myChart4.setOption(option)
|
||
},
|
||
initEcharts2(data) {
|
||
myChart5 = echarts.init(document.querySelector('#main5'))
|
||
var value = data.pd.TEMPERATURE
|
||
var kd = []
|
||
// 刻度使用柱状图模拟,短设置3,长的设置5;构造一个数据
|
||
for (var i = 0, len = 130; i <= len; i++) {
|
||
if (i > 100 || i < 30) {
|
||
kd.push('0')
|
||
} else {
|
||
if (i % 5 === 0) {
|
||
kd.push('5')
|
||
} else {
|
||
kd.push('3')
|
||
}
|
||
}
|
||
}
|
||
// console.log(kd)
|
||
// 因为柱状初始化为0,温度存在负值,所以,原本的0-100,改为0-130,0-30用于表示负值
|
||
function getData(value) {
|
||
return [Number(value) + 30]
|
||
}
|
||
var mercuryColor = '#fd4d49'
|
||
var borderColor = '#fd4d49'
|
||
|
||
const option = {
|
||
title: {
|
||
text: '温度监测',
|
||
show: true,
|
||
textStyle: {
|
||
fontWeight: 'normal',
|
||
fontSize: 16,
|
||
color: '#fff'
|
||
}
|
||
},
|
||
yAxis: [{
|
||
show: false,
|
||
min: 0,
|
||
max: 130
|
||
}, {
|
||
show: false,
|
||
data: [],
|
||
min: 0,
|
||
max: 130
|
||
}],
|
||
xAxis: [{
|
||
show: false,
|
||
data: []
|
||
}, {
|
||
show: false,
|
||
data: []
|
||
}, {
|
||
show: false,
|
||
data: []
|
||
}, {
|
||
show: false,
|
||
min: -110,
|
||
max: 100
|
||
|
||
}],
|
||
series: [{
|
||
name: '条',
|
||
type: 'bar',
|
||
// 对应上面XAxis的第一个对象配置
|
||
xAxisIndex: 0,
|
||
data: getData(value),
|
||
barWidth: 18,
|
||
itemStyle: {
|
||
normal: {
|
||
color: mercuryColor,
|
||
barBorderRadius: 0
|
||
}
|
||
},
|
||
label: {
|
||
normal: {
|
||
show: true,
|
||
position: 'top',
|
||
formatter: function(param) {
|
||
// 因为柱状初始化为0,温度存在负值,所以,原本的0-100,改为0-130,0-30用于表示负值
|
||
return (((param.value * 100) - (30 * 100)) / 100) + '°C'
|
||
},
|
||
textStyle: {
|
||
color: '#ccc',
|
||
fontSize: '10'
|
||
}
|
||
}
|
||
},
|
||
z: 2
|
||
}, {
|
||
name: '白框',
|
||
type: 'bar',
|
||
xAxisIndex: 1,
|
||
barGap: '-100%',
|
||
data: [129],
|
||
barWidth: 28,
|
||
itemStyle: {
|
||
normal: {
|
||
color: '#ffffff',
|
||
barBorderRadius: 50
|
||
}
|
||
},
|
||
z: 1
|
||
}, {
|
||
name: '外框',
|
||
type: 'bar',
|
||
xAxisIndex: 2,
|
||
barGap: '-100%',
|
||
data: [130],
|
||
barWidth: 38,
|
||
itemStyle: {
|
||
normal: {
|
||
color: borderColor,
|
||
barBorderRadius: 50
|
||
}
|
||
},
|
||
z: 0
|
||
}, {
|
||
name: '圆',
|
||
type: 'scatter',
|
||
hoverAnimation: false,
|
||
data: [0],
|
||
xAxisIndex: 0,
|
||
symbolSize: 48,
|
||
itemStyle: {
|
||
normal: {
|
||
color: mercuryColor,
|
||
opacity: 1
|
||
}
|
||
},
|
||
z: 2
|
||
}, {
|
||
name: '白圆',
|
||
type: 'scatter',
|
||
hoverAnimation: false,
|
||
data: [0],
|
||
xAxisIndex: 1,
|
||
symbolSize: 60,
|
||
itemStyle: {
|
||
normal: {
|
||
color: '#ffffff',
|
||
opacity: 1
|
||
}
|
||
},
|
||
z: 1
|
||
}, {
|
||
name: '外圆',
|
||
type: 'scatter',
|
||
hoverAnimation: false,
|
||
data: [0],
|
||
xAxisIndex: 2,
|
||
symbolSize: 70,
|
||
itemStyle: {
|
||
normal: {
|
||
color: borderColor,
|
||
opacity: 1
|
||
}
|
||
},
|
||
z: 0
|
||
}, {
|
||
name: '刻度',
|
||
type: 'bar',
|
||
yAxisIndex: 1,
|
||
xAxisIndex: 3,
|
||
label: {
|
||
normal: {
|
||
show: true,
|
||
position: 'right',
|
||
distance: 10,
|
||
color: '#fff',
|
||
fontSize: 10,
|
||
formatter: function(params) {
|
||
// 因为柱状初始化为0,温度存在负值,所以,原本的0-100,改为0-130,0-30用于表示负值
|
||
if (params.dataIndex > 100 || params.dataIndex < 30) {
|
||
return ''
|
||
} else {
|
||
if (params.dataIndex % 5 === 0) {
|
||
return params.dataIndex - 30
|
||
} else {
|
||
return ''
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
barGap: '-100%',
|
||
data: kd,
|
||
barWidth: 1,
|
||
itemStyle: {
|
||
normal: {
|
||
color: borderColor,
|
||
barBorderRadius: 10
|
||
}
|
||
},
|
||
z: 0
|
||
}]
|
||
}
|
||
myChart5.setOption(option)
|
||
},
|
||
initEcharts3(data) {
|
||
myChart6 = echarts.init(document.querySelector('#main6'))
|
||
const option = {
|
||
// backgroundColor:'#0F2D5B',
|
||
title: {
|
||
text: '风速监测',
|
||
show: true,
|
||
textStyle: {
|
||
fontWeight: 'normal',
|
||
fontSize: 16,
|
||
color: '#fff'
|
||
}
|
||
},
|
||
series: [
|
||
{
|
||
name: '外圈',
|
||
type: 'gauge',
|
||
min: 0,
|
||
max: 30,
|
||
splitNumber: 10,
|
||
center: ['50%', '55%'],
|
||
radius: '73%',
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: [[1, '#2E5BA1']],
|
||
width: 20
|
||
}
|
||
},
|
||
splitLine: {
|
||
distance: -20,
|
||
length: 20,
|
||
lineStyle: {
|
||
width: 2,
|
||
color: '#0F2D5B'
|
||
}
|
||
},
|
||
axisTick: {
|
||
distance: -20,
|
||
length: 5,
|
||
lineStyle: {
|
||
color: '#0F2D5B'
|
||
}
|
||
},
|
||
axisLabel: {
|
||
distance: -25,
|
||
color: '#7392C1',
|
||
fontSize: 14
|
||
},
|
||
anchor: {
|
||
show: false
|
||
},
|
||
pointer: {
|
||
show: false
|
||
}
|
||
},
|
||
{
|
||
name: '内圈',
|
||
type: 'gauge',
|
||
min: 0,
|
||
max: 30,
|
||
splitNumber: 10,
|
||
center: ['50%', '55%'],
|
||
radius: '65%',
|
||
axisLine: {
|
||
lineStyle: {
|
||
width: 20,
|
||
color: [
|
||
[0.25, '#18EC90'],
|
||
[0.5, '#E2DC2E'],
|
||
[0.75, '#E2A02E'],
|
||
[1, '#FE4747']
|
||
]
|
||
}
|
||
},
|
||
silent: true,
|
||
pointer: {
|
||
length: '85%',
|
||
width: 4,
|
||
itemStyle: {
|
||
color: 'inherit',
|
||
borderWidth: 1,
|
||
borderColor: 'inherit', // '#0D3778',
|
||
shadowColor: 'inherit',
|
||
shadowBlur: 1
|
||
}
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
distance: -20,
|
||
length: 5,
|
||
lineStyle: {
|
||
color: '#0F2D5B'
|
||
}
|
||
},
|
||
splitLine: {
|
||
distance: -20,
|
||
length: 20,
|
||
lineStyle: {
|
||
width: 2,
|
||
color: '#0F2D5B'
|
||
}
|
||
},
|
||
axisLabel: {
|
||
show: false
|
||
},
|
||
title: { // 仪表盘标题。
|
||
show: true, // 是否显示标题,默认 true。
|
||
offsetCenter: [0, '95%'], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
|
||
color: '#ccc', // 文字的颜色,默认 #333。
|
||
fontSize: 15 // 文字的字体大小,默认 15。
|
||
},
|
||
detail: {
|
||
valueAnimation: true,
|
||
offsetCenter: [0, '70%'],
|
||
formatter: '{value}',
|
||
color: 'inherit', // 文字的颜色,默认 #333。
|
||
fontSize: 20
|
||
},
|
||
data: [{
|
||
name: '风速(m/s)',
|
||
value: data.pd.WINDSPEED
|
||
}]
|
||
}
|
||
]
|
||
}
|
||
myChart6.setOption(option)
|
||
},
|
||
calculateWindDirection(angle) {
|
||
const arr = [
|
||
{
|
||
directions: '北',
|
||
minAngle: '348.76',
|
||
maxAngle: '11.25'
|
||
},
|
||
{
|
||
directions: '北东北',
|
||
minAngle: '11.26',
|
||
maxAngle: '33.75'
|
||
},
|
||
{
|
||
directions: '东北',
|
||
minAngle: '33.76',
|
||
maxAngle: '56.25'
|
||
},
|
||
{
|
||
directions: '东东北',
|
||
minAngle: '56.26',
|
||
maxAngle: '78.75'
|
||
},
|
||
{
|
||
directions: '东',
|
||
minAngle: '78.76',
|
||
maxAngle: '101.25'
|
||
},
|
||
{
|
||
directions: '东东南',
|
||
minAngle: '101.26',
|
||
maxAngle: '123.75'
|
||
},
|
||
{
|
||
directions: '东南',
|
||
minAngle: '123.76',
|
||
maxAngle: '146.25'
|
||
},
|
||
{
|
||
directions: '南东南',
|
||
minAngle: '146.26',
|
||
maxAngle: '168.75'
|
||
},
|
||
{
|
||
directions: '南',
|
||
minAngle: '168.76',
|
||
maxAngle: '191.25'
|
||
},
|
||
{
|
||
directions: '南西南',
|
||
minAngle: '191.26',
|
||
maxAngle: '213.75'
|
||
},
|
||
{
|
||
directions: '西南',
|
||
minAngle: '213.76',
|
||
maxAngle: '236.25'
|
||
},
|
||
{
|
||
directions: '西西南',
|
||
minAngle: '236.26',
|
||
maxAngle: '258.75'
|
||
},
|
||
{
|
||
directions: '西',
|
||
minAngle: '258.76',
|
||
maxAngle: '281.25'
|
||
},
|
||
{
|
||
directions: '西西北',
|
||
minAngle: '281.26',
|
||
maxAngle: '303.75'
|
||
},
|
||
{
|
||
directions: '西北',
|
||
minAngle: '303.76',
|
||
maxAngle: '326.25'
|
||
},
|
||
{
|
||
directions: '北西北',
|
||
minAngle: '326.26',
|
||
maxAngle: '348.75'
|
||
}
|
||
]
|
||
for (let i = 0; i < arr.length; i++) {
|
||
if (+angle >= +arr[i].minAngle && +angle <= +arr[i].maxAngle) {
|
||
return arr[i].directions + '风'
|
||
}
|
||
}
|
||
return '静风'
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
#main4{
|
||
width: 340px;
|
||
height: 380px;
|
||
}
|
||
#main5{
|
||
width: 340px;
|
||
height: 380px;
|
||
}
|
||
#main6{
|
||
width: 340px;
|
||
height: 380px;
|
||
}
|
||
</style>
|