85 lines
2.1 KiB
TypeScript
85 lines
2.1 KiB
TypeScript
/**
|
|
* 角色工具类 - 处理角色枚举的转换和验证
|
|
*/
|
|
|
|
/**
|
|
* 角色枚举定义
|
|
* 服务器可能返回数字角色值,前端使用字符串枚举
|
|
*/
|
|
export enum Role {
|
|
DELIVERY_PERSON = 'DELIVERY_PERSON', // 配送员
|
|
ADMIN = 'ADMIN' // 管理员
|
|
}
|
|
|
|
/**
|
|
* 角色值映射
|
|
* 服务器返回的数字角色值到前端字符串枚举的映射
|
|
*/
|
|
export const RoleMapping = {
|
|
0: Role.DELIVERY_PERSON, // 0对应配送员
|
|
1: Role.ADMIN // 1对应管理员
|
|
} as const;
|
|
|
|
/**
|
|
* 将服务器返回的角色值转换为前端枚举
|
|
* @param roleValue 服务器返回的角色值(可能是数字或字符串)
|
|
* @returns 标准化的角色枚举值
|
|
*/
|
|
export function normalizeRole(roleValue: string | number): Role {
|
|
if (typeof roleValue === 'number') {
|
|
// 如果是数字,使用映射表转换
|
|
return RoleMapping[roleValue as keyof typeof RoleMapping] || Role.DELIVERY_PERSON;
|
|
}
|
|
|
|
// 如果是字符串,直接转换为大写进行比较
|
|
const normalizedRole = roleValue.toUpperCase();
|
|
|
|
// 检查是否是有效的角色值
|
|
if (normalizedRole === Role.ADMIN) {
|
|
return Role.ADMIN;
|
|
}
|
|
|
|
// 默认返回配送员
|
|
return Role.DELIVERY_PERSON;
|
|
}
|
|
|
|
/**
|
|
* 获取角色显示文本
|
|
* @param role 角色枚举值
|
|
* @returns 对应的中文显示文本
|
|
*/
|
|
export function getRoleText(role: Role): string {
|
|
switch (role) {
|
|
case Role.ADMIN:
|
|
return '管理员';
|
|
case Role.DELIVERY_PERSON:
|
|
return '配送员';
|
|
default:
|
|
return '未知角色';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 验证角色值是否有效
|
|
* @param roleValue 角色值
|
|
* @returns 是否有效
|
|
*/
|
|
export function isValidRole(roleValue: string | number): boolean {
|
|
try {
|
|
const normalized = normalizeRole(roleValue);
|
|
return normalized === Role.ADMIN || normalized === Role.DELIVERY_PERSON;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取角色选项列表(用于下拉选择器)
|
|
* @returns 角色选项数组
|
|
*/
|
|
export function getRoleOptions(): Array<{ value: Role; label: string }> {
|
|
return [
|
|
{ value: Role.DELIVERY_PERSON, label: '配送员' },
|
|
{ value: Role.ADMIN, label: '管理员' }
|
|
];
|
|
} |