186 lines
7.9 KiB
PHP
186 lines
7.9 KiB
PHP
@extends('layouts.admin')
|
|
|
|
@section('admin-content')
|
|
<div class="space-y-6">
|
|
<!-- Header -->
|
|
<div class="flex items-center justify-between">
|
|
<div>
|
|
<h2 class="text-3xl font-bold">All Clubs</h2>
|
|
<p class="text-muted-foreground mt-1">Manage all clubs on the platform</p>
|
|
</div>
|
|
<div class="flex items-center gap-2">
|
|
<a href="{{ route('admin.platform.clubs.create') }}" class="btn btn-primary">
|
|
<i class="bi bi-plus-lg me-2"></i>Add New Club
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Search Bar -->
|
|
<div class="relative">
|
|
<i class="bi bi-search position-absolute" style="left: 12px; top: 50%; transform: translateY(-50%); color: hsl(var(--muted-foreground));"></i>
|
|
<input
|
|
type="text"
|
|
class="form-control ps-5"
|
|
placeholder="Search clubs by name, location, or description..."
|
|
id="searchInput"
|
|
/>
|
|
</div>
|
|
|
|
<!-- Clubs Grid -->
|
|
@if($clubs->isEmpty())
|
|
<div class="card p-5 text-center">
|
|
<p class="text-muted-foreground mb-0">No clubs found. Create your first club to get started.</p>
|
|
</div>
|
|
@else
|
|
<div class="row g-4" id="clubsGrid">
|
|
@foreach($clubs as $club)
|
|
<div class="col-md-6 col-xl-4 club-card"
|
|
data-name="{{ strtolower($club->club_name) }}"
|
|
data-location="{{ strtolower($club->location ?? '') }}"
|
|
data-description="{{ strtolower($club->description ?? '') }}">
|
|
<div class="card h-100 hover-card" style="cursor: pointer;" onclick="window.location='{{ route('admin.platform.clubs.edit', $club->id) }}'">
|
|
<!-- Club Cover Image -->
|
|
<div class="position-relative" style="height: 192px; overflow: hidden;">
|
|
@if($club->cover_image)
|
|
<img src="{{ asset('storage/' . $club->cover_image) }}"
|
|
alt="{{ $club->club_name }}"
|
|
class="w-100 h-100 object-fit-cover club-cover-img"
|
|
loading="lazy">
|
|
@else
|
|
<div class="w-100 h-100 d-flex align-items-center justify-content-center"
|
|
style="background: linear-gradient(135deg, hsl(250 60% 75%), hsl(250 60% 65%));">
|
|
<i class="bi bi-building text-white" style="font-size: 3rem;"></i>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- Club Logo Overlay -->
|
|
@if($club->logo)
|
|
<div class="position-absolute" style="bottom: 8px; left: 8px;">
|
|
<div class="rounded-circle bg-white shadow-lg border p-1" style="width: 80px; height: 80px;">
|
|
<img src="{{ asset('storage/' . $club->logo) }}"
|
|
alt="{{ $club->club_name }} logo"
|
|
class="w-100 h-100 object-fit-contain rounded-circle"
|
|
loading="lazy">
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- Admin Badge -->
|
|
<div class="position-absolute" style="top: 8px; left: 8px;">
|
|
<span class="badge text-white" style="background: linear-gradient(135deg, hsl(250 60% 75%), hsl(250 60% 65%));">
|
|
Admin
|
|
</span>
|
|
</div>
|
|
|
|
<!-- Rating Badge -->
|
|
@if($club->rating)
|
|
<div class="position-absolute" style="top: 8px; right: 8px;">
|
|
<span class="badge bg-white text-dark">
|
|
<i class="bi bi-star-fill text-warning"></i>
|
|
{{ number_format($club->rating, 1) }}
|
|
</span>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
<!-- Card Content -->
|
|
<div class="card-body p-4">
|
|
<div class="mb-3">
|
|
<h3 class="h5 fw-semibold mb-2 club-name-hover">{{ $club->club_name }}</h3>
|
|
@if($club->location)
|
|
<div class="d-flex align-items-center text-muted small">
|
|
<i class="bi bi-geo-alt me-1"></i>
|
|
<span class="text-truncate">{{ $club->location }}</span>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
<!-- Stats Grid -->
|
|
<div class="row g-2 text-center small">
|
|
<div class="col-4">
|
|
<div class="p-2 rounded" style="background-color: hsl(var(--accent));">
|
|
<i class="bi bi-people d-block mb-1" style="color: hsl(var(--primary));"></i>
|
|
<p class="fw-semibold mb-0">{{ $club->members_count ?? 0 }}</p>
|
|
<p class="text-muted mb-0" style="font-size: 0.75rem;">Members</p>
|
|
</div>
|
|
</div>
|
|
<div class="col-4">
|
|
<div class="p-2 rounded" style="background-color: hsl(var(--accent));">
|
|
<i class="bi bi-box d-block mb-1" style="color: hsl(var(--primary));"></i>
|
|
<p class="fw-semibold mb-0">{{ $club->packages_count ?? 0 }}</p>
|
|
<p class="text-muted mb-0" style="font-size: 0.75rem;">Packages</p>
|
|
</div>
|
|
</div>
|
|
<div class="col-4">
|
|
<div class="p-2 rounded" style="background-color: hsl(var(--accent));">
|
|
<i class="bi bi-star d-block mb-1" style="color: hsl(var(--primary));"></i>
|
|
<p class="fw-semibold mb-0">{{ $club->trainers_count ?? 0 }}</p>
|
|
<p class="text-muted mb-0" style="font-size: 0.75rem;">Trainers</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
@push('styles')
|
|
<style>
|
|
.hover-card {
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
border: 1px solid hsl(var(--border));
|
|
}
|
|
|
|
.hover-card:hover {
|
|
transform: translateY(-8px);
|
|
box-shadow: 0 12px 28px rgba(102, 126, 234, 0.15);
|
|
}
|
|
|
|
.club-cover-img {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.hover-card:hover .club-cover-img {
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
.club-name-hover {
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
.hover-card:hover .club-name-hover {
|
|
color: hsl(var(--primary));
|
|
}
|
|
|
|
.space-y-6 > * + * {
|
|
margin-top: 1.5rem;
|
|
}
|
|
</style>
|
|
@endpush
|
|
|
|
@push('scripts')
|
|
<script>
|
|
// Search functionality
|
|
document.getElementById('searchInput').addEventListener('input', function(e) {
|
|
const searchTerm = e.target.value.toLowerCase();
|
|
const clubCards = document.querySelectorAll('.club-card');
|
|
|
|
clubCards.forEach(card => {
|
|
const name = card.dataset.name;
|
|
const location = card.dataset.location;
|
|
const description = card.dataset.description;
|
|
|
|
const matches = name.includes(searchTerm) ||
|
|
location.includes(searchTerm) ||
|
|
description.includes(searchTerm);
|
|
|
|
card.style.display = matches ? '' : 'none';
|
|
});
|
|
});
|
|
</script>
|
|
@endpush
|
|
@endsection
|