Commit 0e49f18b authored by liubinyu's avatar liubinyu

调整样式

parent 59be599b
src/assets/img/win-left-bottom.png

920 Bytes | W: | H:

src/assets/img/win-left-bottom.png

1.01 KB | W: | H:

src/assets/img/win-left-bottom.png
src/assets/img/win-left-bottom.png
src/assets/img/win-left-bottom.png
src/assets/img/win-left-bottom.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/img/win-left-top.png

224 Bytes | W: | H:

src/assets/img/win-left-top.png

781 Bytes | W: | H:

src/assets/img/win-left-top.png
src/assets/img/win-left-top.png
src/assets/img/win-left-top.png
src/assets/img/win-left-top.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/img/win-right-bottom.png

1.01 KB | W: | H:

src/assets/img/win-right-bottom.png

920 Bytes | W: | H:

src/assets/img/win-right-bottom.png
src/assets/img/win-right-bottom.png
src/assets/img/win-right-bottom.png
src/assets/img/win-right-bottom.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/img/win-right-top.png

205 Bytes | W: | H:

src/assets/img/win-right-top.png

794 Bytes | W: | H:

src/assets/img/win-right-top.png
src/assets/img/win-right-top.png
src/assets/img/win-right-top.png
src/assets/img/win-right-top.png
  • 2-up
  • Swipe
  • Onion skin
