iht
1 year ago
12 changed files with 697 additions and 39 deletions
@ -0,0 +1,161 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace App\Http\Controllers\Administracion; |
||||||
|
|
||||||
|
use App\Http\Controllers\Controller; |
||||||
|
use App\Models\ArchivosNominas; |
||||||
|
use App\Models\Empleados; |
||||||
|
use App\Models\ExpirarContrasena; |
||||||
|
use App\Models\User; |
||||||
|
use Carbon\Carbon; |
||||||
|
use Illuminate\Http\Request; |
||||||
|
use Illuminate\Support\Facades\Auth; |
||||||
|
use Illuminate\Support\Facades\Storage; |
||||||
|
|
||||||
|
|
||||||
|
class PerfilesController extends Controller |
||||||
|
{ |
||||||
|
/** |
||||||
|
* Create a new controller instance. |
||||||
|
* |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function __construct() |
||||||
|
{ |
||||||
|
$this->middleware('auth'); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public function index() |
||||||
|
{ |
||||||
|
|
||||||
|
|
||||||
|
return view('administracion/perfiles'); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public function nuevoUsuario( Request $request ){ |
||||||
|
|
||||||
|
$datosUsuario = $request->usuario; |
||||||
|
$datosEmpleado = $request->empleado; |
||||||
|
|
||||||
|
$datosUsuario['password'] = bcrypt('123456'); |
||||||
|
|
||||||
|
$nuevoUsuario = User::create( $datosUsuario ); |
||||||
|
|
||||||
|
$datosEmpleado['fk_id_users'] = $nuevoUsuario->id; |
||||||
|
|
||||||
|
Empleados::create( $datosEmpleado ); |
||||||
|
|
||||||
|
ExpirarContrasena::create([ |
||||||
|
|
||||||
|
'fk_id_users' => $nuevoUsuario->id, |
||||||
|
'dias_expiracion' => 0, |
||||||
|
'ultima_actualizacion' => Carbon::now() |
||||||
|
|
||||||
|
]); |
||||||
|
|
||||||
|
return 'Exito papuus'; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public function editarUsuario( Request $request ){ |
||||||
|
|
||||||
|
$datosEmpleado = $request->empleado; |
||||||
|
|
||||||
|
User::where('id',$request->usuario['id'])->update($request->usuario ); |
||||||
|
|
||||||
|
$datosEmpleado['fk_id_users'] = $request->usuario['id']; |
||||||
|
Empleados::updateOrCreate( $datosEmpleado ) ; |
||||||
|
|
||||||
|
|
||||||
|
return 'Exito papuus'; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public function eliminarUsuario( Request $request ){ |
||||||
|
|
||||||
|
|
||||||
|
User::where('id',$request->id)->update([ |
||||||
|
'activo' => 0, |
||||||
|
'eliminado' => 1 |
||||||
|
]); |
||||||
|
|
||||||
|
return 'Exito'; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public function cargarListasUsuarios(Request $request){ |
||||||
|
|
||||||
|
|
||||||
|
$fileContpaq = $this->convertirExcelArray($request->file('files')); |
||||||
|
$this->generarUsuarios( $fileContpaq, $request) ; |
||||||
|
|
||||||
|
return 'exito!!!'; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public function convertirExcelArray($file){ |
||||||
|
|
||||||
|
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); |
||||||
|
$reader->setReadDataOnly(true); |
||||||
|
$excel = $reader->load($file); |
||||||
|
$sheet = $excel->getSheet(0); |
||||||
|
$sheetData = $sheet->toArray(null, false, true, true); |
||||||
|
|
||||||
|
return $sheetData; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public function generarUsuarios($file, $request ) |
||||||
|
{ |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($file as $row => $val){ |
||||||
|
|
||||||
|
if( $row > 1 ){ |
||||||
|
|
||||||
|
if( !is_null($val['A']) && !is_null($val['B']) ){ |
||||||
|
|
||||||
|
$nuevoUsuario = User::create([ |
||||||
|
'name' => $val['B'], |
||||||
|
'fk_id_roles' => 3, |
||||||
|
'fk_id_grupos' => 0, |
||||||
|
'email' => $val['B'], |
||||||
|
'password' => bcrypt('123456'), |
||||||
|
]); |
||||||
|
|
||||||
|
Empleados::create([ |
||||||
|
'clave_contpaq' => $val['A'], |
||||||
|
'nombre_completo' => $val['B'], |
||||||
|
'fk_id_users' => $nuevoUsuario->id |
||||||
|
]); |
||||||
|
|
||||||
|
ExpirarContrasena::create([ |
||||||
|
|
||||||
|
'fk_id_users' => $nuevoUsuario->id, |
||||||
|
'dias_expiracion' => 0, |
||||||
|
'ultima_actualizacion' => Carbon::now() |
||||||
|
|
||||||
|
]); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return 'Exito'; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public function expirarContrasena( Request $request ){ |
||||||
|
|
||||||
|
ExpirarContrasena::where('fk_id_users',$request->id)->update(['dias_expiracion' => 0]); |
||||||
|
|
||||||
|
User::where('id',$request->id)->update(['password' => bcrypt('123456')]); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace App\Models; |
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory; |
||||||
|
use Illuminate\Database\Eloquent\Model; |
||||||
|
|
||||||
|
class Perfiles extends Model |
||||||
|
{ |
||||||
|
|
||||||
|
protected $connection = 'mysql'; |
||||||
|
|
||||||
|
protected $table = 'perfiles'; |
||||||
|
protected $primaryKey = 'id'; |
||||||
|
|
||||||
|
public $timestamps = false; |
||||||
|
|
||||||
|
protected $fillable = [ |
||||||
|
'perfil', |
||||||
|
'activo' |
||||||
|
]; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration; |
||||||
|
use Illuminate\Database\Schema\Blueprint; |
||||||
|
use Illuminate\Support\Facades\Schema; |
||||||
|
|
||||||
|
return new class extends Migration |
||||||
|
{ |
||||||
|
/** |
||||||
|
* Run the migrations. |
||||||
|
*/ |
||||||
|
public function up(): void |
||||||
|
{ |
||||||
|
Schema::create('perfiles', function (Blueprint $table) { |
||||||
|
$table->id(); |
||||||
|
$table->string('perfil'); |
||||||
|
$table->boolean('activo')->default(1); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Reverse the migrations. |
||||||
|
*/ |
||||||
|
public function down(): void |
||||||
|
{ |
||||||
|
Schema::dropIfExists('perfiles'); |
||||||
|
} |
||||||
|
}; |
@ -0,0 +1,21 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace Database\Seeders; |
||||||
|
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents; |
||||||
|
use Illuminate\Database\Seeder; |
||||||
|
use DB; |
||||||
|
|
||||||
|
class PerfilesSeeder extends Seeder |
||||||
|
{ |
||||||
|
/** |
||||||
|
* Run the database seeds. |
||||||
|
*/ |
||||||
|
public function run(): void |
||||||
|
{ |
||||||
|
DB::table('perfiles')->insert(['perfil'=>'Administrador']); |
||||||
|
DB::table('perfiles')->insert(['perfil'=>'Gerencia']); |
||||||
|
DB::table('perfiles')->insert(['perfil'=>'Supervisor']); |
||||||
|
DB::table('perfiles')->insert(['perfil'=>'Empleado']); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,365 @@ |
|||||||
|
|
||||||
|
$(function () { |
||||||
|
|
||||||
|
$(document).ajaxStart(function(){ |
||||||
|
$.blockUI({ |
||||||
|
message: '<i class="fas fa-spin fa-sync text-white"></i>', |
||||||
|
overlayCSS: { |
||||||
|
backgroundColor: "#000", |
||||||
|
opacity: 0.5, |
||||||
|
cursor: "wait", |
||||||
|
}, |
||||||
|
css: { |
||||||
|
border: 0, |
||||||
|
padding: 0, |
||||||
|
color: "#333", |
||||||
|
backgroundColor: "transparent", |
||||||
|
} |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
$(document).ajaxStop($.unblockUI); |
||||||
|
|
||||||
|
|
||||||
|
$("#formNuevoUsuario").on("submit", function(e){ |
||||||
|
|
||||||
|
e.preventDefault(); |
||||||
|
|
||||||
|
|
||||||
|
var check = document.getElementsByClassName('formNuevoUsuario')[0].reportValidity(); |
||||||
|
|
||||||
|
|
||||||
|
if (check) { |
||||||
|
|
||||||
|
var formData = new FormData(this); |
||||||
|
|
||||||
|
Swal.fire({ |
||||||
|
title: "¿Esta seguro que desea agregar un nuevo usuario?", |
||||||
|
type: "warning", |
||||||
|
showCancelButton: true, |
||||||
|
confirmButtonColor: "#3085d6", |
||||||
|
cancelButtonColor: "#d33", |
||||||
|
cancelButtonText: "Cancelar", |
||||||
|
confirmButtonText: "Aceptar", |
||||||
|
}).then((result) => { |
||||||
|
if (result.value) { |
||||||
|
|
||||||
|
$('#cerrarModalNuevoUsuario').trigger("click"); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
type:'POST', |
||||||
|
url:'nuevo_usuario', |
||||||
|
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, |
||||||
|
data: formData, |
||||||
|
processData:false, |
||||||
|
contentType: false, |
||||||
|
success:function(data){ |
||||||
|
|
||||||
|
cargarlistaEmpresas(); |
||||||
|
$(".formNuevoUsuario")[0].reset(); |
||||||
|
$('#formNuevoUsuario').removeClass('was-validated'); |
||||||
|
Swal.fire("¡Éxito!", "Se agrego un nuevo usuario.", "success"); |
||||||
|
|
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
mensajeError(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
}else{ |
||||||
|
errorFaltanCampos(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$("#formEditarUsuario").on("submit", function(e){ |
||||||
|
|
||||||
|
e.preventDefault(); |
||||||
|
|
||||||
|
var check = document.getElementsByClassName('formEditarUsuario')[0].reportValidity(); |
||||||
|
|
||||||
|
if (check) { |
||||||
|
|
||||||
|
|
||||||
|
var formData = new FormData(this); |
||||||
|
|
||||||
|
Swal.fire({ |
||||||
|
title: "¿Esta seguro que desea editar los datos del usuario?", |
||||||
|
type: "warning", |
||||||
|
showCancelButton: true, |
||||||
|
confirmButtonColor: "#3085d6", |
||||||
|
cancelButtonColor: "#d33", |
||||||
|
cancelButtonText: "Cancelar", |
||||||
|
confirmButtonText: "Aceptar", |
||||||
|
}).then((result) => { |
||||||
|
if (result.value) { |
||||||
|
|
||||||
|
$('#cerrarModalEditarUsuario').trigger("click"); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
type:'POST', |
||||||
|
url:'editar_usuario', |
||||||
|
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, |
||||||
|
data: formData, |
||||||
|
processData:false, |
||||||
|
contentType: false, |
||||||
|
success:function(data){ |
||||||
|
|
||||||
|
cargarlistaEmpresas(); |
||||||
|
$("#formEditarUsuario")[0].reset(); |
||||||
|
$('#formEditarUsuario').removeClass('was-validated'); |
||||||
|
Swal.fire("¡Éxito!", "Se editaron los datos del usuario.", "success"); |
||||||
|
|
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
mensajeError(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
}else{ |
||||||
|
errorFaltanCampos(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
$("#formCargarUsuarios").on("submit", function(e){ |
||||||
|
|
||||||
|
e.preventDefault(); |
||||||
|
|
||||||
|
var formData = new FormData(this); |
||||||
|
|
||||||
|
Swal.fire({ |
||||||
|
title: "¿Esta seguro que deseas cargar la lista de nuevos usuarios?", |
||||||
|
type: "warning", |
||||||
|
showCancelButton: true, |
||||||
|
confirmButtonColor: "#3085d6", |
||||||
|
cancelButtonColor: "#d33", |
||||||
|
cancelButtonText: "Cancelar", |
||||||
|
confirmButtonText: "Aceptar", |
||||||
|
}).then((result) => { |
||||||
|
if (result.value) { |
||||||
|
|
||||||
|
$('#cerrarModalNuevo').trigger("click"); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
type:'POST', |
||||||
|
url:'cargar_lista_usuarios', |
||||||
|
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, |
||||||
|
data: formData, |
||||||
|
processData:false, |
||||||
|
contentType: false, |
||||||
|
success:function(data){ |
||||||
|
|
||||||
|
cargarlistaEmpresas(); |
||||||
|
Swal.fire("¡Éxito!", "Se agrego la lista de nuevos usuarios.", "success"); |
||||||
|
|
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
mensajeError(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
cargarListaPerfiles(); |
||||||
|
|
||||||
|
function cargarListaPerfiles(){ |
||||||
|
|
||||||
|
$('#listaPerfiles').empty().DataTable({ |
||||||
|
searchDelay: 400, |
||||||
|
ajax: { |
||||||
|
url: 'api/obtener_perfiles', |
||||||
|
dataSrc: function(json){ |
||||||
|
return json; |
||||||
|
|
||||||
|
} |
||||||
|
}, |
||||||
|
// order: [[0, 'asc']],
|
||||||
|
// ordering:true,
|
||||||
|
columns:[ |
||||||
|
// { data: "id", defaultContent: "---", title: "#2" },
|
||||||
|
{data:function(row, type){ |
||||||
|
const id = row.id; |
||||||
|
let botonAcciones = '<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton" style="">'+ |
||||||
|
'<li>'+ |
||||||
|
'<a class="dropdown-item" data-bs-toggle="modal" data-bs-target="#modal_editar_form" onclick="cargarEditarForm('+id+')">Editar</a>'+ |
||||||
|
'</li>'+ |
||||||
|
'<li>'+ |
||||||
|
'<a class="dropdown-item" onclick="eliminarUsuario('+ id +')">Eliminar</a>'+ |
||||||
|
'</li>'+ |
||||||
|
'</ul>'; |
||||||
|
return '<div class="dropdown dropstart">'+ |
||||||
|
'<a href="table-basic.html#" class="link" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">'+ |
||||||
|
'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-horizontal feather-sm">'+ |
||||||
|
'<circle cx="12" cy="12" r="1"></circle>'+ |
||||||
|
'<circle cx="19" cy="12" r="1"></circle>'+ |
||||||
|
'<circle cx="5" cy="12" r="1"></circle>'+ |
||||||
|
'</svg>'+ |
||||||
|
'</a>'+ |
||||||
|
botonAcciones+ |
||||||
|
'</div>'; |
||||||
|
}, |
||||||
|
title: "Acciones"}, |
||||||
|
{ data: "id", defaultContent: "---", title: "#" }, |
||||||
|
{ data: "perfil", defaultContent: "---", title: "Perfiles" }, |
||||||
|
{data:function(row, type){ |
||||||
|
const activo = row.activo; |
||||||
|
console.log(activo); |
||||||
|
return (row.activo == 1) ? 'Activo' : 'Inactivo' ; |
||||||
|
|
||||||
|
}, |
||||||
|
title: "Estado"} |
||||||
|
|
||||||
|
|
||||||
|
], |
||||||
|
aLengthMenu: [ |
||||||
|
[25, 50, 100, 200, -1], |
||||||
|
[25, 50, 100, 200, 'All'] |
||||||
|
], |
||||||
|
destroy: true, |
||||||
|
paging:true, |
||||||
|
info:true, |
||||||
|
// responsive: true,
|
||||||
|
// dom: "Bfrtip",
|
||||||
|
// buttons: ["copy", "csv", "excel", "pdf", "print"],
|
||||||
|
"language": { |
||||||
|
"url": "//cdn.datatables.net/plug-ins/1.10.19/i18n/Spanish.json" |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
cargarListaRoles(); |
||||||
|
|
||||||
|
function cargarListaRoles(){ |
||||||
|
|
||||||
|
$.get('api/lista_roles',function(data){ |
||||||
|
|
||||||
|
let opciones = ''; |
||||||
|
$('.roles').empty(); |
||||||
|
|
||||||
|
$.each(data,function(i,ele){ |
||||||
|
|
||||||
|
opciones += '<option value="'+ ele.id +'" >'+ ele.rol +'</option>'; |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
$('.roles').append(opciones); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
function cargarEditarForm(id){ |
||||||
|
$.get('api/detalle_usuario',{id:id},function(data){ |
||||||
|
|
||||||
|
$.each(data,function(i,ele){ |
||||||
|
|
||||||
|
$('#editar_'+i).val(ele).change; |
||||||
|
if( i == 'datos_empleado' ){ |
||||||
|
|
||||||
|
$.each(ele,function(j,datos_empleado){ |
||||||
|
|
||||||
|
// if( j == 'id' ){
|
||||||
|
// $('#editar_empleado_'+j).val(datos_empleado);
|
||||||
|
// }
|
||||||
|
|
||||||
|
$('#editar_empleado_'+j).val(datos_empleado); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function eliminarUsuario(id){ |
||||||
|
|
||||||
|
|
||||||
|
Swal.fire({ |
||||||
|
title: "¿Esta seguro que desea eliminar el usuario?", |
||||||
|
type: "warning", |
||||||
|
showCancelButton: true, |
||||||
|
confirmButtonColor: "#3085d6", |
||||||
|
cancelButtonColor: "#d33", |
||||||
|
cancelButtonText: "Cancelar", |
||||||
|
confirmButtonText: "Aceptar", |
||||||
|
}).then((result) => { |
||||||
|
if (result.value) { |
||||||
|
|
||||||
|
$.get('eliminar_usuario',{id:id},function(data){ |
||||||
|
|
||||||
|
cargarlistaEmpresas(); |
||||||
|
Swal.fire("¡Éxito!", "Se editaron los datos del usuario.", "success"); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
function errorFaltanCampos(){ |
||||||
|
|
||||||
|
Swal.fire({ |
||||||
|
title: "Alerta!", |
||||||
|
text: "Faltan campos por llenar.", |
||||||
|
type: "warning", |
||||||
|
timer: 3000, |
||||||
|
showConfirmButton: false, |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function mensajeError(){ |
||||||
|
|
||||||
|
Swal.fire({ |
||||||
|
type: "error", |
||||||
|
title: "Oops...", |
||||||
|
text: "¡Lo siento, ocurrió un error!", |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(function () { |
||||||
|
"use strict"; |
||||||
|
window.addEventListener( |
||||||
|
"load", |
||||||
|
function () { |
||||||
|
// Fetch all the forms we want to apply custom Bootstrap validation styles to
|
||||||
|
var forms = document.getElementsByClassName("needs-validation"); |
||||||
|
// Loop over them and prevent submission
|
||||||
|
var validation = Array.prototype.filter.call( |
||||||
|
forms, |
||||||
|
function (form) { |
||||||
|
form.addEventListener( |
||||||
|
"submit", |
||||||
|
function (event) { |
||||||
|
if (form.checkValidity() === false) { |
||||||
|
event.preventDefault(); |
||||||
|
event.stopPropagation(); |
||||||
|
} |
||||||
|
form.classList.add("was-validated"); |
||||||
|
}, |
||||||
|
false |
||||||
|
); |
||||||
|
} |
||||||
|
); |
||||||
|
}, |
||||||
|
false |
||||||
|
); |
||||||
|
})(); |
||||||
|
|
@ -0,0 +1,62 @@ |
|||||||
|
@extends('layouts.app') |
||||||
|
@extends('layouts.head') |
||||||
|
@extends('layouts.preloader') |
||||||
|
@extends('layouts.scripts') |
||||||
|
@extends('layouts.topbar') |
||||||
|
@extends('layouts.lefsidebar') |
||||||
|
|
||||||
|
@section('content') |
||||||
|
|
||||||
|
@include('administracion.forms.nuevo_usuarios') |
||||||
|
@include('administracion.forms.editar_usuarios') |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="main-wrapper"> |
||||||
|
<div class="page-wrapper"> |
||||||
|
<div class="page-breadcrumb border-bottom"> |
||||||
|
<div class="row"> |
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-4 col-xs-12 justify-content-start d-flex align-items-center"> |
||||||
|
<h5 class="font-weight-medium text-uppercase mb-0">Perfiles</h5> |
||||||
|
</div> |
||||||
|
<div class="col-lg-9 col-md-8 col-xs-12 d-flex justify-content-start justify-content-md-end align-self-center" > |
||||||
|
<nav aria-label="breadcrumb" class="mt-2"> |
||||||
|
<ol class="breadcrumb mb-0 p-0"> |
||||||
|
<li class="breadcrumb-item"><a >Adminstracion</a></li> |
||||||
|
<li class="breadcrumb-item active" aria-current="page">Perfiles</li> |
||||||
|
</ol> |
||||||
|
</nav> |
||||||
|
<div class="d-flex justify-content-end"> |
||||||
|
<button class="btn btn-success text-white ms-3 d-none d-md-block" data-bs-toggle="modal" data-bs-target="#info-header-modal" onclic="limpiarFormulario()"><i class="mdi mdi-plus"></i> Nuevo perfil </button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="page-content container-fluid"> |
||||||
|
<div class="card"> |
||||||
|
<div class="row no-gutters"> |
||||||
|
<div class="col-lg-12 col-md-12"> |
||||||
|
<div class="card-body"> |
||||||
|
<div class="row mb-4"> |
||||||
|
<div class="col-md-8"> |
||||||
|
<h3 class="font-weight-medium">Perfiles</h3> |
||||||
|
</div> |
||||||
|
<div class="d-flex justify-content-end"></div> |
||||||
|
</div> |
||||||
|
<div class="table-responsive"> |
||||||
|
<table id="listaPerfiles" class="table table-bordered no-wrap fs-3 w-100 display" ></table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
@endsection |
||||||
|
|
||||||
|
@section('script') |
||||||
|
<script src="js/administracion/perfiles.js"></script> |
||||||
|
@endsection |
Loading…
Reference in new issue