zoukankan      html  css  js  c++  java
  • 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

    .

  • 相关阅读:
    CSS浮动(float、clear)通俗讲解
    JAVA 类的加载
    数据库操作 delete和truncate的区别
    正则表达式 匹配相同数字
    Oracle EBS OM 取消订单
    Oracle EBS OM 取消订单行
    Oracle EBS OM 已存在的OM订单增加物料
    Oracle EBS OM 创建订单
    Oracle EBS INV 创建物料搬运单头
    Oracle EBS INV 创建物料搬运单
  • 原文地址:https://www.cnblogs.com/xiangsj/p/11493736.html
Copyright © 2011-2022 走看看