spring
6 小时以前 a87c52ba861983052139295de5f78e00ae174051
拉丝出库调整
已修改2个文件
153 ■■■■ 文件已修改
src/api/product/outbound.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/outbound/materialOutbound.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/product/outbound.ts
@@ -57,6 +57,15 @@
    });
  },
  // 拉丝单丝二维码查询(通过单丝号)
  getTagByLsMonofilamentNumber(params: { monofilamentNumber: string }) {
    return request<BaseResult<any[]>>({
      url: "/mes/app/getTagByLsMonofilamentNumber",
      method: "GET",
      data: params,
    });
  },
  // 绞线二维码查询
  getTagByIdJx(params: { outPutId: string | number }) {
    return request<BaseResult<any>>({
src/pages/outbound/materialOutbound.vue
@@ -152,57 +152,110 @@
      return;
    }
    // 解析扫码数据,现在二维码只包含id
    let scanData;
    try {
      scanData = JSON.parse(scanCode);
    } catch (e) {
      toast.error("二维码格式错误");
      return;
    // 去掉首尾空格
    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(scanText);
      } catch (e) {
        toast.error("二维码格式错误");
        return;
      }
      outPutId = scanData.id;
      if (!outPutId) {
        toast.error("二维码格式错误,缺少id信息");
        return;
      }
      // 检查是否已存在(根据 id 判断)
      const exists = goodsList.value.some((item) => {
        const itemId = item.id;
        return itemId && itemId === outPutId && itemId !== "-";
      });
      if (exists) {
        toast.error("该条码已存在,请勿重复扫码");
        return;
      }
      // 调用接口获取绞线/拉丝详细信息(含出库状态)
      const { data } = await OutboundApi.getTagByIdAll({
        outPutId: outPutId,
      });
      const list = data || [];
      if (!list.length) {
        toast.error("未查询到条码信息");
        return;
      }
      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;
      // 拉丝不做合同号校验
    }
    const outPutId = scanData.id;
    if (!outPutId) {
      toast.error("二维码格式错误,缺少id信息");
      return;
    }
    // 检查是否已存在(根据id判断)
    const exists = goodsList.value.some((item) => {
      const itemId = item.id;
      return itemId && itemId === outPutId && itemId !== "-";
    });
    if (exists) {
      toast.error("该条码已存在,请勿重复扫码");
      return;
    }
    // 调用接口获取绞线/拉丝详细信息(含出库状态)
    const { data } = await OutboundApi.getTagByIdAll({
      outPutId: outPutId,
    });
    const list = data || [];
    if (!list.length) {
      toast.error("未查询到条码信息");
      return;
    }
    const tagData = list[0];
    // 已出库校验
    // 已出库校验(绞线 / 拉丝 通用)
    if (tagData?.state === "已出库") {
      toast.error("该条码已出库,无法重复出库");
      return;
    }
    // 合同号校验:检查扫码的合同号是否等于发货单的vsrccode
    const scannedContractNo = tagData?.contractno || "";
    if (scannedContractNo && vsrccode.value && scannedContractNo !== vsrccode.value) {
      toast.error(`合同号"${scannedContractNo}"与当前发货单为"${vsrccode.value}"不匹配`);
      return;
    // 合同号校验:只对绞线(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,
    };
    // 添加到列表