Browse Source

压风管控修改

hongrunxia 1 year ago
parent
commit
9a9847d9b8
44 changed files with 819 additions and 1532 deletions
  1. 2 2
      build/vite/plugin/index.ts
  2. 3 3
      package.json
  3. 167 144
      pnpm-lock.yaml
  4. 1 1
      public/js/config.js
  5. 4 4
      src/App.vue
  6. 3 4
      src/components/chart/BarAndLine.vue
  7. 2 2
      src/design/ant/index.less
  8. 21 4
      src/design/entry.css
  9. 3 0
      src/hooks/system/useCamera.ts
  10. 0 2
      src/hooks/web/useSso.ts
  11. 1 1
      src/locales/lang/en.ts
  12. 0 2
      src/router/guard/permissionGuard.ts
  13. 3 3
      src/router/helper/routeHelper.ts
  14. 1 1
      src/router/index.ts
  15. 2 2
      src/utils/env.ts
  16. 2 2
      src/utils/http/axios/index.ts
  17. 2 2
      src/utils/monorepo/dynamicRouter.ts
  18. 35 35
      src/views/dashboard/Analysis/index.vue
  19. 12 14
      src/views/super/drag/page/useExportImage.ts
  20. 39 39
      src/views/super/drag/page/view.vue
  21. 1 1
      src/views/sys/forget-password/step3.vue
  22. 0 1
      src/views/vent/home/clique/components/icon-light.vue
  23. 0 2
      src/views/vent/home/clique/index.vue
  24. 5 3
      src/views/vent/home/colliery/components/wind-device.vue
  25. 15 9
      src/views/vent/home/colliery/index.vue
  26. 6 4
      src/views/vent/monitorManager/alarmMonitor/index.vue
  27. 0 1
      src/views/vent/monitorManager/comment/HistoryTable.vue
  28. 41 3
      src/views/vent/monitorManager/fanLocalMonitor/index.vue
  29. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.three.ts
  30. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.xr.ts
  31. 66 200
      src/views/vent/monitorManager/nitrogen/components/nitrogenHome.vue
  32. 130 442
      src/views/vent/monitorManager/nitrogen/components/nitrogenHome1.vue
  33. 116 442
      src/views/vent/monitorManager/nitrogen/components/nitrogenHomeYJ.vue
  34. 4 4
      src/views/vent/monitorManager/nitrogen/index.vue
  35. 41 41
      src/views/vent/monitorManager/nitrogen/nitrogen.data.ts
  36. 51 29
      src/views/vent/monitorManager/nitrogen/nitrogen.dishang.threejs.ts
  37. 31 53
      src/views/vent/monitorManager/nitrogen/nitrogen.threejs.ts
  38. 0 1
      src/views/vent/monitorManager/safetyMonitor/index.vue
  39. 0 2
      src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts
  40. 0 1
      src/views/vent/monitorManager/windowMonitor/shuangdaoFc.threejs.ts
  41. 7 10
      src/views/vent/monitorManager/windrectMonitor/index.vue
  42. 0 1
      src/views/vent/monitorManager/windrectMonitor/windrect.threejs.ts
  43. 1 1
      src/views/vent/performance/fileDetail/commen/fileSystem.vue
  44. 1 12
      stylelint.config.js

+ 2 - 2
build/vite/plugin/index.ts

@@ -48,8 +48,8 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
       // The export name of top-level await promise for each chunk module
       promiseExportName: '__tla',
       // The function to generate import names of top-level await promise in each chunk module
-      promiseImportName: i => `__tla_${i}`
-    })
+      promiseImportName: (i) => `__tla_${i}`,
+    }),
   ];
 
   vitePlugins.push(UnoCSS({ presets: [presetUno(), presetTypography()] }));

+ 3 - 3
package.json

@@ -10,13 +10,13 @@
     "pinstall": "pnpm install",
     "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
     "dev": "vite",
-    "build": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts",
+    "build": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=81920 vite build && esno ./build/script/postBuild.ts",
     "build:report": "pnpm clean:cache && cross-env REPORT=true npm run build",
     "preview": "npm run build && vite preview",
     "reinstall": "rimraf pnpm-lock.yaml && rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run install",
     "clean:lib": "rimraf node_modules",
     "gen:icon": "esno ./build/generate/icon/index.ts",
-    "batch:prettier": "prettier --write  \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
+    "batch:prettier": "prettier --write  \"./src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
     "upgrade:log": "conventional-changelog -p angular -i CHANGELOG.md -s",
     "husky:install": "husky install"
   },
@@ -198,4 +198,4 @@
       ]
     }
   }
-}
+}

File diff suppressed because it is too large
+ 167 - 144
pnpm-lock.yaml


+ 1 - 1
public/js/config.js

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

+ 4 - 4
src/App.vue

@@ -19,7 +19,7 @@
 
   // 解决日期时间国际化问题
   import 'dayjs/locale/zh-cn';
-  const isReload = ref(false)
+  const isReload = ref(false);
   const appStore = useAppStore();
   // support Multi-language
   const { getAntdLocale } = useLocale();
@@ -40,9 +40,9 @@
 
   watch([() => appStore.getWidthScale, () => appStore.getHeightScale], () => {
     const popoverDomList = document.getElementsByClassName('zxm-popover');
-    Array.prototype.map.call(popoverDomList, dom => {
-      console.log('弹窗节点------>',dom);
-    });
+    // Array.prototype.map.call(popoverDomList, (dom) => {
+    //   console.log('弹窗节点------>', dom);
+    // });
   });
 
   useTitle();

+ 3 - 4
src/components/chart/BarAndLine.vue

@@ -76,9 +76,9 @@
         yAxis: null,
         series: null,
       });
-      
+
       let optionUtil;
-      
+
       watchEffect(() => {
         props.dataSource && props.dataSource.length > 0 && option.series && initCharts();
       });
@@ -99,7 +99,6 @@
       initChartsOption();
 
       function initCharts(isRefresh = false) {
-        // debugger
         //轴数据
         if (option.series && option.series.length === chartsColumns.length) {
           let xAxisData = props.dataSource.map((item) => item[props.xAxisPropType]);
@@ -107,7 +106,7 @@
             option.series[index].data = props.dataSource.map((item) => item[propType.dataIndex] || 0);
           });
           option.xAxis[0].data = xAxisData;
-          console.log('echarts监测列表数据', option.xAxis[0].data)
+          console.log('echarts监测列表数据', option.xAxis[0].data);
           setOptions(option, isRefresh);
         }
       }

+ 2 - 2
src/design/ant/index.less

@@ -14,11 +14,11 @@
     display: unset;
   }
 }
-//update-begin---author:scott ---date:2023-08-28  for:【QQYUN-6374】UnoCSS替代windicss导致应用样式问题--
+//update-begin---author:scott ---date:2023-08-28  for锟斤拷锟斤拷QQYUN-6374锟斤拷UnoCSS锟斤拷锟絯indicss锟斤拷锟斤拷应锟斤拷锟斤拷式锟斤拷锟斤拷--
 /*span.anticon:not(.app-iconify) {
   vertical-align: 0.125em !important;
 }*/
-//update-end---author:scott ---date::2023-08-28  for:【QQYUN-6374】UnoCSS替代windicss导致应用样式问题--
+//update-end---author:scott ---date::2023-08-28  for锟斤拷锟斤拷QQYUN-6374锟斤拷UnoCSS锟斤拷锟絯indicss锟斤拷锟斤拷应锟斤拷锟斤拷式锟斤拷锟斤拷--
 
 .@{ventSpace}-back-top {
   right: 20px;

+ 21 - 4
src/design/entry.css

@@ -1,6 +1,7 @@
 * > .enter-x:nth-child(1) {
   transform: translateX(50px);
 }
+
 * > .-enter-x:nth-child(1) {
   transform: translateX(-50px);
 }
@@ -13,9 +14,11 @@
   animation-fill-mode: forwards;
   animation-delay: 0.1s;
 }
+
 * > .enter-x:nth-child(2) {
   transform: translateX(50px);
 }
+
 * > .-enter-x:nth-child(2) {
   transform: translateX(-50px);
 }
@@ -28,9 +31,11 @@
   animation-fill-mode: forwards;
   animation-delay: 0.2s;
 }
+
 * > .enter-x:nth-child(3) {
   transform: translateX(50px);
 }
+
 * > .-enter-x:nth-child(3) {
   transform: translateX(-50px);
 }
@@ -47,6 +52,7 @@
 * > .enter-x:nth-child(4) {
   transform: translateX(50px);
 }
+
 * > .-enter-x:nth-child(4) {
   transform: translateX(-50px);
 }
@@ -63,6 +69,7 @@
 * > .enter-x:nth-child(5) {
   transform: translateX(50px);
 }
+
 * > .-enter-x:nth-child(5) {
   transform: translateX(-50px);
 }
@@ -79,6 +86,7 @@
 * > .enter-y:nth-child(1) {
   transform: translateX(50px);
 }
+
 * > .-enter-y:nth-child(1) {
   transform: translateX(-50px);
 }
@@ -91,9 +99,11 @@
   animation-fill-mode: forwards;
   animation-delay: 0.1s;
 }
+
 * > .enter-y:nth-child(2) {
   transform: translateX(50px);
 }
+
 * > .-enter-y:nth-child(2) {
   transform: translateX(-50px);
 }
@@ -106,9 +116,11 @@
   animation-fill-mode: forwards;
   animation-delay: 0.2s;
 }
+
 * > .enter-y:nth-child(3) {
   transform: translateX(50px);
 }
+
 * > .-enter-y:nth-child(3) {
   transform: translateX(-50px);
 }
@@ -125,6 +137,7 @@
 * > .enter-y:nth-child(4) {
   transform: translateX(50px);
 }
+
 * > .-enter-y:nth-child(4) {
   transform: translateX(-50px);
 }
@@ -141,6 +154,7 @@
 * > .enter-y:nth-child(5) {
   transform: translateX(50px);
 }
+
 * > .-enter-y:nth-child(5) {
   transform: translateX(-50px);
 }
@@ -167,15 +181,18 @@
   }
 }
 
