btxtgxq-system-city/src/main/resources/static/route/userlocation/map_summary.html
wans 01ca20b474 修改所有片长为网格长 所有N员为专管员
修改地图首页点击网格查看详情数据为空的问题
2021-07-05 12:54:56 +08:00

617 lines
29 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<base href="/servicecity/">
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="icon" type="image/ico" href="assets/favicon.ico"/>
<link type="text/css" rel="stylesheet" href="assets/js/vendor/bootstrap/css/bootstrap.min.css"/>
<link type="text/css" rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" type="text/css" href="assets/js/easyui/themes/default/easyui.css"/>
<link rel="stylesheet" type="text/css" href="assets/js/easyui/themes/icon.css"/>
<link type="text/css" rel="stylesheet" href="assets/css/minimal.css"/>
<link rel="stylesheet" type="text/css" href="assets/css/system.css"/>
<link rel="stylesheet" type="text/css" href="assets/css/system-style1.css"/>
<style>
#mapBox {height: 100%; position: relative;}
#mapBox #mapMenuBox {position: absolute; width: 250px; height: 400px; top: 0px; left: 0px; background-color: white; z-index: 1000; box-shadow: 3px 3px 6px #2e323e; font-size: 0;}
#mapBox #mapMenuBox #mapMenuLeft {float:left;width: 50px; height: 100%; background-color: #2e323e;}
#mapBox #mapMenuBox #mapMenuRight {float: right; width: 200px; height: 100%;}
#mapBox #mapContainer {width:100%;height:100%;}
#mapBox #mapMenuBox #toggleButton {position: absolute; bottom: -21px; left: 100px; background-color: white; box-shadow: 0px 3px 2px #2e323e; width: 50px; cursor: pointer; text-align: center; font-size: 15px;}
#mapMenuLeft ul {padding: 0;}
#mapMenuLeft ul .active {background-color: #5786e7}
#mapMenuLeft ul li {cursor: pointer; padding: 5px 0;}
#mapMenuLeft ul li a {display: block;text-align: center; color: #FFF;}
#mapMenuLeft ul li a:hover {text-decoration: none;}
#mapMenuLeft ul li a span {font-size: 14px;}
#mapMenuLeft ul li .fa {font-size: 15px;}
#mapMenuLeft ul li a span {display: block}
#mapBox #mapMenuBox #mapMenuRight .menu-content {width: 100%; height: 100%; overflow: auto; display: none;}
#mapBox #mapMenuBox #mapMenuRight .content-active {display: block;}
.icon-area {
background: url('assets/images/city/icon-area.png') no-repeat !important;
background-size: 16px !important;
}
.icon-case-type {
background:url('assets/images/city/icon-case-type.png') no-repeat !important;
background-size: 16px !important;
}
.icon-person {
background:url('assets/images/city/icon-person.png') no-repeat !important;
background-size: 16px !important;
}
.icon-person-type {
background:url('assets/images/city/icon-person-type.png') no-repeat !important;
background-size: 16px !important;
}
.icon-department {
background:url('assets/images/city/icon-department.png') no-repeat !important;
background-size: 16px !important;
}
</style>
</head>
<body>
<div id="wrap" style="padding: 0;">
<div id="mapBox">
<div id="mapMenuBox">
<div id="mapMenuLeft">
<ul>
<li id="menuBtn1" class="menu-btn active">
<a href="javascript: void(0);">
<i class="fa fa-map"></i>
<span>网格</span>
</a>
</li>
<li id="menuBtn2" class="menu-btn">
<a href="javascript: void(0);">
<i class="fa fa-pencil-square-o"></i>
<span>案件</span>
</a>
</li>
<li id="menuBtn3" class="menu-btn">
<a href="javascript: void(0);">
<i class="fa fa-map-marker"></i>
<span>定位</span>
</a>
</li>
</ul>
</div>
<div id="mapMenuRight">
<div id="menuBtn1Content" class="menu-content content-active">
<ul id="areaTree"></ul>
</div>
<div id="menuBtn2Content" class="menu-content">
<ul id="caseTypeTree"></ul>
</div>
<div id="menuBtn3Content" class="menu-content">
<ul id="personTree"></ul>
</div>
</div>
<div id="toggleButton">
<i id="arrow" class="fa fa-angle-double-up"></i>
</div>
</div>
<div style="padding:5px;border:1px solid silver;background-color:#FFF;position:absolute;top:5px;right:5px;z-index:10000;" v-cloak>
<span>经度: <i>{{location.lng}}</i></span>,
<span>纬度: <i>{{location.lat}}</i></span>
</div>
<div id="mapContainer"></div>
</div>
</div>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=oWU9RD4ihDHAafexgI6XOrTK8lDatRju"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/AreaRestriction/1.2/src/AreaRestriction_min.js"></script>
<script type="text/javascript" src="assets/js/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="assets/js/vendor/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="assets/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="assets/js/easyui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="assets/js/vue.min.js"></script>
<script type="text/javascript" src="assets/js/common.js"></script>
<script type="text/javascript" src="assets/js/baidu-map-0.0.1.min.js"></script>
<script type="text/javascript">
new Vue({
el: '#wrap',
data: {
map: null,
location: {
lng: 0,
lat: 0
},
borderColor: {
red: 127,
green: 127,
blue: 127
},
areaColor: {
red: 127,
green: 127,
blue: 127
},
baseAreas: [],
areas: [],
drawAreas: [],
location: {
lng: 0,
lat: 0
},
personTreeSelectNodes: [],
isAllCheck: false,
isTakeUserArea: false
},
methods: {
// 初始化地区
initMap: function() {
var self = this;
top.restAjax.get(top.restAjax.path('api/config/getmapinit', []), {}, null, function(code, data) {
// 初始化基础片区
if(typeof(data.areaPoints) != 'undefined' && data.areaPoints != null && data.areaPoints != '') {
var areaPoints = data.areaPoints.split('$');
for(var i = 0; i < areaPoints.length; i++) {
var item = areaPoints[i];
var points = item.split(';');
var pointArray = [];
for(var j = 0; j < points.length; j++) {
var point = points[j].split(',');
pointArray.push({
lng: point[0],
lat: point[1]
})
}
self.baseAreas.push({
id: i,
name: null,
points: pointArray
})
}
}
// 初始化地图
self.map = new BaiduMap('mapContainer', {
onMouseMove: function(e) {
self.location.lng = e.point.lng;
self.location.lat = e.point.lat;
}
});
self.map.setCenterAndZoom({
lng: data.mapLng,
lat: data.mapLat
}, 13);
var mapTypeControl = new BMap.MapTypeControl({
mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP],
});
self.map.getMap().addControl(mapTypeControl);
var areaBounds = new BMap.Bounds(new BMap.Point(109.591583, 40.458812),new BMap.Point(110.505699, 40.826688));
try {
BMapLib.AreaRestriction.setBounds(baiduMap.getMap(), areaBounds);
} catch (e) {
console.log(e);
}
// 必须
self.map.setDefaultConfig();
}, function(code, data) {
top.dialog.msg(data.msg);
});
},
// 划基础区域片
takeBaseArea: function() {
var self = this;
for(var i = 0, item = self.baseAreas[i]; item = self.baseAreas[i++];) {
}
},
// 添加基础节点
addBasePoint: function(points) {
var self = this;
for(var i = 0, item = self.baseAreas[i]; item = self.baseAreas[i++];) {
for(var j = 0, point = item.points[j]; point = item.points[j++];) {
points.push({
lng: point.lng,
lat: point.lat
})
}
}
},
// 划片
takeArea: function(data, addPoints) {
var self = this;
self.drawAreas.splice(0, self.drawAreas.length);
var allPointArray = [];
// self.addBasePoint(allPointArray);
for(var i = 0, item = data[i]; item = data[i++];) {
var points = [];
for(var j = 0, point = item.pointArray[j]; point = item.pointArray[j++];) {
points.push(
new BaiduMap.Point(point.lng, point.lat)
)
}
allPointArray = allPointArray.concat(points);
// 展示默认背景
self.map.initBackgroundGrid({
gridArray: [
{
id: item.gridId,
label: item.gridName,
fillColor: item.fillColor,
pointArray: points
}
],
onClick: function(item) {
if(self.isTakeUserArea) {
self.getAreaUsersInfo(item.id);
}
}
});
}
if(typeof(addPoints) != 'undefined') {
allPointArray = allPointArray.concat(addPoints);
}
/*self.map.resetViewport(allPointArray);*/
},
// 点击获取片区人员信息
getAreaUsersInfo: function(gridId) {
console.log(gridId)
top.dialog.open({
title: '人员详情',
url: top.restAjax.path('route/userlocation/list-user-detail.html?gridId={gridId}', [gridId]),
width: '400px',
height: '400px'
})
},
// 两办一镇片区
initTownArea: function() {
var self = this;
var loadLayerIndex;
self.isTakeUserArea = false;
self.areas.splice(0, self.areas.length);
top.restAjax.get(top.restAjax.path('api/areapoints/listtownareaandpointsbygridservice', []), {}, null, function(code, data) {
// 划片
self.takeArea(data);
}, function(code, data) {
top.dialog.msg(data.msg);
});
},
// 社区片区
initCommunityArea: function() {
var self = this;
self.isTakeUserArea = false;
self.areas.splice(0, self.areas.length);
top.restAjax.get(top.restAjax.path('api/communitypoints/listallcommunityandpointsbygridservice', []), {}, null, function(code, data) {
// 划片
self.takeArea(data);
}, function(code, data) {
top.dialog.msg(data.msg);
});
},
// 人员划片
takeUserArea: function(data, addPoints) {
var self = this;
self.isTakeUserArea = true;
self.areas.splice(0, self.areas.length);
self.takeArea(data, addPoints);
},
// 网格长片区
initCommunityBossArea: function(level) {
var self = this;
var loadLayerIndex;
top.restAjax.get(top.restAjax.path('api/userpoints/listuserandpointsbylevelbygridservice/{level}', [level]), {}, null, function(code, data) {
// 划片
self.takeUserArea(data);
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
},
// 专管员片区
initNPersonArea: function(departmentId) {
var self = this;
var loadLayerIndex;
top.restAjax.get(top.restAjax.path('api/userpoints/listuserandpointsbydepartmentbygridservice/{departmentId}', [departmentId]), {}, null, function(code, data) {
// 划片
self.takeUserArea(data);
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
},
// 初始化地区选择树
initAreaTree: function() {
var self = this;
$('#areaTree').tree({
url: top.restAjax.path('api/areapoints/listareatree', []),
method: 'get',
lines: true,
onSelect: function(node) {
self.map.clearMap();
self.takeBaseArea();
var id = node.id;
if(id == 'town') {
self.initTownArcommunityea();
} else if(id == 'community') {
self.initCommunityArea();
} else if(id == 'areaLevel1') {
self.initCommunityBossArea(1);
} else if(id == 'areaLevel2') {
self.initCommunityBossArea(2);
} else if(id == 'areaLevel3') {
self.initCommunityBossArea(3);
} else if(id == 'areaLevel4') {
self.initCommunityBossArea(4);
} else if(id == 'areaLevel5') {
self.initCommunityBossArea(5);
} else if(id.indexOf('n_') != -1) {
self.initNPersonArea(id.replace(/n_/g, ''));
} else if(id.indexOf('areaUser_') != -1) {
var loadLayerIndex;
top.restAjax.post(top.restAjax.path('api/userpoints/listuserandpointsbyuseridsbygridservice', []), {
userIds: id.replace(/areaUser_/g, '')
}, null, function(code, data) {
self.takeUserArea(data);
}, function (code, data) {
top.dialog.msg(data.msg)
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
}
},
onLoadSuccess: function() {
var node = $('#areaTree').tree('find', 'areaLevel3');
$('#areaTree').tree('select', node.target);
$("#areaTree").tree("collapseAll");
}
});
},
// 查看案件流程
caseFlow: function(id) {
top.dialog.open({
url: top.restAjax.path('route/reportcase/list_case_log.html?reportCaseId={id}', [id]),
title: '案件流程',
width: '600px',
height: '500px',
onClose: function() {}
});
},
// 初始化案件类别
initCaseTypeTree: function() {
var self = this;
$('#caseTypeTree').tree({
url: top.restAjax.path('api/dict/listeasyuitreedict/46d108b2-4ef9-4f6f-b30c-0c700e3ee852', []),
method: 'get',
checkbox: true,
lines: true,
onCheck: function(node, checked) {
self.map.clearMap();
self.takeBaseArea();
var caseTypes = $('#caseTypeTree').tree('getChecked');
var ids = [];
for(var i = 0, item = caseTypes[i]; item = caseTypes[i++];) {
ids.push(item.id.replace(/case_/g, ''));
}
if(ids.length > 0) {
var loadLayerIndex;
top.restAjax.post('api/reportcase/listreportcasehandlebycasetypes', {
ids: ids
}, null, function(code, data) {
// 描点
var points = [];
self.addBasePoint(points);
for(var i = 0, item = data[i]; item = data[i++];) {
points.push({
lng: item.caseLongitude,
lat: item.caseLatitude
});
self.addMarker({
id: item.reportCaseId,
point: {
lng: item.caseLongitude,
lat: item.caseLatitude
},
onClick: function(id) {
self.caseFlow(id);
}
});
}
self.resetViewport(points);
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
}
}
});
},
// 打开人员定位
openUserLocus: function(data) {
top.dialog.open({
url: top.restAjax.path('route/userlocation/map_userlocus.html?userId={id}', [data.id]),
title: data.name +'当前轨迹',
width: '800px',
height: '600px',
onClose: function() {}
})
},
// 初始化人员树
initPersonTree: function() {
var self = this;
$('#personTree').tree({
url: top.restAjax.path('api/userpoints/listusereasyuitree', []),
method: 'get',
checkbox: true,
cascadeCheck: false,
lines: true,
onLoadSuccess: function() {
$("#personTree").tree("collapseAll");
},
onDblClick: function(node) {
var existIndex = -1;
for(var i = 0; i < self.personTreeSelectNodes.length; i++) {
var item = self.personTreeSelectNodes[i];
if(node.id == item.id) {
existIndex = i;
break;
}
}
var childrens = $('#personTree').tree('getChildren', node.target);
if(childrens.length == 0) {
return;
}
if(existIndex > -1) {
self.isAllCheck = true;
for(var i = 0; i < childrens.length; i++) {
var item = childrens[i];
if(i == childrens.length - 1) {
self.isAllCheck = false;
}
$('#personTree').tree('uncheck', item.target);
}
self.personTreeSelectNodes.splice(existIndex, 1);
} else {
self.isAllCheck = true;
for(var i = 0; i < childrens.length; i++) {
var item = childrens[i];
if(i == childrens.length - 1) {
self.isAllCheck = false;
}
$('#personTree').tree('check', item.target);
}
self.personTreeSelectNodes.push(node);
}
},
onCheck: function(node, checked) {
if(self.isAllCheck) {
return;
}
self.map.clearMap();
self.takeBaseArea();
var users = $('#personTree').tree('getChecked');
var ids = [];
for(var i = 0, item = users[i]; item = users[i++];) {
if(item.id.indexOf('user_') > -1) {
ids.push(item.id.replace(/user_/g, ''));
}
}
if(ids.length > 0) {
var loadLayerIndex;
top.restAjax.post('api/userlocation/listtodayuseronlinelastlocation', {
ids: ids
}, null, function(code, data) {
if(data.length == 0) {
top.dialog.msg('人员今天暂无坐标信息');
return;
}
ids.splice(0, ids.length);
var points = [];
for(var i = 0, item = data[i]; item = data[i++];) {
ids.push(item.creator);
points.push({
lng: item.userLongitude,
lat: item.userLatitude
});
// 描点
self.map.getBaiduMap().addOverlay(markWithUserAvatarAndUserName(self.map.getBaiduMap(), new BMap.Point(item.userLongitude, item.userLatitude), {
id: item.creator,
name: item.userName,
phone: item.userPhone,
avatar: item.userAvatar,
}, item.gmtCreate, function(data) {
self.openUserLocus(data);
}));
}
top.restAjax.post(top.restAjax.path('api/userpoints/listuserandpointsbyuseridsbygridservice', []), {
userIds: ids.toString()
}, null, function(code, data) {
self.takeUserArea(data, points);
}, function (code, data) {
top.dialog.msg(data.msg)
});
// self.map.resetViewport(points);
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
}
}
});
},
addMarker: function(option) {
var self = this;
var marker = new BMap.Marker(new BMap.Point(option.point.lng, option.point.lat));
marker.setTitle(option.id);
if (typeof (option.jump) != 'undefined' && (option.jump == true || option.jump == 'true')) {
marker.setAnimation(BMAP_ANIMATION_BOUNCE);
}
self.map.map.addOverlay(marker);
marker.addEventListener('click', function (e) {
if (typeof (option.onClick) === 'function') {
option.onClick(option.id, e, this);
}
});
marker.addEventListener('rightclick', function (e) {
if (typeof (option.onRightClick) === 'function') {
option.onRightClick(option.id, e, this);
}
});
},
/**
* 重置视野
* @param points
*/
resetViewport: function(points) {
var self = this;
self.map.map.setViewport(points);
}
},
mounted: function() {
top.Mask.hideMask();
var self = this;
self.initMap();
self.initAreaTree();
self.initCaseTypeTree();
self.initPersonTree();
$('#toggleButton').click(function() {
if($('#mapMenuBox').height() < 398) {
$('#arrow').removeClass('fa-angle-double-down');
$('#arrow').addClass('fa-angle-double-up');
$('#mapMenuLeft').slideDown();
$('#mapMenuBox').animate({
height: '400px',
}, 'slow');
} else {
$('#arrow').removeClass('fa-angle-double-up');
$('#arrow').addClass('fa-angle-double-down');
$('#mapMenuLeft').slideUp();
$('#mapMenuBox').animate({
height: '0px',
}, 'slow');
}
});
$('.menu-btn').click(function() {
$(this).siblings().removeClass('active');
$(this).addClass('active');
$('.menu-content').removeClass('content-active');
$('#'+ this.id +'Content').addClass('content-active');
if(this.id == 'menuBtn1') {
var node = $('#areaTree').tree('find', 'areaLevel3');
$('#areaTree').tree('select', node.target);
}
});
}
});
</script>
</body>
</html>