feat: make dashboard and sidebar dynamic

This commit is contained in:
2026-08-18 19:49:19 +03:30
parent 8fa9a17ead
commit 0ecdf52c29
5 changed files with 287 additions and 214 deletions
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Comment;
use App\Models\Flight;
use App\Models\Tour;
use App\Models\User;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
public function index()
{
$recentComments = Comment::with(['user', 'commentable'])
->latest()
->paginate(5);
$totalUser = User::count();
$totalTours = Tour::count();
$totalFlights = Flight::count();
return view('admin.dashboard', compact('totalUser', 'totalTours', 'totalFlights' , 'recentComments'));
}
}
+87
View File
@@ -0,0 +1,87 @@
@extends('dashboard.layouts.app')
@section('title' , 'داشبورد')
@section('account-content')
<div class="user-profile-wrapper">
<div class="row">
<div class="col-md-6 col-lg-4">
<div class="dashboard-widget dashboard-widget-color-1">
<div class="dashboard-widget-info">
<h1>{{$totalUser}} عدد</h1>
<span>تمام کاربر ها</span>
</div>
<div class="dashboard-widget-icon">
<i class="far fa-users"></i>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="dashboard-widget dashboard-widget-color-2">
<div class="dashboard-widget-info">
<h1>{{$totalTours}} عدد </h1>
<span>تعداد تور</span>
</div>
<div class="dashboard-widget-icon">
<i class="fal fa-loader"></i>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="dashboard-widget dashboard-widget-color-3">
<div class="dashboard-widget-info">
<h1>{{$totalFlights}} عدد</h1>
<span>تعداد پرواز ها</span>
</div>
<div class="dashboard-widget-icon">
<i class="fal fa-sack-dollar"></i>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="user-profile-card profile-booking">
<h4 class="user-profile-card-title">نظرات اخیر</h4>
<div class="table-responsive">
<table class="table text-nowrap">
<thead>
<tr>
<th>نه</th>
<th>کاربر</th>
<th>نظر</th>
<th>مربوط به</th>
<th>تاریخ</th>
</tr>
</thead>
<tbody>
@forelse($recentComments as $index => $comment)
<tr>
<td>{{ $recentComments->firstItem() + $index }}.</td>
<td>{{ $comment->user->first_name ?? $comment->guest_name }}</td>
<td>{{ \Illuminate\Support\Str::limit($comment->body, 40) }}</td>
<td>{{ $comment->commentable->title ?? $comment->commentable->flight_number ?? '-' }}</td>
<td>{{ $comment->created_at->diffForHumans() }}</td>
</tr>
@empty
<tr>
<td colspan="5" class="text-center">هنوز نظری ثبت نشده.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
<div class="pagination-area my-4">
{{ $recentComments->links() }}
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -1,34 +1,174 @@
<div class="user-profile-sidebar"> <div class="user-profile-sidebar">
<div class="user-profile-sidebar-top"> <div class="user-profile-sidebar-top">
<div class="user-profile-img"> <div class="user-profile-img">
<img src="{{asset('assets/img/account/user.jpg')}}" alt> <img src="{{ asset('assets/img/account/user.jpg') }}" alt>
<button type="button" class="profile-img-btn"><i class="far fa-camera"></i></button>
<button type="button" class="profile-img-btn">
<i class="far fa-camera"></i>
</button>
<input type="file" class="profile-img-file"> <input type="file" class="profile-img-file">
</div> </div>
<h4>{{auth()->user()->first_name . ' ' . auth()->user()->last_name}}</h4>
<p><a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d7bdb8b9a4b8b997b2afb6baa7bbb2f9b4b8ba">[ایمیل&#160;محفوظ]</a></p> @if(auth('admin')->check())
<h4>
{{ auth('admin')->user()->first_name . ' ' . auth('admin')->user()->last_name }}
</h4>
<p>
{{ auth('admin')->user()->email }}
</p>
@elseif(auth('web')->check())
<h4>
{{ auth('web')->user()->first_name . ' ' . auth('web')->user()->last_name }}
</h4>
<p>
{{ auth('web')->user()->email }}
</p>
@endif
</div> </div>
<ul class="user-profile-sidebar-list"> <ul class="user-profile-sidebar-list">
<li><a class="active" href="{{route('profile')}}"><i class="far fa-user"></i> نمایه من</a></li>
<li><a href="profile-booking.html"><i class="far fa-shopping-bag"></i> رزرو من</a></li> {{-- ========================= --}}
<li><a href="profile-booking-history.html"><i class="far fa-clipboard-list"></i> تاریخچه رزرو</a></li> {{-- ADMIN --}}
<li><a href="{{route('comment.index')}}"><i class="far fa-globe"></i> نظرات من</a></li> {{-- ========================= --}}
<li class="profile-menu">
<a href="#profile-menu" data-bs-toggle="collapse" aria-expanded="false" aria-controls="profile-menu"> @if(auth('admin')->check())
<i class="far fa-plus-circle"></i> افزودن لیست <i class="far fa-angle-down profile-menu-angle"></i>
<li>
<a href="{{ route('admin.dashboard') }}"
class="{{ request()->routeIs('admin.dashboard') ? 'active' : '' }}">
<i class="far fa-home"></i>
داشبورد
</a> </a>
<div class="collapse" id="profile-menu">
<ul class="profile-menu-list">
<li><a href="flight-add.html">اضافه کردن پرواز</a></li>
<li><a href="tour-add.html">اضافه کردن تور </a></li>
</ul>
</div>
</li> </li>
<li><a href="{{route('favorites.index')}}"><i class="far fa-heart"></i> علاقه مندی های من</a></li>
<li><a href="{{route('setting')}}"><i class="far fa-cog"></i> تنظیمات</a></li> <li>
<li><a href="{{route('logout')}}"><i class="far fa-sign-out"></i> خروج</a></li> <a href="#">
<i class="far fa-plane"></i>
مدیریت پروازها
</a>
</li>
<li>
<a href="#">
<i class="far fa-suitcase"></i>
مدیریت تورها
</a>
</li>
<li>
<a href="#">
<i class="far fa-users"></i>
لیست کاربران سایت
</a>
</li>
<li>
<form action="{{ route('admin.logout') }}" method="POST">
@csrf
<button type="submit"
style="border: none; background: none; padding: 0; width: 100%; text-align: right;">
<i class="far fa-sign-out"></i>
خروج
</button>
</form>
</li>
{{-- ========================= --}}
{{-- USER --}}
{{-- ========================= --}}
@elseif(auth('web')->check())
<li>
<a href="{{ route('profile') }}"
class="{{ request()->routeIs('profile') ? 'active' : '' }}">
<i class="far fa-home"></i>
نمایه من
</a>
</li>
<li>
<a class="{{ request()->routeIs('comment.index') ? 'active' : '' }}"
href="{{ route('comment.index') }}">
<i class="far fa-globe"></i>
نظرات من
</a>
</li>
<li class="profile-menu">
<a href="#profile-menu"
data-bs-toggle="collapse"
aria-expanded="false"
aria-controls="profile-menu">
<i class="far fa-plus-circle"></i>
افزودن لیست
<i class="far fa-angle-down profile-menu-angle"></i>
</a>
<div class="collapse" id="profile-menu">
<ul class="profile-menu-list">
<li>
<a href="flight-add.html">
اضافه کردن پرواز
</a>
</li>
<li>
<a href="tour-add.html">
اضافه کردن تور
</a>
</li>
</ul> </ul>
</div>
</li>
<li>
<a class="{{ request()->routeIs('favorites.index') ? 'active' : '' }}"
href="{{ route('favorites.index') }}">
<i class="far fa-heart"></i>
علاقه مندی های من
</a>
</li>
<li>
<a class="{{ request()->routeIs('setting') ? 'active' : '' }}"
href="{{ route('setting') }}">
<i class="far fa-cog"></i>
تنظیمات
</a>
</li>
<li>
<a href="{{ route('logout') }}">
<i class="far fa-sign-out"></i>
خروج
</a>
</li>
@endif
</ul>
</div> </div>
+1 -171
View File
@@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('content') @section('content')
<div class="hero-section"> <div class="hero-section">
<div class="hero-single" style="background: url(assets/img/hero/hero-4.jpg)"> <div class="hero-single" style="background: url({{asset('assets/img/hero/hero-4.jpg')}})">
<div class="container"> <div class="container">
<div class="row align-items-center"> <div class="row align-items-center">
<div class="col-lg-12 mx-auto"> <div class="col-lg-12 mx-auto">
@@ -17,176 +17,6 @@
</div> </div>
</div> </div>
<div class="search-area">
<div class="container">
<div class="search-wrapper">
<div class="search-box activity-search">
<div class="search-form">
<form action="#">
<div class="activity-search-wrapper">
<div class="row">
<div class="col-lg-4">
<div class="form-group">
<label>موقعیت</label>
<div class="form-group-icon">
<input type="text" name="location" class="form-control"
value="تهران ، میدان آزادی">
<i class="fal fa-earth-americas"></i>
</div>
<p>کجا می روی؟</p>
</div>
</div>
<div class="col-lg-4">
<div class="form-group">
<div class="search-form-date">
<div class="search-form-journey">
<label>بررسی کنید</label>
<div class="form-group-icon">
<input type="text" name="journey-date"
class="form-control date-picker journey-date">
<i class="fal fa-calendar-days"></i>
</div>
<p class="journey-day-name"></p>
</div>
<div class="search-form-return">
<label>پرداخت</label>
<div class="form-group-icon">
<input type="text" name="return-date"
class="form-control date-picker return-date">
</div>
<p class="return-day-name"></p>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="form-group dropdown passenger-box">
<div class="passenger-class" role="menu" data-bs-toggle="dropdown"
aria-expanded="false">
<label>اتاق ها، مهمانان</label>
<div class="form-group-icon">
<div class="passenger-total">
<span class="passenger-total-room">2</span> اتاق,
<span class="passenger-total-amount">2</span> میهمان
</div>
<i class="fal fa-user-plus"></i>
</div>
<p class="passenger-class-name">اتاق دو نفره</p>
</div>
<div class="dropdown-menu dropdown-menu-end">
<div class="dropdown-item">
<div class="passenger-item">
<div class="passenger-info">
<h6>بزرگسالان</h6>
<p>+12 سال</p>
</div>
<div class="passenger-qty">
<button type="button" class="minus-btn"><i
class="far fa-minus"></i></button>
<input type="text" name="adult"
class="qty-amount passenger-adult" value="2"
readonly>
<button type="button" class="plus-btn"><i
class="far fa-plus"></i></button>
</div>
</div>
</div>
<div class="dropdown-item">
<div class="passenger-item">
<div class="passenger-info">
<h6>کودکان</h6>
<p>2 تا 12 سال</p>
</div>
<div class="passenger-qty">
<button type="button" class="minus-btn"><i
class="far fa-minus"></i></button>
<input type="text" name="children"
class="qty-amount passenger-children" value="0"
readonly>
<button type="button" class="plus-btn"><i
class="far fa-plus"></i></button>
</div>
</div>
</div>
<div class="dropdown-item">
<div class="passenger-item">
<div class="passenger-info">
<h6>نوزاد</h6>
<p>کمتر از 2 سال</p>
</div>
<div class="passenger-qty">
<button type="button" class="minus-btn"><i
class="far fa-minus"></i></button>
<input type="text" name="infant"
class="qty-amount passenger-infant" value="0"
readonly>
<button type="button" class="plus-btn"><i
class="far fa-plus"></i></button>
</div>
</div>
</div>
<div class="dropdown-item">
<div class="passenger-item">
<div class="passenger-info">
<h6>اتاق ها</h6>
</div>
<div class="passenger-qty">
<button type="button" class="minus-btn"><i
class="far fa-minus"></i></button>
<input type="text" name="room"
class="qty-amount passenger-room" value="2" readonly>
<button type="button" class="plus-btn"><i
class="far fa-plus"></i></button>
</div>
</div>
</div>
<div class="dropdown-item">
<h6 class="mb-3 mt-2">نوع اتاق</h6>
<div class="passenger-class-info">
<div class="form-check">
<input class="form-check-input" type="radio"
value="Single Room" name="room-type" id="room-type4">
<label class="form-check-label" for="room-type4">
اتاق یک نفره
</label>
</div>
<div class="form-check">
<input class="form-check-input" checked type="radio"
value="Double Room" name="room-type" id="room-type5">
<label class="form-check-label" for="room-type5">
اتاق دونفره
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio"
value="Deluxe Room" name="room-type" id="room-type6">
<label class="form-check-label" for="room-type6">
اتاق دولوکس
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="search-btn">
<button type="submit" class="theme-btn"><span class="far fa-search"></span>جستجو
کردن
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div class="feature-area py-120"> <div class="feature-area py-120">
<div class="container"> <div class="container">
<div class="feature-wrapper"> <div class="feature-wrapper">
+8 -18
View File
@@ -24,7 +24,6 @@
<li><a class="dropdown-item" href="register.html">ثبت نام</a></li> <li><a class="dropdown-item" href="register.html">ثبت نام</a></li>
</ul> </ul>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<ul> <ul>
<li><a class="dropdown-item" href="profile-notification.html">اطلاعیه</a></li> <li><a class="dropdown-item" href="profile-notification.html">اطلاعیه</a></li>
@@ -38,41 +37,32 @@
<li><a class="dropdown-item" href="contact.html">با ما تماس بگیرید</a></li> <li><a class="dropdown-item" href="contact.html">با ما تماس بگیرید</a></li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
</li> </li>
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"> پرواز ها</a> <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown">پرواز ها</a>
<ul class="dropdown-menu fade-down"> <ul class="dropdown-menu fade-down">
<li><a class="dropdown-item" href="{{route('flight.index')}}">لیست پرواز</a> <li><a class="dropdown-item" href="{{route('flight.index')}}">لیست پرواز</a></li>
</ul> </ul>
</li> </li>
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"> تور ها</a> <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown">تور ها</a>
<ul class="dropdown-menu fade-down"> <ul class="dropdown-menu fade-down">
<li><a class="dropdown-item" href="{{route('tour.index')}}">لیست تور</a></li> <li><a class="dropdown-item" href="{{route('tour.index')}}">لیست تور</a></li>
</ul> </ul>
</li> </li>
<li class="nav-item"><a class="nav-link" href="contact.html">تماس باما</a></li> <li class="nav-item"><a class="nav-link" href="contact.html">تماس باما</a></li>
</ul> </ul>
<div class="header-nav-right"> <div class="header-nav-right">
<div class="header-btn"> <div class="header-btn">
@if(!auth()->check()) @if(auth('admin')->check())
<a href="{{route('auth.register.index')}}" class="theme-btn mt-2">ثبت نام | ورود</a> <a href="{{route('admin.dashboard')}}" class="theme-btn mt-2">پنل ادمین</a>
@elseif(auth('web')->check())
<a href="{{route('profile')}}" class="theme-btn mt-2">پروفایل</a>
@else @else
<a href="{{route('profile')}}" class="theme-btn mt-2">{{auth()->user()->first_name . ' ' . auth()->user()->last_name}}</a> <a href="{{route('auth.register.index')}}" class="theme-btn mt-2">ثبت نام | ورود</a>
@endif @endif
</div> </div>
</div> </div>
</div> </div>