index.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <div class="system-dic-container">
  3. <el-card shadow="hover">
  4. <div class="system-user-search mb15">
  5. <el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="90px">
  6. <el-form-item label="年份" prop="year">
  7. <el-select v-model="state.tableData.param.year" placeholder="按照选择进行排名" filterable size="default">
  8. <el-option v-for="year in years" :label="year" :value="year" :key="year" />
  9. </el-select>
  10. </el-form-item>
  11. <el-form-item label="时间范围" prop="dateRange">
  12. <el-date-picker
  13. v-model="state.tableData.param.dateRange"
  14. size="default"
  15. style="width: 240px"
  16. value-format="YYYY-MM-DD"
  17. type="daterange"
  18. range-separator="-"
  19. start-placeholder="开始日期"
  20. end-placeholder="结束日期"
  21. >
  22. </el-date-picker>
  23. </el-form-item>
  24. <el-form-item label="排序" prop="sort">
  25. <el-select v-model="state.tableData.param.sort" placeholder="按照选择进行排名" filterable clearable size="default">
  26. <el-option label="总耗热" :value="1" />
  27. <el-option label="热单耗" :value="2" />
  28. <el-option label="总耗水" :value="5" />
  29. <el-option label="水单耗" :value="6" />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label="排序方式" prop="isdesc">
  33. <el-select v-model="state.tableData.param.isdesc" placeholder="按照选择进行排名" filterable clearable size="default">
  34. <el-option label="正序" :value="2" />
  35. <el-option label="倒序" :value="1" />
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="换热站名称" prop="stationName">
  39. <el-input v-model="state.tableData.param.stationName" placeholder="输入" clearable size="default"> </el-input>
  40. </el-form-item>
  41. <el-form-item>
  42. <el-button size="default" type="primary" class="ml10" @click="queryList">
  43. <el-icon>
  44. <ele-Search />
  45. </el-icon>
  46. 查询
  47. </el-button>
  48. <el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
  49. <el-icon>
  50. <ele-Refresh />
  51. </el-icon>
  52. 重置
  53. </el-button>
  54. <el-button size="default" v-auth="'download'" @click="exportData()">
  55. <el-icon>
  56. <ele-Download />
  57. </el-icon>
  58. 导出
  59. </el-button>
  60. </el-form-item>
  61. </el-form>
  62. </div>
  63. <el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
  64. <el-table-column type="index" label="序号" align="center" width="80" />
  65. <el-table-column label="换热站名称" prop="stationName">
  66. <template #default="{ row }">
  67. <el-button text type="primary" @click="showDialog(row.id)">{{row.stationName}}</el-button>
  68. </template>
  69. </el-table-column>
  70. <el-table-column :label="`总耗热(${unitMap['总耗热']})`" prop="unitConsumptionTotal" />
  71. <el-table-column :label="`热单耗(${unitMap['总单耗']})`" prop="unitConsumption" />
  72. <el-table-column :label="`总耗水(${unitMap['总耗水']})`" prop="flowLossTotal" />
  73. <el-table-column :label="`小时补水量(${unitMap['小时补水量']})`" prop="flowLoss" />
  74. <el-table-column :label="`供热负荷(${unitMap['供热负荷']})`" prop="unitConsumptionDemand" />
  75. <!-- <el-table-column :label="`失水量(${unitMap['失水量']})`" prop="flowLossDemand" /> -->
  76. </el-table>
  77. <pagination
  78. v-show="state.tableData.total > 0"
  79. :total="state.tableData.total"
  80. v-model:page="state.tableData.param.pageNum"
  81. v-model:limit="state.tableData.param.pageSize"
  82. @pagination="queryList"
  83. />
  84. </el-card>
  85. <detailDialog ref="detailDialogRef"></detailDialog>
  86. </div>
  87. </template>
  88. <script lang="ts" setup>
  89. import { reactive, ref } from 'vue';
  90. import { FormInstance } from 'element-plus';
  91. import energyApi from '/@/api/energyAnalysis';
  92. import downloadFile from '/@/utils/download';
  93. import apiDatahub from '/@/api/datahub';
  94. import detailDialog from './detail.vue';
  95. const unitMap = ref<any>({});
  96. // 统计信息的单位的字典
  97. apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
  98. res.values.forEach((v: any) => {
  99. unitMap.value[v.value] = v.key;
  100. });
  101. });
  102. const queryRef = ref();
  103. const detailDialogRef = ref();
  104. const years = ref([]);
  105. const state = reactive({
  106. myCharts: [],
  107. charts: {
  108. theme: '',
  109. bgColor: '',
  110. color: '#303133',
  111. },
  112. heatList: [],
  113. tableData: {
  114. data: [],
  115. loading: false,
  116. total: 0,
  117. param: {
  118. sort: 1,
  119. isdesc: 2,
  120. stationName: '',
  121. year: '',
  122. loopName: '',
  123. dateRange: [],
  124. pageNum: 1,
  125. pageSize: 10,
  126. },
  127. },
  128. });
  129. energyApi.history.historyYear().then((res: any) => {
  130. years.value = res.list || [];
  131. if (res.list.length) {
  132. state.tableData.param.year = res.list[0]
  133. queryList();
  134. }
  135. });
  136. const showDialog = (id: string) => {
  137. detailDialogRef.value.openDialog(id, state.tableData.param.year)
  138. };
  139. const exportData = () => {
  140. energyApi.history.performanceExportStation(state.tableData.param).then((res: any) => {
  141. downloadFile(res, '换热站绩效考核数据.xlsx');
  142. });
  143. };
  144. const queryList = () => {
  145. state.tableData.loading = true;
  146. energyApi.history.getEnergyPerformanceStation(state.tableData.param).then((res: any) => {
  147. state.tableData.data = res.list || [];
  148. state.tableData.total = res.Total;
  149. }).finally(() => {
  150. state.tableData.loading = false;
  151. })
  152. };
  153. /** 重置按钮操作 */
  154. const resetQuery = (formEl: FormInstance | undefined) => {
  155. if (!formEl) return;
  156. formEl.resetFields();
  157. queryList();
  158. };
  159. </script>
  160. <style lang="scss" scoped>
  161. .title {
  162. font-size: 16px;
  163. font-weight: bold;
  164. }
  165. .chart-grid {
  166. display: grid;
  167. grid-template-columns: repeat(3, 1fr);
  168. grid-column-gap: 10px;
  169. }
  170. .mt20 {
  171. margin-top: 20px;
  172. }
  173. </style>