diff --git a/resources/js/chat-room/profile-controls.js b/resources/js/chat-room/profile-controls.js index 12ae83d..5c6f1dd 100644 --- a/resources/js/chat-room/profile-controls.js +++ b/resources/js/chat-room/profile-controls.js @@ -16,6 +16,29 @@ function callGlobal(functionName, ...args) { } } +/** + * 处理动态头像项选择。 + * 头像列表由 Blade 旧脚本异步生成,Vite 模块只通过 data-avatar-file 接管点击入口。 + * + * @param {Element} target 点击目标 + * @returns {boolean} + */ +function handleAvatarOptionClick(target) { + const avatarOption = target.closest("[data-avatar-file]"); + if (!(avatarOption instanceof HTMLElement)) { + return false; + } + + const file = avatarOption.getAttribute("data-avatar-file") || ""; + if (!file) { + return false; + } + + callGlobal("selectAvatar", file, avatarOption); + + return true; +} + /** * 绑定头像选择器和个人设置弹窗事件。 * @@ -39,6 +62,11 @@ export function bindProfileControls() { return; } + if (handleAvatarOptionClick(event.target)) { + event.preventDefault(); + return; + } + if (event.target.closest("[data-avatar-save]")) { event.preventDefault(); callGlobal("saveAvatar"); diff --git a/resources/views/chat/partials/layout/toolbar.blade.php b/resources/views/chat/partials/layout/toolbar.blade.php index 351400f..1ee6728 100644 --- a/resources/views/chat/partials/layout/toolbar.blade.php +++ b/resources/views/chat/partials/layout/toolbar.blade.php @@ -292,8 +292,8 @@ img.className = 'avatar-option'; img.title = file; img.dataset.file = file; + img.dataset.avatarFile = file; img.onerror = () => img.style.display = 'none'; - img.onclick = () => selectAvatar(file, img); grid.appendChild(img); }); } catch (e) {