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

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

Conflicts:
	src/main/java/com/style24/front/biz/web/TsfOrderController.java
jsh77b 5 роки тому
батько
коміт
5ca90ac6d3
91 змінених файлів з 4839 додано та 1060 видалено
  1. 10 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 10 0
      src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java
  3. 10 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  4. 3 10
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  5. 16 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  6. 27 14
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  7. 27 6
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  8. 11 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  9. 6 6
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  10. 40 30
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  11. 1 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  12. 17 12
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  13. 12 0
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  14. 40 8
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  15. 32 4
      src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java
  16. 12 0
      src/main/java/com/style24/front/support/security/session/TsfSession.java
  17. 1 0
      src/main/java/com/style24/persistence/domain/Cart.java
  18. 1 0
      src/main/java/com/style24/persistence/domain/Goods.java
  19. 2 2
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  20. 12 0
      src/main/java/com/style24/persistence/domain/Login.java
  21. 7 0
      src/main/java/com/style24/persistence/domain/Plan.java
  22. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  23. 4 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  24. 226 33
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  25. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  26. 2 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfLogin.xml
  27. 78 11
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  28. 30 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  29. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  30. 85 60
      src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml
  31. 2 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  32. 1 3
      src/main/resources/config/application-tsit.yml
  33. 389 0
      src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html
  34. 63 10
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  35. 18 10
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  36. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDeliveryFormMob.html
  37. 28 37
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  38. 14 23
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  39. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  40. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  41. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsInstockAlarmFormMob.html
  42. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  43. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html
  44. 168 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html
  45. 113 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html
  46. 262 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  47. 112 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html
  48. 134 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html
  49. 6 6
      src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html
  50. 5 5
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  51. 92 14
      src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html
  52. 4 4
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  53. 706 291
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  54. 52 5
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  55. 1 9
      src/main/webapp/WEB-INF/views/web/customer/IdFindFormWeb.html
  56. 8 1
      src/main/webapp/WEB-INF/views/web/customer/JoinCompleteFormWeb.html
  57. 32 8
      src/main/webapp/WEB-INF/views/web/customer/PasswordFindFormWeb.html
  58. 1 2
      src/main/webapp/WEB-INF/views/web/customer/PrivacyTrustLayerFormWeb.html
  59. 8 6
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  60. 90 168
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  61. 2 2
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  62. 333 8
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  63. 0 0
      src/main/webapp/WEB-INF/views/web/display/SearchLayerWeb.html
  64. 3 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  65. 4 4
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  66. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealListFormWeb.html
  67. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDeliveryFormWeb.html
  68. 30 18
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  69. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  70. 12 12
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  71. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html
  72. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html
  73. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaFormWeb.html
  74. 5 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  75. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewFormWeb.html
  76. 3 10
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html
  77. 488 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreListFormWeb.html
  78. 110 110
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  79. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  80. 8 4
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  81. 174 28
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  82. 25 22
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  83. 1 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  84. 1 0
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  85. 363 0
      src/main/webapp/biz/goodsSession.js
  86. 8 0
      src/main/webapp/ux/mo/css/common_m.css
  87. 2 1
      src/main/webapp/ux/mo/css/style24_m.css
  88. 1 1
      src/main/webapp/ux/pc/css/layout.css
  89. 205 0
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scroll.js
  90. 0 4
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollSession.js
  91. 11 4
      src/main/webapp/ux/style24_link.js

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

@@ -16,6 +16,7 @@ import com.style24.persistence.domain.GnbTab;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.Goods;
 
 /**
  * 전시 Dao
@@ -171,4 +172,13 @@ public interface TsfDisplayDao {
 	 * @date 2021. 4. 7
 	 */
 	int getCategoryGoodsCount(GoodsSearch goodsSearch);
+
+	/**
+	 * 카테고리 별 상품 리스트
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 8
+	 */
+	Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch);
 }

+ 10 - 0
src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java

@@ -108,4 +108,14 @@ public interface TsfOrderChangeDao {
 	 */
 	Collection<OrderChange> getPagingCreList(OrderChange orderChange);
 
+	/**
+	 * 마이페이지 교환 상품 옵션 정보 조회
+	 *
+	 * @param OrderChange
+	 * @return Collection<OrderChange>
+	 * @author card007
+	 * @since 2021. 04. 08
+	 */
+	OrderChange getExchangeGoodsOptionInfoList(OrderChange orderChange);
+
 }

+ 10 - 0
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -342,4 +342,14 @@ public interface TsfPlanningDao {
 	 */
 	Collection<Plan> getCustAttendEntryList(Plan plan);
 	
+	/**
+	 * 기획전/이벤트 댓글
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 8
+	 */
+	Collection<Plan> getReplyList(Plan plan);
+	
 }

+ 3 - 10
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -150,32 +150,23 @@ public class TsfCartService {
 
 				goods = goodsService.getGoodsInfo(goods);
 
-				log.info("CHECK :::::::::::::::: 0 ::::::::::::::::::::::");
-
 				if (goods == null) {
-					log.info("CHECK :::::::::::::::: 1 ::::::::::::::::::::::");
 					result.put("message", "상품 정보가 존재하지 않습니다.");
 					return result;
 				} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
-					log.info("CHECK :::::::::::::::: 2 ::::::::::::::::::::::");
 					result.put("message", "품절입니다");
 					return result;
 				} else if (!TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat()) && !TscConstants.GoodsStat.APPR.value().equals(goods.getGoodsStat())) {
-					log.info("CHECK :::::::::::::::: 3 ::::::::::::::::::::::");
 					result.put("message", "판매중인 상품이 아닙니다.");
 					return result;
 				} else if (param.getGoodsQty() > goods.getMaxOrdQty()) {
-					log.info("CHECK :::::::::::::::: 4 ::::::::::::::::::::::");
 					result.put("message", goods.getGoodsNm() + " 상품의 최대 구매 수량은 " + goods.getMaxOrdQty() + " 입니다.");
 					return result;
 				} else if (param.getGoodsQty() < goods.getMinOrdQty()) {
-					log.info("CHECK :::::::::::::::: 5 ::::::::::::::::::::::");
 					result.put("message", goods.getGoodsNm() + " 상품의 최소 구매 수량은 " + goods.getMinOrdQty() + " 입니다.");
 					return result;
 				}
 
-				log.info("CHECK :::::::::::::::: 6 ::::::::::::::::::::::");
-
 				// 상품 재고 확인
 				GoodsStock checkParam = new GoodsStock();
 				checkParam.setGoodsCd(param.getGoodsCd());
