hongrunxia hace 1 mes
padre
commit
a6d41d74e7
Se han modificado 32 ficheros con 2523 adiciones y 1749 borrados
  1. BIN
      src/assets/images/home-container/configurable/board_bg_6.png
  2. BIN
      src/assets/images/home-container/configurable/list_bg_j.png
  3. 4 0
      src/design/vent/modal.less
  4. 10 6
      src/views/system/dict/components/DistrictTeam.vue
  5. 1 1
      src/views/vent/deviceManager/configurationTable/types.ts
  6. 2 2
      src/views/vent/dust/dustMonitorTable/dust-table.data.ts
  7. 6 1
      src/views/vent/gas/gasHome/gasHome.data.ts
  8. 5 1
      src/views/vent/gas/gasHome/index.vue
  9. 12 7
      src/views/vent/gas/gasInspect/gasInspect.data.ts
  10. 81 8
      src/views/vent/gas/gasInspect/index2.vue
  11. 5 0
      src/views/vent/gas/gasInspectNonfc/components/addressAdd2.vue
  12. 5 0
      src/views/vent/gas/gasInspectNonfc/components/inspectEdit2.vue
  13. 6 6
      src/views/vent/gas/gasInspectNonfc/gasInspectNonfc.data.ts
  14. 2 2
      src/views/vent/gas/gasInspectNonfc/index2.vue
  15. 100 0
      src/views/vent/gas/gasPipeNet/gasPipeNet.api.ts
  16. 186 0
      src/views/vent/gas/gasPipeNet/gasPipeNet.data.ts
  17. 65 0
      src/views/vent/gas/gasPipeNet/index.vue
  18. 6 6
      src/views/vent/gas/gasReport/gas-report.api.ts
  19. 14 14
      src/views/vent/gas/gasReport/gas-report.data.ts
  20. 250 187
      src/views/vent/gas/gasReport/index.vue
  21. 10 0
      src/views/vent/gas/gasVerify/gasPumpSetting.data.ts
  22. 36 27
      src/views/vent/gas/gasVerify/index.vue
  23. 21 0
      src/views/vent/home/configurable/components/detail/CustomList.vue
  24. 7 0
      src/views/vent/home/configurable/components/detail/MiniBoard.vue
  25. 1 2
      src/views/vent/monitorManager/alarmMonitor/common.data.ts
  26. 10 5
      src/views/vent/monitorManager/alarmMonitor/index.vue
  27. 1 1
      src/views/vent/monitorManager/alarmMonitor/warn/ventilateWarn.vue
  28. 72 0
      src/views/vent/monitorManager/comment/GasPipeTable.vue
  29. 1 1
      src/views/vent/monitorManager/deviceMonitor/components/device/device.data.ts
  30. 1568 1469
      src/views/vent/monitorManager/deviceMonitor/components/device/index.vue
  31. 4 3
      src/views/vent/safetyList/common/detail.vue
  32. 32 0
      src/views/vent/safetyList/safetyList.data.ts

BIN
src/assets/images/home-container/configurable/board_bg_6.png


BIN
src/assets/images/home-container/configurable/list_bg_j.png


+ 4 - 0
src/design/vent/modal.less

@@ -776,3 +776,7 @@
   top: 0 !important;
   left: 0 !important;
 }
+
+.@{ventSpace}-modal-confirm-body .@{ventSpace}-modal-confirm-content {
+  color: unset;
+}

+ 10 - 6
src/views/system/dict/components/DistrictTeam.vue

@@ -1,8 +1,9 @@
 <!-- eslint-disable vue/multi-word-component-names -->
+<!-- 该文件主要用于单独管理 所属区队 字典的内容 -->
 <template>
   <BasicTable @register="registerTable" :rowClassName="getRowClassName">
     <template #tableTitle>
-      <a-button type="primary" @click="handleCreate"> 新增</a-button>
+      <a-button type="primary" @click="handleCreate">新增</a-button>
     </template>
     <template #bodyCell="{ column, record }">
       <template v-if="column.dataIndex === 'action'">
@@ -13,13 +14,13 @@
   <DictItemModal @register="registerModal" @success="reload" :dictId="dictId" />
 </template>
 <script lang="ts" setup>
-  import { onMounted, ref, unref } from 'vue';
+  import { onMounted, ref } from 'vue';
   import { BasicTable, useTable, TableAction } from '/@/components/Table';
   import { useModal } from '/@/components/Modal';
   import { useDesign } from '/@/hooks/web/useDesign';
   import DictItemModal from './DictItemModal.vue';
   import { dictItemColumns, dictItemSearchFormSchema } from '../dict.data';
-  import { itemList, deleteItem } from '../dict.api';
+  import { itemList, deleteItem, list } from '../dict.api';
   import { ColEx } from '/@/components/Form/src/types';
 
   const { prefixCls } = useDesign('row-invalid');
@@ -119,9 +120,12 @@
   }
 
   onMounted(() => {
-    dictId.value = '1826791852479107073';
-    setProps({ searchInfo: { dictId: unref(dictId) } });
-    reload();
+    list({ dictCode: 'districtTeam' }).then((r) => {
+      if (!r.records.length) return;
+      dictId.value = r.records[0].id;
+      setProps({ searchInfo: { dictId: dictId.value } });
+      reload();
+    });
   });
 </script>
 <style scoped lang="less">

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

