task-21(会话/菜单/权限): 定义 AdminUser/AdminMenuNode 类型契约并对齐后端字段
admin.ts 增加 AdminRole 域与 roleKind/isSuperAdminRole/isAdminRole/roleLabel/ isSuperUser,AdminUser 补齐 isAdmin/creatorUsername/createdAt 等真实字段; 契约覆盖“分组可无 route、页面必有 route”。
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
/** 后台前端类型契约(任务 21):与 Java Admin 接口返回字段对齐。 */
|
||||
|
||||
/** 管理角色域(与后端 current-user / users 返回一致)。 */
|
||||
export type AdminRole = 'super_admin' | 'admin' | 'normal'
|
||||
|
||||
export interface AdminUser {
|
||||
id: number
|
||||
username: string
|
||||
role: string
|
||||
/** 1 为管理员标志位;role 为空时可据此推断角色。 */
|
||||
isAdmin?: boolean
|
||||
createdById?: number | null
|
||||
creatorUsername?: string
|
||||
createdAt?: string
|
||||
pinyinAbbr?: string
|
||||
}
|
||||
|
||||
export interface AdminMenuNode {
|
||||
/** columns.column_key,稳定权限标识。 */
|
||||
key: string
|
||||
name: string
|
||||
/** 相对 /admin-vue/ 的页面路径;分组节点可能没有。 */
|
||||
route?: string
|
||||
/** 分组/页面层级;后端按 sort_order 排好后原样下发,前端不二次重排。 */
|
||||
children?: AdminMenuNode[]
|
||||
sort?: number
|
||||
icon?: string
|
||||
}
|
||||
|
||||
export type AdminRoleKind = 'super_admin' | 'admin' | 'normal' | null
|
||||
|
||||
/** 把任意角色字符串归一为角色域;未知/空返回 null。 */
|
||||
export function roleKind(role: string | null | undefined): AdminRoleKind {
|
||||
const value = (role || '').trim().toLowerCase()
|
||||
if (value === 'super_admin') return 'super_admin'
|
||||
if (value === 'admin') return 'admin'
|
||||
if (value === 'normal') return 'normal'
|
||||
return null
|
||||
}
|
||||
|
||||
/** 是否超级管理员(可进入全部菜单)。 */
|
||||
export function isSuperAdminRole(role: string | null | undefined): boolean {
|
||||
return roleKind(role) === 'super_admin'
|
||||
}
|
||||
|
||||
/** 是否管理员级(super_admin 或 admin,可进后台菜单管理类)。 */
|
||||
export function isAdminRole(role: string | null | undefined): boolean {
|
||||
const kind = roleKind(role)
|
||||
return kind === 'super_admin' || kind === 'admin'
|
||||
}
|
||||
|
||||
/** 顶部栏角色展示文案。 */
|
||||
export function roleLabel(role: string | null | undefined): string {
|
||||
switch (roleKind(role)) {
|
||||
case 'super_admin':
|
||||
return '超级管理员'
|
||||
case 'admin':
|
||||
return '管理员'
|
||||
case 'normal':
|
||||
return '普通用户'
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/** 前端是否应把该用户视为超级管理员(可进入全部菜单)。 */
|
||||
export function isSuperUser(user: Pick<AdminUser, 'role'> | null | undefined): boolean {
|
||||
return isSuperAdminRole(user?.role)
|
||||
}
|
||||
|
||||
export type ApiEnvelope<T> = {
|
||||
success?: boolean
|
||||
message?: string
|
||||
error?: string
|
||||
data?: T
|
||||
item?: T
|
||||
items?: T
|
||||
}
|
||||
Reference in New Issue
Block a user