|  | @@ -0,0 +1,86 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div>
 | 
	
		
			
				|  |  | +    <img v-if="legendImg" :src="legendImg" />
 | 
	
		
			
				|  |  | +    <template v-else >
 | 
	
		
			
				|  |  | +      <div class="color-bar" v-if="background"  :style="{ background: background }"></div>
 | 
	
		
			
				|  |  | +      <div class="labels">
 | 
	
		
			
				|  |  | +        <div
 | 
	
		
			
				|  |  | +            class="level"
 | 
	
		
			
				|  |  | +            v-for="(level, index) in levels"
 | 
	
		
			
				|  |  | +            :key="index"
 | 
	
		
			
				|  |  | +            :style="{ left: `${(index / (levels.length - 1)) * 100}%` }"
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          {{ level }}
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </template>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script setup>
 | 
	
		
			
				|  |  | +import eventBus from "@/api/eventBus";
 | 
	
		
			
				|  |  | +import {ref} from "vue";
 | 
	
		
			
				|  |  | +let colorsRef = ref([]);
 | 
	
		
			
				|  |  | +let levels = ref([]);
 | 
	
		
			
				|  |  | +let background = ref("");
 | 
	
		
			
				|  |  | +let legendImg = ref(null);
 | 
	
		
			
				|  |  | +function gradientListener() {
 | 
	
		
			
				|  |  | +  const colorStops = colorsRef.value.map((color, index) => {
 | 
	
		
			
				|  |  | +    const percentage = (index / (colorsRef.value.length - 1)) * 100;
 | 
	
		
			
				|  |  | +    return `${color} ${percentage}%`;
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +  background.value = `linear-gradient(to right, ${colorStops.join(", ")})`;
 | 
	
		
			
				|  |  | +  console.log(background.value)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function updateColors({colors,name, legendUrl}) {
 | 
	
		
			
				|  |  | +  if(legendUrl){
 | 
	
		
			
				|  |  | +    legendImg.value = legendUrl
 | 
	
		
			
				|  |  | +    return
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  legendImg.value = null
 | 
	
		
			
				|  |  | +  if(colors === undefined || colors.length === 0) return;
 | 
	
		
			
				|  |  | +  colorsRef.value = colors;
 | 
	
		
			
				|  |  | +  levels.value = colors.map((color, index) => {
 | 
	
		
			
				|  |  | +    return index + 1;
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +  gradientListener()
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +eventBus.off("alarmList:changeMapLayer", updateColors)
 | 
	
		
			
				|  |  | +eventBus.on("alarmList:changeMapLayer", updateColors)
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style lang="scss" scoped>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.map-legend {
 | 
	
		
			
				|  |  | +  position: absolute;
 | 
	
		
			
				|  |  | +  bottom: -33px;
 | 
	
		
			
				|  |  | +  left: -455px;
 | 
	
		
			
				|  |  | +  width: 340px;
 | 
	
		
			
				|  |  | +  img {
 | 
	
		
			
				|  |  | +    width: 340px;
 | 
	
		
			
				|  |  | +    opacity: 0.6;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.color-bar {
 | 
	
		
			
				|  |  | +  width: 100%;
 | 
	
		
			
				|  |  | +  height: 30px;
 | 
	
		
			
				|  |  | +  border: 1px solid #000;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.labels {
 | 
	
		
			
				|  |  | +  position: relative;
 | 
	
		
			
				|  |  | +  margin-top: 5px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.level {
 | 
	
		
			
				|  |  | +  position: absolute;
 | 
	
		
			
				|  |  | +  transform: translateX(-50%);
 | 
	
		
			
				|  |  | +  text-align: center;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |