feat: icons on the buttons, delivery, payment, status and Kanban
All checks were successful
Build and deploy / Validate source (push) Successful in 5s
Build and deploy / Integration suite on a real stack (push) Successful in 2m40s
Build and deploy / Secret scan and release gate (push) Successful in 5s
Build and deploy / Publish images (push) Successful in 53s
All checks were successful
Build and deploy / Validate source (push) Successful in 5s
Build and deploy / Integration suite on a real stack (push) Successful in 2m40s
Build and deploy / Secret scan and release gate (push) Successful in 5s
Build and deploy / Publish images (push) Successful in 53s
- Buttons: add to cart (bag with plus), go to payment (lock), remove from the cart (bin). - Delivery: a pin for pickup in Franca, a truck for home delivery. - Payment: card and QR code on the methods, copy on the PIX code, a clock on its countdown, a check on the confirmation. - Status: a check when the files are sent, check, alert, redo and cross in the quality list instead of Unicode symbols, and a check on finished steps. - Kanban: a truck or pin for where an order goes, a speech bubble on the WhatsApp link, a download arrow on the file buttons. All Lucide shapes drawn inline, as in the header. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -150,7 +150,7 @@
|
||||
const tempo=s=>s<60 ? 'menos de 1 min' : 'cerca de '+Math.ceil(s/60)+' min';
|
||||
function textoEnvio(e) {
|
||||
if (!e) return '';
|
||||
if (e.fase==='pronto') return 'Arquivos enviados ✓';
|
||||
if (e.fase==='pronto') return 'Arquivos enviados';
|
||||
if (e.fase==='verificando') return 'Arquivos enviados · verificando a segurança…';
|
||||
// Until the speed is measured, the range from the file size.
|
||||
return 'Enviando seus arquivos: '+e.pct+'% · '+mb(e.sent)+' de '+mb(e.total)+' · '+
|
||||
@@ -181,6 +181,7 @@
|
||||
const i=document.createElement('i'); i.style.width=(e.fase==='verificando'?100:e.pct)+'%'; barra.append(i);
|
||||
el.append(barra);
|
||||
}
|
||||
if (e?.fase==='pronto') el.insertAdjacentHTML('beforeend', icone('okCirculo'));
|
||||
if (texto) el.append(document.createTextNode(texto));
|
||||
el.classList.toggle('ok', e?.fase==='pronto');
|
||||
}
|
||||
@@ -188,7 +189,7 @@
|
||||
if (topo) topo.textContent = !e || e.fase==='pronto' ? '' : e.fase==='verificando' ? '· verificando' : '· enviando '+e.pct+'%';
|
||||
if (busy && texto) {
|
||||
message(texto);
|
||||
$('bPagar').textContent = e && e.fase!=='pronto' ? (e.fase==='verificando' ? 'Verificando os arquivos…' : 'Enviando arquivos… '+e.pct+'%') : $('bPagar').textContent;
|
||||
$('bPagarTx').textContent = e && e.fase!=='pronto' ? (e.fase==='verificando' ? 'Verificando os arquivos…' : 'Enviando arquivos… '+e.pct+'%') : $('bPagarTx').textContent;
|
||||
}
|
||||
}
|
||||
// Leaving the page pauses an upload; it resumes, but the customer is warned.
|
||||
@@ -388,7 +389,9 @@
|
||||
function confirmado(quote) {
|
||||
clearInterval(waitTimer);
|
||||
const box=node('div',null,'confirmado');
|
||||
box.append(node('h4','Pagamento confirmado'),
|
||||
const titulo=node('h4','Pagamento confirmado');
|
||||
titulo.insertAdjacentHTML('afterbegin', icone('okCirculo'));
|
||||
box.append(titulo,
|
||||
node('p','Pedido #'+quote.order.number+' recebido e enviado para a produção. Você acompanha cada etapa em Meus pedidos.'));
|
||||
button('Ver meus pedidos',()=>location.assign('/portal.html?order='+quote.order.id),box);
|
||||
actions.append(box);
|
||||
@@ -406,6 +409,7 @@
|
||||
const radios=opcoes.map(([key,label])=>{
|
||||
const el=button(label,()=>{ if(escolhido!==key){ escolhido=key; pinta(); } },grupo,'metodo');
|
||||
el.setAttribute('role','radio'); el.dataset.metodo=key;
|
||||
el.insertAdjacentHTML('afterbegin', icone(key==='pix'?'qrcode':'cartao'));
|
||||
return el;
|
||||
});
|
||||
actions.append(node('h4','Forma de pagamento'),grupo,area);
|
||||
@@ -453,10 +457,14 @@
|
||||
code.readOnly=true;code.value=intent.pix_qr_code;code.setAttribute('aria-label','Código PIX copia e cola');
|
||||
linha.append(code);
|
||||
const copiar=button('Copiar código',async()=>{
|
||||
try{ await navigator.clipboard.writeText(intent.pix_qr_code); copiar.textContent='Código copiado'; }
|
||||
try{ await navigator.clipboard.writeText(intent.pix_qr_code);
|
||||
copiar.replaceChildren(); copiar.insertAdjacentHTML('beforeend', icone('ok')+'<span>Código copiado</span>'); }
|
||||
catch(_){ code.select(); }
|
||||
},linha);
|
||||
copiar.insertAdjacentHTML('afterbegin', icone('copiar'));
|
||||
const prazo=node('p',null,'prazo');
|
||||
prazo.insertAdjacentHTML('afterbegin', icone('relogio'));
|
||||
const prazoTx=node('span'); prazo.append(prazoTx);
|
||||
box.append(linha,prazo,node('p','Aguardando a confirmação do pagamento…','aguarda'));
|
||||
actions.append(box);
|
||||
waitForOrder();
|
||||
@@ -465,7 +473,7 @@
|
||||
if (!Number.isFinite(fim)) { prazo.remove(); return; }
|
||||
const tick=()=>{
|
||||
const s=Math.max(0,Math.ceil((fim-Date.now())/1000));
|
||||
prazo.textContent='Pague em '+String(Math.floor(s/60)).padStart(2,'0')+':'+String(s%60).padStart(2,'0');
|
||||
prazoTx.textContent='Pague em '+String(Math.floor(s/60)).padStart(2,'0')+':'+String(s%60).padStart(2,'0');
|
||||
if (s>0) return;
|
||||
clearInterval(pixClock);
|
||||
const fimBox=node('div',null,'pixBox');
|
||||
|
||||
Reference in New Issue
Block a user