@@ -235,10 +226,10 @@ public class TsfCartService {
 
 		cart.setJsessionId(TscSession.getSessionId());
 
-		// 장바구니 보유 CART_SQ 쿼리
 		List<String> sendCartSqList = new ArrayList<String>();
 		for (Cart carts : params) {
 			int i = 1;
+			// 장바구니 보유 CART_SQ 쿼리
 			Collection<Cart> cartInfos = carts.getCartCompsList();
 			sb = new StringBuilder();
 			for(Cart param : cartInfos) {
@@ -310,6 +301,7 @@ public class TsfCartService {
 			}
 		}
 
+		// 상품상세 > 바로구매 로그인 후 구매 클릭시 주문서로 송부할 장바구니번호
 		StringBuilder cartSqComma = new StringBuilder();
 
 		int i = 0;
@@ -887,6 +879,7 @@ public class TsfCartService {
 		/* cart.add(cartDao.selectCartGoodsInfo(param)); */
 
 		// 장바구니 상품 마스터 정보 조회
+		param.setFrontGb(TsfSession.getFrontGb());
 		Cart cart = cartDao.selectCartGoodsInfo(param);
 		if(cart == null) {
 			throw new IllegalArgumentException("장바구니 상품 정보가 없습니다.<br/>새로고침 후 다시 시도해주세요.");

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

@@ -75,7 +75,7 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 08
 	 */
 	public Customer getCustomerFindId(Customer customer) {
-		TscSession.setAttribute("maskingYn","Y");
+		TsfSession.setAttribute("maskingYn","Y");
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData(); // 데이터 암호하
 		return customerDao.getCusomterActiveAndDormant(customer);
@@ -972,6 +972,7 @@ public class TsfCustomerService {
 		params.setSiteCd(customer.getSiteCd());
 		Collection<CustGrade> custGradePolicy = customerDao.getCustGradePolicy(params);
 		result.set("custGradePolicy", custGradePolicy);
+
 		CustGrade expctCustGrade;
 		for (CustGrade grade : custGradePolicy) {
 			grade.setCustNo(customer.getCustNo());
@@ -983,4 +984,18 @@ public class TsfCustomerService {
 		}
 		return result;
 	}
+
+	public GagaMap downloadCustGradeCoupon(Integer custNo) {
+		GagaMap result = new GagaMap();
+		Customer custInfo = getCustomerFindByCustNo(custNo);
+		// TB_CUST_GRADE_POLICY
+
+		// 1. 등급정책 정보
+		// 1.1 WELCOME 첫번째 쿠폰은 무시
+		// 1.2 두번쨰 쿠폰은 저장
+		// 1.3 세번째 쿠폰은 생일 쿠폰이여서 생일 판단 후 등록
+
+
+		return result;
+	}
 }

+ 27 - 14
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -20,9 +20,10 @@ import com.style24.persistence.domain.Cate4;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
+import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
-import com.style24.persistence.domain.GoodsSearch;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -75,7 +76,7 @@ public class TsfDisplayService {
 	 * @author gagamel
 	 * @date 2021. 3. 11
 	 */
-	@Cacheable(value = "commonGnb", key = "'gnbTab-'.concat(#gnbTab.gtabGb)")
+//	@Cacheable(value = "commonGnb", key = "'gnbTab-'.concat(#gnbTab.gtabGb)")
 	public Collection<GnbTab> getGnbTabList(GnbTab gnbTab) {
 		return displayDao.getGnbTabList(gnbTab);
 	}
@@ -269,7 +270,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 16
 	 */
-	public Collection<MainLayout> getMainLayout(MainLayout mainLayout){
+	public Collection<MainLayout> getMainLayout(MainLayout mainLayout) {
 		return displayDao.getMainLayout(mainLayout);
 	}
 
@@ -280,10 +281,10 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 16
 	 */
-	public Cate4Srch getCate4srch(Cate4Srch cate4Srch){
+	public Cate4Srch getCate4srch(Cate4Srch cate4Srch) {
 		return displayDao.getCate4srch(cate4Srch);
 	}
-	
+
 	/**
 	 * 팝업 목록
 	 *
@@ -295,7 +296,7 @@ public class TsfDisplayService {
 	public Collection<Popup> getPopupList(Popup popup) {
 		popup.setSiteCd(TscConstants.Site.STYLE24.value());
 		return displayDao.getPopupList(popup);
-	} 
+	}
 
 	/**
 	 * 몰메인 MD PICK 목록
@@ -304,21 +305,21 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 30
 	 */
-	public Collection<Contents> getContentsForGoods(Contents contents){
+	public Collection<Contents> getContentsForGoods(Contents contents) {
 		Collection<Contents> contentsList = displayDao.getContentsList(contents);
 		Cate4Srch tempContents = new Cate4Srch();
-		for(Contents data : contentsList){
+		for (Contents data : contentsList) {
 			tempContents.setContentsLoc(data.getContentsLoc());
 			tempContents.setDispOrd(data.getDispOrd());
 			tempContents.setMaxRow(20);
 			tempContents.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
-			if("SMM007".equals(data.getContentsLoc())){
+			if ("SMM007".equals(data.getContentsLoc())) {
 				data.setBannerList(displayDao.getContentsBannerList(data));
 			}
 			data.setGoodsList(goodsDao.getContentsCategoryGoodsList(tempContents));
 		}
 
-		log.info("getContentsForGoods contentsList.size()::{}",contentsList.size());
+		log.info("getContentsForGoods contentsList.size()::{}", contentsList.size());
 
 		return contentsList;
 
@@ -331,7 +332,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 5
 	 */
-	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb){
+	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb) {
 		cate4Srch.setFilterGb(filterGb);
 		return displayDao.getCategoryFilter(cate4Srch);
 	}
@@ -343,7 +344,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 7
 	 */
-	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch){
+	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch) {
 		return displayDao.getCategoryFilterBenefit(cate4Srch);
 	}
 
@@ -354,8 +355,20 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 7
 	 */
-	public int getCategoryGoodsCount(GoodsSearch goodsSearch){
-	return displayDao.getCategoryGoodsCount(goodsSearch);
+	public int getCategoryGoodsCount(GoodsSearch goodsSearch) {
+		return displayDao.getCategoryGoodsCount(goodsSearch);
+	}
+
+	/**
+	 * 카테고리 별 상품 리스트
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 8
+	 */
+	public Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch) {
+		Collection<Goods> goodsList = displayDao.getCategoryGoodsList(goodsSearch);
+		return goodsList;
 	}
 
 }

+ 27 - 6
src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java

@@ -248,6 +248,7 @@ public class TsfOrderChangeService {
 	public Collection<GagaMap> getCreList(OrderChange orderChange) {
 		Collection<GagaMap> creList = new ArrayList<>();
 		Collection<OrderChange> orderChangeList = new ArrayList<>();
+		Collection<OrderChange> exchangeOptionList = new ArrayList<>();
 		int ordChgSq = 0;
 		int index = 0;
 
@@ -268,8 +269,27 @@ public class TsfOrderChangeService {
 
 			// 취반교 목록 데이터 설정
 			if (index > 0 && ordChgSq != tmpOrderChange.getOrdChgSq()) {
-				creList.add(setOrderChangeMap(orderChangeList));
+				creList.add(setOrderChangeMap(orderChangeList, exchangeOptionList));
 				orderChangeList = new ArrayList<>();
+				exchangeOptionList = new ArrayList<>();
+			}
+
+			// 교환 시 교환옵션정보 설정
+			if ("G680_40".equals(tmpOrderChange.getChgGb())) {
+				OrderChange exchangeGoodsOptionInfo = orderChangeDao.getExchangeGoodsOptionInfoList(tmpOrderChange);
+				if (exchangeGoodsOptionInfo.getItemNm().contains("!@!")) {
+					exchangeGoodsOptionInfo.setItemNmArr(exchangeGoodsOptionInfo.getItemNm().split("!@!"));
+					exchangeGoodsOptionInfo.setColorNmArr(exchangeGoodsOptionInfo.getColorNm().split(","));
+					exchangeGoodsOptionInfo.setOptCd1Arr(exchangeGoodsOptionInfo.getOptCd1().split(","));
+					exchangeGoodsOptionInfo.setOptCd2Arr(exchangeGoodsOptionInfo.getOptCd2().split(","));
+				} else {
+					String[] arr = {exchangeGoodsOptionInfo.getItemNm()}, arr2 = {exchangeGoodsOptionInfo.getColorNm()}, arr3 = {exchangeGoodsOptionInfo.getOptCd1()}, arr4 = {tmpOrderChange.getOptCd2()};
+					exchangeGoodsOptionInfo.setItemNmArr(arr);
+					exchangeGoodsOptionInfo.setColorNmArr(arr2);
+					exchangeGoodsOptionInfo.setOptCd1Arr(arr3);
+					exchangeGoodsOptionInfo.setOptCd2Arr(arr4);
+				}
+				exchangeOptionList.add(exchangeGoodsOptionInfo);
 			}
 
 			orderChangeList.add(tmpOrderChange);
@@ -278,21 +298,22 @@ public class TsfOrderChangeService {
 		}
 
 		if (orderChangeList.size() > 0) {
-			creList.add(setOrderChangeMap(orderChangeList));
+			creList.add(setOrderChangeMap(orderChangeList, exchangeOptionList));
 		}
 
 		return creList;
 	}
 
-	private GagaMap setOrderChangeMap(Collection<OrderChange> ordCreList) {
-		OrderChange orderChange = ordCreList.iterator().next();
+	private GagaMap setOrderChangeMap(Collection<OrderChange> creList, Collection<OrderChange> exchangeOptionList) {
+		OrderChange orderChange = creList.iterator().next();
 
 		GagaMap map = new GagaMap();
 		map.set("giftPackYn", orderChange.getGiftPackYn());
 		map.set("ordChgSq", orderChange.getOrdChgSq());
-		map.set("chgDt", orderChange.getChgDt());
+		map.set("ordDt", orderChange.getOrdDt());
 		map.set("oneData", orderChange);
-		map.set("ordCreList", ordCreList);
+		map.set("creList", creList);
+		map.set("exchangeOptionList", exchangeOptionList);
 
 		return map;
 	}

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

@@ -510,5 +510,16 @@ public class TsfPlanningService {
 		return planningDao.getCustAttendEntryList(plan);
 	}
 
+	/**
+	 * 기획전/이벤트 댓글
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 8
+	 */
+	public Collection<Plan> getReplyList(Plan plan){
+		return planningDao.getReplyList(plan);
+	}
 
 }

+ 6 - 6
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -21,7 +21,6 @@ import org.springframework.web.servlet.ModelAndView;
 import com.style24.core.biz.service.TscClauseService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.core.support.session.TscSession;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfKakaoService;
 import com.style24.front.biz.thirdparty.NiceCertify;
@@ -223,7 +222,7 @@ public class TsfCustomerController extends TsfBaseController {
 		Customer custInfo = customerService.getCustomerFindId(params);
 		if (custInfo != null) {
 			isFind = true;
-			TscSession.setAttribute("custNo", String.valueOf(custInfo.getCustNo()));
+			TsfSession.setAttribute("custNo", String.valueOf(custInfo.getCustNo()));
 		}
 
 		result.setString("authMethod", customer.getAuthMethod()); // 인증방법
@@ -244,7 +243,7 @@ public class TsfCustomerController extends TsfBaseController {
 		String custNo = "";
 
 		if ("find".equals(pageGb)) { //비밀번호 찾기 사용
-			custNo = TscSession.getAttribute("custNo");
+			custNo = TsfSession.getAttribute("custNo");
 		}
 
 		if ("temp".equals(pageGb)) { // 비밀번호 변경 캠페인, 임시비밀번호로 로그인시 사용, 마이페이지 내정보 관리-비밀번호 수정
@@ -286,7 +285,7 @@ public class TsfCustomerController extends TsfBaseController {
 		if (TsfSession.isLogin()) {
 			custNo = String.valueOf(TsfSession.getInfo().getCustNo());
 		} else {
-			custNo = TscSession.getAttribute("custNo");
+			custNo = TsfSession.getAttribute("custNo");
 		}
 
 		if (StringUtils.isBlank(custNo)) {
@@ -539,7 +538,7 @@ public class TsfCustomerController extends TsfBaseController {
 		result.setBoolean("isFind", false);
 		result.setString("cellPhnno", customer.getCellPhnno());
 
-		TscSession.setAttribute("encData", customer.getEncData());
+		TsfSession.setAttribute("encData", customer.getEncData());
 
 		return result;
 	}
@@ -560,7 +559,7 @@ public class TsfCustomerController extends TsfBaseController {
 		GagaMap result = new GagaMap();
 
 		// 1.세션에 인코딩된 데이터를 가져온다.
-		String encData = TscSession.getAttribute("encData");
+		String encData = TsfSession.getAttribute("encData");
 		customer.setEncData(encData);
 		session.removeAttribute("encData");
 
@@ -880,6 +879,7 @@ public class TsfCustomerController extends TsfBaseController {
 	@PostMapping("/privacy/trust/layer")
 	public ModelAndView getMarketingLayerForm() {
 		ModelAndView mav = new ModelAndView();
+		mav.addObject("clause", clauseService.getClause(TscConstants.Site.STYLE24.value(), "G057_43"));
 		mav.setViewName(super.getDeviceViewName("customer/PrivacyTrustLayerForm"));
 		return mav;
 	}

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

@@ -7,14 +7,13 @@ import java.util.HashMap;
 
 import javax.servlet.http.HttpServletResponse;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.style24.core.support.env.TscConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -22,6 +21,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.biz.service.TscLookbookService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfDisplayService;
 import com.style24.front.biz.service.TsfGoodsService;
@@ -35,15 +35,17 @@ import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.Lookbook;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Popup;
 import com.style24.persistence.domain.Social;
-import com.style24.persistence.domain.GoodsSearch;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 전시 Controller
  * 
@@ -131,18 +133,18 @@ public class TsfDisplayController extends TsfBaseController {
 				}
 			}
 
-			if(contentsLoc.equals("SMM006")){
+			if (contentsLoc.equals("SMM006")) {
 				Social social = new Social();
 				social.setSiteCd("G000_10");
 				social.setFrontGb(TsfSession.getFrontGb());
 				mainLayout.setSocialInfo(socialService.getSocialForGoods(social));
 			}
 
-			if(contentsLoc.equals("SMM007")){
+			if (contentsLoc.equals("SMM007")) {
 				mainLayout.setBrandPickList(displayService.getContentsForGoods(contents));
 			}
 
-			if(contentsLoc.equals("SMM009")){
+			if (contentsLoc.equals("SMM009")) {
 				mainLayout.setMdPickList(displayService.getContentsForGoods(contents));
 			}
 
@@ -293,12 +295,12 @@ public class TsfDisplayController extends TsfBaseController {
 			}
 			brandMainLayoutList.add(brandMain);
 		}
-		
-		mav.addObject("preview", paramMap.get("preview") );
+
+		mav.addObject("preview", paramMap.get("preview"));
 		mav.addObject("viewDt", paramMap.get("viewDt"));
 		mav.addObject("viewPage", "G037_31");
 		mav.addObject("popupCateNo", paramMap.get("brandGroupNo"));
-		
+
 		//log.info("brandMainLayoutList::{}", brandMainLayoutList);
 		mav.addObject("brandMainLayoutList", brandMainLayoutList);
 		mav.setViewName(super.getDeviceViewName("display/BrandMainForm"));
@@ -347,11 +349,11 @@ public class TsfDisplayController extends TsfBaseController {
 		cate.setMaxRow(20);
 		mav.addObject("bestGoodsList", goodsService.getContentsCategoryGoodsList(cate));
 
-		mav.addObject("preview", cate.getPreview() );
+		mav.addObject("preview", cate.getPreview());
 		mav.addObject("viewDt", cate.getViewDt());
 		mav.addObject("viewPage", "G037_30");
 		mav.addObject("popupCateNo", cate.getCate1No());
-		
+
 		mav.addObject("params", cate);
 
 		return mav;
@@ -400,8 +402,8 @@ public class TsfDisplayController extends TsfBaseController {
 		Collection<Lookbook> lookbookList = coreLookbookService.getLookbookListForGoods(lookbook);
 		String brandNm = "";
 		String lookbookTitle = "";
-		if(lookbookList != null){
-			for(Lookbook lbInfo : lookbookList){
+		if (lookbookList != null) {
+			for (Lookbook lbInfo : lookbookList) {
 				brandNm = lbInfo.getBrandNm();
 				lookbookTitle = lbInfo.getTitle();
 			}
@@ -455,28 +457,27 @@ public class TsfDisplayController extends TsfBaseController {
 		cate4Srch.setFormalGb("G009_10");
 		cate4Srch.setFrontGb(TsfSession.getFrontGb());
 		cate4Srch.setCustGb(TsfSession.getCustGb());
-		if(cate4Srch.getBrandGroupNo()==null || cate4Srch.getBrandGroupNo().equals("")){
+		if (cate4Srch.getBrandGroupNo() == null) {
 			cate4Srch.setBrandGroupNo(0);
 		}
-		if(cate4Srch.getCate4No()!=null && !cate4Srch.getCate4No().equals("")){
+		if (cate4Srch.getCate4No() != null && !cate4Srch.getCate4No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate4No());
-		} else if(cate4Srch.getCate3No()!=null && !cate4Srch.getCate3No().equals("")){
+		} else if (cate4Srch.getCate3No() != null && !cate4Srch.getCate3No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate3No());
-		} else if(cate4Srch.getCate2No()!=null && !cate4Srch.getCate2No().equals("")){
+		} else if (cate4Srch.getCate2No() != null && !cate4Srch.getCate2No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate2No());
-		} else if(cate4Srch.getCate1No()!=null && !cate4Srch.getCate1No().equals("")){
+		} else if (cate4Srch.getCate1No() != null && !cate4Srch.getCate1No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate1No());
 		}
 
-		log.info("categoryGoodsListForm cate4Srch::::{}",cate4Srch);
+		log.info("categoryGoodsListForm cate4Srch::::{}", cate4Srch);
 		mav.addObject("filterBrandList", displayService.getCategoryFilter(cate4Srch, "BRAND"));
 		mav.addObject("filterSizeList", displayService.getCategoryFilter(cate4Srch, "SIZE"));
 		mav.addObject("filterPriceList", displayService.getCategoryFilter(cate4Srch, "PRICE"));
 		mav.addObject("filterAgeList", displayService.getCategoryFilter(cate4Srch, "AGE"));
 		mav.addObject("filterSeasonList", displayService.getCategoryFilter(cate4Srch, "SEASON"));
 		mav.addObject("filterColorList", displayService.getCategoryFilter(cate4Srch, "COLOR"));
-		mav.addObject("filterBenefitList", displayService.getCategoryFilter(cate4Srch, "BENEFIT"));
-		//mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
+		mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
 		mav.addObject("cateInfo", cate4Srch);
 
 		return mav;
@@ -491,30 +492,39 @@ public class TsfDisplayController extends TsfBaseController {
 	 */
 	@PostMapping("/category/goods/list")
 	@ResponseBody
-	public GagaMap getGoodsList(GoodsSearch goodsSearch){
+	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
 		GagaMap result = new GagaMap();
+		log.info("getGoodsListgetGoodsListgetGoodsList::::{}", goodsSearch);
 		TscPageRequest pageable = new TscPageRequest((goodsSearch.getPageNo() > 0 ? goodsSearch.getPageNo() - 1 : 0), goodsSearch.getPageSize(), goodsSearch.getPageUnit());
 
 		goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
 		goodsSearch.setFormalGb("G009_10");
 		goodsSearch.setFrontGb(TsfSession.getFrontGb());
 		goodsSearch.setCustGb(TsfSession.getCustGb());
-		if(goodsSearch.getBrandGroupNo()==null || goodsSearch.getBrandGroupNo().equals("")){
+
+		if (goodsSearch.getBrandGroupNo() == null || goodsSearch.getBrandGroupNo().equals("")) {
 			goodsSearch.setBrandGroupNo(0);
 		}
-		if(goodsSearch.getCate4No()!=null && !goodsSearch.getCate4No().equals("")){
+
+		if (goodsSearch.getCate4No() != null && !goodsSearch.getCate4No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate4No());
-		} else if(goodsSearch.getCate3No()!=null && !goodsSearch.getCate3No().equals("")){
+		} else if (goodsSearch.getCate3No() != null && !goodsSearch.getCate3No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate3No());
-		} else if(goodsSearch.getCate2No()!=null && !goodsSearch.getCate2No().equals("")){
+		} else if (goodsSearch.getCate2No() != null && !goodsSearch.getCate2No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate2No());
-		} else if(goodsSearch.getCate1No()!=null && !goodsSearch.getCate1No().equals("")){
+		} else if (goodsSearch.getCate1No() != null && !goodsSearch.getCate1No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate1No());
 		}
 
 		int totalCnt = displayService.getCategoryGoodsCount(goodsSearch);
-		log.info("totalCnt::::::::::{}",totalCnt);
-		pageable.setTotalCount(0);
+		log.info("totalCnt::::::::::{}", totalCnt);
+		pageable.setTotalCount(totalCnt);
+		goodsSearch.setPageable(pageable);
+		log.info("getEndRow:::::{}",pageable.getEndRow());
+		result.set("paging", goodsSearch);
+		result.set("totalCnt", totalCnt);
+		result.set("endRow", pageable.getEndRow());
+		result.set("dataList", displayService.getCategoryGoodsList(goodsSearch));
 		return result;
 	}
 }

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

@@ -773,7 +773,7 @@ public class TsfGoodsController extends TsfBaseController {
 
 		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
 		pageable.setTotalCount(reviewService.getReviewTotalCount(review));
-		review.setPageable(pageable);
+		review.setPageable(pageable);	
 
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());

+ 17 - 12
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -6,6 +6,7 @@ import java.util.List;
 
 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;
@@ -826,22 +827,26 @@ public class TsfMypageController extends TsfBaseController {
 
 		// 고객번호 설정
 		int custNo = TsfSession.getInfo().getCustNo();
-		orderChange.setCustNo(custNo);
+		// orderChange.setCustNo(custNo);
 
 		// 고객정보 조회
-		Customer customer = new Customer();
-		customer.setSiteCd(TscConstants.Site.STYLE24.value());
-		customer.setCustNo(custNo);
-		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
-		mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
+		// Customer customer = new Customer();
+		// customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		// customer.setCustNo(custNo);
+		// customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		// mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
+		mav.addObject("custNo", custNo);
 
 		// 주문 상태 별 수량 조회
-		// mav.addObject("orderCount", coreOrderService.getOrderStatCount(orderChange));
+		Order order = new Order();
+		order.setCustNo(custNo);
+		mav.addObject("orderCount", coreOrderService.getOrderStatCount(order));
 
 		// 주문상세상태코드 설정
-		mav.addObject("ordDtlStatList", rendererService.getCommonCodeList("G013", "Y", new String[] {"G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
+		mav.addObject("chgStatList", rendererService.getAvailCommonCodeList("G685"));
+		// mav.addObject("chgStatList", rendererService.getCommonCodeList("G685", "Y", new String[] {"G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
 
-		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderListForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCreListForm"));
 
 		return mav;
 	}
@@ -1185,7 +1190,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 03. 24
 	 */
 	@GetMapping("/review/form")
-	public ModelAndView mypageReviewForm(Review review) {
+	public ModelAndView mypageReviewForm(Review review, Device device) {
 		ModelAndView mav = new ModelAndView();
 		
 		review.setCustNo(TsfSession.getInfo().getCustNo());
@@ -1282,7 +1287,7 @@ public class TsfMypageController extends TsfBaseController {
 	 */
 	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}/{reviewStat}")
 	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo,@PathVariable(value = "ordDtlNo") Integer ordDtlNo
-			,@PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat) {
+			,@PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat, Device device) {
 		Review review = new Review();
 		ModelAndView mav = new ModelAndView();
 		
@@ -1351,7 +1356,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 03. 29
 	 */
 	@GetMapping("/wish/list/form")
-	public ModelAndView mypageWishListForm(WishList wishList) {
+	public ModelAndView mypageWishListForm(WishList wishList, Device device) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("mypage/MypageWishListForm"));
 		wishList.setSiteCd(TscConstants.Site.STYLE24.value());
 		wishList.setFrontGb(TsfSession.getFrontGb());

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

@@ -160,9 +160,21 @@ public class TsfOrderController extends TsfBaseController {
 		}
 		
 		// TODO
+<<<<<<< HEAD
 		//int[] arr = {1,2,158,150,149,159,148,153,20,12};
 		//order.setCartSqArr(arr);		// 장바구니시퀀스
 		//order.setShotDelvUseYn("Y");	// 장바구니총알배송사용여부
+=======
+		/*int[] arr = {1,2,158,150,149,159,148,153,20,12};
+		order.setCartSqArr(arr);		// 장바구니시퀀스
+		order.setShotDelvUseYn("Y");	// 장바구니총알배송사용여부*/
+		
+		// 1.1 카트시퀀스가 정보가 없을때 처리 장바구니로 이동 
+		if (order.getCartSqArr() == null) {
+			mav.setViewName("redirect:/cart/list/form");		// 비회원주문서화면
+			return mav;
+		}
+>>>>>>> refs/remotes/origin/order
 		
 		// 2. 로그인정보 체크 후 비회원 고객정보 설정
 		if (TsfSession.isLogin()) {

+ 40 - 8
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -1,5 +1,6 @@
 package com.style24.front.biz.web;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
@@ -27,13 +28,14 @@ import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Poll;
 import com.style24.persistence.domain.Review;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 
@@ -185,13 +187,11 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setTmplType("G082_51");
 		mav.addObject("goods2Info", planningService.getPlanGoodsDisplayList(plan));
 
-		//상품4열 전시
+		// 상품4열 전시
 		plan.setTmplType("G082_52");
 		mav.addObject("goods4Info", planningService.getPlanGoodsDisplayList(plan));
-
-//		mav.addObject("couponList", planningService.getPlusCouponList(plan));
-//
-//		// 코너 목록
+		
+		// 코너 목록
 		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
 		mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
 		
@@ -231,6 +231,26 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 기획전/이벤트 댓글 리스트
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 04. 08
+	 */
+	@GetMapping("/reply/list")
+	@ResponseBody
+	public GagaMap getReplyList(@RequestParam(value="planSq")Integer planSq) {
+		GagaMap result = new GagaMap();
+		Plan plan = new Plan();
+		plan.setPlanSq(planSq);
+		
+		result.set("replyList",planningService.getReplyList(plan));
+		result.set("custNo",TsfSession.getInfo().getCustNo());
+		return result;
+	}
+
+	
 	/**
 	 * 기획전 쿠폰 상세보기 모달
 	 *
@@ -325,7 +345,7 @@ public class TsfPlanningController extends TsfBaseController {
 	 */
 	@GetMapping("/event/main/list")
 	@ResponseBody
-	public Collection<Plan> getPlanningEventMainList(Plan plan) {
+	public Collection<Plan> getPlanningEventMainList(Plan plan, Device device) {
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setFrontGb(TsfSession.getFrontGb());
 		plan.setCustGb(TsfSession.getCustGb());
@@ -476,7 +496,7 @@ public class TsfPlanningController extends TsfBaseController {
 			customer.setCustNo(TsfSession.getInfo().getCustNo());
 			customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
 
-			mav.addObject("exptCustGrdeMap", customerService.getExpectedCustGrde(customer));
+			mav.addObject("exptCustGradeMap", customerService.getExpectedCustGrde(customer));
 			mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
 		}
 
@@ -484,6 +504,18 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 회원등급 쿠폰 다운로드
+	 *
+	 * @return GagaMap
+	 * @author jsshin
+	 * @since 2021. 04. 08
+	 */
+	@GetMapping("/event/custgrade/coupon/down")
+	public GagaMap downCustGradeCoupon() {
+		return customerService.downloadCustGradeCoupon(TsfSession.getInfo().getCustNo());
+	}
+
 	
 	/**
 	 * 출석체크

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

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpSession;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
 
@@ -48,16 +49,21 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 		"/customer/dormant/certify/complete/form",	// 휴면해제
 		"/customer/certification/form"				// 본인인증화면
 	};
-	private static final int CHANG_PWD_CAMPAIGN_DAY = 90; // 비밀번호 변경 캠페인일자
+	private static final int CHANG_PWD_CAMPAIGN_DAY = 90;	// 비밀번호 변경 캠페인일자
 
 	private static final String CHANG_TEMP_PWD = "Y";	//임시비밀번호여부
 
+	private static final String GOODS_DETAIL_FORM = "/goods/detail/form";	// 주문상세 URL
+
 	@Autowired
 	private TsfLoginService loginService;
 
 	@Autowired
 	private TsfCartService cartService;
 
+	@Value("${has-ssl}")
+	private String hasSsl;
+
 	@Override
 	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
 		// 로그인 상세 정보
@@ -76,9 +82,14 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 		// 로그인이력 생성
 		loginService.createLoginHistory(custNo);
 
+		// 장바구니 번호
+		String cartSqArr = TsfSession.getAttribute("cartSqArr");
+
 		// 세션 생성
 		this.createSession(request, loginDetails);
 
+		boolean isSslServer = Boolean.parseBoolean(hasSsl);
+
 		// 자동로그인용 RememberMe 쿠키 및 토큰 생성
 		if (request.getParameter("rememberMe") != null && request.getParameter(TsfConstants.REMEMBER_ME_PARAMETER).equals("true")) {
 			Date expiry = new Date(System.currentTimeMillis() + (1000 * TsfConstants.REMEMBER_ME_LIMIT));
@@ -86,7 +97,11 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 			String remembermeToken = Base64.getEncoder().encodeToString((TsfConstants.REMEMBER_ME_KEY + ":" + md5HexToken).getBytes());
 
 			// RememberMe 쿠키 생성
-			GagaCookieUtil.setSecureCookie(response, TsfConstants.CK_PREFIX + "_remember-me", remembermeToken, TsfConstants.REMEMBER_ME_LIMIT);
+			if (isSslServer) {
+				GagaCookieUtil.setSecureCookie(response, TsfConstants.CK_PREFIX + "_remember-me", remembermeToken, TsfConstants.REMEMBER_ME_LIMIT);
+			} else {
+				GagaCookieUtil.setCookie(response, TsfConstants.CK_PREFIX + "_remember-me", remembermeToken, TsfConstants.REMEMBER_ME_LIMIT);
+			}
 
 			// 로그인유지토큰 생성
 			loginService.createPersistentToken(custNo, remembermeToken, expiry);
@@ -118,14 +133,27 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 
 		// 비밀번호 변경 캠페인 일자
 		if (loginDetails.getLoginInfo().getPwdChgDay() >= CHANG_PWD_CAMPAIGN_DAY) {
-			returnUrl ="/customer/password/campaign/form";
+			returnUrl = "/customer/password/campaign/form";
 		}
 
 		// 임시비밀번호로 로그인 한 경우
 		if (CHANG_TEMP_PWD.equals(loginDetails.getLoginInfo().getTempPasswdYn())) {
-			returnUrl ="/customer/password/change/form?pageGb=temp";
+			returnUrl = "/customer/password/change/form?pageGb=temp";
 		}
 
+		// 상품상세 바로구매 > 로그인 한 경우
+		if (returnUrl.indexOf(GOODS_DETAIL_FORM) > -1)  {
+			if (StringUtils.isNotBlank(cartSqArr)) {
+				returnUrl = "/order/form?cartSqArr="+ cartSqArr;
+			}
+		}
+
+		if (isSslServer) {
+			// 로그인 성공 쿠키로 저장 (마케팅 스크립트용)
+			GagaCookieUtil.setSecureCookie(response, TsfConstants.CK_PREFIX + "_login_success", "Y", 1*60);
+		} else {
+			GagaCookieUtil.setCookie(response, TsfConstants.CK_PREFIX + "_login_success", "Y", 1*60);
+		}
 
 		GagaMap result = new GagaMap();
 		result.setString("status", "OK");

+ 12 - 0
src/main/java/com/style24/front/support/security/session/TsfSession.java

@@ -114,4 +114,16 @@ public class TsfSession extends GagaSession {
 		return "";
 	}
 
+	/**
+	 * 세션 값 삭제
+	 * @param name - 명칭
+	 */
+	public static void removeAtrribute(String name) {
+		HttpServletRequest request = getHttpServletRequest();
+		HttpSession session = request.getSession();
+		if (session != null && session.getAttribute(name) != null) {
+			session.removeAttribute(name);
+		}
+	}
+
 }

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

@@ -58,6 +58,7 @@ public class Cart extends TscBaseDomain {
 	// 상품 정보
 	private int currStockQty;		// 기준 재고
 	private int qty;				// 구성 상품 기준 재고 수량
+	private int currPrice;			// 상품판매가
 	private String goodsType;		// 상품 타입
 	private String compsGoodsCd;	// 세트 구성상품 코드
 	private String itemCdSql;		// 상품 조회 쿼리문

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

@@ -150,6 +150,7 @@ public class Goods extends TscBaseDomain {
 	private int weight;				// 몸무게
 	private Integer reviewSq;
 	private String goodsStatNm;
+	private String regDtMonth;
 
 	private String sizeGb;		// 사이즈구분(T:상의, B:하의, S:신발)
 

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

@@ -59,8 +59,8 @@ public class GoodsSearch extends TscBaseDomain {
     private String  filterNm;
 
     private TscPageRequest pageable;				// 페이징
-    private int pageNo;
-    private int pageSize;
+    private int pageNo = 1;
+    private int pageSize = 50;
     private int pageUnit = 10;
     private String sortGb;
 

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

@@ -35,6 +35,8 @@ public class Login extends TscBaseDomain {
 	private String custStat;		// 고객상태
 	private String cellPhnno;		// 휴대전화번호
 	private String email;			// 이메일
+	private String birthYmd;		// 생년월일
+	private String sexGb;			// 성별
 	private String snsType;			// SNS유형
 	private String snsId;			// SNS가입ID
 	private int loginFailCnt;		// 로그인실패건수
@@ -63,6 +65,16 @@ public class Login extends TscBaseDomain {
 		this.email = CryptoUtils.decryptAES(this.email);
 		return this.email;
 	}
+
+	public String getBirthYmd() {
+		this.birthYmd = CryptoUtils.decryptAES(this.birthYmd);
+		return this.birthYmd;
+	}
+
+	public String getSexGb() {
+		this.sexGb = CryptoUtils.decryptAES(this.sexGb);
+		return this.sexGb;
+	}
 	// 암호화 대상 복호화 처리 =================================================
 
 }

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

@@ -4,6 +4,7 @@ import java.util.Collection;
 import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 
@@ -340,5 +341,11 @@ public class Plan extends TscBaseDomain {
 	private String likeIt;			// 위시리스트담은상품
 	private int maxRow;				// 최대ROW수
 	private Integer exceptPlanSq;	// 제외할기획전번호
+	private String custId;			// 고객ID
+	// Masking
+	public String getMaskingCustId() {
+		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
+	}
+		
 
 }

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

@@ -894,6 +894,7 @@
 			 , CA.GOODS_QTY
 			 , G.SELF_GOODS_YN
 		     , G.GOODS_STAT
+		     , FN_GET_APPLY_CPN1_PRICE(CA.GOODS_CD, #{frontGb}) AS CURR_PRICE
 		FROM   TB_CART CA
 		INNER  JOIN TB_GOODS G
 		ON     CA.GOODS_CD = G.GOODS_CD

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

@@ -160,10 +160,10 @@
 		     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
 		            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
 		            ELSE CP.DC_AVAL                                              END AS DC_VAL
-		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(NOW(), '%Y%M%D%H%I%S')
-		            ELSE DATE_FORMAT(CP.AVAIL_STDT, '%Y%M%D%H%I%S')              END AS AVAIL_STDT
-		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL CP.AVAIL_DAYS DAY), '%Y%M%D%H%I%S')
-		            ELSE  DATE_FORMAT(CP.AVAIL_EDDT, '%Y%M%D%H%I%S')             END AS AVAIL_EDDT
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(NOW(), '%Y%m%d%H%i%S')
+		            ELSE DATE_FORMAT(CP.AVAIL_STDT, '%Y%m%d%H%i%S')              END AS AVAIL_STDT
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL CP.AVAIL_DAYS DAY), '%Y%m%d%H%i%S')
+		            ELSE  DATE_FORMAT(CP.AVAIL_EDDT, '%Y%m%d%H%i%S')             END AS AVAIL_EDDT
 		FROM  TB_CUST_GRADE_POLICY CGP
 		INNER JOIN
 		      TB_COUPON CP

+ 226 - 33
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -593,12 +593,12 @@
 		/* TsfDisplay.getCategoryFilter */
 		SELECT
 		<choose>
-			<when test="filterGb != null and filterGb =='SIZE'">
+		     <when test="filterGb != null and filterGb =='SIZE'">
 		SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
-			</when>
-			<otherwise>
+		     </when>
+		     <otherwise>
 		FILTER_CD
-			</otherwise>
+		     </otherwise>
 		</choose>
 		, FILTER_NM
 		FROM TB_CATE_FILTER
@@ -612,37 +612,230 @@
 		ORDER BY DISP_ORD
 	</select>
 
-	<!-- 카테고리별 상품 총 수 -->
-	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
-		/* TsfDisplay.getCategoryGoodsCount */
-		SELECT COUNT(1) AS TOTCNT
-		FROM (SELECT A.GOODS_CD
-		           , A.CATE_NO
-		           , A.DISP_ORD
-		           , A.REG_NO
-		           , A.REG_DT
-		      FROM TB_CATE_GOODS A
-		      WHERE 1 = 1
-		        AND EXISTS(SELECT 1
-		                    FROM TB_CATE_4SRCH
-		                    WHERE 1 = 1
-		                      AND LEAF_CATE_NO = A.CATE_NO
-		                      AND CATE1_NO = #{cate1No}
-		                    <if test="cate2No != null and cate2No != ''">
-		                     AND CATE2_NO = #{cate2No}
-							</if>
-		                    <if test="cate3No != null and cate3No != ''">
+	<!-- 상품 카테고리 필터 중 혜택 -->
+	<select id="getCategoryFilterBenefit" parameterType="Cate4srch" resultType="GoodsSearch">
+		/* TsfDisplay.getCategoryFilterBenefit */
+		SELECT	GB.BENEFIT_GB AS FILTER_CD
+		      , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		             WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		             WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		             WHEN GB.BENEFIT_GB = '40' THEN '신상' ELSE '' END AS FILTER_NM
+		FROM	TB_GOODS_BENEFIT GB
+		INNER JOIN TB_CATE_GOODS CG ON GB.GOODS_CD = CG.GOODS_CD
+		WHERE	1=1
+		  AND	EXISTS (
+		                  SELECT 1
+		                  FROM	 TB_CATE_4SRCH
+		                  WHERE	 1=1
+		                    AND	 LEAF_CATE_NO = CG.CATE_NO
+		                    AND	 CATE1_NO = #{cate1No}
+		                  <if test="cate2No != null and cate2No != ''">
+		                    AND CATE2_NO = #{cate2No}
+		                  </if>
+		                  <if test="cate3No != null and cate3No != ''">
 		                    AND CATE3_NO = #{cate3No}
-							</if>
-		                    <if test="cate4No != null and cate4No != ''">
+		                  </if>
+		                  <if test="cate4No != null and cate4No != ''">
 		                    AND CATE4_NO = #{cate4No}
-							</if>
-		                    <if test="cate5No != null and cate5No != ''">
+		                  </if>
+		                  <if test="cate5No != null and cate5No != ''">
 		                    AND CATE5_NO = #{cate5No}
-		                    </if>
-				  )
-		) A
-		   , TB_GOODS C
-		WHERE A.GOODS_CD = C.GOODS_CD
+		                  </if>
+		                )
+		GROUP BY GB.BENEFIT_GB
+	</select>
+
+	<!-- 카테고리별 상품 총 수 -->
+	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
+		/* TsfDisplay.getCategoryGoodsCount */
+		SELECT COUNT(1) AS CNT
+		  FROM TB_GOODS G
+		  JOIN TB_CATE_GOODS CG ON G.GOODS_CD = CG.GOODS_CD
+		  JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD AND B.USE_YN = 'Y'
+		  JOIN TB_SITE_BRAND SB ON G.BRAND_CD = SB.BRAND_CD AND SB.USE_YN = 'Y'
+		  JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO AND BG.USE_YN = 'Y'
+		  JOIN TB_GOODS_STOCK S ON G.GOODS_CD = S.GOODS_CD
+		  LEFT OUTER JOIN TB_GOODS_SUMMARY SU ON G.GOODS_CD = SU.GOODS_CD
+		WHERE 1=1
+		  AND CG.GOODS_CD = G.GOODS_CD
+		  AND CG.GOODS_CD = S.GOODS_CD
+		  AND G.BRAND_CD = B.BRAND_CD
+		  AND B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		  AND CG.GOODS_CD = S.GOODS_CD
+		  AND EXISTS (
+		               SELECT 1
+		               FROM TB_CATE_4SRCH
+		               WHERE 1 = 1
+		                 AND LEAF_CATE_NO = CG.CATE_NO
+		                 AND SITE_CD = #{siteCd}
+		                 AND CATE_GB = 'G032_101' /*BY ITEM*/
+		                 AND CATE_TYPE = 'G031_10'
+		                 AND CATE1_NO = #{cate1No}
+		                 <if test="cate2No != null and cate2No != ''">
+		                 AND CATE2_NO = #{cate2No}
+		                 </if>
+		                 <if test="cate3No != null and cate3No != ''">
+		                 AND CATE3_NO = #{cate3No}
+		                 </if>
+		                 <if test="cate4No != null and cate4No != ''">
+		                 AND CATE4_NO = #{cate4No}
+		                 </if>
+		                 <if test="cate5No != null and cate5No != ''">
+		                 AND CATE5_NO = #{cate5No}
+		                 </if>
+		                 )
+		  AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		  AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		  AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		  AND S.STOCK_QTY > 0 /*재고있는상품*/
+	</select>
+
+	<select id="getCategoryGoodsList" parameterType="GoodsSearch" resultType="Goods">
+		/* TsfDisplay.getCategoryGoodsList */
+		WITH TAB_GOODS AS (
+		     SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		          , G.GOODS_CD           /*상품코드*/
+		          , G.GOODS_NM           /*상품명*/
+		          , G.GOODS_GB           /*상품구분*/
+		          , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		          , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		          , G.ORDER_MADE_YN      /*주문제작여부*/
+		          , G.GOODS_TNM          /*상품타이틀명*/
+		          , G.MAIN_COLOR_CD      /*대표색상코드*/
+		          , G.LIST_PRICE         /*정상가(최초판매가)*/
+		          , G.CURR_PRICE         /*현재판매가*/
+		          , G.REG_DT             /*등록일시*/
+		          , G.NUMB
+		     FROM   (
+		          SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM
+		               ELSE BG.BRAND_GROUP_KNM
+		               END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		               , G.GOODS_CD                                               /*상품코드*/
+		               , G.GOODS_NM                                               /*상품명*/
+		               , G.GOODS_GB                                               /*상품구분*/
+		               , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		               , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		               , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		               , G.GOODS_TNM                                              /*상품타이틀명*/
+		               , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		               , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		               , G.CURR_PRICE                                             /*현재판매가*/
+		               , G.REG_DT                                                 /*등록일시*/
+		               , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
+		                                          , G.REG_DT DESC
+		                                          , G.GOODS_CD) AS NUMB
+		          FROM	TB_GOODS G
+		          JOIN	TB_CATE_GOODS CG ON G.GOODS_CD = CG.GOODS_CD
+		          JOIN	TB_BRAND B ON G.BRAND_CD = B.BRAND_CD AND B.USE_YN = 'Y'
+		          JOIN	TB_SITE_BRAND SB ON G.BRAND_CD = SB.BRAND_CD AND SB.USE_YN = 'Y'
+		          JOIN	TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO AND BG.USE_YN = 'Y'
+		          JOIN	TB_GOODS_STOCK S ON G.GOODS_CD = S.GOODS_CD
+		          LEFT OUTER JOIN TB_GOODS_SUMMARY SU ON G.GOODS_CD = SU.GOODS_CD
+		          WHERE 1=1
+		          AND CG.GOODS_CD = G.GOODS_CD
+		          AND CG.GOODS_CD = S.GOODS_CD
+		          AND G.BRAND_CD = B.BRAND_CD
+		          AND B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		          AND CG.GOODS_CD = S.GOODS_CD
+		          AND EXISTS (
+		                        SELECT 1
+		                        FROM TB_CATE_4SRCH
+		                        WHERE 1 = 1
+		                        AND LEAF_CATE_NO = CG.CATE_NO
+		                        AND SITE_CD = #{siteCd}
+		                        AND CATE_GB = 'G032_101' /*BY ITEM*/
+		                        AND CATE_TYPE = 'G031_10'
+		                        AND CATE1_NO = #{cate1No}
+		                        <if test="cate2No != null and cate2No != ''">
+		                        AND CATE2_NO = #{cate2No}
+		                        </if>
+		                        <if test="cate3No != null and cate3No != ''">
+		                        AND CATE3_NO = #{cate3No}
+		                        </if>
+		                        <if test="cate4No != null and cate4No != ''">
+		                        AND CATE4_NO = #{cate4No}
+		                        </if>
+		                        <if test="cate5No != null and cate5No != ''">
+		                        AND CATE5_NO = #{cate5No}
+		                        </if>
+		              )
+		          AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		          AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		          AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		          AND S.STOCK_QTY > 0 /*재고있는상품*/
+		          ) G
+		     WHERE  1=1
+		     <if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+		     AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		     </if>
+		)
+		, TAB_GOODS_IMG AS (
+		/* 상품의 이미지 */
+		SELECT GOODS_CD
+		,MAX(SYS_IMG_NM) AS SYS_IMG_NM
+		,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		FROM (
+		SELECT G.GOODS_CD
+		, CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		, CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		FROM   TAB_GOODS G
+		, TB_GOODS_IMG GI
+		WHERE  G.GOODS_CD = GI.GOODS_CD
+		AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		) Z
+		GROUP BY GOODS_CD
+		)
+		, TAB_GOODS_VIDEO AS (
+		/* 상품의 동영상 목록 */
+		SELECT GOODS_CD
+		, MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		, MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
+		, MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		, MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
+		FROM   (
+		SELECT G.GOODS_CD
+		, V.VIDEO_GB
+		, V.VIDEO_VAL
+		, VD.REG_DT
+		, RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		FROM   TAB_GOODS G
+		, TB_VIDEO_DISPLOC VD
+		, TB_VIDEO V
+		WHERE  G.GOODS_CD = VD.DISPLOC_VAL
+		AND    VD.VIDEO_SQ = V.VIDEO_SQ
+		AND    VD.DISPLOC_GB = 'G' /*상품*/
+		AND    VD.DISP_YN = 'Y'
+		AND    V.DISP_YN ='Y'
+		) Z
+		GROUP  BY 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명*/
+		      , G.GOODS_TNM
+		      , G.MAIN_COLOR_CD
+		      , G.LIST_PRICE
+		      , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
+		      , GI.SYS_IMG_NM
+		      , GI.SYS_IMG_NM2
+		      , GV.VIDEO_GB_M
+		      , GV.VIDEO_VAL_M
+		      , GV.VIDEO_GB_S
+		      , GV.VIDEO_VAL_S
+		      <choose>
+		      	<when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		      		, IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		      	</when>
+		      	<otherwise>
+		      		, ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		      	</otherwise>
+		      </choose>
+		FROM	TAB_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+		AND W.CUST_NO = #{custNo}
+		</if>
 	</select>
 </mapper>

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

@@ -817,7 +817,7 @@
 		SELECT A.GOODS_CD
 		     , A.COMPS_GOODS_CD
 		     , G.GOODS_NM AS COMPS_GOODS_NM
-		     , 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명*/
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS COMPS_GOODS_FULL_NM /*상품FULL명*/
 		     , A.QTY
 		     , G.BRAND_CD
 		     , G.GOODS_STAT

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

@@ -29,6 +29,8 @@
 		     , TEMP_PASSWD_YN                                            /*임시비밀번호여부*/
 		     , IFNULL(DATEDIFF(NOW(),PASSWD_CHG_DT),0) AS PWD_CHG_DAY    /*비밀번호변경일자*/
 		     , CI                                                        /*CI본인인증여부*/
+		     , BIRTH_YMD                                                 /*생년월일*/
+		     , SEX_GB                                                    /*성별*/
 		FROM   TB_CUSTOMER A
 		WHERE  1 = 1
 		<choose>

+ 78 - 11
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -497,9 +497,14 @@
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ)                       AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ)                       AS OPT_CD2
 		     , Z.ORD_CHG_SQ
-		     , Z.CHG_DT
+		     , Z.CHG_GB
+		     , Z.CHG_QTY
+		     , Z.ORD_DT
+		     , Z.CHG_DATE
+		     , Z.CHG_TIME
 		     , Z.CHG_ORD_DTL_NO
 		     , Z.CHG_STAT
+		     , Z.CHG_STAT_NM
 		     , Z.ORD_NO
 		     , Z.ORD_DTL_NO
 		     , Z.GOODS_CD
@@ -507,13 +512,21 @@
 		     , Z.SHOT_DELV_YN
 		     , Z.SELF_GOODS_YN
 		     , Z.GOODS_NM
+		     , Z.GOODS_TYPE
 		     , Z.LIST_PRICE
+		     , Z.ADD_PAY_COST
 		     , Z.SYS_IMG_NM
 		     , Z.GIFT_PACK_YN
+		     , Z.REFUND_AMT
 		  FROM (SELECT OC.ORD_CHG_SQ
-		             , OC.REG_DT                                                        AS CHG_DT
+		             , OC.CHG_GB
+		             , OCD.CHG_QTY
+		             , O.ORD_DT
+		             , DATE_FORMAT(OCDH.REG_DT, '%Y.%m.%d')                             AS CHG_DATE
+		             , DATE_FORMAT(OCDH.REG_DT,'%H:%i:%S')                              AS CHG_TIME
 		             , OCD.CHG_ORD_DTL_NO
 		             , OCD.CHG_STAT
+		             , FN_GET_CODE_NM('G685', OCD.CHG_STAT)                             AS CHG_STAT_NM
 		             , OD.ORD_NO
 		             , OCD.ORD_DTL_NO
 		             , G1.GOODS_CD
@@ -522,17 +535,24 @@
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
 		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1)                                 AS COLOR_NM
-		             , G2.GOODS_NM AS ITEM_NM
+		             , G2.GOODS_NM                                                      AS ITEM_NM
+		             , G1.GOODS_TYPE
 		             , ODI.ORD_DTL_ITEM_SQ
 		             , ODI.OPT_CD1
 		             , ODI.OPT_CD2
 		             , G1.LIST_PRICE
+		             , OC.ADD_PAY_COST
 		             , CASE WHEN G1.GOODS_TYPE != 'G056_S' AND G1.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
 		                    ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = IFNULL(G1.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM
 		             , OD.GIFT_PACK_YN
+		             , R.REFUND_AMT
 		          FROM TB_ORDER_CHANGE OC
 		         INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
 		            ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+		         INNER JOIN TB_ORDER_CHANGE_DETAIL_HST OCDH
+		            ON OCD.ORD_CHG_SQ = OCDH.ORD_CHG_SQ
+		           AND OCD.ORD_DTL_NO = OCDH.ORD_DTL_NO
+		           AND OCD.CHG_STAT = OCDH.CHG_STAT
 		         INNER JOIN TB_ORDER_DETAIL OD
 		            ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
 		           AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25')
@@ -551,6 +571,8 @@
 		          LEFT OUTER JOIN TB_COLOR C
 		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD)
 		           AND C.USE_YN = 'Y'
+		          LEFT OUTER JOIN TB_REFUND R
+		            ON R.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		<choose>
@@ -571,9 +593,9 @@
 				#{item}
 			</foreach>
 		</if>
-		<if test="ordChgSqList != null">
+		<if test="ordChgSqArr != null">
 			AND OC.ORD_CHG_SQ IN
-			<foreach collection="ordChgSqList" item="item" index="index"  open="(" close=")" separator=",">
+			<foreach collection="ordChgSqArr" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 			</foreach>
 		</if>
@@ -581,8 +603,8 @@
 			AND OCD.CHG_STAT = #{chgStat}
 		</if>
 		  ) Z
-		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_DT, Z.CHG_ORD_DTL_NO, Z.CHG_STAT, Z.ORD_NO, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM
-		        , Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.GIFT_PACK_YN
+		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_GB, Z.CHG_QTY, Z.ORD_DT, Z.CHG_DATE, Z.CHG_TIME, Z.CHG_ORD_DTL_NO, Z.CHG_STAT, Z.CHG_STAT_NM, Z.ORD_NO, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM
+		        , Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM, Z.GOODS_TYPE, Z.LIST_PRICE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.REFUND_AMT
 	</select>
 
 	<!-- 마이페이지 취반교 조회 페이징 처리 주문변경번호 수 조회 -->
@@ -595,7 +617,8 @@
 		            ON O.ORD_NO = OD.ORD_NO
 		          LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL OCD
 		            ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
-		         WHERE O.DISP_YN = 'Y'
+		         WHERE O.CUST_NO = #{custNo}
+		           AND O.DISP_YN = 'Y'
 		           AND OCD.ORD_CHG_SQ IS NOT NULL
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 		           AND OCD.REG_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
@@ -603,7 +626,7 @@
 		<if test="ordDtlStat != null and ordDtlStat != ''">
 		           AND OCD.CHG_STAT = #{chgStat}
 		</if>
-		         GROUP BY OCD.CHG_STAT
+		         GROUP BY OCD.ORD_CHG_SQ
 		       ) Z
 	</select>
 
@@ -612,12 +635,14 @@
 		/* TsfOrderChange.getPagingCreList */
 		<include refid="selectForPagingHeader"/>
 		SELECT OCD.ORD_CHG_SQ
+		     , RANK() OVER(ORDER BY OCD.ORD_CHG_SQ DESC) AS NUMB
 		  FROM TB_ORDER O
 		 INNER JOIN TB_ORDER_DETAIL OD
 		    ON O.ORD_NO = OD.ORD_NO
 		  LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL OCD
 		    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
-		 WHERE O.DISP_YN = 'Y'
+		 WHERE O.CUST_NO = #{custNo}
+		   AND O.DISP_YN = 'Y'
 		   AND OCD.ORD_CHG_SQ IS NOT NULL
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 		   AND OCD.REG_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
@@ -625,7 +650,49 @@
 		<if test="ordDtlStat != null and ordDtlStat != ''">
 		   AND OCD.CHG_STAT = #{chgStat}
 		</if>
-		 GROUP BY OCD.CHG_STAT
+		 GROUP BY OCD.ORD_CHG_SQ
 		<include refid="selectForPagingFooter"/>
 	</select>
+	
+	<!-- 마이페이지 교환 상품 옵션 정보 조회 -->
+	<select id="getExchangeGoodsOptionInfoList" parameterType="OrderChange" resultType="OrderChange">
+		/* TsfOrderChange.getExchangeGoodsOptionInfoList */
+		SELECT Z.ORD_CHG_SQ
+		     , Z.CHG_GB
+		     , Z.ORD_DTL_NO
+		     , Z.ORG_ORD_DTL_NO
+		     , Z.ORD_DTL_STAT
+		     , GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!')       AS ITEM_NM
+		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ)                      AS COLOR_NM
+		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ)                       AS OPT_CD1
+		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ)                       AS OPT_CD2
+		  FROM (SELECT OC.ORD_CHG_SQ
+		             , OC.CHG_GB
+		             , OD.ORD_DTL_NO
+		             , OD.ORG_ORD_DTL_NO
+		             , OD.ORD_DTL_STAT
+		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS COLOR_NM
+		             , G2.GOODS_NM                      AS ITEM_NM
+		             , ODI.OPT_CD1
+		             , ODI.OPT_CD2
+		             , ODI.ORD_DTL_ITEM_SQ
+		          FROM TB_ORDER_CHANGE OC
+		         INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		            ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+		         INNER JOIN TB_ORDER_DETAIL OD
+		            ON OCD.CHG_ORD_DTL_NO = OD.ORD_DTL_NO
+		         INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+		            ON OD.ORD_NO = ODI.ORD_NO
+		           AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		         INNER JOIN TB_GOODS G1
+		            ON OD.GOODS_CD = G1.GOODS_CD
+		         INNER JOIN TB_GOODS G2
+		            ON ODI.ITEM_CD = G2.GOODS_CD
+		          LEFT OUTER JOIN TB_COLOR C
+		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1, ''), G1.MAIN_COLOR_CD)
+		           AND C.USE_YN = 'Y'
+		         WHERE OC.ORD_CHG_SQ = #{ordChgSq}
+		  ) Z
+		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_GB, Z.ORD_DTL_NO, Z.ORG_ORD_DTL_NO, Z.ORD_DTL_STAT
+	</select>
 </mapper>

+ 30 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1200,4 +1200,34 @@
 		AND PLAN_SQ = #{planSq}
 		AND ENTRY_CUST_NO = #{custNo}
 	</select>
+	
+	<!-- 댓글 리스트  (수정필)-->
+	<select id="getReplyList" resultType="Plan" parameterType="Plan">
+		/* TsfPlanning.getReplyList */	
+		SELECT Z.*
+		      ,(SELECT CUST_ID FROM TB_CUSTOMER WHERE CUST_NO = Z.ENTRY_CUST_NO) AS CUST_ID
+		FROM 
+		(		
+			SELECT PE.PLAN_ENTRY_SQ
+			     , PE.PLAN_SQ
+			     , PE.ENTRY_CUST_NO
+			     , DATE_FORMAT(PE.ENTRY_DT,'%Y-%m-%d') AS ENTRY_DT
+			     , PE.ENTRY_VAL1
+			     , PE.ENTRY_VAL2
+			     , PE.ENTRY_VAL3
+			     , PE.ENTRY_VAL4
+			     , PE.ENTRY_VAL5
+			     , PE.ENTRY_VAL6
+			     , PE.ENTRY_VAL7
+			     , PE.ENTRY_VAL8
+			     , PE.REG_NO
+			     , PE.REG_DT
+			     , PE.UPD_NO
+			     , PE.UPD_DT
+			FROM TB_PLAN_ENTRY PE
+			WHERE 1=1
+		    AND PE.PLAN_SQ = #{planSq}
+		    ORDER BY REG_NO DESC
+		)Z
+	</select>
 </mapper>

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

@@ -610,7 +610,7 @@
 				  FROM TB_ORDER O
 				 INNER JOIN TB_ORDER_DETAIL OD
 				    ON O.ORD_NO = OD.ORD_NO
-				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60) -- 구매 확정인것만
+				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
 				 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
 				    ON OD.ORD_NO = ODI.ORD_NO
 				   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
@@ -646,7 +646,7 @@
 					</otherwise>
 				</choose>
 				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
-				AND O.CUST_NO = 100000
+				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = 'G000_10'
      			<if test="ordNo!=null and ordNo != ''">

+ 85 - 60
src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml

@@ -22,68 +22,93 @@
 		<!-- ORDER BY A.REG_DT DESC LIMIT 1 -->
 	</select>
 	
+	<!-- 소셜상품(=핫딜) 목록 -->
 	<select id="getSocialGoodsList" resultType="Social" parameterType="Social">
-		/* TsfSocial.getSocialGoodsList*/
-		SELECT F.* 
-			 ,  (CASE WHEN F.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = F.GOODS_CD) 
-			    ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = F.GOODS_CD) 
-			    END) AS STOCK_QTY_SUM
-			 , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
-			 , CASE IFNULL((SELECT COUNT(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ),0) 
-			            WHEN 0 THEN 'N'
-			            ELSE 'Y' END AS GOODS_IMAGE_YN
-			 ,(CASE WHEN F.WISH_GOOD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
-			FROM
-			(   
-				 SELECT A.SOCIAL_SQ
-				     , A.SOCIAL_NM
-				     , A.SOCIAL_TYPE
-				     , A.SITE_CD
-				     , A.FRONT_GB
-				     , A.SOCIAL_STDT
-				     , A.SOCIAL_EDDT
-				     , A.SOCIAL_TNM
-				     , A.USE_YN
-				     , A.APPLY_GB
-				     , A.REG_DT 
-				     , B.GOODS_CD 
-				     , B.CURR_BPRICE 
-				     , B.CURR_APRICE 
-				     , B.DC_BRATE 
-				     , B.DC_ARATE 
-				     , B.DEL_YN 
-				     , B.DISP_ORD 
-				     , C.GOODS_NM 
-				     , C.GOODS_TYPE 
-				     , C.GOODS_TNM 
-				     , C.LIST_PRICE
-				     , C.MAIN_COLOR_CD 
-				     , D.BRAND_KNM 
-				     , D.BRAND_ENM 
-				     , W.CUST_NO 
-				     , W.GOODS_CD AS WISH_GOOD
+		/* TsfSocial.getSocialGoodsList */
+		SELECT F.*
+		     , CASE WHEN F.GOODS_TYPE = 'G056_N' THEN
+		                IFNULL((SELECT SUM(CURR_STOCK_QTY - BASE_STOCK_QTY)
+		                        FROM   VW_STOCK WHERE GOODS_CD = F.GOODS_CD
+		                       ),0)
+		            ELSE
+		                IFNULL((SELECT SUM(CURR_STOCK_QTY - BASE_STOCK_QTY)
+		                        FROM   VW_STOCK_COMPOSE
+		                        WHERE  GOODS_CD = F.GOODS_CD
+		                       ),0)
+		       END                           AS STOCK_QTY_SUM
+		     , (SELECT MAX(SYS_IMG_NM)
+		        FROM   TB_GOODS_IMG
+		        WHERE  GOODS_CD = F.GOODS_CD
+		        AND    COLOR_CD = F.MAIN_COLOR_CD
+		        AND    DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
+		     , CASE WHEN IFNULL((SELECT COUNT(SYS_IMG_NM)
+		                         FROM   TB_GOODS_IMG
+		                         WHERE  GOODS_CD = F.GOODS_CD
+		                         AND    COLOR_CD = F.MAIN_COLOR_CD
+		                         AND    DEFAULT_IMG_YN = 'Y'
+		                        ),0) = 0 THEN
+		                'N'
+		            ELSE
+		                'Y'
+		       END                           AS GOODS_IMAGE_YN
+		     , CASE WHEN F.WISH_GOOD IS NULL THEN
+		                'N'
+		            ELSE
+		                'Y'
+		       END                           AS WISH_YN
+		FROM   (
+		        SELECT A.SOCIAL_SQ
+		             , A.SOCIAL_NM
+		             , A.SOCIAL_TYPE
+		             , A.SITE_CD
+		             , A.FRONT_GB
+		             , A.SOCIAL_STDT
+		             , A.SOCIAL_EDDT
+		             , A.SOCIAL_TNM
+		             , A.USE_YN
+		             , A.APPLY_GB
+		             , A.REG_DT
+		             , B.GOODS_CD
+		             , B.CURR_BPRICE
+		             , B.CURR_APRICE
+		             , B.DC_BRATE
+		             , B.DC_ARATE
+		             , B.DEL_YN
+		             , B.DISP_ORD
+		             , C.GOODS_NM
+		             , C.GOODS_TYPE
+		             , C.GOODS_TNM
+		             , C.LIST_PRICE
+		             , C.MAIN_COLOR_CD
+		             , D.BRAND_KNM
+		             , D.BRAND_ENM
+		             , W.CUST_NO
+		             , W.GOODS_CD AS WISH_GOOD
 		             <choose>
-			            <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
-				     , IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
-			            </when>
-			            <otherwise>
-				     , ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
-			            </otherwise>
+		                 <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		             , IF(W.GOODS_CD IS NULL,'','likeit') AS LIKE_IT /*위시리스트담긴상품*/
+		                 </when>
+		                <otherwise>
+		             , ''                                 AS LIKE_IT /*위시리스트담긴상품*/
+		                </otherwise>
 		             </choose>
-				FROM TB_SOCIAL A INNER JOIN TB_SOCIAL_GOODS B ON A.SOCIAL_SQ = B.SOCIAL_SQ 
-				                 INNER JOIN TB_GOODS C ON B.GOODS_CD = C.GOODS_CD 
-				                 INNER JOIN TB_BRAND D ON C.BRAND_CD = D.BRAND_CD
-				                 LEFT JOIN TB_WISHLIST W ON C.GOODS_CD = W.GOODS_CD
-		                             AND W.CUST_NO  = IFNULL(#{custNo},0)
-				WHERE 1=1
-				  AND NOW() BETWEEN A.SOCIAL_STDT AND A.SOCIAL_EDDT 
-				  AND A.USE_YN = 'Y'		    		 /*사용여부*/
-				  AND A.APPLY_GB = 'A'					 /*적용구분(P:대기,A:적용,F:종료)*/
-				  AND A.FRONT_GB IN ('A',#{frontGb})	 /*프론트 구분*/
-				  AND B.DEL_YN = 'N'
-				  AND NOW() BETWEEN C.SELL_STDT AND C.SELL_EDDT
-				ORDER BY B.DISP_ORD 
-			)F
-			WHERE F.SOCIAL_SQ = #{socialSq}
+		        FROM   TB_SOCIAL A INNER JOIN TB_SOCIAL_GOODS B ON A.SOCIAL_SQ = B.SOCIAL_SQ
+		                           INNER JOIN TB_GOODS C ON B.GOODS_CD = C.GOODS_CD
+		                           INNER JOIN TB_BRAND D ON C.BRAND_CD = D.BRAND_CD
+		                           LEFT JOIN TB_WISHLIST W ON C.GOODS_CD = W.GOODS_CD
+		                                                  AND W.CUST_NO = IFNULL(#{custNo},0)
+		        WHERE  1 = 1
+		        AND    NOW() BETWEEN A.SOCIAL_STDT AND A.SOCIAL_EDDT
+		        AND    A.USE_YN = 'Y' /*사용하는소셜*/
+		        AND    A.APPLY_GB = 'A' /*적용구분(P:대기,A:적용,F:종료)*/
+		        AND    A.FRONT_GB IN ('A',#{frontGb}) /*프론트구분*/
+		        AND    B.DEL_YN = 'N' /*삭제안된상품*/
+		        AND    C.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		        AND    C.SELF_MALL_YN = 'Y'   /*몰노출상품*/
+		        AND    NOW() BETWEEN C.SELL_STDT AND C.SELL_EDDT /*판매기간*/
+		        ORDER  BY B.DISP_ORD 
+		       ) F
+		WHERE  F.SOCIAL_SQ = #{socialSq}
 	</select>
+	
 </mapper>

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

@@ -30,13 +30,14 @@
 		/* TsfWishlist.getWishListGoodsList*/
 		SELECT Z.*
 			      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
+			      ,DATE_FORMAT(Z.REG_DT,'%Y.%m') AS REG_DT_MONTH 
 			FROM
 			(
 			WITH TAB_PLAN_GOODS AS (
 			    SELECT W.AF_LINK_CD 
 			          ,W.CONTENTS_LOC 
 			          ,W.CUST_NO 
-			          ,DATE_FORMAT(W.REG_DT,'%Y.%m') AS REG_DT 
+			          ,W.REG_DT
 			          ,CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
 			                    BG.BRAND_GROUP_ENM
 			                ELSE

+ 1 - 3
src/main/resources/config/application-tsit.yml

@@ -20,10 +20,8 @@ logging:
 
 domain:
     admin: //tdadmin.style24.com
-    front: //ts5000.ipdisk.co.kr
-    style24: //tdfront.style24.com
+    front: //tdfront.style24.com
     image: //tdimage.style24.com
-    cdnimage: //tdimage.style24.com
     uximage: //tdimage.style24.com
 
 upload:

+ 389 - 0
src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html

@@ -0,0 +1,389 @@
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+
+<!-- 옵션변경 팝업 -->
+<div class="lap cartOptionModal" id="cartOptionModal" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="popup_close">카테고리닫기</div>
+	<div class="popup_head">
+		<h2>옵션변경</h2>
+	</div>
+	<div class="popup_con">
+		<div class="area_order">
+			<div class="part_goods">
+				<div class="goods_section">
+					<div class="goods_detail">
+						<a href="javascript:;">
+							<th:block th:if="${setType.equals(cart.goodsType) or cart.selfGoodsYn.equals('N')}">
+								<span class="thumb_box" th:each="img, index : ${cart.cartImgList}">
+									<img th:src="${cart.imgPath + '/' + img.sysImgNm} + '?RS=100'" src="/" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${img.sysImgNm}" alt="" />
+								</span>
+							</th:block>
+							<th:block th:if="${!setType.equals(cart.goodsType) and cart.selfGoodsYn.equals('Y')}">
+								<th:block th:each="comp, status : ${cart.cartCompsList}">
+									<th:block th:each="color, index : ${comp.cartColorList}">
+										<th:block th:if="${color.cartOptCd1 != null and color.cartOptCd1.equals(color.optCd1)}">
+											<span class="thumb_box" th:each="img, index : ${color.cartImgList}" th:if="${img.colorCd == color.cartOptCd1}">
+												<img th:src="${cart.imgPath + '/' + img.sysImgNm} + '?RS=100'" src="/" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${img.sysImgNm}" alt="" />
+											</span>
+										</th:block>
+									</th:block>
+								</th:block>
+							</th:block>
+
+							<div class="info_box">
+								<div class="od_name">
+									<div class="brand">
+										<span th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
+									</div>
+									<div class="name" th:text="${cart.goodsNm}"></div>
+								</div>
+								<div class="od_calc">
+									<p class="price">
+										<span class="selling_price"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span>
+									</p>
+								</div>
+							</div>
+						</a>
+					</div>
+				</div>
+			</div>
+
+			<th:block th:each="comp, status : ${cart.cartCompsList}">
+				<!-- 자사 일반 상품 옵션 -->
+				<th:block th:if="${!setType.equals(cart.goodsType) and 'Y'.equals(cart.selfGoodsYn)}">
+					<div class="opt_color">
+						<div class="opt_header">
+							<span class="title">컬러</span>
+							<th:block th:each="color, index : ${comp.cartColorList}">
+								<span class="info" th:if="${color.cartColorNm != null}" th:text="${color.cartColorNm}"></span>
+							</th:block>
+						</div>
+
+						<ul>
+							<li th:each="color, index : ${comp.cartColorList}" class="selfGoodsColor">
+								<a href="javascript:void(0);" th:cartDtlSq="${color.cartDtlSq}" th:classappend="${color.cartColorNm != null} ? 'on'" class="selfGoodsColorSelect" th:data="${color.optCd1}">
+									<img th:src="${cart.imgPath + '/' + color.sysImgNm} + '?RS=70'" src="#" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" th:alt="${color.colorNm}" alt="" />
+								</a>
+							</li>
+						</ul>
+
+						<div class="opt_size">
+							<div class="opt_header">
+								<span class="title">사이즈</span>
+							</div>
+							<div class="form_field selfGoodsSize">
+								<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+									<th:block  th:if="${color.cartColorNm != null}">
+										<th:block th:each="size, index : ${color.cartSizeList}">
+											<div>
+												<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty > size.currStockQty}">
+												<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
+											</div>
+										</th:block>
+									</th:block>
+								</th:block>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<!-- 세트상품 옵션 -->
+				<th:block th:if="${setType.equals(cart.goodsType)}">
+					<span class="hiddenData">
+						<input type="hidden" class="cartDtlSq" th:value="${comp.cartDtlSq}" />
+						<input type="hidden" class="itemCd" th:value="${comp.goodsCd}" />
+						<input type="hidden" class="optCd" th:classappend="|option_${comp.goodsCd}|" th:value="${comp.optCd}"/>
+						<input type="hidden" class="optCd1" th:classappend="|option1_${comp.goodsCd}|" th:value="${comp.optCd1}"/>
+						<input type="hidden" class="optCd2" th:classappend="|option2_${comp.goodsCd}|" th:value="${comp.optCd2}"/>
+					</span>
+
+					<div class="opt_select">
+						<div class="opt_header">
+							<span class="title" th:text="${comp.goodsNm}"></span>
+						</div>
+						<div class="opt_header">
+							<span class="title">옵션1</span>
+							<span class="color" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
+							<div class="form_field">
+								<input id="od_item_off" type="checkbox"><label for="od_item_off"><span>품절 제외</span></label>
+							</div>
+						</div>
+						<form class="form_wrap">
+							<div class="form_field">
+								<div class="select_custom item_opt1 colorList">
+									<div class="combo">
+										<div class="select" th:text="${comp.colorNm}"></div>
+										<ul class="list" th:data="${comp.goodsCd}">
+											<th:block th:each="color, index : ${comp.cartColorList}">
+												<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
+											</th:block>
+										</ul>
+									</div>
+								</div>
+							</div>
+						</form>
+					</div>
+					<div class="opt_select">
+						<div class="opt_header">
+							<span class="title">옵션2</span>
+							<span class="color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
+						</div>
+						<form class="form_wrap">
+							<div class="form_field">
+								<th:block th:each="color, index : ${comp.cartColorList}">
+									<div class="select_custom item_opt2 sizeList" th:classappend="|${comp.goodsCd}_${color.optCd1} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:block' : 'display:none'}">
+										<div class="combo">
+											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
+											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
+												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+												</th:block>
+											</ul>
+										</div>
+									</div>
+								</th:block>
+							</div>
+						</form>
+					</div>
+				</th:block>
+
+				<!-- 입점업체 -->
+				<th:block th:if="${!setType.equals(cart.goodsType) and 'N'.equals(cart.selfGoodsYn)}">
+					<span class="hiddenData">
+						<input type="hidden" class="cartDtlSq" th:value="${comp.cartDtlSq}" />
+						<input type="hidden" class="itemCd" th:value="${comp.goodsCd}" />
+						<input type="hidden" class="optCd" th:classappend="|option_${comp.goodsCd}|" th:value="${comp.optCd}"/>
+						<input type="hidden" class="optCd1" th:classappend="|option1_${comp.goodsCd}|" th:value="${comp.optCd1}"/>
+						<input type="hidden" class="optCd2" th:classappend="|option2_${comp.goodsCd}|" th:value="${comp.optCd2}"/>
+					</span>
+
+					<div class="opt_select">
+						<div class="opt_header">
+							<span class="title">옵션1</span>
+							<span class="color" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
+							<div class="form_field">
+								<input id="od_item_off" type="checkbox"><label for="od_item_off"><span>품절 제외</span></label>
+							</div>
+						</div>
+						<form class="form_wrap">
+							<div class="form_field">
+								<div class="select_custom item_opt1 colorList">
+									<div class="combo">
+										<div class="select" th:text="${comp.colorNm}"></div>
+										<ul class="list" th:data="${comp.goodsCd}">
+											<th:block th:each="color, index : ${comp.cartColorList}">
+												<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
+											</th:block>
+										</ul>
+									</div>
+								</div>
+							</div>
+						</form>
+					</div>
+					<div class="opt_select">
+						<div class="opt_header">
+							<span class="title">옵션2</span>
+							<span class="color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
+						</div>
+						<form class="form_wrap">
+							<div class="form_field">
+								<th:block th:each="color, index : ${comp.cartColorList}">
+									<div class="select_custom item_opt2 sizeList" th:classappend="|${comp.goodsCd}_${color.optCd1} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:block' : 'display:none'}">
+										<div class="combo">
+											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
+											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
+												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+												</th:block>
+											</ul>
+										</div>
+									</div>
+								</th:block>
+							</div>
+						</form>
+					</div>
+				</th:block>
+			</th:block>
+
+			<div class="opt_count">
+				<div class="opt_header">
+					<span class="title">수량</span>
+				</div>
+				<div class="number_count">
+					<span class="minus"><em class="sr-only">감소</em></span>
+					<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}"/>
+					<span class="plus"><em class="sr-only">추가</em></span>
+				</div>
+			</div>
+		</div>
+		<div class="btn_group_block">
+			<button class="btn btn_dark btn_block" th:onclick="|fnChangeCartOption(${cart.cartSq})|"><span>옵션변경</span></button>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+	$(document).ready(function() {
+		$(".select_custom").each(function() {
+			new sCombo($(this));
+		});
+	});
+
+	// 세트상품, 입점업체 상품 컬러 변경시
+	$("#cartOptionModal .colorList > .combo > .list li").on("click", function(e) {
+		let goodsCd = $(this).parent().attr("data");
+		let optCd1 = $(this).attr("data");
+		let firstSize = "";
+		if(optCd1 != $(".option1_" + goodsCd).val()) {
+			let firstOptCd = $("#cartOptionModal ." + goodsCd + "_" + optCd1 + " li:first").attr("optcd");
+			let firstOptCd2 = $("#cartOptionModal ." + goodsCd + "_" + optCd1 + " li:first").text();
+
+			$("#cartOptionModal .chooseColorNm_" + goodsCd).text($(this).text());
+			$("#cartOptionModal .option_" + goodsCd).val(firstOptCd);
+			$("#cartOptionModal .option1_" + goodsCd).val(optCd1);
+			$("#cartOptionModal .option2_" + goodsCd).val(firstOptCd2);
+
+			$("#cartOptionModal .sizeList" + goodsCd).hide();
+			$("#cartOptionModal ." + goodsCd + "_" + optCd1).show();
+			$("#cartOptionModal ." + goodsCd + "_" + optCd1 + " .select").text(firstOptCd2);
+			$("#cartOptionModal .chooseSizeNm_" + goodsCd).text(firstOptCd2);
+		}
+	});
+
+	// 세트상품, 입점업체 상품 사이즈 변경시
+	$(".sizeList > .combo > .list li").on("click", function() {
+		$(this).parent().parent().parent().parent().parent().parent().find(".opt_header .text").text($(this).text());
+		$("#cartOptionModal .option_" + $(this).parent().attr("data")).val($(this).attr("optcd"));
+		$("#cartOptionModal .option2_" + $(this).parent().attr("data")).val($(this).text());
+	});
+
+	/* 옵션변경 > 수량조절 */
+	//수량1개 이하 감소버튼 비활성화
+	var valItemCount = $('.optModify_pop .number_count input').val();
+	if ( valItemCount == 1 ) {
+		$('.optModify_pop .number_count .minus').addClass('min_val');
+	}
+
+	// 자사 일반 상품 컬러 선택시
+	$(".selfGoodsColorSelect").on("click", function(e) {
+		let sizeHtml = "";
+		let imgHtml = "";
+		let cart = [[${cart}]];
+		let color =  [[${cart.cartCompsList[0].cartColorList}]];
+		let optCd1 = $(this).attr("data");
+
+		for(let i = 0 ; i < color.length ; i++) {
+			let size = color[i].cartSizeList;
+			for(let j = 0 ; j < size.length ; j++) {
+				if(optCd1 == size[j].optCd1) {
+					sizeHtml += "<div>";
+					sizeHtml += "<input type='radio' name='rdi-optsize' id='" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
+					if(size[j].soldoutYn == "Y" || cart.goodsQty > size[j].currStockQty) {
+						sizeHtml += "disabled = 'disabled'";
+					}
+					sizeHtml += " />\n";
+					sizeHtml += "<label for='" + size[j].goodsCd + "-" + size[j].optCd + "'><span>" + size[j].optCd2 + "</span></label>\n"
+					sizeHtml += "</div>\n";
+				}
+			}
+
+			if(optCd1 == color[i].optCd1) {
+				for (let j = 0; j < color[i].cartImgList.length; j++) {
+					let img = color[i].cartImgList[j];
+					if(optCd1 == img.colorCd) {
+						imgHtml += "<li>\n<span class='thumb'>\n";
+						imgHtml += "<img src='" + cart.imgPath + "/" + img.sysImgNm + "' onerror='this.src='" + [[${@environment.getProperty('domain.uximage')}]] + "/images/pc/thumb/bg_item_none.png' alt='" + img.sysImgNm + "' />\n";
+						imgHtml += "</span>\n</li>\n";
+					}
+				}
+			}
+		}
+
+		$(".cartOptionModal .pic_list").html(imgHtml);
+		$(".cartOptionModal .selfGoodsSize").html(sizeHtml);
+	});
+
+	function fnChangeCartOption(cartSq) {
+		let cart = [[${cart}]];
+		var cartDtlSqArr = [], itemCds = [], optCds = [];
+		var data;
+
+		if(cart.goodsType == "G056_S") {
+			$("#cartOptionModal .cartDtlSq").each(function() {
+				optCds.push($(this).parent().find(".optCd").val());
+				cartDtlSqArr.push($(this).parent().find(".cartDtlSq").val());
+				itemCds.push($(this).parent().find(".itemCd").val());
+			});
+
+			data = {
+				cartSq : cart.cartSq
+				, goodsCd : cart.goodsCd
+				, goodsType : cart.goodsType
+				, cartDtlSqArr : cartDtlSqArr
+				, itemCds : itemCds
+				, optCds : optCds
+				, goodsQty : $("input[name=goodsQty]").val()
+			}
+		} else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
+			if($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").length < 1) {
+				mcxDialog.alert("옵션을 선택해 주세요.");
+				return false;
+			}
+
+			optCds.push($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val());
+			itemCds.push(cart.goodsCd);
+			$(".selfGoodsColorSelect").each(function() {
+				if($(this).attr("cartDtlSq") > 0) {
+					cartDtlSqArr.push($(this).attr("cartDtlSq"));
+				}
+			});
+
+			data = {
+				cartSq : cart.cartSq
+				, goodsCd : cart.goodsCd
+				, goodsType : cart.goodsType
+				, cartDtlSqArr : cartDtlSqArr
+				, itemCds : itemCds
+				, optCds : optCds
+				, goodsQty : $("input[name=goodsQty]").val()
+			}
+		} else {
+			$("#cartOptionModal .cartDtlSq").each(function() {
+				optCds.push($(this).parent().find(".optCd").val());
+				cartDtlSqArr.push($(this).parent().find(".cartDtlSq").val());
+				itemCds.push($(this).parent().find(".itemCd").val());
+			});
+
+			data = {
+				cartSq : cart.cartSq
+				, goodsCd : cart.goodsCd
+				, goodsType : cart.goodsType
+				, cartDtlSqArr : cartDtlSqArr
+				, itemCds : itemCds
+				, optCds : optCds
+				, goodsQty : $("input[name=goodsQty]").val()
+			}
+		}
+
+		$.ajax( {
+			type: "POST",
+			url : '/cart/change/option',
+			contentType: 'application/json',
+			dataType : 'json',
+			data : JSON.stringify(data),
+			error : function(e) {
+				mcxDialog.alert(e.message);
+			},
+			success : function(result) {
+				mcxDialog.alert(result.message);
+				$(".closeCartOptionModal").trigger("click");
+				if(result.status == "SUCCESS") {
+					let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
+					getCartList(data);
+				}
+			}
+		});
+	}
+</script>
+<!-- //옵션변경 팝업 -->
+</html>

+ 63 - 10
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -15,7 +15,7 @@
  -->
 <body>
 <th:block layout:fragment="content">
-	<form id="cartListForm" method="post" action="/order/noMember">
+	<form id="cartListForm" method="post" action="/order/noMember" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 		<div class="inner shotDelvSelect">
 			<div class="od_method">
 				<div class="tbl_tit">
@@ -97,7 +97,7 @@
 							</div>
 							<div class="thumb_box">
 								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
-									<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" th:alt="${cart.sysImgNm}" alt="">
+									<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm} + '?RS=100'" src="/" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" th:alt="${cart.sysImgNm}" alt="">
 								</a>
 							</div>
 							<div class="info_box">
@@ -147,8 +147,8 @@
 						<div class="goods_btn_wrap btn_group_flex">
 							<div><button type="button" class="btn btn_default btn_option_pop01" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.ordCanYn.equals('N')}"><span>옵션/수량변경</span></button></div> <!-- 옵션변경_팝업01 호출 -->
 							<div>
-								<button th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}" type="button" id="btn_quick_purchase" class="btn btn_primary_line" disabled=""><span>구매 불가</span></button>
-								<button th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" type="button" id="btn_quick_purchase" class="btn btn_primary_line"><span>바로주문</span></button>
+								<button th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}" type="button" class="btn btn_primary_line" disabled=""><span>구매 불가</span></button>
+								<button th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" type="button" class="btn btn_primary_line"><span>바로주문</span></button>
 							</div> <!-- 210406_ID 추가 -->
 						</div>
 
@@ -197,7 +197,7 @@
 							</div>
 							<div class="thumb_box">
 								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
-									<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" th:alt="${cart.sysImgNm}" alt="">
+									<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm} + '?RS=100'" src="/" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" th:alt="${cart.sysImgNm}" alt="">
 								</a>
 							</div>
 							<div class="info_box">
@@ -247,8 +247,8 @@
 						<div class="goods_btn_wrap btn_group_flex">
 							<div><button type="button" class="btn btn_default btn_option_pop01" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.ordCanYn.equals('N')}"><span>옵션/수량변경</span></button></div> <!-- 옵션변경_팝업01 호출 -->
 							<div>
-								<button th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}" type="button" id="btn_quick_purchase" class="btn btn_primary_line" disabled=""><span>구매 불가</span></button>
-								<button th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" type="button" id="btn_quick_purchase" class="btn btn_primary_line"><span>바로주문</span></button>
+								<button th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}" type="button" class="btn btn_primary_line" disabled=""><span>구매 불가</span></button>
+								<button th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" type="button" class="btn btn_primary_line"><span>바로주문</span></button>
 							</div> <!-- 210406_ID 추가 -->
 						</div>
 
@@ -317,7 +317,7 @@
 							</div>
 							<div class="thumb_box">
 								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
-									<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" th:alt="${cart.sysImgNm}" alt="">
+									<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm} + '?RS=100'" src="/" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" th:alt="${cart.sysImgNm}" alt="">
 								</a>
 							</div>
 							<div class="info_box">
@@ -367,8 +367,8 @@
 						<div class="goods_btn_wrap btn_group_flex">
 							<div><button type="button" class="btn btn_default" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.ordCanYn.equals('N')}"><span>옵션/수량변경</span></button></div>
 							<div>
-								<button th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}" type="button" id="btn_quick_purchase" class="btn btn_primary_line" disabled=""><span>구매 불가</span></button>
-								<button th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" type="button" id="btn_quick_purchase" class="btn btn_primary_line"><span>바로주문</span></button>
+								<button th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}" type="button" class="btn btn_primary_line" disabled=""><span>구매 불가</span></button>
+								<button th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" type="button" class="btn btn_primary_line"><span>바로주문</span></button>
 							</div>
 						</div>
 
@@ -660,6 +660,10 @@
 	</div>
 	<!-- //쿠폰사용안내 팝업 -->
 
+	<!-- 옵션변경 팝업 -->
+	<div id="optModifyPop01" class="popup_box optModifyPop optModifyPop01"></div>
+	<!-- //옵션변경 팝업 -->
+
 	<script th:inline="javascript">
 		let sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 		let totDcAmt = [[${order.totDcAmt}]];
@@ -1131,6 +1135,22 @@
 			});
 		}
 
+		//옵션변경 팝업열기
+		function fnChangeCartOptCd(cartSq) {
+			$.ajax( {
+				type: "POST",
+				url : '/cart/goods/info',
+				dataType : 'html',
+				data : {cartSq : cartSq},
+				success : function(result) {
+					$("#cartOptionModal").remove();
+					$("#optModifyPop01").html(result);
+					$('#optModifyPop01').show().addClass("active");
+					$("body").css({"overflow":"hidden"});
+				}
+			});
+		}
+
 		// 장바구니 구매 수량 변경
 		function updateGoodsQty(cartSq, goodsQty) {
 			let url = '/cart/update/goodsQty';
@@ -1167,6 +1187,39 @@
 				$("#cartListForm .totalprice_box .sumRealPayAmt").text("0");
 			}
 		});
+
+		//수량조절 이벤트
+		$(document).on('click','.optModifyPop01 .number_count .minus',function(e){
+			var $input = $(this).parent().find('input');
+			var count = parseInt($input.val()) - 1;
+			count = count < 1 ? 1 : count;
+			$input.val(count);
+			$input.change();
+			//수량1개 이하 감소버튼 비활성화
+			if ($input.val() == 1) {
+				$('.optModifyPop01 .number_count .minus').addClass('min_val');
+			}
+			return false;
+		}).on('click','.optModifyPop01 .number_count .plus',function(e){
+			var $input = $(this).parent().find('input');
+			$input.val(parseInt($input.val()) + 1);
+			$input.change();
+			//수량2개 이상부터 감소버튼 활성화
+			$('.optModifyPop01 .number_count .minus').removeClass('min_val');
+			return false;
+		}).on('keyup','.optModifyPop01 .number_count input[type=text]',function(e){
+			//텍스트, 0 입력금지
+			$(this).val($(this).val().replace(/[^1-9]/g,""));
+		});
+
+		/* 팝업 - 옵션변경 > 컬러선택 표기 */
+		$(document).on('click','.optModifyPop .opt_color ul li a',function(e){
+			$(this).parents('.opt_color').find('li a').removeClass('on');
+			$(this).addClass('on');
+			var optColor = $('.optModifyPop .opt_color ul li a.on img').attr('alt');
+			$('.optModify_pop .opt_color .opt_header .color').text(optColor);
+			return false;
+		});
 	</script>
 </th:block>
 </body>

+ 18 - 10
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -34,6 +34,7 @@
 			</div>
 		</div>
 		<!-- //옵션변경_팝업01 -->
+
 		<!-- 옵션변경_팝업02 -->
 		<div id="optModifyPop02" class="popup_box optModifyPop optModifyPop02">
 			<div class="lap">
@@ -45,6 +46,7 @@
 			</div>
 		</div>
 		<!-- //옵션변경_팝업02 -->
+
 		<!-- 다다익선 할인 대상_팝업 -->
 		<div id="moresalePop" class="popup_box moresalePop">
 			<div class="lap">
@@ -96,42 +98,48 @@
 		var od_recommend_slide = new Swiper('.od_recommend .swiper-container', {
 			slidesPerView: 2,
 			spaceBetween: 8,
-			centerMode: true,
+			centerMode: true
 		});
 
 		//배송요청사항
-		var my_deilivery_selecter = new sCombo('.my .ship_request .select_custom');
+		// var my_deilivery_selecter = new sCombo('.my .ship_request .select_custom');
+
+		//상품옵션변경 팝업 > 컬러선택 표기
+		$(document).on('change','input[name=shotDelvUseYn]',function(e){
+			let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
+			getCartList(data);
+		});
 
 		//옵션변경_팝업01
 		$(document).on("click", ".btn_option_pop01", function(){
-			$("#optModifyPop01 .popup_con").load("popup_optModify01.html");
-			$('#optModifyPop01').show().addClass("active");
-			$("body").css({"overflow":"hidden"});
+			//$("#optModifyPop01 .popup_con").load("popup_optModify01.html");
+			/*$('#optModifyPop01').show().addClass("active");
+			$("body").css({"overflow":"hidden"});*/
 		});
 
 		//옵션변경_팝업02
 		$(document).on("click", ".btn_option_pop02", function(){
-			$("#optModifyPop02 .popup_con").load("popup_optModify02.html");
+			//$("#optModifyPop02 .popup_con").load("popup_optModify02.html");
 			$('#optModifyPop02').show().addClass("active");
 			$("body").css({"overflow":"hidden"});
 		});
 
 		//다다익선 할인 대상_팝업
 		$(document).on("click", ".btn_moresale_pop", function(){
-			$("#moresalePop .popup_con").load("popup_moresale.html");
+			//$("#moresalePop .popup_con").load("popup_moresale.html");
 			$('#moresalePop').show().addClass("active");
 			$("body").css({"overflow":"hidden"});
 		});
 
 		//배송비 SAVE_팝업
 		$(document).on("click", ".btn_popup_save", function(){
-			$("#dlvrSavePop .popup_con").load("popup_dlvrSave.html");
+			//$("#dlvrSavePop .popup_con").load("popup_dlvrSave.html");
 			$('#dlvrSavePop').show().addClass("active");
 			$("body").css({"overflow":"hidden"});
 		});
 
 		//팝업_닫기
-		$('.popup_close').on("click",function(){
+		$(document).on("click", ".popup_close", function(){
 			$('.popup_box').hide();
 			$('.popup_box').removeClass('active');
 			$("body").css({"overflow":"visible"});
@@ -139,7 +147,7 @@
 
 		//팝업 - 쿠폰사용안내
 		$(document).on('click','#btn_couponInfo_pop',function(e){
-			$("#couponInfoPop .modal-content").load("popup_couponInfo.html");
+			//$("#couponInfoPop .modal-content").load("popup_couponInfo.html");
 			$("#couponInfoPop").modal("show");
 			return false;
 		});

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDeliveryFormMob.html

@@ -23,7 +23,7 @@
 					<div class="item_state">
 						<a href="javascript:void(0);" class="itemLink">
 							<div class="itemPic">
-								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=40'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</div>
 							<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA</p>
 							<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성</div>

+ 28 - 37
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -49,7 +49,7 @@
 							<div class="swiper-slide" th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-							<div class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></div></div>
+							<div class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></div></div>
 							</th:block>
 						</div>
 						<!-- Add Pagination -->
@@ -103,7 +103,7 @@
 					<ul>
 						<li th:each="goodsOption1, status : ${goodsOption1List}">
 							<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-								<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+								<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="">
 							</a>
 						</li>
 					</ul>
@@ -219,7 +219,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -241,7 +241,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -273,7 +273,7 @@
 				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" >
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 							</th:block>
 					</div>
 				</div>
@@ -405,7 +405,7 @@
 							<div class="swiper-slide"  th:each="bestReview, status : ${bestReviewList}"  >
 								<!-- 베스트 리뷰 등록시 노출 -->
 								<div class="best_review">
-									<a href="javascript:void(0);">
+									<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])">
 										<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">
 											<span class="star">
 												<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
@@ -572,7 +572,7 @@
 							<ul>
 								<li th:each="goodsOption1, status : ${goodsOption1List}">
 									<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-										<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+										<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="">
 									</a>
 								</li>
 							</ul>
@@ -1607,7 +1607,7 @@
 			$(".pic_list > div").hide();
 			$(".pic_list > div").eq(pic_index).fadeIn();
 		});
-		
+
 		//슬라이드 - 베스트리뷰팝업 
 		var bestreviewdetailSwiper = new Swiper('.pd_bestreviewdetail_pop .area_slider .swiper-container', {
 			observer: true,
@@ -1630,31 +1630,30 @@
 			},
 		});
 
-		//팝업 - 리뷰
-		$(document).on('click','#btn_pdReview_pop',function(e){
-			$("#pdReviewPop").modal("show");
-			$('#pdReviewPop .modal-body .pop_cont').load('pd_review_pop.html');
-			return false;
-		})
+		$(document).on('click','.pd_bestreviewdetail_pop .thumblist ul li',function(e){
 
-		//팝업 - 베스트리뷰
-		$(document).on('click','#btn_pdBestReview_pop a',function(e){
-			$("#pdBestReviewPop").modal("show");
-			return false;
-		})
+			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
+			$(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
+			$(this).find(".pic").addClass('active');
 
-		//팝업 - 포토/영상 리뷰 (detail)
-		$(document).on('click','.area_rv_photo .photo_list a, .area_rv_all .review_list .photo_list a, .pd_photoreviewlist_pop .photo_list ul li a',function(e){
-			$("#pdPhotoReviewDetailPop").modal("show");
+			var thumbIndex = $(this).index();
+			var thumbImg = $(this).find('.pic .thumb').attr('style');
+			var thumbImgSrc = thumbImg.split("background-image:url(")[1];
+			thumbImgHtml = "<img src="+ thumbImgSrc +" alt=''>";
+			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbImgHtml);
+			
 			return false;
-		})
-
-		//팝업 - 포토/영상 리뷰 (list)
-		$(document).on('click','#btn_more_photoreview',function(e){
-			$("#pdPhotoReviewListPop").modal("show");
+		});
+			
+		// 포토,베스트리뷰숨김
+		var review_open=$(".btn_review_open");
+		$(document).on('click','.btn_review_open',function(e){
+			$(this).toggleClass('active');
+			$(this).next(".review_list").toggleClass('active');
 			return false;
-		})
-
+		});
+		
+		
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
 			$(".Purchase_pop .pop_option_select").show();
@@ -1666,14 +1665,6 @@
 			return false;
 		});
 
-		// 포토,베스트리뷰숨김
-		var review_open=$(".btn_review_open");
-		$(document).on('click','.btn_review_open',function(e){
-			$(this).toggleClass('active');
-			$(this).next(".review_list").toggleClass('active');
-			return false;
-		});
-		
 		fnOptionSoldout();
 		
 		// 광고 스크립트용

+ 14 - 23
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -17,7 +17,7 @@
 <!-- 상품문의 리스트 내용 -->
 <form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 <input type="hidden" name="pageNo"  value ="1"/>
-<input type="hidden" name="pageSize" value ="20"/>
+<input type="hidden" name="pageSize" value ="3"/>
 <input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 <div class="pd_qnalist">
 	<div class="info_txt">
@@ -62,7 +62,7 @@
 </div>
 </form>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scroll.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
@@ -93,6 +93,7 @@
 	}
 
 	var fnGoodsQnaListSearch = function() {
+		fnGoodsQnaInfiniteScrollInit();
 		gagaInfiniteScroll.getHistory();
 	}
 
@@ -154,33 +155,23 @@
 
 	// 인피니트 스크롤 초기화
 	var fnGoodsQnaInfiniteScrollInit = function(){
-		 sessionStorage.removeItem(document.location.href);
+		// sessionStorage.removeItem(document.location.href);
+		History.replaceState(null, null);
+		gagaInfiniteScroll.pageStatus = {
+				  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
+				, loadPage : 0      // 로드할 페이지
+				, loadAlign : 'not' // 로드 상태(prev, next, not)
+				, historyScroll : 0 //
+				, nowPage : null    // 현재 페이지
+				, pageUrl : {       // page url
+				}
+		}
 		//History 초기화
 		$("#listBox").html("");
 	}
 	
-	// 왜 안될가?
-	// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
-	$(window).on("pageshow", function(event) {
-		if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
-			var historyData = sessionStorage.getItem(document.location.href);
-			if(historyData!=null){
-				historyData = JSON.parse(historyData);
-			}else{
-				historyData = {};
-			}
-			fnGoodsQnaListSearch();
-		}else{
-			fnGoodsQnaInfiniteScrollInit();
-			fnGoodsQnaListSearch();
-		}
-
-	});
-	
-	
 	$(document).ready( function() {
 		fnGoodsQnaListSearch();
-		
 	});
 	
 /*]]>*/

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

