1
0

8 Commits 1e0e4be3c3 ... 53e7eb2220

Autor SHA1 Nachricht Datum
  houzekong 53e7eb2220 [Wip 0000] 风门svg动画开发 vor 20 Stunden
  bobo04052021@163.com 6e671587c6 [Feat 0000]测风装置规程值设置功能 vor 1 Tag
  bobo04052021@163.com 96b9608c9f 合并冲突 vor 4 Tagen
  bobo04052021@163.com b94d515fde [Feat 0000]测风装置规程值设置功能 vor 4 Tagen
  wangkeyi 2d2622bd70 [Feat 0000]除尘装置控制系统页面按钮增加点击事件与弹窗 vor 4 Tagen
  hongrunxia 3ac0360bfb Merge branch 'master' of http://182.92.126.35:3000/hrx/mky-vent-base vor 4 Tagen
  hongrunxia 9c150408d7 [Mod 0000] 解决接口返回报错信息不提示的问题 vor 4 Tagen
  houzekong da4f8b01fe [Feat 0000] 添加项目版本号标识 vor 5 Tagen

+ 1 - 1
.env.development

@@ -9,7 +9,7 @@ VITE_PUBLIC_PATH = /
 VITE_PROXY = [["/sw","http://182.92.126.35:6008"],["/jeecgsystem","http://182.92.126.35:9999"],["/upload","http://182.92.126.35:9999/upload"],["/documents", "http://182.92.126.35:9050"],["/modelreq", "http://182.92.126.35:9999"],["/webRtc", "http://182.92.126.35:8051"], ["/python", "http://127.0.0.1:8008"], ["/tun2D", "http://127.0.0.1:8088/micro-vent-2dModal/tun2D"]]
 # VITE_PROXY = [["/jeecgsystem","http://192.168.183.88:9999"],["/upload","http://192.168.183.88:9999/upload"],["/documents", "http://192.168.183.88:9050"],["/modelreq", "http://192.168.183.88:9999"],["/webRtc", "http://192.168.183.88:8051"]]
 # VITE_PROXY = [["/jeecgsystem","http://10.10.150.72:9999"],["/upload","http://localhost:3300/upload"],["/documents", "http://10.10.150.72:9050"],["/modelreq", "http://10.10.150.72:9999"],["/webRtc", "http://192.168.183.216:8051"]]
-#VITE_PROXY = [["/jeecgsystem","http://192.168.1.8:9999"],["/upload","http://localhost:3300/upload"]]
+# VITE_PROXY = [["/jeecgsystem","http://192.168.1.8:9999"],["/upload","http://localhost:3300/upload"]]
 
 # 控制台不输出  
 VITE_DROP_CONSOLE = false

+ 2 - 1
package.json

