feat: add site visit tracking middleware and admin dashboard stats
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
افزودن به علاقه مندی ها
|
||||
|
||||
Reference in New Issue
Block a user