From 22872822d964e4eb611ebab43ff6a78818c475be Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Wed, 04 Feb 2026 17:23:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue |    2 
 applications/task-work-order/src/views/orderView/flyingHand/index.vue            |   16 ++++-
 uniapps/work-wx/src/pages/login/index.vue                                        |    4 
 applications/drone-command/src/components/map-container/device-map-container.vue |  116 +++++++++++++++++++++++---------------
 applications/task-work-order/src/api/zkxt/index.js                               |    8 ++
 applications/drone-command/src/utils/cesium/publicCesium.js                      |   27 +++++++-
 uniapps/work-wx/src/static/fonts/PANGMENZHENGDAOBIAOTITIMIANFEIBAN-2.TTF         |    0 
 7 files changed, 116 insertions(+), 57 deletions(-)

diff --git a/applications/drone-command/src/components/map-container/device-map-container.vue b/applications/drone-command/src/components/map-container/device-map-container.vue
index 7d6383c..2c0181c 100644
--- a/applications/drone-command/src/components/map-container/device-map-container.vue
+++ b/applications/drone-command/src/components/map-container/device-map-container.vue
@@ -525,38 +525,43 @@
 	const basePoints = [
 		[
 			{
-				longitude: 114.963191,
-				latitude: 27.136716,
-				height: 120
+				longitude: 114.964975,
+				latitude: 27.134855,
+				height: 200
 			},
 			{
-				longitude: 114.957308,
-				latitude: 27.138452,
-				height: 120
+				longitude: 114.963966,
+				latitude: 27.132836,
+				height: 200
 			},
 			{
-				longitude: 114.952,
-				latitude: 27.136317,
-				height: 120
+				longitude: 114.963966,
+				latitude: 27.132836,
+				height: 320
 			},
 			{
-				longitude: 114.949293,
-				latitude: 27.133864,
-				height: 120
+				longitude: 114.963974,
+				latitude:  27.132677,
+				height: 320
 			},
 			{
-				longitude: 114.944666,
-				latitude: 27.130526,
-				height: 120
+				longitude: 114.963432,
+				latitude: 27.131665,
+				height: 320
 			},
 			{
-				longitude: 114.945909,
-				latitude: 27.127845,
-				height: 120
+				longitude: 114.962865,
+				latitude: 27.130377,
+				height: 320
 			},
 			{
-				longitude: 114.962974,
-				latitude: 27.136242,
+				longitude: 114.965318,
+				latitude: 27.129925,
+				height: 320
+			},
+			{
+				longitude: 114.960144,
+				latitude: 27.134902,
 				height: 120
 			},
 		],
@@ -578,24 +583,29 @@
 				height: 120
 			},
 			{
+				longitude: 114.925958,
+				latitude: 27.096963,
+				height: 400
+			},
+			{
 				longitude: 114.925836, 
 				latitude: 27.096102,
-				height: 120
+				height: 400
 			},
 			{
 				longitude: 114.928384, 
 				latitude: 27.095866,
-				height: 120
+				height: 400
 			},
 			{
 				longitude: 114.929874, 
 				latitude: 27.096095,
-				height: 120
+				height: 400
 			},
 			{
 				longitude: 114.931048, 
 				latitude: 27.097666,
-				height: 120
+				height: 400
 			},
 		]
 	]
@@ -667,7 +677,9 @@
 
 const setupDroneTrackClock = () => {
 	if (!viewer) return
-	const startTime = Cesium.JulianDate.now()
+	const now = new Date()
+	const noon = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 12, 0, 0, 0)
+	const startTime = Cesium.JulianDate.fromDate(noon)
 	const stopTime = Cesium.JulianDate.addSeconds(startTime, DRONE_TRACK_DURATION_S, new Cesium.JulianDate())
 	viewer.clock.startTime = startTime
 	viewer.clock.stopTime = stopTime
@@ -892,32 +904,26 @@
 		const entityId = `online-device-${item.id ?? index}-${index}`
 		const rangeMeters = getDeviceRange(item)
 		devicePositions.push({ lng: position.longitude, lat: position.latitude })
-		const billboard = deviceBillboardCollection.add({
-			position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0),
-			image: isOnline ? equipmentIcon : offlineEquipmentIcon,
-			width: 40,
-			height: 56,
-			verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
-		})
-		billboard.id = entityId
-		devicePickMap.set(entityId, { data: item, billboard })
-		deviceEntries.push({ position, rangeMeters, billboard, isOnline })
+		deviceEntries.push({ position, rangeMeters, isOnline, entityId, data: item })
 	})