-/*update-begin---author:wangshuai ---date:20230829  for:UnoCSS替代windicss 导致全局默认边框样丢失------------*/
-*, :before, :after {
+/* update-begin---author:wangshuai ---date:20230829  for:UnoCSS替代windicss 导致全局默认边框样丢失------------ */
+*, ::before, ::after {
   box-sizing: border-box;
   border-width: 0;
   border-style: solid;
   border-color: #e5e7eb;
 }
+
 .border-primary,.hover\:border-primary:hover {
   --tw-border-opacity: 1;
-  border-color: rgba(24,144,255,var(--tw-border-opacity))
+
+  border-color: rgb(24 144 255 / var(--tw-border-opacity))
 }
-/*update-end---author:wangshuai ---date:20230829  for:UnoCSS替代windicss 导致全局默认边框样丢失------------*/
+
+/* update-end---author:wangshuai ---date:20230829  for:UnoCSS替代windicss 导致全局默认边框样丢失------------ */

+ 3 - 0
src/hooks/system/useCamera.ts

@@ -64,6 +64,9 @@ export function useCamera() {
             const promise = new Promise(async (childResolve) => {
               let cameraNameDom: null | HTMLElement = null;
               console.log('摄像头地址--------->', cameraUrl, cameraUrl.addr.startsWith('rtsp://'), livePlayerDiv);
+              if (cameraUrl.addr.includes('0.0.0.0')) {
+                cameraUrl.addr = cameraUrl.addr.replace('0.0.0.0', window.location.hostname);
+              }
               if (cameraUrl.addr && cameraUrl.addr.startsWith('rtsp://')) {
                 const server = webRtcServerList.shift();
                 if (server) {

+ 0 - 2
src/hooks/web/useSso.ts

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

+ 1 - 1
src/locales/lang/en.ts

@@ -1,6 +1,6 @@
 import { genMessage } from '../helper';
 import antdLocale from 'ant-design-vue/es/locale/en_US';
-//import momentLocale from 'moment/dist/locale/eu';
+//import dayjsLocale from 'dayjs/dist/locale/eu';
 
 const modules = import.meta.glob('./en/**/*.ts', { eager: true });
 export default {

+ 0 - 2
src/router/guard/permissionGuard.ts

@@ -37,7 +37,6 @@ 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();
 
@@ -132,7 +131,6 @@ 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> } = {

+ 3 - 3
src/router/helper/routeHelper.ts

@@ -63,8 +63,8 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
     }
     // @ts-ignore 添加是否缓存路由配置
     item.meta.ignoreKeepAlive = !item?.meta.keepAlive;
-    let token = getToken();
-    let tenantId = getTenantId();
+    const token = getToken();
+    const tenantId = getTenantId();
     // URL支持{{ window.xxx }}占位符变量
     //update-begin---author:wangshuai ---date:20220711  for:[VUEN-1638]菜单tenantId需要动态生成------------
     item.component = (item.component || '')
@@ -248,7 +248,7 @@ export function addSlashToRouteComponent(routeList: AppRouteRecordRaw[]) {
       route.component = 'VENTMODAL';
     }
 
-    let component = route.component as string;
+    const component = route.component as string;
     if (component) {
       const layoutFound = LayoutMap.get(component);
       if (!layoutFound) {

+ 1 - 1
src/router/index.ts

@@ -1,7 +1,7 @@
 import type { RouteRecordRaw } from 'vue-router';
 import type { App } from 'vue';
 
-import { createRouter, createWebHashHistory, createWebHistory, } from 'vue-router';
+import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router';
 import { basicRoutes } from './routes';
 
 // 白名单应该包含基本静态路由

+ 2 - 2
src/utils/env.ts

@@ -113,7 +113,7 @@ export function getHomePath(key): string {
 }
 
 function switchTheme(obj) {
-  for (let key in obj) {
+  for (const key in obj) {
     document.getElementsByTagName('body')[0].style.setProperty(`--${key}`, obj[key]);
   }
-}
+}

+ 2 - 2
src/utils/http/axios/index.ts

@@ -63,7 +63,7 @@ const transform: AxiosTransform = {
       //lxh
       // console.log(data, '000000000000000');
       createMessage.error(message);
-      throw new Error(message)
+      throw new Error(message);
     }
 
     // 在此处根据自己项目的实际情况对不同的code执行不同的操作
@@ -96,7 +96,7 @@ const transform: AxiosTransform = {
   // 请求之前处理config
   beforeRequestHook: (config, options) => {
     const { apiUrl, joinPrefix, joinParamsToUrl, formatDate, joinTime = true, urlPrefix } = options;
-    
+
     if (joinPrefix) {
       config.url = `${urlPrefix}${config.url}`;
     }

+ 2 - 2
src/utils/monorepo/dynamicRouter.ts

@@ -9,10 +9,10 @@ export const packageViews: DynamicViewsRecord = {};
  */
 export function registerDynamicRouter(getViews: () => DynamicViewsRecord) {
   if (typeof getViews === 'function') {
-    let dynamicViews = getViews();
+    const dynamicViews = getViews();
     Object.keys(dynamicViews).forEach((key) => {
       // 处理动态页面的key,使其可以让路由识别
-      let newKey = key.replace('./src/views', '../../views');
+      const newKey = key.replace('./src/views', '../../views');
       packageViews[newKey] = dynamicViews[key];
     });
   }

+ 35 - 35
src/views/dashboard/Analysis/index.vue

@@ -2,49 +2,53 @@
   <div class="vent-home">
     <customHeader>智能管控系统</customHeader>
     <div class="home-container">
-      <workerFace v-if="isBtnActive == 'workFace'"/>
-      <netWork v-if="isBtnActive == 'netWork'"/>
+      <workerFace v-if="isBtnActive == 'workFace'" />
+      <netWork v-if="isBtnActive == 'netWork'" />
     </div>
     <div class="bottom-btn-group">
-        <div v-for="item in bottomBtnList" :key="item.value" class="vent-row-center btn-item" @click="setBtn('click', item)" @mouseenter="setBtn('over', item) " @mouseleave="setBtn('leave', item)">
-          <Decoration11 :color="isBtnActive === item.value ? activeColors : item.isHover ? activeColors : noActiveColors" style="width:200px;height:60px;">
-            {{ item.text }}
-          </Decoration11>
-        </div>
+      <div
+        v-for="item in bottomBtnList"
+        :key="item.value"
+        class="vent-row-center btn-item"
+        @click="setBtn('click', item)"
+        @mouseenter="setBtn('over', item)"
+        @mouseleave="setBtn('leave', item)"
+      >
+        <Decoration11
+          :color="isBtnActive === item.value ? activeColors : item.isHover ? activeColors : noActiveColors"
+          style="width: 200px; height: 60px"
+        >
+          {{ item.text }}
+        </Decoration11>
+      </div>
     </div>
   </div>
 </template>
 <script lang="ts" setup>
-  import {onMounted, onUnmounted, ref } from 'vue'
-  import { Decoration11 } from '@kjgl77/datav-vue3'
-  import { bottomBtnList } from "./home.data";
-  import workerFace from './homePage/workerFace.vue'
-  import netWork from './homePage/network.vue'
+  import { onMounted, onUnmounted, ref } from 'vue';
+  import { Decoration11 } from '@kjgl77/datav-vue3';
+  import { bottomBtnList } from './home.data';
+  import workerFace from './homePage/workerFace.vue';
+  import netWork from './homePage/network.vue';
   import customHeader from '/@/views/vent/comment/components/customHeader.vue';
 
-  const activeColors = []
-  const noActiveColors = ['#aaa', '#aaa']
-  const isBtnActive = ref('workFace')
-
+  const activeColors = [];
+  const noActiveColors = ['#aaa', '#aaa'];
+  const isBtnActive = ref('workFace');
 
   function setBtn(type, activeObj) {
-    if(type === 'over'){
-      activeObj.isHover = true
-    }else if(type === 'leave'){
-      activeObj.isHover = false
-    }else if(type === 'click') {
-      isBtnActive.value = activeObj.value
+    if (type === 'over') {
+      activeObj.isHover = true;
+    } else if (type === 'leave') {
+      activeObj.isHover = false;
+    } else if (type === 'click') {
+      isBtnActive.value = activeObj.value;
     }
   }
-  
-  onMounted(() => {
-
-  })
-
-  onUnmounted(() => {
 
-  })
+  onMounted(() => {});
 
+  onUnmounted(() => {});
 </script>
 
 <style lang="less" scoped>
@@ -68,7 +72,7 @@
       margin-bottom: 100px;
       margin-top: 20px;
     }
-    .bottom-btn-group{
+    .bottom-btn-group {
       display: flex;
       position: fixed;
       width: calc(100% - 400px);
@@ -76,7 +80,7 @@
       bottom: 20px;
       align-items: center;
       justify-content: center;
-      .btn-item{
+      .btn-item {
         width: 200px;
         height: 60px;
         margin: 10px;
@@ -85,9 +89,5 @@
         pointer-events: auto;
       }
     }
-    
   }
-
-
-  
 </style>

+ 12 - 14
src/views/super/drag/page/useExportImage.ts

@@ -1,12 +1,10 @@
-
-import {ref} from 'vue'
+import { ref } from 'vue';
 import html2canvas from 'html2canvas';
 
 /**
  * 用于导出生成image
  */
 export function useExportImage() {
-  
   const exportRef = ref();
 
   /**
@@ -14,15 +12,15 @@ export function useExportImage() {
    * @param fileName
    */
   function onExportImage(fileName) {
-    let ele = exportRef.value;
-    if(!ele){
-      console.error('没有导出对象')
+    const ele = exportRef.value;
+    if (!ele) {
+      console.error('没有导出对象');
       return;
     }
     const size = {
       width: ele.offsetWidth,
-      height: ele.offsetHeight
-    }
+      height: ele.offsetHeight,
+    };
     html2canvas(ele, { useCORS: true, logging: true }).then(async (canvas) => {
       const dataURL = canvas.toDataURL('image/png');
       await download(dataURL, size, fileName);
@@ -31,15 +29,15 @@ export function useExportImage() {
 
   async function download(imgUrl, size, fileName) {
     const dataUrl = await getBase64(imgUrl, size);
-    const link:any = document.createElement('a');
+    const link: any = document.createElement('a');
     link.href = dataUrl;
     link.download = `${fileName}.png`;
     link.click();
   }
 
-  function getBase64(url, size){
+  function getBase64(url, size) {
     return new Promise((resolve) => {
-      let canvas:any = document.createElement('canvas');
+      let canvas: any = document.createElement('canvas');
       const ctx = canvas.getContext('2d');
       const img = new Image();
       // 允许跨域
@@ -60,6 +58,6 @@ export function useExportImage() {
 
   return {
     exportRef,
-    onExportImage
-  }
-}
+    onExportImage,
+  };
+}

+ 39 - 39
src/views/super/drag/page/view.vue

@@ -1,21 +1,21 @@
 <template>
   <div ref="exportRef">
-    <ViewEngine :dragData="dragData" :token="getToken()" @go="compRouter" @btnClick="btnClick"></ViewEngine>  
+    <ViewEngine :dragData="dragData" :token="getToken()" @go="compRouter" @btnClick="btnClick" />
   </div>
 </template>
 
 <script lang="ts" name="drag-page-view" setup>
-  import { ref, unref, reactive,computed, watch } from 'vue';
+  import { ref, unref, reactive, computed, watch } from 'vue';
   import { useRouter, useRoute } from 'vue-router';
-  import {queryById} from './page.api';
+  import { queryById } from './page.api';
   import { useTabs } from '/@/hooks/web/useTabs';
   import { useModal } from '/@/components/Modal';
   import { openWindow } from '/@/utils';
   import { getToken } from '/@/utils/auth';
   import { useUserStore } from '/@/store/modules/user';
-  import {router} from "/@/router";
-  import {useExportImage} from './useExportImage'
-  
+  import { router } from '/@/router';
+  import { useExportImage } from './useExportImage';
+
   const { setTitle } = useTabs();
   const userStore = useUserStore();
   //当前页面id
@@ -74,47 +74,45 @@
    * @param openMode
    */
   function goPage(nextRoute, params) {
-    if(params.openMode==='2'){
+    if (params.openMode === '2') {
       // 新页面打开视图
       let winUrl = pathResolve(nextRoute);
-      window.open(winUrl.href, '_blank')
-    }else{
+      window.open(winUrl.href, '_blank');
+    } else {
       // 当前页面打开视图
-      push(nextRoute)
+      push(nextRoute);
     }
   }
-  
+
   function btnClick(params) {
-    console.log("btnClick---->params",params);
+    console.log('btnClick---->params', params);
     let operationType = params.operationType;
-    if(operationType=='1'){
+    if (operationType == '1') {
       let modalData = {
         mode: 'add',
         desformCode: params.worksheet.value,
         dataId: null,
         isOnline: false,
         viewId: '',
-        lowAppId: route.params.appId
-      }
-      console.log('创建记录 打开modal的参数', modalData)
+        lowAppId: route.params.appId,
+      };
+      console.log('创建记录 打开modal的参数', modalData);
       openRecordModal(true, modalData);
-    }else if(operationType=='2'){
+    } else if (operationType == '2') {
       let appId = route.params.appId;
       let designFormCode = params.worksheet.value;
       let nextRoute = {
         path: `/myapp/${appId}/desform/${designFormCode}`,
       };
-      if(params.view){
-        nextRoute['query']={
-          view: params.view
-        }
+      if (params.view) {
+        nextRoute['query'] = {
+          view: params.view,
+        };
       }
-      console.log('打开视图 路由', nextRoute)
-      goPage(nextRoute, params)
+      console.log('打开视图 路由', nextRoute);
+      goPage(nextRoute, params);
       //update-end-author:taoyan date:2023-2-23 for: QQYUN-3674【仪表盘】按钮配置,打开创建model和打开视图
-    
-    }else if(operationType=='3'){
-      
+    } else if (operationType == '3') {
       //update-begin-author:taoyan date:2023-3-1 for: QQYUN-4420【仪表盘】打开仪表盘 打不开或者跳转到后台了 应该在应用里边打开
       let appId = route.params.appId;
       let dragId = params.customPage.value;
@@ -123,10 +121,8 @@
       };
       goPage(nextRoute, params);
       //update-end-author:taoyan date:2023-3-1 for: QQYUN-4420【仪表盘】打开仪表盘 打不开或者跳转到后台了 应该在应用里边打开
-    
-    }else if(operationType=='4'){
+    } else if (operationType == '4') {
       //打开链接
-     
     }
   }
   //********************按钮问点击回调后的逻辑end*****************************************
@@ -136,21 +132,25 @@
   const props = defineProps({
     routeInfo: {
       type: Object,
-      default: ()=>{}
+      default: () => {},
     },
   });
   const { exportRef, onExportImage } = useExportImage();
-  watch(()=>props.routeInfo, (info)=>{
-    if(info){
-      if(info.exportImage){
-        console.log('导出图片》》》');
-        let name = dragData.value.name;
-        onExportImage(name);
+  watch(
+    () => props.routeInfo,
+    (info) => {
+      if (info) {
+        if (info.exportImage) {
+          console.log('导出图片》》》');
+          let name = dragData.value.name;
+          onExportImage(name);
+        }
       }
-    }
-  }, {deep: true, immediate: true});
+    },
+    { deep: true, immediate: true }
+  );
   //update-end-author:taoyan date:2023-2-24 for: QQYUN-3663【应用】仪表盘页面上,添加分享和导出图片功能
-  
+
   initData();
 </script>
 <style lang="less" scoped>

+ 1 - 1
src/views/sys/forget-password/step3.vue

@@ -14,7 +14,7 @@
   import { propTypes } from '/@/utils/propTypes';
 
   export default defineComponent({
-    name: 'step3',
+    name: 'Step3',
     components: {
       Button,
       Form,

+ 0 - 1
src/views/vent/home/clique/components/icon-light.vue

@@ -35,7 +35,6 @@
   ]);
 
   function openModal(code, leftV, topV) {
-    debugger;
     emit('showDetail', code, leftV, topV);
   }
 </script>

+ 0 - 2
src/views/vent/home/clique/index.vue

@@ -65,14 +65,12 @@
       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>

+ 5 - 3
src/views/vent/home/colliery/components/wind-device.vue

@@ -151,9 +151,11 @@
     () => props.devicedata,
     (val) => {
       Object.keys(iconsMonitor).forEach((el) => {
-        iconsMonitor[el].level = val[el].maxLevel;
-        iconsMonitor[el]['text'] = val[el].name;
-        iconsMonitor[el]['count'] = val[el].count;
+        if (val && val[el]) {
+          iconsMonitor[el].level = val[el].maxLevel;
+          iconsMonitor[el]['text'] = val[el].name;
+          iconsMonitor[el]['count'] = val[el].count;
+        }
       });
     },
     {

+ 15 - 9
src/views/vent/home/colliery/index.vue

@@ -87,13 +87,12 @@
   import { router } from '/@/router';
   // import { Modal } from 'ant-design-vue';
   // import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
-  import moment from 'moment';
+  import dayjs from 'dayjs';
   import { getActions } from '/@/qiankun/state';
   import { unmountMicroApps, mountMicroApp } from '/@/qiankun';
 
   import { getDate } from './clique.data';
   import VentModal from '/@/components/vent/micro/ventModal.vue';
-
   const { currentRoute } = useRouter();
   const { title, logoUrl } = useGlobSetting();
   const actions = getActions();
@@ -206,14 +205,21 @@
             drag_3: 333,
             drag_total: Math.abs(
               Number(
-                res.fanmain[0].readData.Fan1FanPre ||
-                  res.fanmain[0].readData.Fan2FanPre ||
-                  res.fanmain[0].readData.DataPa ||
-                  680 + (Math.random() * 2 - 1 * 5)
+                res.fanmain && res.fanmain[0]
+                  ? res.fanmain[0].readData.Fan1FanPre ||
+                      res.fanmain[0].readData.Fan2FanPre ||
+                      res.fanmain[0].readData.DataPa ||
+                      680 + (Math.random() * 2 - 1 * 5)
+                  : 680 + (Math.random() * 2 - 1 * 5)
               )
             ),
             m3_total: Number(
-              res.fanmain[0].readData.Fan1m3 || res.fanmain[0].readData.Fan2m3 || res.fanmain[0].readData.m3 || 8138 + (Math.random() * 2 - 1 * 20)
+              res.fanmain && res.fanmain[0]
+                ? res.fanmain[0].readData.Fan1m3 ||
+                    res.fanmain[0].readData.Fan2m3 ||
+                    res.fanmain[0].readData.m3 ||
+                    8138 + (Math.random() * 2 - 1 * 20)
+                : 8138 + (Math.random() * 2 - 1 * 20)
             ),
           },
         });
@@ -243,8 +249,8 @@
   //获取当前时间年月日时分秒
   function getNowTime() {
     setInterval(() => {
-      nowTimeYear.value = moment().format('YYYY/MM/DD');
-      let week = moment(new Date().getTime()).day();
+      nowTimeYear.value = dayjs().format('YYYY/MM/DD');
+      let week = dayjs(new Date().getTime()).day();
       switch (week) {
         case 0:
           nowTimeWeek.value = '星期日';

+ 6 - 4
src/views/vent/monitorManager/alarmMonitor/index.vue

@@ -114,7 +114,7 @@
         <div
           class="bottom"
           :class="{
-            bottom1: centerData.levels == 101 || centerData.levels == 0,
+            bottom1: centerData.levels == 101 || centerData.levels == 0 || centerData.levels == 10000,
             bottom2: centerData.levels == 102,
             bottom3: centerData.levels == 103,
             bottom4: centerData.levels == 104,
@@ -163,9 +163,11 @@
                 ? '高风险'
                 : centerData.levels == 201
                 ? '报警'
-                : centerData.levels == 0
-                ? '正常'
-                : '网络异常'
+                : // : centerData.levels == 0
+                  // ? '正常'
+                  // : centerData.levels == 10000
+                  // ? '正常'
+                  '正常'
             }}</div>
             <div class="text2">风险分析</div>
           </div>

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

@@ -123,7 +123,6 @@ import { onMounted } from 'vue';
     if( props.deviceType.split('_')[1] && props.deviceType.split('_')[1] === 'history') return
     let result;
     if(globalConfig.History_Type == 'vent'){
-      debugger;
       if(props.deviceListApi && !props.sysId){
         const res = await props.deviceListApi()
         if (res['records'] && res['records'].length > 0) result = res['records']

+ 41 - 3
src/views/vent/monitorManager/fanLocalMonitor/index.vue

@@ -233,7 +233,7 @@
               </template>
             </GroupMonitorTable>
           </a-tab-pane>
-          <a-tab-pane key="2" tab="实时曲线图" force-render>
+          <a-tab-pane key="2" tab="实时曲线图" force-render v-if="hasPermission('echart:show')">
             <div class="tab-item" v-if="activeKey === '2'">
               <div class="vent-flex-row-between" style="height: 100%">
                 <BarSingle
@@ -435,7 +435,22 @@
       {
         key: 'changeSmoke',
         value: '一键倒机',
-        permission: 'btn:openclose',
+        permission: 'btn:change',
+      },
+      {
+        key: 'fan1ToFan2',
+        value: '主机倒备机',
+        permission: 'btn:ctrlFan1ToFan2',
+      },
+      {
+        key: 'fan2ToFan1',
+        value: '备机倒主机',
+        permission: 'btn:ctrlFan2ToFan1',
+      },
+      {
+        key: 'changeSmoke',
+        value: '一键倒机',
+        permission: 'btn:change',
       },
       {
         key: 'Fan1Frequency',
@@ -600,7 +615,6 @@
       selectData = lodash.cloneDeep(initData);
       loading.value = false;
       if (selectData.deviceID) MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
-      debugger;
       const headEl = document.querySelector(`.zxm-table-thead`);
       if (headEl) {
         headElHeight.value = headEl.clientHeight;
@@ -911,6 +925,30 @@
       // } else if (mainWindIsShow1.value === 'stop' && mainWindIsShow2.value === 'stop') {
       //   // playSmoke(handType, '', frequency, 'stop');
       // }
+    } else if (handType === 'fan1ToFan2') {
+      data.paramcode = 'CtrlFan1ToFan2';
+      deviceControlApi(data).then(() => {
+        if (globalConfig.History_Type == 'remote') {
+          message.success('指令已下发至生产管控平台成功!');
+        } else {
+          message.success('指令已下发成功!');
+        }
+        modalTitle.value = '';
+        modalIsShow.value = false;
+        btnClick.value = true;
+      });
+    } else if (handType === 'fan2ToFan1') {
+      data.paramcode = 'CtrlFan2ToFan1';
+      deviceControlApi(data).then(() => {
+        if (globalConfig.History_Type == 'remote') {
+          message.success('指令已下发至生产管控平台成功!');
+        } else {
+          message.success('指令已下发成功!');
+        }
+        modalTitle.value = '';
+        modalIsShow.value = false;
+        btnClick.value = true;
+      });
     }
   }
 

+ 0 - 1
src/views/vent/monitorManager/gateMonitor/gate.threejs.three.ts

@@ -315,7 +315,6 @@ class Fm2 {
 
   // 播放动画
   play(handlerState, timeScale = 0.01) {
-    debugger;
     if (this.clipActionArr.frontDoor && this.clipActionArr.backDoor) {
       let handler = () => {};
       switch (handlerState) {

+ 0 - 1
src/views/vent/monitorManager/gateMonitor/gate.threejs.xr.ts

@@ -284,7 +284,6 @@ class FmXR {
 
   /* 提取风门序列帧,初始化前后门动画 */
   initAnimation() {
-    debugger;
     const fmGroup = this.group?.getObjectByName('fmXr-door');
     if (fmGroup) {
       const tracks = fmGroup.animations[0].tracks;

+ 66 - 200
src/views/vent/monitorManager/nitrogen/components/nitrogenHome.vue

@@ -1,37 +1,36 @@
 <template>
   <div id="compressor3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
   <div
-    v-show="monitorDataGroupFlag == 1"
     id="compressorCss3D"
-    class="threejs-Object-CSS compressorCss3D-box"
+    class="threejs-Object-CSS"
     style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px"
   >
-    <!-- <a-spin :spinning="loading" /> -->
-    <div v-for="(groupNum, index) in monitorDataGroupNum" :key="index" class="modal-monitor">
+    <a-spin :spinning="loading" />
+    <div v-for="groupNum in monitorDataGroupNum" :key="groupNum" class="modal-monitor">
       <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
         <div class="title">{{ groupNum }}号空压机 </div>
         <div class="monitor-item">
-          <span class="monitor-title">机头温度:</span>
+          <span class="monitor-title">排气压力:</span>
           <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_HeadTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_HeadTemp`]) : '-' }}</span
-            ><span class="unit">℃</span></span
+            ><span class="val">{{
+              monitorData[groupNum - 1]['compressExhaustPressF1'] ? monitorData[groupNum - 1]['compressExhaustPressF1'] : '-'
+            }}</span
+            ><span class="unit">Mpa</span></span
           >
         </div>
         <div class="monitor-item">
-          <span class="monitor-title">冷却温度:</span>
+          <span class="monitor-title">分离压力:</span>
           <span class="monitor-val"
             ><span class="val">{{
-              monitorData[`PRE${groupNum}_CPR_CoolantTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_CoolantTemp`]) : '-'
+              monitorData[groupNum - 1]['compressSeparatePressF1'] ? monitorData[groupNum - 1]['compressSeparatePressF1'] : '-'
             }}</span
-            ><span class="unit"></span></span
+            ><span class="unit">Mpa</span></span
           >
         </div>
         <div class="monitor-item">
           <span class="monitor-title">排气温度:</span>
           <span class="monitor-val"
-            ><span class="val">{{
-              monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_ExhaustTemp`]) : '-'
-            }}</span
+            ><span class="val">{{ monitorData[groupNum - 1]['exhaustTemp'] ? monitorData[groupNum - 1]['exhaustTemp'] : '-' }}</span
             ><span class="unit">℃</span></span
           >
         </div>
@@ -41,79 +40,57 @@
             ><span
               :class="{
                 'signal-round': true,
-                'signal-round-run': monitorData[`PRE${groupNum}_MOT_Running`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Running`] != '1',
+                'signal-round-run': monitorData[groupNum - 1]['compressRunSigF1'],
+                'signal-round-gry': !monitorData[groupNum - 1]['compressRunSigF1'],
               }"
             ></span>
           </div>
           <div class="signal"
-            ><span class="monitor-title">故障信号</span
+            ><span class="monitor-title">加载信号</span
             ><span
               :class="{
                 'signal-round': true,
-                'signal-round-warning': monitorData[`PRE${groupNum}_MOT_Fault`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Fault`] != '1',
+                'signal-round-run': monitorData[groupNum - 1]['compressLoadSigF1'],
+                'signal-round-gry': !monitorData[groupNum - 1]['compressLoadSigF1'],
               }"
             ></span>
           </div>
         </div>
       </fourBorderBg>
       <fourBorderBg :class="`cqg${groupNum}`" :id="`cqgMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号储气罐 </div>
+        <div class="title">{{ cqgs[groupNum - 1] }}</div>
         <div class="monitor-item">
           <span class="monitor-title">气囊温度:</span>
           <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_VLS_Temp`] ? formatNum(monitorData[`PRE${groupNum}_VLS_Temp`]) : '-' }}</span
+            ><span class="val">{{ monitorData[groupNum - 1]['airReceiverTemp'] ? monitorData[groupNum - 1]['airReceiverTemp'] : '-' }}</span
             ><span class="unit">℃</span></span
           >
         </div>
-        <!-- <div class="monitor-item">
-              <span class="monitor-title">气囊压力<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverPress'] ?
-                monitorData[groupNum - 1]['airReceiverPress'] : '-' }}</span><span class="unit">Mpa</span></span>
-            </div>
-            <div class="monitor-item">
-              <span class="monitor-title">气囊流量<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverFlow'] ?
-                monitorData[groupNum - 1]['airReceiverFlow'] : '-' }}</span><span class="unit">m³/k</span></span>
-            </div> -->
+        <div class="monitor-item">
+          <span class="monitor-title">气囊压力<span class="unit"></span>:</span>
+          <span class="monitor-val"
+            ><span class="val">{{ monitorData[groupNum - 1]['airReceiverPress'] ? monitorData[groupNum - 1]['airReceiverPress'] : '-' }}</span
+            ><span class="unit">Mpa</span></span
+          >
+        </div>
+        <div class="monitor-item">
+          <span class="monitor-title">气囊流量<span class="unit"></span>:</span>
+          <span class="monitor-val"
+            ><span class="val">{{ monitorData[groupNum - 1]['airReceiverFlow'] ? monitorData[groupNum - 1]['airReceiverFlow'] : '-' }}</span
+            ><span class="unit">m³/k</span></span
+          >
+        </div>
       </fourBorderBg>
     </div>
   </div>
   <div class="nitrogen-home">
-    <!-- <div style="position: absolute; color: #fff; top: 30px; pointer-events: auto; display: flex;">
-        <span class="tab-button-box" :class="{'tab-button-box-active': monitorDataGroupFlag == 1}" @click="setMonitorGroupNum(monitorDataGroupNum1, 1)">压风系统1</span>
-        <span class="tab-button-box" :class="{ 'tab-button-box-active': monitorDataGroupFlag == 2 }" @click="setMonitorGroupNum(monitorDataGroupNum2, 2)">压风系统2</span>
-      </div> -->
-    <div class="total-data">
-      <div class="vent-flex-row">
-        <div class="item"
-          >总流量(m³/min):<span class="val">{{
-            monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`]
-              ? formatNum(monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`])
-              : '-'
-          }}</span></div
-        >
-        <div class="item"
-          >总压力(bar):<span class="val">{{
-            monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`]
-              ? formatNum(monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`])
-              : '-'
-          }}</span></div
-        >
-      </div>
-      <div class="" style="margin-left: 30px; margin-top: 10px">
-        <div v-if="Number(monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`]) < 0" style="color: red">总流量异常</div>
-        <div v-if="Number(monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`]) < 0" style="color: red">总压力异常</div>
-      </div>
-    </div>
+    <div style="position: absolute; color: #fff; top: 0px"><span>压风系统1</span><span>压风系统2</span></div>
     <div class="nitrogen-container">
-      <div v-if="monitorData['netStatus'] == 0" class="device-state">网络断开</div>
       <div class="top-box">
         <!-- 左边监测数据 -->
         <div class="lr-box left-box">
           <div class="left-container">
-            <div class="item item-l" v-for="(groupNum, index) in monitorDataGroupNum" :key="index">
+            <div class="item item-l" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
               <div class="monitor-box">
                 <ventBox1>
                   <template #title>
@@ -124,16 +101,16 @@
                       <div class="item-col">
                         <span class="state-title">{{ Object.values(data)[0] }} :</span>
                         <span class="state-val">{{
-                          monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)] >= 0
-                            ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)]))
+                          (monitorData.length > 0 && monitorData[groupNum - 1][Object.keys(data)[0]]) >= 0
+                            ? monitorData[groupNum - 1][Object.keys(data)[0]]
                             : '-'
                         }}</span>
                       </div>
                       <div class="item-col">
                         <span class="state-title">{{ Object.values(data)[1] }} :</span>
                         <span class="state-val">{{
-                          monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)] >= 0
-                            ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)]))
+                          (monitorData.length > 0 && monitorData[groupNum - 1][Object.keys(data)[1]]) >= 0
+                            ? monitorData[groupNum - 1][Object.keys(data)[1]]
                             : '-'
                         }}</span>
                       </div>
@@ -145,7 +122,7 @@
           </div>
         </div>
         <!-- 右边控制状态 -->
-        <div class="lr-box right-box" style="display: none">
+        <div class="lr-box right-box">
           <ventBox1>
             <template #title>
               <div>远程控制</div>
@@ -193,15 +170,8 @@
                   <div class="control-right-box">
                     <div class="control-item-title">是否开启联动</div>
                     <div class="item-data-box">
-                      <div
-                        :class="{
-                          'state-icon': true,
-                          open: monitorData[0] && monitorData[0].linkState,
-                          close: monitorData[0] && !monitorData[0].linkState,
-                        }"
-                      >
-                      </div>
-                      <div>{{ monitorData[0] && !monitorData[0].linkState ? '不联动' : '联动' }}</div>
+                      <div :class="{ 'state-icon': true, open: monitorData[0].linkState, close: !monitorData[0].linkState }"> </div>
+                      <div>{{ !monitorData[0].linkState ? '不联动' : '联动' }}</div>
                     </div>
                   </div>
                 </div>
@@ -228,22 +198,13 @@
 <script lang="ts" setup name="nitrogenHome">
   import { onMounted, onUnmounted, ref, watch } from 'vue';
   import fourBorderBg from '../../../comment/components/fourBorderBg.vue';
-  import { mountedThree, destroy, setModelType, clearCssText } from '../nitrogen.threejs';
+  import { mountedThree, destroy } from '../nitrogen.threejs';
   import { list } from '../nitrogen.api';
   import ventBox1 from '/@/components/vent/ventBox1.vue';
-  import {
-    monitorDataGroupNum1,
-    monitorDataGroupNum2,
-    monitorDataGroupNum3,
-    airCompressorState,
-    showMonitorData,
-    monitorData,
-  } from '../nitrogen.data';
-  import { formatNum } from '/@/utils/ventutil';
+  import { monitorDataGroupNum, airCompressorState, showMonitorData, monitorData } from '../nitrogen.data';
 
   const loading = ref(true);
-  const monitorDataGroupNum = ref(4);
-  const monitorDataGroupFlag = ref(1);
+
   const kyjs = ['1号空压机', '2号空压机', '3号空压机', '4号空压机'];
   const cqgs = ['1号储气罐', '2号储气罐', '3号储气罐', '4号储气罐'];
 
@@ -257,7 +218,7 @@
           if (timer) {
             timer = null;
           }
-          await getMonitor(false);
+          await getMonitor();
         },
         flag ? 0 : 1000
       );
@@ -265,21 +226,18 @@
   }
 
   async function getDataSource() {
-    const res = await list({ devicetype: 'forcFan', pagetype: 'normal' });
-    let dataSource = res.msgTxt[0].datalist[0];
-    if (dataSource) {
-      monitorData.value = Object.assign(dataSource, dataSource.readData);
-    }
-    // dataSource.forEach((data, index) => {
-    //   const item = data.readData;
-    //   Object.assign(item, data);
-    //   item.compressRunSigF1 = item.compressRunSigF1 ? true : false
-    //   airCompressorState.value[index].id = item.id
-    //   airCompressorState.value[index].compressRunSigF1 = item.compressRunSigF1
-    //   airCompressorState.value[index].controlModel = item.controlModel === 'LOC' ? true : false
-    //   monitorData.value[index] = item
-    // });
-    // monitorDataGroupNum.value = monitorData.value.length
+    const res = await list({ devicetype: 'pressurefan', pagetype: 'normal' });
+    const dataSource = res.msgTxt[0].datalist || [];
+    dataSource.forEach((data, index) => {
+      const item = data.readData;
+      Object.assign(item, data);
+      item.compressRunSigF1 = item.compressRunSigF1 ? true : false;
+      airCompressorState.value[index].id = item.id;
+      airCompressorState.value[index].compressRunSigF1 = item.compressRunSigF1;
+      airCompressorState.value[index].controlModel = item.controlModel === 'LOC' ? true : false;
+      monitorData.value[index] = item;
+    });
+    monitorDataGroupNum.value = monitorData.value.length;
     loading.value = false;
   }
 
@@ -297,20 +255,14 @@
 
   function handlerControlModel(data) {}
 
-  watch(monitorDataGroupFlag, (newVal) => {
-    if (newVal == 1) {
-      setModelType('compressor1');
-    }
-    if (newVal == 2) {
-      setModelType('compressor2');
+  watch(monitorDataGroupNum, (newVal) => {
+    if (newVal) {
+      destroy();
+      mountedThree(newVal);
     }
   });
-
   onMounted(async () => {
-    mountedThree(monitorDataGroupNum3).then(async () => {
-      await getMonitor(true);
-      setModelType('compressor1');
-    });
+    await getMonitor(true);
   });
 
   onUnmounted(() => {
@@ -331,25 +283,9 @@
     display: flex;
     justify-content: center;
     position: relative;
-    .total-data {
-      position: absolute;
-      color: #e4cd00;
-      z-index: 9;
-      top: 50px;
-      right: 30px;
-      // display: flex;
-      font-size: 18px;
-      .item {
-        width: 200px;
-        margin-left: 30px;
-        .val {
-          color: #00d8ff;
-        }
-      }
-    }
   }
 
-  .compressorCss3D-box {
+  #compressorCss3D {
     .modal-monitor {
       position: absolute;
       left: 0px;
@@ -469,23 +405,14 @@
     justify-content: center;
     align-items: center;
     pointer-events: none;
-    top: 60px;
+    top: 100px;
     .nitrogen-container {
       width: 100%;
       height: calc(100%);
       display: flex;
       justify-content: space-between;
       margin-bottom: 100px;
-      position: relative;
-      .device-state {
-        width: 100%;
-        position: absolute;
-        top: 20px;
-        color: #e90000;
-        display: flex;
-        justify-content: center;
-        font-size: 20px;
-      }
+
       .top-box {
         width: 100%;
         padding: 10px;
@@ -847,65 +774,4 @@
       }
     }
   }
-  .tab-button-box {
-    display: inline-block;
-    position: relative;
-    padding: 5px;
-    // border: 1px transparent solid;
-    border-radius: 5px;
-    margin-left: 8px;
-    margin-right: 8px;
-    width: auto;
-    // height: 40px;
-    // border: 1px solid #65dbea;
-    height: 35px !important;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    color: #fff;
-    padding: 0 15px 5px 15px;
-    cursor: pointer;
-    &:hover {
-      background: linear-gradient(#2cd1ff55, #1eb0ff55);
-    }
-    &::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);
-    }
-    &::after {
-      width: calc(100% + 32px);
-      height: 10px;
-      content: '';
-      position: absolute;
-      top: 28px;
-      right: 0;
-      left: -16px;
-      bottom: 0;
-      z-index: -1;
-      border-radius: inherit; /*important*/
-      background: url('/@/assets/images/vent/short-light.png') no-repeat;
-      background-position: center;
-      background-size: 100%;
-      z-index: 999;
-    }
-  }
-
-  .tab-button-box-active {
-    border: 1px solid #66989e !important;
-    &:hover {
-      background: none !important;
-    }
-    &::before {
-      background: linear-gradient(#1fa6cbcc, #127cb5cc) !important;
-    }
-  }
 </style>

+ 130 - 442
src/views/vent/monitorManager/nitrogen/components/nitrogenHome1.vue

@@ -1,196 +1,91 @@
 <template>
   <div id="compressor3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
   <div
-    v-show="monitorDataGroupFlag == 1"
     id="compressorCss3D"
     class="threejs-Object-CSS compressorCss3D-box"
     style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px"
   >
-    <!-- <a-spin :spinning="loading" /> -->
-    <div v-for="(groupNum, index) in monitorDataGroupNum1" :key="index" class="modal-monitor">
-      <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号空压机 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">机头温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_HeadTemp`] ? monitorData[`PRE${groupNum}_CPR_HeadTemp`] : '-' }}</span
-            ><span class="unit"></span>℃</span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">冷却温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_CoolantTemp`] ? monitorData[`PRE${groupNum}_CPR_CoolantTemp`] : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">排气温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] ? monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="signal-item">
-          <div class="signal"
-            ><span class="monitor-title">运行信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-run': monitorData[`PRE${groupNum}_MOT_Running`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Running`] != '1',
-              }"
-            ></span>
+    <div v-for="(groupNum, index) in monitorDataGroup" :key="index" class="modal-monitor">
+      <fourBorderBg :class="`kyj${index}`" :id="`nitrogenMonitor${groupNum}`">
+        <div class="title">{{ kyjs[index] }} </div>
+        <template v-for="(preMonitor, preMonitorIndex) in preMonitorList" :key="preMonitorIndex">
+          <div v-if="preMonitor.code !== 'signal'" class="monitor-item">
+            <span class="monitor-title">{{ preMonitor.title }}:</span>
+            <span class="monitor-val"
+              ><span class="val">{{
+                monitorData[preMonitor.code.replace(prefix[0], `${prefix[0]}${groupNum}`)]
+                  ? formatNum(monitorData[preMonitor.code.replace(prefix[0], `${prefix[0]}${groupNum}`)])
+                  : '-'
+              }}</span
+              ><span class="unit">{{ preMonitor.unit }}</span></span
+            >
           </div>
-          <div class="signal"
-            ><span class="monitor-title">故障信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-warning': monitorData[`PRE${groupNum}_MOT_Fault`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Fault`] != '1',
-              }"
-            ></span>
-          </div>
-        </div>
-      </fourBorderBg>
-      <fourBorderBg :class="`cqg${groupNum}`" :id="`cqgMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号储气罐 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">气囊温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_VLS_Temp`] ? monitorData[`PRE${groupNum}_VLS_Temp`] : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <!-- <div class="monitor-item">
-              <span class="monitor-title">气囊压力<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverPress'] ?
-                monitorData[groupNum - 1]['airReceiverPress'] : '-' }}</span><span class="unit">Mpa</span></span>
+          <div v-else class="signal-item">
+            <div class="signal" v-for="(signal, childIndex) in preMonitor.child" :key="childIndex">
+              <span class="monitor-title">{{ signal.title }}</span>
+              <span
+                :class="{
+                  'signal-round': true,
+                  'signal-round-run': signal.title != '故障信号' && monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] == '1',
+                  'signal-round-warning': signal.title == '故障信号' && monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] == '1',
+                  'signal-round-gry': monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] != '1',
+                }"
+              ></span>
             </div>
-            <div class="monitor-item">
-              <span class="monitor-title">气囊流量<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverFlow'] ?
-                monitorData[groupNum - 1]['airReceiverFlow'] : '-' }}</span><span class="unit">m³/k</span></span>
-            </div> -->
-      </fourBorderBg>
-    </div>
-  </div>
-  <div
-    v-show="monitorDataGroupFlag == 2"
-    id="compressorCss3D1"
-    class="threejs-Object-CSS compressorCss3D-box"
-    style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 3; top: 0px; left: 0px"
-  >
-    <div v-for="(groupNum, index) in monitorDataGroupNum2" :key="index" class="modal-monitor">
-      <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号空压机 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">机头温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_HeadTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_HeadTemp`]) : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">冷却温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{
-              monitorData[`PRE${groupNum}_CPR_CoolantTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_CoolantTemp`]) : '-'
-            }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">排气温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{
-              monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_ExhaustTemp`]) : '-'
-            }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="signal-item">
-          <div class="signal"
-            ><span class="monitor-title">运行信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-run': monitorData[`PRE${groupNum}_MOT_Running`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Running`] != '1',
-              }"
-            ></span>
-          </div>
-          <div class="signal"
-            ><span class="monitor-title">故障信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-warning': monitorData[`PRE${groupNum}_MOT_Fault`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Fault`] != '1',
-              }"
-            ></span>
           </div>
-        </div>
+        </template>
       </fourBorderBg>
-      <fourBorderBg :class="`cqg${groupNum}`" :id="`cqgMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号储气罐 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">气囊温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_VLS_Temp`] ? formatNum(monitorData[`PRE${groupNum}_VLS_Temp`]) : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <!-- <div class="monitor-item">
-              <span class="monitor-title">气囊压力<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverPress'] ?
-                monitorData[groupNum - 1]['airReceiverPress'] : '-' }}</span><span class="unit">Mpa</span></span>
-            </div>
-            <div class="monitor-item">
-              <span class="monitor-title">气囊流量<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverFlow'] ?
-                monitorData[groupNum - 1]['airReceiverFlow'] : '-' }}</span><span class="unit">m³/k</span></span>
-            </div> -->
+      <fourBorderBg :class="`cqg${index}`" :id="`cqgMonitor${groupNum}`">
+        <div class="title">{{ cqgs[index] }}</div>
+        <template v-for="(cqgMonitor, cqgMonitorIndex) in cqgMonitorList" :key="cqgMonitorIndex">
+          <div class="monitor-item">
+            <span class="monitor-title">{{ cqgMonitor.title }}:</span>
+            <span class="monitor-val"
+              ><span class="val">{{
+                monitorData[cqgMonitor.code.replace(prefix[0], `${prefix[1]}${groupNum}`)]
+                  ? formatNum(monitorData[cqgMonitor.code.replace(prefix[1], `${prefix[1]}${groupNum}`)])
+                  : '-'
+              }}</span
+              ><span class="unit">{{ cqgMonitor.unit }}</span></span
+            >
+          </div>
+        </template>
       </fourBorderBg>
     </div>
   </div>
   <div class="nitrogen-home">
     <div style="position: absolute; color: #fff; top: 30px; pointer-events: auto; display: flex">
-      <span
+      <div
+        v-for="(sysItem, sysIndex) in monitorDataGroupArr"
+        :key="sysIndex"
         class="tab-button-box"
-        :class="{ 'tab-button-box-active': monitorDataGroupFlag == 1 }"
-        @click="setMonitorGroupNum(monitorDataGroupNum1, 1)"
-        >压风系统1</span
-      >
-      <span
-        class="tab-button-box"
-        :class="{ 'tab-button-box-active': monitorDataGroupFlag == 2 }"
-        @click="setMonitorGroupNum(monitorDataGroupNum2, 2)"
-        >压风系统2</span
+        :class="{ 'tab-button-box-active': monitorDataGroupFlag == sysIndex + 1 }"
+        @click="setMonitorGroupNum(monitorDataGroup1, sysIndex + 1)"
+        >{{ '压风系统' + (sysIndex + 1) }} (运行: <p style="padding: 0 5px"></p
+        ><span
+          :class="{
+            'signal-round': true,
+            'signal-round-run': sysStateList[sysIndex] && sysStateList[sysIndex].isRun,
+            'signal-round-gry': sysStateList[sysIndex] && !sysStateList[sysIndex].isRun,
+          }"
+        ></span>
+        <p style="padding: 0 5px"></p>故障:<p style="padding: 0 5px"></p
+        ><span
+          :class="{
+            'signal-round': true,
+            'signal-round-warning': sysStateList[sysIndex] && sysStateList[sysIndex].fault,
+            'signal-round-gry': sysStateList[sysIndex] && !sysStateList[sysIndex].fault,
+          }"
+        ></span
+        ><p style="padding: 0 5px"></p> )</div
       >
     </div>
     <div class="total-data">
       <div class="vent-flex-row">
         <div class="item"
-          >总流量(m³/min):<span class="val">{{
-            monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`]
-              ? formatNum(monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`])
-              : '-'
-          }}</span></div
-        >
-        <div class="item"
-          >总压力(bar):<span class="val">{{
-            monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`]
-              ? formatNum(monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`])
-              : '-'
-          }}</span></div
+          >总管压力(bar):<span class="val">{{ monitorData[`MainPipePressure`] ? formatNum(monitorData[`MainPipePressure`]) : '-' }}</span></div
         >
       </div>
-      <div class="" style="margin-left: 30px; margin-top: 10px">
-        <div v-if="Number(monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`]) < 0" style="color: red">总流量异常</div>
-        <div v-if="Number(monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`]) < 0" style="color: red">总压力异常</div>
-      </div>
     </div>
     <div class="nitrogen-container">
       <div v-if="monitorData['netStatus'] == 0" class="device-state">网络断开</div>
@@ -198,29 +93,29 @@
         <!-- 左边监测数据 -->
         <div class="lr-box left-box">
           <div class="left-container">
-            <div class="item item-l" v-for="(groupNum, index) in monitorDataGroupNum" :key="index">
+            <div class="item item-l" v-for="(groupNum, index) in monitorDataGroup" :key="index">
               <div class="monitor-box">
                 <ventBox1>
                   <template #title>
-                    <div>{{ groupNum }}号压机</div>
+                    <div>{{ groupNum }}号压机</div>
                   </template>
                   <template #container>
-                    <div class="state-item" v-for="(data, index) in showMonitorData" :key="index">
-                      <div class="item-col">
-                        <span class="state-title">{{ Object.values(data)[0] }} :</span>
-                        <span class="state-val">{{
-                          monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)] >= 0
-                            ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)]))
-                            : '-'
-                        }}</span>
-                      </div>
-                      <div class="item-col">
-                        <span class="state-title">{{ Object.values(data)[1] }} :</span>
-                        <span class="state-val">{{
-                          monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)] >= 0
-                            ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)]))
+                    <div class="state-item">
+                      <div class="item-col" v-for="(preFan, preFanIndex) in preFanMonitorData" :key="preFanIndex">
+                        <span class="state-title">{{ preFan.title + (preFan.unit !== 'signal' ? `(${preFan.unit})` : '') }}</span>
+                        <span v-if="preFan.unit !== 'signal'" class="state-val">{{
+                          monitorData[preFan.code.replace(prefix[2], prefix[2] + groupNum)] >= 0
+                            ? formatNum(Number(monitorData[preFan.code.replace(prefix[2], prefix[2] + groupNum)]))
                             : '-'
                         }}</span>
