Initial commit: Lash Vanshy - Complete project with admin panel, gallery, products, and contact

This commit is contained in:
2026-04-08 00:23:16 -06:00
commit e07e065791
111 changed files with 17939 additions and 0 deletions

View File

@@ -0,0 +1,138 @@
@extends('admin.layouts.master')
@section('title', 'Mensajes - Lash Vanshy')
@section('page-title', 'Mensajes de Contacto')
@section('content')
<!-- Header Actions -->
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h2 class="mb-0">Mensajes</h2>
<p class="text-muted mb-0">Gestiona los mensajes recibidos del formulario de contacto</p>
</div>
@if($mensajes->where('leido', false)->count() > 0)
<form action="{{ route('admin.mensajes.leer-todos') }}" method="POST" class="d-inline">
@csrf
<button type="submit" class="btn btn-secondary-admin">
<i class="fas fa-check-double me-2"></i>Marcar todos como leídos
</button>
</form>
@endif
</div>
<!-- Stats -->
<div class="row g-3 mb-4">
<div class="col-sm-4">
<div class="stat-card py-3">
<div class="stat-info">
<h3>{{ $mensajes->total() }}</h3>
<p>Total Mensajes</p>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="stat-card py-3">
<div class="stat-info">
<h3>{{ $mensajes->where('leido', false)->count() }}</h3>
<p>Sin Leer</p>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="stat-card py-3">
<div class="stat-info">
<h3>{{ $mensajes->where('leido', true)->count() }}</h3>
<p>Leídos</p>
</div>
</div>
</div>
</div>
<!-- Messages Table -->
<div class="card-admin">
<div class="card-body">
@if($mensajes->isNotEmpty())
<div class="table-responsive">
<table class="table table-admin">
<thead>
<tr>
<th>Nombre</th>
<th>Email</th>
<th>Mensaje</th>
<th>Fecha</th>
<th>Estado</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
@foreach($mensajes as $mensaje)
<tr class="{{ !$mensaje->leido ? 'table-warning' : '' }}">
<td>
<strong>{{ $mensaje->nombre }}</strong>
@if($mensaje->telefono)
<br><small class="text-muted">{{ $mensaje->telefono }}</small>
@endif
</td>
<td>
<a href="mailto:{{ $mensaje->email }}">{{ $mensaje->email }}</a>
</td>
<td>{{ Str::limit($mensaje->mensaje, 50) }}</td>
<td>
<small>{{ $mensaje->created_at->format('d/m/Y H:i') }}</small>
</td>
<td>
@if($mensaje->leido)
<span class="badge-admin bg-success">Leído</span>
@else
<span class="badge-admin bg-warning">Nuevo</span>
@endif
</td>
<td>
<div class="actions">
<a href="{{ route('admin.mensajes.show', $mensaje) }}"
class="btn btn-sm btn-primary-admin"
title="Ver mensaje">
<i class="fas fa-eye"></i>
</a>
@if(!$mensaje->leido)
<form action="{{ route('admin.mensajes.leido', $mensaje) }}" method="POST" class="d-inline">
@csrf
@method('PATCH')
<button type="submit" class="btn btn-sm btn-secondary-admin" title="Marcar como leído">
<i class="fas fa-check"></i>
</button>
</form>
@endif
<form action="{{ route('admin.mensajes.destroy', $mensaje) }}"
method="POST"
class="d-inline"
onsubmit="return confirm('¿Estás seguro de que deseas eliminar este mensaje?')">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger-admin" title="Eliminar">
<i class="fas fa-trash"></i>
</button>
</form>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<!-- Pagination -->
<div class="d-flex justify-content-center">
{{ $mensajes->links() }}
</div>
@else
<div class="empty-state">
<i class="fas fa-envelope-open"></i>
<h4>No hay mensajes</h4>
<p>Los mensajes del formulario de contacto aparecerán aquí</p>
</div>
@endif
</div>
</div>
@endsection

