import { state } from '../../core/state'; import { BaseModal } from './BaseModal'; import { createIcons, Edit2, X, Paperclip, Calendar, Plus } from 'lucide'; import { ORG_LIST } from './SharedData'; import { generateOptionsHTML, setFieldValue, getFieldValue, applyDateMask } from './ModalUtils'; class SwUserModal extends BaseModal { private tempSwUsers: any[] = []; constructor() { super('sw-user', '소프트웨어 사용자 관리'); } protected renderFrameHTML(): string { return `
`; } protected initChildLogic(onSave: () => void, closeModals: () => void): void { const mainSaveBtn = document.getElementById('btn-save-sw-user')!; const addUserBtn = document.getElementById('btn-open-add-user')!; const confirmUserBtn = document.getElementById('btn-confirm-user-edit')!; ['new-user-시작일', 'new-user-종료일'].forEach(id => { const el = document.getElementById(id) as HTMLInputElement; if (el) applyDateMask(el); }); addUserBtn.addEventListener('click', () => this.openUserEditSubModal()); confirmUserBtn.addEventListener('click', () => this.saveUserDataToList()); mainSaveBtn.addEventListener('click', () => { if (!this.currentAsset) return; const existingIdx = state.masterData.swUsers.findIndex(u => u.sw_id === this.currentAsset!.id); const newMapping = { sw_id: this.currentAsset!.id, userData: this.tempSwUsers.map(u => [u.조직, u.부서, u.직위, u.이름, u.사용기간, u.신청서명]) }; if (existingIdx > -1) state.masterData.swUsers[existingIdx] = newMapping as any; else state.masterData.swUsers.push(newMapping as any); onSave(); this.close(); closeModals(); }); document.getElementById('btn-close-sw-user-modal')?.addEventListener('click', () => this.close()); document.getElementById('btn-cancel-sw-user')?.addEventListener('click', () => this.close()); const subModal = document.getElementById('sw-user-edit-modal')!; const closeSub = () => subModal.classList.add('hidden'); document.getElementById('btn-close-user-edit')?.addEventListener('click', closeSub); document.getElementById('btn-close-user-sub')?.addEventListener('click', closeSub); createIcons({ icons: { X, Plus, Calendar, Edit2, Paperclip } }); } protected fillFormData(asset: any): void { const swInfo = document.getElementById('sw-user-sw-info')!; swInfo.innerHTML = `