Răsfoiți Sursa

pms 瑞都日报 油耗bug 中航北斗 车辆油耗 共享错误

zhangcl 1 zi în urmă
părinte
comite
1f7a17e46a
1 a modificat fișierele cu 93 adăugiri și 8 ștergeri
  1. 93 8
      src/views/pms/iotrddailyreport/FillDailyReportForm.vue

+ 93 - 8
src/views/pms/iotrddailyreport/FillDailyReportForm.vue

@@ -492,6 +492,7 @@
           class="fuel-consumption-el-table"
           table-layout="fixed"
           :key="fuelTableKey"
+          row-key="deviceId"
         >
           <!-- 车辆编码 -->
           <el-table-column
@@ -552,6 +553,7 @@
                 style="width: 100%"
                 size="small"
                 @focus="handleFuelInputFocus(scope.row)"
+                :key="scope.row.deviceId"
               />
               <!-- 只读模式下显示数值 -->
               <span v-else>
@@ -1938,6 +1940,29 @@ const initFormData = (reportData: any) => {
     if (fuelSource && Array.isArray(fuelSource) && fuelSource.length > 0) {
       // 处理每个油耗数据项,设置 customFuel 的默认值并确保格式正确
       const processedFuels = fuelSource.map((fuel: any) => {
+        // 创建全新的对象,避免引用共享
+        const newFuel = {
+          ...fuel, // 使用展开运算符创建浅拷贝
+          // 确保每个字段都有独立的值
+          createTime: fuel.createTime,
+          updateTime: fuel.updateTime,
+          creator: fuel.creator,
+          updater: fuel.updater,
+          deleted: fuel.deleted,
+          id: fuel.id,
+          type: fuel.type,
+          reportId: fuel.reportId,
+          deviceId: fuel.deviceId,
+          deviceCode: fuel.deviceCode,
+          yfDeviceCode: fuel.yfDeviceCode,
+          deviceName: fuel.deviceName,
+          carId: fuel.carId,
+          zhbdFuel: fuel.zhbdFuel,
+          customFuel: null, // 初始化为null
+          queryDate: fuel.queryDate,
+          remark: fuel.remark
+        };
+
         let customFuelValue;
 
         // 如果 customFuel 不为空,确保它是字符串格式并已正确格式化
@@ -1951,7 +1976,7 @@ const initFormData = (reportData: any) => {
         }
 
         return {
-          ...fuel,
+          ...newFuel,
           customFuel: customFuelValue
         };
       });
@@ -1971,6 +1996,29 @@ const initFormData = (reportData: any) => {
     if (fuelSource && Array.isArray(fuelSource) && fuelSource.length > 0) {
       // 处理每个油耗数据项,设置 customFuel 的默认值并确保格式正确
       const processedFuels = fuelSource.map((fuel: any) => {
+        // 创建全新的对象,避免引用共享
+        const newFuel = {
+          ...fuel, // 使用展开运算符创建浅拷贝
+          // 确保每个字段都有独立的值
+          createTime: fuel.createTime,
+          updateTime: fuel.updateTime,
+          creator: fuel.creator,
+          updater: fuel.updater,
+          deleted: fuel.deleted,
+          id: fuel.id,
+          type: fuel.type,
+          reportId: fuel.reportId,
+          deviceId: fuel.deviceId,
+          deviceCode: fuel.deviceCode,
+          yfDeviceCode: fuel.yfDeviceCode,
+          deviceName: fuel.deviceName,
+          carId: fuel.carId,
+          zhbdFuel: fuel.zhbdFuel,
+          customFuel: null, // 初始化为null
+          queryDate: fuel.queryDate,
+          remark: fuel.remark
+        };
+
         let customFuelValue;
 
         // 如果 customFuel 不为空,确保它是字符串格式并已正确格式化
@@ -1984,7 +2032,7 @@ const initFormData = (reportData: any) => {
         }
 
         return {
-          ...fuel,
+          ...newFuel,
           customFuel: customFuelValue
         };
       });
@@ -2054,6 +2102,31 @@ const getWorkloadColumns = () => {
   return columns;
 };
 
+// 添加一个深拷贝油耗数据的辅助函数
+const deepCopyFuelData = (fuelData: any) => {
+  if (!fuelData) return null;
+
+  return {
+    createTime: fuelData.createTime,
+    updateTime: fuelData.updateTime,
+    creator: fuelData.creator,
+    updater: fuelData.updater,
+    deleted: fuelData.deleted,
+    id: fuelData.id,
+    type: fuelData.type,
+    reportId: fuelData.reportId,
+    deviceId: fuelData.deviceId,
+    deviceCode: fuelData.deviceCode,
+    yfDeviceCode: fuelData.yfDeviceCode,
+    deviceName: fuelData.deviceName,
+    carId: fuelData.carId,
+    zhbdFuel: fuelData.zhbdFuel,
+    customFuel: fuelData.customFuel,
+    queryDate: fuelData.queryDate,
+    remark: fuelData.remark
+  };
+};
+
 // 强制刷新表格
 const refreshFuelTable = () => {
   fuelTableKey.value += 1;
@@ -2204,18 +2277,30 @@ const handleCustomFuelChange = (fuelItem: any) => {
     fuelItem.customFuel = '0.00';
   }
 
-  // 手动触发当日油耗的重新计算
-  calculateAndUpdateDailyFuel();
-
   // 同步更新 formData.reportFuels 中的数据
-  if (formData.value.reportFuels) {
+  // 确保通过 deviceId 正确找到并更新对应的记录
+  if (formData.value.reportFuels && fuelItem.deviceId) {
     const index = formData.value.reportFuels.findIndex(
-      item => item.id === fuelItem.id || item.deviceId === fuelItem.deviceId
+      item => item.deviceId === fuelItem.deviceId
     );
+
     if (index !== -1) {
-      formData.value.reportFuels[index] = { ...fuelItem };
+      // 创建新对象,避免引用问题
+      const updatedFuel = {
+        ...formData.value.reportFuels[index],
+        customFuel: fuelItem.customFuel
+      };
+
+      // 使用 Vue.set 或直接赋值确保响应性
+      formData.value.reportFuels[index] = updatedFuel;
+
+      // 强制刷新表格
+      fuelTableKey.value += 1;
     }
   }
+
+  // 手动触发当日油耗的重新计算
+  calculateAndUpdateDailyFuel();
 }
 
 // 详情 审批 平台井 获取工作量值