feat: add site visit tracking middleware and admin dashboard stats

This commit is contained in:
2026-08-20 17:03:13 +03:30
parent 3e60fa13d3
commit dd8785514f
29 changed files with 335 additions and 3187 deletions
+65 -1
View File
@@ -167,7 +167,7 @@
<div class="flex-fill fw-medium fs-13 mb-1 text-dark">آمار بازدید سایت</div>
<div
class="fs-22 fw-semibold mb-1 text-pink">
5
{{ number_format($siteTotalViews) }}
</div>
<div class="d-flex align-items-center fs-11">
<span class="text-default op-6">تا این لحظه </span>
@@ -200,3 +200,67 @@
</div>
@endsection
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', function () {
const chartElement = document.querySelector('#ordersChart');
if (!chartElement) {
return;
}
const options = {
series: [{
name: 'بازدید سایت',
data: @json($siteViewsData),
}],
chart: {
type: 'bar',
height: 360,
toolbar: {
show: false
},
fontFamily: 'IRANSans, sans-serif'
},
colors: ['#e75480'],
plotOptions: {
bar: {
horizontal: false,
columnWidth: '45%',
borderRadius: 5,
}
},
dataLabels: {
enabled: false
},
xaxis: {
categories: @json($chartLabels),
title: {
text: '۱۰ روز اخیر'
}
},
yaxis: {
min: 0,
forceNiceScale: true,
title: {
text: 'تعداد بازدید'
}
},
grid: {
borderColor: '#e9edf4',
strokeDashArray: 3
},
tooltip: {
y: {
formatter: function (value) {
return value.toLocaleString('fa-IR') + ' بازدید';
}
}
}
};
new ApexCharts(chartElement, options).render();
});
</script>
@endpush
@@ -1,8 +1,15 @@
<div class="col-md-6 col-lg-3">
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".25s">
<div class="activity-img">
<img src="{{ $tour?->file_id ?? asset('assets/img/activity/01.jpg') }}"
alt="{{ $tour->title }}">
@if($tour->coverImage?->file)
<img src="{{ getFileUrl($tour->coverImage->file_id) }}"
class="w-100 h-100"
alt="{{ $tour->title }}">
@else
<img src="{{ asset('assets/Admin/images/tour/single-2.jpg') }}"
class="w-100 h-100"
alt="{{ $tour->title }}">
@endif
@auth
<form action="{{ route('accounts.favorites.tour.toggle', ['tour' => $tour->id]) }}"
method="POST"
+9 -1
View File
@@ -229,7 +229,15 @@
<div class="col-md-6 col-lg-4">
<div class="tour-item">
<div class="tour-img">
<img src="assets/img/tour/01.jpg" alt>
@if($tour->coverImage?->file)
<img src="{{ getFileUrl($tour->coverImage->file_id) }}"
class="w-100 h-100"
alt="{{ $tour->title }}">
@else
<img src="{{ asset('assets/Admin/images/tour/single-2.jpg') }}"
class="w-100 h-100"
alt="{{ $tour->title }}">
@endif
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
</div>
<div class="tour-content">
+9 -11
View File
@@ -1,22 +1,20 @@
<div class="listing-content">
<div class="listing-slider owl-carousel owl-theme" dir="ltr">
@if ($tour->images && $tour->images->count() > 0)
@if ($tour->images->count() > 1)
@foreach ($tour->images as $image)
<img src="{{ asset($image->path) }}" alt="{{ $tour->title }}">
@endforeach
@else
<img src="{{ asset($tour->images->first()->path) }}" alt="{{ $tour->title }}">
@endif
@if($tour->coverImage?->file)
<img src="{{ getFileUrl($tour->coverImage->file_id) }}"
class="w-100 h-100"
alt="{{ $tour->title }}">
@else
<img src="{{ asset('assets/img/flight/single-1.jpg') }}" alt="{{ $tour->title}}">
<img src="{{ asset('assets/Admin/images/tour/single-2.jpg') }}"
class="w-100 h-100"
alt="{{ $tour->title }}">
@endif
</div>
<div class="listing-header">
<div class="listing-header-info">
<h4 class="listing-title">{{ $tour->originCity?->name }} - {{ $tour->city?->name }}</h4>
<p class="listing-stop"> سفر {{ $tour->tour_type }}</p>
<p class="listing-stop"> سفر {{ $tour->tour_type->label() ?? 'نامشخص'}}</p>
</div>
</div>
@@ -60,7 +58,7 @@
</div>
<div class="listing-feature-content">
<h6>نوع تور</h6>
<span>{{ $tour->tour_type ?? 'نامشخص' }}</span>
<span>{{ $tour->tour_type?->label() ?? 'نامشخص' }}</span>
</div>
</div>
</div>
@@ -12,7 +12,7 @@
</div>
<div class="search-form">
<form action="#">
<form action="{{route('tours.show' , $tour->id)}}">
@csrf
<input type="hidden" name="tour_id" value="{{ $tour->id }}">
@@ -21,7 +21,8 @@
<div class="col-lg-12">
<div class="form-group">
<div class="search-form-date">
<label for="departure_date">تاریخ رفت</label>
<div class="search-form-return">
<label for="departure_date">زمان رفت</label>
<input
type="text"
id="departure_date"
@@ -56,6 +57,7 @@
<span class="far fa-shopping-bag"></span>
اکنون ثبت کن
</button>
<a href="#" class="border-btn">
<i class="far fa-heart"></i>
افزودن به علاقه مندی ها