// 聊天室竖向工具条事件绑定,替代顶部工具按钮内联 onclick。 let toolbarEventsBound = false; /** * 执行竖向工具条动作。 * * @param {string} action 工具条动作 * @returns {void} */ function runToolbarAction(action) { // 工具条只做入口分发,具体业务仍由原有全局函数负责。 const actions = { shop: () => window.openShopModal?.(), vip: () => window.openVipModal?.(), "save-exp": () => window.saveExp?.(), game: () => window.openGameHall?.(), earn: () => window.dispatchEvent(new CustomEvent("open-earn-panel")), bank: () => window.openBankModal?.(), marriage: () => window.openMarriageStatusModal?.(), friend: () => window.openFriendPanel?.(), avatar: () => window.openAvatarPicker?.(), settings: () => window.openSettingsModal?.(), }; actions[action]?.(); } /** * 确认并执行离开聊天室动作。 * * @returns {void} */ function confirmToolbarLeaveRoom() { // 离开房间保留二次确认,避免误点竖向工具条直接退出。 window.chatDialog ?.confirm("确定要离开聊天室吗?", "离开聊天室") .then((ok) => { if (ok) { window.leaveRoom?.(); } }); } /** * 绑定竖向工具条按钮事件。 * * @returns {void} */ export function bindToolbarControls() { if (toolbarEventsBound || typeof document === "undefined") { return; } toolbarEventsBound = true; document.addEventListener("click", (event) => { if (!(event.target instanceof Element)) { return; } const actionButton = event.target.closest("[data-toolbar-action]"); if (actionButton) { event.preventDefault(); const action = actionButton.getAttribute("data-toolbar-action") || ""; if (action === "leave") { confirmToolbarLeaveRoom(); return; } runToolbarAction(action); return; } const urlButton = event.target.closest("[data-toolbar-url]"); if (!urlButton) { return; } event.preventDefault(); // 后端路由保留在 Blade data 属性中,Vite 模块不硬编码 Laravel URL。 const url = urlButton.getAttribute("data-toolbar-url"); if (url) { window.open(url, "_blank"); } }); }