@@ -1,6 +1,7 @@
 {
   "name": "jeecgboot-vue3",
-  "version": "6.0.0.1",
+  "version": "6.0.0",
+  "projectVersion": "6.0.0.1",
   "author": {
     "name": "jeecg",
     "email": "jeecgos@163.com",

+ 4 - 0
src/utils/http/axios/index.ts

@@ -49,6 +49,7 @@ const transform: AxiosTransform = {
       // throw new Error(t('sys.api.apiRequestFailed'));
     }
     //  这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
+    debugger;
     if (data.result) {
       //lxh
       const { code, result, message, success } = data;
@@ -69,6 +70,9 @@ const transform: AxiosTransform = {
         throw new Error(message);
       }
     } else {
+      if (data['code'] !== 0 && data.code != 200) {
+        createMessage.error(data.message);
+      }
       return data;
     }
 

+ 21 - 3
src/views/vent/deviceManager/comment/warningTabel/warning.data.ts

@@ -48,11 +48,29 @@ export const levelColumns: BasicColumn[] = [
   },
   {
     title: '报警类型',
-    width: 180,
-    editRow: true,
+    // width: 180,
+    // editRow: true,
+    // dataIndex: 'alarm_type',
+    // editRule: true,
+    // editComponent: 'ApiSelect',
+    // editComponentProps: { api: initDictOptions.bind(null, 'alarm_type'), labelField: 'label', valueField: 'value' },
     dataIndex: 'alarm_type',
+    editRow: true,
+    editRule: true,
+    width: 100,
     editComponent: 'ApiSelect',
-    editComponentProps: { api: initDictOptions.bind(null, 'alarm_type') },
+    editComponentProps: {
+      api: initDictOptions.bind(null, 'alarm_type'),
+      labelField: 'label',
+      valueField: 'value',
+    },
+  },
+  {
+    title: '关联字段',
+    width: 180,
+    editRow: true,
+    dataIndex: 'relatedCode',
+    editComponent: 'Input',
   },
   {
     title: '是否语音播报',

+ 3 - 0
src/views/vent/deviceManager/substationTabel/substation.api.ts

@@ -11,6 +11,7 @@ enum Api {
   exportXls = '/sys/user/exportXls',
   addDevice = '/safety/ventanalySubStation/addDeviceBystation',
   getHistory = '/safety/ventanalyAlarmLog/list',
+  getRegulation = '/monitor/getDeviceRegulation',
 }
 /**
  * 导出api
@@ -36,6 +37,8 @@ export const deleteById = (params, handleSuccess) => {
     handleSuccess();
   });
 };
+export const getRegulation = () => defHttp.post({ url: Api.getRegulation });
+
 /**
  * 批量删除用户
  * @param params

+ 1 - 1
src/views/vent/gas/gasPipeNet/index.vue

@@ -1,7 +1,7 @@
 <!-- eslint-disable vue/multi-word-component-names -->
 <template>
   <div class="gas-pipe-net">
-    <CustomHeader> 瓦斯管网监控系统 </CustomHeader>
+    <CustomHeader> 瓦斯管网联合解算 </CustomHeader>
     <div style="width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 0">
       <VentModal />
     </div>

+ 78 - 78
src/views/vent/home/configurable/components/originalNew/moduleLeftBottom.vue

@@ -10,95 +10,95 @@
   </div>
 </template>
 <script lang="ts" setup>
-defineProps<{ title: string; visible: boolean }>();
-const emit = defineEmits(['close', 'click']);
+  defineProps<{ title: string; visible: boolean }>();
+  const emit = defineEmits(['close', 'click']);
 
-function closeModel() {
-  emit('close');
-}
-function clickHandler() {
-  emit('click');
-}
+  function closeModel() {
+    emit('close');
+  }
+  function clickHandler() {
+    emit('click');
+  }
 </script>
 <style lang="less" scoped>
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
+
+  @{theme-deepblue} {
+    .module-content {
+      --image-model_original_title_bg: url('@/assets/images/vent/homeNew/left3.png');
+    }
+  }
 
-@{theme-deepblue} {
   .module-content {
     --image-model_original_title_bg: url('@/assets/images/vent/homeNew/left3.png');
+    --bg-height: 40px;
+    color: #fff;
+    box-sizing: border-box;
+    position: absolute;
+    width: 100%;
+    height: 100%;
   }
-}
-
-.module-content {
-  --image-model_original_title_bg: url('@/assets/images/vent/homeNew/left3.png');
-  --bg-height: 40px;
-  color: #fff;
-  box-sizing: border-box;
-  position: absolute;
-  width: 100%;
-  height: 100%;
-}
-.title {
-  font-size: 14px;
-  font-weight: 500;
-  color: #fff;
-  float: right;
-  padding-right: 25px;
-  font-family: 'douyuFont';
-  line-height: 30px;
-}
-.module-content__title__expand {
-  width: 100%;
-  height: var(--bg-height);
-  background: var(--image-model_original_title_bg) no-repeat;
-  background-size: 100% 100%;
-  position: relative;
-  text-align: center;
+  .title {
+    font-size: 14px;
+    font-weight: 500;
+    color: #fff;
+    float: right;
+    padding-right: 25px;
+    font-family: 'douyuFont';
+    line-height: 30px;
+  }
+  .module-content__title__expand {
+    width: 100%;
+    height: var(--bg-height);
+    background: var(--image-model_original_title_bg) no-repeat;
+    background-size: 100% 100%;
+    position: relative;
+    text-align: center;
 
-  line-height: var(--bg-height);
-}
+    line-height: var(--bg-height);
+  }
 
-// .module-content__title {
-//   width: 50%;
-//   height: var(--bg-height);
-//   background: url('@/assets/images/home-container/configurable/model_left_title_bg.png') no-repeat;
-//   background-size: 100% 100%;
-//   position: relative;
-//   text-align: right;
-//   padding: 4px 10% 0 0;
-// }
+  // .module-content__title {
+  //   width: 50%;
+  //   height: var(--bg-height);
+  //   background: url('@/assets/images/home-container/configurable/model_left_title_bg.png') no-repeat;
+  //   background-size: 100% 100%;
+  //   position: relative;
+  //   text-align: right;
+  //   padding: 4px 10% 0 0;
+  // }
 
-// 固定在父容器右上角的按钮图标
-// .action-btn {
-//   width: 18px;
-//   height: 18px;
-//   background: url('@/assets/images/home-container/configurable/expand.svg') no-repeat center;
-//   position: absolute;
-//   right: 0;
-//   top: 0;
-// }
-// .close-btn {
-//   transform: rotate(-90deg);
-// }
+  // 固定在父容器右上角的按钮图标
+  // .action-btn {
+  //   width: 18px;
+  //   height: 18px;
+  //   background: url('@/assets/images/home-container/configurable/expand.svg') no-repeat center;
+  //   position: absolute;
+  //   right: 0;
+  //   top: 0;
+  // }
+  // .close-btn {
+  //   transform: rotate(-90deg);
+  // }
 
-.module-slot {
-  height: calc(100% - 33px);
-  width: calc(100% - 20px);
-  backdrop-filter: blur(5px);
-  margin-left: 10px;
-}
+  .module-slot {
+    height: calc(100% - 33px);
+    width: calc(100% - 20px);
+    backdrop-filter: blur(5px);
+    margin-left: 10px;
+  }
 
-// Transition动画相关
-.v-enter-active,
-.v-leave-active {
-  transition: all 0.3s ease;
-}
+  // Transition动画相关
+  .v-enter-active,
+  .v-leave-active {
+    transition: all 0.3s ease;
+  }
 
-.v-enter-from,
-.v-leave-to {
-  // opacity: 1;
-  transform: translateX(-100%);
-  // transform: scaleY(0);
-  // transform-origin: center top;
-}
+  .v-enter-from,
+  .v-leave-to {
+    // opacity: 1;
+    transform: translateX(-100%);
+    // transform: scaleY(0);
+    // transform-origin: center top;
+  }
 </style>

+ 78 - 77
src/views/vent/home/configurable/components/originalNew/moduleLeftCenter.vue

@@ -10,93 +10,94 @@
   </div>
 </template>
 <script lang="ts" setup>
-defineProps<{ title: string; visible: boolean }>();
-const emit = defineEmits(['close', 'click']);
+  defineProps<{ title: string; visible: boolean }>();
+  const emit = defineEmits(['close', 'click']);
 
-function closeModel() {
-  emit('close');
-}
-function clickHandler() {
-  emit('click');
-}
+  function closeModel() {
+    emit('close');
+  }
+  function clickHandler() {
+    emit('click');
+  }
 </script>
 <style lang="less" scoped>
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
+
+  @{theme-deepblue} {
+    .module-content {
+      --image-model_original_title_bg: url('@/assets/images/vent/homeNew/left2.png');
+    }
+  }
 
-@{theme-deepblue} {
   .module-content {
     --image-model_original_title_bg: url('@/assets/images/vent/homeNew/left2.png');
+    --bg-height: 40px;
+    color: #fff;
+    box-sizing: border-box;
+    position: absolute;
+    width: 100%;
+    height: 100%;
+  }
+  .title {
+    font-size: 14px;
+    font-weight: 500;
+    color: #fff;
+    float: right;
+    padding-right: 25px;
+    line-height: 30px;
+    font-family: 'douyuFont';
+  }
+  .module-content__title__expand {
+    width: 100%;
+    height: var(--bg-height);
+    background: var(--image-model_original_title_bg) no-repeat;
+    background-size: 100% 100%;
+    position: relative;
+    text-align: center;
+    line-height: var(--bg-height);
   }
-}
-
-.module-content {
-  --image-model_original_title_bg: url('@/assets/images/vent/homeNew/left2.png');
-  --bg-height: 40px;
-  color: #fff;
-  box-sizing: border-box;
-  position: absolute;
-  width: 100%;
-  height: 100%;
-}
-.title {
-  font-size: 14px;
-  font-weight: 500;
-  color: #fff;
-  float: right;
-  padding-right: 25px;
-  line-height: 30px;    font-family: 'douyuFont';
-}
-.module-content__title__expand {
-  width: 100%;
-  height: var(--bg-height);
-  background: var(--image-model_original_title_bg) no-repeat;
-  background-size: 100% 100%;
-  position: relative;
-  text-align: center;
-  line-height: var(--bg-height);
-}
 
-// .module-content__title {
-//   width: 50%;
-//   height: var(--bg-height);
-//   background: url('@/assets/images/home-container/configurable/model_left_title_bg.png') no-repeat;
-//   background-size: 100% 100%;
-//   position: relative;
-//   text-align: right;
-//   padding: 4px 10% 0 0;
-// }
+  // .module-content__title {
+  //   width: 50%;
+  //   height: var(--bg-height);
+  //   background: url('@/assets/images/home-container/configurable/model_left_title_bg.png') no-repeat;
+  //   background-size: 100% 100%;
+  //   position: relative;
+  //   text-align: right;
+  //   padding: 4px 10% 0 0;
+  // }
 
-// 固定在父容器右上角的按钮图标
-// .action-btn {
-//   width: 18px;
-//   height: 18px;
-//   background: url('@/assets/images/home-container/configurable/expand.svg') no-repeat center;
-//   position: absolute;
-//   right: 0;
-//   top: 0;
-// }
-// .close-btn {
-//   transform: rotate(-90deg);
-// }
+  // 固定在父容器右上角的按钮图标
+  // .action-btn {
+  //   width: 18px;
+  //   height: 18px;
+  //   background: url('@/assets/images/home-container/configurable/expand.svg') no-repeat center;
+  //   position: absolute;
+  //   right: 0;
+  //   top: 0;
+  // }
+  // .close-btn {
+  //   transform: rotate(-90deg);
+  // }
 
-.module-slot {
-  height: calc(100% - 33px);
-  width: calc(100% - 20px);
-  backdrop-filter: blur(5px);
-  margin-left: 10px;
-}
+  .module-slot {
+    height: calc(100% - 33px);
+    width: calc(100% - 20px);
+    backdrop-filter: blur(5px);
+    margin-left: 10px;
+  }
 
-// Transition动画相关
-.v-enter-active,
-.v-leave-active {
-  transition: all 0.3s ease;
-}
+  // Transition动画相关
+  .v-enter-active,
+  .v-leave-active {
+    transition: all 0.3s ease;
+  }
 
-.v-enter-from,
-.v-leave-to {
-  // opacity: 1;
-  transform: translateX(-100%);
-  // transform: scaleY(0);
-  // transform-origin: center top;
-}
+  .v-enter-from,
+  .v-leave-to {
+    // opacity: 1;
+    transform: translateX(-100%);
+    // transform: scaleY(0);
+    // transform-origin: center top;
+  }
 </style>

+ 76 - 77
src/views/vent/home/configurable/components/originalNew/moduleTop.vue

@@ -1,4 +1,3 @@
-
 <template>
   <div v-if="visible" class="module-content">
     <div class="left-solt"></div>
@@ -32,92 +31,92 @@
 </template>
 
 <script lang="ts" setup>
-defineProps<{ title: string; visible: boolean }>();
-const emit = defineEmits(['close', 'click']);
+  defineProps<{ title: string; visible: boolean }>();
+  const emit = defineEmits(['close', 'click']);
 </script>
 
 <style lang="less" scoped>
-@import '/@/design/theme.less';
-
-.module-content {
-  background: url('@/assets/images/vent/homeNew/content.png') no-repeat;
-  background-size: 100% 100%;
-  color: #fff;
-  box-sizing: border-box;
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  display: flex;
-  align-items: center;
-}
+  @import '/@/design/theme.less';
 
-.left-solt {
-  left: 8%;
-  top: 13%;
-  width: 30px;
-  height: 30px;
-  cursor: pointer;
-  position: absolute;
-  background: url('@/assets/images/vent/homeNew/Top-left.png') no-repeat;
-  background-size: 100% 100%;
-}
+  .module-content {
+    background: url('@/assets/images/vent/homeNew/content.png') no-repeat;
+    background-size: 100% 100%;
+    color: #fff;
+    box-sizing: border-box;
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    display: flex;
+    align-items: center;
+  }
 
-.right-solt {
-  right: 8%;
-  top: 13%;
-  width: 30px;
-  height: 30px;
-  cursor: pointer;
-  position: absolute;
-  background: url('@/assets/images/vent/homeNew/Top-right.png') no-repeat;
-  background-size: 100% 100%;
-}
+  .left-solt {
+    left: 8%;
+    top: 13%;
+    width: 30px;
+    height: 30px;
+    cursor: pointer;
+    position: absolute;
+    background: url('@/assets/images/vent/homeNew/Top-left.png') no-repeat;
+    background-size: 100% 100%;
+  }
 
-.center-solt {
-  display: flex;
-  position: absolute;
-  left: 15%;
-  bottom: 50%;
-  width: 70%;
-  height: 60%;
-  align-items: center;
-  justify-content: space-around;
-}
+  .right-solt {
+    right: 8%;
+    top: 13%;
+    width: 30px;
+    height: 30px;
+    cursor: pointer;
+    position: absolute;
+    background: url('@/assets/images/vent/homeNew/Top-right.png') no-repeat;
+    background-size: 100% 100%;
+  }
 
-.data-item {
-  left: 10%;
-  display: flex;
-  align-items: center;
-  gap: 5px;
-  .data-icon {
-    width: 60px;
-    height: 100%;
+  .center-solt {
+    display: flex;
+    position: absolute;
+    left: 15%;
+    bottom: 50%;
+    width: 70%;
+    height: 60%;
+    align-items: center;
+    justify-content: space-around;
   }
-  .data-content {
+
+  .data-item {
+    left: 10%;
     display: flex;
-    flex-direction: column;
-    .title {
-      font-size: 16px;
-      font-weight: bold;
-      color: #999999;
+    align-items: center;
+    gap: 5px;
+    .data-icon {
+      width: 60px;
+      height: 100%;
     }
-    .air-num {
-      font-size: 25px;
+    .data-content {
+      display: flex;
+      flex-direction: column;
+      .title {
+        font-size: 16px;
+        font-weight: bold;
+        color: #999999;
+      }
+      .air-num {
+        font-size: 25px;
+      }
     }
   }
-}
-.air-num1 {
-  color: #4ca8d5;
-}
-.air-num2 {
-  color: #b9f3fc;
-}
-.air-num3 {
-  color: #4ad1cc;
-}
-.divider {
-  width: 1px;
-  height: 40px;
-  background: url('@/assets/images/vent/homeNew/Top-divider.png') no-repeat;
-}
+  .air-num1 {
+    color: #4ca8d5;
+  }
+  .air-num2 {
+    color: #b9f3fc;
+  }
+  .air-num3 {
+    color: #4ad1cc;
+  }
+  .divider {
+    width: 1px;
+    height: 40px;
+    background: url('@/assets/images/vent/homeNew/Top-divider.png') no-repeat;
+  }
 </style>

+ 34 - 29
src/views/vent/home/configurable/components/preset/buttonList.vue

@@ -3,30 +3,34 @@
     <div :class="`button-block_${type}`" v-if="type === 'A'">
       <div :class="`button-item_${type}`" v-for="button in buttonList" :key="button.value">
         <div v-if="button.isShowInput" :class="`input-area_${type}`">
-          <a-input v-model:value="inputValue" :placeholder="button.input" />
-          <a-button type="primary">{{ button.label }}</a-button>
+          <a-input v-model:value="button.inputValue" :placeholder="button.inputContent" />
+          <a-button type="primary" @click="handleData(button)">{{ button.label }}</a-button>
         </div>
         <div v-else>
-          <a-button type="primary">{{ button.label }}</a-button>
+          <a-button type="primary" @click="handleData(button)">{{ button.label }}</a-button>
         </div>
       </div>
     </div>
-  </div>
-  <div :class="`button-block_${type}`" v-if="type === 'B'">
-    <!-- 遍历分组后的按钮组 -->
-    <div :class="`button-group_${type}`" v-for="(group, groupIndex) in groupedButtons" :key="groupIndex">
-      <!-- 遍历每组中的按钮 -->
-      <div :class="`button-item_${type}`" v-for="button in group" :key="button.value">
-        <a-button type="primary">{{ button.label }}</a-button>
+    <div :class="`button-block_${type}`" v-if="type === 'B'">
+      <!-- 遍历分组后的按钮组 -->
+      <div :class="`button-group_${type}`" v-for="(group, groupIndex) in groupedButtons" :key="groupIndex">
+        <!-- 遍历每组中的按钮 -->
+        <div :class="`button-item_${type}`" v-for="button in group" :key="button.value">
+          <a-button type="primary" @click="handleData(button)">{{ button.label }}</a-button>
+        </div>
       </div>
     </div>
   </div>
+  <ConfirmModal v-model:visible="modalVisible" @ok="handleConfirm">
+    <SvgIcon class="icon" size="34" name="warning-icon-gas" />
+    <span> {{ currentButton?.content }} </span>
+  </ConfirmModal>
 </template>
 
 <script lang="ts" setup>
   defineOptions({ name: 'ButtonList' });
-
-  import { computed, onMounted, ref, watch } from 'vue';
+  import ConfirmModal from '@/views/vent/gas/components/modal/confirmModal.vue';
+  import { computed, ref, inject } from 'vue';
   // 定义组件属性
   const props = defineProps<{
     type: string;
@@ -36,17 +40,16 @@
   // 定义按钮项的类型
   interface ButtonItem {
     isShowInput: boolean;
-    input: string;
+    inputContent: string;
+    inputValue: string | number;
     value: string | number;
     label: string;
+    content: string;
     // 可以根据实际需求添加其他属性
   }
-  const inputValue = ref<string>('');
-  // 组件挂载时初始化一次
-  onMounted(() => {
-    console.log(props);
-    // 设置默认选中项
-  });
+  const modalVisible = ref(false);
+  const currentButton = ref<ButtonItem | null>(null); // 记录当前点击的按钮
+
   const groupedButtons = computed<ButtonItem[][]>(() => {
     if (props.type !== 'B') return [];
     const groups: ButtonItem[][] = [];
@@ -55,17 +58,19 @@
     }
     return groups;
   });
-
-  watch(
-    () => props.config,
-    (newV) => {
-      console.log(newV, 'debuger---');
-    },
-    {
-      deep: true,
-      immediate: true,
-    }
+  // 注入祖父组件提供的处理函数
+  const handleButtonConfirm = inject<(button: ButtonItem) => void>(
+    'handleButtonConfirm',
+    () => console.warn('未提供handleButtonConfirm函数') // 默认值,避免报错
   );
+  const handleData = (button: ButtonItem) => {
+    modalVisible.value = !modalVisible.value;
+    currentButton.value = button;
+  };
+  const handleConfirm = () => {
+    if (!currentButton.value) return;
+    handleButtonConfirm(currentButton.value);
+  };
 </script>
 
 <style lang="less" scoped>

+ 10 - 31
src/views/vent/home/configurable/components/preset/radioLabel.vue

@@ -5,7 +5,7 @@
         <span>{{ props.config.leftLabel }}</span>
       </div>
       <div :class="`left-label_${type}`" v-if="props.config.isShowRadio">
-        <a-radio-group v-model:value="defaultValue" :options="options" @change="handleRadioChange" />
+        <a-radio-group v-model:value="defaultValue" :options="options" @change="handleChange" />
       </div>
       <div :class="`right-label_${type}`" v-else>
         <span>{{ props.config.rightLbel }}</span>
@@ -15,10 +15,9 @@
 </template>
 
 <script lang="ts" setup>
-  // Set a multi-word component name to follow Vue style guide
   defineOptions({ name: 'PresetRadio' });
 
-  import { onMounted, ref, watch } from 'vue';
+  import { onMounted, ref, inject } from 'vue';
   import { RadioGroupProps } from 'ant-design-vue';
   // 定义组件属性
   const props = defineProps<{
@@ -26,8 +25,6 @@
     config: any;
   }>();
 
-  // 获取组件根DOM元素
-  const radioContainer = ref<HTMLDivElement>();
   // 定义选项数据
   let options: RadioGroupProps['options'] = [];
   // 定义各个单选组的默认值
@@ -35,7 +32,6 @@
   // 组件挂载时初始化一次
   onMounted(() => {
     initData();
-    console.log(props);
     // 设置默认选中项
   });
   // 初始化数据
@@ -47,33 +43,16 @@
       defaultValue.value = props.config.defaultValue || '';
     }
   };
+  // 注入祖父组件提供的处理函数(关键:跨层级获取)
+  const handleRadioChange = inject<(value: string) => void>(
+    'handleRadioChange', // 注入的key,需与祖父组件保持一致
+    () => console.warn('未提供handleRadioChange函数') // 默认值,避免报错
+  );
+
   // 处理单选框变化,触发原生DOM事件
-  const handleRadioChange = (value: string) => {
-    if (radioContainer.value) {
-      // 创建自定义原生事件,携带选中值(通过event.detail传递)
-      const event = new CustomEvent('radio-value-change', {
-        detail: {
-          value,
-        },
-        bubbles: true, // 允许事件冒泡
-        cancelable: true,
-      });
-      console.log('debuger', event);
-      // 触发事件
-      radioContainer.value.dispatchEvent(event);
-    }
+  const handleChange = (value: string) => {
+    handleRadioChange(value);
   };
-
-  watch(
-    () => props.config,
-    (newV) => {
-      console.log(newV, 'debuger---');
-    },
-    {
-      deep: true,
-      immediate: true,
-    }
-  );
 </script>
 
 <style lang="less" scoped>

+ 12 - 12
src/views/vent/home/configurable/configurable.data.dustControl.ts

@@ -173,12 +173,12 @@ export const testConfigDustControl: Config[] = [
           readFrom: '',
           type: 'A',
           buttonList: [
-            { isShowInput: true, input: '水位设置', label: '保存', value: 'save' },
-            { label: '自动补水', value: 'zdbs' },
-            { label: '喷头清洁', value: 'ptqj' },
-            { label: '沉淀清洁', value: 'cdqj' },
-            { label: '开启喷雾', value: 'kqpw' },
-            { label: '停止喷雾', value: 'tzpw' },
+            { isShowInput: true, inputContent: '水位设置', inputValue: '', label: '保存', value: 'save', content: '是否进行保存设置' },
+            { label: '自动补水', value: 'zdbs', content: '是否自动补水' },
+            { label: '喷头清洁', value: 'ptqj', content: '是否喷头清洁' },
+            { label: '沉淀清洁', value: 'cdqj', content: '是否沉淀清洁' },
+            { label: '开启喷雾', value: 'kqpw', content: '是否开启喷雾' },
+            { label: '停止喷雾', value: 'tzpw', content: '是否停止喷雾' },
           ],
         },
       ],
@@ -314,12 +314,12 @@ export const testConfigDustControl: Config[] = [
           readFrom: '',
           type: 'B',
           buttonList: [
-            { label: '自动运行', value: 'ZDYX' },
-            { label: '手动运行', value: 'SDYX' },
-            { label: '就地控制', value: 'JDKZ' },
-            { label: '远程控制', value: 'YCKZ' },
-            { label: '启动风机', value: 'QDKJ' },
-            { label: '停止风机', value: 'TZFJ' },
+            { label: '自动运行', value: 'ZDYX', content: '是否自动运行' },
+            { label: '手动运行', value: 'SDYX', content: '是否手动运行' },
+            { label: '就地控制', value: 'JDKZ', content: '是否就地控制' },
+            { label: '远程控制', value: 'YCKZ', content: '是否远程控制' },
+            { label: '启动风机', value: 'QDKJ', content: '是否启动风机' },
+            { label: '停止风机', value: 'TZFJ', content: '是否停止风机' },
           ],
         },
       ],

+ 15 - 23
src/views/vent/home/configurable/dustControl.vue

@@ -30,7 +30,7 @@
   </div>
 </template>
 <script lang="ts" setup>
-  import { computed, onMounted, onUnmounted, ref } from 'vue';
+  import { computed, onMounted, onUnmounted, ref, provide } from 'vue';
   import { useInitConfigs, useInitPage } from './hooks/useInit';
   import { testConfigDustControl } from './configurable.data.dustControl';
   import ModuleCommon from './components/ModuleCommon.vue';
@@ -43,14 +43,6 @@
   let interval: ReturnType<typeof setInterval> | undefined;
   // 新增:获取容器DOM元素
   const dustControlContainer = ref<HTMLDivElement>();
-  const handleRadioChange = (event: Event) => {
-    // 类型断言,获取事件详情
-    const detail = (event as CustomEvent).detail;
-    if (detail) {
-      console.log('监听到radio切换:', detail.value);
-      // 这里处理业务逻辑
-    }
-  };
   onMounted(() => {
     loading.value = true;
     mountedThree('#dedust3D', ['#dedustCss', '#dedustEnvA', '#dedustEnvB']).then(() => {
@@ -64,24 +56,24 @@
       //   dataList: devicesTypes.value.concat('fireAllMineWarn').join(','),
       // }).then(updateData);
     });
-    // interval = setInterval(() => {
-    // getDisHome({
-    //   dataList: devicesTypes.value.concat('fireAllMineWarn').join(','),
-    // }).then(updateData);
-    // }, 2000);
-    // 监听自定义原生事件
-    // 在容器上监听事件(事件会从radio组件冒泡到这里)
-    if (dustControlContainer.value) {
-      dustControlContainer.value.addEventListener('radio-value-change', handleRadioChange);
-    }
+    interval = setInterval(() => {
+      // getDisHome({
+      //   dataList: devicesTypes.value.concat('fireAllMineWarn').join(','),
+      // }).then(updateData);
+    }, 2000);
+  });
+  // 提供处理函数(关键:跨层级传递给buttonList)
+  provide('handleButtonConfirm', (button) => {
+    console.log('祖父组件收到数据:', button);
+    // 对按钮事件进行处理
+  });
+  provide('handleRadioChange', (value) => {
+    console.log('祖父组件收到数据:', value);
+    // 对切换事件进行处理
   });
-
   onUnmounted(() => {
     destroy();
     clearInterval(interval);
-    if (dustControlContainer.value) {
-      dustControlContainer.value.removeEventListener('radio-value-change', handleRadioChange);
-    }
   });
 </script>
 <style lang="less" scoped>

+ 308 - 297
src/views/vent/monitorManager/comment/components/DeviceBaseInfo.vue

@@ -11,322 +11,333 @@
   </BasicModal>
 </template>
 <script lang="ts" setup>
-  import { onMounted, ref, defineEmits, onUnmounted, watch, computed } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { FormSchema } from '/@/components/Form';
-  import { getFormSchemaColumns } from '/@/hooks/web/useWebColumns';
-  import { list as substationList } from '/@/views/vent/deviceManager/substationTabel/substation.api';
-  import { list, updateDeviceInfo, updateReportInfo } from '../comment.api';
-  import { getAutoScrollContainer } from '/@/utils/common/compUtils';
+import { onMounted, ref, defineEmits, onUnmounted, watch, computed } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { FormSchema } from '/@/components/Form';
+import { getFormSchemaColumns } from '/@/hooks/web/useWebColumns';
+import { list as substationList } from '/@/views/vent/deviceManager/substationTabel/substation.api';
+import { getRegulation as getRegulationList } from '/@/views/vent/deviceManager/substationTabel/substation.api';
+import { list, updateDeviceInfo, updateReportInfo } from '../comment.api';
+import { getAutoScrollContainer } from '/@/utils/common/compUtils';
 
-  const emit = defineEmits(['close', 'register']);
-  const props = defineProps({
-    // formSchema: {
-    //   type: Array as PropType<FormSchema[]>,
-    //   default: () => [],
-    // },
-    deviceType: {
-      type: String,
-      default: '',
-    },
-  });
-  const FormRef = ref();
-  const tabType = ref('deviceInfo');
-  const formSchema = ref<Array<FormSchema>>([]);
-  const formData = ref({});
-  // const props.deviceType ref('');
-  const deviceType = computed(() => props.deviceType);
+const emit = defineEmits(['close', 'register']);
+const props = defineProps({
+  // formSchema: {
+  //   type: Array as PropType<FormSchema[]>,
+  //   default: () => [],
+  // },
+  deviceType: {
+    type: String,
+    default: '',
+  },
+});
+const FormRef = ref();
+const tabType = ref('deviceInfo');
+const formSchema = ref<Array<FormSchema>>([]);
+const formData = ref({});
+// const props.deviceType ref('');
+const deviceType = computed(() => props.deviceType);
 
-  // const arrToFormColumns = (tableHeaderColumns = [], devicetype) => {
-  //   const columnList: any[] = [];
-  //   tableHeaderColumns.forEach((item: any) => {
-  //     let columnsItem;
-  //     if (item.type == 1 || item.type == 10) {
-  //       columnsItem = {
-  //         label: item.des, //_dictText
-  //         field: item.monitorcode,
-  //         component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
-  //       };
-  //     } else {
-  //       if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
-  //         columnsItem = {
-  //           label: item.des, //_dictText
-  //           field: item.monitorcode,
-  //           component: 'ApiSelect',
-  //           componentProps: {
-  //             api: substationList,
-  //             labelField: 'strname',
-  //             valueField: 'id',
-  //           },
-  //         };
-  //       }
-  //       if (item.type == 3) {
-  //         columnsItem = {
-  //           label: item.des, //_dictText
-  //           field: item.monitorcode,
-  //           component: 'RadioGroup',
-  //           defaultValue: 1,
-  //           componentProps: () => {
-  //             return {
-  //               options: [
-  //                 { label: '是', value: 1, key: '1' },
-  //                 { label: '否', value: 0, key: '2' },
-  //               ],
-  //               stringToNumber: true,
-  //             };
-  //           },
-  //         };
-  //       }
-  //       if (item.type == 4) {
-  //         columnsItem = {
-  //           label: item.des, //_dictText
-  //           field: item.monitorcode,
-  //           component: 'JDictSelectTag',
-  //           componentProps: {
-  //             dictCode: item.dict,
-  //             placeholder: '请选择',
-  //             stringToNumber: true,
-  //           },
-  //         };
-  //       }
-  //     }
-  //     columnList.push(columnsItem);
-  //   });
-  //   formSchema.value = columnList
-  //   if(tabType.value === 'deviceInfo'){
-  //     formSchema.value.unshift(
-  //       {
-  //         label: '设备id', //_dictText
-  //         field: 'id',
-  //         component: 'Input',
-  //         componentProps: {
-  //           disabled: true,
-  //           show: false
-  //         },
-  //       },
-  //       {
-  //         label: '点表',
-  //         field: 'strtype',
-  //         component: 'JDictSelectTag',
-  //         componentProps: {
-  //           dictCode: `${devicetype.split('_')[0]}kind`,
-  //           placeholder: '请选择点表',
-  //         },
-  //       })
-  //       formSchema.value.push(
-  //       {
-  //         label: '备用分站',
-  //         field: 'stationids',
-  //         component: 'ApiSelect',
-  //         componentProps: {
-  //           api: substationList,
-  //           labelField: 'strname',
-  //           valueField: 'id',
-  //         },
-  //       },
-  //     )
-  //   }else{
-  //     formSchema.value.unshift(
-  //       {
-  //         label: '设备id', //_dictText
-  //         field: 'id',
-  //         component: 'Input',
-  //         componentProps: {
-  //           disabled: true,
-  //           show: false
-  //         },
-  //       })
-  //   }
-  // };
+// const arrToFormColumns = (tableHeaderColumns = [], devicetype) => {
+//   const columnList: any[] = [];
+//   tableHeaderColumns.forEach((item: any) => {
+//     let columnsItem;
+//     if (item.type == 1 || item.type == 10) {
+//       columnsItem = {
+//         label: item.des, //_dictText
+//         field: item.monitorcode,
+//         component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
+//       };
+//     } else {
+//       if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
+//         columnsItem = {
+//           label: item.des, //_dictText
+//           field: item.monitorcode,
+//           component: 'ApiSelect',
+//           componentProps: {
+//             api: substationList,
+//             labelField: 'strname',
+//             valueField: 'id',
+//           },
+//         };
+//       }
+//       if (item.type == 3) {
+//         columnsItem = {
+//           label: item.des, //_dictText
+//           field: item.monitorcode,
+//           component: 'RadioGroup',
+//           defaultValue: 1,
+//           componentProps: () => {
+//             return {
+//               options: [
+//                 { label: '是', value: 1, key: '1' },
+//                 { label: '否', value: 0, key: '2' },
+//               ],
+//               stringToNumber: true,
+//             };
+//           },
+//         };
+//       }
+//       if (item.type == 4) {
+//         columnsItem = {
+//           label: item.des, //_dictText
+//           field: item.monitorcode,
+//           component: 'JDictSelectTag',
+//           componentProps: {
+//             dictCode: item.dict,
+//             placeholder: '请选择',
+//             stringToNumber: true,
+//           },
+//         };
+//       }
+//     }
+//     columnList.push(columnsItem);
+//   });
+//   formSchema.value = columnList
+//   if(tabType.value === 'deviceInfo'){
+//     formSchema.value.unshift(
+//       {
+//         label: '设备id', //_dictText
+//         field: 'id',
+//         component: 'Input',
+//         componentProps: {
+//           disabled: true,
+//           show: false
+//         },
+//       },
+//       {
+//         label: '点表',
+//         field: 'strtype',
+//         component: 'JDictSelectTag',
+//         componentProps: {
+//           dictCode: `${devicetype.split('_')[0]}kind`,
+//           placeholder: '请选择点表',
+//         },
+//       })
+//       formSchema.value.push(
+//       {
+//         label: '备用分站',
+//         field: 'stationids',
+//         component: 'ApiSelect',
+//         componentProps: {
+//           api: substationList,
+//           labelField: 'strname',
+//           valueField: 'id',
+//         },
+//       },
+//     )
+//   }else{
+//     formSchema.value.unshift(
+//       {
+//         label: '设备id', //_dictText
+//         field: 'id',
+//         component: 'Input',
+//         componentProps: {
+//           disabled: true,
+//           show: false
+//         },
+//       })
+//   }
+// };
 
-  const arrToFormColumns = (tableHeaderColumns = []) => {
-    const columnList: any[] = [];
-    tableHeaderColumns.forEach((item: any) => {
-      let columnsItem;
-      if (item.type == 1 || item.type == 10) {
+const arrToFormColumns = (tableHeaderColumns = []) => {
+  const columnList: any[] = [];
+  tableHeaderColumns.forEach((item: any) => {
+    let columnsItem;
+    if (item.type == 1 || item.type == 10) {
+      columnsItem = {
+        label: item.des, //_dictText
+        field: item.monitorcode,
+        component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
+      };
+    } else {
+      if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
         columnsItem = {
           label: item.des, //_dictText
           field: item.monitorcode,
-          component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
+          component: 'ApiSelect',
+          componentProps: {
+            api: substationList,
+            labelField: 'strname',
+            valueField: 'id',
+          },
         };
-      } else {
-        if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
-          columnsItem = {
-            label: item.des, //_dictText
-            field: item.monitorcode,
-            component: 'ApiSelect',
-            componentProps: {
-              api: substationList,
-              labelField: 'strname',
-              valueField: 'id',
-            },
-          };
-        }
-        if (item.type == 3) {
-          columnsItem = {
-            label: item.des, //_dictText
-            field: item.monitorcode,
-            component: 'RadioGroup',
-            defaultValue: 1,
-            componentProps: () => {
-              return {
-                options: [
-                  { label: '是', value: 1, key: '1' },
-                  { label: '否', value: 0, key: '2' },
-                ],
-                stringToNumber: true,
-              };
-            },
-          };
-        }
-        if (item.type == 4) {
-          columnsItem = {
-            label: item.des, //_dictText
-            field: item.monitorcode,
-            component: 'JDictSelectTag',
-            componentProps: {
-              dictCode: item.dict,
-              placeholder: '请选择',
-              // stringToNumber: true,
-            },
-          };
-        }
-        // date日期
-        if (item.type == 8) {
-          columnsItem = {
-            label: item.des, //_dictText
-            field: item.monitorcode,
-            component: 'DatePicker',
-            componentProps: {
-              showTime: false,
-              valueFormat: 'YYYY-MM-DD',
-              getPopupContainer: getAutoScrollContainer,
-            },
-          };
-        }
-        // 日期+时间
-        if (item.type == 9) {
-          columnsItem = {
-            label: item.des, //_dictText
-            field: item.monitorcode,
-            component: 'DatePicker',
-            componentProps: {
-              showTime: true,
-              valueFormat: 'YYYY-MM-DD HH:mm:ss',
-              getPopupContainer: getAutoScrollContainer,
-            },
-          };
-        }
       }
-      columnList.push(columnsItem);
-    });
-    formSchema.value = columnList;
-    formSchema.value.unshift(
-      {
-        label: '设备id', //_dictText
-        field: 'id',
-        component: 'Input',
-        componentProps: {
-          disabled: true,
-        },
-      },
-      {
-        label: '点表',
-        field: 'strtype',
-        component: 'JDictSelectTag',
-        componentProps: {
-          dictCode: `${deviceType.value.split('_')[0]}kind`, //${deviceType.value}kind
-          placeholder: '请选择点表',
-          // stringToNumber: true,
-        },
+      if (item.type == 3) {
+        columnsItem = {
+          label: item.des, //_dictText
+          field: item.monitorcode,
+          component: 'RadioGroup',
+          defaultValue: 1,
+          componentProps: () => {
+            return {
+              options: [
+                { label: '是', value: 1, key: '1' },
+                { label: '否', value: 0, key: '2' },
+              ],
+              stringToNumber: true,
+            };
+          },
+        };
       }
-    );
-    formSchema.value.push(
-      {
-        label: '备用分站',
-        field: 'stationids',
-        component: 'ApiSelect',
-        componentProps: {
-          api: substationList,
-          labelField: 'strname',
-          valueField: 'id',
-        },
-      },
-      {
-        label: '是否显示',
-        field: 'linkId',
-        component: 'RadioGroup',
-        defaultValue: 1,
-        componentProps: () => {
-          return {
-            options: [
-              { label: '是', value: 1, key: '1' },
-              { label: '否', value: 0, key: '2' },
-            ],
-            stringToNumber: true,
-          };
-        },
+      if (item.type == 4) {
+        columnsItem = {
+          label: item.des, //_dictText
+          field: item.monitorcode,
+          component: 'JDictSelectTag',
+          componentProps: {
+            dictCode: item.dict,
+            placeholder: '请选择',
+            // stringToNumber: true,
+          },
+        };
+      }
+      // date日期
+      if (item.type == 8) {
+        columnsItem = {
+          label: item.des, //_dictText
+          field: item.monitorcode,
+          component: 'DatePicker',
+          componentProps: {
+            showTime: false,
+            valueFormat: 'YYYY-MM-DD',
+            getPopupContainer: getAutoScrollContainer,
+          },
+        };
+      }
+      // 日期+时间
+      if (item.type == 9) {
+        columnsItem = {
+          label: item.des, //_dictText
+          field: item.monitorcode,
+          component: 'DatePicker',
+          componentProps: {
+            showTime: true,
+            valueFormat: 'YYYY-MM-DD HH:mm:ss',
+            getPopupContainer: getAutoScrollContainer,
+          },
+        };
       }
-    );
-  };
-  // 注册 modal
-  const [register, { closeModal, setModalProps }] = useModalInner(async (data) => {
-    tabType.value = data.type;
-    const deviceId = data.deviceId;
-    if (FormRef.value) {
-      setModalProps({ confirmLoading: false });
-      getColumns();
-      resetSchema(formSchema.value);
-      resetFields();
-      const result = await list({ id: deviceId });
-      formData.value = result['records'][0];
-      await setFieldsValue({
-        ...formData.value,
-      });
     }
+    columnList.push(columnsItem);
   });
-
-  const [registerForm, { resetSchema, getFieldsValue, setFieldsValue, resetFields }] = useForm({
-    schemas: formSchema.value,
-    showActionButtonGroup: false,
-  });
-
-  function getColumns() {
-    let formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? `${props.deviceType}_edit` : `${props.deviceType}_input`) || [];
-    if (formSchemaArr && formSchemaArr.length < 1) {
-      const arr = props.deviceType.split('_');
-      formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? arr[0] + '_edit' : arr[0] + '_input') || [];
+  formSchema.value = columnList;
+  formSchema.value.unshift(
+    {
+      label: '设备id', //_dictText
+      field: 'id',
+      component: 'Input',
+      componentProps: {
+        disabled: true,
+      },
+    },
+    {
+      label: '点表',
+      field: 'strtype',
+      component: 'JDictSelectTag',
+      componentProps: {
+        dictCode: `${deviceType.value.split('_')[0]}kind`, //${deviceType.value}kind
+        placeholder: '请选择点表',
+        // stringToNumber: true,
+      },
+    },
+    {
+      label: '规程值',
+      field: 'regulation',
+      component: 'ApiSelect',
+      componentProps: {
+        api: getRegulationList,
+        labelField: 'name',
+        valueField: 'id',
+      },
     }
-    arrToFormColumns(formSchemaArr);
-  }
-
-  watch(
-    () => props.deviceType,
-    () => {
-      getColumns();
-      if (FormRef.value) resetSchema(formSchema.value);
+  );
+  formSchema.value.push(
+    {
+      label: '备用分站',
+      field: 'stationids',
+      component: 'ApiSelect',
+      componentProps: {
+        api: substationList,
+        labelField: 'strname',
+        valueField: 'id',
+      },
+    },
+    {
+      label: '是否显示',
+      field: 'linkId',
+      component: 'RadioGroup',
+      defaultValue: 1,
+      componentProps: () => {
+        return {
+          options: [
+            { label: '是', value: 1, key: '1' },
+            { label: '否', value: 0, key: '2' },
+          ],
+          stringToNumber: true,
+        };
+      },
     }
   );
+};
+// 注册 modal
+const [register, { closeModal, setModalProps }] = useModalInner(async (data) => {
+  tabType.value = data.type;
+  const deviceId = data.deviceId;
+  if (FormRef.value) {
+    setModalProps({ confirmLoading: false });
+    getColumns();
+    resetSchema(formSchema.value);
+    resetFields();
+    const result = await list({ id: deviceId });
+    formData.value = result['records'][0];
+    await setFieldsValue({
+      ...formData.value,
+    });
+  }
+});
 
-  async function onSubmit() {
-    let formValue = getFieldsValue();
-    setModalProps({ confirmLoading: true });
-    if (tabType.value === 'deviceInfo') {
-      await updateDeviceInfo(formValue);
-    } else {
-      await updateReportInfo(formValue);
-    }
+const [registerForm, { resetSchema, getFieldsValue, setFieldsValue, resetFields }] = useForm({
+  schemas: formSchema.value,
+  showActionButtonGroup: false,
+});
 
-    setModalProps({ confirmLoading: false });
-    emit('close');
-    closeModal();
+function getColumns() {
+  let formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? `${props.deviceType}_edit` : `${props.deviceType}_input`) || [];
+  if (formSchemaArr && formSchemaArr.length < 1) {
+    const arr = props.deviceType.split('_');
+    formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? arr[0] + '_edit' : arr[0] + '_input') || [];
+  }
+  arrToFormColumns(formSchemaArr);
+}
+
+watch(
+  () => props.deviceType,
+  () => {
+    getColumns();
+    if (FormRef.value) resetSchema(formSchema.value);
   }
+);
+
+async function onSubmit() {
+  let formValue = getFieldsValue();
+  setModalProps({ confirmLoading: true });
+  if (tabType.value === 'deviceInfo') {
+    await updateDeviceInfo(formValue);
+  } else {
+    await updateReportInfo(formValue);
+  }
+
+  setModalProps({ confirmLoading: false });
+  emit('close');
+  closeModal();
+}
 
-  onMounted(async () => {});
-  onUnmounted(() => {});
+onMounted(async () => {});
+onUnmounted(() => {});
 </script>
 <style scoped lang="less">
-  @import '/@/design/theme.less';
-  @import '/@/design/vent/modal.less';
+@import '/@/design/theme.less';
+@import '/@/design/vent/modal.less';
 </style>

Datei-Diff unterdrückt, da er zu groß ist
+ 3103 - 0
src/views/vent/monitorManager/gateMonitor/gateSVG.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 3101 - 0
src/views/vent/monitorManager/gateMonitor/indexSVG.vue


+ 695 - 635
src/views/vent/monitorManager/windrectMonitor/index.vue

@@ -151,716 +151,776 @@
 </template>
 
 <script setup lang="ts">
-  import DeviceEcharts from '../comment/DeviceEcharts.vue';
-  import { unref, onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw, nextTick, inject } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import MonitorTable from '../comment/MonitorTable.vue';
-  import ModalTable from './components/modalTable.vue';
-  import HandleModal from './components/modal.vue';
-  import DeviceBaseInfo from '../comment/components/DeviceBaseInfo.vue';
-  import ResultTable from './components/resultTable.vue';
-  import HistoryTable from '../comment/HistoryTable.vue';
-  import AlarmHistoryTable from '../comment/AlarmHistoryTable.vue';
-  import AlarmNumTable from '../comment/AlarmNumTable.vue';
-  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, resetWind } from './windrect.api';
-  import { message, Progress } from 'ant-design-vue';
-  import { chartsColumns, chartsColumnsHistory, option } from './windrect.data';
-  import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
-  import { setDivHeight } from '/@/utils/event';
-  import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
-  import { useRouter } from 'vue-router';
-  import { useModal } from '/@/components/Modal';
-  import { useCamera } from '/@/hooks/system/useCamera';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { useGlobSetting } from '/@/hooks/setting';
-  const { hasPermission } = usePermission();
-
-  const globalConfig = inject('globalConfig');
-
-  const { sysOrgCode } = useGlobSetting();
-  const { currentRoute } = useRouter();
-
-  const MonitorDataTable = ref();
-  const scroll = reactive({
-    y: 230,
-  });
-  const modalType = ref('');
-  const modalIsShow = ref(false);
-  const modalTable = ref();
-  const runNum = ref(5); //设备运行数量
-  const criticalPathList = ref([]);
-  const playerRef = ref();
-  const activeKey = ref('1');
-  const loading = ref(false);
-  // 默认初始是第一行
-  const selectRowIndex = ref(-1);
-  // 监测数据
-  const selectData = reactive({
-    deviceID: '',
-    deviceType: '',
-    strname: '',
-    dataDh: '-', //压差
-    dataDtestq: '-', //测试风量
-    // sourcePressure: '-', //气源压力
-    dataDequivalarea: '-',
-    netStatus: '0', //通信状态
-    fault: '气源压力超限',
-    sign: -1,
-    sensorRight: 0,
-    sensorMiddle: 1,
-    sensorLeft: 0,
-  });
-  const deviceType = ref('windrect');
-  const deviceId = ref('');
-  const chartsColumnArr = getTableHeaderColumns('windrect_chart');
-  const chartsColumnList = ref(chartsColumnArr.length > 0 ? chartsColumnArr : chartsColumns);
-
-  // const dataSource = computed(() => {
-  //   const data = [...getRecordList()] || [];
-  //   Object.assign(selectData, toRaw(data[selectRowIndex.value]));
-  //   addMonitorText(selectData);
-  //   return data;
-  // });
-
-  const dataSource = ref([]);
-  const [regModal, { openModal }] = useModal();
-
-  const { getCamera, removeCamera } = useCamera();
-  const tabChange = (activeKeyVal) => {
-    activeKey.value = activeKeyVal;
-    if (activeKeyVal == 1) {
-      nextTick(() => {
-        MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
-      });
-    }
-  };
-
-  // 设备数据
-  const controlType = ref(1);
-  //表单赋值
-  const [registerModal, { setModalProps, closeModal }] = useModalInner();
-
-  // https获取监测数据
-  let timer: null | NodeJS.Timeout = null;
-  function getMonitor(flag?) {
-    if (Object.prototype.toString.call(timer) === '[object Null]') {
-      timer = setTimeout(
-        () => {
-          list({ devicetype: deviceType.value, pagetype: 'normal' }).then((res) => {
-            if (res && res.msgTxt[0]) {
-              // dataSource.value = res.msgTxt[0].datalist || [];
-              const getData = res.msgTxt[0].datalist || [];
-              getData.forEach((data) => {
-                if (data.limits) {
-                  const limitsKeys = Object.keys(data.limits);
-                  limitsKeys.forEach((limitKey) => {
-                    const limit = data.limits[limitKey];
-                    if (limit && Array.isArray(limit.limitlevels)) {
-                      // 确保 data.readData 已初始化
-                      data.readData = data.readData || {};
-                      limit.limitlevels.forEach((item) => {
-                        if (item && item.alarmType) {
-                          // 拼接字段名并存入readData
-                          data.readData[`${item.alarmType}_fmin`] = item.fmin;
-                          data.readData[`${item.alarmType}_fmax`] = item.fmax;
-                        }
-                      });
-                    }
-                  });
-                  return data;
-                }
-              });
-              dataSource.value = getData;
-              if (dataSource.value.length > 0) {
-                dataSource.value.forEach((data: any) => {
-                  const readData = data.readData;
-                  data = Object.assign(data, readData);
-                });
-                if (dataSource.value.length > 0 && selectRowIndex.value == -1) {
-                  // 初始打开页面
-                  if (currentRoute.value && currentRoute.value['query'] && currentRoute.value['query']['id']) {
-                    MonitorDataTable.value.setSelectedRowKeys([currentRoute.value['query']['id']]);
-                  } else {
-                    MonitorDataTable.value.setSelectedRowKeys([dataSource.value[0]['deviceID']]);
-                  }
-                }
-                const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
-                Object.assign(selectData, data);
-                addMonitorText(selectData);
-
-                palyAnimation(selectData);
-              }
-            }
-            if (timer) {
-              timer = null;
+import DeviceEcharts from '../comment/DeviceEcharts.vue';
+import { unref, onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw, nextTick, inject } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import MonitorTable from '../comment/MonitorTable.vue';
+import ModalTable from './components/modalTable.vue';
+import HandleModal from './components/modal.vue';
+import DeviceBaseInfo from '../comment/components/DeviceBaseInfo.vue';
+import ResultTable from './components/resultTable.vue';
+import HistoryTable from '../comment/HistoryTable.vue';
+import AlarmHistoryTable from '../comment/AlarmHistoryTable.vue';
+import AlarmNumTable from '../comment/AlarmNumTable.vue';
+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, resetWind, getRegulation } from './windrect.api';
+import { message, Progress } from 'ant-design-vue';
+import { chartsColumns, chartsColumnsHistory, option } from './windrect.data';
+import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
+import { setDivHeight } from '/@/utils/event';
+import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
+import { useRouter } from 'vue-router';
+import { useModal } from '/@/components/Modal';
+import { useCamera } from '/@/hooks/system/useCamera';
+import { usePermission } from '/@/hooks/web/usePermission';
+import { useGlobSetting } from '/@/hooks/setting';
+const { hasPermission } = usePermission();
+
+const globalConfig = inject('globalConfig');
+
+const { sysOrgCode } = useGlobSetting();
+const { currentRoute } = useRouter();
+
+const MonitorDataTable = ref();
+const scroll = reactive({
+  y: 230,
+});
+const modalType = ref('');
+const modalIsShow = ref(false);
+const modalTable = ref();
+const runNum = ref(5); //设备运行数量
+const criticalPathList = ref([]);
+const playerRef = ref();
+const activeKey = ref('1');
+const loading = ref(false);
+// 默认初始是第一行
+const selectRowIndex = ref(-1);
+// 监测数据
+const selectData = reactive({
+  deviceID: '',
+  deviceType: '',
+  strname: '',
+  dataDh: '-', //压差
+  dataDtestq: '-', //测试风量
+  // sourcePressure: '-', //气源压力
+  dataDequivalarea: '-',
+  netStatus: '0', //通信状态
+  fault: '气源压力超限',
+  sign: -1,
+  sensorRight: 0,
+  sensorMiddle: 1,
+  sensorLeft: 0,
+});
+const deviceType = ref('windrect');
+const deviceId = ref('');
+const chartsColumnArr = getTableHeaderColumns('windrect_chart');
+const chartsColumnList = ref(chartsColumnArr.length > 0 ? chartsColumnArr : chartsColumns);
+
+// const dataSource = computed(() => {
+//   const data = [...getRecordList()] || [];
+//   Object.assign(selectData, toRaw(data[selectRowIndex.value]));
+//   addMonitorText(selectData);
+//   return data;
+// });
+
+const dataSource = ref([]);
+const [regModal, { openModal }] = useModal();
+
+const { getCamera, removeCamera } = useCamera();
+const tabChange = (activeKeyVal) => {
+  activeKey.value = activeKeyVal;
+  if (activeKeyVal == 1) {
+    nextTick(() => {
+      MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
+    });
+  }
+};
+
+// 设备数据
+const controlType = ref(1);
+//表单赋值
+const [registerModal, { setModalProps, closeModal }] = useModalInner();
+
+// https获取监测数据
+let timer: null | NodeJS.Timeout = null;
+// function getMonitor(flag?) {
+//   if (Object.prototype.toString.call(timer) === '[object Null]') {
+//     timer = setTimeout(
+//       () => {
+//         list({ devicetype: deviceType.value, pagetype: 'normal' }).then((res) => {
+//           if (res && res.msgTxt[0]) {
+//             // dataSource.value = res.msgTxt[0].datalist || [];
+//             const getData = res.msgTxt[0].datalist || [];
+//             getData.forEach((data) => {
+//               if (data.regulation) {
+//                 getRegulationList(data.regulation);
+//               }
+//             });
+//             dataSource.value = getData;
+//             if (dataSource.value.length > 0) {
+//               dataSource.value.forEach((data: any) => {
+//                 const readData = data.readData;
+//                 data = Object.assign(data, readData);
+//               });
+//               if (dataSource.value.length > 0 && selectRowIndex.value == -1) {
+//                 // 初始打开页面
+//                 if (currentRoute.value && currentRoute.value['query'] && currentRoute.value['query']['id']) {
+//                   MonitorDataTable.value.setSelectedRowKeys([currentRoute.value['query']['id']]);
+//                 } else {
+//                   MonitorDataTable.value.setSelectedRowKeys([dataSource.value[0]['deviceID']]);
+//                 }
+//               }
+//               const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
+//               Object.assign(selectData, data);
+//               addMonitorText(selectData);
+
+//               palyAnimation(selectData);
+//             }
+//           }
+//           if (timer) {
+//             timer = null;
+//           }
+//           getMonitor();
+//         });
+//       },
+//       flag ? 0 : 1000
+//     );
+//   }
+// }
+// function getRegulationList(data) {
+//   getRegulation().then((res) => {
+//     if (res) {
+//       const regulation = res.find((item) => item.id == data);
+//       data.regulation = regulation;
+//       data.fmin = data.regulation.fmin;
+//       data.fmax = data.regulation.fmax;
+//     }
+//   });
+// }
+function getMonitor(flag?: boolean) {
+  if (timer === null) {
+    timer = setTimeout(
+      async () => {
+        try {
+          const res = await list({ devicetype: deviceType.value, pagetype: 'normal' });
+          if (res && res.msgTxt[0]) {
+            const rawData = res.msgTxt[0].datalist || [];
+            const processedData = [...rawData];
+
+            // 并行获取所有regulation数据
+            const regulationPromises = processedData.filter((data) => data.regulation).map((data) => getRegulationList(data.regulation, data));
+
+            await Promise.all(regulationPromises);
+
+            // 确保所有异步操作完成后再更新数据源
+            dataSource.value = processedData;
+
+            // 处理readData和初始选择
+            if (dataSource.value.length > 0) {
+              await processReadData(processedData);
+              await handleInitialSelection();
             }
-            getMonitor();
-          });
-        },
-        flag ? 0 : 1000
-      );
+          }
+        } catch (error) {
+          console.error('Erro', error);
+        } finally {
+          timer = null;
+          getMonitor(flag);
+        }
+      },
+      flag ? 0 : 1000
+    );
+  }
+}
+
+async function getRegulationList(regulationId: string, data: any) {
+  const res = await getRegulation();
+  if (res) {
+    const regulation = res.find((item) => item.id === regulationId);
+    if (regulation) {
+      data.regulation = regulation;
+      data.fmin = regulation.fmin;
+      data.fmax = regulation.fmax;
     }
   }
+}
 
-  let deviceRunState = '',
-    tanTouRunState = '';
-  // 根据3个点位分别执行动画
-  function palyAnimation(selectData) {
-    if (selectData.deviceType == 'windrect_normal') {
-      if (selectData['apparatusRun'] == 1) {
-        const flag = selectData.sign == '0' ? 'up' : selectData.sign == 1 ? 'center' : selectData.sign == 2 ? 'down' : null;
-        if (flag) play(flag);
-      } else {
-        const flag = selectData.sign == 1 ? 'center' : selectData.sign == 2 ? 'down' : null;
-        if (flag) play(flag, true);
-      }
+async function processReadData(data: any[]) {
+  const promises = data
+    .filter((item) => item.readData)
+    .map(async (item) => {
+      item.readData && Object.assign(item, item.readData);
+    });
+  await Promise.all(promises);
+}
+
+async function handleInitialSelection() {
+  if (selectRowIndex.value === -1 && dataSource.value.length > 0) {
+    const deviceId = currentRoute.value?.query?.['id'] || dataSource.value[0]['deviceID'];
+    selectRowIndex.value = dataSource.value.findIndex((item) => item.deviceID === deviceId);
+
+    const selectedData = toRaw(dataSource.value[selectRowIndex.value]);
+    Object.assign(selectData, selectedData);
+    addMonitorText(selectData);
+    palyAnimation(selectedData);
+
+    MonitorDataTable.value.setSelectedRowKeys([deviceId]);
+  }
+}
+let deviceRunState = '',
+  tanTouRunState = '';
+// 根据3个点位分别执行动画
+function palyAnimation(selectData) {
+  if (selectData.deviceType == 'windrect_normal') {
+    if (selectData['apparatusRun'] == 1) {
+      const flag = selectData.sign == '0' ? 'up' : selectData.sign == 1 ? 'center' : selectData.sign == 2 ? 'down' : null;
+      if (flag) play(flag);
+    } else {
+      const flag = selectData.sign == 1 ? 'center' : selectData.sign == 2 ? 'down' : null;
+      if (flag) play(flag, true);
     }
-    // 运行中是0,运行到达是1
-    if (selectData.deviceType == 'windrect_rect_single') {
-      if (selectData['apparatusRun'] == 1) {
-        // 镜头指向横杆
-        // if(!deviceRunState && !tanTouRunState)playCamera('start')
-        // 正在执行或是开始执行
-
-        //开始执行时,
-        // selectData['poleIncipient'] == 1 selectData.sensorMiddle == 1 代表可是执行 或是 执行结束
-
-        // 1. selectData['poleIncipient'] == 1 selectData.sensorMiddle == 1, 执行 play('up', true),play('middle', true)
-        // 2. 探头左移play('left')
-        // 3. 探头右移play('right')
-        // 4. 横杆向中位移动,探头在右边
-        // 5. 探头移到中间play('middle')
-        // 6. 探头移到左边play('left')
-        // 7. 横杆向低位移动,探头在左边
-        // 8. 探头移到中间play('middle')
-        // 9. 探头右移play('right')
-        // 10. 测风结束,探头移到中间play('middle'),横杆向高位移动
-        if (selectData['poleIncipient'] == 1) {
-          // 横杆在高位,开始执行 或是 执行结束
-          if (selectData.sensorMiddle == 1 && !deviceRunState && !tanTouRunState) {
-            // 1. 开始执行
-            deviceRunState = 'up';
-            tanTouRunState = 'middle';
-            play('up', true);
-            play('middle', true);
-          }
-          if (deviceRunState == 'up-m') {
-            play('up', true);
-            play('middle', true);
-            deviceRunState = '';
-            tanTouRunState = '';
-            playCamera('end');
-          }
-          // 初始已经在运行
+  }
+  // 运行中是0,运行到达是1
+  if (selectData.deviceType == 'windrect_rect_single') {
+    if (selectData['apparatusRun'] == 1) {
+      // 镜头指向横杆
+      // if(!deviceRunState && !tanTouRunState)playCamera('start')
+      // 正在执行或是开始执行
+
+      //开始执行时,
+      // selectData['poleIncipient'] == 1 selectData.sensorMiddle == 1 代表可是执行 或是 执行结束
+
+      // 1. selectData['poleIncipient'] == 1 selectData.sensorMiddle == 1, 执行 play('up', true),play('middle', true)
+      // 2. 探头左移play('left')
+      // 3. 探头右移play('right')
+      // 4. 横杆向中位移动,探头在右边
+      // 5. 探头移到中间play('middle')
+      // 6. 探头移到左边play('left')
+      // 7. 横杆向低位移动,探头在左边
+      // 8. 探头移到中间play('middle')
+      // 9. 探头右移play('right')
+      // 10. 测风结束,探头移到中间play('middle'),横杆向高位移动
+      if (selectData['poleIncipient'] == 1) {
+        // 横杆在高位,开始执行 或是 执行结束
+        if (selectData.sensorMiddle == 1 && !deviceRunState && !tanTouRunState) {
+          // 1. 开始执行
+          deviceRunState = 'up';
+          tanTouRunState = 'middle';
+          play('up', true);
+          play('middle', true);
+        }
+        if (deviceRunState == 'up-m') {
+          play('up', true);
+          play('middle', true);
+          deviceRunState = '';
+          tanTouRunState = '';
+          playCamera('end');
+        }
+        // 初始已经在运行
 
-          if (selectData.sensorLeft == '0' && selectData.sensorMiddle == '0' && selectData.sensorRight == '0') {
-            //2.探头左移play('left')
-            if (tanTouRunState == 'middle') {
-              tanTouRunState = 'left-m';
-              play('left');
-            }
-            //3. 探头右移play('right')
-            if (tanTouRunState == 'left') {
-              tanTouRunState = 'right-m';
-              play('right');
-            }
+        if (selectData.sensorLeft == '0' && selectData.sensorMiddle == '0' && selectData.sensorRight == '0') {
+          //2.探头左移play('left')
+          if (tanTouRunState == 'middle') {
+            tanTouRunState = 'left-m';
+            play('left');
           }
-          if (selectData.sensorLeft == 1) {
-            tanTouRunState = 'left';
-            if (!tanTouRunState || tanTouRunState == 'left-m') {
-              play('left', true);
-            }
+          //3. 探头右移play('right')
+          if (tanTouRunState == 'left') {
+            tanTouRunState = 'right-m';
+            play('right');
           }
-          if (selectData.sensorRight == 1) {
-            tanTouRunState = 'right';
-            if (!tanTouRunState || tanTouRunState == 'right-m') {
-              play('right', true);
-            }
-          }
-        } else if (selectData['poleMiddle'] == 1) {
-          if (deviceRunState == 'center-m') {
-            play('center', true);
-            deviceRunState = 'center';
-            tanTouRunState = 'right';
-            play('right', true);
-          }
-          if (!deviceRunState) {
-            deviceRunState = 'center';
-            play('center', true);
+        }
+        if (selectData.sensorLeft == 1) {
+          tanTouRunState = 'left';
+          if (!tanTouRunState || tanTouRunState == 'left-m') {
+            play('left', true);
           }
-          if (!tanTouRunState) {
+        }
+        if (selectData.sensorRight == 1) {
+          tanTouRunState = 'right';
+          if (!tanTouRunState || tanTouRunState == 'right-m') {
             play('right', true);
           }
+        }
+      } else if (selectData['poleMiddle'] == 1) {
+        if (deviceRunState == 'center-m') {
+          play('center', true);
+          deviceRunState = 'center';
+          tanTouRunState = 'right';
+          play('right', true);
+        }
+        if (!deviceRunState) {
+          deviceRunState = 'center';
+          play('center', true);
+        }
+        if (!tanTouRunState) {
+          play('right', true);
+        }
 
-          // 横杆在中位
-          if (selectData.sensorLeft == '0' && selectData.sensorMiddle == '0' && selectData.sensorRight == '0') {
-            //5. 探头移到中间play('middle')
-            if (tanTouRunState == 'right') {
-              tanTouRunState = 'middle-m';
-              play('middle');
-            }
-            //6. 探头移到左边play('left')
-            if (tanTouRunState == 'middle') {
-              tanTouRunState = 'left-m';
-              play('left');
-            }
+        // 横杆在中位
+        if (selectData.sensorLeft == '0' && selectData.sensorMiddle == '0' && selectData.sensorRight == '0') {
+          //5. 探头移到中间play('middle')
+          if (tanTouRunState == 'right') {
+            tanTouRunState = 'middle-m';
+            play('middle');
           }
-          if (selectData.sensorMiddle == 1) {
-            tanTouRunState = 'middle';
-            if (!tanTouRunState || tanTouRunState == 'middle-m') {
-              play('middle', true);
-            }
+          //6. 探头移到左边play('left')
+          if (tanTouRunState == 'middle') {
+            tanTouRunState = 'left-m';
+            play('left');
           }
-          if (selectData.sensorLeft == 1) {
-            tanTouRunState = 'left';
-            if (!tanTouRunState || tanTouRunState == 'left-m') {
-              play('left', true);
-            }
+        }
+        if (selectData.sensorMiddle == 1) {
+          tanTouRunState = 'middle';
+          if (!tanTouRunState || tanTouRunState == 'middle-m') {
+            play('middle', true);
           }
-        } else if (selectData['poleNether'] == 1) {
-          if (deviceRunState == 'down-m') {
-            play('down', true);
-            deviceRunState = 'down';
-            tanTouRunState = 'left';
+        }
+        if (selectData.sensorLeft == 1) {
+          tanTouRunState = 'left';
+          if (!tanTouRunState || tanTouRunState == 'left-m') {
             play('left', true);
           }
-          if (!deviceRunState) {
-            play('down', true);
-            deviceRunState = 'down';
+        }
+      } else if (selectData['poleNether'] == 1) {
+        if (deviceRunState == 'down-m') {
+          play('down', true);
+          deviceRunState = 'down';
+          tanTouRunState = 'left';
+          play('left', true);
+        }
+        if (!deviceRunState) {
+          play('down', true);
+          deviceRunState = 'down';
+        }
+        if (!tanTouRunState) {
+          play('left', true);
+        }
+        // 横杆在低位
+        if (selectData.sensorLeft == '0' && selectData.sensorMiddle == '0' && selectData.sensorRight == '0') {
+          //8. 探头移到中间play('middle')
+          if (tanTouRunState == 'left') {
+            tanTouRunState = 'left-middle-m';
+            play('middle');
           }
-          if (!tanTouRunState) {
-            play('left', true);
+          //9. 探头右移play('right')
+          if (tanTouRunState == 'middle1') {
+            tanTouRunState = 'right-m';
+            play('right');
           }
-          // 横杆在低位
-          if (selectData.sensorLeft == '0' && selectData.sensorMiddle == '0' && selectData.sensorRight == '0') {
-            //8. 探头移到中间play('middle')
-            if (tanTouRunState == 'left') {
-              tanTouRunState = 'left-middle-m';
-              play('middle');
-            }
-            //9. 探头右移play('right')
-            if (tanTouRunState == 'middle1') {
-              tanTouRunState = 'right-m';
-              play('right');
-            }
-            // 10. 测风结束,探头移到中间play('middle'),横杆向高位移动
-            if (tanTouRunState == 'right') {
-              tanTouRunState = 'right-middle-m';
-              play('middle');
-            }
+          // 10. 测风结束,探头移到中间play('middle'),横杆向高位移动
+          if (tanTouRunState == 'right') {
+            tanTouRunState = 'right-middle-m';
+            play('middle');
           }
+        }
 
-          if (selectData.sensorMiddle == 1) {
-            if (tanTouRunState == 'left-middle-m') tanTouRunState = 'middle1';
-            if (tanTouRunState == 'right-middle-m') tanTouRunState = 'middle2';
+        if (selectData.sensorMiddle == 1) {
+          if (tanTouRunState == 'left-middle-m') tanTouRunState = 'middle1';
+          if (tanTouRunState == 'right-middle-m') tanTouRunState = 'middle2';
 
-            if (!tanTouRunState || tanTouRunState == 'left-middle-m' || tanTouRunState == 'right-middle-m') {
-              play('middle', true);
-            }
+          if (!tanTouRunState || tanTouRunState == 'left-middle-m' || tanTouRunState == 'right-middle-m') {
+            play('middle', true);
           }
+        }
 
-          if (selectData.sensorRight == 1) {
-            tanTouRunState = 'right';
-            if (!tanTouRunState || tanTouRunState == 'right-m') {
-              play('right', true);
-            }
-          }
-        } else {
-          // 横杆正在运行
-          if (deviceRunState == 'up') {
-            deviceRunState = 'center-m';
-            play('center');
-          }
-          if (deviceRunState == 'center') {
-            deviceRunState = 'down-m';
-            play('down');
-          }
-          if (deviceRunState == 'down') {
-            deviceRunState = 'up-m';
-            play('up');
+        if (selectData.sensorRight == 1) {
+          tanTouRunState = 'right';
+          if (!tanTouRunState || tanTouRunState == 'right-m') {
+            play('right', true);
           }
         }
+      } else {
+        // 横杆正在运行
+        if (deviceRunState == 'up') {
+          deviceRunState = 'center-m';
+          play('center');
+        }
+        if (deviceRunState == 'center') {
+          deviceRunState = 'down-m';
+          play('down');
+        }
+        if (deviceRunState == 'down') {
+          deviceRunState = 'up-m';
+          play('up');
+        }
+      }
 
-        // //正在执行时
-
-        // // 判断上中下是否都为0
-        // if(selectData['poleIncipient'] == 0 && selectData['poleMiddle'] == 0 && selectData['poleNether'] == 0) {
-        //   // 判断是否有前一个状态值,有的话执行
-        //   //没有前一个状态
-
-        //   //有前一个状态
-
-        //   // 横杆前状态在上位时,横杆中位移动,探头在右边
+      // //正在执行时
 
-        //   // 横杆前状态在中位时,横杆下位移动,探头在左边
+      // // 判断上中下是否都为0
+      // if(selectData['poleIncipient'] == 0 && selectData['poleMiddle'] == 0 && selectData['poleNether'] == 0) {
+      //   // 判断是否有前一个状态值,有的话执行
+      //   //没有前一个状态
 
-        //   // 横杆前状态在下位时,横杆上位移动,探头在中间
+      //   //有前一个状态
 
-        // }else{
-        //   // 判断当前动画停在固定位置
-        //   if(selectData['poleIncipient'] == 1) {
-        //     // 滑杆停在上面,探头在中间
+      //   // 横杆前状态在上位时,横杆中位移动,探头在右边
 
-        //   }else if (selectData['poleMiddle'] == 1) {
-        //     // 滑杆停在中间面,初始探头在右边
+      //   // 横杆前状态在中位时,横杆下位移动,探头在左边
 
-        //   } else if (selectData['poleNether'] == 1) {
-        //     // 滑杆停在下面,初始探头在左边
+      //   // 横杆前状态在下位时,横杆上位移动,探头在中间
 
-        //   }
-        // }
-      } else {
-        // if(selectData['poleIncipient'] == 1){
-        //   deviceRunState = ''
-        //   tanTouRunState = ''
-        // }
-      }
-    }
+      // }else{
+      //   // 判断当前动画停在固定位置
+      //   if(selectData['poleIncipient'] == 1) {
+      //     // 滑杆停在上面,探头在中间
 
-    if (selectData.deviceType == 'windrect_rect') {
-      if (selectData['apparatusRun'] == 1) {
-        const flag = selectData.sign == '0' ? 'center' : selectData.sign == 1 ? 'down' : selectData.sign == 2 ? 'up' : null;
-        if (flag) play(flag);
-      } else {
-        const flag = selectData.sign == 1 ? 'center' : selectData.sign == 2 ? 'down' : selectData.sign == '0' ? 'up' : null;
-        if (flag) play(flag, true);
-      }
-    }
+      //   }else if (selectData['poleMiddle'] == 1) {
+      //     // 滑杆停在中间面,初始探头在右边
 
-    if (selectData.deviceType == 'windrect_ds') {
-      if (selectData['apparatusRun'] == 1 && selectData['sign'] == 2) {
-        if (!deviceRunState) {
-          deviceRunState = 'start';
-          play('down');
-        }
-      } else if (selectData['apparatusRun'] == 0 && selectData['sign'] == 0 && deviceRunState == 'start') {
-        deviceRunState = '';
-        play('up');
-      }
-    }
-  }
+      //   } else if (selectData['poleNether'] == 1) {
+      //     // 滑杆停在下面,初始探头在左边
 
-  // 自测动画方法
-  function testPlay(flag) {
-    if (selectData.deviceType == 'windrect_rect') {
-      setTimeout(() => {
-        play('center');
-      }, 0);
-      setTimeout(() => {
-        play('down');
-      }, 4000);
-      setTimeout(() => {
-        play('up');
-      }, 10000);
-    }
-    if (selectData.deviceType == 'windrect_normal') {
-      setTimeout(() => {
-        play('up');
-      }, 0);
-      setTimeout(() => {
-        play('center');
-      }, 10000);
-      setTimeout(() => {
-        play('down');
-      }, 18000);
-      setTimeout(() => {
-        play('up');
-      }, 21000);
-    }
-    if (selectData.deviceType == 'windrect_ds') {
-      play('moni');
+      //   }
+      // }
+    } else {
+      // if(selectData['poleIncipient'] == 1){
+      //   deviceRunState = ''
+      //   tanTouRunState = ''
+      // }
     }
   }
 
-  function clearPlay() {
-    modalType.value = 'autoClear';
-    modalIsShow.value = true;
-    if (globalConfig?.simulatedPassword) {
-      controlDevice('', modalType.value);
+  if (selectData.deviceType == 'windrect_rect') {
+    if (selectData['apparatusRun'] == 1) {
+      const flag = selectData.sign == '0' ? 'center' : selectData.sign == 1 ? 'down' : selectData.sign == 2 ? 'up' : null;
+      if (flag) play(flag);
+    } else {
+      const flag = selectData.sign == 1 ? 'center' : selectData.sign == 2 ? 'down' : selectData.sign == '0' ? 'up' : null;
+      if (flag) play(flag, true);
     }
   }
 
-  function startRun() {
-    modalType.value = 'sing';
-    modalIsShow.value = true;
-    if (globalConfig?.simulatedPassword) {
-      controlDevice('', modalType.value);
-    }
-  }
-  // 切换检测数据
-  async function getSelectRow(selectRow, index) {
-    if (selectRow) {
-      loading.value = true;
-      selectRowIndex.value = index;
-      Object.assign(selectData, selectRow);
-      let type = '';
-      if (selectRow['modelType']) {
-        type = selectRow['modelType'];
-        debugger;
-      } else {
-        if (selectRow.deviceType.startsWith('windrect_rect')) {
-          type = 'lmWindRect';
-        }
-        if (selectRow.deviceType.startsWith('windrect_normal')) {
-          type = 'zdWindRect';
-        }
-        if (selectRow.deviceType.startsWith('windrect_rect_single')) {
-          type = 'lmWindSide';
-        }
-        if (selectRow.deviceType.startsWith('windrect_ds')) {
-          type = 'dsWindRect_move';
-          // type = 'duisheFixed';
-        }
-        if (selectRow.deviceType.startsWith('windrect_ds_four')) {
-          //windrect_ds_two
-          type = 'dsWindRect_four';
-        }
-        if (selectRow.deviceType.startsWith('windrect_ds_two')) {
-          type = 'dsWindRect_two';
-        }
-        if (selectRow.deviceType.startsWith('windrect_ds_sut') || selectRow.deviceType.startsWith('windrect_muti')) {
-          type = 'duisheFixed';
-        }
-        if (
-          selectRow.deviceType.startsWith('windrect_dd') ||
-          selectRow.deviceType == 'windrect_safety' ||
-          selectRow.deviceType == 'windrect_sensor'
-        ) {
-          type = 'ddWindSide';
-        }
+  if (selectData.deviceType == 'windrect_ds') {
+    if (selectData['apparatusRun'] == 1 && selectData['sign'] == 2) {
+      if (!deviceRunState) {
+        deviceRunState = 'start';
+        play('down');
       }
-
-      // const type = selectRowIndex.value >= 1 ? 'lmWindRect' : selectRowIndex.value <= 3 ? 'zdWindRect' : 'dsWindRect';
-      await setModelType(type);
-      loading.value = false;
+    } else if (selectData['apparatusRun'] == 0 && selectData['sign'] == 0 && deviceRunState == 'start') {
       deviceRunState = '';
-      tanTouRunState = '';
-      await getCamera(selectRow.deviceID, playerRef.value);
+      play('up');
     }
   }
-
-  /* 一键测风 */
-  function handleOk() {
-    modalType.value = 'multiple';
-    modalIsShow.value = true;
-    if (globalConfig?.simulatedPassword) {
-      controlDevice('', modalType.value);
-    }
+}
+
+// 自测动画方法
+function testPlay(flag) {
+  if (selectData.deviceType == 'windrect_rect') {
+    setTimeout(() => {
+      play('center');
+    }, 0);
+    setTimeout(() => {
+      play('down');
+    }, 4000);
+    setTimeout(() => {
+      play('up');
+    }, 10000);
   }
-
-  /* 打开一键测风弹窗 */
-  function openModel() {
-    setModalProps({ visible: true });
+  if (selectData.deviceType == 'windrect_normal') {
+    setTimeout(() => {
+      play('up');
+    }, 0);
+    setTimeout(() => {
+      play('center');
+    }, 10000);
+    setTimeout(() => {
+      play('down');
+    }, 18000);
+    setTimeout(() => {
+      play('up');
+    }, 21000);
   }
-
-  function resetHandle() {
-    modalType.value = 'resetWind';
-    modalIsShow.value = true;
+  if (selectData.deviceType == 'windrect_ds') {
+    play('moni');
   }
+}
 
-  function exportExcel(id) {
-    exportXls({ testid: id });
+function clearPlay() {
+  modalType.value = 'autoClear';
+  modalIsShow.value = true;
+  if (globalConfig?.simulatedPassword) {
+    controlDevice('', modalType.value);
   }
+}
 
-  /* 关闭一键测风弹窗 */
-  function handleCancel() {
-    setModalProps({ visible: false });
-    modalTable.value.clearSelectedRowKeys();
+function startRun() {
+  modalType.value = 'sing';
+  modalIsShow.value = true;
+  if (globalConfig?.simulatedPassword) {
+    controlDevice('', modalType.value);
   }
+}
+// 切换检测数据
+async function getSelectRow(selectRow, index) {
+  if (selectRow) {
+    loading.value = true;
+    selectRowIndex.value = index;
+    Object.assign(selectData, selectRow);
+    let type = '';
+    if (selectRow['modelType']) {
+      type = selectRow['modelType'];
+      // debugger;
+    } else {
+      if (selectRow.deviceType.startsWith('windrect_rect')) {
+        type = 'lmWindRect';
+      }
+      if (selectRow.deviceType.startsWith('windrect_normal')) {
+        type = 'zdWindRect';
+      }
+      if (selectRow.deviceType.startsWith('windrect_rect_single')) {
+        type = 'lmWindSide';
+      }
+      if (selectRow.deviceType.startsWith('windrect_ds')) {
+        type = 'dsWindRect_move';
+        // type = 'duisheFixed';
+      }
+      if (selectRow.deviceType.startsWith('windrect_ds_four')) {
+        //windrect_ds_two
+        type = 'dsWindRect_four';
+      }
+      if (selectRow.deviceType.startsWith('windrect_ds_two')) {
+        type = 'dsWindRect_two';
+      }
+      if (selectRow.deviceType.startsWith('windrect_ds_sut') || selectRow.deviceType.startsWith('windrect_muti')) {
+        type = 'duisheFixed';
+      }
+      if (selectRow.deviceType.startsWith('windrect_dd') || selectRow.deviceType == 'windrect_safety' || selectRow.deviceType == 'windrect_sensor') {
+        type = 'ddWindSide';
+      }
+    }
 
-  /* 关闭一键测风控制*/
-  function handleCancelControl() {
-    modalIsShow.value = false;
+    // const type = selectRowIndex.value >= 1 ? 'lmWindRect' : selectRowIndex.value <= 3 ? 'zdWindRect' : 'dsWindRect';
+    await setModelType(type);
+    loading.value = false;
+    deviceRunState = '';
+    tanTouRunState = '';
+    await getCamera(selectRow.deviceID, playerRef.value);
   }
-
-  function controlDevice(passWord, type) {
-    try {
-      if (type == 'sing') {
-        testWind({
-          ids: [selectData.deviceID],
-          maxnum: 1000,
-          windnum: 1,
-          password: passWord || globalConfig?.simulatedPassword,
-        }).then((res) => {
-          if (res && res.success === false) {
-            message.error(res.message);
+}
+
+/* 一键测风 */
+function handleOk() {
+  modalType.value = 'multiple';
+  modalIsShow.value = true;
+  if (globalConfig?.simulatedPassword) {
+    controlDevice('', modalType.value);
+  }
+}
+
+/* 打开一键测风弹窗 */
+function openModel() {
+  setModalProps({ visible: true });
+}
+
+function resetHandle() {
+  modalType.value = 'resetWind';
+  modalIsShow.value = true;
+}
+
+function exportExcel(id) {
+  exportXls({ testid: id });
+}
+
+/* 关闭一键测风弹窗 */
+function handleCancel() {
+  setModalProps({ visible: false });
+  modalTable.value.clearSelectedRowKeys();
+}
+
+/* 关闭一键测风控制*/
+function handleCancelControl() {
+  modalIsShow.value = false;
+}
+
+function controlDevice(passWord, type) {
+  try {
+    if (type == 'sing') {
+      testWind({
+        ids: [selectData.deviceID],
+        maxnum: 1000,
+        windnum: 1,
+        password: passWord || globalConfig?.simulatedPassword,
+      }).then((res) => {
+        if (res && res.success === false) {
+          message.error(res.message);
+        } else {
+          if (globalConfig.History_Type == 'remote') {
+            message.success('指令已下发至生产管控平台成功!');
           } else {
-            if (globalConfig.History_Type == 'remote') {
-              message.success('指令已下发至生产管控平台成功!');
-            } else {
-              message.success('指令已下发成功!');
-            }
+            message.success('指令已下发成功!');
           }
-          modalIsShow.value = false;
-        });
-      } else if (type == 'multiple') {
-        const ids = toRaw(modalTable.value.selectedRowKeys);
-        testWind({
-          ids: ids,
-          maxnum: 1000,
-          windnum: modalTable.value.selectedRowKeys.length,
-          password: passWord || globalConfig?.simulatedPassword,
-        }).then((res) => {
-          if (res && res.success === false) {
-            message.error(res.message);
+        }
+        modalIsShow.value = false;
+      });
+    } else if (type == 'multiple') {
+      const ids = toRaw(modalTable.value.selectedRowKeys);
+      testWind({
+        ids: ids,
+        maxnum: 1000,
+        windnum: modalTable.value.selectedRowKeys.length,
+        password: passWord || globalConfig?.simulatedPassword,
+      }).then((res) => {
+        if (res && res.success === false) {
+          message.error(res.message);
+        } else {
+          if (globalConfig.History_Type == 'remote') {
+            message.success('指令已下发至生产管控平台成功!');
           } else {
-            if (globalConfig.History_Type == 'remote') {
-              message.success('指令已下发至生产管控平台成功!');
-            } else {
-              message.success('指令已下发成功!');
-            }
+            message.success('指令已下发成功!');
           }
-          modalIsShow.value = false;
-          setModalProps({ visible: false });
-          modalTable.value.clearSelectedRowKeys();
-        });
-      } else if (type == 'autoClear') {
-        const data = {
-          deviceid: selectData.deviceID,
-          devicetype: selectData.deviceType,
-          paramcode: 'autoClear',
-          value: null,
-          password: passWord || globalConfig?.simulatedPassword,
-          masterComputer: selectData.masterComputer,
-        };
-        deviceControlApi(data).then((res) => {
-          // 模拟时开启
-          if (res.success) {
-            if (globalConfig.History_Type == 'remote') {
-              message.success('指令已下发至生产管控平台成功!');
-            } else {
-              message.success('指令已下发成功!');
-            }
+        }
+        modalIsShow.value = false;
+        setModalProps({ visible: false });
+        modalTable.value.clearSelectedRowKeys();
+      });
+    } else if (type == 'autoClear') {
+      const data = {
+        deviceid: selectData.deviceID,
+        devicetype: selectData.deviceType,
+        paramcode: 'autoClear',
+        value: null,
+        password: passWord || globalConfig?.simulatedPassword,
+        masterComputer: selectData.masterComputer,
+      };
+      deviceControlApi(data).then((res) => {
+        // 模拟时开启
+        if (res.success) {
+          if (globalConfig.History_Type == 'remote') {
+            message.success('指令已下发至生产管控平台成功!');
           } else {
-            message.error(res.message);
+            message.success('指令已下发成功!');
           }
-          modalIsShow.value = false;
-        });
-      } else if (type == 'resetWind') {
-        resetWind({}).then((res: any) => {
-          message.info(res);
-        });
+        } else {
+          message.error(res.message);
+        }
         modalIsShow.value = false;
-      }
-    } catch (error) {
-      message.error('测风失败,请联系管理员。。。');
+      });
+    } else if (type == 'resetWind') {
+      resetWind({}).then((res: any) => {
+        message.info(res);
+      });
       modalIsShow.value = false;
     }
+  } catch (error) {
+    message.error('测风失败,请联系管理员。。。');
+    modalIsShow.value = false;
   }
+}
 
-  /** 避灾路线上的测风装置 */
-  async function getPathList() {
-    const pathArr = await pathList({});
-    criticalPathList.value = pathArr.records.filter((item) => {
-      return item.strsystype == 3;
-    });
-  }
-
-  /* 根据路线选择测风装置 */
-  function selectCriticalPath(pathId) {
-    deviceList({ deviceType: 'wind', sysId: pathId }).then((res) => {
-      const ids: string[] = [];
-      res.records.forEach((item) => {
-        ids.push(item.id);
-      });
-      if (modalTable.value) modalTable.value.setSelectedRowKeys(ids);
-    });
-  }
-
-  function deviceEdit(e: Event, type: string, record) {
-    e.stopPropagation();
-    openModal(true, {
-      type,
-      deviceId: record['deviceID'],
-    });
-  }
-
-  onBeforeMount(() => {
-    getPathList();
+/** 避灾路线上的测风装置 */
+async function getPathList() {
+  const pathArr = await pathList({});
+  criticalPathList.value = pathArr.records.filter((item) => {
+    return item.strsystype == 3;
   });
-
-  onMounted(async () => {
-    // const playerDom = document.getElementById('cf-player1')?.getElementsByClassName('vjs-tech')[0];
-    // loading.value = true;
-    // mountedThree(playerDom).then(async () => {
-    //   getMonitor(true);
-    //   // loading.value = false;
-    // });
-    const { query } = unref(currentRoute);
-    if (query['deviceType']) deviceType.value = query['deviceType'] as string;
-    loading.value = true;
-    mountedThree(null).then(async () => {
-      await getMonitor(true);
-      loading.value = false;
+}
+
+/* 根据路线选择测风装置 */
+function selectCriticalPath(pathId) {
+  deviceList({ deviceType: 'wind', sysId: pathId }).then((res) => {
+    const ids: string[] = [];
+    res.records.forEach((item) => {
+      ids.push(item.id);
     });
+    if (modalTable.value) modalTable.value.setSelectedRowKeys(ids);
   });
+}
 
-  onUnmounted(() => {
-    removeCamera();
-    if (timer) {
-      clearTimeout(timer);
-      timer = undefined;
-    }
-    destroy();
+function deviceEdit(e: Event, type: string, record) {
+  e.stopPropagation();
+  openModal(true, {
+    type,
+    deviceId: record['deviceID'],
   });
-</script>
-<style scoped lang="less">
-  @import '/@/design/theme.less';
-  @import '/@/design/vent/modal.less';
-  @ventSpace: zxm;
+}
+
+onBeforeMount(() => {
+  getPathList();
+});
+
+onMounted(async () => {
+  // const playerDom = document.getElementById('cf-player1')?.getElementsByClassName('vjs-tech')[0];
+  // loading.value = true;
+  // mountedThree(playerDom).then(async () => {
+  //   getMonitor(true);
+  //   // loading.value = false;
+  // });
+  const { query } = unref(currentRoute);
+  if (query['deviceType']) deviceType.value = query['deviceType'] as string;
+  loading.value = true;
+  mountedThree(null).then(async () => {
+    await getMonitor(true);
+    loading.value = false;
+  });
+});
 
-  :deep(.@{ventSpace}-tabs-tabpane-active) {
-    height: 100%;
+onUnmounted(() => {
+  removeCamera();
+  if (timer) {
+    clearTimeout(timer);
+    timer = undefined;
   }
-  .scene-box {
-    .bottom-tabs-box {
-      height: 350px;
-    }
+  destroy();
+});
+</script>
+<style scoped lang="less">
+@import '/@/design/theme.less';
+@import '/@/design/vent/modal.less';
+@ventSpace: zxm;
+
+:deep(.@{ventSpace}-tabs-tabpane-active) {
+  height: 100%;
+}
+.scene-box {
+  .bottom-tabs-box {
+    height: 350px;
   }
-  .head-line {
+}
+.head-line {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  .button-box {
+    position: relative;
+    padding: 5px;
+    border: 1px transparent solid;
+    border-radius: 5px;
+    margin-left: 8px;
+    margin-right: 8px;
+    width: auto;
+    height: 34px;
+    border: 1px solid var(--vent-base-border);
     display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-    .button-box {
-      position: relative;
-      padding: 5px;
-      border: 1px transparent solid;
-      border-radius: 5px;
-      margin-left: 8px;
-      margin-right: 8px;
-      width: auto;
-      height: 34px;
-      border: 1px solid var(--vent-base-border);
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      color: var(--vent-font-color);
-      padding: 0 15px;
-      cursor: pointer;
-      pointer-events: auto;
-      &:hover {
-        background: var(--vent-device-manager-control-btn-hover);
-      }
-      &::before {
-        width: calc(100% - 6px);
-        height: 26px;
-        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);
-      }
+    align-items: center;
+    justify-content: center;
+    color: var(--vent-font-color);
+    padding: 0 15px;
+    cursor: pointer;
+    pointer-events: auto;
+    &:hover {
+      background: var(--vent-device-manager-control-btn-hover);
+    }
+    &::before {
+      width: calc(100% - 6px);
+      height: 26px;
+      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);
     }
   }
-  :deep(.@{ventSpace}-picker-datetime-panel) {
-    height: 200px !important;
-    overflow-y: auto !important;
-  }
+}
+:deep(.@{ventSpace}-picker-datetime-panel) {
+  height: 200px !important;
+  overflow-y: auto !important;
+}
 </style>

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

@@ -11,6 +11,7 @@ enum Api {
   cameraList = '/safety/ventanalyCamera/list',
   cameraAddrList = '/monitor/camera/info',
   resetWind = '/safety/ventanalyCommand/resettestwind',
+  getRegulation = '/monitor/getDeviceRegulation',
 }
 /**
  * 导出api
@@ -56,3 +57,5 @@ export const cameraAddrList = (params) => defHttp.post({ url: Api.cameraAddrList
 export const cameraList = (params) => defHttp.get({ url: Api.cameraList, params });
 
 export const exportXls = (params) => defHttp.post({ url: Api.importExcel, params });
+
+export const getRegulation = () => defHttp.post({ url: Api.getRegulation });

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