This diff is collapsed.
// 常量 // 常量
// const server_ip = '8.130.25.40'; // 测试服务器 // const server_ip = '8.130.25.40'; // 测试服务器
const server_ip = '192.168.192.128'; // 线上内网ip const server_ip = '22.57.64.22:8256'; // 线上内网ip
// const server_ip = '192.168.43.122:8258'; // const server_ip = '192.168.43.122:8258';
export const CONFIG = { export const CONFIG = {
...@@ -30,8 +30,12 @@ export const ButtonMap = { ...@@ -30,8 +30,12 @@ export const ButtonMap = {
// 首页图表样式 // 首页图表样式
export const ChartStyle = { export const ChartStyle = {
loadingColor: 'rgba(0, 0, 0, 0.5)', // 加载动画颜色 loadingColor: 'rgba(0, 0, 0, 0.5)', // 加载动画颜色
color: ['#509FFF', '#E5394C', '#0011A5', '#FF57BF', '#43C6AC', '#AA076B', '#0ED2F7', '#9733EE', '#0cff34', '#aa4e03', '#fce00b', '#11ffcc'], // 数据颜色 color: ['#509FFF', '#E5394C', '#0011A5', '#FF57BF', '#43C6AC', '#AA076B', '#0ED2F7', '#9733EE', '#0cff34',
color2: ['#6AF6FE', '#F0724D', '#00BAE6', '#FF8B7C', '#F8FFAE', '#E991C3', '#92FE9D', '#C3A0FF', '#bdff23', '#e55f12', '#d6a800', '#06c5ff'], // 数据渐变颜色 '#aa4e03', '#fce00b', '#11ffcc'
], // 数据颜色
color2: ['#6AF6FE', '#F0724D', '#00BAE6', '#FF8B7C', '#F8FFAE', '#E991C3', '#92FE9D', '#C3A0FF', '#bdff23',
'#e55f12', '#d6a800', '#06c5ff'
], // 数据渐变颜色
// 标题样式 // 标题样式
title: { title: {
color: '#93FCFF', color: '#93FCFF',
...@@ -45,7 +49,7 @@ export const ChartStyle = { ...@@ -45,7 +49,7 @@ export const ChartStyle = {
// 轴样式 // 轴样式
axis: { axis: {
color: '#5caac3', color: '#5caac3',
fontSize: 10, fontSize: 12,
lineHeight: 14, lineHeight: 14,
}, },
// 数据文字样式 // 数据文字样式
...@@ -209,7 +213,11 @@ export const DefaultDateSelect = () => [Date.now() - 3600 * 1000, Date.now()]; / ...@@ -209,7 +213,11 @@ export const DefaultDateSelect = () => [Date.now() - 3600 * 1000, Date.now()]; /
// 全厂监测测点配置 // 全厂监测测点配置
export const FactoryMConfig = { export const FactoryMConfig = {
power: ['有功功率'], // 功率 // 顶部
top: [
['转速'],
['有功功率'],
],
// 框框 // 框框
list: [ list: [
["上导X向摆度"], ["上导X向摆度"],
...@@ -243,28 +251,26 @@ export const CrewMConfig = { ...@@ -243,28 +251,26 @@ export const CrewMConfig = {
], ],
// 框框左上 // 框框左上
listLeftTop: [ listLeftTop: [
["上导X向摆度"],
["上导Y向摆度"],
["下导X向摆度"],
["下导Y向摆度"],
["法兰X向摆度"],
["法兰Y向摆度"],
["水导X向摆度"],
["水导Y向摆度"],
["上机架X向振动"], ["上机架X向振动"],
["上机架Y向振动"], ["上机架Y向振动"],
["上机架Z向振动"], ["上机架Z向振动"],
["下机架X向振动"],
["下机架Y向振动"],
["下机架Z向振动"],
["瓦架X向振动"],
["瓦架Z向振动"],
], ],
// 框框右上 // 框框右上
listRightTop: [ listRightTop: [
["上导X向摆度"],
["上导Y向摆度"],
["下导X向摆度", "法兰X向摆度"],
["下导Y向摆度", "法兰Y向摆度"],
["水导X向摆度"],
["水导Y向摆度"],
["大轴轴向位移A"], ["大轴轴向位移A"],
["大轴轴向位移B"], ["大轴轴向位移B"],
["大轴轴向位移C"], ["大轴轴向位移C"],
["下机架X向振动"],
["下机架Y向振动"],
["下机架Z向振动"],
["瓦架X向振动"],
["瓦架Z向振动"],
], ],
// 框框左下 // 框框左下
listLeftBottom: [ listLeftBottom: [
...@@ -274,12 +280,6 @@ export const CrewMConfig = { ...@@ -274,12 +280,6 @@ export const CrewMConfig = {
["定子基座Y向振动"], ["定子基座Y向振动"],
["定子铁芯X向振动"], ["定子铁芯X向振动"],
["定子铁芯Y向振动"], ["定子铁芯Y向振动"],
["蜗壳进口压力脉动"],
["蜗壳差压"],
["导叶后压力脉动"]
],
// 框框右下
listRightBottom: [
["顶盖碰磨Z向振动"], ["顶盖碰磨Z向振动"],
["顶盖碰磨X向振动"], ["顶盖碰磨X向振动"],
["顶盖X向振动"], ["顶盖X向振动"],
...@@ -287,7 +287,13 @@ export const CrewMConfig = { ...@@ -287,7 +287,13 @@ export const CrewMConfig = {
["顶盖Z向振动X"], ["顶盖Z向振动X"],
["顶盖Z向振动Y"], ["顶盖Z向振动Y"],
["顶盖Z向振动"], ["顶盖Z向振动"],
],
// 框框右下
listRightBottom: [
["顶盖下压力脉动"], ["顶盖下压力脉动"],
["蜗壳进口压力脉动"],
["蜗壳差压"],
["导叶后压力脉动"],
["尾水管X向振动"], ["尾水管X向振动"],
["尾水管进口压力脉动"], ["尾水管进口压力脉动"],
["尾水管出口压力脉动"], ["尾水管出口压力脉动"],
...@@ -310,44 +316,44 @@ export const CrewMConfig = { ...@@ -310,44 +316,44 @@ export const CrewMConfig = {
], ],
// 图表右上 // 图表右上
rightTop: [ rightTop: [
["上机架X向振动"], [
["上机架Y向振动"], [{name: "上导X向摆度", defaultMax: 560}],
["上机架Z向振动"], [{name: "上导Y向摆度", defaultMax: 560}],
["定子机座X向振动"], ],
["定子机座Y向振动"], [
["定子基座X向振动"], [{name: "下导X向摆度", defaultMax: 1500}, {name: "法兰X向摆度", defaultMax: 906}],
["定子基座Y向振动"], [{name: "下导Y向摆度", defaultMax: 1500}, {name: "法兰Y向摆度", defaultMax: 906}],
["定子铁芯X向振动"], ],
["定子铁芯Y向振动"] [
[{name: "水导X向摆度", defaultMax: 703}],
[{name: "水导Y向摆度", defaultMax: 703}],
]
], ],
// 图表右中 // 图表右中
rightCenter: [ rightCenter: [
["顶盖碰磨Z向振动"], [
["顶盖碰磨X向振动"], [{name: "顶盖X向振动", defaultMax: 203}],
["顶盖X向振动"], [{name: "顶盖Y向振动", defaultMax: 203}],
["顶盖Y向振动"], [{name: "顶盖Z向振动X", defaultMax: 293}],
["顶盖Z向振动X"], [{name: "顶盖Z向振动Y", defaultMax: 293}],
["顶盖Z向振动Y"], [{name: "顶盖Z向振动", defaultMax: 293}],
["顶盖Z向振动"], ],
["尾水管X向振动"], [
["顶盖下压力脉动"], [{name: "上机架X向振动", defaultMax: 156}],
["尾水管进口压力脉动"], [{name: "上机架Y向振动", defaultMax: 156}],
["尾水管出口压力脉动"], [{name: "上机架Z向振动", defaultMax: 141}],
["尾水管出口压力"], ],
["蜗壳进口压力脉动"], [
["蜗壳差压"], [{name: "下机架X向振动", defaultMax: 125}],
["导叶后压力脉动"] [{name: "下机架Y向振动", defaultMax: 125}],
[{name: "下机架Z向振动", defaultMax: 125}],
]
], ],
// 图表右下 // 图表右下
rightBottom: [ rightBottom: [
["上导X向摆度"],
["上导Y向摆度"],
["上导瓦温"], ["上导瓦温"],
["下导X向摆度"], ["下导瓦温"],
["下导Y向摆度"],
["推力瓦温"], ["推力瓦温"],
["水导X向摆度"], ["水导瓦温"],
["水导Y向摆度"],
["水导瓦温"]
], ],
} }
...@@ -680,18 +680,41 @@ export function makeMap(str, lowerCase) { ...@@ -680,18 +680,41 @@ export function makeMap(str, lowerCase) {
* @param {Object} crew 全部测点数据里的机组,之所以要传,是为了不用每次都找一次机组 * @param {Object} crew 全部测点数据里的机组,之所以要传,是为了不用每次都找一次机组
* @param {String} name 测点名关键词 * @param {String} name 测点名关键词
* @return {String} kks 测点kks * @return {String} kks 测点kks
* @return {Boolean} type 是否模糊匹配 0精准,1模糊
*/ */
export function getCharacterFromCrew(crew, name, kks) { export function getCharacterFromCrew(crew, name, kks, type) {
let res = crew.tSdb.find(i => { let res = crew.tSdb.find(i => {
if(name) return i.cpName.indexOf(name) != -1; if(name && type) return i.cpName.indexOf(name) != -1;
if(kks) return i.kksCode.indexOf(kks) != -1; if(name && !type) return i.cpName == name;
if(kks && type) return i.kksCode.indexOf(kks) != -1;
if(kks && !type) return i.kksCode == kks;
}); });
if(!res) return false; // 如果没有查出值,则跳过 if(!res) return false; // 如果没有查出匹配的测点,则返回
// 补数据 if(!res.kksValueR) chatValueHandler(res); // 补数据,只补一次
if(!res.kksValueR) {
let str = res.kksValue?.value?.toString();
res.state = str ? parseInt(str.substr(-2)) : 0; // 信号状态
res.kksValueR = str ? parseFloat(str.substr(0, str.length - 2)) : 0; // 真实值
}
return res; return res;
}
/**
* @auto 刘彬瑜
* @todo 将测点值处理成信号状态和真实值
* @param {Object} chat 测点对象
* @return {Object} chat 处理后的对象
*/
export function chatValueHandler(chat) {
if(!chat) return chat;
let val = parseFloat(chat.kksValue?.value); // 数据库返回的值
let str = val.toString(); // 字符串格式
if(!val || str === 'NaN') chat.kksValueR = chat.state = 0; // 如果没有值,正常应该是肯定有值的
// 正常值处理
else {
// 如果是无状态测点或者值的长度小于3(因为正常带信号状态的值最少也是1.01)
if(parseInt(chat.cpType) === 0 || str.length < 3) {
chat.state = 0;
chat.kksValueR = val;
}else{
chat.state = parseInt(str.substr(-2)); // 信号状态
chat.kksValueR = parseFloat(str.substr(0, str.length - 2)); // 真实值
}
}
return chat;
} }
\ No newline at end of file
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
} }
}, },
yAxis: { yAxis: {
splitNumber: 3,
axisLine: { axisLine: {
show: false show: false
}, },
......
<!-- 胶囊图的单个柱图 -->
<template>
<div :id="id" class="chart-single" />
</template>
<script>
import ChartBase from '@/components/Base/ChartsBase.js';
import {
ChartStyle
} from '@/common/const.js';
import {
getWarnColor,
} from '@/common/util.js';
import echarts from 'echarts';
export default {
mixins: [ChartBase],
methods: {
setOptions(chartData) {
if (!this.chart || !chartData) return;
const colors = getWarnColor(chartData.state, 1);
const minN = -2000000000;
const max = chartData.earlywarningruleminvalue > minN ? chartData.earlywarningruleminvalue : chartData.alertRuleMinValue >
minN ? chartData.alertRuleMinValue : chartData.protectRuleMinValue > minN ? chartData.protectRuleMinValue : chartData.defaultMax;
let option = {
tooltip: {
formatter: params => {
return chartData.cpName + (chartData.cpUnit ? '(' + chartData.cpUnit + ')' : '') + '<br/>' + '当前值:' +
params.value + ',阈值:' + max;
},
},
title: {
text: chartData.cpName + (chartData.cpUnit ? '(' + chartData.cpUnit + ')' : ''),
textStyle: {
color: ChartStyle.axis.color,
fontSize: ChartStyle.axis.fontSize,
fontWeight: 400
},
left: '5%',
},
xAxis: {
type: 'value',
max: max,
min: 0,
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
},
splitLine: {
show: false
}
},
yAxis: {
type: 'category',
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
}
},
series: [{
type: 'bar',
data: [chartData.kksValueR],
label: {
show: true,
position: 'insideLeft',
color: '#000',
fontSize: 10,
padding: [2, 0, 0, 0],
},
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
offset: 0,
color: colors[0]
}, {
offset: 1,
color: colors[1]
}]),
barBorderRadius: [50, chartData.kksValueR > max ? 50 : 0, chartData.kksValueR > max ? 50 : 0, 50]
},
showBackground: true,
backgroundStyle: {
color: 'rgba(255,255,255,0.7)',
barBorderRadius: 50
},
barMaxWidth: 13
// }, {
// type: 'pictorialBar',
// data: [3000],
// label: {
// show: true,
// position: 'right',
// color: ChartStyle.label.color,
// fontSize: 10,
// formatter: params => {
// return chartData.kksValueR;
// }
// },
// itemStyle: {
// color: 'transparent'
// },
// barMaxWidth: 13
}],
grid: {
top: '10%',
left: '5%',
right: '5%',
bottom: '0%',
containLabel: true
}
};
this.chart.setOption(option);
}
}
};
</script>
<style lang="scss" scoped>
.chart-single {
width: 100%;
height: 100%;
}
</style>
...@@ -4,7 +4,11 @@ ...@@ -4,7 +4,11 @@
<div class="up" v-if="title" :class="direction ? 'up-flex' : ''"> <div class="up" v-if="title" :class="direction ? 'up-flex' : ''">
<div class="i" />{{title}} <div class="i" />{{title}}
</div> </div>
<div class="down"> <div v-if="simple" class="down">
<div class="simple" :style="{color: getWarnColor(state)}">{{animatedNumber}}</div>
<span class="unit" style="bottom: 0.5rem;">{{unit}}</span>
</div>
<div v-else class="down">
<num :number="relNumber" /> <num :number="relNumber" />
<span class="unit">{{unit}}</span> <span class="unit">{{unit}}</span>
</div> </div>
...@@ -12,7 +16,11 @@ ...@@ -12,7 +16,11 @@
</template> </template>
<script> <script>
import {
getWarnColor,
} from '@/common/util.js';
import Num from './num.vue' import Num from './num.vue'
import Gsap from '../../assets/js/gsap.js';
export default { export default {
components: { components: {
Num, Num,
...@@ -22,6 +30,7 @@ ...@@ -22,6 +30,7 @@
type: String, type: String,
default: '', default: '',
}, },
// 方向
direction: { direction: {
type: String | Number | Boolean, type: String | Number | Boolean,
}, },
...@@ -33,22 +42,41 @@ ...@@ -33,22 +42,41 @@
type: Number | String, type: Number | String,
default: 0, default: 0,
}, },
state: {
type: Number,
},
// 小数位数 // 小数位数
point: { point: {
type:Number, type:Number,
default: 0, },
// 简单版
simple: {
type: String | Number | Boolean,
} }
}, },
data() { data() {
return { return {
getWarnColor: getWarnColor,
relNumber: 0, relNumber: 0,
tweenedNumber: 0,
} }
}, },
computed: {
animatedNumber() {
const newLen = this.number.toString().split('.')?.[1]?.length ?? 0;
return this.tweenedNumber.toFixed(newLen);
}
},
watch: { watch: {
number: { number: {
immediate: true, immediate: true,
handler(val) { handler(val) {
this.relNumber = parseFloat(val).toFixed(this.point < 0 ? 0 : this.point); if(!val) return;
if(this.simple) {
Gsap.to(this.$data, { duration: 1, tweenedNumber: parseFloat(val) });
} else {
this.relNumber = this.point === undefined ? parseFloat(val) : parseFloat(val).toFixed(this.point < 0 ? 0 : this.point);
}
} }
} }
}, },
...@@ -58,6 +86,7 @@ ...@@ -58,6 +86,7 @@
.number-flipper { .number-flipper {
$up-m-b: 0.5rem; $up-m-b: 0.5rem;
.up{ .up{
font-size: 1.2rem;
color: $color-cyan; color: $color-cyan;
@extend %flex-center; @extend %flex-center;
margin-bottom: $up-m-b; margin-bottom: $up-m-b;
...@@ -84,8 +113,18 @@ ...@@ -84,8 +113,18 @@
.unit{ .unit{
font-size: 0.875rem; font-size: 0.875rem;
color: $color-cyan; color: $color-cyan;
position: relative;
} }
} }
.simple{
font-size: 1.5rem;
background-color: rgba(10,23,55,0.80);
border: 1px solid rgba(9,77,148,0.50);
padding: 0.5rem;
color: $color-cyan;
margin-right: 0.5rem;
}
} }
.flex{ .flex{
display: flex; display: flex;
......
<!-- 数字翻牌器单个数字 --> <!-- 数字翻牌器单个数字 -->
<template> <template>
<div id="dataNums" class="number"> <div id="dataNums" class="number">
<div :class="item.num != '.' ? 'n-bg' : 'p-bg'" v-for="(item,index) in list" :key="index"> <div :class="item.num == '.' ? 'p-bg' : item.num == '-' ? 'f-bg' : 'n-bg'" v-for="(item,index) in list" :key="index">
<div v-if="item.num != '.'" class="nums" :style="{transition:'all 1s ease-in-out 0s',top:'-'+item.top+'px'}"> <div v-if="item.num == '.'" class="point"></div>
<div v-if="item.num == '-'" class="negative"></div>
<div v-if="item.num != '.' && item.num != '-'" class="nums" :style="{transition:'all 1s ease-in-out 0s',top:'-'+item.top+'px'}">
<span v-for="(item2,index2) in numList" :key="index2">{{item2}}</span> <span v-for="(item2,index2) in numList" :key="index2">{{item2}}</span>
</div> </div>
<div v-else class="point"></div>
</div> </div>
</div> </div>
</template> </template>
...@@ -85,6 +86,12 @@ ...@@ -85,6 +86,12 @@
height: $bg-height; height: $bg-height;
margin-right: 0.5rem; margin-right: 0.5rem;
} }
.f-bg{
position: relative;
width: 1rem;
height: $bg-height;
margin-right: 0.5rem;
}
.nums { .nums {
position: absolute; position: absolute;
...@@ -111,5 +118,15 @@ ...@@ -111,5 +118,15 @@
height: 0.3rem; height: 0.3rem;
background: $color-cyan; background: $color-cyan;
} }
.negative{
position: absolute;
top: 0;
bottom: 0;
margin: auto;
width: 100%;
height: 0.3rem;
background: $color-cyan;
}
} }
</style> </style>
<!-- 滚动窗口 --> <!-- 滚动窗口 -->
<template> <template>
<div class="scroll-window"> <div class="scroll-window">
<img v-if="direction" class="top top-right" src="../../assets/img/win-right-top.png" /> <img v-if="direction" class="top top-right" src="../../assets/img/line-right-top.png" />
<img v-else class="top top-left" src="../../assets/img/win-left-top.png" /> <img v-else class="top top-left" src="../../assets/img/line-left-top.png" />
<div class="main"> <div class="main">
<slot /> <slot />
</div> </div>
<img v-if="direction" class="bottom bottom-left" src="../../assets/img/win-right-bottom.png" /> <!-- 右下 -->
<img v-else class="bottom bottom-right" src="../../assets/img/win-left-bottom.png" /> <img v-if="!direction && !isTop" class="icon icon-bottom bottom-right" src="../../assets/img/win-right-bottom.png" />
<!-- 右上 -->
<img v-if="!direction && isTop" class="icon icon-top bottom-right" src="../../assets/img/win-right-top.png" />
<!-- 左下 -->
<img v-if="direction && !isTop" class="icon icon-bottom bottom-left" src="../../assets/img/win-left-bottom.png" />
<!-- 左上 -->
<img v-if="direction && isTop" class="icon icon-top bottom-left" src="../../assets/img/win-left-top.png" />
</div> </div>
</template> </template>
<script> <script>
export default { export default {
// 方向,0为左边,1为右边 // 方向,0为左边,1为右边
props: ['direction'], props: ['direction', 'isTop'],
} }
</script> </script>
...@@ -36,10 +42,16 @@ ...@@ -36,10 +42,16 @@
.top-right { .top-right {
right: 0; right: 0;
} }
.bottom{
.icon {
width: 5.75rem; width: 5.75rem;
height: auto; height: auto;
position: absolute; position: absolute;
}
.icon-top{
top: -0.6rem;
}
.icon-bottom{
bottom: -0.75rem; bottom: -0.75rem;
} }
.bottom-left { .bottom-left {
...@@ -51,7 +63,7 @@ ...@@ -51,7 +63,7 @@
.main{ .main{
height: 100%; height: 100%;
background-color: rgba(10,23,55,0.80); // background-color: rgba(10,23,55,0.80);
border: 1px solid rgba(9,77,148,0.50); border: 1px solid rgba(9,77,148,0.50);
box-shadow: 0 2px 8px 0 rgba(0,0,0,0.10); box-shadow: 0 2px 8px 0 rgba(0,0,0,0.10);
padding: 0.5rem 0; padding: 0.5rem 0;
......
...@@ -10,6 +10,11 @@ ...@@ -10,6 +10,11 @@
font-size: 10px; font-size: 10px;
} }
} }
@media (max-width: 1200px) {
html {
font-size: 8px;
}
}
#app { #app {
width: 100%; width: 100%;
...@@ -34,6 +39,8 @@ body { ...@@ -34,6 +39,8 @@ body {
$color-cyan: #93FCFF; $color-cyan: #93FCFF;
$color-blue: #0984FF; $color-blue: #0984FF;
$color-deep-blue: #1C529D; $color-deep-blue: #1C529D;
$color-green: #00de6b;
$color-red: #E53B4C;
$txt-color: #eeeeee; $txt-color: #eeeeee;
// 背景图片居中 // 背景图片居中
......
This diff is collapsed.
...@@ -87,26 +87,24 @@ ...@@ -87,26 +87,24 @@
}, },
// 初始化socket // 初始化socket
initSocket() { initSocket() {
try{ this.socket = new WebSocket('ws://' + CONFIG.SOCKET + '/runningState/deviceInfo', [this.$x_user.token.split(' ')[1]]);
this.socket = new WebSocket('ws://' + CONFIG.SOCKET + '/runningState/deviceInfo', [this.$x_user.token.split(' ')[1]]); this.socket.onopen = () => console.log('socket_factory success');
this.socket.onopen = () => console.log('socket_factory success'); this.socket.onerror = e => {
this.socket.onerror = e => console.log('socket_factory error', e); console.log('socket_factory error', e);
this.socket.onmessage = msg => {
try{
const data = JSON.parse(msg.data);
// console.log('socket_factory data', msg);
// console.log('socket_factory data', data);
if (!data) return;
this.socketData = data;
this.initData();
}catch(e){
console.log(e);
}
}
}catch(e){
console.log(e);
User.getRoleList(); // 捕获错误,然后发送一个请求,因为可能是token导致的socket连接错误,发送请求后如果是token过期,会自动注销用户 User.getRoleList(); // 捕获错误,然后发送一个请求,因为可能是token导致的socket连接错误,发送请求后如果是token过期,会自动注销用户
} }
this.socket.onmessage = msg => {
try{
const data = JSON.parse(msg.data);
// console.log('socket_factory data', msg);
// console.log('socket_factory data', data);
if (!data) return;
this.socketData = data;
this.initData();
}catch(e){
console.log(e);
}
}
}, },
// 关闭socket // 关闭socket
closeSocket() { closeSocket() {
...@@ -394,6 +392,9 @@ ...@@ -394,6 +392,9 @@
width: 1px; width: 1px;
background-color: $line-color; background-color: $line-color;
position: absolute; position: absolute;
top: 0;
bottom: 0;
margin: auto;
left: 4.5rem; left: 4.5rem;
} }
} }
......
...@@ -9,11 +9,15 @@ ...@@ -9,11 +9,15 @@
<el-carousel-item class="swiper-item" v-for="page in Math.ceil(crewList.length / 4)" :key="page"> <el-carousel-item class="swiper-item" v-for="page in Math.ceil(crewList.length / 4)" :key="page">
<div class="crew-item" v-for="item of crewList.slice(page * 4 - 4, page * 4)" :key="item.deviceId"> <div class="crew-item" v-for="item of crewList.slice(page * 4 - 4, page * 4)" :key="item.deviceId">
<img src="../assets/img/crew.png" @click="goPage(item)" /> <img src="../assets/img/crew.png" @click="goPage(item)" />
<number-flipper class="number" title="有功功率" unit="kW" :number="item.power" :point="1" direction="1" /> <div class="numbers">
<div class="name" @click="goPage(item)">{{item.deviceName}}</div> <number-flipper class="number" title="转速" unit="r/min" :number="item.top ? item.top[0].kksValueR : 0" :state="item.top ? item.top[0].state : 0" :point="1" />
<number-flipper class="number" title="有功功率" unit="kW" :number="item.top ? item.top[1].kksValueR : 0" :state="item.top ? item.top[1].state : 0" :point="1" />
</div>
<div class="name" :class="item.top && item.top[0].kksValueR > 0 ? 'name-run' : 'name-stop' " @click="goPage(item)">{{item.deviceName}}</div>
<scroll-window class="roll-top"> <scroll-window class="roll-top">
<div class="roll-title">报警值</div>
<el-scrollbar class="win-list" v-if="item.vListW && item.vListW.length"> <el-scrollbar class="win-list" v-if="item.vListW && item.vListW.length">
<div class="win-item" :style="{color: getWarnColor(v.state)}" v-for="v of item.vListW"> <div class="win-item" :style="{color: getWarnColor(v.state)}" v-for="v of item.vListW" :key="v.kksCode">
<div class="left">{{v.cpName}}</div> <div class="left">{{v.cpName}}</div>
<div class="right">{{v.kksValueR + ' ' + v.cpUnit}}</div> <div class="right">{{v.kksValueR + ' ' + v.cpUnit}}</div>
</div> </div>
...@@ -21,8 +25,9 @@ ...@@ -21,8 +25,9 @@
<div class="win-list no-data" v-else>暂无报警</div> <div class="win-list no-data" v-else>暂无报警</div>
</scroll-window> </scroll-window>
<scroll-window class="roll-bottom"> <scroll-window class="roll-bottom">
<div class="roll-title">实测值</div>
<el-scrollbar class="win-list"> <el-scrollbar class="win-list">
<div class="win-item" :style="{color: getWarnColor(v.state)}" v-for="v of item.vList"> <div class="win-item" :style="{color: getWarnColor(v.state)}" v-for="v of item.vList" :key="v.kksCode">
<div class="left">{{v.cpName}}</div> <div class="left">{{v.cpName}}</div>
<div class="right">{{v.kksValueR + ' ' + v.cpUnit}}</div> <div class="right">{{v.kksValueR + ' ' + v.cpUnit}}</div>
</div> </div>
...@@ -94,11 +99,13 @@ ...@@ -94,11 +99,13 @@
// 报警 // 报警
i.vListW = i.vList.filter(i => i.state == 3 || i.state == 4 || i.state == 5); i.vListW = i.vList.filter(i => i.state == 3 || i.state == 4 || i.state == 5);
// 功率 // 功率
i.power = 0; i.top = FactoryMConfig.top.map(arr => {
FactoryMConfig.power.forEach(key => { for (let key of arr) {
let res = getCharacterFromCrew(crew, key); let res = getCharacterFromCrew(crew, key);
if(res) i.power = res.kksValueR; if(res) return res;
}) }
return false;
});
}) })
} }
this.crewList = crewList; this.crewList = crewList;
...@@ -186,6 +193,7 @@ ...@@ -186,6 +193,7 @@
top: 0; top: 0;
bottom: 0; bottom: 0;
cursor: pointer; cursor: pointer;
transform: translateY(-3rem);
} }
.name { .name {
...@@ -199,30 +207,52 @@ ...@@ -199,30 +207,52 @@
@extend %pos-center; @extend %pos-center;
top: 0; top: 0;
bottom: 0; bottom: 0;
transform: translateY(6rem); transform: translateY(3rem);
cursor: pointer; cursor: pointer;
} }
.name-run{
.number { border-color: $color-green;
background: rgba($color: $color-green, $alpha: 0.3);
// color: $color-green;
}
.name-stop{
border-color: $color-red;
background: rgba($color: $color-red, $alpha: 0.3);
// color: $color-red;
}
.numbers{
@extend %pos-center; @extend %pos-center;
top: 0.5rem; top: 0.5rem;
transform: scale(0.8); display: flex;
justify-content: center;
align-items: center;
.number {
transform: scale(0.8);
}
} }
.roll-top{ .roll-top{
@extend %pos-center; @extend %pos-center;
width: 80%; width: 80%;
height: 21vh; height: 12vh;
top: 4rem; top: 6rem;
} }
.roll-bottom{ .roll-bottom{
@extend %pos-center; @extend %pos-center;
width: 80%; width: 80%;
height: 27vh; height: 30vh;
bottom: 0; bottom: 0;
} }
.roll-title{
position: absolute;
top: 1rem;
left: 1rem;
color: $color-cyan;
}
.win-list{ .win-list{
height: 100%; height: 100%;
line-height: 1.5rem; line-height: 1.5rem;
...@@ -241,6 +271,7 @@ ...@@ -241,6 +271,7 @@
} }
.no-data{ .no-data{
@extend %flex-center; @extend %flex-center;
color: #b8b8b8;
} }
/deep/.el-scrollbar__wrap { /deep/.el-scrollbar__wrap {
......
...@@ -90,7 +90,8 @@ ...@@ -90,7 +90,8 @@
import { import {
getWarnItem, getWarnItem,
getDeviceNameById, getDeviceNameById,
randomData randomData,
chatValueHandler
} from '@/common/util.js' } from '@/common/util.js'
import UserInfo from '@/components/UserInfo' import UserInfo from '@/components/UserInfo'
import User from '@/api/user.js'; import User from '@/api/user.js';
...@@ -137,27 +138,25 @@ ...@@ -137,27 +138,25 @@
methods: { methods: {
// 初始化socket // 初始化socket
initSocket() { initSocket() {
try{ this.socket = new WebSocket('ws://' + CONFIG.SOCKET + '/all/measure/point/' + this.$x_factory.plantId, [this.$x_user.token.split(' ')[1]]);
this.socket = new WebSocket('ws://' + CONFIG.SOCKET + '/all/measure/point/' + this.$x_factory.plantId, [this.$x_user.token.split(' ')[1]]); this.socket.onopen = () => console.log('socket_all success');
this.socket.onopen = () => console.log('socket_all success'); this.socket.onerror = e => {
this.socket.onerror = e => console.log('socket_all error', e); console.log('socket_all error', e);
this.socket.onmessage = msg => {
try{
const data = JSON.parse(msg.data);
// console.log('socket_all data', msg);
// console.log('socket_all data', data);
if (!data) return;
this.$store.commit('allData', data);
if(this.dialogShow) this.initTableData();
// this.initTableData();
}catch(e){
console.log(e);
}
}
}catch(e){
console.log(e);
User.getRoleList(); // 捕获错误,然后发送一个请求,因为可能是token导致的socket连接错误,发送请求后如果是token过期,会自动注销用户 User.getRoleList(); // 捕获错误,然后发送一个请求,因为可能是token导致的socket连接错误,发送请求后如果是token过期,会自动注销用户
} }
this.socket.onmessage = msg => {
try{
const data = JSON.parse(msg.data);
// console.log('socket_all data', msg);
// console.log('socket_all data', data);
if (!data) return;
this.$store.commit('allData', data);
if(this.dialogShow) this.initTableData();
// this.initTableData();
}catch(e){
console.log(e);
}
}
}, },
// 关闭socket // 关闭socket
closeSocket() { closeSocket() {
...@@ -223,12 +222,8 @@ ...@@ -223,12 +222,8 @@
for (let j = 0; j < this.$x_allData[i].tSdb.length; j++) { for (let j = 0; j < this.$x_allData[i].tSdb.length; j++) {
const item = this.$x_allData[i].tSdb[j]; // 当前测点 const item = this.$x_allData[i].tSdb[j]; // 当前测点
if(!item.kksValue) continue; // 如果没有查出值,则跳过 if(!item.kksValue) continue; // 如果没有查出值,则跳过
if(!item.kksValueR) { if(!item.kksValueR) chatValueHandler(item); // 补数据,只补一次
let str = item.kksValue.value.toString(); if(!item.deviceName) item.deviceName = getDeviceNameById(item.deviceId); // 添加机组名
item.state = parseInt(str.substr(-2));
item.kksValueR = parseFloat(str.substr(0, str.length - 2));
}
if(!item.deviceName) item.deviceName = getDeviceNameById(item.deviceId);
// tableData3.push(item); // 全部 // tableData3.push(item); // 全部
if(warnStateMap[item.state]) tableData1.push(item); // 报警 if(warnStateMap[item.state]) tableData1.push(item); // 报警
if(item.state == 2) tableData2.push(item); // 无效 if(item.state == 2) tableData2.push(item); // 无效
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment