hongrunxia před 1 rokem
rodič
revize
6aa971f400
41 změnil soubory, kde provedl 2503 přidání a 2399 odebrání
  1. 1 1
      public/js/config.js
  2. 20 22
      src/components/Table/src/BasicTable.vue
  3. 2 2
      src/hooks/system/useListPage.ts
  4. 6 1
      src/hooks/web/useSso.ts
  5. 5 3
      src/router/guard/permissionGuard.ts
  6. 8 9
      src/utils/index.ts
  7. 6 6
      src/views/vent/home/clique/components/dialog-modal.vue
  8. 29 20
      src/views/vent/home/clique/components/icon-light.vue
  9. 20 10
      src/views/vent/home/clique/index.vue
  10. 73 66
      src/views/vent/monitorManager/alarmMonitor/AlarmHistoryTable.vue
  11. 3 5
      src/views/vent/monitorManager/alarmMonitor/alarm.api.ts
  12. 996 980
      src/views/vent/monitorManager/alarmMonitor/index.vue
  13. 50 33
      src/views/vent/monitorManager/balancePressMonitor1/index.vue
  14. 24 23
      src/views/vent/monitorManager/beltTunMonitor/components/beltTunAlarmHistory.vue
  15. 24 20
      src/views/vent/monitorManager/beltTunMonitor/components/beltTunHistory.vue
  16. 2 1
      src/views/vent/monitorManager/beltTunMonitor/index.vue
  17. 1 1
      src/views/vent/monitorManager/chamberMonitor/chamber.api.ts
  18. 17 18
      src/views/vent/monitorManager/chamberMonitor/components/chamberAlarmHistory.vue
  19. 25 20
      src/views/vent/monitorManager/chamberMonitor/components/chamberHistory.vue
  20. 437 435
      src/views/vent/monitorManager/chamberMonitor/components/chamberHome.vue
  21. 77 44
      src/views/vent/monitorManager/comment/AlarmHistoryTable.vue
  22. 21 29
      src/views/vent/monitorManager/comment/HistoryTable.vue
  23. 5 2
      src/views/vent/monitorManager/compressor/index.vue
  24. 3 1
      src/views/vent/monitorManager/deviceMonitor/components/device/index.vue
  25. 534 547
      src/views/vent/monitorManager/deviceMonitor/index.vue
  26. 14 14
      src/views/vent/monitorManager/fanLocalMonitor/index.vue
  27. 1 1
      src/views/vent/monitorManager/gateMonitor/index.vue
  28. 4 5
      src/views/vent/monitorManager/mainFanMonitor/index.vue
  29. 4 1
      src/views/vent/monitorManager/nitrogen/index.vue
  30. 23 23
      src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceAlarmHistory.vue
  31. 24 20
      src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceHistory.vue
  32. 1 1
      src/views/vent/monitorManager/tunFaceMonitor/index.vue
  33. 3 1
      src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts
  34. 1 1
      src/views/vent/monitorManager/windowMonitor/index.vue
  35. 2 0
      src/views/vent/monitorManager/windrectMonitor/duishe.threejs.ts
  36. 1 1
      src/views/vent/monitorManager/windrectMonitor/duisheFixed.threejs.ts
  37. 8 3
      src/views/vent/monitorManager/windrectMonitor/index.vue
  38. 4 3
      src/views/vent/monitorManager/windrectMonitor/windrect.threejs.ts
  39. 23 23
      src/views/vent/monitorManager/workFaceMonitor/components/workFaceAlarmHistory.vue
  40. 0 1
      src/views/vent/monitorManager/workFaceMonitor/components/workFaceHistory.vue
  41. 1 2
      src/views/vent/monitorManager/workFaceMonitor/index.vue

+ 1 - 1
public/js/config.js

@@ -10,6 +10,6 @@ const History_Type = {
 
 const VENT_PARAM = {
   // simulatedPassword: '123456' //(simulatedPassword 为空时有密码输入框弹出,不为空时不弹出密码输入框,无需输入密码)
-  simulatedPassword: '',
+  simulatedPassword: '123456',
   showReport: false
 }

+ 20 - 22
src/components/Table/src/BasicTable.vue

@@ -18,14 +18,21 @@
     <!-- antd v3 升级兼容,阻止数据的收集,防止控制台报错 -->
     <!-- https://antdv.com/docs/vue/migration-v3-cn -->
     <a-form-item-rest>
-      <Table ref="tableElRef" v-bind="getBindValues" :rowClassName="getRowClassName" v-show="getEmptyDataIsShowTable" @resizeColumn="handleResizeColumn" @change="handleTableChange">
+      <Table
+        ref="tableElRef"
+        v-bind="getBindValues"
+        :rowClassName="getRowClassName"
+        v-show="getEmptyDataIsShowTable"
+        @resizeColumn="handleResizeColumn"
+        @change="handleTableChange"
+      >
         <!-- antd的原生插槽直接传递 -->
         <template #[item]="data" v-for="item in slotNamesGroup.native" :key="item">
           <slot :name="item" v-bind="data || {}"></slot>
         </template>
         <template #headerCell="{ column }">
           <!-- update-begin--author:sunjianlei---date:220230630---for:【QQYUN-5571】自封装选择列,解决数据行选择卡顿问题 -->
-          <CustomSelectHeader v-if="isCustomSelection(column)" v-bind="selectHeaderProps"/>
+          <CustomSelectHeader v-if="isCustomSelection(column)" v-bind="selectHeaderProps" />
           <HeaderCell v-else :column="column" />
           <!-- update-end--author:sunjianlei---date:220230630---for:【QQYUN-5571】自封装选择列,解决数据行选择卡顿问题 -->
         </template>
@@ -34,7 +41,7 @@
           <!-- update-begin--author:liaozhiyang---date:220230717---for:【issues-179】antd3 一些警告以及报错(针对表格) -->
           <!-- update-begin--author:liusq---date:20230921---for:【issues/770】slotsBak异常报错的问题,增加判断column是否存在 -->
           <template v-if="data.column?.slotsBak?.customRender">
-          <!-- update-end--author:liusq---date:20230921---for:【issues/770】slotsBak异常报错的问题,增加判断column是否存在 -->
+            <!-- update-end--author:liusq---date:20230921---for:【issues/770】slotsBak异常报错的问题,增加判断column是否存在 -->
             <slot :name="data.column.slotsBak.customRender" v-bind="data || {}"></slot>
           </template>
           <template v-else>
@@ -53,7 +60,7 @@
   import { Table } from 'ant-design-vue';
   import { BasicForm, useForm } from '/@/components/Form/index';
   import { PageWrapperFixedHeightKey } from '/@/components/Page/injectionKey';
-  import CustomSelectHeader from './components/CustomSelectHeader.vue'
+  import CustomSelectHeader from './components/CustomSelectHeader.vue';
   import expandIcon from './components/ExpandIcon';
   import HeaderCell from './components/HeaderCell.vue';
   import { InnerHandlers } from './types/table';
@@ -71,7 +78,7 @@
   import { useTableFooter } from './hooks/useTableFooter';
   import { useTableForm } from './hooks/useTableForm';
   import { useDesign } from '/@/hooks/web/useDesign';
-  import { useCustomSelection } from "./hooks/useCustomSelection";
+  import { useCustomSelection } from './hooks/useCustomSelection';
 
   import { omit } from 'lodash-es';
   import { basicProps } from './props';
@@ -150,14 +157,7 @@
         clearSelectedRowKeys,
         deleteSelectRowByKey,
         getExpandIconColumnIndex,
-      } = useCustomSelection(
-        getProps,
-        emit,
-        wrapRef,
-        getPaginationInfo,
-        tableData,
-        childrenColumnName
-      )
+      } = useCustomSelection(getProps, emit, wrapRef, getPaginationInfo, tableData, childrenColumnName);
       // update-end--author:sunjianlei---date:220230630---for:【QQYUN-5571】自封装选择列,解决数据行选择卡顿问题
 
       const {
@@ -200,7 +200,7 @@
         getProps,
         getPaginationInfo,
         // update-begin--author:sunjianlei---date:220230630---for:【QQYUN-5571】自封装选择列,解决数据行选择卡顿问题
-        handleCustomSelectColumn,
+        handleCustomSelectColumn
         // update-end--author:sunjianlei---date:220230630---for:【QQYUN-5571】自封装选择列,解决数据行选择卡顿问题
       );
 
@@ -261,11 +261,11 @@
         /*if (slots.expandedRowRender) {
           propsData = omit(propsData, 'scroll');
         }*/
-        //update-end---author:wangshuai ---date:20230214  for:[QQYUN-4237]代码生成 内嵌子表模式 没有滚动条------------ 
+        //update-end---author:wangshuai ---date:20230214  for:[QQYUN-4237]代码生成 内嵌子表模式 没有滚动条------------
 
         // update-begin--author:sunjianlei---date:220230630---for:【QQYUN-5571】自封装选择列,解决数据行选择卡顿问题
         // 自定义选择列,需要去掉原生的
-        delete propsData.rowSelection
+        delete propsData.rowSelection;
         // update-end--author:sunjianlei---date:220230630---for:【QQYUN-5571】自封装选择列,解决数据行选择卡顿问题
 
         // update-begin--author:liaozhiyang---date:20230919---for:【QQYUN-6387】展开写法(去掉报错)
@@ -395,7 +395,7 @@
                     elem.addEventListener('scroll', handleSroll, false);
                   });
                 }, 0);
-                console.log("---表格合计滚动---")
+                console.log('---表格合计滚动---');
               }
             },
             { immediate: true }
@@ -459,8 +459,8 @@
       }
     }
   }
-  .@{prefix-cls}{
-    :deep(.vent-form){
+  .@{prefix-cls} {
+    :deep(.vent-form) {
       .@{ventSpace}-select-dropdown {
         left: 0px !important;
         top: 34px !important;
@@ -471,7 +471,7 @@
       }
     }
   }
-  
+
   .@{prefix-cls} {
     max-width: 100%;
 
@@ -571,9 +571,7 @@
       }
     }
   }
-  
 </style>
 <style lang="less" scoped>
   @ventSpace: zxm;
-  
 </style>

+ 2 - 2
src/hooks/system/useListPage.ts

