Переглянути джерело

Merge branch 'sowon' into develop

sowon4187 5 роки тому
батько
коміт
c0e8f5a3bb

+ 0 - 9
src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -147,15 +147,6 @@ public interface TsfCouponDao {
 	 */
 	Coupon getCustGradePolicyCoupon(Coupon coupon);
 
-	/**
-	 * 기획전 쿠폰 디테일 정보
-	 * @param coupon - 쿠폰정보
-	 * @return Coupon
-	 * @author sowon
-	 * @since 2021. 03. 17
-	 */
-	Coupon getPlanCouponDetailInfo(Coupon coupon);
-
 	/**
 	 * 출석체크 쿠폰  정보
 	 * @param coupon - 쿠폰정보

+ 0 - 13
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -649,19 +649,6 @@ public class TsfCouponService {
 		return resultCnt;
 	}
 
-	/**
-	 * 기획전 쿠폰 디테일 정보
-	 * @param cpnId
-	 * @return
-	 * @author sowon
-	 * @since 2021. 04. 14
-	 */
-	public Coupon getPlanCouponDetailInfo(Coupon coupon) {
-		coupon.setFrontGb(TsfSession.getFrontGb());
-		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
-		return couponDao.getPlanCouponDetailInfo(coupon);
-	}
-
 	/**
 	
 	 * EP 쿠폰 다운 처리

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

@@ -32,6 +32,7 @@ import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfDisplayService;
 import com.style24.front.biz.service.TsfPlanningService;
+import com.style24.front.biz.service.TsfReviewService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
@@ -81,6 +82,9 @@ public class TsfPlanningController extends TsfBaseController {
 	
 	@Autowired
 	private TscPointService corePointService;
+	
+	@Autowired
+	private TsfReviewService reviewService;
 
 	/**
 	 * 기획전 메인 화면
@@ -203,6 +207,7 @@ public class TsfPlanningController extends TsfBaseController {
 
 		// 쿠폰
 		plan.setTmplType("G082_20");
+		plan.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
 		mav.addObject("couponInfo", planningService.getPlanCouponInfo(coupon));
 		mav.addObject("couponContent", planningService.getPlanContentInfo(plan));
 		
@@ -316,7 +321,7 @@ public class TsfPlanningController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 - 기본정보
-		mav.addObject("couponDetailInfo", couponService.getPlanCouponDetailInfo(coupon));
+		mav.addObject("couponDetailInfo", couponService.getCouponDetailInfo(coupon));
 		
 		mav.setViewName(super.getDeviceViewName("planning/PlanningCouponDetailForm"));
 		return mav;
@@ -799,9 +804,51 @@ public class TsfPlanningController extends TsfBaseController {
 		return result;
 	}
 	
+	/**
+	 * 기획전 리뷰 상세 -  리뷰 상세 레이어
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 18
+	 */
+	@PostMapping("/review/detail/layer")
+	public ModelAndView planningReviewDetailForm(Review review) {
+		ModelAndView mav = new ModelAndView();
+		Goods paramsGoods = new Goods();
+		paramsGoods.setGoodsCd(review.getGoodsCd());
+
+		// 상품 기본정보
+		mav.addObject("params", paramsGoods);
+
+		// 상품 기본정보
+		mav.addObject("review", review);
+
+		mav.addObject("reviewList", reviewService.getReviewList(review));
+
+		mav.setViewName(super.getDeviceViewName("planning/PlanningReviewDetailForm"));
+		return mav;
+	}
+	
+
+	/**
+	 * 기획전 리뷰 상세 -  리뷰 상세 레이어
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 18
+	 */
+	@PostMapping("/review/detail/list")
+	@ResponseBody
+	public GagaMap getReviewDetailList(@RequestBody Review review) {
+		GagaMap result = new GagaMap();
+		result.set("reviewList", reviewService.getReviewList(review));
+		return result;
+	}
+
+	
 	// 컴마
 	 public static String toNumFormat(int num) {
 		  DecimalFormat df = new DecimalFormat("#,###");
 		  return df.format(num);
 	 }
+	 
+	 
 }

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

@@ -1148,108 +1148,6 @@
 		ORDER BY CPN_ID LIMIT 1
 	</select>
 	