@@ -458,7 +458,7 @@
 				</li>
 			</ul>
 			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
-			<div th:if="${#lists.size(photoReviewList) >= 8}">
+			<div th:if="${#lists.size(photoReviewList) >= 1}">
 				<div>
 					<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])"><span>더 보기</span></button>
 				</div>	

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

@@ -19,7 +19,7 @@
 <div class="shareWrap" th:with="stylelUrl=${@environment.getProperty('domain.front')}, imgGoodsUrl=${@environment.getProperty('upload.goods.view')}">
 	<div id="layerShare" class="setShare open">
 		<span>
-			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm}');|"><span>카카오톡</span></button>
+			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=80'}');|"><span>카카오톡</span></button>
 			<button type="button" class="fb" th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '', '');|"><span>페이스북</span></button>
 			<button type="button" class="tw" th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm+ '#style24몰'}', '', '');|"><span>트위터</span></button>
 			<button type="button" class="url btn_copy"><span>URL</span></button>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsInstockAlarmFormMob.html

@@ -31,7 +31,7 @@
 						<div class="item_state">
 							<a href="javascript:void(0);" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=70'}">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html

@@ -30,7 +30,7 @@
 							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
 							<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'[[${params.contentsLoc}]]','','pc_detail');" class="itemLink" >
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=156'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html

