eskim 5 лет назад
Родитель
Сommit
baefb59708

+ 2 - 2
src/main/java/com/style24/front/biz/service/TsfReviewService.java

@@ -68,9 +68,9 @@ public class TsfReviewService {
 	public Collection<Goods> getReviewOptionList(Goods goods) {
 		Collection<Goods> result = new ArrayList<Goods>();
 		if ("Y".equals(goods.getSelfGoodsYn())) {
-			result = reviewDao.getReviewOption1List(goods.getGoodsCd());
-		}else {
 			result = reviewDao.getReviewOption2List(goods.getGoodsCd());
+		}else {
+			result = reviewDao.getReviewOption1List(goods.getGoodsCd());
 		}
 		 return result;
 	}

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

@@ -232,8 +232,10 @@ public class TsfGoodsController extends TsfBaseController {
 			Review review = new Review();
 			review.setGoodsCd(goods.getGoodsCd());
 			review.setBestYn("Y");
-			review.setRownum(1);
 			review.setGoodsType(goods.getGoodsType());
+			if ("P".equals(paramsGoods.getFrontGb())) {
+				review.setRownum(1);	
+			}
 			mav.addObject("bestReviewList", reviewService.getReviewList(review));
 		}
 
@@ -1185,9 +1187,11 @@ public class TsfGoodsController extends TsfBaseController {
 
 		Review review = new Review();
 		review.setGoodsCd(goods.getGoodsCd());
-		mav.addObject("reviewCount", reviewService.getReviewTotalCount(review));	// 전체상품평 건수 
-		review.setRownum(1);
 		review.setGoodsType(goods.getGoodsType());
+		log.info("review {}", review);
+		mav.addObject("reviewCount", reviewService.getReviewTotalCount(review));	// 전체상품평 건수
+		
+		review.setRownum(1);
 		mav.addObject("reviewList", reviewService.getReviewList(review));	// 전체상품평 유무 확인
 		review.setBestYn("Y");
 		review.setRownum(0);	// 전체 조회

+ 1 - 0
src/main/java/com/style24/persistence/domain/Review.java

@@ -63,6 +63,7 @@ public class Review extends TscBaseDomain {
 	private String scoreBallNm;		// 볼넓이점수(공통코드G041)
 	private String photoYn;			// 포토상품평유무
 	private String goodsType;		// 상품유형
+	private String selfGoodsYn;		// 자사상품여부
 	private int rownum;
 	
 	private String reviewScore;		// 상품평 검색조건 평점

+ 26 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -31,12 +31,12 @@
 		                              AND R.ORD_DTL_NO  = OD.ORD_DTL_NO
 		                              AND R.GOODS_CD = OD.GOODS_CD
 		INNER JOIN TB_CUSTOMER C ON R.REG_NO  = C.CUST_NO
-		<if test="goodsType != null and goodsType = 'G056_D'">
+		<if test="goodsType != null and goodsType == 'G056_D'">
 		INNER JOIN TB_GOODS_COMPOSE GC ON R.GOODS_CD  = GC.COMPS_GOODS_CD
 		</if>
 		WHERE 1 = 1
 		<choose>
-		    <when test="goodsType != null and goodsType = 'G056_D'">
+		    <when test="goodsType != null and goodsType == 'G056_D'">
 		AND    R.GOODS_CD = GC.COMPS_GOODS_CD
 		AND    GC.GOODS_CD = #{goodsCd}
 		    </when>
@@ -63,12 +63,24 @@
 		AND R.SCORE = #{reviewScore}
 		</if>
 		<if test="reviewOption != null and reviewOption != ''">
+		<choose>
+		    <when test='selfGoodsYn != null and selfGoodsYn == "Y"'>
+		AND EXISTS (SELECT 1
+		            FROM TB_ORDER_DETAIL_ITEM ODI 
+		            WHERE ODI.ORD_NO = R.ORD_NO 
+		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
+		            AND ODI.OPT_CD1 = #{reviewOption}
+		           )
+		    </when>
+		    <otherwise>
 		AND EXISTS (SELECT 1
 		            FROM TB_ORDER_DETAIL_ITEM ODI 
 		            WHERE ODI.ORD_NO = R.ORD_NO 
 		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
 		            AND ODI.OPT_CD2 = #{reviewOption}
 		           )
+		    </otherwise>
+		</choose>
 		</if>
 		<if test="reviewHeight != null and reviewHeight != ''">
 		 <![CDATA[
@@ -207,12 +219,24 @@
 		AND R.SCORE = #{reviewScore}
 		</if>
 		<if test="reviewOption != null and reviewOption != ''">
+		<choose>
+		    <when test='selfGoodsYn != null and selfGoodsYn == "Y"'>
+		AND EXISTS (SELECT 1
+		            FROM TB_ORDER_DETAIL_ITEM ODI 
+		            WHERE ODI.ORD_NO = R.ORD_NO 
+		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
+		            AND ODI.OPT_CD1 = #{reviewOption}
+		           )
+		    </when>
+		    <otherwise>
 		AND EXISTS (SELECT 1
 		            FROM TB_ORDER_DETAIL_ITEM ODI 
 		            WHERE ODI.ORD_NO = R.ORD_NO 
 		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
 		            AND ODI.OPT_CD2 = #{reviewOption}
 		           )
+		    </otherwise>
+		</choose>
 		</if>
 		<if test="reviewHeight != null and reviewHeight != ''">
 		 <![CDATA[

+ 18 - 90
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -389,109 +389,37 @@
 			<!-- 리뷰영역 -->
 			<div class="riview_box">
 				<div class="ex_review">
-					<a href="#none" id="btn_pdReview_pop">	
-						<span class="tit">리뷰 <em class="number">(9,999+)</em></span>
-						<div class="star_score">
-							<span class="star">
-								<em class="progbar" style="width:86%;"></em> <!-- 평점 style로 표기 -->
+					<a href="javascript:void(0);" id="btn_pdReview_pop" th:onclick="cfGoodsReview([[${goodsInfo.goodsCd}]])">	
+						<span class="tit">리뷰 <em class="number">(<th:block  th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</em></span>
+						<div class="star_score" th:if="${goodsInfo.reviewRegCnt  > 0 }">
+							<span class="star" th:with="starScore=${#numbers.formatDecimal((goodsInfo.score*100/5), 0,0)}">
+								<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
 							</span>
-							<span class="score">4.3점</span>
+							<span class="score" th:text="|${goodsInfo.score}점|">4.3점</span>
 						</div>
 					</a>
 				</div>
-				<div class="area_slider" id="btn_pdBestReview_pop">
+				<div class="area_slider" id="btn_pdBestReview_pop" th:if="${bestReviewList != null and !bestReviewList.empty}">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">
-							<div class="swiper-slide">
+							<div class="swiper-slide"  th:each="bestReview, status : ${bestReviewList}"  >
 								<!-- 베스트 리뷰 등록시 노출 -->
 								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
+									<a href="javascript:void(0);">
+										<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">
 											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
+												<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
 											</span>
 											<em class="ico ico_besttag"></em>
 										</div>
 										<div class="lap">
-											<div class="pic">
-												<span class="thumb mov" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+											<div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
+												<th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
+												<span class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}"  th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+												</th:block>
 											</div>
 											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
-											</div>
-										</div>
-									</a>
-								</div>
-								<!-- //베스트 리뷰 등록시 노출 -->
-							</div>
-							<div class="swiper-slide">
-								<!-- 베스트 리뷰 등록시 노출 -->
-								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
-											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
-											</span>
-											<em class="ico ico_besttag"></em>
-										</div>
-										<div class="lap">
-											<div class="pic">
-												<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span>
-											</div>
-											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
-											</div>
-										</div>
-									</a>
-								</div>
-								<!-- //베스트 리뷰 등록시 노출 -->
-							</div>
-							<div class="swiper-slide">
-								<!-- 베스트 리뷰 등록시 노출 -->
-								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
-											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
-											</span>
-											<em class="ico ico_besttag"></em>
-										</div>
-										<div class="lap">
-											<div class="pic">
-												<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span>
-											</div>
-											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
-											</div>
-										</div>
-									</a>
-								</div>
-								<!-- //베스트 리뷰 등록시 노출 -->
-							</div>
-							<div class="swiper-slide">
-								<!-- 베스트 리뷰 등록시 노출 -->
-								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
-											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
-											</span>
-											<em class="ico ico_besttag"></em>
-										</div>
-										<div class="lap">
-											<div class="pic">
-												<span class="thumb mov" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-											</div>
-											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
+												<p th:text="${bestReview.reviewContent}">옷</p>
 											</div>
 										</div>
 									</a>
@@ -1745,10 +1673,10 @@
 			return false;
 		});
 		// 닫기
-		$(document).on('click','.pd_review .category_box .category_close',function(e){
+	/* 	$(document).on('click','.pd_review .category_box .category_close',function(e){
 			$(".pd_review .category_box").hide();
 			return false;
-		});
+		}); */
 		// 변경
 		$(document).on('click','.pd_review .category ul > li',function(e){
 			var num=$(".pd_review .category_open > li").length;

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

@@ -100,7 +100,7 @@
 
 		let tag = '';
 		$.each(result.dataList, function(idx, item) {
-			
+			$('#goodsQnaForm').find('.nodata').hide();
 			tag += '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
 			if (item.selfGb == 1){
 				tag += ' my_qna';	

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

@@ -0,0 +1,818 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsDetailReviewFormMob.html
+ * @desc	: 상품평 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR		 DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim	   최초 작성
+ *******************************************************************************
+ -->
+<div class="pd_review" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<!-- 등록리뷰 없을 시 -->
+	<div class="area_rv_empty" th:if="${reviewList == null or reviewList.empty}">
+		<div class="txt_box">
+			<p>
+				지금 첫 리뷰를 작성하고<br>
+				<span class="c_primary">스타일포인트 적립</span> 받으세요!
+			</p>
+			<div>
+				<dl>
+					<dt>일반 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.textReviewPoint, 0,'COMMA')}P|">150P</dd>
+				</dl>
+				<dl>
+					<dt>포토/영상 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.photoReviewPoint, 0,'COMMA')}P|">350P</dd>
+				</dl>
+				<dl>
+					<dt>베스트 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.bestReviewPoint, 0,'COMMA')}P|">10,000P</dd>
+				</dl>
+			</div>
+		</div>
+		<div class="btn_group_flex">
+			<div><button type="button" class="btn btn_dark" onclick="cfnGoToMypageReview();"><span>지금 리뷰 작성하기</span></button></div>
+		</div>
+	</div>
+	<!-- //등록리뷰 없을 시 -->
+	<!-- 등록리뷰 있을 시 -->
+	<div class="area_rv_average" th:if="${reviewList != null and !reviewList.empty}">
+		<h6 class="sr-only">구매평점</h6>
+		<div class="star_score">
+			<span class="tit">구매평점</span>
+			<span class="score" th:text="${goodsInfo.score}">4.3</span>
+			<span class="star" th:with="starScore=${#numbers.formatDecimal((goodsInfo.score*100/5), 0,0)}">
+				<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+			</span>
+		</div>
+		<!-- 착용정보 있을 시 노출 -->
+		<th:block th:if="${not #strings.isEmpty(goodsInfo.sizeGb)}">
+		<div class="average">
+			<div class="part_average" th:with="scoreSize1=${#numbers.formatDecimal((goodsInfo.scoreSize1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreSize2=${#numbers.formatDecimal((goodsInfo.scoreSize2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreSize3=${#numbers.formatDecimal((goodsInfo.scoreSize3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">사이즈</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreSize1 >= scoreSize2 and scoreSize1 >= scoreSize3}">작음</th:block>
+							<th:block th:if="${scoreSize2 > scoreSize1 and scoreSize2 >= scoreSize3}">딱맞음</th:block>
+							<th:block th:if="${scoreSize3 > scoreSize1 and scoreSize3 > scoreSize2}">큼</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreSize1 >= scoreSize2 and scoreSize1 >= scoreSize3}" th:text="|${scoreSize1}%|">작음</th:block>
+								<th:block th:if="${scoreSize2 > scoreSize1 and scoreSize2 >= scoreSize3}" th:text="|${scoreSize2}%|">딱맞음</th:block>
+								<th:block th:if="${scoreSize3 > scoreSize1 and scoreSize3 > scoreSize2}" th:text="|${scoreSize3}%|">큼</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>작음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreSize1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreSize1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl class="on">
+						<dt>딱맞음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreSize2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreSize2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl>
+						<dt>큼</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreSize3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreSize3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			<div class="part_average" th:with="scoreColor1=${#numbers.formatDecimal((goodsInfo.scoreColor1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreColor2=${#numbers.formatDecimal((goodsInfo.scoreColor2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreColor3=${#numbers.formatDecimal((goodsInfo.scoreColor3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">컬러</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreColor1 >= scoreColor2 and scoreColor1 >= scoreColor3}">밝음</th:block>
+							<th:block th:if="${scoreColor2 > scoreColor1 and scoreColor2 >= scoreColor3}">똑같음</th:block>
+							<th:block th:if="${scoreColor3 > scoreColor1 and scoreColor3 > scoreColor2}">어두움</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreColor1 >= scoreColor2 and scoreColor1 >= scoreColor3}" th:text="|${scoreColor1}%|">밝음</th:block>
+								<th:block th:if="${scoreColor2 > scoreColor1 and scoreColor2 >= scoreColor3}" th:text="|${scoreColor2}%|">똑같음</th:block>
+								<th:block th:if="${scoreColor3 > scoreColor1 and scoreColor3 > scoreColor2}" th:text="|${scoreColor3}%|">어두움</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl class="on">
+						<dt>밝음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreColor1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreColor1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>똑같음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreColor2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreColor2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl>
+						<dt>어두움</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreColor3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreColor3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			<th:block th:if="${goodsInfo.sizeGb == 'T' or goodsInfo.sizeGb == 'B'}">
+			<div class="part_average" th:with="scoreFit1=${#numbers.formatDecimal((goodsInfo.scoreFit1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreFit2=${#numbers.formatDecimal((goodsInfo.scoreFit2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreFit3=${#numbers.formatDecimal((goodsInfo.scoreFit3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">핏</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreFit1 >= scoreFit2 and scoreFit1 >= scoreFit3}">슬림</th:block>
+							<th:block th:if="${scoreFit2 > scoreFit1 and scoreFit2 >= scoreFit3}">레귤러</th:block>
+							<th:block th:if="${scoreFit3 > scoreFit1 and scoreFit3 > scoreFit2}">오버</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreFit1 >= scoreFit2 and scoreFit1 >= scoreFit3}" th:text="|${scoreFit1}%|">슬림</th:block>
+								<th:block th:if="${scoreFit2 > scoreFit1 and scoreFit2 >= scoreFit3}" th:text="|${scoreFit2}%|">레귤러</th:block>
+								<th:block th:if="${scoreFit3 > scoreFit1 and scoreFit3 > scoreFit2}" th:text="|${scoreFit3}%|">오버</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl class="on">
+						<dt>슬림</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreFit1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreFit1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>레귤러</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreFit2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreFit2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl>
+						<dt>오버</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreFit3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreFit3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>	
+			</div>
+			<div class="part_average" th:with="scoreThick1=${#numbers.formatDecimal((goodsInfo.scoreThick1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreThick2=${#numbers.formatDecimal((goodsInfo.scoreThick2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreThick3=${#numbers.formatDecimal((goodsInfo.scoreThick3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">두께감</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreThick1 >= scoreThick2 and scoreThick1 >= scoreThick3}">얇음</th:block>
+							<th:block th:if="${scoreThick2 > scoreThick1 and scoreThick2 >= scoreThick3}">적당함</th:block>
+							<th:block th:if="${scoreThick3 > scoreThick1 and scoreThick3 > scoreThick2}">도톰함</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreThick1 >= scoreThick2 and scoreThick1 >= scoreThick3}" th:text="|${scoreThick1}%|">얇음</th:block>
+								<th:block th:if="${scoreThick2 > scoreThick1 and scoreThick2 >= scoreThick3}" th:text="|${scoreThick2}%|">적당함</th:block>
+								<th:block th:if="${scoreThick3 > scoreThick1 and scoreThick3 > scoreThick2}" th:text="|${scoreThick3}%|">도톰함</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>얇음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreThick1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreThick1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>적당함</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreThick2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreThick2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl class="on">
+						<dt>도톰함</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreThick3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreThick3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			</th:block>
+			<th:block  th:if="${goodsInfo.sizeGb == 'S'}">
+			<div class="part_average" th:with="scoreWeight1=${#numbers.formatDecimal((goodsInfo.scoreWeight1*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreWeight2=${#numbers.formatDecimal((goodsInfo.scoreWeight2*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreWeight3=${#numbers.formatDecimal((goodsInfo.scoreWeight3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">무게감</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreWeight1 >= scoreWeight2 and scoreWeight1 >= scoreWeight3}">가벼움</th:block>
+							<th:block th:if="${scoreWeight2 > scoreWeight1 and scoreWeight2 >= scoreWeight3}">적당함</th:block>
+							<th:block th:if="${scoreWeight3 > scoreWeight1 and scoreWeight3 > scoreWeight2}">무거움</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreWeight1 >= scoreWeight2 and scoreWeight1 >= scoreWeight3}" th:text="|${scoreWeight1}%|">가벼움</th:block>
+								<th:block th:if="${scoreWeight2 > scoreWeight1 and scoreWeight2 >= scoreWeight3}" th:text="|${scoreWeight2}%|">적당함</th:block>
+								<th:block th:if="${scoreWeight3 > scoreWeight1 and scoreWeight3 > scoreWeight2}" th:text="|${scoreWeight3}%|">무거움</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>가벼움</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreWeight1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreWeight1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>적당함</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreWeight2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreWeight2"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl class="on">
+						<dt>무거움</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreWeight3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreWeight3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			<div class="part_average" th:with="scoreBall1=${#numbers.formatDecimal((goodsInfo.scoreBall1*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreBall2=${#numbers.formatDecimal((goodsInfo.scoreBall2*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreBall3=${#numbers.formatDecimal((goodsInfo.scoreBall3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">볼너비</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreBall1 >= scoreBall2 and scoreBall1 >= scoreBall3}">작음</th:block>
+							<th:block th:if="${scoreBall2 > scoreBall1 and scoreBall2 >= scoreBall3}">딱맞음</th:block>
+							<th:block th:if="${scoreBall3 > scoreBall1 and scoreBall3 > scoreBall2}">큼</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreBall1 >= scoreBall2 and scoreBall1 >= scoreBall3}" th:text="|${scoreBall1}%|">작음</th:block>
+								<th:block th:if="${scoreBall2 > scoreBall1 and scoreBall2 >= scoreBall3}" th:text="|${scoreBall2}%|">딱맞음</th:block>
+								<th:block th:if="${scoreBall3 > scoreBall1 and scoreBall3 > scoreBall2}" th:text="|${scoreBall3}%|">큼</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>작음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreBall1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreBall1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>딱맞음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreBall2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreBall2"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl class="on">
+						<dt>큼</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreBall3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreBall3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			</th:block>
+			<div class="btn_group_flex">
+				<div>
+					<button type="button" class="btn btn_default">
+						<span></span>
+					</button>
+				</div>
+			</div>
+			<script>
+				function averag(){
+					var averagBtn=$(".average .btn_group_flex button");
+					var averag=$(".average .pa_body");
+					averagBtn.on('click',function(e){
+						averag.slideToggle();
+						$(this).toggleClass("active")	
+					});  
+				}
+				averag();
+			</script>
+		</div>
+		</th:block>
+		<!-- //착용정보 있을 시 노출 -->
+		<div class="info_review">
+			<p>
+				<i class="ico_point"></i>상품 리뷰 작성 시 <span>스타일포인트 추가 적립!</span>
+			</p>
+			<div>
+				<dl>
+					<dt>일반리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.textReviewPoint, 0,'COMMA')}P|">150P</dd>
+				</dl>
+				<dl>
+					<dt>포토/영상 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.photoReviewPoint, 0,'COMMA')}P|">350P</dd>
+				</dl>
+				<dl>
+					<dt>베스트 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.bestReviewPoint, 0,'COMMA')}P|">10,000P</dd>
+				</dl>
+			</div>
+		</div>
+	</div>
+	<div class="area_rv_best" th:if="${bestReviewList != null and !bestReviewList.empty}">
+		<div class="riview_box">
+			<h6>베스트 리뷰</h6>
+			<div class="area_slider" id="btn_pdBestReview_pop">
+				<div class="swiper-container">
+					<div class="swiper-wrapper">
+						<div class="swiper-slide" th:each="bestReview, status : ${bestReviewList}">
+							<div class="best_review">
+								<a href="javascript:void(0);">
+									<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로 표기 -->
+										</span>
+										<em class="ico ico_besttag"></em>
+									</div>
+									<div class="lap">
+										<div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
+											<th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
+											<span class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}"  th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+											</th:block>
+										</div>
+										<div class="txt_best_review">
+											<p th:text="${bestReview.reviewContent}">옷</p>
+										</div>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<!-- Add Pagination -->
+					<div class="swiper-pagination"></div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="area_rv_photo" th:if="${photoReviewList != null and !photoReviewList.empty}">
+		<h6>포토/영상 리뷰</h6>
+		<div class="photo_list">
+			<ul>
+				<li  th:each="photoReview, status : ${photoReviewList}" >
+					<th:block th:if="${photoReview.reviewAttachList != null and !photoReview.reviewAttachList.empty}">
+					<th:block th:each="reviewAttach, attachStatus : ${photoReview.reviewAttachList}" th:if="${attachStatus.first}">
+					<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]], '', 'Y', [[${photoReview.reviewSq}]])">
+						<div class="pic">
+							<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+						</div>
+					</a>
+					</th:block>
+					</th:block>
+				</li>
+			</ul>
+			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
+			<div th:if="${#lists.size(photoReviewList) >= 8}">
+				<div>
+					<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])"><span>더 보기</span></button>
+				</div>	
+			</div>
+			<!-- //포토영상 게시글 최대 7개 & 버튼노출 -->
+		</div>
+	</div>
+	<div class="area_rv_all">
+	<form id="goodsReviewForm" name="goodsReviewForm" action="#" th:action="@{'/goods/review/list'}">
+	<input type="hidden" name="pageNo" value ="1"/>
+	<input type="hidden" name="pageSize" value ="20"/>
+	<input type="hidden" name="goodsCd" th:value ="${goodsInfo.goodsCd}"/>
+	<input type="hidden" name="goodsType" th:value ="${goodsInfo.goodsType}"/>
+	<input type="hidden" name="selfGoodsYn" th:value ="${goodsInfo.selfGoodsYn}"/>
+	<input type="hidden" name="reviewScore" />
+	<input type="hidden" name="reviewOption" />
+	<input type="hidden" name="reviewHeight" />
+	<input type="hidden" name="reviewWeight" />
+	
+		<h6>전체리뷰<span>(<span id="reviewCount" th:text="${(reviewCount <= 9999) ? #numbers.formatInteger(reviewCount, 0,'COMMA') : '9,999+'}">9,999+</span>)</span></h6>
+		<div class="selection">
+			<ul class="category_open">
+				<li data_name="grade"><span>평점 전체</span></li>
+				<th:block th:if="${reviewOptionList != null and !reviewOptionList.empty}">
+				<li data_name="size"><span th:text="${(goodsInfo.selfGoodsYn == 'Y')? '사이즈 전체':'옵션 전체'}">사이즈 전체</span></li>
+				</th:block>
+				<li data_name="height" th:if="${reviewHeightList != null and !reviewHeightList.empty}"><span>키 전체</span></li>
+				<li data_name="weight"><span>몸무게 전체</span></li>
+			</ul>
+			<div class="category_box">
+				<div class="lap">
+					<div class="category_close" onclick="fnReviewCateClose();">카테고리닫기</div>
+					<div class="category_list">
+						<!-- 평점,사이즈,키,몸무게 카테고리 -->
+						<div class="category" id="grade">
+							<ul class="n1">
+								<li><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('A','');">전체</a></li>
+								<li><a href="javascript:void(0)" data="5점" onclick="fnReviewSearch('A','5');">5점&nbsp;★★★★★</a></li>
+								<li><a href="javascript:void(0)" data="4점" onclick="fnReviewSearch('A','4');">4점&nbsp;★★★★</a></li>
+								<li><a href="javascript:void(0)" data="3점" onclick="fnReviewSearch('A','3');">3점&nbsp;★★★</a></li>
+								<li><a href="javascript:void(0)" data="2점" onclick="fnReviewSearch('A','2');">2점&nbsp;★★</a></li>
+								<li><a href="javascript:void(0)" data="1점" onclick="fnReviewSearch('A','1');">1점&nbsp;★</a></li>
+							</ul>
+						</div>
+						<div class="category" id="size" th:if="${reviewOptionList != null and !reviewOptionList.empty}">
+							<ul class="n2">
+								<li class="active"><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('O','');">전체</a></li>
+								<li th:each="reviewOption, status : ${reviewOptionList}">
+									<a href="javascript:void(0)" th:attr="data=${reviewOption.optCd}" th:onclick="fnReviewSearch('O',[[${reviewOption.optCd}]]);"><th:block th:text="${reviewOption.optCd}"></th:block></a>
+									<input type="hidden" name="selOption" th:value="${reviewOption.optCd}"/>
+								</li>
+							</ul>
+						</div>
+						<div class="category" id="height" th:if="${reviewHeightList != null and !reviewHeightList.empty}">
+							<ul class="n2">
+								<li class="active"><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('H','');">전체</a></li>
+								<li th:each="reviewHeight, status : ${reviewHeightList}">
+									<a href="javascript:void(0)" th:attr="data=${reviewHeight.cdNm}" th:onclick="fnReviewSearch('H',[[${reviewHeight.cd}]]);"><th:block th:text="${reviewHeight.cdNm}"></th:block></a>
+									<input type="hidden" name="selHeight" th:value="${reviewHeight.cd}"/>
+								</li>
+							</ul>
+						</div>
+						<div class="category" id="weight" th:if="${reviewWeightList != null and !reviewWeightList.empty}">
+							<ul class="n2">
+								<li class="active"><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('W','');">전체</a></li>
+								<li th:each="reviewWeight, status : ${reviewWeightList}">
+									<a href="javascript:void(0)" th:attr="data=${reviewWeight.cdNm}" th:onclick="fnReviewSearch('W',[[${reviewWeight.cd}]]);"><th:block th:text="${reviewWeight.cdNm}"></th:block></a>
+									<input type="hidden" name="selWeight" th:value="${reviewWeight.cd}"/>
+								</li>
+							</ul>
+						</div>
+						<!-- //평점,사이즈,키,몸무게 카테고리 -->
+					</div>
+				</div>
+			</div>
+		</div>
+		<!-- 나열조건결과 있을 때 노출 내용 -->
+		<div class="review_list" id="listBoxOuter">
+			<ul  id="listBox">
+			</ul>
+		</div>
+		<div class="review_last"  style="display:none;">
+			마지막 게시글입니다.
+		</div>
+		<!-- //나열조건결과 있을 때 노출 내용 -->
+		<!-- 나열조건결과 없을 때 노출 내용 -->
+		<div class="nodata"  style="display:none;">
+			<div class="txt_box">
+				<p>
+					선택하신 조건에 맞는 리뷰가 없습니다.<br>
+					조건을 변경해 보세요.
+				</p>
+			</div>
+			<div class="btn_group_flex">
+				<div><button type="button" class="btn btn_default"  onclick="fnReviewSearchInit();"><span>선택한 조건 초기화</span></button></div>
+			</div>
+		</div>
+		<!-- //나열조건결과 없을 때 노출 내용 -->
+	</form>	
+	</div>
+	<!-- //등록리뷰 있을 시 -->
+</div>
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	// 상품펴 검색
+	var fnGetInfiniteScrollDataList = function(pageNum) {
+	
+		$("#goodsReviewForm input[name=pageNo]").val(pageNum+1);
+		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+		gagajf.ajaxFormSubmit("/goods/review/list", document.goodsReviewForm,  gagaInfiniteScroll.jsonToHtml);
+	}
+	
+	var fnDrawInfiniteScrollData = function(result, pageNum){
+
+		if (result.dataList != null && result.dataList.length > 0) {
+			var htm = fnCreateGoodsReviewList(result);
+			gagaInfiniteScroll.draw(htm);
+		}else {
+			if($("#goodsReviewForm input[name=pageNo]").val()==1){
+				$('#goodsReviewForm').find('.nodata').show();
+			}
+			gagaInfiniteScroll.draw('not');
+		}
+	}
+
+	var fnGoodsReviewListSearch = function() {
+		gagaInfiniteScroll.getHistory();
+	}
+	
+	// 상품평 검색조건 클릭시
+	var fnReviewSearch = function(flag, val){
+		
+		let reviewScore = $('#goodsReviewForm input[name=reviewScore]').val();
+		let reviewOption = $('#goodsReviewForm input[name=reviewOption]').val();
+		let reviewHeight = $('#goodsReviewForm input[name=reviewHeight]').val();
+		let reviewWeight = $('#goodsReviewForm input[name=reviewWeight]').val();
+		
+		if (flag == 'A'){ //평점
+			reviewScore = val;
+		}else if (flag == 'O'){ //옵션
+			reviewOption = val;
+		}else if (flag == 'H'){ //키
+			reviewHeight = val;
+		}else{ //무게
+			reviewWeight = val;
+		}
+		
+		let changFlag = false;
+		if ($('#goodsReviewForm input[name=reviewScore]').val() != reviewScore){
+			changFlag = true;
+		}else if ($('#goodsReviewForm input[name=reviewOption]').val() != reviewOption){
+			changFlag = true;
+		}else if ($('#goodsReviewForm input[name=reviewHeight]').val() != reviewHeight){
+			changFlag = true;
+		}else if ($('#goodsReviewForm input[name=reviewWeight]').val() != reviewWeight){
+			changFlag = true;
+		}
+		
+		$('#goodsReviewForm input[name=reviewScore]').val(reviewScore);
+		$('#goodsReviewForm input[name=reviewOption]').val(reviewOption);
+		$('#goodsReviewForm input[name=reviewHeight]').val(reviewHeight);
+		$('#goodsReviewForm input[name=reviewWeight]').val(reviewWeight);
+		
+		if (changFlag) {
+			fnReviewCateClose();
+			fnGoodsReviewInfiniteScrollInit();
+			fnGoodsReviewListSearch();
+		}
+		
+	}
+	
+	var fnCreateGoodsReviewList = function(result) {
+
+		let tag = '';
+		$.each(result.dataList, function(idx, item) {
+			$('#goodsReviewForm').find('.nodata').hide();
+			tag += '<li>\n';
+			tag += '<div class="review">\n';
+			tag += '	<div class="info_box">\n';
+			tag += '		<div class="star_score">\n';
+			tag += '			<span class="star">\n';
+			tag += '				<em class="progbar" style="width:'+(item.score*20)+'%;"></em>\n'; //<!-- 평점 style로 표기 -->
+			tag += '			</span>\n';
+			tag += '		</div>\n';
+			tag += '		<div class="writer">\n';
+			tag += '			<span class="wr_id">'+ item.maskingCustId +'</span>\n';
+			tag += '			<span class="wr_date">' + item.regDt + '</span>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="response_box">\n';
+			tag += '		<div>\n';
+			tag += '			<dl>\n';
+			tag += '				<div>\n';
+			tag += '					<dt>구매옵션</dt>\n';
+			if (item.goodsOptionList != null && item.goodsOptionList.length > 0){
+				$.each(item.goodsOptionList, function(gIdx, goodsOption){
+			tag += '					<dd>'+ goodsOption.optCd1 +' / '+ goodsOption.optCd2 +'</dd>\n';		
+				});
+			}
+			tag += '				</div>\n';
+			tag += '				<div>\n';
+			tag += '					<dt>키/몸무게</dt>\n';
+			tag += '					<dd>'+ item.height +'cm/'+ item.weight +'kg</dd>\n';
+			tag += '				</div>\n';
+			tag += '			</dl>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="photo_box">\n';
+			tag += '		<div class="photo_list">\n';
+			tag += '			<ul>\n';
+			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="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+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';		
+				});	
+			}
+			tag += '			</ul>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="txt_review_box">\n';
+			tag += '		<p>' + item.reviewContent.replaceAll("\n", "</br>") +'</p>\n';
+			tag += '	</div>\n';
+			
+			tag += '	<div class="response_box2">\n';
+			tag += '		<div>\n';
+			tag += '			<dl>\n';
+			if (!gagajf.isNull(item.sizeGb) ){	// 사이즈구분값이 있을경우 노출
+				tag += '				<div>\n';
+				tag += '					<dt>사이즈</dt>\n';
+				tag += '					<dd>'+ item.scoreSizeNm +'</dd>\n';
+				tag += '				</div>\n';
+				tag += '				<div>\n';
+				tag += '					<dt>컬러</dt>\n';
+				tag += '					<dd>'+ item.scoreColorNm +'</dd>\n';
+				tag += '				</div>\n';
+			if (item.sizeGb == 'T' || item.sizeGb == 'B'){
+				tag += '				<div>\n';
+				tag += '					<dt>핏</dt>\n';
+				tag += '					<dd>'+ item.scoreFitNm +'</dd>\n';
+				tag += '				</div>\n';
+				tag += '				<div>\n';
+				tag += '					<dt>두께감</dt>\n';
+				tag += '					<dd>'+ item.scoreThickNm +'</dd>\n';
+				tag += '				</div>\n';	
+			}
+			if (item.sizeGb == 'S' ){
+				tag += '				<div>\n';
+				tag += '					<dt>무게감</dt>\n';
+				tag += '					<dd>'+ item.scoreWeightNm +'</dd>\n';
+				tag += '				</div>\n';
+				tag += '				<div>\n';
+				tag += '					<dt>볼너비</dt>\n';
+				tag += '					<dd>'+ item.scoreBallNm +'</dd>\n';
+				tag += '				</div>\n';	
+			}
+			}
+			tag += '			</dl>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			if (!gagajf.isNull(item.admRpl)){
+				tag += '	<div class="reply_box">\n';
+				tag += '		<div class="reply">\n';
+				tag += '			<div class="reply_writer">\n';
+				tag += '				<span class="wr_name">관리자</span>\n';
+				tag += '				<span class="wr_date">'+item.admRplDt+'</span>\n';
+				tag += '			</div>\n';
+				tag += '			<div class="reply_txt">\n';
+				tag += '				<p>' + item.admRpl.replaceAll("\n", "</br>")+'</p>\n';
+				tag += '			</div>\n';
+				tag += '		</div>\n';
+				tag += '	</div>\n';	
+			}
+			tag += '</div>\n';
+			tag += '</li>\n';
+			
+		});
+		return tag;
+	}
+	
+	// 인피니트 스크롤 초기화
+	var fnGoodsReviewInfiniteScrollInit = function(){
+		 sessionStorage.removeItem(document.location.href);
+		//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 = {};
+			}
+			fnGoodsReviewListSearch();
+		}else{
+			fnGoodsReviewInfiniteScrollInit();
+			fnGoodsReviewListSearch();
+		}
+
+	});
+	
+	// 상품평 초기화
+	var fnReviewSearchInit = function(){
+		
+		$('#goodsReviewForm').find('.select_custom.sort_opt1').find('.list li').eq(0).trigger('click')
+		$('#goodsReviewForm').find('.select_custom.sort_opt2').find('.list li').eq(0).trigger('click')
+		$('#goodsReviewForm').find('.select_custom.sort_opt3').find('.list li').eq(0).trigger('click')
+		$('#goodsReviewForm').find('.select_custom.sort_opt4').find('.list li').eq(0).trigger('click')
+		
+		$('#goodsReviewForm input[name=reviewScore]').val('');
+		$('#goodsReviewForm input[name=reviewOption]').val('');
+		$('#goodsReviewForm input[name=reviewHeight]').val('');
+		$('#goodsReviewForm input[name=reviewWeight]').val('');
+		
+		fnGetList();
+	}
+	
+	var fnReviewCateClose = function(){
+		$(".pd_review .category_box").hide();
+	}
+	
+	$(document).ready( function() {
+
+		//슬라이드 - 베스트리뷰
+		var riviewSwiper = new Swiper('.riview_box .area_slider .swiper-container', {
+			observer: true,
+			observeParents: true,
+			slidesPerView: 1,
+			spaceBetween: 8,
+			loop: true,
+			pagination: {
+				el: '.swiper-pagination',
+				type: 'fraction',
+			},
+		});	
+		
+		fnGoodsReviewListSearch();
+		
+	});
+	
+/*]]>*/
+</script>
+ </html>

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

