// 쿠폰함 페이지로 이동하는 함수 function goToCouponPage() { // 쿠폰함 페이지 URL로 이동 window.location.href = '/sopmal/coupon/list'; } // 새로운 캡슐 만들기 시작하는 함수 function startNewCapsule() { // 제품 선택 페이지로 이동 window.location.href = '/sopmal/bnft/selectCapsule'; } // 다른 선물로 다시 시작하는 함수 (리셋 확인 모달에서 호출) function resetCapsule() { // Ajax 요청으로 현재 진행 상태 초기화 $.ajax({ url: '/sopmal/bnft/resetCapsule', type: 'POST', contentType: 'application/json', data: JSON.stringify({ bnfInnb: $('#bnfInnb').val(), bnfSttusInnb: $('#bnfSttusInnb').val() }), success: function(response) { // 응답 구조 변경에 맞게 처리 const result = JSON.parse(response.resBody.result); if (result.success) { // 제품 선택 페이지로 이동 window.location.href = '/sopmal/bnft/selectCapsule'; } else { alert('초기화 중 오류가 발생했습니다. 다시 시도해주세요.'); } }, error: function() { alert('서버 오류가 발생했습니다. 다시 시도해주세요.'); } }); } // 모달 초기화 함수 function initModals() { // modal-2(다시 시작 확인) 버튼 이벤트 등록 $('#modal-2 .microModal__btn:first-child').on('click', function() { resetCapsule(); }); // 애니메이션 효과 초기화 // initCompletionAnimation(); } // 모달 데이터 로드 및 초기화 $(document).ready(function() { // 모달 초기화: onShow 콜백과 다른 옵션들을 함께 설정 MicroModal.init({ disableScroll: true, awaitCloseAnimation: true, onShow: function(modal) { console.log(`Modal shown: ${modal.id}`); if (modal.id === 'modal-1') { console.log('Loading data for modal-1...'); loadModalData(); } } }); // 🔥 문제 부분: 이 코드를 제거하거나 수정해야 함 // 모달2(다시 시작 확인) 버튼 이벤트 등록을 제거 // $(document).off('click', '#modal-2 .microModal__btn:first-child').on('click', '#modal-2 .microModal__btn:first-child', function() { // resetCapsule(); // }); // 대신 "다른선물로 다시 시작" 버튼에만 resetCapsule을 바인딩 $(document).off('click', '#restartGameButton').on('click', '#restartGameButton', function(e) { e.preventDefault(); showRestartConfirmModal(); }); }); // 모달 데이터 로드 함수 function loadModalData() { const bnfInnb = $('#bnfInnb').val() || $('input[name="bnfInnb"]').val(); if (!bnfInnb) { console.error('bnfInnb 값을 찾을 수 없습니다.'); return; } // AJAX로 최신 진행 상태 데이터 요청 $.ajax({ url: '/sopmal/bnft/getProgressStatus', type: 'GET', data: { bnfInnb: bnfInnb }, success: function(response) { if (response.resultCode === '0000') { // 응답 데이터로 모달 내용 업데이트 updateModalContent(response.content); } else { console.error('데이터 로드 실패:', response.message); } }, error: function(xhr, status, error) { console.error('AJAX 요청 실패:', error); } }); } // 모달 내용 업데이트 함수 function updateModalContent(data) { console.log("updateModalContent 호출됨:", data); // 디버깅용 const progressInfo = data.progressInfo; if (!progressInfo) { console.error("progressInfo가 없습니다:", data); return; } // progressStep이 유효한지 확인 if (!progressInfo.progrsStep || isNaN(parseInt(progressInfo.progrsStep))) { console.error("유효하지 않은 progrsStep:", progressInfo.progrsStep); progressInfo.progrsStep = 1; // 기본값 설정 } else { // 숫자로 변환 progressInfo.progrsStep = parseInt(progressInfo.progrsStep); } console.log("현재 단계:", progressInfo.progrsStep); // 쇼핑몰 코드에 따른 텍스트 설정 const brandName = (data.sopmalCd === 'NC') ? '뉴트리' : '닥터린'; // 모달 컨테이너 참조 const $modalContent = $('#modal-1 .microModal__content'); if ($modalContent.length === 0) { console.error("모달 컨테이너를 찾을 수 없습니다"); return; } // 모달 컨텐츠 초기화 $modalContent.empty(); // 게임 상태 요소 생성 const $gameStatus = $('
'); $modalContent.append($gameStatus); // 진행 상태에 따라 다른 UI 표시 // 수정: 5단계 완성 여부를 stepProgressPercentage로 판단 const isGameCompleted = progressInfo.progrsStep === 5 && progressInfo.stepProgressPercentage >= 100; if (!isGameCompleted) { // 진행 중 UI (5단계 진행 중 포함) $gameStatus.append(`${brandName} 캡슐 만들기
${progressInfo.progrsStep}단계 진행중!!
${brandName} 캡슐을 완성하면 받는 선물이예요.
`); const $gameGiftInbox = $(''); $gameGiftInbox.append(`${data.productDesc || ''}
`); $txtDiv.append(`${data.productName || ''}
`); $gameGiftInbox.append($txtDiv); $gameGift.append($gameGiftInbox); // 다른 선물로 다시 시작 버튼 추가 $gameGift.append(``); $gameStatus.append($gameGift); } else { // 완료 상태 UI 구성 (5단계 100% 완성 시에만) $gameStatus.append(`${brandName} 캡슐 만들기 최종 완료!
진짜 영양제 선물받고
새로운 캡슐 만들기 시작하세요.
${data.productName || ''}
${data.productDesc || ''}
참여방법안내
${notice2Content}
`); // CSS 문제 해결을 위한 강제 스타일 적용 $commentBox.css({ 'background': '#fff', 'padding': '16px', 'padding-bottom': '16px', // 정상적인 패딩으로 수정 'margin-bottom': '0', // 음수 마진 제거 'min-height': 'auto', 'display': 'block' }); $modalContent.append($commentBox); // 렌더링 후 확인용 로그 console.log("comment-box 렌더링 완료:", $commentBox); } // 진행 상태 바 생성 함수 - 단계별로 색상 변경 function createStatusBar(progressStep, progressPercent) { const $statusBarWrap = $(''); const $statusBar = $(''); // 디버깅 로그 추가 console.log(`createStatusBar 호출: progressStep=${progressStep}, progressPercent=${progressPercent}`); // 수정: 게이지 바 너비 계산 (6개 구간으로 나누기) // 시작(0%) → 1단계(16.67%) → 2단계(33.33%) → 3단계(50%) → 4단계(66.67%) → 5단계(83.33%) → 완료(100%) let widthPercent; if (progressStep < 5) { // 1~4단계: 각 단계당 16.67%씩 할당 widthPercent = progressStep * 16.67; } else if (progressStep === 5) { // 5단계: stepProgressPercentage에 따라 83.33%~100% 사이 const basePercent = 83.33; // 5단계 시작점 const additionalPercent = (progressPercent || 0) * 0.1667; // 5단계 내 진행률 (최대 16.67%) widthPercent = basePercent + additionalPercent; } else { // 완료 상태 widthPercent = 100; } console.log(`게이지 바 너비: ${widthPercent}%`); // 진행률 표시 바 - 단계에 맞게 너비 조정 $statusBar.append(``); // 시작 지점 $statusBar.append('시작'); // 각 단계 표시 for (let i = 1; i <= 4; i++) { // 현재 단계 이상인 경우 'on' 클래스 추가 const isActive = progressStep >= i; console.log(`단계 ${i}: ${isActive ? '활성화' : '비활성화'}`); $statusBar.append(`${i}단계`); } // 마지막 단계 - 5단계 완료(100%)일 때만 활성화 const isLastActive = progressStep === 5 && (progressPercent >= 100); console.log(`최종 단계: ${isLastActive ? '활성화' : '비활성화'}`); $statusBar.append(`5단계`); $statusBarWrap.append($statusBar); return $statusBarWrap; } // 다른선물로 다시 시작 확인 모달을 표시하는 함수 function showRestartConfirmModal() { console.log("다시 시작 확인 모달 표시 시도"); // 모달 HTML 정의 const restartModalHtml = ` `; // 이미 존재하는 restart-modal 제거 (중복 방지) $('#restart-modal').remove(); // 모달 HTML을 body에 추가 $('body').append(restartModalHtml); // 모달 표시 MicroModal.show('restart-modal', { onShow: function() { console.log("다시 시작 확인 모달이 표시됨"); } }); // 버튼 이벤트 핸들러 연결 $('#restartConfirmBtn').off('click').on('click', function() { console.log("처음부터 다시시작 버튼 클릭됨"); MicroModal.close('restart-modal'); // 사용자 선택 확정을 위한 두 번째 확인 모달 표시 showFinalConfirmModal(); }); $('#restartCancelBtn').off('click').on('click', function() { console.log("그대로 계속하기 버튼 클릭됨"); MicroModal.close('restart-modal'); }); } // 최종 확인 모달을 표시하는 함수 function showFinalConfirmModal() { // 모달 HTML 정의 const finalConfirmModalHtml = ` `; // 이미 존재하는 final-confirm-modal 제거 (중복 방지) $('#final-confirm-modal').remove(); // 모달 HTML을 body에 추가 $('body').append(finalConfirmModalHtml); // 모달 표시 MicroModal.show('final-confirm-modal'); // 버튼 이벤트 핸들러 연결 $('#finalConfirmBtn').off('click').on('click', function() { console.log("최종 다시 시작하기 버튼 클릭됨"); MicroModal.close('final-confirm-modal'); // 캡슐 선택 페이지로 이동 resetCapsule(); }); $('#finalCancelBtn').off('click').on('click', function() { console.log("최종 취소 버튼 클릭됨"); MicroModal.close('final-confirm-modal'); }); }