From 736188d35aa5a1782e1fc4e0a7ceb318e1448a54 Mon Sep 17 00:00:00 2001
From: whyczyk <525500596@qq.com>
Date: 星期五, 30 七月 2021 11:42:50 +0800
Subject: [PATCH] 地图功能提交

---
 src/pages/index.vue |  268 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 263 insertions(+), 5 deletions(-)

diff --git a/src/pages/index.vue b/src/pages/index.vue
index 848c816..d95ef0c 100644
--- a/src/pages/index.vue
+++ b/src/pages/index.vue
@@ -4,7 +4,7 @@
     <van-tabs v-model="active" color="#41c5f6" :swipeable="true" background="#ffffff">
       <van-tab title="杞粨鍥�">
         <div class="chartCon">
-          <china-map ref="chinaMap" id="chinaMap" name="zhongguo"></china-map>
+          <china-map ref="cityChart" id="cityChart" name="zhongguo"></china-map>
         </div>
       </van-tab>
       <van-tab title="绔欑偣鍒楄〃">
@@ -15,8 +15,54 @@
 </template>
 
 <script>
+  import * as ECharts from 'echarts';
   import ChinaMap from '@/components/chart/chinaMap.vue'
   import siteList from '@/components/site/siteList.vue'
+  import {
+    searchMap,
+    searchMapHomeState,
+    getAllMapOutlineAction,
+  } from '@/assets/js/api'
+  import HomeNormal from '@/assets/img/home.png'
+  let mapHomeImage = new Image();
+  mapHomeImage.src = HomeNormal;
+  // 姝e父鐨勫浘鏍�
+  import HomeNormalImage from '@/assets/img/home-normal.png';
+  let homeNormalImage = new Image();
+  homeNormalImage.src = HomeNormalImage;
+  // 鍏呯數鐨勫浘鏍�
+  import HomeChargeImage from '@/assets/img/home-charge.png';
+  let homeChargeImage = new Image();
+  homeChargeImage.src = HomeChargeImage;
+  // 鍛婅鍥炬爣
+  import HomeWarnImage from '@/assets/img/home-warn.png';
+  let homeWarnImage = new Image();
+  homeWarnImage.src = HomeWarnImage;
+  // 鏀剧數鍥炬爣
+  import HomeDischargeImage from '@/assets/img/home-discharge.png';
+  let homeDischargeImage = new Image();
+  homeDischargeImage.src = HomeDischargeImage;
+  const behindOverlay = {
+    animate: "",
+    img: ""
+  };
+  const warnOverlay = {
+    animate: "",
+    img: ""
+  };
+  const timeoutOverlay = {
+    animate: "",
+    img: ""
+  };
+  const normalOverlay = {
+    animate: "",
+    img: ""
+  };
+  let addHomeData = [];
+  let chartData = []; //chart鏁版嵁
+  let abnormalArr = []; //寮傚父鏁扮粍
+  let tempData = []; //绔欑偣鏁扮粍
+  let chart, chartLng, chartLat;
   export default {
     components: {
       ChinaMap,
@@ -28,11 +74,223 @@
       }
     },
     mounted() {
-      this.$nextTick(() => {
-        this.$refs.chinaMap.setData({})
-        this.$refs.chinaMap.searchChartHomeState();
-      })
+      // 鍒濆鍖栭〉闈�
+      this.getAllMapOutlineAction();
     },
