Mulai **jualan** cepat: katalog, keranjang, checkout.

Pakai **voucher JUAL10**, hitung **ongkir** (region), **stok** otomatis berkurang, **cetak struk**, dan **share WhatsApp**. Semua data **lokal**, tanpa integrasi pembayaran.

Lihat Katalog Tambah Produk

Katalog

Checkout

Isi data pembeli & pengiriman

Data Pembeli

Pengiriman

Order

Kelola pesanan masuk
KodePembeliItemsTotalStatusAksi

Admin

Tambah produk baru

Gambar disimpan sebagai DataURL lokal (tidak diupload).

`; w.document.write(html); w.document.close(); w.focus(); setTimeout(()=> w.print(), 300); } function subFmt(n){ return new Intl.NumberFormat('id-ID').format(Math.round(n)); } function shareWA(o){ const text = `Halo, ini pesanan ${o.code}%0A%0A`+ o.items.map(i=>`- ${i.name} x${i.qty} @ ${subFmt(i.price)} = ${subFmt(i.subtotal)}`).join('%0A')+ `%0A%0ASubtotal: ${subFmt(o.sub)}%0ADiskon: -${subFmt(o.voc)}%0AOngkir: ${subFmt(o.shipCost)}%0ATotal: ${subFmt(o.total)}%0A`+ `Pembayaran: ${o.pay}%0APengiriman: ${o.ship}%0A%0ANama: ${encodeURIComponent(o.buyer.name)}%0AWA: ${encodeURIComponent(o.buyer.phone)}%0AAlamat: ${encodeURIComponent(o.buyer.addr)}`; const url = `https://wa.me/?text=${text}`; const a=document.createElement('a'); a.href=url; a.target='_blank'; a.click(); } // ===== Orders ===== function renderOrders(){ const list=loadOrders(); orderTable.innerHTML=''; list.forEach(o=>{ const tr=document.createElement('tr'); tr.innerHTML = `${o.code}${o.buyer.name}${o.items.map(i=>i.name+'×'+i.qty).join(', ')}${fmtIDR(o.total)}${o.status} `; orderTable.appendChild(tr); }); orderTable.addEventListener('click', (e)=>{ const id=e.target?.dataset?.id; const act=e.target?.dataset?.act; if(!id||!act) return; const list=loadOrders(); const o=list.find(x=>x.code===id); if(!o) return; if(act==='print') printInvoice(o); if(act==='wa') shareWA(o); if(act==='done'){ o.status='selesai'; saveOrders(list); renderOrders(); } }, {once:true}); } exCSV.addEventListener('click', ()=>{ const rows=loadOrders().map(o=>[o.code,o.buyer.name,o.buyer.phone,`"${o.items.map(i=>i.name+'x'+i.qty).join(' ')}"`,o.total,o.status,o.time].join(',')); const head='code,name,phone,items,total,status,time'; const csv=[head,...rows].join('\n'); const blob=new Blob([csv],{type:'text/csv'}); const url=URL.createObjectURL(blob); const a=document.createElement('a'); a.href=url; a.download='kioskuy-orders.csv'; a.click(); setTimeout(()=>URL.revokeObjectURL(url),500); }); resetAll.addEventListener('click', ()=>{ if(!confirm('Hapus semua data (produk, order, cart)?')) return; localStorage.removeItem(P_KEY); localStorage.removeItem(O_KEY); localStorage.removeItem(C_KEY); renderCatalog(); renderAdminList(); renderOrders(); updateCartBadge(); }); // ===== Init ===== function init(){ renderCatalog(); renderAdminList(); renderOrders(); updateCartBadge(); computeSummary(); } init(); // Smooth scroll document.querySelectorAll('a[href^="#"]').forEach(a=>{ a.addEventListener('click', e=>{ const id=a.getAttribute('href'); if(id && id.length>1){ const el=document.querySelector(id); if(el){ e.preventDefault(); el.scrollIntoView({behavior:'smooth'}); } } }); })