Explorar o código

Merge branch 'eskim' into develop

Conflicts:
	src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
eskim %!s(int64=5) %!d(string=hai) anos
pai
achega
77ac4d2b29
Modificáronse 27 ficheiros con 630 adicións e 129 borrados
  1. 1 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  2. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  3. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDeliveryFormMob.html
  4. 28 37
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  5. 14 23
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  6. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  7. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  8. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsInstockAlarmFormMob.html
  9. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  10. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html
  11. 168 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html
  12. 113 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html
  13. 3 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  14. 26 4
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  15. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealListFormWeb.html
  16. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDeliveryFormWeb.html
  17. 30 18
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  18. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  19. 12 12
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  20. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html
  21. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html
  22. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaFormWeb.html
  23. 5 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  24. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewFormWeb.html
  25. 3 10
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html
  26. 205 0
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scroll.js
  27. 7 1
      src/main/webapp/ux/style24_link.js

+ 1 - 1
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -773,7 +773,7 @@ public class TsfGoodsController extends TsfBaseController {
 
 		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
 		pageable.setTotalCount(reviewService.getReviewTotalCount(review));
-		review.setPageable(pageable);
+		review.setPageable(pageable);	
 
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -817,7 +817,7 @@
 		SELECT A.GOODS_CD
 		     , A.COMPS_GOODS_CD
 		     , G.GOODS_NM AS COMPS_GOODS_NM
-		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS COMPS_GOODS_FULL_NM /*상품FULL명*/
 		     , A.QTY
 		     , G.BRAND_CD
 		     , G.GOODS_STAT

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDeliveryFormMob.html

@@ -23,7 +23,7 @@
 					<div class="item_state">
 						<a href="javascript:void(0);" class="itemLink">
 							<div class="itemPic">
-								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=40'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</div>
 							<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA</p>
 							<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성</div>

+ 28 - 37
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -49,7 +49,7 @@
 							<div class="swiper-slide" th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-							<div class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></div></div>
+							<div class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></div></div>
 							</th:block>
 						</div>
 						<!-- Add Pagination -->
@@ -103,7 +103,7 @@
 					<ul>
 						<li th:each="goodsOption1, status : ${goodsOption1List}">
 							<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-								<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+								<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="">
 							</a>
 						</li>
 					</ul>
@@ -219,7 +219,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -241,7 +241,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -273,7 +273,7 @@
 				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" >
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 							</th:block>
 					</div>
 				</div>
@@ -405,7 +405,7 @@
 							<div class="swiper-slide"  th:each="bestReview, status : ${bestReviewList}"  >
 								<!-- 베스트 리뷰 등록시 노출 -->
 								<div class="best_review">
-									<a href="javascript:void(0);">
+									<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])">
 										<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">
 											<span class="star">
 												<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
@@ -572,7 +572,7 @@
 							<ul>
 								<li th:each="goodsOption1, status : ${goodsOption1List}">
 									<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-										<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+										<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="">
 									</a>
 								</li>
 							</ul>
@@ -1607,7 +1607,7 @@
 			$(".pic_list > div").hide();
 			$(".pic_list > div").eq(pic_index).fadeIn();
 		});
-		
+
 		//슬라이드 - 베스트리뷰팝업 
 		var bestreviewdetailSwiper = new Swiper('.pd_bestreviewdetail_pop .area_slider .swiper-container', {
 			observer: true,
@@ -1630,31 +1630,30 @@
 			},
 		});
 
-		//팝업 - 리뷰
-		$(document).on('click','#btn_pdReview_pop',function(e){
-			$("#pdReviewPop").modal("show");
-			$('#pdReviewPop .modal-body .pop_cont').load('pd_review_pop.html');
-			return false;
-		})
+		$(document).on('click','.pd_bestreviewdetail_pop .thumblist ul li',function(e){
 
-		//팝업 - 베스트리뷰
-		$(document).on('click','#btn_pdBestReview_pop a',function(e){
-			$("#pdBestReviewPop").modal("show");
-			return false;
-		})
+			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
+			$(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
+			$(this).find(".pic").addClass('active');
 
-		//팝업 - 포토/영상 리뷰 (detail)
-		$(document).on('click','.area_rv_photo .photo_list a, .area_rv_all .review_list .photo_list a, .pd_photoreviewlist_pop .photo_list ul li a',function(e){
-			$("#pdPhotoReviewDetailPop").modal("show");
+			var thumbIndex = $(this).index();
+			var thumbImg = $(this).find('.pic .thumb').attr('style');
+			var thumbImgSrc = thumbImg.split("background-image:url(")[1];
+			thumbImgHtml = "<img src="+ thumbImgSrc +" alt=''>";
+			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbImgHtml);
+			
 			return false;
-		})
-
-		//팝업 - 포토/영상 리뷰 (list)
-		$(document).on('click','#btn_more_photoreview',function(e){
-			$("#pdPhotoReviewListPop").modal("show");
+		});
+			
+		// 포토,베스트리뷰숨김
+		var review_open=$(".btn_review_open");
+		$(document).on('click','.btn_review_open',function(e){
+			$(this).toggleClass('active');
+			$(this).next(".review_list").toggleClass('active');
 			return false;
-		})
-
+		});
+		
+		
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
 			$(".Purchase_pop .pop_option_select").show();
