美文网首页
二维码的生成与下载

二维码的生成与下载

作者: 前端技师胡帅博 | 来源:发表于2019-08-28 11:50 被阅读0次

    npm install qrcodejs2

    <template>
        <div class="home-header">
            <div class="logo-class">
                <img :src="require('@/assets/home/header-logo.png')">
            </div>
    
            <div class="right-class">
                <span v-popover:popover class="qrcode" @click="prevClick">商户二维码</span>
                <el-popover ref="popover" placement="bottom-end" width="150" trigger="manual" v-model="qrcodeVisible">
                    <div id="previewQrcode"></div>
                    <div class="edu-qrcode">教育缴费二维码</div>
                    <div class="edu-qrcode">
                        <el-button class="normal-button" type="primary" @click="downloadAllQrcode">全部下载</el-button>
                    </div>
                </el-popover>
            </div>
    <div @click.stop="qrcodeVisible = false" v-if="qrcodeVisible"
                style="position: fixed;z-index: 1000;width: 100%;height: 100vh;background: rgba(0,0,0,0);top: 0;left: 0;">
            </div>
        </div>
    </template>
    <script>
    import { MM0917 } from '@/api/educationPayment';
    import QRCode from 'qrcodejs2';
    export default {
        data() {
            return {
                qrcodeVisible: false,
                qrcodeStr: '',
                qrcodeObj: null,
            };
        },
    
    // 第二步,生成二维码并展示
        watch: {
            qrcodeStr(val) {
                if (!this.qrcodeObj) {
                    this.qrcodeObj = new QRCode('previewQrcode', {
                        width: 150,
                        height: 150, // 高度
                    });
                }
                if (val) {
                    this.qrcodeObj.clear();
                    this.qrcodeObj.makeCode(val);
                    this.qrcodeVisible = !this.qrcodeVisible;
                }
            },
        },
        methods: {
            myBrowser() {
                const userAgent = navigator.userAgent;
                const isOpera = userAgent.indexOf('Opera') > -1;
                if (userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1 && !isOpera) {
                    return 'IE';
                }
                if (userAgent.indexOf('Trident') > -1) {
                    return 'Edge';
                }
                return null;
            },
            // 第三步,创建下载用的 a 标签
            createA(obj) {
                const brower = this.myBrowser();
                if (brower === 'IE' || brower === 'Edge') {
                    const bstr = atob(obj.url.split(',')[1]);
                    let n = bstr.length;
                    const u8arr = new Uint8Array(n);
                    while (n--) {
                        u8arr[n] = bstr.charCodeAt(n);
                    }
                    const blob = new Blob([u8arr]);
                    window.navigator.msSaveOrOpenBlob(blob, '商户二维码.png');
                } else {
                    const a = document.createElement('a');
                    a.id = obj.id;
                    a.target = '_blank';
                    a.href = obj.url;
                    a.download = '商户二维码';
                    document.body.appendChild(a);
                }
            },
    
            // 第四步,获取要下载的图片, over
            downloadAllQrcode() {
                let imgs = document.querySelectorAll('img');
                // 有一张二维码就是最后一张,有两张就是最后两张
                const length = imgs.length;
                imgs = [imgs[length - 1]];
    
                for (let i = 0; i < imgs.length; i++) {
                    const obj = {
                        id: `img_${i}`,
                        url: imgs[i].src,
                    };
                    this.createA(obj);
                    if (document.getElementById(`img_${i}`)) {
                        document.getElementById(`img_${i}`).click();
                    }
                }
            },
    
            // 第一步,获取二维码的链接
            prevClick() {
                this.qrcodeStr = '';
                MM0917({}).then((res) => {
                    const data = res.body;
                    this.qrcodeStr = `/payment/query/index.html?merchantId=${data.id}&merchantName=${data.merchantName}`;
                }).catch((err) => {
                    tools.errorAlert(err);
                });
            },
        },
    };
    </script>
    、
    
    

    相关文章

      网友评论

          本文标题:二维码的生成与下载

          本文链接:https://www.haomeiwen.com/subject/jmspectx.html