tsit14 il y a 5 ans
Parent
commit
98349ae948
30 fichiers modifiés avec 1045 ajouts et 358 suppressions
  1. 0 9
      src/main/java/com/style24/front/biz/dao/TsfCouponDao.java
  2. 5 1
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  3. 0 13
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  4. 1 1
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  5. 48 1
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  6. 4 1
      src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java
  7. 4 0
      src/main/java/com/style24/persistence/domain/Login.java
  8. 7 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  9. 1 103
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  10. 4 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfLogin.xml
  11. 10 6
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  12. 3 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  13. 2 2
      src/main/resources/config/application-style.yml
  14. 11 0
      src/main/webapp/WEB-INF/views/mob/SigninFormMob.html
  15. 11 0
      src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html
  16. 49 3
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  17. 12 0
      src/main/webapp/WEB-INF/views/mob/customer/ConsentUseInfoFormMob.html
  18. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html
  19. 7 7
      src/main/webapp/WEB-INF/views/mob/planning/PlanningDetailFormMob.html
  20. 3 2
      src/main/webapp/WEB-INF/views/mob/planning/PlanningMainFormMob.html
  21. 190 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningReviewDetailFormMob.html
  22. 52 0
      src/main/webapp/WEB-INF/views/web/display/SearchGoodsListFormWeb.html
  23. 20 10
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  24. 7 7
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  25. 289 0
      src/main/webapp/WEB-INF/views/web/planning/PlanningReviewDetailFormWeb.html
  26. 89 4
      src/main/webapp/biz/search.js
  27. 181 178
      src/main/webapp/ux/mo/css/layout_m.css
  28. 2 2
      src/main/webapp/ux/mo/css/style24_m.css
  29. 1 1
      src/main/webapp/ux/pc/css/common.css
  30. 31 0
      src/main/webapp/ux/style24_link.js

+ 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 - 쿠폰정보

+ 5 - 1
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -301,6 +301,7 @@ public class TsfCartService {
 	public void saveSetTypeCartInfo(Collection<Cart> params, List<Integer> cartSqs) {
 		Cart cart = new Cart();
 		StringBuilder sb = new StringBuilder();
+		String cartGb = "";
 
 		// 로그인 정보
 		if(TsfSession.isLogin()) {
@@ -409,6 +410,7 @@ public class TsfCartService {
 			cartSqComma.append(cartSq);
 			i++;
 		}
+
 		if(chkGoOrderForm) {
 			TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
 		}
@@ -441,6 +443,7 @@ public class TsfCartService {
 		}
 
 		// 세션 추가용 변수
+		String cartGb = params.iterator().next().getCartGb();
 		List<String> sendCartSqList = new ArrayList<String>();
 		for(Cart item : params) {
 			item.setCartGb(cart.getCartGb());
@@ -485,7 +488,8 @@ public class TsfCartService {
 			cartSqComma.append(cartSq);
 			i++;
 		}
-		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && ("O".equals(params.iterator().next().getCartGb()) || "G".equals(params.iterator().next().getCartGb()))) {
+
+		if (!StringUtils.isEmpty(cartGb) && ("O".equals(cartGb) || "G".equals(cartGb))) {
 			TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
 		}
 	}

+ 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 쿠폰 다운 처리

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

@@ -1057,7 +1057,7 @@ public class TsfOrderController extends TsfBaseController {
 
 				// 주문완료 안내 메일 보내기
 				if (StringUtils.isNotBlank(replaceInfo.getString("ordEmail"))) {
-					//mailService.sendOrderComplete(replaceInfo, userNo);
+					// mailService.sendOrderComplete(replaceInfo, userNo);
 				}
 			} catch (Exception e) {
 				// TODO Auto-generated catch block

+ 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);
 	 }
+	 
+	 
 }

+ 4 - 1
src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java

@@ -170,7 +170,10 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 		result.setString("status", "OK");
 		result.setString("returnUrl", returnUrl);
 		result.setString("custNo", loginDetails.getUsername()); // 로그인 후 APP푸시SDK 연동을 위해
-
+		if (loginDetails.isLogin()) {
+			result.setString("appAgreeDt", loginDetails.getLoginInfo().getAppAgreeDt());
+			result.setString("mkAgreeDt", loginDetails.getLoginInfo().getMkAgreeDt());
+		}
 		GagaStringUtil.write(response, result);
 	}
 

