const screen = document.querySelector('#screen');
const tabs = document.querySelector('#tabs');
const dialog = document.querySelector('#dialog');
const toast = document.querySelector('#toast');
const historyStack = [];
let page = 'home', expired = false, hidden = false, claimed = false, reward = false;
let balance = 1784159.47, toastTimer;
const entries = [];
const money = (value, decimals = 0) => value.toLocaleString('en-US', {minimumFractionDigits:decimals, maximumFractionDigits:decimals});
const tabNames = {home:'首页', order:'收益', team:'团队', me:'我的'};
const paths = {home:'M3 10 12 3l9 7v10H14v-6h-4v6H3z',order:'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-3 5 8 3-3 8-8-3z',team:'M9 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0 1c-5 0-8 3-8 6v2h16v-2c0-3-3-6-8-6zm8-9a4 4 0 0 1 0 8 6 6 0 0 0 0-8zm1 9c4 1 5 3 5 6v2h-4v-2a9 9 0 0 0-1-6z',me:'M12 2a5 5 0 1 0 0 10 5 5 0 0 0 0-10zm0 11c-6 0-9 3-9 6 0 2 2 3 9 3s9-1 9-3c0-3-3-6-9-6z'};
const shortcuts = [
['充值','deposit','¥','#9b4e14','#fcebd5'],['提现','withdraw','↗','#127b4d','#d3f6df'],
['幸运抽奖','draw','✦','#06679c','#d9f0f8'],['提现记录','withdrawRecords','▤','#6344b9','#e8e0fc'],
['红包','cash','¥','#a4492b','#ffded5'],['消息','messages','●','#2863b5','#dce8fb'],
['客服','customer','◉','#483ab1','#dedcfa'],['提现凭证','proof','¥','#a52e50','#fbdde6']
];
function title(label, right = '') {
const back = tabNames[page] ? '' : '‹ ';
return ''+back+''+label+' '+right+' ';
}
function go(label, target, cls = '') {
return ''+label+' ';
}
function quick(items, originalIcons = false) {
return '
'+items.map(([label,target,icon,accent='#2547ba',tint='#edf1ff'], index) =>
go((originalIcons ? '
' : '
'+icon+' ')+'
'+label+' ',target)).join('')+'
';
}
function menu(items) {
return '';
}
function notify(message) {
toast.textContent = message;
toast.classList.add('show');
clearTimeout(toastTimer);
toastTimer = setTimeout(() => toast.classList.remove('show'),2300);
}
function showDialog(html) {
document.querySelector('#dialog-body').innerHTML = html;
if (!dialog.open) dialog.showModal();
}
function navigate(target) {
if (page === target) return;
if (tabNames[target]) historyStack.length = 0;
else historyStack.push(page);
page = target;
render();
}
function project(index) {
return '黄金矿场 周期(天): 5
剩余名额: 1/1
每日收益 141.6
累计收益 708
'+go('投入 1,500','project','wide '+(index===0?'orange':'primary'))+'
';
}
function incomeCard(index) {
const times = expired ? [0,0,0,0] : [40,23,23,40];
return '优质黄金 到期时间 2025/08/28 13:49:47
平均每小时收益 85
累计收益 '+(claimed && !expired && index===0?'10,285':'0')+'
投入金额 4,000
'+times.map((time,i)=>''+time+''+['天','时','分','秒'][i]+' ').join('')+'
'+(expired||claimed?'+0':'+10,285')+' 领取 ';
}
function metric(value,label) {return ''+value+''+label+' ';}
function walletBalance() {return ''+money(balance,2)+' 可用余额(演示)
';}
function field(label,placeholder,type='text') {
return ''+label+' ';
}
function demoForm(body, label = '提交') {
return '';
}
function records(kind) {
const rows = entries.filter(entry=>kind==='bill'||entry.kind===kind);
if (!rows.length && kind==='deposit') return '暂无模拟充值记录。
';
const samples = kind==='bill' ? ['提现退回','项目收益','提现','项目本金'] : ['审核中','已通过','未通过'];
return rows.map(entry=>''+entry.label+''+money(entry.amount)+'
本地演示记录 ').join('') +
(kind==='deposit'?'':samples.map(item=>''+(kind==='bill'?item:'订单号: 20250703002383855')+''+ (kind==='bill'?'':item)+'
2025-08-24 15:58:03 '+ (kind==='bill'?'50,000':'153,900')+'
').join(''));
}
function transfer(kind) {
const deposit = kind==='deposit', label = deposit?'充值':'提现';
const top = title(label,deposit?go('记录','depositRecords','right'):'规则 ');
const choices = [500,1500,4000,6000,10000,15000,25000,50000,100000];
const presets = '充值金额
'+choices.map(n=>''+money(n)+' ').join('')+'
支付渠道Heypay(演示) 银行(演示) ';
return top+''+(deposit?'':walletBalance())+'演示金额,仅供预览 '+(deposit?'':go('提现记录','withdrawRecords','link'))+' ';
}
const views = {
home:()=>''+money(balance,2)+' 余额 现金 ⌁
'+quick(shortcuts,true)+'◀ 132****7890 提现 49,020(演示)
◈ 主要项目 '+[0,1,2].map(project).join('')+' ',
order:()=>title('收益')+'进行中 已到期
'+[0,1].map(incomeCard).join('')+' ',
team:()=>title('邀请详情')+'邀请好友 查看团队与邀请奖励
'+[0,1,2,3].map((n)=>''+metric(n?'第'+n+'级':'合计','层级')+(n?metric([10,2,1][n-1]+'%','返佣比例'):'')+metric(n?'10':'27','人数')+metric('100 ','返佣')+'
').join('')+'邀请码: 6265844 复制
邀请链接演示邀请链接 复制
分享方式 '+['WhatsApp','Telegram','Facebook','Twitter','短信'].map(name=>'● '+name+' ').join('')+'
',
me:()=>'◈ 132****3344邀请码: 6265844
简体中文 '+(hidden?'••••••':money(balance,2))+'
余额 '+(hidden?'◌':'◉')+'
'+quick([['我的钱包','wallet','▣'],['充值记录','depositRecords','↘'],['提现记录','withdrawRecords','↗'],['余额账单','bill','▤']])+menu([['联系客服','customer','◉'],['常见问题','faq','?'],['修改密码','password','▣']])+menu([['意见反馈','feedback','✎'],['关于我们','about','ⓘ'],['使用条款','terms','▤'],['下载应用','download','▯'],['退出登录','login','↪']])+'打开管理后台 ↗ ',
wallet:()=>title('我的钱包')+''+walletBalance()+''+go('提现','withdraw','red')+go('充值','deposit','primary')+'
'+menu([['添加银行卡','account','▣']])+'提现凭证 '+records('withdraw')+' ',
project:()=>title('项目详情')+'黄金矿场 5 天 · 1,500 演示单位
以上为界面演示数据。
确认演示选择 ',
deposit:()=>transfer('deposit'),withdraw:()=>transfer('withdraw'),
depositRecords:()=>title('充值记录')+'',
withdrawRecords:()=>title('提现记录')+'',
bill:()=>title('余额账单')+'',
login:()=>'演示模式 简体中文
登录 还没有账号? '+go('立即注册','register','link')+'
可直接点击提交进入演示。 ',
register:()=>title('注册')+'',
draw:()=>title('幸运抽奖')+'邀请好友注册,体验幸运抽奖
幸运抽奖 剩余抽奖次数: '+(reward?0:1)+'
'+[2,5,10,50,100,200,300,500].map((value,i)=>''+value+' ').join('')+'
开始 排行 '+go('邀请好友','team','primary')+'记录
',
proof:()=>title('提现凭证')+'',
account:()=>title('提现账户')+''+demoForm(field('姓名','请输入演示姓名')+'银行示例银行(演示) '+field('账号','请输入演示银行账号'))+' ',
customer:()=>title('客服')+'快速响应 及时响应客服需求
'+menu([['WhatsApp 客服','messages','●'],['Telegram 群组','messages','➤']])+' ',
faq:()=>title('常见问题')+''+['如何充值?','如何提现?','在哪里查看余额?','如何使用邀请码?','在哪里查看演示记录?'].map((q,i)=>'
'+q+' '+['打开「充值」并选择模拟金额。','打开「提现」并输入至少 200 演示单位。','在「我的」中打开「我的钱包」。','在「团队」中复制演示邀请码。','在「我的」中打开「我的钱包」或「余额账单」。'][i]+'
').join('')+'
',
feedback:()=>title('意见反馈')+'',
password:()=>title('修改密码')+''+demoForm(field('新演示密码','请输入示例值','password'))+' ',
cash:()=>title('红包')+'演示奖励 查看奖励界面。/p>'+go('幸运抽奖','draw','primary')+'
',
messages:()=>title('消息')+'',
about:()=>title('关于我们')+'',
terms:()=>title('使用条款')+'',
download:()=>title('下载应用')+''
};
function render(resetScroll = true) {
screen.innerHTML = views[page]();
document.querySelector('.status').className = 'status '+page;
tabs.hidden = !tabNames[page];
tabs.innerHTML = Object.entries(tabNames).map(([target,label])=>' '+label+' ').join('');
if (resetScroll) document.querySelector('#app').scrollTop = 0;
}
document.addEventListener('click',async event=>{
const button = event.target.closest('button');
if (!button) return;
const {go:target, action, copy, amount} = button.dataset;
if (target) return navigate(target);
if (copy) {
try {await navigator.clipboard.writeText(copy);notify('已复制');}
catch {showDialog('复制演示内容 ');}
}
if (amount) {
button.form.elements.amount.value = amount;
button.form.querySelector('.active')?.classList.remove('active');
button.classList.add('active');
}
switch(action) {
case 'back': page=historyStack.pop()||'home';render();break;
case 'normal': case 'expired': expired=action==='expired';render(false);break;
case 'toggle': hidden=!hidden;render(false);break;
case 'receive':
if (claimed||expired) break;
claimed=true;balance+=10285;
entries.unshift({kind:'income',label:'已领取演示收益',amount:10285});
render(false);notify('已领取演示收益');break;
case 'rules': showDialog('提现规则 请输入至少 200 演示单位。
');break;
case 'invest': notify('已选择演示项目');break;
case 'rank': showDialog('排行 暂无演示排行榜。
');break;
case 'drawRecord': showDialog('抽奖记录 '+(reward?'演示抽奖奖励:2':'暂无演示抽奖记录。')+'
');break;
case 'spin':
if(reward) return notify('演示抽奖次数已用完');
reward=true;
screen.querySelector('.wheel').style.transform='rotate(1080deg)';
screen.querySelector('.count').textContent='剩余抽奖次数: 0';
setTimeout(()=>{if(page==='draw') notify('演示抽奖结果:2');}, matchMedia('(prefers-reduced-motion: reduce)').matches?0:1000);
break;
}
});
document.addEventListener('input',event=>{
if(event.target.name!=='amount') return;
for (const preset of event.target.form.querySelectorAll('[data-amount]')) {
preset.classList.toggle('active',preset.dataset.amount===event.target.value);
}
});
document.addEventListener('submit',event=>{
const form = event.target;
const type = form.dataset.form;
if(!type) return;
event.preventDefault();
if(type==='login') return navigate('home');
if(type==='demo') {form.reset();return notify('已在本地演示中提交');}
const amount = form.elements.amount.valueAsNumber;
if(type==='withdraw' && amount>balance) return notify('演示余额不足');
balance+=type==='deposit'?amount:-amount;
entries.unshift({kind:type,label:type==='deposit'?'模拟充值':'模拟提现',amount});
navigate(type==='deposit'?'depositRecords':'withdrawRecords');
notify('已添加演示记录');
});
render();