{"version":3,"file":"qrcode.vue2.mjs","sources":["../../../../../../packages/components/qrcode/src/qrcode.vue"],"sourcesContent":["<template>\r\n  <div\r\n    :class=\"[bem.b(), bordered ? bem.is('border') : '']\"\r\n    :style=\"containerStyle\"\r\n  >\r\n    <div ref=\"qrContainer\" :style=\"qrContainerStyle\" />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\r\n\r\nimport { createNamespace } from '@ll-plus/utils'\r\n\r\nimport QRCodeStyling, { type Options } from 'qr-code-styling'\r\n\r\nimport { qrcodeProps } from './qrcode'\r\n\r\ndefineOptions({ name: 'LlQrcode' })\r\n\r\nconst bem = createNamespace('qrcode')\r\n\r\nconst props = defineProps(qrcodeProps)\r\n\r\nconst qrContainer = ref<HTMLElement | null>(null)\r\nconst qrCodeInstance = ref<QRCodeStyling | null>(null)\r\n\r\n// 计算容器样式（包括扩展样式）\r\nconst containerStyle = computed(() => ({\r\n  padding: `${props.padding}px`,\r\n  width: `${props.size}px`,\r\n  height: `${props.size}px`,\r\n}))\r\n\r\n// 二维码容器样式\r\nconst qrContainerStyle = computed(() => ({\r\n  width: `${props.size - props.padding * 2}px`,\r\n  height: `${props.size - props.padding * 2}px`,\r\n  background: props.bgColor || '#ffffff',\r\n}))\r\n\r\n// 计算二维码尺寸\r\nconst qrSize = computed(() => {\r\n  // 确保计算出的尺寸不小于最小值\r\n  const MIN_SIZE = 100\r\n\r\n  // 计算基础尺寸\r\n  let calculatedSize = props.size - props.padding * 2\r\n\r\n  // 确保计算出的尺寸有效\r\n  if (calculatedSize <= 0) {\r\n    calculatedSize = MIN_SIZE\r\n  }\r\n\r\n  // 处理用户自定义尺寸\r\n  const width = Math.max(MIN_SIZE, calculatedSize)\r\n  const height = Math.max(MIN_SIZE, calculatedSize)\r\n\r\n  return { width, height }\r\n})\r\n\r\n// 构建QR Code配置对象\r\nconst buildQrConfig = computed(\r\n  (): Partial<Options> => ({\r\n    // 二维码尺寸\r\n    width: qrSize.value.width,\r\n    height: qrSize.value.height,\r\n\r\n    // 核心数据\r\n    data: props.data,\r\n    margin: props.margin,\r\n\r\n    // 图像设置\r\n    image: props.image || undefined,\r\n    imageOptions: {\r\n      hideBackgroundDots: props.imageHideBgDots,\r\n      imageSize: props.imageSize,\r\n      margin: props.imageMargin,\r\n      // base64 图片（data: 协议）不能通过 XHR 转 Blob，必须关闭 saveAsBlob，\r\n      // 否则 qr-code-styling 内部会发起同步 XHR 并抛出 InvalidAccessError\r\n      saveAsBlob: !props.image?.startsWith('data:'),\r\n    },\r\n\r\n    // 二维码选项\r\n    qrOptions: {\r\n      typeNumber: 0,\r\n      mode: 'Byte',\r\n      errorCorrectionLevel: props.errorLevel,\r\n    },\r\n\r\n    // 点样式配置\r\n    dotsOptions: {\r\n      type: props.dotsType,\r\n      color: props.dotsColor || '#000000',\r\n      gradient:\r\n        props.dotsGradientType !== 'single'\r\n          ? {\r\n              type: props.dotsGradientType,\r\n              rotation: props.dotsGradientRotation,\r\n              colorStops: [\r\n                { offset: 0, color: props.dotsGradientStartColor || '#ff0000' },\r\n                { offset: 1, color: props.dotsGradientEndColor || '#0000ff' },\r\n              ],\r\n            }\r\n          : undefined,\r\n    },\r\n\r\n    // 边角方块配置\r\n    cornersSquareOptions: {\r\n      type: props.cornersSquareType,\r\n      color: props.cornersSquareColor || '#000000',\r\n\r\n      gradient:\r\n        props.cornersSquareGradientType !== 'single'\r\n          ? {\r\n              type: props.cornersSquareGradientType,\r\n              rotation: props.cornersSquareGradientRotation,\r\n              colorStops: [\r\n                {\r\n                  offset: 0,\r\n                  color: props.cornersSquareGradientStartColor || '#ff0000',\r\n                },\r\n                {\r\n                  offset: 1,\r\n                  color: props.cornersSquareGradientEndColor || '#0000ff',\r\n                },\r\n              ],\r\n            }\r\n          : undefined,\r\n    },\r\n\r\n    // 边角点配置\r\n    cornersDotOptions: {\r\n      type: props.cornersDotType,\r\n      color: props.cornersDotColor || '#000000',\r\n      gradient:\r\n        props.cornersDotGradientType !== 'single'\r\n          ? {\r\n              type: props.cornersDotGradientType,\r\n              rotation: props.cornersDotGradientRotation,\r\n              colorStops: [\r\n                {\r\n                  offset: 0,\r\n                  color: props.cornersDotGradientStartColor || '#ff0000',\r\n                },\r\n                {\r\n                  offset: 1,\r\n                  color: props.cornersDotGradientEndColor || '#0000ff',\r\n                },\r\n              ],\r\n            }\r\n          : undefined,\r\n    },\r\n\r\n    // 背景配置\r\n    backgroundOptions: {\r\n      color: props.bgColor || '#ffffff',\r\n      gradient:\r\n        props.bgGradientType !== 'single'\r\n          ? {\r\n              type: props.bgGradientType,\r\n              rotation: props.bgGradientRotation,\r\n              colorStops: [\r\n                { offset: 0, color: props.bgGradientStartColor || '#ff0000' },\r\n                { offset: 1, color: props.bgGradientEndColor || '#0000ff' },\r\n              ],\r\n            }\r\n          : undefined,\r\n    },\r\n  }),\r\n)\r\n\r\n// 初始化QR Code实例\r\nconst initQrCode = () => {\r\n  if (!qrContainer.value) return\r\n\r\n  // 创建新的QR Code实例\r\n  qrCodeInstance.value = new QRCodeStyling(buildQrConfig.value as Options)\r\n\r\n  // 清除容器中已有的内容\r\n  while (qrContainer.value.firstChild) {\r\n    qrContainer.value.removeChild(qrContainer.value.firstChild)\r\n  }\r\n\r\n  // 将二维码附加到容器\r\n  qrCodeInstance.value.append(qrContainer.value)\r\n}\r\n\r\n// 更新QR Code\r\nconst updateQrCode = () => {\r\n  if (qrCodeInstance.value) {\r\n    // 使用新配置更新现有实例\r\n    qrCodeInstance.value.update(buildQrConfig.value as Options)\r\n  } else {\r\n    // 如果实例不存在，则初始化\r\n    initQrCode()\r\n  }\r\n}\r\n\r\n// 监听所有props变化（深度监听）\r\nwatch(\r\n  () => Object.values(props),\r\n  () => {\r\n    // 在下一个DOM更新周期更新二维码\r\n    nextTick(updateQrCode)\r\n  },\r\n  { deep: true },\r\n)\r\n\r\n// 组件挂载后初始化二维码\r\nonMounted(() => {\r\n  nextTick(initQrCode)\r\n})\r\n</script>\r\n"],"names":["_createElementBlock","_normalizeClass","_unref","bordered","_createElementVNode"],"mappings":"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"}