From c6d05111cc2207c9577d5061d4bdea3c5546efff Mon Sep 17 00:00:00 2001 From: Alexandrina-Kuzeleva Date: Tue, 25 Nov 2025 15:34:35 +0300 Subject: [PATCH] Update LeaderBoard.vue --- frontend/src/pages/LeaderBoard.vue | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/LeaderBoard.vue b/frontend/src/pages/LeaderBoard.vue index 67e1caf4..caa4b75f 100644 --- a/frontend/src/pages/LeaderBoard.vue +++ b/frontend/src/pages/LeaderBoard.vue @@ -185,21 +185,27 @@ watchEffect(() => { if (currentUserRole.value && !loading.value) selectedRole.value = currentUserRole.value }) -// Получаем роли пользователя +// Получаем роли пользователя безопасно function getRolesByEmail(email) { - return userResource.data?.find(u => u.name === email)?.roles || [] + if (!userResource.data || !Array.isArray(userResource.data)) return [] + const u = userResource.data.find(u => u.name === email) + return u?.roles || [] } // Подсчёт по ролям для табов const countByRole = (role) => { - return userResource.data?.filter(u => u.roles.includes(role)).length || 0 + if (!userResource.data || !Array.isArray(userResource.data)) return 0 + return userResource.data.filter(u => u.roles.includes(role)).length } // Фильтруем leaderboard по выбранной роли -const filteredLeaderboard = computed(() => - leaderboard.value.map(u => ({ ...u, roles: getRolesByEmail(u.user) })) - .filter(u => u.roles.includes(selectedRole.value)) -) +const filteredLeaderboard = computed(() => { + if (!userResource.data || !Array.isArray(userResource.data)) return [] + return leaderboard.value + .map(u => ({ ...u, roles: getRolesByEmail(u.user) })) + .filter(u => u.roles.includes(selectedRole.value)) +}) + const currentUserInGroup = computed(() => currentUserRole.value === selectedRole.value) const currentUserGroupPoints = computed(() => { @@ -249,6 +255,7 @@ async function loadData() { loading.value = true try { + await userResource.fetch() const logsResponse = await logsResource.fetch() const pointsMap = {}