From c00b60838d5cd71c45e5c0884adeb3c64a878d7d Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Tue, 03 Feb 2026 17:18:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 applications/drone-command/src/views/api.txt                                         |   90 ++++++++++++++++++++++-------
 applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue |   26 ++++----
 applications/drone-command/env/.env.development                                      |    4 
 applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue           |   55 ++++++++++++++++++
 4 files changed, 139 insertions(+), 36 deletions(-)

diff --git a/applications/drone-command/env/.env.development b/applications/drone-command/env/.env.development
index 783496d..67d4a44 100644
--- a/applications/drone-command/env/.env.development
+++ b/applications/drone-command/env/.env.development
@@ -2,7 +2,7 @@
  # @Author       : yuan
  # @Date         : 2026-01-31 14:34:31
  # @LastEditors  : yuan
- # @LastEditTime : 2026-02-03 14:21:15
+ # @LastEditTime : 2026-02-03 15:52:27
  # @FilePath     : \applications\drone-command\env\.env.development
  # @Description  : 
  # Copyright 2026 OBKoro1, All Rights Reserved. 
@@ -16,7 +16,7 @@
 
 #开发环境代理地址(推荐本地新建文件 .env.development.local 来进行覆盖)
 # VITE_APP_URL=https://wrj.shuixiongit.com/api
-VITE_APP_URL=http://192.168.1.33
+VITE_APP_URL=http://192.168.1.168
 
 #新大屏地址
 VITE_APP_DASHBOARD_URL='https://wrj.shuixiongit.com/command-center-dashboard/'
diff --git a/applications/drone-command/src/views/api.txt b/applications/drone-command/src/views/api.txt
index 7626b6d..ab098cd 100644
--- a/applications/drone-command/src/views/api.txt
+++ b/applications/drone-command/src/views/api.txt
@@ -3,7 +3,7 @@
 ## 列表
 
 
-**接口地址**:`/area/fwPoliceStation/list`
+**接口地址**:`/device/fwDevice/list`
 
 
 **请求方式**:`GET`
@@ -15,7 +15,7 @@
 **响应数据类型**:`*/*`
 
 
-**接口描述**:<p>获取全部派出所</p>
+**接口描述**:<p>传入isAreaSelect、areaId、areaIds(多个用,隔开获取对应区域绑定设备数据)、status</p>
 
 
 
@@ -25,7 +25,13 @@
 **请求参数**:
 
 
-暂无
+| 参数名称 | 参数说明 | 请求类型    | 是否必须 | 数据类型 | schema |
+| -------- | -------- | ----- | -------- | -------- | ------ |
+|areaId|areaId|query|false|integer(int64)||
+|areaIds|areaIds(多个用,隔开)|query|false|string||
+|isAreaSelect|isAreaSelect|query|false|integer(int32)||
+|isTrack|isTrack|query|false|integer(int32)||
+|status|status|query|false|integer(int32)||
 
 
 **响应状态**:
@@ -33,7 +39,7 @@
 
 | 状态码 | 说明 | schema |
 | -------- | -------- | ----- | 
-|200|OK|R«List«FwPoliceStationVO»»|
+|200|OK|R«List«FwDeviceVO»»|
 |401|Unauthorized||
 |403|Forbidden||
 |404|Not Found||
@@ -45,21 +51,41 @@
 | 参数名称 | 参数说明 | 类型 | schema |
 | -------- | -------- | ----- |----- | 
 |code|状态码|integer(int32)|integer(int32)|
-|data|承载数据|array|FwPoliceStationVO|
-|&emsp;&emsp;address|派出所地址|string||
-|&emsp;&emsp;areaCode|区域编码|string||
-|&emsp;&emsp;contactPerson|联系人|string||
-|&emsp;&emsp;contactPhone|联系方式|string||
+|data|承载数据|array|FwDeviceVO|
+|&emsp;&emsp;azimuth|方位角 0-360°|integer(int32)||
+|&emsp;&emsp;batteryPct|电量百分比 0-100|integer(int32)||
+|&emsp;&emsp;belongDept|所属部门id|integer(int64)||
+|&emsp;&emsp;belongDeptName|所属部门名称|string||
+|&emsp;&emsp;charger|负责人|string||
+|&emsp;&emsp;contactPhone|联系电话|string||
 |&emsp;&emsp;createDept|创建部门|integer(int64)||
 |&emsp;&emsp;createTime|创建时间|string(date-time)||
 |&emsp;&emsp;createUser|创建人|integer(int64)||