@@ -23,7 +23,7 @@
 					<div class="item_state">
 						<a href="javascript:void(0);" class="itemLink">
 							<div class="itemPic">
-								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=40'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</div>
 							<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA</p>
 							<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성</div>

+ 168 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html

@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewDetailFormMob.html
+ * @desc	: 상품평 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<th:block th:if="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">베스트 리뷰</h5>
+			</th:block>
+			<th:block th:unless="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">
+				<button type="button" id="btn_more_photoreview"></button>
+				포토/영상리뷰
+			</h5>
+			</th:block>
+		</div>
+		<div class="modal-body" th:if="${reviewList != null and !reviewList.empty}">
+			<div class="pop_cont" th:each="review, status : ${reviewList}" >
+				<!-- 리뷰사진영역 -->
+					<div class="area_slider">
+						<div class="swiper-container thumb_list">
+							<div class="swiper-wrapper">
+								<th:block th:if="${review.reviewAttachList != null and !review.reviewAttachList.empty}" >
+								<th:block th:each="reviewAttach, attachStatus : ${review.reviewAttachList}" th:if="${attachStatus.first}">
+								<div class="swiper-slide">
+									<div class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}">
+										<th:block th:if="${reviewAttach.fileGb == 'M'}">
+											<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">
+											<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">
+										</video>
+										</th:block>
+										<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+											<img th:src="${imgUrl+'/'+reviewAttach.sysFileNm}" alt="">
+										</th:block>
+									</div>
+								</div>
+								</th:block>
+								</th:block>
+								<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
+									<div class="swiper-slide"><div class="thumb nodata"><img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=358'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" alt=""></div></div><!-- 이미지 없으면 calss .nodata  -->
+								</th:block>
+							</div>
+							<!-- Add Pagination -->
+							<div class="swiper-pagination"></div>
+						</div>
+					</div>
+				<!-- //리뷰사진영역 -->
+				<!-- 리뷰내용 -->
+				<div class="pd_review best">
+					<div class="area_rv_all">
+						<div class="btn_review_open">리뷰오픈</div>
+						<div class="review_list">
+							<ul>
+								<li>
+									<div class="review">
+										<div class="info_box">
+											<div class="star_score" h:with="starScore=${#numbers.formatDecimal((review.score*100/5), 0,0)}">
+												<span class="star">
+													<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+												</span>
+											</div>
+											<div class="writer">
+												<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
+												<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
+											</div>
+										</div>
+										<div class="response_box">
+											<div>
+												<dl>
+													<div th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}" th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}">
+														<dt >구매옵션</dt>
+														<dd th:text="${reviewGoods.optCd1 +' / '+ reviewGoods.optCd2}">베이지 / 100</dd>
+													</div>
+													<div>
+														<dt>키/몸무게</dt>
+														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
+															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
+														</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="txt_review_box">
+											<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">옷</p>
+										</div>
+										<div class="response_box2"  th:if="${not #strings.isEmpty(review.sizeGb)}">
+											<div>
+												<dl>
+													<div>
+														<dt>사이즈</dt>
+														<dd th:text="${review.scoreSizeNm}">작음</dd>
+													</div>
+													<div>
+														<dt>컬러</dt>
+														<dd th:text="${review.scoreColorNm}">밝음</dd>
+													</div>
+													<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>핏</dt>
+														<dd th:text="${review.scoreFitNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>두께감</dt>
+														<dd th:text="${review.scoreThickNm}">적당함</dd>
+													</div>
+													</th:block>
+													<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>무게감</dt>
+														<dd th:text="${review.scoreWeightNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>볼너비</dt>
+														<dd th:text="${review.scoreBallNm}">적당함</dd>
+													</div>
+													</th:block>
+												</dl>
+											</div>
+										</div>
+										<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
+											<div class="reply">
+												<div class="reply_writer">
+													<span class="wr_name">관리자</span>
+													<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
+												</div>
+												<div class="reply_txt">
+													<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
+														안녕하세요, 스타일24 관리자입니다.
+													</p>
+												</div>
+											</div>
+										</div>
+									</div>
+								</li>
+							</ul>
+						</div>
+					</div>
+				</div>
+				<!-- //리뷰내용 -->
+			</div>
+		</div>
+	</div>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	$(document).ready( function() {
+
+
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 113 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html

@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewPhotoFormMob.html
+ * @desc	: 상품평 - 포토/영상 리스트 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.008   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="exampleFullLabel">포토/영상리뷰</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="photo_list" >
+					<ul id="ulGoodsReviewPhoto">
+					</ul>
+				</div>
+				<div class="review_last"   style="display:none;">
+					마지막 게시글입니다.
+				</div>
+				<div class="btn_group_flex"  style="display:none;">
+					<div>
+						<button type="button" class="btn btn_default" id="btnMore">
+							<span>더보기</span>
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<form id="goodsReviewPhotoForm" name="goodsReviewPhotoForm" action="#" th:action="@{'/goods/review/list'}">
+		<input type="hidden" name="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="photoYn" value ="Y"/>
+		<input type="hidden" name="goodsCd" th:value ="${params.goodsCd}"/>
+	</form>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_photo')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	var fnReviewPhotoGetList = function() {
+
+		gagajf.ajaxFormSubmit($('#goodsReviewPhotoForm').prop('action'), '#goodsReviewPhotoForm', fnGetListCallback);
+	}
+	
+	var fnGetListCallback = function(result) {
+		//$('#ulGoodsReviewPhoto').html('');
+	
+		// 목록
+		if (result.dataList != null && result.dataList.length > 0) {
+			
+			$.each(result.dataList, function(idx, item) {
+				let tag = '';
+				if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
+					var fileGbClass = '';
+					$.each(item.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach == "M") fileGbClass = "mov";
+				tag += '				<li>\n';
+				tag += '					<a href="javascript:void();" onclick="fnGoodsReviewDetail(\''+item.reviewSq+'\');">\n';
+				tag += '						<div class="pic">\n';
+				tag += '							<span class="thumb '+ fileGbClass +'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				tag += '						</div>\n';
+				tag += '					</a>\n';
+				tag += '				</li>\n';		
+					});	
+				}
+				
+				$('#ulGoodsReviewPhoto').append(tag);
+			});
+			
+		}
+		
+		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
+			$('#btnMore').parent().show();
+			$('#goodsReviewPhotoForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
+		} else {
+			$('.review_last').show();
+			$('#btnMore').parent().hide();
+		}
+	}
+	
+	// 더보기
+	$('#btnMore').on('click', function() {
+		fnReviewPhotoGetList();
+	});
+	
+	// 상세보기
+	var fnGoodsReviewDetail = function(reviewSq){
+		cfGoodsReviewDetail([[${params.goodsCd}]],'', 'Y', reviewSq);
+		cfCloseLayer('layer_review_photo');
+	}
+	
+	$(document).ready( function() {
+		
+		fnReviewPhotoGetList();
+		
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 262 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -0,0 +1,262 @@
+<!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/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageWishListFormMob.html
+ * @desc    : 마이페이지 > 리뷰 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<!-- 상단헤드 //? -->
+<th:block layout:fragment="content">
+		<main role="" id="" class="container my">
+			<section class="content review">
+				<div class="inner">
+					<div class="ADwrap">
+						<span class="adcopy">일반 리뷰 150P, 포토/영상 리뷰 350P 적립!</span>
+
+						<div class="tip_wrap tip1" >
+							<div class="tip_tit">?</div>
+							<div class="tip_contents">
+								<a href="javascript:;" class="tip_close"><span class="sr-only">팁 닫기</span></a> <!-- 210407_tip_close 요소 추가 -->
+								<p class="tip_txt">
+									<ul>
+										<li>일반 리뷰 작성시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다.</li>
+										<li>월 최대 10,000P까지 적립 가능합니다. <br> (합산 후 월 1회 지급)</li>
+										<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다.</li>
+										<li>리뷰는 주문일 기준 90일간 작성이 가능합니다.</li>
+									</ul>
+								</p>
+							</div>
+						</div>
+					</div>
+
+				</div>
+				<div class="inner wide">
+					<div class="tabWrap">
+						<ul class="tabIndex">
+							<li id="completeReview"><a href="javascript:void(0);">작성 가능한 리뷰<span class="count" th:text="'('+${#numbers.formatInteger(completeReviewCount,0,'COMMA')}+')'"></span></a></li>
+							<li id="alreadyReview"><a href="javascript:void(0);" >내가 쓴 리뷰<span class="count" th:text="'('+${#numbers.formatInteger(alreadyReviewCount,0,'COMMA')}+')'" ></span></a></li>
+						</ul>
+						<div class="tabContents">
+							<div class="tab_cont active">
+								<!-- tab_cont Start -->
+								<div class="inner">
+
+									<div class="part_goods">
+										<!-- 굿즈_리뷰 -->
+										<div class="goods_section">
+											<div class="goods_detail">
+												<a href="">
+													<div class="thumb_box">
+														<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
+													</div>
+													<div class="info_box">
+														<div class="od_name">
+															<div class="goods_date"><span class="date">2020.10.25</span> 구매</div>
+															<div class="brand">
+																<span>Mollimelli 몰리멜리</span>
+															</div>
+															<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
+														</div>
+														<div class="od_opt">
+															<div class="option">
+																<em>Black</em><em>XXL</em>
+															</div>
+														</div>
+													</div>
+												</a>
+											</div>
+											<div class="goods_btn_wrap btn_group_flex">
+												<div><button type="button" class="btn btn_default"><span>리뷰쓰기(</span><em>15</em><span>일 남음)</span></button></div>
+											</div>
+										</div>
+										<!-- //굿즈_리뷰 -->
+									</div>
+									
+								</div>
+								<!-- // tab_cont End -->
+							</div>
+							<div class="tab_cont ">
+								<!-- tab_cont Start -->
+
+								<div class="once">
+									<div class="alert" role="alert">
+										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
+										<p class="formOnly">바로확인</p>
+										<button type="button" class="alertCls" onclick="location.href='#newreply2'" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
+										<!--
+											.reply_box(관리자댓글)가 추가된 
+											부모, class="reviewMy"의 
+											id="newreply2"로 이동 됩니다.
+										 -->
+									</div>
+								</div>
+
+								<div class="inner">
+									<div class="part_goods">
+										<!-- 굿즈_리뷰 -->
+										<div class="goods_section">
+											<div class="goods_detail">
+												<a href="">
+													<div class="thumb_box">
+														<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
+													</div>
+													<div class="info_box">
+														<div class="od_name">
+															<div class="goods_date"><span class="date">2020.10.25</span>구매</div>
+															<div class="brand">
+																<span>Mollimelli 몰리멜리</span>
+															</div>
+															<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
+														</div>
+														<div class="od_opt">
+															<div class="option">
+																<em>Black</em><em>XXL</em>
+															</div>
+														</div>
+													</div>
+												</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로 표기 -->
+												</span>
+											</div>
+											<div class="writer">
+												<span class="wr_date">2020.07.15</span>
+											</div>
+										</div>
+										<div class="response_box">
+											<div>
+												<dl>
+													<div>
+														<dt>구매옵션</dt>
+														<dd>베이지 / 100</dd>
+													</div>
+													<div>
+														<dt>키/몸무게</dt>
+														<dd>178cm/71kg</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="photo_box">
+											<div class="photo_list">
+												<ul>
+													<li>
+														<a href="">
+															<div class="pic">
+																<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+															</div>
+														</a>
+													</li>
+													<li>
+														<a href="">
+															<div class="pic">
+																<span class="thumb" style="background-image:url('/images/pc/thumb/tmp_pdDetail4.jpg');"></span>
+															</div>
+														</a>
+													</li>
+												</ul>
+											</div>
+										</div>
+										<div class="txt_review_box">
+											<p>
+												옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
+											</p>
+										</div>
+										<div  class="response_box2">
+											<div>
+												<dl class="clear">
+													<div>
+														<dt>사이즈</dt>
+														<dd>작음</dd>
+													</div>
+													<div>
+														<dt>핏</dt>
+														<dd>레귤러</dd>
+													</div>
+													<div>
+														<dt>컬러</dt>
+														<dd>밝음</dd>
+													</div>
+													<div>
+														<dt>두께감</dt>
+														<dd>적당함</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="reply_box">
+											<div class="reply">
+												<div class="reply_writer">
+													<span class="wr_name">관리자</span>
+													<span class="wr_date">2020.07.15</span>
+												</div>
+												<div class="reply_txt">
+													<p>
+														안녕하세요, 스타일24 관리자입니다.<br>
+														최대한 검수작업을 하고 있으나, 상품 출고량이 많은 경우 간혹 검수가 누락되는 경우가 있습니다.<br>
+														만약, 받아보시고 문제가 있을 경우 텍 제거하지마시고 고객센터로 접수 해주시면 처리 도와드리겠습니다.<br>
+														구매해주셔서 감사합니다.                                                 
+													</p>
+												</div>
+											</div>
+										</div>
+										<!-- .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>
+			</section>
+		</main>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
+	let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
+	let attachList = [[${alreadyReviewAttach}]];
+	// 작성가능한 리뷰 클릭 시 
+	$("#completeReview").click(function() {
+		$("#alreadyReview").removeClass("active");
+		$("#completeReview").addClass("active");
+		$(".check_notice").hide();
+		gagaPaging.init('searchForm1', fnSearchCallback1, 'paging', 10);
+		gagaPaging.load(1);
+	})
+	
+	$("#alreadyReview").click(function() {
+		$("#completeReview").removeClass("active");
+		$("#alreadyReview").addClass("active");
+		$(".check_notice").show();
+		gagaPaging.init('searchForm2', fnSearchCallback2, 'paging2', 10);
+		gagaPaging.load(1);
+	})
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

+ 112 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html

@@ -0,0 +1,112 @@
+<!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/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageWishListFormMob.html
+ * @desc    : 마이페이지 > 위시리스트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<!-- 상단헤드 //? -->
+<th:block layout:fragment="content">
+	<main role="" id="" class="container my">
+			<section class="content my_wishlist">
+				<div class="inner">
+					<div class="wishlist" id="wishList">
+					</div>
+				</div>
+			</section>
+		</main>
+<script th:inline="javascript">
+/*<![CDATA[*/
+let month = [[${wishMonth}]];
+
+var wishlistDelete = function(obj) {
+	mcxDialog.confirm("위시리스트를 해제하시겠습니까?", {
+		cancelBtnText : "취소",
+		sureBtnText : "확인",
+		sureBtnClick : function() {
+			cfnPutWishList(obj);
+			ajaxWishList();
+		}
+	});
+}	
+//마이페이지 위시리스트 
+var ajaxWishList = function () {
+	 $.getJSON('/mypage/wish/list', function(result, status) {
+		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';
+						}
+						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);
+			}
+		}
+	});
+}
+
+$(document).ready(function() {
+	ajaxWishList();
+});
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

+ 134 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html

@@ -0,0 +1,134 @@
+<!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/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : PlanningEventMainFormMob.html
+ * @desc    : 이벤트메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<!--  container -->
+		<main role="" id="" class="container ev">
+			<section class="content ev_list">
+				<div class="inner bg_gray">
+					<div class="ev_mem_rank">
+						<div class="txt">
+							<p>
+								STYLE24 회원등급에 따라<br>제공되는 혜택 정보를 확인해 보세요.
+							</p>
+							<a href="javascript:;" class="btn btn_dark">회원등급 혜택 보기</a>
+						</div>
+					</div>
+				</div>
+				<div class="inner">
+					<div class="event_list">
+						<div class="event_top">
+							<div class="count"id="eventTotCnt">
+								<!-- <span>9,999</span>개의 이벤트 -->
+							</div>
+							<div class="event_btn">
+								<a href="javascript:void(0);" th:onclick="cfnGoToPage(_PAGE_NOTICE)">당첨자 발표</a>
+							</div>
+						</div>
+						<div class="list" id="divEventList">
+							<!-- <ul class="event_con">
+								<li><a href="">
+										<div class="ev_img">
+											<div class="shape ranker">
+												<span>NEW</span>
+											</div>
+											<img src="/images/mo/thumb/ev_list_img01.jpg"
+												alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션">
+										</div>
+										<div class="txt">
+											<p class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ
+												컬렉션</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+								</a></li>
+							</ul> -->
+							 <div class="nodata" id="divEventNoData" style="display:none;">
+								<p><img src="/images/mo/ico_content_find02.png" alt="등록된 이벤트가 없습니다."></p>
+								<span>등록된 이벤트가 없습니다.</span>
+								
+							</div> 
+
+						</div>
+					</div>
+				</div>
+
+			</section>
+		</main>
+<script th:inline="javascript">
+
+/*<![CDATA[*/
+let fnGetEventList = function() {
+	let actionUrl = '/planning/event/main/list';
+	
+	$.getJSON(actionUrl
+		, function(result, status) {
+			if (status == 'success') {
+				if (result.length > 0) {
+					$('#eventTotCnt').html('<span>' + result.length.addComma() + '</span>개의 이벤트');
+					$('#divEventList').html('');
+					let tag = '';
+					tag += '<ul class="event_con">\n';
+					$.each(result, function(idx, item) {
+						tag += '	<li>\n';
+						tag += '        <a onclick="cfnGoToPlanDetail(\'' + item.planSq + '\')">\n'
+						tag += '			<div class="ev_img">\n';
+						if (item.newYn == 'Y') {
+							tag += '				<div class="shape ranker">\n';
+							tag += '					<span>NEW</span>\n';
+							tag += '				</div>\n';
+						}
+						tag += '				<img src="' + _uploadImageUrl + item.mainImg + '" alt="">\n';
+						tag += '			</div>\n';
+						tag += '			<div class="txt">\n';
+						tag += '				<p class="tit">'+item.planNm+'</p>\n';
+						tag += '				<div class="date">\n';
+						tag += '					<span>'+item.dispStdt+'</span> - <span>'+item.dispEddt+'</span>\n';
+						tag += '				</div>\n';
+						tag += '			</div>\n';
+						tag += '        </a>\n';
+						tag += '	</li>\n';
+					});
+					
+					tag += '</ul>\n';
+					
+					
+					$('#divEventList').html(tag);
+					
+					$('#divEventNoData').hide();
+					$('#divEventList').show();
+				} else {
+					$('#eventTotCnt').html('<span>0</span>개의 이벤트');
+					$('#divEventNoData').show();
+					$('#divEventList').hide();
+				}
+			}
+		});
+}
+
+$(document).ready(function() {
+	fnGetEventList();
+});
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

+ 6 - 6
src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html

@@ -1,12 +1,12 @@
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org">
 <!-- 옵션변경 팝업 -->
-<div id="cartOptionModal" class="modal-dialog cartOptionModal" role="document">
+<div id="cartOptionModal" class="modal-dialog cartOptionModal" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="modal-content">
 		<div class="modal-header">
 			<h5 class="modal-title" id="optModifyLabel">옵션변경</h5>
 			<div class="prod_title">
-				<span class="name" th:text="${cart.goodsNm}">버카루 BUCKROO 남성 제기장 스웨이드 자켓</span>
+				<span class="name" th:text="${cart.goodsNm}"></span>
 			</div>
 		</div>
 		<div class="modal-body">
@@ -16,7 +16,7 @@
 						<th:block th:if="${setType.equals(cart.goodsType) or cart.selfGoodsYn.equals('N')}">
 							<li th:each="img, index : ${cart.cartImgList}">
 								<span class="thumb">
-									<img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" />
+									<img th:src="${cart.imgPath + '/' + img.sysImgNm} + '?RS=180'" src="/" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${img.sysImgNm}" alt="" />
 								</span>
 							</li>
 						</th:block>
@@ -26,7 +26,7 @@
 									<th:block th:if="${color.cartOptCd1 != null and color.cartOptCd1.equals(color.optCd1)}">
 										<li th:each="img, index : ${color.cartImgList}" th:if="${img.colorCd == color.cartOptCd1}">
 											<span class="thumb">
-												<img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" />
+												<img th:src="${cart.imgPath + '/' + img.sysImgNm} + '?RS=180'" src="/" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${img.sysImgNm}" alt="" />
 											</span>
 										</li>
 									</th:block>
@@ -108,7 +108,7 @@
 								<ul>
 									<li th:each="color, index : ${comp.cartColorList}" class="selfGoodsColor">
 										<a href="javascript:void(0);" th:cartDtlSq="${color.cartDtlSq}" th:classappend="${color.cartColorNm != null} ? 'on'" class="selfGoodsColorSelect" th:data="${color.optCd1}">
-											<img th:src="${cart.imgPath + '/' + color.sysImgNm}" src="#" th:alt="${color.colorNm}" alt="" />
+											<img th:src="${cart.imgPath + '/' + color.sysImgNm} + '?RS=70'" src="#" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" th:alt="${color.colorNm}" alt="" />
 										</a>
 									</li>
 								</ul>
@@ -274,7 +274,7 @@
 						let img = color[i].cartImgList[j];
 						if(optCd1 == img.colorCd) {
 							imgHtml += "<li>\n<span class='thumb'>\n";
-							imgHtml += "<img src='" + cart.imgPath + "/" + img.sysImgNm + "' alt='' />\n";
+							imgHtml += "<img src='" + cart.imgPath + "/" + img.sysImgNm + "' onerror='this.src='" + [[${@environment.getProperty('domain.uximage')}]] + "/images/pc/thumb/bg_item_none.png' alt='" + img.sysImgNm + "' />\n";
 							imgHtml += "</span>\n</li>\n";
 						}
 					}

+ 5 - 5
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -14,7 +14,7 @@
  *******************************************************************************
  -->
 <div id="cartAjaxArea">
-	<form id="cartListForm" method="post" action="/order/noMember">
+	<form id="cartListForm" method="post" action="/order/noMember" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 		<!--<input type="hidden" name="cartCpnDcAmt" id="cartCpnDcAmt" th:value="${param.cartCpnDcAmt}" />-->
 
 		<!-- CONT-BODY -->
@@ -108,8 +108,8 @@
 											<div class="goods_box">
 												<div class="gd_item">
 													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
-														<span class="thumb">
-															<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt="">
+														<span class="thumb" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+															<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm} + '?RS=100'" src="/" width="100%" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${cart.sysImgNm}" alt="">
 														</span>
 														<p>
 															<span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
@@ -223,7 +223,7 @@
 											<div class="goods_box">
 												<div class="gd_item">
 													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
-														<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt=""></span>
+														<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm} + '?RS=100'" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" src="/" width="100%"  th:alt="${cart.sysImgNm}" alt=""></span>
 														<p><span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span></p>
 														<p><span class="name" th:text="${cart.goodsNm}"></span></p>
 													</a>
@@ -343,7 +343,7 @@
 											<div class="goods_box">
 												<div class="gd_item">
 													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
-														<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt=""></span>
+														<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm} + '?RS=100'" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" src="/" width="100%"  th:alt="${cart.sysImgNm}" alt=""></span>
 														<p><span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span></p>
 														<p><span class="name" th:text="${cart.goodsNm}"></span></p>
 													</a>

+ 92 - 14
src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html

@@ -20,7 +20,10 @@
 		<div class="area">
 			<div class="logo">
 				<a href="#none">
-					<h1><img th:src="${@environment.getProperty('domain.image') + brandGroupInfo.logoFileNm}" src="/images/pc/thumb/br_tbj_logo.png" alt="TBJ nearby"/></h1>
+					<h1>
+						<!-- <img th:src="${@environment.getProperty('domain.image') + brandGroupInfo.logoFileNm}" src="/images/pc/thumb/br_tbj_logo.png" alt="TBJ nearby"/> -->
+						<p th:text="${brandGroupInfo.brandGroupNm}"></p>
+					</h1>
 				</a>
 			</div>
 			<div class="util_group">
@@ -35,10 +38,21 @@
 			<!-- nav -->
 			<div class="nav">
 				<ul class="bundle" id="ulGnbTab">
-					<li><a href="#">상품</a></li>
-					<li><a href="#">룩북</a></li>
-					<li><a href="#">20S/S시즌오프</a></li>
-					<li><a href="#">이벤트</a></li>
+					<li class="home"><a href="javascript:void(0);" onclick="cfnGoToBrandMain([[${brandGroupInfo.brandGroupNo}]]);">브랜드 홈</a></li>
+					<li class="has_depth"><!-- depth_menu 있을 시 has_depth 클래스 추가 -->
+						<a href="#">상품</a>
+						<!-- 상품 depth -->
+						<div class="depth_menu category">
+							<div class="head_category">
+								<div class="menu">
+									<ul class="maintabs" id="ulGnbCate">
+									</ul>
+								</div>
+							</div>
+							<div class="head_banner" id="divGnbBrandBanner">
+							</div>
+						</div>
+					</li>
 				</ul>
 			</div>
 			<!-- // nav -->