View File

@@ -0,0 +1,119 @@
@extends('admin.layouts.master')
@section('title', 'Ver Mensaje - Lash Vanshy')
@section('page-title', 'Detalle del Mensaje')
@section('content')
<!-- Breadcrumb -->
<nav aria-label="breadcrumb" class="mb-4">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admin.dashboard') }}">Dashboard</a></li>
<li class="breadcrumb-item"><a href="{{ route('admin.mensajes.index') }}">Mensajes</a></li>
<li class="breadcrumb-item active" aria-current="page">Ver Mensaje</li>
</ol>
</nav>
<div class="row">
<div class="col-lg-8">
<div class="card-admin">
<div class="card-header d-flex justify-content-between align-items-center">
<span>
<i class="fas fa-envelope me-2"></i>Mensaje de {{ $mensaje->nombre }}
</span>
<span class="badge-admin {{ $mensaje->leido ? 'bg-success' : 'bg-warning' }}">
{{ $mensaje->leido ? 'Leído' : 'Sin leer' }}
</span>
</div>
<div class="card-body">
<!-- Message Info -->
<div class="message-meta mb-4">
<div class="row">
<div class="col-md-6 mb-3">
<label class="text-muted small">Nombre</label>
<p class="mb-0 fw-bold">{{ $mensaje->nombre }}</p>
</div>
<div class="col-md-6 mb-3">
<label class="text-muted small">Email</label>
<p class="mb-0">
<a href="mailto:{{ $mensaje->email }}">{{ $mensaje->email }}</a>
</p>
</div>
@if($mensaje->telefono)
<div class="col-md-6 mb-3">
<label class="text-muted small">Teléfono</label>
<p class="mb-0">
<a href="tel:{{ $mensaje->telefono }}">{{ $mensaje->telefono }}</a>
</p>
</div>
@endif
<div class="col-md-6 mb-3">
<label class="text-muted small">Fecha</label>
<p class="mb-0">{{ $mensaje->created_at->format('d/m/Y H:i') }}</p>
</div>
</div>
</div>
<hr>
<!-- Message Content -->
<div class="message-content">
<label class="text-muted small d-block mb-2">Mensaje</label>
<div class="p-3 bg-light rounded">
{{ $mensaje->mensaje }}
</div>
</div>
<!-- Actions -->
<div class="d-flex justify-content-between mt-4">
<a href="{{ route('admin.mensajes.index') }}" class="btn btn-secondary-admin">
<i class="fas fa-arrow-left me-2"></i>Volver
</a>
<div class="d-flex gap-2">
@if(!$mensaje->leido)
<form action="{{ route('admin.mensajes.leido', $mensaje) }}" method="POST">
@csrf
@method('PATCH')
<button type="submit" class="btn btn-primary-admin">
<i class="fas fa-check me-2"></i>Marcar como leído
</button>
</form>
@endif
<form action="{{ route('admin.mensajes.destroy', $mensaje) }}" method="POST" onsubmit="return confirm('¿Estás seguro de que deseas eliminar este mensaje?')">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger-admin">
<i class="fas fa-trash me-2"></i>Eliminar
</button>
</form>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="card-admin">
<div class="card-header">
<i class="fas fa-info-circle me-2"></i>Información
</div>
<div class="card-body">
<p class="text-muted">
Este mensaje fue enviado a través del formulario de contacto en el sitio web.
</p>
<ul class="text-muted">
<li class="mb-2">Puedes responder directamente al email del cliente</li>
<li class="mb-2">Los mensajes no leídos aparecen resaltados</li>
<li>Puedes eliminar mensajes que ya no necesites</li>
</ul>
<hr>
<a href="mailto:{{ $mensaje->email }}?subject=Re: Tu mensaje desde Lash Vanshy" class="btn btn-primary-admin w-100">
<i class="fas fa-reply me-2"></i>Responder por Email
</a>
</div>
</div>
</div>
</div>
@endsection