+    methods: {
+      getAllMapOutlineAction() { //鏌ヨ婵�娲昏疆寤撳浘
+        getAllMapOutlineAction().then((res) => {
+          let rs = JSON.parse(res.data.result);
+          if (rs.code == 1) {
+            let data = rs.data;
+            data.map((item, index) => {
+              if (item.status == 1) {
+                this.mapName = item.name;
+              }
+            })
+          }
+          this.$nextTick(() => {
+            this.initCityChart();
+          });
+        }).catch((err) => {
+          console.log(err);
+        });
+      },
+      initCityChart() {
+        searchMap().then((res) => {
+          let rs = JSON.parse(res.data.result);
+          let list = this.mergeMapInfos(rs);
+          if (list != undefined && list.length > 0) {
+            list.map((item, index) => {
+              item.name = item.StationName;
+              item.value = [];
+              item.value.push(item.longitude);
+              item.value.push(item.latitude);
+              tempData.push(item)
+            })
+            this.searchChartHomeState();
+
+            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]
+                }
+              }
+            });
+            addHomeData = mapDotList;
+          } else {
+            this.initChart([], []);
+          }
+        }).catch((err) => {
+          console.log(err)
+        })
+      },
+      searchChartHomeState() {
+        searchMapHomeState().then((res) => {
+          let rsState = JSON.parse(res.data.result);
+          let arr = [];
+          abnormalArr = [];
+          if (rsState.code === 1) {
+            let data = rsState.data;
+            data.map((item, i) => {
+              let infos = tempData.filter((jtem) => {
+                return jtem.StationId == item.StationId
+              })
+
+              if (infos.length > 0) {
+                let info = JSON.parse(JSON.stringify(infos[0]));
+                switch (item.num) {
+                  case 1: // 钀藉悗
+                    info.img = HomeDischargeImage;
+                    info.color = '#ff6a6a';
+                    abnormalArr.push(info);
+                    break;
+                  case 2: // 鍛婅
+                    info.img = HomeWarnImage;
+                    info.color = '#d4ac6e';
+                    abnormalArr.push(info);
+                    break;
+                  case 3:
+                    info.img = HomeChargeImage;
+                    info.color = '#4ba1fa';
+                    abnormalArr.push(info);
+                    break;
+                  default:
+                    info.img = HomeNormalImage;
+                    break;
+                }
+                arr.push(info)
+              }
+            })
+            let arrId = [];
+            for (let item of arr) {
+              if (arrId.indexOf(item['StationId']) == -1) {
+                arrId.push(item['StationId']);
+                chartData.push(item);
+              }
+            }
+            this.initChart(chartData, abnormalArr);
+
+          }
+        }).catch((err) => {
+          console.log(err)
+        })
+      },
+      initChart(chartData, abnormalArr) { //鍒濆鍖朿hart鍥�
+        let option = {};
+        if (abnormalArr.length > 0) {
+          option = {
+            series: [{ //鍥剧墖
+              name: '鍥剧墖',
+              type: 'scatter',
+              coordinateSystem: 'geo',
+              symbol: function (value, params) {
+                return 'image://' + params.data.img
+              },
+              symbolSize: [26, 26],
+              label: {
+                normal: {
+                  show: false,
+                }
+              },
+              data: chartData,
+              showEffectOn: 'render',
+              rippleEffect: {
+                brushType: 'stroke'
+              },
+              hoverAnimation: true,
+              zlevel: 2
+            }, { //娉㈢汗鐐�
+              type: 'effectScatter',
+              coordinateSystem: 'geo',
+              showEffectOn: 'render',
+              zlevel: 1,
+              rippleEffect: {
+                period: 4,
+                scale: 4,
+                brushType: 'fill'
+              },
+              hoverAnimation: false,
+              label: {
+                normal: {
+                  show: false
+                },
+              },
+              itemStyle: {
+                normal: {
+                  color: function (value, params) {
+                    return value.data.color
+                  },
+                  shadowBlur: 8,
+                  shadowColor: function (value, params) {
+                    return value.data.color
+                  },
+                }
+              },
+              symbolSize: [15, 15],
+              data: abnormalArr
+            }]
+          };
+        } else {
+          option = {
+            series: [{ //鍥剧墖
+              name: '鍥剧墖',
+              type: 'scatter',
+              coordinateSystem: 'geo',
+              symbol: function (value, params) {
+                return 'image://' + params.data.img
+              },
+              symbolSize: [26, 26],
+              label: {
+                normal: {
+                  show: false,
+                }
+              },
+              data: chartData,
+              showEffectOn: 'render',
+              rippleEffect: {
+                brushType: 'stroke'
+              },
+              hoverAnimation: true,
+              zlevel: 2
+            }]
+          };
+        }
+        console.log(option)
+        this.$refs.cityChart.setData(option);
+      },
+      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;
+      },
+    }
   }
 </script>
 

--
Gitblit v1.9.1