@@ -1666,14 +1665,6 @@
 			return false;
 		});
 
-		// 포토,베스트리뷰숨김
-		var review_open=$(".btn_review_open");
-		$(document).on('click','.btn_review_open',function(e){
-			$(this).toggleClass('active');
-			$(this).next(".review_list").toggleClass('active');
-			return false;
-		});
-		
 		fnOptionSoldout();
 		
 		// 광고 스크립트용

+ 14 - 23
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -17,7 +17,7 @@
 <!-- 상품문의 리스트 내용 -->
 <form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 <input type="hidden" name="pageNo"  value ="1"/>
-<input type="hidden" name="pageSize" value ="20"/>
+<input type="hidden" name="pageSize" value ="3"/>
 <input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 <div class="pd_qnalist">
 	<div class="info_txt">
@@ -62,7 +62,7 @@
 </div>
 </form>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scroll.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
@@ -93,6 +93,7 @@
 	}
 
 	var fnGoodsQnaListSearch = function() {
+		fnGoodsQnaInfiniteScrollInit();
 		gagaInfiniteScroll.getHistory();
 	}
 
@@ -154,33 +155,23 @@
 
 	// 인피니트 스크롤 초기화
 	var fnGoodsQnaInfiniteScrollInit = function(){
-		 sessionStorage.removeItem(document.location.href);
+		// sessionStorage.removeItem(document.location.href);
+		History.replaceState(null, null);
+		gagaInfiniteScroll.pageStatus = {
+				  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
+				, loadPage : 0      // 로드할 페이지
+				, loadAlign : 'not' // 로드 상태(prev, next, not)
+				, historyScroll : 0 //
+				, nowPage : null    // 현재 페이지
+				, pageUrl : {       // page url
+				}
+		}
 		//History 초기화
 		$("#listBox").html("");
 	}
 	
-	// 왜 안될가?
-	// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
-	$(window).on("pageshow", function(event) {
-		if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
-			var historyData = sessionStorage.getItem(document.location.href);
-			if(historyData!=null){
-				historyData = JSON.parse(historyData);
-			}else{
-				historyData = {};
-			}
-			fnGoodsQnaListSearch();
-		}else{
-			fnGoodsQnaInfiniteScrollInit();
-			fnGoodsQnaListSearch();
-		}
-
-	});
-	
-	
 	$(document).ready( function() {
 		fnGoodsQnaListSearch();
-		
 	});
 	
 /*]]>*/

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html

@@ -458,7 +458,7 @@
 				</li>
 			</ul>
 			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
-			<div th:if="${#lists.size(photoReviewList) >= 8}">
+			<div th:if="${#lists.size(photoReviewList) >= 1}">
 				<div>
 					<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])"><span>더 보기</span></button>
 				</div>	

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html

@@ -19,7 +19,7 @@
 <div class="shareWrap" th:with="stylelUrl=${@environment.getProperty('domain.front')}, imgGoodsUrl=${@environment.getProperty('upload.goods.view')}">
 	<div id="layerShare" class="setShare open">
 		<span>
-			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm}');|"><span>카카오톡</span></button>
+			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=80'}');|"><span>카카오톡</span></button>
 			<button type="button" class="fb" th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '', '');|"><span>페이스북</span></button>
 			<button type="button" class="tw" th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm+ '#style24몰'}', '', '');|"><span>트위터</span></button>
 			<button type="button" class="url btn_copy"><span>URL</span></button>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsInstockAlarmFormMob.html

@@ -31,7 +31,7 @@
 						<div class="item_state">
 							<a href="javascript:void(0);" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=70'}">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html

@@ -30,7 +30,7 @@
 							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
 							<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'[[${params.contentsLoc}]]','','pc_detail');" class="itemLink" >
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=156'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html

@@ -23,7 +23,7 @@
 					<div class="item_state">
 						<a href="javascript:void(0);" class="itemLink">
 							<div class="itemPic">
-								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=40'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</div>
 							<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA</p>
 							<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성</div>

+ 168 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html

