From 6a475521b957b2c3a68ee950704f8f1948bd6cf9 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期四, 09 一月 2025 18:28:59 +0800
Subject: [PATCH] 最新值查询修改

---
 src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue |  170 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 137 insertions(+), 33 deletions(-)

diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue
index 45f49ea..c97f4cd 100644
--- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue
+++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue
@@ -1,31 +1,54 @@
 <template>
 	<div class="h-[60vh] relative">
-		<div ref="containerRef" class="h-full"></div>
-		<!-- <div v-if="bottomBarIsShow" class="absolute w-full bottom-0 bg-white border-gray-300 border border-solid">
-			<div
-				class="w-28 h-5 absolute left-1/2 -translate-x-1/2 -translate-y-[100%] cursor-pointer bg-[#4974f3] rounded-t-lg flex-center"
-				@click="toggleShowChart"
-			>
-				<div
-					class="ywifont -rotate-90 text-white !text-[13px]"
-					:class="{ 'ywicon-zuoyoujiantou': chartIsShow, 'ywicon-zuoyoujiantou1': !chartIsShow }"
-				></div>
-			</div>
-		</div> -->
+		<!-- 鍘熷鍦板浘瀹瑰櫒 -->
+		<div v-show="!isFullscreen" ref="containerRef" class="h-full"></div>
+
+		<!-- 鍏ㄥ睆鎸夐挳 -->
+		<div class="absolute right-2 top-2 cursor-pointer" @click="toggleFullScreen">
+			<el-tooltip content="鍏ㄥ睆灞曞紑" placement="top">
+				<div class="ywifont text-[20px] text-black rounded-lg ywicon-fullscreen"></div>
+			</el-tooltip>
+		</div>
+
+		<!-- Teleport 鍏ㄥ睆鍦板浘 -->
+		<Teleport to=".layout-parent">
+			<Transition name="fullscreen">
+				<div v-if="isFullscreen" class="absolute inset-0 z-50 w-full h-full">
+					<div ref="fullscreenContainerRef" class="w-full h-full"></div>
+					<div class="absolute right-2 top-2 cursor-pointer" @click="toggleFullScreen">
+						<el-tooltip content="閫�鍑哄叏灞忥紙Esc锛�" placement="top">
+							<div class="ywifont text-[20px] text-black rounded-lg ywicon-tuichuquanping"></div>
+						</el-tooltip>
+					</div>
+					<div class="absolute bottom-0 w-full">
+						<EquipCurve
+							v-model:isShow="chartDlgIsShow"
+							class="opacity-90"
+							:data="equipCurveMapRow"
+							:quotaChartCol="data?.quota_chart?.col"
+							height="15rem"
+							:tableHeight="240"
+						/>
+					</div>
+				</div>
+			</Transition>
+		</Teleport>
 	</div>
 </template>
 
 <script setup lang="ts">
-import { onMounted, ref } from 'vue';
+import { onMounted, ref, nextTick, onDeactivated, onUnmounted } from 'vue';
 
 import equipPic from './img/equip.svg';
 import equipSelectPic from './img/equip-select.svg';
 
 import type { GaoDePosition, LabelMarkerData } from '/@/model/map/GaoDeMap';
 import { GaoDeMap } from '/@/model/map/GaoDeMap';
-
+import EquipCurve from '../components/EquipCurve.vue';
 let gaoDeMap = new GaoDeMap();
 const containerRef = ref<HTMLDivElement>(null);
+const fullscreenContainerRef = ref<HTMLDivElement>(null);
+const isFullscreen = ref(false);
 const props = defineProps(['data']);
 
 const emit = defineEmits(['equipClick', 'closeInfoWindow']);
@@ -100,7 +123,11 @@
 				curMarkerLabel = label;
 				infoWindow.open(gaoDeMap.map, label.getPosition() as any);
 				const extData = label.getExtData();
-				emit('equipClick', extData);
+				if (isFullscreen.value) {
+					showCurve(extData);
+				} else {
+					emit('equipClick', extData);
+				}
 				label.setRank(999);
 
 				updateInfoWindow(extData);
@@ -126,32 +153,23 @@
 	});
 	curMarkerLabel?.setRank(1);
 };
