迁移银行弹窗基础按钮事件绑定

This commit is contained in:
2026-04-25 08:08:39 +08:00
parent 37e4c5d4c5
commit 1a750f2fe7
3 changed files with 96 additions and 8 deletions
+4
View File
@@ -19,6 +19,7 @@ export {
openAdminBaccaratLossCoverModal, openAdminBaccaratLossCoverModal,
submitBaccaratLossCoverEvent, submitBaccaratLossCoverEvent,
} from "./chat-room/baccarat-loss-cover-admin.js"; } from "./chat-room/baccarat-loss-cover-admin.js";
export { bindBankControls } from "./chat-room/bank-controls.js";
export { bindFishingControls } from "./chat-room/fishing.js"; export { bindFishingControls } from "./chat-room/fishing.js";
export { bindProfileControls } from "./chat-room/profile-controls.js"; export { bindProfileControls } from "./chat-room/profile-controls.js";
export { bindShopControls } from "./chat-room/shop-controls.js"; export { bindShopControls } from "./chat-room/shop-controls.js";
@@ -66,6 +67,7 @@ import {
openAdminBaccaratLossCoverModal, openAdminBaccaratLossCoverModal,
submitBaccaratLossCoverEvent, submitBaccaratLossCoverEvent,
} from "./chat-room/baccarat-loss-cover-admin.js"; } from "./chat-room/baccarat-loss-cover-admin.js";
import { bindBankControls } from "./chat-room/bank-controls.js";
import { bindFishingControls } from "./chat-room/fishing.js"; import { bindFishingControls } from "./chat-room/fishing.js";
import { bindProfileControls } from "./chat-room/profile-controls.js"; import { bindProfileControls } from "./chat-room/profile-controls.js";
import { bindShopControls } from "./chat-room/shop-controls.js"; import { bindShopControls } from "./chat-room/shop-controls.js";
@@ -119,6 +121,7 @@ if (typeof window !== "undefined") {
loadAdminCurrentLossCoverEvent, loadAdminCurrentLossCoverEvent,
openAdminBaccaratLossCoverModal, openAdminBaccaratLossCoverModal,
submitBaccaratLossCoverEvent, submitBaccaratLossCoverEvent,
bindBankControls,
bindFishingControls, bindFishingControls,
bindProfileControls, bindProfileControls,
bindShopControls, bindShopControls,
@@ -170,6 +173,7 @@ if (typeof window !== "undefined") {
bindToolbarControls(); bindToolbarControls();
bindAdminMenuControls(); bindAdminMenuControls();
bindBaccaratLossCoverAdminControls(); bindBaccaratLossCoverAdminControls();
bindBankControls();
bindFishingControls(); bindFishingControls();
bindProfileControls(); bindProfileControls();
bindShopControls(); bindShopControls();
+84
View File
@@ -0,0 +1,84 @@
// 金币银行基础按钮事件绑定,替代 toolbar 银行区域内联 onclick。
let bankControlEventsBound = false;
/**
* 调用银行存量全局函数。
*
* @param {string} functionName 全局函数名
* @param {...unknown} args 参数
* @returns {void}
*/
function callBankGlobal(functionName, ...args) {
if (typeof window[functionName] === "function") {
window[functionName](...args);
}
}
/**
* 从分页文本中解析当前页码。
*
* @returns {number}
*/
function resolveCurrentRankPage() {
const pageInfo = document.getElementById("bank-rank-page-info")?.textContent || "1 / 1";
const currentPage = Number.parseInt(pageInfo.split("/")[0]?.trim() || "1", 10);
return Number.isInteger(currentPage) && currentPage > 0 ? currentPage : 1;
}
/**
* 绑定银行 tab、存取款、排行榜排序与分页按钮事件。
*
* @returns {void}
*/
export function bindBankControls() {
if (bankControlEventsBound || typeof document === "undefined") {
return;
}
bankControlEventsBound = true;
document.addEventListener("click", (event) => {
if (!(event.target instanceof Element)) {
return;
}
const tabButton = event.target.closest("[data-bank-tab]");
if (tabButton) {
event.preventDefault();
callBankGlobal("switchBankTab", tabButton.getAttribute("data-bank-tab") || "");
return;
}
if (event.target.closest("[data-bank-modal-close]")) {
event.preventDefault();
callBankGlobal("closeBankModal");
return;
}
const actionButton = event.target.closest("[data-bank-action]");
if (actionButton) {
event.preventDefault();
// 存取款共用原 bankAction,由 type 决定读取哪个输入框和提交哪个接口。
callBankGlobal("bankAction", actionButton.getAttribute("data-bank-action") || "");
return;
}
if (event.target.closest("[data-bank-rank-sort]")) {
event.preventDefault();
callBankGlobal("toggleBankRankSort");
return;
}
const pageButton = event.target.closest("[data-bank-rank-page-delta]");
if (!pageButton) {
return;
}
event.preventDefault();
// 分页状态仍由存量脚本维护,这里从显示文本推导目标页,避免依赖其闭包变量。
const delta = Number.parseInt(pageButton.getAttribute("data-bank-rank-page-delta") || "0", 10);
callBankGlobal("fetchBankRanking", resolveCurrentRankPage() + delta);
});
}
@@ -2447,10 +2447,10 @@ async function generateWechatBindCode() {
<div style="font-size:15px; font-weight:bold; margin-right:20px;">🏦 金币银行</div> <div style="font-size:15px; font-weight:bold; margin-right:20px;">🏦 金币银行</div>
{{-- Tabs --}} {{-- Tabs --}}
<div style="display:flex; gap:10px; flex:1;"> <div style="display:flex; gap:10px; flex:1;">
<button id="bank-tabbtn-account" class="bank-tab-btn active" onclick="switchBankTab('account')">我的账户</button> <button id="bank-tabbtn-account" class="bank-tab-btn active" data-bank-tab="account">我的账户</button>
<button id="bank-tabbtn-ranking" class="bank-tab-btn" onclick="switchBankTab('ranking')">存款排行</button> <button id="bank-tabbtn-ranking" class="bank-tab-btn" data-bank-tab="ranking">存款排行</button>
</div> </div>
<span style="cursor:pointer; font-size:20px; opacity:.8; transition:opacity .15s;" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=.8" onclick="closeBankModal()">&times;</span> <span style="cursor:pointer; font-size:20px; opacity:.8; transition:opacity .15s;" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=.8" data-bank-modal-close>&times;</span>
</div> </div>
{{-- 我的账户 面板 --}} {{-- 我的账户 面板 --}}
@@ -2472,12 +2472,12 @@ async function generateWechatBindCode() {
<div class="bank-op-row"> <div class="bank-op-row">
<span class="bank-op-label" style="color:#3b82f6;"> </span> <span class="bank-op-label" style="color:#3b82f6;"> </span>
<input type="number" id="bank-deposit-input" class="bank-op-input" min="1" placeholder="输入你想存入银行的金币数量..."> <input type="number" id="bank-deposit-input" class="bank-op-input" min="1" placeholder="输入你想存入银行的金币数量...">
<button id="bank-deposit-btn" class="bank-op-btn" style="background:linear-gradient(135deg,#3b82f6,#60a5fa);" onclick="bankAction('deposit')">确认存入</button> <button id="bank-deposit-btn" class="bank-op-btn" style="background:linear-gradient(135deg,#3b82f6,#60a5fa);" data-bank-action="deposit">确认存入</button>
</div> </div>
<div class="bank-op-row" style="margin-bottom:0;"> <div class="bank-op-row" style="margin-bottom:0;">
<span class="bank-op-label" style="color:#0891b2;"> </span> <span class="bank-op-label" style="color:#0891b2;"> </span>
<input type="number" id="bank-withdraw-input" class="bank-op-input" min="1" placeholder="输入你想从银行取回的金币数量..."> <input type="number" id="bank-withdraw-input" class="bank-op-input" min="1" placeholder="输入你想从银行取回的金币数量...">
<button id="bank-withdraw-btn" class="bank-op-btn" style="background:linear-gradient(135deg,#0891b2,#22d3ee);" onclick="bankAction('withdraw')">确认取出</button> <button id="bank-withdraw-btn" class="bank-op-btn" style="background:linear-gradient(135deg,#0891b2,#22d3ee);" data-bank-action="withdraw">确认取出</button>
</div> </div>
<div id="bank-op-msg" style="display:none; text-align:center; font-size:12px; font-weight:bold; padding:8px 10px; border-radius:6px; margin-top:12px;"></div> <div id="bank-op-msg" style="display:none; text-align:center; font-size:12px; font-weight:bold; padding:8px 10px; border-radius:6px; margin-top:12px;"></div>
</div> </div>
@@ -2495,7 +2495,7 @@ async function generateWechatBindCode() {
<div id="bank-view-ranking" class="bank-view-pane" style="display:none;"> <div id="bank-view-ranking" class="bank-view-pane" style="display:none;">
<div style="padding:10px 16px; border-bottom:1px solid #d0e4f5; display:flex; justify-content:space-between; align-items:center; background:#fff;"> <div style="padding:10px 16px; border-bottom:1px solid #d0e4f5; display:flex; justify-content:space-between; align-items:center; background:#fff;">
<div style="font-size:13px; color:#336699; font-weight:bold;">🏆 全站存款排行榜</div> <div style="font-size:13px; color:#336699; font-weight:bold;">🏆 全站存款排行榜</div>
<button onclick="toggleBankRankSort()" id="bank-rank-sort-btn" style="background:#f0f6ff; border:1px solid #b0d0ee; color:#336699; padding:4px 12px; border-radius:15px; font-size:12px; cursor:pointer; font-weight:bold; transition:background .2s;"> <button data-bank-rank-sort id="bank-rank-sort-btn" style="background:#f0f6ff; border:1px solid #b0d0ee; color:#336699; padding:4px 12px; border-radius:15px; font-size:12px; cursor:pointer; font-weight:bold; transition:background .2s;">
降序 降序
</button> </button>
</div> </div>
@@ -2506,9 +2506,9 @@ async function generateWechatBindCode() {
{{-- 分页控件 --}} {{-- 分页控件 --}}
<div style="padding:10px 16px; border-top:1px solid #d0e4f5; background:#fff; display:flex; justify-content:space-between; align-items:center;"> <div style="padding:10px 16px; border-top:1px solid #d0e4f5; background:#fff; display:flex; justify-content:space-between; align-items:center;">
<button class="bank-tab-btn" id="bank-rank-prev" onclick="fetchBankRanking(bankRankPage - 1)" style="color:#336699; border:1px solid #b0d0ee; background:#fff; font-weight:normal;">上一页</button> <button class="bank-tab-btn" id="bank-rank-prev" data-bank-rank-page-delta="-1" style="color:#336699; border:1px solid #b0d0ee; background:#fff; font-weight:normal;">上一页</button>
<div id="bank-rank-page-info" style="font-size:12px; color:#666; font-weight:bold;">1 / 1</div> <div id="bank-rank-page-info" style="font-size:12px; color:#666; font-weight:bold;">1 / 1</div>
<button class="bank-tab-btn" id="bank-rank-next" onclick="fetchBankRanking(bankRankPage + 1)" style="color:#336699; border:1px solid #b0d0ee; background:#fff; font-weight:normal;">下一页</button> <button class="bank-tab-btn" id="bank-rank-next" data-bank-rank-page-delta="1" style="color:#336699; border:1px solid #b0d0ee; background:#fff; font-weight:normal;">下一页</button>
</div> </div>
</div> </div>