@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewDetailFormMob.html
+ * @desc	: 상품평 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<th:block th:if="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">베스트 리뷰</h5>
+			</th:block>
+			<th:block th:unless="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">
+				<button type="button" id="btn_more_photoreview"></button>
+				포토/영상리뷰
+			</h5>
+			</th:block>
+		</div>
+		<div class="modal-body" th:if="${reviewList != null and !reviewList.empty}">
+			<div class="pop_cont" th:each="review, status : ${reviewList}" >
+				<!-- 리뷰사진영역 -->
+					<div class="area_slider">
+						<div class="swiper-container thumb_list">
+							<div class="swiper-wrapper">
+								<th:block th:if="${review.reviewAttachList != null and !review.reviewAttachList.empty}" >
+								<th:block th:each="reviewAttach, attachStatus : ${review.reviewAttachList}" th:if="${attachStatus.first}">
+								<div class="swiper-slide">
+									<div class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}">
+										<th:block th:if="${reviewAttach.fileGb == 'M'}">
+											<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">
+											<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">
+										</video>
+										</th:block>
+										<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+											<img th:src="${imgUrl+'/'+reviewAttach.sysFileNm}" alt="">
+										</th:block>
+									</div>
+								</div>
+								</th:block>
+								</th:block>
+								<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
+									<div class="swiper-slide"><div class="thumb nodata"><img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=358'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" alt=""></div></div><!-- 이미지 없으면 calss .nodata  -->
+								</th:block>
+							</div>
+							<!-- Add Pagination -->
+							<div class="swiper-pagination"></div>
+						</div>
+					</div>
+				<!-- //리뷰사진영역 -->
+				<!-- 리뷰내용 -->
+				<div class="pd_review best">
+					<div class="area_rv_all">
+						<div class="btn_review_open">리뷰오픈</div>
+						<div class="review_list">
+							<ul>
+								<li>
+									<div class="review">
+										<div class="info_box">
+											<div class="star_score" h:with="starScore=${#numbers.formatDecimal((review.score*100/5), 0,0)}">
+												<span class="star">
+													<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+												</span>
+											</div>
+											<div class="writer">
+												<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
+												<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
+											</div>
+										</div>
+										<div class="response_box">
+											<div>
+												<dl>
+													<div th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}" th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}">
+														<dt >구매옵션</dt>
+														<dd th:text="${reviewGoods.optCd1 +' / '+ reviewGoods.optCd2}">베이지 / 100</dd>
+													</div>
+													<div>
+														<dt>키/몸무게</dt>
+														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
+															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
+														</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="txt_review_box">
+											<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">옷</p>
+										</div>
+										<div class="response_box2"  th:if="${not #strings.isEmpty(review.sizeGb)}">
+											<div>
+												<dl>
+													<div>
+														<dt>사이즈</dt>
+														<dd th:text="${review.scoreSizeNm}">작음</dd>
+													</div>
+													<div>
+														<dt>컬러</dt>
+														<dd th:text="${review.scoreColorNm}">밝음</dd>
+													</div>
+													<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>핏</dt>
+														<dd th:text="${review.scoreFitNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>두께감</dt>
+														<dd th:text="${review.scoreThickNm}">적당함</dd>
+													</div>
+													</th:block>
+													<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>무게감</dt>
+														<dd th:text="${review.scoreWeightNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>볼너비</dt>
+														<dd th:text="${review.scoreBallNm}">적당함</dd>
+													</div>
+													</th:block>
+												</dl>
+											</div>
+										</div>
+										<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
+											<div class="reply">
+												<div class="reply_writer">
+													<span class="wr_name">관리자</span>
+													<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
+												</div>
+												<div class="reply_txt">
+													<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
+														안녕하세요, 스타일24 관리자입니다.
+													</p>
+												</div>
+											</div>
+										</div>
+									</div>
+								</li>
+							</ul>
+						</div>
+					</div>
+				</div>
+				<!-- //리뷰내용 -->
+			</div>
+		</div>
+	</div>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	$(document).ready( function() {
+
+
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 113 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html

@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewPhotoFormMob.html
+ * @desc	: 상품평 - 포토/영상 리스트 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.008   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="exampleFullLabel">포토/영상리뷰</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="photo_list" >
+					<ul id="ulGoodsReviewPhoto">
+					</ul>
+				</div>
+				<div class="review_last"   style="display:none;">
+					마지막 게시글입니다.
+				</div>
+				<div class="btn_group_flex"  style="display:none;">
+					<div>
+						<button type="button" class="btn btn_default" id="btnMore">
+							<span>더보기</span>
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<form id="goodsReviewPhotoForm" name="goodsReviewPhotoForm" action="#" th:action="@{'/goods/review/list'}">
+		<input type="hidden" name="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="photoYn" value ="Y"/>
+		<input type="hidden" name="goodsCd" th:value ="${params.goodsCd}"/>
+	</form>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_photo')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	var fnReviewPhotoGetList = function() {
+
+		gagajf.ajaxFormSubmit($('#goodsReviewPhotoForm').prop('action'), '#goodsReviewPhotoForm', fnGetListCallback);
+	}
+	
+	var fnGetListCallback = function(result) {
+		//$('#ulGoodsReviewPhoto').html('');
+	
+		// 목록
+		if (result.dataList != null && result.dataList.length > 0) {
+			
+			$.each(result.dataList, function(idx, item) {
+				let tag = '';
+				if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
+					var fileGbClass = '';
+					$.each(item.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach == "M") fileGbClass = "mov";
+				tag += '				<li>\n';
+				tag += '					<a href="javascript:void();" onclick="fnGoodsReviewDetail(\''+item.reviewSq+'\');">\n';
+				tag += '						<div class="pic">\n';
+				tag += '							<span class="thumb '+ fileGbClass +'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				tag += '						</div>\n';
+				tag += '					</a>\n';
+				tag += '				</li>\n';		
+					});	
+				}
+				
+				$('#ulGoodsReviewPhoto').append(tag);
+			});
+			
+		}
+		
+		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
+			$('#btnMore').parent().show();
+			$('#goodsReviewPhotoForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
+		} else {
+			$('.review_last').show();
+			$('#btnMore').parent().hide();
+		}
+	}
+	
+	// 더보기
+	$('#btnMore').on('click', function() {
+		fnReviewPhotoGetList();
+	});
+	
+	// 상세보기
+	var fnGoodsReviewDetail = function(reviewSq){
+		cfGoodsReviewDetail([[${params.goodsCd}]],'', 'Y', reviewSq);
+		cfCloseLayer('layer_review_photo');
+	}
+	
+	$(document).ready( function() {
+		
+		fnReviewPhotoGetList();
+		
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 3 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html

@@ -56,7 +56,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																		or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																		or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
 	</div>
@@ -79,7 +79,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																		or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																		or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
 	</div>
@@ -112,7 +112,7 @@
 	<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 		<div class="view">
 			<th:block th:each="goodsImg, status : ${goodsImgList}" >
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 				</th:block>
 		</div>
 	</div>

+ 26 - 4
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -40,7 +40,7 @@
 													th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
+											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
 										</th:block>	
 										</div>
 									</div>
@@ -55,7 +55,7 @@
 									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 												or #strings.contains(goodsImg.sysImgNm,'_L1.')
 												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
+									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=558'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
 								</th:block>
 							</ul>
 						</div>
@@ -159,7 +159,7 @@
 														<div class="item_state">
 															<a href="javascript:void(0);" class="itemLink">
 																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																</div>
 																<div class="itemName">선택</div>
 															</a>
@@ -174,7 +174,7 @@
 															<div class="item_state" >
 																<a href="javascript:void(0);" class="itemLink" >
 																	<div class="itemPic">
-																		<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																		<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																	</div>
 																	<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 																	<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></div>
@@ -716,6 +716,28 @@
 	
 	//장바구니담기
 	var fnAddCart = function(btnType){
+<<<<<<< HEAD
+=======
+		
+		/* // 바로구매는 로그인여부 확인
+		if (btnType == "O" && !cfCheckLogin()) {
+			
+			let btn = ["비회원 구매", "로그인후 구매"]; //버튼명[좌,우]
+			mcxDialog.confirmC("로그인 후 구매 시 다양한 혜택을 받으실 수 있습니다.", { //내용
+				btn: btn,
+				btnClick: function(index){
+					if (index == 1){ //button1 일때 처리문
+						// 비회원 URL
+						ALERT('비회원');
+					} else {	//button2 일때 처리문
+						cfnGoToPage(_PAGE_LOGIN);
+					}
+				}
+			});
+			return false;
+		} */
+		
+>>>>>>> refs/heads/eskim
 		let params = [];
 		
 		let target = $('#cartForm input[name=cea]');

+ 2 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsDealListFormWeb.html

@@ -29,7 +29,7 @@
 							<div class="item_state">
 								<a href="javascript:void(0);" class="itemLink">
 									<div class="itemPic">
-										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									</div>
 									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
@@ -47,7 +47,7 @@
 								<div class="item_state">
 									<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]])">
 										<div class="itemPic">
