Quellcode durchsuchen

Merge branch 'master' of http://182.92.126.35:3000/hrx/mky-vent-base

lxh vor 2 Monaten
Ursprung
Commit
da790c9200
56 geänderte Dateien mit 4055 neuen und 4050 gelöschten Zeilen
  1. 4 4
      .env.development
  2. 1 1
      package.json
  3. 0 1
      src/components/jeecg/JVxeTable/src/hooks/useColumns.ts
  4. 3 1
      src/hooks/vent/useAutoLogin.ts
  5. 0 1
      src/qiankun/index.ts
  6. 0 1
      src/router/guard/permissionGuard.ts
  7. 0 11
      src/router/routes/basic.ts
  8. 1 1
      src/router/routes/index.ts
  9. 6 0
      src/settings/encryptionSetting.ts
  10. 1 1
      src/store/modules/permission.ts
  11. 11 1
      src/store/modules/user.ts
  12. 31 4
      src/utils/cipher.ts
  13. 0 1
      src/utils/echartsUtil.ts
  14. 0 1
      src/utils/threejs/useEvent.ts
  15. 0 1
      src/views/vent/deviceManager/comment/DeviceReportInfo.vue
  16. 4 6
      src/views/vent/deviceManager/comment/HistoryTable.vue
  17. 0 1
      src/views/vent/deviceManager/comment/warningTabel/BaseModal.vue
  18. 0 1
      src/views/vent/deviceManager/comment/warningTabel/index3.vue
  19. 4 1
      src/views/vent/deviceManager/configurationTable/types.ts
  20. 0 1
      src/views/vent/home/clique/dustComponents/measure-detail.vue
  21. 4 3
      src/views/vent/home/configurable/components/detail/CustomChart.vue
  22. 6 0
      src/views/vent/home/configurable/configurable.data.ts
  23. 1 1
      src/views/vent/home/configurable/dust.vue
  24. 1 1
      src/views/vent/home/configurable/fire.vue
  25. 1 1
      src/views/vent/home/configurable/vent.vue
  26. 0 0
      src/views/vent/home/configurable/ventSY.vue
  27. 0 0
      src/views/vent/home/configurable/ventV5.vue
  28. 0 1
      src/views/vent/monitorManager/alarmFire/index.vue
  29. 3 5
      src/views/vent/monitorManager/alarmMonitor/warn/dustWarn.vue
  30. 418 417
      src/views/vent/monitorManager/camera/index.vue
  31. 249 249
      src/views/vent/monitorManager/comment/FanDeviceEcharts.vue
  32. 0 2
      src/views/vent/monitorManager/comment/HistoryTable.vue
  33. 0 7
      src/views/vent/monitorManager/compressor/components/nitrogenHome_bd.vue
  34. 0 1
      src/views/vent/monitorManager/deviceMC/HistoryTable.vue
  35. 1696 1594
      src/views/vent/monitorManager/deviceMonitor/components/device/index.vue
  36. 759 761
      src/views/vent/monitorManager/fanLocalMonitor/components/conditionAssistance.vue
  37. 24 27
      src/views/vent/monitorManager/fanLocalMonitor/index.vue
  38. 0 2
      src/views/vent/monitorManager/fanLocalMonitor1/components/conditionAssistance1.vue
  39. 0 1
      src/views/vent/monitorManager/fanLocalMonitor1/index.vue
  40. 0 3
      src/views/vent/monitorManager/fireDoorMonitor/fireDoor.threejs.fireF.ts
  41. 0 1
      src/views/vent/monitorManager/fireDoorMonitor/fireDoor.threejs.ts
  42. 0 1
      src/views/vent/monitorManager/fireDoorMonitor/index.vue
  43. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.noStation.ts
  44. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.ts
  45. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.window.ts
  46. 7 13
      src/views/vent/monitorManager/gateMonitor/index.vue
  47. 535 626
      src/views/vent/monitorManager/mainFanMonitor/index.vue
  48. 0 5
      src/views/vent/monitorManager/mainFanMonitor/mainWind.threejs.ts
  49. 0 1
      src/views/vent/monitorManager/mainFanMonitor/mainWind.xj.threejs.ts
  50. 0 1
      src/views/vent/monitorManager/nitrogen/nitrogen.threejs.ts
  51. 0 1
      src/views/vent/monitorManager/windowMonitor/dandaoFcBd2.threejs.ts
  52. 4 0
      src/views/vent/monitorManager/windowMonitor/index.vue
  53. 0 2
      src/views/vent/monitorManager/windowMonitor/shuangdaoFcBlt.threejs.ts
  54. 0 1
      src/views/vent/monitorManager/windowMonitor/window.threejs.ts
  55. 4 1
      src/views/vent/monitorManager/windrectMonitor/index.vue
  56. 277 278
      src/views/vent/safetyList/common/HistoryTable.vue

+ 4 - 4
.env.development

@@ -6,8 +6,8 @@ VITE_PUBLIC_PATH = /
 
 # 跨域代理,您可以配置多个 ,请注意,没有换行符
 #VITE_PROXY = [["/jeecgboot","http://localhost:8080/jeecg-boot"],["/upload","http://localhost:3300/upload"]]
-VITE_PROXY = [["/jeecgsystem","http://182.92.126.35:9999"],["/upload","http://182.92.126.35:9999/upload"],["/documents", "http://182.92.126.35:9050"],["/modelreq", "http://182.92.126.35:9999"],["/webRtc", "http://182.92.126.35:8051"]]
-# VITE_PROXY = [["/jeecgsystem","http://192.168.183.88:9999"],["/upload","http://192.168.183.88:9999/upload"],["/documents", "http://192.168.183.88:9050"],["/modelreq", "http://192.168.183.88:9999"],["/webRtc", "http://192.168.183.88:8051"]]
+# VITE_PROXY = [["/jeecgsystem","http://182.92.126.35:9999"],["/upload","http://182.92.126.35:9999/upload"],["/documents", "http://182.92.126.35:9050"],["/modelreq", "http://182.92.126.35:9999"],["/webRtc", "http://182.92.126.35:8051"]]
+VITE_PROXY = [["/jeecgsystem","http://192.168.183.88:9999"],["/upload","http://192.168.183.88:9999/upload"],["/documents", "http://192.168.183.88:9050"],["/modelreq", "http://192.168.183.88:9999"],["/webRtc", "http://192.168.183.88:8051"]]
 # VITE_PROXY = [["/jeecgsystem","http://10.10.150.72:9999"],["/upload","http://localhost:3300/upload"],["/documents", "http://10.10.150.72:9050"],["/modelreq", "http://10.10.150.72:9999"],["/webRtc", "http://192.168.183.216:8051"]]
 #VITE_PROXY = [["/jeecgsystem","http://192.168.1.8:9999"],["/upload","http://localhost:3300/upload"]]
 
@@ -29,7 +29,7 @@ VITE_GLOB_API_URL_PREFIX=
 
 #微前端qiankun应用,命名必须以VITE_APP_SUB_开头,jeecg-app-1为子应用的项目名称,也是子应用的路由父路径
 #VITE_APP_SUB_APP = [["micro-need-air", "//10.10.150.72:8099/"], ["micro-vent-3dModal", "//localhost:8091/"], ["micro-fire-front", "//localhost:8090/"]]
-# VITE_APP_SUB_APP = [["micro-vent-3dModal", "//192.168.183.88:8091/", "micro-vent-3dModal"], ["micro-need-air", "//192.168.183.88:8093/", "micro-need-air"], ["micro-fire-front", "//localhost:8097/", "fire-Micro"]]
+VITE_APP_SUB_APP = [["micro-vent-3dModal", "//192.168.183.88:8091/", "micro-vent-3dModal"], ["micro-need-air", "//192.168.183.88:8093/", "micro-need-air"], ["micro-fire-front", "//localhost:8097/", "fire-Micro"]]
 # VITE_APP_SUB_APP = [["micro-vent-3dModal", "//192.168.183.154:8091/", "micro-vent-3dModal"], ["micro-need-air", "//192.168.183.88:8093/", "micro-need-air"], ["micro-fire-front", "//localhost:8097/", "fire-Micro"]]
-VITE_APP_SUB_APP = [["micro-vent-3dModal", "//182.92.126.35:8091/", "micro-vent-3dModal"], ["micro-need-air", "//182.92.126.35:8099/", "micro-need-air"], ["micro-fire-front", "//182.92.126.35:8097/", "fire-Micro"]]
+# VITE_APP_SUB_APP = [["micro-vent-3dModal", "//182.92.126.35:8091/", "micro-vent-3dModal"], ["micro-need-air", "//182.92.126.35:8099/", "micro-need-air"], ["micro-fire-front", "//182.92.126.35:8097/", "fire-Micro"]]
 # VITE_APP_SUB_APP = [["micro-vent-3dModal", "//localhost:8091/"], ["micro-need-air", "//localhost:8099/"], ["micro-fire-front", "//localhost:8090/"]]

+ 1 - 1
package.json

@@ -10,7 +10,7 @@
     "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=81920 vite build && esno ./build/script/postBuild.ts",
+    "build": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=6144 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",

+ 0 - 1
src/components/jeecg/JVxeTable/src/hooks/useColumns.ts