+                        <span
+                          v-else
+                          :class="{
+                            'signal-round': true,
+                            'signal-round-warning': monitorData[preFan.code.replace(prefix[2], `${prefix[2]}${groupNum}`)] == '1',
+                            'signal-round-gry': monitorData[preFan.code.replace(prefix[2], `${prefix[2]}${groupNum}`)] != '1',
+                          }"
+                        ></span>
                       </div>
                     </div>
                   </template>
@@ -229,83 +124,6 @@
             </div>
           </div>
         </div>
-        <!-- 右边控制状态 -->
-        <div class="lr-box right-box" style="display: none">
-          <ventBox1>
-            <template #title>
-              <div>远程控制</div>
-            </template>
-            <template #container>
-              <div class="control-group">
-                <div class="control-item" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
-                  <div class="control-item-title">{{ kyjs[groupNum - 1] }}</div>
-                  <div class="control-item-state">
-                    <a-switch
-                      v-model="airCompressorState[groupNum - 1][`compressRunSigF1`]"
-                      size="small"
-                      checked-children="开启"
-                      un-checked-children="关闭"
-                      :disabled="airCompressorState[groupNum - 1][`controlModel`]"
-                      @change="handlerDevice(airCompressorState[groupNum - 1])"
-                    />
-                  </div>
-                </div>
-                <div class="control-item" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
-                  <div class="control-item-title">{{ cqgs[groupNum - 1] }}</div>
-                  <div class="control-item-state">
-                    <a-switch
-                      v-model="airCompressorState[groupNum - 1][`compressRunSigF1`]"
-                      size="small"
-                      checked-children="开启"
-                      un-checked-children="关闭"
-                      :disabled="airCompressorState[groupNum - 1][`controlModel`]"
-                      @change="handlerDevice(airCompressorState[groupNum - 1])"
-                    />
-                  </div>
-                </div>
-
-                <a-divider style="height: 1px; background-color: #d7d7d755" />
-                <div class="control-btn-group vent-margin-b-20">
-                  <div class="control-left-box">
-                    <div class="btn-box">
-                      <span @click="handlerDevice({ remote: true })">远程</span>
-                      <span @click="handlerDevice({ remote: false })">就地</span>
-                    </div>
-                    <div class="icon-box" :class="{ 'remote-icon-box': true }">
-                      <div class="icon"></div>
-                    </div>
-                  </div>
-                  <div class="control-right-box">
-                    <div class="control-item-title">是否开启联动</div>
-                    <div class="item-data-box">
-                      <div
-                        :class="{
-                          'state-icon': true,
-                          open: monitorData[0] && monitorData[0].linkState,
-                          close: monitorData[0] && !monitorData[0].linkState,
-                        }"
-                      >
-                      </div>
-                      <div>{{ monitorData[0] && !monitorData[0].linkState ? '不联动' : '联动' }}</div>
-                    </div>
-                  </div>
-                </div>
-              </div>
-            </template>
-          </ventBox1>
-
-          <!-- <div class="control-item">
-              <div class="control-item-l">
-                <span class="round"></span>
-                <span>控制模式</span>
-              </div>
-              <div>
-                <a-switch v-model="airCompressorState[0][`controlModel`]" checked-children="就地" un-checked-children="远程"
-                  @change="handlerControlModel(airCompressorState[0])">
-                </a-switch>
-              </div>
-            </div> -->
-        </div>
       </div>
     </div>
   </div>