-											<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+											<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 										</div>
 										<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 										<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDeliveryFormWeb.html

@@ -25,7 +25,7 @@
 			<div class="item_state">
 				<a href="javascript:void(0);" class="itemLink">
 					<div class="itemPic">
-						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}">
 					</div>
 					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 30 - 18
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -41,7 +41,7 @@
 													th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
+											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
 										</th:block>	
 										</div>
 									</div>
@@ -56,7 +56,7 @@
 									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 												or #strings.contains(goodsImg.sysImgNm,'_L1.')
 												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
+									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
 								</th:block>
 							</ul>
 						</div>
@@ -176,7 +176,7 @@
 									<ul >
 										<li th:each="goodsOption1, status : ${goodsOption1List}">
 											<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm +'?RS=64'}" alt="">
 											</a>
 										</li>
 									</ul>
@@ -441,7 +441,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -464,7 +464,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -474,7 +474,7 @@
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -497,7 +497,7 @@
 				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" >
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 							</th:block>
 					</div>
 				</div>
@@ -660,7 +660,7 @@
 																	<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${lookbookGoods.goodsCd}]], '',[[${ithrCd}]],[[${contentsLoc}]] )">
 																	</th:block>
 																		<div class="itemPic">
-																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm}">
+																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm+'?RS=100'}">
 																		</div>
 																		<p class="itemBrand" th:text="${lookbookGoods.brandGroupNm}">CURLYSUE 컬리수</p>
 																		<div class="itemName" th:text="${lookbookGoods.goodsFullNm}">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
