From 115bd56702e2ce09b7a7c1e6bb5e93e2f6174cdf Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 16 Apr 2025 20:50:13 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/drone/command-center-dashboard
---
src/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/CurrentTaskDetails.vue | 84 ++++++++++++++++++++++++++++-------------
1 files changed, 57 insertions(+), 27 deletions(-)
diff --git a/src/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/CurrentTaskDetails.vue b/src/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/CurrentTaskDetails.vue
index 2b3276d..45ad001 100644
--- a/src/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/CurrentTaskDetails.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/CurrentTaskDetails.vue
@@ -9,16 +9,21 @@
:destroy-on-close="true"
>
<div class="content-container" v-if="isShow">
- <TaskDetailsHead/>
- <TaskDetailsLeft/>
<!-- 视频直播 -->
<div class="video-container">
- <LiveVideo :videoUrl="currentLiveUrl" />
+ <LiveVideo :videoUrl="currentLiveUrl" :controls="false" />
</div>
<!-- 展示地图 -->
<RealTimeMap class="realTimeMap" />
- <ControlPanel />
-<!-- <ControlPanel v-if="deviceOsdInfo?.data?.sn" />-->
+ <TaskDetailsRight v-if="isAutoControl" />
+ <template v-else>
+ <TaskDetailsHead />
+ </template>
+ <TaskDetailsLeft />
+
+
+ <!-- 控制面板,里面有方法需要立即执行,不可用v-if -->
+ <ControlPanel v-show="!isAutoControl" />
</div>
</el-dialog>
</template>
@@ -33,10 +38,17 @@
import { getWebsocketUrl } from '@/websocket/util/config'
import { useConnectWebSocket } from '@/utils/websocket/connect-websocket'
import { EBizCode } from '@/utils/staticData/enums'
-import ControlPanel from '@/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/ControlPanel.vue'
-import { KeyCode } from '@/hooks/controlDrone/useManualControl'
+import ControlPanel from '@/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/ControlPanel/ControlPanel.vue'
import TaskDetailsHead from '@/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/TaskDetailsHead.vue'
import TaskDetailsLeft from '@/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/TaskDetailsLeft.vue'
+import TaskDetailsRight from '@/views/TaskManage/TaskIntermediateContent/CurrentTaskDetails/TaskDetailsRight.vue'
+import { ElMessage } from 'element-plus'
+import EventBus from '@/event-bus'
+
+const isAutoControl = ref(true)
+const lineQuality = ref(1) //1流畅,2标清
+provide('isAutoControl', isAutoControl)
+provide('lineQuality', lineQuality)
const isShow = defineModel('show')
const props = defineProps({
@@ -46,28 +58,36 @@
default: () => ({}),
},
})
-let taskDetails = ref({})
const currentLiveUrl = ref('')
const machineNestUrl = ref('')
-
const droneLiveUrl = ref('')
-provide('taskDetails', taskDetails)
-
+let taskDetails = ref({})
const deviceOsdInfo = ref({})
+provide('taskDetails', taskDetails)
provide('deviceOsdInfo', deviceOsdInfo)
+provide('dockSn', taskDetails?.value?.device_sns?.[0])
+provide('droneSn', deviceOsdInfo?.value?.data?.sn)
+
// 机巢直播
const getDeviceLiveUrl = async () => {
if (machineNestUrl.value) return machineNestUrl.value
- const res = await liveStart(taskDetails.value.device_sns[0], '')
+ const res = await liveStart(taskDetails.value.device_sns[0], 2)
machineNestUrl.value = res.data.data.rtcs_url
return machineNestUrl.value
}
// 无人机直播
-const getDockLiveUrl = async dockSn => {
+const getDroneLiveUrl = async droneSn => {
if (droneLiveUrl.value) return droneLiveUrl.value
- const res = await liveStart(dockSn, '')
+ const res = await liveStart(droneSn, lineQuality.value)
+ droneLiveUrl.value = res.data.data.rtcs_url
+ return droneLiveUrl.value
+}
+
+// 无人机直播画质切换
+const changeLineQuality = async () => {
+ const res = await liveStart(droneSn, lineQuality.value)
droneLiveUrl.value = res.data.data.rtcs_url
return droneLiveUrl.value
}
@@ -76,11 +96,11 @@
const setCurrentLiveUrl = async () => {
const data = deviceOsdInfo.value?.data
const deviceInfo = data?.host
- const dockSn = data?.sn
+ const drone = data?.sn
if ([14, 0].includes(deviceInfo.mode_code)) {
currentLiveUrl.value = await getDeviceLiveUrl()
} else {
- currentLiveUrl.value = await getDockLiveUrl(dockSn)
+ currentLiveUrl.value = await getDroneLiveUrl(drone)
}
}
@@ -89,10 +109,12 @@
getJobDetails({ wayLineJobInfoId: props.rowData.id }).then(async res => {
taskDetails.value = res.data.data
currentLiveUrl.value = await getDeviceLiveUrl()
- createWsConnect(taskDetails.value.way_lines[0].workspace_id)
+ taskDetails.value.workspace_id = taskDetails.value.way_lines[0]?.workspace_id
+ createWsConnect()
})
}
+// websocket 的消息
const messageHandler = result => {
let payload = JSON.parse(result) // 为了兼容聊天消息
switch (payload.biz_code) {
@@ -106,28 +128,36 @@
break
}
}
+
+// 创建ws连接
let connectWs
-const createWsConnect = workspaceId => {
+const createWsConnect = () => {
+ const workspaceId = taskDetails.value.workspace_id
+ if (!workspaceId) return
let webSocketUrl = getWebsocketUrl() + '&workspace-id=' + workspaceId
// 监听ws 消息
connectWs = useConnectWebSocket(messageHandler, webSocketUrl)
}
+
+watch(
+ () => taskDetails.value.workspace_id,
+ () => {
+ createWsConnect()
+ }
+)
const removeEvent = () => {
connectWs?.close()
deviceOsdInfo.value = {}
}
-// 监听 rowData 变化
-watch(isShow, newVal => {
- if (newVal) {
- getTaskDetails()
- } else {
- removeEvent()
- }
+onMounted(() => {
+ getTaskDetails()
+ EventBus.on('CurrentTaskDetails-timeStop', changeLineQuality)
})
onBeforeUnmount(() => {
+ EventBus.off('CurrentTaskDetails-timeStop', changeLineQuality)
removeEvent()
})
</script>
@@ -144,10 +174,12 @@
width: 1782px;
height: 1002px;
padding: 0;
+
.el-dialog__body {
width: 100%;
height: 100%;
}
+
.el-dialog__header {
height: 0;
overflow: hidden;
@@ -178,8 +210,6 @@
width: 100%;
height: 100%;
}
-
-
.realTimeMap {
position: absolute;
--
Gitblit v1.9.3