@@ -313,17 +131,34 @@
 <script lang="ts" setup name="nitrogenHome">
   import { onMounted, onUnmounted, ref, watch } from 'vue';
   import fourBorderBg from '../../../comment/components/fourBorderBg.vue';
-  import { mountedThree, destroy, setModelType, clearCssText } from '../nitrogen.threejs';
+  import { mountedThree, destroy, setModelType } from '../nitrogen.threejs';
   import { list } from '../nitrogen.api';
   import ventBox1 from '/@/components/vent/ventBox1.vue';
-  import { monitorDataGroupNum1, monitorDataGroupNum2, airCompressorState, showMonitorData, monitorData } from '../nitrogen.data';
+  // 锦界
+  // import { monitorDataGroupArr, preFanMonitorData, monitorData, preMonitorList, cqgMonitorList, prefix, getSysState } from '../nitrogen.dataJj';
+  // import type { State } from '../nitrogen.dataJj';
+  // 布尔台
+  import { monitorDataGroupArr, preFanMonitorData, monitorData, preMonitorList, cqgMonitorList, prefix, getSysState } from '../nitrogen.dataBet';
+  import type { State } from '../nitrogen.dataBet';
+  // 活鸡兔
+  // import { monitorDataGroupArr, preFanMonitorData, monitorData, preMonitorList, cqgMonitorList, prefix, getSysState } from '../nitrogen.dataHjt';
+  // import type { State } from '../nitrogen.dataHjt';
+  // 大柳塔
+  // import { monitorDataGroupArr, preFanMonitorData, monitorData, preMonitorList, cqgMonitorList, prefix, getSysState } from '../nitrogen.dataDlt';
+  // import type { State } from '../nitrogen.dataDlt';
+  // 窑街三矿
+  // import { monitorDataGroupArr, preFanMonitorData, monitorData, preMonitorList, cqgMonitorList, prefix, getSysState } from '../nitrogen.dataYJ';
+  // import type { State } from '../nitrogen.dataYJ';
+
   import { formatNum } from '/@/utils/ventutil';
 
   const loading = ref(true);
