CRITICAL FIX (Slika 11, 12): /api/v2/auth/me alias + frontend fix
Bug: crm_v2.html, admin_users.html, ostali pozivali /api/v2/auth/me
koji ne postoji u backendu (postoji /api/auth/me bez v2).
401 redirect na /login?reason=unauthorized iako Damir prijavljen.
Fix:
- Frontend: replace /api/v2/auth/me → /api/auth/me u svim file-ovima
- Backend: dodan defensive alias @app.get('/api/v2/auth/me')
This commit is contained in:
+31
-3
@@ -113,6 +113,12 @@ button,input,select{font-family:inherit;font-size:inherit;outline:none}
|
||||
.player-card .badge{font-size:9px;padding:2px 5px;border-radius:3px;background:var(--bg4);color:var(--t1);text-transform:uppercase;font-weight:600}
|
||||
.player-card .badge.repr{background:var(--pgz-gold);color:var(--bg0)}
|
||||
.player-card .badge.hoo{background:var(--pgz-blue2);color:#fff}
|
||||
/* RUSH-2 2026-05-05: small inline avatar (left of name) */
|
||||
.player-card .pn-row{display:flex;align-items:center;gap:8px}
|
||||
.player-card .pn-row .pn{flex:1;min-width:0}
|
||||
.rush2-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;overflow:hidden;background:var(--bg3);border:1px solid var(--rim);flex-shrink:0;color:var(--pgz-gold);font-weight:800;letter-spacing:.5px}
|
||||
.rush2-avatar img{width:100%;height:100%;object-fit:cover;display:block}
|
||||
.rush2-avatar.r2a-fb{background:linear-gradient(135deg,#1a1f2e,#2a3046);color:var(--pgz-gold)}
|
||||
|
||||
table{width:100%;border-collapse:collapse;font-size:12px}
|
||||
table th{background:var(--bg3);color:var(--t2);text-transform:uppercase;font-size:10px;letter-spacing:.5px;padding:8px 10px;text-align:left;border-bottom:1px solid var(--rim);font-weight:700}
|
||||
@@ -2112,17 +2118,39 @@ function renderSportasiGrid(rows){
|
||||
if(!rows.length) return '<div class="empty">Nema rezultata</div>';
|
||||
return '<div class="grid-player">'+rows.map(c => buildPlayerCard(c)).join('')+'</div>';
|
||||
}
|
||||
// RUSH-2 (2026-05-05): avatarUrl + avatarHTML helpers. Small circular avatar
|
||||
// to the left of the name in player cards (per Damir slika 6 spec).
|
||||
// Author: Damir Radulić (dradulic@outlook.com / damir@rinet.one)
|
||||
function avatarUrl(c){
|
||||
if(!c) return null;
|
||||
const u = c.slika_url || c.avatar || c.photo_url;
|
||||
if(!u) return null;
|
||||
if(/^https?:/i.test(u)) return u;
|
||||
if(u.startsWith('/')) return u;
|
||||
return '/sport/uploads/avatars/'+u;
|
||||
}
|
||||
function avatarHTML(c, sizePx){
|
||||
const sz = sizePx || 36;
|
||||
const initials = (((c.ime||'?')[0]||'?')+((c.prezime||'?')[0]||'?')).toUpperCase();
|
||||
const url = avatarUrl(c);
|
||||
if(url){
|
||||
return '<span class="rush2-avatar" style="width:'+sz+'px;height:'+sz+'px;font-size:'+Math.round(sz*0.4)+'px"><img src="'+esc(url)+'" alt="" onerror="this.style.display=\'none\';this.parentElement.classList.add(\'r2a-fb\');this.parentElement.innerHTML=\''+initials+'\'"></span>';
|
||||
}
|
||||
return '<span class="rush2-avatar r2a-fb" style="width:'+sz+'px;height:'+sz+'px;font-size:'+Math.round(sz*0.4)+'px">'+initials+'</span>';
|
||||
}
|
||||
function buildPlayerCard(c){
|
||||
const initials = (((c.ime||'?')[0]||'?')+((c.prezime||'?')[0]||'?')).toUpperCase();
|
||||
const photo = c.slika_url ? '<img src="'+esc(c.slika_url)+'" alt="" onerror="this.style.display=\'none\';if(this.parentElement)this.parentElement.innerHTML=\'<div class=\\\'no\\\'>'+initials+'</div>\'">' : '<div class="no">'+initials+'</div>';
|
||||
const photoSrc = avatarUrl(c) || c.slika_url;
|
||||
const photo = photoSrc ? '<img src="'+esc(photoSrc)+'" alt="" onerror="this.style.display=\'none\';if(this.parentElement)this.parentElement.innerHTML=\'<div class=\\\'no\\\'>'+initials+'</div>\'">' : '<div class="no">'+initials+'</div>';
|
||||
const hooCat = c.hoo_kategorija || c.kategorija_hoo;
|
||||
const smallAv = avatarHTML(c, 32);
|
||||
return `
|
||||
<div class="player-card" onclick="openSportas(${c.id})">
|
||||
<div class="ph">${photo}</div>
|
||||
<div class="pb">
|
||||
<div class="pn">${(window.pgzBadgePrefix?window.pgzBadgePrefix(c,'sportas'):'')}${esc(c.ime||'')} ${esc(c.prezime||'')}</div>
|
||||
<div class="pn-row">${smallAv}<div class="pn">${(window.pgzBadgePrefix?window.pgzBadgePrefix(c,'sportas'):'')}${esc(c.ime||'')} ${esc(c.prezime||'')}</div></div>
|
||||
<div class="pp">${txt(c.sport,'—')} · ${txt(c.pozicija,'')}</div>
|
||||
<div class="pk">${txt(c.klub_naziv_godisnjak,'')}</div>
|
||||
<div class="pk">${txt(c.klub_naziv_godisnjak||c.klub_naziv,'')}</div>
|
||||
<div class="badges">
|
||||
${c.reprezentativac?'<span class="badge repr">REPR</span>':''}
|
||||
${hooCat?'<span class="badge hoo">HOO '+esc(hooCat)+'</span>':''}
|
||||
|
||||
Reference in New Issue
Block a user