标准箱识别

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

View File

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

View File

@ -21,6 +21,11 @@
</uni-forms>
</div>
<ScanQrCode
ref="scanQrCodeRef"
@scanSuccess="handleScanSuccess"
@scanError="handleScanError"
/>
<div class="btn">
<button class="btn-cont" @click="backPage">取消</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 { appCreateBoxApi } from '../../services/standard.js';
import { baseURL } from '@/utils/http'
import ScanQrCode from '@/pages/devicesSearch/ScanQrCode.vue'
const formData = ref({})
const scanQrCodeRef = ref(null)
//
const scanStart = () => {
console.log('编码识别--')
//
uni.scanCode({
onlyFromCamera: true,
scanType: ['qrCode', 'pdf417'],
success: (res) => {
console.log('扫码结果:' + res.result)
formData.value.boxCode = res.result
},
fail: (err) => {
// uni.showToast({
// title: '',
// icon: 'none'
// });
},
})
// //
// uni.scanCode({
// onlyFromCamera: true,
// scanType: ['qrCode', 'pdf417'],
// success: (res) => {
// console.log('' + res.result)
// formData.value.boxCode = res.result
// },
// fail: (err) => {
// // uni.showToast({
// // title: '',
// // 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 = () => {
if(formData.value.boxName==""){
@ -94,11 +118,11 @@ onLoad((options)=>{
// formData.value = JSON.parse(options.item)
})
//
onShow(() => {
setTimeout(() => {
scanStart()
}, 500)
})
// onShow(() => {
// setTimeout(() => {
// scanStart()
// }, 500)
// })
</script>
<style lang="scss">

View File

@ -60,7 +60,11 @@
<button class="btn-cont" style="width: 90%;" @click="transfer">移交</button>
</div>
<ScanQrCode
ref="scanQrCodeRef"
@scanSuccess="handleScanSuccess"
@scanError="handleScanError"
/>
<uni-popup ref="keeperPopup" type="bottom" border-radius="10px 10px 0 0">
<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 { getMaCodeByQrCodeApi } from '@/services/index.js';
import { baseURL } from '@/utils/http'
import ScanQrCode from '@/pages/devicesSearch/ScanQrCode.vue'
const scanQrCodeRef = ref(null)
const keeperPopup = ref(null);
const searchValue = ref('')
const boxInfo = ref({})
@ -136,33 +142,55 @@ const getCodeList = () => {
//
//
const scanStart = async () => {
var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
mpaasScanModule.mpaasScan({
// qrCodebarCode
'scanType': ['qrCode','barCode'],
// false
'hideAlbum': false,
//ios zh-Hansen
'language' : 'en',
//(ios)
'failedMsg': '未识别到二维码,请重试',
//Android
'screenType': 'full'
},(ret) => {
console.log(ret)
if(ret.resp_code==10){
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)
}
})
// var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
// mpaasScanModule.mpaasScan({
// // qrCodebarCode
// 'scanType': ['qrCode','barCode'],
// // false
// 'hideAlbum': false,
// //ios zh-Hansen
// 'language' : 'en',
// //(ios)
// 'failedMsg': '',
// //Android
// 'screenType': 'full'
// },(ret) => {
// console.log(ret)
// if(ret.resp_code==10){
// 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()
}
}
//
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) => {
console.log(qrCode)

View File

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