201 lines
7.4 KiB
JavaScript
201 lines
7.4 KiB
JavaScript
/**
|
|
* 섭취챌린지 관련 스크립트
|
|
* 최근 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(`
|
|
<button class="microModal__btn" id="modal-confirm-cancel" aria-label="취소">취소</button>
|
|
<button class="microModal__btn microModal__btn-primary" id="modal-confirm-ok">확인</button>
|
|
`);
|
|
|
|
// 기존 이벤트 핸들러 제거 후 새로 등록
|
|
$('#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(`
|
|
<button class="microModal__btn" id="continueAdding" aria-label="계속추가">계속추가</button>
|
|
<button class="microModal__btn microModal__btn-primary" id="startChallenge">챌린지 시작</button>
|
|
`);
|
|
|
|
// 기존 이벤트 핸들러 제거 후 새로 등록
|
|
$('#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');
|
|
}
|
|
});
|