Compare commits

..

22 Commits

Author SHA1 Message Date
吕天方 7b01fb295e 车辆轨迹的车辆编号隐藏
5 months ago
吕天方 0693b3a03d 修改车辆图标、车载视频接口换成自己的、搜索打开弹框时间调大一秒钟
5 months ago
吕天方 b29b5cfefe 车载监控及轨迹、事件图层更换接口
5 months ago
吕天方 a6e0887676 左上角已受理事件使用status等于3的值、account值写固定的值"superAdmin"
6 months ago
吕天方 fcc9e2eb19 存入用户的account
6 months ago
吕天方 141f0f504e 人员行程打开搜索当天行程、滚动条样式、去除车辆假数据显示的在线人数
6 months ago
吕天方 a3fcbc7cfd 强制观摩+1
6 months ago
吕天方 1266f214ce 强制观摩404重新请求打开接口播放
6 months ago
吕天方 09dcf07a4c 网页刷新/浏览器关闭调用强制观摩关闭接口
6 months ago
吕天方 04da9e38de 人员在线情况展开列表关闭之后显示面包屑
6 months ago
吕天方 11a5bf37a8 强制观摩关闭接口新增参数
6 months ago
吕天方 3425b6f591 强制观摩开关改回内网地址
7 months ago
吕天方 8b01d45a7d 强制观摩替换bjh请求地址
7 months ago
吕天方 7c3c208123 修改内网地址
7 months ago
吕天方 058b391977 修改看点模拟登录密码
8 months ago
吕天方 31fd96aafb 视频监控传参更换
8 months ago
吕天方 973a72f784 事件坐标更改回来
9 months ago
吕天方 cea0816322 监控视频走nginx格式
9 months ago
吕天方 53149cadf4 Logo、在线人员离线人员的图标,暂改为本地图片⌈ 取消请求接口获取 ⌋
9 months ago
吕天方 9933b47bad 修改展开人员可以返回到中队
9 months ago
吕天方 e22ce798bd prodLv修改地址
9 months ago
吕天方 444756bc7f 修改封板对应marster分支的地址
9 months ago

@ -2,7 +2,7 @@
# @Author: 张涛
# @Date: 2023-11-09 18:29:41
# @LastEditors: JC9527
# @LastEditTime: 2024-04-01 10:17:45
# @LastEditTime: 2024-05-15 13:40:14
# @FilePath: \JiangningUrbanManagePc\.env.development
###
# 页面标题
@ -14,9 +14,9 @@ ENV = 'development'
# 若依管理系统/开发环境
# /dev-api
# VUE_APP_BASE_API = 'http://39.101.188.84:9037'
VUE_APP_BASE_API = 'https://t-jn-city.jssp-park.com/bjh-admin-server'
VUE_APP_BASE_API1 = 'https://t-jn-city.jssp-park.com/process-server'
VUE_APP_BASE_API2 = 'https://t-jn-city.jssp-park.com/admin-server/api/webapp'
VUE_APP_BASE_API = 'http://10.236.2.28:54567/bjh-admin-server'
VUE_APP_BASE_API1 = 'http://10.236.2.28:54567/process-server'
VUE_APP_BASE_API2 = 'http://10.236.2.28:54567/admin-server/api/webapp'
# VUE_APP_BASE_API = 'http://192.168.0.112:9037'
# 路由懒加载

@ -1,11 +1,3 @@
###
# @Descripttion:
# @version:
# @Author: JC9527
# @Date: 2024-01-09 23:08:15
# @LastEditors: JC9527
# @LastEditTime: 2024-05-13 18:40:59
###
# 页面标题
VUE_APP_TITLE = 城市精细化管理监测主题
@ -14,6 +6,6 @@ ENV = 'production'
# 若依管理系统/生产环境
# VUE_APP_BASE_API = 'http://39.101.188.84:9037'
VUE_APP_BASE_API = 'https://t-jn-city.jssp-park.com/bjh-admin-server'
VUE_APP_BASE_API1 = 'https://t-jn-city.jssp-park.com/process-server'
VUE_APP_BASE_API2 = 'https://t-jn-city.jssp-park.com/admin-server/api/webapp'
VUE_APP_BASE_API = 'http://10.236.2.28:54567/bjh-admin-server'
VUE_APP_BASE_API1 = 'http://10.236.2.28:54567/process-server'
VUE_APP_BASE_API2 = 'http://10.236.2.28:54567/admin-server/api/webapp'

@ -4,7 +4,7 @@
* @Author: JC9527
* @Date: 2024-01-09 23:11:58
* @LastEditors: JC9527
* @LastEditTime: 2024-03-06 18:56:29
* @LastEditTime: 2024-09-05 13:53:37
*/
import request from "@/utils/request2"
@ -19,18 +19,20 @@ export function getTrend(params) {
// 事件概况统计
export function summarystat() {
export function summarystat(params) {
return request({
url: "/event/summary/stat",
method:'get',
params
})
}
// 任务概况分类统计
export function tasksummarystat() {
export function tasksummarystat(params) {
return request({
url: "/task/summary/stat",
method:'get',
params
})
}
@ -90,4 +92,38 @@ export function statregion(params){
},
params
})
}
// 车载监控视频地址获取
export function previewURLs(params){
return request({
url: "/videoSpnl/previewURLs",
method:'get',
headers:{
isToken:false,
},
params
})
}
// 车辆行程轨迹获取
export function carTrack(params) {
return request({
url: "/event/workboatlog/loginfo",
method:'get',
headers:{
isToken:false,
},
params
})
}
// 今日巡查事件
export function listpatrol(params) {
return request({
url: "/event/summary/listpatrol",
method:'get',
params
})
}

