代码合并

feixian
徐景良 2024-04-18 11:05:28 +08:00
parent c42bdde635
commit af877a4f53
34 changed files with 21955 additions and 135 deletions

View File

@ -4,6 +4,12 @@ NODE_ENV = development
VUE_APP_BASE_API = http://221.2.83.254:9001/api
VUE_APP_BASE_IMG_URL = http://221.2.83.254:9001
VUE_APP_WEBSOCKET_URL = ws://221.2.83.254:9002/ws
VUE_APP_GEOSERVER_URL = http://221.2.83.254:9007/
# VUE_APP_BASE_API = http://192.168.10.106:81/api
# VUE_APP_BASE_IMG_URL = http://192.168.10.106:81
# VUE_APP_WEBSOCKET_URL = ws://192.168.10.106:5698/ws
# 本地测试
# VUE_APP_BASE_API = http://221.2.83.254:9013/api

View File

@ -1,9 +1,10 @@
NODE_ENV = production
# 正式服务器
VUE_APP_BASE_API =http://221.2.83.254:9001/api
VUE_APP_BASE_IMG_URL =http://221.2.83.254:9001
VUE_APP_BASE_API = http://221.2.83.254:9001/api
VUE_APP_BASE_IMG_URL = http://221.2.83.254:9001
VUE_APP_WEBSOCKET_URL = ws://221.2.83.254:9002/ws
VUE_APP_GEOSERVER_URL = http://221.2.83.254:9007/
#VUE_APP_BASE_API = http://192.168.10.111:81/api
#VUE_APP_BASE_IMG_URL = http://192.168.10.117:81

View File

@ -64,8 +64,8 @@
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"node-sass": "^4.7.2",
"sass-loader": "^8.0.0",
"node-sass": "^4.14.1",
"sass-loader": "^7.3.1",
"strip-pragma-loader": "^1.0.0",
"svg-sprite-loader": "^5.0.0",
"vue-template-compiler": "^2.6.11"

BIN
public/audio/ok.mp3 Normal file

Binary file not shown.

View File

@ -137,7 +137,43 @@
"noCenter": true,
"show": false
},
{
"pid": 10,
"name": "北部山区2024年01月影像",
"type": "wms",
"url": "http://221.2.83.254:9007/geoserver/feixian/wms",
"layers": "feixian:feixianbeiying202401",
"crs": "EPSG:4326",
"parameters": {
"transparent": "true",
"format": "image/png"
},
"showClickFeature": true,
"pickFeatureStyle": {
"clampToGround": true
},
"mapSplit": false,
"noCenter": true,
"show": false
},{
"pid": 10,
"name": "演示影像",
"type": "wms",
"url": "http://221.2.83.254:9007/geoserver/feixian/wms",
"layers": "feixian:yanshiyingxiangkuang",
"crs": "EPSG:4326",
"parameters": {
"transparent": "true",
"format": "image/png"
},
"showClickFeature": true,
"pickFeatureStyle": {
"clampToGround": true
},
"mapSplit": false,
"noCenter": true,
"show": false
},
{
"pid": 10,
"name": "天地图注记",

View File

@ -321,6 +321,7 @@
.marsTiltPanel-wrap {
position: relative;
padding: 30px;
max-width:500px;
overflow: hidden;
}
@ -399,6 +400,7 @@
height: 36px;
line-height: 36px;
position: relative;
white-space: wrap;
}
.marsTiltPanel .title::before {
@ -417,15 +419,20 @@
.marsTiltPanel .data-li {
padding: 4px 45px 4px 0;
white-space: wrap;
font-size:12px!important;
}
.marsTiltPanel .data-label{
white-space: wrap;
}
.marsTiltPanel .data-label,
.data-value {
display: inline-block;
}
.marsTiltPanel .data-value {
font-size: 14px;
font-size: 12px;
}
.marsTiltPanel .label-num {

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

BIN
public/img/guijia_arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
public/img/img.rar Normal file

Binary file not shown.

Binary file not shown.

View File

@ -505,6 +505,7 @@
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
z-index:99!important;
}
.mars3d-divGraphic-edit {
background-color: rgba(254, 87, 161, 0.1);

View File

@ -53,7 +53,7 @@ export default {
}
//serversocket
this.serverTimeoutObj = setTimeout(() => {
window.websocket.close();
// window.websocket.close();
}, this.timeout);
}, this.timeout);
},

View File

