Просмотр исходного кода

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.front.git into develop

gagamel 5 лет назад
Родитель
Сommit
dbb28028d4
25 измененных файлов с 1561 добавлено и 354 удалено
  1. 18 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 1 1
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  3. 22 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  4. 40 5
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  5. 40 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  6. 7 3
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  7. 7 0
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  8. 24 0
      src/main/java/com/style24/persistence/domain/Review.java
  9. 45 11
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  10. 0 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  11. 336 143
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  12. 25 135
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  13. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  14. 845 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  15. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  16. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  17. 63 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewFormMob.html
  18. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  19. 1 1
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  20. 20 6
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  21. 17 22
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  22. 12 13
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  23. 10 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  24. 13 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  25. 11 4
      src/main/webapp/ux/style24_link.js

+ 18 - 0
src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -153,4 +153,22 @@ public interface TsfDisplayDao {
 	 * @date 2021. 4. 5
 	 */
 	Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch);
+
+	/**
+	 * 상품카테고리 필터 혜택 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch);
+
+	/**
+	 * 카테고리 별 상품 수
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	int getCategoryGoodsCount(GoodsSearch goodsSearch);
 }

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

@@ -95,7 +95,7 @@ public interface TsfReviewDao {
 	 * @author sowon
 	 * @since 2021. 3. 25
 	 */
-	Goods getReviewGoodsInfo(Review review);
+	Review getReviewGoodsInfo(Review review);
 	
 	/**
 	 * 마이페이지 리뷰 등록

+ 22 - 0
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -336,4 +336,26 @@ public class TsfDisplayService {
 		return displayDao.getCategoryFilter(cate4Srch);
 	}
 
+	/**
+	 * 상품카테고리 필터 혜택 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch){
+		return displayDao.getCategoryFilterBenefit(cate4Srch);
+	}
+
+	/**
+	 * 카테고리 별 상품 수
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	public int getCategoryGoodsCount(GoodsSearch goodsSearch){
+	return displayDao.getCategoryGoodsCount(goodsSearch);
+	}
+
 }

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

@@ -7,9 +7,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.front.biz.dao.TsfReviewDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Review;
 
 import lombok.extern.slf4j.Slf4j;
@@ -68,9 +70,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;
 	}
@@ -94,7 +96,26 @@ public class TsfReviewService {
 	 * @since 2021. 3. 25
 	 */
 	public Collection<Review> getCompleteReviewList(Review review){
-		return reviewDao.getCompleteReviewList(review);
+		Collection<Review> reviewList = new ArrayList<>();
+		
+		for (Review tmpReview : reviewDao.getCompleteReviewList(review)) {
+			// 세트상품 옵션별 배열로 담기
+			if (tmpReview.getItemNm().contains("!@!")) {
+				tmpReview.setItemNmArr(tmpReview.getItemNm().split("!@!"));
+				tmpReview.setColorNmArr(tmpReview.getColorNm().split(","));
+				tmpReview.setOptCd1Arr(tmpReview.getOptCd1().split(","));
+				tmpReview.setOptCd2Arr(tmpReview.getOptCd2().split(","));
+			} else {
+				String[] arr = {tmpReview.getItemNm()}, arr2 = {tmpReview.getColorNm()}, arr3 = {tmpReview.getOptCd1()}, arr4 = {tmpReview.getOptCd2()};
+				tmpReview.setItemNmArr(arr);
+				tmpReview.setColorNmArr(arr2);
+				tmpReview.setOptCd1Arr(arr3);
+				tmpReview.setOptCd2Arr(arr4);
+			}
+			reviewList.add(tmpReview);
+		}
+		
+		return reviewList;
 	}
 	
 	/**
@@ -104,8 +125,22 @@ public class TsfReviewService {
 	 * @author sowon
 	 * @since 2021. 3. 25
 	 */
-	public Goods getReviewGoodsInfo(Review review){
-		return reviewDao.getReviewGoodsInfo(review);
+	public Review getReviewGoodsInfo(Review review){
+		Review tmpReview = reviewDao.getReviewGoodsInfo(review);
+		// 세트상품 옵션별 배열로 담기
+		if (tmpReview.getItemNm().contains("!@!")) {
+			tmpReview.setItemNmArr(tmpReview.getItemNm().split("!@!"));
+			tmpReview.setColorNmArr(tmpReview.getColorNm().split(","));
+			tmpReview.setOptCd1Arr(tmpReview.getOptCd1().split(","));
+			tmpReview.setOptCd2Arr(tmpReview.getOptCd2().split(","));
+		} else {
+			String[] arr = {tmpReview.getItemNm()}, arr2 = {tmpReview.getColorNm()}, arr3 = {tmpReview.getOptCd1()}, arr4 = {tmpReview.getOptCd2()};
+			tmpReview.setItemNmArr(arr);
+			tmpReview.setColorNmArr(arr2);
+			tmpReview.setOptCd1Arr(arr3);
+			tmpReview.setOptCd2Arr(arr4);
+		}
+		return tmpReview;
 	}
 	
 	/**

+ 40 - 0
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -7,11 +7,13 @@ import java.util.HashMap;
 
 import javax.servlet.http.HttpServletResponse;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.support.env.TscConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -27,6 +29,7 @@ import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.biz.service.TsfSocialService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.BrandGroup;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
@@ -473,8 +476,45 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("filterSeasonList", displayService.getCategoryFilter(cate4Srch, "SEASON"));
 		mav.addObject("filterColorList", displayService.getCategoryFilter(cate4Srch, "COLOR"));
 		mav.addObject("filterBenefitList", displayService.getCategoryFilter(cate4Srch, "BENEFIT"));
+		//mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
 		mav.addObject("cateInfo", cate4Srch);
 
 		return mav;
 	}
+
+	/**
+	 * 카테고리 상품 리스트 조회
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 7
+	 */
+	@PostMapping("/category/goods/list")
+	@ResponseBody
+	public GagaMap getGoodsList(GoodsSearch goodsSearch){
+		GagaMap result = new GagaMap();
+		TscPageRequest pageable = new TscPageRequest((goodsSearch.getPageNo() > 0 ? goodsSearch.getPageNo() - 1 : 0), goodsSearch.getPageSize(), goodsSearch.getPageUnit());
+
+		goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
+		goodsSearch.setFormalGb("G009_10");
+		goodsSearch.setFrontGb(TsfSession.getFrontGb());
+		goodsSearch.setCustGb(TsfSession.getCustGb());
+		if(goodsSearch.getBrandGroupNo()==null || goodsSearch.getBrandGroupNo().equals("")){
+			goodsSearch.setBrandGroupNo(0);
+		}
+		if(goodsSearch.getCate4No()!=null && !goodsSearch.getCate4No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate4No());
+		} else if(goodsSearch.getCate3No()!=null && !goodsSearch.getCate3No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate3No());
+		} else if(goodsSearch.getCate2No()!=null && !goodsSearch.getCate2No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate2No());
+		} else if(goodsSearch.getCate1No()!=null && !goodsSearch.getCate1No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate1No());
+		}
+
+		int totalCnt = displayService.getCategoryGoodsCount(goodsSearch);
+		log.info("totalCnt::::::::::{}",totalCnt);
+		pageable.setTotalCount(0);
+		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);	// 전체 조회

