refactor: 优化用户导入和字典数据路由跳转逻辑

移除用户导入接口的deptId参数
使用downloadFile工具函数简化模板下载代码
增加字典数据路由跳转的错误处理
This commit is contained in:
Ray.Hao
2026-03-03 15:16:18 +08:00
parent cee65ba58d
commit 0fd1ff197e
3 changed files with 18 additions and 25 deletions

View File

@@ -133,16 +133,14 @@ const UserAPI = {
/** /**
* 导入用户 * 导入用户
* *
* @param deptId 部门ID
* @param file 导入文件 * @param file 导入文件
*/ */
import(deptId: string, file: File) { import(file: File) {
const formData = new FormData(); const formData = new FormData();
formData.append("file", file); formData.append("file", file);
return request<any, ExcelResult>({ return request<any, ExcelResult>({
url: `${USER_BASE_URL}/import`, url: `${USER_BASE_URL}/import`,
method: "post", method: "post",
params: { deptId },
data: formData, data: formData,
headers: { headers: {
"Content-Type": "multipart/form-data", "Content-Type": "multipart/form-data",

View File

@@ -288,10 +288,20 @@ function handleDelete(id?: number) {
// 打开字典数据 // 打开字典数据
function handleOpenDictData(row: DictTypeItem) { function handleOpenDictData(row: DictTypeItem) {
router.push({ try {
const route = router.resolve({
name: "DictItem", name: "DictItem",
query: { dictCode: row.dictCode, title: `${row.name}】字典数据` }, 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(() => { onMounted(() => {

View File

@@ -91,6 +91,7 @@
import { ElMessage, type UploadUserFile } from "element-plus"; import { ElMessage, type UploadUserFile } from "element-plus";
import UserAPI from "@/api/system/user"; import UserAPI from "@/api/system/user";
import { ApiCodeEnum } from "@/enums/api"; import { ApiCodeEnum } from "@/enums/api";
import { downloadFile } from "@/utils/download";
const emit = defineEmits(["import-success"]); const emit = defineEmits(["import-success"]);
const visible = defineModel("modelValue", { const visible = defineModel("modelValue", {
@@ -134,23 +135,7 @@ const handleFileExceed = () => {
// 下载导入模板 // 下载导入模板
const handleDownloadTemplate = () => { const handleDownloadTemplate = () => {
UserAPI.downloadTemplate().then((response: any) => { UserAPI.downloadTemplate().then((response: any) => {
const fileData = response.data; downloadFile(response);
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);
}); });
}; };
@@ -161,7 +146,7 @@ const handleUpload = async () => {
return; 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) { if (result.code === ApiCodeEnum.SUCCESS && result.invalidCount === 0) {
ElMessage.success("导入成功,导入数据:" + result.validCount + "条"); ElMessage.success("导入成功,导入数据:" + result.validCount + "条");
emit("import-success"); emit("import-success");