|
<!--
* @Author: Devin
* @Date: 2023-02-20 14:23:49
* @LastEditors: Devin
* @LastEditTime: 2023-02-22 14:51:24
* @Description:
-->
<template>
<el-button @click.stop="handelDownload">{{ downloadLabel }}</el-button>
</template>
<script setup lang="ts">
const emits = defineEmits(['downloadSucc']);
const props = defineProps({
downloadLabel: {
type: String,
default: () => '下载'
},
type: {
type: String,
default: () => 'blob'
},
url: {
type: String,
default: () => ''
},
fileType: {
type: String,
default: () => 'excel'
},
blob: {
type: Object,
default: () => {}
},
fileName: {
type: String,
default: () => ''
}
});
// 下载excel文件
function downloadExcel() {
const blob = new Blob([props.blob.data], {
type: 'application/vnd.ms-excel application/x-excel;charset=utf-8'
});
const downloadElement = document.createElement('a');
const href = window.URL.createObjectURL(blob); // 创建下载的链接
const fileName = props.fileName
? props.fileName
: decodeURI(
props.blob?.headers['content-disposition'].split('fileName=')[1]
);
downloadElement.href = href;
downloadElement.download = fileName; // 下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); // 点击下载
document.body.removeChild(downloadElement); // 下载完成移除元素
window.URL.revokeObjectURL(href); // 释放掉blob对象
emits('downloadSucc');
}
// 下载zip文件
function downloadZip() {
const downloadElement = document.createElement('a');
const blobData = props.blob.data;
const href = window.URL.createObjectURL(blobData); // 创建下载的链接
downloadElement.href = href;
downloadElement.download = props.fileName; // 下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); // 点击下载
document.body.removeChild(downloadElement); // 下载完成移除元素
window.URL.revokeObjectURL(href); // 释放掉blob对象
emits('downloadSucc');
}
// 下载blob类型
function downloadBlob() {
switch (props.fileType) {
case 'excel':
downloadExcel();
break;
case 'zip':
downloadZip();
break;
default:
break;
}
}
// 下载路径类型
function downloadUrl() {
window.open(props.url);
}
function handelDownload() {
switch (props.type) {
case 'blob':
downloadBlob();
break;
case 'url':
downloadUrl();
break;
default:
break;
}
}
</script>
<script lang="ts">
export default {
name: 'CommonDownload'
};
</script>
<style scoped lang="scss"></style>
|