Преглед на файлове

风门同控-设备集控更新

lxh преди 5 месеца
родител
ревизия
df4a909272

+ 2 - 2
.env

@@ -1,5 +1,5 @@
 # port
-VITE_PORT = 8062
+VITE_PORT = 3100
 
 #  网站标题
 VITE_GLOB_APP_TITLE = 智能通风管控系统
@@ -19,4 +19,4 @@ VITE_GLOB_APP_OPEN_SSO=true
 VITE_GLOB_APP_OPEN_QIANKUN=true
 
 # 文件预览地址
-VITE_GLOB_ONLINE_VIEW_URL=http://fileview.jeecg.com/onlinePreview
+VITE_GLOB_ONLINE_VIEW_URL=http://fileview.jeecg.com/onlinePreview

+ 7 - 1
src/views/vent/monitorManager/airDoor/airdoor.api.ts

@@ -11,7 +11,9 @@ enum Api {
   upcoming = '/ventanaly-device/synccontrol/upcoming',
   GetSyncRule='/ventanaly-device/synccontrol/upcoming/GetSyncRule',
   GetSyncRuleOperationLog='/ventanaly-device/synccontrol/upcoming/GetSyncRuleOperationLog',
-  GetSyncRuleExecLog='/ventanaly-device/synccontrol/upcoming/GetSyncRuleExecLog'
+  GetSyncRuleExecLog='/ventanaly-device/synccontrol/upcoming/GetSyncRuleExecLog',
+  list='/safety/ventanalyDeviceInfo/list',
+  edit='/safety/ventanalyDeviceInfo/edit'
 }
 
 