@ -13,7 +13,7 @@
import Vue from "vue";
import axios from "axios";
import AppInfo from "../../../public/config/app.json";
let GEOSERVER_BASE_API = process.env.VUE_APP_GEOSERVER_URL;
// 便使,vue this.mars3d 使
Vue.prototype.mars3d = window.mars3d;
Vue.prototype.Cesium = mars3d.Cesium;
@ -85,7 +85,7 @@ export default {
let attribute = JSON.parse(it.attribute);
if(attribute.name == '森林火灾危险等级'){
attribute.type = "geojson";
attribute.url = "http://221.2.83.254:9007/geoserver/ksp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=ksp%3Aweixianxingdengji&maxFeatures=50&outputFormat=application%2Fjson"
attribute.url = "geoserver/ksp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=ksp%3Aweixianxingdengji&maxFeatures=50&outputFormat=application%2Fjson"
// attribute.symbol.styleOptions = {}
delete attribute.layers;
delete attribute.parameters;
@ -100,7 +100,7 @@ export default {
}
if(attribute.name == '引水上山水管网'){
attribute.type = "geojson";
attribute.url = "http://221.2.83.254:9007/geoserver/ksp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=ksp%3Ayinshuishangshanshuiguanwang&maxFeatures=100000&outputFormat=application%2Fjson";
attribute.url = "geoserver/ksp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=ksp%3Ayinshuishangshanshuiguanwang&maxFeatures=100000&outputFormat=application%2Fjson";
delete attribute.layers;
delete attribute.parameters;
delete attribute.highlight;
@ -114,8 +114,9 @@ export default {
}
if(attribute.symbol && attribute.symbol.styleOptions && attribute.symbol.styleOptions.label){
attribute.symbol.styleOptions.label.pixelOffsetY = -40
let oldText = attribute.symbol.styleOptions.label.text;
attribute.symbol.styleOptions.label = {
text: "{name}",
text: oldText,
font_size: 14,
color: Cesium.Color.AZURE,
outline: true,
@ -126,13 +127,26 @@ export default {
// pixelOffset: new Cesium.Cartesian2(10, -25) //
pixelOffsetY:-40
}
}
attribute.pid = group.id;
// 223
attribute.url = attribute.url.replace("http://223.99.16.253:9007","http://221.2.83.254:9007")
//
delete attribute.highlight;
if(attribute.symbol && attribute.symbol.styleOptions && attribute.symbol.styleOptions.label && attribute.symbol.styleOptions.label.text){
}
let ipinfo = this.matchHttpIpPort(attribute.url);
if(ipinfo){ //
attribute.url = attribute.url.replace(ipinfo[0],GEOSERVER_BASE_API);
}else{ //
attribute.url = GEOSERVER_BASE_API+attribute.url
}
if(attribute.type == 'geojson'){
attribute.url = attribute.url + "&cql_filter=is_del%20=0"
}else if(attribute.type == 'wms'){
attribute.parameters.cql_filter="is_del=0"
}
configLayers.unshift(attribute);
});
}
@ -152,6 +166,14 @@ export default {
},
methods: {
matchHttpIpPort(url) { // http://ip:port
const ipRegex = /^http\:\/\/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b\:\b[0-9]{1,5}\//;
const match = url.match(ipRegex);
if (match) {
return match;
}
return null;
},
getLayers() {},
initMars3d(options) {
if (this[`map${this.mapKey}`]) return;

View File

@ -335,7 +335,8 @@ export default {
let start = new Date();
let end = new Date(start.getTime())
let SAETime = [end.getFullYear()+"-"+(end.getMonth()+1)+"-"+end.getDate()+" 00:00:00",start.getFullYear()+"-"+(start.getMonth()+1)+"-"+start.getDate()+" "+start.getHours()+":"+start.getMinutes()+":"+start.getSeconds()]
let SAETime = [end.getFullYear()+"-"+(end.getMonth()+1)+"-"+end.getDate()+" "+(end.getHours()-2)+":00:00",start.getFullYear()+"-"+(start.getMonth()+1)+"-"+start.getDate()+" "+start.getHours()+":"+start.getMinutes()+":"+start.getSeconds()]
let query = {
@ -344,7 +345,8 @@ export default {
beginTime:SAETime[0],
endTime:SAETime[1],
}
getMethodCommon("/Patrol/LoadPatrolPointByTime",query).then(res=>{
// LoadPatrolPointByTimeSubsection
getMethodCommon("/Patrol/LoadPatrolPointByTimeSubsection",query).then(res=>{
if(res.code == 200){
this.routerLine = res.data;
if(res.data.length==0){
@ -356,6 +358,7 @@ export default {
}
}
})
},
resetListQuery(){
this.listQuery.page = 1;
@ -387,6 +390,7 @@ export default {
border-right:1px solid #636262;
position:relative;
}
.filter-container{
width:100%;
padding:20px 20px 30px 20px;

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,8 @@ import * as turf from '@turf/turf';
import { parse } from '../../../home/lib/handleGeojson.js'
import axios from "axios";
import { deepClone } from "../../../../utils";
import guiji from './guiji.json'
import { feature } from "@turf/turf";
mapboxgl.accessToken = "pk.eyJ1Ijoic2hpY2hhbzEyMyIsImEiOiJja3FobnI1aDEwNGF6Mm9vOXVhNnBzZmFhIn0.2fZKiMqCQHxVY74QShMEGQ";
export default {
props: ["rowkey", "lnglat", "flyCenter","trajectory","trajectoryIdRandom","rangePhone","rangePhoneRandom","listQuery","currentStreet","routerLine"],
@ -43,6 +44,10 @@ export default {
}
]
},
trajectoryTimePointGeoJson:{
"type": "FeatureCollection",
"features": []
},
rangeGeoJson:{
"type": "FeatureCollection",
"features": []
@ -100,7 +105,8 @@ export default {
deep:true
},
routerLine:function(e){
this.flyTo([parseFloat(e[0].lng),parseFloat(e[0].lat)])
this.handlerTimePoint(e);
this.flyTo([parseFloat(e[0].points[0].lng),parseFloat(e[0].points[0].lat)])
let data = e;
// this.startPoint = [data[0].lng,data[0].lat];
// this.endPoint = [data[data.length-1].lng,data[data.length-1].lat];
@ -112,9 +118,14 @@ export default {
// this.trajectoryLayerGeoJson.features[0].geometry.coordinates[0].push([parseFloat(item.lng),parseFloat(item.lat)]);
// }
// })
this.trajectoryLayerGeoJson = this.handleRouterData(e)
// this.trajectoryLayerGeoJson = this.handleRouterData(e)
this.trajectoryLayerGeoJson = this.handleRouterTeamData(e);
console.log("trajectoryLayerGeoJson",this.trajectoryLayerGeoJson)
this.loadTrajectoryLayer();
// let _this = this;
// setTimeout(function(){
// _this.loadTrajectoryLayer();
// },10000)
}
},
created(){
@ -137,6 +148,106 @@ export default {
this.map = null;
},
methods: {
handlerTimePoint(data){
this.trajectoryTimePointGeoJson.features = [];
data.forEach((item,index)=>{
if(item.points.length>2){
let featureStart = {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [item.points[0].lng,item.points[0].lat]
},
"properties": item.points[0]
}
let featureEnd = {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [item.points[item.points.length-1].lng,item.points[item.points.length-1].lat]
},
"properties": item.points[item.points.length-1]
}
this.trajectoryTimePointGeoJson.features.push(featureStart);
this.trajectoryTimePointGeoJson.features.push(featureEnd);
}
})
this.loadTrajectoryPointLayer();
},
handleRouterTeamData(pointsArray){
let geojson = {
"type": "FeatureCollection",
"features": [],
"crs": {
"type": "name",
"properties": {
}
}
};
pointsArray.forEach((points,idx)=>{
let der = 0;
let feature = {
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [[]]
},
"properties": {
"id": 1,
"creater_id": 1
}
}
let data = points.points;
data.forEach((item,index)=>{
//
if(index == 0){
der = item.intype;
feature = {
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [[]]
},
"properties": {
"intype":item.intype
}
}
}
if(der == item.intype){
feature.geometry.coordinates[0].push([parseFloat(item.lng),parseFloat(item.lat)]);
}else{
geojson.features.push(feature);
feature = {
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [[
[parseFloat(data[index-1].lng),parseFloat(data[index-1].lat)]
]]
},
"properties": {
"intype":item.intype
}
}
der = item.intype;
}
if(feature.geometry.coordinates[0].length>0){
geojson.features.push(feature);
}
})
})
return geojson
},
handleRouterData(data){ // 线
let geojson = {
"type": "FeatureCollection",
@ -148,6 +259,7 @@ export default {
}
}
};
let der = 0;
let feature = {
"type": "Feature",
@ -160,8 +272,8 @@ export default {
"creater_id": 1
}
}
data.forEach((item,index)=>{
//
if(index == 0){
der = item.intype;
feature = {
@ -201,8 +313,6 @@ export default {
}
})
console.log("geojson",geojson);
return geojson
},
@ -294,20 +404,20 @@ export default {
}
});
this.map.addLayer({
id: "onlineusernameLayer",
type: "symbol",
source: "onlineuserSource",
layout: {
"text-field": "{name}",
"text-size": 12,
"text-offset":[0,-3],
},
paint: {
"text-color": "#000000", // #000000
"text-halo-color": "#FFFFFF",
"text-halo-width": 1,
},
})
id: "onlineusernameLayer",
type: "symbol",
source: "onlineuserSource",
layout: {
"text-field": "{name}",
"text-size": 12,
"text-offset":[0,-3],
},
paint: {
"text-color": "#000000", // #000000
"text-halo-color": "#FFFFFF",
"text-halo-width": 1,
},
})
// }
},
geoStreetData(){ //
@ -564,6 +674,13 @@ export default {
}
);
this.map.loadImage("/img/guiji-arrow-2.png",
function (error, image) {
if (error) throw error;
_this.map.addImage("arrowImage", image);
}
);
//
this.geoStreetData();
@ -810,7 +927,6 @@ export default {
}
})
this.loadTrajectoryLayer();
//
//
let turfStartPoint = turf.point(this.startPoint);
@ -888,6 +1004,8 @@ export default {
el2.src = "/img/route-end.png"; //
el2.style.width = "40px";
this.endMarker = new mapboxgl.Marker(el2).setLngLat(this.endPoint).addTo(this.map);
},
loadTrajectoryLayer(){
//
@ -900,7 +1018,7 @@ export default {
type:"geojson",
data:this.trajectoryLayerGeoJson
})
// Layer
//
this.map.addLayer({
id: "trajectoryLayer",
type: "line",
@ -909,12 +1027,12 @@ export default {
},
source:"trajectorySource",
paint: {
"line-width": 2,
// "line-color": "orange",
"line-width": 6,
// "line-color": "#99ff00",
'line-color':[
"case",
["==",["get","intype"],0],
"#ff0000",
"#088ee0",
["==",["get","intype"],1],
"#00ff00",
//
@ -922,6 +1040,47 @@ export default {
],
},
})
//
this.map.addLayer({
'id': 'arrowLayer',
'type': 'symbol',
'source':'trajectorySource',
'layout': {
'symbol-placement': 'line',
'symbol-spacing': 30, // 250
'icon-image': 'arrowImage', //
'icon-size': 0.4
}
});
}
},
loadTrajectoryPointLayer(){
//
if(this.map.getSource("trajectoryTimePointSource")){
//
this.map.getSource("trajectoryTimePointSource").setData(this.trajectoryTimePointGeoJson);
}else{
// Source
this.map.addSource("trajectoryTimePointSource",{
type:"geojson",
data:this.trajectoryTimePointGeoJson
})
// Layer
this.map.addLayer({
id: "trajectoryTimePointLayer",
type: "symbol",
source: "trajectoryTimePointSource",
layout: {
"text-field": "{createTime}",
"text-size": 12,
"text-offset":[0,0],
},
paint: {
"text-color": "#ffffff", // #000000
"text-halo-color": "#000000",
"text-halo-width": 1,
},
})
}
},
loadAllRangeLayer(){ //

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,23 @@
<template>
<div id="centerDiv" class="mapcontainer">
<div id="alertOverlay">
<div id="alertOverlay" class="alert-active" ref="alertOverlay" >
<div></div>
</div>
<!-- -->
<div class="checkAudio" v-if="checkAudioShow">
<div class="check-audio-button">
<div class="window-title">温馨提示</div>
<p class="tip-text">
<img src="/img/checkAudioWindow/tip.png" width="42px" />
&nbsp;&nbsp;请先检测设备状态
</p>
<p style="text-align:right;padding:0px 20px;">
<el-button type="primary" style="background-color:#165D5A ;border-color:#165D5A ;" size="mini" @click="checkAudio"></el-button>
</p>
</div>
</div>
<!-- 头部 -->
<div class="el-header">
<div class="app-name">{{ appName }}</div>
@ -168,8 +182,6 @@
</div>
</div>
</div>
<div class="bottom-tools-container" style="display: none" v-if="finishLoadMap">
<!-- 监控列表 -->
<div class="monitor" v-if="monitorShow && appTools['monitorbox']">
@ -193,7 +205,7 @@
<!-- 右键点击设置 -->
<div v-if="setVisibleShow">
<rightclicksetting :type="rightType" :clickdata="setDatas" @close="rightType = 0;setVisibleShow=false;"></rightclicksetting>
<rightclicksetting :type="rightType" :clickdata="setDatas" :rightclicksettingRandom="rightclicksettingRandom" @close="rightType = 4;"></rightclicksetting>
</div>
<!-- 右侧数据统计火情线索视频巡航 -->
@ -210,8 +222,9 @@
</div>
<div class="list-container">
<!-- 线索列表 -->
<reportlist v-show="earlywarningTabShow==1" @close="reportlistShow = false" :mergeSuccessRandom="mergeSuccessRandom" @wuzi="wuzi"
<reportlist v-show="earlywarningTabShow==1" @close="reportlistShow = false" @dealPoint="dealPoint" :mergeSuccessRandom="mergeSuccessRandom" @wuzi="wuzi"
@shuiyuan="shuiyuan" @getlistSocket="reportlistShow = true"
@lookFireDetail="lookFireDetail"
@jiankong="jiankong" @renyuan="renyuan" @merge="mergeboxShow = true" @changeCurrentInfo="changeCurrentInfo"
:checkList="checkList" :checkNumber="checkNumber" @aroundYuAn="aroundYuAn"></reportlist>
<!-- 预警列表 -->
@ -322,9 +335,13 @@
<!-- 监控设备火情预警详情弹窗 -->
<div class="early-warning-box-container" v-drag v-if="earlyWarningBoxShow">
<earlyWarningBox @close="closeEarlyWarning" :info="monitrowarningdetail"></earlyWarningBox>
<earlyWarningBox @close="closeEarlyWarning" :info="monitrowarningdetail" :earlyWarningData="earlyWarningData"></earlyWarningBox>
</div>
<!-- 监控设备预警信息 -->
<div class="monitor-early-warning-box-container" v-drag v-if="monitorEarlyWarningBoxShow">
<monitorEarlyWarningBox @close="closeMonitorEarlyWarning" :info="monitorEarlyWarningdetail" :earlyWarningData="earlyWarningData"></monitorEarlyWarningBox>
</div>
<!-- 视频监控弹窗 -->
<div class="monitor-box-container" v-drag v-if="allMonitorShow">
@ -397,11 +414,13 @@ import Onlineuserbox from "./widget/onlineuserbox.vue";
import { getMethodCommon, postMethodCommon } from '../../api/common';
import editorbox from './widget/editorbox.vue';
import earlyWarningBox from './widget/earlywarningbox.vue'
import monitorEarlyWarningBox from './widget/monitorEarlyWarningBox.vue'
import {compareArray} from "./lib/compareArray"
import findsource from './widget/findsource.vue'
import findsourceitem from './widget/findsourceitem.vue'
import { isJson } from "../../utils/index";
let BASE_URL = process.env.VUE_APP_BASE_API;
const areaName = localStorage.getItem("areaName");
@ -439,12 +458,14 @@ export default {
monitor,
editorbox,
earlyWarningBox,
monitorEarlyWarningBox,
// findsource,
findsourceitem
},
data() {
return {
checkAudioShow:true,
endLngLat: null,
appName: null,
appTools: null,
@ -482,8 +503,9 @@ export default {
mergeboxShow: false,
mergeSuccessRandom: 1,
rightType: 0,
rightclicksettingRandom:1,
setDatas: {},
setVisibleShow: false,
setVisibleShow: true,
videoCallShow: false,
taskDeliveryShow: false,
tasklng: "",
@ -497,7 +519,6 @@ export default {
taskGraphicLayer:null,
taskList:[],
oldTaskList:[],
//
editorVisible: false,
tableName: null,
@ -506,7 +527,10 @@ export default {
currentGraphic:null,
earlyWarningAudio:null,
earlyWarningBoxShow:false,
monitorEarlyWarningBoxShow:false,
earlyWarningData:null,
monitrowarningdetail:{},
monitorEarlyWarningdetail:{},
earlywarningTabShow:1,
monitorwarningLayer:null,
filterOptions:[],
@ -540,17 +564,16 @@ export default {
],
importantServeArr:[],
importantservecheckList:[]
importantservecheckList:[],
firePointLngLat:null,
};
},
mounted() {
//
// let _this = this;
// setTimeout(function(){
// _this.earlyWarning();
// },5000);
let _this = this;
window.addEventListener("onmessageWS", this.getSocketData);
},
created() {
@ -595,9 +618,46 @@ export default {
window.editlayerinfo = this.editlayerinfo;
},
methods: {
dealPoint(){
this.checkList = [];
this.checkNumber = [];
this.mergeSuccessRandom = Math.random();
},
checkAudio(){
let audio = new Audio();
audio.src = "/audio/ok.mp3";
audio.mute = true;
audio.play();
this.checkAudioShow = false
},
getSocketData(res) {
let _this = this;
if (!isJson(res.detail.data)) return;
let obj = JSON.parse(res.detail.data);
if (obj.Module) {
if (obj.Module == "火情信息") {
_this.earlyWarning();
}
if(obj.Module == '任务下发' || obj.Module == '任务移除'){
_this.getTaskList();
}
}
},
getNewstReport(){
postMethodCommon(
"/FireManagement/LoadFireClueInfoByAreaName?areaname="+localStorage.getItem("areaName"),
).then((res) => {
if(res.code == 200){
if(res.data.length>0){
this.earlyWarningData = res.data[0]
//
this.earlyWarningBoxShow = true;
}
}
})
},
handleCheckedImportantServeChange(){
console.log('newValcccc',this.importantservecheckList)
console.log('newValqqqq',this.importantServeArr)
let arr = []
this.importantServeArr.forEach(item =>{
arr.push(item.id)
@ -717,7 +777,7 @@ export default {
window.graphicLayer.addGraphic(graphic); // : graphic.addTo(graphicLayer)
},
lookMonitorWarningDetail(item){ //
this.monitrowarningdetail = item;
this.monitorEarlyWarningdetail = item;
//
if(this.monitorwarningLayer){
this.monitorwarningLayer.clear();
@ -748,11 +808,10 @@ export default {
})
this.monitorwarningLayer.addGraphic(graphic) // : graphic.addTo(graphicLayer)
this.earlyWarningBoxShow = true;
this.monitorEarlyWarningBoxShow = true;
},
earlyWarning(){
//
this.earlyWarningBoxShow = true;
this.getNewstReport();
//
this.earlyWarningAudio = new Audio();
this.earlyWarningAudio.src = "/audio/earlywarningaudio.mp3";
@ -768,19 +827,33 @@ export default {
this.earlyWarningBoxShow = false;
this.setAlertState(false);
},
closeMonitorEarlyWarning(){
if(this.monitorwarningLayer){
this.monitorwarningLayer.clear();
}
this.monitorEarlyWarningBoxShow = false;
},
setAlertState(active) { //
var alertOverlay = document.getElementById("alertOverlay");
// var alertOverlay = document.getElementById("alertOverlay");
if (active) {
alertOverlay.style.display = "block";
alertOverlay.classList.add("alert-active");
this.$nextTick(() => {
this.$refs.alertOverlay.style.display = "block";
// this.$refs.alertOverlay.classList.add("alert-active");
})
} else {
alertOverlay.style.display = "none";
alertOverlay.classList.remove("alert-active");
this.$nextTick(() => {
this.$refs.alertOverlay.style.display = "none";
// this.$refs.alertOverlay.classList.remove("alert-active");
})
}
},
showHistoryLabel(){
this.rightType = 4;
this.setVisibleShow = true;
this.rightclicksettingRandom = Math.random();
},
drawLable(val) {
this.setDatas = {
@ -911,6 +984,7 @@ export default {
type:"success",
message:"删除成功"
})
window.websocket.send('{"AreaName": "feixian","Module": "任务移除","Data": null}');
this.getTaskList();
}
})
@ -968,11 +1042,11 @@ export default {
//
getFirePointList() {
axios({
method: "get",
url: BASE_URL + "/FireManagement/GetFireInfo",
params: {
id: 0,
},
method: "post",
url: BASE_URL + "/FireManagement/LoadFireClueInfoByAreaName?areaname="+localStorage.getItem("areaName"),
// params: {
// id: 0,
// },
headers: {
"X-Token": localStorage.getItem("X-Token"),
},
@ -991,7 +1065,8 @@ export default {
this.friePointLayer.clear();
}
data.forEach((item, index) => {
let graphic = new mars3d.graphic.BillboardEntity({
if(item.fireType == 2){
let graphic = new mars3d.graphic.BillboardEntity({
position: [parseFloat(item.lng), parseFloat(item.lat)],
style: {
image: "/img/markfire.png",
@ -1026,7 +1101,7 @@ export default {
</div>
<div class="data-li">
<div class="data-label">上报时间</div>
<div class="data-value"><span id="lablYeWei" class="label-num">${item.createTime}</span><span class="label-unit"></span>
<div class="data-value"><span id="lablYeWei" class="label-num">${item.reportTime}</span><span class="label-unit"></span>
</div>
</div>
<div class="data-li">
@ -1052,6 +1127,8 @@ export default {
attr: { remark: "火点" },
});
this.friePointLayer.addGraphic(graphic); // : graphic.addTo(graphicLayer)
}
});
},
//
@ -1082,6 +1159,10 @@ export default {
lookMonitor(e){
this.jiankong(e);
},
lookFireDetail(e){
this.earlyWarningData = e;
this.earlyWarningBoxShow = true;
},
//
jiankong(e) {
// this.deviceId = "8L0995DPAG5DF32";
@ -1332,6 +1413,7 @@ export default {
};
this.rightType = 3;
this.setVisibleShow = true;
},
},
// {
@ -2191,13 +2273,23 @@ export default {
/* 火情预警信息详情 */
.early-warning-box-container{
width:600px;
height:400px;
width:500px;
height:600px;
position:fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 99;
z-index: 999;
}
.monitor-early-warning-box-container{
width:600px;
height:420px;
position:fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 999;
}
/* 视频监控弹窗 */
@ -2208,10 +2300,10 @@ export default {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 99;
z-index: 9999;
}
/* 海康分屏查看 */
/* 海康分屏查看*/
.mul-hk-monitor-container{
width:100vw;
height:100vh;
@ -2219,10 +2311,12 @@ export default {
z-index:9999;
background:rgba(0,0,0,0.4);
}
:root {
--alert-size: 120px;
}
#alertOverlay::before,#alertOverlay::after {
content: "";
position: absolute;
@ -2230,7 +2324,7 @@ export default {
height: 100%;
}
#alertOverlay > div::before,#alertOverlay > div::after {
#alertOverlay div::before,#alertOverlay div::after {
content: "";
position: absolute;
width: 100%;
@ -2251,14 +2345,14 @@ export default {
transform: rotate(0deg) translate(calc(-1 * 160px), 0px);
}
#alertOverlay > div::before {
#alertOverlay div::before {
background: linear-gradient(to top, red, transparent);
top: 0;
left: 0;
transform: rotate(180deg);
}
#alertOverlay > div::after {
#alertOverlay div::after {
background: linear-gradient(to top, red, transparent);
top: 100%;
left: 0;
@ -2275,11 +2369,11 @@ export default {
opacity: 1;
transition: opacity 0.5s;
pointer-events: none;
z-index: 1000000000000000000000000;
z-index: 9999999;
display:none;
}
.alert-active {
.alert-active{
animation: blink 2s infinite;
}
@ -2416,4 +2510,48 @@ export default {
-webkit-box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.35);
background-color: rgba(0, 0, 0, 0.5);
}
.checkAudio{
width:100%;
height:100%;
background:rgba(0,0,0,0.4);
position:absolute;
top:0px;
left:0px;
z-index:99999999999;
}
.check-audio-button{
width:480px;
height: 220px;
position: absolute;
left:50%;
top:50%;
background:rgba(255,255,255,1);
line-height:50px;
text-align: center;
transform: translate(-50%,-50%);
background:url(/img/checkAudioWindow/bg.png);
background-size:100% 100%;
}
.check-audio-button .window-title{
width:100%;
height:50px;
line-height:50px;
text-align: left;
color: #FFFFFF;
text-shadow: 0px 2px 4px rgba(0,0,0,0.5);
text-indent:20px;
}
.check-audio-button .tip-text{
margin-top:40px;
padding:0px 50px;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 15px;
color: #FFFFFF;
text-align: justify;
font-style: normal;
line-height:50px;
}
</style>

View File

@ -1,20 +1,55 @@
<template>
<div class='earlywarning-container'>
<div class="title">火情预警信息</div>
<div class="container">
<div>
<span>预警时间{{ info.start_time }} </span>
<span style="margin-left:50px;">预警位置{{ info.detailed_address }}</span>
</div>
<div>现场图片 </div>
<div class="image-container">
<el-image
v-for="(item,index) in info.images" :key="index"
style="width: 165px; height: 100px;margin-right:12px;"
:src="item"
:preview-src-list="[item]">
</el-image>
</div>
<div class="container" :key="earlyWarningKey">
<el-row>
<el-col :span="24">
<div class="desc-colunm">位置</div>
<div class="desc-info">{{earlyWarningData.address}}</div>
</el-col>
</el-row>
<el-row :gutter="22">
<el-col :span="12">
<div class="desc-colunm">时间</div>
<div class="desc-info">{{earlyWarningData.reportTime}}</div>
</el-col>
<el-col :span="12">
<div class="desc-colunm">上报人员</div>
<div class="desc-info">{{earlyWarningData.reportPerson}}</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="desc-colunm">描述</div>
<div class="desc-info">{{earlyWarningData.describe}}</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="desc-colunm">图片</div>
<div class="desc-info">
<el-image
v-for="(item,index) in images" :key="index"
style="width: 94px; height: 100px;margin-right:12px;"
:src="item"
:preview-src-list="[item]">
</el-image>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="desc-colunm">视频</div>
<div class="desc-info" :key="earlyWarningKey">
<video v-if="earlyWarningData.audio" :key="earlyWarningKey" width="428" height="250" style="margin-top:12px;" controls>
<source :src="earlyWarningData.audio" type="video/mp4" >
</video>
</div>
</el-col>
</el-row>
</div>
<div class="operate">
<el-button type="warning" size="mini" @click="$emit('close')"></el-button>
@ -24,27 +59,38 @@
</template>
<script>
let IMAGE_BASE_URL = process.env.VUE_APP_BASE_IMG_URL
export default {
components: {},
props:["info"],
props:["info",'earlyWarningData'],
data() {
return {
images:[],
earlyWarningKey:1,
};
},
computed: {},
watch: {
earlyWarningData:function(e){
this.handlerData();
}
},
methods: {
toPosition(item){
let lngLat = [item.longitude,item.latitude]
toPosition(){
let lngLat = [this.earlyWarningData.lng,this.earlyWarningData.lat]
window.globalmap.flyToPoint(lngLat,{radius:2000,"pitch":-90});
},
handlerData(){
this.earlyWarningData.audio = this.earlyWarningData.audio ? IMAGE_BASE_URL+'/'+this.earlyWarningData.audio : null
this.images = this.earlyWarningData.image ? this.earlyWarningData.image.split(",") : []
this.images.map((item,index)=>{
this.images[index] = IMAGE_BASE_URL+"/"+item;
})
this.earlyWarningKey = Math.random();
}
},
created() {
this.handlerData();
},
mounted() {
@ -56,10 +102,23 @@ export default {
</script>
<style scoped>
.desc-colunm{
color:#179D9F;
font-size:14px;
padding:0px 0px;
}
.desc-info{
width:100%;
min-height:32px;
font-size:14px;
background:#0E2320;
padding:2px 12px;
line-height:28px;
}
.earlywarning-container{
width:100%;
height:100%;
background-image: url("/img/earlywarning.png");
background-image: url("/img/early-warning-bg.png");
background-size:100% 100%;
}

View File

@ -36,7 +36,8 @@
"lng": "",
"lat": "",
"ids": [],
"modifyId": localStorage.getItem("userId")
"modifyId": localStorage.getItem("userId"),
"fireClueId":null,
},
graphicLayer:null,
graphicPoint:null,
@ -68,6 +69,8 @@
this.checkNumber[index].selected = true;
let obj = this.checkNumber[index]
this.formData.fireClueId = obj.id;
this.formData.sourceType = 0;
this.formData.lng = parseFloat(obj.lng).toFixed(6);
this.formData.lat = parseFloat(obj.lat).toFixed(6);
this.formData.address = obj.address
@ -87,6 +90,7 @@
_this.formData.lat = point.lat;
let url = "https://restapi.amap.com/v3/geocode/regeo?key="+AppConfigInfo.gaodeApi+"&location=" + point.lng + "," + point.lat + "&extensions=base"
axios({
method: 'get',
url: url,
@ -165,6 +169,7 @@
this.pathPointGraphicLayer.clear();
this.pathPointGraphicLayer = null;
}
window.websocket.send('{"AreaName": "feixian","Module": "火情移除","Data": null}');
this.$emit("success");
}
})

View File

@ -0,0 +1,138 @@
<template>
<div class='earlywarning-container'>
<div class="title">火情预警信息</div>
<div class="container">
<div>
<span>预警时间{{ info.start_time }} </span>
<span style="margin-left:50px;">预警位置{{ info.detailed_address }}</span>
</div>
<div>现场图片 </div>
<div class="image-container">
<el-image
v-for="(item,index) in info.images" :key="index"
style="width: 165px; height: 100px;margin-right:12px;"
:src="item"
:preview-src-list="[item]">
</el-image>
</div>
</div>
<div class="operate">
<el-button type="warning" size="mini" @click="$emit('close')"></el-button>
<el-button type="primary" size="mini" @click="toPosition(info)" icon="el-icon-position">位置</el-button>
</div>
</div>
</template>
<script>
export default {
components: {},
props:["info"],
data() {
return {
};
},
computed: {},
watch: {
},
methods: {
toPosition(item){
let lngLat = [item.longitude,item.latitude]
window.globalmap.flyToPoint(lngLat,{radius:2000,"pitch":-90});
}
},
created() {
},
mounted() {
},
destroyed() {
},
}
</script>
<style scoped>
.earlywarning-container{
width:100%;
height:100%;
background-image: url("/img/earlywarning.png");
background-size:100% 100%;
}
.title{
width:100%;
height:50px;
line-height:50px;
text-indent:20px;
font-size:18px;
color:#fff;
letter-spacing: 2px;
}
.container{
width:100%;
height: calc( 100% - 100px);
padding:20px;
color:#fff;
line-height:40px;
overflow:auto;
}
.operate{
width:100%;
height:50px;
padding:0px 20px;
text-align: right;
}
.image-container{
width:100%;
}
.image-container img{
width:140px;
height:120px;
margin-right:12px;
}
::-webkit-scrollbar-track,
::-webkit-scrollbar-thumb {
border: 0;
}
::-webkit-scrollbar {
height: 10px;
width: 10px;
background: transparent;
border-radius: 5px;
}
::-webkit-scrollbar-thumb {
padding-top: 100px;
-webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25);
background-color: rgba(0, 0, 0, 0.4);
min-height: 28px;
border-radius: 4px;
background-clip: padding-box;
}
::-webkit-scrollbar-track,
::-webkit-scrollbar-thumb {
border: 0;
}
::-webkit-scrollbar-thumb:hover {
-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.1),
inset -1px -1px 0 rgba(0, 0, 0, 0.07);
background-color: #797979;
}
::-webkit-scrollbar-thumb:active {
-webkit-box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.35);
background-color: rgba(0, 0, 0, 0.5);
}
</style>

View File

@ -128,6 +128,7 @@ import axios from 'axios'
this.getListData();
},
getListData(){
this.listQuery.pageIndex = 1;
if(this.userType == '护林员'){
getMethodCommon("/FireCodeApp/GetForestryUser",this.listQuery).then(res=>{
if(res.code == 200){

View File

@ -5,7 +5,7 @@
<div style="width:100%;padding-top:20px;text-align:center;" v-if="list.length<=0">
<img src="/img/homeimg/empty.png" alt="">
</div>
<div class="news" v-for="(item, index) in list" :key="index">
<div class="news" v-for="(item, index) in list" :key="index" v-show="item.fireType != 2">
<div
class="checkbox-container"
@click="checkNews(index)"
@ -111,6 +111,7 @@ export default {
window.jiankong = this.jiankong;
window.renyuan = this.renyuan;
window.aroundYuAn = this.aroundYuAn;
window.lookFireDetail = this.lookFireDetail;
},
mounted() {
this.getList();
@ -125,7 +126,9 @@ export default {
type: "success",
message: "设置成功",
});
window.websocket.send('{"AreaName": "feixian","Module": "火情移除","Data": null}');
this.getList();
this.$emit("dealPoint")
}
);
},
@ -150,6 +153,9 @@ export default {
aroundYuAn(e) {
this.$emit("aroundYuAn", e);
},
lookFireDetail(item){
this.$emit("lookFireDetail",item);
},
renyuan(e) {
this.$emit("renyuan", e);
},
@ -196,22 +202,16 @@ export default {
});
this.checkNumber.splice(idx, 1);
}
console.log("checknumber", this.checkNumber);
},
getList() {
getMethodCommon(
"/FireManagement/LoadFireClueInfoByState",
this.listParams
postMethodCommon(
"/FireManagement/LoadFireClueInfoByAreaName?areaname="+this.listParams.areaname,
).then((res) => {
this.list = res.data;
this.list.forEach((item, index) => {
this.list[index].check = false;
});
if (this.list.length == 0) {
if (this.graphicLayer) {
this.graphicLayer.clear();
@ -224,9 +224,6 @@ export default {
});
},
drawPoint() {
let _self = this;
if (!_self.graphicLayer) {
_self.graphicLayer = new this.mars3d.layer.GraphicLayer({
@ -237,8 +234,9 @@ export default {
_self.graphicLayer.clear();
_self.list.forEach((item, index) => {
let jiankongDisplay = item.sourceTypeName == "摄像机" ? "" : "none";
let graphicPoint = new mars3d.graphic.DivLightPoint({
let itemStr = JSON.stringify(item);
if(item.fireType != 2){
let graphicPoint = new mars3d.graphic.DivLightPoint({
position: [parseFloat(item.lng), parseFloat(item.lat)],
style: {
color: "#f33349",
@ -270,7 +268,9 @@ export default {
</div>
<div class="data-li">
<div class="data-value">
<span id="lablCSFM3" onclick='lookFireDetail(${itemStr})' class="label-tag data-value-status-1" >火情信息</span>
</div>
<div class="data-value">
<span id="lablCSFM3" onclick="aroundYuAn([${item.lng},${item.lat}])" class="label-tag data-value-status-2" >防灭火资源</span>
<span id="lablSBZT1" onclick="jiankong('${item.createId}')" style="display:${jiankongDisplay}" class="label-tag data-value-status-1" title="视频监控">视频监控</span>
</div>
@ -292,7 +292,6 @@ export default {
});
_self.graphicLayer.addGraphic(graphicPoint);
let graphicWinodw = new mars3d.graphic.DivGraphic({
position: [parseFloat(item.lng), parseFloat(item.lat)],
style: {
@ -321,6 +320,9 @@ export default {
<span id="lablCSFM3" onclick="aroundYuAn([${item.lng},${item.lat}])" class="label-tag data-value-status-2" >防灭火资源</span>
<span id="lablSBZT1" onclick="jiankong('${item.createId}')" style="display:${jiankongDisplay}" class="label-tag data-value-status-1" title="视频监控">视频监控</span>
</div>
<div class="data-value">
<span id="lablCSFM3" onclick='lookFireDetail(${itemStr})' class="label-tag data-value-status-1" >火情信息</span>
</div>
</div>
</div>
</div>
@ -342,6 +344,8 @@ export default {
pointerEvents: true, // false穿div
});
// _self.graphicLayer.addGraphic(graphicWinodw);
}
});
},
toPosition(item) {
@ -353,7 +357,7 @@ export default {
if (!isJson(res.detail.data)) return;
let obj = JSON.parse(res.detail.data);
if (obj.Module) {
if (obj.Module == "火情信息") {
if (obj.Module == "火情信息" || obj.Module == "火情移除") {
_this.getList();
_this.$emit("getlistSocket");
}

View File

@ -169,7 +169,7 @@ import { postMethodCommon, getMethodCommon } from "@/api/common.js";
import drag from "../../../utils/draged";
export default {
name: "setting",
props: [ "type", "clickdata"],
props: [ "type", "clickdata","rightclicksettingRandom"],
data() {
return {
imgUrl: [
@ -214,7 +214,7 @@ export default {
this.firedialogFormVisible = false;
this.taskdialogFormVisible = false;
this.markdialogFormVisible = false;
this.markListDialogFormVisible = true;
this.markListDialogFormVisible = false;
}
},
},
@ -223,6 +223,11 @@ export default {
this.setUpData = newVal;
},
},
rightclicksettingRandom:{
handler(newVal,oldVal){
this.markListDialogFormVisible = true;
}
}
},
created() {
if (this.type == 3) {
@ -248,8 +253,8 @@ export default {
});
this.markList.push(this.setUpData);
}
this.markdialogFormVisible = false;
this.markListDialogFormVisible = true;
this.markdialogFormVisible = true;
this.markListDialogFormVisible = false;
this.isViewMark = false;
this.$emit("close");
this.addLayerPoint();

View File

@ -51,7 +51,6 @@ export default {
},
visible: {
handler(newVal, oldVal) {
console.log('newVal11122',newVal)
if(newVal){
if(this.gridMap1){
this.getListDatas()

View File

@ -138,7 +138,6 @@ export default {
distanceDisplayCondition_far: 10000,
distanceDisplayCondition_near: 0,
},
// type:'click'openHighlightcloseHighlight
highlight: {
label: {

View File

@ -65,7 +65,6 @@
createTime:new Date(),
id:0,
createUserId:"1",
},
rules: {
name: [

View File

@ -1,7 +1,7 @@
<template>
<div style="padding:24px;overflow-y:hidden;">
<el-tabs v-model="activeName">
<el-tab-pane label="" name="zhifa">
<el-tabs v-model="activeName" @tab-click="tabCHange">
<el-tab-pane label="护林员APP" name="feixian">
<div class="flex-column">
<el-row style="overflow-y: hidden;">
@ -58,6 +58,63 @@
</el-row>
</div>
</el-tab-pane>
<el-tab-pane label="飞控端APP" name="feikongduan">
<div class="flex-column">
<el-row style="overflow-y: hidden;">
<el-col :span="12" style="padding: 20px;border: 1px silver solid;margin-left: 10px">
<el-form ref="form" :model="form" label-width="80px" size="mini">
<el-form-item label="当前版本">
<span style="font-size:15px;font-weight:bold;color:#000;">{{currentAppInfo.edition}}</span>
</el-form-item>
<el-form-item label="版本号">
<el-input v-model="form.edition"></el-input>
</el-form-item>
<el-form-item label="项目名称">
<el-input v-model="form.project_name"></el-input>
</el-form-item>
<el-form-item size="mini">
<el-upload
size="mini"
class="upload-demo"
action="#"
drag
:limit="limit"
:on-preview="handlePreview"
:file-list="fileList"
:auto-upload="false"
:before-upload="beforeUpload"
:on-remove="handleRemove"
:on-exceed="handleExceed"
:on-change="handleChange"
:on-success="handleSuccess"
:on-error="handleError"
>
<i class="el-icon-upload" style="font-size:60px;line-height:0px;"></i>
<div class="el-upload__text">将APP文件拖到此处<em>点击上传</em></div>
</el-upload>
</el-form-item>
<el-form-item label="描述信息">
<el-input type="textarea" v-model="form.description"></el-input>
</el-form-item>
<el-form-item label="是否必须更新" label-width="120px">
<el-radio-group v-model="form.must_update" size="medium">
<el-radio border :label="1"></el-radio>
<el-radio border :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit"></el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
</el-tab-pane>
</el-tabs>
</div>
@ -72,7 +129,7 @@ export default {
data() {
return {
currentAppInfo:{},
activeName:"zhifa",
activeName:"feixian",
limit: 1,
fileList: [],
form: {
@ -95,8 +152,11 @@ export default {
this.getAppInfo();
},
methods: {
tabCHange(e){
this.getAppInfo();
},
getAppInfo(){
getMethodCommon("/FireCodeApp/GetUpdateFiles",{project:'feixian'}).then(res=>{
getMethodCommon("/FireCodeApp/GetUpdateFiles",{project:this.activeName}).then(res=>{
if(res.code == 200){
this.currentAppInfo = res.data;
this.form.project_name = res.data.project_name;

View File

@ -31,5 +31,8 @@ module.exports = {
symbolId: 'icon-[name]'
})
.end()
}
},
css: {
extract: false, // 禁用CSS提取
},
}