yudao-dev/src/views/OperationalOverview/coldBoard.vue

1030 lines
33 KiB
Vue
Raw Normal View History

2023-12-29 09:00:00 +08:00
<!--
* @Author: zwq
* @Date: 2021-07-19 15:18:30
* @LastEditors: zhp
2024-01-24 17:16:05 +08:00
* @LastEditTime: 2024-01-24 17:07:01
2023-12-29 09:00:00 +08:00
* @Description:
-->
2023-11-15 09:08:20 +08:00
<template>
<div id="container" ref="container" class="visual-container" :style="styles">
<el-row class="container-title" :style="{
2023-12-29 09:00:00 +08:00
height: 88 + 'px',
lineHeight: 88 + 'px',
fontSize: 31 + 'px'
}">
2023-11-15 09:08:20 +08:00
<img src="../../assets/img/logo.png" style="width:1.1em;position:relative;top:.4em" alt="">
许昌安彩冷端看板
2024-01-23 16:22:25 +08:00
<h3 class="unit">单位河南汇融数字科技有限公司</h3>
2023-12-19 16:32:12 +08:00
<h3 class="time">{{ times }}</h3>
2023-12-29 09:00:00 +08:00
<!-- <el-button
type="text"
class="title-button"
:style="{ right: 33 + 'px', top: 37 + 'px' }"
@click="changeFullScreen"
>
2023-11-15 09:08:20 +08:00
<svg-icon v-if="isFullScreen" icon-class="unFullScreenView" />
<svg-icon v-else icon-class="fullScreenView" />
</el-button> -->
</el-row>
<el-row class="container-main flex-col" type="flex">
2023-12-29 09:00:00 +08:00
<el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="15" type="flex" class="flex-1">
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8">
2024-01-23 16:22:25 +08:00
<base-container :title="'切割数据'" :size="'small'" :title-icon="'eqAlarm'">
2024-01-16 16:09:52 +08:00
<!-- <base-table1 :page="1" :limit="999" :show-index="false" :table-config="cutProps"
:table-data="cutTableDataList" /> -->
<dv-scroll-board :config="cutConfig" style="width:100%;height:350px" ref='cutScrollBoard' />
2023-12-29 09:00:00 +08:00
</base-container>
2023-11-15 09:08:20 +08:00
</el-col>
2023-12-29 09:00:00 +08:00
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8">
2024-01-18 14:10:49 +08:00
<base-container :no-content-padding="true" :title="'产量及良率统计'" :size="'small'"
:title-icon="'energyMonitoring'">
2023-12-29 09:00:00 +08:00
<!-- <div style="width: 45%;position: absolute; top: 3em; right: 3em;">
<top-radio-group />
</div> -->
<!-- 像下面这样表格里的limit值也许可以用js动态计算出来 -->
2024-01-05 08:44:31 +08:00
<double-y-chart ref="productChart" :id="'doubleYChart'" :name-list="cxNameList" :data-list="cxDataList"
:height="359" :show-legend="true" />
2023-12-29 09:00:00 +08:00
</base-container>
</el-col>
2023-11-15 09:08:20 +08:00
2023-12-29 09:00:00 +08:00
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8">
2024-01-09 16:25:12 +08:00
<base-container :title="'ISRA 缺陷数据'" :size="'small'" :title-icon="'scrap'">
2024-01-16 16:09:52 +08:00
<!-- <base-table1 :page="1" :limit="999" :show-index="false" :table-config="ISRATableProps"
:table-data="ISRAList" /> -->
<dv-scroll-board :config="ISRAConfig" style="width:100%;height:350px" ref='ISRAScrollBoard' />
2023-12-29 09:00:00 +08:00
</base-container>
</el-col>
</el-row>
2023-11-15 09:08:20 +08:00
2023-12-29 09:00:00 +08:00
<el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="10" type="flex" class="flex-1">
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
2024-01-18 14:10:49 +08:00
<base-container :no-content-padding="true" :height="256" :title="'废片 缺陷数据'" :size="'middle'"
:title-icon="'scrap'">
2023-12-29 09:00:00 +08:00
<!-- <div style="width: 45%;position: absolute; top: 3em; right: 3em;">
<top-radio-group />
</div> -->
<!-- <el-row :gutter="9"> -->
<!-- <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="24"> -->
2024-01-05 08:44:31 +08:00
<pile-bar-chart ref="pileChart" :name-list="EnergyMonitoringNameList" :data-list="EnergyMonitoringList"
2023-12-29 09:00:00 +08:00
:height="359" />
<!-- </el-col> -->
<!-- <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
<base-table3
:page="2"
:limit="5"
:table-config="qualityTableProps2"
:table-data="qualityList2"
/>
</el-col> -->
<!-- </el-row> -->
</base-container>
</el-col>
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="14">
2024-01-18 14:10:49 +08:00
<base-container :no-content-padding="true" :no-padding="true" :height="318 + 338 + 16" :size="'eqStatus'"
:title="'设备状态监控'" :title-icon="'eqMonitoring'">
2023-12-29 09:00:00 +08:00
<!-- <div style="width: 45%;position: absolute; top: 3em; right: 3em;">
<top-radio-group />
</div> -->
<!-- 像下面这样表格里的limit值也许可以用js动态计算出来 -->
2024-01-12 10:00:17 +08:00
<el-col :span="6" style="">
<div style="font-size:20px;margin: 5px 0 10px 0">融化风机</div>
2024-01-16 16:09:52 +08:00
<!-- <base-table1 :page="1" :limit="999" :show-index="false" :table-config="EqMonitoringPropsFun"
:table-data="funList" /> -->
<dv-scroll-board :config="funConfig" style="width:100%;height:350px" ref='funScrollBoard' />
2023-12-29 09:00:00 +08:00
</el-col>
2024-01-24 17:16:05 +08:00
<span class="eqLine"></span>
2024-01-02 09:20:55 +08:00
<el-col :span="6">
2024-01-12 10:00:17 +08:00
<div style="font-size:20px;margin: 5px 0 10px 0;">退火风机</div>
2024-01-16 16:09:52 +08:00
<!-- <base-table1 :page="1" :limit="999" :show-index="false" :table-config="EqMonitoringPropsFun"
:table-data="annealFunList" /> -->
<dv-scroll-board :config="annealFunConfig" style="width:100%;height:350px" ref='annealFunScrollBoard' />
2024-01-02 09:20:55 +08:00
</el-col>
2024-01-24 17:16:05 +08:00
<span class="eqLineTwo"></span>
2023-12-29 09:00:00 +08:00
<el-col :span="12" style="float: right;">
2024-01-12 10:00:17 +08:00
<div style="font-size:20px;margin: 5px 0 10px 0;">产线设备</div>
2024-01-16 16:09:52 +08:00
<!-- <base-table1 :page="1" :limit="999" :show-index="false" :table-config="EqMonitoringProps"
:table-data="realEqList" /> -->
<dv-scroll-board :config="realEqConfig" style="width:100%;height:350px" ref='realEqScrollBoard' />
2023-12-29 09:00:00 +08:00
</el-col>
<!-- <double-y-chart :id="'doubleYChart'" :name-list="cxNameList" :data-list="cxDataList" :height="359"
:show-legend="true" /> -->
</base-container>
</el-col>
</el-row>
2023-11-15 09:08:20 +08:00
2023-12-29 09:00:00 +08:00
<!-- end -->
<!-- <el-col :span="16">
<el-row>
2023-11-15 09:08:20 +08:00
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="24">
2023-12-29 09:00:00 +08:00
<base-container :height="672">
<base-video :video-height="624" />
2023-11-15 09:08:20 +08:00
</base-container>
</el-col>
2023-12-29 09:00:00 +08:00
</el-row>
2023-11-15 09:08:20 +08:00
</el-col>
2023-12-29 09:00:00 +08:00
-->
2023-11-15 09:08:20 +08:00
</el-row>
</div>
</template>
<script>
import baseContainer from './components/baseContainer'
import baseTable1 from './components/baseTable'
2023-12-29 09:00:00 +08:00
// import baseTable2 from './components/baseTable'
2023-11-15 09:08:20 +08:00
// import baseTable3 from './components/baseTable'
2023-12-29 09:00:00 +08:00
import TopRadioGroup from './components/topRadioGroup'
// import pieChart1 from './components/PieChart'
// import pieChart2 from './components/PieChart'
// import pieChart3 from './components/PieChart'
2023-11-15 09:08:20 +08:00
// import { mapGetters } from 'vuex'
import screenfull from 'screenfull'
// import BaseVideo from './components/baseVideo.vue'
2023-12-29 09:00:00 +08:00
import alarmLevel from './components/alarmLevel'
import pileBarChart from './components/pileBarChart'
2024-01-09 16:25:12 +08:00
import colorDiv from './components/colorDiv'
2023-12-29 09:00:00 +08:00
2023-11-15 09:08:20 +08:00
// import axios from '@/utils/request'
2024-01-17 15:30:47 +08:00
import doubleYChart from './components/coldDoubleYChart'
2023-11-15 09:08:20 +08:00
// import elementResizeDetectorMaker from 'element-resize-detector';
// var erd = elementResizeDetectorMaker(); //创建实例
2023-12-29 09:00:00 +08:00
// let resizeFun = null
2023-12-29 16:29:15 +08:00
import { parseTime } from '../core/mixins/code-filter';
2024-01-16 16:09:52 +08:00
import { formatDate } from '@/utils'
2023-12-29 16:29:15 +08:00
2023-11-15 09:08:20 +08:00
2023-12-29 09:00:00 +08:00
import LinearBarChart from './components/linearBarChart'
const qualityYearTableProps= []
2024-01-02 09:20:55 +08:00
const EqMonitoringPropsFun = [
{ prop: 'equipmentName', label: '设备名称' },
{ prop: 'status', label: '运行状态', width: 80}
]
2023-12-29 09:00:00 +08:00
const EqMonitoringProps = [
2024-01-05 08:44:31 +08:00
{ prop: 'line', label: '产线' },
{ prop: 'name', label: '设备名称' },
{ prop: 'code', label: '设备编码' },
2023-11-15 09:08:20 +08:00
{
2024-01-05 08:44:31 +08:00
prop: 'run',
2023-12-29 09:00:00 +08:00
label: '运行状态',
2023-11-15 09:08:20 +08:00
},
{
2023-12-29 09:00:00 +08:00
prop: 'error',
label: '故障状态',
2023-11-15 09:08:20 +08:00
},
2023-12-29 09:00:00 +08:00
]
const cutProps = [
2024-01-02 09:20:55 +08:00
{ prop: 'lineName', label: '产线', width: 50 },
2023-12-29 16:29:15 +08:00
{
prop: 'time', label: '时间',
filter: parseTime
},
2023-12-29 09:00:00 +08:00
{ prop: 'size', label: '规格' },
2024-01-02 09:20:55 +08:00
{ prop: 'productArea', label: '良品面积', width: 80 },
{ prop: 'wasteArea', label: '废片面积', width: 80 },
2024-01-09 16:25:12 +08:00
{
prop: 'product', label: '良品率', width: 80,
subcomponent: colorDiv,
},
2023-11-15 09:08:20 +08:00
]
const cxNameList = ['周一', '周二', '周三', '周四', '周五']
const cxDataList = [
{
topColor: '#9DD5FF',
bottomColor: '#1295FF',
name: '电耗能',
data: [100, 150, 121, 97, 140]
},
{
topColor: '#FF8BC3',
bottomColor: '#EB46A1',
name: '水耗能',
data: [110, 110, 151, 77, 110]
},
{
topColor: '#85F6E9',
bottomColor: '#2EC6B4',
name: '天然气',
data: [110, 120, 171, 287, 40]
},
{
topColor: '#9496FF',
bottomColor: '#6567FF',
name: '焦炉煤气',
data: [140, 157, 122, 27, 240]
},
{
topColor: '#F68E8A',
bottomColor: '#E95552',
name: '余热发电',
data: [170, 180, 127, 17, 340]
},
{
topColor: '#FFE873',
bottomColor: '#E7AE2A',
name: '二氧化硫',
data: [140, 160, 121, 57, 170]
}
]
2023-12-29 09:00:00 +08:00
const ISRATableProps = [
2023-11-15 09:08:20 +08:00
{
2023-12-29 09:00:00 +08:00
prop: 'linename',
label:'产线'
2023-11-15 09:08:20 +08:00
},
{
2023-12-29 09:00:00 +08:00
prop: 'time',
label: '时间'
2023-11-15 09:08:20 +08:00
},
{
2023-12-29 09:00:00 +08:00
prop: 'type',
label:'缺陷类型'
2023-11-15 09:08:20 +08:00
},
{
2023-12-29 09:00:00 +08:00
prop: 'num',
label: '缺陷数量'
2023-11-15 09:08:20 +08:00
},
{
2023-12-29 09:00:00 +08:00
prop: 'percent',
label: '占比'
2023-11-15 09:08:20 +08:00
}
]
export default {
name: 'ProductionMonitoringCockpit',
components: {
baseContainer,
baseTable1,
2023-12-29 09:00:00 +08:00
pileBarChart,
TopRadioGroup,
doubleYChart,
2023-11-15 09:08:20 +08:00
LinearBarChart
2023-12-29 09:00:00 +08:00
// pieChart1,
// pieChart2
// pieChart3
2023-11-15 09:08:20 +08:00
// BaseVideo
},
data() {
return {
beilv2: 1,
2023-12-29 09:00:00 +08:00
beilv: 1,
2023-11-15 09:08:20 +08:00
value: 100,
2023-12-29 09:00:00 +08:00
EqMonitoringProps,
2024-01-02 09:20:55 +08:00
EqMonitoringPropsFun,
2023-12-29 09:00:00 +08:00
realEqList:[],
qualityYearTableProps,
ISRATableProps,
orderList: [],
times: '',
2024-01-16 16:09:52 +08:00
cutConfig: {
header: ['序号', '产线', '时间', '规格', '良品面积', '废品面积', '良品率'],
headerBGC: 'rgba(32, 55, 96, 0.8)',
oddRowBGC: 'rgba(32, 55, 96, 0.8)',
evenRowBGC: 'rgba(14, 32, 62, 0.8)',
columnWidth: [70,70, 130, 150, 110,110,90],
align: ['center'],
data: [],
// index:true,
rowNum: 10
},
funConfig: {
header: ['序号', '设备名称', '运行状态'],
headerBGC: 'rgba(32, 55, 96, 0.8)',
oddRowBGC: 'rgba(32, 55, 96, 0.8)',
evenRowBGC: 'rgba(14, 32, 62, 0.8)',
columnWidth: [60, 90, 90],
align: ['center'],
data: [],
// index:true,
rowNum: 10
},
realEqConfig: {
header: ['序号', '产线', '设备名称', '设备编码', '运行状态','故障状态'],
headerBGC: 'rgba(32, 55, 96, 0.8)',
oddRowBGC: 'rgba(32, 55, 96, 0.8)',
evenRowBGC: 'rgba(14, 32, 62, 0.8)',
columnWidth: [60, 80, 90,90,90,90],
align: ['center'],
data: [],
// index:true,
rowNum: 10
},
annealFunConfig: {
header: ['序号', '设备名称', '运行状态'],
headerBGC: 'rgba(32, 55, 96, 0.8)',
oddRowBGC: 'rgba(32, 55, 96, 0.8)',
evenRowBGC: 'rgba(14, 32, 62, 0.8)',
columnWidth: [60, 90, 90],
align: ['center'],
data: [],
// index:true,
rowNum: 10
},
ISRAConfig: {
header: ['序号', '产线', '时间', '缺陷类型', '缺陷数量', '占比'],
headerBGC: 'rgba(32, 55, 96, 0.8)',
oddRowBGC: 'rgba(32, 55, 96, 0.8)',
evenRowBGC: 'rgba(14, 32, 62, 0.8)',
columnWidth: [70, 70, 130, 150, 110, 110,],
align: ['center'],
data: [],
// index:true,
rowNum: 10
},
2023-12-29 09:00:00 +08:00
ISRAList:[],
EnergyMonitoringNameList: [],
equipmentList: [],
EnergyMonitoringList: [],
// offsetWidth: null,
2023-11-15 09:08:20 +08:00
cxNameList,
cxDataList,
2023-12-29 09:00:00 +08:00
cutProps,
cutTableDataList:[],
clientWidth: 0,
containerWidth: 111111,
isFullScreen: false,
2024-01-02 09:20:55 +08:00
cutWsData: {},
funWsData: {},
SJGWsData: {},
2023-12-29 09:00:00 +08:00
// orderProcessList: [],
dateType: '0',
funList:[],
2024-01-02 09:20:55 +08:00
annealFunList: [],
2023-12-29 09:00:00 +08:00
queryParams: {
pageNo: 1,
pageSize: 10,
equipmentId: null,
productionLineId: null,
},
2023-11-15 09:08:20 +08:00
}
},
computed: {
// ...mapGetters(['sidebar']),
styles() {
const v = Math.floor(this.value * this.beilv2 * 100) / 10000
return {
transform: `scale(${v})`,
2023-12-29 09:00:00 +08:00
transformOrigin: 'top left'
2023-11-15 09:08:20 +08:00
}
}
},
2023-12-29 09:00:00 +08:00
watch: {
clientWidth(val) {
if (!this.timer) {
this.clientWidth = val
this.beilv2 = this.clientWidth / 1920
this.timer = true
let _this = this
setTimeout(function () {
_this.timer = false
}, 500)
}
// 这里可以添加修改时的方法
this.windowWidth(val);
}
},
2023-11-15 09:08:20 +08:00
created() {
// this.fetchList('exception-alarm')
// this.fetchList('inAndOutOfEachLine')
// this.fetchList('order-process')
// this.fetchList('line-chart-data')
this.init()
},
mounted() {
2023-12-29 16:29:15 +08:00
this.funInitWebSocket()
this.CutInitWebSocket()
this.SJGInitWebSocket()
2024-01-05 08:44:31 +08:00
// this.getList()
2023-12-19 16:32:12 +08:00
this.getTimes()
2023-11-15 09:08:20 +08:00
const _this = this;
_this.beilv2 = document.documentElement.clientWidth / 1920
window.onresize = () => {
return (() => {
_this.clientWidth = `${document.documentElement.clientWidth}`
this.beilv2 = _this.clientWidth / 1920
})()
}
2024-01-23 16:22:25 +08:00
// let obj = {
// 'a': 11111,
// 'b': 22222,
// 'c': 33333,
// 'd': 44444,
// 'e': 55555,
// }
// let index = 0
// for (let i in obj) {
// index++,
// console.log(index);
// }
2024-01-05 08:44:31 +08:00
// this.getList()
2023-12-29 09:00:00 +08:00
// const _this = this;
// window.onresize = () => {
// return (() => {
// _this.clientWidth = `${document.documentElement.clientWidth}`
// this.beilv2 = _this.clientWidth / 1920
// })()
// }
2023-11-15 09:08:20 +08:00
// this.beilv2 = window.innerWidth / 1920
// addEventListener('resize', resizeFun = () => {
// this.beilv2 = window.innerWidth / 1920
// })
// erd.listenTo(document, (element) => {
// this.beilv2 = element.offsetWidth / 1920
// // var width = element.offsetWidth;
// // var height = element.offsetHeight;
// });
},
// beforeDestroy() {
// //离开页面删除检测器和所有侦听器
// // erd.uninstall(document); //这里用ref是因为vue离开页面后获取不到dom
// removeEventListener('resize', resizeFun)
// },
methods: {
2024-01-05 08:44:31 +08:00
// getList() {
// // this.loading = true;
// // 执行查询
// // let data = '{ "data": { "FanFrequencyInfo": { "1#10处拐角冷却风机": "0", "1#L型吊墙冷却风机": "0", "1#助燃风机": "44.8", "1#澄清带池壁风机": "40", "1#融化带池壁风机": "43", "1#钢碹碴小炉垛风机": "48", "2#10处拐角冷却风机": "50", "2#L型吊墙冷却风机": "49.7", "2#助燃风机": "0", "2#澄清带池壁风机": "0", "2#融化带池壁风机": "0", "2#钢碹碴小炉垛风机": "48", "3#澄清带池壁风机": "0", "3#融化带池壁风机": "0", "4#澄清带池壁风机": "40", "4#融化带池壁风机": "43" } }, "type": "FanFrequencyInfo" }'
// // let obj = JSON.parse(data)
// // // for()
// // let arr = []
// // for (let i in obj.data.FanFrequencyInfo) {
// // arr.push({
// // equipmentName: i,
// // status: obj.data.FanFrequencyInfo[i]
// // })
// // }
// // this.funList = arr``
// this.$axios.get(
// '/monitoring/equipment-monitor/realtime-page',
// 'get',
// this.queryParams
// ).then((res) => {
// this.realEqList = res.data.list;
// // this.total = response.data.total;
// // this.loading = false;
// });
// },
2023-12-19 16:32:12 +08:00
getTimes() {
setInterval(this.getTimesInterval, 1000);
},
getTimesInterval: function () {
let _this = this;
let year = new Date().getFullYear(); //获取当前时间的年份
let month = new Date().getMonth() + 1; //获取当前时间的月份
let day = new Date().getDate(); //获取当前时间的天数
let hours = new Date().getHours(); //获取当前时间的小时
let minutes = new Date().getMinutes(); //获取当前时间的分数
let seconds = new Date().getSeconds(); //获取当前时间的秒数
//当小于 10 的是时候,在前面加 0
if (hours < 10) {
hours = "0" + hours;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
//拼接格式化当前时间
this.times = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
},
2023-12-29 16:29:15 +08:00
SJGInitWebSocket() {
2023-12-29 09:00:00 +08:00
if (typeof (WebSocket) === 'undefined') {
alert('您的浏览器不支持WebSocket')
} else {
// const wsUrl = 'ws://192.168.1.74:48080/websocket/message?userId=EN111'
// const wsUrl = 'ws://192.168.1.104:48082/websocket/message?userId=SJG'
let date = new Date().valueOf()
2024-01-05 08:44:31 +08:00
const SJGWsUrl = process.env.VUE_APP_Socket_API + `/websocket/message?userId=COLD${date}`
2023-12-29 09:00:00 +08:00
this.SJGWebsocket = new WebSocket(SJGWsUrl)
// 监听 WebSocket 连接
this.SJGWebsocket.onopen = this.SJGWebsocketOnOpen
// 监听 WebSocket 错误信息
this.SJGWebsocket.onerror = this.SJGWebsocketOnError
// 监听 WebSocket 消息
this.SJGWebsocket.onmessage = this.SJGWebsocketOnMessage
// 监听 webSocket 断开信息
this.SJGWebsocket.onclose = this.SJGWebsocketClose
2023-12-29 16:29:15 +08:00
}
},
CutInitWebSocket() {
if (typeof (WebSocket) === 'undefined') {
alert('您的浏览器不支持WebSocket')
} else {
// const wsUrl = 'ws://192.168.1.74:48080/websocket/message?userId=EN111'
// const wsUrl = 'ws://192.168.1.104:48082/websocket/message?userId=SJG'
let date = new Date().valueOf()
2024-01-05 08:44:31 +08:00
const cutWsUrl = process.env.VUE_APP_Socket_API + `/websocket/message?userId=CUTTING${date}`
2023-12-29 09:00:00 +08:00
this.cutWebsocket = new WebSocket(cutWsUrl)
// 监听 WebSocket 连接
this.cutWebsocket.onopen = this.cutWebsocketOnOpen
// 监听 WebSocket 错误信息
this.cutWebsocket.onerror = this.cutWebsocketOnError
// 监听 WebSocket 消息
this.cutWebsocket.onmessage = this.cutWebsocketOnMessage
// 监听 webSocket 断开信息
this.cutWebsocket.onclose = this.cutWebsocketClose
}
},
2023-12-29 16:29:15 +08:00
funInitWebSocket() {
2024-01-02 09:20:55 +08:00
if (typeof (WebSocket) === 'undefined') {
alert('您的浏览器不支持WebSocket')
} else {
// const wsUrl = 'ws://192.168.1.74:48080/websocket/message?userId=EN111'
// const wsUrl = 'ws://192.168.1.104:48082/websocket/message?userId=SJG'
let date = new Date().valueOf()
const funWsUrl = `ws://10.70.180.10:8081/xc-screen/websocket/${date}`
this.funWebsocket = new WebSocket(funWsUrl)
// 监听 WebSocket 连接
this.funWebsocket.onopen = this.funWebsocketOnOpen
// 监听 WebSocket 错误信息
this.funWebsocket.onerror = this.funWebsocketOnError
// 监听 WebSocket 消息
this.funWebsocket.onmessage = this.funWebsocketOnMessage
// 监听 webSocket 断开信息
this.funWebsocket.onclose = this.funWebsocketClose
}
2023-12-29 16:29:15 +08:00
},
2023-12-29 09:00:00 +08:00
funWebsocketOnOpen() {
console.log('socket连接成功')
this.SJGWebsocket.onmessage()
},
// 连接建立失败重连
funWebsocketOnError(e) {
2023-12-29 16:29:15 +08:00
this.funInitWebSocket()
2023-12-29 09:00:00 +08:00
},
// 数据接收
funWebsocketOnMessage(e) {
2024-01-02 09:20:55 +08:00
this.funWsData = e?.data ? JSON.parse(e?.data) : {}
// FanInfo
if (this.funWsData.type === 'AnnealFanInfo') {
let arr = []
2024-01-23 16:22:25 +08:00
let index = 0
2024-01-02 09:20:55 +08:00
for (let i in this.funWsData.data.annealFanInfo) {
2024-01-23 16:22:25 +08:00
index++,
// let index = 1,
// index++
2024-01-16 16:09:52 +08:00
// arr.push({
// equipmentName: i,
// status: this.funWsData.data.annealFanInfo[i]
// })
arr.push([
// console.log(item)
`
2024-01-24 17:16:05 +08:00
<span style="color:rgba(255,255,255,0.5)" >${index || ''}
2024-01-16 16:09:52 +08:00
</span>`,
// formatDate(item.planStartTime) || '',
`
<span style="color:rgba(255,255,255,0.5)" >${i || ''}
</span>`,
`<span style="color:rgba(255,255,255,0.5)">${this.funWsData.data.annealFanInfo[i] || ''}</span>`,
])
2024-01-02 09:20:55 +08:00
}
2024-01-24 17:16:05 +08:00
this.annealFunConfig.data = arr
2024-01-16 16:09:52 +08:00
this.$refs['annealFanScrollBoard'].updateRows(arr)
2024-01-02 09:20:55 +08:00
}
if (this.funWsData.type === 'FanInfo') {
2023-12-29 16:29:15 +08:00
let arr = []
2024-01-23 16:22:25 +08:00
let index = 0
2024-01-02 09:20:55 +08:00
for (let i in this.funWsData.data.fanInfo) {
2024-01-23 16:22:25 +08:00
index++,
2024-01-16 16:09:52 +08:00
// arr.push({
// equipmentName: i,
// status: this.funWsData.data.fanInfo[i]
// })
arr.push([
// console.log(item)
`
2024-01-24 17:16:05 +08:00
<span style="color:rgba(255,255,255,0.5)" >${index || ''}</span>`,
2024-01-16 16:09:52 +08:00
// formatDate(item.planStartTime) || '',
`
2024-01-23 16:22:25 +08:00
<span style="color:rgba(255,255,255,0.5)" >${i || ''}</span>`,
2024-01-16 16:09:52 +08:00
`<span style="color:rgba(255,255,255,0.5)">${this.funWsData.data.fanInfo[i] || ''}</span>`,
])
2023-12-29 16:29:15 +08:00
}
2024-01-16 16:09:52 +08:00
this.funConfig.data = arr
this.$refs['funScrollBoard'].updateRows(arr)
// this.funList = arr
2023-12-29 09:00:00 +08:00
}
},
cutWebsocketOnOpen() {
console.log('socket连接成功')
this.SJGWebsocket.onmessage()
},
// 连接建立失败重连
cutWebsocketOnError(e) {
2023-12-29 16:29:15 +08:00
this.CutInitWebSocket()
2023-12-29 09:00:00 +08:00
},
2024-01-05 08:44:31 +08:00
getSize(str) {
2024-01-16 16:09:52 +08:00
// console.log(str.match(/\d+(\.\d+)?/g))
2024-01-05 08:44:31 +08:00
let size = str.match(/\d+(\.\d+)?/g).map(ele => {
return parseFloat(ele)
})
2024-01-16 16:09:52 +08:00
// console.log(size[0] + '*' + size[1] + '*' + size[2]);
2024-01-05 08:44:31 +08:00
return size[0] + '*' + size[1] + '*' + size[2]
},
2023-12-29 09:00:00 +08:00
// 数据接收
cutWebsocketOnMessage(e) {
2024-01-02 09:20:55 +08:00
this.cutWsData = e?.data ? JSON.parse(e?.data) : {}
2023-12-29 16:29:15 +08:00
if (this.cutWsData.type === 'cutting' && this.cutWsData.name === 'table') {
2024-01-16 16:09:52 +08:00
// this.cutTableDataList = this.cutWsData.productHourData.map((ele, index) => {
// // if (ele.progressRate != 1) {
// return {
// id: ele.id,
// lineName: ele.lineName,
// time: ele.time,
// size: this.getSize(ele.size),
// productArea: ele.productArea + '㎡',
// wasteArea: ele.wasteArea + '㎡',
// product: (ele.product * 100).toFixed(2)
// }
// // }
// });
let cutArr = this.cutWsData.productHourData.map((item, index) => [
// console.log(item)
`
<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
</span>`,
// formatDate(item.planStartTime) || '',
`
<span style="color:rgba(255,255,255,0.5)" >${item.lineName || ''}
</span>`,
`<span style="color:rgba(255,255,255,0.5)">${formatDate(item.time) || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${this.getSize(item.size) || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.productArea + '㎡' || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.wasteArea + '㎡' || ''}</span>`,
`<div style = "${(item.product * 100).toFixed(2) > 91 ? 'display:block;color:rgba(255,255,255,0.5)' : 'display:none;'}">${(item.product * 100).toFixed(2) + '%' || ''}</div>
<div style = "${(item.product * 100).toFixed(2) < 91 ? 'display:block; color:rgba(255, 209, 96, 1)' : 'display:none;'}">${(item.product * 100).toFixed(2) + '%' || ''}</div>`
])
this.cutConfig.data = cutArr
this.$refs['cutScrollBoard'].updateRows(cutArr)
2023-12-29 16:29:15 +08:00
} else if (this.cutWsData.type === 'cutting' && this.cutWsData.name === 'chart' && this.cutWsData.dateType === 'day') {
2023-12-29 09:00:00 +08:00
let nameList = []
let nameWasteList = []
let topNameList = []
let productList = []
let wasteList = []
let sumAreaList = []
let yieldList = []
2024-01-04 08:33:05 +08:00
// this.cutTableDataList =
2024-01-02 09:20:55 +08:00
this.cutWsData.coldDetData.forEach((ele, index) => {
2023-12-29 09:00:00 +08:00
nameList.push(ele.lineName)
2023-12-29 16:29:15 +08:00
topNameList.push('产线: ' + ele.lineName + ' ' + '总面积:' + ele.sumArea)
2023-12-29 09:00:00 +08:00
productList.push(ele.productArea)
wasteList.push(ele.wastArea)
2023-12-29 16:29:15 +08:00
nameWasteList.push('缺陷面积:' + ele.wastArea)
sumAreaList.push(ele.sumArea)
2023-12-29 16:44:25 +08:00
yieldList.push((ele.yield *100).toFixed(3))
2023-12-29 09:00:00 +08:00
})
this.$refs.pileChart.initChart(nameList, topNameList, nameWasteList, productList, wasteList)
this.$refs.productChart.initChart(nameList, yieldList, sumAreaList)
}
},
SJGWebsocketOnOpen() {
console.log('socket连接成功')
this.SJGWebsocket.onmessage()
},
// 连接建立失败重连
SJGWebsocketOnError(e) {
2023-12-29 16:29:15 +08:00
this.SJGInitWebSocket()
2023-12-29 09:00:00 +08:00
},
// 数据接收
SJGWebsocketOnMessage(e) {
// let data = { "data": { "FanFrequencyInfo": { "1#10处拐角冷却风机": "0", "1#L型吊墙冷却风机": "0", "1#助燃风机": "44.8", "1#澄清带池壁风机": "40", "1#融化带池壁风机": "43", "1#钢碹碴小炉垛风机": "48", "2#10处拐角冷却风机": "50", "2#L型吊墙冷却风机": "49.7", "2#助燃风机": "0", "2#澄清带池壁风机": "0", "2#融化带池壁风机": "0", "2#钢碹碴小炉垛风机": "48", "3#澄清带池壁风机": "0", "3#融化带池壁风机": "0", "4#澄清带池壁风机": "40", "4#融化带池壁风机": "43" } }, "type": "FanFrequencyInfo" }
// let obj = JSON.parse(data.data)
2024-01-02 09:20:55 +08:00
this.SJGWsData = e?.data ? JSON.parse(e?.data) : {}
2023-12-29 16:29:15 +08:00
if (this.SJGWsData.type === 'isra') {
2024-01-16 16:09:52 +08:00
// this.ISRAList = this.SJGWsData.detData.map((ele, index) => {
// // if (ele.progressRate != 1) {
// return {
// id: ele.id,
// linename: ele.linename,
// type: ele.type,
// num: ele.num,
// time:ele.time,
// percent: ele.percent
// }
// // }
// });
console.log(this.SJGWsData.detData);
let ISRAArr = this.SJGWsData.detData.map((item, index) => [
// console.log(item)
`<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
</span>`,
// formatDate(item.planStartTime) || '',
`
<span style="color:rgba(255,255,255,0.5)" >${item.linename || ''}
</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.time || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.type || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.num || ''}</span>`,
2024-01-18 14:10:49 +08:00
`<span style="color:rgba(255,255,255,0.5)">${(item.percent * 100).toFixed(2) || ''}</span>`,
2024-01-16 16:09:52 +08:00
])
this.ISRAConfig.data = ISRAArr
this.$refs['ISRAScrollBoard'].updateRows(ISRAArr)
2024-01-05 08:44:31 +08:00
} else if (this.SJGWsData.type === 'equipment') {
2024-01-16 16:09:52 +08:00
this.realEqList = this.SJGWsData.detData.map((ele, index) =>[
// console.log(item)
`<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
</span>`,
// formatDate(item.planStartTime) || '',
`
<span style="color:rgba(255,255,255,0.5)" >${item.line || ''}
</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.name || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.code || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.run || ''}</span>`,
`<span style="color:rgba(255,255,255,0.5)">${item.error || ''}</span>`,
]);
2023-12-29 09:00:00 +08:00
}
2024-01-16 16:09:52 +08:00
this.realEqConfig.data = this.realEqList
this.$refs['realEqScrollBoard'].updateRows(this.realEqList)
2023-12-29 09:00:00 +08:00
},
2023-11-15 09:08:20 +08:00
windowWidth(value) {
this.clientWidth = value
2023-11-23 14:32:53 +08:00
this.beilv2 = this.clientWidth / 1920
2023-11-15 09:08:20 +08:00
},
// fetchList(type) {
// switch (type) {
// case 'order-process':
// return axios({
// url: '/analysis/factory-monitor/order',
// method: 'post'
// }).then(res => {
// if (res.data) {
// this.orderProcessList = res.data
// // this.orderProcessList = [
// // { id: 1, name: '订单1', outRate: 0.5 },
// // { id: 2, name: '订单2', outRate: 0.54 },
// // { id: 3, name: '订单3', outRate: 0.45 },
// // { id: 4, name: '订单4', outRate: 0.65 },
// // { id: 5, name: '订单5', outRate: 0.35 },
// // { id: 6, name: '订单6', outRate: 0.15 },
// // { id: 7, name: '订单7', outRate: 0.5 },
// // { id: 8, name: '订单8', outRate: 0.5 }
// // ]
// } else {
// this.orderProcessList.splice(0)
// }
// })
// }
// },
change() {
this.isFullScreen = screenfull.isFullscreen
},
init() {
if (screenfull.enabled) {
screenfull.on('change', this.change)
}
},
destroy() {
if (screenfull.enabled) {
screenfull.off('change', this.change)
}
},
changeFullScreen() {
2023-12-29 09:00:00 +08:00
this.containerWidth = 223223223
2023-11-15 09:08:20 +08:00
if (!screenfull.enabled) {
this.$message({
message: 'you browser can not work',
type: 'warning'
})
return false
}
screenfull.toggle(this.$refs.container)
2023-12-29 09:00:00 +08:00
}
2023-11-15 09:08:20 +08:00
}
}
</script>
<style lang="scss" scoped>
.visual-container {
width: 1920px;
height: 1080px;
background: url('../../assets/img/OperationalOverview/back.png') no-repeat;
background-size: cover;
2023-12-29 09:00:00 +08:00
// opacity: .8;
2023-11-15 09:08:20 +08:00
.container-title {
width: 100%;
background: url('../../assets/img/OperationalOverview/title.png') no-repeat;
background-size: 100% 100%;
2024-01-12 10:00:17 +08:00
color: rgba(0, 255, 247, 1);
2023-11-15 09:08:20 +08:00
text-align: center;
2023-12-29 09:00:00 +08:00
.unit {
2023-12-19 16:32:12 +08:00
position: absolute;
left: 260px;
top: 25px;
2024-01-12 10:00:17 +08:00
color: rgba(255, 255, 255, 0.80);
2023-12-19 16:32:12 +08:00
font-size: 20px;
}
2023-12-29 09:00:00 +08:00
2023-12-19 16:32:12 +08:00
.time {
position: absolute;
left: 1360px;
2024-01-12 10:00:17 +08:00
color: rgba(255, 255, 255, 0.80);
2023-12-19 16:32:12 +08:00
top: 25px;
font-size: 20px;
}
2023-12-29 09:00:00 +08:00
2023-11-15 09:08:20 +08:00
.title-button {
2024-01-12 10:00:17 +08:00
color: rgba(255, 255, 255, 0.80);
2023-11-15 09:08:20 +08:00
font-size: 20px;
position: absolute;
}
}
2023-12-29 09:00:00 +08:00
2023-11-15 09:08:20 +08:00
.container-main {
2023-12-29 09:00:00 +08:00
padding: 10px;
2023-11-15 09:08:20 +08:00
}
}
.now-team-title {
margin: 0;
margin-top: -1em;
font-size: 1.2em;
line-height: 2em;
color: #fff;
}
.main-title {
text-align: center;
}
.now-secondary-title {
margin: 0;
font-size: 1em;
line-height: 2em;
color: #fff;
}
.now-team-content {
font-size: 3em;
line-height: 1em;
color: #52fff1;
text-align: center;
}
::v-deep .el-progress-bar__inner {
background-color: unset;
background-image: linear-gradient(to right, #4573fe, #47f8dc);
}
2023-12-29 09:00:00 +08:00
.visual-select {
position: absolute;
right: 1em;
top: 2em;
}
// .container-main {
// padding: 5px;
// }
2023-11-15 09:08:20 +08:00
</style>
2023-12-29 09:00:00 +08:00
<style lang="scss">
2024-01-24 17:16:05 +08:00
.eqLine{
height: 290px;
width: 1px;
position: absolute;
left: 25%;
top: 12%;
background: linear-gradient(to bottom,rgba(60,
231,
255,0), #3CE7FF, rgba(60,
231,
255, 0));
}
.eqLineTwo {
height: 290px;
width: 1px;
position: absolute;
left: 50%;
top: 12%;
background: linear-gradient(to bottom, rgba(60,
231,
255, 0), #3CE7FF, rgba(60,
231,
255, 0));
}
2023-11-15 09:08:20 +08:00
.visual-container {
::-webkit-scrollbar {
width: 8px;
height: 8px;
background-color: transparent;
}
::-webkit-scrollbar-track-piece {
background: #1b2b3d;
}
::-webkit-scrollbar-corner {
background: #1b2b3d;
}
::-webkit-scrollbar-track {
width: 6px;
background: #1b2b3d;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
}
::-webkit-scrollbar-thumb {
background: rgba($color: #5bc4be, $alpha: 0.7);
background-clip: padding-box;
min-height: 28px;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
transition: background-color 0.3s;
cursor: pointer;
}
::-webkit-scrollbar-thumb:hover {
background-color: rgba($color: #5bc4be, $alpha: 1);
}
}
2023-12-29 09:00:00 +08:00
.coldSelect {
2023-11-23 14:32:53 +08:00
.el-input {
2023-12-29 09:00:00 +08:00
min-height: 10px;
}
2023-11-15 09:08:20 +08:00
2023-12-29 09:00:00 +08:00
.el-input__inner {
background-color: rgba($color: #31878c, $alpha: 0.29);
border: rgba($color: #31878c, $alpha: 0.29);
color: aliceblue;
}
2023-11-15 09:08:20 +08:00
2023-12-29 09:00:00 +08:00
.el-divider--vertical {
height: 174px;
width: 1px;
border: rgba(255, 255, 255, 0.15);
color: rgba(255, 255, 255, 0.15);
margin-left: 3em;
}
2023-11-23 14:32:53 +08:00
}
2023-11-15 09:08:20 +08:00
</style>
<style scoped>
.flex-col {
flex-direction: column;
}
.flex-1 {
flex: 1 1;
}
2023-12-29 09:00:00 +08:00
.h-full {
height: calc(100vh - 150px);
2023-11-15 09:08:20 +08:00
}
2023-12-29 09:00:00 +08:00
2023-11-15 09:08:20 +08:00
/* .container-main {
min-height: calc(100vh - 10em);
} */
2024-01-16 16:09:52 +08:00
.orange {
color: rgba(255, 209, 96, 1)
}
.white {
color: rgba(255, 255, 255, 0.5)
}
.tooltip {
position: relative;
display: inline-block;
}
.tooltip .tooltiptext {
visibility: hidden;
width: 120px;
background-color: black;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
bottom: 150%;
left: 50%;
margin-left: -60px;
}
.tooltip .tooltiptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: black transparent transparent transparent;
}
.tooltip:hover .tooltiptext {
visibility: visible;
}
2023-11-15 09:08:20 +08:00
</style>