Deploy Ladill Frontdesk / deploy (push) Successful in 1m3s
Co-authored-by: Cursor <cursoragent@cursor.com>
72 lines
4.3 KiB
PHP
72 lines
4.3 KiB
PHP
<x-app-layout title="Employees">
|
|
<div class="space-y-6">
|
|
<x-frontdesk.page-hero
|
|
badge="Staff sign-in · Presence · Attendance"
|
|
title="Employees"
|
|
description="Register staff who sign in at the kiosk, track on-site presence, and export attendance records."
|
|
:stats="[
|
|
['value' => number_format($heroStats['total']), 'label' => 'Employees'],
|
|
['value' => number_format($heroStats['on_site']), 'label' => 'On site'],
|
|
['value' => number_format($heroStats['active']), 'label' => 'Active'],
|
|
]">
|
|
<x-slot name="actions">
|
|
<a href="{{ route('frontdesk.employees.export.attendance') }}" class="btn-secondary">Export attendance</a>
|
|
<a href="{{ route('frontdesk.employees.import') }}" class="btn-secondary">Import CSV</a>
|
|
<a href="{{ route('frontdesk.employees.create') }}" class="btn-primary">
|
|
<svg class="h-4 w-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15"/></svg>
|
|
Add employee
|
|
</a>
|
|
</x-slot>
|
|
</x-frontdesk.page-hero>
|
|
|
|
<div class="overflow-hidden rounded-2xl border border-slate-200 bg-white">
|
|
<div class="border-b border-slate-100 px-6 py-4">
|
|
<h2 class="text-sm font-semibold text-slate-900">All employees</h2>
|
|
</div>
|
|
<table class="min-w-full divide-y divide-slate-100 text-sm">
|
|
<thead class="bg-slate-50 text-left text-xs uppercase text-slate-500">
|
|
<tr>
|
|
<th class="px-4 py-3">Name</th>
|
|
<th class="px-4 py-3">Code</th>
|
|
<th class="px-4 py-3">Department</th>
|
|
<th class="px-4 py-3">Status</th>
|
|
<th class="px-4 py-3"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="divide-y divide-slate-50">
|
|
@forelse ($employees as $employee)
|
|
@php
|
|
$presence = $employee->presence;
|
|
$status = $presence?->status ?? 'off_site';
|
|
$statusLabel = config('frontdesk.employee_presence_statuses.'.$status, $status);
|
|
@endphp
|
|
<tr>
|
|
<td class="px-4 py-3 font-medium">{{ $employee->full_name }}</td>
|
|
<td class="px-4 py-3 font-mono text-slate-600">{{ $employee->employee_code }}</td>
|
|
<td class="px-4 py-3 text-slate-600">{{ $employee->department ?? '—' }}</td>
|
|
<td class="px-4 py-3">
|
|
<span class="rounded-full px-2.5 py-0.5 text-xs font-medium
|
|
{{ $status === 'on_site' ? 'bg-emerald-50 text-emerald-700' : ($status === 'stepped_out' ? 'bg-amber-50 text-amber-800' : 'bg-slate-100 text-slate-600') }}">
|
|
{{ $statusLabel }}
|
|
</span>
|
|
@if ($presence?->destination)
|
|
<span class="mt-0.5 block text-xs text-slate-400">{{ $presence->destination }}</span>
|
|
@endif
|
|
</td>
|
|
<td class="px-4 py-3 text-right">
|
|
<a href="{{ route('frontdesk.employees.badge', $employee) }}" target="_blank" class="text-sm text-slate-600">Badge</a>
|
|
<a href="{{ route('frontdesk.employees.edit', $employee) }}" class="ml-3 text-sm text-indigo-600">Edit</a>
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="5" class="px-4 py-8 text-center text-slate-400">No employees yet. Add staff who will sign in at the kiosk.</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
@if ($employees->hasPages())
|
|
<div class="border-t border-slate-100 px-5 py-3">{{ $employees->links() }}</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</x-app-layout>
|