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

Merge remote-tracking branch 'origin/bin2107' into order

card007 5 лет назад
Родитель
Сommit
b059c76238
36 измененных файлов с 1895 добавлено и 797 удалено
  1. 28 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  2. 1 1
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  3. 8 3
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  4. 7 0
      src/main/java/com/style24/front/biz/thirdparty/SearchEngineDiquest.java
  5. 17 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  6. 2 2
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  7. 21 15
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  8. 18 0
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  9. 13 11
      src/main/java/com/style24/persistence/domain/GoodsSafeNo.java
  10. 1 0
      src/main/java/com/style24/persistence/domain/Review.java
  11. 13 10
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  12. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  13. 20 15
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  14. 3 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  15. 26 9
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  16. 6 5
      src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml
  17. 16 3
      src/main/resources/config/application-style.yml
  18. 38 12
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html
  19. 94 16
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  20. 670 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html
  21. 253 240
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  22. 86 54
      src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html
  23. 14 4
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  24. 5 5
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  25. 4 4
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  26. 1 1
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  27. 361 305
      src/main/webapp/WEB-INF/views/web/display/SearchLayerWeb.html
  28. 31 10
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  29. 67 32
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  30. 7 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  31. 5 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  32. 16 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html
  33. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  34. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  35. 12 17
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  36. 27 0
      src/main/webapp/ux/style24_link.js

+ 28 - 1
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -967,7 +967,6 @@ public class TsfCustomerService {
 		params.setCustNo(customer.getCustNo());
 		params.setSiteCd(customer.getSiteCd());
 		Collection<CustGrade> custGradePolicy = customerDao.getCustGradePolicy(params);
-		result.set("custGradePolicy", custGradePolicy);
 
 		CustGrade expctCustGrade;
 		for (CustGrade grade : custGradePolicy) {
@@ -1043,4 +1042,32 @@ public class TsfCustomerService {
 		}
 	}
 
+
+
+	/*
+	 * 고객 예상등급 이후 정보
+	 *
+	 * @param  custGrade - 고객번호
+	 * @return CustGrade
+	 * @author jsshin
+	 * @since 2021. 05. 11
+	 */
+	public GagaMap getNextCustGradeInfo(CustGrade custGrade) {
+		GagaMap result = new GagaMap();
+		// 1.고객 예상등급 이후 정보
+		List<CustGrade> custGradePolicy = (List<CustGrade>) customerDao.getCustGradePolicy(custGrade);
+		CustGrade nextCustGradePolicy = custGradePolicy.get(0);
+		nextCustGradePolicy.setCustNo(custGrade.getCustNo());
+		// 2.고객 예상등급 이후 정보로 주문금액 확인
+		CustGrade nextCustGrade = customerDao.getExpectedCustGrde(nextCustGradePolicy);
+		if (nextCustGrade != null) {
+			nextCustGradePolicy.setOrdCnt(nextCustGrade.getOrdCnt());
+			nextCustGradePolicy.setSumRealOrdAmt(nextCustGrade.getSumRealOrdAmt());
+		} else {
+			nextCustGradePolicy.setOrdCnt(0);
+			nextCustGradePolicy.setSumRealOrdAmt(0);
+		}
+		result.set("nextCustGradePolicy", nextCustGradePolicy);
+		return result;
+	}
 }

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

@@ -702,7 +702,7 @@ public class TsfGoodsService {
 			// 이미지 정보
 			goodsExtend.setGoodsImgList(goodsDao.getGoodsImgList(tmpGoods));
 			// 상품 안전인증 정보
-			//goodsExtend.setGoodsSafeNo(goodsDao.getGoodsSafeNo(tmpGoods));
+			goodsExtend.setGoodsSafeNo(goodsDao.getGoodsSafeNo(tmpGoods));
 
 		}
 		return getGoodsSetComposeList;

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

@@ -271,9 +271,7 @@ public class TsfReviewService {
 			}
 		}
 		
-		if (review.getConfirmYn()=="Y") {
-			reviewDao.updateMypageReviewConfimYn(review);
-		}
+		reviewDao.updateMypageReviewConfimYn(review);
 		
 	}
 		
@@ -288,11 +286,13 @@ public class TsfReviewService {
 	public void updateMypageReview(Review review) {
 		review.setRegNo(TsfSession.getInfo().getCustNo());
 		review.setUpdNo(TsfSession.getInfo().getCustNo());		
+		review.setConfirmYn("Y");
 		reviewDao.updateMypageReview(review);
 		reviewDao.reviewAttachDelete(review);
 		
 		//이미지등록
 		if(!StringUtils.isAllEmpty(review.getOrgFileNmArr())) {
+			review.setConfirmYn("Y");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -335,6 +335,7 @@ public class TsfReviewService {
 		}
 		
 		if(!StringUtils.isAllEmpty(review.getKufKeyArr())) {
+			review.setConfirmYn("N");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -342,11 +343,15 @@ public class TsfReviewService {
 			fileReview.setFileGb("M");
 			fileReview.setDelYn("N");
 			String[] fileItemVal1 = review.getKufKeyArr();
+			String[] fileItemVal2 = review.getKmcKeyArr();
 			for (int j = 0; j < fileItemVal1.length; j++) {
 				fileReview.setKufKey(fileItemVal1[j]);
+				fileReview.setKmcKey(fileItemVal2[j]);
 				reviewDao.saveReviewAttach(fileReview);
 			}
+			
 		}
+		reviewDao.updateMypageReviewConfimYn(review);
 	}
 	
 	/**

+ 7 - 0
src/main/java/com/style24/front/biz/thirdparty/SearchEngineDiquest.java

@@ -2,6 +2,10 @@ package com.style24.front.biz.thirdparty;
 
 import javax.annotation.PostConstruct;
 
+import com.diquest.ir.common.exception.IRException;
+import com.google.gson.Gson;
+import istyle.AutoSearch;
+import org.json.simple.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
@@ -10,6 +14,9 @@ import com.style24.persistence.domain.searchengine.SearchEngine;
 
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * 검색엔진 - NHN다이퀘스트
  *

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

@@ -921,4 +921,21 @@ public class TsfDisplayController extends TsfBaseController {
 		return diquest.getTrendKeywordList();
 	}
 
+	/**
+	 * 검색어 레이어
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 5. 11
+	 */
+	@PostMapping("/search/layer")
+	public ModelAndView searchLayerForm() {
+		ModelAndView mav = new ModelAndView();
+
+		//TODO : 이걸로 적용해야함
+//		mav.addObject("trendKeywordList",diquest.getTrendKeywordList());
+		mav.addObject("trendKeywordList",null);
+
+		mav.setViewName(super.getDeviceViewName("display/SearchLayer"));
+		return mav;
+	}
 }

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

@@ -237,7 +237,7 @@ public class TsfGoodsController extends TsfBaseController {
 //				// 상품 고시정보
 				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 				// 상품 안전인증 정보
-				//mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
+				mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
 
 			} else if (TscConstants.GoodsType.SET.value().equals(goods.getGoodsType())) {		// 셋트상품
 				mav.addObject("goodsComposeList", goodsService.getGoodsSetComposeList(paramsGoods));
@@ -1334,7 +1334,7 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 고시정보
 		mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 		// 상품 안전인증 정보
-		//mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods)); 
+		mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods)); 
 
 		// 상품 공통 베너
 		log.info("paramsGoods={}", paramsGoods);

+ 21 - 15
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1580,6 +1580,8 @@ public class TsfMypageController extends TsfBaseController {
 			result.set("message", "쿠폰이 발급되었습니다.");
 		}
 		result.set("status", "200");
+		
+		result.set("couponList", couponService.getQuickCouponDownList(coupon));
 		return result;
 	}
 
@@ -1643,9 +1645,9 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/complete/review/list")
 	@ResponseBody
 	public GagaMap getMypageCompleteReviewList(@RequestBody Review review) {
-
+		String frontGb = TsfSession.getFrontGb();
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
-
+		review.setFrontGb(frontGb);
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
 		}
@@ -1653,11 +1655,14 @@ public class TsfMypageController extends TsfBaseController {
 		int reviewExpireDay = eventService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value());
 		review.setReviewExpireDay(reviewExpireDay);
 		result.set("completeReviewCount", reviewService.getCompleteReviewList(review).size());
-		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
-		pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
-		review.setPageable(pageable);
 		
-		result.set("paging1", review);
+		if (frontGb == "P") {
+			TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
+			pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
+			review.setPageable(pageable);
+			
+			result.set("paging1", review);
+		}
 		
 		
 		result.set("dataList1", reviewService.getCompleteReviewList(review));
