feat(nav): hide dashboard and admin settings from practitioner role

This commit is contained in:
2026-06-10 09:20:37 +09:00
parent b87ca2854b
commit 35c5b1e0fa

View File

@@ -41,10 +41,18 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
trigger.className = 'gnb-trigger'; trigger.className = 'gnb-trigger';
trigger.textContent = config.label; trigger.textContent = config.label;
// 역할에 따라 노출할 서브탭 필터링
const visibleTabs = config.tabs.filter((tab: string) => {
if (tab === '대시보드' && state.currentUserRole !== 'admin') {
return false;
}
return true;
});
trigger.addEventListener('click', () => { trigger.addEventListener('click', () => {
if (state.activeCategory !== catKey) { if (state.activeCategory !== catKey) {
state.activeCategory = catKey as any; state.activeCategory = catKey as any;
const firstTab = config.tabs[0]; const firstTab = visibleTabs[0] || config.tabs[0];
state.activeSubTab = firstTab; state.activeSubTab = firstTab;
render(); render();
onTabChange(firstTab); onTabChange(firstTab);
@@ -55,7 +63,7 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
const shelf = document.createElement('div'); const shelf = document.createElement('div');
shelf.className = 'lnb-shelf'; shelf.className = 'lnb-shelf';
config.tabs.forEach((tab: string) => { visibleTabs.forEach((tab: string) => {
const item = document.createElement('div'); const item = document.createElement('div');
item.className = `lnb-item ${isActive && state.activeSubTab === tab ? 'active' : ''}`; item.className = `lnb-item ${isActive && state.activeSubTab === tab ? 'active' : ''}`;
item.textContent = tab; item.textContent = tab;
@@ -73,24 +81,26 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
navContainer.appendChild(group); navContainer.appendChild(group);
}); });
// ─── '관리자' 메뉴 별도 추가 (GNB 스타일) ─── // ─── '관리자' 메뉴 별도 추가 (GNB 스타일 - 관리자 역할일 때만 노출) ───
const adminGroup = document.createElement('div'); if (state.currentUserRole === 'admin') {
adminGroup.className = 'nav-group'; const adminGroup = document.createElement('div');
adminGroup.className = 'nav-group';
const adminTrigger = document.createElement('div');
adminTrigger.className = 'gnb-trigger'; const adminTrigger = document.createElement('div');
adminTrigger.innerHTML = '관리자'; adminTrigger.className = 'gnb-trigger';
adminTrigger.style.color = 'var(--text-muted)'; adminTrigger.innerHTML = '관리자';
adminTrigger.style.borderLeft = '1px solid var(--border-color)'; adminTrigger.style.color = 'var(--text-muted)';
adminTrigger.style.marginLeft = '1rem'; adminTrigger.style.borderLeft = '1px solid var(--border-color)';
adminTrigger.style.paddingLeft = '1.5rem'; adminTrigger.style.marginLeft = '1rem';
adminTrigger.style.paddingLeft = '1.5rem';
adminTrigger.addEventListener('click', () => {
window.open('/map_editor.html', '_blank'); adminTrigger.addEventListener('click', () => {
}); window.open('/map_editor.html', '_blank');
});
adminGroup.appendChild(adminTrigger);
navContainer.appendChild(adminGroup); adminGroup.appendChild(adminTrigger);
navContainer.appendChild(adminGroup);
}
}; };
render(); render();