users menu listing

This commit is contained in:
Mark Gregory
2026-08-26 08:01:49 +01:00
parent 6f8d0c7abf
commit 7dc31371f6
29 changed files with 779 additions and 669 deletions
@@ -0,0 +1,20 @@
<x-layouts::app :title="__('Create User')">
<div class="hd-page-shell space-y-5">
<section class="hd-page-hero"><div><div class="hd-eyebrow">User administration</div><h1>Create user</h1><p>Create a Helpdesk account and assign its access level.</p></div><a class="hd-action" href="{{ route('user-management.index') }}">Back</a></section>
@if($errors->any())<div class="hd-alert hd-alert-danger"><ul>@foreach($errors->all() as $error)<li>{{ $error }}</li>@endforeach</ul></div>@endif
<form method="POST" action="{{ route('user-management.store') }}" class="hd-panel p-6 space-y-6">@csrf
<div class="hd-form-grid">
<label class="hd-field"><span>Name</span><input name="name" value="{{ old('name', $user->name ?? '') }}" required></label>
<label class="hd-field"><span>Email</span><input type="email" name="email" value="{{ old('email', $user->email ?? '') }}" required></label>
<label class="hd-field"><span>Password {{ isset($user) ? '(leave blank to keep current)' : '' }}</span><input type="password" name="password" {{ isset($user) ? '' : 'required' }}></label>
<label class="hd-field"><span>Confirm password</span><input type="password" name="password_confirmation" {{ isset($user) ? '' : 'required' }}></label>
</div>
<div class="hd-role-options">
<label><input type="checkbox" name="helpdesk_agent" value="1" @checked(old('helpdesk_agent', $user->helpdesk_agent ?? false))> <span><strong>Helpdesk agent</strong><small>Can manage tickets and workflow.</small></span></label>
<label><input type="checkbox" name="helpdesk_admin" value="1" @checked(old('helpdesk_admin', $user->helpdesk_admin ?? false))> <span><strong>Administrator</strong><small>Full Helpdesk, settings and user administration.</small></span></label>
</div>
<div class="flex justify-end"><button class="hd-action hd-action-green" type="submit"><i class="fa-solid fa-floppy-disk"></i> Create user</button></div></form>
</div>
</x-layouts::app>
@@ -0,0 +1,22 @@
<x-layouts::app :title="__('Edit User')">
<div class="hd-page-shell space-y-5">
<section class="hd-page-hero"><div><div class="hd-eyebrow">User administration</div><h1>Edit {{ $user->name }}</h1><p>Update identity and Helpdesk access.</p></div><a class="hd-action" href="{{ route('user-management.index') }}">Back</a></section>
@if(session('status'))<div class="hd-alert hd-alert-success">{{ session('status') }}</div>@endif
@if($errors->any())<div class="hd-alert hd-alert-danger"><ul>@foreach($errors->all() as $error)<li>{{ $error }}</li>@endforeach</ul></div>@endif
<form method="POST" action="{{ route('user-management.update', $user) }}" class="hd-panel p-6 space-y-6">@csrf @method('PUT')
<div class="hd-form-grid">
<label class="hd-field"><span>Name</span><input name="name" value="{{ old('name', $user->name ?? '') }}" required></label>
<label class="hd-field"><span>Email</span><input type="email" name="email" value="{{ old('email', $user->email ?? '') }}" required></label>
<label class="hd-field"><span>Password {{ isset($user) ? '(leave blank to keep current)' : '' }}</span><input type="password" name="password" {{ isset($user) ? '' : 'required' }}></label>
<label class="hd-field"><span>Confirm password</span><input type="password" name="password_confirmation" {{ isset($user) ? '' : 'required' }}></label>
</div>
<div class="hd-role-options">
<label><input type="checkbox" name="helpdesk_agent" value="1" @checked(old('helpdesk_agent', $user->helpdesk_agent ?? false))> <span><strong>Helpdesk agent</strong><small>Can manage tickets and workflow.</small></span></label>
<label><input type="checkbox" name="helpdesk_admin" value="1" @checked(old('helpdesk_admin', $user->helpdesk_admin ?? false))> <span><strong>Administrator</strong><small>Full Helpdesk, settings and user administration.</small></span></label>
</div>
<div class="flex flex-wrap justify-between gap-3"><div></div><button class="hd-action hd-action-blue" type="submit"><i class="fa-solid fa-floppy-disk"></i> Save changes</button></div></form>
@if(auth()->id() !== $user->id)<form method="POST" action="{{ route('user-management.destroy', $user) }}" onsubmit="return confirm('Delete this user?')">@csrf @method('DELETE')<button class="hd-action hd-action-red" type="submit">Delete user</button></form>@endif
</div>
</x-layouts::app>
@@ -0,0 +1,61 @@
<x-layouts::app :title="__('Users')">
<div class="hd-page-shell space-y-5">
<section class="hd-page-hero">
<div>
<div class="hd-eyebrow">Administration</div>
<h1>Users</h1>
<p>Manage Helpdesk users, administrators and agents.</p>
</div>
<a href="{{ route('user-management.create') }}" class="hd-action hd-action-green">
<i class="fa-solid fa-user-plus"></i> New user
</a>
</section>
@if (session('status'))
<div class="hd-alert hd-alert-success">{{ session('status') }}</div>
@endif
<section class="hd-panel">
<form method="GET" class="hd-toolbar">
<div class="hd-search-field">
<i class="fa-solid fa-magnifying-glass"></i>
<input name="search" value="{{ $search }}" placeholder="Search users by name or email">
</div>
<button class="hd-action hd-action-blue" type="submit">Search</button>
</form>
<div class="hd-table-wrap">
<table class="hd-table">
<thead><tr><th>User</th><th>Email</th><th>Role</th><th>Verified</th><th class="text-right">Actions</th></tr></thead>
<tbody>
@forelse($users as $user)
<tr>
<td>
<div class="flex items-center gap-3">
<span class="hd-user-avatar">{{ $user->initials() }}</span>
<span class="font-semibold">{{ $user->name }}</span>
</div>
</td>
<td>{{ $user->email }}</td>
<td>
@if($user->helpdesk_admin)
<span class="hd-role-pill hd-role-admin">Administrator</span>
@elseif($user->helpdesk_agent)
<span class="hd-role-pill hd-role-agent">Agent</span>
@else
<span class="hd-role-pill">User</span>
@endif
</td>
<td>{{ $user->email_verified_at ? 'Yes' : 'No' }}</td>
<td class="text-right"><a class="hd-action hd-action-blue hd-action-sm" href="{{ route('user-management.edit', $user) }}">Edit</a></td>
</tr>
@empty
<tr><td colspan="5" class="text-center text-zinc-500">No users found.</td></tr>
@endforelse
</tbody>
</table>
</div>
<div class="p-4">{{ $users->links() }}</div>
</section>
</div>
</x-layouts::app>
@@ -0,0 +1,10 @@
<x-layouts::app :title="__('Roles & Permissions')">
<div class="hd-page-shell space-y-5">
<section class="hd-page-hero"><div><div class="hd-eyebrow">Administration</div><h1>Roles & permissions</h1><p>Helpdesk uses three clear access levels.</p></div></section>
<div class="grid gap-4 lg:grid-cols-3">
<article class="hd-role-card hd-role-card-admin"><i class="fa-solid fa-shield-halved"></i><h2>Administrator</h2><strong>{{ $counts['admins'] }}</strong><p>Full tickets, settings, documentation and user management access.</p></article>
<article class="hd-role-card hd-role-card-agent"><i class="fa-solid fa-headset"></i><h2>Agent</h2><strong>{{ $counts['agents'] }}</strong><p>Can work tickets, Kanban workflow and support operations.</p></article>
<article class="hd-role-card"><i class="fa-solid fa-user"></i><h2>User</h2><strong>{{ $counts['users'] }}</strong><p>Standard authenticated requester access.</p></article>
</div>
</div>
</x-layouts::app>