From 3b164993c200bf988276104879638fce51473164 Mon Sep 17 00:00:00 2001 From: kent Date: Sun, 21 Dec 2025 01:35:22 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EB=85=BC=EB=A6=AC=EC=A0=81=20=EA=B4=80?= =?UTF-8?q?=EA=B3=84=20=EB=AC=B8=EC=84=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=8F=20React=20=EB=A9=94=EB=89=B4=20=EC=8B=9C?= =?UTF-8?q?=EB=8D=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LOGICAL_RELATIONSHIPS.md: login_tokens 모델 관계 추가 - ReactMenuSeeder: React 라우트 기반 글로벌 메뉴 시더 생성 - 대시보드, 결재관리, 게시판, 품목관리, 판매관리 등 구조 정의 - docs/projects/api-integration/phase-2-menu-extraction 참조 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- LOGICAL_RELATIONSHIPS.md | 7 +- database/seeders/ReactMenuSeeder.php | 197 +++++++++++++++++++++++++++ 2 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 database/seeders/ReactMenuSeeder.php diff --git a/LOGICAL_RELATIONSHIPS.md b/LOGICAL_RELATIONSHIPS.md index a0680e2..a39a82b 100644 --- a/LOGICAL_RELATIONSHIPS.md +++ b/LOGICAL_RELATIONSHIPS.md @@ -1,6 +1,6 @@ # 논리적 데이터베이스 관계 문서 -> **자동 생성**: 2025-12-20 12:21:53 +> **자동 생성**: 2025-12-20 22:27:54 > **소스**: Eloquent 모델 관계 분석 ## 📊 모델별 관계 현황 @@ -195,6 +195,11 @@ ### item_details - **item()**: belongsTo → `items` +### login_tokens +**모델**: `App\Models\LoginToken` + +- **user()**: belongsTo → `users` + ### main_requests **모델**: `App\Models\MainRequest` diff --git a/database/seeders/ReactMenuSeeder.php b/database/seeders/ReactMenuSeeder.php new file mode 100644 index 0000000..5920c41 --- /dev/null +++ b/database/seeders/ReactMenuSeeder.php @@ -0,0 +1,197 @@ + '대시보드', + 'url' => '/dashboard', + 'icon' => 'layout-dashboard', + 'sort_order' => 1, + 'children' => [], + ], + [ + 'name' => '결재관리', + 'url' => '/approval', + 'icon' => 'file-check', + 'sort_order' => 2, + 'children' => [ + ['name' => '기안함', 'url' => '/approval/draft', 'icon' => 'file-edit'], + ['name' => '결재함', 'url' => '/approval/inbox', 'icon' => 'inbox'], + ['name' => '참조함', 'url' => '/approval/reference', 'icon' => 'eye'], + ], + ], + [ + 'name' => '게시판', + 'url' => '/board', + 'icon' => 'layout-list', + 'sort_order' => 3, + 'children' => [ + ['name' => '게시판 관리', 'url' => '/board/board-management', 'icon' => 'settings'], + ], + ], + [ + 'name' => '품목관리', + 'url' => '/items', + 'icon' => 'package', + 'sort_order' => 4, + 'children' => [ + ['name' => '품목기준관리', 'url' => '/master-data/item-master-data-management', 'icon' => 'database'], + ], + ], + [ + 'name' => '판매관리', + 'url' => '/sales', + 'icon' => 'briefcase', + 'sort_order' => 5, + 'children' => [ + ['name' => '거래처관리', 'url' => '/sales/client-management-sales-admin', 'icon' => 'building-2'], + ['name' => '견적관리', 'url' => '/sales/quote-management', 'icon' => 'calculator'], + ['name' => '단가관리', 'url' => '/sales/pricing-management', 'icon' => 'dollar-sign'], + ], + ], + [ + 'name' => '생산관리', + 'url' => '/production', + 'icon' => 'factory', + 'sort_order' => 6, + 'children' => [ + ['name' => '스크린 생산', 'url' => '/production/screen-production', 'icon' => 'package'], + ], + ], + [ + 'name' => '회계관리', + 'url' => '/accounting', + 'icon' => 'calculator', + 'sort_order' => 7, + 'children' => [ + ['name' => '거래처관리', 'url' => '/accounting/vendors', 'icon' => 'building-2'], + ['name' => '거래처원장', 'url' => '/accounting/vendor-ledger', 'icon' => 'file-text'], + ['name' => '매출관리', 'url' => '/accounting/sales', 'icon' => 'trending-up'], + ['name' => '매입관리', 'url' => '/accounting/purchase', 'icon' => 'trending-down'], + ['name' => '세금계산서', 'url' => '/accounting/bills', 'icon' => 'receipt'], + ['name' => '입금관리', 'url' => '/accounting/deposits', 'icon' => 'arrow-down-circle'], + ['name' => '출금관리', 'url' => '/accounting/withdrawals', 'icon' => 'arrow-up-circle'], + ['name' => '은행거래', 'url' => '/accounting/bank-transactions', 'icon' => 'landmark'], + ['name' => '카드거래', 'url' => '/accounting/card-transactions', 'icon' => 'credit-card'], + ['name' => '미수금현황', 'url' => '/accounting/receivables-status', 'icon' => 'alert-circle'], + ['name' => '예상비용', 'url' => '/accounting/expected-expenses', 'icon' => 'clock'], + ['name' => '대손채권회수', 'url' => '/accounting/bad-debt-collection', 'icon' => 'shield'], + ['name' => '일일리포트', 'url' => '/accounting/daily-report', 'icon' => 'bar-chart-3'], + ['name' => '결제내역', 'url' => '/payment-history', 'icon' => 'history'], + ], + ], + [ + 'name' => '인사관리', + 'url' => '/hr', + 'icon' => 'users', + 'sort_order' => 8, + 'children' => [ + ['name' => '직원관리', 'url' => '/hr/employee-management', 'icon' => 'user'], + ['name' => '부서관리', 'url' => '/hr/department-management', 'icon' => 'building'], + ['name' => '카드관리', 'url' => '/hr/card-management', 'icon' => 'credit-card'], + ['name' => '근태현황', 'url' => '/hr/attendance', 'icon' => 'clock'], + ['name' => '근태관리', 'url' => '/hr/attendance-management', 'icon' => 'calendar-check'], + ['name' => '급여관리', 'url' => '/hr/salary-management', 'icon' => 'dollar-sign'], + ['name' => '휴가관리', 'url' => '/hr/vacation-management', 'icon' => 'calendar'], + ], + ], + [ + 'name' => '리포트', + 'url' => '/reports', + 'icon' => 'bar-chart-3', + 'sort_order' => 9, + 'children' => [ + ['name' => '종합분석', 'url' => '/reports/comprehensive-analysis', 'icon' => 'pie-chart'], + ], + ], + [ + 'name' => '고객센터', + 'url' => '/customer-center', + 'icon' => 'headphones', + 'sort_order' => 10, + 'children' => [ + ['name' => '공지사항', 'url' => '/customer-center/notices', 'icon' => 'megaphone'], + ['name' => 'FAQ', 'url' => '/customer-center/faq', 'icon' => 'help-circle'], + ['name' => '문의하기', 'url' => '/customer-center/inquiries', 'icon' => 'message-circle'], + ['name' => '이벤트', 'url' => '/customer-center/events', 'icon' => 'calendar'], + ], + ], + [ + 'name' => '설정', + 'url' => '/settings', + 'icon' => 'settings', + 'sort_order' => 11, + 'children' => [ + ['name' => '계정정보', 'url' => '/settings/account-info', 'icon' => 'user'], + ['name' => '계정관리', 'url' => '/settings/accounts', 'icon' => 'users'], + ['name' => '권한관리', 'url' => '/settings/permissions', 'icon' => 'shield'], + ['name' => '직급관리', 'url' => '/settings/ranks', 'icon' => 'award'], + ['name' => '직책관리', 'url' => '/settings/titles', 'icon' => 'award'], + ['name' => '근태설정', 'url' => '/settings/attendance-settings', 'icon' => 'clock'], + ['name' => '휴가정책', 'url' => '/settings/leave-policy', 'icon' => 'calendar'], + ['name' => '근무일정', 'url' => '/settings/work-schedule', 'icon' => 'calendar-days'], + ['name' => '알림설정', 'url' => '/settings/notification-settings', 'icon' => 'bell'], + ['name' => '팝업관리', 'url' => '/settings/popup-management', 'icon' => 'layout'], + ['name' => '회사정보', 'url' => '/company-info', 'icon' => 'building'], + ['name' => '구독관리', 'url' => '/subscription', 'icon' => 'credit-card'], + ], + ], + ]; + + // 메뉴 생성 (global_menus 테이블에 저장) + foreach ($menus as $menuData) { + $children = $menuData['children'] ?? []; + unset($menuData['children']); + + // 최상위 메뉴 생성 + $parentMenu = GlobalMenu::create([ + 'parent_id' => null, + 'name' => $menuData['name'], + 'url' => $menuData['url'], + 'icon' => $menuData['icon'], + 'sort_order' => $menuData['sort_order'], + 'is_active' => true, + 'hidden' => false, + 'is_external' => false, + 'external_url' => null, + ]); + + // 하위 메뉴 생성 + if (count($children) > 0) { + foreach ($children as $index => $childData) { + GlobalMenu::create([ + 'parent_id' => $parentMenu->id, + 'name' => $childData['name'], + 'url' => $childData['url'], + 'icon' => $childData['icon'], + 'sort_order' => $index + 1, + 'is_active' => true, + 'hidden' => false, + 'is_external' => false, + 'external_url' => null, + ]); + } + } + } + }); + + $this->command->info('✅ React 메뉴 생성 완료 (global_menus 테이블, 11개 대메뉴, 54개 중메뉴)'); + } +} \ No newline at end of file