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