feat: 프론트엔드 모듈화 및 공통 헤더 시스템 구현

- 권한 기반 공통 헤더 컴포넌트 구현
- 모바일 친화적 캘린더 날짜 필터 추가
- 페이지 프리로더 및 키보드 단축키 시스템 구현
- Service Worker 기반 캐싱 시스템 추가

Frontend Changes:
- components/common-header.js: 권한 기반 동적 메뉴 생성
- components/mobile-calendar.js: 터치/스와이프 지원 캘린더
- core/permissions.js: 페이지 접근 권한 관리
- core/page-manager.js: 페이지 라이프사이클 관리
- core/page-preloader.js: 페이지 프리로딩 최적화
- core/keyboard-shortcuts.js: 키보드 네비게이션
- css/mobile-calendar.css: 모바일 최적화 캘린더 스타일
- sw.js: 3단계 캐싱 전략 서비스 워커

Removed:
- auth-common.js, common-header.js (구버전 파일들)
This commit is contained in:
Hyungi Ahn
2025-10-25 09:00:30 +09:00
parent b68bf78e40
commit 25123be806
11 changed files with 3003 additions and 222 deletions

View File

@@ -141,7 +141,10 @@ const AuthAPI = {
body: JSON.stringify(userData)
}),
getUsers: () => apiRequest('/auth/users'),
getUsers: () => {
console.log('🔍 AuthAPI.getUsers 호출 - 엔드포인트: /auth/users');
return apiRequest('/auth/users');
},
updateUser: (userId, userData) => apiRequest(`/auth/users/${userId}`, {
method: 'PUT',
@@ -160,10 +163,10 @@ const AuthAPI = {
})
}),
resetPassword: (userId, newPassword = '000000') => apiRequest(`/auth/users/${userId}`, {
method: 'PUT',
resetPassword: (userId, newPassword = '000000') => apiRequest(`/auth/users/${userId}/reset-password`, {
method: 'POST',
body: JSON.stringify({
password: newPassword
new_password: newPassword
})
})
};
@@ -281,6 +284,24 @@ function checkAdminAuth() {
return user;
}
// 페이지 접근 권한 체크 함수 (새로 추가)
function checkPageAccess(pageName) {
const user = checkAuth();
if (!user) return null;
// admin은 모든 페이지 접근 가능
if (user.role === 'admin') return user;
// 페이지별 권한 체크는 pagePermissionManager에서 처리
if (window.pagePermissionManager && !window.pagePermissionManager.canAccessPage(pageName)) {
alert('이 페이지에 접근할 권한이 없습니다.');
window.location.href = '/index.html';
return null;
}
return user;
}
// 프로젝트 API
const ProjectsAPI = {
getAll: (activeOnly = false) => {