tdesign-vue-next
Version:
TDesign Component for vue-next
115 lines (109 loc) • 4.33 kB
JavaScript
/**
* tdesign v1.19.2
* (c) 2026 tdesign
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var Vue = require('vue');
var qrcode_components_props = require('./props.js');
var qrcode_hooks_useQRCode = require('../../_chunks/dep-a74d426d.js');
require('@babel/runtime/helpers/classCallCheck');
require('@babel/runtime/helpers/createClass');
require('@babel/runtime/helpers/defineProperty');
var QRCodeCanvas = Vue.defineComponent({
name: "QRCodeCanvas",
props: qrcode_components_props.QRCodeSubComponentProps,
setup: function setup(props) {
var imgSrc = Vue.computed(function () {
var _props$imageSettings;
return (_props$imageSettings = props.imageSettings) === null || _props$imageSettings === void 0 ? void 0 : _props$imageSettings.src;
});
var imageRef = Vue.ref();
var canvasRef = Vue.ref(null);
var imgCrossOrigin = Vue.ref("");
var renderQRCode = function renderQRCode() {
var _calculatedImageSetti;
var _useQRCode = qrcode_hooks_useQRCode.useQRCode({
value: props.value,
level: props.level,
minVersion: qrcode_hooks_useQRCode.DEFAULT_MINVERSION,
includeMargin: qrcode_hooks_useQRCode.DEFAULT_NEED_MARGIN,
marginSize: props.marginSize,
imageSettings: props.imageSettings,
size: props.size
}),
margin = _useQRCode.margin,
cells = _useQRCode.cells,
numCells = _useQRCode.numCells,
calculatedImageSettings = _useQRCode.calculatedImageSettings;
if (!canvasRef.value) {
return;
}
var canvas = canvasRef.value;
var ctx = canvas.getContext("2d");
if (!ctx) {
return;
}
imgCrossOrigin.value = (_calculatedImageSetti = calculatedImageSettings.value) === null || _calculatedImageSetti === void 0 ? void 0 : _calculatedImageSetti.crossOrigin;
var cellsToDraw = cells;
var image = imageRef.value;
if (image) {
image.crossOrigin = calculatedImageSettings.value.crossOrigin;
}
var haveImageToRender = calculatedImageSettings.value && image !== null && (image === null || image === void 0 ? void 0 : image.complete) && image.naturalHeight !== 0 && image.naturalWidth !== 0;
if (haveImageToRender && calculatedImageSettings.value.excavation != null) {
cellsToDraw = Vue.computed(function () {
return qrcode_hooks_useQRCode.excavateModules(cells.value, calculatedImageSettings.value.excavation);
});
}
var pixelRatio = window.devicePixelRatio || 1;
canvas.height = props.size * pixelRatio;
canvas.width = props.size * pixelRatio;
var scale = props.size / numCells.value * pixelRatio;
ctx.scale(scale, scale);
ctx.fillStyle = props.bgColor;
ctx.fillRect(0, 0, numCells.value, numCells.value);
ctx.fillStyle = props.fgColor;
if (qrcode_hooks_useQRCode.isSupportPath2d) {
ctx.fill(new Path2D(qrcode_hooks_useQRCode.generatePath(cellsToDraw.value, margin.value)));
} else {
cells.value.forEach(function (row, rdx) {
row.forEach(function (cell, cdx) {
if (cell) {
ctx.fillRect(cdx + margin.value, rdx + margin.value, 1, 1);
}
});
});
}
if (calculatedImageSettings) {
ctx.globalAlpha = calculatedImageSettings.value.opacity;
}
if (haveImageToRender) {
ctx.globalAlpha = calculatedImageSettings.value.opacity;
ctx.drawImage(image, calculatedImageSettings.value.x + margin.value, calculatedImageSettings.value.y + margin.value, calculatedImageSettings.value.w, calculatedImageSettings.value.h);
}
};
Vue.watchEffect(function () {
renderQRCode();
});
Vue.onMounted(function () {
renderQRCode();
});
return function () {
return Vue.createVNode(Vue.Fragment, null, [Vue.createVNode("canvas", {
"ref": canvasRef,
"role": "img"
}, null), imgSrc.value != null ? Vue.createVNode("img", {
"ref": imageRef,
"onLoad": renderQRCode,
"style": {
display: "none"
},
"src": imgSrc.value
}, null) : null]);
};
}
});
exports["default"] = QRCodeCanvas;
//# sourceMappingURL=qrcode-canvas.js.map