-  const monitorDataGroupNum = ref(monitorDataGroupNum1);
-  const monitorDataGroupFlag = ref(1);
-  const kyjs = ['1号空压机', '2号空压机', '3号空压机', '4号空压机'];
-  const cqgs = ['1号储气罐', '2号储气罐', '3号储气罐', '4号储气罐'];
+  const monitorDataGroupFlag = ref(0);
+  const monitorDataGroup = ref([]);
+  const kyjs = ref([]);
+  const cqgs = ref([]);
+  const monitorData = ref([]);
+  const sysStateList = ref<State[]>([]);
 
   // https获取监测数据
   let timer: null | NodeJS.Timeout = null;
@@ -335,7 +170,7 @@
           if (timer) {
             timer = null;
           }
-          await getMonitor();
+          await getMonitor(false);
         },
         flag ? 0 : 1000
       );
@@ -344,191 +179,44 @@
 
   async function getDataSource() {
     const res = await list({ devicetype: 'forcFan', pagetype: 'normal' });
-    let dataSource = res.msgTxt[0].datalist[0];
-    // dataSource =
-    //   {
-    //     "msgType": null,
-    //     "deviceID": "1705212847586627592",
-    //     "strname": "压风机系统",
-    //     "strinstallpos": "压风机系统",
-    //     "fsectarea": "null",
-    //     "stationname": "压风机系统分站",
-    //     "deviceType": "forcFan",
-    //     "typeName": null,
-    //     "netStatus": 1,
-    //     "warnFlag": 0,
-    //     "warnLevel": null,
-    //     "warnLevel_str": null,
-    //     "warnTime": null,
-    //     "readTime": "2023-10-24 08:47:27",
-    //     "warnDes": "",
-    //     "frontGateOpenCtrl": null,
-    //     "rearGateOpenCtrl": null,
-    //     "readData": {
-    //       "PRE1_MOT_PhaseATemp": "526",
-    //       "PRE3_CPR_CoolantTemp": "12",
-    //       "PRE4_CPR_HeadTemp": "13",
-    //       "PRE2_MOT_PhaseATempAlarm": "0",
-    //       "PRE5_MOT_Fault": "0",
-    //       "PRE4_MOT_PhaseATempStop": "0",
-    //       "PRE4_CPR_LoadPre": "65",
-    //       "PRE5_CPR_LoadPre": "62",
-    //       "PRE4_MOT_CtrlMode": "1",
-    //       "PRE2_CPR_LoadorUnload": "1",
-    //       "PRE3_MOT_PhaseBTemp": "133",
-    //       "PRE1_CPR_ExhaustPre": "66",
-    //       "PRE1_MOT_PhaseATempAlarm": "0",
-    //       "PRE5_CPR_UnLoadPre": "69",
-    //       "PRE4_MOT_PhaseATemp": "129",
-    //       "PRE5_MOT_PhaseCTemp": "685",
-    //       "PRE5_MOT_PhaseATemp": "681",
-    //       "PRE5_VLS_Temp": "590",
-    //       "PRE1_CPR_LoadTime": "8344",
-    //       "PRE2_CPR_LoadTime": "5553",
-    //       "PRE4_CPR_LoadorUnload": "0",
-    //       "PRE5_MOT_PhaseATempAlarm": "0",
-    //       "PRE3_CPR_LoadTime": "4511",
-    //       "PRE5_CPR_LoadTime": "6032",
-    //       "PRE1_MOT_PhaseATempStop": "0",
-    //       "PRE2_MOT_CompProtFault": "0",
-    //       "PRE5_MOT_PhaseATempStop": "0",
-    //       "PRE3_MOT_PhaseATempStop": "0",
-    //       "PRE1_VLS_Temp": "436",
-    //       "PRE2_CPR_ExhaustPre": "71",
-    //       "PRE5_MOT_CtrlMode": "1",
-    //       "PRE3_CPR_ExhaustTemp": "10",
-    //       "PRE3_MOT_TotalRunTime": "5342",
-    //       "P RE2_MOT_PhaseATemp": "541",
-    //       "PRE4_MOT_PhaseCTemp": "130",
-    //       "PRE4_MOT_PhaseATempAlarm": "0",
-    //       "timestamp": "1698108447720",
-    //       "PRE3_VLS_Temp": "219",
-    //       "PRE1_HostorLoc": "0",
-    //       "PRE2_MOT_Running": "1",
-    //       "PRE1_CPR_LoadPre": "65",
-    //       "PRE1_MOT_Running": "1",
-    //       "PRE4_MOT_Fault": "0",
-    //       "PRE2_CPR_LoadPre": "65",
-    //       "PRE3_MOT_Running": "0",
-    //       "PRE4_MOT_Running": "0",
-    //       "PRE3_CPR_LoadPre": "65",
-    //       "PRE1_MOT_CtrlMode": "1",
-    //       "PRE3_MOT_CtrlMode": "1",
-    //       "PRE3_CPR_LoadorUnload": "0",
-    //       "PRE2_MOT_PhaseCTemp": "550",
-    //       "PRE1_CPR_CoolantTemp": "71",
-    //       "PRE1_MOT_PhaseBTemp": "539",
-    //       "PRE3_MOT_PhaseATempAlarm": "0",
-    //       "PRE5_MOT_Running": "1",
-    //       "PRE1_MOT_Fault": "0",
-    //       "PRE4_CPR_ExhaustPre": "66",
-    //       "PRE4_CPR_CoolantTemp": "12",
-    //       "PRE5_CPR_ExhaustTemp": "76",
-    //       "PRE2_CPR_HeadTemp": "89",
-    //       "PRE3_MOT_PhaseCTemp": "135",
-    //       "PRE4_CPR_LoadTime": "5084",
-    //       "sign": "0",
-    //       "PRE1_CPR_UnLoadPre": "72",
-    //       "PRE4_HostorLoc": "0",
-    //       "PRE4_MOT_CompProtFault": "0",
-    //       "PRE1_CPR_LoadorUnload": "1",
-    //       "PRE3_CPR_ExhaustPre": "68",
-    //       "PRE2_CPR_ExhaustTemp": "77",
-    //       "PRE2_MOT_PhaseATempStop": "0",
-    //       "PRE5_MOT_CompProtFault": "0",
-    //       "PRE2_MOT_Fault": "0",
-    //       "PRE5_MOT_PhaseBTemp": "676",
-    //       "PRE3_MOT_PhaseATemp": "134",
-    //       "PRE4_MOT_PhaseBTemp": "130",
-    //       "PRE2_CPR_CoolantTemp": "66",
-    //       "PRE3_HostorLoc": "0",
-    //       "PRE4_MOT_TotalRunTime": "5104",
-    //       "PRE1_MOT_TotalRunTime": "8416",
-    //       "PRE3_MOT_CompProtFault": "0",
-    //       "PRE3_MOT_Fault": "0",
-    //       "PRE4_CPR_UnLoadPre": "72",
-    //       "PRE1_CPR_HeadTemp": "97",
-    //       "PRE2_HostorLoc": "0",
-    //       "PRE2_MOT_PhaseBTemp": "562",
-    //       "PRE3_CPR_HeadTemp": "13",
-    //       "PRE2_MOT_TotalRunTime": "5586",
-    //       "PRE5_CPR_HeadTemp": "95",
-    //       "PRE3_CPR_UnLoadPre": "72",
-    //       "PRE4_VLS_Temp": "166",
-    //       "PRE5_CPR_CoolantTemp": "70",
-    //       "PRE1_MOT_CompProtFault": "0",
-    //       "PRE5_MOT_TotalRunTime": "7825",
-    //       "PRE2_MOT_CtrlMode": "1",
-    //       "PRE5_CPR_ExhaustPre": "68",
-    //       "PRE1_MOT_PhaseCTemp": "544",
-    //       "PRE5_CPR_LoadorUnload": "1",
-    //       "PRE2_CPR_UnLoadPre": "72",
-    //       "PRE4_CPR_ExhaustTemp": "11",
-    //       "PRE2_VLS_Temp": "445",
-    //       "isRun": "-2",
-    //       "PRE5_HostorLoc": "0",
-    //       "PRE1_CPR_ExhaustTemp": "68"
-    //     },
-    //     "readDataDes": null,
-    //     "summaryHour": [],
-    //     "summaryDay": [],
-    //     "history": [],
-    //     "totalInfo": null,
-    //     "sign": null,
-    //     "cameras": [],
-    //     "links": [],
-    //     "other1": null,
-    //     "other2": null,
-    //     "other3": null
-    //   }
+    let dataSource = res.msgTxt[0] && res.msgTxt[0].datalist ? res.msgTxt[0].datalist[0] : [];
     if (dataSource) {
       monitorData.value = Object.assign(dataSource, dataSource.readData);
     }
-    // dataSource.forEach((data, index) => {
-    //   const item = data.readData;
-    //   Object.assign(item, data);
-    //   item.compressRunSigF1 = item.compressRunSigF1 ? true : false
-    //   airCompressorState.value[index].id = item.id
-    //   airCompressorState.value[index].compressRunSigF1 = item.compressRunSigF1
-    //   airCompressorState.value[index].controlModel = item.controlModel === 'LOC' ? true : false
-    //   monitorData.value[index] = item
-    // });
-    // monitorDataGroupNum.value = monitorData.value.length
     loading.value = false;
+    sysStateList.value = getSysState(monitorData.value);
   }
 
   function setMonitorGroupNum(num, flag) {
-    monitorDataGroupNum.value = num;
     monitorDataGroupFlag.value = flag;
   }
 
-  function handlerDevice(data) {
-    // if (data.length < 1) return
-    // handleAirCompressor({ id: data.id, compressRunF1: data.compressRunSigF1 }).then(res => {
-    //   if (res.success) {
-    //     message.success('操作成功')
-    //   } else {
-    //     message.warning(data.msg)
-    //   }
-    // })
+  function changeGroup(val) {
+    kyjs.value = val.map((item) => `${item}号空压机`);
+    cqgs.value = val.map((item) => `${item}号储气罐`);
+    monitorData.value = new Array(val.length).fill({
+      strName: '空压机',
+      compressGroupName: '',
+      compressExhaustPressF1: '-',
+      compressSeparatePressF1: '-',
+      compressHostTempF1: '-',
+      compressCrewTempF1: '-',
+      compressRunTimeF1: '-',
+      controlModel: 'LOC',
+    });
   }
-  function resetDevice(data) {}
-
-  function handlerControlModel(data) {}
 
   watch(monitorDataGroupFlag, (newVal) => {
-    if (newVal == 1) {
-      setModelType('compressor1');
-    }
-    if (newVal == 2) {
-      setModelType('compressor2');
-    }
+    const monitorGroup = monitorDataGroupArr[newVal - 1];
+    changeGroup(monitorGroup);
+    monitorDataGroup.value = monitorGroup;
+    setModelType(monitorGroup);
   });
 
   onMounted(async () => {
-    mountedThree(monitorDataGroupNum1, monitorDataGroupNum2).then(async () => {
+    mountedThree().then(async () => {
       await getMonitor(true);
-      setModelType('compressor1');
+      monitorDataGroupFlag.value = 1;
     });
   });
 
@@ -556,7 +244,7 @@
       z-index: 9;
       top: 50px;
       right: 30px;
-      //display: flex;
+      // display: flex;
       font-size: 18px;
       .item {
         width: 200px;
@@ -699,7 +387,7 @@
       .device-state {
         width: 100%;
         position: absolute;
-        top: 70px;
+        top: 20px;
         color: #e90000;
         display: flex;
         justify-content: center;
@@ -804,17 +492,17 @@
           }
 
           .state-item {
+            width: 100%;
             display: flex;
             flex-direction: row;
-            padding: 5px;
 
+            flex-wrap: wrap;
             .item-col {
               width: 50%;
               display: flex;
               justify-content: center;
               align-items: center;
-              padding-right: 4px;
-
+              padding: 5px;
               .state-title {
                 color: #ffffffcc;
                 flex: 9;

+ 116 - 442
src/views/vent/monitorManager/nitrogen/components/nitrogenHomeYJ.vue

@@ -1,195 +1,90 @@
 <template>
   <div id="compressor3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
   <div
-    v-show="monitorDataGroupFlag == 1"
     id="compressorCss3D"
     class="threejs-Object-CSS compressorCss3D-box"
     style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px"
   >
-    <!-- <a-spin :spinning="loading" /> -->
-    <div v-for="(groupNum, index) in monitorDataGroupNum1" :key="index" class="modal-monitor">
-      <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号空压机 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">机头温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_HeadTemp`] ? monitorData[`PRE${groupNum}_CPR_HeadTemp`] : '-' }}</span
-            ><span class="unit"></span>℃</span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">冷却温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_CoolantTemp`] ? monitorData[`PRE${groupNum}_CPR_CoolantTemp`] : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">排气温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] ? monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="signal-item">
-          <div class="signal"
-            ><span class="monitor-title">运行信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-run': monitorData[`PRE${groupNum}_MOT_Running`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Running`] != '1',
-              }"
-            ></span>
+    <div v-for="(groupNum, index) in monitorDataGroup" :key="index" class="modal-monitor">
+      <fourBorderBg :class="`kyj${index}`" :id="`nitrogenMonitor${groupNum}`">
+        <div class="title">{{ kyjs[index] }} </div>
+        <template v-for="(preMonitor, preMonitorIndex) in preMonitorList" :key="preMonitorIndex">
+          <div v-if="preMonitor.code !== 'signal'" class="monitor-item">
+            <span class="monitor-title">{{ preMonitor.title }}:</span>
+            <span class="monitor-val"
+              ><span class="val">{{
+                monitorData[preMonitor.code.replace(prefix[0], `${prefix[0]}${groupNum}`)]
+                  ? formatNum(monitorData[preMonitor.code.replace(prefix[0], `${prefix[0]}${groupNum}`)])
+                  : '-'
+              }}</span
+              ><span class="unit">{{ preMonitor.unit }}</span></span
+            >
           </div>
-          <div class="signal"
-            ><span class="monitor-title">故障信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-warning': monitorData[`PRE${groupNum}_MOT_Fault`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Fault`] != '1',
-              }"
-            ></span>
-          </div>
-        </div>
-      </fourBorderBg>
-      <fourBorderBg :class="`cqg${groupNum}`" :id="`cqgMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号储气罐 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">气囊温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_VLS_Temp`] ? monitorData[`PRE${groupNum}_VLS_Temp`] : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <!-- <div class="monitor-item">
-              <span class="monitor-title">气囊压力<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverPress'] ?
-                monitorData[groupNum - 1]['airReceiverPress'] : '-' }}</span><span class="unit">Mpa</span></span>
+          <div v-else class="signal-item">
+            <div class="signal" v-for="(signal, childIndex) in preMonitor.child" :key="childIndex">
+              <span class="monitor-title">{{ signal.title }}</span>
+              <span
+                :class="{
+                  'signal-round': true,
+                  'signal-round-run': signal.title != '故障信号' && monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] == '1',
+                  'signal-round-warning': signal.title == '故障信号' && monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] == '1',
+                  'signal-round-gry': monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] != '1',
+                }"
+              ></span>
             </div>
-            <div class="monitor-item">
-              <span class="monitor-title">气囊流量<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverFlow'] ?
-                monitorData[groupNum - 1]['airReceiverFlow'] : '-' }}</span><span class="unit">m³/k</span></span>
-            </div> -->
-      </fourBorderBg>
-    </div>
-  </div>
-  <div
-    v-show="monitorDataGroupFlag == 2"
-    id="compressorCss3D1"
-    class="threejs-Object-CSS compressorCss3D-box"
-    style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 3; top: 0px; left: 0px"
-  >
-    <div v-for="(groupNum, index) in monitorDataGroupNum2" :key="index" class="modal-monitor">
-      <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号空压机 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">机头温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_CPR_HeadTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_HeadTemp`]) : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">冷却温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{
-              monitorData[`PRE${groupNum}_CPR_CoolantTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_CoolantTemp`]) : '-'
-            }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="monitor-item">
-          <span class="monitor-title">排气温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{
-              monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_ExhaustTemp`]) : '-'
-            }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <div class="signal-item">
-          <div class="signal"
-            ><span class="monitor-title">运行信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-run': monitorData[`PRE${groupNum}_MOT_Running`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Running`] != '1',
-              }"
-            ></span>
-          </div>
-          <div class="signal"
-            ><span class="monitor-title">故障信号</span
-            ><span
-              :class="{
-                'signal-round': true,
-                'signal-round-warning': monitorData[`PRE${groupNum}_MOT_Fault`] == '1',
-                'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Fault`] != '1',
-              }"
-            ></span>
           </div>
