From a0f008e1b176ab0c844bc4721f282e12d18f855c Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Mon, 24 Feb 2025 18:20:11 +0800
Subject: [PATCH] 调整详情和修改地图渲染功能
---
src/views/DronePilotDetails.vue | 170 ++++++++++++++++++++++++++++++++++----------------------
1 files changed, 104 insertions(+), 66 deletions(-)
diff --git a/src/views/DronePilotDetails.vue b/src/views/DronePilotDetails.vue
index ad9d030..b3ce7be 100644
--- a/src/views/DronePilotDetails.vue
+++ b/src/views/DronePilotDetails.vue
@@ -1,12 +1,21 @@
<template>
<div class="drone-pilot-details" :style="{ width: screenWidth,height: screenHeight}">
- <div id="landscapeBox" class="landscape-box" :style="{ width: screenWidth + 'px', height: (screenHeight) + 'px'}">
+ <van-nav-bar
+ title="详情"
+ left-arrow
+ @click-left="onClickLogin"
+ />
+ <div id="landscapeBox" class="landscape-box" :style="{ width: boxWidth + 'px', height: boxHeight + 'px'}">
<div id="videoModule" class="l-video" :style="{ width: screenWidthVideo + 'px', height: (screenHeightVideo) + 'px'}">
<video v-show="videoUrl" ref="videoPlayerBig" :style="{ width: screenWidthVideo + 'px', height: screenHeightVideo + 'px'}" controls autoplay muted playsinline style="text-align: left; object-fit: fill">
Your browser is too old which doesn't support HTML5 video.
</video>
<el-empty v-show="videoUrl == ''" description="当前设备已关机,无法进行直播" :image="imageUrl"></el-empty>
<div v-if="videoUrl" class="center-point"></div>
+ <div class="right-box">
+ <ptzControl :sn="sn" :osdVisible="sbInfo"/>
+ <controlConsole :sn="sn" :osdVisible="sbInfo" :cesiumViewe="globalViewer" />
+ </div>
</div>
<div class="l-map" :style="{ width: screenWidthVideo + 'px', height: (screenHeightVideo) + 'px'}">
<div id="cesiumContainerBigMap"></div>
@@ -26,10 +35,6 @@
<img v-else src="@/assets/images/suo.png" @touchstart="changeModelMap" />
</div>
</div>
- </div>
- <div class="right-box">
- <ptzControl :sn="sn" :osdVisible="sbInfo" />
- <controlConsole :sn="sn" :osdVisible="sbInfo" :cesiumViewe="globalViewer" />
</div>
</div>
</div>
@@ -84,12 +89,15 @@
// 使用 ref 来存储屏幕宽度和高度
const screenWidth = ref(window.innerWidth);
const screenHeight = ref(window.innerHeight);
+// 加了头部
+const boxWidth = ref(window.innerWidth);
+const boxHeight = ref(window.innerHeight - 46);
// 地图切换
-const screenWidthMap = ref((window.innerHeight/2)*2)// ref(window.innerWidth);
-const screenHeightMap = ref((window.innerHeight/2));
+const screenWidthMap = ref(boxWidth.value)// ref(((boxHeight.value)/2)*2)
+const screenHeightMap = ref(((boxHeight.value)/2));
// 视频切换
-const screenWidthVideo = ref(window.innerWidth);
-const screenHeightVideo = ref(window.innerHeight/2);
+const screenWidthVideo = ref(boxWidth.value);
+const screenHeightVideo = ref(boxHeight.value/2);
const isBigMap = ref(false)
// 显示高德地图矢量还是影像(2D/3D)
@@ -147,12 +155,10 @@
const drawCanvasHeight = ref<Number>(0)
// 鹰眼视频
-const timer = null;
-const videoPlayer = ref<any>(null); // 视频播放器实例
-let webrtcPlayer = null; // video.js 播放器
+// const timer = null;
// 大屏幕视频
-const timerBig = null;
+// const timerBig = null;
const videoPlayerBig = ref<any>(null); // 视频播放器实例
let webrtcPlayerBig = null
@@ -255,7 +261,6 @@
// 获取实时航线
const getWrjSsLx = () => {
if (window.cesiumViewer== null) return
- globalViewer = window.cesiumViewer;
getWaylineFile(sbInfo.sn).then((res:any) => {
if (res.code != 200) return
ssLinePath.value = res.data
@@ -294,6 +299,7 @@
case EBizCode.DeviceOsd: {
store.commit('SET_DEVICE_INFO', payload.data)
store.commit('SET_WS_MESSAGE', payload)
+ getviewDrone(payload)
break
}
case EBizCode.DockOsd: { // 机场
@@ -302,10 +308,9 @@
}
case EBizCode.FlightTaskProgress: { // 获取进度
// 如果点击列表进入没有获取到航线文件,那么这里重新请求一次
- console.log('航线有么111?',ssLinePath.value)
- if (!ssLinePath || !ssLinePath.value) {
- getWrjSsLx()
- }
+ // if (!ssLinePath || !ssLinePath.value) {
+ // getWrjSsLx()
+ // }
break
}
}
@@ -316,17 +321,45 @@
// 监听ws 消息
useConnectWebSocket(messageHandler, webSorketUrl)
-
-let savedMapState = null; // 保存地图状态
-// 销毁之前先保存状态
-const destroyViewer = () => {
- if ( window.cesiumViewer) {
- // 保存当前地图状态(如相机位置)
- // savedMapState = window.cesiumViewer.camera.view;
- window.cesiumViewer.destroy();
- window.cesiumViewer = null;
+// 定义方法直接监听机场消息
+const getviewDrone = (newValue) => {
+ if (newValue.data.host) {
+ viewDroneInfo.longitude = newValue.data.host?.longitude
+ viewDroneInfo.latitude = newValue.data.host?.latitude
+ viewDroneInfo.elevation = Number(newValue.data.host?.elevation.toFixed(2)) + droneHeight.value
}
}
+
+
+// let savedMapState = null; // 保存地图状态
+// // 销毁之前先保存状态
+// const destroyViewer = () => {
+// if ( window.cesiumViewer) {
+// // 保存当前地图状态(如相机位置)
+// // savedMapState = window.cesiumViewer.camera.view;
+// window.cesiumViewer.destroy();
+// window.cesiumViewer = null;
+// }
+// }
+
+// 视频全屏切换
+
+// const changeModelVideo = (value:Boolean) => {
+// const videoModule = document.getElementById('videoModule');
+// // 不管是否竖/横屏都一样
+// if (value) { // 全屏
+// videoModule.style.width = `${screenWidth.value}px`
+// videoModule.style.height = `${screenHeight.value}px`
+// } else {
+// if (isLandscape.value) {
+// videoModule.style.width = `${screenWidth.value/2}px`
+// videoModule.style.height = `${screenHeight.value}px`
+// } else {
+// videoModule.style.height = `${screenHeight.value/2}px`
+// videoModule.style.width = `${screenWidth.value}px`
+// }
+// }
+// }
// 地图全屏切换
const changeModelMap = () => {
@@ -337,34 +370,32 @@
if (isLandscape.value) { // 横屏
if (isBigMap.value) { // 全屏
cesiumContainer.style.position = 'fixed';
- cesiumContainer.style.top = '0';
+ cesiumContainer.style.top = '46px';
cesiumContainer.style.left = '0';
- cesiumContainer.style.width = `${screenWidthMap.value * 2}px`
- cesiumContainer.style.height = `${screenHeightMap.value}px`
+ cesiumContainer.style.width = `${boxWidth.value}px`
+ // cesiumContainer.style.height = `${screenHeightMap.value}px`
lZp.style.right = '40%';
// lZoom.style.left = '0';
} else { // 缩放
- cesiumContainer.style.width = `${screenWidthMap.value}px`
- cesiumContainer.style.height = `${screenHeightMap.value}px`
+ cesiumContainer.style.width = `${boxWidth.value/2}px`
+ // cesiumContainer.style.height = `${screenHeightMap.value}px`
cesiumContainer.style.position = 'static';
lZp.style.right = '16%';
// lZoom.style.left = '50%';
}
} else {
- if (isBigMap.value) { // 全屏
+ if (isBigMap.value) { // 竖-全屏
cesiumContainer.style.position = 'fixed';
- cesiumContainer.style.top = '0';
+ cesiumContainer.style.top = '46px';
cesiumContainer.style.left = '0';
- cesiumContainer.style.width = `${screenWidthMap.value}px`
- cesiumContainer.style.height = `${screenHeightMap.value * 2}px`
+ // cesiumContainer.style.width = `${boxHeight.value}px`
+ cesiumContainer.style.height = `${boxHeight.value}px`
lZp.style.right = '30%';
// lZoom.style.right = '0';
} else { // 缩放
- console.log('竖屏宽度',screenWidthMap.value)
- console.log('竖屏高度度',screenHeightMap.value)
- cesiumContainer.style.width = `${screenWidthMap.value}px`
- cesiumContainer.style.height = `${screenHeightMap.value}px`
+ cesiumContainer.style.width = `${boxHeight.value}px`
+ cesiumContainer.style.height = `${boxHeight.value/2}px`
cesiumContainer.style.position = 'static';
lZp.style.right = '30%';
// lZoom.style.right = '0';
@@ -402,39 +433,36 @@
// };
const checkOrientation = async () => {
- screenWidth.value = window.innerWidth;
- screenHeight.value = window.innerHeight;
- console.log('屏幕宽度', screenWidth.value)
- console.log('屏幕高度', screenHeight.value)
+ boxWidth.value = window.innerWidth;
+ boxHeight.value = window.innerHeight - 46;
const landscapeBox = document.getElementById('landscapeBox');
let cesiumContainer = document.getElementById('cesiumContainerBigMap');
- const videoModule = document.getElementById('videoModule');
const lZp = document.getElementById('lZp');
const lZoom = document.getElementById('lZoom');
if (window.innerWidth > window.innerHeight) {//横屏
- screenWidthVideo.value = window.innerWidth/2
- screenHeightVideo.value = window.innerHeight
+ screenWidthVideo.value = boxWidth.value/2
+ screenHeightVideo.value = boxHeight.value
isLandscape.value = true;
// updateScreenSize()
landscapeBox.style.display = 'flex';
lZp.style.right = '16%';
lZoom.style.position = 'fixed';
- cesiumContainer.style.width = `${screenWidth.value/2}px`
- cesiumContainer.style.height = `${screenHeight.value}px`
+ cesiumContainer.style.width = `${boxWidth.value/2}px`
+ cesiumContainer.style.height = `${boxHeight.value}px`
cesiumContainer.style.position = 'static'
cesiumContainer.style.right = '0'
cesiumContainer.style.marginLeft = '0%'
} else { //竖屏
isLandscape.value = false;
- screenWidthVideo.value = window.innerWidth
- screenHeightVideo.value = (window.innerHeight/2)
+ screenWidthVideo.value = boxWidth.value
+ screenHeightVideo.value = boxHeight.value/2
// updateScreenSize()
landscapeBox.style.display = 'inherit';
landscapeBox.style.overflow = 'hidden';
lZp.style.right = '32%';
- cesiumContainer.style.width = `${screenHeight.value}px`
- cesiumContainer.style.height = `${screenHeight.value/2}px`
+ cesiumContainer.style.width = `${boxHeight.value}px`
+ cesiumContainer.style.height = `${boxHeight.value/2}px`
// cesiumContainer.style.position = 'absolute'
cesiumContainer.style.marginLeft = '-32%'
}
@@ -501,17 +529,26 @@
}
}, {deep: true})
-watch(() => store.state.wsMessage, (newValue, oldValue) => {
- // 控制台报 Expected longitude to be typeof number, actual typeof was undefined 是因为这里没有及时拿到longitude数据
- if (newValue) {
- viewDroneInfo.longitude = newValue?.longitude
- viewDroneInfo.latitude = newValue?.latitude
- viewDroneInfo.elevation = Number(newValue?.elevation.toFixed(2)) + droneHeight.value
- }
-}, {deep: true})
+// watch(() => store.state.wsMessage, (newValue, oldValue) => {
+// // 控制台报 Expected longitude to be typeof number, actual typeof was undefined 是因为这里没有及时拿到longitude数据
+// if (newValue) {
+// viewDroneInfo.longitude = newValue?.longitude
+// viewDroneInfo.latitude = newValue?.latitude
+// viewDroneInfo.elevation = Number(newValue?.elevation.toFixed(2)) + droneHeight.value
+// }
+// }, {deep: true})
let intervalId = null;
+
+const onClickLogin = () => {
+ history.back();
+}
+
+// 为组件赋值
+const getGlobalViewer = () => {
+ globalViewer = window.cesiumViewer;
+}
onMounted(async () => {
window.addEventListener('orientationchange', checkOrientation);
@@ -520,16 +557,16 @@
loadVideo()
await nextTick();
await _init('cesiumContainerBigMap');
+ await getGlobalViewer()
await getWrjSsLx();
// 判断是遥控器还是机场
let domain = sessionStorage.getItem('domain')
if (domain !== '0') {
await getPhoneLocation(workspaceId.value)
- clickPhoneLocation()
// // // 设置定时器,每隔 5 秒刷新一次数据
- intervalId = setInterval(()=> {
- getPhoneLocation(workspaceId.value)
- }, 5000);
+ // intervalId = setInterval(()=> {
+ // getPhoneLocation(workspaceId.value)
+ // }, 5000);
}
});
@@ -611,6 +648,7 @@
transform: translate(-50%, -50%);
justify-content: center;
}
+ .right-box {}
}
#cesiumContainerBigMap {
width: 100%;
@@ -641,6 +679,6 @@
}
}
}
- .right-box {}
+
}
</style>
\ No newline at end of file
--
Gitblit v1.9.3