+ 4 - 0
src/main/java/com/style24/persistence/domain/Login.java

@@ -49,6 +49,10 @@ public class Login extends TscBaseDomain {
 	private String tempPasswdYn;	// 임시비밀번호여부
 	private int pwdChgDay;			// 비밀번호변경일자
 	private String ci;				// CI(본인인증여부)
+	private String appAgreeYn;		// 앱푸시수신동의여부
+	private String appAgreeDt;		// 앱푸시수신동의일시
+	private String mkAgreeYn;		// 마케팅푸시수신동의여부
+	private String mkAgreeDt;		// 마케팅푸시수신동의일시
 
 	// 암호화 대상 복호화 처리 =================================================
 	public String getCustNm() {

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

@@ -818,7 +818,8 @@
 														   AND CUST_NO = #{custNo} ) A
 												),0)
 		WHERE  CART_SQ = #{updCartSq}
-		AND	CUST_NO = #{custNo}
+		AND    CUST_NO = #{custNo}
+		AND    CART_GB = 'G026_BC'
 	</update>
 
 	<!-- 로그인 후 장바구니단품 삭제 -->
@@ -828,7 +829,8 @@
 		WHERE  CART_SQ IN (SELECT CART_SQ
 						   FROM   TB_CART
 						   WHERE  CART_SQ = #{delCartSq}
-						   AND	CUST_NO = #{custNo}
+						   AND    CUST_NO = #{custNo}
+		                   AND    CART_GB = 'G026_BC'
 						  )
 	</delete>
 
@@ -837,7 +839,8 @@
 		/* TsfCart.deleteCartAfterLogin */
 		DELETE FROM TB_CART
 		WHERE  CART_SQ = #{delCartSq}
-		AND	CUST_NO = #{custNo}
+		AND    CUST_NO = #{custNo}
+		AND    CART_GB = 'G026_BC'
 	</delete>
 	
 	<!-- 로그인 후 장바구니이력 생성 -->
@@ -873,6 +876,7 @@
 			 , NOW()
 		FROM   TB_CART C
 		WHERE  CART_SQ = #{updCartSq}
+		AND    CART_GB = 'G026_BC'
 	</update>
 
 	<!-- 장바구니 상품 정보 조회 -->

+ 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

+ 4 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfLogin.xml

@@ -31,6 +31,10 @@
 		     , CI                                                        /*CI본인인증여부*/
 		     , BIRTH_YMD                                                 /*생년월일*/
 		     , SEX_GB                                                    /*성별*/
+		     , APP_AGREE_YN
+		     , DATE_FORMAT(APP_AGREE_DT, '%Y%m%d%H%i%S')  AS APP_AGREE_DT
+		     , MK_AGREE_YN
+		     , DATE_FORMAT(MK_AGREE_DT, '%Y%m%d%H%i%S')   AS MK_AGREE_DT
 		FROM   TB_CUSTOMER A
 		WHERE  1 = 1
 		<choose>

+ 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

+ 2 - 2
src/main/resources/config/application-style.yml

@@ -110,5 +110,5 @@ naverPay:
 # 검색엔진(NHN다이퀘스트)
 search:
     engine:
-        diquest.ip: 133.186.171.33
-        diquest.port: 44555
+        diquest.ip: 172.30.89.120
+        diquest.port: 5555

+ 11 - 0
src/main/webapp/WEB-INF/views/mob/SigninFormMob.html