@@ -27,7 +27,7 @@
 				<div class="swiper-slide" th:each="goodsInfo, status : ${goodsList}">
 					<div class="item_prod">
 						<div class="item_state">
-							<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>
+							<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'}+'\';'">

+ 63 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewFormMob.html

@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewFormMob.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">
+	<div class="modal-content">
+		<div class="modal-header">
+			<!-- 해당상품 -->
+			<div class="item_blk">
+				<div class="item_prod" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+					<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'}+'\';'">
+							</div>
+							<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA</p>
+							<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성</div>
+						</a>
+					</div>
+				</div>
+			</div>
+			<!-- //해당상품 -->
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont" id="goodsDealReview">
+			</div>
+		</div>
+	</div>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_goods_review')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	// 구성 상품 상세 상품평
+	var fnGoodsDetailReview = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/review/frame", "html", "goodsDealReview", params);
+	}
+	
+	$(document).ready( function() {
+
+		// 상품평정보 
+		var params = new Object();
+		let goodsCd = [[${goodsInfo.goodsCd}]]
+		params.goodsCd = goodsCd;
+		fnGoodsDetailReview(params);  // ajax html
+		
+	});
+	
+/*]]>*/
+</script>	
+ </html>

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

@@ -15,7 +15,7 @@
  *******************************************************************************
  -->
 <!-- 상품리뷰 리스트 내용 -->
