• vue-qriously 生成二维码并下载、cliploard复制粘贴


    xxx.vue

    <template>
        <a-modal
            class="dialogRecharge"
            title="活动链接及二维码"
            v-model="visible"
            width="520px"
            :destroyOnClose="true"
            :footer="null"
            @cancel="$emit('close')"
        >
            <a-tabs type="card" v-model="tabKey" @change="getUrl">
                <a-tab-pane tab="H5页面" key="1"></a-tab-pane>
                <a-tab-pane tab="微信小程序" key="2"></a-tab-pane>
                <a-tab-pane tab="抽奖大屏" key="3"></a-tab-pane>
            </a-tabs>
    
            <div class="codeBox">
                <div class="img">
                    <qriously :id="'mycanvas' + tabKey" :value="dataObj.url" :size="180" />
                </div>
                <a-button class="download" @click="downqriousl('mycanvas' + tabKey)">下载二维码</a-button>
                <div class="copyLink">
                    <a-input-search v-model="dataObj.url" placeholder="51hejia.com....">
                        <a-button slot="enterButton">复制链接</a-button>
                    </a-input-search>
                    <div class="btn" @click="Clip($event, dataObj.url)"></div>
                </div>
            </div>
    
        </a-modal>
    </template>
    
    <script>
    import serviceMarketing from "@/service/marketing.js";
    import Clipboard from 'clipboard';
    export default {
        data() {
            return {
                // visible: true,
                visible: false,
                itemData: {},
                tabKey: '1',
                dataObj: {
                    url: ''
                },
            };
        },
        created() {
        },
        methods: {
            Clip (event, text) {
                let self = this
                const clipboard = new Clipboard(event.target, {
                    text: () => text
                });
                clipboard.on('success', () => {
                    self.$message.success('复制成功')
                    clipboard.off('error');
                    clipboard.off('success');
                    clipboard.destroy();
                });
                clipboard.on('error', () => {
                    self.$message.error('复制失败,请刷新试试')
                    clipboard.off('error')
                    clipboard.off('success')
                    clipboard.destroy()
                });
                clipboard.onClick(event);
            },
            downqriousl(id){
                console.log(id)
                const type = 'png'
                let canvas = document.getElementById(id).querySelector('canvas');
                let imgdata=canvas.toDataURL(type);
                //将mime-type改为image/octet-stream,强制让浏览器下载
                let fixtype=function(type){
                    type=type.toLocaleLowerCase().replace(/jpg/i,'jpeg');
                    let r=type.match(/png|jpeg|bmp|gif/)[0];
                    return 'image/'+r;
                };
                imgdata=imgdata.replace(fixtype(type),'image/octet-stream');
                //将图片保存到本地
                let savaFile=function(data,filename)
                {
                    let save_link=document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
                    save_link.href=data;
                    save_link.download=filename;
                    let event=document.createEvent('MouseEvents');
                    event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);
                    save_link.dispatchEvent(event);
                };
                let filename=''+new Date().getSeconds()+'.'+type;
                //用当前秒是解决重名的问题 不行就换成毫秒
                savaFile(imgdata,filename);
            },
            getUrl () {
                let self = this
                self.$get(serviceMarketing.lotteryUrl.apiUrl, {
                    id: this.itemData.id,
                    type: this.tabKey
                },(res => {
                    if(res.statusCode && res.statusCode == "20000000"){
                        this.dataObj = res.data
                    } else {
                        self.$message.error(res.reason,3);
                    }
                }),serviceMarketing.lotteryUrl.domain);
            },
            modalOpen(itemData) {
                console.log(itemData)
                this.visible = true;
                this.itemData = itemData
                this.getUrl()
            }
        }
    };
    </script>
    
    <style lang="less" scoped>
    .codeBox {
        text-align: center;
        .img{
             180px;
            height: 180px;
            margin: 35px auto 15px;
            // border:1px solid red;
            background: #f4f4f4;
            border-radius: 5px;
            canvas {
                 100%;
                height: 100%;
            }
        }
        .download {
             180px;
            margin-bottom: 10px;
        }
        .copyLink {
            margin:35px 20px 15px; 
            position: relative;
            .btn{
                 90px;
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                z-index: 2;
                cursor: pointer;
            }
        }
    }
    </style>
    View Code

    https://www.cnblogs.com/ruthless/p/9970133.html

    https://segmentfault.com/a/1190000014875645

    .

  • 相关阅读:
    闭包
    函数的嵌套和作用域链
    函数命名空间
    初识函数
    快捷键
    centos7 配置远程ssl证书访问docker
    centos 7 修改主机名称hostname
    centos7 在docker中安装gocron
    centos7 在docker中安装mongodb
    centos7 在docker中安装redis
  • 原文地址:https://www.cnblogs.com/xiangsj/p/11493736.html
Copyright © 2020-2023  润新知