Forráskód Böngészése

pms 瑞鹰项目分配任务 挂靠队伍 施工设备非必填

zhangcl 6 napja
szülő
commit
5b9a6ccf2e
1 módosított fájl, 74 hozzáadás és 3 törlés
  1. 74 3
      src/views/pms/iotprojecttask/IotProjectTaskForm.vue

+ 74 - 3
src/views/pms/iotprojecttask/IotProjectTaskForm.vue

@@ -844,6 +844,10 @@ const workloadDialogVisible = ref(false);
 const workloadList = ref<any[]>([]);
 const hasInitialWorkload = ref(false);
 
+// 跟踪设备列表是否为空
+const hasDevicesAvailable = ref(false); // 默认假设有设备,等接口返回后更新
+
+
 // 设计工作量错误信息
 const workloadDesignError = ref('');
 
@@ -1075,7 +1079,7 @@ const taskFormRules = computed(() => {
     ],
     workloadUnit: [{ required: currentTask.value.platformWell !== '1', message: '工作量单位不能为空', trigger: 'change' }],
     deptIds: [{ required: true, message: '施工队伍不能为空', trigger: 'change' }],
-    deviceIds: [{ required: true, message: '施工设备不能为空', trigger: 'change' }],
+    deviceIds: [{ required: hasDevicesAvailable.value, message: '施工设备不能为空', trigger: 'change' }],
     responsiblePerson: [
       {
         required: true,
@@ -1232,6 +1236,9 @@ const openDeviceDialogForForm = async () => {
     };
     const data = await IotDeviceApi.getDevicesByDepts(params);
 
+    // 更新 hasDevicesAvailable 状态
+    hasDevicesAvailable.value = data && data.length > 0;
+
     // 更新设备映射表
     const newDeviceMap = {...deviceMap.value};
     data.forEach(device => {
@@ -1242,9 +1249,16 @@ const openDeviceDialogForForm = async () => {
     filteredDeviceList.value = data;
     deviceDialogVisible.value = true;
 
+    // 如果没有设备可用,显示提示信息
+    if (!hasDevicesAvailable.value) {
+      ElMessage.info('当前施工队伍下没有可用设备,设备字段为非必填项');
+    }
+
   } catch (error) {
     ElMessage.error('获取设备列表失败');
     console.error('获取设备列表失败:', error);
+    // 如果获取失败,也设为非必填,避免用户无法提交
+    hasDevicesAvailable.value = false;
   }
 };
 
@@ -1847,6 +1861,34 @@ const open = async () => {
         currentTask.value = JSON.parse(JSON.stringify(tableData.value[0]));
         isNewTask.value = false;
 
+        // 如果当前任务有施工队伍,立即查询设备并更新 hasDevicesAvailable
+        if (currentTask.value.deptIds && currentTask.value.deptIds.length > 0) {
+          try {
+            const params = {
+              deptIds: currentTask.value.deptIds
+            };
+            const deviceData = await IotDeviceApi.getDevicesByDepts(params);
+
+            // 更新 hasDevicesAvailable 状态
+            hasDevicesAvailable.value = deviceData && deviceData.length > 0;
+
+            // 更新设备列表和映射表(如果有设备)
+            if (hasDevicesAvailable.value) {
+              deviceList.value = deviceData;
+              deviceMap.value = {};
+              deviceData.forEach(device => {
+                deviceMap.value[device.id] = device;
+              });
+            }
+          } catch (error) {
+            console.error('初始化查询设备失败:', error);
+            hasDevicesAvailable.value = false;
+          }
+        } else {
+          // 如果没有施工队伍,默认没有设备可用
+          hasDevicesAvailable.value = false;
+        }
+
         // 处理平台井数据
         // 将数字类型的 platformWell 转换为字符串类型
         currentTask.value.platformWell = currentTask.value.platformWell?.toString() || '0';
@@ -1982,7 +2024,8 @@ const validateAllRows = (): boolean => {
       allValid = false;
     }
 
-    if (!row.deviceIds || row.deviceIds.length === 0) {
+    // 修改:只有当有设备可用时才验证设备字段
+    if (hasDevicesAvailable.value && (!row.deviceIds || row.deviceIds.length === 0)) {
       allValid = false;
     }
 
@@ -2700,22 +2743,50 @@ watch(() => currentTask.value.workloadDesign, () => {
 });
 
 // 监听当前任务的变化,设置默认展开的keys
-watch(() => currentTask.value.deptIds, (newVal) => {
+watch(() => currentTask.value.deptIds, (newVal, oldVal) => {
   if (newVal && newVal.length > 0) {
     defaultExpandedKeys.value = [...newVal];
   }
+
+  // 【新增】施工队伍变化时,重新查询设备并更新状态
+  const params = {
+    deptIds: newVal
+  };
+  /* IotDeviceApi.getDevicesByDepts(params).then(data => {
+    // 更新 hasDevicesAvailable 状态
+    hasDevicesAvailable.value = data && data.length > 0;
+
+    // 更新设备列表和映射表
+    if (hasDevicesAvailable.value) {
+      const newDeviceMap = {...deviceMap.value};
+      data.forEach(device => {
+        newDeviceMap[device.id] = device;
+      });
+      deviceMap.value = newDeviceMap;
+    }
+  }).catch(error => {
+    console.error('施工队伍变化时查询设备失败:', error);
+    hasDevicesAvailable.value = false;
+  }); */
+
   if (!newVal || newVal.length === 0) {
     // 清空施工队伍时,同时清空相关人员和设备
     currentTask.value.responsiblePerson = [];
     currentTask.value.submitter = [];
     currentTask.value.deviceIds = [];
 
+    // 重置设备可用状态
+    hasDevicesAvailable.value = true;
+
     // 清除相关字段的验证状态
     nextTick(() => {
       taskFormRef.value?.validateField('responsiblePerson');
       taskFormRef.value?.validateField('submitter');
       taskFormRef.value?.validateField('deviceIds');
     });
+  } else if (newVal !== oldVal) {
+    // 施工队伍发生变化时,重置设备可用状态(因为不同队伍可能有不同的设备)
+    // hasDevicesAvailable.value = true;
   }
 }, { immediate: true, deep: true });