石超 2025-08-01 16:11:38 +08:00
commit 965e8a84f0
21 changed files with 297 additions and 2607 deletions

View File

@ -37,7 +37,7 @@ export function getAppEnvConfig() {
VITE_GLOB_UPLOAD_URL,
VITE_GLOB_APP_LOGO,
VITE_GLOB_INFO_IMAGE_URL,
VITE_MEDIALIBRARY_IMAGE_URL,
VITE_GLOB_MEDIALIBRARY_IMAGE_URL,
VITE_GLOB_APP_MANAGEMENT_UNIT,
VITE_GLOB_APP_TECHINICAL_SUPPORT,
VITE_GLOB_APP_VERSIONS,
@ -57,7 +57,7 @@ export function getAppEnvConfig() {
VITE_GLOB_UPLOAD_URL,
VITE_GLOB_APP_LOGO,
VITE_GLOB_INFO_IMAGE_URL,
VITE_MEDIALIBRARY_IMAGE_URL,
VITE_GLOB_MEDIALIBRARY_IMAGE_URL,
VITE_GLOB_APP_MANAGEMENT_UNIT,
VITE_GLOB_APP_TECHINICAL_SUPPORT,
VITE_GLOB_APP_VERSIONS,

View File

@ -14,7 +14,6 @@
@setNowShowAnnotationData="setNowShowAnnotationData"
@setNowShowImageData="setNowShowImageData"
@setNowShowAreaData="setNowShowAreaData"
@setAllAnnotationData="setAllAnnotationData"
@setAllAreaData="setAllAreaData"
@deleteAnnotation="deleteAnnotation"
@deleteArea="deleteArea"
@ -28,14 +27,10 @@
:nowShowAnnotationData="nowShowAnnotationData"
:allAreaDataList="allAreaDataList"
:nowShowAreaData="nowShowAreaData"
:allImageDataList="allImageDataList"
:nowShowImageData="nowShowImageData"
@setNowShowAnnotationData="setNowShowAnnotationData"
@setNowShowImageData="setNowShowImageData"
@setNowShowAreaData="setNowShowAreaData"
@setAllAnnotationData="setAllAnnotationData"
@setAllAreaData="setAllAreaData"
@closePathImageInfo="closePathImageInfo"
/>
</div>
<!-- 地图作业区域 -->
@ -55,7 +50,6 @@
import { ref, computed, onMounted } from 'vue';
import { PathLeftMenu, PathMap, PathAreaInfo } from './path';
import { cloneDeep } from 'lodash-es';
import imageJson from './json/image.json';
import {
GetWorkspaceList,
DeleteAnnotation,
@ -118,11 +112,6 @@
}
nowShowAnnotationData.value = value;
}
//
function setAllAnnotationData() {
//
}
//
function deleteAnnotation(value) {
@ -209,13 +198,8 @@
});
}
//
function closePathImageInfo() {
}
//
const nowShowImageData = ref();
const allImageDataList = ref(imageJson);
//
function setNowShowImageData(value) {
@ -281,11 +265,6 @@
// width: auto;
}
.annotationInfoDiv {
position: relative;
height: 100%;
width: 320px;
}
.areaInfoDiv {
position: relative;
@ -293,13 +272,6 @@
width: 320px;
}
.imageInfoDiv {
position: relative;
height: 100%;
// width: 37%;
width: 720px;
// min-width: 720px;
}
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -43,34 +43,16 @@
id: 'infrared',
name: '红外照片',
},
// {
// id: 'alone',
// name: '',
// },
{
id: 'video',
name: '视频资源',
},
],
},
// {
// id: 'achievementModel',
// name: '',
// children: [
// {
// id: '2d',
// name: '',
// },
// {
// id: '3d',
// name: '',
// },
// ],
// },
// {
// id: 'gas',
// name: '',
// },
// {
// id: 'vr',
// name: 'VR',
// },
];
//

View File