-|&emsp;&emsp;id|主键id|integer(int64)||
-|&emsp;&emsp;latitude|纬度|number(double)||
-|&emsp;&emsp;longitude|经度|number(double)||
-|&emsp;&emsp;stationName|派出所名称|string||
-|&emsp;&emsp;status|状态(0正常 1停用)|integer(int32)||
+|&emsp;&emsp;detectTargetCnt|侦测目标数量|integer(int32)||
+|&emsp;&emsp;deviceAtt|设备属性(无线电/光电/雷达)|string||
+|&emsp;&emsp;deviceModel|型号|string||
+|&emsp;&emsp;deviceName|设备名称|string||
+|&emsp;&emsp;deviceSn|设备sn|string||
+|&emsp;&emsp;deviceSpecification|规格|string||
+|&emsp;&emsp;deviceType|设备类型(察打一体/便捷侦测箱/反制枪)|string||
+|&emsp;&emsp;effectiveRangeKm|有效范围 km|number||
+|&emsp;&emsp;elevation|俯仰角 -90-+90°|integer(int32)||
+|&emsp;&emsp;id|主键|integer(int64)||
+|&emsp;&emsp;isShared|是否被共享给当前机构|boolean||
+|&emsp;&emsp;latitude|纬度|string||
+|&emsp;&emsp;longitude|经度|string||
+|&emsp;&emsp;manufacturer|生产厂商|string||
+|&emsp;&emsp;outTarget|出库去向|string||
+|&emsp;&emsp;purpose|用途|string||
+|&emsp;&emsp;remark|备注|string||
+|&emsp;&emsp;sceneName|场景名称|string||
+|&emsp;&emsp;shareId|共享记录ID|integer(int64)||
+|&emsp;&emsp;source|来源|string||
+|&emsp;&emsp;status|运行状态(0:在线/1:离线/2:故障/3:报废)|integer(int32)||
+|&emsp;&emsp;trackStatus|设备出入库状态 0未出库1已出库|integer(int32)||
 |&emsp;&emsp;updateTime|更新时间|string(date-time)||
 |&emsp;&emsp;updateUser|更新人|integer(int64)||
+|&emsp;&emsp;workMode|工作模式:1.侦测中/2.信号干扰中/3.诱导驱离中/4.待机|string||
 |msg|返回消息|string||
 |success|是否成功|boolean||
 
@@ -70,23 +96,43 @@
 	"code": 0,
 	"data": [
 		{
-			"address": "",
-			"areaCode": "",
-			"contactPerson": "",
+			"azimuth": 0,
+			"batteryPct": 0,
+			"belongDept": 0,
+			"belongDeptName": "",
+			"charger": "",
 			"contactPhone": "",
 			"createDept": 0,
 			"createTime": "",
 			"createUser": 0,
+			"detectTargetCnt": 0,
+			"deviceAtt": "",
+			"deviceModel": "",
+			"deviceName": "",
+			"deviceSn": "",
+			"deviceSpecification": "",
+			"deviceType": "",
+			"effectiveRangeKm": 0,
+			"elevation": 0,
 			"id": 0,
-			"latitude": 0,
-			"longitude": 0,
-			"stationName": "",
+			"isShared": true,
+			"latitude": "",
+			"longitude": "",
+			"manufacturer": "",
+			"outTarget": "",
+			"purpose": "",
+			"remark": "",
+			"sceneName": "",
+			"shareId": 0,
+			"source": "",
 			"status": 0,
+			"trackStatus": 0,
 			"updateTime": "",
-			"updateUser": 0
+			"updateUser": 0,
+			"workMode": ""
 		}
 	],
 	"msg": "",
 	"success": true
 }
-```
\ No newline at end of file
+```
diff --git a/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
index a7dc186..f11d973 100644
--- a/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
@@ -50,6 +50,20 @@
 							</el-table>
 						</div>
 					</div>
+					<div class="detail-title">设备列表</div>
+					<div class="command-table-container">
+						<div class="command-table-content">
+							<el-table
+								class="command-table"
+								:data="deviceList"
+								:loading="deviceLoading"
+								row-key="id"
+							>
+								<el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" />
+								<el-table-column prop="deviceType" show-overflow-tooltip label="设备类型" />
+							</el-table>
+						</div>
+					</div>
 				</div>
 
 				<el-form
@@ -128,6 +142,21 @@
 							</el-table>
 						</el-form-item>
 					</div>
+
+					<div class="detail-title">设备列表</div>
+					<div class="command-table-container">
+						<div class="command-table-content">
+							<el-table
+								class="command-table"
+								:data="deviceList"
+								:loading="deviceLoading"
+								row-key="id"
+							>
+								<el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" />
+								<el-table-column prop="deviceType" show-overflow-tooltip label="设备类型" />
+							</el-table>
+						</div>
+					</div>
 				</el-form>
 
 				<div class="footer">
