Pārlūkot izejas kodu

互联网-社管一张图-工具,标绘工具,点击“X”按钮关闭标绘图案后,“X”按钮未消失,操作步骤如下:

CzRger 1 gadu atpakaļ
vecāks
revīzija
b75631371c

+ 18 - 0
src/views/gis/layout/tools/tool-draw.ts

@@ -390,4 +390,22 @@ export const draw = (map, obj) => {
             // }
         })
     }))
+}
+
+export const refreshModify = (map, _source) => {
+    const oldModify = map.getInteractions().getArray().filter(v => v.get(modifyFlag[0]) === modifyFlag[1])
+    if (oldModify) {
+        map.removeInteraction(oldModify[0])
+    }
+    const modifyInteraction = new Modify({
+        source: _source,
+    });
+    modifyInteraction.set(modifyFlag[0], modifyFlag[1])
+    map.addInteraction(modifyInteraction)
+    modifyInteraction.on('modifyend', evt => {
+        try {
+            const feat = evt.features.item(0)
+        } catch {
+        }
+    })
 }

+ 34 - 28
src/views/gis/layout/tools/tool.vue

@@ -90,39 +90,45 @@ export default defineComponent({
           l.getSource().removeFeature(feat)
           state.tempUUID = ''
           state.closeOverlay.setPosition(undefined)
+          ToolDraw.refreshModify(props.map, l.getSource())
         }
       }
     }
     onMounted(() => {
-      state.closeOverlay = new ol.Overlay({
-        id: 'toolOverlay',
-        element: ref_close.value,
-        autoPan: false,
-        offset: [0, -10],
-        positioning: 'bottom-center',
-        stopEvent: true,
-        autoPanAnimation: {
-          duration: 250
-        }
-      })
-      props.map?.addOverlay(state.closeOverlay)
-      props.map?.on('singleclick', (e) => {
-        let flag = false
-        props.map?.forEachFeatureAtPixel(e.pixel, (f) => {
-          if (!flag && f.get('layerName') === 'toolDrawViewsLayer' && f.get('isInit')) {
-            flag = true
-            if (state.tempUUID !== f.getId()) {
-              state.tempUUID = f.getId()
-              state.closeOverlay.setPosition(e.coordinate)
-            } else {
-              state.tempUUID = ''
-              state.closeOverlay.setPosition(undefined)
-            }
+      const id = 'toolOverlay'
+      if (props.map?.getOverlayById(id)) {
+        state.closeOverlay = props.map?.getOverlayById(id)
+      } else {
+        state.closeOverlay = new ol.Overlay({
+          id: id,
+          element: ref_close.value,
+          autoPan: false,
+          offset: [0, -10],
+          positioning: 'bottom-center',
+          stopEvent: true,
+          autoPanAnimation: {
+            duration: 250
           }
-        }, {
-          hitTolerance: 0,
-        });
-      })
+        })
+        props.map?.addOverlay(state.closeOverlay)
+        props.map?.on('singleclick', (e) => {
+          let flag = false
+          props.map?.forEachFeatureAtPixel(e.pixel, (f) => {
+            if (!flag && f.get('layerName') === 'toolDrawViewsLayer' && f.get('isInit')) {
+              flag = true
+              if (state.tempUUID !== f.getId()) {
+                state.tempUUID = f.getId()
+                state.closeOverlay.setPosition(e.coordinate)
+              } else {
+                state.tempUUID = ''
+                state.closeOverlay.setPosition(undefined)
+              }
+            }
+          }, {
+            hitTolerance: 0,
+          });
+        })
+      }
     })
     return {
       ...toRefs(state),