徐景良 1 month ago
commit 9836661532

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

@ -21,6 +21,7 @@ export const airPortStore = defineStore({
rtmp: 'rtmp://box.wisestcity.com:1935/live/',
url: 'http://box.wisestcity.com:8081/live/',
},
gateway: null,
}),
getters: {
getAirport(state) {
@ -32,6 +33,9 @@ export const airPortStore = defineStore({
getLiveInfo(state) {
return state.liveInfo;
},
getGateway(state) {
return state.gateway;
},
},
actions: {
setAirPort(item: any, value: any) {
@ -40,5 +44,8 @@ export const airPortStore = defineStore({
setUAV(item: any, value: any) {
this.uav[item] = value;
},
setGateway(value: any) {
this.gateway = value;
},
},
});

@ -2,7 +2,7 @@ import { clientReizePublish, clientReizeSubscribe } from '@/utils/mqtt';
import { airPortStore } from '@/store/modules/airport';
const airPortStoreVal = airPortStore();
const airPort = airPortStoreVal.getAirport;
const gateway = airPortStoreVal.getGateway;
export const return_home_status = {
canceled: '取消或终止',
@ -16,26 +16,26 @@ export const return_home_status = {
};
export const eventsTopicReize = (data) => {
// 发送消息
clientReizePublish('thing/product/' + airPort.sn + '/events', data);
clientReizePublish('thing/product/' + gateway + '/events', data);
};
export const events_replyTopicReize = () => {
// 订阅消息
clientReizeSubscribe('thing/product/' + airPort.sn + '/events_reply');
clientReizeSubscribe('thing/product/' + gateway + '/events_reply');
};
export const servicesTopicReize = (data) => {
// 发送消息
clientReizePublish('thing/product/' + airPort.sn + '/services', data);
clientReizePublish('thing/product/' + gateway + '/services', data);
};
export const services_replyTopicReize = () => {
// 订阅消息
clientReizeSubscribe('thing/product/' + airPort.sn + '/services_reply');
clientReizeSubscribe('thing/product/' + gateway + '/services_reply');
};
export const drcDownTopicReize = (data) => {
// 发送消息thing/product/{gateway_sn}/drc/down
clientReizePublish('thing/product/' + airPort.sn + '/drc/down', data);
clientReizePublish('thing/product/' + gateway + '/drc/down', data);
};
export const eventsTopicSubscribeReize = () => {
// 发送消息
clientReizeSubscribe('thing/product/' + airPort.sn + '/events');
clientReizeSubscribe('thing/product/' + gateway + '/events');
};

@ -3,8 +3,7 @@ import { airPortStore } from '@/store/modules/airport';
import errorCode from './error_code.json';
const airPortStoreVal = airPortStore();
const airPort = airPortStoreVal.getAirport;
const uav = airPortStoreVal.getUAV;
const gateway = airPortStoreVal.getGateway;
export const debug_mode_openOptions = {
canceled: '取消或终止',
failed: '失败',
@ -37,47 +36,38 @@ export const errorName = (code) => {
};
export const servicesTopic = (data) => {
// 发送消息
clientPublish('thing/product/' + airPort.sn + '/services', data);
clientPublish('thing/product/' + gateway + '/services', data);
};
export const services_replyTopic = () => {
// 订阅消息
clientSubscribe('thing/product/' + airPort.sn + '/services_reply');
};
// 无人机
export const servicesUAVTopic = (data) => {
// 发送消息
clientPublish('thing/product/' + uav.sn + '/services', data);
};
export const services_replyUAVTopic = () => {
// 订阅消息
clientSubscribe('thing/product/' + uav.sn + '/services_reply');
clientSubscribe('thing/product/' + gateway + '/services_reply');
};
export const eventsTopic = (data) => {
// 发送消息
clientPublish('thing/product/' + airPort.sn + '/events', data);
clientPublish('thing/product/' + gateway + '/events', data);
};
export const events_replyTopic = () => {
// 订阅消息
clientSubscribe('thing/product/' + airPort.sn + '/events_reply');
clientSubscribe('thing/product/' + gateway + '/events_reply');
};
export const drcDownTopic = (data) => {
// 发送消息thing/product/{gateway_sn}/drc/down
clientPublish('thing/product/' + airPort.sn + '/drc/down', data);
clientPublish('thing/product/' + gateway + '/drc/down', data);
};
export const eventsTopicSubscribe = () => {
// 发送消息
clientSubscribe('thing/product/' + airPort.sn + '/events');
clientSubscribe('thing/product/' + gateway + '/events');
};
export const drcUpTopic = () => {
clientSubscribe('thing/product/' + airPort.sn + '/drc/up');
clientSubscribe('thing/product/' + gateway + '/drc/up');
};
export const setTopic = (data) => {
// 发送消息
clientPublish('thing/product/' + airPort.sn + '/property/set', data);
clientPublish('thing/product/' + gateway + '/property/set', data);
};
export const set_replyTopic = () => {
// 订阅消息
clientSubscribe('thing/product/' + airPort.sn + '/services_reply');
clientSubscribe('thing/product/' + gateway + '/services_reply');
};

@ -0,0 +1,93 @@
<template>
<div class="pathModal">
<!-- 左侧目录 -->
<div class="leftMenuDiv">
<PathLeftMenu
ref="pathLeftMenuRef"
@changeLeftMenuShow="changeLeftMenuShow"
/>
</div>
<!-- 地图 -->
<div class="mapDiv" :style="{ width: dynamicWidth }">
<PathMap
ref="pathMapRef"
/>
</div>
<!-- 详情 -->
<div class="areaInfoDiv" v-if="detailsInfoShow">
<PathAreaInfo
@closeDetailsInfo="closeDetailsInfo"
/>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, computed, onMounted } from 'vue';
import { PathLeftMenu, PathMap, PathAreaInfo } from './path';
import { cloneDeep } from 'lodash-es';
import { WktToGeojson, GeojsonToWkt } from '@/components/MapboxMaps/src/WktGeojsonTransform';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage, createConfirm } = useMessage();
// ref
const pathMapRef = ref();
const detailsInfoShow = ref(false)
//
const dynamicWidth = computed(() => {
let width = 0;
// //
// if (leftMenuShow.value) {
// width += 340;
// } else {
// width += 64;
// }
//
if (detailsInfoShow.value) {
width += 320;
}
return '100%';
});
onMounted(() => {
});
function changeLeftMenuShow() {
detailsInfoShow.value = true;
}
//
function closeDetailsInfo() {
detailsInfoShow.value = false;
pathMapRef.value.areaRestoreDefault();
}
</script>
<style lang="less" scoped>
.pathModal {
position: relative;
display: flex;
width: 100%;
height: 100%;
.leftMenuDiv {
position:absolute;
top:20px;
left:20px;
z-index:1;
display:flex;
gap:15px;
width: 340px;
}
.mapDiv {
position: relative;
height: 100%;
// width: auto;
}
.areaInfoDiv {
position: relative;
height: 100%;
width: 320px;
}
}
</style>

@ -0,0 +1,3 @@
export { default as PathLeftMenu } from './pathLeftMenu.vue';
export { default as PathMap } from './pathMap.vue';
export { default as PathAreaInfo } from './pathAreaInfo.vue';

@ -0,0 +1,230 @@
<template>
<div class="container">
<a-row>
<a-col :span="24">
<div class="annotationTitle">
<LeftOutlined class="iconsbox" @click="closeDetailsInfo"/>
详细信息
</div>
</a-col>
<a-col :span="24">
<div class="libox">
<div class="title">内容</div>
<div class="titletext">疑似发现火情</div>
</div>
</a-col>
<a-col :span="24">
<div class="libox yellow">
<div class="title">置信度</div>
<div class="text">95%</div>
</div>
</a-col>
<a-col :span="24">
<div class="libox">
<div class="title">地址</div>
<div class="text">
<img class="posimg" src="/public/images/ai/location.png" />
<div class="location">临沂市费县探沂镇209国道大兴安陵西北方向山坡下</div>
</div>
</div>
</a-col>
<a-col :span="24">
<div class="libox">
<div class="title">时间</div>
<div class="titletext time">2025-05-07 13:45:23</div>
</div>
</a-col>
<a-col :span="24">
<div class="libox">
<div class="title1">拍摄<br />设备</div>
<div class="text1 time">EGUQ12212U</div>
</div>
</a-col>
<a-col :span="24">
<div class="libox">
<div class="title1">AI大<br />模型</div>
<div class="text1 time">AI-HUI CHUANG model2025-12-21/2U</div>
</div>
</a-col>
</a-row>
</div>
<div class="imgbox">
<div class="bannercontainer">
<a-image-preview-group>
<div class="bannerbox" v-for="item in bannerArr">
<div class="bannerimg">
<a-image :width="232" :height="140" :src="item" />
</div>
</div>
</a-image-preview-group>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, watch, nextTick } from 'vue';
import { LeftOutlined } from '@ant-design/icons-vue';
const props = defineProps([]);
const emits = defineEmits([
'closeDetailsInfo'
]);
const bannerArr = ref([
"/public/banner1.png", "/public/banner.png","/public/banner1.png", "/public/banner.png",
"/public/banner1.png", "/public/banner.png","/public/banner1.png", "/public/banner.png"
])
//
function closeDetailsInfo() {
emits('closeDetailsInfo');
}
</script>
<style lang="less" scoped>
.container {
//
-webkit-user-select: none; /* Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE/Edge */
user-select: none;
position: relative;
width: 320px;
height: 100%;
background: #0D0E15;
box-shadow: 0px 10px 30px 0px rgba(0,0,6,0.15);
padding: 15px;
}
.imgbox{
width: calc(100% - 580px);
height: 185px;
background: #0D0E15;
position: fixed;
bottom: 0;
left: 570px;
z-index: 100;
overflow-x: scroll;
.bannercontainer{
width: calc(100% - 10px);
height: 100%;
display: flex;
align-items: center;
.bannerbox{
.bannerimg{
width: 232px;
height: 140px;
border-radius: 10px;
margin-left: 25px;
cursor: pointer;
}
}
}
}
.annotationTitle {
display: flex;
align-items: center;
justify-content: flex-start;
color: #ffffff;
font-size: 16px;
min-height: 45px;
height: auto;
width: 100%;
flex-wrap: wrap;
.iconsbox{
margin-right: 10px;
cursor: pointer;
}
}
.libox{
margin-top: 20px;
font-size: 14px;
color: #FFFFFF;
display: flex;
.titletext{
width: 250px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding-left: 8px;
}
.time{
font-family: Bebas;
font-size: 12px;
}
.title1{
width: 44px;
height: 52px;
background: #303749;
box-shadow: 0px 10px 30px 0px rgba(0,0,6,0.15);
border-left: 1px solid #0081FF;
font-size: 12px;
color: #FFFFFF;
text-shadow: 0px 10px 30px rgba(0,0,6,0.15);
display: flex;
align-items: center;
justify-content: center;
line-height: 20px;
}
.text1{
width: 250px;
font-family: Bebas;
font-size: 12px;
color: #FFFFFF;
line-height: 52px;
padding-left: 10px;
background: #303749;
box-shadow: 0px 10px 30px 0px rgba(0,0,6,0.15);
}
.title{
width: 44px;
height: 17px;
font-size: 12px;
background: #303749;
box-shadow: 0px 10px 30px 0px rgba(0,0,6,0.15);
line-height: 17px;
padding-left: 4px;
text-shadow: 0px 10px 30px rgba(0,0,6,0.15);
}
.text{
line-height: 17px;
padding-left: 8px;
display: flex;
.posimg{
width: 15px;
height: 15px;
margin-right: 5px;
}
.location{
width: 215px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.yellow{
color: #F4B307;
}
/* 整个滚动条的样式 */
::-webkit-scrollbar {
width: 5px; /* 滚动条宽度 */
}
/* 滚动轨道的样式 */
::-webkit-scrollbar-track {
background: rgba(255,0,255,0); /* 轨道背景颜色 */
}
/* 滚动滑块的样式 */
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #555; /* 滑块背景颜色 */
}
/* 滑块悬停状态 */
::-webkit-scrollbar-thumb:hover {
background: #777;
}
/* 滚动条按钮(上下箭头) */
::-webkit-scrollbar-button {
display: none; /* 隐藏默认箭头 */
}
</style>

@ -0,0 +1,257 @@
<template>
<div class="leftMenu">
<div class="leftMenuContent">
<div class="leftMenuContent_2">
<div class="leftMenuContent_title">
{{ showMenuInfoName }}
</div>
<div class="leftMenuContent_list">
<!-- AI成果 -->
<div v-if="showMenuInfoName == 'AI成果'" style="margin: 10px 10px 20px 16px">
<a-select
v-model:value="areatype"
style="width: 120px; margin-right: 15px;background: #151823;"
@change="handleChangeSelect"
>
<a-select-option value="all">全部类型</a-select-option>
<a-select-option value="dfence">全部作业区</a-select-option>
<a-select-option value="nfz">全部限飞区</a-select-option>
<a-select-option value="noland">全部禁降区</a-select-option>
</a-select>
<a-select
v-model:value="areastate"
style="width: 120px"
@change="handleChangeSelect"
>
<a-select-option value="all">全部状态</a-select-option>
<a-select-option value="0">已启用</a-select-option>
<a-select-option value="1">已禁用</a-select-option>
</a-select>
</div>
<!-- 列表 -->
<div v-for="(item,index) in 8" :key="item.id" @click="listsClick(index)">
<!-- AI成果 -->
<div class="showMenuInfo_area" :class="indexNum==index?'active':''">
<div class="rightbox">
<img class="fireimg" src="/public/images/ai/fire.png" />
<div class="text">置信度60%</div>
</div>
<img class="img" src="/public/banner1.png" />
<div class="bannerbox">
<div class="title">疑似发现火情</div>
<div class="line"></div>
<div class="locationbox">
<img class="posimg" src="/public/images/ai/location.png" />
<div class="location">临沂市费县探沂镇209国道大兴庄村东200米</div>
</div>
<div class="timebox">
<div class="time">2025-05-07 13:45</div>
<div class="btn">查看详情</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, watch, onMounted } from 'vue';
import {
CloseOutlined,
AntDesignOutlined,
DoubleLeftOutlined,
DoubleRightOutlined,
EnvironmentOutlined,
CodeSandboxOutlined,
ExpandAltOutlined,
BorderOutlined,
LogoutOutlined,
EyeOutlined,
EyeInvisibleOutlined,
AimOutlined,
DeleteOutlined,
FileImageOutlined,
CheckCircleOutlined,
StopOutlined,
} from '@ant-design/icons-vue';
import { UpdateWorkArea, UpdateAnnotation } from '@/api/demo/mediaLibrary';
import { cloneDeep } from 'lodash-es';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage, createConfirm } = useMessage();
const props = defineProps([
]);
const emits = defineEmits([
'changeLeftMenuShow'
]);
const showMenuInfoName = ref('AI成果');
const areatype = ref('all')
const areastate = ref('all')
const indexNum = ref()
onMounted(() => {
})
function handleChangeSelect() {
}
function listsClick(e){
indexNum.value = e
emits('changeLeftMenuShow');
}
</script>
<style lang="less" scoped>
.leftMenu {
width:100%;
height:100%;
background: #0D0E15;
box-shadow: 0px 10px 30px 0px rgba(0,0,6,0.15), 0px 10px 30px 1px rgba(0,0,6,0.15), inset 0px 0px 20px 8px rgba(58,87,232,0.73);
border-radius: 6px;
position:relative;
.leftMenuContent {
position: relative;
display: flex;
width: 100%;
height: calc(100%-50px);
.leftMenuContent_2 {
position: relative;
width: 100%;
height: 100%;
.leftMenuContent_title {
font-size: 16px;
padding:15px 15px;
color:#fff;
border-bottom:1px solid rgba(255,255,255,0.15);
}
.leftMenuContent_list {
overflow-y: auto;
max-height: 720px;
// AI
.showMenuInfo_area {
position: relative;
display: flex;
align-items: center;
justify-content: flex-start;
height: 115px;
padding: 12px 8px;
margin: 6px 15px;
background: #313C62;
box-shadow: 0px 10px 30px 0px rgba(0,0,6,0.15);
border-radius: 6px;
.rightbox{
width: 81px;
height: 23px;
background: url("/public/images/ai/posbg.png") no-repeat center;
background-size: 100% 100%;
position: absolute;
right: 0;
top: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 9px;
color: #FFFFFF;
.fireimg{
width: 14px;
height: 14px;
margin-right: 3px;
margin-left: 10px;
}
}
.img{
width: 90px;
height: 90px;
}
.bannerbox{
flex: 1;
display: flex;
flex-direction: column;
margin-left: 10px;
.title{
font-weight: 500;
font-size: 16px;
color: #FFFFFF;
line-height: 22px;
margin-bottom: 5px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 180px;
}
.line{
width: 190px;
height: 1px;
border-bottom: 1px dashed #90A1B0;
opacity: 0.3;
margin-bottom: 6px;
}
.locationbox{
display: flex;
align-items: center;
justify-content: flex-start;
line-height: 14px;
.posimg{
width: 15px;
height: 15px;
}
.location{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-left: 3px;
width: 180px;
font-family: HarmonyOS_Sans_SC;
font-size: 12px;
color: #D3F1FF;
line-height: 14px;
text-shadow: 0px 10px 30px rgba(0,0,6,0.15);
text-align: left;
font-style: normal;
text-transform: none;
}
}
.timebox{
margin-top: 13px;
display: flex;
align-items: center;
justify-content: space-between;
.time{
font-family: Bebas;
font-size: 10px;
color: #FFFFFF;
line-height: 13px;
text-shadow: 0px 10px 30px rgba(0,0,6,0.15);
text-align: left;
font-style: normal;
}
.btn{
width: 67px;
height: 25px;
background: #00B569;
box-shadow: 0px 10px 30px 0px rgba(0,0,6,0.15);
border-radius: 4px;
font-weight: 500;
font-size: 10px;
color: #FFFFFF;
text-align: center;
line-height: 25px;
margin-right: 5px;
}
}
}
}
.active{
outline: 2px solid #2D8CF0;
}
}
}
}
}
</style>

@ -0,0 +1,273 @@
<template>
<div ref="vChartRef" id="mars3d-container" class="mars3d-container">
</div>
</template>
<script lang="ts" setup>
import { ref, watch, onMounted, defineEmits } from 'vue';
import * as mars3d from 'mars3d';
import * as Cesium from 'mars3d-cesium';
const props = defineProps([
]);
const emits = defineEmits([
]);
const vChartRef: any = ref<HTMLElement>();
let map: mars3d.Map; //
let graphicLayers = new mars3d.layer.GraphicLayer({
isAutoEditing: true,
});
onMounted(() => {
initMap();
});
const initMap = () => {
map = new mars3d.Map(vChartRef.value, {
scene: {
center: {
lat: 35.134608,
lng: 118.29853,
alt: 8306.3,
heading: 360,
pitch: -45,
},
scene3DOnly: false,
shadows: false,
removeDblClick: true,
sceneMode: 3,
showSun: true,
showMoon: true,
showSkyBox: true,
showSkyAtmosphere: true,
fog: true,
fxaa: true,
requestRenderMode: true,
contextOptions: {
requestWebgl1: false,
webgl: {
preserveDrawingBuffer: true,
alpha: false,
stencil: true,
powerPreference: 'high-performance',
},
},
globe: {
depthTestAgainstTerrain: false,
baseColor: '#546a53',
showGroundAtmosphere: true,
enableLighting: false,
},
cameraController: {
zoomFactor: 3,
minimumZoomDistance: 1,
maximumZoomDistance: 50000000,
enableRotate: true,
enableTranslate: true,
enableTilt: true,
enableZoom: true,
enableCollisionDetection: true,
minimumCollisionTerrainHeight: 15000,
},
},
control: {
homeButton: true,
baseLayerPicker: false,
sceneModePicker: true,
vrButton: false,
fullscreenButton: true,
navigationHelpButton: true,
animation: false,
timeline: false,
infoBox: false,
geocoder: false,
selectionIndicator: false,
showRenderLoopErrors: true,
contextmenu: {
hasDefault: true,
},
mouseDownView: true,
zoom: {
insertIndex: 1,
},
compass: {
bottom: 'toolbar',
left: '5px',
rotation: true,
},
distanceLegend: {
left: '10px',
bottom: '2px',
},
locationBar: {
crs: 'CGCS2000_GK_Zone_3',
crsDecimal: 0,
template:
"<div>经度:{lng}</div> <div>纬度:{lat}</div> <div class='hide1000'>横{crsx} 纵{crsy}</div> <div>海拔:{alt}米</div> <div class='hide700'>层级:{level}</div><div>方向:{heading}°</div> <div>俯仰角:{pitch}°</div><div class='hide700'>视高:{cameraHeight}米</div>",
cacheTime: 50,
},
},
method: {
templateValues: {
dataServer: '//data.mars3d.cn',
gltfServerUrl: '//data.mars3d.cn/gltf',
},
},
terrain: {
url: '//data.mars3d.cn/terrain',
show: true,
clip: true,
},
basemaps: [
{
id: 10,
name: '地图底图',
type: 'group',
opacity: 1,
},
{
id: 2021,
pid: 10,
name: '天地图影像',
icon: 'https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png',
type: 'group',
layers: [
{
name: '底图',
type: 'tdt',
layer: 'img_d',
eventParent: {
id: 2021,
pid: 10,
name: '天地图影像',
icon: 'https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png',
type: 'group',
layers: [
{
name: '底图',
type: 'tdt',
layer: 'img_d',
show: true,
},
{
name: '注记',
type: 'tdt',
layer: 'img_z',
show: true,
},
],
show: true,
},
private: false,
id: 'm-770c35e7-9054-4259-b5ee-c15f108becd0',
opacity: 1,
pid: 2021,
parent: {
id: 2021,
pid: 10,
name: '天地图影像',
icon: 'https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png',
type: 'group',
layers: [
{
name: '底图',
type: 'tdt',
layer: 'img_d',
show: true,
},
{
name: '注记',
type: 'tdt',
layer: 'img_z',
show: true,
},
],
show: true,
},
zIndex: 1,
},
{
name: '注记',
type: 'tdt',
layer: 'img_z',
eventParent: {
id: 2021,
pid: 10,
name: '天地图影像',
icon: 'https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png',
type: 'group',
layers: [
{
name: '底图',
type: 'tdt',
layer: 'img_d',
show: true,
},
{
name: '注记',
type: 'tdt',
layer: 'img_z',
show: true,
},
],
show: true,
},
private: false,
id: 'm-3b881368-574b-48a5-88b2-8b3c2c48fd62',
opacity: 1,
pid: 2021,
parent: {
id: 2021,
pid: 10,
name: '天地图影像',
icon: 'https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png',
type: 'group',
layers: [
{
name: '底图',
type: 'tdt',
layer: 'img_d',
show: true,
},
{
name: '注记',
type: 'tdt',
layer: 'img_z',
show: true,
},
],
show: true,
},
zIndex: 2,
},
],
show: true,
opacity: 1,
},
],
layers: [],
});
if (map) {
map.addLayer(graphicLayers);
handlerLocation([118.2958779, 35.1342553]);
//
map.on(mars3d.EventType.click, function (event) {
});
}
};
//
const handlerLocation = (lngLat) => {
const position = Cesium.Cartesian3.fromDegrees(lngLat[0], lngLat[1]);
map.flyToPoint(position);
};
</script>
<style lang="less" scoped>
.mars3d-container {
position: relative;
width: 100%;
height: 100%;
}
</style>

@ -219,7 +219,7 @@
<RenameModal @register="renameModal" @handleSuccess="handleSuccess" />
<!-- 预览弹窗 -->
<a-modal
v-model:open="open"
v-model:open="openPreview"
width="100%"
wrap-class-name="full-modal"
:centered="true"
@ -268,7 +268,7 @@
</PageWrapper>
</template>
<script lang="ts" setup>
import { reactive, ref, watch, h } from 'vue';
import { reactive, ref, watch, h, onMounted } from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { PageWrapper } from '@/components/Page';
import { useModal } from '@/components/Modal';
@ -302,8 +302,9 @@
import { AddFolderModal, MoveFileModal, CompressFileModal, RenameModal } from './modal/modal';
import { PermissionBtn } from '@/components/PermissionBtn/index';
import { getAppEnvConfig } from '@/utils/env';
import { useRoute, useRouter } from 'vue-router';
import { useMessage } from '@/hooks/web/useMessage';
import { columns, searchFormSchema, svg_showOnMap_0, svg_showOnMap_1 } from './modal.data';
import { columns, searchFormSchema } from './modal.data';
import dayjs from 'dayjs';
import { cloneDeep } from 'lodash-es';
@ -323,11 +324,20 @@
//
if (newval === 'store') {
//
GetMediaFile({
parentKey: nowParentKey.value,
page: 1,
limit: 1000,
}).then((res) => {
let query = { ...searchParams.value, page: 1, limit: 1000 };
if (routeFlag.value) {
query = {
...query,
taskId: route.query.flightId,
objectKeyExist: 1,
};
} else {
query = {
...query,
parentKey: nowParentKey.value,
};
}
GetMediaFile(query).then((res) => {
showTableData.value = res.items;
tableTypeAfterShow.value = newval;
// -
@ -416,6 +426,34 @@
}
}
//
const route = useRoute();
const router = useRouter();
const routeFlag = ref(true);
onMounted(() => {
if (route.query.flightId) {
routeFlag.value = true;
//
getFloder();
} else {
routeFlag.value = false;
}
});
//
async function getFloder() {
GetMediaFile({
taskId: route.query.flightId,
objectKeyExist: 0,
page: 1,
limit: 10,
}).then((res) => {
floders.value.push({
id: res.items[0].id,
name: res.items[0].name,
});
});
}
//
//
const floders = ref([
@ -455,13 +493,26 @@
showTableSetting: true,
beforeFetch: (data) => {
//
let temp = {
...data,
page: tableTypeAfterShow.value == 'table' ? data.page : 1,
limit: tableTypeAfterShow.value == 'table' ? data.limit : 1000,
parentKey: nowParentKey.value,
};
return temp;
// -
if (routeFlag.value) {
let temp = {
...data,
page: tableTypeAfterShow.value == 'table' ? data.page : 1,
limit: tableTypeAfterShow.value == 'table' ? data.limit : 1000,
taskId: route.query.flightId,
objectKeyExist: 1,
};
return temp;
} else {
//
let temp = {
...data,
page: tableTypeAfterShow.value == 'table' ? data.page : 1,
limit: tableTypeAfterShow.value == 'table' ? data.limit : 1000,
parentKey: nowParentKey.value,
};
return temp;
}
},
handleSearchInfoFn(info) {
if (info.startTime && info.endTime) {
@ -475,7 +526,8 @@
return info;
},
afterFetch: (res) => {
res.forEach((arr) => {
let result = res;
result.forEach((arr) => {
if (arr.fileTags) {
arr.fileTags = JSON.parse(arr.fileTags);
} else {
@ -487,18 +539,28 @@
arr.graffitiJson = [];
}
});
return res;
return result;
},
});
//
function getChildrenByProp(f, index) {
nowParentKey.value = f.id;
floders.value = floders.value.splice(0, index + 1);
clearSelectedRowKeys();
reload().then((res) => {
showTableData.value = res;
});
async function getChildrenByProp(f, index) {
// -
if (f.name == '全部文件' && routeFlag.value) {
const cleanQuery = { ...route.query };
delete cleanQuery.flightId;
await router.replace({
path: route.path,
query: cleanQuery,
});
} else {
nowParentKey.value = f.id;
floders.value = floders.value.splice(0, index + 1);
clearSelectedRowKeys();
reload().then((res) => {
showTableData.value = res;
});
}
}
// ----------------------------------------------------------------------
@ -522,18 +584,26 @@
if (previewRecordList.value.length != 0) {
nowPreviewRecord.value = previewRecordList.value[index];
} else {
open.value = false;
openPreview.value = false;
}
}
});
} else {
//
GetMediaFile({
...searchParams.value,
parentKey: nowParentKey.value,
page: 1,
limit: 1000,
}).then((res) => {
let query = { ...searchParams.value, page: 1, limit: 1000 };
if (routeFlag.value) {
query = {
...query,
taskId: route.query.flightId,
objectKeyExist: 1,
};
} else {
query = {
...query,
parentKey: nowParentKey.value,
};
}
GetMediaFile(query).then((res) => {
previewRecordList.value = uniqueByKey(res.items, nowPreviewRecord.value).sort((a, b) => {
return dayjs(a.createTime) - dayjs(b.createTime);
});
@ -615,7 +685,7 @@
}
// ----------------------------------------------------------------------------
const open = ref(false);
const openPreview = ref(false);
//
const nowPreviewRecord: any = ref();
//
@ -624,18 +694,26 @@
async function lookRecord(record) {
//
if (record.objectKey) {
GetMediaFile({
...searchParams.value,
parentKey: nowParentKey.value,
page: 1,
limit: 100,
}).then((res) => {
let query = { ...searchParams.value, page: 1, limit: 1000 };
if (routeFlag.value) {
query = {
...query,
taskId: route.query.flightId,
objectKeyExist: 1,
};
} else {
query = {
...query,
parentKey: nowParentKey.value,
};
}
GetMediaFile(query).then((res) => {
nowPreviewRecord.value = record;
//
previewRecordList.value = uniqueByKey(res.items, record).sort((a, b) => {
return dayjs(a.createTime) - dayjs(b.createTime);
});
open.value = true;
openPreview.value = true;
});
}
//
@ -695,7 +773,7 @@
//
function closeModal() {
document.body.style.cursor = 'auto';
open.value = false;
openPreview.value = false;
}
// ----------------------------------------------------------------------
@ -717,11 +795,20 @@
//
const pathDivShow = ref(false);
function showPathDiv(record) {
GetMediaFile({
parentKey: record.parentKey,
page: 1,
limit: 1000,
}).then((res) => {
let query = { ...searchParams.value, page: 1, limit: 1000 };
if (routeFlag.value) {
query = {
...query,
taskId: route.query.flightId,
objectKeyExist: 1,
};
} else {
query = {
...query,
parentKey: nowParentKey.value,
};
}
GetMediaFile(query).then((res) => {
allImageDataList.value = res.items.filter(
(item) => item.objectKey && item.objectKey.includes('.jpeg'),
);

@ -201,30 +201,4 @@ export const renameSchema: FormSchema[] = [
label: '新名称',
required: true,
}
];
export const svg_showOnMap_1 = `<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="16"
height="16"
>
<path
d="M19 5v11.17l2 2V5c0-1.1-.9-2-2-2H5.83l2 2H19zM2.81 2.81L1.39 4.22L3 5.83V19c0 1.1.9 2 2 2h13.17l1.61 1.61l1.41-1.41L2.81 2.81zM5 19V7.83l7.07 7.07l-.82 1.1L9 13l-3 4h8.17l2 2H5z"
fill="#000000"
></path>
</svg>`;
export const svg_showOnMap_0 = `<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="16"
height="16"
>
<path
d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14L6 17h12l-3.86-5.14z"
fill="#000000"
></path>
</svg>`;
];

@ -35,7 +35,7 @@
{{
props.nowShowImageData.siz
? (props.nowShowImageData.size / 1024 / 1024).toFixed(2) + 'M' + '&nbsp;&nbsp;&nbsp;'
: ''
: imageSize + '&nbsp;&nbsp;&nbsp;'
}}
</span>
<span>
@ -835,6 +835,8 @@
}
//
setScrollLeft();
//
getImageSize();
editNameFlag.value = true;
},
{
@ -848,6 +850,31 @@
setScrollLeft();
});
//
const imageSize = ref('');
async function getImageSize() {
try {
const response = await fetch(
VITE_GLOB_MEDIALIBRARY_IMAGE_URL + props.nowShowImageData.objectKey,
{ method: 'HEAD' },
);
if (!response.ok) {
imageSize.value = '--';
throw new Error(`HTTP error! status: ${response.status}`);
}
const contentLength = response.headers.get('Content-Length');
if (contentLength) {
const sizeInBytes = parseInt(contentLength, 10);
const sizeInMB = (sizeInBytes / (1024 * 1024)).toFixed(2);
imageSize.value = parseFloat(sizeInMB) + 'M';
} else {
imageSize.value = '--';
}
} catch (error) {
imageSize.value = '--';
}
}
//
function addFileTagsChange() {
addFileTagsFlag.value = true;
@ -1407,7 +1434,7 @@
//
.closeButton {
position: absolute;
top: 30px;
top: 2%;
right: 20px;
z-index: 200;
}

@ -139,7 +139,6 @@
CheckCircleOutlined,
StopOutlined,
} from '@ant-design/icons-vue';
import { showOnMap_1, showOnMap_0 } from './svg';
import {
UpdatePicStatus,
Deletepic,
@ -217,7 +216,6 @@
const searchValue = ref('');
function handleChangeImageSearch() {
let filterImageData = props.allImageDataList;
// let filterImageData = props.allImageDataList.filter((item) => item.showOnMap == 1);
//
if (tagSelect.value.length > 0) {
tagSelect.value.forEach((tag) => {
@ -270,13 +268,6 @@
//
function funShowOnMapOrDisplay(show, type) {
// if (type == 'showOnMap') {
// if (show.showOnMap == 1) {
// show.showOnMap = 0;
// } else {
// show.showOnMap = 1;
// }
// }
if (type == 'display') {
if (show.display == 1) {
show.display = 0;
@ -291,13 +282,6 @@
display: show.display,
showOnMap: show.showOnMap,
}).then((res) => {
// if (type == 'showOnMap') {
// if (show.showOnMap) {
// createMessage.success('');
// } else {
// createMessage.success('');
// }
// }
emits('handleSuccessPath');
emits('funUpdateDisplayOrShowOnMapData', show);
});
@ -425,7 +409,7 @@
.closeButton {
position: absolute;
top: 2%;
top: 1%;
right: -25px;
width: 20px;
height: 20px;

@ -1,30 +1,3 @@
export const showOnMap_1 = `<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="18"
height="18"
>
<path
d="M19 5v11.17l2 2V5c0-1.1-.9-2-2-2H5.83l2 2H19zM2.81 2.81L1.39 4.22L3 5.83V19c0 1.1.9 2 2 2h13.17l1.61 1.61l1.41-1.41L2.81 2.81zM5 19V7.83l7.07 7.07l-.82 1.1L9 13l-3 4h8.17l2 2H5z"
fill="#ffffff"
></path>
</svg>`;
export const showOnMap_0 = `<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="18"
height="18"
>
<path
d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14L6 17h12l-3.86-5.14z"
fill="#ffffff"
></path>
</svg>`;
export const graffiti_svg = `<svg width="25px" height="25px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="作业区域-新增迭代724-展开" transform="translate(-1692, -817)">

@ -3,13 +3,14 @@
<div class="title">
<div class="title-1">{{ props.nowPreviewRecord.name }}</div>
<div class="title-2">
{{
props.nowPreviewRecord.createTime +
' ' +
props.nowPreviewRecord.size +
' ' +
props.nowPreviewRecord.id
}}
<ClockCircleOutlined />
<span>
{{
'&nbsp;&nbsp;' +
dayjs(props.nowPreviewRecord.createTime).format('YYYY-MM-DD HH:mm:ss (UTCZ)') +
'&nbsp;&nbsp;&nbsp;'
}}
</span>
</div>
</div>
<div class="closeButton">
@ -74,14 +75,14 @@
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { CloseOutlined } from '@ant-design/icons-vue';
import { CloseOutlined, ClockCircleOutlined } from '@ant-design/icons-vue';
import {
PreviewImage,
PreviewImageInformation,
PreviewVideo,
PreviewVideoInformation,
} from './preview';
import dayjs from 'dayjs';
const props = defineProps(['nowPreviewRecord', 'previewRecordList']);
const emits = defineEmits([
'closeModal',
@ -132,11 +133,12 @@
z-index: 100;
.title-1 {
font-size: 20px;
font-size: 24px;
font-weight: 500;
color: #ffffff;
}
.title-2 {
font-size: 16px;
font-size: 18px;
color: #f0f3f3;
}
}

@ -326,42 +326,6 @@
<BorderHorizontalOutlined @click="c" />
</a-tooltip>
</div>
<!-- 加载到地图上 -->
<!-- <div class="button2" @click="funShowOnMap">
<a-tooltip placement="top">
<template #title>
<span>
{{ props.nowPreviewRecord.showOnMap == 1 ? '在地图上取消加载' : '在地图上加载' }}
</span>
</template>
<svg
v-if="props.nowPreviewRecord.showOnMap == 1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="25"
height="25"
>
<path
d="M19 5v11.17l2 2V5c0-1.1-.9-2-2-2H5.83l2 2H19zM2.81 2.81L1.39 4.22L3 5.83V19c0 1.1.9 2 2 2h13.17l1.61 1.61l1.41-1.41L2.81 2.81zM5 19V7.83l7.07 7.07l-.82 1.1L9 13l-3 4h8.17l2 2H5z"
fill="#ffffff"
></path>
</svg>
<svg
v-if="props.nowPreviewRecord.showOnMap != 1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 24 24"
width="25"
height="25"
>
<path
d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14L6 17h12l-3.86-5.14z"
fill="#ffffff"
></path>
</svg>
</a-tooltip>
</div> -->
<!-- 复制到剪贴板 -->
<div class="button">
<a-tooltip placement="top">
@ -700,29 +664,6 @@
}
};
// //
// function funShowOnMap() {
// if (props.nowPreviewRecord.showOnMap == 1) {
// props.nowPreviewRecord.showOnMap = 0;
// } else {
// props.nowPreviewRecord.showOnMap = 1;
// }
// UpdatePicStatus({
// id: props.nowPreviewRecord.id,
// fileTags: JSON.stringify(fileTags.value),
// graffitiJson: JSON.stringify(graffitis.value),
// display: props.nowPreviewRecord.display,
// showOnMap: props.nowPreviewRecord.showOnMap,
// }).then((res) => {
// if (props.nowPreviewRecord.showOnMap == 1) {
// createMessage.success('');
// } else {
// createMessage.success('');
// }
// emits('handleSuccessPreview');
// });
// }
//
async function fetchAndDownloadImage(url) {
try {

@ -51,7 +51,7 @@
{{
props.nowPreviewRecord.size
? (props.nowPreviewRecord.size / 1024 / 1024).toFixed(2) + 'M'
: '--'
: imageSize
}}
</span>
</a-col>
@ -59,13 +59,13 @@
<span class="infotitle">拍摄飞机</span>
</a-col>
<a-col :span="17">
<span class="infovalue">{{ props.nowPreviewRecord.taskDronePortName || '--' }} </span>
<span class="infovalue">{{ props.nowPreviewRecord.droneModelName || '0-100-1' }} </span>
</a-col>
<a-col :span="7">
<span class="infotitle">拍摄负载</span>
</a-col>
<a-col :span="17">
<span class="infovalue">{{ props.nowPreviewRecord.payloadModelKey || '--' }} </span>
<span class="infovalue">{{ props.nowPreviewRecord.payloadModelName || '1-99-0' }} </span>
</a-col>
<a-col :span="7">
<span class="infotitle">拍摄人员</span>
@ -225,6 +225,8 @@
import { Map } from './preview';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage, createConfirm } = useMessage();
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const props = defineProps(['nowPreviewRecord', 'previewRecordList', 'hideOrShowTextboxFlag']);
const emits = defineEmits(['chooseNowPreviewRecord', 'handleSuccessPreview', 'openPathModal']);
@ -278,6 +280,7 @@
: [];
fileTags.value = props.nowPreviewRecord.fileTags ? props.nowPreviewRecord.fileTags : [];
editNameFlag.value = true;
getImageSize();
},
{
deep: true,
@ -364,10 +367,30 @@
emits('chooseNowPreviewRecord', value);
}
// //
// function openPathModal() {
// emits('openPathModal', props.nowPreviewRecord);
// }
//
const imageSize = ref('');
async function getImageSize() {
try {
const response = await fetch(
VITE_GLOB_MEDIALIBRARY_IMAGE_URL + props.nowPreviewRecord.objectKey,
{ method: 'HEAD' },
);
if (!response.ok) {
imageSize.value = '--';
throw new Error(`HTTP error! status: ${response.status}`);
}
const contentLength = response.headers.get('Content-Length');
if (contentLength) {
const sizeInBytes = parseInt(contentLength, 10);
const sizeInMB = (sizeInBytes / (1024 * 1024)).toFixed(2);
imageSize.value = parseFloat(sizeInMB) + 'M';
} else {
imageSize.value = '--';
}
} catch (error) {
imageSize.value = '--';
}
}
</script>
<style lang="less" scoped>
.title {

@ -30,13 +30,13 @@
<span class="infotitle">航线名称</span>
</a-col>
<a-col :span="17">
<span class="infovalue">{{ props.nowPreviewRecord.taskAirLineName || '--' }} </span>
<span class="infovalue">{{ props.nowPreviewRecord.airLineName || '--' }} </span>
</a-col>
<a-col :span="7">
<span class="infotitle">视频时长</span>
</a-col>
<a-col :span="17">
<span class="infovalue">{{ taskAirLineName || '--' }} </span>
<span class="infovalue">{{ videoDuration }} </span>
</a-col>
<a-col :span="7">
<span class="infotitle">视频分辨率</span>
@ -45,8 +45,8 @@
<span class="infovalue">
{{
props.nowPreviewRecord.width && props.nowPreviewRecord.height
? props.nowPreviewRecord.width + '*' + props.nowPreviewRecord.height
: '--'
? props.nowPreviewRecord.width + ' * ' + props.nowPreviewRecord.height
: videoWidth + ' * ' + videoHeight
}}
</span>
</a-col>
@ -55,20 +55,20 @@
</a-col>
<a-col :span="17">
<span class="infovalue">
{{ props.nowPreviewRecord.size || '--' }}
{{ props.nowPreviewRecord.size || videoSize }}
</span>
</a-col>
<a-col :span="7">
<span class="infotitle">拍摄负载</span>
</a-col>
<a-col :span="17">
<span class="infovalue">{{ props.nowPreviewRecord.payloadModelKey || '--' }} </span>
<span class="infovalue">{{ props.nowPreviewRecord.payloadModelName || '1-99-0' }} </span>
</a-col>
<a-col :span="7">
<span class="infotitle">文件来源</span>
</a-col>
<a-col :span="17">
<span class="infovalue">{{ createUserName || '--' }}</span>
<span class="infovalue">{{ props.nowPreviewRecord.createUserName || '--' }}</span>
</a-col>
<a-col :span="7">
<span class="infotitle">拍摄时间</span>
@ -155,6 +155,8 @@
import { UpdatePicName, UpdatePicStatus } from '@/api/demo/mediaLibrary';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage } = useMessage();
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_MEDIALIBRARY_IMAGE_URL } = getAppEnvConfig();
const props = defineProps(['nowPreviewRecord', 'previewRecordList']);
const emits = defineEmits(['chooseNowPreviewRecord', 'handleSuccessPreview']);
@ -204,6 +206,8 @@
() => {
fileTags.value = props.nowPreviewRecord.fileTags ? props.nowPreviewRecord.fileTags : [];
editNameFlag.value = true;
getVideoSize();
getVideoDurationAndWH();
},
{
deep: true,
@ -253,6 +257,54 @@
});
}
//
const videoSize = ref('');
async function getVideoSize() {
try {
const response = await fetch(
VITE_GLOB_MEDIALIBRARY_IMAGE_URL + props.nowPreviewRecord.objectKey,
{ method: 'HEAD' },
);
if (!response.ok) {
videoSize.value = '--';
throw new Error(`HTTP error! status: ${response.status}`);
}
const contentLength = response.headers.get('Content-Length');
if (contentLength) {
const sizeInBytes = parseInt(contentLength, 10);
const sizeInMB = (sizeInBytes / (1024 * 1024)).toFixed(2);
videoSize.value = sizeInMB + 'M';
} else {
videoSize.value = '--';
}
} catch (error) {
videoSize.value = '--';
}
}
//
const videoDuration = ref('--');
const videoHeight = ref(0);
const videoWidth = ref(0);
function getVideoDurationAndWH() {
return new Promise((resolve, reject) => {
const video = document.createElement('video');
video.preload = 'metadata';
video.src = VITE_GLOB_MEDIALIBRARY_IMAGE_URL + props.nowPreviewRecord.objectKey;
video.onloadedmetadata = () => {
const duration = video.duration;
const minutes = Math.floor(duration / 60);
const seconds = Math.floor(duration % 60);
videoDuration.value = minutes + ':' + seconds.toString().padStart(2, '0');
videoHeight.value = video.videoHeight;
videoWidth.value = video.videoWidth;
video.remove();
};
video.onerror = (err) => {
videoDuration.value = '--';
};
});
}
//
function chooseNowPreviewRecord(value) {
emits('chooseNowPreviewRecord', value);

@ -114,7 +114,6 @@
});
const locationVal: any = ref({});
const flyToThere = (e) => {
console.log(e);
locationVal.value.lat = e._lat;
locationVal.value.lng = e._lng;
locationVal.value.alt = e._alt;

@ -46,6 +46,7 @@
project: null,
equipment: null,
airport: null,
gateway: null,
});
const optionsArr = reactive({
projectOptions: [],
@ -55,6 +56,7 @@
const handleChange = () => {
airPortStoreVal.setAirPort('sn', selectVal.airport);
airPortStoreVal.setUAV('sn', selectVal.equipment);
airPortStoreVal.setGateway(selectVal.gateway);
emits('selectChange', selectVal);
};
//
@ -67,9 +69,9 @@
value: item.Id,
};
});
if(sessionStorage.getItem('homeToFlightId')){
if (sessionStorage.getItem('homeToFlightId')) {
selectVal.project = sessionStorage.getItem('homeToFlightId');
sessionStorage.removeItem('homeToFlightId')
sessionStorage.removeItem('homeToFlightId');
} else {
selectVal.project = optionsArr.projectOptions[0].value;
}
@ -123,9 +125,11 @@
return {
label: item.name,
value: item.sn,
gateway: item.gateway,
};
});
selectVal.equipment = optionsArr.equipmentOptions[0].value;
selectVal.gateway = optionsArr.equipmentOptions[0].gateway;
handleChange();
} else {
optionsArr.equipmentOptions = [];

Loading…
Cancel
Save