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

92 lines
2.7 KiB
Vue
Raw Normal View History

2024-08-20 12:11:31 +00:00
<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>