@@ -191,7 +191,6 @@ function handleExpandColumn({ props, data, col, columns }: HandleArgs) {
 
 /** 处理可排序列 */
 function handleDragSortColumn({ props, data, col, columns, renderOptions }: HandleArgs) {
-  debugger;
   // 是否可拖动排序
   if (props.dragSort) {
     let width = 40;

+ 3 - 1
src/hooks/vent/useAutoLogin.ts

@@ -43,7 +43,8 @@ export function useAutoLogin() {
     return false;
   }
 
-  /** 用在路由守卫里,执行自动登录的逻辑,如果存在符合自动登录标准的query则执行自动登录,返回是否自动登录
+  /**
+   * 用在路由守卫里,执行自动登录的逻辑,如果存在符合自动登录标准的query则执行自动登录,返回是否自动登录
    *
    * 该方法需要修改query
    * */
@@ -75,6 +76,7 @@ export function useAutoLogin() {
     }
   }
 
+  // token 登录
   async function doTokenLogin(token: string) {
     const res = await tokenLogin({ token });
     userStore.setUserInfo(res['userInfo']);

+ 0 - 1
src/qiankun/index.ts

@@ -64,7 +64,6 @@ const mountMicroApp = (path, toPath?) => {
 
 // 卸载app的方法
 const unmountMicroApps = (multipleApp) => {
-  debugger;
   if (JSON.stringify(activeApps) !== '{}' && multipleApp.some) {
     for (const key in activeApps) {
       const isExist = multipleApp.some((name) => name == key);

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

@@ -259,7 +259,6 @@ export function createPermissionGuard(router: Router) {
     });
 
     router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
-    // router.addRoute(QIANKUN_ROUTE as unknown as RouteRecordRaw);
 
     permissionStore.setDynamicAddedRoute(true);
 

+ 0 - 11
src/router/routes/basic.ts

@@ -87,17 +87,6 @@ export const QIANKUN_ROUTE: AppRouteRecordRaw = {
       ver: '1',
     },
     {
-      path: '/micro-vent-3dModal/modelchannel/model3D/home',
-      name: 'micro-vent-3dModal-modelchannel-model3D-home',
-      component: () => import('/@/views/vent/home/colliery/index.vue'),
-      meta: {
-        title: '通防综合管控',
-        hideBreadcrumb: true,
-        hideMenu: true,
-      },
-      ver: '1',
-    },
-    {
       path: '/micro-need-air/:path(.*)*',
       name: 'micro-need-air',
       component: () => import('/@/components/vent/micro/needAir.vue'),

+ 1 - 1
src/router/routes/index.ts

@@ -89,7 +89,7 @@ export const basicRoutes = [
   LoginRoute,
   RootRoute,
   ventModelRedirect,
-  QIANKUN_ROUTE,
+  // QIANKUN_ROUTE,
   // ...mainOutRoutes,
   REDIRECT_ROUTE,
   PAGE_NOT_FOUND_ROUTE,

+ 6 - 0
src/settings/encryptionSetting.ts

@@ -9,5 +9,11 @@ export const cacheCipher = {
   iv: '@11111000001111_',
 };
 
+// 开启登录密码加密,采用aes加密
+export const loginCipher = {
+  key: '_11111000001111@',
+  iv: '@11111000001111_',
+};
+
 // 是否加密缓存,默认生产环境加密
 export const enableStorageEncryption = !isDevMode();

+ 1 - 1
src/store/modules/permission.ts

@@ -289,7 +289,7 @@ export const usePermissionStore = defineStore({
           routeList = filter(routeList, routeRemoveIgnoreFilter);
           routeList = routeList.filter(routeRemoveIgnoreFilter);
           routeList = flatMultiLevelRoutes(routeList);
-          routes = [PAGE_NOT_FOUND_ROUTE, QIANKUN_ROUTE, , ...routeList];
+          routes = [PAGE_NOT_FOUND_ROUTE, ...routeList, QIANKUN_ROUTE];
           break;
       }
 

+ 11 - 1
src/store/modules/user.ts

@@ -20,6 +20,8 @@ import { RoleEnum } from '/@/enums/roleEnum';
 import { useSso } from '/@/hooks/web/useSso';
 import { getActions } from '/@/qiankun/state';
 import { MOCK_LOGIN_PASSWORD, MOCK_LOGIN_UESRNAME } from '../constant';
+import { AesEncryption } from '/@/utils/cipher';
+import { loginCipher } from '/@/settings/encryptionSetting';
 
 interface UserState {
   userInfo: Nullable<UserInfo>;
@@ -146,6 +148,9 @@ export const useUserStore = defineStore({
     ): Promise<GetUserInfoModel | null> {
       try {
         const { goHome = true, mode, successMode, ...loginParams } = params;
+        // 进行加密
+        const encryption = new AesEncryption({ key: loginCipher.key, iv: loginCipher.iv });
+        loginParams.password = encryption.encryptByAES(loginParams.password);
         const data = await loginApi(loginParams, mode, successMode);
         const { token, userInfo } = data;
         // save token
@@ -189,7 +194,7 @@ export const useUserStore = defineStore({
             router.addRoute(route as unknown as RouteRecordRaw);
           });
           router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
-          router.addRoute(QIANKUN_ROUTE as unknown as RouteRecordRaw);
+          // router.addRoute(QIANKUN_ROUTE as unknown as RouteRecordRaw);
           permissionStore.setDynamicAddedRoute(true);
         }
         this.setLoginInfo({ ...data, isLogin: true });
@@ -401,6 +406,7 @@ export const useUserStore = defineStore({
       });
       router.go(0);
     },
+
     /** 用户自动登录,即不需要用户密码即可登录 */
     async autoLogin(
       params: AutoLoginParams & {
@@ -410,6 +416,10 @@ export const useUserStore = defineStore({
       }
     ) {
       const { goHome = true, mode, successMode = 'none', ...loginParams } = params;
+      // 进行加密
+      // const encryption = new AesEncryption({ key: loginCipher.key, iv: loginCipher.iv });
+      // loginParams.password = encryption.encryptByAES(loginParams.password);
+      // encryption.encryptByAES(loginParams.password);
       const data = await autoLoginApi(loginParams, mode, successMode);
       const { token, userInfo } = data;
       // save token

+ 31 - 4
src/utils/cipher.ts

@@ -1,10 +1,10 @@
 import { encrypt, decrypt } from 'crypto-js/aes';
 import { parse } from 'crypto-js/enc-utf8';
 import pkcs7 from 'crypto-js/pad-pkcs7';
-import ECB from 'crypto-js/mode-ecb';
 import md5 from 'crypto-js/md5';
 import UTF8 from 'crypto-js/enc-utf8';
 import Base64 from 'crypto-js/enc-base64';
+import * as CryptoJS from 'crypto-js';
 
 export interface EncryptionParams {
   key: string;
@@ -12,8 +12,8 @@ export interface EncryptionParams {
 }
 
 export class AesEncryption {
-  private key;
-  private iv;
+  key;
+  iv;
 
   constructor(opt: Partial<EncryptionParams> = {}) {
     const { key, iv } = opt;
@@ -27,7 +27,7 @@ export class AesEncryption {
 
   get getOptions() {
     return {
-      mode: ECB,
+      mode: CryptoJS.mode.CBC,
       padding: pkcs7,
       iv: this.iv,
     };
@@ -40,6 +40,33 @@ export class AesEncryption {
   decryptByAES(cipherText: string) {
     return decrypt(cipherText, this.key, this.getOptions).toString(UTF8);
   }
+
+  // 将 Uint8Array 转换为 CryptoJS.lib.WordArray
+  static uint8ArrayToWordArray(uint8Array: Uint8Array): CryptoJS.lib.WordArray {
+    const words: number[] = [];
+    for (let i = 0; i < uint8Array.length; i += 4) {
+      let word = 0;
+      for (let j = 0; j < 4 && i + j < uint8Array.length; j++) {
+        word |= (uint8Array[i + j] & 0xff) << (24 - 8 * j);
+      }
+      words.push(word);
+    }
+    return CryptoJS.lib.WordArray.create(words, uint8Array.length);
+  }
+
+  // 将 CryptoJS.lib.WordArray 转换为 Uint8Array
+  static wordArrayToUint8Array(wordArray: CryptoJS.lib.WordArray): Uint8Array {
+    const words = wordArray.words;
+    const sigBytes = wordArray.sigBytes;
+    const uint8Array = new Uint8Array(sigBytes);
+
+    for (let i = 0; i < sigBytes; i++) {
+      const byte = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
+      uint8Array[i] = byte;
+    }
+
+    return uint8Array;
+  }
 }
 
 export function encryptByBase64(cipherText: string) {

+ 0 - 1
src/utils/echartsUtil.ts

@@ -36,7 +36,6 @@ export default class echartsUtil {
     const columns = JSON.parse(JSON.stringify(chartColumns));
     columns.forEach((column: any) => {
       if (!column) {
-        debugger;
       }
       const ylist = [];
       if (type == 'detail' || type == 'history') {

+ 0 - 1
src/utils/threejs/useEvent.ts

@@ -48,7 +48,6 @@ export default function useEvent() {
   };
 
   const mouseUpFn = (modal, minDistance = 5, renderCallBack?) => {
-    debugger;
     const endTime = new Date().getTime();
     if (endTime - startTime > 400) {
       intersect0 = null;

+ 0 - 1
src/views/vent/deviceManager/comment/DeviceReportInfo.vue

@@ -157,7 +157,6 @@
   onMounted(async () => {
     getColumns();
     let result;
-    debugger;
     if (!deviceData.devicekind) {
       result = await sysList({ id: deviceData.id });
     } else {

+ 4 - 6
src/views/vent/deviceManager/comment/HistoryTable.vue

@@ -65,7 +65,6 @@
       return props.columnsType;
     },
     async (newVal) => {
-      debugger;
       if (!newVal) return;
       deviceKide.value = newVal;
       if (historyTable.value) {
@@ -341,9 +340,8 @@
   }
 </style>
 <style lang="less" scoped>
-:deep(.zxm-picker-dropdown) {
-  top: 50px !important;
-  left: 5px !important;
-}
+  :deep(.zxm-picker-dropdown) {
+    top: 50px !important;
+    left: 5px !important;
+  }
 </style>
-

+ 0 - 1
src/views/vent/deviceManager/comment/warningTabel/BaseModal.vue

@@ -114,7 +114,6 @@
     const data = await getFieldsValue();
     const deviceId = data['deviceId'];
 
-    debugger;
     if (strtype) {
       await getDevicePointList(strtype);
       openModal();

+ 0 - 1
src/views/vent/deviceManager/comment/warningTabel/index3.vue

@@ -131,7 +131,6 @@
   const [register, { openModal, closeModal }] = useModal();
 
   function handleOpen(flag?, record?) {
-    debugger;
     if (record) {
       if (flag == 'update') {
         openModal(true, {

+ 4 - 1
src/views/vent/deviceManager/configurationTable/types.ts

@@ -216,7 +216,10 @@ export interface ModuleDataChart extends ReadFrom {
   /** 数据缩放组件的配置,每一项对应一项 xAxis 配置 */
   dataZoom?: {
     /** 数据轴允许展示的最大数据量,超长后出现数据缩放组件,配置后大部分图表会抬高以适配一个数据缩放组件 */
-    maxAxisLength: number;
+    // maxAxisLength: number;
+    show: boolean;
+    /** 数据窗口范围的结束百分比,范围是:0 ~ 100 */
+    end: number;
   }[];
   /** 图表x轴配置(若有),支持多个,注意至少一个 */
   xAxis: {

+ 0 - 1
src/views/vent/home/clique/dustComponents/measure-detail.vue

@@ -90,7 +90,6 @@
     (newS, oldV) => {
       if (newS.length != 0) {
         selectList.value = newS;
-        debugger;
         if (!oldV || oldV.length == 0) {
           const index = selectList.value.findIndex((item) => item['orgcode'] == selectVal.value);
           if (index > -1) {

+ 4 - 3
src/views/vent/home/configurable/components/detail/CustomChart.vue

@@ -76,9 +76,10 @@
     const baseDataZoom = dataZoom.map((e, i) => {
       return {
         type: 'slider',
-        show: get(baseSeries, '[0].data.length', 1) > e.maxAxisLength,
+        show: e.show,
+        // show: get(baseSeries, '[0].data.length', 1) > e.maxAxisLength,
         xAxisIndex: i,
-        end: e.maxAxisLength,
+        end: e.end,
       };
     });
 
@@ -385,7 +386,7 @@
             type: 'category',
             axisLabel: {
               interval: 0,
-              width: 800 / get(baseSeries, '[0].data.length', 1),
+              width: baseDataZoom.length ? undefined : 800 / get(baseSeries, '[0].data.length', 1),
               overflow: 'break',
             },
           };

+ 6 - 0
src/views/vent/home/configurable/configurable.data.ts

@@ -242,6 +242,12 @@ export const testConfigVent: Config[] = [
             { show: true, name: '风量(m³/min)', position: 'left' },
             { show: true, name: '风速(m/s)', position: 'right' },
           ],
+          dataZoom: [
+            {
+              show: true,
+              end: 20,
+            },
+          ],
           series: [
             { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.m3', label: '风量' },
             { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.va', label: '风速' },

+ 1 - 1
src/views/vent/home/configurable/dust.vue

@@ -59,7 +59,7 @@
         </div>
       </div>
     </template>
-    <div style="width: 1000px; height: 570px; position: absolute; left: calc(50% - 500px); top: 60px">
+    <div style="width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 0">
       <VentModal />
     </div>
   </div>

+ 1 - 1
src/views/vent/home/configurable/fire.vue

@@ -59,7 +59,7 @@
         </div>
       </div>
     </template>
-    <div style="width: 1000px; height: 570px; position: absolute; left: calc(50% - 500px); top: 60px">
+    <div style="width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 0">
       <VentModal />
     </div>
   </div>

+ 1 - 1
src/views/vent/home/configurable/vent.vue

@@ -59,7 +59,7 @@
         </div>
       </div>
     </template>
-    <div style="width: 1000px; height: 570px; position: absolute; left: calc(50% - 500px); top: 60px">
+    <div style="width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 0">
       <VentModal />
     </div>
   </div>

+ 0 - 0
src/views/vent/home/configurable/vent_SY.vue → src/views/vent/home/configurable/ventSY.vue


+ 0 - 0
src/views/vent/home/configurable/vent_v5.vue → src/views/vent/home/configurable/ventV5.vue


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

@@ -113,7 +113,6 @@
         if (item.type === 'fiber_v1') {
           // 光纤测温特殊处理
           const list = data[0]['fibreTemperature'] ? JSON.parse(data[0]['fibreTemperature']) : [];
-          debugger;
           list.filter((detailItem) => {
             detailItem['readTime'] = data[0]['readTime'];
             detailItem['strinstallpos'] = `测点${detailItem['pos']}`;

+ 3 - 5
src/views/vent/monitorManager/alarmMonitor/warn/dustWarn.vue

@@ -108,9 +108,7 @@ function getMonitor(flag?) {
         timer = null;
       }
       getMonitor(false);
-    },
-    flag ? 0 : 3000
-  );
+    }, 1000)
 }
 //返回首页
 function getBack() {
@@ -164,7 +162,7 @@ async function getMenuList() {
         warn: el.warnDes,
         deviceID: el.id,
         strtype: el.strtype,
-        detail: el.detail
+        detail: el.detail,
       });
     });
     menuList.value = menuListTemp;
@@ -332,7 +330,7 @@ async function getWindDeviceList() {
 }
 onMounted(() => {
   getMenuList();
-  getMonitor(true)
+  getMonitor(true);
 });
 onUnmounted(() => {
   if (timer) {

+ 418 - 417
src/views/vent/monitorManager/camera/index.vue

@@ -40,334 +40,271 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { onMounted, onUnmounted, ref, reactive, computed } from 'vue';
-import { useRouter } from 'vue-router';
-import { Pagination, Empty } from 'ant-design-vue';
-import { list, cameraAddr, getCameraDevKind, getDevice, getVentanalyCamera } from './camera.api';
-import Player, { I18N } from 'xgplayer';
-import ZH from 'xgplayer/es/lang/zh-cn';
-import HlsPlugin from 'xgplayer-hls';
-import FlvPlugin from 'xgplayer-flv';
-import 'xgplayer/dist/index.min.css';
-import cameraTree from './common/cameraTree.vue';
-import { SvgIcon } from '/@/components/Icon';
-import treeIcon from './common/Icon/treeIcon.vue';
+  import { onMounted, onUnmounted, ref, reactive, computed } from 'vue';
+  import { useRouter } from 'vue-router';
+  import { Pagination, Empty } from 'ant-design-vue';
+  import { list, cameraAddr, getCameraDevKind, getDevice, getVentanalyCamera } from './camera.api';
+  import Player, { I18N } from 'xgplayer';
+  import ZH from 'xgplayer/es/lang/zh-cn';
+  import HlsPlugin from 'xgplayer-hls';
+  import FlvPlugin from 'xgplayer-flv';
+  import 'xgplayer/dist/index.min.css';
+  import cameraTree from './common/cameraTree.vue';
+  import { SvgIcon } from '/@/components/Icon';
+  import treeIcon from './common/Icon/treeIcon.vue';
 
-//当前选中树节点
-let selected = reactive<any>({
-  id: null,
-  pid: null,
-  title: '',
-  isFolder: false,
-});
-//tree菜单列表
-let listArr = reactive<any[]>([]);
-let searchParam = reactive({
-  devKind: '',
-  strType: '',
-});
+  //当前选中树节点
+  let selected = reactive<any>({
+    id: null,
+    pid: null,
+    title: '',
+    isFolder: false,
+  });
+  //tree菜单列表
+  let listArr = reactive<any[]>([]);
+  let searchParam = reactive({
+    devKind: '',
+    strType: '',
+  });
 
-I18N.use(ZH);
-let router = useRouter(); //路由
-const pageSize = ref(4);
-const current = ref(1);
-const total = ref(0);
-const playerList = ref([]);
-const webRtcServerList = <any[]>[];
-let addrList = ref<{ name: string; addr: string; cameraRate: number; devicekind: string }[]>([]);
-async function getCameraDevKindList() {
-  let res = await getCameraDevKind();
-  if (res.length != 0) {
-    listArr.length = 0;
-    listArr.push({
-      pid: 'root',
-      isFolder: true,
-      expanded: true,
-      title: '全部',
-      id: 0,
-      children: [],
-    });
-    res.forEach((el) => {
-      el.pid = 0;
-      el.isFolder = true; el.expanded = false; el.title = el.itemText;
-      el.id = el.subDictId;
-      el.children = [];
-      listArr[0].children.push(el);
-    });
-    selected.id = listArr[0].id;
-    selected.pid = listArr[0].pid;
-    selected.title = listArr[0].title;
-    selected.isFolder = listArr[0].isFolder;
+  I18N.use(ZH);
+  let router = useRouter(); //路由
+  const pageSize = ref(4);
+  const current = ref(1);
+  const total = ref(0);
+  const playerList = ref([]);
+  const webRtcServerList = <any[]>[];
+  let addrList = ref<{ name: string; addr: string; cameraRate: number; devicekind: string }[]>([]);
+  async function getCameraDevKindList() {
+    let res = await getCameraDevKind();
+    if (res.length != 0) {
+      listArr.length = 0;
+      listArr.push({
+        pid: 'root',
+        isFolder: true,
+        expanded: true,
+        title: '全部',
+        id: 0,
+        children: [],
+      });
+      res.forEach((el) => {
+        el.pid = 0;
+        el.isFolder = true;
+        el.expanded = false;
+        el.title = el.itemText;
+        el.id = el.subDictId;
+        el.children = [];
+        listArr[0].children.push(el);
+      });
+      selected.id = listArr[0].id;
+      selected.pid = listArr[0].pid;
+      selected.title = listArr[0].title;
+      selected.isFolder = listArr[0].isFolder;
+    }
   }
-}
 
-//点击目录
-async function onClick(node) {
-  if (selected.title === node.title && selected.id === node.id) return;
-  current.value = 1;
-  selected.id = node.id;
-  selected.pid = node.pid;
-  selected.title = node.title;
-  selected.isFolder = node.isFolder;
-  if (node.pid != 'root') {
-    if (node.isFolder) {
-      let types, devicetype;
-      if (node.itemValue.indexOf('&') != -1) {
-        types = node.itemValue.substring(node.itemValue.indexOf('&') + 1);
-        devicetype = node.itemValue.substring(0, node.itemValue.indexOf('&'));
+  //点击目录
+  async function onClick(node) {
+    if (selected.title === node.title && selected.id === node.id) return;
+    current.value = 1;
+    selected.id = node.id;
+    selected.pid = node.pid;
+    selected.title = node.title;
+    selected.isFolder = node.isFolder;
+    if (node.pid != 'root') {
+      if (node.isFolder) {
+        let types, devicetype;
+        if (node.itemValue.indexOf('&') != -1) {
+          types = node.itemValue.substring(node.itemValue.indexOf('&') + 1);
+          devicetype = node.itemValue.substring(0, node.itemValue.indexOf('&'));
+        } else {
+          types = '';
+          devicetype = '';
+        }
+        let res = await getDevice({ ids: types, devicetype: devicetype });
+        if (res.msgTxt.length != 0) {
+          res.msgTxt[0].datalist.forEach((el) => {
+            el.pid = node.id;
+            el.isFolder = false;
+            el.title = el.strinstallpos;
+            el.id = el.deviceID;
+          });
+          listArr[0].children.forEach((v) => {
+            if (v.id == node.id) {
+              v.children = res.msgTxt[0].datalist;
+            }
+          });
+        }
+        searchParam.devKind = node.itemValue;
+        searchParam.strType = '';
+        await getVideoAddrs();
+        getVideo();
       } else {
-        types = '';
-        devicetype = '';
+        await getVideoAddrsSon(node.deviceID);
+        getVideo();
       }
-      let res = await getDevice({ ids: types, devicetype: devicetype });
-      if (res.msgTxt.length != 0) {
-        res.msgTxt[0].datalist.forEach((el) => {
-          el.pid = node.id;
-          el.isFolder = false;
-          el.title = el.strinstallpos;
-          el.id = el.deviceID;
-        });
-        listArr[0].children.forEach((v) => {
-          if (v.id == node.id) {
-            v.children = res.msgTxt[0].datalist;
-          }
-        });
-      }
-      searchParam.devKind = node.itemValue;
+    } else {
+      searchParam.devKind = '';
       searchParam.strType = '';
       await getVideoAddrs();
       getVideo();
-    } else {
-      await getVideoAddrsSon(node.deviceID);
-      getVideo();
     }
-  } else {
-    searchParam.devKind = '';
-    searchParam.strType = '';
-    await getVideoAddrs();
-    getVideo();
   }
-}
 
-//点击详情跳转
-function onDetail(node) {
-  let str = listArr[0].children.filter((v) => v.id == node.pid)[0].itemValue;
-  let type = str.indexOf('&') != -1 ? str.substring(0, str.indexOf('&')) : '';
-  console.log(type, 'type--------');
-  switch (type) {
-    case 'pulping': //注浆
-      router.push('/grout-home');
-      break;
-    case 'window': //自动风窗
-      router.push('/monitorChannel/monitor-window?id=' + node.deviceID);
-      break;
-    case 'gate': //自动风门
-      router.push('/monitorChannel/monitor-gate?id=' + node.deviceID + '&deviceType=' + node.deviceType);
-      break;
-    case 'fanlocal': //局部风机
-      router.push('/monitorChannel/monitor-fanlocal?id=' + node.deviceID + '&deviceType=fanlocal');
-      break;
-    case 'fanmain': //主风机
-      router.push('/monitorChannel/monitor-fanmain?id=' + node.deviceID);
-      break;
-    case 'forcFan': //压风机
-      router.push('/forcFan/home');
-      break;
-    case 'pump': //瓦斯抽采泵
-      router.push('/monitorChannel/gasPump-home');
-      break;
-    case 'nitrogen': //制氮
-      router.push('/nitrogen-home');
-      break;
+  //点击详情跳转
+  function onDetail(node) {
+    let str = listArr[0].children.filter((v) => v.id == node.pid)[0].itemValue;
+    let type = str.indexOf('&') != -1 ? str.substring(0, str.indexOf('&')) : '';
+    console.log(type, 'type--------');
+    switch (type) {
+      case 'pulping': //注浆
+        router.push('/grout-home');
+        break;
+      case 'window': //自动风窗
+        router.push('/monitorChannel/monitor-window?id=' + node.deviceID);
+        break;
+      case 'gate': //自动风门
+        router.push('/monitorChannel/monitor-gate?id=' + node.deviceID + '&deviceType=' + node.deviceType);
+        break;
+      case 'fanlocal': //局部风机
+        router.push('/monitorChannel/monitor-fanlocal?id=' + node.deviceID + '&deviceType=fanlocal');
+        break;
+      case 'fanmain': //主风机
+        router.push('/monitorChannel/monitor-fanmain?id=' + node.deviceID);
+        break;
+      case 'forcFan': //压风机
+        router.push('/forcFan/home');
+        break;
+      case 'pump': //瓦斯抽采泵
+        router.push('/monitorChannel/gasPump-home');
+        break;
+      case 'nitrogen': //制氮
+        router.push('/nitrogen-home');
+        break;
+    }
   }
-}
 
-async function getVideoAddrs() {
-  clearCamera();
-  playerList.value = [];
-  let paramKind = searchParam.devKind.substring(0, searchParam.devKind.indexOf('&'));
-  let res = await list({ devKind: paramKind, strType: searchParam.strType, pageSize: pageSize.value, pageNo: current.value });
-  total.value = res['total'] || 0;
-  if (res.records.length != 0) {
-    const cameraList = <{ name: string; addr: string; cameraRate: number; devicekind: string }[]>[];
-    const cameras = res.records;
-    for (let i = 0; i < cameras.length; i++) {
-      const item = cameras[i];
+  async function getVideoAddrs() {
+    clearCamera();
+    playerList.value = [];
+    let paramKind = searchParam.devKind.substring(0, searchParam.devKind.indexOf('&'));
+    let res = await list({ devKind: paramKind, strType: searchParam.strType, pageSize: pageSize.value, pageNo: current.value });
+    total.value = res['total'] || 0;
+    if (res.records.length != 0) {
+      const cameraList = <{ name: string; addr: string; cameraRate: number; devicekind: string }[]>[];
+      const cameras = res.records;
+      for (let i = 0; i < cameras.length; i++) {
+        const item = cameras[i];
 
-      if (item['devicekind'] === 'toHKRtsp' || item['devicekind'] === 'toHKHLs' || item['devicekind'] === 'HLL') {
-        // 从海康平台接口获取视频流
-        const videoType = item['devicekind'] === 'toHKRtsp' ? 'rtsp' : '';
-        try {
-          const data = await cameraAddr({ cameraCode: item['addr'], videoType });
-          if (data && data['url']) {
-            cameraList.push({ name: item['name'], addr: data['url'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
+        if (item['devicekind'] === 'toHKRtsp' || item['devicekind'] === 'toHKHLs' || item['devicekind'] === 'HLL') {
+          // 从海康平台接口获取视频流
+          const videoType = item['devicekind'] === 'toHKRtsp' ? 'rtsp' : '';
+          try {
+            const data = await cameraAddr({ cameraCode: item['addr'], videoType });
+            if (data && data['url']) {
+              cameraList.push({ name: item['name'], addr: data['url'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
+            }
+            // cameraList.push({
+            //   name: item['name'],
+            //   // addr: 'http://219.151.31.38/liveplay-kk.rtxapp.com/live/program/live/hnwshd/4000000/mnf.m3u8'
+            //   addr: 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.mp4/.m3u8',
+            // });
+          } catch (error) {}
+        } else {
+          if (item['addr'].includes('0.0.0.0')) {
+            item['addr'] = item['addr'].replace('0.0.0.0', window.location.hostname);
           }
-          // cameraList.push({
-          //   name: item['name'],
-          //   // addr: 'http://219.151.31.38/liveplay-kk.rtxapp.com/live/program/live/hnwshd/4000000/mnf.m3u8'
-          //   addr: 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.mp4/.m3u8',
-          // });
-        } catch (error) { }
-      } else {
-        if (item['addr'].includes('0.0.0.0')) {
-          item['addr'] = item['addr'].replace('0.0.0.0', window.location.hostname);
+          cameraList.push({ name: item['name'], addr: item['addr'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
         }
-        cameraList.push({ name: item['name'], addr: item['addr'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
       }
+      addrList.value = cameraList;
+      console.log(addrList.value, ' addrList.value-------------');
     }
-    addrList.value = cameraList;
-    console.log(addrList.value, ' addrList.value-------------');
   }
-}
 
-async function getVideoAddrsSon(Id) {
-  clearCamera();
-  playerList.value = [];
-  let res = await getVentanalyCamera({ deviceid: Id });
-  if (res.records.length != 0) {
-    const cameraList = <{ name: string; addr: string; cameraRate: number; devicekind: string }[]>[];
-    const cameras = res.records;
-    for (let i = 0; i < cameras.length; i++) {
-      const item = cameras[i];
+  async function getVideoAddrsSon(Id) {
+    clearCamera();
+    playerList.value = [];
+    let res = await getVentanalyCamera({ deviceid: Id });
+    if (res.records.length != 0) {
+      const cameraList = <{ name: string; addr: string; cameraRate: number; devicekind: string }[]>[];
+      const cameras = res.records;
+      for (let i = 0; i < cameras.length; i++) {
+        const item = cameras[i];
 
-      if (item['devicekind'] === 'toHKRtsp' || item['devicekind'] === 'toHKHLs' || item['devicekind'] === 'HLL') {
-        // 从海康平台接口获取视频流
-        const videoType = item['devicekind'] === 'toHKRtsp' ? 'rtsp' : '';
-        try {
-          const data = await cameraAddr({ cameraCode: item['addr'], videoType });
-          if (data && data['url']) {
-            cameraList.push({ name: item['name'], addr: data['url'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
+        if (item['devicekind'] === 'toHKRtsp' || item['devicekind'] === 'toHKHLs' || item['devicekind'] === 'HLL') {
+          // 从海康平台接口获取视频流
+          const videoType = item['devicekind'] === 'toHKRtsp' ? 'rtsp' : '';
+          try {
+            const data = await cameraAddr({ cameraCode: item['addr'], videoType });
+            if (data && data['url']) {
+              cameraList.push({ name: item['name'], addr: data['url'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
+            }
+            // cameraList.push({
+            //   name: item['name'],
+            //   // addr: 'http://219.151.31.38/liveplay-kk.rtxapp.com/live/program/live/hnwshd/4000000/mnf.m3u8'
+            //   addr: 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.mp4/.m3u8',
+            // });
+          } catch (error) {}
+        } else {
+          if (item['addr'].includes('0.0.0.0')) {
+            item['addr'] = item['addr'].replace('0.0.0.0', window.location.hostname);
           }
-          // cameraList.push({
-          //   name: item['name'],
-          //   // addr: 'http://219.151.31.38/liveplay-kk.rtxapp.com/live/program/live/hnwshd/4000000/mnf.m3u8'
-          //   addr: 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.mp4/.m3u8',
-          // });
-        } catch (error) { }
-      } else {
-        if (item['addr'].includes('0.0.0.0')) {
-          item['addr'] = item['addr'].replace('0.0.0.0', window.location.hostname);
+          cameraList.push({ name: item['name'], addr: item['addr'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
         }
-        cameraList.push({ name: item['name'], addr: item['addr'], cameraRate: item['cameraRate'], devicekind: item['devicekind'] });
       }
+      addrList.value = cameraList;
     }
-    addrList.value = cameraList;
   }
-}
 
-async function onChange(page) {
-  current.value = page;
-  await getVideoAddrs();
-  getVideo();
-}
+  async function onChange(page) {
+    current.value = page;
+    await getVideoAddrs();
+    getVideo();
+  }
 
-function getVideo() {
-  const ip = VUE_APP_URL.webRtcUrl;
-  for (let i = 0; i < addrList.value.length; i++) {
-    const item = addrList.value[i];
-    if (item.addr.startsWith('rtsp://')) {
-      const dom = document.getElementById('video' + i) as HTMLVideoElement;
-      dom.muted = true;
-      dom.volume = 0;
-      const webRtcServer = new window['WebRtcStreamer'](dom, location.protocol + ip);
-      webRtcServerList.push(webRtcServer);
-      webRtcServer.connect(item.addr);
-    } else {
-      setNoRtspVideo('player' + i, item.addr, item.cameraRate, item.devicekind);
+  function getVideo() {
+    const ip = VUE_APP_URL.webRtcUrl;
+    for (let i = 0; i < addrList.value.length; i++) {
+      const item = addrList.value[i];
+      if (item.addr.startsWith('rtsp://')) {
+        const dom = document.getElementById('video' + i) as HTMLVideoElement;
+        dom.muted = true;
+        dom.volume = 0;
+        const webRtcServer = new window['WebRtcStreamer'](dom, location.protocol + ip);
+        webRtcServerList.push(webRtcServer);
+        webRtcServer.connect(item.addr);
+      } else {
+        setNoRtspVideo('player' + i, item.addr, item.cameraRate, item.devicekind);
+      }
     }
   }
-}
 
-function setNoRtspVideo(id, videoAddr, cameraRate, devicekind) {
-  debugger;
-  const fileExtension = videoAddr.split('.').pop();
-  if (fileExtension === 'flv' || devicekind == 'flv') {
-    const player = new Player({
-      lang: 'zh',
-      id: id,
-      url: videoAddr,
-      width: 589,
-      height: 330,
-      poster: '/src/assets/images/vent/noSinge.png',
-      plugins: [FlvPlugin],
-      fluid: true,
-      autoplay: true,
-      isLive: true,
-      playsinline: true,
-      screenShot: true,
-      whitelist: [''],
-      ignores: ['time', 'progress', 'play', 'i18n', 'volume', 'fullscreen', 'screenShot', 'playbackRate'],
-      closeVideoClick: true,
-      customConfig: {
-        isClickPlayBack: false,
-      },
-      defaultPlaybackRate: cameraRate || 1,
-      controls: false,
-      flv: {
-        retryCount: 3, // 重试 3 次,默认值
-        retryDelay: 1000, // 每次重试间隔 1 秒,默认值
-        loadTimeout: 10000, // 请求超时时间为 10 秒,默认值
-        fetchOptions: {
-          // 该参数会透传给 fetch,默认值为 undefined
-          mode: 'cors',
-        },
-        targetLatency: 10, // 直播目标延迟,默认 10 秒
-        maxLatency: 20, // 直播允许的最大延迟,默认 20 秒
-        disconnectTime: 10, // 直播断流时间,默认 0 秒,(独立使用时等于 maxLatency)
-        maxJumpDistance: 10,
-      },
-    });
-    playerList.value.push(player);
-  }
-  if (fileExtension === 'm3u8' || devicekind == 'm3u8') {
-    let player;
-    if (document.createElement('video').canPlayType('application/vnd.apple.mpegurl')) {
-      // 原生支持 hls 播放
-      player = new Player({
+  function setNoRtspVideo(id, videoAddr, cameraRate, devicekind) {
+    const fileExtension = videoAddr.split('.').pop();
+    if (fileExtension === 'flv' || devicekind == 'flv') {
+      const player = new Player({
         lang: 'zh',
         id: id,
         url: videoAddr,
         width: 589,
         height: 330,
-        isLive: true,
-        autoplay: true,
-        autoplayMuted: true,
-        cors: true,
-        ignores: ['time', 'progress', 'play', 'i18n', 'volume', 'fullscreen', 'screenShot', 'playbackRate'],
         poster: '/src/assets/images/vent/noSinge.png',
-        defaultPlaybackRate: cameraRate || 1,
-        controls: false,
-        hls: {
-          retryCount: 3, // 重试 3 次,默认值
-          retryDelay: 1000, // 每次重试间隔 1 秒,默认值
-          loadTimeout: 10000, // 请求超时时间为 10 秒,默认值
-          fetchOptions: {
-            // 该参数会透传给 fetch,默认值为 undefined
-            mode: 'cors',
-          },
-          targetLatency: 10, // 直播目标延迟,默认 10 秒
-          maxLatency: 20, // 直播允许的最大延迟,默认 20 秒
-          disconnectTime: 10, // 直播断流时间,默认 0 秒,(独立使用时等于 maxLatency)
-          maxJumpDistance: 10,
-        },
-      });
-    } else if (HlsPlugin.isSupported()) {
-      // 第一步
-      player = new Player({
-        lang: 'zh',
-        id: id,
-        url: videoAddr,
-        width: 589,
-        height: 330,
-        isLive: true,
+        plugins: [FlvPlugin],
+        fluid: true,
         autoplay: true,
-        autoplayMuted: true,
-        plugins: [HlsPlugin], // 第二步
-        poster: '/src/assets/images/vent/noSinge.png',
+        isLive: true,
+        playsinline: true,
+        screenShot: true,
+        whitelist: [''],
         ignores: ['time', 'progress', 'play', 'i18n', 'volume', 'fullscreen', 'screenShot', 'playbackRate'],
+        closeVideoClick: true,
+        customConfig: {
+          isClickPlayBack: false,
+        },
         defaultPlaybackRate: cameraRate || 1,
         controls: false,
-        hls: {
+        flv: {
           retryCount: 3, // 重试 3 次,默认值
           retryDelay: 1000, // 每次重试间隔 1 秒,默认值
           loadTimeout: 10000, // 请求超时时间为 10 秒,默认值
@@ -381,164 +318,228 @@ function setNoRtspVideo(id, videoAddr, cameraRate, devicekind) {
           maxJumpDistance: 10,
         },
       });
+      playerList.value.push(player);
+    }
+    if (fileExtension === 'm3u8' || devicekind == 'm3u8') {
+      let player;
+      if (document.createElement('video').canPlayType('application/vnd.apple.mpegurl')) {
+        // 原生支持 hls 播放
+        player = new Player({
+          lang: 'zh',
+          id: id,
+          url: videoAddr,
+          width: 589,
+          height: 330,
+          isLive: true,
+          autoplay: true,
+          autoplayMuted: true,
+          cors: true,
+          ignores: ['time', 'progress', 'play', 'i18n', 'volume', 'fullscreen', 'screenShot', 'playbackRate'],
+          poster: '/src/assets/images/vent/noSinge.png',
+          defaultPlaybackRate: cameraRate || 1,
+          controls: false,
+          hls: {
+            retryCount: 3, // 重试 3 次,默认值
+            retryDelay: 1000, // 每次重试间隔 1 秒,默认值
+            loadTimeout: 10000, // 请求超时时间为 10 秒,默认值
+            fetchOptions: {
+              // 该参数会透传给 fetch,默认值为 undefined
+              mode: 'cors',
+            },
+            targetLatency: 10, // 直播目标延迟,默认 10 秒
+            maxLatency: 20, // 直播允许的最大延迟,默认 20 秒
+            disconnectTime: 10, // 直播断流时间,默认 0 秒,(独立使用时等于 maxLatency)
+            maxJumpDistance: 10,
+          },
+        });
+      } else if (HlsPlugin.isSupported()) {
+        // 第一步
+        player = new Player({
+          lang: 'zh',
+          id: id,
+          url: videoAddr,
+          width: 589,
+          height: 330,
+          isLive: true,
+          autoplay: true,
+          autoplayMuted: true,
+          plugins: [HlsPlugin], // 第二步
+          poster: '/src/assets/images/vent/noSinge.png',
+          ignores: ['time', 'progress', 'play', 'i18n', 'volume', 'fullscreen', 'screenShot', 'playbackRate'],
+          defaultPlaybackRate: cameraRate || 1,
+          controls: false,
+          hls: {
+            retryCount: 3, // 重试 3 次,默认值
+            retryDelay: 1000, // 每次重试间隔 1 秒,默认值
+            loadTimeout: 10000, // 请求超时时间为 10 秒,默认值
+            fetchOptions: {
+              // 该参数会透传给 fetch,默认值为 undefined
+              mode: 'cors',
+            },
+            targetLatency: 10, // 直播目标延迟,默认 10 秒
+            maxLatency: 20, // 直播允许的最大延迟,默认 20 秒
+            disconnectTime: 10, // 直播断流时间,默认 0 秒,(独立使用时等于 maxLatency)
+            maxJumpDistance: 10,
+          },
+        });
+      }
+      playerList.value.push(player);
     }
-    playerList.value.push(player);
   }
-}
 
-function goFullScreen(domId) {
-  const videoDom = document.getElementById(domId) as HTMLVideoElement;
-  if (videoDom.requestFullscreen) {
-    videoDom.requestFullscreen();
-    videoDom.play();
-  } else if (videoDom.mozRequestFullscreen) {
-    videoDom.mozRequestFullscreen();
-    videoDom.play();
-  } else if (videoDom.webkitRequestFullscreen) {
-    videoDom.webkitRequestFullscreen();
-    videoDom.play();
-  } else if (videoDom.msRequestFullscreen) {
-    videoDom.msRequestFullscreen();
-    videoDom.play();
+  function goFullScreen(domId) {
+    const videoDom = document.getElementById(domId) as HTMLVideoElement;
+    if (videoDom.requestFullscreen) {
+      videoDom.requestFullscreen();
+      videoDom.play();
+    } else if (videoDom.mozRequestFullscreen) {
+      videoDom.mozRequestFullscreen();
+      videoDom.play();
+    } else if (videoDom.webkitRequestFullscreen) {
+      videoDom.webkitRequestFullscreen();
+      videoDom.play();
+    } else if (videoDom.msRequestFullscreen) {
+      videoDom.msRequestFullscreen();
+      videoDom.play();
+    }
   }
-}
 
-function clearCamera() {
-  const num = webRtcServerList.length;
-  for (let i = 0; i < num; i++) {
-    if (webRtcServerList[i]) {
-      webRtcServerList[i].disconnect();
-      webRtcServerList[i] = null;
+  function clearCamera() {
+    const num = webRtcServerList.length;
+    for (let i = 0; i < num; i++) {
+      if (webRtcServerList[i]) {
+        webRtcServerList[i].disconnect();
+        webRtcServerList[i] = null;
+      }
     }
+    for (let i = 0; i < playerList.value.length; i++) {
+      const player = playerList.value[i];
+      if (player.destroy) player.destroy();
+    }
+    playerList.value = [];
   }
-  for (let i = 0; i < playerList.value.length; i++) {
-    const player = playerList.value[i];
-    if (player.destroy) player.destroy();
-  }
-  playerList.value = [];
-}
 
-onMounted(async () => {
-  await getCameraDevKindList();
-  await getVideoAddrs();
-  getVideo();
-});
+  onMounted(async () => {
+    await getCameraDevKindList();
+    await getVideoAddrs();
+    getVideo();
+  });
 
-onUnmounted(() => {
-  clearCamera();
-});
+  onUnmounted(() => {
+    clearCamera();
+  });
 </script>
 <style lang="less">
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
 
-@{theme-deepblue} {
-  .camera-container {
-    --image-camera_bg: url('/@/assets/images/themify/deepblue/vent/camera_bg.png');
+  @{theme-deepblue} {
+    .camera-container {
+      --image-camera_bg: url('/@/assets/images/themify/deepblue/vent/camera_bg.png');
+    }
   }
-}
 
-.camera-container {
-  --image-camera_bg: url('/@/assets/images/vent/camera_bg.png');
-  position: relative;
-  width: calc(100% - 30px);
-  height: calc(100% - 84px);
-  display: flex;
-  margin: 15px;
-  justify-content: space-between;
-  align-items: center;
+  .camera-container {
+    --image-camera_bg: url('/@/assets/images/vent/camera_bg.png');
+    position: relative;
+    width: calc(100% - 30px);
+    height: calc(100% - 84px);
+    display: flex;
+    margin: 15px;
+    justify-content: space-between;
+    align-items: center;
 
-  .left-area {
-    width: 15%;
-    height: 100%;
-    padding: 20px;
-    border: 1px solid #99e8ff66;
-    background: #27546e1a;
-    box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
-    -moz-box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
-    -webkit-box-shadow: 0px 0px 50px 1px rgb(149 235 255 / 5%) inset;
-    box-sizing: border-box;
+    .left-area {
+      width: 15%;
+      height: 100%;
+      padding: 20px;
+      border: 1px solid #99e8ff66;
+      background: #27546e1a;
+      box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
+      -moz-box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
+      -webkit-box-shadow: 0px 0px 50px 1px rgb(149 235 255 / 5%) inset;
+      box-sizing: border-box;
 
-    // lxh
-    .iconfont {
-      color: #fff;
-      font-size: 12px;
-      margin-left: 5px;
+      // lxh
+      .iconfont {
+        color: #fff;
+        font-size: 12px;
+        margin-left: 5px;
+      }
     }
-  }
 
-  .right-area {
-    width: 85%;
-    height: 100%;
-    padding: 0px 0px 0px 15px;
-    box-sizing: border-box;
+    .right-area {
+      width: 85%;
+      height: 100%;
+      padding: 0px 0px 0px 15px;
+      box-sizing: border-box;
 
-    .camera-box {
-      width: 100%;
-      height: calc(100% - 60px);
-      display: flex;
-      justify-content: space-around;
-      align-items: flex-start;
-      flex-wrap: wrap;
-      overflow-y: auto;
-    }
+      .camera-box {
+        width: 100%;
+        height: calc(100% - 60px);
+        display: flex;
+        justify-content: space-around;
+        align-items: flex-start;
+        flex-wrap: wrap;
+        overflow-y: auto;
+      }
 
-    .camera-box1 {
-      width: 100%;
-      height: calc(100% - 60px);
-      display: flex;
-      justify-content: flex-start;
-      align-items: flex-start;
-      flex-wrap: wrap;
-      overflow-y: auto;
-    }
+      .camera-box1 {
+        width: 100%;
+        height: calc(100% - 60px);
+        display: flex;
+        justify-content: flex-start;
+        align-items: flex-start;
+        flex-wrap: wrap;
+        overflow-y: auto;
+      }
 
-    .player-box {
-      width: 626px;
-      height: 370px;
-      padding: 17px 18px;
-      background: var(--image-camera_bg);
-      background-size: 100% 100%;
-      position: relative;
-      margin: 10px;
+      .player-box {
+        width: 626px;
+        height: 370px;
+        padding: 17px 18px;
+        background: var(--image-camera_bg);
+        background-size: 100% 100%;
+        position: relative;
+        margin: 10px;
 
-      .player-name {
-        font-size: 14px;
-        position: absolute;
-        top: 35px;
-        right: 15px;
-        color: #fff;
-        background-color: hsla(0, 0%, 50%, 0.5);
-        border-radius: 2px;
-        padding: 1px 5px;
-        max-width: 120px;
-        overflow: hidden;
-        white-space: nowrap;
-        text-overflow: ellipsis;
-        z-index: 999;
+        .player-name {
+          font-size: 14px;
+          position: absolute;
+          top: 35px;
+          right: 15px;
+          color: #fff;
+          background-color: hsla(0, 0%, 50%, 0.5);
+          border-radius: 2px;
+          padding: 1px 5px;
+          max-width: 120px;
+          overflow: hidden;
+          white-space: nowrap;
+          text-overflow: ellipsis;
+          z-index: 999;
+        }
+
+        .click-box {
+          position: absolute;
+          width: 100%;
+          height: 100%;
+          top: 0;
+          left: 0;
+        }
       }
 
-      .click-box {
-        position: absolute;
+      .pagination {
         width: 100%;
-        height: 100%;
-        top: 0;
-        left: 0;
+        height: 60px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
       }
     }
-
-    .pagination {
-      width: 100%;
-      height: 60px;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-    }
   }
-}
 
-:deep(video) {
-  width: 100% !important;
-  height: 100% !important;
-  object-fit: cover !important;
-}
+  :deep(video) {
+    width: 100% !important;
+    height: 100% !important;
+    object-fit: cover !important;
+  }
 </style>

+ 249 - 249
src/views/vent/monitorManager/comment/FanDeviceEcharts.vue

@@ -177,291 +177,291 @@
   </div>
 </template>
 <script lang="ts">
-  import { ref, defineComponent, watch, reactive, onMounted, watchEffect, inject } from 'vue';
-  import BarAndLine from '/@/components/chart/BarAndLine.vue';
-  import dayjs from 'dayjs';
-  import { defHttp } from '/@/utils/http/axios';
-  import { Select, Pagination } from 'ant-design-vue';
+import { ref, defineComponent, watch, reactive, onMounted, watchEffect, inject } from 'vue';
+import BarAndLine from '/@/components/chart/BarAndLine.vue';
+import dayjs from 'dayjs';
+import { defHttp } from '/@/utils/http/axios';
+import { Select, Pagination } from 'ant-design-vue';
 
-  export default defineComponent({
-    name: 'DeviceEcharts',
-    components: { BarAndLine, Select, Pagination },
-    props: {
-      fan1ChartsColumns: {
-        type: Array,
-        default: () => [],
+export default defineComponent({
+  name: 'DeviceEcharts',
+  components: { BarAndLine, Select, Pagination },
+  props: {
+    fan1ChartsColumns: {
+      type: Array,
+      default: () => [],
+    },
+    fan2ChartsColumns: {
+      type: Array,
+      default: () => [],
+    },
+    chartsColumnsHistory: {
+      type: Array,
+      default: () => [],
+    },
+    chartsColumnsType: {
+      type: String,
+      required: true,
+    },
+    dataSource: {
+      type: Array,
+      default: () => [],
+    },
+    deviceListApi: {
+      type: Function,
+      required: true,
+    },
+    deviceType: {
+      type: String,
+      required: true,
+    },
+    option: {
+      type: Object,
+      default: () => ({}),
+    },
+    xAxisPropType: {
+      type: String,
+      required: true,
+    },
+  },
+  setup(props) {
+    const globalConfig = inject('globalConfig');
+    let historyList;
+    const chartsType = ref('history');
+    const deviceId = ref('');
+    const options = ref([]);
+    const historyParams = reactive({
+      ttime_begin: dayjs().startOf('date').format('YYYY-MM-DD HH:mm:ss'),
+      ttime_end: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+      skip: '8',
+      startTime: dayjs().startOf('date').format('YYYY-MM-DD HH:mm:ss'),
+      endTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+      interval: '1h',
+    });
+    const resultXAxisPropType = ref('');
+    const resultDataSource = ref<any[]>([]);
+    const detailDataSource = ref<any[]>([]);
+    const currentPage = ref<number>(1);
+    const pageSize = ref<number>(20);
+    const total = ref(0);
+
+    const echartsOption = {
+      grid: {
+        top: '50px',
+        left: '10px',
+        right: props.fan1ChartsColumns.length * 15 + 'px',
+        bottom: '15px',
+        containLabel: true,
       },
-      fan2ChartsColumns: {
-        type: Array,
-        default: () => [],
+      toolbox: {
+        feature: {},
       },
-      chartsColumnsHistory: {
-        type: Array,
-        default: () => [],
+      xAxis: {
+        axisLabel: {
+          interval: 0,
+        },
       },
-      chartsColumnsType: {
-        type: String,
-        required: true,
+    };
+    const echartsOption1 = {
+      grid: {
+        top: '60px',
+        left: '10px',
+        right: props.fan1ChartsColumns.length * 15 + 'px',
+        bottom: '35px',
+        containLabel: true,
       },
-      dataSource: {
-        type: Array,
-        default: () => [],
+      toolbox: {
+        feature: {},
       },
-      deviceListApi: {
-        type: Function,
-        required: true,
+      legend: {
+        top: 30,
       },
-      deviceType: {
-        type: String,
-        required: true,
+      xAxis: {
+        interval: 0,
       },
-      option: {
-        type: Object,
-        default: () => ({}),
+    };
+    const echartsOption2 = {
+      grid: {
+        top: '70px',
+        left: '10px',
+        right: props.fan1ChartsColumns.length * 15 + 'px',
+        bottom: '5px',
+        containLabel: true,
       },
-      xAxisPropType: {
-        type: String,
-        required: true,
+      toolbox: {
+        feature: {},
       },
-    },
-    setup(props) {
-      const globalConfig = inject('globalConfig');
-      let historyList;
-      const chartsType = ref('history');
-      const deviceId = ref('');
-      const options = ref([]);
-      const historyParams = reactive({
-        ttime_begin: dayjs().startOf('date').format('YYYY-MM-DD HH:mm:ss'),
-        ttime_end: dayjs().format('YYYY-MM-DD HH:mm:ss'),
-        skip: '8',
-        startTime: dayjs().startOf('date').format('YYYY-MM-DD HH:mm:ss'),
-        endTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
-        interval: '1h',
-      });
-      const resultXAxisPropType = ref('');
-      const resultDataSource = ref<any[]>([]);
-      const detailDataSource = ref<any[]>([]);
-      const currentPage = ref<number>(1);
-      const pageSize = ref<number>(20);
-      const total = ref(0);
-
-      const echartsOption = {
-        grid: {
-          top: '50px',
-          left: '10px',
-          right: props.fan1ChartsColumns.length * 15 + 'px',
-          bottom: '15px',
-          containLabel: true,
-        },
-        toolbox: {
-          feature: {},
-        },
-        xAxis: {
-          axisLabel: {
-            interval: 0,
-          },
-        },
-      };
-      const echartsOption1 = {
-        grid: {
-          top: '60px',
-          left: '10px',
-          right: props.fan1ChartsColumns.length * 15 + 'px',
-          bottom: '35px',
-          containLabel: true,
-        },
-        toolbox: {
-          feature: {},
-        },
-        legend: {
-          top: 40,
-        },
-        xAxis: {
-          interval: 0,
-        },
-      };
-      const echartsOption2 = {
-        grid: {
-          top: '70px',
-          left: '10px',
-          right: props.fan1ChartsColumns.length * 15 + 'px',
-          bottom: '5px',
-          containLabel: true,
-        },
-        toolbox: {
-          feature: {},
-        },
-      };
+    };
 
-      const onChange = (pageNumber: number) => {
-        console.log('Page: ', pageNumber);
-      };
+    const onChange = (pageNumber: number) => {
+      console.log('Page: ', pageNumber);
+    };
 
-      watch(
-        [chartsType, deviceId, historyParams, pageSize, currentPage],
-        async (
-          [newChartsType, newDeviceId, newHistoryParams, newPageSize, newCurrentPage],
-          [oldChartsType, oldDeviceId, oldHistoryParams, oldPageSize, oldCurrentPage]
-        ) => {
-          console.log('[ historyParams ] >', historyParams.ttime, dayjs(historyParams.ttime).format('HH:mm:ss'));
-          if (newChartsType === 'listMonitor') {
-            // 实时监测所有
-            resultDataSource.value = props.dataSource;
-          } else if (newChartsType === 'history') {
-            resultDataSource.value = [];
-            // 历史
-            if (newChartsType !== oldChartsType || newDeviceId !== oldDeviceId) {
-              currentPage.value = 1;
-            }
-            const device = options.value.find((device) => device['deviceID'] === newDeviceId);
-            if (device) {
-              let res;
-              if (props.dataSource['stationtype'] !== 'redis') {
-                resultXAxisPropType.value = 'ttime';
-                historyList = (params) => defHttp.get({ url: '/safety/ventanalyMonitorData/listdays', params });
-                const datas = await historyList({
-                  ttime_begin: newHistoryParams.ttime_begin,
-                  ttime_end: newHistoryParams.ttime_end,
-                  strtype: device.deviceType,
-                  gdeviceid: newDeviceId,
-                  skip: historyParams.skip,
-                  pageSize: pageSize.value,
-                  pageNo: currentPage.value,
-                  column: 'createTime',
-                });
-                res = datas['datalist']['records'];
-                if (res && res.length > 0) {
-                  resultDataSource.value = res.map((item) => Object.assign(item, item.readData));
-                } else {
-                  resultDataSource.value = [];
-                }
-                total.value = datas['datalist'].total;
+    watch(
+      [chartsType, deviceId, historyParams, pageSize, currentPage],
+      async (
+        [newChartsType, newDeviceId, newHistoryParams, newPageSize, newCurrentPage],
+        [oldChartsType, oldDeviceId, oldHistoryParams, oldPageSize, oldCurrentPage]
+      ) => {
+        console.log('[ historyParams ] >', historyParams.ttime, dayjs(historyParams.ttime).format('HH:mm:ss'));
+        if (newChartsType === 'listMonitor') {
+          // 实时监测所有
+          resultDataSource.value = props.dataSource;
+        } else if (newChartsType === 'history') {
+          resultDataSource.value = [];
+          // 历史
+          if (newChartsType !== oldChartsType || newDeviceId !== oldDeviceId) {
+            currentPage.value = 1;
+          }
+          const device = options.value.find((device) => device['deviceID'] === newDeviceId);
+          if (device) {
+            let res;
+            if (props.dataSource['stationtype'] !== 'redis') {
+              resultXAxisPropType.value = 'ttime';
+              historyList = (params) => defHttp.get({ url: '/safety/ventanalyMonitorData/listdays', params });
+              const datas = await historyList({
+                ttime_begin: newHistoryParams.ttime_begin,
+                ttime_end: newHistoryParams.ttime_end,
+                strtype: device.deviceType,
+                gdeviceid: newDeviceId,
+                skip: historyParams.skip,
+                pageSize: pageSize.value,
+                pageNo: currentPage.value,
+                column: 'createTime',
+              });
+              res = datas['datalist']['records'];
+              if (res && res.length > 0) {
+                resultDataSource.value = res.map((item) => Object.assign(item, item.readData));
               } else {
-                historyList = (params) => defHttp.post({ url: '/monitor/history/getHistoryData', params });
-                resultXAxisPropType.value = 'time';
-                res = await historyList({
-                  pageSize: pageSize.value,
-                  pageNum: currentPage.value,
-                  startTime: newHistoryParams.ttime_begin,
-                  endTime: newHistoryParams.ttime_end,
-                  deviceId: newDeviceId,
-                  strtype: device.deviceType,
-                  interval: historyParams.interval,
-                  column: 'createTime',
-                });
-                if (res && res.records && res.records.length > 0) {
-                  resultDataSource.value = res.records.map((item) => Object.assign(item, item.readData));
-                } else {
-                  resultDataSource.value = [];
-                }
-                total.value = res.total;
+                resultDataSource.value = [];
               }
-            }
-          } else if (newChartsType === 'detail') {
-            // 设备详情
-            resultXAxisPropType.value = 'readTime';
-            if (newDeviceId !== oldDeviceId) {
-              detailDataSource.value = [];
+              total.value = datas['datalist'].total;
+            } else {
+              historyList = (params) => defHttp.post({ url: '/monitor/history/getHistoryData', params });
+              resultXAxisPropType.value = 'time';
+              res = await historyList({
+                pageSize: pageSize.value,
+                pageNum: currentPage.value,
+                startTime: newHistoryParams.ttime_begin,
+                endTime: newHistoryParams.ttime_end,
+                deviceId: newDeviceId,
+                strtype: device.deviceType,
+                interval: historyParams.interval,
+                column: 'createTime',
+              });
+              if (res && res.records && res.records.length > 0) {
+                resultDataSource.value = res.records.map((item) => Object.assign(item, item.readData));
+              } else {
+                resultDataSource.value = [];
+              }
+              total.value = res.total;
             }
           }
+        } else if (newChartsType === 'detail') {
+          // 设备详情
+          resultXAxisPropType.value = 'readTime';
+          if (newDeviceId !== oldDeviceId) {
+            detailDataSource.value = [];
+          }
         }
-      );
-      watchEffect(() => {
-        if (chartsType.value === 'detail') {
-          const currentData = props.dataSource.find((item: any) => item.deviceID === deviceId.value);
-          if (currentData) {
-            const isHas = detailDataSource.value.find((item) => item[resultXAxisPropType.value] === currentData[resultXAxisPropType.value]);
-            if (!isHas) {
-              if (detailDataSource.value.length < 15) {
-                detailDataSource.value.push(currentData);
-              } else {
-                detailDataSource.value.shift();
-                detailDataSource.value.push(currentData);
-              }
+      }
+    );
+    watchEffect(() => {
+      if (chartsType.value === 'detail') {
+        const currentData = props.dataSource.find((item: any) => item.deviceID === deviceId.value);
+        if (currentData) {
+          const isHas = detailDataSource.value.find((item) => item[resultXAxisPropType.value] === currentData[resultXAxisPropType.value]);
+          if (!isHas) {
+            if (detailDataSource.value.length < 15) {
+              detailDataSource.value.push(currentData);
+            } else {
+              detailDataSource.value.shift();
+              detailDataSource.value.push(currentData);
             }
           }
         }
-      });
+      }
+    });
 
-      onMounted(async () => {
-        const res = await props.deviceListApi();
-        // debugger;
-        if (res['msgTxt'] && res['msgTxt'][0] && res['msgTxt'][0]['datalist']) {
-          options.value = res['msgTxt'][0]['datalist'];
-          deviceId.value = options.value[0]['deviceID'];
-        }
-      });
+    onMounted(async () => {
+      const res = await props.deviceListApi();
+      // debugger;
+      if (res['msgTxt'] && res['msgTxt'][0] && res['msgTxt'][0]['datalist']) {
+        options.value = res['msgTxt'][0]['datalist'];
+        deviceId.value = options.value[0]['deviceID'];
+      }
+    });
 
-      return {
-        chartsType,
-        deviceId,
-        resultDataSource,
-        historyParams,
-        options,
-        resultXAxisPropType,
-        detailDataSource,
-        currentPage,
-        pageSize,
-        total,
-        echartsOption,
-        echartsOption1,
-        echartsOption2,
-        onChange,
-        globalConfig,
-      };
-    },
-  });
+    return {
+      chartsType,
+      deviceId,
+      resultDataSource,
+      historyParams,
+      options,
+      resultXAxisPropType,
+      detailDataSource,
+      currentPage,
+      pageSize,
+      total,
+      echartsOption,
+      echartsOption1,
+      echartsOption2,
+      onChange,
+      globalConfig,
+    };
+  },
+});
 </script>
 <style lang="less">
-  :deep(.vent-select-dropdown) {
+:deep(.vent-select-dropdown) {
+  color: #000 !important;
+  .vent-select-item {
     color: #000 !important;
-    .vent-select-item {
-      color: #000 !important;
-    }
   }
+}
 </style>
 <style lang="less" scoped>
-  @import '/@/design/theme.less';
-  .charts-container {
-    position: relative;
+@import '/@/design/theme.less';
+.charts-container {
+  position: relative;
+  height: 100%;
+  .charts-box {
+    width: 100%;
     height: 100%;
-    .charts-box {
-      width: 100%;
+    position: absolute;
+    bottom: 0;
+    top: 0px;
+    .echarts-group {
       height: 100%;
-      position: absolute;
-      bottom: 0;
-      top: 0px;
-      .echarts-group {
-        height: 100%;
-        display: flex;
-        :deep(div) {
-          border-right: 1px solid #ffffff22 !important;
-        }
+      display: flex;
+      :deep(div) {
+        border-right: 1px solid #ffffff22 !important;
       }
     }
+  }
 
-    .@{ventSpace}-picker,
-    .@{ventSpace}-select-selector {
-      background: #00000017 !important;
-      border: 1px solid @vent-form-item-border !important;
-      input,
-      .@{ventSpace}-select-selection-item,
-      .@{ventSpace}-picker-suffix {
-        color: #fff !important;
-      }
-      .@{ventSpace}-select-selection-placeholder {
-        color: #b7b7b7 !important;
-      }
-    }
-    .@{ventSpace}-select-arrow,
-    .@{ventSpace}-picker-separator {
+  .@{ventSpace}-picker,
+  .@{ventSpace}-select-selector {
+    background: #00000017 !important;
+    border: 1px solid @vent-form-item-border !important;
+    input,
+    .@{ventSpace}-select-selection-item,
+    .@{ventSpace}-picker-suffix {
       color: #fff !important;
     }
+    .@{ventSpace}-select-selection-placeholder {
+      color: #b7b7b7 !important;
+    }
   }
-  :deep(.@{ventSpace}-select-dropdown) {
+  .@{ventSpace}-select-arrow,
+  .@{ventSpace}-picker-separator {
+    color: #fff !important;
+  }
+}
+:deep(.@{ventSpace}-select-dropdown) {
+  color: #000 !important;
+  .@{ventSpace}-select-item {
     color: #000 !important;
-    .@{ventSpace}-select-item {
-      color: #000 !important;
-    }
   }
+}
 </style>

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

@@ -117,7 +117,6 @@
       return props.columnsType;
     },
     async (newVal) => {
-      debugger;
       if (!newVal) return;
       deviceKide.value = newVal;
       if (historyTable.value) {
@@ -450,7 +449,6 @@
       },
       beforeFetch() {
         const newParams = { ...resetFormParam() };
-        debugger;
         return newParams;
       },
       // afterFetch(result) {

+ 0 - 7
src/views/vent/monitorManager/compressor/components/nitrogenHome_bd.vue

@@ -19,13 +19,6 @@
           </div>
 
           <div class="monitor-item">
-            <span class="monitor-title">单次流量:</span>
-            <span class="monitor-val" v-if="!refresh"
-              ><span class="val">{{ monitorData[0]['single_flow'] ? monitorData[0]['single_flow'] : '-' }}</span> <span class="unit">m³</span></span
-            >
-          </div>
-
-          <div class="monitor-item">
             <span class="monitor-title">总流量:</span>
             <span class="monitor-val" v-if="!refresh"
               ><span class="val">{{ monitorData[0]['total_flow'] ? monitorData[0]['total_flow'] : '-' }}</span> <span class="unit">m³</span></span

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

@@ -197,7 +197,6 @@
     const stationTypeStr = stationType.value;
     const formData = getForm().getFieldsValue();
     const pagination = getPaginationRef();
-    debugger;
     formData['pageNo'] = pagination['current'];
     formData['pageSize'] = pagination['pageSize'];
     formData['column'] = 'createTime';

+ 1696 - 1594
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -1,17 +1,21 @@
 <template>
   <div class="scene-box">
     <!-- <div class="top-header">智能通风管理系统</div> -->
-    <div class="select-node" :class="{ 'node-select-show': !treeShow, 'node-select-hide': treeShow }"
-      @click="showTree('treeShow', true)">
+    <div class="select-node" :class="{ 'node-select-show': !treeShow, 'node-select-hide': treeShow }" @click="showTree('treeShow', true)">
       <SvgIcon class="is-expansion-icon put-away-icon" size="38" name="expansion" />
       <span class="title">{{ treeNodeTitle }}</span>
     </div>
     <div class="device-select" :class="{ 'device-select-show': treeShow, 'device-select-hide': !treeShow }">
-      <SvgIcon class="is-expansion-icon expansion-icon" size="28" name="put-away"
-        @click="showTree('treeShow', false)" />
+      <SvgIcon class="is-expansion-icon expansion-icon" size="28" name="put-away" @click="showTree('treeShow', false)" />
       <div class="device-select-box">
-        <a-tree :show-line="true" :tree-data="treeData" v-model:selectedKeys="selectedKeys" :autoExpandParent="true"
-          v-model:expandedKeys="expandedKeys" @select="onSelect">
+        <a-tree
+          :show-line="true"
+          :tree-data="treeData"
+          v-model:selectedKeys="selectedKeys"
+          :autoExpandParent="true"
+          v-model:expandedKeys="expandedKeys"
+          @select="onSelect"
+        >
         </a-tree>
       </div>
     </div>
@@ -28,14 +32,15 @@
         </div>
       </div>
     </div>
-    <div class="location-icon"
+    <div
+      class="location-icon"
       :class="{ 'location-btn-show': !locationSettingShow, 'location-btn-hide': locationSettingShow }"
-      @click="showTree('location', true)">
+      @click="showTree('location', true)"
+    >
       <SvgIcon size="18" name="put-away" />
       <span class="location-text">定位图标显示</span>
     </div>
-    <div class="location-select"
-      :class="{ 'location-select-show': locationSettingShow, 'location-select-hide': !locationSettingShow }">
+    <div class="location-select" :class="{ 'location-select-show': locationSettingShow, 'location-select-hide': !locationSettingShow }">
       <div class="location-select-box">
         <div class="location-top-title" @click="showTree('location', false)">
           <SvgIcon class="is-expansion-icon location-expansion-icon" size="28" name="expansion" />
@@ -59,8 +64,13 @@
         </div>
       </div>
     </div>
-    <div class="tabs-box bottom-tabs-box" :class="{ 'table-hide': !tableShow, 'table-show': tableShow }"
-      style="height: 290px" @mousedown="setDivHeight($event, 230, scroll, 0)" id="monitorBox">
+    <div
+      class="tabs-box bottom-tabs-box"
+      :class="{ 'table-hide': !tableShow, 'table-show': tableShow }"
+      style="height: 290px"
+      @mousedown="setDivHeight($event, 230, scroll, 0)"
+      id="monitorBox"
+    >
       <div :style="`padding: 5px; height: ${scroll.y + 100}px`">
         <div class="to-small">
           <div class="to-home" @click="toHome"></div>
@@ -68,12 +78,16 @@
         </div>
         <div class="device-button-group" v-if="deviceList.length > 0">
           <!-- 关联设备 -->
-          <div class="device-button" :class="{ 'device-active': deviceActive == device.deviceType }"
-            v-for="(device, index) in deviceList" :key="index" @click="monitorChange(index)">{{ device.deviceName }}
+          <div
+            class="device-button"
+            :class="{ 'device-active': deviceActive == device.deviceType }"
+            v-for="(device, index) in deviceList"
+            :key="index"
+            @click="monitorChange(index)"
+            >{{ device.deviceName }}
           </div>
           <!-- 场景详情进入 -->
-          <div v-if="haveSysDetailArr.find((item) => deviceType.startsWith(item))" class="enter-detail"
-            @click.stop="goDetail()">
+          <div v-if="haveSysDetailArr.find((item) => deviceType.startsWith(item))" class="enter-detail" @click.stop="goDetail()">
             <send-outlined />
             {{ treeNodeTitle }}详情
           </div>
@@ -115,8 +129,7 @@
         </div>
         <div v-if="deviceType == 'bundleSpyDayReport'">
           <div class="device-button-group">
-            <div v-if="deviceType.startsWith('bundleSpyDayReport')" class="enter-detail"
-              @click.stop="goBundleSpyDayReport()">
+            <div v-if="deviceType.startsWith('bundleSpyDayReport')" class="enter-detail" @click.stop="goBundleSpyDayReport()">
               <send-outlined />
               色谱仪报表分析
             </div>
@@ -135,16 +148,21 @@
           <FullscreenExitOutlined style="font-size: 18px" />
         </div>
         <!-- 是人员定位表单代码,由于放在tab中,表格对已知刷新,导致表单数据也在刷寻,造成输入一半的中文时会清空输入框的内容,导致的输入不上数据 -->
-        <div v-if="deviceType.startsWith('location') && activeKey == '1'" class="location-form"
-          style="position: absolute; z-index: 9999; top: 50px">
+        <div v-if="deviceType.startsWith('location') && activeKey == '1'" class="location-form" style="position: absolute; z-index: 9999; top: 50px">
           <div class="location-form-item">
             <span class="location-form-label">人员名称:</span>
             <Input style="width: 200px" v-model:value="locationForm.strname" />
           </div>
           <div class="location-form-item">
             <span class="location-form-label">所属部门:</span>
-            <MTreeSelect style="width: 200px" v-model:value="locationForm.department" placeholder="请选择所属部门"
-              api="/monitor/getDepartmentInfo" :virtual="false" :isGetPopupContainer="false" />
+            <MTreeSelect
+              style="width: 200px"
+              v-model:value="locationForm.department"
+              placeholder="请选择所属部门"
+              api="/monitor/getDepartmentInfo"
+              :virtual="false"
+              :isGetPopupContainer="false"
+            />
           </div>
           <div class="location-form-item">
             <span class="location-form-label">分站名称:</span>
@@ -152,68 +170,91 @@
           </div>
         </div>
         <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange" id="tabsBox">
-          <a-tab-pane key="1" :tab="deviceType.startsWith('gasDay_normal')
-            ? '当日巡检监测'
-            : deviceType.startsWith('dustDayReport') ||
-              deviceType.startsWith('dustDayReport') ||
-              deviceType.startsWith('bundleDayReport') ||
-              deviceType.startsWith('bundleSpyDayReport')
-              ? '最新监测报表'
-              : '实时监测'
-            ">
-            <template
-              v-if="(deviceType.startsWith('fanlocal') || deviceType.startsWith('fanmain')) && activeKey == '1'">
-              <GroupMonitorTable ref="MonitorDataTable" :dataSource="dataSource" :columnsType="`${deviceType}_monitor`"
-                :scroll="scroll" :isAction="true" :isShowSelect="false">
+          <a-tab-pane
+            key="1"
+            :tab="
+              deviceType.startsWith('gasDay_normal')
+                ? '当日巡检监测'
+                : deviceType.startsWith('dustDayReport') ||
+                  deviceType.startsWith('dustDayReport') ||
+                  deviceType.startsWith('bundleDayReport') ||
+                  deviceType.startsWith('bundleSpyDayReport')
+                ? '最新监测报表'
+                : '实时监测'
+            "
+          >
+            <template v-if="(deviceType.startsWith('fanlocal') || deviceType.startsWith('fanmain')) && activeKey == '1'">
+              <GroupMonitorTable
+                ref="MonitorDataTable"
+                :dataSource="dataSource"
+                :columnsType="`${deviceType}_monitor`"
+                :scroll="scroll"
+                :isAction="true"
+                :isShowSelect="false"
+              >
                 <template #action="{ record }">
-                  <TableAction :actions="haveDetailArr.find((item) => deviceType.startsWith(item))
-                    ? [
-                      {
-                        label: '详情',
-                        onClick: goDetail.bind(null, record),
-                      },
-                      {
-                        label: '定位',
-                        onClick: goLocation.bind(null, record),
-                      },
-                    ]
-                    : [
-                      {
-                        label: '定位',
-                        onClick: goLocation.bind(null, record),
-                      },
-                    ]
-                    " />
+                  <TableAction
+                    :actions="
+                      haveDetailArr.find((item) => deviceType.startsWith(item))
+                        ? [
+                            {
+                              label: '详情',
+                              onClick: goDetail.bind(null, record),
+                            },
+                            {
+                              label: '定位',
+                              onClick: goLocation.bind(null, record),
+                            },
+                          ]
+                        : [
+                            {
+                              label: '定位',
+                              onClick: goLocation.bind(null, record),
+                            },
+                          ]
+                    "
+                  />
                 </template>
               </GroupMonitorTable>
             </template>
             <template v-else-if="deviceType == 'majorpath' && activeKey == '1'">
-              <a-table :columns="majorColumns" :data-source="dataSource" bordered :scroll="{ y: scroll.y - 30 }"
-                :pagination="false"></a-table>
+              <a-table :columns="majorColumns" :data-source="dataSource" bordered :scroll="{ y: scroll.y - 30 }" :pagination="false"></a-table>
             </template>
             <template v-else-if="deviceType.startsWith('safetymonitor') && activeKey == '1'">
-              <MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :deviceType="deviceType"
-                :dataSource="dataSource" design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false"
-                title="设备监测" :form-config="formConfig" :scroll="{ y: scroll.y - 110 }">
+              <MonitorTable
+                ref="monitorTable"
+                :columnsType="`${deviceType}_monitor`"
+                :deviceType="deviceType"
+                :dataSource="dataSource"
+                design-scope="device_monitor"
+                :isShowActionColumn="true"
+                :isShowSelect="false"
+                title="设备监测"
+                :form-config="formConfig"
+                :scroll="{ y: scroll.y - 110 }"
+              >
                 <template #action="{ record }">
-                  <TableAction :actions="haveDetailArr.find((item) => deviceType.startsWith(item))
-                    ? [
-                      {
-                        label: '详情',
-                        onClick: goDetail.bind(null, record),
-                      },
-                      {
-                        label: '定位',
-                        onClick: goLocation.bind(null, record),
-                      },
-                    ]
-                    : [
-                      {
-                        label: '定位',
-                        onClick: goLocation.bind(null, record),
-                      },
-                    ]
-                    " />
+                  <TableAction
+                    :actions="
+                      haveDetailArr.find((item) => deviceType.startsWith(item))
+                        ? [
+                            {
+                              label: '详情',
+                              onClick: goDetail.bind(null, record),
+                            },
+                            {
+                              label: '定位',
+                              onClick: goLocation.bind(null, record),
+                            },
+                          ]
+                        : [
+                            {
+                              label: '定位',
+                              onClick: goLocation.bind(null, record),
+                            },
+                          ]
+                    "
+                  />
                 </template>
                 <template #filterCell="{ column, record }">
                   <div v-if="!record.devicename && column.dataIndex === 'devicename'">-</div>
@@ -229,30 +270,52 @@
               </MonitorTable>
             </template>
             <template v-else-if="deviceType.startsWith('location') && activeKey == '1'">
-              <MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :deviceType="deviceType"
-                :dataSource="dataSource" design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false"
-                title="设备监测" :scroll="{ y: scroll.y - 110 }" style="margin-top: 60px">
+              <MonitorTable
+                ref="monitorTable"
+                :columnsType="`${deviceType}_monitor`"
+                :deviceType="deviceType"
+                :dataSource="dataSource"
+                design-scope="device_monitor"
+                :isShowActionColumn="true"
+                :isShowSelect="false"
+                title="设备监测"
+                :scroll="{ y: scroll.y - 110 }"
+                style="margin-top: 60px"
+              >
                 <template #action="{ record }">
-                  <TableAction :actions="[
-                    {
-                      label: '定位',
-                      onClick: goLocation.bind(null, record),
-                    },
-                  ]" />
+                  <TableAction
+                    :actions="[
+                      {
+                        label: '定位',
+                        onClick: goLocation.bind(null, record),
+                      },
+                    ]"
+                  />
                 </template>
               </MonitorTable>
             </template>
             <template v-else-if="deviceType.startsWith('vehicle') && activeKey == '1'">
-              <MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :deviceType="deviceType"
-                :dataSource="dataSource" design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false"
-                title="设备监测" :form-config="vehicleFormConfig" :scroll="{ y: scroll.y - 110 }">
+              <MonitorTable
+                ref="monitorTable"
+                :columnsType="`${deviceType}_monitor`"
+                :deviceType="deviceType"
+                :dataSource="dataSource"
+                design-scope="device_monitor"
+                :isShowActionColumn="true"
+                :isShowSelect="false"
+                title="设备监测"
+                :form-config="vehicleFormConfig"
+                :scroll="{ y: scroll.y - 110 }"
+              >
                 <template #action="{ record }">
-                  <TableAction :actions="[
-                    {
-                      label: '定位',
-                      onClick: goLocation.bind(null, record),
-                    },
-                  ]" />
+                  <TableAction
+                    :actions="[
+                      {
+                        label: '定位',
+                        onClick: goLocation.bind(null, record),
+                      },
+                    ]"
+                  />
                 </template>
               </MonitorTable>
             </template>
@@ -261,15 +324,11 @@
               <gaspatrolTable :tableData="gaspatrolData" @getSearch="getSearch" @locate="goLocation"></gaspatrolTable>
             </template>
             <!-- 瓦斯日报 -->
-            <template
-              v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode != 'sdmtjtbetmk'">
-              <gasReport :tableData="reportTableData" @getSearchReport="getSearchReport" @locate="goLocation">
-              </gasReport>
+            <template v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode != 'sdmtjtbetmk'">
+              <gasReport :tableData="reportTableData" @getSearchReport="getSearchReport" @locate="goLocation"> </gasReport>
             </template>
-            <template
-              v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode == 'sdmtjtbetmk'">
-              <gasReportCount :tableData="reportTableData" @getSearchReport="getSearchReport" @locate="goLocation">
-              </gasReportCount>
+            <template v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode == 'sdmtjtbetmk'">
+              <gasReportCount :tableData="reportTableData" @getSearchReport="getSearchReport" @locate="goLocation"> </gasReportCount>
             </template>
             <!-- 粉尘监测报表-->
             <template v-else-if="deviceType.startsWith('dustDayReport') && activeKey == '1'">
@@ -290,70 +349,99 @@
             </template>
             <template v-else>
               <!-- 工作面echarts图标 -->
-              <BarAndLine v-if="activeKey == '1' && deviceType == 'surface_history'" class="echarts-line"
-                xAxisPropType="time" :dataSource="surfaceEchartsData" height="300px"
-                :chartsColumns="surfaceChartsColumns" :option="echatsOption" />
-              <MonitorTable v-else-if="activeKey == '1'" ref="monitorTable" :columnsType="`${deviceType}_monitor`"
-                :dataSource="dataSource" design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false"
-                title="设备监测" :scroll="{ y: scroll.y - 30 }">
+              <BarAndLine
+                v-if="activeKey == '1' && deviceType == 'surface_history'"
+                class="echarts-line"
+                xAxisPropType="time"
+                :dataSource="surfaceEchartsData"
+                height="300px"
+                :chartsColumns="surfaceChartsColumns"
+                :option="echatsOption"
+              />
+              <MonitorTable
+                v-else-if="activeKey == '1'"
+                ref="monitorTable"
+                :columnsType="`${deviceType}_monitor`"
+                :dataSource="dataSource"
+                design-scope="device_monitor"
+                :isShowActionColumn="true"
+                :isShowSelect="false"
+                title="设备监测"
+                :scroll="{ y: scroll.y - 30 }"
+              >
                 <template #action="{ record }">
-                  <TableAction :actions="haveDetailArr.find((item) => deviceType.startsWith(item))
-                    ? [
-                      {
-                        label: '详情',
-                        onClick: goDetail.bind(null, record),
-                      },
-                      {
-                        label: '定位',
-                        onClick: goLocation.bind(null, record),
-                      },
-                    ]
-                    : [
-                      {
-                        label: '定位',
-                        onClick: goLocation.bind(null, record),
-                      },
-                    ]
-                    " />
+                  <TableAction
+                    :actions="
+                      haveDetailArr.find((item) => deviceType.startsWith(item))
+                        ? [
+                            {
+                              label: '详情',
+                              onClick: goDetail.bind(null, record),
+                            },
+                            {
+                              label: '定位',
+                              onClick: goLocation.bind(null, record),
+                            },
+                          ]
+                        : [
+                            {
+                              label: '定位',
+                              onClick: goLocation.bind(null, record),
+                            },
+                          ]
+                    "
+                  />
                 </template>
                 <template #filterCell="{ column, record }">
                   <template v-if="deviceType.startsWith('gate') || deviceType.startsWith('door')">
-                    <a-tag
-                      v-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == '0' && record.frontGateClose == '0'"
-                      color="red">正在运行</a-tag>
+                    <a-tag v-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == '0' && record.frontGateClose == '0'" color="red"
+                      >正在运行</a-tag
+                    >
                     <a-tag
                       v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == '0' && record.frontGateClose == 1"
-                      color="default">关闭</a-tag>
+                      color="default"
+                      >关闭</a-tag
+                    >
                     <a-tag
                       v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == '1' && record.frontGateClose == '0'"
-                      color="#46C66F">打开</a-tag>
+                      color="#46C66F"
+                      >打开</a-tag
+                    >
                     <a-tag
                       v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == '1' && record.frontGateClose == '1'"
-                      color="#FF0000">点位异常</a-tag>
-                    <a-tag
-                      v-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '0' && record.rearGateClose == '0'"
-                      color="red">正在运行</a-tag>
+                      color="#FF0000"
+                      >点位异常</a-tag
+                    >
+                    <a-tag v-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '0' && record.rearGateClose == '0'" color="red"
+                      >正在运行</a-tag
+                    >
                     <a-tag
                       v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '0' && record.rearGateClose == '1'"
-                      color="default">关闭</a-tag>
+                      color="default"
+                      >关闭</a-tag
+                    >
                     <a-tag
                       v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '1' && record.rearGateClose == '0'"
-                      color="#46C66F">打开</a-tag>
+                      color="#46C66F"
+                      >打开</a-tag
+                    >
                     <a-tag
                       v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '1' && record.rearGateClose == '1'"
-                      color="#FF0000">点位异常</a-tag>
-                    <a-tag
-                      v-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '0' && record.midGateClose == '0'"
-                      color="red">正在运行</a-tag>
-                    <a-tag
-                      v-else-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '0' && record.midGateClose == 1"
-                      color="default">关闭</a-tag>
-                    <a-tag
-                      v-else-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '1' && record.midGateClose == '0'"
-                      color="#46C66F">打开</a-tag>
-                    <a-tag
-                      v-else-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '1' && record.midGateClose == '1'"
-                      color="#FF0000">点位异常</a-tag>
+                      color="#FF0000"
+                      >点位异常</a-tag
+                    >
+                    <a-tag v-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '0' && record.midGateClose == '0'" color="red"
+                      >正在运行</a-tag
+                    >
+                    <a-tag v-else-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '0' && record.midGateClose == 1" color="default"
+                      >关闭</a-tag
+                    >
+                    <a-tag v-else-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '1' && record.midGateClose == '0'" color="#46C66F"
+                      >打开</a-tag
+                    >
+                    <a-tag v-else-if="column.dataIndex === 'midGateOpen' && record.midGateOpen == '1' && record.midGateClose == '1'" color="#FF0000"
+                      >点位异常</a-tag
+                    >
                     <template v-if="column.dataIndex === 'ndoortype'">
                       <span>{{ render.renderDictText(record.ndoortype, 'ndoortype') }}</span>
                     </template>
@@ -362,14 +450,13 @@
                     </template>
                   </template>
                   <template v-else-if="deviceType.startsWith('windrect')">
-                    <a-tag v-if="column.dataIndex === 'sign'"
-                      :color="record.sign == 0 ? '#95CF65' : record.sign == 1 ? '#4590EA' : '#9876AA'">
-                      {{ record.sign == 0 ? '高位' : record.sign == 1 ? '中位' : '低位' }}</a-tag>
+                    <a-tag v-if="column.dataIndex === 'sign'" :color="record.sign == 0 ? '#95CF65' : record.sign == 1 ? '#4590EA' : '#9876AA'">
+                      {{ record.sign == 0 ? '高位' : record.sign == 1 ? '中位' : '低位' }}</a-tag
+                    >
                     <template v-if="record && column && column.dataIndex === 'isRun' && record.isRun">
-                      <a-tag v-if="record.isRun == -2 || record.isRun == -1"
-                        :color="record.isRun == -2 ? '#95CF65' : '#ED5700'">{{
-                          record.isRun == -2 ? '空闲' : '等待'
-                        }}</a-tag>
+                      <a-tag v-if="record.isRun == -2 || record.isRun == -1" :color="record.isRun == -2 ? '#95CF65' : '#ED5700'">{{
+                        record.isRun == -2 ? '空闲' : '等待'
+                      }}</a-tag>
                       <a-tag v-else-if="record.isRun == 100" color="#4693FF">完成</a-tag>
                       <Progress v-else :percent="Number(record.isRun)" size="small" status="active" />
                     </template>
@@ -387,19 +474,16 @@
                     <a-tag v-if="column.dataIndex === 'stateConn' && record.stateConn == '0'" color="red">断开</a-tag>
                   </template>
                   <template v-else-if="deviceType.startsWith('gaspatrol')">
-                    <a-tag v-if="column.dataIndex === 'deviceConnect_str' && record.deviceConnect_str.endsWith('正常')"
-                      color="green">{{
-                        record.deviceConnect_str
-                      }}</a-tag>
-                    <a-tag v-if="column.dataIndex === 'deviceConnect_str' && record.deviceConnect_str.endsWith('断开')"
-                      color="red">{{
-                        record.deviceConnect_str
-                      }}</a-tag>
-                  </template>
-                  <a-tag v-if="column.dataIndex === 'warnFlag'"
-                    :color="record.warnFlag == 0 ? 'green' : record.warnFlag == 1 ? '#FF5812' : 'gray'">
-                    {{ record.warnFlag == 0 ? '正常' : record.warnFlag == 1 ? '报警' : record.warnFlag == 2 ? '断开' : '未监测'
+                    <a-tag v-if="column.dataIndex === 'deviceConnect_str' && record.deviceConnect_str.endsWith('正常')" color="green">{{
+                      record.deviceConnect_str
                     }}</a-tag>
+                    <a-tag v-if="column.dataIndex === 'deviceConnect_str' && record.deviceConnect_str.endsWith('断开')" color="red">{{
+                      record.deviceConnect_str
+                    }}</a-tag>
+                  </template>
+                  <a-tag v-if="column.dataIndex === 'warnFlag'" :color="record.warnFlag == 0 ? 'green' : record.warnFlag == 1 ? '#FF5812' : 'gray'">
+                    {{ record.warnFlag == 0 ? '正常' : record.warnFlag == 1 ? '报警' : record.warnFlag == 2 ? '断开' : '未监测' }}</a-tag
+                  >
                   <template v-else-if="column.dataIndex === 'warnLevel'">
                     <a-tag v-if="record.warnLevel == '101'" color="green">低风险</a-tag>
                     <a-tag v-else-if="record.warnLevel == '102'" color="#FF5812">一般风险</a-tag>
@@ -423,1653 +507,1671 @@
                 <HistoryBall :dataSource="dataSource"></HistoryBall>
               </template>
               <template v-else>
-                <HistoryTable ref="historyTable" :sysId="systemID" :columns-type="`${deviceType}`"
-                  :device-type="deviceType" designScope="device-history" :scroll="scroll" />
+                <HistoryTable
+                  ref="historyTable"
+                  :sysId="systemID"
+                  :columns-type="`${deviceType}`"
+                  :device-type="deviceType"
+                  designScope="device-history"
+                  :scroll="scroll"
+                />
               </template>
             </div>
           </a-tab-pane>
           <a-tab-pane key="3" tab="报警历史" v-if="!noWarningArr.find((item) => deviceType.startsWith(item))">
             <div class="tab-item">
-              <AlarmHistoryTable ref="alarmHistoryTable" v-if="activeKey == '3'" :sysId="systemID" columns-type="alarm"
+              <AlarmHistoryTable
+                ref="alarmHistoryTable"
+                v-if="activeKey == '3'"
+                :sysId="systemID"
+                columns-type="alarm"
                 :device-type="deviceType"
                 :device-list-api="getDeviceList.bind(null, { devicekind: deviceType, sysId: systemID, pageSize: 10000 })"
-                :scroll="scroll" designScope="alarm-history" />
+                :scroll="scroll"
+                designScope="alarm-history"
+              />
             </div>
           </a-tab-pane>
           <a-tab-pane key="4" tab="操作历史" v-if="haveHandlerArr.find((item) => deviceType.startsWith(item))">
             <div class="tab-item">
-              <HandlerHistoryTable ref="handlerHistoryTable" v-if="activeKey == '4'" :sysId="systemID"
-                columns-type="operator_history" :device-type="deviceType"
+              <HandlerHistoryTable
+                ref="handlerHistoryTable"
+                v-if="activeKey == '4'"
+                :sysId="systemID"
+                columns-type="operator_history"
+                :device-type="deviceType"
                 :device-list-api="getDeviceList.bind(null, { devicekind: deviceType, sysId: systemID })"
-                :scroll="scroll" designScope="operator-history" />
+                :scroll="scroll"
+                designScope="operator-history"
+              />
             </div>
           </a-tab-pane>
         </a-tabs>
       </div>
     </div>
-    <mainPath v-if="deviceType == 'majorpath'" :dataSource="majorPathEchartsData"
-      style="width: 300px; height: 300px; position: absolute; left: 250px; top: 40px" />
-    <component v-if="modalVisible" :is="currentModal" v-model:visible="modalVisible" :dataSource="dataSource"
-      :activeID="activeID" />
+    <mainPath
+      v-if="deviceType == 'majorpath'"
+      :dataSource="majorPathEchartsData"
+      style="width: 300px; height: 300px; position: absolute; left: 250px; top: 40px"
+    />
+    <component v-if="modalVisible" :is="currentModal" v-model:visible="modalVisible" :dataSource="dataSource" :activeID="activeID" />
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted, onUnmounted, ComponentOptions, shallowRef, reactive, defineProps, watch } from 'vue';
-import { SendOutlined, FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons-vue';
-import {
-  list,
-  getDeviceList,
-  getDeviceTypeList,
-  devPosition,
-  getDepartmentInfo,
-  getExportUrl,
-  queryNowGasInsInfo,
-  queryNowGasSta,
-  queryReportData,
-  getListAll
-} from './device.api';
-import AlarmHistoryTable from '../../../comment/AlarmHistoryTable.vue';
-import HistoryTable from '../../../comment/HistoryTable.vue';
-import HandlerHistoryTable from '../../../comment/HandlerHistoryTable.vue';
-import MonitorTable from '../../../comment/MonitorTable.vue';
-import GroupMonitorTable from '../../../comment/GroupMonitorTable.vue';
-import stationTable from '../../../comment/stationTable.vue'
-import gaspatrolTable from '../../../comment/gaspatrolTable.vue';
-import gasReport from '../../../comment/gasReport.vue'
-import gasReportCount from '../../../comment/gasReportCount.vue'
-import dustMonitorTable from '../../../comment/dustMonitorTable.vue';
-import bundleMonitorTable from '../../../comment/bundleMonitorTable.vue';
-import DustingTable from '../../../comment/DustingTable.vue';
-import bundleSpyMonitorTable from '../../../comment/bundleSpyMonitorTable.vue';
-import HistoryBall from './modal/history-ball.vue';
-import { TreeProps, message, Progress, Input, Select } from 'ant-design-vue';
-import { TableAction } from '/@/components/Table';
-import { SvgIcon } from '/@/components/Icon';
-import { getActions } from '/@/qiankun/state';
-import { useRouter } from 'vue-router';
-import { setDivHeight } from '/@/utils/event';
-import { render } from '/@/utils/common/renderUtils';
-import {
-  majorColumns,
-  haveSysDetailArr,
-  haveDetailArr,
-  haveHandlerArr,
-  noWarningArr,
-  surfaceChartsColumns,
-  noHistoryArr,
-  getMonitorComponent,
-  vehicleFormConfig,
-} from './device.data';
-import mainPath from './modal/mainPath.vue';
-import { formConfig } from '../../../safetyMonitor/safety.data';
-import { getDictItemsByCode } from '/@/utils/dict';
-import BarAndLine from '/@/components/chart/BarAndLine.vue';
-import MTreeSelect from '/@/components/Form/src/jeecg/components/MTreeSelect.vue';
-// import ApiSelect from '/@/components/Form/src/components/ApiSelect.vue';
-import { nextTick } from 'vue';
-import { useMethods } from '/@/hooks/system/useMethods';
-import { useGo } from '/@/hooks/web/usePage';
-import { useGlobSetting } from '/@/hooks/setting';
-
-//瓦斯巡检查询参数
-const addressData = ref(''); //巡检地点
-const personData = ref(''); //巡检员
-const instypeData = ref('2'); //巡检类型
-const classData = ref('night'); //巡检班次
-const gaspatrolData = ref<any[]>([]);
-const inspectJd = ref<any>('');
-const inspectList = reactive<any[]>([
-  { label: '第一次巡检已检数', val: 0 },
-  { label: '第一次巡检未检数', val: 0 },
-  { label: '第二次巡检已检数', val: 0 },
-  { label: '第二次巡检未检数', val: 0 },
-]);
-const stationData = ref<any[]>([])
-const glob = useGlobSetting();
-// import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
-
-const { FiberModal, BundleModal, DustModal, BallvalveModal, AtomizingModal, GaspatrolModal, WisdomBallModal } = getMonitorComponent();
-type DeviceType = { deviceType: string; deviceName: string; datalist: any[] };
-
-const props = defineProps({
-  pageData: {
-    type: Object,
-    default: () => { },
-  },
-});
-const { handleExportXls } = useMethods();
-const go = useGo();
-const echatsOption = {
-  grid: {
-    top: '35',
-    left: '30',
-    right: '45',
-    bottom: '25',
-    containLabel: true,
-  },
-  toolbox: {
-    feature: {},
-  },
-};
-const router = useRouter();
-
-const actions = getActions();
-// actions.setGlobalState({ pageObj: { pageType: 'home' } });
-const locationForm = reactive({
-  strname: '',
-  department: '',
-  stationname: '',
-});
-
-const safetymonitorForm = reactive({
-  dataTypeName: '',
-  strinstallpos: '',
-});
-
-const monitorTable = ref();
-const historyTable = ref();
-const alarmHistoryTable = ref();
-const handlerHistoryTable = ref();
-
-// const routerParam = ref('home') // 默认进来时首页
-const isRefresh = ref(true);
-// 模态框
-const currentModal = shallowRef<Nullable<ComponentOptions>>(null); //模态框
-const modalVisible = ref<Boolean>(false); // 模态框是否可见
-
-// const drawerHeight = ref(240) // 监测框最小高度
-const treeShow = ref(true); //是否显示树形菜单
-const tableShow = ref(true); //是否显示树形菜单
-const locationSettingShow = ref(false); //是否显示树形菜单
-const treeNodeTitle = ref(''); // 选中的树形标题
-
-const locationList = ref([]); //巷道定位图标显示列表
-const deviceList = ref<DeviceType[]>([]); //关联设备列表
-const deviceActive = ref('');
-const activeKey = ref('1'); // tab key
-const dataSource = shallowRef([]); // 实时监测数据
-const majorPathEchartsData = ref({}); // 关键路线echarts数据
-const surfaceEchartsData = ref<any[]>(); // 工作面历史记录,echarts数据
-const activeID = ref(''); // 打开详情modal时监测的设备id
-const deviceType = ref(''); // 监测设备类型
-const systemType = ref('');
-const systemID = ref(''); // 系统监测时,系统id
-const selectedKeys = ref<string[]>([]);
-const expandedKeys = ref<string[]>([]);
-const scroll = reactive({
-  y: 180,
-});
-const treeData = ref<TreeProps['treeData']>([]);
-let departmentInfo: Null | Object = null;
-let startMonitorTimer = 0;
-let searchReportParam = ref('gasDayNight')//瓦斯日报查询条件-非布尔台
-let searchReportParam1 = ref('gasDay1')//瓦斯日报查询条件-布尔台
-let reportTableData = ref<any[]>([])//瓦斯日报列表数据
-
-//树形菜单选择事件
-const onSelect: TreeProps['onSelect'] = (keys, e) => {
-  deviceType.value = '';
-  systemID.value = '';
-  deviceList.value = [];
-  const title = e.node.title; // 在
-  if (e.node.parent && e.node.parent.node.type.toString().startsWith('sys')) {
-    systemType.value = e.node.parent.node.type;
-    if (deviceType.value != e.node.parent.node.type) deviceType.value = e.node.parent.node.type;
-    systemID.value = e.node.type;
-    // 传递工作面id信息,用于定位
-    go(`/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=${deviceType.value}&deviceid=${systemID.value}`);
-  } else {
-    systemType.value = e.node.type;
-    if (deviceType.value != e.node.type) deviceType.value = e.node.type;
-    go(`/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=${deviceType.value}&deviceid=`);
-  }
-  clearTimeout(timer);
-  timer = undefined;
-  if (startMonitorTimer) {
-    clearTimeout(startMonitorTimer);
-  }
-  dataSource.value = [];
-  monitorTable.value.resetPagination()
-  if (!startMonitorTimer) {
-    startMonitorTimer = setTimeout(() => {
-      expandedKeys.value = keys;
-      selectedKeys.value = keys;
-      treeNodeTitle.value = e.node.title;
+  import { ref, onMounted, onUnmounted, ComponentOptions, shallowRef, reactive, defineProps, watch } from 'vue';
+  import { SendOutlined, FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons-vue';
+  import {
+    list,
+    getDeviceList,
+    getDeviceTypeList,
+    devPosition,
+    getDepartmentInfo,
+    getExportUrl,
+    queryNowGasInsInfo,
+    queryNowGasSta,
+    queryReportData,
+    getListAll,
+  } from './device.api';
+  import AlarmHistoryTable from '../../../comment/AlarmHistoryTable.vue';
+  import HistoryTable from '../../../comment/HistoryTable.vue';
+  import HandlerHistoryTable from '../../../comment/HandlerHistoryTable.vue';
+  import MonitorTable from '../../../comment/MonitorTable.vue';
+  import GroupMonitorTable from '../../../comment/GroupMonitorTable.vue';
+  import stationTable from '../../../comment/stationTable.vue';
+  import gaspatrolTable from '../../../comment/gaspatrolTable.vue';
+  import gasReport from '../../../comment/gasReport.vue';
+  import gasReportCount from '../../../comment/gasReportCount.vue';
+  import dustMonitorTable from '../../../comment/dustMonitorTable.vue';
+  import bundleMonitorTable from '../../../comment/bundleMonitorTable.vue';
+  import DustingTable from '../../../comment/DustingTable.vue';
+  import bundleSpyMonitorTable from '../../../comment/bundleSpyMonitorTable.vue';
+  import HistoryBall from './modal/history-ball.vue';
+  import { TreeProps, message, Progress, Input, Select } from 'ant-design-vue';
+  import { TableAction } from '/@/components/Table';
+  import { SvgIcon } from '/@/components/Icon';
+  import { getActions } from '/@/qiankun/state';
+  import { useRouter } from 'vue-router';
+  import { setDivHeight } from '/@/utils/event';
+  import { render } from '/@/utils/common/renderUtils';
+  import {
+    majorColumns,
+    haveSysDetailArr,
+    haveDetailArr,
+    haveHandlerArr,
+    noWarningArr,
+    surfaceChartsColumns,
+    noHistoryArr,
+    getMonitorComponent,
+    vehicleFormConfig,
+  } from './device.data';
+  import mainPath from './modal/mainPath.vue';
+  import { formConfig } from '../../../safetyMonitor/safety.data';
+  import { getDictItemsByCode } from '/@/utils/dict';
+  import BarAndLine from '/@/components/chart/BarAndLine.vue';
+  import MTreeSelect from '/@/components/Form/src/jeecg/components/MTreeSelect.vue';
+  // import ApiSelect from '/@/components/Form/src/components/ApiSelect.vue';
+  import { nextTick } from 'vue';
+  import { useMethods } from '/@/hooks/system/useMethods';
+  import { useGo } from '/@/hooks/web/usePage';
+  import { useGlobSetting } from '/@/hooks/setting';
+
+  //瓦斯巡检查询参数
+  const addressData = ref(''); //巡检地点
+  const personData = ref(''); //巡检员
+  const instypeData = ref('2'); //巡检类型
+  const classData = ref('night'); //巡检班次
+  const gaspatrolData = ref<any[]>([]);
+  const inspectJd = ref<any>('');
+  const inspectList = reactive<any[]>([
+    { label: '第一次巡检已检数', val: 0 },
+    { label: '第一次巡检未检数', val: 0 },
+    { label: '第二次巡检已检数', val: 0 },
+    { label: '第二次巡检未检数', val: 0 },
+  ]);
+  const stationData = ref<any[]>([]);
+  const glob = useGlobSetting();
+  // import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
+
+  const { FiberModal, BundleModal, DustModal, BallvalveModal, AtomizingModal, GaspatrolModal, WisdomBallModal } = getMonitorComponent();
+  type DeviceType = { deviceType: string; deviceName: string; datalist: any[] };
+
+  const props = defineProps({
+    pageData: {
+      type: Object,
+      default: () => {},
+    },
+  });
+  const { handleExportXls } = useMethods();
+  const go = useGo();
+  const echatsOption = {
+    grid: {
+      top: '35',
+      left: '30',
+      right: '45',
+      bottom: '25',
+      containLabel: true,
+    },
+    toolbox: {
+      feature: {},
+    },
+  };
+  const router = useRouter();
+
+  const actions = getActions();
+  // actions.setGlobalState({ pageObj: { pageType: 'home' } });
+  const locationForm = reactive({
+    strname: '',
+    department: '',
+    stationname: '',
+  });
 
-      if (e.node.children?.length < 1 && timer) {
+  const safetymonitorForm = reactive({
+    dataTypeName: '',
+    strinstallpos: '',
+  });
 
-        getMonitor(true);
-      }
-    }, 1000);
+  const monitorTable = ref();
+  const historyTable = ref();
+  const alarmHistoryTable = ref();
+  const handlerHistoryTable = ref();
+
+  // const routerParam = ref('home') // 默认进来时首页
+  const isRefresh = ref(true);
+  // 模态框
+  const currentModal = shallowRef<Nullable<ComponentOptions>>(null); //模态框
+  const modalVisible = ref<Boolean>(false); // 模态框是否可见
+
+  // const drawerHeight = ref(240) // 监测框最小高度
+  const treeShow = ref(true); //是否显示树形菜单
+  const tableShow = ref(true); //是否显示树形菜单
+  const locationSettingShow = ref(false); //是否显示树形菜单
+  const treeNodeTitle = ref(''); // 选中的树形标题
+
+  const locationList = ref([]); //巷道定位图标显示列表
+  const deviceList = ref<DeviceType[]>([]); //关联设备列表
+  const deviceActive = ref('');
+  const activeKey = ref('1'); // tab key
+  const dataSource = shallowRef([]); // 实时监测数据
+  const majorPathEchartsData = ref({}); // 关键路线echarts数据
+  const surfaceEchartsData = ref<any[]>(); // 工作面历史记录,echarts数据
+  const activeID = ref(''); // 打开详情modal时监测的设备id
+  const deviceType = ref(''); // 监测设备类型
+  const systemType = ref('');
+  const systemID = ref(''); // 系统监测时,系统id
+  const selectedKeys = ref<string[]>([]);
+  const expandedKeys = ref<string[]>([]);
+  const scroll = reactive({
+    y: 180,
+  });
+  const treeData = ref<TreeProps['treeData']>([]);
+  let departmentInfo: Null | Object = null;
+  let startMonitorTimer = 0;
+  let searchReportParam = ref('gasDayNight'); //瓦斯日报查询条件-非布尔台
+  let searchReportParam1 = ref('gasDay1'); //瓦斯日报查询条件-布尔台
+  let reportTableData = ref<any[]>([]); //瓦斯日报列表数据
+
+  //树形菜单选择事件
+  const onSelect: TreeProps['onSelect'] = (keys, e) => {
+    deviceType.value = '';
+    systemID.value = '';
+    deviceList.value = [];
+    const title = e.node.title; // 在
+    if (e.node.parent && e.node.parent.node.type.toString().startsWith('sys')) {
+      systemType.value = e.node.parent.node.type;
+      if (deviceType.value != e.node.parent.node.type) deviceType.value = e.node.parent.node.type;
+      systemID.value = e.node.type;
+      // 传递工作面id信息,用于定位
+      go(`/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=${deviceType.value}&deviceid=${systemID.value}`);
+    } else {
+      systemType.value = e.node.type;
+      if (deviceType.value != e.node.type) deviceType.value = e.node.type;
+      go(`/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=${deviceType.value}&deviceid=`);
+    }
+    clearTimeout(timer);
+    timer = undefined;
+    if (startMonitorTimer) {
+      clearTimeout(startMonitorTimer);
+    }
+    dataSource.value = [];
+    monitorTable.value.resetPagination();
+    if (!startMonitorTimer) {
+      startMonitorTimer = setTimeout(() => {
+        expandedKeys.value = keys;
+        selectedKeys.value = keys;
+        treeNodeTitle.value = e.node.title;
+
+        if (e.node.children?.length < 1 && timer) {
+          getMonitor(true);
+        }
+      }, 1000);
+    }
+    // activeKey.value = '1';
+  };
+
+  function tabChange(activeKeyVal) {
+    activeKey.value = activeKeyVal;
   }
-  // activeKey.value = '1';
-};
-
-function tabChange(activeKeyVal) {
-  activeKey.value = activeKeyVal;
-}
-
-function showTree(flag, value) {
-  if (flag == 'treeShow') treeShow.value = value;
-  if (flag == 'location') locationSettingShow.value = value;
-}
-
-async function getDeviceType(sysType?) {
-  if (treeData.value?.length > 0) return;
-  const result = await getDeviceTypeList({});
-  if (result.length > 0) {
-    debugger;
-    const dataSource = <TreeProps['treeData']>[];
-    let key = '0';
-    const getData = (resultList, dataSourceList, keyVal) => {
-      resultList.forEach((item, index) => {
-        if (item.deviceType != 'sys' && item.children && item.children.length > 0) {
-          const children = getData(item.children, [], `${keyVal}-${index}`);
-          // 判断关键阻力路线
-          if (item.itemValue.startsWith(sysType) && children[0]) {
-            systemID.value = item.children[0]['itemValue'];
-          }
 
-          dataSourceList.push({
-            children: children,
-            title: item.itemText,
-            key: `${keyVal}-${index}`,
-            type: item.itemValue,
-            parentKey: `${keyVal}`,
-          });
-        } else {
-          dataSourceList.push({
-            children: [],
-            title: item.itemText,
-            key: `${keyVal}-${index}`,
-            type: item.itemValue,
-            parentKey: `${keyVal}`,
-          });
-        }
-      });
-      return dataSourceList;
-    };
-    treeData.value = getData(result, dataSource, key);
+  function showTree(flag, value) {
+    if (flag == 'treeShow') treeShow.value = value;
+    if (flag == 'location') locationSettingShow.value = value;
   }
-}
-
-// https获取监测数据
-let timer: null | NodeJS.Timeout = undefined;
-function getMonitor(flag?) {
-  if (deviceType.value) {
-    if (timer) timer = null;
-    if (Object.prototype.toString.call(timer) === '[object Null]') {
-      timer = setTimeout(
-        async () => {
-          if (deviceType.value.startsWith('gasDay_normal')) {
-            await queryNowGasInsInfoList();//人工瓦斯巡检
-          } else if (deviceType.value.startsWith('gasDayReport')) {
-            let searchParams = glob.sysOrgCode == 'sdmtjtbetmk' ? searchReportParam1.value : searchReportParam.value
-            await getSearchReport(searchParams)//瓦斯日报
-          } else if (deviceType.value.startsWith('substation')) {//分站
-            await getStationList()
+
+  async function getDeviceType(sysType?) {
+    if (treeData.value?.length > 0) return;
+    const result = await getDeviceTypeList({});
+    if (result.length > 0) {
+      const dataSource = <TreeProps['treeData']>[];
+      let key = '0';
+      const getData = (resultList, dataSourceList, keyVal) => {
+        resultList.forEach((item, index) => {
+          if (item.deviceType != 'sys' && item.children && item.children.length > 0) {
+            const children = getData(item.children, [], `${keyVal}-${index}`);
+            // 判断关键阻力路线
+            if (item.itemValue.startsWith(sysType) && children[0]) {
+              systemID.value = item.children[0]['itemValue'];
+            }
+
+            dataSourceList.push({
+              children: children,
+              title: item.itemText,
+              key: `${keyVal}-${index}`,
+              type: item.itemValue,
+              parentKey: `${keyVal}`,
+            });
           } else {
-            await getDataSource();
-          }
-          if (timer) {
-            getMonitor();
+            dataSourceList.push({
+              children: [],
+              title: item.itemText,
+              key: `${keyVal}-${index}`,
+              type: item.itemValue,
+              parentKey: `${keyVal}`,
+            });
           }
-        },
-        flag ? 0 : 1000
-      );
+        });
+        return dataSourceList;
+      };
+      treeData.value = getData(result, dataSource, key);
     }
   }
-}
-
-async function getDataSource() {
-  if (deviceType.value && deviceType.value.startsWith('sys') && systemID.value) {
-    const res = await list({ devicetype: 'sys', systemID: systemID.value });
-    const result = res.msgTxt;
-    const deviceArr = <DeviceType[]>[];
-    result.forEach((item) => {
-      const data = item['datalist'].filter((data: any) => {
-        const readData = data.readData;
-        return Object.assign(data, readData);
-      });
-      if (item.type != 'sys') {
-        if (item.type === 'majorpath') {
-          deviceArr.unshift({ deviceType: item.type, deviceName: item['typeName'], datalist: item['datalist'][0]['paths'] });
-          majorPathEchartsData.value = item['datalist'][0];
-        } else if (item.type.startsWith('surface_history')) {
-          surfaceEchartsData.value = item['datalist'][0];
-          deviceArr.unshift({
-            deviceType: item.type,
-            deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'],
-            datalist: data,
-          });
-        } else {
-          deviceArr.unshift({
-            deviceType: item.type,
-            deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'],
-            datalist: data,
-          });
-        }
-      }
-    });
 
-    deviceList.value = deviceArr;
-    if (deviceArr.length > 0) {
-      // if (deviceArr[1]) {
-      //   deviceActive.value = deviceArr[1].deviceType
-      //   monitorChange(1)
-      // } else {
-      //   deviceActive.value = deviceArr[0].deviceType
-      //   monitorChange(0)
-      // }
-      deviceActive.value = deviceArr[0].deviceType;
-      monitorChange(0);
-    }
-  } else {
-    let res = null;
-    if (systemID.value) {
-      res = await list({ devicetype: 'sys', types: deviceType.value, systemID: systemID.value });
-      if (res && res.msgTxt) {
-        const result = res.msgTxt;
-        result.forEach((item) => {
-          const data = item['datalist'].filter((data: any) => {
-            const readData = data.readData;
-            return Object.assign(data, readData);
-          });
-          if (item.type != 'sys') {
-            if (item.type.startsWith('majorpath') && item.type == deviceType.value) {
-              dataSource.value = item['datalist'][0]['paths'];
-              majorPathEchartsData.value = item['datalist'][0];
-              return;
-            } else if (item.type == deviceType.value) {
-              if (item.type == 'surface_history') {
-                // 工作面图标数据
-                surfaceEchartsData.value = item['datalist'][0];
-              } else {
-                dataSource.value = data;
-                console.log('关联设备数据--------------->', data);
-              }
-              return;
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = undefined;
+  function getMonitor(flag?) {
+    if (deviceType.value) {
+      if (timer) timer = null;
+      if (Object.prototype.toString.call(timer) === '[object Null]') {
+        timer = setTimeout(
+          async () => {
+            if (deviceType.value.startsWith('gasDay_normal')) {
+              await queryNowGasInsInfoList(); //人工瓦斯巡检
+            } else if (deviceType.value.startsWith('gasDayReport')) {
+              let searchParams = glob.sysOrgCode == 'sdmtjtbetmk' ? searchReportParam1.value : searchReportParam.value;
+              await getSearchReport(searchParams); //瓦斯日报
+            } else if (deviceType.value.startsWith('substation')) {
+              //分站
+              await getStationList();
+            } else {
+              await getDataSource();
             }
-          }
-        });
-      }
-    } else {
-      let resultData, searchForm;
-      if (monitorTable.value) {
-        const formData = monitorTable.value.getForm();
-        searchForm = formData.getFieldsValue();
+            if (timer) {
+              getMonitor();
+            }
+          },
+          flag ? 0 : 1000
+        );
       }
+    }
+  }
 
-      if (monitorTable.value) {
-        if (deviceType.value.startsWith('safetymonitor')) {
-          resultData = await list({ devicetype: deviceType.value, pagetype: 'normal', filterParams: { ...searchForm } });
-        } else if (deviceType.value.startsWith('location')) {
-          if (!departmentInfo) {
-            departmentInfo = await getDepartmentInfo({});
+  async function getDataSource() {
+    if (deviceType.value && deviceType.value.startsWith('sys') && systemID.value) {
+      const res = await list({ devicetype: 'sys', systemID: systemID.value });
+      const result = res.msgTxt;
+      const deviceArr = <DeviceType[]>[];
+      result.forEach((item) => {
+        const data = item['datalist'].filter((data: any) => {
+          const readData = data.readData;
+          return Object.assign(data, readData);
+        });
+        if (item.type != 'sys') {
+          if (item.type === 'majorpath') {
+            deviceArr.unshift({ deviceType: item.type, deviceName: item['typeName'], datalist: item['datalist'][0]['paths'] });
+            majorPathEchartsData.value = item['datalist'][0];
+          } else if (item.type.startsWith('surface_history')) {
+            surfaceEchartsData.value = item['datalist'][0];
+            deviceArr.unshift({
+              deviceType: item.type,
+              deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'],
+              datalist: data,
+            });
+          } else {
+            deviceArr.unshift({
+              deviceType: item.type,
+              deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'],
+              datalist: data,
+            });
           }
-          let department = null;
-          if (departmentInfo && locationForm && locationForm['department']) {
-            for (const key in departmentInfo) {
-              const item = departmentInfo[key];
-              if (item['id'] === locationForm['department']) {
-                department = item;
-                break;
+        }
+      });
+
+      deviceList.value = deviceArr;
+      if (deviceArr.length > 0) {
+        // if (deviceArr[1]) {
+        //   deviceActive.value = deviceArr[1].deviceType
+        //   monitorChange(1)
+        // } else {
+        //   deviceActive.value = deviceArr[0].deviceType
+        //   monitorChange(0)
+        // }
+        deviceActive.value = deviceArr[0].deviceType;
+        monitorChange(0);
+      }
+    } else {
+      let res = null;
+      if (systemID.value) {
+        res = await list({ devicetype: 'sys', types: deviceType.value, systemID: systemID.value });
+        if (res && res.msgTxt) {
+          const result = res.msgTxt;
+          result.forEach((item) => {
+            const data = item['datalist'].filter((data: any) => {
+              const readData = data.readData;
+              return Object.assign(data, readData);
+            });
+            if (item.type != 'sys') {
+              if (item.type.startsWith('majorpath') && item.type == deviceType.value) {
+                dataSource.value = item['datalist'][0]['paths'];
+                majorPathEchartsData.value = item['datalist'][0];
+                return;
+              } else if (item.type == deviceType.value) {
+                if (item.type == 'surface_history') {
+                  // 工作面图标数据
+                  surfaceEchartsData.value = item['datalist'][0];
+                } else {
+                  dataSource.value = data;
+                  console.log('关联设备数据--------------->', data);
+                }
+                return;
               }
             }
-          }
-          resultData = await list({
-            devicetype: deviceType.value,
-            pagetype: 'normal',
-            filterParams: {
-              strinstallpos: locationForm['stationname'] ? locationForm['stationname'] : '',
-              userName: locationForm['strname'] ? locationForm['strname'] : '',
-              userJson: department && department['name'] ? department['name'] : '',
-            },
-          });
-        } else if (deviceType.value.startsWith('vehicle')) {
-          resultData = await list({
-            devicetype: deviceType.value,
-            pagetype: 'normal',
-            filterParams: {
-              strinstallpos: locationForm['stationname'] ? locationForm['stationname'] : '',
-              vehicleName: locationForm['strname'] ? locationForm['strname'] : '',
-            },
           });
-        } else {
-          resultData = await list({ devicetype: deviceType.value, pagetype: 'normal' });
         }
       } else {
-        // 非安全监控
-        resultData = await list({ devicetype: deviceType.value, pagetype: 'normal' });
-      }
-      if (resultData && resultData.msgTxt) {
-        const result = resultData.msgTxt[0];
-        if (result) {
-          const data = result['datalist'].filter((data: any) => {
-            const readData = data.readData;
-            return Object.assign(data, readData);
-          });
+        let resultData, searchForm;
+        if (monitorTable.value) {
+          const formData = monitorTable.value.getForm();
+          searchForm = formData.getFieldsValue();
+        }
+
+        if (monitorTable.value) {
           if (deviceType.value.startsWith('safetymonitor')) {
-            const resultData = <any[]>[];
-            // 如果是安全监控的数据时需要过滤常见设备数据,根据设定的常用安全监控字典去匹配
-            const dictCodes = getDictItemsByCode('safetynormal');
-            if (searchForm && !searchForm['dataTypeName'] && dictCodes && dictCodes.length) {
-              for (let i = 0; i < dictCodes.length; i++) {
-                const dict = dictCodes[i];
-                data.forEach((item) => {
-                  if (dict['value'] == item['dataTypeName']) {
-                    resultData.push(item);
-                  }
-                });
+            resultData = await list({ devicetype: deviceType.value, pagetype: 'normal', filterParams: { ...searchForm } });
+          } else if (deviceType.value.startsWith('location')) {
+            if (!departmentInfo) {
+              departmentInfo = await getDepartmentInfo({});
+            }
+            let department = null;
+            if (departmentInfo && locationForm && locationForm['department']) {
+              for (const key in departmentInfo) {
+                const item = departmentInfo[key];
+                if (item['id'] === locationForm['department']) {
+                  department = item;
+                  break;
+                }
               }
-              dataSource.value = resultData;
-            } else {
-              dataSource.value = data;
             }
+            resultData = await list({
+              devicetype: deviceType.value,
+              pagetype: 'normal',
+              filterParams: {
+                strinstallpos: locationForm['stationname'] ? locationForm['stationname'] : '',
+                userName: locationForm['strname'] ? locationForm['strname'] : '',
+                userJson: department && department['name'] ? department['name'] : '',
+              },
+            });
+          } else if (deviceType.value.startsWith('vehicle')) {
+            resultData = await list({
+              devicetype: deviceType.value,
+              pagetype: 'normal',
+              filterParams: {
+                strinstallpos: locationForm['stationname'] ? locationForm['stationname'] : '',
+                vehicleName: locationForm['strname'] ? locationForm['strname'] : '',
+              },
+            });
           } else {
-            let tableData: any[] = [];
-            let noNetData: any[] = [];
-            data.filter((el) => {
-              if (el.netStatus == 1) {
-                tableData.push(el);
+            resultData = await list({ devicetype: deviceType.value, pagetype: 'normal' });
+          }
+        } else {
+          // 非安全监控
+          resultData = await list({ devicetype: deviceType.value, pagetype: 'normal' });
+        }
+        if (resultData && resultData.msgTxt) {
+          const result = resultData.msgTxt[0];
+          if (result) {
+            const data = result['datalist'].filter((data: any) => {
+              const readData = data.readData;
+              return Object.assign(data, readData);
+            });
+            if (deviceType.value.startsWith('safetymonitor')) {
+              const resultData = <any[]>[];
+              // 如果是安全监控的数据时需要过滤常见设备数据,根据设定的常用安全监控字典去匹配
+              const dictCodes = getDictItemsByCode('safetynormal');
+              if (searchForm && !searchForm['dataTypeName'] && dictCodes && dictCodes.length) {
+                for (let i = 0; i < dictCodes.length; i++) {
+                  const dict = dictCodes[i];
+                  data.forEach((item) => {
+                    if (dict['value'] == item['dataTypeName']) {
+                      resultData.push(item);
+                    }
+                  });
+                }
+                dataSource.value = resultData;
               } else {
-                noNetData.push(el);
+                dataSource.value = data;
               }
-            });
-            dataSource.value = [...tableData, ...noNetData];
+            } else {
+              let tableData: any[] = [];
+              let noNetData: any[] = [];
+              data.filter((el) => {
+                if (el.netStatus == 1) {
+                  tableData.push(el);
+                } else {
+                  noNetData.push(el);
+                }
+              });
+              dataSource.value = [...tableData, ...noNetData];
+            }
+          } else {
+            dataSource.value = [];
           }
         } else {
           dataSource.value = [];
         }
-      } else {
-        dataSource.value = [];
       }
     }
   }
-}
-
-//设备分站详情跳转
-function stationDetail(){
-  const newPage = router.resolve({ path: '/safety/list/detail/home' });
-  window.open(newPage.href, '_blank');
-}
-
-function goLocation(record) {
-  // debugger;
-  if (record['deviceType'] == 'person_bd' || record['deviceType'] == 'car_bd') {
-    actions.setGlobalState({ locationId: record.devNum, locationObj: null, pageObj: null, type: record['deviceType'].split('_')[0] });
-  } else if (deviceType.value == 'bundleSpyDayReport' || deviceType.value == 'dustDayReport' || deviceType.value == 'bundleDayReport') {
-    actions.setGlobalState({ locationName: record.jcdd, locationObj: null, pageObj: null, type: record['deviceType'] });
-  } else if (deviceType.value.startsWith('gasDay')) {
-    actions.setGlobalState({ locationName: record.strInstallPos, locationObj: null, pageObj: null, type: record['deviceType'] });
-  } else if (deviceType.value == 'gasDayReport') {
-    actions.setGlobalState({ locationName: record.jcdd, locationObj: null, pageObj: null, type: record['deviceType'] });
-  } else if (deviceType.value.startsWith('substation')) {
-    actions.setGlobalState({ locationId: record.id, locationObj: null, pageObj: null, type: record['deviceType'] });
-  } else {
-    if (deviceType.value.startsWith('location')) {
-      actions.setGlobalState({ locationId: record.deviceID, locationObj: null, pageObj: null, type: 'person' });
-    } else if (deviceType.value.startsWith('vehicle')) {
-      actions.setGlobalState({ locationId: record.deviceID, locationObj: null, pageObj: null, type: 'car' });
+
+  //设备分站详情跳转
+  function stationDetail() {
+    const newPage = router.resolve({ path: '/safety/list/detail/home' });
+    window.open(newPage.href, '_blank');
+  }
+
+  function goLocation(record) {
+    // debugger;
+    if (record['deviceType'] == 'person_bd' || record['deviceType'] == 'car_bd') {
+      actions.setGlobalState({ locationId: record.devNum, locationObj: null, pageObj: null, type: record['deviceType'].split('_')[0] });
+    } else if (deviceType.value == 'bundleSpyDayReport' || deviceType.value == 'dustDayReport' || deviceType.value == 'bundleDayReport') {
+      actions.setGlobalState({ locationName: record.jcdd, locationObj: null, pageObj: null, type: record['deviceType'] });
+    } else if (deviceType.value.startsWith('gasDay')) {
+      actions.setGlobalState({ locationName: record.strInstallPos, locationObj: null, pageObj: null, type: record['deviceType'] });
+    } else if (deviceType.value == 'gasDayReport') {
+      actions.setGlobalState({ locationName: record.jcdd, locationObj: null, pageObj: null, type: record['deviceType'] });
+    } else if (deviceType.value.startsWith('substation')) {
+      actions.setGlobalState({ locationId: record.id, locationObj: null, pageObj: null, type: record['deviceType'] });
     } else {
-      actions.setGlobalState({ locationId: record.deviceID, locationObj: null, pageObj: null });
+      if (deviceType.value.startsWith('location')) {
+        actions.setGlobalState({ locationId: record.deviceID, locationObj: null, pageObj: null, type: 'person' });
+      } else if (deviceType.value.startsWith('vehicle')) {
+        actions.setGlobalState({ locationId: record.deviceID, locationObj: null, pageObj: null, type: 'car' });
+      } else {
+        actions.setGlobalState({ locationId: record.deviceID, locationObj: null, pageObj: null });
+      }
     }
   }
-}
-
-//查询分站列表
-async function getStationList() {
-  let res = await getListAll();
-  res.forEach((el) => {
-    el.key = el.id;
-    el.linkstatusC = el.linkstatus ? '连接' : '断开';
-    el.gdmsC = el.gdms == '1' ? '直流供电' : el.gdms == '0' ? '交流供电' : '';
-  });
-  stationData.value = res;
-}
-//查询当前各班瓦斯巡检信息
-async function queryNowGasInsInfoList() {
-  let res = await queryNowGasInsInfo({
-    address: addressData.value,
-    userName: personData.value,
-    insType: instypeData.value,
-    class: classData.value,
-  });
-  console.log(res, '查询当前各班瓦斯巡检信息');
-  if (res.length) {
-    gaspatrolData.value = res;
-  } else {
-    gaspatrolData.value = [];
+
+  //查询分站列表
+  async function getStationList() {
+    let res = await getListAll();
+    res.forEach((el) => {
+      el.key = el.id;
+      el.linkstatusC = el.linkstatus ? '连接' : '断开';
+      el.gdmsC = el.gdms == '1' ? '直流供电' : el.gdms == '0' ? '交流供电' : '';
+    });
+    stationData.value = res;
   }
-}
-//查询巡检弹窗信息
-async function getSearch(param) {
-  addressData.value = param.address
-  personData.value = param.userName
-  instypeData.value = param.insType
-  classData.value = param.class
-  if (!param.insType) {
-    message.warning('请选择巡检类型!');
-  } else if (!param.class) {
-    message.warning('请选择巡检班次!');
-  } else {
-    await queryNowGasInsInfoList()
-    let res = await queryNowGasSta({ insType: param.insType, class: param.class });
-    console.log(res, '巡检弹窗信息');
-    if (res) {
-      inspectJd.value = res.comRate || 0;
-      inspectList[0].val = res.finishNum1 || 0;
-      inspectList[1].val = res.missNum1 || 0;
-      inspectList[2].val = res.finishNum2 || 0;
-      inspectList[3].val = res.missNum2 || 0;
+  //查询当前各班瓦斯巡检信息
+  async function queryNowGasInsInfoList() {
+    let res = await queryNowGasInsInfo({
+      address: addressData.value,
+      userName: personData.value,
+      insType: instypeData.value,
+      class: classData.value,
+    });
+    console.log(res, '查询当前各班瓦斯巡检信息');
+    if (res.length) {
+      gaspatrolData.value = res;
+    } else {
+      gaspatrolData.value = [];
     }
   }
-}
-//查询瓦斯日报列表数据
-async function getSearchReport(param) {
-  if (glob.sysOrgCode == 'sdmtjtbetmk') {
-    searchReportParam1.value = param
-  } else {
-    searchReportParam.value = param
-  }
-  let res = await queryReportData({ type: param })
-  console.log(res, '瓦斯日报列表')
-  reportTableData.value = JSON.parse(res.content) || []
-}
-
-function goDetail(record?) {
-  debugger;
-  if (record) {
-    activeID.value = record.deviceID;
-    if (deviceType.value.startsWith('fiber')) {
-      currentModal.value = FiberModal;
-      modalVisible.value = true;
-    } else if (deviceType.value.startsWith('dusting')) {
-      currentModal.value = DustModal;
-      modalVisible.value = true;
-    } else if (deviceType.value.startsWith('bundletube')) {
-      currentModal.value = BundleModal;
-      modalVisible.value = true;
-    } else if (deviceType.value.startsWith('firemon_normal')) {
-      // currentModal.value = BundleModal;
-      currentModal.value = WisdomBallModal;
-      modalVisible.value = true;
-    } else if (deviceType.value.startsWith('ballvalve')) {
-      currentModal.value = BallvalveModal;
-      modalVisible.value = true;
-    } else if (deviceType.value.startsWith('atomizing')) {
-      currentModal.value = AtomizingModal;
-      modalVisible.value = true;
-    } else if (deviceType.value.startsWith('gaspatrol')) {
-      currentModal.value = GaspatrolModal;
-      modalVisible.value = true;
-    } else if (deviceType.value.indexOf('gate') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-gate', query: { id: activeID.value, deviceType: deviceType.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('window') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-window', query: { id: activeID.value, deviceType: deviceType.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('windrect') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-windrect', query: { id: activeID.value, deviceType: deviceType.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('fanmain') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-fanmain', query: { id: activeID.value, deviceType: deviceType.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('fanlocal') != -1 && glob.sysOrgCode !== 'ymdnymdn') {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-fanlocal', query: { id: activeID.value, deviceType: deviceType.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('fanlocal') != -1 && glob.sysOrgCode == 'ymdnymdn') {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-fanlocal1', query: { id: activeID.value, deviceType: record.deviceType } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('pulping') != -1) {
-      const newPage = router.resolve({ path: '/grout-home', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('pressurefan') != -1) {
-      const newPage = router.resolve({ path: '/nitrogen/home', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('chamber') != -1) {
-      const newPage = router.resolve({ path: '/chamber-home', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('safetymonitor') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/device-monitor/safetymonitor', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('pump') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/gasPump-home', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (systemType.value.indexOf('nitrogen') != -1) {
-      const newPage = router.resolve({ path: '/nitrogen-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('forcFan') != -1) {
-      const newPage = router.resolve({ path: '/forcFan/home', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('pulping') != -1) {
-      const newPage = router.resolve({ path: '/grout-home', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
+  //查询巡检弹窗信息
+  async function getSearch(param) {
+    addressData.value = param.address;
+    personData.value = param.userName;
+    instypeData.value = param.insType;
+    classData.value = param.class;
+    if (!param.insType) {
+      message.warning('请选择巡检类型!');
+    } else if (!param.class) {
+      message.warning('请选择巡检班次!');
     } else {
-      message.info('待开发。。。');
-    }
-  } else {
-    if (systemType.value.indexOf('sys_dongshi') != -1) {
-      const newPage = router.resolve({ path: '/chamber-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (systemType.value.indexOf('sys_obfurage') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/obfurage-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (systemType.value.indexOf('sys_surface_caimei') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/wokerFace-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (systemType.value.indexOf('sys_surface_juejin') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/tunFace-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (systemType.value.indexOf('sys_maintunnel_leather') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/beltTun-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (systemType.value.indexOf('sys_surface_junya') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/balancePress-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (systemType.value.indexOf('sys_nitrogen') != -1) {
-      const newPage = router.resolve({ path: '/nitrogen-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('forcFan') != -1) {
-      const newPage = router.resolve({ path: '/forcFan/home', query: { id: activeID.value } });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('pulping') != -1) {
-      const newPage = router.resolve({ path: '/grout-home', query: { id: systemID.value } });
-      window.open(newPage.href, '_blank');
+      await queryNowGasInsInfoList();
+      let res = await queryNowGasSta({ insType: param.insType, class: param.class });
+      console.log(res, '巡检弹窗信息');
+      if (res) {
+        inspectJd.value = res.comRate || 0;
+        inspectList[0].val = res.finishNum1 || 0;
+        inspectList[1].val = res.missNum1 || 0;
+        inspectList[2].val = res.finishNum2 || 0;
+        inspectList[3].val = res.missNum2 || 0;
+      }
+    }
+  }
+  //查询瓦斯日报列表数据
+  async function getSearchReport(param) {
+    if (glob.sysOrgCode == 'sdmtjtbetmk') {
+      searchReportParam1.value = param;
     } else {
-      message.info('待开发。。。');
+      searchReportParam.value = param;
     }
+    let res = await queryReportData({ type: param });
+    console.log(res, '瓦斯日报列表');
+    reportTableData.value = JSON.parse(res.content) || [];
   }
-}
-function goGasDayReport() {
-  const newPage = router.resolve({ path: '/gas/gas-report-inspect/home' });
-  window.open(newPage.href, '_blank');
-}
-function gogasDayReportHis() {
-  const newPage = router.resolve({ path: '/gas/gasDayReport/home' });
-  window.open(newPage.href, '_blank');
-}
-function goDustDayReport() {
-  const newPage = router.resolve({ path: '/dustDayReport/home' });
-  window.open(newPage.href, '_blank');
-}
-function goBundleDayReport() {
-  const newPage = router.resolve({ path: '/bundleDayReport/home' });
-  window.open(newPage.href, '_blank');
-}
-function goBundleSpyDayReport() {
-  const newPage = router.resolve({ path: '/bundleSpyDayReport/home' });
-  window.open(newPage.href, '_blank');
-}
-function exportXls() {
-  handleExportXls('瓦斯巡检记录', getExportUrl, { devicetype: deviceType.value });
-}
-
-function toHome() {
-  deviceList.value = [];
-  if (timer) clearTimeout(timer);
-  timer = undefined;
-  deviceType.value = '';
-  go(glob.homePath);
-}
-
-function toHide() {
-  tableShow.value = !tableShow.value;
-  document.getElementById('monitorBox').addEventListener('animationend', () => {
-    if (!tableShow.value) {
-      document.getElementById('monitorBox').style.height = '0px';
+
+  function goDetail(record?) {
+    if (record) {
+      activeID.value = record.deviceID;
+      if (deviceType.value.startsWith('fiber')) {
+        currentModal.value = FiberModal;
+        modalVisible.value = true;
+      } else if (deviceType.value.startsWith('dusting')) {
+        currentModal.value = DustModal;
+        modalVisible.value = true;
+      } else if (deviceType.value.startsWith('bundletube')) {
+        currentModal.value = BundleModal;
+        modalVisible.value = true;
+      } else if (deviceType.value.startsWith('firemon_normal')) {
+        // currentModal.value = BundleModal;
+        currentModal.value = WisdomBallModal;
+        modalVisible.value = true;
+      } else if (deviceType.value.startsWith('ballvalve')) {
+        currentModal.value = BallvalveModal;
+        modalVisible.value = true;
+      } else if (deviceType.value.startsWith('atomizing')) {
+        currentModal.value = AtomizingModal;
+        modalVisible.value = true;
+      } else if (deviceType.value.startsWith('gaspatrol')) {
+        currentModal.value = GaspatrolModal;
+        modalVisible.value = true;
+      } else if (deviceType.value.indexOf('gate') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/monitor-gate', query: { id: activeID.value, deviceType: deviceType.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('window') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/monitor-window', query: { id: activeID.value, deviceType: deviceType.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('windrect') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/monitor-windrect', query: { id: activeID.value, deviceType: deviceType.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('fanmain') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/monitor-fanmain', query: { id: activeID.value, deviceType: deviceType.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('fanlocal') != -1 && glob.sysOrgCode !== 'ymdnymdn') {
+        const newPage = router.resolve({ path: '/monitorChannel/monitor-fanlocal', query: { id: activeID.value, deviceType: deviceType.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('fanlocal') != -1 && glob.sysOrgCode == 'ymdnymdn') {
+        const newPage = router.resolve({ path: '/monitorChannel/monitor-fanlocal1', query: { id: activeID.value, deviceType: record.deviceType } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('pulping') != -1) {
+        const newPage = router.resolve({ path: '/grout-home', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('pressurefan') != -1) {
+        const newPage = router.resolve({ path: '/nitrogen/home', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('chamber') != -1) {
+        const newPage = router.resolve({ path: '/chamber-home', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('safetymonitor') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/device-monitor/safetymonitor', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('pump') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/gasPump-home', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (systemType.value.indexOf('nitrogen') != -1) {
+        const newPage = router.resolve({ path: '/nitrogen-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('forcFan') != -1) {
+        const newPage = router.resolve({ path: '/forcFan/home', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('pulping') != -1) {
+        const newPage = router.resolve({ path: '/grout-home', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else {
+        message.info('待开发。。。');
+      }
     } else {
-      document.getElementById('monitorBox').style.height = '290px';
+      if (systemType.value.indexOf('sys_dongshi') != -1) {
+        const newPage = router.resolve({ path: '/chamber-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (systemType.value.indexOf('sys_obfurage') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/obfurage-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (systemType.value.indexOf('sys_surface_caimei') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/wokerFace-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (systemType.value.indexOf('sys_surface_juejin') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/tunFace-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (systemType.value.indexOf('sys_maintunnel_leather') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/beltTun-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (systemType.value.indexOf('sys_surface_junya') != -1) {
+        const newPage = router.resolve({ path: '/monitorChannel/balancePress-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (systemType.value.indexOf('sys_nitrogen') != -1) {
+        const newPage = router.resolve({ path: '/nitrogen-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('forcFan') != -1) {
+        const newPage = router.resolve({ path: '/forcFan/home', query: { id: activeID.value } });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('pulping') != -1) {
+        const newPage = router.resolve({ path: '/grout-home', query: { id: systemID.value } });
+        window.open(newPage.href, '_blank');
+      } else {
+        message.info('待开发。。。');
+      }
     }
-  });
-}
+  }
+  function goGasDayReport() {
+    const newPage = router.resolve({ path: '/gas/gas-report-inspect/home' });
+    window.open(newPage.href, '_blank');
+  }
+  function gogasDayReportHis() {
+    const newPage = router.resolve({ path: '/gas/gasDayReport/home' });
+    window.open(newPage.href, '_blank');
+  }
+  function goDustDayReport() {
+    const newPage = router.resolve({ path: '/dustDayReport/home' });
+    window.open(newPage.href, '_blank');
+  }
+  function goBundleDayReport() {
+    const newPage = router.resolve({ path: '/bundleDayReport/home' });
+    window.open(newPage.href, '_blank');
+  }
+  function goBundleSpyDayReport() {
+    const newPage = router.resolve({ path: '/bundleSpyDayReport/home' });
+    window.open(newPage.href, '_blank');
+  }
+  function exportXls() {
+    handleExportXls('瓦斯巡检记录', getExportUrl, { devicetype: deviceType.value });
+  }
+
+  function toHome() {
+    deviceList.value = [];
+    if (timer) clearTimeout(timer);
+    timer = undefined;
+    deviceType.value = '';
+    go(glob.homePath);
+  }
 
-async function findTreeDataValue(obj) {
-  const findDeviceType = (data: any[], obj, flag = true) => {
-    return data.find((item: any) => {
-      if (item.children.length > 0) {
-        findDeviceType(item.children, obj);
+  function toHide() {
+    tableShow.value = !tableShow.value;
+    document.getElementById('monitorBox').addEventListener('animationend', () => {
+      if (!tableShow.value) {
+        document.getElementById('monitorBox').style.height = '0px';
+      } else {
+        document.getElementById('monitorBox').style.height = '290';
       }
-      // debugger;
-      if (obj.deviceType && obj.deviceType.startsWith('sys_')) {
-        // debugger;
-        if (item.type == obj.deviceid) {
-          deviceType.value = 'sys';
-          systemID.value = obj.deviceid;
-          selectedKeys.value = [item.key];
-          expandedKeys.value = [item.key];
-          treeNodeTitle.value = item.title;
+    });
+  }
+
+  async function findTreeDataValue(obj) {
+    const findDeviceType = (data: any[], obj, flag = true) => {
+      return data.find((item: any) => {
+        if (item.children.length > 0) {
+          findDeviceType(item.children, obj);
         }
-      } else {
-        if (!flag) {
-          if (obj.deviceType && item.type.startsWith(obj.deviceType)) {
-            deviceType.value = item.type;
+        // debugger;
+        if (obj.deviceType && obj.deviceType.startsWith('sys_')) {
+          // debugger;
+          if (item.type == obj.deviceid) {
+            deviceType.value = 'sys';
+            systemID.value = obj.deviceid;
             selectedKeys.value = [item.key];
             expandedKeys.value = [item.key];
             treeNodeTitle.value = item.title;
-            return true;
           }
-          return false;
         } else {
-          if (obj.deviceType && item.type == obj.deviceType) {
-            deviceType.value = item.type;
-            selectedKeys.value = [item.key];
-            expandedKeys.value = [item.key];
-            treeNodeTitle.value = item.title;
-            return true;
+          if (!flag) {
+            if (obj.deviceType && item.type.startsWith(obj.deviceType)) {
+              deviceType.value = item.type;
+              selectedKeys.value = [item.key];
+              expandedKeys.value = [item.key];
+              treeNodeTitle.value = item.title;
+              return true;
+            }
+            return false;
+          } else {
+            if (obj.deviceType && item.type == obj.deviceType) {
+              deviceType.value = item.type;
+              selectedKeys.value = [item.key];
+              expandedKeys.value = [item.key];
+              treeNodeTitle.value = item.title;
+              return true;
+            }
+            return false;
           }
-          return false;
         }
-      }
-      return false;
-    });
-  };
-  const flag = findDeviceType(treeData.value, obj);
-  if (!flag) {
-    findDeviceType(treeData.value, obj, false);
-  }
-  // 无类型时
-  if (!treeNodeTitle.value && treeData.value && treeData.value[0] && treeData.value[0]['children']) {
-    const defaultData = treeData.value[0]['children'][0];
-    if (deviceType.value !== defaultData.type) deviceType.value = defaultData.type;
-    selectedKeys.value = [defaultData.key as string];
-    expandedKeys.value = [defaultData.key as string];
-    treeNodeTitle.value = defaultData.title;
-  }
+        return false;
+      });
+    };
+    const flag = findDeviceType(treeData.value, obj);
+    if (!flag) {
+      findDeviceType(treeData.value, obj, false);
+    }
+    // 无类型时
+    if (!treeNodeTitle.value && treeData.value && treeData.value[0] && treeData.value[0]['children']) {
+      const defaultData = treeData.value[0]['children'][0];
+      if (deviceType.value !== defaultData.type) deviceType.value = defaultData.type;
+      selectedKeys.value = [defaultData.key as string];
+      expandedKeys.value = [defaultData.key as string];
+      treeNodeTitle.value = defaultData.title;
+    }
 
-  if (timer === undefined) {
-    timer = null;
-    await getDataSource();
-    getMonitor(true);
-  }
-}
-
-function monitorChange(index) {
-  dataSource.value = [];
-  deviceActive.value = deviceList.value[index].deviceType;
-  if (deviceType.value != deviceActive.value) deviceType.value = deviceActive.value;
-  if (activeKey.value == '1' && monitorTable.value) {
-    monitorTable.value.setLoading(true);
-    dataSource.value = deviceList.value[index].datalist;
-  }
-  if (activeKey.value == '2' && historyTable.value) {
-    historyTable.value.setLoading(true);
-  }
-  if (activeKey.value == '3' && alarmHistoryTable.value) {
-    alarmHistoryTable.value.setLoading(true);
-  }
-  if (activeKey.value == '4' && handlerHistoryTable.value) {
-    handlerHistoryTable.value.setLoading(true);
+    if (timer === undefined) {
+      timer = null;
+      await getDataSource();
+      getMonitor(true);
+    }
   }
-}
-/**
- * 设置巷道设备定位图标的显示与隐藏
- */
-function setLocation() {
-  let locationStr = '';
-  locationList.value.forEach((item: any) => {
-    if (item.Visible) {
-      locationStr = locationStr ? locationStr + ',' + item.value : item.value;
+
+  function monitorChange(index) {
+    dataSource.value = [];
+    deviceActive.value = deviceList.value[index].deviceType;
+    if (deviceType.value != deviceActive.value) deviceType.value = deviceActive.value;
+    if (activeKey.value == '1' && monitorTable.value) {
+      monitorTable.value.setLoading(true);
+      dataSource.value = deviceList.value[index].datalist;
     }
-  });
-  actions.setGlobalState({ locationId: null, locationObj: null, pageObj: null, locationPlane: locationStr });
-  setTimeout(() => {
-    message.success('设置成功');
-  }, 600);
-}
-
-// function clearMonitor() {
-//   clearTimeout(timer);
-//   timer = undefined;
-//   if (startMonitorTimer) {
-//     clearTimeout(startMonitorTimer);
-//   }
-//   dataSource.value = [];
-//   startMonitorTimer = setTimeout(() => {
-//     expandedKeys.value = keys;
-//     selectedKeys.value = keys;
-//     treeNodeTitle.value = e.node.title;
-//     activeKey.value = '1';
-//     timer = null;
-//     if (e.node.children?.length < 1) {
-//       getMonitor(true);
-//     }
-//   }, 1000);
-// }show
-
-watch(
-  () => props.pageData,
-  async (pageObj) => {
-    isRefresh.value = false;
-    if (!treeData.value || treeData.value?.length < 1) {
-      await getDeviceType();
+    if (activeKey.value == '2' && historyTable.value) {
+      historyTable.value.setLoading(true);
+    }
+    if (activeKey.value == '3' && alarmHistoryTable.value) {
+      alarmHistoryTable.value.setLoading(true);
     }
-    nextTick(() => {
-      isRefresh.value = true;
-      debugger;
-      // if (pageObj && pageObj.pageType && pageObj.pageType.startsWith('sys_')) {
-      //   findTreeDataValue({ deviceid: systemID.value });
-      // } else {
-      //   findTreeDataValue({ deviceType: pageObj.pageType });
-      // }
-      findTreeDataValue(pageObj);
+    if (activeKey.value == '4' && handlerHistoryTable.value) {
+      handlerHistoryTable.value.setLoading(true);
+    }
+  }
+  /**
+   * 设置巷道设备定位图标的显示与隐藏
+   */
+  function setLocation() {
+    let locationStr = '';
+    locationList.value.forEach((item: any) => {
+      if (item.Visible) {
+        locationStr = locationStr ? locationStr + ',' + item.value : item.value;
+      }
     });
-  },
-  { immediate: true }
-);
-
-onMounted(async () => {
-  const pageObj = props.pageData;
-  if (!pageObj) return;
-  if (pageObj && pageObj.pageType) {
-    if (pageObj.pageType.startsWith('sys_')) {
-      await getDeviceType(pageObj.pageType);
-      findTreeDataValue({ deviceType: pageObj.pageType, deviceid: pageObj.deviceid });
+    actions.setGlobalState({ locationId: null, locationObj: null, pageObj: null, locationPlane: locationStr });
+    setTimeout(() => {
+      message.success('设置成功');
+    }, 600);
+  }
+
+  // function clearMonitor() {
+  //   clearTimeout(timer);
+  //   timer = undefined;
+  //   if (startMonitorTimer) {
+  //     clearTimeout(startMonitorTimer);
+  //   }
+  //   dataSource.value = [];
+  //   startMonitorTimer = setTimeout(() => {
+  //     expandedKeys.value = keys;
+  //     selectedKeys.value = keys;
+  //     treeNodeTitle.value = e.node.title;
+  //     activeKey.value = '1';
+  //     timer = null;
+  //     if (e.node.children?.length < 1) {
+  //       getMonitor(true);
+  //     }
+  //   }, 1000);
+  // }show
+
+  watch(
+    () => props.pageData,
+    async (pageObj) => {
+      isRefresh.value = false;
+      if (!treeData.value || treeData.value?.length < 1) {
+        await getDeviceType();
+      }
+      nextTick(() => {
+        isRefresh.value = true;
+        // if (pageObj && pageObj.pageType && pageObj.pageType.startsWith('sys_')) {
+        //   findTreeDataValue({ deviceid: systemID.value });
+        // } else {
+        //   findTreeDataValue({ deviceType: pageObj.pageType });
+        // }
+        findTreeDataValue(pageObj);
+      });
+    },
+    { immediate: true }
+  );
+
+  onMounted(async () => {
+    const pageObj = props.pageData;
+    if (!pageObj) return;
+    if (pageObj && pageObj.pageType) {
+      if (pageObj.pageType.startsWith('sys_')) {
+        await getDeviceType(pageObj.pageType);
+        findTreeDataValue({ deviceType: pageObj.pageType, deviceid: pageObj.deviceid });
+      } else {
+        await getDeviceType();
+        findTreeDataValue({ deviceType: pageObj.pageType });
+      }
     } else {
       await getDeviceType();
-      findTreeDataValue({ deviceType: pageObj.pageType });
+      findTreeDataValue({ deviceid: pageObj.deviceid });
+    }
+    // 定位
+    const posShowData = pageObj.locationPlane;
+    if (posShowData) {
+      locationList.value = posShowData;
+    } else {
+      locationList.value = await devPosition({});
     }
-  } else {
-    await getDeviceType();
-    findTreeDataValue({ deviceid: pageObj.deviceid });
-  }
-  // 定位
-  const posShowData = pageObj.locationPlane;
-  if (posShowData) {
-    locationList.value = posShowData;
-  } else {
-    locationList.value = await devPosition({});
-  }
 
-  // safetyOption.value = await safetyDeviceList(null, { devicetype: 'safetymonitor', code: 'dataTypeName' })
-});
+    // safetyOption.value = await safetyDeviceList(null, { devicetype: 'safetymonitor', code: 'dataTypeName' })
+  });
 
-onUnmounted(() => {
-  if (timer) {
-    clearTimeout(timer);
-  }
-  timer = undefined;
-});
+  onUnmounted(() => {
+    if (timer) {
+      clearTimeout(timer);
+    }
+    timer = undefined;
+  });
 </script>
 
 <style lang="less" scoped>
-@import '/@/design/theme.less';
-@import '/@/design/vent/modal.less';
-@ventSpace: zxm;
+  @import '/@/design/theme.less';
+  @import '/@/design/vent/modal.less';
+  @ventSpace: zxm;
+
+  @{theme-deepblue} {
+    .scene-box {
+      // --image-modal-top: url('/@/assets/images/themify/deepblue/vent/home/modal-top.png');
+      // --image-tree-icon-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-bg.png');
+      // --image-tree-icon-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-hover-bg.png');
+      // --image-tree-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-bg.png');
+      // --image-tree-expansion-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-expansion-bg.png');
+      // --image-tree-expansion-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-expansion-hover-bg.png');
+      // --image-location-bg: url('/@/assets/images/themify/deepblue/vent/home/location-bg.png');
+      // --image-location-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/location-hover-bg.png');
+      // --image-tree-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-bg.png');
+      // --image-turn-location-top-bg: url('/@/assets/images/themify/deepblue/vent/home/turn-location-top-bg.png');
+      // --image-tree-icon-cover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-cover-bg.png');
+      // --image-tree-icon-cover-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-cover-hover-bg.png');
+      // --image-tohome: url('/@/assets/images/themify/deepblue/vent/home/tohome.png');
+      // --tree-node-select: #0963c1;
+      // --tree-node-hover: #0f376ccc;
+      // --location-bottom-bg: #21324855;
+      // --location-bottom-border: #aed1ff4d;
+    }
+  }
 
-@{theme-deepblue} {
   .scene-box {
-    // --image-modal-top: url('/@/assets/images/themify/deepblue/vent/home/modal-top.png');
-    // --image-tree-icon-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-bg.png');
-    // --image-tree-icon-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-hover-bg.png');
-    // --image-tree-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-bg.png');
-    // --image-tree-expansion-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-expansion-bg.png');
-    // --image-tree-expansion-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-expansion-hover-bg.png');
-    // --image-location-bg: url('/@/assets/images/themify/deepblue/vent/home/location-bg.png');
-    // --image-location-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/location-hover-bg.png');
-    // --image-tree-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-bg.png');
-    // --image-turn-location-top-bg: url('/@/assets/images/themify/deepblue/vent/home/turn-location-top-bg.png');
-    // --image-tree-icon-cover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-cover-bg.png');
-    // --image-tree-icon-cover-hover-bg: url('/@/assets/images/themify/deepblue/vent/home/tree-icon-cover-hover-bg.png');
-    // --image-tohome: url('/@/assets/images/themify/deepblue/vent/home/tohome.png');
-    // --tree-node-select: #0963c1;
-    // --tree-node-hover: #0f376ccc;
-    // --location-bottom-bg: #21324855;
-    // --location-bottom-border: #aed1ff4d;
+    --image-modal-top: url('/@/assets/images/vent/home/modal-top.png');
+    --image-tree-icon-bg: url('/@/assets/images/vent/home/tree-icon-bg.png');
+    --image-tree-icon-hover-bg: url('/@/assets/images/vent/home/tree-icon-hover-bg.png');
+    --image-tree-bg: url('/@/assets/images/vent/home/tree-bg.png');
+    --image-tree-expansion-bg: url('/@/assets/images/vent/home/tree-expansion-bg.png');
+    --image-tree-expansion-hover-bg: url('/@/assets/images/vent/home/tree-expansion-hover-bg.png');
+    --image-location-bg: url('/@/assets/images/vent/home/location-bg.png');
+    --image-location-hover-bg: url('/@/assets/images/vent/home/location-hover-bg.png');
+    --image-turn-location-top-bg: url('/@/assets/images/vent/home/turn-location-top-bg.png');
+    --image-tree-icon-cover-bg: url('/@/assets/images/vent/home/tree-icon-cover-bg.png');
+    --image-tree-icon-cover-hover-bg: url('/@/assets/images/vent/home/tree-icon-cover-hover-bg.png');
+    --image-tohome: url('/@/assets/images/vent/home/tohome.png');
+    --tree-node-select: #00b1c8;
+    --tree-node-hover: #00b1c855;
+    --location-bottom-bg: #00709955;
+    --location-bottom-border: #aef3ff4d;
   }
-}
-
-.scene-box {
-  --image-modal-top: url('/@/assets/images/vent/home/modal-top.png');
-  --image-tree-icon-bg: url('/@/assets/images/vent/home/tree-icon-bg.png');
-  --image-tree-icon-hover-bg: url('/@/assets/images/vent/home/tree-icon-hover-bg.png');
-  --image-tree-bg: url('/@/assets/images/vent/home/tree-bg.png');
-  --image-tree-expansion-bg: url('/@/assets/images/vent/home/tree-expansion-bg.png');
-  --image-tree-expansion-hover-bg: url('/@/assets/images/vent/home/tree-expansion-hover-bg.png');
-  --image-location-bg: url('/@/assets/images/vent/home/location-bg.png');
-  --image-location-hover-bg: url('/@/assets/images/vent/home/location-hover-bg.png');
-  --image-turn-location-top-bg: url('/@/assets/images/vent/home/turn-location-top-bg.png');
-  --image-tree-icon-cover-bg: url('/@/assets/images/vent/home/tree-icon-cover-bg.png');
-  --image-tree-icon-cover-hover-bg: url('/@/assets/images/vent/home/tree-icon-cover-hover-bg.png');
-  --image-tohome: url('/@/assets/images/vent/home/tohome.png');
-  --tree-node-select: #00b1c8;
-  --tree-node-hover: #00b1c855;
-  --location-bottom-bg: #00709955;
-  --location-bottom-border: #aef3ff4d;
-}
-
-.top-header {
-  position: fixed;
-  width: 100%;
-  height: 56px;
-  background: var(--image-modal-top);
-  text-align: center;
-  line-height: 56px;
-  font-size: 28px;
-  color: #ffffffdd;
-  font-weight: 600;
-  z-index: 1;
-  letter-spacing: 2px;
-  font-size: 30px;
-}
-
-.select-node {
-  position: fixed;
-  top: 100px;
-  left: 10px;
-  color: var(--vent-font-color);
-  display: flex;
-  justify-content: center;
-  font-size: 22px;
-
-  .title {
-    margin-left: 10px;
+
+  .top-header {
+    position: fixed;
+    width: 100%;
+    height: 56px;
+    background: var(--image-modal-top);
+    text-align: center;
+    line-height: 56px;
+    font-size: 28px;
+    color: #ffffffdd;
+    font-weight: 600;
+    z-index: 1;
+    letter-spacing: 2px;
+    font-size: 30px;
   }
-}
 
-.expansion-icon {
-  background: var(--image-tree-icon-bg) no-repeat;
-  background-size: contain;
-  position: absolute;
-  left: 190px;
-  top: 25px;
+  .select-node {
+    position: fixed;
+    top: 100px;
+    left: 10px;
+    color: var(--vent-font-color);
+    display: flex;
+    justify-content: center;
+    font-size: 22px;
 
-  &:hover {
-    background: var(--image-tree-icon-hover-bg) no-repeat;
+    .title {
+      margin-left: 10px;
+    }
+  }
+
+  .expansion-icon {
+    background: var(--image-tree-icon-bg) no-repeat;
     background-size: contain;
+    position: absolute;
+    left: 190px;
+    top: 25px;
+
+    &:hover {
+      background: var(--image-tree-icon-hover-bg) no-repeat;
+      background-size: contain;
+    }
   }
-}
-
-.device-select {
-  width: 250px;
-  height: 500px;
-  background: var(--image-tree-bg) no-repeat;
-  position: fixed;
-  top: 100px;
-  left: 10px;
-  background-size: contain;
-  pointer-events: auto;
-  padding: 20px 10px 30px 10px;
-}
-
-.inspect-info-xj {
-  position: fixed;
-  top: 100px;
-  left: 250px;
-  width: 320px;
-  height: 272px;
-  padding: 20px;
-  background: url('@/assets/images/inspect-bg.png') no-repeat center;
-  background-size: 100% 100%;
-  box-sizing: border-box;
-
-  .info-xj-title {
-    width: 230px;
-    height: 36px;
-    line-height: 36px;
-    padding-left: 50px;
-    margin: 10px 0px;
-    color: #fff;
-    background: url('@/assets/images/inspect-title.png') no-repeat center;
-    background-size: 100% 100%;
+
+  .device-select {
+    width: 250px;
+    height: 500px;
+    background: var(--image-tree-bg) no-repeat;
+    position: fixed;
+    top: 100px;
+    left: 10px;
+    background-size: contain;
+    pointer-events: auto;
+    padding: 20px 10px 30px 10px;
   }
 
-  .info-xj-content {
-    display: flex;
-    flex-wrap: wrap;
-    height: calc(100% - 56px);
-    padding: 10px 0px;
+  .inspect-info-xj {
+    position: fixed;
+    top: 100px;
+    left: 250px;
+    width: 320px;
+    height: 272px;
+    padding: 20px;
+    background: url('@/assets/images/inspect-bg.png') no-repeat center;
+    background-size: 100% 100%;
     box-sizing: border-box;
 
-    .xj-content-item {
-      display: flex;
-      flex-direction: column;
-      justify-content: space-around;
-      align-items: center;
-      width: 126px;
-      height: 67px;
-      margin: 7px;
+    .info-xj-title {
+      width: 230px;
+      height: 36px;
+      line-height: 36px;
+      padding-left: 50px;
+      margin: 10px 0px;
       color: #fff;
-      padding-bottom: 5px;
-      background: url('@/assets/images/inspect-item.png') no-repeat center;
+      background: url('@/assets/images/inspect-title.png') no-repeat center;
+      background-size: 100% 100%;
+    }
 
-      .content-item-val {
-        font-family: 'douyuFont';
-        color: #74e9fe;
+    .info-xj-content {
+      display: flex;
+      flex-wrap: wrap;
+      height: calc(100% - 56px);
+      padding: 10px 0px;
+      box-sizing: border-box;
+
+      .xj-content-item {
+        display: flex;
+        flex-direction: column;
+        justify-content: space-around;
+        align-items: center;
+        width: 126px;
+        height: 67px;
+        margin: 7px;
+        color: #fff;
+        padding-bottom: 5px;
+        background: url('@/assets/images/inspect-item.png') no-repeat center;
+
+        .content-item-val {
+          font-family: 'douyuFont';
+          color: #74e9fe;
+        }
       }
     }
   }
-}
-
-.is-expansion-icon {
-  padding: 5px;
-  pointer-events: auto;
-  z-index: 999;
-}
-
-.device-select-show {
-  left: 10px;
-  animation-name: treeShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-}
-
-.device-select-hide {
-  left: -250px;
-  animation-name: treeHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-}
-
-.node-select-show {
-  width: 276px;
-  height: 44px;
-  background: var(--image-tree-expansion-bg) no-repeat;
-  left: 10px;
-  animation-name: treeShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-  display: flex;
-  align-items: center;
-  margin-left: 0;
-  justify-content: flex-start;
-  pointer-events: auto;
-
-  &:hover {
-    background: var(--image-tree-expansion-hover-bg) no-repeat;
+
+  .is-expansion-icon {
+    padding: 5px;
+    pointer-events: auto;
+    z-index: 999;
   }
 
-  .put-away-icon {
-    position: relative;
-    display: inline-block;
-    left: 4px;
+  .device-select-show {
+    left: 10px;
+    animation-name: treeShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
   }
-}
-
-.node-select-hide {
-  left: -400px;
-  animation-name: treeHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-}
-
-.device-select-box {
-  width: 208px;
-  height: 450px;
-  overflow-y: auto;
-  color: var(--vent-font-color);
-
-  :deep(.zxm-tree) {
-    background: transparent !important;
-    color: var(--vent-font-color) !important;
-
-    .zxm-tree-switcher {
-      background: transparent !important;
-    }
 
-    .zxm-tree-node-content-wrapper.zxm-tree-node-selected {
-      background-color: var(--tree-node-select);
-    }
+  .device-select-hide {
+    left: -250px;
+    animation-name: treeHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-    .zxm-tree-node-content-wrapper:hover {
-      background-color: var(--tree-node-hover);
+  .node-select-show {
+    width: 276px;
+    height: 44px;
+    background: var(--image-tree-expansion-bg) no-repeat;
+    left: 10px;
+    animation-name: treeShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+    display: flex;
+    align-items: center;
+    margin-left: 0;
+    justify-content: flex-start;
+    pointer-events: auto;
+
+    &:hover {
+      background: var(--image-tree-expansion-hover-bg) no-repeat;
     }
 
-    input {
-      height: 0px !important;
+    .put-away-icon {
+      position: relative;
+      display: inline-block;
+      left: 4px;
     }
   }
 
-  &::-webkit-scrollbar-track {
-    -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
-    border-radius: 10px;
-    background: #ededed22;
-    height: 100px;
+  .node-select-hide {
+    left: -400px;
+    animation-name: treeHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
   }
 
-  &::-webkit-scrollbar-thumb {
-    -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
-    background: #4288a444;
-  }
-}
-
-.location-icon {
-  width: 46px;
-  height: 178px;
-  position: absolute;
-  top: 100px;
-  background: var(--image-location-bg) no-repeat;
-  background-size: contain;
-  writing-mode: vertical-lr;
-  line-height: 46px;
-  color: var(--vent-font-color);
-  padding-top: 10px;
-  pointer-events: auto;
-  cursor: pointer;
-
-  &:hover {
-    background: var(--image-location-hover-bg) no-repeat;
-  }
+  .device-select-box {
+    width: 208px;
+    height: 450px;
+    overflow-y: auto;
+    color: var(--vent-font-color);
 
-  .location-text {
-    padding-top: 20px;
-    letter-spacing: 3px;
-    font-size: 16px;
-  }
-}
+    :deep(.zxm-tree) {
+      background: transparent !important;
+      color: var(--vent-font-color) !important;
 
-.location-select {
-  position: fixed;
-  top: 100px;
-  pointer-events: auto;
+      .zxm-tree-switcher {
+        background: transparent !important;
+      }
 
-  .location-select-box {
-    width: 100%;
-    height: 100%;
-    position: relative;
+      .zxm-tree-node-content-wrapper.zxm-tree-node-selected {
+        background-color: var(--tree-node-select);
+      }
 
-    &::before {
-      content: '';
-      position: absolute;
-      width: 230px;
-      height: 500px;
-      top: 0;
-      left: 0;
-      background: var(--image-tree-bg) no-repeat;
-      background-size: contain;
-      transform: rotateY(180deg);
-      z-index: -1;
+      .zxm-tree-node-content-wrapper:hover {
+        background-color: var(--tree-node-hover);
+      }
+
+      input {
+        height: 0px !important;
+      }
     }
 
-    .location-top-title {
-      color: var(--vent-font-color);
-      position: absolute;
-      width: 225px;
-      height: 68px;
-      background: var(--image-turn-location-top-bg) no-repeat;
-      background-size: contain;
-      top: 5px;
-      left: 5px;
-      display: flex;
-      flex-direction: row;
-      justify-content: space-between;
-      align-items: flex-end;
+    &::-webkit-scrollbar-track {
+      -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+      border-radius: 10px;
+      background: #ededed22;
+      height: 100px;
+    }
 
-      .title {
-        font-size: 18px;
-        position: relative;
-        top: -14px;
-        right: 15px;
-      }
+    &::-webkit-scrollbar-thumb {
+      -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+      background: #4288a444;
     }
+  }
 
-    .location-expansion-icon {
-      background: var(--image-tree-icon-cover-bg) no-repeat;
-      background-size: contain;
+  .location-icon {
+    width: 46px;
+    height: 178px;
+    position: absolute;
+    top: 100px;
+    background: var(--image-location-bg) no-repeat;
+    background-size: contain;
+    writing-mode: vertical-lr;
+    line-height: 46px;
+    color: var(--vent-font-color);
+    padding-top: 10px;
+    pointer-events: auto;
+    cursor: pointer;
+
+    &:hover {
+      background: var(--image-location-hover-bg) no-repeat;
+    }
+
+    .location-text {
+      padding-top: 20px;
+      letter-spacing: 3px;
+      font-size: 16px;
+    }
+  }
+
+  .location-select {
+    position: fixed;
+    top: 100px;
+    pointer-events: auto;
+
+    .location-select-box {
+      width: 100%;
+      height: 100%;
       position: relative;
-      left: 10px;
-      top: -15px;
-      padding: 5px;
 
-      &:hover {
-        background: var(--image-tree-icon-cover-hover-bg) no-repeat;
+      &::before {
+        content: '';
+        position: absolute;
+        width: 230px;
+        height: 500px;
+        top: 0;
+        left: 0;
+        background: var(--image-tree-bg) no-repeat;
         background-size: contain;
+        transform: rotateY(180deg);
+        z-index: -1;
       }
-    }
-  }
 
-  .location-container {
-    width: 200px;
-    height: 390px;
-    position: absolute;
-    display: flex;
-    flex-direction: column;
-    top: 80px;
-    left: 18px;
-    overflow-y: auto;
+      .location-top-title {
+        color: var(--vent-font-color);
+        position: absolute;
+        width: 225px;
+        height: 68px;
+        background: var(--image-turn-location-top-bg) no-repeat;
+        background-size: contain;
+        top: 5px;
+        left: 5px;
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: flex-end;
+
+        .title {
+          font-size: 18px;
+          position: relative;
+          top: -14px;
+          right: 15px;
+        }
+      }
 
-    .location-item {
-      color: var(--vent-font-color);
-      line-height: 30px;
-      display: flex;
-      justify-content: space-between;
-      // background-image: var(--vent-gas-list-item-bg-img);
-      background-image: linear-gradient(to left, #39f5ff05, #39f5ff10);
-      margin: 3px 0;
-
-      .item-title {
-        width: 80px;
-        text-align: right;
-        color: var(--vent-table-action-link);
+      .location-expansion-icon {
+        background: var(--image-tree-icon-cover-bg) no-repeat;
+        background-size: contain;
+        position: relative;
+        left: 10px;
+        top: -15px;
+        padding: 5px;
+
+        &:hover {
+          background: var(--image-tree-icon-cover-hover-bg) no-repeat;
+          background-size: contain;
+        }
       }
     }
 
-    .location-bottom-btn {
-      width: 100%;
-      color: var(--vent-font-color);
+    .location-container {
+      width: 200px;
+      height: 390px;
+      position: absolute;
       display: flex;
-      justify-content: flex-end;
-      margin-top: 20px;
+      flex-direction: column;
+      top: 80px;
+      left: 18px;
+      overflow-y: auto;
+
+      .location-item {
+        color: var(--vent-font-color);
+        line-height: 30px;
+        display: flex;
+        justify-content: space-between;
+        // background-image: var(--vent-gas-list-item-bg-img);
+        background-image: linear-gradient(to left, #39f5ff05, #39f5ff10);
+        margin: 3px 0;
+
+        .item-title {
+          width: 80px;
+          text-align: right;
+          color: var(--vent-table-action-link);
+        }
+      }
 
-      span {
-        display: inline-block;
+      .location-bottom-btn {
         width: 100%;
-        background: var(--location-bottom-bg);
-        border-radius: 3px;
-        border: 1px solid var(--location-bottom-border);
-        text-align: center;
-        padding: 2px 0;
-        cursor: pointer;
-
-        &:hover {
-          background: #00557422;
+        color: var(--vent-font-color);
+        display: flex;
+        justify-content: flex-end;
+        margin-top: 20px;
+
+        span {
+          display: inline-block;
+          width: 100%;
+          background: var(--location-bottom-bg);
+          border-radius: 3px;
+          border: 1px solid var(--location-bottom-border);
+          text-align: center;
+          padding: 2px 0;
+          cursor: pointer;
+
+          &:hover {
+            background: #00557422;
+          }
         }
       }
     }
   }
-}
-
-.location-select-show {
-  right: 240px;
-  animation-name: locationShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-}
-
-.location-select-hide {
-  right: -2px;
-  animation-name: locationHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-}
-
-.location-btn-show {
-  right: -0px;
-  animation-name: locationBtnShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-}
-
-.location-btn-hide {
-  right: -240px;
-  animation-name: locationBtnHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
-}
-
-.tabs-box {
-  height: 290px;
-}
-
-.bottom-tabs-box {
-  position: relative;
 
-  .tabs-box {
-    width: calc(100% - 12px) !important;
-    bottom: 3px !important;
-    background-color: red;
+  .location-select-show {
+    right: 240px;
+    animation-name: locationShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
   }
 
-  .to-small {
-    position: absolute;
-    top: -65px;
-    right: 36px;
-    display: flex;
-    align-items: center;
-    justify-content: center;
+  .location-select-hide {
+    right: -2px;
+    animation-name: locationHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-    .to-home {
-      width: 60px;
-      height: 60px;
-      background: var(--image-tohome) no-repeat center;
-      background-size: auto;
-      padding: 8px;
+  .location-btn-show {
+    right: -0px;
+    animation-name: locationBtnShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-      &:hover {
-        background-color: rgba(79, 104, 134, 0.418);
-      }
-    }
+  .location-btn-hide {
+    right: -240px;
+    animation-name: locationBtnHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s cubic-bezier(0.165, 0.84, 0.44, 1) 0.5s;
+  }
 
-    .table-show-icon {
-      width: 30px;
-      height: 30px;
-      font-size: 30px;
-      color: var(--vent-font-color);
-      margin-left: 10px;
-    }
+  .tabs-box {
+    height: 290px;
   }
 
-  .device-button-group {
-    position: absolute;
-    top: -30px;
-    display: flex;
-    width: 100%;
+  .bottom-tabs-box {
+    position: relative;
+
+    .tabs-box {
+      width: calc(100% - 12px) !important;
+      bottom: 3px !important;
+      background-color: red;
+    }
 
-    .device-button {
-      height: 26px;
-      padding: 0 20px;
-      background: linear-gradient(45deg, #04e6fb55, #0c5cab55);
-      clip-path: polygon(10px 0, 0 50%, 10px 100%, 100% 100%, calc(100% - 10px) 50%, 100% 0);
+    .to-small {
+      position: absolute;
+      top: -65px;
+      right: 36px;
       display: flex;
-      justify-content: center;
       align-items: center;
-      color: var(--vent-font-color);
-      position: relative;
-      cursor: pointer;
+      justify-content: center;
 
-      &:nth-child(1) {
-        left: calc(-6px * 1);
-      }
+      .to-home {
+        width: 60px;
+        height: 60px;
+        background: var(--image-tohome) no-repeat center;
+        background-size: auto;
+        padding: 8px;
 
-      &:nth-child(2) {
-        left: calc(-6px * 2);
+        &:hover {
+          background-color: rgba(79, 104, 134, 0.418);
+        }
       }
 
-      &:nth-child(3) {
-        left: calc(-6px * 3);
+      .table-show-icon {
+        width: 30px;
+        height: 30px;
+        font-size: 30px;
+        color: var(--vent-font-color);
+        margin-left: 10px;
       }
+    }
 
-      &:nth-child(4) {
-        left: calc(-6px * 4);
-      }
+    .device-button-group {
+      position: absolute;
+      top: -30px;
+      display: flex;
+      width: 100%;
+      .device-active {
+        background: linear-gradient(45deg, #04e6fb, #0c5cab);
 
-      &:nth-child(5) {
-        left: calc(-6px * 5);
+        &::before {
+          border-color: #0efcff;
+          box-shadow: 1px 1px 3px 1px #0efcff inset;
+        }
       }
+    }
 
-      &:nth-child(6) {
-        left: calc(-6px * 6);
-      }
+    .table-hide-icon {
+      color: var(--vent-font-color);
+      cursor: pointer;
+      position: absolute;
+      right: 20px;
+      top: 10px;
+      z-index: 9999;
+    }
 
-      &:nth-child(7) {
-        left: calc(-6px * 7);
-      }
+    .enter-detail {
+      color: var(--vent-font-color);
+      cursor: pointer;
+      position: absolute;
+      right: 35px;
+      top: 35px;
+      padding: 5px;
+      border-radius: 5px;
+      margin-left: 8px;
+      margin-right: 8px;
+      width: auto;
+      height: 33px !important;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      color: var(--vent-font-color);
+      padding: 5px 15px 5px 15px;
+      z-index: 999;
+      cursor: pointer;
 
-      &:nth-child(8) {
-        left: calc(-6px * 8);
+      &:hover {
+        background: var(--vent-device-manager-control-btn-hover);
       }
 
-      &:nth-child(9) {
-        left: calc(-6px * 9);
+      &::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: var(--vent-device-manager-control-btn);
       }
+    }
+  }
 
-      &:nth-child(10) {
-        left: calc(-6px * 10);
-      }
+  .table-hide {
+    height: 0px;
+    animation-name: tableHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s;
+  }
 
-      &:nth-child(11) {
-        left: calc(-6px * 11);
-      }
+  .table-show {
+    height: 290px;
+    animation-name: tableShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s;
+  }
 
-      &:nth-child(12) {
-        left: calc(-6px * 12);
-      }
+  .location-form {
+    display: flex;
+    margin: 8px;
 
-      &:nth-child(13) {
-        left: calc(-6px * 13);
-      }
+    .location-form-item {
+      width: 400px;
 
-      &:nth-child(14) {
-        left: calc(-6px * 14);
+      .location-form-label {
+        width: 100px;
+        display: inline-block;
+        color: var(--vent-font-color);
       }
 
-      &:nth-child(15) {
-        left: calc(-6px * 15);
+      input {
+        background: transparent !important;
+        color: var(--vent-font-color);
+        border: 1px solid var(--vent-form-item-border) !important;
       }
+    }
 
-      &:nth-child(16) {
-        left: calc(-6px * 16);
-      }
+    .zxm-select-selector {
+      width: 200px !important;
+    }
+  }
 
-      &:nth-child(17) {
-        left: calc(-6px * 17);
-      }
+  @keyframes tableShow {
+    0% {
+      height: 0px;
+      opacity: 0;
+    }
 
-      &:nth-child(18) {
-        left: calc(-6px * 18);
-      }
+    100% {
+      height: 290px;
+      opacity: 1;
+    }
+  }
 
-      &:nth-child(19) {
-        left: calc(-6px * 19);
-      }
+  @keyframes tableHide {
+    0% {
+      opacity: 1;
+    }
 
-      &:first-child {
-        clip-path: polygon(0 0, 10px 50%, 0 100%, 100% 100%, calc(100% - 10px) 50%, 100% 0);
-      }
+    100% {
+      height: 0px;
+      opacity: 0;
     }
+  }
 
-    .device-active {
-      background: linear-gradient(45deg, #04e6fb, #0c5cab);
+  @keyframes treeShow {
+    0% {
+      left: -400px;
+      opacity: 0;
+    }
 
-      &::before {
-        border-color: #0efcff;
-        box-shadow: 1px 1px 3px 1px #0efcff inset;
-      }
+    100% {
+      left: 10px;
+      opacity: 1;
     }
   }
 
-  .table-hide-icon {
-    color: var(--vent-font-color);
-    cursor: pointer;
-    position: absolute;
-    right: 20px;
-    top: 10px;
-    z-index: 9999;
+  @keyframes treeHide {
+    0% {
+      left: 10px;
+      opacity: 1;
+    }
+
+    100% {
+      left: -400px;
+      opacity: 0;
+    }
   }
 
-  .enter-detail {
-    color: var(--vent-font-color);
-    cursor: pointer;
-    position: absolute;
-    right: 35px;
-    top: 35px;
-    padding: 5px;
-    border-radius: 5px;
-    margin-left: 8px;
-    margin-right: 8px;
-    width: auto;
-    height: 33px !important;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    color: var(--vent-font-color);
-    padding: 5px 15px 5px 15px;
-    z-index: 999;
-    cursor: pointer;
+  @keyframes locationShow {
+    0% {
+      right: 0px;
+      opacity: 0;
+    }
 
-    &:hover {
-      background: var(--vent-device-manager-control-btn-hover);
+    100% {
+      right: 240px;
+      opacity: 1;
     }
+  }
 
-    &::before {
-      width: calc(100% - 6px);
-      height: 27px;
-      content: '';
-      position: absolute;
-      top: 3px;
+  @keyframes locationHide {
+    0% {
+      right: 240px;
+      opacity: 1;
+    }
+
+    100% {
       right: 0;
-      left: 3px;
-      bottom: 0;
-      z-index: -1;
-      border-radius: inherit;
-      /*important*/
-      background: var(--vent-device-manager-control-btn);
+      opacity: 0;
     }
   }
-}
-
-.table-hide {
-  height: 0px;
-  animation-name: tableHide;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s;
-}
-
-.table-show {
-  height: 290px;
-  animation-name: tableShow;
-  /* 持续时间 */
-  animation-duration: 1s;
-  transition: all 1s;
-}
-
-.location-form {
-  display: flex;
-  margin: 8px;
-
-  .location-form-item {
-    width: 400px;
-
-    .location-form-label {
-      width: 100px;
-      display: inline-block;
-      color: var(--vent-font-color);
+
+  @keyframes locationBtnShow {
+    0% {
+      right: -240px;
+      opacity: 0;
     }
 
-    input {
-      background: transparent !important;
-      color: var(--vent-font-color);
-      border: 1px solid var(--vent-form-item-border) !important;
+    100% {
+      right: -2px;
+      opacity: 1;
     }
   }
 
-  .zxm-select-selector {
-    width: 200px !important;
-  }
-}
+  @keyframes locationBtnHide {
+    0% {
+      right: -2px;
+      opacity: 1;
+    }
 
-@keyframes tableShow {
-  0% {
-    height: 0px;
-    opacity: 0;
+    100% {
+      right: -240px;
+      opacity: 0;
+    }
   }
-
-  100% {
-    height: 290px;
-    opacity: 1;
+  :deep(.@{ventSpace}-picker-datetime-panel) {
+    height: 200px !important;
+    overflow-y: auto !important;
   }
-}
-
-@keyframes tableHide {
-  0% {
-    opacity: 1;
+  :deep(.@{ventSpace}-tabs-tabpane-active) {
+    // overflow: auto;
+    height: 100%;
   }
 
-  100% {
-    height: 0px;
-    opacity: 0;
+  :deep(.zxm-select-dropdown) {
+    left: 0 !important;
+    color: #000000 !important;
   }
-}
 
-@keyframes treeShow {
-  0% {
-    left: -400px;
-    opacity: 0;
+  :deep(.zxm-select-selector) {
+    height: 34px !important;
+    line-height: 34px !important;
   }
 
-  100% {
-    left: 10px;
-    opacity: 1;
-  }
-}
+  :deep(.zxm-input) {
+    height: 32px !important;
+    line-height: 32px !important;
 
-@keyframes treeHide {
-  0% {
-    left: 10px;
-    opacity: 1;
+    .zxm-select-selection-item {
+      line-height: 32px !important;
+    }
   }
 
-  100% {
-    left: -400px;
-    opacity: 0;
-  }
-}
+  .device-button {
+    height: 26px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    color: var(--vent-font-color);
+    position: relative;
+    cursor: pointer;
+    padding: 0 20px;
+    background: linear-gradient(45deg, #04e6fb55, #0c5cab55);
+    clip-path: polygon(10px 0, 0 50%, 10px 100%, 100% 100%, calc(100% - 10px) 50%, 100% 0);
+    &:nth-child(1) {
+      left: calc(-6px * 1);
+    }
+    &:nth-child(2) {
+      left: calc(-6px * 2);
+    }
 
-@keyframes locationShow {
-  0% {
-    right: 0px;
-    opacity: 0;
-  }
+    &:nth-child(3) {
+      left: calc(-6px * 3);
+    }
 
-  100% {
-    right: 240px;
-    opacity: 1;
-  }
-}
+    &:nth-child(4) {
+      left: calc(-6px * 4);
+    }
 
-@keyframes locationHide {
-  0% {
-    right: 240px;
-    opacity: 1;
-  }
+    &:nth-child(5) {
+      left: calc(-6px * 5);
+    }
 
-  100% {
-    right: 0;
-    opacity: 0;
-  }
-}
+    &:nth-child(6) {
+      left: calc(-6px * 6);
+    }
 
-@keyframes locationBtnShow {
-  0% {
-    right: -240px;
-    opacity: 0;
-  }
+    &:nth-child(7) {
+      left: calc(-6px * 7);
+    }
 
-  100% {
-    right: -2px;
-    opacity: 1;
-  }
-}
+    &:nth-child(8) {
+      left: calc(-6px * 8);
+    }
 
-@keyframes locationBtnHide {
-  0% {
-    right: -2px;
-    opacity: 1;
-  }
+    &:nth-child(9) {
+      left: calc(-6px * 9);
+    }
 
-  100% {
-    right: -240px;
-    opacity: 0;
-  }
-}
+    &:nth-child(10) {
+      left: calc(-6px * 10);
+    }
 
-:deep(.@{ventSpace}-tabs-tabpane-active) {
-  // overflow: auto;
-  height: 100%;
-}
+    &:nth-child(11) {
+      left: calc(-6px * 11);
+    }
 
-:deep(.zxm-select-dropdown) {
-  left: 0 !important;
-  color: #000000 !important;
-}
+    &:nth-child(12) {
+      left: calc(-6px * 12);
+    }
 
-:deep(.zxm-select-selector) {
-  height: 34px !important;
-  line-height: 34px !important;
-}
+    &:nth-child(13) {
+      left: calc(-6px * 13);
+    }
 
-:deep(.zxm-input) {
-  height: 32px !important;
-  line-height: 32px !important;
+    &:nth-child(14) {
+      left: calc(-6px * 14);
+    }
 
-  .zxm-select-selection-item {
-    line-height: 32px !important;
+    &:nth-child(15) {
+      left: calc(-6px * 15);
+    }
+
+    &:nth-child(16) {
+      left: calc(-6px * 16);
+    }
+
+    &:nth-child(17) {
+      left: calc(-6px * 17);
+    }
+
+    &:nth-child(18) {
+      left: calc(-6px * 18);
+    }
+
+    &:nth-child(19) {
+      left: calc(-6px * 19);
+    }
+
+    // &:first-child {
+    //   clip-path: polygon(0 0, 10px 50%, 0 100%, 100% 100%, calc(100% - 10px) 50%, 100% 0);
+    // }
   }
-}
-
-// :deep(.@{ventSpace}-pagination){
-//   margin-right: 20px !important;
-//   margin-top: 5px !important;
-//   display: flex;
-//   align-items: center;
-// }</style>
+
+  // :deep(.@{ventSpace}-pagination){
+  //   margin-right: 20px !important;
+  //   margin-top: 5px !important;
+  //   display: flex;
+  //   align-items: center;
+  // }
+</style>

+ 759 - 761
src/views/vent/monitorManager/fanLocalMonitor/components/conditionAssistance.vue

@@ -80,862 +80,860 @@
 </template>
 
 <script lang="ts" setup>
-//ts语法
-import { ref, onMounted, reactive, nextTick, computed } from 'vue';
-import echarts from '/@/utils/lib/echarts';
-import { option, initData, fanInfoData, chartsColumnList, echatsOption } from '../fanLocal.data';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-import { useForm } from '/@/components/Form/index';
-import { Input, InputNumber } from 'ant-design-vue';
-import { Decoration7 as DvDecoration7 } from '@kjgl77/datav-vue3';
-import { message } from 'ant-design-vue';
-import { formatNum } from '/@/utils/ventutil';
-import BarAndLine from '/@/components/chart/BarAndLine.vue';
-import { cloneDeep } from 'lodash-es';
-import dayjs from 'dayjs';
-import { SendOutlined } from '@ant-design/icons-vue';
-
-const emit = defineEmits(['close', 'register', 'openModal']);
-const props = defineProps({
-  dataSource: {
-    type: Array,
-    default: () => [],
-  },
-  frequency: {
-    type: Number,
-    default: 30,
-  },
-  m3: {
-    type: Number,
-    default: 670.8,
-  },
-  // gasWarningMax: { type: Number, default: 0.5 },
-  // gasWarningVal: { type: Number, default: 0.6 },
-  // windQuantity: { type: Number, default: 635.84 },
-});
-type AssistanceItemType = {
-  angle: number;
-  Hz: number;
-  a: number;
-  b: number;
-  c: number;
-  min: number;
-  max: number;
-};
-
-// 注册 modal
-const [register, { closeModal }] = useModalInner((data) => {
-  nextTick(() => {
-    computeAssistance();
-    if (option['xAxis']) option['xAxis']['data'] = xData;
-    option['series'] = yDataList;
-    if (JSON.stringify(data) !== '{}') {
-      uQ1.value = Number(data['m3']);
-      uHz.value = Math.ceil(data['frequency']);
-      gasWarningVal.value = data['gasWarningVal'];
-      isComputeGas.value = true;
-      nextTick(() => {
-        computeUH(data['frequency'], data['m3']);
-        initEcharts();
-        setTimeout(() => {
-          // 根据频率计算uH
-          makeLine();
-        }, 2000);
-      });
-    } else {
-      initEcharts();
-      isComputeGas.value = false;
-    }
+  //ts语法
+  import { ref, onMounted, reactive, nextTick, computed } from 'vue';
+  import echarts from '/@/utils/lib/echarts';
+  import { option, initData, fanInfoData, chartsColumnList, echatsOption } from '../fanLocal.data';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { useForm } from '/@/components/Form/index';
+  import { Input, InputNumber } from 'ant-design-vue';
+  import { Decoration7 as DvDecoration7 } from '@kjgl77/datav-vue3';
+  import { message } from 'ant-design-vue';
+  import { formatNum } from '/@/utils/ventutil';
+  import BarAndLine from '/@/components/chart/BarAndLine.vue';
+  import { cloneDeep } from 'lodash-es';
+  import dayjs from 'dayjs';
+  import { SendOutlined } from '@ant-design/icons-vue';
+
+  const emit = defineEmits(['close', 'register', 'openModal']);
+  const props = defineProps({
+    dataSource: {
+      type: Array,
+      default: () => [],
+    },
+    frequency: {
+      type: Number,
+      default: 30,
+    },
+    m3: {
+      type: Number,
+      default: 670.8,
+    },
+    // gasWarningMax: { type: Number, default: 0.5 },
+    // gasWarningVal: { type: Number, default: 0.6 },
+    // windQuantity: { type: Number, default: 635.84 },
   });
-});
-const loadding = ref<boolean>(false);
-const formShow = ref(false);
-const formType = ref('');
-const ChartRef = ref();
-const myChart = ref();
-const refresh = ref(true);
-const xDataMax = 1000;
-let xDataMin = 0;
-const xData: any[] = [];
-const yDataList: [] = [];
-let lineNum = 0;
-const lineEquation = ref<string[]>([]);
-const assistanceData = ref([]);
-const monitorData = ref([]);
-const gasWarningVal = ref(0);
-const gasWarningMax = ref(0.5);
-const isComputeGas = ref(false);
-const isStartCompute = ref(0);
-const uHz = ref(0);
-const uQ1 = ref(0);
-const uQ = computed(() => {
-  if (uQ1.value) {
-    if (gasWarningVal.value) {
-      return ((uQ1.value * gasWarningVal.value) / gasWarningMax.value) * 1.08;
-    }
-    return uQ1.value;
-  } else {
-    return 0;
-  }
-});
-const uH = ref<number | undefined>(undefined); //  - 1000
-const isHaCross = ref(true);
-const resultObj = ref<{ x: number; y: number; Hz: number } | null>(null);
-
-const [registerForm, {}] = useForm({
-  labelWidth: 120,
-  actionColOptions: {
-    span: 24,
-  },
-  compact: true,
-  showSubmitButton: true,
-  submitButtonOptions: {
-    text: '提交',
-    preIcon: '',
-  },
-  showResetButton: true,
-  resetButtonOptions: {
-    text: '关闭',
-    preIcon: '',
-  },
-  resetFunc: async () => {
-    formShow.value = false;
-  },
-});
-
-function computeAssistance() {
-  assistanceData.value = initData();
-  lineNum = 0;
-  const assistanceDataList = [];
-  const lineEquationList: string[] = [];
-  for (const key in assistanceData.value) {
-    const item = assistanceData.value[key];
-    assistanceDataList.push(item);
-    lineEquationList.push(
-      `H${parseInt(item['Hz'])} = ${item['a']}Q² ${Number(item['b']) > 0 ? '+' : '-'} ${Math.abs(Number(item['b'])).toFixed(4)}Q ${
-        Number(item['c']) > 0 ? '+' : '-'
-      } ${Math.abs(Number(item['c'])).toFixed(4)}`
-    );
-  }
-  lineEquation.value = lineEquationList;
-  lineNum = assistanceDataList.length;
-  xDataMin =
-    Math.min.apply(
-      Math,
-      assistanceDataList.map((item) => {
-        return item.min;
-      })
-    ) - 100;
-  // const xDataMax = Math.max.apply(Math, assistanceDataList.map(item => { return item.max }))
-  fanInfoData.flfw = `${xDataMin}~${xDataMax}`;
-  const computeItem = (item: AssistanceItemType) => {
-    const min = item.min;
-    const max = item.max;
-    const HList: number[] = [];
-    for (let i = xDataMin; i <= xDataMax; i++) {
-      if (i < min) {
-        HList.push(null);
-      } else if (i > max) {
-        HList.push(null);
+  type AssistanceItemType = {
+    angle: number;
+    Hz: number;
+    a: number;
+    b: number;
+    c: number;
+    min: number;
+    max: number;
+  };
+
+  // 注册 modal
+  const [register, { closeModal }] = useModalInner((data) => {
+    nextTick(() => {
+      computeAssistance();
+      if (option['xAxis']) option['xAxis']['data'] = xData;
+      option['series'] = yDataList;
+      if (JSON.stringify(data) !== '{}') {
+        uQ1.value = Number(data['m3']);
+        uHz.value = Math.ceil(data['frequency']);
+        gasWarningVal.value = data['gasWarningVal'];
+        isComputeGas.value = true;
+        nextTick(() => {
+          computeUH(data['frequency'], data['m3']);
+          initEcharts();
+          setTimeout(() => {
+            // 根据频率计算uH
+            makeLine();
+          }, 2000);
+        });
       } else {
-        HList.push(item.a * i * i + item.b * i + item.c);
+        initEcharts();
+        isComputeGas.value = false;
       }
+    });
+  });
+  const loadding = ref<boolean>(false);
+  const formShow = ref(false);
+  const formType = ref('');
+  const ChartRef = ref();
+  const myChart = ref();
+  const refresh = ref(true);
+  const xDataMax = 1000;
+  let xDataMin = 0;
+  const xData: any[] = [];
+  const yDataList: [] = [];
+  let lineNum = 0;
+  const lineEquation = ref<string[]>([]);
+  const assistanceData = ref([]);
+  const monitorData = ref([]);
+  const gasWarningVal = ref(0);
+  const gasWarningMax = ref(0.5);
+  const isComputeGas = ref(false);
+  const isStartCompute = ref(0);
+  const uHz = ref(0);
+  const uQ1 = ref(0);
+  const uQ = computed(() => {
+    if (uQ1.value) {
+      if (gasWarningVal.value) {
+        return ((uQ1.value * gasWarningVal.value) / gasWarningMax.value) * 1.08;
+      }
+      return uQ1.value;
+    } else {
+      return 0;
     }
-    return HList;
-  };
+  });
+  const uH = ref<number | undefined>(undefined); //  - 1000
+  const isHaCross = ref(true);
+  const resultObj = ref<{ x: number; y: number; Hz: number } | null>(null);
+
+  const [registerForm, {}] = useForm({
+    labelWidth: 120,
+    actionColOptions: {
+      span: 24,
+    },
+    compact: true,
+    showSubmitButton: true,
+    submitButtonOptions: {
+      text: '提交',
+      preIcon: '',
+    },
+    showResetButton: true,
+    resetButtonOptions: {
+      text: '关闭',
+      preIcon: '',
+    },
+    resetFunc: async () => {
+      formShow.value = false;
+    },
+  });
 
-  for (const key in assistanceData.value) {
-    const element: AssistanceItemType = assistanceData.value[key];
-    const yData: number[] = computeItem(element);
-    const series = {
-      type: 'line',
-      name: `${element['Hz']}Hz`,
-      smooth: true,
-      showSymbol: false,
-      symbol: 'none',
-      emphasis: {
-        focus: 'series',
-      },
-      itemStyle: { normal: { label: { show: true } } },
-      lineStyle: {
-        width: 1,
-        color: '#ffffff88',
-      },
-      zlevel: 0,
-      z: 1,
-      endLabel: {
-        show: true,
-        formatter: '{a}',
-        distance: 0,
-        color: '#39E9FE99',
-        backgroundColor: 'transparent',
-        padding: [3, 3, 2, 3],
-      },
-      data: yData,
+  function computeAssistance() {
+    assistanceData.value = initData();
+    lineNum = 0;
+    const assistanceDataList = [];
+    const lineEquationList: string[] = [];
+    for (const key in assistanceData.value) {
+      const item = assistanceData.value[key];
+      assistanceDataList.push(item);
+      lineEquationList.push(
+        `H${parseInt(item['Hz'])} = ${item['a']}Q² ${Number(item['b']) > 0 ? '+' : '-'} ${Math.abs(Number(item['b'])).toFixed(4)}Q ${
+          Number(item['c']) > 0 ? '+' : '-'
+        } ${Math.abs(Number(item['c'])).toFixed(4)}`
+      );
+    }
+    lineEquation.value = lineEquationList;
+    lineNum = assistanceDataList.length;
+    xDataMin =
+      Math.min.apply(
+        Math,
+        assistanceDataList.map((item) => {
+          return item.min;
+        })
+      ) - 100;
+    // const xDataMax = Math.max.apply(Math, assistanceDataList.map(item => { return item.max }))
+    fanInfoData.flfw = `${xDataMin}~${xDataMax}`;
+    const computeItem = (item: AssistanceItemType) => {
+      const min = item.min;
+      const max = item.max;
+      const HList: number[] = [];
+      for (let i = xDataMin; i <= xDataMax; i++) {
+        if (i < min) {
+          HList.push(null);
+        } else if (i > max) {
+          HList.push(null);
+        } else {
+          HList.push(item.a * i * i + item.b * i + item.c);
+        }
+      }
+      return HList;
     };
 
-    yDataList.push(series);
-  }
+    for (const key in assistanceData.value) {
+      const element: AssistanceItemType = assistanceData.value[key];
+      const yData: number[] = computeItem(element);
+      const series = {
+        type: 'line',
+        name: `${element['Hz']}Hz`,
+        smooth: true,
+        showSymbol: false,
+        symbol: 'none',
+        emphasis: {
+          focus: 'series',
+        },
+        itemStyle: { normal: { label: { show: true } } },
+        lineStyle: {
+          width: 1,
+          color: '#ffffff88',
+        },
+        zlevel: 0,
+        z: 1,
+        endLabel: {
+          show: true,
+          formatter: '{a}',
+          distance: 0,
+          color: '#39E9FE99',
+          backgroundColor: 'transparent',
+          padding: [3, 3, 2, 3],
+        },
+        data: yData,
+      };
+
+      yDataList.push(series);
+    }
 
-  for (let i = xDataMin; i <= xDataMax; i++) {
-    xData.push(i);
+    for (let i = xDataMin; i <= xDataMax; i++) {
+      xData.push(i);
+    }
   }
-}
 
-function computeUH(Hz: number, uQ: number) {
-  debugger;
-  const equation = assistanceData.value.find((item) => {
-    return Math.ceil(Hz) == item['Hz'];
-  });
-  if (equation) {
-    const uHMax = Math.round((equation['a'] * equation['min'] * equation['min'] + equation['b'] * equation['min'] + equation['c']) * 100) / 100;
-    const uHMin = Math.round((equation['a'] * equation['max'] * equation['max'] + equation['b'] * equation['max'] + equation['c']) * 100) / 100;
-    const uH1 = Math.round((equation['a'] * uQ * uQ + equation['b'] * uQ + equation['c']) * 100) / 100;
-    if (uH1 >= uHMin && uH1 <= uHMax) {
-      uH.value = uH1;
-      isHaCross.value = true;
-    } else {
-      isHaCross.value = false;
+  function computeUH(Hz: number, uQ: number) {
+    const equation = assistanceData.value.find((item) => {
+      return Math.ceil(Hz) == item['Hz'];
+    });
+    if (equation) {
+      const uHMax = Math.round((equation['a'] * equation['min'] * equation['min'] + equation['b'] * equation['min'] + equation['c']) * 100) / 100;
+      const uHMin = Math.round((equation['a'] * equation['max'] * equation['max'] + equation['b'] * equation['max'] + equation['c']) * 100) / 100;
+      const uH1 = Math.round((equation['a'] * uQ * uQ + equation['b'] * uQ + equation['c']) * 100) / 100;
+      if (uH1 >= uHMin && uH1 <= uHMax) {
+        uH.value = uH1;
+        isHaCross.value = true;
+      } else {
+        isHaCross.value = false;
+      }
     }
   }
-}
 
-function computeRLine() {
-  console.log('计算后的风量为------------>', uQ.value);
-  if (uH.value && uQ.value) {
-    const R = uH.value / Number(uQ.value) / Number(uQ.value);
-    const yAxis: number[] = [];
-    for (let i = 0; i < xData.length; i++) {
-      const x = xData[i];
-      const y = R * x * x;
-      if (x == uQ.value) {
-        uH.value = y;
+  function computeRLine() {
+    console.log('计算后的风量为------------>', uQ.value);
+    if (uH.value && uQ.value) {
+      const R = uH.value / Number(uQ.value) / Number(uQ.value);
+      const yAxis: number[] = [];
+      for (let i = 0; i < xData.length; i++) {
+        const x = xData[i];
+        const y = R * x * x;
+        if (x == uQ.value) {
+          uH.value = y;
+        }
+        yAxis.push(y);
       }
-      yAxis.push(y);
-    }
-    const series = {
-      name: 'R',
-      type: 'line',
-      smooth: true,
-      showSymbol: false,
-      zlevel: 0,
-      emphasis: {
-        focus: 'series',
-      },
-      itemStyle: { normal: { label: { show: true } } },
-      lineStyle: {
-        width: 2,
-        color: '#D0A343',
-      },
-      endLabel: {
-        show: true,
-        formatter: '{a}',
-        distance: 0,
-        color: '#D0A343',
-      },
-      data: yAxis,
-    };
-    yDataList[lineNum] = series;
+      const series = {
+        name: 'R',
+        type: 'line',
+        smooth: true,
+        showSymbol: false,
+        zlevel: 0,
+        emphasis: {
+          focus: 'series',
+        },
+        itemStyle: { normal: { label: { show: true } } },
+        lineStyle: {
+          width: 2,
+          color: '#D0A343',
+        },
+        endLabel: {
+          show: true,
+          formatter: '{a}',
+          distance: 0,
+          color: '#D0A343',
+        },
+        data: yAxis,
+      };
+      yDataList[lineNum] = series;
+    }
   }
-}
-
-function reSetLine() {
-  let minIndex = -1;
-  for (let i = 0; i < yDataList.length; i++) {
-    if (i !== lineNum && i != lineNum + 1) {
-      if (yDataList[i]['lineStyle']) yDataList[i]['lineStyle']['color'] = '#ffffff88';
-      if (yDataList[i]['lineStyle']) yDataList[i]['lineStyle']['width'] = 1;
-      if (yDataList[i]['endLabel'] && yDataList[i]['endLabel']['color']) {
-        yDataList[i]['endLabel']['color'] = '#39E9FE99';
+
+  function reSetLine() {
+    let minIndex = -1;
+    for (let i = 0; i < yDataList.length; i++) {
+      if (i !== lineNum && i != lineNum + 1) {
+        if (yDataList[i]['lineStyle']) yDataList[i]['lineStyle']['color'] = '#ffffff88';
+        if (yDataList[i]['lineStyle']) yDataList[i]['lineStyle']['width'] = 1;
+        if (yDataList[i]['endLabel'] && yDataList[i]['endLabel']['color']) {
+          yDataList[i]['endLabel']['color'] = '#39E9FE99';
+        }
+        if (yDataList[i]['endLabel'] && yDataList[i]['endLabel']['backgroundColor']) yDataList[i]['endLabel']['backgroundColor'] = 'transparent';
+        if (yDataList[i]['z']) yDataList[i]['z'] = 1;
       }
-      if (yDataList[i]['endLabel'] && yDataList[i]['endLabel']['backgroundColor']) yDataList[i]['endLabel']['backgroundColor'] = 'transparent';
-      if (yDataList[i]['z']) yDataList[i]['z'] = 1;
-    }
 
-    if (resultObj.value && `${resultObj.value.Hz}Hz` == yDataList[i]['name']) {
-      minIndex = i;
+      if (resultObj.value && `${resultObj.value.Hz}Hz` == yDataList[i]['name']) {
+        minIndex = i;
+      }
+    }
+    if (minIndex != -1) {
+      yDataList[minIndex]['lineStyle']['color'] = '#9A60B4';
+      yDataList[minIndex]['lineStyle']['width'] = 2;
+      yDataList[minIndex]['endLabel']['color'] = '#9A60B4';
+      yDataList[minIndex]['endLabel']['backgroundColor'] = '#111';
+      yDataList[minIndex]['z'] = 999;
     }
   }
-  if (minIndex != -1) {
-    yDataList[minIndex]['lineStyle']['color'] = '#9A60B4';
-    yDataList[minIndex]['lineStyle']['width'] = 2;
-    yDataList[minIndex]['endLabel']['color'] = '#9A60B4';
-    yDataList[minIndex]['endLabel']['backgroundColor'] = '#111';
-    yDataList[minIndex]['z'] = 999;
-  }
-}
-
-// 根据风量计算压差
-function computePa() {
-  debugger;
-  const R = uH.value / Number(uQ.value) / Number(uQ.value);
-  const pointX = Number(uQ.value);
-  const pointY = Number(uH.value);
-  type ItemType = {
-    x: number;
-    y: number;
-    Hz: number;
-  };
-  const paList = new Map<number, ItemType>(); // key 是最近距离
-  const getIntersectionPoint = (a, b, c, R, min, max) => {
-    const obj: { x: undefined | number; y: undefined | number; min: number; max: number } = { x: undefined, y: undefined, min: min, max: max };
-    // 计算二次方程的判别式
-    const discriminant = b * b - 4 * (a - R) * c;
-
-    if (discriminant > 0) {
-      // 有两个实根
-      const x1 = (-b + Math.sqrt(discriminant)) / (2 * (a - R));
-      const x2 = (-b - Math.sqrt(discriminant)) / (2 * (a - R));
-
-      const y1 = R * x1 * x1;
-      const y2 = R * x2 * x2;
-      if (x1 >= min && x1 <= max) {
-        obj.x = x1;
-        obj.y = y1;
+
+  // 根据风量计算压差
+  function computePa() {
+    const R = uH.value / Number(uQ.value) / Number(uQ.value);
+    const pointX = Number(uQ.value);
+    const pointY = Number(uH.value);
+    type ItemType = {
+      x: number;
+      y: number;
+      Hz: number;
+    };
+    const paList = new Map<number, ItemType>(); // key 是最近距离
+    const getIntersectionPoint = (a, b, c, R, min, max) => {
+      const obj: { x: undefined | number; y: undefined | number; min: number; max: number } = { x: undefined, y: undefined, min: min, max: max };
+      // 计算二次方程的判别式
+      const discriminant = b * b - 4 * (a - R) * c;
+
+      if (discriminant > 0) {
+        // 有两个实根
+        const x1 = (-b + Math.sqrt(discriminant)) / (2 * (a - R));
+        const x2 = (-b - Math.sqrt(discriminant)) / (2 * (a - R));
+
+        const y1 = R * x1 * x1;
+        const y2 = R * x2 * x2;
+        if (x1 >= min && x1 <= max) {
+          obj.x = x1;
+          obj.y = y1;
+        } else {
+          obj.x = x2;
+          obj.y = y2;
+        }
+      } else if (discriminant === 0) {
+        // 有一个实根
+        const x = -b / (2 * (a - R));
+        const y = R * x * x;
+        if (x >= min && x <= max) {
+          obj.x = x;
+          obj.y = y;
+        }
+        // console.log(`唯一交点: (${x}, ${y})`);
       } else {
-        obj.x = x2;
-        obj.y = y2;
-      }
-    } else if (discriminant === 0) {
-      // 有一个实根
-      const x = -b / (2 * (a - R));
-      const y = R * x * x;
-      if (x >= min && x <= max) {
-        obj.x = x;
-        obj.y = y;
+        // 没有实根,交点在虚数域
+        console.log('没有实数交点');
+        isHaCross.value = false;
       }
-      // console.log(`唯一交点: (${x}, ${y})`);
-    } else {
-      // 没有实根,交点在虚数域
-      console.log('没有实数交点');
-      isHaCross.value = false;
-    }
-    return obj;
-  };
+      return obj;
+    };
 
-  for (let key in assistanceData.value) {
-    const item: AssistanceItemType = assistanceData.value[key];
-    paList.set(item.Hz, getIntersectionPoint(item.a, item.b, item.c, R, item.min, item.max));
-  }
+    for (let key in assistanceData.value) {
+      const item: AssistanceItemType = assistanceData.value[key];
+      paList.set(item.Hz, getIntersectionPoint(item.a, item.b, item.c, R, item.min, item.max));
+    }
 
-  const min = (points: Map<number, ItemType>) => {
-    const targetX = uQ.value;
-    const targetY = uH.value;
-    let minDistance = Number.POSITIVE_INFINITY;
-    let closestPoint = null;
-    let keyVal = '';
-    // 遍历已知点数组,计算距离并更新最小距离和对应的点
-    for (const [key, point] of points) {
-      const distance = Math.sqrt((targetX - point.x) ** 2 + (targetY - point.y) ** 2);
-      if (distance < minDistance) {
-        minDistance = distance;
-        closestPoint = point;
-        keyVal = key;
+    const min = (points: Map<number, ItemType>) => {
+      const targetX = uQ.value;
+      const targetY = uH.value;
+      let minDistance = Number.POSITIVE_INFINITY;
+      let closestPoint = null;
+      let keyVal = '';
+      // 遍历已知点数组,计算距离并更新最小距离和对应的点
+      for (const [key, point] of points) {
+        const distance = Math.sqrt((targetX - point.x) ** 2 + (targetY - point.y) ** 2);
+        if (distance < minDistance) {
+          minDistance = distance;
+          closestPoint = point;
+          keyVal = key;
+        }
       }
-    }
 
-    if (closestPoint !== null) {
-      // console.log(`距离最小的点是 (${closestPoint.x}, ${closestPoint.y}), 距离为 ${minDistance}`);
-      if (closestPoint.x < closestPoint.min || closestPoint.x > closestPoint.max) {
+      if (closestPoint !== null) {
+        // console.log(`距离最小的点是 (${closestPoint.x}, ${closestPoint.y}), 距离为 ${minDistance}`);
+        if (closestPoint.x < closestPoint.min || closestPoint.x > closestPoint.max) {
+          resultObj.value = null;
+          isHaCross.value = false;
+          console.log('没有找到最小距离的点');
+        } else {
+          resultObj.value = { x: closestPoint.x, y: closestPoint.y, Hz: keyVal };
+          isHaCross.value = true;
+        }
+      } else {
         resultObj.value = null;
         isHaCross.value = false;
         console.log('没有找到最小距离的点');
-      } else {
-        resultObj.value = { x: closestPoint.x, y: closestPoint.y, Hz: keyVal };
-        isHaCross.value = true;
       }
-    } else {
-      resultObj.value = null;
-      isHaCross.value = false;
-      console.log('没有找到最小距离的点');
-    }
-  };
-  min(paList);
-}
-
-function computeR() {
-  if (uQ.value && uH.value) {
-    computeRLine();
-    computePa();
-    const x = resultObj.value && resultObj.value.x ? resultObj.value.x.toFixed(0) : -100;
-    const y = resultObj.value && resultObj.value.y ? Number(resultObj.value.y.toFixed(0)) : -100;
-    const series = {
-      type: 'effectScatter',
-      symbolSize: 5,
-      // symbolOffset:[1, 1],
-      showEffectOn: 'render',
-      // 涟漪特效相关配置。
-      rippleEffect: {
-        // 波纹的绘制方式,可选 'stroke' 和 'fill'。
-        brushType: 'stroke',
-      },
-      zlevel: 1,
-      z: 999,
-      itemStyle: {
-        color: '#C60000',
-      },
-      data: [[x, y]],
     };
-    yDataList[lineNum + 1] = series;
-  }
-  // // 根据计算后的得到的频率,风量,瓦斯浓度
-  // getMonitor();
-}
-
-function getMonitor() {
-  clearTimeout(timer);
-  timer = undefined;
-  const n = 10;
-  const windQuantity = uQ1.value;
-  const obj = {
-    m3: windQuantity,
-    gas: gasWarningVal.value,
-    time: '',
-    Hz: uHz.value,
-  };
-  const monitorList: { m3: number; gas: number; Hz: number; time: string }[] = [];
-  for (let i = 0; i < n; i++) {
-    const item = cloneDeep(obj);
-    const m3Temp = (Math.random() * 2 - 1) * Math.random() * 20;
-    const gas = m3Temp * 0.0002;
-    item.time = dayjs(new Date().getTime() - (n + i) * 3000).format('HH:mm:ss');
-    item.m3 = (obj.m3 + m3Temp).toFixed(2);
-    item.gas = (obj.gas + gas).toFixed(4);
-    item.Hz = (obj.Hz + Math.random()).toFixed(2);
-    monitorList.unshift(item);
+    min(paList);
+  }
+
+  function computeR() {
+    if (uQ.value && uH.value) {
+      computeRLine();
+      computePa();
+      const x = resultObj.value && resultObj.value.x ? resultObj.value.x.toFixed(0) : -100;
+      const y = resultObj.value && resultObj.value.y ? Number(resultObj.value.y.toFixed(0)) : -100;
+      const series = {
+        type: 'effectScatter',
+        symbolSize: 5,
+        // symbolOffset:[1, 1],
+        showEffectOn: 'render',
+        // 涟漪特效相关配置。
+        rippleEffect: {
+          // 波纹的绘制方式,可选 'stroke' 和 'fill'。
+          brushType: 'stroke',
+        },
+        zlevel: 1,
+        z: 999,
+        itemStyle: {
+          color: '#C60000',
+        },
+        data: [[x, y]],
+      };
+      yDataList[lineNum + 1] = series;
+    }
+    // // 根据计算后的得到的频率,风量,瓦斯浓度
+    // getMonitor();
   }
-  monitorData.value = cloneDeep(monitorList);
 
-  setTimeout(() => {
+  function getMonitor() {
     clearTimeout(timer);
     timer = undefined;
-
-    timer = 0;
-    if (uQ1.value && uH.value && uQ.value) {
-      openTimer(cloneDeep(obj), 0);
-    } else {
-      openTimer(cloneDeep(obj), 0);
-    }
-  }, 1000);
-}
-
-function startCompute() {
-  setTimeout(() => {
-    message.success('指令下发成功!');
-    isStartCompute.value = 1;
-  }, 800);
-}
-
-function resetCompute() {
-  setTimeout(() => {
-    message.success('指令下发成功!');
-    isStartCompute.value = -1;
-    tempList.length = 0;
-    n = 0;
-  }, 800);
-}
-
-let timer = undefined;
-let n = 0;
-let tempList = [];
-function openTimer(obj: { m3: number; gas: number; Hz: number; time: string }) {
-  // 打开定时器
-  const monitorList = cloneDeep(monitorData.value);
-  if (timer !== undefined) {
-    timer = setTimeout(() => {
-      obj.m3 = Number(obj.m3);
-      obj.gas = Number(obj.gas);
-      obj.Hz = Number(obj.Hz);
+    const n = 10;
+    const windQuantity = uQ1.value;
+    const obj = {
+      m3: windQuantity,
+      gas: gasWarningVal.value,
+      time: '',
+      Hz: uHz.value,
+    };
+    const monitorList: { m3: number; gas: number; Hz: number; time: string }[] = [];
+    for (let i = 0; i < n; i++) {
       const item = cloneDeep(obj);
-      item.time = dayjs(new Date().getTime()).format('HH:mm:ss');
-      if (resultObj.value && resultObj.value.x && resultObj.value.y && isStartCompute.value != 0) {
-        if (isStartCompute.value == 1 && Number(obj.m3) > uQ.value && Number(obj.gas) < gasWarningMax.value) {
-          isStartCompute.value = 0;
-          n = 0;
-        } else if (isStartCompute.value == -1 && Number(obj.m3) < uQ1.value) {
-          isStartCompute.value = 0;
-          n = 0;
-        }
-      }
+      const m3Temp = (Math.random() * 2 - 1) * Math.random() * 20;
+      const gas = m3Temp * 0.0002;
+      item.time = dayjs(new Date().getTime() - (n + i) * 3000).format('HH:mm:ss');
+      item.m3 = (obj.m3 + m3Temp).toFixed(2);
+      item.gas = (obj.gas + gas).toFixed(4);
+      item.Hz = (obj.Hz + Math.random()).toFixed(2);
+      monitorList.unshift(item);
+    }
+    monitorData.value = cloneDeep(monitorList);
 
-      if (!isStartCompute.value) {
-        const m3Temp = (Math.random() * 2 - 1) * Math.random() * Math.random() * 10;
-        const gas = m3Temp * 0.0002;
-        item.m3 = (obj.m3 + m3Temp).toFixed(2);
-        item.gas = (obj.gas + gas).toFixed(4);
-        item.Hz = (obj.Hz + Math.random()).toFixed(2);
-        n = 0;
+    setTimeout(() => {
+      clearTimeout(timer);
+      timer = undefined;
+
+      timer = 0;
+      if (uQ1.value && uH.value && uQ.value) {
+        openTimer(cloneDeep(obj), 0);
       } else {
-        if (n < 2) {
-          const item1 = cloneDeep(obj);
-          const m3Temp = Math.random() * Math.random() * 10;
-          const gas = m3Temp * 0.0002;
-          item1.m3 = (obj.m3 + m3Temp).toFixed(2);
-          item1.gas = (obj.gas + gas).toFixed(4);
-          item1.Hz = (obj.Hz + (Math.random() * 2 - 1) * Math.random()).toFixed(2);
-          tempList.push(item1);
+        openTimer(cloneDeep(obj), 0);
+      }
+    }, 1000);
+  }
+
+  function startCompute() {
+    setTimeout(() => {
+      message.success('指令下发成功!');
+      isStartCompute.value = 1;
+    }, 800);
+  }
+
+  function resetCompute() {
+    setTimeout(() => {
+      message.success('指令下发成功!');
+      isStartCompute.value = -1;
+      tempList.length = 0;
+      n = 0;
+    }, 800);
+  }
+
+  let timer = undefined;
+  let n = 0;
+  let tempList = [];
+  function openTimer(obj: { m3: number; gas: number; Hz: number; time: string }) {
+    // 打开定时器
+    const monitorList = cloneDeep(monitorData.value);
+    if (timer !== undefined) {
+      timer = setTimeout(() => {
+        obj.m3 = Number(obj.m3);
+        obj.gas = Number(obj.gas);
+        obj.Hz = Number(obj.Hz);
+        const item = cloneDeep(obj);
+        item.time = dayjs(new Date().getTime()).format('HH:mm:ss');
+        if (resultObj.value && resultObj.value.x && resultObj.value.y && isStartCompute.value != 0) {
+          if (isStartCompute.value == 1 && Number(obj.m3) > uQ.value && Number(obj.gas) < gasWarningMax.value) {
+            isStartCompute.value = 0;
+            n = 0;
+          } else if (isStartCompute.value == -1 && Number(obj.m3) < uQ1.value) {
+            isStartCompute.value = 0;
+            n = 0;
+          }
         }
 
-        // 计算  uQ1 -> uQ  gas -> gasWarningMax.value Hz -> resultObj.value.Hz
-        if (isStartCompute.value == 1) {
-          if (resultObj.value.Hz - obj.Hz > 0) {
-            item.Hz = (uHz.value + (2 * n * (resultObj.value.Hz - uHz.value)) / 20).toFixed(2);
-            if (resultObj.value.Hz - obj.Hz < 0) {
+        if (!isStartCompute.value) {
+          const m3Temp = (Math.random() * 2 - 1) * Math.random() * Math.random() * 10;
+          const gas = m3Temp * 0.0002;
+          item.m3 = (obj.m3 + m3Temp).toFixed(2);
+          item.gas = (obj.gas + gas).toFixed(4);
+          item.Hz = (obj.Hz + Math.random()).toFixed(2);
+          n = 0;
+        } else {
+          if (n < 2) {
+            const item1 = cloneDeep(obj);
+            const m3Temp = Math.random() * Math.random() * 10;
+            const gas = m3Temp * 0.0002;
+            item1.m3 = (obj.m3 + m3Temp).toFixed(2);
+            item1.gas = (obj.gas + gas).toFixed(4);
+            item1.Hz = (obj.Hz + (Math.random() * 2 - 1) * Math.random()).toFixed(2);
+            tempList.push(item1);
+          }
+
+          // 计算  uQ1 -> uQ  gas -> gasWarningMax.value Hz -> resultObj.value.Hz
+          if (isStartCompute.value == 1) {
+            if (resultObj.value.Hz - obj.Hz > 0) {
+              item.Hz = (uHz.value + (2 * n * (resultObj.value.Hz - uHz.value)) / 20).toFixed(2);
+              if (resultObj.value.Hz - obj.Hz < 0) {
+                item.Hz = (resultObj.value.Hz + Math.random() * 0.5).toFixed(2);
+              }
+            } else {
+              // item.Hz = (resultObj.value.Hz + (Math.random() * 2 - 1) * Math.random() * 2).toFixed(2);
               item.Hz = (resultObj.value.Hz + Math.random() * 0.5).toFixed(2);
             }
+            item.m3 = (obj.m3 + (0.027 * n * item.Hz * (item.Hz - uHz.value) * (uQ.value - uQ1.value)) / 600).toFixed(2);
+            if (Number(item.m3) > uQ.value) {
+              item.m3 = (uQ.value + Math.random() * 10).toFixed(2);
+            }
+            item.gas = (
+              gasWarningVal.value -
+              (0.015 * item.Hz * n * (item.Hz - uHz.value) * (gasWarningVal.value - gasWarningMax.value)) / 200
+            ).toFixed(4);
           } else {
-            // item.Hz = (resultObj.value.Hz + (Math.random() * 2 - 1) * Math.random() * 2).toFixed(2);
-            item.Hz = (resultObj.value.Hz + Math.random() * 0.5).toFixed(2);
+            // 复位
+            if (obj.Hz - uHz.value > 0) {
+              item.Hz = (obj.Hz - (2 * n * (resultObj.value.Hz - uHz.value)) / 30).toFixed(2);
+              if (item.Hz - uHz.value < 0) {
+                item.Hz = uHz.value - 0.3;
+              }
+            } else {
+              item.Hz = (uHz.value + (Math.random() * 2 - 1) * Math.random() * 2).toFixed(2);
+            }
+            item.m3 = (obj.m3 - (0.02 * n * n * item.Hz * (resultObj.value.Hz - uHz.value) * (uQ.value - uQ1.value)) / 400).toFixed(2);
+            if (item.m3 < uQ1.value) {
+              item.m3 = uQ1.value - Math.random() * 10;
+            }
+            item.gas = (obj.gas + (0.015 * item.Hz * n * (uHz.value - item.Hz) * (gasWarningVal.value - gasWarningMax.value)) / 800).toFixed(4);
           }
-          item.m3 = (obj.m3 + (0.027 * n * item.Hz * (item.Hz - uHz.value) * (uQ.value - uQ1.value)) / 600).toFixed(2);
-          if (Number(item.m3) > uQ.value) {
-            item.m3 = (uQ.value + Math.random() * 10).toFixed(2);
+        }
+        if (monitorList.length >= 10) {
+          monitorList.shift();
+          const monitor = cloneDeep(item);
+          const data = tempList.shift();
+          if (data) {
+            item['m3'] = data['m3'];
+            item['gas'] = data['gas'];
           }
-          item.gas = (
-            gasWarningVal.value -
-            (0.015 * item.Hz * n * (item.Hz - uHz.value) * (gasWarningVal.value - gasWarningMax.value)) / 200
-          ).toFixed(4);
+          tempList.push(monitor);
+          monitorList.push(item);
         } else {
-          // 复位
-          if (obj.Hz - uHz.value > 0) {
-            item.Hz = (obj.Hz - (2 * n * (resultObj.value.Hz - uHz.value)) / 30).toFixed(2);
-            if (item.Hz - uHz.value < 0) {
-              item.Hz = uHz.value - 0.3;
-            }
+          monitorList.push(item);
+        }
+        monitorData.value = monitorList;
+        // console.log('瓦斯监测数据-------------->', monitorData.value);
+        if (timer) {
+          if (!isStartCompute.value) {
+            // n++;
+            openTimer(cloneDeep(obj));
           } else {
-            item.Hz = (uHz.value + (Math.random() * 2 - 1) * Math.random() * 2).toFixed(2);
-          }
-          item.m3 = (obj.m3 - (0.02 * n * n * item.Hz * (resultObj.value.Hz - uHz.value) * (uQ.value - uQ1.value)) / 400).toFixed(2);
-          if (item.m3 < uQ1.value) {
-            item.m3 = uQ1.value - Math.random() * 10;
+            n++;
+            openTimer(cloneDeep(item));
           }
-          item.gas = (obj.gas + (0.015 * item.Hz * n * (uHz.value - item.Hz) * (gasWarningVal.value - gasWarningMax.value)) / 800).toFixed(4);
-        }
-      }
-      if (monitorList.length >= 10) {
-        monitorList.shift();
-        const monitor = cloneDeep(item);
-        const data = tempList.shift();
-        if (data) {
-          item['m3'] = data['m3'];
-          item['gas'] = data['gas'];
-        }
-        tempList.push(monitor);
-        monitorList.push(item);
-      } else {
-        monitorList.push(item);
-      }
-      monitorData.value = monitorList;
-      // console.log('瓦斯监测数据-------------->', monitorData.value);
-      if (timer) {
-        if (!isStartCompute.value) {
-          // n++;
-          openTimer(cloneDeep(obj));
-        } else {
-          n++;
-          openTimer(cloneDeep(item));
         }
-      }
-    }, 3000);
+      }, 3000);
+    }
   }
-}
 
-function edit(flag) {
-  if (flag == 'info') {
-    formType.value = '编辑风机信息';
+  function edit(flag) {
+    if (flag == 'info') {
+      formType.value = '编辑风机信息';
+    }
+    if (flag == 'line') {
+      formType.value = '编辑特性曲线';
+    }
+    if (formShow.value == true) {
+      formShow.value = false;
+      nextTick(() => {
+        formShow.value = true;
+      });
+    } else {
+      formShow.value = true;
+    }
   }
-  if (flag == 'line') {
-    formType.value = '编辑特性曲线';
+
+  function onSubmit() {
+    emit('close');
+    closeModal();
+    ChartRef.value = null;
+    uQ.value = undefined;
+    uH.value = undefined;
+    formType.value = '';
+    refresh.value = true;
+    xData.length = 0;
+    yDataList.length = 0;
+    lineNum = 0;
+    lineEquation.value = [];
+    resultObj.value = null;
+    monitorData.value = [];
+    clearTimeout(timer);
+    timer = undefined;
   }
-  if (formShow.value == true) {
-    formShow.value = false;
-    nextTick(() => {
-      formShow.value = true;
+
+  async function onCancel() {
+    return new Promise((resolve) => {
+      if (isStartCompute.value == 0) {
+        onSubmit();
+        resolve(true);
+      } else {
+        message.warning('为保障矿井安全生产,请确保已复位!!!');
+        resolve(false);
+      }
     });
-  } else {
-    formShow.value = true;
   }
-}
-
-function onSubmit() {
-  emit('close');
-  closeModal();
-  ChartRef.value = null;
-  uQ.value = undefined;
-  uH.value = undefined;
-  formType.value = '';
-  refresh.value = true;
-  xData.length = 0;
-  yDataList.length = 0;
-  lineNum = 0;
-  lineEquation.value = [];
-  resultObj.value = null;
-  monitorData.value = [];
-  clearTimeout(timer);
-  timer = undefined;
-}
-
-async function onCancel() {
-  return new Promise((resolve) => {
-    if (isStartCompute.value == 0) {
-      onSubmit();
-      resolve(true);
-    } else {
-      message.warning('为保障矿井安全生产,请确保已复位!!!');
-      resolve(false);
+
+  function initEcharts() {
+    if (ChartRef.value) {
+      reSetLine();
+      myChart.value = echarts.init(ChartRef.value);
+      option && myChart.value.setOption(option);
+      refresh.value = false;
+      getMonitor();
+      nextTick(() => {
+        setTimeout(() => {
+          refresh.value = true;
+        }, 0);
+      });
     }
-  });
-}
-
-function initEcharts() {
-  if (ChartRef.value) {
-    reSetLine();
-    myChart.value = echarts.init(ChartRef.value);
-    option && myChart.value.setOption(option);
-    refresh.value = false;
-    getMonitor();
-    nextTick(() => {
-      setTimeout(() => {
-        refresh.value = true;
-      }, 0);
-    });
   }
-}
 
-function makeLine() {
-  if (uQ.value && uH.value) {
-    loadding.value = true;
+  function makeLine() {
+    if (uQ.value && uH.value) {
+      loadding.value = true;
+      setTimeout(() => {
+        computeR();
+        reSetLine();
+        option && myChart.value.setOption(option);
+        loadding.value = false;
+      }, 1200);
+    }
+  }
+  function handleSubmit() {
+    message.success('提交成功');
     setTimeout(() => {
-      computeR();
-      reSetLine();
-      option && myChart.value.setOption(option);
-      loadding.value = false;
-    }, 1200);
+      formShow.value = false;
+    }, 800);
   }
-}
-function handleSubmit() {
-  message.success('提交成功');
-  setTimeout(() => {
-    formShow.value = false;
-  }, 800);
-}
-onMounted(() => {
-  timer = undefined;
-});
+  onMounted(() => {
+    timer = undefined;
+  });
 </script>
 
 <style scoped lang="less">
-.modal-box {
-  display: flex;
-  flex-direction: row;
-  background-color: #ffffff05;
-  padding: 20px 8px 0 8px;
-  border: 1px solid #00d8ff22;
-  position: relative;
-  // min-height: 600px;
-  .box-title {
-    width: calc(100% - 40px);
-    text-align: center;
-    background-color: #1dc1f522;
-  }
-  .info-item {
+  .modal-box {
     display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 2px 0px;
-    margin: 10px 0;
-    line-height: 30px;
-    background-image: linear-gradient(to right, #39deff15, #3977e500);
-    &:first-child {
-      margin-top: 0;
-    }
-    .title {
-      width: 200px;
-      text-align: left;
-      padding-left: 20px;
-      color: #f1f1f1cc;
-    }
-    .value {
-      width: 150px;
-      color: #00d8ff;
-      padding-right: 20px;
-      text-align: right;
+    flex-direction: row;
+    background-color: #ffffff05;
+    padding: 20px 8px 0 8px;
+    border: 1px solid #00d8ff22;
+    position: relative;
+    // min-height: 600px;
+    .box-title {
+      width: calc(100% - 40px);
+      text-align: center;
+      background-color: #1dc1f522;
     }
-  }
-  .right-box {
-    width: 320px;
-    .info-lines {
-      width: calc(100% - 2px);
-      height: 450px;
-      box-shadow: 0px 0px 50px #86baff08 inset;
-      overflow-y: auto;
-      margin-top: 5px;
+    .info-item {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 2px 0px;
+      margin: 10px 0;
+      line-height: 30px;
+      background-image: linear-gradient(to right, #39deff15, #3977e500);
+      &:first-child {
+        margin-top: 0;
+      }
       .title {
-        width: 100%;
+        width: 200px;
+        text-align: left;
+        padding-left: 20px;
         color: #f1f1f1cc;
       }
+      .value {
+        width: 150px;
+        color: #00d8ff;
+        padding-right: 20px;
+        text-align: right;
+      }
     }
-  }
-  .center-box {
-    flex: 1;
-    margin: 0 10px;
-    display: flex;
-    .info-echarts {
-      // background-color: #ffffff11;
-    }
-    .result-tip {
-      text-align: center;
-      background-color: #00000011;
-      line-height: 28px;
-      margin: 10px 50px 0 50px;
-      border: 1px solid #00d8ff22;
-      border-radius: 2px;
+    .right-box {
+      width: 320px;
+      .info-lines {
+        width: calc(100% - 2px);
+        height: 450px;
+        box-shadow: 0px 0px 50px #86baff08 inset;
+        overflow-y: auto;
+        margin-top: 5px;
+        .title {
+          width: 100%;
+          color: #f1f1f1cc;
+        }
+      }
     }
-  }
-  .tip-box {
-    width: 1040px;
-    height: 44px;
-    position: absolute;
-    top: 417px;
-    display: flex;
-    padding: 0 20px;
-    .title {
-      width: 142px;
-      height: 43px;
+    .center-box {
+      flex: 1;
+      margin: 0 10px;
       display: flex;
-      align-items: center;
-      padding-left: 30px;
-      background-image: url('@/assets/images/fanlocal-tip/tip-title.png');
-      position: relative;
-      &::before {
-        content: '';
-        display: inline-block;
-        position: absolute;
-        width: 31px;
-        height: 31px;
-        top: 5px;
-        left: -8px;
-        background-image: url('@/assets/images/fanlocal-tip/tip-icon.png');
+      .info-echarts {
+        // background-color: #ffffff11;
+      }
+      .result-tip {
+        text-align: center;
+        background-color: #00000011;
+        line-height: 28px;
+        margin: 10px 50px 0 50px;
+        border: 1px solid #00d8ff22;
+        border-radius: 2px;
       }
     }
-    .tip-container {
-      width: 898px;
+    .tip-box {
+      width: 1040px;
       height: 44px;
-      line-height: 44px;
+      position: absolute;
+      top: 417px;
       display: flex;
-      background-image: url('@/assets/images/fanlocal-tip/tip-bg.png');
-      background-size: cover;
+      padding: 0 20px;
+      .title {
+        width: 142px;
+        height: 43px;
+        display: flex;
+        align-items: center;
+        padding-left: 30px;
+        background-image: url('@/assets/images/fanlocal-tip/tip-title.png');
+        position: relative;
+        &::before {
+          content: '';
+          display: inline-block;
+          position: absolute;
+          width: 31px;
+          height: 31px;
+          top: 5px;
+          left: -8px;
+          background-image: url('@/assets/images/fanlocal-tip/tip-icon.png');
+        }
+      }
+      .tip-container {
+        width: 898px;
+        height: 44px;
+        line-height: 44px;
+        display: flex;
+        background-image: url('@/assets/images/fanlocal-tip/tip-bg.png');
+        background-size: cover;
+      }
     }
   }
-}
-.setting-box {
-  width: 1170px;
-  height: 70px;
-  margin: 10px 0;
-  background-color: #ffffff05;
-  border: 1px solid #00d8ff22;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-
-  .right-inputs {
-    width: 100%;
+  .setting-box {
+    width: 1170px;
+    height: 70px;
+    margin: 10px 0;
+    background-color: #ffffff05;
+    border: 1px solid #00d8ff22;
     display: flex;
-    height: 40px;
-    margin: 0 10px;
+    align-items: center;
     justify-content: space-between;
-  }
-  .left-buttons {
-    display: flex;
-    height: 40px;
 
-    .btn {
+    .right-inputs {
+      width: 100%;
+      display: flex;
+      height: 40px;
       margin: 0 10px;
+      justify-content: space-between;
     }
-  }
-  .border-clip {
-    width: 1px;
-    height: 25px;
-    border-right: 1px solid #8b8b8b77;
-  }
-  .input-title {
-    max-width: 150px;
-  }
-  .input-box {
-    width: 220px !important;
-    background: transparent !important;
-    border-color: #00d8ff44 !important;
-    margin-right: 20px;
-    color: #fff !important;
-  }
-  .btn {
-    padding: 8px 20px;
-    position: relative;
-    border-radius: 2px;
-    color: #fff;
-    width: fit-content;
-    cursor: pointer;
+    .left-buttons {
+      display: flex;
+      height: 40px;
 
-    &::before {
-      position: absolute;
-      display: block;
-      content: '';
-      width: calc(100% - 4px);
-      height: calc(100% - 4px);
-      top: 2px;
-      left: 2px;
-      border-radius: 2px;
-      z-index: -1;
+      .btn {
+        margin: 0 10px;
+      }
     }
-  }
-
-  .btn1 {
-    border: 1px solid #5cfaff;
+    .border-clip {
+      width: 1px;
+      height: 25px;
+      border-right: 1px solid #8b8b8b77;
+    }
+    .input-title {
+      max-width: 150px;
+    }
+    .input-box {
+      width: 220px !important;
+      background: transparent !important;
+      border-color: #00d8ff44 !important;
+      margin-right: 20px;
+      color: #fff !important;
+    }
+    .btn {
+      padding: 8px 20px;
+      position: relative;
+      border-radius: 2px;
+      color: #fff;
+      width: fit-content;
+      cursor: pointer;
 
-    &::before {
-      background-image: linear-gradient(#2effee92, #0cb1d592);
+      &::before {
+        position: absolute;
+        display: block;
+        content: '';
+        width: calc(100% - 4px);
+        height: calc(100% - 4px);
+        top: 2px;
+        left: 2px;
+        border-radius: 2px;
+        z-index: -1;
+      }
     }
 
-    &:hover {
-      border: 1px solid #5cfaffaa;
+    .btn1 {
+      border: 1px solid #5cfaff;
 
       &::before {
-        background-image: linear-gradient(#2effee72, #0cb1d572);
+        background-image: linear-gradient(#2effee92, #0cb1d592);
+      }
+
+      &:hover {
+        border: 1px solid #5cfaffaa;
+
+        &::before {
+          background-image: linear-gradient(#2effee72, #0cb1d572);
+        }
       }
     }
   }
-}
-.is-open {
-  animation: open 0.5s;
-  animation-iteration-count: 1;
-  animation-fill-mode: forwards;
-  animation-timing-function: ease-in;
-}
-.is-close {
-  height: 0px;
-}
-
-@keyframes open {
-  0% {
+  .is-open {
+    animation: open 0.5s;
+    animation-iteration-count: 1;
+    animation-fill-mode: forwards;
+    animation-timing-function: ease-in;
+  }
+  .is-close {
     height: 0px;
   }
-  100% {
-    height: fit-content;
+
+  @keyframes open {
+    0% {
+      height: 0px;
+    }
+    100% {
+      height: fit-content;
+    }
   }
-}
 
-@keyframes close {
-  0% {
-    height: fit-content;
+  @keyframes close {
+    0% {
+      height: fit-content;
+    }
+    100% {
+      height: 0px;
+    }
   }
-  100% {
-    height: 0px;
+  :deep(.zxm-divider-inner-text) {
+    color: #cacaca88 !important;
+  }
+  :deep(.zxm-form-item) {
+    margin-bottom: 10px;
   }
-}
-:deep(.zxm-divider-inner-text) {
-  color: #cacaca88 !important;
-}
-:deep(.zxm-form-item) {
-  margin-bottom: 10px;
-}
 </style>

+ 24 - 27
src/views/vent/monitorManager/fanLocalMonitor/index.vue

@@ -237,27 +237,25 @@
               </template>
             </div>
           </div>
-          <template v-for="(item, index) in modalTypeArr.rightBtnArr" :key="index">
-            <div class="container-group" v-if="item.permission === 'fanLocal:pjfx' && hasPermission(item.permission)">
-              <div class="warning-header">
-                <div class="header-item">
-                  <div class="header-title">评价分析</div>
-                </div>
+          <div class="container-group" v-if="hasPermission('fanLocal:pjfx')">
+            <div class="warning-header">
+              <div class="header-item">
+                <div class="header-title">评价分析</div>
               </div>
-              <div class="warning-group" style="max-height: 200px; overflow-y: auto">
-                <template v-if="selectData.deviceType">
-                  <div class="container-item" v-for="(data, index) in leftColumns1" :key="index">
-                    <div class="item-icon">
-                      <!-- <SvgIcon class="icon-style" size="18" name="temperature" /> -->
-                      <CaretRightOutlined class="icon-style" />
-                    </div>
-                    <div class="item-name">{{ data.title }}</div>
-                    <div :class="['item-value', { 'text-red-bold': data.value === '超限' }]">{{ data.value }}</div>
+            </div>
+            <div class="warning-group" style="max-height: 200px; overflow-y: auto">
+              <template v-if="selectData.deviceType">
+                <div class="container-item" v-for="(data, index) in leftColumns1" :key="index">
+                  <div class="item-icon">
+                    <!-- <SvgIcon class="icon-style" size="18" name="temperature" /> -->
+                    <CaretRightOutlined class="icon-style" />
                   </div>
-                </template>
-              </div>
+                  <div class="item-name">{{ data.title }}</div>
+                  <div :class="['item-value', { 'text-red-bold': data.value === '超限' }]">{{ data.value }}</div>
+                </div>
+              </template>
             </div>
-          </template>
+          </div>
         </div>
       </div>
       <div>
@@ -273,7 +271,7 @@
               >
             </div>
             <div class="container-group container-group-l">
-              <div class="warning-group" style="max-height: 200px">
+              <div class="warning-group" style="max-height: 200px; overflow-y: auto">
                 <template v-if="deviceType">
                   <div v-for="(state, index) in rightColumns" :key="index">
                     <template v-if="!state.dataIndex.endsWith('_w')">
@@ -306,7 +304,7 @@
                   </div>
                 </div>
                 <template v-if="deviceType">
-                  <div v-if="rightColumns.length > 1">
+                  <div v-if="rightColumns.length > 1 && rightColumns.find((item) => item.dataIndex?.endsWith('_w'))">
                     <div v-for="(state, index) in rightColumns" :key="index">
                       <template v-if="state.dataIndex.endsWith('_w')">
                         <div class="warning-item">
@@ -723,8 +721,7 @@ const { createConfirm } = useMessage();
 const globSetting = useGlobSetting();
 const showPlay = ref(hasPermission('fanlocal:showCamera') ? true : false);
 const computedStyle = computed(() => {
-  const items = modalTypeArr.rightBtnArr;
-  const hasMatchingPermission = items.some((item) => item.permission === 'fanLocal:pjfx' && hasPermission(item.permission));
+  const hasMatchingPermission = hasPermission('fanLocal:pjfx');
   return hasMatchingPermission ? 'max-height: 200px' : '';
 });
 const modalTypeArr = reactive({
@@ -863,11 +860,11 @@ const modalTypeArr = reactive({
       value: '按需供风联动',
       permission: 'fanLocal:supplyAir',
     },
-    {
-      key: 'pjfx',
-      value: '评价分析',
-      permission: 'fanLocal:pjfx',
-    },
+    // {
+    //   key: 'pjfx',
+    //   value: '评价分析',
+    //   permission: 'fanLocal:pjfx',
+    // },
   ],
 });
 const sensorList = ref<any[]>([

+ 0 - 2
src/views/vent/monitorManager/fanLocalMonitor1/components/conditionAssistance1.vue

@@ -283,7 +283,6 @@
   }
 
   function computeUH(Hz: number, uQ: number) {
-    debugger;
     const equation = assistanceData.value.find((item) => {
       return Math.ceil(Hz) == item['Hz'];
     });
@@ -367,7 +366,6 @@
 
   // 根据风量计算压差
   function computePa() {
-    debugger;
     const R = uH.value / Number(uQ.value) / Number(uQ.value);
     const pointX = Number(uQ.value);
     const pointY = Number(uH.value);

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

@@ -740,7 +740,6 @@
         const dataArr = res.msgTxt[0].datalist || [];
         dataSource.value = [];
         selectRowIndex.value = dataArr.findIndex((item) => item.deviceID === deviceId.value);
-        debugger;
         if (selectRowIndex.value > -1) {
           if (!deviceType.value) deviceType.value = dataArr[selectRowIndex.value]['deviceType'];
           let data = dataArr[selectRowIndex.value];

+ 0 - 3
src/views/vent/monitorManager/fireDoorMonitor/fireDoor.threejs.fireF.ts

@@ -78,11 +78,9 @@ class FireDoorF {
 
   /* 提取风门序列帧,初始化前后门动画 */
   initAnimation() {
-    debugger;
     const fireGroup = this.group.children[0]?.getObjectByName('Fire-doorf');
     if (fireGroup) {
       const tracks = fireGroup.animations[0].tracks;
-      debugger;
       this.mixers = new THREE.AnimationMixer(fireGroup.children[0]);
 
       const door = new THREE.AnimationClip('door', 100, tracks);
@@ -95,7 +93,6 @@ class FireDoorF {
 
   // 播放动画
   play(handlerState, timeScale = 0.01) {
-    debugger;
     let handler = () => {};
     if (this.clipActionArr.door) {
       switch (handlerState) {

+ 0 - 1
src/views/vent/monitorManager/fireDoorMonitor/fireDoor.threejs.ts

@@ -47,7 +47,6 @@ const mouseEvent = (event) => {
 };
 
 export const play = (handlerState, flag?) => {
-  debugger;
   if (fmType === 'fireDoor' && fireDoor) {
     return fireDoor.play.call(fireDoor, handlerState, flag);
   }

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

@@ -411,7 +411,6 @@
   let doorDeviceState = 1; //记录设备状态,为了与下一次监测数据做比较
   function monitorAnimation(selectData) {
     const timeScale = 0.005;
-    debugger;
     // 打开
     if (selectData.frontGateOpen == '1' && !isdoorOpenRunning) {
       isdoorOpenRunning = true;

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

@@ -351,7 +351,6 @@ class FmNoStation {
         resolve(null);
       }
       this.model.setGLTFModel('Fm-noStation').then((gltf) => {
-        debugger;
         const fmModal = gltf[0];
         fmModal.name = 'Fm-noStation';
         this.group?.add(fmModal);

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

@@ -143,7 +143,6 @@ export function computePlay(data, maxarea, isFirst = false) {
   // 前门前窗 frontPresentValue1
   // 后门后窗 rearPresentValue2
   // 后门前窗 frontPresentValue2
-  debugger;
   // if (data.OpenDegree1 || data.OpenDegree2) {
   //   maxarea = 90;
   //   rotationParam.frontDeg0 = (90 / maxarea) * Number(isFirst ? 0 : data.OpenDegree1);

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

@@ -224,7 +224,6 @@ class FmDc {
       const parentGroup = fmGroup.getObjectByName('MeiCangLianLuoHangFengMen');
       // const frontGroup = parentGroup.getObjectByName('FengMen2');
       // const backGroup = parentGroup.getObjectByName('FengMen1');
-      debugger;
       this.mixers = new THREE.AnimationMixer(parentGroup);
 
       const frontDoor = new THREE.AnimationClip('frontDoor', 2.5, fontTracks);

+ 7 - 13
src/views/vent/monitorManager/gateMonitor/index.vue

@@ -25,18 +25,8 @@
       <div class="top-center row">
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(1)">打开前门</div>
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(2)">关闭前门</div>
-        <div
-          v-if="hasPermission('btn:control') && (selectData.deviceType == 'gate_ss' || selectData.deviceType == 'gate_nomal3')"
-          class="button-box"
-          @click="playAnimation(8)"
-          >打开中间门</div
-        >
-        <div
-          v-if="hasPermission('btn:control') && (selectData.deviceType == 'gate_ss' || selectData.deviceType == 'gate_nomal3')"
-          class="button-box"
-          @click="playAnimation(9)"
-          >关闭中间门</div
-        >
+        <div v-if="hasPermission('btn:control') && selectData.ndoorcount == '3'" class="button-box" @click="playAnimation(8)">打开中间门</div>
+        <div v-if="hasPermission('btn:control') && selectData.ndoorcount == '3'" class="button-box" @click="playAnimation(9)">关闭中间门</div>
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(3)">打开后门</div>
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(4)">关闭后门</div>
         <div v-if="selectData['isShowGatesContrl']" class="button-box" @click="playAnimation(5)">同时打开</div>
@@ -484,7 +474,7 @@
         type = 'fm3';
       } else if (selectData.deviceType == 'gate_ss_two' || selectData.deviceType == 'gate_ss_two1') {
         type = 'fmTwoSs';
-      } else if (selectData.deviceType == 'gate_nomal3') {
+      } else if (selectData.deviceType == 'gate_nomal3' || selectData.ndoorcount == '3') {
         type = 'fmThreeTl';
       } else if (selectData.deviceType == 'gate_tj') {
         type = 'fmWindow';
@@ -1054,4 +1044,8 @@
   :deep(.zxm-radio-disabled .zxm-radio-inner::after) {
     background-color: #127cb5 !important;
   }
+  :deep(.@{ventSpace}-picker-datetime-panel) {
+    height: 200px !important;
+    overflow-y: auto !important;
+  }
 </style>

Datei-Diff unterdrückt, da er zu groß ist
+ 535 - 626
src/views/vent/monitorManager/mainFanMonitor/index.vue


+ 0 - 5
src/views/vent/monitorManager/mainFanMonitor/mainWind.threejs.ts

@@ -173,7 +173,6 @@ class mainWindRect {
   mouseUpModel() {}
 
   async setDeviceFrequency(deviceType, state, frequencyVal?) {
-    debugger;
     // 调节频率
     if (frequencyVal) {
       this.resetSmokeParam(deviceType, frequencyVal, 0);
@@ -204,7 +203,6 @@ class mainWindRect {
       await this.lookMotor(deviceType, 'open', duration);
       await this.openOrCloseValve(deviceType, 'open', duration);
       this.startGearAnimation(deviceType, 'open', smokeDirection, frequencyVal, duration);
-      debugger;
       smoke.startSmoke(duration);
     }
   }
@@ -355,7 +353,6 @@ class mainWindRect {
    * @param state // 打开、关闭状态
    */
   async playSmoke(controlType, deviceType, frequencyVal, state, smokeDirection) {
-    debugger;
     if (frequencyVal) {
       this.resetSmokeParam(deviceType, frequencyVal);
     }
@@ -378,7 +375,6 @@ class mainWindRect {
       if (smoke && smoke.frameId) {
         await smoke.stopSmoke();
         await this.setSmokeDirection(deviceType, smokeDirection);
-        debugger;
         smoke.startSmoke();
       }
     } else if (controlType === 'frequency') {
@@ -757,7 +753,6 @@ class mainWindRect {
         this.group?.position.set(-0.44, 19.88, 22.37);
         this.initSmokeMass();
         await this.setSmokePosition();
-        debugger;
         const ztfjGroup = this.group?.getObjectByName('ztfj') as THREE.Group;
         const fbmGroup = this.group?.getObjectByName('fbm') as THREE.Group;
         const fcGroup = this.group?.getObjectByName('ztfj-fc') as THREE.Group;

+ 0 - 1
src/views/vent/monitorManager/mainFanMonitor/mainWind.xj.threejs.ts

@@ -684,7 +684,6 @@ class mainXjWindRect {
 
   mountedThree() {
     this.group = new THREE.Group();
-    debugger;
     return new Promise(async (resolve) => {
       this.model.setGLTFModel('ztfj-xj').then(async (gltf) => {
         const ztfjModal = gltf[0].children[0];

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

@@ -88,7 +88,6 @@ export const setModelType = (modalTypeName) => {
     const oldControlsPosition = { x: 0, y: 0, z: 0 };
     let newCameraPosition = { x: 0, y: 0, z: 0 },
       newControlsPosition = { x: 0, y: 0, z: 0 };
-    debugger;
     if (group?.children.length == 7) {
       newCameraPosition = { x: -150.124016817707, y: 73.73471355835353, z: 6.421728063746754 };
       newControlsPosition = { x: -3.0365054180427618, y: -14.182088742518898, z: 6.336141914568813 };

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

@@ -171,7 +171,6 @@ class ddFc_2 {
     if (fcGroup) {
       const frontObjNames = ['FengChuang_1_3', 'FengChuang_1_2', 'FengChuang_1_18'];
       const backObjNames = ['FengChuang_1_20', 'FengChuang_1_21', 'FengChuang_1_22'];
-      debugger;
       frontObjNames.filter((name) => {
         const obj = fcGroup?.getObjectByName(name);
         if (obj) {

+ 4 - 0
src/views/vent/monitorManager/windowMonitor/index.vue

@@ -598,4 +598,8 @@
       height: 350px;
     }
   }
+  :deep(.@{ventSpace}-picker-datetime-panel) {
+    height: 200px !important;
+    overflow-y: auto !important;
+  }
 </style>

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

@@ -160,7 +160,6 @@ class sdFc_3 {
     const fcObj2 = fc?.getObjectByName('FengChuang_2_1');
     const frontObjNames = ['FengChuang_1_2', 'FengChuang_1_3', 'FengChuang_1_4', 'FengChuang_1_5'];
     const backObjNames = ['FengChuang_2_2', 'FengChuang_2_3', 'FengChuang_2_4', 'FengChuang_2_5'];
-    debugger;
     frontObjNames.filter((name) => {
       const obj = fcObj1?.getObjectByName(name);
       if (obj) {
@@ -180,7 +179,6 @@ class sdFc_3 {
   }
 
   play(rotationParam, flag) {
-    debugger;
     if (this.windowsActionArr.frontWindow.length <= 0 || this.windowsActionArr.backWindow.length <= 0) {
       return;
     }

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

@@ -340,7 +340,6 @@ export const mountedThree = () => {
     model.camera.position.set(100, 0, 1000);
     // 根据模型类型判断要初始化哪些模型
     const dictCodes = getDictItemsByCode('windowModalType');
-    debugger;
     for (let i = 0; i < dictCodes.length; i++) {
       const dict = dictCodes[i];
 

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

@@ -562,7 +562,6 @@
   }
   // 切换检测数据
   async function getSelectRow(selectRow, index) {
-    debugger;
     if (selectRow) {
       loading.value = true;
       selectRowIndex.value = index;
@@ -829,4 +828,8 @@
       }
     }
   }
+  :deep(.@{ventSpace}-picker-datetime-panel) {
+    height: 200px !important;
+    overflow-y: auto !important;
+  }
 </style>

+ 277 - 278
src/views/vent/safetyList/common/HistoryTable.vue

@@ -10,315 +10,314 @@
 </template>
 
 <script lang="ts" setup>
-//ts语法
-import { watchEffect, ref, watch, defineExpose, inject, nextTick, onMounted, computed } from 'vue';
-import { subStationList } from '../safetyList.api';
-import { historyColumns } from '../historyLsit.data';
-import { FormSchema } from '/@/components/Form/index';
-import { BasicTable } from '/@/components/Table';
-import { useListPage } from '/@/hooks/system/useListPage';
-import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
-import { useMethods } from '/@/hooks/system/useMethods';
-import { defHttp } from '/@/utils/http/axios';
-import dayjs from 'dayjs';
-import { getAutoScrollContainer } from '/@/utils/common/compUtils';
+  //ts语法
+  import { watchEffect, ref, watch, defineExpose, inject, nextTick, onMounted, computed } from 'vue';
+  import { subStationList } from '../safetyList.api';
+  import { historyColumns } from '../historyLsit.data';
+  import { FormSchema } from '/@/components/Form/index';
+  import { BasicTable } from '/@/components/Table';
+  import { useListPage } from '/@/hooks/system/useListPage';
+  import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
+  import { useMethods } from '/@/hooks/system/useMethods';
+  import { defHttp } from '/@/utils/http/axios';
+  import dayjs from 'dayjs';
+  import { getAutoScrollContainer } from '/@/utils/common/compUtils';
 
-const props = defineProps({
-  columnsType: {
-    type: String,
-  },
-  columns: {
-    type: Array,
-    // required: true,
-    default: () => [],
-  },
-  historyColumns: {
-    type: Array,
-    default: () => [],
-  },
-  stationId: {
-    type: String,
-  },
-  scroll: {
-    type: Object,
-    default: { y: 0 },
-  },
-  formSchemas: {
-    type: Array<FormSchema>,
-    default: () => [],
-  },
-});
-const postExportXlsUrl = '/safety/ventanalySubStation/export158StatusLog';
-//获取分站数据
-const historyTable = ref();
-const loading = ref(false);
-const dataSource = ref([]);
+  const props = defineProps({
+    columnsType: {
+      type: String,
+    },
+    columns: {
+      type: Array,
+      // required: true,
+      default: () => [],
+    },
+    historyColumns: {
+      type: Array,
+      default: () => [],
+    },
+    stationId: {
+      type: String,
+    },
+    scroll: {
+      type: Object,
+      default: { y: 0 },
+    },
+    formSchemas: {
+      type: Array<FormSchema>,
+      default: () => [],
+    },
+  });
+  const postExportXlsUrl = '/safety/ventanalySubStation/export158StatusLog';
+  //获取分站数据
+  const historyTable = ref();
+  const loading = ref(false);
+  const dataSource = ref([]);
 
-const emit = defineEmits(['change']);
+  const emit = defineEmits(['change']);
 
-const deviceKide = ref('');
-const columns = ref([]);
-const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({});
-loading.value = true;
+  const deviceKide = ref('');
+  const columns = ref([]);
+  const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({});
+  loading.value = true;
 
-watch(
-  () => {
-    return props.columnsType;
-  },
-  async (newVal) => {
-    debugger;
-    if (!newVal) return;
-    deviceKide.value = newVal;
-    if (historyTable.value) {
-      getForm().resetFields();
-      // getForm().updateSchema();
-      // getForm();
+  watch(
+    () => {
+      return props.columnsType;
+    },
+    async (newVal) => {
+      if (!newVal) return;
+      deviceKide.value = newVal;
+      if (historyTable.value) {
+        getForm().resetFields();
+        // getForm().updateSchema();
+        // getForm();
+      }
+      dataSource.value = [];
+      nextTick(() => {
+        getDataSource();
+      });
+
+      if (historyTable.value) reload();
+    },
+    {
+      immediate: true,
     }
-    dataSource.value = [];
-    nextTick(() => {
-      getDataSource();
-    });
+  );
 
-    if (historyTable.value) reload();
-  },
-  {
-    immediate: true,
-  }
-);
+  watch(
+    () => props.scroll.y,
+    (newVal) => {
+      if (newVal) {
+        tableScroll.value = { y: newVal - 100 };
+      } else {
+        tableScroll.value = {};
+      }
+    }
+  );
 
-watch(
-  () => props.scroll.y,
-  (newVal) => {
-    if (newVal) {
-      tableScroll.value = { y: newVal - 100 };
-    } else {
-      tableScroll.value = {};
+  watch(
+    () => props.stationId,
+    async () => {
+      await getForm().setFieldsValue({});
     }
-  }
-);
+  );
 
-watch(
-  () => props.stationId,
-  async () => {
-    await getForm().setFieldsValue({});
+  function resetFormParam() {
+    const formData = getForm().getFieldsValue();
+    const pagination = getPaginationRef();
+    formData['pageNo'] = pagination['current'];
+    formData['pageSize'] = pagination['pageSize'];
+    const params = {
+      pageNo: pagination['current'],
+      pageSize: pagination['pageSize'],
+      createTime_begin: formData['starttime_begin'],
+      createTime_end: formData['starttime_end'],
+      stationId: props.stationId,
+      status: formData['status'],
+    };
+    return params;
   }
-);
 
-function resetFormParam() {
-  const formData = getForm().getFieldsValue();
-  const pagination = getPaginationRef();
-  formData['pageNo'] = pagination['current'];
-  formData['pageSize'] = pagination['pageSize'];
-  const params = {
-    pageNo: pagination['current'],
-    pageSize: pagination['pageSize'],
-    createTime_begin: formData['starttime_begin'],
-    createTime_end: formData['starttime_end'],
-    stationId: props.stationId,
-    status: formData['status'],
-  };
-  return params;
-}
-
-async function getDataSource() {
-  dataSource.value = [];
-  setLoading(true);
-  const params = await resetFormParam();
-  const res = await defHttp.post(
-    { url: '/safety/ventanalySubStation/get158StatusLog', params: params },
-    { joinParamsToUrl: true, isTransformResponse: false }
-  );
-  console.log(res.result['records']);
-  if (res.result['records'].length > 0) {
-    dataSource.value = res.result['records'];
-    setLoading(false);
-  } else {
+  async function getDataSource() {
     dataSource.value = [];
-    setLoading(false);
+    setLoading(true);
+    const params = await resetFormParam();
+    const res = await defHttp.post(
+      { url: '/safety/ventanalySubStation/get158StatusLog', params: params },
+      { joinParamsToUrl: true, isTransformResponse: false }
+    );
+    console.log(res.result['records']);
+    if (res.result['records'].length > 0) {
+      dataSource.value = res.result['records'];
+      setLoading(false);
+    } else {
+      dataSource.value = [];
+      setLoading(false);
+    }
+  }
+  //导入导出方法
+  function onExportXlsFn() {
+    const { exportXlsPost0 } = useMethods();
+    const params = resetFormParam();
+    exportXlsPost0('历史数据', postExportXlsUrl, params);
   }
-}
-//导入导出方法
-function onExportXlsFn() {
-  const { exportXlsPost0 } = useMethods();
-  const params = resetFormParam();
-  exportXlsPost0('历史数据', postExportXlsUrl, params);
-}
 
-// 列表页面公共参数、方法
-const { tableContext } = useListPage({
-  tableProps: {
-    // api: list,
-    columns: props.historyColumns ? props.historyColumns : (props.historyColumns as any[]),
-    canResize: true,
-    showTableSetting: false,
-    showActionColumn: false,
-    bordered: false,
-    size: 'small',
-    scroll: tableScroll,
-    showIndexColumn: true,
-    tableLayout: 'auto',
-    formConfig: {
-      labelAlign: 'left',
-      showAdvancedButton: false,
-      showSubmitButton: false,
-      showResetButton: false,
-      baseColProps: {
-        xs: 24,
-        sm: 24,
-        md: 24,
-        lg: 9,
-        xl: 7,
-        xxl: 4,
-      },
-      schemas:
-        props.formSchemas.length > 0
-          ? props.formSchemas
-          : [
-              {
-                field: 'starttime_begin',
-                label: '开始时间',
-                component: 'DatePicker',
-                defaultValue: dayjs().startOf('date'),
-                required: true,
-                componentProps: {
-                  showTime: true,
-                  valueFormat: 'YYYY-MM-DD HH:mm:ss',
-                  getPopupContainer: getAutoScrollContainer,
+  // 列表页面公共参数、方法
+  const { tableContext } = useListPage({
+    tableProps: {
+      // api: list,
+      columns: props.historyColumns ? props.historyColumns : (props.historyColumns as any[]),
+      canResize: true,
+      showTableSetting: false,
+      showActionColumn: false,
+      bordered: false,
+      size: 'small',
+      scroll: tableScroll,
+      showIndexColumn: true,
+      tableLayout: 'auto',
+      formConfig: {
+        labelAlign: 'left',
+        showAdvancedButton: false,
+        showSubmitButton: false,
+        showResetButton: false,
+        baseColProps: {
+          xs: 24,
+          sm: 24,
+          md: 24,
+          lg: 9,
+          xl: 7,
+          xxl: 4,
+        },
+        schemas:
+          props.formSchemas.length > 0
+            ? props.formSchemas
+            : [
+                {
+                  field: 'starttime_begin',
+                  label: '开始时间',
+                  component: 'DatePicker',
+                  defaultValue: dayjs().startOf('date'),
+                  required: true,
+                  componentProps: {
+                    showTime: true,
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                    getPopupContainer: getAutoScrollContainer,
+                  },
+                  colProps: {
+                    span: 8,
+                  },
                 },
-                colProps: {
-                  span: 8,
+                {
+                  field: 'starttime_end',
+                  label: '结束时间',
+                  component: 'DatePicker',
+                  defaultValue: dayjs(),
+                  required: true,
+                  componentProps: {
+                    showTime: true,
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                    getPopupContainer: getAutoScrollContainer,
+                  },
+                  colProps: {
+                    span: 8,
+                  },
                 },
-              },
-              {
-                field: 'starttime_end',
-                label: '结束时间',
-                component: 'DatePicker',
-                defaultValue: dayjs(),
-                required: true,
-                componentProps: {
-                  showTime: true,
-                  valueFormat: 'YYYY-MM-DD HH:mm:ss',
-                  getPopupContainer: getAutoScrollContainer,
+                {
+                  label: '连接状态',
+                  field: 'status',
+                  component: 'Select',
+                  defaultValue: 1,
+                  componentProps: {
+                    options: [
+                      { label: '连接成功', value: 1 },
+                      { label: '连接失败', value: 0 },
+                    ],
+                  },
+                  colProps: {
+                    span: 8,
+                  },
                 },
-                colProps: {
-                  span: 8,
-                },
-              },
-              {
-                label: '连接状态',
-                field: 'status',
-                component: 'Select',
-                defaultValue: 1,
-                componentProps: {
-                  options: [
-                    { label: '连接成功', value: 1 },
-                    { label: '连接失败', value: 0 },
-                  ],
-                },
-                colProps: {
-                  span: 8,
-                },
-              },
-            ],
-    },
-    // fetchSetting: {
-    pagination: {
-      current: 1,
-      pageSize: 20,
-      pageSizeOptions: ['10', '30', '50', '100'],
-      showQuickJumper: false,
-    },
+              ],
+      },
+      // fetchSetting: {
+      pagination: {
+        current: 1,
+        pageSize: 20,
+        pageSizeOptions: ['10', '30', '50', '100'],
+        showQuickJumper: false,
+      },
 
-    beforeFetch() {
-      const newParams = { ...resetFormParam() };
-      // debugger;
-      return newParams;
+      beforeFetch() {
+        const newParams = { ...resetFormParam() };
+        // debugger;
+        return newParams;
+      },
+    },
+    exportConfig: {
+      name: '历史列表',
+      url: postExportXlsUrl,
     },
-  },
-  exportConfig: {
-    name: '历史列表',
-    url: postExportXlsUrl,
-  },
-});
+  });
 
-//注册table数据
-const [registerTable, { reload, setLoading, getForm, setColumns, getPaginationRef, setPagination }] = tableContext;
+  //注册table数据
+  const [registerTable, { reload, setLoading, getForm, setColumns, getPaginationRef, setPagination }] = tableContext;
 
-watchEffect(() => {
-  if (historyTable.value && dataSource) {
-    const data = dataSource.value || [];
-    emit('change', data);
-  }
-});
+  watchEffect(() => {
+    if (historyTable.value && dataSource) {
+      const data = dataSource.value || [];
+      emit('change', data);
+    }
+  });
 
-onMounted(async () => {
-  if (props.stationId) {
-    nextTick(async () => {
-      await getDataSource();
-    });
-  }
-});
-defineExpose({ setLoading });
+  onMounted(async () => {
+    if (props.stationId) {
+      nextTick(async () => {
+        await getDataSource();
+      });
+    }
+  });
+  defineExpose({ setLoading });
 </script>
 
 <style scoped lang="less">
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
 
-:deep(.@{ventSpace}-table-body) {
-  height: auto !important;
-}
-:deep(.zxm-picker) {
-  height: 30px !important;
-}
-.history-table {
-  width: 100%;
-  :deep(.jeecg-basic-table-form-container) {
-    .@{ventSpace}-form {
-      padding: 0 !important;
-      border: none !important;
-      margin-bottom: 0 !important;
-      .@{ventSpace}-picker,
-      .@{ventSpace}-select-selector {
-        width: 100% !important;
-        height: 100%;
-        background: #00000017;
-        border: 1px solid #b7b7b7;
-        input,
-        .@{ventSpace}-select-selection-item,
-        .@{ventSpace}-picker-suffix {
-          color: #fff;
-        }
-        .@{ventSpace}-select-selection-placeholder {
-          color: #ffffffaa;
-        }
-        .@{ventSpace}-zxm-select-selection-item {
-          color: #00000017 !important;
+  :deep(.@{ventSpace}-table-body) {
+    height: auto !important;
+  }
+  :deep(.zxm-picker) {
+    height: 30px !important;
+  }
+  .history-table {
+    width: 100%;
+    :deep(.jeecg-basic-table-form-container) {
+      .@{ventSpace}-form {
+        padding: 0 !important;
+        border: none !important;
+        margin-bottom: 0 !important;
+        .@{ventSpace}-picker,
+        .@{ventSpace}-select-selector {
+          width: 100% !important;
+          height: 100%;
+          background: #00000017;
+          border: 1px solid #b7b7b7;
+          input,
+          .@{ventSpace}-select-selection-item,
+          .@{ventSpace}-picker-suffix {
+            color: #fff;
+          }
+          .@{ventSpace}-select-selection-placeholder {
+            color: #ffffffaa;
+          }
+          .@{ventSpace}-zxm-select-selection-item {
+            color: #00000017 !important;
+          }
         }
       }
+      .@{ventSpace}-table-title {
+        min-height: 0 !important;
+      }
     }
-    .@{ventSpace}-table-title {
-      min-height: 0 !important;
-    }
-  }
-  .pagination-box {
-    display: flex;
-    justify-content: flex-end;
-    align-items: center;
-    .page-num {
-      border: 1px solid #0090d8;
-      padding: 4px 8px;
-      margin-right: 5px;
-      color: #0090d8;
-    }
-    .btn {
-      margin-right: 10px;
+    .pagination-box {
+      display: flex;
+      justify-content: flex-end;
+      align-items: center;
+      .page-num {
+        border: 1px solid #0090d8;
+        padding: 4px 8px;
+        margin-right: 5px;
+        color: #0090d8;
+      }
+      .btn {
+        margin-right: 10px;
+      }
     }
   }
-}
 </style>
 <style lang="less" scoped>
-:deep(.zxm-picker-dropdown) {
-  top: 50px !important;
-  left: 5px !important;
-}
+  :deep(.zxm-picker-dropdown) {
+    top: 50px !important;
+    left: 5px !important;
+  }
 </style>

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.