-        </div>
+        </template>
       </fourBorderBg>
-      <fourBorderBg :class="`cqg${groupNum}`" :id="`cqgMonitor${groupNum}`">
-        <div class="title">{{ groupNum }}号储气罐 </div>
-        <div class="monitor-item">
-          <span class="monitor-title">气囊温度:</span>
-          <span class="monitor-val"
-            ><span class="val">{{ monitorData[`PRE${groupNum}_VLS_Temp`] ? formatNum(monitorData[`PRE${groupNum}_VLS_Temp`]) : '-' }}</span
-            ><span class="unit">℃</span></span
-          >
-        </div>
-        <!-- <div class="monitor-item">
-              <span class="monitor-title">气囊压力<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverPress'] ?
-                monitorData[groupNum - 1]['airReceiverPress'] : '-' }}</span><span class="unit">Mpa</span></span>
-            </div>
-            <div class="monitor-item">
-              <span class="monitor-title">气囊流量<span class="unit"></span>:</span>
-              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverFlow'] ?
-                monitorData[groupNum - 1]['airReceiverFlow'] : '-' }}</span><span class="unit">m³/k</span></span>
-            </div> -->
+      <fourBorderBg :class="`cqg${index}`" :id="`cqgMonitor${groupNum}`">
+        <div class="title">{{ cqgs[index] }}</div>
+        <template v-for="(cqgMonitor, cqgMonitorIndex) in cqgMonitorList" :key="cqgMonitorIndex">
+          <div class="monitor-item">
+            <span class="monitor-title">{{ cqgMonitor.title }}:</span>
+            <span class="monitor-val"
+              ><span class="val">{{
+                monitorData[cqgMonitor.code.replace(prefix[0], `${prefix[1]}${groupNum}`)]
+                  ? formatNum(monitorData[cqgMonitor.code.replace(prefix[1], `${prefix[1]}${groupNum}`)])
+                  : '-'
+              }}</span
+              ><span class="unit">{{ cqgMonitor.unit }}</span></span
+            >
+          </div>
+        </template>
       </fourBorderBg>
     </div>
   </div>
   <div class="nitrogen-home">
     <div style="position: absolute; color: #fff; top: 30px; pointer-events: auto; display: flex">
-      <span
+      <div
+        v-for="(sysItem, sysIndex) in monitorDataGroupArr"
+        :key="sysIndex"
         class="tab-button-box"
-        :class="{ 'tab-button-box-active': monitorDataGroupFlag == 1 }"
-        @click="setMonitorGroupNum(monitorDataGroupNum1, 1)"
-        >压风系统1</span
-      >
-      <span
-        class="tab-button-box"
-        :class="{ 'tab-button-box-active': monitorDataGroupFlag == 2 }"
-        @click="setMonitorGroupNum(monitorDataGroupNum2, 2)"
-        >压风系统2</span
+        :class="{ 'tab-button-box-active': monitorDataGroupFlag == sysIndex + 1 }"
+        @click="setMonitorGroupNum(monitorDataGroup1, sysIndex + 1)"
+        >{{ '压风系统' + (sysIndex + 1) }} (运行: <p style="padding: 0 5px"></p
+        ><span
+          :class="{
+            'signal-round': true,
+            'signal-round-run': sysStateList[sysIndex] && sysStateList[sysIndex].isRun,
+            'signal-round-gry': sysStateList[sysIndex] && !sysStateList[sysIndex].isRun,
+          }"
+        ></span>
+        <p style="padding: 0 5px"></p>故障:<p style="padding: 0 5px"></p
+        ><span
+          :class="{
+            'signal-round': true,
+            'signal-round-warning': sysStateList[sysIndex] && sysStateList[sysIndex].fault,
+            'signal-round-gry': sysStateList[sysIndex] && !sysStateList[sysIndex].fault,
+          }"
+        ></span
+        ><p style="padding: 0 5px"></p> )</div
       >
     </div>
     <div class="total-data">
       <div class="vent-flex-row">
         <div class="item"
-          >总流量(m³/min):<span class="val">{{
-            monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`]
-              ? formatNum(monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`])
-              : '-'
-          }}</span></div
+          >总管压力(bar):<span class="val">{{ monitorData[`MainPipePressure`] ? formatNum(monitorData[`MainPipePressure`]) : '-' }}</span></div
         >
-        <div class="item"
-          >总压力(bar):<span class="val">{{
-            monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`]
-              ? formatNum(monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`])
-              : '-'
-          }}</span></div
-        >
-      </div>
-      <div class="" style="margin-left: 30px; margin-top: 10px">
-        <div v-if="Number(monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`]) < 0" style="color: red">总流量异常</div>
-        <div v-if="Number(monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`]) < 0" style="color: red">总压力异常</div>
       </div>
     </div>
     <div class="nitrogen-container">
@@ -198,29 +93,29 @@
         <!-- 左边监测数据 -->
         <div class="lr-box left-box">
           <div class="left-container">
-            <div class="item item-l" v-for="(groupNum, index) in monitorDataGroupNum" :key="index">
+            <div class="item item-l" v-for="(groupNum, index) in monitorDataGroup" :key="index">
               <div class="monitor-box">
                 <ventBox1>
                   <template #title>
-                    <div>{{ groupNum }}号压机</div>
+                    <div>{{ groupNum }}号压机</div>
                   </template>
                   <template #container>
-                    <div class="state-item" v-for="(data, index) in showMonitorData" :key="index">
-                      <div class="item-col">
-                        <span class="state-title">{{ Object.values(data)[0] }} :</span>
-                        <span class="state-val">{{
-                          monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)] >= 0
-                            ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)]))
-                            : '-'
-                        }}</span>
-                      </div>
-                      <div class="item-col">
-                        <span class="state-title">{{ Object.values(data)[1] }} :</span>
-                        <span class="state-val">{{
-                          monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)] >= 0
-                            ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)]))
+                    <div class="state-item">
+                      <div class="item-col" v-for="(preFan, preFanIndex) in preFanMonitorData" :key="preFanIndex">
+                        <span class="state-title">{{ preFan.title + (preFan.unit !== 'signal' ? `(${preFan.unit})` : '') }}</span>
+                        <span v-if="preFan.unit !== 'signal'" class="state-val">{{
+                          monitorData[preFan.code.replace(prefix[2], prefix[2] + groupNum)] >= 0
+                            ? formatNum(Number(monitorData[preFan.code.replace(prefix[2], prefix[2] + groupNum)]))
                             : '-'
                         }}</span>
+                        <span
+                          v-else
+                          :class="{
+                            'signal-round': true,
+                            'signal-round-warning': monitorData[preFan.code.replace(prefix[2], `${prefix[2]}${groupNum}`)] == '1',
+                            'signal-round-gry': monitorData[preFan.code.replace(prefix[2], `${prefix[2]}${groupNum}`)] != '1',
+                          }"
+                        ></span>
                       </div>
                     </div>
                   </template>
@@ -229,83 +124,6 @@
             </div>
           </div>
         </div>
-        <!-- 右边控制状态 -->
-        <div class="lr-box right-box" style="display: none">
-          <ventBox1>
-            <template #title>
-              <div>远程控制</div>
-            </template>
-            <template #container>
-              <div class="control-group">
-                <div class="control-item" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
-                  <div class="control-item-title">{{ kyjs[groupNum - 1] }}</div>
-                  <div class="control-item-state">
-                    <a-switch
-                      v-model="airCompressorState[groupNum - 1][`compressRunSigF1`]"
-                      size="small"
-                      checked-children="开启"
-                      un-checked-children="关闭"
-                      :disabled="airCompressorState[groupNum - 1][`controlModel`]"
-                      @change="handlerDevice(airCompressorState[groupNum - 1])"
-                    />
-                  </div>
-                </div>
-                <div class="control-item" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
-                  <div class="control-item-title">{{ cqgs[groupNum - 1] }}</div>
-                  <div class="control-item-state">
-                    <a-switch
-                      v-model="airCompressorState[groupNum - 1][`compressRunSigF1`]"
-                      size="small"
-                      checked-children="开启"
-                      un-checked-children="关闭"
-                      :disabled="airCompressorState[groupNum - 1][`controlModel`]"
-                      @change="handlerDevice(airCompressorState[groupNum - 1])"
-                    />
-                  </div>
-                </div>
-
-                <a-divider style="height: 1px; background-color: #d7d7d755" />
-                <div class="control-btn-group vent-margin-b-20">
-                  <div class="control-left-box">
-                    <div class="btn-box">
-                      <span @click="handlerDevice({ remote: true })">远程</span>
-                      <span @click="handlerDevice({ remote: false })">就地</span>
-                    </div>
-                    <div class="icon-box" :class="{ 'remote-icon-box': true }">
-                      <div class="icon"></div>
-                    </div>
-                  </div>
-                  <div class="control-right-box">
-                    <div class="control-item-title">是否开启联动</div>
-                    <div class="item-data-box">
-                      <div
-                        :class="{
-                          'state-icon': true,
-                          open: monitorData[0] && monitorData[0].linkState,
-                          close: monitorData[0] && !monitorData[0].linkState,
-                        }"
-                      >
-                      </div>
-                      <div>{{ monitorData[0] && !monitorData[0].linkState ? '不联动' : '联动' }}</div>
-                    </div>
-                  </div>
-                </div>
-              </div>
-            </template>
-          </ventBox1>
-
-          <!-- <div class="control-item">
-              <div class="control-item-l">
-                <span class="round"></span>
-                <span>控制模式</span>
-              </div>
-              <div>
-                <a-switch v-model="airCompressorState[0][`controlModel`]" checked-children="就地" un-checked-children="远程"
-                  @change="handlerControlModel(airCompressorState[0])">
-                </a-switch>
-              </div>
-            </div> -->
-        </div>
       </div>
     </div>
   </div>
@@ -313,17 +131,20 @@
 <script lang="ts" setup name="nitrogenHome">
   import { onMounted, onUnmounted, ref, watch } from 'vue';
   import fourBorderBg from '../../../comment/components/fourBorderBg.vue';
-  import { mountedThree, destroy, setModelType, clearCssText } from '../nitrogen.threejs';
+  import { mountedThree, destroy, setModelType } from '../nitrogen.threejs';
   import { list } from '../nitrogen.api';
   import ventBox1 from '/@/components/vent/ventBox1.vue';
-  import { monitorDataGroupNum1, monitorDataGroupNum2, airCompressorState, showMonitorData, monitorData } from '../nitrogen.data';
+  import { monitorDataGroupArr, preFanMonitorData, monitorData, preMonitorList, cqgMonitorList, prefix, getSysState } from '../nitrogen.dataYJ';
+  import type { State } from '../nitrogen.dataYJ';
   import { formatNum } from '/@/utils/ventutil';
 
   const loading = ref(true);
-  const monitorDataGroupNum = ref(monitorDataGroupNum1);
-  const monitorDataGroupFlag = ref(1);
-  const kyjs = ['1号空压机', '2号空压机', '3号空压机', '4号空压机'];
-  const cqgs = ['1号储气罐', '2号储气罐', '3号储气罐', '4号储气罐'];
+  const monitorDataGroupFlag = ref(0);
+  const monitorDataGroup = ref([]);
+  const kyjs = ref([]);
+  const cqgs = ref([]);
+  const monitorData = ref([]);
+  const sysStateList = ref<State[]>([]);
 
   // https获取监测数据
   let timer: null | NodeJS.Timeout = null;
@@ -335,7 +156,7 @@
           if (timer) {
             timer = null;
           }
-          await getMonitor();
+          await getMonitor(false);
         },
         flag ? 0 : 1000
       );
