From ce6f8552c11d801e11011dd463a413c88c9638d8 Mon Sep 17 00:00:00 2001 From: lkddi Date: Sat, 25 Apr 2026 03:49:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=AC=A2=E8=BF=8E=E8=AF=AD?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E4=BA=8B=E4=BB=B6=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/chat-room.js | 4 ++ resources/js/chat-room/welcome-menu.js | 47 +++++++++++++++++++ .../chat/partials/layout/input-bar.blade.php | 6 +-- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 resources/js/chat-room/welcome-menu.js diff --git a/resources/js/chat-room.js b/resources/js/chat-room.js index 7909871..ed0b71f 100644 --- a/resources/js/chat-room.js +++ b/resources/js/chat-room.js @@ -5,6 +5,7 @@ export { applyFontSize, bindChatFontSizeControl, CHAT_FONT_SIZE_STORAGE_KEY, res export { bindChatImageUploadControl } from "./chat-room/image-upload.js"; export { closeChatImageLightbox, initChatImageLightboxEvents, openChatImageLightbox } from "./chat-room/lightbox.js"; export { bindMobileDrawerControls } from "./chat-room/mobile-drawer.js"; +export { bindWelcomeMenuControls } from "./chat-room/welcome-menu.js"; export { BLOCKABLE_SYSTEM_SENDERS, BLOCKED_SYSTEM_SENDERS_STORAGE_KEY, @@ -35,6 +36,7 @@ import { applyFontSize, bindChatFontSizeControl, CHAT_FONT_SIZE_STORAGE_KEY, res import { bindChatImageUploadControl } from "./chat-room/image-upload.js"; import { closeChatImageLightbox, initChatImageLightboxEvents, openChatImageLightbox } from "./chat-room/lightbox.js"; import { bindMobileDrawerControls } from "./chat-room/mobile-drawer.js"; +import { bindWelcomeMenuControls } from "./chat-room/welcome-menu.js"; import { BLOCKABLE_SYSTEM_SENDERS, BLOCKED_SYSTEM_SENDERS_STORAGE_KEY, @@ -68,6 +70,7 @@ if (typeof window !== "undefined") { bindChatFontSizeControl, bindChatImageUploadControl, bindMobileDrawerControls, + bindWelcomeMenuControls, CHAT_FONT_SIZE_STORAGE_KEY, restoreChatFontSize, closeChatImageLightbox, @@ -102,5 +105,6 @@ if (typeof window !== "undefined") { bindChatImageUploadControl(); bindChatRightPanelControls(); bindMobileDrawerControls(); + bindWelcomeMenuControls(); bindBlockMenuControls(); } diff --git a/resources/js/chat-room/welcome-menu.js b/resources/js/chat-room/welcome-menu.js new file mode 100644 index 0000000..701267d --- /dev/null +++ b/resources/js/chat-room/welcome-menu.js @@ -0,0 +1,47 @@ +// 聊天室欢迎语快捷菜单事件绑定,替代 Blade 内联 onclick。 + +let welcomeMenuEventsBound = false; + +/** + * 绑定欢迎语菜单按钮、菜单内点击拦截与模板发送事件。 + * + * @returns {void} + */ +export function bindWelcomeMenuControls() { + if (welcomeMenuEventsBound || typeof document === "undefined") { + return; + } + + welcomeMenuEventsBound = true; + + document.addEventListener("click", (event) => { + if (!(event.target instanceof Element)) { + return; + } + + const toggleButton = event.target.closest("[data-chat-welcome-menu-toggle]"); + if (toggleButton) { + event.preventDefault(); + window.toggleWelcomeMenu?.(event); + + return; + } + + const menu = event.target.closest("[data-chat-welcome-menu]"); + if (!menu) { + return; + } + + event.stopPropagation(); + + const item = event.target.closest("[data-chat-welcome-template]"); + if (!item || !menu.contains(item)) { + return; + } + + const template = item.getAttribute("data-chat-welcome-template") || ""; + if (template && typeof window.sendWelcomeTpl === "function") { + window.sendWelcomeTpl(template); + } + }); +} diff --git a/resources/views/chat/partials/layout/input-bar.blade.php b/resources/views/chat/partials/layout/input-bar.blade.php index fdee3ee..aa4c861 100644 --- a/resources/views/chat/partials/layout/input-bar.blade.php +++ b/resources/views/chat/partials/layout/input-bar.blade.php @@ -81,11 +81,11 @@ {{-- 欢迎语快捷按钮 + 下拉浮层 --}}
- -