-	if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) {
-		closePopup()
-	}
 	if (deviceEntries.length) {
 		const heights = await getPointPositionsHeight(devicePositions, viewer)
 		deviceEntries.forEach((entry, index) => {
 			const height = Number(heights?.[index]?.ASL)
 			const centerHeight = Number.isFinite(height) ? height : 0
-			if (entry.billboard) {
-				entry.billboard.position = Cesium.Cartesian3.fromDegrees(
+			const billboard = deviceBillboardCollection.add({
+				position: Cesium.Cartesian3.fromDegrees(
 					entry.position.longitude,
 					entry.position.latitude,
 					centerHeight
-				)
-			}
+				),
+				image: entry.isOnline ? equipmentIcon : offlineEquipmentIcon,
+				width: 40,
+				height: 56,
+				verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+			})
+			billboard.id = entry.entityId
+			devicePickMap.set(entry.entityId, { data: entry.data, billboard })
 			if (!entry.isOnline) return
 			if (!Number.isFinite(entry.rangeMeters) || entry.rangeMeters <= 0) return
 			const primitive = createDeviceRangePrimitiveWithHeight(entry.position, entry.rangeMeters, centerHeight)
@@ -926,6 +932,9 @@
 			addCockpitPrimitive(primitive)
 			deviceRingFillPrimitives.push(primitive)
 		})
+	}
+	if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) {
+		closePopup()
 	}
 	reorderCockpitPrimitives()
 }
@@ -1273,22 +1282,37 @@
 const handleDroneSignal = () => emit('droneSignal', selectedDevice.value)
 const handleDroneCounter = () => emit('droneCounter', selectedDevice.value)
 
-const renderCommandPosts = list => {
+const renderCommandPosts = async list => {
 	if (!viewer) return
 	ensureCommandPostCollection()
 	commandPostBillboardCollection.removeAll()
 	commandPostBillboardCollection.show = detailVisible.value
+	const entries = []
+	const positions = []
 		; (list || []).forEach((item, index) => {
 			const position = getDevicePosition(item)
 			if (!position) return
+			entries.push({ position, index })
+			positions.push({ lng: position.longitude, lat: position.latitude })
+		})
+	if (positions.length) {
+		const heights = await getPointPositionsHeight(positions, viewer)
+		entries.forEach((entry, idx) => {
+			const height = Number(heights?.[idx]?.ASL)
+			const centerHeight = Number.isFinite(height) ? height : 0
 			commandPostBillboardCollection.add({
-				position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0),
+				position: Cesium.Cartesian3.fromDegrees(
+					entry.position.longitude,
+					entry.position.latitude,
+					centerHeight
+				),
 				image: commandPostIcon,
 				width: 40,
 				height: 56,
 				verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
 			})
 		})
+	}
 	reorderCockpitPrimitives()
 }
 
@@ -1308,9 +1332,9 @@
 		const res = await newDefenseSceneManageList({
 			time: dayjs().format('YYYY-MM-DD HH:mm:ss')
 		})
-		renderCommandPosts(res?.data?.data ?? [])
+		await renderCommandPosts(res?.data?.data ?? [])
 	} catch (error) {
-		renderCommandPosts([])
+		await renderCommandPosts([])
 	}
 }
 
diff --git a/applications/drone-command/src/utils/cesium/publicCesium.js b/applications/drone-command/src/utils/cesium/publicCesium.js
index 234d0e5..de0c994 100644
--- a/applications/drone-command/src/utils/cesium/publicCesium.js
+++ b/applications/drone-command/src/utils/cesium/publicCesium.js
@@ -166,11 +166,7 @@
 		this.viewer.shadows = false
 		this.viewer.shadowMap.darkness = 0.5
 
-		let time = new Date()
-		time.setHours(12, 0, 0, 0)
-		let utc = Cesium.JulianDate.fromDate(new Date(time))
-
-		this.viewer.clockViewModel.currentTime = Cesium.JulianDate.addHours(utc, 0, new Cesium.JulianDate())
+		this.setFixedNoonLighting()
 
 		// 边界,机巢
 		this.boundary = useBoundary(this.viewer, { multiple, dockOptions, boundaryChange, boundaryColor, dockRangeType, useDockHeight })
@@ -904,4 +900,25 @@
 			this.viewer?.imageryLayers.remove(imageryLayers)
 		}
 	}
+
+	setFixedNoonLighting (utcOffsetHours = 8) {
+		if (!this.viewer) return
+		const now = new Date()
+		const utcNoon = Date.UTC(
+			now.getUTCFullYear(),
+			now.getUTCMonth(),
+			now.getUTCDate(),
+			12 - Number(utcOffsetHours || 0),
+			0,
+			0,
+			0
+		)
+		const julian = Cesium.JulianDate.fromDate(new Date(utcNoon))
+		this.viewer.clock.currentTime = julian
+		this.viewer.clockViewModel.currentTime = julian
+		this.viewer.clock.shouldAnimate = false
+		this.viewer.clock.multiplier = 0
+		this.viewer.clockViewModel.multiplier = 0
+		this.viewer.scene.requestRender()
+	}
 }
