Sfoglia il codice sorgente

상품상세 상품평

eskim 5 anni fa
parent
commit
0a60461ad0

+ 9 - 1
src/main/java/com/style24/front/biz/dao/TsfReviewDao.java

@@ -52,6 +52,14 @@ public interface TsfReviewDao {
 	 */
 	Collection<Goods> getReviewGoodsOptionList(Review review);
 	
-	
+	/**
+	 * 상품평 옵션 목록
+	 * @param review
+	 * @return 
+	 * @author eskim
+	 * @since 2021. 3. 19
+	 */
+	Collection<Goods> getReviewOptionList(String goodsCd);
+
 
 }

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

@@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.style24.front.biz.dao.TsfReviewDao;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Review;
 
 import lombok.extern.slf4j.Slf4j;
@@ -54,5 +55,15 @@ public class TsfReviewService {
 		return reviewList;
 	}
 	
+	/**
+	 * 상품평 옵션 목록
+	 * @param review
+	 * @return 
+	 * @author eskim
+	 * @since 2021. 3. 19
+	 */
+	public Collection<Goods> getReviewOptionList(String goodsCd) {
+		 return reviewDao.getReviewOptionList(goodsCd);
+	}
 	
 }

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

@@ -1,6 +1,7 @@
 package com.style24.front.biz.web;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 
 import org.apache.commons.lang3.StringUtils;
@@ -22,12 +23,14 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCounselService;
 import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfGoodsService;
+import com.style24.front.biz.service.TsfRendererService;
 import com.style24.front.biz.service.TsfReviewService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.CardPromotion;
+import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Counsel;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsStock;
@@ -76,6 +79,9 @@ public class TsfGoodsController extends TsfBaseController {
 	@Autowired
 	private TsfReviewService reviewService;
 
+	@Autowired
+	private TsfRendererService rendererService;
+	
 	@Value("${has-ssl}")
 	private String hasSsl;
 
@@ -235,6 +241,7 @@ public class TsfGoodsController extends TsfBaseController {
 				mav.setViewName(super.getDeviceViewName("goods/GoodsDetailForm"));
 			}
 		}
+		log.info("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||");
 		return mav;
 	}
 
@@ -622,27 +629,57 @@ 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());
 		mav.addObject("reviewList", reviewService.getReviewList(review));	// 전체상품평 유무 확인
-		
-		
 		review.setBestYn("Y");
 		review.setRownum(0);	// 전체 조회
 		mav.addObject("bestReviewList", reviewService.getReviewList(review));	//베스트상품평
-		
 		review.setPhotoYn("Y");
 		review.setBestYn("");
 		review.setRownum(0);	// 전체 조회
 		mav.addObject("photoReviewList", reviewService.getReviewList(review));	//포토상품평