+ 7 - 0
src/main/java/com/style24/persistence/domain/GoodsSearch.java

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -57,4 +58,10 @@ public class GoodsSearch extends TscBaseDomain {
     private String  filterCd;
     private String  filterNm;
 
+    private TscPageRequest pageable;				// 페이징
+    private int pageNo;
+    private int pageSize;
+    private int pageUnit = 10;
+    private String sortGb;
+
 }

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

@@ -2,6 +2,7 @@ package com.style24.persistence.domain;
 
 import java.util.Collection;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
@@ -63,6 +64,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;		// 상품평 검색조건 평점
@@ -89,6 +91,28 @@ public class Review extends TscBaseDomain {
 	private String siteCd;
 	private String reviewStat;		// 리뷰상태(수정or등록)
 	
+	private String payDt;
+	private String brandEnm;
+	private String optCd1;
+	private String optCd2;
+	private String remainDt;
+	private String itemNm;
+	private String colorNm;	
+	
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] itemNmArr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCdArr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] colorNmArr;	// 컬러명
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCd1Arr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCd2Arr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] itemQtyArr;	// 구성상품번호
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	
 	// Masking
 	public String getMaskingCustId() {
 		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;

+ 45 - 11
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -594,21 +594,55 @@
 		SELECT
 		<choose>
 			<when test="filterGb != null and filterGb =='SIZE'">
-		       SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
+		SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
 			</when>
 			<otherwise>
-		       FILTER_CD
+		FILTER_CD
 			</otherwise>
 		</choose>
-			 , FILTER_NM
-		FROM	TB_CATE_FILTER
-		WHERE	1=1
-		  AND	SITE_CD = #{siteCd}
-		  AND 	CATE_GB = #{cateGb}
-		  AND 	FORMAL_GB = #{formalGb}
-		  AND 	BRAND_GROUP_NO = #{brandGroupNo}
-		  AND 	CATE_NO = #{cateNo}
-		  AND 	FILTER_GB = #{filterGb}
+		, FILTER_NM
+		FROM TB_CATE_FILTER
+		WHERE 1=1
+		AND SITE_CD = #{siteCd}
+		AND CATE_GB = #{cateGb}
+		AND FORMAL_GB = #{formalGb}
+		AND BRAND_GROUP_NO = #{brandGroupNo}
+		AND CATE_NO = #{cateNo}
+		AND FILTER_GB = #{filterGb}
 		ORDER BY DISP_ORD
 	</select>
+
+	<!-- 카테고리별 상품 총 수 -->
+	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
+		/* TsfDisplay.getCategoryGoodsCount */
+		SELECT COUNT(1) AS TOTCNT
+		FROM (SELECT A.GOODS_CD
+		           , A.CATE_NO
+		           , A.DISP_ORD
+		           , A.REG_NO
+		           , A.REG_DT
+		      FROM TB_CATE_GOODS A
+		      WHERE 1 = 1
+		        AND EXISTS(SELECT 1
+		                    FROM TB_CATE_4SRCH
+		                    WHERE 1 = 1
+		                      AND LEAF_CATE_NO = A.CATE_NO
+		                      AND CATE1_NO = #{cate1No}
+		                    <if test="cate2No != null and cate2No != ''">
+		                     AND CATE2_NO = #{cate2No}
+							</if>
+		                    <if test="cate3No != null and cate3No != ''">
+		                    AND CATE3_NO = #{cate3No}
+							</if>
+		                    <if test="cate4No != null and cate4No != ''">
+		                    AND CATE4_NO = #{cate4No}
+							</if>
+		                    <if test="cate5No != null and cate5No != ''">
+		                    AND CATE5_NO = #{cate5No}
+		                    </if>
+				  )
+		) A
+		   , TB_GOODS C
+		WHERE A.GOODS_CD = C.GOODS_CD
+	</select>
 </mapper>

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

@@ -962,7 +962,6 @@
 						</otherwise>
 					</choose>
 		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		            AND    G.FORMAL_GB = 'G009_10' /*정상상품*/
 		            AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
 		            AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
 		            AND    S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/

+ 336 - 143
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_CD2 = #{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_CD1 = #{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_CD2 = #{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_CD1 = #{reviewOption}
+		           )
+		    </otherwise>
+		</choose>
 		</if>
 		<if test="reviewHeight != null and reviewHeight != ''">
 		 <![CDATA[
@@ -310,152 +334,309 @@
 	</select>
 
 	<!-- 마이페이지 작성가능한 리뷰 -->
-	<select id="getCompleteReviewList" parameterType="Review" resultType="Goods">
+	<select id="getCompleteReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getCompleteReviewList */
-		SELECT F.*
-			  , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
-		FROM
-		(
-			SELECT O.ORD_NO 
-			      ,O.ORD_NM
-			      ,DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
-			      ,O.CUST_NO 
-			      ,OD.ORD_DTL_NO
-			      ,OD.ORD_EXCH_GB 
-			      ,OD.GOODS_CD 
-			      ,OD.REAL_ORD_AMT 
-			      ,OD.SAVE_PNT_AMT 
-			      ,OD.GFCD_USE_AMT 
-			      ,ODI.ORD_DTL_ITEM_SQ 
-			      ,ODI.ITEM_CD 
-			      ,ODI.OPT_CD 
-			      ,ODI.OPT_CD1
-			      ,ODI.OPT_CD2
-			      ,ODI.ITEM_QTY 
-			      ,ODI.ITEM_PRICE
-			      ,G.GOODS_NM 
-			      ,G.MAIN_COLOR_CD
-			      ,B.BRAND_ENM 
-			      ,I.ITEMKIND_NM 
-			      ,I.ITEMKIND_CD 
-			      ,I.SIZE_GB 
-			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
-			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
-								 			 	 AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
-			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
-			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-			                  	                 AND ODI.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60')
-			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
-			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
-			                LEFT JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD 
-			WHERE 1=1
-				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
+		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
+		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
+		     , Z.ORD_NO
+		     , Z.ORD_DT
+		     , Z.PAY_DT
+		     , Z.DELV_EDDT
+		     , Z.ORD_DTL_NO
+		     , Z.ORD_EXCH_GB
+		     , Z.GOODS_CD
+		     , Z.GOODS_NM
+		     , Z.LIST_PRICE
+		     , Z.GOODS_TYPE
+		     , Z.SYS_IMG_NM
+		     , Z.ORD_DTL_STAT
+		     , Z.ORD_QTY
+		     , Z.CNCL_RTN_QTY
+		     , Z.ORD_AMT
+		     , Z.REAL_ORD_AMT
+		     , Z.SAVE_PNT_AMT
+		     , Z.CNCL_RTN_AMT
+		     , Z.PNT_DC_AMT
+		     , Z.GFCD_USE_AMT
+		     , Z.INVOICE_NO
+		     , Z.SUPPLY_COMP_CD
+		     , Z.DELV_FEE_CD
+		     , Z.SHOT_DELV_YN
+		     , Z.CHANGEABLE_YN
+		     , Z.RETURNABLE_YN
+		     , Z.SELF_GOODS_YN
+		     , Z.BRAND_NM
+		     , Z.BRAND_ENM
+		     , Z.ORD_DTL_STAT_NM
+		     , Z.ORD_REQ_CHG_QTY
+		     , Z.ORD_CAN_CHG_QTY
+		     , Z.ITEMKIND_NM 
+		   	 , Z.ITEMKIND_CD 
+             , Z.SIZE_GB 
+             , Z.REMAIN_DT
+		  FROM (SELECT O.ORD_NO
+					 , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
+					 , DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
+					 , DATE_FORMAT(OD.DELV_EDDT, '%m/%d')								AS DELV_EDDT
+					 , OD.ORD_DTL_NO
+					 , OD.ORD_EXCH_GB
+					 , OD.GOODS_CD
+		             , OD.GIFT_ADDR_INP_YN
+					 , G.GOODS_NM
+					 , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
+					 , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = ODI.ITEM_CD)		AS ITEM_NM
+		             , ODI.ORD_DTL_ITEM_SQ
+					 , ODI.OPT_CD1
+					 , ODI.OPT_CD2
+					 , G.LIST_PRICE
+		             , G.GOODS_TYPE
+		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                    ELSE (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') END AS SYS_IMG_NM
+					 , OD.ORD_DTL_STAT
+					 , OD.ORD_QTY
+					 , OD.CNCL_RTN_QTY
+					 , OD.ORD_AMT
+					 , OD.REAL_ORD_AMT
+					 , OD.SAVE_PNT_AMT
+					 , OD.CNCL_RTN_AMT
+					 , OD.PNT_DC_AMT
+					 , OD.GFCD_USE_AMT
+					 , OD.INVOICE_NO
+					 , OD.SUPPLY_COMP_CD
+					 , OD.DELV_FEE_CD
+					 , OD.SHOT_DELV_YN
+					 , OD.CHANGEABLE_YN
+					 , OD.RETURNABLE_YN
+					 , G.SELF_GOODS_YN
+			         , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
+			         , B.BRAND_ENM
+					 , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
+					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
+					 , I.ITEMKIND_NM 
+		   	         , I.ITEMKIND_CD 
+			         , I.SIZE_GB 
+			         ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
+				  FROM TB_ORDER O
+				 INNER JOIN TB_ORDER_DETAIL OD
+				    ON O.ORD_NO = OD.ORD_NO
+				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
+				 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+				    ON OD.ORD_NO = ODI.ORD_NO
+				   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+				   AND ODI.ORD_DTL_STAT IN('G013_70','G013_50','G013_60') -- 구매 확정인것만
+				 INNER JOIN TB_GOODS G
+				    ON OD.GOODS_CD = G.GOODS_CD
+				 INNER JOIN TB_BRAND B
+				    ON B.BRAND_CD = G.BRAND_CD
+				 LEFT JOIN TB_ITEMKIND I 
+				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
+				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
+										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+									 FROM TB_ORDER_CHANGE_DETAIL OCD
+									INNER JOIN TB_ORDER_DETAIL OD
+									   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+									WHERE OCD.DEL_YN = 'N'
+									GROUP BY OCD.ORD_DTL_NO
+								  ) OCD
+				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				  WHERE 1=1
+				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') 
 				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
-				AND O.SITE_CD = #{siteCd}
-			GROUP BY O.ORD_NO 
-			      ,O.ORD_NM 
-			      ,O.PAY_DT 
-			      ,O.CUST_NO 
-			      ,OD.ORD_DTL_NO
-			      ,OD.ORD_EXCH_GB 
-			      ,OD.GOODS_CD 
-			      ,OD.REAL_ORD_AMT 
-			      ,OD.SAVE_PNT_AMT 
-			      ,OD.GFCD_USE_AMT 
-			      ,ODI.ORD_DTL_ITEM_SQ 
-			      ,ODI.ITEM_CD 
-			      ,ODI.OPT_CD 
-			      ,ODI.OPT_CD1
-			      ,ODI.OPT_CD2
-			      ,ODI.ITEM_QTY 
-			      ,ODI.ITEM_PRICE
-			      ,G.GOODS_NM 
-			      ,G.MAIN_COLOR_CD
-			      ,B.BRAND_ENM 
-		)F
-		ORDER BY F.PAY_DT DESC
+			 	AND O.SITE_CD = #{siteCd}
+				) Z
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
+				, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
+				, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.INVOICE_NO
+				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM, Z.ORD_DTL_STAT_NM
+				, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
+		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
 	</select>
 	
 	<!-- 마이페이지 리뷰작성 상품데이타 -->
-	<select id="getReviewGoodsInfo" parameterType="Review" resultType="Goods">
+	<select id="getReviewGoodsInfo" parameterType="Review" resultType="Review">
 		/* TsfReivew.getReviewGoodsInfo */
-		SELECT F.*
-			  , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
-		FROM
-		(
-			SELECT O.ORD_NO 
-			      ,O.ORD_NM
-			      ,DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
-			      ,O.CUST_NO 
-			      ,OD.ORD_DTL_NO
-			      ,OD.ORD_EXCH_GB 
-			      ,OD.GOODS_CD 
-			      ,OD.REAL_ORD_AMT 
-			      ,OD.SAVE_PNT_AMT 
-			      ,OD.GFCD_USE_AMT 
-			      ,ODI.ORD_DTL_ITEM_SQ 
-			      ,ODI.ITEM_CD 
-			      ,ODI.OPT_CD 
-			      ,ODI.OPT_CD1
-			      ,ODI.OPT_CD2
-			      ,ODI.ITEM_QTY 
-			      ,ODI.ITEM_PRICE
-			      ,G.GOODS_NM 
-			      ,G.MAIN_COLOR_CD
-			      ,B.BRAND_ENM 
-			      ,I.ITEMKIND_NM 
-			      ,I.ITEMKIND_CD 
-			      ,I.SIZE_GB 
-			      <if test="reviewStat == 'u'.toString()">
-			      ,R.REVIEW_SQ        
-			      ,R.REVIEW_GB        
-				  ,R.REVIEW_TITLE     
-			      ,R.REVIEW_CONTENT   
-				  ,R.SCORE            
-				  ,R.HEIGHT           
-				  ,R.WEIGHT           
-				  ,R.SCORE_SIZE       
-				  ,R.SCORE_COLOR      
-				  ,R.SCORE_FIT        
-				  ,R.SCORE_THICK      
-				  ,R.SCORE_WEIGHT     
-				  ,R.SCORE_BALL       
-				  ,R.GIVE_DUE_PNT     
-				  ,R.PNT_GIVE_STAT    
-				  ,R.BEST_YN          
-				  ,R.GIVE_DUE_BPNT    
-				  ,R.BPNT_GIVE_YN     
-				  ,R.DISP_YN          
-				  ,R.DEL_YN           
-				  ,R.CONFIRM_YN       
-				  ,R.CONFIRM_UNO      
-				  ,R.CONFIRM_DT       
-				  ,R.REG_NO           
-				  ,R.REG_DT           
-				  ,R.UPD_NO           
-				  ,R.UPD_DT           
-				  ,R.ADM_RPL          
-				  ,R.ADM_RPL_REG_NO   
-				  ,R.ADM_RPL_DT       
-				  </if>
-			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
-			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
-								 			 	 AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
-			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
-			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-			                  	                AND ODI.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60')
-			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
-			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
-			                LEFT JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
-			               <if test="reviewStat == 'u'.toString()">
-			                INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
+		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
+		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
+		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
+		     , Z.ORD_NO
+		     , Z.ORD_DT
+		     , Z.PAY_DT
+		     , Z.DELV_EDDT
+		     , Z.ORD_DTL_NO
+		     , Z.ORD_EXCH_GB
+		     , Z.GOODS_CD
+		     , Z.GOODS_NM
+		     , Z.LIST_PRICE
+		     , Z.GOODS_TYPE
+		     , Z.SYS_IMG_NM
+		     , Z.ORD_DTL_STAT
+		     , Z.ORD_QTY
+		     , Z.CNCL_RTN_QTY
+		     , Z.ORD_AMT
+		     , Z.REAL_ORD_AMT
+		     , Z.SAVE_PNT_AMT
+		     , Z.CNCL_RTN_AMT
+		     , Z.PNT_DC_AMT
+		     , Z.GFCD_USE_AMT
+		     , Z.INVOICE_NO
+		     , Z.SUPPLY_COMP_CD
+		     , Z.DELV_FEE_CD
+		     , Z.SHOT_DELV_YN
+		     , Z.CHANGEABLE_YN
+		     , Z.RETURNABLE_YN
+		     , Z.SELF_GOODS_YN
+		     , Z.BRAND_NM
+		     , Z.BRAND_ENM
+		     , Z.ORD_DTL_STAT_NM
+		     , Z.ORD_REQ_CHG_QTY
+		     , Z.ORD_CAN_CHG_QTY
+		     , Z.ITEMKIND_NM 
+		   	 , Z.ITEMKIND_CD 
+             , Z.SIZE_GB 
+             , Z.REMAIN_DT
+             <if test="reviewStat == 'u'.toString()">
+             , Z.REVIEW_SQ        
+			 , Z.REVIEW_GB        
+			 , Z.REVIEW_TITLE     
+			 , Z.REVIEW_CONTENT   
+			 , Z.SCORE            
+			 , Z.HEIGHT           
+			 , Z.WEIGHT           
+			 , Z.SCORE_SIZE       
+			 , Z.SCORE_COLOR      
+			 , Z.SCORE_FIT        
+			 , Z.SCORE_THICK      
+			 , Z.SCORE_WEIGHT     
+			 , Z.SCORE_BALL       
+			 , Z.GIVE_DUE_PNT     
+			 , Z.PNT_GIVE_STAT    
+			 , Z.BEST_YN          
+			 , Z.GIVE_DUE_BPNT    
+			 , Z.BPNT_GIVE_YN     
+			 , Z.DISP_YN          
+			 , Z.DEL_YN           
+			 , Z.CONFIRM_YN       
+			 , Z.CONFIRM_UNO      
+			 , Z.CONFIRM_DT       
+			 , Z.REG_NO           
+			 , Z.REG_DT           
+			 , Z.UPD_NO           
+			 , Z.UPD_DT           
+			 , Z.ADM_RPL          
+			 , Z.ADM_RPL_REG_NO   
+			 , Z.ADM_RPL_DT 
+			 </if>
+		  FROM (SELECT O.ORD_NO
+					 , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
+					 , DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
+					 , DATE_FORMAT(OD.DELV_EDDT, '%m/%d')								AS DELV_EDDT
+					 , OD.ORD_DTL_NO
+					 , OD.ORD_EXCH_GB
+					 , OD.GOODS_CD
+		             , OD.GIFT_ADDR_INP_YN
+					 , G.GOODS_NM
+					 , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
+					 , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = ODI.ITEM_CD)		AS ITEM_NM
+		             , ODI.ORD_DTL_ITEM_SQ
+					 , ODI.OPT_CD1
+					 , ODI.OPT_CD2
+					 , G.LIST_PRICE
+		             , G.GOODS_TYPE
+		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                    ELSE (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') END AS SYS_IMG_NM
+					 , OD.ORD_DTL_STAT
+					 , OD.ORD_QTY
+					 , OD.CNCL_RTN_QTY
+					 , OD.ORD_AMT
+					 , OD.REAL_ORD_AMT
+					 , OD.SAVE_PNT_AMT
+					 , OD.CNCL_RTN_AMT
+					 , OD.PNT_DC_AMT
+					 , OD.GFCD_USE_AMT
+					 , OD.INVOICE_NO
+					 , OD.SUPPLY_COMP_CD
+					 , OD.DELV_FEE_CD
+					 , OD.SHOT_DELV_YN
+					 , OD.CHANGEABLE_YN
+					 , OD.RETURNABLE_YN
+					 , G.SELF_GOODS_YN
+				     , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
+				     , B.BRAND_ENM
+				     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
+					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
+					 , I.ITEMKIND_NM 
+		   	         , I.ITEMKIND_CD 
+			         , I.SIZE_GB 
+			         ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
+			          <if test="reviewStat == 'u'.toString()">
+			         , R.REVIEW_SQ        
+			         , R.REVIEW_GB        
+				     , R.REVIEW_TITLE     
+			         , R.REVIEW_CONTENT   
+				     , R.SCORE            
+				     , R.HEIGHT           
+				     , R.WEIGHT           
+				     , R.SCORE_SIZE       
+				     , R.SCORE_COLOR      
+				     , R.SCORE_FIT        
+				     , R.SCORE_THICK      
+				     , R.SCORE_WEIGHT     
+				     , R.SCORE_BALL       
+				     , R.GIVE_DUE_PNT     
+				     , R.PNT_GIVE_STAT    
+				     , R.BEST_YN          
+				     , R.GIVE_DUE_BPNT    
+				     , R.BPNT_GIVE_YN     
+				     , R.DISP_YN          
+				     , R.DEL_YN           
+				     , R.CONFIRM_YN       
+				     , R.CONFIRM_UNO      
+				     , R.CONFIRM_DT       
+				     , R.REG_NO           
+				     , R.REG_DT           
+				     , R.UPD_NO           
+				     , R.UPD_DT           
+				     , R.ADM_RPL          
+				     , R.ADM_RPL_REG_NO   
+				     , R.ADM_RPL_DT   
+				     </if>
+				  FROM TB_ORDER O
+				 INNER JOIN TB_ORDER_DETAIL OD
+				    ON O.ORD_NO = OD.ORD_NO
+				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60) -- 구매 확정인것만
+				 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+				    ON OD.ORD_NO = ODI.ORD_NO
+				   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+				   AND ODI.ORD_DTL_STAT IN('G013_70','G013_50','G013_60') -- 구매 확정인것만
+				 INNER JOIN TB_GOODS G
+				    ON OD.GOODS_CD = G.GOODS_CD
+				 INNER JOIN TB_BRAND B
+				    ON B.BRAND_CD = G.BRAND_CD
+				 LEFT JOIN TB_ITEMKIND I 
+				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
+				 <if test="reviewStat == 'u'.toString()">
+				 INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
 			                                      AND R.ORD_NO = O.ORD_NO
 			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
-			               </if> 
-			WHERE 1=1
-				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+			      </if>                          
+				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
+										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+									 FROM TB_ORDER_CHANGE_DETAIL OCD
+									INNER JOIN TB_ORDER_DETAIL OD
+									   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+									WHERE OCD.DEL_YN = 'N'
+									GROUP BY OCD.ORD_DTL_NO
+								  ) OCD
+				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				  WHERE 1=1
+				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') 
 				<choose>
 					<when test="reviewStat == 'u'.toString()">
 					AND O.ORD_NO IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
@@ -464,10 +645,11 @@
 					AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 					</otherwise>
 				</choose>
-				AND O.CUST_NO = #{custNo}
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+				AND O.CUST_NO = 100000
 				AND O.DISP_YN = 'Y'
-				AND O.SITE_CD = #{siteCd}
-				<if test="ordNo!=null and ordNo != ''">
+			 	AND O.SITE_CD = 'G000_10'
+     			<if test="ordNo!=null and ordNo != ''">
 				AND O.ORD_NO = #{ordNo}
 				</if>
 				<if test="ordDtlNo!=null and ordDtlNo != ''">
@@ -476,8 +658,19 @@
 				<if test="goodsCd!=null and goodsCd!=''">
 				AND G.GOODS_CD = #{goodsCd}
 				</if>
-		)F
-		ORDER BY F.PAY_DT DESC
+				) Z
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
+				, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
+				, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.INVOICE_NO
+				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM,Z.ORD_DTL_STAT_NM
+				, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
+				 <if test="reviewStat == 'u'.toString()">
+				, Z.REVIEW_SQ , Z.REVIEW_SQ , Z.REVIEW_GB , Z.REVIEW_TITLE , Z.REVIEW_CONTENT , Z.SCORE , Z.HEIGHT           
+				, Z.WEIGHT  , Z.SCORE_SIZE , Z.SCORE_COLOR , Z.SCORE_FIT , Z.SCORE_THICK , Z.SCORE_WEIGHT , Z.SCORE_BALL , Z.GIVE_DUE_PNT , Z.PNT_GIVE_STAT    
+			    , Z.BEST_YN, Z.GIVE_DUE_BPNT , Z.BPNT_GIVE_YN , Z.DISP_YN , Z.DEL_YN, Z.CONFIRM_YN, Z.CONFIRM_UNO, Z.CONFIRM_DT, Z.REG_NO, Z.REG_DT      
+			    , Z.UPD_NO, Z.UPD_DT, Z.ADM_RPL, Z.ADM_RPL_REG_NO, Z.ADM_RPL_DT  
+			    </if>          
+		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
 	</select>
 	
 	<!-- 마이페이지 작성가능한 리뷰 -->

