Add self-service kiosk for queue ticket issuance.
Deploy Ladill Queue / deploy (push) Successful in 36s
Deploy Ladill Queue / deploy (push) Successful in 36s
Customers can pick a service, optionally enter details, and receive a ticket on a branded touchscreen flow with admin-configurable queues and auto-reset. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,19 +1,89 @@
|
||||
<x-app-layout title="Register device">
|
||||
<div class="mx-auto max-w-lg">
|
||||
<form method="POST" action="{{ route('qms.devices.store') }}" class="space-y-4 rounded-2xl border bg-white p-6">
|
||||
<form
|
||||
method="POST"
|
||||
action="{{ route('qms.devices.store') }}"
|
||||
class="space-y-4 rounded-2xl border bg-white p-6"
|
||||
x-data="{ type: '{{ old('type', 'kiosk') }}' }"
|
||||
>
|
||||
@csrf
|
||||
<div><label class="block text-sm font-medium">Name</label><input name="name" required class="mt-1 w-full rounded-lg border-slate-300 text-sm"></div>
|
||||
<div><label class="block text-sm font-medium">Type</label>
|
||||
<select name="type" class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
@foreach ($deviceTypes as $k => $v)<option value="{{ $k }}">{{ $v }}</option>@endforeach
|
||||
<div>
|
||||
<label class="block text-sm font-medium">Name</label>
|
||||
<input name="name" value="{{ old('name') }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium">Type</label>
|
||||
<select name="type" x-model="type" class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
@foreach ($deviceTypes as $k => $v)
|
||||
<option value="{{ $k }}" @selected(old('type', 'kiosk') === $k)>{{ $v }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div><label class="block text-sm font-medium">Branch</label>
|
||||
<div>
|
||||
<label class="block text-sm font-medium">Branch</label>
|
||||
<select name="branch_id" class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
<option value="">—</option>
|
||||
@foreach ($branches as $b)<option value="{{ $b->id }}">{{ $b->name }}</option>@endforeach
|
||||
@foreach ($branches as $b)
|
||||
<option value="{{ $b->id }}" @selected((string) old('branch_id') === (string) $b->id)>{{ $b->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<p class="mt-1 text-xs text-slate-500">Optional. Limits which queues appear on this kiosk.</p>
|
||||
</div>
|
||||
|
||||
<div x-show="type === 'kiosk'" x-cloak class="space-y-4 rounded-xl border border-slate-200 bg-slate-50 p-4">
|
||||
<div>
|
||||
<p class="text-sm font-medium text-slate-900">Kiosk queues</p>
|
||||
<p class="mt-1 text-xs text-slate-500">Leave unchecked to show all active queues for the branch.</p>
|
||||
<div class="mt-3 space-y-2">
|
||||
@foreach ($queues as $q)
|
||||
<label class="flex gap-2 text-sm text-slate-700">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="queue_ids[]"
|
||||
value="{{ $q->id }}"
|
||||
@checked(in_array($q->id, old('queue_ids', [])))
|
||||
>
|
||||
{{ $q->name }}
|
||||
</label>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium">Welcome message</label>
|
||||
<input
|
||||
name="welcome_message"
|
||||
value="{{ old('welcome_message') }}"
|
||||
class="mt-1 w-full rounded-lg border-slate-300 text-sm"
|
||||
placeholder="Tap a service below to get your ticket"
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-3 sm:grid-cols-2">
|
||||
<label class="flex items-center gap-2 text-sm">
|
||||
<input type="checkbox" name="collect_name" value="1" @checked(old('collect_name'))>
|
||||
Ask for name
|
||||
</label>
|
||||
<label class="flex items-center gap-2 text-sm">
|
||||
<input type="checkbox" name="collect_phone" value="1" @checked(old('collect_phone'))>
|
||||
Ask for phone
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium">Auto-reset (seconds)</label>
|
||||
<input
|
||||
type="number"
|
||||
name="reset_seconds"
|
||||
min="5"
|
||||
max="120"
|
||||
value="{{ old('reset_seconds', 15) }}"
|
||||
class="mt-1 w-full rounded-lg border-slate-300 text-sm"
|
||||
>
|
||||
<p class="mt-1 text-xs text-slate-500">Return to the welcome screen after a ticket is issued.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn-primary w-full">Register</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user