迁移银行弹窗业务脚本
This commit is contained in:
@@ -2518,183 +2518,3 @@ async function generateWechatBindCode() {
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let bankRankPage = 1;
|
||||
let bankRankSort = 'desc';
|
||||
|
||||
/** 切换 Tab */
|
||||
function switchBankTab(tabName) {
|
||||
document.getElementById('bank-tabbtn-account').classList.remove('active');
|
||||
document.getElementById('bank-tabbtn-ranking').classList.remove('active');
|
||||
document.getElementById('bank-view-account').style.display = 'none';
|
||||
document.getElementById('bank-view-ranking').style.display = 'none';
|
||||
|
||||
document.getElementById('bank-tabbtn-' + tabName).classList.add('active');
|
||||
document.getElementById('bank-view-' + tabName).style.display = 'flex';
|
||||
|
||||
if (tabName === 'ranking' && bankRankPage === 1 && document.getElementById('bank-ranking-list').innerHTML.includes('加载中')) {
|
||||
fetchBankRanking(1);
|
||||
}
|
||||
}
|
||||
|
||||
/** 打开弹窗 */
|
||||
function openBankModal() {
|
||||
document.getElementById('bank-modal').style.display = 'flex';
|
||||
switchBankTab('account');
|
||||
bankLoadInfo();
|
||||
}
|
||||
|
||||
/** 关闭弹窗 */
|
||||
function closeBankModal() {
|
||||
document.getElementById('bank-modal').style.display = 'none';
|
||||
}
|
||||
|
||||
/** 存取款合并 */
|
||||
async function bankAction(type) {
|
||||
const inputEl = document.getElementById(`bank-${type}-input`);
|
||||
const btnEl = document.getElementById(`bank-${type}-btn`);
|
||||
const amount = parseInt(inputEl.value, 10);
|
||||
if (!amount || amount <= 0) {
|
||||
bankShowMsg('请输入有效的金额', false);
|
||||
return;
|
||||
}
|
||||
|
||||
btnEl.disabled = true;
|
||||
try {
|
||||
const res = await fetch(`/bank/${type}`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ amount }),
|
||||
});
|
||||
const data = await res.json();
|
||||
bankShowMsg(data.message, data.status === 'success');
|
||||
if (data.status === 'success') {
|
||||
inputEl.value = '';
|
||||
bankLoadInfo();
|
||||
if (document.getElementById('bank-view-ranking').style.display !== 'none') {
|
||||
fetchBankRanking(bankRankPage);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
bankShowMsg('网络异常,请稍后重试', false);
|
||||
}
|
||||
btnEl.disabled = false;
|
||||
}
|
||||
|
||||
/** 获取资金与流水 */
|
||||
async function bankLoadInfo() {
|
||||
try {
|
||||
const res = await fetch('/bank', { headers: { 'Accept': 'application/json' } });
|
||||
const data = await res.json();
|
||||
if (data.status !== 'success') return;
|
||||
|
||||
document.getElementById('bank-jjb-display').textContent = data.jjb.toLocaleString();
|
||||
document.getElementById('bank-bank-display').textContent = data.bank_jjb.toLocaleString();
|
||||
|
||||
if (window.chatContext) {
|
||||
window.chatContext.myGold = data.jjb;
|
||||
window.chatContext.bankGold = data.bank_jjb;
|
||||
}
|
||||
|
||||
const list = document.getElementById('bank-logs-list');
|
||||
if (data.logs.length === 0) {
|
||||
list.innerHTML = '<div style="text-align:center;color:#9db3d4;font-size:12px;padding:30px 0;">暂无记录</div>';
|
||||
return;
|
||||
}
|
||||
list.innerHTML = data.logs.map(log => {
|
||||
const isDeposit = log.type === 'deposit';
|
||||
const cls = isDeposit ? 'bank-log-deposit' : 'bank-log-withdraw';
|
||||
const sign = isDeposit ? '+ 存入' : '- 取出';
|
||||
const dt = log.created_at.replace('T', ' ').substring(0, 16);
|
||||
return `<div class="bank-log-item">
|
||||
<span class="${cls}">${sign} ${log.amount.toLocaleString()} 金币</span>
|
||||
<span style="color:#64748b;">余额: <strong style="color:#334155">${log.balance_after.toLocaleString()}</strong></span>
|
||||
<span style="color:#94a3b8;">${dt}</span>
|
||||
</div>`;
|
||||
}).join('');
|
||||
} catch (e) {
|
||||
document.getElementById('bank-logs-list').innerHTML = '<div style="text-align:center;color:#ef4444;font-size:12px;padding:30px 0;">加载失败</div>';
|
||||
}
|
||||
}
|
||||
|
||||
function bankShowMsg(msg, success) {
|
||||
const el = document.getElementById('bank-op-msg');
|
||||
el.textContent = msg;
|
||||
el.style.background = success ? '#f0fdf4' : '#fef2f2';
|
||||
el.style.border = success ? '1px solid #bbf7d0' : '1px solid #fecaca';
|
||||
el.style.color = success ? '#16a34a' : '#ef4444';
|
||||
el.style.display = 'block';
|
||||
clearTimeout(el._t);
|
||||
el._t = setTimeout(() => { el.style.display = 'none'; }, 3000);
|
||||
}
|
||||
|
||||
function toggleBankRankSort() {
|
||||
bankRankSort = bankRankSort === 'desc' ? 'asc' : 'desc';
|
||||
document.getElementById('bank-rank-sort-btn').textContent = bankRankSort === 'desc' ? '降序 ↓' : '升序 ↑';
|
||||
fetchBankRanking(1);
|
||||
}
|
||||
|
||||
async function fetchBankRanking(page) {
|
||||
if (page < 1) return;
|
||||
const listEl = document.getElementById('bank-ranking-list');
|
||||
listEl.innerHTML = '<div style="text-align:center; color:#9db3d4; font-size:12px; padding:30px 0;">加载中...</div>';
|
||||
|
||||
try {
|
||||
const res = await fetch(`/bank/ranking?page=${page}&sort=${bankRankSort}`, { headers: {'Accept': 'application/json'} });
|
||||
const data = await res.json();
|
||||
|
||||
if (data.status === 'success') {
|
||||
bankRankPage = data.pagination.current_page;
|
||||
document.getElementById('bank-rank-page-info').textContent = `${bankRankPage} / ${data.pagination.last_page}`;
|
||||
|
||||
const btnPrev = document.getElementById('bank-rank-prev');
|
||||
const btnNext = document.getElementById('bank-rank-next');
|
||||
|
||||
btnPrev.disabled = bankRankPage <= 1;
|
||||
btnPrev.style.opacity = bankRankPage <= 1 ? 0.5 : 1;
|
||||
btnNext.disabled = bankRankPage >= data.pagination.last_page;
|
||||
btnNext.style.opacity = bankRankPage >= data.pagination.last_page ? 0.5 : 1;
|
||||
|
||||
if (data.ranking.length === 0) {
|
||||
listEl.innerHTML = '<div style="text-align:center; color:#9db3d4; font-size:12px; padding:30px 0;">暂无数据</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
let html = '';
|
||||
data.ranking.forEach((u, index) => {
|
||||
const absNum = (bankRankPage - 1) * 20 + index + 1;
|
||||
let rankCls = '';
|
||||
if (bankRankSort === 'desc' && bankRankPage === 1) {
|
||||
if (absNum === 1) rankCls = 'bank-rank-top1';
|
||||
else if (absNum === 2) rankCls = 'bank-rank-top2';
|
||||
else if (absNum === 3) rankCls = 'bank-rank-top3';
|
||||
}
|
||||
html += `
|
||||
<div class="bank-rank-item">
|
||||
<div class="bank-rank-num ${rankCls}">${absNum}</div>
|
||||
<img src="${u.headfaceUrl || ''}" onerror="this.src='/images/headface/1.gif'" style="width:32px; height:32px; border-radius:50%; object-fit:cover; border:1px solid #d0e4f5;">
|
||||
<div>
|
||||
<div style="font-weight:bold; color:#1e3a8a;">${u.username} <span style="font-size:12px;">${u.sex === '女' ? '♀' : '♂'}</span></div>
|
||||
</div>
|
||||
<div class="bank-rank-val">
|
||||
🏦 ${Number(u.bank_jjb).toLocaleString()}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
listEl.innerHTML = html;
|
||||
}
|
||||
} catch (e) {
|
||||
listEl.innerHTML = '<div style="text-align:center; color:#ef4444; font-size:12px; padding:30px 0;">拉取失败</div>';
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('bank-modal').addEventListener('click', function(e) {
|
||||
if (e.target === this) closeBankModal();
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user