feat:导入组件
This commit is contained in:
parent
c6cda4ee07
commit
1eb1f27f58
101
main/src/components/custom-import-excel/index.vue
Normal file
101
main/src/components/custom-import-excel/index.vue
Normal file
@ -0,0 +1,101 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="state.visible"
|
||||
draggable
|
||||
title="文件导入"
|
||||
width="50%"
|
||||
top="10px"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
@close="onClose"
|
||||
>
|
||||
<div class="import-tips">
|
||||
<p>{{ tips }}</p>
|
||||
<el-button v-if="templateUrl" type="primary" icon="download" text @click="emit('on-download', templateUrl)">下载模板</el-button>
|
||||
</div>
|
||||
<el-upload ref="uploadRef" drag action="#" :show-file-list="true" accept=".xlsx,.xls" :limit="1" :http-request="onUploadExcel">
|
||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||
<div class="el-upload__text">将文件放在此处或单击上传</div>
|
||||
<template #tip>
|
||||
<div class="el-upload__tip">excel文件大小小于500kb</div>
|
||||
</template>
|
||||
</el-upload>
|
||||
<template #footer>
|
||||
<el-button type="primary" @click="onConfirm"> 确定导入</el-button>
|
||||
<el-button @click="onClose"> 取消</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup name="custom-import-excel">
|
||||
import { reactive, ref, shallowRef } from 'vue';
|
||||
import { isEmpty } from '@/utils';
|
||||
const props = defineProps({
|
||||
tips: {
|
||||
type: String,
|
||||
default: '提示:导入前请先下载模板填写信息,然后再导入!',
|
||||
},
|
||||
templateUrl: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
// options: {
|
||||
// type: Object,
|
||||
// default: () => {
|
||||
// return {
|
||||
// tips: '提示:导入前请先下载模板填写信息,然后再导入!',
|
||||
// };
|
||||
// },
|
||||
// },
|
||||
});
|
||||
const emit = defineEmits(['on-confirm', 'on-close', 'on-download']);
|
||||
|
||||
const uploadRef = ref(null);
|
||||
const formDate = shallowRef(null);
|
||||
const state = reactive({
|
||||
visible: false,
|
||||
loading: false,
|
||||
});
|
||||
|
||||
const onUploadExcel = ({ file }) => {
|
||||
if (isEmpty(file.name)) return;
|
||||
formDate.value = new FormData();
|
||||
formDate.value.append('file', file);
|
||||
};
|
||||
|
||||
const onConfirm = () => {
|
||||
emit('on-confirm', formDate.value);
|
||||
};
|
||||
|
||||
const onClose = () => {
|
||||
uploadRef?.value && uploadRef.value.clearFiles();
|
||||
state.visible = false;
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
show: () => {
|
||||
formDate.value = null;
|
||||
state.visible = true;
|
||||
},
|
||||
hide: () => {
|
||||
onClose();
|
||||
},
|
||||
clear: () => {
|
||||
uploadRef?.value && uploadRef.value.clearFiles();
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.import {
|
||||
&-tips {
|
||||
@include flex-row();
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
font-size: 14px;
|
||||
color: #979797;
|
||||
|
||||
p {
|
||||
flex: 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
Loading…
x
Reference in New Issue
Block a user