From 10ae883d6368fb8fc3f95620f610c3aaf6c6a3cd Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 14 七月 2026 13:50:35 +0800
Subject: [PATCH] PDA扫码调试

---
 src/pages/works.vue |  231 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 133 insertions(+), 98 deletions(-)

diff --git a/src/pages/works.vue b/src/pages/works.vue
index d3c5d17..7a53a4f 100644
--- a/src/pages/works.vue
+++ b/src/pages/works.vue
@@ -299,17 +299,20 @@
         </up-grid>
       </view>
     </view>
-    <PdaScan :active="pdaScanActive"
-             eventName="scan_work_report" />
+    <ScanWaitMask :show="scanMaskShow"
+                  :status="scanMaskStatus" />
+    <PdaScan />
     <DownloadProgressMask />
   </view>
 </template>
 
 <script setup>
   import { ref, onMounted, nextTick, reactive, computed } from "vue";
+  import { onShow } from "@dcloudio/uni-app";
   import { userLoginFacotryList } from "@/api/login";
   import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
   import DownloadProgressMask from "@/components/DownloadProgressMask.vue";
+  import ScanWaitMask from "@/components/ScanWaitMask.vue";
   import PdaScan from "@/components/pda-scan/pda-scan.vue";
   import modal from "@/plugins/modal";
   import useUserStore from "@/store/modules/user";
@@ -318,8 +321,11 @@
   const show = ref(false);
   const factoryList = ref([]);
   const factoryListTem = ref([]);
-  const pdaScanActive = ref(false);
+  const pendingWorkReportScan = ref(false);
   let scanWorkReportTimer = null;
+  const scanMaskShow = ref(false);
+  const scanMaskStatus = ref("waiting");
+  const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
   const iconStyle = {
     fontSize: "1.125rem",
     color: "#2979ff",
@@ -1076,124 +1082,153 @@
         factoryList.value = [];
       });
   }
-  const getcode = async () => {
-    const canUsePdaBroadcast = () => {
+
+  const canUsePdaBroadcast = () => {
+    try {
+      if (typeof plus === "undefined") return false;
+      if (plus?.os?.name !== "Android") return false;
+      if (!plus?.android) return false;
+
+      const sys = uni.getSystemInfoSync?.() || {};
+      const brand = String(sys?.brand || "").toUpperCase();
+      const model = String(sys?.model || "").toUpperCase();
+
+      return (
+        brand.includes("DROI") ||
+        model.includes("MV-IDP5204") ||
+        model.includes("IDP")
+      );
+    } catch (e) {
+      return false;
+    }
+  };
+
+  const handleWorkReportScan = async scanResultRaw => {
+    const scanResult = scanResultRaw == null ? "" : String(scanResultRaw);
+    let orderRow = "";
+
+    const isNumericId = /^\d+$/.test(scanResult.trim());
+
+    if (isNumericId) {
+      const workOrderId = scanResult.trim();
+      modal.loading("姝e湪鑾峰彇宸ュ崟淇℃伅...");
       try {
-        if (typeof plus === "undefined") return false;
-        if (plus?.os?.name !== "Android") return false;
-        if (!plus?.android) return false;
+        const workRes = await getProductWorkOrderById({ id: workOrderId });
+        modal.closeLoading();
 
-        const sys = uni.getSystemInfoSync?.() || {};
-        const brand = String(sys?.brand || "").toUpperCase();
-        const model = String(sys?.model || "").toUpperCase();
+        console.log("宸ュ崟鏌ヨ缁撴灉:", workRes);
 
-        return (
-          brand.includes("DROI") ||
-          model.includes("MV-IDP5204") ||
-          model.includes("IDP")
-        );
-      } catch (e) {
-        return false;
-      }
-    };
+        if (workRes.code === 200 && workRes.data) {
+          const workData = workRes.data;
+          console.log("宸ュ崟鏁版嵁:", workData);
 
-    const handleWorkReportScan = async scanResultRaw => {
-      const scanResult = scanResultRaw == null ? "" : String(scanResultRaw);
-      let orderRow = "";
-
-      const isNumericId = /^\d+$/.test(scanResult.trim());
-
-      if (isNumericId) {
-        const workOrderId = scanResult.trim();
-        modal.loading("姝e湪鑾峰彇宸ュ崟淇℃伅...");
-        try {
-          const workRes = await getProductWorkOrderById({ id: workOrderId });
-          modal.closeLoading();
-
-          console.log("宸ュ崟鏌ヨ缁撴灉:", workRes);
-
-          if (workRes.code === 200 && workRes.data) {
-            const workData = workRes.data;
-            console.log("宸ュ崟鏁版嵁:", workData);
-
-            if (workData.endOrder === true) {
-              modal.msgError("璇ヨ鍗曞凡缁撴潫锛屾棤娉曟姤宸�");
-              return;
-            }
-
-            orderRow = JSON.stringify(workData);
-
-            console.log("鏋勯�犵殑orderRow:", orderRow);
-          } else {
-            modal.msgError("鏈壘鍒板搴旂殑宸ュ崟淇℃伅");
+          if (workData.endOrder === true) {
+            modal.msgError("璇ヨ鍗曞凡缁撴潫锛屾棤娉曟姤宸�");
             return;
           }
-        } catch (error) {
-          modal.closeLoading();
-          console.error("鑾峰彇宸ュ崟淇℃伅澶辫触:", error);
-          modal.msgError("鑾峰彇宸ュ崟淇℃伅澶辫触: " + (error.message || "鏈煡閿欒"));
-          return;
-        }
-      } 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瀽澶辫触锛岃妫�鏌ヤ簩缁寸爜鏍煎紡");
+          orderRow = JSON.stringify(workData);
+
+          console.log("鏋勯�犵殑orderRow:", orderRow);
+        } else {
+          modal.msgError("鏈壘鍒板搴旂殑宸ュ崟淇℃伅");
           return;
         }
+      } catch (error) {
+        modal.closeLoading();
+        console.error("鑾峰彇宸ュ崟淇℃伅澶辫触:", error);
+        modal.msgError("鑾峰彇宸ュ崟淇℃伅澶辫触: " + (error.message || "鏈煡閿欒"));
+        return;
+      }
+    } 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 = "";
       }
 
-      uni.navigateTo({
-        url: `/pages/productionManagement/productionReport/index?orderRow=${orderRow}`,
-      });
-    };
+      try {
+        JSON.parse(orderRow);
+      } catch (error) {
+        modal.msgError("璁㈠崟瑙f瀽澶辫触锛岃妫�鏌ヤ簩缁寸爜鏍煎紡");
+        return;
+      }
+    }
 
