From 39abebc6d54083556a393441e0628bc3d93b46c7 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Sat, 25 Oct 2025 13:54:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/feature/v7.0/7.0.2' into feature/v7.0/7.0.2

---
 src/hooks/useRouteLine/useRouteLine.js                |    1 
 src/views/tickets/orderLog.vue                        |   43 +++++++++++++++++++--
 src/views/algorithmRepository/algorithmRepository.vue |    5 +-
 src/hooks/common.js                                   |   52 ++++++++++++++++---------
 4 files changed, 74 insertions(+), 27 deletions(-)

diff --git a/src/hooks/common.js b/src/hooks/common.js
index aeb93be..4b32129 100644
--- a/src/hooks/common.js
+++ b/src/hooks/common.js
@@ -26,14 +26,17 @@
 	if (!placemark?.length) return []
 	const isWGS84 = execute_height_mode === 'WGS84'
 	const list = placemark.map(item => {
-		const [longitude, latitude] = item.point.coordinates.trim().split(',')
+		const [longitude, latitude] = item.point.coordinates.trim().split(',').map(i => _.round(i, 6))
+		const [latitude1, longitude1] = (item?.waypoint_heading_param?.waypoint_poi_point?.trim()?.split(',') || [])
+			.map(i => _.round(i, 6))
 		let action_modes = item?.action_group?.action || []
 		action_modes = Array.isArray(action_modes) ? action_modes : [action_modes]
 		return {
-			longitude: _.round(longitude, 8),
-			latitude: _.round(latitude, 8),
-			height: isWGS84 ? item.execute_height : item.execute_height + startPoint.height,
+			longitude,
+			latitude,
+			height: _.round(item.execute_height,2),
 			waypoint_speed: item.waypoint_speed,
+			waypoint_poi_point: longitude1 ? { longitude: longitude1, latitude: latitude1 } : undefined,//兴趣点
 			action_modes,
 		}
 	})
@@ -42,9 +45,6 @@
 		flyRotateYaw: 0,
 		pointType: 'start',
 		waypoint_speed: auto_flight_speed,
-		heading: 0, // 椎体 heading
-		arrowHeading: 0, // 飞行器 heading
-		pitch: 0, //椎体俯仰角
 		fov: 19.5, // 这个是椎体的展示截面大小
 	}
 	list.forEach(item => {
@@ -56,7 +56,6 @@
 				item1.action_actuator_func_param.focal_length = Number(focal_length) / 24
 			}
 		})
-		item.arrowHeading = 0
 	})
 	return [pointStart, ...list]
 }
@@ -69,6 +68,7 @@
 	const waylinesXMLJSON = XMLToJSON(waylinesXML)?.['Document']
 	const templateXMLObj = camelToSnake(removeTextKey(templateXMLJSON))
 	const waylinesXMLObj = camelToSnake(removeTextKey(waylinesXMLJSON))
+
 	const {
 		mission_config: {
 			take_off_ref_point,
@@ -77,12 +77,16 @@
 		folder: {
 			payload_param: { image_format } = {},
 			placemark: {
-				polygon
+				polygon,
+				margin: buffer_distance_meters = 0
 			},
+			wayline_coordinate_sys_param:{height_mode} = {},
 			global_height, auto_flight_speed,
 			template_type: templateType
 		} = {},
 	} = templateXMLObj
+	const [latitude, longitude, height] = take_off_ref_point.split(',').map(item => _.round(item, 6))
+	let startPoint = { latitude, longitude, height: Number.isNaN(height) ? 0 : height }
 
 	const {
 		mission_config: { take_off_security_height } = {},
@@ -98,14 +102,9 @@
 		execute_height_mode = polygonPointFolder.execute_height_mode
 		pointPlacemark = polygonPointFolder.placemark
 	}
-
-	const [latitude, longitude, height] = take_off_ref_point.split(',').map(item => _.round(item, 6))
-	let startPoint = { latitude, longitude, height }
-
 	// 取出点位
 	const coordinates = polygon?.outer_boundary_is.linear_ring
 		.coordinates?.split('\n') || []
-
 	// 数组转换
 	let polygonList = coordinates.map((coordinate) =>
 		coordinate
@@ -113,9 +112,21 @@
 			.split(',')
 			.map((v) => Number(v)),
 	)
-
 	polygonList.pop()
-
+	const templatePlacemark = templateXMLObj.folder.placemark
+	// 点航线list
+	let pointList = handlePointListForKmz({
+		placemark: polygonPointFolder.placemark,
+		startPoint,
+		execute_height_mode,
+		auto_flight_speed
+	}).map((i,index)=> {
+		// 注入是否使用全局高度参数
+		return {
+			...i,
+			use_global_height: index > 0 ? templatePlacemark[index-1]?.use_global_height : 0
+		}
+	})
 	return {
 		image_format,
 		startPoint,
@@ -124,11 +135,14 @@
 		take_off_ref_point,
 		drone_enum_value,
 		drone_sub_enum_value,
-		take_off_security_height,
-		execute_height_mode,
+		take_off_security_height,//起飞安全高度
+		execute_height_mode,//执行高度模式
+		height_mode,//高度模式
+		pointList,//航点航线 点list
 		templateType,
 		pointPlacemark,
-		polygonList
+		polygonList,
+		buffer_distance_meters
 	}
 }
 
