| | |
| | | <text class="value">{{ currentMaterial.materialspec || "-" }}</text> |
| | | </view> |
| | | <view class="info-line"> |
| | | <text class="label">待货数量:</text> |
| | | <text class="label">待发货数量:</text> |
| | | <text class="value">{{ currentMaterial.shippedQuantity || 0 }} 吨</text> |
| | | </view> |
| | | </view> |
| | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | // 提取数据字段(根据接口返回的数据结构) |
| | |
| | | tagData?.monofilamentNumber || |
| | | tagData?.systemno || |
| | | tagData?.systemNo || |
| | | monofilamentNumber || |
| | | "-", |
| | | model: tagData?.model || "-", |
| | | weight: tagData?.actuallylength || tagData?.actuallyLength || tagData?.weight || "-", |
| | |
| | | productuser: tagData?.productuser || "", |
| | | // 保留原始数据 |
| | | rawData: tagData, |
| | | scanCode: scanCode, |
| | | scanCode: scanText, |
| | | }; |
| | | |
| | | // 添加到列表 |
| | |
| | | uni.$on("scanMaterial", getScanCode); |
| | | }; |
| | | |
| | | // 安全解码(兼容已解码或未编码的情况) |
| | | const safeDecode = (val: any) => { |
| | | if (typeof val !== "string") return val || ""; |
| | | try { |
| | | // 如果是编码过的(包含 %),decode 一次;否则直接返回 |
| | | return val.includes("%") ? decodeURIComponent(val) : val; |
| | | } catch (e) { |
| | | return val; |
| | | } |
| | | }; |
| | | |
| | | onLoad((options: any) => { |
| | | // 从路由参数中获取物料基本信息、出库单信息和 vsrccode |
| | | currentMaterial.value = { |
| | | materialname: options.materialname || "-", |
| | | materialspec: options.materialspec || "-", |
| | | materialname: safeDecode(options.materialname || "-"), |
| | | materialspec: safeDecode(options.materialspec || "-"), |
| | | shippedQuantity: Number(options.shippedQuantity || 0), |
| | | cdeliveryid: options.cdeliveryid || "", |
| | | cdeliverybid: options.cdeliverybid || "", |
| | | materialcode: options.materialcode || "", |
| | | cdeliveryid: safeDecode(options.cdeliveryid || ""), |
| | | cdeliverybid: safeDecode(options.cdeliverybid || ""), |
| | | materialcode: safeDecode(options.materialcode || ""), |
| | | }; |
| | | vsrccode.value = options.vsrccode || ""; |
| | | }); |