+ 25 - 135
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -165,7 +165,7 @@
 			</div>
 		</div>
 
-		<div class="inner">
+		<div class="inner tmtb">
 			<div class="pd_together" id="goodsTmtbArea">
 			</div>
 		</div>
@@ -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="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>
-											</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="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>
+												<p th:text="${bestReview.reviewContent}">옷</p>
 											</div>
 										</div>
 									</a>
@@ -586,7 +514,8 @@
 							<div class="swiper-container"  th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}">
 								<div class="swiper-wrapper">
 									<div class="swiper-slide" th:each="lookbookGoods, goodsStatus : ${lookbook.lookbookGoodsList}" >
-										<div class="item_prod">
+										<div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''" 
+																th:attr="goodsCd=${lookbookGoods.goodsCd}, optCd=${lookbookGoods.optCd}, minOrdQty=${lookbookGoods.minOrdQty},  goodsType=${lookbookGoods.goodsType}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}">
 											<div class="item_state">
 												<button type="button" class="itemLike" th:classappend="${lookbookGoods.wishYn == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${lookbookGoods.goodsCd}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}, planDtlSq=''">관심상품 추가</button>
 												<a href="javascript:void(0)" class="itemLink">
@@ -895,7 +824,7 @@
 	<div class="product_floormenu"><!--  ☞☞ 제품이 품절되면 soldout클래스 추가 -->
 		<div class="share_like">
 			<button type="button" class="share">공유하기</button>
