main
徐景良 2025-08-13 17:09:33 +08:00
parent f56c6cc4ed
commit 452b7c358b
28 changed files with 44136 additions and 89 deletions

View File

@ -24,7 +24,7 @@ VITE_GLOB_UPLOAD_URL=http://123.132.248.154:9243
VITE_GLOB_API_URL_PREFIX=
VITE_GLOB_APP_TITLE = 费县智慧林业防灭火平台
VITE_GLOB_APP_TITLE = 空天地人物融合智能应急响应平台
VITE_GLOB_APP_LOGO = /logo.png

View File

@ -19,13 +19,13 @@
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.6.0/libs/dash.all.min.4.4.1.js"></script>
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.6.0/tcplayer.v4.6.0.min.js"></script>
<!-- 引入海康插件内容 -->
<script type="text/javascript" src="./public/monitor/monitorHK/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="./public/monitor/monitorHK/jsencrypt.min.js"></script>
<script type="text/javascript" src="./public/monitor/monitorHK/jsWebControl-1.0.0.min.js"></script>
<script type="text/javascript" src="/monitor/monitorHK/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="/monitor/monitorHK/jsencrypt.min.js"></script>
<script type="text/javascript" src="/monitor/monitorHK/jsWebControl-1.0.0.min.js"></script>
<!-- 引入乐橙插件内容 -->
<script type="text/javascript" src="./public/monitor/monitorLC/imouPlayer.js"></script>
<script type="text/javascript" src="/monitor/monitorLC/imouPlayer.js"></script>
<!-- 引入青犀插件内容 -->
<script type="text/javascript" src="./public/monitor/monitorQX/EasyPlayer-element.min.js"></script>
<script type="text/javascript" src="/monitor/monitorQX/EasyPlayer-element.min.js"></script>
<style>
/* .mars3d-template-content{

View File

@ -20,7 +20,7 @@
"fix-memory-limit": "cross-env LIMIT=8048 increase-memory-limit",
"bootstrap": "pnpm install",
"build": "vite build",
"build:linyefanghuo": "vite build --mode linyefanghuo",
"build:linyefanghuo": "cross-env NODE_OPTIONS=--max-old-space-size=8192 pnpm vite build --mode linyefanghuo",
"build:analyze": "cross-env NODE_OPTIONS=--max-old-space-size=8192 pnpm vite build --mode analyze",
"build:docker": "vite build --mode docker",
"build:no-cache": "pnpm store prune && npm run build",
@ -123,8 +123,9 @@
"jszip": "^3.10.1",
"keymaster": "^1.6.2",
"lodash-es": "^4.17.21",
"mars3d": "~3.8.8",
"mars3d-cesium": "~1.124.0",
"mars3d": "file:packages/mars3d",
"mars3d-cesium": "^1.130.0",
"mars3d-space": "^3.7.0",
"mockjs": "^1.1.0",
"moment": "^2.30.1",
"monaco-editor": "^0.33.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

1381
packages/mars3d/mars3d.css Normal file

File diff suppressed because it is too large Load Diff

42452
packages/mars3d/mars3d.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

15
packages/mars3d/mars3d.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,41 @@
{
"name": "mars3d",
"version": "3.10.1",
"description": "Mars3D三维可视化平台",
"main": "./mars3d.js",
"types": "./mars3d.d.ts",
"peerDependencies": {
"@turf/turf": "^7.2.0",
"mars3d-cesium": "^1.131.0"
},
"devDependencies": {},
"scripts": {},
"repository": {
"type": "git",
"url": "https://github.com/marsgis/mars3d.git"
},
"bugs": {
"url": "https://github.com/marsgis/mars3d/issues",
"email": "wh@marsgis.cn"
},
"keywords": [
"marsgis",
"mars3d",
"cesium",
"webgl",
"gis",
"3dgis",
"webgis"
],
"author": "火星科技",
"license": "Apache-2.0",
"homepage": "http://mars3d.cn",
"build": {
"plugin": false,
"globals": {
"@turf/turf": "turf",
"mars3d-cesium": "Cesium"
},
"minify": "obfuscator"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -59,6 +59,7 @@ const isFirstLoad = ref(true);
const initMap = (newData: any) => {
//
if(isFirstLoad.value){
console.log(" newData", newData);
map = new mars3d.Map(vChartRef.value, newData);
}else{ //
// map.setOptions(newData);

View File

@ -5,7 +5,7 @@ import { Titles01Config } from './index'
import cloneDeep from 'lodash/cloneDeep'
export const option = {
borderTitle: '费县智慧林业防灭火平台',
borderTitle: '空天地人物融合智能应急响应平台',
borderTitleWidth: 1920,
borderTitleHeight: 98,
borderTitleSize: 18,

View File

@ -65,11 +65,12 @@ const {
const navsClick = function(item,index){
navsIndex.value = index
props.chartConfig.request.requestSQLContent.sql = item.sql
useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any) => {
props.chartConfig.option.sectionDatas = resData
})
navsIndex.value = index
props.chartConfig.request.requestSQLContent.sql = item.sql
useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any) => {
props.chartConfig.option.sectionDatas = resData
handlerLoadFirePoint(resData)
})
}
// callback
useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => {
@ -79,21 +80,27 @@ useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => {
onMounted(()=>{
//
alert(12);
setTimeout(function(){
handlerLoadFirePoint(sectionDatas.value);
},5000)
// console.log("sectionDatas",sectionDatas.value)
// handlerLoadFirePoint(sectionDatas.value);
//
// navsClick(navsArr.value[0],0);
},1000)
})
//
const handlerLoadFirePoint = (points:[])=>{
window.graphicLayer.clear();
points?.forEach((item,index)=>{
let graphicOptions = {
id:item.id,
attr:item,
position: [parseFloat(item.lng), parseFloat(item.lat)],
style: {
image: "/public/map/fire.png",
image: "/map/fire.png",
clampToGround: true,
scale: 0.8,
label: {
@ -106,35 +113,6 @@ const handlerLoadFirePoint = (points:[])=>{
distanceDisplayCondition_near: 0,
},
},
popup: 'all',
// `<div class="marsTiltPanel marsTiltPanel-theme-red" style="font-size:12px;">
// <div class="marsTiltPanel-wrap">
// <div class="area">
// <div class="arrow-lt"></div>
// <div class="b-t"></div>
// <div class="b-r"></div>
// <div class="b-b"></div>
// <div class="b-l"></div>
// <div class="arrow-rb"></div>
// <div class="label-wrap">
// <div class="title"></div>
// <div class="label-content">
// <div class="data-li">
// <div class="data-label">${item.position}</div>
// </div>
// <div class="data-li">
// <div class="data-label"></div>
// <div class="data-value"><span id="lablYeWei" class="label-num">2025-2-11 12:00:00</span><span class="label-unit"></span>
// </div>
// </div>
// </div>
// </div>
// </div>
// <div class="b-t-l"></div>
// <div class="b-b-r"></div>
// </div>
// <div class="arrow" ></div>
// </div>`,
popupOptions: {
offsetY: -30,
template: "{content}",

View File

@ -3,7 +3,8 @@
<div class="bannerbox">
<a-carousel autoplay dots-class="slick-dots slick-thumb" preview-disabled>
<div v-for="item in dataset.imgArr">
<a-image :src="getAssetsImg(item)" />
<a-image :src="item" />
</div>
</a-carousel>
</div>
@ -74,8 +75,10 @@ onMounted(()=>{
//
props.chartConfig.option.dataset.imgArr = [];
let tempImages = resData[0].image.split(",");
let tempImages = resData[0].image.split(",");
if(tempImages.length>0){
tempImages?.forEach((img,idx)=>{
props.chartConfig.option.dataset.imgArr.push(VITE_GLOB_API_URL+"/"+img)
@ -83,7 +86,8 @@ onMounted(()=>{
}else{
props.chartConfig.option.dataset.imgArr = [VITE_GLOB_API_URL+"/"+resData[0].image]
}
console.log("props.chartConfig.option.dataset.imgArr",props.chartConfig.option.dataset.imgArr);
props.chartConfig.option.dataset.data = data;
});
});

View File

@ -2,7 +2,7 @@
<div class="ZhiGan_LowerRight">
<div class="image">
<img
src="@/assets/images/chart/zhigan/component/LowerRight.png"
:src="getAssetsImg('@/assets/images/chart/zhigan/component/LowerRight.png')"
:width="option.dataStyle.imageWidth"
:height="option.dataStyle.imageHeight"
/>
@ -16,6 +16,7 @@
import { icon } from '@/plugins';
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore';
import { useChartDataFetch } from '@/hooks';
import { getAssetsImg } from '@/utils/index';
const props = defineProps({
chartConfig: {

View File

@ -26,8 +26,8 @@
},
{
"id": 418015351681029,
"title": "XZD151青山裕水库西",
"serialNumber": "c10f9faea87d4f659e2bc01de24e29a9",
"title": "TS60马田路东首1",
"serialNumber": "567ddbac8ba1401e84757cc0750d272f",
"manufacturer": "海康"
},
{
@ -51,13 +51,13 @@
{
"id": 490483936976911,
"title": "大青山林场机库摄像头",
"serialNumber": "http://111.36.45.20:18000/flv/hls/H-fc4c09b5a3451bb9.flv",
"serialNumber": "http://box.wisestcity.com:8081/live/7.flv",
"manufacturer": "腾讯"
},
{
"id": 490483936976911,
"title": "玉皇宫机库摄像头",
"serialNumber": "http://111.36.45.20:18000/flv/hls/H-dcb1ea7388588111.flv",
"serialNumber": "http://box.wisestcity.com:8081/live/5.flv",
"manufacturer": "腾讯"
},
{

View File

@ -82,6 +82,7 @@
:nowFullScreenVideo="nowFullScreenVideo"
@changeNowFullScreenVideo="changeNowFullScreenVideo"
/>
<MonitorTX
v-if="!isEdit && !option.status.hide && item.manufacturer == '腾讯'"
:videourl="item.videourl"

View File

@ -48,8 +48,11 @@
txPlayer = TCPlayer('ZhiGan_WuRenJiShiShiHuaMian' + props.index + props.timestamp, {
width: props.width,
height: props.height,
autoplay:true,
controls:true,
});
txPlayer.src(props.videourl);
}
});
}

View File

@ -12,9 +12,7 @@
<n-image
:width="option.dataStyle.imageWidth"
:height="option.dataStyle.imageHeight"
:src="
'src/assets/images/chart/zhigan/component/ZhiGan_YongHuShu' + (index + 1) + '.png'
"
:src=getAssetsImg('@/assets/images/chart/zhigan/component/ZhiGan_YongHuShu'+(index + 1)+'.png')
preview-disabled
/>
</div>
@ -38,7 +36,8 @@
import { useChartDataFetch } from '@/hooks';
import { EventBus } from '@/utils/eventBus';
import { replaceSqlParams } from '@/utils/sqlHandler';
import { getAssetsImg } from '@/utils/index';
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType>,

View File

@ -5,7 +5,30 @@
<a-button type="primary" @click="editLayer()"></a-button>
<a-button type="primary" danger @click="delLayer()"></a-button>
</div>
<a-tree
style="padding-top:20px;"
v-if="treeDataLoadEnd"
checkable
:tree-data="treeData"
:field-names="{ key: 'id', title: 'applicationName', children: 'child' }"
@check="handleCheck"
@select="handleSelect"
:expanded-keys="expandedKeys"
>
<template #title="{ applicationName, dataRef }">
<div style="width:100%;">
<span> {{applicationName}}</span>
<span v-if="dataRef.tableName" style="float:right;margin-left:20px;" @click="flyToLayer(dataRef.id)">
<AimOutlined />
</span>
</div>
</template>
</a-tree>
<BasicTree
v-if="false"
ref="asyncExpandTreeRef"
title="图层列表"
toolbar
@ -28,16 +51,18 @@
import { BasicTree, TreeItem, TreeActionItem, TreeActionType } from '@/components/Tree';
import { getMenuList, deleteMenu, getAllModuleDetail } from '@/api/demo/system';
import { getApplicationList, deleteApplication } from '@/api/application/index';
import { FormOutlined, DeleteOutlined, PlusOutlined } from '@ant-design/icons-vue';
import { FormOutlined, DeleteOutlined, PlusOutlined,AimOutlined } from '@ant-design/icons-vue';
import { router } from '@/router';
import { useMessage } from '@/hooks/web/useMessage';
import { deleteLayer } from '@/api/sys/layerManagement';
const { createMessage, createConfirm } = useMessage();
const emit = defineEmits(['select', 'edit', 'add', 'remove','checked']);
const emit = defineEmits(['select', 'edit', 'add', 'remove','checked','flyToLayer']);
defineOptions({ name: 'DeptTree' });
const treeDataLoadEnd = ref<Boolean>(false);
const treeData = ref<TreeItem[]>([]);
const expandedKeys = ref([]);
let selectItem = ref();
const asyncExpandTreeRef = ref<Nullable<TreeActionType>>(null);
async function fetch() {
@ -50,6 +75,9 @@
});
}, 500);
let keys = getAllKeys(treeData.value);
expandedKeys.value = keys;
treeDataLoadEnd.value = true;
//
nextTick(() => {
@ -57,6 +85,19 @@
});
}
// key
const getAllKeys = (data) => {
let ids = [];
data.forEach((node) => {
ids.push(node.id);
if (node.child) {
ids = [...ids, ...getAllKeys(node.child)];
}
});
return ids;
};
function handleSelect(keys) {
const item = treeFindById(treeData.value, keys[0]);
emit('select', item);
@ -68,6 +109,12 @@
emit("checked",e);
}
/**
* 飞行到图层
*/
function flyToLayer(id){
emit("flyToLayer",id);
}
/**
* 根据id值或某个属性的值从树结构中查询数据
* @param {Array} treeArray 树结构数据

View File

@ -248,38 +248,63 @@ const PreviewDrawingGeometry = (map,geometry) => {
}
// 加载图层
console.log("geojsongeojson",geojson.features[0].geometry.coordinates[0][0]);
geojson.features[0].geometry.coordinates[0][0].pop();
drawingGraphicLayer = new mars3d.layer.GeoJsonLayer({
name: "编辑图层",
name: "标绘示例数据",
data:geojson,
isAutoEditing:true,
popup: "{type} {name}",
queryParameters: {
token: "mars3d" // 可以传自定义url参数如token等
},
symbol: {
styleOptions: {
color: "#0d3685",
outlineColor: "#0d3685",
opacity: 0.8,
clampToGround:true,
"color": "#2f00b0",
"pixelSize": 10,
"opacity": 1,
"outline": true,
"outlineColor": "#ffffff",
"outlineOpacity": 0.6,
"outlineWidth": 2,
"scaleByDistance_far": 1000000,
"scaleByDistance_farValue": 0.1,
"scaleByDistance_near": 1000,
"scaleByDistance_nearValue": 1,
"distanceDisplayCondition_far": 10000,
"visibleDepth": false
}
merge: true,
styleOptions: {
color: "#408eff",
outlineColor: "#408eff",
opacity: 0.8,
clampToGround:true,
}
},
clampToGround:true,
popup: [],
popupOptions: {
showNull: true
},
flyTo: true
})
})
// drawingGraphicLayer = new mars3d.layer.GeoJsonLayer({
// name: "编辑图层",
// data:geojson,
// isAutoEditing:true,
// symbol: {
// styleOptions: {
// color: "#0d3685",
// outlineColor: "#0d3685",
// opacity: 0.8,
// clampToGround:true,
// "color": "#2f00b0",
// "pixelSize": 10,
// "opacity": 1,
// "outline": true,
// "outlineColor": "#ffffff",
// "outlineOpacity": 0.6,
// "outlineWidth": 2,
// "scaleByDistance_far": 1000000,
// "scaleByDistance_farValue": 0.1,
// "scaleByDistance_near": 1000,
// "scaleByDistance_nearValue": 1,
// "distanceDisplayCondition_far": 10000,
// "visibleDepth": false
// }
// },
// clampToGround:true,
// popup: [],
// popupOptions: {
// showNull: true
// },
// flyTo: true
// })
map.addLayer(drawingGraphicLayer)

View File

@ -4,6 +4,7 @@
ref="treeRef"
class="w-1/4 xl:w-1/5"
@select="handleSelect"
@flyToLayer="flyToLayer"
@edit="editLayer"
@add="addLayer"
@checked="checkedLayer"
@ -277,7 +278,7 @@
}
},
popup: "all",
flyTo: true,
flyTo: false,
featureToGraphic:function(e){ //
let wkt = GeojsonToWkt(e.data.geometry);
let editData = {...e.data.properties}
@ -459,6 +460,12 @@
handlerLoadLayer(node);
}
const flyToLayer = (id) => {
let layer = globalMap.getLayerById(id);
if(layer){
layer.flyTo();
}
}

View File

@ -21,7 +21,10 @@ export default defineApplicationConfig({
//...
target: 'esnext',
commonjsOptions: {
include: /node_modules|lib/, //这里记得把lib目录加进来否则生产打包会报错
include: [
/node_modules|lib/,
/node_modules|packages/
] //这里记得把lib目录加进来否则生产打包会报错
},
},
server: {