Compare commits
No commits in common. "9fdfe719097bf1a4b1c3dfc8de29752e7f79da17" and "0518c06ebe32967e409a17db3306e0402f977813" have entirely different histories.
9fdfe71909
...
0518c06ebe
|
|
@ -1,19 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use App\Models\Client;
|
|
||||||
use App\Services\ClientService;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
use Illuminate\Contracts\View\View;
|
|
||||||
|
|
||||||
class ClientController extends Controller
|
|
||||||
{
|
|
||||||
public function __construct(ClientService $userService) {}
|
|
||||||
public function dashboard(Request $request): View
|
|
||||||
{
|
|
||||||
$clients = Client::all();
|
|
||||||
return view('dashboard', ['clients' => $clients]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Services\UserService;
|
||||||
|
use Illuminate\Contracts\View\View;
|
||||||
|
|
||||||
|
class UserController extends Controller
|
||||||
|
{
|
||||||
|
public function __construct(UserService $userService) {}
|
||||||
|
public function dashboard(Request $request): View
|
||||||
|
{
|
||||||
|
$users = User::all();
|
||||||
|
return view('dashboard', ['users' => $users]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
namespace App\Livewire\Forms;
|
namespace App\Livewire\Forms;
|
||||||
|
|
||||||
use Livewire\Attributes\Validate;
|
|
||||||
use Livewire\Form;
|
use Livewire\Form;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
|
|
||||||
|
|
@ -47,7 +46,7 @@ public function rules()
|
||||||
'client_name' => 'required|string|max:255',
|
'client_name' => 'required|string|max:255',
|
||||||
'legal_name' => 'required|string|max:255',
|
'legal_name' => 'required|string|max:255',
|
||||||
'cnpj' => 'required|string|max:20|unique:clients,cnpj',
|
'cnpj' => 'required|string|max:20|unique:clients,cnpj',
|
||||||
'profile_image_path' => 'nullable|file|mimes:jpeg,png,bmp,gif,svg,webp|max:2048',
|
'profile_image_path' => 'nullable|file|mimes:jpeg,png,bmp,gif,svg,webp|max:2048', // 2MB Max 'pbx_hosting' => 'nullable|string|max:255',
|
||||||
'activation_date' => 'nullable|date',
|
'activation_date' => 'nullable|date',
|
||||||
'carrier' => 'nullable|string|max:255',
|
'carrier' => 'nullable|string|max:255',
|
||||||
'access_type' => 'nullable|string|max:255',
|
'access_type' => 'nullable|string|max:255',
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\View\Components;
|
|
||||||
|
|
||||||
use Closure;
|
|
||||||
use Illuminate\Contracts\View\View;
|
|
||||||
use Illuminate\View\Component;
|
|
||||||
|
|
||||||
class SessionMessages extends Component
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Create a new component instance.
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the view / contents that represent the component.
|
|
||||||
*/
|
|
||||||
public function render(): View|Closure|string
|
|
||||||
{
|
|
||||||
return view('components.session-messages');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Models\Client;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
@ -20,5 +21,7 @@ public function run(): void
|
||||||
'email' => 'inglinesystemsadmin@inglinesystems.com.br',
|
'email' => 'inglinesystemsadmin@inglinesystems.com.br',
|
||||||
'password' => Hash::make('*Ingline.Sys#9420%SECURITY#')
|
'password' => Hash::make('*Ingline.Sys#9420%SECURITY#')
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
Client::factory()->create([]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,17 +28,7 @@ @layer utilities {
|
||||||
|
|
||||||
@layer components {
|
@layer components {
|
||||||
|
|
||||||
/* body (Seu código, está correto) */
|
/* Estilos globais */
|
||||||
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 {
|
h1 {
|
||||||
@apply text-black font-semibold;
|
@apply text-black font-semibold;
|
||||||
@apply border-b border-blue-500 rounded-md shadow-md shadow-blue-400;
|
@apply border-b border-blue-500 rounded-md shadow-md shadow-blue-400;
|
||||||
|
|
@ -49,142 +39,58 @@ @layer components {
|
||||||
|
|
||||||
/* Fim estilos globais */
|
/* Fim estilos globais */
|
||||||
|
|
||||||
|
/* body */
|
||||||
/* --- ESTILOS DO LOGIN REFORMULADOS --- */
|
body {
|
||||||
|
@apply bg-white h-screen w-screen;
|
||||||
/* 1. Container de Centralização */
|
background-image: url('../images/bg-primary.png');
|
||||||
.container-form {
|
@apply bg-cover bg-center bg-fixed;
|
||||||
@apply w-full min-h-screen mx-auto;
|
@apply overflow-y-auto overflow-x-hidden;
|
||||||
/* Garante altura total */
|
|
||||||
@apply flex justify-center items-center p-4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 2. O Card de Login "Vidro Fosco" */
|
/*End body */
|
||||||
.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 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 3. A Logo */
|
/* Container */
|
||||||
.container-title {
|
.container-title {
|
||||||
@apply flex justify-center mb-6 text-nowrap;
|
@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;
|
||||||
}
|
}
|
||||||
|
|
||||||
.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 {
|
.container {
|
||||||
/* Deixe APENAS as classes de largura, margem e padding */
|
/* 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;
|
@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 {
|
.container h1 {
|
||||||
@apply text-2xl font-bold transition-all duration-300 transform hover:scale-105 mb-4;
|
@apply text-2xl font-bold transition-all duration-300 transform hover:scale-105 mb-4;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB |
|
|
@ -1,7 +1,7 @@
|
||||||
import './bootstrap';
|
import './bootstrap';
|
||||||
|
|
||||||
function showContainerTitle() {
|
function showContainerTitle() {
|
||||||
const containerTitle = document.querySelector('.container-message');
|
const containerTitle = document.querySelector('.container-title');
|
||||||
const containerTitleText = 'Bem vindo ao painel administrativo da Ingline Systems!';
|
const containerTitleText = 'Bem vindo ao painel administrativo da Ingline Systems!';
|
||||||
const containerTitleLength = containerTitleText.length;
|
const containerTitleLength = containerTitleText.length;
|
||||||
let text = '';
|
let text = '';
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
<div>
|
|
||||||
<div class="messages">
|
|
||||||
|
|
||||||
{{-- 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
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
@ -1,120 +1,120 @@
|
||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<livewire:admin.create-user />
|
<livewire:admin.create-user />
|
||||||
<livewire:admin.add-client />
|
<livewire:admin.add-client />
|
||||||
<livewire:admin.show-users />
|
<livewire:admin.show-users />
|
||||||
|
|
||||||
<div class="container grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
|
<div class="container grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
|
||||||
|
|
||||||
<div class="client-card">
|
<div class="client-card">
|
||||||
<div class="client-card-header">
|
<div class="client-card-header">
|
||||||
<div class="client-avatar">
|
<div class="client-avatar">
|
||||||
<img src="{{ Vite::asset('resources/images/mr-distribuidora.svg') }}" alt="Avatar do Cliente"
|
<img src="{{ Vite::asset('resources/images/mr-distribuidora.svg') }}" alt="Avatar do Cliente"
|
||||||
class="w-32 h-32 rounded-full object-cover">
|
class="w-32 h-32 rounded-full object-cover">
|
||||||
|
</div>
|
||||||
|
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
||||||
|
<button @click="open = !open" class="client-options-button">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
||||||
|
viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul x-show="open" class="client-options-list" x-transition>
|
||||||
|
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
||||||
|
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
||||||
|
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
<div class="client-card-name">
|
||||||
<button @click="open = !open" class="client-options-button">
|
Cliente 1
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
|
||||||
viewBox="0 0 20 20" fill="currentColor">
|
|
||||||
<path
|
|
||||||
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<ul x-show="open" class="client-options-list" x-transition>
|
|
||||||
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
|
||||||
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
|
||||||
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="client-card-name">
|
|
||||||
Cliente 1
|
<div class="client-card">
|
||||||
|
<div class="client-card-header">
|
||||||
|
<div class="client-avatar">
|
||||||
|
<img src="{{ Vite::asset('resources/images/maissaude.svg') }}" alt="Avatar do Cliente"
|
||||||
|
class="w-32 h-32 rounded-full object-cover">
|
||||||
|
</div>
|
||||||
|
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
||||||
|
<button @click="open = !open" class="client-options-button">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
||||||
|
viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul x-show="open" class="client-options-list" x-transition>
|
||||||
|
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
||||||
|
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
||||||
|
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="client-card-name">
|
||||||
|
Cliente 2
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="client-card">
|
||||||
|
<div class="client-card-header">
|
||||||
|
<div class="client-avatar">
|
||||||
|
<img src="{{ Vite::asset('resources/images/logo.png') }}" alt="Avatar do Cliente"
|
||||||
|
class="w-32 h-32 rounded-full object-cover">
|
||||||
|
</div>
|
||||||
|
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
||||||
|
<button @click="open = !open" class="client-options-button">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
||||||
|
viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul x-show="open" class="client-options-list" x-transition>
|
||||||
|
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
||||||
|
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
||||||
|
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="client-card-name">
|
||||||
|
Cliente 3
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="client-card">
|
||||||
|
<div class="client-card-header">
|
||||||
|
<div class="client-avatar">
|
||||||
|
<img src="{{ Vite::asset('resources/images/logo.png') }}" alt="Avatar do Cliente"
|
||||||
|
class="w-32 h-32 rounded-full object-cover">
|
||||||
|
</div>
|
||||||
|
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
||||||
|
<button @click="open = !open" class="client-options-button">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
||||||
|
viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul x-show="open" class="client-options-list" x-transition>
|
||||||
|
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
||||||
|
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
||||||
|
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="client-card-name">
|
||||||
|
Cliente 4
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="client-card">
|
|
||||||
<div class="client-card-header">
|
|
||||||
<div class="client-avatar">
|
|
||||||
<img src="{{ Vite::asset('resources/images/maissaude.svg') }}" alt="Avatar do Cliente"
|
|
||||||
class="w-32 h-32 rounded-full object-cover">
|
|
||||||
</div>
|
|
||||||
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
|
||||||
<button @click="open = !open" class="client-options-button">
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
|
||||||
viewBox="0 0 20 20" fill="currentColor">
|
|
||||||
<path
|
|
||||||
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<ul x-show="open" class="client-options-list" x-transition>
|
|
||||||
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
|
||||||
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
|
||||||
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="client-card-name">
|
|
||||||
Cliente 2
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="client-card">
|
|
||||||
<div class="client-card-header">
|
|
||||||
<div class="client-avatar">
|
|
||||||
<img src="{{ Vite::asset('resources/images/logo.png') }}" alt="Avatar do Cliente"
|
|
||||||
class="w-32 h-32 rounded-full object-cover">
|
|
||||||
</div>
|
|
||||||
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
|
||||||
<button @click="open = !open" class="client-options-button">
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
|
||||||
viewBox="0 0 20 20" fill="currentColor">
|
|
||||||
<path
|
|
||||||
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<ul x-show="open" class="client-options-list" x-transition>
|
|
||||||
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
|
||||||
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
|
||||||
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="client-card-name">
|
|
||||||
Cliente 3
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="client-card">
|
|
||||||
<div class="client-card-header">
|
|
||||||
<div class="client-avatar">
|
|
||||||
<img src="{{ Vite::asset('resources/images/logo.png') }}" alt="Avatar do Cliente"
|
|
||||||
class="w-32 h-32 rounded-full object-cover">
|
|
||||||
</div>
|
|
||||||
<div x-data="{ open: false }" @click.outside="open = false" class="client-options-menu">
|
|
||||||
<button @click="open = !open" class="client-options-button">
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400 hover:text-gray-700"
|
|
||||||
viewBox="0 0 20 20" fill="currentColor">
|
|
||||||
<path
|
|
||||||
d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<ul x-show="open" class="client-options-list" x-transition>
|
|
||||||
<li><a href="#" class="client-option-item">Ver Detalhes</a></li>
|
|
||||||
<li><a href="#" class="client-option-item">Editar Cliente</a></li>
|
|
||||||
<li><a href="#" class="client-option-item text-red-600">Excluir Cliente</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="client-card-name">
|
|
||||||
Cliente 4
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
||||||
<link rel="shortcut icon" href="{{ Vite::asset('resources/images/favicon.png') }}" type="image/x-icon">
|
|
||||||
<link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600" rel="stylesheet" />
|
<link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600" rel="stylesheet" />
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||||
@livewireStyles
|
@livewireStyles
|
||||||
|
|
@ -19,68 +18,68 @@
|
||||||
<nav class="nav-bar" x-data="{ scrolled: false }" x-init="scrolled = (window.scrollY > 50)"
|
<nav class="nav-bar" x-data="{ scrolled: false }" x-init="scrolled = (window.scrollY > 50)"
|
||||||
@scroll.window="scrolled = (window.scrollY > 50)" :class="{ 'navbar-scrolled': scrolled }">
|
@scroll.window="scrolled = (window.scrollY > 50)" :class="{ 'navbar-scrolled': scrolled }">
|
||||||
@auth
|
@auth
|
||||||
<div class="navbar-items">
|
<div class="navbar-items">
|
||||||
<a href="{{ route('dashboard') }}">Início</a>
|
<a href="{{ route('dashboard') }}">Início</a>
|
||||||
<div class="nav-bar-logo">
|
<div class="nav-bar-logo">
|
||||||
<a href="{{ route('dashboard') }}">
|
<a href="{{ route('dashboard') }}">
|
||||||
<img src="{{ Vite::asset('resources/images/newlogo.png') }}" alt="Logo">
|
<img src="{{ Vite::asset('resources/images/newlogo.png') }}" alt="Logo">
|
||||||
</a>
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form action="{{ route('logout') }}" method="post">
|
||||||
|
@csrf
|
||||||
|
<button type="submit">
|
||||||
|
Sair
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form action="{{ route('logout') }}" method="post">
|
<div x-data="{open: false}" x-on:click.outside="open = false" class="profile-menu">
|
||||||
@csrf
|
|
||||||
<button type="submit">
|
|
||||||
Sair
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div x-data="{open: false}" x-on:click.outside="open = false" class="profile-menu transition delay-150 duration-300 ease-in-out hover:-translate-y-1 hover:scale-100">
|
<a x-on:click="open = !open" class="cursor-pointer rounded-full overflow-hidden">
|
||||||
|
|
||||||
<a x-on:click="open = !open" class="cursor-pointer rounded-full overflow-hidden">
|
<img class="object-cover w-full h-full rounded-full"
|
||||||
|
src="{{ Vite::asset('resources/images/avatar-nexus.svg') }}" alt="Avatar">
|
||||||
|
</a>
|
||||||
|
|
||||||
<img class="object-cover w-full h-full "
|
<ul class="profile-list-items" x-show="open" x-transition:enter.duration.300ms
|
||||||
src="{{ Vite::asset('resources/images/avatar-nexus.svg') }}" alt="Avatar">
|
x-transition:leave.duration.300ms>
|
||||||
</a>
|
<h2 class="font-bold text-center" x-show="open" x-transition:enter="transition ease-out duration-300"
|
||||||
|
x-transition:enter-start="opacity-0 scale-90" x-transition:enter-end="opacity-100 scale-100"
|
||||||
|
x-transition:leave="transition ease-in duration-300"
|
||||||
|
x-transition:leave-start="opacity-100 scale-100" x-transition:leave-end="opacity-0 scale-90">Nexus
|
||||||
|
</h2>
|
||||||
|
|
||||||
<ul class="profile-list-items" x-show="open" x-transition:enter.duration.300ms
|
<li class="profile-items">
|
||||||
x-transition:leave.duration.300ms>
|
<a href="" class="profile-link">
|
||||||
<h2 class="font-bold text-center" x-show="open" x-transition:enter="transition ease-out duration-300"
|
Início
|
||||||
x-transition:enter-start="opacity-0 scale-90" x-transition:enter-end="opacity-100 scale-100"
|
</a>
|
||||||
x-transition:leave="transition ease-in duration-300"
|
</li>
|
||||||
x-transition:leave-start="opacity-100 scale-100" x-transition:leave-end="opacity-0 scale-90">Nexus
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<li class="profile-items">
|
<li class="profile-items">
|
||||||
<a href="" class="profile-link">
|
<a @click="$dispatch('show-users')" class="profile-link">
|
||||||
Início
|
Administração
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="profile-items">
|
<li class="profile-items">
|
||||||
<a @click="$dispatch('show-users')" class="profile-link">
|
<a @click="$dispatch('open-create-user')" class="profile-link">
|
||||||
Administração
|
Criar novo usuário
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="profile-items">
|
<li class="profile-items">
|
||||||
<a @click="$dispatch('open-create-user')" class="profile-link">
|
<a @click="$dispatch('open-add-client')" class="profile-link">
|
||||||
Criar novo usuário
|
Adicionar clientes
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="profile-items">
|
</ul>
|
||||||
<a @click="$dispatch('open-add-client')" class="profile-link">
|
</div>
|
||||||
Adicionar clientes
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
@endauth
|
@endauth
|
||||||
|
|
||||||
@guest
|
@guest
|
||||||
<div>Bem vindo ao Nexus.</div>
|
<div>Bem vindo ao Nexus.</div>
|
||||||
@endguest
|
@endguest
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
|
|
|
||||||
|
|
@ -2,57 +2,44 @@
|
||||||
@section('title', 'Login')
|
@section('title', '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">
|
||||||
|
<div class="container-title">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<!--
|
|
||||||
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">
|
||||||
|
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<h1>Efetue seu login</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="messages">
|
||||||
|
@if ($errors->any())
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
{{ $errors->first() }}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if (session('error'))
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
{{ session('error') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
|
||||||
@csrf
|
@csrf
|
||||||
|
<input class="form-input-class" type="email" name="email" placeholder="E-mail">
|
||||||
<!-- 3. A Logo (Usa .container-title) -->
|
<input class="form-input-class" type="password" name="password" placeholder="Senha">
|
||||||
<div class="container-title">
|
<div class="flex justify-center">
|
||||||
<!-- Coloque sua nova logo aqui! -->
|
|
||||||
<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 class="container-message">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 4. Título (Usa .form-title) -->
|
|
||||||
<h1 class="form-title">
|
|
||||||
Efetue seu login
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<!-- 5. Mensagens de Sessão -->
|
|
||||||
<x-session-messages />
|
|
||||||
|
|
||||||
<!-- 6. Grupo de Inputs (Usa .input-group, .form-label, .form-input-class) -->
|
|
||||||
<div class="input-group">
|
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="input-group">
|
|
||||||
<label for="password" class="form-label">Senha</label>
|
|
||||||
<input class="form-input-class" id="password" type="password" name="password" placeholder="••••••••" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 7. Botão de Login (Usa .form-button-class) -->
|
|
||||||
<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="flex justify-center">
|
||||||
<div class="forget-password">
|
<div class="forget-password">
|
||||||
<a href="#">Esqueceu sua senha?</a>
|
<a href="#">Esqueceu sua senha?</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Http\Controllers\AddClientController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
use App\Http\Controllers\UserController;
|
use App\Http\Controllers\UserController;
|
||||||
use App\Http\Controllers\ClientController;
|
use App\Http\Controllers\CreateUserController;
|
||||||
use App\Http\Controllers\LoginController;
|
use App\Http\Controllers\LoginController;
|
||||||
use App\Http\Controllers\LogoutController;
|
use App\Http\Controllers\LogoutController;
|
||||||
use App\Http\Controllers\CreateUserController;
|
use App\Livewire\Counter;
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
|
|
||||||
|
|
||||||
Route::middleware(['auth:sanctum'])->group(function () {
|
Route::middleware(['auth:sanctum'])->group(function () {
|
||||||
//Rotas LinePBX.
|
//Rotas LinePBX.
|
||||||
|
|
@ -15,7 +17,7 @@
|
||||||
|
|
||||||
Route::middleware(['auth'])->group(function () {
|
Route::middleware(['auth'])->group(function () {
|
||||||
|
|
||||||
Route::controller(ClientController::class)->group(function () {
|
Route::controller(UserController::class)->group(function () {
|
||||||
Route::get('/dashboard', 'dashboard')->name('dashboard');
|
Route::get('/dashboard', 'dashboard')->name('dashboard');
|
||||||
Route::post('/create-users', 'createUsers')->name('users.create')->middleware('authorization');
|
Route::post('/create-users', 'createUsers')->name('users.create')->middleware('authorization');
|
||||||
});
|
});
|
||||||
|
|
@ -23,13 +25,14 @@
|
||||||
Route::controller(LogoutController::class)->group(function () {
|
Route::controller(LogoutController::class)->group(function () {
|
||||||
Route::post('/logout', [LogoutController::class, 'logout'])->name('logout');
|
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::controller(LoginController::class)->group(function () {
|
||||||
Route::get('/login', function () {
|
Route::get('/login', function () {
|
||||||
if (Auth::check()) {
|
|
||||||
return redirect('dashboard', 302);
|
|
||||||
}
|
|
||||||
return view('login');
|
return view('login');
|
||||||
})->name('login');
|
})->name('login');
|
||||||
Route::post('/login', [LoginController::class, 'login'])->name('login-post');
|
Route::post('/login', [LoginController::class, 'login'])->name('login-post');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue