yxk_pc_mdh/src/components/Dialog/dialogImportFile.vue

170 lines
4.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-dialog
:title="title"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
width="500px"
@close="handleClose"
>
<el-form ref="uploadForm" :model="form" label-width="80px">
<el-form-item label="选择文件">
<el-upload
ref="upload"
class="upload-demo"
action="#"
drag
:http-request="customUpload"
:headers="uploadHeaders"
:data="uploadData"
:before-upload="beforeUpload"
:on-success="handleSuccess"
:on-error="handleError"
:on-change="handleChange"
:auto-upload="false"
:file-list="fileList"
accept=".xlsx,.xls"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">
只能上传Excel文件且不超过10MB
</div>
</el-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose"> </el-button>
<el-button type="primary" @click="submitUpload" :loading="uploading">
{{ uploading ? '上传中...' : '确 定' }}
</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
name: 'DialogImportFile',
props: {
title: {
type: String,
default: '导入Excel文件'
},
uploadData: {
type: Object,
default: () => ({})
},
uploadHeaders: {
type: Object,
default: () => ({})
},
source: {
type: String,
default: ''
},
visible: {
type: Boolean,
default: false
}
},
data() {
return {
dialogVisible: this.visible,
fileList: [],
uploading: false,
form: {}
};
},
watch: {
visible(newVal) {
this.dialogVisible = newVal;
}
},
methods: {
handleClose() {
this.$emit('update:visible', false);
this.$emit('close');
this.$refs.upload.clearFiles();
this.fileList = [];
},
handleChange(file, fileList) {
this.fileList = fileList.slice(-1);
},
beforeUpload(file) {
const isExcel =
file.type === 'application/vnd.ms-excel' ||
file.type ===
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
const isLt10M = file.size / 1024 / 1024 < 10;
if (!isExcel) {
this.$message.error('只能上传Excel文件');
return false;
}
if (!isLt10M) {
this.$message.error('上传文件大小不能超过10MB');
return false;
}
return true;
},
// 自定义上传方法
async customUpload(options) {
const { file, onSuccess, onError } = options;
try {
const formData = new FormData();
formData.append('file', file);
this.$api.salesAPI.importAllFile(formData,this.source).then(response => {
console.log('上传成功', response);
}).catch(error => {
console.error('上传失败', error);
});
} catch (error) {
onError(error);
}
},
submitUpload() {
if (this.fileList.length === 0) {
this.$message.warning('请先选择文件');
return;
}
this.uploading = true;
this.$refs.upload.submit();
},
handleSuccess(response, file, fileList) {
this.uploading = false;
this.$message.success('文件上传成功');
const _self = this;
setTimeout(() => {
_self.$emit('success', response, file, fileList);
_self.handleClose();
}, 1000);
},
handleError(error, file, fileList) {
this.uploading = false;
this.$message.error('文件上传失败');
this.$emit('error', error, file, fileList);
}
}
};
</script>
<style scoped>
.upload-demo {
width: 100%;
}
.dialog-footer{
padding-right: 20px;
box-sizing: border-box;
}
</style>