feat: Validação de dados no modal para edição de usuários.

This commit is contained in:
LukiBeg 2025-11-25 11:35:54 -03:00
parent 765cf2bfa5
commit 9141763f22
6 changed files with 16 additions and 31 deletions

View File

@ -23,6 +23,9 @@ public function login(Request $request)
] ]
); );
$request->flashOnly(['email']);
$teste = $request->old('email');
if (!Auth::attempt($validated)) { if (!Auth::attempt($validated)) {
return redirect()->route('login', status: 302)->with('error', 'Credenciais inválidas'); return redirect()->route('login', status: 302)->with('error', 'Credenciais inválidas');
} }

View File

@ -41,6 +41,7 @@ public function editUser(UserService $userService)
$this->dispatch('notify', message: $this->userForm->name . ' atualizado com sucesso!'); $this->dispatch('notify', message: $this->userForm->name . ' atualizado com sucesso!');
} catch (\Exception $e) { } catch (\Exception $e) {
$this->dispatch('notify', message: 'Falha na edição: ' . $e->getMessage(), type: 'error'); $this->dispatch('notify', message: 'Falha na edição: ' . $e->getMessage(), type: 'error');
// $this->addError('general', $e->getMessage());
} }
} }
public function render() public function render()

View File

@ -8,8 +8,6 @@
class UserForm extends Form class UserForm extends Form
{ {
public string $name = ''; public string $name = '';
public string $email = ''; public string $email = '';
public string $password = ''; public string $password = '';
@ -28,7 +26,7 @@ public function editUser(User $user)
protected $rules = [ protected $rules = [
'name' => 'required|string|max:255', 'name' => 'required|string|max:255',
'email' => 'email|unique:users,email', 'email' => 'required|email',
'password' => 'string|min:8', 'password' => 'string|min:8',
'password_confirm' => 'string|same:password', 'password_confirm' => 'string|same:password',
'permissions' => 'required|string|in:user,admin' 'permissions' => 'required|string|in:user,admin'
@ -37,7 +35,6 @@ public function editUser(User $user)
protected $messages = [ protected $messages = [
'name' => 'Nome precisa ser informado.', 'name' => 'Nome precisa ser informado.',
'email' => 'O email precisa ser informado.', 'email' => 'O email precisa ser informado.',
'email.unique' => 'O email informado já foi cadastrado anteriormente.',
'password' => 'A senha precisa ter 8 ou mais caracteres.', 'password' => 'A senha precisa ter 8 ou mais caracteres.',
'password_confirm' => 'As senhas não coincidem.', 'password_confirm' => 'As senhas não coincidem.',
'permissions' => 'Escolha o nível de autorização do usuário.' 'permissions' => 'Escolha o nível de autorização do usuário.'

View File

@ -3,12 +3,12 @@
@section('content') @section('content')
<livewire:admin.user.create-user /> <livewire:admin.user.create-user />
<livewire:admin.client.edit-client />
<livewire:admin.user.edit-user />
<livewire:admin.client.add-client /> <livewire:admin.client.add-client />
<livewire:admin.user.delete-user> <livewire:admin.user.delete-user>
<livewire:admin.show-users /> <livewire:admin.show-users />
<livewire:admin.client.delete-client /> <livewire:admin.client.delete-client />
<x-are-you-sure /> <x-are-you-sure />
<livewire:show-client /> <livewire:show-client />
<livewire:admin.client.edit-client />
<livewire:admin.user.edit-user />
@endsection @endsection

View File

@ -13,34 +13,34 @@
<form wire:submit.prevent="editUser" class="form-wrapper"> <form wire:submit.prevent="editUser" class="form-wrapper">
@error('general') @error('general')
<div class="error-box"> <div class="error-box">
<strong>Erro:</strong> {{ $message }} <strong>Erro:</strong> {{ $message }}
</div> </div>
@enderror @enderror
<div> <div>
<label for="name" class="form-label">Nome</label> <label for="name" class="form-label">Nome</label>
<input type="text" wire:model.defer="userForm.name" id="name" class="form-input"> <input type="text" wire:model.defer="userForm.name" id="name" class="form-input">
@error('name') <span class="error-text">{{ $message }}</span> @enderror @error('userForm.name') <span class="error-text">{{ $message }}</span> @enderror
</div> </div>
<div> <div>
<label for="email" class="form-label">Email</label> <label for="email" class="form-label">Email</label>
<input type="email" wire:model.defer="userForm.email" id="email" class="form-input"> <input type="email" wire:model.defer="userForm.email" id="email" class="form-input">
@error('email') <span class="error-text">{{ $message }}</span> @enderror @error('userForm.email') <span class="error-text">{{ $message }}</span> @enderror
</div> </div>
<div> <div>
<label for="password" class="form-label">Senha</label> <label for="password" class="form-label">Senha</label>
<input type="password" wire:model.defer="userForm.password" id="password" class="form-input"> <input type="password" wire:model.defer="userForm.password" id="password" class="form-input">
@error('password') <span class="error-text">{{ $message }}</span> @enderror @error('userForm.password') <span class="error-text">{{ $message }}</span> @enderror
</div> </div>
<div> <div>
<label for="password_confirm" class="form-label">Confirmar Senha</label> <label for="password_confirm" class="form-label">Confirmar Senha</label>
<input type="password" wire:model="userForm.password_confirm" id="password_confirm" <input type="password" wire:model="userForm.password_confirm" id="password_confirm"
class="form-input"> class="form-input">
@error('password_confirm') <span class="error-text">{{ $message }}</span> @enderror @error('userForm.password_confirm') <span class="error-text">{{ $message }}</span> @enderror
</div> </div>
<div> <div>
@ -97,7 +97,7 @@ class="absolute inset-y-0 left-0 flex items-center pl-3 text-blue-600">
</div> </div>
</div> </div>
@error('permissions') <span class="error-text">{{ $message }}</span> @enderror @error('userForm.permissions') <span class="error-text">{{ $message }}</span> @enderror
</div> </div>
<div class="form-footer"> <div class="form-footer">

View File

@ -2,42 +2,28 @@
@section('title', 'Nexus - Login') @section('title', 'Nexus - Login')
@section('content') @section('content')
<!--
1. Container principal que centraliza o card
(Usa a classe .container-form do seu novo CSS)
-->
<div class="container-form"> <div class="container-form">
<!--
2. O Card de Login "Vidro Fosco"
(Usa a classe .form-class do seu novo CSS)
-->
<form action="{{ route('login-post') }}" class="form-class" method="POST"> <form action="{{ route('login-post') }}" class="form-class" method="POST">
@csrf @csrf
<!-- 3. A Logo (Usa .container-title) -->
<div class="container-title"> <div class="container-title">
<!-- Coloque sua nova logo aqui! -->
<img src="{{ Vite::asset('resources/images/logo.png') }}" alt="Ingline Logo" class="h-10"> <img src="{{ Vite::asset('resources/images/logo.png') }}" alt="Ingline Logo" class="h-10">
<!-- (Ajuste o src e o h-10 se necessário) -->
</div> </div>
<div class="container-message"> <div class="container-message">
</div> </div>
<!-- 4. Título (Usa .form-title) -->
<h1 class="form-title"> <h1 class="form-title">
Efetue seu login Efetue seu login
</h1> </h1>
<!-- 5. Mensagens de Sessão -->
<x-session-messages /> <x-session-messages />
<!-- 6. Grupo de Inputs (Usa .input-group, .form-label, .form-input-class) -->
<div class="input-group"> <div class="input-group">
<label for="email" class="form-label">E-mail</label> <label for="email" class="form-label">E-mail</label>
<input class="form-input-class" id="email" type="email" name="email" placeholder="seu@email.com" required> <input class="form-input-class" id="email" type="email" name="email" value="{{ old('email') }}" placeholder="suporte@provedor.com" required>
</div> </div>
<div class="input-group"> <div class="input-group">
@ -45,12 +31,10 @@
<input class="form-input-class" id="password" type="password" name="password" placeholder="••••••••" required> <input class="form-input-class" id="password" type="password" name="password" placeholder="••••••••" required>
</div> </div>
<!-- 7. Botão de Login (Usa .form-button-class) -->
<div class="mt-4"> <div class="mt-4">
<button class="form-button-class" type="submit">Login</button> <button class="form-button-class" type="submit">Login</button>
</div> </div>
<!-- 8. Link de Senha (Usa .forget-password) -->
<div class="forget-password"> <div class="forget-password">
<a href="#">Esqueceu sua senha?</a> <a href="#">Esqueceu sua senha?</a>
</div> </div>