feat: restore database from backup and fix date formatting in restore script

This commit is contained in:
2026-04-23 13:37:45 +09:00
parent b996b18dbc
commit e5b4eb8295
26 changed files with 2027 additions and 1662 deletions

View File

@@ -1,42 +1,34 @@
/**
* 모든 모달의 공통 기능 (닫기, ESC 처리, 배경 클릭 등)을 관리하는 베이스 모달 모듈입니다.
* 모든 모달의 공통 기능 (닫기, ESC 처리, 배경 클릭 등)을 관리하는 베이스 모듈입니다.
*/
export function closeModals() {
const modals = document.querySelectorAll('.modal-overlay');
modals.forEach(modal => modal.classList.add('hidden'));
}
export function initBaseModal() {
const closeAllModals = () => {
const modals = document.querySelectorAll('.modal-overlay');
modals.forEach(modal => modal.classList.add('hidden'));
};
// ESC 키로 닫기
window.addEventListener('keydown', (e) => {
if (e.key === 'Escape') closeModals();
if (e.key === 'Escape') closeAllModals();
});
// 배경(Overlay) 및 닫기/취소 버튼 클릭 시 닫기
// 배경(Overlay) 클릭 시 닫기 (동적 생성된 모달 대응을 위해 이벤트 위임 고려 가능하나 일단 단순 구현)
document.addEventListener('click', (e) => {
const target = e.target as HTMLElement;
// 1. 오버레이 클릭 시 닫기
if (target.classList.contains('modal-overlay')) {
closeModals();
}
// 2. 닫기 또는 취소 버튼 클릭 시 닫기 (이름 패턴 기준)
const btn = target.closest('button');
if (btn && (btn.id.startsWith('btn-close-') || btn.id.startsWith('btn-cancel-'))) {
closeModals();
closeAllModals();
}
});
return { closeAllModals: closeModals };
return { closeAllModals };
}
/**
* 특정 모달 열기 (기존의 classList 조작을 정형화)
* 특정 모달을 엽니다.
* @param modalId 모달 엘리먼트의 ID
*/
export function openModal(id: string) {
const modal = document.getElementById(id);
export function openModal(modalId: string) {
const modal = document.getElementById(modalId);
if (modal) {
modal.classList.remove('hidden');
}