4 Commits 11243cfbc6 ... d97cb4179e

Author SHA1 Message Date
  hsshuxian d97cb4179e Merge branch 'master' of http://git.xt.wenhq.top:8083/hs/zhny_ui 4 months ago
  hsshuxian 58cce04dc2 抄表 4 months ago
  hsshuxian 60918607da Merge branch 'master' of http://git.xt.wenhq.top:8083/hs/zhny_ui 4 months ago
  hsshuxian a30a778cf6 样式 4 months ago

+ 11 - 1
ems-ui-cloud/src/api/device/elecMeterH.js

@@ -8,7 +8,17 @@ export function listElecMeterH(query) {
     params: query
   })
 }
-
+/**
+ * 查询设施用能统计数据
+ *
+ */
+export function getNumElecMeterH(query) {
+  return request({
+    url: '/ems/elecMeterH/staByTime',
+    method: 'get',
+    params: query
+  })
+}
 // 新增用电计量-小时
 export function addElecMeterH(data) {
   return request({

+ 37 - 29
ems-ui-cloud/src/views/basecfg/device/index.vue

@@ -143,13 +143,6 @@
         <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
           <el-form ref="form" :model="form" :rules="rules" label-width="80px">
             <div>
-              <el-form-item label="归属设施" prop="refFacs">
-                <el-select v-model="form.refFacs" placeholder="请选择归属设施" @change="handleFacilityChange">
-                  <el-option v-for="item in facsOptions" :key="item.facsCode" :label="item.facsName"
-                             :value="item.facsCode"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
               <el-form-item label="归属区域" prop="areaCode">
                 <el-select v-model="form.areaCode" placeholder="请选择归属区域" @change="handleAreaChange">
                   <el-option v-for="item in areaOptions" :key="item.id" :label="item.label" :value="item.id"
@@ -162,6 +155,13 @@
                   ></el-option>
                 </el-select>
               </el-form-item>
+              <el-form-item label="归属设施" prop="refFacs">
+                <el-select v-model="form.refFacs" placeholder="请选择归属设施" >
+                  <el-option v-for="item in facsOptions" :key="item.facsCode" :label="item.facsName"
+                             :value="item.facsCode"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
               <el-form-item label="安装位置" prop="location">
                 <el-input v-model="form.location" placeholder="请输入安装位置"></el-input>
               </el-form-item>
@@ -592,7 +592,7 @@
 <script>
 import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
 import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
+import { getFacsCategorygetByCode, listAllFacs,listFacs } from '@/api/basecfg/emsfacs'
 import { listSubsystemAll } from '@/api/adapter/subsystem'
 import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
 import { getObjAttr } from '@/api/basecfg/objAttribute'
@@ -753,6 +753,12 @@ export default {
         refFacs: [
           { required: true, message: '归属设施', trigger: 'blur' }
         ],
+        areaCode:[
+          { required: true, message: '归属区域', trigger: 'blur' }
+        ],
+        locationRef:[
+          { required: true, message: '归属子区', trigger: 'blur' }
+        ],
         refArea: [
           { required: true, message: '安装位置', trigger: 'blur' }
         ],
@@ -822,20 +828,6 @@ export default {
       }
       return areaName;
     },
-    /** 归属设施*/
-    handleFacilityChange(selectedFacilityCode) {
-      const selectedFacility = this.facsOptions.find(f => f.facsCode === selectedFacilityCode)
-      if (selectedFacility) {
-        this.form.areaName = selectedFacility.refAreaName
-        this.form.areaCode = selectedFacility.refArea
-        this.loadSubAreaOptions(selectedFacility.refArea)
-      }
-    },
-    /** 归属设施*/
-    handleAreaChange(value) {
-      this.form.locationRef = null
-      this.loadSubAreaOptions(value)
-    },
     /**下拉归属区域*/
     loadAreaOptions() {
       areaTreeSelect('0', 1).then(response => {
@@ -848,14 +840,30 @@ export default {
         this.subAreaOptions = response.data || []
       })
     },
-    getFacsOptions() {
+
+    /** 归属区域变更时查询归属子区和归属设施 */
+    handleAreaChange(value) {
+      //清空
+      this.form.locationRef = null;
+      this.form.refFacs = null;
+      this.subAreaOptions = [];
+      this.facsOptions = [];
+      // 归属子区
+      this.loadSubAreaOptions(value);
+      // 归属设施
+      this.getFacsOptions(value);
+    },
+
+    /** 查询归属设施 */
+    getFacsOptions(refArea) {
       const getFacsParams = {
-        facsCategory: this.queryParams.deviceCategory,
-        subCategory: this.queryParams.deviceSubCategory
-      }
-      listAllFacs(getFacsParams).then(response => {
-        this.facsOptions = response.data
-      })
+        refArea: refArea,
+        facsCategory: this.queryParams.deviceCategory // 当前标签页的分类
+      };
+      listFacs(getFacsParams).then(response => {
+        this.facsOptions = response.rows || [];
+        console.log("归属设施",this.facsOptions);
+      });
     },
 
     formatDate(date) {

+ 11 - 5
ems-ui-cloud/src/views/devmgr/attr/index.vue

@@ -144,10 +144,15 @@
           </el-form>
           <el-table :data="callLogData" style="width: 100%" :show-header="true" :empty-text="'暂无数据'">
             <el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
-            <el-table-column label="对象代码" prop="objCode"></el-table-column>
-            <el-table-column label="模型代码" prop="modelCode"></el-table-column>
-            <el-table-column label="能力标识" prop="abilityKey"></el-table-column>
+            <el-table-column label="对象编号" prop="objCode"></el-table-column>
+            <el-table-column label="对象名称" prop="objName"></el-table-column>
+            <el-table-column label="对象能力" prop="abilityName"></el-table-column>
             <el-table-column label="调用时间" prop="callTime"></el-table-column>
+            <el-table-column label="调用结果" align="center" width="100">
+              <template slot-scope="scope">
+                <span>{{ formatCallStatus(scope.row.callStatus) }}</span>
+              </template>
+            </el-table-column>
             <el-table-column label="操作" align="center" width="100">
               <template slot-scope="scope">
                 <el-button type="text" size="mini" icon="el-icon-info" @click="handleCallLogDetail(scope.row)">详情
@@ -204,8 +209,9 @@
           </el-form>
           <el-table :data="reportLogData" style="width: 100%" :show-header="true" :empty-text="'暂无数据'">
             <el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
-            <el-table-column label="对象代码" prop="objCode"></el-table-column>
-            <el-table-column label="消息描述" prop="msgDesc"></el-table-column>
+            <el-table-column label="对象编号" prop="objCode"></el-table-column>
+            <el-table-column label="对象名称" prop="objName"></el-table-column>
+            <el-table-column label="消息类型" prop="msgDesc"></el-table-column>
             <el-table-column label="上报时间" prop="reportTime" width="180"></el-table-column>
             <el-table-column label="操作" align="center" width="100">
               <template slot-scope="scope">

+ 118 - 8
ems-ui-cloud/src/views/devmgr/meterData/index.vue

@@ -44,6 +44,69 @@
           </el-form-item>
         </el-form>
 
+        <!-- 统计数据表格 -->
+        <el-card class="box-card" v-if="activeTab==='first' && numElecMeterHData">
+          <div slot="header" class="clearfix">
+            <span>用电统计</span>
+          </div>
+          <el-table :data="[numElecMeterHData]" border style="width: 100%">
+            <!-- 第一行:用电量 -->
+            <el-table-column label="总计(kW·h)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.total.quantity ? scope.row.total.quantity.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="谷电(kW·h)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.lowElec.quantity ? scope.row.lowElec.quantity.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="平峰电(kW·h)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.normalElec.quantity ? scope.row.normalElec.quantity.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="高峰电(kW·h)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.highElec.quantity ? scope.row.highElec.quantity.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="尖峰电(kW·h)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.peakElec.quantity ? scope.row.peakElec.quantity.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+          </el-table>
+          <!-- 第二行:总金额 -->
+          <el-table :data="[numElecMeterHData]" border style="width: 100%; margin-top: 10px">
+            <el-table-column label="总计(元)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.total.useCost ? scope.row.total.useCost.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="谷电(元)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.lowElec.useCost ? scope.row.lowElec.useCost.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="平峰电(元)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.normalElec.useCost ? scope.row.normalElec.useCost.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="高峰电(元)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.highElec.useCost ? scope.row.highElec.useCost.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="尖峰电(元)" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.peakElec.useCost ? scope.row.peakElec.useCost.toFixed(2) : '0.00' }}</span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-card>
+
         <el-table v-if="activeTab === 'first'" v-loading="loading" :data="elecMeterHList">
           <el-table-column type="selection" width="55" align="center"/>
           <el-table-column label="表计名称" align="left" prop="deviceName" width="250px"/>
@@ -59,8 +122,16 @@
             </template>
           </el-table-column>
 
-          <el-table-column label="用电量(kW·h)" align="center" prop="elecQuantity"/>
-          <el-table-column label="小时电费" align="center" prop="useElecCost"/>
+          <el-table-column label="用电量(kW·h)" align="center" prop="elecQuantity">
+            <template slot-scope="scope">
+              <span>{{ scope.row.elecQuantity ? scope.row.elecQuantity.toFixed(2) : '0.00' }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="小时电费" align="center" prop="useElecCost">
+            <template slot-scope="scope">
+              <span>{{ scope.row.useElecCost ? scope.row.useElecCost.toFixed(2) : '0.00' }}</span>
+            </template>
+          </el-table-column>
         </el-table>
 
         <el-table v-if="activeTab === 'second'" v-loading="loading" :data="waterMeterHList">
@@ -144,15 +215,17 @@ import {
   delElecMeterH,
   addElecMeterH,
   updateElecMeterH,
-  listWaterMeterH
+  listWaterMeterH,
+  getNumElecMeterH
 } from '@/api/device/elecMeterH'
-import { areaTreeSelect } from '@/api/basecfg/area'
 import { getDeviceTree } from '@/api/device/meterDevice'
 
 export default {
   name: 'ElecMeterH',
   data() {
     return {
+      // 存储用电统计数据
+      numElecMeterHData: null,
       activeTab: 'first',
       // 遮罩层
       loading: true,
@@ -221,13 +294,19 @@ export default {
     }
   },
   created() {
-     this.getAreaTreeSelect()
-    this.getElecList()
+      this.getAreaTreeSelect().then(() => {
+        this.getElecList();
+        /** 自动触发第一个 id 非 null 的树节点*/
+        this.$nextTick(() => {
+          const firstValidNode = this.findFirstValidNode(this.areaOptions);
+          if (firstValidNode) {
+            this.handleNodeClick(firstValidNode);
+          }
+        });
+      });
   },
   methods: {
-
     handleTabChange() {
-      // 根据newTabName给someParam赋值
       if (this.activeTab === 'first') {
         // 电表读数
         this.queryParams.meterCls = '45'
@@ -236,6 +315,7 @@ export default {
         // 水表读数
         this.queryParams.meterCls = '70'
         this.getWaterList()
+
       }
       this.getAreaTreeSelect()
       this.handleQuery()
@@ -253,6 +333,20 @@ export default {
       }
       this.queryParams.deviceCode = data.id
       this.handleQuery()
+
+    },
+    /**第一个 id 非 null 的节点*/
+    findFirstValidNode(nodes) {
+      for (const node of nodes) {
+        if (node.id !== null) {
+          return node;
+        }
+        if (node.children && node.children.length > 0) {
+          const foundNode = this.findFirstValidNode(node.children);
+          if (foundNode) return foundNode;
+        }
+      }
+      return null;
     },
     /**树结构*/
     async getAreaTreeSelect() {
@@ -328,6 +422,22 @@ export default {
         this.queryParams.pageNum = 1
         this.getWaterList()
       }
+      // 获取统计数据
+      this.getNumElecMeterH();
+    },
+    async getNumElecMeterH() {
+      const query = {
+        deviceCode: this.queryParams.deviceCode,
+        startRecTime: this.queryParams.startRecTime,
+        endRecTime: this.queryParams.endRecTime,
+      };
+
+      try {
+        const response = await getNumElecMeterH(query);
+        this.numElecMeterHData = response.data;
+      } catch (error) {
+        this.$message.error("获取统计数据失败");
+      }
     },
     /** 重置按钮操作 */
     resetQuery() {

+ 160 - 192
ems-ui-cloud/src/views/devmgr/meterRead/index.vue

@@ -19,82 +19,40 @@
           </el-tab-pane>
         </el-tabs>
 
-        <!--表格 -->
-        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
-          <el-form-item label="表记编号" prop="deviceCode">
-            <el-input v-model="queryParams.deviceCode" placeholder="请输入设备代码" clearable @keyup.enter.native="handleQuery" />
+        <!-- 填报按钮 -->
+        <el-button type="primary" icon="el-icon-info" size="mini" @click="handleRecord">填报</el-button>
+        <!-- 历史抄表记录 -->
+        <el-form ref="recListForm" :model="recListForm" label-width="80px">
+          <el-form-item label="年份" prop="year">
+            <el-date-picker v-model="recListForm.year" :clearable="false" @change="getHistoryList" value-format="yyyy" type="year"
+                            placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="计量设备" prop="year">
+            <el-input disabled :value="recListForm.deviceCode" />
           </el-form-item>
-          <el-form-item>
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          <el-form-item label="抄表历史" prop="recList">
+            <el-table v-loading="loading" :data="recListForm.recList" max-height="280px">
+              <el-table-column label="年份" align="center" prop="year" />
+              <el-table-column label="月份" align="center" prop="meterMonth" >
+                <template slot-scope="scope">
+                  <!-- 使用 JavaScript 字符串方法截取月份部分 -->
+                  {{ scope.row.meterMonth.slice(-2) }}
+                </template>
+              </el-table-column>
+              <el-table-column label="抄表示数" align="center" prop="meterReading" />
+              <el-table-column label="用量" align="center" prop="increase" />
+              <el-table-column label="抄表日期" align="center" prop="meterTime" />
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                <template slot-scope="scope">
+                  <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="!canEdit(scope.row.meterMonth)"
+                             @click="updateRecord(scope.row)">修改</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
           </el-form-item>
         </el-form>
-        <el-table v-loading="loading" :data="deviceList">
-          <el-table-column label="表计名称" align="left" prop="deviceName" width="200px">
-            <template slot-scope="scope">
-              <span>{{ scope.row.deviceName }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="设备代码" align="center" prop="deviceCode" />
-          <el-table-column label="计量标签" align="center" prop="objTag">
-            <template slot-scope="scope">
-              <span>{{ getObjTagName(scope.row.objTag) }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="抄表周期" align="center" prop="colCycle">
-            <template slot-scope="scope">
-              <span>{{ getColCycleName(scope.row.colCycle) }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="上次抄表日期" align="center" prop="lastTime" />
-          <el-table-column label="上次抄表示数" align="center" prop="lastReading" />
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-            <template slot-scope="scope">
-              <el-button size="mini" type="text" :disabled="!canFill(scope.row.lastTime)" icon="el-icon-info" @click="handleRecord(scope.row)">
-                填报</el-button>
-              <el-button size="mini" type="text"  icon="el-icon-document" @click="handleViewRec(scope.row)">
-                查看</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-        <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
-                    @pagination="getList" />
-        <!-- 历史抄表记录 -->
-<!--        <el-dialog :title="title" :visible.sync="recListOpen" width="1200px" append-to-body>-->
-          <el-form ref="recListForm" :model="recListForm" label-width="80px">
-            <el-form-item label="年份" prop="year">
-              <el-date-picker v-model="recListForm.year" :clearable="false" @change="getHistoryList" value-format="yyyy" type="year"
-                              placeholder="选择年份">
-              </el-date-picker>
-            </el-form-item>
-            <el-form-item label="计量设备" prop="year">
-              <el-input disabled :value="recListForm.deviceCode" />
-            </el-form-item>
-            <el-form-item label="抄表历史" prop="recList">
-              <el-table v-loading="loading" :data="recListForm.recList" max-height="280px">
-                <el-table-column label="年份" align="center" prop="year" />
-                <el-table-column label="月份" align="center" prop="meterMonth" >
-                  <template slot-scope="scope">
-                    <!-- 使用 JavaScript 字符串方法截取月份部分 -->
-                    {{ scope.row.meterMonth.slice(-2) }}
-                  </template>
-                </el-table-column>
-                <el-table-column label="抄表示数" align="center" prop="meterReading" />
-                <el-table-column label="用量" align="center" prop="increase" />
-                <el-table-column label="抄表日期" align="center" prop="meterTime" />
-                <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-                  <template slot-scope="scope">
-                    <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="!canEdit(scope.row.meterMonth)"
-                               @click="updateRecord(scope.row)">修改</el-button>
-                  </template>
-                </el-table-column>
-              </el-table>
-            </el-form-item>
-          </el-form>
-<!--          <div slot="footer" class="dialog-footer">-->
-<!--            <el-button @click="closeRecList">关 闭</el-button>-->
-<!--          </div>-->
-<!--        </el-dialog>-->
+
         <!--  填报  -->
         <el-dialog :title="fillTitle" :visible.sync="fillFormOpen" width="500px" append-to-body>
           <el-form ref="fillForm" :model="fillForm" label-width="150px">
@@ -127,43 +85,6 @@
             <el-button @click="fillCancel">取 消</el-button>
           </div>
         </el-dialog>
-
-<!--        &lt;!&ndash; 历史抄表记录 &ndash;&gt;-->
-<!--        <el-dialog :title="title" :visible.sync="recListOpen" width="1200px" append-to-body>-->
-<!--          <el-form ref="recListForm" :model="recListForm" label-width="80px">-->
-<!--            <el-form-item label="年份" prop="year">-->
-<!--              <el-date-picker v-model="recListForm.year" :clearable="false" @change="getHistoryList" value-format="yyyy" type="year"-->
-<!--                              placeholder="选择年份">-->
-<!--              </el-date-picker>-->
-<!--            </el-form-item>-->
-<!--            <el-form-item label="计量设备" prop="year">-->
-<!--              <el-input disabled :value="recListForm.deviceCode" />-->
-<!--            </el-form-item>-->
-<!--            <el-form-item label="抄表历史" prop="recList">-->
-<!--              <el-table v-loading="loading" :data="recListForm.recList" max-height="280px">-->
-<!--                <el-table-column label="年份" align="center" prop="year" />-->
-<!--                <el-table-column label="月份" align="center" prop="meterMonth" >-->
-<!--                  <template slot-scope="scope">-->
-<!--                    &lt;!&ndash; 使用 JavaScript 字符串方法截取月份部分 &ndash;&gt;-->
-<!--                    {{ scope.row.meterMonth.slice(-2) }}-->
-<!--                  </template>-->
-<!--                </el-table-column>-->
-<!--                <el-table-column label="抄表示数" align="center" prop="meterReading" />-->
-<!--                <el-table-column label="用量" align="center" prop="increase" />-->
-<!--                <el-table-column label="抄表日期" align="center" prop="meterTime" />-->
-<!--                <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
-<!--                  <template slot-scope="scope">-->
-<!--                    <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="!canEdit(scope.row.meterMonth)"-->
-<!--                               @click="updateRecord(scope.row)">修改</el-button>-->
-<!--                  </template>-->
-<!--                </el-table-column>-->
-<!--              </el-table>-->
-<!--            </el-form-item>-->
-<!--          </el-form>-->
-<!--          <div slot="footer" class="dialog-footer">-->
-<!--            <el-button @click="closeRecList">关 闭</el-button>-->
-<!--          </div>-->
-<!--        </el-dialog>-->
       </el-col>
     </el-row>
   </div>
@@ -172,7 +93,7 @@
 <script>
 import { listDevice } from '@/api/device/meterDevice'
 import { listMeterReadingByParam, getLastRecord, addMeterReading, updateMeterReading } from '@/api/device/meterRead'
-import { areaTreeSelect } from '@/api/basecfg/area'
+import { getDeviceTree } from '@/api/device/meterDevice'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 import { dateFormat } from '@/utils/index.js'
@@ -249,10 +170,17 @@ export default {
     }
   },
   created() {
-    this.getAreaTreeSelect('0', 1)
-    this.getList()
+    this.getAreaTreeSelect().then(() => {
+      this.getList();
+      /** 自动触发第一个 id 非 null 的树节点*/
+      this.$nextTick(() => {
+        const firstValidNode = this.findFirstValidNode(this.areaOptions);
+        if (firstValidNode) {
+          this.handleNodeClick(firstValidNode);
+        }
+      });
+    });
   },
-
   methods: {
     /** 查询计量设备列表 */
     getList() {
@@ -288,7 +216,6 @@ export default {
       this.handleQuery()
     },
     handleTabChange() {
-      // 根据newTabName给someParam赋值
       if (this.activeTab === 'first') {
         // 电表抄表
         this.queryParams.meterCls = '45'
@@ -296,37 +223,18 @@ export default {
         // 水表抄表
         this.queryParams.meterCls = '70'
       }
+      this.getAreaTreeSelect() // 重新加载设备树
       this.handleQuery()
     },
-    getObjTypeName(objType) {
-      const typeMap = {
-        1: '区块',
-        2: '设备'
-      }
-      return typeMap[objType] || '未知'
-    },
-    getColCycleName(colCycle) {
-      const cycleMap = {
-        0: '实时',
-        1: '分钟',
-        2: '小时',
-        3: '天',
-        4: '月'
-      }
-      return cycleMap[colCycle] || ''
-    },
-    getObjTagName(objTag) {
-      const tagMap = {
-        0: '公摊表',
-        1: '个户表'
-      }
-      return tagMap[objTag] || '未知'
-    },
-    async getAreaTreeSelect(areaCode, layer) {
-      await areaTreeSelect(areaCode, layer).then(response => {
-        this.areaOptions = response.data
+
+    async getAreaTreeSelect() {
+      await getDeviceTree(0, this.queryParams.meterCls, 1).then(response => {
+        this.areaOptions = response.data || []
+      }).catch(error => {
+        console.error('获取设备树失败:', error)
       })
     },
+
     // 筛选节点
     filterNode(value, data) {
       if (!value) return true
@@ -334,19 +242,36 @@ export default {
     },
     // 节点单击事件
     handleNodeClick(data) {
-      this.queryParams.areaCode = data.id
-      this.handleQuery()
-    },
-    handleViewRec(row) {
-      this.recListForm = this.$options.data().recListForm
-      this.resetForm('recListForm')
-      this.title = row.deviceName
-      this.curRow = row
+      if (data.id === null) {
+        this.$message.warning('该节点不是设备不可点击');
+        return;
+      }
       this.recListForm.year = dateFormat(new Date(), 'yyyy')
-      this.recListForm.deviceCode = row.deviceCode
-      this.getHistoryList()
-      this.recListOpen = true
+      this.recListForm.deviceCode = data.id
+      listMeterReadingByParam({
+        deviceCode: data.id,
+        year: dateFormat(new Date(), 'yyyy'),
+        orderFlag: 'desc'
+      }).then(response => {
+        this.recListForm.recList = response.data || []
+        this.curRow =  this.recListForm.recList;
+      })
     },
+    /** 第一个 id 非 null 的节点*/
+    findFirstValidNode(nodes) {
+      for (const node of nodes) {
+        if (node.id !== null) {
+          return node;
+        }
+        if (node.children && node.children.length > 0) {
+          const foundNode = this.findFirstValidNode(node.children);
+          if (foundNode) return foundNode;
+        }
+      }
+      return null;
+    },
+
+
     getHistoryList() {
       const { areaCode, deviceCode } = this.curRow
       listMeterReadingByParam({
@@ -358,54 +283,97 @@ export default {
         this.recListForm.recList = response.data || []
       })
     },
-    async handleRecord(row) {
-      this.fillForm = this.$options.data().fillForm
-      this.resetForm('fillForm')
-      this.fillTitle = row.deviceName
-      this.fillForm.deviceCode = row.deviceCode
-      this.fillForm.areaCode = row.areaCode
-      this.fillForm.magnification = row.magnification
-      this.fillForm.lastTime = row.lastTime
-      this.fillForm.lastReading = row.lastReading
-      this.ifAdd = true
-      // let existFlag = false
-      // // 获取上次填报记录
-      // await getLastRecord(row.areaCode, row.deviceCode).then(({ data }) => {
-      //   if (data) {
-      //     if (data.meterMonth === this.currentMonth) {
-      //       existFlag = true
-      //     } else {
-      //       this.fillForm.lastTime = data.meterTime
-      //       this.fillForm.lastReading = data.meterReading
-      //     }
-      //   }
-      // })
-      // if (row.meterMonth===this.currentMonth) {
-      //   this.$modal.msgError('当前月份已填报')
-      // } else {
-      this.fillFormOpen = true
-      // }
+
+    /** 新填报*/
+    handleRecord() {
+      this.fillForm = this.$options.data().fillForm;
+      this.resetForm('fillForm');
+      this.fillTitle = '填报抄表记录';
+
+      // 获取最新抄表记录
+      const latestRecord = this.recListForm.recList[0];
+      if (!latestRecord) {
+        this.$modal.msgError('没有可填报的记录');
+        return;
+      }
+
+      // 填充填报表单数据
+      this.fillForm.deviceCode = this.recListForm.deviceCode;
+      this.fillForm.areaCode = latestRecord.areaCode;
+      this.fillForm.magnification = latestRecord.magnification || 1;
+      this.fillForm.lastTime = latestRecord.meterTime;
+      this.fillForm.lastReading = latestRecord.meterReading;
+
+      this.fillFormOpen = true; // 打开填报表单
     },
+    // async handleRecord(row) {
+    //   this.fillForm = this.$options.data().fillForm
+    //   this.resetForm('fillForm')
+    //   this.fillTitle = row.deviceName
+    //   this.fillForm.deviceCode = row.deviceCode
+    //   this.fillForm.areaCode = row.areaCode
+    //   this.fillForm.magnification = row.magnification
+    //   this.fillForm.lastTime = row.lastTime
+    //   this.fillForm.lastReading = row.lastReading
+    //   this.ifAdd = true
+    // let existFlag = false
+    // // 获取上次填报记录
+    // await getLastRecord(row.areaCode, row.deviceCode).then(({ data }) => {
+    //   if (data) {
+    //     if (data.meterMonth === this.currentMonth) {
+    //       existFlag = true
+    //     } else {
+    //       this.fillForm.lastTime = data.meterTime
+    //       this.fillForm.lastReading = data.meterReading
+    //     }
+    //   }
+    // })
+    // if (row.meterMonth===this.currentMonth) {
+    //   this.$modal.msgError('当前月份已填报')
+    // } else {
+    //   this.fillFormOpen = true
+    //   // }
+    // },
     canEdit(meterMonth) {
       return meterMonth === this.currentMonth
     },
     canFill (lastTime) {
       return dateFormat(new Date(lastTime),'yyyyMM')!==this.currentMonth
     },
+    /**新修改*/
     updateRecord(row) {
-      this.ifAdd = false
-      this.fillFormOpen = true
-      this.fillForm = this.$options.data().fillForm
-      this.resetForm('fillForm')
-      this.fillTitle = this.curRow.objName
-      this.fillForm.deviceCode = this.curRow.deviceCode
-      this.fillForm.areaCode = this.curRow.areaCode
-      this.fillForm.magnification = this.curRow.magnification
-      this.fillForm.id = row.id
-      this.fillForm.lastTime = row.lastTime
-      this.fillForm.lastReading = row.lastReading
-      this.fillForm.meterReading = row.meterReading
+      this.ifAdd = false;
+      this.fillFormOpen = true;
+      this.fillForm = this.$options.data().fillForm;
+      this.resetForm('fillForm');
+      this.fillTitle = `修改抄表记录 - ${row.deviceCode}`;
+
+      // 获取当前选中的设备信息
+      const currentDevice = this.recListForm.recList.find(
+        (item) => item.deviceCode === row.deviceCode
+      );
+      this.fillForm.deviceCode = row.deviceCode; // 设备编号
+      this.fillForm.areaCode = currentDevice.areaCode; // 区域代码
+      this.fillForm.magnification = currentDevice.magnification || 1; // 综合倍率
+      this.fillForm.id = row.id; // 抄表记录 ID
+      this.fillForm.lastTime = row.meterTime; // 上次抄表日期
+      this.fillForm.lastReading = row.meterReading; // 上次抄表示数
+      this.fillForm.meterReading = row.meterReading; // 本次抄表示数(默认为上次抄表示数)
     },
+    // updateRecord(row) {
+    //   this.ifAdd = false
+    //   this.fillFormOpen = true
+    //   this.fillForm = this.$options.data().fillForm
+    //   this.resetForm('fillForm')
+    //   this.fillTitle = this.curRow.objName
+    //   this.fillForm.deviceCode = this.curRow.deviceCode
+    //   this.fillForm.areaCode = this.curRow.areaCode
+    //   this.fillForm.magnification = this.curRow.magnification
+    //   this.fillForm.id = row.id
+    //   this.fillForm.lastTime = row.lastTime
+    //   this.fillForm.lastReading = row.lastReading
+    //   this.fillForm.meterReading = row.meterReading
+    // },
     submitFillForm() {
       this.$refs['fillForm'].validate(valid => {
         if (valid) {