@@ -198,7 +198,7 @@ export function useListTable(tableProps: TableProps): [
     rowSelection: any;
     selectedRows: Ref<Recordable[]>;
     selectedRowKeys: Ref<any[]>;
-  }
+  },
 ] {
   // 自适应列配置
   const adaptiveColProps: Partial<ColEx> = {
@@ -285,7 +285,7 @@ export function useListTable(tableProps: TableProps): [
   // 发送请求之前调用的方法
   function beforeFetch(params) {
     // 默认以 createTime 降序排序
-    return Object.assign({ column: 'createTime'}, params);
+    return Object.assign({ column: 'createTime' }, params);
   }
 
   // 合并方法

+ 6 - 1
src/hooks/web/useSso.ts

@@ -15,6 +15,7 @@ export function useSso() {
     if (openSso == 'true') {
       const token = getToken();
       const ticket = getUrlParam('ticket');
+      debugger;
       if (!token) {
         if (ticket) {
           await validateCasLogin({
@@ -30,7 +31,11 @@ export function useSso() {
               window.location.href = globSetting.casBaseUrl + '/login?service=' + encodeURIComponent(locationUrl);
             });
         } else {
-          window.location.href = globSetting.casBaseUrl + '/login?service=' + encodeURIComponent(locationUrl);
+          debugger;
+          if (window.location.search == '?type=noCas') {
+          } else {
+            window.location.href = globSetting.casBaseUrl + '/login?service=' + encodeURIComponent(locationUrl);
+          }
         }
       }
     }

+ 5 - 3
src/router/guard/permissionGuard.ts

@@ -37,6 +37,7 @@ const whitePathList: PageEnum[] = [LOGIN_PATH, OAUTH2_LOGIN_PAGE_PATH, SYS_FILES
 const glob = useGlobSetting();
 
 export function createPermissionGuard(router: Router) {
+  debugger;
   const userStore = useUserStoreWithOut();
   const permissionStore = usePermissionStoreWithOut();
 
@@ -117,10 +118,10 @@ export function createPermissionGuard(router: Router) {
         //update-begin---author:wangshuai ---date:20230302  for:只有首次登陆并且是企业微信或者钉钉的情况下才会调用------------
         //----------【首次登陆并且是企业微信或者钉钉的情况下才会调用】-----------------------------------------------
         //只有首次登陆并且是企业微信或者钉钉的情况下才会调用
-        let href = window.location.href;
+        const href = window.location.href;
         //判断当前是auth2页面,并且是钉钉/企业微信,并且包含tenantId参数
         if (isOAuth2AppEnv() && href.indexOf('/tenantId/') != -1) {
-          let params = to.params;
+          const params = to.params;
           if (params && params.path && params.path.length > 0) {
             //直接获取参数最后一位
             setAuthCache(OAUTH2_THIRD_LOGIN_TENANT_ID, params.path[params.path.length - 1]);
@@ -131,6 +132,7 @@ export function createPermissionGuard(router: Router) {
         // 如果当前是在OAuth2APP环境,就跳转到OAuth2登录页面,否则跳转到登录页面
         path = isOAuth2AppEnv() ? OAUTH2_LOGIN_PAGE_PATH : LOGIN_PATH;
       }
+      debugger;
       //update-end---author:wangshuai ---date:20220629  for:[issues/I5BG1I]vue3 Auth2未实现------------
       // redirect login page
       const redirectData: { path: string; replace: boolean; query?: Recordable<string> } = {
@@ -145,7 +147,7 @@ export function createPermissionGuard(router: Router) {
         console.log('to.fullPath 1', to.fullPath);
         console.log('to.path 2', to.path);
 
-        let getFullPath = to.fullPath;
+        const getFullPath = to.fullPath;
         if (
           getFullPath == '/' ||
           getFullPath == '/500' ||

+ 8 - 9
src/utils/index.ts

@@ -104,8 +104,8 @@ export function cloneObject(obj) {
 }
 
 export const withInstall = <T>(component: T, alias?: string) => {
-  console.log("---初始化---", component)
-  
+  console.log('---初始化---', component);
+
   const comp = component as any;
   comp.install = (app: App) => {
     app.component(comp.name || comp.displayName, component);
@@ -304,16 +304,16 @@ export function importViewsFile(path): Promise<any> {
 export function goJmReportViewPage(url, id, token) {
   // update-begin--author:liaozhiyang---date:20230904---for:【QQYUN-6390】eval替换成new Function,解决build警告
   // URL支持{{ window.xxx }}占位符变量
-  url = url.replace(/{{([^}]+)?}}/g, (_s1, s2) => _eval(s2))
+  url = url.replace(/{{([^}]+)?}}/g, (_s1, s2) => _eval(s2));
   // update-end--author:liaozhiyang---date:20230904---for:【QQYUN-6390】eval替换成new Function,解决build警告
   if (url.includes('?')) {
     url += '&';
   } else {
     url += '?';
   }
-  url += `id=${id}`
-  url += `&token=${token}`
-  window.open(url)
+  url += `id=${id}`;
+  url += `&token=${token}`;
+  window.open(url);
 }
 
 // 防抖截流
@@ -340,7 +340,6 @@ export function setRem() {
  * 获取随机颜色
  */
 export function getRandomColor(index?) {
-
   const colors = [
     'rgb(100, 181, 246)',
     'rgb(77, 182, 172)',
@@ -363,7 +362,7 @@ export function getRandomColor(index?) {
     'rgb(254, 161, 172)',
     'rgb(194, 163, 205)',
   ];
-  return index && index < 19 ? colors[index] : colors[Math.floor((Math.random()*(colors.length-1)))];
+  return index && index < 19 ? colors[index] : colors[Math.floor(Math.random() * (colors.length - 1))];
 }
 
 export function getRefPromise(componentRef) {
@@ -387,5 +386,5 @@ export function getRefPromise(componentRef) {
  * 用new Function替换eval
  */
 export function _eval(str: string) {
- return new Function(`return ${str}`)();
+  return new Function(`return ${str}`)();
 }

+ 6 - 6
src/views/vent/home/clique/components/dialog-modal.vue

@@ -5,7 +5,7 @@
         <SvgIcon class="icon" size="14" name="inner-kd" />
       </i>
       <span class="modal-title"> {{ modalTitle }}</span>
-      <span class="close">✕</span>
+      <span class="close" @click="getClose">✕</span>
     </div>
     <div class="modal-card">
       <div class="card-box" v-for="(item, index) in modalCard" :key="index">
@@ -122,12 +122,11 @@
     value: '低风险',
   });
 
-  //   const emit = defineEmits(['closeDialog']);
+  const emit = defineEmits(['closeDialog']);
 
-  //   function getClose() {
-  //     debugger;
-  //     emit('closeDialog', false);
-  //   }
+  function getClose() {
+    emit('closeDialog', false);
+  }
 </script>
 <style lang="less" scoped>
   @font-face {
@@ -142,6 +141,7 @@
     background: url('/@/assets/images/company/area-card2.png') no-repeat;
     background-size: 100% 100%;
     pointer-events: none;
+    z-index: 999999;
 
     .modal-top {
       position: absolute;

+ 29 - 20
src/views/vent/home/clique/components/icon-light.vue

@@ -1,34 +1,43 @@
 <template>
   <div class="icon-light">
-    <div class="icon-point" v-for="(item, index) in pointList" :key="index" :style="{ left: item.leftV, top: item.topV }">
-      <img :src="item.imgSrc" alt="" />
-      <span :style="{ color: item.textColor }">{{ item.label }}</span>
-    </div>
+    <template v-for="(item, index) in pointList" :key="index">
+      <div class="icon-point" @click="openModal(item.code, item.leftV, item.topV)" :style="{ left: item.leftV, top: item.topV }">
+        <img :src="item.imgSrc" alt="" />
+        <span :style="{ color: item.textColor }">{{ item.label }}</span>
+      </div>
+    </template>
   </div>
 </template>
 
 <script setup lang="ts">
-  import { ref, reactive } from 'vue';
+  import { ref, defineEmits } from 'vue';
   import { getAssetURL } from '/@/utils/ui';
-  // const modules = await import.meta.glob('/src/assets/images/company/home/*', { eager: true });
+
+  const emit = defineEmits(['showDetail']);
+
   const unselectBgPath = getAssetURL('company/home/unselect-bg.png');
   const selectBgPath = getAssetURL('company/home/select-bg.png');
   let pointList = ref<any[]>([
-    { imgSrc: unselectBgPath, label: '柳塔矿', leftV: '327px', topV: '40px', textColor: '#fff' },
-    { imgSrc: unselectBgPath, label: '寸草塔二矿', leftV: '291px', topV: '69px', textColor: '#fff' },
-    { imgSrc: selectBgPath, label: '布尔台矿', leftV: '286px', topV: '97px', textColor: 'rgba(255, 231, 83,.9)' },
-    { imgSrc: unselectBgPath, label: '乌兰木伦矿', leftV: '327px', topV: '115px', textColor: '#fff' },
-    { imgSrc: selectBgPath, label: '寸草塔矿', leftV: '346px', topV: '132px', textColor: 'rgba(255, 231, 83,.9)' },
-    { imgSrc: unselectBgPath, label: '石坎台矿', leftV: '373px', topV: '149px', textColor: '#fff' },
-    { imgSrc: selectBgPath, label: '补连塔矿', leftV: '408px', topV: '184px', textColor: 'rgba(255, 231, 83,.9)' },
-    { imgSrc: unselectBgPath, label: '哈拉沟矿', leftV: '445px', topV: '214px', textColor: '#fff' },
-    { imgSrc: selectBgPath, label: '上湾矿', leftV: '439px', topV: '244px', textColor: 'rgba(255, 231, 83,.9)' },
-    { imgSrc: unselectBgPath, label: '活鸡兔井', leftV: '398px', topV: '265px', textColor: '#fff' },
-    { imgSrc: unselectBgPath, label: '大柳塔矿', leftV: '492px', topV: '260px', textColor: '#fff' },
-    { imgSrc: selectBgPath, label: '锦界矿', leftV: '565px', topV: '413px', textColor: 'rgba(255, 231, 83,.9)' },
-    { imgSrc: unselectBgPath, label: '榆家梁矿', leftV: '669px', topV: '308px', textColor: '#fff' },
-    { imgSrc: selectBgPath, label: '宝德矿', leftV: '862px', topV: '340px', textColor: 'rgba(255, 231, 83,.9)' },
+    { code: 'liuTa', imgSrc: unselectBgPath, label: '柳塔矿', leftV: '327px', topV: '40px', textColor: '#fff' },
+    { code: 'cunCaoErTa', imgSrc: unselectBgPath, label: '寸草塔二矿', leftV: '291px', topV: '69px', textColor: '#fff' },
+    { code: 'buErTaiTa', imgSrc: selectBgPath, label: '布尔台矿', leftV: '286px', topV: '97px', textColor: 'rgba(255, 231, 83,.9)' },
+    { code: 'wuLunTa', imgSrc: unselectBgPath, label: '乌兰木伦矿', leftV: '327px', topV: '115px', textColor: '#fff' },
+    { code: 'cunCaoTa', imgSrc: selectBgPath, label: '寸草塔矿', leftV: '346px', topV: '132px', textColor: 'rgba(255, 231, 83,.9)' },
+    { code: 'shiKanTa', imgSrc: unselectBgPath, label: '石坎台矿', leftV: '373px', topV: '149px', textColor: '#fff' },
+    { code: 'buLieTa', imgSrc: selectBgPath, label: '补连塔矿', leftV: '408px', topV: '184px', textColor: 'rgba(255, 231, 83,.9)' },
+    { code: 'haLaGouTa', imgSrc: unselectBgPath, label: '哈拉沟矿', leftV: '445px', topV: '214px', textColor: '#fff' },
+    { code: 'shangWanTa', imgSrc: selectBgPath, label: '上湾矿', leftV: '439px', topV: '244px', textColor: 'rgba(255, 231, 83,.9)' },
+    { code: 'huoJiTuTa', imgSrc: unselectBgPath, label: '活鸡兔井', leftV: '398px', topV: '265px', textColor: '#fff' },
+    { code: 'daLiuTa', imgSrc: unselectBgPath, label: '大柳塔矿', leftV: '492px', topV: '260px', textColor: '#fff' },
+    { code: 'jinJieTa', imgSrc: selectBgPath, label: '锦界矿', leftV: '565px', topV: '413px', textColor: 'rgba(255, 231, 83,.9)' },
+    { code: 'yuJiaTa', imgSrc: unselectBgPath, label: '榆家梁矿', leftV: '669px', topV: '308px', textColor: '#fff' },
+    { code: 'baoDeTa', imgSrc: selectBgPath, label: '宝德矿', leftV: '862px', topV: '340px', textColor: 'rgba(255, 231, 83,.9)' },
   ]);
+
+  function openModal(code, leftV, topV) {
+    debugger;
+    emit('showDetail', code, leftV, topV);
+  }
 </script>
 
 <style lang="less" scoped>

+ 20 - 10
src/views/vent/home/clique/index.vue

@@ -19,7 +19,7 @@
           <!-- 地图底图 -->
           <div class="center-bg">
             <div class="bg-map">
-              <iconLight />
+              <iconLight @show-detail="showDetail" />
             </div>
           </div>
           <!-- 榆家梁矿 -->
@@ -43,24 +43,37 @@
         </div>
       </div>
     </div>
+    <div class="area-card2" v-show="isShowDialog">
+      <dialogModal ref="dialogModalRef" @close-dialog="closeDialog" />
+    </div>
   </div>
 </template>
 <script lang="ts" setup>
-  import { ref } from 'vue';
+  import { ref, nextTick } from 'vue';
   import mineWind from './components/mine-wind.vue';
   import riskWarn from './components/risk-warn.vue';
   import fileShare from './components/file-share.vue';
-  import mapComponent from './components/3Dmap/index.vue';
   import windRoad from './components/wind-road.vue';
   import sceneKey from './components/scene-key.vue';
   import iconLight from './components/icon-light.vue';
-  // import mapComponent from './components/3Dmap/index.vue';
-
+  import dialogModal from './components/dialog-modal.vue';
+  const dialogModalRef = ref();
   let mainTitle = ref('国家能源神东煤炭集团');
-  function showDetail(code) {
+  const isShowDialog = ref(false);
+  function showDetail(code, leftV, topV) {
     if (code) {
-      // isShowDialog.value = true;
+      isShowDialog.value = true;
     }
+    nextTick(() => {
+      debugger;
+      const tooltipDom = document.getElementById('detailModal') as HTMLElement;
+      tooltipDom.style.left = leftV;
+      tooltipDom.style.top = topV;
+    });
+  }
+  function closeDialog() {
+    debugger;
+    isShowDialog.value = false;
   }
 </script>
 <style lang="less" scoped>
@@ -106,7 +119,6 @@
       height: 100%;
       background: url('../../../../assets/images/company/content-bg.png') no-repeat;
       background-size: 100% 100%;
-      pointer-events: none;
 
       .area-content {
         position: absolute;
@@ -117,7 +129,6 @@
         box-sizing: border-box;
         display: flex;
         justify-content: space-between;
-        // pointer-events: none;
         .left-area {
           width: 23%;
           height: 100%;
@@ -126,7 +137,6 @@
           flex-direction: column;
           justify-content: space-between;
           align-items: center;
-          // pointer-events: auto;
           .area-card {
             width: 100%;
             height: calc(60% - 15px);

+ 73 - 66
src/views/vent/monitorManager/alarmMonitor/AlarmHistoryTable.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="history-table">
-    <BasicTable ref="historyTable" @register="registerTable" >
+    <BasicTable ref="historyTable" @register="registerTable">
       <template #bodyCell="{ column, record }">
         <slot name="filterCell" v-bind="{ column, record }"></slot>
       </template>
@@ -15,7 +15,7 @@
   import { BasicTable } from '/@/components/Table';
   import { useListPage } from '/@/hooks/system/useListPage';
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
-  import { warningHistoryList } from './alarm.api'
+  import { warningHistoryList } from './alarm.api';
   import dayjs from 'dayjs';
   import { getAutoScrollContainer } from '/@/utils/common/compUtils';
 
@@ -42,50 +42,53 @@
     },
     scroll: {
       type: Object,
-      default: { y: 0 }
+      default: { y: 0 },
     },
     formSchemas: {
       type: Array<FormSchema>,
-      default: () => []
-    }
+      default: () => [],
+    },
   });
-  const columns = ref([])
-  const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({})
+  const columns = ref([]);
+  const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({});
 
   watch(
     () => {
       return props.columnsType;
     },
     (newVal) => {
-      if (!newVal) return
-      const column = getTableHeaderColumns(newVal + '_history')
+      if (!newVal) return;
+      const column = getTableHeaderColumns(newVal + '_history');
       if (column && column.length < 1) {
-        const arr = newVal.split('_')
+        const arr = newVal.split('_');
         const columnKey = arr.reduce((prev, cur, index) => {
           if (index !== arr.length - 2) {
-            return prev + '_' + cur
+            return prev + '_' + cur;
           } else {
-            return prev
+            return prev;
           }
-        })
+        });
         columns.value = getTableHeaderColumns(arr[0] + '_history');
       } else {
-        columns.value = column
+        columns.value = column;
       }
-      if(historyTable.value) reload()
+      if (historyTable.value) reload();
     },
     {
-      immediate: true
+      immediate: true,
     }
   );
 
-  watch(() => props.scroll.y, (newVal) => {
-    if(newVal){
-      tableScroll.value = {y: newVal - 100 }
-    }else{
-      tableScroll.value = {}
+  watch(
+    () => props.scroll.y,
+    (newVal) => {
+      if (newVal) {
+        tableScroll.value = { y: newVal - 100 };
+      } else {
+        tableScroll.value = {};
+      }
     }
-  })
+  );
 
   // 列表页面公共参数、方法
   const { tableContext } = useListPage({
@@ -112,39 +115,46 @@
           xl: 7,
           xxl: 4,
         },
-        schemas: props.formSchemas.length > 0 ? props.formSchemas : [
-          // {
-          //   label: '报警时间区间',
-          //   field: 'tickectDate',
-          //   component: 'TimeRangePicker',
-          //   componentProps: {
-          //     placeholder: ['报警开始时间', '报警结束时间'],
-          //     valueFormat: 'YYYY-MM-DD HH:mm:ss',
-          //   },
-          // },
-          {
-            field: 'starttime_begin',
-            label: '开始时间',
-            component: 'DatePicker',
-            required: true,
-            componentProps: {
-              showTime: true,
-              valueFormat: 'YYYY-MM-DD HH:mm:ss',
-              getPopupContainer: getAutoScrollContainer,
-            },
-          },
-          {
-            field: 'starttime_end',
-            label: '结束时间',
-            component: 'DatePicker',
-            required: true,
-            componentProps: {
-              showTime: true,
-              valueFormat: 'YYYY-MM-DD HH:mm:ss',
-              getPopupContainer: getAutoScrollContainer,
-            },
-          },
-        ],
+        schemas:
+          props.formSchemas.length > 0
+            ? props.formSchemas
+            : [
+                // {
+                //   label: '报警时间区间',
+                //   field: 'tickectDate',
+                //   component: 'TimeRangePicker',
+                //   componentProps: {
+                //     placeholder: ['报警开始时间', '报警结束时间'],
+                //     valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                //   },
+                // },
+                {
+                  field: 'starttime_begin',
+                  label: '开始时间',
+                  component: 'DatePicker',
+                  defaultValue: dayjs().subtract(1, 'day'),
+                  required: true,
+                  labelWidth: 140,
+                  componentProps: {
+                    showTime: true,
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                    getPopupContainer: getAutoScrollContainer,
+                  },
+                },
+                {
+                  field: 'starttime_end',
+                  label: '结束时间',
+                  component: 'DatePicker',
+                  required: true,
+                  defaultValue: dayjs(),
+                  labelWidth: 140,
+                  componentProps: {
+                    showTime: true,
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                    getPopupContainer: getAutoScrollContainer,
+                  },
+                },
+              ],
         // fieldMapToTime: [['tickectDate', ['starttime_begin', 'starttime_end'], '']],
       },
       fetchSetting: {
@@ -155,11 +165,11 @@
       },
       beforeFetch(params) {
         params.strtype = props.deviceType + '*';
-        if(props.sysId){
+        if (props.sysId) {
           params.sysId = props.sysId;
         }
-        if(params['datalist.pages'])params['pages'] = params['datalist.pages']
-        if (params['datalist.size']) params['pageSize'] = params['datalist.size']
+        if (params['datalist.pages']) params['pages'] = params['datalist.pages'];
+        if (params['datalist.size']) params['pageSize'] = params['datalist.size'];
       },
       afterFetch(resultItems) {
         resultItems.map((item) => {
@@ -180,20 +190,17 @@
     }
   });
 
-  
-
-  defineExpose({ setLoading })
+  defineExpose({ setLoading });
 </script>
 
 <style scoped lang="less">
   @import '/@/design/vent/color.less';
-  
 
   :deep(.@{ventSpace}-table-body) {
     height: auto !important;
   }
-  :deep(.zxm-picker){
-      height: 30px !important;
+  :deep(.zxm-picker) {
+    height: 30px !important;
   }
   .history-table {
     width: 100%;
@@ -224,7 +231,7 @@
     }
   }
 
-  ::v-deep .zxm-table-content{
-    overflow: hidden !important; 
+  ::v-deep .zxm-table-content {
+    overflow: hidden !important;
   }
 </style>

+ 3 - 5
src/views/vent/monitorManager/alarmMonitor/alarm.api.ts

@@ -7,9 +7,8 @@ enum Api {
   warningHistoryList = '/safety/ventanalyAlarmLog/list',
   totalList = '/safety/ventanalyAlarmLog/total',
 
-  sysTypeWarnList='/ventanaly-device/safety/ventanalyAlarmLog/sysTypeWarn',
-  sysWarn='/ventanaly-device/safety/ventanalyAlarmLog/sysWarn'
-
+  sysTypeWarnList = '/ventanaly-device/safety/ventanalyAlarmLog/sysTypeWarn',
+  sysWarn = '/ventanaly-device/safety/ventanalyAlarmLog/sysWarn',
 }
 /**
  * 列表接口
@@ -30,7 +29,6 @@ export const warningHistoryList = (params) => defHttp.get({ url: Api.warningHist
 //预警列表接口
 export const getTotalList = (params) => defHttp.get({ url: Api.totalList, params });
 
-
 /**
  *预警详情弹窗左侧
  * @param params
@@ -41,4 +39,4 @@ export const sysTypeWarnList = (params) => defHttp.post({ url: Api.sysTypeWarnLi
  *预警详情弹窗右侧
  * @param params
  */
- export const sysWarn = (params) => defHttp.post({ url: Api.sysWarn, params });
+export const sysWarn = (params) => defHttp.post({ url: Api.sysWarn, params });

+ 996 - 980
src/views/vent/monitorManager/alarmMonitor/index.vue

@@ -50,8 +50,15 @@
             </div>
           </div>
           <!-- <div ref="alarmCounts" style="height: 225px" id="alarmCounts"></div> -->
-          <BarSingle :xAxisData="xAxisData" :dataSource="windData.levels" height="225px" :chartsColumns="chartsColumns"
-            :option="option" :color="colors" :fontColor="fontColor" />
+          <BarSingle
+            :xAxisData="xAxisData"
+            :dataSource="windData.levels"
+            height="225px"
+            :chartsColumns="chartsColumns"
+            :option="option"
+            :color="colors"
+            :fontColor="fontColor"
+          />
         </template>
       </ventBox1>
       <ventBox1 class="vent-margin-t-10">
@@ -67,33 +74,36 @@
                 </div>
                 <div></div>
                 <img :src="item.url" :alt="item.text" />
-                <div class="level-text" :class="{
-                  'level-text-0': item.level == 0,
-                  'level-text-1': item.level == 101,
-                  'level-text-2': item.level == 102,
-                  'level-text-3': item.level == 103,
-                  'level-text-4': item.level == 104,
-                  'level-text-5': item.level == 201,
-                  'level-text-6': item.level != 0 && item.level != 101 && item.level != 102 && item.level != 103 && item.level != 104 && item.level != 201,
-                }">{{
-  item.level == 0
-  ? '正常'
-  : item.level == 101
-    ? '较低风险'
-    : item.level == 102
-      ? '低风险'
-      : item.level == 103
-        ? '中风险'
-        : item.level == 104
-          ? '高风险'
-          : item.level == 201
-            ? '报警'
-            : '未连接'
-}}</div>
+                <div
+                  class="level-text"
+                  :class="{
+                    'level-text-0': item.level == 0,
+                    'level-text-1': item.level == 101,
+                    'level-text-2': item.level == 102,
+                    'level-text-3': item.level == 103,
+                    'level-text-4': item.level == 104,
+                    'level-text-5': item.level == 201,
+                    'level-text-6':
+                      item.level != 0 && item.level != 101 && item.level != 102 && item.level != 103 && item.level != 104 && item.level != 201,
+                  }"
+                  >{{
+                    item.level == 0
+                      ? '正常'
+                      : item.level == 101
+                      ? '较低风险'
+                      : item.level == 102
+                      ? '低风险'
+                      : item.level == 103
+                      ? '中风险'
+                      : item.level == 104
+                      ? '高风险'
+                      : item.level == 201
+                      ? '报警'
+                      : '未连接'
+                  }}</div
+                >
               </div>
-
             </template>
-            
           </div>
         </template>
       </ventBox1>
@@ -101,21 +111,28 @@
     <div class="center-box">
       <div class="animation-box">
         <canvas class="rain"></canvas>
-        <div class="bottom" :class="{
-          bottom1: centerData.levels == 101 || centerData.levels == 0,
-          bottom2: centerData.levels == 102,
-          bottom3: centerData.levels == 103,
-          bottom4: centerData.levels == 104,
-          bottom5: centerData.levels == 201,
-        }">
+        <div
+          class="bottom"
+          :class="{
+            bottom1: centerData.levels == 101 || centerData.levels == 0,
+            bottom2: centerData.levels == 102,
+            bottom3: centerData.levels == 103,
+            bottom4: centerData.levels == 104,
+            bottom5: centerData.levels == 201,
+          }"
+        >
           <div class="animation1">
             <div class="ball"></div>
-            <svg xmlns="http://www.w3.org/2000/svg" width="375.334" height="77.559" viewBox="0 0 375.334 77.559"
-              style="opacity: 0.5">
+            <svg xmlns="http://www.w3.org/2000/svg" width="375.334" height="77.559" viewBox="0 0 375.334 77.559" style="opacity: 0.5">
               <g id="组_14135" data-name="组 14135" transform="translate(-755.058 -139.886)">
-                <path id="椭圆_2595" data-name="椭圆 2595"
+                <path
+                  id="椭圆_2595"
+                  data-name="椭圆 2595"
                   d="M186.917-.75c12.711,0,25.415.263,37.757.783,12.03.506,23.863,1.262,35.171,2.245,11.1.966,21.816,2.161,31.835,3.553,9.928,1.379,19.265,2.963,27.751,4.709s16.2,3.668,22.92,5.713A120.653,120.653,0,0,1,359.7,22.825a40.842,40.842,0,0,1,11.018,7.3c2.568,2.581,3.87,5.239,3.87,7.9s-1.3,5.322-3.87,7.9a40.842,40.842,0,0,1-11.018,7.3,120.653,120.653,0,0,1-17.345,6.572c-6.716,2.044-14.428,3.966-22.92,5.713s-17.823,3.329-27.751,4.709c-10.02,1.392-20.731,2.588-31.835,3.553-11.308.984-23.142,1.739-35.171,2.245-12.343.519-25.046.783-37.757.783s-25.415-.263-37.757-.783c-12.03-.506-23.863-1.262-35.171-2.245-11.1-.966-21.816-2.161-31.835-3.553-9.928-1.379-19.265-2.963-27.751-4.709s-16.2-3.668-22.92-5.713a120.652,120.652,0,0,1-17.345-6.572,40.841,40.841,0,0,1-11.018-7.3c-2.568-2.581-3.87-5.239-3.87-7.9s1.3-5.322,3.87-7.9a40.842,40.842,0,0,1,11.018-7.3,120.651,120.651,0,0,1,17.345-6.572C38.2,14.208,45.91,12.286,54.4,10.54S72.225,7.211,82.153,5.831c10.02-1.392,20.731-2.588,31.835-3.553C125.3,1.294,137.13.539,149.16.033,161.5-.487,174.206-.75,186.917-.75Zm0,76.98c49.941,0,96.885-4,132.186-11.257,17.134-3.523,30.578-7.623,39.96-12.184,9.642-4.688,14.53-9.653,14.53-14.759s-4.889-10.072-14.53-14.759c-9.382-4.561-22.826-8.66-39.96-12.184C283.8,3.827,236.858-.171,186.917-.171s-96.885,4-132.186,11.257C37.6,14.61,24.153,18.709,14.771,23.27,5.129,27.958.241,32.923.241,38.029S5.129,48.1,14.771,52.789c9.382,4.561,22.826,8.661,39.96,12.184C90.032,72.232,136.976,76.23,186.917,76.23Z"
-                  transform="translate(755.808 140.636)" fill="#28a6ff" opacity="0.7" />
+                  transform="translate(755.808 140.636)"
+                  fill="#28a6ff"
+                  opacity="0.7"
+                />
               </g>
             </svg>
           </div>
@@ -123,25 +140,32 @@
             <div class="ball1"></div>
             <svg xmlns="http://www.w3.org/2000/svg" width="414.878" height="91.7" viewBox="0 0 414.878 91.7">
               <g id="组_14136" data-name="组 14136" transform="translate(-721.822 -158.273)">
-                <path id="椭圆_2595" data-name="椭圆 2595"
+                <path
+                  id="椭圆_2595"
+                  data-name="椭圆 2595"
                   d="M206.689-.75c14.05,0,28.092.311,41.735.925,13.3.6,26.377,1.492,38.877,2.655,12.275,1.142,24.114,2.555,35.189,4.2,10.974,1.631,21.294,3.5,30.674,5.567s17.91,4.337,25.335,6.754a128.134,128.134,0,0,1,19.172,7.771,45.082,45.082,0,0,1,12.178,8.633c2.838,3.051,4.278,6.195,4.278,9.344s-1.439,6.293-4.278,9.344a45.082,45.082,0,0,1-12.178,8.633A128.134,128.134,0,0,1,378.5,70.847c-7.424,2.417-15.948,4.69-25.335,6.754s-19.7,3.936-30.674,5.567c-11.075,1.646-22.915,3.059-35.189,4.2-12.5,1.163-25.58,2.056-38.877,2.655-13.643.614-27.685.925-41.735.925s-28.092-.311-41.735-.925c-13.3-.6-26.377-1.492-38.877-2.655-12.275-1.142-24.114-2.555-35.189-4.2-10.974-1.631-21.294-3.5-30.674-5.567S42.3,73.265,34.879,70.847a128.133,128.133,0,0,1-19.173-7.771A45.082,45.082,0,0,1,3.528,54.444C.689,51.393-.75,48.249-.75,45.1s1.439-6.293,4.278-9.344a45.083,45.083,0,0,1,12.178-8.633,128.133,128.133,0,0,1,19.173-7.771c7.424-2.417,15.948-4.69,25.335-6.754s19.7-3.936,30.674-5.567c11.075-1.646,22.915-3.059,35.189-4.2,12.5-1.163,25.58-2.056,38.877-2.655C178.6-.439,192.639-.75,206.689-.75Zm0,91.015c55.2,0,107.093-4.727,146.113-13.31,18.939-4.166,33.8-9.012,44.17-14.405,10.657-5.542,16.061-11.413,16.061-17.45s-5.4-11.908-16.061-17.45c-10.37-5.393-25.231-10.24-44.17-14.405C313.782,4.662,261.892-.065,206.689-.065S99.6,4.662,60.576,13.244c-18.939,4.166-33.8,9.012-44.17,14.405C5.749,33.192.345,39.063.345,45.1s5.4,11.908,16.061,17.45c10.37,5.393,25.231,10.24,44.17,14.405C99.6,85.538,151.487,90.265,206.689,90.265Z"
-                  transform="translate(722.572 159.023)" fill="#3dd8ff" opacity="0.5" />
+                  transform="translate(722.572 159.023)"
+                  fill="#3dd8ff"
+                  opacity="0.5"
+                />
               </g>
             </svg>
           </div>
           <div class="text-box">
             <div class="text1">{{
               centerData.levels == 101
-              ? '较低风险'
-              : centerData.levels == 102
+                ? '较低风险'
+                : centerData.levels == 102
                 ? '低风险'
                 : centerData.levels == 103
-                  ? '中风险'
-                  : centerData.levels == 104
-                    ? '高风险'
-                    : centerData.levels == 201
-                      ? '报警'
-                      : centerData.levels == 0 ? '正常' : '网络异常'
+                ? '中风险'
+                : centerData.levels == 104
+                ? '高风险'
+                : centerData.levels == 201
+                ? '报警'
+                : centerData.levels == 0
+                ? '正常'
+                : '网络异常'
             }}</div>
             <div class="text2">风险分析</div>
           </div>
@@ -203,19 +227,21 @@
       <div class="fire-monitor">
         <div class="monitor-title top" @click="showModal('fire')">火灾预警监测</div>
         <div class="container">
-
           <div class="item item1">
             <div class="icon"></div>
             <div class="data-box" v-for="(item, index) in fireMonitor1" :key="index">
-              <div :class="{
-                'value1': item.level == 0,
-                'value2': item.level == 101,
-                'value3': item.level == 102,
-                'value4': item.level == 103,
-                'value5': item.level == 104,
-                'value6': item.level == 201,
-                'value': item.level != 0 && item.level != 101 && item.level != 102 && item.level != 103 && item.level != 104 && item.level != 201,
-              }">{{ item.value ? item.value : '-' }} </div>
+              <div
+                :class="{
+                  value1: item.level == 0,
+                  value2: item.level == 101,
+                  value3: item.level == 102,
+                  value4: item.level == 103,
+                  value5: item.level == 104,
+                  value6: item.level == 201,
+                  value: item.level != 0 && item.level != 101 && item.level != 102 && item.level != 103 && item.level != 104 && item.level != 201,
+                }"
+                >{{ item.value ? item.value : '-' }}
+              </div>
               <div class="title">{{ item.title }}</div>
             </div>
           </div>
@@ -260,7 +286,7 @@
             </div>
             <div class="gas-item">
               <div class="top">
-                <div class="value">{{ gasData.sums1 !=0 ? gasData.sums1 : '-' }}</div>
+                <div class="value">{{ gasData.sums1 != 0 ? gasData.sums1 : '-' }}</div>
                 <div class="title">瓦斯抽采系统监测点</div>
               </div>
               <div class="detail-box">
@@ -278,7 +304,6 @@
           <div class="monitor-title" @click="showModal('dust')">粉尘预警监测</div>
         </template>
         <template #container>
-
           <!-- <div class="dust-monitor">
             <div v-for="(item, index) in dustMonitor" :key="index" class="item-box">
               <div class="title">{{ item.title }}</div>
@@ -286,1167 +311,1158 @@
             </div>
           </div> -->
 
-          <BarSingle :xAxisData="xAxisData" :dataSource="dustData.levels" height="332px" :chartsColumns="chartsColumns"
-            :option="option" :color="colors" :fontColor="fontColor" />
+          <BarSingle
+            :xAxisData="xAxisData"
+            :dataSource="dustData.levels"
+            height="332px"
+            :chartsColumns="chartsColumns"
+            :option="option"
+            :color="colors"
+            :fontColor="fontColor"
+          />
         </template>
       </ventBox1>
     </div>
   </div>
   <DetailModal v-if="isShowDialog == 'table'" v-model:visible="modalVisible" @register="register" @close="hideModal" />
   <!-- 火灾监测弹框 -->
-  <DetailModalFire v-if="isShowDialog == 'others'" v-model:visible="modalVisible" @register="register"
-    :moduleObj="moduleObj" @close="hideModal" />
+  <DetailModalFire v-if="isShowDialog == 'others'" v-model:visible="modalVisible" @register="register" :moduleObj="moduleObj" @close="hideModal" />
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted, onUnmounted, reactive } from 'vue';
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
-import DetailModal from './DetailModal.vue';
-import DetailModalFire from './DetailModalFire.vue'; //火灾监测弹窗
-import { getTotalList } from './alarm.api';
-import {
-  iconsMonitor,
-  chartsColumns,
-  xAxisData,
-  option,
-  colors,
-  fontColor,
-  fireMonitor,
-  fireMonitor1,
-} from './alarm.data';
-import ventBox1 from '/@/components/vent/ventBox1.vue';
-import BarSingle from '../../../../components/chart/BarSingle.vue';
-import { rainBg } from '/@/utils/ui.js';
-import { useModal } from '/@/components/Modal';
-
-let isShowDialog = ref(''); //切换弹窗显示
-let moduleObj = reactive({
-  ids: 0,
-  moduleName: ''
-}); //火灾、粉尘、瓦斯模块名
-const alarmCounts = ref();
-const modalVisible = ref(false);
-
-const resetScroll = (e: Event) => {
-  if (e.target && e.target) (e.target as Element).scrollTop = 0;
-};
-let windData = reactive({
-  levels: {},
-  jf: 0,
-  hf: 0,
-  xf: 0,
-}); //通风监测数据
-let dustData = reactive({
-  //粉尘监测数据
-  levels: {},
-});
-let centerData = reactive({
-  fire: '',
-  tf: '',
-  ws: '',
-  sb: '',
-  fc: '',
-  levels: 0,
-});
-//瓦斯
-let gasMonitor = reactive<any[]>([]);
-let gasData = {
-  sums: 0,
-  sums1: 0,
-}
-const [register, { openModal }] = useModal();
-
-function showModal(data) {
-  isShowDialog.value = data == 'sbyj' ? 'table' : 'others';
-  moduleObj.ids=new Date().getTime()
-  moduleObj.moduleName = data;
-  modalVisible.value = true;
-  openModal();
-}
-
-function hideModal() {
-  modalVisible.value = false;
-}
-
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor(flag = false) {
-  if (Object.prototype.toString.call(timer) === '[object Null]') {
-    timer = setTimeout(
-      async () => {
-        // await getDataSource();
-        await getList();
-        if (timer) {
-          timer = null;
-        }
-        getMonitor();
-      },
-      flag ? 0 : 10000
-    );
+  import { ref, onMounted, onUnmounted, reactive } from 'vue';
+  import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+  import DetailModal from './DetailModal.vue';
+  import DetailModalFire from './DetailModalFire.vue'; //火灾监测弹窗
+  import { getTotalList } from './alarm.api';
+  import { iconsMonitor, chartsColumns, xAxisData, option, colors, fontColor, fireMonitor, fireMonitor1 } from './alarm.data';
+  import ventBox1 from '/@/components/vent/ventBox1.vue';
+  import BarSingle from '../../../../components/chart/BarSingle.vue';
+  import { rainBg } from '/@/utils/ui.js';
+  import { useModal } from '/@/components/Modal';
+
+  let isShowDialog = ref(''); //切换弹窗显示
+  let moduleObj = reactive({
+    ids: 0,
+    moduleName: '',
+  }); //火灾、粉尘、瓦斯模块名
+  const alarmCounts = ref();
+  const modalVisible = ref(false);
+
+  const resetScroll = (e: Event) => {
+    if (e.target && e.target) (e.target as Element).scrollTop = 0;
+  };
+  let windData = reactive({
+    levels: {},
+    jf: 0,
+    hf: 0,
+    xf: 0,
+  }); //通风监测数据
+  let dustData = reactive({
+    //粉尘监测数据
+    levels: {},
+  });
+  let centerData = reactive({
+    fire: '',
+    tf: '',
+    ws: '',
+    sb: '',
+    fc: '',
+    levels: 0,
+  });
+  //瓦斯
+  let gasMonitor = reactive<any[]>([]);
+  let gasData = {
+    sums: 0,
+    sums1: 0,
+  };
+  const [register, { openModal }] = useModal();
+
+  function showModal(data) {
+    isShowDialog.value = data == 'sbyj' ? 'table' : 'others';
+    moduleObj.ids = new Date().getTime();
+    moduleObj.moduleName = data;
+    modalVisible.value = true;
+    openModal();
+  }
+
+  function hideModal() {
+    modalVisible.value = false;
   }
-}
-
-
-
-// 获取预警数据
-async function getList() {
-  const res = await getTotalList({});
-  console.log(res, '预警数据--------------');
-  let data = [];
-  windData.levels = res.info.sysInfo.ventS.levels;
-  windData.jf = res.ventInfo.zongfengliang;
-  windData.hf = res.ventInfo.zonghuifeng;
-  windData.xf = res.ventInfo.xufengliang;
-  dustData.levels = res.info.sysInfo.dustS.levels;
-  centerData.fire = res.info.sysInfo.fireS.status;
-  centerData.tf = res.info.sysInfo.ventS.status;
-  centerData.ws = res.info.sysInfo.gasS.status;
-  centerData.sb = res.info.deviceWarnInfo.status;
-  centerData.fc = res.info.sysInfo.dustS.status;
-  Object.keys(res.info.sysInfo).forEach((v) => {
-    if (res.info.sysInfo[v].maxLevel) {
-      data.push(res.info.sysInfo[v].maxLevel);
-    } else {
-      data.push(0);
+
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  function getMonitor(flag = false) {
+    if (Object.prototype.toString.call(timer) === '[object Null]') {
+      timer = setTimeout(
+        async () => {
+          // await getDataSource();
+          await getList();
+          if (timer) {
+            timer = null;
+          }
+          getMonitor();
+        },
+        flag ? 0 : 10000
+      );
     }
+  }
+
+  // 获取预警数据
+  async function getList() {
+    const res = await getTotalList({});
+    console.log(res, '预警数据--------------');
+    let data = [];
+    windData.levels = res.info.sysInfo.ventS.levels;
+    // windData.jf = res.ventInfo.zongfengliang;
+    windData.jf = res.ventInfo.zongjinfeng;
+    windData.hf = res.ventInfo.zonghuifeng;
+    windData.xf = res.ventInfo.xufengliang;
+    dustData.levels = res.info.sysInfo.dustS.levels;
+    centerData.fire = res.info.sysInfo.fireS.status;
+    centerData.tf = res.info.sysInfo.ventS.status;
+    centerData.ws = res.info.sysInfo.gasS.status;
+    centerData.sb = res.info.deviceWarnInfo.status;
+    centerData.fc = res.info.sysInfo.dustS.status;
+    Object.keys(res.info.sysInfo).forEach((v) => {
+      if (res.info.sysInfo[v].maxLevel) {
+        data.push(res.info.sysInfo[v].maxLevel);
+      } else {
+        data.push(0);
+      }
+    });
+    data = data.sort((a, b) => b - a);
+    centerData.levels = data[0];
+    Object.keys(iconsMonitor).forEach((el) => {
+      if (res.info.devicekindInfo[el]) {
+        iconsMonitor[el].level = res.info.devicekindInfo[el].maxLevel;
+      }
+    });
+    // fireMonitor[0].value = res.info.sysInfo.fireS.summaryInfo.external.temperature ? res.info.sysInfo.fireS.summaryInfo.external.temperature.value : '';
+    // fireMonitor[0].level = res.info.sysInfo.fireS.summaryInfo.external.temperature ? res.info.sysInfo.fireS.summaryInfo.external.temperature.maxlevel : '';
+    // fireMonitor[1].value = res.info.sysInfo.fireS.summaryInfo.external.coval ? res.info.sysInfo.fireS.summaryInfo.external.coval.value : '';
+    // fireMonitor[1].level = res.info.sysInfo.fireS.summaryInfo.external.coval ? res.info.sysInfo.fireS.summaryInfo.external.coval.maxlevel : '';
+    // fireMonitor[2].value = res.info.sysInfo.fireS.summaryInfo.external.chval ? res.info.sysInfo.fireS.summaryInfo.external.chval.value : '';
+    // fireMonitor[2].level = res.info.sysInfo.fireS.summaryInfo.external.chval ? res.info.sysInfo.fireS.summaryInfo.external.chval.maxlevel : '';
+    // fireMonitor[3].value = res.info.sysInfo.fireS.summaryInfo.external.ch2val ? res.info.sysInfo.fireS.summaryInfo.external.ch2val.value : '';
+    // fireMonitor[3].level = res.info.sysInfo.fireS.summaryInfo.external.ch2val ? res.info.sysInfo.fireS.summaryInfo.external.ch2val.maxlevel : '';
+    // fireMonitor[4].value = res.info.sysInfo.fireS.summaryInfo.external.co2val ? res.info.sysInfo.fireS.summaryInfo.external.co2val.value : '';
+    // fireMonitor[4].level = res.info.sysInfo.fireS.summaryInfo.external.co2val ? res.info.sysInfo.fireS.summaryInfo.external.co2val.maxlevel : '';
+    // fireMonitor[5].value = res.info.sysInfo.fireS.summaryInfo.external.o2val ? res.info.sysInfo.fireS.summaryInfo.external.o2val.value : '';
+    // fireMonitor[5].level = res.info.sysInfo.fireS.summaryInfo.external.o2val ? res.info.sysInfo.fireS.summaryInfo.external.o2val.maxlevel : '';
+
+    fireMonitor1[0].value = res.info.sysInfo.fireS.summaryInfo.internal.coval ? res.info.sysInfo.fireS.summaryInfo.internal.coval.value : '';
+    fireMonitor1[0].level = res.info.sysInfo.fireS.summaryInfo.internal.coval ? res.info.sysInfo.fireS.summaryInfo.internal.coval.maxlevel : '';
+    fireMonitor1[1].value = res.info.sysInfo.fireS.summaryInfo.internal.chval ? res.info.sysInfo.fireS.summaryInfo.internal.chval.value : '';
+    fireMonitor1[1].level = res.info.sysInfo.fireS.summaryInfo.internal.chval ? res.info.sysInfo.fireS.summaryInfo.internal.chval.maxlevel : '';
+    fireMonitor1[2].value = res.info.sysInfo.fireS.summaryInfo.internal.ch2val ? res.info.sysInfo.fireS.summaryInfo.internal.ch2val.value : '';
+    fireMonitor1[2].level = res.info.sysInfo.fireS.summaryInfo.internal.ch2val ? res.info.sysInfo.fireS.summaryInfo.internal.ch2val.maxlevel : '';
+    fireMonitor1[3].value = res.info.sysInfo.fireS.summaryInfo.internal.co2val ? res.info.sysInfo.fireS.summaryInfo.internal.co2val.value : '';
+    fireMonitor1[3].level = res.info.sysInfo.fireS.summaryInfo.internal.co2val ? res.info.sysInfo.fireS.summaryInfo.internal.co2val.maxlevel : '';
+    fireMonitor1[4].value = res.info.sysInfo.fireS.summaryInfo.internal.o2val ? res.info.sysInfo.fireS.summaryInfo.internal.o2val.value : '';
+    fireMonitor1[4].level = res.info.sysInfo.fireS.summaryInfo.internal.o2val ? res.info.sysInfo.fireS.summaryInfo.internal.o2val.maxlevel : '';
+    gasMonitor.length = 0;
+    gasData.sums = 0;
+    gasData.sums1 = 0;
+    res.info.sysInfo.gasS.devices.forEach((el) => {
+      gasData.sums += el.gasNumber;
+      gasData.sums1 += el.pumpNumber;
+      gasMonitor.push({ label: el.systemname, value: el.gasNumber, value1: el.pumpNumber });
+    });
+  }
+
+  onMounted(async () => {
+    getMonitor(true);
+    rainBg('rain', 'animation-box');
   });
-  data = data.sort((a, b) => b - a);
-  centerData.levels = data[0];
-  Object.keys(iconsMonitor).forEach((el) => {
-    if (res.info.devicekindInfo[el]) {
-      iconsMonitor[el].level = res.info.devicekindInfo[el].maxLevel;
+
+  onUnmounted(() => {
+    if (timer) {
+      clearTimeout(timer);
+      timer = undefined;
     }
   });
-  // fireMonitor[0].value = res.info.sysInfo.fireS.summaryInfo.external.temperature ? res.info.sysInfo.fireS.summaryInfo.external.temperature.value : '';
-  // fireMonitor[0].level = res.info.sysInfo.fireS.summaryInfo.external.temperature ? res.info.sysInfo.fireS.summaryInfo.external.temperature.maxlevel : '';
-  // fireMonitor[1].value = res.info.sysInfo.fireS.summaryInfo.external.coval ? res.info.sysInfo.fireS.summaryInfo.external.coval.value : '';
-  // fireMonitor[1].level = res.info.sysInfo.fireS.summaryInfo.external.coval ? res.info.sysInfo.fireS.summaryInfo.external.coval.maxlevel : '';
-  // fireMonitor[2].value = res.info.sysInfo.fireS.summaryInfo.external.chval ? res.info.sysInfo.fireS.summaryInfo.external.chval.value : '';
-  // fireMonitor[2].level = res.info.sysInfo.fireS.summaryInfo.external.chval ? res.info.sysInfo.fireS.summaryInfo.external.chval.maxlevel : '';
-  // fireMonitor[3].value = res.info.sysInfo.fireS.summaryInfo.external.ch2val ? res.info.sysInfo.fireS.summaryInfo.external.ch2val.value : '';
-  // fireMonitor[3].level = res.info.sysInfo.fireS.summaryInfo.external.ch2val ? res.info.sysInfo.fireS.summaryInfo.external.ch2val.maxlevel : '';
-  // fireMonitor[4].value = res.info.sysInfo.fireS.summaryInfo.external.co2val ? res.info.sysInfo.fireS.summaryInfo.external.co2val.value : '';
-  // fireMonitor[4].level = res.info.sysInfo.fireS.summaryInfo.external.co2val ? res.info.sysInfo.fireS.summaryInfo.external.co2val.maxlevel : '';
-  // fireMonitor[5].value = res.info.sysInfo.fireS.summaryInfo.external.o2val ? res.info.sysInfo.fireS.summaryInfo.external.o2val.value : '';
-  // fireMonitor[5].level = res.info.sysInfo.fireS.summaryInfo.external.o2val ? res.info.sysInfo.fireS.summaryInfo.external.o2val.maxlevel : '';
-
-  fireMonitor1[0].value = res.info.sysInfo.fireS.summaryInfo.internal.coval ? res.info.sysInfo.fireS.summaryInfo.internal.coval.value : '';
-  fireMonitor1[0].level = res.info.sysInfo.fireS.summaryInfo.internal.coval ? res.info.sysInfo.fireS.summaryInfo.internal.coval.maxlevel : '';
-  fireMonitor1[1].value = res.info.sysInfo.fireS.summaryInfo.internal.chval ? res.info.sysInfo.fireS.summaryInfo.internal.chval.value : '';
-  fireMonitor1[1].level = res.info.sysInfo.fireS.summaryInfo.internal.chval ? res.info.sysInfo.fireS.summaryInfo.internal.chval.maxlevel : '';
-  fireMonitor1[2].value = res.info.sysInfo.fireS.summaryInfo.internal.ch2val ? res.info.sysInfo.fireS.summaryInfo.internal.ch2val.value : '';
-  fireMonitor1[2].level = res.info.sysInfo.fireS.summaryInfo.internal.ch2val ? res.info.sysInfo.fireS.summaryInfo.internal.ch2val.maxlevel : '';
-  fireMonitor1[3].value = res.info.sysInfo.fireS.summaryInfo.internal.co2val ? res.info.sysInfo.fireS.summaryInfo.internal.co2val.value : '';
-  fireMonitor1[3].level = res.info.sysInfo.fireS.summaryInfo.internal.co2val ? res.info.sysInfo.fireS.summaryInfo.internal.co2val.maxlevel : '';
-  fireMonitor1[4].value = res.info.sysInfo.fireS.summaryInfo.internal.o2val ? res.info.sysInfo.fireS.summaryInfo.internal.o2val.value : '';
-  fireMonitor1[4].level = res.info.sysInfo.fireS.summaryInfo.internal.o2val ? res.info.sysInfo.fireS.summaryInfo.internal.o2val.maxlevel : '';
-  gasMonitor.length = 0
-  gasData.sums = 0
-  gasData.sums1 = 0
-  res.info.sysInfo.gasS.devices.forEach(el => {
-    gasData.sums += el.gasNumber
-    gasData.sums1 += el.pumpNumber
-    gasMonitor.push({ label: el.systemname, value: el.gasNumber, value1: el.pumpNumber })
-  })
-  
-}
-
-onMounted(async () => {
-  getMonitor(true);
-  rainBg('rain', 'animation-box');
-});
-
-onUnmounted(() => {
-  if (timer) {
-    clearTimeout(timer);
-    timer = undefined;
-  }
-});
 </script>
 <style lang="less" scoped>
-@import '/@/design/vent/color.less';
-@a : 370px; // 椭圆x轴半径(长半径)
-@b : 107px; // 椭圆y轴半径(短半径)
-@s : 40; // 坐标点的数目(数目越大,动画越精细)
+  @import '/@/design/vent/color.less';
+  @a: 370px; // 椭圆x轴半径(长半径)
+  @b: 107px; // 椭圆y轴半径(短半径)
+  @s: 40; // 坐标点的数目(数目越大,动画越精细)
 
-@bg: #e6e2df;
+  @bg: #e6e2df;
 
-.loop(@index) when (@index < @s + 1) {
-  .loop((@index + 1));
-  @keyframeSel: @index * 100% ./ @s;
+  .loop(@index) when (@index < @s + 1) {
+    .loop((@index + 1));
+    @keyframeSel: @index * 100% ./ @s;
 
-  @{keyframeSel} {
-    transform: translate(@a * (cos(360deg ./ @s * @index)), @b * (sin(360deg ./ @s * @index)));
+    @{keyframeSel} {
+      transform: translate(@a * (cos(360deg ./ @s * @index)), @b * (sin(360deg ./ @s * @index)));
+    }
   }
-}
 
-.sensor-container {
-  width: 100%;
-  height: calc(100% - 86px);
-  display: flex;
-  position: relative;
-  top: 78px;
-
-  .lr {
-    width: 650px;
-    height: 100%;
+  .sensor-container {
+    width: 100%;
+    height: calc(100% - 86px);
+    display: flex;
+    position: relative;
+    top: 78px;
 
-    // background-color: #ffffff10;
-  }
+    .lr {
+      width: 650px;
+      height: 100%;
 
-  .left-box {
-    .vent-param {
-      width: 100%;
-      margin-top: 10px;
+      // background-color: #ffffff10;
+    }
 
-      .light-group {
-        display: flex;
-        flex-direction: row;
-        justify-content: space-between;
-        position: relative;
+    .left-box {
+      .vent-param {
+        width: 100%;
+        margin-top: 10px;
 
-        .param-item {
-          width: 150px;
+        .light-group {
           display: flex;
-          flex-direction: column;
-          justify-content: center;
-          align-items: center;
-          position: reactive;
-
-          .icon {
-            display: block;
-            position: absolute;
-            top: -5px;
-          }
+          flex-direction: row;
+          justify-content: space-between;
+          position: relative;
 
-          .param {
+          .param-item {
+            width: 150px;
             display: flex;
             flex-direction: column;
             justify-content: center;
             align-items: center;
+            position: reactive;
 
-            .param-icon {
-              width: 121px;
-              height: 69px;
-              background: url('/@/assets/images/vent/vent-param-bg.png');
-              display: flex;
-              flex-direction: column;
-              justify-content: center;
-              align-items: center;
-              position: relative;
-              top: -20px;
-              margin-top: 10px;
-
-              .param-title {
-                position: relative;
-                top: -4px;
-              }
-
-              .param-unit {
-                position: relative;
-                top: -2px;
-                font-size: 12px;
-              }
+            .icon {
+              display: block;
+              position: absolute;
+              top: -5px;
             }
 
-            .param-val-box {
+            .param {
               display: flex;
               flex-direction: column;
               justify-content: center;
               align-items: center;
-              position: relative;
-              top: -20px;
 
-              .param-val-icon {
-                width: 2px;
-                height: 15px;
-                background: #00d8ff;
+              .param-icon {
+                width: 121px;
+                height: 69px;
+                background: url('/@/assets/images/vent/vent-param-bg.png');
+                display: flex;
+                flex-direction: column;
+                justify-content: center;
+                align-items: center;
                 position: relative;
+                top: -20px;
+                margin-top: 10px;
 
-                &::after {
-                  content: '';
-                  display: block;
-                  position: absolute;
-                  width: 6px;
-                  height: 6px;
-                  border-radius: 3px;
-                  background: #00d8ff;
-                  bottom: -2px;
-                  left: -2px;
+                .param-title {
+                  position: relative;
+                  top: -4px;
                 }
 
+                .param-unit {
+                  position: relative;
+                  top: -2px;
+                  font-size: 12px;
+                }
               }
 
-              .param-val {
+              .param-val-box {
+                display: flex;
+                flex-direction: column;
+                justify-content: center;
+                align-items: center;
                 position: relative;
-                font-family: 'douyuFont';
-                // color: #20dbfd;
-                text-shadow: 0 0 25px #00d8ff;
-                font-size: 13px;
-                border: 1px solid #40B7F3;
-                padding: 5px 30px 2px 30px;
-                top: 2px;
-
-                &::after {
-                  width: calc(100% - 4px);
-                  height: calc(100% - 4px);
-                  content: '';
-                  position: absolute;
+                top: -20px;
+
+                .param-val-icon {
+                  width: 2px;
+                  height: 15px;
+                  background: #00d8ff;
+                  position: relative;
+
+                  &::after {
+                    content: '';
+                    display: block;
+                    position: absolute;
+                    width: 6px;
+                    height: 6px;
+                    border-radius: 3px;
+                    background: #00d8ff;
+                    bottom: -2px;
+                    left: -2px;
+                  }
+                }
+
+                .param-val {
+                  position: relative;
+                  font-family: 'douyuFont';
+                  // color: #20dbfd;
+                  text-shadow: 0 0 25px #00d8ff;
+                  font-size: 13px;
+                  border: 1px solid #40b7f3;
+                  padding: 5px 30px 2px 30px;
                   top: 2px;
-                  left: 2px;
-                  display: block;
-                  border: 1px solid #006EA6;
+
+                  &::after {
+                    width: calc(100% - 4px);
+                    height: calc(100% - 4px);
+                    content: '';
+                    position: absolute;
+                    top: 2px;
+                    left: 2px;
+                    display: block;
+                    border: 1px solid #006ea6;
+                  }
                 }
               }
             }
-
           }
         }
       }
-    }
 
-    .icons-box {
-      display: flex;
-      flex-wrap: wrap;
-      // max-height: 365px;
-      height: 365px;
-      overflow-y: hidden;
-
-      // align-items: start ;
-      &:hover {
-        overflow-y: auto;
-        overflow-x: auto;
-
-        // &>.icon-item {
-        //   animation-play-state: paused;
-        //   animation: move1 2s linear;
-        // }
-      }
-
-      .icon-item {
-        position: relative;
+      .icons-box {
         display: flex;
-        align-items: center;
-        justify-content: center;
-        padding: 3px;
-        // animation: move 10s linear infinite;
+        flex-wrap: wrap;
+        // max-height: 365px;
+        height: 365px;
+        overflow-y: hidden;
 
-        &:nth-child(even) {
-          padding-right: 0px;
-        }
+        // align-items: start ;
+        &:hover {
+          overflow-y: auto;
+          overflow-x: auto;
 
-        .level-text {
-          position: absolute;
-          top: 51px;
-          right: 25px;
-          color: #fff;
-          font-family: 'douyuFont';
-          font-size: 12px;
+          // &>.icon-item {
+          //   animation-play-state: paused;
+          //   animation: move1 2s linear;
+          // }
         }
 
-        .level-text-0 {
-          color: rgb(145, 230, 9);
-          text-shadow: 2px 2px 4px #001c22;
-        }
+        .icon-item {
+          position: relative;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          padding: 3px;
+          // animation: move 10s linear infinite;
 
-        .level-text-1 {
-          color: rgb(0, 242, 255);
-          text-shadow: 2px 2px 4px #001c22;
-        }
+          &:nth-child(even) {
+            padding-right: 0px;
+          }
 
-        .level-text-2 {
-          color: #ffff35;
-          text-shadow: 2px 2px 4px #313100;
-        }
+          .level-text {
+            position: absolute;
+            top: 51px;
+            right: 25px;
+            color: #fff;
+            font-family: 'douyuFont';
+            font-size: 12px;
+          }
 
-        .level-text-3 {
-          color: #ffbe69;
-          text-shadow: 2px 2px 4px #271600;
-        }
+          .level-text-0 {
+            color: rgb(145, 230, 9);
+            text-shadow: 2px 2px 4px #001c22;
+          }
 
-        .level-text-4 {
-          color: #ff6f00;
-          // color: #09caff;
-          text-shadow: 2px 2px 4px #060200;
-        }
+          .level-text-1 {
+            color: rgb(0, 242, 255);
+            text-shadow: 2px 2px 4px #001c22;
+          }
 
-        .level-text-5 {
-          color: #ff0000;
-          text-shadow: 2px 2px 4px #200000;
-        }
+          .level-text-2 {
+            color: #ffff35;
+            text-shadow: 2px 2px 4px #313100;
+          }
 
-        .level-text-6 {
-          color: #bbb;
-          text-shadow: 2px 2px 4px #001c22;
-        }
+          .level-text-3 {
+            color: #ffbe69;
+            text-shadow: 2px 2px 4px #271600;
+          }
+
+          .level-text-4 {
+            color: #ff6f00;
+            // color: #09caff;
+            text-shadow: 2px 2px 4px #060200;
+          }
 
-        img {
-          width: 225px;
-          height: 79px;
+          .level-text-5 {
+            color: #ff0000;
+            text-shadow: 2px 2px 4px #200000;
+          }
+
+          .level-text-6 {
+            color: #bbb;
+            text-shadow: 2px 2px 4px #001c22;
+          }
+
+          img {
+            width: 225px;
+            height: 79px;
+          }
         }
-      }
 
-      .wrapper {
-        position: absolute;
-        top: 48px;
-        left: 82px;
-        color: #ffffffe0;
-        font-size: 13px;
-        text-align: center;
-        letter-spacing: 1px;
+        .wrapper {
+          position: absolute;
+          top: 48px;
+          left: 82px;
+          color: #ffffffe0;
+          font-size: 13px;
+          text-align: center;
+          letter-spacing: 1px;
+        }
       }
-    }
 
-    @keyframes move {
-      0% {
-        transform: translateY(0px);
-      }
+      @keyframes move {
+        0% {
+          transform: translateY(0px);
+        }
 
-      100% {
-        transform: translateY(-269px);
+        100% {
+          transform: translateY(-269px);
+        }
       }
-    }
 
-    @keyframes move1 {
-      0% {
-        transform: translateY(0px);
+      @keyframes move1 {
+        0% {
+          transform: translateY(0px);
+        }
       }
     }
-  }
 
-  .center-box {
-    width: calc(100% - 710px);
-    // background-color: #ffffff10;
-    margin: 0 8px;
-    display: flex;
-    flex-direction: column;
-    justify-content: flex-end;
-
-    .fire-monitor {
+    .center-box {
+      width: calc(100% - 710px);
+      // background-color: #ffffff10;
+      margin: 0 8px;
       display: flex;
       flex-direction: column;
-      width: 100%;
-      position: relative;
+      justify-content: flex-end;
 
-      .top {
+      .fire-monitor {
+        display: flex;
+        flex-direction: column;
         width: 100%;
-        height: 35px;
-        background: url('/@/assets/images/vent/box-top-bg.png');
-        background-size: 100% 100%;
-        text-align: center;
-        color: #fff;
-        padding-top: 6px;
-      }
-
-      .container {
-        width: calc(100% - 2px);
-        min-height: 50px;
-        padding: 0 10px;
-        color: #fff;
-        background-color: #00213236;
-        backdrop-filter: blur(5px);
-
-        &::before {
-          content: '';
-          display: block;
-          position: absolute;
-          top: 5px;
-          left: 0;
-          width: 1px;
-          height: calc(100% - 10px);
-          background-image: linear-gradient(#3DF6FF00, #3DF6FF, #3DF6FF00);
-        }
+        position: relative;
 
-        &::after {
-          content: '';
-          display: block;
-          position: absolute;
-          right: 0;
-          top: 5px;
-          width: 1px;
-          height: calc(100% - 10px);
-          background: linear-gradient(#3DF6FF00, #3DF6FF, #3DF6FF00);
+        .top {
+          width: 100%;
+          height: 35px;
+          background: url('/@/assets/images/vent/box-top-bg.png');
+          background-size: 100% 100%;
+          text-align: center;
+          color: #fff;
+          padding-top: 6px;
         }
 
-        .item {
-          height: 130px;
-          width: 100%;
-          position: relative;
-          top: -10px;
-          display: flex;
-          // justify-content: space-between;
-          align-content: center;
-          padding-top: 50px;
+        .container {
+          width: calc(100% - 2px);
+          min-height: 50px;
+          padding: 0 10px;
+          color: #fff;
+          background-color: #00213236;
+          backdrop-filter: blur(5px);
 
           &::before {
             content: '';
-            width: 100%;
-            height: 150px;
+            display: block;
             position: absolute;
-            top: 0px;
-            background: url('/@/assets/images/vent/fire-bg-top.png');
-            background-size: 100% 100%;
+            top: 5px;
+            left: 0;
+            width: 1px;
+            height: calc(100% - 10px);
+            background-image: linear-gradient(#3df6ff00, #3df6ff, #3df6ff00);
           }
 
-          .icon {
-            width: 82px;
-            height: 36px;
-            margin: 0 20px 0 50px;
-            background: url('/@/assets/images/vent/icon-bottom-bg.png');
-            position: relative;
-            top: 30px;
-
-            &::after {
-              position: absolute;
-              content: '';
-              width: 50px;
-              height: 50px;
-              top: -25px;
-              left: 20px;
-              background: url('/@/assets/images/vent/outer-icon.svg') no-repeat;
-            }
+          &::after {
+            content: '';
+            display: block;
+            position: absolute;
+            right: 0;
+            top: 5px;
+            width: 1px;
+            height: calc(100% - 10px);
+            background: linear-gradient(#3df6ff00, #3df6ff, #3df6ff00);
           }
 
-          .data-box {
+          .item {
+            height: 130px;
+            width: 100%;
+            position: relative;
+            top: -10px;
             display: flex;
-            flex-direction: column;
-            // margin: 0 10px;
-            width: 118px;
+            // justify-content: space-between;
+            align-content: center;
+            padding-top: 50px;
 
-            .value {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              color: #2bdcff;
-              margin-bottom: 5px;
+            &::before {
+              content: '';
+              width: 100%;
+              height: 150px;
+              position: absolute;
+              top: 0px;
+              background: url('/@/assets/images/vent/fire-bg-top.png');
+              background-size: 100% 100%;
             }
 
-            .value1 {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              margin-bottom: 5px;
-              color: rgb(145, 230, 9);
+            .icon {
+              width: 82px;
+              height: 36px;
+              margin: 0 20px 0 50px;
+              background: url('/@/assets/images/vent/icon-bottom-bg.png');
+              position: relative;
+              top: 30px;
+
+              &::after {
+                position: absolute;
+                content: '';
+                width: 50px;
+                height: 50px;
+                top: -25px;
+                left: 20px;
+                background: url('/@/assets/images/vent/outer-icon.svg') no-repeat;
+              }
             }
 
-            .value2 {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              margin-bottom: 5px;
-              color: rgb(0, 242, 255);
-            }
+            .data-box {
+              display: flex;
+              flex-direction: column;
+              // margin: 0 10px;
+              width: 118px;
 
-            .value3 {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              margin-bottom: 5px;
-              color: #ffff35;
-            }
+              .value {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                color: #2bdcff;
+                margin-bottom: 5px;
+              }
 
-            .value4 {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              margin-bottom: 5px;
-              color: #ffbe69;
-            }
+              .value1 {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                margin-bottom: 5px;
+                color: rgb(145, 230, 9);
+              }
 
-            .value5 {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              margin-bottom: 5px;
-              color: #ff6f00;
-            }
+              .value2 {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                margin-bottom: 5px;
+                color: rgb(0, 242, 255);
+              }
 
-            .value6 {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              margin-bottom: 5px;
-              color: #ff0000;
-            }
+              .value3 {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                margin-bottom: 5px;
+                color: #ffff35;
+              }
 
-            .title {
-              font-size: 13px;
+              .value4 {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                margin-bottom: 5px;
+                color: #ffbe69;
+              }
+
+              .value5 {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                margin-bottom: 5px;
+                color: #ff6f00;
+              }
+
+              .value6 {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                margin-bottom: 5px;
+                color: #ff0000;
+              }
+
+              .title {
+                font-size: 13px;
+              }
             }
           }
-        }
 
-        .item1 {
-          top: -10px;
+          .item1 {
+            top: -10px;
 
-          &::before {
-            transform: matrix(1, 0, 0, -1, 0, 0);
-          }
+            &::before {
+              transform: matrix(1, 0, 0, -1, 0, 0);
+            }
 
-          .icon {
-            &::after {
-              background: url('/@/assets/images/vent/inner-icon.svg') no-repeat;
+            .icon {
+              &::after {
+                background: url('/@/assets/images/vent/inner-icon.svg') no-repeat;
+              }
             }
           }
         }
-      }
 
-      .bottom {
-        width: 100%;
-        height: 35px;
-        background: url('/@/assets/images/vent/box-bottom-bg.png');
-        background-size: 100% 100%;
-        position: absolute;
-        bottom: 0;
+        .bottom {
+          width: 100%;
+          height: 35px;
+          background: url('/@/assets/images/vent/box-bottom-bg.png');
+          background-size: 100% 100%;
+          position: absolute;
+          bottom: 0;
+        }
       }
-    }
 
-    .animation-box {
-      height: fit-content;
-      flex: 1;
-      margin-bottom: 10px;
-      background: url('/@/assets/images/vent/alarm/center-bg.png');
-      background-size: contain;
-      background-position: center;
-      display: flex;
-      flex-direction: column;
-      align-items: center;
-      position: relative;
-      top: 45px;
-
-      .rain {
-        position: absolute;
-      }
+      .animation-box {
+        height: fit-content;
+        flex: 1;
+        margin-bottom: 10px;
+        background: url('/@/assets/images/vent/alarm/center-bg.png');
+        background-size: contain;
+        background-position: center;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        position: relative;
+        top: 45px;
 
-      .bottom {
-        width: 528px;
-        height: 395px;
-        background-repeat: no-repeat;
-        position: absolute;
-        z-index: 999;
-
-        &::before {
-          content: '';
-          width: 325px;
-          height: 379px;
+        .rain {
           position: absolute;
-          left: 105px;
-          top: -60px;
-          background: url('/@/assets/images/vent/alarm/warning-bg.png') no-repeat;
         }
 
-        .animation1 {
-          width: 390px;
-          height: 78px;
+        .bottom {
+          width: 528px;
+          height: 395px;
+          background-repeat: no-repeat;
           position: absolute;
-          top: -30px;
-          left: 80px;
           z-index: 999;
 
-          // animation: rotate3 3s linear infinite;
-          .ball {
+          &::before {
+            content: '';
+            width: 325px;
+            height: 379px;
             position: absolute;
-            width: 12px;
-            height: 12px;
-            background: radial-gradient(closest-side, #e1f7f8, #e1f7f800);
-            ;
-            border-radius: 6px;
-            background-size: cover;
-            offset-path: path('M186.917-.75c12.711,0,25.415.263,37.757.783,12.03.506,23.863,1.262,35.171,2.245,11.1.966,21.816,2.161,31.835,3.553,9.928,1.379,19.265,2.963,27.751,4.709s16.2,3.668,22.92,5.713A120.653,120.653,0,0,1,359.7,22.825a40.842,40.842,0,0,1,11.018,7.3c2.568,2.581,3.87,5.239,3.87,7.9s-1.3,5.322-3.87,7.9a40.842,40.842,0,0,1-11.018,7.3,120.653,120.653,0,0,1-17.345,6.572c-6.716,2.044-14.428,3.966-22.92,5.713s-17.823,3.329-27.751,4.709c-10.02,1.392-20.731,2.588-31.835,3.553-11.308.984-23.142,1.739-35.171,2.245-12.343.519-25.046.783-37.757.783s-25.415-.263-37.757-.783c-12.03-.506-23.863-1.262-35.171-2.245-11.1-.966-21.816-2.161-31.835-3.553-9.928-1.379-19.265-2.963-27.751-4.709s-16.2-3.668-22.92-5.713a120.652,120.652,0,0,1-17.345-6.572,40.841,40.841,0,0,1-11.018-7.3c-2.568-2.581-3.87-5.239-3.87-7.9s1.3-5.322,3.87-7.9a40.842,40.842,0,0,1,11.018-7.3,120.651,120.651,0,0,1,17.345-6.572C38.2,14.208,45.91,12.286,54.4,10.54S72.225,7.211,82.153,5.831c10.02-1.392,20.731-2.588,31.835-3.553C125.3,1.294,137.13.539,149.16.033,161.5-.487,174.206-.75,186.917-.75Zm0,76.98c49.941,0,96.885-4,132.186-11.257,17.134-3.523,30.578-7.623,39.96-12.184,9.642-4.688,14.53-9.653,14.53-14.759s-4.889-10.072-14.53-14.759c-9.382-4.561-22.826-8.66-39.96-12.184C283.8,3.827,236.858-.171,186.917-.171s-96.885,4-132.186,11.257C37.6,14.61,24.153,18.709,14.771,23.27,5.129,27.958.241,32.923.241,38.029S5.129,48.1,14.771,52.789c9.382,4.561,22.826,8.661,39.96,12.184C90.032,72.232,136.976,76.23,186.917,76.23Z');
-            animation: 10s linear 0s infinite alternate ball;
+            left: 105px;
+            top: -60px;
+            background: url('/@/assets/images/vent/alarm/warning-bg.png') no-repeat;
           }
-        }
 
-        .animation2 {
-          width: 430px;
-          height: 92px;
-          position: absolute;
-          top: 0px;
-          left: 60px;
-          z-index: 999;
-
-          // animation: rotate4 3s linear infinite;
-          .ball1 {
+          .animation1 {
+            width: 390px;
+            height: 78px;
             position: absolute;
-            width: 12px;
-            height: 12px;
-            background: radial-gradient(closest-side, #e1f7f8, #e1f7f800);
-            ;
-            border-radius: 6px;
-            background-size: cover;
-            offset-path: path('M206.689-.75c14.05,0,28.092.311,41.735.925,13.3.6,26.377,1.492,38.877,2.655,12.275,1.142,24.114,2.555,35.189,4.2,10.974,1.631,21.294,3.5,30.674,5.567s17.91,4.337,25.335,6.754a128.134,128.134,0,0,1,19.172,7.771,45.082,45.082,0,0,1,12.178,8.633c2.838,3.051,4.278,6.195,4.278,9.344s-1.439,6.293-4.278,9.344a45.082,45.082,0,0,1-12.178,8.633A128.134,128.134,0,0,1,378.5,70.847c-7.424,2.417-15.948,4.69-25.335,6.754s-19.7,3.936-30.674,5.567c-11.075,1.646-22.915,3.059-35.189,4.2-12.5,1.163-25.58,2.056-38.877,2.655-13.643.614-27.685.925-41.735.925s-28.092-.311-41.735-.925c-13.3-.6-26.377-1.492-38.877-2.655-12.275-1.142-24.114-2.555-35.189-4.2-10.974-1.631-21.294-3.5-30.674-5.567S42.3,73.265,34.879,70.847a128.133,128.133,0,0,1-19.173-7.771A45.082,45.082,0,0,1,3.528,54.444C.689,51.393-.75,48.249-.75,45.1s1.439-6.293,4.278-9.344a45.083,45.083,0,0,1,12.178-8.633,128.133,128.133,0,0,1,19.173-7.771c7.424-2.417,15.948-4.69,25.335-6.754s19.7-3.936,30.674-5.567c11.075-1.646,22.915-3.059,35.189-4.2,12.5-1.163,25.58-2.056,38.877-2.655C178.6-.439,192.639-.75,206.689-.75Zm0,91.015c55.2,0,107.093-4.727,146.113-13.31,18.939-4.166,33.8-9.012,44.17-14.405,10.657-5.542,16.061-11.413,16.061-17.45s-5.4-11.908-16.061-17.45c-10.37-5.393-25.231-10.24-44.17-14.405C313.782,4.662,261.892-.065,206.689-.065S99.6,4.662,60.576,13.244c-18.939,4.166-33.8,9.012-44.17,14.405C5.749,33.192.345,39.063.345,45.1s5.4,11.908,16.061,17.45c10.37,5.393,25.231,10.24,44.17,14.405C99.6,85.538,151.487,90.265,206.689,90.265Z');
-            animation: 10s linear 0s infinite alternate ball1;
-          }
-        }
-
-        .text-box {
-          width: 100%;
-          display: flex;
-          flex-direction: column;
-          color: #fff;
-          align-items: center;
-          margin-top: 90px;
+            top: -30px;
+            left: 80px;
+            z-index: 999;
 
-          .text1 {
-            font-size: 26px;
-            font-weight: 600;
-            letter-spacing: 2px;
-            margin-bottom: 10px;
+            // animation: rotate3 3s linear infinite;
+            .ball {
+              position: absolute;
+              width: 12px;
+              height: 12px;
+              background: radial-gradient(closest-side, #e1f7f8, #e1f7f800);
+              border-radius: 6px;
+              background-size: cover;
+              offset-path: path(
+                'M186.917-.75c12.711,0,25.415.263,37.757.783,12.03.506,23.863,1.262,35.171,2.245,11.1.966,21.816,2.161,31.835,3.553,9.928,1.379,19.265,2.963,27.751,4.709s16.2,3.668,22.92,5.713A120.653,120.653,0,0,1,359.7,22.825a40.842,40.842,0,0,1,11.018,7.3c2.568,2.581,3.87,5.239,3.87,7.9s-1.3,5.322-3.87,7.9a40.842,40.842,0,0,1-11.018,7.3,120.653,120.653,0,0,1-17.345,6.572c-6.716,2.044-14.428,3.966-22.92,5.713s-17.823,3.329-27.751,4.709c-10.02,1.392-20.731,2.588-31.835,3.553-11.308.984-23.142,1.739-35.171,2.245-12.343.519-25.046.783-37.757.783s-25.415-.263-37.757-.783c-12.03-.506-23.863-1.262-35.171-2.245-11.1-.966-21.816-2.161-31.835-3.553-9.928-1.379-19.265-2.963-27.751-4.709s-16.2-3.668-22.92-5.713a120.652,120.652,0,0,1-17.345-6.572,40.841,40.841,0,0,1-11.018-7.3c-2.568-2.581-3.87-5.239-3.87-7.9s1.3-5.322,3.87-7.9a40.842,40.842,0,0,1,11.018-7.3,120.651,120.651,0,0,1,17.345-6.572C38.2,14.208,45.91,12.286,54.4,10.54S72.225,7.211,82.153,5.831c10.02-1.392,20.731-2.588,31.835-3.553C125.3,1.294,137.13.539,149.16.033,161.5-.487,174.206-.75,186.917-.75Zm0,76.98c49.941,0,96.885-4,132.186-11.257,17.134-3.523,30.578-7.623,39.96-12.184,9.642-4.688,14.53-9.653,14.53-14.759s-4.889-10.072-14.53-14.759c-9.382-4.561-22.826-8.66-39.96-12.184C283.8,3.827,236.858-.171,186.917-.171s-96.885,4-132.186,11.257C37.6,14.61,24.153,18.709,14.771,23.27,5.129,27.958.241,32.923.241,38.029S5.129,48.1,14.771,52.789c9.382,4.561,22.826,8.661,39.96,12.184C90.032,72.232,136.976,76.23,186.917,76.23Z'
+              );
+              animation: 10s linear 0s infinite alternate ball;
+            }
           }
 
-          .text2 {
-            font-size: 18px;
-            color: #ffffffdd;
+          .animation2 {
+            width: 430px;
+            height: 92px;
+            position: absolute;
+            top: 0px;
+            left: 60px;
+            z-index: 999;
+
+            // animation: rotate4 3s linear infinite;
+            .ball1 {
+              position: absolute;
+              width: 12px;
+              height: 12px;
+              background: radial-gradient(closest-side, #e1f7f8, #e1f7f800);
+              border-radius: 6px;
+              background-size: cover;
+              offset-path: path(
+                'M206.689-.75c14.05,0,28.092.311,41.735.925,13.3.6,26.377,1.492,38.877,2.655,12.275,1.142,24.114,2.555,35.189,4.2,10.974,1.631,21.294,3.5,30.674,5.567s17.91,4.337,25.335,6.754a128.134,128.134,0,0,1,19.172,7.771,45.082,45.082,0,0,1,12.178,8.633c2.838,3.051,4.278,6.195,4.278,9.344s-1.439,6.293-4.278,9.344a45.082,45.082,0,0,1-12.178,8.633A128.134,128.134,0,0,1,378.5,70.847c-7.424,2.417-15.948,4.69-25.335,6.754s-19.7,3.936-30.674,5.567c-11.075,1.646-22.915,3.059-35.189,4.2-12.5,1.163-25.58,2.056-38.877,2.655-13.643.614-27.685.925-41.735.925s-28.092-.311-41.735-.925c-13.3-.6-26.377-1.492-38.877-2.655-12.275-1.142-24.114-2.555-35.189-4.2-10.974-1.631-21.294-3.5-30.674-5.567S42.3,73.265,34.879,70.847a128.133,128.133,0,0,1-19.173-7.771A45.082,45.082,0,0,1,3.528,54.444C.689,51.393-.75,48.249-.75,45.1s1.439-6.293,4.278-9.344a45.083,45.083,0,0,1,12.178-8.633,128.133,128.133,0,0,1,19.173-7.771c7.424-2.417,15.948-4.69,25.335-6.754s19.7-3.936,30.674-5.567c11.075-1.646,22.915-3.059,35.189-4.2,12.5-1.163,25.58-2.056,38.877-2.655C178.6-.439,192.639-.75,206.689-.75Zm0,91.015c55.2,0,107.093-4.727,146.113-13.31,18.939-4.166,33.8-9.012,44.17-14.405,10.657-5.542,16.061-11.413,16.061-17.45s-5.4-11.908-16.061-17.45c-10.37-5.393-25.231-10.24-44.17-14.405C313.782,4.662,261.892-.065,206.689-.065S99.6,4.662,60.576,13.244c-18.939,4.166-33.8,9.012-44.17,14.405C5.749,33.192.345,39.063.345,45.1s5.4,11.908,16.061,17.45c10.37,5.393,25.231,10.24,44.17,14.405C99.6,85.538,151.487,90.265,206.689,90.265Z'
+              );
+              animation: 10s linear 0s infinite alternate ball1;
+            }
           }
-        }
 
-        .icon-animation {
-          width: 178px;
-          height: 208px;
-          margin: 0 auto;
-          top: -130px;
-          left: 4px;
-          position: relative;
-          animation: .5s linear 0s infinite alternate iconMove;
-        }
-      }
+          .text-box {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            color: #fff;
+            align-items: center;
+            margin-top: 90px;
 
-      .bottom1 {
-        background-image: url('/@/assets/images/vent/alarm/warning-icon-bg1.png');
+            .text1 {
+              font-size: 26px;
+              font-weight: 600;
+              letter-spacing: 2px;
+              margin-bottom: 10px;
+            }
 
-        .icon-animation {
-          background: url('/@/assets/images/vent/alarm/warning-icon-bg-a1.png');
-        }
+            .text2 {
+              font-size: 18px;
+              color: #ffffffdd;
+            }
+          }
 
-        .text-box {
-          .text1 {
-            color: #00d8ff;
+          .icon-animation {
+            width: 178px;
+            height: 208px;
+            margin: 0 auto;
+            top: -130px;
+            left: 4px;
+            position: relative;
+            animation: 0.5s linear 0s infinite alternate iconMove;
           }
         }
-      }
 
-      .bottom2 {
-        background-image: url('/@/assets/images/vent/alarm/warning-icon-bg2.png');
+        .bottom1 {
+          background-image: url('/@/assets/images/vent/alarm/warning-icon-bg1.png');
 
-        .icon-animation {
-          background: url('/@/assets/images/vent/alarm/warning-icon-bg-a2.png');
-        }
+          .icon-animation {
+            background: url('/@/assets/images/vent/alarm/warning-icon-bg-a1.png');
+          }
 
-        .text-box {
-          .text1 {
-            color: #FCFC22;
+          .text-box {
+            .text1 {
+              color: #00d8ff;
+            }
           }
         }
-      }
 
-      .bottom3 {
-        background-image: url('/@/assets/images/vent/alarm/warning-icon-bg3.png');
+        .bottom2 {
+          background-image: url('/@/assets/images/vent/alarm/warning-icon-bg2.png');
 
-        .icon-animation {
-          background: url('/@/assets/images/vent/alarm/warning-icon-bg-a3.png');
-        }
+          .icon-animation {
+            background: url('/@/assets/images/vent/alarm/warning-icon-bg-a2.png');
+          }
 
-        .text-box {
-          .text1 {
-            color: #ff7010;
+          .text-box {
+            .text1 {
+              color: #fcfc22;
+            }
           }
         }
-      }
 
-      .bottom4 {
-        background-image: url('/@/assets/images/vent/alarm/warning-icon-bg4.png');
+        .bottom3 {
+          background-image: url('/@/assets/images/vent/alarm/warning-icon-bg3.png');
 
-        .icon-animation {
-          background: url('/@/assets/images/vent/alarm/warning-icon-bg-a4.png');
-        }
+          .icon-animation {
+            background: url('/@/assets/images/vent/alarm/warning-icon-bg-a3.png');
+          }
 
-        .text-box {
-          .text1 {
-            color: #DF4E43;
+          .text-box {
+            .text1 {
+              color: #ff7010;
+            }
           }
         }
-      }
 
-      .bottom5 {
-        background-image: url('/@/assets/images/vent/alarm/warning-icon-bg5.png');
+        .bottom4 {
+          background-image: url('/@/assets/images/vent/alarm/warning-icon-bg4.png');
 
-        .icon-animation {
-          background: url('/@/assets/images/vent/alarm/warning-icon-bg-a5.png');
-        }
-
-        .text-box {
-          .text1 {
-            color: #ff2313;
-            // animation: color-blink 1s infinite;
+          .icon-animation {
+            background: url('/@/assets/images/vent/alarm/warning-icon-bg-a4.png');
           }
 
-          // @keyframes color-blink {
-          //   0% { color: red; }
-          //   50% { color: blue; }
-          //   100% { color: red; }
-          // }
+          .text-box {
+            .text1 {
+              color: #df4e43;
+            }
+          }
         }
-      }
 
-      .total-item-monitor-box {
-        width: 100%;
-        height: 237px;
-        position: relative;
-        top: 180px;
-        left: 265px;
-        background: url('/@/assets/images/vent/alarm/bottom1.png') no-repeat;
-        background-size: contain;
+        .bottom5 {
+          background-image: url('/@/assets/images/vent/alarm/warning-icon-bg5.png');
 
-        &::after {
-          content: '';
-          width: 750px;
-          height: 750px;
-          position: absolute;
-          transform-style: preserve-3d;
-          transform: translateX(0%) translateY(0%) rotateX(72deg);
-          background: url('/@/assets/images/vent/alarm/bottom.png');
-          animation: rotate1 3s linear infinite;
-          top: -200px;
-          left: -180px;
-        }
+          .icon-animation {
+            background: url('/@/assets/images/vent/alarm/warning-icon-bg-a5.png');
+          }
 
-        .item {
-          position: absolute;
+          .text-box {
+            .text1 {
+              color: #ff2313;
+              // animation: color-blink 1s infinite;
+            }
 
-          // width: 107px;
-          // height: 107px;
-          // left: 120px;
-          // top: 115px;
-          // animation: red-ball 10s linear infinite;
-          .icon-box {
-            width: 100px;
-            height: 100px;
+            // @keyframes color-blink {
+            //   0% { color: red; }
+            //   50% { color: blue; }
+            //   100% { color: red; }
+            // }
+          }
+        }
 
-            position: relative;
-            z-index: 0;
+        .total-item-monitor-box {
+          width: 100%;
+          height: 237px;
+          position: relative;
+          top: 180px;
+          left: 265px;
+          background: url('/@/assets/images/vent/alarm/bottom1.png') no-repeat;
+          background-size: contain;
 
-            &::before {
-              position: absolute;
-              content: '';
-              width: 105px;
-              height: 68px;
-              top: 15px;
-              z-index: -1;
-              background: url('/@/assets/images/vent/alarm/icon-bg.png') no-repeat;
-            }
+          &::after {
+            content: '';
+            width: 750px;
+            height: 750px;
+            position: absolute;
+            transform-style: preserve-3d;
+            transform: translateX(0%) translateY(0%) rotateX(72deg);
+            background: url('/@/assets/images/vent/alarm/bottom.png');
+            animation: rotate1 3s linear infinite;
+            top: -200px;
+            left: -180px;
+          }
 
-            &::after {
-              position: absolute;
-              content: '';
-              width: 71px;
-              height: 71px;
-              top: 26px;
-              left: 14px;
-              z-index: 1;
-              background: url(/src/assets/images/vent/alarm/icon-animation.png) no-repeat;
-              transform: translateX(0%) rotateX(70deg);
-              animation: rotate2 2s linear infinite;
-            }
+          .item {
+            position: absolute;
 
-            .icon {
+            // width: 107px;
+            // height: 107px;
+            // left: 120px;
+            // top: 115px;
+            // animation: red-ball 10s linear infinite;
+            .icon-box {
               width: 100px;
               height: 100px;
-              background-repeat: no-repeat;
-              background-position: top center;
-              position: relative;
-              top: 5px;
-            }
-          }
 
-          .item-monitor-box {
-            color: #fff;
-            position: relative;
-            top: -135px;
-            left: -20px;
-            font-weight: 600;
-            // background: #06020066;
-            padding: 5px 20px 8px 20px;
+              position: relative;
+              z-index: 0;
+
+              &::before {
+                position: absolute;
+                content: '';
+                width: 105px;
+                height: 68px;
+                top: 15px;
+                z-index: -1;
+                background: url('/@/assets/images/vent/alarm/icon-bg.png') no-repeat;
+              }
 
-            &::before {
-              position: absolute;
-              content: '';
-              width: 196px;
-              height: 48px;
-              left: -20px;
-              top: -10px;
-              background: url('/@/assets/images/vent/alarm/data-bg.png');
-            }
+              &::after {
+                position: absolute;
+                content: '';
+                width: 71px;
+                height: 71px;
+                top: 26px;
+                left: 14px;
+                z-index: 1;
+                background: url(/src/assets/images/vent/alarm/icon-animation.png) no-repeat;
+                transform: translateX(0%) rotateX(70deg);
+                animation: rotate2 2s linear infinite;
+              }
 
-            .value {
-              color: #2bdcff;
-              margin-left: 20px;
+              .icon {
+                width: 100px;
+                height: 100px;
+                background-repeat: no-repeat;
+                background-position: top center;
+                position: relative;
+                top: 5px;
+              }
             }
 
-            .value1 {
-              font-size: 16px;
-              font-weight: 800;
-              margin-top: 6px;
-              margin-left: 10px;
-              color: #ff0000;
-              animation: color-blink 1s infinite;
-            }
+            .item-monitor-box {
+              color: #fff;
+              position: relative;
+              top: -135px;
+              left: -20px;
+              font-weight: 600;
+              // background: #06020066;
+              padding: 5px 20px 8px 20px;
+
+              &::before {
+                position: absolute;
+                content: '';
+                width: 196px;
+                height: 48px;
+                left: -20px;
+                top: -10px;
+                background: url('/@/assets/images/vent/alarm/data-bg.png');
+              }
 
-            @keyframes color-blink {
-              0% {
-                color: red;
+              .value {
+                color: #2bdcff;
+                margin-left: 20px;
               }
 
-              50% {
-                color: rgb(198, 0, 0);
+              .value1 {
+                font-size: 16px;
+                font-weight: 800;
+                margin-top: 6px;
+                margin-left: 10px;
+                color: #ff0000;
+                animation: color-blink 1s infinite;
               }
 
-              100% {
-                color: rgb(255, 18, 18);
+              @keyframes color-blink {
+                0% {
+                  color: red;
+                }
+
+                50% {
+                  color: rgb(198, 0, 0);
+                }
+
+                100% {
+                  color: rgb(255, 18, 18);
+                }
               }
             }
           }
-        }
 
-        .item1 {
-          top: 230px;
-          left: 150px;
+          .item1 {
+            top: 230px;
+            left: 150px;
 
-          .icon {
-            background-image: url('/@/assets/images/vent/alarm/icon-fire.svg');
+            .icon {
+              background-image: url('/@/assets/images/vent/alarm/icon-fire.svg');
+            }
           }
-        }
 
-        .item2 {
-          top: 185px;
-          left: -120px;
+          .item2 {
+            top: 185px;
+            left: -120px;
 
-          .icon {
-            background-image: url('/@/assets/images/vent/alarm/icon-device.svg');
+            .icon {
+              background-image: url('/@/assets/images/vent/alarm/icon-device.svg');
+            }
           }
-        }
 
-        .item3 {
-          top: 185px;
-          left: 420px;
+          .item3 {
+            top: 185px;
+            left: 420px;
 
-          .icon {
-            background-image: url('/@/assets/images/vent/alarm/icon-dust.svg');
+            .icon {
+              background-image: url('/@/assets/images/vent/alarm/icon-dust.svg');
+            }
           }
 
+          .item4 {
+            top: 20px;
+            left: 390px;
 
-        }
+            .icon {
+              background-image: url('/@/assets/images/vent/alarm/icon-gas.svg');
+            }
 
-        .item4 {
-          top: 20px;
-          left: 390px;
+            .item-monitor-box {
+              top: -155px;
 
-          .icon {
-            background-image: url('/@/assets/images/vent/alarm/icon-gas.svg');
+              &::before {
+                top: 10px;
+              }
+            }
           }
 
-          .item-monitor-box {
-            top: -155px;
+          .item5 {
+            top: 25px;
+            left: -110px;
 
-            &::before {
-              top: 10px;
+            .icon {
+              background-image: url('/@/assets/images/vent/alarm/icon-vent.svg');
             }
           }
         }
 
-        .item5 {
-          top: 25px;
-          left: -110px;
-
-          .icon {
-            background-image: url('/@/assets/images/vent/alarm/icon-vent.svg');
+        @keyframes iconMove {
+          100% {
+            opacity: 0;
           }
         }
 
-      }
-
-      @keyframes iconMove {
-        100% {
-          opacity: 0;
-        }
-      }
-
-      @keyframes rotate1 {
-        0% {
-          transform: translateX(0%) rotateX(72deg) rotateZ(-360deg);
-        }
+        @keyframes rotate1 {
+          0% {
+            transform: translateX(0%) rotateX(72deg) rotateZ(-360deg);
+          }
 
-        100% {
-          transform: translateX(0%) rotateX(72deg) rotateZ(0);
+          100% {
+            transform: translateX(0%) rotateX(72deg) rotateZ(0);
+          }
         }
-      }
 
-      @keyframes rotate2 {
-        0% {
-          transform: translateX(0%) rotateX(70deg) rotateZ(0);
-        }
+        @keyframes rotate2 {
+          0% {
+            transform: translateX(0%) rotateX(70deg) rotateZ(0);
+          }
 
-        100% {
-          transform: translateX(0%) rotateX(70deg) rotateZ(-360deg);
+          100% {
+            transform: translateX(0%) rotateX(70deg) rotateZ(-360deg);
+          }
         }
-      }
 
-      @keyframes rotate3 {
-        0% {
-          transform: translateX(0%) rotateX(80deg) rotateZ(0);
-        }
+        @keyframes rotate3 {
+          0% {
+            transform: translateX(0%) rotateX(80deg) rotateZ(0);
+          }
 
-        100% {
-          transform: translateX(0%) rotateX(80deg) rotateZ(-360deg);
+          100% {
+            transform: translateX(0%) rotateX(80deg) rotateZ(-360deg);
+          }
         }
-      }
 
-      @keyframes rotate4 {
-        100% {
-          transform: translateX(0%) rotateX(80deg) rotateZ(0);
-        }
+        @keyframes rotate4 {
+          100% {
+            transform: translateX(0%) rotateX(80deg) rotateZ(0);
+          }
 
-        0% {
-          transform: translateX(0%) rotateX(80deg) rotateZ(-360deg);
+          0% {
+            transform: translateX(0%) rotateX(80deg) rotateZ(-360deg);
+          }
         }
-      }
 
-      @keyframes ball {
-        100% {
-          offset-distance: 100%;
-        }
+        @keyframes ball {
+          100% {
+            offset-distance: 100%;
+          }
 
-        0% {
-          offset-distance: 0%;
+          0% {
+            offset-distance: 0%;
+          }
         }
-      }
 
-      @keyframes ball1 {
-        0% {
-          offset-distance: 100%;
-        }
+        @keyframes ball1 {
+          0% {
+            offset-distance: 100%;
+          }
 
-        100% {
-          offset-distance: 0%;
+          100% {
+            offset-distance: 0%;
+          }
         }
       }
     }
-  }
 
-  .right-box {
-    .dust-monitor {
-      display: flex;
-      justify-content: space-between;
-      padding: 0 20px;
-      margin-bottom: 20px;
-      margin-top: 15px;
-
-      .value {
-        width: 131px;
-        height: 44px;
-        background: url('/@/assets/images/vent/value-bg.png');
+    .right-box {
+      .dust-monitor {
         display: flex;
-        justify-content: center;
-        align-items: center;
-      }
-
-      .title {
-        text-align: center;
-        margin-bottom: 5px;
-      }
+        justify-content: space-between;
+        padding: 0 20px;
+        margin-bottom: 20px;
+        margin-top: 15px;
+
+        .value {
+          width: 131px;
+          height: 44px;
+          background: url('/@/assets/images/vent/value-bg.png');
+          display: flex;
+          justify-content: center;
+          align-items: center;
+        }
 
-      .value {
-        font-size: 16px;
-        font-family: 'douyuFont';
-        color: #3DF5FF;
+        .title {
+          text-align: center;
+          margin-bottom: 5px;
+        }
 
+        .value {
+          font-size: 16px;
+          font-family: 'douyuFont';
+          color: #3df5ff;
+        }
       }
-    }
 
-    .gas-box {
-      height: 390px;
-      display: flex;
-      justify-content: space-between;
-      padding: 0 10px;
+      .gas-box {
+        height: 390px;
+        display: flex;
+        justify-content: space-between;
+        padding: 0 10px;
 
-      .gas-item {
-        position: relative;
+        .gas-item {
+          position: relative;
 
-        .top {
-          height: 136px;
-          padding-top: 30px;
+          .top {
+            height: 136px;
+            padding-top: 30px;
 
-          .value {
-            font-size: 26px;
-            font-family: 'douyuFont';
-            color: #3DF5FF;
-            text-align: center;
-            margin-bottom: 5px;
-          }
+            .value {
+              font-size: 26px;
+              font-family: 'douyuFont';
+              color: #3df5ff;
+              text-align: center;
+              margin-bottom: 5px;
+            }
 
-          .title {
-            width: 205px;
-            height: 48px;
-            text-align: center;
-            background: url('/@/assets/images/vent/plane.png') no-repeat;
-            background-size: contain;
-            background-position: bottom;
-          }
+            .title {
+              width: 205px;
+              height: 48px;
+              text-align: center;
+              background: url('/@/assets/images/vent/plane.png') no-repeat;
+              background-size: contain;
+              background-position: bottom;
+            }
 
-          &::before {
-            position: absolute;
-            content: '';
-            width: 136px;
-            height: 101px;
-            left: 35px;
-            top: 15px;
-            background: url('/@/assets/images/vent/small-bg1.png') no-repeat;
-            background-size: cover;
+            &::before {
+              position: absolute;
+              content: '';
+              width: 136px;
+              height: 101px;
+              left: 35px;
+              top: 15px;
+              background: url('/@/assets/images/vent/small-bg1.png') no-repeat;
+              background-size: cover;
+            }
           }
-        }
 
-        .detail-box {
-          position: relative;
-          margin: 0 auto;
-          width: 184px;
-          height: calc(100% - 136px);
-          background: linear-gradient(to bottom, transparent, #00679b77) no-repeat;
-          background-size: cover;
-          display: flex;
-          flex-direction: column;
-          justify-content: flex-start;
-          align-items: center;
-          overflow-y: auto;
-          // padding: 50px 0 20px 0;
-
-          &::after {
-            position: absolute;
-            content: '';
-            left: 0px;
-            bottom: 0px;
+          .detail-box {
+            position: relative;
+            margin: 0 auto;
             width: 184px;
-            height: 31px;
-            background: url('/@/assets/images/vent/plane1.png') no-repeat center;
-            background-size: 100% 100%;
-            background-position: bottom;
-          }
-
-          .detail-item {
-            width: 100%;
-            height: 40px;
-            background-image: linear-gradient(to right, #39a3ff66, #39a3ff00);
-            // margin: 5px 0;
+            height: calc(100% - 136px);
+            background: linear-gradient(to bottom, transparent, #00679b77) no-repeat;
+            background-size: cover;
             display: flex;
-            padding: 0 10px;
-            justify-content: space-between;
+            flex-direction: column;
+            justify-content: flex-start;
             align-items: center;
-            margin-bottom: 30px;
+            overflow-y: auto;
+            // padding: 50px 0 20px 0;
 
-            .value {
-              font-size: 16px;
-              font-family: 'douyuFont';
-              color: #2bdcff;
-              text-align: center;
+            &::after {
+              position: absolute;
+              content: '';
+              left: 0px;
+              bottom: 0px;
+              width: 184px;
+              height: 31px;
+              background: url('/@/assets/images/vent/plane1.png') no-repeat center;
+              background-size: 100% 100%;
+              background-position: bottom;
+            }
+
+            .detail-item {
+              width: 100%;
+              height: 40px;
+              background-image: linear-gradient(to right, #39a3ff66, #39a3ff00);
+              // margin: 5px 0;
+              display: flex;
+              padding: 0 10px;
+              justify-content: space-between;
+              align-items: center;
+              margin-bottom: 30px;
+
+              .value {
+                font-size: 16px;
+                font-family: 'douyuFont';
+                color: #2bdcff;
+                text-align: center;
+              }
             }
           }
         }
       }
     }
-  }
 
-  .monitor-title {
-    cursor: pointer;
+    .monitor-title {
+      cursor: pointer;
+    }
   }
-}
 </style>

+ 50 - 33
src/views/vent/monitorManager/balancePressMonitor1/index.vue

@@ -28,7 +28,7 @@
             <p>风门过风面积:{{ selectData.gas1 ? selectData.gas1 : '-' }}</p>
           </div>
         </div>
-        <div  class="elementTag" id="windownBox">
+        <div class="elementTag" id="windownBox">
           <div class="elementContent">
             <p>风窗全风压回风流:0</p>
           </div>
@@ -42,14 +42,20 @@
       {{ selectData.strinstallpos }}
     </div>
     <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 240, scroll)">
-      <dv-border-box8 :dur="5"  :style="`padding: 5px; height: ${scroll.y + 100}px`" >
-      
+      <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 100}px`">
         <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
           <a-tab-pane key="1" tab="实时监测">
-            <GroupMonitorTable ref="MonitorDataTable"  v-if="activeKey === '1' " :dataSource="dataSource" columnsType="sys_surface_junya" @selectRow="getSelectRow" :scroll="scroll"/>
+            <GroupMonitorTable
+              ref="MonitorDataTable"
+              v-if="activeKey === '1'"
+              :dataSource="dataSource"
+              columnsType="sys_surface_junya"
+              @selectRow="getSelectRow"
+              :scroll="scroll"
+            />
           </a-tab-pane>
           <a-tab-pane key="2" tab="实时曲线图" force-render>
-            <div class="tab-item" v-if="activeKey === '2' ">
+            <div class="tab-item" v-if="activeKey === '2'">
               <div class="vent-flex-row-between" style="height: 100%">
                 <BarSingle
                   :xAxisData="[
@@ -77,18 +83,28 @@
             </div>
           </a-tab-pane>
           <a-tab-pane key="3" tab="历史数据">
-            <div class="tab-item" v-if="activeKey === '3' ">
-              <HistoryTable columns-type="sys_surface_junya" device-type="sys_surface_junya" :device-list-api="baseList" designScope="sys_surface_junya-history" />
+            <div class="tab-item" v-if="activeKey === '3'">
+              <HistoryTable
+                columns-type="sys_surface_junya"
+                device-type="sys_surface_junya"
+                :device-list-api="baseList"
+                designScope="sys_surface_junya-history"
+              />
             </div>
           </a-tab-pane>
           <a-tab-pane key="4" tab="报警历史">
-            <div class="tab-item" v-if="activeKey === '4' ">
+            <div class="tab-item" v-if="activeKey === '4'">
               <AlarmHistoryTable columns-type="alarm" device-type="sys_surface_junya" :device-list-api="baseList" designScope="alarm-history" />
             </div>
           </a-tab-pane>
           <a-tab-pane key="5" tab="操作历史">
-            <div class="tab-item" v-if="activeKey === '5' ">
-              <HandlerHistoryTable columns-type="operator_history" device-type="sys_surface_junya" :device-list-api="baseList" designScope="alarm-history" />
+            <div class="tab-item" v-if="activeKey === '5'">
+              <HandlerHistoryTable
+                columns-type="operator_history"
+                device-type="sys_surface_junya"
+                :device-list-api="baseList"
+                designScope="alarm-history"
+              />
             </div>
           </a-tab-pane>
         </a-tabs>
@@ -117,9 +133,9 @@
   import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
 
   const scroll = reactive({
-    y: 180
-  })
-  
+    y: 180,
+  });
+
   const loading = ref(false);
   const activeKey = ref('1');
   const player1 = ref();
@@ -140,7 +156,7 @@
   };
   const flvURL1 = () => {
     // return `https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv`;
-    return ''
+    return '';
   };
   // 监测数据
   const selectData = reactive(lodash.cloneDeep(initData));
@@ -157,7 +173,7 @@
   const dataSource = ref([]);
 
   //
-  async function getDataSource(){
+  async function getDataSource() {
     const res = await list({ devicetype: 'sys_surface_junya', pagetype: 'normal' });
     const dataArr = res.msgTxt[0].datalist || [];
     dataSource.value = [];
@@ -168,24 +184,27 @@
     });
     const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
     return data;
-  };
+  }
 
   // https获取监测数据
   let timer: null | NodeJS.Timeout = null;
   function getMonitor(flag?) {
     if (Object.prototype.toString.call(timer) === '[object Null]') {
-      timer = setTimeout(async () => {
-        await getDataSource();
-        Object.assign(selectData, deviceBaseList.value, dataSource.value[selectRowIndex.value]);
-        addText(selectData);
-        // playAnimation(data, selectData.maxarea);
-        if (timer) {
-          timer = null;
-        }
-        getMonitor();
-      }, flag ? 0 :1000);
+      timer = setTimeout(
+        async () => {
+          await getDataSource();
+          Object.assign(selectData, deviceBaseList.value, dataSource.value[selectRowIndex.value]);
+          addText(selectData);
+          // playAnimation(data, selectData.maxarea);
+          if (timer) {
+            timer = null;
+          }
+          getMonitor();
+        },
+        flag ? 0 : 1000
+      );
     }
-  };
+  }
 
   // 获取设备基本信息列表
   const deviceBaseList = ref([]);
@@ -193,7 +212,7 @@
     getTableList({ pageSize: 1000 }).then((res) => {
       deviceBaseList.value = res.records;
     });
-  };
+  }
 
   // 切换检测数据
   function getSelectRow(id) {
@@ -206,25 +225,23 @@
       loading.value = false;
     });
     // const data = dataSource.value[baseDataIndex];
-    
+
     // addCssText(selectRowIndex.value);
     return;
-  };
+  }
 
   function addPlayVideo() {
     if (player1.value && player1.value.play) {
       if (!player1.value.paused()) player1.value.play();
       document.body.removeEventListener('mousedown', addPlayVideo);
     }
-  };
-
+  }
 
   onBeforeMount(() => {
     getDeviceBaseList();
   });
 
   onMounted(() => {
-    
     // loading.value = true;
     mountedThree(player1.value).then(() => {
       nextTick(() => {

+ 24 - 23
src/views/vent/monitorManager/beltTunMonitor/components/beltTunAlarmHistory.vue

@@ -1,35 +1,36 @@
 <template>
   <div class="alarm-history">
-    <AlarmHistoryTable columns-type="alarm" device-type="sys_maintunnel_leather"
+    <AlarmHistoryTable
+      columns-type="alarm"
+      device-type="sys_maintunnel_leather"
       :device-list-api="workFaceDeviceList.bind(null, { id: deviceId })"
       :list="list"
       :sys-id="deviceId"
-      designScope="alarm-history" :scroll="{ y: 650 }"/>
+      designScope="alarm-history"
+      :scroll="{ y: 650 }"
+    />
   </div>
 </template>
 <script setup lang="ts">
-import AlarmHistoryTable from '../../comment/WorkFaceAlarmHistoryTable.vue';
-import { workFaceDeviceList } from '../../../deviceManager/comment/warningTabel/warning.api'
-import { defHttp } from '/@/utils/http/axios';
-
-const props = defineProps({
-  deviceType: {
-    type: String,
-    required: true,
-  },
-  deviceId: {
-    type: String,
-    required: true,
-  }
-})
-
-const list = (params) => defHttp.get({ url: '/safety/managesysAutoLog/list', params })
+  import AlarmHistoryTable from '../../comment/WorkFaceAlarmHistoryTable.vue';
+  import { workFaceDeviceList } from '../../../deviceManager/comment/warningTabel/warning.api';
+  import { defHttp } from '/@/utils/http/axios';
 
+  const props = defineProps({
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    deviceId: {
+      type: String,
+      required: true,
+    },
+  });
 
+  const list = (params) => defHttp.get({ url: '/safety/managesysAutoLog/list', params });
 </script>
 <style lang="less" scoped>
-.alarm-history {
-  pointer-events: auto;
-  margin-top: 60px !important;
-}
-</style>
+  .alarm-history {
+    pointer-events: auto;
+  }
+</style>

+ 24 - 20
src/views/vent/monitorManager/beltTunMonitor/components/beltTunHistory.vue

@@ -1,28 +1,32 @@
 <template>
   <div class="history-box">
-    <HistoryTable :columns-type="`${deviceType}`" :device-type="deviceType" :sysId="deviceId"
-      :device-list-api="getTableList.bind(null, { strtype: deviceType, sysId: deviceId })" designScope="pressurefan_history" :scroll="{ y: 650 }"/>
+    <HistoryTable
+      :columns-type="`${deviceType}`"
+      :device-type="deviceType"
+      :sysId="deviceId"
+      designScope="pressurefan_history"
+      :scroll="{ y: 650 }"
+    />
   </div>
 </template>
 <script setup lang="ts">
-import { ref, defineProps } from 'vue'
-import HistoryTable from '../../comment/HistoryTable.vue';
-import { getTableList } from '../beltTun.api'
-
-const props = defineProps({
-  deviceType: {
-    type: String,
-    required: true,
-  },
-  deviceId: {
-    type: String,
-    required: true,
-  }
-})
+  import { ref, defineProps } from 'vue';
+  import HistoryTable from '../../comment/HistoryTable.vue';
+  import { getTableList } from '../beltTun.api';
 
+  const props = defineProps({
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    deviceId: {
+      type: String,
+      required: true,
+    },
+  });
 </script>
 <style lang="less" scoped>
-.history-box {
-  pointer-events: auto;
-}
-</style>
+  .history-box {
+    pointer-events: auto;
+  }
+</style>

+ 2 - 1
src/views/vent/monitorManager/beltTunMonitor/index.vue

@@ -232,6 +232,7 @@ onUnmounted(() => {
 
 .history-group{
   padding: 0 20px;
+  margin-top: 90px;
   .history-container{
     position: relative;
     background: #6195af1a;
@@ -248,7 +249,7 @@ onUnmounted(() => {
   display: flex;
   pointer-events: auto;
   position: relative;
-  margin-top: 90px;
+  
   &::after{
     position:absolute;
     content: '';

+ 1 - 1
src/views/vent/monitorManager/chamberMonitor/chamber.api.ts

@@ -3,7 +3,7 @@ import { Modal } from 'ant-design-vue';
 
 enum Api {
   list = '/ventanaly-device/monitor/device',
-  baseList = '/safety/ventanalyDeviceInfo/list',
+  baseList = '/safety/ventanalyMonitorData/list',
 }
 /**
  * 列表接口

+ 17 - 18
src/views/vent/monitorManager/chamberMonitor/components/chamberAlarmHistory.vue

@@ -1,25 +1,24 @@
 <template>
   <div class="alarm-history">
-    <AlarmHistoryTable columns-type="alarm" device-type="pressurefan"
-      :device-list-api="getTableList.bind(null, { strtype: 'pressurefan' })" designScope="alarm-history" :scroll="{ y: 650 }"/>
+    <AlarmHistoryTable columns-type="alarm" :device-type="deviceType" designScope="alarm-history" :sys-id="deviceId" :scroll="{ y: 650 }" />
   </div>
 </template>
 <script setup lang="ts">
-import AlarmHistoryTable from '../../comment/AlarmHistoryTable.vue';
-import { getTableList } from '../chamber.api'
-const props = defineProps({
-  deviceType: {
-    type: String,
-    required: true,
-  },
-  deviceId: {
-    type: String,
-    required: true,
-  }
-})
+  import AlarmHistoryTable from '../../comment/AlarmHistoryTable.vue';
+  import { getTableList } from '../chamber.api';
+  const props = defineProps({
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    deviceId: {
+      type: String,
+      required: true,
+    },
+  });
 </script>
 <style lang="less" scoped>
-.alarm-history {
-  pointer-events: auto;
-}
-</style>
+  .alarm-history {
+    pointer-events: auto;
+  }
+</style>

+ 25 - 20
src/views/vent/monitorManager/chamberMonitor/components/chamberHistory.vue

@@ -1,28 +1,33 @@
 <template>
   <div class="history-box">
-    <HistoryTable :columns-type="`${deviceType}`" :device-type="deviceType" :sysId="deviceId"
-      :device-list-api="getTableList.bind(null, { strtype: deviceType, sysId: deviceId })" designScope="pressurefan_history" :scroll="{ y: 650 }"/>
+    <HistoryTable
+      :columns-type="`${deviceType}`"
+      :device-type="deviceType"
+      :sysId="deviceId"
+      :device-list-api="getTableList.bind(null, { strtype: deviceType, sysId: deviceId })"
+      designScope="pressurefan_history"
+      :scroll="{ y: 650 }"
+    />
   </div>
 </template>
 <script setup lang="ts">
-import { ref, defineProps } from 'vue'
-import HistoryTable from '../../comment/HistoryTable.vue';
-import { getTableList } from '../chamber.api'
-
-const props = defineProps({
-  deviceType: {
-    type: String,
-    required: true,
-  },
-  deviceId: {
-    type: String,
-    required: true,
-  }
-})
+  import { ref, defineProps } from 'vue';
+  import HistoryTable from '../../comment/HistoryTable.vue';
+  import { getTableList } from '../chamber.api';
 
+  const props = defineProps({
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    deviceId: {
+      type: String,
+      required: true,
+    },
+  });
 </script>
 <style lang="less" scoped>
-.history-box {
-  pointer-events: auto;
-}
-</style>
+  .history-box {
+    pointer-events: auto;
+  }
+</style>

+ 437 - 435
src/views/vent/monitorManager/chamberMonitor/components/chamberHome.vue

@@ -38,12 +38,12 @@
                   <div class="param-item">
                     <div class="param">
                       <div class="param-icon">
-                        <div class="param-title" style="color: #61ddb1; font-weight: 600; font-size: 16px;">风量</div>
-                        <div class="param-unit" style="color: #61ddb1; font-weight: 600; font-size: 14px; top: -4px;">预测</div>
+                        <div class="param-title" style="color: #61ddb1; font-weight: 600; font-size: 16px">风量</div>
+                        <div class="param-unit" style="color: #61ddb1; font-weight: 600; font-size: 14px; top: -4px">预测</div>
                       </div>
                       <div class="param-val-box">
                         <div class="param-val-icon"></div>
-                        <div class="param-val" style="color: #FF3823;">风量不足</div>
+                        <div class="param-val" style="color: #ff3823">风量不足</div>
                       </div>
                     </div>
                   </div>
@@ -67,7 +67,7 @@
             </template>
             <template #container>
               <div class="monitor-box">
-                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="42" name="alarm-icon"/><span>报警信息</span></div>
+                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="42" name="alarm-icon" /><span>报警信息</span></div>
                 <div class="item-group">
                   <div class="item-col">
                     <SvgIcon class="icon" size="24" name="alarm-fire" />
@@ -77,7 +77,7 @@
                   <div class="item-col">
                     <SvgIcon class="icon" size="24" name="alarm-smoke" />
                     <span class="title">烟雾传感器</span>
-                    <span class="value" style="color: #FF3823; font-weight: 600;">15</span>
+                    <span class="value" style="color: #ff3823; font-weight: 600">15</span>
                   </div>
                   <div class="item-col">
                     <SvgIcon class="icon" size="24" name="alarm-CO" />
@@ -92,7 +92,7 @@
                 </div>
               </div>
               <div class="monitor-box">
-                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="42" name="warning-icon"/><span>预警信息</span></div>
+                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="42" name="warning-icon" /><span>预警信息</span></div>
                 <div class="item-group">
                   <div class="item-col">
                     <SvgIcon class="icon" size="22" name="warning-fire" />
@@ -102,7 +102,7 @@
                   <div class="item-col">
                     <SvgIcon class="icon" size="22" name="warning-smoke" />
                     <span class="title">烟雾传感器</span>
-                    <span class="value" style="color: #FF9B17; font-weight: 600;">15</span>
+                    <span class="value" style="color: #ff9b17; font-weight: 600">15</span>
                   </div>
                   <div class="item-col">
                     <SvgIcon class="icon" size="22" name="warning-CO" />
@@ -116,12 +116,9 @@
                   </div>
                 </div>
                 <div class="alarm-box">
-                  <dv-scroll-board ref="scrollBoard" :config="warningConfig"
-                    style="width: 100%; height: 240px; overflow-y: auto; " />
+                  <dv-scroll-board ref="scrollBoard" :config="warningConfig" style="width: 100%; height: 240px; overflow-y: auto" />
                 </div>
               </div>
-              
-          
             </template>
           </ventBox1>
         </div>
@@ -170,7 +167,6 @@
                     </div>
                   </div>
                 </div>
-            
               </div>
             </template>
           </ventBox1>
@@ -179,12 +175,18 @@
               <div>烟雾传感器实时监测</div>
             </template>
             <template #container>
-              <a-table :columns="sensorColumns" :data-source="smokeDataSource" :pagination="false" size="small" maxWidth="340"
-                :scroll="{ x: 'max-content', y: 180 }">
+              <a-table
+                :columns="sensorColumns"
+                :data-source="smokeDataSource"
+                :pagination="false"
+                size="small"
+                maxWidth="340"
+                :scroll="{ x: 'max-content', y: 180 }"
+              >
                 <template #bodyCell="{ column, record }">
                   <template v-if="column.dataIndex === 'warnFlag'">
-                    <span v-if="record['warnFlag'] == 0" style="color: #00ff00;">正常</span>
-                    <span v-else style="color: #ff0000;"> {{ record.warnDes }}</span>
+                    <span v-if="record['warnFlag'] == 0" style="color: #00ff00">正常</span>
+                    <span v-else style="color: #ff0000"> {{ record.warnDes }}</span>
                   </template>
                 </template>
               </a-table>
@@ -192,15 +194,21 @@
           </ventBox1>
           <ventBox1 class="vent-margin-t-10">
             <template #title>
-              <div>{{  }}喷粉监控</div>
+              <div>{{}}喷粉监控</div>
             </template>
             <template #container>
-              <a-table :columns="dustColumns" :data-source="dustDataSource" :pagination="false" size="small" maxWidth="340"
-                :scroll="{ x: 'max-content', y: 240 }">
+              <a-table
+                :columns="dustColumns"
+                :data-source="dustDataSource"
+                :pagination="false"
+                size="small"
+                maxWidth="340"
+                :scroll="{ x: 'max-content', y: 240 }"
+              >
                 <template #bodyCell="{ column, record }">
                   <template v-if="column.dataIndex === 'warnFlag'">
-                    <span v-if="record['warnFlag'] == 0" style="color: #00ff00;">链接</span>
-                    <span v-else style="color: #ff0000;"> {{ record.warnDes }}</span>
+                    <span v-if="record['warnFlag'] == 0" style="color: #00ff00">链接</span>
+                    <span v-else style="color: #ff0000"> {{ record.warnDes }}</span>
                   </template>
                   <template v-if="column.dataIndex === 'action'">
                     <a-switch v-model:checked="openDust" @change="handleDust" />
@@ -209,7 +217,6 @@
               </a-table>
             </template>
           </ventBox1>
-          
         </div>
         <!-- <div class="item-box" >
           <LivePlayer id="fm-player1" style="height: 250px;" ref="player1" :videoUrl="flvURL1()" muted live loading controls />
@@ -217,440 +224,435 @@
       </div>
     </div>
   </a-spin>
-
 </template>
 
 <script setup lang="ts">
+  import { onBeforeMount, ref, onMounted, onUnmounted, reactive, defineProps, watch } from 'vue';
+  // import MonitorTable from '../comment/MonitorTable.vue';
+  import { ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
+  import ventBox1 from '/@/components/vent/ventBox1.vue';
+  import { mountedThree, destroy, addChamberText, setModelType } from '../chamber.threejs';
+  import { SvgIcon } from '/@/components/Icon';
+  import FourBorderBg from '/@/components/vent/fourBorderBg.vue';
+  import { warningConfig, sensorColumns, dustColumns, windowParam } from '../chamber.data';
+  import { list } from '../chamber.api';
+  import LivePlayer from '@liveqing/liveplayer-v3';
+
+  const props = defineProps({
+    deviceId: {
+      type: String,
+      require: true,
+    },
+  });
 
-import { onBeforeMount, ref, onMounted, onUnmounted, reactive, defineProps, watch } from 'vue';
-// import MonitorTable from '../comment/MonitorTable.vue';
-import { ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
-import ventBox1 from '/@/components/vent/ventBox1.vue'
-import { mountedThree, destroy, addChamberText, setModelType } from '../chamber.threejs';
-import { SvgIcon } from '/@/components/Icon';
-import FourBorderBg from '/@/components/vent/fourBorderBg.vue';
-import { warningConfig, sensorColumns, dustColumns, windowParam } from '../chamber.data'
-import { list } from '../chamber.api';
-import LivePlayer from '@liveqing/liveplayer-v3';
-
-const props = defineProps({
-  deviceId: {
-    type: String,
-    require: true
+  const loading = ref(false);
+
+  // 默认初始是第一行
+  const openDust = ref(false);
+  const fiberDataSource = ref([]); //dusting
+  const dustDataSource = ref([]);
+  const smokeDataSource = ref([]);
+  const temperatureDataSource = ref([]);
+  const fireDataSource = ref([]);
+
+  // 监测数据
+  const selectData = reactive({});
+
+  const flvURL1 = () => {
+    return `https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv`;
+    // return ''
+  };
+
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  function getMonitor(flag?) {
+    if (Object.prototype.toString.call(timer) === '[object Null]') {
+      timer = setTimeout(
+        async () => {
+          if (props.deviceId) {
+            const data = await getDataSource(props.deviceId);
+            Object.assign(selectData, data);
+          }
+          if (timer) {
+            timer = null;
+          }
+          await getMonitor();
+          loading.value = false;
+        },
+        flag ? 0 : 1000
+      );
+    }
   }
-})
-
-const loading = ref(false);
-
-// 默认初始是第一行
-const openDust = ref(false)
-const fiberDataSource = ref([]); //dusting
-const dustDataSource = ref([]);
-const smokeDataSource = ref([]);
-const temperatureDataSource = ref([]);
-const fireDataSource = ref([]);
-
-// 监测数据
-const selectData = reactive({});
-
-const flvURL1 = () => {
-  return `https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv`;
-  // return ''
-};
-
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor(flag?) {
-  if (Object.prototype.toString.call(timer) === '[object Null]') {
-    timer = setTimeout(async () => {
-      if (props.deviceId) {
-        const data = await getDataSource(props.deviceId)
-        Object.assign(selectData, data); 
+
+  async function getDataSource(systemID) {
+    const res = await list({ devicetype: 'sys', systemID });
+    const result = res.msgTxt;
+    result.forEach((item) => {
+      if (item.type === 'dusting_auto') {
+        // 喷粉
+        dustDataSource.value = item['datalist'].filter((data: any) => {
+          const readData = data.readData;
+          return Object.assign(data, readData);
+        });
+      }
+      if (item.type === 'fiber_normal') {
+        // 光纤
+        fiberDataSource.value = item['datalist'].filter((data: any) => {
+          const readData = data.readData;
+          return Object.assign(data, readData);
+        });
       }
-      if (timer) {
-        timer = null;
+      if (item.type === 'modelsensor_smoke') {
+        // 烟雾
+        smokeDataSource.value = item['datalist'].filter((data: any) => {
+          const readData = data.readData;
+          return Object.assign(data, readData);
+        });
       }
-      await getMonitor();
-      loading.value = false
-    }, flag? 0 : 1000);
+      if (item.type === 'modelsensor_temperature') {
+        // 温度
+        temperatureDataSource.value = item['datalist'].filter((data: any) => {
+          const readData = data.readData;
+          return Object.assign(data, readData);
+        });
+      }
+      if (item.type === 'modelsensor_fire') {
+        // 温度
+        fireDataSource.value = item['datalist'].filter((data: any) => {
+          const readData = data.readData;
+          return Object.assign(data, readData);
+        });
+      }
+      if (item.type === 'sys') {
+        // 硐室基本
+        // fiberDataSource.value = item.filter((data: any) => {
+        //   const readData = data.readData;
+        //   return Object.assign(data, readData);
+        // })
+      }
+    });
   }
-};
 
-async function getDataSource(systemID) {
-  const res = await list({ devicetype: 'sys', systemID });
-  const result = res.msgTxt;
-  result.forEach(item => {
-
-    if (item.type === 'dusting_auto') {
-      // 喷粉
-      dustDataSource.value = item['datalist'].filter((data: any) => {
-        const readData = data.readData;
-        return Object.assign(data, readData);
-      })
+  // 喷粉操作
+  function handleDust() {
+    //
+  }
 
+  watch(
+    () => props.deviceId,
+    () => {
+      setModelType('chamberBase');
+      loading.value = true;
     }
-    if (item.type === 'fiber_normal') {
-      // 光纤
-      fiberDataSource.value = item['datalist'].filter((data: any) => {
-        const readData = data.readData;
-        return Object.assign(data, readData);
-      })
-    }
-    if (item.type === 'modelsensor_smoke') {
-      // 烟雾
-      smokeDataSource.value = item['datalist'].filter((data: any) => {
-        const readData = data.readData;
-        return Object.assign(data, readData);
-      })
-    }
-    if (item.type === 'modelsensor_temperature') {
-      // 温度
-      temperatureDataSource.value = item['datalist'].filter((data: any) => {
-        const readData = data.readData;
-        return Object.assign(data, readData);
-      })
-    }
-    if (item.type === 'modelsensor_fire') {
-      // 温度
-      fireDataSource.value = item['datalist'].filter((data: any) => {
-        const readData = data.readData;
-        return Object.assign(data, readData);
-      })
-    }
-    if (item.type === 'sys') {
-      // 硐室基本
-      // fiberDataSource.value = item.filter((data: any) => {
-      //   const readData = data.readData;
-      //   return Object.assign(data, readData);
-      // })
-    }
-  })
-}
-
-// 喷粉操作
-function handleDust() {
-  //
-}
-
-watch(() => props.deviceId, () => {
-  setModelType('chamberBase')
-  loading.value = true
-})
-
-onBeforeMount(() => {
-
-});
-
-onMounted(() => {
-  loading.value = true;
-  mountedThree().then(async () => {
-    await setModelType('chamberBase');
-    loading.value = false;
-    timer = null
-    await getMonitor(true)
+  );
+
+  onBeforeMount(() => {});
+
+  onMounted(() => {
+    loading.value = true;
+    mountedThree().then(async () => {
+      await setModelType('chamberBase');
+      loading.value = false;
+      timer = null;
+      await getMonitor(true);
+    });
   });
-});
-
-onUnmounted(() => {
-  destroy();
-  if (timer) {
-    clearTimeout(timer);
-    timer = undefined;
-  }
-});
 
+  onUnmounted(() => {
+    destroy();
+    if (timer) {
+      clearTimeout(timer);
+      timer = undefined;
+    }
+  });
 </script>
 <style lang="less" scoped>
-@import '/@/design/vent/modal.less';
-@import '../../comment/less/workFace.less';
-@ventSpace: zxm;
-
-.warning-group {
-  padding: 10px 0;
-}
-.monitor-box {
-  width: 100%;
-  margin-bottom: 20px;
-  .parameter-title{
-    position: relative;
-    width: 100%;
-    height: 16px;
-    margin-top: 10px;
-    margin-bottom: 5px;
-    .icon, span{
-      position: absolute;
-      top: -10px;
-    }
-  }
-  .group-parameter-title{
-    // background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
-    .icon{
-      left: -12px;
-      top: -20px;
-    }
-    span{
-      left: 24px;
-    }
+  @import '/@/design/vent/modal.less';
+  @import '../../comment/less/workFace.less';
+  @ventSpace: zxm;
+
+  .warning-group {
+    padding: 10px 0;
   }
-  .item-group{
-    display: flex;
-    flex-wrap: wrap;
-    .item-col{
-      width: calc(50% - 5px);
-      background-image: linear-gradient(to right, #39A3FF00, #39A3FF10);
+  .monitor-box {
+    width: 100%;
+    margin-bottom: 20px;
+    .parameter-title {
       position: relative;
-      // display: flex;
-      // align-items: center;
-      &:nth-child(even){
-        margin-left: 10px;
+      width: 100%;
+      height: 16px;
+      margin-top: 10px;
+      margin-bottom: 5px;
+      .icon,
+      span {
+        position: absolute;
+        top: -10px;
       }
-      padding: 2px 0;
-      margin: 3px 0;
-      .title{
-        margin-left: 5px;
+    }
+    .group-parameter-title {
+      // background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
+      .icon {
+        left: -12px;
+        top: -20px;
       }
-      .value{
-        position: absolute;
-        right: 10px;
-        top: 5px;
+      span {
+        left: 24px;
+      }
+    }
+    .item-group {
+      display: flex;
+      flex-wrap: wrap;
+      .item-col {
+        width: calc(50% - 5px);
+        background-image: linear-gradient(to right, #39a3ff00, #39a3ff10);
+        position: relative;
+        // display: flex;
+        // align-items: center;
+        &:nth-child(even) {
+          margin-left: 10px;
+        }
+        padding: 2px 0;
+        margin: 3px 0;
+        .title {
+          margin-left: 5px;
+        }
+        .value {
+          position: absolute;
+          right: 10px;
+          top: 5px;
+        }
       }
     }
   }
-}
-.alarm-box{
-  margin-top: 10px;
-}
-
-
-// .monitor-container {
-//   width: 100%;
-//   height: 100%;
-//   // height: 550px;
-//   // border: 1px solid #fff;
-//   margin-top: 20px;
-//   padding-top: 20px;
-//   display: flex;
-//   justify-content: space-between;
-
-//   .lr {
-//     width: 350px;
-//     height: 100%;
-//     display: flex;
-//     flex-direction: column;
-//     margin-top: 10px;
-//     pointer-events: auto;
-
-//   }
-
-//   .right-box {
-//     width: 320px;
-//   }
-
-//   .left-box {
-//     margin-top: 30px;
-
-//     .monitor-info {
-//       .temperature-group {
-//         width: 100%;
-//         margin-top: 10px;
-//         .light-group{
-//           display: flex;
-//           flex-direction: row;
-//           justify-content: space-between;
-//           position: relative;
-//           .light-bg{
-//             width: 331px;
-//             height: 42px;
-//             background: url('/@/assets/images/vent/plane-bg.png') no-repeat;
-//             background-size: contain;
-//             position: absolute;
-//             z-index: -1;
-//             top: 44px;
-//           }
-//           .temperature-item {
-//             width: 120px;
-//             display: flex;
-//             flex-direction: column;
-//             justify-content: center;
-//             align-items: center;
-//             position: reactive;
-//             .icon {
-//               display: block;
-//               position: absolute;
-//               top: -5px;
-//             }
-
-//             .temperature {
-//               display: flex;
-//               flex-direction: column;
-//               justify-content: center;
-//               align-items: center;
-//               .temperature-icon{
-//                 width: 90px;
-//                 height: 58px;
-//                 background: url('/@/assets/images/vent/ligth-q.png');
-//               }
-//               .temperature-title{
-//                 position: relative;
-//                 top: -15px;
-//               }
-              
-//               .temperature-val-box{
-//                 display: flex;
-//                 flex-direction: column;
-//                 justify-content: center;
-//                 align-items: center;
-//                 position: relative;
-//                 top: -10px;
-//                 .temperature-val-icon{
-//                   width: 2px;
-//                   height: 18px;
-//                   background: #00d8ff;
-//                   position: relative;
-//                   &::after{
-//                     content: '';
-//                     display: block;
-//                     position: absolute;
-//                     width: 6px;
-//                     height: 6px;
-//                     border-radius: 3px;
-//                     background: #00d8ff;
-//                     bottom: -2px;
-//                     left: -2px;
-//                   }
-
-//                 }
-//                 .temperature-val{
-//                   position: relative;
-//                   font-family: 'douyuFont';
-//                   color: #20dbfd;
-//                   text-shadow: 0 0 25px #00d8ff;
-//                   font-size: 13px;
-//                   border: 1px solid #40B7F3;
-//                   padding: 5px 8px 2px 8px;
-//                   top: 2px;
-//                   &::after{
-//                     width: calc(100% - 4px);
-//                     height: calc(100% - 4px);
-//                     content: '';
-//                     position: absolute;
-//                     top: 2px;
-//                     left: 2px;
-//                     display: block;
-//                     border: 1px solid #006EA6;
-//                   }
-//                 }
-//               }
-              
-//             }
-//           }
-//         }
-
-        
-//       }
-
-//     }
-//     .warning-group {
-//       padding: 10px 0;
-//     }
-//     .monitor-box {
-//       width: 100%;
-//       margin-bottom: 20px;
-//       .parameter-title{
-//         position: relative;
-//         width: 100%;
-//         height: 16px;
-//         margin-top: 10px;
-//         margin-bottom: 5px;
-//         .icon, span{
-//           position: absolute;
-//           top: -10px;
-//         }
-//       }
-//       .group-parameter-title{
-//         background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
-        
-//         .icon{
-//           left: -12px;
-//           top: -20px;
-//         }
-//         span{
-//           left: 20px;
-//         }
-        
-//       }
-//       .item-group{
-//         display: flex;
-//         flex-wrap: wrap;
-//         .item-col{
-//           width: calc(50% - 5px);
-//           background-image: linear-gradient(to right, #39A3FF00, #39A3FF10);
-//           position: relative;
-//           // display: flex;
-//           // align-items: center;
-//           &:nth-child(even){
-//             margin-left: 10px;
-//           }
-//           padding: 2px 0;
-//           margin: 3px 0;
-//           .title{
-//             margin-left: 5px;
-//           }
-//           .value{
-//             position: absolute;
-//             right: 10px;
-//             top: 5px;
-//           }
-//         }
-//       }
-      
-      
-      
-//     }
-//     .alarm-box{
-//       margin-top: 10px;
-//     }
-//   }
-//   .box-title{
-//     color: #fff;
-//     margin-bottom: 8px;
-//     padding-left: 10px;
-//     position: relative;
-//     font-size: 16px;
-//     &::after{
-//       content: '';
-//       position: absolute;
-//       display: block;
-//       width: 4px;
-//       height: 12px;
-//       top: 7px;
-//       left: 0px;
-//       background: #45d3fd;
-//       border-radius: 4px;
-//     }
-//   }
-
-// }
-
-:deep(.@{ventSpace}-tabs-tabpane-active) {
-  overflow: auto;
-}
-
-// .input-box {
-//   display: flex;
-//   align-items: center;
-//   padding-left: 10px;
-
-//   .input-title {
-//     color: #73e8fe;
-//     width: auto;
-//   }
-
-//   .@{ventSpace}-input-number {
-//     border-color: #ffffff88 !important;
-//   }
-
-//   margin-right: 10px;
-// }
+  .alarm-box {
+    margin-top: 10px;
+  }
+
+  // .monitor-container {
+  //   width: 100%;
+  //   height: 100%;
+  //   // height: 550px;
+  //   // border: 1px solid #fff;
+  //   margin-top: 20px;
+  //   padding-top: 20px;
+  //   display: flex;
+  //   justify-content: space-between;
+
+  //   .lr {
+  //     width: 350px;
+  //     height: 100%;
+  //     display: flex;
+  //     flex-direction: column;
+  //     margin-top: 10px;
+  //     pointer-events: auto;
+
+  //   }
+
+  //   .right-box {
+  //     width: 320px;
+  //   }
+
+  //   .left-box {
+  //     margin-top: 30px;
+
+  //     .monitor-info {
+  //       .temperature-group {
+  //         width: 100%;
+  //         margin-top: 10px;
+  //         .light-group{
+  //           display: flex;
+  //           flex-direction: row;
+  //           justify-content: space-between;
+  //           position: relative;
+  //           .light-bg{
+  //             width: 331px;
+  //             height: 42px;
+  //             background: url('/@/assets/images/vent/plane-bg.png') no-repeat;
+  //             background-size: contain;
+  //             position: absolute;
+  //             z-index: -1;
+  //             top: 44px;
+  //           }
+  //           .temperature-item {
+  //             width: 120px;
+  //             display: flex;
+  //             flex-direction: column;
+  //             justify-content: center;
+  //             align-items: center;
+  //             position: reactive;
+  //             .icon {
+  //               display: block;
+  //               position: absolute;
+  //               top: -5px;
+  //             }
+
+  //             .temperature {
+  //               display: flex;
+  //               flex-direction: column;
+  //               justify-content: center;
+  //               align-items: center;
+  //               .temperature-icon{
+  //                 width: 90px;
+  //                 height: 58px;
+  //                 background: url('/@/assets/images/vent/ligth-q.png');
+  //               }
+  //               .temperature-title{
+  //                 position: relative;
+  //                 top: -15px;
+  //               }
+
+  //               .temperature-val-box{
+  //                 display: flex;
+  //                 flex-direction: column;
+  //                 justify-content: center;
+  //                 align-items: center;
+  //                 position: relative;
+  //                 top: -10px;
+  //                 .temperature-val-icon{
+  //                   width: 2px;
+  //                   height: 18px;
+  //                   background: #00d8ff;
+  //                   position: relative;
+  //                   &::after{
+  //                     content: '';
+  //                     display: block;
+  //                     position: absolute;
+  //                     width: 6px;
+  //                     height: 6px;
+  //                     border-radius: 3px;
+  //                     background: #00d8ff;
+  //                     bottom: -2px;
+  //                     left: -2px;
+  //                   }
+
+  //                 }
+  //                 .temperature-val{
+  //                   position: relative;
+  //                   font-family: 'douyuFont';
+  //                   color: #20dbfd;
+  //                   text-shadow: 0 0 25px #00d8ff;
+  //                   font-size: 13px;
+  //                   border: 1px solid #40B7F3;
+  //                   padding: 5px 8px 2px 8px;
+  //                   top: 2px;
+  //                   &::after{
+  //                     width: calc(100% - 4px);
+  //                     height: calc(100% - 4px);
+  //                     content: '';
+  //                     position: absolute;
+  //                     top: 2px;
+  //                     left: 2px;
+  //                     display: block;
+  //                     border: 1px solid #006EA6;
+  //                   }
+  //                 }
+  //               }
+
+  //             }
+  //           }
+  //         }
+
+  //       }
+
+  //     }
+  //     .warning-group {
+  //       padding: 10px 0;
+  //     }
+  //     .monitor-box {
+  //       width: 100%;
+  //       margin-bottom: 20px;
+  //       .parameter-title{
+  //         position: relative;
+  //         width: 100%;
+  //         height: 16px;
+  //         margin-top: 10px;
+  //         margin-bottom: 5px;
+  //         .icon, span{
+  //           position: absolute;
+  //           top: -10px;
+  //         }
+  //       }
+  //       .group-parameter-title{
+  //         background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
+
+  //         .icon{
+  //           left: -12px;
+  //           top: -20px;
+  //         }
+  //         span{
+  //           left: 20px;
+  //         }
+
+  //       }
+  //       .item-group{
+  //         display: flex;
+  //         flex-wrap: wrap;
+  //         .item-col{
+  //           width: calc(50% - 5px);
+  //           background-image: linear-gradient(to right, #39A3FF00, #39A3FF10);
+  //           position: relative;
+  //           // display: flex;
+  //           // align-items: center;
+  //           &:nth-child(even){
+  //             margin-left: 10px;
+  //           }
+  //           padding: 2px 0;
+  //           margin: 3px 0;
+  //           .title{
+  //             margin-left: 5px;
+  //           }
+  //           .value{
+  //             position: absolute;
+  //             right: 10px;
+  //             top: 5px;
+  //           }
+  //         }
+  //       }
+
+  //     }
+  //     .alarm-box{
+  //       margin-top: 10px;
+  //     }
+  //   }
+  //   .box-title{
+  //     color: #fff;
+  //     margin-bottom: 8px;
+  //     padding-left: 10px;
+  //     position: relative;
+  //     font-size: 16px;
+  //     &::after{
+  //       content: '';
+  //       position: absolute;
+  //       display: block;
+  //       width: 4px;
+  //       height: 12px;
+  //       top: 7px;
+  //       left: 0px;
+  //       background: #45d3fd;
+  //       border-radius: 4px;
+  //     }
+  //   }
+
+  // }
+
+  :deep(.@{ventSpace}-tabs-tabpane-active) {
+    overflow: auto;
+  }
+
+  // .input-box {
+  //   display: flex;
+  //   align-items: center;
+  //   padding-left: 10px;
+
+  //   .input-title {
+  //     color: #73e8fe;
+  //     width: auto;
+  //   }
+
+  //   .@{ventSpace}-input-number {
+  //     border-color: #ffffff88 !important;
+  //   }
 
+  //   margin-right: 10px;
+  // }
 </style>

+ 77 - 44
src/views/vent/monitorManager/comment/AlarmHistoryTable.vue

@@ -6,7 +6,7 @@
 
 <script lang="ts" name="system-user" setup>
   //ts语法
-  import { watch, ref, defineExpose } from 'vue'
+  import { watch, ref, defineExpose, inject } from 'vue';
   import { BasicTable } from '/@/components/Table';
   import { useListPage } from '/@/hooks/system/useListPage';
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
@@ -29,7 +29,6 @@
     },
     deviceListApi: {
       type: Function,
-      required: true,
     },
     designScope: {
       type: String,
@@ -39,66 +38,103 @@
     },
     scroll: {
       type: Object,
-      default: { y: 0 }
+      default: { y: 0 },
     },
     list: {
       type: Function,
-      default: (params) => defHttp.get({ url: '/safety/ventanalyAlarmLog/list', params })
-    }
+      default: (params) => defHttp.get({ url: '/safety/ventanalyAlarmLog/list', params }),
+    },
   });
-  const alarmHistory = ref()
-  const columns = ref([])
-  let deviceOptions = <any[]>[]
+  const globalConfig = inject('globalConfig');
+  const alarmHistory = ref();
+  const columns = ref([]);
+  const deviceOptions = ref([]);
+
+  const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({});
 
-  const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({})
-  
   async function getDeviceList() {
+    if (props.deviceType.split('_')[1] && props.deviceType.split('_')[1] === 'history') return;
     let result;
-    result = await props.deviceListApi()
-    if (result && result['records'] && result['records'].length > 0) {
-      const deviceList = result['records']
-      deviceOptions = []
-      deviceOptions = deviceList.map((item) => {
-        return { label: item['strinstallpos'], value: item['id'], strtype: item['strtype'], strinstallpos: item['strinstallpos'], devicekind: item['devicekind'] }
-      })
+    if (globalConfig.History_Type == 'vent') {
+      if (props.deviceListApi && !props.sysId) {
+        const res = await props.deviceListApi();
+        if (res['records'] && res['records'].length > 0) result = res['records'];
+      } else {
+        result = await defHttp.get({
+          url: '/safety/ventanalyManageSystem/linkdevicelist',
+          params: { sysId: props.sysId, deviceType: props.deviceType, pageSize: 9999 },
+        });
+      }
+    } else {
+      result = await defHttp.get({
+        url: '/safety/ventanalyManageSystem/linkdevicelist',
+        params: { sysId: props.sysId, deviceType: props.deviceType.startsWith('vehicle') ? 'location_normal' : props.deviceType },
+      });
+    }
+    if (result) {
+      deviceOptions.value = [];
+      deviceOptions.value = result.map((item) => {
+        return {
+          label: item['strinstallpos'],
+          value: item['id'],
+          strtype: item['strtype'],
+          strinstallpos: item['strinstallpos'],
+          devicekind: item['devicekind'],
+        };
+        // return { label: item['strname'], value: item['id']}
+      });
+      globalConfig.History_Type == 'vent' && deviceOptions.value[0]
+        ? getForm().setFieldsValue({ gdeviceid: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '' })
+        : getForm().setFieldsValue({ deviceId: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '' });
     }
   }
 
-  await getDeviceList()
   watch(
     () => {
       return props.columnsType;
     },
-    (newVal) => {
-      if (!newVal) return
-      const column = getTableHeaderColumns(newVal + '_history')
+    async (newVal) => {
+      if (!newVal) return;
+
+      const column = getTableHeaderColumns(newVal + '_history');
       if (column && column.length < 1) {
-        const arr = newVal.split('_')
+        const arr = newVal.split('_');
         const columnKey = arr.reduce((prev, cur, index) => {
           if (index !== arr.length - 2) {
-            return prev + '_' + cur
+            return prev + '_' + cur;
           } else {
-            return prev
+            return prev;
           }
-        })
+        });
         columns.value = getTableHeaderColumns(arr[0] + '_history');
       } else {
-        columns.value = column
+        columns.value = column;
       }
-      if (alarmHistory.value) reload()
+      if (alarmHistory.value) reload();
     },
     {
-      immediate: true
+      immediate: true,
     }
   );
 
-  watch(() => props.scroll.y, (newVal) => {
-    if (newVal) {
-      tableScroll.value = { y: newVal - 100 }
-    } else {
-      tableScroll.value = {}
-    }}
-  )
+  watch(
+    () => props.deviceType,
+    async () => {
+      if (alarmHistory.value) getForm().resetFields();
+      await getDeviceList();
+    }
+  );
+
+  watch(
+    () => props.scroll.y,
+    (newVal) => {
+      if (newVal) {
+        tableScroll.value = { y: newVal - 100 };
+      } else {
+        tableScroll.value = {};
+      }
+    }
+  );
 
   // 列表页面公共参数、方法
   const { tableContext } = useListPage({
@@ -120,10 +156,7 @@
             label: '时间范围',
             field: 'createTime',
             component: 'RangePicker',
-            defaultValue: [
-              dayjs().subtract(1, 'day'),
-              dayjs(),
-            ],
+            defaultValue: [dayjs().subtract(1, 'day'), dayjs()],
             componentProps: {
               valueFormat: 'YYYY-MM-DD HH:mm:ss',
             },
@@ -132,7 +165,7 @@
             label: '查询设备',
             field: 'deviceid',
             component: 'Select',
-            defaultValue: deviceOptions[0] ? deviceOptions[0]['value'] : '',
+            defaultValue: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '',
             required: true,
             componentProps: {
               options: deviceOptions,
@@ -158,8 +191,8 @@
     },
   });
   //注册table数据
-  const [registerTable, { reload, setLoading }] = tableContext;
-  defineExpose({ setLoading })
+  const [registerTable, { reload, setLoading, getForm }] = tableContext;
+  defineExpose({ setLoading });
 </script>
 
 <style scoped lang="less">
@@ -168,8 +201,8 @@
   :deep(.ventSpace-table-body) {
     height: auto !important;
   }
-  :deep(.zxm-picker){
-      height: 30px !important;
+  :deep(.zxm-picker) {
+    height: 30px !important;
   }
   .alarm-history-table {
     width: 100%;

+ 21 - 29
src/views/vent/monitorManager/comment/HistoryTable.vue

@@ -49,6 +49,11 @@ import { onMounted } from 'vue';
     deviceListApi: {
       type: Function,
     },
+    deviceArr: {
+      type: Array,
+      // required: true,
+      default: () => [],
+    },
     designScope: {
       type: String,
     },
@@ -67,16 +72,17 @@ import { onMounted } from 'vue';
   const historyType = ref('')
   const columns = ref([])
   const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({})
-  let deviceOptions = <any[]>[]
+  let deviceOptions = ref([])
   let deviceList = <any[]>[]
 
   watch(
     () => {
       return props.columnsType;
     },
-    (newVal) => {
+    async(newVal) => {
       if (!newVal) return
       if(historyTable.value) getForm().resetFields()
+      await getDeviceList()
       const column = getTableHeaderColumns(newVal.includes('_history') ? newVal : newVal + '_history')
       if (column && column.length < 1) {
         const arr = newVal.split('_')
@@ -114,28 +120,30 @@ import { onMounted } from 'vue';
   })
 
   async function getDeviceList() {
+    if( props.deviceType.split('_')[1] && props.deviceType.split('_')[1] === 'history') return
     let result;
     if(globalConfig.History_Type == 'vent'){
-      if(props.deviceListApi){
+      debugger;
+      if(props.deviceListApi && !props.sysId){
         const res = await props.deviceListApi()
         if (res['records'] && res['records'].length > 0) result = res['records']
       }else{
-        result = await defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType } })
+        result = await defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType, pageSize: 9999 } })
       }
     }else {
       result = await defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType.startsWith('vehicle') ? 'location_normal' : props.deviceType } })
     }
     if(result){
-      deviceOptions = []
-      deviceOptions = result.map((item) => {
+      deviceOptions.value = []
+      deviceOptions.value = result.map((item) => {
         return {label: item['strinstallpos'], value: item['id'], strtype: item['strtype'], strinstallpos: item['strinstallpos'],  devicekind: item['devicekind'] }
         // return { label: item['strname'], value: item['id']}
       })
-      
     }
+    (globalConfig.History_Type == 'vent' && deviceOptions.value[0]) ? getForm().setFieldsValue({gdeviceid: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : ''}):getForm().setFieldsValue({deviceId: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : ''})
   }
   
-  await getDeviceList()
+  
   loading.value = true
   // 列表页面公共参数、方法
   const { tableContext } = useListPage(
@@ -193,26 +201,10 @@ import { onMounted } from 'vue';
               label: '查询设备',
               field: 'gdeviceid',
               component: 'Select',
-              defaultValue: deviceOptions[0] ?  deviceOptions[0]['value'] : '',
+              defaultValue: deviceOptions.value[0] ?  deviceOptions.value[0]['value'] : '',
               required: true,
-              // componentProps: ({ formModel }) => {
-              //   return {
-              //     options: deviceOptions.value,
-              //     // api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType } }),
-              //     // resultField: 'result',
-              //     // labelField: 'strinstallpos',
-              //     // valueField: 'id',
-              //     // onChange: (e, option) => {
-              //     //   if (option && (option['strtype'] || option['devicekind'])) historyType.value = option['strtype'] || option['devicekind']
-              //     // },
-              //   }
-              // },
               componentProps: {
                 options: deviceOptions,
-                // api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType } }),
-                // // resultField: 'result',
-                // labelField: 'strinstallpos',
-                // valueField: 'id',
                 onChange: (e, option) => {
                   if (option && (option['strinstallpos'] || option['strtype'] || option['devicekind'])) historyType.value = option['strtype'] || option['devicekind']
                 },
@@ -281,7 +273,6 @@ import { onMounted } from 'vue';
         },
         beforeFetch(params) {
           params.strtype = props.deviceType + '*';
-          debugger;
           if(props.sysId){
             params.sysId = props.sysId;
           }
@@ -349,7 +340,7 @@ import { onMounted } from 'vue';
             label: '查询设备',
             field: 'deviceId',
             component: 'Select',
-            defaultValue: deviceOptions[0] ? deviceOptions[0]['value'] : '',
+            defaultValue: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '',
             required: true,
             componentProps: {
               options: deviceOptions,
@@ -466,9 +457,10 @@ import { onMounted } from 'vue';
       console.log('[ data ] >', data);
     }
   });
-  onMounted(() => {
+  onMounted(async() => {
     if (!props.columnsType) {
-      historyType.value = deviceOptions[0]['strtype'] || deviceOptions[0]['devicekind']
+      await getDeviceList()
+      if(deviceOptions.value[0]) historyType.value = deviceOptions.value[0]['strtype'] || deviceOptions.value[0]['devicekind']
     }
   })
   defineExpose({ setLoading })

+ 5 - 2
src/views/vent/monitorManager/compressor/index.vue

@@ -1,9 +1,12 @@
 <template>
   <div class="nitrogen-box">
     <customHeader :fieldNames="{ label: 'systemname', value: 'id', options: 'children' }" :options = 'options' @change="getSelectRow" :optionValue="optionValue">智能注氮管控系统</customHeader>
+    <!-- 阿里云 -->
     <!-- <nitrogenHome v-if="activeKey == 'nitrogen_page' && optionValue && optionValue !='1702602347296399361'" :device-id="optionValue" :modal-type="modalType" /> -->
-    <!-- <nitrogenHome1 v-if="activeKey == 'nitrogen_page' && optionValue" :device-id="optionValue" :modal-type="modalType" /> -->
-    <nitrogenHome2 v-if="activeKey == 'nitrogen_page' && optionValue" :device-id="optionValue" :modal-type="modalType" />
+    <!-- 布尔台 -->
+    <nitrogenHome1 v-if="activeKey == 'nitrogen_page' && optionValue" :device-id="optionValue" :modal-type="modalType" />
+    <!-- 保德 -->
+    <!-- <nitrogenHome2 v-if="activeKey == 'nitrogen_page' && optionValue" :device-id="optionValue" :modal-type="modalType" /> -->
     <nitrogenEcharts v-if="activeKey == 'yfj_monitor_echarts'"/>
     <nitrogenHistory ref="historyTable" :device-id="optionValue" :device-type="optionType" v-if="activeKey == 'yfj_history'"/>
     <nitrogenHandleHistory ref="alarmHistoryTable" v-if="activeKey == 'yfj_handler_history'"/>

+ 3 - 1
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -248,8 +248,10 @@
             </template>
           </a-tab-pane>
           <a-tab-pane key="2" tab="历史数据" v-if="!(noHistoryArr()).find((item) => deviceType.startsWith(item))">
-            <div class="tab-item" :sysId="systemID" :columns-type="`${deviceType}`">
+            <div class="tab-item" >
               <HistoryTable ref="historyTable" v-if="activeKey == '2'"
+                :sysId="systemID" 
+                :columns-type="`${deviceType}`"
                 :device-type="deviceType"
                 :device-list-api="getDeviceList.bind(null, { devicekind: deviceType, sysId: systemID, pageSize: 10000 })"
                 designScope="device-history" :scroll="scroll" />

+ 534 - 547
src/views/vent/monitorManager/deviceMonitor/index.vue

@@ -1,657 +1,644 @@
 <template>
-  <div class="scene-box" >
+  <div class="scene-box">
     <DeviceVue ref="DeviceRef" v-if="routerParam !== 'home' && routerParam !== 'timesolution' && routerParam !== 'model3D'" :pageData="pageData" />
-    <Network ref="NetworkRef" v-if="routerParam === 'timesolution'" :pageResult="pageResult" @changePageType="changePageType"/>
+    <Network ref="NetworkRef" v-if="routerParam === 'timesolution'" :pageResult="pageResult" @changePageType="changePageType" />
   </div>
-  <VentModal style="width: 100%; height: 100%; position: absolute"/>
+  <VentModal style="width: 100%; height: 100%; position: absolute" />
 </template>
 
 <script setup lang="ts">
-import { ref, onUnmounted, onMounted, nextTick, watch } from 'vue';
-import DeviceVue from './components/device/index.vue';
-import Network from './components/network/index.vue'
-import { getActions } from '/@/qiankun/state';
-import { useRoute } from 'vue-router';
-import { unmountMicroApps, mountMicroApp } from '/@/qiankun'
-import { onBeforeUnmount } from 'vue';
-import { resetMicroContentWH } from '/@/utils/domUtils'
-import VentModal from '/@/components/vent/micro/ventModal.vue'
-
-const route = useRoute()
-const actions = getActions();
-
-const DeviceRef = ref(null)
-const NetworkRef = ref(null)
-
-const routerParam = ref('home')
-const pageData = ref({})
-const pageResult = ref({})
-
-// actions.setGlobalState({ url: { path: '/micro-vent-3dModal/dashboard/analysis', query: { type, deviceType } } });
-
-const changePageType = (pageType) => {
-  console.log('页面类型', pageType)
-  routerParam.value = pageType
-  actions.setGlobalState({ pageObj: { pageType: pageType } });
-}
-
-watch(() => route.fullPath, (fullPath) => {
-  // const { type, deviceType } = routeVal.query
-  // if (type === 'tunMonitor') {
-  //   pageData.value = { pageType: deviceType }
-  //   actions.setGlobalState({ pageObj: { pageType: deviceType } });
-  // }
-  console.log('fullPath------------------->', fullPath)
-})
-
-onMounted(() => {
-  const { type, deviceType } = route.query
-  if (type === 'network') {
-    routerParam.value = 'network'
-    actions.setGlobalState({ pageObj: { pageType: 'network' } });
-  }else if (type === 'tunMonitor') {
-    if (deviceType) {
-      pageData.value = { pageType: deviceType }
-      actions.setGlobalState({ pageObj: { pageType: deviceType } });
+  import { ref, onUnmounted, onMounted, nextTick, watch } from 'vue';
+  import DeviceVue from './components/device/index.vue';
+  import Network from './components/network/index.vue';
+  import { getActions } from '/@/qiankun/state';
+  import { useRoute } from 'vue-router';
+  import { unmountMicroApps, mountMicroApp } from '/@/qiankun';
+  import { onBeforeUnmount } from 'vue';
+  import { resetMicroContentWH } from '/@/utils/domUtils';
+  import VentModal from '/@/components/vent/micro/ventModal.vue';
+
+  const route = useRoute();
+  const actions = getActions();
+
+  const DeviceRef = ref(null);
+  const NetworkRef = ref(null);
+
+  const routerParam = ref('home');
+  const pageData = ref({});
+  const pageResult = ref({});
+
+  // actions.setGlobalState({ url: { path: '/micro-vent-3dModal/dashboard/analysis', query: { type, deviceType } } });
+
+  const changePageType = (pageType) => {
+    console.log('页面类型', pageType);
+    routerParam.value = pageType;
+    actions.setGlobalState({ pageObj: { pageType: pageType } });
+  };
+
+  watch(
+    () => route.fullPath,
+    (fullPath) => {
+      // const { type, deviceType } = routeVal.query
+      // if (type === 'tunMonitor') {
+      //   pageData.value = { pageType: deviceType }
+      //   actions.setGlobalState({ pageObj: { pageType: deviceType } });
+      // }
+      console.log('fullPath------------------->', fullPath);
     }
-  }else{
-    routerParam.value = 'home'
-    actions.setGlobalState({ pageObj: { pageType: 'home' } });
-  }
-  actions.onGlobalStateChange((newState) => {
-    for (const key in newState) {
-      if (key === 'pageObj') {
-        const pageObj = newState[key]
-        if (pageObj && pageObj.pageType) {
-          routerParam.value = pageObj.pageType
-          pageData.value = pageObj
-          console.log('页面参数类型----------->', pageData.value, routerParam.value, pageObj)
-          if (pageObj.timesolution) {
-            pageResult.value = pageObj.timesolution
+  );
+
+  onMounted(() => {
+    const { type, deviceType } = route.query;
+    if (type === 'network') {
+      routerParam.value = 'network';
+      actions.setGlobalState({ pageObj: { pageType: 'network' } });
+    } else if (type === 'tunMonitor') {
+      if (deviceType) {
+        pageData.value = { pageType: deviceType };
+        actions.setGlobalState({ pageObj: { pageType: deviceType } });
+      }
+    } else {
+      routerParam.value = 'home';
+      actions.setGlobalState({ pageObj: { pageType: 'home' } });
+    }
+    actions.onGlobalStateChange((newState) => {
+      for (const key in newState) {
+        if (key === 'pageObj') {
+          const pageObj = newState[key];
+          if (pageObj && pageObj.pageType) {
+            routerParam.value = pageObj.pageType;
+            pageData.value = pageObj;
+            console.log('页面参数类型----------->', pageData.value, routerParam.value, pageObj);
+            if (pageObj.timesolution) {
+              pageResult.value = pageObj.timesolution;
+            }
           }
         }
       }
-    }
-  })
+    });
+  });
 
-})
+  onBeforeUnmount(async () => {});
+</script>
 
-onBeforeUnmount(async() => {
-})
+<style lang="less" scoped>
+  @import '/@/design/vent/modal.less';
+  @ventSpace: zxm;
 
-</script>
+  .device-header {
+    position: fixed;
+    width: 100%;
+    height: 56px;
+    background: url('/@/assets/images/vent/home/modal-top.png');
+    text-align: center;
+    line-height: 56px;
+    font-size: 28px;
+    color: #ffffffdd;
+    font-weight: 600;
+    z-index: -1;
+  }
 
-<style lang="less" scoped >
-@import '/@/design/vent/modal.less';
-@ventSpace: zxm;
-
-.device-header {
-  position: fixed;
-  width: 100%;
-  height: 56px;
-  background: url('/@/assets/images/vent/home/modal-top.png');
-  text-align: center;
-  line-height: 56px;
-  font-size: 28px;
-  color: #ffffffdd;
-  font-weight: 600;
-  z-index: -1;
-}
-
-.select-node {
-  position: fixed;
-  top: 60px;
-  left: 10px;
-  color: #fff;
-  display: flex;
-  justify-content: center;
-  font-size: 22px;
-
-  .title {
-    margin-left: 10px;
+  .select-node {
+    position: fixed;
+    top: 60px;
+    left: 10px;
+    color: #fff;
+    display: flex;
+    justify-content: center;
+    font-size: 22px;
+
+    .title {
+      margin-left: 10px;
+    }
   }
-}
 
-.expansion-icon {
-  background: url('/@/assets/images/vent/home/tree-icon-bg.png') no-repeat;
-  background-size: contain;
-  position: absolute;
-  left: 190px;
-  top: 25px;
+  .expansion-icon {
+    background: url('/@/assets/images/vent/home/tree-icon-bg.png') no-repeat;
+    background-size: contain;
+    position: absolute;
+    left: 190px;
+    top: 25px;
+
+    &:hover {
+      background: url('/@/assets/images/vent/home/tree-icon-hover-bg.png') no-repeat;
+      background-size: contain;
+    }
+  }
 
-  &:hover {
-    background: url('/@/assets/images/vent/home/tree-icon-hover-bg.png') no-repeat;
+  .device-select {
+    width: 250px;
+    height: 500px;
+    background: url('/@/assets/images/vent/home/tree-bg.png') no-repeat;
+    position: fixed;
+    top: 60px;
+    left: 10px;
     background-size: contain;
+    pointer-events: auto;
+    padding: 20px 10px 30px 10px;
   }
-}
-
-.device-select {
-  width: 250px;
-  height: 500px;
-  background: url('/@/assets/images/vent/home/tree-bg.png') no-repeat;
-  position: fixed;
-  top: 60px;
-  left: 10px;
-  background-size: contain;
-  pointer-events: auto;
-  padding: 20px 10px 30px 10px;
-
-}
-
-.is-expansion-icon {
-  padding: 5px;
-  pointer-events: auto;
-  z-index: 999;
-}
-
-.device-select-show {
-  left: 10px;
-  animation-name: treeShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-
-}
-
-.device-select-hide {
-  left: -250px;
-  animation-name: treeHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-}
-
-.node-select-show {
-  width: 276px;
-  height: 44px;
-  background: url('/@/assets/images/vent/home/tree-expansion-bg.png') no-repeat;
-  left: 10px;
-  animation-name: treeShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-  display: flex;
-  align-items: center;
-  margin-left: 0;
-  justify-content: flex-start;
-  pointer-events: auto;
-
-  &:hover {
-    background: url('/@/assets/images/vent/home/tree-expansion-hover-bg.png') no-repeat;
+
+  .is-expansion-icon {
+    padding: 5px;
+    pointer-events: auto;
+    z-index: 999;
   }
 
-  .put-away-icon {
-    position: relative;
-    display: inline-block;
-    left: 4px;
+  .device-select-show {
+    left: 10px;
+    animation-name: treeShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
   }
-}
-
-.node-select-hide {
-  left: -400px;
-  animation-name: treeHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-}
-
-.device-select-box {
-  width: 208px;
-  height: 450px;
-  overflow-y: auto;
-  color: #fff;
-
-  :deep(.zxm-tree) {
-    background: transparent !important;
-    color: #fff !important;
-
-    .zxm-tree-switcher {
-      background: transparent !important;
-    }
 
-    .zxm-tree-node-content-wrapper.zxm-tree-node-selected {
-      background-color: #00b1c8;
-    }
+  .device-select-hide {
+    left: -250px;
+    animation-name: treeHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-    .zxm-tree-node-content-wrapper:hover {
-      background-color: #00b1c855;
+  .node-select-show {
+    width: 276px;
+    height: 44px;
+    background: url('/@/assets/images/vent/home/tree-expansion-bg.png') no-repeat;
+    left: 10px;
+    animation-name: treeShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+    display: flex;
+    align-items: center;
+    margin-left: 0;
+    justify-content: flex-start;
+    pointer-events: auto;
+
+    &:hover {
+      background: url('/@/assets/images/vent/home/tree-expansion-hover-bg.png') no-repeat;
     }
 
-    input {
-      height: 0px !important;
+    .put-away-icon {
+      position: relative;
+      display: inline-block;
+      left: 4px;
     }
   }
 
-  &::-webkit-scrollbar-track {
-    -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
-    border-radius: 10px;
-    background: #ededed22;
-    height: 100px;
+  .node-select-hide {
+    left: -400px;
+    animation-name: treeHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
   }
 
-  &::-webkit-scrollbar-thumb {
-    -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
-    background: #4288A444;
-  }
-}
-
-.location-icon {
-  width: 46px;
-  height: 178px;
-  position: absolute;
-  top: 60px;
-  // right: 0;
-  background: url('/@/assets/images/vent/home/location-bg.png') no-repeat;
-  background-size: contain;
-  writing-mode: vertical-lr;
-  line-height: 46px;
-  color: #fff;
-  padding-top: 10px;
-  pointer-events: auto;
-  cursor: pointer;
-
-  &:hover {
-    background: url('/@/assets/images/vent/home/location-hover-bg.png') no-repeat;
-  }
+  .device-select-box {
+    width: 208px;
+    height: 450px;
+    overflow-y: auto;
+    color: #fff;
 
-  .location-text {
-    padding-top: 20px;
-    letter-spacing: 3px;
-    font-size: 16px;
-  }
-}
+    :deep(.zxm-tree) {
+      background: transparent !important;
+      color: #fff !important;
 
-.location-select {
-  position: fixed;
-  top: 60px;
-  // right: 240px;
-  pointer-events: auto;
+      .zxm-tree-switcher {
+        background: transparent !important;
+      }
 
-  .location-select-box {
-    width: 100%;
-    height: 100%;
-    position: relative;
+      .zxm-tree-node-content-wrapper.zxm-tree-node-selected {
+        background-color: #00b1c8;
+      }
 
-    &::before {
-      content: "";
-      position: absolute;
-      width: 230px;
-      height: 500px;
-      top: 0;
-      left: 0;
-      background: url('/@/assets/images/vent/home/tree-bg.png') no-repeat;
-      background-size: contain;
-      transform: rotateY(180deg);
-      z-index: -1;
-      // &:hover {
-      //   background: url('/@/assets/images/vent/home/tree-icon-hover-bg.png') no-repeat;
-      //   background-size: contain;
-      // }
+      .zxm-tree-node-content-wrapper:hover {
+        background-color: #00b1c855;
+      }
+
+      input {
+        height: 0px !important;
+      }
     }
 
-    .location-top-title {
-      color: #fff;
-      position: absolute;
-      width: 225px;
-      height: 68px;
-      background: url('/@/assets/images/vent/home/turn-location-top-bg.png') no-repeat;
-      background-size: contain;
-      top: 5px;
-      left: 5px;
-      display: flex;
-      flex-direction: row;
-      justify-content: space-between;
-      align-items: flex-end;
+    &::-webkit-scrollbar-track {
+      -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+      border-radius: 10px;
+      background: #ededed22;
+      height: 100px;
+    }
 
-      .title {
-        font-size: 18px;
-        position: relative;
-        top: -14px;
-        right: 15px;
-      }
+    &::-webkit-scrollbar-thumb {
+      -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+      background: #4288a444;
     }
+  }
 
-    .location-expansion-icon {
-      background: url('/@/assets/images/vent/home/tree-icon-cover-bg.png') no-repeat;
-      background-size: contain;
+  .location-icon {
+    width: 46px;
+    height: 178px;
+    position: absolute;
+    top: 60px;
+    // right: 0;
+    background: url('/@/assets/images/vent/home/location-bg.png') no-repeat;
+    background-size: contain;
+    writing-mode: vertical-lr;
+    line-height: 46px;
+    color: #fff;
+    padding-top: 10px;
+    pointer-events: auto;
+    cursor: pointer;
+
+    &:hover {
+      background: url('/@/assets/images/vent/home/location-hover-bg.png') no-repeat;
+    }
+
+    .location-text {
+      padding-top: 20px;
+      letter-spacing: 3px;
+      font-size: 16px;
+    }
+  }
+
+  .location-select {
+    position: fixed;
+    top: 60px;
+    // right: 240px;
+    pointer-events: auto;
+
+    .location-select-box {
+      width: 100%;
+      height: 100%;
       position: relative;
-      left: 10px;
-      top: -15px;
-      padding: 5px;
 
-      &:hover {
-        background: url('/@/assets/images/vent/home/tree-icon-cover-hover-bg.png') no-repeat;
+      &::before {
+        content: '';
+        position: absolute;
+        width: 230px;
+        height: 500px;
+        top: 0;
+        left: 0;
+        background: url('/@/assets/images/vent/home/tree-bg.png') no-repeat;
         background-size: contain;
+        transform: rotateY(180deg);
+        z-index: -1;
+        // &:hover {
+        //   background: url('/@/assets/images/vent/home/tree-icon-hover-bg.png') no-repeat;
+        //   background-size: contain;
+        // }
       }
-    }
-  }
 
-  .location-container {
-    width: 200px;
-    height: 390px;
-    position: absolute;
-    display: flex;
-    flex-direction: column;
-    top: 80px;
-    left: 18px;
-    overflow-y: auto;
+      .location-top-title {
+        color: #fff;
+        position: absolute;
+        width: 225px;
+        height: 68px;
+        background: url('/@/assets/images/vent/home/turn-location-top-bg.png') no-repeat;
+        background-size: contain;
+        top: 5px;
+        left: 5px;
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: flex-end;
+
+        .title {
+          font-size: 18px;
+          position: relative;
+          top: -14px;
+          right: 15px;
+        }
+      }
 
-    .location-item {
-      color: #fff;
-      line-height: 30px;
-      display: flex;
-      justify-content: space-between;
-      background-image: linear-gradient(to left, #39f5ff05, #39f5ff10);
-      margin: 3px 0;
-
-      .item-title {
-        width: 80px;
-        text-align: right;
-        color: #87f1ff;
+      .location-expansion-icon {
+        background: url('/@/assets/images/vent/home/tree-icon-cover-bg.png') no-repeat;
+        background-size: contain;
+        position: relative;
+        left: 10px;
+        top: -15px;
+        padding: 5px;
+
+        &:hover {
+          background: url('/@/assets/images/vent/home/tree-icon-cover-hover-bg.png') no-repeat;
+          background-size: contain;
+        }
       }
     }
 
-    .location-bottom-btn {
-      width: 100%;
-      color: #fff;
+    .location-container {
+      width: 200px;
+      height: 390px;
+      position: absolute;
       display: flex;
-      justify-content: flex-end;
-      margin-top: 20px;
+      flex-direction: column;
+      top: 80px;
+      left: 18px;
+      overflow-y: auto;
+
+      .location-item {
+        color: #fff;
+        line-height: 30px;
+        display: flex;
+        justify-content: space-between;
+        background-image: linear-gradient(to left, #39f5ff05, #39f5ff10);
+        margin: 3px 0;
+
+        .item-title {
+          width: 80px;
+          text-align: right;
+          color: #87f1ff;
+        }
+      }
 
-      span {
-        display: inline-block;
+      .location-bottom-btn {
         width: 100%;
-        background: #00709955;
-        border-radius: 3px;
-        border: 1px solid rgba(174, 243, 255, 0.3);
-        text-align: center;
-        padding: 2px 0;
-        cursor: pointer;
-
-        &:hover {
-          background: #00557422;
+        color: #fff;
+        display: flex;
+        justify-content: flex-end;
+        margin-top: 20px;
+
+        span {
+          display: inline-block;
+          width: 100%;
+          background: #00709955;
+          border-radius: 3px;
+          border: 1px solid rgba(174, 243, 255, 0.3);
+          text-align: center;
+          padding: 2px 0;
+          cursor: pointer;
+
+          &:hover {
+            background: #00557422;
+          }
         }
       }
     }
   }
-}
-
-.location-select-show {
-  right: 240px;
-  animation-name: locationShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-}
-
-.location-select-hide {
-  right: -2px;
-  animation-name: locationHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-}
-
-.location-btn-show {
-  right: -0px;
-  animation-name: locationBtnShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-}
-
-.location-btn-hide {
-  right: -240px;
-  animation-name: locationBtnHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) .5s;
-}
-
-.bottom-tabs-box {
-
-  position: relative;
-
-  .to-small {
-    width: 60px;
-    height: 60px;
-    background: url('/@/assets/images/vent/home/tosmall.png') no-repeat center;
-    background-size: auto;
-    position: absolute;
-    top: -65px;
-    right: 36px;
-    border-radius: 10px;
-    padding: 8px;
-    backdrop-filter: blur(10px);
-    background-color: rgba(45, 86, 137, 0.418);
 
-    &:hover {
-      background-color: rgba(79, 104, 134, 0.418);
-    }
+  .location-select-show {
+    right: 240px;
+    animation-name: locationShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
   }
 
-  .device-button-group {
-    position: absolute;
-    top: -30px;
-    display: flex;
-    width: 100%;
+  .location-select-hide {
+    right: -2px;
+    animation-name: locationHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-    .device-button {
-      height: 26px;
-      padding: 0 20px;
-      background: linear-gradient(45deg, #04e6fb55, #0c5cab55);
-      clip-path: polygon(10px 0,
-          0 50%,
-          10px 100%,
-          100% 100%,
-          calc(100% - 10px) 50%,
-          100% 0);
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      color: #FFF;
-      position: relative;
-      cursor: pointer;
+  .location-btn-show {
+    right: -0px;
+    animation-name: locationBtnShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-      &:nth-child(1) {
-        left: calc(-6px * 1);
-      }
+  .location-btn-hide {
+    right: -240px;
+    animation-name: locationBtnHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-      &:nth-child(2) {
-        left: calc(-6px * 2);
-      }
+  .bottom-tabs-box {
+    position: relative;
 
-      &:nth-child(3) {
-        left: calc(-6px * 3);
-      }
+    .to-small {
+      width: 60px;
+      height: 60px;
+      background: url('/@/assets/images/vent/home/tosmall.png') no-repeat center;
+      background-size: auto;
+      position: absolute;
+      top: -65px;
+      right: 36px;
+      border-radius: 10px;
+      padding: 8px;
+      backdrop-filter: blur(10px);
+      background-color: rgba(45, 86, 137, 0.418);
 
-      &:nth-child(4) {
-        left: calc(-6px * 4);
+      &:hover {
+        background-color: rgba(79, 104, 134, 0.418);
       }
+    }
 
-      &:nth-child(5) {
-        left: calc(-6px * 5);
-      }
+    .device-button-group {
+      position: absolute;
+      top: -30px;
+      display: flex;
+      width: 100%;
 
-      &:nth-child(6) {
-        left: calc(-6px * 6);
-      }
+      .device-button {
+        height: 26px;
+        padding: 0 20px;
+        background: linear-gradient(45deg, #04e6fb55, #0c5cab55);
+        clip-path: polygon(10px 0, 0 50%, 10px 100%, 100% 100%, calc(100% - 10px) 50%, 100% 0);
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        color: #fff;
+        position: relative;
+        cursor: pointer;
 
-      &:nth-child(7) {
-        left: calc(-6px * 7);
-      }
+        &:nth-child(1) {
+          left: calc(-6px * 1);
+        }
 
-      &:nth-child(8) {
-        left: calc(-6px * 8);
-      }
+        &:nth-child(2) {
+          left: calc(-6px * 2);
+        }
 
-      &:nth-child(9) {
-        left: calc(-6px * 9);
-      }
+        &:nth-child(3) {
+          left: calc(-6px * 3);
+        }
 
-      &:nth-child(10) {
-        left: calc(-6px * 10);
-      }
+        &:nth-child(4) {
+          left: calc(-6px * 4);
+        }
 
-      &:nth-child(11) {
-        left: calc(-6px * 11);
-      }
+        &:nth-child(5) {
+          left: calc(-6px * 5);
+        }
 
-      &:nth-child(12) {
-        left: calc(-6px * 12);
-      }
+        &:nth-child(6) {
+          left: calc(-6px * 6);
+        }
 
-      &:nth-child(13) {
-        left: calc(-6px * 13);
-      }
+        &:nth-child(7) {
+          left: calc(-6px * 7);
+        }
 
-      &:nth-child(14) {
-        left: calc(-6px * 14);
-      }
+        &:nth-child(8) {
+          left: calc(-6px * 8);
+        }
 
-      &:nth-child(15) {
-        left: calc(-6px * 15);
-      }
+        &:nth-child(9) {
+          left: calc(-6px * 9);
+        }
+
+        &:nth-child(10) {
+          left: calc(-6px * 10);
+        }
 
-      &:first-child {
-        clip-path: polygon(0 0,
-            10px 50%,
-            0 100%,
-            100% 100%,
-            calc(100% - 10px) 50%,
-            100% 0);
+        &:nth-child(11) {
+          left: calc(-6px * 11);
+        }
+
+        &:nth-child(12) {
+          left: calc(-6px * 12);
+        }
+
+        &:nth-child(13) {
+          left: calc(-6px * 13);
+        }
+
+        &:nth-child(14) {
+          left: calc(-6px * 14);
+        }
+
+        &:nth-child(15) {
+          left: calc(-6px * 15);
+        }
+
+        &:first-child {
+          clip-path: polygon(0 0, 10px 50%, 0 100%, 100% 100%, calc(100% - 10px) 50%, 100% 0);
+        }
       }
 
+      .device-active {
+        background: linear-gradient(45deg, #04e6fb, #0c5cab);
+
+        &::before {
+          border-color: #0efcff;
+          box-shadow: 1px 1px 3px 1px #0efcff inset;
+        }
+      }
     }
 
-    .device-active {
-      background: linear-gradient(45deg, #04e6fb, #0c5cab);
+    .enter-detail {
+      color: #fff;
+      cursor: pointer;
+      position: absolute;
+      right: 120px;
+      top: -6px;
+      padding: 5px;
+      border-radius: 5px;
+      margin-left: 8px;
+      margin-right: 8px;
+      width: auto;
+      height: 33px !important;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      color: #fff;
+      padding: 5px 15px 5px 15px;
+      cursor: pointer;
+
+      &:hover {
+        background: linear-gradient(#2cd1ff55, #1eb0ff55);
+      }
 
       &::before {
-        border-color: #0efcff;
-        box-shadow: 1px 1px 3px 1px #0efcff inset;
+        width: calc(100% - 6px);
+        height: 27px;
+        content: '';
+        position: absolute;
+        top: 3px;
+        right: 0;
+        left: 3px;
+        bottom: 0;
+        z-index: -1;
+        border-radius: inherit;
+        /*important*/
+        background: linear-gradient(#1fa6cb, #127cb5);
       }
     }
   }
 
-  .enter-detail {
-    color: #fff;
-    cursor: pointer;
-    position: absolute;
-    right: 120px;
-    top: -6px;
-    padding: 5px;
-    border-radius: 5px;
-    margin-left: 8px;
-    margin-right: 8px;
-    width: auto;
-    height: 33px !important;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    color: #fff;
-    padding: 5px 15px 5px 15px;
-    cursor: pointer;
-
-    &:hover {
-      background: linear-gradient(#2cd1ff55, #1eb0ff55);
+  @keyframes treeShow {
+    0% {
+      left: -400px;
+      opacity: 0;
     }
 
-    &::before {
-      width: calc(100% - 6px);
-      height: 27px;
-      content: '';
-      position: absolute;
-      top: 3px;
-      right: 0;
-      left: 3px;
-      bottom: 0;
-      z-index: -1;
-      border-radius: inherit;
-      /*important*/
-      background: linear-gradient(#1fa6cb, #127cb5);
+    100% {
+      left: 10px;
+      opacity: 1;
     }
   }
-}
 
-@keyframes treeShow {
-  0% {
-    left: -400px;
-    opacity: 0;
-  }
+  @keyframes treeHide {
+    0% {
+      left: 10px;
+      opacity: 1;
+    }
 
-  100% {
-    left: 10px;
-    opacity: 1;
+    100% {
+      left: -400px;
+      opacity: 0;
+    }
   }
-}
 
-@keyframes treeHide {
-  0% {
-    left: 10px;
-    opacity: 1;
-  }
+  @keyframes locationShow {
+    0% {
+      right: 0px;
+      opacity: 0;
+    }
 
-  100% {
-    left: -400px;
-    opacity: 0;
+    100% {
+      right: 240px;
+      opacity: 1;
+    }
   }
-}
 
-@keyframes locationShow {
-  0% {
-    right: 0px;
-    opacity: 0;
-  }
+  @keyframes locationHide {
+    0% {
+      right: 240px;
+      opacity: 1;
+    }
 
-  100% {
-    right: 240px;
-    opacity: 1;
+    100% {
+      right: 0;
+      opacity: 0;
+    }
   }
-}
 
-@keyframes locationHide {
-  0% {
-    right: 240px;
-    opacity: 1;
-  }
+  @keyframes locationBtnShow {
+    0% {
+      right: -240px;
+      opacity: 0;
+    }
 
-  100% {
-    right: 0;
-    opacity: 0;
+    100% {
+      right: -2px;
+      opacity: 1;
+    }
   }
-}
 
-@keyframes locationBtnShow {
-  0% {
-    right: -240px;
-    opacity: 0;
-  }
+  @keyframes locationBtnHide {
+    0% {
+      right: -2px;
+      opacity: 1;
+    }
 
-  100% {
-    right: -2px;
-    opacity: 1;
+    100% {
+      right: -240px;
+      opacity: 0;
+    }
   }
-}
 
-@keyframes locationBtnHide {
-  0% {
-    right: -2px;
-    opacity: 1;
+  :deep(.@{ventSpace}-tabs-tabpane-active) {
+    // overflow: auto;
+    height: 100%;
   }
 
-  100% {
-    right: -240px;
-    opacity: 0;
+  :deep(.zxm-select-dropdown) {
+    left: 0 !important;
+    color: #000000 !important;
   }
-}
-
-:deep(.@{ventSpace}-tabs-tabpane-active) {
-  // overflow: auto;
-  height: 100%;
-}
-
-:deep(.zxm-select-dropdown) {
-  left: 0 !important;
-  color: #000000 !important;
-}</style>
+</style>

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

@@ -44,7 +44,7 @@
   <div class="scene-box">
     <div class="top-box" v-if="!loading">
       <div class="top-center row">
-        <div class="vent-flex-row" id="fanLocalSelectDom" v-if="getDictItemsByCode('fanlocaltype')">
+        <div class="vent-flex-row" id="fanLocalSelectDom" v-if="getDictItemsByCode('fanlocaltype') || !globalConfig?.simulatedPassword">
           <span style="color: #00f5fe; margin-left: 5px">风机类型:</span>
           <JDictSelectTag
             v-model:value="devicekide"
@@ -462,6 +462,8 @@
         value: '需风量',
         permission: 'fanLocal:control',
       },
+    ],
+    rightBtnArr: [
       {
         key: 'diameter',
         value: '风筒直径',
@@ -472,13 +474,11 @@
         value: '风筒长度',
         permission: 'fanLocal:control',
       },
-    ],
-    rightBtnArr: [
-      {
-        key: 'frequency',
-        value: '调频',
-        permission: 'fanLocal:control',
-      },
+      // {
+      //   key: 'frequency',
+      //   value: '调频',
+      //   permission: 'fanLocal:control',
+      // },
       {
         key: 'windPowerLimit',
         value: '风电闭锁限值',
@@ -501,11 +501,11 @@
         value: '漏风率报警',
         permission: 'fanLocal:control',
       },
-      {
-        key: 'gasAlarm',
-        value: '瓦斯报警',
-        permission: 'fanLocal:control',
-      },
+      // {
+      //   key: 'gasAlarm',
+      //   value: '瓦斯报警',
+      //   permission: 'fanLocal:control',
+      // },
     ],
   });
   const sensorList = ref<any[]>([
@@ -774,7 +774,7 @@
       deviceid: selectData.deviceID,
       devicetype: selectData.deviceType,
       paramcode: '',
-      password: passWord.value,
+      password: passWord.value || globalConfig?.simulatedPassword,
       value: null,
     };
     if (handType === 'startSmoke') {

+ 1 - 1
src/views/vent/monitorManager/gateMonitor/index.vue

@@ -449,7 +449,7 @@
       devicetype: selectData.deviceType,
       paramcode: '',
       value: null,
-      password: passWord,
+      password: passWord || globalConfig?.simulatedPassword,
       masterComputer: selectData.masterComputer,
     };
     let handler = () => {};

+ 4 - 5
src/views/vent/monitorManager/mainFanMonitor/index.vue

@@ -108,7 +108,7 @@
       selectData.supplyAirAddr || selectData.strinstallpos || selectData.stationname
     }}</div>
     <div class="top-box control-group" v-if="globalConfig?.simulatedPassword">
-      <div class="button-box" v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index">{{ item.value }}</div>
+      <div class="button-box" v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index" @click="showModal(item)">{{ item.value }}</div>
       <!-- <div class="button-box" v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index" @click="showModal(item)">{{ item.value }}</div> -->
     </div>
     <div class="data-show-box">
@@ -302,7 +302,7 @@
         <ExclamationCircleFilled style="color: #ffb700; font-size: 30px" />
         <div class="warning-text">您是否要进行{{ modalTitle }}操作?</div>
       </div>
-      <div class="vent-flex-row input-box">
+      <div class="vent-flex-row input-box" v-if="!globalConfig?.simulatedPassword">
         <div class="label">操作密码:</div>
         <a-input size="small" type="password" v-model:value="passWord" />
       </div>
@@ -611,7 +611,7 @@
           deviceid: selectData.deviceID,
           devicetype: selectData.deviceType,
           paramcode: paramcode,
-          password: passWord.value,
+          password: passWord.value || globalConfig?.simulatedPassword,
           testvalue: value,
         };
       } else {
@@ -619,7 +619,7 @@
           deviceid: selectData.deviceID,
           devicetype: selectData.deviceType,
           paramcode: paramcode,
-          password: passWord.value,
+          password: passWord.value || globalConfig?.simulatedPassword,
           value: value,
         };
       }
@@ -653,7 +653,6 @@
       openModal(true, {});
       return;
     }
-
     modalType.value = obj.key;
     modalTitle.value = obj.value;
     modalIsShow.value = true;

+ 4 - 1
src/views/vent/monitorManager/nitrogen/index.vue

@@ -4,7 +4,9 @@
     <!-- 锦界 -->
     <!-- <nitrogenHome v-if="btnActive == 'nitrogen_page'" /> -->
     <!-- 布尔台 -->
-    <nitrogenHome1 v-if="btnActive == 'nitrogen_page'" />
+    <!-- <nitrogenHome1 v-if="btnActive == 'nitrogen_page'" /> -->
+    <!-- 窑街三矿 -->
+    <nitrogenHomeYJ v-if="btnActive == 'nitrogen_page'" />
     <nitrogenEcharts v-if="btnActive == 'yfj_monitor_echarts'" />
     <nitrogenHistory v-if="btnActive == 'yfj_history'" />
     <nitrogenHandleHistory v-if="btnActive == 'yfj_handler_history'" />
@@ -16,6 +18,7 @@
   import { ref } from 'vue';
   import nitrogenHome from './components/nitrogenHome.vue';
   import nitrogenHome1 from './components/nitrogenHome1.vue';
+  import nitrogenHomeYJ from './components/nitrogenHomeYJ.vue';
   import nitrogenEcharts from './components/nitrogenEcharts.vue';
   import nitrogenHistory from './components/nitrogenHistory.vue';
   import nitrogenHandleHistory from './components/nitrogenHandleHistory.vue';

+ 23 - 23
src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceAlarmHistory.vue

@@ -1,35 +1,35 @@
 <template>
   <div class="alarm-history">
-    <AlarmHistoryTable columns-type="alarm" device-type="sys_surface_juejin"
+    <AlarmHistoryTable
+      columns-type="alarm"
+      device-type="sys_surface_juejin"
       :device-list-api="workFaceDeviceList.bind(null, { id: deviceId })"
       :list="list"
       :sys-id="deviceId"
-      designScope="alarm-history" />
+      designScope="alarm-history"
+    />
   </div>
 </template>
 <script setup lang="ts">
-import AlarmHistoryTable from '../../comment/WorkFaceAlarmHistoryTable.vue';
-import { workFaceDeviceList } from '../../../deviceManager/comment/warningTabel/warning.api'
-import { defHttp } from '/@/utils/http/axios';
-
-const props = defineProps({
-  deviceType: {
-    type: String,
-    required: true,
-  },
-  deviceId: {
-    type: String,
-    required: true,
-  }
-})
-
-const list = (params) => defHttp.get({ url: '/safety/managesysAutoLog/list', params })
+  import AlarmHistoryTable from '../../comment/WorkFaceAlarmHistoryTable.vue';
+  import { workFaceDeviceList } from '../../../deviceManager/comment/warningTabel/warning.api';
+  import { defHttp } from '/@/utils/http/axios';
 
+  const props = defineProps({
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    deviceId: {
+      type: String,
+      required: true,
+    },
+  });
 
+  const list = (params) => defHttp.get({ url: '/safety/managesysAutoLog/list', params });
 </script>
 <style lang="less" scoped>
-.alarm-history {
-  pointer-events: auto;
-  margin-top: 60px !important;
-}
-</style>
+  .alarm-history {
+    pointer-events: auto;
+  }
+</style>

+ 24 - 20
src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceHistory.vue

@@ -1,28 +1,32 @@
 <template>
   <div class="history-box">
-    <HistoryTable :columns-type="`${deviceType}`" :device-type="deviceType" :sysId="deviceId"
-      :device-list-api="getTableList.bind(null, { strtype: deviceType, sysId: deviceId })" designScope="pressurefan_history" :scroll="{ y: 650 }"/>
+    <HistoryTable
+      :columns-type="`${deviceType}`"
+      :device-type="deviceType"
+      :sysId="deviceId"
+      designScope="pressurefan_history"
+      :scroll="{ y: 650 }"
+    />
   </div>
 </template>
 <script setup lang="ts">
-import { ref, defineProps } from 'vue'
-import HistoryTable from '../../comment/HistoryTable.vue';
-import { getTableList } from '../tunFace.api'
-
-const props = defineProps({
-  deviceType: {
-    type: String,
-    required: true,
-  },
-  deviceId: {
-    type: String,
-    required: true,
-  }
-})
+  import { ref, defineProps } from 'vue';
+  import HistoryTable from '../../comment/HistoryTable.vue';
+  import { getTableList } from '../tunFace.api';
 
+  const props = defineProps({
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    deviceId: {
+      type: String,
+      required: true,
+    },
+  });
 </script>
 <style lang="less" scoped>
-.history-box {
-  pointer-events: auto;
-}
-</style>
+  .history-box {
+    pointer-events: auto;
+  }
+</style>

+ 1 - 1
src/views/vent/monitorManager/tunFaceMonitor/index.vue

@@ -234,6 +234,7 @@ onUnmounted(() => {
 
 .history-group{
   padding: 0 20px;
+  margin-top: 90px;
   .history-container{
     position: relative;
     background: #6195af1a;
@@ -250,7 +251,6 @@ onUnmounted(() => {
   display: flex;
   pointer-events: auto;
   position: relative;
-  margin-top: 90px;
   &::after{
     position:absolute;
     content: '';

+ 3 - 1
src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts

@@ -168,9 +168,10 @@ class singleWindow {
 
   /* 提取风门序列帧,初始化前后门动画 */
   initAnimation() {
+    debugger;
     const meshArr01: THREE.Object3D[] = [];
     this.group.getObjectByName('ddFc')?.children.forEach((obj) => {
-      if (obj.type === 'Mesh' && obj.name && obj.name.startsWith('shanye')) {
+      if (obj.type === 'Mesh' && ((obj.name && obj.name.startsWith('shanye')) || obj.name.startsWith('FCshanye'))) {
         obj.rotateOnAxis(new THREE.Vector3(0, 1, 0), 0);
         meshArr01.push(obj);
       }
@@ -179,6 +180,7 @@ class singleWindow {
   }
 
   play(rotationParam, flag) {
+    debugger;
     if (this.windowsActionArr.frontWindow.length <= 0) {
       return;
     }

+ 1 - 1
src/views/vent/monitorManager/windowMonitor/index.vue

@@ -366,7 +366,7 @@
       deviceid: selectData.deviceID,
       devicetype: selectData.deviceType,
       paramcode: handlerState == 1 ? 'frontSetValue' : 'rearSetValue',
-      password: passWord,
+      password: passWord || globalConfig?.simulatedPassword,
       value: windowAngle.value,
     };
     deviceControlApi(data)

+ 2 - 0
src/views/vent/monitorManager/windrectMonitor/duishe.threejs.ts

@@ -27,6 +27,7 @@ class dsWindRect {
     this.deviceType = deviceType;
     const dsgdObj = this.group.getObjectByName('dsgd');
     const dsmoveObj = this.group.getObjectByName('dsmove');
+
     if (deviceType == 'move') {
       if (dsgdObj) dsgdObj.visible = false;
       if (dsmoveObj) dsmoveObj.visible = true;
@@ -386,6 +387,7 @@ class dsWindRect {
         this.setModalPosition();
         this.initAnimation();
         this.addLight();
+        if (this.deviceType) this.setModelType(this.deviceType);
         resolve(null);
       });
     });

+ 1 - 1
src/views/vent/monitorManager/windrectMonitor/duisheFixed.threejs.ts

@@ -140,7 +140,7 @@ class fixedWindRect {
     });
   }
   initAnimation() {
-    let line = this.group?.getObjectByName('line_');
+    const line = this.group?.getObjectByName('line_');
 
     if (line) {
       line.material.side = THREE.DoubleSide;

+ 8 - 3
src/views/vent/monitorManager/windrectMonitor/index.vue

@@ -6,6 +6,9 @@
   <div class="scene-box">
     <div class="top-box">
       <div class="top-center row">
+        <div v-if="globalConfig?.simulatedPassword" class="button-box" @click="startRun()">启动测风</div>
+        <!-- <div v-if="globalConfig?.simulatedPassword" class="button-box" @click="testPlay('')">模拟动画</div> -->
+        <!-- <div class="button-box" @click="testPlay('')">模拟动画</div> -->
         <!-- <div class="button-box" @click="start(0)">复位</div> -->
         <!-- <div class="button-box" @click="testPlay('')">模拟动画</div>
         <div class="button-box" @click="clearPlay()">自动清洁</div>
@@ -600,6 +603,7 @@
   }
   // 切换检测数据
   async function getSelectRow(selectRow, index) {
+    debugger;
     if (selectRow) {
       loading.value = true;
       selectRowIndex.value = index;
@@ -667,13 +671,14 @@
   }
 
   function controlDevice(passWord, type) {
+    debugger;
     if (type == 'sing') {
-      testWind({ ids: [selectData.deviceID], maxnum: runNum.value, password: passWord }).then((res) => {
+      testWind({ ids: [selectData.deviceID], maxnum: runNum.value, password: passWord || globalConfig?.simulatedPassword }).then((res) => {
         message.success('开始测风。。。');
       });
     } else if (type == 'multiple') {
       const ids = toRaw(modalTable.value.selectedRowKeys);
-      testWind({ ids: ids, maxnum: runNum.value, password: passWord }).then((res) => {
+      testWind({ ids: ids, maxnum: runNum.value, password: passWord || globalConfig?.simulatedPassword }).then((res) => {
         message.success(res);
         setModalProps({ visible: false });
         modalTable.value.clearSelectedRowKeys();
@@ -684,7 +689,7 @@
         devicetype: selectData.deviceType,
         paramcode: 'autoClear',
         value: null,
-        password: passWord,
+        password: passWord || globalConfig?.simulatedPassword,
         masterComputer: selectData.masterComputer,
       };
       deviceControlApi(data).then((res) => {

+ 4 - 3
src/views/vent/monitorManager/windrectMonitor/windrect.threejs.ts

@@ -210,6 +210,7 @@ export const setModelType = (type) => {
         );
       }, 300);
     } else if (windRectType.startsWith('dsWindRect') && dsWindRectObj && dsWindRectObj.group) {
+      debugger;
       const type = windRectType.split('_')[1];
       // dsWindRectObj.isRun = false;
       model.startAnimation = dsWindRectObj.render.bind(dsWindRectObj);
@@ -366,9 +367,6 @@ export const mountedThree = (playerDom) => {
     zdWindRectObj = new zdWindRect(model);
     zdWindRectObj.mountedThree();
 
-    dsWindRectObj = new dsWindRect(model);
-    dsWindRectObj.mountedThree();
-
     lmWindRectSideObj = new lmWindRectSide(model);
     lmWindRectSideObj.mountedThree();
 
@@ -378,6 +376,9 @@ export const mountedThree = (playerDom) => {
     fixedWindRectObj = new fixedWindRect(model);
     fixedWindRectObj.mountedThree(playerDom);
 
+    dsWindRectObj = new dsWindRect(model);
+    dsWindRectObj.mountedThree();
+
     model.animate();
     startAnimation();
   });

+ 23 - 23
src/views/vent/monitorManager/workFaceMonitor/components/workFaceAlarmHistory.vue

@@ -1,35 +1,35 @@
 <template>
   <div class="alarm-history">
-    <AlarmHistoryTable columns-type="alarm" device-type="sys_surface_caimei"
+    <AlarmHistoryTable
+      columns-type="alarm"
+      device-type="sys_surface_caimei"
       :device-list-api="workFaceDeviceList.bind(null, { id: deviceId })"
       :list="list"
       :sys-id="deviceId"
-      designScope="alarm-history" />
+      designScope="alarm-history"
+    />
   </div>
 </template>
 <script setup lang="ts">
-import AlarmHistoryTable from '../../comment/WorkFaceAlarmHistoryTable.vue';
-import { workFaceDeviceList } from '../../../deviceManager/comment/warningTabel/warning.api'
-import { defHttp } from '/@/utils/http/axios';
-
-const props = defineProps({
-  deviceType: {
-    type: String,
-    required: true,
-  },
-  deviceId: {
-    type: String,
-    required: true,
-  }
-})
-
-const list = (params) => defHttp.get({ url: '/safety/managesysAutoLog/list', params })
+  import AlarmHistoryTable from '../../comment/WorkFaceAlarmHistoryTable.vue';
+  import { workFaceDeviceList } from '../../../deviceManager/comment/warningTabel/warning.api';
+  import { defHttp } from '/@/utils/http/axios';
 
+  const props = defineProps({
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    deviceId: {
+      type: String,
+      required: true,
+    },
+  });
 
+  const list = (params) => defHttp.get({ url: '/safety/managesysAutoLog/list', params });
 </script>
 <style lang="less" scoped>
-.alarm-history {
-  pointer-events: auto;
-  margin-top: 60px !important;
-}
-</style>
+  .alarm-history {
+    pointer-events: auto;
+  }
+</style>

+ 0 - 1
src/views/vent/monitorManager/workFaceMonitor/components/workFaceHistory.vue

@@ -4,7 +4,6 @@
       :columns-type="`${deviceType}`"
       :device-type="deviceType"
       :sysId="deviceId"
-      :device-list-api="getDeviceList.bind(null, { devicekind: deviceType, sysId: deviceId, pageSize: 10000 })"
       designScope="pressurefan_history"
       :scroll="{ y: 650 }"
     />

+ 1 - 2
src/views/vent/monitorManager/workFaceMonitor/index.vue

@@ -256,11 +256,11 @@ onUnmounted(() => {
 
 .history-group{
   padding: 0 20px;
+  margin-top: 90px;
   .history-container{
     position: relative;
     background: #6195af1a;
     width: calc(100% + 10px);
-    top: 0px;
     left: -10px;
     border: 1px solid #00fffd22;
     padding: 10px 0;
@@ -272,7 +272,6 @@ onUnmounted(() => {
   display: flex;
   pointer-events: auto;
   position: relative;
-  margin-top: 90px;
   &::after{
     position:absolute;
     content: '';