代码合并
6
.env.dev
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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": "天地图注记",
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 342 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 297 B |
|
After Width: | Height: | Size: 418 B |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ export default {
|
|||
}
|
||||
//定义一个延时器等待服务器响应,若超时,则关闭连接,重新请求server建立socket连接
|
||||
this.serverTimeoutObj = setTimeout(() => {
|
||||
window.websocket.close();
|
||||
// window.websocket.close();
|
||||
}, this.timeout);
|
||||
}, this.timeout);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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(){ // 获取所有管护范围
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
请先检测设备状态
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -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%;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@ export default {
|
|||
},
|
||||
visible: {
|
||||
handler(newVal, oldVal) {
|
||||
console.log('newVal11122',newVal)
|
||||
if(newVal){
|
||||
if(this.gridMap1){
|
||||
this.getListDatas()
|
||||
|
|
|
|||
|
|
@ -138,7 +138,6 @@ export default {
|
|||
distanceDisplayCondition_far: 10000,
|
||||
distanceDisplayCondition_near: 0,
|
||||
},
|
||||
|
||||
// 高亮时的样式(默认为鼠标移入,也可以指定type:'click'单击高亮),构造后也可以openHighlight、closeHighlight方法来手动调用
|
||||
highlight: {
|
||||
label: {
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@
|
|||
createTime:new Date(),
|
||||
id:0,
|
||||
createUserId:"1",
|
||||
|
||||
},
|
||||
rules: {
|
||||
name: [
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -31,5 +31,8 @@ module.exports = {
|
|||
symbolId: 'icon-[name]'
|
||||
})
|
||||
.end()
|
||||
}
|
||||
},
|
||||
css: {
|
||||
extract: false, // 禁用CSS提取
|
||||
},
|
||||
}
|
||||