90 lines
2.1 KiB
JavaScript
90 lines
2.1 KiB
JavaScript
|
|
// 房间后台管理页事件代理,替代 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();
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|