Files
yshop-pro-uniapp/hooks/useQrCodeScan.js

99 lines
2.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @name: useQrCodeScan
* @author: kahu4
* @date: 2024-01-22 14:01
* @descriptionuseQrCodeScan
* @update: 2024-01-22 14:01
* */
// #ifdef H5
import { Html5Qrcode } from "html5-qrcode"
// #endif
export const useQrCodeScan = () => {
let html5QrCode
const qrCodeScan = (options = {}) => {
let res
// #ifdef H5
res = _qrInH5(options)
// #endif
// #ifndef H5
res = _qrInNonH5(options)
// #endif
return res
}
/**
* 非h5环境扫码
* @param options
* @return {Promise<unknown>}
* @private
*/
const _qrInNonH5 = (options = {}) => {
// #ifndef H5
return new Promise((resolve, reject) => {
const defaultOptions = {
onlyFromCamera: false,
scanType: ['barCode', 'qrCode', 'datamatrix', 'pdf417'],
hideAlbum: false
}
uni.scanCode({
...defaultOptions,
...options,
success: (res) => {
resolve(res.result)
},
fail: (err) => {
reject(err)
}
})
})
// #endif
}
/**
* H5环境扫码
* @param options
* @return {Promise<unknown>}
* @private
*/
const _qrInH5 = async (options) => {
// #ifdef H5
return new Promise(async (resolve, reject) => {
try { // 获取屏幕宽度
const windowWith = window.innerWidth || document.documentElement.offsetWidth
const windowHeight = window.innerHeight || document.documentElement.offsetHeight
html5QrCode = new Html5Qrcode("reader");
const cameras = await Html5Qrcode.getCameras();
await html5QrCode.start(
cameras[cameras.length - 1].id,
{
fps: 1,
aspectRatio: windowHeight / windowWith
},
(decodedText, decodedResult) => {
// do something when code is read
resolve(decodedText)
html5QrCode.stop()
}
)
uni.hideLoading()
} catch (e) {
reject(e)
}
})
// #endif
}
/**
* 取消扫描
*/
const cancelScan = () => {
html5QrCode && html5QrCode.stop()
}
return {
qrCodeScan,
cancelScan
}
}