92 lines
2.7 KiB
Vue
92 lines
2.7 KiB
Vue
<template>
|
||
<span>
|
||
<el-button class="m-l-sm m-r-sm" @click.stop="openDialog" icon="el-icon-upload2" :disabled="disabled">导入 </el-button>
|
||
<el-dialog title="导入Excel新增数据" :close-on-click-modal="false" :visible.sync="dialogVisible" width="480px" append-to-body>
|
||
<el-row>
|
||
<el-col :span="24">
|
||
<el-alert title="" type="warning" :closable="false">
|
||
<template slot="">
|
||
<div class="text-center">
|
||
<p>您是否有标准的Excel模版,需要依照模版导入,否则会失败。</p>
|
||
<a class="text-info cur-point" @click="exportData()">还没有Excel模版?请下载模版</a>
|
||
</div>
|
||
</template>
|
||
</el-alert>
|
||
</el-col>
|
||
<el-col :span="24" class="text-center m-t">
|
||
<el-upload ref="uploadRef" class="upload-demo" drag accept=".xlsx" :on-success="handleSuccess" :action="url" :headers="headers" :data="params">
|
||
<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-col>
|
||
</el-row>
|
||
<div slot="footer" class="dialog-footer">
|
||
<el-button @click="dialogVisible = false">关闭</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
</span>
|
||
</template>
|
||
<script lang="ts">
|
||
import { downloadFile } from 'utils/index'
|
||
import { getToken } from 'utils/auth'
|
||
import { reactive, toRefs, ref, defineComponent } from 'vue'
|
||
import { Message } from 'element-ui'
|
||
|
||
export default defineComponent({
|
||
props: {
|
||
url: {
|
||
type: String,
|
||
required: true
|
||
},
|
||
templateUrl: {
|
||
type: String,
|
||
required: true
|
||
},
|
||
params: {
|
||
type: Object,
|
||
default: function () {
|
||
return {}
|
||
}
|
||
},
|
||
disabled: {
|
||
type: Boolean,
|
||
default: false
|
||
}
|
||
},
|
||
setup(props: any, context: any) {
|
||
const state = reactive({
|
||
dialogVisible: false,
|
||
headers: { token: getToken() }
|
||
})
|
||
const uploadRef = ref(null)
|
||
function openDialog() {
|
||
uploadRef.value && (uploadRef.value as any).clearFiles()
|
||
state.dialogVisible = true
|
||
state.headers.token = getToken()
|
||
}
|
||
// 导出数据
|
||
function exportData() {
|
||
downloadFile(props.templateUrl, props.params)
|
||
}
|
||
// 数据导入成功回调
|
||
function handleSuccess(res: Base.IResponseData) {
|
||
if (res.success) {
|
||
Message.success(res.message)
|
||
state.dialogVisible = false
|
||
context.emit('getData')
|
||
} else {
|
||
Message.error(res.message)
|
||
}
|
||
}
|
||
return {
|
||
...toRefs(state),
|
||
uploadRef,
|
||
openDialog,
|
||
exportData,
|
||
handleSuccess
|
||
}
|
||
}
|
||
})
|
||
</script>
|