From ec84ad863a229db2157f2fd15544e3b46385b2c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E7=8B=BC=E8=93=9D=E5=A4=A9?= Date: Sun, 7 Sep 2025 21:37:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(user):=20=E4=BF=AE=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=A0=E9=99=A4=E6=97=B6=E7=9A=84=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加了防止删除当前登录用户的逻辑 - 在批量删除时检查是否包含当前用户,确保当前用户不会被删除 --- src/views/system/user/index.vue | 41 ++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index f8c4d58e..2f31eb24 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -253,7 +253,8 @@ import RoleAPI from "@/api/system/role-api"; import DeptTree from "./components/DeptTree.vue"; import UserImport from "./components/UserImport.vue"; - +import { useUserStore } from "@/store"; +const userStore = useUserStore(); defineOptions({ name: "User", inheritAttrs: false, @@ -425,6 +426,33 @@ const handleSubmit = useDebounceFn(() => { }); }, 1000); +/** + * 检查是否删除当前登录用户 + * @param singleId 单个删除的用户ID + * @param selectedIds 批量删除的用户ID数组 + * @param currentUserInfo 当前用户信息 + * @returns 是否包含当前用户 + */ +function isDeletingCurrentUser( + singleId?: number, + selectedIds: number[] = [], + currentUserInfo?: any +): boolean { + if (!currentUserInfo?.userId) return false; + + // 单个删除检查 + if (singleId && singleId.toString() === currentUserInfo.userId) { + return true; + } + + // 批量删除检查 + if (!singleId && selectedIds.length > 0) { + return selectedIds.map(String).includes(currentUserInfo.userId); + } + + return false; +} + /** * 删除用户 * @@ -437,12 +465,19 @@ function handleDelete(id?: number) { return; } + // 安全检查:防止删除当前登录用户 + const currentUserInfo = userStore.userInfo; + if (isDeletingCurrentUser(id, selectIds.value, currentUserInfo)) { + ElMessage.error("不能删除当前登录用户"); + return; + } + ElMessageBox.confirm("确认删除用户?", "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }).then( - function () { + () => { loading.value = true; UserAPI.deleteByIds(userIds) .then(() => { @@ -451,7 +486,7 @@ function handleDelete(id?: number) { }) .finally(() => (loading.value = false)); }, - function () { + () => { ElMessage.info("已取消删除"); } ); -- Gitee