diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php new file mode 100644 index 0000000..b0b7571 --- /dev/null +++ b/app/Http/Controllers/ClientController.php @@ -0,0 +1,19 @@ + $clients]); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php deleted file mode 100644 index 35b238c..0000000 --- a/app/Http/Controllers/UserController.php +++ /dev/null @@ -1,18 +0,0 @@ - $users]); - } -} diff --git a/app/Livewire/Forms/ClientForm.php b/app/Livewire/Forms/ClientForm.php index 2a8c0d0..e6f4801 100644 --- a/app/Livewire/Forms/ClientForm.php +++ b/app/Livewire/Forms/ClientForm.php @@ -2,6 +2,7 @@ namespace App\Livewire\Forms; +use Livewire\Attributes\Validate; use Livewire\Form; use App\Models\Client; @@ -46,7 +47,7 @@ public function rules() 'client_name' => 'required|string|max:255', 'legal_name' => 'required|string|max:255', 'cnpj' => 'required|string|max:20|unique:clients,cnpj', - 'profile_image_path' => 'nullable|file|mimes:jpeg,png,bmp,gif,svg,webp|max:2048', // 2MB Max 'pbx_hosting' => 'nullable|string|max:255', + 'profile_image_path' => 'nullable|file|mimes:jpeg,png,bmp,gif,svg,webp|max:2048', 'activation_date' => 'nullable|date', 'carrier' => 'nullable|string|max:255', 'access_type' => 'nullable|string|max:255', diff --git a/app/View/Components/SessionMessages.php b/app/View/Components/SessionMessages.php new file mode 100644 index 0000000..19e5006 --- /dev/null +++ b/app/View/Components/SessionMessages.php @@ -0,0 +1,26 @@ + 'inglinesystemsadmin@inglinesystems.com.br', 'password' => Hash::make('*Ingline.Sys#9420%SECURITY#') ]); - - Client::factory()->create([]); } } diff --git a/resources/css/app.css b/resources/css/app.css index 5d548b8..8413264 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -28,7 +28,17 @@ @layer utilities { @layer components { - /* Estilos globais */ + /* body (Seu código, está correto) */ + body { + @apply bg-white h-screen w-screen; + background-image: url('../images/bg-primary.png'); + @apply bg-cover bg-center bg-fixed; + @apply overflow-y-auto overflow-x-hidden; + } + + /*End body */ + + /* Estilos globais (Seu código) */ h1 { @apply text-black font-semibold; @apply border-b border-blue-500 rounded-md shadow-md shadow-blue-400; @@ -39,58 +49,142 @@ @layer components { /* Fim estilos globais */ - /* body */ - body { - @apply bg-white h-screen w-screen; - background-image: url('../images/bg-primary.png'); - @apply bg-cover bg-center bg-fixed; - @apply overflow-y-auto overflow-x-hidden; + + /* --- ESTILOS DO LOGIN REFORMULADOS --- */ + + /* 1. Container de Centralização */ + .container-form { + @apply w-full min-h-screen mx-auto; + /* Garante altura total */ + @apply flex justify-center items-center p-4; } - /*End body */ + /* 2. O Card de Login "Vidro Fosco" */ + .form-class { + @apply w-full max-w-md; + /* Tamanho responsivo */ + @apply p-8; + /* O EFEITO "VIDRO FOSCO" */ + @apply bg-white/20 backdrop-blur-lg; + /* Fundo 20% opaco + Borrão */ + @apply rounded-xl shadow-2xl; + @apply border border-white/10; + /* Borda sutil */ + } - /* Container */ + /* 3. A Logo */ .container-title { - @apply text-2xl absolute top-20; - @apply text-black font-semibold; - @apply border-b border-blue-500 rounded-md shadow-md shadow-blue-400; - @apply p-4 transition-all duration-300 transform hover:scale-105; + @apply flex justify-center mb-6 text-nowrap; } + .container-message { + @apply flex justify-center mb-6 text-nowrap; + } + + .container-title img { + @apply h-10; + /* Ajuste o tamanho da sua logo */ + } + + /* 4. Título ("Efetue seu login") */ + .form-title { + @apply text-2xl font-semibold text-black text-center mb-6; + } + + /* 5. Grupo de Input (Label + Campo) */ + .input-group { + @apply mb-4; + } + + .form-label { + @apply block text-sm font-medium text-gray-800 mb-1; + } + + /* 6. Inputs com Estilo "Vidro" */ + .form-input-class { + @apply w-full p-3; + @apply bg-transparent; + /* Fundo transparente */ + @apply border-b-2 border-gray-200; + /* Apenas borda inferior */ + @apply text-gray-500 placeholder-white/70; + @apply focus:outline-none focus:ring-0; + @apply focus:border-white; + /* Borda fica branca sólida no foco */ + @apply transition-all duration-300; + } + + /* Remove o fundo de preenchimento automático do navegador */ + .form-input-class:-webkit-autofill { + -webkit-text-fill-color: #0f0e0e !important; + -webkit-box-shadow: 0 0 0 1000px rgba(255, 255, 255, 0.1) inset !important; + transition: background-color 5000s ease-in-out 0s; + } + + + /* 7. Botão Principal */ + .form-button-class { + @apply w-full; + /* Botão com largura total */ + @apply bg-blue-600 text-white rounded-md p-3; + @apply font-semibold text-base; + @apply cursor-pointer; + @apply hover:bg-blue-700; + @apply transition-all duration-300 transform hover:scale-105; + } + + /* 8. Link "Esqueceu a senha" */ + .forget-password { + @apply text-center mt-4; + } + + .forget-password a { + @apply text-sm text-white/80 hover:text-white hover:underline; + @apply transition-colors; + } + + /* 9. Estilizando as mensagens de erro (x-session-messages) */ + .messages { + @apply flex justify-center mb-4; + } + + .messages div[role="alert"] { + /* Assumindo que seu componente renderiza um div */ + @apply bg-red-500/50 text-white p-3 rounded-md border border-red-700 text-sm; + } + + /* --- FIM DOS ESTILOS DE LOGIN --- */ + + /* 9. Estilizando as mensagens de erro (x-session-messages) */ + .messages { + @apply flex justify-center mb-4; + + /* 1. MUDANÇA: Usando "vidro branco" (como o card) + em vez de "vidro vermelho". + */ + @apply bg-white/10 backdrop-blur-md; + /* 'md' para um borrão mais forte */ + + /* 2. MUDANÇA: Borda sutil de "vidro" */ + @apply border border-white/10; + + /* 3. NOVO: Sombra para "flutuar" */ + @apply shadow-lg rounded-lg; + + /* 4. MUDANÇA: A cor do erro agora está no texto. + 'text-red-200' (ou 300) tem ótimo contraste + no fundo de ondas. + */ + @apply text-red-300 font-semibold p-4 text-sm; + } + + /* Classes antigas genéricas (podem ser usadas em outros lugares) */ .container { /* Deixe APENAS as classes de largura, margem e padding */ @apply w-full mx-auto px-4 sm:px-6 lg:px-8 mt-15 mb-10; } - .container-form { - @apply w-full h-full mx-auto; - @apply flex justify-center items-center; - } - - .messages { - @apply flex justify-center; - } - - .form-class { - @apply flex flex-col gap-4 p-3; - @apply mb-10 w-1/5; - } - - .form-input-class { - @apply border border-gray-300 rounded-md p-2 outline-none; - } - - .form-button-class { - @apply bg-blue-500 text-white rounded-md p-2 cursor-pointer hover:bg-blue-800 w-1/2; - } - - .forget-password { - @apply flex justify-center w-1/2; - @apply shadow-lg rounded-md; - @apply transition scale-80 hover:scale-95; - } - .container h1 { @apply text-2xl font-bold transition-all duration-300 transform hover:scale-105 mb-4; } diff --git a/resources/images/favicon.png b/resources/images/favicon.png new file mode 100644 index 0000000..2d6cf14 Binary files /dev/null and b/resources/images/favicon.png differ diff --git a/resources/js/app.js b/resources/js/app.js index 75aab97..98acbd7 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1,7 +1,7 @@ import './bootstrap'; function showContainerTitle() { - const containerTitle = document.querySelector('.container-title'); + const containerTitle = document.querySelector('.container-message'); const containerTitleText = 'Bem vindo ao painel administrativo da Ingline Systems!'; const containerTitleLength = containerTitleText.length; let text = ''; diff --git a/resources/views/components/session-messages.blade.php b/resources/views/components/session-messages.blade.php new file mode 100644 index 0000000..588992d --- /dev/null +++ b/resources/views/components/session-messages.blade.php @@ -0,0 +1,10 @@ +
+
+ + {{-- 1. O @if garante que este bloco (incluindo o 'div') só será renderizado se houver um erro. --}} + @if ($errors->any() || session('error')) + {{-- 2. Adicionamos o 'role="alert"'. O seu CSS (em .messages div[role="alert"]) agora vai aplicar o estilo "vidro vermelho" aqui. --}} + @if ($errors->any()) {{ $errors->first() }} @endif @if (session('error')) {{ session('error') }} @endif + @endif +
+
\ No newline at end of file diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index fd9e7e7..0919ae8 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -1,120 +1,120 @@ @extends('layouts.app') @section('content') - - - + + + -
+
-
-
-
- Avatar do Cliente -
-
- - - -
+
+
+
+ Avatar do Cliente
-
- Cliente 1 +
- -
-
-
- Avatar do Cliente -
-
- - - -
-
-
- Cliente 2 -
+
+ Cliente 1
- -
-
-
- Avatar do Cliente -
-
- - - -
-
-
- Cliente 3 -
-
- -
-
-
- Avatar do Cliente -
-
- - - -
-
-
- Cliente 4 -
-
-
+
+
+
+ Avatar do Cliente +
+
+ + + +
+
+
+ Cliente 2 +
+
+ +
+
+
+ Avatar do Cliente +
+
+ + + +
+
+
+ Cliente 3 +
+
+ +
+
+
+ Avatar do Cliente +
+
+ + + +
+
+
+ Cliente 4 +
+
+ +
+ @endsection \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 8eeda8c..7801ffc 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -9,6 +9,7 @@ + @vite(['resources/css/app.css', 'resources/js/app.js']) @livewireStyles @@ -18,68 +19,68 @@ diff --git a/resources/views/login.blade.php b/resources/views/login.blade.php index 6bdba26..7e23755 100644 --- a/resources/views/login.blade.php +++ b/resources/views/login.blade.php @@ -2,44 +2,57 @@ @section('title', 'Login') @section('content') +
-
- -
+
- -
-