@@ -160,6 +189,7 @@
 import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
 import * as Cesium from 'cesium'
 import { fwAreaDivideDetailApi, fwAreaDivideListApi } from '../partition/partitionApi'
+import { fwDeviceListApi } from '@/views/basicManage/deviceStock/fwDevice'
 import {
 	addBufferRadiusLabelEntity,
 	buildEllipsePositions,
@@ -189,6 +219,8 @@
 const searchName = ref('')
 const areaList = ref([]) // 关联区域列表
 const selectedAreaRows = ref([]) //选中列表
+const deviceList = ref([]) // 设备列表
+const deviceLoading = ref(false)
 const dictObj = inject('dictObj')
 const mapRef = ref(null)
 const route = useRoute()
@@ -242,6 +274,20 @@
 	if (areaList.value.length) return
 	const res = await fwAreaDivideListApi({ filterSelected: 1, sceneId: formData.value.id })
 	areaList.value = res?.data?.data ?? []
+}
+
+async function loadDeviceListByAreaIds(areaIdsKey) {
+	if (!areaIdsKey) {
+		deviceList.value = []
+		return
+	}
+	deviceLoading.value = true
+	try {
+		const res = await fwDeviceListApi({ areaIds: areaIdsKey })
+		deviceList.value = res?.data?.data ?? []
+	} finally {
+		deviceLoading.value = false
+	}
 }
 
 // 关联区域变更
@@ -514,6 +560,15 @@
 }
 
 watch(() => selectedAreaRows.value, renderSelectedAreas)
+const deviceAreaIdsKey = computed(() =>
+	selectedAreaRows.value.map(item => item?.id).filter(Boolean).join(',')
+)
+watch(
+	() => deviceAreaIdsKey.value,
+	val => {
+		loadDeviceListByAreaIds(val)
+	}
+)
 watch(
 	() => visible.value,
 	val => {
diff --git a/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue b/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue
index 869bdae..36a6d36 100644
--- a/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue
+++ b/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue
@@ -9,7 +9,15 @@
 	>
 		<div class="dialog-container">
 			<div class="left-container">
-				<div class="leftMap command-cesium" id="leftMapContainer"></div>
+				<CommonCesiumMap
+					ref="mapRef"
+					class="leftMap command-cesium"
+					:active="visible"
+					:flat-mode="false"
+					:terrain="true"
+					:layer-mode="4"
+					:boundary="false"
+				/>
 			</div>
 			<div class="right-container">
 				<div class="header">
@@ -67,11 +75,10 @@
 import { Close } from '@element-plus/icons-vue'
 
 import { computed, nextTick, ref } from 'vue'
+import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
 import { fwDroneFlightRecordDetailApi } from '@/views/recordManage/historyTracks/fwDroneFlightRecord'
 import { fwDroneFlightRecordDetailPageApi } from '@/views/recordManage/historyTracks/flyTrajectory'
-import { PublicCesium } from '@/utils/cesium/publicCesium'
 import * as Cesium from 'cesium'
-import { flyVisual } from '@ztzf/utils'
 import { ArrowLineMaterialProperty } from '@/utils/cesium/Material'
 import droneIcon from '@/assets/images/dataCockpit/map/drone.png'
 
@@ -83,11 +90,11 @@
 	stayDuration: '',
 })
 let list = ref([])
-const emit = defineEmits(['success'])
 const formData = ref(initForm()) // 表单数据
 const visible = ref(false) // 弹框显隐
 const dialogMode = ref('add') // 弹框模式
 const dialogReadonly = computed(() => dialogMode.value === 'view')
+const mapRef = ref(null)
 const dialogTitle = computed(() => {
 	if (dialogMode.value === 'edit') {
 		return '编辑'
@@ -170,14 +177,9 @@
 let viewer, geometricSource, droneLineEntity, startDroneEntity
 function initMap() {
 	if (viewer) return
-	const publicCesiumInstance = new PublicCesium({
-		dom: 'leftMapContainer',
-		flatMode: false,
-		terrain: true,
-		layerMode: 4,
-		boundary: false,
-	})
-	viewer = publicCesiumInstance.getViewer()
+	const map = mapRef.value?.getMap?.()
+	if (!map?.viewer) return
+	viewer = map.viewer
 	geometricSource = new Cesium.CustomDataSource('geometricSource')
 	viewer.dataSources.add(geometricSource)
 }

--
Gitblit v1.9.3