Blame view

src/components/inspection/inspectionRouteMap.vue 3.83 KB
59fd5759   王彪总   feat(map): 替换腾讯地图...
1
  <template>
48ea9c43   wuxw   巡检开发完成
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    <div class="inspection-route-map-container">
      <div id="inspectionRouteMap" style="width: 100%; height: 600px;"></div>
    </div>
  </template>
  
  <script>
  import { listInspectionRoutePoints } from '@/api/inspection/inspectionPointApi'
  import { getCommunityId } from '@/api/community/communityApi'
  
  export default {
    name: 'InspectionRouteMap',
    data() {
      return {
        map: null,
        communityId: '',
59fd5759   王彪总   feat(map): 替换腾讯地图...
17
18
19
20
        routePoints: [],
        markers: [],
        texts: [],
        polylines: []
48ea9c43   wuxw   巡检开发完成
21
22
23
24
      }
    },
    async mounted() {
      this.communityId = getCommunityId()
48ea9c43   wuxw   巡检开发完成
25
26
27
    },
    methods: {
      loadData(route) {
d367e130   wuxw   巡检功能测试
28
        this.initMap()
48ea9c43   wuxw   巡检开发完成
29
30
        this.loadRoute(route)
      },
48ea9c43   wuxw   巡检开发完成
31
  
48ea9c43   wuxw   巡检开发完成
32
      initMap() {
59fd5759   王彪总   feat(map): 替换腾讯地图...
33
        this.clearAll()
57c370b2   wuxw   v1.9 优化巡检地图展示问题
34
  
59fd5759   王彪总   feat(map): 替换腾讯地图...
35
36
37
        const center = [116.397128, 39.916527]
        const container = document.getElementById('inspectionRouteMap')
        if (!container) return
48ea9c43   wuxw   巡检开发完成
38
  
59fd5759   王彪总   feat(map): 替换腾讯地图...
39
        this.map = new window.AMap.Map(container, {
48ea9c43   wuxw   巡检开发完成
40
41
          center: center,
          zoom: 13,
59fd5759   王彪总   feat(map): 替换腾讯地图...
42
          resizeEnable: true
48ea9c43   wuxw   巡检开发完成
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
        })
      },
  
      async loadRoute(route) {
        if (!route || !route.inspectionRouteId) return
  
        try {
          const params = {
            communityId: this.communityId,
            inspectionRouteId: route.inspectionRouteId,
            page: 1,
            row: 1000
          }
  
          const response = await listInspectionRoutePoints(params)
          this.routePoints = response.inspectionPoints
          this.addPointsToMap(this.routePoints)
        } catch (error) {
          console.error('获取路线点失败:', error)
          this.$message.error(this.$t('inspectionRouteMap.fetchError'))
        }
      },
  
      addPointsToMap(points) {
        if (!this.map || !points || points.length === 0) return
  
59fd5759   王彪总   feat(map): 替换腾讯地图...
69
        this.clearOverlays()
48ea9c43   wuxw   巡检开发完成
70
  
48ea9c43   wuxw   巡检开发完成
71
72
73
74
75
        const path = []
  
        points.forEach(point => {
          if (!point.lat || !point.lng) return
  
59fd5759   王彪总   feat(map): 替换腾讯地图...
76
          const position = [point.lng, point.lat]
48ea9c43   wuxw   巡检开发完成
77
  
59fd5759   王彪总   feat(map): 替换腾讯地图...
78
79
80
81
82
83
84
85
          const marker = new window.AMap.Marker({
            map: this.map,
            position: position,
            icon: new window.AMap.Icon({
              size: new window.AMap.Size(25, 35),
              imageSize: new window.AMap.Size(25, 35),
              image: '/img/maper.png'
            })
48ea9c43   wuxw   巡检开发完成
86
          })
59fd5759   王彪总   feat(map): 替换腾讯地图...
87
          this.markers.push(marker)
48ea9c43   wuxw   巡检开发完成
88
  
59fd5759   王彪总   feat(map): 替换腾讯地图...
89
90
91
          const text = new window.AMap.Text({
            map: this.map,
            text: point.inspectionName,
48ea9c43   wuxw   巡检开发完成
92
            position: position,
59fd5759   王彪总   feat(map): 替换腾讯地图...
93
94
95
96
97
98
99
100
            offset: new window.AMap.Pixel(0, 15),
            style: {
              color: '#3777FF',
              'font-size': '12px',
              'background-color': 'rgba(255,255,255,0.8)',
              'padding': '2px 4px',
              'border-radius': '2px'
            }
48ea9c43   wuxw   巡检开发完成
101
          })
59fd5759   王彪总   feat(map): 替换腾讯地图...
102
          this.texts.push(text)
48ea9c43   wuxw   巡检开发完成
103
  
48ea9c43   wuxw   巡检开发完成
104
105
106
          path.push(position)
        })
  
59fd5759   王彪总   feat(map): 替换腾讯地图...
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
        if (path.length > 1) {
          // 外层(描边)
          const outerPolyline = new window.AMap.Polyline({
            map: this.map,
            path: path,
            strokeColor: '#FFF',
            strokeWeight: 10,
            strokeOpacity: 1,
            lineJoin: 'round'
          })
          this.polylines.push(outerPolyline)
  
          // 内层(主线)
          this.polylines.push(new window.AMap.Polyline({
            map: this.map,
            path: path,
            strokeColor: '#3777FF',
            strokeWeight: 6,
            strokeOpacity: 0.9,
            lineJoin: 'round'
          }))
        }
48ea9c43   wuxw   巡检开发完成
129
  
48ea9c43   wuxw   巡检开发完成
130
131
132
133
        if (path.length > 0) {
          this.map.setCenter(path[0])
          this.map.setZoom(16)
        }
59fd5759   王彪总   feat(map): 替换腾讯地图...
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
      },
  
      clearAll() {
        this.clearOverlays()
        if (this.map) {
          this.map.destroy()
          this.map = null
        }
      },
  
      clearOverlays() {
        this.markers.forEach(m => m.setMap(null))
        this.markers = []
        this.texts.forEach(t => t.setMap(null))
        this.texts = []
        this.polylines.forEach(p => p.setMap(null))
        this.polylines = []
48ea9c43   wuxw   巡检开发完成
151
152
153
      }
    },
    beforeDestroy() {
59fd5759   王彪总   feat(map): 替换腾讯地图...
154
      this.clearAll()
48ea9c43   wuxw   巡检开发完成
155
156
157
158
159
160
161
162
163
    }
  }
  </script>
  
  <style scoped>
  .inspection-route-map-container {
    width: 100%;
    height: 100%;
  }
59fd5759   王彪总   feat(map): 替换腾讯地图...
164
  </style>