spring
6 小时以前 a87c52ba861983052139295de5f78e00ae174051
src/pages/outbound/materialOutbound.vue
@@ -152,16 +152,28 @@
      return;
    }
    // 解析扫码数据,现在二维码只包含id
    // 去掉首尾空格
    const scanText = String(scanCode).trim();
    // 判断是否为 JSON 格式(绞线等原有二维码)
    const isJsonCode = scanText.startsWith("{") || scanText.startsWith("[");
    let tagData: any = null;
    let outPutId: string | number | undefined;
    let monofilamentNumber: string | undefined;
    let needContractCheck = false; // 是否需要进行合同号校验(只对绞线)
    if (isJsonCode) {
      // ===== 绞线等原有二维码逻辑(JSON) =====
    let scanData;
    try {
      scanData = JSON.parse(scanCode);
        scanData = JSON.parse(scanText);
    } catch (e) {
      toast.error("二维码格式错误");
      return;
    }
    const outPutId = scanData.id;
      outPutId = scanData.id;
    if (!outPutId) {
      toast.error("二维码格式错误,缺少id信息");
@@ -190,19 +202,60 @@
      return;
    }
    const tagData = list[0];
      tagData = list[0];
      needContractCheck = true; // 只有绞线需要做合同号校验
    } else {
      // ===== 单丝拉丝二维码逻辑(纯字符串) =====
      // 示例:ZD7z30202616101201#[@]01,Φ5.6,-,750826011001001,600.6
      // 需要提取以 75 开头的单丝号
      const parts = scanText.split(/[,\s]/).filter((p) => !!p);
      monofilamentNumber = parts.find((p) => p.startsWith("75"));
    // 已出库校验
      if (!monofilamentNumber) {
        toast.error("二维码格式错误,未找到单丝号");
        return;
      }
      // 检查是否已存在(根据单丝号判断)
      const exists = goodsList.value.some((item) => {
        const itemMono = item.monofilamentNumber;
        return itemMono && itemMono === monofilamentNumber && itemMono !== "-";
      });
      if (exists) {
        toast.error("该条码已存在,请勿重复扫码");
        return;
      }
      // 调用拉丝接口:GET /mes/app/getTagByLsMonofilamentNumber?monofilamentNumber=xxxx
      const { data } = await OutboundApi.getTagByLsMonofilamentNumber({
        monofilamentNumber,
      });
      const list = Array.isArray(data) ? data : data ? [data] : [];
      if (!list.length) {
        toast.error("未查询到条码信息");
        return;
      }
      tagData = list[0];
      outPutId = tagData?.id || monofilamentNumber;
      // 拉丝不做合同号校验
    }
    // 已出库校验(绞线 / 拉丝 通用)
    if (tagData?.state === "已出库") {
      toast.error("该条码已出库,无法重复出库");
      return;
    }
    // 合同号校验:检查扫码的合同号是否等于发货单的vsrccode
    // 合同号校验:只对绞线(JSON 场景)进行校验
    if (needContractCheck) {
    const scannedContractNo = tagData?.contractno || "";
    if (scannedContractNo && vsrccode.value && scannedContractNo !== vsrccode.value) {
      toast.error(`合同号"${scannedContractNo}"与当前发货单为"${vsrccode.value}"不匹配`);
      return;
      }
    }
    // 提取数据字段(根据接口返回的数据结构)
@@ -214,6 +267,7 @@
        tagData?.monofilamentNumber ||
        tagData?.systemno ||
        tagData?.systemNo ||
        monofilamentNumber ||
        "-",
      model: tagData?.model || "-",
      weight: tagData?.actuallylength || tagData?.actuallyLength || tagData?.weight || "-",
@@ -227,7 +281,7 @@
      productuser: tagData?.productuser || "",
      // 保留原始数据
      rawData: tagData,
      scanCode: scanCode,
      scanCode: scanText,
    };
    // 添加到列表