瀏覽代碼

1. 新增人员定位部门查询
2. 风门控制模式设置优化
3. 测风新增一键复位

hongrunxia 10 月之前
父節點
當前提交
51e77f2c10

文件差異過大導致無法顯示
+ 1547 - 37
src/components/Form/src/jeecg/components/MTreeSelect.vue


+ 1 - 0
src/hooks/vent/useSystemSelect.ts

@@ -90,3 +90,4 @@ export function useSystemSelect(sysType: string, changeModalType?: (param) => {}
     deviceChange,
   };
 }
+

+ 44 - 0
src/utils/ventutil.ts

@@ -50,6 +50,50 @@ export function cameraInit(dom, rtspUrl) {
   return { webRtcServer };
 }
 
+export function toTree(idName = 'id', parentIdName: 'parentId', titleName = 'name') {
+  function toTreeNode(data) {
+    return {
+      id: data[idName],
+      parentId: data[parentIdName],
+      title: data[titleName],
+    };
+  }
+  // 步骤2和3: 构建树
+  function buildTree(array) {
+    // 创建ID映射
+    const idMap = {};
+    array.forEach((item) => {
+      const node = toTreeNode(item);
+      idMap[node.id] = node;
+    });
+
+    // 构建父子关系
+    array.forEach((item) => {
+      const node = idMap[item.id];
+      if (item.parentId !== '0') {
+        const parentNode = idMap[item.parentId];
+        if (parentNode) {
+          if (!parentNode.children) parentNode.children = [];
+          parentNode.children.push(node);
+        }
+      }
+    });
+
+    // 步骤4: 处理结果并返回根节点
+    const roots = [];
+    array.forEach((item) => {
+      const node = idMap[item.id];
+      if (node.parentId === '0') {
+        roots.push(node);
+      }
+    });
+    return roots;
+  }
+
+  return { buildTree };
+}
+
+
 // 模型监测加载视频
 export function deviceCameraInit(cameraAddrs, player: HTMLElement, webRtcServerList: any[] = []) {
   const playerDoms: (HTMLVideoElement | undefined | null)[] = [];

+ 6 - 20
src/views/vent/deviceManager/substationTabel/index.vue

@@ -1,30 +1,16 @@
 <template>
   <div class="device-manager-box">
-    <NormalTable
-      ref="normalTabel"
-      :columns="columns"
-      :searchFormSchema="searchFormSchema"
-      :list="list"
-      :formSchema="formSchema"
-      :deleteById="deleteById"
-      :batchDelete="batchDeleteById"
-      :saveOrUpdate="saveOrUpdate"
-      designScope="substation-tabel"
-      title="分站列表"
-      :showTab="false"
-    >
+    <NormalTable ref="normalTabel" :columns="columns" :searchFormSchema="searchFormSchema" :list="list"
+      :formSchema="formSchema" :deleteById="deleteById" :batchDelete="batchDeleteById" :saveOrUpdate="saveOrUpdate"
+      designScope="substation-tabel" title="分站列表" :showTab="false">
       <template #filterCell="{ column, record }">
         <a-tag v-if="column.dataIndex === 'linkstatus'" :color="record.linkstatus == 0 ? '#999' : '#87d068'">{{
           record.linkstatus == 1 ? '链接' : '断开'
-        }}</a-tag>
+          }}</a-tag>
       </template>
       <template #action="{ record }">
-        <a
-          v-if="record['strtype'] == 'http' || record['strtype'] == 'kafka' || record['strtype'] == 'ftp' || record['strtype'] == 'database'"
-          class="table-action-link"
-          @click="addDevices(record)"
-          >同步设备</a
-        >
+        <a v-if="record['strtype'] == 'http' || record['strtype'] == 'kafka' || record['strtype'] == 'ftp' || record['strtype'] == 'database' || record['strtype'] == 'txt'"
+          class="table-action-link" @click="addDevices(record)">同步设备</a>
       </template>
     </NormalTable>
   </div>

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

@@ -527,4 +527,7 @@
       }
     }
   }
+  // :deep(.zxm-select-selector){
+  //   height: 42px !important;
+  // }
 </style>

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

@@ -234,4 +234,5 @@
   :deep(.@{ventSpace}-pagination) {
     margin-right: 20px !important;
   }
+ 
 </style>

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

@@ -1,8 +1,6 @@
 import { defineAsyncComponent } from 'vue';
 import { BasicColumn } from '/@/components/Table';
 import { useGlobSetting } from '/@/hooks/setting';