@ -37,7 +37,7 @@
<!-- 图片 -->
<img
v-if="record.objectKey && record.objectKey.includes('jpeg')"
:src="`${VITE_MEDIALIBRARY_IMAGE_URL + (record.minipic ? record.minipic : record.objectKey)}`"
:src="`${VITE_GLOB_MEDIALIBRARY_IMAGE_URL + (record.minipic ? record.minipic : record.objectKey)}`"
:width="30"
:height="20"
/>
@ -182,7 +182,7 @@
<!-- 图片 -->
<img
v-if="record.objectKey && record.objectKey.includes('jpeg')"
:src="`${VITE_MEDIALIBRARY_IMAGE_URL + (record.minipic ? record.minipic : record.objectKey)}`"
:src="`${VITE_GLOB_MEDIALIBRARY_IMAGE_URL + (record.minipic ? record.minipic : record.objectKey)}`"
:width="100"
:height="60"
style="position: absolute; top: 10px; left: 32.5px"
@ -330,7 +330,7 @@
import dayjs from 'dayjs';
import { cloneDeep } from 'lodash-es';
const { VITE_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { createConfirm, createMessage } = useMessage();
// --------------------------------------------------------------------

View File

@ -133,7 +133,7 @@
transition: 'transform 0.2s',
width: `${imageWidth}px`,
height: `${imageHeight}px`,
background: `url(${VITE_MEDIALIBRARY_IMAGE_URL + props.nowShowImageData.objectKey}) no-repeat center center`,
background: `url(${VITE_GLOB_MEDIALIBRARY_IMAGE_URL + props.nowShowImageData.objectKey}) no-repeat center center`,
backgroundSize: 'contain',
backgroundPosition: 'center',
}"
@ -430,6 +430,15 @@
<RotateLeftOutlined @click="rotateCounterClockwise" />
</a-tooltip>
</div>
<!-- 云台偏航角查看图片 -->
<!-- <div class="button">
<a-tooltip placement="top">
<template #title>
<span>云台偏航角查看图片</span>
</template>
<InstagramOutlined @click="rotateGimbalYawDegree" />
</a-tooltip>
</div> -->
<!-- 刷新 -->
<div class="button">
<a-tooltip placement="top">
@ -507,7 +516,7 @@
<img
:src="
li.minipic
? VITE_MEDIALIBRARY_IMAGE_URL + li.minipic
? VITE_GLOB_MEDIALIBRARY_IMAGE_URL + li.minipic
: 'https://m.tuniucdn.com/fb2/t1/G5/M00/44/52/Cii-s1soezyIF2UxABn76u-yKl8AAIwBgB34jAAGfwC3020871'
"
loading="lazy"
@ -595,6 +604,7 @@
AimOutlined,
ClockCircleOutlined,
PlusSquareOutlined,
InstagramOutlined,
} from '@ant-design/icons-vue';
import dayjs from 'dayjs';
import { UpdatePicStatus, UpdatePicName } from '@/api/demo/mediaLibrary';
@ -603,7 +613,7 @@
import { cloneDeep } from 'lodash-es';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage, createConfirm } = useMessage();
const { VITE_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const props = defineProps(['nowShowImageData', 'allImageDataList']);
const emits = defineEmits([
@ -723,6 +733,10 @@
function rotateCounterClockwise() {
rotationAngle.value -= 90; // -90
}
//
function rotateGimbalYawDegree() {
rotationAngle.value = parseFloat(props.nowShowImageData.gimbalYawDegree) + 180;
}
//
const imageWidth = ref(1040);
@ -841,6 +855,7 @@
? props.nowShowImageData.graffitiJson
: [];
fileTags.value = props.nowShowImageData.fileTags ? props.nowShowImageData.fileTags : [];
// rotationAngle.value = parseFloat(props.nowShowImageData.gimbalYawDegree) + 180;
},
{
deep: true,

View File

@ -87,7 +87,7 @@
<template #title>
<div>
<img
:src="VITE_MEDIALIBRARY_IMAGE_URL + show.minipic"
:src="VITE_GLOB_MEDIALIBRARY_IMAGE_URL + show.minipic"
loading="lazy"
width="230"
height="190"
@ -182,7 +182,7 @@
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage, createConfirm } = useMessage();
import { getAppEnvConfig } from '@/utils/env';
const { VITE_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const props = defineProps(['leftMenuShow', 'floderName', 'allImageDataList', 'nowShowImageData']);
const emits = defineEmits([

View File

@ -26,7 +26,7 @@
import { WktToGeojson, GeojsonToWkt } from '@/components/MapboxMaps/src/WktGeojsonTransform';
import dayjs from 'dayjs';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const props = defineProps([
'allImageDataList',
@ -362,7 +362,7 @@
const image = new Image();
image.crossOrigin = 'Anonymous';
if (item.minipic) {
image.src = VITE_MEDIALIBRARY_IMAGE_URL + item.minipic;
image.src = VITE_GLOB_MEDIALIBRARY_IMAGE_URL + item.minipic;
} else {
image.src =
'https://m.tuniucdn.com/fb2/t1/G5/M00/44/52/Cii-s1soezyIF2UxABn76u-yKl8AAIwBgB34jAAGfwC3020871';

View File

@ -11,7 +11,7 @@
import * as mars3d from 'mars3d';
import * as Cesium from 'mars3d-cesium';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const props = defineProps(['nowPreviewRecord', 'previewRecordList', 'hideOrShowTextboxFlag']);
const emits = defineEmits(['chooseNowPreviewRecord']);
@ -320,7 +320,7 @@
const image = new Image();
image.crossOrigin = 'Anonymous';
if (item.minipic) {
image.src = VITE_MEDIALIBRARY_IMAGE_URL + item.minipic;
image.src = VITE_GLOB_MEDIALIBRARY_IMAGE_URL + item.minipic;
} else {
image.src =
'https://m.tuniucdn.com/fb2/t1/G5/M00/44/52/Cii-s1soezyIF2UxABn76u-yKl8AAIwBgB34jAAGfwC3020871';

View File

@ -12,7 +12,7 @@
transition: 'transform 0.2s',
width: `${imageWidth}px`,
height: `${imageHeight}px`,
background: `url(${VITE_MEDIALIBRARY_IMAGE_URL + props.nowPreviewRecord.objectKey}) no-repeat center center`,
background: `url(${VITE_GLOB_MEDIALIBRARY_IMAGE_URL + props.nowPreviewRecord.objectKey}) no-repeat center center`,
backgroundSize: 'contain',
backgroundPosition: 'center',
}"
@ -397,7 +397,7 @@
:class="li.id == props.nowPreviewRecord.id ? 'bottom_div_choose' : 'bottom_div'"
>
<img
:src="VITE_MEDIALIBRARY_IMAGE_URL + (li.minipic ? li.minipic : li.objectKey)"
:src="VITE_GLOB_MEDIALIBRARY_IMAGE_URL + (li.minipic ? li.minipic : li.objectKey)"
loading="lazy"
:width="60"
:height="35"
@ -541,7 +541,7 @@
import { useMessage } from '@/hooks/web/useMessage';
import { cloneDeep } from 'lodash-es';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { createConfirm, createMessage } = useMessage();
const props = defineProps(['nowPreviewRecord', 'previewRecordList']);
@ -693,7 +693,7 @@
//
const copyToClipboard = async (url) => {
try {
await navigator.clipboard.writeText(VITE_MEDIALIBRARY_IMAGE_URL + url);
await navigator.clipboard.writeText(VITE_GLOB_MEDIALIBRARY_IMAGE_URL + url);
createMessage.success('图片链接已复制到剪贴板');
} catch (err) {
createMessage.error('无法复制图片链接');
@ -726,7 +726,7 @@
//
async function fetchAndDownloadImage(url) {
try {
const response = await fetch(VITE_MEDIALIBRARY_IMAGE_URL + url, {
const response = await fetch(VITE_GLOB_MEDIALIBRARY_IMAGE_URL + url, {
mode: 'cors',
});
if (!response.ok) {

View File

@ -2,7 +2,7 @@
<div class="videoDiv">
<div class="showVideo">
<video
:src="`${VITE_MEDIALIBRARY_IMAGE_URL + props.nowPreviewRecord.objectKey}`"
:src="`${VITE_GLOB_MEDIALIBRARY_IMAGE_URL + props.nowPreviewRecord.objectKey}`"
class="video-player"
controls
muted
@ -62,7 +62,7 @@
import { Deletepic } from '@/api/demo/mediaLibrary';
import { getAppEnvConfig } from '@/utils/env';
import { useMessage } from '@/hooks/web/useMessage';
const { VITE_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const { createConfirm, createMessage } = useMessage();
const props = defineProps(['nowPreviewRecord', 'previewRecordList']);
@ -95,7 +95,7 @@
//
async function fetchAndDownloadVideo(url) {
try {
const response = await fetch(VITE_MEDIALIBRARY_IMAGE_URL + url, {
const response = await fetch(VITE_GLOB_MEDIALIBRARY_IMAGE_URL + url, {
mode: 'cors',
});
if (!response.ok) {

View File

@ -35,12 +35,14 @@
@changeLoadControl="changeLoadControl"
:msgData="msgData"
:cameraType="cameraType"
:zIndex="zIndex"
/>
<!-- 飞行控制 -->
<FlightControl
@changeFlightControl="changeFlightControl"
@clickTakeOff="clickTakeOff"
@clickFlyTo="clickFlyTo"
:zIndex="zIndex"
v-if="flightControlVisible"
/>
<!-- 一键起飞表单 -->
@ -48,6 +50,7 @@
v-if="takeOffFormVisible"
@changeTakeOffForm="changeTakeOffForm"
:locationVal="locationVal"
:zIndex="zIndex"
/>
<!-- 指点飞行表单 -->
@ -55,10 +58,12 @@
v-if="flyToFormVisible"
@changeFlyToForm="changeFlyToForm"
:locationVal="locationVal"
:zIndex="zIndex"
/>
<AirportLive
:msgData="msgData"
v-if="airportLiveVisible"
:zIndex="zIndex"
@changeAirportLive="airportLiveVisible = false"
/>
<LivePreview
@ -67,6 +72,7 @@
:uavLive="uavLive"
:uavStatus="uavStatus"
:airportLiveVisible="airportLiveVisible"
:zIndex="zIndex"
@loadLiveStreaming="livePreviewVisible = false"
@changeCameraType="changeCameraType"
/>
@ -95,6 +101,7 @@
import { drcUpTopic } from '@/utils/debugging/remote';
import { airPortStore } from '@/store/modules/airport';
const zIndex = ref(0);
const airPortStoreVal = airPortStore();
const airPortInfo = airPortStoreVal.getAirport;
const UAVinfo = airPortStoreVal.getUAV;
@ -123,11 +130,11 @@
connected.value = true;
};
const topicUrl = computed(() => {
return 'thing/product/' + airPortInfo.sn + '/osd'
})
return 'thing/product/' + airPortInfo.sn + '/osd';
});
const topicUAVUrl = computed(() => {
return 'thing/product/' + UAVinfo.sn + '/osd'
})
return 'thing/product/' + UAVinfo.sn + '/osd';
});
onMounted(() => {
destroyConnection();
createConnection(connectCallback);
@ -189,21 +196,26 @@
const uavLive = ref(false);
const changeAirportLive = () => {
airportLiveVisible.value = !airportLiveVisible.value;
zIndex.value++;
};
const changeRemote = () => {
remoteVisible.value = !remoteVisible.value;
};
const changeLoadControl = () => {
loadControlVisible.value = !loadControlVisible.value;
zIndex.value++;
};
const changeFlightControl = () => {
flightControlVisible.value = !flightControlVisible.value;
zIndex.value++;
};
const clickTakeOff = () => {
takeOffFormVisible.value = true;
zIndex.value++;
};
const clickFlyTo = () => {
flyToFormVisible.value = true;
zIndex.value++;
};
const changeTakeOffForm = (val) => {
takeOffFormVisible.value = false;
@ -218,6 +230,7 @@
const loadLiveStreaming = (val) => {
livePreviewVisible.value = !livePreviewVisible.value;
uavStatus.value = val;
zIndex.value++;
};
const changeFlyToForm = () => {
flyToFormVisible.value = false;

View File

@ -4,6 +4,7 @@
:h="height"
:x="left"
:y="top"
:z="zIndex"
:isActive="true"
:parentLimitation="true"
@dragging="changeSize"
@ -53,21 +54,24 @@
import { getClient } from '@/utils/mqtt';
import VueDragResize from 'vue-drag-resize/src';
const props = defineProps({
msgData: Object,
zIndex: Number,
});
const pageHeight = document.documentElement.clientHeight;
const pageWidth = document.documentElement.clientWidth;
const width = ref(500);
const height = ref(348);
const left = ref(pageWidth - 800);
const top = ref(pageHeight - 460);
const zIndex = ref(props.zIndex);
const axisVal = ref('none');
const airPortStoreVal = airPortStore();
const live_info = airPortStoreVal.getLiveInfo;
const airPort = airPortStoreVal.getAirport;
const { createMessage } = useMessage();
const emits = defineEmits(['changeAirportLive']);
const props = defineProps({
msgData: Object,
});
let player;
const liveCode = ref('5');
console.log(liveCode);

View File

@ -4,6 +4,7 @@
:h="height"
:x="left"
:y="top"
:z="zIndex"
:isActive="true"
:parentLimitation="true"
:isResizable="false"
@ -194,6 +195,9 @@
import { airPortStore } from '@/store/modules/airport';
import { EventBus } from '@/utils/eventBus';
const props = defineProps({
zIndex: Number,
});
const uavStatus = ref(0);
const airPortStoreVal = airPortStore();
const uav = airPortStoreVal.getUAV;
@ -202,6 +206,7 @@
const height = ref(390);
const left = ref(700);
const top = ref(100);
const zIndex = ref(props.zIndex);
const userStore = useUserStore();
const userInfo = userStore.getUserInfo;
const redisUser = ref({});
@ -628,7 +633,8 @@
border-radius: 6px;
backdrop-filter: blur(3px);
color: #fff;
position: relative;
z-index: 10;
.title {
width: 100%;
padding: 10px 0;

View File

@ -4,6 +4,7 @@
:h="height"
:x="left"
:y="top"
:z="zIndex"
:isActive="true"
:parentLimitation="true"
:isResizable="false"
@ -64,15 +65,17 @@
import VueDragResize from 'vue-drag-resize/src';
import { useMessage } from '@/hooks/web/useMessage';
const emits = defineEmits(['changeFlyToForm']);
const props = defineProps({
msgData: Object,
zIndex: Number,
});
const { createMessage } = useMessage();
const width = ref(460);
const height = ref(260);
const left = ref(300);
const top = ref(120);
const emits = defineEmits(['changeFlyToForm']);
const props = defineProps({
msgData: Object,
});
const zIndex = ref(props.zIndex);
const data = reactive({
fly_to_id: buildGUID(),
@ -129,7 +132,6 @@
</script>
<style lang="less" scoped>
.takeoff-information {
z-index: 999;
width: 96%;
height: 98%;
padding: 10px;

View File

@ -4,6 +4,7 @@
:h="height"
:x="left"
:y="top"
:z="zIndex"
:isActive="true"
:parentLimitation="true"
@dragging="changeSize"
@ -80,23 +81,25 @@
import { airPortStore } from '@/store/modules/airport';
import VueDragResize from 'vue-drag-resize/src';
const airPortStoreVal = airPortStore();
const live_info = airPortStoreVal.getLiveInfo;
const uav = airPortStoreVal.getUAV;
const { createMessage } = useMessage();
const emits = defineEmits(['loadLiveStreaming', 'changeCameraType']);
const props = defineProps({
msgData: Object,
uavLive: Boolean,
airportLiveVisible: Boolean,
uavStatus: Number,
zIndex: Number,
});
const emits = defineEmits(['loadLiveStreaming', 'changeCameraType']);
const airPortStoreVal = airPortStore();
const live_info = airPortStoreVal.getLiveInfo;
const uav = airPortStoreVal.getUAV;
const { createMessage } = useMessage();
const pageHeight = document.documentElement.clientHeight;
const pageWidth = document.documentElement.clientWidth;
const width = ref(500);
const height = ref(348);
const left = ref(pageWidth - 800);
const top = ref(pageHeight - 460);
const zIndex = ref(props.zIndex);
if (props.airportLiveVisible) {
top.value = pageHeight - 820;
}

View File

@ -4,6 +4,7 @@
:h="height"
:x="left"
:y="top"
:z="zIndex"
:isActive="true"
:parentLimitation="true"
:isResizable="false"
@ -124,24 +125,26 @@
import { airPortStore } from '@/store/modules/airport';
import VueDragResize from 'vue-drag-resize/src';
const props = defineProps({
msgData: Object,
cameraType: String,
zIndex: Number,
});
const width = ref(400);
const height = ref(440);
const left = ref(300);
const top = ref(100);
const zIndex = ref(props.zIndex);
const airPortStoreVal = airPortStore();
const airPort = airPortStoreVal.getAirport;
const uav = airPortStoreVal.getUAV;
const selectName = ref('');
const userStore = useUserStore();
const userInfo = userStore.getUserInfo;
const redisUser = ref({});
const { createMessage } = useMessage();
const emits = defineEmits(['changeLoadControl']);
const props = defineProps({
msgData: Object,
cameraType: String,
});
const uavStatus = ref();
const monitorDRC = ref(false);
//

View File

@ -4,6 +4,7 @@
:h="height"
:x="left"
:y="top"
:z="zIndex"
:isActive="true"
:parentLimitation="true"
:isResizable="false"
@ -118,18 +119,20 @@
import VueDragResize from 'vue-drag-resize/src';
import { useMessage } from '@/hooks/web/useMessage';
const emits = defineEmits(['changeTakeOffForm']);
const props = defineProps({
msgData: Object,
zIndex: Number,
});
const { createMessage } = useMessage();
const width = ref(460);
const height = ref(620);
const left = ref(300);
const top = ref(100);
const zIndex = ref(props.zIndex);
const airPortStoreVal = airPortStore();
const airPort = airPortStoreVal.getAirport;
const emits = defineEmits(['changeTakeOffForm']);
const props = defineProps({
msgData: Object,
});
const data = reactive({
flight_id: uuid(14, 14),
target_latitude: null,

View File

@ -253,7 +253,6 @@
position: absolute;
top: 360px;
left: 0;
z-index: 999;
width: 260px;
padding: 10px;
background: #0d0e15;

2
types/config.d.ts vendored
View File

@ -164,7 +164,7 @@ export interface GlobEnvConfig {
VITE_GLOB_APP_LOGO?: string;
// info image video
VITE_GLOB_INFO_IMAGE_URL?: string;
VITE_MEDIALIBRARY_IMAGE_URL?: string;
VITE_GLOB_MEDIALIBRARY_IMAGE_URL?: string;
VITE_GLOB_APP_MANAGEMENT_UNIT?: string;
VITE_GLOB_APP_TECHINICAL_SUPPORT?: string;
VITE_GLOB_APP_VERSIONS?: string;