mapShow.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <template>
  2. <view>
  3. <view id="map" class='map' />
  4. <view>
  5. <!-- 普通弹窗 -->
  6. <uni-popup ref="popup" :is-mask-click="false" background-color="#fff" @change="onPopupChange">
  7. <view class="popup-content" :class="{ 'popup-bottom': popupType === 'bottom', 'popup-right': popupType === 'right' }">
  8. <text class="text">popup 内容</text>
  9. </view>
  10. </uni-popup>
  11. </view>
  12. </view>
  13. </template>
  14. <script module="leaflet" lang="renderjs">
  15. import 'leaflet/dist/leaflet.css'
  16. import '@/utils/map/leafletHelper.css'
  17. import {
  18. DefaultRequest,
  19. IdRequest
  20. } from "@/grpc/base_pb.js"
  21. // import mapHelper from '@/utils/mapHelper'
  22. import leafletHelper from '@/utils/map/leafletHelper'
  23. export default {
  24. components: {},
  25. data() {
  26. return {
  27. popupType: 'bottom',
  28. popupShow: false,
  29. map: null,
  30. checkPoints: [{
  31. cp_id: 1, // 检查点ID
  32. serial_num: 1, // 序号
  33. c_type: 1, // 检查点类型 1:起始点 2:途经点 3:结束点 4:其他
  34. category: 1, // 检查点种类 1:实体点 2:虚拟点 3:VR点
  35. latitude: 36.67205,
  36. longitude: 117.126945
  37. },
  38. {
  39. cp_id: 2,
  40. serial_num: 2,
  41. c_type: 1,
  42. category: 1,
  43. latitude: 36.670871,
  44. longitude: 117.12725
  45. },
  46. {
  47. cp_id: 3,
  48. serial_num: 3,
  49. c_type: 1,
  50. category: 1,
  51. latitude: 36.671723,
  52. longitude: 117.128565
  53. },
  54. {
  55. cp_id: 4,
  56. serial_num: 4,
  57. c_type: 1,
  58. category: 1,
  59. latitude: 36.672704,
  60. longitude: 117.128415
  61. },
  62. {
  63. cp_id: 5,
  64. serial_num: 5,
  65. c_type: 1,
  66. category: 1,
  67. latitude: 36.672003,
  68. longitude: 117.129305
  69. },
  70. {
  71. cp_id: 6,
  72. serial_num: 6,
  73. c_type: 1,
  74. category: 1,
  75. latitude: 36.672416,
  76. longitude: 117.127116
  77. },
  78. {
  79. cp_id: 7,
  80. serial_num: 7,
  81. c_type: 1,
  82. category: 1,
  83. latitude: 36.671689,
  84. longitude: 117.127798
  85. },
  86. {
  87. cp_id: 8,
  88. serial_num: 8,
  89. c_type: 1,
  90. category: 1,
  91. latitude: 36.67094,
  92. longitude: 117.128522
  93. },
  94. ],
  95. players: [{
  96. id: 1,
  97. nickName: '小鱼儿',
  98. phone: '13105310001',
  99. },
  100. {
  101. id: 2,
  102. nickName: '花无缺',
  103. phone: '13105310002',
  104. },
  105. {
  106. id: 3,
  107. nickName: '李大嘴',
  108. phone: '13105310003',
  109. },
  110. {
  111. id: 4,
  112. nickName: '叶南天',
  113. phone: '13105310004',
  114. },
  115. ],
  116. players_position: [{
  117. id: 1,
  118. lat: 36.671357,
  119. lng: 117.127925
  120. },
  121. {
  122. id: 2,
  123. lat: 36.671657,
  124. lng: 117.125925
  125. },
  126. {
  127. id: 3,
  128. lat: 36.672257,
  129. lng: 117.128925
  130. },
  131. {
  132. id: 4,
  133. lat: 36.670433,
  134. lng: 117.127873
  135. }
  136. ],
  137. shopId: 0,
  138. mapUrl: null,
  139. mapInfo: {},
  140. shopList: [],
  141. controlInfoList: []
  142. }
  143. },
  144. computed: {},
  145. mounted() {
  146. this.handleDrawMap()
  147. },
  148. onLoad() {
  149. // this.getShopList()
  150. // this.getShopMap(8)
  151. },
  152. beforeDestroy() {
  153. // console.log("beforeDestroy")
  154. leafletHelper.free()
  155. },
  156. methods: {
  157. async getShopMap(shopId) {
  158. try {
  159. // 创建请求参数并赋值
  160. var request = new IdRequest()
  161. request.setId(shopId)
  162. // 调用客户端相应的grpc方法,发送grpc请求,并接受后台发送回来的返回值
  163. this.$client.assMapInfoDetail(request, {}, async (err, response) => {
  164. if (err) {
  165. console.log(`[assMapInfoDetail] err: code = ${err.code}` +
  166. `, message = "${err.message}"`)
  167. } else {
  168. let res = response.toObject()
  169. console.log('[assMapInfoDetail]', res)
  170. this.mapInfo = res
  171. // await mapHelper.handleMapInfo(this, this.mapInfo)
  172. this.handleDrawMap()
  173. }
  174. })
  175. } catch (e) {
  176. console.log('[getShopMap] err', e)
  177. }
  178. },
  179. handleDrawMap() {
  180. leafletHelper.init(this, 'map', [36.67175772119628, 117.12792580603369], 17)
  181. leafletHelper.global.setCheckPoints(this.checkPoints)
  182. leafletHelper.global.setPlayers(this.players)
  183. leafletHelper.global.setPlayersPosition(this.players_position)
  184. leafletHelper.addMapLayer(8)
  185. leafletHelper.checkPoint.drawAllCheckPoints()
  186. leafletHelper.checkPoint.drawPath()
  187. leafletHelper.player.drawAllPlayers()
  188. // leafletHelper.player.drawOneTrail(1, 10000, true)
  189. // leafletHelper.player.drawOneTrail(2, 0, false)
  190. leafletHelper.player.drawAllTrails(5000)
  191. leafletHelper.checkPoint.toggle(true)
  192. leafletHelper.player.togglePlayer(true)
  193. leafletHelper.player.toggleTooltip(true)
  194. leafletHelper.player.toggleTrail(true)
  195. },
  196. //type: 弹出方式 [ top center bottom left right ]
  197. popup(type) {
  198. this.type = type
  199. if (!this.popupShow) {
  200. this.$refs.popup.open(type)
  201. this.popupShow = true
  202. } else {
  203. this.$refs.popup.close()
  204. this.popupShow = false
  205. }
  206. },
  207. onPopupChange(e) {
  208. console.log('[onPopupChange] 当前模式:' + e.type + ', 状态:' + e.show);
  209. },
  210. }
  211. }
  212. </script>
  213. <style lang="scss" scoped>
  214. .map {
  215. width: 100vw;
  216. // height: 100vh;
  217. height: 95vh;
  218. display: flex;
  219. justify-content: center;
  220. align-items: center;
  221. background-color: white;
  222. }
  223. // @mixin flex {
  224. // /* #ifndef APP-NVUE */
  225. // display: flex;
  226. // /* #endif */
  227. // flex-direction: row;
  228. // }
  229. // @mixin height {
  230. // /* #ifndef APP-NVUE */
  231. // height: 100%;
  232. // /* #endif */
  233. // /* #ifdef APP-NVUE */
  234. // flex: 1;
  235. // /* #endif */
  236. // }
  237. .popup-bottom {
  238. width: 100%;
  239. height: 200px;
  240. }
  241. .popup-right {
  242. // @include height;
  243. width: 200px;
  244. height: 100%;
  245. }
  246. </style>