-	<select id="getPlanCouponDetailInfo" resultType="Coupon" parameterType="Coupon">
-		/* TsfCoupon.getPlanCouponDetailInfo */
-		SELECT Z.CPN_ID                                /*쿠폰ID*/
-		     , Z.CPN_NM                                /*쿠폰명*/
-		     , Z.BUY_LIMIT_AMT                         /*구매제한금액*/
-		     , Z.MAX_DC_AMT                            /*최대할인금액*/
-		     , Z.DC_VAL                                /*할인값*/
-		     , Z.DC_WAY                                /*할인방법*/
-		     , Z.USE_CONDITION                         /*사용조건*/
-		     , Z.ISSUE_CONDITION                       /*발급조건*/
-		     , Z.AVAIL_STDT
-		     , Z.AVAIL_EDDT
-		     , GROUP_CONCAT(Z.TGT_CONDITION) AS TGT_CONDITION
-		FROM
-		(
-		WITH TAB_COUPON AS (
-		    SELECT C.CPN_ID                          /*쿠폰ID*/
-		         , C.CPN_NM                           /*쿠폰명*/
-		         , C.BUY_LIMIT_AMT                    /*구매제한금액*/
-		         , C.MAX_DC_AMT                       /*최대할인금액*/
-		         , DATE_FORMAT(C.AVAIL_STDT,'%Y.%m.%d %H:%i') AS AVAIL_STDT
-		         , DATE_FORMAT(C.AVAIL_EDDT,'%Y.%m.%d %H:%i') AS AVAIL_EDDT
-		         , CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
-		                WHEN #{frontGb} = 'M' THEN C.DC_MVAL
-		                WHEN #{frontGb} = 'A' THEN C.DC_AVAL
-		           END             AS DC_VAL          /*할인값*/
-		         , CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
-		                ELSE '%'
-		           END             AS DC_WAY          /*할인방법*/
-		         , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
-		                       ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
-		                  END
-		                 ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
-		                       ELSE CONCAT('최대 ',FORMAT(C.MAX_DC_AMT , 0),'원 할인')
-		                  END)     AS USE_CONDITION   /*사용조건*/
-		         , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
-		                ELSE CONCAT('1인당 최대',C.CUST_PUB_LIMIT_QTY,'매')
-		           END             AS ISSUE_CONDITION /*발급조건*/
-		    FROM  TB_COUPON C
-		    WHERE C.CPN_STAT = 'G232_11' /*진행중인쿠폰*/
-		     AND    C.SITE_CD = #{siteCd}
-		)
-		, TAB_COUPON_REFVAL1 AS (
-		    SELECT CR.CPN_ID
-		         , CR.CPN_TARGET
-		         , CASE WHEN CR.CPN_TARGET = 'G260_10' /*상품*/ THEN (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CR.REF_VAL AND GOODS_STAT = 'G008_90')
-		                WHEN CR.CPN_TARGET = 'G260_11' /*카테고리*/ THEN
-		                    CASE WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL),0) > 0 THEN (SELECT CATE1_NM FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL LIMIT 1)
-		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL LIMIT 1)
-		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL LIMIT 1)
-		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL LIMIT 1)
-		                    END
-		                WHEN CR.CPN_TARGET = 'G260_12' /*브랜드*/ THEN (SELECT BRAND_KNM FROM TB_BRAND WHERE BRAND_CD = CR.REF_VAL AND USE_YN = 'Y')
-		                WHEN CR.CPN_TARGET = 'G260_13' /*업체*/ THEN (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = CR.REF_VAL AND USE_YN = 'Y' AND SUPPLY_STAT = 'G010_30')
-		           END AS REF_VAL
-		         , RANK() OVER(PARTITION BY CR.CPN_ID, CR.CPN_TARGET ORDER BY REF_VAL) AS RK
-		    FROM   TAB_COUPON C
-		         , TB_COUPON_REFVAL CR
-		    WHERE  C.CPN_ID = CR.CPN_ID
-		    AND    CR.CPN_TARGET != 'G260_14' /*제외상품아닌넘*/
-		)
-		, TAB_COUPON_REFVAL2 AS (
-		    SELECT CPN_ID
-		         , CPN_TARGET
-		         , GROUP_CONCAT(REF_VAL ORDER BY RK ASC SEPARATOR '/' ) AS REF_VAL
-		         , (SELECT COUNT(*)
-		            FROM   TAB_COUPON_REFVAL1
-		            WHERE  CPN_ID = CR.CPN_ID
-		            AND    CPN_TARGET = CR.CPN_TARGET)                  AS CNT
-		    FROM   TAB_COUPON_REFVAL1 CR
-		    WHERE  1 = 1
-		    AND    (
-		            (CPN_TARGET != 'G260_12' AND RK = 1) /*브랜드 외는 1개만 노출*/
-		            OR
-		            (CPN_TARGET = 'G260_12' AND RK <![CDATA[<=]]> 2) /*브랜드만 2개 노출*/
-		           )
-		    GROUP  BY CPN_ID, CPN_TARGET
-		)
-		SELECT C.CPN_ID                                /*쿠폰ID*/
-		     , C.CPN_NM                                /*쿠폰명*/
-		     , C.BUY_LIMIT_AMT                         /*구매제한금액*/
-		     , C.MAX_DC_AMT                            /*최대할인금액*/
-		     , C.DC_VAL                                /*할인값*/
-		     , C.DC_WAY                                /*할인방법*/
-		     , C.USE_CONDITION                         /*사용조건*/
-		     , C.ISSUE_CONDITION                       /*발급조건*/
-		     , C.AVAIL_STDT
-		     , C.AVAIL_EDDT
-		     , CONCAT(CR.REF_VAL,CASE WHEN CR.CPN_TARGET = 'G260_10' AND CR.CNT > 1 THEN ' 외'
-		                              WHEN CR.CPN_TARGET = 'G260_11' AND CR.CNT > 1 THEN ' 외'
-		                              WHEN CR.CPN_TARGET = 'G260_12' AND CR.CNT > 2 THEN ' 외'
-		                              WHEN CR.CPN_TARGET = 'G260_13' AND CR.CNT > 1 THEN ' 외'
-		                              ELSE ''
-		                         END) AS TGT_CONDITION /*대상조건*/
-		FROM   TAB_COUPON C
-		     , TAB_COUPON_REFVAL2 CR
-		WHERE  C.CPN_ID = CR.CPN_ID
-		AND C.CPN_ID = #{cpnId}
-		)Z
-				
-	</select>
-	
 	<!-- 기획전 다운가능 쿠폰 정보 조회 -->
 	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
 		/* TsfCoupon.getPlanCouponInfo */
