merge master into develop - CscListRForm.jsp FAQ 아코디언 버그 수정

This commit is contained in:
jilee4unity
2026-05-28 23:34:06 +09:00
7250 changed files with 570509 additions and 25 deletions

View File

@@ -0,0 +1,200 @@
/**
* 섭취챌린지 관련 스크립트
* 최근 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');
}
});