lxh 3 місяців тому
батько
коміт
b7de3b9847

+ 145 - 29
src/views/vent/safetyList/index.vue

@@ -47,19 +47,25 @@
         <a-table size="small" :scroll="{ y: 710 }" :columns="columns" :data-source="tableData" :pagination="pagination"
           @change="pageChange">
           <template #action="{ record }">
-            <a-button v-if="!record.devInfoList" type="primary" style="margin-right:10px" :disabled="record.linkId != '0'" size="small"
+            <a-button v-if="!record.devInfoList" type="primary" :disabled="record.linkId != '0'" size="small"
               @click="handlerunDeviceMonitor(record, '启动')">启动</a-button>
-            <a-button type="success" size="small" @click="handlerunDeviceMonitor(record, '编辑')">编辑</a-button>
+            <a-button type="success" size="small" style="margin: 0px 10px"
+              @click="handlerunDeviceMonitor(record, '编辑')">编辑</a-button>
+            <a-button type="primary" size="small" @click="debugClick(record)">{{ record.debugTitle
+              }}</a-button>
           </template>
           <template #bodyCell="{ column, text }">
             <template v-if="column.dataIndex === 'valueJc' && text">
               <div v-for="item in text.split(',')" :key="item">
-                <span v-if="item.substring(item.indexOf(':') + 1) && !isNaN(parseFloat(item.substring(item.indexOf(':') + 1)))"
+                <span
+                  v-if="item.substring(item.indexOf(':') + 1) && !isNaN(parseFloat(item.substring(item.indexOf(':') + 1)))"
                   style="display: inline-block;width: 45%;text-align: right; color:rgb(0, 242, 255);margin-right:5px">{{
                     item.substring(0, item.indexOf(':') + 1) }}</span>
-                <span  v-if="item.substring(item.indexOf(':') + 1) && !isNaN(parseFloat(item.substring(item.indexOf(':') + 1)))"
+                <span
+                  v-if="item.substring(item.indexOf(':') + 1) && !isNaN(parseFloat(item.substring(item.indexOf(':') + 1)))"
                   style="display: inline-block; width:50%;text-align: left; color:#fff">{{
-                    item.substring(item.indexOf(':') + 1)==='1' ? '正风' :   item.substring(item.indexOf(':') + 1)==='2' ? '反风' :  item.substring(item.indexOf(':') + 1) }} </span>
+                    item.substring(item.indexOf(':') + 1) === '1' ? '正风' : item.substring(item.indexOf(':') + 1) === '2' ?
+                      '反风' : item.substring(item.indexOf(':') + 1) }} </span>
               </div>
             </template>
 
@@ -70,7 +76,7 @@
           @cancel="handleCancel">
           <a-form :model="startupData" labelAlign="right" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
             <a-form-item label="安装位置">
-              <a-input v-model:value="startupData.address"  placeholder="请输入" style="width: 260px" />
+              <a-input v-model:value="startupData.address" placeholder="请输入" style="width: 260px" />
             </a-form-item>
           </a-form>
         </a-modal>
@@ -79,7 +85,22 @@
           @ok="handleOkEdit" @cancel="handleCancelEdit">
           <a-form :model="startupDataEdit" labelAlign="right" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
             <a-form-item label="安装位置">
-              <a-input v-model:value="startupDataEdit.address"  placeholder="请输入" style="width: 260px" />
+              <a-input v-model:value="startupDataEdit.address" placeholder="请输入" style="width: 260px" />
+            </a-form-item>
+          </a-form>
+        </a-modal>
+        <!-- 调试弹窗 -->
+        <a-modal style="top:300px;left:360px" v-model:visible="visibleModalDebug" :width="450" title="调试信息"
+          @ok="handleOkDebug" @cancel="handleCancelDebug">
+          <a-form :model="startupDataDebug" labelAlign="right" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
+            <a-form-item label="风速">
+              <a-input v-model:value="startupDataDebug.speed" placeholder="请输入" style="width: 260px" />
+            </a-form-item>
+            <a-form-item label="风向">
+              <a-select v-model:value="startupDataDebug.direction" style="width: 260px">
+                <a-select-option v-for="file in derictList" :key="file.label" :value="file.value">{{ file.label
+                  }}</a-select-option>
+              </a-select>
             </a-form-item>
           </a-form>
         </a-modal>
