gongchunyi
2026-07-08 0a251e40e30e7c8a96d71b3b9b6c459d4dfa4b22
src/views/productionManagement/workOrderManagement/index.vue
@@ -133,7 +133,7 @@
          <el-input v-model.number="reportForm.quantity"
                    type="number"
                    min="0"
                    step="1"
                    step="0.0001"
                    style="width: 300px"
                    placeholder="请输入生产合格数量"
                    @input="handleQuantityInput" />
@@ -143,7 +143,7 @@
          <el-input v-model.number="reportForm.scrapQty"
                    type="number"
                    min="0"
                    step="1"
                    step="0.0001"
                    style="width: 300px"
                    placeholder="请输入报废数量"
                    @input="handleScrapQtyInput" />
@@ -160,6 +160,17 @@
                       :label="user.nickName"
                       :value="user.userId" />
          </el-select>
        </el-form-item>
        <!-- 工时 -->
        <el-form-item label="工时"
                      v-if="currentReportRowData?.type == 0"
                      prop="workHour">
          <el-input v-model.number="reportForm.workHour"
                    type="number"
                    min="0"
                    style="width: 280px"
                    placeholder="请输入工时" /><span style="margin-left:10px"
                class="param-unit">h</span>
        </el-form-item>
        <div v-if="params.length > 0"
             class="param-grid"
@@ -234,6 +245,7 @@
      <template #footer>
        <span class="dialog-footer">
          <el-button type="primary"
                     :loading="reportLoading"
                     @click="handleReport">确定</el-button>
          <el-button @click="reportDialogVisible = false">取消</el-button>
        </span>
@@ -352,12 +364,12 @@
      dataType: "action",
      fixed: "right",
      operation: [
        {
        /*{
          name: "流转卡",
          clickFun: row => {
            downloadAndPrintWorkOrder(row);
          },
        },
        },*/
        {
          name: "附件",
          clickFun: row => {
@@ -403,6 +415,7 @@
  const transferCardQrUrl = ref("");
  const transferCardRowData = ref(null);
  const reportDialogVisible = ref(false);
  const reportLoading = ref(false);
  const fileDialogVisible = ref(false);
  const currentWorkOrderId = ref(null);
  const reportFormRef = ref(null);
@@ -410,7 +423,7 @@
  const reportForm = reactive({
    planQuantity: 0,
    quantity: null,
    scrapQty: null,
    scrapQty: 0,
    userName: "",
    workOrderId: "",
    reportWork: "",
@@ -419,6 +432,7 @@
    productMainId: null,
    productionOrderRoutingOperationId: "",
    productionOrderId: "",
    workHour: 0,
    paramGroups: {},
  });
@@ -433,8 +447,7 @@
      return;
    }
    const num = Number(value);
    // 整数且大于等于1
    if (isNaN(num) || !Number.isInteger(num) || num < 0) {
    if (isNaN(num) || num < 0) {
      callback(new Error("生产合格数量必须大于等于0"));
      return;
    }
@@ -448,8 +461,7 @@
      return;
    }
    const num = Number(value);
    // 整数且大于等于0
    if (isNaN(num) || !Number.isInteger(num) || num < 0) {
    if (isNaN(num) || num < 0) {
      callback(new Error("报废数量必须大于等于0"));
      return;
    }
@@ -472,20 +484,8 @@
    if (isNaN(num)) {
      return;
    }
    // 如果小于1,清除
    if (num < 0) {
      reportForm.quantity = null;
      return;
    }
    // 如果是小数取整数部分
    if (!Number.isInteger(num)) {
      const intValue = Math.floor(num);
      // 如果取整后小于1,清除
      if (intValue < 0) {
        reportForm.quantity = null;
        return;
      }
      reportForm.quantity = intValue;
      return;
    }
    reportForm.quantity = num;
@@ -498,21 +498,13 @@
      return;
    }
    const num = Number(value);
    // 如果是NaN,保持原值
    if (isNaN(num)) {
      return;
    }
    // 如果是负数,清除输入
    if (num < 0) {
      reportForm.scrapQty = null;
      return;
    }
    // 如果是小数,取整数部分
    if (!Number.isInteger(num)) {
      reportForm.scrapQty = Math.floor(num);
      return;
    }
    // 有效的非负整数(包括0)
    reportForm.scrapQty = num;
  };
@@ -538,6 +530,12 @@
    if (n <= 0) return 0;
    if (n >= 100) return 100;
    return Math.round(n);
  };
  const subtractQuantity = (minuend, subtrahend, precision = 4) => {
    const factor = 10 ** precision;
    const a = Math.round((Number(minuend) || 0) * factor);
    const b = Math.round((Number(subtrahend) || 0) * factor);
    return Math.max(0, (a - b) / factor);
  };
  const progressColor = percentage => {
    const p = toProgressPercentage(percentage);
@@ -661,18 +659,24 @@
      }
    }
    currentReportRowData.value = row;
    reportForm.planQuantity = row.planQuantity;
    reportForm.planQuantity = subtractQuantity(
      row.planQuantity,
      row.completeQuantity
    );
    reportForm.quantity =
      row.quantity !== undefined && row.quantity !== null ? row.quantity : null;
    reportForm.productProcessRouteItemId = row.productProcessRouteItemId;
    reportForm.workOrderId = row.id;
    reportForm.reportWork = row.reportWork;
    reportForm.productMainId = row.productMainId;
    reportForm.scrapQty =
      row.scrapQty !== undefined && row.scrapQty !== null ? row.scrapQty : null;
    reportForm.productionOrderRoutingOperationId =
      row.productionOrderRoutingOperationId;
    reportForm.scrapQty = 0;
    reportForm.productionOrderRoutingOperationId = row.productionOrderRoutingOperationId;
    reportForm.productionOrderId = row.productionOrderId;
    if (row.type == 0) {
      reportForm.workHour = row.workHour || 0;
    } else {
      reportForm.workHour = 0;
    }
    nextTick(() => {
      reportFormRef.value?.clearValidate();
      if (row.productionOrderRoutingOperationId && row.productionOrderId) {
@@ -772,9 +776,11 @@
        productionOrderRoutingOperationId:
          reportForm.productionOrderRoutingOperationId,
        productionOrderId: reportForm.productionOrderId,
        workHour: reportForm.workHour,
        productionOperationParamList: productionOperationParamList,
      };
      reportLoading.value = true;
      addProductMain(submitParams)
        .then(res => {
          proxy.$modal.msgSuccess("报工成功");
@@ -785,6 +791,9 @@
          ElMessageBox.alert("报工失败", "提示", {
            confirmButtonText: "确定",
          });
        })
        .finally(() => {
          reportLoading.value = false;
        });
    });
  };