【vue】—- ElementUI 實現上傳Excel
1、功能描述:vue 項目使用 el-upload 實現上傳 Excel。
2、功能效果:在el-upload基礎上做了樣式整改。
3、功能實現:
// el-upload 上傳組件
<template>
<div> <el-upload ref="upload" class="upload-demo" action accept=".xlsx" :limit=limit :auto-upload="false" :before-upload="beforeUpload" :on-change="handleChange" :on-remove="handleRemove" :on-exceed="handleExceed" :on-success="handleSuccess" :on-error="handleError" :file-list="fileList" :http-request="uploadFunc" >
<el-button size="small" type="text">+點擊上傳</el-button> </el-upload>
</div>
</template>
// el-upload 相應函數鉤子 <script> export default { data() { return { limit: 1, // 上傳excell時,同時允許上傳的最大數 fileList: [], // excel文件列表 } }, methods:{ // 上傳文件之前的鉤子, 參數為上傳的文件,若返回 false 或者返回 Promise 且被 reject,則停止上傳 beforeUpload(file) { let extension = file.name.substring(file.name.lastIndexOf('.')+1) let size = file.size / 1024 / 1024if(extension !== 'xlsx') { this.$message.warning('只能上傳後綴是.xlsx的文件') } if(size > 10) { this.$message.warning('文件大小不得超過10M') } }, // 文件狀態改變 handleChange(file, fileList) { if (file) { this.fileList = fileList.slice(-3) } }, // 刪除文件 handleRemove(file, fileList) { this.fileList = [] }, // 文件超出個數限制 handleExceed(files, fileList) { this.$message.warning(`只能選擇 ${this.limitNum} 個文件,當前共選擇了 ${files.length + fileList.length} 個`) }, // 文件上傳成功 handleSuccess(res, file, fileList) { this.$message.success('文件上傳成功') }, // 文件上傳失敗 handleError(err, file, fileList) { this.$message.error('文件上傳失敗') }, // 覆蓋默認的上傳行為,自定義上傳的實現 uploadFile() { if (this.fileList.length === 0){ this.$message.warning('請上傳文件') } else { const data = new FormData() const fileUps = file.file data.append('file', fileUps) this.$axios({ headers: { 'Content-Type': 'multipart/form-data' }, url: '/user/batch', data: data, method: 'post' }).then(res=>{ console.log(res) },err =>{ console.log(err) }) } } } } </script>