import { state } from '../../core/state'; import { HardwareAsset } from '../../core/excelHandler'; import { createIcons, Paperclip } from 'lucide'; let currentAsset: HardwareAsset | null = null; let isEditMode = false; const HW_MODAL_HTML = ` `; export function openHwModal(asset: HardwareAsset) { currentAsset = asset; isEditMode = false; const modal = document.getElementById('hw-asset-modal')!; const form = document.getElementById('hw-asset-form') as HTMLFormElement; const saveBtn = document.getElementById('btn-save-hw-asset')!; const revertBtn = document.getElementById('btn-revert-hw-edit')!; form.reset(); form.classList.remove('is-edit-mode'); form.classList.add('is-view-mode'); saveBtn.textContent = '수정'; revertBtn.classList.add('hidden'); fillHwFormData(asset); modal.classList.remove('hidden'); createIcons({ icons: { Paperclip } }); } function fillHwFormData(asset: HardwareAsset) { (document.getElementById('hw-asset-id') as HTMLInputElement).value = asset.id; (document.getElementById('hw-asset-type') as HTMLInputElement).value = asset.type; (document.getElementById('hw-법인') as HTMLInputElement).value = asset.법인; (document.getElementById('hw-자산코드') as HTMLInputElement).value = asset.자산코드; (document.getElementById('hw-위치') as HTMLInputElement).value = asset.위치; (document.getElementById('hw-현사용조직') as HTMLInputElement).value = asset.현사용조직 || ''; (document.getElementById('hw-이전사용조직') as HTMLInputElement).value = asset.이전사용조직 || ''; (document.getElementById('hw-모델명') as HTMLInputElement).value = asset.모델명 || ''; (document.getElementById('hw-OS') as HTMLInputElement).value = asset.OS || ''; (document.getElementById('hw-CPU') as HTMLInputElement).value = asset.CPU || ''; (document.getElementById('hw-RAM') as HTMLInputElement).value = asset.RAM || ''; (document.getElementById('hw-SSD1') as HTMLInputElement).value = asset.SSD1 || ''; (document.getElementById('hw-SSD2') as HTMLInputElement).value = asset.SSD2 || ''; (document.getElementById('hw-구매일') as HTMLInputElement).value = asset.구매일 || ''; (document.getElementById('hw-담당자_정') as HTMLInputElement).value = asset.담당자_정 || asset.관리자 || ''; (document.getElementById('hw-담당자_부') as HTMLInputElement).value = asset.담당자_부 || ''; (document.getElementById('hw-품의서명') as HTMLElement).textContent = asset.품의서명 || ''; const serverOnly = document.querySelectorAll('.server-only'); const nonServer = document.querySelectorAll('.non-server'); const equipGroup = document.getElementById('hw-비품유형-group')!; if (asset.type === '서버') { serverOnly.forEach(el => (el as HTMLElement).style.display = 'flex'); nonServer.forEach(el => (el as HTMLElement).style.display = 'none'); equipGroup.style.display = 'none'; (document.getElementById('hw-용도') as HTMLInputElement).value = asset.용도 || ''; (document.getElementById('hw-상세') as HTMLInputElement).value = asset.상세 || ''; (document.getElementById('hw-비고') as HTMLInputElement).value = asset.비고 || ''; (document.getElementById('hw-IP주소') as HTMLInputElement).value = asset.IP주소 || ''; (document.getElementById('hw-IP2') as HTMLInputElement).value = (asset as any).IP2 || ''; (document.getElementById('hw-원격접속') as HTMLInputElement).value = asset.원격접속 || ''; (document.getElementById('hw-서버ID') as HTMLInputElement).value = (asset as any).서버ID || ''; (document.getElementById('hw-서버PW') as HTMLInputElement).value = (asset as any).서버PW || ''; (document.getElementById('hw-모니터링') as HTMLInputElement).value = asset.모니터링 || ''; } else { serverOnly.forEach(el => (el as HTMLElement).style.display = 'none'); nonServer.forEach(el => (el as HTMLElement).style.display = 'flex'); (document.getElementById('hw-명칭') as HTMLInputElement).value = asset.명칭 || ''; (document.getElementById('hw-구매일') as HTMLInputElement).value = asset.구매일 || ''; (document.getElementById('hw-금액') as HTMLInputElement).value = asset.금액 || ''; (document.getElementById('hw-HW사양') as HTMLTextAreaElement).value = asset.HW사양 || ''; (document.getElementById('hw-IP주소-non-server') as HTMLInputElement).value = asset.IP주소 || ''; if (asset.type === '전산비품') { equipGroup.style.display = 'flex'; (document.getElementById('hw-비품유형') as HTMLSelectElement).value = asset.비품유형 || '노트북'; } else { equipGroup.style.display = 'none'; } } } export function initHwModal(onSave: () => void, closeModals: () => void) { // HTML 주입 if (!document.getElementById('hw-asset-modal')) { document.body.insertAdjacentHTML('beforeend', HW_MODAL_HTML); } const modal = document.getElementById('hw-asset-modal')!; const form = document.getElementById('hw-asset-form') as HTMLFormElement; const closeBtn = document.getElementById('btn-close-hw-modal')!; const cancelBtn = document.getElementById('btn-cancel-hw-modal')!; const saveBtn = document.getElementById('btn-save-hw-asset')!; const revertBtn = document.getElementById('btn-revert-hw-edit')!; const deleteBtn = document.getElementById('btn-delete-hw-asset')!; const closeModal = () => { closeModals(); isEditMode = false; }; const switchToViewMode = () => { isEditMode = false; form.classList.remove('is-edit-mode'); form.classList.add('is-view-mode'); saveBtn.textContent = '수정'; revertBtn.classList.add('hidden'); if (currentAsset) fillHwFormData(currentAsset); }; closeBtn.addEventListener('click', closeModal); cancelBtn.addEventListener('click', closeModal); modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); revertBtn.addEventListener('click', () => { switchToViewMode(); }); saveBtn.addEventListener('click', () => { if (!currentAsset) return; if (!isEditMode) { isEditMode = true; form.classList.remove('is-view-mode'); form.classList.add('is-edit-mode'); saveBtn.textContent = '저장'; revertBtn.classList.remove('hidden'); return; } const assetId = (document.getElementById('hw-asset-id') as HTMLInputElement).value; const type = (document.getElementById('hw-asset-type') as HTMLInputElement).value; const updated: HardwareAsset = { ...currentAsset, 법인: (document.getElementById('hw-법인') as HTMLInputElement).value, 자산코드: (document.getElementById('hw-자산코드') as HTMLInputElement).value, 위치: (document.getElementById('hw-위치') as HTMLInputElement).value, 현사용조직: (document.getElementById('hw-현사용조직') as HTMLInputElement).value, 이전사용조직: (document.getElementById('hw-이전사용조직') as HTMLInputElement).value, 모델명: (document.getElementById('hw-모델명') as HTMLInputElement).value, OS: (document.getElementById('hw-OS') as HTMLInputElement).value, CPU: (document.getElementById('hw-CPU') as HTMLInputElement).value, RAM: (document.getElementById('hw-RAM') as HTMLInputElement).value, SSD1: (document.getElementById('hw-SSD1') as HTMLInputElement).value, SSD2: (document.getElementById('hw-SSD2') as HTMLInputElement).value, 구매일: (document.getElementById('hw-구매일') as HTMLInputElement).value, 담당자_정: (document.getElementById('hw-담당자_정') as HTMLInputElement).value, 관리자: (document.getElementById('hw-담당자_정') as HTMLInputElement).value, 담당자_부: (document.getElementById('hw-담당자_부') as HTMLInputElement).value, }; if (type === '서버') { updated.용도 = (document.getElementById('hw-용도') as HTMLInputElement).value; updated.상세 = (document.getElementById('hw-상세') as HTMLInputElement).value; updated.비고 = (document.getElementById('hw-비고') as HTMLInputElement).value; updated.IP주소 = (document.getElementById('hw-IP주소') as HTMLInputElement).value; (updated as any).IP2 = (document.getElementById('hw-IP2') as HTMLInputElement).value; updated.원격접속 = (document.getElementById('hw-원격접속') as HTMLInputElement).value; (updated as any).서버ID = (document.getElementById('hw-서버ID') as HTMLInputElement).value; (updated as any).서버PW = (document.getElementById('hw-서버PW') as HTMLInputElement).value; updated.모니터링 = (document.getElementById('hw-모니터링') as HTMLInputElement).value; } else { updated.명칭 = (document.getElementById('hw-명칭') as HTMLInputElement).value; updated.구매일 = (document.getElementById('hw-구매일') as HTMLInputElement).value; updated.금액 = (document.getElementById('hw-금액') as HTMLInputElement).value; updated.HW사양 = (document.getElementById('hw-HW사양') as HTMLTextAreaElement).value; updated.IP주소 = (document.getElementById('hw-IP주소-non-server') as HTMLInputElement).value; if (type === '전산비품') { updated.비품유형 = (document.getElementById('hw-비품유형') as HTMLSelectElement).value; } } const idx = state.masterData.hw.findIndex(a => a.id === assetId); if (idx > -1) { state.masterData.hw[idx] = updated; onSave(); switchToViewMode(); } }); deleteBtn.addEventListener('click', () => { if (!currentAsset) return; if (confirm('정말로 이 자산을 삭제하시겠습니까?')) { state.masterData.hw = state.masterData.hw.filter(a => a.id !== currentAsset!.id); onSave(); closeModal(); } }); }