@@ -1675,9 +1680,9 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/already/review/list")
 	@ResponseBody
 	public GagaMap getMypageAlreadyReviewList(@RequestBody Review review) {
-
+		String frontGb = TsfSession.getFrontGb();
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
-
+		review.setFrontGb(frontGb);
 		GagaMap result = new GagaMap();
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
@@ -1685,11 +1690,12 @@ public class TsfMypageController extends TsfBaseController {
 		
 		review.setReviewExpireDay(eventService.getGoodsReviewPointExpireDays(TscConstants.Site.STYLE24.value()));
 		result.set("alreadyReviewCount", reviewService.getAlreadyReviewList(review).size());
-		
-		TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
-		pageable2.setTotalCount(reviewService.getAlreadyReviewList(review).size());
-		review.setPageable2(pageable2);
-		result.set("paging2", review);
+		if (frontGb == "P") {
+			TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
+			pageable2.setTotalCount(reviewService.getAlreadyReviewList(review).size());
+			review.setPageable2(pageable2);
+			result.set("paging2", review);
+		}
 		
 		result.set("dataList2", reviewService.getAlreadyReviewList(review));
 
@@ -1784,8 +1790,8 @@ public class TsfMypageController extends TsfBaseController {
 		review.setCustNo(TsfSession.getInfo().getCustNo());
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
 		reviewService.reviewDelete(review);
-		result.set("alreadyReviewCount",reviewService.getAlreadyReviewCount(review));
-		result.set("completeReviewCount",reviewService.getCompleteReviewCount(review));
+		result.set("alreadyReviewCount",reviewService.getAlreadyReviewList(review).size());
+		result.set("completeReviewCount",reviewService.getCompleteReviewList(review).size());
 		result.set("status", "200");
 		return result;
 	}

+ 18 - 0
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -7,11 +7,13 @@ import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
 
+import com.style24.persistence.domain.CustGrade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -579,6 +581,22 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 
+
+
+	@GetMapping("/next/custgrade/info/{nextGradeCd}")
+	@ResponseBody
+	public GagaMap getNextCustGradeInfo(@PathVariable String nextGradeCd) {
+		boolean isLogin = TsfSession.isLogin();
+		if (!isLogin) {
+			throw new IllegalStateException("로그인 하시기 바랍니다.");
+		}
+		CustGrade custGrade = new CustGrade();
+		custGrade.setSiteCd(TscConstants.Site.STYLE24.value());
+		custGrade.setCustNo(TsfSession.getInfo().getCustNo());
+		custGrade.setGradeCd(nextGradeCd);
+		return customerService.getNextCustGradeInfo(custGrade);
+	}
+
 	/**
 	 * 회원등급 쿠폰 다운로드
 	 *

+ 13 - 11
src/main/java/com/style24/persistence/domain/GoodsSafeNo.java

@@ -14,21 +14,23 @@ import lombok.Data;
 @Data
 public class GoodsSafeNo extends TscBaseDomain {
 
+//	private String goodsCd;
+//	private String goodsNum;
+//	private String certNum;
+//	private String certState;
+//	private String certDiv;
+//	private String certOrganName;
+//	private String certDt;
+
 	private String goodsCd;
-	private String goodsNum;
+	private String certTargetGb;
+	private String certFormGb;
+	private String certFormNm;
+	private String certType;
 	private String certNum;
 	private String certState;
 	private String certDiv;
 	private String certOrganName;
 	private String certDt;
-
-//	public boolean getIsCertNum() {
-//		if (this.certNum.matches(".*[0-9].*")) {
-//			return true;
-//		} else {
-//			return false;
-//		}
-//
-//	}
-
+	
 }

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

@@ -106,6 +106,7 @@ public class Review extends TscBaseDomain {
 	private int nextReviewSq;
 	private int reviewExpireDay;
 	private String kmcKey;
+	private String kufKey;
 	
 	private Integer custPntSq;		// 고객포인트일련번호
 	private int gvPntAmt;			// 지급포인트금액

+ 13 - 10
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -233,7 +233,8 @@
 		             , CP.CPN_NM                                              -- 쿠폰명
 		             , CP.DC_WAY                                              -- 할인방식
 		             , CP.DC_VAL                                              -- 할인값
-		             , CP.MAX_DC_AMT                                          -- 최대할인금액
+		             , (CASE WHEN CP.DC_WAY = 'G240_10' THEN CP.DC_VAL
+		                     ELSE CP.MAX_DC_AMT END) AS MAX_DC_AMT            -- 최대할인금액
 		             , CP.CURR_PRICE                                          -- 즉시쿠폰적용판매가
 		             , CP.CUST_PUB_LIMIT_QTY                                  -- 1인당 발급제한수량
 		             , CP.TOT_PUB_LIMIT_QTY                                   -- 총발행제한수량(0은 무제한)
@@ -250,7 +251,8 @@
 		             , CP.BUY_EDDT                                            -- 첫구매종료일시
 		             <![CDATA[
 		             , (CASE WHEN CP.DC_WAY = 'G240_10' THEN
-		                    (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < CP.DC_VAL THEN CP.MAX_DC_AMT ELSE CP.DC_VAL END)
+		           --         (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < CP.DC_VAL THEN CP.MAX_DC_AMT ELSE CP.DC_VAL END)
+		                       CP.DC_VAL
 		                ELSE
 		                     (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < FLOOR((CP.CURR_PRICE * DC_VAL / 100) / #{pointUnit}) * #{pointUnit} THEN CP.MAX_DC_AMT ELSE FLOOR((CP.CURR_PRICE * CP.DC_VAL / 100) / #{pointUnit}) * #{pointUnit} END)
 		                END) AS DC_AMT
@@ -420,7 +422,7 @@
 		               ) CP
 		               WHERE 1 = 1
 		               <![CDATA[
-		               AND CP.BUY_LIMIT_AMT <= CP.CURR_PRICE  -- 최소주문금액
+		              -- AND CP.BUY_LIMIT_AMT <= CP.CURR_PRICE  -- 최소주문금액
 		               ]]>
 		       ) Y
 		) A
@@ -484,7 +486,8 @@
 		             , CP.CPN_NM                                              -- 쿠폰명
 		             , CP.DC_WAY                                              -- 할인방식
 		             , CP.DC_VAL                                              -- 할인값
-		             , CP.MAX_DC_AMT                                          -- 최대할인금액
+		             , (CASE WHEN CP.DC_WAY = 'G240_10' THEN CP.DC_VAL
+		                     ELSE CP.MAX_DC_AMT END) AS MAX_DC_AMT            -- 최대할인금액
 		             , CP.CURR_PRICE                                          -- 즉시쿠폰적용판매가
 		             , CP.CUST_PUB_LIMIT_QTY                                  -- 1인당 발급제한수량
 		             , CP.TOT_PUB_LIMIT_QTY                                   -- 총발행제한수량(0은 무제한)
@@ -501,7 +504,8 @@
 		             , CP.BUY_EDDT                                            -- 첫구매종료일시
 		             <![CDATA[
 		             , (CASE WHEN CP.DC_WAY = 'G240_10' THEN
-		                    (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < CP.DC_VAL THEN CP.MAX_DC_AMT ELSE CP.DC_VAL END)
+		             --       (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < CP.DC_VAL THEN CP.MAX_DC_AMT ELSE CP.DC_VAL END)
+		                     CP.DC_VAL
 		                ELSE
 		                     (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < FLOOR((CP.CURR_PRICE * DC_VAL / 100) / #{pointUnit}) * #{pointUnit} THEN CP.MAX_DC_AMT ELSE FLOOR((CP.CURR_PRICE * CP.DC_VAL / 100) / #{pointUnit}) * #{pointUnit} END)
 		                END) AS DC_AMT
@@ -671,7 +675,7 @@
 		               ) CP
 		               WHERE 1 = 1
 		               <![CDATA[
-		               AND CP.BUY_LIMIT_AMT <= CP.CURR_PRICE  -- 최소주문금액
+		             --  AND CP.BUY_LIMIT_AMT <= CP.CURR_PRICE  -- 최소주문금액
 		               ]]>
 		       ) Y
 		) A
@@ -755,8 +759,7 @@
 		                             WHEN 'M' = #{frontGb} THEN CP.DC_MVAL
 		                             ELSE CP.DC_AVAL END) > 0                  -- PC, MOBILE,APP 별로 0 보다 큰 쿠폰
 		                AND   (
-		                        (CP.APPLY_SCOPE = 'A' ) 
-		                        OR  /* 적용대상:상품*/
+		                        /* 적용대상:상품*/
 		                        (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
 		                                                   WHERE CPN_ID = CP.CPN_ID
 		                                                   AND CPN_TARGET = 'G260_10'
@@ -1289,6 +1292,7 @@
 		      ,C.CUST_PUB_LIMIT_QTY 
 		      ,C.TOT_PUB_LIMIT_QTY
 		      ,C.MAX_DC_AMT 
+		      , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
 		      , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
 		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
 		              END
@@ -1335,8 +1339,7 @@
 		     WHERE CPN_ID = C.CPN_ID
 		     AND USABLE_CUST_GRADE IN (#{custGrade})              -- 사용가능고객구분
 		     ) <![CDATA[>=]]> 1
-		ORDER BY  C.AVAIL_EDDT,
-		CASE WHEN DC_WAY LIKE '%' THEN DC_VAL END DESC LIMIT 10
+		ORDER BY  C.REG_DT DESC ,C.AVAIL_EDDT ASC LIMIT 10
 	</select>
 	
 </mapper>

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

@@ -603,7 +603,7 @@
 		/* TsfCustomer.getExpectedCustGrde */
 		SELECT B.ORD_NO_CNT
 		     , B.SUM_REAL_ORD_AMT
-		     , #{gradeCd}        AS GRADE_CD
+		     , #{gradeCd}                         AS GRADE_CD
 		     , FN_GET_CODE_NM('G110', #{gradeCd}) AS GRADE_CD_NM
 		     , SUBSTRING(#{gradeCd}, 6, 2)        AS GRADE_CD_NO
 		FROM  (

+ 20 - 15
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -638,14 +638,19 @@
 	<!-- 상품  안전인증 정보  -->
 	<select id="getGoodsSafeNo"  parameterType="Goods" resultType="GoodsSafeNo">
 		/* TsfGoods.getGoodsSafeNo */
-		SELECT GOODS_CD
-		     , CERT_NUM
-		     , CERT_STATE
-		     , CERT_DIV
-		     , CERT_ORGAN_NAME
-		     , CERT_DT
-		FROM TB_GOODS_SAFE_NO A
+		SELECT  GOODS_CD
+		      , CERT_TARGET_GB
+		      , CERT_FORM_GB
+		      , FN_GET_CODE_NM('G084',CERT_FORM_GB) AS CERT_FORM_NM  
+		      , CERT_TYPE
+		      , CERT_NUM
+		      , CERT_STATE
+		      , CERT_DIV
+		      , CERT_ORGAN_NAME
+		      , CERT_DT
+		FROM TB_GOODS_SAFE_NO 
 		WHERE GOODS_CD = #{goodsCd}
+		AND CERT_TARGET_GB IN ('G083_1', 'G083_3')  -- 인증대상, 상세설명별도표기
 	</select>
 	
 	<!-- 상품  배송안내정보  -->
@@ -1009,7 +1014,7 @@
 		AND    G.MAIN_COLOR_CD = GI.COLOR_CD
 		AND    G.GOODS_STAT = 'G008_90' /*승인완료된상품만*/
 		AND    GI.DEFAULT_IMG_YN = 'Y' /*기본이미지만*/
-		GROUP  BY G.GOODS_CD, G.MAIN_COLOR_CD
+		GROUP  BY G.GOODS_CD, G.MAIN_COLOR_CD, GI.SYS_IMG_NM
 		ORDER  BY A.DISP_ORD DESC
 	</select>
 	
@@ -1160,7 +1165,7 @@
 		          -- , RANK() OVER (PARTITION BY F.FREEGIFT_SQ , F.FREEGIFT_SECTION_SQ ORDER BY  FG.FREEGIFT_VAL_SQ ) AS RNUM
 		    FROM TAB_FREEGOODS FG
 		     WHERE FG.ROWNUM = 1
-		    GROUP BY  FG.FREEGIFT_SQ , FG.FREEGIFT_SECTION_SQ , FG.ALL_YN , FG.SECTION_GB , FG.SECTION_VAL
+		    GROUP BY  FG.FREEGIFT_SQ , FG.FREEGIFT_SECTION_SQ , FG.ALL_YN , FG.SECTION_GB , FG.SECTION_VAL, FG.GOODS_NM, FG.ITEM_QTY
 		    ORDER BY FG.FREEGIFT_SQ, FG.FREEGIFT_SECTION_SQ
 		) Z
 		WHERE 1 = 1
@@ -2049,12 +2054,12 @@
 		               , G.GOODS_TNM                             /*상품타이틀명*/
 		               , G.MAIN_COLOR_CD                         /*대표색상코드*/
 		               , G.LIST_PRICE                            /*정상가(최초판매가)*/
-		               , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                      WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                      WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                      WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                      WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                      WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		               , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_PC_CURR_PRICE,G.CURR_PRICE)
+		                      WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_MO_CURR_PRICE,G.CURR_PRICE)
+		                      WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_APP_CURR_PRICE,G.CURR_PRICE)
+		                      WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE)
+		                      WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.MO_CURR_PRICE,G.CURR_PRICE)
+		                      WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.APP_CURR_PRICE,G.CURR_PRICE)
 		                      ELSE G.CURR_PRICE
 		                END                   AS CURR_PRICE     /*현재판매가*/
 		               , G.MIN_ORD_AMT                           /*최소주문금액*/

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

@@ -104,7 +104,7 @@
 		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
 		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
 		       AND CPH.PNT_AMT <![CDATA[>]]> 0
-		UNION ALL
+		UNION
 		      SELECT  CASE CPH.OCCUR_GB
 		                  WHEN 'G069_12' THEN '상품 구매'
 		                  WHEN 'G069_13' THEN '구매 취소'
@@ -199,7 +199,7 @@
 		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
 		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
 		       AND CPH.PNT_AMT <![CDATA[<]]> 0
-		UNION ALL
+		UNION
 		      SELECT  CASE CPH.OCCUR_GB
 		                  WHEN 'G069_12' THEN '상품 구매'
 		                  WHEN 'G069_13' THEN '구매 취소'
@@ -293,7 +293,7 @@
 		       WHERE CPH.CUST_NO = #{custNo}
 		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
 		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
-		UNION ALL
+		UNION
 		      SELECT  CASE CPH.OCCUR_GB
 		                  WHEN 'G069_12' THEN '상품 구매'
 		                  WHEN 'G069_13' THEN '구매 취소'

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

@@ -270,6 +270,7 @@
 		     , A.FILE_GB
 		     , A.SYS_FILE_NM
 		     , A.KMC_KEY
+		     , A.KUF_KEY
 		     , A.DEL_YN 
 		     , RANK() OVER(ORDER BY a.FILE_GB DESC) AS NUMB
 		FROM  TB_REVIEW R
@@ -278,9 +279,9 @@
 		WHERE R.DISP_YN = 'Y'
 		AND R.DEL_YN = 'N'
 		AND R.REVIEW_SQ = #{reviewSq}
-		AND (A.FILE_GB  = 'I'
+		AND (FILE_GB  = 'I'
 		     OR
-		     A.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y' AND  A.KMC_KEY IS NOT NULL
+		     FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'  AND  NULLIF(KMC_KEY,'') IS NOT NULL
 		    )
 	</select>
 	
@@ -345,7 +346,9 @@
 	<!-- 마이페이지 작성가능한 리뷰 -->
 	<select id="getCompleteReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getCompleteReviewList */
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingHeader"/>
+		</if>
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
 		     -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
@@ -465,7 +468,8 @@
 		                                   AND C.USE_YN = 'Y'
 				  WHERE 1=1
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
-				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+				-- AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+				AND OD.ORD_DTL_NO NOT 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.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = #{siteCd}
@@ -476,7 +480,9 @@
 				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM, Z.ORD_DTL_STAT_NM
 				, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingFooter"/>
+		</if>
 	</select>
 	
 	<!-- 마이페이지 리뷰작성 상품데이타 -->
@@ -832,7 +838,9 @@
 		   ,SCORE_WEIGHT   =  #{scoreWeight}     
 		   ,SCORE_BALL     =  #{scoreBall}  
 		   , DEL_YN        = 'N'     
-		   ,UPD_DT         =  now()     
+		   ,UPD_DT         =  now()  
+		   ,CONFIRM_YN     = 'Y'
+		   ,CONFIRM_DT     = NOW()   
 		WHERE REVIEW_SQ  = #{reviewSq}
 		AND   ORD_NO     = #{ordNo}
 		AND   ORD_DTL_NO = #{ordDtlNo}
@@ -843,14 +851,17 @@
 	<update id="updateMypageReviewConfimYn" parameterType="Review">
 		/* TsfReivew.updateMypageReviewConfimYn */
 		UPDATE TB_REVIEW
-		SET CONFIRM_YN = 'N'
-		   ,CONFIRM_DT = NOW()
+		<if test='confirmYn == "Y"'>
+		SET CONFIRM_DT = NOW()
+		   ,CONFIRM_YN = 'Y'
+		   </if>
+		   <if test='confirmYn == "N"'>
+		 SET CONFIRM_DT = NULL
+		    ,CONFIRM_YN = 'N'
+		   </if>
 		WHERE REVIEW_SQ  = #{reviewSq}
 	</update>
 	
-	
-	
-	
 	<select id="getAlreadyReviewCount" parameterType="Review" resultType="int">
 		/* TsfReivew.getAlreadyReviewCount */
 		SELECT  COUNT(*) AS CNT 
@@ -919,7 +930,9 @@
 	
 	<select id="getAlreadyReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getAlreadyReviewList */
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingHeader"/>
+		</if>
 		        SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
 		          -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		             , GROUP_CONCAT(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
@@ -1122,6 +1135,7 @@
 		   AND O.CUST_NO =  #{custNo}
 		   AND O.DISP_YN = 'Y'
 		   AND R.CONFIRM_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
 		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
@@ -1130,7 +1144,9 @@
 		        , Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM, Z.ORD_DTL_STAT_NM
 		        , Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingFooter"/>
+		</if>
 		</select>
 	
 	<select id="getReviewAttach" parameterType="Review" resultType="Review">
@@ -1175,6 +1191,7 @@
 			 , RA.ORG_FILE_NM
 			 , RA.SYS_FILE_NM
 			 , RA.KMC_KEY
+			 , RA.KUF_KEY
 			 , RA.FILE_GB
 			 , RA.DEL_YN
 		FROM TB_REVIEW R LEFT JOIN TB_REVIEW_ATTACH RA ON R.REVIEW_SQ = RA.REVIEW_SQ 

+ 6 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml

@@ -87,8 +87,9 @@
 		     GROUP BY GOODS_CD
 		)
 		, TAB_STOCK AS (
-		    SELECT G.GOODS_CD
-		         , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
+		     SELECT G.GOODS_CD
+		         , SUM(case WHEN S.SOLDOUT_YN = 'Y' THEN 0
+		                    ELSE S.CURR_STOCK_QTY - S.BASE_STOCK_QTY END ) AS STOCK_QTY_SUM
 		         , MIN(CASE WHEN S.SOLDOUT_YN = 'N' THEN S.OPT_CD ELSE 'XXX' END) AS OPT_CD 
 		    FROM   TAB_GOODS G
 		         , VW_STOCK S
@@ -98,15 +99,15 @@
 		    GROUP  BY G.GOODS_CD
 		    UNION ALL 
 		    SELECT G.GOODS_CD
-		         , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
+		         , SUM(caSE WHEN S.SOLDOUT_YN = 'Y' THEN 0
+		                    ELSE S.CURR_STOCK_QTY - S.BASE_STOCK_QTY END ) AS STOCK_QTY_SUM
 		         , MIN(CASE WHEN S.SOLDOUT_YN = 'N' THEN S.OPT_CD ELSE 'XXX' END) AS OPT_CD 
 		    FROM   TAB_GOODS G
 		         , VW_STOCK_COMPOSE S
 		    WHERE  G.GOODS_CD = S.GOODS_CD
 		    AND    G.GOODS_TYPE != 'G056_N'
 		    AND    S.DISP_YN = 'Y' /*노출하는상품만*/
-		    GROUP  BY G.GOODS_CD
-		)
+		    GROUP  BY G.GOODS_CD		)
 		SELECT G.BRAND_GROUP_NM
 		     , G.GOODS_CD
 		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/

+ 16 - 3
src/main/resources/config/application-style.yml

@@ -8,10 +8,23 @@ spring:
                 max-active: 10
                 max-idle: 10
                 min-idle: 2
-        host: 172.30.87.5
+#        host: 172.30.87.5
+#        port: 6379
+#        password: MdxpyGtipZSci6VhTpFdklXxb4Qv7zxEq3Jqg3ULekg=
+        host: 172.30.90.111
         port: 6379
-        password: MdxpyGtipZSci6VhTpFdklXxb4Qv7zxEq3Jqg3ULekg=
-
+        password:
+        cluster:
+            nodes:
+                172.30.90.111:6379
+                172.30.90.112:6379
+                172.30.90.113:6379
+                172.30.90.111:6380
+                172.30.90.112:6380
+                172.30.90.113:6380
+                172.30.90.111:6381
+                172.30.90.112:6381
+                172.30.90.113:6381
 # SSL Server
 has-ssl: false
 

