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:
@@ -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 ───
|
||||
|
||||
Reference in New Issue
Block a user