(() => { // 🌐 API Base URL μ„€μ • const isNewYear = new Date() >= new Date('2026-01-01T00:00'); const API_BASE_URL = isNewYear ? 'https://grades.dotmodkorea.com' : 'https://legacy.dotmodkorea.com'; const { actions, EventManager, pageHelper, Handlebars } = ShopbySkin; const { initialize } = pageHelper.myPageHelper(); initialize(); // λ“±κΈ‰ μ§„ν–‰λ₯  계산 ν•¨μˆ˜ const calculateGradeProgress = (current, max) => { return Math.floor((current / max) * 100); }; // νšŒμ› μš”μ•½ 정보 API 호좜 ν•¨μˆ˜ const fetchMemberSummary = async (memberNo) => { try { // 1. λ“±κΈ‰ κ·œμΉ™ λ¨Όμ € 쑰회 const gradeRules = isNewYear ? [ { gradeName: '사원', minAmount: 0, }, { gradeName: 'λŒ€λ¦¬', minAmount: 100000, }, { gradeName: 'νŒ€μž₯', minAmount: 300000, }, { gradeName: 'λŒ€ν‘œ', minAmount: 500000, }, ] : [ { gradeNo: 92972, gradeName: '인턴', minAmount: 0, }, { gradeNo: 92977, gradeName: '사원', minAmount: 50000, }, { gradeNo: 92973, gradeName: 'λŒ€λ¦¬', minAmount: 100000, }, { gradeNo: 92974, gradeName: 'κ³Όμž₯', minAmount: 300000, }, { gradeNo: 92975, gradeName: 'λΆ€μž₯', minAmount: 700000, }, { gradeNo: 92976, gradeName: '사μž₯', minAmount: 1500000, }, ]; // 2. νšŒμ› μš”μ•½ 정보 쑰회 const response = await fetch(`${API_BASE_URL}/api/shopby/grade/summary/${memberNo}`); // const response = { // orderCount: 6900, // 총 주문건수 // purchasedPrice: 1000000, // 총 κ²°μ œκΈˆμ•‘ // currentGrade: 'κ³Όμž₯', // nextGrade: '사μž₯', // priceToNextGrade: 500000, // priceToMaintainGrade: 200000, // }; // const data = response; if (!response.ok) { throw new Error(`API 호좜 μ‹€νŒ¨: ${response.status} ${response.statusText}`); } const responseData = await response.json(); const data = responseData.data; if (isNewYear) { if (data.currentGrade === 'λŒ€ν‘œ') { data.nextGradeMinAmount = gradeRules.find((i) => i.gradeName === 'λŒ€ν‘œ').minAmount; } else { const nextGradeData = gradeRules.find((i) => i.gradeName === data.nextGrade); data.nextGradeMinAmount = nextGradeData.minAmount; } if (data.currentGrade === 'λŒ€ν‘œ') { data.gradeProgress = 100; } else { data.gradeProgress = calculateGradeProgress(data.purchasedPrice, data.nextGradeMinAmount); } } else { if (data.currentGrade === '사μž₯') { data.nextGradeMinAmount = gradeRules.find((i) => i.gradeName === '사μž₯').minAmount; } else { const nextGradeData = gradeRules.find((i) => i.gradeName === data.nextGrade); data.nextGradeMinAmount = nextGradeData.minAmount; } if (data.currentGrade === '사μž₯') { data.gradeProgress = 100; } else { data.gradeProgress = calculateGradeProgress(data.purchasedPrice, data.nextGradeMinAmount); } } // λ‚ μ§œ λ²”μœ„ 계산 (180일) const today = new Date(); const startDate = new Date(today); startDate.setDate(today.getDate() - 180); const formatDate = (date) => { const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0'); return `${year}.${month}.${day}`; }; data.startDate = formatDate(startDate); // 180일 μ „ data.endDate = formatDate(today); // 였늘 data.isNewYear = isNewYear; // μ‹ λ…„ μ—¬λΆ€ return data; } catch (error) { console.error('error on summary:', error); return null; } }; // νšŒμ› μš”μ•½ 정보 λ³€μˆ˜ let memberSummaryData; // purchased-price-summary ν…œν”Œλ¦Ώ μ—…λ°μ΄νŠΈ ν•¨μˆ˜ const updatePurchasedSummary = () => { const purchasedSummary = document.querySelector('purchased-price-summary'); if (purchasedSummary && memberSummaryData) { const scriptTag = purchasedSummary.querySelector('script[type="text/x-handlebars-template"]'); if (scriptTag) { const template = Handlebars.compile(scriptTag.innerHTML); const renderedHtml = template(memberSummaryData); purchasedSummary.innerHTML = renderedHtml; } } }; let shopbyCommonData = {}; EventManager.on('PAGE_LOAD_COMPLETED', async (commonData) => { shopbyCommonData = commonData; // νšŒμ› μš”μ•½ 정보 API ν˜ΈμΆœν•˜μ—¬ λ³€μˆ˜μ— λ‹΄κΈ° try { const profileResult = await actions.queryProfile(); if (profileResult && profileResult.data) { const memberNo = profileResult.data.memberNo; if (memberNo) { // memberSummaryData = await fetchMemberSummary('121858873'); memberSummaryData = await fetchMemberSummary(memberNo); // purchased-price-summary ν…œν”Œλ¦Ώμ— 데이터 전달 updatePurchasedSummary(); } } } catch (error) { console.error('νšŒμ› 정보 쑰회 μ‹€νŒ¨:', error); } // μ™ΈλΆ€μŠ€ν¬λ¦½νŠΈ 등둝 κΈ°λŠ₯. μ‚­μ œκΈˆμ§€ ShopbyExternalScript?.setPageScriptType('MY_PAGE'); }); EventManager.on('MY_ORDER_STATUS_CONTENT_LOADED', (data) => { // μ™ΈλΆ€μŠ€ν¬λ¦½νŠΈ 등둝 κΈ°λŠ₯. μ‚­μ œκΈˆμ§€ ShopbyExternalScript?.setGlobalObjectSb(data); }); const containerEl = document.querySelector('[shopby-helper-key="my-page-helper-key"]'); const clickEventListener = (event) => { const actionType = event.target.closest('[shopby-action]')?.getAttribute('shopby-action'); const CLICK_EVENT_HANDLER_MAP = { LOGOUT: async () => { await actions.postSignOut(); location.href = '/'; }, GRADE_BENEFIT: () => { EventManager.fire('OPEN_LAYER_MODAL', { name: 'grade-benefit-guide', title: 'λ“±κΈ‰ν˜œνƒ μ•ˆλ‚΄', isFull: false, data: { commonData: shopbyCommonData, }, }); }, PRODUCT_LIKE_BTN: ({ event }) => { event?.preventDefault?.(); const btn = event.target.closest('[shopby-product-no]'); const productNo = Number(btn.getAttribute('shopby-product-no') ?? 0); actions.toggleLikeStatus({ productNo, onSuccess: (isLiked) => { if (isLiked) { btn.classList.add('is-active'); return; } btn.classList.remove('is-active'); }, }); }, INQUIRY_REGISTER: () => { EventManager.fire('OPEN_LAYER_MODAL', { name: 'personal-inquiry-form', title: `1:1문의 등둝`, modalAddClass: 'personal-inquiry-form-modal', isFull: false, data: { isModify: false, commonData: shopbyCommonData, }, onClose: ({ reason }) => { if (reason === 'DID_SUBMIT') { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: 'κ²Œμ‹œκΈ€μ΄ μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.', onClose: () => { location.reload(); }, }); } }, }); }, PRODUCT_INQUIRY_REGISTER: () => { EventManager.fire('OPEN_LAYER_MODAL', { name: 'product-inquiry-form', title: 'μƒν’ˆλ¬Έμ˜', modalAddClass: 'product-inquiry-form-modal', isFull: false, data: { isSelectProduct: true, commonData: shopbyCommonData, }, onClose: ({ reason }) => { if (reason === 'DID_SUBMIT') { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: 'μƒν’ˆλ¬Έμ˜κ°€ λ“±λ‘λμŠ΅λ‹ˆλ‹€.', onClose: () => { location.reload(); }, }); } }, }); }, PRODUCT_REVIEW_REGISTER: () => { EventManager.fire('OPEN_LAYER_MODAL', { name: 'product-review-form', title: 'μƒν’ˆν›„κΈ°', modalAddClass: 'product-review-form-modal', isFull: false, data: { isSelectProduct: true, }, onClose: ({ reason }) => { if (reason === 'DID_SUBMIT') { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'success', message: 'μƒν’ˆν›„κΈ°κ°€ λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.', onClose: () => { location.reload(); }, }); } }, }); }, }; CLICK_EVENT_HANDLER_MAP[actionType]?.({ event }); }; containerEl.addEventListener('click', clickEventListener); })();