Complete redesign: modern, fresh, subtle Scandinavian tech studio look & feel for webshop and admin
This commit is contained in:
@@ -6,65 +6,65 @@
|
||||
<div class="space-y-6">
|
||||
|
||||
<!-- Header -->
|
||||
<div class="flex items-center justify-between pb-6 border-b border-slate-800">
|
||||
<div class="flex items-center justify-between pb-6 border-b border-slate-200/80">
|
||||
<div>
|
||||
<div class="inline-flex items-center space-x-2 text-xs text-amber-400 font-bold uppercase tracking-wider mb-1">
|
||||
<i data-lucide="shopping-cart" class="w-4 h-4"></i>
|
||||
<span>Verkopen & Facturatie</span>
|
||||
<div class="inline-flex items-center space-x-1.5 text-xs text-slate-500 font-medium mb-1">
|
||||
<i data-lucide="shopping-cart" class="w-3.5 h-3.5"></i>
|
||||
<span>Verkopen & Orders</span>
|
||||
</div>
|
||||
<h1 class="font-heading text-2xl sm:text-3xl font-black text-white">Bestellingen ({{ $orders->total() }})</h1>
|
||||
<p class="text-xs sm:text-sm text-slate-400 mt-1">Inzicht in binnengekomen bestellingen, status en klantgegevens.</p>
|
||||
<h1 class="text-2xl font-bold tracking-tight text-slate-900">Bestellingen ({{ $orders->total() }})</h1>
|
||||
<p class="text-xs text-slate-500 mt-1">Overzicht van binnengekomen bestellingen, orderstatussen en verzending.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Orders Table -->
|
||||
<div class="rounded-3xl bg-slate-900 border border-slate-800 overflow-hidden shadow-xl">
|
||||
<div class="rounded-2xl bg-white border border-slate-200/80 overflow-hidden shadow-2xs">
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full text-left text-xs text-slate-300">
|
||||
<thead class="bg-slate-950/80 text-[11px] uppercase tracking-wider text-slate-400 font-bold border-b border-slate-800">
|
||||
<table class="w-full text-left text-xs text-slate-700">
|
||||
<thead class="bg-slate-50/80 text-[11px] uppercase tracking-wider text-slate-500 font-semibold border-b border-slate-200/70">
|
||||
<tr>
|
||||
<th class="py-3.5 px-4">Order #</th>
|
||||
<th class="py-3.5 px-4">Datum</th>
|
||||
<th class="py-3.5 px-4">Klant</th>
|
||||
<th class="py-3.5 px-4">Items</th>
|
||||
<th class="py-3.5 px-4">Totaal</th>
|
||||
<th class="py-3.5 px-4">Status</th>
|
||||
<th class="py-3.5 px-4 text-right">Details</th>
|
||||
<th class="py-3 px-4">Order #</th>
|
||||
<th class="py-3 px-4">Datum</th>
|
||||
<th class="py-3 px-4">Klant</th>
|
||||
<th class="py-3 px-4">Items</th>
|
||||
<th class="py-3 px-4">Totaal</th>
|
||||
<th class="py-3 px-4">Status</th>
|
||||
<th class="py-3 px-4 text-right">Details</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-800/80 font-medium">
|
||||
<tbody class="divide-y divide-slate-100 font-medium">
|
||||
@forelse($orders as $order)
|
||||
<tr class="hover:bg-slate-800/50 transition">
|
||||
<td class="py-3.5 px-4 font-mono font-bold text-white">
|
||||
<tr class="hover:bg-slate-50/60 transition">
|
||||
<td class="py-3.5 px-4 font-mono font-bold text-slate-900">
|
||||
{{ $order->order_number }}
|
||||
</td>
|
||||
<td class="py-3.5 px-4 text-slate-400">
|
||||
<td class="py-3.5 px-4 text-slate-500">
|
||||
{{ $order->created_at->format('d-m-Y H:i') }}
|
||||
</td>
|
||||
<td class="py-3.5 px-4">
|
||||
<div class="font-bold text-white">{{ $order->customer_name }}</div>
|
||||
<div class="text-[11px] text-slate-400">{{ $order->customer_email }}</div>
|
||||
<div class="font-semibold text-slate-900">{{ $order->customer_name }}</div>
|
||||
<div class="text-[11px] text-slate-400 font-normal">{{ $order->customer_email }}</div>
|
||||
</td>
|
||||
<td class="py-3.5 px-4">
|
||||
<span class="px-2 py-0.5 rounded-md bg-slate-800 text-slate-300 text-[11px] font-bold">
|
||||
<span class="px-2 py-0.5 rounded-md bg-slate-100 text-slate-700 text-[11px] font-medium">
|
||||
{{ $order->items->count() }} items
|
||||
</span>
|
||||
</td>
|
||||
<td class="py-3.5 px-4">
|
||||
<span class="font-heading font-black text-amber-400 text-sm">{{ $order->formatted_total }}</span>
|
||||
<span class="font-bold text-slate-900">{{ $order->formatted_total }}</span>
|
||||
</td>
|
||||
<td class="py-3.5 px-4">
|
||||
<span class="px-2.5 py-1 rounded-full text-[10px] font-black uppercase
|
||||
@if($order->status === 'completed' || $order->status === 'shipped') bg-emerald-500/20 text-emerald-400
|
||||
@elseif($order->status === 'printed' || $order->status === 'processing') bg-sky-500/20 text-sky-400
|
||||
@elseif($order->status === 'cancelled') bg-rose-500/20 text-rose-400
|
||||
@else bg-amber-500/20 text-amber-400 @endif
|
||||
">
|
||||
{{ $order->status }}
|
||||
<span class="px-2 py-0.5 rounded-full text-[10px] font-semibold
|
||||
@if($order->status === 'completed' || $order->status === 'shipped') bg-emerald-50 text-emerald-700 border border-emerald-200/60
|
||||
@elseif($order->status === 'printed' || $order->status === 'processing') bg-sky-50 text-sky-700 border border-sky-200/60
|
||||
@elseif($order->status === 'cancelled') bg-rose-50 text-rose-700 border border-rose-200/60
|
||||
@else bg-amber-50 text-amber-700 border border-amber-200/60
|
||||
@endif">
|
||||
{{ $order->status_label }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="py-3.5 px-4 text-right">
|
||||
<a href="{{ route('admin.orders.show', $order) }}" class="px-3 py-1.5 rounded-xl bg-slate-800 hover:bg-slate-700 text-slate-200 text-xs font-bold transition inline-flex items-center space-x-1">
|
||||
<a href="{{ route('admin.orders.show', $order) }}" class="inline-flex items-center space-x-1 px-2.5 py-1 rounded-lg bg-slate-100 hover:bg-slate-900 text-slate-700 hover:text-white text-xs font-medium transition">
|
||||
<span>Bekijken</span>
|
||||
<i data-lucide="chevron-right" class="w-3 h-3"></i>
|
||||
</a>
|
||||
@@ -72,8 +72,8 @@
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="7" class="p-10 text-center text-slate-500">
|
||||
Nog geen bestellingen binnengekomen.
|
||||
<td colspan="7" class="py-12 text-center text-slate-400">
|
||||
Nog geen bestellingen geplaatst.
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
@@ -82,7 +82,7 @@
|
||||
</div>
|
||||
|
||||
@if($orders->hasPages())
|
||||
<div class="p-4 border-t border-slate-800 bg-slate-950/60">
|
||||
<div class="p-4 border-t border-slate-100">
|
||||
{{ $orders->links() }}
|
||||
</div>
|
||||
@endif
|
||||
@@ -90,4 +90,3 @@
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
|
||||
@@ -6,20 +6,20 @@
|
||||
<div class="space-y-6 max-w-5xl mx-auto">
|
||||
|
||||
<!-- Header -->
|
||||
<div class="flex items-center justify-between pb-6 border-b border-slate-800">
|
||||
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 pb-6 border-b border-slate-200/80">
|
||||
<div>
|
||||
<a href="{{ route('admin.orders.index') }}" class="text-xs text-amber-400 font-bold hover:underline inline-flex items-center space-x-1 mb-1">
|
||||
<a href="{{ route('admin.orders.index') }}" class="text-xs text-slate-500 hover:text-slate-900 font-medium inline-flex items-center space-x-1 mb-1 transition">
|
||||
<i data-lucide="arrow-left" class="w-3.5 h-3.5"></i>
|
||||
<span>Terug naar Bestellingen</span>
|
||||
</a>
|
||||
<h1 class="font-heading text-2xl font-black text-white">Bestelling #{{ $order->order_number }}</h1>
|
||||
<p class="text-xs text-slate-400">Geplaatst op {{ $order->created_at->format('d-m-Y om H:i') }}</p>
|
||||
<h1 class="text-2xl font-bold tracking-tight text-slate-900">Bestelling #{{ $order->order_number }}</h1>
|
||||
<p class="text-xs text-slate-500">Geplaatst op {{ $order->created_at->format('d-m-Y om H:i') }}</p>
|
||||
</div>
|
||||
|
||||
<!-- Status update form -->
|
||||
<form action="{{ route('admin.orders.status', $order) }}" method="POST" class="flex items-center space-x-2">
|
||||
@csrf
|
||||
<select name="status" class="bg-slate-900 border border-slate-700 rounded-xl px-3 py-2 text-xs font-bold text-white">
|
||||
<select name="status" class="bg-white border border-slate-200 rounded-xl px-3 py-2 text-xs font-medium text-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-900/10 focus:border-slate-900">
|
||||
<option value="pending" {{ $order->status === 'pending' ? 'selected' : '' }}>In afwachting</option>
|
||||
<option value="processing" {{ $order->status === 'processing' ? 'selected' : '' }}>In verwerking</option>
|
||||
<option value="printed" {{ $order->status === 'printed' ? 'selected' : '' }}>Geprint (Print klaar)</option>
|
||||
@@ -27,35 +27,50 @@
|
||||
<option value="completed" {{ $order->status === 'completed' ? 'selected' : '' }}>Afgerond</option>
|
||||
<option value="cancelled" {{ $order->status === 'cancelled' ? 'selected' : '' }}>Geannuleerd</option>
|
||||
</select>
|
||||
<button type="submit" class="px-4 py-2 rounded-xl bg-amber-400 hover:bg-amber-300 text-slate-950 font-black text-xs transition">
|
||||
<button type="submit" class="px-3.5 py-2 rounded-xl bg-slate-900 hover:bg-slate-800 text-white font-medium text-xs transition shadow-xs cursor-pointer">
|
||||
Status Bijwerken
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@if(session('success'))
|
||||
<div class="p-3.5 rounded-xl bg-emerald-50 border border-emerald-200/60 text-emerald-800 text-xs flex items-center space-x-2.5">
|
||||
<i data-lucide="check-circle" class="w-4 h-4 text-emerald-600 shrink-0"></i>
|
||||
<span class="font-medium">{{ session('success') }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||
|
||||
<!-- Order Items -->
|
||||
<div class="md:col-span-2 space-y-4">
|
||||
<div class="p-6 rounded-3xl bg-slate-900 border border-slate-800 space-y-4">
|
||||
<h3 class="font-heading font-black text-base text-white">Bestelde 3D Prints</h3>
|
||||
<div class="p-6 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-4">
|
||||
<h3 class="font-bold text-sm text-slate-900">Bestelde 3D Prints</h3>
|
||||
|
||||
<div class="divide-y divide-slate-800">
|
||||
<div class="divide-y divide-slate-100">
|
||||
@foreach($order->items as $item)
|
||||
<div class="py-3.5 flex items-start justify-between gap-4">
|
||||
<div>
|
||||
<h4 class="font-bold text-white text-sm">{{ $item->product_name }}</h4>
|
||||
<div class="text-xs text-slate-400 space-y-0.5 mt-1">
|
||||
<div><strong>Materiaal:</strong> {{ strtoupper($item->material) }}</div>
|
||||
<div><strong>Kleur:</strong> {{ $item->color }}</div>
|
||||
<div><strong>Schaal:</strong> {{ $item->scale ?? '100%' }}</div>
|
||||
<h4 class="font-semibold text-slate-900 text-xs">{{ $item->product_name }}</h4>
|
||||
<div class="text-[11px] text-slate-500 space-y-0.5 mt-1">
|
||||
<div><span class="text-slate-400">Materiaal:</span> {{ strtoupper($item->material) }}</div>
|
||||
<div><span class="text-slate-400">Kleur:</span> {{ $item->color }}</div>
|
||||
<div><span class="text-slate-400">Schaal:</span> {{ $item->scale ?? '100%' }}</div>
|
||||
@if($item->custom_file_url)
|
||||
<div class="pt-1">
|
||||
<a href="{{ $item->custom_file_url }}" target="_blank" class="text-sky-600 hover:underline flex items-center space-x-1 font-mono">
|
||||
<i data-lucide="download" class="w-3 h-3"></i>
|
||||
<span>Download 3D bestand (STL/3MF)</span>
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<span class="font-heading font-black text-white text-sm">
|
||||
<span class="font-semibold text-slate-900 text-xs">
|
||||
{{ $item->quantity }}x € {{ number_format($item->unit_price, 2, ',', '.') }}
|
||||
</span>
|
||||
<div class="text-xs font-black text-amber-400 mt-1">
|
||||
<div class="text-xs font-bold text-slate-900 mt-0.5">
|
||||
€ {{ number_format($item->total_price, 2, ',', '.') }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -63,50 +78,45 @@
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="pt-4 border-t border-slate-800 flex items-center justify-between font-heading font-black text-lg text-white">
|
||||
<span>Totaalbedrag</span>
|
||||
<span class="text-amber-400">{{ $order->formatted_total }}</span>
|
||||
<div class="pt-4 border-t border-slate-100 flex items-center justify-between text-xs">
|
||||
<span class="font-medium text-slate-500">Totaalbedrag (incl. BTW)</span>
|
||||
<span class="font-bold text-base text-slate-900">{{ $order->formatted_total }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Klantgegevens & Afleveradres -->
|
||||
<!-- Klant & Verzendinfo -->
|
||||
<div class="space-y-4">
|
||||
<div class="p-6 rounded-3xl bg-slate-900 border border-slate-800 space-y-4 text-xs">
|
||||
<h3 class="font-heading font-black text-base text-white">Klant & Verzendadres</h3>
|
||||
|
||||
<div class="space-y-2 text-slate-300">
|
||||
<div class="p-5 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-3">
|
||||
<h3 class="font-bold text-xs text-slate-900 uppercase tracking-wider">Klantgegevens</h3>
|
||||
|
||||
<div class="text-xs space-y-1.5 text-slate-600">
|
||||
<div>
|
||||
<span class="text-slate-500 block text-[10px] uppercase font-bold">Naam</span>
|
||||
<strong class="text-white">{{ $order->customer_name }}</strong>
|
||||
<span class="text-slate-400 block text-[10px]">Naam</span>
|
||||
<span class="font-semibold text-slate-900">{{ $order->customer_name }}</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="text-slate-500 block text-[10px] uppercase font-bold">E-mail</span>
|
||||
<span>{{ $order->customer_email }}</span>
|
||||
<span class="text-slate-400 block text-[10px]">E-mailadres</span>
|
||||
<a href="mailto:{{ $order->customer_email }}" class="text-slate-900 hover:underline font-mono">{{ $order->customer_email }}</a>
|
||||
</div>
|
||||
|
||||
@if($order->customer_phone)
|
||||
<div>
|
||||
<span class="text-slate-500 block text-[10px] uppercase font-bold">Telefoon</span>
|
||||
<span>{{ $order->customer_phone }}</span>
|
||||
<span class="text-slate-400 block text-[10px]">Telefoonnummer</span>
|
||||
<span class="text-slate-900">{{ $order->customer_phone }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="pt-2 border-t border-slate-800">
|
||||
<span class="text-slate-500 block text-[10px] uppercase font-bold">Adres</span>
|
||||
<div>{{ $order->shipping_street }} {{ $order->shipping_number }}</div>
|
||||
<div>{{ $order->shipping_postal_code }} {{ $order->shipping_city }}</div>
|
||||
<div>{{ $order->shipping_country ?? 'Nederland' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($order->notes)
|
||||
<div class="pt-3 border-t border-slate-800">
|
||||
<span class="text-slate-500 block text-[10px] uppercase font-bold">Klant Opmerking</span>
|
||||
<p class="text-slate-300 italic mt-1">{{ $order->notes }}</p>
|
||||
</div>
|
||||
@endif
|
||||
<div class="p-5 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-3">
|
||||
<h3 class="font-bold text-xs text-slate-900 uppercase tracking-wider">Verzendadres</h3>
|
||||
|
||||
<div class="text-xs text-slate-700 leading-relaxed">
|
||||
<div class="font-semibold text-slate-900">{{ $order->customer_name }}</div>
|
||||
<div>{{ $order->shipping_street }} {{ $order->shipping_number }}</div>
|
||||
<div>{{ $order->shipping_postal_code }} {{ $order->shipping_city }}</div>
|
||||
<div class="text-slate-400">Nederland</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user