| | |
| | | <template> |
| | | <flex-layout direction="row" class="page-index"> |
| | | <home-list |
| | | slot="header" |
| | | @leaf-click="leafClick"></home-list> |
| | | <div class="map-container"> |
| | | <div class="map-content" id="allmap"></div> |
| | | <div class="map-icon-details-wrapper"> |
| | | <div class="map-icon-details-title">地图图标说明</div> |
| | | <div class="map-icon-details-content"> |
| | | <div class="map-icon-list"> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-discharge.png" /></div> |
| | | <div class="item-wrapper text-wrapper">电池组落后机房</div> |
| | | </div> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-warn.png" /></div> |
| | | <div class="item-wrapper text-wrapper">电池组告警机房</div> |
| | | </div> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-charge.png" /></div> |
| | | <div class="item-wrapper text-wrapper">电池组放电延时机房</div> |
| | | </div> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-normal.png" /></div> |
| | | <div class="item-wrapper text-wrapper">正常机房</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <content-box title="站点列表" slot="footer" style="width:380px" no-header v-if="false"> |
| | | <div class="pie-list"> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart1" id="chart1"></pie-chart> |
| | | </div> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart2" id="chart2"></pie-chart> |
| | | </div> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart3" id="chart3"></pie-chart> |
| | | </div> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart4" id="chart4"></pie-chart> |
| | | </div> |
| | | </div> |
| | | </content-box> |
| | | </flex-layout> |
| | | <flex-layout direction="row" class="page-index"> |
| | | <home-list slot="header" @leaf-click="leafClick"></home-list> |
| | | <div class="map-container"> |
| | | <div class="map-content" id="allmap"></div> |
| | | <div class="map-icon-details-wrapper"> |
| | | <div class="map-icon-details-title">地图图标说明</div> |
| | | <div class="map-icon-details-content"> |
| | | <div class="map-icon-list"> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-discharge.png" /></div> |
| | | <div class="item-wrapper text-wrapper">电池组落后机房</div> |
| | | </div> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-warn.png" /></div> |
| | | <div class="item-wrapper text-wrapper">电池组告警机房</div> |
| | | </div> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-charge.png" /></div> |
| | | <div class="item-wrapper text-wrapper">电池组放电延时机房</div> |
| | | </div> |
| | | <div class="map-icon-item"> |
| | | <div class="item-wrapper icon-wrapper"><img src="../assets/images/home-normal.png" /></div> |
| | | <div class="item-wrapper text-wrapper">正常机房</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <content-box title="站点列表" slot="footer" style="width:380px" no-header v-if="false"> |
| | | <div class="pie-list"> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart1" id="chart1"></pie-chart> |
| | | </div> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart2" id="chart2"></pie-chart> |
| | | </div> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart3" id="chart3"></pie-chart> |
| | | </div> |
| | | <div class="pie-item"> |
| | | <pie-chart ref="chart4" id="chart4"></pie-chart> |
| | | </div> |
| | | </div> |
| | | </content-box> |
| | | </flex-layout> |
| | | </template> |
| | | |
| | | <script> |
| | | import Vue from "vue"; |
| | | import BMap from "BMap"; |
| | | import inMap from 'inmap'; |
| | | import ContentBox from "../components/ContentBox"; |
| | | import PieChart from "../components/chart/PieChart"; |
| | | import InfoWindowTest from "../components/InfoWindowTest"; |
| | | import InfoPanel from "../components/indexPanel/InfoPanel" |
| | | import AddPanel from "@/components/indexPanel/AddPanel"; |
| | | import HomeList from "./HomeList" |
| | | import { |
| | | searchCoordinateMove, |
| | | searchMap, |
| | | searchRoomLocation, |
| | | searchHomeNum, |
| | | addMapHomeList, |
| | | setMapCenterPoint, |
| | | delMapHome, |
| | | searchMapHomeState, |
| | | } from '../assets/js/api' |
| | | import { |
| | | Timeout |
| | | } from '../assets/js/tools' |
| | | import Vue from "vue"; |
| | | import BMap from "BMap"; |
| | | import inMap from 'inmap'; |
| | | import ContentBox from "../components/ContentBox"; |
| | | import PieChart from "../components/chart/PieChart"; |
| | | import InfoWindowTest from "../components/InfoWindowTest"; |
| | | import InfoPanel from "../components/indexPanel/InfoPanel" |
| | | import AddPanel from "@/components/indexPanel/AddPanel"; |
| | | import HomeList from "./HomeList" |
| | | import { |
| | | searchCoordinateMove, |
| | | searchMap, |
| | | searchRoomLocation, |
| | | searchHomeNum, |
| | | addMapHomeList, |
| | | setMapCenterPoint, |
| | | delMapHome, |
| | | searchMapHomeState, |
| | | } from '../assets/js/api' |
| | | import { |
| | | Timeout |
| | | } from '../assets/js/tools' |
| | | |
| | | let map; |
| | | let addHomeData = []; |
| | | let mkList = []; |
| | | let chart1, chart2, chart3, chart4; |
| | | let infoWindowTest = Vue.extend(InfoWindowTest); |
| | | let showInfoWindowTest = new infoWindowTest().$mount(); |
| | | // 地图panel组件 |
| | | let infoPanelExtend = Vue.extend(InfoPanel); |
| | | let infoPanel = new infoPanelExtend().$mount(); |
| | | let addPanelExtend = Vue.extend(AddPanel); |
| | | let addPanel = new addPanelExtend().$mount(); |
| | | let map; |
| | | let addHomeData = []; |
| | | let mkList = []; |
| | | let chart1, chart2, chart3, chart4; |
| | | let infoWindowTest = Vue.extend(InfoWindowTest); |
| | | let showInfoWindowTest = new infoWindowTest().$mount(); |
| | | // 地图panel组件 |
| | | let infoPanelExtend = Vue.extend(InfoPanel); |
| | | let infoPanel = new infoPanelExtend().$mount(); |
| | | let addPanelExtend = Vue.extend(AddPanel); |
| | | let addPanel = new addPanelExtend().$mount(); |
| | | |
| | | let inmap; |
| | | import HomeNormal from '@/assets/images/home.png' |
| | |
| | | }); |
| | | map = inmap.getMap(); |
| | | |
| | | // 地图拖动事件监听 |
| | | map.addEventListener("moving", ()=>{ |
| | | this.initOverlay(); |
| | | }); |
| | | // 地图拖动事件监听 |
| | | map.addEventListener("moving", () => { |
| | | this.initOverlay(); |
| | | }); |
| | | |
| | | map.addEventListener("moveend", ()=>{ |
| | | this.searchMapHomeState(); |
| | |
| | | normalOverlay.img.setData([]); |
| | | normalOverlay.animate.setData([]); |
| | | |
| | | behindOverlay.img.setData([]); |
| | | behindOverlay.animate.setData([]); |
| | | behindOverlay.img.setData([]); |
| | | behindOverlay.animate.setData([]); |
| | | |
| | | warnOverlay.img.setData([]); |
| | | warnOverlay.animate.setData([]); |
| | | warnOverlay.img.setData([]); |
| | | warnOverlay.animate.setData([]); |
| | | |
| | | timeoutOverlay.img.setData([]); |
| | | timeoutOverlay.animate.setData([]); |
| | | }, |
| | | // 查询设置的地图的中心点,并初始化地图位置 |
| | | searchCoordinateMove() { |
| | | searchCoordinateMove().then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | if (rs.code == 1) { |
| | | let data = rs.data[0]; |
| | | var _point = new BMap.Point(data.map_longitude, data.map_latitude); |
| | | map.centerAndZoom(_point, data.map_level); // 用城市名设置地图中心点 |
| | | } |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | searchMap() { |
| | | searchMap().then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | let list = this.mergeMapInfos(rs); |
| | | if (list != undefined && list.length > 0) { |
| | | let mapDotList = list.map(data => { |
| | | return { |
| | | lng: data.longitude, |
| | | lat: data.latitude, |
| | | title: data.StationName, |
| | | data: data, |
| | | name: data.StationName, |
| | | geometry: { |
| | | type: 'Point', |
| | | coordinates: [data.longitude, data.latitude] |
| | | } |
| | | } |
| | | }); |
| | | // 设置正常机房 |
| | | this.createMapHome("", mapDotList); |
| | | // 设置落后机房 |
| | | this.createMapHome("timeout", []); |
| | | // 设置告警机房 |
| | | this.createMapHome("warn", []); |
| | | // 设置延时机房 |
| | | this.createMapHome("behind", []); |
| | | addHomeData = mapDotList; |
| | | this.startSearchMapHomeState(); |
| | | } |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | startSearchMapHomeState() { |
| | | this.timer.start(()=>{ |
| | | this.$axios.all([ |
| | | this.searchMapHomeState(), |
| | | ]).then(()=>{ |
| | | this.timer.open(); |
| | | }).catch(()=>{ |
| | | this.timer.open(); |
| | | }); |
| | | }, 4000); |
| | | }, |
| | | searchMapHomeState() { |
| | | searchMapHomeState().then(res=>{ |
| | | let rs = JSON.parse(res.data.result); |
| | | let behind = []; |
| | | let warn = []; |
| | | let timeout = []; |
| | | let normal = []; |
| | | if(rs.code === 1) { |
| | | let data = rs.data; |
| | | data.forEach(item=>{ |
| | | let infos = this.getHomeInfoByName(item.StationName); |
| | | if(infos.length !== 0) { |
| | | let info = infos[0]; |
| | | switch(item.num) { |
| | | case 1: // 落后 |
| | | behind.push(info); |
| | | break; |
| | | case 2: // 告警 |
| | | warn.push(info) |
| | | break; |
| | | case 3: |
| | | timeout.push(info); |
| | | break; |
| | | default: |
| | | normal.push(info); |
| | | break; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | // 更新正常地图图标 |
| | | behindOverlay.animate.setData(behind); |
| | | behindOverlay.img.setData(behind); |
| | | // 更新正常地图图标 |
| | | warnOverlay.animate.setData(warn); |
| | | warnOverlay.img.setData(warn); |
| | | // 更新正常地图图标 |
| | | timeoutOverlay.animate.setData(timeout); |
| | | timeoutOverlay.img.setData(timeout); |
| | | // 更新正常地图图标 |
| | | normalOverlay.animate.setData(normal); |
| | | normalOverlay.img.setData(normal); |
| | | }).catch(error=>{ |
| | | console.log(error); |
| | | }) |
| | | }, |
| | | getHomeInfoByName(name) { |
| | | return addHomeData.filter(item=>{ |
| | | return item.name === name; |
| | | }); |
| | | }, |
| | | mergeMapInfos(list) { |
| | | var mergeData = []; |
| | | // 遍历list |
| | | for (var i = 0; i < list.length; i++) { |
| | | var _list = list[i]; |
| | | var isIn = this.checkMapInfoIsIn(_list, mergeData); |
| | | if (isIn == -1) { |
| | | mergeData.push(_list); |
| | | } |
| | | } |
| | | // 返回合并值 |
| | | return mergeData; |
| | | }, |
| | | checkMapInfoIsIn(mapInfo, mergeData) { |
| | | var rs = -1; |
| | | // 遍历mergeData |
| | | for (var i = 0; i < mergeData.length; i++) { |
| | | var _mergeData = mergeData[i]; |
| | | // 经纬度相同 |
| | | if (mapInfo.latitude == _mergeData.latitude && mapInfo.longitude == _mergeData.longitude) { |
| | | rs = i; |
| | | } |
| | | } |
| | | return rs; |
| | | }, |
| | | createMapHome(type, data) { |
| | | let overlay = normalOverlay; |
| | | let color = ""; |
| | | let img = homeNormalImage; |
| | | switch(type) { |
| | | case 'behind': |
| | | overlay = behindOverlay; |
| | | color = "#FD696A"; |
| | | img = homeDischargeImage; |
| | | break; |
| | | case 'warn': |
| | | overlay = warnOverlay; |
| | | color = "#C5A26E"; |
| | | img = homeWarnImage; |
| | | break; |
| | | case 'timeout': |
| | | overlay = timeoutOverlay; |
| | | color = "#3274CA"; |
| | | img = homeChargeImage; |
| | | break; |
| | | } |
| | | // 设置动画 |
| | | let animationOverlay = new inMap.PointAnimationOverlay({ |
| | | style: { |
| | | fps: 25, //动画帧数 |
| | | color: color, |
| | | size: color?20:0, |
| | | speed: 0.5 |
| | | }, |
| | | data: data |
| | | }); |
| | | // 设置动画层 |
| | | overlay.animate = animationOverlay; |
| | | inmap.add(animationOverlay); |
| | | timeoutOverlay.img.setData([]); |
| | | timeoutOverlay.animate.setData([]); |
| | | }, |
| | | // 查询设置的地图的中心点,并初始化地图位置 |
| | | searchCoordinateMove() { |
| | | searchCoordinateMove().then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | if (rs.code == 1) { |
| | | let data = rs.data[0]; |
| | | var _point = new BMap.Point(data.map_longitude, data.map_latitude); |
| | | map.centerAndZoom(_point, data.map_level); // 用城市名设置地图中心点 |
| | | } |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | searchMap() { |
| | | searchMap().then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | let list = this.mergeMapInfos(rs); |
| | | if (list != undefined && list.length > 0) { |
| | | let mapDotList = list.map(data => { |
| | | return { |
| | | lng: data.longitude, |
| | | lat: data.latitude, |
| | | title: data.StationName, |
| | | data: data, |
| | | name: data.StationName, |
| | | geometry: { |
| | | type: 'Point', |
| | | coordinates: [data.longitude, data.latitude] |
| | | } |
| | | } |
| | | }); |
| | | // 设置正常机房 |
| | | this.createMapHome("", mapDotList); |
| | | // 设置落后机房 |
| | | this.createMapHome("timeout", []); |
| | | // 设置告警机房 |
| | | this.createMapHome("warn", []); |
| | | // 设置延时机房 |
| | | this.createMapHome("behind", []); |
| | | addHomeData = mapDotList; |
| | | this.startSearchMapHomeState(); |
| | | } |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | startSearchMapHomeState() { |
| | | this.timer.start(() => { |
| | | this.$axios.all([ |
| | | this.searchMapHomeState(), |
| | | ]).then(() => { |
| | | this.timer.open(); |
| | | }).catch(() => { |
| | | this.timer.open(); |
| | | }); |
| | | }, 4000); |
| | | }, |
| | | searchMapHomeState() { |
| | | searchMapHomeState().then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | let behind = []; |
| | | let warn = []; |
| | | let timeout = []; |
| | | let normal = []; |
| | | if (rs.code === 1) { |
| | | let data = rs.data; |
| | | data.forEach(item => { |
| | | let infos = this.getHomeInfoByName(item.StationName); |
| | | if (infos.length !== 0) { |
| | | let info = infos[0]; |
| | | switch (item.num) { |
| | | case 1: // 落后 |
| | | behind.push(info); |
| | | break; |
| | | case 2: // 告警 |
| | | warn.push(info) |
| | | break; |
| | | case 3: |
| | | timeout.push(info); |
| | | break; |
| | | default: |
| | | normal.push(info); |
| | | break; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | // 更新正常地图图标 |
| | | behindOverlay.animate.setData(behind); |
| | | behindOverlay.img.setData(behind); |
| | | // 更新正常地图图标 |
| | | warnOverlay.animate.setData(warn); |
| | | warnOverlay.img.setData(warn); |
| | | // 更新正常地图图标 |
| | | timeoutOverlay.animate.setData(timeout); |
| | | timeoutOverlay.img.setData(timeout); |
| | | // 更新正常地图图标 |
| | | normalOverlay.animate.setData(normal); |
| | | normalOverlay.img.setData(normal); |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }) |
| | | }, |
| | | getHomeInfoByName(name) { |
| | | return addHomeData.filter(item => { |
| | | return item.name === name; |
| | | }); |
| | | }, |
| | | mergeMapInfos(list) { |
| | | var mergeData = []; |
| | | // 遍历list |
| | | for (var i = 0; i < list.length; i++) { |
| | | var _list = list[i]; |
| | | var isIn = this.checkMapInfoIsIn(_list, mergeData); |
| | | if (isIn == -1) { |
| | | mergeData.push(_list); |
| | | } |
| | | } |
| | | // 返回合并值 |
| | | return mergeData; |
| | | }, |
| | | checkMapInfoIsIn(mapInfo, mergeData) { |
| | | var rs = -1; |
| | | // 遍历mergeData |
| | | for (var i = 0; i < mergeData.length; i++) { |
| | | var _mergeData = mergeData[i]; |
| | | // 经纬度相同 |
| | | if (mapInfo.latitude == _mergeData.latitude && mapInfo.longitude == _mergeData.longitude) { |
| | | rs = i; |
| | | } |
| | | } |
| | | return rs; |
| | | }, |
| | | createMapHome(type, data) { |
| | | let overlay = normalOverlay; |
| | | let color = ""; |
| | | let img = homeNormalImage; |
| | | switch (type) { |
| | | case 'behind': |
| | | overlay = behindOverlay; |
| | | color = "#FD696A"; |
| | | img = homeDischargeImage; |
| | | break; |
| | | case 'warn': |
| | | overlay = warnOverlay; |
| | | color = "#C5A26E"; |
| | | img = homeWarnImage; |
| | | break; |
| | | case 'timeout': |
| | | overlay = timeoutOverlay; |
| | | color = "#3274CA"; |
| | | img = homeChargeImage; |
| | | break; |
| | | } |
| | | // 设置动画 |
| | | let animationOverlay = new inMap.PointAnimationOverlay({ |
| | | style: { |
| | | fps: 25, //动画帧数 |
| | | color: color, |
| | | size: color ? 20 : 0, |
| | | speed: 0.5 |
| | | }, |
| | | data: data |
| | | }); |
| | | // 设置动画层 |
| | | overlay.animate = animationOverlay; |
| | | inmap.add(animationOverlay); |
| | | |
| | | let imgOverlay = new inMap.ImgOverlay({ |
| | | tooltip: { |
| | | show: true, |
| | | formatter: "{name}" |
| | | }, |
| | | style: { |
| | | normal: { |
| | | icon: img, |
| | | width: 26, |
| | | height: 26, |
| | | offsets: { |
| | | top: "-50%", |
| | | left: "-50%", |
| | | } |
| | | } |
| | | }, |
| | | data: data, |
| | | }); |
| | | // 添加事件 |
| | | imgOverlay.on('mouseClick', (info)=>{ |
| | | let homeInfo = this.getHomeByPoint(info[0]); |
| | | if (homeInfo) { |
| | | this.searchHomeNum(homeInfo.data.StationId, homeInfo.data.FBSDeviceId, homeInfo.data); |
| | | } |
| | | }); |
| | | // 添加图片层 |
| | | overlay.img = imgOverlay; |
| | | inmap.add(imgOverlay); |
| | | }, |
| | | createMapDot(list) { |
| | | let self = this; |
| | | mkList = []; |
| | | list.forEach(item => { |
| | | let pt = new BMap.Point(item.lng, item.lat); |
| | | let mk = new BMap.Marker(pt); // 定义marker点 |
| | | // 向mk点添加label |
| | | var home_name = new BMap.Label(item.title, {offset: new BMap.Size(20, -10)}); |
| | | home_name.setStyle({display: 'none', padding: '4px 2px'}); |
| | | mk.setLabel(home_name); |
| | | mk.addEventListener('mouseover', function (e) { |
| | | this.getLabel().setStyle({display: 'block'}); |
| | | }); |
| | | let imgOverlay = new inMap.ImgOverlay({ |
| | | tooltip: { |
| | | show: true, |
| | | formatter: "{name}" |
| | | }, |
| | | style: { |
| | | normal: { |
| | | icon: img, |
| | | width: 26, |
| | | height: 26, |
| | | offsets: { |
| | | top: "-50%", |
| | | left: "-50%", |
| | | } |
| | | } |
| | | }, |
| | | data: data, |
| | | }); |
| | | // 添加事件 |
| | | imgOverlay.on('mouseClick', (info) => { |
| | | let homeInfo = this.getHomeByPoint(info[0]); |
| | | if (homeInfo) { |
| | | this.searchHomeNum(homeInfo.data.StationId, homeInfo.data.FBSDeviceId, homeInfo.data); |
| | | } |
| | | }); |
| | | // 添加图片层 |
| | | overlay.img = imgOverlay; |
| | | inmap.add(imgOverlay); |
| | | }, |
| | | createMapDot(list) { |
| | | let self = this; |
| | | mkList = []; |
| | | list.forEach(item => { |
| | | let pt = new BMap.Point(item.lng, item.lat); |
| | | let mk = new BMap.Marker(pt); // 定义marker点 |
| | | // 向mk点添加label |
| | | var home_name = new BMap.Label(item.title, { |
| | | offset: new BMap.Size(20, -10) |
| | | }); |
| | | home_name.setStyle({ |
| | | display: 'none', |
| | | padding: '4px 2px' |
| | | }); |
| | | mk.setLabel(home_name); |
| | | mk.addEventListener('mouseover', function(e) { |
| | | this.getLabel().setStyle({ |
| | | display: 'block' |
| | | }); |
| | | }); |
| | | |
| | | mk.addEventListener('mouseout', function (e) { |
| | | this.getLabel().setStyle({display: 'none'}); |
| | | }); |
| | | mk.addEventListener('click', function (e) { |
| | | var target = e.target; |
| | | let homeInfo = self.getHomeByPoint(target.point); |
| | | if (homeInfo) { |
| | | self.searchHomeNum(homeInfo.data.StationId, homeInfo.data.FBSDeviceId, homeInfo.data); |
| | | } |
| | | }); |
| | | mkList.push(mk); |
| | | // 设置覆盖物的右键菜单 |
| | | let menu = new BMap.ContextMenu(); |
| | | menu.addItem(new BMap.MenuItem('删除', (e)=>{ |
| | | let point = new BMap.Point(e.lng, e.lat); |
| | | this.delMapHome(mk); |
| | | })); |
| | | mk.addContextMenu(menu); |
| | | // 向地图添加覆盖物 |
| | | map.addOverlay(mk); |
| | | }); |
| | | }, |
| | | leafClick(data) { |
| | | // 构造查询条件 |
| | | let searchParams = { |
| | | StationName1: data.data.StationName1, |
| | | StationName2: data.data.StationName2, |
| | | StationName5: data.data.StationName5, |
| | | StationName3: data.data.StationName3 |
| | | }; |
| | | // 查询机房的定位信息 |
| | | this.searchRoomLocation(searchParams); |
| | | }, |
| | | // 根据查询条件查询机房的定位信息 |
| | | searchRoomLocation(searchParams) { |
| | | searchRoomLocation(searchParams).then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | if (rs.code == 1) { |
| | | let data = rs.data[0]; |
| | | // 构造点 |
| | | let point = { |
| | | lng: data.longitude, |
| | | lat: data.latitude |
| | | }; |
| | | let homeInfo = this.getHomeByPoint(point); |
| | | if (homeInfo) { |
| | | this.searchHomeNum(homeInfo.data.StationId, homeInfo.data.FBSDeviceId, homeInfo.data); |
| | | } |
| | | } else { |
| | | this.$layer.msg('当前机房未定位') |
| | | } |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | // 查询告警落后的信息 |
| | | searchHomeNum(sId, dev_id, homeData) { |
| | | searchHomeNum({StationId: sId, FBSDeviceId: dev_id}).then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | homeData.nums = rs; |
| | | this.showMapPanel(homeData); |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }) |
| | | }, |
| | | getMkByPoint(point) { |
| | | let result = 0; |
| | | for (let i = 0; i < mkList.length; i++) { |
| | | let mk = mkList[i]; |
| | | if (mk.point.lng == point.lng && mk.point.lat == point.lat) { |
| | | result = mk; |
| | | break; |
| | | } |
| | | } |
| | | return result; |
| | | }, |
| | | getHomeByPoint(point) { |
| | | let result = 0; |
| | | for (let i = 0; i < addHomeData.length; i++) { |
| | | let homeData = addHomeData[i]; |
| | | if (homeData.lng == point.lng && homeData.lat == point.lat) { |
| | | result = homeData; |
| | | break; |
| | | } |
| | | } |
| | | return result; |
| | | }, |
| | | showMapPanel(homeData) { |
| | | let BMapLib = window.BMapLib; |
| | | let infoWindow = null; |
| | | let point = new BMap.Point(homeData.longitude, homeData.latitude); |
| | | /* 设置站点窗口 */ |
| | | var opts = { |
| | | title: homeData.StationName, // 信息窗口标题 |
| | | width: 'auto', //宽度 |
| | | height: 'atuo', //高度 |
| | | panel: "panel", //检索结果面板 |
| | | enableAutoPan: true, //自动平移 |
| | | enableSendToPhone: false, |
| | | searchTypes: [] |
| | | }; |
| | | infoPanel.info = homeData; |
| | | infoWindow = new BMapLib.SearchInfoWindow(map, infoPanel.$el, opts); |
| | | infoWindow.open(point); |
| | | }, |
| | | addHomeDot(map, point) { // 向地图中添加覆盖物 |
| | | let removeMarker = function(e,ee,marker){ |
| | | map.removeOverlay(marker); |
| | | }; |
| | | let mk = new BMap.Marker(point); |
| | | mk.enableDragging(); // 设置覆盖物可以移动 |
| | | // 设置覆盖物的右键菜单 |
| | | let menu = new BMap.ContextMenu(); |
| | | menu.addItem(new BMap.MenuItem('删除', removeMarker.bind(mk))); |
| | | mk.addContextMenu(menu); |
| | | // 向覆盖物添加点击事件,显示添加机房的面板 |
| | | mk.addEventListener('click', e=>{ |
| | | let target = e.target; |
| | | let point = new BMap.Point(target.getPosition().lng, target.getPosition().lat); |
| | | this.addMapHomeList(point); |
| | | }); |
| | | // 将覆盖物添加到地图上 |
| | | map.addOverlay(mk); |
| | | mk.addEventListener('mouseout', function(e) { |
| | | this.getLabel().setStyle({ |
| | | display: 'none' |
| | | }); |
| | | }); |
| | | mk.addEventListener('click', function(e) { |
| | | var target = e.target; |
| | | let homeInfo = self.getHomeByPoint(target.point); |
| | | if (homeInfo) { |
| | | self.searchHomeNum(homeInfo.data.StationId, homeInfo.data.FBSDeviceId, homeInfo.data); |
| | | } |
| | | }); |
| | | mkList.push(mk); |
| | | // 设置覆盖物的右键菜单 |
| | | let menu = new BMap.ContextMenu(); |
| | | menu.addItem(new BMap.MenuItem('删除', (e) => { |
| | | let point = new BMap.Point(e.lng, e.lat); |
| | | this.delMapHome(mk); |
| | | })); |
| | | mk.addContextMenu(menu); |
| | | // 向地图添加覆盖物 |
| | | map.addOverlay(mk); |
| | | }); |
| | | }, |
| | | leafClick(data) { |
| | | // 构造查询条件 |
| | | let searchParams = { |
| | | StationName1: data.data.StationName1, |
| | | StationName2: data.data.StationName2, |
| | | StationName5: data.data.StationName5, |
| | | StationName3: data.data.StationName3 |
| | | }; |
| | | // 查询机房的定位信息 |
| | | this.searchRoomLocation(searchParams); |
| | | }, |
| | | // 根据查询条件查询机房的定位信息 |
| | | searchRoomLocation(searchParams) { |
| | | searchRoomLocation(searchParams).then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | if (rs.code == 1) { |
| | | let data = rs.data[0]; |
| | | // 构造点 |
| | | let point = { |
| | | lng: data.longitude, |
| | | lat: data.latitude |
| | | }; |
| | | let homeInfo = this.getHomeByPoint(point); |
| | | if (homeInfo) { |
| | | this.searchHomeNum(homeInfo.data.StationId, homeInfo.data.FBSDeviceId, homeInfo.data); |
| | | } |
| | | } else { |
| | | this.$layer.msg('当前机房未定位') |
| | | } |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | // 查询告警落后的信息 |
| | | searchHomeNum(sId, dev_id, homeData) { |
| | | searchHomeNum({ |
| | | StationId: sId, |
| | | FBSDeviceId: dev_id |
| | | }).then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | homeData.nums = rs; |
| | | this.showMapPanel(homeData); |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }) |
| | | }, |
| | | getMkByPoint(point) { |
| | | let result = 0; |
| | | for (let i = 0; i < mkList.length; i++) { |
| | | let mk = mkList[i]; |
| | | if (mk.point.lng == point.lng && mk.point.lat == point.lat) { |
| | | result = mk; |
| | | break; |
| | | } |
| | | } |
| | | return result; |
| | | }, |
| | | getHomeByPoint(point) { |
| | | let result = 0; |
| | | for (let i = 0; i < addHomeData.length; i++) { |
| | | let homeData = addHomeData[i]; |
| | | if (homeData.lng == point.lng && homeData.lat == point.lat) { |
| | | result = homeData; |
| | | break; |
| | | } |
| | | } |
| | | return result; |
| | | }, |
| | | showMapPanel(homeData) { |
| | | let BMapLib = window.BMapLib; |
| | | let infoWindow = null; |
| | | let point = new BMap.Point(homeData.longitude, homeData.latitude); |
| | | /* 设置站点窗口 */ |
| | | var opts = { |
| | | title: homeData.StationName, // 信息窗口标题 |
| | | width: 'auto', //宽度 |
| | | height: 'atuo', //高度 |
| | | panel: "panel", //检索结果面板 |
| | | enableAutoPan: true, //自动平移 |
| | | enableSendToPhone: false, |
| | | searchTypes: [] |
| | | }; |
| | | infoPanel.info = homeData; |
| | | infoWindow = new BMapLib.SearchInfoWindow(map, infoPanel.$el, opts); |
| | | infoWindow.open(point); |
| | | }, |
| | | addHomeDot(map, point) { // 向地图中添加覆盖物 |
| | | let removeMarker = function(e, ee, marker) { |
| | | map.removeOverlay(marker); |
| | | }; |
| | | let mk = new BMap.Marker(point); |
| | | mk.enableDragging(); // 设置覆盖物可以移动 |
| | | // 设置覆盖物的右键菜单 |
| | | let menu = new BMap.ContextMenu(); |
| | | menu.addItem(new BMap.MenuItem('删除', removeMarker.bind(mk))); |
| | | mk.addContextMenu(menu); |
| | | // 向覆盖物添加点击事件,显示添加机房的面板 |
| | | mk.addEventListener('click', e => { |
| | | let target = e.target; |
| | | let point = new BMap.Point(target.getPosition().lng, target.getPosition().lat); |
| | | this.addMapHomeList(point); |
| | | }); |
| | | // 将覆盖物添加到地图上 |
| | | map.addOverlay(mk); |
| | | |
| | | }, |
| | | // 查询还未添加到地图上的机房 |
| | | addMapHomeList(point) { |
| | | // 查询后台 |
| | | addMapHomeList().then(res=>{ |
| | | let rs = JSON.parse(res.data.result); |
| | | let data = []; |
| | | if(rs.code == 1) { |
| | | data = rs.data.map(item=>{ |
| | | let home = item.StationName1+'-'+item.StationName2+'-'+item.StationName5+'-'+item.StationName3; |
| | | item.label = home; |
| | | item.value = home; |
| | | return item; |
| | | }); |
| | | } |
| | | // 设置组件的值 |
| | | addPanel.homeList = data; |
| | | addPanel.point = point; |
| | | // 显示添加机房的面板 |
| | | this.showMapAddPanel(point); |
| | | }).catch(error=>{ |
| | | }, |
| | | // 查询还未添加到地图上的机房 |
| | | addMapHomeList(point) { |
| | | // 查询后台 |
| | | addMapHomeList().then(res => { |
| | | let rs = JSON.parse(res.data.result); |
| | | let data = []; |
| | | if (rs.code == 1) { |
| | | data = rs.data.map(item => { |
| | | let home = item.StationName1 + '-' + item.StationName2 + '-' + item.StationName5 + '-' + item.StationName3; |
| | | item.label = home; |
| | | item.value = home; |
| | | return item; |
| | | }); |
| | | } |
| | | // 设置组件的值 |
| | | addPanel.homeList = data; |
| | | addPanel.point = point; |
| | | // 显示添加机房的面板 |
| | | this.showMapAddPanel(point); |
| | | }).catch(error => { |
| | | |
| | | }); |
| | | }, |
| | |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .page-index { |
| | | color: #ffffff; |
| | | } |
| | | |
| | | .page-index { |
| | | color: #ffffff; |
| | | } |
| | | .map-container { |
| | | margin-right: 4px; |
| | | margin-left: 4px; |
| | | box-sizing: border-box; |
| | | height: 100%; |
| | | border: 1px solid #143a92; |
| | | border-radius: 8px; |
| | | padding: 10px; |
| | | } |
| | | |
| | | .map-container { |
| | | margin-right: 4px; |
| | | margin-left: 4px; |
| | | box-sizing: border-box; |
| | | height: 100%; |
| | | } |
| | | .map-content { |
| | | height: 100%; |
| | | } |
| | | |
| | | .map-content { |
| | | height: 100%; |
| | | } |
| | | .pie-list { |
| | | display: flex; |
| | | flex-direction: column; |
| | | box-sizing: border-box; |
| | | height: 100%; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .pie-list { |
| | | display: flex; |
| | | flex-direction: column; |
| | | box-sizing: border-box; |
| | | height: 100%; |
| | | overflow: hidden; |
| | | } |
| | | .pie-item { |
| | | flex: 1; |
| | | } |
| | | |
| | | .pie-item { |
| | | flex: 1; |
| | | } |
| | | .map-icon-details-wrapper { |
| | | position: absolute; |
| | | bottom: 8px; |
| | | right: 8px; |
| | | z-index: 99; |
| | | background-color: #FFFFFF; |
| | | color: #000000; |
| | | } |
| | | .map-icon-details-title { |
| | | padding: 2px 8px; |
| | | font-size: 14px; |
| | | color: #FFFFFF; |
| | | background-image: linear-gradient(#00A5EC, #078cc4, #00A5EC); |
| | | font-weight: bold; |
| | | } |
| | | .map-icon-item { |
| | | padding: 2px 8px; |
| | | } |
| | | .map-icon-item .item-wrapper { |
| | | display: inline-block; |
| | | } |
| | | .item-wrapper.icon-wrapper img { |
| | | width: 30px; |
| | | height: auto; |
| | | vertical-align: middle; |
| | | margin-right: 4px; |
| | | } |
| | | .item-wrapper.text-wrapper { |
| | | font-size: 12px; |
| | | } |
| | | </style> |
| | | .map-icon-details-wrapper { |
| | | position: absolute; |
| | | bottom: 16px; |
| | | right: 20px; |
| | | z-index: 99; |
| | | background-color: #052272; |
| | | color: #00ffff; |
| | | } |
| | | |
| | | .map-icon-details-title { |
| | | padding: 6px 12px; |
| | | font-size: 14px; |
| | | color: #FFFFFF; |
| | | background: #0b388b; |
| | | font-weight: bold; |
| | | color: #00ffff; |
| | | } |
| | | |
| | | .map-icon-details-content { |
| | | padding: 10px 12px; |
| | | } |
| | | |
| | | .map-icon-item { |
| | | padding: 4px 8px; |
| | | } |
| | | |
| | | .map-icon-item .item-wrapper { |
| | | display: inline-block; |
| | | } |
| | | |
| | | .item-wrapper.icon-wrapper img { |
| | | width: 30px; |
| | | height: auto; |
| | | vertical-align: middle; |
| | | margin-right: 8px; |
| | | } |
| | | |
| | | .item-wrapper.text-wrapper { |
| | | font-size: 12px; |
| | | } |
| | | </style> |