瀏覽代碼

Merge branch 'materials'

zhangcl 1 周之前
父節點
當前提交
045ab51d8b
共有 1 個文件被更改,包括 38 次插入8 次删除
  1. 38 8
      src/views/pms/iotmainworkorder/IotMainWorkOrderOptimize.vue

+ 38 - 8
src/views/pms/iotmainworkorder/IotMainWorkOrderOptimize.vue

@@ -1619,8 +1619,17 @@ const queryParams = reactive({
 
 // 获取指定bomNodeId的物料数量
 const getMaterialCount = (bomNodeId: number) => {
-  console.log('当前BOM节点:' + bomNodeId)
-  return materialList.value.filter(item => item.bomNodeId === bomNodeId).length
+  const uniqueKey = `${bomNodeId}`;
+  const materials = bomMaterialsMap.value[uniqueKey] || [];
+
+  // 只计算有效的物料数量
+  return materials.filter(material =>
+    !isMaterialDisabled(material) &&
+    material.materialName &&
+    material.unit &&
+    (material.unitPrice || 0) > 0 &&
+    (material.quantity || 0) > 0
+  ).length;
 }
 
 // 校验保养项下物料数据的方法
@@ -1808,10 +1817,17 @@ const submitForm = async () => {
         ? item.lastNaturalDate
         : (item.lastNaturalDate ? dayjs(item.lastNaturalDate).valueOf() : null)
     }));
+
+    // 从 bomMaterialsMap 获取所有物料数据,而不是 materialList
+    const allMaterials = [];
+    for (const key in bomMaterialsMap.value) {
+      allMaterials.push(...bomMaterialsMap.value[key]);
+    }
+
     const data = {
       mainWorkOrder: formData.value,
       mainWorkOrderBom: convertedList,
-      mainWorkOrderMaterials: materialList.value
+      mainWorkOrderMaterials: allMaterials
     }
     await IotMainWorkOrderApi.fillWorkOrder(data)
     message.success(t('common.createSuccess'))
@@ -2258,7 +2274,7 @@ const validateTableData = (): boolean => {
   if (formData.value.outsourcingFlag !== 1) {
     list.value.forEach((row, index) => {
       const rowNumber = index + 1;
-      const deviceIdentifier = `${row.deviceCode}-${row.name}`;
+      const deviceIdentifier = `${row.deviceCode}-${formatMaintItemName(row.name)}`;
 
       // 检查消耗物料规则,如果为1(不消耗物料)则跳过校验
       if (row.rule === 1) {
@@ -2271,10 +2287,24 @@ const validateTableData = (): boolean => {
         (row.delayNaturalDate || 0) > 0 ||
         (row.delayDuration || 0) > 0;
 
-      // 未设置推迟保养且未选择物料
-      if (!hasDelay && getMaterialCount(row.bomNodeId) === 0) {
-        materialRequiredErrors.push(`第${rowNumber}行【${deviceIdentifier}】未添加物料`);
-        isValid = false;
+      // 未设置推迟保养时,需要校验物料
+      if (!hasDelay) {
+        // 使用 bomMaterialsMap 获取物料,更可靠
+        const uniqueKey = `${row.bomNodeId}`;
+        const materials = bomMaterialsMap.value[uniqueKey] || [];
+
+        // 过滤有效的物料(非禁用、非无效状态)
+        const validMaterials = materials.filter(material =>
+          material.materialName && // 物料名称不为空
+          material.unit && // 单位不为空
+          (material.unitPrice || 0) > 0 && // 单价大于0
+          (material.quantity || 0) > 0 // 数量大于0
+        );
+
+        if (validMaterials.length === 0) {
+          materialRequiredErrors.push(`第${rowNumber}行【${deviceIdentifier}】未添加有效物料`);
+          isValid = false;
+        }
       }
     });
   }