Fix búsqueda en tiempo real, paginación, OneSignal, bancos/categorías y vistas auth

- ajaxcrud.js: fix race condition en búsqueda, abort de requests en vuelo
- Layout: mover @yield('js') después de app.js para corregir orden de carga
- Paginación: useBootstrapFour() + eliminar wrappers <ul> duplicados en 17 vistas
- OneSignal: migrar de UserTag iChamba_ID a ExternalId en controladores
- API: agregar endpoint GET /api/banks y campos rfc/bank/bank_account/fee en hero()
- Seeders: BanksSeeder (239 bancos) y CategoriesSeeder (100 categorías)
- Auth views: corregir padding/scroll en register, login, password reset

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-16 21:21:44 -06:00
parent fb5caeab6e
commit b34622b289
71 changed files with 3303 additions and 1576 deletions

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -10,45 +10,7 @@
@else
{!! Form::open(['id'=>'frm', 'files' => 'true']) !!}
@endif
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBmkTsg0-1VKllM_vHD6V1EhPnF0YUP-88&libraries=places"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script type="text/javascript">
google.maps.event.addDomListener(window, 'load', function () {
var searchBox = new google.maps.places.Autocomplete(document.getElementById('address'));
google.maps.event.addListener(searchBox, 'place_changed', function () {
var place = searchBox.getPlace();
var lat = place.geometry.location.lat();
console.log(lat);
var lng = place.geometry.location.lng();
console.log(lng);
$('#lat').val(lat);
$('#lng').val(lng);
});
});
</script>
<script type="text/javascript">
$( function() {
var categories = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: "/api/categories-name",
}
});
categories.initialize();
$('#categories').tagsinput({
typeaheadjs: {
name: 'categories',
source: categories.ttAdapter()
}
});
});
</script>
<div class="form-group row required">
{!! Form::label("company_name","Tu nombre o nombre de la empresa*",["class"=>"col-form-label col-md-3 col-lg-2"]) !!}
<div class="col-md-8">
@@ -180,3 +142,29 @@
</div>
</div>
@endsection
@section('js')
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBmkTsg0-1VKllM_vHD6V1EhPnF0YUP-88&libraries=places"></script>
<script type="text/javascript">
var mapSearchBox = new google.maps.places.Autocomplete(document.getElementById('address'));
google.maps.event.addListener(mapSearchBox, 'place_changed', function () {
var place = mapSearchBox.getPlace();
$('#lat').val(place.geometry.location.lat());
$('#lng').val(place.geometry.location.lng());
});
var categories = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: { url: "/api/categories-name" }
});
categories.initialize();
$('#categories').tagsinput({
typeaheadjs: {
name: 'categories',
source: categories.ttAdapter()
}
});
</script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -147,8 +144,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $suppliers->links() }}
</ul>
{{ $suppliers->links() }}
</div>
@endsection