+ 38 - 12
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html

@@ -185,27 +185,53 @@
 				</div>
 				</th:block>
 			</div>
-			<div class="area_kcl" th:if="${goodsSafeNo != null}">
+			
+			<th:block th:if="${goodsSafeNo != null}" >
+				<th:block th:if="${goodsSafeNo.certTargetGb == 'G083_3'}" >  <!-- 상세별도표시 -->
+			<div class="area_kcl no-mark">
 				<div>
-					<i class="ico ico_kcl"></i>
+					<p class="tit normal"><th:block th:if="${goodsSafeNo.certFormNm}" th:text="${goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
+					<p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
 				</div>
+			</div>	
+				</th:block>
+				<th:block th:unless="${goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
+					<th:block th:if="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
+			<div class="area_kcl">
+				<div><i class="ico ico_kcl"></i></div>
 				<div>
-					<p class="tit normal" th:utext="${goodsSafeNo.certDiv + '<br/>' + goodsSafeNo.certOrganName}"></p>
-					<p class="normal">
-						<th:block th:if="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-						<span>해당 없음</span>
-						</th:block>
-						<th:block th:unless="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
+					<p class="tit normal"><th:block th:text="${goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
+					<p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
+				</div>	
+			</div>
+					</th:block>
+					<th:block th:unless="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
+			<div class="area_kcl" >
+				<div><i class="ico ico_kcl"></i></div>
+				<div>
+					<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+					<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
+					</th:block>
+					<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+					<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' 안전인증'}"></p>
+					</th:block>
+					<p class="normal" >
+						<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
 						<span>인증번호:</span> <a class="num" th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" th:text="${goodsSafeNo.certNum}">CB123A123-1234</a>
 						</th:block>
-						
+						<th:block th:uless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+						<span>인증번호:</span> <th:block th:text="${goodsSafeNo.certNum}">CB123A123-1234</th:block>
+						</th:block>
 					</p>
 				</div>
 			</div>
-			
-			<p class="t_info dot_info mt10"  th:if="${goodsSafeNo != null}">
+					</th:block>
+				</th:block>
+			<p class="t_info dot_info mt10">
 				해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
-			</p>
+			</p>	
+			</th:block>
+			
 			<div class="area_infotbl">
 				<span class="title">상품기본정보</span>
 				<th:block th:if="${goodsInfo.goodsType == 'G056_N'} ">

+ 94 - 16
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -223,7 +223,7 @@
 			</div>
 		</div>
 
-		<div class="inner">
+		<div class="inner wide">
 			<div class="content pd_descrp">
 				<div class="cont_head">
 				<h3 class="sr-only">상품상세정보</h3>
@@ -274,12 +274,14 @@
 					</th:block>
 					</th:block>
 					
-					<!-- 관리자 에디터입력 내용 노출  상단 html -->
+				</div>
+					
+				<div class="view_outfit_box" >
+				<!-- 관리자 에디터입력 내용 노출  상단 html -->
 					<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
 					
 					<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
-				</div>	
-					
+				</div>
 				<th:block th:if="${goodsInfo.tobeFormYn == 'Y'}">	
 				<!-- 착용컷 노출 -->
 				<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1') 
@@ -361,7 +363,7 @@
 				<!-- 브랜드 노출 -->
 				<div class="brand_box">
 					<p class="name" th:text="${goodsInfo.brandGroupNm}">TBJ 티비제이</p>
-					<a href="javascript:void(0);" class="btn btn_default" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" ><span>브랜드 홈 바로가기</span></a>
+					<a href="javascript:void(0);" class="brend_home" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" ><span>브랜드 홈 바로가기</span></a>
 				</div>
 				<!-- //브랜드 노출 -->	
 				
@@ -395,26 +397,102 @@
 						</div>
 						</th:block>
 					</div>
-					<div class="area_kcl" th:if="${goodsSafeNo != null}">
+					<th:block th:if="${goodsInfo.goodsType == 'G056_N' and goodsSafeNo != null}" >
+						<th:block th:if="${goodsSafeNo.certTargetGb == 'G083_3'}" >  <!-- 상세별도표시 -->
+					<div class="area_kcl no-mark">
 						<div>
-							<i class="ico ico_kcl"></i>
+							<p class="tit normal"><th:block th:if="${goodsSafeNo.certFormNm}" th:text="${goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
+							<p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
 						</div>
+					</div>	
+						</th:block>
+						<th:block th:unless="${goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
+							<th:block th:if="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
+					<div class="area_kcl">
+						<div><i class="ico ico_kcl"></i></div>
 						<div>
-							<p class="tit normal" th:utext="${goodsSafeNo.certDiv + '<br/>' + goodsSafeNo.certOrganName}"></p>
-							<p class="normal">
-								<th:block th:if="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-								<span>해당 없음</span>
-								</th:block>
-								<th:block th:unless="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
+							<p class="tit normal"><th:block th:text="${goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
+							<p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
+						</div>	
+					</div>
+							</th:block>
+							<th:block th:unless="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
+					<div class="area_kcl" >
+						<div><i class="ico ico_kcl"></i></div>
+						<div>
+							<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+							<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
+							</th:block>
+							<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+							<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' 안전인증'}"></p>
+							</th:block>
+							<p class="normal" >
+								<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
 								<span>인증번호:</span> <a class="num" th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" th:text="${goodsSafeNo.certNum}">CB123A123-1234</a>
 								</th:block>
-								
+								<th:block th:uless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+								<span>인증번호:</span> <th:block th:text="${goodsSafeNo.certNum}">CB123A123-1234</th:block>
+								</th:block>
 							</p>
 						</div>
 					</div>
-					<p class="t_info dot_info mt10"  th:if="${goodsSafeNo != null}">
+							</th:block>
+						</th:block>
+					<p class="t_info dot_info mt10">
+						해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
+					</p>	
+					</th:block>
+					
+					<th:block th:if="${goodsInfo.goodsType == 'G056_S'}">
+					<th:block th:each="goodsCompose, status : ${goodsComposeList}">
+						<th:block th:if="${goodsCompose.goodsSafeNo != null}">
+								<th:block th:if="${goodsCompose.goodsSafeNo.certTargetGb == 'G083_3'}" >  <!-- 상세별도표시 -->
+					<div class="area_kcl no-mark">
+						<div>
+							<p class="tit normal"><th:block th:if="${goodsCompose.goodsSafeNo.certFormNm}" th:text="${goodsCompose.goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
+							<p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
+						</div>
+					</div>	
+						</th:block>
+						<th:block th:unless="${goodsCompose.goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
+							<th:block th:if="${goodsCompose.goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
+					<div class="area_kcl">
+						<div><i class="ico ico_kcl"></i></div>
+						<div>
+							<p class="tit normal"><th:block th:text="${goodsCompose.goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
+							<p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
+						</div>	
+					</div>
+							</th:block>
+							<th:block th:unless="${goodsCompose.goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
+					<div class="area_kcl" >
+						<div><i class="ico ico_kcl"></i></div>
+						<div>
+							<th:block th:if="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
+							<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
+							</th:block>
+							<th:block th:unless="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
+							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certFormNm + ' 안전인증'}"></p>
+							</th:block>
+							<p class="normal" >
+								<th:block th:if="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
+								<span>인증번호:</span> <a class="num" th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsCompose.goodsSafeNo.certNum})}" target="_blank" th:text="${goodsSafeNo.certNum}">CB123A123-1234</a>
+								</th:block>
+								<th:block th:uless="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
+								<span>인증번호:</span> <th:block th:text="${goodsCompose.goodsSafeNo.certNum}">CB123A123-1234</th:block>
+								</th:block>
+							</p>
+						</div>
+					</div>
+							</th:block>
+						</th:block>
+					<p class="t_info dot_info mt10" >
 						해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
 					</p>
+						</th:block>
+					</th:block>
+					</th:block>
+					
 					<div class="area_infotbl">
 						<span class="title">상품기본정보</span>
 						<th:block th:if="${goodsInfo.goodsType == 'G056_N'} ">
@@ -500,7 +578,7 @@
 				</div>
 				<!-- //상품필수정보 노출 -->
 			</div>
-			<div class="btn_more_box covered">
+			<div class="btn_more_box">
 				<div class="btn_group_flex">
 					<div>
 						<button type="button" class="btn btn_default">

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

