Compare commits

...

2 Commits

Author SHA1 Message Date
userName 98c00cd0fd Merge branch 'main' of http://123.132.248.154:10000/gitY/LinYeFangHuo 2025-03-17 16:55:14 +08:00
userName 4378557ef3 链接socket显示无人机实时位置 2025-03-17 16:55:06 +08:00
6 changed files with 136 additions and 30 deletions

View File

@ -18,11 +18,11 @@ export const option = {
navsCheckColor: '#0D2822', navsCheckColor: '#0D2822',
navsCheckBackground: '#34FFE0', navsCheckBackground: '#34FFE0',
navsArr: [ navsArr: [
{ label: '待研判', value: '0'}, { label: '待研判', value: '0', sql: '' },
{ label: '待签收', value: '13'}, { label: '待签收', value: '13', sql: '' },
{ label: '待处置', value: '0'}, { label: '待处置', value: '0', sql: '' },
{ label: '待审核', value: '0'}, { label: '待审核', value: '0', sql: '' },
{ label: '已完成', value: '99+'} { label: '已完成', value: '99+', sql: '' }
], ],
sectionDatas:[ sectionDatas:[
{ {

View File

@ -1,15 +1,15 @@
import { PublicConfigClass } from '@/packages/public' import { PublicConfigClass } from '@/packages/public'
import { chartInitConfig,requestSqlConfig } from '@/settings/designSetting' import { chartInitConfig } from '@/settings/designSetting'
import { CreateComponentType } from '@/packages/index.d' import { CreateComponentType } from '@/packages/index.d'
import { NowPositionConfig } from './index' import { NowPositionConfig } from './index'
import cloneDeep from 'lodash/cloneDeep' import cloneDeep from 'lodash/cloneDeep'
export const option = { export const option = {
dataset: '',
borderColor: '#457453', borderColor: '#457453',
socketSrc: 'ws://111.36.45.20:18088/uav/ws/v1/admin/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjdXJyZW50VXNlciI6IlRLNHp5OTMyME1tS3BzdE9zVkpmdDlXanlKMjhBSThKVnV2OU55UjU1Vmw3WWptVUFZUCsveVV3eU1PaUE1VEc5Ykt1bGNhTnNsc0l6dkQ5M0ZkWGhxNlYxVm44L0dUL2NNQ2JhYjhvV0hwQ3BmTGRyNk5IQnorcytGOXM4YmNVZy9CSDlPRGlHck9ZSDhwbkpIclNjM0pIdEZFa09iSTAyVjY4RFdwNG8wRWZqYjE5YjJVQTE2WGpmWEhZUWZvNVpmMnNERzlxMnNsQ1R5VmJVUlBaMTJ1M25EWGI2TnNnODRHblM1ZVdYZTNHaFJ6VmZkYWdSMGMraG9lWG9UVTFLei9yZU1JUzlvZ3Zyb0ZWLzNpdUF6c1B1MVlVcm9RT3RheDNRdlF4WllXdGM4RFhoYlFLRFFiVXlBMGtZR2JHajFKQ3B0VFI0Y1B0aGhlb3N2dnhQTnV1ZjcyWmFUbDR3amgzUENMZVdrNThTc0Z3SjFJNnJGa3lGYWlTVlpUUSs0RzhIV2phRlIzUG9DSkk0QzAvRnM1bU16YTR4dldzZlUyZTgvKzhzSE1iUUtOZWlacjJ0cUxoTlVvN0Y5OURrbEJHbzZMcmJsMXR1bVFHdlN1bGMxL1RoaEZ3WUx0cS8zRnVybTNuMEJQS21JT2dKRGlPUmtYR1lObE4wUy9DeU1qVlRpNzJWOHoxdHhDNWl5VzlmM29od0NjazZJaVhSK2lZeXJ6N2I3YWpkN3ZZUkdCNU8wRmxaOGJRaTZXVnM1STgzSDMwREcwNEtTdWFybnJpNncvNm83NkJrTW1RQnlwbzI3NnlUMnJmcnFlZ0xwM0I0VGIvQkx1cGpHMUtjL0pUNlg5bVlUcTlIZVQxU09IQmdkUGs3RzgyN3BPL3NPTTFqZkxFWE5VSjluZjRJQVFHQkJMVnFmMjVBYWVtVkNVN0ljaEIvYWh0WVVJdkZJZDBXdHE1aXdNbk9PZXFhNTFmTG5RSTIwN0x0c0ZMMWd2d2daUFBsQTdtbkpSMUQrMzBBbDV3UXFTai9WNXhRYXVXTkQ1Z0FDV0cxcGZXZFFoTkM1bnM4djQ4a2pkdmlNcmVTRHNTekUzU3ZSVjFLeDk5SnpJa1B1UmNQZXR3cVVWbGk1dU9vWlBJSXRWbjc1UjlzdHpneHNCeW1JdUhjSDJsWmdLSkhhUmpTWlE4cEQxRlIzUzZZeGtSWDlIa3lvUHE4S3lZNktGckREUW9OanJJVTEvQTg1M0cydyswaEl0QXdOQWZNaXdBbUMvbE1zLytBRk04cm5UcFVCdU9LYnNTSnBxanAzT1k2TitQZVFSZ3pxN1VJcnVlWFBMRXVjQkh4MXRpZkdMZXcvbENGa1pVMDAxNlBWcTNFMDl4TTZha0xLRExTUVcyU1gzZVRxcitVaExkWllvM1RqZEM1NVJ5OW1lZDZTSFNPbWxwcURSaTBvRnZyVXRyL0N4UExwaG1HK0RKd2oyazVHdFFkanJoNkF5RGlpWm5xejFNREFlczZvVkVhUW81MFpkSE5FRU16a25xcUZCWWY3eU5PTVFvOVg4dTdIV2dLZWFndGdjc21DZ1pqVmIrekFsTWpLMk1uSzZGQTY4TlYxV3kxZU41eHp4ZUpySnFoOFBHVHJrMUdPUmQzTjJFdTZOTVdXSzVPVDdWNmNQZzFtMm1WNFNIdnphSnBCYUp0dCs5dFhibkdCNThHOEFUV0g2Um5WRVFWeW1UTGhHK2I3UmE5Q0ZkaWMzWm0yams3K0VROU5LRWxRVWd0UkxhTFJJUnlvZXUzOXhnUWt2dVMvOXA2NHJzc1diUHFoRGw2OHlzK0luRFBIaEVKcFkxRk16aDlWcmZxY290OFJwMlNqbXI2clVOM25sVGpLYzRKR08yakZOTVB4ZXpzaFdsdHpKVjhZeGxJZ0tnZEtPT0kySm8yUTVhbkYxSTRtN01jQ2ZQIiwiZXhwIjoxNzQyNzg0MjU1fQ.p5g59OlxRrof3q-mRXErhyP21f3wkIpeSz3FNaJUGR8',
mapOptions:{ mapOptions:{
"scene": { "scene": {
"center": {"lat":35.362625,"lng":118.033886,"alt":8306.3,"heading":360,"pitch":-45}, "center": {"lat":35.362625,"lng":118.033886,"alt":22306.3,"heading":360,"pitch":-70},
"scene3DOnly": false, "scene3DOnly": false,
"shadows": false, "shadows": false,
"removeDblClick": true, "removeDblClick": true,
@ -125,6 +125,4 @@ export default class Config extends PublicConfigClass implements CreateComponent
public attr = { ...chartInitConfig, w: 343, h: 224, zIndex: -1 } public attr = { ...chartInitConfig, w: 343, h: 224, zIndex: -1 }
public chartConfig = cloneDeep(NowPositionConfig) public chartConfig = cloneDeep(NowPositionConfig)
public option = cloneDeep(option) public option = cloneDeep(option)
public request = { ...requestSqlConfig, requestSQLContent: { sql: 'select * from ' }, }
public filter = "return res.result;"
} }

View File

@ -1,4 +1,15 @@
<template> <template>
<!-- <CollapseItem name="内容" :expanded="true">
<SettingItemBox name="socket" :alone="true">
<n-input
size="small"
v-model:value="optionData.socketSrc"
:minlength="1"
type="text"
placeholder="请输入"
/>
</SettingItemBox>
</CollapseItem> -->
<SettingItemBox name="样式"> <SettingItemBox name="样式">
<SettingItem name="边框颜色"> <SettingItem name="边框颜色">
<n-color-picker <n-color-picker

View File

@ -21,27 +21,24 @@ const { w, h } = toRefs(props.chartConfig.attr)
const { const {
borderColor, borderColor,
mapOptions, mapOptions,
dataset
} = toRefs(props.chartConfig.option) } = toRefs(props.chartConfig.option)
let map: mars3d.Map; // let map: mars3d.Map; //
const isFirstLoad = ref(true); const isFirstLoad = ref(true);
const vChartRef = ref<HTMLElement>() const vChartRef = ref<HTMLElement>()
let graphicLayer;
const initMap = (newData: any) => { const initMap = (newData: any) => {
// //
if(isFirstLoad.value){ if(isFirstLoad.value){
map = new mars3d.Map(vChartRef.value, newData); map = new mars3d.Map(vChartRef.value, newData);
}else{ // }else{ //
// map.setOptions(newData);
map.setSceneOptions(newData.scene); map.setSceneOptions(newData.scene);
} }
isFirstLoad.value = false; isFirstLoad.value = false;
graphicLayer = new mars3d.layer.GraphicLayer();
map.addLayer(graphicLayer)
} }
onMounted(()=>{
})
const stopWatch = watch( const stopWatch = watch(
() => props.chartConfig.option.mapOptions, () => props.chartConfig.option.mapOptions,
async option => { async option => {
@ -55,16 +52,89 @@ const stopWatch = watch(
} }
) )
// const myWebSocket = ref();
useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => { const lockReconnect = ref(false);
stopWatch() const myWebSocketTimer = ref();
let arr = newData || [116.300467, 39.907761]
map.flyTo({ function websocketReconnect() {
center: arr, // if (lockReconnect.value) {
zoom: 18, // //
pitch: 0 // return;
}) }
}) lockReconnect.value = true;
//
let tt;
tt && clearTimeout(tt);
tt = setTimeout(function () {
initWebSocket();
lockReconnect.value = false;
}, 120000);
}
function initWebSocket() {
if ('WebSocket' in window) {
myWebSocket.value = new WebSocket('ws://111.36.45.20:18088/uav/ws/v1/admin/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjdXJyZW50VXNlciI6IlRLNHp5OTMyME1tS3BzdE9zVkpmdDlXanlKMjhBSThKVnV2OU55UjU1Vmw3WWptVUFZUCsveVV3eU1PaUE1VEc5Ykt1bGNhTnNsc0l6dkQ5M0ZkWGhxNlYxVm44L0dUL2NNQ2JhYjhvV0hwQ3BmTGRyNk5IQnorcytGOXM4YmNVZy9CSDlPRGlHck9ZSDhwbkpIclNjM0pIdEZFa09iSTAyVjY4RFdwNG8wRWZqYjE5YjJVQTE2WGpmWEhZUWZvNVpmMnNERzlxMnNsQ1R5VmJVUlBaMTJ1M25EWGI2TnNnODRHblM1ZVdYZTNHaFJ6VmZkYWdSMGMraG9lWG9UVTFLei9yZU1JUzlvZ3Zyb0ZWLzNpdUF6c1B1MVlVcm9RT3RheDNRdlF4WllXdGM4RFhoYlFLRFFiVXlBMGtZR2JHajFKQ3B0VFI0Y1B0aGhlb3N2dnhQTnV1ZjcyWmFUbDR3amgzUENMZVdrNThTc0Z3SjFJNnJGa3lGYWlTVlpUUSs0RzhIV2phRlIzUG9DSkk0QzAvRnM1bU16YTR4dldzZlUyZTgvKzhzSE1iUUtOZWlacjJ0cUxoTlVvN0Y5OURrbEJHbzZMcmJsMXR1bVFHdlN1bGMxL1RoaEZ3WUx0cS8zRnVybTNuMEJQS21JT2dKRGlPUmtYR1lObE4wUy9DeU1qVlRpNzJWOHoxdHhDNWl5VzlmM29od0NjazZJaVhSK2lZeXJ6N2I3YWpkN3ZZUkdCNU8wRmxaOGJRaTZXVnM1STgzSDMwREcwNEtTdWFybnJpNncvNm83NkJrTW1RQnlwbzI3NnlUMnJmcnFlZ0xwM0I0VGIvQkx1cGpHMUtjL0pUNlg5bVlUcTlIZVQxU09IQmdkUGs3RzgyN3BPL3NPTTFqZkxFWE5VSjluZjRJQVFHQkJMVnFmMjVBYWVtVkNVN0ljaEIvYWh0WVVJdkZJZDBXdHE1aXdNbk9PZXFhNTFmTG5RSTIwN0x0c0ZMMWd2d2daUFBsQTdtbkpSMUQrMzBBbDV3UXFTai9WNXhRYXVXTkQ1Z0FDV0cxcGZXZFFoTkM1bnM4djQ4a2pkdmlNcmVTRHNTekUzU3ZSVjFLeDk5SnpJa1B1UmNQZXR3cVVWbGk1dU9vWlBJSXRWbjc1UjlzdHpneHNCeW1JdUhjSDJsWmdLSkhhUmpTWlE4cEQxRlIzUzZZeGtSWDlIa3lvUHE4S3lZNktGckREUW9OanJJVTEvQTg1M0cydyswaEl0QXdOQWZNaXdBbUMvbE1zLytBRk04cm5UcFVCdU9LYnNTSnBxanAzT1k2TitQZVFSZ3pxN1VJcnVlWFBMRXVjQkh4MXRpZkdMZXcvbENGa1pVMDAxNlBWcTNFMDl4TTZha0xLRExTUVcyU1gzZVRxcitVaExkWllvM1RqZEM1NVJ5OW1lZDZTSFNPbWxwcURSaTBvRnZyVXRyL0N4UExwaG1HK0RKd2oyazVHdFFkanJoNkF5RGlpWm5xejFNREFlczZvVkVhUW81MFpkSE5FRU16a25xcUZCWWY3eU5PTVFvOVg4dTdIV2dLZWFndGdjc21DZ1pqVmIrekFsTWpLMk1uSzZGQTY4TlYxV3kxZU41eHp4ZUpySnFoOFBHVHJrMUdPUmQzTjJFdTZOTVdXSzVPVDdWNmNQZzFtMm1WNFNIdnphSnBCYUp0dCs5dFhibkdCNThHOEFUV0g2Um5WRVFWeW1UTGhHK2I3UmE5Q0ZkaWMzWm0yams3K0VROU5LRWxRVWd0UkxhTFJJUnlvZXUzOXhnUWt2dVMvOXA2NHJzc1diUHFoRGw2OHlzK0luRFBIaEVKcFkxRk16aDlWcmZxY290OFJwMlNqbXI2clVOM25sVGpLYzRKR08yakZOTVB4ZXpzaFdsdHpKVjhZeGxJZ0tnZEtPT0kySm8yUTVhbkYxSTRtN01jQ2ZQIiwiZXhwIjoxNzQyNzg0MjU1fQ.p5g59OlxRrof3q-mRXErhyP21f3wkIpeSz3FNaJUGR8');
myWebSocket.value.onopen = function () {
if (myWebSocketTimer.value) {
clearInterval(myWebSocketTimer.value);
}
webSocketHeart();
};
myWebSocket.value.onmessage = function (evt) {
const data = JSON.parse(evt.data);
createListeningEvent(data);
};
myWebSocket.value.onclose = function () {
//
websocketReconnect();
};
} else {
alert('您的浏览器不支持 WebSocket!');
}
}
function webSocketHeart() {
//
let total = 1;
myWebSocketTimer.value = setInterval(function () {
if (myWebSocket.value) {
total = total + 1;
}
}, 30000);
}
const createListeningEvent = (value) => {
if(value.type == 1 && value.isUavOn == 1){
handlerAddEntity(value.data)
}
};
// Entity
const handlerAddEntity = (data) => {
let graphicOptions = {
id: data.siteId,
position: [parseFloat(data.longitude), parseFloat(data.latitude)],
style: {
image: '/src/assets/images/chart/equipment/wurenji.png',
clampToGround: true,
scale: 0.5,
}
}
let graphic = graphicLayer.getGraphicById(data.siteId);
if(graphic){
graphicLayer.removeGraphic(graphic);
graphic = new mars3d.graphic.BillboardEntity(graphicOptions);
graphicLayer.addGraphic(graphic);
}else{
graphic = new mars3d.graphic.BillboardEntity(graphicOptions);
graphicLayer.addGraphic(graphic);
}
}
onMounted(() => {
stopWatch();
initWebSocket();
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -37,8 +37,8 @@ export const option = {
desc: '2024.12.24 13:08:07' desc: '2024.12.24 13:08:07'
}, },
{ {
title: '暸望塔', title: '线索来源',
desc: '费县瞭望塔' desc: '无人机上报'
} }
] ]
} }

View File

@ -2,7 +2,7 @@
<div class="go-title-03"> <div class="go-title-03">
<div class="bannerbox"> <div class="bannerbox">
<a-carousel autoplay dots-class="slick-dots slick-thumb"> <a-carousel autoplay dots-class="slick-dots slick-thumb">
<div v-for="item in bannerArr"> <div v-for="item in bannerArr" @click="bannerClick(item)">
<img :src="item" /> <img :src="item" />
</div> </div>
</a-carousel> </a-carousel>
@ -17,10 +17,13 @@
</div> </div>
</div> </div>
</div> </div>
<!-- <div class="bigImgbox" v-if="bigImgVisible" @click="hideClick">
<img class="bigImg" :src="bigImgSrc" />
</div> -->
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { PropType, toRefs } from 'vue'; import { PropType, toRefs, ref } from 'vue';
import { CreateComponentType } from '@/packages/index.d'; import { CreateComponentType } from '@/packages/index.d';
import { useChartDataFetch } from '@/hooks'; import { useChartDataFetch } from '@/hooks';
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'; import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore';
@ -43,6 +46,16 @@ const {
dataset dataset
} = toRefs(props.chartConfig.option) } = toRefs(props.chartConfig.option)
const bigImgVisible = ref(false)
const bigImgSrc = ref()
const bannerClick = (item) =>{
console.log('iii', item);
bigImgSrc.value = item;
// bigImgVisible.value = true
}
const hideClick = ()=>{
bigImgVisible.value = false
}
// callback // callback
useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => { useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => {
props.chartConfig.option.dataset = resData; props.chartConfig.option.dataset = resData;
@ -143,4 +156,18 @@ useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => {
} }
} }
.bigImgbox{
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
background: rgba(0,0,0,0.3);
display:flex;
align-items: center;
justify-content: center;
}
.bigImg{
width: 70%;
}
</style> </style>