-
+		
+		// 상품평에 등록된 사이즈 정보
+		mav.addObject("reviewOptionList", reviewService.getReviewOptionList(goods.getGoodsCd()));	
+		
+		// 유야동: 베이비(07), 키즈여아(08), 키즈남아(09), 키즈공통(10), 주니어여야(11), 주니어남아(12), 주니어공통(13), 성인G: 유아동 제외 전체
+		// 유야동 키 공통코드 G091, 성인 키 공통코드 G090
+		String[] arrItem = {"07","08","09","10","11","12","13"}; 
+		ArrayList<String>  itemList = new ArrayList<>(Arrays.asList(arrItem));
+		
+		// 키전체 
+		Collection<CommonCode> reviewHeightList = new ArrayList<CommonCode>();
+		log.info("goods.getItemkindCd().substring(0, 2) => {} ",goods.getItemkindCd().substring(0, 2) );
+		if (itemList.contains(goods.getItemkindCd().substring(0, 2))) {
+			reviewHeightList = rendererService.getAvailCommonCodeList("G091");
+		}else {
+			reviewHeightList = rendererService.getAvailCommonCodeList("G090");
+		}
+		
+		// 상품평 키
+		mav.addObject("reviewHeightList", reviewHeightList);
+		
+		// 유야동 몸무게 공통코드 G093, 성인 몸무게 공통코드 G092
+		// 몸무게
+		Collection<CommonCode> reviewWeightList = new ArrayList<CommonCode>();
+		if (itemList.contains(goods.getItemkindCd().substring(0, 2))) {
+			reviewWeightList = rendererService.getAvailCommonCodeList("G093");
+		}else {
+			reviewWeightList = rendererService.getAvailCommonCodeList("G092");
+		}
+		
+		// 상품평 몸무게
+		mav.addObject("reviewWeightList", reviewWeightList);
+		
 		mav.setViewName(super.getDeviceViewName("goods/GoodsReviewForm"));
 		return mav;
 	}
 	
 	/**
 	 * 상품평 목록
-	 * @param counsel - 상담정보
+	 * @param review
 	 * @return
 	 * @author eskim
 	 * @since 2021. 3. 16
@@ -671,35 +708,6 @@ public class TsfGoodsController extends TsfBaseController {
 		return result;
 	}
 
-	/**
-	 * 상품상세 -  상품평 - 베스트 레이어
-	 * @return
-	 * @author eskim
-	 * @since 2021. 3. 8
-	 */
-	@PostMapping("/review/best/layer/{goodsCd}")
-	public ModelAndView goodsReviewBestForm(@PathVariable String goodsCd) {
-		ModelAndView mav = new ModelAndView();
-		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
-		Goods paramsGoods = new Goods();
-		paramsGoods.setGoodsCd(goodsCd);
-		setGoods(paramsGoods);
-//		Goods goods = goodsService.getGoodsInfo(paramsGoods);
-//
-//		// 상품 기본정보
-//		mav.addObject("goodsInfo", goods);
-		
-		Review review = new Review();
-		review.setGoodsCd(paramsGoods.getGoodsCd());
-		review.setBestYn("Y");
-		mav.addObject("reviewList", reviewService.getReviewList(review));
-
-		mav.addObject("params", paramsGoods);
-		
-		mav.setViewName(super.getDeviceViewName("goods/GoodsReviewBestForm"));
-		return mav;
-	}
-
 	/**
 	 * 상품상세 -  상품평 - 포토/영상 리스트 레이어
 	 * @return
@@ -723,24 +731,27 @@ public class TsfGoodsController extends TsfBaseController {
 	}
 
 	/**
-	 * 상품상세 -  상품평 - 포토/영상 상세 레이어
+	 * 상품상세 -  상품평 상세 레이어
 	 * @return
 	 * @author eskim
 	 * @since 2021. 3. 8
 	 */