@@ -0,0 +1,670 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageReviewCreateFormMob.html
+ * @desc    : 마이페이지 > 리뷰 작성Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.11   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main role="" id="" class="container my">
+			<section class="content review">
+				<form class="form_wrap" id="reviewForm"  th:action="@{'/mypage/review/save'}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+				<input type="hidden" name="ordNo" th:value="${reviewInfo.ordNo}">
+						<input type="hidden" name="ordDtlNo" th:value="${reviewInfo.ordDtlNo}">
+						<input type="hidden" name="goodsCd" th:value="${reviewInfo.goodsCd}">
+						<input type="hidden" name="custNo" th:value="${reviewInfo.custNo}">
+						<input type="hidden" name="reviewStat" th:value="${reviewStat}">
+						<input type="hidden" name="reviewSq" th:if="${reviewStat == 'u'}" th:value="${reviewInfo.reviewSq}">
+					<div class="inner bg_gray">
+						<ul class="note">
+							<li>일반 리뷰 작성시 150P, 일반 리뷰 작성시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다.</li>
+							<li>월 최대 10,000P까지 적립 가능합니다.(합산 후 월 1회 지급)</li>
+							<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다.</li>
+							<li>리뷰 작성시 욕설, 비방, 선정적인 내용 등이 있을 경우 통보 없이관리자에 의해 삭제 될 수 있습니다.</li>
+						</ul>
+					</div>
+					<div class="inner">
+						<div class="part_goods">
+							<!-- 굿즈_리뷰 -->
+							<div class="goods_section">
+								<div class="goods_detail">
+									<a href="">
+										<div class="thumb_box">
+											<img th:src="${imageUrl + '/' + reviewInfo.sysImgNm}" alt="tmp_pdClickother1">
+										</div>
+										<div class="info_box">
+											<div class="od_name">
+												<div class="goods_date"><span class="date" th:text="${reviewInfo.payDt}"></span>구매</div>
+												<div class="brand">
+													<span th:text="${reviewInfo.brandEnm}"></span>
+												</div>
+												<div class="name" th:text="${reviewInfo.goodsNm}"></div>
+											</div>
+											<div class="od_opt">
+												<div class="option" id="optionDiv">
+													<!-- <em>Black</em><em>XXL</em> -->
+												</div>
+											</div>
+										</div>
+									</a>
+								</div>											
+							</div>
+							<!-- //굿즈_리뷰 -->
+						</div>
+					</div>
+					<div class="inner">
+						<div class="titWrap">
+							<div class="">별점을 선택해주세요</div>
+						</div>
+						<div class="review_score">
+							<div id="star_grade">
+								<input type="hidden" id="score" name="score">
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+							</div>
+						</div>
+					</div>
+					<div class="inner">
+						<div class="my_edit_section">
+							<div class="tbl_wrap">
+								<div class="tbl_tit"> 
+									<h3>키/몸무게</h3>
+								</div>
+								<div class="tbl">
+									<div class="tbl_row">
+										<table>
+											<colgroup>
+												<col width="*">
+											</colgroup>   
+											<tr>
+												<th>키</th>
+												<td>
+													<div class="form_field rev_height">
+														<input type="tel" class="form_control" oninput='handleOnInput(this, 3)' id="height" name="height" data-valid-type="numeric" placeholder="키를 숫자만 입력해주세요."><span>cm</span>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>몸무게</th>
+												<td>
+													<div class="form_field rev_height">
+														<input type="tel" class="form_control" oninput='handleOnInput(this, 3)' id="weight" name="weight" data-valid-type="numeric" placeholder="몸무게를 숫자만 입력해주세요."><span>kg</span>
+													</div>
+												</td>
+											</tr>
+										</table>
+									</div>
+								</div>
+							</div>
+							<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B' or reviewInfo.sizeGb == 'S'}">
+							<div class="tbl_wrap">
+								<div class="tbl_tit"> 
+									<h3>상품평가</h3>
+								</div>
+								<div class="tbl">
+									<div class="tbl_row">
+										<table data-name="rating">
+											<colgroup>
+												<col width="*">
+											</colgroup>
+											<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B' or reviewInfo.sizeGb == 'S'}">    
+											<tr>
+												<th>사이즈</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-1" type="radio" name="scoreSize" value="1"><label for="chk-1"> <span>작음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-2" type="radio" name="scoreSize" value="2"><label for="chk-2"> <span>딱맞음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-3" type="radio" name="scoreSize" value="3"><label for="chk-3"> <span>큼</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>컬러</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-4" type="radio" name="scoreColor" value="1"><label for="chk-4"> <span>밝음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-5" type="radio" name="scoreColor" value="2"><label for="chk-5"> <span>똑같음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-6" type="radio" name="scoreColor" value="3"><label for="chk-6"> <span>어두움</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											</th:block>
+											<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B'}"> 
+											<tr>
+												<th>핏</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-7" type="radio" name="scoreFit" value="1"><label for="chk-7"> <span>슬림</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-8" type="radio" name="scoreFit" value="2"><label for="chk-8"> <span>레귤러</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-9" type="radio" name="scoreFit" value="3"><label for="chk-9"> <span>오버</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>두께감</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-10" type="radio" name="scoreThick" value="1"><label for="chk-10"> <span>얇음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-11" type="radio" name="scoreThick" value="2"><label for="chk-11"> <span>적당함</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-12" type="radio" name="scoreThick" value="3"><label for="chk-12"> <span>도톰함</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											</th:block>
+											<th:block th:if="${reviewInfo.sizeGb == 'S'}"> 
+											<tr>
+												<th>무게감</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-13" type="radio" name="scoreWeight" value="1"><label for="chk-13"> <span>가벼움</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-14" type="radio" name="scoreWeight" value="2"><label for="chk-14"> <span>적당함</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-15" type="radio" name="scoreWeight" value="3"><label for="chk-15"> <span>무거움</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>볼너비</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-16" type="radio" name="scoreBall" value="1"><label for="chk-16"> <span>작음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-17" type="radio" name="scoreBall" value="2"><label for="chk-17"> <span>딱맞음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-18" type="radio" name="scoreBall" value="3"><label for="chk-18"> <span>큼</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											</th:block>
+										</table>
+									</div>
+								</div>
+							</div>
+							</th:block>
+							<div class="tbl_wrap">
+								<div class="tbl">
+									<div class="tbl_row">
+										<table>
+											<colgroup>
+												<col width="*">
+											</colgroup>   
+											<tr>
+												<th>
+													<span class="tit">고객님의 리뷰가<br>다른 고객님께 도움이 될 수 있어요! </span>
+
+													<div class="tip_wrap tip2" >
+														<div class="tip_tit">?</div>
+														<div class="tip_contents">
+															<ul>
+																<li>리뷰 내용은 최소 10자 이상 입력해주세요.</li>
+																<li>상품과 무관하거나 스팸, 음란, 불법적인 내용의 리뷰는 통보없이 삭제되며, 지금된 포인트는 회수 될 수 있습니다.</li>
+															</ul>
+														</div>
+													</div>
+												</th>
+												<td>
+													<textarea class="doc_review" name="reviewContent" id="reviewContent" cols="30" rows="10"></textarea>
+													<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/500</p>
+												</td>
+											</tr>
+											<tr>
+												<th>
+													<span class="tit">포토/영상 첨부</span>
+												</th>
+												<td>
+													<div class="form_field">
+														<div class="imgUpload">
+															<label for="fileAdd" class="fileAdd" id="fileAdd_reply">업로드</label>
+															<input type="file" id="fileAdd" name="files" multiple="">
+															<!-- 첨부한 이미지가 반영될 곳, 실제 반영 시 해당 구역은 제거할 것 -->
+														</div>
+													</div>
+													<p class="review_desc">최대 10개까지 등록 가능</p>
+													<p class="review_desc">동영상 첨부 시 관리자 승인이 필요하여 바로 노출이 되지 않을 수 있습니다.</p>					
+												</td>
+											</tr>
+										</table>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="inner">
+						<div class="goods_btn_wrap btn_group_flex">
+							<div><button type="button" id="btn_review_cancle" class="btn btn_default" onclick="reviewCancel()"><span>취소</span></button></div> 
+							<div th:if="${reviewStat == 'c'}"><button type="button" id="btn_review_confirm" class="btn btn_dark"  onclick="reviewCreate()"><span>등록</span></button></div> 
+							<div th:if="${reviewStat == 'u'}"><button type="button" id="btn_review_confirm" class="btn btn_dark"  onclick="reviewUpdate()"><span>수정</span></button></div> 
+						</div>
+					</div>
+				</form>
+			</section>
+		</main>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.kollus.js"></script>
+<script th:inline="javascript">
+let reviewList = [[${reviewInfo}]];
+let reviewStat = [[${reviewStat}]];
+let reviewAttach = [[${alreadyReviewAttach}]];
+let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
+
+//별점 class="on"
+var $starEls = $('#star_grade button#starBtn');
+var rate = 0;
+
+$starEls.each(function (index, el) {
+    $(el).on('click', function () {
+        rating(index);
+        $("#score").attr("value",index+1);
+    });
+});
+
+
+function rating(score) {
+    $starEls.each(function (i, el) {
+        if (i <= score) {
+            $(el).addClass('on');
+        } else {
+            $(el).removeClass('on');
+        }
+    });
+
+    rate = score + 1;
+}
+
+// 리뷰  취소
+var reviewCancel = function() {
+	
+	mcxDialog.confirm('취소하시겠습니까"?', {
+        cancelBtnText: "취소",
+        sureBtnText: "확인",
+        sureBtnClick: function(){
+        	cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+        }
+    });
+}
+
+
+//리뷰 등록
+var reviewCreate = function () {
+	if($("#score").val()=='' || $("#score").val()==null){
+		mcxDialog.alert('별점을 선택하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=height]").val() == '' || $("#reviewForm input[name=height]").val() == null){
+		mcxDialog.alert('키를 입력하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=weight]").val() == '' || $("#reviewForm input[name=weight]").val() == null){
+		mcxDialog.alert('몸무게를 입력하세요.');
+		return;
+	} 
+	
+	
+	if(reviewList.sizeGb == 'T' || reviewList.sizeGb == 'B' || reviewList.sizeGb == 'S'){
+		if($('#reviewForm input:radio[name=scoreSize]:checked').length == 0){
+			mcxDialog.alert('상품 사이즈를 평가해주세요.');
+			return false;
+		}
+		
+		if($('#reviewForm input:radio[name=scoreColor]:checked').length == 0){
+			mcxDialog.alert('상품 컬러를 평가해주세요.');
+			return false;
+		}
+	}
+	
+	if(reviewList.sizeGb == 'T' || reviewList.sizeGb == 'B'){
+		if($('#reviewForm input:radio[name=scoreFit]:checked').length == 0){
+			mcxDialog.alert('상품 핏을 평가해주세요.');
+			return false;
+		}
+		if($('#reviewForm input:radio[name=scoreThick]:checked').length == 0){
+			mcxDialog.alert('상품 두께감을 평가해주세요.');
+			return false;
+		}	
+	}
+	
+	if(reviewList.sizeGb == 'S' ){
+		if($('#reviewForm input:radio[name=scoreWeight]:checked').length == 0){
+			mcxDialog.alert('상품 무게감을 평가해주세요.');
+			return false;
+		}
+		
+		if($('#reviewForm input:radio[name=scoreBall]:checked').length == 0){
+			mcxDialog.alert('상품 볼넓이를 평가해주세요.');
+			return false;
+		}
+	}
+	
+	if($('#reviewContent').val().length<10){
+		mcxDialog.alert("리뷰 내용을 10자 이상 입력해주세요.");
+		return false;
+	}
+	
+	
+	mcxDialog.confirm('리뷰를 등록하시겠습니까?', {
+     cancelBtnText: "취소",
+     sureBtnText: "확인",
+     sureBtnClick: function(){
+     	gagajf.ajaxFormSubmit($('#reviewForm').prop('action'), '#reviewForm', fnSaveCallback);
+     }
+ });
+	
+	
+}
+
+
+//리뷰 수정
+var reviewUpdate = function() {
+	
+	if($("#reviewForm input[name=height]").val() == '' || $("#reviewForm input[name=height]").val() == null){
+		mcxDialog.alert('키를 입력하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=weight]").val() == '' || $("#reviewForm input[name=weight]").val() == null){
+		mcxDialog.alert('몸무게를 입력하세요.');
+		return;
+	}
+
+	if($('#reviewContent').val().length<10){
+		mcxDialog.alert("리뷰 내용을 10자 이상 입력해주세요.");
+		return;
+	}
+	
+	mcxDialog.confirm('리뷰를 수정하시겠습니까"?', {
+     cancelBtnText: "취소",
+     sureBtnText: "확인",
+     sureBtnClick: function(){
+     	gagajf.ajaxFormSubmit("/mypage/review/update", '#reviewForm', fnUpdateCallback);
+     }
+ });
+	
+}
+var fnSaveCallback = function (result) {
+	if(result.status == "200"){
+		if (document.getElementsByName("kufKeyArr").length>0 || document.getElementsByName("orgFileNmArr").length>0) {
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 350P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}else{
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 150P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}
+	}
+}
+
+var fnUpdateCallback = function (result) {
+	if(result.status == "200"){
+		mcxDialog.confirm("상품 리뷰를 수정하였습니다.", {
+			sureBtnText: "확인",
+			sureBtnClick: function() { 
+				cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+			}
+		}); 
+		
+	}
+}
+
+//header scroll
+$(document).on('click', '.tabIndex li a', function() {
+	
+	
+	var $this = $(this),
+		$tabList = $this.parents('ul'),
+		_idx = $this.closest('li').index();
+	
+	$tabList.children().eq(_idx).addClass('active').siblings().removeClass('active');
+	$tabList.next().children().eq(_idx).addClass('active').siblings().removeClass('active');
+});
+		
+$(function(){
+	
+	$('#htopTitle').text('리뷰 쓰기');
+	if (reviewList.goodsType == 'G056_S') {
+		$.each(reviewList.colorNmArr, function(index, option) {
+			$("#optionDiv").append('<em>'+reviewList.itemNmArr[index] + ' / ' + option + ' / ' + reviewList.optCd2Arr[index]+'</em>');
+		});
+	}else{
+		$(".option").append('<em>'+reviewList.optCd1+'</em><em>'+reviewList.optCd2+'</em>');
+	}
+	
+	 if(reviewStat=='u'){
+		 var reviewScore = reviewList.score-1;
+		 $("#score").val(reviewScore);
+		 rating(reviewScore);
+		$("#reviewForm input[name=height]").val(reviewList.height);
+		$("#reviewForm input[name=weight]").val(reviewList.weight);
+		$("#reviewForm textarea[name=reviewContent]").val(reviewList.reviewContent.escapeHtml());
+		if(reviewList.scoreSize == "1"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreSize == "2"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreSize == "3"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreColor == "1"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreColor == "2"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreColor == "3"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreFit == "1"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreFit == "2"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreFit == "3"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreThick == "1"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreThick == "2"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreThick == "3"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreWeight == "1"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreWeight == "2"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreWeight == "3"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreBall == "1"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreBall == "2"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreBall == "3"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewAttach.length>0){
+			for (var i = 0; i < reviewAttach.length; i++) {
+				if(reviewAttach[i].reviewSq == reviewList.reviewSq){
+					if(reviewAttach[i].fileGb == "I"){
+						$("<span class=\"pics\">" +
+								"<img class=\"picsThumbs\" src=\"" + reviewUrl + '/' + reviewAttach[i].sysFileNm + "\" />" +
+								"<input type='hidden' name='orgFileNmArr' value='"+reviewAttach[i].orgFileNm+"'>" +
+								"<input type='hidden' name='sysFileNmArr' value='"+reviewAttach[i].sysFileNm+"'>" +
+								"<br/><span class=\"removes\">Removes image</span>" +
+								"</span>").insertAfter("#fileAdd");
+					}else{
+						$("<span class=\"pics\">" +
+								"<img class=\"picsThumbs\" />" +
+								"<input type='hidden' name='kmcKeyArr' value='" + reviewAttach[i].kmcKey + "'>" + 
+								"<input type='hidden' name='kufKeyArr' value='" + reviewAttach[i].kufKey + "'>" + 
+								"<br/><span class=\"removes\">Removes image</span>" +
+								"</span>").insertAfter("#fileAdd");
+					}
+				}
+				
+			}
+			$(".removes").click(function(){
+				$(this).parent(".pics").remove();
+			});
+			
+		}
+	} 
+	
+	$(window).scroll(function(){
+		var scroll = $(this).scrollTop();
+		var headerH = $(".header").height();
+		if ($(window).scrollTop() > headerH){
+			$(".header").addClass("minify");
+			return false;
+		}
+		else {
+			$(".header").removeClass("minify");
+			return false;
+		}
+	});
+
+	$('#star_grade button').click(function(){
+		$(this).parent().children("button").removeClass("on");  /* 별점의 on 클래스 전부 제거 */ 
+		$(this).addClass("on").prevAll("button").addClass("on"); /* 클릭한 별과, 그 앞 까지 별점에 on 클래스 추가 */
+		return false;
+	});
+
+	//리뷰 내용 글자 수 제한
+	$('.doc_review').keyup(function (e){
+		var content = $(this).val();
+		$('#review_cnt').html(content.length);
+		if (content.length > 500){
+			$(this).val(content.substring(0, 500));
+			$('#review_cnt').html("500");
+		}
+	});
+});
+
+$('#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)) {
+			 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+						, file
+						, function(result) {
+							// 업로드한 파일명 설정
+							$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
+							$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
+						}
+				); 
+		}else if((new RegExp("mp4", "i")).test(file.name)){
+			setTimeout(function(){
+				$(".pics").children().eq(0).append("<input type='hidden' name='kufKeyArr' id='kufKey"+(picLength+1)+"'>");
+				$(".pics").children().eq(0).append("<input type='hidden' name='kmcKeyArr' id='kmcKey"+(picLength+1)+"'>");
+				gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
+			}, 2000);
+		}else{
+			mcxDialog.alertC('첨부할 수 없는 파일 형식입니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(obj).parent('.imgUpload').find('.removes').trigger('click');
+				}
+			});
+			return false;
+		}
+	}
+	// 이거 왜 안먹히지 
+
+	
+	// 파일 업로드
+/* 	 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+			, file
+			, function(result) {
+				// 업로드한 파일명 설정
+				$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
+				$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
+			}
+	);   */
+}
+
+
+//210409_키, 몸무게 input 글자 수 제한
+function handleOnInput(el, maxlength) {
+		if(el.value.length > maxlength)  {
+			el.value = el.value.substr(0, maxlength);
+		}
+	}
+</script>
+</th:block>
+
+</body>
+</html>

+ 253 - 240
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -60,26 +60,29 @@
 								</div>
 								<!-- tab_cont Start -->
 								<div class="inner" id="reviewList">
-									<div class="part_goods">
-										<!-- 굿즈_리뷰 -->
-										
-										<!-- //굿즈_리뷰 -->
-									</div>
+
 									<div class="nodata" id="nodata1" style="display: none;">
-									<div class="txt_box">
-										<p>
-											작성 가능한 리뷰가 없습니다.<br>
-										</p>
+										<div class="txt_box">
+											<p>
+												작성 가능한 리뷰가 없습니다.<br>
+											</p>
+										</div>
+									</div>
+									<div class="nodata" id="nodata2" style="display: none;">
+										<div class="txt_box">
+											<p>
+												작성한 리뷰가 없습니다.<br>
+											</p>
+										</div>
 									</div>
 								</div>
-							</div>
 								<!-- // tab_cont End -->
 							</div>
-							<div class="tab_cont ">
-								<!-- tab_cont Start -->
+<!-- 							<div class="tab_cont ">
+								tab_cont Start
 								<div class="inner">
 									<div class="part_goods">
-										<!-- 굿즈_리뷰 -->
+										굿즈_리뷰
 										<div class="goods_section">
 											<div class="goods_detail">
 												<a href="">
@@ -103,13 +106,13 @@
 												</a>
 											</div>											
 										</div>
-										<!-- //굿즈_리뷰 -->
+										//굿즈_리뷰
 									</div>
 									<div class="reviewMy">
 										<div class="info_box">
 											<div class="star_score">
 												<span class="star">
-													<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
+													<em class="progbar" style="width:70%;"></em> 평점 style로 표기
 												</span>
 											</div>
 											<div class="writer">
@@ -136,7 +139,7 @@
 													<li>
 														<a href="">
 															<div class="pic">
-																<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+																<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span>동영상의 썸네일일 경우 mov 클래스 추가
 															</div>
 														</a>
 													</li>
@@ -193,28 +196,18 @@
 												</div>
 											</div>
 										</div>
-										<!-- .reply_box가 노출될 경우, 삭제만 -->
+										.reply_box가 노출될 경우, 삭제만
 										<div class="goods_btn_wrap btn_group_flex">
 											<div><button type="button" class="btn btn_default"><span>리뷰 삭제</span></button></div>
 										</div>
 									</div>
 								</div>
-
-								<!-- // tab_cont End -->
-							</div>
+							</div> -->
 						</div>
 					</div>
 				</div>
 			</section>
 		</main>
-<form id="searchForm1" name="searchForm1" th:action="@{'/mypage/complete/review/list'}" th:method="post">
-	<input type="hidden" name="pageNo" value="1" />
-	<input type="hidden" name="pageSize" value="10" />
-</form>
-<form id="searchForm2" name="searchForm2" th:action="@{'/mypage/already/review/list'}" th:method="post">
-	<input type="hidden" name="pageNo2" value="1" />
-	<input type="hidden" name="pageSize2" value="10" />
-</form>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>
 <script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
