Testing Alpha
This commit is contained in:
45
resources/views/livewire/settings/users/form.blade.php
Normal file
45
resources/views/livewire/settings/users/form.blade.php
Normal file
@ -0,0 +1,45 @@
|
||||
<div>
|
||||
<x-vuexy-admin::form id="{{ $formId }}" :mode="$mode" wireSubmit="onSubmit" actionPosition="both">
|
||||
<x-slot name="actions">
|
||||
<x-vuexy-admin::button.form-buttons :mode="$mode" :label="$singularName" />
|
||||
</x-slot>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
{{-- Identificación --}}
|
||||
<x-vuexy-admin::card.basic title="Identificación">
|
||||
<x-vuexy-admin::form.input :uid="$uniqueId" model="name" label="Nombre de usuario" />
|
||||
</x-vuexy-admin::card.basic>
|
||||
|
||||
{{-- Configuraciones --}}
|
||||
<x-vuexy-admin::card.basic title="Configuraciones">
|
||||
<x-vuexy-admin::form.checkbox uid="random" model="status" label="Habilitar sucursal" switch="true" />
|
||||
</x-vuexy-admin::card.basic>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
{{-- Información de contacto --}}
|
||||
<x-vuexy-admin::card.basic title="Información de contacto">
|
||||
<x-vuexy-admin::form.input type="email" :uid="$uniqueId" model="email" label="Correo electrónico" icon="ti ti-mail" autocomplete="email" inputmode="email" />
|
||||
</x-vuexy-admin::card.basic>
|
||||
</div>
|
||||
</div>
|
||||
</x-vuexy-admin::form>
|
||||
</div>
|
||||
|
||||
@push('page-script')
|
||||
<script>
|
||||
const initializeUserForm = (mode) => {
|
||||
|
||||
}
|
||||
|
||||
// Evento para inicializar el formulario
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
document.addEventListener('on-failed-validation-user', (event) => {
|
||||
setTimeout(() => {
|
||||
initializeUserForm('{{ $mode }}');
|
||||
}, 10);
|
||||
});
|
||||
|
||||
initializeUserForm('{{ $mode }}');
|
||||
});
|
||||
</script>
|
||||
@endpush
|
@ -0,0 +1,93 @@
|
||||
<div>
|
||||
<x-vuexy-admin::offcanvas.basic :id="$offcanvasId" :tag-name="$tagName">
|
||||
<x-vuexy-admin::form :uid="$uniqueId" :id="$formId" :mode="$mode" wireSubmit="onSubmit">
|
||||
<x-slot name="actions">
|
||||
<x-vuexy-admin::button.offcanvas-buttons :mode="$mode" :tagName="$tagName" />
|
||||
</x-slot>
|
||||
{{-- Usuario --}}
|
||||
<x-vuexy-admin::form.input :uid="$uniqueId" model="name" label="Nombre(s)" />
|
||||
<x-vuexy-admin::form.input :uid="$uniqueId" model="last_name" label="Apellidos" />
|
||||
{{-- Correos electrónicos --}}
|
||||
<x-vuexy-admin::form.input type="email" :uid="$uniqueId" model="email" label="Correo electrónico" icon="ti ti-mail" autocomplete="email" inputmode="email" />
|
||||
|
||||
{{-- Imágen de perfil --}}
|
||||
<div class="mb-4">
|
||||
<label class="form-label">Imágen de perfil</label>
|
||||
@if ($upload_profile_photo && in_array($upload_profile_photo->getMimeType(), ['image/jpeg', 'image/png', 'image/webp']))
|
||||
<div class="text-center mb-2">
|
||||
<img src="{{ $upload_profile_photo->temporaryUrl() }}" alt="Vista previa" class="img-thumbnail mx-auto" style="max-height: 300px;">
|
||||
</div>
|
||||
@endif
|
||||
<x-vuexy-admin::form.input type="file" :uid="$uniqueId" model="upload_profile_photo" accept="image/*" />
|
||||
</div>
|
||||
|
||||
{{-- Contraseña --}}
|
||||
<x-vuexy-admin::form.input-password :uid="$uniqueId" model="password" icon="ti ti-lock" />
|
||||
|
||||
{{-- Roles --}}
|
||||
<x-vuexy-admin::form.select :uid="$uniqueId" model="roles" label="Roles" multiple :options="$rolesOptions" class="select2 form-select" />
|
||||
<hr>
|
||||
</x-vuexy-admin::form>
|
||||
</x-vuexy-admin::offcanvas.basic>
|
||||
</div>
|
||||
|
||||
@push('page-script')
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const uniqueId = '{{ $uniqueId }}';
|
||||
const offcanvasId = '{{ $offcanvasId }}';
|
||||
const tagName = '{{ Str::kebab($tagName) }}';
|
||||
const myOffcanvas = document.getElementById(offcanvasId);
|
||||
|
||||
// Asegúrate de no agregar múltiples veces el listener
|
||||
const hideAndReopen = () => {
|
||||
let myOffcanvas = document.getElementById(offcanvasId);
|
||||
let offcanvasInstance = bootstrap.Offcanvas.getOrCreateInstance(myOffcanvas);
|
||||
|
||||
const onHidden = () => {
|
||||
myOffcanvas.removeEventListener('hidden.bs.offcanvas', onHidden);
|
||||
offcanvasInstance.show();
|
||||
};
|
||||
|
||||
myOffcanvas.addEventListener('hidden.bs.offcanvas', onHidden);
|
||||
offcanvasInstance.hide();
|
||||
};
|
||||
|
||||
// Inizar Select2
|
||||
const initializeSelect2 = () => {
|
||||
let rolesSelect = document.getElementById(`roles_${uniqueId}`),
|
||||
myOffcanvas = document.getElementById(offcanvasId);
|
||||
|
||||
$(rolesSelect)
|
||||
.select2({
|
||||
dropdownAutoWidth: true,
|
||||
width: '100%',
|
||||
placeholder: 'Selecciona los roles',
|
||||
dropdownParent: myOffcanvas
|
||||
})
|
||||
.on('select2:clear', () => {
|
||||
@this.roles = [];
|
||||
})
|
||||
.on('select2:select', (e) => {
|
||||
@this.roles.push(e.params.data.id);
|
||||
});
|
||||
};
|
||||
|
||||
// Inicializar el formulario
|
||||
const initializeUserForm = () => {
|
||||
setTimeout(initializeSelect2, 10);
|
||||
};
|
||||
|
||||
|
||||
// Evento para inicializar el formulario cuando se abre el offcanvas
|
||||
myOffcanvas.addEventListener('show.bs.offcanvas', function () {
|
||||
initializeUserForm();
|
||||
attachPasswordToggles();
|
||||
});
|
||||
|
||||
|
||||
// Evento para recargar el formulario
|
||||
Livewire.on('refresh-user-form', hideAndReopen);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
1674
resources/views/livewire/settings/users/show.blade.php
Normal file
1674
resources/views/livewire/settings/users/show.blade.php
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,15 @@
|
||||
<div>
|
||||
<x-vuexy-admin::table.bootstrap.manager :tagName="$tagName" :datatableConfig="$bt_datatable" >
|
||||
<x-slot name="tools">
|
||||
<div class="mb-4 pr-2">
|
||||
<x-vuexy-admin::button.index-offcanvas :label="$singularName" :tagName="$tagName" />
|
||||
</div>
|
||||
</x-slot>
|
||||
</x-vuexy-admin::table.bootstrap.manager>
|
||||
</div>
|
||||
|
||||
@push('page-script')
|
||||
<script>
|
||||
window.userRoleStyles = {!! $userRoleStyles !!};
|
||||
</script>
|
||||
@endpush
|
@ -0,0 +1,60 @@
|
||||
<div class="row g-4 mb-4 text-right">
|
||||
<div class="col-sm-6 col-xl-3"></div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-start justify-content-between">
|
||||
<div class="content-left">
|
||||
<div class="d-flex align-items-center my-2">
|
||||
<h3 class="mb-0 mx-4">{{ $enabled }}</h3>
|
||||
</div>
|
||||
<p class="mb-0">Usuarios activos</p>
|
||||
</div>
|
||||
<div class="avatar">
|
||||
<span class="avatar-initial rounded bg-label-success">
|
||||
<i class="ti ti-user-plus ti-sm"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-start justify-content-between">
|
||||
<div class="content-left">
|
||||
<div class="d-flex align-items-center my-2">
|
||||
<h3 class="mb-0 mx-4">{{ $disabled }}</h3>
|
||||
</div>
|
||||
<p class="mb-0">Usuarios suspendidos</p>
|
||||
</div>
|
||||
<div class="avatar">
|
||||
<span class="avatar-initial rounded bg-label-warning">
|
||||
<i class="ti ti-user-check ti-sm"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-start justify-content-between">
|
||||
<div class="content-left">
|
||||
<div class="d-flex align-items-center my-2">
|
||||
<h3 class="mb-0 mx-4">{{ $total }}</h3>
|
||||
</div>
|
||||
<p class="mb-0">Total de usuarios</p>
|
||||
</div>
|
||||
<div class="avatar">
|
||||
<span class="avatar-initial rounded bg-label-primary">
|
||||
<i class="ti ti-user ti-sm"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Reference in New Issue
Block a user