alarmRanking.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <div class="column-row-title alarm-ranking">
  3. <span class="title-text"><img src="@/assets/images/title-icon.png" alt=""/>组件告警数排名
  4. <span class="s-span">(周)</span>
  5. </span>
  6. <!-- <div><el-checkbox v-model="alarm" label="当前告警数" size="large" @change="getAlarm"/><span class="yellow-txt">8</span></div>-->
  7. </div>
  8. <div class="column-content column-content-half" @click="target">
  9. <div v-for="(item,index) in alarmData" class="alarm-row">
  10. <div class="ranking-title">
  11. <div>
  12. <span :class="index===0 ? 'no1' : index ===1 ? 'no2':index ===2 ? 'no3':'no-other'">
  13. NO.{{index+1}}
  14. </span>
  15. {{item.name}}
  16. </div>
  17. <span class="alarm-num">{{item.num}}</span>
  18. </div>
  19. <div class="alarm-progress">
  20. <div class="progress" :style="`width:${(item.num/maxValue)*100}%`" />
  21. </div>
  22. </div>
  23. </div>
  24. </template>
  25. <script setup lang="ts">
  26. import {objAlarm} from "@/api/index/hl"
  27. import {onMounted,onUnmounted} from "vue";
  28. import {useRouter} from "vue-router";
  29. const props = defineProps(["refreshTime"])
  30. const alarm = ref(false)
  31. const alarmData = ref([])
  32. const maxValue = ref(0)
  33. const router = useRouter()
  34. const interval = ref(null)
  35. onMounted(()=>{
  36. getAlarm()
  37. interval.value = setInterval(() => {
  38. getAlarm()
  39. }, props.refreshTime)
  40. })
  41. onUnmounted(() => {
  42. clearInterval(interval.value)
  43. })
  44. async function getAlarm(){
  45. const res = await objAlarm()
  46. alarmData.value = res.data.data.sort((a,b)=>b.num - a.num)
  47. maxValue.value = Math.max(...alarmData.value.map(item=>item.num))+20
  48. }
  49. function target(){
  50. router.push({path:"/alarm/bizSort",query:{today:"true"}})
  51. }
  52. </script>