refactor(admin): Rework content governance and video review workspace

This commit is contained in:
2026-04-22 16:44:45 +08:00
parent a6ae978ed0
commit 79f255bf6c
34 changed files with 3742 additions and 769 deletions
+69 -7
View File
@@ -3,6 +3,42 @@ import type { AdminUser, PageResult, PageParams } from '@/types'
export type { AdminUser }
function normalizeAdmin(raw: any): AdminUser {
const firstRole = Array.isArray(raw?.roles) ? raw.roles[0] : undefined
return {
id: Number(raw?.id || 0),
username: raw?.username || '',
nickname: raw?.realName || raw?.nickname || raw?.username || '',
avatar: raw?.avatar || '',
email: raw?.email || '',
phone: raw?.phone || '',
role: firstRole?.code === 'ADMIN_SUPER' ? 'admin' : 'manager',
roleName: firstRole?.name || '',
status: Number(raw?.status ?? 0),
lastLoginTime: raw?.lastLoginTime || '',
lastLoginIp: raw?.lastLoginIp || '',
createTime: raw?.createTime || ''
}
}
function normalizeAdminPage(raw: any, page: number, size: number): PageResult<AdminUser> {
const records = Array.isArray(raw?.records) ? raw.records.map(normalizeAdmin) : []
const total = Number(raw?.total || records.length || 0)
const shouldPaginateLocally = (!raw?.total || raw.total === 0) && records.length > size
const pagedRecords = shouldPaginateLocally
? records.slice((page - 1) * size, page * size)
: records
return {
records: pagedRecords,
total: shouldPaginateLocally ? records.length : total,
size: Number(raw?.size || size),
current: Number(raw?.current || page),
pages: Number(raw?.pages || Math.ceil((shouldPaginateLocally ? records.length : total) / size) || 1)
}
}
/**
* 管理员管理 API
*/
@@ -10,15 +46,19 @@ export const adminApi = {
/**
* 获取管理员列表
*/
getList(params: PageParams & { keyword?: string }): Promise<PageResult<AdminUser>> {
return request.get('/user/list', params)
async getList(params: PageParams & { keyword?: string }): Promise<PageResult<AdminUser>> {
const page = params.page || 1
const size = params.size || 10
const result = await request.get<any>('/user/list', params)
return normalizeAdminPage(result, page, size)
},
/**
* 获取管理员详情
*/
getDetail(id: number): Promise<AdminUser> {
return request.get(`/user/${id}`)
async getDetail(id: number): Promise<AdminUser> {
const result = await request.get<any>(`/user/${id}`)
return normalizeAdmin(result)
},
/**
@@ -32,7 +72,14 @@ export const adminApi = {
phone?: string
role?: string
}): Promise<void> {
return request.post('/user', data)
return request.post('/user', {
username: data.username,
password: data.password,
realName: data.nickname,
email: data.email,
phone: data.phone,
roleIds: [data.role === 'admin' ? 1 : 2]
})
},
/**
@@ -40,12 +87,23 @@ export const adminApi = {
*/
update(data: {
id: number
username: string
nickname?: string
email?: string
phone?: string
role?: string
}): Promise<void> {
return request.put('/user', data)
const payload: Record<string, any> = {
id: data.id,
username: data.username,
realName: data.nickname,
roleIds: [data.role === 'admin' ? 1 : 2]
}
if (data.email) payload.email = data.email
if (data.phone) payload.phone = data.phone
return request.put('/user', payload)
},
/**
@@ -66,6 +124,10 @@ export const adminApi = {
* 重置密码
*/
resetPassword(id: number): Promise<void> {
return request.put(`/user/${id}/reset-password`)
return request.put(`/user/${id}/reset-password`, undefined, {
params: {
newPassword: 'admin123'
}
})
}
}