- <div class="pd_review">
+ <div class="pd_review" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<!-- 등록리뷰 없을 시 -->
 	<div class="area_rv_empty" th:if="${reviewList == null or reviewList.empty}">
 		<div class="txt_box">
@@ -339,10 +339,9 @@
 					</th:block>
 					</th:block>
 				</li>
-				
 			</ul>
 			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
-			<th:block th:if="${#lists.size(photoReviewList) >= 1}"> <!-- 나중에 8로 수정 -->
+			<th:block th:if="${#lists.size(photoReviewList) >= 8}"> <!-- 나중에 8로 수정 -->
 			<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])" ><span>더 보기</span></button>
 			<!-- //포토영상 게시글 최대 7개 & 버튼노출 -->
 			</th:block>
@@ -351,7 +350,7 @@
 	<div class="area_rv_all">
 	<form id="goodsReviewForm" name="goodsReviewForm" 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="goodsCd" th:value ="${goodsInfo.goodsCd}"/>
 	<input type="hidden" name="goodsType" th:value ="${goodsInfo.goodsType}"/>
 	<input type="hidden" name="reviewScore" />
@@ -365,7 +364,7 @@
 				<div class="select_custom sort_opt1">
 					<div class="combo">
 						<div class="select">평점 전체<input type="hidden" name="selScore" value=""/></div>
