cmc-web/packages/common/components/import-data/index.vue

92 lines
2.7 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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>