-    if (canUsePdaBroadcast()) {
+    uni.navigateTo({
+      url: `/pages/productionManagement/productionReport/index?orderRow=${orderRow}`,
+    });
+  };
+
+  onShow(() => {
+    uni.$off("scan");
+    uni.$on("scan", async data => {
+      console.log("onscan");
+      console.log("鎵爜缁撴灉锛�", data.code);
+      if (!pendingWorkReportScan.value) return;
+
+      pendingWorkReportScan.value = false;
+      scanMaskStatus.value = "done";
       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");
+      await delay(350);
+      scanMaskShow.value = false;
+      await handleWorkReportScan(data?.code);
+    });
+  });
+
+  const getcode = async () => {
+    pendingWorkReportScan.value = true;
+    scanMaskStatus.value = "waiting";
+    scanMaskShow.value = true;
+
+    if (scanWorkReportTimer) {
+      clearTimeout(scanWorkReportTimer);
+      scanWorkReportTimer = null;
+    }
+
+    scanWorkReportTimer = setTimeout(() => {
+      pendingWorkReportScan.value = false;
+      scanWorkReportTimer = null;
+      scanMaskStatus.value = "timeout";
+      delay(900).then(() => {
+        scanMaskShow.value = false;
+      });
+    }, 20000);
+
+    if (canUsePdaBroadcast()) return;
+
+    uni.scanCode({
+      success: async res => {
+        pendingWorkReportScan.value = false;
+        scanMaskStatus.value = "done";
         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 delay(350);
+        scanMaskShow.value = false;
         await handleWorkReportScan(res.result);
       },
       fail: err => {
+        pendingWorkReportScan.value = false;
+        scanMaskStatus.value = "timeout";
+        delay(900).then(() => {
+          scanMaskShow.value = false;
+        });
+        if (scanWorkReportTimer) {
+          clearTimeout(scanWorkReportTimer);
+          scanWorkReportTimer = null;
+        }
         uni.showToast({
           title: "鎵爜澶辫触",
           icon: "none",

--
Gitblit v1.9.3