-			<!-- <th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsSnsForm}"></th:block> -->
+			<!-- <th:block th:include="~{web/goods/GoodsIncludeFormMob :: goodsSnsForm}"></th:block> -->
 			<button type="button" class="like" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  
 					onclick="cfnPutWishList(this);" 
 					th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">위시리스트</button>
@@ -1513,7 +1442,7 @@
 	var fnAddCartLookBookGoods = function(obj){
 		
 		let $obj = $(obj);
-		let $target = $obj.parent().find('.li_item').find('.item_prod');
+		let $target = $obj.parent().parent().parent().find('.swiper-container').find('.item_prod');
 		let btnType = "C";
 		let params = [];
 		
@@ -1561,25 +1490,25 @@
 		params.goodsOtherGb = "tmtb";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsTmtbSearch(params);
+		fnGoodsTmtbSearch(params);
 		
 		// 함께본 상품(ajax html)
 		params.goodsOtherGb = "together";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsTogetherSearch(params);
+		fnGoodsTogetherSearch(params);
 		
 		// 추천 상품(ajax html)
 		params.goodsOtherGb = "recommend";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsRecommendSearch(params);
+		fnGoodsRecommendSearch(params);
 		
 		// 비슷한 상품(ajax html)
 		params.goodsOtherGb = "like";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsLikeSearch(params);
+		fnGoodsLikeSearch(params);
 	
 		// selecter
 		$(function(){
@@ -1622,7 +1551,6 @@
 			setInterval(function() { promotionTimer(); }, 1000);
 		}
 		
-
 		//상품상세정보 더보기   
 		$(document).on('click','.pd_descrp .btn_more_box button',function(e){
 			$('.pd_descrp .cont_body').toggleClass('on'); 
@@ -1702,13 +1630,6 @@
 			},
 		});
 
-		//팝업 - 배송교환반품 안내
-		$(document).on('click','#btn_pdDelivery_Pop',function(e){
-			$("#pdDeliveryPop").modal("show");
-			$('#pdDeliveryPop .modal-body').load('pd_delivery_pop.html');
-			return false;
-		})
-
 		//팝업 - 리뷰
 		$(document).on('click','#btn_pdReview_pop',function(e){
 			$("#pdReviewPop").modal("show");
@@ -1734,37 +1655,6 @@
 			return false;
 		})
 
-		//팝업 - 제품리뷰 > 카테고리팝오픈
-		// 오픈
-		$(document).on('click','.pd_review .category_open > li',function(e){
-			var dataName=$(this).attr("data_name");
-			$(".pd_review .category_box").show();
-			$(".pd_review .category_list").find(".category").hide();
-			$(".pd_review .category_list").find("#"+dataName).show();
-			return false;
-		});
-		// 닫기
-		$(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;
-			var value=$(this).find("a").attr("data");
-			var name=$(this).parent().parent().attr("id");
-			$(this).parent().find("li").removeClass("active");
-			$(this).addClass("active");
-			for(var i=0; i < num; i++){
-				var dataname=$(".pd_review .category_open > li").eq(i).attr("data_name");
-				if(name==dataname){
-					$(".pd_review .category_open > li").eq(i).find("span").text(value);
-				}
-			}
-			return false;
-		});
-
-
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
 			$(".Purchase_pop .pop_option_select").show();