-	@PostMapping("/review/photo/detail/layer/{goodsCd}")
-	public ModelAndView goodsReviewPhotoDetailForm(@PathVariable String goodsCd) {
+	@GetMapping("/review/detail/layer")
+	public ModelAndView goodsReviewPhotoDetailForm(Review review) { 
+		log.info("goodsReviewPhotoDetailForm {}", review);
 		ModelAndView mav = new ModelAndView();
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		Goods paramsGoods = new Goods();
-		paramsGoods.setGoodsCd(goodsCd);
+		paramsGoods.setGoodsCd(review.getGoodsCd());
 		setGoods(paramsGoods);
-		Goods goods = goodsService.getGoodsInfo(paramsGoods);
+		// Goods goods = goodsService.getGoodsInfo(paramsGoods);
 
 		// 상품 기본정보
-		mav.addObject("goodsInfo", goods);
+		mav.addObject("params", paramsGoods);
+		
+		mav.addObject("reviewList", reviewService.getReviewList(review));
 
-		mav.setViewName(super.getDeviceViewName("goods/GoodsReviewPhotoDetailForm"));
+		mav.setViewName(super.getDeviceViewName("goods/GoodsReviewBestForm"));
 		return mav;
 	}
 

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

@@ -181,7 +181,7 @@
 		                      AND B.USE_YN = 'Y'
 		INNER JOIN TB_BRAND_GROUP D ON B.BRAND_GROUP_NO = D.BRAND_GROUP_NO
 		                            AND D.USE_YN = 'Y'
-		LEFT OUTER JOIN TB_DELV_FEE_POLICY E ON G.SUPPLY_COMP_CD = E.SUPPLY_COMP_CD
+		INNER JOIN TB_DELV_FEE_POLICY E ON G.SUPPLY_COMP_CD = E.SUPPLY_COMP_CD
 		                                     AND G.DELV_FEE_CD =  E.DELV_FEE_CD
 		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
@@ -622,6 +622,7 @@
 		FROM TB_GOODS_RES_SELL
 		WHERE GOODS_CD = #{goodsCd}
 		AND DELV_RES_DT > NOW()
+		AND USE_YN = 'Y'
 		ORDER BY DELV_RES_DT
 		LIMIT 1
 	</select>

+ 21 - 10
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -30,11 +30,6 @@
 		INNER JOIN TB_ORDER_DETAIL OD ON R.ORD_NO = OD.ORD_NO 
 		                              AND R.ORD_DTL_NO  = OD.ORD_DTL_NO
 		                              AND R.GOODS_CD = OD.GOODS_CD
-		INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_NO = ODI.ORD_NO 
-		                                    AND OD.ORD_DTL_NO  = ODI.ORD_DTL_NO
-		<if test='goodsType != null and goodsType != "G056_S" '>
-		                              AND OD.GOODS_CD = ODI.ITEM_CD 
-		</if>
 		INNER JOIN TB_CUSTOMER C ON R.REG_NO  = C.CUST_NO
 		AND R.GOODS_CD = #{goodsCd}
 		<if test='bestYn != null and bestYn == "Y"'>
@@ -93,18 +88,20 @@
 		     , C.CUST_ID 
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
 		     , (SELECT TI.SIZE_GB FROM TB_ITEMKIND TI WHERE TI.ITEMKIND_CD = G.ITEMKIND_CD) AS SIZE_GB
+		     <![CDATA[
+		     , (SELECT MAX(REVIEW_SQ) FROM TB_REVIEW WHERE REVIEW_SQ < #{reviewSq} AND GOODS_CD = R.GOODS_CD AND REVIEW_GB = 'P' AND DEL_YN = 'N') AS PREV_REVIEW_SQ
+		     , (SELECT MIN(REVIEW_SQ) FROM TB_REVIEW WHERE REVIEW_SQ > #{reviewSq} AND GOODS_CD = R.GOODS_CD AND REVIEW_GB = 'P' AND DEL_YN = 'N') AS NEXT_REVIEW_SQ
+		     ]]>
 		     , RANK() OVER(ORDER BY R.REVIEW_SQ DESC) AS RNUM
 		FROM TB_REVIEW R 
 		INNER JOIN TB_GOODS G ON R.GOODS_CD = G.GOODS_CD
 		INNER JOIN TB_ORDER_DETAIL OD ON R.ORD_NO = OD.ORD_NO 
 		                               AND R.ORD_DTL_NO  = OD.ORD_DTL_NO 
-		INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_NO = ODI.ORD_NO 
-		                                    AND OD.ORD_DTL_NO  = ODI.ORD_DTL_NO
-		<if test='goodsType != null and goodsType != "G056_S" '>
-		                              AND OD.GOODS_CD = ODI.ITEM_CD 
-		</if>
 		INNER JOIN TB_CUSTOMER C ON R.REG_NO  = C.CUST_NO
 		AND R.GOODS_CD = #{goodsCd}
+		<if test="reviewSq != null and reviewSq != ''" >
+		AND R.REVIEW_SQ = #{reviewSq}
+		</if>
 		<if test='bestYn != null and bestYn == "Y"'>
 		AND R.BEST_YN = 'Y'
 		</if>
@@ -155,5 +152,19 @@
 		WHERE R.REVIEW_SQ = #{reviewSq} 
 		AND R.GOODS_CD = #{goodsCd}
 	</select>
+	
+	<!-- 상품평 옵션 목록 -->
+	<select id="getReviewOptionList" parameterType="String" resultType="Goods">
+		/* TsfReivew.getReviewOptionList */
+		SELECT DISTINCT ODI.OPT_CD2
+		FROM TB_REVIEW R 
+		INNER JOIN TB_ORDER_DETAIL OD ON R.ORD_NO = OD.ORD_NO 
+		                              AND R.ORD_DTL_NO  = OD.ORD_DTL_NO
+		                              AND R.GOODS_CD  = OD.GOODS_CD 
+		INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_NO = ODI.ORD_NO 
+		                                    AND OD.ORD_DTL_NO  = ODI.ORD_DTL_NO
+		INNER JOIN TB_GOODS G ON ODI.ITEM_CD = G.GOODS_CD
+		WHERE R.GOODS_CD = #{goodsCd}
+	</select>
 
 </mapper>

+ 3 - 1
src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html

@@ -19,6 +19,7 @@
 	<meta property="og:locale" content="ko_KR"/>
 	<meta property="og:site_name" th:content="${metaBrowserTitle}" content="한세공식몰 스타일24"/>
 	
+	<!-- 추천솔루션 meta -->
 	<meta property="eg:cuid" content="" />
 	<meta property="eg:itemId" content="" />
 	<meta property="eg:itemName" content="" />
@@ -40,6 +41,7 @@
 	<meta property="eg:extraImage" content="" />
 	<meta property="eg:locale" content="" />
 	<meta property="eg:etc1" content="" />
+	<!-- 추천솔루션 meta -->
 	
 	<title th:text="${metaBrowserTitle}">한세공식몰 스타일24</title>
 	<link rel="icon" th:href="@{/images/favicon.ico}" href="favicon.ico" type="image/x-icon"/>
@@ -100,7 +102,7 @@
 		}
 		var eglqueueCuid = '1252aed4-78dc-46e8-b784-94ac42e86dd4';
 		var hCustId = gCustId ? hex_sha512(gCustId).toString().hashCode() : '';
-		var hEmail = gCustId ? hex_sha512(gEmail).toString().hashCode() : '';
+		var hEmail = gEmail;
 		
 		/* Eiengine Script (Visit) */
 		window._eglqueue = window._eglqueue || [];

+ 14 - 7
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -206,7 +206,7 @@
 												<ul class="list">
 													<li class="selected" id="selfNoGoodsOpt">선택</li> 
 													<th:block th:each="goodsOption, status : ${goodsOptionList}" >
-													<li th:attr="aria-disabled=${(goodsOption.soldoutYn == 'Y' or goodsOption.stockQty <= 0)? 'true':''}, data-soldout=${(goodsOption.soldoutYn == 'Y' or goodsOption.stockQty <= 0)? 'true':''}">
+													<li th:attr="aria-disabled=${(goodsOption.soldoutYn == 'Y' or goodsOption.stockQty <= 0)? 'true':''}, data-soldout=${(goodsOption.soldoutYn == 'Y' or goodsOption.stockQty <= 0)? 'true':''}" th:onclick="jfViewStock(this, [[${goodsInfo.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsOption.optCd}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]] )">
 														<div th:text="${goodsOption.optNm}">상품옵션</div>
 														<div th:if="${goodsOption.addPrice > 0}" th:text="|${#numbers.formatInteger(goodsOption.addPrice, 0,'COMMA')}원|">0원</div>
 														<input type="hidden" name="opt"  th:id="${goodsOption.optCd}" th:attr="addPrice=${goodsOption.addPrice}, optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
@@ -284,7 +284,7 @@
 										<!-- 베스트 리뷰 등록시 노출 -->
 										<div class="best_review" th:if="${bestReviewList != null and !bestReviewList.empty}">
 											<th:block th:each="bestReview, status : ${bestReviewList}" th:if="${status.first}">
-											<a href="javascript:void(0);" id="btn_pdBestReview_pop"  th:onclick="cfGoodsBestReview([[${goodsInfo.goodsCd}]])" >
+											<a href="javascript:void(0);" id="btn_pdBestReview_pop"  th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y',[[${bestReview.reviewSq}]])" >
 												<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 클래스 추가 -->
@@ -703,19 +703,26 @@
 	//사이즈 클릭시
 	var jfViewStock = function(obj, goodsCd, optCd1, optCd2,  minOrdQty, maxOrdQty) {
 		var $obj = $(obj);
-
-		var $target = $obj.parent().parent().children('input[name="opt"]');
-		$target.prop("checked",true);
+		var selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
+		var $target = null;
+		if (selfGoodsYn == "Y"){
+			$target = $obj.parent().parent().children('input[name="opt"]');
+			$target.prop("checked",true);
+			$("#selectOptCd1").html(optCd2);
+		}else{
+			$target = $obj.children('input[name="opt"]');
+			
+		}
 		var addPrice  = $target.attr("addPrice");
 		var optCd  = $target.attr("optCd");
-		$("#selectOptCd1").html(optCd2);
+		
 		if (Number(addPrice) > 0) $("#selectOptCd1addPrice").html("(+" + addPrice.addComma() + ")");
 		$("#cartForm  input[name=optCd]").val(optCd);
 		$("#cartForm  input[name=optCd1]").val(optCd1);
 		$("#cartForm  input[name=optCd2]").val(optCd2);
 		$("#cartForm  input[name=addPrice]").val(addPrice);
 		$("#cartForm  input[name=ordQty]").val("");
-		var selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
+		
 
 		var maxCnt = maxOrdQty;
 		var params = new Object();

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

@@ -329,8 +329,7 @@
 										</th:block>
 									</div>
 									<div class="pic" th:unless="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
-										<span class="thumb">
-										<img th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" alt="">
+										<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+');'}">
 										</span>
 									</div>
 									<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">
@@ -357,7 +356,7 @@
 							<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="cfGoodsReviewPhotoDetail([[${goodsInfo.goodsCd}]])">
+							<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]], '', [[${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>
@@ -377,84 +376,76 @@
 			<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="pageSize" value ="1"/>
 			<input type="hidden" name="goodsCd" th:value ="${goodsInfo.goodsCd}"/>
 			<input type="hidden" name="goodsType" th:value ="${goodsInfo.goodsType}"/>
-				<h6>전체리뷰<span>(9,999+)</span></h6>
+				<h6>전체리뷰<span>(<span id="reviewCount" th:text="${(reviewCount <= 9999) ? #numbers.formatInteger(reviewCount, 0,'COMMA') : '9,999+'}">9,999+</span>)</span></h6>
 				<div class="selection">
-					<form class="form_wrap">
-						<div class="form_field">
-							<div class="select_custom sort_opt1">
-								<div class="combo">
-									<div class="select">평점 전체</div>
-									<ul class="list">
-										<!-- 선택처리 class="selected" -->
-										<li class="selected">평점 전체</li> 
-										<li>5점&nbsp;&starf;&starf;&starf;&starf;&starf;</li>
-										<li>4점&nbsp;&starf;&starf;&starf;&starf;</li>
-										<li>3점&nbsp;&starf;&starf;&starf;</li>
-										<li>2점&nbsp;&starf;&starf;</li>
-										<li>1점&nbsp;&starf;</li>
-									</ul>
-								</div>
+					<div class="form_field">
+						<div class="select_custom sort_opt1">
+							<div class="combo">
+								<div class="select">평점 전체</div>
+								<ul class="list" onclick="jfReviewSearch();" >
+									<!-- 선택처리 class="selected" -->
+									<li class="selected" >평점 전체<input type="hidden" name="reviewScore" value=""/></li> 
+									<li>5점&nbsp;&starf;&starf;&starf;&starf;&starf;<input type="hidden" name="reviewScore" value="5"/></li>
+									<li>4점&nbsp;&starf;&starf;&starf;&starf;<input type="hidden" name="reviewScore" value="4" scoreId="4"/></li>
+									<li>3점&nbsp;&starf;&starf;&starf;<input type="hidden" name="reviewScore" value="3"/></li>
+									<li>2점&nbsp;&starf;&starf;<input type="hidden" name="reviewScore" value="2"/></li>
+									<li>1점&nbsp;&starf;<input type="hidden" name="reviewScore" value="1"/></li>
+								</ul>
 							</div>
-							<div class="select_custom sort_opt2">
-								<div class="combo">
-									<div class="select" th:text="${(goodsInfo.selfGoodsYn == 'Y')? '사이즈 전체' :'옵션 전체'}">사이즈 전체</div>
-									<ul class="list">
-										<!-- 선택처리 class="selected" -->
-										<li class="selected" th:text="${(goodsInfo.selfGoodsYn == 'Y')? '사이즈 전체' :'옵션 전체'}">사이즈 전체</li> 
-										<li>90</li>
-										<li>95</li>
-										<li>100</li>
-										<li>105</li>
-										<li>110</li>
-									</ul>
-								</div>
+						</div>
+						<div class="select_custom sort_opt2" th:if="${reviewOptionList != null and !reviewOptionList.empty}">
+							<div class="combo">
+								<th:block th:if="${(goodsInfo.selfGoodsYn == 'Y')}">
+								<div class="select">사이즈 전체<input type="hidden" name="reviewOption" value=""/></div>
+								</th:block>
+								<th:block th:unless="${(goodsInfo.selfGoodsYn == 'Y')}">
+								<div class="select">옵션 전체<input type="hidden" name="reviewOption" value=""/></div>
+								</th:block>
+								<ul class="list">
+									<!-- 선택처리 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="reviewOption" th:value="${reviewOption.optCd2}"/>
+									</li>
+								</ul>
 							</div>
-							<div class="select_custom sort_opt3">
-								<div class="combo">
-									<div class="select">키 전체</div>
-									<ul class="list">
-										<!-- 선택처리 class="selected" -->
-										<li class="selected">키 전체</li> 
-										<li>150cm 이하</li>
-										<li>150~155cm</li>
-										<li>155~160cm</li>
-										<li>160~165cm</li>
-										<li>165~170cm</li>
-										<li>175~180cm</li>
-										<li>185~190cm</li>
-										<li>190~200cm</li>
-									</ul>
-								</div>
+						</div>
+						<div class="select_custom sort_opt3" th:if="${reviewHeightList != null and !reviewHeightList.empty}">
+							<div class="combo">
+								<div class="select">키 전체<input type="hidden" name="reviewHeight" value=""/></div>
+								<ul class="list">
+									<!-- 선택처리 class="selected" -->
+									<li class="selected">키 전체<input type="hidden" name="reviewHeight" value=""/></li> 
+									<li th:each="reviewHeight, status : ${reviewHeightList}" >
+									<th:block th:text="${reviewHeight.cdNm}"></th:block>
+									<input type="hidden" name="reviewHeight" th:value="${reviewHeight.cd}"/>
+									</li>
+								</ul>
 							</div>
-							<div class="select_custom sort_opt4">
-								<div class="combo">
-									<div class="select">몸무게 전체</div>
-									<ul class="list">
-										<!-- 선택처리 class="selected" -->
-										<li class="selected">몸무게 전체</li> 
-										<li>40kg 이하</li>
-										<li>40~45kg</li>
-										<li>45~50kg</li>
-										<li>50~55kg</li>
-										<li>55~60kg</li>
-										<li>60~65kg</li>
-										<li>65~70kg</li>
-										<li>75~80kg</li>
-										<li>85~85kg</li>
-										<li>90~95kg</li>
-									</ul>
-								</div>
+						</div>
+						<div class="select_custom sort_opt4" th:if="${reviewWeightList != null and !reviewWeightList.empty}">
+							<div class="combo">
+								<div class="select">몸무게 전체<input type="hidden" name="reviewWeight" value=""/></div>
+								<ul class="list">
+									<!-- 선택처리 class="selected" -->
+									<li class="selected">몸무게 전체<input type="hidden" name="reviewWeight" value=""/></li> 
+									<li th:each="reviewWeight, status : ${reviewWeightList}" >
+									<th:block th:text="${reviewWeight.cdNm}"></th:block>
+									<input type="hidden" name="reviewWeight" th:value="${reviewWeight.cd}"/>
+									</li>
+									
+								</ul>
 							</div>
-						</div>				
-					</form>
+						</div>
+					</div>
 				</div>
 				<!-- 나열조건결과 있을 때 노출 내용 -->
 				<div class="review_list">
 					<ul  id="ulGoodsReviewQna">
-						
 					</ul>
 				</div>
 				<div class="ui_row">
@@ -492,7 +483,7 @@
 			$('#goodsReviewForm  input[name="secretYn"]').val('N');
 		} */
 		// Initialize a pagination
-		gagaPaging.init('goodsReviewForm', fnGetListCallback, 'pageNav', 20);
+		gagaPaging.init('goodsReviewForm', fnGetListCallback, 'pageNav', 1);
 
 		// Load data
 		gagaPaging.load(1);
@@ -510,7 +501,7 @@
 				tag += '	<div class="info_box">\n';
 				tag += '		<div class="star_score">\n';
 				tag += '			<span class="star">\n';
-				tag += '				<em class="progbar" style="width:70%;"></em>\n'; //<!-- 평점 style로 표기 -->
+				tag += '				<em class="progbar" style="width:'+(item.score*20)+'%;"></em>\n'; //<!-- 평점 style로 표기 -->
 				tag += '			</span>\n';
 				tag += '		</div>\n';
 				tag += '		<div class="writer">\n';
@@ -523,7 +514,11 @@
 				tag += '			<dl>\n';
 				tag += '				<div>\n';
 				tag += '					<dt>구매옵션</dt>\n';
-				tag += '					<dd>'+ item.optCd1 +' / '+ item.optCd2 +'</dd>\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 += '			</dl>\n';
 				tag += '		</div>\n';
@@ -533,7 +528,7 @@
 				tag += '					<dt>키/몸무게</dt>\n';
 				tag += '					<dd>'+ item.height +'cm/'+ item.weight +'kg</dd>\n';
 				tag += '				</div>\n';
-				if (!gagajf.isNuil(item.sizeGb) ){	// 사이즈구분값이 있을경우 노출
+				if (!gagajf.isNull(item.sizeGb) ){	// 사이즈구분값이 있을경우 노출
 					tag += '				<div>\n';
 					tag += '					<dt>사이즈</dt>\n';
 					tag += '					<dd>'+ item.scoreSizeNm +'</dd>\n';
@@ -570,19 +565,24 @@
 				tag += '		<div class="photo_list">\n';
 				tag += '			<ul>\n';
 				if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
-					tag += '				<li>\n';
-					tag += '					<a href="">\n';
-					tag += '						<div class="pic">\n';
-					tag += '							<span class="thumb mov" style="background-image:url(\'/images/pc/thumb/tmp_pdLookbook3.jpg\');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-					tag += '						</div>\n';
-					tag += '					</a>\n';
-					tag += '				</li>\n';
+					var fileGbClass = '';
+					$.each(item.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach == "M") fileGbClass = "mov";
+				tag += '				<li>\n';
+				tag += '					<a href="javascript:void();" onclick="cfGoodsBestReview(\''+item.goodsCd+'\');">\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 '+</p>\n';
+				tag += '		<p>' + item.reviewContent +'</p>\n';
 				tag += '	</div>\n';
 				if (!gagajf.isNull(item.admRpl)){
 					tag += '	<div class="reply_box">\n';
@@ -611,6 +611,12 @@
 		gagaPaging.createPagination(result.paging.pageable);
 	}
 	
+	var jfReviewSearch = function(obj){
+		debugger;
+		$obj = $(obj);
+		
+	}
+	
 	$(document).ready( function() {
 
 		var sort_selecter01 = new sCombo('.area_rv_all .selection .select_custom.sort_opt1');

+ 12 - 25
src/main/webapp/ux/style24_link.js

@@ -34,9 +34,8 @@ const _PAGE_GOODS_QNA_LAYER = _frontUrl + "/goods/qna/layer/";										// 상
 const _PAGE_GOODS_QNA_CREATE_LAYER = _frontUrl + "/goods/qna/create/layer/";						// 상품문의레이어
 const _PAGE_GOODS_DELIVERY_LAYER = _frontUrl + "/goods/delivery/layer/";							// 배송/교환/반품 레이어
 const _PAGE_GOODS_REVIEW_LAYER = _frontUrl + "/goods/review/layer/";								// 상품평 레이어
-const _PAGE_GOODS_REVIEW_BEST_LAYER = _frontUrl + "/goods/review/best/layer/";						// 상품평- 베스트 리뷰 (list)
-const _PAGE_GOODS_REVIEW_PHOTO_LAYER = _frontUrl + "/goods/review/photo/layer/";					// 상품평- 포토/영상 리뷰 (list)
-const _PAGE_GOODS_REVIEW_PHOTO_DETAIL_LAYER = _frontUrl + "/goods/review/photo/detail/layer/";		// 상품평- 포토/영상 리뷰 (detail)
+const _PAGE_GOODS_REVIEW_DETAIL_LAYER = _frontUrl + "/goods/review/detail/layer";					// 상품평- 상세(베스트, 포토)
+const _PAGE_GOODS_REVIEW_PHTO_LIST_LAYER = _frontUrl + "/goods/review/photo/layer/";				// 상품평- 포토/영상 리뷰 (list)
 const _PAGE_GOODS_CPN_DOWNLOAD = "/goods/coupon/download";											// 상품쿠폰다운로드
 
 //== 장바구니 ==/
@@ -228,6 +227,8 @@ function cfnAddCart(cartList) {
 						location.href='/cart/list/form'; 	//내 쇼핑백 이동url
 					}
 				});
+			}else{
+				location.href='/cart/list/form'; 
 			}
 		}
 	});