@@ -344,191 +165,44 @@
 
   async function getDataSource() {
     const res = await list({ devicetype: 'forcFan', pagetype: 'normal' });
-    let dataSource = res.msgTxt[0].datalist[0];
-    // dataSource =
-    //   {
-    //     "msgType": null,
-    //     "deviceID": "1705212847586627592",
-    //     "strname": "压风机系统",
-    //     "strinstallpos": "压风机系统",
-    //     "fsectarea": "null",
-    //     "stationname": "压风机系统分站",
-    //     "deviceType": "forcFan",
-    //     "typeName": null,
-    //     "netStatus": 1,
-    //     "warnFlag": 0,
-    //     "warnLevel": null,
-    //     "warnLevel_str": null,
-    //     "warnTime": null,
-    //     "readTime": "2023-10-24 08:47:27",
-    //     "warnDes": "",
-    //     "frontGateOpenCtrl": null,
-    //     "rearGateOpenCtrl": null,
-    //     "readData": {
-    //       "PRE1_MOT_PhaseATemp": "526",
-    //       "PRE3_CPR_CoolantTemp": "12",
-    //       "PRE4_CPR_HeadTemp": "13",
-    //       "PRE2_MOT_PhaseATempAlarm": "0",
-    //       "PRE5_MOT_Fault": "0",
-    //       "PRE4_MOT_PhaseATempStop": "0",
-    //       "PRE4_CPR_LoadPre": "65",
-    //       "PRE5_CPR_LoadPre": "62",
-    //       "PRE4_MOT_CtrlMode": "1",
-    //       "PRE2_CPR_LoadorUnload": "1",
-    //       "PRE3_MOT_PhaseBTemp": "133",
-    //       "PRE1_CPR_ExhaustPre": "66",
-    //       "PRE1_MOT_PhaseATempAlarm": "0",
-    //       "PRE5_CPR_UnLoadPre": "69",
-    //       "PRE4_MOT_PhaseATemp": "129",
-    //       "PRE5_MOT_PhaseCTemp": "685",
-    //       "PRE5_MOT_PhaseATemp": "681",
-    //       "PRE5_VLS_Temp": "590",
-    //       "PRE1_CPR_LoadTime": "8344",
-    //       "PRE2_CPR_LoadTime": "5553",
-    //       "PRE4_CPR_LoadorUnload": "0",
-    //       "PRE5_MOT_PhaseATempAlarm": "0",
-    //       "PRE3_CPR_LoadTime": "4511",
-    //       "PRE5_CPR_LoadTime": "6032",
-    //       "PRE1_MOT_PhaseATempStop": "0",
-    //       "PRE2_MOT_CompProtFault": "0",
-    //       "PRE5_MOT_PhaseATempStop": "0",
-    //       "PRE3_MOT_PhaseATempStop": "0",
-    //       "PRE1_VLS_Temp": "436",
-    //       "PRE2_CPR_ExhaustPre": "71",
-    //       "PRE5_MOT_CtrlMode": "1",
-    //       "PRE3_CPR_ExhaustTemp": "10",
-    //       "PRE3_MOT_TotalRunTime": "5342",
-    //       "P RE2_MOT_PhaseATemp": "541",
-    //       "PRE4_MOT_PhaseCTemp": "130",
-    //       "PRE4_MOT_PhaseATempAlarm": "0",
-    //       "timestamp": "1698108447720",
-    //       "PRE3_VLS_Temp": "219",
-    //       "PRE1_HostorLoc": "0",
-    //       "PRE2_MOT_Running": "1",
-    //       "PRE1_CPR_LoadPre": "65",
-    //       "PRE1_MOT_Running": "1",
-    //       "PRE4_MOT_Fault": "0",
-    //       "PRE2_CPR_LoadPre": "65",
-    //       "PRE3_MOT_Running": "0",
-    //       "PRE4_MOT_Running": "0",
-    //       "PRE3_CPR_LoadPre": "65",
-    //       "PRE1_MOT_CtrlMode": "1",
-    //       "PRE3_MOT_CtrlMode": "1",
-    //       "PRE3_CPR_LoadorUnload": "0",
-    //       "PRE2_MOT_PhaseCTemp": "550",
-    //       "PRE1_CPR_CoolantTemp": "71",
-    //       "PRE1_MOT_PhaseBTemp": "539",
-    //       "PRE3_MOT_PhaseATempAlarm": "0",
-    //       "PRE5_MOT_Running": "1",
-    //       "PRE1_MOT_Fault": "0",
-    //       "PRE4_CPR_ExhaustPre": "66",
-    //       "PRE4_CPR_CoolantTemp": "12",
-    //       "PRE5_CPR_ExhaustTemp": "76",
-    //       "PRE2_CPR_HeadTemp": "89",
-    //       "PRE3_MOT_PhaseCTemp": "135",
-    //       "PRE4_CPR_LoadTime": "5084",
-    //       "sign": "0",
-    //       "PRE1_CPR_UnLoadPre": "72",
-    //       "PRE4_HostorLoc": "0",
-    //       "PRE4_MOT_CompProtFault": "0",
-    //       "PRE1_CPR_LoadorUnload": "1",
-    //       "PRE3_CPR_ExhaustPre": "68",
-    //       "PRE2_CPR_ExhaustTemp": "77",
-    //       "PRE2_MOT_PhaseATempStop": "0",
-    //       "PRE5_MOT_CompProtFault": "0",
-    //       "PRE2_MOT_Fault": "0",
-    //       "PRE5_MOT_PhaseBTemp": "676",
-    //       "PRE3_MOT_PhaseATemp": "134",
-    //       "PRE4_MOT_PhaseBTemp": "130",
-    //       "PRE2_CPR_CoolantTemp": "66",
-    //       "PRE3_HostorLoc": "0",
-    //       "PRE4_MOT_TotalRunTime": "5104",
-    //       "PRE1_MOT_TotalRunTime": "8416",
-    //       "PRE3_MOT_CompProtFault": "0",
-    //       "PRE3_MOT_Fault": "0",
-    //       "PRE4_CPR_UnLoadPre": "72",
-    //       "PRE1_CPR_HeadTemp": "97",
-    //       "PRE2_HostorLoc": "0",
-    //       "PRE2_MOT_PhaseBTemp": "562",
-    //       "PRE3_CPR_HeadTemp": "13",
-    //       "PRE2_MOT_TotalRunTime": "5586",
-    //       "PRE5_CPR_HeadTemp": "95",
-    //       "PRE3_CPR_UnLoadPre": "72",
-    //       "PRE4_VLS_Temp": "166",
-    //       "PRE5_CPR_CoolantTemp": "70",
-    //       "PRE1_MOT_CompProtFault": "0",
-    //       "PRE5_MOT_TotalRunTime": "7825",
-    //       "PRE2_MOT_CtrlMode": "1",
-    //       "PRE5_CPR_ExhaustPre": "68",
-    //       "PRE1_MOT_PhaseCTemp": "544",
-    //       "PRE5_CPR_LoadorUnload": "1",
-    //       "PRE2_CPR_UnLoadPre": "72",
-    //       "PRE4_CPR_ExhaustTemp": "11",
-    //       "PRE2_VLS_Temp": "445",
-    //       "isRun": "-2",
-    //       "PRE5_HostorLoc": "0",
-    //       "PRE1_CPR_ExhaustTemp": "68"
-    //     },
-    //     "readDataDes": null,
-    //     "summaryHour": [],
-    //     "summaryDay": [],
-    //     "history": [],
-    //     "totalInfo": null,
-    //     "sign": null,
-    //     "cameras": [],
-    //     "links": [],
-    //     "other1": null,
-    //     "other2": null,
-    //     "other3": null
-    //   }
+    let dataSource = res.msgTxt[0] && res.msgTxt[0].datalist ? res.msgTxt[0].datalist[0] : [];
     if (dataSource) {
       monitorData.value = Object.assign(dataSource, dataSource.readData);
     }
-    // dataSource.forEach((data, index) => {
-    //   const item = data.readData;
-    //   Object.assign(item, data);
-    //   item.compressRunSigF1 = item.compressRunSigF1 ? true : false
-    //   airCompressorState.value[index].id = item.id
-    //   airCompressorState.value[index].compressRunSigF1 = item.compressRunSigF1
-    //   airCompressorState.value[index].controlModel = item.controlModel === 'LOC' ? true : false
-    //   monitorData.value[index] = item
-    // });
-    // monitorDataGroupNum.value = monitorData.value.length
     loading.value = false;
+    sysStateList.value = getSysState(monitorData.value);
   }
 
   function setMonitorGroupNum(num, flag) {
-    monitorDataGroupNum.value = num;
     monitorDataGroupFlag.value = flag;
   }
 