Efetue seu login

-
- - -
- @if ($errors->any()) -
- {{ $errors->first() }} -
- @endif - - @if (session('error')) -
- {{ session('error') }} -
- - @endif -
- @csrf - - -
+ + +
+ + Ingline Logo + +
+ +
+ +
+ + +

+ Efetue seu login +

+ + + + + +
+ + +
+ +
+ + +
+ + +
-
- + + diff --git a/routes/web.php b/routes/web.php index 8392538..f09d329 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,15 +1,13 @@ group(function () { //Rotas LinePBX. @@ -17,7 +15,7 @@ Route::middleware(['auth'])->group(function () { - Route::controller(UserController::class)->group(function () { + Route::controller(ClientController::class)->group(function () { Route::get('/dashboard', 'dashboard')->name('dashboard'); Route::post('/create-users', 'createUsers')->name('users.create')->middleware('authorization'); }); @@ -25,14 +23,13 @@ Route::controller(LogoutController::class)->group(function () { Route::post('/logout', [LogoutController::class, 'logout'])->name('logout'); }); - - // Route::get('/add-client', function () { - // return view('clients.add-client'); - // })->name('clients.add')->middleware('authorization'); }); Route::controller(LoginController::class)->group(function () { Route::get('/login', function () { + if (Auth::check()) { + return redirect('dashboard', 302); + } return view('login'); })->name('login'); Route::post('/login', [LoginController::class, 'login'])->name('login-post');