+ 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';	

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

@@ -0,0 +1,845 @@
+<!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',
+			},
+		});	
+		
+		//팝업 - 제품리뷰 > 카테고리팝오픈
+		// 오픈
+		$(document).on('click','.pd_review .category_open > li',function(e){
+			var dataName=$(this).attr("data_name");
+			$(".pd_review .category_box").show();
+			$(".pd_review .category_list").find(".category").hide();
+			$(".pd_review .category_list").find("#"+dataName).show();
+			return false;
+		});
+		
+		// 변경
+		$(document).on('click','.pd_review .category ul > li',function(e){
+			var num=$(".pd_review .category_open > li").length;
+			var value=$(this).find("a").attr("data");
+			var name=$(this).parent().parent().attr("id");
+			$(this).parent().find("li").removeClass("active");
+			$(this).addClass("active");
+			for(var i=0; i < num; i++){
+				var dataname=$(".pd_review .category_open > li").eq(i).attr("data_name");
+				if(name==dataname){
+					$(".pd_review .category_open > li").eq(i).find("span").text(value);
+				}
+			}
+			return false;
+		});
+
+		
+		fnGoodsReviewListSearch();
+		
+	});
+	
+/*]]>*/
+</script>
+ </html>

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

@@ -2,7 +2,7 @@
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsIncludeFormWeb.html
+ * @source  : GoodsIncludeFormMob.html
  * @desc    : 상품상세 Include Page - 공용
  *============================================================================
  * STYLE24