@@ -227,233 +220,253 @@
 		$("#alreadyReview").removeClass("active");
 		$("#completeReview").addClass("active");
 		$("#check_notice").hide();
+		$('#reviewList').html('');
+		var data = {};
+		var jsonData = JSON.stringify(data);
 		
-	})
-	
-	var fnGetInfiniteScrollCompleteDataList = function(pageNum) {
+		gagajf.ajaxJsonSubmit('/mypage/complete/review/list', jsonData,	function(result) {
+			if (result.dataList1 != null && result.dataList1.length > 0) {
+				
+				let html = '';
+				html += '	<div class="part_goods">';
+				$.each(result.dataList1, function(idx, item) {
+					html += '		<div class="goods_section">';
+					html += '			<div class="goods_detail">';
+					html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">';
+					html += '					<div class="thumb_box">';
+					html += '						<img src="' + imageUrl + '/' + item.sysImgNm + '" alt="tmp_pdClickother1">';
+					html += '					</div>';
+					html += '					<div class="info_box">';
+					html += '						<div class="od_name">';
+					html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span> 구매</div>';
+					html += '							<div class="brand">';
+					html += '								<span>'+item.brandNm+'</span>';
+					html += '							</div>';
+					html += '							<div class="name">'+item.goodsNm+'</div>';
+					html += '						</div>';
+					html += '						<div class="od_opt">';
+					html += '							<div class="option">';
+					if (item.goodsType =='G056_S') {
+						$.each(item.colorNmArr, function (index2, option) {
+							html += '							<em>' + item.itemNmArr[index2] + ' / ' + option + '</em\n';
+						})
+					}else{
+						html += '							<em>'+item.colorNm+'</em>     ';
+					}
+					html += '							</div>';
+					html += '						</div>';
+					html += '					</div>';
+					html += '				</a>';
+					html += '			</div>';
+					html += '			<div class="goods_btn_wrap btn_group_flex">';
+					html += '				<div><button type="button" class="btn btn_default" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기(</span><em>'+item.remainDt+'</em><span>일 남음)</span></button></div>';
+					html += '			</div>';
+					html += '		</div>';
+				});
+				html += '	</div>';
+				$('#reviewList').append(html);
+			}else{
+				$('#nodata1').show();
+			}
+		});
 	
-		$("#searchForm1 input[name=pageNo]").val(pageNum+1);
-		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
-		gagajf.ajaxFormSubmit("/mypage/complete/review/list", document.goodsReviewForm,  gagaInfiniteScroll.jsonToHtml);
-	}
+	})
 	
 	
 	$("#alreadyReview").click(function() {
 		$("#completeReview").removeClass("active");
 		$("#alreadyReview").addClass("active");
 		$("#check_notice").show();
-		
+		$('#reviewList').html('');
+		var data = {};
 		var jsonData = JSON.stringify(data);
 		gagajf.ajaxJsonSubmit('/mypage/already/review/list', jsonData,	function(result) {
-			if (result.dataList1 != null && result.dataList1.length > 0) {
-				$.each(result.dataList1, function(idx, item) {
-					let html = '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					$('#reviewList').append(html);
-				})
+			if (result.dataList2 != null && result.dataList2.length > 0) {
+				let html = '';
+				$.each(result.dataList2, function(idx, item) {
+					html += '	<div class="part_goods">';
+					html += '		<div class="goods_section">';
+					html += '			<div class="goods_detail">';
+					html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" >';
+					html += '					<div class="thumb_box">';
+					html += '						<img src="' + imageUrl + '/' + item.sysImgNm + '?RS=405" alt="tmp_pdClickother1">';
+					html += '					</div>';
+					html += '					<div class="info_box">';
+					html += '						<div class="od_name">';
+					html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span>구매</div>';
+					html += '							<div class="brand">';
+					html += '								<span>'+item.brandNm+'</span>';
+					html += '							</div>';
+					html += '							<div class="name">'+item.goodsNm+'</div>';
+					html += '						</div>';
+					html += '						<div class="od_opt">';
+					html += '							<div class="option">';
+					if (item.goodsType =='G056_S') {
+						$.each(item.colorNmArr, function (index2, option) {
+							html += '							<em>' + item.itemNmArr[index2] + ' / ' + option +'</em>\n';
+						})
+					}else{
+						html += '							<em>'+item.colorNm+'</em>     ';
+					}
+					html += '							</div>';
+					html += '						</div>';
+					html += '					</div>';
+					html += '				</a>';
+					html += '			</div>											';
+					html += '		</div>';
+					html += '	</div>';
+					html += '	<div class="reviewMy">';
+					html += '		<div class="info_box">';
+					html += '			<div class="star_score">';
+					html += '				<span class="star">';
+					html += '					<em class="progbar" style="width:'+(item.score*20)+'%;"></em> ';
+					html += '				</span>';
+					html += '			</div>';
+					html += '			<div class="writer">';
+					html += '				<span class="wr_date">'+item.regDt+'</span>';
+					html += '			</div>';
+					html += '		</div>';
+					html += '		<div class="response_box">';
+					html += '			<div>';
+					html += '				<dl>';
+					html += '					<div>';
+					html += '						<dt>구매옵션</dt>';
+					html += '						<dd>'+item.colorNm+'</dd>';
+					html += '					</div>';
+					html += '					<div>';
+					html += '						<dt>키/몸무게</dt>';
+					html += '						<dd>'+item.height+'cm/'+item.weight+'kg</dd>';
+					html += '					</div>';
+					html += '				</dl>';
+					html += '			</div>';
+					html += '		</div>';
+					if (attachList != null && attachList.length >0) {
+						html += '		<div class="photo_box">';
+						html += '			<div class="photo_list">';
+						html += '				<ul>';
+						for (var i = 0; i < attachList.length; i++) {
+							html += '					<li>';
+							html += '						<a>';
+							html += '							<div class="pic">';
+							if (attachList[i].fileGb == 'M') {
+								html += '								<span class="thumb mov" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');"  style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
+							}else{
+								html += '								<span class="thumb" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
+							}
+							
+							html += '							</div>';
+							html += '						</a>';
+							html += '					</li>';
+						}
+						html += '				</ul>';
+						html += '			</div>';
+						html += '		</div>';
+					}
+					html += '		<div class="txt_review_box" id="admin_'+item.reviewSq+'">';
+					html += '			<p>'+item.reviewContent.escapeHtml()+'</p>';
+					html += '		</div>';
+					html += '		<div  class="response_box2">';
+					html += '			<div>';
+					html += '				<dl class="clear">';
+					if (item.sizeGb == 'T' || item.sizeGb == 'B' || item.sizeGb == 'S') {
+						html += '					<div>';
+						html += '						<dt>사이즈</dt>';
+						html += '						<dd>'+item.scoreSize+'</dd>';
+						html += '					</div>';
+						html += '					<div>';
+						html += '						<dt>컬러</dt>';
+						html += '						<dd>'+item.scoreColor+'</dd>';
+						html += '					</div>';
+					}
+					if (item.sizeGb == 'T' || item.sizeGb == 'B') {
+						html += '					<div>';
+						html += '						<dt>핏</dt>';
+						html += '						<dd>'+item.scoreFit+'</dd>';
+						html += '					</div>';
+						html += '					<div>';
+						html += '						<dt>두께감</dt>';
+						html += '						<dd>'+item.scoreThick+'</dd>';
+						html += '					</div>';
+					}
+					if (item.sizeGb == 'S') {
+						html += '					<div>';
+						html += '						<dt>무게감</dt>';
+						html += '						<dd>'+item.scoreWeight+'</dd>';
+						html += '					</div>';
+						html += '					<div>';
+						html += '						<dt>볼넓이</dt>';
+						html += '						<dd>'+item.scoreBall+'</dd>';
+						html += '					</div>';
+					}
+					html += '				</dl>';
+					html += '			</div>';
+					html += '		</div>';
+					if (item.admRpl != null && item.admRpl != '') {
+						html += '		<div class="reply_box">';
+						html += '			<div class="reply">';
+						html += '				<div class="reply_writer">';
+						html += '					<span class="wr_name">관리자</span>';
+						html += '					<span class="wr_date">'+item.admRplDt+'</span>';
+						html += '				</div>';
+						html += '				<div class="reply_txt">';
+						html += '					<p>'+item.admRpl.escapeHtml()+'</p>';
+						html += '				</div>';
+						html += '			</div>';
+						html += '		</div>';
+					}
+					html += '		<div class="goods_btn_wrap btn_group_flex">';
+					if (item.admRpl == null || item.admRpl == '') {
+						html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+',\''+item.goodsCd+'\','+item.reviewSq+')"><span>리뷰 수정</span></button></div> ';
+					}
+					html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnDeleteReview('+item.reviewSq+')"><span>리뷰 삭제</span></button></div> ';
+					html += '		</div>';
+					html += '	</div>';
+				});
+				
+				$('#reviewList').append(html);
 			}else{
 				$('#nodata2').show();
 			}
 		});
 	
-	})
+	});
+	// 리뷰 수정
+	var fnReviewUpdate = function(obj1,obj2,obj3) {
+		let ordNo = obj1;
+		let ordDtlNo = obj2;
+		let goodsCd = obj3;
+		let reviewStat = 'u';
+		
+		$('#createReview input[name=ordNo]').val(ordNo);
+		$('#createReview input[name=ordDtlNo]').val(ordDtlNo);
+		$('#createReview input[name=goodsCd]').val(goodsCd);
+		$('#createReview input[name=reviewStat]').val(reviewStat);
+		
+		document.createReview.submit();
+		// cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd+'/'+reviewStat);
+	}
+	
+	// 리뷰삭제
+	var fnDeleteReview = function(obj) {
+		var data = {reviewSq : obj};
+				
+		var jsonData = JSON.stringify(data);
+
+		mcxDialog.confirm("작성한 리뷰를 삭제하시겠습니까?", {
+			cancelBtnText : "취소",
+			sureBtnText : "확인",
+			sureBtnClick : function() {
+
+				gagajf.ajaxJsonSubmit('/mypage/review/delete', jsonData, function(e) {
+					mcxDialog.alert("삭제되었습니다.");
+					$("#alrReview").text("("+e.alreadyReviewCount+")");
+					$("#comReview").text("("+e.completeReviewCount+")");
+					$("#alreadyReview").trigger('click');	
+				});
+			}
+		});
+	}
+	
 /*]]>*/
  
  $(document).ready(function() {

+ 86 - 54
src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html

@@ -32,14 +32,9 @@
 let month = [[${wishMonth}]];
 
 var wishlistDelete = function(obj) {
-	mcxDialog.confirm("위시리스트를 해제하시겠습니까?", {
-		cancelBtnText : "취소",
-		sureBtnText : "확인",
-		sureBtnClick : function() {
-			cfnPutWishList(obj);
-			ajaxWishList();
-		}
-	});
+	cfnPutWishList(obj);
+
+	ajaxWishList();
 }	
 //마이페이지 위시리스트 
 var ajaxWishList = function () {
@@ -47,56 +42,93 @@ var ajaxWishList = function () {
 		if (status == 'success') {
 			$('#wishList').html('');
 			html = '';
-			for (var i = 0; i < month.length; i++) {
-				html += '<div class="monthly_wish_wrap">\n';
-				html += '	<div class="date">\n';
-				html += '		<span>'+month[i].regDt+'</span>\n';
-				html += '	</div>\n';
-				html += '	<div class="itemsGrp">\n';
-				
-				$.each(result, function (idx, item) {
-					if (item.regDtMonth == month[i].regDt) {
-						html += '		<div class="item_prod">\n';
-						html += '			<div class="item_state">\n';
-						html += '				<button type="button" class="itemLike likeit" goodsCd="'+item.goodsCd+'" onclick="wishlistDelete(this)">관심상품 추가</button>\n';
-						html += '				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail('+item.goodsCd+')">\n';
-						html += '					<div class="itemPic">\n';
-						html += '						<img class="vLHTC pd_img"  src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">\n';
-						html += '					</div>\n';
-						html += '					<p class="itemBrand">'+item.brandGroupNm+'</p>\n';
-						html += '					<div class="itemName">'+item.goodsNm+'</div>\n';
-						html += '					<p class="itemPrice">\n';
-						
-						if (item.currPrice != item.listPrice) {
-							html+='						<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>\n';
-						}
-						html += item.currPrice.addComma();
-						if (item.dcRate>0) {
-							html+='						<span class=" itemPercent">'+item.dcRate+'%</span>\n';
+			if (result.length>0) {
+				for (var i = 0; i < month.length; i++) {
+					html += '<div class="monthly_wish_wrap">\n';
+					html += '	<div class="date">\n';
+					html += '		<span>'+month[i].regDt+'</span>\n';
+					html += '	</div>\n';
+					html += '	<div class="itemsGrp">\n';
+					
+					$.each(result, function (idx, item) {
+						if (item.regDtMonth == month[i].regDt) {
+							html += '		<div class="item_prod">\n';
+							html += '			<div class="item_state">\n';
+							html += '				<button type="button" class="itemLike active likeit" goodsCd=\''+item.goodsCd+'\' onclick="wishlistDelete(this)">관심상품 추가</button>\n';
+							html += '				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">\n';
+							html += '					<div class="itemPic">\n';
+							html += '						<img class="vLHTC pd_img"  src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">\n';
+							html += '					</div>\n';
+							html += '					<p class="itemBrand">'+item.brandGroupNm+'</p>\n';
+							html += '					<div class="itemName">'+item.goodsNm+'</div>\n';
+							html += '					<p class="itemPrice">\n';
+							
+							if (item.currPrice != item.listPrice) {
+								html+='						<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>\n';
+							}
+							html += item.currPrice.addComma();
+							if (item.dcRate>0) {
+								html+='						<span class=" itemPercent">'+item.dcRate+'%</span>\n';
+							}
+							html += '					</p>\n';
+							html += '					<div class="itemcolorchip">\n';
+							if(!gagajf.isNull(item.colorChips)){
+								var colorArr = item.colorChips.split(",");
+								var colorCd = '';
+								var rgbColor = '';
+								for(let i=0; i<colorArr.length; i++){
+									var colorInfo = colorArr[i].split(":");
+									colorCd = colorInfo[0];
+									rgbColor = colorInfo[1];
+									if(rgbColor=='#FFFFFF'){
+										html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+									}else{
+										html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+									}
+								}
+							}
+							html += '					</div>\n';
+							if(!gagajf.isNull(item.icon)){
+								var iconArr = item.icon.split(",");
+								var iconGb = '';
+								var iconNm = '';
+								html += '	<p class="itemBadge">';
+								for(let i=0; i<iconArr.length; i++){
+									var iconInfo = iconArr[i].split(":");
+									iconGb = iconInfo[0];
+									iconNm = iconInfo[1];
+									html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+								}
+								html += '	</p>';
+							}
+							if (item.goodsTnm != null && item.goodsTnm != '') {
+								html+='					<div class="itemComment">'+item.goodsTnm+'</div>\n';
+							}
+							html += '				</a>\n';
+							html += '			</div>\n';
+							html += '		</div>\n';
+							
 						}
-						html += '					</p>\n';
-						html += '					<div class="itemcolorchip">\n';
-						html += '						<span class="chip_color35" value="ABM">BEIGE</span>\n';
-						html += '						<span class="chip_color54" value="BDS">BLACK</span>\n';
-						html += '						<span class="chip_color40" value="YBR">WHITE</span>\n';
-						html += '					</div>\n';
-						html += '					<p class="itemBadge">\n';
-						html += '						<span class="badge13">베스트 </span>\n';
-						html += '					</p>\n';
-						if (item.goodsTnm != null && item.goodsTnm != '') {
-							html+='					<div class="itemComment">'+item.goodsTnm+'</div>\n';
-						}
-						html += '				</a>\n';
-						html += '			</div>\n';
-						html += '		</div>\n';
-						
-					}
-				});
+					});
+					
+					html += '	</div>\n';
+					html += '</div>\n';
+					$('#wishList').html(html);
+				}
+			}
+			else{
+				html += ' <div class="nodata">';
+				html += '	<div class="txt_box">';
+				html += '		<p>';
+				html += '			등록된 위시리스트가 없습니다.<br>';
+				html += '			';
+				html += '		</p>';
+				html += '	</div>';
+				html += '</div>';
 				
-				html += '	</div>\n';
-				html += '</div>\n';
 				$('#wishList').html(html);
 			}
+			
 		}
 	});
 }

+ 14 - 4
src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html

@@ -603,7 +603,7 @@
 								</li>
 							</ul> -->
 						</div>
-						<a href="javascript:void(0);" class="more_btn" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">더 보기</a>_
+						<a href="javascript:void(0);" class="more_btn" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">더 보기</a>
 					</div>
 					
 					<div id="coupon_type02" class="coupon_area">
@@ -1280,7 +1280,7 @@
 									
 									tag += '				</p>';
 									tag += '			</div>';
-									tag += '			<button type="button" class="btn btn_dark btn_block btn_coupon_down" onclick="fnQuickCouponDown('+item.cpnId+')"><span>쿠폰받기</span></button>';
+									tag += '			<button type="button" id="coupon_'+item.cpnId+'" class="btn btn_dark btn_block btn_coupon_down" onclick="fnQuickCouponDown('+item.cpnId+')"><span>쿠폰받기</span></button>';
 									tag += '		</div>';
 									tag += '	</li>';
 								});
@@ -1356,9 +1356,19 @@
 	// 쿠폰다운로드 콜백
 	var fnQuickCouponCallBack = function(result){
 		if (result.status == "200"){
-			//mcxDialog.alert(result.message);
+			let list = result.couonList;
+
+			list.forEach(function(coupon){
+				if (Number(coupon.custPubLimitQty) > 0){
+					if (Number(coupon.custPubLimitQty) <= Number(coupon.custCouponCnt)){
+						$('#coupon_'+ coupon.cpnId).html('<span>받기완료</span>');
+						$('#coupon_'+ coupon.cpnId).attr('disabled', true);
+					}
+				}
+			});
+			
 		}			
-		issueCouponBtn();
+		//issueCouponBtn();
 		
 	}
 

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

@@ -110,7 +110,7 @@
 				<!-- 프로모션 문구 노출 검색용-->
 				<div class="area">
 					<p class="promotion_search">모이몰론, 남들보다 빠르게! 신상 check</p>
-					<button type="button" class="btn_sch_promotion" id="btnGnbSearch"><i class="ico ico_search"><em>프로모션 검색 바로가기</em></i></button>
+					<button type="button" class="btn_sch_promotion" id="btnGnbSearch" onclick="cfSearchLayer();"><i class="ico ico_search"><em>프로모션 검색 바로가기</em></i></button>
 				</div>
 				<!-- //프로모션 문구 노출 검색용-->
 				<!-- 통합검색 -->
@@ -817,10 +817,10 @@
 		});
 	}
 