-  function handlerDevice(data) {
-    // if (data.length < 1) return
-    // handleAirCompressor({ id: data.id, compressRunF1: data.compressRunSigF1 }).then(res => {
-    //   if (res.success) {
-    //     message.success('操作成功')
-    //   } else {
-    //     message.warning(data.msg)
-    //   }
-    // })
+  function changeGroup(val) {
+    kyjs.value = val.map((item) => `${item}号空压机`);
+    cqgs.value = val.map((item) => `${item}号储气罐`);
+    monitorData.value = new Array(val.length).fill({
+      strName: '空压机',
+      compressGroupName: '',
+      compressExhaustPressF1: '-',
+      compressSeparatePressF1: '-',
+      compressHostTempF1: '-',
+      compressCrewTempF1: '-',
+      compressRunTimeF1: '-',
+      controlModel: 'LOC',
+    });
   }
-  function resetDevice(data) {}
-
-  function handlerControlModel(data) {}
 
   watch(monitorDataGroupFlag, (newVal) => {
-    if (newVal == 1) {
-      setModelType('compressor1');
-    }
-    if (newVal == 2) {
-      setModelType('compressor2');
-    }
+    const monitorGroup = monitorDataGroupArr[newVal - 1];
+    changeGroup(monitorGroup);
+    monitorDataGroup.value = monitorGroup;
+    setModelType(monitorGroup);
   });
 
   onMounted(async () => {
-    mountedThree(monitorDataGroupNum1, monitorDataGroupNum2).then(async () => {
+    mountedThree().then(async () => {
       await getMonitor(true);
-      setModelType('compressor1');
+      monitorDataGroupFlag.value = 1;
     });
   });
 
@@ -556,7 +230,7 @@
       z-index: 9;
       top: 50px;
       right: 30px;
-      //display: flex;
+      // display: flex;
       font-size: 18px;
       .item {
         width: 200px;
@@ -699,7 +373,7 @@
       .device-state {
         width: 100%;
         position: absolute;
-        top: 70px;
+        top: 20px;
         color: #e90000;
         display: flex;
         justify-content: center;
@@ -804,17 +478,17 @@
           }
 
           .state-item {
+            width: 100%;
             display: flex;
             flex-direction: row;
-            padding: 5px;
 
+            flex-wrap: wrap;
             .item-col {
               width: 50%;
               display: flex;
               justify-content: center;
               align-items: center;
-              padding-right: 4px;
-
+              padding: 5px;
               .state-title {
                 color: #ffffffcc;
                 flex: 9;

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

@@ -4,9 +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'" />
+    <!-- <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,9 +16,9 @@
 </template>
 <script lang="ts" setup>
   import { ref } from 'vue';
-  import nitrogenHome from './components/nitrogenHome.vue';
+  // import nitrogenHome from './components/nitrogenHome.vue';
   import nitrogenHome1 from './components/nitrogenHome1.vue';
-  import nitrogenHomeYJ from './components/nitrogenHomeYJ.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';

+ 41 - 41
src/views/vent/monitorManager/nitrogen/nitrogen.data.ts

@@ -33,8 +33,8 @@ export const bottomBtnList = ref([
 ]);
 export const monitorDataGroupNum1 = [1, 2, 3];
 export const monitorDataGroupNum2 = [4, 5];
-export const monitorDataGroupNum3 = [1,2,3,4];
-export const monitorDataGroupNum = ref(3)
+export const monitorDataGroupNum3 = [1, 2, 3, 4];
+export const monitorDataGroupNum = ref(3);
 export const airCompressorState = ref([
   {
     id: '',
@@ -70,7 +70,7 @@ export const showMonitorData = [
     PRE_MOT_TotalRunTime: '总运行时间(h)',
   },
 ];
-  export const monitorData = ref(
+export const monitorData = ref(
   new Array(4).fill({
     strName: '空压机',
     compressGroupName: '',
@@ -81,42 +81,42 @@ export const showMonitorData = [
     compressRunTimeF1: '-',
     controlModel: 'LOC',
   })
-  );
+);
 
-      // dataInfo: {
-      //   controlModel: false
-      // };
-      // videoUrl: '',
-      // isDestroyVideo: false,
-      // navList: [
-      //   {
-      //     title: '监控界面',
-      //     pathName: 'nitrogen_page_lh'
-      //   },
-      //   // {
-      //   //   title: '关键节点监测',
-      //   //   pathName: 'critical_node'
-      //   // },
-      //   {
-      //     title: '实时曲线',
-      //     pathName: 'yfj_monitor_echarts_cy'
-      //   },
-      //   {
-      //     title: '压风机历史记录',
-      //     pathName: 'yfj_history'
-      //   },
-      //   {
-      //     title: '操作历史记录',
-      //     pathName: 'yfj_handler_history'
-      //   },
-      //   {
-      //     title: '故障诊断历史记录',
-      //     pathName: 'yfj_faultRecord'
-      //   }
-      // ],
-      // kyjMonitorDataKey: new Map(
-      //   [
-      //     ['压力', 'pressure'],
-      //     ['温度', 'temp'],
-      //   ]
-      // ),
+// dataInfo: {
+//   controlModel: false
+// };
+// videoUrl: '',
+// isDestroyVideo: false,
+// navList: [
+//   {
+//     title: '监控界面',
+//     pathName: 'nitrogen_page_lh'
+//   },
+//   // {
+//   //   title: '关键节点监测',
+//   //   pathName: 'critical_node'
+//   // },
+//   {
+//     title: '实时曲线',
+//     pathName: 'yfj_monitor_echarts_cy'
+//   },
+//   {
+//     title: '压风机历史记录',
+//     pathName: 'yfj_history'
+//   },
+//   {
+//     title: '操作历史记录',
+//     pathName: 'yfj_handler_history'
+//   },
+//   {
+//     title: '故障诊断历史记录',
+//     pathName: 'yfj_faultRecord'
+//   }
+// ],
+// kyjMonitorDataKey: new Map(
+//   [
+//     ['压力', 'pressure'],
+//     ['温度', 'temp'],
+//   ]
+// ),

+ 51 - 29
src/views/vent/monitorManager/nitrogen/nitrogen.dishang.threejs.ts

@@ -21,6 +21,7 @@ class Nitrogen {
   CSSCanvasContainer;
   css3dRender;
   canvasContainer;
+  cssGroupParent: THREE.Group = new THREE.Group();
 
   constructor(model) {
     this.model = model;
@@ -131,44 +132,61 @@ class Nitrogen {
   };
 
   addCssText = (monitorDataGroup) => {
-    if (this.nitrogenNum > 0) {
-      for (let i = 0; i < this.nitrogenNum; i++) {
+    if (this.nitrogenNum > 0 && this.group) {
+      this.clearCssText();
+      for (let i = 0; i < monitorDataGroup.length; i++) {
         const n = monitorDataGroup[i];
         const compressorModal = this.group.getObjectByName('compressorModal' + i) as THREE.Object3D;
-        if (!compressorModal.getObjectByName('monitorNitrogenText')) {
-          const element = document.getElementById('nitrogenMonitor' + n) as HTMLElement;
-          if (element) {
-            element.style.top = '0px';
-            element.style.left = '0px';
-            const compressorMonitorCSS3D = new CSS3DSprite(element);
-            compressorMonitorCSS3D.name = 'monitorNitrogenText';
+        const compressorGroup = this.cssGroupParent.getObjectByName('compressorGroup' + n);
+        if (!compressorGroup) {
+          const cssGroup = new THREE.Object3D();
+          cssGroup.name = 'compressorGroup' + n;
+          cssGroup.applyMatrix4(compressorModal.matrixWorld);
+
+          const compressorElement = document.getElementById('nitrogenMonitor' + n) as HTMLElement;
+          if (compressorElement) {
+            compressorElement.style.top = '0px';
+            compressorElement.style.left = '0px';
+            const compressorMonitorCSS3D = new CSS3DSprite(compressorElement);
+            compressorMonitorCSS3D.name = 'monitorNitrogenText' + n;
             compressorMonitorCSS3D.scale.set(0.003, 0.003, 0.003);
             if (i == 0) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0);
             if (i == 1) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0.04);
             if (i == 2) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0.08);
             if (i == 3) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0.12);
-            compressorModal.add(compressorMonitorCSS3D);
+            cssGroup.add(compressorMonitorCSS3D);
           }
-        }
-        if (!compressorModal.getObjectByName('cqgMonitorText')) {
-          const element = document.getElementById('cqgMonitor' + n) as HTMLElement;
-          if (element) {
-            element.style.top = '0px';
-            element.style.left = '0px';
-            const cqgMonitorCSS3D = new CSS3DSprite(element);
-            cqgMonitorCSS3D.name = 'cqgMonitorText';
+          const cqgElement = document.getElementById('cqgMonitor' + n) as HTMLElement;
+          if (cqgElement) {
+            cqgElement.style.top = '0px';
+            cqgElement.style.left = '0px';
+            const cqgMonitorCSS3D = new CSS3DSprite(cqgElement);
+            cqgMonitorCSS3D.name = 'cqgMonitorText' + n;
             cqgMonitorCSS3D.scale.set(0.003, 0.003, 0.003);
-            if (i == 0) cqgMonitorCSS3D.position.set(1.24, 0.49, 0.0);
-            if (i == 1) cqgMonitorCSS3D.position.set(1.24, 0.49, 0.04);
-            if (i == 2) cqgMonitorCSS3D.position.set(1.24, 0.49, 0.08);
-            if (i == 3) cqgMonitorCSS3D.position.set(1.24, 0.49, 0.12);
-            compressorModal.add(cqgMonitorCSS3D);
+            if (i == 0) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.0);
+            if (i == 1) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.04);
+            if (i == 2) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.08);
+            if (i == 3) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.12);
+            cssGroup.add(cqgMonitorCSS3D);
           }
+          this.cssGroupParent.add(cssGroup);
+        } else {
         }
       }
     }
   };
 
+  clearCssText = () => {
+    // const n = 5;
+    // const compressorGroup = this.cssGroupParent.getObjectByName('compressorGroup' + n);
+    // if (compressorGroup) {
+    //   compressorGroup.visible = false;
+    //   compressorGroup.children.forEach((item) => {
+    //     item.visible = false;
+    //   });
+    // }
+  };
+
   /**
    * 处理杯子的纹理和杯子外层透明壳子
    */
@@ -232,25 +250,29 @@ class Nitrogen {
       this.group.name = this.modelName;
       setModalCenter(this.group);
       this.setModalPosition();
+      debugger;
     }
   }
 
-  mountedThree(monitorDataGroup, dom) {
+  mountedThree(dom) {
     return new Promise((resolve) => {
       this.CSSCanvasContainer = document.querySelector(dom);
       if (this.CSSCanvasContainer) {
         this.css3dRender = new CSS3DRenderer() as CSS3DRenderer;
         this.css3dRender.setSize(this.model.canvasContainer.clientWidth, this.model.canvasContainer.clientHeight);
         this.CSSCanvasContainer?.appendChild(this.css3dRender.domElement);
-        this.css3dRender.render(this.model.scene as THREE.Scene, this.model.camera as THREE.PerspectiveCamera);
+        // this.css3dRender.render(this.model.scene as THREE.Scene, this.model.camera as THREE.PerspectiveCamera);
       }
-
+      this.model.renderAnimationScene = () => {
+        this.css3dRender?.render(this.model?.scene as THREE.Scene, this.model?.camera as THREE.PerspectiveCamera);
+      };
       this.model.setGLTFModel([this.modelName]).then(async (gltf) => {
         this.singGltf = gltf[0];
-        this.setModal(monitorDataGroup.length);
-        this.addCssText(monitorDataGroup);
+        // this.setModal(monitorDataGroup.length);
+        // this.addCssText(monitorDataGroup);
         resolve(null);
-        this.addLight();
+        // this.addLight();
+        this.model.scene.add(this.cssGroupParent);
       });
     });
   }

+ 31 - 53
src/views/vent/monitorManager/nitrogen/nitrogen.threejs.ts

@@ -3,6 +3,7 @@ import { animateCamera, setModalCenter, updateAxisCenter } from '/@/utils/threej
 import UseThree from '../../../../utils/threejs/useThree';
 import useEvent from '../../../../utils/threejs/useEvent';
 import Nitrogen from './nitrogen.dishang.threejs';
+import { modal } from 'vxe-table';
 
 // import * as dat from 'dat.gui';
 // const gui = new dat.GUI();
@@ -11,8 +12,7 @@ import Nitrogen from './nitrogen.dishang.threejs';
 // 模型对象、 文字对象
 let model: UseThree | undefined,
   group: THREE.Object3D | undefined,
-  compressorObj1: Nitrogen | undefined,
-  compressorObj2: Nitrogen | undefined,
+  compressorObj: Nitrogen | undefined,
   modalType = 'compressor';
 
 const { mouseDownFn, mousemoveFn, mouseUpFn } = useEvent();
@@ -23,11 +23,8 @@ const mouseEvent = (event) => {
   if (event.button == 0 && model && group) {
     model.canvasContainer?.addEventListener('mousemove', mousemove);
     mouseDownFn(model, group, event, (intersects) => {
-      if (modalType === 'compressor1') {
-        compressorObj1?.mousedownModel.call(compressorObj1, intersects);
-      }
-      if (modalType === 'compressor2') {
-        compressorObj2?.mousedownModel.call(compressorObj2, intersects);
+      if (modalType === 'compressor') {
+        compressorObj?.mousedownModel.call(compressorObj, intersects);
       }
       console.log('摄像头控制信息', model?.orbitControls, model?.camera);
     });
@@ -56,7 +53,7 @@ const render = () => {
 
 /* 添加监控数据 */
 export const addText = () => {
-  if (!compressorObj1) return;
+  if (!compressorObj) return;
   // if (modalType === 'compressor1' && compressorObj1) {
   //   return compressorObj1.addCssText;
   // } else if (modalType === 'compressor2' && compressorObj2) {
@@ -65,20 +62,15 @@ export const addText = () => {
 };
 
 export const play = () => {
-  if (modalType === 'compressor1' && compressorObj1) {
-    return compressorObj1.play.call(compressorObj1);
-  }
-  if (modalType === 'compressor2' && compressorObj2) {
-    return compressorObj2.play.call(compressorObj2);
+  if (modalType === 'compressor' && compressorObj) {
+    return compressorObj.play.call(compressorObj);
   }
 };
 
 // 切换风窗类型
-export const setModelType = (type) => {
-  modalType = type;
-
+export const setModelType = (monitorDataGroup: number[]) => {
   if (group) {
-    // compressorObj1?.clearCssText();
+    // compressorObj?.clearCssText();
     model?.scene?.remove(group);
     // model?.initCSS3Renderer('#compressorCss3D');
   }
@@ -86,23 +78,14 @@ export const setModelType = (type) => {
   return new Promise((resolve) => {
     // 显示双道风窗
 
-    if (modalType === 'compressor1' && compressorObj1 && model) {
-      group = compressorObj1.group;
-      model.renderAnimationScene = () => {
-        compressorObj1?.css3dRender?.render(model?.scene as THREE.Scene, model?.camera as THREE.PerspectiveCamera);
-      };
-      // if (model?.scene?.getObjectByName('compressor2')) {
-      //   if (compressorObj2) model?.scene?.remove(compressorObj2.group);
-      // }
-    }
-    if (modalType === 'compressor2' && compressorObj2 && model) {
-      group = compressorObj2.group;
-      model.renderAnimationScene = () => {
-        compressorObj2?.css3dRender?.render(model?.scene as THREE.Scene, model?.camera as THREE.PerspectiveCamera);
-      };
-      // if (model?.scene?.getObjectByName('compressor1')) {
-      //   if (compressorObj1) model?.scene?.remove(compressorObj1.group);
-      // }
+    if (modalType === 'compressor' && compressorObj && model) {
+      if (monitorDataGroup.length) {
+        model?.scene?.remove(compressorObj.group);
+        model.clearGroup(compressorObj.group);
+        compressorObj.group = undefined;
+        compressorObj.setModal(monitorDataGroup.length);
+        group = compressorObj.group;
+      }
     }
     model?.camera?.position.set(-1000, 100, 500);
     const oldCameraPosition = { x: -1000, y: 100, z: 500 };
@@ -133,41 +116,36 @@ export const setModelType = (type) => {
       resolve(null);
       if (group) model?.scene?.add(group);
       await animateCamera(oldCameraPosition, oldControlsPosition, newCameraPosition, newControlsPosition, model, 0.8);
+      compressorObj?.addCssText(monitorDataGroup);
     }, 300);
   });
 };
 
 export const clearCssText = () => {
-  if (modalType === 'compressor' && compressorObj1) {
-    return compressorObj1.clearCssText.call(compressorObj1);
+  if (modalType === 'compressor' && compressorObj) {
+    return compressorObj.clearCssText.call(compressorObj);
   }
 };
 
-export const mountedThree = (monitorDataGroupNum1?, monitorDataGroupNum2?) => {
+export const mountedThree = () => {
   return new Promise(async (resolve) => {
     model = new UseThree('#compressor3D');
     model.setEnvMap('test1');
     model.renderer.toneMappingExposure = 1.0;
+    model.camera?.layers.enable(0);
     model.canvasContainer?.addEventListener('mousedown', mouseEvent);
     model.canvasContainer?.addEventListener('pointerup', mouseUp);
 
-    if (monitorDataGroupNum1) {
-      compressorObj1 = new Nitrogen(model);
-      await compressorObj1.mountedThree(monitorDataGroupNum1, '#compressorCss3D');
-      compressorObj1.modelName = 'compressor1';
-    }
-    if (monitorDataGroupNum2) {
-      compressorObj2 = new Nitrogen(model);
-      await compressorObj2.mountedThree(monitorDataGroupNum2, '#compressorCss3D1');
-      compressorObj2.modelName = 'compressor2';
-    }
-    resolve(null);
+    compressorObj = new Nitrogen(model);
+    await compressorObj.mountedThree('#compressorCss3D');
+    compressorObj.modelName = 'compressor';
+
+    model.renderAnimationScene = () => {
+      compressorObj?.css3dRender?.render(model?.scene as THREE.Scene, model?.camera as THREE.PerspectiveCamera);
+    };
     // render();
+    resolve(null);
     model.animate();
-    // 添加摄像机辅助
-
-    // const helper = new THREE.CameraHelper(model.camera as THREE.Camera);
-    // model?.scene?.add(helper);
   });
 };
 
@@ -175,7 +153,7 @@ export const destroy = () => {
   if (model) {
     model.isRender = false;
     console.log('场景销毁前信息----------->', model.renderer?.info);
-    compressorObj1?.destroy();
+    compressorObj?.destroy();
     group = undefined;
     model.destroy();
     model = undefined;

+ 0 - 1
src/views/vent/monitorManager/safetyMonitor/index.vue

@@ -290,7 +290,6 @@
             }
           });
           dataSource.value = [...tempData, ...tempData1];
-          debugger;
         } else {
           dataSource.value = dataArr;
         }

+ 0 - 2
src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts

@@ -168,7 +168,6 @@ 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')) || obj.name.startsWith('FCshanye'))) {
@@ -180,7 +179,6 @@ class singleWindow {
   }
 
   play(rotationParam, flag) {
-    debugger;
     if (this.windowsActionArr.frontWindow.length <= 0) {
       return;
     }

+ 0 - 1
src/views/vent/monitorManager/windowMonitor/shuangdaoFc.threejs.ts

@@ -174,7 +174,6 @@ class doubleWindow {
 
   /* 提取风门序列帧,初始化前后门动画 */
   initAnimation() {
-    debugger;
     const meshArr01: THREE.Object3D[] = [];
     const meshArr02: THREE.Object3D[] = [];
     const windowGroup = new THREE.Group();

+ 7 - 10
src/views/vent/monitorManager/windrectMonitor/index.vue

@@ -603,33 +603,31 @@
   }
   // 切换检测数据
   async function getSelectRow(selectRow, index) {
-    debugger;
     if (selectRow) {
       loading.value = true;
       selectRowIndex.value = index;
       Object.assign(selectData, selectRow);
       let type = '';
-      if (selectRow.deviceType == 'windrect_rect') {
+      if (selectRow.deviceType.startsWith('windrect_rect')) {
         type = 'lmWindRect';
       }
-      if (selectRow.deviceType == 'windrect_normal') {
+      if (selectRow.deviceType.startsWith('windrect_normal')) {
         type = 'zdWindRect';
       }
-      if (selectRow.deviceType == 'windrect_rect_single') {
+      if (selectRow.deviceType.startsWith('windrect_rect_single')) {
         type = 'lmWindSide';
       }
-      if (selectRow.deviceType == 'windrect_ds') {
+      if (selectRow.deviceType.startsWith('windrect_ds')) {
         type = 'dsWindRect_move';
       }
-      if (selectRow.deviceType == 'windrect_ds_four') {
+      if (selectRow.deviceType.startsWith('windrect_ds_four')) {
         type = 'dsWindRect_four';
       }
-      if (selectRow.deviceType == 'windrect_ds_two') {
-        // type = 'dsWindRect_two'
+      if (selectRow.deviceType.startsWith('windrect_ds_two')) {
         type = 'duisheFixed';
       }
 
-      if (selectRow.deviceType == 'windrect_dd' || selectRow.deviceType == 'windrect_safety' || selectRow.deviceType == 'windrect_sensor') {
+      if (selectRow.deviceType.startsWith('windrect_dd') || selectRow.deviceType == 'windrect_safety' || selectRow.deviceType == 'windrect_sensor') {
         type = 'ddWindSide';
       }
       // const type = selectRowIndex.value >= 1 ? 'lmWindRect' : selectRowIndex.value <= 3 ? 'zdWindRect' : 'dsWindRect';
@@ -671,7 +669,6 @@
   }
 
   function controlDevice(passWord, type) {
-    debugger;
     if (type == 'sing') {
       testWind({ ids: [selectData.deviceID], maxnum: runNum.value, password: passWord || globalConfig?.simulatedPassword }).then((res) => {
         message.success('开始测风。。。');

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

@@ -210,7 +210,6 @@ 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);

+ 1 - 1
src/views/vent/performance/fileDetail/commen/fileSystem.vue

@@ -64,7 +64,7 @@
     //     parent.findIndex((item) => item.id == node.id),
     //     1
     //   );
-    // } 
+    // }
     // else {
     //   props.list.splice(
     //     props.list.findIndex((item) => item.id == node.id),

+ 1 - 12
stylelint.config.js

@@ -19,18 +19,7 @@ module.exports = {
     'at-rule-no-unknown': [
       true,
       {
-        ignoreAtRules: [
-          'tailwind',
-          'apply',
-          'variants',
-          'responsive',
-          'screen',
-          'function',
-          'if',
-          'each',
-          'include',
-          'mixin',
-        ],
+        ignoreAtRules: ['tailwind', 'apply', 'variants', 'responsive', 'screen', 'function', 'if', 'each', 'include', 'mixin'],
       },
     ],
     'no-empty-source': null,

Some files were not shown because too many files changed in this diff