diff --git a/frontend/ruoyi-ui/src/settings.js b/frontend/ruoyi-ui/src/settings.js index 7bfcdce..d41e6cc 100644 --- a/frontend/ruoyi-ui/src/settings.js +++ b/frontend/ruoyi-ui/src/settings.js @@ -23,7 +23,7 @@ export default { * 是否显示 tagsView */ tagsView: true, - + /** * 显示页签图标 */ diff --git a/frontend/ruoyi-ui/src/views/business/student/components/ImportDialog.vue b/frontend/ruoyi-ui/src/views/business/student/components/ImportDialog.vue index 7dc30d1..7b245ae 100644 --- a/frontend/ruoyi-ui/src/views/business/student/components/ImportDialog.vue +++ b/frontend/ruoyi-ui/src/views/business/student/components/ImportDialog.vue @@ -30,12 +30,8 @@ { - return import.meta.env.VITE_APP_BASE_API + '/business/student/import' -}) - -// 上传请求头 -const uploadHeaders = computed(() => { - const token = getToken() - return token ? { Authorization: 'Bearer ' + token } : {} -}) - // 下载模板 const handleDownloadTemplate = async () => { downloadLoading.value = true @@ -153,42 +137,58 @@ const beforeUpload = (file) => { return false } importResult.value = null - uploading.value = true - uploadProgress.value = 0 return true } -// 上传进度 -const handleProgress = (event) => { - uploadProgress.value = Math.round(event.percent) -} - -// 上传成功 -const handleSuccess = (response) => { - uploading.value = false +// 自定义上传(使用 request 走 Vite 代理,自动携带 token) +const customUpload = async ({ file, onProgress, onSuccess, onError }) => { + uploading.value = true uploadProgress.value = 0 - if (response.code === 200) { - importResult.value = response.data - if (response.data.failCount === 0) { - ElMessage.success(`导入成功,共导入 ${response.data.successCount} 条数据`) - emit('success') + const formData = new FormData() + formData.append('file', file) + + try { + const response = await request({ + url: '/business/student/import', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + }, + onUploadProgress: (progressEvent) => { + const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100) + uploadProgress.value = percent + onProgress({ percent }) + } + }) + + uploading.value = false + uploadProgress.value = 0 + + // response 是 axios 解析后的数据 + if (response.code === 200) { + importResult.value = response.data + if (response.data.failCount === 0) { + ElMessage.success(`导入成功,共导入 ${response.data.successCount} 条数据`) + emit('success') + } else { + ElMessage.warning('部分数据导入失败,请查看失败原因') + } + onSuccess(response) } else { - ElMessage.warning('部分数据导入失败,请查看失败原因') + ElMessage.error(response.msg || '导入失败') + onError(new Error(response.msg || '导入失败')) } - } else { - ElMessage.error(response.msg || '导入失败') + } catch (error) { + uploading.value = false + uploadProgress.value = 0 + console.error('上传失败:', error) + ElMessage.error('文件上传失败,请重试') + onError(error) } } -// 上传失败 -const handleError = (error) => { - uploading.value = false - uploadProgress.value = 0 - console.error('上传失败:', error) - ElMessage.error('文件上传失败,请重试') -} - // 关闭弹窗 const handleClose = () => { visible.value = false