diff --git a/applications/task-work-order/src/api/zkxt/index.js b/applications/task-work-order/src/api/zkxt/index.js
index d294389..d776f99 100644
--- a/applications/task-work-order/src/api/zkxt/index.js
+++ b/applications/task-work-order/src/api/zkxt/index.js
@@ -28,6 +28,14 @@
 	})
 }
 
+// 获取飞手详情
+export const deviceFlyerDetailApi = (id) => {
+	return request({
+		url: `/webservice/webservice/deviceFlyer/queryById/${id}`,
+		method: 'get',
+	})
+}
+
 // 获取航线列表
 export const airlineListApi = (data) => {
 	return request({
diff --git a/applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue b/applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue
index 436cf6d..368fae3 100644
--- a/applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue
+++ b/applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue
@@ -269,7 +269,7 @@
 		{ required: true, message: '请输入', trigger: 'blur' }
 	],
 	flyerPhone: [
-		{ required: false, message: '请输入', trigger: 'blur' },
+		{ required: true, message: '请输入', trigger: 'blur' },
 		{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
 	],
 	flightHours: [
diff --git a/applications/task-work-order/src/views/orderView/flyingHand/index.vue b/applications/task-work-order/src/views/orderView/flyingHand/index.vue
index 78b1892..0890b43 100644
--- a/applications/task-work-order/src/views/orderView/flyingHand/index.vue
+++ b/applications/task-work-order/src/views/orderView/flyingHand/index.vue
@@ -113,7 +113,7 @@
 import { getDictionaryByCode } from '@/api/system/dictbiz'
 import { getDictLabel } from '@ztzf/utils'
 import { getFlyingHandPage, removeFlyingHand } from './flyingHandApi'
-import { deviceFlyerApi } from '@/api/zkxt'
+import { deviceFlyerApi,deviceFlyerDetailApi } from '@/api/zkxt'
 import FlyingHandDialog from './FlyingHandDialog.vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { prod } from 'mathjs'
@@ -178,8 +178,18 @@
 // 查看飞手
 function viewFlyingHand(row) {
 	dialogType.value = 'view'
-	flyingHandData.value = { ...row }
-	dialogVisible.value = true
+	if (row.flyerId) {
+		deviceFlyerDetailApi(row.flyerId).then(res => {
+			flyingHandData.value = { ...row }
+			flyingHandData.value.licenseFrontFileUrl = res.data.data.licenseFrontFileUrl
+			flyingHandData.value.licenseBackFileUrl = res.data.data.licenseBackFileUrl
+			flyingHandData.value.certification = [res.data.data.licenseFrontFileUrl, res.data.data.licenseBackFileUrl]
+			dialogVisible.value = true
+		})
+	} else {
+		flyingHandData.value = { ...row }
+		dialogVisible.value = true
+	}
 }
 
 // 编辑飞手
diff --git a/uniapps/work-wx/src/pages/login/index.vue b/uniapps/work-wx/src/pages/login/index.vue
index 25e0ab8..edb0ccb 100644
--- a/uniapps/work-wx/src/pages/login/index.vue
+++ b/uniapps/work-wx/src/pages/login/index.vue
@@ -159,7 +159,6 @@
 // 从本地存储加载记住的密码
 onMounted(() => {
   const savedUserInfo = uni.getStorageSync("rememberedUser");
-  console.log("记住密码", savedUserInfo);
   if (savedUserInfo) {
     loginForm.value.username = savedUserInfo.username;
     loginForm.value.password = savedUserInfo.password;
@@ -206,7 +205,8 @@
   }
 
   .title {
-    font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
+    // font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
+    font-family: "PangMen";
     font-weight: 400;
     font-size: 52rpx;
     line-height: 82rpx;
diff --git a/uniapps/work-wx/src/static/fonts/PANGMENZHENGDAOBIAOTITIMIANFEIBAN-2.TTF b/uniapps/work-wx/src/static/fonts/PANGMENZHENGDAOBIAOTITIMIANFEIBAN-2.TTF
new file mode 100644
index 0000000..cd65b62
--- /dev/null
+++ b/uniapps/work-wx/src/static/fonts/PANGMENZHENGDAOBIAOTITIMIANFEIBAN-2.TTF
Binary files differ

--
Gitblit v1.9.3