Usuario vendedor y pestaña descargas
This commit is contained in:
@@ -10,13 +10,15 @@
|
||||
const TABS = [
|
||||
{ id: 'productos', label: 'Productos', icon: '📦' },
|
||||
{ id: 'agotados', label: 'Agotados', icon: '🚫' },
|
||||
{ id: 'descargas', label: 'Descargas', icon: '⬇️' },
|
||||
{ id: 'categorias', label: 'Categorías', icon: '🗂️' },
|
||||
{ id: 'usuarios', label: 'Usuarios', icon: '👥' }
|
||||
];
|
||||
|
||||
const ROLES = {
|
||||
admin: 'Administrador',
|
||||
editor: 'Editor'
|
||||
admin: 'Administrador',
|
||||
editor: 'Editor',
|
||||
vendedor: 'Vendedor'
|
||||
};
|
||||
|
||||
// Iconos disponibles para categorías
|
||||
@@ -41,6 +43,7 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||
setupLoginForm();
|
||||
setupLogout();
|
||||
setupNavigation();
|
||||
setupSubtabs();
|
||||
setupModals();
|
||||
setupPermisosToggles();
|
||||
setupCategoriasModals();
|
||||
@@ -94,19 +97,28 @@ function mostrarDashboard(user) {
|
||||
// Aplicar permisos (visibilidad de nav, subsección admin-only, etc.)
|
||||
aplicarPermisos();
|
||||
|
||||
// Reset a la vista dashboard
|
||||
cambiarVista('dashboard');
|
||||
// Determinar vista inicial
|
||||
const esAdmin = user.rol === 'admin';
|
||||
const perms = getPermisosEfectivos();
|
||||
let viewInicial;
|
||||
if (esAdmin || perms.includes('dashboard')) {
|
||||
viewInicial = 'dashboard';
|
||||
} else {
|
||||
// Primera vista visible según permisos
|
||||
viewInicial = perms[0] || 'descargas';
|
||||
}
|
||||
cambiarVista(viewInicial);
|
||||
|
||||
cargarEstadisticas();
|
||||
}
|
||||
|
||||
function cambiarVista(view) {
|
||||
// Check defensivo: si el usuario no tiene permiso para esta vista, redirige a dashboard
|
||||
if (currentUser && view !== 'dashboard') {
|
||||
// Check defensivo: si el usuario no tiene permiso para esta vista, redirige a la primera vista visible
|
||||
if (currentUser) {
|
||||
const esAdmin = currentUser.rol === 'admin';
|
||||
const permisos = currentUser.permisos || [];
|
||||
if (!esAdmin && !permisos.includes(view)) {
|
||||
view = 'dashboard';
|
||||
const perms = getPermisosEfectivos();
|
||||
if (!esAdmin && !perms.includes(view)) {
|
||||
view = perms[0] || 'descargas';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,6 +162,10 @@ function cambiarVista(view) {
|
||||
if (view === 'agotados') {
|
||||
cargarAgotados();
|
||||
}
|
||||
|
||||
if (view === 'descargas') {
|
||||
cargarDescargas();
|
||||
}
|
||||
}
|
||||
|
||||
async function cargarEstadisticas() {
|
||||
@@ -172,27 +188,28 @@ async function cargarEstadisticas() {
|
||||
|
||||
// ════════════════════════════════
|
||||
// PERMISOS — visibilidad según rol + permisos[]
|
||||
// Vendedor: SIEMPRE ve 'descargas' (implícito) + lo que le hayan dado
|
||||
// ════════════════════════════════
|
||||
function getPermisosEfectivos() {
|
||||
if (!currentUser) return [];
|
||||
const permisos = currentUser.permisos || [];
|
||||
if (currentUser.rol === 'vendedor' && !permisos.includes('descargas')) {
|
||||
return ['descargas', ...permisos];
|
||||
}
|
||||
return permisos;
|
||||
}
|
||||
|
||||
function aplicarPermisos() {
|
||||
if (!currentUser) return;
|
||||
|
||||
const esAdmin = currentUser.rol === 'admin';
|
||||
const permisos = currentUser.permisos || [];
|
||||
const puedeGestionarUsuarios = esAdmin || permisos.includes('usuarios');
|
||||
const perms = getPermisosEfectivos();
|
||||
const puedeGestionarUsuarios = esAdmin || perms.includes('usuarios');
|
||||
|
||||
// Mostrar/ocultar cada nav-item según permisos
|
||||
document.querySelectorAll('.nav-item[data-view]').forEach(item => {
|
||||
const view = item.dataset.view;
|
||||
let visible = false;
|
||||
|
||||
if (view === 'dashboard') {
|
||||
visible = true; // Dashboard siempre visible
|
||||
} else if (esAdmin) {
|
||||
visible = true; // Admin ve todo
|
||||
} else {
|
||||
visible = permisos.includes(view); // Editor: solo sus permisos
|
||||
}
|
||||
|
||||
const visible = esAdmin || perms.includes(view);
|
||||
item.style.display = visible ? '' : 'none';
|
||||
});
|
||||
|
||||
@@ -220,6 +237,35 @@ function setupNavigation() {
|
||||
});
|
||||
}
|
||||
|
||||
// ════════════════════════════════
|
||||
// SUBTABS (dentro de la view 'descargas')
|
||||
// ════════════════════════════════
|
||||
function setupSubtabs() {
|
||||
document.querySelectorAll('.subtab').forEach(btn => {
|
||||
btn.addEventListener('click', () => {
|
||||
const subtab = btn.dataset.subtab;
|
||||
// Activar solo este botón
|
||||
btn.parentElement.querySelectorAll('.subtab').forEach(b => {
|
||||
b.classList.toggle('active', b === btn);
|
||||
b.setAttribute('aria-selected', b === btn ? 'true' : 'false');
|
||||
});
|
||||
// Mostrar solo el panel correspondiente
|
||||
document.querySelectorAll('.subtab-panel').forEach(p => {
|
||||
p.classList.toggle('active', p.dataset.subtabPanel === subtab);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ════════════════════════════════
|
||||
// DESCARGAS (vista + subtabs pdf / fotos)
|
||||
// Funcionalidad TBD — placeholders por ahora
|
||||
// ════════════════════════════════
|
||||
function cargarDescargas() {
|
||||
// Placeholder. Cuando se implemente cada subpestaña, se cargan
|
||||
// los datos del backend (PDFs disponibles, lotes de fotos, etc.).
|
||||
}
|
||||
|
||||
// ════════════════════════════════
|
||||
// PERMISOS EN MODALES — render y lectura
|
||||
// ════════════════════════════════
|
||||
|
||||
Reference in New Issue
Block a user