(function () { // Bootstrap 5을 사용한다고 가정. data-bs-* 이벤트로 처리. const changePasswordModal = document.getElementById('changePasswordModal'); const modalUserInfo = document.getElementById('modalUserInfo'); const changePasswordForm = document.getElementById('changePasswordForm'); const newPasswordInput = document.getElementById('newPasswordInput'); const confirmPasswordInput = document.getElementById('confirmPasswordInput'); const pwMismatch = document.getElementById('pwMismatch'); if (!changePasswordModal) return; changePasswordModal.addEventListener('show.bs.modal', function (event) { const button = event.relatedTarget; // 버튼 that triggered the modal const userId = button.getAttribute('data-user-id'); const username = button.getAttribute('data-username') || ('ID ' + userId); // 표시 텍스트 세팅 modalUserInfo.textContent = username + ' (ID: ' + userId + ')'; // 폼 action 동적 설정: admin.reset_password 라우트 기대 // 예: /admin/users/123/reset_password // Note: This assumes the URL pattern exists. Adjust if needed. const baseUrl = changePasswordForm.getAttribute('data-base-url') || '/admin/users/0/reset_password'; changePasswordForm.action = baseUrl.replace('/0/', '/' + userId + '/'); // 폼 내부 비밀번호 필드 초기화 newPasswordInput.value = ''; confirmPasswordInput.value = ''; confirmPasswordInput.classList.remove('is-invalid'); pwMismatch.style.display = 'none'; }); // 폼 제출 전 클라이언트에서 비밀번호 일치 검사 changePasswordForm.addEventListener('submit', function (e) { const a = newPasswordInput.value || ''; const b = confirmPasswordInput.value || ''; if (a.length < 8) { newPasswordInput.focus(); e.preventDefault(); return; } if (a !== b) { e.preventDefault(); confirmPasswordInput.classList.add('is-invalid'); pwMismatch.style.display = 'block'; confirmPasswordInput.focus(); return; } // 제출 허용 (서버측에서도 반드시 검증) }); })();