369 lines
14 KiB
PHP
369 lines
14 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>@yield('title') - GriyaPadi.id</title>
|
|
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
|
|
|
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/svg/favicon.svg"
|
|
type="image/x-icon">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/css/app.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/css/app-dark.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/css/iconly.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
|
|
|
@yield('css')
|
|
|
|
<style>
|
|
/* --- CUSTOM GREEN THEME --- */
|
|
:root {
|
|
--primary-green: #81c408;
|
|
--primary-hover: #6da705;
|
|
}
|
|
|
|
.logo a {
|
|
font-family: 'Inter', sans-serif;
|
|
font-weight: 600;
|
|
font-size: 1.7rem;
|
|
}
|
|
|
|
.bg-primary-green {
|
|
background-color: var(--primary-green) !important;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.text-primary-green {
|
|
background-color: var(--primary-green) !important;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.sidebar-wrapper .sidebar-menu .sidebar-item.active .sidebar-link {
|
|
background-color: var(--primary-green) !important;
|
|
box-shadow: 0 5px 10px rgba(129, 196, 8, 0.3);
|
|
}
|
|
|
|
a {
|
|
color: var(--primary-green);
|
|
}
|
|
|
|
a:hover {
|
|
color: var(--primary-hover);
|
|
}
|
|
|
|
.stats-icon {
|
|
display: flex !important;
|
|
justify-content: center !important;
|
|
align-items: center !important;
|
|
width: 3rem;
|
|
height: 3rem;
|
|
margin-right: 0;
|
|
}
|
|
|
|
.stats-icon i {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 1.5rem;
|
|
margin: 0 !important;
|
|
}
|
|
|
|
/* Loader/Spinner Color if exists */
|
|
.spinner-border.text-primary {
|
|
color: var(--primary-green) !important;
|
|
}
|
|
|
|
/* Pagination active color */
|
|
.page-item.active .page-link {
|
|
background-color: var(--primary-green) !important;
|
|
border-color: var(--primary-green) !important;
|
|
}
|
|
|
|
.chat-card {
|
|
height: 80vh;
|
|
overflow: hidden;
|
|
border-radius: 15px;
|
|
background: #fff;
|
|
}
|
|
|
|
/* Sidebar List Scroll */
|
|
.chat-sidebar {
|
|
height: 100%;
|
|
overflow-y: auto;
|
|
border-right: 1px solid #e9ecef;
|
|
background-color: #f2f7ff;
|
|
}
|
|
|
|
/* Chat Scroll */
|
|
.chat-window {
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
background-color: #fff;
|
|
}
|
|
|
|
.chat-content {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 20px;
|
|
background-color: #fafafa;
|
|
}
|
|
|
|
/* Item List */
|
|
.chat-item {
|
|
transition: all 0.3s;
|
|
border-bottom: 1px solid #dee2e6;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.chat-item:hover {
|
|
background-color: #e9ecef;
|
|
}
|
|
|
|
/* Active Chat Item */
|
|
.chat-item.active {
|
|
background-color: rgba(129, 196, 8, 0.2);
|
|
border-left: 4px solid var(--primary-green);
|
|
color: #333 !important;
|
|
}
|
|
|
|
.chat-item.active p,
|
|
.chat-item.active small,
|
|
.chat-item.active h6 {
|
|
color: #333 !important;
|
|
}
|
|
|
|
.btn-primary {
|
|
background-color: var(--primary-green) !important;
|
|
border-color: var(--primary-green) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
.btn-primary:hover,
|
|
.btn-primary:focus,
|
|
.btn-primary:active {
|
|
background-color: var(--primary-hover) !important;
|
|
border-color: var(--primary-hover) !important;
|
|
box-shadow: 0 0 0 0.25rem rgba(129, 196, 8, 0.5) !important;
|
|
}
|
|
|
|
/* Tombol Outline */
|
|
.btn-outline-primary {
|
|
color: var(--primary-green) !important;
|
|
border-color: var(--primary-green) !important;
|
|
}
|
|
|
|
.btn-outline-primary:hover {
|
|
background-color: var(--primary-green) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
/* Pagination */
|
|
.page-item.active .page-link {
|
|
background-color: var(--primary-green) !important;
|
|
border-color: var(--primary-green) !important;
|
|
}
|
|
|
|
.page-link {
|
|
color: var(--primary-green) !important;
|
|
}
|
|
|
|
/* Form Check / Radio Button / Switch saat aktif */
|
|
.form-check-input:checked {
|
|
background-color: var(--primary-green) !important;
|
|
border-color: var(--primary-green) !important;
|
|
}
|
|
|
|
::-webkit-scrollbar {
|
|
width: 5px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background: #ccc;
|
|
border-radius: 3px;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<script src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/static/js/initTheme.js"></script>
|
|
|
|
<div id="app">
|
|
<div id="sidebar">
|
|
<div class="sidebar-wrapper active">
|
|
<div class="sidebar-header position-relative">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<div class="logo me-md-2">
|
|
<a href="#" style="color: #81c408;">GriyaPadi.id</a>
|
|
</div>
|
|
<div class="sidebar-toggler x">
|
|
<a href="#" class="sidebar-hide d-xl-none d-block"><i class="bi bi-x bi-middle"></i></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sidebar-menu">
|
|
<ul class="menu">
|
|
<li class="sidebar-title">Menu Utama</li>
|
|
|
|
{{-- Menu Dashboard Admin --}}
|
|
@if (Auth::guard('admin')->check())
|
|
|
|
{{-- DASHBOARD --}}
|
|
<li class="sidebar-item {{ request()->is('admin/dashboard') ? 'active' : '' }}">
|
|
<a href="{{ route('admin.dashboard') }}" class='sidebar-link'>
|
|
<i class="bi bi-grid-fill"></i> <span>Dashboard</span>
|
|
</a>
|
|
</li>
|
|
|
|
{{-- MASTER KATEGORI --}}
|
|
<li class="sidebar-item {{ request()->is('admin/kategori*') ? 'active' : '' }}">
|
|
<a href="{{ route('admin.kategori.index') }}" class='sidebar-link'>
|
|
<i class="bi bi-tags-fill"></i> <span>Master Kategori</span>
|
|
</a>
|
|
</li>
|
|
|
|
{{-- MENU VERIFIKASI PETANI DIHAPUS SESUAI REVISI --}}
|
|
|
|
{{-- GAPOKTAN --}}
|
|
<li class="sidebar-item {{ request()->is('admin/gapoktan*') ? 'active' : '' }}">
|
|
<a href="{{ route('admin.gapoktan.index') }}" class='sidebar-link'>
|
|
<i class="bi bi-people-fill"></i> <span>Data Gapoktan</span>
|
|
</a>
|
|
</li>
|
|
|
|
{{-- MONITORING --}}
|
|
<li class="sidebar-item {{ request()->is('admin/monitoring*') ? 'active' : '' }}">
|
|
<a href="{{ route('admin.monitoring') }}" class='sidebar-link'>
|
|
<i class="bi bi-eye-fill"></i> <span>Monitoring</span>
|
|
</a>
|
|
</li>
|
|
|
|
@endif
|
|
|
|
{{-- Menu Dashboard Petani --}}
|
|
@if (Auth::guard('petani')->check())
|
|
{{-- LOGIC UNTUK MENGHITUNG NOTIFIKASI BADGE MERAH --}}
|
|
@php
|
|
$petaniId = Auth::guard('petani')->id();
|
|
|
|
// Hitung pesanan dengan status 'menunggu konfirmasi'
|
|
$notifPesanan = \App\Models\Transaksi::where('petani_id', $petaniId)
|
|
->where('status', 'menunggu konfirmasi')
|
|
->count();
|
|
|
|
// Hitung chat yang belum dibaca (sudah_dibaca = false)
|
|
// Asumsi penerima_type menggunakan namespace model penuh 'App\Models\Petani'
|
|
$notifPesan = \App\Models\Pesan::where('penerima_id', $petaniId)
|
|
->where('penerima_type', 'App\Models\Petani')
|
|
->where('sudah_dibaca', false)
|
|
->count();
|
|
@endphp
|
|
|
|
<li class="sidebar-item {{ request()->is('petani/dashboard') ? 'active' : '' }}">
|
|
<a href="{{ route('petani.dashboard') }}" class='sidebar-link'>
|
|
<i class="bi bi-grid-fill"></i> <span>Dashboard</span>
|
|
</a>
|
|
</li>
|
|
<li class="sidebar-item {{ request()->is('petani/produk*') ? 'active' : '' }}">
|
|
<a href="{{ route('petani.produk.index') }}" class='sidebar-link'>
|
|
<i class="bi bi-basket-fill"></i> <span>Kelola Produk</span>
|
|
</a>
|
|
</li>
|
|
|
|
{{-- Menu Pesanan Masuk (Dengan Badge) --}}
|
|
<li class="sidebar-item {{ request()->is('petani/pesanan*') ? 'active' : '' }}">
|
|
<a href="{{ route('petani.pesanan.index') }}" class='sidebar-link d-flex justify-content-between align-items-center'>
|
|
<div>
|
|
<i class="bi bi-receipt"></i> <span>Pesanan Masuk</span>
|
|
</div>
|
|
@if($notifPesanan > 0)
|
|
<span class="badge bg-danger rounded-pill">{{ $notifPesanan }}</span>
|
|
@endif
|
|
</a>
|
|
</li>
|
|
|
|
{{-- Menu Kotak Masuk (Dengan Badge) --}}
|
|
<li class="sidebar-item {{ request()->is('petani/pesan') || request()->is('petani/pesan/*') ? 'active' : '' }}">
|
|
<a href="{{ route('petani.pesan.index') }}" class='sidebar-link d-flex justify-content-between align-items-center'>
|
|
<div>
|
|
<i class="bi bi-chat-dots-fill"></i> <span>Kotak Masuk</span>
|
|
</div>
|
|
@if($notifPesan > 0)
|
|
<span class="badge bg-danger rounded-pill">{{ $notifPesan }}</span>
|
|
@endif
|
|
</a>
|
|
</li>
|
|
@endif
|
|
|
|
<li class="sidebar-title">Akun</li>
|
|
|
|
{{-- Menu Profil --}}
|
|
@if (Auth::guard('petani')->check())
|
|
<li class="sidebar-item {{ request()->is('petani/profile*') ? 'active' : '' }}">
|
|
<a href="{{ route('petani.profile') }}" class='sidebar-link'>
|
|
<i class="bi bi-person-circle"></i> <span>Profil Saya</span>
|
|
</a>
|
|
</li>
|
|
@endif
|
|
|
|
{{-- Logout --}}
|
|
<li class="sidebar-item">
|
|
<form action="{{ route('logout') }}" method="POST">
|
|
@csrf
|
|
<button type="submit"
|
|
class='sidebar-link border-0 bg-transparent text-danger w-100 text-start'>
|
|
<i class="bi bi-box-arrow-left"></i> <span>Logout</span>
|
|
</button>
|
|
</form>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="main">
|
|
<header class="mb-3">
|
|
<a href="#" class="burger-btn d-block d-xl-none">
|
|
<i class="bi bi-justify fs-3"></i>
|
|
</a>
|
|
</header>
|
|
|
|
<div class="page-heading">
|
|
<div class="fw-bold fs-5">@yield('page-title')</div>
|
|
</div>
|
|
|
|
<div class="page-content">
|
|
@yield('content')
|
|
</div>
|
|
|
|
<footer>
|
|
<div class="footer clearfix mb-0 text-muted">
|
|
<div class="float-start">
|
|
<p>2025 © GriyaPadi.id</p>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
</div>
|
|
|
|
@stack('scripts')
|
|
|
|
<script src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/static/js/components/dark.js"></script>
|
|
<script
|
|
src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/extensions/perfect-scrollbar/perfect-scrollbar.min.js">
|
|
</script>
|
|
<script src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/js/app.js"></script>
|
|
|
|
@yield('js')
|
|
</body>
|
|
|
|
</html> |