From 145e0df5642db30f563016985746ed403f8355ff Mon Sep 17 00:00:00 2001 From: pjs Date: Mon, 16 Feb 2026 01:47:26 +0900 Subject: [PATCH] feat: Implement web event listing and detail selection functionality with dedicated CSS, JS, HTML, and SQL mapper files. --- src/main/resources/mappers/WebEventSqlMap.xml | 2 + .../css/web/webevent/webEventSelect.css | 829 +++++++++--------- .../css/web/webevent/webEventSelectList.css | 577 ++++++++++-- .../static/js/web/webevent/webEventSelect.js | 483 +++++----- .../js/web/webevent/webEventSelectList.js | 389 ++++---- .../web/webevent/webEventSelect.html | 747 +--------------- .../web/webevent/webEventSelectList.html | 623 +------------ 7 files changed, 1451 insertions(+), 2199 deletions(-) diff --git a/src/main/resources/mappers/WebEventSqlMap.xml b/src/main/resources/mappers/WebEventSqlMap.xml index 45f520c..b9dc111 100644 --- a/src/main/resources/mappers/WebEventSqlMap.xml +++ b/src/main/resources/mappers/WebEventSqlMap.xml @@ -15,6 +15,8 @@ '; - listHTML += ' '; - listHTML += ' '; - listHTML += ' '; - listHTML += ''; - $(".option_list").append(listHTML); - - $("#checkboxID" + i).change(function(){ - if($("#checkboxID" + i).is(":checked")){ - let listHTML2 = ''; - listHTML2 += '
  • '; - listHTML2 += ''; - listHTML2 += '
    '; - listHTML2 += ' ' + data.price[i].TREATMENT_PROCEDURE_NAME; - listHTML2 += '
    '; - listHTML2 += '
    '; - listHTML2 += ' '; - if(data.price[i].DISCOUNT_PRICE == null || data.price[i].DISCOUNT_PRICE == undefined){ - if(data.price[i].PRICE == null || data.price[i].PRICE == undefined){ - listHTML2 += '0'; - }else{ - listHTML2 += (data.price[i].PRICE).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - }else{ - listHTML2 += (data.price[i].DISCOUNT_PRICE).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - listHTML2 += ''; - listHTML2 += ' '; - listHTML2 += '
    '; - listHTML2 += '
  • '; - $("#selectEvent1").append(listHTML2); - var price = $("#price_div1").text().replace(/,/g, ""); - var discount_price = ''; - if(data.price[i].DISCOUNT_PRICE == null || data.price[i].DISCOUNT_PRICE == undefined){ - if(data.price[i].PRICE == null || data.price[i].PRICE == undefined){ - discount_price = 0; - }else{ - discount_price = data.price[i].PRICE; - } - }else{ - discount_price = data.price[i].DISCOUNT_PRICE; - } - price = Number(price) + Number(discount_price); - $("#price_div1").text(price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")); - }else{ - fn_deleteList(i); - } - }); - } - - - }else{ - listHTML += '
  • '; - listHTML += '
  • '; - $(".option_list").html(listHTML); + + if (data.rows.PRICE == null || data.rows.PRICE == undefined) { + $('#price').text('0'); + } else { + $('#price').text(data.rows.PRICE.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")); } - }else{ - modalEvent.danger("조회 오류", data.msgDesc); - } - }, - error : function(xhr, status, error) { - modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오."); - }, - beforeSend:function(){ - // 로딩열기 - $(".loading-image-layer").show(); - }, - complete:function(){ - // 로딩닫기 - $(".loading-image-layer").hide(); - } - }); + // header 동적 변경 + $('#header-category-nm').text(data.rows.CATEGORY_NM); + $('#header-title').text(data.rows.TITLE); + + // 해시태그 처리 + var hashtagHtml = ''; + if (data.rows.HASHTAG) { + var tags = data.rows.HASHTAG.split('#'); + tags.forEach(function (tag) { + var trimmed = tag.trim(); + if (trimmed) { + hashtagHtml += '#' + trimmed + ''; + } + }); + } + $('.hashtag-list').html(hashtagHtml); + + $('#contents_path').attr('src', CDN_URL + data.rows.CONTENTS_PATH); + + // 시술 목록 데이터 처리 + updateProcedureOptions(data.price || []); + } else { + modalEvent.danger("조회 오류", data.msgDesc); + } + }, + error: function (xhr, status, error) { + modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오."); + }, + beforeSend: function () { + $(".loading-image-layer").show(); + }, + complete: function () { + $(".loading-image-layer").hide(); + } + }); } -function fn_nocheck(num){ - $("#checkboxID" + num).prop("checked",false); - fn_deleteList(num); +/**************************************************************************** + * Choices.js 초기화 및 옵션 업데이트 + ****************************************************************************/ +function updateProcedureOptions(data) { + priceList = data; + + // 기존 Choices 인스턴스 제거 + if (procedureChoices) { + procedureChoices.destroy(); + } + + // 선택 옵션 데이터 생성 + const choices = data.map(item => { + if (!item.MU_TREATMENT_PROCEDURE_ID || !item.TREATMENT_PROCEDURE_NAME) return null; + + const basePrice = (item.PRICE || 0) + (item.VAT || 0); + const discountPrice = item.DISCOUNT_PRICE; + + return { + value: item.MU_TREATMENT_PROCEDURE_ID, + label: item.TREATMENT_PROCEDURE_NAME, + customProperties: { + name: item.TREATMENT_PROCEDURE_NAME, + price: basePrice, + discountPrice: discountPrice, + originalData: item + } + }; + }).filter(Boolean); + + // Choices.js 초기화 + procedureChoices = new Choices('#procedure-select', { + removeItemButton: true, + searchEnabled: true, + searchPlaceholderValue: '시술명으로 검색...', + placeholder: true, + placeholderValue: '시술을 선택하세요', + maxItemCount: -1, + choices: choices, + shouldSort: false, + searchResultLimit: 10, + searchFields: ['label', 'value'], + itemSelectText: '', + noChoicesText: '선택 가능한 시술이 없습니다', + noResultsText: '검색 결과가 없습니다', + loadingText: '시술 정보를 불러오는 중...', + + // 템플릿 커스터마이징 - 선택된 항목에 가격 표시 추가 + callbackOnCreateTemplates: function (template) { + return { + // 선택된 항목 템플릿 - 가격 정보 포함 + item: ({ classNames }, data) => { + const customProps = data.customProperties || {}; + const name = customProps.name || data.label; + const price = customProps.price || 0; + const discountPrice = customProps.discountPrice; + + // 가격 표시 HTML 생성 + let priceHtml = ''; + if (discountPrice && discountPrice < price) { + priceHtml = ` + ${discountPrice.toLocaleString()}원 + ${price.toLocaleString()}원 + `; + } else { + priceHtml = `${price.toLocaleString()}원`; + } + + return template(` +
    + + ${name} + ${priceHtml} + + + +
    + `); + }, + + // 드롭다운 선택 옵션 템플릿 + choice: ({ classNames }, data) => { + const customProps = data.customProperties || {}; + const name = customProps.name || data.label; + const price = customProps.price || 0; + const discountPrice = customProps.discountPrice; + + let priceHtml = ''; + if (discountPrice && discountPrice < price) { + priceHtml = ` + ${discountPrice.toLocaleString()}원 + ${price.toLocaleString()}원 + `; + } else { + priceHtml = `${price.toLocaleString()}원`; + } + + return template(` +
    +
    + ${name} + ${priceHtml} +
    +
    + `); + } + }; + } + }); + + // 이벤트 리스너 추가 + const selectElement = document.getElementById('procedure-select'); + selectElement.addEventListener('change', function (event) { + console.log('Selection changed:', event.detail); + updateTotalPrice(); + }); + + selectElement.addEventListener('addItem', function (event) { + console.log('Item added:', event.detail); + updateTotalPrice(); + }); + + selectElement.addEventListener('removeItem', function (event) { + console.log('Item removed:', event.detail); + updateTotalPrice(); + }); } -function fn_deleteList(num){ - - var price = $("#price_div1").text().replace(/,/g, ""); - var discount_price = $("#liid" + num + " > div.info > span > span").text().replace(/,/g, ""); - - price = Number(price) - Number(discount_price); - $("#price_div1").text(price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")); - $("#liid" + num).remove(); -} - -function fn_moveReservation(category_div, category_no, post_no){ - let pageMoveForm = document.createElement('form'); - let obj = document.createElement('input'); - obj.setAttribute('type', 'hidden'); - obj.setAttribute('name', 'CATEGORY_DIV_CD'); - obj.setAttribute('value', "0"+category_div); - pageMoveForm.appendChild(obj); - - let obj2 = document.createElement('input'); - obj2.setAttribute('type', 'hidden'); - obj2.setAttribute('name', 'CATEGORY_NO'); - obj2.setAttribute('value', category_no); - pageMoveForm.appendChild(obj2); - - let obj3 = document.createElement('input'); - obj3.setAttribute('type', 'hidden'); - obj3.setAttribute('name', 'POST_NO'); - obj3.setAttribute('value', post_no); - pageMoveForm.appendChild(obj3); - - let obj4 = document.getElementsByName('procedure_id'); - var len = obj4.length; - if(len == 0){ - alert('시술이 선택되지 않았습니다.'); +/**************************************************************************** + * 총 금액 업데이트 - 개선된 버전 + ****************************************************************************/ +function updateTotalPrice() { + if (!procedureChoices) { + console.log('procedureChoices not initialized'); return; } - var value = ''; - for(var i = 0; i < len; i++){ - value += obj4[i].getAttribute('value') + '#'; - } - - let obj5 = document.createElement('input'); - obj5.setAttribute('type', 'hidden'); - obj5.setAttribute('name', 'PROCEDURE_ID'); - obj5.setAttribute('value', value); - pageMoveForm.appendChild(obj5); - - pageMoveForm.setAttribute('method', 'post'); - pageMoveForm.setAttribute('action', '/webservice/selectMakeReservation.do'); - document.body.appendChild(pageMoveForm); - - pageMoveForm.submit(); - + + const selectedValues = procedureChoices.getValue(true); + console.log('Selected values:', selectedValues); + + let total = 0; + + selectedValues.forEach(value => { + const item = priceList.find(p => p.MU_TREATMENT_PROCEDURE_ID == value); + console.log('Found item for value', value, ':', item); + + if (item) { + const basePrice = (item.PRICE || 0) + (item.VAT || 0); + const discountPrice = item.DISCOUNT_PRICE; + + // 할인가가 있고 더 저렴하면 할인가 사용, 아니면 기본가격 사용 + const finalPrice = (discountPrice && discountPrice < basePrice) ? discountPrice : basePrice; + total += finalPrice; + console.log('Added price:', finalPrice); + } + }); + + console.log('Total calculated:', total); + totalEl.textContent = total.toLocaleString() + '원'; + reserveBtn.disabled = selectedValues.length === 0; } -/* 버튼 클릭했는지 안했는지 확인 class active */ -var $selectProcedureDiv = $('.select_procedure_div'); -$selectProcedureDiv.click(function(e){ - e.stopPropagation(); - $selectProcedureDiv.not(this).removeClass('active'); /*remove buttonactive from the others*/ - $(this).toggleClass('active'); /*toggle current clicked element*/ -}); +/**************************************************************************** + * 예약 페이지로 이동 + ****************************************************************************/ +function fn_moveReservation(category_div, category_no, post_no) { + if (!procedureChoices) { + alert('시술 선택 기능이 초기화되지 않았습니다.'); + return; + } -$(window).on("click", function(){ - $selectProcedureDiv.removeClass('active'); -}) + const selectedValues = procedureChoices.getValue(true); -//초기화 -fn_init(); \ No newline at end of file + if (selectedValues.length === 0) { + alert('시술을 선택해주세요.'); + return; + } + + const form = document.createElement('form'); + form.method = 'post'; + form.action = '/webevent/selectMakeReservation.do'; + + // 기본 파라미터 추가 + const params = [ + { name: 'CATEGORY_DIV_CD', value: category_div }, + { name: 'CATEGORY_NO', value: category_no }, + { name: 'POST_NO', value: post_no } + ]; + + params.forEach(param => { + const input = document.createElement('input'); + input.type = 'hidden'; + input.name = param.name; + input.value = param.value; + form.appendChild(input); + }); + + // 선택된 시술 추가 + selectedValues.forEach(value => { + const input = document.createElement('input'); + input.type = 'hidden'; + input.name = 'PROCEDURE_ID'; + input.value = value; + form.appendChild(input); + }); + + document.body.appendChild(form); + form.submit(); +} + +// 예약 버튼 이벤트 +reserveBtn.addEventListener('click', function () { + fn_moveReservation(category_div_cd, category_no, post_no); +}); \ No newline at end of file diff --git a/src/main/resources/static/js/web/webevent/webEventSelectList.js b/src/main/resources/static/js/web/webevent/webEventSelectList.js index e36cff4..9e6ed86 100644 --- a/src/main/resources/static/js/web/webevent/webEventSelectList.js +++ b/src/main/resources/static/js/web/webevent/webEventSelectList.js @@ -1,189 +1,216 @@ -/************************************************ - * 초기화 - ************************************************/ -function fn_init() { - fn_SelectListCategory(); -} +class EventManager { + constructor() { + this.events = []; + this.categories = []; + this.init(); + } + async init() { + await this.loadCategories(); + } -/**************************************************************************** - * 이벤트 카테고리 목록 가져오기 - ****************************************************************************/ -function fn_SelectListCategory(){ + async apiRequest(url, data) { + return new Promise((resolve, reject) => { + $.ajax({ + url: encodeURI(url), + data: data, + dataType: 'json', + processData: false, + contentType: false, + type: 'POST', + success: resolve, + error: reject, + beforeSend: () => $(".loading-image-layer").show(), + complete: () => $(".loading-image-layer").hide() + }); + }); + } - let formData = new FormData(); - formData.append('bannerType', 'A'); + async loadCategories() { + try { + const formData = new FormData(); + formData.append('bannerType', 'A'); + const data = await this.apiRequest('/webevent/selectListWebEvent.do', formData); - $.ajax({ - url: encodeURI('/webevent/selectListWebEvent.do'), - data: formData, - dataType: 'json', - processData: false, - contentType: false, - type: 'POST', - async: true, - success: function(data){ - if(data.msgCode=='0'){ - - let totalCount = data.rows.length; - - if (0 < totalCount) { - let listHTML = ''; - - for (let i = 0; i < data.rows.length; i++) { - if(i == 0){ - listHTML += '
  • '; - listHTML += ' ' + data.rows[i].CATEGORY_NM + ''; - listHTML += '
  • '; - }else{ - listHTML += '
  • '; - listHTML += ' ' + data.rows[i].CATEGORY_NM + ''; - listHTML += '
  • '; - } - } - $("#servicecategory").html(listHTML); - fn_SelectEventList(data.rows[0].CATEGORY_NO); - } - }else{ - modalEvent.danger("조회 오류", data.msgDesc); - } - - }, - error : function(xhr, status, error) { - modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오."); - }, - beforeSend:function(){ - // 로딩열기 - $(".loading-image-layer").show(); - }, - complete:function(){ - // 로딩닫기 - $(".loading-image-layer").hide(); - } - }); -} - -/**************************************************************************** - * 시술 목록 가져오기 - ****************************************************************************/ -function fn_SelectEventList(category_no){ - $(".active").addClass("nonactive"); - $(".active").removeClass("active"); - - $("#category_"+category_no).removeClass("nonactive"); - $("#category_"+category_no).addClass("active"); - - - let formData = new FormData(); - formData.append('category_no', category_no); - - $.ajax({ - url: encodeURI('/webevent/selectListEvent.do'), - data: formData, - dataType: 'json', - processData: false, - contentType: false, - type: 'POST', - async: true, - success: function(data){ - if(data.msgCode=='0'){ - - let totalCount = data.rows.length; - let listHTML = ''; - if (0 < totalCount) { - for (let i = 0; i < data.rows.length; i++) { - listHTML += '
  • '; - listHTML += ' '; - listHTML += '
    '; - listHTML += ' 평일 오후1시-5시 / 피부 이벤트'; - listHTML += '
    '; - listHTML += '
    '; - listHTML += ' '; - listHTML += ' '; - listHTML += '
    '; - listHTML += '

    ' + data.rows[i].TITLE + '

    '; - listHTML += '
    '; - listHTML += ' ' + data.rows[i].THUMBNAIL_BOTTOM_TXT + ''; - listHTML += '
    '; - listHTML += ' '; - if(data.rows[i].DISCOUNT_PRICE == null || data.rows[i].DISCOUNT_PRICE == undefined){ - if(data.rows[i].PRICE == null || data.rows[i].PRICE == undefined){ - listHTML += '0'; - }else{ - listHTML += (data.rows[i].PRICE).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - }else{ - listHTML += (data.rows[i].DISCOUNT_PRICE).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - listHTML += ' '; - listHTML += ' '; - listHTML += ' '; - if(data.rows[i].DISCOUNT_PRICE == null || data.rows[i].DISCOUNT_PRICE == undefined){ - if(data.rows[i].PRICE == null || data.rows[i].PRICE == undefined){ - listHTML += '0'; - }else{ - listHTML += (data.rows[i].PRICE).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - }else{ - listHTML += (data.rows[i].DISCOUNT_PRICE).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - listHTML += ' 원 부터 '; - listHTML += '
    '; - listHTML += '
    '; - listHTML += '
    '; - listHTML += '
  • '; - } - $("#detail_list").html(listHTML); - - }else{ - listHTML += '
  • '; - listHTML += '
  • '; - $("#detail_list").html(listHTML); + if (data.msgCode === '0') { + this.categories = data.rows; + this.renderCategories(); + if (this.categories.length > 0) { + this.loadEvents(this.categories[0].CATEGORY_NO); } - }else{ - modalEvent.danger("조회 오류", data.msgDesc); - } + } else { + modalEvent.danger("조회 오류", data.msgDesc); + } + } catch (error) { + modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다."); + } + } - }, - error : function(xhr, status, error) { - modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오."); - }, - beforeSend:function(){ - // 로딩열기 - $(".loading-image-layer").show(); - }, - complete:function(){ - // 로딩닫기 - $(".loading-image-layer").hide(); - } - }); + async loadEvents(categoryNo) { + try { + const formData = new FormData(); + formData.append('category_no', categoryNo); + const data = await this.apiRequest('/webevent/selectListEvent.do', formData); + + if (data.msgCode === '0') { + const today = new Date(); + today.setHours(0, 0, 0, 0); + + this.events = data.rows.map(row => { + // 지난 이벤트 판별: EVENT_END_DT가 있고 오늘보다 이전이면 expired + let isExpired = false; + if (row.EVENT_END_DT) { + const endDate = new Date(row.EVENT_END_DT); + endDate.setHours(23, 59, 59, 999); + isExpired = endDate < today; + } + + return { + img: CDN_URL + row.THUMBNAIL_PATH, + title: row.TITLE, + desc: row.CONTENT, + meta: row.THUMBNAIL_BOTTOM_TXT, + price: { + before: Number(row.PRICE) || 0, + after: Number(row.DISCOUNT_PRICE) || 0 + }, + categoryDiv: row.CATEGORY_DIV_CD, + categoryNo: row.CATEGORY_NO, + postNo: row.POST_NO, + eventStartDt: row.EVENT_START_DT, + eventEndDt: row.EVENT_END_DT, + isExpired: isExpired + }; + }); + this.renderEvents(); + } else { + modalEvent.danger("조회 오류", data.msgDesc); + } + } catch (error) { + modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다."); + } + } + + renderCategories() { + const html = this.categories.map((cat, idx) => ` +
  • + ${cat.CATEGORY_NM} +
  • + `).join(''); + + document.getElementById('category-list').innerHTML = html; + + document.querySelectorAll('.category-link').forEach(link => { + link.addEventListener('click', (e) => { + e.preventDefault(); + document.querySelectorAll('.category-link').forEach(item => + item.classList.remove('active')); + link.classList.add('active'); + this.loadEvents(link.dataset.category); + document.querySelector('.event-list').scrollTop = 0; + }); + }); + } + + renderEvents() { + const html = this.events.map(event => { + const expiredClass = event.isExpired ? ' expired' : ''; + const expiredBadge = event.isExpired ? '종료된 이벤트' : ''; + + // 이벤트 기간 표시 + let dateHtml = ''; + if (event.eventStartDt || event.eventEndDt) { + const startStr = event.eventStartDt || ''; + const endStr = event.eventEndDt || ''; + if (startStr && endStr) { + dateHtml = `
    📅 ${startStr} ~ ${endStr}
    `; + } else if (endStr) { + dateHtml = `
    📅 ~ ${endStr}
    `; + } + } + + return ` +
    + ${expiredBadge} +
    + ${event.title} +
    +
    +
    ${event.title}
    + ${event.meta ? `
    ${event.meta}
    ` : ''} + ${dateHtml} +
    + ${event.price.before !== event.price.after + ? ` + ${event.price.before.toLocaleString()}원 + ` + : ''} + ${event.price.after.toLocaleString()}원 부터 +
    +
    +
    + `}).join(''); + + document.getElementById('event-grid').innerHTML = html; + + // 카드 클릭 이벤트 추가 + document.querySelectorAll('.event-card').forEach(card => { + card.addEventListener('click', () => { + const isExpired = card.dataset.expired === 'true'; + + if (isExpired) { + // 지난 이벤트 → 팝업 표시 + this.showExpiredPopup(); + return; + } + + const categoryDiv = card.dataset.categoryDiv; + const categoryNo = card.dataset.categoryNo; + const postNo = card.dataset.postNo; + this.goToDetail(categoryDiv, categoryNo, postNo); + }); + }); + } + + showExpiredPopup() { + const overlay = document.getElementById('expired-popup'); + if (overlay) { + overlay.classList.add('active'); + } + } + + hideExpiredPopup() { + const overlay = document.getElementById('expired-popup'); + if (overlay) { + overlay.classList.remove('active'); + } + } + + goToDetail(categoryDiv, categoryNo, postNo) { + const form = document.createElement('form'); + form.method = 'get'; + form.action = '/webevent/selectEventDetailIntro.do'; + + const fields = [ + { name: 'CATEGORY_DIV_CD', value: categoryDiv }, + { name: 'CATEGORY_NO', value: categoryNo }, + { name: 'POST_NO', value: postNo } + ]; + + fields.forEach(field => { + const input = document.createElement('input'); + input.type = 'hidden'; + input.name = field.name; + input.value = field.value; + form.appendChild(input); + }); + + document.body.appendChild(form); + form.submit(); + } } -function fn_moveDetail(category_div, category_no, post_no){ - let pageMoveForm = document.createElement('form'); - let obj = document.createElement('input'); - obj.setAttribute('type', 'hidden'); - obj.setAttribute('name', 'CATEGORY_DIV_CD'); - obj.setAttribute('value', "0"+category_div); - pageMoveForm.appendChild(obj); - - let obj2 = document.createElement('input'); - obj2.setAttribute('type', 'hidden'); - obj2.setAttribute('name', 'CATEGORY_NO'); - obj2.setAttribute('value', category_no); - pageMoveForm.appendChild(obj2); - - let obj3 = document.createElement('input'); - obj3.setAttribute('type', 'hidden'); - obj3.setAttribute('name', 'POST_NO'); - obj3.setAttribute('value', post_no); - pageMoveForm.appendChild(obj3); - - pageMoveForm.setAttribute('method', 'post'); - pageMoveForm.setAttribute('action', '/webevent/selectEventDetailIntro.do'); - document.body.appendChild(pageMoveForm); - pageMoveForm.submit(); -} - -//초기화 -fn_init(); \ No newline at end of file +const eventManager = new EventManager(); \ No newline at end of file diff --git a/src/main/resources/templates/web/webevent/webEventSelect.html b/src/main/resources/templates/web/webevent/webEventSelect.html index 111e397..59e60e4 100644 --- a/src/main/resources/templates/web/webevent/webEventSelect.html +++ b/src/main/resources/templates/web/webevent/webEventSelect.html @@ -1,432 +1,21 @@ - + - - - - + + + - + @@ -439,11 +28,11 @@ const CDN_URL = [[${@environment.getProperty('url.cdn')}]]; 썸네일 이미지
    
           
    -      
    +
           
    메쉬다 D/S
    전신 라인 정리에 특화된 메쉬다 바디주사!
    - +
    @@ -458,14 +47,14 @@ const CDN_URL = [[${@environment.getProperty('url.cdn')}]];
    - +
    0원 부터
    - +
    - +
    총 금액 0원 @@ -473,7 +62,7 @@ const CDN_URL = [[${@environment.getProperty('url.cdn')}]];
    -
    +
    @@ -482,301 +71,9 @@ const CDN_URL = [[${@environment.getProperty('url.cdn')}]]; - - - - + + + - + + \ No newline at end of file diff --git a/src/main/resources/templates/web/webevent/webEventSelectList.html b/src/main/resources/templates/web/webevent/webEventSelectList.html index 71b1c98..4c97179 100644 --- a/src/main/resources/templates/web/webevent/webEventSelectList.html +++ b/src/main/resources/templates/web/webevent/webEventSelectList.html @@ -1,595 +1,56 @@ - + - + - + -
    - -
    -

    이벤트 안내

    -
    - - -
    - - - - -
    -
    -
    - +
    + +
    +

    이벤트 안내

    +
    + + +
    + + + + +
    +
    +
    + +
    -
    -
    + +
    +
    + + + -
    - + - + + \ No newline at end of file