analysis.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <script>
  2. import query from "@/components/common/query.vue";
  3. import card from "@/components/common/card.vue";
  4. import BusinessEnergyChart from "@/components/business/analysis/all/businessEnergyChart.vue";
  5. import BusinessElectricChart from "@/components/business/analysis/electric/BusinessElectricChart.vue";
  6. import BusinessWaterChart from "@/components/business/analysis/water/BusinessWaterChart.vue";
  7. import BusinessHotChart from "@/components/business/analysis/hot/BusinessHotChart.vue";
  8. import BusinessColdChart from "@/components/business/analysis/cold/BusinessColdChart.vue";
  9. import BusinessPvChart from "@/components/business/analysis/pv/BusinessPvChart.vue";
  10. import BusinessEnergyDetail from "@/components/business/analysis/all/businessEnergyDetail.vue";
  11. import BusinessElectricDetail from "@/components/business/analysis/electric/BusinessElectricDetail.vue";
  12. import BusinessWaterDetail from "@/components/business/analysis/water/BusinessWaterDetail.vue";
  13. import BusinessHotDetail from "@/components/business/analysis/hot/BusinessHotDetail.vue";
  14. import BusinessColdDetail from "@/components/business/analysis/cold/BusinessColdDetail.vue";
  15. import BusinessPvDetail from "@/components/business/analysis/pv/BusinessPvDetail.vue";
  16. import apiOperationAnalysis from "@/api/operation/apiOperationAnalysis";
  17. export default {
  18. components: {
  19. query,
  20. card,
  21. BusinessEnergyChart,
  22. BusinessElectricChart,
  23. BusinessWaterChart,
  24. BusinessHotChart,
  25. BusinessColdChart,
  26. BusinessPvChart,
  27. BusinessEnergyDetail,
  28. BusinessElectricDetail,
  29. BusinessWaterDetail,
  30. BusinessHotDetail,
  31. BusinessColdDetail,
  32. BusinessPvDetail,
  33. },
  34. data() {
  35. return {
  36. queryData: {
  37. companyId: "0",
  38. floorId: "0",
  39. energy: "0",
  40. timeRange: this.$util.dateUtil.getNearlyMonthRange(),
  41. },
  42. oriCoreData: [],
  43. coreData: [
  44. {
  45. title: "总用电量(kWh)",
  46. num: 0,
  47. historyDesc: "同比",
  48. historyNum: 0,
  49. },
  50. {
  51. title: "总用水量(㎡)",
  52. num: 0,
  53. historyDesc: "同比",
  54. historyNum: 0,
  55. },
  56. {
  57. title: "总能耗成本(元)",
  58. num: 0,
  59. historyDesc: "同比",
  60. historyNum: 0,
  61. },
  62. {
  63. title: "人均能耗成本(元/人)",
  64. num: 0,
  65. historyDesc: "同比",
  66. historyNum: 0,
  67. },
  68. {
  69. type: 1,
  70. title: "值得关注",
  71. showStar: true,
  72. content: "",
  73. },
  74. ],
  75. };
  76. },
  77. watch: {
  78. "queryData.energy": function (val) {
  79. this.handleTypeChange(val);
  80. },
  81. },
  82. created() {
  83. this.oriCoreData = JSON.parse(JSON.stringify(this.coreData));
  84. },
  85. mounted() {
  86. this.init();
  87. },
  88. methods: {
  89. init() {
  90. this.$store.loadingStore().loadingWithApi(this.getCoreData(), 2000);
  91. },
  92. handleTypeChange(type) {
  93. this.coreData = JSON.parse(JSON.stringify(this.oriCoreData));
  94. if ("electric" == type) {
  95. // 用电
  96. this.coreData[0].title = "总用电量(kWh)";
  97. this.coreData[1].title = "人均用电量(kWh/人)";
  98. } else if ("water" == type) {
  99. // 用水
  100. this.coreData[0].title = "总用水量(m³)";
  101. this.coreData[1].title = "人均用水量(m³/人)";
  102. } else if ("hot" == type) {
  103. // 用热
  104. this.coreData[0].title = "总用热量(焦)";
  105. this.coreData[1].title = "人均用热量(焦)";
  106. } else if ("cold" == type) {
  107. // 用冷
  108. this.coreData[0].title = "总用冷量(kWh)";
  109. this.coreData[1].title = "人均用冷量(kWh/人)";
  110. } else if ("pv" == type) {
  111. // 光伏
  112. this.coreData[0].title = "总发电量(kWh)";
  113. this.coreData[1].title = "平均发电量量(kWh/台)";
  114. } else {
  115. // 全部
  116. this.coreData[0].title = "总用量(kWh)";
  117. this.coreData[1].title = "总用量m³)";
  118. }
  119. if ("pv" == type) {
  120. this.coreData[2].title = "总盈利(元)";
  121. this.coreData[2].title = "平均盈利(元/台)";
  122. } else {
  123. this.coreData[2].title = "总能耗成本(元)";
  124. this.coreData[2].title = "平均能耗成本(元/人)";
  125. }
  126. this.getCoreData();
  127. },
  128. reset() {},
  129. search() {
  130. this.$util.asyncPromise(
  131. this.getCoreData(),
  132. this.$refs.anaChart.getData()
  133. );
  134. this.$refs.anaDetail.refresh();
  135. },
  136. getCoreData() {
  137. return apiOperationAnalysis.getCoreData(this.queryData).then((res) => {
  138. this.coreData[0].num = res.list[0].value;
  139. this.coreData[0].historyNum = res.list[0].compare;
  140. this.coreData[1].num = res.list[1].value;
  141. this.coreData[1].historyNum = res.list[1].compare;
  142. this.coreData[2].num = res.list[2].value;
  143. this.coreData[2].historyNum = res.list[2].compare;
  144. this.coreData[3].num = res.list[3].value;
  145. this.coreData[3].historyNum = res.list[3].compare;
  146. this.coreData[4].content = res.worthAttention;
  147. });
  148. },
  149. },
  150. };
  151. </script>
  152. <template>
  153. <div>
  154. <div class="page-query-core">
  155. <query
  156. :show="['company', 'energy', 'time']"
  157. :query-data.sync="queryData"
  158. :reset="reset"
  159. :search="search"
  160. style="
  161. background: #fff;
  162. height: 60px;
  163. padding: 10px;
  164. border-radius: 5px;
  165. margin-bottom: 10px;
  166. "
  167. ></query>
  168. <card :title="'核心指标'">
  169. <CoreData :data-list="coreData"></CoreData>
  170. </card>
  171. </div>
  172. <div class="analysis-energy-body">
  173. <a-row :gutter="[12, 12]">
  174. <a-col :span="18">
  175. <div class="ioc-card-content">
  176. <card :title="'用电趋势'" v-if="queryData.energy == 'electric'">
  177. <div class="analysis-energy-body-left">
  178. <BusinessElectricChart
  179. ref="anaChart"
  180. :query-data="queryData"
  181. :height="430"
  182. ></BusinessElectricChart>
  183. </div>
  184. </card>
  185. <card :title="'用水趋势'" v-else-if="queryData.energy == 'water'">
  186. <div class="analysis-energy-body-left">
  187. <BusinessWaterChart
  188. ref="anaChart"
  189. :query-data="queryData"
  190. :height="430"
  191. ></BusinessWaterChart>
  192. </div>
  193. </card>
  194. <card :title="'用热趋势'" v-else-if="queryData.energy == 'hot'">
  195. <div class="analysis-energy-body-left">
  196. <div style="margin-top: 15px">
  197. <BusinessHotChart
  198. ref="anaChart"
  199. :query-data="queryData"
  200. :height="450"
  201. ></BusinessHotChart>
  202. </div>
  203. </div>
  204. </card>
  205. <card :title="'用冷趋势'" v-else-if="queryData.energy == 'cold'">
  206. <div class="analysis-energy-body-left">
  207. <div style="margin-top: 15px">
  208. <BusinessColdChart
  209. ref="anaChart"
  210. :query-data="queryData"
  211. :height="450"
  212. ></BusinessColdChart>
  213. </div>
  214. </div>
  215. </card>
  216. <card :title="'光伏趋势'" v-else-if="queryData.energy == 'pv'">
  217. <div class="analysis-energy-body-left">
  218. <div style="margin-top: 15px">
  219. <BusinessPvChart
  220. ref="anaChart"
  221. :query-data="queryData"
  222. :height="450"
  223. ></BusinessPvChart>
  224. </div>
  225. </div>
  226. </card>
  227. <card :title="'能源趋势'" v-else-if="queryData.energy == '0'">
  228. <div class="analysis-energy-body-left">
  229. <div style="margin-top: 15px">
  230. <BusinessEnergyChart
  231. ref="anaChart"
  232. :query-data="queryData"
  233. :height="450"
  234. ></BusinessEnergyChart>
  235. </div>
  236. </div>
  237. </card>
  238. </div>
  239. </a-col>
  240. <a-col :span="6">
  241. <div class="ioc-card-content">
  242. <card :title="'用电分析'" v-if="queryData.energy == 'electric'">
  243. <div class="analysis-energy-body-right">
  244. <BusinessElectricDetail
  245. ref="anaDetail"
  246. :query-data="queryData"
  247. />
  248. </div>
  249. </card>
  250. <card :title="'用水分析'" v-else-if="queryData.energy == 'water'">
  251. <div class="analysis-energy-body-right">
  252. <BusinessWaterDetail ref="anaDetail" :query-data="queryData" />
  253. </div>
  254. </card>
  255. <card :title="'用热分析'" v-else-if="queryData.energy == 'hot'">
  256. <div class="analysis-energy-body-right">
  257. <div style="margin-top: 15px">
  258. <BusinessHotDetail ref="anaDetail" :query-data="queryData" />
  259. </div>
  260. </div>
  261. </card>
  262. <card :title="'用冷分析'" v-else-if="queryData.energy == 'cold'">
  263. <div class="analysis-energy-body-right">
  264. <div style="margin-top: 15px">
  265. <BusinessColdDetail ref="anaDetail" :query-data="queryData" />
  266. </div>
  267. </div>
  268. </card>
  269. <card :title="'光伏分析'" v-else-if="queryData.energy == 'pv'">
  270. <div class="analysis-energy-body-right">
  271. <div style="margin-top: 15px">
  272. <BusinessPvDetail ref="anaDetail" :query-data="queryData" />
  273. </div>
  274. </div>
  275. </card>
  276. <card :title="'能源分析'" v-else-if="queryData.energy == '0'">
  277. <div class="analysis-energy-body-right">
  278. <div style="margin-top: 15px">
  279. <BusinessEnergyDetail
  280. ref="anaDetail"
  281. :query-data="queryData"
  282. />
  283. </div>
  284. </div>
  285. </card>
  286. </div>
  287. </a-col>
  288. </a-row>
  289. </div>
  290. </div>
  291. </template>
  292. <style lang="less" scoped>
  293. .analysis-energy-body {
  294. margin-top: 12px;
  295. .analysis-energy-body-left {
  296. height: 480px;
  297. overflow: hidden;
  298. }
  299. .analysis-energy-body-right {
  300. height: 480px;
  301. overflow: hidden;
  302. }
  303. }
  304. </style>