undefined / admin-dashboard.html
KatlegoWalter's picture
Manual changes saved
d3b5b37 verified
Raw History Blame Contribute Delete
20.5 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Dashboard | Jupiter</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/feather-icons"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#1e3a8a', // navy blue
secondary: '#9ca3af' // silver
}
}
}
}
</script>
<style>
.hero-bg {
background-image: url('http://static.photos/automotive/1200x630/42');
background-size: cover;
background-position: center;
}
.scroll-smooth {
scroll-behavior: smooth;
}
.courtesy-car-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0,0,0,0.1);
}
</style>
</head>
<body class="bg-gray-100">
<!-- Admin Sidebar -->
<div class="flex h-screen">
<div class="w-64 bg-primary text-white shadow-lg">
<div class="p-4 flex items-center space-x-2 border-b border-primary-darker">
<i data-feather="settings" class="w-6 h-6 text-secondary"></i>
<span class="text-xl font-bold">Admin Dashboard</span>
</div>
<nav class="p-4">
<div class="space-y-2">
<a href="#" class="flex items-center space-x-2 p-2 rounded-lg bg-primary-darker">
<i data-feather="home"></i>
<span>Dashboard</span>
</a>
<a href="#" class="flex items-center space-x-2 p-2 rounded-lg hover:bg-primary-darker transition">
<i data-feather="calendar"></i>
<span>Bookings</span>
</a>
<a href="#" class="flex items-center space-x-2 p-2 rounded-lg hover:bg-primary-darker transition">
<i data-feather="users"></i>
<span>Customers</span>
</a>
<a href="/admin-cars.html" class="flex items-center space-x-2 p-2 rounded-lg hover:bg-primary-darker transition">
<i data-feather="car"></i>
<span>Courtesy Cars</span>
</a>
<a href="#" class="flex items-center space-x-2 p-2 rounded-lg hover:bg-primary-darker transition">
<i data-feather="dollar-sign"></i>
<span>Transactions</span>
</a>
<a href="#" class="flex items-center space-x-2 p-2 rounded-lg hover:bg-primary-darker transition">
<i data-feather="settings"></i>
<span>Settings</span>
</a>
</div>
</nav>
</div>
<!-- Main Content -->
<div class="flex-1 overflow-auto">
<!-- Top Bar -->
<header class="bg-white shadow-sm p-4 flex justify-between items-center">
<h1 class="text-2xl font-bold text-gray-800">Dashboard Overview</h1>
<div class="flex items-center space-x-4">
<div class="relative">
<i data-feather="bell" class="text-gray-600 hover:text-primary cursor-pointer"></i>
<span class="absolute top-0 right-0 w-2 h-2 bg-red-500 rounded-full"></span>
</div>
<div class="flex items-center space-x-2">
<div class="w-8 h-8 rounded-full bg-secondary flex items-center justify-center text-white">
<i data-feather="user"></i>
</div>
<span class="font-medium">Admin User</span>
</div>
</div>
</header>
<!-- Dashboard Content -->
<main class="p-6">
<!-- Stats Cards -->
<div class="grid grid-cols-1 md:grid-cols-4 gap-6 mb-8">
<div class="bg-white p-6 rounded-lg shadow">
<div class="flex justify-between items-center">
<div>
<p class="text-gray-500">Total Bookings</p>
<h3 class="text-2xl font-bold">1,234</h3>
</div>
<div class="p-3 rounded-full bg-blue-100 text-primary">
<i data-feather="calendar"></i>
</div>
</div>
<p class="text-green-500 mt-2 flex items-center">
<i data-feather="trending-up" class="w-4 h-4 mr-1"></i>
<span>12% from last month</span>
</p>
</div>
<div class="bg-white p-6 rounded-lg shadow">
<div class="flex justify-between items-center">
<div>
<p class="text-gray-500">Today's Bookings</p>
<h3 class="text-2xl font-bold">24</h3>
</div>
<div class="p-3 rounded-full bg-green-100 text-green-500">
<i data-feather="check-circle"></i>
</div>
</div>
<p class="text-green-500 mt-2 flex items-center">
<i data-feather="trending-up" class="w-4 h-4 mr-1"></i>
<span>5% from yesterday</span>
</p>
</div>
<div class="bg-white p-6 rounded-lg shadow">
<div class="flex justify-between items-center">
<div>
<p class="text-gray-500">Active Courtesy Cars</p>
<h3 class="text-2xl font-bold">18</h3>
</div>
<div class="p-3 rounded-full bg-yellow-100 text-yellow-500">
<i data-feather="car"></i>
</div>
</div>
<p class="text-red-500 mt-2 flex items-center">
<i data-feather="trending-down" class="w-4 h-4 mr-1"></i>
<span>2 less than yesterday</span>
</p>
</div>
<div class="bg-white p-6 rounded-lg shadow">
<div class="flex justify-between items-center">
<div>
<p class="text-gray-500">Monthly Revenue</p>
<h3 class="text-2xl font-bold">R254,876</h3>
</div>
<div class="p-3 rounded-full bg-purple-100 text-purple-500">
<i data-feather="dollar-sign"></i>
</div>
</div>
<p class="text-green-500 mt-2 flex items-center">
<i data-feather="trending-up" class="w-4 h-4 mr-1"></i>
<span>8% from last month</span>
</p>
</div>
</div>
<!-- Charts Section -->
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
<!-- Bookings Chart -->
<div class="bg-white p-6 rounded-lg shadow">
<div class="flex justify-between items-center mb-4">
<h3 class="text-lg font-semibold">Bookings Overview</h3>
<select class="border rounded px-2 py-1 text-sm">
<option>Last 7 days</option>
<option>Last 30 days</option>
<option selected>Last 90 days</option>
<option>This year</option>
</select>
</div>
<canvas id="bookingsChart" height="250"></canvas>
</div>
<!-- Revenue Chart -->
<div class="bg-white p-6 rounded-lg shadow">
<div class="flex justify-between items-center mb-4">
<h3 class="text-lg font-semibold">Revenue Breakdown</h3>
<select class="border rounded px-2 py-1 text-sm">
<option>By Service</option>
<option selected>By Month</option>
<option>By Location</option>
</select>
</div>
<canvas id="revenueChart" height="250"></canvas>
</div>
</div>
<!-- Recent Bookings Table -->
<div class="bg-white rounded-lg shadow overflow-hidden">
<div class="p-4 border-b flex justify-between items-center">
<h3 class="text-lg font-semibold">Recent Bookings</h3>
<a href="#" class="text-primary text-sm font-medium">View All</a>
</div>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Ref #</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Customer</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Vehicle</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Service</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Date</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Action</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">AS-789456</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">John Smith</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Toyota Corolla (CA 123-456)</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Major Service</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">15 May 2023</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Completed</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<a href="#" class="text-primary hover:text-primary-darker">View</a>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">AS-789457</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Sarah Johnson</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">VW Polo (CA 789-012)</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Diagnostics</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">16 May 2023</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-yellow-800">In Progress</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<a href="#" class="text-primary hover:text-primary-darker">View</a>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">AS-789458</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Michael Brown</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Hyundai i20 (CA 345-678)</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Minor Service</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">17 May 2023</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">Scheduled</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<a href="#" class="text-primary hover:text-primary-darker">View</a>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">AS-789459</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Emily Davis</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Ford Ranger (CA 901-234)</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Major Service</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">18 May 2023</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">Scheduled</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<a href="#" class="text-primary hover:text-primary-darker">View</a>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">AS-789460</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">David Wilson</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">BMW 3 Series (CA 567-890)</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Body Repair</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">19 May 2023</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800">Cancelled</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<a href="#" class="text-primary hover:text-primary-darker">View</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</main>
</div>
</div>
<script>
// Initialize feather icons
feather.replace();
// Charts
document.addEventListener('DOMContentLoaded', function() {
// Bookings Chart
const bookingsCtx = document.getElementById('bookingsChart').getContext('2d');
const bookingsChart = new Chart(bookingsCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Bookings',
data: [120, 190, 170, 210, 230, 250],
backgroundColor: 'rgba(30, 58, 138, 0.1)',
borderColor: 'rgba(30, 58, 138, 1)',
borderWidth: 2,
tension: 0.3,
fill: true
}]
},
options: {
responsive: true,
plugins: {
legend: {
display: false
}
},
scales: {
y: {
beginAtZero: true
}
}
}
});
// Revenue Chart
const revenueCtx = document.getElementById('revenueChart').getContext('2d');
const revenueChart = new Chart(revenueCtx, {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Revenue (R)',
data: [42000, 48000, 52000, 58000, 62000, 68000],
backgroundColor: [
'rgba(30, 58, 138, 0.7)',
'rgba(30, 58, 138, 0.7)',
'rgba(30, 58, 138, 0.7)',
'rgba(30, 58, 138, 0.7)',
'rgba(30, 58, 138, 0.7)',
'rgba(30, 58, 138, 0.7)'
],
borderColor: [
'rgba(30, 58, 138, 1)',
'rgba(30, 58, 138, 1)',
'rgba(30, 58, 138, 1)',
'rgba(30, 58, 138, 1)',
'rgba(30, 58, 138, 1)',
'rgba(30, 58, 138, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
display: false
}
},
scales: {
y: {
beginAtZero: true
}
}
}
});
});
</script>
</body>
</html>