+ 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>

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

@@ -19,7 +19,7 @@
 	<!-- head start -->
 	<div class="common_header">
 		<!-- 프로모션 띠 배너 등록 시 노출 -->
-		<div class="hd_top_banner" style="background-color:#fd4801;">
+		<div class="hd_top_banner" style="background-color:#fd4801;display:none;">
 			<a href="" class="t_bnr">
 				<span style="margin:0 auto;height:60px;line-height:60px;font-size: 20px;font-weight: 600;letter-spacing: -.025em; color:#fff;">APP 수신동의 하면 1만 포인트 증정!</span>
 				<!--<img src="ABC.jpg" alt="프로모션"/>-->

+ 1 - 1
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -331,7 +331,7 @@
 
 				<!-- brand_product -->
 				<th:block th:if="${contentsLoc=='013'}">
-					<div class="content brand_product">
+					<div class="content brand_product" style="display: none;">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>

+ 20 - 6
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -441,6 +441,9 @@
 		<input type="hidden" name="sortGb"/>
 	</form>
 
+	<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 th:inline="javascript">
 		/*<![CDATA[*/
 		var filterPriceList = [[${filterPriceList}]];
@@ -452,12 +455,7 @@
 			if(!gagajf.isNull(filterPriceList)){
 				var custom_values = [];
 				$.each(filterPriceList, function (priceIdx, priceItem){
-					custom_values[0] = priceItem.price1;
-					custom_values[1] = priceItem.price2;
-					custom_values[2] = priceItem.price3;
-					custom_values[3] = priceItem.price4;
-					custom_values[4] = priceItem.price5;
-					custom_values[5] = priceItem.price6;
+					custom_values[priceIdx] = priceItem.filterNm;
 				});
 
 				var my_from = custom_values.indexOf(custom_values[0]); //custom_values.indexOf('9,000원');
@@ -497,8 +495,24 @@
 			});
 
 			fnCreateCategoryList();
