/** * 角色工具类 - 处理角色枚举的转换和验证 */ /** * 角色枚举定义 * 服务器可能返回数字角色值,前端使用字符串枚举 */ 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: '管理员' } ]; }