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 @@ - + @@ -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)