@@ -59,21 +73,57 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	// GNB탭 > 카테고리
+	let fnGetGnbCategory = function(cate1) {
+		let tag = '';
+		if (cate1 != null) {
+			tag += '<li>\n';
+			tag += '	<a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate1.cateGb + '\',' + cate1.cate1No + ');">' + cate1.cate1Nm + '</a>\n';
+			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+				tag += '	<ul class="box_depth2">\n';
+				$.each(cate1.cate2List, function(idx2, cate2) {
+					tag += '		<li>\n';
+					tag += '			<a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+						tag += '			<ul class="box_depth3">\n';
+						$.each(cate2.cate3List, function(idx3, cate3) {
+							tag += '				<li>\n';
+							tag += '					<a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
+							if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+								tag += '					<ul class="box_depth3">\n';
+								$.each(cate3.cate4List, function(idx4, cate4) {
+									tag += '						<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
+								});
+								tag += '					</ul>\n';
+							}
+							tag += '				</li>\n';
+						});
+						tag += '			</ul>\n';
+					}
+					tag += '		</li>\n';
+				});
+				tag += '	</ul>\n';
+			}
+			tag += '</li>\n';
+		}
+		return tag;
+	}
+	
 	// GNB탭 생성
 	let fnCreateGnbTab = function() {
-		$.getJSON('/display/brand/gnb/tab/list/' + [[${brandGroupInfo.brandGroupNo}]]
+		$('#ulGnbCate').html('');
+		let allCate = [[${allCateList}]];
+		$.each(allCate, function(allCateIdx, allCateItem) {
+			let gnbCate = fnGetGnbCategory(allCateItem);
+			$('#ulGnbCate').append(gnbCate);
+		});
+		
+		$.getJSON('/display/brand/gnb/tab/list?brandGroupNo=' + [[${brandGroupInfo.brandGroupNo}]]
 			, function(result, status) {
 				if (status == 'success') {
 					if (result.length > 0) {
-						$('#ulGnbTab').html('');
 						$.each(result, function(idx, item) {
-							/* if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
-								$.each(allCate, function(allCateIdx, allCateItem) {
-									if (item.cate1No == allCateItem.cate1No) {
-										$('#ulGnbTab').append(gnbCate);
-									}
-								});
-							} else  */if (item.contentsType == 'L') { // 컨텐츠유형:링크
+							if (item.contentsType == 'L') { // 컨텐츠유형:링크
 								$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
 							}
 						});
@@ -86,6 +136,34 @@
 		//검색창 호출
 		$(".common_search").load("sch_layer_pop.html");
 
+		// GNB toggle
+		$(document).on('mouseenter','.common_header.br_header .gnb .nav > ul > li',function(e){
+			$(this).parents('.nav').find('.bundle > li > a').removeClass('active');
+			$(this).children('a').addClass('active');
+			if(!$(this).hasClass('has_depth')){
+				$('.black_screen').hide();
+				$('.common_header.br_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+			} else if($(this).hasClass('has_depth')){
+				$('.black_screen').show();
+				$(this).find('.depth_menu').show();
+				$(this).parents('ul').siblings('ul').find('li.has_depth .depth_menu').hide();
+				$(this).siblings('li.has_depth').find('.depth_menu').hide();
+			}
+		}).on('mouseleave','.common_header.br_header .gnb',function(e){
+			$(this).find('.bundle > li > a').removeClass('active');
+			$('.black_screen').hide();
+			$('.common_header.br_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+		});
+
+		// GNB 하위메뉴
+		$(document).on('mouseenter','.common_header.br_header .maintabs li',function(e){
+			if($(this).find('> ul').length > 0){
+				$(this).addClass('on');
+			}
+			$(this).find('> ul').show();
+			$(this).siblings('li').find('> ul').hide();
+		});
+		
 		// GNB탭 생성
 		fnCreateGnbTab();
 	});

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

@@ -893,9 +893,9 @@
 			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 				tag += '	<ul class="quick_depth">\n';
 				tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');"><span>메인</span></a>\n';
-				tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');"><span>전체</span></a>\n';
+				tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\',' + cate1.cate1No + ');"><span>전체</span></a>\n';
 				$.each(cate1.cate2List, function(idx2, cate2) {
-					tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');"><span>' + cate2.cate2Nm + '</span></a>\n';
+					tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');"><span>' + cate2.cate2Nm + '</span></a>\n';
 				});
 				tag += '	</ul>\n';
 			}
@@ -1082,7 +1082,7 @@
 							}
 							quickShoppingBagHtml += "			<a href='javascript:fnGoToGoodsDetail(\"" + info.goodsCd + "\")' class='itemLink'>";
 							quickShoppingBagHtml += '				<div class="itemPic">';
-							quickShoppingBagHtml += '					<img alt="BLACK-a" class="vLHTC pd_img" src="' + order.imgPath1 + '/' + info.sysImgNm + '"/>';
+							quickShoppingBagHtml += '					<img alt="BLACK-a" class="vLHTC pd_img" src="' + order.imgPath1 + '/' + info.sysImgNm + '?RS=120"/>';
 							quickShoppingBagHtml += '				</div>';
 							quickShoppingBagHtml += '				<p class="itemBrand">' + info.brandEnm + ' ' + info.brandKnm + '</p>';
 							quickShoppingBagHtml += '				<div class="itemName">' + info.goodsNm + '</div>';
@@ -1123,7 +1123,7 @@
 					}
 
 					quickShoppingBagHtml += '</div>';
-					quickShoppingBagHtml += '<button type="button" class="btn btn_default purchase_btn" onclick="quickCartOrder()"><span>전체 상품 구매하기</span></button>';
+					quickShoppingBagHtml += '<button type="button" class="btn btn_default purchase_btn" onclick="cfnGoToPage(_PAGE_CART);"><span>쇼핑백 바로가기</span></button>';
 				} else {
 					if(!$("#quick_menu .shopingbag.quick_con.quick02 .quick_body").hasClass("nodata")) {
 						$("#quick_menu .shopingbag.quick_con.quick02 .quick_body").addClass("nodata");

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

@@ -19,12 +19,37 @@
 	<!-- head start -->
 	<div class="common_header">
 		<!-- 프로모션 띠 배너 등록 시 노출 -->
-		<div class="hd_top_banner" style="background-color:#fd4801;display:none;">
-			<a href="" class="t_bnr">
-				<span style="margin:0 auto;height:60px;line-height:60px;font-size: 20px;font-weight: 600;letter-spacing: -.025em; color:#fff;">APP 수신동의 하면 1만 포인트 증정!</span>
-				<!--<img src="ABC.jpg" alt="프로모션"/>-->
-			</a>
-		</div>
+<!-- 		<div class="hd_top_banner"> -->
+<!-- 			<div class="bnrtype_open" style="background-color:#496ac9;"> -->
+<!-- 				<a href="" target=""> -->
+<!-- 					<img src="/images/pc/thumb/tmp_top_banner2.jpg" alt="">	 -->
+<!-- 					<div class="open_bnr_area"> -->
+<!-- 						<img src="/images/pc/thumb/tmp_top_banner2_open.jpg" alt=""/> -->
+<!-- 					</div> -->
+<!-- 				</a> -->
+<!-- 				<button class="btn_toggle_bnr"><span>열기</span></button> -->
+<!-- 			</div> -->
+<!-- 			<div class="bnrtype_img" style="background-color:#57799d;"> -->
+<!-- 				<a href="" target=""> -->
+<!-- 					<img src="/images/pc/thumb/tmp_top_banner1.jpg" alt=""/> -->
+<!-- 				</a> -->
+<!-- 			</div> -->
+<!-- 			<div class="bnrtype_text" style="background-color:#fd4801;"> -->
+<!-- 				<a href="" target=""> -->
+<!-- 					<div style="color:#fff; font-size:20px; font-weight:300;"> -->
+<!-- 						<span style="font-weight:500">APP</span> 수신동의 하면 <span style="font-weight:500">1</span>만 포인트 증정! -->
+<!-- 					</div> -->
+<!-- 				</a> -->
+<!-- 			</div> -->
+<!-- 			<div class="close_bnr_area"> -->
+<!-- 				<form class="form_wrap"> -->
+<!-- 					<div class="form_field"> -->
+<!-- 						<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label> -->
+<!-- 					</div> -->
+<!-- 				</form> -->
+<!-- 				<button id="btn_close_bnr" class="btn_close"><span>닫기</span></button> -->
+<!-- 			</div> -->
+<!-- 		</div> -->
 		<!-- //프로모션 띠 배너 등록 시 노출 -->
 
 		<div class="area">
@@ -82,322 +107,712 @@
 
 			<!-- search -->
 			<div class="search">
+				<!-- 프로모션 문구 노출 검색용-->
 				<div class="area">
-					<form id="searchMainForm" name="searchMainForm">
-						<fieldset>
-							<legend>통합검색</legend>
-							<input type="text" id="search" name="search" value="" placeholder="모이몰론, 남들보다 빠르게! 신상 check" class="search_input" title="검색어 입력" maxlength="100">
-							<div class="search_group" id="ark" style="display: none;">
-								<div id="ark_down" style="position: absolute; display: block; cursor: pointer; top: 3px; left: 366px;"></div>
-								<div id="ark_up" style="position: absolute; display: none; cursor: pointer; top: 3px; left: 366px;"></div>
-								<div class="area">
-									<p class="blind">연관검색</p>
-									<div class="search_list">
-										<div id="ark_content_list" style="width: 410px;"></div>
-										<div id="ark_category_list" class="category"></div>
-										<div id="ark_event_list" class="exhibition"></div>
-										<div id="ark_powerdeal_list"></div>
+					<p class="promotion_search">모이몰론, 남들보다 빠르게! 신상 check</p>
+					<button type="button" class="btn_sch_promotion" id="btnGnbSearch"><i class="ico ico_search"><em>프로모션 검색 바로가기</em></i></button>
+				</div>
+				<!-- //프로모션 문구 노출 검색용-->
+				<!-- 통합검색 -->
+				<button type="button" class="btn_open_search"><i class="ico ico_search"><em>통합검색</em></i></button>
+				<a href="#" class="btn_ico btn_cart" title="장바구니 바로가기"><i class="ico ico_bag"></i><span class="circle_count">99+</span></a>
+				<!-- //통합검색 -->
+			</div>
+			<!-- //search -->
+		</div>
+		<div class="black_screen"></div>
+	</div>
+	
+	<!-- 검색 레이어 -->
+	<div class="common_search">
+		<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="검색어를 입력하세요." 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">
+							<ul>
+								<li>
+									<a href="">슬랙스</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">다운점퍼</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">특가세일</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">모이몰른 티셔츠</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">TBJ 패딩</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">트레이닝 팬츠</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">슬랙스</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">다운점퍼</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">특가세일</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+								<li>
+									<a href="">모이몰른 티셔츠</a>
+									<button type="button" class="btn_delete"><span>삭제</span></button>
+								</li>
+							</ul>
+						</div>
+						<button type="button" class="btn_underline"><span>전체삭제</span></button>
+						<!-- //최근검색어 있을 시 노출 -->
+						<!-- 최근검색어 없을 시 노출 -->
+						<div class="empty_txt">
+							최근 검색어가 없습니다.
+						</div>
+						<!-- //최근검색어 없을 시 노출 -->
+					</div>
+					<div class="popular_blk">
+						<h3>STYLE24에서 검색되고 있어요</h3>
+						<div class="list_popular_keword">
+							<ul>
+								<li>
+									<a href="">BUCKAROO</a>
+								</li>
+								<li>
+									<a href="">기모청바지</a>
+								</li>
+								<li>
+									<a href="">컨버스 주니어</a>
+								</li>
+								<li>
+									<a href="">겨울 팬츠</a>
+								</li>
+								<li>
+									<a href="">모이몰른</a>
+								</li>
+								<li>
+									<a href="">BUCKAROO</a>
+								</li>
+								<li>
+									<a href="">기모청바지</a>
+								</li>
+								<li>
+									<a href="">컨버스 주니어</a>
+								</li>
+								<li>
+									<a href="">겨울 팬츠</a>
+								</li>
+								<li>
+									<a href="">모이몰른</a>
+								</li>
+							</ul>
+						</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 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 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 class="itemName">남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩</div>
+											<div class="viewCount"><span>508</span>명 보는중</div>
+										</a>
 									</div>
-									<div class="close">
-										<a href="#" class="search_close">닫기<i class="ico ico_search_close_gray"><em>닫기</em></i></a>
+								</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 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 class="itemName">남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩 남성 로고 자카드 방풍 패딩</div>
+											<div class="viewCount"><span>508</span>명 보는중</div>
+										</a>
 									</div>
 								</div>
 							</div>
-							<!-- 검색어 입력전 -->
-							<div id="mykeyword" class="my_search_group sch_auto" style="display: none;">
-								<p class="blind">인기 검색어 &amp; 최근 검색어</p>
-								<div class="area">
-									<div class="hot_search_list" id="popkeyword">
-										<p>인기 검색어</p>
-										<ul>
-											<li>
-												<a href="#"><span>1</span>나이키</a>
-											</li>
-											<li>
-												<a href="#"><span>2</span>tamiya</a>
-											</li>
-											<li>
-												<a href="#"><span>3</span>니콘 z6</a>
-											</li>
-											<li>
-												<a href="#"><span>4</span>갤럭시 자켓</a>
-											</li>
-											<li>
-												<a href="#"><span>5</span>아동운동화</a>
-											</li>
-											<li>
-												<a href="#"><span>6</span>타미야</a>
-											</li>
-											<li>
-												<a href="#"><span>7</span>널디</a>
-											</li>
-											<li>
-												<a href="#"><span>8</span>호박목걸이</a>
-											</li>
-											<li>
-												<a href="#"><span>9</span>제시뉴욕</a>
-											</li>
-											<li>
-												<a href="#"><span>10</span>뉴에라</a>
-											</li>
-										</ul>
+						</div>
+					</div>
+				</div>
+				<!-- //검색결과 입력 전 -->
+				<!-- 검색결과 입력 후 -->
+				<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>
+									</a>
+								</li>
+								<li>
+									<span class="category_txt">카테고리</span>
+									<a href="">
+										<span>남성</span>
+										<span>니트/<em>가</em>디건/베스트</span>
+										<span>가디건</span>
+										<span>롱가디건</span>
+									</a>
+								</li>
+							</ul>
+						</div>
+						<!-- //검색어 매칭 카테고리 있을 시 노출  -->
+					</div>
+					<div class="pd_list relate">
+						<h3>관련상품</h3>
+						<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_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 class="my_search_list" id="searchkeyword">
-										<p>최근 검색어</p>
-										<button type="button" onclick="removeMyKeyword();">최근 검색어 전체삭제<i class="ico ico_mysearch_delete"></i></button>
+								</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="close">
-									<a href="#" class="search_close">닫기<i class="ico ico_search_close_gray"><em>닫기</em></i></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_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>
-							<!-- // 검색어 입력전 -->
-							<button type="button" class="close"><i class="ico ico_search_close"><em>닫기</em></i></button>
-							<button type="button" class="sch_btn" onclick="goSearch();"><i class="ico ico_search"><em>검색</em></i></button>
-						</fieldset>
-					</form>
+						</div>
+					</div>
 				</div>
-
-				<a href="#" class="btn_ico btn_cart" title="장바구니 바로가기"><i class="ico ico_bag"></i><span class="circle_count"></span></a>
-
+				<!-- //검색결과 입력 후 -->
+				<!-- 검색결과 없을때 노출 -->
+				<div class="empty_box" style="display:none;">
+					<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>
-			<!-- // search -->
 		</div>
+		<button type="button" class="btn_close_search"><span>닫기</span></button>
 	</div>
-	<!-- head end -->
+	<!-- //검색 레이어 -->
 
-	<script th:inline="javascript">
-		/*<![CDATA[*/
-		// 전체카테고리 조회
-// 		let allCate;
-// 		let fnGetAllCategory = function() {
-// 			$.getJSON('/display/all/cate/list'
-// 				, function(result, status) {
-// 					if (status == 'success') {
-// 						allCate = result;
-						
-// 						// GNB탭 > 브랜드 생성
-// 						fnCreateGnbBrandGroup();
-// 					}
-// 			});
-// 		}
-		
-		// GNB탭 > 카테고리
-		let fnGetGnbCategory = function(cate1) {
-			let tag = '';
-			if (cate1 != null) {
-				tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
-				tag += '	<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');">' + cate1.cate1Nm + '</a>\n';
-				tag += '	<div class="depth_menu category">\n';
-				tag += '		<div class="head_category">\n';
-				tag += '			<div class="tit">\n';
-				tag += '				<p>' + cate1.cate1Nm + '</p>\n';
-				tag += '				<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');" class="more">전체보기</a>\n';
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// 전체카테고리 조회
+// 	let allCate;
+// 	let fnGetAllCategory = function() {
+// 		$.getJSON('/display/all/cate/list'
+// 			, function(result, status) {
+// 				if (status == 'success') {
+// 					allCate = result;
+					
+// 					// GNB탭 > 브랜드 생성
+// 					fnCreateGnbBrandGroup();
+// 				}
+// 		});
+// 	}
+	
+	// GNB탭 > 카테고리
+	let fnGetGnbCategory = function(cate1) {
+		let tag = '';
+		if (cate1 != null) {
+			tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
+			tag += '	<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');">' + cate1.cate1Nm + '</a>\n';
+			tag += '	<div class="depth_menu category">\n';
+			tag += '		<div class="head_category">\n';
+			tag += '			<div class="tit">\n';
+			tag += '				<p>' + cate1.cate1Nm + '</p>\n';
+			tag += '				<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\',' + cate1.cate1No + ');" class="more">전체보기</a>\n';
+			tag += '			</div>\n';
+			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+				tag += '			<div class="menu">\n';
+				tag += '				<ul class="maintabs">\n';
+				$.each(cate1.cate2List, function(idx2, cate2) {
+					tag += '					<li>\n';
+					tag += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+						tag += '						<ul class="box_depth2">\n';
+						$.each(cate2.cate3List, function(idx3, cate3) {
+							tag += '							<li>\n';
+							tag += '								<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
+							if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+								tag += '								<ul class="box_depth3">\n';
+								$.each(cate3.cate4List, function(idx4, cate4) {
+									tag += '									<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
+								});
+								tag += '								</ul>\n';
+							}
+							tag += '							</li>\n';
+						});
+						tag += '						</ul>\n';
+					}
+					tag += '					</li>\n';
+				});
+				tag += '				</ul>\n';
 				tag += '			</div>\n';
-				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
-					tag += '			<div class="menu">\n';
-					tag += '				<ul class="maintabs">\n';
-					$.each(cate1.cate2List, function(idx2, cate2) {
-						tag += '					<li>\n';
-						tag += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
-						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
-							tag += '						<ul class="box_depth2">\n';
-							$.each(cate2.cate3List, function(idx3, cate3) {
-								tag += '							<li>\n';
-								tag += '								<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
-								if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
-									tag += '								<ul class="box_depth3">\n';
-									$.each(cate3.cate4List, function(idx4, cate4) {
-										tag += '									<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
-									});
-									tag += '								</ul>\n';
-								}
-								tag += '							</li>\n';
-							});
-							tag += '						</ul>\n';
-						}
-						tag += '					</li>\n';
-					});
-					tag += '				</ul>\n';
-					tag += '			</div>\n';
-					tag += '		</div>\n';
-					tag += '	</div>\n';
-				}
-
-				// if (cate1.bannerList.length > 0) {
-				// 	tag += '	<div class="head_banner">\n';
-				// 	tag += '		<div class="tit">\n';
-				// 	tag += '			<p>가을의 신상 만나기</p>\n';
-				// 	tag += '		</div>\n';
-				// 	tag += '		<div class="list">\n';
-				// 	tag += '			<ul class="clear event_con">\n';
-				// 	tag += '				<li>\n';
-				// 	tag += '					<a href="">\n';
-				// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션"></div>\n';
-				// 	tag += '						<div class="txt">\n';
-				// 	tag += '							<p class="tit">2020 FALL COLLECTION 가을에는 이 컬러 2020 FALL COLLECTION 가을에는 이 컬러</p>\n';
-				// 	tag += '						</div>\n';
-				// 	tag += '					</a>\n';
-				// 	tag += '				</li>\n';
-				// 	tag += '				<li>\n';
-				// 	tag += '					<a href="">\n';
-				// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP"></div>\n';
-				// 	tag += '						<div class="txt">\n';
-				// 	tag += '							<p class="tit">FALL NEW ARRIVAL</p>\n';
-				// 	tag += '						</div>\n';
-				// 	tag += '					</a>\n';
-				// 	tag += '				</li>\n';
-				// 	tag += '			</ul>\n';
-				// 	tag += '		</div>\n';
-				// 	tag += '	</div>\n';
-				// }
-				tag += '</li>\n';
+				tag += '		</div>\n';
+				tag += '	</div>\n';
 			}
-			return tag;
-		}
 
-		// GNB탭 생성
-		let fnCreateGnbTab = function() {
-			$.getJSON('/display/gnb/tab/list'
-				, function(result, status) {
-					if (status == 'success') {
-						if (result.length > 0) {
-							$('#divGnbTab').html('');
-							$('#ulGnbTab').html('');
-							
-							let allCate = [[${allCateList}]];
-							$.each(result, function(idx, item) {
-								if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
-									$.each(allCate, function(allCateIdx, allCateItem) {
-										if (item.cate1No == allCateItem.cate1No) {
-											let gnbCate = fnGetGnbCategory(allCateItem);
-											$('#divGnbTab').append(gnbCate);
-											$('#ulGnbTab').append(gnbCate);
-										}
-									});
-								} else if (item.contentsType == 'L') { // 컨텐츠유형:링크
-									$('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
-									$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
-								}
-							});
-						}
-					}
-				});
+			// if (cate1.bannerList.length > 0) {
+			// 	tag += '	<div class="head_banner">\n';
+			// 	tag += '		<div class="tit">\n';
+			// 	tag += '			<p>가을의 신상 만나기</p>\n';
+			// 	tag += '		</div>\n';
+			// 	tag += '		<div class="list">\n';
+			// 	tag += '			<ul class="clear event_con">\n';
+			// 	tag += '				<li>\n';
+			// 	tag += '					<a href="">\n';
+			// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션"></div>\n';
+			// 	tag += '						<div class="txt">\n';
+			// 	tag += '							<p class="tit">2020 FALL COLLECTION 가을에는 이 컬러 2020 FALL COLLECTION 가을에는 이 컬러</p>\n';
+			// 	tag += '						</div>\n';
+			// 	tag += '					</a>\n';
+			// 	tag += '				</li>\n';
+			// 	tag += '				<li>\n';
+			// 	tag += '					<a href="">\n';
+			// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP"></div>\n';
+			// 	tag += '						<div class="txt">\n';
+			// 	tag += '							<p class="tit">FALL NEW ARRIVAL</p>\n';
+			// 	tag += '						</div>\n';
+			// 	tag += '					</a>\n';
+			// 	tag += '				</li>\n';
+			// 	tag += '			</ul>\n';
+			// 	tag += '		</div>\n';
+			// 	tag += '	</div>\n';
+			// }
+			tag += '</li>\n';
 		}
+		return tag;
+	}
 
-		// GNB탭 > 브랜드 생성
-		let fnCreateGnbBrandGroup = function() {
-			$.getJSON('/display/gnb/brand/group/list'
-				, function(result, status) {
-					if (status == 'success') {
-						if (result.length > 0) {
-							$('#divGnbBrandGrp').html('');
-							let tag = '';
-							let prevTitle = '';
-							$.each(result, function (idx, item) {
-								if (prevTitle != item.title) {
-									if (idx > 0) {
-										tag += '		</ul>\n';
-										tag += '	</div>\n';
-										tag += '</div>\n';
+	// GNB탭 생성
+	let fnCreateGnbTab = function() {
+		$.getJSON('/display/gnb/tab/list'
+			, function(result, status) {
+				if (status == 'success') {
+					if (result.length > 0) {
+						$('#divGnbTab').html('');
+						$('#ulGnbTab').html('');
+						
+						let allCate = [[${allCateList}]];
+						$.each(result, function(idx, item) {
+							if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
+								$.each(allCate, function(allCateIdx, allCateItem) {
+									if (item.cate1No == allCateItem.cate1No) {
+										let gnbCate = fnGetGnbCategory(allCateItem);
+										$('#divGnbTab').append(gnbCate);
+										$('#ulGnbTab').append(gnbCate);
 									}
-									tag += '<div class="row">\n';
-									tag += '	<p>' + item.title + '</p>\n';
-									tag += '	<div class="brand_list swiper-container">\n';
-									tag += '		<ul class="clear swiper-wrapper">\n';
-								} else {
-									tag += '			<li class="swiper-slide">\n';
-									tag += '				<a href="javascript:void(0);" onclick="cfnGoToBrandMain(' + item.brandGroupNo + ');">\n';
-									tag += '					<img src="' + _uploadDefaultUrl + item.logoFileNm + '" alt=""/>\n';
-									tag += '					<span><em>' + item.brandGroupNm + '</em></span>\n';
-									tag += '				</a>\n';
-									tag += '			</li>\n';
-								}
-								prevTitle = item.title;
-							});
-							tag += '		</ul>\n';
-							tag += '	</div>\n';
-							tag += '</div>\n';
-							$('#divGnbBrandGrp').html(tag);
-						}
-						fnCreateGnbTab();
+								});
+							} else if (item.contentsType == 'L') { // 컨텐츠유형:링크
+								$('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
+								$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
+							}
+						});
 					}
-			});
-		}
-
-		$(document).ready(function() {
-			//검색창 호출
-			$(".common_search").load("sch_layer_pop.html");
-
-			// GNB toggle
-			$(document).on('mouseenter','.common_header .gnb .nav > ul > li',function(e){
-				if(!$(this).hasClass('has_depth')){
-					$('.black_screen').hide();
-					$('.common_header .gnb .depth_menu').hide();
-				} else if($(this).hasClass('has_depth')){
-					$('.black_screen').show();
-					$(this).find('.depth_menu').show();
-					$(this).parents('ul').siblings('ul').find('li.has_depth .depth_menu').hide();
-					$(this).siblings('li.has_depth').find('.depth_menu').hide();
 				}
-			}).on('mouseleave','.common_header .gnb',function(e){
-				$('.black_screen').hide();
-				$('.common_header .gnb .depth_menu').hide();
 			});
+	}
 
-			// GNB 하위메뉴
-			$(document).on('mouseenter','.common_header .maintabs li',function(e){
-				if($(this).find('> ul').length > 0){
-					$(this).addClass('on');
+	// GNB탭 > 브랜드 생성
+	let fnCreateGnbBrandGroup = function() {
+		$.getJSON('/display/gnb/brand/group/list'
+			, function(result, status) {
+				if (status == 'success') {
+					if (result.length > 0) {
+						$('#divGnbBrandGrp').html('');
+						let tag = '';
+						let prevTitle = '';
+						$.each(result, function (idx, item) {
+							if (prevTitle != item.title) {
+								if (idx > 0) {
+									tag += '		</ul>\n';
+									tag += '	</div>\n';
+									tag += '</div>\n';
+								}
+								tag += '<div class="row">\n';
+								tag += '	<p>' + item.title + '</p>\n';
+								tag += '	<div class="brand_list swiper-container">\n';
+								tag += '		<ul class="clear swiper-wrapper">\n';
+							} else {
+								tag += '			<li class="swiper-slide">\n';
+								tag += '				<a href="javascript:void(0);" onclick="cfnGoToBrandMain(' + item.brandGroupNo + ');">\n';
+								tag += '					<img src="' + _uploadDefaultUrl + item.logoFileNm + '" alt=""/>\n';
+								tag += '					<span><em>' + item.brandGroupNm + '</em></span>\n';
+								tag += '				</a>\n';
+								tag += '			</li>\n';
+							}
+							prevTitle = item.title;
+						});
+						tag += '		</ul>\n';
+						tag += '	</div>\n';
+						tag += '</div>\n';
+						$('#divGnbBrandGrp').html(tag);
+					}
+					fnCreateGnbTab();
 				}
-				$(this).find('> ul').show();
-				$(this).siblings('li').find('> ul').hide();
-			});
+		});
+	}
 
-			// GNB 더보기
-			$(document).on('click','.more_category .btn_more_cate',function(e){
-				$(this).parent('.more_category').toggleClass('on');
-				$(this).parent('.more_category').find('.cate_list').toggle();
-				return false;
-			});
+	$('#btnGnbSearch').on('click', function() {
+		//검색창 호출
+		$(".common_search").addClass('active');
+	});
+	
+	$(document).ready(function() {
+		//TOP BANNER close
+		$(document).on('click','#btn_close_bnr',function(e){
+			$('body').removeClass('lock');
+			$('.bnrtype_open').removeClass('fixed');
+			$('.hd_top_banner').remove();
+		});
+		
+		//TOP BANNER OPEN TYPE		
+		$(document).on('click','.bnrtype_open .btn_toggle_bnr',function(e){
+			$('body').toggleClass('lock');
+			$('.bnrtype_open').toggleClass('fixed');
+			$(this).text($(this).text() == '열기' ? '닫기' : '열기');
+		});
+		
+		// GNB toggle
+		$(document).on('mouseenter','.common_header .gnb .nav > ul > li',function(e){
+			$(this).parents('.nav').find('.bundle > li > a').removeClass('active');
+			$(this).children('a').addClass('active');
+			if(!$(this).hasClass('has_depth')){
+				$('.black_screen').hide();
+				$('.common_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+			} else if($(this).hasClass('has_depth')){
+				$('.black_screen').show();
+				$(this).find('.depth_menu').show();
+				$(this).parents('ul').siblings('ul').find('li.has_depth .depth_menu').hide();
+				$(this).siblings('li.has_depth').find('.depth_menu').hide();
+			}
+		}).on('mouseleave','.common_header .gnb',function(e){
+			$(this).find('.bundle > li > a').removeClass('active');
+			$('.black_screen').hide();
+			$('.common_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+		});
 
-			// GNB - 슬라이드 > 브랜드_GNB
-			var brand_gnb_slide = new Swiper('#header .gnb .brand_list', {
-				observer: true,
-				observeParents: true,
-				centeredSlides: false,
-				slidesPerView: 'auto',
-				freeMode:true,
-			});
+		// GNB 하위메뉴
+		$(document).on('mouseenter','.common_header .maintabs li',function(e){
+			if($(this).find('> ul').length > 0){
+				$(this).addClass('on');
+			}
+			$(this).find('> ul').show();
+			$(this).siblings('li').find('> ul').hide();
+		});
 
-			//통합검색 - 슬라이드 > 지금 고객님들이 많이 보고 있어요
-			var realtimeItemSwiper = new Swiper('.common_search .realtime_slider .swiper-container', {
-				observer: true,
-				observeParents: true,
-				slidesPerView: 5,
-				spaceBetween: 20,
-				autoplay: {
-					delay: 2500,
-					disableOnInteraction:false,
-				},
-				navigation: {
-					nextEl: '.common_search .realtime_slider .swiper-button-next',
-					prevEl: '.common_search .realtime_slider .swiper-button-prev',
-				},
-				pagination: {
-					el: '.common_search .realtime_slider .swiper-pagination',
-					clickable: true,
-				},
-			});
+		// GNB 하위메뉴
+		$(document).on('mouseenter','.common_header .maintabs li',function(e){
+			if($(this).find('> ul').length > 0){
+				$(this).addClass('on');
+			}
+			$(this).find('> ul').show();
+			$(this).siblings('li').find('> ul').hide();
+		});
+		
+		// GNB 더보기
+		$(document).on('click','.more_category .btn_more_cate',function(e){
+			$(this).parent('.more_category').toggleClass('on');
+			$(this).parent('.more_category').find('.cate_list').toggle();
+			return false;
+		});
 
-// 			// 전체 카테고리 조회
-// 			fnGetAllCategory();
-			
-			// GNB탭 > 브랜드 생성
-			fnCreateGnbBrandGroup();
+		// GNB - 슬라이드 > 브랜드_GNB
+		var brand_gnb_slide = new Swiper('#header .gnb .brand_list', {
+			observer: true,
+			observeParents: true,
+			centeredSlides: false,
+			slidesPerView: 'auto',
+			freeMode:true,
 		});
-		/*]]>*/
-	</script>
+
+		//통합검색 - 슬라이드 > 지금 고객님들이 많이 보고 있어요
+		var realtimeItemSwiper = new Swiper('.common_search .realtime_slider .swiper-container', {
+			observer: true,
+			observeParents: true,
+			slidesPerView: 5,
+			spaceBetween: 20,
+			autoplay: {
+				delay: 2500,
+				disableOnInteraction:false,
+			},
+			navigation: {
+				nextEl: '.common_search .realtime_slider .swiper-button-next',
+				prevEl: '.common_search .realtime_slider .swiper-button-prev',
+			},
+			pagination: {
+				el: '.common_search .realtime_slider .swiper-pagination',
+				clickable: true,
+			},
+		});
+
+// 		// 전체 카테고리 조회
+// 		fnGetAllCategory();
+		
+		// GNB탭 > 브랜드 생성
+		fnCreateGnbBrandGroup();
+	});
+/*]]>*/
+</script>
 
 </header>
 

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

@@ -65,8 +65,8 @@
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
 	<script src="/ux/pc/js/jquery.modal.min.js"></script>
+	<script src="/ux/pc/js/slick.min.js"></script>
 	<script src="/ux/pc/js/jquery-ui.js"></script>
-<!-- 	<script src="/ux/pc/js/jquery.ui.datepicker.monthyearpicker.js"></script> -->
 	<script src="/ux/plugins/jquery.serializeObject.min.js"></script>
 	<script src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>
 	
@@ -82,23 +82,28 @@
 // 		gtag('config', 'UA-168660512-1');
 	</script>
 	
-	<th:block th:if="${sessioninfo != null}">
+	<th:block th:if="${sessionInfo != null}">
 		<script th:inline="javascript">
 		/*<![CDATA[*/
 			var gCustId = [[${sessionInfo.custId}]];
-			var gEmail = [[${sessionInfo.Email}]];
+			var gEmail = [[${sessionInfo.email}]];
+			var gGender = [[${sessionInfo.sexGb}]];
+			var gBirthYmd = [[${sessionInfo.birthYmd}]];
 			/*]]>*/
 		</script>
 	</th:block>
-	<th:block th:if="${sessioninfo == null}">
+	<th:block th:if="${sessionInfo == null}">
 		<script th:inline="javascript">
 		/*<![CDATA[*/
 			var gCustId = '';
 			var gEmail = '';
+			var gGender = '';
+			var gBirthYmd = '';
 			/*]]>*/
 		</script>
 	</th:block>
-	
+
+	<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.validation.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.validation.js"></script>
 	<script src="/ux/sha512.min.js"></script>
 	<script>
 		String.prototype.hashCode = function() {
@@ -125,6 +130,48 @@
 			x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);
 		})();
 		/* \\Eiengine Script (Visit) */
+
+		// 로그인 성공 시 - 시작
+
+		// 나이대 구하기 31 -> 30
+		var fnGetAge = function (birthYmd) {
+			let age = '';
+			if (!gagajf.isNull(birthYmd) && birthYmd.length > 7) {
+				let year = Number(new Date().getFullYear());
+				let curretAge = year - Number(birthYmd.substr(0, 4));
+				age = String(curretAge).substr(0 , 1) + '0';
+			}
+			return age;
+		}
+		// 성별 공통코드 값 M-> A, F-> B
+		var fnGetGender = function (gGender) {
+			let gender = '';
+			if (!gagajf.isNull(gGender)) {
+				gender = gGender.substr(5,6) === 'M' ? 'A' : 'B';
+			}
+			return gender;
+		}
+
+		let loginSuccessYn = gagajf.getCookie('st24ck_login_success');
+		if (loginSuccessYn === 'Y') {
+			gagajf.setCookie('st24ck_login_success', '', 0);
+			let age = fnGetAge(gBirthYmd);
+			let gender = fnGetGender(gGender);
+			window._eglqueue = window._eglqueue || [];
+			_eglqueue.push(['setVar','cuid', eglqueueCuid]);
+			_eglqueue.push(['setVar','userId', hCustId]);
+			_eglqueue.push(['setVar','gender', gender]);
+			_eglqueue.push(['setVar','age', age]);
+			_eglqueue.push(['track','user']);
+			(function (s, x) {
+				s = document.createElement('script'); s.type = 'text/javascript';
+				s.async = true; s.defer = true; s.src = (('https:' == document.location.protocol) ? 'https' : 'http') + '://logger.eigene.io/js/logger.min.js';
+				x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);
+			})();
+		}
+		
+
+		// 로그인 성공 시 - 끝
 	</script>
 </head>
 

+ 1 - 9
src/main/webapp/WEB-INF/views/web/customer/IdFindFormWeb.html

@@ -312,15 +312,7 @@
 		};
 
 		$(document).ready( function() {
-			$(document).on('click','.mb .registration_tap > .form_group > .form_field > div',function(e){
-				// form 데이터 리셋
-				$('#searchCustInfo')[0].reset();
-
-				$(this).find('input').prop('checked', true);
-				$(this).parents('.form_group').find('.regist_box').removeClass('on');
-				$(this).parents('.form_group').find('.regist_box').eq($(this).index()).addClass('on');
-				return false;
-			});
+			$('#searchCustInfo')[0].reset();
 		});
 
 /*]]>*/

+ 8 - 1
src/main/webapp/WEB-INF/views/web/customer/JoinCompleteFormWeb.html

@@ -58,7 +58,14 @@
 				<h4>신규회원 혜택안내</h4>
 			</div>
 			<div class="cont_body">
-				신규회원 혜택안내 내용
+				<img src="/images/pc/img_mb_join_done.jpg" alt="신규회원 혜택안내 내용">
+				<div class="btn_group_block btn_group_md ui_row">
+					<div class="ui_col_12">
+						<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_MAIN);">
+							<span>쇼핑하러 가기</span>
+						</button>
+					</div>
+				</div>
 			</div>
 		</div>
 		<!--//신규가입인 경우-->

+ 32 - 8
src/main/webapp/WEB-INF/views/web/customer/PasswordFindFormWeb.html

@@ -138,8 +138,30 @@
 									</div>
 								</div>
 								<!-- //임시비밀번호 발급 -->
+								<div id="failCustId" class="find_result clear hide">
+									<div class="form_info">
+										<span class="ico_content_none"></span>
+										<p>입력한 정보와 일치하는 아이디가 존재하지 않습니다.</p>
+										<p class="t_info mt10">
+											정확한 확인을 위해 휴대폰 인증/아이핀 인증을 통한<br>아이디 찾기를 진행해 주세요.
+										</p>
+									</div>
+									<div class="btn_group_block btn_group_md ui_row">
+										<div class="ui_col_6">
+											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+												<span>회원가입</span>
+											</button>
+										</div>
+										<div class="ui_col_6">
+											<button type="button" class="btn btn_dark btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">
+												<span>다시 찾기</span>
+											</button>
+										</div>
+									</div>
+								</div>
+								<!-- //회원정보로 아이디찾기 실패일경우 -->
 								<!-- 비밀번호 찾기 결과안내 실패일경우 -->
-								<div id="failAuthentication" class="find_result clear" style="display: none;">
+								<div id="failAuthentication" class="find_result clear hide">
 									<div class="form_info">
 										<span class="ico_content_none"></span>
 										<p>입력한 정보와 일치하는 정보가 존재하지 않습니다.</p>
@@ -235,7 +257,13 @@
 		var fnGetDisplayFail = function (authMethod) {
 			$('.form_head').hide();
 			$('.registration_nav').hide();
-			$('#failAuthentication').show();
+			if (authMethod === 'custInfo') {
+				$('#failCustId').show();
+			}
+			if (authMethod === 'mobile' || authMethod === 'ipin') {
+				$('#failAuthentication').show();
+			}
+
 		};
 
 		// 나이스 본인인증 후 콜백
@@ -250,14 +278,10 @@
 		};
 
 		$(document).ready( function() {
-			$(document).on('click','.mb .registration_tap > .form_group >.form_field > div',function(e){
-				$(this).find('input').prop('checked', true);
-				$(this).parents('.form_group').find('.regist_box').removeClass('on');
-				$(this).parents('.form_group').find('.regist_box').eq($(this).index()).addClass('on');
-				return false;
-			});
+			$('#searchCustInfo')[0].reset();
 		});
 
+
 		/*]]>*/
 	</script>
 

+ 1 - 2
src/main/webapp/WEB-INF/views/web/customer/PrivacyTrustLayerFormWeb.html

@@ -22,8 +22,7 @@
 		<div class="modal-body">
 			<div class="pop_cont">
 				<div class="text_wrap">
-					개인정보 취급 위탁내용이 들어갑니다.<br>
-
+					<div class="text_wrap" th:utext="${#strings.replace(#strings.replace(clause,'&amplt;','<'),'&ampgt;','>')}">
 				</div>
 			</div>
 		</div>

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

@@ -102,7 +102,7 @@
 														<p class="itemBrand" th:text="${goodsData.brandGroupNm}"></p>
 														<div class=" itemName" th:text="${goodsData.goodsFullNm}"></div>
 														<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')+'원'}"></p>
-														<div class="itemComment">#가을느낌 물씬!</div>
+														<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을느낌 물씬!</div>
 													</a>
 												</div>
 											</div>
@@ -170,11 +170,12 @@
 														</div>
 														<p class="itemBrand" th:text="${goodsData.brandGroupNm}"></p>
 														<div class="itemName" th:text="${goodsData.goodsFullNm}"></div>
-														<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">
+														<p class="itemPrice">
+															[[${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')} + 원]]
 															<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}"></span>
 															<span class="itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 														</p>
-														<div class="itemComment">#가을느낌 물씬!!</div>
+														<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을느낌 물씬!!</div>
 													</a>
 												</div>
 											</div>
@@ -208,7 +209,7 @@
 												<th:block th:if="${LookbookData.lookbookGoodsList != null and !LookbookData.lookbookGoodsList.empty}" th:each="lookbookGoods, status : ${LookbookData.lookbookGoodsList}">
 													<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
 														<!--<button type="button" id="btn_lookbook_picker01" ><span class="ico ico_picker"></span></button>-->
-														<button type="button" th:onclick="fnGoodsPopup([[${lookbookGoods.sysImgNm}]],[[${lookbookGoods.brandGroupNm}]],[[${lookbookGoods.goodsNm}]],[[${lookbookGoods.listPrice}]],[[${lookbookGoods.currPrice}]],[[${lookbookGoods.dcRate}]],[[${lookbookGoods.goodsCd}]])"><span class="ico ico_picker"></span></button>
+														<button type="button" th:onclick="fnGoodsPopup([[${lookbookGoods.sysImgNm}]],[[${lookbookGoods.brandGroupNm}]],[[${lookbookGoods.goodsFullNm}]],[[${lookbookGoods.listPrice}]],[[${lookbookGoods.currPrice}]],[[${lookbookGoods.dcRate}]],[[${lookbookGoods.goodsCd}]])"><span class="ico ico_picker"></span></button>
 														<!--id="btn_lookbook_picker01" <div class="pick_descr">
 															<a href="" th:text="${lookbookGoods.goodsNm}">
 															</a>
@@ -247,7 +248,8 @@
 													</div>
 													<p class=" itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
 													<div class=" itemName" th:text="${goodsData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-													<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">80,100
+													<p class="itemPrice" >
+														[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')} + 원]]
 														<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
 														<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 													</p>
@@ -361,7 +363,7 @@
 													<span class="badge13">단독특가</span>
 													<span class="badge13">무료배송</span>
 												</p>
-												<div class="itemComment">#가을느낌 물씬!</div>
+												<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을느낌 물씬!</div>
 											</a>
 										</div>
 									</div>

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

@@ -243,7 +243,7 @@
 							</div>
 							<div class="count_wrap">
 								<div>
-									<p><span>9999</span>개의 상품</p>
+									<p><span id="totCntId">9999</span>개의 상품</p>
 								</div>
 								<div>
 									<ul>
@@ -259,168 +259,18 @@
 									</ul>
 								</div>
 							</div>
-							<div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="rank ranker"><span>1</span></div>
-											<div class="itemPic">
-												<img alt="BLUE-a" class=" vLHTC pd_img" src="/images/pc/thumb/prod1.jpg">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class=" itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="rank ranker"><span>1</span></div>
-											<div class="itemPic">
-												<img alt="BLUE-a" class=" vLHTC pd_img" src="/images/pc/thumb/prod1.jpg">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class=" itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-												<span class="badge13">쿠폰할인 </span>
-												<span class="badge13">무료배송 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="rank ranker"><span>1</span></div>
-											<div class="itemPic">
-												<img alt="BLUE-a" class=" vLHTC pd_img" src="/images/pc/thumb/prod1.jpg">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class=" itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-												<span class="badge13">쿠폰할인 </span>
-												<span class="badge13">무료배송 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="rank ranker"><span>1</span></div>
-											<div class="itemPic">
-												<img alt="BLUE-a" class=" vLHTC pd_img" src="/images/pc/thumb/prod1.jpg">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class=" itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="rank ranker"><span>1</span></div>
-											<div class="itemPic">
-												<img alt="BLUE-a" class=" vLHTC pd_img" src="/images/pc/thumb/prod1.jpg">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class=" itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="rank ranker"><span>1</span></div>
-											<div class="itemPic">
-												<img alt="BLUE-a" class=" vLHTC pd_img" src="/images/pc/thumb/prod1.jpg">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class=" itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
+
+							<div id="infiniteContainer">
+								<div id="listBoxOuter" class="itemsGrp">
+									<ul class="productlist quarter" >
+									</ul>
 								</div>
 							</div>
+
+							<div class="itemsGrp" id="listBox">
+
+							</div>
+
 						</div>
 					</div>
 				</div>
@@ -429,7 +279,7 @@
 	</div>
 	<form id="searchGoodsForm" name="searchGoodsForm">
 		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
-		<input type="hidden" name="pageSize" value ="32"/>
+		<input type="hidden" name="pageSize" value ="30"/>
 		<input type="hidden" name="cateNo" th:value="${cateInfo.cateNo}"/>
 		<input type="hidden" name="cateGb" th:value="${cateInfo.cateGb}"/>
 		<input type="hidden" name="brandGroupNo" th:value="${cateInfo.brandGroupNo}"/>
@@ -441,9 +291,9 @@
 		<input type="hidden" name="sortGb"/>
 	</form>
 
-	<script type="text/javascript" src="/ux/plugins/jquery.history.min.js"></script>
-	<script type="text/javascript" src="/ux/plugins/gaga.infinite.scroll.js"></script>
-
+	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+	<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+	<script th:src="@{'/biz/goodsSession.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goodsSession.js"></script>
 	<script th:inline="javascript">
 		/*<![CDATA[*/
 		var filterPriceList = [[${filterPriceList}]];
@@ -505,12 +355,32 @@
 
 		// 상품 검색
 		var fnGetInfiniteScrollDataList = function (pageNum){
-			$("#searchForm input[name=pageNo]").val(pageNum+1);
-			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchForm,  gagaInfiniteScroll.jsonToHtml);
+			console.log('pageNum:::'+pageNum);
+			$("#searchGoodsForm input[name=pageNo]").val(pageNum+1);
+			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchGoodsForm,  gagaInfiniteScroll.jsonToHtml);
 		}
 
 		var fnDrawInfiniteScrollData = function (result){
-			console.log('nn');
+			console.log('fnDrawInfiniteScrollData');
+			let totalCnt = result.totalCnt;
+			$("#totCntId").text(totalCnt.addComma());
+			gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
+
+			var ithrCd = '';
+			var contentLoc = '';
+			if (result.dataList != null && result.dataList.length > 0) {
+				var goodsUrl = [[${@environment.getProperty('upload.goods.view')}]];;
+				let lastPage = result.paging.pageable.pageNo;
+				let endRow = result.endRow - result.paging.pageable.pageSize;
+				var htm = fnCreateGoodsList(result, ithrCd, contentLoc, goodsUrl, lastPage, endRow);
+				console.log('1234');
+				gagaInfiniteScroll.draw(htm);
+			}else {
+				if($("#searchForm input[name=pageNo]").val()==1){
+					$('#listBox').html('<li class="none">상품정보가 존재하지 않습니다.</li>');
+				}
+				gagaInfiniteScroll.draw('not');
+			}
 		}
 
 		var fnCreateCategoryList = function (){
@@ -619,6 +489,58 @@
 			return tag;
 		}
 
+		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
+		$(window).on("pageshow", function(event) {
+			$('#filterForm input[name=brand]:checked').each(function(){
+				$(this).parent().addClass("active");
+			});
+			$('#filterForm input[name=size]:checked').each(function(){
+				$(this).parent().addClass("active");
+			});
+			$('#filterForm input[name=price]:checked').each(function(){
+				$(this).parent().addClass("active");
+			});
+			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
+				var historyData = sessionStorage.getItem(document.location.href);
+				if(historyData!=null){
+					historyData = JSON.parse(historyData);
+				}else{
+					historyData = {};
+				}
+				if(typeof historyData.sortGbNm!='undefined' && historyData.sortGbNm!=''){
+					$(".arrayWrap .btn").text(historyData.sortGbNm);
+				}
+				if(typeof historyData.filterHtml!='undefined' && historyData.filterHtml!=''){
+					$("#searchForm").append(historyData.filterHtml);
+					filterHtml = historyData.filterHtml;
+				}
+				if(typeof historyData.filterStatHtml!='undefined' && historyData.filterStatHtml!=''){
+					$(".filterstate").append(historyData.filterStatHtml);
+					filterStatHtml = historyData.filterStatHtml;
+				}
+				if(typeof historyData.totalCount!='undefined' && historyData.totalCount!=''){
+					$("#totalGoodsCnt").text(historyData.totalCount);
+				}
+				if(typeof historyData.sortGb!='undefined' && historyData.sortGb!=''){
+					$("#sortSelect").val(historyData.sortGb);
+					$("#searchForm input:hidden[name=sortGb]").val(historyData.sortGb);
+					fnSortChange(historyData.sortGb);
+				}else{
+					fnGoodsListSearch();
+				}
+			}else{
+				fnCategoryGoodsInfiniteScrollInit();
+				var sortGb = [[${sortGb}]];
+				if(sortGb=='new' || sortGb=='best'){
+					$("#sortSelect").val(sortGb);
+					$("#sortSelect").parent('div').children('span').text($("#sortSelect option:selected").text())
+					fnSortChange(sortGb);
+				}else{
+					fnGoodsListSearch();
+				}
+			}
+		});
+
 		/*]]>*/
 	</script>
 

+ 2 - 2
src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html

@@ -209,10 +209,10 @@
 		let allCate = [[${allCateList}]];
 		$.each(allCate, function(idx1, cate1) {
 			if ([[${params.cate1No}]] == cate1.cate1No) {
-				let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
+				let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
 				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 					$.each(cate1.cate2List, function(idx2, cate2) {
-						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
 					});
 				}
 				$('.dp_cate_list').html(tag);

+ 333 - 8
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -121,7 +121,7 @@
 														<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
 														<div class=" itemName" th:text="${goodsData.goodsFullNm}">스타 착용 여성 퍼 아플리케 오버핏 투마일 웨어링 점퍼</div>
 														<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">488,000원</p>
-														<div class="itemComment">#가을느낌 물씬!</div>
+														<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을느낌 물씬!</div>
 													</a>
 												</div>
 											</div>
@@ -211,11 +211,13 @@
 															</div>
 															<p class="itemBrand" th:text="${goodsData.brandEnm}">BRAND NAME</p>
 															<div class="itemName" th:text="${goodsData.goodsNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-															<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">80,100
-																<span class="itemPrice_original" th:text="${#numbers.formatInteger(planningGoods.listPrice,1,'COMMA')}">89,000</span>
-																<span class="itemPercent" th:if="${planningGoods.currPrice != planningGoods.listPrice}" th:text="${(planningGoods.listPrice == 0 ? 0 : #numbers.formatDecimal((planningGoods.listPrice - planningGoods.currPrice) / (planningGoods.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+															<p class="itemPrice">
+																[[${#numbers.formatInteger(goodsData.currAprice,0,'COMMA')} + 원]]
+																<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,0,'COMMA')} + '원'"></span>
+																<span class=" itemPercent" th:text="${#numbers.formatDecimal(goodsData.dcArate,1,0)} + '%'"></span>
+																<!--<span class="itemPercent" th:if="${planningGoods.currPrice != planningGoods.listPrice}" th:text="${(planningGoods.listPrice == 0 ? 0 : #numbers.formatDecimal((planningGoods.listPrice - planningGoods.currPrice) / (planningGoods.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>-->
 															</p>
-															<div class="itemComment">#데일리웨어로 매일입고싶은</div>
+															<div class="itemComment" th:text="${goodsData.goodsTnm}">#데일리웨어로 매일입고싶은</div>
 														</a>
 													</div>
 												</div>
@@ -287,7 +289,7 @@
 																	<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
 																	<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 																</p>
-																<div class="itemComment">#데일리웨어로 매일입고싶은</div>
+																<div class="itemComment" th:text="${goodsData.goodsTnm}">#데일리웨어로 매일입고싶은</div>
 															</a>
 														</div>
 													</div>
@@ -371,11 +373,11 @@
 																		</div>
 																		<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
 																		<div class=" itemName" th:text="${goodsData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-																		<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">80,100
+																		<p class="itemPrice">[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')} + 원]]
 																			<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
 																			<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 																		</p>
-																		<div class="itemComment">#주문 폭주 상품</div>
+																		<div class="itemComment" th:text="${goodsData.goodsTnm}">#주문 폭주 상품</div>
 																	</a>
 																</div>
 															</div>
@@ -398,6 +400,329 @@
 			</th:block>
 		</th:block>
 
+		<!-- 10. 당신을위한제안 -->
+		<div class="content main_foryou">
+			<div class="cont_head">
+				<p class="displayH">당신을 위한 제안</p>
+				<span>스타일24에서 가장 주목받는 상품을 살펴보세요</span>
+			</div>
+			<div class="cont_body">
+				<div class="post-sug fy_nav">
+					<div class="swiper-container">
+						<div class="swiper-wrapper">
+							<div class="swiper-slide">
+								<ul>
+									<li><button class="btn btn_shape active" data-tab="fy1"><div><span class="number">1</span><span>BUCKAROO</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy2"><div><span class="number">2</span><span>기모청바지</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy3"><div><span class="number">3</span><span>겨울 팬츠</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy4"><div><span class="number">4</span><span>컨버스 주니어</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy5"><div><span class="number">5</span><span>모이몰른</span></div></button><a href="#none">자세히 보기</a></li>
+								</ul>
+							</div>
+							<div class="swiper-slide">
+								<ul>
+									<li><button class="btn btn_shape" data-tab="fy6"><div><span class="number">6</span><span>컨버스 주니어</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy7"><div><span class="number">7</span><span>겨울 팬츠</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy8"><div><span class="number">8</span><span>BUCKAROO</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy9"><div><span class="number">9</span><span>모이몰른</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy10"><div><span class="number">10</span><span>기모청바지</span></div></button><a href="#none">자세히 보기</a></li>
+								</ul>
+							</div>
+						</div>
+					</div>
+					<div class="swiper-controls">
+						<div class="swiper-pagination"></div>
+					</div>
+				</div>
+				<div class="fy_item active" id="fy1">
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug01.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">자카드 방풍 패딩 스웨터 가디건 자카드 </div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug02.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part lg">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug03.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug04.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug05.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug06.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug07.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+				</div>
+
+				<div class="fy_item" id="fy2">
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug04.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug05.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug01.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">자카드 방풍 패딩 스웨터 가디건 자카드 </div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug02.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug06.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug07.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part lg">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug03.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="fy_item" id="fy3"></div>
+				<div class="fy_item" id="fy4"></div>
+				<div class="fy_item" id="fy5"></div>
+				<div class="fy_item" id="fy6"></div>
+				<div class="fy_item" id="fy7"></div>
+				<div class="fy_item" id="fy8"></div>
+				<div class="fy_item" id="fy9"></div>
+				<div class="fy_item" id="fy10"></div>
+			</div>
+		</div>
+
+		<!-- 11. TV 슬라이드 -->
+		<div class="content wide main_tv">
+			<div class="cont_head">
+				<p class="displayH t_c">STYLE24 TV</p>
+			</div>
+			<div class="cont_body">
+				<div class="swiper-container post-tv">
+					<div class="swiper-wrapper">
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+					</div>
+					<div class="swiper-button-prev white"></div> <!-- 클래스명 white 추가 -->
+					<div class="swiper-button-next white"></div>
+				</div>
+				<div class="swiper-controls">
+					<div class="swiper-pagination"></div>
+				</div>
+			</div>
+		</div>
 
 
 	<!-- End Of Main Contents -->

+ 0 - 0
src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html → src/main/webapp/WEB-INF/views/web/display/SearchLayerWeb.html


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

@@ -56,7 +56,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																		or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																		or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
 	</div>
@@ -79,7 +79,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																		or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																		or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
 	</div>
@@ -112,7 +112,7 @@
 	<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 		<div class="view">
 			<th:block th:each="goodsImg, status : ${goodsImgList}" >
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 				</th:block>
 		</div>
 	</div>

+ 4 - 4
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -40,7 +40,7 @@
 													th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
+											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
 										</th:block>	
 										</div>
 									</div>
@@ -55,7 +55,7 @@
 									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 												or #strings.contains(goodsImg.sysImgNm,'_L1.')
 												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
+									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=558'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
 								</th:block>
 							</ul>
 						</div>
@@ -159,7 +159,7 @@
 														<div class="item_state">
 															<a href="javascript:void(0);" class="itemLink">
 																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																</div>
 																<div class="itemName">선택</div>
 															</a>
@@ -174,7 +174,7 @@
 															<div class="item_state" >
 																<a href="javascript:void(0);" class="itemLink" >
 																	<div class="itemPic">
-																		<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																		<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																	</div>
 																	<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 																	<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></div>

+ 2 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsDealListFormWeb.html

@@ -29,7 +29,7 @@
 							<div class="item_state">
 								<a href="javascript:void(0);" class="itemLink">
 									<div class="itemPic">
-										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									</div>
 									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
@@ -47,7 +47,7 @@
 								<div class="item_state">
 									<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]])">
 										<div class="itemPic">
-											<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+											<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 										</div>
 										<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 										<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDeliveryFormWeb.html

@@ -25,7 +25,7 @@
 			<div class="item_state">
 				<a href="javascript:void(0);" class="itemLink">
 					<div class="itemPic">
-						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}">
 					</div>
 					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 30 - 18
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -41,7 +41,7 @@
 													th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
+											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
 										</th:block>	
 										</div>
 									</div>
@@ -56,7 +56,7 @@
 									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 												or #strings.contains(goodsImg.sysImgNm,'_L1.')
 												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
+									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
 								</th:block>
 							</ul>
 						</div>
@@ -176,7 +176,7 @@
 									<ul >
 										<li th:each="goodsOption1, status : ${goodsOption1List}">
 											<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm +'?RS=64'}" alt="">
 											</a>
 										</li>
 									</ul>
@@ -441,7 +441,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -464,7 +464,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -474,7 +474,7 @@
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -497,7 +497,7 @@
 				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" >
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 							</th:block>
 					</div>
 				</div>
@@ -660,7 +660,7 @@
 																	<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${lookbookGoods.goodsCd}]], '',[[${ithrCd}]],[[${contentsLoc}]] )">
 																	</th:block>
 																		<div class="itemPic">
-																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm}">
+																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm+'?RS=100'}">
 																		</div>
 																		<p class="itemBrand" th:text="${lookbookGoods.brandGroupNm}">CURLYSUE 컬리수</p>
 																		<div class="itemName" th:text="${lookbookGoods.goodsFullNm}">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
