在网页中进行图片的导入导出操作,需要先使用 element-ui 中的 ( Upload 上传) 用户头像上传组件 渲染静态页面
<template>
<el-dialog
width="500px"
title="员工导入"
:visible="showExcelDialog"
@close="$emit('update:showExcelDialog', false)"
>
<el-row type="flex" justify="center">
<div class="upload-excel">
<!-- 监听文件改变-上传excel- @change="ImportFile" -->
<input
ref="excel-upload-input"
class="excel-upload-input"
type="file"
accept=".xlsx"
@change="ImportFile"
>
<div class="drop">
<i class="el-icon-upload" />
<el-button
type="text"
@click="downloadTemplate"
>下载导入模板</el-button>
<span>将文件拖到此处或
<el-button type="text" @click="uploadExcel">点击上传</el-button>
</span>
</div>
</div>
</el-row>
<el-row type="flex" justify="end">
<!-- update:props属性名,值 直接修改 .sync修饰符的属性值 -->
<el-button
size="mini"
type="primary"
@click="$emit('update:showExcelDialog', false)"
>取消</el-button>
</el-row>
</el-dialog>
</template>
进行逻辑处理
<script>
import { importTemplate, uploadExcel } from '@/api/employee'
import { saveAs } from 'file-saver'
export default {
name: 'ImportExcel',
props: {
showExcelDialog: {
type: Boolean,
default: false
}
},
methods: {
// 监听文件改变-上传excel-关闭弹层
async ImportFile(e) {
console.log(e.target.files)
// 拿到上传的文件
const file = e.target.files[0]
try {
// 判断有没有传文件,有文件才继续
if (file) {
const fd = new FormData()
fd.append('file', file)
// 发请求,将文件添加
await uploadExcel(fd)
// 成功后通知父组件刷新
this.$emit('employeeList')
// 关闭弹出
this.$emit('update:show-excel-dialog', false)
// 提示用户
this.$message.success('添加成功')
}
} finally {
// 保证每一次上传后还能再次上传
this.$refs['excel-upload-input'].value = ''
}
},
// 点击上传
async uploadExcel() {
// 发请求
// const res = await uploadExcel()
// console.log(res)
// 点击上传后弹出本地的文件选择框
this.$refs['excel-upload-input'].click()
},
// 下载 下载导入模板
async downloadTemplate() {
// console.log(123)
// 发请求
const res = await importTemplate()
console.log(res)
saveAs(res, '员工信息导入模板.xlsx')
}
}
}
</script>
最后不要忘了加样式
<style scoped lang="scss">
.upload-excel {
display: flex;
justify-content: center;
margin: 20px;
width: 360px;
height: 180px;
align-items: center;
color: #697086;
.excel-upload-input {
display: none;
z-index: -9999;
}
.btn-upload,
.drop {
border: 1px dashed #dcdfe6;
width: 100%;
height: 100%;
text-align: center;
line-height: 160px;
border-radius: 8px;
display: flex;
flex-direction: column;
justify-content: center;
}
.drop {
line-height: 40px;
color: #bbb;
i {
font-size: 60px;
display: block;
color: #c0c4cc;
}
}
}
</style>