From da75094367107981de2a5b6a5d5e06e6df226c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Mon, 2 Feb 2026 20:19:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E4=B8=8A=E4=BC=A0=E8=AE=A4=E8=AF=81=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用自定义上传方法(http-request)替代原生action, 通过项目的request工具发送请求,自动走Vite代理并携带token --- frontend/ruoyi-ui/src/settings.js | 2 +- .../student/components/ImportDialog.vue | 88 +++++++++---------- 2 files changed, 45 insertions(+), 45 deletions(-) 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