From 7ad6b3ddbe9cea81d0c7e097b83d7eea9e0b10e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=83=AD=E5=BA=86=E6=B3=B0?=
<12369755+htcloud1@user.noreply.gitee.com>
Date: Thu, 20 Aug 2026 21:46:47 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20/admin/users=20=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8C=89=E9=92=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
admin 用户管理此前只有编辑/停用, 没有删除入口 (但后端 DELETE /system/user/{userIds} 一直存在, @PreAuthorize('system:user:remove'))。
改动:
- 操作列新增「删除」按钮 (danger, link 风格, 与编辑/停用风格一致)
- 操作列宽度 180 → 240 容纳 3 个按钮
- 删除自己时禁用 (前端 UX 防护, 后端亦会 reject: ArrayUtils.contains(userIds, getUserId()))
- 二次确认框: 提示用户名/姓名 + 「删除后无法恢复, 关联数据将受影响」, type='error', 红色「确认删除」按钮
- 后端: DELETE /system/user/{userId} (RuoYi 标准 /{userIds} 路径, 单 ID 即可)
权限: admin 角色默认拥有 system:user:remove (RuoYi 默认 admin 配), 验证通过后即生效。
---
ry-vue3/src/views/admin/Users.vue | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/ry-vue3/src/views/admin/Users.vue b/ry-vue3/src/views/admin/Users.vue
index 353d64b..195cf2f 100644
--- a/ry-vue3/src/views/admin/Users.vue
+++ b/ry-vue3/src/views/admin/Users.vue
@@ -39,12 +39,19 @@
-
+
编辑
{{ row.status === '0' ? '停用' : '启用' }}
+ 删除
@@ -94,7 +101,10 @@
import { ref, reactive, onMounted } from 'vue'
import { listUser } from '@/api/system'
import request from '@/utils/request'
-import { ElMessage } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { useUserStore } from '@/store/user'
+
+const userStore = useUserStore()
const ROLE_LABEL = {
admin: '后台管理员', leader: '项目负责人', manager: '合规人员',
@@ -164,6 +174,23 @@ async function toggleStatus(row) {
}
}
+async function delUser(row) {
+ try {
+ await ElMessageBox.confirm(
+ `确认删除用户「${row.userName}」(${row.nickName || '无姓名'})?\n\n删除后无法恢复, 该用户关联的项目/会议/报名数据将受影响!`,
+ '删除确认',
+ { type: 'error', confirmButtonText: '确认删除', cancelButtonText: '取消' }
+ )
+ } catch { return }
+ try {
+ await request({ url: `/system/user/${row.userId}`, method: 'delete' })
+ ElMessage.success('已删除')
+ load()
+ } catch (e) {
+ ElMessage.error(e?.msg || '删除失败')
+ }
+}
+
onMounted(load)