-	$('#btnGnbSearch').on('click', function() {
-		//검색창 호출
-		$(".common_search").addClass('active');
-	});
+	// $('#btnGnbSearch').on('click', function() {
+	// 	//검색창 호출
+	// 	$(".common_search").addClass('active');
+	// });
 
 	// 띠배너 닫기(쿠키설정)
 	let fnGnbTobBannerClose = function(unexpDays){

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

@@ -79,7 +79,7 @@
 									<div>
 										<input id="unisex" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="unisex"> <span>남여 공용만 보기</span> </label>
 									</div>
-									<div>
+									<div th:unless="${cateInfo.formalGb=='G009_20'}">
 										<input id="newGoods" type="checkbox" onclick="fnFilterOption(this,'off');" checked="checked"><label for="newGoods"> <span>신상품만 보기</span> </label>
 									</div>
 								</div>
@@ -293,7 +293,7 @@
 		<input type="hidden" name="cate3No" th:value="${cateInfo.cate3No}"/>
 		<input type="hidden" name="cate4No" th:value="${cateInfo.cate4No}"/>
 		<input type="hidden" name="sortingType" value="NEW"/>
-		<input type="hidden" name="newGoods" value="40"/>
+		<input type="hidden" name="newGoods" th:value="${cateInfo.formalGb=='G009_20'?'':'40'}" />
 	</form>
 
 	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
@@ -532,8 +532,8 @@
 								navNm += '<li class="bread_2depth" id="navNm">아울렛</li><li class="bread_2depth" id="navNm1">전체</li>';
 							}else{
 								$("#navNm").hide();
-								$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\');">전체</a></li>\n');
-								navNm += '<li class="bread_2depth" id="navNm1">전체</li>';
+								// $('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\');">전체</a></li>\n');
+								// navNm += '<li class="bread_2depth" id="navNm1">전체</li>';
 							}
 						}
 

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

@@ -67,7 +67,7 @@
 									<li>
 										<p><img src="/images/pc/ico_content_none.png" alt="등록된 이벤트가 없습니다."></p>
 										<span>등록된 룩북이 없습니다.</span>
-										<a href="javascript:void(0);" th:unless="${lbInfo.lookbookGb=='BL'}" onclick="cfnGoToPage(_PAGE_MAIN);">메인으로 가기</a>
+										<a href="javascript:void(0);" th:unless="${lbInfo.lookbookGb=='BL'}" onclick="cfnGoToPage(_PAGE_MAIN);">으로 가기</a>
 										<a href="javascript:void(0);" th:if="${lbInfo.lookbookGb=='BL'}" th:onclick="cfnGoToBrandMain([[${lbInfo.brandCd}]]);" th:text="${brandGroupInfo.brandGroupNm+' 홈으로 가기'}"></a>
 									</li>
 								</ul>

+ 361 - 305
src/main/webapp/WEB-INF/views/web/display/SearchLayerWeb.html

@@ -1,356 +1,412 @@
 <!DOCTYPE html>
 <html lang="ko"
-	xmlns:th="http://www.thymeleaf.org"
-	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="web/common/layout/DefaultLayoutWeb">
+	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : LookbookDetailFormWeb.html
- * @desc    : 룩북 상세 Page
+ * @source  : SearchLayerWeb.html
+ * @desc    : 검색 레이어 Page
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021.04.06   bin2107     최초 작성
+ * 1.0  2021.05.11   bin2107     최초 작성
  *******************************************************************************
  -->
-<body>
-
-<th:block layout:fragment="content">
-	<div id="container" class="container br">
-		<div class="breadcrumb">
-			<ul>
-				<li class="bread_home"><a href="index.html">홈</a></li>
-				<li class="bread_2depth" th:text="${lookbookInfo.brandNm}">TBJ</li>
-				<li class="bread_3depth">룩북</li>
-			</ul>
-		</div>
-		<div class="wrap">
-			<div class="content br_lookbook_view cont_visual" th:if="${lookbookDetailList != null}"> <!-- 페이지특정 클래스 = br_lookbook_view -->
-				<div class="cont_head">
-					<h3 class="displayH t_c" th:text="${lookbookInfo.title}">2020 F/W COLLECTION</h3>
+<h2 class="sr-only">통합검색</h2>
+<div class="cont_search">
+	<div class="area_input">
+		<form id="searchMainForm" name="searchMainForm">
+			<fieldset>
+				<legend>통합검색</legend>
+				<input type="text" id="search" name="search" value="" placeholder="검색어를 입력하세요sss." class="search_input" title="검색어 입력" maxlength="100">
+				<button type="button" class="sch_btn"><i class="ico ico_search"><em>검색</em></i></button>
+			</fieldset>
+		</form>
+	</div>
+	<div class="area_result">
+		<!-- 검색결과 입력 전 -->
+		<div class="default_box">
+			<div class="recent_blk">
+				<h3>최근 검색어</h3>
+				<!-- 최근검색어 있을 시 노출 -->
+				<div class="list_recent_keword" style="display: none;">
+					<ul>
+						<li>
+							<a href="">슬랙스</a>
+							<button type="button" class="btn_delete"><span>삭제</span></button>
+						</li>
+					</ul>
 				</div>
-				<div class="cont_body">
-					<div class="area_slider">
-						<div class="swiper-container">
-							<div class="swiper-wrapper">
-								<th:block th:each="item, stat : ${lookbookDetailList}">
-									<div class="swiper-slide">
-										<div class="bt_lb_item">
-											<img class="vLHTC lb_img" th:src="${@environment.getProperty('domain.image')+item.sysFileNm}" alt="BLUE-a" />
-											<th:block th:if="${item.lookbookGoodsList != null and !item.lookbookGoodsList.empty}" th:each="goodsItem, goodsStatus : ${item.lookbookGoodsList}">
-												<div class="item_picker" th:style="${'left:'+goodsItem.xlim+'%; top:'+goodsItem.ylim+'%;'}">
-													<button type="button" th:onclick="fnLookbookGoodsPopup([[${goodsItem.sysImgNm}]],[[${goodsItem.brandGroupNm}]],[[${goodsItem.goodsNm}]],[[${goodsItem.listPrice}]],[[${goodsItem.currPrice}]],[[${goodsItem.dcRate}]],[[${goodsItem.goodsCd}]])"><span class="ico ico_picker"></span></button>
-												</div>
-											</th:block>
-										</div>
-									</div>
-								</th:block>
-							</div>
-							<div class="swiper-button-prev"></div>
-							<div class="swiper-button-next"></div>
-						</div>
-					</div>
-					<!--<th:block th:each="item, stat : ${lookbookDetailList}">
-					<div class="text_cont" th:text="${item.imgDesc}">
-						국내 대표 패션기업 한세엠케이의 스타일리시 어반 캐주얼 브랜드 앤듀(ANDEW)가 중성적이고 시크한 감각을 극대화한 2020 F/W 시즌 룩북을 공개했다.<br>
-						앤듀는 올 하반기 정소현, 안재형, 고웅호 등 글로벌 런웨이 무대에서 활약중인 전문 패션 모델들과 함께 성별의 경계를 뛰어넘어 개개인의 개성을 드러내는 젠더뉴트럴 패션을 앤듀만의 감각으로 새롭게 전개한다. 중성적인 매력을 자아내는 3명의 모델들은 각자의 개성과 매력을 뽐내며 세련미를 더한 젠더리스 감성을 한층 더 완성도 있게 소화해 눈길을 끈다. 공개된 룩북에서는 따뜻하고 부드러운 파스텔톤, 차분한 모노크롬 컬러로 극명하게 상반된 분위기를  연출하며 각기 다른 유니섹스 스타일을 선보였다. 격식을 갖추되 포멀하진 않게 자연스럽게 떨어지는 핏과 힙한 디자인을 통해 앤듀만의 젠더뉴트럴 캐주얼룩을 연출한 것. 또한, 이번 시즌에도 패션업계에 불고 있는 ‘필(必)환경’  트렌드에 따라 그린슈머들을 사로잡을 다양한 친환경적인 제품들을 주력으로 출시하며 지속가능한 패션을 실천할 계획이다. 버려진 페트병이나 플라스틱을 활용해 친환경 재생 섬유인 리사이클 페트(PET)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
-					</div>
-					</th:block>-->
-					<div class="text_cont">
-						국내 대표 패션기업 한세엠케이의 스타일리시 어반 캐주얼 브랜드 앤듀(ANDEW)가 중성적이고 시크한 감각을 극대화한 2020 F/W 시즌 룩북을 공개했다.<br>
-						앤듀는 올 하반기 정소현, 안재형, 고웅호 등 글로벌 런웨이 무대에서 활약중인 전문 패션 모델들과 함께 성별의 경계를 뛰어넘어 개개인의 개성을 드러내는 젠더뉴트럴 패션을 앤듀만의 감각으로 새롭게 전개한다. 중성적인 매력을 자아내는 3명의 모델들은 각자의 개성과 매력을 뽐내며 세련미를 더한 젠더리스 감성을 한층 더 완성도 있게 소화해 눈길을 끈다. 공개된 룩북에서는 따뜻하고 부드러운 파스텔톤, 차분한 모노크롬 컬러로 극명하게 상반된 분위기를  연출하며 각기 다른 유니섹스 스타일을 선보였다. 격식을 갖추되 포멀하진 않게 자연스럽게 떨어지는 핏과 힙한 디자인을 통해 앤듀만의 젠더뉴트럴 캐주얼룩을 연출한 것. 또한, 이번 시즌에도 패션업계에 불고 있는 ‘필(必)환경’  트렌드에 따라 그린슈머들을 사로잡을 다양한 친환경적인 제품들을 주력으로 출시하며 지속가능한 패션을 실천할 계획이다. 버려진 페트병이나 플라스틱을 활용해 친환경 재생 섬유인 리사이클 페트(PET)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
-					</div>
+				<button type="button" class="btn_underline"  style="display: none;"><span>전체삭제</span></button>
+				<!-- //최근검색어 있을 시 노출 -->
+				<!-- 최근검색어 없을 시 노출 -->
+				<div class="empty_txt" style="display: block;">
+					최근 검색어가 없습니다.
 				</div>
+				<!-- //최근검색어 없을 시 노출 -->
 			</div>
-			<div class="content br_lookbook_view cont_items" th:if="${lookbookDetailList != null}">
-
-				<div class="cont_head">
-					<h3>룩북 속 상품<span class="number">(9,999)</span></h3>
-					<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
+			<div class="popular_blk">
+				<h3>STYLE24에서 검색되고 있어요</h3>
+				<div class="list_popular_keword">
+					<ul id="popularKeyArea">
+<!--						<li>-->
+<!--							<a href="">BUCKAROO</a>-->
+<!--						</li>-->
+<!--						<li>-->
+<!--							<a href="">기모청바지</a>-->
+<!--						</li>-->
+					</ul>
 				</div>
