initial commit
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
<script setup>
|
||||
import ApplicationLogo from '@/Components/ApplicationLogo.vue';
|
||||
import { Link, usePage } from '@inertiajs/vue3';
|
||||
import { computed } from 'vue';
|
||||
|
||||
defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
});
|
||||
|
||||
const page = usePage();
|
||||
const supervisor = computed(() => page.props.auth.supervisor);
|
||||
|
||||
const navItems = [
|
||||
{ label: 'Tableau de bord', route: 'supervisor.dashboard', icon: 'dashboard' },
|
||||
{ label: 'Machines', route: 'supervisor.machines.index', icon: 'machines' },
|
||||
{ label: 'Réservations', route: 'supervisor.bookings.index', icon: 'bookings' },
|
||||
{ label: 'Lavages', route: 'supervisor.washes.index', icon: 'washes' },
|
||||
{ label: 'Tarifs', route: 'supervisor.pricing.index', icon: 'pricing' },
|
||||
{ label: 'Promotions', route: 'supervisor.promotions.index', icon: 'promotions' },
|
||||
];
|
||||
|
||||
const isActive = (routeName) => {
|
||||
if (routeName === 'supervisor.machines.index') {
|
||||
return route().current('supervisor.machines.*');
|
||||
}
|
||||
return route().current(routeName);
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="min-h-screen bg-gray-100">
|
||||
<div class="flex min-h-screen">
|
||||
<!-- Sidebar -->
|
||||
<aside class="hidden w-64 flex-shrink-0 bg-indigo-900 lg:flex lg:flex-col">
|
||||
<div class="flex h-16 items-center px-6">
|
||||
<Link :href="route('supervisor.dashboard')" class="flex items-center gap-2">
|
||||
<ApplicationLogo class="h-8 w-auto fill-current text-white" />
|
||||
<span class="text-lg font-semibold text-white">Laverie</span>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<nav class="mt-4 flex-1 space-y-1 px-3">
|
||||
<Link
|
||||
v-for="item in navItems"
|
||||
:key="item.route"
|
||||
:href="route(item.route)"
|
||||
class="flex items-center rounded-md px-3 py-2 text-sm font-medium transition"
|
||||
:class="
|
||||
isActive(item.route)
|
||||
? 'bg-indigo-800 text-white'
|
||||
: 'text-indigo-100 hover:bg-indigo-800 hover:text-white'
|
||||
"
|
||||
>
|
||||
{{ item.label }}
|
||||
</Link>
|
||||
</nav>
|
||||
|
||||
<div class="border-t border-indigo-800 p-4">
|
||||
<p class="truncate text-sm font-medium text-white">
|
||||
{{ supervisor?.name }}
|
||||
</p>
|
||||
<p class="truncate text-xs text-indigo-300">
|
||||
{{ supervisor?.email }}
|
||||
</p>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main content -->
|
||||
<div class="flex flex-1 flex-col">
|
||||
<!-- Header -->
|
||||
<header class="border-b border-gray-200 bg-white shadow-sm">
|
||||
<div class="flex h-16 items-center justify-between px-4 sm:px-6 lg:px-8">
|
||||
<div class="flex items-center gap-4">
|
||||
<Link
|
||||
:href="route('supervisor.dashboard')"
|
||||
class="text-lg font-semibold text-gray-800 lg:hidden"
|
||||
>
|
||||
Laverie
|
||||
</Link>
|
||||
<h1 v-if="title" class="text-lg font-semibold text-gray-800">
|
||||
{{ title }}
|
||||
</h1>
|
||||
<slot name="header" />
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<span class="hidden text-sm text-gray-600 sm:inline">
|
||||
{{ supervisor?.name }}
|
||||
</span>
|
||||
<Link
|
||||
:href="route('logout')"
|
||||
method="post"
|
||||
as="button"
|
||||
class="rounded-md bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-200"
|
||||
>
|
||||
Déconnexion
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile nav -->
|
||||
<nav class="flex gap-1 overflow-x-auto border-t border-gray-100 px-4 py-2 lg:hidden">
|
||||
<Link
|
||||
v-for="item in navItems"
|
||||
:key="item.route"
|
||||
:href="route(item.route)"
|
||||
class="whitespace-nowrap rounded-md px-3 py-1.5 text-xs font-medium"
|
||||
:class="
|
||||
isActive(item.route)
|
||||
? 'bg-indigo-100 text-indigo-800'
|
||||
: 'text-gray-600 hover:bg-gray-100'
|
||||
"
|
||||
>
|
||||
{{ item.label }}
|
||||
</Link>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- Flash message -->
|
||||
<div
|
||||
v-if="page.props.flash?.success"
|
||||
class="mx-4 mt-4 rounded-md bg-green-50 px-4 py-3 text-sm text-green-800 sm:mx-6 lg:mx-8"
|
||||
>
|
||||
{{ page.props.flash.success }}
|
||||
</div>
|
||||
|
||||
<!-- Page content -->
|
||||
<main class="flex-1 p-4 sm:p-6 lg:p-8">
|
||||
<slot />
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
Reference in New Issue
Block a user