buhuazhen
5 天以前 18ab40a9f83b9c5c1070da622f6c83020254f22b
fix(出库): 修复扫码逻辑并增加重复条码校验

- 移除合同号校验逻辑,改为类型一致性检查
- 增加单丝号重复扫码校验,防止重复添加相同条码
- 修复绞线数据查询逻辑,直接使用返回数据而非数组第一项
- 为手动输入单丝号场景设置默认类型为"拉丝"
已修改1个文件
63 ■■■■ 文件已修改
src/pages/outbound/materialOutbound.vue 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/outbound/materialOutbound.vue
@@ -176,7 +176,6 @@
    let tagData: any = null;
    let outPutId: string | number | undefined;
    let monofilamentNumber: string | undefined;
    let needContractCheck = false; // 是否需要进行合同号校验(只对绞线)
    if (isJsonCode) {
      // ===== 绞线等原有二维码逻辑(JSON) =====
@@ -205,13 +204,11 @@
        const { data } = await OutboundApi.getTagByIdAll({
          outPutId: outPutId,
        });
        const list = data || [];
        if (!list.length) {
        tagData = data;
        if (!tagData) {
          toast.error("未查询到条码信息");
          return;
        }
        tagData = list[0];
        needContractCheck = true;
      } else if (monofilamentNumber) {
        // 有 monofilamentNumber:按单丝号查重并调 getTagByMonofilamentNumber(返回对象)
        const exists = goodsList.value.some((item) => {
@@ -231,7 +228,6 @@
        }
        tagData = Array.isArray(data) ? data[0] : data;
        outPutId = tagData?.id || monofilamentNumber;
        needContractCheck = true;
      } else {
        toast.error("二维码格式错误,缺少id或单丝编号信息");
        return;
@@ -276,6 +272,18 @@
        if (!formattedMonofilamentNumber) {
          return;
        }
        // 检查是否已存在(针对手动处理后的单丝号进行去重)
        const isDuplicate = goodsList.value.some((item) => {
          const itemMono = item.monofilamentNumber;
          return itemMono && itemMono === formattedMonofilamentNumber;
        });
        if (isDuplicate) {
          toast.error(`条码"${formattedMonofilamentNumber}"已存在,请勿重复扫码`);
          return;
        }
        const newItem = {
          id: monofilamentNumber || "-",
          contractNo: "未在mes中生产",
@@ -285,7 +293,7 @@
          clienteleName: "-",
          actuallyLength: "-",
          productionDate: "-",
          type: "",
          type: "拉丝",
          devicemodel: "",
          state: "",
          projectId: "",
@@ -310,15 +318,15 @@
      toast.error("该条码已出库,无法重复出库");
      return;
    }
    // 合同号校验:只对绞线(JSON 场景)进行校验
    if (needContractCheck) {
      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;
    //   }
    // }
    // 提取数据字段(根据接口返回的数据结构)
    const parsedData = {
@@ -346,6 +354,29 @@
      scanCode: scanText,
    };
    // 再次检查是否已存在(针对手动处理后的单丝号进行去重)
    const isDuplicate = goodsList.value.some((item) => {
      const itemMono = item.monofilamentNumber;
      const currentMono = parsedData.monofilamentNumber;
      return itemMono && itemMono === currentMono && itemMono !== "-";
    });
    if (isDuplicate) {
      toast.error(`条码"${parsedData.monofilamentNumber}"已存在,请勿重复扫码`);
      return;
    }
    // 检查类型是否一致
    if (goodsList.value.length > 0) {
      const firstItemType = goodsList.value[0].type;
      const currentType = parsedData.type;
      // 如果类型不一致,提示错误
      if (firstItemType && currentType && firstItemType !== currentType) {
        toast.error(`目前只能进行${firstItemType}出库`);
        return;
      }
    }
    // 添加到列表
    const newItem = {
      ...parsedData,