diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 5ed1910c..2d148c76 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -64,18 +64,5 @@ public function boot(): void 'favoriteMenuIds' => $menuService->getFavoriteMenuIds(), ]); }); - - // 테넌트 콘솔 사이드바에 해당 테넌트의 메뉴 데이터 전달 - View::composer('partials.tenant-console-sidebar', function ($view) { - $tenantId = $view->getData()['consoleTenantId'] ?? request()->route('tenantId'); - if ($tenantId) { - $menuService = app(SidebarMenuService::class); - $menusBySection = $menuService->getTenantMenusBySection((int) $tenantId); - - $view->with([ - 'tenantMainMenus' => $menusBySection['main'], - ]); - } - }); } } diff --git a/app/Services/SidebarMenuService.php b/app/Services/SidebarMenuService.php index 505cb0bf..0b51a208 100644 --- a/app/Services/SidebarMenuService.php +++ b/app/Services/SidebarMenuService.php @@ -131,35 +131,6 @@ public function getMenusBySection(?User $user = null): array ]; } - /** - * 특정 테넌트의 전체 메뉴 트리 조회 (권한 필터 없음, 관리 콘솔용) - */ - public function getTenantMenuTree(int $tenantId): Collection - { - $allMenus = Menu::withoutGlobalScopes() - ->where('tenant_id', $tenantId) - ->where('is_active', true) - ->where('hidden', false) - ->orderBy('sort_order') - ->get(); - - return $this->buildMenuTree($allMenus); - } - - /** - * 특정 테넌트의 섹션별 메뉴 조회 (관리 콘솔용) - */ - public function getTenantMenusBySection(int $tenantId): array - { - $menuTree = $this->getTenantMenuTree($tenantId); - - return [ - 'main' => $menuTree->filter(fn ($m) => $m->getSection() === 'main')->values(), - 'tools' => $menuTree->filter(fn ($m) => $m->getSection() === 'tools')->values(), - 'labs' => $menuTree->filter(fn ($m) => $m->getSection() === 'labs')->values(), - ]; - } - /** * 메뉴 트리 구성 */ diff --git a/public/js/context-menu.js b/public/js/context-menu.js index 6ed7723d..5d351b14 100644 --- a/public/js/context-menu.js +++ b/public/js/context-menu.js @@ -121,11 +121,8 @@ class ContextMenu { window.location.href = `/tenants/${id}/edit`; break; case 'switch-tenant': - { - const w = 1400, h = 900; - const l = (screen.width - w) / 2, t = (screen.height - h) / 2; - window.open(`/tenant-console/${id}`, `tenant_${id}`, - `width=${w},height=${h},left=${l},top=${t},resizable=yes,scrollbars=yes`); + if (typeof openTenantConsole === 'function') { + openTenantConsole(id, name); } break; case 'view-user': diff --git a/resources/views/components/context-menu.blade.php b/resources/views/components/context-menu.blade.php index f5bd7c5e..315908bb 100644 --- a/resources/views/components/context-menu.blade.php +++ b/resources/views/components/context-menu.blade.php @@ -28,12 +28,11 @@ class="w-full px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 flex i {{-- 사용자 관련 메뉴 --}} diff --git a/resources/views/partials/tenant-console-sidebar.blade.php b/resources/views/partials/tenant-console-sidebar.blade.php index aaa9afd0..d3c83351 100644 --- a/resources/views/partials/tenant-console-sidebar.blade.php +++ b/resources/views/partials/tenant-console-sidebar.blade.php @@ -1,8 +1,51 @@ -{{-- 테넌트 콘솔 전용 사이드바 (DB 기반 메뉴 시스템) --}} +{{-- 테넌트 콘솔 전용 사이드바 (메인 사이드바 스타일 통일) --}} @php $tenantId = $consoleTenantId ?? 0; + $currentUrl = request()->url(); $baseUrl = "/tenant-console/{$tenantId}"; - $menus = $tenantMainMenus ?? collect(); + + $menuGroups = [ + [ + 'title' => '권한 관리', + 'icon' => 'ri-shield-keyhole-line', + 'items' => [ + ['name' => '권한 관리', 'url' => "{$baseUrl}/permissions", 'icon' => 'ri-key-2-line'], + ['name' => '역할 관리', 'url' => "{$baseUrl}/roles", 'icon' => 'ri-user-settings-line'], + ['name' => '역할-권한 매핑', 'url' => "{$baseUrl}/role-permissions", 'icon' => 'ri-links-line'], + ['name' => '부서-권한 매핑', 'url' => "{$baseUrl}/department-permissions", 'icon' => 'ri-building-2-line'], + ['name' => '사용자-권한 매핑', 'url' => "{$baseUrl}/user-permissions", 'icon' => 'ri-user-star-line'], + ], + ], + [ + 'title' => '시스템 관리', + 'icon' => 'ri-settings-3-line', + 'items' => [ + ['name' => 'AI 설정', 'url' => "{$baseUrl}/system/ai-config", 'icon' => 'ri-robot-line'], + ['name' => '휴일 관리', 'url' => "{$baseUrl}/system/holidays", 'icon' => 'ri-calendar-event-line'], + ['name' => '시스템 알림', 'url' => "{$baseUrl}/system/alerts", 'icon' => 'ri-notification-3-line'], + ['name' => '공통코드', 'url' => "{$baseUrl}/common-codes", 'icon' => 'ri-code-s-slash-line'], + ['name' => '카테고리', 'url' => "{$baseUrl}/categories", 'icon' => 'ri-node-tree'], + ['name' => '감사 로그', 'url' => "{$baseUrl}/audit-logs", 'icon' => 'ri-file-list-3-line'], + ], + ], + [ + 'title' => '생산관리', + 'icon' => 'ri-instance-line', + 'items' => [ + ['name' => '품목관리', 'url' => "{$baseUrl}/production/items", 'icon' => 'ri-box-3-line'], + ['name' => '품목필드', 'url' => "{$baseUrl}/production/item-fields", 'icon' => 'ri-list-settings-line'], + ['name' => '견적수식', 'url' => "{$baseUrl}/production/quote-formulas", 'icon' => 'ri-calculator-line'], + ['name' => '카테고리', 'url' => "{$baseUrl}/production/categories", 'icon' => 'ri-node-tree'], + ], + ], + [ + 'title' => '게시판관리', + 'icon' => 'ri-article-line', + 'items' => [ + ['name' => '게시판 목록', 'url' => "{$baseUrl}/boards", 'icon' => 'ri-layout-grid-line'], + ], + ], + ]; @endphp \ No newline at end of file +