/** * @name: useQrCodeScan * @author: kahu4 * @date: 2024-01-22 14:01 * @description:useQrCodeScan * @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} * @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} * @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 } }