import UQRCode from 'uqrcodejs' /** * 在组件内隐藏 canvas 上绘制二维码,导出临时文件路径供 展示。 * @param {object} opts * @param {string} opts.text 二维码内容(出入库单 id) * @param {string} opts.canvasId canvas-id * @param {object} opts.componentInstance 组件实例(getCurrentInstance().proxy) * @param {number} [opts.size=200] * @returns {Promise} tempFilePath */ export function makeQrTempFile({ text, canvasId, componentInstance, size = 200 }) { const content = String(text || '').trim() if (!content) { return Promise.reject(new Error('二维码内容为空')) } if (!componentInstance) { return Promise.reject(new Error('缺少组件实例')) } return new Promise((resolve, reject) => { try { const qr = new UQRCode() qr.data = content qr.size = size qr.margin = 10 qr.make() const ctx = uni.createCanvasContext(canvasId, componentInstance) qr.canvasContext = ctx qr.drawCanvas() // drawCanvas 内部会 ctx.draw;稍延迟再导出 setTimeout(() => { uni.canvasToTempFilePath( { canvasId, width: size, height: size, destWidth: size, destHeight: size, success: (res) => { if (res.tempFilePath) resolve(res.tempFilePath) else reject(new Error('二维码导出失败')) }, fail: (err) => reject(err || new Error('二维码导出失败')) }, componentInstance ) }, 120) } catch (e) { reject(e) } }) }