| | |
| | | </div> |
| | | |
| | | <div class="speed"> |
| | | <el-icon class="btnIcon"> |
| | | <el-icon class="btnIcon" @click="speed = speed + 1"> |
| | | <Plus /> |
| | | </el-icon> |
| | | <div> |
| | |
| | | <br /> |
| | | m/s |
| | | </div> |
| | | <el-icon class="btnIcon"> |
| | | <el-icon class="btnIcon" @click="speed = speed - 1"> |
| | | <Minus /> |
| | | </el-icon> |
| | | </div> |
| | |
| | | <br /> |
| | | 制 |
| | | </div> |
| | | <div class="ptzControlBtnBox"> |
| | | <div class="ptzControlBtn b-r"> |
| | | <div v-for="(item, index) in list5" :style="item.style" class="ptzControlItem"></div> |
| | | |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="videoBox" v-if="valueTime !== '00:00:00'"> |
| | | <div class="videoName">录像</div> |
| | | <div class="videoPoint"></div> |
| | | <div class="videoTime">{{ valueTime }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="divider"></div> |
| | | <div v-for="arr in list4" class="info"> |
| | | <div v-for="item in arr" class="infoItem"> |
| | |
| | | import controlCenterImg from '@/assets/images/taskManagement/taskIntermediateContent/controlCenter.png' |
| | | import BaseControl from '@/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/ControlPanel/BaseControl.vue' |
| | | import EventBus from '@/event-bus' |
| | | import dayjs from 'dayjs' |
| | | |
| | | const deviceOsdInfo = inject('deviceOsdInfo') |
| | | const taskDetails = inject('taskDetails') |
| | |
| | | |
| | | let mqttState = null |
| | | const client_id = ref('') |
| | | const valueTime = ref('00:00:00') |
| | | let timer = null |
| | | let totalSeconds = 0 |
| | | |
| | | const deviceTopicInfo = ref({ |
| | | sn: deviceOsdInfo.value?.data?.sn, |
| | |
| | | subTopic: '', |
| | | }) |
| | | const flightController = ref(false) |
| | | console.log('控制面板') |
| | | |
| | | const getStyle = item => { |
| | | return { |
| | | ...item.style, |
| | | } |
| | | } |
| | | |
| | | // 控制对象 |
| | | let manualControl = {} |
| | | |
| | | const sn = computed(() => deviceOsdInfo?.value?.data?.sn) |
| | | const isAutoControl = inject('isAutoControl') |
| | | |
| | | const timeStart = () => { |
| | | stop() // 避免重复启动 |
| | | timer = setInterval(() => { |
| | | totalSeconds++ |
| | | const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0') |
| | | const minutes = String(Math.floor((totalSeconds % 3600) / 60)).padStart(2, '0') |
| | | const secs = String(totalSeconds % 60).padStart(2, '0') |
| | | valueTime.value = `${hours}:${minutes}:${secs}` |
| | | }, 1000) |
| | | } |
| | | |
| | | const timeStop = () => { |
| | | if (timer) { |
| | | clearInterval(timer) |
| | | timer = null |
| | | totalSeconds = 0 |
| | | valueTime.value = '00:00:00' |
| | | } |
| | | } |
| | | |
| | | // 按下操作 |
| | | function onMouseDown(type) { |
| | | manualControl?.handleKeyup(type, { sn: sn.value, speed: speed.value }) |
| | | } |
| | | |
| | | // 弹起操作 |
| | | function onMouseUp() { |
| | | console.log('弹起') |
| | | manualControl?.resetControlState() |
| | | } |
| | | |
| | |
| | | deviceTopicInfo.value.pubTopic = data.pub[0] |
| | | } |
| | | ElMessage.success('控制成功') |
| | | isAutoControl.value = false |
| | | }) |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | // 返航或取消返航 |
| | | const returnOrCancelReturn = () => { |
| | | if (deviceOsdInfo.value?.data?.host?.mode_code === 9) { |
| | | cancelBackDock() |
| | | } else { |
| | | onBackDock() |
| | | } |
| | | } |
| | | |
| | | watch( |
| | | () => workspace_id.value, |
| | | async () => { |
| | |
| | | } |
| | | ) |
| | | |
| | | // 返航或取消返航 |
| | | const returnOrCancelReturn = () => { |
| | | if (deviceOsdInfo.value?.data?.host?.mode_code === 9) { |
| | | cancelBackDock() |
| | | } else { |
| | | onBackDock() |
| | | } |
| | | } |
| | | |
| | | onMounted(async () => { |
| | | EventBus.on('controlPanel-control', control) |
| | | EventBus.on('controlPanel-cancelControl', cancelControl) |
| | | EventBus.on('controlPanel-returnOrCancelReturn', returnOrCancelReturn) |
| | | EventBus.on('controlPanel-onMouseDown', onMouseDown) |
| | | EventBus.on('controlPanel-timeStart', timeStart) |
| | | EventBus.on('controlPanel-timeStop', timeStop) |
| | | }) |
| | | |
| | | onBeforeUnmount(() => { |
| | | EventBus.off('controlPanel-control', control) |
| | | EventBus.off('controlPanel-cancelControl', cancelControl) |
| | | EventBus.off('controlPanel-returnOrCancelReturn', returnOrCancelReturn) |
| | | EventBus.off('controlPanel-onMouseDown', onMouseDown) |
| | | EventBus.off('controlPanel-timeStart', timeStart) |
| | | EventBus.off('controlPanel-timeStop', timeStop) |
| | | destroyConnect() |
| | | }) |
| | | </script> |
| | |
| | | align-items: center; |
| | | justify-content: space-evenly; |
| | | |
| | | .ptzControlBtnBox { |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | |
| | | .ptzControlBtn { |
| | | position: relative; |
| | | overflow: hidden; |
| | |
| | | } |
| | | } |
| | | |
| | | .videoBox { |
| | | display: flex; |
| | | align-items: center; |
| | | font-family: Segoe UI, Segoe UI; |
| | | margin-top: 5px; |
| | | |
| | | .videoName { |
| | | font-weight: 400; |
| | | font-size: 12px; |
| | | color: rgba(210, 232, 250, 0.57); |
| | | } |
| | | |
| | | .videoPoint { |
| | | width: 3px; |
| | | height: 3px; |
| | | background: #12ff7f; |
| | | border-radius: 50%; |
| | | margin: 0 5px; |
| | | } |
| | | |
| | | .videoTime { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | color: #ffffff; |
| | | line-height: 15px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .divider { |
| | | position: absolute; |
| | | transform: translateX(90px); |