From bf483860821fb7a3dbeb9c76192c1c1e3e35f1df Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 17 Apr 2025 18:14:13 +0800
Subject: [PATCH] feat: 控制台云台回中功能
---
src/hooks/controlDrone/useManualControl.js | 20 ++++++++++++--------
src/components/CurrentTaskDetails/ControlPanel/ControlPanel.vue | 1 +
src/components/CurrentTaskDetails/ControlPanel/BaseControl.vue | 1 +
src/api/payload.js | 11 ++++++++++-
src/components/CurrentTaskDetails/TaskDetailsLeft.vue | 21 ++++++++++++---------
5 files changed, 36 insertions(+), 18 deletions(-)
diff --git a/src/api/payload.js b/src/api/payload.js
index 61e91ea..77b9be3 100644
--- a/src/api/payload.js
+++ b/src/api/payload.js
@@ -53,12 +53,21 @@
// 相机参数调整
export async function cameraParamsChangeApi(data) {
return await request({
- url:`/drone-device-core/payload-control/payload/zoom/level`,
+ url:`${API_PREFIX}/devices/payload-control/payload/zoom/level`,
method:'post',
data
})
}
+// 云台重置
+export async function ptzResetModeApi(params) {
+ return await request({
+ url:`${API_PREFIX}/devices/payload-control/payload/reset`,
+ method:'get',
+ params
+ })
+}
+
// 切换直播镜头
diff --git a/src/components/CurrentTaskDetails/ControlPanel/BaseControl.vue b/src/components/CurrentTaskDetails/ControlPanel/BaseControl.vue
index fd914f6..b682f14 100644
--- a/src/components/CurrentTaskDetails/ControlPanel/BaseControl.vue
+++ b/src/components/CurrentTaskDetails/ControlPanel/BaseControl.vue
@@ -55,6 +55,7 @@
}
function turnBack() {
+ isAutoControl.value = true
EventBus.emit('controlPanel-returnOrCancelReturn')
}
</script>
diff --git a/src/components/CurrentTaskDetails/ControlPanel/ControlPanel.vue b/src/components/CurrentTaskDetails/ControlPanel/ControlPanel.vue
index d78a55a..546ab80 100644
--- a/src/components/CurrentTaskDetails/ControlPanel/ControlPanel.vue
+++ b/src/components/CurrentTaskDetails/ControlPanel/ControlPanel.vue
@@ -88,6 +88,7 @@
:style="item.style"
class="ptzControlItem"
@mousedown="onMouseDown(item.key)"
+ @mouseup="onMouseUp"
></div>
<div
diff --git a/src/components/CurrentTaskDetails/TaskDetailsLeft.vue b/src/components/CurrentTaskDetails/TaskDetailsLeft.vue
index 812bd86..861e33f 100644
--- a/src/components/CurrentTaskDetails/TaskDetailsLeft.vue
+++ b/src/components/CurrentTaskDetails/TaskDetailsLeft.vue
@@ -11,8 +11,8 @@
{{ item.name }}相机
</div>
<div class="multiCol">
- <div @click="faceToCenter">云台回中</div>
- <div @click="faceToDown">云台朝下</div>
+ <div @click="ptzResetMode(0)">云台回中</div>
+ <div @click="ptzResetMode(1)">云台朝下</div>
</div>
<el-select class="qualityChange" v-model="lineQuality" @change="qualityChange">
<el-option v-for="item in qualityList" :key="item.id" :label="item.name" :value="item.id" />
@@ -30,8 +30,9 @@
<el-slider
v-model="cameraParams.zoom_factor"
vertical
- :max="cameraParams.camera_type === 'ir' ? 20 : 50"
- @input="sliderChange"
+ :min="cameraParams.camera_type === 'ir' ? 2 : 0"
+ :max="cameraParams.camera_type === 'ir' ? 200 : 200"
+ @change="sliderChange"
/>
</div>
</div>
@@ -39,7 +40,7 @@
<script setup>
import EventBus from '@/event-bus'
-import { callPhotoAndVideoCmd, cameraParamsChangeApi } from '@/api/payload'
+import { callPhotoAndVideoCmd, cameraParamsChangeApi, ptzResetModeApi } from '@/api/payload'
import { ElMessage } from 'element-plus'
import { throttle } from 'lodash'
@@ -65,9 +66,9 @@
{ name: '超清', id: 4 },
]
-function faceToCenter() {}
-
-function faceToDown() {}
+function ptzResetMode(resetMode) {
+ ptzResetModeApi({ sn: dockSn.value, resetMode })
+}
// 倍率调整
function sliderChange(val) {
@@ -82,9 +83,11 @@
// 修改相机参数
function cameraParamsChange() {
+ const { camera_type, zoom_factor} = cameraParams.value
cameraParamsChangeApi({
sn: dockSn.value,
...cameraParams.value,
+ zoom_factor: camera_type === 'wide' ? undefined : zoom_factor,
})
}
@@ -97,7 +100,7 @@
cameraParams.value.zoom_factor = 5
}
if (row.key === 'ir') {
- cameraParams.value.zoom_factor = 0
+ cameraParams.value.zoom_factor = 2
}
cameraParamsChange()
}
diff --git a/src/hooks/controlDrone/useManualControl.js b/src/hooks/controlDrone/useManualControl.js
index 4dc12ff..f1295a2 100644
--- a/src/hooks/controlDrone/useManualControl.js
+++ b/src/hooks/controlDrone/useManualControl.js
@@ -40,7 +40,6 @@
let genPortOne = true //是一代机场
const mqttHooks = useMqtt(mqttState,deviceTopicInfo)
let seq = 0
- let throttledPtz = null
function handlePublish(params) {
const body = {
@@ -131,24 +130,29 @@
activeCodeKey.value = keyCode
break
case 'ArrowUp':
- ptzThrottle[0]()
+ if (activeCodeKey.value === keyCode) return
+ myInterval = setInterval(()=>ptzControl('up'), 50)
+ activeCodeKey.value = keyCode
break
case 'ArrowDown':
- ptzThrottle[1]()
+ if (activeCodeKey.value === keyCode) return
+ myInterval = setInterval(()=>ptzControl('down'), 50)
+ activeCodeKey.value = keyCode
break
case 'ArrowLeft':
- ptzThrottle[2]()
+ if (activeCodeKey.value === keyCode) return
+ myInterval = setInterval(()=>ptzControl('left'), 50)
+ activeCodeKey.value = keyCode
break
case 'ArrowRight':
- ptzThrottle[3]()
+ if (activeCodeKey.value === keyCode) return
+ myInterval = setInterval(()=>ptzControl('right'), 50)
+ activeCodeKey.value = keyCode
break
default:
break
}
}
-
- // 云台控制节流list
- const ptzThrottle = ['up','down','left','right'].map(key => throttle(()=>ptzControl(key), 500))
// 云台上下左右
function ptzControl(key) {
--
Gitblit v1.9.3