@@ -59,4 +61,8 @@ export const GetSyncRuleOperationLog = (params) => defHttp.get({ url: Api.GetSyn
 
 //读取集控风门操作日志
 export const GetSyncRuleExecLog = (params) => defHttp.get({ url: Api.GetSyncRuleExecLog, params });
+//集控风门列表
+export const controlList = (params) => defHttp.get({ url: Api.list, params });
+//集控风门-确认选中
+export const confirmChoice = (params) => defHttp.put({ url: Api.edit, params });
 

+ 86 - 0
src/views/vent/monitorManager/airDoor/components/deviceControl.vue

@@ -0,0 +1,86 @@
+<template>
+  <div class="device-control">
+    <div class="control-container">
+      <a-checkbox-group v-model:value="deviceChoiceList" class="check-box">
+        <a-row v-for="(item, index) in deviceControlData" :key="index" class="row-box">
+          <a-col :span="24">
+            <a-checkbox :value="item.id">{{ item.strinstallpos }}</a-checkbox>
+          </a-col>
+        </a-row>
+      </a-checkbox-group>
+      <a-button class="device-control-btn" type="primary" @click="confirmChoice">确定</a-button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+let props = defineProps({
+  deviceControlData: {
+    type: Array,
+    default: () => {
+      return []
+    }
+  }
+})
+const deviceChoiceList = ref([]);
+const $emit = defineEmits(['confirmChoice'])
+
+function confirmChoice() {
+  $emit('confirmChoice', deviceChoiceList.value)
+}
+
+</script>
+
+<style lang="less" scoped>
+@import '/@/design/theme.less';
+
+@{theme-deepblue} {
+  .door-content-r {
+    --image-left-bd: url('@/assets/images/themify/deepblue/home-container/configurable/wind-door/left-bd.png');
+  }
+}
+
+.device-control {
+  --image-left-bd: url('@/assets/images/home-container/configurable/wind-door/left-bd.png');
+  width: 200px;
+  height: 280px;
+  background-image: var(--image-left-bd);
+  background-size: 100% 100%;
+  position: absolute;
+  right: 35px;
+  top: 70px;
+
+  .control-container {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    width: calc(100% - 10px);
+    height: calc(100% - 10px);
+    margin: 4px;
+    padding: 5px 8px;
+    box-sizing: border-box;
+    background-color: rgba(54, 198, 254, .5);
+  }
+
+  .check-box {
+    width: 100%;
+    height: 230px;
+    overflow: hidden;
+    overflow-y: auto;
+  }
+
+  .row-box {
+    margin: 10px 0px;
+  }
+
+  .zxm-checkbox-wrapper {
+    color: #fff;
+  }
+  .device-control-btn{
+    position: absolute;
+    bottom: 5px;
+  }
+}
+</style>

+ 53 - 11
src/views/vent/monitorManager/airDoor/components/door-content-r.vue

@@ -14,6 +14,7 @@
         定时设置
       </a-button>
       <a-button style="margin: 0px 10px" type="primary" @click="handlerOperation">操作日志</a-button>
+      <a-button class="device-control-btn" type="primary" @click="handlerDeviceChoice">集控设备选择</a-button>
     </div>
     <div class="content-r-container">
       <div class="content-r-box" v-for="(item, index) in infoDatas" :key="index">
@@ -38,7 +39,7 @@
           </div>
           <div>
             <span>启用状态:</span>
-            <span  class="set-time">启用</span>
+            <span class="set-time">启用</span>
           </div>
           <div>
             <span>定时关闭时间:</span>
@@ -62,11 +63,14 @@
     <!-- 操作日志 -->
     <operationModal :visible="visibleOperation" @handleCancel="handleCancelOperation">
     </operationModal>
+    <!-- 集控设备选择 -->
+    <DeviceControl v-if="visibleDeviceControl" :deviceControlData="gateControlData" @confirmChoice="handlerChoice">
+    </DeviceControl>
   </div>
 </template>
 
 <script setup lang="ts">
-import { reactive, ref, inject, watch, nextTick } from 'vue';
+import { reactive, ref, inject, watch, nextTick, onMounted } from 'vue';
 import syncModal from './syncModal.vue';
 import timeSetModal from './timeSetModal.vue';
 import CameraModal from './cameraModal.vue';
@@ -75,8 +79,9 @@ import tipModal from './tipModal.vue'
 import gateDualSVG from './gateDualSVG.ssl.vue'
 import gateSVG from './gateSVG.ssl.vue'
 import operationModal from './operationModal.vue'
+import DeviceControl from './deviceControl.vue'
 import { useRouter } from 'vue-router';
-import { devicecontrol, insertSyncRule, GetSyncRule } from '../airdoor.api'
+import { devicecontrol, insertSyncRule, GetSyncRule, controlList, confirmChoice } from '../airdoor.api'
 import { doorStatus } from '../airdoor.data'
 // import { getModelComponent } from '../airdoor.data'
 import { useMessage } from '/@/hooks/web/useMessage';
@@ -107,12 +112,14 @@ let cameraData = reactive({})
 //操作日志弹窗显示/关闭
 let visibleOperation = ref(false)
 const childRefs = ref<any[]>([])
+//集控风门列表
+let gateControlData = ref<any[]>([])
+//集控设备弹窗显示
+let visibleDeviceControl = ref(false)
+
 const setChildRef = (el, index) => {
   childRefs.value[index] = el
 }
-
-
-
 //同步开启/关闭--弹窗
 function handlerOpenOrClose(data) {
   visible.value = true;
@@ -150,8 +157,10 @@ async function handlerTimeSet() {
 //确定
 async function handleOkTime(param) {
   console.log(param, '定时参数---')
-  let start_time = `${param.formState.hourS}:${param.formState.minuteS}:${param.formState.secondS}`
-  let end_time = `${param.formState.hourE}:${param.formState.minuteE}:${param.formState.secondE}`
+  // let start_time = `${param.formState.hourS}:${param.formState.minuteS}:${param.formState.secondS}`
+  // let end_time = `${param.formState.hourE}:${param.formState.minuteE}:${param.formState.secondE}`
+   let start_time = `${param.formState.hourS}:${param.formState.minuteS}`
+  let end_time = `${param.formState.hourE}:${param.formState.minuteE}`
   let enabled = param.formState.checked ? '1' : '0'
   let res = await insertSyncRule({ startTime: start_time, endTime: end_time, enabled: enabled, id: Ids.value, password: param.formState.passWord })
   console.log(res, '设置定时---')
@@ -192,6 +201,30 @@ function handleCancelOperation(param) {
 function monitorAnimation(selectData, index) {
   childRefs.value[index]?.animate?.(selectData.frontGateOpen == '1', selectData.midGateOpen == '1', selectData.rearGateOpen == '1');
 }
+//获取集控风门列表
+async function getControlList() {
+  let res = await controlList({ devicekind: 'gate', pageNo: 1, pageSize: 100 })
+  gateControlData.value = res.records || []
+}
+//集控设备选择点击
+function handlerDeviceChoice() {
+  visibleDeviceControl.value = true
+}
+//集控设备确定选择
+async function handlerChoice(param) {
+  console.log(param, '选中')
+  let data: any[] = []
+  param.forEach(el => {
+    let list = gateControlData.value.find(v => v.id == el)
+    list.isAutosync='1'
+    data.push(list)
+  })
+  console.log(data, 'data---')
+  let res = await confirmChoice({ obj: data })
+  if (res) {
+    visibleDeviceControl.value = false
+  }
+}
 // function getInitSvg(param) {
 //   // const dictCodes = getDictItemsByCode('gateStyle');
 //   // console.log(dictCodes, 'dictCodes---')
@@ -199,7 +232,6 @@ function monitorAnimation(selectData, index) {
 
 
 watch(() => props.infoData, (newV, oldV) => {
-  console.log(newV, 'new---')
   infoDatas.value = newV
   if (newV.length) {
     nextTick(() => {
@@ -211,6 +243,9 @@ watch(() => props.infoData, (newV, oldV) => {
   }
 })
 
+onMounted(() => {
+  getControlList()
+})
 
 </script>
 
@@ -239,7 +274,13 @@ watch(() => props.infoData, (newV, oldV) => {
     height: 40px;
     padding: 0px 10px;
     display: flex;
+
     // align-items: center;
+    .device-control-btn {
+      position: absolute;
+      right: 35px;
+      top: 30px;
+    }
   }
 
   .content-r-container {
@@ -307,8 +348,9 @@ watch(() => props.infoData, (newV, oldV) => {
         color: #fff;
         font-size: 12px;
       }
-      .set-time{
-           color: rgba(60, 242, 255);
+
+      .set-time {
+        color: rgba(60, 242, 255);
       }
 
       img {

+ 9 - 9
src/views/vent/monitorManager/airDoor/components/timeSetModal.vue

@@ -3,7 +3,7 @@
     <a-modal v-model:visible="Visible" width="550px" :title="Title" centered destroyOnClose @ok="handleOk"
       @cancel="handleCancelTime">
 
-      <a-form :model="formState" name="basic" :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }" autocomplete="off">
+      <a-form :model="formState" name="basic" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" autocomplete="off">
         <a-form-item label="开启时间">
           <a-select ref="select" v-model:value="formState.hourS" style="width:130px" placeholder="请选择...">
             <a-select-option v-for="(item, index) in hourOption" :key="index" :value="item.value">{{ item.label
@@ -15,11 +15,11 @@
             }}</a-select-option>
           </a-select>
           <div class="unit">分</div>
-          <a-select ref="select" v-model:value="formState.secondS" style="width:130px" placeholder="请选择...">
+          <!-- <a-select ref="select" v-model:value="formState.secondS" style="width:130px" placeholder="请选择...">
             <a-select-option v-for="(item, index) in minuteOption" :key="index" :value="item.value">{{ item.label
             }}</a-select-option>
           </a-select>
-          <div class="unit">秒</div>
+          <div class="unit">秒</div> -->
         </a-form-item>
         <a-form-item label="关闭时间">
           <a-select ref="select" v-model:value="formState.hourE" style="width:130px" placeholder="请选择...">
@@ -32,11 +32,11 @@
             }}</a-select-option>
           </a-select>
           <div class="unit">分</div>
-          <a-select ref="select" v-model:value="formState.secondE" style="width:130px" placeholder="请选择...">
+          <!-- <a-select ref="select" v-model:value="formState.secondE" style="width:130px" placeholder="请选择...">
             <a-select-option v-for="(item, index) in minuteOption" :key="index" :value="item.value">{{ item.label
             }}</a-select-option>
           </a-select>
-          <div class="unit">秒</div>
+          <div class="unit">秒</div> -->
         </a-form-item>
         <a-form-item label="启动定时">
           <a-switch v-model:checked="formState.checked" />
@@ -68,10 +68,10 @@ let Visible = ref(false)
 let formState = reactive({
   hourS: '',
   minuteS: '',
-  secondS: '',
+  // secondS: '',
   hourE: '',
   minuteE: '',
-  secondE: '',
+  // secondE: '',
   checked: true,
   passWord: ''
 })
@@ -89,8 +89,8 @@ function handleCancelTime(){
   formState.minuteE=''
   formState.minuteS=''
   formState.passWord=''
-  formState.secondE=''
-  formState.secondS=''
+  // formState.secondE=''
+  // formState.secondS=''
   $emit('handleCancelTime',false)
 }