|
|
@@ -1,163 +1,189 @@
|
|
|
<template>
|
|
|
<div class="drone-control-wrapper">
|
|
|
- <div class="drone-control-header">Drone Flight Control</div>
|
|
|
- <div class="drone-control-box">
|
|
|
- <div class="box">
|
|
|
- <div class="row">
|
|
|
- <div class="drone-control"><Button :ghost="!flightController" size="small" @click="onClickFightControl">{{
|
|
|
- flightController ? 'Exit Remote Control' : 'Enter Remote Control' }}</Button></div>
|
|
|
- </div>
|
|
|
- <div class="row">
|
|
|
- <div class="drone-control-direction">
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_Q)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <UndoOutlined />
|
|
|
- </template><span class="word">Q</span>
|
|
|
- </Button>
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_W)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <UpOutlined />
|
|
|
- </template><span class="word">W</span>
|
|
|
- </Button>
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_E)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <RedoOutlined />
|
|
|
- </template><span class="word">E</span>
|
|
|
- </Button>
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.ARROW_UP)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <ArrowUpOutlined />
|
|
|
- </template>
|
|
|
- </Button>
|
|
|
- <br />
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_A)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <LeftOutlined />
|
|
|
- </template><span class="word">A</span>
|
|
|
- </Button>
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_S)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <DownOutlined />
|
|
|
- </template><span class="word">S</span>
|
|
|
- </Button>
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_D)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <RightOutlined />
|
|
|
- </template><span class="word">D</span>
|
|
|
- </Button>
|
|
|
- <Button size="small" ghost @mousedown="onMouseDown(KeyCode.ARROW_DOWN)" @onmouseup="onMouseUp">
|
|
|
- <template #icon>
|
|
|
- <ArrowDownOutlined />
|
|
|
- </template>
|
|
|
- </Button>
|
|
|
+ <div class="drone-control-header">
|
|
|
+ 无人机飞行控制
|
|
|
+ </div>
|
|
|
+ <div class="drone-control-button">
|
|
|
+ <Button style="margin-right: 10px;" :ghost="!flightController" size="small" @click="onClickFightControl">
|
|
|
+ {{ flightController ? '退出远程控制' : '进入远程控制' }}
|
|
|
+ </Button>
|
|
|
+ <Button type="primary" size="small" danger ghost @click="handleEmergencyStop">
|
|
|
+ <template #icon>
|
|
|
+ <PauseCircleOutlined />
|
|
|
+ </template>
|
|
|
+ <span>中止</span>
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
+ <div class="drone-control-more">
|
|
|
+ <a-tooltip title="左旋转">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_Q)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <UndoOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">Q</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ <a-tooltip title="前进">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_W)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <UpOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">W</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ <a-tooltip title="右旋转">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_E)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <RedoOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">E</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ <a-tooltip title="上升">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_C)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <ArrowUpOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">C</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ </div>
|
|
|
+ <div class="drone-control-more">
|
|
|
+ <a-tooltip title="左平移">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_A)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <LeftOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">A</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ <a-tooltip title="后退">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_S)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <DownOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">S</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ <a-tooltip title="右平移">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_D)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <RightOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">D</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ <a-tooltip title="下降">
|
|
|
+ <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_Z)" @onmouseup="onMouseUp">
|
|
|
+ <template #icon>
|
|
|
+ <ArrowDownOutlined />
|
|
|
+ </template>
|
|
|
+ <span class="word">Z</span>
|
|
|
+ </Button>
|
|
|
+ </a-tooltip>
|
|
|
+ </div>
|
|
|
+ <Button style="margin-right: 10px;" size="small" ghost @click="onShowTakeoffToPointPopover">
|
|
|
+ <span>一键起飞</span>
|
|
|
+ </Button>
|
|
|
+ <DroneControlPopover :visible="flyToPointPopoverData.visible" :loading="flyToPointPopoverData.loading"
|
|
|
+ @confirm="($event) => onFlyToConfirm(true)" @cancel="($event) => onFlyToConfirm(false)">
|
|
|
+ <template #formContent>
|
|
|
+ <div class="form-content">
|
|
|
+ <div>
|
|
|
+ <span class="form-label">latitude:</span>
|
|
|
+ <a-input-number v-model:value="flyToPointPopoverData.latitude" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">longitude:</span>
|
|
|
+ <a-input-number v-model:value="flyToPointPopoverData.longitude" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">height(m):</span>
|
|
|
+ <a-input-number v-model:value="flyToPointPopoverData.height" />
|
|
|
</div>
|
|
|
- <Button type="primary" size="small" danger ghost @click="handleEmergencyStop">
|
|
|
- <template #icon>
|
|
|
- <PauseCircleOutlined />
|
|
|
- </template><span>Break</span>
|
|
|
- </Button>
|
|
|
</div>
|
|
|
- <div class="row">
|
|
|
- <DroneControlPopover :visible="flyToPointPopoverData.visible" :loading="flyToPointPopoverData.loading"
|
|
|
- @confirm="($event) => onFlyToConfirm(true)" @cancel="($event) => onFlyToConfirm(false)">
|
|
|
- <template #formContent>
|
|
|
- <div class="form-content">
|
|
|
- <div>
|
|
|
- <span class="form-label">latitude:</span>
|
|
|
- <a-input-number v-model:value="flyToPointPopoverData.latitude" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">longitude:</span>
|
|
|
- <a-input-number v-model:value="flyToPointPopoverData.longitude" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">height(m):</span>
|
|
|
- <a-input-number v-model:value="flyToPointPopoverData.height" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <Button size="small" ghost @click="onShowFlyToPopover">
|
|
|
- <span>Fly to</span>
|
|
|
- </Button>
|
|
|
- </DroneControlPopover>
|
|
|
- <Button size="small" ghost @click="onStopFlyToPoint">
|
|
|
- <span>Stop Fly to</span>
|
|
|
- </Button>
|
|
|
- <DroneControlPopover :visible="takeoffToPointPopoverData.visible" :loading="takeoffToPointPopoverData.loading"
|
|
|
- @confirm="($event) => onTakeoffToPointConfirm(true)" @cancel="($event) => onTakeoffToPointConfirm(false)">
|
|
|
- <template #formContent>
|
|
|
- <div class="form-content">
|
|
|
- <div>
|
|
|
- <span class="form-label">latitude:</span>
|
|
|
- <a-input-number v-model:value="takeoffToPointPopoverData.latitude" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">longitude:</span>
|
|
|
- <a-input-number v-model:value="takeoffToPointPopoverData.longitude" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">height(m):</span>
|
|
|
- <a-input-number v-model:value="takeoffToPointPopoverData.height" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Safe Takeoff Altitude(m):</span>
|
|
|
- <a-input-number v-model:value="takeoffToPointPopoverData.securityTakeoffHeight" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Return-to-Home Altitude(m):</span>
|
|
|
- <a-input-number v-model:value="takeoffToPointPopoverData.rthAltitude" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Lost Action:</span>
|
|
|
- <a-select v-model:value="takeoffToPointPopoverData.rcLostAction" style="width: 120px"
|
|
|
- :options="LostControlActionInCommandFLightOptions"></a-select>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Wayline Lost Action:</span>
|
|
|
- <a-select v-model:value="takeoffToPointPopoverData.exitWaylineWhenRcLost" style="width: 120px"
|
|
|
- :options="WaylineLostControlActionInCommandFlightOptions"></a-select>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Return-to-Home Mode:</span>
|
|
|
- <a-select v-model:value="takeoffToPointPopoverData.rthMode" style="width: 120px"
|
|
|
- :options="RthModeInCommandFlightOptions"></a-select>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Commander Mode Lost Action:</span>
|
|
|
- <a-select v-model:value="takeoffToPointPopoverData.commanderModeLostAction" style="width: 120px"
|
|
|
- :options="CommanderModeLostActionInCommandFlightOptions"></a-select>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Commander Flight Mode:</span>
|
|
|
- <a-select v-model:value="takeoffToPointPopoverData.commanderFlightMode" style="width: 120px"
|
|
|
- :options="CommanderFlightModeInCommandFlightOptions"></a-select>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="form-label">Commander Flight Height(m):</span>
|
|
|
- <a-input-number v-model:value="takeoffToPointPopoverData.commanderFlightHeight" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <Button size="small" ghost @click="onShowTakeoffToPointPopover">
|
|
|
- <span>Take off</span>
|
|
|
- </Button>
|
|
|
- <div v-for="(cmdItem) in cmdList" :key="cmdItem.cmdKey" class="control-cmd-item">
|
|
|
- <Button :loading="cmdItem.loading" size="small" ghost @click="sendControlCmd(cmdItem, 0)">
|
|
|
- {{ cmdItem.operateText }}
|
|
|
- </Button>
|
|
|
+ </template>
|
|
|
+ <Button size="small" ghost @click="onShowFlyToPopover">
|
|
|
+ <span>飞向目标点</span>
|
|
|
+ </Button>
|
|
|
+ </DroneControlPopover>
|
|
|
+ <Button style="margin-left: 10px;" size="small" ghost @click="onStopFlyToPoint">
|
|
|
+ <span>中止飞向目标点</span>
|
|
|
+ </Button>
|
|
|
+ <div style="margin-top: 10px;">
|
|
|
+ <DroneControlPopover :visible="takeoffToPointPopoverData.visible" :loading="takeoffToPointPopoverData.loading"
|
|
|
+ @confirm="($event) => onTakeoffToPointConfirm(true)" @cancel="($event) => onTakeoffToPointConfirm(false)">
|
|
|
+ <template #formContent>
|
|
|
+ <div class="form-content">
|
|
|
+ <div>
|
|
|
+ <span class="form-label">latitude:</span>
|
|
|
+ <a-input-number v-model:value="takeoffToPointPopoverData.latitude" />
|
|
|
</div>
|
|
|
<div>
|
|
|
- <Button size="small" ghost @click="openLivestreamAgora">
|
|
|
- <span>Agora Live</span>
|
|
|
- </Button>
|
|
|
- <Button size="small" ghost @click="openLivestreamOthers">
|
|
|
- <span>RTMP/GB28181 Live</span>
|
|
|
- </Button>
|
|
|
+ <span class="form-label">longitude:</span>
|
|
|
+ <a-input-number v-model:value="takeoffToPointPopoverData.longitude" />
|
|
|
</div>
|
|
|
- </DroneControlPopover>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- <div class="box">
|
|
|
+ <div>
|
|
|
+ <span class="form-label">height(m):</span>
|
|
|
+ <a-input-number v-model:value="takeoffToPointPopoverData.height" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Safe Takeoff Altitude(m):</span>
|
|
|
+ <a-input-number v-model:value="takeoffToPointPopoverData.securityTakeoffHeight" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Return-to-Home Altitude(m):</span>
|
|
|
+ <a-input-number v-model:value="takeoffToPointPopoverData.rthAltitude" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Lost Action:</span>
|
|
|
+ <a-select v-model:value="takeoffToPointPopoverData.rcLostAction" style="width: 120px"
|
|
|
+ :options="LostControlActionInCommandFLightOptions"></a-select>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Wayline Lost Action:</span>
|
|
|
+ <a-select v-model:value="takeoffToPointPopoverData.exitWaylineWhenRcLost" style="width: 120px"
|
|
|
+ :options="WaylineLostControlActionInCommandFlightOptions"></a-select>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Return-to-Home Mode:</span>
|
|
|
+ <a-select v-model:value="takeoffToPointPopoverData.rthMode" style="width: 120px"
|
|
|
+ :options="RthModeInCommandFlightOptions"></a-select>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Commander Mode Lost Action:</span>
|
|
|
+ <a-select v-model:value="takeoffToPointPopoverData.commanderModeLostAction" style="width: 120px"
|
|
|
+ :options="CommanderModeLostActionInCommandFlightOptions"></a-select>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Commander Flight Mode:</span>
|
|
|
+ <a-select v-model:value="takeoffToPointPopoverData.commanderFlightMode" style="width: 120px"
|
|
|
+ :options="CommanderFlightModeInCommandFlightOptions"></a-select>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="form-label">Commander Flight Height(m):</span>
|
|
|
+ <a-input-number v-model:value="takeoffToPointPopoverData.commanderFlightHeight" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <span v-for="(cmdItem) in cmdList" :key="cmdItem.cmdKey" class="control-cmd-item">
|
|
|
+ <Button style="margin-right: 10px;" :loading="cmdItem.loading" size="small" ghost
|
|
|
+ @click="sendControlCmd(cmdItem, 0)">
|
|
|
+ {{ cmdItem.operateText }}
|
|
|
+ </Button>
|
|
|
+ </span>
|
|
|
+ </DroneControlPopover>
|
|
|
+ </div>
|
|
|
+ <!-- <div>
|
|
|
+ <Button size="small" ghost @click="openLivestreamAgora">
|
|
|
+ <span>Agora Live</span>
|
|
|
+ </Button>
|
|
|
+ <Button size="small" ghost @click="openLivestreamOthers">
|
|
|
+ <span>RTMP/GB28181 Live</span>
|
|
|
+ </Button>
|
|
|
+ </div> -->
|
|
|
+ <!-- <div class="drone-control-box">
|
|
|
+ <div class="box">
|
|
|
<div class="row">
|
|
|
<Select v-model:value="payloadSelectInfo.value" style="width: 110px; marginRight: 5px"
|
|
|
:options="payloadSelectInfo.options" @change="handlePayloadChange" />
|
|
|
@@ -244,8 +270,8 @@
|
|
|
</Button>
|
|
|
</DroneControlPopover>
|
|
|
</div>
|
|
|
- </div> -->
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+ </div> -->
|
|
|
<!-- 信息提示 -->
|
|
|
<!-- <DroneControlInfoPanel :message="drcInfo"></DroneControlInfoPanel> -->
|
|
|
</div>
|
|
|
@@ -749,61 +775,36 @@ watch(() => errorInfo, (errorInfo) => {
|
|
|
|
|
|
<style lang='scss' scoped>
|
|
|
.drone-control-wrapper {
|
|
|
- // border-bottom: 1px solid #515151;
|
|
|
+ padding: 10px 10px 20px;
|
|
|
+ border-top: 1px solid #515151;
|
|
|
|
|
|
.drone-control-header {
|
|
|
font-size: 14px;
|
|
|
font-weight: 600;
|
|
|
- padding: 10px 10px 0px;
|
|
|
+ margin-bottom: 10px;
|
|
|
}
|
|
|
|
|
|
- .drone-control-box {
|
|
|
- display: flex;
|
|
|
- flex-wrap: 1;
|
|
|
-
|
|
|
- .box {
|
|
|
- width: 50%;
|
|
|
- padding: 5px;
|
|
|
- border: 0.5px solid rgba(255, 255, 255, 0.3);
|
|
|
-
|
|
|
- .row {
|
|
|
- display: flex;
|
|
|
- flex-wrap: wrap;
|
|
|
- padding: 2px;
|
|
|
-
|
|
|
- +.row {
|
|
|
- margin-bottom: 6px;
|
|
|
- }
|
|
|
-
|
|
|
- :deep(.ant-btn) {
|
|
|
- font-size: 12px;
|
|
|
- padding: 0px 4px;
|
|
|
- margin-right: 5px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .drone-control {
|
|
|
- :deep(.ant-select-single:not(.ant-select-customize-input) .ant-select-selector) {
|
|
|
- padding: 0 2px;
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
+ .drone-control-button {
|
|
|
+ margin-bottom: 10px;
|
|
|
+ }
|
|
|
|
|
|
- .drone-control-direction {
|
|
|
- margin-right: 10px;
|
|
|
+ .drone-control-more {
|
|
|
+ width: 48%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 10px;
|
|
|
|
|
|
- .ant-btn {
|
|
|
- margin-right: 0;
|
|
|
- }
|
|
|
+ .ant-btn {
|
|
|
+ margin-right: 0;
|
|
|
+ height: 32px;
|
|
|
+ }
|
|
|
|
|
|
- .word {
|
|
|
- width: 12px;
|
|
|
- margin-left: 2px;
|
|
|
- font-size: 12px;
|
|
|
- color: #aaa;
|
|
|
- }
|
|
|
- }
|
|
|
+ .word {
|
|
|
+ width: 14px;
|
|
|
+ margin-left: 2px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #aaa;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-</style>
|
|
|
+</style>
|