@@ -1287,7 +1185,7 @@
 		AND C.CPN_STAT = 'G232_11'
 		AND C.CPN_ID = #{cpnId}
 		AND C.SITE_CD = #{siteCd}
-		AND C.CPN_TYPE IN ('G230_11','G230_12','G230_13','G230_14','G230_20','G230_30')
+		AND C.CPN_TYPE IN ('G230_11','G230_20','G230_30')
 		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
 		AND NOW()  <![CDATA[<=]]> IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
 		AND (CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL

+ 10 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -624,7 +624,7 @@
 		SELECT F2.*
 		FROM 
 		(
-			SELECT F.REVIEW_SQ
+			SELECT    F.REVIEW_SQ
 					 ,F.GOODS_CD
 					 ,F.REVIEW_GB
 					 ,F.CUST_NO
@@ -678,13 +678,14 @@
 					 ,F.PNT_PRATE
 					 ,F.PNT_MRATE
 				  ,(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
-				  ,(SELECT MAX(SYS_FILE_NM) FROM TB_REVIEW_ATTACH WHERE REVIEW_SQ =F.REVIEW_SQ ORDER BY FILE_GB , REVIEW_SQ LIMIT 1) AS REVIEW_SYS_IMG
-				  ,(SELECT FILE_GB FROM TB_REVIEW_ATTACH WHERE REVIEW_SQ =F.REVIEW_SQ ORDER BY FILE_GB , REVIEW_SQ LIMIT 1) AS FILE_GB 
+				  ,(SELECT MAX(SYS_FILE_NM) FROM TB_REVIEW_ATTACH WHERE REVIEW_SQ =F.REVIEW_SQ ORDER BY FILE_GB DESC, REVIEW_SQ LIMIT 1) AS REVIEW_SYS_IMG
+				  ,(SELECT MAX(KMC_KEY) FROM TB_REVIEW_ATTACH WHERE REVIEW_SQ =F.REVIEW_SQ ORDER BY FILE_GB DESC, REVIEW_SQ LIMIT 1) AS KMC_KEY
+				  ,(SELECT MAX(FILE_GB) FROM TB_REVIEW_ATTACH WHERE REVIEW_SQ =F.REVIEW_SQ ORDER BY FILE_GB DESC , REVIEW_SQ LIMIT 1) AS FILE_GB  
 				  , CASE IFNULL((SELECT COUNT(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' ),0) 
 			            WHEN 0 THEN 'N'
 			            ELSE 'Y' END AS GOODS_IMAGE_YN
 			      ,(SELECT CUST_ID FROM TB_CUSTOMER WHERE CUST_NO = F.CUST_NO) AS CUST_ID
-				  , ROW_NUMBER() OVER (PARTITION BY F.GOODS_CD ORDER BY F.BEST_YN DESC,F.SCORE, F.REG_DT) AS RANKNO
+				  , ROW_NUMBER() OVER (PARTITION BY F.GOODS_CD ORDER BY F.BEST_YN DESC, F.SCORE DESC, F.REVIEW_GB, F.REG_DT) AS RANKNO
 				  , 'G082_10' AS TMPL_TYPE
 				  ,(SELECT PC.TITLE FROM TB_PLAN_CONTENTS PC WHERE PC.PLAN_SQ = #{planSq} AND PC.TMPL_TYPE = 'G082_10') AS TITLE
 			FROM 
@@ -764,7 +765,9 @@
 			)F
 		)F2
 		WHERE F2.RANKNO <![CDATA[<]]> 5
-		ORDER BY F2.REVIEW_SQ LIMIT 20
+		AND F2.SCORE NOT IN (1,2)
+		ORDER BY F2.BEST_YN DESC
+		        ,F2.RANKNO ASC LIMIT 20
 	</select>
 	
 	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
@@ -831,7 +834,7 @@
 		<if test="cpnId != null and cpnId != ''">
 		AND C.CPN_ID  = #{cpnId}
 		</if>
-		AND C.CPN_TYPE IN ('G230_11','G230_12','G230_13','G230_14','G230_20','G230_30')
+		AND C.CPN_TYPE IN ('G230_11','G230_30')
 		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
 		AND NOW()  <![CDATA[<=]]>  IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
 		AND (CASE WHEN 'P' = #{frontGb} THEN C.DC_PVAL
@@ -1175,6 +1178,7 @@
 		        <if test="maxRow != null and maxRow > 0">
 		        WHERE  PG.NUMB <![CDATA[<=]]> #{maxRow}
 		        </if>
+		        ORDER BY PG.DISP_ORD
 		       ) Z
 	</select>
 	

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

@@ -1027,15 +1027,15 @@
 		      AND R.ORD_DTL_NO = OD.ORD_DTL_NO 
 		   LEFT JOIN TB_ITEMKIND I 
 		      ON G.ITEMKIND_CD = I.ITEMKIND_CD 
-		      AND R.ORD_NO = O.ORD_NO
-		      AND R.DEL_YN = 'N'
-		      AND R.DISP_YN = 'Y'
 		  LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
 		                               AND C.USE_YN = 'Y'
 		     WHERE 1=1
 		   AND O.ORD_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
 		   AND O.CUST_NO =  #{custNo}
 		   AND R.CONFIRM_YN = 'Y'
+		   AND R.ORD_NO = O.ORD_NO
+		   AND R.DEL_YN = 'N'
+		   AND R.DISP_YN = 'Y'
 		   AND OD.ORD_DTL_NO IN (SELECT R.ORD_DTL_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y' AND R.ORD_NO = O.ORD_NO AND R.ORD_DTL_NO = OD.ORD_DTL_NO AND R.CUST_NO = #{custNo})
 		   AND O.SITE_CD =  #{siteCd}
 		   ) Z

+ 7 - 7
src/main/webapp/WEB-INF/views/mob/planning/PlanningDetailFormMob.html

@@ -771,27 +771,27 @@ if(template.length>0){
 			html += '							<div class="best_review">\n';
 			if(item.reviewSysImg!= null){
 				if (item.bestYn == 'Y') {
-					html += '								<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'Y\', \'Y\',\''+item.reviewSq+'\');">\n';
+					html += '								<a href="javascript:void();" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'Y\', \'Y\',\''+item.reviewSq+'\',0);">\n';
 				}else{
-					html += '								<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'N\', \'Y\',\''+item.reviewSq+'\');">\n';
+					html += '								<a href="javascript:void();" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'N\', \'Y\',\''+item.reviewSq+'\',0);">\n';
 				}
 			}else{
 				if (item.bestYn == 'Y') {
-					html += '								<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'Y\', \'N\',\''+item.reviewSq+'\');">\n';
+					html += '								<a href="javascript:void();" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'Y\', \'N\',\''+item.reviewSq+'\',0);">\n';
 				}else{
-					html += '								<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'N\', \'N\',\''+item.reviewSq+'\');">\n';
+					html += '								<a href="javascript:void();" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'N\', \'N\',\''+item.reviewSq+'\',0);">\n';
 				}
 			}
 			html += '									<div class="lap">\n';
 			html += '										<div class="pic">\n';
 			if(item.reviewSysImg!= null){
 				if (item.fileGb == 'M') { 
-					html += '											<span class="thumb mov" style="background-image:url('+ _uploadImageUrl+item.reviewSysImg +');"></span>\n';
+					html += '											<span class="thumb mov" style="background-image:url('+ _kollusMediaUrl+'/poster/'+item.kmcKey +');"></span>\n';
 				}else{
-					html += '											<span class="thumb" style="background-image:url('+ _uploadImageUrl +item.reviewSysImg +');"></span>\n';
+					html += '											<span class="thumb" style="background-image:url('+ _uploadImageUrl +item.reviewSysImg +'?RS=333);"></span>\n';
 				}
 			}else{
-				html += '											<span class="thumb" style="background-image:url('+ _uploadGoodsUrl+'/'+item.sysImgNm +');"></span>\n';
+				html += '											<span class="thumb" style="background-image:url('+ _uploadGoodsUrl+'/'+item.sysImgNm +'?RS=333);"></span>\n';
 			}
 			html += '										</div>\n';
 			html += '										<div class="info">\n';

+ 190 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningReviewDetailFormMob.html

@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewDetailFormMob.html
+ * @desc	: 상품평 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="exampleFullLabel">리뷰 상세</h5>
+			</th:block>
+		</div>
+		<div class="modal-body" th:if="${reviewList != null and !reviewList.empty}">
+			<div class="pop_cont" th:each="review, status : ${reviewList}" >
+				<!-- 리뷰사진영역 -->
+					<div class="area_slider">
+						<div class="swiper-container thumb_list">
+							<div class="swiper-wrapper">
+								<th:block th:if="${review.reviewAttachList != null and !review.reviewAttachList.empty}" >
+								<th:block th:each="reviewAttach, attachStatus : ${review.reviewAttachList}">
+								<div class="swiper-slide">
+									<div class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}">
+										<th:block th:if="${reviewAttach.fileGb == 'M'}">
+											<iframe class="pd_mov" width="100%" height="100%" th:src="${kollusMediaUrl+'/'+reviewAttach.kmcKey +'?enable_initialize_focus=false&autoplay&mute&controls_activation=none'}" frameborder="0" allowfullscreen></iframe>
+										</th:block>
+										<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+											<img th:src="${imgUrl+'/'+reviewAttach.sysFileNm}" alt="">
+										</th:block>
+									</div>
+									
+								</div>
+								</th:block>
+								</th:block>
+								<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
+									<div class="swiper-slide"><div class="thumb nodata"><img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=358'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" alt=""></div></div><!-- 이미지 없으면 calss .nodata  -->
+								</th:block>
+							</div>
+							<!-- Add Pagination -->
+							<div class="swiper-pagination"></div>
+						</div>
+					</div>
+				<!-- //리뷰사진영역 -->
+				<!-- 리뷰내용 -->
+					<div class="pop_detail">
+						<button type="button" class="pop_open_btn"><span class="sr-only"></span></button>
+						<div class="comment_wrap">
+							<div class="review_list">
+								<ul>
+									<li>
+										<div class="review">
+											<div class="info_box">
+												<div class="star_score" th:with="starScore=${#numbers.formatDecimal((review.iscore*100/5), 0,0)}">
+													<span class="star">
+														<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+													</span>
+												</div>
+												<div class="writer">
+													<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
+													<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
+												</div>
+											</div>
+											<div class="response_box">
+												<div>
+													<dl>
+														<div th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}" >
+															<dt >구매옵션</dt>
+															<dd> 
+															<th:block th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}">
+															<th:block th:text="${reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2}">베이지 / 100</th:block>
+															<th:block th:if="${not goodsStatus.last}" th:text="${','}"></th:block>
+															</th:block>
+															</dd>
+														</div>
+														<div>
+															<dt>키/몸무게</dt>
+															<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
+																<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
+															</dd>
+														</div>
+													</dl>
+												</div>
+											</div>
+											<div class="txt_review_box">
+												<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">옷</p>
+											</div>
+											<div class="response_box2"  th:if="${not #strings.isEmpty(review.sizeGb)}">
+												<div>
+													<dl>
+														<div>
+															<dt>사이즈</dt>
+															<dd th:text="${review.scoreSizeNm}">작음</dd>
+														</div>
+														<div>
+															<dt>컬러</dt>
+															<dd th:text="${review.scoreColorNm}">밝음</dd>
+														</div>
+														<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+														<div>
+															<dt>핏</dt>
+															<dd th:text="${review.scoreFitNm}">레귤러</dd>
+														</div>
+														<div>
+															<dt>두께감</dt>
+															<dd th:text="${review.scoreThickNm}">적당함</dd>
+														</div>
+														</th:block>
+														<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+														<div>
+															<dt>무게감</dt>
+															<dd th:text="${review.scoreWeightNm}">레귤러</dd>
+														</div>
+														<div>
+															<dt>볼너비</dt>
+															<dd th:text="${review.scoreBallNm}">적당함</dd>
+														</div>
+														</th:block>
+													</dl>
+												</div>
+											</div>
+											<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
+												<div class="reply">
+													<div class="reply_writer">
+														<span class="wr_name">관리자</span>
+														<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
+													</div>
+													<div class="reply_txt">
+														<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
+															안녕하세요, 스타일24 관리자입니다.
+														</p>
+													</div>
+												</div>
+											</div>
+										</div>
+									</li>                               
+								</ul>
+							</div>
+						</div>
+					</div>
+				<!-- //리뷰내용 -->
+			</div>
+		</div>
+	</div>
+</div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	$(document).ready( function() {
+		 //슬라이드 - 포토,영상리뷰팝업
+		let reviewAttchSq = 0; 
+		if (!gagajf.isNull( [[${review.attachSq}]])){
+			reviewAttchSq = [[${review.attachSq}]];
+		}
+//		reviewAttchSq = Number(reviewAttchSq) +1;
+//		console.log("reviewAttchSq {}",reviewAttchSq);
+        var photoreviewdetailSwiper = new Swiper('.pd_photoreviewdetail_pop .area_slider .swiper-container', {
+            observer: true,
+            observeParents: true,
+            slidesPerView: 1,
+            pagination: {
+                el: '.swiper-pagination',
+                type: 'fraction',
+            },
+        });
+        
+        //선태 이미지 노출
+        photoreviewdetailSwiper.slideTo(reviewAttchSq, 0, false); 
+    	
+        // 포토,베스트리뷰숨김
+        var review_open=$(".btn_review_open");
+        $(document).on('click','.btn_review_open',function(e){
+            $(this).toggleClass('active');
+            $(this).next(".review_list").toggleClass('active');
+            return false;
+        });
+
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 20 - 10
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -570,23 +570,23 @@ $('#fileAdd').on('change', function() { fnChooseFile(this); });
 
 var fnChooseFile = function(obj) {
 	var picLength = $(".pics").length;
-	
 	// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
 	var file = obj.files[0];
 	
-/* 	if (!gagajf.isNull(file.size) && Number(file.size) > (10 * 1000000)) {        
-		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {                          
-			sureBtnText: "확인",                                                    
-			sureBtnClick: function() {                                            
-				$(obj).parent('.imgUpload').find('.removes').trigger('click');    
-			}                                                                     
-		});                                                                       
-		return false;                                                             
-	}                 */                                                             
 
 	if (!gagajf.isNull(file.name)) {
 		var extension = "\.(jpg|jpeg|png)$";
 		if ((new RegExp(extension, "i")).test(file.name)) {
+			if ( file.size > (10 * 1000000)) {        
+				mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {                          
+					sureBtnText: "확인",                                                    
+					sureBtnClick: function() {      
+						$(".pics").find(".removes").eq(0).trigger('click');
+					}                                                                     
+				});                                                                       
+				return false;                                                             
+			}         
+			
 			 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
 						, file
 						, function(result) {
@@ -596,6 +596,16 @@ var fnChooseFile = function(obj) {
 						}
 				); 
 		}else if((new RegExp("mp4", "i")).test(file.name)){
+			if ( file.size > (50 * 1000000)) {        
+				mcxDialog.alertC('동영상은 최대 50MB 이하 파일만 가능합니다.', {                          
+					sureBtnText: "확인",                                                    
+					sureBtnClick: function() {      
+						$(".pics").find(".removes").eq(0).trigger('click');
+					}                                                                     
+				});                                                                       
+				return false;                                                             
+			}  
+			
 			setTimeout(function(){
 				$(".imgUpload").find('.pics').eq(0).addClass("mov");
 				$(".pics").children().eq(0).append("<input type='hidden' name='kufKeyArr' id='kufKey"+(picLength+1)+"'>");

+ 7 - 7
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -416,16 +416,16 @@ if(template.length>0){
 			html += '			<div class="best_review">\n';
 			if(item.reviewSysImg!= null){
 				if (item.bestYn == 'Y') {
-					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'Y\', \'Y\',\''+item.reviewSq+'\',1);">\n';
+					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'Y\', \'Y\',\''+item.reviewSq+'\',0);">\n';
 				}else{
-					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'N\', \'Y\',\''+item.reviewSq+'\',1);">\n';
+					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'N\', \'Y\',\''+item.reviewSq+'\',0);">\n';
 				}
 				
 			}else{
 				if (item.bestYn == 'Y') {
-					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'Y\', \'N\',\''+item.reviewSq+'\',1);">\n';
+					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'Y\', \'N\',\''+item.reviewSq+'\',0);">\n';
 				}else{
-					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'N\', \'N\',\''+item.reviewSq+'\',1);">\n';
+					html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfPlanningReviewDetail(\''+item.goodsCd+'\',\'N\', \'N\',\''+item.reviewSq+'\',0);">\n';
 				}
 				
 			}
@@ -433,12 +433,12 @@ if(template.length>0){
 			html += '					<div class="pic">\n';
 			if(item.reviewSysImg!= null){
 				if (item.fileGb == 'M') { 
-					html += '								<span class="thumb mov" style="background-image: url('+ _uploadImageUrl+item.reviewSysImg +');"></span>\n';	
+					html += '								<span class="thumb mov" style="background-image: url('+ _kollusMediaUrl+'/poster/'+item.kmcKey +');"></span>\n';	
 				}else{
-					html += '								<span class="thumb" style="background-image: url('+ _uploadImageUrl +item.reviewSysImg +');"></span>\n';			
+					html += '								<span class="thumb" style="background-image: url('+ _uploadImageUrl +item.reviewSysImg +'?RS=340);"></span>\n';			
 				}
 			}else{
-				html += '								<span class="thumb" style="background-image: url('+ _uploadGoodsUrl+'/'+item.sysImgNm +');"></span>\n';	
+				html += '								<span class="thumb" style="background-image: url('+ _uploadGoodsUrl+'/'+item.sysImgNm +'?RS=340);"></span>\n';	
 			}
 			
 			html += '                   </div>\n';

+ 289 - 0
src/main/webapp/WEB-INF/views/web/planning/PlanningReviewDetailFormWeb.html

@@ -0,0 +1,289 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * * @source  : PlanningReviewDetailFormWeb.html
+ * @desc	: 리뷰 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.06.16   sowon		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="pdBestReviewLabel">리뷰상세</h5>
+		</div>
+		<div class="modal-body" id="reviewBody">
+		</div>
+	</div>
+</div>
+<form name="reviewDetailForm" id="reviewDetailForm" method="post">
+<input type="hidden" name="goodsCd" th:value="${review.goodsCd}" />
+<input type="hidden" name="bestYn" th:value="${review.bestYn}" />
+<input type="hidden" name="photoYn" th:value="${review.photoYn}" />
+<input type="hidden" name="reviewSq" th:value="${review.reviewSq}" />
+<input type="hidden" name="attachSq" th:value="${review.attachSq}" />
+</form>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	var fnReviewDetail = function() {
+		
+		var params = new Object();
+		params.goodsCd = $('#reviewDetailForm input[name=goodsCd]').val();
+		params.reviewSq = $('#reviewDetailForm input[name=reviewSq]').val();
+		params.bestYn =$('#reviewDetailForm input[name=bestYn]').val();
+		params.photoYn = $('#reviewDetailForm input[name=photoYn]').val();
+		
+		gagajf.ajaxSubmit("/planning/review/detail/list", "json", fnReviewDetailCallback, params);
+	}
+
+	var fnReviewDetailCallback = function(result) {
+		console.log(result);
+		$('#reviewBody').html('');
+		// 목록
+		if (result.reviewList != null && result.reviewList.length > 0) {
+			let fileGbClass = '';
+			let rdx = $('#reviewDetailForm input[name=attachSq]').val();
+			$.each(result.reviewList, function(idx, review) {
+				let tag = '';
+				tag +='<div class="pop_cont">\n';
+				tag +='<div class="swiper-container detail">\n';
+				tag +='<div class="swiper-wrapper">\n';
+				tag +='<div class="swiper-slide">\n';
+				
+				let reviewClass = 'empty_photo';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					reviewClass = '';
+				}
+				tag +='<div class="review '+reviewClass+'" >\n';  <!-- 첨부이미지 없을 시 empty_photo 클래스 추가 --> 
+				tag +='	<div class="pic">\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='		<span class="thumb '+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
+						if (reviewAttach.fileGb == "M") {
+				tag +='			<iframe width="100%" height="100%" src="'+_kollusMediaUrl +'/'+reviewAttach.kmcKey +'?player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>\n';
+						}else{
+				tag +='			<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
+						}
+				tag +='		</span>\n';
+						return false;
+					});	
+				}else{
+				tag +='		<span class="thumb">\n';
+				tag +='			<img src="'+_uploadGoodsUrl +'/'+review.sysImgNm+'?RS=545" alt="" onerror="' + _uximgUrl + '/images/pc/thumb/bg_item_none.png"  />\n';
+				tag +='		</span>\n';	
+				}
+				tag +='	</div>\n';
+				tag +='	<div class="review_cont">\n';
+				tag +='		<div class="box_wrap">\n';
+				tag +='			<div class="star_box">\n';
+				tag +='				<div class="star_score">\n';
+				tag +='					<span class="star">\n';
+				tag +='						<em class="progbar" style="width:'+(review.iscore*20)+'%;"></em>\n'; <!-- 평점 style로 표기 -->
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="response_box">\n';
+				tag +='				<div class="full">\n';
+				tag +='					<dl>\n';
+				
+				tag +='						<div>\n';
+				tag +='							<dt>구매옵션</dt>\n';
+				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
+				tag +='							<dd>\n';	
+					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
+				tag +='							<p><span>'+ reviewGoods.optCd1Nm +'</span> / <span>'+ reviewGoods.optCd2+'</span></p>\n';
+					});		
+				tag +='							<dd>\n';	
+				}
+
+				tag +='						</div>\n';
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				tag +='				<div class="full">\n';
+				tag +='					<dl>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>키/몸무게</dt>\n';
+				tag +='							<dd>'+review.height+'cm / '+review.weight +'kg \n';
+				tag +='							</dd>\n';
+				tag +='						</div>\n';
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				if (!gagajf.isNull(review.sizeGb)){  <!-- 사이즈구분(T:상의, B:하의, S:신발) -->
+				tag +='				<div>\n'; 
+				tag +='					<dl > \n';
+				tag +='						<div>\n';
+				tag +='							<dt>사이즈</dt>\n';
+				tag +='							<dd>'+review.scoreSizeNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>컬러</dt>\n';
+				tag +='							<dd>'+review.scoreColorNm+'</dd>\n';
+				tag +='						</div>\n';
+					if (review.sizeGb == 'T' || review.sizeGb == 'B'){
+				tag +='						<div>\n';
+				tag +='							<dt>핏</dt>\n';
+				tag +='							<dd>'+review.scoreFitNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>두께감</dt>\n';
+				tag +='							<dd>'+ review.scoreThickNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+					if (review.sizeGb == 'S'){
+				tag +='						<div>\n';
+				tag +='							<dt>무게감</dt>\n';
+				tag +='							<dd>'+review.scoreWeightNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>볼너비</dt>\n';
+				tag +='							<dd>'+review.scoreBallNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				}
+				tag +='			</div>\n';
+				tag +='			<div class="txt_review_box">\n';
+				tag +='				<p>' + review.reviewContent +'</p>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="writer_box">\n';
+				tag += '			<div class="writer">\n';
+				tag += '				<span class="wr_id">'+ review.maskingCustId +'</span>\n';
+				tag += '				<span class="wr_date">' + review.regDt + '</span>\n';
+				tag += '			</div>\n'
+				tag +='			</div>\n';
+				if (!gagajf.isNull(review.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">'+review.admRplDt+'</span>\n';
+				tag += '				</div>\n';
+				tag += '				<div class="reply_txt">\n';
+				tag += '					<p>' + review.admRpl+'</p>\n';
+				tag += '				</div>\n';
+				tag += '			</div>\n';
+				tag += '		</div>\n';	
+				}
+				tag +='		</div>\n';
+				tag +='	</div>\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length >= 2){
+				tag +='	<div class="thumblist">\n';
+				tag +='		<ul>\n';
+					let activeClass = '';
+					
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						activeClass = '';
+						if (aIdx == rdx){
+							activeClass = 'active';
+						}
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='			<li>\n';
+				tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+				
+					if (reviewAttach.fileGb == "M") {
+				tag +='					<span class="thumb '+fileGbClass+'"><iframe width="100%" height="100%" src="'+_kollusMediaUrl +'/'+reviewAttach.kmcKey +'?player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></span>\n';
+					}else{
+				tag +='					<span class="thumb" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';
+				tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
+					}
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</li>\n';
+					});
+				tag +='		</ul>\n';
+				tag +='	</div>\n';
+				}
+				tag +='</div>\n';
+				
+				tag +='</div>\n';
+				tag +='</div>\n';
+				tag +='</div>\n';
+				tag +='</div>\n';
+				
+				$('#reviewBody').append(tag);
+				
+				 $('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+				        var $this = $(this);
+				        
+				        var thumbCount = $this.find('.thumblist ul li').length;
+				        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+				        var thumbMargin = 8 * thumbCount;
+				        var thumbListWidth = thumbUlWidth + thumbMargin;
+
+				        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+				        
+				    });
+				
+				$('.pd_photoreviewdetail_pop .thumblist ul li').eq(rdx).trigger("click");
+			});
+		}
+		
+	}
+	
+	// 다른 상품평 보기
+	var fnReviewNext = function(reviewSq){
+		if (gagajf.isNull(reviewSq)) return false;
+		
+		$('#reviewDetailForm input[name=reviewSq]').val(reviewSq);
+		fnReviewDetail();
+	}
+	
+	//$(document).ready( function() {
+		
+		fnReviewDetail();
+       
+		 //슬라이드 - 상품 베스트 리뷰 자세히보기 영역 
+	    var photoReviewDetailSwiper = new Swiper('.pd_photoreviewdetail_pop .swiper-container.detail', {
+	        effect :'fade',
+	        slidesPerView: 1,
+	        spaceBetween: 0,
+	        simulateTouch:false,
+	        navigation: {
+	            nextEl: '.pd_photoreviewdetail_pop .swiper-button-next',
+	            prevEl: '.pd_photoreviewdetail_pop .swiper-button-prev',
+	        },
+	    });   
+
+	    $('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+	        var $this = $(this);
+	        
+	        var thumbCount = $this.find('.thumblist ul li').length;
+	        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+	        var thumbMargin = 8 * thumbCount;
+	        var thumbListWidth = thumbUlWidth + thumbMargin;
+
+	        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+	        
+	    });
+
+	    $(document).on('click','.pd_photoreviewdetail_pop .thumblist ul li',function(e){
+
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
+	        $(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
+	        $(this).find(".pic").addClass('active');
+
+	        var thumbIndex = $(this).index();
+	        thumbContentHtml = $(this).find('.pic .thumb').html();
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbContentHtml);
+
+	        return false;
+	    });
+	//});		
+
+	 
+/*]]>*/
+</script>	
+ </html>

+ 31 - 0
src/main/webapp/ux/style24_link.js

@@ -101,6 +101,7 @@ const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 							// 기획
 const _PAGE_PLANNING_DETAIL = _frontUrl + "/planning/detail/form";						// 기획전 상세
 const _PAGE_PLANNING_CPN_DOWNLOAD = "/planning/coupon/download";						// 상품쿠폰다운로드
 const _PAGE_PLANNING_REPLY_DETAIL_LAYER = _frontUrl + "/planning/reply/detail/layer";	// 상품평- 상세(포토)
+const _PAGE_PLANNING_REVIEW_DETAIL_LAYER = _frontUrl + "/planning/review/detail/layer";	// 기획전 리뷰 상세
 
 //== 핫딜==/
 const _PAGE_SOCIAL_MAIN = _frontUrl + "/social/main/form";						// 소설(핫딜) 메인
@@ -1675,4 +1676,34 @@ var cfnGoToSearchGoodsListForm = function (keyword, brandGroupNo) {
 	if (typeof (brandGroupNo) != 'undefined') params += '&brandGroupNo=' + brandGroupNo;
 
 	cfnGoToPage(_PAGE_SEARCH_GOODS + params);
+}
+
+
+/**
+* @type   : function
+* @access : public
+* @desc   : 기획전 리뷰상세 보기
+* <pre>
+*		cfPlanningReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq);
+* </pre>
+*/
+function cfPlanningReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq) {
+	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade photo_comment_popup pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
+
+	if ($('#layer_review_best').length == 0) {
+		$('body').append(str);
+	}else{
+		$("#layer_review_best").modal("show");
+	}
+	
+	var params = '?goodsCd=' + goodsCd;
+	params += '&reviewSq=' + reviewSq;
+	params += '&bestYn=' + bestYn;
+	params += '&photoYn=' + photoYn;
+	if (typeof (attachSq) != 'undefined') params += "&attachSq=" + attachSq;
+
+	cfnOpenLayer(_PAGE_PLANNING_REVIEW_DETAIL_LAYER+params, 'layer_review_best',  null, fnReviewDetailLayerCollBack);
 }