- 라우트 파라미터 충돌 수정 (Layer 4 확장) - TenantScope 글로벌 스코프가 테넌트 콘솔에서 올바른 tenant_id 사용하도록 수정 - 감사로그 상세 테넌트 콘솔 레이아웃 적용 - 테넌트 전환: 모달 → 컨텍스트 메뉴로 이동, 스타일 변경 (녹색+전환아이콘) - 테넌트 전환 이벤트를 openTenantConsole 호출로 통일 - 사이드바 스타일 메인과 통일 + 리포트 주의사항 정리
114 lines
5.8 KiB
PHP
114 lines
5.8 KiB
PHP
{{-- 테넌트 콘솔 전용 사이드바 (메인 사이드바 스타일 통일) --}}
|
|
@php
|
|
$tenantId = $consoleTenantId ?? 0;
|
|
$currentUrl = request()->url();
|
|
$baseUrl = "/tenant-console/{$tenantId}";
|
|
|
|
$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
|
|
|
|
<aside class="w-64 bg-white border-r border-gray-200 flex flex-col shrink-0">
|
|
{{-- 테넌트 정보 헤더 --}}
|
|
<div class="flex items-center h-16 border-b border-gray-200 px-3">
|
|
<a href="{{ $baseUrl }}" class="flex items-center gap-2 text-gray-800 hover:text-blue-600 transition">
|
|
<i class="ri-building-line text-xl text-blue-600"></i>
|
|
<div class="min-w-0">
|
|
<div class="font-semibold text-sm truncate">{{ $consoleTenant->company_name ?? '테넌트' }}</div>
|
|
<div class="text-xs text-gray-500">관리 콘솔</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
{{-- 메뉴 영역 --}}
|
|
<nav class="flex-1 overflow-y-auto p-4">
|
|
<ul class="space-y-1">
|
|
@foreach($menuGroups as $groupIndex => $group)
|
|
{{-- 1depth: 그룹 헤더 (메인 사이드바 menu-group 스타일) --}}
|
|
<li class="pt-4 pb-1 border-t border-gray-200 mt-2">
|
|
<button @click="$refs.group{{ $groupIndex }}.classList.toggle('hidden')"
|
|
class="w-full flex items-center justify-between px-3 py-2 text-sm font-semibold text-gray-700 hover:bg-gray-50 rounded"
|
|
style="padding-left: 0.75rem">
|
|
<span class="flex items-center gap-2">
|
|
<i class="{{ $group['icon'] }} w-4 h-4 text-base"></i>
|
|
{{ $group['title'] }}
|
|
</span>
|
|
<svg class="w-3 h-3 transition-transform rotate-180" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
|
|
</svg>
|
|
</button>
|
|
|
|
{{-- 2depth: 메뉴 아이템 (메인 사이드바 menu-item 스타일) --}}
|
|
<ul x-ref="group{{ $groupIndex }}" class="space-y-1 mt-1">
|
|
@foreach($group['items'] as $item)
|
|
@php
|
|
$isActive = str_starts_with($currentUrl, url($item['url']));
|
|
$activeClass = $isActive
|
|
? 'bg-primary text-white hover:bg-primary'
|
|
: 'text-gray-700 hover:bg-gray-100';
|
|
@endphp
|
|
<li>
|
|
<a href="{{ $item['url'] }}"
|
|
class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm {{ $activeClass }}"
|
|
style="padding-left: 1.5rem">
|
|
<i class="{{ $item['icon'] }} text-base {{ $isActive ? '' : 'text-gray-400' }}"></i>
|
|
{{ $item['name'] }}
|
|
</a>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
</nav>
|
|
|
|
{{-- 하단: 메인으로 돌아가기 --}}
|
|
<div class="px-4 py-3 border-t border-gray-200">
|
|
<a href="/tenants" target="_opener"
|
|
class="flex items-center gap-2 text-sm text-gray-500 hover:text-gray-700 transition">
|
|
<i class="ri-arrow-go-back-line"></i>
|
|
테넌트 목록으로
|
|
</a>
|
|
</div>
|
|
</aside>
|