-						<ul class="list" onclick="jfReviewSearch();" >
+						<ul class="list" onclick="fnReviewSearch();" >
 							<!-- 선택처리 class="selected" -->
 							<li class="selected" >평점 전체<input type="hidden" name="selScore" value=""/></li> 
 							<li>5점&nbsp;&starf;&starf;&starf;&starf;&starf;<input type="hidden" name="selScore" value="5"/></li>
@@ -384,12 +383,12 @@
 						<th:block th:unless="${(goodsInfo.selfGoodsYn == 'Y')}">
 						<div class="select">옵션 전체<input type="hidden" name="selOption" value=""/></div>
 						</th:block>
-						<ul class="list" onclick="jfReviewSearch();">
+						<ul class="list" onclick="fnReviewSearch();">
 							<!-- 선택처리 class="selected" -->
 							<li class="selected" th:text="${(goodsInfo.selfGoodsYn == 'Y')? '사이즈 전체' :'옵션 전체'}">사이즈 전체</li> 
 							<li th:each="reviewOption, status : ${reviewOptionList}" >
-							<th:block th:text="${reviewOption.optCd2}"></th:block>
-							<input type="hidden" name="selOption" th:value="${reviewOption.optCd2}"/>
+							<th:block th:text="${reviewOption.optCd}"></th:block>
+							<input type="hidden" name="selOption" th:value="${reviewOption.optCd}"/>
 							</li>
 						</ul>
 					</div>
