<template>
<div>
<!-- show -->
<!-- type="primary" -->
<a-button @click="setQRCode({})" icon="qrcode"></a-button>
<a-modal
:title="title"
:width="800"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleOk"
@cancel="handleCancel"
cancelText="关闭"
wrapClassName="ant-modal-cust-warp"
style="top: 5%; height: 85%; overflow-y: hidden"
>
<center class="qrcodeBox">
<div>标题内容</div>
<div class="qrcode" ref="qrCodeUrl"></div>
<div>
<a @click="copyUrl(qrcodeArrUrl[0])" style="color: rgba(27, 108, 232, 100)"> 复制链接</a>
</div>
</center>
</a-modal>
</div>
</template>
ant vue 二维码弹窗组件 带复制功能
<script>
import QRCode from 'qrcodejs2'
import lodash from 'lodash'
export default {
name: 'RoleModal',
data() {
return {
title: '操作',
model: {},
confirmLoading: false,
visible: false,
qrcodeArr: [],
// 复制url 地址存的位置
qrcodeArrUrl: [],
recData: {},
qrCodeUrlText: 'http://baidu.com/'
}
},
methods: {
setQRCode(rec) {
this.visible = true
this.creatQrCodeAwait(rec)
},
creatQrCodeAwait: lodash.debounce(function(rec) {
this.creatQrCode(rec)
// console.log('屏幕宽度防抖' + this.key)
}, 250),
creatQrCode(rec) {
this.qrcodeArrUrl = [
// this.qrCodeUrlText + 'apply?meetid=' + rec.id,
this.qrCodeUrlText + 'question'
]
this.qrcodeArr[0] = new QRCode(this.$refs.qrCodeUrl, {
text: this.qrCodeUrlText + 'question', // 一问一答
width: 132,
height: 132,
colorDark: '#000000',
colorLight: '#ffffff',
correctLevel: QRCode.CorrectLevel.H
})
},
copy() {
document.execCommand('Copy') // 执行浏览器复制命令
this.$message.success('复制成功')
},
copyUrl(item) {
// 模拟 输入框
let cInput = document.createElement('input')
cInput.value = item
document.body.appendChild(cInput)
cInput.select() // 选取文本框内容
// 执行浏览器复制命令
// 复制命令会将当前选中的内容复制到剪切板中(这里就是创建的input标签)
// Input要在正常的编辑状态下原生复制方法才会生效
document.execCommand('copy') // 执行浏览器复制命令
this.$message.success('复制成功')
// 复制成功后再将构造的标签 移除
document.body.removeChild(cInput)
},
close() {
this.$refs.form.clearValidate()
this.$emit('close')
this.visible = false
},
handleOk() {
this.$emit('ok')
this.handleCancel()
},
handleCancel() {
this.close()
}
}
}
</script>
<style scoped>