目前在做的一个项目有个需求:上传Excel文件,实现数据的导入。和大家分享一下,第一次写,格式可能有些乱。
实现效果如下图所示:
1、实现效果图
2、Template内的代码
<template>
<div>
<div class="uploadDiv">
<!-- 下载模板按钮 -->
<el-button type="primary" @click="downloadTemplate">下载模板文件</el-button>
<!-- 文件上传按钮 -->
<el-button type="primary" @click="dialogVisible = true">导入党员信息</el-button>
</div>
<el-dialog :visible.sync="dialogVisible" title="上传党员信息">
<el-upload
class="upload-demo"
:show-file-list="false"
:on-success="uploadSuccess"
:before-upload="beforeExcelUpload"
drag
style="text-align: center"
:action="uploadUrl"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">只能上传Excel表格文件</div>
</el-upload>
</el-dialog>
</div>
</template>
3、script代码
<script>
export default {
name: "",
data() {
return {
uploadUrl: "你自己的上传Excel地址",
dialogVisible: false,
};
},
methods: {
// 显示所有数据
// 根据自己的代码从后端获取数据
showAll() {
...
},
// 文件上传成功的处理函数
uploadSuccess(response, file, fileList) {
this.dialogVisible = false; // 关闭弹出框
if (response.code == 200) {
this.$message({
message: "上传成功",
type: "success",
});
this.showAll(); // 上传成功之后重新查询列表
} else {
this.$message({
message: "上传失败,系统异常",
type: "error",
});
}
},
// 上传前对文件的格式和大小的判断
beforeExcelUpload(file) {
const extension = file.name.split(".")[1] === "xls";
const extension2 = file.name.split(".")[1] === "xlsx";
const isLt2M = file.size / 1024 / 1024 < 10;
if (!extension && !extension2) {
this.$message({
message: "上传模板只能是 xls、xlsx格式!",
type: "error",
});
return false; // return false就不会走上传接口
}
if (!isLt2M) {
this.$message({
message: "上传模板大小不能超过 10MB!",
type: "error",
});
return false;
}
return extension || extension2; // 必须要有返回值
},
// 下载模板文件
downloadTemplate() {
// 获取项目部署的基础路径
const baseUrl = window.location.origin;
// 构建文件的完整 URL
// 模板文件我是存放在了项目public/template文件夹中
let downloadUrl = `${baseUrl}/template/信息表.xlsx`;
var a = document.createElement("a");
a.href = downloadUrl;
a.download = "信息表.xlsx";
a.style.display = "none";
document.body.appendChild(a);
a.click();
a.remove();
},
},
};
</script>
以上便是Vue2+ElementUI实现上传Excel文件导入数据的功能。