标准箱识别

This commit is contained in:
hongchao 2025-05-19 17:37:10 +08:00
parent 0694c4c573
commit b5ba331df0
6 changed files with 234 additions and 86 deletions

View File

@ -0,0 +1,64 @@
<template>
<!-- 该组件无实际 DOM 结构 -->
<div style="display: none;"></div>
</template>
<script setup>
import { onMounted } from 'vue'
//
const emit = defineEmits(['scanSuccessBox', 'scanErrorBox'])
//
const scanQrCode = () => {
console.log("扫一扫");
console.log("window对象", window);
document.addEventListener("deviceready", onDeviceReady.bind(this), false);
function onDeviceReady() {
// Cordova is now initialized. Have fun!
console.log(
"Running cordova-" +
window.cordova.platformId +
"@" +
window.cordova.version
);
window.cordova.plugins.barcodeScanner.scan(
function (result) {
emit('scanSuccessBox', result)
console.log("success");
console.log(result);
}.bind(this),
function (error) {
emit('scanErrorBox', new Error(`扫描失败: ${error}`))
console.log("error");
console.log(error);
},
{
preferFrontCamera: false, // 使 iOS Android
showFlipCameraButton: true, // iOS Android
showTorchButton: true, // iOS Android
torchOn: false, // Android
saveHistory: true, // Android
prompt: "请扫描二维码", // Android
resultDisplayDuration: 500, // 01500Android
formats: "QR_CODE,PDF_417", // ,PDF_417RSS_EXPANDED
orientation: "portrait", // (portrait|landscape),Android
disableAnimations: true, // iOS
disableSuccessBeep: false, // iOS Android
}
);
}
}
//
defineExpose({
scanQrCode
})
onMounted(() => {
if (!window.cordova) {
console.warn('Cordova 未加载,二维码扫描功能可能不可用')
}
})
</script>

View File

