113 lines
5.9 KiB
TypeScript
113 lines
5.9 KiB
TypeScript
import { state } from '../../state';
|
|
import { HardwareAsset } from '../../excelHandler';
|
|
import { openModal } from './BaseModal';
|
|
|
|
/**
|
|
* 하드웨어(서버, 전산비품 등) 모달 초기화 및 로직 제어
|
|
*/
|
|
export function initHWModal(renderContent: () => void, closeModals: () => void) {
|
|
const hwForm = document.getElementById('hw-asset-form') as HTMLFormElement;
|
|
const btnSaveHw = document.getElementById('btn-save-hw-asset') as HTMLButtonElement;
|
|
const btnDeleteHw = document.getElementById('btn-delete-hw-asset') as HTMLButtonElement;
|
|
|
|
// 저장 버튼 이벤트
|
|
btnSaveHw?.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
if (!hwForm.checkValidity()) { hwForm.reportValidity(); return; }
|
|
|
|
const id = (document.getElementById('hw-asset-id') as HTMLInputElement).value;
|
|
const fileInput = document.getElementById('hw-품의서') as HTMLInputElement;
|
|
const 품의서명 = fileInput.files && fileInput.files.length > 0 ? fileInput.files[0].name : (document.getElementById('hw-품의서명') as HTMLElement).innerText.replace('📎', '');
|
|
|
|
const newAsset: HardwareAsset = {
|
|
id: id || Math.random().toString(36).substring(2, 9),
|
|
type: (document.getElementById('hw-asset-type') 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,
|
|
IP주소: (document.getElementById('hw-IP주소') as HTMLInputElement).value,
|
|
MACaddress: (document.getElementById('hw-MACaddress') as HTMLInputElement).value,
|
|
OS: (document.getElementById('hw-OS') as HTMLInputElement).value,
|
|
HW사양: (document.getElementById('hw-HW사양') as HTMLTextAreaElement).value,
|
|
구매일: (document.getElementById('hw-구매일') as HTMLInputElement).value,
|
|
금액: (document.getElementById('hw-금액') as HTMLInputElement).value,
|
|
납품업체: (document.getElementById('hw-납품업체') as HTMLInputElement).value,
|
|
품의서명,
|
|
비품유형: (document.getElementById('hw-asset-type') as HTMLInputElement).value === '전산비품'
|
|
? (document.getElementById('hw-비품유형') as HTMLSelectElement).value : undefined
|
|
};
|
|
|
|
if (id) {
|
|
const idx = state.masterData.hw.findIndex(a => a.id === id);
|
|
if(idx !== -1) state.masterData.hw[idx] = newAsset;
|
|
} else {
|
|
state.masterData.hw.push(newAsset);
|
|
}
|
|
|
|
closeModals();
|
|
renderContent();
|
|
});
|
|
|
|
// 삭제 버튼 이벤트
|
|
btnDeleteHw?.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
const id = (document.getElementById('hw-asset-id') as HTMLInputElement).value;
|
|
if (confirm('삭제하시겠습니까?')) {
|
|
state.masterData.hw = state.masterData.hw.filter(a => a.id !== id);
|
|
closeModals();
|
|
renderContent();
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 하드웨어 상세 모달 열기
|
|
* @param asset 수정 시 자산 데이터, 신규 시 undefined
|
|
*/
|
|
export function openHwModal(asset?: HardwareAsset) {
|
|
const hwModal = document.getElementById('hw-asset-modal') as HTMLDivElement;
|
|
const hwForm = document.getElementById('hw-asset-form') as HTMLFormElement;
|
|
const deleteBtn = document.getElementById('btn-delete-hw-asset')!;
|
|
|
|
openModal('hw-asset-modal');
|
|
hwForm.reset();
|
|
|
|
if (asset) {
|
|
document.getElementById('hw-modal-title')!.textContent = '자산 상세 정보 수정';
|
|
deleteBtn.style.display = 'block';
|
|
|
|
(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-IP주소') as HTMLInputElement).value = asset.IP주소;
|
|
(document.getElementById('hw-MACaddress') as HTMLInputElement).value = asset.MACaddress;
|
|
(document.getElementById('hw-OS') as HTMLInputElement).value = asset.OS;
|
|
(document.getElementById('hw-HW사양') as HTMLTextAreaElement).value = asset.HW사양;
|
|
(document.getElementById('hw-구매일') as HTMLInputElement).value = asset.구매일 || '';
|
|
(document.getElementById('hw-금액') as HTMLInputElement).value = asset.금액 ? Number(asset.금액.replace(/,/g, '')).toLocaleString() : '';
|
|
(document.getElementById('hw-납품업체') as HTMLInputElement).value = asset.납품업체 || '';
|
|
(document.getElementById('hw-품의서명') as HTMLElement).innerText = asset.품의서명 ? `📎${asset.품의서명}` : '';
|
|
(document.getElementById('hw-비품유형') as HTMLSelectElement).value = asset.비품유형 || '노트북';
|
|
} else {
|
|
document.getElementById('hw-modal-title')!.textContent = `새 ${state.activeSubTab} 자산 추가`;
|
|
deleteBtn.style.display = 'none';
|
|
(document.getElementById('hw-asset-id') as HTMLInputElement).value = '';
|
|
(document.getElementById('hw-asset-type') as HTMLInputElement).value = state.activeSubTab;
|
|
(document.getElementById('hw-품의서명') as HTMLElement).innerText = '';
|
|
(document.getElementById('hw-비품유형') as HTMLSelectElement).value = '노트북';
|
|
}
|
|
|
|
// 전산비품일 경우 유형 선택 필드 노출
|
|
if (state.activeSubTab === '전산비품') {
|
|
document.getElementById('hw-비품유형-group')!.style.display = 'block';
|
|
} else {
|
|
document.getElementById('hw-비품유형-group')!.style.display = 'none';
|
|
}
|
|
}
|