buddhism/utils/qrcode.js
2025-08-15 16:54:57 +08:00

84 lines
2.2 KiB
JavaScript

import QRCode from 'qrcode'
/**
* 生成二维码
* @param {string} text - 要生成二维码的文本内容
* @param {Object} options - 二维码配置选项
* @returns {Promise<string>} 返回base64格式的二维码图片
*/
export function generateQRCode(text, options = {}) {
const defaultOptions = {
width: 200,
margin: 2,
color: {
dark: '#000000',
light: '#FFFFFF'
},
errorCorrectionLevel: 'M'
}
const qrOptions = { ...defaultOptions, ...options }
return new Promise((resolve, reject) => {
QRCode.toDataURL(text, qrOptions, (err, url) => {
if (err) {
console.error('生成二维码失败:', err)
reject(err)
} else {
resolve(url)
}
})
})
}
/**
* 生成核销验证码二维码
* @param {string} subscribeId - 预约ID
* @param {Object} options - 二维码配置选项
* @returns {Promise<string>} 返回base64格式的二维码图片
*/
export function generateVerificationQRCode(subscribeId, options = {}) {
// 构建核销验证码的文本内容
const verificationText = `VERIFY:${subscribeId}`
return generateQRCode(verificationText, options)
}
/**
* 生成二维码并保存到本地
* @param {string} text - 要生成二维码的文本内容
* @param {string} filePath - 保存路径
* @param {Object} options - 二维码配置选项
* @returns {Promise<string>} 返回保存的文件路径
*/
export function generateQRCodeToFile(text, filePath, options = {}) {
return new Promise((resolve, reject) => {
QRCode.toFile(filePath, text, options, (err) => {
if (err) {
console.error('生成二维码文件失败:', err)
reject(err)
} else {
resolve(filePath)
}
})
})
}
/**
* 生成二维码的Canvas元素
* @param {string} text - 要生成二维码的文本内容
* @param {Object} options - 二维码配置选项
* @returns {Promise<HTMLCanvasElement>} 返回Canvas元素
*/
export function generateQRCodeCanvas(text, options = {}) {
return new Promise((resolve, reject) => {
QRCode.toCanvas(text, options, (err, canvas) => {
if (err) {
console.error('生成二维码Canvas失败:', err)
reject(err)
} else {
resolve(canvas)
}
})
})
}