From 9185072c775eaf1cd3df53d06bc81dc5bfc8264b Mon Sep 17 00:00:00 2001
From: chenyibo <p-honggang.li@pcitc.com>
Date: 星期二, 30 三月 2021 16:31:58 +0800
Subject: [PATCH] Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop

---
 vue.config.js                                                       |    2 
 src/components/BaseNav/PublicBounced/GasComponents/GasVideo.vue     |   74 +
 src/styles/theme-dark/variable.less                                 |    2 
 public/static/airQuality.json                                       |  117 ++
 src/assets/images/map-pages/basenav/flugas/green_airquality_2.png   |    0 
 src/assets/images/map-pages/basenav/Waste-water/fs_yellow.png       |    0 
 src/assets/images/map-pages/basenav/solidwaste/voc.png              |    0 
 src/conf/Constants.js                                               |    6 
 src/assets/images/map-pages/basenav/solidwaste/gf_green.png         |    0 
 src/assets/images/map-pages/basenav/flugas/green_airquality_3.png   |    0 
 src/components/BaseNav/flueGas/flueGas.js                           |  178 ++++
 public/static/WasteWater.json                                       |  117 ++
 src/assets/images/map-pages/basenav/Waste-water/fs_gray.png         |    0 
 src/conf/layers/LayerWasteGas.js                                    |   51 +
 src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue   |  164 +++
 src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue  |   53 +
 src/components/LayerController/logic/Sample.js                      |    9 
 src/components/BaseNav/PublicBounced/PublicBounced.vue              |   97 ++
 src/img/fs_yellow.7fe82c5d.png                                      |    0 
 src/main.js                                                         |    1 
 src/assets/images/map-pages/basenav/Waste-water/fs_green_xc.png     |    0 
 src/components/plugin/pulse/Pulse.css                               |   34 
 src/assets/css/map/leaflet.magicMarker.css                          |   13 
 public/static/SolidWaste.json                                       |   81 +
 src/components/BaseNav/WasteWater/WasteWater.js                     |  177 ++++
 src/components/plugin/MagicMarker.js                                |   82 
 src/assets/images/map-pages/basenav/Waste-water/fs_blue.png         |    0 
 src/utils/AjaxUtils.js                                              |    2 
 src/Sgis.js                                                         |   27 
 src/components/plugin/pulse/Pulse.js                                |   77 +
 src/conf/layers/LayerSolidWaste.js                                  |   27 
 src/components/BaseNav/SolidWaste/SolidWaste.js                     |  182 ++++
 src/components/LayerController/service/WmsLayerService.js           |   11 
 src/components/BaseNav/SolidWaste/directive.js                      |   59 +
 src/components/LayerController/service/WfsLayerService.js           |  119 ++
 src/components/LayerController/service/PopupService.js              |    0 
 src/utils/axios.js                                                  |    8 
 src/assets/images/map-pages/basenav/Waste-water/fs_bright_green.png |    0 
 src/api/request.js                                                  |   24 
 src/conf/layers/LayerWasteWater.js                                  |   37 
 src/components/BaseNav/WireSurface/index.js                         |   22 
 src/views/MapTemplate.vue                                           |  166 +++
 src/assets/images/map-pages/basenav/Waste-water/fs_orange.png       |    0 
 src/components/LayerController/service/LayerFactory.js              |   88 ++
 src/components/BaseNav/PublicBounced/GasComponents/GasTabs.vue      |   20 
 src/assets/images/map-pages/basenav/Waste-water/fs_green.png        |    0 
 src/assets/images/map-pages/basenav/Waste-water/fs_red.png          |    0 
 src/components/LayerController/modules/LcServiceLayer.vue           |  240 ++--
 src/conf/layers/LayerSewers.js                                      |   22 
 /dev/null                                                           |   30 
 src/conf/MapConfig.js                                               |   32 
 package.json                                                        |    1 
 src/components/LayerController/service/BusiLayerService.js          |   32 
 src/components/panel/topicSearch/SewersSearch.vue                   |    2 
 src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue       |  123 ++
 55 files changed, 2,361 insertions(+), 248 deletions(-)

diff --git a/package.json b/package.json
index 1004223..abf1a54 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
     "leaflet.markercluster": "^1.4.1",
     "lodash": "^4.17.10",
     "nprogress": "^0.2.0",
+    "qs": "^6.10.1",
     "rbush": "^3.0.1",
     "screenfull": "^3.3.3",
     "style-resources-loader": "^1.4.1",
diff --git a/public/static/SolidWaste.json b/public/static/SolidWaste.json
new file mode 100644
index 0000000..3a16382
--- /dev/null
+++ b/public/static/SolidWaste.json
@@ -0,0 +1,81 @@
+{
+  "Result": {
+    "IsSuccess": 1,
+    "code": 1,
+    "ErrorMsg": "",
+    "DataInfo": [
+      {
+        "StoragePlaceId": 124.0,
+        "StoragePlaceName": "鑱氶啔閮ㄥ嵄闄╁簾鐗╂殏瀛樼偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 95.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 95.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.22118377685547,
+        "positionY": 118.78057479858398
+      },
+      {
+        "StoragePlaceId": 123.0,
+        "StoragePlaceName": "鍖栧伐閮ㄥ嵄闄╁簾鐗╂殏瀛樼偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 260.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 260.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.23122596740723,
+        "positionY": 118.7743091583252
+      },
+      {
+        "StoragePlaceId": 127.0,
+        "StoragePlaceName": "鐐兼补閮ㄥ嵄闄╁簾鐗╂殏瀛樼偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 351.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 351.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.222299575805664,
+        "positionY": 118.74950408935547
+      },
+      {
+        "StoragePlaceId": 126.0,
+        "StoragePlaceName": "鐑儍閮ㄥ嵄闄╁簾鐗╂殏瀛樼偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 1.0,
+        "DesignFloorArea": 54.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 54.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 1.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.23092555999756,
+        "positionY": 118.75735759735107
+      }
+    ]
+  }
+}
diff --git a/public/static/WasteWater.json b/public/static/WasteWater.json
new file mode 100644
index 0000000..44ed223
--- /dev/null
+++ b/public/static/WasteWater.json
@@ -0,0 +1,117 @@
+{
+  "Result": {
+    "IsSuccess": 1,
+    "code": 1,
+    "ErrorMsg": "",
+    "DataInfo": [
+      {
+        "StoragePlaceId": 124.0,
+        "StoragePlaceName": "鐐兼补閮ㄥ惈娌规薄姘存帓鏀惧彛",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 95.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 95.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.234354069955536,
+        "positionY": 118.76172605141248
+      },
+      {
+        "StoragePlaceId": 123.0,
+        "StoragePlaceName": "姘村姟閮ㄧ儻鐑冨閮ㄦ帓姘村彛",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 260.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 260.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.21783286123124,
+        "positionY": 118.74581627024358
+      },
+      {
+        "StoragePlaceId": 127.0,
+        "StoragePlaceName": "鑱氶啔閮ㄥ簾姘存帓鏀惧彛",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 351.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 351.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.21761792102056,
+        "positionY": 118.7694434198091
+      },
+      {
+        "StoragePlaceId": 126.0,
+        "StoragePlaceName": "姘村姟閮ㄩ洦姘存帓鏀惧彛",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 1.0,
+        "DesignFloorArea": 54.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 54.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 1.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.22328407752166,
+        "positionY": 118.7645304033338
+      },
+      {
+        "StoragePlaceId": 122.0,
+        "StoragePlaceName": "鐢熶骇搴熸按鎺掓斁鍙�",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 1.0,
+        "DesignFloorArea": 124.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 124.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 1.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.22478169721047,
+        "positionY": 118.75309838487216
+      },
+      {
+        "StoragePlaceId": 129.0,
+        "StoragePlaceName": "鍖栧纭寲鍝佹帓姘村彛",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 78.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 78.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.228692681454525,
+        "positionY": 118.77199913186048
+      }
+    ]
+  }
+}
diff --git a/public/static/airQuality.json b/public/static/airQuality.json
new file mode 100644
index 0000000..2040078
--- /dev/null
+++ b/public/static/airQuality.json
@@ -0,0 +1,117 @@
+{
+  "Result": {
+    "IsSuccess": 1,
+    "code": 1,
+    "ErrorMsg": "",
+    "DataInfo": [
+      {
+        "StoragePlaceId": 124.0,
+        "StoragePlaceName": "鑱氶啔閮ㄥ簾姘旀帓鏀剧偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 95.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 95.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.214483532361875,
+        "positionY":118.80441341164345
+      },
+      {
+        "StoragePlaceId": 123.0,
+        "StoragePlaceName": "鍖栧伐閮ㄥ簾姘旀帓鏀剧偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 260.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 260.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.22122596740723,
+        "positionY": 118.7843091583252
+      },
+      {
+        "StoragePlaceId": 127.0,
+        "StoragePlaceName": "鐐兼补閮ㄥ簾姘旀帓鏀剧偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 351.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 351.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.232299575805664,
+        "positionY": 118.78950408935547
+      },
+      {
+        "StoragePlaceId": 126.0,
+        "StoragePlaceName": "鐑儍閮ㄥ簾姘旀帓鏀剧偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 1.0,
+        "DesignFloorArea": 54.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 54.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 1.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.24092555999756,
+        "positionY": 118.75035759735107
+      },
+      {
+        "StoragePlaceId": 127.0,
+        "StoragePlaceName": "鐑數绔欏簾姘旀帓鏀剧偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 0,
+        "DesignFloorArea": 351.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 351.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 0.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.21459850282962,
+        "positionY": 118.75664928244586
+      },
+      {
+        "StoragePlaceId": 126.0,
+        "StoragePlaceName": "瀹夌幆绔欏簾姘旀帓鏀剧偣",
+        "HazaWasteStorageDate": "0001-01-01T00:00:00",
+        "HazaWasteCatgrName": null,
+        "SurplusQuantityWarning": 0,
+        "LongDayWarning": 1.0,
+        "DesignFloorArea": 54.0,
+        "HazaWasteName": null,
+        "EstimateFloorArea": 0.0,
+        "HazaWasteDeptName": null,
+        "SurplusFloorArea": 54.0,
+        "HazaWasteStorageDays": 0.0,
+        "StorageQty": 1.0,
+        "HazaWasteStorageQty": 0.0,
+        "positionX": 32.22176451502621,
+        "positionY": 118.75520774508638
+      }
+    ]
+  }
+}
diff --git a/src/Sgis.js b/src/Sgis.js
index cbc3d10..6e794e0 100644
--- a/src/Sgis.js
+++ b/src/Sgis.js
@@ -1,22 +1,24 @@
 import BasemapHelper from '@components/helpers/BasemapHelper'
 import VectorLayerHelper from '@components/helpers/VectorLayerHelper'
+// 鍒濆鍖栨樉绀�
 import ServiceLayerHelper from '@components/helpers/ServiceLayerHelper'
+
 import '@components/plugin/PathDrag'
-// import MagicMarker from '@components/plugin/MagicMarker'
-// import WmtsSupport from '@components/plugin/wmts_plugins'
 import MapConfig from '@/conf/MapConfig'
 import '@components/plugin/PathDashFlow' // 娴佸姩绾垮浘
-// import CanvasMarkers from '@components/plugin/CanvasMarkers'
-// import FullScreen from '@components/plugin/FullScreen'
 import DownLoad from '@components/plugin/DownLoad'
 // 娴嬮噺
 import '@components/plugin/leaflet-measure-path/leaflet-measure-path'
 
 import 'leaflet.markercluster'
-// import 'leaflet-canvas-markers'
 import './components/plugin/Leaflet.GridLayer.FadeOut' // 鐡︾墖鍥惧眰鍒囨崲娣″叆娣″嚭
 import './components/plugin/leaflet-canvas-markers' // 鐢诲竷marker
 import './components/plugin/Editable' // 鏍囩粯鎿嶄綔
+import './components/plugin/MagicMarker' // 鍔ㄧ敾Marker
+import './assets/css/map/magic.min.css' // 鍔ㄧ敾Marker css
+import '@/components/plugin/magicMarker.css'
+import '@components/plugin/pulse/Pulse' // marker 澶栧湀娉�
+import '@components/plugin/pulse/Pulse.css' // marker 澶栧湀娉� css
 
 let map = null
 const L = window.L
@@ -24,19 +26,7 @@
   if (map != null) {
     map.remove()
   }
-
-  // Leaflet鎵╁睍浠g爜
-  // Editable.init(L) // 鍥惧眰缂栬緫
-  // PathDrag.init(L) // 璺緞鎷栨嫿
-  // MagicMarker.init(L) // 鍔ㄧ敾Marker
-  // WmtsSupport.init(L) // 鎵╁睍锛屼娇鏀寔WMTS
-  // CustomPopup.init(L) // 鑷畾涔夊脊鍑烘
-  // CanvasMarkers.init(L)// 鐢诲竷鍥惧眰
-  // 鍏ㄥ睆
-  // FullScreen.init(L)
-  // 涓嬭浇
   DownLoad.init(L)
-  // LeafletMeasurePath.init(L)
 
   map = L.map(div, MapConfig.mapOptions)
 
@@ -46,7 +36,9 @@
 
   window.map = map
   window.L = L
+
   initTileLayersHelper(map)
+
   return map
 }
 
@@ -68,7 +60,6 @@
   var serviceLayerHelper = new ServiceLayerHelper({ map })
   return serviceLayerHelper
 }
