From ce51371e62a5c011d660f37efe87133b0dfa095c Mon Sep 17 00:00:00 2001 From: Alexandrina-Kuzeleva Date: Tue, 25 Nov 2025 13:14:13 +0300 Subject: [PATCH] TEST UPD - roles --- frontend/src/pages/LeaderBoard.vue | 49 +++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/frontend/src/pages/LeaderBoard.vue b/frontend/src/pages/LeaderBoard.vue index d63a42a6..1abf9d82 100644 --- a/frontend/src/pages/LeaderBoard.vue +++ b/frontend/src/pages/LeaderBoard.vue @@ -205,10 +205,11 @@ async function loadData() { try { loading.value = true - const [logsResponse, usersResponse] = await Promise.all([ - logsResource.fetch(), - usersResource.fetch() - ]) + const [logsResponse, usersResponse, rolesResponse] = await Promise.all([ + logsResource.fetch(), + usersResource.fetch(), + rolesResource.fetch() + ]) console.log("Energy Point Log:", logsResponse) console.log("Users с ролями:", usersResponse) @@ -220,14 +221,22 @@ async function loadData() { console.warn("ВНИМАНИЕ: Не загружены пользователи!") } - const usersMap = {} - usersResponse.forEach(u => { - usersMap[u.name] = { - full_name: u.full_name || u.name, - username: u.username || u.name.split('@')[0], - roles: (u.roles || []).map(r => r.role) - } - }) + // Собираем роли + const rolesMap = {} + rolesResponse.forEach(r => { + if (!rolesMap[r.parent]) rolesMap[r.parent] = [] + rolesMap[r.parent].push(r.role) + }) + + // Формируем usersMap + const usersMap = {} + usersResponse.forEach(u => { + usersMap[u.name] = { + full_name: u.full_name || u.name, + username: u.username || u.name.split('@')[0], + roles: rolesMap[u.name] || [] + } + }) const pointsMap = {} logsResponse.forEach(log => { @@ -272,14 +281,24 @@ const usersResource = createResource({ url: "frappe.client.get_list", params: { doctype: "User", - fields: ["name", "full_name", "username", "roles"], + fields: ["name", "full_name", "username"], filters: [["enabled", "=", 1]], limit_page_length: 2000 }, - auto: false, - onError: (err) => console.error("Ошибка загрузки Users:", err) + auto: false }) +const rolesResource = createResource({ + url: "frappe.client.get_list", + params: { + doctype: "Has Role", + fields: ["parent", "role"], + limit_page_length: 5000 + }, + auto: false +}) + + // Остальные computed без изменений const filteredLeaderboard = computed(() => leaderboard.value.filter(u => u.roles.includes(selectedRole.value))