@@ -91,9 +112,21 @@
 <script setup lang="ts">
 import { ref, nextTick, reactive, onMounted, onUnmounted } from 'vue';
 import customHeader from '/@/components/vent/customHeader.vue';
-import { subStationList, getList, getEdit, runDeviceMonitor, update158DevName } from './safetyList.api';
+import { subStationList, getList, getEdit, runDeviceMonitor, update158DevName, updateDebugStatus } from './safetyList.api';
 import { columns } from './safetyList.data'
 
+let visibleModalDebug = ref(false)
+let debugFlag = ref('')
+let debugStationId = ref('')
+let debugDeviceId = ref('')
+let startupDataDebug = reactive({
+  speed: '',
+  direction: '',
+})
+let derictList = reactive<any[]>([
+  { label: '正向', value: '1' },
+  { label: '反向', value: '0' }
+])
 let paramId = ref('')
 let isShow = ref(false)
 let stationName = ref('')
@@ -131,25 +164,25 @@ let startupDataEdit = reactive({
   address: ''
 })
 
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor(flag = false) {
-  timer = setTimeout(
-    async () => {
-      // await getSubStationList()
-      await getStationList()
-      if (timer) {
-        timer = null;
-      }
-      getMonitor();
-    },
-    flag ? 0 : 5000
-  );
-}
+
+// // https获取监测数据
+// let timer: null | NodeJS.Timeout = null;
+// function getMonitor(flag = false) {
+//   timer = setTimeout(
+//     async () => {
+//       // await getSubStationList()
+//       await getStationList()
+//       if (timer) {
+//         timer = null;
+//       }
+//       getMonitor();
+//     },
+//     flag ? 0 : 5000
+//   );
+// }
 //获取分站信息
 async function getSubStationList() {
   let res = await subStationList({ strtype: "modbus" })
-  console.log(res, '分站-----------')
   if (res.length != 0) {
     cardList.value = res
     openNum.value = cardList.value?.filter(v => v.linkstatus == 1)['length']
@@ -160,7 +193,6 @@ async function getSubStationList() {
 }
 //站点选项点击
 function cardClick(item, index) {
-  console.log(item, '站点选项------------')
   activeIndex.value = item.isNewAccess ? index : null
   stationName.value = item.strname
   stationStatus.value = item.linkstatus
@@ -178,21 +210,21 @@ function changeStatus(val) {
 }
 async function getChangeStation() {
   let res = await getEdit({ id: stationId.value, strname: stationName.value, linkstatus: stationStatus.value })
-  console.log(res, '站点编辑')
   getSubStationList()
   isShow.value = false
 }
 //获取详细信息列表
 async function getStationList() {
   let res = await getList({ subId: stationId.value, pageNo: pagination.current, pageSize: pagination.pageSize, })
-  console.log(res, '详细信息列表--------')
   res.forEach(el => {
     el.key = el.id
     el.linkstatusC = el.linkstatus ? '连接' : '未连接'
+    el.debugTitle = '调试'
     el.children = el.devInfoList
     el.children.forEach(v => {
       v.key = v.id
       v.linkstatus = v.linkId
+      v.debugTitle = '调试'
       v.linkstatusC = v.linkstatus == '0' ? '待启用' : v.linkstatus == '1' ? '连接' : '断开'
       v.updateTime = v.time
       v.valueJc = `风向:${v.forward || ''},风量:${v.m3 || ''}m³/min,风速:${v.windSpeed || ''}m/s,气压:${v.difPress || ''}Pa,温度:${v.temperature || ''}℃,湿度:${v.humidity || ''}%,断面积:${v.area || ''}㎡`
@@ -223,9 +255,92 @@ function handlerunDeviceMonitor(record, val) {
       break;
   }
 }
+//分站,设备调试
+function debugClick(record) {
+  if (record.debugTitle == '调试') {
+    //正在调试中
+    startupDataDebug.speed = ''
+    startupDataDebug.direction = ''
+    visibleModalDebug.value = true
+    if (record.devInfoList) {
+      debugFlag.value = 'station'
+      debugStationId.value = record.id
+      tableData.value.forEach(el => {
+        el.debugTitle = '结束调试'
+        el.devInfoList.forEach(v => {
+          v.debugTitle = '结束调试'
+        })
+      })
+    } else {
+      debugFlag.value = 'device'
+      debugDeviceId.value = record.id
+      tableData.value.forEach(el => {
+        el.devInfoList.forEach(v => {
+          if (v.id == debugDeviceId.value) {
+            debugStationId.value = el.id
+          }
+        })
+      })
+      record.debugTitle = '结束调试'
+    }
+  } else {
+    if (record.devInfoList) {
+      debugFlag.value = 'station'
+      debugStationId.value = record.id
+      tableData.value.forEach(el => {
+        el.debugTitle = '调试'
+        el.devInfoList.forEach(v => {
+          v.debugTitle = '调试'
+        })
+      })
+      stopDebug()
+    } else {
+      debugFlag.value = 'device'
+      debugDeviceId.value = record.id
+      tableData.value.forEach(el => {
+        el.devInfoList.forEach(v => {
+          if (v.id == debugDeviceId.value) {
+            debugStationId.value = el.id
+          }
+        })
+      })
+      record.debugTitle = '调试'
+      stopDebug()
+    }
+  }
+
+}
+//调试确认
+async function handleOkDebug() {
+  if (debugFlag.value == 'station') {
+    let res = await updateDebugStatus({ stationId: debugStationId.value, speed: startupDataDebug.speed, direction: startupDataDebug.direction, debugFlag: '1' })
+    visibleModalDebug.value = false
+    getStationList()
+  } else {
+    let res = await updateDebugStatus({ stationId: debugStationId.value, deviceId: debugDeviceId.value, speed: startupDataDebug.speed, direction: startupDataDebug.direction, debugFlag: '1' })
+    visibleModalDebug.value = false
+    getStationList()
+  }
+}
+//调试取消
+function handleCancelDebug() {
+  visibleModalDebug.value = false
+  debugFlag.value = ''
+  debugStationId.value = ''
+  debugDeviceId.value = ''
+}
+//停止调试
+async function stopDebug() {
+  if (debugFlag.value == 'station') {
+    let res = await updateDebugStatus({ stationId: debugStationId.value, debugFlag: '0' })
+    getStationList()
+  } else {
+    let res = await updateDebugStatus({ stationId: debugStationId.value, deviceId: debugDeviceId.value, debugFlag: '0' })
+    getStationList()
+  }
+}
 async function handleOk() {
   let res = await runDeviceMonitor({ devId: devId.value, devName: startupData.address })
-  console.log(res, '新设备启动---')
   visibleModal.value = false
   getStationList();
 }
@@ -255,7 +370,8 @@ function handleCancelEdit() {
 
 onMounted(() => {
   getSubStationList()
-  getMonitor(true);
+  // getMonitor(true);
+  getStationList()
 })
 onUnmounted(() => {
   if (timer) {

+ 5 - 2
src/views/vent/safetyList/safetyList.api.ts

@@ -5,7 +5,8 @@ enum Api {
   getList='/safety/ventanalyDeviceInfo/getDeviceListBySubId',
   getEdit='/safety/ventanalySubStation/edit',
   runDeviceMonitor='/safety/ventanalyDeviceInfo/runDeviceMonitor',
-  update158DevName='/safety/ventanalyDeviceInfo/update158DevName'
+  update158DevName='/safety/ventanalyDeviceInfo/update158DevName',
+  updateDebugStatus='/safety/ventanalyDeviceInfo/updateDebugStatus'
 }
 
 
@@ -18,4 +19,6 @@ export const getEdit = (params) => defHttp.put({ url: Api.getEdit, params });
 //启动新设备
 export const runDeviceMonitor = (params) => defHttp.post({ url: Api.runDeviceMonitor, params });
 //编辑设备名称
-export const update158DevName = (params) => defHttp.post({ url: Api.update158DevName, params });
+export const update158DevName = (params) => defHttp.post({ url: Api.update158DevName, params });
+// 分站设备调试
+export const updateDebugStatus = (params) => defHttp.post({ url: Api.updateDebugStatus,params },{ joinParamsToUrl: true });

+ 1 - 1
src/views/vent/safetyList/safetyList.data.ts

@@ -40,7 +40,7 @@ export const columns: BasicColumn[] = [
     {
         title: '操作',
         dataIndex: 'action',
-        width: 200,
+        width: 250,
         align: 'center',
         slots: { customRender: 'action' },
     },