@@ -509,14 +510,18 @@ function cfGoodsInstockAlarmInfo(goodsCd, colorCd) {
 *		cfGoodsBestReviewInfo(goodsCd);
 * </pre>
 */
-function cfGoodsBestReview(goodsCd) {
+function cfGoodsReviewDetail(goodsCd, bestYn, reviewSq) {
 	var str = '<div class="modal fade pd_pop pd_bestreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
 
 	if ($('#layer_review_best').length == 0) {
 		$('body').append(str);
 	}
-
-	cfOpenLayer(_PAGE_GOODS_REVIEW_BEST_LAYER+goodsCd, 'layer_review_best');
+	
+	var params = new Object();
+	params.goodsCd = goodsCd;
+	params.bestYn = bestYn;
+	params.reviewSq = reviewSq;
+	cfOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER, 'layer_review_best' ,params );
 }
 
 /**
@@ -534,25 +539,7 @@ function cfGoodsReviewPhoto(goodsCd) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_GOODS_REVIEW_PHOTO_LAYER+goodsCd, 'layer_review_photo');
-}
-
-/**
-* @type   : function
-* @access : public
-* @desc   : 상품평- 포토/영상 리뷰 상세 보기
-* <pre>
-*		cfGoodsPhotoReviewDetail(goodsCd);
-* </pre>
-*/
-function cfGoodsReviewPhotoDetail(goodsCd) {
-	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_photo_detail" tabindex="-1" role="dialog" aria-labelledby="pdPhotoReviewDetailLabel" aria-hidden="true"></div>';
-
-	if ($('#layer_review_photo_detail').length == 0) {
-		$('body').append(str);
-	}
-
-	cfOpenLayer(_PAGE_GOODS_REVIEW_PHOTO_DETAIL_LAYER+goodsCd, 'layer_review_photo_detail');
+	cfOpenLayer(_PAGE_GOODS_REVIEW_PHTO_LIST_LAYER+goodsCd, 'layer_review_photo');
 }
 
 /**