|  | @@ -1,6 +1,5 @@
 | 
	
		
			
				|  |  |  <template>
 | 
	
		
			
				|  |  | -  <div class="bg"
 | 
	
		
			
				|  |  | -    style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
 | 
	
		
			
				|  |  | +  <div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
 | 
	
		
			
				|  |  |      <a-spin :spinning="loading" />
 | 
	
		
			
				|  |  |      <div id="deviceDetail" class="device-detail">
 | 
	
		
			
				|  |  |        <div id="deviceCard" class="device-card" style="z-index: -1; position: absolute">
 | 
	
	
		
			
				|  | @@ -9,8 +8,11 @@
 | 
	
		
			
				|  |  |            <div class="left-box"></div>
 | 
	
		
			
				|  |  |            <div class="right-box">
 | 
	
		
			
				|  |  |              <div><span class="detail-title">规格型号:</span> <span>KJ-980-F</span></div>
 | 
	
		
			
				|  |  | -            <div><span class="detail-title">技术参数:</span>
 | 
	
		
			
				|  |  | -              <span>380V,电机功率22kW,50Hz,B级绝缘,额定电流42.2A,效率90.5%,能效等级3,接法角型,2940r/min,轴承6311/CM 6211/CM,功率因数0.89</span>
 | 
	
		
			
				|  |  | +            <div
 | 
	
		
			
				|  |  | +              ><span class="detail-title">技术参数:</span>
 | 
	
		
			
				|  |  | +              <span
 | 
	
		
			
				|  |  | +                >380V,电机功率22kW,50Hz,B级绝缘,额定电流42.2A,效率90.5%,能效等级3,接法角型,2940r/min,轴承6311/CM 6211/CM,功率因数0.89</span
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |            </div>
 | 
	
		
			
				|  |  |          </div>
 | 
	
	
		
			
				|  | @@ -21,17 +23,17 @@
 | 
	
		
			
				|  |  |    <div class="scene-box">
 | 
	
		
			
				|  |  |      <div class="top-box">
 | 
	
		
			
				|  |  |        <div class="top-center row">
 | 
	
		
			
				|  |  | -        <div class="button-box" @click="playAnimation(1)">打开前门</div>
 | 
	
		
			
				|  |  | -        <div class="button-box" @click="playAnimation(2)">关闭前门</div>
 | 
	
		
			
				|  |  | -        <div class="button-box" @click="playAnimation(3)">打开后门</div>
 | 
	
		
			
				|  |  | -        <div class="button-box" @click="playAnimation(4)">关闭后门</div>
 | 
	
		
			
				|  |  | -        <div class="button-box" @click="playAnimation(5)">同时打开</div>
 | 
	
		
			
				|  |  | -        <div class="button-box" @click="playAnimation(6)">同时关闭</div>
 | 
	
		
			
				|  |  | +        <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(1)">打开前门</div>
 | 
	
		
			
				|  |  | +        <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(2)">关闭前门</div>
 | 
	
		
			
				|  |  | +        <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(3)">打开后门</div>
 | 
	
		
			
				|  |  | +        <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(4)">关闭后门</div>
 | 
	
		
			
				|  |  | +        <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(5)">同时打开</div>
 | 
	
		
			
				|  |  | +        <div v-if="hasPermission('btn:control')" class="button-box" @click="playAnimation(6)">同时关闭</div>
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  | -      <div class="top-right row">
 | 
	
		
			
				|  |  | +      <div class="top-right row" v-if="hasPermission('btn:remote')">
 | 
	
		
			
				|  |  |          <div class="control-type row">
 | 
	
		
			
				|  |  |            <div class="control-title">控制模式:</div>
 | 
	
		
			
				|  |  | -          <a-radio-group v-model:value="selectData.autoRoManual" @change="changeType">
 | 
	
		
			
				|  |  | +          <a-radio-group v-model:value="selectData.autoRoManual" @change="playAnimation(7)">
 | 
	
		
			
				|  |  |              <a-radio :value="`0`">就地</a-radio>
 | 
	
		
			
				|  |  |              <a-radio :value="`1`">远程</a-radio>
 | 
	
		
			
				|  |  |            </a-radio-group>
 | 
	
	
		
			
				|  | @@ -52,51 +54,61 @@
 | 
	
		
			
				|  |  |        <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">
 | 
	
		
			
				|  |  |          <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
 | 
	
		
			
				|  |  |            <a-tab-pane key="1" tab="实时监测">
 | 
	
		
			
				|  |  | -            <MonitorTable v-if="activeKey === '1'" ref="MonitorDataTable" class="monitor-table" columnsType="gate_monitor" :isShowActionColumn="true"
 | 
	
		
			
				|  |  | -              :dataSource="dataSource" design-scope="gate-monitor" @selectRow="getSelectRow" :scroll="{ y: scroll.y - 40 }" title="风门监测"
 | 
	
		
			
				|  |  | -              :isShowPagination="true">
 | 
	
		
			
				|  |  | +            <MonitorTable
 | 
	
		
			
				|  |  | +              v-if="activeKey === '1'"
 | 
	
		
			
				|  |  | +              ref="MonitorDataTable"
 | 
	
		
			
				|  |  | +              class="monitor-table"
 | 
	
		
			
				|  |  | +              columnsType="gate_monitor"
 | 
	
		
			
				|  |  | +              :isShowActionColumn="true"
 | 
	
		
			
				|  |  | +              :dataSource="dataSource"
 | 
	
		
			
				|  |  | +              design-scope="gate-monitor"
 | 
	
		
			
				|  |  | +              @selectRow="getSelectRow"
 | 
	
		
			
				|  |  | +              :scroll="{ y: scroll.y - 40 }"
 | 
	
		
			
				|  |  | +              title="风门监测"
 | 
	
		
			
				|  |  | +              :isShowPagination="true"
 | 
	
		
			
				|  |  | +            >
 | 
	
		
			
				|  |  |                <template #filterCell="{ column, record }">
 | 
	
		
			
				|  |  |                  <template v-if="record.frontGateOpenCtrl == 1 || record.frontGateOpenCtrl === true">
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 0 && record.frontGateClose == 0"
 | 
	
		
			
				|  |  | -                    color="red">正在打开</a-tag>
 | 
	
		
			
				|  |  | +                  <a-tag v-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 0 && record.frontGateClose == 0" color="red"
 | 
	
		
			
				|  |  | +                    >正在打开</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  |                    <a-tag v-else-if="column.dataIndex === 'frontGateOpen'" color="processing">打开</a-tag>
 | 
	
		
			
				|  |  |                  </template>
 | 
	
		
			
				|  |  |                  <template v-else-if="record.frontGateOpenCtrl == 0 || record.frontGateOpenCtrl === false">
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 0 && record.frontGateClose == 0"
 | 
	
		
			
				|  |  | -                    color="red">正在关闭</a-tag>
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 0 && record.frontGateClose == 1"
 | 
	
		
			
				|  |  | -                    color="default">关闭</a-tag>
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 1 && record.frontGateClose == 0"
 | 
	
		
			
				|  |  | -                    color="default">打开</a-tag>
 | 
	
		
			
				|  |  | +                  <a-tag v-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 0 && record.frontGateClose == 0" color="red"
 | 
	
		
			
				|  |  | +                    >正在关闭</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  | +                  <a-tag v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 0 && record.frontGateClose == 1" color="default"
 | 
	
		
			
				|  |  | +                    >关闭</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  | +                  <a-tag v-else-if="column.dataIndex === 'frontGateOpen' && record.frontGateOpen == 1 && record.frontGateClose == 0" color="default"
 | 
	
		
			
				|  |  | +                    >打开</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  |                  </template>
 | 
	
		
			
				|  |  |                  <template v-if="record.rearGateOpenCtrl == 1 || record.rearGateOpenCtrl === true">
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 0 && record.rearGateClose == 0"
 | 
	
		
			
				|  |  | -                    color="red">正在打开</a-tag>
 | 
	
		
			
				|  |  | +                  <a-tag v-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 0 && record.rearGateClose == 0" color="red"
 | 
	
		
			
				|  |  | +                    >正在打开</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  |                    <a-tag v-else-if="column.dataIndex === 'rearGateOpen'" color="processing">打开</a-tag>
 | 
	
		
			
				|  |  |                  </template>
 | 
	
		
			
				|  |  |                  <template v-else-if="record.rearGateOpenCtrl == 0 || record.rearGateOpenCtrl === false">
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 0 && record.rearGateClose == 0"
 | 
	
		
			
				|  |  | -                    color="red">正在关闭</a-tag>
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 0 && record.rearGateClose == 1"
 | 
	
		
			
				|  |  | -                    color="default">关闭</a-tag>
 | 
	
		
			
				|  |  | -                  <a-tag
 | 
	
		
			
				|  |  | -                    v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 1 && record.rearGateClose == 0"
 | 
	
		
			
				|  |  | -                    color="default">打开</a-tag>
 | 
	
		
			
				|  |  | +                  <a-tag v-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 0 && record.rearGateClose == 0" color="red"
 | 
	
		
			
				|  |  | +                    >正在关闭</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  | +                  <a-tag v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 0 && record.rearGateClose == 1" color="default"
 | 
	
		
			
				|  |  | +                    >关闭</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  | +                  <a-tag v-else-if="column.dataIndex === 'rearGateOpen' && record.rearGateOpen == 1 && record.rearGateClose == 0" color="default"
 | 
	
		
			
				|  |  | +                    >打开</a-tag
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  |                  </template>
 | 
	
		
			
				|  |  |                  <template v-if="column.dataIndex === 'ndoortype'">
 | 
	
		
			
				|  |  | -                  <span
 | 
	
		
			
				|  |  | -                    v-if="record.ndoortype == 0"
 | 
	
		
			
				|  |  | -                    color="red">行车风门</span>
 | 
	
		
			
				|  |  | -                  <span
 | 
	
		
			
				|  |  | -                    v-else
 | 
	
		
			
				|  |  | -                    color="default">行人风门</span>
 | 
	
		
			
				|  |  | +                  <span v-if="record.ndoortype == 0">气动风门</span>
 | 
	
		
			
				|  |  | +                  <span v-else color="default">液压风门</span>
 | 
	
		
			
				|  |  | +                </template>
 | 
	
		
			
				|  |  | +                <template v-if="column.dataIndex === 'doorUse'">
 | 
	
		
			
				|  |  | +                  <span v-if="record.doorUse == 2">行人风门</span>
 | 
	
		
			
				|  |  | +                  <span v-else color="default">行车风门</span>
 | 
	
		
			
				|  |  |                  </template>
 | 
	
		
			
				|  |  |                  <template v-else-if="column.dataIndex === 'warnLevel'">
 | 
	
		
			
				|  |  |                    <a-tag v-if="record.warnLevel == '101'" color="green">低风险</a-tag>
 | 
	
	
		
			
				|  | @@ -111,13 +123,12 @@
 | 
	
		
			
				|  |  |                  <a-tag v-else-if="column.dataIndex === 'warnFlag'" :color="record.warnFlag == 0 ? 'green' : 'red'">{{
 | 
	
		
			
				|  |  |                    record.warnFlag == 0 ? '正常' : '报警'
 | 
	
		
			
				|  |  |                  }}</a-tag>
 | 
	
		
			
				|  |  | -                <a-tag v-else-if="column.dataIndex === 'netStatus'" :color="record.netStatus == 0 ? 'default' : 'green'">{{
 | 
	
		
			
				|  |  | -                  record.netStatus == 0 ? '断开' : '连接'
 | 
	
		
			
				|  |  | +                <a-tag v-if="column.dataIndex === 'netStatus'" :color="record.netStatus == '0' ? '#f00' : 'green'">{{
 | 
	
		
			
				|  |  | +                  record.netStatus == '0' ? '断开' : '连接'
 | 
	
		
			
				|  |  |                  }}</a-tag>
 | 
	
		
			
				|  |  | -                
 | 
	
		
			
				|  |  |                </template>
 | 
	
		
			
				|  |  |                <template #action="{ record }">
 | 
	
		
			
				|  |  | -                <a class="table-action-link" @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
 | 
	
		
			
				|  |  | +                <a v-if="globalConfig?.showReport" class="table-action-link" @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
 | 
	
		
			
				|  |  |                  <a class="table-action-link" @click="deviceEdit($event, 'deviceInfo', record)">设备编辑</a>
 | 
	
		
			
				|  |  |                </template>
 | 
	
		
			
				|  |  |              </MonitorTable>
 | 
	
	
		
			
				|  | @@ -130,572 +141,598 @@
 | 
	
		
			
				|  |  |            </a-tab-pane> -->
 | 
	
		
			
				|  |  |            <a-tab-pane key="3" tab="历史数据">
 | 
	
		
			
				|  |  |              <div class="tab-item" v-if="activeKey === '3'">
 | 
	
		
			
				|  |  | -              <HistoryTable columns-type="gate" device-type="gate" :device-list-api="getTableList"
 | 
	
		
			
				|  |  | -                designScope="gate-history" :scroll="scroll" />
 | 
	
		
			
				|  |  | +              <HistoryTable columns-type="gate" device-type="gate" :device-list-api="getTableList" designScope="gate-history" :scroll="scroll" />
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |            </a-tab-pane>
 | 
	
		
			
				|  |  |            <a-tab-pane key="4" tab="报警历史">
 | 
	
		
			
				|  |  |              <div class="tab-item" v-if="activeKey === '4'">
 | 
	
		
			
				|  |  | -              <AlarmHistoryTable columns-type="alarm" device-type="gate" :device-list-api="getTableList"
 | 
	
		
			
				|  |  | -                designScope="alarm-history" :scroll="scroll" />
 | 
	
		
			
				|  |  | +              <AlarmHistoryTable
 | 
	
		
			
				|  |  | +                columns-type="alarm"
 | 
	
		
			
				|  |  | +                device-type="gate"
 | 
	
		
			
				|  |  | +                :device-list-api="getTableList"
 | 
	
		
			
				|  |  | +                designScope="alarm-history"
 | 
	
		
			
				|  |  | +                :scroll="scroll"
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |            </a-tab-pane>
 | 
	
		
			
				|  |  |            <a-tab-pane key="5" tab="操作历史">
 | 
	
		
			
				|  |  |              <div class="tab-item" v-if="activeKey === '5'">
 | 
	
		
			
				|  |  | -              <HandlerHistoryTable columns-type="operator_history" device-type="gate" :device-list-api="getTableList"
 | 
	
		
			
				|  |  | -                designScope="alarm-history" :scroll="scroll" />
 | 
	
		
			
				|  |  | +              <HandlerHistoryTable
 | 
	
		
			
				|  |  | +                columns-type="operator_history"
 | 
	
		
			
				|  |  | +                device-type="gate"
 | 
	
		
			
				|  |  | +                :device-list-api="getTableList"
 | 
	
		
			
				|  |  | +                designScope="alarm-history"
 | 
	
		
			
				|  |  | +                :scroll="scroll"
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |            </a-tab-pane>
 | 
	
		
			
				|  |  |          </a-tabs>
 | 
	
		
			
				|  |  |        </dv-border-box8>
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  |    </div>
 | 
	
		
			
				|  |  | -  <div ref="playerRef" style="z-index: 999; position: absolute; top: 100px; right: 15px; width: 300px; height: 280px; margin: auto">
 | 
	
		
			
				|  |  | -  </div>
 | 
	
		
			
				|  |  | -  <LivePlayer id="fm-player1" style="height: 220px; width: 300px; position: absolute; top: 0px; z-index: -1;" ref="player1" :videoUrl="flvURL1()" muted live loading controls />
 | 
	
		
			
				|  |  | -  <HandleModal v-if="!globalConfig?.simulatedPassword" :modal-is-show="modalIsShow" :modal-title="modalTitle" :modal-type="modalType" @handle-ok="handleOK"
 | 
	
		
			
				|  |  | -    @handle-cancel="handleCancel" />
 | 
	
		
			
				|  |  | -  <DeviceBaseInfo @register="registerModal" :device-type="selectData['deviceType']"/>
 | 
	
		
			
				|  |  | +  <div ref="playerRef" style="z-index: 999; position: absolute; top: 100px; right: 15px; width: 300px; height: 280px; margin: auto"> </div>
 | 
	
		
			
				|  |  | +  <LivePlayer
 | 
	
		
			
				|  |  | +    id="fm-player1"
 | 
	
		
			
				|  |  | +    style="height: 220px; width: 300px; position: absolute; top: 0px; z-index: -1"
 | 
	
		
			
				|  |  | +    ref="player1"
 | 
	
		
			
				|  |  | +    :videoUrl="flvURL1()"
 | 
	
		
			
				|  |  | +    muted
 | 
	
		
			
				|  |  | +    live
 | 
	
		
			
				|  |  | +    loading
 | 
	
		
			
				|  |  | +    controls
 | 
	
		
			
				|  |  | +  />
 | 
	
		
			
				|  |  | +  <HandleModal
 | 
	
		
			
				|  |  | +    v-if="!globalConfig?.simulatedPassword"
 | 
	
		
			
				|  |  | +    :modal-is-show="modalIsShow"
 | 
	
		
			
				|  |  | +    :modal-title="modalTitle"
 | 
	
		
			
				|  |  | +    :modal-type="modalType"
 | 
	
		
			
				|  |  | +    @handle-ok="handleOK"
 | 
	
		
			
				|  |  | +    @handle-cancel="handleCancel"
 | 
	
		
			
				|  |  | +  />
 | 
	
		
			
				|  |  | +  <DeviceBaseInfo @register="registerModal" :device-type="selectData['deviceType']" />
 | 
	
		
			
				|  |  |  </template>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <script setup lang="ts">
 | 
	
		
			
				|  |  | -import { onBeforeUnmount, onUnmounted, onMounted, ref, reactive, nextTick, inject  } from 'vue';
 | 
	
		
			
				|  |  | -import DeviceEcharts from '../comment/DeviceEcharts.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 { mountedThree, addMonitorText, play, destroy, setModelType, initCameraCanvas } from './gate.threejs';
 | 
	
		
			
				|  |  | -import { deviceControlApi } from '/@/api/vent/index';
 | 
	
		
			
				|  |  | -import { message } from 'ant-design-vue';
 | 
	
		
			
				|  |  | -import { list, getTableList, cameraList, cameraAddrList } from './gate.api';
 | 
	
		
			
				|  |  | -import { chartsColumns, echartsOption, echartsOption1 } from './gate.data';
 | 
	
		
			
				|  |  | -import lodash from 'lodash';
 | 
	
		
			
				|  |  | -import { setDivHeight } from '/@/utils/event';
 | 
	
		
			
				|  |  | -import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
 | 
	
		
			
				|  |  | -import { useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | -import { deviceCameraInit } from '/@/utils/ventutil.ts'
 | 
	
		
			
				|  |  | -import LivePlayer from '@liveqing/liveplayer-v3';
 | 
	
		
			
				|  |  | -import { useModal } from '/@/components/Modal';
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const globalConfig = inject('globalConfig');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const { currentRoute } = useRouter();
 | 
	
		
			
				|  |  | -const MonitorDataTable = ref()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const playerRef = ref();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const activeKey = ref('1'); // tab
 | 
	
		
			
				|  |  | -const loading = ref(false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const scroll = reactive({
 | 
	
		
			
				|  |  | -  y: 230
 | 
	
		
			
				|  |  | -})
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const frontDoorIsOpen = ref(false); //前门是否开启
 | 
	
		
			
				|  |  | -const backDoorIsOpen = ref(false); //后门是否开启
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const modalIsShow = ref<boolean>(false); // 是否显示模态框
 | 
	
		
			
				|  |  | -const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
 | 
	
		
			
				|  |  | -const modalType = ref(''); // 模态框内容显示类型,设备操作类型
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const selectRowIndex = ref(-1); // 选中行
 | 
	
		
			
				|  |  | -const dataSource = ref([]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const deviceBaseList = ref([]); // 设备基本信息
 | 
	
		
			
				|  |  | -let webRtcServer: any[] = []
 | 
	
		
			
				|  |  | -const [registerModal, { openModal, closeModal }] = useModal();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const tabChange = (activeKeyVal) => {
 | 
	
		
			
				|  |  | -  activeKey.value = activeKeyVal;
 | 
	
		
			
				|  |  | -  if (activeKeyVal == 1) {
 | 
	
		
			
				|  |  | -    nextTick(() => {
 | 
	
		
			
				|  |  | -      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',
 | 
	
		
			
				|  |  | -  fault: '气源压力超限',
 | 
	
		
			
				|  |  | -  masterComputer: 0,
 | 
	
		
			
				|  |  | -  frontGateOpenCtrl: false,
 | 
	
		
			
				|  |  | -  rearGateOpenCtrl: false,
 | 
	
		
			
				|  |  | -  cameras: []
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// 监测数据
 | 
	
		
			
				|  |  | -const selectData = reactive(lodash.cloneDeep(initData));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const flvURL1 = () => {
 | 
	
		
			
				|  |  | -  // return ''
 | 
	
		
			
				|  |  | -  return `/video/gate.mp4`;
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -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;
 | 
	
		
			
				|  |  | +  import { onBeforeUnmount, onUnmounted, onMounted, ref, reactive, nextTick, inject } from 'vue';
 | 
	
		
			
				|  |  | +  import DeviceEcharts from '../comment/DeviceEcharts.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 { mountedThree, addMonitorText, play, destroy, setModelType, initCameraCanvas } from './gate.threejs';
 | 
	
		
			
				|  |  | +  import { deviceControlApi } from '/@/api/vent/index';
 | 
	
		
			
				|  |  | +  import { message } from 'ant-design-vue';
 | 
	
		
			
				|  |  | +  import { list, getTableList, cameraList, cameraAddrList } from './gate.api';
 | 
	
		
			
				|  |  | +  import { chartsColumns, echartsOption, echartsOption1 } from './gate.data';
 | 
	
		
			
				|  |  | +  import lodash from 'lodash';
 | 
	
		
			
				|  |  | +  import { setDivHeight } from '/@/utils/event';
 | 
	
		
			
				|  |  | +  import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
 | 
	
		
			
				|  |  | +  import { useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | +  import LivePlayer from '@liveqing/liveplayer-v3';
 | 
	
		
			
				|  |  | +  import { useModal } from '/@/components/Modal';
 | 
	
		
			
				|  |  | +  import { useCamera } from '/@/hooks/system/useCamera';
 | 
	
		
			
				|  |  | +  import { usePermission } from '/@/hooks/web/usePermission';
 | 
	
		
			
				|  |  | +  const { hasPermission } = usePermission();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const globalConfig = inject('globalConfig');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const { currentRoute } = useRouter();
 | 
	
		
			
				|  |  | +  const MonitorDataTable = ref();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const playerRef = ref();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const activeKey = ref('1'); // tab
 | 
	
		
			
				|  |  | +  const loading = ref(false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const scroll = reactive({
 | 
	
		
			
				|  |  | +    y: 230,
 | 
	
		
			
				|  |  |    });
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// 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: 'gate', 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) {
 | 
	
		
			
				|  |  | -          // 初始打开页面
 | 
	
		
			
				|  |  | -          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]);
 | 
	
		
			
				|  |  | -        addMonitorText(selectData);
 | 
	
		
			
				|  |  | -        monitorAnimation(selectData)
 | 
	
		
			
				|  |  | -        if (timer) {
 | 
	
		
			
				|  |  | -          timer = null;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        getMonitor();
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }, flag ? 0 : 1000);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const frontDoorIsOpen = ref(false); //前门是否开启
 | 
	
		
			
				|  |  | +  const backDoorIsOpen = ref(false); //后门是否开启
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const modalIsShow = ref<boolean>(false); // 是否显示模态框
 | 
	
		
			
				|  |  | +  const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
 | 
	
		
			
				|  |  | +  const modalType = ref(''); // 模态框内容显示类型,设备操作类型
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const selectRowIndex = ref(-1); // 选中行
 | 
	
		
			
				|  |  | +  const dataSource = ref([]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const deviceBaseList = ref([]); // 设备基本信息
 | 
	
		
			
				|  |  | +  const [registerModal, { openModal, closeModal }] = useModal();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const { getCamera, webRtcServer } = useCamera();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const tabChange = (activeKeyVal) => {
 | 
	
		
			
				|  |  | +    activeKey.value = activeKeyVal;
 | 
	
		
			
				|  |  | +    if (activeKeyVal == 1) {
 | 
	
		
			
				|  |  | +      nextTick(() => {
 | 
	
		
			
				|  |  | +        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',
 | 
	
		
			
				|  |  | +    fault: '气源压力超限',
 | 
	
		
			
				|  |  | +    masterComputer: 0,
 | 
	
		
			
				|  |  | +    frontGateOpenCtrl: false,
 | 
	
		
			
				|  |  | +    rearGateOpenCtrl: false,
 | 
	
		
			
				|  |  | +    cameras: [],
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 监测数据
 | 
	
		
			
				|  |  | +  const selectData = reactive(lodash.cloneDeep(initData));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const flvURL1 = () => {
 | 
	
		
			
				|  |  | +    // return ''
 | 
	
		
			
				|  |  | +    return `/video/gate.mp4`;
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function deviceEdit(e: Event, type: string, record) {
 | 
	
		
			
				|  |  | +    e.stopPropagation();
 | 
	
		
			
				|  |  | +    openModal(true, {
 | 
	
		
			
				|  |  | +      type,
 | 
	
		
			
				|  |  | +      deviceId: record['deviceID'],
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -async function getCamera() {
 | 
	
		
			
				|  |  | -  const res = await cameraList({ deviceid: selectData['deviceID'] })
 | 
	
		
			
				|  |  | -  const cameras: [] = res.records || []
 | 
	
		
			
				|  |  | -  let cameraAddrs:any[] = [], cameraNames:string[] = [];
 | 
	
		
			
				|  |  | -  if (cameras.length > 0){
 | 
	
		
			
				|  |  | -    cameras.forEach(item => {
 | 
	
		
			
				|  |  | -      if (item['devicekind'] == 'toRtsp' || item['devicekind'] == 'toHLS') {
 | 
	
		
			
				|  |  | -        cameraNames.push(item['name'])
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        cameraAddrs.push({name: item['name'], addr: item['addr'] })
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | +  // 获取设备基本信息列表
 | 
	
		
			
				|  |  | +  function getDeviceBaseList() {
 | 
	
		
			
				|  |  | +    getTableList({ pageSize: 1000 }).then((res) => {
 | 
	
		
			
				|  |  | +      deviceBaseList.value = res.records;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  if (cameraNames.length > 0) {
 | 
	
		
			
				|  |  | -    // 请求接口从装备院拿数据
 | 
	
		
			
				|  |  | -    const addrs: string[] = await cameraAddrList({ cameraNameList: cameraNames })
 | 
	
		
			
				|  |  | -    for(let i=0; i < addrs.length; i++){
 | 
	
		
			
				|  |  | -      cameraAddrs.push({name: '摄像头'+i, addr: addrs[i]})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 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: 'gate', 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) {
 | 
	
		
			
				|  |  | +              // 初始打开页面
 | 
	
		
			
				|  |  | +              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]);
 | 
	
		
			
				|  |  | +            addMonitorText(selectData);
 | 
	
		
			
				|  |  | +            monitorAnimation(selectData);
 | 
	
		
			
				|  |  | +            if (timer) {
 | 
	
		
			
				|  |  | +              timer = null;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            getMonitor();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        flag ? 0 : 1000
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  const obj = await deviceCameraInit(cameraAddrs, playerRef.value, webRtcServer)
 | 
	
		
			
				|  |  | -  webRtcServer = obj.webRtcServerList
 | 
	
		
			
				|  |  | -  const playerDoms = obj.playerDoms
 | 
	
		
			
				|  |  | -  // 注意前后门适应需要对应 //[0] 后门 [1]前门
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// 切换检测数据
 | 
	
		
			
				|  |  | -async function getSelectRow(selectRow, index) {
 | 
	
		
			
				|  |  | -  if (!selectRow) return;
 | 
	
		
			
				|  |  | -  loading.value = true;
 | 
	
		
			
				|  |  | -  selectRowIndex.value = index;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  const baseData: any = deviceBaseList.value.find((baseData: any) => baseData.id === selectRow.deviceID);
 | 
	
		
			
				|  |  | -  Object.assign(selectData, initData, selectRow, baseData);
 | 
	
		
			
				|  |  | -  isFrontOpenRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -  isFrontCloseRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -  isRearOpenRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -  isRearCloseRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -  frontDeviceState = 0 //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | -  rearDeviceState = 0 //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | -  // const type = selectData.nwindownum == 1 ? 'singleWindow' : 'doubleWindow';
 | 
	
		
			
				|  |  | -  let type;
 | 
	
		
			
				|  |  | -  if (selectData.deviceType == 'gate_ss') {
 | 
	
		
			
				|  |  | -    type = 'fm2'
 | 
	
		
			
				|  |  | -  } else if(selectData.deviceType == 'gate_qd') {
 | 
	
		
			
				|  |  | -    type = 'fm3'
 | 
	
		
			
				|  |  | -  } else{
 | 
	
		
			
				|  |  | -    type = 'fm1' // 液压
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  setModelType(type).then(async() => {
 | 
	
		
			
				|  |  | -    addMonitorText(selectData);
 | 
	
		
			
				|  |  | -    loading.value = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  });
 | 
	
		
			
				|  |  | -  await getCamera()
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// 播放动画
 | 
	
		
			
				|  |  | -function playAnimation(handlerState) {
 | 
	
		
			
				|  |  | -  switch (handlerState) {
 | 
	
		
			
				|  |  | -    case 1: // 打开前门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '1') {
 | 
	
		
			
				|  |  | -        modalTitle.value = '打开前门';
 | 
	
		
			
				|  |  | -        modalType.value = '1';
 | 
	
		
			
				|  |  | -        modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        message.warning('前门已经打开或正在打开,请勿重新操作')
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case 2: // 关闭前门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '1' && selectData.frontGateClose == '0') {
 | 
	
		
			
				|  |  | -        modalTitle.value = '关闭前门';
 | 
	
		
			
				|  |  | -        modalType.value = '2';
 | 
	
		
			
				|  |  | -        modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        message.warning('前门已经关闭或正在关闭,请勿重新操作')
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case 3: // 打开后门
 | 
	
		
			
				|  |  | -      if (selectData.rearGateOpen == '0' && selectData.rearGateClose == '1') {
 | 
	
		
			
				|  |  | -        modalTitle.value = '打开后门';
 | 
	
		
			
				|  |  | -        modalType.value = '3';
 | 
	
		
			
				|  |  | -        modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        message.warning('后门已经打开或正在打开,请勿重新操作')
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case 4: // 关闭后门
 | 
	
		
			
				|  |  | -      if (selectData.rearGateOpen == '1' && selectData.rearGateClose == '0') {
 | 
	
		
			
				|  |  | -        modalTitle.value = '关闭后门';
 | 
	
		
			
				|  |  | -        modalType.value = '4';
 | 
	
		
			
				|  |  | -        modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        message.warning('后门已经关闭或正在关闭,请勿重新操作')
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case 5: // 打开前后门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '1' && selectData.rearGateOpen == '0' && selectData.rearGateClose == '1') {
 | 
	
		
			
				|  |  | -        modalTitle.value = '打开前后门';
 | 
	
		
			
				|  |  | -        modalType.value = '5';
 | 
	
		
			
				|  |  | -        modalIsShow.value = true;
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        message.warning('前后门已经打开或正在打开,请勿重新操作')
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case 6: // 关闭前后门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '1' && selectData.frontGateClose == '0' && selectData.rearGateOpen == '1' && selectData.rearGateClose == '0') {
 | 
	
		
			
				|  |  | -        modalTitle.value = '关闭前后门';
 | 
	
		
			
				|  |  | -        modalType.value = '6';
 | 
	
		
			
				|  |  | -        modalIsShow.value = true;
 | 
	
		
			
				|  |  | +  // 切换检测数据
 | 
	
		
			
				|  |  | +  async function getSelectRow(selectRow, index) {
 | 
	
		
			
				|  |  | +    if (!selectRow) return;
 | 
	
		
			
				|  |  | +    loading.value = true;
 | 
	
		
			
				|  |  | +    selectRowIndex.value = index;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const baseData: any = deviceBaseList.value.find((baseData: any) => baseData.id === selectRow.deviceID);
 | 
	
		
			
				|  |  | +    Object.assign(selectData, initData, selectRow, baseData);
 | 
	
		
			
				|  |  | +    isFrontOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +    isFrontCloseRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +    isRearOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +    isRearCloseRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +    frontDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | +    rearDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | +    // const type = selectData.nwindownum == 1 ? 'singleWindow' : 'doubleWindow';
 | 
	
		
			
				|  |  | +    let type;
 | 
	
		
			
				|  |  | +    if (selectData['doorUse'] == 2) {
 | 
	
		
			
				|  |  | +      type = 'fmXr';
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      if (selectData.deviceType == 'gate_ss') {
 | 
	
		
			
				|  |  | +        type = 'fm2';
 | 
	
		
			
				|  |  | +      } else if (selectData.deviceType == 'gate_qd') {
 | 
	
		
			
				|  |  | +        type = 'fm3';
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  | -        message.warning('前后门已经关闭或正在关闭,请勿重新操作')
 | 
	
		
			
				|  |  | +        type = 'fm1'; // 液压
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  if(globalConfig?.simulatedPassword){
 | 
	
		
			
				|  |  | -    handleOK('', handlerState+'')
 | 
	
		
			
				|  |  | +    setModelType(type).then(async () => {
 | 
	
		
			
				|  |  | +      addMonitorText(selectData);
 | 
	
		
			
				|  |  | +      loading.value = false;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    await getCamera(selectRow.deviceID, playerRef.value);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  // 播放动画
 | 
	
		
			
				|  |  | +  function playAnimation(handlerState) {
 | 
	
		
			
				|  |  | +    switch (handlerState) {
 | 
	
		
			
				|  |  | +      case 1: // 打开前门
 | 
	
		
			
				|  |  | +        if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '1') {
 | 
	
		
			
				|  |  | +          modalTitle.value = '打开前门';
 | 
	
		
			
				|  |  | +          modalType.value = '1';
 | 
	
		
			
				|  |  | +          modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          message.warning('前门已经打开或正在打开,请勿重新操作');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 2: // 关闭前门
 | 
	
		
			
				|  |  | +        if (selectData.frontGateOpen == '1' && selectData.frontGateClose == '0') {
 | 
	
		
			
				|  |  | +          modalTitle.value = '关闭前门';
 | 
	
		
			
				|  |  | +          modalType.value = '2';
 | 
	
		
			
				|  |  | +          modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          message.warning('前门已经关闭或正在关闭,请勿重新操作');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 3: // 打开后门
 | 
	
		
			
				|  |  | +        if (selectData.rearGateOpen == '0' && selectData.rearGateClose == '1') {
 | 
	
		
			
				|  |  | +          modalTitle.value = '打开后门';
 | 
	
		
			
				|  |  | +          modalType.value = '3';
 | 
	
		
			
				|  |  | +          modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          message.warning('后门已经打开或正在打开,请勿重新操作');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 4: // 关闭后门
 | 
	
		
			
				|  |  | +        if (selectData.rearGateOpen == '1' && selectData.rearGateClose == '0') {
 | 
	
		
			
				|  |  | +          modalTitle.value = '关闭后门';
 | 
	
		
			
				|  |  | +          modalType.value = '4';
 | 
	
		
			
				|  |  | +          modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          message.warning('后门已经关闭或正在关闭,请勿重新操作');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 5: // 打开前后门
 | 
	
		
			
				|  |  | +        if (
 | 
	
		
			
				|  |  | +          selectData.frontGateOpen == '0' &&
 | 
	
		
			
				|  |  | +          selectData.frontGateClose == '1' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateOpen == '0' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateClose == '1'
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  | +          modalTitle.value = '打开前后门';
 | 
	
		
			
				|  |  | +          modalType.value = '5';
 | 
	
		
			
				|  |  | +          modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          message.warning('前后门已经打开或正在打开,请勿重新操作');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 6: // 关闭前后门
 | 
	
		
			
				|  |  | +        if (
 | 
	
		
			
				|  |  | +          selectData.frontGateOpen == '1' &&
 | 
	
		
			
				|  |  | +          selectData.frontGateClose == '0' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateOpen == '1' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateClose == '0'
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  | +          modalTitle.value = '关闭前后门';
 | 
	
		
			
				|  |  | +          modalType.value = '6';
 | 
	
		
			
				|  |  | +          modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          message.warning('前后门已经关闭或正在关闭,请勿重新操作');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function handleOK(passWord, handlerState) {
 | 
	
		
			
				|  |  | -  // if (passWord !== '123456') {
 | 
	
		
			
				|  |  | -  //   message.warning('密码不正确,请重新输入');
 | 
	
		
			
				|  |  | -  //   return;
 | 
	
		
			
				|  |  | -  // }
 | 
	
		
			
				|  |  | +      case 7: // 关闭前后门
 | 
	
		
			
				|  |  | +        modalTitle.value = '控制模式切换';
 | 
	
		
			
				|  |  | +        modalType.value = '7';
 | 
	
		
			
				|  |  | +        modalIsShow.value = true;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  if ((isFrontOpenRunning || isFrontCloseRunning) && (handlerState == 2 || handlerState == 1 || handlerState == 5 || handlerState == 6)) {
 | 
	
		
			
				|  |  | -    return
 | 
	
		
			
				|  |  | +    if (globalConfig?.simulatedPassword) {
 | 
	
		
			
				|  |  | +      handleOK('', handlerState + '');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  if ((isRearOpenRunning || isRearCloseRunning) && (handlerState == 3 || handlerState == 4 || handlerState == 5 || handlerState == 6)) {
 | 
	
		
			
				|  |  | -    return
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  function handleOK(passWord, handlerState) {
 | 
	
		
			
				|  |  | +    // if (passWord !== '123456') {
 | 
	
		
			
				|  |  | +    //   message.warning('密码不正确,请重新输入');
 | 
	
		
			
				|  |  | +    //   return;
 | 
	
		
			
				|  |  | +    // }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  const data = {
 | 
	
		
			
				|  |  | -    deviceid: selectData.deviceID,
 | 
	
		
			
				|  |  | -    devicetype: selectData.deviceType,
 | 
	
		
			
				|  |  | -    paramcode: '',
 | 
	
		
			
				|  |  | -    value: null,
 | 
	
		
			
				|  |  | -    password: passWord,
 | 
	
		
			
				|  |  | -    masterComputer: selectData.masterComputer,
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | -  let handler = () => { };
 | 
	
		
			
				|  |  | +    if ((isFrontOpenRunning || isFrontCloseRunning) && (handlerState == 2 || handlerState == 1 || handlerState == 5 || handlerState == 6)) {
 | 
	
		
			
				|  |  | +      return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  switch (handlerState) {
 | 
	
		
			
				|  |  | -    case '1': // 打开前门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '1') {
 | 
	
		
			
				|  |  | -        handler = () => {
 | 
	
		
			
				|  |  | -          frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        data.paramcode = 'frontGateOpen_S';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case '2': // 关闭前门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '1' && selectData.frontGateClose == '0') {
 | 
	
		
			
				|  |  | -        handler = () => {
 | 
	
		
			
				|  |  | -          frontDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        data.paramcode = 'frontGateClose_S';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case '3': // 打开后门
 | 
	
		
			
				|  |  | -      if (selectData.rearGateOpen == '0' && selectData.rearGateClose == '1') {
 | 
	
		
			
				|  |  | -        handler = () => {
 | 
	
		
			
				|  |  | -          backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        data.paramcode = 'rearGateOpen_S';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case '4': // 关闭后门
 | 
	
		
			
				|  |  | -      if (selectData.rearGateOpen == '1' && selectData.rearGateClose == '0') {
 | 
	
		
			
				|  |  | -        handler = () => {
 | 
	
		
			
				|  |  | -          backDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        data.paramcode = 'rearGateClose_S';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case '5': // 打开前后门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '1' && selectData.rearGateOpen == '0' && selectData.rearGateClose == '1') {
 | 
	
		
			
				|  |  | -        handler = () => {
 | 
	
		
			
				|  |  | -          frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | -          backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        data.paramcode = 'sameTimeOpen';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    case '6': // 关闭前后门
 | 
	
		
			
				|  |  | -      if (selectData.frontGateOpen == '1' && selectData.frontGateClose == '0' && selectData.rearGateOpen == '1' && selectData.rearGateClose == '0') {
 | 
	
		
			
				|  |  | -        handler = () => {
 | 
	
		
			
				|  |  | -          frontDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | -          backDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        data.paramcode = 'sameTimeClose';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  if (data.paramcode) {
 | 
	
		
			
				|  |  | -    deviceControlApi(data)
 | 
	
		
			
				|  |  | -      .then((res) => {
 | 
	
		
			
				|  |  | +    if ((isRearOpenRunning || isRearCloseRunning) && (handlerState == 3 || handlerState == 4 || handlerState == 5 || handlerState == 6)) {
 | 
	
		
			
				|  |  | +      return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const data = {
 | 
	
		
			
				|  |  | +      deviceid: selectData.deviceID,
 | 
	
		
			
				|  |  | +      devicetype: selectData.deviceType,
 | 
	
		
			
				|  |  | +      paramcode: '',
 | 
	
		
			
				|  |  | +      value: null,
 | 
	
		
			
				|  |  | +      password: passWord,
 | 
	
		
			
				|  |  | +      masterComputer: selectData.masterComputer,
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    let handler = () => {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    switch (handlerState) {
 | 
	
		
			
				|  |  | +      case '1': // 打开前门
 | 
	
		
			
				|  |  | +        if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '1') {
 | 
	
		
			
				|  |  | +          handler = () => {
 | 
	
		
			
				|  |  | +            frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.paramcode = 'frontGateOpen_S';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '2': // 关闭前门
 | 
	
		
			
				|  |  | +        if (selectData.frontGateOpen == '1' && selectData.frontGateClose == '0') {
 | 
	
		
			
				|  |  | +          handler = () => {
 | 
	
		
			
				|  |  | +            frontDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.paramcode = 'frontGateClose_S';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '3': // 打开后门
 | 
	
		
			
				|  |  | +        if (selectData.rearGateOpen == '0' && selectData.rearGateClose == '1') {
 | 
	
		
			
				|  |  | +          handler = () => {
 | 
	
		
			
				|  |  | +            backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.paramcode = 'rearGateOpen_S';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '4': // 关闭后门
 | 
	
		
			
				|  |  | +        if (selectData.rearGateOpen == '1' && selectData.rearGateClose == '0') {
 | 
	
		
			
				|  |  | +          handler = () => {
 | 
	
		
			
				|  |  | +            backDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.paramcode = 'rearGateClose_S';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '5': // 打开前后门
 | 
	
		
			
				|  |  | +        if (
 | 
	
		
			
				|  |  | +          selectData.frontGateOpen == '0' &&
 | 
	
		
			
				|  |  | +          selectData.frontGateClose == '1' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateOpen == '0' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateClose == '1'
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  | +          handler = () => {
 | 
	
		
			
				|  |  | +            frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +            backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.paramcode = 'sameTimeOpen';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '6': // 关闭前后门
 | 
	
		
			
				|  |  | +        if (
 | 
	
		
			
				|  |  | +          selectData.frontGateOpen == '1' &&
 | 
	
		
			
				|  |  | +          selectData.frontGateClose == '0' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateOpen == '1' &&
 | 
	
		
			
				|  |  | +          selectData.rearGateClose == '0'
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  | +          handler = () => {
 | 
	
		
			
				|  |  | +            frontDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +            backDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.paramcode = 'sameTimeClose';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case '7': // 远程与就地
 | 
	
		
			
				|  |  | +        data.paramcode = 'autoRoManualControl';
 | 
	
		
			
				|  |  | +        data.value = selectData.autoRoManual;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (data.paramcode) {
 | 
	
		
			
				|  |  | +      deviceControlApi(data).then((res) => {
 | 
	
		
			
				|  |  |          // 模拟时开启
 | 
	
		
			
				|  |  |          if (res.success) {
 | 
	
		
			
				|  |  |            modalIsShow.value = false;
 | 
	
		
			
				|  |  |            if (globalConfig.History_Type == 'remote') {
 | 
	
		
			
				|  |  | -            message.success('指令已下发至生产管控平台成功!')
 | 
	
		
			
				|  |  | +            message.success('指令已下发至生产管控平台成功!');
 | 
	
		
			
				|  |  |            } else {
 | 
	
		
			
				|  |  | -            message.success('指令已下发成功!')
 | 
	
		
			
				|  |  | +            message.success('指令已下发成功!');
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/** 开关门动画调用 */
 | 
	
		
			
				|  |  | -let isFrontOpenRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -let isFrontCloseRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -let isRearOpenRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -let isRearCloseRunning = false //开关门动作是否在进行
 | 
	
		
			
				|  |  | -let frontDeviceState = 0 //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | -let rearDeviceState = 0 //记录设备状态,为了与下一次监测数据做比较  
 | 
	
		
			
				|  |  | -function monitorAnimation(selectData) {
 | 
	
		
			
				|  |  | -  const timeScale = 0.003
 | 
	
		
			
				|  |  | -  if (selectData.frontGateOpenCtrl == 1 || selectData.frontGateOpenCtrl === true) {
 | 
	
		
			
				|  |  | -    isFrontCloseRunning = false
 | 
	
		
			
				|  |  | -    if (selectData.frontGateOpen == 0 && selectData.frontGateClose == 0) {
 | 
	
		
			
				|  |  | -      //打开前门1
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      if (!isFrontOpenRunning) {
 | 
	
		
			
				|  |  | -        frontDoorIsOpen.value = true
 | 
	
		
			
				|  |  | -        backDoorIsOpen.value = true
 | 
	
		
			
				|  |  | -        isFrontOpenRunning = true
 | 
	
		
			
				|  |  | -        play(1, timeScale)
 | 
	
		
			
				|  |  | -        frontDeviceState = 1
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (selectData.frontGateOpen == 1 && selectData.frontGateClose == 0) {
 | 
	
		
			
				|  |  | -      isFrontOpenRunning = false
 | 
	
		
			
				|  |  | -      if (frontDeviceState != 1) {
 | 
	
		
			
				|  |  | -        import.meta.env.VITE_GLOB_IS_SIMULATE ? play(1, timeScale) : play(1)
 | 
	
		
			
				|  |  | -        frontDeviceState = 1
 | 
	
		
			
				|  |  | -        frontDoorIsOpen.value = false
 | 
	
		
			
				|  |  | -        backDoorIsOpen.value = true
 | 
	
		
			
				|  |  | +  /** 开关门动画调用 */
 | 
	
		
			
				|  |  | +  let isFrontOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +  let isFrontCloseRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +  let isRearOpenRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +  let isRearCloseRunning = false; //开关门动作是否在进行
 | 
	
		
			
				|  |  | +  let frontDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | +  let rearDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
 | 
	
		
			
				|  |  | +  function monitorAnimation(selectData) {
 | 
	
		
			
				|  |  | +    const timeScale = 0.003;
 | 
	
		
			
				|  |  | +    if (selectData.frontGateOpenCtrl == 1 || selectData.frontGateOpenCtrl === true) {
 | 
	
		
			
				|  |  | +      isFrontCloseRunning = false;
 | 
	
		
			
				|  |  | +      if (selectData.frontGateOpen == 0 && selectData.frontGateClose == 0) {
 | 
	
		
			
				|  |  | +        //打开前门1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (!isFrontOpenRunning) {
 | 
	
		
			
				|  |  | +          frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          isFrontOpenRunning = true;
 | 
	
		
			
				|  |  | +          play(1, timeScale);
 | 
	
		
			
				|  |  | +          frontDeviceState = 1;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  } else {
 | 
	
		
			
				|  |  | -    if (selectData.frontGateOpen == 0 && selectData.frontGateClose == 0) {
 | 
	
		
			
				|  |  | -      //关闭前门
 | 
	
		
			
				|  |  | -      isFrontOpenRunning = false
 | 
	
		
			
				|  |  | -      if (!isFrontCloseRunning) {
 | 
	
		
			
				|  |  | -        isFrontCloseRunning = true
 | 
	
		
			
				|  |  | -        play(2, timeScale)
 | 
	
		
			
				|  |  | -        frontDeviceState = 2
 | 
	
		
			
				|  |  | -        frontDoorIsOpen.value = true
 | 
	
		
			
				|  |  | -        backDoorIsOpen.value = true
 | 
	
		
			
				|  |  | +      if (selectData.frontGateOpen == 1 && selectData.frontGateClose == 0) {
 | 
	
		
			
				|  |  | +        isFrontOpenRunning = false;
 | 
	
		
			
				|  |  | +        if (frontDeviceState != 1) {
 | 
	
		
			
				|  |  | +          import.meta.env.VITE_GLOB_IS_SIMULATE ? play(1, timeScale) : play(1);
 | 
	
		
			
				|  |  | +          frontDeviceState = 1;
 | 
	
		
			
				|  |  | +          frontDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +          backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (selectData.frontGateClose == 1 && selectData.frontGateOpen == 0) {
 | 
	
		
			
				|  |  | -      isFrontCloseRunning = false
 | 
	
		
			
				|  |  | -      if (frontDeviceState == 1) {
 | 
	
		
			
				|  |  | -        import.meta.env.VITE_GLOB_IS_SIMULATE ? play(2, timeScale) : play(2)
 | 
	
		
			
				|  |  | -        frontDeviceState = 2
 | 
	
		
			
				|  |  | -        frontDoorIsOpen.value = false
 | 
	
		
			
				|  |  | -        // backDoorIsOpen.value = false
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      if (selectData.frontGateOpen == 0 && selectData.frontGateClose == 0) {
 | 
	
		
			
				|  |  | +        //关闭前门
 | 
	
		
			
				|  |  | +        isFrontOpenRunning = false;
 | 
	
		
			
				|  |  | +        if (!isFrontCloseRunning) {
 | 
	
		
			
				|  |  | +          isFrontCloseRunning = true;
 | 
	
		
			
				|  |  | +          play(2, timeScale);
 | 
	
		
			
				|  |  | +          frontDeviceState = 2;
 | 
	
		
			
				|  |  | +          frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (selectData.frontGateClose == 1 && selectData.frontGateOpen == 0) {
 | 
	
		
			
				|  |  | +        isFrontCloseRunning = false;
 | 
	
		
			
				|  |  | +        if (frontDeviceState == 1) {
 | 
	
		
			
				|  |  | +          import.meta.env.VITE_GLOB_IS_SIMULATE ? play(2, timeScale) : play(2);
 | 
	
		
			
				|  |  | +          frontDeviceState = 2;
 | 
	
		
			
				|  |  | +          frontDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +          // backDoorIsOpen.value = false
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  if (selectData.rearGateOpenCtrl == 1 || selectData.rearGateOpenCtrl === true) {
 | 
	
		
			
				|  |  | -    isRearCloseRunning = false
 | 
	
		
			
				|  |  | -    if (selectData.rearGateOpen == 0 && selectData.rearGateClose == 0) {
 | 
	
		
			
				|  |  | -      //打开后门
 | 
	
		
			
				|  |  | -      if (!isRearOpenRunning) {
 | 
	
		
			
				|  |  | -        isRearOpenRunning = true
 | 
	
		
			
				|  |  | -        play(3, timeScale)
 | 
	
		
			
				|  |  | -        rearDeviceState = 3
 | 
	
		
			
				|  |  | -        frontDoorIsOpen.value = true
 | 
	
		
			
				|  |  | -        backDoorIsOpen.value = true
 | 
	
		
			
				|  |  | +    if (selectData.rearGateOpenCtrl == 1 || selectData.rearGateOpenCtrl === true) {
 | 
	
		
			
				|  |  | +      isRearCloseRunning = false;
 | 
	
		
			
				|  |  | +      if (selectData.rearGateOpen == 0 && selectData.rearGateClose == 0) {
 | 
	
		
			
				|  |  | +        //打开后门
 | 
	
		
			
				|  |  | +        if (!isRearOpenRunning) {
 | 
	
		
			
				|  |  | +          isRearOpenRunning = true;
 | 
	
		
			
				|  |  | +          play(3, timeScale);
 | 
	
		
			
				|  |  | +          rearDeviceState = 3;
 | 
	
		
			
				|  |  | +          frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | +      if (selectData.rearGateOpen == 1 && selectData.rearGateClose == 0) {
 | 
	
		
			
				|  |  | +        isRearOpenRunning = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (selectData.rearGateOpen == 1 && selectData.rearGateClose == 0) {
 | 
	
		
			
				|  |  | -      isRearOpenRunning = false
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      if (rearDeviceState != 3) {
 | 
	
		
			
				|  |  | -        rearDeviceState = 3
 | 
	
		
			
				|  |  | -        import.meta.env.VITE_GLOB_IS_SIMULATE ? play(3, timeScale) : play(3)
 | 
	
		
			
				|  |  | -        backDoorIsOpen.value = false
 | 
	
		
			
				|  |  | -        frontDoorIsOpen.value = true
 | 
	
		
			
				|  |  | +        if (rearDeviceState != 3) {
 | 
	
		
			
				|  |  | +          rearDeviceState = 3;
 | 
	
		
			
				|  |  | +          import.meta.env.VITE_GLOB_IS_SIMULATE ? play(3, timeScale) : play(3);
 | 
	
		
			
				|  |  | +          backDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +          frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  } else {
 | 
	
		
			
				|  |  | -    if (selectData.rearGateOpen == 0 && selectData.rearGateClose == 0) {
 | 
	
		
			
				|  |  | -      //关闭后门
 | 
	
		
			
				|  |  | -      isRearOpenRunning = false
 | 
	
		
			
				|  |  | -      if (!isRearCloseRunning) {
 | 
	
		
			
				|  |  | -        isRearCloseRunning = true
 | 
	
		
			
				|  |  | -        play(4, timeScale)
 | 
	
		
			
				|  |  | -        rearDeviceState = 4
 | 
	
		
			
				|  |  | -        frontDoorIsOpen.value = true
 | 
	
		
			
				|  |  | -        backDoorIsOpen.value = true
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      if (selectData.rearGateOpen == 0 && selectData.rearGateClose == 0) {
 | 
	
		
			
				|  |  | +        //关闭后门
 | 
	
		
			
				|  |  | +        isRearOpenRunning = false;
 | 
	
		
			
				|  |  | +        if (!isRearCloseRunning) {
 | 
	
		
			
				|  |  | +          isRearCloseRunning = true;
 | 
	
		
			
				|  |  | +          play(4, timeScale);
 | 
	
		
			
				|  |  | +          rearDeviceState = 4;
 | 
	
		
			
				|  |  | +          frontDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +          backDoorIsOpen.value = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (selectData.rearGateClose == 1 && selectData.rearGateOpen == 0) {
 | 
	
		
			
				|  |  | -      isRearCloseRunning = false
 | 
	
		
			
				|  |  | -      if (rearDeviceState == 3) {
 | 
	
		
			
				|  |  | -        rearDeviceState = 4
 | 
	
		
			
				|  |  | -        import.meta.env.VITE_GLOB_IS_SIMULATE ? play(4, timeScale) : play(4)
 | 
	
		
			
				|  |  | -        backDoorIsOpen.value = false
 | 
	
		
			
				|  |  | +      if (selectData.rearGateClose == 1 && selectData.rearGateOpen == 0) {
 | 
	
		
			
				|  |  | +        isRearCloseRunning = false;
 | 
	
		
			
				|  |  | +        if (rearDeviceState == 3) {
 | 
	
		
			
				|  |  | +          rearDeviceState = 4;
 | 
	
		
			
				|  |  | +          import.meta.env.VITE_GLOB_IS_SIMULATE ? play(4, timeScale) : play(4);
 | 
	
		
			
				|  |  | +          backDoorIsOpen.value = false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  // console.log('frontGateOpen:', selectData.frontGateOpen, '  frontGateClose:', selectData.frontGateClose, ' rearGateOpen:', selectData.rearGateOpen, '  rearGateClose:', selectData.rearGateClose, '  frontGateOpenCtrl:', selectData.frontGateOpenCtrl, '  rearGateOpenCtrl:', selectData.rearGateOpenCtrl)
 | 
	
		
			
				|  |  | +    // console.log('frontGateOpen:', selectData.frontGateOpen, '  frontGateClose:', selectData.frontGateClose, ' rearGateOpen:', selectData.rearGateOpen, '  rearGateClose:', selectData.rearGateClose, '  frontGateOpenCtrl:', selectData.frontGateOpenCtrl, '  rearGateOpenCtrl:', selectData.rearGateOpenCtrl)
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  function handleCancel() {
 | 
	
		
			
				|  |  | +    modalIsShow.value = false;
 | 
	
		
			
				|  |  | +    modalTitle.value = '';
 | 
	
		
			
				|  |  | +    modalType.value = '';
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function handleCancel() {
 | 
	
		
			
				|  |  | -  modalIsShow.value = false;
 | 
	
		
			
				|  |  | -  modalTitle.value = '';
 | 
	
		
			
				|  |  | -  modalType.value = '';
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | +  // // 远程、就地切换
 | 
	
		
			
				|  |  | +  // function changeType() {
 | 
	
		
			
				|  |  | +  //   const data = {
 | 
	
		
			
				|  |  | +  //     deviceid: selectData.deviceID,
 | 
	
		
			
				|  |  | +  //     devicetype: selectData.deviceType,
 | 
	
		
			
				|  |  | +  //     paramcode: 'autoRoManualControl',
 | 
	
		
			
				|  |  | +  //     value: selectData.autoRoManual,
 | 
	
		
			
				|  |  | +  //   };
 | 
	
		
			
				|  |  | +  //   deviceControlApi(data).then(() => {
 | 
	
		
			
				|  |  | +  //     if (globalConfig.History_Type == 'remote') {
 | 
	
		
			
				|  |  | +  //       message.success('指令已下发至生产管控平台成功!');
 | 
	
		
			
				|  |  | +  //     } else {
 | 
	
		
			
				|  |  | +  //       message.success('指令已下发成功!');
 | 
	
		
			
				|  |  | +  //     }
 | 
	
		
			
				|  |  | +  //   });
 | 
	
		
			
				|  |  | +  // }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// 远程、就地切换
 | 
	
		
			
				|  |  | -function changeType() {
 | 
	
		
			
				|  |  | -  const data = {
 | 
	
		
			
				|  |  | -    deviceid: selectData.deviceID,
 | 
	
		
			
				|  |  | -    devicetype: selectData.deviceType,
 | 
	
		
			
				|  |  | -    paramcode: 'autoRoManualControl',
 | 
	
		
			
				|  |  | -    value: selectData.autoRoManual,
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | -  deviceControlApi(data).then(() => {
 | 
	
		
			
				|  |  | -    if (globalConfig.History_Type == 'remote') {
 | 
	
		
			
				|  |  | -      message.success('指令已下发至生产管控平台成功!')
 | 
	
		
			
				|  |  | -    } else {
 | 
	
		
			
				|  |  | -      message.success('指令已下发成功!')
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  });
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -onMounted(async () => {
 | 
	
		
			
				|  |  | -  loading.value = true;
 | 
	
		
			
				|  |  | -  const playerDom = document.getElementById('fm-player1')?.getElementsByClassName('vjs-tech')[0]
 | 
	
		
			
				|  |  | -  mountedThree(playerDom).then(async () => {
 | 
	
		
			
				|  |  | -    await getMonitor(true);
 | 
	
		
			
				|  |  | -    loading.value = false;
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | +  onMounted(async () => {
 | 
	
		
			
				|  |  | +    loading.value = true;
 | 
	
		
			
				|  |  | +    const playerDom = document.getElementById('fm-player1')?.getElementsByClassName('vjs-tech')[0];
 | 
	
		
			
				|  |  | +    mountedThree(playerDom).then(async () => {
 | 
	
		
			
				|  |  | +      await getMonitor(true);
 | 
	
		
			
				|  |  | +      loading.value = false;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |    });
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -onBeforeUnmount(() => {
 | 
	
		
			
				|  |  | -  getDeviceBaseList();
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | +  onBeforeUnmount(() => {
 | 
	
		
			
				|  |  | +    getDeviceBaseList();
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -onUnmounted(() => {
 | 
	
		
			
				|  |  | -  if (timer) {
 | 
	
		
			
				|  |  | -    clearTimeout(timer);
 | 
	
		
			
				|  |  | -    timer = undefined;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  destroy()
 | 
	
		
			
				|  |  | -  if(webRtcServer.length > 0){
 | 
	
		
			
				|  |  | -    webRtcServer.forEach(item => {
 | 
	
		
			
				|  |  | -      item.disconnect()
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | +  onUnmounted(() => {
 | 
	
		
			
				|  |  | +    if (timer) {
 | 
	
		
			
				|  |  | +      clearTimeout(timer);
 | 
	
		
			
				|  |  | +      timer = undefined;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    destroy();
 | 
	
		
			
				|  |  | +    if (webRtcServer.length > 0) {
 | 
	
		
			
				|  |  | +      webRtcServer.forEach((item) => {
 | 
	
		
			
				|  |  | +        item.disconnect();
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |  </script>
 | 
	
		
			
				|  |  | - ,
 | 
	
		
			
				|  |  | +,
 | 
	
		
			
				|  |  |  <style lang="less" scoped>
 | 
	
		
			
				|  |  | -@import '/@/design/vent/modal.less';
 | 
	
		
			
				|  |  | -.scene-box{
 | 
	
		
			
				|  |  | -  .bottom-tabs-box{
 | 
	
		
			
				|  |  | -    height: 350px;
 | 
	
		
			
				|  |  | +  @import '/@/design/vent/modal.less';
 | 
	
		
			
				|  |  | +  .scene-box {
 | 
	
		
			
				|  |  | +    .bottom-tabs-box {
 | 
	
		
			
				|  |  | +      height: 350px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -.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%;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -::-webkit-scrollbar-thumb {
 | 
	
		
			
				|  |  | -  -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
 | 
	
		
			
				|  |  | -  background: #4288A444;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  :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;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  </style>
 |