-import dayjs from 'dayjs';
-import { FormSchema } from '/@/components/Form';
 
 export const locationList = [
   {
@@ -48,17 +46,21 @@ export const locationList = [
 ];
 
 export function getMonitorComponent() {
-  const { sysOrgCode } = useGlobSetting();
+  let { sysOrgCode } = useGlobSetting();
+  // sysOrgCode = 'sdmtjtbdmk';
   let FiberModal;
   switch (sysOrgCode) {
     case 'sdmtjthlgmk': //哈拉沟
-      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.vue'));
+      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.hlg.vue'));
       break;
     case 'shsddlsjh': //沙吉海
-      FiberModal = defineAsyncComponent(() => import('./modal/fiber.sjh.vue'));
+      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.sjh.vue'));
+      break;
+    case 'sdmtjtbdmk': //保德
+      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.bd.vue'));
       break;
     default:
-      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal1.vue'));
+      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.bd.vue'));
   }
   const BundleModal = defineAsyncComponent(() => import('./modal/bundle.modal.vue'));
   const DustModal = defineAsyncComponent(() => import('./modal/dust.modal.vue'));
@@ -364,6 +366,16 @@ export const locationFormConfig = {
       component: 'Input',
     },
     {
+      label: '所属部门',
+      field: 'department',
+      component: 'MTreeSelect',
+      componentProps: {
+        placeholder: '请选择所属部门',
+        virtual: false,
+        api: '/ventanaly-device/getDepartmentInfo',
+      },
+    },
+    {
       label: '分站名称',
       field: 'stationname',
       component: 'Input',

+ 10 - 0
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -1440,6 +1440,16 @@ onUnmounted(() => {
   left: 0 !important;
   color: #000000 !important;
 }
+
+ :deep(.zxm-select-selector) {
+   height: 34px !important;
+   line-height: 34px !important;
+ }
+
+ :deep(.zxm-input) {
+   height: 32px !important;
+   line-height: 32px !important;
+ }
 // :deep(.@{ventSpace}-pagination){
 //   margin-right: 20px !important;
 //   margin-top: 5px !important;

+ 97 - 49
src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.modal.vue

@@ -19,7 +19,28 @@
             </div>
             <div class="item-container">
               <div class="title">最高温度</div>
-              <div class="value">{{ maxTemp || '--' }} <span>℃</span> </div>
+              <!-- <div class="value">{{ posMonitor.fmax }} <span>℃</span> </div> -->
+              <div class="value">{{ posMonitor.fmax || '--' }} <span>℃</span> </div>
+            </div>
+          </div>
+          <div class="top-item">
+            <div class="icon">
+              <SvgIcon class="icon-style min-temperature" size="38" name="min-temperature" />
+            </div>
+            <div class="item-container">
+              <div class="title">最低温度</div>
+              <!-- <div class="value">{{ posMonitor.fmin }} <span>℃</span></div> -->
+              <div class="value">{{ posMonitor.fmin || '--' }} <span>℃</span></div>
+            </div>
+          </div>
+          <div class="top-item">
+            <div class="icon">
+              <SvgIcon class="icon-style aveg-temperature" size="38" name="aveg-temperature" />
+            </div>
+            <div class="item-container">
+              <div class="title">平均温度</div>
+              <!-- <div class="value">{{ posMonitor.favg }} <span>℃</span></div> -->
+              <div class="value">{{ posMonitor.favg || '--' }} <span>℃</span></div>
             </div>
           </div>
           <div class="top-item warning-box">
@@ -28,7 +49,7 @@
             </div>
             <div class="item-container">
               <div class="title">风险等级</div>
-              <div class="warning-value">{{ warnLevels }}</div>
+              <div class="warning-value">低风险</div>
             </div>
           </div>
         </div>
@@ -37,6 +58,16 @@
             <span class="base-title">测点监测详情</span>
             <a-table size="small" :columns="columns" :data-source="posList" :pagination="false" :scroll="{ y: 200 }" />
           </div>
+          <div class="warning-box">
+            <span class="base-title">预警历史详情</span>
+            <div class="warning-container">
+              <dv-scroll-board
+                ref="scrollBoard"
+                :config="warningConfig"
+                style="width: 100%; height: 240px; overflow-y: auto; border: 1px solid #39e8ff33"
+              />
+            </div>
+          </div>
         </div>
         <div class="right-bottom">
           <span class="base-title">测点监测曲线</span>
@@ -73,14 +104,11 @@
       const currentTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
       const modelRef = ref({});
       const loading = ref(true);
-      const activeDeviceID = ref('');
+      const activeDeviceID = ref<any>('');
       const deviceList = ref<any[]>([]);
       const posList = reactive<any[]>([]);
       const posList1 = reactive<any[]>([]);
-      //风险等级
-      const warnLevels = ref('');
-      //最高温度
-      const maxTemp = ref(0);
+      const posMonitor = shallowRef({});
 
       const echatsOption = {
         grid: {
@@ -116,41 +144,61 @@
           width: 60,
           align: 'center',
           customRender: ({ index }) => {
-            return `测点${index + 1}`;
+            return `测点${index}`;
           },
         },
         {
           title: '最高温度(℃)',
           dataIndex: 'Section_MaxTemp',
           align: 'center',
+          width: 100,
         },
         {
           title: '对应米数(m)',
           dataIndex: 'Section_MaxTempPos',
           align: 'center',
+          width: 100,
         },
         {
           title: '起点',
           dataIndex: 'Section_BeginPosition',
           align: 'center',
+          width: 60,
         },
         {
           title: '终点',
           dataIndex: 'Section_EndPosition',
           align: 'center',
+          width: 60,
         },
         {
           title: '报警温度(℃)',
           dataIndex: 'Section_AlarmTemp',
           align: 'center',
         },
-        {
-          title: '报警状态',
-          dataIndex: 'isWarn',
-          align: 'center',
-        },
       ];
 
+      const warningConfig = reactive({
+        header: ['测点', '温度', '预警信息'],
+        data: [
+          ['测点6', '318℃', '严重报警'],
+          ['测点43', '142℃', '一般预警'],
+          ['测点23', '167℃', '一般预警'],
+          ['测点6', '198℃', '超高预警'],
+          ['测点65', '197℃', '超高预警'],
+          ['测点78', '154℃', '一般预警'],
+          ['测点61', '104℃', '一般预警'],
+          ['测点87', '150℃', '一般信息'],
+        ],
+        index: false,
+        columnWidth: [150],
+        headerHeight: 38,
+        headerBGC: '#3d9dd45d',
+        oddRowBGC: '#009acd10',
+        evenRowBGC: '#009acd05',
+        align: ['center', 'center', 'center'],
+      });
+
       const [register, { setModalProps, closeModal }] = useModalInner();
 
       function handleVisibleChange(visible) {
@@ -189,13 +237,16 @@
       watch([() => props.dataSource, () => props.activeID], ([newDataSource, newActiveID], [oldDataSource, oldActiveID]) => {
         console.log(newDataSource, 'newDataSource--------------');
         deviceList.value = newDataSource as any[];
-        // if (newActiveID != oldActiveID) {
-        //   activeDeviceID.value = newActiveID as string;
-        // }
+
         activeDeviceID.value = activeDeviceID.value ? activeDeviceID.value : newActiveID;
         newDataSource?.forEach((item: any, index) => {
           if ((!activeDeviceID.value && index == 0) || item.deviceID === activeDeviceID.value) {
             // activeDeviceID.value = item.deviceID;
+            // if (item.readData.fibreTemperature) {
+            //   const list = JSON.parse(item.readData.fibreTemperature);
+            //   if (list.length > 0) posList.value = list;
+            // }
+            posMonitor.value = item.readData;
             posList.length = 0;
             posList1.length = 0;
             let counts = Math.ceil((Object.keys(item.readData).length - 2) / 5);
@@ -206,16 +257,11 @@
                 Section_BeginPosition: item.readData[`Section${i + 1}_BeginPosition`],
                 Section_EndPosition: item.readData[`Section${i + 1}_EndPosition`],
                 Section_AlarmTemp: item.readData[`Section${i + 1}_AlarmTemp`],
-                isWarn:
-                  parseFloat(item.readData[`Section${i + 1}_MaxTemp`]) > parseFloat(item.readData[`Section${i + 1}_AlarmTemp`]) ? '报警' : '未报警',
               });
             }
             posList.forEach((el, index) => {
               posList1.push({ Section_AlarmTemp: index + 1, value: el.Section_AlarmTemp });
             });
-            let maxValue = posList.map((m) => m.Section_MaxTemp);
-            maxTemp.value = Math.max(...maxValue);
-            warnLevels.value = posList.find((v) => v.isWarn == '报警') ? '报警' : '未报警';
             console.log(posList, 'posList-----------------');
             console.log(posList1, 'posList1-----------------');
           }
@@ -232,14 +278,13 @@
         handleCancel,
         deviceList,
         activeDeviceID,
+        posMonitor,
         echatsOption,
         posList,
         posList1,
         chartsColumns,
         columns,
-        warnLevels,
-        maxTemp,
-        // warningConfig,
+        warningConfig,
       };
     },
   });
@@ -317,8 +362,7 @@
         margin-bottom: 10px;
 
         .top-item {
-          // width: 200px;
-          width: 49%;
+          width: 200px;
           height: 80px;
           display: flex;
           flex-direction: row;
@@ -396,32 +440,36 @@
 
         .table-box {
           position: relative;
-          // width: 500px;
-          width: 100%;
+          width: 500px;
           height: 250px;
+          :deep(.zxm-table-wrapper){
+            height: 220px !important;
+            background: #ffffff05 !important;
+            border-bottom: 1px solid #91E9FE80 !important;
+          }
         }
 
-        // .warning-box {
-        //   width: calc(100% - 520px);
-
-        //   .warning-container {
-        //     width: 100%;
-        //     height: convert;
-        //     background: #009acd00;
-
-        //     :deep(.dv-scroll-board) {
-        //       .row-item {
-        //         height: 40px !important;
-        //         line-height: 40px !important;
-        //       }
-
-        //       .header-item {
-        //         border-top: 1px solid #91e9fe !important;
-        //         border-bottom: 1px solid #91e9fe !important;
-        //       }
-        //     }
-        //   }
-        // }
+        .warning-box {
+          width: calc(100% - 520px);
+
+          .warning-container {
+            width: 100%;
+            height: convert;
+            background: #009acd00;
+
+            :deep(.dv-scroll-board) {
+              .row-item {
+                height: 40px !important;
+                line-height: 40px !important;
+              }
+
+              .header-item {
+                border-top: 1px solid #91e9fe !important;
+                border-bottom: 1px solid #91e9fe !important;
+              }
+            }
+          }
+        }
       }
 
       .right-bottom {

+ 0 - 492
src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.modal1.vue

@@ -1,492 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="register" :title="`光纤测温详情    ${currentTime}`" width="1200px" @ok="handleOk" @cancel="handleCancel">
-    <div class="fiber-modal">
-      <div class="modal-left">
-        <div
-          v-for="device in deviceList"
-          class="link-item"
-          :class="{ 'active-device-title': device.deviceID === activeDeviceID }"
-          :key="device.deviceID"
-        >
-          <span class="" @click="selectDevice(device.deviceID)">{{ device.strinstallpos }}</span>
-        </div>
-      </div>
-      <div class="modal-right">
-        <div class="right-top">
-          <div class="top-item">
-            <div class="icon">
-              <SvgIcon class="icon-style max-temperature" size="38" name="max-temperature" />
-            </div>
-            <div class="item-container">
-              <div class="title">最高温度</div>
-              <!-- <div class="value">{{ posMonitor.fmax }} <span>℃</span> </div> -->
-              <div class="value">{{ posMonitor.fmax || '--' }} <span>℃</span> </div>
-            </div>
-          </div>
-          <div class="top-item">
-            <div class="icon">
-              <SvgIcon class="icon-style min-temperature" size="38" name="min-temperature" />
-            </div>
-            <div class="item-container">
-              <div class="title">最低温度</div>
-              <!-- <div class="value">{{ posMonitor.fmin }} <span>℃</span></div> -->
-              <div class="value">{{ posMonitor.fmin || '--' }} <span>℃</span></div>
-            </div>
-          </div>
-          <div class="top-item">
-            <div class="icon">
-              <SvgIcon class="icon-style aveg-temperature" size="38" name="aveg-temperature" />
-            </div>
-            <div class="item-container">
-              <div class="title">平均温度</div>
-              <!-- <div class="value">{{ posMonitor.favg }} <span>℃</span></div> -->
-              <div class="value">{{ posMonitor.favg || '--' }} <span>℃</span></div>
-            </div>
-          </div>
-          <div class="top-item warning-box">
-            <div class="icon">
-              <SvgIcon class="icon-style" size="38" name="risk-level" />
-            </div>
-            <div class="item-container">
-              <div class="title">风险等级</div>
-              <div class="warning-value">低风险</div>
-            </div>
-          </div>
-        </div>
-        <div class="right-center">
-          <div class="table-box">
-            <span class="base-title">测点监测详情</span>
-            <a-table size="small" :columns="columns" :data-source="posList" :pagination="false" :scroll="{ y: 200 }" />
-          </div>
-          <div class="warning-box">
-            <span class="base-title">预警历史详情</span>
-            <div class="warning-container">
-              <dv-scroll-board
-                ref="scrollBoard"
-                :config="warningConfig"
-                style="width: 100%; height: 240px; overflow-y: auto; border: 1px solid #39e8ff33"
-              />
-            </div>
-          </div>
-        </div>
-        <div class="right-bottom">
-          <span class="base-title">测点监测曲线</span>
-          <div class="echarts-box">
-            <BarAndLine
-              xAxisPropType="Section_AlarmTemp"
-              :dataSource="posList1"
-              height="100%"
-              :chartsColumns="chartsColumns"
-              :option="echatsOption"
-              chartsType="listMonitor"
-            />
-          </div>
-        </div>
-      </div>
-    </div>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, watch, shallowRef, reactive } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import BarAndLine from '/@/components/chart/BarAndLine.vue';
-  import { SvgIcon } from '/@/components/Icon';
-  import { Decoration7 as DvDecoration7, ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
-  import dayjs from 'dayjs';
-
-  export default defineComponent({
-    components: { BasicModal, BarAndLine, SvgIcon, DvScrollBoard, DvDecoration7 },
-    props: {
-      dataSource: { type: Array },
-      activeID: { type: String },
-    },
-    setup(props) {
-      const currentTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
-      const modelRef = ref({});
-      const loading = ref(true);
-      const activeDeviceID = ref<any>('');
-      const deviceList = ref<any[]>([]);
-      const posList = reactive<any[]>([]);
-      const posList1 = reactive<any[]>([]);
-      const posMonitor = shallowRef({});
-
-      const echatsOption = {
-        grid: {
-          top: '20%',
-          left: '2px',
-          right: '10px',
-          bottom: '3%',
-          containLabel: true,
-        },
-        toolbox: {
-          feature: {},
-        },
-      };
-
-      const chartsColumns = [
-        {
-          legend: '测点报警温度',
-          seriesName: '(℃)',
-          ymax: 200,
-          yname: '℃',
-          linetype: 'line',
-          yaxispos: 'left',
-          color: '#FDB146',
-          sort: 1,
-          xRotate: 0,
-          dataIndex: 'value',
-        },
-      ];
-      const columns = [
-        {
-          title: '位置',
-          dataIndex: 'position',
-          width: 60,
-          align: 'center',
-          customRender: ({ index }) => {
-            return `测点${index}`;
-          },
-        },
-        {
-          title: '最高温度(℃)',
-          dataIndex: 'Section_MaxTemp',
-          align: 'center',
-          width: 100,
-        },
-        {
-          title: '对应米数(m)',
-          dataIndex: 'Section_MaxTempPos',
-          align: 'center',
-          width: 100,
-        },
-        {
-          title: '起点',
-          dataIndex: 'Section_BeginPosition',
-          align: 'center',
-          width: 60,
-        },
-        {
-          title: '终点',
-          dataIndex: 'Section_EndPosition',
-          align: 'center',
-          width: 60,
-        },
-        {
-          title: '报警温度(℃)',
-          dataIndex: 'Section_AlarmTemp',
-          align: 'center',
-        },
-      ];
-
-      const warningConfig = reactive({
-        header: ['测点', '温度', '预警信息'],
-        data: [
-          ['测点6', '318℃', '严重报警'],
-          ['测点43', '142℃', '一般预警'],
-          ['测点23', '167℃', '一般预警'],
-          ['测点6', '198℃', '超高预警'],
-          ['测点65', '197℃', '超高预警'],
-          ['测点78', '154℃', '一般预警'],
-          ['测点61', '104℃', '一般预警'],
-          ['测点87', '150℃', '一般信息'],
-        ],
-        index: false,
-        columnWidth: [150],
-        headerHeight: 38,
-        headerBGC: '#3d9dd45d',
-        oddRowBGC: '#009acd10',
-        evenRowBGC: '#009acd05',
-        align: ['center', 'center', 'center'],
-      });
-
-      const [register, { setModalProps, closeModal }] = useModalInner();
-
-      function handleVisibleChange(visible) {
-        if (visible) {
-          loading.value = true;
-          setModalProps({ loading: true, confirmLoading: true });
-
-          setTimeout(() => {
-            loading.value = false;
-            setModalProps({ loading: false, confirmLoading: false });
-          }, 1000);
-        }
-      }
-
-      // 选择监测
-      function selectDevice(id) {
-        loading.value = true;
-        setModalProps({ loading: true, confirmLoading: true });
-        setTimeout(() => {
-          loading.value = false;
-          activeDeviceID.value = id;
-          setModalProps({ loading: false, confirmLoading: false });
-        }, 300);
-      }
-
-      function handleOk(e) {
-        e.preventDefault();
-        closeModal();
-      }
-
-      function handleCancel(e) {
-        e.preventDefault();
-        closeModal();
-      }
-
-      watch([() => props.dataSource, () => props.activeID], ([newDataSource, newActiveID], [oldDataSource, oldActiveID]) => {
-        console.log(newDataSource, 'newDataSource--------------');
-        deviceList.value = newDataSource as any[];
-
-        activeDeviceID.value = activeDeviceID.value ? activeDeviceID.value : newActiveID;
-        newDataSource?.forEach((item: any, index) => {
-          if ((!activeDeviceID.value && index == 0) || item.deviceID === activeDeviceID.value) {
-            // activeDeviceID.value = item.deviceID;
-            // if (item.readData.fibreTemperature) {
-            //   const list = JSON.parse(item.readData.fibreTemperature);
-            //   if (list.length > 0) posList.value = list;
-            // }
-            posMonitor.value = item.readData;
-            posList.length = 0;
-            posList1.length = 0;
-            let counts = Math.ceil((Object.keys(item.readData).length - 2) / 5);
-            for (let i = 0; i < counts; i++) {
-              posList.push({
-                Section_MaxTemp: item.readData[`Section${i + 1}_MaxTemp`],
-                Section_MaxTempPos: item.readData[`Section${i + 1}_MaxTempPos`],
-                Section_BeginPosition: item.readData[`Section${i + 1}_BeginPosition`],
-                Section_EndPosition: item.readData[`Section${i + 1}_EndPosition`],
-                Section_AlarmTemp: item.readData[`Section${i + 1}_AlarmTemp`],
-              });
-            }
-            posList.forEach((el, index) => {
-              posList1.push({ Section_AlarmTemp: index + 1, value: el.Section_AlarmTemp });
-            });
-            console.log(posList, 'posList-----------------');
-            console.log(posList1, 'posList1-----------------');
-          }
-        });
-      });
-
-      return {
-        register,
-        model: modelRef,
-        currentTime,
-        handleVisibleChange,
-        selectDevice,
-        handleOk,
-        handleCancel,
-        deviceList,
-        activeDeviceID,
-        posMonitor,
-        echatsOption,
-        posList,
-        posList1,
-        chartsColumns,
-        columns,
-        warningConfig,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .fiber-modal {
-    width: 100%;
-    height: 650px;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-
-    .modal-left {
-      width: 200px;
-      height: 100%;
-      overflow-y: auto;
-      background: #ffffff11;
-      padding: 5px;
-      border-radius: 5px;
-
-      .active-device-title {
-        color: aqua;
-      }
-
-      .link-item {
-        position: relative;
-        cursor: pointer;
-        line-height: 30px;
-        padding-left: 30px;
-
-        span:hover {
-          color: #89ffff;
-        }
-
-        &::after {
-          content: '';
-          position: absolute;
-          display: block;
-          width: 8px;
-          height: 8px;
-          top: 12px;
-          left: 10px;
-          transform: rotateZ(45deg) skew(10deg, 10deg);
-          background: #45d3fd;
-        }
-      }
-    }
-
-    .modal-right {
-      width: calc(100% - 220px);
-      overflow-y: auto;
-
-      .base-title {
-        line-height: 32px;
-        position: relative;
-        padding-left: 20px;
-
-        &::after {
-          content: '';
-          position: absolute;
-          display: block;
-          width: 4px;
-          height: 12px;
-          top: 4px;
-          left: 10px;
-          background: #45d3fd;
-          border-radius: 4px;
-        }
-      }
-
-      .right-top {
-        display: flex;
-        flex-direction: row;
-        justify-content: space-between;
-        margin-bottom: 10px;
-
-        .top-item {
-          width: 200px;
-          height: 80px;
-          display: flex;
-          flex-direction: row;
-          justify-content: center;
-          border: 1px solid rgba(25, 237, 255, 0.4);
-          box-shadow: inset 0 0 10px rgba(0, 197, 255, 0.6);
-          background: rgba(0, 0, 0, 0.06666666666666667);
-          padding-top: 16px;
-
-          .icon {
-            margin-right: 10px;
-            margin-top: 5px;
-            color: #fdb146;
-          }
-
-          .item-container {
-            width: 100px;
-            display: flex;
-            flex-direction: column;
-            justify-content: center;
-
-            div {
-              text-align: center;
-            }
-
-            .title {
-              font-size: 18px;
-            }
-
-            .value {
-              text-shadow: 0 0 25px #00fbfe;
-              background: linear-gradient(0deg, #45d3fd, #45d3fd, #61ddb1, #61ddb1);
-              font-style: normal;
-              background-size: cover;
-              font-family: electronicFont;
-              font-size: 30px;
-              -webkit-background-clip: text;
-              background-clip: text;
-              -webkit-text-fill-color: transparent;
-              position: relative;
-              top: -8px;
-
-              span {
-                font-family: Arial, Helvetica, sans-serif;
-                font-size: 18px;
-                color: aliceblue;
-              }
-            }
-          }
-        }
-
-        .warning-box {
-          padding-top: 0px;
-
-          .icon {
-            margin-top: 20px;
-
-            .icon-style {
-              color: #fdb146;
-            }
-          }
-
-          .warning-value {
-            font-size: 18px;
-            color: #61ddb1;
-          }
-        }
-      }
-
-      .right-center {
-        margin-top: 20px;
-        display: flex;
-        flex-direction: row;
-        justify-content: space-between;
-
-        .table-box {
-          position: relative;
-          width: 500px;
-          height: 250px;
-        }
-
-        .warning-box {
-          width: calc(100% - 520px);
-
-          .warning-container {
-            width: 100%;
-            height: convert;
-            background: #009acd00;
-
-            :deep(.dv-scroll-board) {
-              .row-item {
-                height: 40px !important;
-                line-height: 40px !important;
-              }
-
-              .header-item {
-                border-top: 1px solid #91e9fe !important;
-                border-bottom: 1px solid #91e9fe !important;
-              }
-            }
-          }
-        }
-      }
-
-      .right-bottom {
-        margin-top: 20px;
-
-        .echarts-box {
-          width: 100%;
-          height: 230px;
-        }
-      }
-    }
-  }
-
-  :deep(.zxm-table-body) {
-    border: 1px solid rgba(57, 232, 255, 0.2) !important;
-
-    .zxm-table-tbody > tr > td {
-      border: none !important;
-    }
-  }
-
-  :deep(.zxm-table-cell) {
-    border-right: none !important;
-  }
-</style>

+ 0 - 465
src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.sjh.vue

@@ -1,465 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="register" :title="`光纤测温详情${currentTime}`" width="1200px" @ok="handleOk" @cancel="handleCancel">
-    <div class="fiber-modal">
-      <div class="modal-left">
-        <div
-          v-for="device in deviceList"
-          class="link-item"
-          :class="{ 'active-device-title': device.deviceID === activeDeviceID }"
-          :key="device.deviceID"
-        >
-          <span class="" @click="selectDevice(device.deviceID)">{{ device.strinstallpos }}</span>
-        </div>
-      </div>
-      <div class="modal-right">
-        <div class="right-top">
-          <div class="top-item">
-            <div class="icon">
-              <SvgIcon class="icon-style max-temperature" size="38" name="max-temperature" />
-            </div>
-            <div class="item-container">
-              <div class="title">最高温度</div>
-              <div class="value">{{ posMonitor.tempmax || '--' }} <span>℃</span> </div>
-            </div>
-          </div>
-          <div class="top-item">
-            <div class="icon">
-              <SvgIcon class="icon-style min-temperature" size="38" name="min-temperature" />
-            </div>
-            <div class="item-container">
-              <div class="title">最低温度</div>
-              <div class="value">{{ posMonitor.tempmin || '--' }} <span>℃</span></div>
-            </div>
-          </div>
-          <div class="top-item">
-            <div class="icon">
-              <SvgIcon class="icon-style aveg-temperature" size="38" name="aveg-temperature" />
-            </div>
-            <div class="item-container">
-              <div class="title">平均温度</div>
-              <div class="value">{{ posMonitor.tempavg || '--' }} <span>℃</span></div>
-            </div>
-          </div>
-          <div class="top-item warning-box">
-            <div class="icon">
-              <SvgIcon class="icon-style" size="38" name="risk-level" />
-            </div>
-            <div class="item-container">
-              <div class="title">风险等级</div>
-              <div class="warning-value">低风险</div>
-            </div>
-          </div>
-        </div>
-        <div class="right-center">
-          <div class="table-box">
-            <span class="base-title">测点监测详情</span>
-            <a-table size="small" :columns="columns" :data-source="posList" :pagination="false" :scroll="{ y: 200 }" />
-          </div>
-          <!-- <div class="warning-box">
-                        <span class="base-title">预警历史详情</span>
-                        <div class="warning-container">
-                            <dv-scroll-board ref="scrollBoard" :config="warningConfig"
-                                style="width: 100%; height: 240px; overflow-y: auto; border: 1px solid #39e8ff33" />
-                        </div>
-                    </div> -->
-        </div>
-        <div class="right-bottom">
-          <span class="base-title">测点监测曲线</span>
-          <div class="echarts-box">
-            <BarAndLine
-              xAxisPropType="tempmax"
-              :dataSource="posList1"
-              height="100%"
-              :chartsColumns="chartsColumns"
-              :option="echatsOption"
-              chartsType="listMonitor"
-            />
-          </div>
-        </div>
-      </div>
-    </div>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, watch, shallowRef, reactive } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import BarAndLine from '/@/components/chart/BarAndLine.vue';
-  import { SvgIcon } from '/@/components/Icon';
-  import { Decoration7 as DvDecoration7, ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
-  import dayjs from 'dayjs';
-
-  export default defineComponent({
-    components: { BasicModal, BarAndLine, SvgIcon, DvScrollBoard, DvDecoration7 },
-    props: {
-      dataSource: { type: Array },
-      activeID: { type: String },
-    },
-    setup(props) {
-      const currentTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
-      const modelRef = ref({});
-      const loading = ref(true);
-      const activeDeviceID = ref<any>('');
-      const deviceList = ref<any[]>([]);
-      const posList = reactive<any[]>([]);
-      const posList1 = reactive<any[]>([]);
-      const posMonitor = shallowRef({});
-
-      const echatsOption = {
-        grid: {
-          top: '20%',
-          left: '2px',
-          right: '10px',
-          bottom: '3%',
-          containLabel: true,
-        },
-        toolbox: {
-          feature: {},
-        },
-      };
-
-      const chartsColumns = [
-        {
-          legend: '测点报警温度',
-          seriesName: '(℃)',
-          ymax: 200,
-          yname: '℃',
-          linetype: 'line',
-          yaxispos: 'left',
-          color: '#FDB146',
-          sort: 1,
-          xRotate: 0,
-          dataIndex: 'value',
-        },
-      ];
-      const columns = [
-        {
-          title: '位置',
-          dataIndex: 'maxposition',
-          align: 'center',
-          width: 120,
-        },
-        {
-          title: '最高温度(℃)',
-          dataIndex: 'tempmax',
-          align: 'center',
-          width: 100,
-        },
-        {
-          title: '起点',
-          dataIndex: 'fiberstart',
-          align: 'center',
-        },
-        {
-          title: '终点',
-          dataIndex: 'fiberend',
-          align: 'center',
-        },
-        {
-          title: '报警状态',
-          dataIndex: 'alarmflag',
-          align: 'center',
-        },
-      ];
-
-      // const warningConfig = reactive({
-      //     header: ['测点', '温度', '预警信息'],
-      //     data: [
-      //         ['测点6', '318℃', '严重报警'],
-      //         ['测点43', '142℃', '一般预警'],
-      //         ['测点23', '167℃', '一般预警'],
-      //         ['测点6', '198℃', '超高预警'],
-      //         ['测点65', '197℃', '超高预警'],
-      //         ['测点78', '154℃', '一般预警'],
-      //         ['测点61', '104℃', '一般预警'],
-      //         ['测点87', '150℃', '一般信息'],
-      //     ],
-      //     index: false,
-      //     columnWidth: [150],
-      //     headerHeight: 38,
-      //     headerBGC: '#3d9dd45d',
-      //     oddRowBGC: '#009acd10',
-      //     evenRowBGC: '#009acd05',
-      //     align: ['center', 'center', 'center'],
-      // });
-
-      const [register, { setModalProps, closeModal }] = useModalInner();
-
-      function handleVisibleChange(visible) {
-        if (visible) {
-          loading.value = true;
-          setModalProps({ loading: true, confirmLoading: true });
-
-          setTimeout(() => {
-            loading.value = false;
-            setModalProps({ loading: false, confirmLoading: false });
-          }, 1000);
-        }
-      }
-
-      // 选择监测
-      function selectDevice(id) {
-        loading.value = true;
-        setModalProps({ loading: true, confirmLoading: true });
-        setTimeout(() => {
-          loading.value = false;
-          activeDeviceID.value = id;
-          setModalProps({ loading: false, confirmLoading: false });
-        }, 300);
-      }
-
-      function handleOk(e) {
-        e.preventDefault();
-        closeModal();
-      }
-
-      function handleCancel(e) {
-        e.preventDefault();
-        closeModal();
-      }
-
-      watch([() => props.dataSource, () => props.activeID], ([newDataSource, newActiveID], [oldDataSource, oldActiveID]) => {
-        console.log(newDataSource, 'newDataSource--------------');
-        deviceList.value = newDataSource as any[];
-        activeDeviceID.value = activeDeviceID.value ? activeDeviceID.value : newActiveID;
-        posList.length = 0;
-        posList1.length = 0;
-        newDataSource?.forEach((item: any, index) => {
-          if ((!activeDeviceID.value && index == 0) || item.deviceID === activeDeviceID.value) {
-            posMonitor.value = item.readData;
-            posList.push({
-              maxposition: item.readData['maxposition'],
-              tempmax: item.readData['tempmax'],
-              fiberstart: item.readData['fiberstart'],
-              fiberend: item.readData['fiberend'],
-              alarmflag: item.readData['alarmflag'] == '0' ? '正常' : '报警',
-            });
-            let echartList = item.readData.TempStr ? item.readData.TempStr.split(',') : [];
-            echartList.forEach((el, index) => {
-              posList1.push({ tempmax: index + 1, value: el });
-            });
-          }
-        });
-      });
-
-      return {
-        register,
-        model: modelRef,
-        currentTime,
-        handleVisibleChange,
-        selectDevice,
-        handleOk,
-        handleCancel,
-        deviceList,
-        activeDeviceID,
-        posMonitor,
-        echatsOption,
-        posList,
-        posList1,
-        chartsColumns,
-        columns,
-        // warningConfig,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .fiber-modal {
-    width: 100%;
-    height: 650px;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-
-    .modal-left {
-      width: 200px;
-      height: 100%;
-      overflow-y: auto;
-      background: #ffffff11;
-      padding: 5px;
-      border-radius: 5px;
-
-      .active-device-title {
-        color: aqua;
-      }
-
-      .link-item {
-        position: relative;
-        cursor: pointer;
-        line-height: 30px;
-        padding-left: 30px;
-
-        span:hover {
-          color: #89ffff;
-        }
-
-        &::after {
-          content: '';
-          position: absolute;
-          display: block;
-          width: 8px;
-          height: 8px;
-          top: 12px;
-          left: 10px;
-          transform: rotateZ(45deg) skew(10deg, 10deg);
-          background: #45d3fd;
-        }
-      }
-    }
-
-    .modal-right {
-      width: calc(100% - 220px);
-      overflow-y: auto;
-
-      .base-title {
-        line-height: 32px;
-        position: relative;
-        padding-left: 20px;
-
-        &::after {
-          content: '';
-          position: absolute;
-          display: block;
-          width: 4px;
-          height: 12px;
-          top: 4px;
-          left: 10px;
-          background: #45d3fd;
-          border-radius: 4px;
-        }
-      }
-
-      .right-top {
-        display: flex;
-        flex-direction: row;
-        justify-content: space-between;
-        margin-bottom: 10px;
-
-        .top-item {
-          width: 200px;
-          height: 80px;
-          display: flex;
-          flex-direction: row;
-          justify-content: center;
-          border: 1px solid rgba(25, 237, 255, 0.4);
-          box-shadow: inset 0 0 10px rgba(0, 197, 255, 0.6);
-          background: rgba(0, 0, 0, 0.06666666666666667);
-          padding-top: 16px;
-
-          .icon {
-            margin-right: 10px;
-            margin-top: 5px;
-            color: #fdb146;
-          }
-
-          .item-container {
-            width: 100px;
-            display: flex;
-            flex-direction: column;
-            justify-content: center;
-
-            div {
-              text-align: center;
-            }
-
-            .title {
-              font-size: 18px;
-            }
-
-            .value {
-              text-shadow: 0 0 25px #00fbfe;
-              background: linear-gradient(0deg, #45d3fd, #45d3fd, #61ddb1, #61ddb1);
-              font-style: normal;
-              background-size: cover;
-              font-family: electronicFont;
-              font-size: 30px;
-              -webkit-background-clip: text;
-              background-clip: text;
-              -webkit-text-fill-color: transparent;
-              position: relative;
-              top: -8px;
-
-              span {
-                font-family: Arial, Helvetica, sans-serif;
-                font-size: 18px;
-                color: aliceblue;
-              }
-            }
-          }
-        }
-
-        .warning-box {
-          padding-top: 0px;
-
-          .icon {
-            margin-top: 20px;
-
-            .icon-style {
-              color: #fdb146;
-            }
-          }
-
-          .warning-value {
-            font-size: 18px;
-            color: #61ddb1;
-          }
-        }
-      }
-
-      .right-center {
-        margin-top: 20px;
-        display: flex;
-        flex-direction: row;
-        justify-content: space-between;
-
-        .table-box {
-          position: relative;
-          width: 100%;
-          height: 250px;
-        }
-
-        // .warning-box {
-        //     width: calc(100% - 520px);
-
-        //     .warning-container {
-        //         width: 100%;
-        //         height: convert;
-        //         background: #009acd00;
-
-        //         :deep(.dv-scroll-board) {
-        //             .row-item {
-        //                 height: 40px !important;
-        //                 line-height: 40px !important;
-        //             }
-
-        //             .header-item {
-        //                 border-top: 1px solid #91e9fe !important;
-        //                 border-bottom: 1px solid #91e9fe !important;
-        //             }
-        //         }
-        //     }
-        // }
-      }
-
-      .right-bottom {
-        margin-top: 20px;
-
-        .echarts-box {
-          width: 100%;
-          height: 230px;
-        }
-      }
-    }
-  }
-
-  :deep(.zxm-table-body) {
-    border: 1px solid rgba(57, 232, 255, 0.2) !important;
-
-    .zxm-table-tbody > tr > td {
-      border: none !important;
-    }
-  }
-
-  :deep(.zxm-table-cell) {
-    border-right: none !important;
-  }
-</style>

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

@@ -13,7 +13,7 @@
   import { ref, onMounted, watch } from 'vue';
   import DeviceVue from './components/device/index.vue';
   import Network from './components/network/index.vue';
-  // import Emergency from './components/emergency/index.vue';
+  import Emergency from './components/emergency/index.vue';
   import { getActions } from '/@/qiankun/state';
   import { useRoute } from 'vue-router';
   import { onBeforeUnmount } from 'vue';

+ 7 - 6
src/views/vent/monitorManager/gasPumpMonitor/components/gasPumpHome.vue

@@ -251,7 +251,7 @@
   const playerRef = ref();
 
   // 监测数据
-  const selectData = reactive({
+  const selectData = ref({
     pump1: false,
     pump2: false,
     pump3: false,
@@ -285,7 +285,8 @@
           async () => {
             if (props.deviceId) {
               const data = await getDataSource(props.deviceId);
-              Object.assign(selectData, data);
+              selectData.value = data;
+              // Object.assign(selectData, data);
             }
             if (timer) {
               timer = null;
@@ -310,14 +311,14 @@
   function handler(passWord, paramcode) {
     let value = '';
     if (paramcode == 'ykjdqh') {
-      value = selectData['ykjdqh'] == '1' ? '2' : '1';
+      value = selectData.value['ykjdqh'] == '1' ? '2' : '1';
     }
     if (paramcode == 'jxmsqh') {
-      value = selectData['jxmsqh'] == '1' ? '2' : '1';
+      value = selectData.value['jxmsqh'] == '1' ? '2' : '1';
     }
     const data = {
-      deviceid: selectData['deviceID'],
-      devicetype: selectData['deviceType'],
+      deviceid: selectData.value['deviceID'],
+      devicetype: selectData.value['deviceType'],
       paramcode: paramcode,
       password: passWord,
       value: value,

+ 1 - 0
src/views/vent/monitorManager/gasPumpMonitor/components/gasPumpHomeCC.vue

@@ -295,6 +295,7 @@
       });
     }
   );
+
   watch(
     () => props.deviceId,
     async (deviceID) => {

+ 120 - 135
src/views/vent/monitorManager/gateMonitor/index.vue

@@ -1,5 +1,6 @@
 <template>
-  <div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
+  <div class="bg"
+    style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
     <a-spin :spinning="loading" />
     <div id="deviceDetail" class="device-detail">
       <div id="deviceCard" class="device-card" style="z-index: -1; position: absolute">
@@ -8,11 +9,8 @@
           <div class="left-box"></div>
           <div class="right-box">
             <div><span class="detail-title">规格型号:</span> <span>KJ-980-F</span></div>
-            <div
-              ><span class="detail-title">技术参数:</span>
-              <span
-                >380V,电机功率22kW,50Hz,B级绝缘,额定电流42.2A,效率90.5%,能效等级3,接法角型,2940r/min,轴承6311/CM 6211/CM,功率因数0.89</span
-              >
+            <div><span class="detail-title">技术参数:</span>
+              <span>380V,电机功率22kW,50Hz,B级绝缘,额定电流42.2A,效率90.5%,能效等级3,接法角型,2940r/min,轴承6311/CM 6211/CM,功率因数0.89</span>
             </div>
           </div>
         </div>
@@ -25,23 +23,38 @@
       <div class="top-center row">
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(1)">打开前门</div>
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(2)">关闭前门</div>
-        <div v-if="hasPermission('btn:control') && selectData.deviceType == 'gate_ss'" class="button-box" @click="playAnimation(8)">打开中间门</div>
-        <div v-if="hasPermission('btn:control') && selectData.deviceType == 'gate_ss'" class="button-box" @click="playAnimation(9)">关闭中间门</div>
+        <div v-if="hasPermission('btn:control') && selectData.deviceType == 'gate_ss'" class="button-box"
+          @click="playAnimation(8)">打开中间门</div>
+        <div v-if="hasPermission('btn:control') && selectData.deviceType == 'gate_ss'" class="button-box"
+          @click="playAnimation(9)">关闭中间门</div>
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(3)">打开后门</div>
         <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(4)">关闭后门</div>
-        <div v-if="hasPermission('btn:control') && selectData.deviceType != 'gate_ss'" class="button-box" @click="playAnimation(5)">同时打开</div>
-        <div v-if="hasPermission('btn:control') && selectData.deviceType != 'gate_ss'" class="button-box" @click="playAnimation(6)">同时关闭</div>
+        <div v-if="hasPermission('btn:control') && selectData.deviceType != 'gate_ss'" class="button-box"
+          @click="playAnimation(5)">同时打开</div>
+        <div v-if="hasPermission('btn:control') && selectData.deviceType != 'gate_ss'" class="button-box"
+          @click="playAnimation(6)">同时关闭</div>
       </div>
-      <div class="top-right row" v-if="hasPermission('btn:remoteLocal')">
-        <div class="control-type row">
+      <!-- 控制模式 -->
+      <div class="top-right row">
+        <div class="control-type row" v-if="selectData.contrlMod == 'loopCtrl'">
           <div class="control-title">控制模式:</div>
           <a-radio-group v-model:value="selectData.autoRoManual" @change="playAnimation(7)">
             <template v-for="(item, index) in modelList" :key="index">
-              <a-radio :value="item.value" :disabled="hasPermission('btn:remote')">{{ item.text }}</a-radio>
+              <a-radio :value="item.value" :disabled="true">{{ item.text }}</a-radio>
+            </template>
+          </a-radio-group>
+          <div class="button-box" @click="playAnimation(7)">切换模式</div>
+        </div>
+        <div class="control-type row" v-else>
+          <div class="control-title">控制模式:</div>
+          <a-radio-group v-model:value="selectData.autoRoManual" @change="playAnimation(7)">
+            <template v-for="(item, index) in modelList" :key="index">
+              <a-radio :value="item.value">{{ item.text }}</a-radio>
             </template>
           </a-radio-group>
           <div v-if="hasPermission('btn:remote')" class="button-box" @click="playAnimation(7)">切换模式</div>
         </div>
+
         <!-- <div class="run-type row">
           <div class="control-title">运行状态:</div>
           <a-radio-group v-model:value="selectData.runRoRecondition">
@@ -58,56 +71,46 @@
       <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">
         <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
           <a-tab-pane key="1" tab="实时监测">
-            <MonitorTable
-              v-if="activeKey === '1'"
-              ref="MonitorDataTable"
-              class="monitor-table"
-              columnsType="gate_monitor"
-              :isShowActionColumn="true"
-              :dataSource="dataSource"
-              design-scope="gate-monitor"
-              @selectRow="getSelectRow"
-              :scroll="{ y: scroll.y - 40 }"
-              title="风门监测"
-              :isShowPagination="true"
-            >
+            <MonitorTable v-if="activeKey === '1'" ref="MonitorDataTable" class="monitor-table"
+              columnsType="gate_monitor" :isShowActionColumn="true" :dataSource="dataSource" design-scope="gate-monitor"
+              @selectRow="getSelectRow" :scroll="{ y: scroll.y - 40 }" title="风门监测" :isShowPagination="true">
               <template #filterCell="{ column, record }">
-                <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
-                >
-                <a-tag v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == '1' && record.frontGateClose == '0'" 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
-                >
-                <a-tag v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '0' && record.rearGateClose == '1'" color="default"
-                  >关闭</a-tag
-                >
-                <a-tag v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '1' && record.rearGateClose == '0'" 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
-                >
+                <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>
+                <a-tag
+                  v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == '1' && record.frontGateClose == '0'"
+                  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>
+                <a-tag
+                  v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '0' && record.rearGateClose == '1'"
+                  color="default">关闭</a-tag>
+                <a-tag
+                  v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '1' && record.rearGateClose == '0'"
+                  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>
                 <template v-if="column.dataIndex === 'ndoortype'">
                   <span v-if="record.ndoortype == '0'">气动风门</span>
                   <span v-else color="default">液压风门</span>
@@ -128,13 +131,14 @@
                 </template>
                 <a-tag v-else-if="column.dataIndex === 'warnFlag'" :color="record.warnFlag == '0' ? 'green' : 'red'">{{
                   record.warnFlag == '0' ? '正常' : '报警'
-                }}</a-tag>
+                  }}</a-tag>
                 <a-tag v-if="column.dataIndex === 'netStatus'" :color="record.netStatus == '0' ? '#f00' : 'green'">{{
                   record.netStatus == '0' ? '断开' : '连接'
-                }}</a-tag>
+                  }}</a-tag>
               </template>
               <template #action="{ record }">
-                <a v-if="globalConfig?.showReport" class="table-action-link" @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
+                <a v-if="globalConfig?.showReport" class="table-action-link"
+                  @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
                 <a class="table-action-link" @click="deviceEdit($event, 'deviceInfo', record)">设备编辑</a>
               </template>
             </MonitorTable>
@@ -149,46 +153,42 @@
             <div class="tab-item" v-if="activeKey === '3'">
               <HistoryTable columns-type="gate" device-type="gate" designScope="gate-history" :scroll="scroll">
                 <template #filterCell="{ column, record }">
-                  <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
-                  >
+                  <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>
                   <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
-                  >
-                  <a-tag v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '0' && record.rearGateClose == '1'" color="default"
-                    >关闭</a-tag
-                  >
-                  <a-tag v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '1' && record.rearGateClose == '0'" 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 === '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>
+                  <a-tag
+                    v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == '1' && record.rearGateClose == '0'"
+                    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>
                   <template v-if="column.dataIndex === 'ndoortype'">
                     <span v-if="record.ndoortype == '0'">气动风门</span>
                     <span v-else color="default">液压风门</span>
@@ -207,64 +207,49 @@
                     <a-tag v-else-if="record.warnLevel == '1001'" color="default">网络中断</a-tag>
                     <a-tag v-else color="green">正常</a-tag>
                   </template>
-                  <a-tag v-else-if="column.dataIndex === 'warnFlag'" :color="record.warnFlag == '0' ? 'green' : 'red'">{{
+                  <a-tag v-else-if="column.dataIndex === 'warnFlag'"
+                    :color="record.warnFlag == '0' ? 'green' : 'red'">{{
                     record.warnFlag == '0' ? '正常' : '报警'
-                  }}</a-tag>
+                    }}</a-tag>
                   <a-tag v-if="column.dataIndex === 'netStatus'" :color="record.netStatus == '0' ? '#f00' : 'green'">{{
                     record.netStatus == '0' ? '断开' : '连接'
-                  }}</a-tag>
+                    }}</a-tag>
                 </template>
               </HistoryTable>
             </div>
           </a-tab-pane>
           <a-tab-pane key="4" tab="报警历史">
             <div class="tab-item" v-if="activeKey === '4'">
-              <AlarmHistoryTable columns-type="alarm" device-type="gate" :device-list-api="getTableList" designScope="alarm-history" :scroll="scroll">
+              <AlarmHistoryTable columns-type="alarm" device-type="gate" :device-list-api="getTableList"
+                designScope="alarm-history" :scroll="scroll">
                 <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
-                  >
+                  <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>
                   <a-tag v-if="column.dataIndex === 'netStatus'" :color="record.netStatus == '0' ? '#f00' : 'green'">{{
                     record.netStatus == '0' ? '断开' : '连接'
-                  }}</a-tag>
+                    }}</a-tag>
                 </template>
               </AlarmHistoryTable>
             </div>
           </a-tab-pane>
           <a-tab-pane key="5" tab="操作历史">
             <div class="tab-item" v-if="activeKey === '5'">
-              <HandlerHistoryTable
-                columns-type="operator_history"
-                device-type="gate"
-                :device-list-api="getTableList"
-                designScope="alarm-history"
-                :scroll="scroll"
-              />
+              <HandlerHistoryTable columns-type="operator_history" device-type="gate" :device-list-api="getTableList"
+                designScope="alarm-history" :scroll="scroll" />
             </div>
           </a-tab-pane>
         </a-tabs>
       </dv-border-box8>
     </div>
   </div>
-  <div ref="playerRef" style="z-index: 999; position: absolute; top: 100px; right: 15px; width: 300px; height: 280px; margin: auto"> </div>
-  <LivePlayer
-    id="fm-player1"
-    style="height: 220px; width: 300px; position: absolute; top: 0px; z-index: -1"
-    ref="player1"
-    :videoUrl="flvURL1()"
-    muted
-    live
-    loading
-    controls
-  />
-  <HandleModal
-    v-if="!globalConfig?.simulatedPassword"
-    :modal-is-show="modalIsShow"
-    :modal-title="modalTitle"
-    :modal-type="modalType"
-    @handle-ok="handleOK"
-    @handle-cancel="handleCancel"
-  />
+  <div ref="playerRef"
+    style="z-index: 999; position: absolute; top: 100px; right: 15px; width: 300px; height: 280px; margin: auto"> </div>
+  <LivePlayer id="fm-player1" style="height: 220px; width: 300px; position: absolute; top: 0px; z-index: -1"
+    ref="player1" :videoUrl="flvURL1()" muted live loading controls />
+  <HandleModal v-if="!globalConfig?.simulatedPassword" :modal-is-show="modalIsShow" :modal-title="modalTitle"
+    :modal-type="modalType" @handle-ok="handleOK" @handle-cancel="handleCancel" />
   <DeviceBaseInfo @register="registerModal" :device-type="selectData['deviceType']" />
 </template>
 

+ 42 - 46
src/views/vent/monitorManager/windrectMonitor/index.vue

@@ -1,5 +1,6 @@
 <template>
-  <div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
+  <div class="bg"
+    style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
     <a-spin :spinning="loading" />
     <div id="window3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
   </div>
@@ -47,61 +48,52 @@
       <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">
         <div class="tabs-button-group">
           <a-button class="tabs-button" type="primary" @click="openModel">一键测风</a-button>
+          <a-button class="tabs-button" type="primary" @click="resetHandle">一键复位</a-button>
         </div>
         <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
           <a-tab-pane key="1" tab="实时监测">
-            <MonitorTable
-              v-if="activeKey === '1'"
-              ref="MonitorDataTable"
-              columnsType="windrect_monitor"
-              :dataSource="dataSource"
-              design-scope="windrect-monitor"
-              @selectRow="getSelectRow"
-              :scroll="{ y: scroll.y - 40 }"
-              title="测风装置监测"
-              :isShowPagination="true"
-              :isShowActionColumn="true"
-            >
+            <MonitorTable v-if="activeKey === '1'" ref="MonitorDataTable" columnsType="windrect_monitor"
+              :dataSource="dataSource" design-scope="windrect-monitor" @selectRow="getSelectRow"
+              :scroll="{ y: scroll.y - 40 }" title="测风装置监测" :isShowPagination="true" :isShowActionColumn="true">
               <template #filterCell="{ column, record }">
                 <a-tag v-if="column.dataIndex === 'netStatus'" :color="record.netStatus == '0' ? '#FF5812' : 'green'">{{
                   record.netStatus == '0' ? '断开' : '连接'
-                }}</a-tag>
-                <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
-                >
-                <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>
+                <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>
+                <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'">{{
+                  <a-tag v-if="record.isRun == -2 || record.isRun == -1"
+                    :color="record.isRun == -2 ? '#95CF65' : '#ED5700'">{{
                     record.isRun == -2 ? '空闲' : '等待'
-                  }}</a-tag>
+                    }}</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>
               </template>
               <template #action="{ record }">
-                <a v-if="globalConfig?.showReport" class="table-action-link" @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
+                <a v-if="globalConfig?.showReport" class="table-action-link"
+                  @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
                 <a class="table-action-link" @click="deviceEdit($event, 'deviceInfo', record)">设备编辑</a>
               </template>
             </MonitorTable>
           </a-tab-pane>
           <a-tab-pane key="2" tab="监测曲线图" force-render>
             <div class="tab-item" v-if="activeKey === '2'">
-              <DeviceEcharts
-                chartsColumnsType="windrect_chart"
-                xAxisPropType="strname"
-                :dataSource="dataSource"
-                height="100%"
-                :chartsColumns="chartsColumnList"
+              <DeviceEcharts chartsColumnsType="windrect_chart" xAxisPropType="strname" :dataSource="dataSource"
+                height="100%" :chartsColumns="chartsColumnList"
                 :device-list-api="list.bind(null, { devicetype: 'windrect', pagetype: 'normal' })"
-                device-type="windrect"
-              />
+                device-type="windrect" />
             </div>
           </a-tab-pane>
           <a-tab-pane key="3" tab="历史数据">
             <div class="tab-item">
-              <HistoryTable columns-type="windrect" device-type="windrect" designScope="windrect-history" :scroll="scroll">
+              <HistoryTable columns-type="windrect" device-type="windrect" designScope="windrect-history"
+                :scroll="scroll">
                 <!-- <template #filterCell="{ column, record }">
                   <a-tag v-if="column.dataIndex === 'warnFlag'" :color="record.warnFlag == '0' ? 'green' : 'red'">{{
                     record.warnFlag == '0' ? '正常' : '报警'
@@ -116,7 +108,8 @@
           </a-tab-pane>
           <a-tab-pane key="4" tab="报警历史">
             <div class="tab-item" v-if="activeKey === '4'">
-              <AlarmHistoryTable columns-type="alarm" device-type="windrect" designScope="alarm-history" :scroll="scroll" />
+              <AlarmHistoryTable columns-type="alarm" device-type="windrect" designScope="alarm-history"
+                :scroll="scroll" />
             </div>
           </a-tab-pane>
           <!-- <a-tab-pane v-if="hasPermission('windrect:handlerHistory')" key="5" tab="操作历史">
@@ -137,31 +130,28 @@
       </dv-border-box8>
     </div>
   </div>
-  <div ref="playerRef" style="z-index: 999; position: absolute; top: 100px; right: 10px; width: 300px; height: 280px; margin: auto"></div>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="一键测风" width="900px" @ok="handleOk" @cancel="handleCancel">
+  <div ref="playerRef"
+    style="z-index: 999; position: absolute; top: 100px; right: 10px; width: 300px; height: 280px; margin: auto"></div>
+  <BasicModal v-bind="$attrs" @register="registerModal" title="一键测风" width="900px" @ok="handleOk"
+    @cancel="handleCancel">
     <div class="head-line">
       <!-- <div class="vent-flex-row">
         <span>同时运行数量:</span>
         <a-input-number v-model:value="runNum" :min="1" :max="10" />
       </div> -->
       <div class="vent-flex-row">
-        <div v-for="(criticalPath, index) in criticalPathList" :key="index" class="button-box" @click="selectCriticalPath(criticalPath.id)">{{
+        <div v-for="(criticalPath, index) in criticalPathList" :key="index" class="button-box"
+          @click="selectCriticalPath(criticalPath.id)">{{
           criticalPath.systemname
-        }}</div>
+          }}</div>
       </div>
     </div>
     <div>
       <ModalTable ref="modalTable" deviceType="windrect_list" />
     </div>
   </BasicModal>
-  <HandleModal
-    v-if="!globalConfig?.simulatedPassword"
-    :modal-is-show="modalIsShow"
-    modal-title="启动测风"
-    :modal-type="modalType"
-    @handle-ok="controlDevice"
-    @handle-cancel="handleCancelControl"
-  />
+  <HandleModal v-if="!globalConfig?.simulatedPassword" :modal-is-show="modalIsShow" modal-title="启动测风"
+    :modal-type="modalType" @handle-ok="controlDevice" @handle-cancel="handleCancelControl" />
   <DeviceBaseInfo @register="regModal" :device-type="selectData['deviceType']" />
 </template>
 
@@ -179,7 +169,7 @@
   import HandlerHistoryTable from '../comment/HandlerHistoryTable.vue';
   import { deviceControlApi } from '/@/api/vent/index';
   import { mountedThree, destroy, addMonitorText, play, setModelType, playCamera } from './windrect.threejs';
-  import { list, pathList, deviceList, testWind, exportXls } from './windrect.api';
+  import { list, pathList, deviceList, testWind, exportXls, resetWind } from './windrect.api';
   import { message, Progress } from 'ant-design-vue';
   import { chartsColumns, option } from './windrect.data';
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
@@ -633,6 +623,12 @@
   function openModel() {
     setModalProps({ visible: true });
   }
+  
+  function resetHandle() {
+    resetWind({}).then((res:any) => {
+      message.info(res)
+    })
+  }
 
   function exportExcel(id) {
     exportXls({ testid: id });

+ 3 - 0
src/views/vent/monitorManager/windrectMonitor/windrect.api.ts

@@ -10,6 +10,7 @@ enum Api {
   exportXls = '/safety/testwindDetail/exportXls',
   cameraList = '/safety/ventanalyCamera/list',
   cameraAddrList = '/ventanaly-device/camera/info',
+  resetWind = '/safety/ventanalyCommand/resettestwind',
 }
 /**
  * 导出api
@@ -38,6 +39,8 @@ export const resultList = (params) => defHttp.get({ url: Api.resultList, params
  */
 export const testWind = (params) => defHttp.post({ url: Api.testWind, params });
 
+export const resetWind = (params) => defHttp.post({ url: Api.resetWind, params });
+
 /**
  * 关键路线列表
  */

部分文件因文件數量過多而無法顯示