feat(inventory): dynamic tab badges with real tenant data

- Add /pos/api/inventory/stats endpoint returning counts per tab
- Replace hardcoded badge numbers (4,817, 14, 3, 23) with dynamic values
- Frontend auto-fetches stats on page load and updates badges
This commit is contained in:
2026-05-18 04:31:00 +00:00
parent 9ad624d26c
commit 24cdd71262
2 changed files with 82 additions and 7 deletions

View File

@@ -238,25 +238,25 @@
<!-- Tabs Row -->
<div class="tabs-row" role="tablist" aria-label="Módulos de Inventario">
<button class="tab-btn is-active" role="tab" aria-selected="true" aria-controls="panel-stock" onclick="switchTab('stock')">
Stock Actual <span class="tab-btn__badge">4,817</span>
Stock Actual <span class="tab-btn__badge" id="badge-stock">0</span>
</button>
<button class="tab-btn" role="tab" aria-selected="false" aria-controls="panel-entradas" onclick="switchTab('entradas')">
Entradas <span class="tab-btn__badge">14</span>
Entradas <span class="tab-btn__badge" id="badge-entradas">0</span>
</button>
<button class="tab-btn" role="tab" aria-selected="false" aria-controls="panel-salidas" onclick="switchTab('salidas')">
Salidas
Salidas <span class="tab-btn__badge" id="badge-salidas">0</span>
</button>
<button class="tab-btn" role="tab" aria-selected="false" aria-controls="panel-traspasos" onclick="switchTab('traspasos')">
Traspasos <span class="tab-btn__badge">3</span>
Traspasos <span class="tab-btn__badge" id="badge-traspasos">0</span>
</button>
<button class="tab-btn" role="tab" aria-selected="false" aria-controls="panel-ajustes" onclick="switchTab('ajustes')">
Ajustes
Ajustes <span class="tab-btn__badge" id="badge-ajustes">0</span>
</button>
<button class="tab-btn" role="tab" aria-selected="false" aria-controls="panel-conteos" onclick="switchTab('conteos')">
Conteos
Conteos <span class="tab-btn__badge" id="badge-conteos">0</span>
</button>
<button class="tab-btn" role="tab" aria-selected="false" aria-controls="panel-alertas" onclick="switchTab('alertas')">
Alertas <span class="tab-btn__badge tab-btn__badge--alert">23</span>
Alertas <span class="tab-btn__badge tab-btn__badge--alert" id="badge-alertas">0</span>
</button>
</div>
@@ -821,5 +821,34 @@
<script>if('serviceWorker' in navigator){navigator.serviceWorker.register('/pos/sw.js',{scope:'/pos/'});}</script>
<script src="/pos/static/js/pwa-install.js" defer></script>
<script src="/pos/static/js/chat.js" defer></script>
<script>
// Load inventory stats for tab badges
(async function loadInventoryStats() {
try {
const token = localStorage.getItem('access_token');
if (!token) return;
const res = await fetch('/pos/api/inventory/stats', {
headers: { 'Authorization': 'Bearer ' + token }
});
if (!res.ok) return;
const data = await res.json();
const map = {
'badge-stock': data.stock,
'badge-entradas': data.entradas,
'badge-salidas': data.salidas,
'badge-traspasos': data.traspasos,
'badge-ajustes': data.ajustes,
'badge-conteos': data.conteos,
'badge-alertas': data.alertas
};
for (const [id, value] of Object.entries(map)) {
const el = document.getElementById(id);
if (el) el.textContent = value || 0;
}
} catch (e) {
console.error('Failed to load inventory stats:', e);
}
})();
</script>
</body>
</html>