Browse Source

1. 解决局部风机按钮点不动的问题

hongrunxia 6 months ago
parent
commit
6ad22c6449

+ 1 - 1
public/js/config.js

@@ -1,7 +1,7 @@
 const VUE_APP_URL = {
   baseUrl: "/modelreq", // 后台地址
   webRtcUrl: '/webRtc', // rtsp服务器IP地址
-  wsUrl: 'http://182.92.126.35' // WebSocket 地址
+  wsUrl: 'http://182.92.126.35:9999' // WebSocket 地址
 }
 const History_Type = {
   // type: 'remote', // remote、vent  (remote 代表的是历史查询走的装备院的接口,vent是走的咱们的,目前神东的项目都用remote, 其他矿用vent)

+ 7 - 7
src/hooks/web/useWebSocket.ts

@@ -13,27 +13,28 @@ const listeners = new Map();
  */
 export function connectWebSocket(url: string) {
   //update-begin-author:taoyan date:2022-4-24 for: v2.4.6 的 websocket 服务端,存在性能和安全问题。 #3278
-  let token = (getToken() || '') as string;
+  const token = (getToken() || '') as string;
   result = useWebSocket(url, {
     // 自动重连 (遇到错误最多重复连接10次)
     autoReconnect: {
-      retries : 10,
-      delay : 5000
+      retries: 10,
+      delay: 5000,
     },
     // 心跳检测
     heartbeat: {
-      message: "ping",
-      interval: 55000
+      message: 'ping',
+      interval: 55000,
     },
     protocols: [token],
   });
   //update-end-author:taoyan date:2022-4-24 for: v2.4.6 的 websocket 服务端,存在性能和安全问题。 #3278
   if (result) {
+    console.log('WebSocket连接通了', result);
     result.open = onOpen;
     result.close = onClose;
 
     const ws = unref(result.ws);
-    if(ws!=null){
+    if (ws != null) {
       ws.onerror = onError;
       ws.onmessage = onMessage;
     }
@@ -68,7 +69,6 @@ function onMessage(e) {
   }
 }
 
-
 /**
  * 添加 WebSocket 消息监听
  * @param callback

+ 39 - 29
src/layouts/default/header/components/VoiceBroadcast.vue

@@ -1,35 +1,43 @@
 <template>
-  <div class="btn" @click="showWarningBroad">
-    <!-- <div>语音播报</div>
+  <div style="position: fixed; z-index: 999; right: 100px; top: 18px; color: #fff">
+    <div class="btn" @click="showWarningBroad">
+      <!-- <div>语音播报</div>
     <a-badge :count="10">
       <a href="#" class="head-example"></a>
     </a-badge> -->
-    <a-badge dot>
-      <BellOutlined style="font-size: 20px" />
-    </a-badge>
-  </div>
-  <div v-if="isShowWarningBroad" class="broadcast">
-    <div class="title">
-      <div class="message-title">消息通知</div>
-      <div class="badge-box">
-        <SoundOutlined style="font-size: 20px; color: #000" />
-      </div>
+      <a-badge dot>
+        <BellOutlined style="font-size: 20px; color: #fff" />
+      </a-badge>
     </div>
-    <div class="broadcast-context">
-      <div class="context-tab">
-        <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 0 }" @click="toSelectList(0)">全部</div>
-        <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 1 }" @click="toSelectList(1)">未解决</div>
-        <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 2 }" @click="toSelectList(2)">已解决</div>
+    <div v-if="isShowWarningBroad" class="broadcast">
+      <div class="title">
+        <div class="message-title">消息通知</div>
+        <!-- <div class="badge-box">
+          <SoundOutlined style="font-size: 20px; color: #000" />
+        </div> -->
       </div>
-      <div class="context-box">
-        <div v-if="broadcastList.length == 0" class="no-context">暂无内容</div>
-        <div class="context-detail" v-else v-for="(item, index) in broadcastList" :key="index" :style="{ color: item['isok'] == 0 ? 'red' : '#000' }">
-          <div>{{ item['createTime'] }}</div>
-          <div>{{ item['devicekind_dictText'] }}</div>
-          <div>{{ item['wardescrip'] || item['nwartype_dictText'] }}</div>
-          <div>{{ item['isok'] ? '已解决' : '未解决' }}</div>
+      <div class="broadcast-context">
+        <div class="context-tab">
+          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 0 }" @click="toSelectList(0)">全部</div>
+          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 1 }" @click="toSelectList(1)">未解决</div>
+          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 2 }" @click="toSelectList(2)">已解决</div>
+        </div>
+        <div class="context-box">
+          <div v-if="broadcastList.length == 0" class="no-context">暂无内容</div>
+          <div
+            class="context-detail"
+            v-else
+            v-for="(item, index) in broadcastList"
+            :key="index"
+            :style="{ color: item['isok'] == 0 ? 'red' : '#000' }"
+          >
+            <div>{{ item['createTime'] }}</div>
+            <div>{{ item['devicekind_dictText'] }}</div>
+            <div>{{ item['wardescrip'] || item['nwartype_dictText'] }}</div>
+            <div>{{ item['isok'] ? '已解决' : '未解决' }}</div>
+          </div>
+          <div v-if="broadcastList.length > 5" class="more" @click="toMore">更多</div>
         </div>
-        <div class="more" @click="toMore">更多</div>
       </div>
     </div>
   </div>
@@ -81,15 +89,17 @@
       function initWebSocket() {
         let token = getToken();
         //将登录token生成一个短的标识
-        let wsClientId = md5(token);
-        let userId = unref(userStore.getUserInfo).id + '_' + wsClientId;
+        // let wsClientId = md5(token);
+        // let userId = unref(userStore.getUserInfo).id + '_' + wsClientId;
+        let userId = unref(userStore.getUserInfo).id + '?token=' + token;
         // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
-        let url = glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
+        let url = glob.wsUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
         connectWebSocket(url);
         onWebSocket(onWebSocketMessage);
       }
 
       function onWebSocketMessage(data) {
+        console.log('WebSocket 监测消息--------------》', data);
         if (data.cmd === 'topic' || data.cmd === 'user') {
           //
           setTimeout(() => {
@@ -100,7 +110,7 @@
         }
       }
       onMounted(() => {
-        // initWebSocket();
+        initWebSocket();
       });
 
       return { showWarningBroad, isShowWarningBroad, activeKey, toSelectList, broadcastList, toMore };

+ 1 - 1
src/layouts/default/header/index.less

@@ -269,5 +269,5 @@
   box-shadow: none !important;
   position: fixed !important;
   width: 100%;
-  z-index: 999;
+  z-index: 1;
 }

+ 1 - 3
src/layouts/default/header/index.vue

@@ -46,7 +46,6 @@
     <!-- action  -->
     <div :class="`${prefixCls}-action`">
       <div class="right-position">
-        <VoiceBroadcast />
         <UserDropDown v-if="showUserDropdown" :theme="getHeaderTheme" />
       </div>
     </div>
@@ -57,11 +56,10 @@
     style="position: fixed; top: 30px; right: 20px; z-index: 999"
   >
     <div class="right-position">
-      <VoiceBroadcast />
       <UserDropDown v-if="showUserDropdown" :theme="getHeaderTheme" />
     </div>
   </div>
-
+  <VoiceBroadcast />
   <LoginSelect ref="loginSelectRef" @success="loginSelectOk" />
 </template>
 <script lang="ts">

+ 4 - 4
src/views/vent/monitorManager/fanLocalMonitor/index.vue

@@ -1326,16 +1326,16 @@
               } else {
                 message.success('指令已下发成功!');
               }
-              modalTitle.value = '';
-              modalIsShow.value = false;
             } else {
               message.error(res.message);
             }
+            modalTitle.value = '';
+            modalIsShow.value = false;
           })
           .catch((err) => {});
       } else if (handType === 'fan1ToFan2') {
         data.paramcode = 'CtrlFan1ToFan2';
-        deviceControlApi(data).then(() => {
+        deviceControlApi(data).then((res) => {
           if (res.success) {
             if (globalConfig.History_Type == 'remote') {
               message.success('指令已下发至生产管控平台成功!');
@@ -1350,7 +1350,7 @@
         });
       } else if (handType === 'fan2ToFan1') {
         data.paramcode = 'CtrlFan2ToFan1';
-        deviceControlApi(data).then(() => {
+        deviceControlApi(data).then((res) => {
           if (res.success) {
             if (globalConfig.History_Type == 'remote') {
               message.success('指令已下发至生产管控平台成功!');