feat: implement unified schema mapper, enhance UI/UX with responsive design, and optimize asset log logic
This commit is contained in:
@@ -7,11 +7,11 @@ const MENU_CONFIG = {
|
||||
},
|
||||
sw: {
|
||||
label: '소프트웨어',
|
||||
tabs: ['대시보드', '구독SW', '영구SW', '클라우드']
|
||||
tabs: ['대시보드', '구독SW', '영구SW']
|
||||
},
|
||||
ops: {
|
||||
label: '운영 서비스',
|
||||
tabs: ['대시보드', '서비스현황', '백업관리', '보안점검']
|
||||
tabs: ['도메인', '메일', '메신저', '청구비용']
|
||||
}
|
||||
};
|
||||
|
||||
@@ -22,6 +22,7 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
|
||||
const render = () => {
|
||||
navContainer.innerHTML = '';
|
||||
|
||||
// 기존 메뉴 렌더링
|
||||
(Object.keys(MENU_CONFIG) as Array<keyof typeof MENU_CONFIG>).forEach(catKey => {
|
||||
const config = MENU_CONFIG[catKey];
|
||||
const isActive = state.activeCategory === catKey;
|
||||
@@ -29,7 +30,6 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
|
||||
const group = document.createElement('div');
|
||||
group.className = `nav-group ${isActive ? 'active is-showing-shelf' : ''}`;
|
||||
|
||||
// 메인 카테고리 트리거
|
||||
const trigger = document.createElement('div');
|
||||
trigger.className = 'gnb-trigger';
|
||||
trigger.textContent = config.label;
|
||||
@@ -45,7 +45,6 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
|
||||
});
|
||||
group.appendChild(trigger);
|
||||
|
||||
// 하위 탭 선반 (Shelf)
|
||||
const shelf = document.createElement('div');
|
||||
shelf.className = 'lnb-shelf';
|
||||
|
||||
@@ -58,21 +57,34 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
|
||||
e.stopPropagation();
|
||||
state.activeCategory = catKey;
|
||||
state.activeSubTab = tab;
|
||||
|
||||
if (btnAddAsset) {
|
||||
btnAddAsset.classList.remove('hidden');
|
||||
}
|
||||
|
||||
if (btnAddAsset) btnAddAsset.classList.remove('hidden');
|
||||
render();
|
||||
onTabChange(tab);
|
||||
});
|
||||
shelf.appendChild(item);
|
||||
});
|
||||
group.appendChild(shelf);
|
||||
|
||||
// 마우스 오버 시 다른 그룹의 선반은 가리고 내 것만 보여주는 스타일은 CSS에서 처리함
|
||||
navContainer.appendChild(group);
|
||||
});
|
||||
|
||||
// ─── '관리자' 메뉴 별도 추가 (GNB 스타일) ───
|
||||
const adminGroup = document.createElement('div');
|
||||
adminGroup.className = 'nav-group';
|
||||
|
||||
const adminTrigger = document.createElement('div');
|
||||
adminTrigger.className = 'gnb-trigger';
|
||||
adminTrigger.innerHTML = '관리자';
|
||||
adminTrigger.style.color = 'var(--text-muted)';
|
||||
adminTrigger.style.borderLeft = '1px solid var(--border-color)';
|
||||
adminTrigger.style.marginLeft = '1rem';
|
||||
adminTrigger.style.paddingLeft = '1.5rem';
|
||||
|
||||
adminTrigger.addEventListener('click', () => {
|
||||
alert('준비중입니다.');
|
||||
});
|
||||
|
||||
adminGroup.appendChild(adminTrigger);
|
||||
navContainer.appendChild(adminGroup);
|
||||
};
|
||||
|
||||
render();
|
||||
|
||||
Reference in New Issue
Block a user