analyseMapDialog.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template>
  2. <div class="container">
  3. <!-- 遮罩层区域 -->
  4. <div class="mask" @click="handleClse"></div>
  5. <!-- 地图区域 -->
  6. <div class="map">
  7. <!-- 地图组件 -->
  8. <div class="map_box">
  9. <Map :type="type" @clickMarker="clickMarker" />
  10. </div>
  11. <!-- 关闭按钮区域 -->
  12. <div class="map_close" @click="handleClse"></div>
  13. <!-- 路口弹窗区域 -->
  14. <Transition name="fade">
  15. <MapCrossingDialog
  16. v-if="showDetail"
  17. :detailObj="detailObj"
  18. @closeDetail="closeDetail"
  19. />
  20. </Transition>
  21. <!-- 景区弹窗区域 -->
  22. <Transition name="fade">
  23. <MapScenicDialog
  24. v-if="showScenic"
  25. :detailObj="detailObj"
  26. @closeDetail="closeDetail"
  27. />
  28. </Transition>
  29. </div>
  30. </div>
  31. </template>
  32. <script setup lang="ts">
  33. import { ref } from "vue";
  34. import Map from "@/components/map/map.vue";
  35. import MapCrossingDialog from "./left/mapCrossingDialog.vue";
  36. import MapScenicDialog from "./right/mapScenicDialog.vue";
  37. defineProps(["type"]);
  38. const $emit = defineEmits(["closeMap"]);
  39. // 路口弹窗显示隐藏控制
  40. const showDetail = ref<boolean>(false);
  41. // 景区弹窗显示隐藏控制
  42. const showScenic = ref<boolean>(false);
  43. const detailObj = ref({
  44. name: "",
  45. num: 0,
  46. });
  47. // 点击关闭按钮图标回调
  48. const handleClse = () => {
  49. $emit("closeMap", false);
  50. };
  51. // 自定义事件
  52. const clickMarker = (title: any, type: any) => {
  53. console.log(title);
  54. console.log(type);
  55. if (type === "路口") {
  56. showDetail.value = true;
  57. detailObj.value.name = title;
  58. } else if (type === "乡镇") {
  59. showScenic.value = true;
  60. detailObj.value.name = title;
  61. }
  62. };
  63. const closeDetail = (data: boolean) => {
  64. showDetail.value = data;
  65. showScenic.value = data;
  66. };
  67. </script>
  68. <style lang="scss" scoped>
  69. .container {
  70. z-index: 9999;
  71. position: absolute;
  72. top: -151px;
  73. left: 0;
  74. right: 0;
  75. bottom: 0;
  76. display: flex;
  77. justify-content: center;
  78. align-items: center;
  79. background-color: rgba($color: #000000, $alpha: 0.6);
  80. .mask {
  81. position: absolute;
  82. top: 0;
  83. left: 0;
  84. width: 7072px;
  85. height: 1872px;
  86. }
  87. .map {
  88. position: relative;
  89. padding: 10px;
  90. display: flex;
  91. align-items: center;
  92. justify-content: center;
  93. width: 2407px;
  94. height: 1116px;
  95. border-radius: 10px;
  96. background-image: url(@/assets/images/47.png);
  97. background-size: 100% 100%;
  98. .map_box {
  99. width: 100%;
  100. height: 100%;
  101. overflow: hidden;
  102. }
  103. .map_close {
  104. position: absolute;
  105. top: 10px;
  106. right: 10px;
  107. width: 72px;
  108. height: 72px;
  109. cursor: pointer;
  110. background-image: url(@/assets/images/12.png);
  111. background-size: 100% 100%;
  112. }
  113. }
  114. }
  115. </style>