From 0fd1ff197edb9af8f2b666e116ba0096bd7a6ca0 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Tue, 3 Mar 2026 15:16:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=BC=E5=85=A5=E5=92=8C=E5=AD=97=E5=85=B8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=B7=AF=E7=94=B1=E8=B7=B3=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除用户导入接口的deptId参数 使用downloadFile工具函数简化模板下载代码 增加字典数据路由跳转的错误处理 --- src/api/system/user.ts | 4 +--- src/views/system/dict/index.vue | 18 ++++++++++++---- .../user/components/UserImportDialog.vue | 21 +++---------------- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/api/system/user.ts b/src/api/system/user.ts index 1c8be33d..10858b37 100644 --- a/src/api/system/user.ts +++ b/src/api/system/user.ts @@ -133,16 +133,14 @@ const UserAPI = { /** * 导入用户 * - * @param deptId 部门ID * @param file 导入文件 */ - import(deptId: string, file: File) { + import(file: File) { const formData = new FormData(); formData.append("file", file); return request({ url: `${USER_BASE_URL}/import`, method: "post", - params: { deptId }, data: formData, headers: { "Content-Type": "multipart/form-data", diff --git a/src/views/system/dict/index.vue b/src/views/system/dict/index.vue index a9ec2a4e..a84eb099 100644 --- a/src/views/system/dict/index.vue +++ b/src/views/system/dict/index.vue @@ -288,10 +288,20 @@ function handleDelete(id?: number) { // 打开字典数据 function handleOpenDictData(row: DictTypeItem) { - router.push({ - name: "DictItem", - query: { dictCode: row.dictCode, title: `【${row.name}】字典数据` }, - }); + try { + const route = router.resolve({ + name: "DictItem", + query: { dictCode: row.dictCode, title: `【${row.name}】字典数据` }, + }); + if (route.matched.length === 0) { + ElMessage.error("路由未注册,请刷新页面后重试"); + return; + } + router.push(route); + } catch (error) { + console.error("路由跳转失败:", error); + ElMessage.error("页面跳转失败,请刷新页面后重试"); + } } onMounted(() => { diff --git a/src/views/system/user/components/UserImportDialog.vue b/src/views/system/user/components/UserImportDialog.vue index de9962c8..a5c7c150 100644 --- a/src/views/system/user/components/UserImportDialog.vue +++ b/src/views/system/user/components/UserImportDialog.vue @@ -91,6 +91,7 @@ import { ElMessage, type UploadUserFile } from "element-plus"; import UserAPI from "@/api/system/user"; import { ApiCodeEnum } from "@/enums/api"; +import { downloadFile } from "@/utils/download"; const emit = defineEmits(["import-success"]); const visible = defineModel("modelValue", { @@ -134,23 +135,7 @@ const handleFileExceed = () => { // 下载导入模板 const handleDownloadTemplate = () => { UserAPI.downloadTemplate().then((response: any) => { - const fileData = response.data; - const fileName = decodeURI(response.headers["content-disposition"].split(";")[1].split("=")[1]); - const fileType = - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"; - - const blob = new Blob([fileData], { type: fileType }); - const downloadUrl = window.URL.createObjectURL(blob); - - const downloadLink = document.createElement("a"); - downloadLink.href = downloadUrl; - downloadLink.download = fileName; - - document.body.appendChild(downloadLink); - downloadLink.click(); - - document.body.removeChild(downloadLink); - window.URL.revokeObjectURL(downloadUrl); + downloadFile(response); }); }; @@ -161,7 +146,7 @@ const handleUpload = async () => { return; } - const result = await UserAPI.import("1", importFormData.files[0].raw as File); + const result = await UserAPI.import(importFormData.files[0].raw as File); if (result.code === ApiCodeEnum.SUCCESS && result.invalidCount === 0) { ElMessage.success("导入成功,导入数据:" + result.validCount + "条"); emit("import-success");