liyong
2 天以前 93b8ceac34e2fbd5c57fe5ab4f5bac32c85408aa
src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue
@@ -49,11 +49,8 @@
          </template>
        </el-table-column>
        <!-- 批号多选 -->
        <el-table-column min-width="200">
          <template #header>
            <span style="color: #f56c6c; margin-right: 4px;">*</span>
            <span>批号</span>
          </template>
        <el-table-column min-width="200"
                         label="批号">
          <template #default="{ row }">
            <el-select v-model="row.batchNo"
                       multiple
@@ -114,6 +111,7 @@
        <span class="dialog-footer">
          <el-button type="primary"
                     :loading="materialSaving"
                     :disabled="isSaveDisabled"
                     @click="handleMaterialSave">保存</el-button>
          <el-button @click="dialogVisible = false">取消</el-button>
        </span>
@@ -158,6 +156,33 @@
  const materialTableLoading = ref(false);
  const materialSaving = ref(false);
  const materialTableData = ref([]);
  const isSaveDisabled = computed(() => {
    if (materialTableData.value.length === 0) return true;
    return !materialTableData.value.some(row => {
      // 检查是否有任何用户输入内容
      const hasBatch = Array.isArray(row.batchNo) && row.batchNo.length > 0;
      const hasPickQty =
        row.pickQty !== null && row.pickQty !== undefined && row.pickQty !== 0;
      if (row.bom) {
        // 对于来自BOM的行,输入框只有“批号”和“领用数量”
        return hasBatch || hasPickQty;
      } else {
        // 对于新增行,输入框包括“工序”、“原料”、“需求数量”、“批号”和“领用数量”
        const hasOperation = !!row.operationName;
        const hasMaterial = !!row.materialName;
        const hasDemanded =
          row.demandedQuantity !== null &&
          row.demandedQuantity !== undefined &&
          row.demandedQuantity !== 0;
        return (
          hasBatch || hasPickQty || hasOperation || hasMaterial || hasDemanded
        );
      }
    });
  });
  const processOptions = ref([]);
  const currentMaterialSelectRowIndex = ref(-1);
  let materialTempId = 0;
@@ -313,14 +338,22 @@
      item =>
        !item.operationName ||
        !item.materialName ||
        !item.batchNo ||
        item.batchNo.length === 0 ||
        (Number(item.pickQty) > 0 &&
          (!item.batchNo || item.batchNo.length === 0)) ||
        (item.batchNo && item.batchNo.length > 0 && Number(item.pickQty) <= 0) ||
        item.demandedQuantity === null ||
        item.demandedQuantity === undefined ||
        item.pickQty === null ||
        item.pickQty === undefined
    );
    if (invalidRow) {
      if (
        invalidRow.batchNo &&
        invalidRow.batchNo.length > 0 &&
        Number(invalidRow.pickQty) <= 0
      ) {
        return { valid: false, message: "选择了批号时,领用数量必须大于零" };
      }
      return { valid: false, message: "请完善工序、原料、批号和数量后再保存" };
    }
    return { valid: true, message: "" };