diff --git a/src/hooks/useRouteLine/useRouteLine.js b/src/hooks/useRouteLine/useRouteLine.js
index 738b9be..6e4f50e 100644
--- a/src/hooks/useRouteLine/useRouteLine.js
+++ b/src/hooks/useRouteLine/useRouteLine.js
@@ -195,6 +195,7 @@
 			},
 		})
 		// 获取最后一点高度
+		console.log(pointList, '查看数组最后一点高度')
 		store.commit('setLastHeight', Number(pointList[pointList.length - 1].height))
 		flyVisual({
 			positionsData:pointList.map(i => [Number(i.longitude), Number(i.latitude), Number(i.height)]),
diff --git a/src/views/algorithmRepository/algorithmRepository.vue b/src/views/algorithmRepository/algorithmRepository.vue
index 54e9399..d26d70d 100644
--- a/src/views/algorithmRepository/algorithmRepository.vue
+++ b/src/views/algorithmRepository/algorithmRepository.vue
@@ -55,7 +55,6 @@
             </div>
           </div>
           <div class="search-btn">
-            
             <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
             <el-button icon="el-icon-delete" @click="handleReset">清空</el-button>
             <el-button type="primary" icon="el-icon-back" @click="goback">返回</el-button>
@@ -365,7 +364,7 @@
   }
   .search {
     display: flex;
-    justify-content: space-between;
+    //justify-content: space-between;
   }
   .searchBox {
     display: flex;
@@ -381,7 +380,7 @@
     .item {
       display: flex;
       align-items: center;
-      margin-right: 49px;
+      margin-right: 40px;
     }
   }
   .search-btn {
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index 46e87d8..e9ebe1f 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -320,7 +320,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="6">
-            <el-form-item label="安全返航真高" prop="rth_altitude">
+            <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height">
               <el-input-number
                 v-model="form.rth_altitude"
                 :min="50"
@@ -490,7 +490,7 @@
               ></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="6">
             <el-form-item label="关联航线" prop="file_id">
               <el-select
                 v-model="form.file_id"
@@ -506,6 +506,16 @@
                   :value="item.wayline_id"
                 />
               </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height">
+              <el-input-number
+                :disabled="detailTitle === '工单详情'"
+                v-model="form.rth_altitude"
+                :min="50"
+                :max="300"
+              ></el-input-number>
             </el-form-item>
           </el-col>
         </el-row>
@@ -711,7 +721,7 @@
               ></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="6">
             <el-form-item label="关联航线" prop="file_id">
               <el-select v-model="form.file_id" placeholder="请选择航线" :disabled="true">
                 <el-option
@@ -721,6 +731,16 @@
                   :value="item.wayline_id"
                 />
               </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height">
+              <el-input-number
+                :disabled="true"
+                v-model="form.rth_altitude"
+                :min="50"
+                :max="300"
+              ></el-input-number>
             </el-form-item>
           </el-col>
         </el-row>
@@ -1310,11 +1330,15 @@
           const maxItem = this.device_sns.reduce((max, item) => {
             return item.drone_height > max.drone_height ? item : max;
           });
-          console.log(maxItem, '高度');
+          console.log(maxItem.drone_height, '高度');
+          console.log(this.lastHeight, '最后一点高度');
           let result = _.round((maxItem.drone_height + this.form.rth_altitude), 2);
 
+          let resultHeight = this.lastHeight - maxItem.drone_height
+          let resultH = _.round(resultHeight, 2)
+
           if (this.lastHeight > result) {
-            this.$confirm(`安全返航真高${result}米低于航线返航点高度${this.lastHeight}米,为确保返航路径安全,建议您进行调整后再发布`, '提示', {
+            this.$confirm(`当前返航高度存在安全隐患,建议调整为${resultH}米以上后进行发布`, '提示', {
               confirmButtonText: '确定',
               cancelButtonText: '取消',
               type: 'warning'
@@ -1947,6 +1971,15 @@
   justify-content: center;
 }
 
+.safe-height {
+  :deep(.el-form-item__label) {
+    width: 120px !important;
+  }
+  :deep(.el-input-number) {
+    width: 180px !important;
+  }
+}
+
 .flex {
   display: flex;
 }

--
Gitblit v1.9.3