CoolingPump.vue 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <script setup lang="ts">
  2. import { computed } from 'vue';
  3. import ProgressTextBar from '@/components/ProgressTextBar.vue';
  4. import { calcPercentage, getFixedNum } from '@/utils';
  5. import { DevParamCoolingPump } from '@/constants/device-params';
  6. import type { DevWorkCardProps } from '@/types';
  7. const props = defineProps<DevWorkCardProps<DevParamCoolingPump>>();
  8. const activePowerPercent = computed(() => {
  9. const currentPower = props.realTimeData?.[DevParamCoolingPump.有功功率] as number;
  10. const maxPower = props.deviceDetail.powerRating;
  11. return calcPercentage(currentPower, maxPower);
  12. });
  13. const frequencyFbPercent = computed(() => {
  14. const currentFrequency = props.realTimeData?.[DevParamCoolingPump.频率反馈] as number;
  15. const maxFrequency = 50;
  16. return calcPercentage(currentFrequency, maxFrequency);
  17. });
  18. </script>
  19. <template>
  20. <div>
  21. <img class="cooling-pump-img" src="@/assets/img/device-cooling-pump.png" />
  22. <div class="cooling-pump-top">
  23. <div class="cooling-pump-left">
  24. <div>
  25. <div class="device-card-label">{{ $t('deviceWorkStatus.coolingTower.localRemoteStatus') }}</div>
  26. <div class="device-card-value device-card-no-history">
  27. {{ realTimeData?.[DevParamCoolingPump.本地远程状态] ?? '-' }}
  28. </div>
  29. </div>
  30. <div>
  31. <div class="device-card-label">{{ $t('deviceWorkStatus.coolingTower.activePower') }} (kW)</div>
  32. <ProgressTextBar
  33. :text="getFixedNum(realTimeData?.[DevParamCoolingPump.有功功率], 1)"
  34. :percent="activePowerPercent"
  35. :data-param-code="DevParamCoolingPump.有功功率"
  36. />
  37. </div>
  38. <div>
  39. <div class="device-card-label">{{ $t('deviceWorkStatus.coolingTower.frequencyFb') }} (Hz)</div>
  40. <ProgressTextBar
  41. :text="getFixedNum(realTimeData?.[DevParamCoolingPump.频率反馈], 0)"
  42. :percent="frequencyFbPercent"
  43. :data-param-code="DevParamCoolingPump.频率反馈"
  44. />
  45. </div>
  46. </div>
  47. </div>
  48. <div class="cooling-pump-bottom">
  49. <div>
  50. <div class="device-card-label">{{ $t('deviceWorkStatus.coolingTower.runHours') }} (H)</div>
  51. <div class="device-card-value device-card-no-history">
  52. {{ getFixedNum(realTimeData?.[DevParamCoolingPump.运行时间]) }}
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. </template>
  58. <style lang="scss" scoped>
  59. .cooling-pump-top {
  60. display: flex;
  61. justify-content: space-between;
  62. margin-bottom: 18px;
  63. }
  64. .cooling-pump-left {
  65. width: 170px;
  66. margin-right: 28px;
  67. > div + div {
  68. margin-top: 22px;
  69. }
  70. }
  71. .cooling-pump-img {
  72. position: absolute;
  73. top: 58px;
  74. right: 19px;
  75. }
  76. .cooling-pump-bottom {
  77. display: flex;
  78. justify-content: space-between;
  79. }
  80. .cooling-pump-top,
  81. .cooling-pump-bottom {
  82. position: relative;
  83. z-index: 1;
  84. }
  85. </style>