@@ -397,7 +396,7 @@
 				<div class="select_custom sort_opt3" th:if="${reviewHeightList != null and !reviewHeightList.empty}">
 					<div class="combo">
 						<div class="select">키 전체<input type="hidden" name="selHeight" value=""/></div>
-						<ul class="list" onclick="jfReviewSearch();">
+						<ul class="list" onclick="fnReviewSearch();">
 							<!-- 선택처리 class="selected" -->
 							<li class="selected">키 전체<input type="hidden" name="selHeight" value=""/></li> 
 							<li th:each="reviewHeight, status : ${reviewHeightList}" >
@@ -410,7 +409,7 @@
 				<div class="select_custom sort_opt4" th:if="${reviewWeightList != null and !reviewWeightList.empty}">
 					<div class="combo">
 						<div class="select">몸무게 전체<input type="hidden" name="selWeight" value=""/></div>
-						<ul class="list" onclick="jfReviewSearch();">
+						<ul class="list" onclick="fnReviewSearch();">
 							<!-- 선택처리 class="selected" -->
 							<li class="selected">몸무게 전체<input type="hidden" name="selWeight" value=""/></li> 
 							<li th:each="reviewWeight, status : ${reviewWeightList}" >
@@ -442,7 +441,7 @@
 				</p>
 			</div>
 			<div class="btn_box" th:if="${reviewCount> 0}">