@@ -849,7 +849,6 @@
 		let target=$('.select_custom.item_opt2');
 		let targetSize = target.length;	//구성품 갯수
 		
-		//eskim
 		let cnt = 0;
 		let itemSize = 0;
 		target.each(function(){
@@ -1037,7 +1036,7 @@
 	var fnAddCart = function(btnType){
 		
 		// 바로구매는 로그인여부 확인
-		if (btnType == "O" && !cfCheckLogin()) {
+/* 		if (btnType == "O" && !cfCheckLogin()) {
 			
 			let btn = ["비회원 구매", "로그인후 구매"]; //버튼명[좌,우]
 			mcxDialog.confirmC("로그인 후 구매 시 다양한 혜택을 받으실 수 있습니다.", { //내용
@@ -1052,9 +1051,8 @@
 				}
 			});
 			return false;
-		}
+		} */
 		
-		let params = [];
 		let goodsType = $("#cartForm  input[name=goodsType]").val();
 
 		if (goodsType == 'G056_N'){
@@ -1063,6 +1061,7 @@
 				return;
 			}
 		
+			let compsList = [];
 			let obj = new Object();
 			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
 			obj.optCd = $("#cartForm  input[name=optCd]").val();
@@ -1073,10 +1072,13 @@
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-			params.push(obj);
+			compsList.push(obj);
+			
+			// 장바구니담기
+			cfnAddCart(compsList);
 
 		}else if (goodsType == 'G056_S'){  //수정요
-		
+			
 			let target=$('.select_custom.item_opt2');
 			let targetSize = target.length;	//구성품 갯수
 			let itemSize = 0;
@@ -1091,6 +1093,11 @@
 				return false;
 			}
 			
+			let cartGoodsList = [];
+			let compsList = [];
+			let goodsList = {
+				cartCompsList : new Array()
+			}
 			target.each(function() {
 				var arrInfo = $(this).find('input[name=opt2]').val().split('|');	// 상품코드|사이즈|구성수량
 				
@@ -1105,13 +1112,17 @@
 				obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 				obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 				obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-				params.push(obj);
+				compsList.push(obj);
 				
 			});
+			
+			goodsList.cartCompsList = compsList;
+			cartGoodsList.push(goodsList);
+			
+			// 장바구니담기
+			cfnAddCart(cartGoodsList);
 		}
 		
-		// 장바구니담기
-		cfnAddCart(params);
 	}
 
 	// 룩북속 상품 쇼핑백 담기
@@ -1212,7 +1223,8 @@
 						tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
 					}
 					let soldoutYn = ""; 
-					if ("Y" == item.soldoutYn || item.stockQty <= 0)soldoutYn = "true";
+					let saleQty = (Number(qty) * Number(minOrdQty));
+					if ("Y" == item.soldoutYn || item.stockQty <= saleQty)soldoutYn = "true";
 					if (selfGoodsYn == "Y"){
 						tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSet(this, \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';	
 					}else{

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html

@@ -304,7 +304,7 @@
 								</th:block>
 							</div>
 							<div class="pic" th:unless="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
-								<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+');'}">
+								<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=365);'}">
 								</span>
 							</div>
 							<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">

+ 12 - 12
src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html

@@ -66,7 +66,7 @@
 <div class="shareWrap" th:with="stylelUrl=${@environment.getProperty('domain.front')}, imgGoodsUrl=${@environment.getProperty('upload.goods.view')}">
 	<div id="layerShare" class="setShare open">
 		<span>
-			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm}');|"><span>카카오톡</span></button>
+			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=80'}');|"><span>카카오톡</span></button>
 			<button type="button" class="fb" th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '', '');|"><span>페이스북</span></button>
 			<button type="button" class="tw" th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm+ '#style24몰'}', '', '');|"><span>트위터</span></button>
 			<button type="button" class="url btn_copy"><span>URL</span></button>
@@ -104,7 +104,7 @@
 										<span>상품<em class="number" th:text="${#numbers.formatInteger(status.count,2)}">01</em></span>
 									</div>
 									<div class="itemPic">
-										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									</div>
 									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -131,7 +131,7 @@
 											<div class="item_state">
 												<a href="javascript:void(0)" class="itemLink">
 													<div class="itemPic">
-														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -146,7 +146,7 @@
 												<div class="item_state">
 													<a href="#none" class="itemLink">
 														<div class="itemPic">
-															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -182,7 +182,7 @@
 											<div class="item_state">
 												<a href="javascript:void(0)" class="itemLink">
 													<div class="itemPic">
-														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -197,7 +197,7 @@
 												<div class="item_state">
 													<a href="#none" class="itemLink">
 														<div class="itemPic">
-															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -233,7 +233,7 @@
 											<div class="item_state">
 												<a href="javascript:void(0)" class="itemLink">
 													<div class="itemPic">
-														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -248,7 +248,7 @@
 												<div class="item_state">
 													<a href="#none" class="itemLink">
 														<div class="itemPic">
-															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
@@ -284,7 +284,7 @@
 													<div class="item_state">
 														<a href="javascript:void(0)" class="itemLink">
 															<div class="itemPic">
-																<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 															</div>
 															<div class="itemName">선택</div>
 														</a>
@@ -299,7 +299,7 @@
 														<div class="item_state">
 															<a href="javascript:void(0);" class="itemLink">
 																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																</div>
 																<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 																<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></div>
@@ -391,7 +391,7 @@
 										<div class="item_state">
 											<a href="javascript:void(0)" class="itemLink">
 												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 												</div>
 												<div class="itemName">선택</div>
 											</a>
@@ -404,7 +404,7 @@
 										<div class="item_state">
 											<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]], [[${goodsInfo.currPrice}]], [[${goodsInfo.selfGoodsYn}]], [[${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'Y':'N' }]])">
 												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 												</div>
 												<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 												<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html

@@ -31,7 +31,7 @@
 						<div class="item_state">
 							<a href="javascript:void(0);" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html

@@ -34,7 +34,7 @@
 							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
 							<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'[[${params.contentsLoc}]]','','pc_detail');" class="itemLink" >
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsQnaFormWeb.html

@@ -25,7 +25,7 @@
 			<div class="item_state">
 				<a href="javascript:void(0);" class="itemLink">
 					<div class="itemPic">
-						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 					</div>
 					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

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

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsReviewBestFormWeb.html
- * @desc	: 베스트 상품평 팝업
+ * * @source  : GoodsReviewDetailFormWeb.html
+ * @desc	: 상품평 상세 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -14,7 +14,7 @@
  * 1.0  2021.03.02   eskim		최초 작성
  *******************************************************************************
  -->
-<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="modal-content">
 		<div class="modal-header">
 			<th:block th:if="${review.bestYn == 'Y'}">
@@ -49,7 +49,7 @@
 									</th:block>
 									<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
 									<span class="thumb">
-										<img th:src="${imgGoodsUrl+'/'+review.sysImgNm}" alt="">
+										<img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=365'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									</span>
 									</th:block>
 								</div>
@@ -75,7 +75,7 @@
 												<dl>
 													<div>
 														<dt>키/몸무게</dt>
-														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm|"></th:block> /
+														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
 															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
 														</dd>
 													</div>

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

@@ -25,7 +25,7 @@
 			<div class="item_state">
 				<a href="javascript:void(0);" class="itemLink">
 					<div class="itemPic">
-						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 					</div>
 					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

+ 3 - 10
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsInstockAlarmFormWeb.html
- * @desc	: 재입고알림 팝업
+ * @source  : GoodsReviewPhotoFormWeb.html
+ * @desc	: 상품평 - 포토/영상 리스트 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -23,13 +23,6 @@
 			<div class="pop_cont">
 				<div class="photo_list">
 					<ul id="ulGoodsReviewPhoto">
-						<li>
-							<a href="">
-								<div class="pic">
-									<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-								</div>
-							</a>
-						</li>
 					</ul>
 				</div>
 				<div class="ui_row">
@@ -42,7 +35,7 @@
 	</div>
 	<form id="goodsReviewPhotoForm" name="goodsReviewPhotoForm" action="#" th:action="@{'/goods/review/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
-		<input type="hidden" name="pageSize" value ="1"/>
+		<input type="hidden" name="pageSize" value ="20"/>
 		<input type="hidden" name="photoYn" value ="Y"/>
 		<input type="hidden" name="goodsCd" th:value ="${params.goodsCd}"/>
 	</form>

+ 488 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCreListFormWeb.html

