fix(catalog): descarga de plantilla de precios proveedor con token

El enlace <a> a /pos/api/supplier-catalog/prices/template fallaba con 401
porque la navegación normal no envía el header Authorization. Se reemplaza
por un botón que descarga el blob vía fetch con Bearer token y dispara la
descarga del cliente. También se corrige clase btn-primary -> btn--primary.
This commit is contained in:
2026-06-15 18:01:42 +00:00
parent b635e44302
commit 584b87f82c
2 changed files with 29 additions and 3 deletions

View File

@@ -2148,6 +2148,31 @@
}
}
async function downloadPriceTemplate() {
try {
var res = await fetch('/pos/api/supplier-catalog/prices/template', {
headers: { 'Authorization': 'Bearer ' + token }
});
if (!res.ok) {
var data = await res.json().catch(function() { return {}; });
if (uploadPricesStatus) uploadPricesStatus.innerHTML = '<span style="color:var(--color-error);">' + esc(data.error || 'Error al descargar plantilla') + '</span>';
return;
}
var blob = await res.blob();
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.download = 'supplier_prices_template.csv';
document.body.appendChild(a);
a.click();
a.remove();
URL.revokeObjectURL(url);
if (uploadPricesStatus) uploadPricesStatus.innerHTML = '<span style="color:var(--color-success);">✓ Plantilla descargada.</span>';
} catch (e) {
if (uploadPricesStatus) uploadPricesStatus.innerHTML = '<span style="color:var(--color-error);">Error de red: ' + esc(e.message) + '</span>';
}
}
function shouldShowUploadPricesButton() {
try {
var user = JSON.parse(localStorage.getItem('pos_employee') || '{}');
@@ -2180,6 +2205,7 @@
openUploadPricesModal: openUploadPricesModal,
closeUploadPricesModal: closeUploadPricesModal,
submitUploadPrices: submitUploadPrices,
downloadPriceTemplate: downloadPriceTemplate,
};
// ─── INIT ───