<template>
|
<el-dialog title="二维码" v-model="dialogVisible" width="300px" @close="closeDialog">
|
<div class="text-center">
|
<vueQr ref="query" :text="info.companyCode"></vueQr>
|
<div>{{ info.companyName }}</div>
|
<div style="margin-top: 10px;">
|
<el-link @click="downImage" type="primary">下载企业码</el-link>
|
</div>
|
</div>
|
</el-dialog>
|
</template>
|
|
<script lang="ts" setup>
|
import vueQr from 'vue-qr/src/packages/vue-qr.vue'
|
let dialogVisible = ref(false)
|
const info = ref({})
|
const query = ref()
|
function openDialog(row) {
|
// console.log(row)
|
info.value = row
|
dialogVisible.value = true
|
}
|
function closeDialog() {
|
dialogVisible.value = false
|
}
|
function downImage() {
|
// console.log(query.value.imgUrl)
|
let aLink = document.createElement('a')
|
let blob = base64ToBlob(query.value.imgUrl)
|
let evt = document.createEvent("HTMLEvents")
|
evt.initEvent("click", true, true) // initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为
|
aLink.download = "二维码.png"
|
aLink.href = URL.createObjectURL(blob);
|
// aLink.dispatchEvent(evt);
|
aLink.click()
|
}
|
function base64ToBlob(code) {
|
let parts = code.split(';base64,')
|
let contentType = parts[0].split(':')[1]
|
let raw = window.atob(parts[1])
|
let rawLength = raw.length
|
let uInt8Array = new Uint8Array(rawLength)
|
for (let i = 0; i < rawLength; ++i) {
|
uInt8Array[i] = raw.charCodeAt(i)
|
}
|
return new Blob([uInt8Array], {type: contentType})
|
}
|
defineExpose({
|
openDialog,
|
closeDialog
|
})
|
</script>
|