@@ -0,0 +1,488 @@
+<!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/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MypageCreListFormWeb.html
+ * @desc    : 마이페이지 > 취소/반품/교환내역 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content myOrderList"> <!-- 페이지특정 클래스 = myOrderList -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+					<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
+			</div>
+			<div class="cont">
+				<div class="sec_head">
+					<!-- 주문 현황 -->
+					<div class="my_order_progress">
+						<div class="progress">
+							<ul>
+								<li>
+									<div>
+										<p class="txt">주문접수</p>
+										<p class="count"><span id="orderReceiptCount" th:text="${orderCount.orderReceiptCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">결제완료</p>
+										<p class="count"><span id="paymentCompleteCount" th:text="${orderCount.paymentCompleteCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">상품 준비 중</p>
+										<p class="count"><span id="goodsPrepareCount" th:text="${orderCount.goodsPrepareCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">배송 준비 중</p>
+										<p class="count"><span id="shipPrepareCount" th:text="${orderCount.shipPrepareCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">배송 중</p>
+										<p class="count"><span id="shippingCount" th:text="${orderCount.shippingCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">배송 완료</p>
+										<p class="count"><span id="shipCompleteCount" th:text="${orderCount.shipCompleteCount}">0</span></p>
+									</div>
+								</li>
+							</ul>
+						</div>
+						<div class="invalid">
+							<p class="txt">취소/교환/반품</p>
+							<p class="count"><span id="orderCreCount" th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount}">0</span></p>
+						</div>
+					</div>
+					<!-- //주문 현황 -->
+				</div>
+				<div class="sec_body">
+					<h3 class="subH2">취소/교환/반품 내역</h3>
+					<!-- 주문조회 검색 -->
+					<div class="area_filter">
+						<div class="select_month_box">
+							<div class="form_field">
+								<div>
+									<input type="radio" name="rdi-month" id="rdi-month1" onclick="fnSetSearchPeriod(1);">
+									<label for="rdi-month1"><span>최근 1개월</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-month" id="rdi-month2" onclick="fnSetSearchPeriod(3);">
+									<label for="rdi-month2"><span>최근 3개월</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-month" id="rdi-month3" onclick="fnSetSearchPeriod(6);">
+									<label for="rdi-month3"><span>최근 6개월</span></label>
+								</div>
+							</div>
+						</div>
+						<div class="select_period_box">
+							<form class="form_wrap">
+								<div class="form_field">
+									<label class="input_label sr-only">선택기간 시작</label>
+									<div class="input_wrap">
+										<input type="text" class="form_control period_datepicker" value="" id="stDate" onchange="fnCheckPeriod(this);">
+									</div>
+								</div>
+								<div class="form_field">
+									<label class="input_label sr-only">선택기간 끝</label>
+									<div class="input_wrap">
+										<input type="text" class="form_control n_input period_datepicker" value="" id="edDate" onchange="fnCheckPeriod(this);">
+									</div>
+								</div>
+								<button type="button" class="btn btn_dark btn_sm" onclick="fnSearchCreList();"><span>조회</span></button>
+							</form>
+						</div>
+						<div class="select_status_box">
+							<form class="form_wrap">
+								<div class="form_field">
+									<div class="select_custom demand_status">
+										<div class="combo">
+											<div class="select">전체상태</div>
+											<ul class="list">
+												<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+												<li class="selected" code="">전체상태</li>
+												<li th:if="${chgStatList}" th:each="oneData, status : ${chgStatList}" th:attr="code=${oneData.cd}" th:text="${oneData.cdNm}"></li>
+											</ul>
+										</div>
+									</div>
+								</div>
+							</form>
+						</div>
+					</div>
+					<!-- //주문조회 검색 -->
+					<div class="area_list" id="creList"></div>
+				</div>
+				<div class="sec_foot">
+					<div class="ui_row">
+						<ul class="pageNav" id="paging"></ul>
+					</div>
+				</div>
+				<form id="searchForm" name="searchForm" th:action="@{'/mypage/cre/list'}" th:method="post">
+					<input type="hidden" name="pageNo" value=1 />
+					<input type="hidden" name="pageSize" value=5 />
+					<input type="hidden" name="pageUnit" value=10 />
+					<input type="hidden" name="ordDtlStat" value="" />
+					<input type="hidden" name="stDate" value="" />
+					<input type="hidden" name="edDate" value="" />
+					<input type="hidden" name="custNo" th:value ="${custNo}"/>
+				</form>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let totalCount = 0;
+	let pageSize = 0;
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(2);
+		
+		// 마이페이지 location 설정
+		fnSetMypageLocation('취소/반품/교환내역');
+		
+		// datepicker 설정
+		$('.period_datepicker').datepicker();
+
+		// 셀렉트박스 활성화
+		$('.select_custom.order_status').each(function(index) {
+			new sCombo($(this));
+		});
+
+		// 주문 검색 기간 설정
+		$('#rdi-month2').click();
+
+		// Initialize a pagination
+		gagaPaging.init('searchForm', fnSearchCallback, 'paging', 5, 10);
+		
+		// Load data
+		//gagaPaging.load(1);
+	});
+	
+	// 검색기간 버튼 클릭 이벤트 처리
+	var fnSetSearchPeriod = function(period) {
+		let date = new Date();
+		let edDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+		date.setMonth(date.getMonth() - period);
+		let stDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+
+		$('#edDate').val(edDate);
+		$('#searchForm input[name=edDate]').val(edDate);
+		$('#stDate').val(stDate);
+		$('#searchForm input[name=stDate]').val(stDate);
+	}
+
+	// 주문 목록 조회
+	var fnSearchCreList = function() {
+		gagaPaging.load(1);
+	}
+
+	// 주문 목록 조회 콜백
+	var fnSearchCallback = function(result) {
+		$('#creList').html(fnCreateCreList(result));
+
+		// Create pagination
+		gagaPaging.createPagination(result.creInfo.pageable);
+	}
+
+	// 검색기간 설정 체크
+	var fnCheckPeriod = function(param) {
+		let stDate = $('#stDate').val();
+		let edDate = $('#edDate').val();
+
+		let sdt = new Date(stDate);
+		let edt = new Date(edDate);
+		let dateDiff = Math.ceil((edt.getTime() - sdt.getTime()) / (1000 * 3600 * 24));
+
+		if (dateDiff > 366) {
+			let id = $(param).attr('id');
+			mcxDialog.alert('조회기간은 최대 1년을 넘을 수 없습니다.');
+			if (id == 'stDate') {
+				sdt.setFullYear(sdt.getFullYear() + 1);
+				let chgEdDate = sdt.getFullYear() + '-' + ('0' + (sdt.getMonth() + 1)).slice(-2) + '-' + ('0' + (sdt.getDate())).slice(-2);
+
+				$('#edDate').val(chgEdDate);
+				$('#searchForm input[name=edDate]').val(chgEdDate);
+			} else {
+				edt.setFullYear(edt.getFullYear() - 1);
+				let chgStDate = edt.getFullYear() + '-' + ('0' + (edt.getMonth() + 1)).slice(-2) + '-' + ('0' + (edt.getDate())).slice(-2);
+
+				$('#stDate').val(chgStDate);
+				$('#searchForm input[name=stDate]').val(chgStDate);
+			}
+		}
+	}
+
+	// 상태값 별 수량 업데이트 처리
+	var fnReloadStatusCount = function() {
+		let url = '/mypage/status/count';
+		
+		let data = {};
+		data.custNo = customerInfo.custNo;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			$('#orderReceiptCount').text(result.orderCount.orderReceiptCount);
+			$('#paymentCompleteCount').text(result.orderCount.paymentCompleteCount);
+			$('#goodsPrepareCount').text(result.orderCount.goodsPrepareCount);
+			$('#shipPrepareCount').text(result.orderCount.shipPrepareCount);
+			$('#shippingCount').text(result.orderCount.shippingCount);
+			$('#shipCompleteCount').text(result.orderCount.shipCompleteCount);
+			$('#orderCreCount').text(result.orderCount.cancelCount + result.orderCount.returnCount + result.orderCount.exchangeCount);
+		});
+	}
+
+	// 주문상세상태코드 셀렉트박스 변경 이벤트
+	$('.select_custom.order_status').find('li').on('click', function() {
+		$('#searchForm input[name=chgStat]').val($(this).attr('code'));
+	});
+
+	// 주문내역 리스트 처리
+	var fnCreateCreList = function(param) {
+		let tag = '';
+		let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
+
+		if (param.creList != null && param.creList.length > 0) {
+			$.each(param.creList, function (idx, creList) {
+				tag += '						<div class="part_goods">\n';
+				tag += '							<div class="goods_head">\n';
+				if (creList.giftPackYn == 'Y') {
+					tag += '								<p>선물일 <span>' + creList.ordDt + '</span></p>\n';
+				} else {
+					tag += '								<p>주문일 <span>' + creList.ordDt + '</span></p>\n';
+				}
+				tag += '								<a href="javascript:void(0)" ordChgSq="' + creList.ordChgSq + '" onclick="fnGoToCreDetail(this)">상세보기</a>\n';
+				tag += '							</div>\n';
+				tag += '							<div class="goods_cont">\n';
+				$.each(creList.creList, function (index, cre) {
+					console.log(index);
+					console.log(cre);
+					tag += '								<!-- 주문상품1 -->\n';
+					tag += '								<div class="goods_info">\n';
+					tag += '									<div class="order_desc">\n';
+					tag += '										<div class="goods_box">\n';
+					tag += '											<div class="gd_item">\n';
+					tag += '												<a href="javascript:void(0)" goodsCd="' + cre.goodsCd + '" onclick="fnGoToGoodsDetail(this)">\n';
+					tag += '													<span class="thumb">\n';
+					tag += '														<img src="' + imageUrl + '/' + cre.sysImgNm + '" width="100%" alt="">\n';
+					tag += '													</span>\n';
+					tag += '													<p>\n';
+					tag += '														<span class="brand">' + cre.brandNm + '</span>\n';
+					// 배송 아이콘 처리
+					if (cre.shotDelvYn == 'Y') {
+						tag += '														<span class="tag primary">총알배송</span>\n';
+					} else if (cre.selfGoodsYn == 'Y') {
+						tag += '														<span class="tag">STYLE24 일반배송</span>\n';
+					} else {
+						tag += '														<span class="tag">업체직배송</span>\n';
+					}
+					tag += '													</p>\n';
+					tag += '													<p>\n';
+					tag += '														<span class="name">' + cre.goodsNm + '</span>\n';
+					tag += '													</p>\n';
+					tag += '												</a>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_opt">\n';
+					tag += '												<div class="option_wrap">\n';
+					tag += '													<span class="title sr-only">주문 옵션</span>\n';
+					// 세트아이템 옵션 처리
+					if (cre.goodsType == 'G056_S') {
+						$.each(cre.colorNmArr, function (index2, option) {
+							tag += '													<span class="option">' + cre.itemNmArr[index2] + ' / ' + option + ' / ' + cre.optCd2Arr[index2] + '</span>\n';
+						});
+					} else {
+						tag += '													<span class="option">' + cre.colorNm + ' / ' + cre.optCd2 + '</span>\n';
+					}
+					tag += '												</div>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_calc">\n';
+					tag += '												<p>\n';
+					tag += '													<span class="count"><em>' + cre.chgQty + '</em>개</span>\n';
+					tag += '												</p>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_opt">\n';
+					tag += '												<div class="option_wrap">\n';
+					// 교환옵션
+					if (cre.chgGb == 'G680_40') {
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo) {
+								if (cre.goodsType == 'G056_S') {
+									tag += '													<span class="title">교환 옵션</span>';
+									$.each(exchange.colorNmArr, function (index2, option) {
+										tag += '													<span class="option">' + exchange.itemNmArr[index2] + ' / ' + option + ' / ' + exchange.optCd2Arr[index2] + '</span>\n';
+									});
+								} else {
+									tag += '													<span class="option">' + exchange.colorNm + ' / ' + exchange.optCd2 + '</span>\n';
+								}
+							}
+						});
+					}
+					tag += '												</div>\n';
+					tag += '											</div>\n';
+					tag += '										</div>\n';
+					tag += '										<div class="status_box">\n';
+					tag += '											<p>\n';
+					tag += '												' + cre.chgStatNm + '\n';
+					tag += '												<span class="date">' + cre.chgDate + '</span>\n';
+					tag += '												<span class="time">' + cre.chgTime + '</span>\n';
+					tag += '											</p>\n';
+					tag += '										</div>\n';
+					tag += '										<div class="button_box">\n';
+					if (cre.chgStat == 'G685_20' || cre.chgStat == 'G685_21' || cre.chgStat == 'G685_50' || cre.chgStat == 'G685_51') {
+						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordChgSq="' + cre.ordChgSq + '" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>\n';
+					}
+					if (cre.chgStat == 'G685_21' || cre.chgStat == 'G685_51' || cre.chgStat == 'G685_32') {
+						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordChgSq="' + cre.ordChgSq + '" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>\n';
+					}
+					if (cre.chgStat == 'G685_40') {
+						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordDtlNo="' + cre.ordDtlNo + '" onclick="fnGoToDeliveryTrack(this);"><span>배송조회</span></button></p>\n';
+					}
+					tag += '											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
+					tag += '										</div>\n';
+					tag += '									</div>\n';
+					//if (cre.chgStat == 'G685_10') {
+					//	tag += '									<div class="order_text"><p>' + cre.addPayCost + '원 결제 후 취소 가능합니다.</p></div>\n';
+					//}
+					// cre.chgGb == 'G680_30' : 반품
+					// cre.chgGb == 'G680_40' : 교환
+					// 교환접수
+					if (cre.chgStat == 'G685_20') {
+						tag += '									<div class="order_text"><p>교환 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>\n';
+					}
+					// 교환대기
+					if (cre.chgStat == 'G685_21') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 교환 가능합니다.</p></div>\n';
+					}
+					// 회수요청
+					if (cre.chgStat == 'G685_30') {
+						tag += '									<div class="order_text"><p>고객님이 요청하신 회수지로 상품을 회수 중에 있습니다.</p></div>\n';
+					}
+					// 상품 검수중(교환)
+					if (cre.chgStat == 'G685_31' && cre.chgGb == 'G680_40') {
+						tag += '									<div class="order_text"><p>고객님이 교환하신 상품을 검수 중에 있습니다.</p></div>\n';
+					}
+					// 결제대기(교환)
+					if (cre.chgStat == 'G685_32' && cre.chgGb == 'G680_40') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 교환 가능합니다.</p></div>\n';
+					}
+					// 교환완료
+					if (cre.chgStat == 'G685_40') {
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_60' || exchange.ordDtlStat == 'G013_70')) {
+								tag += '									<div class="order_text"><p>교환이 완료되었습니다.</p></div>\n';
+							}
+						});
+					}
+					// 교환철회
+					if (cre.chgStat == 'G685_49') {
+						tag += '									<div class="order_text"><p>요청하신 교환을 취소하였습니다.</p></div>\n';
+					}
+					// 반품접수
+					if (cre.chgStat == 'G685_50') {
+						tag += '									<div class="order_text"><p>반품 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>\n';
+					}
+					// 반품대기
+					if (cre.chgStat == 'G685_51') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 반품 가능합니다.</p></div>\n';
+					}
+					// 상품 검수중(반품)
+					if (cre.chgStat == 'G685_31' && cre.chgGb == 'G680_40') {
+						tag += '									<div class="order_text"><p>고객님이 반품하신 상품을 검수 중에 있습니다.</p></div>\n';
+					}
+					// 결제대기(반품)
+					if (cre.chgStat == 'G685_32' && cre.chgGb == 'G680_40') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 반품 가능합니다.</p></div>\n';
+					}
+					// 환불진행중
+					if (cre.chgStat == 'G685_33') {
+						tag += '									<div class="order_text"><p>' + cre.refundAmt.addComma() + '원 환불을 진행하고 있습니다.(영업일 최대 3일 내 환불 예정)</p></div>\n';
+					}
+					// 반품완료
+					if (cre.chgStat == 'G685_60') {
+						tag += '									<div class="order_text"><p>반품이 완료되었습니다.</p></div>\n';
+					}
+					// 반품철회
+					if (cre.chgStat == 'G685_69') {
+						tag += '									<div class="order_text"><p>요청하신 반품을 취소하였습니다.</p></div>\n';
+					}
+					tag += '								</div>\n';
+				});
+				tag += '							</div>\n';
+				tag += '						</div>\n';
+			});
+		} else {
+			// 데이터 없음 표시
+			tag += '						<div class="nodata">';
+			tag += '							<div class="txt_box">';
+			tag += '								<p>';
+			tag += '									취소/반품/교환내역이 없습니다.<br>';
+			tag += '								</p>';
+			tag += '							</div>';
+			tag += '						</div>';
+		}
+
+		return tag;
+	}
+	
+	// 취반교 상세 페이지 이동
+	var fnGoToCreDetail = function(param) {
+		// TODO
+		// 취반교 상세 페이지 이동
+	}
+	
+	// 취반교 신청 취소 버튼 클릭 이벤트
+	var fnCreCancel = function(param) {
+		let ordChgSq = $(param).attr('ordChgSq');
+		// TODO
+		// 취반교 신청 철회 처리
+	}
+	
+	// 취반교 결제하기 버튼 클릭 이벤트
+	var fnCrePayAddCost = function(param) {
+		let ordChgSq = $(param).attr('ordChgSq');
+		// TODO
+		// 취반교 추가 배송비 결제 화면 이동 처리
+	}
+	
+	// 취반교 배송조회 버튼 클릭 이벤트
+	var fnGoToDeliveryTrack = function(param) {
+		let ordDtlNo = $(param).attr('ordDtlNo');
+		// TODO
+		// 최반교 배송조회 페이지 이동 처리
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 110 - 110
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -363,206 +363,206 @@
 
 		if (param.orderList != null && param.orderList.length > 0) {
 			$.each(param.orderList, function (idx, order) {
-				tag += '<div class="part_goods">\n';
-				tag += '	<div class="goods_head">\n';
+				tag += '						<div class="part_goods">\n';
+				tag += '							<div class="goods_head">\n';
 				if (order.giftPackYn == 'Y') {
-					tag += '		<p>선물일 <span>' + order.ordDt + '</span></p>\n';
+					tag += '								<p>선물일 <span>' + order.ordDt + '</span></p>\n';
 				} else {
-					tag += '		<p>주문일 <span>' + order.ordDt + '</span></p>\n';
+					tag += '								<p>주문일 <span>' + order.ordDt + '</span></p>\n';
 				}
-				tag += '		<a href="javascript:void(0)" class="btn_detail_view" ordNo="' + order.ordNo + '" onclick="fnGoToOrderDetail(this)">주문상세보기</a>\n';
-				tag += '	</div>\n';
-				tag += '	<div class="goods_cont">\n';
+				tag += '								<a href="javascript:void(0)" class="btn_detail_view" ordNo="' + order.ordNo + '" onclick="fnGoToOrderDetail(this)">주문상세보기</a>\n';
+				tag += '							</div>\n';
+				tag += '							<div class="goods_cont">\n';
 				$.each(order.ordDtlList, function (index, ordDtl) {
-					tag += '		<div class="goods_info">\n';
-					tag += '			<div class="order_desc">\n';
-					tag += '				<div class="goods_box">\n';
-					tag += '					<div class="gd_item">\n';
-					tag += '						<a href="javascript:void(0)" goodsCd="' + ordDtl.goodsCd + '" onclick="fnGoToGoodsDetail(this)">\n';
-					tag += '							<span class="thumb">\n';
-					tag += '								<img src="' + imageUrl + '/' + ordDtl.sysImgNm + '" width="100%" alt="">\n';
-					tag += '							</span>\n';
-					tag += '							<p>\n';
-					tag += '								<span class="brand">' + ordDtl.brandNm + '</span>\n';
+					tag += '								<div class="goods_info">\n';
+					tag += '									<div class="order_desc">\n';
+					tag += '										<div class="goods_box">\n';
+					tag += '											<div class="gd_item">\n';
+					tag += '												<a href="javascript:void(0)" goodsCd="' + ordDtl.goodsCd + '" onclick="fnGoToGoodsDetail(this)">\n';
+					tag += '													<span class="thumb">\n';
+					tag += '														<img src="' + imageUrl + '/' + ordDtl.sysImgNm + '" width="100%" alt="">\n';
+					tag += '													</span>\n';
+					tag += '													<p>\n';
+					tag += '														<span class="brand">' + ordDtl.brandNm + '</span>\n';
 					// 배송 아이콘 처리
 					if (ordDtl.shotDelvYn == 'Y') {
-						tag += '								<span class="tag primary">총알배송</span>\n';
+						tag += '														<span class="tag primary">총알배송</span>\n';
 					} else if (ordDtl.selfGoodsYn == 'Y') {
-						tag += '								<span class="tag">STYLE24 일반배송</span>\n';
+						tag += '														<span class="tag">STYLE24 일반배송</span>\n';
 					} else {
-						tag += '								<span class="tag">업체직배송</span>\n';
+						tag += '														<span class="tag">업체직배송</span>\n';
 					}
-					tag += '							</p>\n';
-					tag += '							<p>\n';
-					tag += '								<span class="name">' + ordDtl.goodsNm + '</span>\n';
-					tag += '							</p>\n';
-					tag += '						</a>\n';
-					tag += '					</div>\n';
-					tag += '					<div class="gd_opt">\n';
-					tag += '						<div class="option_wrap">\n';
-					tag += '							<span class="title sr-only">주문 옵션</span>\n';
+					tag += '													</p>\n';
+					tag += '													<p>\n';
+					tag += '														<span class="name">' + ordDtl.goodsNm + '</span>\n';
+					tag += '													</p>\n';
+					tag += '												</a>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_opt">\n';
+					tag += '												<div class="option_wrap">\n';
+					tag += '													<span class="title sr-only">주문 옵션</span>\n';
 					// 세트아이템 옵션 처리
 					if (ordDtl.goodsType == 'G056_S') {
 						$.each(ordDtl.colorNmArr, function (index2, option) {
-							tag += '							<span class="option">' + ordDtl.itemNmArr[index2] + ' / ' + option + ' / ' + ordDtl.optCd2Arr[index2] + '</span>\n';
+							tag += '													<span class="option">' + ordDtl.itemNmArr[index2] + ' / ' + option + ' / ' + ordDtl.optCd2Arr[index2] + '</span>\n';
 						});
 					} else {
-						tag += '							<span class="option">' + ordDtl.colorNm + ' / ' + ordDtl.optCd2 + '</span>\n';
+						tag += '													<span class="option">' + ordDtl.colorNm + ' / ' + ordDtl.optCd2 + '</span>\n';
 					}
-					tag += '						</div>\n';
-					tag += '					</div>\n';
-					tag += '					<div class="gd_calc">\n';
-					tag += '						<p>\n';
-					tag += '							<span class="count"><em>' + (ordDtl.ordQty - ordDtl.cnclRtnQty) + '</em>개</span>\n';
-					tag += '						</p>\n';
-					tag += '						<p>\n';
+					tag += '												</div>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_calc">\n';
+					tag += '												<p>\n';
+					tag += '													<span class="count"><em>' + (ordDtl.ordQty - ordDtl.cnclRtnQty) + '</em>개</span>\n';
+					tag += '												</p>\n';
+					tag += '												<p>\n';
 					if ((ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)) {
-						tag += '							<span class="price_org"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt).addComma() + '</em>원</span>\n';
+						tag += '													<span class="price_org"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt).addComma() + '</em>원</span>\n';
 					}
-					tag += '							<span class="price_sale"><em>' + (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt).addComma() + '</em>원</span>\n';
-					tag += '						</p>\n';
-					tag += '					</div>\n';
-					tag += '				</div>\n';
-					tag += '				<div class="status_box">\n';
+					tag += '													<span class="price_sale"><em>' + (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt).addComma() + '</em>원</span>\n';
+					tag += '												</p>\n';
+					tag += '											</div>\n';
+					tag += '										</div>\n';
+					tag += '										<div class="status_box">\n';
 					// 상태값 처리
 					if (ordDtl.giftPackYn == 'Y') {
 						if (gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.giftLimitDay >= 0) {
-							tag += '					<p>주소 입력 대기중</p>\n';
+							tag += '											<p>주소 입력 대기중</p>\n';
 						} else if (!gagajf.isNull(ordDtl.recipBaseAddr)) {
-							tag += '					<p>선물 완료</p>\n';
+							tag += '											<p>선물 완료</p>\n';
 						} else if (ordDtl.ordDtlStat == 'G013_98' || ordDtl.ordDtlStat == 'G013_99' || ordDtl.giftLimitDay < 0) {
-							tag += '					<p>선물 취소</p>\n';
+							tag += '											<p>선물 취소</p>\n';
 						}
 					} else {
-						tag += '					<p>' + ordDtl.ordDtlStatNm + '</p>\n';
+						tag += '											<p>' + ordDtl.ordDtlStatNm + '</p>\n';
 					}
-					tag += '				</div>\n';
-					tag += '				<div class="button_box">\n';
+					tag += '										</div>\n';
+					tag += '										<div class="button_box">\n';
 					// 버튼 처리
 					if (ordDtl.giftPackYn == 'Y') {
 						// SMS 재발송 버튼
 						if (gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.giftLimitDay >= 0) {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>\n';
 						}
 
 						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
 						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35' || ordDtl.ordDtlStat == 'G013_40') {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
 						}
 
 						// 리뷰 쓰기 버튼
 						if (!gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.ordDtlStat != 'G013_98' && ordDtl.ordDtlStat != 'G013_99' && ordDtl.reviewableYn == 'Y' && ordDtl.reviewSq == null) {
-							tag += '					<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" goodsCd="' + ordDtl.goodsCd + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" goodsCd="' + ordDtl.goodsCd + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
 						}
 
 						// 쇼핑백담기 버튼(구매확정)
 						if (!gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.ordDtlStat != 'G013_98' && ordDtl.ordDtlStat != 'G013_99') {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>\n';
 						}
 					} else {
 						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
 						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35' || ordDtl.ordDtlStat == 'G013_40') {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
 						}
 
 						// 교환신청 버튼(배송중, 출고완료, 배송완료)
 						if (ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55' || ordDtl.ordDtlStat == 'G013_60') {
 							// 교환/반품 가능한 상품
 							if (ordDtl.changeableYn == 'Y' && ordDtl.returnableYn == 'Y') {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
 							}
 							// 교환 신청 불가 상품
 							else if (ordDtl.changeableYn == 'N' && ordDtl.returnableYn == 'Y') {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"><span>1:1 문의</span></button></p>\n';
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"><span>1:1 문의</span></button></p>\n';
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
 							}
 							// 반품 신청 불가 상품
 							else if (ordDtl.changeableYn == 'Y' && ordDtl.returnableYn == 'N') {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
 							}
 							// 교환/반품 신청 불가 상품
 							else {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
 							}
 						}
 
 						// 배송조회 버튼(배송중)
 						if (ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55') {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>\n';
 						}
 
 						// 구매확정 버튼(배송완료)
 						if (ordDtl.ordDtlStat == 'G013_60') {
-							tag += '					<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnDecideOrder(this);"><span>구매 확정</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnDecideOrder(this);"><span>구매 확정</span></button></p>\n';
 						}
 
 						// 리뷰작성 버튼(배송중, 배송완료, 구매확정)
 						if ((ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55' || ordDtl.ordDtlStat == 'G013_60' || ordDtl.ordDtlStat == 'G013_70') && ordDtl.reviewableYn == 'Y' && ordDtl.reviewSq == null) {
-							tag += '					<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" goodsCd="' + ordDtl.goodsCd + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" goodsCd="' + ordDtl.goodsCd + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
 						}
 
 						// 쇼핑백담기 버튼(구매확정)
 						if (ordDtl.ordDtlStat == 'G013_70') {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>\n';
 						}
 
 						// 1:1문의 버튼(구매확정)
 						if (ordDtl.ordDtlStat == 'G013_70' && (ordDtl.reviewableYn == 'N' || ordDtl.reviewSq > 0)) {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
 						}
 					}
-					tag += '				</div>\n';
-					tag += '			</div>\n';
+					tag += '										</div>\n';
+					tag += '									</div>\n';
 					// 하단 상태값 배너 처리
 					if (ordDtl.giftPackYn == 'Y') {
 						// 주소 입력 대기중
 						if (gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.giftLimitDay >= 0) {
-							tag += '			<div class="order_text"><p>' + ordDtl.recipNm + '님이 주소를 입력하기 전입니다. (입력기한 ' + ordDtl.giftLimitDt + ')</p></div>\n';
+							tag += '									<div class="order_text"><p>' + ordDtl.recipNm + '님이 주소를 입력하기 전입니다. (입력기한 ' + ordDtl.giftLimitDt + ')</p></div>\n';
 						}
 						
 						// 선물 완료
 						if (!gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.ordDtlStat != 'G013_98' && ordDtl.ordDtlStat != 'G013_99') {
-							tag += '			<div class="order_text"><p>' + ordDtl.recipNm + '님께 선물이 발송되었습니다.</p></div>\n';
+							tag += '									<div class="order_text"><p>' + ordDtl.recipNm + '님께 선물이 발송되었습니다.</p></div>\n';
 						}
 						
 						// 선물 취소
 						if (ordDtl.ordDtlStat == 'G013_98' && ordDtl.ordDtlStat == 'G013_99') {
-							tag += '			<div class="order_text"><p>주소 입력 기한이 경과되어 선물이 취소 되었습니다.</p></div>\n';
+							tag += '									<div class="order_text"><p>주소 입력 기한이 경과되어 선물이 취소 되었습니다.</p></div>\n';
 						}
 					} else {
 						// 주문 접수
 						if (ordDtl.ordDtlStat == 'G013_10') {
-							tag += '			<div class="order_text">';
-							tag += '				<p>주문이 완료되어 결제를 기다리고 있습니다.</p>';
+							tag += '									<div class="order_text">';
+							tag += '										<p>주문이 완료되어 결제를 기다리고 있습니다.</p>';
 							// 예약상품
 							if (!gagajf.isNull(ordDtl.delvResDt)) {
-								tag += '				<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
+								tag += '										<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
 							}
-							tag += '			</div>\n';
+							tag += '									</div>\n';
 						}
 						
 						// 상품준비중
 						if (ordDtl.ordDtlStat == 'G013_30') {
-							tag += '			<div class="order_text">';
-							tag += '				<p>배송할 상품을 준비 중입니다.</p>';
+							tag += '									<div class="order_text">';
+							tag += '										<p>배송할 상품을 준비 중입니다.</p>';
 							// 예약상품
 							if (!gagajf.isNull(ordDtl.delvResDt)) {
-								tag += '				<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
+								tag += '										<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
 							}
-							tag += '			</div>\n';
+							tag += '									</div>\n';
 						}
 						
 						// 배송준비중
 						if (ordDtl.ordDtlStat == 'G013_40') {
-							tag += '			<div class="order_text">';
-							tag += '				<p>상품 준비가 완료되어 곧 배송될 예정입니다.</p>';
+							tag += '									<div class="order_text">';
+							tag += '										<p>상품 준비가 완료되어 곧 배송될 예정입니다.</p>';
 							// 예약상품
 							if (!gagajf.isNull(ordDtl.delvResDt)) {
-								tag += '				<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
+								tag += '										<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
 							}
-							tag += '			</div>\n';
+							tag += '									</div>\n';
 						}
 						
 						// 배송중, 배송완료
@@ -570,62 +570,62 @@
 							// 교환/반품 신청 불가 상품 처리
 							if (ordDtl.changeableYn == 'N' || ordDtl.returnableYn == 'N') {
 								// 교환신청 불가 상품
-								tag += '			<div class="order_text">\n';
+								tag += '									<div class="order_text">\n';
 								if (ordDtl.changeableYn == 'N' && ordDtl.returnableYn == 'Y') {
-									tag += '				<p>해당 상품은 교환이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>\n';
+									tag += '										<p>해당 상품은 교환이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>\n';
 								}
 								// 반품신청 불가 상품
 								else if (ordDtl.changeableYn == 'Y' && ordDtl.returnableYn == 'N') {
-									tag += '				<p>해당 상품은 반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>\n';
+									tag += '										<p>해당 상품은 반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>\n';
 								}
 								// 교환/반품신청 불가 상품
 								else if (ordDtl.changeableYn == 'N' && ordDtl.returnableYn == 'N') {
-									tag += '				<p>해당 상품은 교환/반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>\n';
+									tag += '										<p>해당 상품은 교환/반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>\n';
 								}
 								
 								// 배송완료
 								if (ordDtl.ordDtlStat == 'G013_60') {
-									tag += '				<p>15일 후 자동으로 구매확정됩니다.</p>\n';
+									tag += '										<p>15일 후 자동으로 구매확정됩니다.</p>\n';
 								}
 								
-								tag += '			</div>';
+								tag += '									</div>';
 							} else if (ordDtl.ordDtlStat == 'G013_60') {
-								tag += '			<div class="order_text"><p>15일 후 자동으로 구매확정됩니다.</p></div>\n';
+								tag += '									<div class="order_text"><p>15일 후 자동으로 구매확정됩니다.</p></div>\n';
 							}
 						}
 
 						// 구매확정
 						if (ordDtl.ordDtlStat == 'G013_70' && ordDtl.reviewableYn == 'Y' && ordDtl.reviewSq == null) {
-							tag += '			<div class="order_text"><p>리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</p></div>\n';
+							tag += '									<div class="order_text"><p>리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</p></div>\n';
 						}
 					}
-					tag += '		</div>';
+					tag += '								</div>';
 				});
-				tag += '	</div>';
+				tag += '							</div>';
 				//사은품 처리
 				if (order.freeGiftList != null && order.freeGiftList.length > 0) {
-					tag += '	<div class="goods_foot">';
-					tag += '		<div class="order_gift">';
-					tag += '			<span class="title">사은품</span>';
-					tag += '			<ul>';
+					tag += '							<div class="goods_foot">';
+					tag += '								<div class="order_gift">';
+					tag += '									<span class="title">사은품</span>';
+					tag += '									<ul>';
 					$.each(order.freeGiftList, function(index, freeGift) {
-						tag += '				<li>' + freeGift.goodsNm + ' ' + '<span>(-' + freeGift.usePoint.addComma() + 'P)</span></li>';
+						tag += '										<li>' + freeGift.goodsNm + ' ' + '<span>(-' + freeGift.usePoint.addComma() + 'P)</span></li>';
 					});
-					tag += '			</ul>';
-					tag += '		</div>';
-					tag += '	</div>';
+					tag += '									</ul>';
+					tag += '								</div>';
+					tag += '							</div>';
 				}
-				tag += '</div>';
+				tag += '						</div>';
 			});
 		} else {
 			// 데이터 없음 표시
-			tag += '<div class="nodata">';
-			tag += '	<div class="txt_box">';
-			tag += '		<p>';
-			tag += '			주문내역이 없습니다.<br>';
-			tag += '		</p>';
-			tag += '	</div>';
-			tag += '</div>';
+			tag += '						<div class="nodata">';
+			tag += '							<div class="txt_box">';
+			tag += '								<p>';
+			tag += '									주문내역이 없습니다.<br>';
+			tag += '								</p>';
+			tag += '							</div>';
+			tag += '						</div>';
 		}
 
 		return tag;

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