@@ -849,7 +849,6 @@
 		let target=$('.select_custom.item_opt2');
 		let targetSize = target.length;	//구성품 갯수
 		
-		//eskim
 		let cnt = 0;
 		let itemSize = 0;
 		target.each(function(){
@@ -1037,7 +1036,7 @@
 	var fnAddCart = function(btnType){
 		
 		// 바로구매는 로그인여부 확인
-		if (btnType == "O" && !cfCheckLogin()) {
+/* 		if (btnType == "O" && !cfCheckLogin()) {
 			
 			let btn = ["비회원 구매", "로그인후 구매"]; //버튼명[좌,우]
 			mcxDialog.confirmC("로그인 후 구매 시 다양한 혜택을 받으실 수 있습니다.", { //내용
@@ -1052,9 +1051,8 @@
 				}
 			});
 			return false;
-		}
+		} */
 		
-		let params = [];
 		let goodsType = $("#cartForm  input[name=goodsType]").val();
 
 		if (goodsType == 'G056_N'){
@@ -1063,6 +1061,7 @@
 				return;
 			}
 		
+			let compsList = [];
 			let obj = new Object();
 			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
 			obj.optCd = $("#cartForm  input[name=optCd]").val();
@@ -1073,10 +1072,13 @@
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-			params.push(obj);
+			compsList.push(obj);
+			
+			// 장바구니담기
+			cfnAddCart(compsList);
 
 		}else if (goodsType == 'G056_S'){  //수정요
-		
+			
 			let target=$('.select_custom.item_opt2');
 			let targetSize = target.length;	//구성품 갯수
 			let itemSize = 0;
@@ -1091,6 +1093,11 @@
 				return false;
 			}
 			
+			let cartGoodsList = [];
+			let compsList = [];
+			let goodsList = {
+				cartCompsList : new Array()
+			}
 			target.each(function() {
 				var arrInfo = $(this).find('input[name=opt2]').val().split('|');	// 상품코드|사이즈|구성수량
 				
@@ -1105,13 +1112,17 @@
 				obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 				obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 				obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-				params.push(obj);
+				compsList.push(obj);
 				
 			});
+			
+			goodsList.cartCompsList = compsList;
+			cartGoodsList.push(goodsList);
+			
+			// 장바구니담기
+			cfnAddCart(cartGoodsList);
 		}
 		
-		// 장바구니담기
-		cfnAddCart(params);
 	}
 
 	// 룩북속 상품 쇼핑백 담기
@@ -1212,7 +1223,8 @@
 						tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
 					}
 					let soldoutYn = ""; 
-					if ("Y" == item.soldoutYn || item.stockQty <= 0)soldoutYn = "true";
+					let saleQty = (Number(qty) * Number(minOrdQty));
+					if ("Y" == item.soldoutYn || item.stockQty <= saleQty)soldoutYn = "true";
 					if (selfGoodsYn == "Y"){
 						tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSet(this, \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';	
 					}else{

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html

@@ -304,7 +304,7 @@
 								</th:block>
 							</div>
 							<div class="pic" th:unless="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
-								<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+');'}">
+								<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=365);'}">
 								</span>
 							</div>
 							<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">

+ 12 - 12
src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html

@@ -66,7 +66,7 @@
 <div class="shareWrap" th:with="stylelUrl=${@environment.getProperty('domain.front')}, imgGoodsUrl=${@environment.getProperty('upload.goods.view')}">
 	<div id="layerShare" class="setShare open">
 		<span>
-			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm}');|"><span>카카오톡</span></button>
+			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=80'}');|"><span>카카오톡</span></button>
 			<button type="button" class="fb" th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '', '');|"><span>페이스북</span></button>
 			<button type="button" class="tw" th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm+ '#style24몰'}', '', '');|"><span>트위터</span></button>
 			<button type="button" class="url btn_copy"><span>URL</span></button>
@@ -104,7 +104,7 @@
 										<span>상품<em class="number" th:text="${#numbers.formatInteger(status.count,2)}">01</em></span>
 									</div>
 									<div class="itemPic">
