app-preset-qrcode.vue 2.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
<template>
  <div class="app-preset-qrcode">
    <template v-if="QRCodeConfig.url">
      <vue-qr
        class="app-vue-qr"
        :size="QRCodeConfig.size"
        :text="QRCodeConfig.url"
        :bgSrc="QRCodeConfig.bgSrc"
        :margin="QRCodeConfig.margin"
        :backgroundColor="QRCodeConfig.backgroundColor"
        :logoSrc="QRCodeConfig.logoSrc"
        :logoMargin="QRCodeConfig.logoMargin"
        :logoBackgroundColor="QRCodeConfig.logoBgColor"
        :logoCornerRadius="QRCodeConfig.logoRadius"
        :whiteMargin="QRCodeConfig.whiteMargin"
        :callback="callback"
      >
      </vue-qr>
    </template>
  </div>
</template>

<script lang="ts">
import { Vue, Component, Prop } from 'vue-property-decorator';
import vueQr from 'vue-qr';

@Component({
  components: { vueQr },
})
export default class AppPresetQrcode extends Vue {
  /**
   * 内容 value数据格式:对象类型的JSON字符串,参数类型与QRCodeConfig一致:"{ "url": "http://www.baidu.com" }"
   *
   * @type {string}
   * @memberof AppRawItem
   */
  @Prop() public value?: any;

  /**
   * ibiz-qr-code组件可传参数
   * @param {number} size  二维码大小,包含边框
   * @param {string} url  二维码内容
   * @param {string} bgSrc  背景图片
   * @param {number} margin 二维码外边距
   * @param {string} backgroundColor 背景颜色
   * @param {string} logoSrc 中央图标logo地址
   * @param {number} logoMargin logo周围的空白边框
   * @param {string} logoBgColor logo边框的背景色
   * @param {number} logoRadius logo边框圆角半径
   * @param {boolean} whiteMargin 背景图外是否设置白色边框
   * @type {*}
   * @memberof AppQRCode
   */
  public QRCodeConfig: {
    size?: number;
    url?: string;
    bgSrc?: string;
    margin?: number;
    backgroundColor?: string;
    logoSrc?: string;
    logoMargin?: number;
    logoBgColor?: string;
    logoRadius?: number;
    whiteMargin?: boolean;
  } = {};

  /**
   * 二维码生成的回调函数
   * @type {*}
   * @memberof AppQRCode
   */
  public callback(event: any) {
    // TODO
  }

  /**
   * 获取二维码数据
   * @type {*}
   * @memberof AppQRCode
   */
  public created() {
    this.getQRCodeData();
  }

  /**
   * 获取二维码绘制数据
   *
   * @type {*}
   * @memberof AppQRCode
   */
  public getQRCodeData() {
    if (this.value && typeof this.value == 'string') {
      const value = JSON.parse(this.value);
      const { size, url, bgSrc, margin, backgroundColor, logoSrc, logoMargin, logoBgColor, logoRadius, whiteMargin } =
        value;
      this.QRCodeConfig = {
        size,
        url,
        bgSrc,
        margin,
        backgroundColor,
        logoSrc,
        logoMargin,
        logoBgColor,
        logoRadius,
        whiteMargin,
      };
      // TODO
    }
  }
}
</script>

<style lang='less'>
@import './app-preset-qrcode.less';
</style>