@@ -82,7 +82,7 @@ var ajaxWishList = function () {
 				html+='	<div class="itemsGrp">';
 				
 				$.each(result, function (idx, item) {
-					if (item.regDt == month[i].regDt) {
+					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>';

+ 8 - 4
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -98,7 +98,7 @@
 								</div>
 								<div class="benefit_txt">
 									<p id="etcGrade">
-										<span id="ordSpan">	구매 건수 <strong id="ordCnt" class="c_primary" >0회</strong> </span>
+										<span id="ordSpan">	구매 건수 <strong id="ordCnt" class="c_primary">0회</strong> </span>
 										<span id="realOrdAmtSpan">, 구매 금액 <strong id="realOrdAmt" class="c_primary">0원 </span>
 										</strong> 더 구매하시면 <strong>
 										<span id="nextGrde" class="c_black"></span>로 등급UP!</strong>
@@ -269,11 +269,11 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
- 	let exptCustGrdeMap = [[${exptCustGrdeMap}]]
+ 	let exptCustGradeMap = [[${exptCustGradeMap}]]
 	let custGradeNm = [[${customerInfo.custGradeNm}]];
 
  	var fnInit = function () {
-		let expctCustGrade = exptCustGrdeMap.expctCustGrade;	// 예상등급
+		let expctCustGrade = exptCustGradeMap.expctCustGrade;	// 예상등급
 
 		//expctCustGrade.custGradeNo 10:VIP, 20: GOLD, 30:SILVER, 40:BRONZE, 50:WELCOME
 
@@ -290,7 +290,7 @@
 
  	// 다음 등급정책
  	var fnGetNextGradePolicyInfo = function (nextGradeNo) {
-		let custGradePolicy = exptCustGrdeMap.custGradePolicy;	// 등급별정책
+		let custGradePolicy = exptCustGradeMap.custGradePolicy;	// 등급별정책
 		let nextCustGradePolicy;
 		$(custGradePolicy).each(function(idx, item) {
 			if (Number(item.gradeCdNo) === nextGradeNo ) {
@@ -359,6 +359,10 @@
 		}
 	}
 
+	$('#btnDownGradeCoupon').on('click', function () {
+		gagajf.ajaxJsonSubmit('')
+	});
+
 	$(document).ready(function() {
 
 		fnInit();

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

@@ -33,6 +33,9 @@
 					<div class="cont_head">
 						<div>
 							<h3 th:text="${planInfo.planNm}"></h3>
+							<div class="period">
+								<span th:text="${planInfo.dispStdt}"></span> ~ <span th:text="${planInfo.dispEddt}"></span>
+							</div>
 							<div class="shareSet">
 								<button class="btn_share" data-name="openShare">공유하기</button>
 								<div class="shareWrap">
@@ -59,7 +62,6 @@
 							</div>
 						</div>
 					</div>
-				</div>
 				<div class="cont_body" th:if="${fsrcInfoTop != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
                     <!-- 프로모션배너 type1 --> 
                     <!-- <div class="promotion_visual type1" th:if="${fsrcInfoTop != null and planInfo.planGb == 'P'}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"></div> -->
@@ -83,6 +85,7 @@
                     </div> -->
                     <!-- 프로모션배너 type2 -->                    
                 </div>
+            </div>
             <!-- //상단 프로모션 배너 -->
             
             <th:block th:each="a, template : ${templateOrd}">
@@ -108,6 +111,85 @@
 						<div class="content dp_special" th:id="${a.tmplType + a.planContSq}"></div>
 				</th:block>
 			</th:block>
+			
+			 <!-- 댓글리스트 -->
+			<th:block th:if="${planInfo.replyYn == 'Y'}">
+			<div class="content wide cmt">
+				<div class="cont_body">
+					<div class="cmt_wrap">
+						<div class="cmt_write">
+							<form class="form_wrap">
+								<div class="cmt_tarea">
+									<textarea class="cmt_ans" name="replyText" id="replyText" placeholder="댓글을 입력해주세요.(500자 이내)" onclick="fnTextConfirm()"></textarea>
+									<p class="txt_cnt"><span id="cmt_cnt" class="c_primary">0</span>/500</p>
+								</div>
+								<div class="cmt_thumb">
+									<div class="form_field">
+										<div class="imgUpload">
+											<label for="fileAdd" class="fileAdd" >업로드</label>
+											<input type="file" id="fileAdd" name="files[]" />
+										</div>
+									</div>
+								</div>
+								<button type="submit" class="btn btn_dark"><span>등록</span></button>
+							</form>
+						</div>
+						<div class="cmt_group" id="replyList">
+					   <!-- <div class="cmt_list_tit">
+								<strong>댓글</strong><span class="cnt">(9,999)</span>
+							</div>
+							데이터 있을 시
+							<ul class="cmt_list">
+								<li>
+									<div class="cmt_top">
+										<span class="writer">DI2****</span>
+										<span class="date">2020.12.30</span>
+									</div>
+									<div class="cmt_cont">
+										<p>
+											애용하는 회원으로서 스타일24의 리뉴얼은 저의 일처럼 기쁘네요 ^^ 깔끔하고 세련된 느낌으로 단장해서 사이트 들어왔을 때 기분이 좋답니다! 사이트 리뉴얼 겸 겨울옷을  사려고 한창 둘러보았어요. <br/>
+											따뜻한 느낌 풀풀 내는아이템들로 찜꽁 해놓았답니다! 이왕 이벤트도 당첨되어서 포인트도 얻고, 또 구매도 하고 싶네요ㅋㅋㅋ <br/>
+											리뉴얼 하신거  축하드려요!!!  당첨되길 바랍니다.^^ 
+										</p>
+									</div>
+								</li>
+								<li>
+									<div class="cmt_top">
+										<span class="writer">ety****</span>
+										<span class="date">2020.12.30</span>
+									</div>
+									<div class="cmt_cont">
+										<div class="img_wrap clear">
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>
+										</div>
+										<p>모처럼 스타일24를 다시 애용해야 겠어요! 축하축하 ^^</p>
+										<button class="btn btn_default btn_del"><span>삭제</span></button>
+									</div>
+								</li>
+							</ul> -->
+							<!-- 데이터 있을 시 -->
+							<!-- 데이터 없을 시 -->
+							<div class="nodata" style="display:none;">
+								<div class="txt_box">
+									<p>
+										등록된 댓글이 없습니다.
+									</p>
+								</div>
+							</div>
+							<!-- //데이터 없을 시 -->
+						</div>
+						<div class="paging_wrap">
+							<ul class="pageNav" id="paging">
+								
+							</ul>
+						</div>
+					</div>
+				</div>
+			</div>
+			</th:block>            
             
             <!-- 관련상품 리스트 -->
 			<div class="content sticky_nav_list" th:if="${planCornerListLength>0}">
@@ -157,17 +239,16 @@
                                     </div>
                                 </div>  
                                 </th:block>          
-                            </div>
-                            </th:block>
-                        </div>                
-                    </div>
-                </div>
-		    </div>
+                          	</div>
+                          </div>
+                      </th:block>
+                  </div>         
+              </div>
+          </div>
 		  
             <!-- //관련상품 리스트 -->  
-
-            <!-- 다른 기획전 보기 -->
-            <div class="content other_dp_slide" th:if="${listSize > 0}">
+             <!-- 다른 기획전,이벤트 보기 -->
+            <div class="content other_promotion_slide">
                 <div class="cont_head">
                     <div>
                         <h4 th:if="${planInfo.planGb == 'P'}">다른 기획전 보기</h4>
@@ -179,7 +260,7 @@
                 <div class="cont_body">
                     <div class="swiper-container">
                         <div class="swiper-wrapper">
-                        	<th:block th:each="PlanData, PlanStat : ${planList}">
+                           <th:block th:each="PlanData, PlanStat : ${planList}">
                             <div class="swiper-slide">                   
                                 <a th:onclick="cfnGoToPlanDetail([[${PlanData.planSq}]])">
                                     <div class="thumb">
@@ -197,14 +278,15 @@
                     <div class="swiper-button-next"></div>
                 </div>
             </div>
-            <!-- //다른 기획전 보기 -->
-        </div>
-        <form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
-				<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
-		</form>
-<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
-
-</div>
+       </div>
+  </div>       
+  
+
+<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true"></div>
+<form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
+	<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
+</form>
+
 <script th:inline="javascript">
 
 let review = [[${reviewInfo}]];
@@ -215,6 +297,7 @@ let goods1 = [[${goods1Info}]];
 let goods2 = [[${goods2Info}]];
 let goods4 = [[${goods4Info}]];
 let template =[[${templateOrd}]];
+let replyList = [[${replyList}]];
 let _mall = [[${@environment.getProperty('domain.front')}]];
 let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
 let imgUrl=[[${@environment.getProperty('upload.image.view')}]];
@@ -652,15 +735,56 @@ var fnJoinConfirm = function () {
 			document.pollListForm.submit();
 		}
 	})
-		
-	
-
 }
 
+// 댓글 입력 확인
+var fnTextConfirm = function() {
+	//로그인 확인
+	if (!cfCheckLogin()) {
+		mcxDialog.alert("로그인 후 참여 가능합니다.");
+		$("#replyText").val('');
+		return false;
+	}
+}
 
+var ajaxReplyList = function () {
+	 $.getJSON('/planning/reply/list?planSq='+plan.planSq, function(result, status) {
+		 console.log(result);
+		 if (status == 'success') {
+			 $("#replyList").html('');
+			 var html = '';
+			 html += '<div class="cmt_list_tit">';
+			 html += '	<strong>댓글</strong><span class="cnt">('+result.replyList.length.addComma()+')</span>';
+			 html += '</div>';
+			 html += '<ul class="cmt_list">';
+			 $.each(result.replyList, function (idx, item) {
+				 html += '	<li>';
+				 html += '		<div class="cmt_top">';
+				 html += '			<span class="writer">'+item.maskingCustId+'</span>';
+				 html += '			<span class="date">'+item.entryDt+'</span>';
+				 html += '		</div>';
+				 html += '		<div class="cmt_cont">';
+				 html += '			<div class="img_wrap clear">';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>';
+				 html += '			</div>';
+				 html += '			<p>'+item.entryVal1+'</p>';
+				 if (item.entryCustNo == result.custNo) {
+					 html += '			<button class="btn btn_default btn_del"><span>삭제</span></button>';
+				}
+				 html += '		</div>';
+				 html += '	</li>';
+			 });
+			 html += '</ul>';
+		 }
+		 $("#replyList").append(html);
+	 });
+}
 
 $(document).ready( function() {
-
+	ajaxReplyList();
 	//공유 버튼 토글 
 	$("button[data-name=openShare]").on("click", function(){
 		$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
@@ -761,16 +885,38 @@ $(document).ready( function() {
             clickable: true,
         },
     });
-
-    /* SLIDE - 다른 기획전 보기 */
-    var other_dp_slide_slide = new Swiper ('.other_dp_slide .swiper-container', {
+    /* SLIDE - 다른 기획전,이벤트 보기 */
+    var other_slide_slide = new Swiper ('.other_promotion_slide .swiper-container', {
 		slidesPerView: 5,
         spaceBetween: 20,
 		navigation: {
-			nextEl: '.other_dp_slide .swiper-button-next',
-			prevEl: '.other_dp_slide .swiper-button-prev',
+			nextEl: '.other_promotion_slide .swiper-button-next',
+			prevEl: '.other_promotion_slide .swiper-button-prev',
 		},
 	});            
+    
+	 // 첨부파일 갯수제한
+	$('.imgUpload .fileAdd').click(function(){
+		var maxFileLength = 10; /* 최대 파일 갯수를 입력해 주세요 */
+		var imgFiles=$('.imgUpload .pics');
+		if (imgFiles.length >= maxFileLength) {
+			alert('이미지는 최대' + maxFileLength +'장 까지 첨부 가능합니다.');
+			$('#fileAdd').attr("disabled",true);
+		} else if(imgFiles.length < maxFileLength){
+			$('#fileAdd').removeAttr("disabled");
+		}
+	});			
+
+	//댓글 작성시 글자 카운트
+	$('.cmt_ans').keyup(function (e){
+		var content = $(this).val();
+		$('#cmt_cnt').html(content.length);
+		if (content.length > 500){
+			alert("최대 500자까지 입력 가능합니다.");
+			$(this).val(content.substring(0, 500));
+			$('#cmt_cnt').html("500");
+		}
+	});
 
 });
 </script>

+ 25 - 22
src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html

@@ -66,7 +66,7 @@
 						<div class="event_calander">
 							<div class="check_title">
 								<p>출석할수록 늘어나는 혜택!</p>
-								<div class="title"><strong>1월</strong> 출석체크</div>
+								<div class="title"><strong></strong> 출석체크</div>
 							</div>
 							<div class="check_info">
 								<span class="today">오늘</span>
@@ -76,7 +76,7 @@
 								<div class="my_attend_day">
 									<p>나의 출석 일수는?</p>
 									<span class="day">
-										<span>11</span>일
+										<span></span>일
 									</span>
 								</div>
 								<div class="tbl">
@@ -155,12 +155,12 @@
 							<img src="/images/pc/ico_content_find.png" alt="유의사항">
 							<p>유의사항</p>
 						</div>
-						<div class="announce_list">
-							<ul>
+						<div class="announce_list" th:if="${fsrcInfoTop != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
+							<!-- <ul>
 								<li>본 이벤트는 ID당 1회만 참여 가능합니다.</li>
 								<li>설문조사 참여 시 포인트를 지급해드립니다. (이벤트 종료 후, 일괄 지급)</li>
 								<li>지급된 포인트는 [ 마이페이지 > 나의 지갑 ] 메뉴에서 확인할 수 있습니다.</li>
-							</ul>
+							</ul> -->
 						</div>
 					</div> 
 				</div>
@@ -283,14 +283,15 @@ var appendHtml = function () {
 		html += '</tr>\n';
 
 		$("#monthTbody").append(html);
-		
-		$.each(custAttendList, function(idx1, item1) {
-			if(item1.entryDt == item.sun || item1.entryDt == item.mon || item1.entryDt == item.tue|| item1.entryDt == item.wed
-					|| item1.entryDt == item.thu || item1.entryDt == item.fri || item1.entryDt == item.sat){
-				$("#td_"+item.tue).attr("class","complete");
-			}
-		})
-	
+		if (cfCheckLogin()) {
+			$.each(custAttendList, function(idx1, item1) {
+				$('.day').html('<span>' + custAttendList.length + '</span>일');
+				if(item1.entryDt == item.sun || item1.entryDt == item.mon || item1.entryDt == item.tue|| item1.entryDt == item.wed
+						|| item1.entryDt == item.thu || item1.entryDt == item.fri || item1.entryDt == item.sat){
+					$("#td_"+item1.entryDt).attr("class","complete");
+				}
+			})
+		}
 	})    
 } 
 
@@ -315,19 +316,21 @@ var fnInfoConfirmCallBack = function(result) {
 };
 
 $(document).ready(function() {
+	appendHtml();
+	
 	if (!cfCheckLogin()) {
 		$(".day").html("<span>0</span>일");
+	}else{
+		$.each(custAttendList, function(idx, item) {
+			$('.day').html('<span>' + custAttendList.length + '</span>일');
+			if(item.entryDt == date){
+				$("#td_"+date).attr("class","complete");
+			}else{
+				$("#td_"+date).attr("class","today"); 
+			}
+		})
 	}
 	
-	appendHtml();
-	
-	$.each(custAttendList, function(idx, item) {
-		if(item.entryDt == date){
-			$("#td_"+date).attr("class","complete");
-		}else{
-			$("#td_"+date).attr("class","today"); 
-		}
-	})
 	
 	
 	

+ 1 - 1
src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html

@@ -104,7 +104,7 @@ let fnGetEventList = function() {
 				if (result.length > 0) {
 					$('#eventTotCnt').html('<span>' + result.length.addComma() + '</span>개의 이벤트');
 					
-					$('#eventList').html('');
+					$("#divEventList").html('');
 					let tag = '';
 					tag += '<div  class="thumb_list">';
 					tag += '	<ul>';

+ 1 - 0
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -30,6 +30,7 @@
 			<div class="content wide dp_hotdeal"> <!-- 페이지특정 클래스 = dp_hotdeal -->
 				<div class="cont_body">
                     <div class="hotdeal">
+                    <img src="/images/pc/thumb/hotdeal_bg2.jpg" alt="핫한 아이템을 핫한 가격에 LAST DAY DEAL">
                         <div id="countdown">
                             <span id="h-hours"></span>
                             <span id="h-minutes"></span>

+ 363 - 0
src/main/webapp/biz/goodsSession.js

@@ -0,0 +1,363 @@
+//****************상품목록  start **********************************
+var categoryGoodsList = [];
+var cnt = 1;
+var email = '';
+var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage, endRow) {
+	console.log('fnCreateGoodsList');
+
+	var tag = '';
+	var rank = 0;
+	if(lastPage!='1'){
+		rank = endRow;
+	}
+	$.each(result.dataList, function(idx, item) {
+		if (idx < 4) {
+			categoryGoodsList.push(item.goodsCd);
+		}
+
+		tag += '<div class="item_prod">';
+		tag += '	<div class="item_state">';
+		tag += '		<button type="button" class="itemLike">관심상품 추가</button>';
+		tag += '		<a href="#none" class="itemLink">';
+		tag += '			<div class="rank ranker"><span>'+(rank+(idx+1))+'</span></div>';
+		tag += '			<div class="itemPic">';
+		tag += '				<img alt="BLUE-a" class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'">';
+		tag += '			</div>';
+		tag += '			<p class="itemBrand">BRAND NAME</p>';
+		tag += '			<div class="itemName">'+item.goodsFullNm+'</div>';
+		tag += '			<p class="itemPrice">80,100';
+		tag += '				<span class="itemPrice_original">89,000</span>';
+		tag += '				<span class=" itemPercent">10%</span>';
+		tag += '			</p>';
+		tag += '			<div class="itemcolorchip">';
+		tag += '				<span class="chip_color35" value="ABM">BEIGE</span>';
+		tag += '				<span class="chip_color54" value="BDS">BLACK</span>';
+		tag += '				<span class="chip_color40" value="YBR">WHITE</span>';
+		tag += '			</div>';
+		tag += '			<p class="itemBadge">';
+		tag += '				<span class="badge13">베스트 </span>';
+		tag += '			</p>';
+		tag += '			<div class="itemComment">#주문 폭주 상품</div>';
+		tag += '		</a>';
+		tag += '	</div>';
+		tag += '</div>';
+	});
+	console.log('fnCreateGoodsList11');
+	if (cnt == 1) {
+		// <!-- Criteo 카테고리/리스팅 태그 -->
+		window.criteo_q = window.criteo_q || [];
+		var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d";
+		window.criteo_q.push(
+			{event: "setAccount", account: 26073}, // 이 라인은 업데이트하면 안됩니다
+			{event: "setEmail", email: email}, // 유저가 로그인이 안되 있는 경우 빈 문자열을 전달
+			{event: "setSiteType", type: deviceType},
+			{event: "viewList", item: categoryGoodsList} // 가장 위에있는 3개의 상품 ID를 전달
+		);
+		// <!-- END 카테고리/리스팅 태그 -->
+		cnt++;
+	}
+	console.log('fnCreateGoodsList1122233');
+	return tag;
+}
+
+
+// 인피니트 스크롤 초기화
+var fnCategoryGoodsInfiniteScrollInit = function(){
+	sessionStorage.removeItem(document.location.href);
+	//History 초기화
+	$("#listBox").html("");
+}
+
+//****************상품목록  end **********************************
+
+//****************상품상세  start **********************************
+// 브랜드 인기상품 (모바일)
+var jfGoodsCustRecommendSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsOther/frame", "html", "goodsCustRecommendArea", params);
+}
+
+//상품베너, 다른컬러, 함께본(카테고리 ) 상품
+var jfGoodsOtherSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsOther/frame", "html", "goodsOtherArea", params);
+}
+
+//상품평
+var jfGoodsReviewSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsReview/frame", "html", "goodsReviewArea", params);
+}
+
+//상품문의
+var jfGoodsQnaSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsQna/frame", "html", "goodsQnaArea", params);
+}
+
+//재고수정시
+var jfStockChange = function(gb){
+
+	var obj = $("#goodsQty");
+	var objQty = parseInt($("#goodsQty").val());
+	if(gb == 'minus'){
+		if(gagajf.isNull($("#cartForm  input[name=sizeCd]").val())){
+			mcxDialog.alert("사이즈를 선택하세요.");
+		} else if(objQty <= parseInt($("#cartForm  input[name=minOrdQty]").val()) && !gagajf.isNull($("#cartForm  input[name=sizeCd]").val())){
+			mcxDialog.alert("구매하실 수 있는 최소 수량입니다.");
+		} else {
+			obj.val(objQty-1);
+		}
+	} else {
+		if(gagajf.isNull($("#cartForm  input[name=sizeCd]").val())){
+			mcxDialog.alert("사이즈를 선택하세요.");
+		}else if(objQty < parseInt($("#cartForm  input[name=maxOrdQty]").val())){
+			obj.val(objQty+1);
+		}else{
+			mcxDialog.alert("구매하실 수 있는 최대 수량입니다.");
+		}
+	}
+
+	$("#cartForm  input[name=ordQty]").val(obj.val());
+}
+
+//장바구니담기(단품)
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 바로구매, 장바구니 담기
+ * <pre>
+ *		addCart(btnType,goodsType);
+ * </pre>
+ * @param  : btnType - 장바구니. '' , 바로구매 : 'DIRECT'. 필수
+ * @param  : layer - 레이어 여부. 딜상품일 경우 . '' : 본창, 'layer':레이어창
+ * @since  : 2020/07/23
+ * @author : eskim
+ */
+var addCart = function(btnType, layer){
+	var params = [];
+	var goodsType = $("#cartForm  input[name=goodsType]").val();
+
+	if (goodsType == 'N'){
+		if (gagajf.isNull($("#cartForm  input[name=sizeCd]").val())) {
+			mcxDialog.alertC('사이즈를 선택해 주십시오.');
+			return;
+		}
+		var obj = new Object();
+
+		obj.btnType = btnType;
+		obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+		obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
+		obj.itemCd = $("#cartForm  input[name=goodsCd]").val();
+		obj.sizeCd = $("#cartForm  input[name=sizeCd]").val();
+		obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
+		obj.itemQty = 1;
+		obj.planDtlSq =$("#cartForm  input[name=planDtlSq]").val();
+		params.push(obj);
+
+	}else if (goodsType == 'S'){
+		var target=$('.sizelistCart');
+		var targetSize=target.length;
+		var itemSize = target.find('.item').find('input[type=radio]:checked').length;
+		if (targetSize != itemSize){
+			mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+			return false;
+		}
+
+		target.find('.item').find('input[type=radio]:checked').each(function() {
+
+			var arrInfo = $(this).val().split('|');	// 상품코드|사이즈|구성수량
+
+			var obj = new Object();
+			obj.btnType = btnType;
+			obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
+			obj.itemCd = arrInfo[0];
+			obj.sizeCd = arrInfo[1];
+			obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
+			obj.itemQty = Number(arrInfo[2]);
+			obj.planDtlSq =$("#cartForm  input[name=planDtlSq]").val();
+			params.push(obj);
+
+		});
+
+	}else{
+		if (layer == 'layer'){
+
+			var goodsSize = $("#optionListLayer").children('ul').length
+			if (goodsSize <= 0){
+				mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+				return false;
+			}
+			$('#optionListLayer > ul').each(function() {
+
+				var arrInfo = $(this).find('input[name="coption"]').val().split(':');
+
+				var obj = new Object();
+				obj.btnType = btnType;
+				obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+				obj.goodsCd =  $("#cartForm  input[name=goodsCd]").val();
+				obj.itemCd = arrInfo[0];
+				obj.sizeCd = arrInfo[1];
+				obj.goodsQty = $(this).find('input[name="cea"]').val();
+				obj.itemQty = 1;
+				obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+				params.push(obj);
+
+			});
+		}else{
+			if (_frontGb == "P"){
+				var goodsSize = $("#optionListDiv").children('ul').length
+				if (goodsSize <= 0){
+					mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+					return false;
+				}
+				$('#optionListDiv > ul').each(function() {
+
+					var arrInfo = $(this).find('input[name="coption"]').val().split(':');
+					$(this).find('input[name="coption"]').attr('goodsCd')
+
+					var obj = new Object();
+					obj.btnType = btnType;
+					obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+					obj.goodsCd =  $("#cartForm  input[name=goodsCd]").val();
+					obj.itemCd = arrInfo[0];
+					obj.sizeCd = arrInfo[1];
+					obj.goodsQty = $(this).find('input[name="cea"]').val();
+					obj.itemQty = 1;
+					obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+					params.push(obj);
+				});
+			}else{
+				var goodsSize = $("#optionListDiv").children('dl').length
+				if (goodsSize <= 0){
+					mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+					return false;
+				}
+				$('#optionListDiv > dl').each(function() {
+
+					var arrInfo = $(this).find('input[name="coption"]').val().split(':');
+					$(this).find('input[name="coption"]').attr('goodsCd')
+
+					var obj = new Object();
+					obj.btnType = btnType;
+					obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+					obj.goodsCd =  $("#cartForm  input[name=goodsCd]").val();
+					obj.itemCd = arrInfo[0];
+					obj.sizeCd = arrInfo[1];
+					obj.goodsQty = $(this).find('input[name="cea"]').val();
+					obj.itemQty = 1;
+					obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+					params.push(obj);
+				});
+			}
+		}
+	}
+
+	//DIRECT : 바로 구매. '' : 장바구니
+	cfnPutCartList(params);
+
+}
+
+
+//url 복사
+var jfCopyLinkUrl = function(goodsCd){
+	cfnCopyLinkUrl(location.protocol + _PAGE_GOODS_DETAIL + goodsCd);
+}
+
+//SNS 연동
+var jfSendToSns = function(goodsCd, goodsNm, goodsImg, snsGb) {
+	var linkUrl = location.protocol + _PAGE_GOODS_DETAIL + goodsCd;
+
+	if (goodsImg.indexOf("http") <= -1 || goodsImg.indexOf("https") <= -1){
+		var _goodsImgUrl = _uploadGoodsUrl;
+		goodsImg = "https:"+goodsImg;
+	}
+
+	if (snsGb == "FB"){
+		cfnSendToFaceBook(linkUrl,goodsNm ,goodsImg);
+	}else if (snsGb == "KK"){
+		if (_frontGb == "P"){
+			cfnSendToKakao(linkUrl,goodsNm ,goodsImg);
+		}else{
+			cfnSendToKakaoMob(linkUrl,goodsNm ,goodsImg);
+		}
+	}
+}
+
+//****************상품상세  end **********************************
+
+//****************상품검색  start **********************************
+// 상품 정렬
+var fnSortChange = function(sortGb) {
+	if($("#searchForm input:hidden[name=sortGb]").val()==sortGb){
+		return;
+	}
+	if (_frontGb == "P"){
+		$('.productsection .filterbutton').html('필터 열기<span>현재 상태 : 닫힘</span>').removeClass('active');
+		$('.filterlist').css({'height':'0'});
+	}else{
+		areaClose();
+	}
+	$("#searchForm input[name=sortGb]").val(sortGb);
+	fnCategoryGoodsInfiniteScrollInit();
+	fnGoodsListSearch();
+}
+
+
+var filterHtml = '';
+var filterStatHtml = '';
+// 필터 적용
+var fnFilterSearch = function() {
+	$(".filterstate .filter_div").empty();
+	fnCategoryGoodsInfiniteScrollInit();
+	filterHtml = '';
+	filterStatHtml = '';
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+	fnFilterSet('brand');
+	fnFilterSet('size');
+	fnFilterSet('color');
+	fnFilterSet('price');
+	if (_frontGb == "P"){
+		$('.productsection .filterbutton').html('필터 열기<span>현재 상태 : 닫힘</span>').removeClass('active');
+		$('.filterlist').css({'height':'0'});
+	}else{
+		areaClose();
+	}
+	fnGoodsListSearch();
+}
+
+var fnFilterSet = function(searchId) {
+
+	$("#searchForm input:hidden[name="+searchId+"Search]").remove();
+	$(".filterstate li[name="+searchId+"Stat]").remove();
+	var tag = '';
+	$('#filterForm input[name='+searchId+']:checked').each(function(){
+		tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).val()+'"/>\n';
+		$("#searchForm").append(tag);
+		filterHtml += tag;
+		if(_frontGb != "P"){
+			tag = '<button type="button" class="removefilter" onclick="fnFilterStatRemove(\''+searchId+'\', \''+$(this).val()+'\');">'+$(this).closest('li').children('label').text()+'</button>';
+			$(".filterstate .filter_div").append(tag);
+		}else{
+			tag = '<li name="'+searchId+'Stat">'+$(this).closest('li').children('label').text()+'<button type="button" onclick="fnFilterStatRemove(\''+searchId+'\', \''+$(this).val()+'\');">DELETE</button></li>';
+			$(".filterstate").append(tag);
+		}
+		filterStatHtml += tag;
+	});
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+}
+
+var fnFilterStatRemove = function(searchId, val){
+	$('#filterForm input[name='+searchId+']:checked').each(function(){
+		if($(this).val()==val){
+			$(this).attr("checked", false);
+			$(this).parent().removeClass("active");
+		}
+	});
+	fnFilterSearch();
+}
+
+// 필터 초기화
+var fnFilterReset = function() {
+	filterReset();
+}
+//****************상품검색  end **********************************

+ 8 - 0
src/main/webapp/ux/mo/css/common_m.css

@@ -372,6 +372,14 @@ input[type="file"] {
 .select_dress:active, .select_dress.active {background-color: #ffffff;border: 1px solid #222222;border-bottom: 1px solid #dddddd;}
 .select_dress:active:after, .select_dress.active:after {top: 9px;border-color: transparent transparent #888888 transparent;}
 
+/* select-pure */
+/* pure-setting */.select.pure select {-webkit-appearance: none;-moz-appearance: none;-ms-appearance: none;appearance: none;outline: 0;box-shadow: none;border: 0 !important;background-image: none;}
+/* Remove IE arrow */.select.pure select::-ms-expand {display: none;}
+.select.pure {position: relative;display: flex;line-height: 3;overflow: hidden;width: 10rem;right: 0;top: 0;}
+.select.pure select {flex: 1;padding: 0 .5em;cursor: pointer;position: relative;box-sizing: border-box;height: 4.5rem;line-height: 1;cursor: pointer;padding: 0.5rem;background-color: #ffffff;border: 0px solid #dddddd;font-size: 1.2rem;}
+.select.pure::after {content: '';width: 0;height: 0;box-sizing: border-box;position: absolute;top: 2.0rem;right: 0rem;border: 0.4rem solid transparent;border-color: #222222 transparent transparent transparent;cursor: pointer;pointer-events: none;-webkit-transition: .25s all ease;-o-transition: .25s all ease;transition: .25s all ease;}
+.select.pure:hover::after {color: #666666;}
+
 /* select-custom */
 .select_custom {
 	cursor: pointer;

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

@@ -911,7 +911,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .my .lnb_list li a {display: block; padding: 2rem; background: url(/images/mo/ico_lnb_arrow.png) no-repeat right 2rem center; background-size:0.7rem 1.26rem;}
 
 .my .mem_rank {position: relative; padding:1.6rem 0; padding-left: 6rem;}
-.my .mem_rank .mem_name {dib font-size: 1.8rem; font-weight: 300;}
+.my .mem_rank .mem_name {font-size: 1.8rem; font-weight: 300;}
 .my .mem_rank .mem_name strong {font-weight: 500;}
 .my .mem_rank .rank_txt {display: inline-block; font-size: 1.8rem; color: #666; font-weight: 500; padding-right: 1.7rem; background: url(/images/mo/ico_btn_detail03.png) no-repeat right top 5px; background-size:0.7rem 1.3rem;}
 .my .mem_rank .rank_txt02 button {display: inline-block; font-size: 14px; padding-right: 13px; margin-right: 20px; background: url(/images/pc/ico_mysm_arrow.png) no-repeat right top 6px;}
@@ -2208,6 +2208,7 @@ main.container .shopping_bag .inner:last-child {padding-bottom: 0;}
 
 .shopping_bag .part_goods .goods_btn_wrap {margin: 1.8rem 0 0; padding-left: 3rem;}
 .goods_btn_wrap > div > .btn.btn_primary_line {border:1px solid #fd4802;}
+.goods_btn_wrap > div > button[disabled] {background: #000;color: #fff;border: 1px solid #000000 !important;}
 .shopping_bag .goods_dlvr_save {margin-top: 1.8rem; text-align: center;}
 .shopping_bag .goods_dlvr_save a.btn_popup_save {display:inline-block; padding-right:20px; text-align: center; color:#fd4802; font-size:1.1rem; font-weight:200; line-height:14px; text-decoration:underline; background:url('/images/mo/ico_go_save.png') no-repeat 98% 45%; background-size:1.1rem;}
 

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

@@ -2563,7 +2563,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 
 	/***** pd_detail *****/
 	.pd_detail {}
-	.pd_detail .thumb {display:block; position:relative; width:100%; height:0px; line-height:0; font-size:0; padding-top:150%; overflow:hidden;background:#f5f5f5;background: #ffffff;border: 1px solid #f5f5f5;box-sizing: border-box;}
+	.pd_detail .thumb {display:block; position:relative; width:100%; height:0px; line-height:0; font-size:0; padding-top:150%; overflow:hidden;background:#f5f5f5;background: #ffffff;border: 1px solid #f5f5f5;box-sizing: content-box;}
 	.pd_detail .thumb img,
 	.pd_detail .thumb video {position:absolute; left:0; top:50%; width:100%; transform:translateY(-50%) ; z-index:2;}
 	.pd_detail .btn_popup {display:inline-block; padding:0px; box-sizing:border-box;}

+ 205 - 0
src/main/webapp/ux/plugins/gaga/gaga.infinite.scroll.js

@@ -0,0 +1,205 @@
+/*
+ * Inifinite Scroll Java Script written by gagamel.
+ *
+ * Copyright (c) 2016 gagamel (nogdoo.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2016-04-28 $
+ *
+ * 사용 예)
+ * 		// HTML 태그는 다음과 같은 구조로 되어 있어야 하며
+ * 		// id 명칭은 infiniteContainer, listBoxOuter, listBox 가 필요하다.
+ * 		<section id="infiniteContainer">
+ * 			<div id="listBoxOuter">
+ * 				<ul id="listBox">
+ * 				</ul>
+ *			</div>
+ *		</section>
+ *
+ * 		// JQUERY History 파일과 인피니트 스크롤 관련 자바스크립트 파일을 import 되어 있어야 한다.
+ * 		<script type="text/javascript" src="/ux/plugins/jquery.history.min.js"></script>
+ * 		<script type="text/javascript" src="/ux/plugins/gaga.infinite.scroll.js"></script>
+ *
+ * 		<script type="text/javascript">
+ * 			// 인피니트 스크롤에 대한 History 정보를 가져오기 위해 함수를 호출한다.
+ *			// History 정보가 없을 경우 fnGetInfiniteScrollDataList 함수가 호출된다.
+ * 			$(function() { gagaInfiniteScroll.getHistory(); });
+ *
+ *			// 인피니트 스크롤 이벤트 발생 시 데이터 가져오기
+ *			var fnGetInfiniteScrollDataList = function(pageNum) {
+ *				// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+ *				gagajf.ajaxSubmitForm(document.searchForm, "/goods/list", "json", gagaInfiniteScroll.jsonToHtml);
+ *			}
+ *
+ *			// 인피니트 스크롤 이벤트 발생 시 가져온 데이터를 특정 태그에 append
+ *			// fnDrawInfiniteScrollData(result, pageNum) 함수 구현
+ *			// 		이 함수 내에서의 로직은
+ *			//		1. 가져온 데이터로 HTML 태그를 만든다.
+ *			// 		2. 만든 태그를 append 하는 gagaInfiniteScroll.draw() 함수를 호출
+ *		</script>
+ */
+
+var gagaInfiniteScroll = {
+	pageStatus : {
+		  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
+		, loadPage : 0      // 로드할 페이지
+		, loadAlign : 'not' // 로드 상태(prev, next, not)
+		, historyScroll : 0 //
+		, nowPage : null    // 현재 페이지
+		, pageUrl : {       // page url
+		}
+	},
+	obj : {
+		  $ajaxBoxOuter : $('#listBoxOuter')
+		, $ajaxBox : $('#listBox')
+		, $window : $(window)
+		, $loadingBar : '<div style="width: 100%; padding-top: 50px; text-align: center;" id="loadingBar"><img src="/ux/plugins/gaga/loader.gif" style="width:25px; height:25px;"/></div>'
+//		, $loadingBar : '<div style="width: 100%; padding-top: 50px; text-align: center;" id="loadingBar"><img src="/images/hsmob/common/loading_bar_01.gif" width="24px" height=" 22px"/></div>'
+	},
+	scrollCheck : function() {
+		var obj = this.obj, stat = this.pageStatus;
+
+		if (obj.$window.scrollTop() >= obj.$ajaxBox.offset().top + obj.$ajaxBox.height() - obj.$window.height()) { // 더보기
+			if (stat.loadAlign == 'not') {
+				var pageLen = this.pageStatus.pageNum.length - 1;
+				var nextPageNum = this.pageStatus.pageNum[pageLen] + 1;
+				this.pageStatus.pageNum.push(nextPageNum);
+				this.pageStatus.loadPage = nextPageNum;
+				stat.loadAlign = 'next';
+				this.getDataList();
+			};
+		}
+	},
+	getDataList : function() {
+		/*if (this.pageStatus.loadAlign == 'prev') {
+			this.obj.$ajaxBoxOuter.prepend($(this.obj.$loadingBar));
+		} else if (this.pageStatus.loadAlign == 'next') {
+			this.obj.$ajaxBoxOuter.append($(this.obj.$loadingBar));
+		};*/
+
+		$(".wrap-loading").removeClass('display-none');
+
+		// 인피니트 스크롤 이벤트에서 호출될 함수(데이터 가져오기 등)
+		// fnGetInfiniteScrollDataList 함수는 개발단에서 구현해야 한다.
+		fnGetInfiniteScrollDataList(this.pageStatus.loadPage);
+	},
+	getHistory : function() {
+		var historyData = History.getState();
+
+		if (historyData.data.pageNum === undefined || historyData.data.pageNum === '' || historyData.data.htm === undefined || historyData.data.htm == '') {
+			this.pageStatus.loadPage = 0;
+			this.pageStatus.pageNum[0] = 0;
+			this.pageStatus.loadAlign = 'next';
+			this.pageStatus.historyScroll = 0;
+
+			this.getDataList();
+		} else {
+			this.pageStatus.loadPage = historyData.data.pageNum;
+			this.pageStatus.pageNum[0] = historyData.data.pageNum;
+			this.pageStatus.historyScroll = historyData.data.dataIndex;
+			this.pageStatus.loadAlign = 'next';
+
+			gagaInfiniteScroll.draw(historyData.data.htm);
+		};
+
+		$(window).on('scroll', function() {
+			gagaInfiniteScroll.scrollCheck();
+		});
+	},
+	draw : function(htm, scrollTop, containerHeight) {
+		if (htm == 'not') {
+			$(".wrap-loading").addClass('display-none');
+			this.pageStatus.loadAlign = 'top';
+		} else {
+			var startH = $('#infiniteContainer').height();
+			var $addHtm = $(htm);
+			var $imgs = $addHtm.find('img');
+			var loadCheck = 0;
+			var len = $imgs.length;
+
+			if (scrollTop && containerHeight) {
+			} else {
+			}
+
+			$addHtm.find('img.lazy').lazyload({root: null,
+						rootMargin: "100px",
+						threshold: 0});
+
+			$.each($imgs, function(index) {
+				$imgs.eq(index).on('load',function() {
+					loadCheck++;
+					imgLpadComp();
+				});
+			});
+
+			var imgLpadComp = function() {
+				if (len - 1 == loadCheck) {
+					gagaInfiniteScroll.pushHistory(
+							  gagaInfiniteScroll.pageStatus.nowPage
+							, $(window).scrollTop()
+							, $('#infiniteContainer').height()
+							, gagaInfiniteScroll.pageStatus.loadPage
+							, 0
+							, gagaInfiniteScroll.obj.$ajaxBox.html());
+					if (scrollTop && containerHeight) {
+						gagaInfiniteScroll.obj.$window.scrollTop.scrollTop(0).scrollTop(scrollTop);
+					} else {
+						gagaInfiniteScroll.obj.$window.scrollTop(gagaInfiniteScroll.obj.$window.scrollTop() + 1);
+					}
+				};
+			};
+
+			$(".wrap-loading").addClass('display-none');
+
+			// Append HTML
+			this.obj.$ajaxBox.append($addHtm);
+
+			if (scrollTop && containerHeight) {
+				gagaInfiniteScroll.obj.$window.scrollTop.scrollTop(0).scrollTop(scrollTop);
+			} else {
+				$(window).scrollTop($(window).scrollTop() + 1);
+			}
+
+			this.pageStatus.loadAlign = 'not';
+		}
+	},
+	pushHistory : function(page, sScrollTop, sHeight, sPageNum, sDataIndex, sHtml) {
+		History.replaceState({
+			  state: page
+			, scroll: sScrollTop
+			, height: sHeight
+			, pageUrl: gagaInfiniteScroll.pageStatus.pageUrl
+			, name: gagaInfiniteScroll.pageStatus.nowPage
+			, pageNum : sPageNum
+			, dataIndex : sDataIndex
+			, htm : sHtml
+		}, "", "");
+	},
+	pushLinkHistory : function(pageNum, dataIndex, obj) { // 링크에서 사용
+		var $pageNum = (pageNum || pageNum == 0) ? pageNum : '';
+		var $dataIndex = (dataIndex || dataIndex == 0) ? dataIndex : '';
+		var $html = (obj) ? $(obj).parents('#listBox').html() : '';
+
+		History.replaceState({
+			  state : gagaInfiniteScroll.pageStatus.nowPage
+			, scroll : $(window).scrollTop()
+			, height : $('#infiniteContainer').height()
+			, pageUrl : gagaInfiniteScroll.pageStatus.pageUrl
+			, name : gagaInfiniteScroll.pageStatus.nowPage
+			, pageNum : $pageNum
+			, dataIndex : $dataIndex
+			, htm : $html
+		}, "", "");
+
+		return false;
+	},
+	jsonToHtml : function(result) {
+		// Data 가져온 후 실행될 함수
+		// fnDrawInfiniteScrollData 함수는 개발단에서 구현해야 한다.
+		if (result.dataList == "not") // data가 더 이상 없으면
+			fnDrawInfiniteScrollData('not', result.CURRENT_PAGE - 1);
+		else
+			fnDrawInfiniteScrollData(result, result.CURRENT_PAGE - 1);
+	}
+};

+ 0 - 4
src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollSession.js

@@ -137,10 +137,6 @@ var gagaInfiniteScroll = {
 			} else {
 			}
 
-			$addHtm.find('img.lazy').lazyload({root: null,
-						rootMargin: "100px",
-						threshold: 0});
-
 			$.each($imgs, function(index) {
 				$imgs.eq(index).on('load',function() {
 					loadCheck++;

+ 11 - 4
src/main/webapp/ux/style24_link.js

@@ -584,6 +584,9 @@ function cfGoodsInstockAlarmInfo(goodsCd, colorCd) {
 */
 function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq) {
 	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
 
 	if ($('#layer_review_best').length == 0) {
 		$('body').append(str);
@@ -607,7 +610,10 @@ function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq) {
 */
 function cfGoodsReviewPhoto(goodsCd) {
 	var str = '<div class="modal fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="pdPhotoReviewListLabel" aria-hidden="true"></div>';
-
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
+	
 	if ($('#layer_review_photo').length == 0) {
 		$('body').append(str);
 	}
@@ -1004,8 +1010,9 @@ var cfnGoToCategoryMain = function(cateGb, cate1No) {
  * @access : public
  * @desc   : 품목메인 페이지로 이동
  * <pre>
- *		cfnGoToGoodsList('G032_10', 1100);
+ *		cfnGoToGoodsList(0, 'G032_10', 1100);
  * </pre>
+ * @param  : brandGroupNo - 브랜드그룹번호(BYITEM 기준이면 0. 이외는 브랜드그룹번호). 필수
  * @param  : cateGb - 카테고리구분. 필수
  * @param  : cate1No - 카테고리1번호. 필수
  * @param  : cate2No - 카테고리2번호. 옵션
@@ -1015,8 +1022,8 @@ var cfnGoToCategoryMain = function(cateGb, cate1No) {
  * @since  : 2021/03/22
  * @author : gagamel
  */
-var cfnGoToGoodsList = function(cateGb, cate1No, cate2No, cate3No, cate4No, cate5No) {
-	var params = '?cateGb=' + cateGb + '&cate1No=' + cate1No;
+var cfnGoToGoodsList = function(brandGroupNo, cateGb, cate1No, cate2No, cate3No, cate4No, cate5No) {
+	var params = '?brandGroupNo=' + brandGroupNo + '&cateGb=' + cateGb + '&cate1No=' + cate1No;
 	if (typeof (cate2No) != 'undefined') params += '&cate2No=' + cate2No;
 	if (typeof (cate3No) != 'undefined') params += '&cate3No=' + cate3No;
 	if (typeof (cate4No) != 'undefined') params += '&cate4No=' + cate4No;