zhangwencui
2026-07-14 10ae883d6368fb8fc3f95620f610c3aaf6c6a3cd
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,7 +1082,7 @@
        factoryList.value = [];
      });
  }
  const getcode = async () => {
    const canUsePdaBroadcast = () => {
      try {
        if (typeof plus === "undefined") return false;
@@ -1161,39 +1167,68 @@
      });
    };
    if (canUsePdaBroadcast()) {
  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");
        if (scanWorkReportTimer) {
          clearTimeout(scanWorkReportTimer);
          scanWorkReportTimer = null;
        }
      await delay(350);
      scanMaskShow.value = false;
        await handleWorkReportScan(data?.code);
      });
      pdaScanActive.value = true;
      uni.showToast({
        title: "请使用PDA扫码",
        icon: "none",
      });
      scanWorkReportTimer = setTimeout(() => {
        pdaScanActive.value = false;
        uni.$off("scan_work_report");
  const getcode = async () => {
    pendingWorkReportScan.value = true;
    scanMaskStatus.value = "waiting";
    scanMaskShow.value = true;
    if (scanWorkReportTimer) {
      clearTimeout(scanWorkReportTimer);
        scanWorkReportTimer = null;
      }, 20000);
      return;
    }
    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 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",