Files
chatroom/resources/js/admin/rooms.js
T

90 lines
2.1 KiB
JavaScript
Raw Normal View History

2026-04-25 13:25:27 +08:00
// 房间后台管理页事件代理,替代 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();
}
});
}