Files
WXProgram/miniprogram/utils/roleUtils.ts

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: '管理员' }
];
}