From 9d389dee9dfb78bf4a57ff41ba11d61c65134442 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: Fri, 19 Dec 2025 14:13:42 +0800
Subject: [PATCH] 地图修改

---
 src/views/basicDataManage/areaManage/component/areaDialog.vue |    2 
 src/views/basicDataManage/areaManage/index.vue                |    2 
 src/views/bigScreen/components/mapNew.vue                     |  331 +++++++++++++++++++++++++++++++++++++++++++++++
 index.html                                                    |   16 +-
 package.json                                                  |    2 
 src/views/bigScreen/components/screen.vue                     |    6 
 src/types/areaManage.d.ts                                     |    2 
 src/views/bigScreen/components/map.vue                        |    6 
 8 files changed, 349 insertions(+), 18 deletions(-)

diff --git a/index.html b/index.html
index 37baf26..5d5aa1a 100644
--- a/index.html
+++ b/index.html
@@ -17,15 +17,15 @@
 	<body>
 		<div id="app"></div>
 		<script type="text/javascript">
-			var _hmt = _hmt || [];
-			(function () {
-				var hm = document.createElement('script');
-				hm.src = 'https://hm.baidu.com/hm.js?d9c8b87d10717013641458b300c552e4';
-				var s = document.getElementsByTagName('script')[0];
-				s.parentNode.insertBefore(hm, s);
-			})();
+			// var _hmt = _hmt || [];
+			// (function () {
+			// 	var hm = document.createElement('script');
+			// 	hm.src = 'https://hm.baidu.com/hm.js?d9c8b87d10717013641458b300c552e4';
+			// 	var s = document.getElementsByTagName('script')[0];
+			// 	s.parentNode.insertBefore(hm, s);
+			// })();
 		</script>
 		<script type="module" src="/src/main.ts"></script>
-        <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=Z4tYehNEVsdeMw3Mjspdn77pV50ffc8t"></script>
+<!--        <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=Z4tYehNEVsdeMw3Mjspdn77pV50ffc8t"></script>-->
 	</body>
 </html>
diff --git a/package.json b/package.json
index d7cdde8..86e635c 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
     "sortablejs": "^1.15.0",
     "splitpanes": "^3.1.1",
     "vue": "^3.2.36",
-    "vue-baidu-map-3x": "^1.0.35",
+
     "vue-clipboard3": "^2.0.0",
     "vue-grid-layout": "^3.0.0-beta1",
     "vue-i18n": "^9.1.10",
diff --git a/src/types/areaManage.d.ts b/src/types/areaManage.d.ts
index f4067b1..c4e8e8d 100644
--- a/src/types/areaManage.d.ts
+++ b/src/types/areaManage.d.ts
@@ -44,4 +44,4 @@
         lat: string;
     };
     lngFormRules:{},
-}
\ No newline at end of file
+}
diff --git a/src/views/basicDataManage/areaManage/component/areaDialog.vue b/src/views/basicDataManage/areaManage/component/areaDialog.vue
index 0b5c743..0e6b1b8 100644
--- a/src/views/basicDataManage/areaManage/component/areaDialog.vue
+++ b/src/views/basicDataManage/areaManage/component/areaDialog.vue
@@ -198,4 +198,4 @@
     box-shadow: none;
     margin-left: -3px;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/basicDataManage/areaManage/index.vue b/src/views/basicDataManage/areaManage/index.vue
index 3a003a1..ea49b1d 100644
--- a/src/views/basicDataManage/areaManage/index.vue
+++ b/src/views/basicDataManage/areaManage/index.vue
@@ -167,4 +167,4 @@
 </script>
 <style scoped lang="scss">
 
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/bigScreen/components/map.vue b/src/views/bigScreen/components/map.vue
index 5f7cc2d..9a5a947 100644
--- a/src/views/bigScreen/components/map.vue
+++ b/src/views/bigScreen/components/map.vue
@@ -58,7 +58,7 @@
 import screen from './components/screen.vue'
 import screenfull from 'screenfull'
 import { ElMessage, ElMessageBox } from 'element-plus';