-				<button type="button" class="btn btn_default" onclick="jfReviewSearchInit();"><span>선택한 조건 초기화</span></button>
+				<button type="button" class="btn btn_default" onclick="fnReviewSearchInit();"><span>선택한 조건 초기화</span></button>
 			</div>
 		</div>
 		<!-- //나열조건결과 없을 때 노출 내용 -->
@@ -591,7 +590,7 @@
 	}
 	
 	// 상품평 검색조건 클릭시
-	var jfReviewSearch = function(){
+	var fnReviewSearch = function(){
 		let reviewScore = $('#goodsReviewForm').find('.select_custom.sort_opt1').find('.select input[name=selScore]').val();
 		let reviewOption = $('#goodsReviewForm').find('.select_custom.sort_opt2').find('.select input[name=selOption]').val();
 		let reviewHeight = $('#goodsReviewForm').find('.select_custom.sort_opt3').find('.select input[name=selHeight]').val();
@@ -618,7 +617,7 @@
 	}
 	
 	// 상품평 초기화
-	var jfReviewSearchInit = function(){
+	var fnReviewSearchInit = function(){
 		
 		$('#goodsReviewForm').find('.select_custom.sort_opt1').find('.list li').eq(0).trigger('click')
 		$('#goodsReviewForm').find('.select_custom.sort_opt2').find('.list li').eq(0).trigger('click')

+ 10 - 3
src/main/webapp/ux/style24_link.js

@@ -745,13 +745,20 @@ function cfGoodsDelivery(goodsCd) {
 function cfGoodsReview(goodsCd) {
 	var Param = new Object();
 	var str = '<div class="pd_pop full_pop pd_review_pop" id="layer_goods_review"></div>';
-
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_review_pop" id="layer_goods_review" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
 	if ($('#layer_goods_review').length == 0) {
 		$('body').append(str);
-		
+	}
+	
+	if ("P" == _frontGb){
+		cfOpenFullLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review',null , fnReviewLayerCollBack);
+	}else{
+		cfOpenLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review');
 	}
 
-	cfOpenFullLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review',null , fnReviewLayerCollBack);
+	
 }
 
 /**