-				<div class="cont_body">
-					<div class="area_slider">
-						<div class="swiper-container">
-							<div class="swiper-wrapper">
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
+			</div>
+			<div class="realtime_blk">
+				<h3>지금 고객님들이 많이 보고 있어요</h3>
+				<div class="modify_timer">
+					<button type="button"><span><em class="time">17:30</em> 기준</span></button>
+				</div>
+				<div class="realtime_wrap">
+					<div class="itemsGrp">
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
 									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩</div>
+									<div class="viewCount"><span>508</span>명 보는중</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
 									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩</div>
+									<div class="viewCount"><span>508</span>명 보는중</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
 									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩</div>
+									<div class="viewCount"><span>508</span>명 보는중</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
 									</div>
-								</div>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩</div>
+									<div class="viewCount"><span>508</span>명 보는중</div>
+								</a>
 							</div>
-							<!-- Add Scrollbar -->
-							<div class="swiper-scrollbar"></div>
 						</div>
-					</div>
-				</div>
-			</div>
-			<div class="content br_lookbook_view cont_others" th:if="${otherLookbookList}">
-				<div class="cont_head">
-					<h3 class="subH1 t_c mb40">다른 룩북 보기</h3>
-					<button onclick="cfnGoToLookbookList();"><span>전체보기</span></button>
-				</div>
-				<div class="cont_body">
-					<div class="area_slider">
-						<div class="swiper-container">
-							<div class="swiper-wrapper">
-								<th:block th:if="${otherLookbookList}" th:each="oneData, status : ${otherLookbookList}">
-									<div class="swiper-slide">
-										<a th:href="|javascript:cfnGoToLookbookDetail('${oneData.lookbookSq}','${oneData.brandCd}')|">
-											<div class="thumb">
-												<img th:src="${@environment.getProperty('domain.image')+oneData.sysFileNm}" alt="" style="height:307px;">
-											</div>
-											<div class="txt">
-												<p class="title" th:text="${oneData.title}">2020 F/W COLLECTION 2020</p>
-											</div>
-										</a>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
 									</div>
-								</th:block>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩</div>
+									<div class="viewCount"><span>508</span>명 보는중</div>
+								</a>
 							</div>
 						</div>
-						<!-- Add Arrows -->
-						<div class="swiper-button-next"></div>
-						<div class="swiper-button-prev"></div>
 					</div>
 				</div>
 			</div>
 		</div>
-	</div>
-
-	<!-- 상단_LOOKBOOK_picker_상품_팝업 -->
-	<div class="modal fade br_pop lookbook_item_pop" id="lookbookItemPop" tabindex="-1" role="dialog" aria-labelledby="lookbook_item_label" aria-hidden="true">
-		<div class="modal-dialog" role="document">
-			<div class="modal-content">
-				<div class="modal-header">
-					<h5 class="modal-title sr-only" id="lookbook_item_label">상품정보</h5>
+		<!-- //검색결과 입력 전 -->
+		<!-- 검색결과 입력 후 -->
+		<div class="searching_box" style="display:none;">
+			<div class="autokeyword_blk">
+				<ul>
+					<li><a href=""><em>가</em>을컬리수</a></li>
+					<li><a href=""><em>가</em>드상하</a></li>
+					<li><a href=""><em>가</em>죽자켓</a></li>
+					<li><a href=""><em>가</em>죽밸트</a></li>
+					<li><a href=""><em>가</em>운</a></li>
+					<li><a href=""><em>가</em>을</a></li>
+					<li><a href=""><em>가</em>디건</a></li>
+					<li><a href=""><em>가</em>디건형니트</a></li>
+					<li><a href=""><em>가</em>드밴드레깅스</a></li>
+					<li><a href=""><em>가</em>을잠옷</a></li>
+				</ul>
+			</div>
+			<div class="exfind_blk">
+				<!-- 검색어 매칭 브랜드 있을 시 노출  -->
+				<div class="find_brand">
+					<h3><a href="">나이키 주니어 샵 바로가기</a></h3>
+				</div>
+				<!-- //검색어 매칭 브랜드 있을 시 노출  -->
+				<!-- 검색어 매칭 카테고리 있을 시 노출  -->
+				<div class="find_category">
+					<ul>
+						<li>
+							<span class="category_txt">카테고리</span>
+							<a href="">
+								<span>여성</span>
+								<span><em>니트가디건/베스트</em></span> <!-- 210419_수정 : em태그 전체 텍스트 감싸는 형식. -->
+							</a>
+						</li>
+						<li>
+							<span class="category_txt">카테고리</span>
+							<a href="">
+								<span>남성</span>
+								<span><em>니트/가디건/베스트</em></span> <!-- 210419_수정 : em태그 전체 텍스트 감싸는 형식. -->
+								<span>가디건</span>
+								<span>롱가디건</span>
+							</a>
+						</li>
+					</ul>
 				</div>
-				<div class="modal-body">
+				<!-- //검색어 매칭 카테고리 있을 시 노출  -->
+			</div>
+
+			<div class="pd_list relate">
+				<h3>관련상품</h3>
+				<div class="realtime_wrap">
 					<div class="itemsGrp">
 						<div class="item_prod">
 							<div class="item_state">
-								<div class="itemLink">
+								<a href="#none" class="itemLink">
 									<div class="itemPic">
-										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/ev_list_img05.jpg">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
 									</div>
-									<p class="itemBrand">BRAND NAME</p>
-									<div class="itemName">[온라인 단독] 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼</div>
-									<span class="itemPrice_original">89,000</span>
-									<p class="itemPrice">80,100
+									<p class="itemBrand">BRAND NAME1</p>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+									<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+									<p class="itemPrice cols">
+										<span class="itemPrice_original">89,000</span>
+										80,100
 										<span class="itemPercent">10%</span>
 									</p>
-									<button type="button" class="btn btn_default"><span>자세히 보기</span></button>
-								</div>
+									<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								</a>
 							</div>
 						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+									</div>
+									<p class="itemBrand">BRAND NAME1</p>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+									<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+									<p class="itemPrice cols">
+										<span class="itemPrice_original">89,000</span>
+										80,100
+										<span class="itemPercent">10%</span>
+									</p>
+									<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+									</div>
+									<p class="itemBrand">BRAND NAME1</p>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+									<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+									<p class="itemPrice cols">
+										<span class="itemPrice_original">89,000</span>
+										80,100
+										<span class="itemPercent">10%</span>
+									</p>
+									<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+									</div>
+									<p class="itemBrand">BRAND NAME1</p>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+									<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+									<p class="itemPrice cols">
+										<span class="itemPrice_original">89,000</span>
+										80,100
+										<span class="itemPercent">10%</span>
+									</p>
+									<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<a href="#none" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+									</div>
+									<p class="itemBrand">BRAND NAME1</p>
+									<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+									<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+									<p class="itemPrice cols">
+										<span class="itemPrice_original">89,000</span>
+										80,100
+										<span class="itemPercent">10%</span>
+									</p>
+									<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								</a>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<!-- //검색결과 입력 후 -->
+
+		<!-- 검색결과 없을때 노출 -->
+		<div class="empty_box">
+			<div class="nodata">
+				<p>
+					<span class="keyword">'티비제이 제기장 스웨터'</span>에 맞는 상품을 찾지 못했습니다.<br>
+					검색어를 변경해 보세요.
+				</p>
+			</div>
+			<div class="pd_list recommend">
+				<h3>이런 상품은 어떤가요?</h3>
+				<div class="itemsGrp">
+					<div class="item_prod">
+						<div class="item_state">
+							<a href="#none" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+								</div>
+								<p class="itemBrand">BRAND NAME1</p>
+								<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+								<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								<p class="itemPrice cols">
+									<span class="itemPrice_original">89,000</span>
+									80,100
+									<span class="itemPercent">10%</span>
+								</p>
+								<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+							</a>
+						</div>
+					</div>
+					<div class="item_prod">
+						<div class="item_state">
+							<a href="#none" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+								</div>
+								<p class="itemBrand">BRAND NAME1</p>
+								<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+								<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								<p class="itemPrice cols">
+									<span class="itemPrice_original">89,000</span>
+									80,100
+									<span class="itemPercent">10%</span>
+								</p>
+								<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+							</a>
+						</div>
+					</div>
+					<div class="item_prod">
+						<div class="item_state">
+							<a href="#none" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+								</div>
+								<p class="itemBrand">BRAND NAME1</p>
+								<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+								<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								<p class="itemPrice cols">
+									<span class="itemPrice_original">89,000</span>
+									80,100
+									<span class="itemPercent">10%</span>
+								</p>
+								<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+							</a>
+						</div>
+					</div>
+					<div class="item_prod">
+						<div class="item_state">
+							<a href="#none" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+								</div>
+								<p class="itemBrand">BRAND NAME1</p>
+								<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+								<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								<p class="itemPrice cols">
+									<span class="itemPrice_original">89,000</span>
+									80,100
+									<span class="itemPercent">10%</span>
+								</p>
+								<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+							</a>
+						</div>
+					</div>
+					<div class="item_prod">
+						<div class="item_state">
+							<a href="#none" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdLookbook_item1.jpg">
+								</div>
+								<p class="itemBrand">BRAND NAME1</p>
+								<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+								<!-- cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+								<p class="itemPrice cols">
+									<span class="itemPrice_original">89,000</span>
+									80,100
+									<span class="itemPercent">10%</span>
+								</p>
+								<!-- //cols 클래스 추가 후 itemPrice_original태그 위로 올려주시면 됩니다. -->
+							</a>
+						</div>
 					</div>
 				</div>
 			</div>
 		</div>
+		<!-- //검색결과 없을때 노출 -->
 	</div>
-	<!-- //상단_LOOKBOOK_picker_상품_팝업 -->
+</div>
+<button type="button" class="btn_close_search" onclick="fnClose();"><span>닫기</span></button>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	var trendKeywordList = [[${trendKeywordList.trendList}]];
 
-	<script th:inline="javascript">
-/*<![CDATA[*/
-	var fnTest = function (){
-		console.log('18');
+	var fnClose = function (){
+		$("#layer_search").removeClass('active');
 	}
-	var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
-	var fnLookbookGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
-	$("#lookbookItemPop").modal("show");
-	$("#lookbookItemPop").find(".pd_img").attr('src',goodsImgUrl+'/'+obj1);
-	$("#lookbookItemPop").find(".itemBrand").text(obj2);
-	$("#lookbookItemPop").find(".itemName").text(obj3);
-	$("#lookbookItemPop").find(".itemPrice_original").text(obj4);
-	$("#lookbookItemPop").find(".itemPrice").text(obj5);
-	$("#lookbookItemPop").find(".itemPercent").text(obj6+'%');
-	$("#lookbookItemPop").find(".btn_default").attr('onclick','cfnGoToPage(_PAGE_GOODS_DETAIL+"'+obj7+'");');
-}
-	// 컨텐츠 호출
-	$(document).ready( function() {
-		/* 슬라이드 - 상단_LOOKBOOK */
-		var lookbook_visual_slide = new Swiper('.br_lookbook_view.cont_visual .swiper-container', {
-			loop: true,
-			slidesPerView: 'auto',
-			spaceBetween: 20,
-			speed : 800,
-			autoWidth: true,
-			autoHeight: true,
-			centeredSlides: true,
-			autoplay: false,
-			navigation: {
-				nextEl: '.br_lookbook_view.cont_visual .swiper-button-next',
-				prevEl: '.br_lookbook_view.cont_visual .swiper-button-prev',
-			},
-			pagination: {
-				el: '.br_lookbook_view.cont_visual .swiper-pagination',
-				clickable: true,
-			},
-		}, fnTest());
-
-		/* 슬라이드 - 룩북 속 상품 */
-		var togetherItemSwiper = new Swiper('.br_lookbook_view.cont_items .swiper-container', {
-			slidesPerView: 6,
-			spaceBetween: 20,
-			scrollbar: {
-				el: '.br_lookbook_view.cont_items .swiper-scrollbar',
-				hide: true,
-			},
-		});
 
+	$(document).ready( function() {
+		$("#layer_search").addClass('active');
 
-		var br_ohter_slide = new Swiper('.br_lookbook_view.cont_others .swiper-container', {
-			slidesPerView: 5,
-			spaceBetween: 20,
-			navigation: {
-				nextEl: '.br_lookbook_view.cont_others .swiper-button-next',
-				prevEl: '.br_lookbook_view.cont_others .swiper-button-prev',
-			},
-		});
+		if(trendKeywordList.length > 0){
+			$("#popularKeyArea").html('');
+			trendKeywordList.forEach(function (item, index){
+				var tag = '';
+				if(index<10){
+					tag += '<li>';
+					tag += '	<a href="">'+ item.keyword +'</a>';
+					tag += '</li>';
+				}
+				$("#popularKeyArea").append(tag);
+			});
+		}
 
-		// 슬라이드 - 상단_LOOKBOOK > picker - 룩북_피커_상품정보 팝업
-		$(document).on('click','#btn_picker_item01',function(e){
-			$("#lookbookItemPop").modal("show");
-			return false;
-		});
 	});
-
-/*]]>*/
+	/*]]>*/
 </script>
-
-</th:block>
-
-</body>
-</html>
+</html>

+ 31 - 10
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html

@@ -179,19 +179,36 @@
 			</div>
 			</th:block>
 		</div>
-		<div class="area_kcl" th:if="${goodsSafeNo != null}">
+		
+		<th:block th:if="${goodsSafeNo != null}" >
+			<th:block th:if="${goodsSafeNo.certTargetGb == 'G083_3'}" >  <!-- 상세별도표시 -->
+		<div class="area_kcl no-mark">
+			<p class="tit normal"><th:block th:if="${goodsSafeNo.certFormNm}" th:text="${goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
+			<p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
+			<p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
+		</div>	
+			</th:block>
+			<th:block th:unless="${goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
+				<th:block th:if="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
+		<div class="area_kcl">
 			<i class="ico ico_kcl"></i>
-			<th:block th:if="${not #strings.contains(goodsSafeNo.certNum, '해당')}" >
-			<p class="tit normal"  th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">
-				어린이제품 안전인증 / 한국건설생활시험연구원(KCL)
-			</p>
+			<p class="tit normal"><th:block th:text="${goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
+			<p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
+			<p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
+		</div>
+				</th:block>
+				<th:block th:unless="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
+		<div class="area_kcl" >
+			<i class="ico ico_kcl"></i>
+			<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+			<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
+			</th:block>
+			<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+			<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' 안전인증'}"></p>
 			</th:block>
 			<p class="normal" >
-				<th:block th:if="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-				해당 없음 
-				</th:block>
-				<th:block th:unless="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-				인증번호: <th:block th:text="${goodsSafeNo.certNum}"></th:block>
+				<th:block th:if="${goodsSafeNo.certNum}" th:text="${'인증번호: ' + goodsSafeNo.certNum}"></th:block>
+				<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
 				<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
 				</th:block>
 			</p>
@@ -199,6 +216,10 @@
 				해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
 			</p>
 		</div>
+				</th:block>
+			</th:block>
+		</th:block>
+		
 		<div class="area_infotbl">
 			<span class="title">상품기본정보</span>
 			<div class="tbl type1 mt30">

+ 67 - 32
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -762,19 +762,35 @@
 						</div>
 						</th:block>
 					</div>
-					<div class="area_kcl" th:if="${goodsInfo.goodsType == 'G056_N' and goodsSafeNo != null}">
+					<th:block th:if="${goodsInfo.goodsType == 'G056_N' and goodsSafeNo != null}" >
+						<th:block th:if="${goodsSafeNo.certTargetGb == 'G083_3'}" >  <!-- 상세별도표시 -->
+					<div class="area_kcl no-mark">
+						<p class="tit normal"><th:block th:if="${goodsSafeNo.certFormNm}" th:text="${goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
+						<p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
+						<p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
+					</div>	
+						</th:block>
+						<th:block th:unless="${goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
+							<th:block th:if="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
+					<div class="area_kcl">
 						<i class="ico ico_kcl"></i>
-						<th:block th:if="${not #strings.contains(goodsSafeNo.certNum, '해당')}" >
-						<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">
-							어린이제품 안전인증 / 한국건설생활시험연구원(KCL)
-						</p>
+						<p class="tit normal"><th:block th:text="${goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
+						<p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
+						<p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
+					</div>
+							</th:block>
+							<th:block th:unless="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
+					<div class="area_kcl" >
+						<i class="ico ico_kcl"></i>
+						<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+						<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
+						</th:block>
+						<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
+						<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' 안전인증'}"></p>
 						</th:block>
 						<p class="normal" >
