alarmsTop.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <template>
  2. <div class="top-title">{{title}}</div>
  3. <div class="sub-tip">
  4. <span class="tip-alarm"/>告警次数
  5. <span class="tip-title"/>持续时间
  6. </div>
  7. <div v-for="(item,index) in data" :key="index" class="top-style">
  8. <span class="index" :style="`background:${colors[index]||'#A1B3D2'}`">
  9. {{ index + 1 }}
  10. </span>
  11. <div class="progress-row">
  12. {{ item.objName }}
  13. <div class="row-flex">
  14. <div class="progress-alarm">
  15. <div class="alarms" :style="`width:${item.alarms/maxAlarms*100}%`">{{item.alarms}}</div>
  16. </div>
  17. <div class="progress-alarm">
  18. <div class="time" :style="`width:${item.value/maxNum*100}%`">{{item.value}}</div>
  19. </div>
  20. </div>
  21. </div>
  22. </div>
  23. </template>
  24. <script setup lang="ts">
  25. const props = defineProps({
  26. data: {
  27. type: Array,
  28. default: () => []
  29. },
  30. title:{
  31. type: String,
  32. default: ''
  33. },
  34. colors:{
  35. type: Array,
  36. default: () => []
  37. }
  38. })
  39. const maxNum = computed(() => {
  40. return Math.max(...props.data.map(item => item.value))+10
  41. })
  42. const maxAlarms = computed(() => {
  43. return Math.max(...props.data.map(item => item.alarms))+10
  44. })
  45. </script>
  46. <style scoped lang="scss">
  47. </style>