// 聊天室 Vite 入口,集中导出从 Blade 内联脚本迁移出的纯前端工具。 /** * 模块引用说明: * - html.js:提供聊天内容通用 HTML 转义工具。 * - appointment-announcement.js:处理任命/撤销公告的大卡片和系统消息。 * - banner.js:提供 window.chatBanner 居中大卡片通知。 * - chat-bot.js:处理 AI 小班长发送消息和清空上下文。 * - dialog.js:提供 window.chatDialog 全局弹窗。 * - daily-sign-in.js:处理每日签到弹窗与补签入口。 * - earn-panel.js:提供看视频赚钱 earnPanelData Alpine 组件和播放器加载入口。 * - font-size.js:处理聊天输入/消息字号设置。 * - image-upload.js:处理聊天图片上传入口。 * - composer.js:处理聊天输入框、发送按钮和快捷操作。 * - toast.js:提供 window.chatToast 右下角通知。 * - friend-panel.js:处理好友面板、搜索和好友快捷操作。 * - friend-notifications.js:监听好友通知和通用 BannerNotification。 * - lightbox.js:处理聊天图片预览灯箱。 * - lottery-panel.js:提供双色球彩票 lotteryPanel Alpine 组件和全局开关入口。 * - mobile-drawer.js:处理移动端抽屉、房间列表和在线名单。 * - marriage-status.js:处理婚姻状态弹窗、已婚列表、接受拒绝和离婚申请。 * - marriage-modals.js:处理婚姻弹窗的系统消息、求婚和婚礼设置全局入口。 * - toolbar.js:处理工具栏按钮和功能快捷入口。 * - user-card.js:提供用户名片弹窗 Alpine 组件和管理/礼物操作。 * - user-target-actions.js:处理点击用户名切换私聊目标和打开名片。 * - welcome-menu.js:处理欢迎菜单交互。 * - admin-menu.js:处理聊天室管理菜单交互。 * - baccarat-panel.js:提供百家乐主面板 Alpine 组件和下注流程。 * - baccarat-fab.js:处理百家乐悬浮按钮拖动与打开面板。 * - baccarat-events.js:处理百家乐广播事件和页面恢复当前局。 * - baccarat-loss-cover-admin.js:处理百家乐买单活动管理弹层。 * - baccarat-loss-cover.js:处理百家乐买单活动前台弹窗。 * - game-hall.js:处理娱乐大厅弹窗和游戏入口卡片。 * - game-bootstrap.js:提供非关键游戏延迟初始化工具。 * - game-panels.js:处理通用游戏面板关闭事件。 * - gomoku-panel.js:提供五子棋主面板 Alpine 组件和 Canvas 棋盘逻辑。 * - gomoku-controls.js:处理五子棋外部打开和接受邀请入口。 * - horse-race-panel.js:提供赛马竞猜主面板 Alpine 组件和下注流程。 * - horse-race-fab.js:处理赛马竞猜悬浮按钮拖动与打开面板。 * - horse-race-events.js:处理赛马广播事件和页面恢复当前场次。 * - holiday-modal.js:处理节日福利弹窗、广播监听、领取状态和系统消息入口。 * - initial-state.js:恢复首屏历史消息、欢迎消息、入场特效和挂起婚姻事件。 * - bank-modal.js:处理银行弹窗、转账、排行和标签切换。 * - fishing.js:处理钓鱼抛竿、收竿、浮漂和自动钓鱼循环。 * - fortune-panel.js:提供神秘占卜 fortunePanel Alpine 组件。 * - profile-controls.js:处理头像选择、个人资料、密码、邮箱验证码和微信绑定入口。 * - shop-controls.js:处理商店弹窗、商品加载、购买、赠礼和改名卡入口。 * - compact-shop-panel.js:兼容旧右侧紧凑商店面板,按需挂载旧全局函数。 * - slot-machine.js:提供老虎机 slotPanel/slotFab Alpine 组件。 * - vip-controls.js:处理 VIP 中心弹窗、会员数据渲染、支付跳转和专属进退场设置。 * - preferences-status.js:处理聊天偏好、屏蔽系统播报和静音状态。 * - right-panel.js:处理右侧在线用户列表和用户名交互。 * - rooms.js:处理房间在线状态渲染和跳转 URL。 * - reward-modal.js:处理职务奖励金币弹窗入口。 * - red-packet-panel.js:处理礼包红包发包、抢包、倒计时和广播监听。 * - message-queue.js:提供聊天消息分批渲染队列。 */ // 统一转发各子模块导出,方便测试或后续模块继续复用同一组工具。 export { escapeHtml, escapeHtmlWithLineBreaks } from "./chat-room/html.js"; export { bindAppointmentAnnouncementControls, showAppointmentBanner } from "./chat-room/appointment-announcement.js"; export { bindChatBanner } from "./chat-room/banner.js"; export { bindChatBotControls, clearChatBotContext, sendToChatBot } from "./chat-room/chat-bot.js"; export { bindGlobalDialogControls } from "./chat-room/dialog.js"; export { bindDailySignInControls } from "./chat-room/daily-sign-in.js"; export { bindEarnPanelControls, createEarnPanelData } from "./chat-room/earn-panel.js"; export { applyFontSize, bindChatFontSizeControl, CHAT_FONT_SIZE_STORAGE_KEY, restoreChatFontSize } from "./chat-room/font-size.js"; export { bindChatImageUploadControl } from "./chat-room/image-upload.js"; export { bindChatComposerControls } from "./chat-room/composer.js"; export { bindChatToast } from "./chat-room/toast.js"; export { bindFriendPanelControls, closeFriendPanel, friendSearch, loadFriends, openFriendPanel, quickFriendAction } from "./chat-room/friend-panel.js"; export { bindFriendNotificationControls, setupBannerNotification, setupFriendNotification, showFriendBanner } from "./chat-room/friend-notifications.js"; export { closeChatImageLightbox, initChatImageLightboxEvents, openChatImageLightbox } from "./chat-room/lightbox.js"; export { bindLotteryPanelControls, closeLotteryPanel, lotteryPanel, openLotteryPanel, showLotteryMsg } from "./chat-room/lottery-panel.js"; export { bindMobileDrawerControls, closeMobileDrawer, loadMobileRoomList, openMobileDrawer, renderMobileRoomList, renderMobileUserList, scheduleRenderMobileUserList, switchMobileTab, } from "./chat-room/mobile-drawer.js"; export { bindMarriageStatusControls, closeMarriageStatusModal, fetchMarriedList, fetchMyMarriageStatus, marriageAction, openMarriageStatusModal, renderMarriedList, renderMarriageStatus, switchMarriageTab, tryDivorce, } from "./chat-room/marriage-status.js"; export { appendSystemMessage, bindMarriageModalControls, divorceConfirmModal, divorceRequestModal, marriageAcceptedModal, marriageDivorcedModal, marriageIncomingModal, marriageProposeModal, openProposeModal, openWeddingSetupModal, } from "./chat-room/marriage-modals.js"; export { bindToolbarControls, runFeatureShortcut, runToolbarAction } from "./chat-room/toolbar.js"; export { bindUserCardControls, userCardComponent } from "./chat-room/user-card.js"; export { bindUserTargetActions, openUserCard, switchTarget } from "./chat-room/user-target-actions.js"; export { bindWelcomeMenuControls } from "./chat-room/welcome-menu.js"; export { bindAdminMenuControls } from "./chat-room/admin-menu.js"; export { baccaratPanel, bindBaccaratPanelControls } from "./chat-room/baccarat-panel.js"; export { baccaratFab, bindBaccaratFabControls } from "./chat-room/baccarat-fab.js"; export { bindBaccaratEvents } from "./chat-room/baccarat-events.js"; export { bindBaccaratLossCoverAdminControls, closeAdminBaccaratLossCoverModal, closeCurrentBaccaratLossCoverEvent, loadAdminCurrentLossCoverEvent, openAdminBaccaratLossCoverModal, submitBaccaratLossCoverEvent, } from "./chat-room/baccarat-loss-cover-admin.js"; export { bindBaccaratLossCoverControls, claimBaccaratLossCover, closeBaccaratLossCoverModal, openBaccaratLossCoverModal, switchBaccaratLossCoverTab, } from "./chat-room/baccarat-loss-cover.js"; export { bindGameHallControls, closeGameHall, openGameHall } from "./chat-room/game-hall.js"; export { bindGameBootstrapControls, deferChatGameBootstrap } from "./chat-room/game-bootstrap.js"; export { bindGamePanelControls } from "./chat-room/game-panels.js"; export { bindGomokuPanelControls, gomokuPanel } from "./chat-room/gomoku-panel.js"; export { acceptGomokuInvite, bindGomokuControls, openGomokuPanel } from "./chat-room/gomoku-controls.js"; export { bindHorseRacePanelControls, horseRacePanel, requestHorseRaceJson } from "./chat-room/horse-race-panel.js"; export { bindHorseRaceFabControls, horseRaceFab } from "./chat-room/horse-race-fab.js"; export { bindHorseRaceEvents } from "./chat-room/horse-race-events.js"; export { bindHolidayModalControls, buildHolidayClaimActionButton, buildHolidaySystemMessage, holidayEventModal, openHolidayRunFromSystemMessage, } from "./chat-room/holiday-modal.js"; export { bindChatInitialStateControls } from "./chat-room/initial-state.js"; export { bankAction, bankLoadInfo, bankShowMsg, bindBankControls, closeBankModal, fetchBankRanking, openBankModal, switchBankTab, toggleBankRankSort, } from "./chat-room/bank-modal.js"; export { bindFishingControls, checkAndAutoStartFishing, createBobber, reelFish, removeBobber, resetFishingBtn, startFishing, stopAutoFishing } from "./chat-room/fishing.js"; export { bindFortunePanelControls, fortunePanel } from "./chat-room/fortune-panel.js"; export { bindProfileControls, closeAvatarPicker, closeSettingsModal, copyWechatBindCode, generateWechatBindCode, handleAvatarUpload, loadHeadfaces, openAvatarPicker, openSettingsModal, saveAvatar, savePassword, saveSettings, selectAvatar, sendEmailCode, showInlineMsg, unbindWechat, } from "./chat-room/profile-controls.js"; export { bindShopControls, buyItem, closeGiftDialog, closeRenameModal, closeShopModal, confirmGift, fetchShopData, loadShop, openGiftDialog, openRenameModal, openShopModal, renderShop, showShopToast, submitRename, } from "./chat-room/shop-controls.js"; export { bindCompactShopPanelControls, buyCompactShopItem, closeCompactRenameModal, fetchCompactShopData, loadCompactShop, openCompactRenameModal, renderCompactShop, showCompactShopToast, submitCompactRename, } from "./chat-room/compact-shop-panel.js"; export { bindSlotMachineControls, slotFab, slotPanel } from "./chat-room/slot-machine.js"; export { bindVipControls, buyVip, closeVipModal, openVipModal, saveVipPresenceSettings, switchVipTab } from "./chat-room/vip-controls.js"; export { BLOCKABLE_SYSTEM_SENDERS, BLOCKED_SYSTEM_SENDERS_STORAGE_KEY, CHAT_SOUND_MUTED_STORAGE_KEY, bindBlockMenuControls, bindSoundMuteControl, isSoundMuted, loadBlockedSystemSenders, normalizeChatPreferences, normalizeDailyStatus, parseDailyStatusExpiry, persistBlockedSystemSenders, setSoundMuted, shouldMigrateLocalChatPreferences, } from "./chat-room/preferences-status.js"; export { bindChatRightPanelControls } from "./chat-room/right-panel.js"; export { bindRoomStatusControls, normalizeRoomStatus, renderRoomStatusRow, renderRoomsOnlineStatus, renderRoomsOnlineStatusToContainer, resolveRoomUrl, } from "./chat-room/rooms.js"; export { bindRewardModalControls, openRewardModal, rewardModal } from "./chat-room/reward-modal.js"; export { bindRedPacketPanelControls, claimRedPacket, closeRedPacketModal, sendRedPacket, showRedPacketModal, updateRedPacketClaimsUI, } from "./chat-room/red-packet-panel.js"; export { createMessageQueue } from "./chat-room/message-queue.js"; import { escapeHtml, escapeHtmlWithLineBreaks } from "./chat-room/html.js"; import { bindAppointmentAnnouncementControls, showAppointmentBanner } from "./chat-room/appointment-announcement.js"; import { bindChatBanner } from "./chat-room/banner.js"; import { bindChatBotControls, clearChatBotContext, sendToChatBot } from "./chat-room/chat-bot.js"; import { bindGlobalDialogControls } from "./chat-room/dialog.js"; import { bindDailySignInControls } from "./chat-room/daily-sign-in.js"; import { bindEarnPanelControls, createEarnPanelData } from "./chat-room/earn-panel.js"; import { applyFontSize, bindChatFontSizeControl, CHAT_FONT_SIZE_STORAGE_KEY, restoreChatFontSize } from "./chat-room/font-size.js"; import { bindChatImageUploadControl } from "./chat-room/image-upload.js"; import { bindChatComposerControls } from "./chat-room/composer.js"; import { bindChatToast } from "./chat-room/toast.js"; import { bindFriendPanelControls, closeFriendPanel, friendSearch, loadFriends, openFriendPanel, quickFriendAction } from "./chat-room/friend-panel.js"; import { bindFriendNotificationControls, setupBannerNotification, setupFriendNotification, showFriendBanner } from "./chat-room/friend-notifications.js"; import { closeChatImageLightbox, initChatImageLightboxEvents, openChatImageLightbox } from "./chat-room/lightbox.js"; import { bindLotteryPanelControls, closeLotteryPanel, lotteryPanel, openLotteryPanel, showLotteryMsg } from "./chat-room/lottery-panel.js"; import { bindMobileDrawerControls, closeMobileDrawer, loadMobileRoomList, openMobileDrawer, renderMobileRoomList, renderMobileUserList, scheduleRenderMobileUserList, switchMobileTab, } from "./chat-room/mobile-drawer.js"; import { bindMarriageStatusControls, closeMarriageStatusModal, fetchMarriedList, fetchMyMarriageStatus, marriageAction, openMarriageStatusModal, renderMarriedList, renderMarriageStatus, switchMarriageTab, tryDivorce, } from "./chat-room/marriage-status.js"; import { appendSystemMessage, bindMarriageModalControls, divorceConfirmModal, divorceRequestModal, marriageAcceptedModal, marriageDivorcedModal, marriageIncomingModal, marriageProposeModal, openProposeModal, openWeddingSetupModal, } from "./chat-room/marriage-modals.js"; import { bindToolbarControls, runFeatureShortcut, runToolbarAction } from "./chat-room/toolbar.js"; import { bindUserCardControls, userCardComponent } from "./chat-room/user-card.js"; import { bindUserTargetActions, openUserCard, switchTarget } from "./chat-room/user-target-actions.js"; import { bindWelcomeMenuControls } from "./chat-room/welcome-menu.js"; import { bindAdminMenuControls } from "./chat-room/admin-menu.js"; import { baccaratPanel, bindBaccaratPanelControls } from "./chat-room/baccarat-panel.js"; import { baccaratFab, bindBaccaratFabControls } from "./chat-room/baccarat-fab.js"; import { bindBaccaratEvents } from "./chat-room/baccarat-events.js"; import { bindBaccaratLossCoverAdminControls, closeAdminBaccaratLossCoverModal, closeCurrentBaccaratLossCoverEvent, loadAdminCurrentLossCoverEvent, openAdminBaccaratLossCoverModal, submitBaccaratLossCoverEvent, } from "./chat-room/baccarat-loss-cover-admin.js"; import { bindBaccaratLossCoverControls, claimBaccaratLossCover, closeBaccaratLossCoverModal, openBaccaratLossCoverModal, switchBaccaratLossCoverTab, } from "./chat-room/baccarat-loss-cover.js"; import { bindGameHallControls, closeGameHall, openGameHall } from "./chat-room/game-hall.js"; import { bindGameBootstrapControls, deferChatGameBootstrap } from "./chat-room/game-bootstrap.js"; import { bindGamePanelControls } from "./chat-room/game-panels.js"; import { bindGomokuPanelControls, gomokuPanel } from "./chat-room/gomoku-panel.js"; import { acceptGomokuInvite, bindGomokuControls, openGomokuPanel } from "./chat-room/gomoku-controls.js"; import { bindHorseRacePanelControls, horseRacePanel, requestHorseRaceJson } from "./chat-room/horse-race-panel.js"; import { bindHorseRaceFabControls, horseRaceFab } from "./chat-room/horse-race-fab.js"; import { bindHorseRaceEvents } from "./chat-room/horse-race-events.js"; import { bindHolidayModalControls, buildHolidayClaimActionButton, buildHolidaySystemMessage, holidayEventModal, openHolidayRunFromSystemMessage, } from "./chat-room/holiday-modal.js"; import { bindChatInitialStateControls } from "./chat-room/initial-state.js"; import { bankAction, bankLoadInfo, bankShowMsg, bindBankControls, closeBankModal, fetchBankRanking, openBankModal, switchBankTab, toggleBankRankSort, } from "./chat-room/bank-modal.js"; import { bindFishingControls, checkAndAutoStartFishing, createBobber, reelFish, removeBobber, resetFishingBtn, startFishing, stopAutoFishing } from "./chat-room/fishing.js"; import { bindFortunePanelControls, fortunePanel } from "./chat-room/fortune-panel.js"; import { bindProfileControls, closeAvatarPicker, closeSettingsModal, copyWechatBindCode, generateWechatBindCode, handleAvatarUpload, loadHeadfaces, openAvatarPicker, openSettingsModal, saveAvatar, savePassword, saveSettings, selectAvatar, sendEmailCode, showInlineMsg, unbindWechat, } from "./chat-room/profile-controls.js"; import { bindShopControls, buyItem, closeGiftDialog, closeRenameModal, closeShopModal, confirmGift, fetchShopData, loadShop, openGiftDialog, openRenameModal, openShopModal, renderShop, showShopToast, submitRename, } from "./chat-room/shop-controls.js"; import { bindCompactShopPanelControls, buyCompactShopItem, closeCompactRenameModal, fetchCompactShopData, loadCompactShop, openCompactRenameModal, renderCompactShop, showCompactShopToast, submitCompactRename, } from "./chat-room/compact-shop-panel.js"; import { bindSlotMachineControls, slotFab, slotPanel } from "./chat-room/slot-machine.js"; import { bindVipControls, buyVip, closeVipModal, openVipModal, saveVipPresenceSettings, switchVipTab } from "./chat-room/vip-controls.js"; import { BLOCKABLE_SYSTEM_SENDERS, BLOCKED_SYSTEM_SENDERS_STORAGE_KEY, CHAT_SOUND_MUTED_STORAGE_KEY, bindBlockMenuControls, bindSoundMuteControl, isSoundMuted, loadBlockedSystemSenders, normalizeChatPreferences, normalizeDailyStatus, parseDailyStatusExpiry, persistBlockedSystemSenders, setSoundMuted, shouldMigrateLocalChatPreferences, } from "./chat-room/preferences-status.js"; import { bindChatRightPanelControls } from "./chat-room/right-panel.js"; import { bindRoomStatusControls, normalizeRoomStatus, renderRoomStatusRow, renderRoomsOnlineStatus, renderRoomsOnlineStatusToContainer, resolveRoomUrl, } from "./chat-room/rooms.js"; import { bindRewardModalControls, openRewardModal, rewardModal } from "./chat-room/reward-modal.js"; import { bindRedPacketPanelControls, claimRedPacket, closeRedPacketModal, sendRedPacket, showRedPacketModal, updateRedPacketClaimsUI, } from "./chat-room/red-packet-panel.js"; import { createMessageQueue } from "./chat-room/message-queue.js"; if (typeof window !== "undefined") { // 保留聚合入口,给新迁移模块、测试和仍在 Blade 内的存量脚本统一读取工具。 window.ChatRoomTools = { escapeHtml, escapeHtmlWithLineBreaks, bindAppointmentAnnouncementControls, showAppointmentBanner, bindChatBanner, bindChatBotControls, clearChatBotContext, sendToChatBot, bindGlobalDialogControls, bindDailySignInControls, bindEarnPanelControls, createEarnPanelData, bindLotteryPanelControls, closeLotteryPanel, lotteryPanel, openLotteryPanel, showLotteryMsg, applyFontSize, bindChatFontSizeControl, bindChatImageUploadControl, bindChatComposerControls, bindChatToast, bindFriendPanelControls, bindFriendNotificationControls, closeFriendPanel, friendSearch, loadFriends, openFriendPanel, quickFriendAction, setupBannerNotification, setupFriendNotification, showFriendBanner, bindMobileDrawerControls, closeMobileDrawer, loadMobileRoomList, openMobileDrawer, renderMobileRoomList, renderMobileUserList, scheduleRenderMobileUserList, switchMobileTab, bindToolbarControls, runFeatureShortcut, runToolbarAction, bindUserCardControls, userCardComponent, bindUserTargetActions, openUserCard, switchTarget, bindWelcomeMenuControls, bindAdminMenuControls, baccaratPanel, bindBaccaratPanelControls, baccaratFab, bindBaccaratFabControls, bindBaccaratEvents, bindBaccaratLossCoverAdminControls, closeAdminBaccaratLossCoverModal, closeCurrentBaccaratLossCoverEvent, bindBaccaratLossCoverControls, claimBaccaratLossCover, closeBaccaratLossCoverModal, openBaccaratLossCoverModal, switchBaccaratLossCoverTab, bindGameHallControls, closeGameHall, openGameHall, bindGameBootstrapControls, deferChatGameBootstrap, bindGamePanelControls, bindGomokuPanelControls, gomokuPanel, acceptGomokuInvite, bindGomokuControls, openGomokuPanel, bindHorseRacePanelControls, horseRacePanel, requestHorseRaceJson, bindHorseRaceFabControls, horseRaceFab, bindHorseRaceEvents, bindHolidayModalControls, buildHolidayClaimActionButton, buildHolidaySystemMessage, holidayEventModal, openHolidayRunFromSystemMessage, bindChatInitialStateControls, loadAdminCurrentLossCoverEvent, openAdminBaccaratLossCoverModal, submitBaccaratLossCoverEvent, bankAction, bankLoadInfo, bankShowMsg, bindBankControls, closeBankModal, fetchBankRanking, openBankModal, switchBankTab, toggleBankRankSort, bindFishingControls, checkAndAutoStartFishing, createBobber, reelFish, removeBobber, resetFishingBtn, startFishing, stopAutoFishing, bindFortunePanelControls, fortunePanel, bindProfileControls, closeAvatarPicker, closeSettingsModal, copyWechatBindCode, generateWechatBindCode, handleAvatarUpload, loadHeadfaces, openAvatarPicker, openSettingsModal, saveAvatar, savePassword, saveSettings, selectAvatar, sendEmailCode, showInlineMsg, unbindWechat, bindMarriageStatusControls, appendSystemMessage, bindMarriageModalControls, divorceConfirmModal, divorceRequestModal, marriageAcceptedModal, marriageDivorcedModal, marriageIncomingModal, marriageProposeModal, closeMarriageStatusModal, fetchMarriedList, fetchMyMarriageStatus, marriageAction, openMarriageStatusModal, openProposeModal, openWeddingSetupModal, renderMarriedList, renderMarriageStatus, switchMarriageTab, tryDivorce, bindShopControls, buyItem, closeGiftDialog, closeRenameModal, closeShopModal, confirmGift, fetchShopData, loadShop, openGiftDialog, openRenameModal, openShopModal, renderShop, showShopToast, submitRename, bindCompactShopPanelControls, buyCompactShopItem, closeCompactRenameModal, fetchCompactShopData, loadCompactShop, openCompactRenameModal, renderCompactShop, showCompactShopToast, submitCompactRename, bindSlotMachineControls, slotFab, slotPanel, bindVipControls, buyVip, closeVipModal, openVipModal, saveVipPresenceSettings, switchVipTab, CHAT_FONT_SIZE_STORAGE_KEY, restoreChatFontSize, closeChatImageLightbox, initChatImageLightboxEvents, openChatImageLightbox, BLOCKABLE_SYSTEM_SENDERS, BLOCKED_SYSTEM_SENDERS_STORAGE_KEY, CHAT_SOUND_MUTED_STORAGE_KEY, bindBlockMenuControls, bindSoundMuteControl, isSoundMuted, loadBlockedSystemSenders, normalizeChatPreferences, normalizeDailyStatus, parseDailyStatusExpiry, persistBlockedSystemSenders, setSoundMuted, shouldMigrateLocalChatPreferences, bindChatRightPanelControls, bindRoomStatusControls, normalizeRoomStatus, renderRoomStatusRow, renderRoomsOnlineStatus, renderRoomsOnlineStatusToContainer, resolveRoomUrl, bindRewardModalControls, openRewardModal, rewardModal, bindRedPacketPanelControls, claimRedPacket, closeRedPacketModal, sendRedPacket, showRedPacketModal, updateRedPacketClaimsUI, createMessageQueue, }; // 直接挂载只服务暂未迁移的 Blade 调用点;新代码优先通过模块导入或 ChatRoomTools 复用。 window.closeChatImageLightbox = closeChatImageLightbox; window.openChatImageLightbox = openChatImageLightbox; window.closeFriendPanel = closeFriendPanel; window.friendSearch = friendSearch; window.openFriendPanel = openFriendPanel; window.quickFriendAction = quickFriendAction; window.setupBannerNotification = setupBannerNotification; window.setupFriendNotification = setupFriendNotification; window.showFriendBanner = showFriendBanner; window.closeMobileDrawer = closeMobileDrawer; window.loadMobileRoomList = loadMobileRoomList; window.openMobileDrawer = openMobileDrawer; window.openUserCard = openUserCard; window.openRewardModal = openRewardModal; window.rewardModal = rewardModal; window.renderMobileRoomList = renderMobileRoomList; window.renderMobileUserList = renderMobileUserList; window.scheduleRenderMobileUserList = scheduleRenderMobileUserList; window.switchMobileTab = switchMobileTab; window.switchTarget = switchTarget; window.baccaratPanel = baccaratPanel; window.baccaratFab = baccaratFab; window.clearChatBotContext = clearChatBotContext; window.sendToChatBot = sendToChatBot; window.slotFab = slotFab; window.slotPanel = slotPanel; window.runFeatureShortcut = runFeatureShortcut; window.runToolbarAction = runToolbarAction; window.userCardComponent = userCardComponent; window.buildHolidayClaimActionButton = buildHolidayClaimActionButton; window.buildHolidaySystemMessage = buildHolidaySystemMessage; window.holidayEventModal = holidayEventModal; window.openHolidayRunFromSystemMessage = openHolidayRunFromSystemMessage; window.closeAdminBaccaratLossCoverModal = closeAdminBaccaratLossCoverModal; window.closeCurrentBaccaratLossCoverEvent = closeCurrentBaccaratLossCoverEvent; window.claimBaccaratLossCover = claimBaccaratLossCover; window.closeBaccaratLossCoverModal = closeBaccaratLossCoverModal; window.openBaccaratLossCoverModal = openBaccaratLossCoverModal; window.openAdminBaccaratLossCoverModal = openAdminBaccaratLossCoverModal; window.submitBaccaratLossCoverEvent = submitBaccaratLossCoverEvent; window.switchBaccaratLossCoverTab = switchBaccaratLossCoverTab; window.bankAction = bankAction; window.bankLoadInfo = bankLoadInfo; window.bankShowMsg = bankShowMsg; window.closeBankModal = closeBankModal; window.closeGameHall = closeGameHall; window.fetchBankRanking = fetchBankRanking; window.fortunePanel = fortunePanel; window.closeLotteryPanel = closeLotteryPanel; window.createEarnPanelData = createEarnPanelData; window.deferChatGameBootstrap = deferChatGameBootstrap; window.lotteryPanel = lotteryPanel; window.openGameHall = openGameHall; window.gomokuPanel = gomokuPanel; window.acceptGomokuInvite = acceptGomokuInvite; window.openGomokuPanel = openGomokuPanel; window.horseRacePanel = horseRacePanel; window.horseRaceFab = horseRaceFab; window.openLotteryPanel = openLotteryPanel; window.openBankModal = openBankModal; window.showLotteryMsg = showLotteryMsg; window.checkAndAutoStartFishing = checkAndAutoStartFishing; window.createBobber = createBobber; window.reelFish = reelFish; window.removeBobber = removeBobber; window.resetFishingBtn = resetFishingBtn; window.startFishing = startFishing; window.stopAutoFishing = stopAutoFishing; window.buyVip = buyVip; window.closeVipModal = closeVipModal; window.openVipModal = openVipModal; window.saveVipPresenceSettings = saveVipPresenceSettings; window.switchVipTab = switchVipTab; window.switchBankTab = switchBankTab; window.toggleBankRankSort = toggleBankRankSort; window.claimRedPacket = claimRedPacket; window.closeRedPacketModal = closeRedPacketModal; window.sendRedPacket = sendRedPacket; window.showRedPacketModal = showRedPacketModal; window.updateRedPacketClaimsUI = updateRedPacketClaimsUI; window.applyFontSize = applyFontSize; window.closeAvatarPicker = closeAvatarPicker; window.closeSettingsModal = closeSettingsModal; window.copyWechatBindCode = copyWechatBindCode; window.generateWechatBindCode = generateWechatBindCode; window.handleAvatarUpload = handleAvatarUpload; window.loadHeadfaces = loadHeadfaces; window.openAvatarPicker = openAvatarPicker; window.openSettingsModal = openSettingsModal; window.saveAvatar = saveAvatar; window.savePassword = savePassword; window.saveSettings = saveSettings; window.selectAvatar = selectAvatar; window.sendEmailCode = sendEmailCode; window.showInlineMsg = showInlineMsg; window.unbindWechat = unbindWechat; window.closeMarriageStatusModal = closeMarriageStatusModal; window.fetchMarriedList = fetchMarriedList; window.fetchMyMarriageStatus = fetchMyMarriageStatus; window.marriageAction = marriageAction; window.openMarriageStatusModal = openMarriageStatusModal; window.appendSystemMessage = appendSystemMessage; window.divorceConfirmModal = divorceConfirmModal; window.divorceRequestModal = divorceRequestModal; window.marriageAcceptedModal = marriageAcceptedModal; window.marriageDivorcedModal = marriageDivorcedModal; window.marriageIncomingModal = marriageIncomingModal; window.marriageProposeModal = marriageProposeModal; window.openProposeModal = openProposeModal; window.openWeddingSetupModal = openWeddingSetupModal; window.renderMarriedList = renderMarriedList; window.renderMarriageStatus = renderMarriageStatus; window.switchMarriageTab = switchMarriageTab; window.tryDivorce = tryDivorce; window.buyItem = buyItem; window.closeGiftDialog = closeGiftDialog; window.closeRenameModal = closeRenameModal; window.closeShopModal = closeShopModal; window.confirmGift = confirmGift; window.fetchShopData = fetchShopData; window.loadShop = loadShop; window.openGiftDialog = openGiftDialog; window.openRenameModal = openRenameModal; window.openShopModal = openShopModal; window.renderShop = renderShop; window.showShopToast = showShopToast; window.submitRename = submitRename; // 页面加载后立即注册事件委托,具体业务逻辑仍由各子模块负责。 bindChatBanner(); bindChatBotControls(); bindAppointmentAnnouncementControls(); bindGlobalDialogControls(); bindDailySignInControls(); bindEarnPanelControls(); bindLotteryPanelControls(); bindChatFontSizeControl(); bindChatImageUploadControl(); bindChatComposerControls(); bindChatToast(); bindFriendPanelControls(); bindFriendNotificationControls(); bindToolbarControls(); bindUserCardControls(); bindUserTargetActions(); bindAdminMenuControls(); bindBaccaratPanelControls(); bindBaccaratFabControls(); bindBaccaratEvents(); bindBaccaratLossCoverAdminControls(); bindBaccaratLossCoverControls(); bindGameHallControls(); bindGameBootstrapControls(); bindGamePanelControls(); bindGomokuPanelControls(); bindGomokuControls(); bindHorseRacePanelControls(); bindHorseRaceFabControls(); bindHorseRaceEvents(); bindHolidayModalControls(); bindMarriageModalControls(); bindChatInitialStateControls(); bindBankControls(); bindFishingControls(); bindFortunePanelControls(); bindMarriageStatusControls(); bindProfileControls(); bindShopControls(); bindCompactShopPanelControls(); bindSlotMachineControls(); bindVipControls(); bindChatRightPanelControls(); bindRoomStatusControls(); bindRewardModalControls(); bindRedPacketPanelControls(); bindMobileDrawerControls(); bindWelcomeMenuControls(); bindBlockMenuControls(); }