Browse Source

* 碳排计量趋势

chen.cheng 1 month ago
parent
commit
05e6b428ff
2 changed files with 49 additions and 20 deletions
  1. 8 0
      ems-ui-cloud/src/api/ca/caMeterD.js
  2. 41 20
      ems-ui-cloud/src/views/ca/emission.vue

+ 8 - 0
ems-ui-cloud/src/api/ca/caMeterD.js

@@ -50,3 +50,11 @@ export function delCaMeterD(id) {
     method: 'delete'
   })
 }
+
+export function qryAvgCaMeterD(query) {
+  return request({
+    url: '/ems/caMeterD/area/avg/ca',
+    method: 'get',
+    params: query
+  })
+}

+ 41 - 20
ems-ui-cloud/src/views/ca/emission.vue

@@ -4,16 +4,17 @@
       <el-col :span="4" :xs="24">
         <div class="head-container">
           <el-input v-model="areaName" placeholder="请输入区域名称" clearable size="small" prefix-icon="el-icon-search"
-                    style="margin-bottom: 20px" />
+                    style="margin-bottom: 20px"/>
         </div>
         <div class="head-container" style="height: 100vh; overflow: hidden; position: relative;">
           <el-tree :data="areaOptions" :props="defaultProps" :expand-on-click-node="false"
                    :filter-node-method="filterNode" ref="tree" node-key="id" default-expand-all highlight-current
-                   @node-click="handleNodeClick" style="height: calc(100vh - 50px); overflow-y: auto;" />
+                   @node-click="handleNodeClick" style="height: calc(100vh - 50px); overflow-y: auto;"/>
         </div>
       </el-col>
       <el-col :span="20" :xs="24">
-        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
+                 label-width="68px">
           <el-form-item label="开始日期" prop="date">
             <el-date-picker clearable
                             v-model="queryParams.startRecTime"
@@ -43,15 +44,19 @@
               <span>{{ parseTime(scope.row.date, '{y}-{m}-{d}') }}</span>
             </template>
           </el-table-column>
-          <el-table-column label="碳排放量(kg)" align="center" prop="caEmissionQuantity"/>
+          <el-table-column label="碳排放量(kg)" align="center" prop="caEmissionQuantity">
+            <template slot-scope="scope">
+              <span>{{ scope.row.caEmissionQuantity }} {{ calcTrend(scope.row) }}</span>
+            </template>
+          </el-table-column>
         </el-table>
 
         <pagination
-          v-show="total>0"
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
+            v-show="total>0"
+            :total="total"
+            :page.sync="queryParams.pageNum"
+            :limit.sync="queryParams.pageSize"
+            @pagination="getList"
         />
       </el-col>
     </el-row>
@@ -59,8 +64,9 @@
 </template>
 
 <script>
-import {addCaMeterD, delCaMeterD, getCaMeterD, listCaMeterD, updateCaMeterD} from "@/api/ca/caMeterD";
-import { areaTreeByFacsCategory } from '@/api/basecfg/area'
+import {listCaMeterD, qryAvgCaMeterD} from "@/api/ca/caMeterD";
+import {areaTreeByFacsCategory} from '@/api/basecfg/area'
+import {array2Map} from "@/utils";
 
 export default {
   name: "CaMeterD",
@@ -92,6 +98,7 @@ export default {
         children: "children",
         label: "label"
       },
+      areaAvgMap: {},
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -120,13 +127,27 @@ export default {
   },
   methods: {
     /** 查询碳计量日列表 */
-    getList() {
+    async getList() {
       this.loading = true;
-      listCaMeterD(this.queryParams).then(response => {
-        this.caMeterDList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
+      const {data} = await qryAvgCaMeterD()
+      this.areaAvgMap = array2Map(data, 'areaCode')
+      const {rows, total} = await listCaMeterD(this.queryParams)
+      this.caMeterDList = rows;
+      this.total = total;
+      this.loading = false;
+    },
+    calcTrend(row) {
+      const {areaCode, caEmissionQuantity} = row
+      if (!this.areaAvgMap[areaCode] || !this.areaAvgMap[areaCode].caEmissionQuantity || !caEmissionQuantity) {
+        return ''
+      }
+      if (caEmissionQuantity > this.areaAvgMap[areaCode].caEmissionQuantity) {
+        return "↑"
+      }
+      if (caEmissionQuantity < this.areaAvgMap[areaCode].caEmissionQuantity) {
+        return "↓"
+      }
+      return "-"
     },
     // 取消按钮
     cancel() {
@@ -155,7 +176,7 @@ export default {
       this.handleQuery();
     },
     // 查询区域列表
-    async getAreaList () {
+    async getAreaList() {
       await areaTreeByFacsCategory(this.facsCategory, this.facsSubCategory, false).then(response => {
         this.areaOptions = [{
           id: '-1',
@@ -187,12 +208,12 @@ export default {
       return `${year}-${month}-${day}`
     },
     // 筛选节点
-    filterNode (value, data) {
+    filterNode(value, data) {
       if (!value) return true
       return data.label.indexOf(value) !== -1
     },
     // 节点单击事件
-    handleNodeClick (data) {
+    handleNodeClick(data) {
       this.queryParams.areaCode = data.id
       this.getList()
     },