diff --git a/pos/static/css/catalog.css b/pos/static/css/catalog.css index 457665e..c38606d 100644 --- a/pos/static/css/catalog.css +++ b/pos/static/css/catalog.css @@ -90,7 +90,8 @@ .breadcrumb__link:hover { color: var(--color-primary); } .breadcrumb__sep { color: var(--color-text-disabled); } .breadcrumb__current { color: var(--color-text-primary); font-weight: var(--font-weight-semibold); } - + .breadcrumb__back { display: inline-flex; align-items: center; gap: 4px; padding: 2px 10px; background: transparent; border: 1px solid var(--color-border); border-radius: var(--radius-sm); color: var(--color-text-muted); font-size: var(--text-body-sm); cursor: pointer; transition: var(--transition-fast); } + .breadcrumb__back:hover { background: var(--color-primary-muted); color: var(--color-primary); } .header-actions { display: flex; align-items: center; gap: var(--space-3); } /* ── Catalog mode toggle (OEM / Local) ── */ diff --git a/pos/static/js/brand-catalog.js b/pos/static/js/brand-catalog.js index 35c680a..47e138f 100644 --- a/pos/static/js/brand-catalog.js +++ b/pos/static/js/brand-catalog.js @@ -50,7 +50,7 @@ return; } this.el('brandCatalogOverlay').style.display = 'block'; - document.body.style.overflow = 'hidden'; + //document.body.style.overflow = 'hidden'; this.loadBrands(); }, @@ -59,7 +59,7 @@ document.body.style.overflow = ''; this.reset(); }, - + reset: function() { this.state = 'brands'; this.nav = { brand: null, brandId: null, model: null, modelId: null, year: null, yearId: null, engine: null, myeId: null, category: null, categoryId: null }; diff --git a/pos/static/js/catalog.js b/pos/static/js/catalog.js index c239a27..f3fb7a9 100644 --- a/pos/static/js/catalog.js +++ b/pos/static/js/catalog.js @@ -259,7 +259,20 @@ if (nav.nxPartType) parts.push({ label: nav.nxPartType.name, action: null }); else if (nav.partType) parts.push({ label: nav.partType.name, action: null }); + //Botón para retroceder + var backAction = null; + if (parts.length > 1) { + var prev = parts[parts.length - 2]; + backAction = prev ? prev.action : 'loadBrands'; + } + var html = ''; + //Botón para retroceder + if (backAction) { + html += ''; + html += ''; + } + //-------- for (var i = 0; i < parts.length; i++) { if (i > 0) html += ''; if (i < parts.length - 1 && parts[i].action) { @@ -286,6 +299,7 @@ else if (action === 'loadNxPartTypes') { resetNavFrom('part_types'); loadNexpartPartTypes(); } }); }); + } function resetNav() { @@ -1668,20 +1682,22 @@ }); } + function vsYearChanged() { var yearId = vsYear.value; - vsBrand.innerHTML = ''; - vsModel.innerHTML = ''; - vsEngine.innerHTML = ''; - vsBrand.disabled = true; - vsModel.disabled = true; - vsEngine.disabled = true; - vsClear.style.display = yearId ? '' : 'none'; + vsClear.style.display = (yearId || vsBrand.value || vsModel.value) ? '' : 'none'; - if (!yearId) return; - - // Load brands filtered by year + // Resetear marca solo si no hay nada seleccionado en ella vsBrand.disabled = false; + vsEngine.innerHTML = ''; + vsEngine.disabled = true; + + if (!yearId) { + //carga todo + vsLoadAllBrands(); + return; + } + // Filtrar marcas por año apiFetch(API + '/brands?year_id=' + yearId + '&mode=' + catalogMode).then(function (data) { var brands = data.data || data; if (!brands) return; @@ -1689,21 +1705,39 @@ brands.map(function (b) { return ''; }).join(''); + // si hay marca seleccionada despliega modelos + if (vsBrand.value) vsBrandChanged(); + }); + } + function vsLoadAllBrands() { + apiFetch(API + '/brands?mode=' + catalogMode).then(function (data) { + var brands = data.data || data; + if (!brands) return; + var current = vsBrand.value; + vsBrand.innerHTML = '' + + brands.map(function (b) { + return ''; + }).join(''); + if (current) vsBrand.value = current; }); } function vsBrandChanged() { var brandId = vsBrand.value; var yearId = vsYear.value; + vsClear.style.display = (yearId || brandId) ? '' : 'none'; + vsModel.innerHTML = ''; vsEngine.innerHTML = ''; - vsModel.disabled = true; + vsModel.disabled = false; // cambio vsEngine.disabled = true; - if (!brandId) return; + if (!brandId) { + vsModel.disabled = true; + return; + } - // Load models filtered by brand AND year - vsModel.disabled = false; + // Cargar modelos con o sin año apiFetch(API + '/models?brand_id=' + brandId + (yearId ? '&year_id=' + yearId : '')).then(function (data) { var models = data.data || data; if (!models) return; @@ -1711,32 +1745,53 @@ models.map(function (m) { return ''; }).join(''); + // si hay modelo seleccionado despliega año + if (vsModel.value) vsModelChanged(); }); } + function vsModelChanged() { var modelId = vsModel.value; var yearVal = vsYear.value; + vsEngine.innerHTML = ''; vsEngine.disabled = true; - if (!modelId || !yearVal) return; + if (!modelId) return; - vsEngine.disabled = false; - apiFetch(API + '/engines?model_id=' + modelId + '&year_id=' + yearVal).then(function (data) { - var engines = data.data || data; - if (!engines) return; - vsEngine.innerHTML = '' + - engines.map(function (e) { - var label = e.name_engine + (e.trim_level ? ' (' + e.trim_level + ')' : ''); - return ''; - }).join(''); - // If only 1 engine, auto-select - if (engines.length === 1) { - vsEngine.value = engines[0].id_mye; - vsEngineChanged(); - } - }); + // Si hay año carga motores + if (yearVal) { + vsEngine.disabled = false; + apiFetch(API + '/engines?model_id=' + modelId + '&year_id=' + yearVal).then(function (data) { + var engines = data.data || data; + if (!engines) return; + vsEngine.innerHTML = '' + + engines.map(function (e) { + var label = e.name_engine + (e.trim_level ? ' (' + e.trim_level + ')' : ''); + return ''; + }).join(''); + if (engines.length === 1) { + vsEngine.value = engines[0].id_mye; + vsEngineChanged(); + } + }); + } else { + // Sin año + var brandId = vsBrand.value; + if (!brandId) return; + nav.brand = { id: parseInt(brandId), name: vsBrand.options[vsBrand.selectedIndex].text }; + nav.model = { id: parseInt(modelId), name: vsModel.options[vsModel.selectedIndex].text }; + nav.year = null; + nav.engine = null; + nav.level = 'categories'; + pushNavState(); + loadCategoriesForMode(); + setTimeout(function () { + var body = document.getElementById('pageBody'); + if (body) body.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }, 300); + } } function vsEngineChanged() { diff --git a/pos/templates/catalog.html b/pos/templates/catalog.html index a9c3d11..8eaad9d 100644 --- a/pos/templates/catalog.html +++ b/pos/templates/catalog.html @@ -136,14 +136,14 @@