After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 163 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 330 B |
After Width: | Height: | Size: 327 B |
After Width: | Height: | Size: 469 B |
@ -0,0 +1,67 @@ |
|||||
|
<template> |
||||
|
<div class="legend-comp"> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/reservoir_big.png" alt="" /> |
||||
|
<span>大型水库</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/reservoir_normal.png" alt="" /> |
||||
|
<span>中型水库</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/reservoir_small.png" alt="" /> |
||||
|
<span>小型水库</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/dike_one.png" alt="" /> |
||||
|
<span>一级堤防</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/dike_two_three.png" alt="" /> |
||||
|
<span>二三级堤防</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/dike_four.png" alt="" /> |
||||
|
<span>四级堤防</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/sluice_big.png" alt="" /> |
||||
|
<span>大型水闸</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/sluice_middle.png" alt="" /> |
||||
|
<span>中型水闸</span> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<img class="icon" src="@/assets/map/sluice_small.png" alt="" /> |
||||
|
<span>小型水闸</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
export default { |
||||
|
data() { |
||||
|
return {}; |
||||
|
}, |
||||
|
created() {}, |
||||
|
methods: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped lang="scss"> |
||||
|
.legend-comp { |
||||
|
width: 100%; |
||||
|
max-height: 150px; |
||||
|
overflow-y: auto; |
||||
|
.row { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding-right: 12px; |
||||
|
color: rgba(0, 0, 0, 0.9); |
||||
|
} |
||||
|
.icon { |
||||
|
width: 24px; |
||||
|
height: 24px; |
||||
|
margin-right: 4px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,45 @@ |
|||||
|
<script setup lang="ts"> |
||||
|
import { onMounted, onBeforeUnmount } from "vue"; |
||||
|
import { messageCallback } from "@/message/index"; |
||||
|
import Legend from "./components/Legend.vue"; |
||||
|
import { useMap } from "@/hooks/web/useMap"; |
||||
|
const { initMap } = useMap(); |
||||
|
const resize = () => { |
||||
|
const app = document.getElementById("app") as HTMLDivElement; |
||||
|
if (!app) return; |
||||
|
const clientHeight = document.body.clientHeight; |
||||
|
const zoom = clientHeight / 1080; |
||||
|
(app.style as any).zoom = zoom * 100 + "%"; |
||||
|
}; |
||||
|
|
||||
|
onMounted(async () => { |
||||
|
initMap(); |
||||
|
// 注册postMessage事件 |
||||
|
window.addEventListener("message", messageCallback); |
||||
|
window.addEventListener("resize", resize); |
||||
|
window.addEventListener("load", resize); |
||||
|
}); |
||||
|
onBeforeUnmount(() => { |
||||
|
window.removeEventListener("message", messageCallback); |
||||
|
window.$bus.$all_off(); |
||||
|
}); |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div class="legend-box"> |
||||
|
<Legend></Legend> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.legend-box { |
||||
|
position: absolute; |
||||
|
bottom: 24px; |
||||
|
right: 550px; |
||||
|
padding: 12px 0 12px 12px; |
||||
|
overflow-y: auto; |
||||
|
background-color: #fff; |
||||
|
border-radius: 8px; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
</style> |