From 9f1324fb9e73e5b53ac67542227e63cdc0b505ba Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 09 七月 2026 15:44:53 +0800
Subject: [PATCH] 手机扫码改为PDA扫码

---
 src/pages/works.vue |  166 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 107 insertions(+), 59 deletions(-)

diff --git a/src/pages/works.vue b/src/pages/works.vue
index fc7eed5..d3c5d17 100644
--- a/src/pages/works.vue
+++ b/src/pages/works.vue
@@ -299,6 +299,8 @@
         </up-grid>
       </view>
     </view>
+    <PdaScan :active="pdaScanActive"
+             eventName="scan_work_report" />
     <DownloadProgressMask />
   </view>
 </template>
@@ -308,6 +310,7 @@
   import { userLoginFacotryList } from "@/api/login";
   import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
   import DownloadProgressMask from "@/components/DownloadProgressMask.vue";
+  import PdaScan from "@/components/pda-scan/pda-scan.vue";
   import modal from "@/plugins/modal";
   import useUserStore from "@/store/modules/user";
 
@@ -315,6 +318,8 @@
   const show = ref(false);
   const factoryList = ref([]);
   const factoryListTem = ref([]);
+  const pdaScanActive = ref(false);
+  let scanWorkReportTimer = null;
   const iconStyle = {
     fontSize: "1.125rem",
     color: "#2979ff",
@@ -1072,78 +1077,121 @@
       });
   }
   const getcode = async () => {
-    uni.scanCode({
-      success: async res => {
-        // 瑙f瀽浜岀淮鐮佸唴瀹�
-        const scanResult = res.result;
-        let orderRow = "";
+    const canUsePdaBroadcast = () => {
+      try {
+        if (typeof plus === "undefined") return false;
+        if (plus?.os?.name !== "Android") return false;
+        if (!plus?.android) return false;
 
-        // 鍒ゆ柇鎵弿缁撴灉鏄惁涓虹函鏁板瓧锛坕d锛�
-        const isNumericId = /^\d+$/.test(scanResult.trim());
+        const sys = uni.getSystemInfoSync?.() || {};
+        const brand = String(sys?.brand || "").toUpperCase();
+        const model = String(sys?.model || "").toUpperCase();
 
-        if (isNumericId) {
-          // 濡傛灉鏄函鏁板瓧锛屾牴鎹� id 鑾峰彇宸ュ崟鏁版嵁
-          const workOrderId = scanResult.trim();
-          modal.loading("姝e湪鑾峰彇宸ュ崟淇℃伅...");
-          try {
-            const workRes = await getProductWorkOrderById({ id: workOrderId });
-            modal.closeLoading();
+        return (
+          brand.includes("DROI") ||
+          model.includes("MV-IDP5204") ||
+          model.includes("IDP")
+        );
+      } catch (e) {
+        return false;
+      }
+    };
 
-            console.log("宸ュ崟鏌ヨ缁撴灉:", workRes);
+    const handleWorkReportScan = async scanResultRaw => {
+      const scanResult = scanResultRaw == null ? "" : String(scanResultRaw);
+      let orderRow = "";
 
-            if (workRes.code === 200 && workRes.data) {
-              // 鏂版帴鍙h繑鍥炵殑鏄崟涓璞★紝涓嶆槸鏁扮粍
-              const workData = workRes.data;
-              console.log("宸ュ崟鏁版嵁:", workData);
+      const isNumericId = /^\d+$/.test(scanResult.trim());
 
-              if (workData.endOrder === true) {
-                modal.msgError("璇ヨ鍗曞凡缁撴潫锛屾棤娉曟姤宸�");
-                return;
-              }
+      if (isNumericId) {
+        const workOrderId = scanResult.trim();
+        modal.loading("姝e湪鑾峰彇宸ュ崟淇℃伅...");
+        try {
+          const workRes = await getProductWorkOrderById({ id: workOrderId });
+          modal.closeLoading();
 
-              orderRow = JSON.stringify(workData);
+          console.log("宸ュ崟鏌ヨ缁撴灉:", workRes);
 
-              console.log("鏋勯�犵殑orderRow:", orderRow);
-            } else {
-              modal.msgError("鏈壘鍒板搴旂殑宸ュ崟淇℃伅");
+          if (workRes.code === 200 && workRes.data) {
+            const workData = workRes.data;
+            console.log("宸ュ崟鏁版嵁:", workData);
+
+            if (workData.endOrder === true) {
+              modal.msgError("璇ヨ鍗曞凡缁撴潫锛屾棤娉曟姤宸�");
               return;
             }
-          } catch (error) {
-            modal.closeLoading();
-            console.error("鑾峰彇宸ュ崟淇℃伅澶辫触:", error);
-            modal.msgError("鑾峰彇宸ュ崟淇℃伅澶辫触: " + (error.message || "鏈煡閿欒"));
-            return;
-          }
-        } else {
-          // 濡傛灉涓嶆槸绾暟瀛楋紝灏濊瘯浠庢壂鐮佺粨鏋滀腑鎻愬彇orderRow鍙傛暟
-          try {
-            // 澶勭悊娣峰悎鏍煎紡: http://...?orderRow={...}
-            const orderRowStart = scanResult.indexOf("orderRow={");
-            if (orderRowStart !== -1) {
-              // 鎻愬彇浠巓rderRow={寮�濮嬬殑JSON鍐呭
-              const jsonPart = scanResult.substring(orderRowStart + 9); // 9鏄�"orderRow=".length
-              orderRow = jsonPart;
-            } else {
-              // 濡傛灉鐩存帴鏄疛SON瀛楃涓诧紝灏濊瘯瑙f瀽
-              orderRow = scanResult;
-            }
-          } catch (e) {
-            console.error(e, "瑙f瀽澶辫触====????=====");
-            orderRow = "";
-          }
 
-          // 楠岃瘉鏄惁涓烘湁鏁堢殑JSON
-          try {
-            JSON.parse(orderRow);
-          } catch (error) {
-            modal.msgError("璁㈠崟瑙f瀽澶辫触锛岃妫�鏌ヤ簩缁寸爜鏍煎紡");
+            orderRow = JSON.stringify(workData);
+
+            console.log("鏋勯�犵殑orderRow:", orderRow);
+          } else {
+            modal.msgError("鏈壘鍒板搴旂殑宸ュ崟淇℃伅");
             return;
           }
+        } catch (error) {
+          modal.closeLoading();
+          console.error("鑾峰彇宸ュ崟淇℃伅澶辫触:", error);
+          modal.msgError("鑾峰彇宸ュ崟淇℃伅澶辫触: " + (error.message || "鏈煡閿欒"));
+          return;
         }
-        // 鎵爜鎴愬姛鍚庤烦杞埌鐢熶骇鎶ュ伐椤甸潰锛屽苟浼犻�抩rderRow鍙傛暟
-        uni.navigateTo({
-          url: `/pages/productionManagement/productionReport/index?orderRow=${orderRow}`,
-        });
+      } else {
+        try {
+          const orderRowStart = scanResult.indexOf("orderRow={");
+          if (orderRowStart !== -1) {
+            const jsonPart = scanResult.substring(orderRowStart + 9);
+            orderRow = jsonPart;
+          } else {
+            orderRow = scanResult;
+          }
+        } catch (e) {
+          console.error(e, "瑙f瀽澶辫触====????=====");
+          orderRow = "";
+        }
+
+        try {
+          JSON.parse(orderRow);
+        } catch (error) {
+          modal.msgError("璁㈠崟瑙f瀽澶辫触锛岃妫�鏌ヤ簩缁寸爜鏍煎紡");
+          return;
+        }
+      }
+
+      uni.navigateTo({
+        url: `/pages/productionManagement/productionReport/index?orderRow=${orderRow}`,
+      });
+    };
+
+    if (canUsePdaBroadcast()) {
+      if (scanWorkReportTimer) {
+        clearTimeout(scanWorkReportTimer);
+        scanWorkReportTimer = null;
+      }
+      uni.$off("scan_work_report");
+      uni.$on("scan_work_report", async data => {
+        pdaScanActive.value = false;
+        uni.$off("scan_work_report");
+        if (scanWorkReportTimer) {
+          clearTimeout(scanWorkReportTimer);
+          scanWorkReportTimer = null;
+        }
+        await handleWorkReportScan(data?.code);
+      });
+      pdaScanActive.value = true;
+      uni.showToast({
+        title: "璇蜂娇鐢≒DA鎵爜",
+        icon: "none",
+      });
+      scanWorkReportTimer = setTimeout(() => {
+        pdaScanActive.value = false;
+        uni.$off("scan_work_report");
+        scanWorkReportTimer = null;
+      }, 20000);
+      return;
+    }
+
+    uni.scanCode({
+      success: async res => {
+        await handleWorkReportScan(res.result);
       },
       fail: err => {
         uni.showToast({

--
Gitblit v1.9.3