迁移房间后台表单事件
This commit is contained in:
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user