+
+			fnGoodsListSearch();
 		});
 
+		var fnGoodsListSearch = function (){
+			gagaInfiniteScroll.getHistory();
+		}
+
+		// 상품 검색
+		var fnGetInfiniteScrollDataList = function (pageNum){
+			$("#searchForm input[name=pageNo]").val(pageNum+1);
+			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchForm,  gagaInfiniteScroll.jsonToHtml);
+		}
+
+		var fnDrawInfiniteScrollData = function (result){
+			console.log('nn');
+		}
+
 		var fnCreateCategoryList = function (){
 			$.getJSON('/display/gnb/tab/list'
 					, function(result, status) {

+ 17 - 22
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -36,24 +36,22 @@
 									<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
 										<div class="swiper-slide">
 											<th:block th:if="${ContentsData.imgPath1!=null && ContentsData.imgPath1!=''}">
-												<th:block th:if="${ContentsData.strVar1!=null && ContentsData.strVar1!='' }">
-													<div class="txtWrap">
-														<th:block th:if="${ContentsData.strVar5!=null && ContentsData.strVar5!=''}">
-															<p class="vrt_txt" th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></p>
-															<p class="vrt_txt" th:if="${ContentsData.strVar5!='P'}">EVENT</p>
-														</th:block>
-														<dl th:class="${ContentsData.strVar7=='BLACK'?'':'w'}">
-															<dt th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></dt>
-															<dt th:if="${ContentsData.strVar5!='P'}" >EVENT</dt>
-															<dd th:text="${ContentsData.strTitle1}"></dd>
-															<!--<dd>NEW ARRIVAL</dd>-->
-															<dd class="txt_xs" th:text="${ContentsData.subText1}"></dd>
-														</dl>
-														<button type="button" class="btn"><span>자세히 보기</span></button>
-													</div>
-													<!--<img src="/images/pc/thumb/main_visual01.jpg" alt="">-->
-													<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
-												</th:block>
+												<div class="txtWrap">
+													<th:block th:if="${ContentsData.strVar5!=null && ContentsData.strVar5!=''}">
+														<p class="vrt_txt" th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></p>
+														<p class="vrt_txt" th:if="${ContentsData.strVar5!='P'}">EVENT</p>
+													</th:block>
+													<dl th:class="${ContentsData.strVar7=='BLACK'?'':'w'}">
+														<dt th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></dt>
+														<dt th:if="${ContentsData.strVar5!='P'}" >EVENT</dt>
+														<dd th:text="${ContentsData.strTitle1}"></dd>
+														<!--<dd>NEW ARRIVAL</dd>-->
+														<dd class="txt_xs" th:text="${ContentsData.subText1}"></dd>
+													</dl>
+													<button type="button" class="btn"><span>자세히 보기</span></button>
+												</div>
+												<!--<img src="/images/pc/thumb/main_visual01.jpg" alt="">-->
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
 											</th:block>
 										</div>
 									</th:block>
@@ -405,9 +403,6 @@
 	<!-- End Of Main Contents -->
 	</div>
 </div>
-	<link rel="stylesheet" type="text/css" href="/ux/pc/css/main.css" />
-	<link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 
@@ -701,7 +696,7 @@ var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container',
 	loop: true,
 	effect: 'fade',
 	autoplay: {
-		delay: 10000,
+		delay: 5000,
 		disableOnInteraction: false,
 	},
 	pagination: {

+ 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 - 1
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -77,7 +77,8 @@
 													<div class="gd_opt">
 														<div class="option_wrap">
 															<span class="title sr-only">주문 옵션</span>
-															<span class="option">[[${reviewInfo.optCd1}]]K&nbsp;/&nbsp;[[${reviewInfo.optCd2}]]</span>
+															<div id="optionDiv"><span class="option"></span></div>
+															
 														</div>
 													</div>
 												</div>
@@ -575,6 +576,14 @@ var fnChooseFile = function(obj) {
 }
 
 $(document).ready(function() {
+	if (reviewList.goodsType == 'G056_S') {
+		$.each(reviewList.colorNmArr, function(index, option) {
+			$("#optionDiv").append('<span class="option">'+reviewList.itemNmArr[index] + ' / ' + option + ' / ' + reviewList.optCd2Arr[index]+'</span>');
+		});
+	}else{
+		$(".option").append(reviewList.optCd1+"&nbsp;/&nbsp;"+reviewList.optCd2);
+	}
+	
 	 if(reviewStat=='u'){
 		 var reviewScore = reviewList.score -1;
 		 $("#score").val(reviewScore);

+ 13 - 4
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html

@@ -76,14 +76,14 @@
 									</ul>
 								</div>																					
 							</div>
-							<div class="nodata" id="nodata1">
+							<div class="nodata" id="nodata1" style="display:none;">
 								<div class="txt_box">
 									<p>
 										작성 가능한 리뷰가 없습니다.<br>
 									</p>
 								</div>
 							</div>
-							<div class="nodata" id="nodata2">
+							<div class="nodata" id="nodata2" style="display:none;">
 								<div class="txt_box">
 									<p>
 										작성한 리뷰가 없습니다.<br>
@@ -152,6 +152,7 @@
 		$('#nodata2').hide();
 		
 		$('#reviewList').html('');
+
 		
 		if (result.dataList1 != null && result.dataList1.length > 0) {
 			$.each(result.dataList1, function(idx, item) {
@@ -180,7 +181,15 @@
 				html += '					<div class="gd_opt">                                                                                  ';
 				html += '						<div class="option_wrap">                                                                         ';
 				html += '							<span class="title sr-only">주문 옵션</span>                                                      ';
-				html += '							<span class="option">'+item.optCd1+'&nbsp;/&nbsp;'+item.optCd2+'</span>     ';
+				if (item.goodsType =='G056_S') {
+					$.each(item.colorNmArr, function (index2, option) {
+						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option + ' / ' + item.optCd2Arr[index2] + '</span>\n';
+					})
+				}else{
+					html += '							<span class="option">'+item.optCd1+'&nbsp;/&nbsp;'+item.optCd2+'</span>     ';
+				}
+				
+				
 				html += '						</div>                                                                                            ';
 				html += '					</div>                                                                                                ';
 				html += '				</div>                                                                                                    ';
@@ -188,7 +197,7 @@
 				html += '					<p>'+item.remainDt+'일 남음</p>                                                                                                  ';
 				html += '				</div>                                                                                                    ';
 				html += '				<div class="button_box">                                                                                  ';
-				html += '					<p><button type="button" class="btn btn_primary_line btn_sm" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+','+item.goodsCd+')"><span>리뷰쓰기</span></button></p>           ';
+				html += '					<p><button type="button" class="btn btn_primary_line btn_sm" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기</span></button></p>           ';
 				html += '				</div>                                                                                                    ';
 				html += '			</div>                                                                                                        ';
 				html += '		</div>                                                                                                            ';

+ 11 - 4
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);
+	
 }
 
 /**
@@ -1045,7 +1052,7 @@ var cfnGoToPlanDetail = function (planSq) {
  * @desc   : 룩북리스트로 이동
  * <pre>
  *        cfnGoToLookbookList();
- * </pre>
+ * </pre>cfnOpenGoodsPopup
  * @param  : brandGroupNo - 브랜드그룹번호 , lookbookGb - 룩북(L) or 브랜드룩북(BL)
  * @since  : 2021/04/06
  * @author : bin2107