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 | 174 +++++++++++++++++++++++++++++++-------------------------- 1 files changed, 94 insertions(+), 80 deletions(-) diff --git a/src/components/scan/index.vue b/src/components/scan/index.vue index f9b96c4..018c202 100644 --- a/src/components/scan/index.vue +++ b/src/components/scan/index.vue @@ -3,87 +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 - }, - }, + }); }; + +// 寮�鍚箍鎾� +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