storage-real.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <threejs-base-dialog>
  3. <template #title>
  4. 储能实时数据
  5. </template>
  6. <template #data>
  7. <div v-for="item in storageList" :key="item.name">
  8. <span>{{ item.name }}:</span>
  9. <span class="value">{{ item.value }}{{ item.unit }}</span>
  10. </div>
  11. </template>
  12. </threejs-base-dialog>
  13. </template>
  14. <script>
  15. import threejsBaseDialog from './base.vue'
  16. import { getLatestByDevice } from "@/api/mgr/elecStoreIndex";
  17. import { numToStr } from "@/utils";
  18. let timer = null;
  19. export default {
  20. components: {
  21. threejsBaseDialog,
  22. },
  23. props: {
  24. propData: {
  25. type: Object,
  26. default: () => {
  27. return {};
  28. },
  29. },
  30. },
  31. data() {
  32. return {
  33. storageList: [
  34. {
  35. name: "当前容量",
  36. value: 0,
  37. unit: "kW·h",
  38. },
  39. {
  40. name: "充电功率",
  41. value: 0,
  42. unit: "kW",
  43. },
  44. {
  45. name: "放电功率",
  46. value: 0,
  47. unit: "kW",
  48. },
  49. ],
  50. };
  51. },
  52. beforeDestroy() {
  53. timer && clearInterval(timer);
  54. },
  55. mounted() {
  56. this.init();
  57. },
  58. methods: {
  59. async init() {
  60. await this.getStorageData();
  61. timer = setInterval(this.getStorageData, 1000 * 60 * 3);
  62. },
  63. async getStorageData() {
  64. try {
  65. const params = {};
  66. if (this.propData.areaCode && this.propData.areaCode !== '-1') {
  67. params.areaCode = this.propData.areaCode;
  68. }
  69. if (this.propData.facsCode) {
  70. params.facsCode = this.propData.facsCode;
  71. }
  72. const { data } = await getLatestByDevice(params);
  73. if (!data || !Array.isArray(data) || data.length === 0) {
  74. const [capacity, charge, discharge] = this.storageList;
  75. capacity.value = 0;
  76. charge.value = 0;
  77. discharge.value = 0;
  78. this.storageList = [capacity, charge, discharge];
  79. return;
  80. }
  81. // 汇总所有设备的数据
  82. let totalCapacity = 0; // 当前容量总和(单位:kW·h)
  83. let totalChargePower = 0; // 充电功率总和(单位:W -> kW)
  84. let totalDischargePower = 0; // 放电功率总和(单位:W -> kW)
  85. data.forEach(device => {
  86. totalCapacity += device.currentCapacity || 0;
  87. totalChargePower += (device.chargeVoltage || 0) / 1000; // W转kW
  88. totalDischargePower += (device.dischargePower || 0) / 1000; // W转kW
  89. });
  90. const [capacity, charge, discharge] = this.storageList;
  91. capacity.value = numToStr(totalCapacity.toFixed(2));
  92. charge.value = numToStr(totalChargePower.toFixed(2));
  93. discharge.value = numToStr(totalDischargePower.toFixed(2));
  94. this.storageList = [capacity, charge, discharge];
  95. } catch (error) {
  96. console.error('获取储能数据失败:', error);
  97. }
  98. },
  99. },
  100. };
  101. </script>