@@ -171,6 +171,9 @@
 	var fnReloadAfterLogin = function(result) {
 		if (result.status === 'OK') {
 			if (_isApp === 'true') {
+				if (gagajf.isNull(result.appAgreeDt)) {
+					fnAppPushAgreeUpdate('Y');
+				}
 				document.location.href = "idsend://?id=" + result.custNo + "^link=" + result.returnUrl;
 			} else {
 				document.location.href = result.returnUrl;
@@ -331,6 +334,14 @@
 		}
 	};
 
+	// 앱푸시동의 데이터 처리
+	var fnAppPushAgreeUpdate = function (appAgreeYn) {
+		let params = {}
+		params.appAgreeYn = appAgreeYn;
+		let jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit('/app/appagree/update', jsonData);
+	}
+
 	$(document).ready(function() {
 
 		$('#loginForm input[name=loginId]').val(gagajf.getCookie(ckLoginId));

+ 11 - 0
src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html

@@ -100,6 +100,9 @@
 	var fnReloadAfterLogin = function(result) {
 		if (result.status === 'OK') {
 			if (_isApp === 'true') {
+				if (gagajf.isNull(result.appAgreeDt)) {
+					fnAppPushAgreeUpdate('Y');
+				}
 				document.location.href = "idsend://?id=" + result.custNo + "^link=" + result.returnUrl;
 			} else {
 				document.location.href = result.returnUrl;
@@ -140,6 +143,14 @@
 
 		return; // 정상적으로 로그인 되지 않았으므로 return
 	}
+		// 앱푸시동의 데이터 처리
+	var fnAppPushAgreeUpdate = function (appAgreeYn) {
+		let params = {}
+		params.appAgreeYn = appAgreeYn;
+		let jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit('/app/appagree/update', jsonData);
+	}
+
 	$(document).ready(function() {
 		if (gagajf.isNull(resultMap.snsId) && gagajf.isNull(resultMap.snsType)){
 			mcxDialog.alertC("인증에 실패하였습니다.<br> 로그인 정보를 확인해주시기 바랍니다.", {

+ 49 - 3
src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html

@@ -132,6 +132,29 @@
 		<div class="btPopAuto_body"></div>
 	</div>
 
+	<!--앱 마케팅 수신동의-->
+	<aside class="etcApp" id="alramHide" style="display: none;">
+		<!-- 마케팅 알람 수신 동의 -->
+		<div class="alramWrap">
+			<div class="inner">
+				<div class="titWrap">
+					<h2>마케팅 PUSH알림 수신동의</h2>
+				</div>
+			</div>
+			<div class="inner">
+				<div>
+					<img src="/images/mo/page_consentAlarm.jpg" alt="스타일 24에서 진행하는 다양한 혜택 알림을 받아보시겠습니까? 마케팅PUSH알림 수신에 동의하시면 이벤트, 쿠폰, 할인 안내 등 다양한 소식을 받으실 수 있습니다.">
+				</div>
+				<button class="alramClose" data-role="alramClose" tabindex="0"><a href="javascript:void(0);" id="btnMkPushClose">다음에 받을게요</a></button>
+			</div>
+			<div class="inner">
+				<div class="btn_group btn_group_flex">
+					<div><button type="button" id="btnMkPushAgree" class="btn btn_primary"><span>네, 받아볼게요</span></button></div>
+				</div>
+			</div>
+		</div>
+	</aside>
+
 <script th:inline="javascript">
 /*<![CDATA[*/
 	function menu() {
@@ -344,11 +367,34 @@
 				$('#spanGnbCartCnt').show();
 			}
 		});
-		
-		
+
+		if (_isApp === 'true') {
+			//$('#alramHide').show();
+		}
 		
 	});
-	
+
+	// 앱마케팅푸시 수신거부
+	$(document).on('click','#btnMkPushClose',function(){
+	  $('#alramHide').hide();
+	  	// 수신거부
+		if (_osType === 'A') {
+
+		} else if (_osType == 'I') {
+
+		}
+	});
+
+	// 앱마케팅 푸시 수신동의
+	$(document).on('click','#btnMkPushAgree',function(){
+		$('#alramHide').hide();
+		if (_osType === 'A') {
+
+		} else if (_osType == 'I') {
+
+		}
+	});
+
 
 	if($(".popup_main_notice").hasClass("active")){
 		$("body").css({"overflow":"hidden"});

+ 12 - 0
src/main/webapp/WEB-INF/views/mob/customer/ConsentUseInfoFormMob.html

@@ -126,6 +126,9 @@
 	var fnReloadAfterLogin = function(result) {
 		if (result.status === 'OK') {
 			if (_isApp === 'true') {
+				if (gagajf.isNull(result.appAgreeDt)) {
+					fnAppPushAgreeUpdate('Y');
+				}
 				document.location.href = "idsend://?id=" + result.custNo + "^link=" + result.returnUrl;
 			} else {
 				document.location.href = result.returnUrl;
@@ -141,6 +144,15 @@
 		$.modal.close();
 	});
 
+		// 앱푸시동의 데이터 처리
+	var fnAppPushAgreeUpdate = function (appAgreeYn) {
+		let params = {}
+		params.appAgreeYn = appAgreeYn;
+		let jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit('/app/appagree/update', jsonData);
+	}
+
+
 	$(document).ready(function () {
 		$('.close-modal').on('click', function () {
 			cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html

@@ -46,7 +46,7 @@
 										</div>
 										<div class="info_box">
 											<div class="od_name">
-												<div class="goods_date"><span class="date" th:text="${reviewInfo.regDt}"></span> 구매</div>
+												<div class="goods_date"><span class="date" th:text="${reviewInfo.ordDt}"></span> 구매</div>
 												<div class="brand">
 													<span th:text="${reviewInfo.brandNm}"></span>
 												</div>

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

+ 3 - 2
src/main/webapp/WEB-INF/views/mob/planning/PlanningMainFormMob.html

@@ -70,8 +70,8 @@
 						
 						$.each(result, function(idx, item) {
 							let tag = '<div>\n';
-							tag += '	<div class="visual" onclick="cfnGoToPlanDetail(\'' + item.planSq + '\')">\n';
-							
+							tag += '	<div class="visual">\n';
+							tag += '   <a href="javascript:void(0);" onclick="cfnGoToPlanDetail(\'' + item.planSq + '\')">';
 							if (item.newYn == 'Y') {
 								tag += '		<div class="shape ranker"><span>NEW</span></div>\n';
 							}
@@ -83,6 +83,7 @@
 							tag += '			<p>' + item.planNm + '</p>\n';
 							tag += '			<p class="txt_xs">' + item.dtlTitle1 + '</p>\n';
 							tag += '		</div>\n';
+							tag += '      </a>';
 							tag += '	</div>\n';
 							if (item.planningGoodsList.length > 0) {
 								tag += '	<div class="itemsGrp n3">\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>

+ 52 - 0
src/main/webapp/WEB-INF/views/web/display/SearchGoodsListFormWeb.html

@@ -901,6 +901,58 @@
 
 		// 카테고리 그리기
 		let fnGetSearchCategoryList = function (cate1){
+			let tag = '';
+			if(cate1 != null){
+				tag += '<li>\n';
+				tag += '	<a href="javascript:void(0);" onclick="fnSetCateTest(this, \'off\', \''+cate1.cate1No+'\');" cateFullNm="'+cate1.cate1Nm+'" data-open="N" data-depth="1" data1="'+cate1.cate1No+'">'+cate1.cate1Nm+'</a>';
+				if(cate1.leafYn == 'N' && cate1.cate2List.length > 0){
+					tag += '<div class="sub_cate">\n';
+					tag += '	<ul>\n';
+					$.each(cate1.cate2List, function (idx2,cate2){
+						tag += '<li><a href="javascript:void(0);" onclick="fnSetCateTest(this, \'off\', \''+cate1.cate1No+'\',\''+cate2.cate2No+'\');" cateFullNm="'+cate1.cate1Nm+'>'+cate2.cate2Nm+'" data-open="N" data-depth="2" data1="'+cate1.cate1No+'" data2="'+cate2.cate2No+'">'+cate2.cate2Nm+'</a>\n';
+						if(cate2.leafYn == 'N' && cate2.cate3List.length > 0){
+							tag += '<div class="sub_cate">\n';
+							tag += '	<ul>\n';
+							$.each(cate2.cate3List, function (idx3,cate3){
+								tag += '<li><a href="javascript:void(0);" onclick="fnSetCateTest(this, \'off\', \''+cate1.cate1No+'\',\''+cate2.cate2No+'\',\''+cate3.cate3No+'\');" cateFullNm="'+cate1.cate1Nm+'>'+cate2.cate2Nm+'>'+cate3.cate3Nm+'" data-open="N" data-depth="3" data1="'+cate1.cate1No+'" data2="'+cate2.cate2No+'" data3="'+cate3.cate3No+'">'+cate3.cate3Nm+'</a>\n';
+								if(cate3.leafYn == 'N' && cate3.cate4List.length >0){
+									tag += '<div class="sub_cate">\n';
+									tag += '	<ul>\n';
+									$.each(cate3.cate4List, function (idx4,cate4){
+										tag += '<li><a href="javascript:void(0);" onclick="fnSetCateTest(this, \'off\', \''+cate1.cate1No+'\',\''+cate2.cate2No+'\',\''+cate3.cate3No+'\',\''+cate4.cate4No+'\');" cateFullNm="'+cate1.cate1Nm+'>'+cate2.cate2Nm+'>'+cate3.cate3Nm+'>'+cate4.cate4Nm+'" data-open="N" data-depth="4" data1="'+cate1.cate1No+'" data2="'+cate2.cate2No+'" data3="'+cate3.cate3No+'" data4="'+cate4.cate4No+'">'+cate4.cate4Nm+'</a>\n';
+										/*if(cate4.leafYn = 'N' && cate4.cate5List.length>0){
+											tag += '<div class="sub_cate">\n';
+											tag += '	<ul>\n';
+											$.each(cate4.cate5List, function (idx5,cate5){
+												tag += '<li><a href="javascript:;">'+cate5.cate5Nm+'</a>\n';
+												tag += '</li>\n';
+											});
+											tag += '	</ul>\n';
+											tag += '</div>\n';
+										}*/
+										tag += '</li>\n';
+									});
+									tag += '	</ul>\n';
+									tag += '</div>\n';
+								}
+								tag += '</li>\n';
+							});
+							tag += '	</ul>\n';
+							tag += '</div>\n';
+						}
+						tag += '</li>\n';
+						// tag += '		<li><a href="javascript:;>'+cate2.cate2Nm+'</a></li>\n';
+					});
+					tag += '	</ul>\n';
+					tag += '</div>\n';
+				}
+				tag += '</li>\n';
+			}
+			return tag;
+		}
+
+		// 카테고리 그리기
+		let fnGetSearchCategoryList2 = function (cate1){
 			let tag = '';
 			if(cate1 != null){
 				tag += '<li>\n';

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

+ 89 - 4
src/main/webapp/biz/search.js

@@ -278,7 +278,6 @@ var filterSel = function (obj, gubun, staus, sizeGb){
 
 var fnFilterSet = function (searchId, sizeGb, appGb){
 	fnCategoryGoodsInfiniteScrollInit();
-	console.log(searchId);
 	$("#searchGoodsForm input:hidden[name="+searchId+"Arr]").remove();
 	var tag = '';
 	var mobTag = '';
@@ -304,7 +303,6 @@ var fnFilterSet = function (searchId, sizeGb, appGb){
 				$('#'+searchId+'FilterDiv').find('.daps1').find('.pic').find('span').html('');
 				var mobTag = '';
 				var color = $(this).attr('data-id');
-				console.log('color::'+$(this).attr('data-id'));
 				if(color=='FFFFFF'){
 					mobTag += '<span class="pdColor-color" style="background-color:#'+color+';border:1px solid #aaa;"></span>';
 				}else{
@@ -455,6 +453,94 @@ var fnClickGoodsCd = function (goodsCd, mainColorCd){
 	cfnGoToGoodsDetail(goodsCd, mainColorCd);
 }
 
+// 카테고리 set test
+var fnSetCateTest = function (obj, status, cate1No, cate2No, cate3No, cate4No, cate5No){
+	$('.fillter').show();
+	$("#categorySpan").remove();
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+
+	$("#ulAllCate").find('li > a').each(function (){
+		$(this).removeClass("on");
+		$(this).attr('onclick','fnSetCateTest(this, \'off\','+$(this).attr('data1')+','+$(this).attr('data2')+','+$(this).attr('data3')+','+$(this).attr('data4')+','+$(this).attr('data5')+');');
+	});
+
+	if(status=='on'){
+		// 필터 제거
+		filterStatHtml = '';
+
+		if($(obj).attr('data-depth') > 1){
+			// 상위카테고리 선택
+			let dep = $(obj).attr('data-depth') - 1;
+			if(dep>1){
+				$(obj).parent().parent().parent().parent().find('[data-depth='+dep+']').click();
+			}else{
+				$(obj).parent().parent().parent().parent().find('[data-depth='+dep+']').click();
+				$(obj).parent().parent().parent().parent().find('[data-depth='+dep+']').parent().find('.sub_cate').css('display','block');
+			}
+			gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+			filterStatHtml = $("#filterData").html();
+		}else{
+			console.log('28');
+			gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+			filterStatHtml = $("#filterData").html();
+			fnSetCateFilter('', '', '', '', '');
+		}
+	}else{
+		$(obj).attr('onclick','fnSetCateTest(this, \'on\','+$(obj).attr('data1')+','+$(obj).attr('data2')+','+$(obj).attr('data3')+','+$(obj).attr('data4')+','+$(obj).attr('data5')+');');
+		$(obj).addClass("on");
+		let tag = '';
+		let cateNm = '';
+		tag += '<span id="categorySpan">\n';
+		if(!gagajf.isNull(cate1No)){
+			cateFullNm = $(obj).attr("cateFullNm");
+			cateNm  = cateFullNm;
+		}
+		if(!gagajf.isNull(cate2No)){
+			cateFullNm = $(obj).attr("cateFullNm");
+			cateNm  = cateFullNm;
+		}
+		if(!gagajf.isNull(cate3No)){
+			cateFullNm = $(obj).attr("cateFullNm");
+			cateNm  = cateFullNm;
+		}
+		if(!gagajf.isNull(cate4No)){
+			cateFullNm = $(obj).attr("cateFullNm");
+			cateNm  = cateFullNm;
+		}
+		tag += cateNm;
+		tag += '<a href="javascript:void(0);" class="filter_delete" onclick="fnDeleteCategoryFilter(this);"></a>\n';
+		tag += '</span>\n';
+
+		$("#filterData").append(tag);
+		filterStatHtml += tag;
+
+		gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+		fnSetCateFilter(cate1No, cate2No, cate3No, cate4No, cate5No);
+	}
+	
+}
+
+var fnDeleteCategoryFilter = function (obj){
+	filterStatHtml = '';
+	filterStatHtml = $("#filterData").html();
+	$("#ulAllCate").find('li > a').each(function (){
+		$(this).removeClass("on");
+		$(this).parent().removeClass("on");
+		$(this).parent().find('.sub_cate').css('display','none');
+	});
+	$("#searchGoodsForm input:hidden[name=cate1No]").remove();
+	$("#searchGoodsForm input:hidden[name=cate2No]").remove();
+	$("#searchGoodsForm input:hidden[name=cate3No]").remove();
+	$("#searchGoodsForm input:hidden[name=cate4No]").remove();
+	$("#searchGoodsForm input:hidden[name=cate5No]").remove();
+	$(obj).closest("span").remove();
+	fnSetFilterHtml();
+	fnCategoryGoodsInfiniteScrollInit();
+	fnSearchGoodsListSearch();
+}
+
+// 카테고리 set
 var fnSetCateFilter = function (cate1No, cate2No, cate3No, cate4No, cate5No){
 	fnCategoryGoodsInfiniteScrollInit();
 	$("#searchGoodsForm input:hidden[name=cate1No]").remove();
@@ -479,10 +565,9 @@ var fnSetCateFilter = function (cate1No, cate2No, cate3No, cate4No, cate5No){
 	if(!gagajf.isNull(cate5No)){
 		tag += '<input type="hidden" name="cate5No" value="'+cate5No+'"/>';
 	}
-
 	$("#searchGoodsForm").append(tag);
-	fnSetFilterHtml();
 
+	fnSetFilterHtml();
 	fnSearchGoodsListSearch();
 }
 

Fichier diff supprimé car celui-ci est trop grand
+ 181 - 178
src/main/webapp/ux/mo/css/layout_m.css


+ 2 - 2
src/main/webapp/ux/mo/css/style24_m.css

@@ -965,7 +965,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .my .lnb_list li a {display: block; padding: 2rem; background: url(/images/mo/ico_lnb_arrow.png) no-repeat right 2rem center; background-size:0.7rem 1.26rem;}
 
 .my .mem_rank {position: relative; padding:1.6rem 0; padding-left: 6rem;}
-.my .mem_rank .mem_name {dib font-size: 1.8rem; font-weight: 300;}
+.my .mem_rank .mem_name {display: inline-block; font-size: 1.8rem; font-weight: 300;}
 .my .mem_rank .mem_name strong {font-weight: 500;}
 .my .mem_rank .rank_txt {display: inline-block; font-size: 1.8rem; color: #666; font-weight: 500; padding-right: 1.7rem; background: url(/images/mo/ico_btn_detail03.png) no-repeat right top 5px; background-size:0.7rem 1.3rem;}
 .my .mem_rank .rank_txt02 button {display: inline-block; font-size: 14px; padding-right: 13px; margin-right: 20px; background: url(/images/pc/ico_mysm_arrow.png) no-repeat right top 6px;}
@@ -2596,7 +2596,7 @@ main.container .od_extra .inner:last-child {padding-bottom: 0;}
 #daumZipcodePop .modal-content {margin-top:5rem;}
 
 /* popup_메인공지 FULL */
-.popup_main_notice {position:fixed; left:0; top:0; right: 0; bottom: 0; z-index:90000; width: 100%; height: 100%; overflow-y:auto; background: #222; z-index: 100;}
+.popup_main_notice {position:fixed; left:0; top:0; right: 0; bottom: 0; z-index:9000; width: 100%; height: 100%; overflow-y:auto; background: #222;}
 .popup_main_notice .swiper-button-prev,
 .popup_main_notice .swiper-button-next {position:absolute; top:50%; transform:translateY(-50%); display:inline-block; width:6.0rem; height:6.0rem; background-image:url('/images/pc/btn_main_pop_arrow.png'); background-repeat:no-repeat; background-size:auto 100%; z-index:2;}
 .popup_main_notice .swiper-button-prev {left:0; background-position:0 50%;}

+ 1 - 1
src/main/webapp/ux/pc/css/common.css

@@ -830,7 +830,7 @@ content: "〉";font-size: 12px;padding-left: 8px;
 .itemOpt ul li:first-child{margin-left: 0px;}
 .itemOpt .exc{font-size: 14px;line-height: 1.2;display: inline-block;margin-left: 10px;}
 .itemBrand {margin: 0px 5px 12px;line-height: 12px;font-size: 12px;font-weight: 300;color: rgb(137, 137, 137);height:12px;}
-.itemComment{margin:20px 5px 0px;line-height: 1; font-size: 14px;font-weight: 300;color: #fd4802;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
+.itemComment{margin:0px 5px 20px;line-height: 1; font-size: 14px;font-weight: 300;color: #fd4802;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
 .itemName {	margin: 0px 5px 15px;line-height:20px;font-size: 14px;font-weight: 200;color:#222; height:40px;}
 .itemPrice * {margin-right: 7px;}
 .itemPrice {position: relative;line-height: 16px;font-size:16px;font-weight: 300;color: rgb(31, 31, 31);margin: 0px 5px;}

+ 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);
 }

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff