From 8dd12f3fb9f2c8c8b319bad323209f28429a80ef Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期二, 29 九月 2026 15:04:24 +0800
Subject: [PATCH] feat(mes): 扫码追溯适配16位纯数字编码

---
 src/api/mes/pro/bagCode/index.ts                |   10 ++++++++++
 src/views/mes/pro/components/qr-trace-modal.vue |   41 ++++++++++++-----------------------------
 2 files changed, 22 insertions(+), 29 deletions(-)

diff --git a/src/api/mes/pro/bagCode/index.ts b/src/api/mes/pro/bagCode/index.ts
index 5504d17..493647c 100644
--- a/src/api/mes/pro/bagCode/index.ts
+++ b/src/api/mes/pro/bagCode/index.ts
@@ -192,6 +192,16 @@
   );
 }
 
+/**
+ * 鎵爜杩芥函锛氭牴鎹紪鐮佽В鏋愬叾绫诲瀷锛坆ag / pallet / batch锛夈��
+ * 缂栫爜缁熶竴涓恒��16 浣嶇函鏁板瓧銆嶅悗鏃犳硶鎸夊墠缂�鍒ゆ柇绫诲瀷锛屾敼鐢卞悗绔В鏋愶紱鍧囦笉鍖归厤杩斿洖 null銆�
+ */
+export function resolveTraceType(code: string) {
+  return requestClient.get<'bag' | 'batch' | 'pallet' | null>(
+    `/mes/pro/trace/resolve-type?code=${encodeURIComponent(code)}`,
+  );
+}
+
 /** 鏌ヨ琚嬬爜鍒嗛〉 */
 export function getBagCodePage(params: MesProBagCodeApi.PageParams) {
   return requestClient.get<PageResult<MesProBagCodeApi.BagCode>>(
diff --git a/src/views/mes/pro/components/qr-trace-modal.vue b/src/views/mes/pro/components/qr-trace-modal.vue
index 7834a3f..6d75a88 100644
--- a/src/views/mes/pro/components/qr-trace-modal.vue
+++ b/src/views/mes/pro/components/qr-trace-modal.vue
@@ -11,7 +11,7 @@
 
   import { Button, Empty, Input, message, Spin, Tag } from "ant-design-vue";
 
-  import { getBagCodeByCode } from "#/api/mes/pro/bagCode";
+  import { getBagCodeByCode, resolveTraceType } from "#/api/mes/pro/bagCode";
   import { getBatchByCode } from "#/api/mes/pro/batch";
   import { getPalletByCode } from "#/api/mes/pro/pallet";
   import { getQrConfig } from "#/api/mes/trace/config";
@@ -72,24 +72,6 @@
     return trimmed;
   }
 
-  /** 璇嗗埆浜岀淮鐮佸唴瀹圭被鍨嬶細鎵规鍙凤紙鍚复鏃舵壒娆$爜锛�/ 鎵樼洏鐮侊紙鍚复鏃舵墭鐩樼爜锛�/ 琚嬬爜 */
-  function resolveCodeType(raw: string): TraceType | undefined {
-    const value = raw.trim().toUpperCase();
-    if (/^PB-\d{8}$/.test(value)) {
-      return "batch";
-    }
-    if (/^PL-\d{8}$/.test(value)) {
-      return "pallet";
-    }
-    if (/^.*-P\d{2}$/.test(value)) {
-      return "pallet";
-    }
-    if (/^BAG-\d{8}$/.test(value) || /^.*-\d{4}$/.test(value)) {
-      return "bag";
-    }
-    return "batch";
-  }
-
   function resetState() {
     currentCode.value = undefined;
     traceType.value = undefined;
@@ -113,11 +95,6 @@
       message.warning("浜岀淮鐮佸唴瀹硅繃闀匡紝璇锋鏌ユ槸鍚︽壂鎻忔纭�");
       return;
     }
-    const type = resolveCodeType(value);
-    if (!type) {
-      message.warning("鏃犳硶璇嗗埆浜岀淮鐮佺被鍨�");
-      return;
-    }
     loading.value = true;
     searched.value = true;
     searchError.value = false;
@@ -128,15 +105,21 @@
     palletTrace.value = undefined;
     batchTrace.value = undefined;
     try {
-      if (type === "batch") {
-        batchTrace.value = await getBatchByCode(value);
-        traceTypeLabel.value = "鎵规鍙�";
+      // 缂栫爜宸茬粺涓�涓恒��16 浣嶇函鏁板瓧銆嶏紝鏃犳硶鍐嶆寜鍓嶇紑鍒ゆ柇绫诲瀷锛屾敼鐢卞悗绔寜缂栫爜瑙f瀽绫诲瀷
+      const type = await resolveTraceType(value);
+      if (type === "bag") {
+        bagTrace.value = await getBagCodeByCode(value);
+        traceTypeLabel.value = "琚嬬爜";
       } else if (type === "pallet") {
         palletTrace.value = await getPalletByCode(value);
         traceTypeLabel.value = "鎵樼洏鐮�";
+      } else if (type === "batch") {
+        batchTrace.value = await getBatchByCode(value);
+        traceTypeLabel.value = "鎵规鍙�";
       } else {
-        bagTrace.value = await getBagCodeByCode(value);
-        traceTypeLabel.value = "琚嬬爜";
+        searchError.value = true;
+        currentCode.value = undefined;
+        return;
       }
       traceType.value = type;
     } catch {

--
Gitblit v1.9.3