diff --git a/resources/js/admin/rooms.js b/resources/js/admin/rooms.js new file mode 100644 index 0000000..5ded666 --- /dev/null +++ b/resources/js/admin/rooms.js @@ -0,0 +1,89 @@ +// 房间后台管理页事件代理,替代 Blade 内联显示/隐藏和删除确认逻辑。 + +let adminRoomControlsBound = false; + +/** + * 读取新增房间表单容器。 + * + * @returns {HTMLElement|null} + */ +function getCreateRoomForm() { + const formPanel = document.getElementById("create-room-form"); + + return formPanel instanceof HTMLElement ? formPanel : null; +} + +/** + * 切换新增房间表单显示状态。 + * + * @returns {void} + */ +function toggleCreateRoomForm() { + getCreateRoomForm()?.classList.toggle("hidden"); +} + +/** + * 关闭新增房间表单。 + * + * @returns {void} + */ +function closeCreateRoomForm() { + getCreateRoomForm()?.classList.add("hidden"); +} + +/** + * 校验错误回显时自动展开新增房间表单。 + * + * @returns {void} + */ +function openCreateRoomFormWhenInvalid() { + const formPanel = getCreateRoomForm(); + + if (formPanel?.hasAttribute("data-room-create-open")) { + formPanel.classList.remove("hidden"); + } +} + +/** + * 绑定房间管理页操作。 + * + * @returns {void} + */ +export function bindAdminRoomControls() { + if (adminRoomControlsBound || typeof document === "undefined") { + return; + } + + adminRoomControlsBound = true; + openCreateRoomFormWhenInvalid(); + + document.addEventListener("click", (event) => { + if (!(event.target instanceof Element)) { + return; + } + + const toggleButton = event.target.closest("[data-room-create-toggle]"); + if (toggleButton) { + event.preventDefault(); + toggleCreateRoomForm(); + return; + } + + const closeButton = event.target.closest("[data-room-create-close]"); + if (closeButton) { + event.preventDefault(); + closeCreateRoomForm(); + } + }); + + document.addEventListener("submit", (event) => { + if (!(event.target instanceof HTMLFormElement)) { + return; + } + + const confirmMessage = event.target.getAttribute("data-room-delete-confirm"); + if (confirmMessage && !window.confirm(confirmMessage)) { + event.preventDefault(); + } + }); +} diff --git a/resources/js/app.js b/resources/js/app.js index 506a854..392637c 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -2,10 +2,12 @@ import './bootstrap'; import { bindAdminAutoactControls } from './admin/autoact.js'; import { bindAdminFishingEventsControls } from './admin/fishing-events.js'; import { bindAdminGameConfigControls } from './admin/game-configs.js'; +import { bindAdminRoomControls } from './admin/rooms.js'; import { bindAdminSignInRulesControls } from './admin/sign-in-rules.js'; // 后台共用入口只注册轻量事件代理,具体页面通过 data-* 属性决定是否响应。 bindAdminAutoactControls(); bindAdminFishingEventsControls(); bindAdminGameConfigControls(); +bindAdminRoomControls(); bindAdminSignInRulesControls(); diff --git a/resources/views/admin/rooms/index.blade.php b/resources/views/admin/rooms/index.blade.php index 36e4e0d..773a43c 100644 --- a/resources/views/admin/rooms/index.blade.php +++ b/resources/views/admin/rooms/index.blade.php @@ -11,7 +11,7 @@ {{-- 新增房间按钮 --}} @if (auth()->id() === 1) - @@ -20,7 +20,8 @@ {{-- 新增房间表单(默认隐藏) --}} @if (auth()->id() === 1) -