From aca7aa9ce32acc4c8795342f945b027d3bc9f62a Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期二, 10 六月 2025 17:37:34 +0800
Subject: [PATCH] feat: 添加时效报工,修复扫码内存泄漏

---
 src/components/scan/index.vue |  187 +++++++++++++++++++++++-----------------------
 1 files changed, 94 insertions(+), 93 deletions(-)

diff --git a/src/components/scan/index.vue b/src/components/scan/index.vue
index 72b928f..018c202 100644
--- a/src/components/scan/index.vue
+++ b/src/components/scan/index.vue
@@ -3,100 +3,101 @@
     <view class="content"></view>
   </view>
 </template>
-<!-- 婵�鍏夋壂鐮侊紝骞挎挱妯″紡 -->
-<script>
-var main, receiver, filter;
-var codeQueryTag = false;
-export default {
-  data() {
-    return {
-      scanCode: "",
-    };
+<script lang="ts" setup>
+const main = ref();
+const receiver = ref();
+const filter = ref();
+const codeQueryTag = ref(false);
+const props = defineProps({
+  emitName: {
+    type: String,
+    default: "scan",
   },
-  created() {
-    // 鍒濆鍖�
-    this.initScan();
-    // 鍚姩骞挎挱
-    this.startScan();
-  },
-  onHide() {
-    // 缁撴潫骞挎挱
-    this.stopScan();
-  },
-  destroyed() {
-    // 缁撴潫骞挎挱
-    this.stopScan();
-  },
-  methods: {
-    // 鍒濆鍖�
-    initScan() {
-      //  #ifdef APP
-      // console.log('initScan:鎵爜鍒濆鍖�');
-      let that = this;
-      main = plus.android.runtimeMainActivity(); //鑾峰彇activity
-      //var context = plus.android.importClass('android.content.Context'); //涓婁笅鏂�
-      var IntentFilter = plus.android.importClass("android.content.IntentFilter");
-      filter = new IntentFilter();
-      //涓嬮潰鐨刟ddAction 鏀逛负鑷繁 pad 璁惧鐨勫箍鎾姩浣滐紙鍦ㄦ壂鎻忚缃垨鑰呭巶鍟嗛檮甯︾殑app 閲岄潰璁剧疆涓哄箍鎾ā寮忥紝鐒跺悗鏌ョ湅鐩稿簲鍙傛暟锛�
-      filter.addAction("com.dwexample.ACTION");
-      receiver = plus.android.implements("io.dcloud.feature.internal.reflect.BroadcastReceiver", {
-        onReceive: (context, intent) => {
-          console.log("---onReceive锛�", context, intent);
-          plus.android.importClass(intent);
-          //涓嬮潰鐨刧etStringExtra鍐呮敼涓鸿嚜宸辩殑骞挎挱鏍囩锛堥敭鍊�/key锛夛細 data
-          //鏂戦┈ TC20
-          var banMaSacanInfo = intent.getStringExtra(
-            "com.motorolasolutions.emdk.datawedge.data_string"
-          );
-          // callback(intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'));
-          console.log("鏂戦┈鎵弿缁撴灉", banMaSacanInfo);
-          // 浼犲叆鎺ユ敹鍒扮殑鍙傛暟
-          that.queryCode(banMaSacanInfo);
-        },
-      });
-      // #endif
+});
+
+const initScan = () => {
+  main.value = plus.android.runtimeMainActivity(); //鑾峰彇activity
+  let IntentFilter: any = plus.android.importClass("android.content.IntentFilter");
+  filter.value = new IntentFilter();
+  //涓嬮潰鐨刟ddAction 鏀逛负鑷繁 pad 璁惧鐨勫箍鎾姩浣滐紙鍦ㄦ壂鎻忚缃垨鑰呭巶鍟嗛檮甯︾殑app 閲岄潰璁剧疆涓哄箍鎾ā寮忥紝鐒跺悗鏌ョ湅鐩稿簲鍙傛暟锛�
+  filter.value.addAction("com.dwexample.ACTION");
+  receiver.value = plus.android.implements("io.dcloud.feature.internal.reflect.BroadcastReceiver", {
+    onReceive: (context: any, intent: any) => {
+      console.log("---onReceive锛�", context, intent);
+      plus.android.importClass(intent);
+      //涓嬮潰鐨刧etStringExtra鍐呮敼涓鸿嚜宸辩殑骞挎挱鏍囩锛堥敭鍊�/key锛夛細 data
+      //鏂戦┈ TC20
+      var banMaSacanInfo = intent.getStringExtra(
+        "com.motorolasolutions.emdk.datawedge.data_string"
+      );
+      // callback(intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'));
+      console.log("鏂戦┈鎵弿缁撴灉", banMaSacanInfo);
+      // 浼犲叆鎺ユ敹鍒扮殑鍙傛暟
+      queryCode(banMaSacanInfo);
     },
-    // 寮�鍚箍鎾�
-    startScan() {
-      //  #ifdef APP
-      console.log("startScan,寮�鍚箍鎾帴鏀�");
-      main.registerReceiver(receiver, filter);
-      // #endif
-    },
-    // 鍏抽棴骞挎挱
-    stopScan() {
-      //  #ifdef APP
-      console.log("stopScan缁撴潫");
-      main.unregisterReceiver(receiver);
-      // #endif
-    },
-    // 閬垮厤閲嶅鎵爜
-    queryCode: function (code) {
-      //  #ifdef APP
-      if (codeQueryTag) return false;
-      codeQueryTag = true;
-      setTimeout(function () {
-        codeQueryTag = false;
-      }, 150);
-      // console.log('-****--鎵爜code锛� ', code);
-      let data = code;
-      uni.$emit("scan", {
-        code: data,
-      });
-      // #endif
-    },
-    triggerScan() {
-      console.log("瑙﹀彂鎵弿");
-      // 鑾峰彇Android鎰忓浘绫�
-      let Intent = plus.android.importClass("android.content.Intent");
-      // 瀹炰緥鍖栨剰鍥�
-      let intent = new Intent();
-      // 瀹氫箟鎰忓浘锛岀敱鍘傚晢鎻愪緵(姝ゅ璁剧疆涓轰笢澶х殑锛� 寮�濮嬫壂鎻忓箍鎾璫om.scan.onStartScan锛屽搴旂殑鍋滄鎵弿骞挎挱涓篶om.scan.onEndScan)
-      intent.setAction("com.symbol.datawedge.api.ACTION");
-      intent.putExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "START_SCANNING");
-      // 骞挎挱杩欎釜鎰忓浘
-      main.sendBroadcast(intent);
-    },
-  },
+  });
 };
+
+// 寮�鍚箍鎾�
+const startScan = () => {
+  //  #ifdef APP
+  console.log("startScan,寮�鍚箍鎾帴鏀�");
+  main.value.registerReceiver(receiver.value, filter.value);
+  // #endif
+};
+// 鍏抽棴骞挎挱
+const stopScan = () => {
+  //  #ifdef APP
+  console.log("stopScan缁撴潫");
+  main.value.unregisterReceiver(receiver.value);
+  // #endif
+};
+
+const queryCode = (code: any) => {
+  //  #ifdef APP
+  if (codeQueryTag.value) return false;
+  codeQueryTag.value = true;
+  setTimeout(function () {
+    codeQueryTag.value = false;
+  }, 150);
+  // console.log('-****--鎵爜code锛� ', code);
+  let data = code;
+  uni.$emit(props.emitName, {
+    code: data,
+  });
+  // #endif
+};
+
+const triggerScan = () => {
+  console.log("瑙﹀彂鎵弿");
+  // 鑾峰彇Android鎰忓浘绫�
+  let Intent = plus.android.importClass("android.content.Intent");
+  // 瀹炰緥鍖栨剰鍥�
+  let intent = new Intent();
+  // 瀹氫箟鎰忓浘锛岀敱鍘傚晢鎻愪緵(姝ゅ璁剧疆涓轰笢澶х殑锛� 寮�濮嬫壂鎻忓箍鎾璫om.scan.onStartScan锛屽搴旂殑鍋滄鎵弿骞挎挱涓篶om.scan.onEndScan)
+  intent.setAction("com.symbol.datawedge.api.ACTION");
+  intent.putExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "START_SCANNING");
+  // 骞挎挱杩欎釜鎰忓浘
+  main.value.sendBroadcast(intent);
+};
+
+onLoad(() => {
+  console.log("鍒濆鍖�");
+  // 鍒濆鍖�
+  initScan();
+  // 鍚姩骞挎挱
+  startScan();
+});
+
+onHide(() => {
+  stopScan();
+});
+
+onUnmounted(() => {
+  stopScan();
+});
+
+defineExpose({
+  triggerScan,
+});
 </script>

--
Gitblit v1.9.3