269 lines
13 KiB
PHP
269 lines
13 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="id">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Admin Panel - SLHD Provinsi DKI Jakarta</title>
|
|
<!-- Tailwind CSS CDN -->
|
|
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('assets/logo-dinas.ico')}}">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="{{asset('assets/logo-dinas.ico')}}">
|
|
<link rel="mask-icon" href="{{asset('assets/logo-dinas.ico')}}" color="#5bbad5">
|
|
<script src="{{ asset('assets/js/tailwind.js') }}"></script>
|
|
<!-- Google Fonts -->
|
|
<link href="{{ asset('assets/css/font.css') }}" rel="stylesheet">
|
|
<!-- Lucide Icons -->
|
|
<script src="{{ asset('assets/js/lucide.js') }}"></script>
|
|
<link rel="stylesheet" href="{{asset('assets/css/bootstrap-table.min.css')}}">
|
|
<link rel="stylesheet" media="screen, print" href="{{asset('assets/css/datatables/datatables.bundle.css')}}">
|
|
<link rel="stylesheet" href="{{asset('assets/css/sweetalert.min.css')}}">
|
|
<link rel="stylesheet" href="{{asset('assets/css/toast.min.css')}}">
|
|
<link rel="stylesheet" href="{{asset('assets/css/select2/select2.bundle.css')}}">
|
|
@yield('css')
|
|
<style>
|
|
body { font-family: 'Plus Jakarta Sans', sans-serif; }
|
|
|
|
/* Sidebar Transitions */
|
|
#sidebar {
|
|
transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
#sidebar.collapsed {
|
|
width: 80px;
|
|
}
|
|
|
|
#sidebar.collapsed .sidebar-text,
|
|
#sidebar.collapsed .sidebar-header-text,
|
|
#sidebar.collapsed .sidebar-dropdown-icon {
|
|
display: none;
|
|
}
|
|
|
|
#sidebar.collapsed .sidebar-section-label {
|
|
text-align: center;
|
|
font-size: 8px;
|
|
padding-left: 0;
|
|
padding-right: 0;
|
|
}
|
|
|
|
.sidebar-item-active {
|
|
background: rgba(59, 130, 246, 0.1);
|
|
color: #2563eb;
|
|
border-right: 4px solid #2563eb;
|
|
}
|
|
|
|
/* Nested Menu Style */
|
|
.submenu {
|
|
display: none;
|
|
background: #f8fafc;
|
|
}
|
|
|
|
#sidebar.collapsed .submenu {
|
|
display: none !important;
|
|
}
|
|
|
|
.custom-scrollbar::-webkit-scrollbar {
|
|
width: 4px;
|
|
}
|
|
.custom-scrollbar::-webkit-scrollbar-thumb {
|
|
background: #e2e8f0;
|
|
border-radius: 10px;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="bg-slate-50 text-slate-900 overflow-hidden">
|
|
|
|
<div class="flex h-screen overflow-hidden">
|
|
|
|
<!-- Sidebar -->
|
|
<aside id="sidebar" class="w-64 bg-white border-r border-slate-200 flex flex-col hidden md:flex z-30">
|
|
<!-- Logo & Toggle Container -->
|
|
<div class="p-6 border-b border-slate-50 flex items-center justify-between">
|
|
<div class="flex items-center space-x-3 overflow-hidden">
|
|
{{-- <div class="bg-white p-2 rounded-lg text-white shrink-0"> --}}
|
|
<img src="{{asset('assets/logo-dinas.ico')}}" width="40" alt="">
|
|
{{-- </div> --}}
|
|
<div class="sidebar-header-text">
|
|
<h1 class="font-bold text-lg tracking-tight text-slate-900 leading-none">SLHD</h1>
|
|
<p class="text-[8px] mt-2 uppercase tracking-widest text-slate-600 font-bold">Status Lingkungan <br> Hidup Daerah</p>
|
|
</div>
|
|
</div>
|
|
<!-- Desktop Toggle Button -->
|
|
<button id="toggle-sidebar" class="text-slate-400 hover:text-blue-600 transition-colors">
|
|
<i data-lucide="chevron-left" id="toggle-icon" class="w-5 h-5"></i>
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Navigation -->
|
|
<nav class="flex-1 overflow-y-auto py-4 custom-scrollbar">
|
|
<div class="sidebar-section-label px-4 mb-2 text-[10px] font-bold text-slate-400 uppercase tracking-widest transition-all">Menu Utama</div>
|
|
|
|
<a href="{{ url('dashboard') }}" class="flex items-center px-6 py-3 transition-all group text-slate-500">
|
|
<i data-lucide="layout-dashboard" class="w-5 h-5 shrink-0"></i>
|
|
<span class="sidebar-text font-medium text-slate-500 text-sm ml-3">Dashboard</span>
|
|
</a>
|
|
|
|
{!! renderMenu() !!}
|
|
|
|
{{--
|
|
|
|
<!-- Nested Menu: Manajemen Data -->
|
|
<div class="menu-dropdown">
|
|
<button class="w-full flex items-center justify-between px-6 py-3 text-slate-500 hover:text-blue-600 hover:bg-slate-50 transition-all dropdown-trigger group">
|
|
<div class="flex items-center">
|
|
<i data-lucide="database" class="w-5 h-5 shrink-0"></i>
|
|
<span class="sidebar-text font-semibold text-sm ml-3">Manajemen Data</span>
|
|
</div>
|
|
<i data-lucide="chevron-down" class="sidebar-dropdown-icon w-4 h-4 transition-transform duration-200"></i>
|
|
</button>
|
|
<div class="submenu">
|
|
<a href="#" class="flex items-center pl-14 pr-6 py-2.5 text-xs font-medium text-slate-500 hover:text-blue-600 transition-colors">Data Air</a>
|
|
<a href="#" class="flex items-center pl-14 pr-6 py-2.5 text-xs font-medium text-slate-500 hover:text-blue-600 transition-colors">Data Udara</a>
|
|
<a href="#" class="flex items-center pl-14 pr-6 py-2.5 text-xs font-medium text-slate-500 hover:text-blue-600 transition-colors">Data Sampah</a>
|
|
</div>
|
|
</div>
|
|
|
|
<a href="#" class="flex items-center px-6 py-3 text-slate-500 hover:text-blue-600 hover:bg-slate-50 transition-all group">
|
|
<i data-lucide="file-text" class="w-5 h-5 shrink-0"></i>
|
|
<span class="sidebar-text font-semibold text-sm ml-3">Laporan Publikasi</span>
|
|
</a>
|
|
|
|
<div class="menu-dropdown">
|
|
<button class="w-full flex items-center justify-between px-6 py-3 text-slate-500 hover:text-blue-600 hover:bg-slate-50 transition-all dropdown-trigger group">
|
|
<div class="flex items-center">
|
|
<i data-lucide="bar-chart-3" class="w-5 h-5 shrink-0"></i>
|
|
<span class="sidebar-text font-semibold text-sm ml-3">Visualisasi</span>
|
|
</div>
|
|
<i data-lucide="chevron-down" class="sidebar-dropdown-icon w-4 h-4"></i>
|
|
</button>
|
|
<div class="submenu">
|
|
<a href="#" class="flex items-center pl-14 pr-6 py-2.5 text-xs font-medium text-slate-500 hover:text-blue-600 transition-colors">Peta Interaktif</a>
|
|
<a href="#" class="flex items-center pl-14 pr-6 py-2.5 text-xs font-medium text-slate-500 hover:text-blue-600 transition-colors">Grafik Tahunan</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sidebar-section-label px-4 mt-8 mb-2 text-[10px] font-bold text-slate-400 uppercase tracking-widest transition-all">Sistem</div>
|
|
|
|
<a href="#" class="flex items-center px-6 py-3 text-slate-500 hover:text-blue-600 hover:bg-slate-50 transition-all group">
|
|
<i data-lucide="users" class="w-5 h-5 shrink-0"></i>
|
|
<span class="sidebar-text font-semibold text-sm ml-3">Manajemen User</span>
|
|
</a>
|
|
<a href="#" class="flex items-center px-6 py-3 text-slate-500 hover:text-blue-600 hover:bg-slate-50 transition-all group">
|
|
<i data-lucide="settings" class="w-5 h-5 shrink-0"></i>
|
|
<span class="sidebar-text font-semibold text-sm ml-3">Pengaturan</span>
|
|
</a> --}}
|
|
</nav>
|
|
|
|
<!-- Bottom Profile -->
|
|
<div class="p-4 border-t border-slate-100">
|
|
<div class="flex items-center p-3 bg-slate-50 rounded-xl overflow-hidden">
|
|
<div class="w-10 h-10 rounded-full bg-blue-100 flex items-center justify-center text-blue-600 font-bold border border-blue-200 shrink-0">
|
|
AD
|
|
</div>
|
|
<div class="sidebar-text ml-3 overflow-hidden">
|
|
<p class="text-sm font-bold text-slate-900 truncate">{{ auth()->user()->name }}</p>
|
|
<p class="text-[10px] text-slate-500 truncate">{{ session('group_name') }}</p>
|
|
</div>
|
|
<a href="{{ url('logout') }}" class="sidebar-text ml-auto text-slate-400 hover:text-red-500 transition-colors">
|
|
<i data-lucide="log-out" class="w-4 h-4"></i>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
|
|
<!-- Main Content Area -->
|
|
<main class="flex-1 flex flex-col overflow-hidden">
|
|
<header class="h-20 bg-white border-b border-slate-200 flex items-center justify-between px-8 shrink-0">
|
|
<div class="flex items-center">
|
|
<button id="mobile-toggle" class="p-2 text-slate-600 md:hidden">
|
|
<i data-lucide="menu" class="w-6 h-6"></i>
|
|
</button>
|
|
<div class="hidden md:block">
|
|
<h2 class="text-xl font-bold text-slate-900">{{ @$title }}</h2>
|
|
{{-- <p class="text-xs text-slate-500">Ringkasan Sistem SLHD Provinsi DKI Jakarta</p> --}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex items-center space-x-4 hidden">
|
|
<div class="relative hidden sm:block">
|
|
<i data-lucide="search" class="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-400"></i>
|
|
<input type="text" placeholder="Cari fitur..." class="pl-10 pr-4 py-2 bg-slate-50 border border-slate-200 rounded-xl text-sm outline-none focus:ring-2 focus:ring-blue-500 w-48 lg:w-64">
|
|
</div>
|
|
<button class="relative p-2 text-slate-400 hover:text-blue-600 transition-colors">
|
|
<i data-lucide="bell" class="w-5 h-5"></i>
|
|
<span class="absolute top-2 right-2 w-2 h-2 bg-red-500 rounded-full border-2 border-white"></span>
|
|
</button>
|
|
<div class="h-8 w-px bg-slate-200 mx-2"></div>
|
|
<button class="bg-blue-600 text-white px-4 py-2 rounded-lg text-sm font-bold hover:bg-blue-700 transition-all flex items-center shadow-lg shadow-blue-100">
|
|
<i data-lucide="plus" class="w-4 h-4 mr-2"></i> Tambah Data
|
|
</button>
|
|
</div>
|
|
</header>
|
|
|
|
@yield('content')
|
|
</main>
|
|
</div>
|
|
|
|
<!-- jQuery CDN -->
|
|
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
|
|
<script src="{{asset('assets/js/bootstrap-table.min.js')}}"></script>
|
|
<script src="{{ asset('assets/js/sweetalert.min.js') }}"></script>
|
|
<script src="{{asset('assets/js/toast.min.js')}}"></script>
|
|
<script src="{{asset('assets/js/select2/select2.bundle.js')}}"></script>
|
|
@yield('js')
|
|
<script>
|
|
$(document).ready(function() {
|
|
lucide.createIcons();
|
|
|
|
$('.select2').select2();
|
|
$('.numberInput').on('input', function() {
|
|
this.value = this.value.replace(/[^0-9]/g, ''); // Hanya angka 0-9
|
|
});
|
|
|
|
// 1. Sidebar Collapse Logic
|
|
$('#toggle-sidebar').click(function() {
|
|
const sidebar = $('#sidebar');
|
|
const icon = $('#toggle-icon');
|
|
|
|
sidebar.toggleClass('collapsed');
|
|
|
|
// Change icon direction
|
|
if (sidebar.hasClass('collapsed')) {
|
|
icon.attr('data-lucide', 'chevron-right');
|
|
} else {
|
|
icon.attr('data-lucide', 'chevron-left');
|
|
}
|
|
|
|
// Re-init icons to apply changes
|
|
lucide.createIcons();
|
|
});
|
|
|
|
// 2. Nested Menu / Dropdown Logic
|
|
$('.dropdown-trigger').click(function() {
|
|
// If sidebar is collapsed, don't allow open dropdown (or expand it first)
|
|
if($('#sidebar').hasClass('collapsed')) {
|
|
$('#sidebar').removeClass('collapsed');
|
|
$('#toggle-icon').attr('data-lucide', 'chevron-left');
|
|
lucide.createIcons();
|
|
}
|
|
|
|
const submenu = $(this).next('.submenu');
|
|
const icon = $(this).find('.sidebar-dropdown-icon');
|
|
|
|
// Toggle Submenu
|
|
submenu.slideToggle(300);
|
|
|
|
// Rotate Icon
|
|
icon.toggleClass('rotate-180');
|
|
|
|
// Optional: Close other open dropdowns
|
|
$('.submenu').not(submenu).slideUp(300);
|
|
$('.sidebar-dropdown-icon').not(icon).removeClass('rotate-180');
|
|
});
|
|
|
|
// Mobile Menu Toggle
|
|
$('#mobile-toggle').click(function() {
|
|
$('#sidebar').toggleClass('hidden').toggleClass('fixed inset-0 w-full');
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html> |