-										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									</div>
 									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -131,7 +131,7 @@
 											<div class="item_state">
 												<a href="javascript:void(0)" class="itemLink">
 													<div class="itemPic">
-														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -146,7 +146,7 @@
 												<div class="item_state">
 													<a href="#none" class="itemLink">
 														<div class="itemPic">
-															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -182,7 +182,7 @@
 											<div class="item_state">
 												<a href="javascript:void(0)" class="itemLink">
 													<div class="itemPic">
-														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -197,7 +197,7 @@
 												<div class="item_state">
 													<a href="#none" class="itemLink">
 														<div class="itemPic">
-															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -233,7 +233,7 @@
 											<div class="item_state">
 												<a href="javascript:void(0)" class="itemLink">
 													<div class="itemPic">
-														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -248,7 +248,7 @@
 												<div class="item_state">
 													<a href="#none" class="itemLink">
 														<div class="itemPic">
-															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -284,7 +284,7 @@
 													<div class="item_state">
 														<a href="javascript:void(0)" class="itemLink">
 															<div class="itemPic">
-																<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 															</div>
 															<div class="itemName">선택</div>
 														</a>
@@ -299,7 +299,7 @@
 														<div class="item_state">
 															<a href="javascript:void(0);" class="itemLink">
 																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																</div>
 																<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 																<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></div>
@@ -391,7 +391,7 @@
 										<div class="item_state">
 											<a href="javascript:void(0)" class="itemLink">
 												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 												</div>
 												<div class="itemName">선택</div>
 											</a>
@@ -404,7 +404,7 @@
 										<div class="item_state">
 											<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]], [[${goodsInfo.currPrice}]], [[${goodsInfo.selfGoodsYn}]], [[${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'Y':'N' }]])">
 												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 												</div>
 												<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 												<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html

@@ -31,7 +31,7 @@
 						<div class="item_state">
 							<a href="javascript:void(0);" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html

@@ -34,7 +34,7 @@
 							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
 							<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'[[${params.contentsLoc}]]','','pc_detail');" class="itemLink" >
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsQnaFormWeb.html

@@ -25,7 +25,7 @@
 			<div class="item_state">
 				<a href="javascript:void(0);" class="itemLink">
 					<div class="itemPic">
-						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 					</div>
 					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 5 - 5
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsReviewBestFormWeb.html
- * @desc	: 베스트 상품평 팝업
+ * * @source  : GoodsReviewDetailFormWeb.html
+ * @desc	: 상품평 상세 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -14,7 +14,7 @@
  * 1.0  2021.03.02   eskim		최초 작성
  *******************************************************************************
  -->
-<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="modal-content">
 		<div class="modal-header">
 			<th:block th:if="${review.bestYn == 'Y'}">
@@ -49,7 +49,7 @@
 									</th:block>
 									<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
 									<span class="thumb">
-										<img th:src="${imgGoodsUrl+'/'+review.sysImgNm}" alt="">
+										<img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=365'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									</span>
 									</th:block>
 								</div>
@@ -75,7 +75,7 @@
 												<dl>
 													<div>
 														<dt>키/몸무게</dt>
-														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm|"></th:block> /
+														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
 															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
 														</dd>
 													</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewFormWeb.html

@@ -25,7 +25,7 @@
 			<div class="item_state">
 				<a href="javascript:void(0);" class="itemLink">
 					<div class="itemPic">
-						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 					</div>
 					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 3 - 10
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsInstockAlarmFormWeb.html
- * @desc	: 재입고알림 팝업
+ * @source  : GoodsReviewPhotoFormWeb.html
+ * @desc	: 상품평 - 포토/영상 리스트 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -23,13 +23,6 @@
 			<div class="pop_cont">
 				<div class="photo_list">
 					<ul id="ulGoodsReviewPhoto">
-						<li>
-							<a href="">
-								<div class="pic">
-									<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-								</div>
-							</a>
-						</li>
 					</ul>
 				</div>
 				<div class="ui_row">
@@ -42,7 +35,7 @@
 	</div>
 	<form id="goodsReviewPhotoForm" name="goodsReviewPhotoForm" action="#" th:action="@{'/goods/review/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
-		<input type="hidden" name="pageSize" value ="1"/>
+		<input type="hidden" name="pageSize" value ="20"/>
 		<input type="hidden" name="photoYn" value ="Y"/>
 		<input type="hidden" name="goodsCd" th:value ="${params.goodsCd}"/>
 	</form>

+ 205 - 0
src/main/webapp/ux/plugins/gaga/gaga.infinite.scroll.js

