From edfe1bdf781c8171572650d04b43f809fd59085c Mon Sep 17 00:00:00 2001 From: hyungi Date: Tue, 21 Oct 2025 12:33:05 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=99=84=EC=A0=84=ED=95=9C=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EC=8A=A4?= =?UTF-8?q?=ED=82=A4=EB=A7=88=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=84=9C=EB=B2=84=20=EC=95=88=EC=A0=95?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 43개 테이블로 구성된 완전한 BOM 관리 시스템 - 카테고리별 상세 테이블 (9개): pipe, fitting, flange, valve, gasket, bolt, support, special, instrument - 사용자 관리 시스템: users, login_logs, user_sessions, user_activity_logs - 구매 관리 시스템: purchase_requests, purchase_request_items, purchase_items - 리비전 관리 시스템: material_revisions_comparison, material_comparison_details - 튜빙 시스템: tubing_categories, tubing_manufacturers, tubing_products, tubing_specifications - 표준화/분류 시스템: material_standards, material_categories, material_patterns 등 - 권한 관리 시스템: permissions, role_permissions - 고급 기능: user_requirements, pipe_end_preparations, material_tubing_mapping - 성능 최적화: materials 테이블 17개 인덱스, GIN/복합/조건부 인덱스 - 데이터 무결성: 외래키 제약으로 일관성 보장 - 확장성: JSONB 활용한 유연한 메타데이터 저장 --- frontend/src/App.jsx | 80 ++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 361bb6a..5782ca4 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -174,8 +174,8 @@ function App() { newSet.delete(projectId); console.log('📦 활성화 프로젝트 업데이트:', { prev: Array.from(prev), new: Array.from(newSet) }); return newSet; - }); - }; + }); + }; // 인증 상태 확인 useEffect(() => { @@ -192,13 +192,13 @@ function App() { } } catch (error) { console.error('인증 확인 실패:', error); - localStorage.removeItem('access_token'); - localStorage.removeItem('user_data'); - setIsAuthenticated(false); + localStorage.removeItem('access_token'); + localStorage.removeItem('user_data'); + setIsAuthenticated(false); } finally { setIsLoading(false); } - }; + }; checkAuth(); }, []); @@ -213,7 +213,7 @@ function App() { const renderCurrentPage = () => { switch (currentPage) { case 'dashboard': - return ( + return ( ); case 'account-settings': return ( - { @@ -297,21 +297,21 @@ function App() { ); case 'user-management': return ( - ); case 'system-logs': return ( - ); case 'log-monitoring': return ( - @@ -339,20 +339,20 @@ function App() {
알 수 없는 페이지입니다.
- +
); @@ -376,21 +376,21 @@ function App() { loadProjects(); }; - return ( + return ( {isLoading ? ( -
-
-
🔄
-
로딩 중...
-
+
+
+
🔄
+
로딩 중...
+
) : !isAuthenticated ? ( ) : ( @@ -422,8 +422,8 @@ function App() {
{/* 페이지 컨텐츠 */} - {renderCurrentPage()} - + {renderCurrentPage()} + )}
);