-import {BaiduMap, BmOverlay, BmGround, BmMapType, BmNavigation, BmPolygon, BmLabel, BmPolyline} from 'vue-baidu-map-3x'
+// import {BaiduMap, BmOverlay, BmGround, BmMapType, BmNavigation, BmPolygon, BmLabel, BmPolyline} from 'vue-baidu-map-3x'
 
 // 定义接口来定义对象的类型
 interface TableDataState {
@@ -87,7 +87,7 @@
 }
 export default defineComponent({
   name: 'map',
-  components: {BaiduMap, BmOverlay, BmGround, BmMapType, BmNavigation, BmPolygon, BmLabel, BmPolyline },
+  // components: {BaiduMap, BmOverlay, BmGround, BmMapType, BmNavigation, BmPolygon, BmLabel, BmPolyline },
   setup() {
     const state = reactive<TableDataState>({
       polygonPath1: [],
@@ -216,4 +216,4 @@
   text-align: center;
   padding: 10px;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/bigScreen/components/mapNew.vue b/src/views/bigScreen/components/mapNew.vue
new file mode 100644
index 0000000..6d60f56
--- /dev/null
+++ b/src/views/bigScreen/components/mapNew.vue
@@ -0,0 +1,331 @@
+<template>
+<!--  <div className="lnglat-info" style="padding: 10px; font-size: 16px;">-->
+<!--    点击地图获取的经纬度:-->
+<!--    <span style="color: #1890ff; font-weight: bold;">-->
+<!--      {{ clickLngLat.lng ? `${clickLngLat.lng.toFixed(6)}, ${clickLngLat.lat.toFixed(6)}` : '未点击' }}-->
+<!--    </span>-->
+<!--  </div>-->
+
+  <div id="amap-container" className="amap-container"></div>
+</template>
+
+<script setup>
+import {ref, onMounted, onUnmounted} from 'vue'
+import AMapLoader from '@amap/amap-jsapi-loader'
+
+// 1. 定义地图实例、点击经纬度、覆盖物存储数组(用于卸载销毁)
+const mapInstance = ref(null)
+let markerInstance = ref(null)
+const clickLngLat = ref({lng: null, lat: null})
+const clickHandler = ref(null)
+const mapOverlays = ref([])
+const IMAGE_URL = '/directions.png'
+const IMAGE_SIZE = [200, 200]
+
+
+const areaData = [
+  {
+    number: "1",
+    name: "1#电石库",
+
+    // 区块的经纬度范围(多边形顶点,需自行校准)
+    path: [
+      [87.672802, 43.938253],
+      [87.673339, 43.938416],
+      [87.673737, 43.937692],
+      [87.673177, 43.937565]
+
+    ],
+    color: "#ffff00",
+    boxTextPos: [87.673139, 43.938233],
+    textPos: [87.673021, 43.937968],
+    // 箭头的路径(起点→终点)
+    arrowPath: [
+      [87.673784, 43.937654],
+      [87.675316, 43.938126]
+    ],
+    arrowPathTop: [
+      [87.673847, 43.937731],
+      [87.673784, 43.937654],
+      [87.673784, 43.937654],
+      [87.673896, 43.937634],
+    ]
+  },
+  {
+    number: "2",
+    name: "渣浆清液池",
+    path: [
+      [87.672249, 43.937010],
+      [87.673610, 43.937440],
+      [87.674062, 43.936716],
+      [87.672639, 43.936326],
+    ],
+    color: "#061959", // 蓝色
+    boxTextPos: [87.672914, 43.937041],
+    textPos: [87.672770, 43.936821],
+    arrowPath: [
+      [87.673741, 43.937557],
+      [87.674395, 43.936358]
+    ],
+    arrowPathTop: [
+      [87.673689, 43.937484],
+      [87.673741, 43.937557],
+      [87.673741, 43.937557],
+      [87.673834, 43.937520],
+    ],
+  },
+  {
+    number: "3",
+    name: "中间罐区",
+    path: [
+      [87.673840, 43.937568],
+      [87.675365, 43.938071],
+      [87.675960, 43.936955],
+      [87.674426, 43.936479]
+    ],
+    color: "#048599",
+    boxTextPos: [87.674859, 43.937563],
+    textPos: [87.674609, 43.937334]
+  },
+  {
+    number: "4",
+    name: "3#冷冻",
+    path: [
+      [87.676018, 43.937887],
+      [87.676807, 43.938102],
+      [87.677192, 43.937500],
+      [87.676358, 43.937237]
+    ],
+    color: "green",
+    boxTextPos: [87.676434, 43.937979],
+    textPos: [87.676379, 43.937728]
+  },
+  {
+    number: "5",
+    name: "新增浓缩池",
+    path: [
+      [87.676222, 43.937022],
+      [87.677306, 43.937391],
+      [87.677502, 43.936910],
+      [87.676401, 43.936585]
+    ],
+    color: "3eec34",
+    boxTextPos: [87.676916, 43.937187],
+    textPos: [87.676646, 43.936978]
+  },
+  {
+    number: "6",
+    name: "3#精馏",
+    path: [
+      [87.675792, 43.938354],
+      [87.676530, 43.938581],
+      [87.676715, 43.938200],
+      [87.676004, 43.937952]
+    ],
+    color: "ff52e7",
+    boxTextPos: [87.676110, 43.938477],
+    textPos: [87.675993, 43.938254]
+  },
+  {
+    number: "7",
+    name: "3#压缩",
+    path: [
+      [87.674907, 43.938814],
+      [87.676179, 43.939139],
+      [87.676420, 43.938709],
+      [87.675199, 43.9382997]
+    ],
+    color: "0055eb",
+    boxTextPos: [87.675650, 43.938949],
+    textPos: [87.675500, 43.938733]
+  },
+  {
+    number: "8",
+    name: "2#精馏",
+    path: [
+      [87.674439, 43.938395],
+      [87.674910, 43.938539],
+      [87.675100, 43.938179],
+      [87.674625, 43.938054]
+    ],
+    color: "11feee",
+    boxTextPos: [87.674695, 43.938508],
+    textPos: [87.674566, 43.938284]
+  },
+  {
+    number: "9",
+    name: "1#精馏",
+    path: [
+      [87.673888, 43.938249],
+      [87.674334, 43.938358],
+      [87.674523, 43.938037],
+      [87.674037, 43.937911],
+    ],
+    color: "b330d2",
+    boxTextPos: [87.674116, 43.938315],
+    textPos: [87.674040, 43.938138]
+  },
+]
+
+
+// 3. 初始化高德地图 + 绘制覆盖物
+const initAMap = async () => {
+  try {
+    window._AMapSecurityConfig = {
+      securityJsCode: '75ffdb279adfda7feb06d74b3a0352d6',
+    }
+    const AMap = await AMapLoader.load({
+      key: '65cb3e4cbf9f62fd3500cc0f61146cf4',
+      version: '2.0',
+      plugins: ['AMap.MapType']
+    })
+
+    // 初始化地图
+    mapInstance.value = new AMap.Map('amap-container', {
+      viewMode: "3D",
+      zoom: 17.3,
+      center: [87.675600, 43.9376800],
+      resizeEnable: true,
+    })
+    mapInstance.value.addControl(new AMap.MapType({defaultType: 1}))
+    const customIcon = new AMap.Icon({
+      size: new AMap.Size(...IMAGE_SIZE),
+      image: IMAGE_URL, // 图片地址
+      imageSize: new AMap.Size(...IMAGE_SIZE)
+    })
+    markerInstance.value = new AMap.Marker({
+      position:  [87.672260, 43.938300], // 图片放置的经纬度
+      icon: customIcon, // 使用自定义图片图标
+      anchor: 'bottom-center' // 图标锚点(图片底部中心对准经纬度点,定位更准确)
+    })
+    mapInstance.value.add(markerInstance.value)
+
+    areaData.forEach(area => {
+      const polygon = new AMap.Polygon({
+        path: area.path,
+        fillColor: area.color,
+        fillOpacity: 0.5,
+        strokeColor: area.color,
+        strokeWeight: 2
+      })
+      mapInstance.value.add(polygon)
+      mapOverlays.value.push(polygon)
+
+      const boxText = new AMap.Text({
+        position: area.boxTextPos,
+        text: `
+    <div style="text-align: center; line-height: 1.2;width: 9px;">
+      <span style="font-size: 16px; font-weight: bold; color: #000000;">${area.number}</span>
+    </div>
+  `,
+
+        style: {
+          padding:'0',
+          background: '#ffffff',
+          border: '1px solid #ff0000',
+          color: '#000000'
+        }
+      })
+      mapInstance.value.add(boxText)
+      mapOverlays.value.push(boxText)
+
+      const text = new AMap.Text({
+        position: area.textPos,
+        text: `${area.name}\n${area.distance || ''}`,
+        style: {
+          background: 'transparent',
+          border: '1px solid white',
+          fontSize: '12px',
+          color: '#ffffff',
+          fontWeight: 'bold',
+        }
+      })
+      mapInstance.value.add(text)
+      mapOverlays.value.push(text)
+      if (area.arrowPath) {
+        // 箭头折线
+        const arrowLine = new AMap.Polyline({
+          path: area.arrowPath,
+          strokeColor: '#ff0000',
+          strokeWeight: 3,
+          lineCap: 'round',
+          strokeStyle: 'solid',
+          strokeOpacity: 1,
+        })
+        mapInstance.value.add(arrowLine)
+        mapOverlays.value.push(arrowLine)
+        const arrowLineTop = new AMap.Polyline({
+          path: area.arrowPathTop,
+          strokeColor: '#ff0000',
+          strokeWeight: 4,
+          lineCap: 'round',
+          strokeStyle: 'solid',
+          strokeOpacity: 1,
+        })
+        mapInstance.value.add(arrowLineTop)
+        mapOverlays.value.push(arrowLineTop)
+
+        const arrowText = new AMap.Marker({
+          position:[87.673389, 43.937851],
+          content: '<div style="width:100px;background: transparent; border: none;font-weight: 600; color: #ff0000; font-size: 13px;">155m 方位1</div>',
+        })
+        mapInstance.value.add(arrowText)
+        mapOverlays.value.push(arrowText)
+
+        const arrowTextTwo = new AMap.Marker({
+          position:[87.674435, 43.936500],
+          content: '<div style="width:100px;background: transparent; border: none;font-weight: 600; color: #ff0000; font-size: 13px;">145m 方位2</div>',
+        })
+        mapInstance.value.add(arrowTextTwo)
+        mapOverlays.value.push(arrowTextTwo)
+
+
+      }
+    })
+
+    // clickHandler.value = (e) => {
+    //   const {lng, lat} = e.lnglat
+    //   clickLngLat.value = {lng, lat}
+    //   console.log('点击位置经纬度:', `经度:${lng.toFixed(6)},纬度:${lat.toFixed(6)}`)
+    // }
+    // mapInstance.value.on('click', clickHandler.value)
+
+  } catch (error) {
+    console.error('高德地图加载失败:', error)
+  }
+}
+
+
+// 4. 组件生命周期
+onMounted(() => {
+  initAMap()
+})
+
+onUnmounted(() => {
+  // 销毁地图实例 + 移除点击事件 + 销毁所有覆盖物
+  if (mapInstance.value) {
+    // 移除点击事件
+    if (clickHandler.value) {
+      mapInstance.value.off('click', clickHandler.value)
+    }
+    // 销毁所有覆盖物
+    mapOverlays.value.forEach(overlay => {
+      mapInstance.value.remove(overlay)
+    })
+    // 销毁地图
+    mapInstance.value.destroy()
+    mapInstance.value = null
+  }
+})
+</script>
+
+<style scoped>
+.amap-container {
+  width: 100%;
+  height: 600px;
+}
+
+::v-deep(.amap-ctrl-list-layer) {
+  display: none !important;
+}
+</style>
diff --git a/src/views/bigScreen/components/screen.vue b/src/views/bigScreen/components/screen.vue
index ac0ea94..c3321bc 100644
--- a/src/views/bigScreen/components/screen.vue
+++ b/src/views/bigScreen/components/screen.vue
@@ -284,8 +284,8 @@
 import AMapLoader from '@amap/amap-jsapi-loader'
 import { shallowRef } from '@vue/reactivity'
 import { storeToRefs } from 'pinia';
-import Map from './map.vue'
-import {BaiduMap, BmMapType, BmNavigation, BmPolygon, BmGround} from 'vue-baidu-map-3x'
+import Map from './mapNew.vue'
+// import {BaiduMap, BmMapType, BmNavigation, BmPolygon, BmGround} from 'vue-baidu-map-3x'
 import { useUserInfo } from '/@/stores/userInfo';
 import {bigScreenApi} from "/@/api/bigScreen";
 
@@ -356,7 +356,7 @@
 
 export default defineComponent({
     name: 'bigScreen',
-    components: {Map,BaiduMap, BmMapType, BmNavigation, BmPolygon },
+    components: {Map },
     props:{
       isFull: Boolean
     },

--
Gitblit v1.9.2