feat: implement admin dashboard header with notification, user, and admin tool components

This commit is contained in:
Ümit Tunç
2026-04-29 07:10:09 +03:00
parent a9911d6a47
commit 118da4ffe1
2 changed files with 154 additions and 104 deletions
@@ -188,13 +188,36 @@
#page-header .btn-dual-secondary { #page-header .btn-dual-secondary {
background: transparent !important; background: transparent !important;
border: none !important; border: none !important;
width: 32px !important; width: 36px !important;
height: 32px !important; height: 36px !important;
border-radius: 6px !important; border-radius: 8px !important;
color: #475569 !important;
} }
#page-header .btn-dual-secondary:hover { #page-header .btn-dual-secondary:hover {
background: #f1f5f9 !important; background: #f1f5f9 !important;
color: var(--citrus-primary) !important;
}
/* Breadcrumb styling */
.breadcrumb-item + .breadcrumb-item::before {
content: "/";
font-family: inherit;
font-weight: 400;
font-size: 11px;
color: #cbd5e1;
padding-right: 8px;
padding-left: 8px;
}
.breadcrumb-item {
display: flex;
align-items: center;
}
.content-header-section {
display: flex !important;
align-items: center !important;
} }
.mini-header { .mini-header {
+77 -50
View File
@@ -3,30 +3,26 @@
<div class="content-header"> <div class="content-header">
<!-- Left Section --> <!-- Left Section -->
<div class="content-header-section"> <div class="content-header-section">
<!-- Toggle Sidebar --> @if (isset($c) && $c->icon)
<button type="button" class="btn btn-circle btn-dual-secondary" data-toggle="layout" data-action="sidebar_toggle"> <div class="mr-15 d-flex align-items-center justify-content-center"
<i class="fas fa-bars"></i> style="width: 36px; height: 36px; background: #f8fafc; border-radius: 10px; border: 1px solid #f1f5f9;">
</button> <img src="{{ url($c->icon) }}" alt="" style="width: 20px; height: 20px; object-fit: contain;">
<!-- END Toggle Sidebar --> </div>
@endif
<!-- Open Search Section --> <!-- Page Title & Breadcrumbs -->
<button type="button" class="btn btn-circle btn-dual-secondary" data-toggle="layout" data-action="header_search_on"> <div class="d-flex flex-column justify-content-center">
<i class="fas fa-search"></i> <div class="font-size-md font-w700 text-dark mb-0" style="line-height: 1.2;">@yield('title')</div>
</button> <nav class="breadcrumb bg-transparent p-0 mb-0 font-size-xs" style="line-height: 1;">
<!-- END Open Search Section --> <a class="breadcrumb-item text-muted" href="{{url('admin')}}">Projects</a>
@if (isset($c) && $c->parent)
<!-- Project Info (Visible on large screens) --> <?php $parent = DB::table('types')->where('id', $c->parent)->first(); ?>
<div class="d-none d-lg-inline-block ml-10"> @if ($parent)
<span class="font-w700 text-white text-uppercase">{{setting("project_number")}}</span> <a class="breadcrumb-item text-muted" href="javascript:void(0)">{{ $parent->title }}</a>
<span class="text-white-op " @endif
style="max-width:30%; display:inline-block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom; text-align:center; cursor:pointer;" @endif
data-toggle="popover" <span class="breadcrumb-item active text-muted">@yield('title')</span>
data-placement="bottom" </nav>
data-html="true"
data-original-title="{{ setting("project_name") }}"
data-content='{{ setting("project_name_ru") }}'>
- {{ setting("project_name") }} / {{ setting("project_name_ru") }}
</span>
</div> </div>
</div> </div>
<!-- END Left Section --> <!-- END Left Section -->
@@ -35,19 +31,19 @@
<div class="content-header-section"> <div class="content-header-section">
<!-- Feedback Button --> <!-- Feedback Button -->
<button type="button" class="btn btn-rounded btn-dual-secondary" <button type="button" class="btn btn-rounded btn-dual-secondary" id="openFeedback" title="Feedback">
id="openFeedback"
title="Feedback">
<i class="fas fa-comment-dots"></i> <i class="fas fa-comment-dots"></i>
</button> </button>
@if($u->level == "Admin") @if($u->level == "Admin")
<!-- Admin Tools Dropdown --> <!-- Admin Tools Dropdown -->
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button type="button" class="btn btn-rounded btn-dual-secondary" id="page-header-admin-dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button type="button" class="btn btn-rounded btn-dual-secondary" id="page-header-admin-dropdown"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-wrench"></i> <i class="fa fa-wrench"></i>
</button> </button>
<div class="dropdown-menu dropdown-menu-right min-width-200" aria-labelledby="page-header-admin-dropdown"> <div class="dropdown-menu dropdown-menu-right min-width-200"
aria-labelledby="page-header-admin-dropdown">
<h5 class="h6 text-center py-10 mb-5 border-b text-uppercase">Admin Tools</h5> <h5 class="h6 text-center py-10 mb-5 border-b text-uppercase">Admin Tools</h5>
<a class="dropdown-item" href="javascript:void(0)" onclick=" <a class="dropdown-item" href="javascript:void(0)" onclick="
@@ -69,15 +65,19 @@
<!-- Language Dropdown --> <!-- Language Dropdown -->
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button type="button" class="btn btn-rounded btn-dual-secondary" id="page-header-language-dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button type="button" class="btn btn-rounded btn-dual-secondary" id="page-header-language-dropdown"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-globe"></i> <i class="fa fa-globe"></i>
<span class="d-none d-sm-inline-block ml-5">{{e2(App::getLocale())}}</span> <span class="d-none d-sm-inline-block ml-5">{{e2(App::getLocale())}}</span>
</button> </button>
<div class="dropdown-menu dropdown-menu-right min-width-200" aria-labelledby="page-header-language-dropdown"> <div class="dropdown-menu dropdown-menu-right min-width-200"
aria-labelledby="page-header-language-dropdown">
<h5 class="h6 text-center py-10 mb-5 border-b text-uppercase">{{ e2("Change Language") }}</h5> <h5 class="h6 text-center py-10 mb-5 border-b text-uppercase">{{ e2("Change Language") }}</h5>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<?php $dil = languages(); foreach($dil AS $d) { ?> <?php $dil = languages();
<a class="dropdown-item" href="javascript:void(0)" onclick="$.get('?ajax=set-locale&l={{$d}}',function(){location.reload()})"> foreach ($dil as $d) { ?>
<a class="dropdown-item" href="javascript:void(0)"
onclick="$.get('?ajax=set-locale&l={{$d}}',function(){location.reload()})">
<i class="fa fa-language mr-5"></i> {{e2($d)}} <i class="fa fa-language mr-5"></i> {{e2($d)}}
</a> </a>
<?php } ?> <?php } ?>
@@ -86,19 +86,23 @@
<!-- Notifications --> <!-- Notifications -->
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button type="button" class="btn btn-rounded btn-dual-secondary" id="notification-dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" onclick="loadNotifications()"> <button type="button" class="btn btn-rounded btn-dual-secondary" id="notification-dropdown"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" onclick="loadNotifications()">
<i class="fa fa-bell"></i> <i class="fa fa-bell"></i>
<span class="badge badge-primary badge-pill" id="notification-count" style="display:none;">0</span> <span class="badge badge-primary badge-pill" id="notification-count" style="display:none;">0</span>
</button> </button>
<div class="dropdown-menu dropdown-menu-right" style="width: 380px; padding: 0;" aria-labelledby="notification-dropdown"> <div class="dropdown-menu dropdown-menu-right" style="width: 380px; padding: 0;"
aria-labelledby="notification-dropdown">
<div class="block block-rounded block-bordered mb-0" style="border: none; border-radius: 0.375rem;"> <div class="block block-rounded block-bordered mb-0" style="border: none; border-radius: 0.375rem;">
<div class="block-header block-header-default"> <div class="block-header block-header-default">
<h3 class="block-title"> <h3 class="block-title">
<i class="fa fa-bell mr-5"></i> {{ e2("Notifications") }} <i class="fa fa-bell mr-5"></i> {{ e2("Notifications") }}
<span class="badge badge-primary ml-5" id="notification-unread-indicator">{{ e2("Loading") }}</span> <span class="badge badge-primary ml-5"
id="notification-unread-indicator">{{ e2("Loading") }}</span>
</h3> </h3>
<div class="block-options"> <div class="block-options">
<button type="button" class="btn-block-option" onclick="markAllAsRead(); return false;" title="{{e2('Mark All Read')}}"> <button type="button" class="btn-block-option" onclick="markAllAsRead(); return false;"
title="{{e2('Mark All Read')}}">
<i class="si si-check"></i> <i class="si si-check"></i>
</button> </button>
</div> </div>
@@ -126,14 +130,18 @@
<!-- User Dropdown --> <!-- User Dropdown -->
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button type="button" class="btn btn-rounded btn-dual-secondary" id="page-header-user-dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button type="button" class="btn btn-rounded btn-dual-secondary" id="page-header-user-dropdown"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-user d-sm-none"></i> <i class="fa fa-user d-sm-none"></i>
<span class="d-none d-sm-inline-block ml-5">{{ Auth::user()->name }} {{ Auth::user()->surname }}</span> <span class="d-none d-sm-inline-block ml-5">{{ Auth::user()->name }}
{{ Auth::user()->surname }}</span>
<i class="fa fa-angle-down ml-5"></i> <i class="fa fa-angle-down ml-5"></i>
</button> </button>
<div class="dropdown-menu dropdown-menu-right min-width-200" aria-labelledby="page-header-user-dropdown"> <div class="dropdown-menu dropdown-menu-right min-width-200"
aria-labelledby="page-header-user-dropdown">
<h5 class="h6 text-center py-10 mb-5 border-b text-uppercase">User</h5> <h5 class="h6 text-center py-10 mb-5 border-b text-uppercase">User</h5>
<a class="dropdown-item" href="javascript:void(0)" data-toggle="layout" data-action="side_overlay_toggle"> <a class="dropdown-item" href="javascript:void(0)" data-toggle="layout"
data-action="side_overlay_toggle">
<i class="si si-wrench mr-5"></i> {{e2("Account Settings")}} <i class="si si-wrench mr-5"></i> {{e2("Account Settings")}}
</a> </a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
@@ -153,7 +161,8 @@
<form action="{{url('admin/search')}}" method="get"> <form action="{{url('admin/search')}}" method="get">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<button type="button" class="btn btn-secondary" data-toggle="layout" data-action="header_search_off"> <button type="button" class="btn btn-secondary" data-toggle="layout"
data-action="header_search_off">
<i class="fas fa-times"></i> <i class="fas fa-times"></i>
</button> </button>
</div> </div>
@@ -189,7 +198,8 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 5px; /* Image ve title arası mesafe */ gap: 5px;
/* Image ve title arası mesafe */
transition: all 0.3s ease; transition: all 0.3s ease;
/* Hem mobilde hem desktopta akışı bozmaması için absolute */ /* Hem mobilde hem desktopta akışı bozmaması için absolute */
@@ -198,10 +208,13 @@
top: 0; top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1000; /* En üstte */ z-index: 1000;
pointer-events: none; /* Arkadaki butonlara tıklanabilsin */ /* En üstte */
pointer-events: none;
/* Arkadaki butonlara tıklanabilsin */
color: white !important; /* Her durumda beyaz */ color: white !important;
/* Her durumda beyaz */
} }
.mini-header img { .mini-header img {
@@ -215,7 +228,8 @@
@media (min-width: 992px) { @media (min-width: 992px) {
.mini-header { .mini-header {
font-size: 20px; font-size: 20px;
top: 3px; /* Özel istek */ top: 3px;
/* Özel istek */
height: auto; height: auto;
} }
@@ -237,11 +251,24 @@
} }
/* Print Styles */ /* Print Styles */
.yesprint { display:none; } .yesprint {
display: none;
}
@media print { @media print {
.sidebar, .noprint { display:none; }
body { background:white; } .sidebar,
.yesprint { display:block; } .noprint {
display: none;
}
body {
background: white;
}
.yesprint {
display: block;
}
} }
/* Notification Item Styles */ /* Notification Item Styles */