import type { Role } from "@/store/permissionSettingsStore"; import type { ManagedUser } from "@/types/ManagedUser"; type ManagedUserRole = NonNullable[number]; function buildRoleCode(role: Role): string { return role.moduleCode && !role.code.includes(":") ? `${role.moduleCode}:${role.code}` : role.code; } function findRole(role: ManagedUserRole, roleList: Role[]): Role | undefined { if (typeof role === "string") { return roleList.find(roleItem => buildRoleCode(roleItem) === role); } return roleList.find(roleItem => roleItem.id === role.id || buildRoleCode(roleItem) === buildRoleCode(role as Role)); } export function getManagedUserRoleList(user: ManagedUser): ManagedUserRole[] { if (user.user?.roleEntityList?.length) { return user.user.roleEntityList; } return user.roleList || user.user?.roleList || []; } export function getRoleDisplayName(role: ManagedUserRole | undefined, roleList: Role[]): string { if (!role) { return "未配置角色"; } const fullRole = findRole(role, roleList); if (fullRole) { return fullRole.name || fullRole.code || "未配置角色"; } return typeof role === "string" ? role : role.name || role.code || "未配置角色"; } export function buildEffectiveRoleCodeSet(user: ManagedUser): Set { const roleCodeSet = new Set(); for (const role of getManagedUserRoleList(user)) { if (typeof role !== "string") { roleCodeSet.add(buildRoleCode(role as Role)); continue; } roleCodeSet.add(role); } return roleCodeSet; }