Compare commits

...

2 Commits

Author SHA1 Message Date
徐景良 9466fd0f39 平邑县汇报后Bug修改 2023-09-10 19:21:04 +08:00
徐景良 038954eb17 代码合并 2023-08-22 08:27:09 +08:00
11 changed files with 205 additions and 87 deletions

View File

@ -17,3 +17,4 @@ VUE_APP_OIDC_SILENTREDIRECTURI = http://demo.openauth.me:1803/silent-renew-oidc.
VUE_APP_BASE_API = http://123.132.248.154:9231/api
VUE_APP_BASE_IMG_URL = http://123.132.248.154:9231

View File

@ -3,7 +3,7 @@
"gaodeApi": "4f992c089f9496201f6e4ea39ff3ab60",
"pingyixian":{
"appname":"平邑县森林火指挥调度系统",
"appname":"平邑县森林指挥调度系统",
"area":"平邑县",
"baseUrl":"http://123.132.248.154:9210",
"layerurl":"http://123.132.248.154:9236/applicationMars/getApplicationInfo/pingyixian",

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="author" content="山东慧创 http://www.hopetrytech.com ">
<link rel="icon" href="<%= BASE_URL %>sitelogo.jpg">
<title>林业防火平台</title>
<title>平邑县森林火灾指挥调度系统</title>
<style>
.popup-container{
text-align:left;

View File

@ -100,7 +100,7 @@
<videocall @endVideoCall="endVideoCall"></videocall>
</div>
<div class="monitor" style="width:100vw;height:100vh;position:fixed;top:0px;left:0px;" v-if="HKmonitorboxShow">
<div class="monitor" style="width:100vw;height:100vh;position:fixed;top:0px;left:0px;z-index:999999;" v-if="HKmonitorboxShow">
<div class="close-button" style="position:absolute;top: calc( 50% - 170px);left: calc( 50% + 200px);transform:translate(-50%,-50%);" @click="HKmonitorboxShow = false">
<i class='el-icon el-icon-close'></i>
</div>
@ -345,6 +345,8 @@ export default {
window.shuiyuan = this.shuiyuan;
window.delFirePoint = this.delFirePoint
window.delTaskPoint = this.delTaskPoint;
},
methods: {
closeWaterlayer(){
@ -421,8 +423,11 @@ export default {
<div class="data-value"><span id="lablYeWei" class="label-num">${item.taskTime}</span><span class="label-unit"></span>
</div>
</div>
<div class="data-li">
<div class="data-value">
<span id="lablCSFM2" onclick="delTaskPoint(${item.id})" class="label-tag data-value-status-3" title="删除任务点">删除任务点</span>
</div>
</div>
</div>
</div>
</div>
@ -612,6 +617,8 @@ export default {
},
//
renyuan(item){
this.currentInfo.lng = item[0];
this.currentInfo.lat = item[1];
if(this.personVisible){
this.personVisible = false
}else{
@ -621,11 +628,7 @@ export default {
//
shuiyuan(item){
this.waterCenter = item;
if(this.waterVisible){
this.waterVisible = false
}else{
this.waterVisible = true;
}
this.waterVisible = true;
},
//
delFirePoint(id){
@ -642,6 +645,26 @@ export default {
message:"删除成功"
})
this.getFirePointList();
this.waterVisible = false;
}
})
},
//
delTaskPoint(id){
axios({
method:"post",
url:BASE_URL+"/FireManagement/DeleteFireTask",
data:[id],
headers:{
'X-Token':localStorage.getItem("X-Token")
}
}).then(res=>{
if(res.data.code==200){
this.$message({
type:"success",
message:"删除成功"
})
this.getTaskList();
}
})
},
@ -762,7 +785,7 @@ export default {
}
this.personVisible = true
this.goodsVisible = false
this.waterVisible = false
}
},
// {
@ -1218,8 +1241,11 @@ export default {
z-index:1999;
}
.uav{
width:250px;
height:200px;
position: fixed;
right:60px;
bottom:100px;
width:350px;
height:300px;
float:left;
margin-right:15px;
}

View File

@ -17,6 +17,7 @@
</template>
<script>
//
import axios from "axios";
export default {
name: 'monitorbox',
@ -51,6 +52,7 @@ import axios from "axios";
</script>
<style scoped>
.box{
width: 100%;
height: 100%;
@ -100,6 +102,8 @@ import axios from "axios";
.table-body .item:nth-child(2n){
background:#00ffee50;
}
/* 
*/
.table-body .item div{
float:left;

View File

@ -85,7 +85,7 @@
listData:[],
allData:[],
fireLngLat:'',
distanceradio: 3,
distanceradio: 5,
personnelGraphicLayer: null,
graphicLayerArr: [],
areaName: localStorage.getItem("areaName"),
@ -97,6 +97,7 @@
watch:{
fireData:{
handler(newVal,oldVal) {
this.fireLngLat = [newVal.lng,newVal.lat]
this.getListData();
},

View File

@ -104,6 +104,7 @@
<script>
import axios from 'axios'
import { postMethodCommon,getMethodCommon } from '@/api/common.js';
let BASE_API = process.env.VUE_APP_BASE_API;
export default {
name: 'setting',
props:['globalmap','type','clickdata'],
@ -352,55 +353,34 @@ export default {
//
addfireDetail(){
if(this.addfireDetailReqLock){
return false
}
this.addfireDetailReqLock = true
let addfireDetailReqLock = 0
try{
postMethodCommon("/FireManagement/AddFireClueInfo",this.setUpData).then(res =>{
if(res.code == 200){
this.$message({
message: res.msg,
type: 'success'
});
}else{
this.$message({
message: res.msg,
type: 'error'
});
}
let param = this.setUpData
if(this.fireGraphicLayer == null){
this.fireGraphicLayer = new mars3d.layer.GraphicLayer();
this.globalmap.addLayer(this.fireGraphicLayer);
}
// let graphic = new mars3d.graphic.BillboardEntity({
// position: [param.lng,param.lat],
// style: {
// image: "img/markfire.png",
// scale: 0.8,
// horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
// verticalOrigin: Cesium.VerticalOrigin.MIDDLE,
// distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 200000), //
// scaleByDistance: new Cesium.NearFarScalar(1000, 1.0, 200000, 0.2),
// clampToGround: true,
// visibleDepth: false
// },
// attr: { remark: "11" },
// pointerEvents: true
// })
// this.fireGraphicLayer.addGraphic(graphic);
this.firedialogFormVisible = false
this.$emit('close')
this.addfireDetailReqLock = false
})
}catch{
this.addfireDetailReqLock = false
}
axios({
method:"post",
url:BASE_API+"/FireManagement/AddFireClueInfo",
data:this.setUpData,
headers:{
"X-Token":localStorage.getItem("X-Token")
}
}).then(res=>{
if(res.data.code == 200){
this.$message({
message: res.data.msg,
type: 'success'
});
this.$emit('close')
this.addfireDetailReqLock = false
this.firedialogFormVisible = false;
}else{
this.$message({
message: res.data.msg,
type: 'error'
});
}
})
},
//
addTaskClick(){

View File

@ -405,4 +405,16 @@
::v-deep .el-table .el-table__body tr.current-row>td {
background-color: rgba(255, 255, 255, .1) !important;
}
::v-deep .el-table, .el-table__expanded-cell{
background:none;
}
::v-deep .el-table td, .el-table th.is-leaf{
border:0px;
}
::v-deep .el-table th, .el-table tr{
background:none;
}
</style>

View File

View File

@ -1,17 +1,17 @@
<template>
<div class="box">
<div class="box-title">无人机巡航</div>
<div class="video-container">
<div class="radar"></div>
</div>
<div class="box-container">
<!-- 没有无人机提示 -->
<div class="item" onclick="">
<span>DJ Mavic 2 Air</span>
<span>${item.createuser}</span>
<span class="video-icon" data-uavname="${item.createuser}" data-phone="${item.createuser}">
<img src="/img/video-icon.png" onclick="">
</span>
<span class="uav-icon" data-uavname="${item.createuser}" data-phone="${item.createuser}">
<img src="/img/uav-icon.png" alt="" >
</span>
<span>DJ Mavic 2 Air</span>
</div>
<div class="none-uav">当前暂无无人机巡航</div>
@ -36,7 +36,7 @@
this.initWebSocket();
},
methods:{
// websocket
initWebSocket(){
if ("WebSocket" in window) {
let _this = this;
@ -57,8 +57,10 @@
_this.getUavData([]);
}
};
this.myWebSocket.onclose = function () { //
_this.websocketReconnect();
this.myWebSocket.onclose = function () { //
// jianshougaoshangqingcao
_this.websocketReconnect();
};
}else {
this.$message({
@ -67,6 +69,7 @@
})
}
},
// websocket
websocketReconnect(){
if (this.lockReconnect) { //
return;
@ -108,24 +111,39 @@
<style scoped>
.box{
width:250px;
height:200px;
width:100%;
height:100%;
background-image: url(/img/goods-pingyixian.png);
background-size:100% 100%;
text-align: left;
}
.box-title{
width:100%;
height:50px;
line-height:50px;
height:40px;
line-height:40px;
text-indent:20px;
color: #00FFF0;
text-align:center;
color: #fff;
}
.video-container{
width:100%;
height: calc( 100% - 100px);
}
.box-container{
width:100%;
height: calc( 100% - 50px);
height: 40px;
}
.box-container .item{
width:100px;
height:40px;
float:left;
}
.box-container .item img{
width:32px;
height:32px;
}
.none-uav{
width:100%;
height:100%;
@ -133,4 +151,65 @@
color:#fff;
line-height:100px;
}
*{
/* 初始化 取消页面元素的内外边距 */
margin: 0;
padding: 0;
}
.radar{
width: 200px;
height: 200px;
background:
/* 重复的径向渐变 圈圈 */
repeating-radial-gradient(
transparent 0,
transparent 30px,
darkcyan 30px,
darkcyan 32px
),
/* 线性渐变 中间横线 */
linear-gradient(
transparent 49.75%,
darkcyan 49.75%,
darkcyan 50.25%,
transparent 50.25%
),
/* 线性渐变 中间竖线 */
linear-gradient(
90deg,
transparent 49.75%,
darkcyan 49.75%,
darkcyan 50.25%,
transparent 50.25%
);
position: relative;
border-radius: 50%;
}
.radar::before{
content: "";
position: absolute;
width: calc(200px / 2);
height: calc(200px / 2);
background: linear-gradient(
45deg,
rgba(0,0,0,0) 50%,
rgba(0,255,255,1) 100%
);
border-radius: 100% 0 0 0;
top: calc(48px / 2);
left: calc(48px / 2);
/* 执行动画: 动画名称 时长 线性的 无限次播放 */
animation: scanning 5s linear infinite;
/* 设置旋转元素的基点位置 */
transform-origin: 100% 100%;
}
/* 定义动画 */
@keyframes scanning {
to{
transform: rotate(360deg);
}
}
</style>

View File

@ -3,18 +3,21 @@
<div class="box-title">在线人员</div>
<div class="box-container">
<div class="table-header">
<div>姓名</div>
<div>类型</div>
<div style="width:15%;">姓名</div>
<div style="width:15%;">类型</div>
<div>电话</div>
<div>操作</div>
<div>单位</div>
<div style="width:30%;">操作</div>
</div>
<div class="table-body">
<div class="item" v-for="(item,index) in list" :key="index">
<div>{{item.name}}</div>
<div>{{item.type}}</div>
<div style="width:15%;">{{item.name}}</div>
<div style="width:15%;">{{item.type}}</div>
<div>{{item.phone}}</div>
<div>
<el-button type="primary" size="mini" @click="flyToPosition([item.lng,item.lat])"></el-button>
<div>{{item.unit}}</div>
<div style="width:30%;">
<el-button type="primary" size="mini" @click="flyToPosition([item.lng,item.lat])" icon="el-icon-location-outline"></el-button>
<el-button type="primary" size="mini" @click="videoCall(item.phone)" icon="el-icon-video-camera"></el-button>
</div>
</div>
</div>
@ -30,19 +33,31 @@ import axios from "axios";
name: 'monitorbox',
data(){
return{
list:[]
list:[
]
}
},
created(){
this.getMonitorList();
// this.getMonitorList();
},
mounted(){
this.initWebSocket();
},
methods:{
videoCall(phone){
let userId = localStorage.getItem("userName") || ''
if(userId && phone){
let wind = window.open("https://ssl.hopetrytech.com:9233/#/?userID="+userId+"&callUserID="+phone, "视频通话", "location=no,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,width=640,height=460");
wind.onload = function(){
wind.document.title = "视频通话";
}
}
},
flyToPosition(lngLat){
this.globalmap.flyToPoint(lngLat,{radius:400,"pitch":-90});
},
showLCmonitorbox(lng,lat){
// this.globalMap.fl
},
@ -125,7 +140,7 @@ import axios from "axios";
}
.table-header div{
float:left;
width:25%;
width:20%;
border-bottom:1px dashed #008cff;
padding-bottom:8px;
}
@ -151,7 +166,7 @@ import axios from "axios";
.table-body .item div{
float:left;
width:25%;
width:20%;
color:#eee;
overflow: hidden;
height:36px;