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>
https://www.cnblogs.com/ruthless/p/9970133.html
https://segmentfault.com/a/1190000014875645
.