@ -48,6 +48,11 @@
@scanSuccess="handleScanSuccess" @scanSuccess="handleScanSuccess"
@scanError="handleScanError" @scanError="handleScanError"
/> />
<ScanQrCodeBox
ref="scanQrCodeRefBox"
@scanSuccess="handleScanSuccessBox"
@scanError="handleScanErrorBox"
/>
<view class="table-list-item"> <view class="table-list-item">
<uni-row :gutter="24" style="display: flex; align-items: center"> <uni-row :gutter="24" style="display: flex; align-items: center">
<uni-col :span="6"> <uni-col :span="6">
@ -139,9 +144,11 @@ import {
import { getBoxBindByCode } from '@/services/standard.js' import { getBoxBindByCode } from '@/services/standard.js'
import { debounce } from 'lodash-es' import { debounce } from 'lodash-es'
import ScanQrCode from '@/pages/devicesSearch/ScanQrCode.vue' import ScanQrCode from '@/pages/devicesSearch/ScanQrCode.vue'
import ScanQrCodeBox from '@/pages/devicesSearch/ScanQrCodeBox.vue'
// const query = defineProps() // // const query = defineProps() //
// const queryParams = JSON.parse(query.queryParams) // const queryParams = JSON.parse(query.queryParams)
const scanQrCodeRef = ref(null) const scanQrCodeRef = ref(null)
const scanQrCodeRefBox = ref(null)
const queryParams = ref({}) const queryParams = ref({})
const formData = ref({}) const formData = ref({})
const codeDeviceList = ref([]) const codeDeviceList = ref([])
@ -295,39 +302,59 @@ const boxScan = async () => {
}) })
} else { } else {
boxCode.value = '' boxCode.value = ''
var mpaasScanModule = uni.requireNativePlugin('Mpaas-Scan-Module') // var mpaasScanModule = uni.requireNativePlugin('Mpaas-Scan-Module')
mpaasScanModule.mpaasScan( // mpaasScanModule.mpaasScan(
{ // {
// qrCodebarCode // // qrCodebarCode
scanType: ['qrCode', 'barCode'], // scanType: ['qrCode', 'barCode'],
// false // // false
hideAlbum: false, // hideAlbum: false,
//ios zh-Hansen // //ios zh-Hansen
language: 'en', // language: 'en',
//(ios) // //(ios)
failedMsg: '未识别到二维码,请重试', // failedMsg: '',
//Android // //Android
screenType: 'full', // screenType: 'full',
}, // },
(ret) => { // (ret) => {
if (ret.resp_code == 10) { // if (ret.resp_code == 10) {
uni.showToast({ title: '用户取消', icon: 'none' }) // uni.showToast({ title: '', icon: 'none' })
// }
// if (ret.resp_code == 11) {
// uni.showToast({ title: '', icon: 'none' })
// }
// if (ret.resp_code == 1000) {
// boxCode.value = ret.resp_result
// if (boxCode.value == '') {
// uni.showToast({ title: '', icon: 'none' })
// } else {
// boxOut()
// }
// }
// },
// )
if (scanQrCodeRefBox.value) {
scanQrCodeRefBox.value.scanQrCode()
} }
if (ret.resp_code == 11) {
uni.showToast({ title: '扫码失败', icon: 'none' })
} }
if (ret.resp_code == 1000) { }
boxCode.value = ret.resp_result
if (boxCode.value == '') { //
const handleScanSuccessBox = (result) => {
boxCode.value = result?.text || ''
if (boxCode.value === '') {
uni.showToast({ title: '扫码识别失败', icon: 'none' }) uni.showToast({ title: '扫码识别失败', icon: 'none' })
} else { } else {
boxOut() boxOut()
} }
}
},
)
}
} }
//
const handleScanErrorBox = (error) => {
console.error('扫描出错:', error.message)
uni.showToast({ title: error.message, icon: 'none' })
}
// //
const boxOut = async () => { const boxOut = async () => {
console.log(queryParams) console.log(queryParams)
@ -477,6 +504,9 @@ const handleScanError = (error) => {
console.error('扫描出错:', error.message) console.error('扫描出错:', error.message)
uni.showToast({ title: error.message, icon: 'none' }) uni.showToast({ title: error.message, icon: 'none' })
} }
// //
const getMaInfoScan = async () => { const getMaInfoScan = async () => {
let param = { let param = {

View File

@ -128,14 +128,15 @@ const onClick=(e,item)=> {
content: '是否确认接收?', content: '是否确认接收?',
confirmText: '确定', confirmText: '确定',
cancelText: '取消', cancelText: '取消',
success: async (res) => { success: async (modalRes) => {
if (res.confirm) { if (modalRes.confirm) {
let param = { let param = {
boxId:item.boxId boxId:item.boxId
} }
// console.log(param)
const res = await appReceiveApi(param) const res = await appReceiveApi(param)
if (res.code === 200) { console.log("yyyyyyyyyyy",res)
if (res.code == 200) {
uni.showToast({ uni.showToast({
title: '接收成功', title: '接收成功',
icon: 'none', icon: 'none',
@ -144,6 +145,7 @@ const onClick=(e,item)=> {
getTableList(true) getTableList(true)
}, 500) }, 500)
}else{ }else{
console.log("xxxxxxxxxxxxxxxxxxxxxxxxx")
uni.showToast({ title: '接收失败', icon: 'none' }) uni.showToast({ title: '接收失败', icon: 'none' })
} }
} }
@ -302,7 +304,7 @@ const finish = computed(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
.page-container { .page-container {
display: flex; display: flex;
height: 100%; height: 100vh;
flex-direction: column; flex-direction: column;
background-color: #f7f8fa; background-color: #f7f8fa;
padding: 24rpx; padding: 24rpx;

View File

@ -21,6 +21,11 @@
</uni-forms> </uni-forms>
</div> </div>
<ScanQrCode
ref="scanQrCodeRef"
@scanSuccess="handleScanSuccess"
@scanError="handleScanError"
/>
<div class="btn"> <div class="btn">
<button class="btn-cont" @click="backPage">取消</button> <button class="btn-cont" @click="backPage">取消</button>
<button class="btn-cont" @click="pass">创建</button> <button class="btn-cont" @click="pass">创建</button>
@ -34,27 +39,46 @@ import { onLoad,onShow } from '@dcloudio/uni-app'
import { innerVerify } from '../../services/purchase.js'; import { innerVerify } from '../../services/purchase.js';
import { appCreateBoxApi } from '../../services/standard.js'; import { appCreateBoxApi } from '../../services/standard.js';
import { baseURL } from '@/utils/http' import { baseURL } from '@/utils/http'
import ScanQrCode from '@/pages/devicesSearch/ScanQrCode.vue'
const formData = ref({}) const formData = ref({})
const scanQrCodeRef = ref(null)
// //
const scanStart = () => { const scanStart = () => {
console.log('编码识别--') console.log('编码识别--')
// // //
uni.scanCode({ // uni.scanCode({
onlyFromCamera: true, // onlyFromCamera: true,
scanType: ['qrCode', 'pdf417'], // scanType: ['qrCode', 'pdf417'],
success: (res) => { // success: (res) => {
console.log('扫码结果:' + res.result) // console.log('' + res.result)
formData.value.boxCode = res.result // formData.value.boxCode = res.result
}, // },
fail: (err) => { // fail: (err) => {
// uni.showToast({ // // uni.showToast({
// title: '', // // title: '',
// icon: 'none' // // icon: 'none'
// }); // // });
}, // },
}) // })
if (scanQrCodeRef.value) {
scanQrCodeRef.value.scanQrCode()
}
} }
//
const handleScanSuccess = (result) => {
formData.value.boxCode = result?.text || ''
if (formData.value.boxCode === '') {
uni.showToast({ title: '扫码识别失败', icon: 'none' })
}
}
//
const handleScanError = (error) => {
console.error('扫描出错:', error.message)
uni.showToast({ title: error.message, icon: 'none' })
}
// //
const pass = () => { const pass = () => {
if(formData.value.boxName==""){ if(formData.value.boxName==""){
@ -94,11 +118,11 @@ onLoad((options)=>{
// formData.value = JSON.parse(options.item) // formData.value = JSON.parse(options.item)
}) })
// //
onShow(() => { // onShow(() => {
setTimeout(() => { // setTimeout(() => {
scanStart() // scanStart()
}, 500) // }, 500)
}) // })
</script> </script>
<style lang="scss"> <style lang="scss">

View File

@ -60,7 +60,11 @@
<button class="btn-cont" style="width: 90%;" @click="transfer">移交</button> <button class="btn-cont" style="width: 90%;" @click="transfer">移交</button>
</div> </div>
<ScanQrCode
ref="scanQrCodeRef"
@scanSuccess="handleScanSuccess"
@scanError="handleScanError"
/>
<uni-popup ref="keeperPopup" type="bottom" border-radius="10px 10px 0 0"> <uni-popup ref="keeperPopup" type="bottom" border-radius="10px 10px 0 0">
<view class="keeper-popup"> <view class="keeper-popup">
@ -102,6 +106,8 @@ import { onLoad,onShow } from '@dcloudio/uni-app'
import { getAppBoxDetailListApi,appBindMaCodeApi,appUnbindMaCodeApi,getTransferKeepsListApi,appTransferApi } from '../../services/standard.js'; import { getAppBoxDetailListApi,appBindMaCodeApi,appUnbindMaCodeApi,getTransferKeepsListApi,appTransferApi } from '../../services/standard.js';
import { getMaCodeByQrCodeApi } from '@/services/index.js'; import { getMaCodeByQrCodeApi } from '@/services/index.js';
import { baseURL } from '@/utils/http' import { baseURL } from '@/utils/http'
import ScanQrCode from '@/pages/devicesSearch/ScanQrCode.vue'
const scanQrCodeRef = ref(null)
const keeperPopup = ref(null); const keeperPopup = ref(null);
const searchValue = ref('') const searchValue = ref('')
const boxInfo = ref({}) const boxInfo = ref({})
@ -136,33 +142,55 @@ const getCodeList = () => {
// //
// //
const scanStart = async () => { const scanStart = async () => {
var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module") // var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
mpaasScanModule.mpaasScan({ // mpaasScanModule.mpaasScan({
// qrCodebarCode // // qrCodebarCode
'scanType': ['qrCode','barCode'], // 'scanType': ['qrCode','barCode'],
// false // // false
'hideAlbum': false, // 'hideAlbum': false,
//ios zh-Hansen // //ios zh-Hansen
'language' : 'en', // 'language' : 'en',
//(ios) // //(ios)
'failedMsg': '未识别到二维码,请重试', // 'failedMsg': '',
//Android // //Android
'screenType': 'full' // 'screenType': 'full'
},(ret) => { // },(ret) => {
console.log(ret) // console.log(ret)
if(ret.resp_code==10){ // if(ret.resp_code==10){
uni.showToast({ title: '用户取消', icon: 'none' }) // uni.showToast({ title: '', icon: 'none' })
// }
// if(ret.resp_code==11){
// uni.showToast({ title: '', icon: 'none' })
// }
// if(ret.resp_code==1000){
// let qrCode = ret.resp_result.split("qrcode=")[1];
// bindMa(qrCode)
// }
// })
if (scanQrCodeRef.value) {
scanQrCodeRef.value.scanQrCode()
} }
if(ret.resp_code==11){
uni.showToast({ title: '扫码失败', icon: 'none' })
}
if(ret.resp_code==1000){
let qrCode = ret.resp_result.split("qrcode=")[1];
bindMa(qrCode)
}
})
} }
//
const handleScanSuccess = (result) => {
const qrCode = result?.text || '';
if (qrCode === '') {
uni.showToast({ title: '扫码识别失败', icon: 'none' })
} else {
// split
const actualQrCode = qrCode.split("qrcode=")[1] || qrCode;
bindMa(actualQrCode)
}
}
//
const handleScanError = (error) => {
console.error('扫描出错:', error.message)
uni.showToast({ title: error.message, icon: 'none' })
}
// //
const bindMa = (qrCode) => { const bindMa = (qrCode) => {
console.log(qrCode) console.log(qrCode)

View File

@ -310,7 +310,7 @@ const confirmTransfer = () => {
let param = { let param = {
"boxId":transferItem.value.boxId, "boxId":transferItem.value.boxId,
"transferUser":transferUser.value, "inputUser":transferUser.value,
} }
console.log(param) console.log(param)
appTransferApi(param).then(res => { appTransferApi(param).then(res => {
@ -353,7 +353,7 @@ const finish = computed(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
.page-container { .page-container {
display: flex; display: flex;
height: 100%; height: 100vh;
flex-direction: column; flex-direction: column;
background-color: #f7f8fa; background-color: #f7f8fa;
padding: 24rpx; padding: 24rpx;