1888 lines
87 KiB
HTML
1888 lines
87 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
|
||
<meta http-equiv=Access-Control-Allow-Origin content=*>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<link rel="shortcut icon" href="__CDN__/assets/img/favicon.ico"/>
|
||
<link href="__CDN__/web/static/css/clm.css" rel="stylesheet">
|
||
|
||
|
||
<title>{$site.name|htmlentities}</title>
|
||
<script src="__CDN__/web/static/js/jquery-1.11.3.js" type=text/javascript charset=utf-8></script>
|
||
<script src="__CDN__/web/static/js/echarts.min.js" type=text/javascript charset=utf-8></script>
|
||
<script src="__CDN__/web/static/js/vue.js" type=text/javascript charset=utf-8></script>
|
||
<script src="__CDN__/web/static/js/data.js" type=text/javascript charset=utf-8></script>
|
||
|
||
|
||
<script src="__CDN__/web/static/js/datav.min.vue.js"></script>
|
||
</head>
|
||
|
||
<body>
|
||
|
||
<div id=app>
|
||
<div class="header">
|
||
<div class="left">
|
||
<dv-decoration-1 style="width:200px;height:50px;">
|
||
</dv-decoration-1>
|
||
<div class="logo">
|
||
<span>{{ name }}</span>
|
||
</div>
|
||
<div class="title">
|
||
<img :src="p.img" alt="p.name" v-for="(p,i) in page" :key="i" @click="toPath(p.path)">
|
||
</div>
|
||
</div>
|
||
<div class="right">
|
||
<div>
|
||
<span class="view"
|
||
:class="{sidebarcolor:showSidebar}"
|
||
@click="toggleSidebar">{{!showSidebar ? '收起侧边栏' : '打开侧边栏'}}</span>
|
||
<span>当前日期:{{currentTime }}</span>
|
||
<dv-decoration-1 style="width:200px;height:50px;">
|
||
</dv-decoration-1>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="left" v-show="!showSidebar">
|
||
<div class="left_1" v-for="(item,index) in left_data" :key="index"
|
||
:style="{
|
||
backgroundImage: 'url(' + item.bg + ')',
|
||
backgroundSize: 'cover',
|
||
backgroundRepeat: 'no-repeat'
|
||
}"
|
||
>
|
||
<div>
|
||
<p>{{item.name}}</p>
|
||
<p :style="{color:item.color}"><span>{{item.num}}</span>辆</p>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="main">
|
||
<div id='container'></div>
|
||
</div>
|
||
|
||
<div class="right" v-show="!showSidebar">
|
||
<div class="r_i_1">
|
||
<div class="r_i_1_1" v-for="(item,index) in r_1_data" :key="index"
|
||
>
|
||
<dv-border-box-1 class="">
|
||
<p>{{item.name}}</p>
|
||
<p><span>{{item.num}}</span>次</p>
|
||
</dv-border-box-1>
|
||
</div>
|
||
</div>
|
||
<div class="r_i r_i_2">
|
||
<dv-border-box-1>
|
||
<p class="title">
|
||
<span>车辆码当月入园次数统计</span>
|
||
</p>
|
||
<div id="clms" style="width: 100%; height: 25vh;"></div>
|
||
</dv-border-box-1>
|
||
</div>
|
||
<div class="r_i r_i_3" style="height: 38vh">
|
||
<p class="title">
|
||
<span>滚动报警</span>
|
||
<span style="color: rgb(250, 205, 137)">当前报警数{{count}}条</span>
|
||
</p>
|
||
<dv-scroll-board class="scroll" :config="config" style="width:100%;height:100%;align-content: center"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="lengend" :class="vis&&'l-show'" v-show="vis">
|
||
<div class="l-item" v-for="(i,k) of form" :key="k">
|
||
<div class="l-head">
|
||
<div class="f-item">
|
||
<input type="checkbox" v-model="i.val" :id="k+'-tit'">
|
||
<label :for="k+'-tit'">
|
||
<span>{{i.tit}}</span>
|
||
</label>
|
||
</div>
|
||
</div>
|
||
<div class="l-cont">
|
||
<div class="f-item" v-for="(j,z) of i.kids" :key="z">
|
||
<input type="checkbox" v-model="i.model" :value="j.val" :id="k+'-item-'+z" @change="i.change(i)">
|
||
<label :for="k+'-item-'+z">
|
||
<img :src="j.icon" alt="" v-if="j.icon">
|
||
<i v-if="j.bc" :style="{'background-color':j.bc}"></i>
|
||
<span>{{j.label}}</span>
|
||
</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="app-vis"><input type="checkbox" id="vis" v-show="vis" v-model="vis"> <label for="vis"></label></div>
|
||
<div class="car-search">
|
||
<input type="text" placeholder="车辆搜索" v-model="linKey">
|
||
<i @click="searchClear" v-show="linKey"></i>
|
||
<span @click="linSearch">搜索</span>
|
||
</div>
|
||
</div>
|
||
|
||
<script type="text/javascript">
|
||
stopcolor = '#ff0000'
|
||
livcolor = '#e89393'
|
||
lv1color = "#ff0000"
|
||
lv2color = "#a08e8e"
|
||
lv3color = '#d2db00'
|
||
lv4color = '#f29b76'
|
||
overlayGroups = {
|
||
fac: [],
|
||
car: [],
|
||
enter: {},
|
||
road: [],
|
||
truth: [],
|
||
}
|
||
|
||
let fac = [
|
||
{
|
||
label: "变电站",
|
||
icon: '/web/static/icon/d.png',
|
||
val: 'y',
|
||
},
|
||
{
|
||
label: "配气站",
|
||
icon: '/web/static/icon/fq.png',
|
||
val: 'g',
|
||
},
|
||
{
|
||
label: "热能配置",
|
||
icon: '/web/static/icon/rs.png',
|
||
val: 'v',
|
||
},
|
||
{
|
||
label: "废物处理",
|
||
icon: '/web/static/icon/fs.png',
|
||
val: 'f',
|
||
},
|
||
{
|
||
label: "给水厂",
|
||
icon: '/web/static/icon/w.png',
|
||
val: 'd',
|
||
},
|
||
{
|
||
label: "污水处理厂",
|
||
icon: '/web/static/icon/ws.png',
|
||
val: 'h',
|
||
},
|
||
{
|
||
label: "事故池",
|
||
icon: '/web/static/icon/b.png',
|
||
val: 'p',
|
||
},
|
||
{
|
||
label: "应急集合点",
|
||
icon: '/web/static/icon/pp.png',
|
||
val: 'm',
|
||
},
|
||
{
|
||
label: "医院",
|
||
icon: '/web/static/icon/ht.png',
|
||
val: '_',
|
||
},
|
||
{
|
||
label: "居住区域",
|
||
bc: livcolor,
|
||
val: 'live',
|
||
},
|
||
{
|
||
label: "停车区域",
|
||
bc: stopcolor,
|
||
val: 'stop',
|
||
},
|
||
{
|
||
label: "森林防护区",
|
||
bc: '#26c533',
|
||
val: 'tree',
|
||
},
|
||
],
|
||
car = [
|
||
// {
|
||
// label:"行驶车辆",
|
||
// icon:'/web/static/icon/icon_tuli_xs@2x.png',
|
||
// val:100,
|
||
// },
|
||
// {
|
||
// label:"停止车辆",
|
||
// icon:'/web/static/icon/icon_tuli_tz@2x.png',
|
||
// val:200,
|
||
// },
|
||
// {
|
||
// label:"预警车辆",
|
||
// icon:'/web/static/icon/icon_tuli_yj@2x.png',
|
||
// val:10,
|
||
// },
|
||
// {
|
||
// label:"正常车辆",
|
||
// icon:'/web/static/icon/icon_tuli_wyj@2x.png',
|
||
// val:20,
|
||
// },
|
||
// {
|
||
// label:"运单车辆",
|
||
// icon:'/web/static/icon/icon_tuli_yd@2x.png',
|
||
// val:1,
|
||
// },{
|
||
// label:"无运单车辆",
|
||
// icon:'/web/static/icon/icon_tuli_wyj@2x.png',
|
||
// val:2,
|
||
// },
|
||
{
|
||
label: "红牌车辆",
|
||
icon: '/web/static/icon/100.png',
|
||
val: 100,
|
||
},
|
||
{
|
||
label: "黄牌车辆",
|
||
icon: '/web/static/icon/200.png',
|
||
val: 200,
|
||
},
|
||
{
|
||
label: "绿牌车辆",
|
||
icon: '/web/static/icon/300.png',
|
||
val: 300,
|
||
},
|
||
|
||
],
|
||
enter = [
|
||
{
|
||
label: "一级周界",
|
||
bc: lv1color,
|
||
val: 'lv1',
|
||
},
|
||
{
|
||
label: "二级周界",
|
||
bc: lv2color,
|
||
val: 'lv2',
|
||
},
|
||
{
|
||
label: "三级周界",
|
||
bc: lv3color,
|
||
val: 'lv3',
|
||
},
|
||
// {
|
||
// label:"四级周界",
|
||
// bc:lv4color,
|
||
// val:'lv4',
|
||
// },
|
||
|
||
],
|
||
road = [
|
||
{
|
||
label: "正常周界",
|
||
bc: '#448ACA',
|
||
val: 'nor',
|
||
},
|
||
{
|
||
label: "预警周界",
|
||
bc: '#46A162',
|
||
val: 'warn',
|
||
},
|
||
{
|
||
label: "禁行周界",
|
||
bc: '#6A005F',
|
||
val: 'no',
|
||
}
|
||
];
|
||
|
||
|
||
var vm = new Vue({
|
||
el: '#app',
|
||
filters: {
|
||
status(n) {
|
||
switch (n) {
|
||
case -1:
|
||
return '区域外行驶';
|
||
case 0:
|
||
return '正常';
|
||
case 1:
|
||
return '超速';
|
||
case 2:
|
||
return '禁行/禁停';
|
||
case 3:
|
||
return '禁停/禁行';
|
||
case 4:
|
||
return '未上报';
|
||
case 5:
|
||
return '超最大数量'
|
||
default:
|
||
return "";
|
||
}
|
||
}
|
||
},
|
||
|
||
data: {
|
||
name: '封闭园区运营中心',
|
||
page: [
|
||
{
|
||
'name': '总览',
|
||
'path': 'index',
|
||
'img': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAYAAABCKP5eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjkzNjY5NzQ3QTcyMTExRUI5OTM1OTc5OEFERjMyM0Y0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjkzNjY5NzQ4QTcyMTExRUI5OTM1OTc5OEFERjMyM0Y0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTM2Njk3NDVBNzIxMTFFQjk5MzU5Nzk4QURGMzIzRjQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTM2Njk3NDZBNzIxMTFFQjk5MzU5Nzk4QURGMzIzRjQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7DkPpKAAAJmklEQVR42uyc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'
|
||
},
|
||
{
|
||
'name': '车辆码',
|
||
'path': 'i_clm',
|
||
'img': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAYAAABCKP5eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjkxNDM1OTU5QTcyMTExRUJBREFEQzQ0RjBFODk4NDk0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjkxNDM1OTVBQTcyMTExRUJBREFEQzQ0RjBFODk4NDk0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTE0MzU5NTdBNzIxMTFFQkFEQURDNDRGMEU4OTg0OTQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTE0MzU5NThBNzIxMTFFQkFEQURDNDRGMEU4OTg0OTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6iKQvbAAAKO0lEQVR42uyc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'
|
||
},
|
||
{
|
||
'name': '车辆状态',
|
||
'path': 'cldt',
|
||
'img': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAYAAABCKP5eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjkwOTE3MzIzQTcyMTExRUI5M0RDRkMxMUY4ODZBQzE2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjkwOTE3MzI0QTcyMTExRUI5M0RDRkMxMUY4ODZBQzE2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTA5MTczMjFBNzIxMTFFQjkzRENGQzExRjg4NkFDMTYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTA5MTczMjJBNzIxMTFFQjkzRENGQzExRjg4NkFDMTYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5q+4q4AAANAElEQVR42uyc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'
|
||
},
|
||
{
|
||
'name': '运单状态',
|
||
'path': 'yddt',
|
||
'img': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAYAAABCKP5eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhFRDRBMDFFQTcyMTExRUI5MTI2RkJDOUI5NEQyQTAxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhFRDRBMDFGQTcyMTExRUI5MTI2RkJDOUI5NEQyQTAxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OEVENEEwMUNBNzIxMTFFQjkxMjZGQkM5Qjk0RDJBMDEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OEVENEEwMURBNzIxMTFFQjkxMjZGQkM5Qjk0RDJBMDEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7VvU5NAAAMvklEQVR42uyc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'
|
||
},
|
||
],
|
||
currentTime: '',
|
||
showSidebar: false,
|
||
left_data: [
|
||
{'name': '绿码车辆', 'bg': '/web/static/img/ma_img_green.7420a07.png', 'color': '#00ff00', 'num': '0'},
|
||
{'name': '红码车辆', 'bg': '/web/static/img/ma_img_red.272f3d7.png', 'color': '#ff0000', 'num': '0'},
|
||
{'name': '黄码车辆', 'bg': '/web/static/img/ma_img_yellow.9f7e5fc.png', 'color': '#ffff00', 'num': '0'},
|
||
],
|
||
r_1_data: [
|
||
{'name': '当日入园上报数', 'num': '51'},
|
||
{'name': '当日入园未上报数', 'num': '13'},
|
||
],
|
||
r_2_data: [],
|
||
r_3_data: [],
|
||
count: 0,
|
||
config: {
|
||
header: ['车牌号', '报警行为', '事件触发', '报警时间'],
|
||
data: [], columnWidth: [120, 120, 100, 180],
|
||
align: ['center'], rowNum: 20, waitTime: 2000, oddRowBGC: '', evenRowBGC: '#cfd5d71c'
|
||
},
|
||
show_video: false,
|
||
infoPos: {
|
||
left: '0px',
|
||
top: '0px'
|
||
},
|
||
videosrc: true,
|
||
zjinfor: {},
|
||
zjinforvis: false,
|
||
carInfo: {},
|
||
infoVis: false,
|
||
vis: false,
|
||
linKey: "",
|
||
search: '',
|
||
form: [
|
||
{
|
||
tit: '固定设施标记',
|
||
get val() {
|
||
return this.model.length === this.kids.length;
|
||
},
|
||
set val(n) {
|
||
if (n) {
|
||
this.model = this.kids.map(i => i.val);
|
||
} else {
|
||
this.model = [];
|
||
}
|
||
this.change(this);
|
||
},
|
||
model: fac.map(i => i.val),
|
||
change(_this) {
|
||
console.log('搜索')
|
||
let marksers = overlayGroups.fac,
|
||
kids = _this.kids.map(i => i.val);
|
||
|
||
marksers.forEach(i => {
|
||
let val = i.getExtData().type;
|
||
if (_this.model.includes(val) || !kids.includes(val)) {
|
||
i.show();
|
||
} else {
|
||
i.hide();
|
||
}
|
||
})
|
||
|
||
|
||
},
|
||
kids: fac
|
||
}, {
|
||
tit: '车辆码',
|
||
get val() {
|
||
return this.model.length === this.kids.length;
|
||
},
|
||
set val(n) {
|
||
if (n) {
|
||
this.model = this.kids.map(i => i.val);
|
||
console.log(this.model)
|
||
} else {
|
||
this.model = [];
|
||
}
|
||
this.change(this);
|
||
|
||
},
|
||
get zh() {
|
||
//console.log(this.model)
|
||
// let v1=this.model.filter(i==100),
|
||
// v2=this.model.filter(i==200),
|
||
// arr=[];
|
||
// v1.forEach(i=>{
|
||
// v2.forEach(j=>{
|
||
// arr.push(i+j+'');
|
||
|
||
// })
|
||
// })
|
||
var arr = [];
|
||
|
||
for (var i = 0; i < this.model.length; i++) {
|
||
this.model[i] = parseInt(this.model[i])
|
||
}
|
||
arr = this.model;
|
||
return arr;
|
||
},
|
||
change() {
|
||
console.log('搜索车辆,车辆码过滤', car_markers.list)
|
||
car_markers.list.forEach(i => {
|
||
var data = i.getExtData();
|
||
var shouldShow = false;
|
||
|
||
// 先检查车辆码状态是否匹配
|
||
if (this.zh.includes(data.status)) {
|
||
// 如果车辆码匹配,再检查搜索关键词
|
||
if (vm.search) {
|
||
// 如果有搜索关键词,检查车牌号是否匹配(支持部分匹配)
|
||
if (data.vehicleNo && data.vehicleNo.indexOf(vm.search) !== -1) {
|
||
shouldShow = true;
|
||
}
|
||
} else {
|
||
// 没有搜索关键词,显示所有匹配车辆码的车辆
|
||
shouldShow = true;
|
||
}
|
||
}
|
||
|
||
// 应用显示/隐藏
|
||
if (shouldShow) {
|
||
i.show();
|
||
} else {
|
||
i.hide();
|
||
}
|
||
})
|
||
},
|
||
model: car.map(i => i.val),
|
||
kids: car
|
||
}, {
|
||
tit: '周界',
|
||
get val() {
|
||
return this.model.length === this.kids.length;
|
||
},
|
||
set val(n) {
|
||
if (n) {
|
||
this.model = this.kids.map(i => i.val);
|
||
} else {
|
||
this.model = [];
|
||
}
|
||
this.change(this);
|
||
|
||
},
|
||
change(_this) {
|
||
vm.enterSec();
|
||
/*
|
||
let enters= overlayGroups.enter,
|
||
kids=_this.kids.map(i=>i.val);
|
||
|
||
|
||
for(var i in enters){
|
||
if(_this.model.includes(i)){
|
||
enters[i].forEach(j=>j.show());
|
||
}else{
|
||
enters[i].forEach(j=>j.hide());
|
||
}
|
||
}
|
||
*/
|
||
|
||
},
|
||
model: enter.map(i => i.val),
|
||
kids: enter
|
||
},
|
||
{
|
||
tit: '周界筛选禁行',
|
||
$val: false,
|
||
|
||
get val() {
|
||
return this.$val;
|
||
},
|
||
set val(n) {
|
||
this.$val = n;
|
||
this.change(this);
|
||
|
||
},
|
||
change(_this) {
|
||
vm.enterSec();
|
||
|
||
|
||
},
|
||
model: [1, 2],
|
||
kids: [
|
||
{
|
||
label: "非禁行",
|
||
val: 2,
|
||
},
|
||
{
|
||
label: "禁行",
|
||
val: 1,
|
||
}
|
||
]
|
||
},
|
||
// {
|
||
// tit:'道路周界',
|
||
// model:true,
|
||
// change(_this){
|
||
// let truth= overlayGroups.truth,
|
||
// kids=_this.kids.map(i=>i.val);
|
||
|
||
// for(var i in truth){
|
||
// if(_this.model.includes(i)){
|
||
// truth[i].forEach(j=>j.show());
|
||
// }else{
|
||
// truth[i].forEach(j=>j.hide());
|
||
// }
|
||
// }
|
||
|
||
|
||
// },
|
||
// get val(){
|
||
// return this.model;
|
||
// },
|
||
// set val(n){
|
||
|
||
// this.model=n;
|
||
// let truth= overlayGroups.truth;
|
||
|
||
// for(var i in truth){
|
||
// if(n){
|
||
// truth[i].forEach(j=>j.show());
|
||
// }else{
|
||
// truth[i].forEach(j=>j.hide());
|
||
// }
|
||
// }
|
||
|
||
// },
|
||
// kids:[],
|
||
// }
|
||
]
|
||
},
|
||
computed: {
|
||
enterModel() {
|
||
var ef = this.form.filter(i => i.tit === '周界')[0],
|
||
sf = this.form.filter(i => i.tit === '周界筛选禁行')[0];
|
||
return {
|
||
lv: ef.model,
|
||
isSec: sf.val,
|
||
sec: sf.model
|
||
}
|
||
}
|
||
},
|
||
created() {
|
||
this.startTimer()
|
||
this.getData()
|
||
this.getData2()
|
||
},
|
||
beforeDestroy() {
|
||
this.stopTimer(); // 清除定时器以避免内存泄漏
|
||
},
|
||
mounted() {
|
||
this.initChart();
|
||
// 如果数据已经加载,立即更新图表
|
||
if (this.r_2_data && this.r_2_data.length > 0) {
|
||
this.$nextTick(() => {
|
||
this.updateChart();
|
||
});
|
||
}
|
||
},
|
||
watch: {
|
||
// 监听数据变化自动更新图表
|
||
r_2_data(newVal) {
|
||
if (newVal && newVal.length > 0 && this.myChart) {
|
||
this.$nextTick(() => {
|
||
this.updateChart();
|
||
});
|
||
}
|
||
},
|
||
r_3_data(newVal) {
|
||
if (newVal && newVal.length > 0) {
|
||
this.updatedv();
|
||
}
|
||
}
|
||
},
|
||
methods: {
|
||
initChart() {
|
||
// 通过document.getElementById获取DOM元素
|
||
const chartDom = document.getElementById('clms');
|
||
if (chartDom) {
|
||
this.myChart = echarts.init(chartDom);
|
||
// 设置初始空配置,显示加载提示
|
||
this.myChart.setOption({
|
||
title: {
|
||
text: '数据加载中...',
|
||
textStyle: {
|
||
color: '#94a3b8',
|
||
fontSize: 16
|
||
},
|
||
left: 'center',
|
||
top: 'center'
|
||
},
|
||
xAxis: {show: false},
|
||
yAxis: {show: false},
|
||
series: []
|
||
});
|
||
}
|
||
|
||
// 窗口大小变化时重绘图表
|
||
window.addEventListener('resize', this.handleResize);
|
||
},
|
||
handleResize() {
|
||
this.myChart && this.myChart.resize();
|
||
},
|
||
toPath(url) {
|
||
window.location.href = '/index/datav/' + url
|
||
},
|
||
getData() {
|
||
var _this = this;
|
||
$.post('/api/Yq_screen/vehicle_code', function(r) {
|
||
_this.left_data[0].num = 0//r.data.info.green_code_count
|
||
_this.left_data[1].num = 0//r.data.info.red_code_count
|
||
_this.left_data[2].num = 0//r.data.info.yellow_code_count
|
||
// 上报数和未上报数由 renderVehiclePositions 中计算,这里不再更新
|
||
// _this.r_1_data[0].num = r.data.info.report_count
|
||
// _this.r_1_data[1].num = r.data.info.no_report_count
|
||
_this.r_3_data = r.data.police_list.list
|
||
_this.count = r.data.police_list.count
|
||
});
|
||
},
|
||
|
||
getData2() {
|
||
var _this = this;
|
||
$.post('/api/Yq_screen/getHourData', function(r) {
|
||
if (r.code == 1 && r.data && r.data.month_arr) {
|
||
_this.r_2_data = r.data.month_arr;
|
||
// 确保图表已初始化后再更新
|
||
_this.$nextTick(function() {
|
||
if (_this.r_2_data && _this.r_2_data.length > 0) {
|
||
_this.updateChart();
|
||
}
|
||
});
|
||
} else {
|
||
console.warn('获取入园次数统计数据失败:', r.msg || '数据格式错误');
|
||
_this.r_2_data = [];
|
||
}
|
||
}).fail(function(err) {
|
||
console.error('请求入园次数统计数据失败:', err);
|
||
_this.r_2_data = [];
|
||
});
|
||
},
|
||
|
||
updatedv() {
|
||
var data = []
|
||
this.r_3_data.map((item, index) => {
|
||
data.push([
|
||
item.license, item.name, item.trigger_type == 1 ? '自动' : '手动', item.create_time
|
||
])
|
||
})
|
||
this.config = {
|
||
...this.config, data
|
||
}
|
||
},
|
||
updateChart() {
|
||
if (!this.r_2_data || this.r_2_data.length === 0) {
|
||
console.warn('图表数据为空');
|
||
// 显示无数据提示
|
||
if (this.myChart) {
|
||
this.myChart.setOption({
|
||
title: {
|
||
text: '暂无数据',
|
||
textStyle: {
|
||
color: '#94a3b8',
|
||
fontSize: 16
|
||
},
|
||
left: 'center',
|
||
top: 'center'
|
||
},
|
||
xAxis: {show: false},
|
||
yAxis: {show: false},
|
||
series: []
|
||
});
|
||
}
|
||
return;
|
||
}
|
||
|
||
var r = []
|
||
var g = []
|
||
var y = []
|
||
var m = []
|
||
var total = [] // 总入园次数
|
||
|
||
this.r_2_data.forEach((item, index) => {
|
||
var redCount = parseInt(item.red_count) || 0;
|
||
var greenCount = parseInt(item.green_count) || 0;
|
||
var yellowCount = parseInt(item.yellow_count) || 0;
|
||
var totalCount = redCount + greenCount + yellowCount;
|
||
|
||
r.push(redCount);
|
||
g.push(greenCount);
|
||
y.push(yellowCount);
|
||
total.push(totalCount);
|
||
|
||
// 格式化日期:从 "2024-01-01" 转为 "1/1" 或 "01/01"
|
||
var dateStr = item.month || '';
|
||
if (dateStr) {
|
||
var dateParts = dateStr.split('-');
|
||
if (dateParts.length >= 3) {
|
||
var month = parseInt(dateParts[1]);
|
||
var day = parseInt(dateParts[2]);
|
||
// 只显示月/日,更简洁
|
||
m.push(month + '/' + day);
|
||
} else {
|
||
m.push(dateStr);
|
||
}
|
||
} else {
|
||
m.push((index + 1) + '日');
|
||
}
|
||
});
|
||
|
||
var option = {
|
||
color: ["#00FF00", "#FFFF00", "#FF0000"],
|
||
title: {
|
||
text: "",
|
||
show: false
|
||
},
|
||
tooltip: {
|
||
trigger: "axis",
|
||
axisPointer: {
|
||
type: "cross",
|
||
label: {
|
||
backgroundColor: "#6a7985"
|
||
}
|
||
},
|
||
formatter: function(params) {
|
||
var result = params[0].axisValue + '<br/>';
|
||
var totalCount = 0;
|
||
params.forEach(function(item) {
|
||
var value = parseInt(item.value) || 0;
|
||
totalCount += value;
|
||
result += item.marker + ' ' + item.seriesName + ':' + value + '次<br/>';
|
||
});
|
||
result += '<span style="color:#fff;font-weight:bold;">总入园次数:' + totalCount + '次</span>';
|
||
return result;
|
||
}
|
||
},
|
||
legend: {
|
||
data: ["绿码入园", "黄码入园", "红码入园"],
|
||
textStyle: {
|
||
fontSize: 12,
|
||
color: "#fff"
|
||
},
|
||
top: 10,
|
||
right: 10
|
||
},
|
||
grid: {
|
||
left: "3%",
|
||
right: "4%",
|
||
bottom: "15%",
|
||
top: "15%",
|
||
containLabel: true
|
||
},
|
||
xAxis: [{
|
||
type: "category",
|
||
boundaryGap: false,
|
||
data: m,
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: "#D2F1FF",
|
||
width: 1
|
||
}
|
||
},
|
||
axisLabel: {
|
||
color: '#D2F1FF',
|
||
fontSize: 11,
|
||
rotate: 45, // 旋转45度避免重叠
|
||
interval: function(index, value) {
|
||
// 如果数据太多,只显示部分标签
|
||
if (m.length > 15) {
|
||
return index % Math.ceil(m.length / 10) === 0;
|
||
}
|
||
return true;
|
||
}
|
||
},
|
||
splitLine: {
|
||
show: false
|
||
}
|
||
}],
|
||
yAxis: {
|
||
type: "value",
|
||
name: "入园次数",
|
||
nameTextStyle: {
|
||
color: '#D2F1FF',
|
||
fontSize: 12
|
||
},
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: "#D2F1FF",
|
||
width: 1
|
||
}
|
||
},
|
||
splitLine: {
|
||
show: true,
|
||
lineStyle: {
|
||
type: "solid",
|
||
color: "rgba(255,255,255,0.1)"
|
||
}
|
||
},
|
||
axisLabel: {
|
||
show: true,
|
||
color: '#D2F1FF',
|
||
fontSize: 12,
|
||
formatter: function(value) {
|
||
return value;
|
||
}
|
||
}
|
||
},
|
||
series: [{
|
||
name: "绿码入园",
|
||
type: "line",
|
||
stack: "总量",
|
||
smooth: true,
|
||
lineStyle: {
|
||
width: 2,
|
||
color: "#00FF00"
|
||
},
|
||
showSymbol: true,
|
||
symbol: 'circle',
|
||
symbolSize: 4,
|
||
areaStyle: {
|
||
opacity: .6,
|
||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||
offset: 0,
|
||
color: "rgba(0, 255, 0, .6)"
|
||
}, {
|
||
offset: 1,
|
||
color: "rgba(0, 255, 0, 0.05)"
|
||
}])
|
||
},
|
||
emphasis: {
|
||
focus: "series",
|
||
itemStyle: {
|
||
borderColor: '#00FF00',
|
||
borderWidth: 2
|
||
}
|
||
},
|
||
data: g
|
||
}, {
|
||
name: "黄码入园",
|
||
type: "line",
|
||
stack: "总量",
|
||
smooth: true,
|
||
lineStyle: {
|
||
width: 2,
|
||
color: "#FFFF00"
|
||
},
|
||
showSymbol: true,
|
||
symbol: 'circle',
|
||
symbolSize: 4,
|
||
areaStyle: {
|
||
opacity: .6,
|
||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||
offset: 0,
|
||
color: "rgba(255, 255, 0, .6)"
|
||
}, {
|
||
offset: 1,
|
||
color: "rgba(255, 255, 0, 0.05)"
|
||
}])
|
||
},
|
||
emphasis: {
|
||
focus: "series",
|
||
itemStyle: {
|
||
borderColor: '#FFFF00',
|
||
borderWidth: 2
|
||
}
|
||
},
|
||
data: y
|
||
}, {
|
||
name: "红码入园",
|
||
type: "line",
|
||
stack: "总量",
|
||
smooth: true,
|
||
lineStyle: {
|
||
width: 2,
|
||
color: "#FF0000"
|
||
},
|
||
showSymbol: true,
|
||
symbol: 'circle',
|
||
symbolSize: 4,
|
||
areaStyle: {
|
||
opacity: .6,
|
||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||
offset: 0,
|
||
color: "rgba(255, 0, 0, .6)"
|
||
}, {
|
||
offset: 1,
|
||
color: "rgba(255, 0, 0, 0.05)"
|
||
}])
|
||
},
|
||
emphasis: {
|
||
focus: "series",
|
||
itemStyle: {
|
||
borderColor: '#FF0000',
|
||
borderWidth: 2
|
||
}
|
||
},
|
||
data: r
|
||
}]
|
||
};
|
||
|
||
// 设置图表配置
|
||
if (this.myChart) {
|
||
this.myChart.setOption(option, true);
|
||
}
|
||
},
|
||
startTimer() {
|
||
this.timer = setInterval(() => {
|
||
this.currentTime = this.getCurrentDateTime();
|
||
}, 1000);
|
||
|
||
// 定时刷新报警列表(每30秒刷新一次,与车辆数据同步频率一致)
|
||
this.timer3 = setInterval(() => {
|
||
this.getData();
|
||
}, 30000);
|
||
|
||
//触发整点请求数据
|
||
const currentMinutes = new Date().getMinutes();
|
||
const timeUntilNextHour = (60 - currentMinutes) * 60 * 1000;
|
||
this.timer2 = setTimeout(() => {
|
||
setInterval(this.getData2(), 3600000);
|
||
}, timeUntilNextHour);
|
||
},
|
||
stopTimer() {
|
||
clearInterval(this.timer);
|
||
clearInterval(this.timer2);
|
||
clearInterval(this.timer3);
|
||
},
|
||
getCurrentDateTime() {
|
||
const now = new Date();
|
||
const year = now.getFullYear();
|
||
const month = this.padNumber(now.getMonth() + 1);
|
||
const day = this.padNumber(now.getDate());
|
||
const hours = this.padNumber(now.getHours());
|
||
const minutes = this.padNumber(now.getMinutes());
|
||
const seconds = this.padNumber(now.getSeconds());
|
||
return (
|
||
year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
|
||
);
|
||
},
|
||
padNumber(num) {
|
||
return num < 10 ? '0' + num : num;
|
||
},
|
||
toggleSidebar() {
|
||
this.showSidebar = !this.showSidebar
|
||
},
|
||
enterSec() {
|
||
let enters = overlayGroups.enter;
|
||
for (var i in enters) {
|
||
if (this.enterModel.lv.includes(i)) {
|
||
if (this.enterModel.isSec) {
|
||
enters[i].forEach(j => {
|
||
if ([0, ...this.enterModel.sec].includes(j.getExtData().is_ban)) {
|
||
j.show()
|
||
} else {
|
||
console.log(j)
|
||
j.hide();
|
||
}
|
||
});
|
||
} else {
|
||
enters[i].forEach(j => j.show());
|
||
}
|
||
|
||
} else {
|
||
enters[i].forEach(j => j.hide());
|
||
}
|
||
}
|
||
},
|
||
linSearch() {
|
||
this.search = this.linKey;
|
||
vm.form[1].change();
|
||
},
|
||
searchClear() {
|
||
this.search = "";
|
||
this.linKey = "";
|
||
vm.form[1].change();
|
||
},
|
||
|
||
}
|
||
})
|
||
</script>
|
||
|
||
<script type="text/javascript">
|
||
window._AMapSecurityConfig = {
|
||
securityJsCode: 'c093878ad110aeadf3f2e6854ada1f6c',
|
||
}
|
||
</script>
|
||
<script src="https://webapi.amap.com/maps?v=1.4.15&key=31fedc4d3fd2c3438589db99eb2f7182&plugin=AMap.MouseTool"></script>
|
||
<script type="text/javascript">
|
||
const MAP_KEY = "31fedc4d3fd2c3438589db99eb2f7182",
|
||
{
|
||
LngLat
|
||
} = AMap;
|
||
|
||
var buildings = new AMap.Buildings({
|
||
zooms: [13.4, 20],
|
||
zIndex: 10,
|
||
heightFactor: 2, //2倍于默认高度(3D 视图下生效)
|
||
});
|
||
var map = new AMap.Map('container', {
|
||
zoom: 12.3,
|
||
center: new LngLat(107.01706, 29.821693),
|
||
mapStyle: 'amap://styles/light',//d20072f4733f3c023ea36097cd4d9933
|
||
viewMode: "3D",
|
||
terrain: true,
|
||
pitch: 44.5,
|
||
rotation: 0,
|
||
features: ['bg', 'road', 'point'],//默认不要 'building',
|
||
layers: [buildings], //地图图层的数组
|
||
}),
|
||
stopcolor = '#ff0000',
|
||
livcolor = '#e89393',
|
||
lv1color = "#ff0000",
|
||
lv2color = "#a08e8e",
|
||
lv3color = '#d2db00',
|
||
lv4color = '#f29b76',
|
||
|
||
overlayGroups = {
|
||
fac: [],
|
||
car: [],
|
||
enter: {},
|
||
road: [],
|
||
truth: [],
|
||
},
|
||
kk = `107.027841,29.759073;107.034279,29.762086;106.997726,29.824484;107.059954,29.820257;107.043592,29.83791;107.016477,29.871028;106.962953,29.790122`;
|
||
|
||
|
||
map.on('zoomchange', () => {
|
||
if (map.getZoom() > 18) map.setZoom(18);
|
||
});
|
||
// 构造官方卫星图层
|
||
var satelliteLayer = new AMap.TileLayer.Satellite();
|
||
//批量添加图层
|
||
map.add([satelliteLayer]);
|
||
|
||
|
||
function kkRender() {
|
||
strToLL(kk).map(i => {
|
||
new AMap.Marker({
|
||
position: i,
|
||
map: map,
|
||
icon: '/web/static/icon/tuli_kakou.png'
|
||
})
|
||
})
|
||
}
|
||
|
||
kkRender();
|
||
|
||
|
||
showMarkers();
|
||
|
||
function strToLL(str) {
|
||
return str.split(';').map(i => new LngLat(...i.split(',').map(j => +j)))
|
||
}
|
||
|
||
function openInfo(info, pixel) {
|
||
console.log(info)
|
||
const res = `
|
||
<div class="custom-info-window zjinfo" >
|
||
<p> ${info.name}</p>
|
||
<p>停车位总数:${info.stop_vehicle}</p>
|
||
<p>停放车辆数量:${info.stop_vehicle}</p>
|
||
<p>剩余车位数量:${info.stop_vehicle}</p>
|
||
<p>当日入场车次:${info.stop_vehicle}</p>
|
||
<p>当日出场车次:${info.stop_vehicle}</p>
|
||
</div>
|
||
`;
|
||
|
||
// 创建新的信息窗口
|
||
infoWindow = new AMap.InfoWindow({
|
||
content: res,
|
||
offset: new AMap.Pixel(0, 0),
|
||
isCustom: true
|
||
});
|
||
infoWindow.open(map, [pixel.lng, pixel.lat]);
|
||
|
||
setTimeout(() => {
|
||
infoWindow.close();
|
||
}, 5000)
|
||
}
|
||
|
||
// 区域数据
|
||
function lvOverRender(i, sty) {
|
||
var style = {};
|
||
|
||
style = {
|
||
fillOpacity: {
|
||
1: 0,
|
||
2: .5,
|
||
3: .5,
|
||
4: 1,
|
||
},
|
||
fillColor: {
|
||
1: lv1color,
|
||
2: lv2color,
|
||
3: lv3color,
|
||
4: lv4color
|
||
},
|
||
strokeOpacity: {
|
||
1: 1,
|
||
2: 1,
|
||
3: 1,
|
||
4: 1
|
||
},
|
||
strokeColor: {
|
||
1: lv1color,
|
||
2: lv2color,
|
||
3: lv3color,
|
||
4: lv4color
|
||
},
|
||
strokeWeight: {
|
||
1: 3,
|
||
2: 2,
|
||
3: 0,
|
||
4: 0,
|
||
},
|
||
zIndex: {
|
||
1: 21,
|
||
2: 22,
|
||
3: 23,
|
||
4: 24
|
||
},
|
||
strokeStyle: {
|
||
1: 'dashed',//dashed
|
||
2: 'solid',
|
||
3: 'solid',
|
||
4: 'solid',
|
||
},
|
||
}
|
||
|
||
var poy = new AMap.Polygon({
|
||
map: map,
|
||
path: i.info ? strToLL(i.info) : '',
|
||
extData: i,
|
||
...(function () {
|
||
var obj = {};
|
||
for (var j in style) {
|
||
const region_lv = i.region_lv == 20 ? 2 : (i.region_lv == 21 ? 3 : (i.region_lv == 22 ? 1 : 4))
|
||
obj[j] = style[j][region_lv]
|
||
}
|
||
return obj
|
||
})(),
|
||
...(sty || {})
|
||
})
|
||
|
||
map.add(poy)
|
||
poy.on('click', function (e) {
|
||
|
||
$.post('/api/Yq_perimeter/perimeter_detail', {name: e.target.getExtData().name}, function(r) {
|
||
openInfo(r.data, e.lnglat)
|
||
})
|
||
|
||
// // if(e.target.getExtData().type=='stop'){
|
||
// // vm.zjinfor={name:'明宇危化品停车场'}
|
||
// // }else if(e.target.getExtData().type=='live'){
|
||
// // vm.zjinfor={name:'晏家居住区'}
|
||
// // }else{
|
||
// // vm.zjinfor=e.target.getExtData();
|
||
// // }
|
||
// vm.zjinfor = e.target.getExtData();
|
||
//
|
||
// vm.zjinforvis = true;
|
||
// vm.infoVis = false;
|
||
// let pos = e.pixel;
|
||
// vm.infoPos = {
|
||
// left: `${pos.x + 10}px`,
|
||
// top: `${pos.y - 120}px`
|
||
// }
|
||
// var timer;
|
||
// timer && clearTimeout(timer);
|
||
//
|
||
// timer = setTimeout(e => {
|
||
// vm.zjinforvis = false
|
||
// }, 5e3);
|
||
})
|
||
|
||
return poy;
|
||
}
|
||
|
||
var carlist = [],
|
||
timer,
|
||
markerEvent = e => {
|
||
|
||
const pos = e.lnglat;
|
||
const carInfo = e.target.getExtData();
|
||
showClmVehicleInfo(carInfo, pos)
|
||
|
||
};
|
||
|
||
function CarMarkers() {
|
||
this.list = [];
|
||
this.data = [];
|
||
Object.defineProperty(this, 'ids', {
|
||
get() {
|
||
return this.data.map(i => i.id);
|
||
}
|
||
})
|
||
}
|
||
|
||
CarMarkers.prototype.getMarker = function (id) {
|
||
return this.list.filter(i => {
|
||
return i.getExtData().id === id
|
||
})[0];
|
||
}
|
||
CarMarkers.prototype.update = function (list) {
|
||
|
||
let markers = [], marker;
|
||
list.forEach(i => {
|
||
if (!i.longitude || !i.latitude) {
|
||
console.warn('本地车辆数据缺少坐标:', i.vehicleNo);
|
||
return;
|
||
}
|
||
|
||
// 坐标有效性检查
|
||
if (isNaN(i.longitude) || isNaN(i.latitude) ||
|
||
i.longitude < 70 || i.longitude > 140 ||
|
||
i.latitude < 0 || i.latitude > 60) {
|
||
console.warn('本地车辆数据坐标无效:', i.vehicleNo, i.longitude, i.latitude);
|
||
return;
|
||
}
|
||
|
||
// 坐标精度处理
|
||
var lon = parseFloat(i.longitude).toFixed(6);
|
||
var lat = parseFloat(i.latitude).toFixed(6);
|
||
let lnglat = new LngLat(lon, lat);
|
||
i.type = "marker";
|
||
|
||
if (this.ids.includes(i.id)) {
|
||
marker = this.getMarker(i.id);
|
||
|
||
if (lnglat.toString() !== marker.getPosition().toString()) {
|
||
marker.setPosition(lnglat);
|
||
}
|
||
|
||
var _data = marker.getExtData();
|
||
|
||
marker.setIcon('/web/static/icon/' + i.status + '.png'/*_data.vehicle_type?'icon/dingwei_red.png':_data.vec1?'icon/dingwei_blue.png':'icon/dingwei_white.png'*/);
|
||
|
||
|
||
marker.setExtData(i);
|
||
|
||
|
||
} else {
|
||
|
||
marker = new AMap.Marker({
|
||
icon: '/web/static/icon/' + i.status + '.png',//i.vehicle_type?'icon/dingwei_red.png':i.vec1?'icon/dingwei_blue.png':'icon/dingwei_white.png',
|
||
position: lnglat,
|
||
offset: new AMap.Pixel(0, 0),
|
||
zIndex: 30,
|
||
map: map,
|
||
extData: i
|
||
});
|
||
marker.on('click', markerEvent)
|
||
|
||
}
|
||
|
||
markers.push(marker)
|
||
})
|
||
let removeArr = [];
|
||
this.list.forEach(i => {
|
||
if (!markers.includes(i)) {
|
||
removeArr.push(i)
|
||
}
|
||
})
|
||
map.remove(removeArr)
|
||
this.data = list;
|
||
this.list = markers;
|
||
// 更新后应用搜索和车辆码过滤
|
||
if (vm && vm.form && vm.form[1]) {
|
||
vm.form[1].change();
|
||
}
|
||
}
|
||
|
||
|
||
let car_markers = new CarMarkers();
|
||
|
||
vm.car_markers = []
|
||
|
||
let _this = this;
|
||
|
||
function getlist() {
|
||
$.ajax({
|
||
// dataType: "json",
|
||
type: "POST",
|
||
contentType: 'application/json',
|
||
// url: '/api/Yq_screen/screen_list',
|
||
url: 'https://changshoupark.cyuncq.com/cs/posInfo',
|
||
data: JSON.stringify({
|
||
"fenceList": ["CQQA_CQCS"]
|
||
}),
|
||
success: function (posResponse) {
|
||
// if (res.code == 1) {
|
||
// carlist = res.data.vehicle_list;
|
||
//
|
||
// carlist && carlist.forEach(i => {
|
||
// i.status = `${i.qr_color == 1 ? 300 : i.qr_color == 2 ? 200 : 100}`;
|
||
// })
|
||
// car_markers.update(carlist);
|
||
// } else {
|
||
// console.warn('本地车辆数据获取失败:', res.msg);
|
||
// }
|
||
console.log(posResponse)
|
||
if (posResponse.code === 200 && posResponse.data && posResponse.data.length > 0) {
|
||
// 构建同步数据(保留原始WGS84坐标)
|
||
var syncData = {
|
||
code: 200,
|
||
data: posResponse.data.map(function (item) {
|
||
return {
|
||
fenceCode: item.fenceCode,
|
||
danCount: item.danCount,
|
||
posList: item.posList ? item.posList.map(function (vehicle) {
|
||
return {
|
||
vehNo: vehicle.vehNo,
|
||
vehId: vehicle.vehId,
|
||
lon: vehicle.lon,
|
||
lat: vehicle.lat,
|
||
originalLon: vehicle.lon,
|
||
originalLat: vehicle.lat,
|
||
v1: vehicle.v1,
|
||
dir: vehicle.dir,
|
||
posTime: vehicle.posTime,
|
||
color: vehicle.color,
|
||
trans: vehicle.trans
|
||
};
|
||
}) : []
|
||
};
|
||
})
|
||
};
|
||
|
||
// 同步数据到本地数据库
|
||
syncVehicleToLocal(syncData);
|
||
|
||
// 处理地图展示数据(坐标转换)
|
||
var processedData = posResponse.data.map(function (item) {
|
||
if (item.posList && item.posList.length > 0) {
|
||
item.posList = item.posList.map(function (vehicle) {
|
||
var converted = wgs84ToGcj02(vehicle.lon, vehicle.lat);
|
||
vehicle.lon = converted.lon;
|
||
vehicle.lat = converted.lat;
|
||
|
||
return vehicle;
|
||
});
|
||
}
|
||
return item;
|
||
});
|
||
|
||
|
||
renderVehiclePositions(processedData);
|
||
} else {
|
||
console.log('未获取到车辆位置数据');
|
||
}
|
||
},
|
||
error: function (xhr, status, error) {
|
||
console.warn('本地车辆数据请求失败:', error);
|
||
}
|
||
});
|
||
|
||
|
||
}
|
||
|
||
// 同步车辆数据到本地数据库(异步执行,设置超时避免阻塞)
|
||
// 同步时会根据企业周界规则自动校验并生成报警
|
||
function syncVehicleToLocal(data) {
|
||
$.ajax({
|
||
type: "POST",
|
||
contentType: 'application/json',
|
||
url: '/api/Yq_data_handle/sync_vehicle',
|
||
data: JSON.stringify(data),
|
||
timeout: 30000, // 30秒超时
|
||
async: true, // 确保异步执行
|
||
success: function (res) {
|
||
if (res.code == 1 || res.code == 200) {
|
||
console.log('车辆数据同步成功:', res.data);
|
||
// 如果有新报警生成,刷新滚动报警列表
|
||
if (res.data && res.data.alarm_count > 0) {
|
||
console.log('生成新报警:', res.data.alarm_count, '条');
|
||
vm.getData(); // 刷新报警列表
|
||
}
|
||
} else {
|
||
console.warn('车辆数据同步失败:', res.msg);
|
||
}
|
||
},
|
||
error: function (xhr, status, error) {
|
||
if (status === 'timeout') {
|
||
console.warn('车辆数据同步超时');
|
||
} else {
|
||
console.warn('车辆数据同步请求失败:', error);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
getlist();
|
||
setInterval(function () {
|
||
getlist();
|
||
}, 20000)
|
||
|
||
function getVehiclePositionInfo() {
|
||
requestVehiclePositions();
|
||
}
|
||
|
||
function wgs84ToGcj02(lon, lat) {
|
||
var a = 6378245.0;
|
||
var ee = 0.00669342162296594323;
|
||
|
||
if (outOfChina(lon, lat)) {
|
||
return {lon: lon, lat: lat};
|
||
}
|
||
|
||
var dLat = transformLat(lon - 105.0, lat - 35.0);
|
||
var dLon = transformLon(lon - 105.0, lat - 35.0);
|
||
var radLat = lat / 180.0 * Math.PI;
|
||
var magic = Math.sin(radLat);
|
||
magic = 1 - ee * magic * magic;
|
||
var sqrtMagic = Math.sqrt(magic);
|
||
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * Math.PI);
|
||
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * Math.PI);
|
||
|
||
return {
|
||
lon: lon + dLon,
|
||
lat: lat + dLat
|
||
};
|
||
}
|
||
|
||
function outOfChina(lon, lat) {
|
||
return (lon < 72.004 || lon > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
|
||
}
|
||
|
||
function transformLat(lon, lat) {
|
||
var ret = -100.0 + 2.0 * lon + 3.0 * lat + 0.2 * lat * lat + 0.1 * lon * lat + 0.2 * Math.sqrt(Math.abs(lon));
|
||
ret += (20.0 * Math.sin(6.0 * lon * Math.PI) + 20.0 * Math.sin(2.0 * lon * Math.PI)) * 2.0 / 3.0;
|
||
ret += (20.0 * Math.sin(lat * Math.PI) + 40.0 * Math.sin(lat / 3.0 * Math.PI)) * 2.0 / 3.0;
|
||
ret += (160.0 * Math.sin(lat / 12.0 * Math.PI) + 320 * Math.sin(lat * Math.PI / 30.0)) * 2.0 / 3.0;
|
||
return ret;
|
||
}
|
||
|
||
function transformLon(lon, lat) {
|
||
var ret = 300.0 + lon + 2.0 * lat + 0.1 * lon * lon + 0.1 * lon * lat + 0.1 * Math.sqrt(Math.abs(lon));
|
||
ret += (20.0 * Math.sin(6.0 * lon * Math.PI) + 20.0 * Math.sin(2.0 * lon * Math.PI)) * 2.0 / 3.0;
|
||
ret += (20.0 * Math.sin(lon * Math.PI) + 40.0 * Math.sin(lon / 3.0 * Math.PI)) * 2.0 / 3.0;
|
||
ret += (150.0 * Math.sin(lon / 12.0 * Math.PI) + 300.0 * Math.sin(lon / 30.0 * Math.PI)) * 2.0 / 3.0;
|
||
return ret;
|
||
}
|
||
|
||
function requestVehiclePositions() {
|
||
$.ajax({
|
||
url: 'https://changshoupark.cyuncq.com/cs/posInfo',
|
||
type: 'POST',
|
||
contentType: 'application/json',
|
||
data: JSON.stringify({
|
||
"fenceList": ["CQQA_CQCS"]
|
||
}),
|
||
success: function (posResponse) {
|
||
console.log('车辆位置数据:', posResponse);
|
||
if (posResponse.code === 200 && posResponse.data && posResponse.data.length > 0) {
|
||
var processedData = posResponse.data.map(function (item) {
|
||
if (item.posList && item.posList.length > 0) {
|
||
item.posList = item.posList.map(function (vehicle) {
|
||
var converted = wgs84ToGcj02(vehicle.lon, vehicle.lat);
|
||
vehicle.lon = converted.lon;
|
||
vehicle.lat = converted.lat;
|
||
|
||
return vehicle;
|
||
});
|
||
}
|
||
return item;
|
||
});
|
||
|
||
|
||
renderVehiclePositions(processedData);
|
||
} else {
|
||
console.log('未获取到车辆位置数据');
|
||
}
|
||
},
|
||
error: function (xhr, status, error) {
|
||
console.error('请求车辆位置信息失败:', error);
|
||
}
|
||
});
|
||
}
|
||
|
||
function renderVehiclePositions(data) {
|
||
if (window.clmVehicleMarkers) {
|
||
map.remove(window.clmVehicleMarkers);
|
||
window.clmVehicleMarkers = [];
|
||
} else {
|
||
window.clmVehicleMarkers = [];
|
||
}
|
||
let new_car_data = []
|
||
data.forEach(function (item, index) {
|
||
if (item.posList && item.posList.length > 0) {
|
||
item.posList.forEach(function (vehicle, vehicleIndex) {
|
||
|
||
if (!vehicle.lon || !vehicle.lat ||
|
||
isNaN(vehicle.lon) || isNaN(vehicle.lat) ||
|
||
vehicle.lon < 70 || vehicle.lon > 140 ||
|
||
vehicle.lat < 0 || vehicle.lat > 60) {
|
||
return;
|
||
}
|
||
// 车辆码颜色统计已移到后端接口处理,这里不再统计
|
||
var lon = parseFloat(vehicle.lon).toFixed(6);
|
||
var lat = parseFloat(vehicle.lat).toFixed(6);
|
||
new_car_data.push({
|
||
...vehicle,
|
||
id: vehicleIndex,
|
||
vehicleNo: vehicle.vehNo,
|
||
longitude: lon,
|
||
latitude: lat,
|
||
status: 200,//vehicle.color == 1 ? 300 : vehicle.color == 2 ? 200 : 100
|
||
type: 'clm_vehicle',
|
||
vehicleNo: vehicle.vehNo,
|
||
speed: vehicle.v1,
|
||
direction: vehicle.dir,
|
||
posTime: vehicle.posTime,
|
||
color: vehicle.color,
|
||
trans: vehicle.trans,
|
||
vehId: vehicle.vehId,
|
||
fenceCode: item.fenceCode,
|
||
danCount: item.danCount,
|
||
sequence: index + 1,
|
||
originalLon: vehicle.lon,
|
||
originalLat: vehicle.lat
|
||
})
|
||
// var marker = new AMap.Marker({
|
||
// position: new AMap.LngLat(lon, lat),
|
||
// map: map,
|
||
// icon: '/web/static/icon/200.png',
|
||
// offset: new AMap.Pixel(-12, -24),
|
||
// zIndex: 50 + index,
|
||
// extData: {
|
||
// type: 'clm_vehicle',
|
||
// vehicleNo: vehicle.vehNo,
|
||
// speed: vehicle.v1,
|
||
// direction: vehicle.dir,
|
||
// posTime: vehicle.posTime,
|
||
// color: vehicle.color,
|
||
// trans: vehicle.trans,
|
||
// vehId: vehicle.vehId,
|
||
// fenceCode: item.fenceCode,
|
||
// danCount: item.danCount,
|
||
// sequence: index + 1,
|
||
// originalLon: vehicle.lon,
|
||
// originalLat: vehicle.lat
|
||
// }
|
||
// });
|
||
//
|
||
// marker.on('click', function (e) {
|
||
// var data = e.target.getExtData();
|
||
// showClmVehicleInfo(data, e.lnglat);
|
||
// });
|
||
|
||
// window.clmVehicleMarkers.push(marker);
|
||
});
|
||
}
|
||
});
|
||
|
||
car_markers.update(new_car_data)
|
||
|
||
// 收集所有车牌号
|
||
var vehicleNos = new_car_data.map(function(item) {
|
||
return item.vehicleNo;
|
||
});
|
||
|
||
// 从后端获取车辆的车辆码颜色(qr_color)信息
|
||
$.ajax({
|
||
type: "POST",
|
||
contentType: 'application/json',
|
||
url: '/api/Yq_data_handle/get_vehicle_code_colors',
|
||
data: JSON.stringify({ vehicles: vehicleNos }),
|
||
success: function(res) {
|
||
if (res.code == 1 && res.data) {
|
||
var vehicleCodeMap = res.data; // {车牌号: qr_color}
|
||
var greenCount = 0; // 绿码车辆数
|
||
var yellowCount = 0; // 黄码车辆数
|
||
var redCount = 0; // 红码车辆数
|
||
|
||
// 更新每个车辆的 status 和统计数量
|
||
vehicleNos.forEach(function(vehNo) {
|
||
var qrColor = vehicleCodeMap[vehNo];
|
||
// 根据车辆码颜色设置 status: 1=绿码=300, 2=黄码=200, 3=红码=100
|
||
var status = 200; // 默认黄码
|
||
if (qrColor == 1) {
|
||
status = 300; // 绿码
|
||
greenCount++;
|
||
} else if (qrColor == 2) {
|
||
status = 200; // 黄码
|
||
yellowCount++;
|
||
} else if (qrColor == 3) {
|
||
status = 100; // 红码
|
||
redCount++;
|
||
} else {
|
||
yellowCount++; // 默认算作黄码
|
||
}
|
||
|
||
// 更新对应车辆的 status
|
||
car_markers.list.forEach(function(marker) {
|
||
var data = marker.getExtData();
|
||
if (data.vehicleNo === vehNo) {
|
||
data.status = status;
|
||
marker.setExtData(data);
|
||
}
|
||
});
|
||
});
|
||
|
||
// 更新左侧统计数据
|
||
vm.left_data[0].num = greenCount; // 绿码车辆
|
||
vm.left_data[1].num = redCount; // 红码车辆
|
||
vm.left_data[2].num = yellowCount; // 黄码车辆
|
||
|
||
// 更新车辆码颜色后,重新应用搜索和过滤
|
||
if (vm && vm.form && vm.form[1]) {
|
||
vm.form[1].change();
|
||
}
|
||
}
|
||
},
|
||
error: function(err) {
|
||
console.warn('获取车辆码颜色失败:', err);
|
||
// 如果获取失败,使用总数作为黄码车辆数(兼容旧逻辑)
|
||
vm.left_data[2].num = vehicleNos.length;
|
||
}
|
||
});
|
||
|
||
// 计算上报数和未上报数
|
||
// 将API车辆列表发送到后端,与司机端上报记录对比
|
||
$.ajax({
|
||
type: "POST",
|
||
contentType: 'application/json',
|
||
url: '/api/Yq_data_handle/get_report_count',
|
||
data: JSON.stringify({ vehicles: vehicleNos }),
|
||
success: function(res) {
|
||
if (res.code == 1) {
|
||
vm.r_1_data[0].num = res.data.report_count || 0; // 当日入园上报数
|
||
vm.r_1_data[1].num = res.data.no_report_count || 0; // 当日入园未上报数
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
function showClmVehicleInfo(vehicleData, lnglat) {
|
||
var qr_color = '';
|
||
if (vehicleData.color == 1) {
|
||
qr_color = '蓝牌车辆';
|
||
} else if (vehicleData.color == 2) {
|
||
qr_color = '黄牌车辆';
|
||
} else if (vehicleData.color == 3) {
|
||
qr_color = '黑牌车辆';
|
||
} else if (vehicleData.color == 4) {
|
||
qr_color = '白牌车辆';
|
||
}
|
||
|
||
const res = `
|
||
<div class="carinfo" >
|
||
<div class="i-tit">${vehicleData.vehicleNo} (序号: ${vehicleData.sequence || '-'})</div>
|
||
<div class="i-main">
|
||
<div class="im-item">车牌号:${vehicleData.vehicleNo}</div>
|
||
<div class="im-item">序号:${vehicleData.sequence || '-'}</div>
|
||
<div class="im-item">速度:${vehicleData.speed} km/h</div>
|
||
<div class="im-item">方向:${vehicleData.direction}°</div>
|
||
<div class="im-item">行业类别:${vehicleData.trans}</div>
|
||
<div class="im-item">车牌颜色:${qr_color}</div>
|
||
<div class="im-item">围栏编号:${vehicleData.fenceCode || '-'}</div>
|
||
<div class="im-item">危险品车数:${vehicleData.danCount || '-'}</div>
|
||
<div class="im-item">定位时间:${new Date(vehicleData.posTime * 1000).toLocaleString()}</div>
|
||
<div class="btn_map">
|
||
<button onclick="bjlist('${vehicleData.vehicleNo}')" style="display: block;width: 100%;">查看报警</button>
|
||
<button onclick="cardetail('${vehicleData.vehicleNo}')" style="width: 45%;">车辆信息</button>
|
||
<button onclick="parklist('${vehicleData.vehicleNo}')" style="width: 45%;float: right;">入园记录</button>
|
||
<button onclick="waybill_list('${vehicleData.vehicleNo}')" style="width: 45%;">运单记录</button>
|
||
<button onclick="history('${vehicleData.vehicleNo}')" style="width: 45%;float: right;">车辆轨迹</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
`
|
||
|
||
infoWindow = new AMap.InfoWindow({
|
||
content: res,
|
||
offset: new AMap.Pixel(0, -30),
|
||
isCustom: true
|
||
});
|
||
infoWindow.open(map, lnglat);
|
||
|
||
setTimeout(() => {
|
||
infoWindow.close();
|
||
}, 5000)
|
||
}
|
||
|
||
// getVehiclePositionInfo();
|
||
|
||
setInterval(function () {
|
||
getlist();
|
||
}, 30000);
|
||
|
||
function showMarkers() {
|
||
const icons = {
|
||
_: '/web/static/icon/ht.png',
|
||
g: '/web/static/icon/fq.png',
|
||
u: '/web/static/icon/lv3.png',
|
||
c: '/web/static/icon/lv4.png',
|
||
l: '/web/static/icon/2.png',
|
||
y: '/web/static/icon/d.png',
|
||
v: '/web/static/icon/rs.png',
|
||
d: '/web/static/icon/w.png',
|
||
h: '/web/static/icon/ws.png',
|
||
s: '/web/static/icon/lv1.png',
|
||
b: '/web/static/icon/ot.png',
|
||
m: '/web/static/icon/pp.png',
|
||
f: '/web/static/icon/fs.png',
|
||
p: '/web/static/icon/b.png',
|
||
stop: '/web/static/icon/p.png'
|
||
}
|
||
let geoJson = markers_pos.map(i => {
|
||
return {
|
||
path: i[0],
|
||
type: i[1]
|
||
}
|
||
}),
|
||
markers = geoJson.map(i => {
|
||
return new AMap.Marker({
|
||
position: strToLL(i.path)[0],
|
||
icon: new AMap.Icon({
|
||
size: new AMap.Size(23, 23),
|
||
image: icons[i.type],
|
||
imageSize: new AMap.Size(15, 15),
|
||
}),
|
||
anchor: 'bottom-center',
|
||
offset: new AMap.Pixel(0, 0),
|
||
content: !icons[i.type] && `<span style="color:#fff">${i.type}</span>`,
|
||
map: map,
|
||
extData: i,
|
||
})
|
||
});
|
||
|
||
|
||
overlayGroups.fac = markers;
|
||
return markers;
|
||
}
|
||
|
||
overlayGroups.truth = {nor: [], no: [], warn: []};
|
||
var truthColor = {nor: '#1b2538', warn: '#46A162', no: '#6A005F'}
|
||
|
||
getData()
|
||
|
||
function getData() {
|
||
$.post('/api/Yq_perimeter/perimeter_list', function(r) {
|
||
dataHandle(r.data)
|
||
})
|
||
}
|
||
|
||
function bjlist(id) {
|
||
window.open('/index/datav/bjlist?id=' + id)
|
||
};
|
||
|
||
function cardetail(id) { //车辆详情
|
||
window.open('/index/datav/car_detail?id=' + id)
|
||
};
|
||
|
||
function parklist(id) { //入园记录
|
||
window.open('/index/datav/park_list?id=' + id)
|
||
};
|
||
|
||
function waybill_list(id) { //运单记录
|
||
window.open('/index/datav/waybill_list?id=' + id)
|
||
};
|
||
|
||
function history(id) { //车辆轨迹
|
||
window.open('/index/datav/vehicle_history?id=' + id)
|
||
};
|
||
|
||
function dataHandle(data) {
|
||
let lv1 = [], lv2 = [], lv3 = [], lv4 = [];
|
||
data.filter(function (i) {
|
||
var res;
|
||
if (i.region_lv === 22 && i.region_type === 8) { //停车场
|
||
//res = false;
|
||
overlayGroups.fac.push(lvOverRender(i, {
|
||
fillColor: stopcolor,
|
||
fillOpacity: .3,
|
||
strokeColor: stopcolor,
|
||
extData: {
|
||
type: 'stop',
|
||
name: i.name,
|
||
}
|
||
}))
|
||
} else if (i.region_lv === 21 && i.region_type === 3) { //居住区
|
||
//res = false;
|
||
overlayGroups.fac.push(lvOverRender(i, {
|
||
fillColor: livcolor,
|
||
fillOpacity: .5,
|
||
strokeColor: livcolor,
|
||
extData: {
|
||
type: 'live',
|
||
name: i.name
|
||
}
|
||
}))
|
||
} else if (i.region_lv === 20 && i.region_type === 4) { //森林防护区
|
||
overlayGroups.fac.push(lvOverRender(i, {
|
||
fillColor: '#26c533',
|
||
strokeColor: '#26c533',
|
||
extData: {
|
||
type: 'tree',
|
||
name: i.name
|
||
}
|
||
}))
|
||
} else {
|
||
res = true;
|
||
}
|
||
return res;
|
||
|
||
}).forEach(i => {
|
||
|
||
if (i.info) {
|
||
let stys = {}
|
||
if (i.region_type == 5) {
|
||
stys = {
|
||
[i.id]: {
|
||
fillColor: '#000000',
|
||
fillOpacity: .1,
|
||
strokeColor: '#000000',
|
||
}
|
||
}
|
||
}
|
||
var over = lvOverRender(i, stys[i.id] || {})
|
||
switch (i.region_lv) {
|
||
case 22:
|
||
lv1.push(over);
|
||
break;
|
||
case 20:
|
||
lv2.push(over);
|
||
break;
|
||
case 21:
|
||
lv3.push(over);
|
||
break;
|
||
default:
|
||
lv4.push(over);
|
||
break;
|
||
|
||
}
|
||
|
||
}
|
||
})
|
||
overlayGroups.enter = {
|
||
lv1, lv2, lv3, lv4
|
||
}
|
||
}
|
||
|
||
</script>
|
||
|
||
|
||
</body>
|
||
|
||
</html>
|