@ -8,6 +8,7 @@ import request from "@/utils/request"
// 强制观摩
export function videoSurveillance(data) {
return request({
// baseURL: "https://bjh.jndz.cn/bjh-admin-server",
url: "/jn/dockingEq/videoSurveillance",
method:'post',
data

@ -184,7 +184,8 @@ aside {
}
}
//
::-webkit-scrollbar {
width: 0 !important;
height: 0;
}
// ::-webkit-scrollbar {
// width: 0 !important;
// height: 0;
// }

@ -125,6 +125,7 @@
background-image: url("../images/popup/popup.png");
background-size: 100% 100%;
z-index: 600;
overflow: hidden;
.person-title {
padding: 9px 10px 0 16px;
@ -231,6 +232,7 @@
.car-popup {
width: 262px;
height: 138px;
overflow: hidden;
background-image: url("../images/popup/popup.png");
background-size: 100% 100%;
z-index: 600;
@ -296,21 +298,43 @@
}
}
.btn {
margin-top: 19px;
background-image: url('../images/popup/icon1btn.png');
background-size: 100% 100%;
width: 100%;
height: 30px;
// .btn {
// margin-top: 19px;
// background-image: url('../images/popup/icon1btn.png');
// background-size: 100% 100%;
// width: 100%;
// height: 30px;
// display: flex;
// align-items: center;
// justify-content: center;
// font-size: 14px;
// font-family: Source Han Sans CN-Regular, Source Han Sans CN;
// font-weight: 400;
// color: #D3EEF2;
// line-height: 20px;
// cursor: pointer;
// }
.btns {
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
font-weight: 400;
color: #D3EEF2;
line-height: 20px;
cursor: pointer;
justify-content: space-between;
margin-top: 19px;
.btn {
background-image: url("../images/popup/icon2btn.png");
background-size: 100% 100%;
width: 91px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
font-weight: 400;
color: #D3EEF2;
line-height: 20px;
cursor: pointer;
}
}
}
}

@ -4,7 +4,7 @@
* @Author: JC9527
* @Date: 2024-01-09 23:08:15
* @LastEditors: JC9527
* @LastEditTime: 2024-05-14 09:49:58
* @LastEditTime: 2024-09-05 17:31:00
*/
import router from './router'
import store from './store'
@ -25,71 +25,52 @@ router.beforeEach((to, from, next) => {
if(localStorage.getItem('accessToken')) {
next()
NProgress.done()
} else {
if (window.location.href.includes("code=")) {
var reg = new RegExp(/[?&]code=([^&#]+)/);
var c = window.location.href.match(reg);
const code = c && c[1];
getAccesstoken({code:code}).then(res=>{
// console.log(res,"res")
// setAccessToken(res.data.accessToken)
localStorage.setItem('accessToken',res.data.accessToken)
let url = window.location.href;
var modifiedUrl = url.replace(/[\?&](code)=.*?(#\/|$)/g, '');
// console.log(modifiedUrl,'modifiedUrl');
window.location.href = modifiedUrl;
// next()
NProgress.done()
// return getUserinfo({accessToken:res.data.accessToken})
})
// .then(res=>{
// localStorage.setItem('AuserInfo', JSON.stringify(el.data))
// })
} else {
location.href = "https://t-jn-city.jssp-park.com/bjh-admin/"
}
} else if (window.location.href.includes("code=")) {
var reg = new RegExp(/[?&]code=([^&#]+)/);
var c = window.location.href.match(reg);
const code = c && c[1];
getAccesstoken({code:code}).then(res=>{
// console.log(res,"res")
// setAccessToken(res.data.accessToken)
localStorage.setItem('accessToken',res.data.accessToken)
// return getUserinfo({ accessToken: res.data.accessToken })
let url = window.location.href;
var modifiedUrl = url.replace(/[\?&](code)=.*?(#\/|$)/g, '');
// console.log(modifiedUrl,'modifiedUrl');
window.location.href = modifiedUrl;
// next()
NProgress.done()
})
// .then(el=>{
// // setToken(el.data.token)
// // localStorage.setItem('account',el.data.account)
// })
// .then(res=>{
// localStorage.setItem('AuserInfo', JSON.stringify(el.data))
// })
}
// next()
// if (getToken()) {
// else if(getToken()) {
// to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
// /* has token*/
// if (to.path === '/login') {
// next({ path: '/' })
// NProgress.done()
// } else {
// console.log('store.getters.roles',store.getters.roles)
// if (store.getters.roles.length === 0) {
// isRelogin.show = true
// // 判断当前用户是否已拉取完user_info信息
// store.dispatch('GetInfo').then(() => {
// isRelogin.show = false
// store.dispatch('GenerateRoutes').then(accessRoutes => {
// // 根据roles权限生成可访问的路由表
// router.addRoutes(accessRoutes) // 动态添加可访问路由表
// next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
// })
// }).catch(err => {
// store.dispatch('LogOut').then(() => {
// Message.error(err)
// next({ path: '/' })
// })
// })
// } else {
// if (store.getters.roles.length === 0) {
// // isRelogin.show = true
// // 判断当前用户是否已拉取完user_info信息
// store.dispatch('GetInfo').then(() => {
// isRelogin.show = false
// next()
// }
// }
// } else {
// // 没有token
// if (whiteList.indexOf(to.path) !== -1) {
// // 在免登录白名单,直接进入
// next()
// NProgress.done()
// }).catch(err => {
// })
// } else {
// next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
// next()
// NProgress.done()
// }
// }
// }
else {
location.href = "http://10.236.2.28:54567/bjh-admin/"
}
})
router.afterEach(() => {

@ -90,7 +90,7 @@ service.interceptors.response.use(res => {
// store.dispatch('LogOut').then(() => {
// location.href = '/#/login';
// })
location.href = "https://t-jn-bjh-admin.jsszkd.com/"
location.href = "http://10.236.2.28:54567/bjh-admin/"
}).catch(() => {
isRelogin.show = false;
});

@ -94,7 +94,7 @@ service.interceptors.response.use(res => {
// store.dispatch('LogOut').then(() => {
// location.href = '/#/login';
// })
location.href = "https://t-jn-bjh-admin.jsszkd.com/"
location.href = "http://10.236.2.28:54567/bjh-admin/"
}).catch(() => {
isRelogin.show = false;
});

@ -91,7 +91,7 @@ service.interceptors.response.use(res => {
// store.dispatch('LogOut').then(() => {
// location.href = '/#/login';
// })
location.href = "https://t-jn-bjh-admin.jsszkd.com/"
location.href = "http://10.236.2.28:54567/bjh-admin/"
}).catch(() => {
isRelogin.show = false;
});

@ -4,7 +4,7 @@
* @Author: JC9527
* @Date: 2023-08-15 09:44:13
* @LastEditors: JC9527
* @LastEditTime: 2024-04-03 15:07:31
* @LastEditTime: 2024-09-05 17:30:07
-->
<template>
<div class="left-wai-box">
@ -26,7 +26,7 @@
<div class="list-bottom">
<img src="@/assets/images/incident.png" alt="">
<div class="list-num">{{ Fnsummarystat(MYsummarystatdata.records ? MYsummarystatdata.records.filter(item =>
item.status == 1) : []) }}</div>
item.status == 3) : []) }}</div>
</div>
</div>
<div class="lists">
@ -82,7 +82,7 @@
</div>
<div class="item lfet-list-two" :style="itemOne">
<title-box title="车辆在线情况"></title-box>
<map-number title="在线车辆总数" :onLine="10" :sum="18" type="辆" :numberArray="vehicleArray" :height="oneHeight"
<map-number title="在线车辆总数" :onLine="0" :sum="18" type="辆" :numberArray="vehicleArray" :height="oneHeight"
:id="3" v-on="$listeners"></map-number>
</div>
</div>
@ -208,6 +208,7 @@ export default {
mapLoading:false,
personLoading:false,
isBreadcrumb:true,
account:"",
}
},
props: ['personLine', 'carLine'],
@ -300,11 +301,11 @@ export default {
MYsummarystat() {
//
summarystat().then(res => {
summarystat({account:"superAdmin"}).then(res => {
if (res.code == 200) this.MYsummarystatdata = res.data
})
//
tasksummarystat().then(res => {
tasksummarystat({account:"superAdmin"}).then(res => {
if (res.code == 200) this.tasksummarystatdata = res.data
})
},
@ -332,6 +333,7 @@ export default {
offUnfold(){
this.isUnfold = false;
this.isPerson = true;
this.isBreadcrumb = true;
this.breadcrumb = [];
this.unfoldInput = "";
},
@ -386,9 +388,13 @@ export default {
this.deptArr = item[i].children;
return;
} else {
let result = this.recursion(item[i].children,name);
if (result) {
return result;
if(item[i].children) {
let result = this.recursion(item[i].children,name);
if (result) {
return result;
} else {
continue;
}
}
}
}
@ -434,11 +440,9 @@ export default {
this.getDomHeight();
this.getEvent();
this.getOnline();
},
created() {
this.account = localStorage.getItem('account')
this.MYsummarystat()
}
},
}
</script>
<style lang="scss" scoped>

@ -4,7 +4,7 @@
* @Author: JC9527
* @Date: 2024-01-09 23:08:15
* @LastEditors: JC9527
* @LastEditTime: 2024-05-14 10:07:33
* @LastEditTime: 2024-09-14 15:28:34
-->
<template>
<div class="map-main">
@ -186,7 +186,11 @@
<div class="name">{{carInfo.info.carName}}</div>
<div class="position">{{carInfo.info.carCode}}</div>
</div>
<div class="btn" @click="travelPath()"></div>
<!-- <div class="btn" @click="travelPath()"></div> -->
<div class="btns">
<div class="btn" @click="travelPath()"></div>
<div class="btn" @click="watchCarVideo"></div>
</div>
</div>
</div>
</el-amap-info-window>
@ -433,7 +437,10 @@
<!-- 事件指派人员 -->
<crew-assign ref="crewAssign"></crew-assign>
<!-- <video-wall ref="videoWall"></video-wall> -->
<!-- 监控视频上墙 -->
<alone-video ref="aloneVideo"></alone-video>
<!-- 车载视频上墙 -->
<car-video ref="carVideo"></car-video>
<!-- 商铺详情 -->
<shop ref="shop" width="50%" title="商铺详情查看" />
<!-- 新增事件 -->
@ -471,14 +478,14 @@ import point from "@/utils/mapJson/point.json";
import jiangninggeo from "@/utils/mapJson/jiangningjingkaiqugeo.json";
//
import OneGJ02 from "@/utils/mapJson/1GJ02.json";
import TwoGJ02 from "@/utils/mapJson/2GJ02.json";
import ThreeGJ02 from "@/utils/mapJson/3GJ02.json";
import FourGJ02 from "@/utils/mapJson/4GJ02.json";
import kaifaqu from "@/utils/mapJson/开发区空港开发区GJ02.json";
import ruanjianyuan from "@/utils/mapJson/开发区软件园GJ02.json";
// import OneGJ02 from "@/utils/mapJson/1GJ02.json";
// import TwoGJ02 from "@/utils/mapJson/2GJ02.json";
// import ThreeGJ02 from "@/utils/mapJson/3GJ02.json";
// import FourGJ02 from "@/utils/mapJson/4GJ02.json";
// import kaifaqu from "@/utils/mapJson/GJ02.json";
// import ruanjianyuan from "@/utils/mapJson/GJ02.json";
//
import gridding from "@/utils/mapJson/中队小网格.json"
// import gridding from "@/utils/mapJson/.json"
// import zhongdianluduan from "@/utils/mapJson/zhongdianluduan.json";
// import zhongdianquyu from "@/utils/mapJson/zhongdianquyu.json";
@ -491,12 +498,13 @@ import personageTrack from "../../components/personagetrack/index.vue";
import personageTask from "../../components/personageTask/index.vue";
import crewAssign from "../../components/crewAssign/index.vue";
import videoWall from "../../components/videoWall/index.vue";
import carVideo from "../../components/carVideo/index.vue";
import shop from "../../components/shop/index.vue";
import aloneVideo from "../../components/video/index.vue"
import newEvent from "../../components/newEvent/index.vue"
// import jiangningwangge from "@/utils/data/.json";
import weilan from "@/utils/data/围栏1.json";
// import weilan from "@/utils/data/1.json";
import { getCenter } from "@/utils/amap"
import {
regionalsettings,
@ -514,11 +522,15 @@ import {
getUserByImei,
dwgjList
} from "@/api/bigScreenApi";
import {
previewURLs,
listpatrol
} from "@/api/bigScreenApi/eventApi.js"
import {
robotLogin,
ViewListPage
} from "@/api/bigScreenApi/robot.js"
import { setRobotToken } from '@/utils/auth'
// import { setRobotToken } from '@/utils/auth'
import flvjs from "flv.js";
import axios from "axios";
@ -533,7 +545,8 @@ export default {
shop,
aloneVideo,
newEvent,
personageTask
personageTask,
carVideo
},
data() {
return {
@ -622,27 +635,22 @@ export default {
onIcon:null,
offIcon:null,
videoPoint:[],
videoUrl:"",
};
},
methods: {
// /
beforeunloadHandler(event){
if(this.destID && this.imei) {
if(this.personInfo.info.userId && this.personInfo.info.imei) {
this._beforeUnload_time = new Date().getTime();
videoSurveillance({destId:this.destID,imei:this.imei,msgType:0}).then(res=>{
this.destID = "";
this.imei = "";
})
videoSurveillance({destId:this.personInfo.info.userId,imei:this.personInfo.info.imei,msgType:0}).then(res=>{})
}
},
unloadHandler(e){
this._gap_time = new Date().getTime()-this._beforeUnload_time;
if(this._gap_time <= 5){
if(this.destID && this.imei) {
videoSurveillance({destId:this.destID,imei:this.imei,msgType:0}).then(res=>{
this.destID = "";
this.imei = "";
})
if(this.personInfo.info.userId && this.personInfo.info.imei) {
videoSurveillance({destId:this.personInfo.info.userId,imei:this.personInfo.info.imei,msgType:0}).then(res=>{})
}
}
},
@ -659,149 +667,7 @@ export default {
this.layers.text = new AMap.OverlayGroup(); //
this.layers.text1 = new AMap.OverlayGroup(); //
this.layers.markers = new AMap.OverlayGroup(); // markers
// this.layers.layer2.setzIndex(10);
// this.layers.layer3.setzIndex(9);
this.$nextTick(() => {
// var geojson1 = new AMap.Polygon({
// path:OneGJ02.features[0].geometry.coordinates[0][0],
// strokeColor: '#00C5EC',
// fillColor: '#00AEFF',
// fillOpacity: 0.4,
// // fillOpacity: 0.3,
// editable:false,
// visible:true,
// })
// var text1 = new AMap.Text({
// // position: [element.properties.CENTERX,element.properties.CENTERY],
// position: getCenter(OneGJ02.features[0].geometry.coordinates[0][0]),
// anchor: 'bottom-center',
// text: OneGJ02.features[0].properties.NAME,
// style:{
// 'font-size': '16px',
// 'font-weight': 'bold',
// 'text-align': 'center',
// 'color': '#00AEFF',
// 'text-shadow': '0px 1px 0px rgba(0,0,0,0.3)',
// 'white-space': 'nowrap',
// },
// });
// var geojson2 = new AMap.Polygon({
// path:TwoGJ02.features[0].geometry.coordinates[0][0],
// strokeColor: '#00C5EC',
// fillColor: '#00AEFF',
// fillOpacity: 0.4,
// // fillOpacity: 0.3,
// editable:false,
// visible:true,
// })
// var text2 = new AMap.Text({
// // position: [element.properties.CENTERX,element.properties.CENTERY],
// position: getCenter(TwoGJ02.features[0].geometry.coordinates[0][0]),
// anchor: 'bottom-center',
// text: TwoGJ02.features[0].properties.NAME,
// style:{
// 'font-size': '16px',
// 'font-weight': 'bold',
// 'text-align': 'center',
// 'color': '#00AEFF',
// 'text-shadow': '0px 1px 0px rgba(0,0,0,0.3)',
// 'white-space': 'nowrap',
// },
// });
// var geojson3 = new AMap.Polygon({
// path:ThreeGJ02.features[0].geometry.coordinates[0][0],
// strokeColor: '#00C5EC',
// fillColor: '#00AEFF',
// fillOpacity: 0.4,
// // fillOpacity: 0.3,
// editable:false,
// visible:true,
// })
// var text3 = new AMap.Text({
// // position: [element.properties.CENTERX,element.properties.CENTERY],
// position: getCenter(ThreeGJ02.features[0].geometry.coordinates[0][0]),
// anchor: 'bottom-center',
// text: ThreeGJ02.features[0].properties.NAME,
// style:{
// 'font-size': '16px',
// 'font-weight': 'bold',
// 'text-align': 'center',
// 'color': '#00AEFF',
// 'text-shadow': '0px 1px 0px rgba(0,0,0,0.3)',
// 'white-space': 'nowrap',
// },
// });
// var geojson4 = new AMap.Polygon({
// path:FourGJ02.features[0].geometry.coordinates[0][0],
// strokeColor: '#00C5EC',
// fillColor: '#00AEFF',
// fillOpacity: 0.4,
// // fillOpacity: 0.3,
// editable:false,
// visible:true,
// })
// var text4 = new AMap.Text({
// // position: [element.properties.CENTERX,element.properties.CENTERY],
// position: getCenter(FourGJ02.features[0].geometry.coordinates[0][0]),
// anchor: 'bottom-center',
// text: FourGJ02.features[0].properties.NAME,
// style:{
// 'font-size': '16px',
// 'font-weight': 'bold',
// 'text-align': 'center',
// 'color': '#00AEFF',
// 'text-shadow': '0px 1px 0px rgba(0,0,0,0.3)',
// 'white-space': 'nowrap',
// },
// });
// var geojson5 = new AMap.Polygon({
// path:kaifaqu.features[0].geometry.coordinates[0][0],
// strokeColor: '#00C5EC',
// fillColor: '#00AEFF',
// fillOpacity: 0.4,
// // fillOpacity: 0.3,
// editable:false,
// visible:true,
// })
// var text5 = new AMap.Text({
// // position: [element.properties.CENTERX,element.properties.CENTERY],
// position: getCenter(kaifaqu.features[0].geometry.coordinates[0][0]),
// anchor: 'bottom-center',
// text: kaifaqu.features[0].properties.NAME,
// style:{
// 'font-size': '16px',
// 'font-weight': 'bold',
// 'text-align': 'center',
// 'color': '#00AEFF',
// 'text-shadow': '0px 1px 0px rgba(0,0,0,0.3)',
// 'white-space': 'nowrap',
// },
// });
// var geojson6 = new AMap.Polygon({
// path:ruanjianyuan.features[0].geometry.coordinates[0][0],
// strokeColor: '#00C5EC',
// fillColor: '#00AEFF',
// fillOpacity: 0.4,
// // fillOpacity: 0.3,
// editable:false,
// visible:true,
// })
// var text6 = new AMap.Text({
// // position: [element.properties.CENTERX,element.properties.CENTERY],
// position: getCenter(ruanjianyuan.features[0].geometry.coordinates[0][0]),
// anchor: 'bottom-center',
// text: ruanjianyuan.features[0].properties.NAME,
// style:{
// 'font-size': '16px',
// 'font-weight': 'bold',
// 'text-align': 'center',
// 'color': '#00AEFF',
// 'text-shadow': '0px 1px 0px rgba(0,0,0,0.3)',
// 'white-space': 'nowrap',
// },
// });
levelQywg({level:1}).then(res=>{
let W = [];
@ -843,21 +709,6 @@ export default {
this.wanggeData = res.data;
})
// this.layers.layer.addOverlay(geojson1);
// this.layers.text.addOverlay(text1);
// this.layers.layer.addOverlay(geojson2);
// this.layers.text.addOverlay(text2);
// this.layers.layer.addOverlay(geojson3);
// this.layers.text.addOverlay(text3);
// this.layers.layer.addOverlay(geojson4);
// this.layers.text.addOverlay(text4);
// this.layers.layer.addOverlay(geojson5);
// this.layers.text.addOverlay(text5);
// this.layers.layer.addOverlay(geojson6);
// this.layers.text.addOverlay(text6);
this.map.add(this.layers.layer);
this.map.add(this.layers.text);
map.setFitView();
@ -974,11 +825,12 @@ export default {
//
_personRenderMarker(context){
let imgSrc
if(this.onIcon && this.offIcon){
imgSrc = context.data[0].imgSrc == '1' ? this.onIcon : this.offIcon
} else {
imgSrc = context.data[0].imgSrc == '1' ? require("../../../assets/images/icon/icon1.png") : require("../../../assets/images/icon/offLine1.png")
}
// if(this.onIcon && this.offIcon){
// imgSrc = context.data[0].imgSrc == '1' ? this.onIcon : this.offIcon
// } else {
// imgSrc = context.data[0].imgSrc == '1' ? require("../../../assets/images/icon/icon1.png") : require("../../../assets/images/icon/offLine1.png")
// }
imgSrc = context.data[0].imgSrc == '1' ? require("../../../assets/images/icon/icon1.png") : require("../../../assets/images/icon/offLine1.png")
var content = `<div class="markerStyles"><div class="marker-Text" style="width:${context.data[0].text.length * 15}px">${context.data[0].text}</div><img src="${imgSrc}" alt=""></div>`;
var offset = new AMap.Pixel(-32.5, -48.5);
context.marker.setContent(content);
@ -1015,7 +867,7 @@ export default {
context.marker.setContent(content)
context.marker.setOffset(offset)
context.marker.on('click',(ev)=>{
this.carInfo.position = context.data[0].position;
this.carInfo.position = context.data[0].position;
this.carInfo.info = context.data[0].info;
this.carInfo.visible = true;
})
@ -1135,20 +987,24 @@ export default {
// this.mapLoading = false;
// }
// })
let data = {'queryValue' : [], "myInstanceClassify" : "all", "parameterValue":[], fks: []}
ViewListPage({viewCode:'event-all-list', pageNo: 1, pageSize:500}, data).then(res=>{
listpatrol({current:1,size:1000}).then(res=>{
this.mapLoading = false;
if(res.code == 200) {
this.videoPoint = [];
res.result.records.forEach((element)=>{
res.data.records.forEach((element)=>{
let obj = {position:[]};
let location = element.location?.split(',');
// obj.imgSrc = element.status == "0" ? offIcon4 : ico5;
if(location) {
if(location.length > 1) {
obj.position[0] = location[0];
obj.position[1] = location[1];
// let lonLat = this.wgs84togcj02(location[0],location[1]);
// obj.position[0] = lonLat ? lonLat[0] : 0;
// obj.position[1] = lonLat ? lonLat[1] : 0;
obj.lnglat = new AMap.LngLat(location.length > 0 ? location[0] : 0 ,location.length > 0 ? location[1] : 0)
// obj.lnglat = new AMap.LngLat(lonLat ? lonLat[0] : 0 ,lonLat ? lonLat[1] : 0)
} else {
obj.position[0] = 0;
obj.position[1] = 0;
@ -1171,6 +1027,48 @@ export default {
})
}
})
// let data = {'queryValue' : [], "myInstanceClassify" : "all", "parameterValue":[], fks: []}
// ViewListPage({viewCode:'event-all-list', pageNo: 1, pageSize:500}, data).then(res=>{
// this.mapLoading = false;
// if(res.code == 200) {
// this.videoPoint = [];
// res.result.records.forEach((element)=>{
// let obj = {position:[]};
// let location = element.location?.split(',');
// // obj.imgSrc = element.status == "0" ? offIcon4 : ico5;
// if(location) {
// obj.position[0] = location[0];
// obj.position[1] = location[1];
// // let lonLat = this.wgs84togcj02(location[0],location[1]);
// // obj.position[0] = lonLat ? lonLat[0] : 0;
// // obj.position[1] = lonLat ? lonLat[1] : 0;
// obj.lnglat = new AMap.LngLat(location.length > 0 ? location[0] : 0 ,location.length > 0 ? location[1] : 0)
// // obj.lnglat = new AMap.LngLat(lonLat ? lonLat[0] : 0 ,lonLat ? lonLat[1] : 0)
// } else {
// obj.position[0] = 0;
// obj.position[1] = 0;
// }
// obj.imgSrc = ico2;
// obj.info = element
// // this.markers.push(obj)
// this.videoPoint.push(obj)
// })
// this.count = this.videoPoint.length;
// AMap.plugin(['AMap.MarkerCluster'],()=>{
// this.cluster = new AMap.MarkerCluster(this.map,this.videoPoint,{
// gridSize: 60, //
// maxZoom: 17,
// styles: sts,
// // renderClusterMarker: this._renderClusterMarker, //
// renderMarker: this._eventMarker, //
// })
// })
// }
// })
} else if(id == 3){
// point.features.forEach((element)=>{
// if (element.properties.name == "") {
@ -1233,7 +1131,7 @@ export default {
let obj = {position:[]};
let lonLat;
if(element.longitude && element.latitude) {
lonLat = this.wgs84togcj02(element.longitude,element.latitude);
lonLat = this.wgs84togcj02(element.longitude,element.latitude);
}
// obj.position[0] = element.longitude;
obj.position[0] = lonLat ? lonLat[0] : 0;
@ -1298,15 +1196,6 @@ export default {
renderMarker: this._DrenderMarker, //
})
})
// res.rows.forEach(element => {
// let obj = {position:[]};
// obj.position[0] = element.longitude;
// obj.position[1] = element.latitude;
// obj.imgSrc = ico6;
// obj.info = element;
// this.markers.push(obj)
// this.mapLoading = false;
// })
}).catch(err=>{
this.mapLoading = false;
})
@ -1314,7 +1203,7 @@ export default {
},
//
clickMarker(marker,e){
console.log(marker);
// console.log(marker);
if (this.actionMap == 1) {
this.personInfo.position = marker.position;
this.personInfo.info = marker.info;
@ -1332,7 +1221,7 @@ export default {
} else if (this.actionMap == 5) {
this.shopInfo.position = marker.position;
this.shopInfo.info = marker.info;
console.log(marker.info);
// console.log(marker.info);
this.shopInfo.visible = true;
}
},
@ -1359,24 +1248,28 @@ export default {
}
},
//
initVideoPlayer(videoUrl){
initVideoPlayer(){
this.$nextTick(()=>{
var videoDom = document.getElementById('flvvideo')
var player = flvjs.createPlayer({
this.player = flvjs.createPlayer({
type: 'flv', // flv,
isLive: true, //
hasAudio: true, //
hanVideo: true, //
url: videoUrl, //
url: this.videoUrl, //
},{
// api
autoCleanupMinBackwardDuration: true, // SourceBuffer
})
player.attachMediaElement(videoDom)
player.load()
player.play()
this.player = player;
this.player.attachMediaElement(videoDom)
try {
this.player.load();
this.player.play();
this.listenVideo();
} catch (error) {
console.log(error);
}
//
// this.player.on(flvjs.Events.ERROR,(errType, errDetail)=>{
// // console.log(errType,'errTypeerrTypeerrType');
@ -1386,7 +1279,6 @@ export default {
// this.initVideoPlayer(videoUrl)
// }
// })
this.instantaneity(this.player,videoUrl)
})
},
destroyVideos() {
@ -1397,39 +1289,70 @@ export default {
this.player.destroy();
this.player = null;
},
//
instantaneity(player,videoUrl){
this.timer = setInterval(() => {
if (player && player.buffered && player.buffered.length) {
let end = player.buffered.end(0); // buffered
let diff = end - player.currentTime; // bufferedcurrentTime
if (diff >= 3) {// 3s
//
player.currentTime = end;//
player.currentTime = player.buffered.end(0);//
//
clearInterval(this.timer)
// player.pause();
// player.unload();
// player.detachMediaElement();
// player.destroy();
// player= null;
//
this.initVideoPlayer(videoUrl)
}
}
}, 2000); //2000
//
listenVideo() {
const that = this;
if(this.player) {
this.player.on(
flvjs.Events.ERROR,
(errorType, errorDetail, errorInfo) => {
// console.log("errorType", errorType);
// console.log("errorDetail", errorDetail);
// console.log("errorInfo", errorInfo);
if(errorInfo.code == 404) {
setTimeout(()=>{
videoSurveillance({
...that.videoCondition,
destID:that.personInfo.info.userId,
imei:that.personInfo.info.imei
}).then((res) => {
if (res.code == 200 && res.data.msg == "操作成功") {
setTimeout(()=>{
that.videoUrl = `http://10.236.2.28:54567/bjh-admin-server/jn/live/9999_${that.personInfo.info.userId}.flv`
if(!that.showVideo) {
videoSurveillance({destId:that.personInfo.info.userId,imei:that.personInfo.info.imei,msgType:0}).then(res=>{})
that.destroyVideos();
} else {
that.initVideoPlayer();
}
},3000);
}
});
},2000)
} else {
//
that.destroyVideos();
that.initVideoPlayer();
}
}
);
//
this.player.on("statistics_info", function (res) {
if(that.lastDecodedFrames === 0){
that.lastDecodedFrames = res.decodedFrames
return
}
if(that.lastDecodedFrames != res.decodedFrames){
that.lastDecodedFrames = res.decodedFrames
}else{
that.lastDecodedFrames = 0
that.destroyVideos()
that.initVideoPlayer()
}
});
}
},
//
watchClick(){
if(this.personInfo.info.status == "1") {
// console.log(this.personInfo.info);
this.showVideo = true;
videoSurveillance({...this.videoCondition,destID:this.personInfo.info.userId,imei:this.personInfo.info.imei}).then(res=>{
if(res.code == 200 && res.data.msg == '操作成功') {
// http://121.229.2.163:9291/live/9999 http://120.27.25.166:9305/live/9999_
setTimeout(()=>{
this.initVideoPlayer(`https://t-jn-city.jssp-park.com/bjh-admin-server/jn/live/9999_${this.personInfo.info.userId}.flv`)
this.videoUrl = `http://10.236.2.28:54567/bjh-admin-server/jn/live/9999_${this.personInfo.info.userId}.flv`
this.initVideoPlayer()
},3000)
}
})
@ -1446,12 +1369,12 @@ export default {
this.player.detachMediaElement()
this.player.destroy()
this.player = null
videoSurveillance({destId:this.personInfo.userId,imei:this.personInfo.info.imei,msgType:0})
videoSurveillance({destID:this.personInfo.info.userId,imei:this.personInfo.info.imei,msgType:0})
if(this.timer) clearInterval(this.timer)
},
//
shareClick(){
console.log(this.personInfo,"位置分享");
// console.log(this.personInfo,"");
if(this.personInfo.info.status == "1") {
var aux = document.createElement("input");
aux.setAttribute("value", this.personInfo.info.address);
@ -1471,11 +1394,14 @@ export default {
//
monitorVideos(status){
// this.$refs.videoWall.open();
if(status == 1) {
getPreviewURLs({protocol:'hls',cameraIndexCode:this.monitoringInfo.info.cameraIndexCode,expand:"transcode=1"}).then(res=>{
if(status == 1) { // expand:"transcode=1"
getPreviewURLs({protocol:'hls',cameraIndexCode:this.monitoringInfo.info.cameraIndexCode,streamType:"1",transmode:"1"}).then(res=>{
if(res.code == 200) {
// console.log(res,'');
this.$refs.aloneVideo.open(res.msg);
// this.$refs.aloneVideo.open(res.msg);
let videoUrl = res.msg;
var code1 = videoUrl.match(/\/openUrl\/(.*)/)[1]
this.$refs.aloneVideo.open(`http://10.236.2.28:54567/bjh-admin-server/jn/videosLive/${code1}`);
}
})
} else {
@ -1484,7 +1410,7 @@ export default {
},
//
copyUrl(){
getPreviewURLs({protocol:'hls',cameraIndexCode:this.monitoringInfo.info.cameraIndexCode,expand:"transcode=1"}).then(res=>{
getPreviewURLs({protocol:'hls',cameraIndexCode:this.monitoringInfo.info.cameraIndexCode,streamType:"1",transmode:"1"}).then(res=>{
if(res.code == 200) {
// this.$refs.aloneVideo.open(res.msg);
var aux = document.createElement("input");
@ -1834,9 +1760,19 @@ export default {
if(this.actionMap == 1) {
this.$refs.personageTrack.open("person", this.personInfo.info);
} else if(this.actionMap == 3) {
this.$refs.personageTrack.open("car", this.car.info);
this.$refs.personageTrack.open("car", this.carInfo.info);
}
},
//
watchCarVideo(){
getPreviewURLs({protocol:'hls',cameraIndexCode:'5ab6cc3745e147918b2a96c2604ecdbb',streamType:"1",transmode:"1"}).then(res=>{
this.$refs.carVideo.open(res.msg);
})
// previewURLs({cameraIndexCode:'5ab6cc3745e147918b2a96c2604ecdbb',transmode:1,protocol:'hls',streamType:1}).then(res=>{
// let carUrl = JSON.parse(res.data);
// this.$refs.carVideo.open(carUrl.data.url);
// })
},
//
divClick(lightedPolygonId){
if(this.action == 1) {
@ -2532,7 +2468,7 @@ export default {
this.personInfo.info = res.data.obj[0];
this.personInfo.personinfo = resTwo.data[0];
this.personInfo.visible = true;
},1500)
},2500)
}
})
return getUserByImei({imei:item.imei})
@ -2666,7 +2602,7 @@ export default {
},
// token
getrobotToken(){
robotLogin({username:"superAdmin",password:"sa@123456"}).then(res=>{
robotLogin({username:"superAdmin",password:"3ER4#er$@2024"}).then(res=>{
// console.log(res,"");
if(res.code == 200) {
// setRobotToken(res.result.token)
@ -2738,7 +2674,7 @@ export default {
},
mounted() {
this.getPersonIcon();
// this.getPersonIcon();
this.getCarList();
this.getrobotToken();
window.addEventListener('beforeunload', e => this.beforeunloadHandler(e));

@ -0,0 +1,77 @@
<template>
<dia-log ref="dialog4" width="45%" title="实时监控" @close="Close">
<div class="video-main">
<!-- muted是否静音 -->
<video
id="video"
preload="auto"
controls
autoplay
class="video-js vjs-default-skin vjs-big-play-centered"
style="width: 100%; height: 100%; object-fit: fill"
>
<source :src="videoUrl" type="application/x-mpegURL" />
</video>
</div>
</dia-log>
</template>
<script>
import diaLog from "../../components/dialog/index.vue"
import Videojs from "video.js"
import "videojs-contrib-hls";
// json
import video_zhCN from 'video.js/dist/lang/zh-CN.json'
//
Videojs.addLanguage('zh-CN', video_zhCN)
export default {
components:{diaLog},
data() {
return {
videoUrl: "",
videoPlayer: null,
}
},
props:{},
methods:{
open(url) {
this.$refs.dialog4.open('3');
this.initVideo();
this.videoUrl = url;
},
Close() {
// this.videoPlayer.dispose();
if(this.videoPlayer){
this.videoPlayer.dispose();
}
},
initVideo(){
this.$nextTick(() => {
this.videoPlayer = Videojs(`video`,{
bigPlayButton: true, //
textTrackDisplay: false,
posterImage: false,
errorDisplay: false,
language: 'zh-CN',
controls: true,
height: '100%',
hls: {
withCredentials: true,
},
})
});
},
},
destroyed() {
if(this.videoPlayer){
this.videoPlayer.dispose();
}
}
}
</script>
<style lang="scss" scoped>
.video-main {
width: 100%;
height: 500px;
padding: 0 40px 0 0;
}
</style>

@ -195,6 +195,23 @@ export default {
// height: 120px;
overflow-y: scroll;
}
.left--lists::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 0;
}
.left--lists::-webkit-scrollbar {
-webkit-appearance: none;
width: 6px;
height: 3px;
}
.left--lists::-webkit-scrollbar-thumb {
cursor: pointer;
border-radius: 5px;
background: rgba(7, 127, 255, 0.5);
transition: color 0.2s ease;
}
.main-lists {
display: flex;
justify-content: space-between;

@ -144,6 +144,23 @@ export default {
overflow-y: scroll;
// height: 99px;
}
.lists-main::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 0;
}
.lists-main::-webkit-scrollbar {
-webkit-appearance: none;
width: 6px;
height: 3px;
}
.lists-main::-webkit-scrollbar-thumb {
cursor: pointer;
border-radius: 5px;
background: rgba(7, 127, 255, 0.5);
transition: color 0.2s ease;
}
.main {
padding: 0 24px;
// display: flex;

@ -3,18 +3,18 @@
<div class="personage-track">
<div class="track-title">
<div class="titlebg"></div>
<span class="name">{{ person ? personItem.userName : "执法一队1号车" }}</span>
<span>{{ person ? "执法1队队员" : "苏A568974" }}</span>
<span class="name">{{ person ? personItem.userName : carItem.carName }}</span>
<span>{{ person ? "执法1队队员" : carItem.carCode }}</span>
</div>
<div class="track-content">
<div class="oneList">
<div class="item" :class="person ? 'item-left' : 'car-item'">
<div class="item" :class="person ? 'item-left' : 'car-item'" v-if="person">
<div class="ball"></div>
<div class="content">
{{ person ? "人员编号:" : "车辆编号:"
}}<span>{{
person ? personItem.userId : "201128881111100"
}}</span>
<!-- {{ person ? "人员编号:" : "车辆编号:"}} -->
人员编号
<!-- <span>{{ person ? personItem.userId : "201128881111100" }}</span> -->
<span>{{ personItem.userId }}</span>
</div>
</div>
<!-- <div class="item car-item" v-if="!person">
@ -127,6 +127,9 @@ import ruanjianyuan from "@/utils/mapJson/开发区软件园GJ02.json";
// import "@/utils/lib/leaflet-tilelayer-colorizr.js";
import { getLocInfoByImei } from "@/api/bigScreenApi"
import { getCenter } from "@/utils/amap"
import {
carTrack,
} from "@/api/bigScreenApi/eventApi.js"
export default {
components: { diaLog },
data() {
@ -134,6 +137,10 @@ export default {
title: "人员行程轨迹",
person: false,
personItem: null,
carItem: {
carName:"",
carCode:""
},
queryTime: {
fromTime: "",
toTime: "",
@ -150,7 +157,6 @@ export default {
fillColor: 'rgba(64,175,255,0.4)' // 使16#00B2D5
},
jiangninggeo:jiangninggeo,
globalMap: null,
track: null,
mapLayer1: null,
@ -332,7 +338,14 @@ export default {
this.title = "人员行程轨迹";
this.personItem = item;
this.person = true;
this.queryTime.fromTime = this.getCurrentTime();
this.queryTime.toTime = this.getCurrentTime(1);
this.query();
} else {
this.carItem = item;
console.log(this.carItem);
this.queryTime.fromTime = this.getCurrentTime();
this.queryTime.toTime = this.getCurrentTime(1);
this.title = "车辆行程轨迹";
this.person = false;
}
@ -409,43 +422,100 @@ export default {
this.$modal.msgError("请选择查询的截止时间");
} else {
this.loading = true;
getLocInfoByImei({...this.queryTime,imei:this.personItem.imei}).then(res=>{
console.log(res,'行动轨迹');
this.loading = false;
if(res.code == 200 && res.data.result == '000') {
let arr = []
res.data.data.forEach(element => {
let arrTwo = [];
arrTwo[1] = element.latitude;
arrTwo[0] = element.longitude;
arr.push(arrTwo);
});
// if(this.track) {
// this.globalMap.removeLayer(this.track);
// }
if(this.map.getAllOverlays('polyline')) {
this.map.remove(this.map.getAllOverlays('polyline'));
if(this.person){
getLocInfoByImei({...this.queryTime,imei:this.personItem.imei}).then(res=>{
this.loading = false;
if(res.code == 200 && res.data.result == '000') {
let arr = []
res.data.data.forEach(element => {
let arrTwo = [];
arrTwo[1] = element.latitude;
arrTwo[0] = element.longitude;
arr.push(arrTwo);
});
// if(this.track) {
// this.globalMap.removeLayer(this.track);
// }
if(this.map.getAllOverlays('polyline')) {
this.map.remove(this.map.getAllOverlays('polyline'));
}
this.track = new AMap.Polyline({
path: arr,
strokeWeight: 6,
strokeColor: '#F44444',
strokeOpacity: 1,
showDir: true,
})
this.map.add(this.track);
const mapInstance = this.$refs.personMap.$$getInstance();
// setFitView GeoJSON
mapInstance.setFitView(this.track);
// this.track = L.polyline(arr,{
// pane:'mapLayer1',
// // color: '#F894AF'
// color: 'red'
// }).addTo(this.globalMap)
// this.globalMap.fitBounds(this.track.getBounds());
} else if(res.code == 200 && res.data.msg) {
this.$modal.msgError(res.data.msg);
}
this.track = new AMap.Polyline({
path: arr,
strokeColor: '#F44444',
strokeOpacity: 1,
})
this.map.add(this.track);
const mapInstance = this.$refs.personMap.$$getInstance();
// setFitView GeoJSON
mapInstance.setFitView(this.track);
// this.track = L.polyline(arr,{
// pane:'mapLayer1',
// // color: '#F894AF'
// color: 'red'
// }).addTo(this.globalMap)
})
} else {
carTrack({startTime:this.queryTime.fromTime,endTime:this.queryTime.toTime,deviceIndexCode:"b91155244ea245708ed8258dfcc4509a"}).then(res=>{
// console.log(res,"");
this.loading = false;
if(res.code == 200) {
let arr = []
res.data.records.forEach(element => {
let arrTwo = [];
arrTwo[1] = element.latitude;
arrTwo[0] = element.longitude;
arr.push(arrTwo);
});
// if(this.track) {
// this.globalMap.removeLayer(this.track);
// }
if(this.map.getAllOverlays('polyline')) {
this.map.remove(this.map.getAllOverlays('polyline'));
}
this.track = new AMap.Polyline({
path: arr,
strokeColor: '#F44444',
strokeOpacity: 1,
showDir: true,
})
this.map.add(this.track);
const mapInstance = this.$refs.personMap.$$getInstance();
// setFitView GeoJSON
mapInstance.setFitView(this.track);
}
}).catch(err => {
this.loading = false;
})
}
}
},
//
getCurrentTime(id){
//
const now = new Date();
// this.globalMap.fitBounds(this.track.getBounds());
} else if(res.code == 200 && res.data.msg) {
this.$modal.msgError(res.data.msg);
}
})
//
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0'); // 01
const day = String(now.getDate()).padStart(2, '0'); //
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
//
const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
const formattedTime = `${year}-${month}-${day} 00:00:00`;
if(id == 1) {
return formattedDateTime;
} else {
return formattedTime;
}
},
},

@ -1,11 +1,3 @@
<!--
* @Descripttion:
* @version:
* @Author: JC9527
* @Date: 2023-12-26 13:59:07
* @LastEditors: JC9527
* @LastEditTime: 2023-12-28 14:46:59
-->
<template>
<dia-log ref="dialog4" width="45%" title="实时监控" @close="Close">
<div class="video-main">
@ -71,7 +63,6 @@ export default {
},
destroyed() {
if(this.videoPlayer){
console.log("1111111111111111111111");
this.videoPlayer.dispose();
}
}

Loading…
Cancel
Save