126 lines
5.0 KiB
JavaScript
126 lines
5.0 KiB
JavaScript
/**
|
|
* CpslmknSettings.js
|
|
*
|
|
* 캡슐 메이킹 게임 설정 페이지 관련 기능 구현
|
|
* 초록잎/도토리 보유 내역 보기, 알림 설정 등 사용자 설정 기능 제공
|
|
*/
|
|
|
|
/**
|
|
* 토스트 메시지 표시 함수
|
|
* @param {string} message - 표시할 메시지
|
|
*/
|
|
function showToast(message) {
|
|
// 기존에 토스트 요소가 있으면 제거
|
|
$('.toastPop').remove();
|
|
|
|
// 토스트 요소 생성 및 추가
|
|
const $toast = $('<div class="toastPop">' + message + '</div>');
|
|
$('body').append($toast);
|
|
|
|
// 토스트 표시 및 자동 제거
|
|
setTimeout(function() {
|
|
$toast.addClass('show');
|
|
|
|
setTimeout(function() {
|
|
$toast.removeClass('show');
|
|
|
|
// 애니메이션 완료 후 요소 제거
|
|
setTimeout(function() {
|
|
$toast.remove();
|
|
}, 300);
|
|
}, 2000);
|
|
}, 100);
|
|
}
|
|
|
|
|
|
/**
|
|
* 초록잎/도토리 보유 내역 페이지로 이동하는 함수
|
|
* 사용자가 현재까지 모은 아이템 내역을 확인할 수 있는 페이지로 이동
|
|
*/
|
|
function goToLeafHistory() {
|
|
const sopmalCd = $('#sopmalCd').val();
|
|
window.location.href = `/sopmal/bnft/leafHistory?sopmalCd=${sopmalCd}`;
|
|
}
|
|
|
|
/**
|
|
* 알림 설정 토글 함수
|
|
* 사용자의 알림 수신 동의 상태를 변경하고 서버에 업데이트
|
|
* 스위치 토글 시 호출되어 서버에 알림 설정 변경 요청
|
|
*/
|
|
function toggleNotification() {
|
|
// 토글 스위치 요소 및 현재 선택 상태 가져오기
|
|
const $switch = $('input[role="switch"]'); // 토글 스위치 요소
|
|
const isChecked = $switch.prop('checked'); // 현재 스위치 상태 (체크됨/안됨)
|
|
const agreAt = isChecked ? 'Y' : 'N'; // 동의 여부 값 (Y: 동의, N: 미동의)
|
|
|
|
// 서버에 알림 설정 변경 요청
|
|
$.ajax({
|
|
url: '/sopmal/bnft/notification',
|
|
method: 'POST',
|
|
contentType: 'application/json',
|
|
data: JSON.stringify({
|
|
// bnfDvCd, bnfAgreDvCd는 백엔드에서 고정값 사용 또는 자동 인식 가능 시 제거 가능
|
|
bnfDvCd: '050',
|
|
bnfAgreDvCd: '010',
|
|
agreAt: agreAt // 동의 여부 (Y/N) - 필수 전송
|
|
}),
|
|
// 요청 성공 시 처리
|
|
success: function(response) {
|
|
// 응답 결과 파싱 (WnbtResponse 구조 가정)
|
|
try {
|
|
// responseHandler가 이미 파싱해줄 수 있으나, 안전하게 처리
|
|
let resultData = {};
|
|
if (typeof response.resBody?.result === 'string') {
|
|
resultData = JSON.parse(response.resBody.result);
|
|
} else {
|
|
resultData = response.resBody?.result || {};
|
|
}
|
|
|
|
if (resultData.success === true) {
|
|
// 설정 변경 성공 메시지 (기존 alert 대신 다른 UI 고려 가능)
|
|
showToast(resultData.message || '알림 설정이 변경되었습니다.');
|
|
} else {
|
|
// 설정 변경 실패 메시지
|
|
showToast(resultData.message || '알림 설정 변경에 실패했습니다.');
|
|
// 서버 처리 실패 시 UI 상태 복원 (토글 원상태로)
|
|
$switch.prop('checked', !isChecked);
|
|
}
|
|
} catch (e) {
|
|
console.error("알림 설정 응답 처리 오류:", e);
|
|
showToast('알림 설정 응답 처리 중 오류가 발생했습니다.');
|
|
$switch.prop('checked', !isChecked); // 오류 시 UI 복원
|
|
}
|
|
},
|
|
// 요청 실패 시 처리
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
// 통신 오류 메시지
|
|
console.error("알림 설정 API 호출 실패:", textStatus, errorThrown);
|
|
showToast('서버와의 통신 중 오류가 발생했습니다.');
|
|
// 통신 실패 시 UI 상태 복원 (토글 원상태로)
|
|
$switch.prop('checked', !isChecked);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 페이지 로드 시 실행되는 초기화 함수
|
|
* 페이지 UI 설정, 이벤트 리스너 등록, 초기 상태 설정
|
|
*/
|
|
$(document).ready(function() {
|
|
|
|
// 초록잎/도토리 보유 내역 링크 클릭 이벤트 리스너 추가
|
|
$('.productManagement li:first-child a').on('click', function(e) {
|
|
e.preventDefault(); // 기본 링크 동작 방지
|
|
goToLeafHistory(); // 보유 내역 페이지로 이동 함수 호출
|
|
});
|
|
|
|
// 알림 설정 스위치 변경 이벤트 리스너 추가
|
|
$('input[role="switch"]').on('change', toggleNotification);
|
|
|
|
// 페이지 로드 시 서버에서 받아온 사용자의 현재 알림 설정 상태에 따라 스위치 초기화
|
|
// notificationStatus 변수는 JSP에서 전역으로 선언되어 있어야 함 ('Y' 또는 'N')
|
|
if (typeof notificationStatus !== 'undefined') {
|
|
$('input[role="switch"]').prop('checked', notificationStatus === 'Y');
|
|
}
|
|
|
|
}); |