Spaces:
Running
Running
Create payment.html
Browse files- payment.html +74 -0
payment.html
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
| 6 |
+
<title>Buy Coins - Recap Studio</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
|
| 10 |
+
<style>
|
| 11 |
+
*{margin:0;padding:0;box-sizing:border-box}
|
| 12 |
+
body{font-family:'Plus Jakarta Sans',sans-serif;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);min-height:100vh;padding:20px}
|
| 13 |
+
.container{max-width:500px;margin:0 auto}
|
| 14 |
+
.header{text-align:center;margin-bottom:24px}
|
| 15 |
+
.header h1{color:white;font-size:1.8rem}
|
| 16 |
+
.packages{display:grid;gap:12px;margin-bottom:24px}
|
| 17 |
+
.package{background:white;border-radius:16px;padding:16px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;border:2px solid transparent;transition:all .2s}
|
| 18 |
+
.package.selected{border-color:#5b4cf5;background:#f5f3ff}
|
| 19 |
+
.package-info h3{font-size:1rem;margin-bottom:4px}
|
| 20 |
+
.package-info .coins{font-size:1.3rem;font-weight:800;color:#5b4cf5}
|
| 21 |
+
.package-info .price{font-size:.75rem;color:#666}
|
| 22 |
+
.radio{width:22px;height:22px;border-radius:50%;border:2px solid #ddd;background:white}
|
| 23 |
+
.package.selected .radio{border-color:#5b4cf5;background:#5b4cf5;box-shadow:inset 0 0 0 4px white}
|
| 24 |
+
.payment-info{background:white;border-radius:16px;padding:20px;margin-bottom:20px}
|
| 25 |
+
.payment-info h3{margin-bottom:12px;font-size:1rem}
|
| 26 |
+
.bank-details{background:#f8f9fa;border-radius:12px;padding:16px;margin-bottom:16px}
|
| 27 |
+
.bank-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:.85rem}
|
| 28 |
+
.bank-label{color:#666}
|
| 29 |
+
.bank-value{font-weight:600;color:#333}
|
| 30 |
+
.copy-btn{background:#e9ecef;border:none;padding:4px 10px;border-radius:6px;font-size:.7rem;cursor:pointer;margin-left:8px}
|
| 31 |
+
.slip-area{margin-top:16px}
|
| 32 |
+
.slip-label{font-size:.8rem;font-weight:600;margin-bottom:8px;display:block}
|
| 33 |
+
.slip-input{width:100%;padding:12px;border:1.5px solid #e2e4ee;border-radius:10px;font-family:inherit;cursor:pointer}
|
| 34 |
+
.slip-preview{margin-top:12px;max-width:100%;max-height:200px;display:none;border-radius:8px}
|
| 35 |
+
.submit-btn{width:100%;padding:14px;background:linear-gradient(135deg,#5b4cf5,#8b5cf6);border:none;border-radius:12px;color:white;font-weight:700;font-size:1rem;cursor:pointer;transition:.2s;margin-top:16px}
|
| 36 |
+
.submit-btn:disabled{opacity:.5;cursor:not-allowed}
|
| 37 |
+
.back-btn{background:transparent;border:1px solid white;color:white;padding:10px;border-radius:10px;width:100%;font-size:.85rem;cursor:pointer;margin-top:12px}
|
| 38 |
+
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:#333;color:white;padding:10px 20px;border-radius:30px;font-size:.8rem;opacity:0;transition:.2s;pointer-events:none}
|
| 39 |
+
.toast.show{opacity:1}
|
| 40 |
+
</style>
|
| 41 |
+
</head>
|
| 42 |
+
<body>
|
| 43 |
+
<div class="container">
|
| 44 |
+
<div class="header"><h1>π° Buy Coins</h1></div>
|
| 45 |
+
<div class="packages" id="packages">
|
| 46 |
+
<div class="package" data-coins="10" data-price="10,000 MMK" onclick="selectPackage(this)"><div class="package-info"><h3>π₯ Starter</h3><div class="coins">10 Coins</div><div class="price">10,000 MMK</div></div><div class="radio"></div></div>
|
| 47 |
+
<div class="package" data-coins="30" data-price="28,000 MMK" onclick="selectPackage(this)"><div class="package-info"><h3>β Basic</h3><div class="coins">30 Coins</div><div class="price">28,000 MMK</div></div><div class="radio"></div></div>
|
| 48 |
+
<div class="package" data-coins="60" data-price="58,000 MMK" onclick="selectPackage(this)"><div class="package-info"><h3>π₯ Pro</h3><div class="coins">60 Coins</div><div class="price">58,000 MMK</div></div><div class="radio"></div></div>
|
| 49 |
+
<div class="package" data-coins="100" data-price="95,000 MMK" onclick="selectPackage(this)"><div class="package-info"><h3>π Unlimited</h3><div class="coins">100 Coins</div><div class="price">95,000 MMK</div></div><div class="radio"></div></div>
|
| 50 |
+
</div>
|
| 51 |
+
<div class="payment-info">
|
| 52 |
+
<h3>πΈ Payment Method</h3>
|
| 53 |
+
<div class="bank-details">
|
| 54 |
+
<div class="bank-row"><span class="bank-label">KBZ Pay</span><span class="bank-value">PHOE SHAN<button class="copy-btn" onclick="copyText('PHOE SHAN')">Copy</button></span></div>
|
| 55 |
+
<div class="bank-row"><span class="bank-label">Phone Number</span><span class="bank-value">09679871352<button class="copy-btn" onclick="copyText('09679871352')">Copy</button></span></div>
|
| 56 |
+
</div>
|
| 57 |
+
<div class="slip-area"><label class="slip-label">πΈ Upload Payment Slip (Screenshot)</label><input type="file" id="slipImage" class="slip-input" accept="image/*"><img id="slipPreview" class="slip-preview"></div>
|
| 58 |
+
<button class="submit-btn" id="submitBtn" onclick="submitPayment()">π€ Submit Payment</button>
|
| 59 |
+
<button class="back-btn" onclick="window.location.href='/app'">β Back to App</button>
|
| 60 |
+
</div>
|
| 61 |
+
</div>
|
| 62 |
+
<div id="toast" class="toast"></div>
|
| 63 |
+
|
| 64 |
+
<script>
|
| 65 |
+
let selectedPackage=null,selectedCoins=null,selectedPrice=null;
|
| 66 |
+
function selectPackage(el){document.querySelectorAll('.package').forEach(p=>p.classList.remove('selected'));el.classList.add('selected');selectedPackage=el;selectedCoins=el.dataset.coins;selectedPrice=el.dataset.price;}
|
| 67 |
+
function copyText(t){navigator.clipboard.writeText(t);showToast('β
Copied: '+t);}
|
| 68 |
+
function showToast(m){const t=document.getElementById('toast');t.textContent=m;t.classList.add('show');setTimeout(()=>t.classList.remove('show'),2000);}
|
| 69 |
+
document.getElementById('slipImage').addEventListener('change',function(e){const f=e.target.files[0];if(f){const r=new FileReader();r.onload=function(ev){const p=document.getElementById('slipPreview');p.src=ev.target.result;p.style.display='block';};r.readAsDataURL(f);}});
|
| 70 |
+
async function submitPayment(){if(!selectedPackage){showToast('β Please select a package');return;}const slipFile=document.getElementById('slipImage').files[0];if(!slipFile){showToast('β Please upload payment slip');return;}const user=sessionStorage.getItem('recap_user');if(!user){showToast('β Please login first');window.location.href='/login';return;}const username=JSON.parse(user).u;const btn=document.getElementById('submitBtn');btn.disabled=true;btn.textContent='β³ Submitting...';const reader=new FileReader();reader.onload=async function(ev){try{const res=await fetch('/api/payment/submit',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({username:username,coins:parseInt(selectedCoins),price:selectedPrice,slip_image:ev.target.result})});const data=await res.json();if(data.ok){showToast('β
Payment submitted! Waiting for admin approval.');setTimeout(()=>{window.location.href='/payment-history';},1500);}else{showToast('β '+data.msg);btn.disabled=false;btn.textContent='π€ Submit Payment';}}catch(err){showToast('β Network error');btn.disabled=false;btn.textContent='π€ Submit Payment';}};reader.readAsDataURL(slipFile);}
|
| 71 |
+
setTimeout(()=>{const fp=document.querySelector('.package');if(fp)selectPackage(fp);},100);
|
| 72 |
+
</script>
|
| 73 |
+
</body>
|
| 74 |
+
</html>
|