From bd82dff04b90e3eb1973f43ecc3fdfb8172bcdd7 Mon Sep 17 00:00:00 2001
From: QibolinCzp <qibolin02429@126.com>
Date: 星期五, 14 五月 2021 14:40:58 +0800
Subject: [PATCH] Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop

---
 src/components/LayerController/dataset/WmsLayerList.js |  116 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 91 insertions(+), 25 deletions(-)

diff --git a/src/components/LayerController/dataset/WmsLayerList.js b/src/components/LayerController/dataset/WmsLayerList.js
index af11119..fc0e782 100644
--- a/src/components/LayerController/dataset/WmsLayerList.js
+++ b/src/components/LayerController/dataset/WmsLayerList.js
@@ -1,7 +1,8 @@
+import clone from '../../../utils/utils'
 
 class WmsLayerList {
   constructor () {
-    // {鍥惧眰鍚嶇О锛歔{typeName:xxx,filter:yyy}]}
+    // [{鍥惧眰鍚嶇О锛歔{typeName:xxx,filter:yyy}]}]
     this.layers = []
   }
 
@@ -9,36 +10,76 @@
     const typeName = config.typeName
     const layerGroup = config.layerGroup || typeName
     const filter = config.filter
+    const index = config.index || 9
     if (layerGroup) {
-      this.addLayer(layerGroup, typeName, filter)
+      this.addLayer(layerGroup, typeName, filter, index)
     }
   }
 
-  addLayer (layerGroup, typeName, filter) {
-    const layers = this.layers
-    const layer = layers[layerGroup]
+  addLayer (layerGroup, typeName, filter, index) {
+    const layer = this._getLayer(layerGroup)
+
     if (layer) {
-      layers[layerGroup].push({ typeName: typeName, filter: filter || 'INCLUDE' })
+      const offset = this.indexOf(typeName, filter)
+      if (offset < 0) {
+        const layerConfig = layer[layerGroup]
+        layerConfig.push({ typeName: typeName, filter: filter || 'INCLUDE' })
+      }
     } else {
-      layers[layerGroup] = [{ typeName: typeName, filter: filter || 'INCLUDE' }]
+      const layerConfig = {}
+      layerConfig[layerGroup] = [{ typeName: typeName, filter: filter || 'INCLUDE' }]
+      this.layers.push(layerConfig)
     }
+  }
+
+  _getLayer (layer) {
+    const layers = this.layers
+    for (let i = 0; i < layers.length; i++) {
+      const lay = layers[i]
+      if (lay[layer]) {
+        return lay
+      }
+    }
+    return null
+  }
+
+  indexOf (typeName, filter) {
+    filter = filter || 'INCLUDE'
+    const layers = this.layers
+    for (let i = 0; i < layers.length; i++) {
+      const layer = layers[i]
+      for (const k in layer) {
+        const lay = layer[k]
+        for (let j = 0; j < lay.length; j++) {
+          const l = lay[j]
+          if (typeName === l.typeName && filter === l.filter) {
+            return j
+          }
+        }
+      }
+    }
+    return -1
   }
 
   remove (typeName, filter) {
-    const layers = this.layers
-    for (const k in layers) {
-      if (k === typeName) {
-        delete this.layers[k]
-        break
-      }
-      for (let i = 0; i < layers[k].length; i++) {
-        const layer = layers[k][i]
-        if (typeName === layer.typeName && filter === layer.filter) {
-          this.layers[k].splice(i, 1)
-          if (this.layers[k].length === 0) {
-            delete this.layers[k]
-          }
+    filter = filter || 'INCLUDE'
+    const layers = clone(this.layers)
+    for (let j = 0; j < layers.length; j++) {
+      const layer = layers[j]
+      for (const k in layer) {
+        /* if (typeName === k) {
+          delete this.layers[j][k]
           break
+        } */
+        const layerConfig = layer[k]
+        for (let i = 0; i < layerConfig.length; i++) {
+          const lay = layerConfig[i]
+          if (typeName === lay.typeName && filter === lay.filter) {
+            this.layers[j][k].splice(i, 1)
+            if (this.layers[j][k].length === 0) {
+              this.layers.splice(j, 1)
+            }
+          }
         }
       }
     }
@@ -47,8 +88,11 @@
   getLayers () {
     const layers = this.layers
     const _layers = []
-    for (const k in layers) {
-      _layers.push(k)
+    for (let i = 0; i < layers.length; i++) {
+      const layer = layers[i]
+      for (const k in layer) {
+        _layers.push(k)
+      }
     }
     return _layers.join(',')
   }
@@ -56,15 +100,37 @@
   getFilters () {
     const layers = this.layers
     const cqlFilters = []
-    for (const k in layers) {
+    for (let i = 0; i < layers.length; i++) {
+      const layer = layers[i]
       const filters = []
-      for (let i = 0; i < layers[k].length; i++) {
-        filters.push(layers[k][i].filter)
+      for (const k in layer) {
+        const layerConfig = layer[k]
+        for (let i = 0; i < layerConfig.length; i++) {
+          const filter = layerConfig[i].filter
+          if (filter) {
+            filters.push(filter)
+          }
+        }
       }
       cqlFilters.push(filters.join(' OR '))
     }
     return cqlFilters.join(';')
   }
+
+  /**
+   * 娣诲姞鍏冪礌鍒版寚瀹氫綅缃�
+   * @param index
+   * @param element
+   * @private
+   */
+  _addIndex (index, element) {
+    const newArr = []
+    for (var i = this.dataSouce.length - 1; i > index - 1; i--) {
+      newArr[i + 1] = this.dataSouce[i]
+    }
+    newArr[index] = element
+    this.layers = newArr
+  }
 }
 
 export default WmsLayerList

--
Gitblit v1.8.0