-onMounted(async () => {
-	await gaoDeMap.init({
-		container: containerRef.value,
-		aMapOption: {
-			resizeEnable: true,
-		},
-	});
-	// const southWest: GaoDePosition = [props.data.minx, props.data.miny];
-	// const northEast: GaoDePosition = [props.data.maxx, props.data.maxy];
-	// gaoDeMap.zoomToRect(southWest, northEast);
-	gaoDeMap.applyBasicPlugins();
 
-	addMarkerLayer();
-	gaoDeMap.map.setFitView();
-
+// 鍒濆鍖栦俊鎭獥鍙�
+const initInfoWindow = () => {
 	infoWindow = new AMap.InfoWindow({
 		content: createInfoWindow(),
-		// offset: [3, -34],
 		anchor: 'top-left',
 		closeWhenClickMap: true,
 	});
-	(infoWindow as any).on('close', (...a) => {
+
+	(infoWindow as any).on('close', () => {
 		restoreLabel();
 		curMarkerLabel = null;
-
-		emit('closeInfoWindow');
+		if (isFullscreen.value) {
+			closeChartDlg();
+		} else {
+			emit('closeInfoWindow');
+		}
 	});
 
 	// 鑷甫鍏抽棴鍘绘帀锛岃嚜甯﹀叧闂洃鍚� close 浼氬娆¤Е鍙� close 浜嬩欢
@@ -161,10 +179,96 @@
 	myCloseBtn.addEventListener('click', () => {
 		infoWindow.close();
 	});
+};
+
+// 鍒囨崲鍏ㄥ睆
+const toggleFullScreen = async () => {
+	isFullscreen.value = !isFullscreen.value;
+
+	// 绛夊緟 DOM 鏇存柊瀹屾垚
+	await nextTick();
+	// 閲嶆柊鍒濆鍖栧湴鍥�
+	if (isFullscreen.value) {
+		await initMap(fullscreenContainerRef.value);
+	} else {
+		// await initMap(containerRef.value);
+	}
+};
+
+// 鍒濆鍖栧湴鍥�
+const initMap = async (container: HTMLDivElement) => {
+	// 閿�姣佹棫瀹炰緥
+	// gaoDeMap.map?.destroy();
+	gaoDeMap = new GaoDeMap();
+
+	// 鍒濆鍖栨柊瀹炰緥
+	await gaoDeMap.init({
+		container,
+		aMapOption: {
+			resizeEnable: true,
+		},
+	});
+
+	gaoDeMap.applyBasicPlugins();
+	addMarkerLayer();
+	gaoDeMap.map.setFitView();
+
+	// 鍒濆鍖栦俊鎭獥鍙�
+	initInfoWindow();
+};
+//#region ====================== 璁惧鏇茬嚎 ======================
+const chartDlgIsShow = ref(false);
+const equipCurveMapRow = ref(null);
+const showCurve = (row) => {
+	equipCurveMapRow.value = row;
+	chartDlgIsShow.value = true;
+};
+
+const closeChartDlg = () => {
+	chartDlgIsShow.value = false;
+	equipCurveMapRow.value = null;
+};
+//#endregion
+
+// 娣诲姞 ESC 閿洃鍚嚱鏁�
+const handleEscKey = (event: KeyboardEvent) => {
+	if (event.key === 'Escape' && isFullscreen.value) {
+		toggleFullScreen();
+	}
+};
+
+onMounted(async () => {
+	await initMap(containerRef.value);
+	// 娣诲姞 ESC 閿洃鍚�
+	document.addEventListener('keydown', handleEscKey);
+});
+
+onDeactivated(async () => {
+	if (isFullscreen.value) {
+		await toggleFullScreen();
+	}
+});
+
+// 鍦ㄧ粍浠跺嵏杞芥椂绉婚櫎鐩戝惉
+onUnmounted(() => {
+	// 绉婚櫎 ESC 閿洃鍚�
+	document.removeEventListener('keydown', handleEscKey);
 });
 </script>
 <style scoped lang="scss">
 :deep(.amap-info-content) {
 	padding: 0;
 }
+
+// 鍏ㄥ睆杩囨浮鍔ㄧ敾
+.fullscreen-enter-active,
+.fullscreen-leave-active {
+	transition: all 0.3s ease;
+}
+
+.fullscreen-enter-from,
+.fullscreen-leave-to {
+	opacity: 0;
+	transform: scale(0.95);
+}
 </style>

--
Gitblit v1.9.3