feat:取消删除当前绘制围栏,增加起飞按钮
This commit is contained in:
51
src/App.vue
51
src/App.vue
@@ -69,6 +69,15 @@
|
|||||||
{{ isInFence ? '围栏内' : '围栏外' }}
|
{{ isInFence ? '围栏内' : '围栏外' }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
|
<el-button
|
||||||
|
@click="handleTakeoff"
|
||||||
|
:type="isFlying ? 'warning' : 'success'"
|
||||||
|
size="small"
|
||||||
|
style="width: 100%; margin-top: 8px;"
|
||||||
|
:disabled="isFlying"
|
||||||
|
>
|
||||||
|
{{ isFlying ? '飞行中' : '起飞' }}
|
||||||
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
@click="toggleWebSocket"
|
@click="toggleWebSocket"
|
||||||
:type="wsConnected ? 'danger' : 'primary'"
|
:type="wsConnected ? 'danger' : 'primary'"
|
||||||
@@ -147,6 +156,7 @@ const fences = ref([])
|
|||||||
// 无人机相关状态
|
// 无人机相关状态
|
||||||
const wsConnected = ref(false)
|
const wsConnected = ref(false)
|
||||||
const droneData = ref(null)
|
const droneData = ref(null)
|
||||||
|
const isFlying = ref(false)
|
||||||
const droneMarker = ref(null)
|
const droneMarker = ref(null)
|
||||||
let wsClient = null
|
let wsClient = null
|
||||||
let mockDataGenerator = null
|
let mockDataGenerator = null
|
||||||
@@ -226,6 +236,24 @@ const initWebSocket = () => {
|
|||||||
ElMessage.success('无人机数据连接成功(模拟模式)')
|
ElMessage.success('无人机数据连接成功(模拟模式)')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 起飞处理
|
||||||
|
const handleTakeoff = () => {
|
||||||
|
// 检查是否已有围栏
|
||||||
|
if (fences.value.length === 0) {
|
||||||
|
ElMessage.warning('请先绘制电子围栏后再起飞')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果未连接,先连接
|
||||||
|
if (!wsConnected.value) {
|
||||||
|
initWebSocket()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置飞行状态
|
||||||
|
isFlying.value = true
|
||||||
|
ElMessage.success('无人机已起飞')
|
||||||
|
}
|
||||||
|
|
||||||
// 切换WebSocket连接
|
// 切换WebSocket连接
|
||||||
const toggleWebSocket = () => {
|
const toggleWebSocket = () => {
|
||||||
if (wsConnected.value) {
|
if (wsConnected.value) {
|
||||||
@@ -239,6 +267,7 @@ const toggleWebSocket = () => {
|
|||||||
wsClient = null
|
wsClient = null
|
||||||
}
|
}
|
||||||
wsConnected.value = false
|
wsConnected.value = false
|
||||||
|
isFlying.value = false // 断开连接时重置飞行状态
|
||||||
ElMessage.info('已断开连接')
|
ElMessage.info('已断开连接')
|
||||||
conn.close();
|
conn.close();
|
||||||
} else {
|
} else {
|
||||||
@@ -543,8 +572,26 @@ const handleDrawComplete = (event) => {
|
|||||||
addFenceLabel(fences.value[fenceIndex])
|
addFenceLabel(fences.value[fenceIndex])
|
||||||
}
|
}
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
// 用户取消,保持默认名称(已经在上面设置了)
|
// 用户取消,清除刚刚添加的围栏
|
||||||
// 不需要额外操作,标签已经用默认名称创建了
|
const cancelledFence = fences.value[fenceIndex]
|
||||||
|
if (cancelledFence) {
|
||||||
|
// 从地图上移除围栏和标签
|
||||||
|
if (cancelledFence.shape) {
|
||||||
|
try {
|
||||||
|
const currentMap = cancelledFence.shape.getMap ? cancelledFence.shape.getMap() : null
|
||||||
|
if (currentMap) {
|
||||||
|
currentMap.remove(cancelledFence.shape)
|
||||||
|
if (cancelledFence.label) {
|
||||||
|
currentMap.remove(cancelledFence.label)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('清除围栏时出错:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 从列表中移除
|
||||||
|
fences.value.splice(fenceIndex, 1)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// 重置绘制状态
|
// 重置绘制状态
|
||||||
|
|||||||
Reference in New Issue
Block a user