Compare commits

...

2 Commits

View File

@@ -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'"
@@ -148,6 +157,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
@@ -249,6 +259,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) {
@@ -262,6 +290,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 {
@@ -566,8 +595,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)
}
}) })
// 重置绘制状态 // 重置绘制状态