From b0daa0c145ff5455de8aacf5a892e84b6d88b462 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Sat, 07 Feb 2026 16:49:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue |   67 +++++++++++++++++----------------
 1 files changed, 34 insertions(+), 33 deletions(-)

diff --git a/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
index 0d7cb25..de30c67 100644
--- a/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
@@ -97,7 +97,7 @@
 					<div class="detail-title">绘制区域列表</div>
 					<div class="command-table-container">
 						<div class="command-table-content">
-							<el-table class="command-table" :data="shapeList" row-key="id">
+							<el-table class="command-table" :data="shapeList" row-key="id"  height="240">
 								<el-table-column prop="areaType" label="区域类型">
 									<template v-slot="{ row }">
 										{{ resolveShapeAreaTypeLabel(row) }}
@@ -116,7 +116,7 @@
 					<div class="command-table-container">
 						<div class="command-table-content">
 							<el-table class="command-table" ref="deviceTableRef" :data="deviceOptions" row-key="id"
-								@row-click="handleDeviceRowClick">
+								@row-click="handleDeviceRowClick"  height="240">
 								<el-table-column prop="deviceName" label="设备名称" />
 								<el-table-column prop="deviceType" label="类型">
 									<template v-slot="{ row }">
@@ -169,7 +169,7 @@
 
 					<div class="shape-table-container">
 						<div class="shape-table-title">绘制区域列表</div>
-						<el-table class="command-table" :data="shapeList" row-key="id" height="auto">
+						<el-table class="command-table" :data="shapeList" row-key="id" height="240">
 							<el-table-column prop="areaType" label="区域类型">
 								<template v-slot="{ row }">
 									{{ resolveShapeAreaTypeLabel(row) }}
@@ -201,7 +201,7 @@
 						<el-form-item prop="deviceIds" label-width="0">
 							<el-table class="command-table" ref="deviceTableRef"
 								:data="deviceOptions.filter(item => item.deviceName.includes(searchName))" row-key="id"
-								@selection-change="handleDeviceSelectionChange" @row-click="handleDeviceRowClick">
+								@selection-change="handleDeviceSelectionChange" @row-click="handleDeviceRowClick"  height="240">
 								<el-table-column type="selection" width="55" :reserve-selection="true" />
 								<el-table-column prop="deviceName" label="设备名称" />
 								<el-table-column prop="deviceType" label="类型">
@@ -323,6 +323,7 @@
 let deviceRangeRenderToken = 0
 let deviceListTimer = null
 let deviceListRequestToken = 0
+let deviceMapRequestToken = 0
 
 const rules = {
 	areaName: fieldRules(true, 50),
@@ -519,8 +520,6 @@
 	deviceOptions.value = []
 	selectedDeviceRows.value = []
 	formData.value.deviceIds = ''
-	clearDeviceRangePrimitives()
-	clearDeviceIconEntities()
 	if (deviceTableRef.value) {
 		deviceTableRef.value.clearSelection()
 	}
@@ -661,20 +660,6 @@
 		if (wkt) polygons.push(wkt)
 	})
 	return polygons
-}
-
-async function renderDeviceRangeSingle (device) {
-	if (!viewer) return
-	clearDeviceRangePrimitives()
-	clearDeviceIconEntities()
-	const position = getDeviceLngLat(device)
-	if (!position) return
-	addDeviceIconEntity(device, position)
-	const rangeMeters = normalizeDeviceRange(device.effectiveRangeKm)
-	const primitive = await createDeviceRangePrimitive(viewer, position, rangeMeters)
-	if (!primitive) return
-	deviceRangePrimitiveMap.set(String(device?.id ?? Date.now()), primitive)
-	viewer.scene.primitives.add(primitive)
 }
 
 async function renderDeviceRanges (rows) {
@@ -1384,9 +1369,29 @@
 	suppressDeviceFly.value = true
 	syncDeviceSelection()
 	suppressDeviceFly.value = prevSuppressDeviceFly
-	if (!readonly.value) {
-		renderDeviceRanges(selectedDeviceRows.value)
+	if (readonly.value) {
+		await renderDeviceRanges(deviceOptions.value)
 	}
+}
+
+// 设备上图(新增/编辑用)
+async function getDeviceListForMapDisplay () {
+	if (!visible.value || !viewer) return
+	deviceMapRequestToken += 1
+	const requestToken = deviceMapRequestToken
+	const res = await fwDeviceListByPolygonsApi({
+		areaId: dialogMode.value === 'add' ? '' : formData.value.id,
+		isAreaSelect: 1,
+		isTrack: 1,
+	})
+	if (requestToken !== deviceMapRequestToken) return
+	const list = res?.data?.data ?? []
+	if (!list.length) {
+		clearDeviceRangePrimitives()
+		clearDeviceIconEntities()
+		return
+	}
+	await renderDeviceRanges(list)
 }
 
 // 关联设备变更
@@ -1394,7 +1399,6 @@
 	selectedDeviceRows.value = rows
 	const ids = rows.map(item => item.id)
 	formData.value.deviceIds = ids.join(',')
-	renderDeviceRanges(rows)
 	if (suppressDeviceFly.value) {
 		lastSelectedDeviceIds = [...ids]
 		return
@@ -1409,12 +1413,13 @@
 
 function handleDeviceRowClick (row) {
 	if (readonly.value) {
-		renderDeviceRangeSingle(row)
 		void flyToDevice(row)
 		return
 	}
-	renderDeviceRanges(selectedDeviceRows.value)
-	void flyToDevice(row)
+	const isSelected = selectedDeviceRows.value.some(item => String(item?.id) === String(row?.id))
+	if (isSelected) {
+		void flyToDevice(row)
+	}
 }
 
 // 同步选择状态
@@ -1429,10 +1434,6 @@
 	})
 	selectedDeviceRows.value = rows
 	formData.value.deviceIds = rows.map(item => item.id).join(',')
-	if (readonly.value) {
-		renderDeviceRanges(selectedDeviceRows.value)
-		return
-	}
 	if (!deviceTableRef.value) return
 	deviceTableRef.value.clearSelection()
 	rows.forEach(row => {
@@ -1499,11 +1500,11 @@
 	lastSelectedDeviceIds = selectedDeviceRows.value.map(row => row.id)
 	await nextTick()
 	suppressDeviceFly.value = false
-	if (!readonly.value) {
-		renderDeviceRanges(selectedDeviceRows.value)
-	}
 	isDialogInitializing.value = false
 	queueDeviceListRefresh()
+	if (dialogMode.value === 'add' || dialogMode.value === 'edit') {
+		void getDeviceListForMapDisplay()
+	}
 	void getPoliceStationList()
 }
 

--
Gitblit v1.9.3