From 4815d201f6fec1fa3b8fa24bacc6fca30ca6b1e4 Mon Sep 17 00:00:00 2001 From: lkddi Date: Sat, 25 Apr 2026 13:25:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=88=BF=E9=97=B4=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E8=A1=A8=E5=8D=95=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/admin/rooms.js | 89 +++++++++++++++++++++ resources/js/app.js | 2 + resources/views/admin/rooms/index.blade.php | 17 ++-- 3 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 resources/js/admin/rooms.js 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) -