importData.vue
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<template>
<div>
<el-dialog v-model="show" title="导入牌匾" width="600px" append-to-body draggable>
<el-upload
ref="uploadRef"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
name="file"
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<template #tip>
<div class="el-upload__tip text-center">
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link href="/static/excel/plaque.xls" type="primary" target="_blank">下载模板</el-link>
</div>
</template>
</el-upload>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" :loading="loading" @click="submitFileForm">确 定</el-button>
<el-button @click="show = false">取 消</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="showDialog" width="400" center title="导入结果">
<div class="row">
<span class="">导入成功:{{ form.rightCount }}条</span>
</div>
<div v-if="result==0" class="row">
<span class="error">导入失败:{{ form.errCount }}条</span>
</div>
<br>
<br>
<div style="text-align: center">
<el-button type="primary" @click="showDialog=false">确定</el-button>
<el-button v-if="form.result==0" type="warning" @click="downloadExcel">导出错误信息</el-button>
</div>
</el-dialog>
</div>
</template>
<script setup>
import { getToken } from '@/utils/auth'
import { getCurrentInstance, ref, reactive } from 'vue'
const { proxy } = getCurrentInstance()
const emit = defineEmits(['uploaded'])
const loading = ref(false)
const result = ref()
const form = ref({})
const show = ref(false)
const showDialog = ref(false)
const upload = reactive({
// 是否禁用上传
isUploading: false,
// 设置上传的请求头部
headers: { Authorization: 'Bearer ' + getToken() },
// 上传的地址
url: ''
})
function submitFileForm() {
proxy.$refs['uploadRef'].submit()
}
const handleFileUploadProgress = (event, file, fileList) => {
upload.isUploading = true
}
const handleFileSuccess = (response, file, fileList) => {
loading.value = true
show.value = false
upload.isUploading = false
proxy.$refs['uploadRef'].handleRemove(file)
// proxy.$alert(
// "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
// response.msg +
// '</div>',
// '导入结果',
// { dangerouslyUseHTMLString: true }
// ).then(() => {
// emit('uploaded')
// })
try {
form.value = response.data
result.value = response.data.result
showDialog.value = true
} catch (e) {
if (response.code == 500) return proxy.$modal.msgError(response.msg)
} finally {
loading.value = false
emit('uploaded')
}
}
function open() {
upload.url = `${import.meta.env.VITE_APP_BASE_API}/member/info/importMemberPlaque`
show.value = true
}
// 下载
function downloadExcel() {
proxy.download(
`/member/info/exportImportMemberPlaqueResult`, { info: JSON.stringify(form.value.info) }, `导入结果${new Date().getTime()}.xlsx`
)
}
defineExpose({
open
})
</script>
<style scoped>
</style>