@@ -148,7 +148,7 @@ export interface ModuleDataBoard extends ReadFrom {
 
 export interface ModuleDataList extends ReadFrom {
   /** 列表预设的背景类型 */
-  type: 'timeline' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H';
+  type: 'timeline' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J';
   /** 是否需要根据数据来决定所展示的项目数量,需要确保 items 至少有一项,且 readFrom 指向数组 */
   mapFromData?: boolean;
   /** 核心配置,每个列表项对应一项 */

+ 2 - 2
src/views/vent/dust/dustMonitorTable/dust-table.data.ts

@@ -920,8 +920,8 @@ export const Hlgcolumns = [
   },
   {
     title: '测尘地点',
-    dataIndex: 'ccdd',
-    key: 'ccdd',
+    dataIndex: 'jcdd',
+    key: 'jcdd',
     width: 150,
     align: 'center',
   },

+ 6 - 1
src/views/vent/gas/gasHome/gasHome.data.ts

@@ -11,7 +11,7 @@ export const navList = ref([
     isHover: false,
   },
   {
-    title: '抽采管路',
+    title: '管网监控',
     pathName: 'gasPiping',
     isHover: false,
   },
@@ -20,6 +20,11 @@ export const navList = ref([
     pathName: 'gasAlarm',
     isHover: false,
   },
+  {
+    title: '钻孔设计',
+    pathName: 'drillDesign',
+    isHover: false,
+  },
 ]);
 
 export const sysInfo = [

+ 5 - 1
src/views/vent/gas/gasHome/index.vue

@@ -34,13 +34,17 @@
       window.open(newPage.href, '_blank');
     }
     if (activeValue == 'gasPiping') {
-      const newPage = router.resolve({ path: '/micro-vent-3dModal/dashboard/analysis', query: { type: 'sysMonitor', deviceType: 'pipingpage' } });
+      const newPage = router.resolve({ path: '/gas-pipe-net/home' });
       window.open(newPage.href, '_blank');
     }
     if (activeValue == 'gasAlarm') {
       const newPage = router.resolve({ path: '/gas/warn/home?p=0' });
       window.open(newPage.href, '_blank');
     }
+    if (activeValue == 'drillDesign') {
+      const newPage = router.resolve({ path: '/gas-pipe-net/home' });
+      window.open(newPage.href, '_blank');
+    }
   }
 
   const headerBadges = ref([

+ 12 - 7
src/views/vent/gas/gasInspect/gasInspect.data.ts

@@ -1,4 +1,3 @@
-import { getAllUserInfo } from './gasInspect.api';
 import { BasicColumn, FormSchema } from '/@/components/Table';
 
 export const columns: BasicColumn[] = [
@@ -230,8 +229,8 @@ export const taskColumns: BasicColumn[] = [
   // },
   {
     title: '所属区队',
-    dataIndex: 'districtTeam',
-    key: 'districtTeam',
+    dataIndex: 'teamCode_dictText',
+    key: 'teamCode_dictText',
     align: 'center',
   },
   {
@@ -253,9 +252,9 @@ export const taskColumns: BasicColumn[] = [
     align: 'center',
   },
   {
-    title: '创建人',
-    dataIndex: 'createBy',
-    key: 'createBy',
+    title: '巡检人',
+    dataIndex: 'checkPerson',
+    key: 'checkPerson',
     align: 'center',
   },
   {
@@ -264,6 +263,12 @@ export const taskColumns: BasicColumn[] = [
     key: 'createTime',
     align: 'center',
   },
+  {
+    title: '任务日期',
+    dataIndex: 'taskTime',
+    key: 'taskTime',
+    align: 'center',
+  },
 ];
 
 export const taskschemas: FormSchema[] = [
@@ -321,7 +326,7 @@ export const taskschemas: FormSchema[] = [
   },
   {
     label: '所属区队',
-    field: 'districtTeam',
+    field: 'teamCode',
     component: 'JDictSelectTag',
     componentProps: {
       dictCode: 'districtTeam',

+ 81 - 8
src/views/vent/gas/gasInspect/index2.vue

@@ -3,10 +3,12 @@
   <div class="gasReport">
     <customHeader>瓦斯巡检任务管理</customHeader>
     <div class="report-container">
-      <a-space class="search-area">
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleEdit">新增任务</a-button>
-      </a-space>
       <BasicTable @register="registerTable1">
+        <template #tableTitle>
+          <a-space>
+            <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleEdit">新增任务</a-button>
+          </a-space>
+        </template>
         <template #action="{ record }">
           <a class="table-action-link" @click="handleManage(record)">管理</a>
           <a class="table-action-link" @click="handleDetail(record)">详情</a>
@@ -84,16 +86,47 @@
   import { deleteTeam, getManageTasklist, operateGasCheckTaskDetail, taskDetailsList, teamAdd, teamEdit, teamList } from './gasInspect.api';
   import { BasicTable } from '/@/components/Table';
   import { useListPage } from '/@/hooks/system/useListPage';
-  import { message } from 'ant-design-vue';
+  import { Modal, message } from 'ant-design-vue';
   import { BasicModal, useModal } from '/@/components/Modal';
   import { BasicForm, useForm } from '/@/components/Form';
+  import dayjs from 'dayjs';
 
   // 任务列表
+  const searchParams1 = ref<any>({ deviceName: '' });
   const { tableContext: tx1 } = useListPage({
     tableProps: {
       api: teamList,
+      beforeFetch: (params) => {
+        Object.assign(params, searchParams1.value);
+      },
       columns: taskColumns,
       pagination,
+      formConfig: {
+        labelAlign: 'left',
+        labelWidth: 80,
+        compact: true,
+        schemas: [
+          {
+            label: '日期',
+            field: 'taskTime',
+            component: 'DatePicker',
+            defaultValue: dayjs(),
+            componentProps: {
+              showTime: false,
+              valueFormat: 'YYYY-MM-DD',
+              // getPopupContainer: getAutoScrollContainer,
+            },
+          },
+          {
+            label: '所属区队',
+            field: 'teamCode',
+            component: 'JDictSelectTag',
+            componentProps: {
+              dictCode: 'districtTeam',
+            },
+          },
+        ],
+      },
       actionColumn: {
         title: '操作',
         dataIndex: 'action',
@@ -102,7 +135,7 @@
         slots: { customRender: 'action' },
       },
       showTableSetting: false,
-      useSearchForm: false,
+      useSearchForm: true,
     },
     pagination: true,
   });
@@ -115,6 +148,7 @@
         Object.assign(params, {
           ...searchParams2.value,
           taskId: selectedRow.value.id,
+          taskTime: selectedRow.value.taskTime,
         });
       },
       columns: taskDetailsColumns,
@@ -134,6 +168,7 @@
         Object.assign(params, {
           ...searchParams3.value,
           taskId: selectedRow.value.id,
+          taskTime: selectedRow.value.taskTime,
         });
       },
       afterFetch(resultItems) {
@@ -205,9 +240,44 @@
 
   // 关联明细
   function handlePatch(mode) {
+    // 过滤已选择条目,关联至其他任务的已经无法选中所以不做处理,关联至本任务的无法再添加,未关联的无法删除
+    const addedRows = selectedRows.value.filter((e) => {
+      return e.isSelect === true;
+    });
+    const otherRows = selectedRows.value.filter((e) => {
+      return e.isSelect === false;
+    });
+
+    if (mode === 'add' && addedRows.length) {
+      Modal.confirm({
+        title: '确认',
+        content: '您选择的条目含有已关联项,是否继续添加其他未关联项?',
+        okText: '确认',
+        cancelText: '取消',
+        onOk() {
+          patchConfirmHandler(otherRows, mode);
+        },
+      });
+    } else if (mode === 'del' && otherRows.length) {
+      Modal.confirm({
+        title: '确认',
+        content: '您选择的条目含有未关联项,是否继续删除其他已关联项?',
+        okText: '确认',
+        cancelText: '取消',
+        onOk() {
+          patchConfirmHandler(addedRows, mode);
+        },
+      });
+    } else {
+      patchConfirmHandler(selectedRows.value, mode);
+    }
+  }
+
+  function patchConfirmHandler(rows, mode) {
     operateGasCheckTaskDetail({
       taskId: selectedRow.value.id,
-      operateList: selectedRows.value.map((e) => {
+      taskTime: selectedRow.value.taskTime,
+      operateList: rows.map((e) => {
         return {
           deviceId: e.deviceId, //设备id(巡检地址id)
           checkNum: e.checkNum, //巡检次数
@@ -242,12 +312,15 @@
 </script>
 
 <style lang="less" scoped>
+  @import '/@/design/theme.less';
+
   .gasReport {
     width: 100%;
     height: 100%;
     padding: 80px 10px 15px 10px;
     box-sizing: border-box;
     position: relative;
+    color: var(--vent-font-color);
 
     .search-area {
       margin: 20px 0px;
@@ -257,7 +330,7 @@
         align-items: center;
 
         .item-text {
-          color: #fff;
+          color: var(--vent-font-color);
         }
       }
     }
@@ -278,7 +351,7 @@
     .zxm-input {
       border: 1px solid #3ad8ff77 !important;
       background-color: #ffffff00 !important;
-      color: #fff !important;
+      color: var(--vent-font-color) !important;
     }
   }
 </style>

+ 5 - 0
src/views/vent/gas/gasInspectNonfc/components/addressAdd2.vue

@@ -13,6 +13,9 @@
       <a-form-item label="是否有传感器:">
         <a-checkbox v-model:checked="formAddress.isSensor" style="width: 220px" />
       </a-form-item>
+      <a-form-item label="排序:">
+        <a-input v-model:value="formAddress.orderNum" style="width: 220px" />
+      </a-form-item>
     </a-form>
     <div class="edit-btn">
       <a-button @click="cancelAddress">取消</a-button>
@@ -30,6 +33,7 @@
     strremark: '',
     strinstallpos: '',
     isSensor: false,
+    orderNum: '',
   });
   let $emit = defineEmits(['confirmAddress', 'cancelAddress']);
 
@@ -47,6 +51,7 @@
       strremark: '',
       strinstallpos: '',
       isSensor: false,
+      orderNum: '',
     };
     $emit('cancelAddress');
   };

+ 5 - 0
src/views/vent/gas/gasInspectNonfc/components/inspectEdit2.vue

@@ -16,6 +16,9 @@
       <a-form-item label="是否有传感器:">
         <a-checkbox v-model:checked="formStateEdit.isSensor" style="width: 220px" />
       </a-form-item>
+      <a-form-item label="排序:">
+        <a-input v-model:value="formStateEdit.orderNum" style="width: 220px" />
+      </a-form-item>
     </a-form>
     <div class="edit-btn">
       <a-button @click="cancelEdit">取消</a-button>
@@ -44,6 +47,7 @@
     isSensor: false,
     disTeamId: '',
     insType: '',
+    orderNum: '',
   });
 
   let qdList = ref<any[]>([]); //区队下拉选项列表
@@ -76,6 +80,7 @@
       isSensor: false,
       disTeamId: '',
       insType: '',
+      orderNum: '',
     };
     $emit('cancelEdit');
   };

+ 6 - 6
src/views/vent/gas/gasInspectNonfc/gasInspectNonfc.data.ts

@@ -196,12 +196,12 @@ export const columns2: BasicColumn[] = [
     key: 'isSensor',
     align: 'center',
   },
-  // {
-  //   title: '创建人',
-  //   dataIndex: 'createBy',
-  //   key: 'createBy',
-  //   align: 'center',
-  // },
+  {
+    title: '排序',
+    dataIndex: 'orderNum',
+    key: 'orderNum',
+    align: 'center',
+  },
   // {
   //   title: '创建日期',
   //   dataIndex: 'createTime',

+ 2 - 2
src/views/vent/gas/gasInspectNonfc/index2.vue

@@ -35,6 +35,8 @@
           <a-popconfirm title="删除内容无法恢复,是否删除" ok-text="确定" cancel-text="取消" @confirm="handleDelCardInfo(record)">
             <a class="table-action-link">删除</a>
           </a-popconfirm>
+          <a class="table-action-link" @click="moveUp(record)">上移</a>
+          <a class="table-action-link" @click="moveDown(record)">下移</a>
         </template>
         <template #bodyCell="{ column, text }">
           <template v-if="column.dataIndex == 'isSensor'">
@@ -234,7 +236,6 @@
   //列表上移
   async function moveUp(param) {
     let res = await moveOrderNum({ id: param.id, moveType: 'upp' });
-    console.log(res, '向上移动');
     if (res) {
       queryByIdList();
     }
@@ -242,7 +243,6 @@
   //列表下移
   async function moveDown(param) {
     let res = await moveOrderNum({ id: param.id, moveType: 'bel' });
-    console.log(res, '向下移动');
     if (res) {
       queryByIdList();
     }

+ 100 - 0
src/views/vent/gas/gasPipeNet/gasPipeNet.api.ts

@@ -0,0 +1,100 @@
+import { defHttp } from '/@/utils/http/axios';
+
+enum Api {
+  addGasMainApproval = '/ventanaly-jingtaifengliang/productionApprovalController/addGasMainApproval',
+  addGasMainpipesystem = '/ventanaly-jingtaifengliang/productionApprovalController/addGasMainpipesystem',
+  addGasPumpstation = '/ventanaly-jingtaifengliang/productionApprovalController/addGasPumpstation',
+  deleteGasMain = '/ventanaly-jingtaifengliang/productionApprovalController/deleteGasMain',
+  deleteGasMainpipesystem = '/ventanaly-jingtaifengliang/productionApprovalController/deleteGasMainpipesystem',
+  deleteGasPumpstation = '/ventanaly-jingtaifengliang/productionApprovalController/deleteGasPumpstation',
+  getGasMainAllInfo = '/ventanaly-jingtaifengliang/productionApprovalController/getGasMainAllInfo',
+  getGasMainpipesystemAllInfo = '/ventanaly-jingtaifengliang/productionApprovalController/getGasMainpipesystemAllInfo',
+  getGasPumpstationAllInfo = '/ventanaly-jingtaifengliang/productionApprovalController/getGasPumpstationAllInfo',
+  updateGasMain = '/ventanaly-jingtaifengliang/productionApprovalController/updateGasMain',
+  updateGasMainpipesystem = '/ventanaly-jingtaifengliang/productionApprovalController/updateGasMainpipesystem',
+  updateGasPumpstation = '/ventanaly-jingtaifengliang/productionApprovalController/updateGasPumpstation',
+}
+
+// const addGasMainApproval = (data) => {
+//   return defHttp.post({
+//     url: Api.addGasMainApproval,
+//     params: data,
+//   });
+// };
+
+// const addGasMainpipesystem = (data) => {
+//   return defHttp.post({
+//     url: Api.addGasMainpipesystem,
+//     params: data,
+//   });
+// };
+
+// const addGasPumpstation = (data) => {
+//   return defHttp.post({
+//     url: Api.addGasPumpstation,
+//     params: data,
+//   });
+// };
+
+export const deleteGasMain = (data) => {
+  return defHttp.post({
+    url: Api.deleteGasMain,
+    params: data,
+  });
+};
+
+export const deleteGasMainpipesystem = (data) => {
+  return defHttp.post({
+    url: Api.deleteGasMainpipesystem,
+    params: data,
+  });
+};
+
+export const deleteGasPumpstation = (data) => {
+  return defHttp.post({
+    url: Api.deleteGasPumpstation,
+    params: data,
+  });
+};
+
+export const getGasMainAllInfo = (data) => {
+  return defHttp.post({
+    url: Api.getGasMainAllInfo,
+    params: data,
+  });
+};
+
+export const getGasMainpipesystemAllInfo = (data) => {
+  return defHttp.post({
+    url: Api.getGasMainpipesystemAllInfo,
+    params: data,
+  });
+};
+
+export const getGasPumpstationAllInfo = (data) => {
+  return defHttp.post({
+    url: Api.getGasPumpstationAllInfo,
+    params: data,
+  });
+};
+
+export const updateGasMain = (data) => {
+  return defHttp.post({
+    url: data.id ? Api.updateGasMain : Api.addGasMainApproval,
+    params: data,
+  });
+};
+
+export const updateGasMainpipesystem = (data) => {
+  return defHttp.post({
+    url: data.id ? Api.updateGasMainpipesystem : Api.addGasMainpipesystem,
+    params: data,
+  });
+};
+
+export const updateGasPumpstation = (data) => {
+  return defHttp.post({
+    url: data.id ? Api.updateGasPumpstation : Api.addGasPumpstation,
+    params: data,
+  });
+};

+ 186 - 0
src/views/vent/gas/gasPipeNet/gasPipeNet.data.ts

@@ -0,0 +1,186 @@
+import { Config } from '../../deviceManager/configurationTable/types';
+
+/** 模块配置项,为了快速开发使用了可配置首页的组件 */
+export const moduleConfigs: Config[] = [
+  {
+    deviceType: '',
+    moduleName: '抽采泵',
+    pageType: '',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'image',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '50%',
+          },
+          {
+            name: 'list',
+            basis: '50%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'I',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '电压(kV)',
+              value: '${flow_merge}',
+            },
+            {
+              label: '电流(A)',
+              value: '${fy_merge}',
+            },
+            {
+              label: '功率(kW)',
+              value: '${leakage}',
+            },
+            {
+              label: '频率(Hz)',
+              value: '${leakage}',
+            },
+          ],
+        },
+      ],
+      list: [
+        {
+          type: 'J',
+          readFrom: '',
+          items: [
+            {
+              label: '阀门1开度',
+              value: '${flow_merge}',
+              color: 'blue',
+            },
+            {
+              label: '阀门2开度',
+              value: '${flow_merge}',
+              color: 'blue',
+            },
+            {
+              label: '阀门3开度',
+              value: '${flow_merge}',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '',
+    },
+    showStyle: {
+      size: 'width:344px;height:490px;',
+      version: '原版',
+      position: 'top:80px;left:10px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '视频1',
+    pageType: '',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/fanLocal.webm',
+      },
+      layout: {
+        direction: 'column',
+        items: [],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '',
+    },
+    showStyle: {
+      size: 'width:344px;height:240px;',
+      version: '原版',
+      position: 'top:80px;right:10px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '视频2',
+    pageType: '',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/fanLocal.webm',
+      },
+      layout: {
+        direction: 'column',
+        items: [],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '',
+    },
+    showStyle: {
+      size: 'width:344px;height:240px;',
+      version: '原版',
+      position: 'top:330px;right:10px;',
+    },
+  },
+];

+ 65 - 0
src/views/vent/gas/gasPipeNet/index.vue

@@ -0,0 +1,65 @@
+<!-- eslint-disable vue/multi-word-component-names -->
+<template>
+  <div class="gas-pipe-net">
+    <CustomHeader> 瓦斯管网监控系统 </CustomHeader>
+    <div style="width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 0">
+      <VentModal />
+    </div>
+
+    <div class="scene-box">
+      <div class="top-box">
+        <!-- <VentBox1 class="flex-3"> 123123123 </VentBox1>
+        <VentBox1 class="flex-1"> 123123123 </VentBox1> -->
+      </div>
+
+      <ModuleCommon
+        v-for="cfg in moduleConfigs"
+        :key="cfg.deviceType"
+        :show-style="cfg.showStyle"
+        :module-data="cfg.moduleData"
+        :module-name="cfg.moduleName"
+        :device-type="cfg.deviceType"
+        :data="{}"
+        :visible="true"
+      />
+
+      <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 175, scroll, 0)">
+        <DvBorderBox8 class="dv_border_8 p-5px" :dur="5" :style="{ height: `${scroll.y + 128}px` }">
+          <a-tabs class="tabs-box" v-model:activeKey="activeKey">
+            <a-tab-pane key="1" tab="瓦斯管道监测"> <GasPipeTable :deviceType="deviceType" :dataSource="[]" :scroll="scroll" /> </a-tab-pane>
+            <!-- <a-tab-pane key="2" tab="瓦斯网络解算" disabled> 1212312312313321 </a-tab-pane> -->
+            <a-tab-pane key="3" tab="管道阀门监控"> <GasPipeTable :deviceType="deviceType" :dataSource="[]" :scroll="scroll" /> </a-tab-pane>
+          </a-tabs>
+        </DvBorderBox8>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+  import CustomHeader from '/@/components/vent/customHeader.vue';
+  import { setDivHeight } from '/@/utils/event';
+  import { ref } from 'vue';
+  import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
+  import ModuleCommon from '../../home/configurable/components/ModuleCommon.vue';
+  import { moduleConfigs } from './gasPipeNet.data';
+  import GasPipeTable from '../../monitorManager/comment/GasPipeTable.vue';
+  import VentModal from '/@/components/vent/micro/ventModal.vue';
+
+  const scroll = ref<{ x: true; y: number }>({ x: true, y: 202 });
+  const activeKey = ref('1');
+  const deviceType = 'gaspipe';
+</script>
+
+<style scoped lang="less">
+  @import '/@/design/theme.less';
+  @import '/@/design/vent/modal.less';
+
+  @{theme-deepblue} {
+    .gas-pipe-net {
+    }
+  }
+
+  .gas-pipe-net {
+  }
+</style>

+ 6 - 6
src/views/vent/gas/gasReport/gas-report.api.ts

@@ -4,8 +4,8 @@ enum Api {
   getGasAddressList = '/safety/gasDayReport/getGasAddressList',
   getList = '/safety/gasDayReport/list',
   expComReportByParam = '/safety/reportInfo/expComReportByParam',
-  reviewPass='/safety/gasDayReport/reviewPass',
-  getIsReviewPass='/safety/gasDayReport/getIsReviewPass'
+  reviewPass = '/safety/gasDayReport/reviewPass',
+  getIsReviewPass = '/safety/gasDayReport/getIsReviewPass',
 }
 /**
  * 获取瓦斯日报区队,检测地点下拉选项
@@ -26,11 +26,11 @@ export const getList = (params) => defHttp.get({ url: Api.getList, params });
 export const expComReportByParam = (params) => defHttp.post({ url: Api.expComReportByParam, params, responseType: 'blob' });
 /**
  * 审核通过
- * @param params 
+ * @param params
  */
-export const reviewPass = (params) => defHttp.post({ url: Api.reviewPass,params });
+export const reviewPass = (params) => defHttp.post({ url: Api.reviewPass, params });
 /**
  * 判断是否已审核通过
- * @param params 
+ * @param params
  */
-export const getIsReviewPass = (params) => defHttp.post({ url: Api.getIsReviewPass,params });
+export const getIsReviewPass = (params) => defHttp.post({ url: Api.getIsReviewPass, params });

+ 14 - 14
src/views/vent/gas/gasReport/gas-report.data.ts

@@ -199,13 +199,13 @@ export const columns: BasicColumn[] = [
           {
             title: '第一次',
             children: [
-              {
-                title: '煤层',
-                dataIndex: 'coalseam_dictText',
-                key: 'coalseam_dictText',
-                width: 100,
-                align: 'center',
-              },
+              // {
+              //   title: '煤层',
+              //   dataIndex: 'coalseam_dictText',
+              //   key: 'coalseam_dictText',
+              //   width: 100,
+              //   align: 'center',
+              // },
               {
                 title: '检测地点',
                 dataIndex: 'strInstallPos',
@@ -389,13 +389,13 @@ export const columns: BasicColumn[] = [
           {
             title: '第一次',
             children: [
-              {
-                title: '煤层',
-                dataIndex: 'coalseam_dictText',
-                key: 'coalseam_dictText',
-                width: 100,
-                align: 'center',
-              },
+              // {
+              //   title: '煤层',
+              //   dataIndex: 'coalseam_dictText',
+              //   key: 'coalseam_dictText',
+              //   width: 100,
+              //   align: 'center',
+              // },
               {
                 title: '检测地点',
                 dataIndex: 'strInstallPos',

+ 250 - 187
src/views/vent/gas/gasReport/index.vue

@@ -7,14 +7,8 @@
           <a-col :span="4">
             <div class="area-item">
               <div class="item-text">填报日期:</div>
-              <a-date-picker
-                style="width: 220px"
-                :showTime="false"
-                valueFormat="YYYY-MM-DD"
-                v-model:value="searchData.reportTime"
-                placeholder="请选择填报日期"
-                @change="onChange"
-              />
+              <a-date-picker style="width: 220px" :showTime="false" valueFormat="YYYY-MM-DD"
+                v-model:value="searchData.reportTime" placeholder="请选择填报日期" @change="onChange" />
             </div>
           </a-col>
           <!-- <a-col :span="4">
@@ -29,24 +23,28 @@
           <a-col :span="4">
             <div class="area-item">
               <div class="item-text">检查工:</div>
-              <a-input style="width: 220px" v-model:value="searchData.sbr" placeholder="请输入上报人" />
+              <a-input style="width: 220px" v-model:value="searchData.sbr" placeholder="请输入检查工" />
             </div>
           </a-col>
           <a-col :span="4">
             <div class="area-item">
               <div class="item-text">上报地点:</div>
               <a-select v-model:value="searchData.strInstallPos" style="width: 220px" placeholder="请选择上报地点">
-                <a-select-option v-for="item in addressList" :key="item" :value="item.value">{{ item.label }}</a-select-option>
+                <a-select-option v-for="item in addressList" :key="item" :value="item.value">{{ item.label
+                }}</a-select-option>
               </a-select>
             </div>
           </a-col>
 
           <a-button type="primary" preIcon="ant-design:search-outlined" @click="getSearch">查询</a-button>
           <a-button preIcon="ant-design:sync-outlined" style="margin: 0px 10px" @click="onReset">重置</a-button>
-          <a-button type="primary" preIcon="ant-design:check-circle-outlined" style="margin-right: 10px" @click="getPassSh">审核通过</a-button>
+          <a-button type="primary" preIcon="ant-design:check-circle-outlined" style="margin-right: 10px"
+            @click="getPassSh">审核通过</a-button>
           <a-button type="primary" preIcon="ant-design:download-outlined" @click="getExport">导出日报表</a-button>
-          <a-button type="primary" preIcon="ant-design:download-outlined" @click="getExport1" style="margin: 0px 10px">导出瓦斯三对照报表</a-button>
-          <a-button type="primary" preIcon="ant-design:download-outlined" @click="getExport2" style="margin-right: 10px">导出瓦斯检查小票</a-button>
+          <a-button type="primary" preIcon="ant-design:download-outlined" @click="getExport1"
+            style="margin: 0px 10px">导出瓦斯三对照报表</a-button>
+          <a-button type="primary" preIcon="ant-design:download-outlined" @click="getExport2"
+            style="margin-right: 10px">导出瓦斯检查小票</a-button>
           <a-button type="primary" preIcon="ant-design:download-outlined" @click="handleMenuClick">导出班报表</a-button>
           <!-- <a-dropdown>
             <template #overlay>
@@ -74,104 +72,137 @@
 </a-dropdown> -->
         </a-row>
       </div>
-      <a-table
-        :columns="columns"
-        :data-source="tableData"
-        size="small"
-        :scroll="{ y: 500 }"
-        class="tableW"
-        :pagination="pagination"
-        @change="pageChange"
-      >
-        <template #bodyCell="{ column, text }"></template>
+      <a-table :columns="columns" :data-source="tableData" size="small" :scroll="{ y: 500 }" class="tableW"
+        :pagination="pagination" @change="pageChange">
+        <template #bodyCell="{ column, text }">
+          <template
+            v-if="column.dataIndex == 'o2Night1' || column.dataIndex == 'o2Night2' || column.dataIndex == 'o2Early1' || column.dataIndex == 'o2Early2' || column.dataIndex == 'o2Noon1' || column.dataIndex == 'o2Noon2'">
+            <div :style="{ color: Number(text) >= 18 && Number(text) <= 20.9 ? '#0ae715' : '#ff2313' }">{{ text }}
+            </div>
+          </template>
+          <template
+            v-if="column.dataIndex == 'coNight1' || column.dataIndex == 'coNight2' || column.dataIndex == 'coEarly1' || column.dataIndex == 'coEarly2' || column.dataIndex == 'coNoon1' || column.dataIndex == 'coNoon2'">
+            <div :style="{ color: Number(text) >= 0 && Number(text) <= 23 ? '#0ae715' : '#ff2313' }">{{ text }}</div>
+          </template>
+          <template
+            v-if="column.dataIndex == 'tNight1' || column.dataIndex == 'tNight2' || column.dataIndex == 'tEarly1' || column.dataIndex == 'tEarly2' || column.dataIndex == 'tNoon1' || column.dataIndex == 'tNoon2'">
+            <div :style="{ color: Number(text) >= 3 && Number(text) <= 25 ? '#0ae715' : '#ff2313' }">{{ text }}</div>
+          </template>
+          <template
+            v-if="column.dataIndex == 'co2Night1' || column.dataIndex == 'co2Night2' || column.dataIndex == 'co2Early1' || column.dataIndex == 'co2Early2' || column.dataIndex == 'co2Noon1' || column.dataIndex == 'co2Noon2'">
+            <div :style="{ color: Number(text) >= 0.04 && Number(text) <= 0.1 ? '#0ae715' : '#ff2313' }">{{ text }}
+            </div>
+          </template>
+          <template
+            v-if="column.dataIndex == 'ch4Night1' || column.dataIndex == 'ch4Night2' || column.dataIndex == 'ch4Early1' || column.dataIndex == 'ch4Early2' || column.dataIndex == 'ch4Noon1' || column.dataIndex == 'ch4Noon2'">
+            <div :style="{ color: Number(text) >= 0 && Number(text) <= 0.1 ? '#0ae715' : '#ff2313' }">{{ text }}</div>
+          </template>
+
+        </template>
       </a-table>
     </div>
   </div>
 </template>
 
 <script setup lang="ts">
-  import { ref, onMounted, computed, reactive } from 'vue';
-  import { columns } from './gas-report.data';
-  import { getGasAddressList, getList, expComReportByParam, reviewPass, getIsReviewPass } from './gas-report.api';
-  import customHeader from '/@/components/vent/customHeader.vue';
-  import { message } from 'ant-design-vue';
-  import dayjs from 'dayjs';
+import { ref, onMounted, computed, reactive } from 'vue';
+import { columns } from './gas-report.data';
+import { getGasAddressList, getList, expComReportByParam, reviewPass, getIsReviewPass } from './gas-report.api';
+import customHeader from '/@/components/vent/customHeader.vue';
+import { message } from 'ant-design-vue';
+import dayjs from 'dayjs';
 
-  let searchData = reactive({
-    reportTime: dayjs().format('YYYY-MM-DD'),
-    districtTeam: '',
-    sbr: '',
-    strInstallPos: '',
-  });
-  let qdList = reactive<any[]>([]); //区队下拉列表
-  let addressList = reactive<any[]>([]); //上报地点下拉列表
-  let pagination = reactive({
-    current: 1, // 当前页码
-    pageSize: 10, // 每页显示条数
-    total: 0, // 总条目数,后端返回
-    // showTotal: (total, range) => `${range[0]}-${range[1]} 条,总共 ${total} 条`, // 分页右下角显示信息
-    showSizeChanger: true, // 是否可改变每页显示条数
-    pageSizeOptions: ['10', '20', '50'], // 可选的每页显示条数
-  });
-  let tableData = ref<any[]>([]);
 
-  function onChange(val, time) {
-    searchData.reportTime = time;
-  }
-  //获取日报列表数据
-  async function getTableList() {
-    let res = await getList({ pageNo: pagination.current, pageSize: pagination.pageSize, ...searchData });
-    tableData.value = res.records;
-    pagination.total = res.total;
-  }
-  //查询
-  function getSearch() {
-    pagination.current = 1;
-    getTableList();
-  }
-  //重置
-  function onReset() {
-    pagination.current = 1;
-    searchData.districtTeam = '';
-    searchData.reportTime = '';
-    searchData.strInstallPos = '';
-    searchData.sbr = '';
-    getTableList();
-  }
-  //分页切换
-  function pageChange(val) {
-    pagination.current = val.current;
-    pagination.pageSize = val.pageSize;
-    getTableList();
-  }
-  function uniqueObjectsArray(arr) {
-    const map = new Map();
-    return arr.filter((item) => {
-      const key = JSON.stringify(item);
-      const isNew = !map.has(key);
-      map.set(key, item);
-      return isNew;
+
+let searchData = reactive({
+  reportTime: dayjs().format('YYYY-MM-DD'),
+  districtTeam: '',
+  sbr: '',
+  strInstallPos: '',
+});
+let qdList = reactive<any[]>([]); //区队下拉列表
+let addressList = reactive<any[]>([]); //上报地点下拉列表
+let pagination = reactive({
+  current: 1, // 当前页码
+  pageSize: 10, // 每页显示条数
+  total: 0, // 总条目数,后端返回
+  // showTotal: (total, range) => `${range[0]}-${range[1]} 条,总共 ${total} 条`, // 分页右下角显示信息
+  showSizeChanger: true, // 是否可改变每页显示条数
+  pageSizeOptions: ['10', '20', '50'], // 可选的每页显示条数
+});
+let tableData = ref<any[]>([]);
+
+function onChange(val, time) {
+  searchData.reportTime = time;
+}
+//获取日报列表数据
+async function getTableList() {
+  let res = await getList({ pageNo: pagination.current, pageSize: pagination.pageSize, ...searchData });
+  console.log(res, '瓦斯日报列表数据-----------');
+  res.records.forEach(el => {
+    el.jwSdzNight1 = el.jwSdzNight1 != null ? el.jwSdzNight1 : '-'
+    el.jwSdzNight2 = el.jwSdzNight2 != null ? el.jwSdzNight2 : '-'
+    el.jwSdzEarly1 = el.jwSdzEarly1 != null ? el.jwSdzEarly1 : '-'
+    el.jwSdzEarly2 = el.jwSdzEarly2 != null ? el.jwSdzEarly2 : '-'
+    el.jwSdzNoon1 = el.jwSdzNoon1 != null ? el.jwSdzNoon1 : '-'
+    el.jwSdzNoon2 = el.jwSdzNoon2 != null ? el.jwSdzNoon2 : '-'
+  })
+  tableData.value = res.records;
+  pagination.total = res.total;
+}
+//查询
+function getSearch() {
+  pagination.current = 1;
+  getTableList();
+}
+//重置
+function onReset() {
+  pagination.current = 1;
+  searchData.districtTeam = '';
+  searchData.reportTime = '';
+  searchData.strInstallPos = '';
+  searchData.sbr = '';
+  getTableList();
+}
+//分页切换
+function pageChange(val) {
+  pagination.current = val.current;
+  pagination.pageSize = val.pageSize;
+  getTableList();
+}
+function uniqueObjectsArray(arr) {
+  const map = new Map();
+  return arr.filter((item) => {
+    const key = JSON.stringify(item);
+    const isNew = !map.has(key);
+    map.set(key, item);
+    return isNew;
+  });
+}
+//获取安装位置下拉选项
+async function getSelectList() {
+  let res = await getGasAddressList({ coalseam: '', devicekind: 'gasDayReport' });
+  console.log(res, '区队下拉选项--------');
+  qdList.length = 0;
+  addressList.length = 0;
+  if (res.length != 0) {
+    res.forEach((el) => {
+      qdList.push({ label: el.devgroup_dictText, value: el.devgroup_dictText });
+      addressList.push({ label: el.strinstallpos, value: el.strinstallpos });
     });
+    qdList = uniqueObjectsArray(qdList);
   }
-  //获取安装位置下拉选项
-  async function getSelectList() {
-    let res = await getGasAddressList({ coalseam: '', devicekind: 'gasDayReport' });
-    qdList.length = 0;
-    addressList.length = 0;
-    if (res.length != 0) {
-      res.forEach((el) => {
-        qdList.push({ label: el.devgroup_dictText, value: el.devgroup_dictText });
-        addressList.push({ label: el.strinstallpos, value: el.strinstallpos });
-      });
-      qdList = uniqueObjectsArray(qdList);
-    }
-  }
-  //导出报表
-  async function getExport() {
+}
+//导出报表
+async function getExport() {
+  if (getTs()) {
+    message.warning('数据异常!');
+  } else {
     if (searchData.reportTime) {
-      let data = await getIsReviewPass({ reportTime: searchData.reportTime });
+      let data = await getIsReviewPass({ reportTime: searchData.reportTime })
       if (data == '已审核通过!') {
         let res = await expComReportByParam({ tempName: 'wsrb', reportTime: searchData.reportTime });
+        console.log(res, '导出------------');
         let filename = searchData.reportTime + '.xlsx';
         downFilePublic(res, filename);
       }
@@ -179,118 +210,150 @@
       message.warning('请选择需要导出数据的填报日期!');
     }
   }
-  //导出三对照报表
-  async function getExport1() {
-    if (searchData.reportTime) {
-      let res = await expComReportByParam({ tempName: 'wssdz', reportTime: searchData.reportTime });
-      let filename = searchData.reportTime + '.xlsx';
-      downFilePublic(res, filename);
-    } else {
-      message.warning('请选择需要导出数据的填报日期!');
-    }
+
+
+}
+//导出三对照报表
+async function getExport1() {
+  if (searchData.reportTime) {
+    let res = await expComReportByParam({ tempName: 'wssdz', reportTime: searchData.reportTime });
+    console.log(res, '导出------------');
+    let filename = searchData.reportTime + '.xlsx';
+    downFilePublic(res, filename);
+  } else {
+    message.warning('请选择需要导出数据的填报日期!');
   }
-  //导出瓦斯检查小票
-  async function getExport2() {
-    if (searchData.reportTime && searchData.sbr) {
-      let res = await expComReportByParam({ tempName: 'wsjcxp', reportTime: searchData.reportTime, checkName: searchData.sbr });
-      let filename = searchData.reportTime + '.xlsx';
-      downFilePublic(res, filename);
-    } else if (!searchData.reportTime) {
-      message.warning('请选择需要导出数据的填报日期!');
-    } else if (!searchData.sbr) {
-      message.warning('请输入上报人名称!');
-    }
+}
+//导出瓦斯检查小票
+async function getExport2() {
+  if (searchData.reportTime && searchData.sbr) {
+    let res = await expComReportByParam({ tempName: 'wsjcxp', reportTime: searchData.reportTime, checkName: searchData.sbr });
+    console.log(res, '导出------------');
+    let filename = searchData.reportTime + '.xlsx';
+    downFilePublic(res, filename);
+  } else if (!searchData.reportTime) {
+    message.warning('请选择需要导出数据的填报日期!');
+  } else if (!searchData.sbr) {
+    message.warning('请输入上报人名称!');
   }
+}
 
-  // 下载公用方法
-  function downFilePublic(content, fileName) {
-    const blob = new Blob([content], { type: 'application/xlsx;charset=UTF-8' }); // 构造一个blob对象来处理数据
-    // 对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性
-    // IE10以上支持blob但是依然不支持download
-    if ('download' in document.createElement('a')) {
-      // 支持a标签download的浏览器
-      const link = document.createElement('a'); // 创建a标签
-      link.download = fileName; // a标签添加属性
-      link.style.display = 'none';
-      link.href = URL.createObjectURL(blob);
-      document.body.appendChild(link);
-      link.click(); // 执行下载
-      URL.revokeObjectURL(link.href); // 释放url
-      document.body.removeChild(link); // 释放标签
+function getTs() {
+  let param = true
+  tableData.value.forEach(el => {
+    if ((Number(el.o2Night1) >= 18 && Number(el.o2Night1) <= 20.9) && (Number(el.o2Night2) >= 18 && Number(el.o2Night2) <= 20.9) && (Number(el.o2Early1) >= 18 && Number(el.o2Early1) <= 20.9) && (Number(el.o2Early2) >= 18 && Number(el.o2Early2) <= 20.9) && (Number(el.o2Noon1) >= 18 && Number(el.o2Noon1) <= 20.9) && (Number(el.o2Noon2) >= 18 && Number(el.o2Noon2) <= 20.9)) {
+      param = false
+    } else if ((Number(el.coNight1) >= 0 && Number(el.coNight1) <= 23) && (Number(el.coNight2) >= 0 && Number(el.coNight2) <= 23) && (Number(el.coEarly1) >= 0 && Number(el.coEarly1) <= 23) && (Number(el.coEarly2) >= 0 && Number(el.coEarly2) <= 23) && (Number(el.coNoon1) >= 0 && Number(el.coNoon1) <= 23) && (Number(el.coNoon2) >= 0 && Number(el.coNoon2) <= 23)) {
+      param = false
+    } else if ((Number(el.co2Night1) >= 0.04 && Number(el.co2Night1) <= 0.1) && (Number(el.co2Night2) >= 0.04 && Number(el.co2Night2) <= 0.1) && (Number(el.co2Early1) >= 0.04 && Number(el.co2Early1) <= 0.1) && (Number(el.co2Early2) >= 0.04 && Number(el.co2Early2) <= 0.1) && (Number(el.co2Noon1) >= 0.04 && Number(el.co2Noon1) <= 0.1) && (Number(el.co2Noon2) >= 0.04 && Number(el.co2Noon2) <= 0.1)) {
+      param = false
+    } else if ((Number(el.tNight1) >= 3 && Number(el.tNight1) <= 25) && (Number(el.tNight2) >= 3 && Number(el.tNight2) <= 25) && (Number(el.tEarly1) >= 3 && Number(el.tEarly1) <= 25) && (Number(el.tEarly2) >= 3 && Number(el.tEarly2) <= 25) && (Number(el.tNoon1) >= 3 && Number(el.tNoon1) <= 25) && (Number(el.tNoon2) >= 3 && Number(el.tNoon2) <= 25)) {
+      param = false
+    } else if ((Number(el.ch4Night1) >= 0 && Number(el.ch4Night1) <= 0.1) && (Number(el.ch4Night2) >= 0 && Number(el.ch4Night2) <= 0.1) && (Number(el.ch4Early1) >= 0 && Number(el.ch4Early1) <= 0.1) && (Number(el.ch4Early2) >= 0 && Number(el.ch4Early2) <= 0.1) && (Number(el.ch4Noon1) >= 0 && Number(el.ch4Noon1) <= 0.1) && (Number(el.ch4Noon2) >= 0 && Number(el.ch4Noon2) <= 0.1)) {
+      param = false
     } else {
-      // 其他浏览器
-      navigator.msSaveBlob(blob, fileName);
+      param = true
+      return
     }
-  }
-  //导出瓦斯班报表
-  async function handleMenuClick(val) {
-    if (searchData.reportTime) {
-      let res = await expComReportByParam({ tempName: 'wsrbshb', reportTime: searchData.reportTime });
-      let filename = searchData.reportTime + '.xlsx';
-      downFilePublic(res, filename);
-    } else {
-      message.warning('请选择需要导出数据的填报日期!');
-    }
-  }
-  //审核通过
-  async function getPassSh() {
-    let res = await reviewPass({ reportTime: searchData.reportTime });
+  })
+  return param
+}
+
+//审核通过
+async function getPassSh() {
+  if (getTs()) {
+    message.warning('数据异常!');
+  } else {
+    let res = await reviewPass({ reportTime: searchData.reportTime })
+    console.log(res, '审核通过')
     if (res) {
       getTableList();
     }
   }
+}
 
-  onMounted(() => {
-    getSelectList();
-    getTableList();
-  });
+// 下载公用方法
+function downFilePublic(content, fileName) {
+  const blob = new Blob([content], { type: 'application/xlsx;charset=UTF-8' }); // 构造一个blob对象来处理数据
+  // 对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性
+  // IE10以上支持blob但是依然不支持download
+  if ('download' in document.createElement('a')) {
+    // 支持a标签download的浏览器
+    const link = document.createElement('a'); // 创建a标签
+    link.download = fileName; // a标签添加属性
+    link.style.display = 'none';
+    link.href = URL.createObjectURL(blob);
+    document.body.appendChild(link);
+    link.click(); // 执行下载
+    URL.revokeObjectURL(link.href); // 释放url
+    document.body.removeChild(link); // 释放标签
+  } else {
+    // 其他浏览器
+    navigator.msSaveBlob(blob, fileName);
+  }
+}
+//导出瓦斯班报表
+async function handleMenuClick(val) {
+  if (searchData.reportTime) {
+    let res = await expComReportByParam({ tempName: 'wsrbshb', reportTime: searchData.reportTime });
+    let filename = searchData.reportTime + '.xlsx';
+    downFilePublic(res, filename);
+  } else {
+    message.warning('请选择需要导出数据的填报日期!');
+  }
+}
+
+onMounted(() => {
+  getSelectList();
+  getTableList();
+});
 </script>
 
 <style lang="less" scoped>
-  @import '/@/design/theme.less';
+@import '/@/design/theme.less';
 
-  .gasReport {
-    width: 100%;
-    height: 100%;
-    padding: 80px 10px 15px 10px;
-    box-sizing: border-box;
-    position: relative;
+.gasReport {
+  width: 100%;
+  height: 100%;
+  padding: 80px 10px 15px 10px;
+  box-sizing: border-box;
+  position: relative;
 
-    .search-area {
-      margin: 20px 0px;
+  .search-area {
+    margin: 20px 0px;
 
-      .area-item {
-        display: flex;
-        align-items: center;
+    .area-item {
+      display: flex;
+      align-items: center;
 
-        .item-text {
-          color: #fff;
-        }
+      .item-text {
+        color: #fff;
       }
     }
-
-    .zxm-picker,
-    .zxm-input {
-      border: 1px solid var(--vent-form-item-border) !important;
-      background-color: #ffffff00 !important;
-      color: #fff !important;
-    }
-  }
-
-  :deep(.zxm-table-thead > tr > th:last-child) {
-    border-right: 1px solid #91e9fe !important;
   }
 
-  :deep(.zxm-picker-input > input) {
-    color: #fff;
-  }
-
-  :deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
+  .zxm-picker,
+  .zxm-input {
     border: 1px solid var(--vent-form-item-border) !important;
     background-color: #ffffff00 !important;
-  }
-
-  :deep(.zxm-select-selection-item) {
     color: #fff !important;
   }
+}
+
+:deep(.zxm-table-thead > tr > th:last-child) {
+  border-right: 1px solid #91e9fe !important;
+}
+
+:deep(.zxm-picker-input > input) {
+  color: #fff;
+}
+
+:deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
+  border: 1px solid var(--vent-form-item-border) !important;
+  background-color: #ffffff00 !important;
+}
+
+:deep(.zxm-select-selection-item) {
+  color: #fff !important;
+}
 </style>

+ 10 - 0
src/views/vent/gas/gasVerify/gasPumpSetting.data.ts

@@ -168,6 +168,11 @@ export const pipeFormSchema: FormSchema[] = [
     field: 'averagegasconcentrationc2',
     component: 'Input',
   },
+  {
+    label: '年均运行负压Pb(kPa)',
+    field: 'annualaveragenegativepressurepb',
+    component: 'Input',
+  },
 ];
 
 /** 装机能力核定表单 */
@@ -283,6 +288,11 @@ export const pipeTableColumns: BasicColumn[] = [
     key: 'averagegasconcentrationc2',
   },
   {
+    title: '年均运行负压Pb(kPa)',
+    dataIndex: 'annualaveragenegativepressurepb',
+    key: 'annualaveragenegativepressurepb',
+  },
+  {
     width: 120,
     title: '操作',
     fixed: false,

+ 36 - 27
src/views/vent/gas/gasVerify/index.vue

@@ -3,14 +3,14 @@
   <div class="gas-verify">
     <CustomHeader> 瓦斯抽采达标能力核定 </CustomHeader>
     <div class="flex mt-90px">
-      <div class="nav-l"> 瓦斯抽采达标生产能力:{{ data.gasExtractionSystemCapacityResultLarge }} t/a </div>
+      <div class="nav-l"> 瓦斯抽采达标生产能力:{{ floor(data.gasExtractionSystemCapacityResultLarge, 2) }} t/a </div>
       <div class="nav">
         <Tabs v-model:active-key="actived" :tabBarStyle="{ color: 'red' }">
           <TabPane key="product" tab="矿井瓦斯抽采达标生产能力核定" />
           <TabPane key="extract" tab="矿井瓦斯抽采能力核定" />
         </Tabs>
       </div>
-      <div class="nav-r"> 瓦斯抽采能力:{{ data.gasExtractionSystemCapacityResultSmall }} m<sup>3</sup>/min </div>
+      <div class="nav-r"> 瓦斯抽采能力:{{ floor(data.gasExtractionSystemCapacityResultSmall, 2) }} m<sup>3</sup>/min </div>
     </div>
     <div class="flex">
       <div :style="{ flex: 1 }">
@@ -31,14 +31,18 @@
         </div>
         <div v-show="actived === 'product'">
           <div class="flex flex-justify-between flex-items-center">
-            <FormTitle class="flex-grow-1" icon="pump" :title="`根据矿井实际抽采瓦斯量核定:${data.gasExtractionVolumeVerificationTotal}`" />
+            <FormTitle
+              class="flex-grow-1"
+              icon="pump"
+              :title="`根据矿井实际抽采瓦斯量核定:${floor(data.gasExtractionVolumeVerificationTotal, 2)}`"
+            />
             <Button type="primary" @click="submitGasvalForm">提交</Button>
           </div>
           <BasicForm :schemas="valFormSchema" @register="regGasvalForm" />
         </div>
         <div v-show="actived === 'product'">
           <div class="flex flex-justify-between flex-items-center">
-            <FormTitle class="flex-grow-1" icon="pump" :title="`根据矿井瓦斯抽采率核定:${data.gasExtractionRateVerificationTotal}`" />
+            <FormTitle class="flex-grow-1" icon="pump" :title="`根据矿井瓦斯抽采率核定:${floor(data.gasExtractionRateVerificationTotal, 2)}`" />
             <Button class="mr-10px" @click="calculateGasrateForm">计算</Button>
             <Button type="primary" @click="submitGasrateForm">提交</Button>
           </div>
@@ -57,8 +61,8 @@
             class="flex-grow-1"
             :title="
               {
-                extract: `按瓦斯抽采泵站装机能力核定:${data.gasExtractionPumpStationCapacitySmall}`,
-                product: `按矿井瓦斯抽采泵站装机能力核定:${data.gasExtractionMainPipelineCapacityLarge}`,
+                extract: `按瓦斯抽采泵站装机能力核定:${floor(data.gasExtractionPumpStationCapacitySmall, 2)}`,
+                product: `按矿井瓦斯抽采泵站装机能力核定:${floor(data.gasExtractionPumpStationCapacityLarge, 2)}`,
               }[actived]
             "
           />
@@ -76,8 +80,8 @@
             class="flex-grow-1"
             :title="
               {
-                extract: `按矿井瓦斯主管道系统能力核定:${data.gasExtractionMainPipelineCapacitySmall}`,
-                product: `按矿井瓦斯抽采主管道系统能力核定:${data.gasExtractionMainPipelineCapacityLarge}`,
+                extract: `按矿井瓦斯主管道系统能力核定:${floor(data.gasExtractionMainPipelineCapacitySmall, 2)}`,
+                product: `按矿井瓦斯抽采主管道系统能力核定:${floor(data.gasExtractionMainPipelineCapacityLarge, 2)}`,
               }[actived]
             "
           />
@@ -138,7 +142,7 @@
   } from './gasPumpSetting.data';
   import { BasicTable, useTable } from '/@/components/Table';
   import { BasicModal, useModal } from '/@/components/Modal';
-  import { get, inRange, isNil } from 'lodash-es';
+  import { get, inRange, floor } from 'lodash-es';
 
   const actived = ref<'extract' | 'product'>('product');
 
@@ -155,12 +159,13 @@
     const data1 = ctxBasicForm.getFieldsValue();
     const data2 = ctxGasvalForm.getFieldsValue();
     const data3 = ctxGasrateForm.getFieldsValue();
-    const airVolumeStr = get(data1, 'returnAirVolume', []).join(',');
     updateGasMain({
       ...data3,
       ...data2,
       ...data1,
-      returnAirVolume: airVolumeStr,
+      returnAirVolume: get(data.value, 'returnAirVolume', [])
+        .filter((e) => Boolean(e))
+        .join(','),
     })
       .then(() => {
         message.success('提交成功');
@@ -179,14 +184,13 @@
   }
   /** 计算部分可以自动计算的参数 */
   function calculateBasicForm() {
-    const { returnAirVolume } = data.value;
     const { mineGasExtractionRate } = ctxBasicForm.getFieldsValue();
-    if (returnAirVolume && Array.isArray(returnAirVolume)) {
-      const airVolumeArr = returnAirVolume.map((e) => parseFloat(e));
-      ctxBasicForm.setFieldsValue({
-        mineMaxTotalReturnAirVolume: airVolumeArr.reduce((t, n) => t + n, 0),
-      });
-    }
+    const airVolumeArr = get(data.value, 'returnAirVolume', [])
+      .filter((e) => Boolean(e))
+      .map((e) => parseFloat(e));
+    ctxBasicForm.setFieldsValue({
+      mineMaxTotalReturnAirVolume: airVolumeArr.reduce((t, n) => t + n, 0),
+    });
     // 根据抽采率生成总回瓦斯浓度
     if (mineGasExtractionRate) {
       const n = parseInt(mineGasExtractionRate);
@@ -260,8 +264,7 @@
 
   /** 矿井基本信息的表单配置,需要动态添加回风井。根据表单数据设置矿井基本信息的表单配置 */
   function resetPublicFormSchema() {
-    const airVolumeArr = data.value.returnAirVolume;
-    const extra: FormSchema[] = airVolumeArr.map((num, inx) => {
+    const extra: FormSchema[] = data.value.returnAirVolume.map((num, inx) => {
       return {
         label: `回风井${inx + 1}`,
         field: `__${inx + 1}`,
@@ -269,7 +272,7 @@
         component: 'Input',
         componentProps: {
           onChange: ({ target }) => {
-            airVolumeArr[inx] = target.value;
+            data.value.returnAirVolume[inx] = target.value;
           },
         },
       };
@@ -279,7 +282,7 @@
   /** 添加一项公用参数表单项 */
   function addPubFormSchema() {
     if (!data.value.returnAirVolume) return;
-    data.value.returnAirVolume.push('0');
+    data.value.returnAirVolume.push('');
     resetPublicFormSchema();
   }
 
@@ -376,9 +379,15 @@
     Promise.all([getGasMainAllInfo({}), getGasMainpipesystemAllInfo({}), getGasPumpstationAllInfo({})]).then((res) => {
       const [r1, r2, r3] = res.map((e) => e.obj);
       r1[0].returnAirVolume = r1[0].returnAirVolume.split(',');
-      ctxBasicForm.setFieldsValue(r1[0]);
-      ctxGasvalForm.setFieldsValue(r1[0]);
-      ctxGasrateForm.setFieldsValue(r1[0]);
+      ctxBasicForm.resetFields().then(() => {
+        ctxBasicForm.setFieldsValue(r1[0]);
+      });
+      ctxGasvalForm.resetFields().then(() => {
+        ctxGasvalForm.setFieldsValue(r1[0]);
+      });
+      ctxGasrateForm.resetFields().then(() => {
+        ctxGasrateForm.setFieldsValue(r1[0]);
+      });
       pipeTableData.value = r2;
       pumpTableData.value = r3;
       data.value = r1[0];
@@ -414,8 +423,8 @@
   });
   const extractChartData = computed(() => {
     const keyMap = {
-      extract: ['gasExtractionPumpStationCapacitySmall', 'gasExtractionMainPipelineCapacitySmall'],
-      product: ['gasExtractionMainPipelineCapacityLarge', 'gasExtractionMainPipelineCapacityLarge'],
+      extract: ['gasExtractionPumpStationCapacitySmall', 'gasExtractionPumpStationCapacityLarge'],
+      product: ['gasExtractionMainPipelineCapacitySmall', 'gasExtractionMainPipelineCapacityLarge'],
     };
     return [
       {

+ 21 - 0
src/views/vent/home/configurable/components/detail/CustomList.vue

@@ -73,6 +73,7 @@
     --image-list: url(/@/assets/images/home-container/configurable/firehome/list.png);
     --image-list_bg_h: url(/@/assets/images/home-container/configurable/list_bg_h.png);
     --image-list_bg_i: url('/@/assets/images/home-container/configurable/list_bg_i.png');
+    --image-list_bg_j: url('/@/assets/images/home-container/configurable/list_bg_j.png');
     padding: 5px 20px;
     position: relative;
     background-repeat: no-repeat;
@@ -322,6 +323,26 @@
     position: absolute;
     font-size: 18px;
   }
+  .list_J {
+    background: unset;
+    padding: 0 5px 0 10px;
+  }
+  .list-item_J {
+    width: 312px;
+    height: 57px;
+    align-items: center;
+    text-align: center;
+    background-image: var(--image-list_bg_j);
+    background-repeat: no-repeat;
+    background-size: auto 100%;
+    margin: 5px 10px;
+  }
+  .list-item__content_J {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0 20px 0 15px;
+  }
 
   .list-item__label {
     flex-basis: 55%;

+ 7 - 0
src/views/vent/home/configurable/components/detail/MiniBoard.vue

@@ -94,6 +94,7 @@
     --image-board_bg_2: url('/@/assets/images/home-container/configurable/board_bg_2.png');
     --image-board_bg_5: url('/@/assets/images/home-container/configurable/board_bg_5.png');
     --image-board_bg_4: url('/@/assets/images/home-container/configurable/board_bg_4.png');
+    --image-board_bg_6: url('/@/assets/images/home-container/configurable/board_bg_6.png');
 
     --image-hycd: url(/@/assets/images/home-container/configurable/dusthome/hycd.png);
     --image-dyfl: url(/@/assets/images/home-container/configurable/dusthome/dyfl.png);
@@ -167,6 +168,12 @@
     background-repeat: no-repeat;
     padding: 45px 0 0 0;
   }
+  .mini-board_I {
+    width: 139px;
+    height: 67px;
+    background-image: var(--image-board_bg_6);
+    background-size: 100% 100%;
+  }
 
   .mini-board__value_A {
     color: @vent-gas-primary-text;

+ 1 - 2
src/views/vent/monitorManager/alarmMonitor/common.data.ts

@@ -167,11 +167,10 @@ export function getMonitorComponent() {
       return typeMenuListGas;
     default:
       typeMenuListGas = [{ name: '预警监测' }, { name: '预警指标' }];
-      // typeMenuListGas = [{ name: '预警监测' }, { name: '管道故障诊断' }, { name: '预警指标' }];
       return typeMenuListGas;
   }
 }
-//瓦斯监测菜单列表
+
 export function getMonitorFlag() {
   const { sysOrgCode } = useGlobSetting();
   let typeFlag = '';

+ 10 - 5
src/views/vent/monitorManager/alarmMonitor/index.vue

@@ -5,7 +5,7 @@
       <ventBox1>
         <template #title>
           <div v-if="showToggle == 'all'" class="icon-toggle" @click="handlerToggle">
-            <img v-if="monitor" src="@/assets/images/vent/monitor-toggle.png" alt="" />
+            <img v-if="!monitor" src="@/assets/images/vent/monitor-toggle.png" alt="" />
             <img v-else src="@/assets/images/vent/report-toggle.png" alt="" />
           </div>
           <div class="monitor-title" @click="showModal('vent')">通风监测预警</div>
@@ -451,6 +451,8 @@ let handlerToggle = () => {
   monitor.value = !monitor.value;
   windData.jf = monitor.value ?  toggleData.ventInfo.totalIntM3 : toggleData.ventInfo.zongjinfeng ;
   windData.hf = monitor.value ?  toggleData.ventInfo.totalRetM3: toggleData.ventInfo.zonghuifeng ;
+  windData.levels =monitor.value ? Object.assign({},{alarm:0,blue:0,orange:0,red:0,yellow:0}) :  toggleData.info.sysInfo.ventS.levels;
+  windData.levels['blue'] = warnNumMap.get('vent');
 };
 //风险等级点击
 let warnGradeClick = () => {
@@ -501,19 +503,22 @@ async function getList() {
   console.log(res, '预警数据--------------');
   fireMonitor1.length = 0;
   toggleData = Object.assign({}, res);
-  windData.levels = res.info.sysInfo.ventS.levels;
-  windData.levels['blue'] = warnNumMap.get('vent');
+
   if (showToggle.value == 'monitor') {
     windData.jf = res.ventInfo.zongjinfeng;
     windData.hf = res.ventInfo.zonghuifeng;
+    windData.levels = res.info.sysInfo.ventS.levels;
+    windData.levels['blue'] = warnNumMap.get('vent');
   } else if (showToggle.value == 'report') {
     windData.jf = res.ventInfo.totalIntM3;
     windData.hf = res.ventInfo.totalRetM3;
+    windData.levels =Object.assign({},{alarm:0,blue:0,orange:0,red:0,yellow:0});
+    windData.levels['blue'] = warnNumMap.get('vent');
   } else {
-    // windData.jf = monitor.value ? res.ventInfo.zongjinfeng : res.ventInfo.totalIntM3;
-    // windData.hf = monitor.value ? res.ventInfo.zonghuifeng : res.ventInfo.totalRetM3;
     windData.jf = res.ventInfo.totalIntM3;
     windData.hf = res.ventInfo.totalRetM3;
+    windData.levels =Object.assign({},{alarm:0,blue:0,orange:0,red:0,yellow:0});
+    windData.levels['blue'] = warnNumMap.get('vent');
   }
   windData.xf = res.ventInfo.xufengliang;
   dustData.levels = res.info.sysInfo.dustS.levels;

+ 1 - 1
src/views/vent/monitorManager/alarmMonitor/warn/ventilateWarn.vue

@@ -2,7 +2,7 @@
   <customHeader :options="options" @change="getSelectRow" :optionValue="optionValue"> 通风监测预警 </customHeader>
   <div class="ventilateWarn">
     <div v-if="showToggle == 'all'" class="icon-toggle" @click="handlerToggle">
-      <img v-if="monitor" src="@/assets/images/vent/monitor-toggle.png" alt="" />
+      <img v-if="!monitor" src="@/assets/images/vent/monitor-toggle.png" alt="" />
       <img v-else src="@/assets/images/vent/report-toggle.png" alt="" />
     </div>
     <div class="ventilate-top">

+ 72 - 0
src/views/vent/monitorManager/comment/GasPipeTable.vue

@@ -0,0 +1,72 @@
+<template>
+  <MonitorTable
+    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="[
+          {
+            label: '啥来着?',
+            onClick: (e) => deviceEdit(e, 'reportInfo', record),
+          },
+          {
+            label: '定位',
+            onClick: () => $emit('locate', record),
+          },
+        ]"
+      />
+    </template>
+    <template #filterCell="{ column, record }">
+      <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>
+        <a-tag v-else-if="record.warnLevel == '103'" color="#FF5812">较大风险</a-tag>
+        <a-tag v-else-if="record.warnLevel == '104'" color="#FF5812">重大风险</a-tag>
+        <a-tag v-else-if="record.warnLevel == '201'" color="#FF0000">报警</a-tag>
+        <a-tag v-else-if="record.warnLevel == '10000'" color="#FF5812">数据超限</a-tag>
+        <a-tag v-else-if="record.warnLevel == '1001'" color="default">网络中断</a-tag>
+        <a-tag v-else color="green">正常</a-tag>
+      </template>
+      <a-tag v-if="column.dataIndex === 'netStatus'" :color="record.netStatus == '0' ? '#f00' : 'green'">
+        {{ record.netStatus == '0' ? '断开' : '连接' }}
+      </a-tag>
+    </template>
+  </MonitorTable>
+  <DeviceBaseInfo @register="registerModal" :device-type="deviceType" />
+</template>
+
+<script lang="ts" setup>
+  import MonitorTable from './MonitorTable.vue';
+  import DeviceBaseInfo from './components/DeviceBaseInfo.vue';
+  import { TableAction } from '/@/components/Table';
+  import { useModal } from '/@/components/Modal';
+  //   import { ref } from 'vue';
+
+  defineProps<{
+    deviceType: string;
+    dataSource: any[];
+    scroll: { y: number };
+  }>();
+
+  defineEmits(['locate']);
+
+  const [registerModal, { openModal }] = useModal();
+
+  function deviceEdit(e: Event, type: string, record) {
+    e.stopPropagation();
+    openModal(true, {
+      type,
+      deviceId: record['deviceID'],
+    });
+  }
+</script>

+ 1 - 1
src/views/vent/monitorManager/deviceMonitor/components/device/device.data.ts

@@ -75,7 +75,7 @@ export function getMonitorComponent() {
       FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.sw.vue'));
       break;
     default:
-      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.hlg.vue'));
+      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.vue'));
     // FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.sw.vue'));
     // FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.vue'));
     // FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal-Gx.vue'));

+ 1568 - 1469
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>
@@ -19,14 +23,15 @@
     <div v-if="deviceType.startsWith('gasDay_normal') && activeKey == '1'" class="inspect-info-xj">
       <gasInspectDialog :gasSearch="gasSearch"></gasInspectDialog>
     </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" />
@@ -50,8 +55,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>
@@ -59,12 +69,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>
@@ -125,7 +139,11 @@
           <FullscreenExitOutlined style="font-size: 18px" />
         </div>
         <!-- 是人员定位表单代码,由于放在tab中,表格对已知刷新,导致表单数据也在刷寻,造成输入一半的中文时会清空输入框的内容,导致的输入不上数据 -->
-        <div v-if="(deviceType.startsWith('location') || deviceType.startsWith('vehicle')) && activeKey == '1'" class="location-form" style="position: absolute; z-index: 9999; top: 50px">
+        <div
+          v-if="(deviceType.startsWith('location') || deviceType.startsWith('vehicle')) && activeKey == '1'"
+          class="location-form"
+          style="position: absolute; z-index: 9999; top: 50px"
+        >
           <div class="location-form-item">
             <span class="location-form-label">{{ deviceType.startsWith('location') ? '人员名称:' : '车辆名称' }}</span>
             <Input style="width: 200px" v-model:value="locationForm.strname" />
@@ -147,68 +165,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>
@@ -224,16 +265,27 @@
               </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 v-if="!noLocationList.includes('location')" #action="{ record }">
-                  <TableAction :actions="[
-                    {
-                      label: '定位',
-                      onClick: goLocation.bind(null, record),
-                    },
-                  ]" />
+                  <TableAction
+                    :actions="[
+                      {
+                        label: '定位',
+                        onClick: goLocation.bind(null, record),
+                      },
+                    ]"
+                  />
                 </template>
               </MonitorTable>
             </template>
@@ -251,12 +303,14 @@
                 style="margin-top: 60px"
               >
                 <template v-if="!noLocationList.includes('location')" #action="{ record }">
-                  <TableAction :actions="[
-                    {
-                      label: '定位',
-                      onClick: goLocation.bind(null, record),
-                    },
-                  ]" />
+                  <TableAction
+                    :actions="[
+                      {
+                        label: '定位',
+                        onClick: goLocation.bind(null, record),
+                      },
+                    ]"
+                  />
                 </template>
               </MonitorTable>
             </template>
@@ -306,12 +360,10 @@
               <gaspatrolTable ref="gaspatrol" @getSearch="getSearch" @locate="goLocation"> </gaspatrolTable>
             </template>
             <!-- 瓦斯日报 -->
-            <template
-              v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode != 'sdmtjtbetmk'">
+            <template v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode != 'sdmtjtbetmk'">
               <gasReport ref="gasreport" @locate="goLocation"> </gasReport>
             </template>
-            <template
-              v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode == 'sdmtjtbetmk'">
+            <template v-else-if="deviceType.startsWith('gasDayReport') && activeKey == '1' && glob.sysOrgCode == 'sdmtjtbetmk'">
               <gasReportCount ref="gasreportcount" @locate="goLocation"> </gasReportCount>
             </template>
             <!-- 粉尘监测报表-->
@@ -331,72 +383,105 @@
             <template v-else-if="deviceType.startsWith('substation_normal') && activeKey == '1'">
               <stationTable ref="station" @locate="goLocation" @stationDetail="stationDetail"> </stationTable>
             </template>
+            <!-- 瓦斯管网 -->
+            <template v-else-if="deviceType.startsWith('gaspipe') && activeKey == '1'">
+              <GasPipeTable :dataSource="dataSource" :deviceType="deviceType" :scroll="scroll" @locate="goLocation" />
+            </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>
@@ -405,14 +490,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>
@@ -430,19 +514,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>
@@ -479,8 +560,14 @@
                   :device-type="deviceType" designScope="device-history" :scroll="scroll" />
               </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>
@@ -499,1520 +586,1532 @@
           </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 } from './device.api';
-import AlarmHistoryTable from '../../../comment/AlarmHistoryTable.vue';
-import HistoryTable from '../../../comment/HistoryTable.vue';
-import HistoryTableNew from '/@/views/vent/comment/history/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 gasInspectDialog from '../../../comment/gasInspectDialog.vue';
-import DustingTable from '../../../comment/DustingTable.vue';
-import bundleSpyMonitorTable from '../../../comment/bundleSpyMonitorTable.vue';
-import HistoryTableMajorPath from './modal/HistoryTableMajorPath.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,
-  haveHistoryEcharts,
-  noLocationArr,
-} 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 DeviceEcharts from '../../../comment/DeviceEcharts.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';
-
-type DeviceType = { deviceType: string; deviceName: string; datalist: any[] };
-const glob = useGlobSetting();
-// import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
-
-const { FiberModal, BundleModal, DustModal, BallvalveModal, AtomizingModal, GaspatrolModal, WisdomBallModal } = getMonitorComponent();
-
-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();
-const locationForm = reactive({
-  strname: '',
-  department: '',
-  stationname: '',
-});
-const noLocationList = noLocationArr();
-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 gaspatrol = ref(null);
-let gasreport = ref(null);
-let gasreportcount = ref(null);
-let station = ref(null);
-let gasSearch = reactive({
-  address: '',
-  userName: '',
-  insType: '2',
-  class: 'night',
-});
-//树形菜单选择事件
-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);
+  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 } from './device.api';
+  import AlarmHistoryTable from '../../../comment/AlarmHistoryTable.vue';
+  import HistoryTable from '../../../comment/HistoryTable.vue';
+  import HistoryTableNew from '/@/views/vent/comment/history/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 gasInspectDialog from '../../../comment/gasInspectDialog.vue';
+  import DustingTable from '../../../comment/DustingTable.vue';
+  import bundleSpyMonitorTable from '../../../comment/bundleSpyMonitorTable.vue';
+  import GasPipeTable from '../../../comment/GasPipeTable.vue';
+  import HistoryTableMajorPath from './modal/HistoryTableMajorPath.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,
+    noLocationArr,
+  } 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';
+
+  type DeviceType = { deviceType: string; deviceName: string; datalist: any[] };
+  const glob = useGlobSetting();
+  // import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
+
+  const { FiberModal, BundleModal, DustModal, BallvalveModal, AtomizingModal, GaspatrolModal, WisdomBallModal } = getMonitorComponent();
+
+  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();
+  const locationForm = reactive({
+    strname: '',
+    department: '',
+    stationname: '',
+  });
+  const noLocationList = noLocationArr();
+  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 gaspatrol = ref(null);
+  let gasreport = ref(null);
+  let gasreportcount = ref(null);
+  let station = ref(null);
+  let gasSearch = reactive({
+    address: '',
+    userName: '',
+    insType: '2',
+    class: 'night',
+  });
+  //树形菜单选择事件
+  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) {
-    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') && gaspatrol.value) {
-            gaspatrol.value.queryNowGasInsInfoList(); //人工瓦斯巡检
-          } else if (deviceType.value.startsWith('gasDayReport')) {
-            if (glob.sysOrgCode == 'sdmtjtbetmk') {
-              gasreportcount.value.getSearchReport();
-            } else {
-              gasreport.value.getSearchReport(); //瓦斯日报
+
+  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'];
             }
-          } else if (deviceType.value.startsWith('substation') && station.value) {
-            //分站
-            station.value.getStationList();
+
+            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];
+  // 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') && gaspatrol.value) {
+              gaspatrol.value.queryNowGasInsInfoList(); //人工瓦斯巡检
+            } else if (deviceType.value.startsWith('gasDayReport')) {
+              if (glob.sysOrgCode == 'sdmtjtbetmk') {
+                gasreportcount.value.getSearchReport();
               } else {
-                dataSource.value = data;
-                console.log('关联设备数据--------------->', data);
+                gasreport.value.getSearchReport(); //瓦斯日报
               }
-              return;
+            } else if (deviceType.value.startsWith('substation') && station.value) {
+              //分站
+              station.value.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 });
+      }
     }
   }
-}
-function getSearch(param) {
-  gasSearch.address = param.address,
-    gasSearch.userName = param.userName,
-    gasSearch.insType = param.insType,
-    gasSearch.class = param.class
-}
-// 详情跳转
-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.startsWith('door')) {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-firedoor', query: { id: activeID.value, deviceType: deviceType.value } });
-      window.open(newPage.href, '_blank');
-    } 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 if (deviceType.value.indexOf('gasmonitor') != -1) {
-      const newPage = router.resolve({ path: '/gas/warn/home' });
-      window.open(newPage.href, '_blank');
-    } 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');
-    } else if (deviceType.value.indexOf('gasDay_normal') != -1) {
-      const newPage = router.resolve({ path: '/gas/gas-report-inspect/home' });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('gasDayReport') != -1) {
-      const newPage = router.resolve({ path: '/gas/gasDayReport/home' });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('dustDayReport') != -1) {
-      const newPage = router.resolve({ path: '/dustDayReport/home' });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('bundleDayReport') != -1) {
-      const newPage = router.resolve({ path: '/bundleDayReport/home' });
-      window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('bundleSpyDayReport') != -1) {
-      const newPage = router.resolve({ path: '/bundleSpyDayReport/home' });
-      window.open(newPage.href, '_blank');
+  function getSearch(param) {
+    (gasSearch.address = param.address), (gasSearch.userName = param.userName), (gasSearch.insType = param.insType), (gasSearch.class = param.class);
+  }
+  // 详情跳转
+  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.startsWith('door')) {
+        const newPage = router.resolve({ path: '/monitorChannel/monitor-firedoor', query: { id: activeID.value, deviceType: deviceType.value } });
+        window.open(newPage.href, '_blank');
+      } 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 if (deviceType.value.indexOf('gasmonitor') != -1) {
+        const newPage = router.resolve({ path: '/gas/warn/home' });
+        window.open(newPage.href, '_blank');
+      } else {
+        message.info('待开发。。。');
+      }
     } else {
-      message.info('待开发。。。');
+      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 if (deviceType.value.indexOf('gasDay_normal') != -1) {
+        const newPage = router.resolve({ path: '/gas/gas-report-inspect/home' });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('gasDayReport') != -1) {
+        const newPage = router.resolve({ path: '/gas/gasDayReport/home' });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('dustDayReport') != -1) {
+        const newPage = router.resolve({ path: '/dustDayReport/home' });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('bundleDayReport') != -1) {
+        const newPage = router.resolve({ path: '/bundleDayReport/home' });
+        window.open(newPage.href, '_blank');
+      } else if (deviceType.value.indexOf('bundleSpyDayReport') != -1) {
+        const newPage = router.resolve({ path: '/bundleSpyDayReport/home' });
+        window.open(newPage.href, '_blank');
+      } else {
+        message.info('待开发。。。');
+      }
     }
   }
-}
-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';
-    } else {
-      document.getElementById('monitorBox').style.height = '290';
-    }
-  });
-}
+  function exportXls() {
+    handleExportXls('瓦斯巡检记录', getExportUrl, { devicetype: deviceType.value });
+  }
 
-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 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';
+      } 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);
-}
-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);
     }
-    nextTick(() => {
-      isRefresh.value = true;
-      // if (pageObj && pageObj.pageType && pageObj.pageType.startsWith('sys_')) {
-      //   findTreeDataValue({ deviceid: systemID.value });
-      // } else {
-      //   findTreeDataValue({ deviceType: pageObj.pageType });
-      // }
-      findTreeDataValue(pageObj);
+    if (activeKey.value == '3' && alarmHistoryTable.value) {
+      alarmHistoryTable.value.setLoading(true);
+    }
+    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);
+  }
+  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;
-  }
-}
-
-.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;
+    --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;
+    }
   }
-}
 
-.expansion-icon {
-  background: var(--image-tree-icon-bg) no-repeat;
-  background-size: contain;
-  position: absolute;
-  left: 190px;
-  top: 25px;
+  .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;
+    }
+  }
 
-  &:hover {
-    background: var(--image-tree-icon-hover-bg) no-repeat;
+  .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;
   }
-}
-
-.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;
-}
-
-.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;
+  }
+
+  .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;
 