-
 /**
  * 鐭㈤噺鍦板浘鍒濆鍖�
  * @param map
diff --git a/src/api/request.js b/src/api/request.js
new file mode 100644
index 0000000..9f9091d
--- /dev/null
+++ b/src/api/request.js
@@ -0,0 +1,24 @@
+import $http from '@utils/axios'
+import Qs from 'qs'
+
+export const QueryStoragePlaceListByCompanyAndName = (data = {}) => {
+  return $http.post('/EPInterface/DataService/EPMapService.asmx/QueryStoragePlaceListByCompanyAndName', Qs.stringify(data), {
+    headers: {
+      'Content-Type': 'application/json'
+    }
+  })
+}
+export const FlueGas = (data = {}) => {
+  return $http.post('/EPInterface/DataService/EPMapService.asmx/ObtainningConInfo', Qs.stringify(data), {
+    headers: {
+      'Content-Type': 'application/json'
+    }
+  })
+}
+export function requestWasteWater (data = {}) {
+  return $http.post('EPInterface/DataService/EPMapService.asmx/ObtainningConInfo', Qs.stringify(data), {
+    headers: {
+      'Content-Type': 'application/json'
+    }
+  })
+}
\ No newline at end of file
diff --git a/src/assets/css/map/leaflet.magicMarker.css b/src/assets/css/map/leaflet.magicMarker.css
new file mode 100644
index 0000000..b379bf1
--- /dev/null
+++ b/src/assets/css/map/leaflet.magicMarker.css
@@ -0,0 +1,13 @@
+.magicDiv{
+    height: 0;
+    width: 0;
+}
+.magicIcon{
+    position:relative;
+    top:-5px;
+    left:-16px;
+}
+.leaflet-div-icon{
+    background: transparent;
+    border:none;
+}
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_blue.png b/src/assets/images/map-pages/basenav/Waste-water/fs_blue.png
new file mode 100644
index 0000000..af3c97b
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_blue.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_bright_green.png b/src/assets/images/map-pages/basenav/Waste-water/fs_bright_green.png
new file mode 100644
index 0000000..9d6dae8
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_bright_green.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_gray.png b/src/assets/images/map-pages/basenav/Waste-water/fs_gray.png
new file mode 100644
index 0000000..9ebebf7
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_gray.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_green.png b/src/assets/images/map-pages/basenav/Waste-water/fs_green.png
new file mode 100644
index 0000000..e75d458
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_green.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_green_xc.png b/src/assets/images/map-pages/basenav/Waste-water/fs_green_xc.png
new file mode 100644
index 0000000..dfa3415
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_green_xc.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_orange.png b/src/assets/images/map-pages/basenav/Waste-water/fs_orange.png
new file mode 100644
index 0000000..95c544c
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_orange.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_red.png b/src/assets/images/map-pages/basenav/Waste-water/fs_red.png
new file mode 100644
index 0000000..ac1b8f2
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_red.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/Waste-water/fs_yellow.png b/src/assets/images/map-pages/basenav/Waste-water/fs_yellow.png
new file mode 100644
index 0000000..8d84aa8
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/Waste-water/fs_yellow.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/green_airquality_2.png b/src/assets/images/map-pages/basenav/flugas/green_airquality_2.png
new file mode 100644
index 0000000..ca7b11b
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/green_airquality_2.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/green_airquality_3.png b/src/assets/images/map-pages/basenav/flugas/green_airquality_3.png
new file mode 100644
index 0000000..d5f6a73
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/green_airquality_3.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/solidwaste/gf_green.png b/src/assets/images/map-pages/basenav/solidwaste/gf_green.png
new file mode 100644
index 0000000..144c0ce
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/solidwaste/gf_green.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/solidwaste/voc.png b/src/assets/images/map-pages/basenav/solidwaste/voc.png
new file mode 100644
index 0000000..3ccaad5
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/solidwaste/voc.png
Binary files differ
diff --git a/src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue b/src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue
new file mode 100644
index 0000000..9084a18
--- /dev/null
+++ b/src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue
@@ -0,0 +1,164 @@
+<template>
+  <!-- 妗� -->
+  <div class="win">
+    <!-- 鍥涗釜瑙掔殑杈规鏁堟灉 -->
+    <div class="border_corner border_corner_left_top"></div>
+    <div class="border_corner border_corner_right_top"></div>
+    <div class="border_corner border_corner_left_bottom"></div>
+    <div class="border_corner border_corner_right_bottom"></div>
+    <div class="main">
+      <div class="main-echarts">
+        <div id="echarts" style="width:100%;height:100%" ref="main"></div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'GasECharts',
+  methods: {
+    drawChart: function () {
+      const myChart = this.$echarts.init(this.$refs.main)
+      const option = {
+        title: {
+          text: '鎶樼嚎鍥惧爢鍙�'
+        },
+        // color: '#fff',
+        tooltip: {
+          trigger: 'axis'
+        },
+        // legend: {
+        //   data: ['閭欢钀ラ攢', '鑱旂洘骞垮憡', '瑙嗛骞垮憡', '鐩存帴璁块棶', '鎼滅储寮曟搸']
+        // },
+        grid: {
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        toolbox: {
+          feature: {
+            saveAsImage: {}
+          }
+        },
+        xAxis: {
+          type: 'category',
+          boundaryGap: false,
+          data: ['鍛ㄤ竴', '鍛ㄤ簩', '鍛ㄤ笁', '鍛ㄥ洓', '鍛ㄤ簲', '鍛ㄥ叚', '鍛ㄦ棩'],
+          axisLabel: {
+            textStyle: {
+              color: '#7edae8' // 鍧愭爣鐨勫瓧浣撻鑹�
+            }
+          },
+          axisLine: {
+            show: false, // 闅愯棌鍧愭爣杞�
+            lineStyle: {
+              color: '#00eeff' // 鍧愭爣杞寸殑棰滆壊
+            }
+          }
+        },
+        yAxis: [{
+          type: 'value',
+          axisLabel: {
+            textStyle: {
+              color: '#7edae8' // 鍧愭爣鐨勫瓧浣撻鑹�
+            }
+          },
+          axisLine: {
+            show: false, // 闅愯棌鍧愭爣杞�
+            lineStyle: {
+              color: '#00eeff' // 鍧愭爣杞寸殑棰滆壊
+            }
+          }
+        }],
+        series: [
+          {
+            name: '閭欢钀ラ攢',
+            type: 'line',
+            stack: '鎬婚噺',
+            data: [120, 132, 101, 134, 90, 230, 210]
+          },
+          {
+            name: '鑱旂洘骞垮憡',
+            type: 'line',
+            stack: '鎬婚噺',
+            data: [220, 182, 191, 234, 290, 330, 310]
+          },
+          {
+            name: '瑙嗛骞垮憡',
+            type: 'line',
+            stack: '鎬婚噺',
+            data: [150, 232, 201, 154, 190, 330, 410]
+          },
+          {
+            name: '鐩存帴璁块棶',
+            type: 'line',
+            stack: '鎬婚噺',
+            data: [320, 332, 301, 334, 390, 330, 320]
+          },
+          {
+            name: '鎼滅储寮曟搸',
+            type: 'line',
+            stack: '鎬婚噺',
+            data: [820, 932, 901, 934, 1290, 1330, 1320]
+          }
+        ]
+      }
+      myChart.setOption(option)
+    }
+  },
+  mounted () {
+    this.drawChart()
+  }
+}
+</script>
+
+<style scoped lang="less">
+.win {
+  width: 100%;
+  height: 100%;
+  position: relative;
+  //display: inline-block;
+  background-color: rgba(33, 41, 69,0.9);
+}
+.border_corner{
+  z-index: 2500;
+  position: absolute;
+  width: 10px;
+  height: 10px;
+  background: rgba(0,0,0,0);
+  border: 1.5px solid #47d5ea;
+}
+.border_corner_left_top{
+  top: 0;
+  left: 0;
+  border-right: none;
+  border-bottom: none;
+}
+.border_corner_right_top{
+  top: 0;
+  right: 0;
+  border-left: none;
+  border-bottom: none;
+}
+.border_corner_left_bottom{
+  bottom: 0;
+  left: 0;
+  border-right: none;
+  border-top: none;
+}
+.border_corner_right_bottom{
+  bottom: 0;
+  right: 0;
+  border-left: none;
+  border-top: none;
+}
+.main {
+  width: 100%;
+  height: 100%;
+  .main-echarts{
+    border: 1px solid #396d83;
+  }
+}
+</style>
diff --git a/src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue b/src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue
new file mode 100644
index 0000000..e05f59f
--- /dev/null
+++ b/src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue
@@ -0,0 +1,123 @@
+<template>
+  <!-- 妗� -->
+  <div class="win">
+    <!-- 鍥涗釜瑙掔殑杈规鏁堟灉 -->
+    <div class="border_corner border_corner_left_top"></div>
+    <div class="border_corner border_corner_right_top"></div>
+    <div class="border_corner border_corner_left_bottom"></div>
+    <div class="border_corner border_corner_right_bottom"></div>
+    <div class="main">
+      <div class="main-matter">
+        <el-row type="flex" class="row-bg row-item-one" justify="space-around">
+          <el-col :span="12">鐩戞祴鐐瑰悕绉�:{{ displayContent.Name }}</el-col>
+          <el-col :span="12">鐢熶骇鍗曚綅:{{ displayContent.DeptSname }}</el-col>
+          <el-col :span="12">鎺掓斁绫诲瀷鍔犺浇:{{ displayContent.EmissTypeName }}</el-col>
+        </el-row>
+        <el-row type="flex" class="row-bg" justify="space-around">
+          <el-col :span="12">鎺掓斁鍘诲悜:{{ displayContent.EmissTypeDirectName }}</el-col>
+          <el-col :span="12">鎺у埗绾у埆鍚嶇О:{{ displayContent.ContrLevelShowName }}</el-col>
+          <el-col :span="12">鍐�/澶栨帓鍙�:{{ displayContent.OrOutPortName }}</el-col>
+        </el-row>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'GasTable',
+  props: ['displayContent'],
+  data () {
+    return {}
+  }
+}
+</script>
+
+<style scoped lang="less">
+
+.win {
+  position: relative;
+  //display: inline-block;
+  margin-bottom: 13px;
+  background-color: rgba(33, 41, 69,0.9);
+}
+.main {
+  width: 100%;
+  height: 100%;
+  .main-matter{
+    font-size: 13px;
+    padding: 9px 7px;
+    font-weight: normal;
+    border: 1px solid #396d83;
+    .row-item-one{
+      margin-bottom: 7px;
+    }
+    .el-row {
+      width: 100%;
+      color: #00d0f9;
+      display: flex;
+      font-size: 12px!important;
+      .el-col{
+        flex: 1;
+        width: 100%;
+        background-color: #243a55;;
+        text-align: center;
+        line-height: 28px;
+        margin-left: 6px;
+        border-radius: 4px;
+        &:nth-child(1){
+          margin-left:0;
+        }
+      }
+    }
+  }
+}
+.border_corner{
+  z-index: 2500;
+  position: absolute;
+  width: 10px;
+  height: 10px;
+  background: rgba(0,0,0,0);
+  border: 1.5px solid #47d5ea;
+}
+.border_corner_left_top{
+  top: 0;
+  left: 0;
+  border-right: none;
+  border-bottom: none;
+}
+.border_corner_right_top{
+  top: 0;
+  right: 0;
+  border-left: none;
+  border-bottom: none;
+}
+.border_corner_left_bottom{
+  bottom: 0;
+  left: 0;
+  border-right: none;
+  border-top: none;
+}
+.border_corner_right_bottom{
+  bottom: 0;
+  right: 0;
+  border-left: none;
+  border-top: none;
+}
+//.el-row {
+//  width: 100%;
+//  color: #00d0f9;
+//  .el-col{
+//    width: 180px;
+//    height: 28px;
+//    background-color: #243a55;;
+//    text-align: center;
+//    line-height: 28px;
+//    margin-left: 6px;
+//    border-radius: 4px;
+//    &:nth-child(1){
+//      margin-left:0;
+//    }
+//  }
+//}
+</style>
diff --git a/src/components/BaseNav/PublicBounced/GasComponents/GasTabs.vue b/src/components/BaseNav/PublicBounced/GasComponents/GasTabs.vue
new file mode 100644
index 0000000..1df30fe
--- /dev/null
+++ b/src/components/BaseNav/PublicBounced/GasComponents/GasTabs.vue
@@ -0,0 +1,20 @@
+<template>
+<div>
+  <el-tabs v-model="activeName">
+    <el-tab-pane label="鐢ㄦ埛绠$悊" name="first">鐢ㄦ埛绠$悊</el-tab-pane>
+    <el-tab-pane label="閰嶇疆绠$悊" name="second">閰嶇疆绠$悊</el-tab-pane>
+    <el-tab-pane label="瑙掕壊绠$悊" name="third">瑙掕壊绠$悊</el-tab-pane>
+    <el-tab-pane label="瀹氭椂浠诲姟琛ュ伩" name="fourth">瀹氭椂浠诲姟琛ュ伩</el-tab-pane>
+  </el-tabs>
+</div>
+</template>
+
+<script>
+export default {
+  name: 'GasTabs'
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/components/BaseNav/PublicBounced/GasComponents/GasVideo.vue b/src/components/BaseNav/PublicBounced/GasComponents/GasVideo.vue
new file mode 100644
index 0000000..fc152ab
--- /dev/null
+++ b/src/components/BaseNav/PublicBounced/GasComponents/GasVideo.vue
@@ -0,0 +1,74 @@
+<template>
+  <div class="win" >
+    <!-- 鍥涗釜瑙掔殑杈规鏁堟灉 -->
+    <div class="border_corner border_corner_left_top"></div>
+    <div class="border_corner border_corner_right_top"></div>
+    <div class="border_corner border_corner_left_bottom"></div>
+    <div class="border_corner border_corner_right_bottom"></div>
+    <div class="main">
+      <div class="main-video">
+        <video width="100%" height="100%" controls>
+          <source src="movie.mp4" type="video/mp4">
+          <source src="movie.ogg" type="video/ogg">
+        </video>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'GasVideo'
+}
+</script>
+
+<style scoped lang="less">
+.win {
+  /*width: 100%;*/
+  /*height: 100%;*/
+  position: relative;
+  //display: inline-block;
+  background-color: rgba(33, 41, 69,0.9);
+/*//border: 1px solid #396d83;*/
+}
+.main {
+  width: 100%;
+  height: 100%;
+  .main-video {
+    padding: 7px;
+    border: 1px solid #396d83;
+  }
+}
+.border_corner{
+  z-index: 2500;
+  position: absolute;
+  width: 14px;
+  height: 14px;
+  background: rgba(0,0,0,0);
+  border: 1.5px solid #47d5ea;
+}
+.border_corner_left_top{
+  top: 0;
+  left: 0;
+  border-right: none;
+  border-bottom: none;
+}
+.border_corner_right_top{
+  top: 0;
+  right: 0;
+  border-left: none;
+  border-bottom: none;
+}
+.border_corner_left_bottom{
+  bottom: 0;
+  left: 0;
+  border-right: none;
+  border-top: none;
+}
+.border_corner_right_bottom{
+  bottom: 0;
+  right: 0;
+  border-left: none;
+  border-top: none;
+}
+</style>
diff --git a/src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue b/src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue
new file mode 100644
index 0000000..2c878b8
--- /dev/null
+++ b/src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue
@@ -0,0 +1,53 @@
+<template>
+  <div class="public-table">
+    <table border="1">
+      <tr>
+        <th>111</th>
+        <th>111</th>
+        <th>111</th>
+        <th>111</th>
+        <th>111</th>
+        <th>111</th>
+      </tr>
+      <tr>
+        <td>4444444444</td>
+        <td>4444444444</td>
+        <td>4444444444</td>
+        <td>4444444444</td>
+        <td>4444444444</td>
+        <td>4444444444</td>
+      </tr>
+    </table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'PublicTable',
+  data () {
+    return {
+      tableData: [{
+        date: '2016-05-02',
+        name: '鐜嬪皬铏�',
+        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�'
+      }, {
+        date: '2016-05-04',
+        name: '鐜嬪皬铏�',
+        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1517 寮�'
+      }, {
+        date: '2016-05-01',
+        name: '鐜嬪皬铏�',
+        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�'
+      }, {
+        date: '2016-05-03',
+        name: '鐜嬪皬铏�',
+        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�'
+      }]
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+
+</style>
diff --git a/src/components/BaseNav/PublicBounced/PublicBounced.vue b/src/components/BaseNav/PublicBounced/PublicBounced.vue
new file mode 100644
index 0000000..275b86e
--- /dev/null
+++ b/src/components/BaseNav/PublicBounced/PublicBounced.vue
@@ -0,0 +1,97 @@
+<template>
+  <div class="public-bounced" v-draw v-show="flag">
+    <div class="public-bounced-title">
+      <span>{{ displayContent.Name }}</span>
+      <i class="el-icon-circle-close" @click="closePopup"></i>
+    </div>
+    <div class="public-bounced-content">
+      <div class="public-bounced-content-left">
+        <GasTab :displayContent="displayContent"></GasTab>
+        <PublicTable v-if="value === 'gufei'"></PublicTable>
+        <GasECharts v-else></GasECharts>
+      </div>
+      <div class="public-bounced-content-right">
+        <GasVideo></GasVideo>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+
+import '@/components/BaseNav/SolidWaste/directive'
+import GasTab from '@components/BaseNav/PublicBounced/GasComponents/GasTab'
+import PublicTable from '@components/BaseNav/PublicBounced/GasComponents/PublicTable'
+import GasECharts from '@components/BaseNav/PublicBounced/GasComponents/GasECharts'
+import GasVideo from '@components/BaseNav/PublicBounced/GasComponents/GasVideo'
+
+export default {
+  name: 'PublicBounced',
+  components: {
+    GasTab,
+    PublicTable,
+    GasECharts,
+    GasVideo
+  },
+  data () {
+    return {
+      displayContent: [],
+      flag: false
+    }
+  },
+  methods: {
+    setData (data, value) {
+      this.displayContent = data
+      this.flag = true
+      this.value = value
+    },
+    closePopup () {
+      this.flag = false
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.public-bounced {
+  z-index: 999;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  background-color: #002432;
+  border: 1px #9fc5c8 solid;
+
+  .public-bounced-title {
+    border: 1px #a4c0d8 solid;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 5px 0;
+
+    span {
+      color: #f4f7ff;
+      margin: 0 15px;
+      font-size: 14px;
+    }
+
+    i {
+      color: white;
+      margin: 0 15px;
+      font-size: 22px;
+    }
+  }
+
+  .public-bounced-content {
+    display: flex;
+    align-items: center;
+    justify-content: space-around;
+
+    .public-bounced-content-left {
+    }
+
+    .public-bounced-content-right {
+    }
+  }
+
+}
+</style>
\ No newline at end of file
diff --git a/src/components/BaseNav/SolidWaste/SolidWaste.js b/src/components/BaseNav/SolidWaste/SolidWaste.js
new file mode 100644
index 0000000..6df5e3e
--- /dev/null
+++ b/src/components/BaseNav/SolidWaste/SolidWaste.js
@@ -0,0 +1,182 @@
+import { QueryStoragePlaceListByCompanyAndName } from '@/api/request'
+// 灞曠ず鍥剧墖
+import defaultImg from '@assets/images/map-pages/basenav/solidwaste/voc.png'
+import Setting from '@assets/images/map-pages/basenav/solidwaste/gf_green.png'
+
+// 搴曞浘涓氬姟灞曠ず鐐�
+class AddSolidWasteHelper {
+  constructor (options) {
+    this.map = options.map
+    this.L = window.L
+    this.SolidWasteLayerGroup = this.L.layerGroup().addTo(this.map)
+    this.SolidWastePopup = null
+    this.L.sgis = this.L.sgis || this.L
+    this.solidWasteMarkersLabels = []
+    this.pulseHeighLightMarker = null
+  }
+
+  // 璇锋眰鏁版嵁 data 涓哄弬鏁帮紝 璇锋眰鍚庡彴鏁版嵁鏃� 鎼哄甫data鍙傛暟
+  requestData (data) {
+    QueryStoragePlaceListByCompanyAndName(data).then(res => {
+      // console.log(res)
+      this.DrawTheSolidWasteContent(res.Result.DataInfo)
+    }).catch(err => {
+      console.log(err)
+    })
+  }
+
+  // 鏍规嵁鑾峰彇鏁版嵁 鐢诲嚭 鍐呭
+  DrawTheSolidWasteContent (data) {
+    // 鍥炬爣鏍峰紡鎵╁睍
+    var SolidWasteIcon = this.SolidWasteIcon()
+
+    // //鍔犺浇鏁版嵁鍓嶅鏋滃瓨鍦ㄥ浘灞傜粍 閭d箞娓呴櫎鎺�
+    if (this.SolidWasteLayerGroup) {
+      this.SolidWasteLayerGroup.clearLayers()
+    }
+    for (let i = 0; i < data.length; i++) {
+      // 缁忕含搴� 浣嶇疆
+      const positionX = data[i].Latitude
+      const positionY = data[i].Longitude
+
+      // 鍒ゆ柇 缁忕含搴︿綅缃俊鎭槸鍚﹀瓨鍦�
+      if (positionX != null && positionY != null) {
+        // 鐢ㄤ簬 鍒ゆ柇 => 鍒ゆ柇鏄惁灞曠ず鑴夊啿鏁堟灉 => temp(涓存椂)
+        const determineValueOne = data[i].LongDayWarning
+        var determineValueTwo = data[i].StorageQty
+        const positionArea = [positionX, positionY]
+
+        // 鍥炬爣灞曠ず
+        var iconUrl = this.SolidWasteIconUrl(determineValueOne, determineValueTwo, positionArea)
+        var Icon = new SolidWasteIcon({ iconUrl: iconUrl })
+        // var url = Icon.options.iconUrl
+
+        const marker = this.L.marker([positionX, positionY], { icon: Icon })
+        // 鍒掕繃鍑虹幇 灞曠ず鏁版嵁
+        marker.bindTooltip(data[i].Name, {
+          permanent: true,
+          offset: [0, -16],
+          direction: 'top',
+          className: ''
+        })
+        // 鐐瑰嚮 浜嬩欢
+        marker.on('click', (e) => {
+          try {
+            // console.log(e)
+            // console.log(this.map.getCenter())
+            // console.log(this.map.setCenter([e.target.getLatLng().lat, e.target.getLatLng().lng]))
+            // this.map.flyTo([e.target.getLatLng().lat, e.target.getLatLng().lng])
+            // this.map.panTo([e.target.getLatLng().lat, e.target.getLatLng().lng], 100)
+            this.setPanTo(e.target.getLatLng(), 30)
+            this.EffectOfPulse(e.target.getLatLng())
+            this.SolidWastePopup.setData(data[i], 'gufei')
+            return this.SolidWastePopup.$el
+          } catch (error) {
+            console.log(error)
+          }
+        })
+        // 璁剧疆鍐呭娣诲姞鍒板浘灞�
+        this.SolidWasteLayerGroup.addLayer(marker)
+      }
+    }
+  }
+
+  // panTo
+  setPanTo (pos, value) {
+    var position = pos
+    position = this.map.latLngToLayerPoint(position)
+    position.y += value
+    position = this.map.layerPointToLatLng(position)
+    this.map.setView(position)
+    // this.map.flyTo(position)
+  }
+
+  // 鍥哄簾鐐瑰嚮杩涜鐨� 鍐呭鐨勮缃�
+  SetSolidWasteContent (config, containerPopup) {
+    this.SolidWastePopup = containerPopup
+  }
+
+  // 鍥炬爣鏍峰紡鎵╁睍 => 鍏夊湀 鍥炬爣鑴夊啿
+  SolidWasteIcon () {
+    return this.L.Icon.extend({
+      options: {
+        iconSize: [50, 50],
+        iconAnchor: [25, 25]
+      }
+    })
+  }
+
+  // 鏍规嵁绫诲瀷杩斿洖鍥剧墖鍔犺浇url
+  SolidWasteIconUrl (determineValueOne, determineValueTwo, position) {
+    var EffectOfChange
+    if (determineValueOne === 1 || determineValueTwo === 1) {
+      EffectOfChange = defaultImg
+      this.EffectOfPulse(position, this.solidWasteMarkersLabels, this.SolidWasteLayerGroup)
+    } else {
+      EffectOfChange = Setting
+    }
+    return EffectOfChange
+  }
+
+  // 鑴夊啿鏁堟灉璁剧疆瀹炵幇
+  EffectOfPulse (position, markers, layerGroup) {
+    // 鍖哄垎鐩存帴鎵ц 鍜屽垽鏂墽琛岀殑涓嶅悓鍖哄埆
+    var differentColor = ''
+    if (markers) {
+      differentColor = '#ff0000'
+    } else {
+      differentColor = '#98FB98'
+    }
+    // 鍧愭爣鏁版嵁锛氭姤璀︿紶杩涙潵鐨勬槸鏁扮粍 / 鐐瑰嚮浼犺繘鏉ョ殑鏄痮bject
+    var FinalPosition = position instanceof Array ? {
+      lat: position[0],
+      lng: position[1]
+    } : position
+    // 鎻掍欢 鏁堟灉瀹炵幇
+    var pulsingIcon = this.L.icon.pulse({
+      iconSize: [20, 20],
+      color: differentColor,
+      fillColor: ''
+    })
+    if (markers) {
+      // markers.push(this.L.marker(FinalPosition, { icon: pulsingIcon }))
+      // this.L.layerGroup(markers).addLayer(layerGroup)
+    } else {
+      var picGroupMarker = new this.L.FeatureGroup()
+      this.L.marker(FinalPosition, { icon: pulsingIcon }).addTo(picGroupMarker)
+      this.pulseHeighLightMarker = picGroupMarker.addTo(this.SolidWasteLayerGroup)
+      this.PulseCountSetting()
+    }
+  }
+
+  // 瀵瑰浘鏍囪剦鍐� 杩涜set璁剧疆  // 楂樹寒鍥惧眰
+  PulseCountSetting () {
+    var HeightLightTime = 5
+    var PulseNumber = 5
+    const pulseinterver = setInterval((e) => {
+      if (PulseNumber > 0) {
+        PulseNumber--
+      } else {
+        this.pulseClear(pulseinterver)
+        PulseNumber = HeightLightTime
+      }
+    }, 1000)
+  }
+
+  // 娓呴櫎 鍥惧眰
+  pulseClear (pulseinterver) {
+    clearInterval(pulseinterver)
+    pulseinterver = null
+
+    if (this.SolidWasteLayerGroup) {
+      // this.SolidWasteLayerGroup.clearLayers()
+    } else {
+      this.SolidWasteLayerGroup = this.L.layerGroup().addTo(this.map)
+    }
+    if ((this.pulseHeighLightMarker)) {
+      this.pulseHeighLightMarker.remove()
+    }
+  }
+}
+
+export default AddSolidWasteHelper
diff --git a/src/components/BaseNav/SolidWaste/directive.js b/src/components/BaseNav/SolidWaste/directive.js
new file mode 100644
index 0000000..d51b377
--- /dev/null
+++ b/src/components/BaseNav/SolidWaste/directive.js
@@ -0,0 +1,59 @@
+import Vue from 'vue'
+
+// 鑷畾涔夊厓绱犲疄鐜板脊妗嗘嫋鎷絒閲嶇偣]
+Vue.directive('draw', {
+  // inserted: function (el, binding, vNode) {
+  //   el.setAttribute('style', 'position: fixed; z-index: 9999')
+  // },
+  bind: function (el, bindding, vNode) {
+    el.setAttribute('draggable', true)
+    let left, top, width, height
+    el._dragstart = function (event) {
+      event.stopPropagation()
+      left = event.clientX - el.offsetLeft
+      top = event.clientY - el.offsetTop
+      width = el.offsetWidth
+      height = el.offsetHeight
+    }
+    el._checkPosition = function () { // 闃叉琚嫋鍑鸿竟鐣�
+      const width = el.offsetWidth
+      const height = el.offsetHeight
+      let left = Math.min(el.offsetLeft, document.body.clientWidth - width)
+      left = Math.max(0, left)
+      let top = Math.min(el.offsetTop, document.body.clientHeight - height)
+      top = Math.max(0, top)
+      el.style.left = left + 'px'
+      el.style.top = top + 'px'
+      el.style.width = width + 'px'
+      el.style.height = height + 'px'
+    }
+    el._dragEnd = function (event) {
+      event.stopPropagation()
+      left = event.clientX - left
+      top = event.clientY - top
+      el.style.left = left + 'px'
+      el.style.top = top + 'px'
+      el.style.width = width + 'px'
+      el.style.height = height + 'px'
+      el._checkPosition()
+    }
+    el._documentAllowDraop = function (event) {
+      event.preventDefault()
+    }
+    document.body.addEventListener('dragover', el._documentAllowDraop)
+    el.addEventListener('dragstart', el._dragstart)
+    el.addEventListener('dragend', el._dragEnd)
+    window.addEventListener('resize', el._checkPosition)
+  },
+
+  unbind: function (el, bindding, vNode) {
+    document.body.removeEventListener('dragover', el._documentAllowDraop)
+    el.removeEventListener('dragstart', el._dragstart)
+    el.removeEventListener('dragend', el._dragEnd)
+    window.removeEventListener('resize', el._checkPosition)
+    delete el._documentAllowDraop
+    delete el._dragstart
+    delete el._dragEnd
+    delete el._checkPosition
+  }
+})
diff --git a/src/components/BaseNav/WasteWater/WasteWater.js b/src/components/BaseNav/WasteWater/WasteWater.js
new file mode 100644
index 0000000..c2f3d6b
--- /dev/null
+++ b/src/components/BaseNav/WasteWater/WasteWater.js
@@ -0,0 +1,177 @@
+import { requestWasteWater } from '@/api/request'
+// 灞曠ず鍥剧墖
+import defaultImg from '@assets/images/map-pages/basenav/Waste-water/fs_green.png'
+import Setting from '@assets/images/map-pages/basenav/Waste-water/fs_yellow.png'
+
+// 搴曞浘涓氬姟灞曠ず鐐�
+class AddWasteWaterHelper {
+  constructor (options) {
+    this.map = options.map
+    this.L = window.L
+    this.WasteWaterLayerGroup = this.L.layerGroup().addTo(this.map)
+    this.WasteWaterPopup = null
+    this.L.sgis = this.L.sgis || this.L
+    this.WasteWaterMarkersLabels = []
+    this.pulseHeighLightMarker = null
+  }
+
+  // 璇锋眰鏁版嵁 data 涓哄弬鏁帮紝 璇锋眰鍚庡彴鏁版嵁鏃� 鎼哄甫data鍙傛暟
+  requestData (data) {
+    requestWasteWater(data).then(res => {
+      console.log(res)
+      this.DrawWasteWaterContent(res.Result.DataInfo)
+      // console.log(res)
+    }).catch(err => {
+      console.log(err)
+    })
+  }
+
+  // 鏍规嵁鑾峰彇鏁版嵁 鐢诲嚭 鍐呭
+  DrawWasteWaterContent (data) {
+    // 鍥炬爣鏍峰紡鎵╁睍
+    const WasteWaterIcon = this.WasteWaterIcon()
+
+    // //鍔犺浇鏁版嵁鍓嶅鏋滃瓨鍦ㄥ浘灞傜粍 閭d箞娓呴櫎鎺�
+    if (this.WasteWaterLayerGroup) {
+      this.WasteWaterLayerGroup.clearLayers()
+    }
+    for (let i = 0; i < data.length; i++) {
+      // 缁忕含搴� 浣嶇疆
+      const positionX = data[i].Latitude
+      const positionY = data[i].Longitude
+
+      // 鍒ゆ柇 缁忕含搴︿綅缃俊鎭槸鍚﹀瓨鍦�
+      // if (positionX != null && positionY != null) {
+      // 鐢ㄤ簬 鍒ゆ柇 => 鍒ゆ柇鏄惁灞曠ず鑴夊啿鏁堟灉 => temp(涓存椂)
+      const determineValueOne = data[i].LongDayWarning
+      const determineValueTwo = data[i].StorageQty
+      const positionArea = [positionX, positionY]
+
+      // 鍥炬爣灞曠ず
+      const iconUrl = this.WasteWaterIconUrl(determineValueOne, determineValueTwo, positionArea)
+      const Icon = new WasteWaterIcon({ iconUrl: iconUrl })
+      // let url = Icon.options.iconUrl
+
+      const marker = this.L.marker.magic([positionX, positionY], { icon: Icon, magic: 'vanishIn' })
+
+      marker.bindPopup(() => {
+        return this.WasteWaterPopup.$el
+      }, {
+        className: 's-map-popup',
+        minWidth: 1000,
+        closeButton: true,
+        autoClose: false
+      })
+      // 鍒掕繃鍑虹幇 灞曠ず鏁版嵁
+      marker.bindTooltip(data[i].Name, {
+        permanent: true,
+        offset: [0, -16],
+        direction: 'top',
+        className: ''
+      })
+      // 鐐瑰嚮浜嬩欢
+      marker.on('click', (e) => {
+        try {
+          // console.log(e)
+          this.EffectOfPulse(e.target.getLatLng())
+          this.WasteWaterPopup.setDate(data[i])
+          return this.WasteWaterPopup.$el
+        } catch (error) {
+          console.log(error)
+        }
+      })
+      // 璁剧疆鍐呭娣诲姞鍒板浘灞�
+      this.WasteWaterLayerGroup.addLayer(marker)
+      // }
+    }
+  }
+
+  // 搴熸按鎸夐挳鐐瑰嚮杩涜鐨� 鍐呭鐨勮缃�
+  SetWasteWaterContent (config, containerPopup) {
+    this.WasteWaterPopup = containerPopup
+  }
+
+  // 鍥炬爣鏍峰紡鎵╁睍 => 鍏夊湀 鍥炬爣鑴夊啿
+  WasteWaterIcon () {
+    return this.L.Icon.extend({
+      options: {
+        iconSize: [50, 50],
+        iconAnchor: [25, 25]
+      }
+    })
+  }
+
+  // 鏍规嵁绫诲瀷杩斿洖鍥剧墖鍔犺浇url
+  WasteWaterIconUrl (determineValueOne, determineValueTwo, position) {
+    let EffectOfChange
+    if (determineValueOne === 1 || determineValueTwo === 1) {
+      EffectOfChange = defaultImg
+      this.EffectOfPulse(position, this.WasteWaterMarkersLabels, this.WasteWaterLayerGroup)
+    } else {
+      EffectOfChange = Setting
+    }
+    return EffectOfChange
+  }
+
+  // 鑴夊啿鏁堟灉璁剧疆瀹炵幇
+  EffectOfPulse (position, markers, layerGroup) {
+    // // 鍖哄垎鐩存帴鎵ц 鍜屽垽鏂墽琛岀殑涓嶅悓鍖哄埆
+    let differentColor = ''
+    if (markers) {
+      differentColor = '#ff0000'
+    } else {
+      differentColor = '#98FB98'
+    }
+    // 鍧愭爣鏁版嵁锛氭姤璀︿紶杩涙潵鐨勬槸鏁扮粍 / 鐐瑰嚮浼犺繘鏉ョ殑鏄痮bject
+    const FinalPosition = position instanceof Array ? {
+      lat: position[0],
+      lng: position[1]
+    } : position
+    // 鎻掍欢 鏁堟灉瀹炵幇
+    const pulsingIcon = this.L.icon.pulse({
+      iconSize: [20, 20], // 鎺у埗鍏夊湀澶у皬
+      color: differentColor,
+      fillColor: ' '
+    })
+    if (markers) {
+      // markers.push(this.L.marker(FinalPosition, { icon: pulsingIcon }))
+      // this.L.layerGroup(markers).addLayer(layerGroup)
+    } else {
+      const picGroupMarker = new this.L.FeatureGroup()
+      this.L.marker(FinalPosition, { icon: pulsingIcon }).addTo(picGroupMarker)
+      this.pulseHeighLightMarker = picGroupMarker.addTo(this.WasteWaterLayerGroup)
+      this.PulseCountSetting()
+    }
+  }
+
+  // 瀵瑰浘鏍囪剦鍐� 杩涜set璁剧疆  // 楂樹寒鍥惧眰
+  PulseCountSetting () {
+    const HeightLightTime = 5
+    let PulseNumber = 5
+    const pulseinterver = setInterval(() => {
+      if (PulseNumber > 0) {
+        PulseNumber--
+      } else {
+        this.pulseClear(pulseinterver)
+        PulseNumber = HeightLightTime
+      }
+    }, 1000)
+  }
+
+  // 鍦ㄦ墽琛屼笅涓墠娓呴櫎宸插瓨鍦ㄥ浘灞�
+  pulseClear (pulseinterver) {
+    clearInterval(pulseinterver)
+    pulseinterver = null
+
+    if (this.WasteWaterLayerGroup) {
+      // this.WasteWaterLayerGroup.clearLayers()
+    } else {
+      this.WasteWaterLayerGroup = this.L.layerGroup().addTo(this.map)
+    }
+    if ((this.pulseHeighLightMarker)) {
+      this.pulseHeighLightMarker.remove()
+    }
+  }
+}
+
+export default AddWasteWaterHelper
diff --git a/src/components/BaseNav/WireSurface/index.js b/src/components/BaseNav/WireSurface/index.js
new file mode 100644
index 0000000..3021c37
--- /dev/null
+++ b/src/components/BaseNav/WireSurface/index.js
@@ -0,0 +1,22 @@
+// // 寮曞叆鐢ㄤ簬澶勭悊鎺ュ彛鏁版嵁鑾峰彇鐨勬柟娉�
+// import {} from '@src/api/request'
+//
+// class initWireSurface {
+//   constructor (options) {
+//     this.map = options.map
+//     this.L = window.L
+//     this.initWireSurfaceMap = new Map()
+//     this.initWireSurfacePopup = this.L.layerGroup().addTo(this.map)
+//   }
+//
+//   // 鑾峰彇椤甸潰绾�/闈㈡暟鎹�
+//   getDataInitWireSurface () {
+//     ().then(res => {
+//       console.log(res)
+//     }).catch(error => {
+//       console.log(error)
+//     })
+//   }
+// }
+//
+// export default initWireSurface
diff --git a/src/components/BaseNav/flueGas/flueGas.js b/src/components/BaseNav/flueGas/flueGas.js
new file mode 100644
index 0000000..0ab51b2
--- /dev/null
+++ b/src/components/BaseNav/flueGas/flueGas.js
@@ -0,0 +1,178 @@
+import { FlueGas } from '@/api/request'
+import defaultImg from '@assets/images/map-pages/basenav/flugas/green_airquality_2.png'
+import Setting from '@assets/images/map-pages/basenav/flugas/green_airquality_3.png'
+// 鍥剧墖
+
+class AddGasHelper {
+  constructor (options) {
+    this.map = options.map
+    this.L = window.L
+    this.FlueGasLayerGroup = this.L.layerGroup().addTo(this.map)
+    this.FlueGasPopup = null
+    this.L.sgis = this.L.sgis || this.L
+    this.FlueGasMarkersLabels = []
+    this.pulseHeighLightMarker = null
+  }
+
+  // 鑾峰彇鏁版嵁
+  requestData (data) {
+    FlueGas(data).then(res => {
+      console.log(res)
+      this.DrawFlueGasContent(res.Result.DataInfo)
+    }).catch(err => {
+      console.log(err)
+    })
+  }
+
+  // 鏍规嵁鑾峰彇鏁版嵁 鐢诲嚭 鍐呭
+  DrawFlueGasContent (data) {
+    // 鍥炬爣鏍峰紡鎵╁睍
+    var FlueGasIcon = this.PlueGasIcon()
+
+    // //鍔犺浇鏁版嵁鍓嶅鏋滃瓨鍦ㄥ浘灞傜粍 閭d箞娓呴櫎鎺�
+    if (this.FlueGasLayerGroup) {
+      this.FlueGasLayerGroup.clearLayers()
+    }
+    for (let i = 0; i < data.length; i++) {
+      // 缁忕含搴� 浣嶇疆
+      const positionX = data[i].Latitude
+      const positionY = data[i].Longitude
+
+      // 鍒ゆ柇 缁忕含搴︿綅缃俊鎭槸鍚﹀瓨鍦�
+      // if (positionX != null && positionY != null) {
+      // 鐢ㄤ簬 鍒ゆ柇 => 鍒ゆ柇鏄惁灞曠ず鑴夊啿鏁堟灉 => temp(涓存椂)
+      const determineValueOne = data[i].LongDayWarning
+      var determineValueTwo = data[i].StorageQty
+      const positionArea = [positionX, positionY]
+
+      // 鍥炬爣灞曠ず
+      var iconUrl = this.PlueGasIconUrl(determineValueOne, determineValueTwo, positionArea)
+      var Icon = new FlueGasIcon({ iconUrl: iconUrl })
+      // var url = Icon.options.iconUrl
+
+      const marker = this.L.marker([positionX, positionY], { icon: Icon })
+      // const latlngs = positionArea[2]
+      // // 绾�
+      // var polyline = this.L.polyline(latlngs, { color: 'red' }).addTo(this.map)
+      // console.log(polyline)
+      // marker.bindPopup(() => {
+      //   return this.FlueGasPopup.$el
+      // }, {
+      //   className: 's-map-popup',
+      //   minWidth: 1548,
+      //   closeButton: true,
+      //   autoClose: false
+      // })
+      // 鍒掕繃鍑虹幇 灞曠ず鏁版嵁
+      marker.bindTooltip(data[i].porltName, {
+        permanent: true,
+        offset: [0, -16],
+        direction: 'top',
+        className: ''
+      })
+      // 鐐瑰嚮 浜嬩欢
+      marker.on('click', (e) => {
+        try {
+          // console.log(e)
+          this.EffectOfPulse(e.target.getLatLng())
+          this.FlueGasPopup.setData(data[i])
+          // this.FlueGasPopup.setData(data[i])
+          return this.FlueGasPopup.$el
+        } catch (error) {
+          console.log(error)
+        }
+      })
+      // 璁剧疆鍐呭娣诲姞鍒板浘灞�
+      this.FlueGasLayerGroup.addLayer(marker)
+      // }
+    }
+  }
+
+  // 鐐瑰嚮杩涜鐨� 鍐呭鐨勮缃�
+  SetPlueGasContent (config, containerPopup) {
+    this.FlueGasPopup = containerPopup
+  }
+
+  // 鍥炬爣鏍峰紡鎵╁睍 => 鍏夊湀 鍥炬爣鑴夊啿
+  PlueGasIcon () {
+    return this.L.Icon.extend({
+      options: {
+        iconSize: [50, 50],
+        iconAnchor: [25, 25]
+      }
+    })
+  }
+
+  // 鏍规嵁绫诲瀷杩斿洖鍥剧墖鍔犺浇url
+  PlueGasIconUrl (determineValueOne, determineValueTwo, position) {
+    var EffectOfChange
+    if (determineValueOne === 1 || determineValueTwo === 1) {
+      EffectOfChange = defaultImg
+      this.EffectOfPulse(position, this.FlueGasMarkersLabels, this.pulseHeighLightMarker)
+    } else {
+      EffectOfChange = Setting
+    }
+    return EffectOfChange
+  }
+
+  // 鑴夊啿鏁堟灉璁剧疆瀹炵幇
+  EffectOfPulse (position, markers, layerGroup) {
+    // // 鍖哄垎鐩存帴鎵ц 鍜屽垽鏂墽琛岀殑涓嶅悓鍖哄埆
+    var differentColor = ''
+    if (markers) {
+      differentColor = '#ff0000'
+    } else {
+      differentColor = '#98FB98'
+    }
+    // 鍧愭爣鏁版嵁锛氭姤璀︿紶杩涙潵鐨勬槸鏁扮粍 / 鐐瑰嚮浼犺繘鏉ョ殑鏄痮bject
+    var FinalPosition = position instanceof Array ? {
+      lat: position[0],
+      lng: position[1]
+    } : position
+    // 鎻掍欢 鏁堟灉瀹炵幇
+    var pulsingIcon = this.L.icon.pulse({
+      iconSize: [20, 20],
+      color: differentColor,
+      fillColor: ''
+    })
+    if (markers) {
+      // markers.push(this.L.marker(FinalPosition, { icon: pulsingIcon }))
+      // this.L.layerGroup(markers).addLayer(layerGroup)
+    } else {
+      var picGroupMarker = new this.L.FeatureGroup()
+      this.L.marker(FinalPosition, { icon: pulsingIcon }).addTo(picGroupMarker)
+      this.pulseHeighLightMarker = picGroupMarker.addTo(this.FlueGasLayerGroup)
+      this.PulseCountSetting()
+    }
+  }
+
+  PulseCountSetting () {
+    var HeightLightTime = 5
+    var PulseNumber = 5
+    const pulseinterver = setInterval(() => {
+      if (PulseNumber > 0) {
+        PulseNumber--
+      } else {
+        this.pulseClear(pulseinterver)
+        PulseNumber = HeightLightTime
+      }
+    }, 1000)
+  }
+
+  // 娓呴櫎 鍥惧眰
+  pulseClear (pulseinterver) {
+    clearInterval(pulseinterver)
+    pulseinterver = null
+
+    if (this.PlueGasLayerGroup) {
+      // this.PlueGasLayerGroup.clearLayers()
+    } else {
+      this.PlueGasLayerGroup = this.L.layerGroup().addTo(this.map)
+    }
+    if ((this.pulseHeighLightMarker)) {
+      this.pulseHeighLightMarker.remove()
+    }
+  }
+}
+
+export default AddGasHelper
diff --git a/src/components/LayerController/logic/Sample.js b/src/components/LayerController/logic/Sample.js
new file mode 100644
index 0000000..687b0e7
--- /dev/null
+++ b/src/components/LayerController/logic/Sample.js
@@ -0,0 +1,9 @@
+module.exports = function () {
+  this.init = (layer) => {
+    console.log('sample init !!!')
+  }
+
+  this.clickListener = (list) => {
+    console.log('sample clickListener !!!')
+  }
+}
diff --git a/src/components/LayerController/modules/LcServiceLayer.vue b/src/components/LayerController/modules/LcServiceLayer.vue
index 4b9aa25..ab589f0 100644
--- a/src/components/LayerController/modules/LcServiceLayer.vue
+++ b/src/components/LayerController/modules/LcServiceLayer.vue
@@ -1,134 +1,134 @@
 <template>
     <div class="inner-panel">
-<!--        <div class="title">-->
-<!--            鍥惧眰鎺у埗-->
-<!--        </div>-->
-<!--        <div class="wms-panel">-->
-<!--            <div v-for="item in serviceLayers" :key="item.code" class="layerbox">-->
-<!--                <div><input type="checkbox" :name="'wmsLayer_'+item.code" :checked="item.checked" :value="item.code"-->
-<!--                            @change="swAllLayers(item)"/>{{ item.name }} <span @click="swFilter(item)"-->
-<!--                                                                               class="btn-filter">杩囨护</span>-->
-<!--                </div>-->
-<!--                <div class="layerbox-item">-->
-<!--                    <div class="basemap-layer-item" v-for="itm in item.layers" :key="itm.code"><input type="checkbox"-->
-<!--                                                                                                      :name="'wmsSublayers_'+item.code+'_'+itm.code"-->
-<!--                                                                                                      :checked="itm.checked"-->
-<!--                                                                                                      :value="itm.code"-->
-<!--                                                                                                      @change="swWmsLayer(item.url,itm)"/>{{-->
-<!--                        itm.name }}-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--            </div>-->
-<!--        </div>-->
-<!--        <lc-service-layer-filter v-if="layerFilterVisible" ref="serviceLayerFilter"></lc-service-layer-filter>-->
+        <div class="title">
+            鍥惧眰鎺у埗
+        </div>
+        <div class="wms-panel">
+            <div v-for="item in serviceLayers" :key="item.code" class="layerbox">
+                <div><input type="checkbox" :name="'wmsLayer_'+item.code" :checked="item.checked" :value="item.code"
+                            @change="swAllLayers(item)"/>{{ item.name }} <span @click="swFilter(item)"
+                                                                               class="btn-filter">杩囨护</span>
+                </div>
+                <div class="layerbox-item">
+                    <div class="basemap-layer-item" v-for="itm in item.layers" :key="itm.code"><input type="checkbox"
+                                                                                                      :name="'wmsSublayers_'+item.code+'_'+itm.code"
+                                                                                                      :checked="itm.checked"
+                                                                                                      :value="itm.code"
+                                                                                                      @change="swWmsLayer(itm)"/>{{
+                        itm.name }}
+                    </div>
+                </div>
+            </div>
+        </div>
+        <lc-service-layer-filter v-if="layerFilterVisible" ref="serviceLayerFilter"></lc-service-layer-filter>
     </div>
 </template>
 
-<!--<script>-->
-<!--import WfsHelper from '../../helpers/WfsHelper'-->
-<!--import LcServiceLayerFilter from '@components/LayerController/modules/LcServiceLayerFilter'-->
-<!--import AjaxUtils from '../../../utils/AjaxUtils'-->
+<script>
+import WfsHelper from '../../helpers/WfsHelper'
+import LcServiceLayerFilter from '@components/LayerController/modules/LcServiceLayerFilter'
+import AjaxUtils from '../../../utils/AjaxUtils'
 
-<!--export default {-->
-<!--  name: 'LcServiceLayer',-->
-<!--  components: { LcServiceLayerFilter },-->
-<!--  data () {-->
-<!--    return {-->
-<!--      layerFilterVisible: false-->
-<!--    }-->
-<!--  },-->
-<!--  computed: {-->
-<!--    serviceLayers () {-->
-<!--      return this.$store.state.map.serviceLayers.LayerSewersLine-->
-<!--    }-->
-<!--  },-->
-<!--  mounted () {-->
-<!--    // console.log('03姝ラ锛�', this.helper)-->
-<!--    this.updateServiceLayerList()-->
-<!--  },-->
-<!--  methods: {-->
-<!--    swAllLayers (item) {-->
-<!--      // eslint-disable-next-line no-debugger-->
-<!--      item.checked = !item.checked-->
-<!--      for (let i = 0, len = item.layers.length; i < len; ++i) {-->
-<!--        item.layers[i].checked = item.checked-->
-<!--      }-->
-<!--      this.updateWms()-->
-<!--    },-->
-<!--    loadWfs () {-->
-<!--      var wfsHelper = new WfsHelper()-->
-<!--      wfsHelper.addTypeName('绠$嚎鐐�')-->
-<!--      wfsHelper.addEquals('pipename', '鐮旂┒闄�01璺痀S000001')-->
+export default {
+  name: 'LcServiceLayer',
+  components: { LcServiceLayerFilter },
+  data () {
+    return {
+      layerFilterVisible: false
+    }
+  },
+  computed: {
+    serviceLayers () {
+      return this.$store.state.map.serviceLayers.LayerSewersLine
+    }
+  },
+  mounted () {
+    // console.log('03姝ラ锛�', this.helper)
+    this.updateServiceLayerList()
+  },
+  methods: {
+    swAllLayers (item) {
+      // eslint-disable-next-line no-debugger
+      item.checked = !item.checked
+      for (let i = 0, len = item.layers.length; i < len; ++i) {
+        item.layers[i].checked = item.checked
+      }
+      this.updateWms()
+    },
+    loadWfs () {
+      var wfsHelper = new WfsHelper()
+      wfsHelper.addTypeName('绠$嚎鐐�')
+      wfsHelper.addEquals('pipename', '鐮旂┒闄�01璺痀S000001')
 
-<!--      AjaxUtils.GetDataAsynByUrl(wfsHelper.getUrl(), {}, (res) => {-->
-<!--        console.log(res)-->
-<!--      })-->
-<!--    },-->
-<!--    swWmsLayer (url, itm) {-->
-<!--      itm.checked = !itm.checked-->
-<!--      if (itm.checked) {-->
-<!--        window.serviceLayerHelper.loadGeojsonLayer(url, itm)-->
-<!--      } else {-->
-<!--        window.serviceLayerHelper.removeLayer(itm)-->
-<!--      }-->
-<!--      // this.updateWms()-->
-<!--    },-->
-<!--    swFilter (item) {-->
-<!--      this.layerFilterVisible = !this.layerFilterVisible-->
-<!--    },-->
-<!--    updateServiceLayerList () {-->
+      AjaxUtils.GetDataAsynByUrl(wfsHelper.getUrl(), {}, (res) => {
+        console.log(res)
+      })
+    },
+    swWmsLayer (itm) {
+      itm.checked = !itm.checked
+      if (itm.checked) {
+        window.layerFactory.show(itm.code)
+      } else {
+        window.layerFactory.hide(itm.code)
+      }
+      // this.updateWms()
+    },
+    swFilter (item) {
+      this.layerFilterVisible = !this.layerFilterVisible
+    },
+    updateServiceLayerList () {
 
-<!--    },-->
-<!--    updateWms () {-->
-<!--      var mapConfig = this.mapConfig-->
-<!--      var wmsHelper = new WfsHelper()-->
-<!--      wmsHelper.initMapConfig(mapConfig)-->
-<!--      var wmsLayersMap = wmsHelper.getWmsLayersMap()-->
-<!--      for (var k in wmsLayersMap) {-->
-<!--        var layers = wmsLayersMap[k]-->
-<!--        var tileLayer = window.serviceLayerHelper.getTileLayer(k)-->
-<!--        if (tileLayer) {-->
-<!--          tileLayer.setParams({ layers: layers.join(',') }, false)-->
-<!--          tileLayer.setUrl(tileLayer.config.url, false)-->
-<!--        }-->
-<!--      }-->
-<!--    }-->
-<!--  }-->
-<!--}-->
-<!--</script>-->
+    },
+    updateWms () {
+      var mapConfig = this.mapConfig
+      var wmsHelper = new WfsHelper()
+      wmsHelper.initMapConfig(mapConfig)
+      var wmsLayersMap = wmsHelper.getWmsLayersMap()
+      for (var k in wmsLayersMap) {
+        var layers = wmsLayersMap[k]
+        var tileLayer = window.serviceLayerHelper.getTileLayer(k)
+        if (tileLayer) {
+          tileLayer.setParams({ layers: layers.join(',') }, false)
+          tileLayer.setUrl(tileLayer.config.url, false)
+        }
+      }
+    }
+  }
+}
+</script>
 
-<!--<style scoped lang="less">-->
-<!--    .inner-panel {-->
-<!--        .title{-->
-<!--            color: #ffffff;-->
-<!--            font-size: 16px;-->
-<!--            font-weight: 600;-->
-<!--            margin: 10px;-->
-<!--            text-align: center;-->
-<!--        }-->
-<!--        .btn-filter {-->
-<!--            cursor: pointer;-->
-<!--            color: #ffffff;-->
-<!--        }-->
+<style scoped lang="less">
+    .inner-panel {
+        .title{
+            color: #ffffff;
+            font-size: 16px;
+            font-weight: 600;
+            margin: 10px;
+            text-align: center;
+        }
+        .btn-filter {
+            cursor: pointer;
+            color: #ffffff;
+        }
 
-<!--        .wms-panel {-->
-<!--            width: 250px;-->
+        .wms-panel {
+            width: 250px;
 
-<!--            .layerbox {-->
-<!--                width: 100%;-->
+            .layerbox {
+                width: 100%;
 
-<!--                .layerbox-item {-->
-<!--                    display: flex;-->
-<!--                    flex-flow: row wrap;-->
-<!--                    margin-left: 15px;-->
-<!--                    margin-top: 5px;-->
+                .layerbox-item {
+                    display: flex;
+                    flex-flow: row wrap;
+                    margin-left: 15px;
+                    margin-top: 5px;
 
-<!--                    .basemap-layer-item {-->
-<!--                        width: 50%;-->
-<!--                    }-->
-<!--                }-->
-<!--            }-->
-<!--        }-->
-<!--    }-->
+                    .basemap-layer-item {
+                        width: 50%;
+                    }
+                }
+            }
+        }
+    }
 
-<!--</style>-->
+</style>
diff --git a/src/components/LayerController/service/BusiLayerService.js b/src/components/LayerController/service/BusiLayerService.js
new file mode 100644
index 0000000..254a819
--- /dev/null
+++ b/src/components/LayerController/service/BusiLayerService.js
@@ -0,0 +1,32 @@
+/**
+ * 鍔犺浇涓氬姟鏁版嵁鍥惧眰
+ */
+import { logicMapper } from '@src/conf/Constants'
+
+class BusiLayerService {
+  constructor (config) {
+    this.L = window.L
+    this.map = window.map
+    this.config = config
+  }
+
+  init (layer) {
+    // 寮曞叆 鍏宠仈鐨刯s锛屽湪constant.js涓牴鎹甤onfig閰嶇疆鐨刬d寰楀埌澶勭悊js
+    const id = this.config.code
+    console.log(logicMapper)
+    const file = logicMapper[id]
+    if (!file) {
+      console.log('鎵句笉鍒伴�昏緫澶勭悊js!!!')
+    } else {
+      console.log('-----' + file)
+      var BusiLayer = require('../logic/' + file)
+      console.log(BusiLayer)
+      var busiLayer = new BusiLayer()
+      // 璋冪敤init
+      busiLayer.init(layer)
+      // 璋冪敤click浜嬩欢
+    }
+  }
+}
+
+export default BusiLayerService
diff --git a/src/components/LayerController/service/LayerFactory.js b/src/components/LayerController/service/LayerFactory.js
new file mode 100644
index 0000000..7626125
--- /dev/null
+++ b/src/components/LayerController/service/LayerFactory.js
@@ -0,0 +1,88 @@
+import store from '@/store'
+import WfsLayerService from './WfsLayerService'
+import BusiLayerService from './BusiLayerService'
+import WmsLayerService from './WmsLayerService'
+class LayerFactory {
+  constructor (options) {
+    this.L = options.L
+    this.map = window.map
+    this.layers = {}
+  }
+
+  createLayerGroup () {
+    return this.L.layerGroup().addTo(this.map)
+  }
+
+  init () {
+    // 1. 閬嶅巻layer config
+    var layerConfig = store.state.map.serviceLayers.LayerSewersLine
+    for (var i = 0, l = layerConfig.length; i < l; i++) {
+      var config = layerConfig[i]
+      var layers = config.layers
+      for (var j = 0; j < layers.length; j++) {
+        var childConfig = layers[j]
+        var code = childConfig.code
+        var wfs = childConfig.wfs
+        var wms = childConfig.wms
+        var url = childConfig.url
+        // 鍒ゆ柇鏄惁宸茬粡鍔犺浇杩囷紝鍔犺浇杩囧氨 蹇界暐鎺�
+        const layer = this.layers[code]
+        if (!layer) {
+          const newLayer = this.createLayerGroup()
+          this.layers[code] = newLayer
+          // 2. 鍒ゆ柇绫诲瀷
+          if (wfs) {
+            // 3. 瀹炰緥鍖栧叿浣搒ervice
+            // var busiLayerService = new BusiLayerService()
+            // busiLayerService.init()
+            var wfsLayerService = new WfsLayerService(childConfig)
+            wfsLayerService.init(newLayer)
+          }
+          if (wms) {
+            var wmsLayerService = new WmsLayerService(childConfig)
+            wmsLayerService.init(newLayer)
+          }
+          // 璇锋眰涓氬姟鏁版嵁鎺ュ彛
+          if (url) {
+            var busiLayerService = new BusiLayerService(childConfig)
+            busiLayerService.init(newLayer)
+          }
+        } else {
+          this.show(code)
+        }
+      }
+    }
+  }
+
+  show (code) {
+    var _layer = this.layers[code].addTo(this.map)
+    this.setZIndex(_layer)
+  }
+
+  hide (code) {
+    var layer = this.layers[code]
+    layer && this.map.removeLayer(layer)
+  }
+
+  toggle (code) {
+
+  }
+
+  /**
+   * 璁剧疆index,绾垮湪鏈�涓嬮潰锛岀偣鍦ㄤ笂闈�
+   * @param layerGroup 鍥惧眰缁�
+   */
+  setZIndex (layerGroup) {
+    var layers = layerGroup.getLayers()
+    if (layers.length > 0) {
+      var layer = layers[0]
+      if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) {
+        layerGroup.bringToBack()
+      } else {
+        layerGroup.bringToFront()
+      }
+    }
+  }
+}
+
+export default LayerFactory
diff --git a/src/components/LayerController/service/PopupService.js b/src/components/LayerController/service/PopupService.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/components/LayerController/service/PopupService.js
diff --git a/src/components/LayerController/service/WfsLayerService.js b/src/components/LayerController/service/WfsLayerService.js
new file mode 100644
index 0000000..e5a175d
--- /dev/null
+++ b/src/components/LayerController/service/WfsLayerService.js
@@ -0,0 +1,119 @@
+/**
+ * 鍔犺浇涓氬姟鏁版嵁鍥惧眰
+ */
+
+import styles from '../../../conf/Styles'
+import AjaxUtils from '../../../utils/AjaxUtils'
+
+class WfsLayerService {
+  constructor (config) {
+    this.config = config
+    this.params = {
+      version: '1.0.0',
+      REQUEST: 'getfeature',
+      OUTPUTFORMAT: 'json',
+      maxFeatures: 20000
+    }
+    this.popupComp = window.popupComp
+    this.L = window.L
+    this.map = window.map
+    this.regex = /\{(.+?)\}/g // 鍖归厤{}
+  }
+
+  init (layer) {
+    const wfsUrl = this.config.wfs
+    if (wfsUrl) {
+      AjaxUtils.get4JsonDataByUrl(wfsUrl, this.params, (res) => this.draw(layer, res.data.features))
+    }
+  }
+
+  draw (layer, features) {
+    const icon = this.config.icon
+    const geojson = this.L.geoJSON(features, {
+      style: function (feature) {
+        return {
+          fill: styles.defaultLineStyle.fill,
+          weight: styles.defaultLineStyle.weight,
+          fillColor: styles.defaultLineStyle.fillColor,
+          color: styles.defaultLineStyle.color,
+          fillOpacity: styles.defaultLineStyle.fillOpacity,
+          opacity: styles.defaultLineStyle.opacity,
+          dashArray: styles.defaultLineStyle.dashArray,
+          dashSpeed: styles.defaultLineStyle.dashSpeed
+        }
+      },
+      pointToLayer: (geoJsonPoint, latlng) => {
+        return this.L.canvasMarker(latlng,
+          {
+            img: {
+              // url: 'assets/images/map/marker-icon.png',
+              url: '/assets/images/map/' + icon,
+              size: styles.defaultLineStyle.size
+            }
+          })
+      },
+      onEachFeature: (feature, layer) => {
+        layer.bindPopup((layer) => {
+          this.popupComp.setDatas(layer)
+          this.popupComp.setShow()
+          return this.popupComp.$el
+        }, {
+          className: 's-map-popup',
+          minWidth: 300,
+          closeButton: false,
+          autoClose: false
+        })
+          .bindTooltip((layer) => this.tooltipListener(layer), { direction: 'bottom', offset: [0, 15], sticky: true })
+          .on('mouseover', (e) => this.mouseOverListener(e, layer)).on('mouseout', (e) => this.mouseOutListener(e, layer))
+      }
+    }).addTo(layer)
+    return geojson
+  }
+
+  mouseOverListener (e, layer) {
+    const icon = this.config.icon
+    const type = e.target.feature.geometry.type
+    if (type === 'LineString' || type === 'MultiLineString') {
+      layer.setStyle({ weight: 8, color: '#00ffff' })
+    } else if (type === 'Point' || type === 'MultiPoint') {
+      layer.setStyle({
+        img: {
+          url: '/assets/images/map/' + icon,
+          size: [25, 25]
+        }
+      })
+      layer.bringToFront()
+    }
+  }
+
+  mouseOutListener (e, layer) {
+    const icon = this.config.icon
+    const type = e.target.feature.geometry.type
+    if (type === 'LineString' || type === 'MultiLineString') {
+      layer.setStyle({ weight: styles.defaultLineStyle.weight, color: styles.defaultLineStyle.color })
+    }
+    if (type === 'Point' || type === 'MultiPoint') {
+      layer.setStyle({
+        img: {
+          url: '/assets/images/map/' + icon,
+          size: styles.defaultLineStyle.size
+        }
+      })
+    }
+  }
+
+  tooltipListener (layer) {
+    const nameId = layer.feature.id
+    let name = ''
+    if (nameId.indexOf('涓夐��') !== -1 || nameId.indexOf('鍥涢��') !== -1 || nameId.indexOf('绐ㄤ簳') !== -1) {
+      name = layer.feature.properties.pointnumber
+    } else {
+      name = layer.feature.properties.name
+    }
+    if (name === undefined) {
+      name = ''
+    }
+    return name
+  }
+}
+export default WfsLayerService
diff --git a/src/components/LayerController/service/WmsLayerService.js b/src/components/LayerController/service/WmsLayerService.js
new file mode 100644
index 0000000..b818aec
--- /dev/null
+++ b/src/components/LayerController/service/WmsLayerService.js
@@ -0,0 +1,11 @@
+class WfsLayerService {
+  constructor (config) {
+    this.config = config
+  }
+
+  init () {
+
+  }
+}
+
+export default WfsLayerService
diff --git a/src/components/panel/topicSearch/SewersSearch.vue b/src/components/panel/topicSearch/SewersSearch.vue
index f6ff0f2..c969cde 100644
--- a/src/components/panel/topicSearch/SewersSearch.vue
+++ b/src/components/panel/topicSearch/SewersSearch.vue
@@ -101,7 +101,7 @@
 </template>
 
 <script>
-import { PipelineTypeOptions } from '@/conf/LayerSewers'
+import { PipelineTypeOptions } from '@/conf/layers/LayerSewers'
 
 import WfsHelper from '@components/helpers/WfsHelper'
 import AjaxUtils from '@utils/AjaxUtils'
diff --git a/src/components/plugin/MagicMarker.js b/src/components/plugin/MagicMarker.js
index f74a2a4..a9d75bd 100644
--- a/src/components/plugin/MagicMarker.js
+++ b/src/components/plugin/MagicMarker.js
@@ -1,49 +1,45 @@
-const init = (L) => {
-  (function (window) {
-    console.log(window)
-    const setOptions = function (obj, options) {
-      for (const i in options) {
-        obj[i] = options[i]
+/* eslint-disable */
+(function (window) {
+  console.log(window)
+  const setOptions = function (obj, options) {
+    for (const i in options) {
+      obj[i] = options[i]
+    }
+    return obj
+  }
+  L.Icon.Magic = function (options) {
+    let opts
+    // console.log(options)
+    if (options.iconUrl) {
+      opts = {
+        html: '<div class=\'magicDiv\'><div class=\'magictime ' + options.magic + '\'>' + options.html + '</div></div>'
+        // className: 'magicDiv',L
       }
-      return obj
-    }
-    L.Icon.Magic = function (options) {
-      let opts
-      if (options.iconUrl) {
-        opts = {
-          html: "<div class='magicDiv'><div class='magictime " + options.magic + "'><img id='migic' src='" + options.iconUrl + "'/></div></div>"
-          // className: 'magicDiv',
-        }
-      } else {
-        opts = {
-          html: "<div class='magicDiv'><div class='magictime " + options.magic + "'>" + options.html + '</div></div>'
-          // className: 'magicDiv',
-        }
+    } else {
+      opts = {
+        html: '<div class=\'magicDiv\'><div class=\'magictime ' + options.magic + '\'><img id=\'migic\' src=\'' + options.icon.options.iconUrl + '\'/></div></div>'
+        // className: 'magicDiv',
       }
-      delete options.html
-      const magicIconOpts = setOptions(opts, options)
-      // console.log(magicIconOpts)
-      const magicIcon = L.divIcon(magicIconOpts)
-      return magicIcon
     }
+    delete options.html
+    const magicIconOpts = setOptions(opts, options)
+    // console.log(magicIconOpts)
+    const magicIcon = L.divIcon(magicIconOpts)
+    return magicIcon
+  }
 
-    L.icon.magic = function (options) {
-      return new L.Icon.Magic(options)
+  L.icon.magic = function (options) {
+    return new L.Icon.Magic(options)
+  }
+
+  L.Marker.Magic = L.Marker.extend({
+    initialize: function (latlng, options) {
+      options.icon = L.icon.magic(options)
+      L.Marker.prototype.initialize.call(this, latlng, options)
     }
+  })
 
-    L.Marker.Magic = L.Marker.extend({
-      initialize: function (latlng, options) {
-        options.icon = L.icon.magic(options)
-        L.Marker.prototype.initialize.call(this, latlng, options)
-      }
-    })
-
-    L.marker.magic = function (latlng, options) {
-      return new L.Marker.Magic(latlng, options)
-    }
-  })(window)
-}
-
-export default {
-  init
-}
+  L.marker.magic = function (latlng, options) {
+    return new L.Marker.Magic(latlng, options)
+  }
+})(window)
diff --git a/src/components/plugin/pulse/Pulse.css b/src/components/plugin/pulse/Pulse.css
new file mode 100644
index 0000000..aed198f
--- /dev/null
+++ b/src/components/plugin/pulse/Pulse.css
@@ -0,0 +1,34 @@
+.leaflet-pulsing-icon {
+    border-radius: 100%;
+    box-shadow: 1px 1px 8px 0 rgba(0,0,0,0.75);
+}
+
+.leaflet-pulsing-icon:after {
+    content: "";
+    border-radius: 100%;
+    height: 300%;
+    width: 300%;
+    position: absolute;
+    margin: -100% 0 0 -100%;
+
+}
+
+@keyframes pulsate {
+    0% {
+        transform: scale(0.1, 0.1);
+        opacity: 0;
+        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+        filter: alpha(opacity=0);
+    }
+    50% {
+        opacity: 1;
+        -ms-filter: none;
+        filter: none;
+    }
+    100% {
+        transform: scale(1.2, 1.2);
+        opacity: 0;
+        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+        filter: alpha(opacity=0);
+    }
+}
diff --git a/src/components/plugin/pulse/Pulse.js b/src/components/plugin/pulse/Pulse.js
new file mode 100644
index 0000000..57ef679
--- /dev/null
+++ b/src/components/plugin/pulse/Pulse.js
@@ -0,0 +1,77 @@
+/* eslint-disable */
+(function (window) {
+
+  L.Icon.Pulse = L.DivIcon.extend({
+
+    options: {
+      className: '',
+      iconSize: [12, 12],
+      fillColor: 'red',
+      color: 'red',
+      animate: true,
+      heartbeat: 1,
+    },
+
+    initialize: function (options) {
+      L.setOptions(this, options)
+
+      // css
+
+      var uniqueClassName = 'lpi-' + new Date().getTime() + '-' + Math.round(Math.random() * 100000)
+
+      var before = ['background-color: ' + this.options.fillColor]
+      var after = [
+
+        'box-shadow: 0 0 6px 2px ' + this.options.color,
+
+        'animation: pulsate ' + this.options.heartbeat + 's ease-out',
+        'animation-iteration-count: infinite',
+        'animation-delay: ' + (this.options.heartbeat + .1) + 's',
+      ]
+
+      if (!this.options.animate) {
+        after.push('animation: none')
+        after.push('box-shadow:none')
+      }
+
+      var css = [
+        '.' + uniqueClassName + '{' + before.join(';') + ';}',
+        '.' + uniqueClassName + ':after{' + after.join(';') + ';}',
+      ].join('')
+
+      var el = document.createElement('style')
+      if (el.styleSheet) {
+        el.styleSheet.cssText = css
+      } else {
+        el.appendChild(document.createTextNode(css))
+      }
+
+      document.getElementsByTagName('head')[0].appendChild(el)
+
+      // apply css class
+
+      this.options.className = this.options.className + ' leaflet-pulsing-icon ' + uniqueClassName
+
+      // initialize icon
+
+      L.DivIcon.prototype.initialize.call(this, options)
+
+    }
+  })
+
+  L.icon.pulse = function (options) {
+    return new L.Icon.Pulse(options)
+  }
+
+  L.Marker.Pulse = L.Marker.extend({
+    initialize: function (latlng, options) {
+      options.icon = L.icon.pulse(options)
+      L.Marker.prototype.initialize.call(this, latlng, options)
+    }
+  })
+
+  L.marker.pulse = function (latlng, options) {
+    return new L.Marker.Pulse(latlng, options)
+  }
+
+})(window)
diff --git a/src/conf/Constants.js b/src/conf/Constants.js
index 72bb8f0..cef757c 100644
--- a/src/conf/Constants.js
+++ b/src/conf/Constants.js
@@ -4,6 +4,12 @@
   POLYGON: 'polygon'
 }
 
+export const logicMapper = {
+  fsqy: 'Sample.js',
+  fspfk: 'Sample.js',
+  fsjcd: 'Sample.js'
+}
+
 export const props = {
   pipename: '绠$嚎鍚嶇О',
   pipecode: '绠$嚎缂栫爜',
diff --git a/src/conf/LayerWasteWater.js b/src/conf/LayerWasteWater.js
deleted file mode 100644
index 950943c..0000000
--- a/src/conf/LayerWasteWater.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 搴熸按鍥惧眰
- * @type {string}
- */
-const APP_GIS_HOST_2 = 'http://xearth.cn:8088'
-export const LayerWasteWater = {
-  code: 'pipeline',
-  name: '搴熸按',
-  type: 'geojson',
-  // url: APP_GIS_HOST_2 + '/server/ogcserver/PipeLineTest/wms?version=1.1.1',
-  // url: APP_GIS_HOST_2 + '/layer/findLayer?layerName={sname}',
-  url: APP_GIS_HOST_2 + '/server/ogcserver/PipeLine/wfs?version=1.0.0&TYPENAME={sname}&REQUEST=getfeature&OUTPUTFORMAT=json&maxFeatures=20000',
-  checked: true,
-  layers: [
-    {
-      code: 'rainline',
-      name: '浼佷笟',
-      sname: '浼佷笟', // 琛ㄥ悕
-      checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
-      minZoom: 10, // 鍦ㄦ寚瀹氱骇鍒樉绀�
-      childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
-    },
-    {
-      code: 'oilline',
-      name: '鐩戞祴鐐�',
-      sname: '鐩戞祴鐐�',
-      checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
-      minZoom: 10,
-      childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
-    },
-    {
-      code: 'saltline',
-      name: '鎺掓斁鍙�',
-      sname: '鎺掓斁鍙�',
-      checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
-      minZoom: 10,
-      childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
-    }
-  ]
-}
diff --git a/src/conf/Layers.js b/src/conf/Layers.js
deleted file mode 100644
index 5c69adf..0000000
--- a/src/conf/Layers.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// import * as L from 'leaflet'
-import { LayerSewers, PointLayers } from './LayerSewers'
-// const APP_GIS_HOST = 'http://xearth.cn:6299'
-
-// 鍑犱綍绫诲瀷甯搁噺
-
-export const ServiceLayers = [
-  /*    {
-        code: 'pipeline',
-        name: '绠$綉鏁版嵁',
-        icon_actived: '',
-        icon_deactived: '',
-        type: 'wms',
-        // url: APP_GIS_HOST_PIPELINE + '/server/ogcserver/PipeLineTest/wms?version=1.1.1',
-        url: APP_GIS_HOST_PIPELINE + '/server/ogcserver/PipeLine/wms?version=1.1.1',
-        inLegend: true,
-        checked: true,
-        option: {
-          layers: 'all',
-          styles: '', // Comma-separated list of WMS styles.
-          format: 'image/png', // WMS image format (use 'image/png' for layers with transparency).
-          transparent: true, // If true, the WMS service will return images with transparency.
-          version: '1.1.1', // Version of the WMS service to use
-          tileSize: L.point(256, 256),
-          crs: L.CRS.EPSG4326, // Coordinate Reference System to use for the WMS requests, defaults to map CRS. Don't change this if you're not sure what it means.
-          uppercase: false,
-          WMSTILE: 1
-        }, */
-  LayerSewers, PointLayers
-]
diff --git a/src/conf/MapConfig.js b/src/conf/MapConfig.js
index e01a715..1326a16 100644
--- a/src/conf/MapConfig.js
+++ b/src/conf/MapConfig.js
@@ -1,7 +1,10 @@
 锘縤mport * as L from 'leaflet'
 import TDT from './TDT'
-import { LayerSewersLine, LayerSewersPoint } from './LayerSewers'
-import { LayerWasteWater } from './LayerWasteWater'
+import { LayerSewersLine, LayerSewersPoint } from './layers/LayerSewers'
+import { LayerWasteWater } from './layers/LayerWasteWater'
+import { LayerSolidWaste } from './layers/LayerSolidWaste'
+import { LayerWasteGas } from './layers/LayerWasteGas'
+
 const curWwwPath = window.document.location.href
 const pathname = window.document.location.pathname
 const pos = curWwwPath.indexOf(pathname)
@@ -22,7 +25,7 @@
   minZoom: 3,
   maxZoom: 18,
   // center: [26, 104],
-  center: [32.224016189575195, 118.77070426940918],
+  center: [38.828558921813965, 117.41676807403564],
   zoom: 14,
   worldCopyJump: true,
   inertia: true,
@@ -38,7 +41,10 @@
   // defaultBasemapCode: 'tianditu_img', // 榛樿鏄剧ず 鍦板浘绫诲瀷
   IntranetBaseMaps: TDT.intranet,
   InternetBaseMaps: TDT.internet,
-  Layers: { LayerSewersLine: [LayerSewersLine, LayerWasteWater], layerSewersPoint: LayerSewersPoint } // 姹¢洦姘村浘灞傞厤缃�
+  Layers: {
+    LayerSewersLine: [LayerSewersLine, LayerWasteWater, LayerWasteGas, LayerSolidWaste],
+    layerSewersPoint: LayerSewersPoint
+  } // 姹¢洦姘村浘灞傞厤缃�
 }
 
 /**
@@ -55,9 +61,27 @@
   }
 }
 
+/**
+ *
+ */
+// const MagicMaker = {
+//   Current: 'vanishIn',
+//   ARRAY: [
+//     'twisterInDown', 'twisterInUp', 'swap',
+//     'puffIn', 'vanishIn',
+//     'openDownLeftReturn', 'openDownRightReturn', 'openUpLeftReturn', 'openUpRightReturn',
+//     'perspectiveDownReturn', 'perspectiveUpReturn', 'perspectiveLeftReturn', 'perspectiveRightReturn',
+//     'slideDownReturn', 'slideUpReturn', 'slideLeftReturn', 'slideRightReturn',
+//     'swashIn', 'foolishIn',
+//     'tinRightIn', 'tinLeftIn', 'tinUpIn', 'tinDownIn',
+//     'boingInUp',
+//     'spaclInUp', 'spaceInRight', 'spaceInDown', 'spaceInLeft']
+// }
+
 export default {
   mapOptions,
   mapConfig,
   TokenConfig,
   BLUEMAP_HOST
+  // MagicMaker
 }
diff --git a/src/conf/LayerSewers.js b/src/conf/layers/LayerSewers.js
similarity index 99%
rename from src/conf/LayerSewers.js
rename to src/conf/layers/LayerSewers.js
index 65c109d..a61b541 100644
--- a/src/conf/LayerSewers.js
+++ b/src/conf/layers/LayerSewers.js
@@ -1,13 +1,11 @@
 const APP_GIS_HOST_2 = 'http://xearth.cn:8088'
+const WFS_URL = APP_GIS_HOST_2 + '/server/ogcserver/PipeLine/wfs'
 // const APP_GIS_HOST_2 = 'http://localhost:3000'
 // const APP_GIS_HOST_2 = 'http://192.168.31.226:8088'
 export const LayerSewersLine = {
   code: 'pipeline',
   name: '绠$綉鏁版嵁',
   type: 'geojson',
-  // url: APP_GIS_HOST_2 + '/server/ogcserver/PipeLineTest/wms?version=1.1.1',
-  // url: APP_GIS_HOST_2 + '/layer/findLayer?layerName={sname}',
-  url: APP_GIS_HOST_2 + '/server/ogcserver/PipeLine/wfs?version=1.0.0&TYPENAME={sname}&REQUEST=getfeature&OUTPUTFORMAT=json&maxFeatures=20000',
   checked: true,
   layers: [
     {
@@ -15,7 +13,7 @@
       name: '闆ㄦ按绾�',
       sname: '绠$綉', // 琛ㄥ悕
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=绠$綉',
       minZoom: 10, // 鍦ㄦ寚瀹氱骇鍒樉绀�
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
@@ -24,7 +22,7 @@
       name: '鍚补姹℃按绾�',
       sname: '鍚补姹℃按',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=鍚补姹℃按',
       minZoom: 10,
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
@@ -33,7 +31,7 @@
       name: '鍚洂姹℃按绾�',
       sname: '鍚洂姹℃按',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=鍚洂姹℃按',
       minZoom: 10,
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
@@ -42,7 +40,7 @@
       name: '鍚⒈姹℃按绾�',
       sname: '鍚⒈姹℃按',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=鍚⒈姹℃按',
       minZoom: 10,
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
@@ -51,7 +49,7 @@
       name: '鎺掑彛',
       sname: '鎺掑彛',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=鎺掑彛',
       minZoom: 10,
       childLayer: 'pk' // 鍏宠仈PointLayers
     },
@@ -60,7 +58,7 @@
       name: '浜嬫晠姘寸嚎',
       sname: '浜嬫晠姘�',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=浜嬫晠姘�',
       minZoom: 10,
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
@@ -69,7 +67,7 @@
       name: '寰幆姘寸嚎',
       sname: '寰幆姘�',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=寰幆姘�',
       minZoom: 10,
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
@@ -78,7 +76,7 @@
       name: '鍑�鍖栨按绾�',
       sname: '鍑�鍖栨按',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=鍑�鍖栨按',
       minZoom: 10,
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
@@ -87,7 +85,7 @@
       name: '鐢熸椿姹℃按',
       sname: '鐢熸椿姹℃按',
       checked: true, // 榛樿閫変腑鐘舵��
-      filter: {},
+      wfs: WFS_URL + '?TYPENAME=鐢熸椿姹℃按',
       minZoom: 10,
       childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
     },
diff --git a/src/conf/layers/LayerSolidWaste.js b/src/conf/layers/LayerSolidWaste.js
new file mode 100644
index 0000000..c81dc8b
--- /dev/null
+++ b/src/conf/layers/LayerSolidWaste.js
@@ -0,0 +1,27 @@
+/**
+ * 鍥哄簾鍥惧眰
+ * @type {string}
+ */
+export const LayerSolidWaste = {
+  code: 'solidWaste',
+  name: '鍥哄簾',
+  checked: true,
+  layers: [
+    {
+      code: 'solidWasteQy',
+      name: '浼佷笟',
+      sname: '浼佷笟', // 琛ㄥ悕
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: 'http://www.baidu.com', // 璇锋眰涓氬姟鏁版嵁鎺ュ彛
+      minZoom: 10 // 鍦ㄦ寚瀹氱骇鍒樉绀�
+    },
+    {
+      code: 'solidWasteJcd',
+      name: '鐩戞祴鐐�',
+      sname: '鐩戞祴鐐�',
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: 'http://www.baidu2.com',
+      minZoom: 10
+    }
+  ]
+}
diff --git a/src/conf/layers/LayerWasteGas.js b/src/conf/layers/LayerWasteGas.js
new file mode 100644
index 0000000..3860e94
--- /dev/null
+++ b/src/conf/layers/LayerWasteGas.js
@@ -0,0 +1,51 @@
+/**
+ * 搴熸皵鍥惧眰
+ * @type {string}
+ */
+export const LayerWasteGas = {
+  code: 'wasteGas',
+  name: '搴熸皵',
+  checked: true,
+  layers: [
+    {
+      code: 'wasteGasQy',
+      name: '浼佷笟',
+      sname: '浼佷笟', // 琛ㄥ悕
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: 'http://www.baidu.com', // 璇锋眰涓氬姟鏁版嵁鎺ュ彛
+      minZoom: 10 // 鍦ㄦ寚瀹氱骇鍒樉绀�
+    },
+    {
+      code: 'wasteGasJcd',
+      name: '鐩戞祴鐐�',
+      sname: '鐩戞祴鐐�',
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: 'http://www.baidu2.com',
+      minZoom: 10
+    },
+    {
+      code: 'wasteGasVocs',
+      name: 'VOCs',
+      sname: 'VOCs',
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: '',
+      minZoom: 10
+    },
+    {
+      code: 'wasteGasKrq',
+      name: '鍙噧姘�',
+      sname: '鍙噧姘�',
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: '',
+      minZoom: 10
+    },
+    {
+      code: 'wasteGasYhq',
+      name: '鏈夊姘�',
+      sname: '鏈夊姘�',
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: '',
+      minZoom: 10
+    }
+  ]
+}
diff --git a/src/conf/layers/LayerWasteWater.js b/src/conf/layers/LayerWasteWater.js
new file mode 100644
index 0000000..3f1ff32
--- /dev/null
+++ b/src/conf/layers/LayerWasteWater.js
@@ -0,0 +1,37 @@
+/**
+ * 搴熸按鍥惧眰
+ * @type {string}
+ */
+export const LayerWasteWater = {
+  code: 'pipeline',
+  name: '搴熸按',
+  checked: true,
+  layers: [
+    {
+      code: 'fsqy',
+      name: '浼佷笟',
+      sname: '浼佷笟', // 琛ㄥ悕
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: 'http://www.baidu.com', // 璇锋眰涓氬姟鏁版嵁鎺ュ彛
+      minZoom: 10 // 鍦ㄦ寚瀹氱骇鍒樉绀�
+    },
+    {
+      code: 'fsjcd',
+      name: '鐩戞祴鐐�',
+      sname: '鐩戞祴鐐�',
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: 'http://www.baidu2.com',
+      minZoom: 10,
+      childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
+    },
+    {
+      code: 'fspfk',
+      name: '鎺掓斁鍙�',
+      sname: '鎺掓斁鍙�',
+      checked: true, // 榛樿閫変腑鐘舵��
+      url: '',
+      minZoom: 10,
+      childLayer: 'fsss,hbss' // 鍏宠仈PointLayers
+    }
+  ]
+}
diff --git a/src/img/fs_yellow.7fe82c5d.png b/src/img/fs_yellow.7fe82c5d.png
new file mode 100644
index 0000000..8d84aa8
--- /dev/null
+++ b/src/img/fs_yellow.7fe82c5d.png
Binary files differ
diff --git a/src/main.js b/src/main.js
index da699b5..653b668 100644
--- a/src/main.js
+++ b/src/main.js
@@ -22,6 +22,7 @@
 Vue.prototype.$cancels = []
 Vue.prototype.L = L
 Vue.prototype.$config = appConfig
+Vue.prototype.$echarts = echarts // 鎸傝浇echarts
 // 娉ㄥ唽鎸囦护7
 // registerDirectives(Vue)
 
diff --git a/src/styles/theme-dark/variable.less b/src/styles/theme-dark/variable.less
index 430a7b4..dee09f6 100644
--- a/src/styles/theme-dark/variable.less
+++ b/src/styles/theme-dark/variable.less
@@ -1,4 +1,4 @@
-@import "../common/variable";
+//@import "../common/variable";
 
 /* 涓婚鑹�
 -------------------------- */
diff --git a/src/utils/AjaxUtils.js b/src/utils/AjaxUtils.js
index 0499763..d0e1bfa 100644
--- a/src/utils/AjaxUtils.js
+++ b/src/utils/AjaxUtils.js
@@ -33,7 +33,7 @@
   axios({
     method: 'get',
     url: pUrl,
-    data: pData
+    params: pData
   }).then(function (response) {
     pBackFun(response)
   })
diff --git a/src/utils/axios.js b/src/utils/axios.js
index b28575e..d42baf4 100644
--- a/src/utils/axios.js
+++ b/src/utils/axios.js
@@ -117,10 +117,10 @@
 // request鎷︽埅鍣�
 Service.interceptors.request.use(
   config => {
-  // 涓存椂杩藉姞
-  //   if ($store.state.user.account) {
-  //     config.headers.account = $store.state.user.account
-  //   }
+    // 涓存椂杩藉姞
+    //   if ($store.state.user.account) {
+    //     config.headers.account = $store.state.user.account
+    //   }
     const copyConfig = Object.assign({}, config)
     // copyConfig = filterOauthData(copyConfig)
     // showDebugInfo(copyConfig)
diff --git a/src/views/MapTemplate.vue b/src/views/MapTemplate.vue
index 68b58e4..6913577 100644
--- a/src/views/MapTemplate.vue
+++ b/src/views/MapTemplate.vue
@@ -9,20 +9,23 @@
       <lc-service-layer class="barline" v-if="lcServiceLayerVisible"></lc-service-layer>
     </sgis-layer-controller>
     <monitor-panel></monitor-panel>
-<!--            <top-enterprise-panel></top-enterprise-panel>-->
+    <!--        <top-enterprise-panel></top-enterprise-panel>-->
     <tool-box-panel ref="toolBox"></tool-box-panel>
-<!--    <menu-special></menu-special>-->
+    <!--    <menu-special></menu-special>-->
     <legend-panel></legend-panel>
     <summary-sheets></summary-sheets>
     <enterprise></enterprise>
-<!--    <el-button id="map-btn" el-icon-c-scale-to-original icon="el-icon-c-scale-to-original" circle @click="isShowHidden"></el-button>-->
+    <!--    <el-button id="map-btn" el-icon-c-scale-to-original icon="el-icon-c-scale-to-original" circle @click="isShowHidden"></el-button>-->
+    <el-button type="primary" @click="ChangeState" class="solid-waste">鍥哄簾</el-button>
+    <el-button type="primary" @click="ChangeWaterState" class="Waste-water">搴熸按</el-button>
+    <el-button type="primary" @click="AddGasHelper" class="flue-gas">搴熸皵</el-button>
+    <PublicBounced ref="PublicBounced"></PublicBounced>
   </div>
 </template>
 
 <script>
 import 'leaflet/dist/leaflet.css'
 import Sgis from '@src/Sgis'
-// import Vue from 'vue'
 // import mapConfig from '@/conf/MapConfig'
 import SgisLayerController from '@components/LayerController/LayerController'
 import LcBasemap from '@components/LayerController/modules/LcBaseMap'
@@ -35,6 +38,13 @@
 // import MenuSpecial from '@components/panel/MenuTopic'
 import LegendPanel from '@components/panel/LegendPanel'
 import Enterprise from '../components/table/enterprise'
+// 搴曞浘涓氬姟js閫昏緫
+import AddSolidWasteHelper from '@components/BaseNav/SolidWaste/SolidWaste'
+import AddWasteWaterHelper from '@components/BaseNav/WasteWater/WasteWater'
+import AddGasHelper from '@components/BaseNav/flueGas/flueGas'
+// // 鍏叡灞曠ず鏁版嵁
+import PublicBounced from '@components/BaseNav/PublicBounced/PublicBounced'
+import LayerFactory from '@components/LayerController/service/LayerFactory'
 
 export default {
   name: 'MapTemplate',
@@ -49,10 +59,12 @@
     LcBasemap,
     LcServiceLayer,
     Popup,
-    summarySheets
+    summarySheets,
+    PublicBounced
   },
   data () {
     return {
+      // isShowBtn: false,
       map: null,
       lcServiceLayerVisible: false,
       basemapHelper: {},
@@ -66,14 +78,61 @@
     }
   },
   beforeMount () {
-    // import('@/assets/airQuality.json').then(res => {
-    //   console.log(res.features)
-    // })
     this.$nextTick(() => {
       this.init()
     })
   },
   methods: {
+    AddGasHelper () {
+      const data = {
+        companyId: 3900100145,
+        id: '',
+        monType: 2,
+        userCode: 'wenchun.deng',
+        monDuration: '',
+        epName: '',
+        secdDeptId: '',
+        contrLevel: '',
+        dataStatus: '',
+        dataFlag: '',
+        runStatus: '',
+        emissTypeId: ''
+      }
+      const AddGas = new AddGasHelper({ map: this.map })
+      AddGas.requestData(data)
+      AddGas.SetPlueGasContent(this.config, this.$refs.PublicBounced)
+    },
+    ChangeState () {
+      const data = {
+        companyId: 3900100145,
+        userCode: 'wenchun.deng',
+        name: '',
+        marginWarr: '',
+        longDayWarr: ''
+      }
+      const AddSolidWaste = new AddSolidWasteHelper({ map: this.map })
+      AddSolidWaste.requestData(data)
+      AddSolidWaste.SetSolidWasteContent(this.config, this.$refs.PublicBounced)
+    },
+    ChangeWaterState () {
+      const data = {
+        companyId: 3900100145,
+        id: '',
+        monType: 1,
+        userCode: 'wenchun.deng',
+        monDuration: '',
+        epName: '',
+        secdDeptId: '',
+        contrLevel: '',
+        dataStatus: '',
+        dataFlag: '',
+        runStatus: '',
+        emissTypeId: ''
+      }
+      const AddWasteWater = new AddWasteWaterHelper({ map: this.map })
+      AddWasteWater.requestData(data)
+      AddWasteWater.SetWasteWaterContent(this.config, this.$refs.PublicBounced)
+    },
     saveMapStatus () {
       window.serviceLayerHelper = this.serviceLayerHelper
       this.$store.commit('setMapObj', this.map)
@@ -83,32 +142,100 @@
 
       this.lcServiceLayerVisible = true
     },
-    init: function () {
+    init () {
       const mapcontainer = this.$refs.rootmap
       this.map = Sgis.initMap(mapcontainer)
       this.$refs.toolBox.map = this.map
 
+      window.popupComp = this.$refs.popup
+      var layerFactory = new LayerFactory({
+        L: window.L,
+        map: this.map
+      })
+      layerFactory.init()
+      window.layerFactory = layerFactory
+
       this.basemapHelper = Sgis.initBasemapsHelper(this.map) // 鍒濆鍖栧熀纭�搴曞浘鍔╂墜
       this.basemapHelper.initBasemap(this.config, false) // 绗簩涓弬鏁帮紝琛ㄧず鏄惁鍐呯綉搴曞浘
 
-      this.serviceLayerHelper = Sgis.initTileLayersHelper(this.map) // 鍒濆鍖栦笟鍔″簳鍥惧姪鎵�
-      console.log('-------' + this.$refs.popup.$el)
-      this.serviceLayerHelper.initServiceLayers(this.config, this.$refs.popup)
+      // this.serviceLayerHelper = Sgis.initTileLayersHelper(this.map) // 鍒濆鍖栦笟鍔″簳鍥惧姪鎵�
+      // console.log('-------' + this.$refs.popup.$el)
+      // this.serviceLayerHelper.initServiceLayers(this.config, this.$refs.popup)
 
       this.vectorLayerHelper = Sgis.initVectorLayersHelper(this.map) // 鍒濆鍖栧姩鎬佽绱犲浘灞傚姪鎵�
       this.vectorLayerHelper.initVectorLayers(this.config)
+
+      // this.ChangeState()
+      // this.AddGasHelper()
+      // this.ChangeWaterState()
 
       this.saveMapStatus()
       // this.setMapObj(this.mapObj)
       // this.setBasemapHelper(this.basemapHelper)
       // this.setServiceLayerHelper(this.serviceLayerHelper)
       // this.setVectorLayerHelper(this.vectorLayerHelper)
+      this.addMarker()
+    },
+    addMarker () {
+      const L = this.L
+      var icon = new L.Icon({
+        iconUrl: 'assets/images/map/marker-icon.png',
+        shadowUrl: 'assets/images/map/marker-shadow.png',
+        iconSize: [25, 41],
+        iconAnchor: [12, 41],
+        popupAnchor: [1, -34],
+        shadowSize: [41, 41]
+      })
+      var marker = L.marker([32.2221, 118.7843], {
+        icon: icon
+      }).addTo(this.map)
+        .bindPopup(() => this.$refs.popup.$el, {
+          className: 's-map-popup',
+          minWidth: 300,
+          closeButton: false,
+          autoClose: false
+        })
+        .bindTooltip('瀛椾綋鍏夋檿鏁堟灉t.', {
+          // permanent : true,
+          offset: [0, 0], // 鍋忕Щ
+          direction: 'right', // 鏀剧疆浣嶇疆
+          // sticky:true,//鏄惁鏍囪鍦ㄧ偣涓婇潰
+          className: 'anim-tooltip'// CSS鎺у埗
+        })
+
+      marker.on('popupopen', this.onLayerClick)
+    },
+    onLayerClick () {
+      this.$refs.popup.setShow()
+    },
+    callPopup (val) {
+      console.log(val)
     }
   }
 }
 </script>
 
 <style lang="less">
+.flue-gas {
+  position: fixed;
+  top: 88px;
+  left: 180px;
+  z-index: 500;
+}
+
+.solid-waste {
+  position: absolute;
+  top: 88px;
+  left: 88px;
+  z-index: 999;
+}
+
+.Waste-water {
+  position: absolute;
+  top: 88px;
+  left: 280px;
+  z-index: 999;
+}
 
 .full-screen {
   width: 100%;
@@ -128,14 +255,27 @@
     //background-color: #0661AE;
     border-top: 1px solid #0661AE;
   }
+
   #map-btn {
     position: fixed;
     top: 20px;
     left: 100px;
     z-index: 9999;
   }
-  .leaflet-custom-icon{
+
+  .leaflet-custom-icon {
     background: white;
   }
+
+  .leaflet-marker-icon {
+    background: none;
+  }
+
+  #migic {
+    width: 48px;
+    height: 48px;
+    margin: -18px -20px;
+    z-index: 999;
+  }
 }
 </style>
diff --git a/vue.config.js b/vue.config.js
index 07df932..64bf2b6 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -27,7 +27,7 @@
   devServer: {
     // host: 'localhost',
     // open: true,
-    port: 8888,
+    port: 8080,
     // overlay: false,
     overlay: {
       warnings: true,

--
Gitblit v1.8.0