508 lines
24 KiB
HTML
508 lines
24 KiB
HTML
|
<!doctype html>
|
|||
|
<html lang="en">
|
|||
|
<head>
|
|||
|
<base href="/bigdata/">
|
|||
|
<meta charset="utf-8">
|
|||
|
<meta name="renderer" content="webkit">
|
|||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
|||
|
<link rel="stylesheet" type="text/css" href="assets/js/vendor/bigdata/css/reset.css" />
|
|||
|
<link rel="stylesheet" type="text/css" href="assets/js/vendor/bigdata/css/moudle.css" />
|
|||
|
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
|
|||
|
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
|
|||
|
<style>
|
|||
|
.marker-container{position: absolute;top:50%;left:50%;transform: translate(-50%,-50%);cursor: pointer}
|
|||
|
.top{border: 1px solid #FFF;border-bottom: none;width:35px;height:20px;background-color:red;border-radius:50px 50px 0 0;padding: 5px 5px 0;box-sizing: border-box;box-shadow: 0 10px 0 #fff}
|
|||
|
.mid{border-left: 1px solid #FFF;border-right: 1px solid #FFF;box-sizing: border-box;width:35px;height:10px;background: red;}
|
|||
|
.top img{width: 100%;border-radius: 50%;}
|
|||
|
.bottom{width :0px;height :0px;border-top: 20px solid red;border-left: 18px solid transparent;border-right: 17px solid transparent;}
|
|||
|
</style>
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<div id="app">
|
|||
|
<!--标题-->
|
|||
|
<div class="cm-page-title">
|
|||
|
<ul>
|
|||
|
<li><a href="route/bigdata/index1.html">网格</a></li>
|
|||
|
<li><a href="route/bigdata/index2.html">党建</a></li>
|
|||
|
<li><a href="route/system/index.html" target="_blank">考核系统</a></li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<!--主体-->
|
|||
|
<div class="cm-main main-box">
|
|||
|
<!--左侧-->
|
|||
|
<div class="cm-main-left">
|
|||
|
<div class="page-top">
|
|||
|
<div class="left-box">
|
|||
|
<div class="cm-left-charts-box">
|
|||
|
<h3>支部数</h3>
|
|||
|
<div class="cm-charts-container" v-cloak>
|
|||
|
<span>{{count.zbCount}}</span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="cm-left-charts-box">
|
|||
|
<h3>党员数</h3>
|
|||
|
<div class="cm-charts-container" v-cloak>
|
|||
|
<span>{{count.peopleCount}}</span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="cm-left-charts-box">
|
|||
|
<h3>男女比例</h3>
|
|||
|
<div class="cm-charts-container" id="chart-box"></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="map-box">
|
|||
|
<div id="map" class="map-container"></div>
|
|||
|
<div class="map-select" tabindex="0">
|
|||
|
<div class="result" id="selId" v-cloak>
|
|||
|
{{selectUl}}
|
|||
|
<div class="slide-icon">
|
|||
|
<img src="assets/js/vendor/bigdata/images/slide.png" alt="">
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<ul>
|
|||
|
<li v-for="level in levelSel" @click="levelChange(level.text, level.val)">{{level.text}}</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="page-bottom" id="zhu-chart"></div>
|
|||
|
</div>
|
|||
|
<!--右侧-->
|
|||
|
<div class="cm-main-right" v-cloak>
|
|||
|
<div class="cm-left-charts-box right-box" v-for="item in meeting">
|
|||
|
<h3>{{item.categoryName}}</h3>
|
|||
|
<div class="cm-charts-container">
|
|||
|
<span>{{item.counts}}</span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<script type="text/javascript" src="assets/js/rem.js"></script>
|
|||
|
<script type="text/javascript" src="assets/js/vue.min.js"></script>
|
|||
|
<script type="text/javascript" src="assets/js/echarts.js"></script>
|
|||
|
<script src="assets/layuiadmin/layui/layui.js"></script>
|
|||
|
<script src="assets/js/restajax.js"></script>
|
|||
|
<script type="text/javascript" src="assets/js/jquery-3.5.1.min.js"></script>
|
|||
|
<script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=2qzNKd33lQERUDakqDDyvLOyqM1x2i8y"></script>
|
|||
|
<script>
|
|||
|
layui.config({
|
|||
|
base: 'assets/layuiadmin/'
|
|||
|
}).extend({
|
|||
|
index: 'lib/index' //主入口模块
|
|||
|
}).use(['index', 'laytpl', 'restajax', 'datamessage', 'dialog'], function() {
|
|||
|
var $ = layui.$;
|
|||
|
var layer = layui.layer;
|
|||
|
var laytpl = layui.laytpl;
|
|||
|
window.dialog = layui.dialog;
|
|||
|
window.restAjax = layui.restajax;
|
|||
|
window.dataMessage = layui.datamessage;
|
|||
|
|
|||
|
var vue = new Vue({
|
|||
|
el:'#app',
|
|||
|
data: {
|
|||
|
count: {
|
|||
|
zbCount: 0,
|
|||
|
peopleCount: 0,
|
|||
|
meeting: 0,
|
|||
|
boy: 0,
|
|||
|
girl: 0
|
|||
|
},
|
|||
|
selectUl: '请选择所属级别',
|
|||
|
levelSel: [
|
|||
|
{text: '请选择所属级别', val: '0'},
|
|||
|
{text: '1级', val: '1'},
|
|||
|
{text: '2级', val: '2'},
|
|||
|
{text: '3级', val: '3'},
|
|||
|
{text: '4级', val: '4'},
|
|||
|
{text: '5级', val: '5'}
|
|||
|
],
|
|||
|
pointArr: [],
|
|||
|
markerList: [],
|
|||
|
belongLevel: 2,
|
|||
|
meeting: [],
|
|||
|
meetingCharts: []
|
|||
|
},
|
|||
|
methods: {
|
|||
|
// 请求支部数,党员数接口
|
|||
|
initPartyOrganizeData: function(value, value2) {
|
|||
|
var self = this;
|
|||
|
self.belongLevel = value;
|
|||
|
var loadLayerIndex;
|
|||
|
var url;
|
|||
|
top.restAjax.get(top.restAjax.path('api/partyorganize/bigdata?belongLevel={belongLevel}&partyOrganizeId={partyOrganizeId}', [value, value2]), {}, null, function(code, data) {
|
|||
|
self.pointArr = data.data.partyOrganizeDTOList;
|
|||
|
self.count.zbCount = data.data.zbCount;
|
|||
|
self.count.peopleCount = data.data.peopleCount;
|
|||
|
self.count.boy = data.data.boy;
|
|||
|
self.count.girl = data.data.girl;
|
|||
|
var dataScroll = {
|
|||
|
zbCount: data.data.zbCount,
|
|||
|
peopleCount: data.data.peopleCount,
|
|||
|
girl: data.data.girl,
|
|||
|
boy: data.data.boy
|
|||
|
};
|
|||
|
for (var i in dataScroll) {
|
|||
|
self.scrollNum(i,dataScroll[i])
|
|||
|
}
|
|||
|
self.initCharts();
|
|||
|
self.initBaiduMap();
|
|||
|
}, function(code, data) {
|
|||
|
self.initCharts();
|
|||
|
self.initBaiduMap();
|
|||
|
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);
|
|||
|
});
|
|||
|
},
|
|||
|
// 通过支部等级,筛选支部
|
|||
|
levelChange: function(text, value) {
|
|||
|
var self = this;
|
|||
|
var icoHtml = '<div class="slide-icon">' +
|
|||
|
'<img src="assets/js/vendor/bigdata/images/slide.png" alt="">' +
|
|||
|
'</div>';
|
|||
|
$('#selId').text(text);
|
|||
|
$('#selId').append(icoHtml);
|
|||
|
|
|||
|
self.initPartyOrganizeData(value, '');
|
|||
|
},
|
|||
|
initBaiduMap: function () {
|
|||
|
var self = this;
|
|||
|
function initMap(){
|
|||
|
createMap();//创建地图
|
|||
|
setMapEvent();//设置地图事件
|
|||
|
addMapControl();//向地图添加控件
|
|||
|
addMapOverlay();//向地图添加覆盖物
|
|||
|
}
|
|||
|
function createMap(){
|
|||
|
map = new BMap.Map("map",{enableMapClick: false});
|
|||
|
map.centerAndZoom(new BMap.Point(109.845965, 40.664461),12);
|
|||
|
/*var mapStyle ={
|
|||
|
features: ["road", "building","water","land"],//隐藏地图上的poi
|
|||
|
style : "midnight" //设置地图风格为高端黑
|
|||
|
}
|
|||
|
map.setMapStyle(mapStyle);*/
|
|||
|
}
|
|||
|
function setMapEvent(){
|
|||
|
map.enableScrollWheelZoom();
|
|||
|
map.enableKeyboard();
|
|||
|
map.enableDragging();
|
|||
|
map.enableDoubleClickZoom()
|
|||
|
}
|
|||
|
//向地图添加控件
|
|||
|
function addMapControl(){
|
|||
|
var scaleControl = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});
|
|||
|
scaleControl.setUnit(BMAP_UNIT_METRIC);
|
|||
|
map.addControl(scaleControl);
|
|||
|
var navControl = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:0});
|
|||
|
map.addControl(navControl);
|
|||
|
}
|
|||
|
function addMapOverlay(){
|
|||
|
for(var i = 0, item = self.pointArr[i]; item = self.pointArr[i++];) {
|
|||
|
var point = new BMap.Point(item.longitude, item.latitude);
|
|||
|
// var imgSrc = self.url + '/route/file/downloadfile/false/' + item.logo;
|
|||
|
var imgSrc = item.logo;
|
|||
|
var el = createMark(point, imgSrc, item.partyOrganizeId, item.belongLevel);
|
|||
|
}
|
|||
|
}
|
|||
|
// 给地图添加点
|
|||
|
function createMark(point, imgSrc, partyOrganizeId, belongLevel) {
|
|||
|
// 定义绘制图标方法
|
|||
|
function customizeOverlay(center, length){
|
|||
|
this._center = center;
|
|||
|
this._length = length;
|
|||
|
}
|
|||
|
customizeOverlay.prototype = new BMap.Overlay();
|
|||
|
|
|||
|
customizeOverlay.prototype.initialize = function(map){
|
|||
|
// 保存map对象实例
|
|||
|
map = map;
|
|||
|
|
|||
|
// 创建div元素,作为自定义覆盖物的容器
|
|||
|
var el = self.creatMarkerDiv(imgSrc);
|
|||
|
|
|||
|
// 将el添加到覆盖物容器中
|
|||
|
map.getPanes().markerPane.appendChild(el);
|
|||
|
|
|||
|
// 监听点击
|
|||
|
$(el).on('click', function(e){
|
|||
|
self.showPartyOrganize(partyOrganizeId, belongLevel);
|
|||
|
})
|
|||
|
|
|||
|
// 保存div实例
|
|||
|
this._div = el;
|
|||
|
// 需要将el元素作为方法的返回值,当调用该覆盖物的show、hide方法,或者对覆盖物进行移除时,API都将操作此元素。
|
|||
|
return el;
|
|||
|
}
|
|||
|
|
|||
|
// 根据地理坐标转换为像素坐标,并设置给容器
|
|||
|
customizeOverlay.prototype.draw = function(){
|
|||
|
var position = map.pointToOverlayPixel(this._center);
|
|||
|
this._div.style.left = position.x - this._length / 2 + "px";
|
|||
|
this._div.style.top = position.y - this._length / 2 + "px";
|
|||
|
};
|
|||
|
|
|||
|
var mark = new customizeOverlay(point, 36);
|
|||
|
self.markerList.push(mark); // 把mak加入到数组中方便下次添加mark时清除原有点和操作选中状态
|
|||
|
map.addOverlay(mark);
|
|||
|
}
|
|||
|
function addClickHandler(target,window){
|
|||
|
target.addEventListener("click",function(){
|
|||
|
target.openInfoWindow(window);
|
|||
|
});
|
|||
|
}
|
|||
|
var map;
|
|||
|
initMap();
|
|||
|
},
|
|||
|
creatMarkerDiv: function(imgSrc) {
|
|||
|
var oDiv = document.createElement('div');
|
|||
|
oDiv.className = 'marker-container';
|
|||
|
var oTop = document.createElement('div');
|
|||
|
oTop.className = 'top';
|
|||
|
var img = new Image();
|
|||
|
img.src = imgSrc;
|
|||
|
var oMid = document.createElement('div');
|
|||
|
oMid.className = 'mid'
|
|||
|
var oBottom = document.createElement('div');
|
|||
|
oBottom.className = 'bottom'
|
|||
|
oDiv.appendChild(oTop);
|
|||
|
oTop.appendChild(img);
|
|||
|
oDiv.appendChild(oMid);
|
|||
|
oDiv.appendChild(oBottom);
|
|||
|
return oDiv;
|
|||
|
},
|
|||
|
showPartyOrganize: function(partyOrganizeId, belongLevel) {
|
|||
|
var self = this;
|
|||
|
top.dialog.dialogData.partyOrganizeId = '';
|
|||
|
top.dialog.dialogData.belongLevel = '';
|
|||
|
top.dialog.open({
|
|||
|
url: top.restAjax.path('route/bigdata/detail.html?partyOrganizeId={partyOrganizeId}&belongLevel='+belongLevel, [partyOrganizeId]),
|
|||
|
title: '详情',
|
|||
|
width: '1080px',
|
|||
|
height: '98%',
|
|||
|
onClose: function(data) {
|
|||
|
if(top.dialog.dialogData.partyOrganizeId && !top.dialog.dialogData.belongLevel) {
|
|||
|
self.getPartyMemberCount(top.dialog.dialogData.partyOrganizeId);
|
|||
|
self.getMeetingCount(top.dialog.dialogData.partyOrganizeId);
|
|||
|
self.getMeetingCharts(top.dialog.dialogData.partyOrganizeId);
|
|||
|
self.initPartyOrganizeData('', top.dialog.dialogData.partyOrganizeId);
|
|||
|
}else if(top.dialog.dialogData.partyOrganizeId && top.dialog.dialogData.belongLevel) {
|
|||
|
self.getPartyMemberCount(top.dialog.dialogData.partyOrganizeId);
|
|||
|
self.getMeetingCount(top.dialog.dialogData.partyOrganizeId);
|
|||
|
self.getMeetingCharts(top.dialog.dialogData.partyOrganizeId);
|
|||
|
self.initPartyOrganizeData(top.dialog.dialogData.belongLevel, '');
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
// 当前党组织中党员数量
|
|||
|
getPartyMemberCount: function (partyOrganizeId) {
|
|||
|
var self = this;
|
|||
|
var loadLayerIndex;
|
|||
|
top.restAjax.get(top.restAjax.path('api/partyorganize/countpartymember?partyOrganizeId=' + partyOrganizeId, []), {}, null, function(code, data) {
|
|||
|
self.count.zbCount = 0;
|
|||
|
self.count.peopleCount = data.data;
|
|||
|
self.getCountpartymemberSex(partyOrganizeId);
|
|||
|
}, 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);
|
|||
|
});
|
|||
|
},
|
|||
|
getCountpartymemberSex: function(partyOrganizeId) {
|
|||
|
var self = this;
|
|||
|
var loadLayerIndex;
|
|||
|
self.count.boy = 0;
|
|||
|
self.count.girl = 0;
|
|||
|
top.restAjax.get(top.restAjax.path('api/partyorganize/countpartymembersex?partyOrganizeId=' + partyOrganizeId, []), {}, null, function(code, data) {
|
|||
|
self.count.boy = data.data.boy;
|
|||
|
self.count.girl = data.data.girl;
|
|||
|
}, 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);
|
|||
|
});
|
|||
|
},
|
|||
|
getMeetingCount: function(partyOrganizeId) {
|
|||
|
var self = this;
|
|||
|
var loadLayerIndex;
|
|||
|
top.restAjax.get(top.restAjax.path('api/partyorganize/meetingcount?partyOrganizeId=' + partyOrganizeId, []), {}, null, function(code, data) {
|
|||
|
self.meeting = data.data.meeting;
|
|||
|
}, 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);
|
|||
|
});
|
|||
|
},
|
|||
|
getMeetingCharts: function(partyOrganizeId) {
|
|||
|
var self = this;
|
|||
|
var loadLayerIndex;
|
|||
|
self.meetingCharts = [];
|
|||
|
var url;
|
|||
|
if(partyOrganizeId) {
|
|||
|
url = 'api/partyorganize/meetingcharts?partyOrganizeId=' + partyOrganizeId;
|
|||
|
}else {
|
|||
|
url = 'api/partyorganize/meetingcharts';
|
|||
|
}
|
|||
|
top.restAjax.get(top.restAjax.path(url, []), {}, null, function(code, data) {
|
|||
|
self.meetingCharts = data.data.meetingCharts;
|
|||
|
self.initZhuCharts();
|
|||
|
}, 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);
|
|||
|
});
|
|||
|
},
|
|||
|
initCharts: function () {
|
|||
|
var self = this;
|
|||
|
var pie1 = echarts.init(document.getElementById("chart-box"));
|
|||
|
option = {
|
|||
|
tooltip: {
|
|||
|
trigger: 'item',
|
|||
|
formatter: '{a} <br/>{b} : {c} ({d}%)'
|
|||
|
},
|
|||
|
legend: {
|
|||
|
orient: 'vertical',
|
|||
|
right: 'right',
|
|||
|
data: ['男', '女'],
|
|||
|
textStyle: {
|
|||
|
color:'#fff'
|
|||
|
}
|
|||
|
},
|
|||
|
//设置饼状图每个颜色块的颜色
|
|||
|
color : [ 'red', 'orange'],
|
|||
|
series: [
|
|||
|
{
|
|||
|
name: '男女比例',
|
|||
|
type: 'pie',
|
|||
|
radius: '70%',
|
|||
|
center: ['50%', '60%'],
|
|||
|
data: [
|
|||
|
{value: self.count.boy, name: '男'},
|
|||
|
{value: self.count.girl, name: '女'}
|
|||
|
],
|
|||
|
emphasis: {
|
|||
|
itemStyle: {
|
|||
|
shadowBlur: 10,
|
|||
|
shadowOffsetX: 0,
|
|||
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
|||
|
}
|
|||
|
},
|
|||
|
label: {
|
|||
|
normal: {
|
|||
|
textStyle: {
|
|||
|
color: '#fff' // 改变标示文字的颜色
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
]
|
|||
|
};
|
|||
|
pie1.setOption(option);
|
|||
|
},
|
|||
|
initZhuCharts: function () {
|
|||
|
var self = this;
|
|||
|
var zhu = echarts.init(document.getElementById("zhu-chart"));
|
|||
|
option = {
|
|||
|
grid: {
|
|||
|
x:30,
|
|||
|
y:20,
|
|||
|
x2:20,
|
|||
|
y2:20
|
|||
|
},
|
|||
|
legend: {
|
|||
|
textStyle: {
|
|||
|
color:'#fff'
|
|||
|
}
|
|||
|
},
|
|||
|
tooltip: {},
|
|||
|
dataset: {
|
|||
|
source: self.meetingCharts
|
|||
|
},
|
|||
|
xAxis: {
|
|||
|
type: 'category',
|
|||
|
axisLabel:{
|
|||
|
color:'#fff'
|
|||
|
}
|
|||
|
},
|
|||
|
yAxis: {
|
|||
|
axisLabel:{
|
|||
|
color:'#fff'
|
|||
|
}
|
|||
|
},
|
|||
|
// Declare several bar series, each will be mapped
|
|||
|
// to a column of dataset.source by default.
|
|||
|
series: [
|
|||
|
{type: 'bar'},
|
|||
|
{type: 'bar'},
|
|||
|
{type: 'bar'},
|
|||
|
{type: 'bar'},
|
|||
|
{type: 'bar'},
|
|||
|
{type: 'bar'},
|
|||
|
{type: 'bar'},
|
|||
|
{type: 'bar'}
|
|||
|
]
|
|||
|
};
|
|||
|
|
|||
|
zhu.setOption(option);
|
|||
|
},
|
|||
|
scrollNum: function (key,value) {
|
|||
|
var self = this
|
|||
|
var totalNum = value;
|
|||
|
var nums = 0;
|
|||
|
// 调用计时函数
|
|||
|
setTimeout(timedCount(nums),10);
|
|||
|
|
|||
|
// 循环计时函数, 多次调用自身函数, nums为被传递的参数
|
|||
|
function timedCount(nums){
|
|||
|
var count = Math.round(totalNum/100);
|
|||
|
if(count == 0) {
|
|||
|
count = value;
|
|||
|
}
|
|||
|
nums+=count;
|
|||
|
self.$set(self.count, key, nums)
|
|||
|
// 设置条件使停止计时
|
|||
|
if (nums<totalNum) {
|
|||
|
setTimeout(function(){timedCount(nums)},10);
|
|||
|
}else{
|
|||
|
self.$set(self.count, key, nums)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
mounted: function () {
|
|||
|
var windowHeight = $(window).height()
|
|||
|
$('.cm-page-title').css({'height': windowHeight * 0.1 + 'px'})
|
|||
|
$('.cm-main').css({'height': windowHeight * 0.9 + 'px'})
|
|||
|
|
|||
|
//创建和初始化地图函数
|
|||
|
this.initPartyOrganizeData(0, '')
|
|||
|
this.getMeetingCount('')
|
|||
|
this.getMeetingCharts('')
|
|||
|
|
|||
|
$('.map-select').click(function () {
|
|||
|
$('.slide-icon').toggleClass('rotate')
|
|||
|
$('.map-select ul').slideToggle()
|
|||
|
})
|
|||
|
$('.map-select').blur(function () {
|
|||
|
$('.slide-icon').removeClass('rotate')
|
|||
|
$('.map-select ul').slideUp()
|
|||
|
})
|
|||
|
}
|
|||
|
})
|
|||
|
});
|
|||
|
</script>
|
|||
|
</body>
|
|||
|
</html>
|