Procházet zdrojové kódy

[Mod 0000]优化均压局部风机监测数据对接;修改预警通知“一键清除”功能的接口参数

hongrunxia před 1 dnem
rodič
revize
d9f6aae74e

+ 1 - 0
src/design/theme.less

@@ -133,6 +133,7 @@ html[data-theme='light'] {
 @vent-device-manager-control-btn: var(--vent-device-manager-control-btn);
 @vent-device-manager-control-btn-hover: var(--vent-device-manager-control-btn-hover);
 
+
 // 下面的代码负责将主题相关的选择器、图片前缀等 less 变量声明
 @theme-dark: ~"html[data-theme='dark2']";
 @theme-light: ~"html[data-theme='light']";

+ 1 - 0
src/design/themify/dark.less

@@ -49,4 +49,5 @@ html[data-theme='dark2'] {
   --vent-warn-tab-bg: #0f376ccc;
   --vent-warn-tab-border: #166ab5;
   --vent-warn-tab-bg-actived: #209dfc;
+
 }

+ 1 - 0
src/design/themify/deepblue.less

@@ -63,4 +63,5 @@ html[data-theme='deepblue'] {
   --vent-warn-tab-bg: #0f376c;
   --vent-warn-tab-border: #107eec;
   --vent-warn-tab-bg-actived: #0963c1;
+
 }

+ 4 - 0
src/design/themify/default.less

@@ -62,4 +62,8 @@ html {
   --vent-warn-tab-bg: #0f376ccc;
   --vent-warn-tab-border: #166ab5;
   --vent-warn-tab-bg-actived: #209dfc;
+
+  --vent-balancePress-fan-bg-default: linear-gradient( to right, #071D3C22, #035EA266);
+  --vent-balancePress-fan-bg-select: linear-gradient(to right, #21A6CE99, #052d3d99);
+
 }

+ 3 - 14
src/design/themify/light.less

@@ -1,40 +1,32 @@
 html[data-theme='light'] {
   --vent-primary-color: #1580cc;
-
   --vent-header-bg-color: linear-gradient(#005177, #0a344c);
-
   --vent-btn-primary-hover-color: #389bd9;
   --vent-btn-primary-focus-color: #1c638a99;
   --vent-btn-primary-color: #1c638a;
   --vent-btn-primary-border-color: #56b3c96b;
-
   --vent-table-thead: #3d9dd45d;
   --vent-table-thead-border: #91e9fe;
   --vent-table-hover: #0dc3ff22;
   --vent-table-no-hover: #00bfff10;
   --vent-table-action-link: #00e7ff;
-
   --vent-modal-title: #39e9fe;
   --vent-modal-border: #04bdaa;
   --vent-modal-bg: #0042ab22;
   --vent-modal-box-shadow: #2b87ff;
   --vent-modal-bg2: linear-gradient(#2cd1ff55, #1eb0ff55);
-
   --vent-tabs-bg: linear-gradient(#0091aa33, #2081ff11);
   --vent-tabs-table-thead: #3d9dd433;
   --vent-tabs-action-link: #28f3f3;
-
   --vent-form-item-border: #3ad8ff77;
-
   --vent-text-base: #ddd;
   --vent-base-color: #09172c;
   --vent-base-border: #5cfaff;
   --vent-base-light-bg: #60f4ff;
   --vent-base-light-bg-opcity: #60f4ff55;
-  --vent-transparent: #ffffff00;
-  --vent-font-color: #ffffff;
+  --vent-transparent: #fff0;
+  --vent-font-color: #fff;
   --vent-font-action-link: #7af5ff;
-
   --vent-configurable-bg: #09316a;
   --vent-configurable-module-bg: #3df6ff11;
   --vent-configurable-original-module-bg: #3df6ff15;
@@ -43,7 +35,6 @@ html[data-theme='light'] {
   --vent-configurable-home-bg-img: linear-gradient(to top, #39a3ff00, #0091ff99);
   --vent-configurable-home-timeline: linear-gradient(to top, #39a3ff00, #0091ff99, #39a3ff00);
   --vent-configurable-home-light-border: #3df6ff;
-
   --vent-gas-list-item-bg-img: linear-gradient(to right, #39a3ff55, #3977e500);
   --vent-gas-tab-bg: #10427a;
   --vent-gas-tab-bg-avtived: #166ab5;
@@ -51,12 +42,10 @@ html[data-theme='light'] {
   --vent-gas-primary-text: #00c8d9;
   --vent-gas-primary-bg: #1673bf;
   --vent-gas-primary-trasparent-bg: #0091ff12;
-
   --vent-device-manager-box-border: #44d3ff70;
-  --vent-device-manager-box-bg: #ffffff11;
+  --vent-device-manager-box-bg: #fff1;
   --vent-device-manager-control-btn: linear-gradient(#1fa6cb, #127cb5);
   --vent-device-manager-control-btn-hover: linear-gradient(#2cd1ff55, #1eb0ff55);
-
   --vent-warn-tab-bg: #0f376ccc;
   --vent-warn-tab-border: #166ab5;
   --vent-warn-tab-bg-actived: #209dfc;

+ 236 - 236
src/layouts/default/header/components/VoiceBroadcast.vue

@@ -46,283 +46,283 @@
   </div>
 </template>
 <script lang="ts">
-import { Tooltip, Badge } from 'ant-design-vue';
-import { SoundOutlined, ClearOutlined, BellOutlined, WarningOutlined } from '@ant-design/icons-vue';
-import Icon from '/@/components/Icon';
-import { defineComponent, ref, unref, onMounted, nextTick } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { useRouter } from 'vue-router';
-import { connectWebSocket, onWebSocket } from '/@/hooks/web/useWebSocket';
-import { getToken } from '/@/utils/auth';
-import { useUserStore } from '/@/store/modules/user';
-import { useGlobSetting } from '/@/hooks/setting';
-import SpeakVoice from './notify/speakVoice';
-import { useDrag } from '@/hooks/event/useDrag';
-import dayjs from 'dayjs';
-export default defineComponent({
-  name: 'VoiceBroadcast',
-  components: { Icon, Tooltip, Badge, SoundOutlined, ClearOutlined, BellOutlined, WarningOutlined },
+  import { Tooltip, Badge } from 'ant-design-vue';
+  import { SoundOutlined, ClearOutlined, BellOutlined, WarningOutlined } from '@ant-design/icons-vue';
+  import Icon from '/@/components/Icon';
+  import { defineComponent, ref, unref, onMounted, nextTick } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { useRouter } from 'vue-router';
+  import { connectWebSocket, onWebSocket } from '/@/hooks/web/useWebSocket';
+  import { getToken } from '/@/utils/auth';
+  import { useUserStore } from '/@/store/modules/user';
+  import { useGlobSetting } from '/@/hooks/setting';
+  import SpeakVoice from './notify/speakVoice';
+  import { useDrag } from '@/hooks/event/useDrag';
+  import dayjs from 'dayjs';
+  export default defineComponent({
+    name: 'VoiceBroadcast',
+    components: { Icon, Tooltip, Badge, SoundOutlined, ClearOutlined, BellOutlined, WarningOutlined },
 
-  setup() {
-    // debugger;
-    let speakVoice;
-    const userStore = useUserStore();
-    const glob = useGlobSetting();
-    const router = useRouter();
-    const list = (params) => defHttp.get({ url: '/safety/ventanalyAlarmLog/list', params });
-    const cleanAlarm = () => defHttp.get({ url: '/safety/ventanalyAlarmLog/cleanAlarmLog' });
-    const activeKey = ref(0);
-    const isShowWarningBroad = ref(false);
-    const isBroad = ref(true);
-    const isWarningDot = ref(false);
-    const broadcastList = ref([]);
-    function showWarningBroad() {
-      isShowWarningBroad.value = !isShowWarningBroad.value;
-      if (isShowWarningBroad.value) {
-        toSelectList(0);
-        nextTick(() => {
-          const dom = document.getElementById('VoiceBroadcast');
-          if (dom) useDrag(dom);
-        });
+    setup() {
+      // debugger;
+      let speakVoice;
+      const userStore = useUserStore();
+      const glob = useGlobSetting();
+      const router = useRouter();
+      const list = (params) => defHttp.get({ url: '/safety/ventanalyAlarmLog/list', params });
+      const cleanAlarm = () => defHttp.get({ url: '/safety/ventanalyAlarmLog/cleanAlarmLog' });
+      const activeKey = ref(0);
+      const isShowWarningBroad = ref(false);
+      const isBroad = ref(true);
+      const isWarningDot = ref(false);
+      const broadcastList = ref([]);
+      function showWarningBroad() {
+        isShowWarningBroad.value = !isShowWarningBroad.value;
+        if (isShowWarningBroad.value) {
+          toSelectList(0);
+          nextTick(() => {
+            const dom = document.getElementById('VoiceBroadcast');
+            if (dom) useDrag(dom);
+          });
+        }
+      }
+      function handleBroad() {
+        isBroad.value = !isBroad.value;
       }
-    }
-    function handleBroad() {
-      isBroad.value = !isBroad.value;
-    }
 
-    async function clearInfo() {
-      cleanAlarm();
-      const res = await list({ pageSize: 20, devicetype: '', sort: 'createTime', delFlag: 0 });
-      broadcastList.value = res['records'];
-    }
+      async function clearInfo() {
+        await cleanAlarm();
+        const res = await list({ pageSize: 20, devicetype: '', sort: 'createTime', delFlag: 0 });
+        broadcastList.value = res['records'];
+      }
 
-    async function toSelectList(key) {
-      activeKey.value = key;
-      const res = await list({ pageSize: 20, devicetype: '', isok: key == 1 ? 0 : key == 2 ? 1 : null, sort: 'createTime' });
-      broadcastList.value = res['records'];
-      const isHasWarning = broadcastList.value.findIndex((item) => !item['isok']);
-      if (key !== 2) isWarningDot.value = isHasWarning > -1 ? true : false;
-    }
+      async function toSelectList(key) {
+        activeKey.value = key;
+        const res = await list({ pageSize: 20, devicetype: '', isok: key == 1 ? 0 : key == 2 ? 1 : null, sort: 'createTime', delFlag: 0 });
+        broadcastList.value = res['records'];
+        const isHasWarning = broadcastList.value.findIndex((item) => !item['isok']);
+        if (key !== 2) isWarningDot.value = isHasWarning > -1 ? true : false;
+      }
 
-    async function toMore() {
-      await router.push({ path: '/monitorChannel/device-monitor/warningHistory/home' });
-      showWarningBroad();
-    }
+      async function toMore() {
+        await router.push({ path: '/monitorChannel/device-monitor/warningHistory/home' });
+        showWarningBroad();
+      }
 
-    // 初始化 WebSocket
-    function initWebSocket() {
-      let token = getToken();
-      //将登录token生成一个短的标识
-      // 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.wsUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
-      connectWebSocket(url);
-      onWebSocket(onWebSocketMessage);
-    }
+      // 初始化 WebSocket
+      function initWebSocket() {
+        let token = getToken();
+        //将登录token生成一个短的标识
+        // 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.wsUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
+        connectWebSocket(url);
+        onWebSocket(onWebSocketMessage);
+      }
 
-    async function onWebSocketMessage(data) {
-      console.log('WebSocket 监测消息--------------》', data);
-      if (data.topic === 'warn' || data.cmd === 'user') {
-        if (isBroad.value) {
-          await speakVoice.getSpeechCnVoices();
-          const messageText = data['warndata'];
-          // const messageText = '这是一个测试';
-          speakVoice.handleReply(messageText);
-          const time = dayjs().format('YYYY-MM-DD HH:mm:ss');
-          console.log(time + '语音播报开始报警------>', data);
-        }
-        if (!isShowWarningBroad.value) {
-          isWarningDot.value = true;
-        } else {
-          isWarningDot.value = false;
-        }
-        setTimeout(() => {
-          if (isShowWarningBroad.value) {
-            toSelectList(0);
+      async function onWebSocketMessage(data) {
+        console.log('WebSocket 监测消息--------------》', data);
+        if (data.topic === 'warn' || data.cmd === 'user') {
+          if (isBroad.value) {
+            await speakVoice.getSpeechCnVoices();
+            const messageText = data['warndata'];
+            // const messageText = '这是一个测试';
+            speakVoice.handleReply(messageText);
+            const time = dayjs().format('YYYY-MM-DD HH:mm:ss');
+            console.log(time + '语音播报开始报警------>', data);
           }
-        }, 0);
+          if (!isShowWarningBroad.value) {
+            isWarningDot.value = true;
+          } else {
+            isWarningDot.value = false;
+          }
+          setTimeout(() => {
+            if (isShowWarningBroad.value) {
+              toSelectList(0);
+            }
+          }, 0);
+        }
       }
-    }
-    onMounted(() => {
-      speakVoice = new SpeakVoice();
-      nextTick(async () => {
-        initWebSocket();
-        await toSelectList(1);
+      onMounted(() => {
+        speakVoice = new SpeakVoice();
+        nextTick(async () => {
+          initWebSocket();
+          await toSelectList(1);
+        });
+        window.speechSynthesis.onvoiceschanged = () => {
+          console.log('语音列表已更新');
+        };
       });
-      window.speechSynthesis.onvoiceschanged = () => {
-        console.log('语音列表已更新');
-      };
-    });
 
-    return {
-      showWarningBroad,
-      isShowWarningBroad,
-      activeKey,
-      toSelectList,
-      broadcastList,
-      toMore,
-      isBroad,
-      handleBroad,
-      clearInfo,
-      isWarningDot,
-    };
-  },
-});
+      return {
+        showWarningBroad,
+        isShowWarningBroad,
+        activeKey,
+        toSelectList,
+        broadcastList,
+        toMore,
+        isBroad,
+        handleBroad,
+        clearInfo,
+        isWarningDot,
+      };
+    },
+  });
 </script>
 <style lang="less" scoped>
-.btn {
-  line-height: 30px;
-  margin-right: 20px;
-  cursor: pointer;
-  display: flex;
-}
-
-.no-play {
-  position: relative;
-  &::after {
-    position: absolute;
-    width: 70%;
-    height: 100%;
-    content: '';
-    left: 15%;
-    top: 0;
-    background: linear-gradient(
-      to bottom left,
-      transparent 0%,
-      transparent calc(50% - 1px),
-      #ffffff 50%,
-      transparent calc(50% + 1px),
-      transparent 100%
-    );
+  .btn {
+    line-height: 30px;
+    margin-right: 20px;
+    cursor: pointer;
+    display: flex;
   }
-}
-
-.broadcast {
-  width: 500px;
-  height: 350px;
-  border-radius: 4px;
-  position: fixed;
-  top: 50px;
-  right: 20px;
-  background-color: rgb(255, 255, 255);
-  background: url('../../../../assets/images/warn-dialog-bg.png') no-repeat center;
-  background-size: 100% 100%;
-  z-index: 9999999;
-  color: #fff;
 
-  .title {
-    height: 32px;
-    padding: 0 20px;
-
-    :deep(.ant-badge:not(.ant-badge-status)) {
-      margin-right: 40px !important;
+  .no-play {
+    position: relative;
+    &::after {
+      position: absolute;
+      width: 70%;
+      height: 100%;
+      content: '';
+      left: 15%;
+      top: 0;
+      background: linear-gradient(
+        to bottom left,
+        transparent 0%,
+        transparent calc(50% - 1px),
+        #ffffff 50%,
+        transparent calc(50% + 1px),
+        transparent 100%
+      );
     }
+  }
 
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    margin-bottom: 5px;
+  .broadcast {
+    width: 500px;
+    height: 350px;
+    border-radius: 4px;
+    position: fixed;
+    top: 50px;
+    right: 20px;
+    background-color: rgb(255, 255, 255);
+    background: url('../../../../assets/images/warn-dialog-bg.png') no-repeat center;
+    background-size: 100% 100%;
+    z-index: 9999999;
+    color: #fff;
 
-    .message-title {
-      font-size: 18px;
-      padding-top: 10px;
-    }
+    .title {
+      height: 32px;
+      padding: 0 20px;
 
-    .badge-box {
-      display: flex;
-      align-items: center;
-      padding-top: 10px;
-      .badge-title {
-        display: inline-block;
-        width: 62px;
-        line-height: 32px;
-        background-color: #2174f0;
-        border-radius: 26px;
-        text-align: center;
-        color: #fff;
-        padding-bottom: 2px;
+      :deep(.ant-badge:not(.ant-badge-status)) {
+        margin-right: 40px !important;
       }
-    }
-  }
 
-  .broadcast-context {
-    .context-tab {
       display: flex;
-      padding: 20px;
-      .context-tab-item {
-        line-height: 24px;
-        background-color: #6b6b6b;
-        border-radius: 24px;
-        text-align: center;
-        padding: 0 10px;
-        color: #fff;
-        margin: 5px;
-        cursor: pointer;
-        font-size: 14px;
+      align-items: center;
+      justify-content: space-between;
+      margin-bottom: 5px;
+
+      .message-title {
+        font-size: 18px;
+        padding-top: 10px;
       }
 
-      .context-tab-item-active {
-        background-color: #2174f0;
+      .badge-box {
+        display: flex;
+        align-items: center;
+        padding-top: 10px;
+        .badge-title {
+          display: inline-block;
+          width: 62px;
+          line-height: 32px;
+          background-color: #2174f0;
+          border-radius: 26px;
+          text-align: center;
+          color: #fff;
+          padding-bottom: 2px;
+        }
       }
     }
 
-    .context-box {
-      flex: 1;
-      padding: 0 10px;
-      height: 200px;
-      overflow-y: auto;
-
-      .no-context {
+    .broadcast-context {
+      .context-tab {
         display: flex;
-        justify-content: center;
-        padding-top: 30px;
-        font-size: 16px;
+        padding: 20px;
+        .context-tab-item {
+          line-height: 24px;
+          background-color: #6b6b6b;
+          border-radius: 24px;
+          text-align: center;
+          padding: 0 10px;
+          color: #fff;
+          margin: 5px;
+          cursor: pointer;
+          font-size: 14px;
+        }
+
+        .context-tab-item-active {
+          background-color: #2174f0;
+        }
       }
 
-      .context-detail {
-        display: flex;
-        justify-content: space-between;
-        line-height: 24px;
-        padding: 0px 16px;
+      .context-box {
+        flex: 1;
+        padding: 0 10px;
+        height: 200px;
+        overflow-y: auto;
 
-        div {
+        .no-context {
           display: flex;
-          justify-content: flex-start;
+          justify-content: center;
+          padding-top: 30px;
+          font-size: 16px;
+        }
 
-          &:nth-child(1) {
-            width: 44%;
-          }
+        .context-detail {
+          display: flex;
+          justify-content: space-between;
+          line-height: 24px;
+          padding: 0px 16px;
 
-          &:nth-child(2) {
-            width: 40%;
-          }
+          div {
+            display: flex;
+            justify-content: flex-start;
 
-          &:nth-child(3) {
-            width: 25%;
-          }
+            &:nth-child(1) {
+              width: 44%;
+            }
 
-          &:nth-child(4) {
-            width: 15%;
+            &:nth-child(2) {
+              width: 40%;
+            }
+
+            &:nth-child(3) {
+              width: 25%;
+            }
+
+            &:nth-child(4) {
+              width: 15%;
+            }
           }
         }
       }
-    }
-    .more {
-      position: absolute;
-      left: 24px;
-      bottom: 10px;
-      cursor: pointer;
+      .more {
+        position: absolute;
+        left: 24px;
+        bottom: 10px;
+        cursor: pointer;
 
-      &:hover {
-        color: #2174f0;
+        &:hover {
+          color: #2174f0;
+        }
       }
     }
   }
-}
-:deep(.zxm-badge-count) {
-  width: 8px;
-  height: 8px;
-}
+  :deep(.zxm-badge-count) {
+    width: 8px;
+    height: 8px;
+  }
 </style>

+ 2 - 4
src/views/vent/monitorManager/balancePressMonitor/balancePress.threejs.ts

@@ -49,8 +49,6 @@ export const play = (controlType, deviceType, frequency, state, duration?) => {
 export const updateText = (selectData) => {
   if (balancePressType === 'balancePressBase') {
     return balancePressBaseObj?.addText.call(balancePressBaseObj, selectData);
-  } else if (balancePressType === 'balancePressTun') {
-    return balancePressTunObj?.addText.call(balancePressTunObj, selectData);
   }
 };
 
@@ -86,8 +84,8 @@ export const setModelType = (type) => {
           await animateCamera(
             oldCameraPosition,
             { x: 3.9025, y: 0.7782, z: 6.6307 },
-            { x: 1.4763946591400468, y: 28.41203761378685, z: 14.142784066252352 },
-            { x: 1.334507975656787, y: 1.6848765189635717, z: -1.5733583795572064 },
+            { x: 0.30694425126412234, y: 6.664533888402769, z: 3.7879281016804667 },
+            { x: 0.27488693515931245, y: 0.6259183086723961, z: 0.23709305659449886 },
             model,
             0.8
           );

+ 47 - 10
src/views/vent/monitorManager/balancePressMonitor/components/balancePressHome1.vue

@@ -77,6 +77,20 @@
                     ><SvgIcon class="icon" size="14" name="fiber-title" />
                     <span>局扇:{{ monitor.strinstallpos }}</span>
                   </div>
+                  <div class="vent-flex-row">
+                    <div
+                      class="fan-btn"
+                      :class="{ 'fan-btn-active': get(fanBtnData, monitor.deviceId) == 'Fan1' }"
+                      @click="changeFanBtn(monitor.deviceId, 'Fan1')"
+                      >主机</div
+                    >
+                    <div
+                      class="fan-btn"
+                      :class="{ 'fan-btn-active': get(fanBtnData, monitor.deviceId) == 'Fan2' }"
+                      @click="changeFanBtn(monitor.deviceId, 'Fan2')"
+                      >备机</div
+                    >
+                  </div>
                   <div class="input-box">
                     <div class="input-item">
                       <div class="title">运行风机</div>
@@ -85,17 +99,10 @@
                     <div v-for="(item, index) in fanlocalColumn" class="input-item" :key="index">
                       <div class="title">{{ item.title }}</div>
                       <div class="value">{{
-                        get(
-                          monitor,
-                          item.dataIndex.startsWith('Fan')
-                            ? get(monitor, 'Fan1StartStatus') == 1
-                              ? item.dataIndex.replace('Fan', 'Fan1')
-                              : item.dataIndex.replace('Fan', 'Fan2')
-                            : get(monitor, item.dataIndex),
-                          '-'
-                        )
+                        item.dataIndex.startsWith('Fan')
+                          ? get(monitor, item.dataIndex.replace('Fan', fanBtnData[monitor.deviceId]))
+                          : get(monitor, item.dataIndex)
                       }}</div>
-                      <!-- <div class="unit">{{ item.unit }}</div> -->
                     </div>
                   </div>
                 </template>
@@ -192,6 +199,7 @@
 
   const safetyMonitorData = ref<any[]>([]);
   const fanlocalMonitorData = ref<any[]>([]);
+  const fanBtnData = reactive({});
   const windowMonitorData = ref<any[]>([]);
   const windrectMonitorData = ref<any[]>([]);
   const fanlocalColumn = ref<any[]>([]);
@@ -215,6 +223,7 @@
           const f1Run = e.readData.Fan1StartStatus == '1';
           e.FanfHz = f1Run ? e.readData.Fan1_Frequency : e.readData.Fan2_Frequency;
           e.FanRun = f1Run ? '1#风机' : '2#风机';
+          if (!fanBtnData[e.deviceId]) fanBtnData[e.deviceId] = 'Fan1';
         });
         fanlocalMonitorData.value.push(...item.datalist);
       }
@@ -227,6 +236,9 @@
     });
   }
 
+  function changeFanBtn(deviceId, fan) {
+    fanBtnData[deviceId] = fan;
+  }
   // 喷粉操作
   function onSubmit() {
     sessionStorage.setItem('lalance-press-formdata', JSON.stringify(formData.value));
@@ -286,6 +298,7 @@
 <style lang="less" scoped>
   @import '/@/design/vent/modal.less';
   @import '../../comment/less/workFace.less';
+
   @ventSpace: zxm;
   .monitor-container {
     margin-top: 60px;
@@ -338,6 +351,30 @@
       padding: 4px 0;
     }
   }
+  .fan-btn {
+    flex: 1;
+    text-align: center;
+    background: var(--vent-balancePress-fan-bg-default);
+    cursor: pointer;
+    &:hover {
+      color: var(--vent-font-action-link);
+      background: var(--vent-balancePress-fan-bg-select);
+    }
+    &:first-child {
+      border-left: 1px solid;
+      border-radius: 4px;
+      border-color: var(--vent-configurable-home-light-border);
+    }
+    &:last-child {
+      border-right: 1px solid;
+      border-radius: 4px;
+      border-color: var(--vent-configurable-home-light-border);
+    }
+  }
+  .fan-btn-active {
+    color: var(--vent-font-action-link);
+    background: var(--vent-balancePress-fan-bg-select);
+  }
 
   :deep(.@{ventSpace}-tabs-tabpane-active) {
     overflow: auto;

+ 7 - 1
src/views/vent/monitorManager/balancePressMonitor/index1.vue

@@ -17,7 +17,7 @@
     </div>
     <BottomMenu @change="changeActive"/>
   </div>
-  <Vent2dModal style="width: 100vw; height: 100vh; position: absolute; top: 0; left: 0;" />
+  <Vent2dModal v-if="activeKey == 'monitor'" style="width: 100vw; height: 100vh; position: absolute; top: 0; left: 0;" />
 </template>
 
 <script setup lang="ts">
@@ -136,6 +136,12 @@ onBeforeUnmount(() => {
   margin-top: 20px;
   pointer-events: none;
   position: relative;
+  :deep(.left-box){
+    margin-top: 0px;
+  }
+  :deep(.right-box){
+    margin-top: 0px;
+  }
   .history-group{
     padding: 0 20px;
     .history-container{

+ 1 - 2
src/views/vent/monitorManager/balancePressMonitor/index2.vue

@@ -34,7 +34,6 @@ import balancePressHistory from './components/balancePressHistory.vue';
 import balancePressHandleHistoryVue from './components/balancePressHandleHistory.vue';
 import balancePressAlarmHistory from './components/balancePressAlarmHistory.vue';
 import { useRouter } from 'vue-router';
-import { setModelType } from './balancePress.threejs';
 
 type DeviceType = { deviceType: string, deviceName: string, datalist: any[] };
 
@@ -103,7 +102,7 @@ function getSelectRow(deviceID){
   // })
   optionValue.value = deviceID
   getDeviceList()
-  setModelType('balancePressTun')
+  // setModelType('balancePressTun')
 }
 
 onBeforeMount(() => {

+ 1 - 1
src/views/vent/monitorManager/comment/HistoryTable.vue

@@ -286,7 +286,7 @@
     formData['pageNo'] = pagination['current'];
     formData['pageSize'] = pagination['pageSize'];
     formData['column'] = 'createTime';
-    if (stationType.value !== 'redis') {
+    if (stationType.value !== 'redis' && deviceOptions.value[0]) {
       formData['strtype'] = deviceTypeStr.value
         ? deviceTypeStr.value
         : deviceOptions.value[0]['strtype']