From 4dcb11dddbae2d466255e153c2638c2dd2030f61 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Fri, 27 Feb 2026 11:03:42 +0800
Subject: [PATCH] feat:工单添加位置

---
 applications/mobile-web-view/src/appComponents/workMap/index.vue |   75 +++++++++++++++++++++++++++++--------
 1 files changed, 58 insertions(+), 17 deletions(-)

diff --git a/applications/mobile-web-view/src/appComponents/workMap/index.vue b/applications/mobile-web-view/src/appComponents/workMap/index.vue
index 5df7896..fe67dc4 100644
--- a/applications/mobile-web-view/src/appComponents/workMap/index.vue
+++ b/applications/mobile-web-view/src/appComponents/workMap/index.vue
@@ -103,9 +103,9 @@
 let locationFlag = false
 let watchId = null
 let userLocationMarker = null
-const setMapLocation = () => {
-	locationFlag = true
 
+// 初始化实时位置监听
+const initLocationWatch = () => {
 	// 在WebView加载的网页中
 	// 检查浏览器是否支持 geolocation
 	if (navigator.geolocation) {
@@ -121,11 +121,10 @@
 				const lat = position.coords.latitude // 纬度
 				const lng = position.coords.longitude // 经度
 
+				// 确保位置标记存在并更新位置
 				if (userLocationMarker) {
 					userLocationMarker.setLatLng([lat, lng])
-				}
-
-				if (locationFlag) {
+				} else {
 					userLocationMarker = L.marker([lat, lng], {
 						icon: L.icon({
 							iconUrl: userLocationIcon, // 图片路径
@@ -133,7 +132,10 @@
 							iconAnchor: [12, 12], // 锚点位置
 						}),
 					}).addTo(map)
+				}
 
+				// 如果是点击定位按钮触发的,将地图视图定位到当前位置
+				if (locationFlag) {
 					mapSetView({
 						lat,
 						lng,
@@ -154,20 +156,25 @@
 			}
 		)
 	} else {
-		console.log('Geolocation is not supported by this browser.')
+		console.log('该浏览器不支持地理定位功能。')
 	}
 
-	// 获取定位信息
-	// uni.getLocation({
-	// 	type: 'wgs84', // 返回的经纬度是 WGS84 坐标系(适合地图定位)
-	// 	isHighAccuracy: true,
-	// 	success: function (res) {
-	// 		location.value = res
-	// 	},
-	// 	fail: function (err) {
-	// 		console.log('定位失败:', err)
-	// 	},
-	// })
+const setMapLocation = () => {
+	locationFlag = true
+	// 如果还没有开始监听位置,先初始化监听
+	if (!watchId) {
+		initLocationWatch()
+	} else {
+		// 已经在监听位置,会自动定位到当前位置
+		// 可以添加一个视觉反馈,比如位置标记闪烁效果
+		if (userLocationMarker) {
+			// 添加闪烁效果
+			userLocationMarker.getElement().classList.add('location-blink')
+			setTimeout(() => {
+				userLocationMarker.getElement().classList.remove('location-blink')
+			}, 1000)
+		}
+	}
 }
 
 let lastLocationMarker = null
@@ -312,10 +319,24 @@
 	initMap()
 	map.addLayer(layers[0].map)
 
+	// 初始化实时位置监听
+	initLocationWatch()
+
 	EventBus.on('mapSetView', mapSetView)
 })
 
 onUnmounted(() => {
+	// 清理位置监听
+	if (watchId) {
+		navigator.geolocation.clearWatch(watchId)
+		watchId = null
+	}
+	// 移除位置标记
+	if (userLocationMarker) {
+		map.removeLayer(userLocationMarker)
+		userLocationMarker = null
+	}
+	
 	EventBus.off('mapSetView', mapSetView)
 	if (map) {
 		map.remove()
@@ -362,4 +383,24 @@
 		bottom: 76px;
 	}
 }
+
+// 位置标记闪烁效果
+.location-blink {
+	animation: blink 1s ease-in-out;
+}
+
+@keyframes blink {
+	0% {
+		transform: scale(1);
+		opacity: 1;
+	}
+	50% {
+		transform: scale(1.2);
+		opacity: 0.8;
+	}
+	100% {
+		transform: scale(1);
+		opacity: 1;
+	}
+}
 </style>

--
Gitblit v1.9.3