-							<th:block th:if="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-							해당 없음 
-							</th:block>
-							<th:block th:unless="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-							인증번호: <th:block th:text="${goodsSafeNo.certNum}"></th:block>
+							<th:block th:if="${goodsSafeNo.certNum}" th:text="${'인증번호: ' + goodsSafeNo.certNum}"></th:block>
+							<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
 							<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
 							</th:block>
 						</p>
@@ -782,30 +798,51 @@
 							해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
 						</p>
 					</div>
+							</th:block>
+						</th:block>
+					</th:block>
+					
 					<th:block th:if="${goodsInfo.goodsType == 'G056_S'}">
 					<th:block th:each="goodsCompose, status : ${goodsComposeList}">
-					<th:block th:if="${goodsCompose.goodsSafeNo != null}">
+						<th:block th:if="${goodsCompose.goodsSafeNo != null}">
+							<th:block th:if="${goodsCompose.goodsSafeNo.certTargetGb == 'G083_3'}" >  <!-- 상세별도표시 -->
+						<div class="area_kcl no-mark">
+							<p class="tit normal"><th:block th:if="${goodsCompose.goodsSafeNo.certFormNm}" th:text="${goodsCompose.goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
+							<p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
+							<p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
+						</div>	
+							</th:block>
+							<th:block th:unless="${goodsCompose.goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
+								<th:block th:if="${goodsCompose.goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
+						<div class="area_kcl">
+							<i class="ico ico_kcl"></i>
+							<p class="tit normal"><th:block th:text="${goodsCompose.goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
+							<p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
+							<p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
+						</div>
+								</th:block>
+								<th:block th:unless="${goodsCompose.goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
 						<div class="area_kcl" >
-						<i class="ico ico_kcl"></i>
-						<th:block th:if="${not #strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
-						<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certDiv + ' / ' + goodsCompose.goodsSafeNo.certOrganName}">
-							어린이제품 안전인증 / 한국건설생활시험연구원(KCL)
-						</p>
-						</th:block>
-						<p class="normal" >
-							<th:block th:if="${#strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
-							해당 없음 
+							<i class="ico ico_kcl"></i>
+							<th:block th:if="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
+							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certDiv + ' / ' + goodsCompose.goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
 							</th:block>
-							<th:block th:unless="${#strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
-							인증번호: <th:block th:text="${goodsCompose.goodsSafeNo.certNum}"></th:block>
-							<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsCompose.goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
+							<th:block th:unless="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
+							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certFormNm + ' 안전인증'}"></p>
 							</th:block>
-						</p>
-						<p class="t_info dot_info">
-							해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
-						</p>
-					</div>
-					</th:block>
+							<p class="normal" >
+								<th:block th:if="${goodsCompose.goodsSafeNo.certNum}" th:text="${'인goodsCompose.증번호: ' + goodsSafeNo.certNum}"></th:block>
+								<th:block th:if="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
+								<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsCompose.goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
+								</th:block>
+							</p>
+							<p class="t_info dot_info">
+								해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
+							</p>
+						</div>
+								</th:block>
+							</th:block>
+						</th:block>
 					</th:block>
 					</th:block>
 					<div class="area_infotbl">
@@ -1620,8 +1657,6 @@
 		
 		$('.timer_box').css('display', 'none');
 		
-		
-		
 		//공유 버튼 토글 
 		$("button[data-name=openShare]").on("click", function(){
 			$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
@@ -1965,7 +2000,7 @@
      window.onload = function(){
     	 $(".pd_descrp .cont_body").find('img').each(function() {
  			let tmpImgSrc = $(this).attr('src');
- 			if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
+ 			if (tmpImgSrc.indexOf('/Upload') == 0 ){  // /Upload
  				$(this).attr('src' , tmpImgSrc.replace('/Upload', _imgUrl+"/Local"));
  			}
  			

+ 7 - 5
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html

@@ -72,11 +72,9 @@
 					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
 						fileGbClass = '';
 						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
-				tag +='		<span class="thumb" class="'+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
+				tag +='		<span class="thumb '+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
 						if (reviewAttach.fileGb == "M") {
-				tag +='			<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">\n';
-				tag +='				<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">\n';
-				tag +='			</video>\n';
+				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';	
 						}
@@ -197,7 +195,11 @@
 				tag +='			<li>\n';
 				tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
 				tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-				tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
+					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';
 				tag +='				</div>\n';
 				tag +='			</li>\n';

+ 5 - 3
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -383,6 +383,7 @@ let reviewList = [[${reviewInfo}]];
 let reviewStat = [[${reviewStat}]];
 let reviewAttach = [[${alreadyReviewAttach}]];
 let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
+
 // 별점 class="on"
 var $starEls = $('#star button#starBtn');
 var rate = 0;
@@ -641,7 +642,7 @@ $(document).ready(function() {
 		 rating(reviewScore);
 		$("#reviewForm input[name=height]").val(reviewList.height);
 		$("#reviewForm input[name=weight]").val(reviewList.weight);
-		$("#reviewForm textarea[name=reviewContent]").val(reviewList.reviewContent);
+		$("#reviewForm textarea[name=reviewContent]").val(reviewList.reviewContent.escapeHtml());
 		if(reviewList.scoreSize == "1"){
 			$('#reviewForm input:radio[name=scoreSize]:radio[value="1"]').prop('checked', true);
 		}else if(reviewList.scoreSize == "2"){
@@ -702,8 +703,9 @@ $(document).ready(function() {
 								"</span>").insertAfter("#fileAdd");
 					}else{
 						$("<span class=\"pics\">" +
-								"<img class=\"picsThumbs\" src=\"" + _kollusMediaUrl + '/' + attachList[i].kmcKey + "\" />" +
-								"<input type='hidden' name='kufKeyArr' value='" + attachList[i].kmcKey + "'>" + 
+								"<img class=\"picsThumbs\" />" +
+								"<input type='hidden' name='kmcKeyArr' value='" + reviewAttach[i].kmcKey + "'>" + 
+								"<input type='hidden' name='kufKeyArr' value='" + reviewAttach[i].kufKey + "'>" + 
 								"<br/><span class=\"removes\">Removes image</span>" +
 								"</span>").insertAfter("#fileAdd");
 					}

+ 16 - 7
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

@@ -187,13 +187,22 @@
 						}
 						fileGbClass = '';
 						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
-				tag +='			<li>\n';
-				tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
-				tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-				tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
-				tag +='					</span>\n';
-				tag +='				</div>\n';
-				tag +='			</li>\n';
+						if (reviewAttach.fileGb == "M") {
+							tag +='			<li>\n';
+							tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+							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';
+							tag +='				</div>\n';
+							tag +='			</li>\n';
+						}else{
+							tag +='			<li>\n';
+							tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+							tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+							tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
+							tag +='					</span>\n';
+							tag +='				</div>\n';
+							tag +='			</li>\n';
+						}
+				
 					});
 				tag +='		</ul>\n';
 				tag +='	</div>\n';

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

@@ -334,7 +334,7 @@
 					
 				}
 				html+='						<div class="txt_review_box"  id="admin_'+item.reviewSq+'">';
-				html+='							<p>'+item.reviewContent+'</p>';
+				html+='							<p>'+item.reviewContent.escapeHtml()+'</p>';
 				html+='						</div>';
 				
 				if (item.admRpl != null && item.admRpl != '') {
@@ -345,7 +345,7 @@
 					html+='									<span class="wr_date">'+item.admRplDt+'</span>';
 					html+='								</div>';
 					html+='								<div class="reply_txt">';
-					html+='									<p>'+item.admRpl+'</p>';
+					html+='									<p>'+item.admRpl.escapeHtml()+'</p>';
 					html+='								</div>';
 					html+='							</div>';
 					html+='						</div>';

+ 1 - 1
src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html

@@ -76,7 +76,7 @@ var ajaxWishList = function () {
 						if (item.regDtMonth == month[i].regDt) {
 							html+='		<div class="item_prod">';
 							html+='			<div class="item_state">';
-							html+='				<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" onclick="wishlistDelete(this)">관심상품 추가</button>';
+							html+='				<button type="button" class="itemLike active" goodsCd=\''+item.goodsCd+'\' onclick="wishlistDelete(this)">관심상품 추가</button>';
 							html+='				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">';
 							html+='					<div class="itemPic">';
 							html+='						<img alt="" class=" vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">';

+ 12 - 17
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -277,9 +277,8 @@
 
 		// 예정등급이 VIP가 아닌경우
 		if (Number(expctCustGrade.gradeCdNo) > 10) {
-			let nextGradeNo = Number(expctCustGrade.gradeCdNo)-10;				// 다음등급번호
-			let nextCustGradePolicy = fnGetNextGradePolicyInfo(nextGradeNo);	// 다음등급정책정보
-			fnNextGradeCondition(nextCustGradePolicy, expctCustGrade);			// 다음조건 알림
+			let nextGradeNo = 'G110_'+(Number(expctCustGrade.gradeCdNo)-10);				// 다음등급번호
+			fnGetNextGradePolicyInfo(nextGradeNo);	// 다음등급정책정보
 		} else {
 			fnDisplayVipText(expctCustGrade);
 		}
@@ -288,18 +287,14 @@
 
  	// 다음 등급정책
  	var fnGetNextGradePolicyInfo = function (nextGradeNo) {
-		let custGradePolicy = exptCustGradeMap.custGradePolicy;	// 등급별정책
-		let nextCustGradePolicy;
-		$(custGradePolicy).each(function(idx, item) {
-			if (Number(item.gradeCdNo) === nextGradeNo ) {
-				nextCustGradePolicy = item;
-			}
-		});
-		return nextCustGradePolicy;
+		$.get('/planning/next/custgrade/info/' + nextGradeNo
+			, function (data) {
+				fnNextGradeCondition(data.nextCustGradePolicy);			// 다음조건 알림
+			});
 	}
 
 	// 다음등급 조건 알림
-	var fnNextGradeCondition = function (nextCustGradePolicy, expctCustGrade) {
+	var fnNextGradeCondition = function (nextCustGradePolicy) {
 		let $etcGrade = $('#etcGrade');
 		let $sameVipGrade = $('#sameVipGrade');
 		let $vipGrade = $('#vipGrade');
@@ -310,13 +305,13 @@
 		let $nextGrde = $('#nextGrde');
 
 		let remnantBuyAmt = 0;
-		if (nextCustGradePolicy.minBuyAmt > expctCustGrade.sumRealOrdAmt) {
-			remnantBuyAmt = nextCustGradePolicy.minBuyAmt - expctCustGrade.sumRealOrdAmt;
+		if (nextCustGradePolicy.minBuyAmt > nextCustGradePolicy.sumRealOrdAmt) {
+			remnantBuyAmt = nextCustGradePolicy.minBuyAmt - nextCustGradePolicy.sumRealOrdAmt;
 		}
 
 		let remnantBuyCnt = 0;
-		if (nextCustGradePolicy.minBuyCnt > expctCustGrade.ordCnt) {
-			remnantBuyCnt = nextCustGradePolicy.minBuyCnt -  expctCustGrade.ordCnt;
+		if (nextCustGradePolicy.minBuyCnt > nextCustGradePolicy.ordCnt) {
+			remnantBuyCnt = nextCustGradePolicy.minBuyCnt -  nextCustGradePolicy.ordCnt;
 		}
 
 		$etcGrade.show();
@@ -361,7 +356,7 @@
 
 	$('#btnGradeCoupon').on('click', function () {
 		let params = JSON.stringify({});
-		gagajf.ajaxJsonSubmit('/planning/event/custgrade/coupon/down', params, fnDownloadCallback)
+		gagajf.ajaxJsonSubmit('/planning/event/custgrade/coupon/down', params, fnDownloadCallback);
 	});
 
  	var fnDownloadCallback = function (result) {

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

@@ -51,6 +51,7 @@ const _PAGE_GOODS_REVIEW_PHTO_LIST_LAYER = _frontUrl + "/goods/review/photo/laye
 const _PAGE_GOODS_CPN_DOWNLOAD = "/goods/coupon/download";											// 상품쿠폰다운로드
 const _PAGE_GOODS_EP_CPN_DOWNLOAD = "/goods/ep/coupon/download";									// EP쿠폰다운로드
 const _PAGE_DEAL_GOODS_DETAIL_LAYER = _frontUrl + "/goods/deal/detail/layer/";						// 딜상품 상세레이어
+const _PAGE_SEARCH_LAYER = _frontUrl + "/display/search/layer/";									// 검색레이어
 
 //== 장바구니 ==/
 const _PAGE_CART = _frontUrl + "/cart/list/form";								// 장바구니
@@ -1302,6 +1303,32 @@ function copyToClipboard() {
 	mcxDialog.alert("URL이 복사 되었습니다.");
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 검색 full 팝업
+ * <pre>
+ *		cfSearchLayer();
+ * </pre>
+ */
+function cfSearchLayer() {
+	var Param = new Object();
+	var str = '<div class="common_search active" id="layer_search"></div>';
+	if ("P" != _frontGb){
+		// str = '<div class="modal pop_full fade pd_pop pd_qnalist_pop" id="layer_goods_qna" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
+
+	if ($('#layer_search').length == 0) {
+		$('body').append(str);
+	}
+
+	if ("P" == _frontGb){
+		cfOpenFullLayer(_PAGE_SEARCH_LAYER, 'layer_search');
+	}else{
+		cfOpenLayer(_PAGE_SEARCH_LAYER, 'layer_search');
+	}
+}
+
 /**
  * @type   : function
  * @access : public