feat(user-view): add Details (Ficha) tab as default with basic info + access validity
New 'Ficha' tab (first, default) on the user view: basic info card (name/username/email/phone/address/member since) plus the 'Validez de acceso' card and the Empresa card, moved here from the Permissions tab. The Permissions tab now focuses on roles + the direct-permissions form. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@ use Spatie\Permission\PermissionRegistrar;
|
||||
class UserView extends Component
|
||||
{
|
||||
public User $user;
|
||||
public string $activeTab = 'permissions';
|
||||
public string $activeTab = 'ficha';
|
||||
|
||||
// Projects tab
|
||||
public ?int $addProjectId = null;
|
||||
|
||||
@@ -131,6 +131,11 @@
|
||||
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 space-y-4">
|
||||
|
||||
<div role="tablist" class="tabs tabs-bordered gap-4">
|
||||
<button role="tab" wire:click="setTab('ficha')"
|
||||
class="tab gap-2 {{ $activeTab === 'ficha' ? 'tab-active font-semibold' : '' }}">
|
||||
<x-heroicon-o-identification class="w-4 h-4" />
|
||||
Ficha
|
||||
</button>
|
||||
<button role="tab" wire:click="setTab('permissions')"
|
||||
class="tab gap-2 {{ $activeTab === 'permissions' ? 'tab-active font-semibold' : '' }}">
|
||||
<x-heroicon-o-shield-check class="w-4 h-4" />
|
||||
@@ -158,31 +163,44 @@
|
||||
</div>
|
||||
|
||||
{{-- ════════════════════════════════════════════════════════════════════
|
||||
TAB: PERMISOS
|
||||
TAB: FICHA
|
||||
════════════════════════════════════════════════════════════════════ --}}
|
||||
@if($activeTab === 'permissions')
|
||||
@if($activeTab === 'ficha')
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
|
||||
{{-- Roles --}}
|
||||
{{-- Información básica --}}
|
||||
<div class="card bg-base-100 shadow">
|
||||
<div class="card-body p-6">
|
||||
<h3 class="font-semibold text-base flex items-center gap-2 mb-4">
|
||||
<x-heroicon-o-shield-check class="w-5 h-5 text-primary" />
|
||||
Roles asignados
|
||||
<x-heroicon-o-identification class="w-5 h-5 text-primary" />
|
||||
Información básica
|
||||
</h3>
|
||||
@if($user->roles->isEmpty())
|
||||
<p class="text-sm text-gray-400">Sin roles asignados.</p>
|
||||
@else
|
||||
<div class="space-y-2">
|
||||
@foreach($user->roles as $role)
|
||||
<div class="flex items-center gap-3 p-3 bg-base-200 rounded-lg">
|
||||
<span class="badge {{ $role->name === 'Admin' ? 'badge-error' : 'badge-primary' }} badge-lg">
|
||||
{{ $role->name }}
|
||||
</span>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="space-y-1 text-sm">
|
||||
<div class="flex justify-between gap-4 py-2 border-b border-base-200">
|
||||
<span class="text-gray-500">Nombre</span>
|
||||
<span class="font-medium text-right">{{ trim(($user->title ? $user->title.' ' : '').($user->first_name ?? '').' '.($user->last_name ?? '')) ?: $user->name }}</span>
|
||||
</div>
|
||||
@endif
|
||||
<div class="flex justify-between gap-4 py-2 border-b border-base-200">
|
||||
<span class="text-gray-500">Usuario</span>
|
||||
<span class="font-medium text-right">{{ $user->name }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between gap-4 py-2 border-b border-base-200">
|
||||
<span class="text-gray-500">Email</span>
|
||||
<span class="font-medium text-right">{{ $user->email }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between gap-4 py-2 border-b border-base-200">
|
||||
<span class="text-gray-500">Teléfono</span>
|
||||
<span class="font-medium text-right">{{ $user->phone ?: '—' }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between gap-4 py-2 border-b border-base-200">
|
||||
<span class="text-gray-500">Dirección</span>
|
||||
<span class="font-medium text-right">{{ $user->address ?: '—' }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between gap-4 py-2">
|
||||
<span class="text-gray-500">Miembro desde</span>
|
||||
<span class="font-medium text-right">{{ $user->created_at?->format('d/m/Y') ?? '—' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -270,6 +288,38 @@
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{-- ════════════════════════════════════════════════════════════════════
|
||||
TAB: PERMISOS
|
||||
════════════════════════════════════════════════════════════════════ --}}
|
||||
@if($activeTab === 'permissions')
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
|
||||
{{-- Roles --}}
|
||||
<div class="card bg-base-100 shadow">
|
||||
<div class="card-body p-6">
|
||||
<h3 class="font-semibold text-base flex items-center gap-2 mb-4">
|
||||
<x-heroicon-o-shield-check class="w-5 h-5 text-primary" />
|
||||
Roles asignados
|
||||
</h3>
|
||||
@if($user->roles->isEmpty())
|
||||
<p class="text-sm text-gray-400">Sin roles asignados.</p>
|
||||
@else
|
||||
<div class="space-y-2">
|
||||
@foreach($user->roles as $role)
|
||||
<div class="flex items-center gap-3 p-3 bg-base-200 rounded-lg">
|
||||
<span class="badge {{ $role->name === 'Admin' ? 'badge-error' : 'badge-primary' }} badge-lg">
|
||||
{{ $role->name }}
|
||||
</span>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Permisos directos del usuario --}}
|
||||
<div class="card bg-base-100 shadow md:col-span-2">
|
||||
<div class="card-body p-6">
|
||||
|
||||
Reference in New Issue
Block a user