-    .zxm-tree-node-content-wrapper:hover {
-      background-color: var(--tree-node-hover);
+    &: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;
+
+  .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 {
-    width: calc(100% - 12px) !important;
-    bottom: 3px !important;
-    background-color: red;
+    height: 290px;
   }
 
-  .to-small {
-    position: absolute;
-    top: -65px;
-    right: 36px;
-    display: flex;
-    align-items: center;
-    justify-content: center;
+  .bottom-tabs-box {
+    position: relative;
 
-    .to-home {
-      width: 60px;
-      height: 60px;
-      background: var(--image-tohome) no-repeat center;
-      background-size: auto;
-      padding: 8px;
+    .tabs-box {
+      width: calc(100% - 12px) !important;
+      bottom: 3px !important;
+      background-color: red;
+    }
 
-      &:hover {
-        background-color: rgba(79, 104, 134, 0.418);
+    .to-small {
+      position: absolute;
+      top: -65px;
+      right: 36px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+
+      .to-home {
+        width: 60px;
+        height: 60px;
+        background: var(--image-tohome) no-repeat center;
+        background-size: auto;
+        padding: 8px;
+
+        &:hover {
+          background-color: rgba(79, 104, 134, 0.418);
+        }
+      }
+
+      .table-show-icon {
+        width: 30px;
+        height: 30px;
+        font-size: 30px;
+        color: var(--vent-font-color);
+        margin-left: 10px;
+      }
+    }
+
+    .device-button-group {
+      position: absolute;
+      top: -30px;
+      display: flex;
+      width: 100%;
+
+      .device-active {
+        background: linear-gradient(45deg, #04e6fb, #0c5cab);
+
+        &::before {
+          border-color: #0efcff;
+          box-shadow: 1px 1px 3px 1px #0efcff inset;
+        }
       }
     }
 
-    .table-show-icon {
-      width: 30px;
-      height: 30px;
-      font-size: 30px;
+    .table-hide-icon {
       color: var(--vent-font-color);
-      margin-left: 10px;
+      cursor: pointer;
+      position: absolute;
+      right: 20px;
+      top: 10px;
+      z-index: 9999;
     }
-  }
 
-  .device-button-group {
-    position: absolute;
-    top: -30px;
-    display: flex;
-    width: 100%;
+    .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;
 
-    .device-active {
-      background: linear-gradient(45deg, #04e6fb, #0c5cab);
+      &:hover {
+        background: var(--vent-device-manager-control-btn-hover);
+      }
 
       &::before {
-        border-color: #0efcff;
-        box-shadow: 1px 1px 3px 1px #0efcff inset;
+        width: calc(100% - 6px);
+        height: 27px;
+        content: '';
+        position: absolute;
+        top: 3px;
+        right: 0;
+        left: 3px;
+        bottom: 0;
+        z-index: -1;
+        border-radius: inherit;
+        /*important*/
+        background: var(--vent-device-manager-control-btn);
       }
     }
   }
 
-  .table-hide-icon {
-    color: var(--vent-font-color);
-    cursor: pointer;
-    position: absolute;
-    right: 20px;
-    top: 10px;
-    z-index: 9999;
+  .table-hide {
+    height: 0px;
+    animation-name: tableHide;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s;
   }
 
-  .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;
+  .table-show {
+    height: 290px;
+    animation-name: tableShow;
+    /* 持续时间 */
+    animation-duration: 1s;
+    transition: all 1s;
+  }
+
+  .location-form {
     display: flex;
-    align-items: center;
-    justify-content: center;
-    color: var(--vent-font-color);
-    padding: 5px 15px 5px 15px;
-    z-index: 999;
-    cursor: pointer;
+    margin: 8px;
 
-    &:hover {
-      background: var(--vent-device-manager-control-btn-hover);
+    .location-form-item {
+      width: 400px;
+
+      .location-form-label {
+        width: 100px;
+        display: inline-block;
+        color: var(--vent-font-color);
+      }
+
+      input {
+        background: transparent !important;
+        color: var(--vent-font-color);
+        border: 1px solid var(--vent-form-item-border) !important;
+      }
     }
 
-    &::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);
+    .zxm-select-selector {
+      width: 200px !important;
     }
   }
-}
-
-.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 tableShow {
+    0% {
+      height: 0px;
+      opacity: 0;
     }
 
-    input {
-      background: transparent !important;
-      color: var(--vent-font-color);
-      border: 1px solid var(--vent-form-item-border) !important;
+    100% {
+      height: 290px;
+      opacity: 1;
     }
   }
 
-  .zxm-select-selector {
-    width: 200px !important;
-  }
-}
+  @keyframes tableHide {
+    0% {
+      opacity: 1;
+    }
 
-@keyframes tableShow {
-  0% {
-    height: 0px;
-    opacity: 0;
+    100% {
+      height: 0px;
+      opacity: 0;
+    }
   }
 
-  100% {
-    height: 290px;
-    opacity: 1;
-  }
-}
+  @keyframes treeShow {
+    0% {
+      left: -400px;
+      opacity: 0;
+    }
 
-@keyframes tableHide {
-  0% {
-    opacity: 1;
+    100% {
+      left: 10px;
+      opacity: 1;
+    }
   }
 
-  100% {
-    height: 0px;
-    opacity: 0;
-  }
-}
+  @keyframes treeHide {
+    0% {
+      left: 10px;
+      opacity: 1;
+    }
 
-@keyframes treeShow {
-  0% {
-    left: -400px;
-    opacity: 0;
+    100% {
+      left: -400px;
+      opacity: 0;
+    }
   }
 
-  100% {
-    left: 10px;
-    opacity: 1;
-  }
-}
+  @keyframes locationShow {
+    0% {
+      right: 0px;
+      opacity: 0;
+    }
 
-@keyframes treeHide {
-  0% {
-    left: 10px;
-    opacity: 1;
+    100% {
+      right: 240px;
+      opacity: 1;
+    }
   }
 
-  100% {
-    left: -400px;
-    opacity: 0;
-  }
-}
+  @keyframes locationHide {
+    0% {
+      right: 240px;
+      opacity: 1;
+    }
 
-@keyframes locationShow {
-  0% {
-    right: 0px;
-    opacity: 0;
+    100% {
+      right: 0;
+      opacity: 0;
+    }
   }
 
-  100% {
-    right: 240px;
-    opacity: 1;
-  }
-}
+  @keyframes locationBtnShow {
+    0% {
+      right: -240px;
+      opacity: 0;
+    }
 
-@keyframes locationHide {
-  0% {
-    right: 240px;
-    opacity: 1;
+    100% {
+      right: -2px;
+      opacity: 1;
+    }
   }
 
-  100% {
-    right: 0;
-    opacity: 0;
-  }
-}
+  @keyframes locationBtnHide {
+    0% {
+      right: -2px;
+      opacity: 1;
+    }
 
-@keyframes locationBtnShow {
-  0% {
-    right: -240px;
-    opacity: 0;
+    100% {
+      right: -240px;
+      opacity: 0;
+    }
   }
 
-  100% {
-    right: -2px;
-    opacity: 1;
+  :deep(.@{ventSpace}-picker-datetime-panel) {
+    height: 200px !important;
+    overflow-y: auto !important;
   }
-}
 
-@keyframes locationBtnHide {
-  0% {
-    right: -2px;
-    opacity: 1;
+  :deep(.@{ventSpace}-tabs-tabpane-active) {
+    // overflow: auto;
+    height: 100%;
   }
 
-  100% {
-    right: -240px;
-    opacity: 0;
+  :deep(.zxm-select-dropdown) {
+    left: 0 !important;
+    color: #000000 !important;
   }
-}
 
-:deep(.@{ventSpace}-picker-datetime-panel) {
-  height: 200px !important;
-  overflow-y: auto !important;
-}
+  :deep(.zxm-select-selector) {
+    height: 34px !important;
+    line-height: 34px !important;
+  }
 
-:deep(.@{ventSpace}-tabs-tabpane-active) {
-  // overflow: auto;
-  height: 100%;
-}
+  :deep(.zxm-input) {
+    height: 32px !important;
+    line-height: 32px !important;
 
-:deep(.zxm-select-dropdown) {
-  left: 0 !important;
-  color: #000000 !important;
-}
+    .zxm-select-selection-item {
+      line-height: 32px !important;
+    }
+  }
 
-:deep(.zxm-select-selector) {
-  height: 34px !important;
-  line-height: 34px !important;
-}
+  .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);
 
-:deep(.zxm-input) {
-  height: 32px !important;
-  line-height: 32px !important;
+    &:nth-child(1) {
+      left: calc(-6px * 1);
+    }
 
-  .zxm-select-selection-item {
-    line-height: 32px !important;
-  }
-}
-
-.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);
+    }
 
-  &:nth-child(2) {
-    left: calc(-6px * 2);
-  }
+    &:nth-child(3) {
+      left: calc(-6px * 3);
+    }
 
-  &:nth-child(3) {
-    left: calc(-6px * 3);
-  }
+    &:nth-child(4) {
+      left: calc(-6px * 4);
+    }
 
-  &:nth-child(4) {
-    left: calc(-6px * 4);
-  }
+    &:nth-child(5) {
+      left: calc(-6px * 5);
+    }
 
-  &:nth-child(5) {
-    left: calc(-6px * 5);
-  }
+    &:nth-child(6) {
+      left: calc(-6px * 6);
+    }
 
-  &:nth-child(6) {
-    left: calc(-6px * 6);
-  }
+    &:nth-child(7) {
+      left: calc(-6px * 7);
+    }
 
-  &:nth-child(7) {
-    left: calc(-6px * 7);
-  }
+    &:nth-child(8) {
+      left: calc(-6px * 8);
+    }
 
-  &:nth-child(8) {
-    left: calc(-6px * 8);
-  }
+    &:nth-child(9) {
+      left: calc(-6px * 9);
+    }
 
-  &:nth-child(9) {
-    left: calc(-6px * 9);
-  }
+    &:nth-child(10) {
+      left: calc(-6px * 10);
+    }
 
-  &:nth-child(10) {
-    left: calc(-6px * 10);
-  }
+    &:nth-child(11) {
+      left: calc(-6px * 11);
+    }
 
-  &:nth-child(11) {
-    left: calc(-6px * 11);
-  }
+    &:nth-child(12) {
+      left: calc(-6px * 12);
+    }
 
-  &:nth-child(12) {
-    left: calc(-6px * 12);
-  }
+    &:nth-child(13) {
+      left: calc(-6px * 13);
+    }
 
-  &:nth-child(13) {
-    left: calc(-6px * 13);
-  }
+    &:nth-child(14) {
+      left: calc(-6px * 14);
+    }
 
-  &:nth-child(14) {
-    left: calc(-6px * 14);
-  }
+    &:nth-child(15) {
+      left: calc(-6px * 15);
+    }
 
-  &:nth-child(15) {
-    left: calc(-6px * 15);
-  }
+    &:nth-child(16) {
+      left: calc(-6px * 16);
+    }
 
-  &:nth-child(16) {
-    left: calc(-6px * 16);
-  }
+    &:nth-child(17) {
+      left: calc(-6px * 17);
+    }
 
-  &:nth-child(17) {
-    left: calc(-6px * 17);
-  }
+    &:nth-child(18) {
+      left: calc(-6px * 18);
+    }
 
-  &:nth-child(18) {
-    left: calc(-6px * 18);
-  }
+    &:nth-child(19) {
+      left: calc(-6px * 19);
+    }
 
-  &: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);
+    // }
   }
 
-  // &: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;
   // }
-}
-
-// :deep(.@{ventSpace}-pagination){
-//   margin-right: 20px !important;
-//   margin-top: 5px !important;
-//   display: flex;
-//   align-items: center;
-// }</style>
+</style>

+ 4 - 3
src/views/vent/safetyList/common/detail.vue

@@ -178,7 +178,7 @@
         </div>
         <!-- 监测详情 -->
         <div class="detail-content" v-if="activeKey == 'manageAuto'">
-          <!-- <a-button preIcon="ant-design:sync-outlined" @click="visibleModalEdit1 = true">重置</a-button> -->
+       
           <a-table size="small" :scroll="{ y: 710 }" :row-key="(record)=>record.stationId" :expandedRowKeys="expandedRowKeys" :columns="columnsDetail" :data-source="tableData1"
             @expand="tableExpand">
             <template #action="{ record }">
@@ -187,7 +187,8 @@
             </template>
             <template #bodyCell="{ column, text }"></template>
             <template #expandedRowRender>
-              <a-table :columns="deviceColumns" :data-source="tableData2" :pagination="false">
+              <a-table :columns="deviceColumns" :data-source="tableData2" :pagination="false"   maxWidth="340"
+              :scroll="{ x: 'max-content', y: 200 }">
                 <template #action="{ record }"></template>
                 <template #bodyCell="{ column }"></template>
               </a-table>
@@ -552,7 +553,7 @@ async function getShowReadList() {
 async function tableExpand(expaned, record) {
   let res=await set158StationDevicesRead({ stationId: record.stationId })
   if(res && expaned){
-    expandedRowKeys.length=0
+    // expandedRowKeys.length=0
     let data = await get158StationData();
     tableData2.value = data.filter(v => v.stationId == record.stationId)[0].deviceList || []
     expandedRowKeys.push(record.stationId)

+ 32 - 0
src/views/vent/safetyList/safetyList.data.ts

@@ -189,54 +189,63 @@ export const deviceColumns: BasicColumn[] = [
     title: '第一路风速风向',
     dataIndex: 'dylfsfx',
     key: 'dylfsfx',
+    width: 100,
     align: 'center',
   },
   {
     title: '第一路报警状态',
     dataIndex: 'dylbjzt',
     key: 'dylbjzt',
+    width: 100,
     align: 'center',
   },
   {
     title: '第一路1发2收AD值',
     dataIndex: 'dyl1f2sADz',
     key: 'dyl1f2sADz',
+    width: 100,
     align: 'center',
   },
   {
     title: '第一路2发1收AD值',
     dataIndex: 'dyl2f1sADz',
     key: 'dyl2f1sADz',
+    width: 100,
     align: 'center',
   },
   {
     title: '通风量',
     dataIndex: 'tfl',
     key: 'tfl',
+    width: 100,
     align: 'center',
   },
   {
     title: '硬件版本',
     dataIndex: 'yjbb',
     key: 'yjbb',
+    width: 100,
     align: 'center',
   },
   {
     title: '软件版本',
     dataIndex: 'rjbb',
     key: 'rjbb',
+    width: 100,
     align: 'center',
   },
   {
     title: '在线离线标志',
     dataIndex: 'zxlxbz',
     key: 'zxlxbz',
+    width: 100,
     align: 'center',
   },
   {
     title: '日期和时间',
     dataIndex: 'rqsj',
     key: 'rqsj',
+    width: 100,
     align: 'center',
   },
   {
@@ -244,138 +253,161 @@ export const deviceColumns: BasicColumn[] = [
     dataIndex: 'rs485modbusdz',
     key: 'rs485modbusdz',
     align: 'center',
+    width: 100,
   },
   {
     title: '探头安装距离',
     dataIndex: 'ttazjl',
     key: 'ttazjl',
     align: 'center',
+    width: 100,
   },
   {
     title: '基线距离',
     dataIndex: 'jxjl',
     key: 'jxjl',
     align: 'center',
+    width: 100,
   },
   {
     title: '安装角度',
     dataIndex: 'azjd',
     key: 'azjd',
     align: 'center',
+    width: 100,
   },
   {
     title: '设置时长',
     dataIndex: 'szsz',
     key: 'szsz',
     align: 'center',
+    width: 100,
   },
   {
     title: '数据平均周期',
     dataIndex: 'sjpjzq',
     key: 'sjpjzq',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路一发二收PG值',
     dataIndex: 'dylyfesPGz',
     key: 'dylyfesPGz',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路二发一收PG值',
     dataIndex: 'dylefysPGz',
     key: 'dylefysPGz',
     align: 'center',
+    width: 100,
   },
   {
     title: '风道截面积',
     dataIndex: 'fdjmj',
     key: 'fdjmj',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路整体系数k',
     dataIndex: 'dylztxsk',
     key: 'dylztxsk',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路第一段系数',
     dataIndex: 'dyldydxs1',
     key: 'dyldydxs1',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路第二段系数',
     dataIndex: 'dyldedxs2',
     key: 'dyldedxs2',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路第三段系数',
     dataIndex: 'dyldsdxs3',
     key: 'dyldsdxs3',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路第四段系数',
     dataIndex: 'dyldsdxs4',
     key: 'dyldsdxs4',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路第五段系数',
     dataIndex: 'dyldwdxs5',
     key: 'dyldwdxs5',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路第六段系数',
     dataIndex: 'dyldldxs6',
     key: 'dyldldxs6',
     align: 'center',
+    width: 100,
   },
   {
     title: '系数KB',
     dataIndex: 'xsKB',
     key: 'xsKB',
     align: 'center',
+    width: 100,
   },
   {
     title: '系数KB符号',
     dataIndex: 'xsKBfh',
     key: 'xsKBfh',
     align: 'center',
+    width: 100,
   },
   {
     title: '高报警阈值',
     dataIndex: 'gbjyz',
     key: 'gbjyz',
     align: 'center',
+    width: 100,
   },
   {
     title: '低报警阈值',
     dataIndex: 'dbjyz',
     key: 'dbjyz',
     align: 'center',
+    width: 100,
   },
   {
     title: '报警使能',
     dataIndex: 'bjsn',
     key: 'bjsn',
     align: 'center',
+    width: 100,
   },
   {
     title: '第一路485波特率',
     dataIndex: 'dyl485btl',
     key: 'dyl485btl',
     align: 'center',
+    width: 100,
   },
   {
     title: '四个字节保存密码',
     dataIndex: 'sgzjbcmm',
     key: 'sgzjbcmm',
     align: 'center',
+    width: 100,
   },
 ];