diff --git a/.env.dev b/.env.dev index 14470802..44f8ea48 100644 --- a/.env.dev +++ b/.env.dev @@ -13,7 +13,11 @@ VUE_APP_TITLE = MES系统 # 芋道管理系统/开发环境 # VUE_APP_BASE_API = 'http://100.64.0.26:48082' -VUE_APP_BASE_API = 'http://10.70.2.2:8080' + +# VUE_APP_BASE_API = 'http://192.168.0.33:48082' + +# VUE_APP_BASE_API = 'http://10.70.2.2:8080' + # VUE_APP_BASE_API = 'http://192.168.4.173:48080' # VUE_APP_BASE_API = 'http://192.168.2.173:48080' # VUE_APP_BASE_API = 'http://192.168.1.49:48082' @@ -23,6 +27,8 @@ VUE_APP_BASE_API = 'http://10.70.2.2:8080' # VUE_APP_BASE_API = 'http://192.168.1.62:48082' # VUE_APP_BASE_API = 'http://192.168.1.78:48082' + +VUE_APP_BASE_API = 'http://100.64.0.23:48082' # 积木报表指向地址 VUE_APP_JIMU_API = 'http://10.70.2.22:8080' diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue index ca436de0..7b7b76fc 100644 --- a/src/layout/components/TagsView/index.vue +++ b/src/layout/components/TagsView/index.vue @@ -48,6 +48,7 @@ + + diff --git a/src/views/databoard/components/GasChart.vue b/src/views/databoard/components/GasChart.vue index 5b70f50e..3a7b46f9 100644 --- a/src/views/databoard/components/GasChart.vue +++ b/src/views/databoard/components/GasChart.vue @@ -17,7 +17,10 @@ export default { name: 'GasChart', mixins: [resize], components: {}, - props: {}, + props: { + chartType: '', // 能源类型 + chartTime: '' + }, data() { const colors = [ '#12FFF5', @@ -30,22 +33,154 @@ export default { '#2aa1ff', ]; return { - chart: null, - option: { - color: colors, - grid: { top: 32, right: 12, bottom: 20, left: 48 }, - xAxis: { - type: 'category', - data: Array(7) + chart: null + }; + }, + computed: { + gasChartMsg() { + return this.$store.state.websocket.sumGasInfo + }, + energyWeekTrend() { + return this.$store.state.websocket.energyWeekTrend + }, + energyMonthTrend() { + return this.$store.state.websocket.energyMonthTrend + }, + energyYearTrend() { + return this.$store.state.websocket.energyYearTrend + } + }, + watch: { + energyWeekTrend: {// 监听时间变化,更新图 + handler(newVal, oldVal) { + if (this.chartTime === '周' && this.chartType === '电耗能') { + this.updateChart() + } + } + }, + energyMonthTrend: {// 监听时间变化,更新图 + handler(newVal, oldVal) { + if (this.chartTime === '月' && this.chartType === '电耗能') { + this.updateChart() + } + } + }, + energyYearTrend: {// 监听时间变化,更新图 + handler(newVal, oldVal) { + if (this.chartTime === '年' && this.chartType === '电耗能') { + this.updateChart() + } + } + }, + chartTime: {// 监听时间变化,更新图 + handler(newVal, oldVal) { + this.updateChart() + } + }, + chartType: {// 监听能源类型变化,更新图 + handler(newVal, oldVal) { + this.updateChart() + } + } + }, + mounted() { + this.$el.addEventListener('resize', () => { + console.log('resziing.....'); + }); + this.updateChart() + }, + methods: { + updateChart() { + let gasName = '' + const colors = ['#FFCB59']; + let temp = [] + let seriesData = [] + let xData = [] + let yData = [] + switch (this.chartType) { + case '电耗能':{ + gasName = '电耗能' + if (this.chartTime === '周') { + temp = this.energyWeekTrend || [] + }else if(this.chartTime === '月') { + temp = this.energyMonthTrend || [] + }else{ + temp = this.energyYearTrend || [] + } + temp && temp.map(i => { + xData.push(i.time) + yData.push(i.qty) + }) + break; + } + case '天然气I':{ + yData = this.gasChartMsg.hisSumGas1 || [] + gasName = '天然气I' + xData = Array(7) .fill(1) .map((_, index) => { const today = new Date(); - const dtimestamp = today - index * 24 * 60 * 60 * 1000; + const dtimestamp = today - (index+1) * 24 * 60 * 60 * 1000; return `${new Date(dtimestamp).getMonth() + 1}.${new Date( dtimestamp ).getDate()}`; }) - .reverse(), + .reverse() + break; + } + default: + gasName = '天然气II' + yData = this.gasChartMsg.hisSumGas2 || [] + xData = Array(7) + .fill(1) + .map((_, index) => { + const today = new Date(); + const dtimestamp = today - (index+1) * 24 * 60 * 60 * 1000; + return `${new Date(dtimestamp).getMonth() + 1}.${new Date( + dtimestamp + ).getDate()}`; + }) + .reverse() + } + if (yData.length == 0) { + seriesData = [] + }else { + seriesData = [{ + name: gasName, + data: yData, + type: "line", + areaStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { offset: 0, color: '#FFCB59' + "40" }, + { offset: 0.5, color: '#FFCB59' + "20" }, + { offset: 1, color: '#FFCB59' + "00" }, + ]), + }, + lineStyle: { + width: 1 + }, + symbolSize: 1, + emphasis: { + focus: 'series' + } + }] + + } + // 绘图 + if ( + this.chart !== null && + this.chart !== '' && + this.chart !== undefined + ) { + this.chart.dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例 + } + this.chart = echarts.init(this.$el); + var option = { + color: colors, + grid: { top: 32, right: 12, bottom: 20, left: 48 }, + xAxis: { + type: 'category', + data: xData, axisLabel: { color: '#fff', fontSize: 12, @@ -82,71 +217,14 @@ export default { }, }, }, - series: [ - Array(7) - .fill(1) - .map((_) => Math.ceil(Math.random() * 100)), - Array(7) - .fill(1) - .map((_) => Math.ceil(Math.random() * 100)), - Array(7) - .fill(1) - .map((_) => Math.ceil(Math.random() * 100)), - ].map((v, i) => ({ - name: ['总量', '白班', '夜班'][i], - data: v, - type: 'line', - symbol: 'circle', - areaStyle: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - // i % 8 避免超过8个数据时无颜色的问题 - { offset: 0, color: colors[i % 8] + '40' }, - { offset: 0.5, color: colors[i % 8] + '20' }, - { offset: 1, color: colors[i % 8] + '00' }, - ]), - }, - })), + series: seriesData, tooltip: { trigger: 'axis', }, - }, - }; - }, - computed: { - sidebarStatus() { - return this.$store.state.app.sidebar.opened; - }, - gasChartMsg() { - return this.$store.state.websocket.gasInfo - } - }, - watch: { - sidebarStatus(val) { - console.log('sidebarStatus', val); - this.chart && this.chart.dispose(); - - setTimeout(() => { - this.chart = echarts.init(this.$el); - this.chart.setOption(this.option); - }, 500); - }, - gasChartMsg: { - handler(newVal, oldVal) { - console.log(newVal) - // this.chartData = newVal - console.log('newVal============') - // this.updateChart() } + option && this.chart.setOption(option) } }, - mounted() { - this.$el.addEventListener('resize', () => { - console.log('resziing.....'); - }); - this.chart = echarts.init(this.$el); - this.chart.setOption(this.option); - }, - methods: {}, }; diff --git a/src/views/databoard/components/ISRAChart.vue b/src/views/databoard/components/ISRAChart.vue index 49b0968a..bc56c004 100644 --- a/src/views/databoard/components/ISRAChart.vue +++ b/src/views/databoard/components/ISRAChart.vue @@ -1,10 +1,3 @@ - - @@ -68,9 +61,7 @@ export default { watch: { israChartMsg: { handler(newVal, oldVal) { - console.log(newVal) this.chartData = newVal - console.log('newVal============') this.updateChart() } } @@ -99,48 +90,18 @@ export default { color: '#fff', }, subtextStyle: { - fontSize: 16, + fontSize: 20, color: '#fff00', }, }, series:[{ - name: 'Access From', + name: 'ISRA缺陷检测', type: 'pie', - radius: ['45%', '65%'], + center: ['50%', '40%'], + radius: ['45%', '70%'], avoidLabelOverlap: true, label: { - show: true, - position: 'outside', - formatter: ({ dataIndex, percent }) => { - const styleName = ['a', 'b', 'c', 'd'][dataIndex % 4]; - return `{${styleName}|${percent}%}`; - }, - rich: { - a: { - color: '#2760ff', - fontSize: 24, - borderWidth: 0, - textBorderWidth: 0, - }, - b: { - color: '#518eec', - fontSize: 24, - borderWidth: 0, - textBorderWidth: 0, - }, - c: { - color: '#0ee8e4', - fontSize: 24, - borderWidth: 0, - textBorderWidth: 0, - }, - d: { - color: '#ddb523', - fontSize: 24, - borderWidth: 0, - textBorderWidth: 0, - }, - }, + show: false }, labelLine: { show: true, diff --git a/src/views/databoard/components/SelectorBtnGroup.vue b/src/views/databoard/components/SelectorBtnGroup.vue index 5df5b3a9..0fc4e90e 100644 --- a/src/views/databoard/components/SelectorBtnGroup.vue +++ b/src/views/databoard/components/SelectorBtnGroup.vue @@ -11,7 +11,7 @@ class="btn" v-for="opt in options" :key="opt" - @click="active = opt" + @click="clickBtn(opt)" :class="active == opt ? 'btn-active' : ''"> {{ opt }} @@ -22,15 +22,18 @@ export default { name: 'SelectorBtnGroup', components: {}, - props: ['options'], + props: ['options', 'active'], data() { return { - active: this.options[0] || 'default' + // active: this.options[0] || 'default' }; }, computed: {}, methods: { - + clickBtn(opt) { + // this.active = opt + this.$emit('emitFun', opt) + } }, }; diff --git a/src/views/databoard/deepProcessing/index.vue b/src/views/databoard/deepProcessing/index.vue index be0a7d28..2515dd91 100644 --- a/src/views/databoard/deepProcessing/index.vue +++ b/src/views/databoard/deepProcessing/index.vue @@ -6,10 +6,10 @@ class="deepProcessingBoard" style=" position: absolute; - transform-origin: 16px 8px; + transform-origin: left top; font-size: 16px; - top: -8px; - left: -16px; + top: 0px; + left: 0px; width: 1920px; height: 1080px; display: flex; @@ -18,6 +18,17 @@ " :style="{transform:'scale('+scaleNum+')'}"> + +
@@ -103,14 +114,14 @@ export default { }) return false } - screenfull.toggle(this.$refs.wholePlantContainerB) + screenfull.toggle(this.$refs.deepProcessingContainerB) }, resetSize() { - let wholePlantContainerBox = document.querySelector('#wholePlantContainer') + let deepProcessingContainer = document.querySelector('#deepProcessingContainer') let rw = parseFloat(window.innerWidth) let rh = parseFloat(window.innerHeight) - let bw = parseFloat(wholePlantContainerBox.style.width) - let bh = parseFloat(wholePlantContainerBox.style.height) + let bw = parseFloat(deepProcessingContainer.style.width) + let bh = parseFloat(deepProcessingContainer.style.height) let wx = 0 let hx = 0 if (screenfull.isFullscreen) { diff --git a/src/views/databoard/kiln/EnergeCost.vue b/src/views/databoard/kiln/EnergeCost.vue index 53fedfc0..c3003b2a 100644 --- a/src/views/databoard/kiln/EnergeCost.vue +++ b/src/views/databoard/kiln/EnergeCost.vue @@ -31,24 +31,24 @@ justify-content: space-between; "> - + :options="['电耗能', '天然气I', '天然气II']" @emitFun='toggleType' :active='chartType'/> +
- +
diff --git a/src/views/databoard/kiln/FanSequence.vue b/src/views/databoard/kiln/FanSequence.vue index ca8b8648..c23c6316 100644 --- a/src/views/databoard/kiln/FanSequence.vue +++ b/src/views/databoard/kiln/FanSequence.vue @@ -7,13 +7,13 @@ + \ No newline at end of file diff --git a/src/views/databoard/wholePlant/LeftTwo.vue b/src/views/databoard/wholePlant/LeftTwo.vue index 0a21c83e..f3f1a075 100644 --- a/src/views/databoard/wholePlant/LeftTwo.vue +++ b/src/views/databoard/wholePlant/LeftTwo.vue @@ -4,7 +4,7 @@ style=" display: grid; gap: 16px; - grid-template-rows: 462px 462px; + grid-template-rows: 308px 616px; "> diff --git a/src/views/databoard/wholePlant/MiddleTwo.vue b/src/views/databoard/wholePlant/MiddleTwo.vue index 9a65aeba..3c974b92 100644 --- a/src/views/databoard/wholePlant/MiddleTwo.vue +++ b/src/views/databoard/wholePlant/MiddleTwo.vue @@ -4,19 +4,19 @@ style=" display: grid; gap: 16px; - grid-template-rows: 462px 462px; + grid-template-rows: 605px 320px; "> - - + + \ No newline at end of file + + \ No newline at end of file diff --git a/src/views/databoard/wholePlant/RightTwo.vue b/src/views/databoard/wholePlant/RightTwo.vue index 0cc9ec58..0d444ac2 100644 --- a/src/views/databoard/wholePlant/RightTwo.vue +++ b/src/views/databoard/wholePlant/RightTwo.vue @@ -6,17 +6,17 @@ gap: 16px; grid-template-rows: 462px 462px; "> - + \ No newline at end of file + + \ No newline at end of file diff --git a/src/views/databoard/wholePlant/index.vue b/src/views/databoard/wholePlant/index.vue index d1941e73..dd9cdf37 100644 --- a/src/views/databoard/wholePlant/index.vue +++ b/src/views/databoard/wholePlant/index.vue @@ -8,8 +8,8 @@ position: absolute; transform-origin: 16px 8px; font-size: 16px; - top: -8px; - left: -16px; + top: 0px; + left: 0px; width: 1920px; height: 1080px; display: flex; @@ -42,7 +42,6 @@ import MiddleTwo from './MiddleTwo'; import RightTwo from './RightTwo'; import screenfull from 'screenfull' import { debounce } from '@/utils/debounce' -import { getDcsMsg, getMesMsg } from './../utils/wsInterface' export default { name: 'wholePlantBoard', @@ -77,9 +76,6 @@ export default { window.addEventListener('resize', () => { this.boxReset() }) - // closeWebsocket() - // getDcsMsg() - // getMesMsg() console.log('mounted...........') }, destroyed() { diff --git a/src/websocket/websocket.js b/src/websocket/websocket.js new file mode 100644 index 00000000..49467b81 --- /dev/null +++ b/src/websocket/websocket.js @@ -0,0 +1,176 @@ +/** + * 发起websocket请求函数 + * @param {string} url ws连接地址 + * @param {Object} agentData 传给后台的参数 + * @param {function} successCallback 接收到ws数据,对数据进行处理的回调函数 + * @param {function} errCallback ws连接错误的回调函数 + */ +export function WsConnect(url, agentData, successCallback, errCallback) { + this.wsUrl = url; + this.wsObj = null; + // 是否执行重连 true/不执行 ; false/执行 + this.lockReconnect = false; + // 重连定时器 + this.wsCreateHandler = null; + // 连接成功,执行回调函数 + this.messageCallback = successCallback; + // 连接失败,执行回调函数 + this.errorCallback = errCallback; + // 发送给后台的数据 + this.sendDatas = agentData; + // 创建ws函数 + this.createWebSoket = () => { + if (typeof WebSocket === "undefined") { + writeToScreen("您的浏览器不支持WebSocket,无法获取数据"); + return false; + } + try { + this.wsObj = new WebSocket(url); + initWsEventHandle(); + } catch (e) { + writeToScreen("连接异常,开始重连"); + reconnect(); + } + }; + // 手动关闭websocket (这里手动关闭会执行onclose事件) + this.closeWebsocket = () => { + if (this.wsObj) { + writeToScreen("手动关闭websocket"); + this.wsObj.close(); // 关闭websocket + // this.wsObj.onclose() // 关闭websocket(如果上面的关闭不生效就加上这一条) + // 关闭重连 + this.lockReconnect = true; + this.wsCreateHandler && clearTimeout(this.wsCreateHandler); + // 关闭心跳检查 + heartCheck.stop(); + } + }; + const initWsEventHandle = () => { + try { + // 连接成功 + this.wsObj.onopen = (event) => { + onWsOpen(event); + heartCheck.start(); + }; + + // 监听服务器端返回的信息 + this.wsObj.onmessage = (event) => { + onWsMessage(event); + heartCheck.start(); + }; + + this.wsObj.onclose = (event) => { + writeToScreen("onclose执行关闭事件"); + onWsClose(event); + }; + + this.wsObj.onerror = (event) => { + writeToScreen("onerror执行error事件,开始重连"); + onWsError(event); + reconnect(); + }; + } catch (err) { + writeToScreen("绑定事件没有成功,开始重连"); + reconnect(); + } + }; + + const onWsOpen = (event) => { + writeToScreen("CONNECT"); + // // 客户端与服务器端通信 + // wsObj.send('我发送消息给服务端'); + // 添加状态判断,当为OPEN时,发送消息 + if (this.wsObj.readyState === this.wsObj.OPEN) { + // wsObj.OPEN = 1 + // 发给后端的数据需要字符串化 + this.wsObj.send(JSON.stringify(this.sendDatas)); + } + if (this.wsObj.readyState === this.wsObj.CLOSED) { + // wsObj.CLOSED = 3 + writeToScreen("wsObj.readyState=3, ws连接异常,开始重连"); + reconnect(); + this.errorCallback(event); + } + }; + const onWsMessage = (event) => { + const jsonStr = event.data; + writeToScreen("onWsMessage接收到服务器的数据: ", jsonStr); + this.messageCallback(jsonStr); + }; + const onWsClose = (event) => { + writeToScreen("DISCONNECT"); + // e.code === 1000 表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。 + // e.code !== 1000 表示非正常关闭。 + console.log("onclose event: ", event); + if (event && event.code !== 1000) { + writeToScreen("非正常关闭"); + this.errorCallback(event); + // 如果不是手动关闭,这里的重连会执行;如果调用了手动关闭函数,这里重连不会执行 + reconnect(); + } + }; + const onWsError = (event) => { + writeToScreen("onWsError: ", event.data); + this.errorCallback(event); + }; + + const writeToScreen = (massage) => { + console.log(massage); + }; + + // 重连函数 + const reconnect = () => { + if (this.lockReconnect) { + return; + } + writeToScreen("3秒后重连"); + this.lockReconnect = true; + // 没连接上会一直重连,设置延迟避免请求过多 + this.wsCreateHandler && clearTimeout(this.wsCreateHandler); + this.wsCreateHandler = setTimeout(() => { + writeToScreen("重连..." + this.wsUrl); + this.createWebSoket(); + this.lockReconnect = false; + writeToScreen("重连完成"); + }, 3000); + }; + + // 心跳检查(看看websocket是否还在正常连接中) + let heartCheck = { + timeout: 15000, + timeoutObj: null, + serverTimeoutObj: null, + // 重启 + reset() { + clearTimeout(this.timeoutObj); + clearTimeout(this.serverTimeoutObj); + this.start(); + }, + // 停止 + stop() { + clearTimeout(this.timeoutObj); + clearTimeout(this.serverTimeoutObj); + }, + // 开启定时器 + start() { + this.timeoutObj && clearTimeout(this.timeoutObj); + this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj); + // 15s之内如果没有收到后台的消息,则认为是连接断开了,需要重连 + this.timeoutObj = setTimeout(() => { + writeToScreen("心跳检查,发送ping到后台"); + try { + const datas = { ping: true }; + this.wsObj.send(JSON.stringify(datas)); + } catch (err) { + writeToScreen("发送ping异常"); + } + console.log("内嵌定时器this.serverTimeoutObj: ", this.serverTimeoutObj); + // 内嵌定时器 + this.serverTimeoutObj = setTimeout(() => { + writeToScreen("没有收到后台的数据,重新连接"); + reconnect(); + }, this.timeout); + }, this.timeout); + }, + }; +} diff --git a/src/websocket/wsInterface.js b/src/websocket/wsInterface.js new file mode 100644 index 00000000..3572dc58 --- /dev/null +++ b/src/websocket/wsInterface.js @@ -0,0 +1,160 @@ +import { WsConnect } from './websocket' +import store from "@/store"; + +// 创建websocket链接 + +const timestr = new Date().getTime() +const dcsConn = new WsConnect( + // websocket地址 + 'ws://10.70.180.10:8081/xc-screen/websocket/dcsmsg'+timestr, + // 传递给后台的数据 + '', + (data) => { + // console.log('dcs成功的回调函数, 接收到的data数据: ', data) + let msgData = JSON.parse(data) + if (msgData == null) return; + switch (msgData?.type) { + case "FanFrequencyInfo": { + store.dispatch({type: "websocket/setFanFrequencyInfo", payload:msgData.data.FanFrequencyInfo}) + break; + } + case "KilnInfo": { + store.dispatch({type: "websocket/setKilnInfo", payload: msgData.data}) + break; + } + case "GasInfo": { + store.dispatch({type: "websocket/setGasInfo", payload: msgData.data}) + break; + } + case "SumGasInfo": { + store.dispatch({type: "websocket/setSumGasInfo", payload: msgData.data}) + break; + } + default: + } + }, + (err) => { + console.log('失败的回调函数', err) + } +) +const mesIsra = new WsConnect( + 'ws://10.70.2.2:8080/websocket/message?userId=KILN'+timestr, + '', + (data) => { + // console.log('mes ISRA成功的回调函数, 接收到的data数据: ', data) + let msgData = JSON.parse(data) + // console.log(msgData) + if (msgData == null) return; + switch (msgData?.type) { + case "israKiln": { + store.dispatch({type: "websocket/setIsraKiln", payload:msgData.detData.dayStatistic}) + break; + } + // case "KilnInfo": { + // // store.dispatch({type: "websocket/setKilnInfo", payload: msgData.data.kilnInfo}) + // break; + // } + default: + } + }, + (err) => { + console.log('失败的回调函数', err) + } +) + +// 原料 MA +const mesMA = new WsConnect( + 'ws://10.70.2.2:8080/websocket/message?userId=MA'+timestr, + '', + (data) => { + // console.log('mes 原料成功的回调函数, 接收到的data数据: ', data) + let msgData = JSON.parse(data) + if (msgData == null) return; + switch (msgData?.type) { + case "material": { + store.dispatch({type: "websocket/setMaterial", payload:msgData.data}) + break; + } + // case "KilnInfo": { + // // store.dispatch({type: "websocket/setKilnInfo", payload: msgData.data.kilnInfo}) + // break; + // } + default: + } + }, + (err) => { + console.log('失败的回调函数', err) + } +) +// 能耗 EN +const mesEN = new WsConnect( + // websocket地址 + 'ws://10.70.2.2:8080/websocket/message?userId=ENERGY'+timestr, + // 传递给后台的数据 + '', + // 成功拿到后台返回的数据的回调函数 + (data) => { + // console.log('mes 能耗成功的回调函数, 接收到的data数据: ', data) + let msgData = JSON.parse(data) + if (msgData == null) return; + switch (msgData?.type) { + case "EnergyInfo": { + store.dispatch({type: "websocket/setEnergyInfo", payload:msgData.data}) + break; + } + case "EnergyTrend": { + store.dispatch({type: "websocket/setEnergyTrend", payload:msgData.data}) + break; + } + default: + } + }, + // websocket连接失败的回调函数 + (err) => { + console.log('失败的回调函数', err) + } +) +// 烟气 GAS +const mesGAS = new WsConnect( + // websocket地址 + 'ws://10.70.2.2:8080/websocket/message?userId=GAS'+timestr, + // 传递给后台的数据 + '', + // 成功拿到后台返回的数据的回调函数 + (data) => { + // console.log('mes 烟气成功的回调函数, 接收到的data数据: ', data) + let msgData = JSON.parse(data) + if (msgData == null) return; + switch (msgData?.type) { + case "exhaustGas": { + store.dispatch({type: "websocket/setExhaustGasInfo", payload:msgData.realtime}) + store.dispatch({type: "websocket/setExhaustGasChart", payload:{ + dayTrend: msgData.dayTrend, + weekTrend: msgData.weekTrend, + monthTrend: msgData.monthTrend, + yearTrend: msgData.yearTrend, + }}) + break; + } + default: + } + }, + // websocket连接失败的回调函数 + (err) => { + console.log('失败的回调函数', err) + } +) +export const getDcsMsg = () => { + dcsConn.createWebSoket() + mesIsra.createWebSoket() + mesMA.createWebSoket() + mesEN.createWebSoket() + mesGAS.createWebSoket() +} +export const closeDcsMsg = () => { + dcsConn.closeWebsocket() + mesIsra.closeWebsocket() + mesMA.closeWebsocket() + mesEN.closeWebsocket() + mesGAS.closeWebsocket() +} \ No newline at end of file