|  | @@ -172,310 +172,310 @@
 | 
	
		
			
				|  |  |  </template>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <script setup lang="ts">
 | 
	
		
			
				|  |  | -import { onBeforeUnmount, onUnmounted, onMounted, ref, reactive, nextTick, inject, unref } from 'vue';
 | 
	
		
			
				|  |  | -import MonitorTable from '../comment/MonitorTable.vue';
 | 
	
		
			
				|  |  | -import HistoryTable from '../comment/HistoryTable.vue';
 | 
	
		
			
				|  |  | -import AlarmHistoryTable from '../comment/AlarmHistoryTable.vue';
 | 
	
		
			
				|  |  | -import HandlerHistoryTable from '../comment/HandlerHistoryTable.vue';
 | 
	
		
			
				|  |  | -import HandleModal from './modal.vue';
 | 
	
		
			
				|  |  | -import DeviceBaseInfo from '../comment/components/DeviceBaseInfo.vue';
 | 
	
		
			
				|  |  | -import { deviceControlApi } from '/@/api/vent/index';
 | 
	
		
			
				|  |  | -import { message } from 'ant-design-vue';
 | 
	
		
			
				|  |  | -import { list, getTableList } from './deviceMonitor.api';
 | 
	
		
			
				|  |  | -import lodash from 'lodash';
 | 
	
		
			
				|  |  | -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 { getDictItems } from '/@/api/common/api';
 | 
	
		
			
				|  |  | +  import { onBeforeUnmount, onUnmounted, onMounted, ref, reactive, nextTick, inject, unref } from 'vue';
 | 
	
		
			
				|  |  | +  import MonitorTable from '../comment/MonitorTable.vue';
 | 
	
		
			
				|  |  | +  import HistoryTable from '../comment/HistoryTable.vue';
 | 
	
		
			
				|  |  | +  import AlarmHistoryTable from '../comment/AlarmHistoryTable.vue';
 | 
	
		
			
				|  |  | +  import HandlerHistoryTable from '../comment/HandlerHistoryTable.vue';
 | 
	
		
			
				|  |  | +  import HandleModal from './modal.vue';
 | 
	
		
			
				|  |  | +  import DeviceBaseInfo from '../comment/components/DeviceBaseInfo.vue';
 | 
	
		
			
				|  |  | +  import { deviceControlApi } from '/@/api/vent/index';
 | 
	
		
			
				|  |  | +  import { message } from 'ant-design-vue';
 | 
	
		
			
				|  |  | +  import { list, getTableList } from './deviceMonitor.api';
 | 
	
		
			
				|  |  | +  import lodash from 'lodash';
 | 
	
		
			
				|  |  | +  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 { getDictItems } from '/@/api/common/api';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const { hasPermission } = usePermission();
 | 
	
		
			
				|  |  | +  const { hasPermission } = usePermission();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const globalConfig = inject('globalConfig');
 | 
	
		
			
				|  |  | +  const globalConfig = inject('globalConfig');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const { currentRoute } = useRouter();
 | 
	
		
			
				|  |  | -const MonitorDataTable = ref();
 | 
	
		
			
				|  |  | -let contrlValue = '';
 | 
	
		
			
				|  |  | -const playerRef = ref();
 | 
	
		
			
				|  |  | -const deviceType = ref('door');
 | 
	
		
			
				|  |  | -// const deviceType = ref('firedoor');
 | 
	
		
			
				|  |  | -const activeKey = ref('1'); // tab
 | 
	
		
			
				|  |  | +  const { currentRoute } = useRouter();
 | 
	
		
			
				|  |  | +  const MonitorDataTable = ref();
 | 
	
		
			
				|  |  | +  let contrlValue = '';
 | 
	
		
			
				|  |  | +  const playerRef = ref();
 | 
	
		
			
				|  |  | +  const deviceType = ref('door');
 | 
	
		
			
				|  |  | +  // const deviceType = ref('firedoor');
 | 
	
		
			
				|  |  | +  const activeKey = ref('1'); // tab
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const scroll = reactive({
 | 
	
		
			
				|  |  | -  y: 230,
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | -const modelList = ref<{ text: string; value: string }[]>([]);
 | 
	
		
			
				|  |  | -const doorIsOpen = ref(false); //前门是否开启
 | 
	
		
			
				|  |  | -const modalIsShow = ref<boolean>(false); // 是否显示模态框
 | 
	
		
			
				|  |  | -const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
 | 
	
		
			
				|  |  | -const modalType = ref(''); // 模态框内容显示类型,设备操作类型
 | 
	
		
			
				|  |  | +  const scroll = reactive({
 | 
	
		
			
				|  |  | +    y: 230,
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +  const modelList = ref<{ text: string; value: string }[]>([]);
 | 
	
		
			
				|  |  | +  const doorIsOpen = ref(false); //前门是否开启
 | 
	
		
			
				|  |  | +  const modalIsShow = ref<boolean>(false); // 是否显示模态框
 | 
	
		
			
				|  |  | +  const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
 | 
	
		
			
				|  |  | +  const modalType = ref(''); // 模态框内容显示类型,设备操作类型
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const selectRowIndex = ref(-1); // 选中行
 | 
	
		
			
				|  |  | -const dataSource = ref([]);
 | 
	
		
			
				|  |  | +  const selectRowIndex = ref(-1); // 选中行
 | 
	
		
			
				|  |  | +  const dataSource = ref([]);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const deviceBaseList = ref([]); // 设备基本信息
 | 
	
		
			
				|  |  | -const [registerModal, { openModal, closeModal }] = useModal();
 | 
	
		
			
				|  |  | +  const deviceBaseList = ref([]); // 设备基本信息
 | 
	
		
			
				|  |  | +  const [registerModal, { openModal, closeModal }] = useModal();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const { getCamera, removeCamera } = useCamera();
 | 
	
		
			
				|  |  | +  const { getCamera, removeCamera } = useCamera();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const tabChange = (activeKeyVal) => {
 | 
	
		
			
				|  |  | -  activeKey.value = activeKeyVal;
 | 
	
		
			
				|  |  | -  if (activeKeyVal == 1) {
 | 
	
		
			
				|  |  | -    nextTick(() => {
 | 
	
		
			
				|  |  | -      if (MonitorDataTable.value) MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | +  const tabChange = (activeKeyVal) => {
 | 
	
		
			
				|  |  | +    activeKey.value = activeKeyVal;
 | 
	
		
			
				|  |  | +    if (activeKeyVal == 1) {
 | 
	
		
			
				|  |  | +      nextTick(() => {
 | 
	
		
			
				|  |  | +        if (MonitorDataTable.value) MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const initData = {
 | 
	
		
			
				|  |  | -  deviceID: '',
 | 
	
		
			
				|  |  | -  deviceType: '',
 | 
	
		
			
				|  |  | -  strname: '',
 | 
	
		
			
				|  |  | -  frontRearDP: '-', //压差
 | 
	
		
			
				|  |  | -  // sourcePressure: '-', //气源压力
 | 
	
		
			
				|  |  | -  runRoRecondition: null,
 | 
	
		
			
				|  |  | -  autoRoManual: null,
 | 
	
		
			
				|  |  | -  netStatus: '0', //通信状态
 | 
	
		
			
				|  |  | -  frontGateOpen: '0',
 | 
	
		
			
				|  |  | -  frontGateClose: '1',
 | 
	
		
			
				|  |  | -  rearGateOpen: '0',
 | 
	
		
			
				|  |  | -  rearGateClose: '1',
 | 
	
		
			
				|  |  | -  midGateOpen: '0',
 | 
	
		
			
				|  |  | -  midGateClose: '1',
 | 
	
		
			
				|  |  | -  fault: '气源压力超限',
 | 
	
		
			
				|  |  | -  masterComputer: 0,
 | 
	
		
			
				|  |  | -  frontGateOpenCtrl: false,
 | 
	
		
			
				|  |  | -  rearGateOpenCtrl: false,
 | 
	
		
			
				|  |  | -  cameras: [],
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | +  const initData = {
 | 
	
		
			
				|  |  | +    deviceID: '',
 | 
	
		
			
				|  |  | +    deviceType: '',
 | 
	
		
			
				|  |  | +    strname: '',
 | 
	
		
			
				|  |  | +    frontRearDP: '-', //压差
 | 
	
		
			
				|  |  | +    // sourcePressure: '-', //气源压力
 | 
	
		
			
				|  |  | +    runRoRecondition: null,
 | 
	
		
			
				|  |  | +    autoRoManual: null,
 | 
	
		
			
				|  |  | +    netStatus: '0', //通信状态
 | 
	
		
			
				|  |  | +    frontGateOpen: '0',
 | 
	
		
			
				|  |  | +    frontGateClose: '1',
 | 
	
		
			
				|  |  | +    rearGateOpen: '0',
 | 
	
		
			
				|  |  | +    rearGateClose: '1',
 | 
	
		
			
				|  |  | +    midGateOpen: '0',
 | 
	
		
			
				|  |  | +    midGateClose: '1',
 | 
	
		
			
				|  |  | +    fault: '气源压力超限',
 | 
	
		
			
				|  |  | +    masterComputer: 0,
 | 
	
		
			
				|  |  | +    frontGateOpenCtrl: false,
 | 
	
		
			
				|  |  | +    rearGateOpenCtrl: false,
 | 
	
		
			
				|  |  | +    cameras: [],
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// 监测数据
 | 
	
		
			
				|  |  | -const selectData = reactive(lodash.cloneDeep(initData));
 | 
	
		
			
				|  |  | -function deviceEdit(e: Event, type: string, record) {
 | 
	
		
			
				|  |  | -  e.stopPropagation();
 | 
	
		
			
				|  |  | -  openModal(true, {
 | 
	
		
			
				|  |  | -    type,
 | 
	
		
			
				|  |  | -    deviceId: record['deviceID'],
 | 
	
		
			
				|  |  | -  });
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -// 获取设备基本信息列表
 | 
	
		
			
				|  |  | -function getDeviceBaseList() {
 | 
	
		
			
				|  |  | -  getTableList({ pageSize: 1000 }).then((res) => {
 | 
	
		
			
				|  |  | -    deviceBaseList.value = res.records;
 | 
	
		
			
				|  |  | -  });
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  // 监测数据
 | 
	
		
			
				|  |  | +  const selectData = reactive(lodash.cloneDeep(initData));
 | 
	
		
			
				|  |  | +  function deviceEdit(e: Event, type: string, record) {
 | 
	
		
			
				|  |  | +    e.stopPropagation();
 | 
	
		
			
				|  |  | +    openModal(true, {
 | 
	
		
			
				|  |  | +      type,
 | 
	
		
			
				|  |  | +      deviceId: record['deviceID'],
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  // 获取设备基本信息列表
 | 
	
		
			
				|  |  | +  function getDeviceBaseList() {
 | 
	
		
			
				|  |  | +    getTableList({ pageSize: 1000 }).then((res) => {
 | 
	
		
			
				|  |  | +      deviceBaseList.value = res.records;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// https获取监测数据
 | 
	
		
			
				|  |  | -let timer: null | NodeJS.Timeout = null;
 | 
	
		
			
				|  |  | -async function getMonitor(flag?) {
 | 
	
		
			
				|  |  | -  if (Object.prototype.toString.call(timer) === '[object Null]') {
 | 
	
		
			
				|  |  | -    timer = await setTimeout(
 | 
	
		
			
				|  |  | -      async () => {
 | 
	
		
			
				|  |  | -        const res = await list({ devicetype: deviceType.value, pagetype: 'normal' });
 | 
	
		
			
				|  |  | -        if (res.msgTxt && res.msgTxt[0]) {
 | 
	
		
			
				|  |  | -          dataSource.value = res.msgTxt[0].datalist || [];
 | 
	
		
			
				|  |  | -          dataSource.value.forEach((data: any) => {
 | 
	
		
			
				|  |  | -            const readData = data.readData;
 | 
	
		
			
				|  |  | -            data = Object.assign(data, readData);
 | 
	
		
			
				|  |  | -          });
 | 
	
		
			
				|  |  | -          if (dataSource.value.length > 0 && selectRowIndex.value == -1 && MonitorDataTable.value) {
 | 
	
		
			
				|  |  | -            // 初始打开页面
 | 
	
		
			
				|  |  | -            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']]);
 | 
	
		
			
				|  |  | +  // https获取监测数据
 | 
	
		
			
				|  |  | +  let timer: null | NodeJS.Timeout = null;
 | 
	
		
			
				|  |  | +  async function getMonitor(flag?) {
 | 
	
		
			
				|  |  | +    if (Object.prototype.toString.call(timer) === '[object Null]') {
 | 
	
		
			
				|  |  | +      timer = await setTimeout(
 | 
	
		
			
				|  |  | +        async () => {
 | 
	
		
			
				|  |  | +          const res = await list({ devicetype: deviceType.value, pagetype: 'normal' });
 | 
	
		
			
				|  |  | +          if (res.msgTxt && res.msgTxt[0]) {
 | 
	
		
			
				|  |  | +            dataSource.value = res.msgTxt[0].datalist || [];
 | 
	
		
			
				|  |  | +            dataSource.value.forEach((data: any) => {
 | 
	
		
			
				|  |  | +              const readData = data.readData;
 | 
	
		
			
				|  |  | +              data = Object.assign(data, readData);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            if (dataSource.value.length > 0 && selectRowIndex.value == -1 && MonitorDataTable.value) {
 | 
	
		
			
				|  |  | +              // 初始打开页面
 | 
	
		
			
				|  |  | +              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']]);
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            Object.assign(selectData, dataSource.value[selectRowIndex.value]);
 | 
	
		
			
				|  |  | +            monitorAnimation(selectData);
 | 
	
		
			
				|  |  | +            if (timer) {
 | 
	
		
			
				|  |  | +              timer = null;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            getMonitor();
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  | -          Object.assign(selectData, dataSource.value[selectRowIndex.value]);
 | 
	
		
			
				|  |  | -          monitorAnimation(selectData);
 | 
	
		
			
				|  |  | -          if (timer) {
 | 
	
		
			
				|  |  | -            timer = null;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          getMonitor();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      flag ? 0 : 1000
 | 
	
		
			
				|  |  | -    );
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        flag ? 0 : 1000
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// 切换检测数据
 | 
	
		
			
				|  |  | -async function getSelectRow(selectRow, index) {
 | 
	
		
			
				|  |  | -  if (!selectRow) return;
 | 
	
		
			
				|  |  | -  selectRowIndex.value = index;
 | 
	
		
			
				|  |  | -  const baseData: any = deviceBaseList.value.find((baseData: any) => baseData.id === selectRow.deviceID);
 | 
	
		
			
				|  |  | -  Object.assign(selectData, initData, selectRow, baseData);
 | 
	
		
			
				|  |  | -  doorDeviceState = 1; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | -  isdoorOpenRunning = true; //开关门动作是否在进行
 | 
	
		
			
				|  |  | -  await getCamera(selectRow.deviceID, playerRef.value);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function playAnimation(handlerState, data: any = null) {
 | 
	
		
			
				|  |  | -  const value = data;
 | 
	
		
			
				|  |  | -  switch (handlerState) {
 | 
	
		
			
				|  |  | -    case 1: // 打开前门
 | 
	
		
			
				|  |  | -      modalTitle.value = '打开';
 | 
	
		
			
				|  |  | -      modalType.value = '1';
 | 
	
		
			
				|  |  | -      modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case 2: // 关闭前门
 | 
	
		
			
				|  |  | -      modalTitle.value = '关闭';
 | 
	
		
			
				|  |  | -      modalType.value = '2';
 | 
	
		
			
				|  |  | -      modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case 7: // 控制模式切换
 | 
	
		
			
				|  |  | -      modalTitle.value = '控制模式切换';
 | 
	
		
			
				|  |  | -      modalType.value = '7';
 | 
	
		
			
				|  |  | -      modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | +  // 切换检测数据
 | 
	
		
			
				|  |  | +  async function getSelectRow(selectRow, index) {
 | 
	
		
			
				|  |  | +    if (!selectRow) return;
 | 
	
		
			
				|  |  | +    selectRowIndex.value = index;
 | 
	
		
			
				|  |  | +    const baseData: any = deviceBaseList.value.find((baseData: any) => baseData.id === selectRow.deviceID);
 | 
	
		
			
				|  |  | +    Object.assign(selectData, initData, selectRow, baseData);
 | 
	
		
			
				|  |  | +    doorDeviceState = 1; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | +    isdoorOpenRunning = true; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +    await getCamera(selectRow.deviceID, playerRef.value);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  if (globalConfig?.simulatedPassword) {
 | 
	
		
			
				|  |  | -    handleOK('', handlerState + '');
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  contrlValue = value;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  function playAnimation(handlerState, data: any = null) {
 | 
	
		
			
				|  |  | +    const value = data;
 | 
	
		
			
				|  |  | +    switch (handlerState) {
 | 
	
		
			
				|  |  | +      case 1: // 打开前门
 | 
	
		
			
				|  |  | +        modalTitle.value = '打开';
 | 
	
		
			
				|  |  | +        modalType.value = '1';
 | 
	
		
			
				|  |  | +        modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 2: // 关闭前门
 | 
	
		
			
				|  |  | +        modalTitle.value = '关闭';
 | 
	
		
			
				|  |  | +        modalType.value = '2';
 | 
	
		
			
				|  |  | +        modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 7: // 控制模式切换
 | 
	
		
			
				|  |  | +        modalTitle.value = '控制模式切换';
 | 
	
		
			
				|  |  | +        modalType.value = '7';
 | 
	
		
			
				|  |  | +        modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function handleOK(passWord, handlerState) {
 | 
	
		
			
				|  |  | -  if (!passWord && !globalConfig?.simulatedPassword) {
 | 
	
		
			
				|  |  | -    message.warning('请输入密码');
 | 
	
		
			
				|  |  | -    return;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  if (isOpenRunning) {
 | 
	
		
			
				|  |  | -    return;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  const data = {
 | 
	
		
			
				|  |  | -    deviceid: selectData.deviceID,
 | 
	
		
			
				|  |  | -    devicetype: selectData.deviceType,
 | 
	
		
			
				|  |  | -    paramcode: '',
 | 
	
		
			
				|  |  | -    value: contrlValue,
 | 
	
		
			
				|  |  | -    password: passWord || globalConfig?.simulatedPassword,
 | 
	
		
			
				|  |  | -    masterComputer: selectData.masterComputer,
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | -  switch (handlerState) {
 | 
	
		
			
				|  |  | -    case '1': // 打开前门
 | 
	
		
			
				|  |  | -      if (selectData.doorOpen == '0' && selectData.doorClose == '1') {
 | 
	
		
			
				|  |  | -        data.paramcode = 'frontGateOpen_S';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case '2': // 关闭前门
 | 
	
		
			
				|  |  | -      if (selectData.doorOpen == '1' && selectData.doorClose == '0') {
 | 
	
		
			
				|  |  | -        data.paramcode = 'frontGateClose_S';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case '7': // 远程与就地
 | 
	
		
			
				|  |  | -      data.paramcode = 'autoRoManualControl';
 | 
	
		
			
				|  |  | -      data.value = selectData.contrlMod != 'loopCtrl' ? contrlValue : '';
 | 
	
		
			
				|  |  | -      selectData.autoRoManual = null;
 | 
	
		
			
				|  |  | +    if (globalConfig?.simulatedPassword) {
 | 
	
		
			
				|  |  | +      handleOK('', handlerState + '');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    contrlValue = value;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  if (data.paramcode) {
 | 
	
		
			
				|  |  | -    deviceControlApi(data).then((res) => {
 | 
	
		
			
				|  |  | -      // 模拟时开启
 | 
	
		
			
				|  |  | -      if (res.success) {
 | 
	
		
			
				|  |  | -        modalIsShow.value = false;
 | 
	
		
			
				|  |  | -        if (globalConfig.History_Type == 'remote') {
 | 
	
		
			
				|  |  | -          message.success('指令已下发至生产管控平台成功!');
 | 
	
		
			
				|  |  | +  function handleOK(passWord, handlerState) {
 | 
	
		
			
				|  |  | +    if (!passWord && !globalConfig?.simulatedPassword) {
 | 
	
		
			
				|  |  | +      message.warning('请输入密码');
 | 
	
		
			
				|  |  | +      return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (isOpenRunning) {
 | 
	
		
			
				|  |  | +      return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    const data = {
 | 
	
		
			
				|  |  | +      deviceid: selectData.deviceID,
 | 
	
		
			
				|  |  | +      devicetype: selectData.deviceType,
 | 
	
		
			
				|  |  | +      paramcode: '',
 | 
	
		
			
				|  |  | +      value: contrlValue,
 | 
	
		
			
				|  |  | +      password: passWord || globalConfig?.simulatedPassword,
 | 
	
		
			
				|  |  | +      masterComputer: selectData.masterComputer,
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    switch (handlerState) {
 | 
	
		
			
				|  |  | +      case '1': // 打开前门
 | 
	
		
			
				|  |  | +        if (selectData.doorOpen == '0' && selectData.doorClose == '1') {
 | 
	
		
			
				|  |  | +          data.paramcode = 'frontGateOpen_S';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '2': // 关闭前门
 | 
	
		
			
				|  |  | +        if (selectData.doorOpen == '1' && selectData.doorClose == '0') {
 | 
	
		
			
				|  |  | +          data.paramcode = 'frontGateClose_S';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '7': // 远程与就地
 | 
	
		
			
				|  |  | +        data.paramcode = 'autoRoManualControl';
 | 
	
		
			
				|  |  | +        data.value = selectData.contrlMod != 'loopCtrl' ? contrlValue : '';
 | 
	
		
			
				|  |  | +        selectData.autoRoManual = null;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (data.paramcode) {
 | 
	
		
			
				|  |  | +      deviceControlApi(data).then((res) => {
 | 
	
		
			
				|  |  | +        // 模拟时开启
 | 
	
		
			
				|  |  | +        if (res.success) {
 | 
	
		
			
				|  |  | +          modalIsShow.value = false;
 | 
	
		
			
				|  |  | +          if (globalConfig.History_Type == 'remote') {
 | 
	
		
			
				|  |  | +            message.success('指令已下发至生产管控平台成功!');
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            message.success('指令已下发成功!');
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  | -          message.success('指令已下发成功!');
 | 
	
		
			
				|  |  | +          message.error(res.message);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        message.error(res.message);
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -let isOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | -/** 开关门动画调用 */
 | 
	
		
			
				|  |  | -let isdoorOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | -// let isMidCloseRunning = false; //中间门动作是否在进行
 | 
	
		
			
				|  |  | -// 0 关闭 1 正在打开 2 打开 3正在关闭
 | 
	
		
			
				|  |  | -let doorDeviceState = 1; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | -function monitorAnimation(selectData) {
 | 
	
		
			
				|  |  | -  const timeScale = 0.005;
 | 
	
		
			
				|  |  | -  // 打开
 | 
	
		
			
				|  |  | -  if (selectData.frontGateOpen == '1' && !isdoorOpenRunning) {
 | 
	
		
			
				|  |  | -    isdoorOpenRunning = true;
 | 
	
		
			
				|  |  | -    if (doorDeviceState != 1) {
 | 
	
		
			
				|  |  | -      doorDeviceState = 1;
 | 
	
		
			
				|  |  | -      doorIsOpen.value = true;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  // 关闭
 | 
	
		
			
				|  |  | -  if (selectData.frontGateOpen == '0' && isdoorOpenRunning) {
 | 
	
		
			
				|  |  | -    isdoorOpenRunning = false;
 | 
	
		
			
				|  |  | -    if (doorDeviceState != 0) {
 | 
	
		
			
				|  |  | -      doorDeviceState = 0;
 | 
	
		
			
				|  |  | -      doorIsOpen.value = false;
 | 
	
		
			
				|  |  | +  let isOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +  /** 开关门动画调用 */
 | 
	
		
			
				|  |  | +  let isdoorOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +  // let isMidCloseRunning = false; //中间门动作是否在进行
 | 
	
		
			
				|  |  | +  // 0 关闭 1 正在打开 2 打开 3正在关闭
 | 
	
		
			
				|  |  | +  let doorDeviceState = 1; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | +  function monitorAnimation(selectData) {
 | 
	
		
			
				|  |  | +    const timeScale = 0.005;
 | 
	
		
			
				|  |  | +    // 打开
 | 
	
		
			
				|  |  | +    if (selectData.frontGateOpen == '1' && !isdoorOpenRunning) {
 | 
	
		
			
				|  |  | +      isdoorOpenRunning = true;
 | 
	
		
			
				|  |  | +      if (doorDeviceState != 1) {
 | 
	
		
			
				|  |  | +        doorDeviceState = 1;
 | 
	
		
			
				|  |  | +        doorIsOpen.value = true;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    // 关闭
 | 
	
		
			
				|  |  | +    if (selectData.frontGateOpen == '0' && isdoorOpenRunning) {
 | 
	
		
			
				|  |  | +      isdoorOpenRunning = false;
 | 
	
		
			
				|  |  | +      if (doorDeviceState != 0) {
 | 
	
		
			
				|  |  | +        doorDeviceState = 0;
 | 
	
		
			
				|  |  | +        doorIsOpen.value = false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function handleCancel() {
 | 
	
		
			
				|  |  | -  modalIsShow.value = false;
 | 
	
		
			
				|  |  | -  modalTitle.value = '';
 | 
	
		
			
				|  |  | -  modalType.value = '';
 | 
	
		
			
				|  |  | -  selectData.autoRoManual = null;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  function handleCancel() {
 | 
	
		
			
				|  |  | +    modalIsShow.value = false;
 | 
	
		
			
				|  |  | +    modalTitle.value = '';
 | 
	
		
			
				|  |  | +    modalType.value = '';
 | 
	
		
			
				|  |  | +    selectData.autoRoManual = null;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -onMounted(async () => {
 | 
	
		
			
				|  |  | -  const { query } = unref(currentRoute);
 | 
	
		
			
				|  |  | -  if (query['deviceType']) deviceType.value = query['deviceType'] as string;
 | 
	
		
			
				|  |  | -  modelList.value = await getDictItems('fireDoorModel');
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | +  onMounted(async () => {
 | 
	
		
			
				|  |  | +    const { query } = unref(currentRoute);
 | 
	
		
			
				|  |  | +    if (query['deviceType']) deviceType.value = query['deviceType'] as string;
 | 
	
		
			
				|  |  | +    modelList.value = await getDictItems('fireDoorModel');
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -onBeforeUnmount(() => {
 | 
	
		
			
				|  |  | -  getDeviceBaseList();
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | +  onBeforeUnmount(() => {
 | 
	
		
			
				|  |  | +    getDeviceBaseList();
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -onUnmounted(() => {
 | 
	
		
			
				|  |  | -  removeCamera();
 | 
	
		
			
				|  |  | -  if (timer) {
 | 
	
		
			
				|  |  | -    clearTimeout(timer);
 | 
	
		
			
				|  |  | -    timer = undefined;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | +  onUnmounted(() => {
 | 
	
		
			
				|  |  | +    removeCamera();
 | 
	
		
			
				|  |  | +    if (timer) {
 | 
	
		
			
				|  |  | +      clearTimeout(timer);
 | 
	
		
			
				|  |  | +      timer = undefined;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |  </script>
 | 
	
		
			
				|  |  |  ,
 | 
	
		
			
				|  |  |  <style lang="less" scoped>
 | 
	
		
			
				|  |  | -@import '/@/design/vent/modal.less';
 | 
	
		
			
				|  |  | -.scene-box {
 | 
	
		
			
				|  |  | -  .bottom-tabs-box {
 | 
	
		
			
				|  |  | -    height: 300px;
 | 
	
		
			
				|  |  | +  @import '/@/design/vent/modal.less';
 | 
	
		
			
				|  |  | +  .scene-box {
 | 
	
		
			
				|  |  | +    .bottom-tabs-box {
 | 
	
		
			
				|  |  | +      height: 300px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -.button-box {
 | 
	
		
			
				|  |  | -  border: none !important;
 | 
	
		
			
				|  |  | -  height: 34px !important;
 | 
	
		
			
				|  |  | +  .button-box {
 | 
	
		
			
				|  |  | +    border: none !important;
 | 
	
		
			
				|  |  | +    height: 34px !important;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  &:hover {
 | 
	
		
			
				|  |  | -    background: linear-gradient(#2cd1ff55, #1eb0ff55) !important;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +    &:hover {
 | 
	
		
			
				|  |  | +      background: linear-gradient(#2cd1ff55, #1eb0ff55) !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  &::before {
 | 
	
		
			
				|  |  | -    height: 27px !important;
 | 
	
		
			
				|  |  | -    background: linear-gradient(#1fa6cb, #127cb5) !important;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +    &::before {
 | 
	
		
			
				|  |  | +      height: 27px !important;
 | 
	
		
			
				|  |  | +      background: linear-gradient(#1fa6cb, #127cb5) !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  &::after {
 | 
	
		
			
				|  |  | -    top: 35px !important;
 | 
	
		
			
				|  |  | +    &::after {
 | 
	
		
			
				|  |  | +      top: 35px !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -:deep(.@{ventSpace}-tabs-tabpane-active) {
 | 
	
		
			
				|  |  | -  height: 100%;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  :deep(.@{ventSpace}-tabs-tabpane-active) {
 | 
	
		
			
				|  |  | +    height: 100%;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -::-webkit-scrollbar-thumb {
 | 
	
		
			
				|  |  | -  -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
 | 
	
		
			
				|  |  | -  background: #4288a444;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -:deep(.zxm-radio-disabled + span) {
 | 
	
		
			
				|  |  | -  color: #fff !important;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -:deep(.zxm-radio-disabled .zxm-radio-inner::after) {
 | 
	
		
			
				|  |  | -  background-color: #127cb5 !important;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  ::-webkit-scrollbar-thumb {
 | 
	
		
			
				|  |  | +    -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
 | 
	
		
			
				|  |  | +    background: #4288a444;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  :deep(.zxm-radio-disabled + span) {
 | 
	
		
			
				|  |  | +    color: #fff !important;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  :deep(.zxm-radio-disabled .zxm-radio-inner::after) {
 | 
	
		
			
				|  |  | +    background-color: #127cb5 !important;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  </style>
 |