From 5808f76456ca0d40de5074f132b73a5a488e3e13 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 09 Dec 2025 09:12:03 +0800
Subject: [PATCH] Merge branch 'refs/heads/feature/v9.0/9.0.1' into test

---
 src/views/layerManagement/components/utils.js |   92 +++++++++++++++++++++------------------------
 1 files changed, 43 insertions(+), 49 deletions(-)

diff --git a/src/views/layerManagement/components/utils.js b/src/views/layerManagement/components/utils.js
index 80c8101..7001570 100644
--- a/src/views/layerManagement/components/utils.js
+++ b/src/views/layerManagement/components/utils.js
@@ -14,6 +14,8 @@
  */
 export class DrawPolygon {
 	constructor() {
+		// 是否绘制
+		this.whetherToDraw =false
 		// 图斑预览模式标记
 		this.isPureSpotPreview = false
 		// 是否删除测区
@@ -61,6 +63,7 @@
 		this.delPoint = this.delPoint.bind(this)
 		// 外部订阅者
 		this.listeners = []
+		
 	}
 
 	// 实体命名常量
@@ -96,6 +99,10 @@
 	editThePatch(data) {
 		this.isPreviewMode = data
 	}
+	// 绘制
+	drawTheArea(data){
+		this.whetherToDraw = data		
+	}
 	// 删除测区
 	deleteTheArea(data) {
 		this.isDeleteTheArea = data
@@ -103,6 +110,12 @@
 
 	// 开始绘制
 	startDrawing() {
+		if (!this.whetherToDraw) {
+		
+			return;
+		  }
+		 
+		  
 		this.drawingMode = true
 		this.curPolygon = new Cesium.PolygonHierarchy()
 
@@ -164,36 +177,10 @@
 				ind: pointIndex, // 索引记录
 			},
 		})
+	
+		
 	}
-	// 清除不在范围内的点
-	removeLastInvalidPoint() {
-		const posLen = this.curPolygon.positions.length
-		if (posLen === 0) return
 
-		let targetPointId = ''
-		let removeCount = 0
-
-		if (posLen === 2) {
-			removeCount = 2
-			targetPointId = `${DrawPolygon.ENTITY_NAMES.POINT_ID_PREFIX}0`
-		} else if (posLen > 2) {
-			removeCount = 1
-			const pointIndex = posLen - 2
-			targetPointId = `${DrawPolygon.ENTITY_NAMES.POINT_ID_PREFIX}${pointIndex}`
-		}
-
-		this.curPolygon.positions.splice(posLen - removeCount, removeCount)
-
-		const invalidPoint = this.editPolygonPointDataSource.entities.getById(targetPointId)
-		if (invalidPoint) {
-			this.editPolygonPointDataSource.entities.remove(invalidPoint)
-		}
-
-		if (this.curPolygon.positions.length === 0 && this.polygonEntity) {
-			this.editPolygonDataSource.entities.remove(this.polygonEntity)
-			this.polygonEntity = null
-		}
-	}
 	// 添加一个点
 	addPosition(position, isAdd = true) {
 		// 第一个点要重复压入一次,形成动态绘制效果
@@ -275,7 +262,7 @@
 		// 编辑模式下,拖拽点实时更新
 		if (this.editingMode && this.draggedEntity?.customData) {
 			this.draggedEntity.position = cartesian
-			this.curPolygon.positions[this.draggedEntity?.customData.ind] = cartesian
+			this.curPolygon.positions[this.draggedEntity?.customData.ind] = cartesian			
 		}
 
 		// 绘制模式下,实时更新最后一个点
@@ -306,23 +293,25 @@
 	// 鼠标左键点击
 	handleLeftClick(click) {
 		this.removeMenuPopup()
-
 		const pickedAllEntity = this.viewer.scene.drillPick(click.position).filter(i => i.id)
-		const isStartPoint = pickedAllEntity.find(i => i.id.name === '起飞点')
 		const isPolygonPoint = pickedAllEntity.find(i => i.id.name === DrawPolygon.ENTITY_NAMES.POINT)
 		const isPolygon = pickedAllEntity.find(i => i.id.name === DrawPolygon.ENTITY_NAMES.POLYGON)
-
-		if (isStartPoint) return
-
+		if (this.drawingMode && !this.whetherToDraw) {
+		
+			return; // 阻断后续绘制逻辑
+		  }
 		// 如果不是绘制模式
 		if (!this.drawingMode) {
 			if (!isPolygon) {
+				
+				
 				this.editingMode = false
 				this.editPolygonPointDataSource.entities.show = false
 				return
 			}
 
 			if (isPolygon) {
+			
 				this.editingMode = true
 				this.editPolygonPointDataSource.entities.show = true
 			}
@@ -349,10 +338,9 @@
 	}
 
 	// 鼠标右键点击(弹出菜单)
-	handleRightClick(click) {
+	handleRightClick(click) {		
 		const that = this
 		if (that.drawingMode) return
-
 		that.removeMenuPopup()
 
 		const pickedAllEntity = that.viewer.scene.drillPick(click.position).filter(i => i.id)
@@ -367,10 +355,12 @@
 			pickedEntity = isPolygon
 			tooltipEvent = that.delPolygon
 			menuType = 'polygon'
+		
 		} else if (isEditPoint) {
 			pickedEntity = isEditPoint
 			tooltipEvent = that.delPoint
 			menuType = 'edit-point'
+			
 		}
 
 		if (pickedEntity && this.isDeleteTheArea) {
@@ -431,12 +421,7 @@
 		this.notify('getPolygonPositions', [])
 		this.startDrawing()
 	}
-	// 删除图斑
-	delSpot() {
-		this.removeEntities()
-		this.isPreviewMode = true
-		this.startDrawing()
-	}
+
 	// 删除端点
 	delPoint() {
 		if (this.curPolygon.positions.length <= 3) {
@@ -469,6 +454,7 @@
 		menuPopup.id = 'planarPolygonEditMenu'
 		menuPopup.className = 'planar-polygon-edit-menu'
 
+
 		const menuItems =
 			type === 'polygon'
 				? [{ title: '删除测区', class: 'del-planar-polygon' }]
@@ -480,6 +466,7 @@
 			titleDiv.className = item.class
 			menuPopup.appendChild(titleDiv)
 		})
+	
 		this.isPreviewMode = true
 		menuPopupVBox.appendChild(menuPopup)
 		return menuPopupVBox
@@ -539,15 +526,19 @@
 	// 初始化已有多边形
 	initPolygon(viewer, positions, isPurePreview = false) {
 		this.initHandler(viewer)
-		this.isPureSpotPreview = isPurePreview
-		this.startDrawing()
+	
+		if (this.whetherToDraw) {
+			this.startDrawing();
+		  } else {
+			// 新增:不允许绘制时,确保绘制模式为 false,避免误触发
+			this.drawingMode = false;
+		
+		  }
+		
 		let newPosition = positions.map(item => {
 			return Cesium.Cartesian3.fromDegrees(Number(item.lng), Number(item.lat), Number(item.height))
 		})
-		// 预览航线的时候调用
-		if (!this.isPureSpotPreview) {
-			this.notify('getPolygonPositions', newPosition)
-		}
+		
 
 		newPosition.forEach(item => {
 			this.addPosition(item, false)
@@ -571,7 +562,10 @@
 	// 初始化事件处理器
 	initHandler(viewer) {
 		this.viewer = viewer
-		this.startDrawing()
+
+		if(this.whetherToDraw){
+			this.startDrawing()
+		}
 
 		if (!this.handler) {
 			this.handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)

--
Gitblit v1.9.3