From 666f205f16ab16b820019d38da9519dbcae5af4f Mon Sep 17 00:00:00 2001 From: zhangrenyuan <18990852002@163.com> Date: Wed, 10 Dec 2025 09:34:27 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=B7=BB=E5=8A=A0=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E5=8F=8A=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/language/languageTranslate.vue | 108 +++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 35 deletions(-) diff --git a/src/views/language/languageTranslate.vue b/src/views/language/languageTranslate.vue index e1c92e0..113f471 100644 --- a/src/views/language/languageTranslate.vue +++ b/src/views/language/languageTranslate.vue @@ -19,7 +19,7 @@
添加 - + 批量导入
@@ -148,16 +148,9 @@
- +
@@ -167,9 +160,7 @@ + :close-on-click-modal="false" style="background-color: rgb(243,250,254);"> @@ -206,21 +197,16 @@ - -
- 下载导入模板: - 中文/英文/泰语/繁体中文/马来语/越南语模板 -
- - + +
将文件拖到此处,或点击上传
@@ -273,7 +259,9 @@ const editForm = ref({ configTime: new Date() }) - +// 导入相关变量 +const uploadFile = ref(null) +const importLoading = ref(false) // 方法定义 防御性编程:函数内部再次检查可以确保即使在其他调用场景中也能正确处理数据 const truncateText = (text) => { @@ -472,22 +460,72 @@ const handleBatchImport = () => { showImportDialog.value = true } -// 下载模板 -const downloadTemplate = () => { - // 这里实现下载模板的逻辑 - ElMessage.info('模板下载功能待实现') -} - // 文件变化处理 const handleFileChange = (file) => { - // 这里处理文件上传逻辑 - console.log('文件变化:', file) + // 验证文件类型 + if (file.raw.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && + file.raw.type !== 'application/vnd.ms-excel') { + ElMessage.error('只能上传Excel文件') + return + } + // 验证文件大小(限制为5MB) + if (file.raw.size > 5 * 1024 * 1024) { + ElMessage.error('文件大小不能超过5MB') + return + } + // 存储文件 + uploadFile.value = file.raw + ElMessage.success('文件选择成功') } +// 添加文件超出限制的处理函数 +const handleExceed = (files, fileList) => { + ElMessage.warning('最多只能上传一个文件'); +}; + // 导入处理 -const handleImport = () => { - // 这里实现导入逻辑 - ElMessage.info('导入功能待实现') +const handleImport = async () => { + if (!uploadFile.value) { + ElMessage.warning('请先选择要导入的文件') + return + } + + importLoading.value = true + + try { + const formData = new FormData() + formData.append('file', uploadFile.value) + + const res = await request({ + url: '/language/batchImport', + method: 'POST', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' // 重要:设置正确的请求头 + } + }) + + if (res.code === 200) { + ElMessage.success(`导入成功`) + // 刷新菜单树(与保存、删除操作保持一致) + await getMenuTree() + // 触发页面刷新以重新加载数据 + setTimeout(() => { + window.location.reload() + }, 500) + // 关闭导入对话框 + showImportDialog.value = false + // 清空上传文件 + uploadFile.value = null + } else { + ElMessage.error(res.msg || '导入失败') + } + } catch (error) { + console.error('导入失败:', error) + ElMessage.error('导入失败,请检查网络或文件格式') + } finally { + importLoading.value = false + } } // 分页处理