481-961

salvarLocalStorage(); alert("Personalização salva!"); } /* ============================ CONFIG. TÍTULO (senha 2020) ============================ */ function mostrarPainelTitulo(){ if(!pedirSenhaEsperada(SENHA_PERS)){ alert("Senha incorreta."); return; } const main = document.getElementById('mainContent'); const t = document.getElementById('tituloHeader').textContent; main.innerHTML = `

Alterar Título



`; } function salvarTitulo(){ const v = document.getElementById('novoTitulo').value || 'Mercado Online'; document.getElementById('tituloHeader').textContent = v; salvarLocalStorage(); alert("Título salvo!"); } /* ============================ CONFIG. BANNER (senha 2020) ============================ */ function mostrarPainelBanner(){ if(!pedirSenhaEsperada(SENHA_PERS)){ alert("Senha incorreta."); return; } document.getElementById('bannerActions').style.display='flex'; alert("Opções de banner habilitadas acima do banner."); } function acaoTrocarBanner(){ if(!pedirSenhaEsperada(SENHA_PERS)){ alert("Senha incorreta."); return; } const url = prompt("URL da imagem:"); if(url){ bannerSrc = url; document.getElementById('topBanner').src = url; salvarLocalStorage(); } } function acaoRemoverBanner(){ if(!pedirSenhaEsperada(SENHA_PERS)){ alert("Senha incorreta."); return; } bannerSrc = ''; document.getElementById('topBanner').src = ''; salvarLocalStorage(); } /* ============================ CONFIG. PIX (senha 2020) ============================ */ function mostrarPainelPix(){ if(!pedirSenhaEsperada(SENHA_PERS)){ alert("Senha incorreta."); return; } const main = document.getElementById('mainContent'); const pixLS = localStorage.getItem('chavePIX') || ''; main.innerHTML=`

Configurar chave PIX



`; } function salvarPix(){ const v = document.getElementById('pixChave').value.trim(); localStorage.setItem('chavePIX', v); alert("Chave PIX salva!"); } /* ============================ ADICIONAR PRODUTO (senha 2030) ============================ */ function acaoAdicionarProduto(){ if(!pedirSenhaEsperada(SENHA_ADD)){ alert("Senha incorreta."); return; } mostrarFormularioAdicionar(); } function mostrarFormularioAdicionar(){ const main = document.getElementById('mainContent'); main.innerHTML = `

Adicionar Produto

Nome:

Preço:

Categoria:

Estoque:

Imagem (URL):


`; } function salvarNovoProduto(){ const nome = document.getElementById('addNome').value.trim(); const preco = document.getElementById('addPreco').value.trim(); const cat = document.getElementById('addCat').value.trim(); const est = parseInt(document.getElementById('addEst').value.trim(),10); const img = document.getElementById('addImg').value.trim(); if(!nome || !preco || !cat){ alert("Preencha nome, preço e categoria."); return; } const novo = { id: uid(), nome, preco: parseFloat(preco).toFixed(2), categoria: cat, estoque: isNaN(est)?0:est, imagem: img || "https://via.placeholder.com/300?text=Novo+Produto" }; produtos.push(novo); salvarLocalStorage(); alert("Produto adicionado!"); mostrarPainelAdmin(); } /* ============================ EDITAR PRODUTO (senha 2040) ============================ */ function editarProduto(id){ if(!pedirSenhaEsperada(SENHA_EDIT)){ alert("Senha incorreta."); return; } const p = produtos.find(x=>x.id===id); if(!p) return; const main = document.getElementById('mainContent'); main.innerHTML = `

Editar Produto

Nome:

Preço:

Categoria:

Estoque:

Imagem:


`; } function salvarEdicaoProduto(id){ const p = produtos.find(x=>x.id===id); if(!p) return; p.nome = document.getElementById('eNome').value.trim(); p.preco = parseFloat(document.getElementById('ePreco').value.trim()).toFixed(2); p.categoria = document.getElementById('eCat').value.trim(); p.estoque = parseInt(document.getElementById('eEst').value.trim(),10) || 0; p.imagem = document.getElementById('eImg').value.trim(); salvarLocalStorage(); alert("Produto atualizado!"); renderProdutos(); } /* ============================ EXCLUIR PRODUTO (senha 2050) ============================ */ function excluirProduto(id){ if(!pedirSenhaEsperada(SENHA_DEL)){ alert("Senha incorreta."); return; } if(!confirm("Tem certeza que deseja excluir?")) return; produtos = produtos.filter(x=>x.id!==id); salvarLocalStorage(); renderProdutos(); alert("Produto excluído!"); } /* ============================ CARRINHO ============================ */ function adicionarAoCarrinho(id){ const p = produtos.find(x=>x.id===id); if(!p){ alert("Produto não encontrado."); return; } const existe = carrinho.find(x=>x.nome===p.nome); if(existe){ existe.quantidade++; } else { carrinho.push({ nome:p.nome, preco:parseFloat(p.preco), quantidade:1 }); } salvarLocalStorage(); atualizarBadgeCarrinho(); alert("Adicionado ao carrinho!"); } function abrirCarrinho(){ const modal = document.getElementById('carrinhoModal'); const ul = document.getElementById('itensCarrinho'); const totalSpan = document.getElementById('totalCarrinho'); ul.innerHTML=''; let total=0; carrinho.forEach((item,i)=>{ const li=document.createElement('li'); li.style.margin='6px 0'; li.textContent=`${item.nome} x${item.quantidade} - R$ ${(item.preco*item.quantidade).toFixed(2)}`; ul.append(li); total += item.preco*item.quantidade; }); totalSpan.textContent=total.toFixed(2); modal.style.display='flex'; } function fecharCarrinho(){ document.getElementById('carrinhoModal').style.display='none'; } function desistirCompra(){ if(confirm("Tem certeza que deseja esvaziar o carrinho?")){ carrinho=[]; salvarLocalStorage(); fecharCarrinho(); atualizarBadgeCarrinho(); } } /* ============================ ZOOM IMAGEM ============================ */ function abrirZoomImagem(url){ document.getElementById('imgZoomSrc').src=url; document.getElementById('imgZoom').style.display='flex'; } function fecharZoomImagem(){ document.getElementById('imgZoom').style.display='none'; } /* ============================ FINALIZAR PEDIDO ============================ */ document.getElementById('btnPedido').onclick = ()=>{ if(carrinho.length===0){ alert("Carrinho vazio."); return; } abrirModalPedido(); }; function abrirModalPedido(){ const modal=document.getElementById('modalPedido'); modal.style.display='flex'; } function fecharModalPedido(){ const modal=document.getElementById('modalPedido'); modal.style.display='none'; } document.getElementById('formPedido').onsubmit=function(e){ e.preventDefault(); const f = new FormData(this); const nome = f.get('nome'); const endereco = f.get('endereco'); const tel = f.get('telefone'); const retirada = f.get('opcaoRetirada'); const pag = f.get('opcaoPagamento'); let resumo = `Cliente: ${nome}\nTelefone: ${tel}\nRetirada: ${retirada}`; if(endereco) resumo += `\nEndereço: ${endereco}`; resumo += `\n\nItens:\n`; let total=0; carrinho.forEach(i=>{ resumo += `${i.nome} x${i.quantidade} = R$ ${(i.preco*i.quantidade).toFixed(2)}\n`; total+=i.preco*i.quantidade; }); resumo += `\nTOTAL: R$ ${total.toFixed(2)}`; // Mostra o resumo const box = document.getElementById('resumoPedido'); box.style.display='block'; box.textContent=resumo; const chave = localStorage.getItem('chavePIX') || ''; const canvas = document.getElementById('qrPIX'); const btnW = document.getElementById('btnWhatsAppPedido'); if(pag==='PIX' && chave){ canvas.style.display='block'; const qr = new QRious({ element: canvas, value: chave, size: 240 }); } else { canvas.style.display='none'; } btnW.style.display='block'; btnW.onclick=()=>{ const text = encodeURIComponent(resumo); const wurl = `https://wa.me/?text=${text}`; window.open(wurl,'_blank'); }; }; /* ============================ FECHAR CHECKOUT (não usado muito) ============================ */ function closeCheckout(){ document.getElementById('checkoutModal').style.display='none'; } /* ============================ UTILITÁRIOS FINAIS E BOOT ============================ */ /* Ajusta UI relacionada ao banner/admin */ function atualizarBannerUI(){ const actions = document.getElementById('bannerActions'); if(actions) actions.style.display = modoAdmin ? 'flex' : 'none'; const bannerImg = document.getElementById('topBanner'); if(bannerImg){ bannerImg.style.cursor = modoAdmin ? 'pointer' : 'default'; bannerImg.onclick = modoAdmin ? ()=>{ if(pedirSenhaEsperada(SENHA_PERS)) acaoTrocarBanner(); else alert('Senha incorreta.'); } : null; } // botão modo admin const modoBtn = document.getElementById('modoBtnFooter'); if(modoBtn) modoBtn.textContent = modoAdmin ? 'Versão Cliente' : 'Versão Administrador'; } /* Conversor simples para garantir cores válidas */ function safeHex(h){ if(!h) return '#ffffff'; h = h.trim(); if(h[0] !== '#') h = '#'+h; if(/^#[0-9a-fA-F]{6}$/.test(h)) return h; if(/^#[0-9a-fA-F]{3}$/.test(h)){ return '#'+h[1]+h[1]+h[2]+h[2]+h[3]+h[3]; } return '#ffffff'; } /* Pequeno ajuste: garantir ids em produtos existentes */ function garantirIdsEmProdutos(){ let mudou = false; produtos.forEach(p=>{ if(!p.id){ p.id = uid(); mudou = true; } if(typeof p.estoque === 'undefined' || p.estoque === null) p.estoque = 0; }); if(mudou) salvarLocalStorage(); } /* Controle de teclas escape para fechar modais */ document.addEventListener('keydown', (e)=>{ if(e.key === 'Escape'){ fecharCarrinho(); fecharZoomImagem(); fecharModalPedido(); closeCheckout(); } }); /* Fix: quando entra no admin via botão footer (usado em parte1) chamamos entrarModoAdmin() */ function entrarModoAdmin(){ if(modoAdmin){ modoAdmin = false; atualizarBannerUI(); renderProdutos(); alert("Modo administrador desativado."); return; } const ok = pedirSenhaEsperada(SENHA_ADMIN); if(!ok){ alert("Senha incorreta."); return; } modoAdmin = true; atualizarBannerUI(); mostrarPainelAdmin(); alert("Modo administrador ativado!"); } /* Pequena função para abrir checkout modal com opções (usa finalizarPedidoXXX já existentes) */ function abrirPagamento(){ if(carrinho.length === 0){ alert("Seu carrinho está vazio!"); return; } const total = carrinho.reduce((s,i)=> s + (parseFloat(i.preco||0) * parseInt(i.quantidade||1,10)), 0).toFixed(2); const co = document.getElementById('checkoutOptions'); co.innerHTML = ` `; const ct = document.getElementById('checkoutTotal'); if(ct) ct.textContent = total; const modal = document.getElementById('checkoutModal'); if(modal){ modal.style.display = 'flex'; document.body.style.overflow = 'hidden'; } } /* fechar checkout */ function closeCheckout(){ const modal = document.getElementById('checkoutModal'); if(modal){ modal.style.display = 'none'; document.body.style.overflow = ''; } } /* Ao adicionar ou remover itens, atualizamos badge */ function atualizarBadgeCarrinho(){ const btnFoot = document.getElementById('btnCarrinhoFooter'); const qtd = carrinho.reduce((s,i)=> s + (parseInt(i.quantidade||1,10) || 0), 0); if(btnFoot) btnFoot.textContent = qtd>0 ? `Carrinho 🛒 (${qtd})` : 'Carrinho 🛒'; // também atualiza botão do pedido grande (se quiser) const btnPedido = document.getElementById('btnPedido'); if(btnPedido) btnPedido.textContent = qtd>0 ? `🛒 Finalizar Pedido (${qtd})` : '🛒 Finalizar Pedido'; } /* Ajuste: ao carregar, garantir que banner esteja presente */ function aplicarBannerInicial(){ const b = document.getElementById('topBanner'); if(b){ b.src = bannerSrc || 'https://via.placeholder.com/1200x300.png?text=Seu+Banner+Aqui'; } } /* ============================ INICIALIZAÇÃO FINAL (BOOT) ============================ */ (function boot(){ carregarLocalStorage(); garantirIdsEmProdutos(); aplicarBannerInicial(); atualizarBannerUI(); renderProdutos(); atualizarBadgeCarrinho(); // Se já houver chave PIX salva, mantemos (painel usa localStorage) // Ativa listeners que possam não ter sido definidos anteriormente const btnCheckout = document.getElementById('checkoutBox'); // nothing extra for now // console log para debug console.log('App iniciado — produtos:', produtos.length, 'carrinho:', carrinho.length); })();

Comentários

Postagens mais visitadas deste blog

Atualização 1

P

Paula