@@ -0,0 +1,205 @@
+/*
+ * Inifinite Scroll Java Script written by gagamel.
+ *
+ * Copyright (c) 2016 gagamel (nogdoo.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2016-04-28 $
+ *
+ * 사용 예)
+ * 		// HTML 태그는 다음과 같은 구조로 되어 있어야 하며
+ * 		// id 명칭은 infiniteContainer, listBoxOuter, listBox 가 필요하다.
+ * 		<section id="infiniteContainer">
+ * 			<div id="listBoxOuter">
+ * 				<ul id="listBox">
+ * 				</ul>
+ *			</div>
+ *		</section>
+ *
+ * 		// JQUERY History 파일과 인피니트 스크롤 관련 자바스크립트 파일을 import 되어 있어야 한다.
+ * 		<script type="text/javascript" src="/ux/plugins/jquery.history.min.js"></script>
+ * 		<script type="text/javascript" src="/ux/plugins/gaga.infinite.scroll.js"></script>
+ *
+ * 		<script type="text/javascript">
+ * 			// 인피니트 스크롤에 대한 History 정보를 가져오기 위해 함수를 호출한다.
+ *			// History 정보가 없을 경우 fnGetInfiniteScrollDataList 함수가 호출된다.
+ * 			$(function() { gagaInfiniteScroll.getHistory(); });
+ *
+ *			// 인피니트 스크롤 이벤트 발생 시 데이터 가져오기
+ *			var fnGetInfiniteScrollDataList = function(pageNum) {
+ *				// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+ *				gagajf.ajaxSubmitForm(document.searchForm, "/goods/list", "json", gagaInfiniteScroll.jsonToHtml);
+ *			}
+ *
+ *			// 인피니트 스크롤 이벤트 발생 시 가져온 데이터를 특정 태그에 append
+ *			// fnDrawInfiniteScrollData(result, pageNum) 함수 구현
+ *			// 		이 함수 내에서의 로직은
+ *			//		1. 가져온 데이터로 HTML 태그를 만든다.
+ *			// 		2. 만든 태그를 append 하는 gagaInfiniteScroll.draw() 함수를 호출
+ *		</script>
+ */
+
+var gagaInfiniteScroll = {
+	pageStatus : {
+		  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
+		, loadPage : 0      // 로드할 페이지
+		, loadAlign : 'not' // 로드 상태(prev, next, not)
+		, historyScroll : 0 //
+		, nowPage : null    // 현재 페이지
+		, pageUrl : {       // page url
+		}
+	},
+	obj : {
+		  $ajaxBoxOuter : $('#listBoxOuter')
+		, $ajaxBox : $('#listBox')
+		, $window : $(window)
+		, $loadingBar : '<div style="width: 100%; padding-top: 50px; text-align: center;" id="loadingBar"><img src="/ux/plugins/gaga/loader.gif" style="width:25px; height:25px;"/></div>'
+//		, $loadingBar : '<div style="width: 100%; padding-top: 50px; text-align: center;" id="loadingBar"><img src="/images/hsmob/common/loading_bar_01.gif" width="24px" height=" 22px"/></div>'
+	},
+	scrollCheck : function() {
+		var obj = this.obj, stat = this.pageStatus;
+
+		if (obj.$window.scrollTop() >= obj.$ajaxBox.offset().top + obj.$ajaxBox.height() - obj.$window.height()) { // 더보기
+			if (stat.loadAlign == 'not') {
+				var pageLen = this.pageStatus.pageNum.length - 1;
+				var nextPageNum = this.pageStatus.pageNum[pageLen] + 1;
+				this.pageStatus.pageNum.push(nextPageNum);
+				this.pageStatus.loadPage = nextPageNum;
+				stat.loadAlign = 'next';
+				this.getDataList();
+			};
+		}
+	},
+	getDataList : function() {
+		/*if (this.pageStatus.loadAlign == 'prev') {
+			this.obj.$ajaxBoxOuter.prepend($(this.obj.$loadingBar));
+		} else if (this.pageStatus.loadAlign == 'next') {
+			this.obj.$ajaxBoxOuter.append($(this.obj.$loadingBar));
+		};*/
+
+		$(".wrap-loading").removeClass('display-none');
+
+		// 인피니트 스크롤 이벤트에서 호출될 함수(데이터 가져오기 등)
+		// fnGetInfiniteScrollDataList 함수는 개발단에서 구현해야 한다.
+		fnGetInfiniteScrollDataList(this.pageStatus.loadPage);
+	},
+	getHistory : function() {
+		var historyData = History.getState();
+
+		if (historyData.data.pageNum === undefined || historyData.data.pageNum === '' || historyData.data.htm === undefined || historyData.data.htm == '') {
+			this.pageStatus.loadPage = 0;
+			this.pageStatus.pageNum[0] = 0;
+			this.pageStatus.loadAlign = 'next';
+			this.pageStatus.historyScroll = 0;
+
+			this.getDataList();
+		} else {
+			this.pageStatus.loadPage = historyData.data.pageNum;
+			this.pageStatus.pageNum[0] = historyData.data.pageNum;
+			this.pageStatus.historyScroll = historyData.data.dataIndex;
+			this.pageStatus.loadAlign = 'next';
+
+			gagaInfiniteScroll.draw(historyData.data.htm);
+		};
+
+		$(window).on('scroll', function() {
+			gagaInfiniteScroll.scrollCheck();
+		});
+	},
+	draw : function(htm, scrollTop, containerHeight) {
+		if (htm == 'not') {
+			$(".wrap-loading").addClass('display-none');
+			this.pageStatus.loadAlign = 'top';
+		} else {
+			var startH = $('#infiniteContainer').height();
+			var $addHtm = $(htm);
+			var $imgs = $addHtm.find('img');
+			var loadCheck = 0;
+			var len = $imgs.length;
+
+			if (scrollTop && containerHeight) {
+			} else {
+			}
+
+			$addHtm.find('img.lazy').lazyload({root: null,
+						rootMargin: "100px",
+						threshold: 0});
+
+			$.each($imgs, function(index) {
+				$imgs.eq(index).on('load',function() {
+					loadCheck++;
+					imgLpadComp();
+				});
+			});
+
+			var imgLpadComp = function() {
+				if (len - 1 == loadCheck) {
+					gagaInfiniteScroll.pushHistory(
+							  gagaInfiniteScroll.pageStatus.nowPage
+							, $(window).scrollTop()
+							, $('#infiniteContainer').height()
+							, gagaInfiniteScroll.pageStatus.loadPage
+							, 0
+							, gagaInfiniteScroll.obj.$ajaxBox.html());
+					if (scrollTop && containerHeight) {
+						gagaInfiniteScroll.obj.$window.scrollTop.scrollTop(0).scrollTop(scrollTop);
+					} else {
+						gagaInfiniteScroll.obj.$window.scrollTop(gagaInfiniteScroll.obj.$window.scrollTop() + 1);
+					}
+				};
+			};
+
+			$(".wrap-loading").addClass('display-none');
+
+			// Append HTML
+			this.obj.$ajaxBox.append($addHtm);
+
+			if (scrollTop && containerHeight) {
+				gagaInfiniteScroll.obj.$window.scrollTop.scrollTop(0).scrollTop(scrollTop);
+			} else {
+				$(window).scrollTop($(window).scrollTop() + 1);
+			}
+
+			this.pageStatus.loadAlign = 'not';
+		}
+	},
+	pushHistory : function(page, sScrollTop, sHeight, sPageNum, sDataIndex, sHtml) {
+		History.replaceState({
+			  state: page
+			, scroll: sScrollTop
+			, height: sHeight
+			, pageUrl: gagaInfiniteScroll.pageStatus.pageUrl
+			, name: gagaInfiniteScroll.pageStatus.nowPage
+			, pageNum : sPageNum
+			, dataIndex : sDataIndex
+			, htm : sHtml
+		}, "", "");
+	},
+	pushLinkHistory : function(pageNum, dataIndex, obj) { // 링크에서 사용
+		var $pageNum = (pageNum || pageNum == 0) ? pageNum : '';
+		var $dataIndex = (dataIndex || dataIndex == 0) ? dataIndex : '';
+		var $html = (obj) ? $(obj).parents('#listBox').html() : '';
+
+		History.replaceState({
+			  state : gagaInfiniteScroll.pageStatus.nowPage
+			, scroll : $(window).scrollTop()
+			, height : $('#infiniteContainer').height()
+			, pageUrl : gagaInfiniteScroll.pageStatus.pageUrl
+			, name : gagaInfiniteScroll.pageStatus.nowPage
+			, pageNum : $pageNum
+			, dataIndex : $dataIndex
+			, htm : $html
+		}, "", "");
+
+		return false;
+	},
+	jsonToHtml : function(result) {
+		// Data 가져온 후 실행될 함수
+		// fnDrawInfiniteScrollData 함수는 개발단에서 구현해야 한다.
+		if (result.dataList == "not") // data가 더 이상 없으면
+			fnDrawInfiniteScrollData('not', result.CURRENT_PAGE - 1);
+		else
+			fnDrawInfiniteScrollData(result, result.CURRENT_PAGE - 1);
+	}
+};

+ 7 - 1
src/main/webapp/ux/style24_link.js

@@ -584,6 +584,9 @@ function cfGoodsInstockAlarmInfo(goodsCd, colorCd) {
 */
 function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq) {
 	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
 
 	if ($('#layer_review_best').length == 0) {
 		$('body').append(str);
@@ -607,7 +610,10 @@ function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq) {
 */
 function cfGoodsReviewPhoto(goodsCd) {
 	var str = '<div class="modal fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="pdPhotoReviewListLabel" aria-hidden="true"></div>';
-
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
+	
 	if ($('#layer_review_photo').length == 0) {
 		$('body').append(str);
 	}