task-51(账号/权限页面): 实现用户删除确认和刷新

新增 user-delete-model.ts 纯模型:deleteConfirmMessage/deleteBlockReason 镜像 Java
deleteUser 约束(不能删自己/超管)、isDeletableUser。users.ts 增 deleteUser DELETE
/api/admin/user/{uid} 并由 unwrap 抛后端 message;UsersPage 删除改走 adapter、二次确认后
刷新列表(超管行直接告警拦截),不再内联 http.delete、不入 session store。
8 用例全过,371 单测 + build 绿。
This commit is contained in:
2026-09-05 15:09:55 +08:00
parent 2077f871f8
commit 47d1c6bf80
4 changed files with 102 additions and 3 deletions
+7
View File
@@ -1,4 +1,5 @@
import { http } from './http'
import { unwrap } from './envelope'
import { parseUserPage } from './users-model'
import {
normalizeUserPageParams,
@@ -13,3 +14,9 @@ export async function fetchUserList(params: Partial<UserListParams> = {}): Promi
const { data } = await http.get('/api/admin/users', { params: toUserListQuery(normalized) })
return parseUserPage(data)
}
/** 删除用户:DELETE /api/admin/user/{uid}success=false 由 unwrap 抛后端 message。 */
export async function deleteUser(uid: number): Promise<void> {
const { data } = await http.delete<unknown>(`/api/admin/user/${uid}`)
unwrap<unknown>(data)
}
@@ -1,11 +1,11 @@
<script setup lang="ts">
import { onMounted, reactive, ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { http } from '@/api/http'
import type { AdminUser } from '@/types/admin'
import { fetchUserList } from '@/api/users'
import { deleteUser, fetchUserList } from '@/api/users'
import { createUserFilterState, toUserListParams } from './users-filter'
import { totalPageCount } from './user-pagination'
import { deleteBlockReason } from './user-delete-model'
const loading = ref(false)
const rows = ref<AdminUser[]>([])
@@ -40,9 +40,14 @@ function search() {
}
async function removeUser(row: AdminUser) {
const reason = deleteBlockReason(row)
if (reason) {
ElMessage.warning(reason)
return
}
try {
await ElMessageBox.confirm(`确定删除用户“${row.username}”吗?`, '删除确认', { type: 'warning' })
await http.delete(`/api/admin/user/${row.id}`)
await deleteUser(row.id)
ElMessage.success('删除成功')
await loadUsers()
} catch (error) {
@@ -0,0 +1,24 @@
/** 用户删除确认模型(任务 51):删除确认文案 + 不可删原因,镜像 Java deleteUser 约束。 */
import type { AdminUser } from '../../types/admin'
/** 删除二次确认文案(删除后不可恢复)。 */
export function deleteConfirmMessage(user: AdminUser | null | undefined): string {
const username = user?.username || ''
return `确定删除用户“${username}”吗?删除后不可恢复。`
}
/** 返回不可删除原因;可删除时返回 undefined。 */
export function deleteBlockReason(
user: AdminUser | null | undefined,
currentUserId?: number | null,
): string | undefined {
if (!user) return '用户信息缺失,无法删除'
if (currentUserId != null && user.id === currentUserId) return '不能删除当前登录账号'
if ((user.role || '').trim().toLowerCase() === 'super_admin') return '不能删除超级管理员'
return undefined
}
/** 该用户当前是否允许删除(非缺失/非自己/非超管)。 */
export function isDeletableUser(user: AdminUser | null | undefined, currentUserId?: number | null): boolean {
return deleteBlockReason(user, currentUserId) === undefined
}