Browse Source

pms 瑞都日报 任务 添加多个工作量 回显

zhangcl 2 weeks ago
parent
commit
5f9b3826d8
1 changed files with 61 additions and 7 deletions
  1. 61 7
      src/views/pms/iotprojecttask/IotProjectTaskForm.vue

+ 61 - 7
src/views/pms/iotprojecttask/IotProjectTaskForm.vue

@@ -758,6 +758,9 @@ const currentTechnologyDictLabel = ref(''); // 存储当前项目对应的施工
 // 添加一个变量来保存平台井详情数据
 const platformWellDetailsBackup = ref([]);
 
+// 存储井号到工作量列表的映射(key: wellName, value: Array<{workloadUnit, workloadDesign}>)
+const workloadMap = ref(new Map());
+
 // 工作量维护相关变量
 const workloadDialogVisible = ref(false);
 const workloadList = ref<any[]>([]);
@@ -1136,13 +1139,31 @@ const openWorkloadDialog = () => {
   workloadList.value = [];
   hasInitialWorkload.value = false;
 
-  // 如果表单中已有值,添加到首行
-  if (currentTask.value.workloadUnit && currentTask.value.workloadDesign) {
-    workloadList.value.push({
-      workloadUnit: currentTask.value.workloadUnit,
-      workloadDesign: currentTask.value.workloadDesign
-    });
-    hasInitialWorkload.value = true;
+  // 获取当前操作的井号(兼容普通井/平台井)
+  let currentWellName = '';
+  if (currentTask.value.platformWell === '1') {
+    // 平台井:取主井号(优先当前任务wellName,其次取平台井详情第一个)
+    currentWellName = currentTask.value.wellName || (currentTask.value.platformWellDetails.length > 0
+      ? currentTask.value.platformWellDetails[0].wellName : '');
+  } else {
+    // 普通井:直接取当前任务井号
+    currentWellName = currentTask.value.wellName;
+  }
+
+  // 从Map中回显当前井号的工作量数据
+  if (currentWellName && workloadMap.value.has(currentWellName)) {
+    // 深拷贝避免原数据被修改
+    workloadList.value = JSON.parse(JSON.stringify(workloadMap.value.get(currentWellName)));
+    hasInitialWorkload.value = workloadList.value.length > 0;
+  } else {
+    // 无历史数据时,沿用原有逻辑(取表单已有值初始化首行)
+    if (currentTask.value.workloadUnit && currentTask.value.workloadDesign) {
+      workloadList.value.push({
+        workloadUnit: currentTask.value.workloadUnit,
+        workloadDesign: currentTask.value.workloadDesign
+      });
+      hasInitialWorkload.value = true;
+    }
   }
 
   workloadDialogVisible.value = true;
@@ -1181,6 +1202,18 @@ const confirmWorkloadSelection = () => {
     return;
   }
 
+  // 获取当前井号并存储到Map
+  let currentWellName = '';
+  if (currentTask.value.platformWell === '1') {
+    currentWellName = currentTask.value.wellName || (currentTask.value.platformWellDetails.length > 0 ? currentTask.value.platformWellDetails[0].wellName : '');
+  } else {
+    currentWellName = currentTask.value.wellName;
+  }
+  // 深拷贝存储,避免后续修改影响Map数据
+  if (currentWellName) {
+    workloadMap.value.set(currentWellName, JSON.parse(JSON.stringify(workloadList.value)));
+  }
+
   // 如果有数据,设置第一个项到表单中(保持原有逻辑)
   if (workloadList.value.length > 0) {
     const firstItem = workloadList.value[0];
@@ -1391,6 +1424,9 @@ const syncCurrentTaskToTable = () => {
 
 // 重置任务表单
 const resetTaskForm = () => {
+  // 记录旧井号,用于清理Map
+  const oldWellName = currentTask.value.wellName;
+
   currentTask.value = {
     id: undefined,
     wellName: '',
@@ -1411,6 +1447,11 @@ const resetTaskForm = () => {
     ...(isSpecialDept.value ? { submitter: [] } : {})
   };
 
+  // 清理当前井号对应的Map数据
+  if (oldWellName && workloadMap.value.has(oldWellName)) {
+    workloadMap.value.delete(oldWellName);
+  }
+
   // 重新初始化动态属性
   initDynamicAttrsToCurrentTask();
 
@@ -1978,6 +2019,13 @@ const handlePlatformWellChange = (value) => {
       addPlatformWellDetail();
     } */
   } else {
+    // 关闭平台井时,清理所有平台井详情对应的Map数据
+    currentTask.value.platformWellDetails.forEach(detail => {
+      if (detail.wellName && workloadMap.value.has(detail.wellName)) {
+        workloadMap.value.delete(detail.wellName);
+      }
+    });
+
     // 切换到非平台井模式,保存当前数据到备份
     platformWellDetailsBackup.value = [...currentTask.value.platformWellDetails];
     // 如果有平台井详情,将第一个详情的数据设置回主任务
@@ -2014,6 +2062,12 @@ const addPlatformWellDetail = () => {
 
 // 删除平台井详情行
 const removePlatformWellDetail = (index: number) => {
+  // 获取被删除的井号,清理Map
+  const removedDetail = currentTask.value.platformWellDetails[index];
+  if (removedDetail.wellName && workloadMap.value.has(removedDetail.wellName)) {
+    workloadMap.value.delete(removedDetail.wellName);
+  }
+
   currentTask.value.platformWellDetails.splice(index, 1);
   // 删除后重新排序
   sortPlatformWellDetails();