/** * 섭취챌린지 관련 스크립트 * 최근 1년 이내 구매한 제품과 위시리스트 저장 제품 중에서 * 섭취챌린지에 추가할 제품을 선택하는 기능을 제공합니다. */ $(document).ready(function() { // 변수 선언 const $purchasedTab = $('#purchased-tab'); const $wishlistTab = $('#wishlist-tab'); const $purchasedList = $('.challenge_checklist.purchased'); const $wishlistList = $('.challenge_checklist.wishlist'); const $addToChallengeBtn = $('#addToChallengeBtn'); const bnfInnb = $('#bnfInnbHidden').val(); /** * 탭 전환 처리 * 구매한 제품 탭과 위시리스트 탭 간 전환 기능 */ $purchasedTab.on('click', function(e) { e.preventDefault(); // 탭 활성화 상태 변경 $purchasedTab.addClass('active'); $wishlistTab.removeClass('active'); // 리스트 표시 상태 변경 $purchasedList.show(); $wishlistList.hide(); }); $wishlistTab.on('click', function(e) { e.preventDefault(); // 탭 활성화 상태 변경 $wishlistTab.addClass('active'); $purchasedTab.removeClass('active'); // 리스트 표시 상태 변경 $wishlistList.show(); $purchasedList.hide(); }); /** * 제품 체크박스 상태 관리 * 체크박스 토글 시 시각적 구분 처리 */ $('.challenge_checklist input[type="checkbox"]').on('change', function() { const $checkboxItem = $(this).closest('li'); if ($(this).is(':checked')) { $checkboxItem.addClass('selected'); } else { $checkboxItem.removeClass('selected'); } }); /** * 섭취챌린지 제품 추가 * 선택한 제품들을 섭취챌린지에 추가하는 기능 */ $addToChallengeBtn.on('click', function() { // 선택된 제품 ID 수집 const selectedProducts = []; // 구매 제품 탭에서 선택된 제품 처리 $('.challenge_checklist.purchased input[type="checkbox"]:checked').each(function() { selectedProducts.push({ goodsInnb: $(this).val(), originDvCd: '01' // 구매 제품 출처 코드 }); }); // 위시리스트 탭에서 선택된 제품 처리 $('.challenge_checklist.wishlist input[type="checkbox"]:checked').each(function() { selectedProducts.push({ goodsInnb: $(this).val(), originDvCd: '02' // 위시리스트 출처 코드 }); }); // 선택된 제품이 없는 경우 알림 표시 if (selectedProducts.length === 0) { showCustomAlert('섭취챌린지에 추가할 제품을 선택해주세요.'); return; } // 확인 팝업 표시 showConfirmModal('선택한 제품을 섭취챌린지에 추가하시겠습니까?', function() { // API 호출 데이터 준비 const requestData = { bnfInnb: bnfInnb, products: selectedProducts }; // API 호출 $.ajax({ url: '/sopmal/bnft/addSelectedProducts', type: 'POST', contentType: 'application/json', data: JSON.stringify(requestData), success: function(response) { // 응답 구조 파싱 try { // result 필드가 문자열 형태의 JSON이므로 파싱 const resultObj = JSON.parse(response.resBody.result); if (resultObj.success) { // 성공 시 처리 showCustomAlert(resultObj.message || '제품이 섭취챌린지에 추가되었습니다.'); // 추가된 제품을 목록에서 제거 removeAddedProducts(selectedProducts); } else { // 실패 시 처리 showCustomAlert(resultObj.message || '제품 추가 중 오류가 발생했습니다.'); } } catch (e) { // JSON 파싱 오류 처리 showCustomAlert('응답 처리 중 오류가 발생했습니다.'); console.error('응답 파싱 오류:', e); } }, error: function() { showCustomAlert('서버 통신 중 오류가 발생했습니다.'); } }); }); }); /** * 추가된 제품을 목록에서 제거 * @param {Array} productIds - 제거할 제품 ID 배열 */ function removeAddedProducts(productIds) { productIds.forEach(function(productId) { $(`.challenge_checklist input[value="${productId.goodsInnb}"]`).closest('li').remove(); }); } /** * 확인 모달 표시 * @param {string} message - 표시할 메시지 * @param {Function} confirmCallback - 확인 버튼 클릭 시 실행할 콜백 함수 */ function showConfirmModal(message, confirmCallback) { // 모달 내용 설정 $('#modal-1 .microModal__title').html(message); // 모달 버튼 영역 수정 $('#modal-1 .microModal__btnContainer').html(` `); // 기존 이벤트 핸들러 제거 후 새로 등록 $('#modal-confirm-ok').off('click').on('click', function() { MicroModal.close('modal-1'); if (typeof confirmCallback === 'function') { confirmCallback(); } }); // 취소 버튼 이벤트 $('#modal-confirm-cancel').off('click').on('click', function() { MicroModal.close('modal-1'); }); // 모달 표시 MicroModal.show('modal-1'); } /** * 커스텀 알림 표시 함수 * @param {string} message - 표시할 메시지 */ function showCustomAlert(message) { // 모달 내용 설정 $('#modal-1 .microModal__title').html(message); // 모달 버튼 영역 수정 $('#modal-1 .microModal__btnContainer').html(` `); // 기존 이벤트 핸들러 제거 후 새로 등록 $('#continueAdding').off('click').on('click', function() { MicroModal.close('modal-1'); }); $('#startChallenge').off('click').on('click', function() { MicroModal.close('modal-1'); // 챌린지 페이지로 이동 (bnfInnb 파라미터 추가) window.location.href = '/sopmal/bnft/intakchlDailyRecordMain?bnfInnb=' + bnfInnb; }); // 모달 표시 MicroModal.show('modal-1'); } });