84 lines
2.2 KiB
JavaScript
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)
|
|
}
|
|
})
|
|
})
|
|
}
|