From 18ab40a9f83b9c5c1070da622f6c83020254f22b Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期一, 02 二月 2026 09:56:43 +0800
Subject: [PATCH] fix(出库): 修复扫码逻辑并增加重复条码校验
---
src/pages/outbound/materialOutbound.vue | 228 ++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 161 insertions(+), 67 deletions(-)
diff --git a/src/pages/outbound/materialOutbound.vue b/src/pages/outbound/materialOutbound.vue
index bfb7a63..bad1b8d 100644
--- a/src/pages/outbound/materialOutbound.vue
+++ b/src/pages/outbound/materialOutbound.vue
@@ -7,14 +7,14 @@
type="icon"
icon="scan"
color="#0d867f"
- @click="openScan"
style="color: #0d867f"
+ @click="openScan"
></wd-button>
</template>
</CardTitle>
<!-- 褰撳墠鐗╂枡淇℃伅 -->
- <view class="material-info" v-if="currentMaterial">
+ <view v-if="currentMaterial" class="material-info">
<wd-card custom-class="info-card">
<view class="info-compact">
<view class="icon_box">
@@ -55,26 +55,28 @@
<text class="outbound_item_label">鐢熶骇鎵规鍙凤細</text>
<text class="outbound_item_value">{{ item.monofilamentNumber || "-" }}</text>
</view>
- <view class="outbound_item_row">
- <text class="outbound_item_label">瑙勬牸鍨嬪彿锛�</text>
- <text class="outbound_item_value">{{ item.model || "-" }}</text>
- </view>
- <view class="outbound_item_row">
- <text class="outbound_item_label">閲嶉噺锛�</text>
- <text class="outbound_item_value">{{ item.weight || "-" }} kg</text>
- </view>
- <view class="outbound_item_row">
- <text class="outbound_item_label">鍘傚锛�</text>
- <text class="outbound_item_value">{{ item.clienteleName || "-" }}</text>
- </view>
- <view class="outbound_item_row">
- <text class="outbound_item_label">娈甸暱锛�</text>
- <text class="outbound_item_value">{{ item.actuallyLength || "-" }} M</text>
- </view>
- <view class="outbound_item_row">
- <text class="outbound_item_label">鐢熶骇鏃ユ湡锛�</text>
- <text class="outbound_item_value">{{ item.productionDate || "-" }}</text>
- </view>
+ <template v-if="!item.isMesMissing">
+ <view class="outbound_item_row">
+ <text class="outbound_item_label">瑙勬牸鍨嬪彿锛�</text>
+ <text class="outbound_item_value">{{ item.model || "-" }}</text>
+ </view>
+ <view class="outbound_item_row">
+ <text class="outbound_item_label">閲嶉噺锛�</text>
+ <text class="outbound_item_value">{{ item.weight || "-" }} kg</text>
+ </view>
+ <view class="outbound_item_row">
+ <text class="outbound_item_label">鍘傚锛�</text>
+ <text class="outbound_item_value">{{ item.clienteleName || "-" }}</text>
+ </view>
+ <view class="outbound_item_row">
+ <text class="outbound_item_label">娈甸暱锛�</text>
+ <text class="outbound_item_value">{{ item.actuallyLength || "-" }} M</text>
+ </view>
+ <view class="outbound_item_row">
+ <text class="outbound_item_label">鐢熶骇鏃ユ湡锛�</text>
+ <text class="outbound_item_value">{{ item.productionDate || "-" }}</text>
+ </view>
+ </template>
</view>
</view>
<view class="outbound_item_action">
@@ -91,7 +93,7 @@
<!-- 搴曢儴鎸夐挳 -->
<view v-if="goodsList.length > 0" class="outbound_footer">
- <wd-button block @click="handleOutbound" style="background: #0d867f">
+ <wd-button block style="background: #0d867f" @click="handleOutbound">
<text class="text-[#fff]">鍑哄簱</text>
</wd-button>
</view>
@@ -124,6 +126,19 @@
// 鏍煎紡鍖栨椂闂�
const formatTime = (date: Date) => {
return dayjs(date).format("YYYY-MM-DD HH:mm:ss");
+};
+
+const handleMonofilamentNumber = (value?: string) => {
+ if (!value) return "";
+ if (!value.includes("-")) {
+ if (value.length < 3) {
+ toast.error("鍗曚笣缂栧彿闀垮害涓嶈冻锛屾棤娉曟坊鍔� '-'");
+ return "";
+ }
+ const insertIndex = value.length - 3;
+ return `${value.slice(0, insertIndex)}-${value.slice(insertIndex)}`;
+ }
+ return value;
};
// 鐩存帴鎵爜
@@ -161,49 +176,62 @@
let tagData: any = null;
let outPutId: string | number | undefined;
let monofilamentNumber: string | undefined;
- let needContractCheck = false; // 鏄惁闇�瑕佽繘琛屽悎鍚屽彿鏍¢獙锛堝彧瀵圭粸绾匡級
if (isJsonCode) {
// ===== 缁炵嚎绛夊師鏈変簩缁寸爜閫昏緫锛圝SON锛� =====
let scanData;
try {
scanData = JSON.parse(scanText);
- } catch (e) {
+ } catch {
toast.error("浜岀淮鐮佹牸寮忛敊璇�");
return;
}
outPutId = scanData.id;
+ monofilamentNumber = scanData.monofilamentNumber;
- if (!outPutId) {
- toast.error("浜岀淮鐮佹牸寮忛敊璇紝缂哄皯id淇℃伅");
+ if (outPutId) {
+ //TODO鍏煎鐩墠宸叉墦鍗扮殑浜岀淮鐮�
+ // 鏈� id锛氭寜 id 鏌ラ噸骞惰皟 getTagByIdAll锛堣繑鍥炴暟缁勶級
+ 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,
+ });
+ tagData = data;
+ if (!tagData) {
+ toast.error("鏈煡璇㈠埌鏉$爜淇℃伅");
+ return;
+ }
+ } else if (monofilamentNumber) {
+ // 鏈� monofilamentNumber锛氭寜鍗曚笣鍙锋煡閲嶅苟璋� getTagByMonofilamentNumber锛堣繑鍥炲璞★級
+ const exists = goodsList.value.some((item) => {
+ const itemMono = item.monofilamentNumber;
+ return itemMono && itemMono === monofilamentNumber && itemMono !== "-";
+ });
+ if (exists) {
+ toast.error("璇ユ潯鐮佸凡瀛樺湪锛岃鍕块噸澶嶆壂鐮�");
+ return;
+ }
+ const { data } = await OutboundApi.getTagByMonofilamentNumber({
+ monofilamentNumber,
+ });
+ if (!data || (Array.isArray(data) && !data.length)) {
+ toast.error("鏈煡璇㈠埌鏉$爜淇℃伅");
+ return;
+ }
+ tagData = Array.isArray(data) ? data[0] : data;
+ outPutId = tagData?.id || monofilamentNumber;
+ } else {
+ 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 {
// ===== 鍗曚笣鎷変笣浜岀淮鐮侀�昏緫锛堢函瀛楃涓诧級 =====
// 绀轰緥锛歓D7z30202616101201#[@]01,桅5.6,-,750826011001001,600.6
@@ -227,14 +255,56 @@
return;
}
- // 璋冪敤鎷変笣鎺ュ彛锛欸ET /mes/app/getTagByLsMonofilamentNumber?monofilamentNumber=xxxx
- const { data } = await OutboundApi.getTagByLsMonofilamentNumber({
- monofilamentNumber,
- });
+ // 璋冪敤鎷変笣鎺ュ彛锛欸ET /mes/app/getTagByMonofilamentNumber?monofilamentNumber=xxxx
+ let data;
+ try {
+ const response = await OutboundApi.getTagByMonofilamentNumber({
+ monofilamentNumber,
+ });
+ data = response.data;
+ } catch {
+ data = null;
+ }
const list = Array.isArray(data) ? data : data ? [data] : [];
if (!list.length) {
- toast.error("鏈煡璇㈠埌鏉$爜淇℃伅");
+ const formattedMonofilamentNumber = handleMonofilamentNumber(monofilamentNumber);
+ 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涓敓浜�",
+ monofilamentNumber: formattedMonofilamentNumber,
+ model: "-",
+ weight: "-",
+ clienteleName: "-",
+ actuallyLength: "-",
+ productionDate: "-",
+ type: "鎷変笣",
+ devicemodel: "",
+ state: "",
+ projectId: "",
+ productuser: "",
+ rawData: null,
+ scanCode: scanText,
+ scanTime: formatTime(new Date()),
+ isMesMissing: true,
+ };
+ goodsList.value.push(newItem);
+ toast.success("鎵爜鎴愬姛");
return;
}
@@ -248,15 +318,15 @@
toast.error("璇ユ潯鐮佸凡鍑哄簱锛屾棤娉曢噸澶嶅嚭搴�");
return;
}
-
- // 鍚堝悓鍙锋牎楠岋細鍙缁炵嚎锛圝SON 鍦烘櫙锛夎繘琛屾牎楠�
- if (needContractCheck) {
- const scannedContractNo = tagData?.contractno || "";
- if (scannedContractNo && vsrccode.value && scannedContractNo !== vsrccode.value) {
- toast.error(`鍚堝悓鍙�"${scannedContractNo}"涓庡綋鍓嶅彂璐у崟涓�"${vsrccode.value}"涓嶅尮閰峘);
- return;
- }
- }
+ //
+ // // 鍚堝悓鍙锋牎楠岋細鍙缁炵嚎锛圝SON 鍦烘櫙锛夎繘琛屾牎楠�
+ // if (needContractCheck) {
+ // const scannedContractNo = tagData?.contractno || "";
+ // if (scannedContractNo && vsrccode.value && scannedContractNo !== vsrccode.value) {
+ // toast.error(`鍚堝悓鍙�"${scannedContractNo}"涓庡綋鍓嶅彂璐у崟涓�"${vsrccode.value}"涓嶅尮閰峘);
+ // return;
+ // }
+ // }
// 鎻愬彇鏁版嵁瀛楁锛堟牴鎹帴鍙h繑鍥炵殑鏁版嵁缁撴瀯锛�
const parsedData = {
@@ -283,6 +353,29 @@
rawData: tagData,
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 = {
@@ -370,6 +463,7 @@
const requestData = goodsList.value.map((item) => ({
outPutId: item.id,
projectId: item.projectId || "",
+ monofilamentNumber: item.monofilamentNumber || "",
}));
// 鎸夊嚭搴撳崟鏄庣粏鏋勫缓璇锋眰浣�
@@ -425,7 +519,7 @@
try {
// 濡傛灉鏄紪鐮佽繃鐨勶紙鍖呭惈 %锛夛紝decode 涓�娆★紱鍚﹀垯鐩存帴杩斿洖
return val.includes("%") ? decodeURIComponent(val) : val;
- } catch (e) {
+ } catch {
return val;
}
};
--
Gitblit v1.9.3