<!-- Start Generation Here --> @extends('layouts.dashboard') @section('content') <!-- Agregar los CSS en el encabezado --> <link rel="stylesheet" href="https://cdn.datatables.net/2.2.2/css/dataTables.dataTables.css"> <link rel="stylesheet" href="https://cdn.datatables.net/buttons/3.2.2/css/buttons.dataTables.css"> <div class="container mx-auto px-4 py-6"> <!-- Encabezado --> @if(session('success')) <div id="success-message" class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative" role="alert"> {{ session('success') }} </div> @endif @if(session('error')) <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert"> <span class="block sm:inline">{{ session('error') }}</span> </div> @endif <div class="bg-white rounded-lg shadow-lg"> <div class="p-4 border-b border-gray-200 flex justify-between items-center"> <h2 class="text-2xl font-bold">Gestión de Docentes</h2> <a href="{{ route('docentes.create') }}" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 flex items-center gap-2"> <i class="fas fa-plus"></i> Agregar </a> </div> <div class="flex gap-2 mb-4"> <button onclick="copyToClipboard()" class="text-gray-600 hover:text-blue-600 p-2" title="Copiar"> <i class="fas fa-copy"></i> </button> <a href="{{ route('docentes.export', ['format' => 'csv']) }}" class="text-gray-600 hover:text-green-600 p-2" title="Exportar a CSV"> <i class="fas fa-file-csv"></i> </a> <a href="{{ route('docentes.export', ['format' => 'excel']) }}" class="text-gray-600 hover:text-green-700 p-2" title="Exportar a Excel"> <i class="fas fa-file-excel"></i> </a> <a href="{{ route('docentes.export', ['format' => 'pdf']) }}" class="text-gray-600 hover:text-red-600 p-2" title="Exportar a PDF"> <i class="fas fa-file-pdf"></i> </a> <button onclick="window.print()" class="text-gray-600 hover:text-gray-800 p-2" title="Imprimir"> <i class="fas fa-print"></i> </button> </div> <!-- Barra de búsqueda en su propia sección --> <div class="p-4 border-b border-gray-200 bg-gray-50"> <form action="{{ route('docentes.index') }}" method="GET" class="flex gap-2"> <div class="relative w-full sm:w-64"> <input type="text" name="busqueda" placeholder="Buscar docente..." value="{{ request('busqueda') }}" class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"> <div class="absolute left-3 top-2.5 text-gray-400"> <i class="fas fa-search"></i> </div> </div> <button type="submit" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600"> Buscar </button> @if(request('busqueda')) <a href="{{ route('docentes.index') }}" class="px-4 py-2 bg-gray-500 text-white rounded-lg hover:bg-gray-600"> Limpiar </a> @endif </form> </div> <div class="overflow-x-auto"> <table id="docentes-table" class="min-w-full divide-y divide-gray-200"> <thead class="bg-gray-50"> <tr> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">ID</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Nombre</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Teléfono</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Correo</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Tipo de Licencia</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Materia</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Estado</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Acciones</th> </tr> </thead> <tbody class="bg-white divide-y divide-gray-200"> @foreach($docentes as $docente) <tr class="hover:bg-gray-50"> <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ $docente->id }}</td> <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> <i class="fas fa-user text-blue-500 mr-2"></i> {{ $docente->nombre }} </td> <td class="px-6 py-4 whitespace-nowrap text-sm">{{ $docente->telefono }}</td> <td class="px-6 py-4 whitespace-nowrap text-sm">{{ $docente->correo }}</td> <td class="px-6 py-4 whitespace-nowrap text-sm">{{ $docente->tipo_licencia }}</td> <td class="px-6 py-4 whitespace-nowrap text-sm">{{ $docente->materia }}</td> <td class="px-6 py-4 whitespace-nowrap text-sm"> <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {{ $docente->status ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' }}"> {{ $docente->status ? 'Activo' : 'Inactivo' }} </span> </td> <td class="px-6 py-4 whitespace-nowrap text-sm"> <div class="flex gap-2"> <a href="{{ route('docentes.edit', $docente->id) }}" class="text-blue-600 hover:text-blue-900"> <i class="fas fa-edit"></i> </a> <a href="{{ route('docentes.toggle-status', $docente->id) }}" class="{{ $docente->status ? 'text-red-600 hover:text-red-900' : 'text-green-600 hover:text-green-900' }}"> <i class="fas {{ $docente->status ? 'fa-ban' : 'fa-check' }}"></i> </a> </div> </td> </tr> @endforeach </tbody> </table> </div> </div> </div> <!-- Agregar los scripts necesarios --> <script src="https://code.jquery.com/jquery-3.7.1.js"></script> <script src="https://cdn.datatables.net/2.2.2/js/dataTables.js"></script> <script src="https://cdn.datatables.net/buttons/3.2.2/js/dataTables.buttons.js"></script> <script src="https://cdn.datatables.net/buttons/3.2.2/js/buttons.dataTables.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script> <script src="https://cdn.datatables.net/buttons/3.2.2/js/buttons.html5.min.js"></script> <script src="https://cdn.datatables.net/buttons/3.2.2/js/buttons.print.min.js"></script> <script> function confirmarEdicion(url) { Swal.fire({ title: '¿Editar docente?', text: "¿Estás seguro de que deseas editar este docente?", icon: 'question', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: 'Sí, editar', cancelButtonText: 'Cancelar' }).then((result) => { if (result.isConfirmed) { window.location.href = url; } }); } function confirmarEliminacion(button) { Swal.fire({ title: '¿Estás seguro?', text: "Esta acción no se puede deshacer", icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: 'Sí, eliminar', cancelButtonText: 'Cancelar' }).then((result) => { if (result.isConfirmed) { button.closest('form').onsubmit = null; button.closest('form').submit(); } }); } document.addEventListener('DOMContentLoaded', function() { var message = document.getElementById('success-message'); if (message) { setTimeout(function() { message.style.transition = 'opacity 0.5s ease'; message.style.opacity = '0'; setTimeout(function() { message.remove(); }, 500); }, 3000); } }); // Inicializar DataTable con botones new DataTable('#docentes-table', { layout: { topStart: { buttons: ['copy', 'csv', 'excel', 'pdf'] } } }); function copyToClipboard() { const table = document.querySelector('table'); const range = document.createRange(); range.selectNode(table); window.getSelection().removeAllRanges(); window.getSelection().addRange(range); document.execCommand('copy'); window.getSelection().removeAllRanges(); // Mostrar mensaje de éxito Swal.fire({ icon: 'success', title: 'Copiado', text: 'La tabla ha sido copiada al portapapeles', timer: 1500, showConfirmButton: false }); } </script> @endsection <!-- End Generation Here -->