Files
dnssash/adm/code_manager/js/ui_manager.js
T
2026-06-11 18:47:38 +09:00

152 lines
6.8 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function() {
// =================================================================
// 1. UI 리소스 목록 페이지 (ui_manager_list.php)
// =================================================================
const addResourceButton = document.getElementById('add-resource-btn');
const resourceFormContainer = document.getElementById('resource-form-container');
const cancelResourceButton = document.getElementById('cancel-resource-btn');
const resourceTypeRadios = document.querySelectorAll('input[name="resource_type"]');
const labelField = document.getElementById('label-field');
const accordionItems = document.querySelectorAll('.accordion-item');
const searchForm = document.getElementById('fsearch');
const pageRowsSelect = document.getElementById('page_rows');
if (addResourceButton) {
addResourceButton.addEventListener('click', function() {
if (resourceFormContainer) resourceFormContainer.style.display = 'block';
this.style.display = 'none';
});
}
if (cancelResourceButton) {
cancelResourceButton.addEventListener('click', function() {
if (resourceFormContainer) resourceFormContainer.style.display = 'none';
if (addResourceButton) addResourceButton.style.display = 'inline-block';
});
}
function toggleResourceTypeFields() {
if (!document.querySelector('input[name="resource_type"]:checked')) return;
const selectedType = document.querySelector('input[name="resource_type"]:checked').value;
if (labelField) {
labelField.style.display = (selectedType === 'LABEL') ? '' : 'none';
}
}
if (resourceTypeRadios.length > 0) {
resourceTypeRadios.forEach(radio => radio.addEventListener('change', toggleResourceTypeFields));
toggleResourceTypeFields();
}
if (accordionItems.length > 0) {
accordionItems.forEach(item => {
const header = item.querySelector('.accordion-header');
const content = item.querySelector('.accordion-content');
if (header && content) {
header.addEventListener('click', () => {
item.classList.toggle('active');
content.style.display = item.classList.contains('active') ? 'block' : 'none';
});
}
});
}
if (searchForm) {
searchForm.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
// 엔터키 입력 시 기본 동작(폼 제출)을 막지 않음
}
});
}
if (pageRowsSelect) {
pageRowsSelect.addEventListener('change', function() {
if (searchForm) {
searchForm.submit();
}
});
}
// =================================================================
// 💡 [핵심] 옵션/카테고리 관리 페이지 (category_list.php) 로직 추가
// =================================================================
const addCategoryButton = document.getElementById('add-category-btn');
const categoryFormContainer = document.getElementById('category-form-container');
const cancelCategoryButton = document.getElementById('cancel-category-btn');
const categoryForm = document.getElementById('fcategoryform');
const editCategoryButtons = document.querySelectorAll('.btn_edit_category');
// "새 옵션 추가" 버튼 클릭
if (addCategoryButton && categoryFormContainer) {
addCategoryButton.addEventListener('click', function() {
if (categoryForm) {
categoryForm.reset();
categoryForm.w.value = ''; // 신규 등록 모드
categoryForm.fc_id.value = '';
const submitButton = categoryForm.querySelector('input[type="submit"]');
if (submitButton) submitButton.value = '저장';
}
categoryFormContainer.style.display = 'block';
this.style.display = 'none';
});
}
// "취소" 버튼 클릭
if (cancelCategoryButton && categoryFormContainer && addCategoryButton) {
cancelCategoryButton.addEventListener('click', function() {
categoryFormContainer.style.display = 'none';
addCategoryButton.style.display = 'inline-block';
});
}
// "수정" 버튼 클릭
if (editCategoryButtons.length > 0 && categoryForm) {
editCategoryButtons.forEach(button => {
button.addEventListener('click', function() {
const data = this.dataset;
// 폼에 데이터 채우기
categoryForm.w.value = 'u'; // 수정 모드
categoryForm.fc_id.value = data.fc_id;
categoryForm.parent_id.value = data.parent_id;
categoryForm.fc_key.value = data.fc_key;
categoryForm.cl_name.value = data.cl_name;
categoryForm.fc_order.value = data.fc_order;
const isUsedRadio = categoryForm.querySelector(`input[name="is_used"][value="${data.is_used}"]`);
if (isUsedRadio) isUsedRadio.checked = true;
const submitButton = categoryForm.querySelector('input[type="submit"]');
if (submitButton) submitButton.value = '수정';
if (categoryFormContainer) categoryFormContainer.style.display = 'block';
if (addCategoryButton) addCategoryButton.style.display = 'none';
categoryFormContainer.scrollIntoView({ behavior: 'smooth' });
});
});
}
// =================================================================
// 3. 리소스 삭제 기능
// =================================================================
const deleteResourceButtons = document.querySelectorAll('.btn_delete_resource');
if (deleteResourceButtons.length > 0) {
deleteResourceButtons.forEach(button => {
button.addEventListener('click', function(event) {
event.preventDefault();
const um_id = this.dataset.um_id;
const resource_desc_element = this.closest('tr').querySelector('.td_left');
const resource_desc = resource_desc_element ? resource_desc_element.textContent.trim() : `ID: ${um_id}`;
if (confirm(`'${resource_desc}' 리소스를 정말 삭제하시겠습니까?\n\n이 리소스와 관련된 모든 하위 옵션(카테고리) 및 언어 데이터가 함께 영구적으로 삭제됩니다.`)) {
const qstr = new URLSearchParams(window.location.search).toString();
location.href = `./ui_manager_list.php?mode=delete&um_id=${um_id}&token=${g5_admin_token}&${qstr}`;
}
});
});
}
});