Sfoglia il codice sorgente

Merge branch 'develop' into bin2107

bin2107 5 anni fa
parent
commit
65f0a03b47
31 ha cambiato i file con 876 aggiunte e 480 eliminazioni
  1. 1 1
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  2. 3 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  3. 16 13
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  4. 38 1
      src/main/java/com/style24/front/biz/web/TsfSocialController.java
  5. 2 2
      src/main/java/com/style24/persistence/domain/Review.java
  6. 1 1
      src/main/java/com/style24/persistence/domain/Social.java
  7. 33 8
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  8. 208 207
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  9. 3 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml
  10. 2 2
      src/main/resources/config/application-dev.yml
  11. 2 2
      src/main/resources/config/application-locd.yml
  12. 13 2
      src/main/resources/config/application-run.yml
  13. 2 2
      src/main/resources/config/application-tsit.yml
  14. 71 0
      src/main/webapp/WEB-INF/views/mob/cart/CartDelvFeeSaveGoodsPopupMob.html
  15. 37 26
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  16. 46 43
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  17. 95 0
      src/main/webapp/WEB-INF/views/mob/cart/CartTmtbSalesGoodsPopupMob.html
  18. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html
  19. 21 17
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  20. 1 3
      src/main/webapp/WEB-INF/views/web/cart/CartTmtbSalesGoodsPopupWeb.html
  21. 49 52
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustDeliveryAddrFormWeb.html
  22. 16 14
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  23. 2 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  24. 0 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  25. 145 40
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  26. 1 1
      src/main/webapp/ux/pc/css/common.css
  27. 17 9
      src/main/webapp/ux/pc/css/layout.css
  28. 11 9
      src/main/webapp/ux/pc/css/main.css
  29. 17 4
      src/main/webapp/ux/pc/js/common-ui.js
  30. 2 2
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollLayer.js
  31. 20 13
      src/main/webapp/ux/style24_link.js

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

@@ -283,7 +283,7 @@ public class TsfCartService {
 				} else {
 					sb.append(cart.getCustNo());
 				}
-				sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCd()).append("' \n AND CD.OPT_CD = '").append(param.getOptCd()).append("'");
+				sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCd()).append("' \n AND CD.OPT_CD = '").append(param.getOptCd()).append("' AND C.CART_GB = 'G026_BC' ");
 				if (i < cartInfos.size()) {
 					i++;
 					sb.append("\n UNION ALL \n");

+ 3 - 2
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -805,8 +805,8 @@ public class TsfOrderService {
 	}
 
 	/**
-	 * USAFE 보증보험 신청
-	 * temp.setOrdNo(111);			// 상품명 배열
+	 * USAFE 보증보험 입금 확인(보증보험 신청 완료 > 완료 후 취소안됨 주의)
+	 * temp.setOrdNo(111);			// 주문번호
 	 * @param param
 	 * @author xodud1202
 	 * @since 2021. 04. 26
@@ -816,6 +816,7 @@ public class TsfOrderService {
 		// 보증보험 정보 조회
 		Order insurance = coreOrderDao.getInsuranceInfo(param);
 
+		// 보증보험 신청 이력이 없으면 완료안됨
 		if(insurance != null) {
 			// 보증보험 입금 완료 정보 송부
 			InsuranceManager manager = new InsuranceManager(env.getProperty("usafe.guarantee.send.url"), null);

+ 16 - 13
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1524,10 +1524,10 @@ public class TsfMypageController extends TsfBaseController {
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
 		// 작성가능한 리뷰 카운트
 		review.setReviewExpireDay(eventService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value()));
-		mav.addObject("completeReviewCount", reviewService.getCompleteReviewCount(review));
+		mav.addObject("completeReviewCount", reviewService.getCompleteReviewList(review).size());
 
 		// 작성한 리뷰 카운트
-		mav.addObject("alreadyReviewCount", reviewService.getAlreadyReviewCount(review));
+		mav.addObject("alreadyReviewCount", reviewService.getAlreadyReviewList(review).size());
 
 		// 관리자 댓글확인 
 		mav.addObject("adminCount", reviewService.getAdminConfirmCount(review));
@@ -1557,16 +1557,18 @@ public class TsfMypageController extends TsfBaseController {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
 		}
 		GagaMap result = new GagaMap();
-
+		int reviewExpireDay = eventService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value());
+		review.setReviewExpireDay(reviewExpireDay);
+		result.set("completeReviewCount", reviewService.getCompleteReviewList(review).size());
 		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
-		pageable.setTotalCount(reviewService.getCompleteReviewCount(review));
+		pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
 		review.setPageable(pageable);
 		log.info("pageable: {}", pageable);
 		log.info("totalCount {}", pageable.getTotalCount());
-		int reviewExpireDay = eventService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value());
-		review.setReviewExpireDay(reviewExpireDay);
-		result.set("paging", review);
-		result.set("completeReviewCount", reviewService.getCompleteReviewCount(review));
+		
+		result.set("paging1", review);
+		
+		
 		result.set("dataList1", reviewService.getCompleteReviewList(review));
 
 		return result;
@@ -1589,14 +1591,15 @@ public class TsfMypageController extends TsfBaseController {
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
 		}
-
-		TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
-		pageable2.setTotalCount(reviewService.getAlreadyReviewCount(review));
-
+		
 		review.setReviewExpireDay(eventService.getGoodsReviewPointExpireDays(TscConstants.Site.STYLE24.value()));
+		result.set("alreadyReviewCount", reviewService.getAlreadyReviewList(review).size());
+		
+		TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
+		pageable2.setTotalCount(reviewService.getAlreadyReviewList(review).size());
 		review.setPageable2(pageable2);
 		result.set("paging2", review);
-		result.set("alreadyReviewCount", reviewService.getAlreadyReviewCount(review));
+		
 		result.set("dataList2", reviewService.getAlreadyReviewList(review));
 
 		return result;

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

@@ -1,16 +1,24 @@
 package com.style24.front.biz.web;
 
+import java.util.Collection;
+
 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.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.service.TsfSocialService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Social;
 
 import lombok.extern.slf4j.Slf4j;
@@ -48,11 +56,40 @@ public class TsfSocialController extends TsfBaseController {
 		mav.addObject("socialInfo", socialService.getSocialInfo(social));
 		
 		// 소셜(핫딜)-상품목록
-		mav.addObject("socialGoods", socialService.getSocialGoodsList(social));
+		//mav.addObject("socialGoods", socialService.getSocialGoodsList(social));
 	
 		mav.setViewName(super.getDeviceViewName("social/SocialMainForm"));
 		return mav;
 	}
 	
+	/**
+	 * 소셜 상품 리스트
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 4. 29
+	 */
+	@PostMapping("/list")
+	@ResponseBody
+	public GagaMap getSocialList(@RequestBody Social social) {
+		GagaMap result = new GagaMap();
+		TscPageRequest pageable = new TscPageRequest((social.getPageNo() > 0 ? social.getPageNo() - 1 : 0), social.getPageSize(), social.getPageUnit());
+		social.setFrontGb(TsfSession.getFrontGb());
+		social.setCustGb(TsfSession.getCustGb());
+		social.setSiteCd(TscConstants.Site.STYLE24.value());
+		int totalCnt =  socialService.getSocialGoodsList(social).size();
+		pageable.setTotalCount(totalCnt);
+		social.setPageable(pageable);
+		
+		
+		
+		result.set("paging", social);
+		result.set("totalCnt", totalCnt);
+		result.set("endRow", pageable.getEndRow());
+		result.set("dataList", socialService.getSocialGoodsList(social));
+
+		return result;
+	}
+	
 
 }

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

@@ -152,11 +152,11 @@ public class Review extends TscBaseDomain {
 	private TscPageRequest pageable2;
 
 	private int pageNo = 1;							// 페이지번호
-	private int pageSize = 5;						// 페이지목록수
+	private int pageSize = 10;						// 페이지목록수
 	private int pageUnit = 10;						// 페이지번호수
 
 	private int pageNo2 = 1;							// 페이지번호
-	private int pageSize2 = 5;						// 페이지목록수
+	private int pageSize2 = 10;						// 페이지목록수
 	private int pageUnit2 = 10;						// 페이지번호수
 
 }

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

@@ -92,7 +92,7 @@ public class Social extends TscBaseDomain{
 		// Pagination
 		private TscPageRequest pageable;
 		private int pageNo = 1;
-		private int pageSize = 50;
+		private int pageSize = 10;
 		private int pageUnit = 10;
 		
 }

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

@@ -71,7 +71,7 @@
 		            WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
 		            WHEN 'G069_37' THEN '출석체크'
 		            WHEN 'G069_41' THEN G.GOODS_NM
-		            WHEN 'G069_43' THEN G.GOODS_NM
+		            WHEN 'G069_43' THEN FR.GOODS_NM
 		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
 		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
 		       END                                          AS  OCCUR_DTL_DESC
@@ -83,10 +83,19 @@
 		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
 		LEFT JOIN TB_GOODS G
 		ON  OD.GOODS_CD = G.GOODS_CD
+		LEFT JOIN (SELECT FG.GOODS_NM
+		                 ,OFV.ORD_NO 
+		           FROM TB_ORD_FREEGIFT_VAL OFV
+		           INNER JOIN TB_FREE_GOODS FG
+		           ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		           AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		           )FR ON CPH.ORD_NO = FR.ORD_NO
+
 		WHERE CPH.CUST_NO = #{custNo}
 		AND CPH.PNT_AMT > 0
 		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
 		GROUP BY CPH.REG_DT
+		ORDER BY CPH.REG_DT DESC
 	</select>
 	
 	<!-- 사용내역 조회-->
@@ -98,7 +107,7 @@
 		            WHEN 'G069_21' THEN '리뷰'
 		            WHEN 'G069_36' THEN '상품 구매'
 		            WHEN 'G069_40' THEN '상품 구매'
-		            WHEN 'G069_42' THEN '상품 구매'
+		            WHEN 'G069_42' THEN '사은품'
 		            WHEN 'G069_46' THEN '적립취소'
 		            WHEN 'G069_90' THEN '관리자'
 		            WHEN 'G069_99' THEN '소멸'
@@ -109,23 +118,31 @@
 		            WHEN 'G069_21' THEN G.GOODS_NM
 		            WHEN 'G069_36' THEN G.GOODS_NM
 		            WHEN 'G069_40' THEN G.GOODS_NM
-		            WHEN 'G069_42' THEN G.GOODS_NM
+		            WHEN 'G069_42' THEN FR.GOODS_NM
 		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
 		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
 		            WHEN 'G069_99' THEN '유효기간 경과 소멸'
 		       END                                          AS  OCCUR_DTL_DESC
 		     , CPH.PNT_AMT
-		     , CPH.REG_DT
+		     , CPH.REG_DT AS PNT_UPLOAD_DT
 		FROM TB_CUST_POINT_HST CPH
 		LEFT JOIN TB_ORDER_DETAIL OD
 		ON  CPH.ORD_NO = OD.ORD_NO
 		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
 		LEFT JOIN TB_GOODS G
 		ON  OD.GOODS_CD = G.GOODS_CD
+		LEFT JOIN (SELECT FG.GOODS_NM
+		                 ,OFV.ORD_NO 
+		           FROM TB_ORD_FREEGIFT_VAL OFV
+		           INNER JOIN TB_FREE_GOODS FG
+		           ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		           AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		           )FR ON CPH.ORD_NO = FR.ORD_NO
 		WHERE CPH.CUST_NO = #{custNo}
 		AND CPH.PNT_AMT <![CDATA[<]]> 0
 		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
 		GROUP BY CPH.ORD_NO, CPH.REG_DT
+		ORDER BY CPH.REG_DT DESC
 	</select>
 	
 	<!-- 전체내역 조회-->
@@ -146,8 +163,8 @@
 		            WHEN 'G069_37' THEN '이벤트'
 		            WHEN 'G069_40' THEN '상품 구매'
 		            WHEN 'G069_41' THEN '구매 취소'
-		            WHEN 'G069_42' THEN '상품 구매'
-		            WHEN 'G069_43' THEN '구매 취소'
+		            WHEN 'G069_42' THEN '사은품'
+		            WHEN 'G069_43' THEN '사은품'
 		            WHEN 'G069_44' THEN '관리자'
 		            WHEN 'G069_45' THEN '관리자'
 		            WHEN 'G069_46' THEN '적립취소'
@@ -169,8 +186,8 @@
 		            WHEN 'G069_37' THEN '출석체크'
 		            WHEN 'G069_40' THEN G.GOODS_NM
 		            WHEN 'G069_41' THEN G.GOODS_NM
-		            WHEN 'G069_42' THEN G.GOODS_NM
-		            WHEN 'G069_43' THEN G.GOODS_NM
+		            WHEN 'G069_42' THEN FR.GOODS_NM
+		            WHEN 'G069_43' THEN FR.GOODS_NM
 		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
 		            WHEN 'G069_45' THEN CPH.OCCUR_DTL_DESC
 		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
@@ -185,9 +202,17 @@
 		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
 		LEFT JOIN TB_GOODS G
 		ON  OD.GOODS_CD = G.GOODS_CD
+		LEFT JOIN (SELECT FG.GOODS_NM
+		                 ,OFV.ORD_NO 
+		           FROM TB_ORD_FREEGIFT_VAL OFV
+		           INNER JOIN TB_FREE_GOODS FG
+		           ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		           AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		           )FR ON CPH.ORD_NO = FR.ORD_NO
 		WHERE CPH.CUST_NO = #{custNo}
 		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
 		GROUP BY CPH.REG_DT
+		ORDER BY CPH.REG_DT DESC
 	</select>
 
 	<!-- 고객 포인트 내역 -->

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

@@ -387,8 +387,9 @@
 		   	 , Z.ITEMKIND_CD 
              , Z.SIZE_GB 
              , Z.REMAIN_DT
-             , RANK() OVER(ORDER BY Z.PAY_DT DESC) AS RNUM
+             , ROW_NUMBER() OVER(ORDER BY Z.REG_DT DESC) AS RNUM
 		  FROM (SELECT O.ORD_NO
+		             , O.REG_DT 
 					 , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
 					 , DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
 					 , DATE_FORMAT(OD.DELV_EDDT, '%m/%d')								AS DELV_EDDT
@@ -904,212 +905,212 @@
 	<select id="getAlreadyReviewList" parameterType="Review" resultType="Goods">
 		/* TsfReivew.getAlreadyReviewList */
 		<include refid="selectForPagingHeader"/>
-	        SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
-	             , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
-	             , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
-	             , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
-	             , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
-	             , Z.ORD_NO
-	             , Z.ORD_DT
-	             , Z.PAY_DT
-	             , Z.DELV_EDDT
-	             , Z.ORD_DTL_NO
-	             , Z.ORD_EXCH_GB
-	             , Z.GOODS_CD
-	             , Z.GOODS_NM
-	             , Z.LIST_PRICE
-	             , Z.GOODS_TYPE
-	             , Z.SYS_IMG_NM
-	             , Z.ORD_DTL_STAT
-	             , Z.ORD_QTY
-	             , Z.CNCL_RTN_QTY
-	             , Z.ORD_AMT
-	             , Z.REAL_ORD_AMT
-	             , Z.SAVE_PNT_AMT
-	             , Z.CNCL_RTN_AMT
-	             , Z.PNT_DC_AMT
-	             , Z.GFCD_USE_AMT
-	             , Z.INVOICE_NO
-	             , Z.SUPPLY_COMP_CD
-	             , Z.DELV_FEE_CD
-	             , Z.SHOT_DELV_YN
-	             , Z.CHANGEABLE_YN
-	             , Z.RETURNABLE_YN
-	             , Z.SELF_GOODS_YN
-	             , Z.BRAND_NM
-	             , Z.BRAND_ENM
-	             , Z.ORD_DTL_STAT_NM
-	             , Z.ORD_REQ_CHG_QTY
-	             , Z.ORD_CAN_CHG_QTY
-	             , Z.ITEMKIND_NM 
-	             , Z.ITEMKIND_CD 
-	             , Z.SIZE_GB 
-	             , Z.REMAIN_DT
-	             , Z.REVIEW_SQ
-	             , Z.REVIEW_GB
-	             , Z.REVIEW_CONTENT
-	             , Z.SCORE
-	             , Z.HEIGHT
-	             , Z.WEIGHT
-	             , Z.SCORE_SIZE
-	             , Z.SCORE_COLOR
-	             , Z.SCORE_FIT
-	             , Z.SCORE_THICK
-	             , Z.SCORE_WEIGHT
-	             , Z.SCORE_BALL
-	             , Z.GIVE_DUE_PNT
-	             , Z.PNT_GIVE_STAT
-	             , Z.BEST_YN
-	             , Z.GIVE_DUE_BPNT
-	             , Z.BPNT_GIVE_YN
-	             , Z.DISP_YN
-	             , Z.DEL_YN
-	             , Z.CONFIRM_YN
-	             , Z.CONFIRM_UNO
-	             , Z.CONFIRM_DT
-	             , Z.REG_NO
-	             , Z.REG_DT
-	             , Z.UPD_NO
-	             , Z.UPD_DT
-	             , Z.ADM_RPL
-	             , Z.ADM_RPL_REG_NO
-	             , Z.ADM_RPL_DT
-	             , RANK() OVER(ORDER BY Z.PAY_DT DESC) AS RNUM
-	       FROM (SELECT O.ORD_NO
-	                  , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
-	                  , DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
-	                  , DATE_FORMAT(OD.DELV_EDDT, '%m/%d')								AS DELV_EDDT
-	                  , OD.ORD_DTL_NO
-	                  , OD.ORD_EXCH_GB
-	                  , OD.GOODS_CD
-	                  , OD.GIFT_ADDR_INP_YN
-	                  , G.GOODS_NM
-	                  , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
-	                  , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = ODI.ITEM_CD)		AS ITEM_NM
-	                  , ODI.ORD_DTL_ITEM_SQ
-	                  , ODI.OPT_CD1
-	                  , ODI.OPT_CD2
-	                  , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS OPT_CD1_NM
-	                  , G.LIST_PRICE
-	                  , G.GOODS_TYPE
-	                  , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
-	                         ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM
-	                  , OD.ORD_DTL_STAT
-	                  , OD.ORD_QTY
-	                  , OD.CNCL_RTN_QTY
-	                  , OD.ORD_AMT
-	                  , OD.REAL_ORD_AMT
-	                  , OD.SAVE_PNT_AMT
-	                  , OD.CNCL_RTN_AMT
-	                  , OD.PNT_DC_AMT
-	                  , OD.GFCD_USE_AMT
-	                  , OD.INVOICE_NO
-	                  , OD.SUPPLY_COMP_CD
-	                  , OD.DELV_FEE_CD
-	                  , OD.SHOT_DELV_YN
-	                  , OD.CHANGEABLE_YN
-	                  , OD.RETURNABLE_YN
-	                  , G.SELF_GOODS_YN
-	                  , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
-	                  , B.BRAND_ENM
-	                  , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
-	                  , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
-	                  , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
-	                  , I.ITEMKIND_NM 
-	                  , I.ITEMKIND_CD 
-	                  , I.SIZE_GB 
-	                  , R.REVIEW_SQ
-	                  , R.REVIEW_GB
-	                  , R.REVIEW_CONTENT
-	                  , R.SCORE
-	                  , R.HEIGHT
-	                  , R.WEIGHT
-	                  , (CASE R.SCORE_SIZE   WHEN 1 THEN '작음' 
-	                                          WHEN 2 THEN '딱맞음'
-	                                         WHEN 3 THEN '큼'
-	                                                            END) AS SCORE_SIZE
-	                  , (CASE R.SCORE_COLOR  WHEN 1 THEN '밝음' 
-	                                         WHEN 2 THEN '똑같음'
-	                                         WHEN 3 THEN '어두움'   
-	                                                            END) AS SCORE_COLOR
-	                  , (CASE R.SCORE_FIT    WHEN 1 THEN '슬림' 
-	                                         WHEN 2 THEN '레귤러' 
-	                                         WHEN 3 THEN '오버' 
-	                                                            END) AS SCORE_FIT
-	                  , (CASE R.SCORE_THICK  WHEN 1 THEN '얇음' 
-	                                         WHEN 2 THEN '적당함' 
-	                                         WHEN 3 THEN '도톰함'
-	                                                            END) AS SCORE_THICK
-	                   , (CASE R.SCORE_WEIGHT WHEN 1 THEN '가벼움' 
-	                                         WHEN 2 THEN '적당함'
-	                                         WHEN 3 THEN '무거움'
-	                                                            END) AS SCORE_WEIGHT
-	                   , (CASE R.SCORE_BALL   WHEN 1 THEN '작음'
-	                                          WHEN 2 THEN '딱맞음'
-	                                          WHEN 3 THEN '큼' 
-	                                                            END) AS SCORE_BALL
-	                   , R.GIVE_DUE_PNT
-	                   , R.PNT_GIVE_STAT
-	                   , R.BEST_YN
-	                   , R.GIVE_DUE_BPNT
-	                   , R.BPNT_GIVE_YN
-	                   , R.DISP_YN
-	                   , R.DEL_YN
-	                   , R.CONFIRM_YN
-	                   , R.CONFIRM_UNO
-	                   , R.CONFIRM_DT
-	                   , R.REG_NO
-	                   , DATE_FORMAT(R.REG_DT , '%Y-%m-%d') AS REG_DT
-	                   , R.UPD_NO
-	                   , DATE_FORMAT(R.UPD_DT , '%Y-%m-%d') AS UPD_DT
-	                   , R.ADM_RPL
-	                   , R.ADM_RPL_REG_NO
-	                   , DATE_FORMAT(R.ADM_RPL_DT , '%Y-%m-%d %H:%i:%s') AS ADM_RPL_DT
-	                   , DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL  #{reviewExpireDay} DAY),NOW()) AS REMAIN_DT -- 남은시간
-	    FROM TB_ORDER O
-	   INNER JOIN TB_ORDER_DETAIL OD
-	      ON O.ORD_NO = OD.ORD_NO
-	      AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
-	   INNER JOIN TB_ORDER_DETAIL_ITEM ODI
-	      ON OD.ORD_NO = ODI.ORD_NO
-	     AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-	      AND ODI.ORD_DTL_STAT IN('G013_70','G013_50','G013_60') -- 구매 확정인것만
-	   INNER JOIN TB_GOODS G
-	      ON OD.GOODS_CD = G.GOODS_CD
-	   INNER JOIN TB_BRAND B
-	      ON B.BRAND_CD = G.BRAND_CD
-	   INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
-	  	AND R.ORD_NO = O.ORD_NO
-	  	AND R.ORD_DTL_NO = OD.ORD_DTL_NO 
-	  	AND R.DEL_YN = 'N'
-	  	AND R.DISP_YN = 'Y'
-	   LEFT JOIN TB_ITEMKIND I 
-	      ON G.ITEMKIND_CD = I.ITEMKIND_CD 
-	    LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
-	                      	, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
-	                       FROM TB_ORDER_CHANGE_DETAIL OCD
-	                      INNER JOIN TB_ORDER_DETAIL OD
-	                         ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
-	                      WHERE OCD.DEL_YN = 'N'
-	                      GROUP BY OCD.ORD_DTL_NO
-	            ) OCD
-	      ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
-	  LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
-	                               AND C.USE_YN = 'Y'
-	     WHERE 1=1
-	   AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
-	   AND O.CUST_NO =  #{custNo}
-	   AND O.DISP_YN = 'Y'
-	   AND O.SITE_CD =  #{siteCd}
-	   	) Z
-	 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
-	        , Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
-	        , Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.INVOICE_NO
-	        , Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM, Z.ORD_DTL_STAT_NM
-	        , Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
-	ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
-	<include refid="selectForPagingFooter"/>
-	</select>
+		        SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
+		             , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		             , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
+		             , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
+		             , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
+		             , Z.ORD_NO
+		             , Z.ORD_DT
+		             , Z.PAY_DT
+		             , Z.DELV_EDDT
+		             , Z.ORD_DTL_NO
+		             , Z.ORD_EXCH_GB
+		             , Z.GOODS_CD
+		             , Z.GOODS_NM
+		             , Z.LIST_PRICE
+		             , Z.GOODS_TYPE
+		             , Z.SYS_IMG_NM
+		             , Z.ORD_DTL_STAT
+		             , Z.ORD_QTY
+		             , Z.CNCL_RTN_QTY
+		             , Z.ORD_AMT
+		             , Z.REAL_ORD_AMT
+		             , Z.SAVE_PNT_AMT
+		             , Z.CNCL_RTN_AMT
+		             , Z.PNT_DC_AMT
+		             , Z.GFCD_USE_AMT
+		             , Z.INVOICE_NO
+		             , Z.SUPPLY_COMP_CD
+		             , Z.DELV_FEE_CD
+		             , Z.SHOT_DELV_YN
+		             , Z.CHANGEABLE_YN
+		             , Z.RETURNABLE_YN
+		             , Z.SELF_GOODS_YN
+		             , Z.BRAND_NM
+		             , Z.BRAND_ENM
+		             , Z.ORD_DTL_STAT_NM
+		             , Z.ORD_REQ_CHG_QTY
+		             , Z.ORD_CAN_CHG_QTY
+		             , Z.ITEMKIND_NM 
+		             , Z.ITEMKIND_CD 
+		             , Z.SIZE_GB 
+		             , Z.REMAIN_DT
+		             , Z.REVIEW_SQ
+		             , Z.REVIEW_GB
+		             , Z.REVIEW_CONTENT
+		             , Z.SCORE
+		             , Z.HEIGHT
+		             , Z.WEIGHT
+		             , Z.SCORE_SIZE
+		             , Z.SCORE_COLOR
+		             , Z.SCORE_FIT
+		             , Z.SCORE_THICK
+		             , Z.SCORE_WEIGHT
+		             , Z.SCORE_BALL
+		             , Z.GIVE_DUE_PNT
+		             , Z.PNT_GIVE_STAT
+		             , Z.BEST_YN
+		             , Z.GIVE_DUE_BPNT
+		             , Z.BPNT_GIVE_YN
+		             , Z.DISP_YN
+		             , Z.DEL_YN
+		             , Z.CONFIRM_YN
+		             , Z.CONFIRM_UNO
+		             , Z.CONFIRM_DT
+		             , Z.REG_NO
+		             , Z.REG_DT
+		             , Z.UPD_NO
+		             , Z.UPD_DT
+		             , Z.ADM_RPL
+		             , Z.ADM_RPL_REG_NO
+		             , Z.ADM_RPL_DT
+		             , ROW_NUMBER() OVER(ORDER BY Z.REG_DT DESC) AS RNUM
+		       FROM (SELECT O.ORD_NO
+		                  , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
+		                  , DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
+		                  , DATE_FORMAT(OD.DELV_EDDT, '%m/%d')								AS DELV_EDDT
+		                  , OD.ORD_DTL_NO
+		                  , OD.ORD_EXCH_GB
+		                  , OD.GOODS_CD
+		                  , OD.GIFT_ADDR_INP_YN
+		                  , G.GOODS_NM
+		                  , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
+		                  , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = ODI.ITEM_CD)		AS ITEM_NM
+		                  , ODI.ORD_DTL_ITEM_SQ
+		                  , ODI.OPT_CD1
+		                  , ODI.OPT_CD2
+		                  , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS OPT_CD1_NM
+		                  , G.LIST_PRICE
+		                  , G.GOODS_TYPE
+		                  , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                         ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM
+		                  , OD.ORD_DTL_STAT
+		                  , OD.ORD_QTY
+		                  , OD.CNCL_RTN_QTY
+		                  , OD.ORD_AMT
+		                  , OD.REAL_ORD_AMT
+		                  , OD.SAVE_PNT_AMT
+		                  , OD.CNCL_RTN_AMT
+		                  , OD.PNT_DC_AMT
+		                  , OD.GFCD_USE_AMT
+		                  , OD.INVOICE_NO
+		                  , OD.SUPPLY_COMP_CD
+		                  , OD.DELV_FEE_CD
+		                  , OD.SHOT_DELV_YN
+		                  , OD.CHANGEABLE_YN
+		                  , OD.RETURNABLE_YN
+		                  , G.SELF_GOODS_YN
+		                  , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
+		                  , B.BRAND_ENM
+		                  , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
+		                  , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+		                  , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
+		                  , I.ITEMKIND_NM 
+		                  , I.ITEMKIND_CD 
+		                  , I.SIZE_GB 
+		                  , R.REVIEW_SQ
+		                  , R.REVIEW_GB
+		                  , R.REVIEW_CONTENT
+		                  , R.SCORE
+		                  , R.HEIGHT
+		                  , R.WEIGHT
+		                  , (CASE R.SCORE_SIZE   WHEN 1 THEN '작음' 
+		                                          WHEN 2 THEN '딱맞음'
+		                                         WHEN 3 THEN '큼'
+		                                                            END) AS SCORE_SIZE
+		                  , (CASE R.SCORE_COLOR  WHEN 1 THEN '밝음' 
+		                                         WHEN 2 THEN '똑같음'
+		                                         WHEN 3 THEN '어두움'   
+		                                                            END) AS SCORE_COLOR
+		                  , (CASE R.SCORE_FIT    WHEN 1 THEN '슬림' 
+		                                         WHEN 2 THEN '레귤러' 
+		                                         WHEN 3 THEN '오버' 
+		                                                            END) AS SCORE_FIT
+		                  , (CASE R.SCORE_THICK  WHEN 1 THEN '얇음' 
+		                                         WHEN 2 THEN '적당함' 
+		                                         WHEN 3 THEN '도톰함'
+		                                                            END) AS SCORE_THICK
+		                   , (CASE R.SCORE_WEIGHT WHEN 1 THEN '가벼움' 
+		                                         WHEN 2 THEN '적당함'
+		                                         WHEN 3 THEN '무거움'
+		                                                            END) AS SCORE_WEIGHT
+		                   , (CASE R.SCORE_BALL   WHEN 1 THEN '작음'
+		                                          WHEN 2 THEN '딱맞음'
+		                                          WHEN 3 THEN '큼' 
+		                                                            END) AS SCORE_BALL
+		                   , R.GIVE_DUE_PNT
+		                   , R.PNT_GIVE_STAT
+		                   , R.BEST_YN
+		                   , R.GIVE_DUE_BPNT
+		                   , R.BPNT_GIVE_YN
+		                   , R.DISP_YN
+		                   , R.DEL_YN
+		                   , R.CONFIRM_YN
+		                   , R.CONFIRM_UNO
+		                   , R.CONFIRM_DT
+		                   , R.REG_NO
+		                   , DATE_FORMAT(R.REG_DT , '%Y-%m-%d') AS REG_DT
+		                   , R.UPD_NO
+		                   , DATE_FORMAT(R.UPD_DT , '%Y-%m-%d') AS UPD_DT
+		                   , R.ADM_RPL
+		                   , R.ADM_RPL_REG_NO
+		                   , DATE_FORMAT(R.ADM_RPL_DT , '%Y-%m-%d %H:%i:%s') AS ADM_RPL_DT
+		                   , DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL  #{reviewExpireDay} DAY),NOW()) AS REMAIN_DT -- 남은시간
+		    FROM TB_ORDER O
+		   INNER JOIN TB_ORDER_DETAIL OD
+		      ON O.ORD_NO = OD.ORD_NO
+		      AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
+		   INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+		      ON OD.ORD_NO = ODI.ORD_NO
+		     AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		      AND ODI.ORD_DTL_STAT IN('G013_70','G013_50','G013_60') -- 구매 확정인것만
+		   INNER JOIN TB_GOODS G
+		      ON OD.GOODS_CD = G.GOODS_CD
+		   INNER JOIN TB_BRAND B
+		      ON B.BRAND_CD = G.BRAND_CD
+		   INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
+		  	AND R.ORD_NO = O.ORD_NO
+		  	AND R.ORD_DTL_NO = OD.ORD_DTL_NO 
+		  	AND R.DEL_YN = 'N'
+		  	AND R.DISP_YN = 'Y'
+		   LEFT JOIN TB_ITEMKIND I 
+		      ON G.ITEMKIND_CD = I.ITEMKIND_CD 
+		    LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
+		                      	, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+		                       FROM TB_ORDER_CHANGE_DETAIL OCD
+		                      INNER JOIN TB_ORDER_DETAIL OD
+		                         ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+		                      WHERE OCD.DEL_YN = 'N'
+		                      GROUP BY OCD.ORD_DTL_NO
+		            ) OCD
+		      ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		  LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
+		                               AND C.USE_YN = 'Y'
+		     WHERE 1=1
+		   AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
+		   AND O.CUST_NO =  #{custNo}
+		   AND O.DISP_YN = 'Y'
+		   AND O.SITE_CD =  #{siteCd}
+		   	) Z
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
+		        , Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
+		        , Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.INVOICE_NO
+		        , Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM, Z.ORD_DTL_STAT_NM
+		        , Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
+		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
+		<include refid="selectForPagingFooter"/>
+		</select>
 	
 	<select id="getReviewAttach" parameterType="Review" resultType="Review">
 		/* TsfReivew.getReviewAttach */

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

@@ -139,6 +139,9 @@
 		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                             AND W.CUST_NO = #{custNo}
 		</if>
+		<if test="pageable != null">
+		WHERE G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		</if>
 	</select>
 	
 </mapper>

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

@@ -71,8 +71,8 @@ pg:
         js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
         server: false
         site:
-            cd: T0000
-            key: 3grptw1.zW0GSo4PQdaGvsF__
+            cd: U3476
+            key:
             name: ISTYLE TEST
         log.level: 3
         module.type: 01

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

@@ -69,8 +69,8 @@ pg:
         js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
         server: false
         site:
-            cd: T0000
-            key: 3grptw1.zW0GSo4PQdaGvsF__
+            cd: U3476
+            key:
             name: ISTYLE TEST
         log.level: 3
         module.type: 01

+ 13 - 2
src/main/resources/config/application-run.yml

@@ -9,9 +9,20 @@ spring:
                 max-active: 10
                 max-idle: 10
                 min-idle: 2
-        host: 192.186.1.30
+        host: 172.30.90.111
         port: 6379
-        password: wivismall
+        password:
+        cluster:
+            nodes:
+                172.30.90.111:6379
+                172.30.90.112:6379
+                172.30.90.113:6379
+                172.30.90.111:6380
+                172.30.90.112:6380
+                172.30.90.113:6380
+                172.30.90.111:6381
+                172.30.90.112:6381
+                172.30.90.113:6381
 
 logging.config: classpath:log/logback-run.xml
 

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

@@ -70,8 +70,8 @@ pg:
         js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
         server: false
         site:
-            cd: T0000
-            key: 3grptw1.zW0GSo4PQdaGvsF__
+            cd: U3476
+            key:
             name: KCP TEST SHOP
         log.level: 3
         module.type: 01

+ 71 - 0
src/main/webapp/WEB-INF/views/mob/cart/CartDelvFeeSaveGoodsPopupMob.html

@@ -0,0 +1,71 @@
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<div class="lap" 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>배송비 SAVE 상품</h2>
+	</div>
+	<div class="popup_con">
+		<div class="part_goods">
+			<ul>
+				<li th:each="goods, status : ${goodsList}">
+					<div class="goods_detail">
+						<div class="thumb_box">
+							<a th:href="|javascript:fnGoToGoodsDetail('${goods.goodsCd}')|">
+								<img th:src="${imgGoodsUrl} + '/' + ${goods.sysImgNm} + '?RS=150'" src="/" width="100%" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${goods.sysImgNm}" alt="">
+							</a>
+						</div>
+						<div class="info_box">
+							<div class="od_name">
+								<div class="brand">
+									<span th:text="${goods.brandNm}"></span>
+								</div>
+								<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${goods.goodsCd}')|" th:text="${goods.goodsNm}"></a></div>
+							</div>
+							<div class="od_calc">
+								<p class="price">
+									<span class="selling_price"><em th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></em>원</span>
+									<th:block th:if="${goods.listPrice != goods.currPrice}">
+										<span class="sale_price"><del><em th:text="${#numbers.formatInteger(goods.listPrice, 1, 'COMMA')}"></em>원</del></span>
+										<span class="sale_percent" th:text="${goods.dcRate + '%'}"></span>
+									</th:block>
+								</p>
+							</div>
+							<div class="od_shoppingbag">
+								<button type="button" class="btn btn_primary_line" th:onclick="fnAddCartDelvFeeSaveGoods([[${goods.goodsCd}]], [[${goods.optCd}]])"><span>쇼핑백 담기</span></button>
+							</div>
+						</div>
+					</div>
+				</li>
+			</ul>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+	$(document).ready(function() {
+		var goodsListCnt = [[${goodsList.size()}]];
+		if(goodsListCnt < 1) {
+			mcxDialog.alert("배송비 SAVE 상품이 없습니다.");
+			$(".popup_close").trigger("click");
+		} else {
+			$('#dlvrSavePop').show().addClass("active");
+			$("body").css({"overflow":"hidden"});
+		}
+	});
+
+	function fnAddCartDelvFeeSaveGoods(goodsCd, optCd) {
+		let compsList = [];
+		let temp 			= new Object;
+		temp.goodsCd 		= goodsCd;
+		temp.optCd 			= optCd;
+		temp.goodsQty 		= 1;
+		temp.goodsType 		= "G056_N";
+		temp.cartGb 		= "C";
+		temp.popupYn		= "Y";
+		compsList.push(temp);
+
+		cfnAddCart(compsList);
+	};
+</script>
+<!-- //다다익선 상품보기 팝업 -->
+</html>

+ 37 - 26
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -103,8 +103,9 @@
 						<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
 						<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
 						<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
-						<input type="hidden" name="ordCanYn" th:value="${cart.ordCanYn}" />
-						<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
+						<input type="hidden" name="ordCanYn"  th:value="${cart.ordCanYn}" />
+						<input type="hidden" name="goodsCd"   th:value="${cart.goodsCd}" />
+						<input type="hidden" name="cartSq"    th:value="${cart.cartSq}" />
 
 						<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq}, 'cart')|"><span><em class="sr-only">상품삭제</em></span></button>
 						<div class="goods_detail">
@@ -115,7 +116,7 @@
 								<label th:for="|od_item_${cart.cartSq}|"><span class="sr-only">상품선택</span></label>
 							</div>
 							<div class="thumb_box">
-								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|">
 									<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>
@@ -124,7 +125,7 @@
 									<div class="brand">
 										<span th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
 									</div>
-									<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|" th:text="${cart.goodsNm}"></a></div>
+									<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|" th:text="${cart.goodsNm}"></a></div>
 								</div>
 								<div class="od_opt">
 									<th:block th:each="opt, index : ${cart.itemNmArr}">
@@ -144,8 +145,8 @@
 									<p class="point"><span th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></span>P 적립예정</p>
 								</div>
 								<div class="od_exinfo">
-									<span th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}" class="applyTmtb btn_moresale order_badge order_bullet_badge">다다익선 할인 적용</span>
-									<a th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N')}" href="javascript:;" id="btn_moresale_pop" class="notApplyTmtb btn_moresale btn_moresale_pop order_badge order_bullet_badge">다다익선 할인 대상</a>
+									<span th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y') ? 'display:inline-block' : 'display:none'}" class="applyTmtb btn_moresale order_badge order_bullet_badge">다다익선 할인 적용</span>
+									<a    th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N') ? 'display:inline-block' : 'display:none'}" href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" id="btn_moresale_pop" class="notApplyTmtb btn_moresale btn_moresale_pop order_badge order_bullet_badge">다다익선 할인 대상</a>
 								</div>
 							</div>
 						</div>
@@ -204,8 +205,9 @@
 						<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
 						<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
 						<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
-						<input type="hidden" name="ordCanYn" th:value="${cart.ordCanYn}" />
-						<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
+						<input type="hidden" name="ordCanYn"  th:value="${cart.ordCanYn}" />
+						<input type="hidden" name="goodsCd"   th:value="${cart.goodsCd}" />
+						<input type="hidden" name="cartSq"    th:value="${cart.cartSq}" />
 
 						<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq}, 'cart')|"><span><em class="sr-only">상품삭제</em></span></button>
 						<div class="goods_detail">
@@ -216,7 +218,7 @@
 								<label th:for="|od_item_${cart.cartSq}|"><span class="sr-only">상품선택</span></label>
 							</div>
 							<div class="thumb_box">
-								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|">
 									<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>
@@ -225,7 +227,7 @@
 									<div class="brand">
 										<span th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
 									</div>
-									<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|" th:text="${cart.goodsNm}"></a></div>
+									<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|" th:text="${cart.goodsNm}"></a></div>
 								</div>
 								<div class="od_opt">
 									<th:block th:each="opt, index : ${cart.itemNmArr}">
@@ -245,8 +247,8 @@
 									<p class="point"><span th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></span>P 적립예정</p>
 								</div>
 								<div class="od_exinfo">
-									<span th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}" class="applyTmtb btn_moresale order_badge order_bullet_badge">다다익선 할인 적용</span>
-									<a th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N')}" href="javascript:;" id="btn_moresale_pop" class="notApplyTmtb btn_moresale btn_moresale_pop order_badge order_bullet_badge">다다익선 할인 대상</a>
+									<span th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y') ? 'display:inline-block' : 'display:none'}" class="applyTmtb btn_moresale order_badge order_bullet_badge">다다익선 할인 적용</span>
+									<a    th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N') ? 'display:inline-block' : 'display:none'}" href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" id="btn_moresale_pop" class="notApplyTmtb btn_moresale btn_moresale_pop order_badge order_bullet_badge">다다익선 할인 대상</a>
 								</div>
 							</div>
 						</div>
@@ -301,7 +303,7 @@
 				</div>
 
 				<div class="goods_dlvr_save" th:style="${'Y'.equals(order.delvYn) and order.wmsDelvFee > 0 ? 'display:block' : 'display:none'}">
-					<a href="javascript:;" id="btn_dlvrSave_pop" class="btn_popup_save">배송비 SAVE 상품 보기</a>
+					<a th:href="|javascript:fnGetDelvFeeSaveGoods('WMS', '${order.minOrdAmt - order.compSumPrice}');|" id="btn_dlvrSave_pop" class="btn_popup_save">배송비 SAVE 상품 보기</a>
 				</div>
 			</div>
 			<!-- //STYLE24 배송 -->
@@ -324,9 +326,10 @@
 						<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
 						<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
 						<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
-						<input type="hidden" name="ordCanYn" th:value="${cart.ordCanYn}" />
+						<input type="hidden" name="ordCanYn"  th:value="${cart.ordCanYn}" />
 						<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
-						<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
+						<input type="hidden" name="goodsCd"   th:value="${cart.goodsCd}" />
+						<input type="hidden" name="cartSq"    th:value="${cart.cartSq}" />
 
 						<button type="button" class="btn_delete"><span><em class="sr-only">상품삭제</em></span></button>
 						<div class="goods_detail">
@@ -337,7 +340,7 @@
 								<label th:for="|od_item_${cart.cartSq}|"><span class="sr-only">상품선택</span></label>
 							</div>
 							<div class="thumb_box">
-								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+								<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|">
 									<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>
@@ -346,7 +349,7 @@
 									<div class="brand">
 										<span th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
 									</div>
-									<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|" th:text="${cart.goodsNm}"></a></div>
+									<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|" th:text="${cart.goodsNm}"></a></div>
 								</div>
 								<div class="od_opt">
 									<th:block th:each="opt, index : ${cart.itemNmArr}">
@@ -366,8 +369,8 @@
 									<p class="point"><span th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></span>P 적립예정</p>
 								</div>
 								<div class="od_exinfo">
-									<span th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}" class="applyTmtb btn_moresale order_badge order_bullet_badge">다다익선 할인 적용</span>
-									<a th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N')}" href="javascript:;" id="btn_moresale_pop" class="notApplyTmtb btn_moresale btn_moresale_pop order_badge order_bullet_badge">다다익선 할인 대상</a>
+									<span th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y') ? 'display:inline-block' : 'display:none'}" class="applyTmtb btn_moresale order_badge order_bullet_badge">다다익선 할인 적용</span>
+									<a    th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N') ? 'display:inline-block' : 'display:none'}" href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" id="btn_moresale_pop" class="notApplyTmtb btn_moresale btn_moresale_pop order_badge order_bullet_badge">다다익선 할인 대상</a>
 								</div>
 							</div>
 						</div>
@@ -419,7 +422,7 @@
 						</div>
 
 						<div class="goods_dlvr_save" th:if="${'Y'.equals(cart.addDelvFeeYn)}" th:style="${'Y'.equals(cart.delvYn) and cart.delvFee > 0 ? 'display:block' : 'display:none'}">
-							<a href="javascript:;" id="btn_dlvrSave_pop" class="btn_popup_save">배송비 SAVE 상품 보기</a>
+							<a th:href="|javascript:fnGetDelvFeeSaveGoods('${cart.delvFeeCd}', '${cart.minOrdAmt - cart.compSumPrice}');|" id="btn_dlvrSave_pop" class="btn_popup_save">배송비 SAVE 상품 보기</a>
 						</div>
 					</div>
 				</div>
@@ -881,12 +884,15 @@
 					$("#cartListForm .shotCartInfo input[name=cartSq]").each(function() {
 						if(shotList[i].cartSq == $(this).val()) {
 							let shot = shotList[i];
+							$(this).parent().find("input[name=applyQtySectionYn]").val(shot.applyQtySectionYn);
+							$(this).parent().find("input[name=applyAmtSectionYn]").val(shot.applyQtySectionYn);
 
 							// 다다익선 적용 정보 생성성
 							if((shot.qtyTmtbSq > 0 && shot.applyQtySectionYn == "Y") || (shot.amtTmtbSq > 0 && shot.applyAmtSectionYn == "Y")) {
 								$(this).parent().find(".applyTmtb").show();
 							}
 
+							// 다다익선 상품보기 노출
 							if((shot.qtyTmtbSq > 0 && shot.applyQtySectionYn == "N") || (shot.amtTmtbSq > 0 && shot.applyAmtSectionYn == "N")) {
 								$(this).parent().find(".notApplyTmtb").show();
 							}
@@ -907,13 +913,14 @@
 					$("#cartListForm .wmsCartInfo input[name=cartSq]").each(function() {
 						if(wmsList[i].cartSq == $(this).val()) {
 							let wms = wmsList[i];
-							$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
-							$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+							$(this).parent().find("input[name=applyQtySectionYn]").val(wms.applyQtySectionYn);
+							$(this).parent().find("input[name=applyAmtSectionYn]").val(wms.applyQtySectionYn);
 
 							// 다다익선 적용 정보 생성성
 							if((wms.qtyTmtbSq > 0 && wms.applyQtySectionYn == "Y") || (wms.amtTmtbSq > 0 && wms.applyAmtSectionYn == "Y")) {
 								$(this).parent().find(".applyTmtb").show();
 							}
+
 							if((wms.qtyTmtbSq > 0 && wms.applyQtySectionYn == "N") || (wms.amtTmtbSq > 0 && wms.applyAmtSectionYn == "N")) {
 								$(this).parent().find(".notApplyTmtb").show();
 							}
@@ -945,8 +952,8 @@
 					$("#cartListForm .delvList .delvCartInfo input[name=cartSq]").each(function() {
 						if(delvList[i].cartSq == $(this).val()) {
 							let delv = delvList[i];
-							$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
-							$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+							$(this).parent().find("input[name=applyQtySectionYn]").val(delv.applyQtySectionYn);
+							$(this).parent().find("input[name=applyAmtSectionYn]").val(delv.applyQtySectionYn);
 
 							// 다다익선 적용 정보 생성성
 							if((delv.qtyTmtbSq > 0 && delv.applyQtySectionYn == "Y") || (delv.amtTmtbSq > 0 && delv.applyAmtSectionYn == "Y")) {
@@ -1215,8 +1222,12 @@
 			}
 
 			// 페이지 이동
-			function fnGoToGoodsDetail(goodsCd) {
-				cfnGoToPage(_PAGE_GOODS_DETAIL + goodsCd);
+			function fnGoToGoodsDetail(goodsCd, ordCanYn) {
+				if(ordCanYn == "Y" || !ordCanYn) {
+					cfnGoToPage(_PAGE_GOODS_DETAIL + goodsCd);
+				} else {
+					mcxDialog.alert("현재 구매가 불가능한 상품입니다.");
+				}
 			}
 
 			// 전체선택 버튼

+ 46 - 43
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -48,38 +48,11 @@
 		<!-- //옵션변경_팝업02 -->
 
 		<!-- 다다익선 할인 대상_팝업 -->
-		<div id="moresalePop" class="popup_box moresalePop">
-			<div class="lap">
-				<div class="popup_close">카테고리닫기</div>
-				<div class="popup_head">
-					<h2>다다익선 할인 상품</h2>
-					<div class="area_benefit">
-						<span class="tag primary">SALE</span>
-						<p>
-							<span>10만원 이상 구매 시 1만원 할인</span>
-							<span>5개 이상 구매 시 1만원 할인</span>
-						</p>
-					</div>
-				</div>
-				<div class="popup_con">
-
-				</div>
-			</div>
-		</div>
+		<div id="moresalePop" class="popup_box moresalePop" style="display: none;"></div>
 		<!-- //다다익선 할인 대상_팝업 -->
 
 		<!-- 배송비 SAVE_팝업 -->
-		<div id="dlvrSavePop" class="popup_box dlvrSavePop">
-			<div class="lap">
-				<div class="popup_close">카테고리닫기</div>
-				<div class="popup_head">
-					<h2>배송비 SAVE 상품</h2>
-				</div>
-				<div class="popup_con">
-
-				</div>
-			</div>
-		</div>
+		<div id="dlvrSavePop" class="popup_box dlvrSavePop" style="display: none;"></div>
 		<!-- //배송비 SAVE_팝업 -->
 
 		<!-- 옵션변경 팝업 -->
@@ -137,20 +110,6 @@
 			$("body").css({"overflow":"hidden"});
 		});
 
-		//다다익선 할인 대상_팝업
-		$(document).on("click", ".btn_moresale_pop", function(){
-			//$("#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').show().addClass("active");
-			$("body").css({"overflow":"hidden"});
-		});
-
 		//팝업_닫기
 		$(document).on("click", ".popup_close", function(){
 			$('.popup_box').hide();
@@ -269,6 +228,50 @@
 		});
 	});
 
+	//배송비 SAVE_팝업
+	function fnGetDelvFeeSaveGoods(delvFeeCd, delvFeeSaveGoodsAmt) {
+		let param = new Object();
+		param.delvFeeCd = delvFeeCd;
+		param.delvFeeSaveGoodsAmt = delvFeeSaveGoodsAmt;
+
+		gagajf.ajaxSubmit("/cart/delv/fee/save/goods/list", "html", "dlvrSavePop", param);
+	};
+
+	//다다익선 할인 대상_팝업
+	function fnGetTmtbSalesGoods(obj) {
+		// 파라미터
+		let tmtbSqList = new Array();
+		let param = new Object();
+
+		// 다다익선 정보
+		let qtyTmtbSq = $(obj).parent().parent().parent().parent().find("input[name=qtyTmtbSq]").val();
+		let amtTmtbSq = $(obj).parent().parent().parent().parent().find("input[name=qtyTmtbSq]").val();
+		let qtyTmtbYn = $(obj).parent().parent().parent().parent().find("input[name=applyQtySectionYn]").val();
+		let amtTmtbYn = $(obj).parent().parent().parent().parent().find("input[name=applyAmtSectionYn]").val();
+		let goodsCd = $(obj).parent().parent().parent().parent().find("input[name=goodsCd]").val();
+
+		if(qtyTmtbYn == "N") {tmtbSqList.push(Number(qtyTmtbSq));}
+		if(amtTmtbYn == "N") {tmtbSqList.push(Number(amtTmtbSq));}
+		if(tmtbSqList.length < 1) {mcxDialog.alert("적용가능한 다다익선이 없습니다."); return false;}
+
+		let tmtb = JSON.stringify({goodsCd : goodsCd, arrTmtbSq : tmtbSqList});
+
+		$.ajax( {
+			type		: "POST",
+			url 		: '/cart/tmtb/sales/goods/list',
+			data		: tmtb,
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				$("#moresalePop").html(result);
+			}
+		});
+	};
+
 	function getCartList(parameter) {
 		// 장바구니 정보 조회
 		$.ajax( {

+ 95 - 0
src/main/webapp/WEB-INF/views/mob/cart/CartTmtbSalesGoodsPopupMob.html

@@ -0,0 +1,95 @@
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+
+<!-- 다다익선 상품보기 팝업 -->
+<div class="lap" 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 class="area_benefit">
+			<span class="tag primary">SALE</span>
+			<p>
+				<span th:each="desc, index : ${tmtbDcDescList}" th:text="${desc}"></span>
+			</p>
+		</div>
+	</div>
+	<div class="popup_con">
+		<div class="part_goods">
+			<ul>
+				<li th:each="goods, status : ${goodsList}">
+					<div class="goods_detail">
+						<div class="thumb_box">
+							<a th:href="|javascript:fnGoToGoodsDetail('${goods.goodsCd}')|">
+								<img class="vLHTC pd_img" th:src="${imgGoodsUrl} + '/' + ${goods.sysImgNm} + '?RS=150'" src="/" width="100%" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${goods.sysImgNm}" alt="">
+							</a>
+						</div>
+						<div class="info_box">
+							<div class="od_name">
+								<div class="brand">
+									<span th:text="${goods.brandGroupNm}"></span>
+								</div>
+								<div class="name"><a th:href="|javascript:fnGoToGoodsDetail('${goods.goodsCd}')|" th:text="${goods.goodsFullNm}"></a></div>
+							</div>
+							<div class="od_calc">
+								<p class="price">
+									<span class="selling_price"><em th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></em>원</span>
+									<th:block th:if="${goods.listPrice != goods.currPrice}">
+										<span class="sale_price"><del><em th:text="${#numbers.formatInteger(goods.listPrice, 1, 'COMMA')}"></em>원</del></span>
+										<span class="sale_percent" th:text="${goods.dcRate + '%'}"></span>
+									</th:block>
+								</p>
+							</div>
+							<div class="od_shoppingbag">
+								<button type="button" class="btn btn_primary_line" th:onclick="fnAddCartTmtbSalesGoods([[${goods.goodsCd}]])"><span>쇼핑백 담기</span></button>
+							</div>
+						</div>
+					</div>
+				</li>
+			</ul>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+	$(document).ready(function() {
+		var goodsListCnt = [[${goodsList.size()}]];
+		if(goodsListCnt < 1) {
+			mcxDialog.alert("다다익선 적용 가능한 다른 상품이 없습니다.");
+			$(".popup_close").trigger("click");
+		} else {
+			$('#moresalePop').show().addClass("active");
+			$("body").css({"overflow":"hidden"});
+			// $("#moresalePop").modal("show");
+		}
+	});
+
+	function fnAddCartTmtbSalesGoods(goodsCd) {
+		let data = JSON.stringify({goodsCd : goodsCd});
+		$.ajax( {
+			type		: "POST",
+			url 		: '/cart/tmtb/sales/goods/optcd',
+			data		: data,
+			dataType 	: 'json',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				let compsList = [];
+				let temp 			= new Object;
+				temp.goodsCd 		= goodsCd;
+				temp.optCd 			= result.optCd;
+				temp.goodsQty 		= 1;
+				temp.goodsType 		= "G056_N";
+				temp.cartGb 		= "C";
+				temp.popupYn		= "Y";
+				compsList.push(temp);
+
+				cfnAddCart(compsList);
+			}
+		});
+	};
+</script>
+<!-- //다다익선 상품보기 팝업 -->
+</html>

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

@@ -81,7 +81,7 @@
 									<th>이메일</th>
 									<td>
 										<div class="form_field">
-											<input type="text" id="email" name="email" class="form_control"/>
+											<input type="text" id="email" name="email" data-valid-type="email" class="form_control"/>
 										</div>
 									</td>
 								</tr>

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

@@ -109,7 +109,7 @@
 											</div>
 											<div class="goods_box">
 												<div class="gd_item">
-													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|">
 														<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>
@@ -141,8 +141,8 @@
 												</div>
 												<div class="gd_exinfo">
 													<p th:if="${!#strings.isEmpty(cart.delvResDt)}"><span class="tag primary_line">총알배송</span><span th:text="|${cart.delvResDt} 배송예정|"></span></p>
-													<p th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-													<p th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N')}" class="notApplyTmtb"><a href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+													<p th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y') ? 'display:inline-block' : 'display:none'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+													<p th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N') ? 'display:inline-block' : 'display:none'}" class="notApplyTmtb"><a href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
 													<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 													<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
@@ -225,7 +225,7 @@
 											</div>
 											<div class="goods_box">
 												<div class="gd_item">
-													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|">
 														<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>
@@ -250,8 +250,8 @@
 												<div class="gd_exinfo">
 													<div class="gd_exinfo">
 														<p th:if="${!#strings.isEmpty(cart.delvResDt)}" th:text="|${cart.delvResDt} 배송예정|"></p>
-														<p th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-														<p th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N')}" class="notApplyTmtb"><a href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+														<p th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y') ? 'display:inline-block' : 'display:none'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+														<p th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N') ? 'display:inline-block' : 'display:none'}" class="notApplyTmtb"><a href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
 														<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 														<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
@@ -345,7 +345,7 @@
 											</div>
 											<div class="goods_box">
 												<div class="gd_item">
-													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}', '${cart.ordCanYn}')|">
 														<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>
@@ -369,8 +369,8 @@
 												</div>
 												<div class="gd_exinfo">
 													<p th:if="${!#strings.isEmpty(cart.delvResDt)}" th:text="|${cart.delvResDt} 배송예정|"></p>
-													<p th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-													<p th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N')}" class="notApplyTmtb"><a href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+													<p th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y') ? 'display:inline-block' : 'display:none'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+													<p th:style="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N') ? 'display:inline-block' : 'display:none'}" class="notApplyTmtb"><a href="javascript:void(0);" onclick="fnGetTmtbSalesGoods(this);" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
 													<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 													<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
@@ -875,8 +875,8 @@
 				$("#cartListForm .shotCartInfo input[name=cartSq]").each(function() {
 					if(shotList[i].cartSq == $(this).val()) {
 						let shot = shotList[i];
-						$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
-						$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+						$(this).parent().find("input[name=applyQtySectionYn]").val(shot.applyQtySectionYn);
+						$(this).parent().find("input[name=applyAmtSectionYn]").val(shot.applyQtySectionYn);
 
 						// 다다익선 적용 정보 생성성
 						if((shot.qtyTmtbSq > 0 && shot.applyQtySectionYn == "Y") || shot.amtTmtbSq > 0 && shot.applyAmtSectionYn == "Y") {
@@ -910,8 +910,8 @@
 				$("#cartListForm .wmsCartInfo input[name=cartSq]").each(function() {
 					if(wmsList[i].cartSq == $(this).val()) {
 						let wms = wmsList[i];
-						$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
-						$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+						$(this).parent().find("input[name=applyQtySectionYn]").val(wms.applyQtySectionYn);
+						$(this).parent().find("input[name=applyAmtSectionYn]").val(wms.applyQtySectionYn);
 
 						// 다다익선 적용 정보 생성성
 						if((wms.qtyTmtbSq > 0 && wms.applyQtySectionYn == "Y") || (wms.amtTmtbSq > 0 && wms.applyAmtSectionYn == "Y")) {
@@ -935,8 +935,8 @@
 				$("#cartListForm .delvList .delvCartInfo input[name=cartSq]").each(function() {
 					if(delvList[i].cartSq == $(this).val()) {
 						let delv = delvList[i];
-						$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
-						$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+						$(this).parent().find("input[name=applyQtySectionYn]").val(delv.applyQtySectionYn);
+						$(this).parent().find("input[name=applyAmtSectionYn]").val(delv.applyQtySectionYn);
 
 						// 다다익선 적용 정보 생성성
 						if((delv.qtyTmtbSq > 0 && delv.applyQtySectionYn == "Y") || (delv.amtTmtbSq > 0 && delv.applyAmtSectionYn == "Y")) {
@@ -1204,8 +1204,12 @@
 		}
 
 		// 페이지 이동
-		function fnGoToGoodsDetail(goodsCd) {
-			cfnGoToPage(_PAGE_GOODS_DETAIL + goodsCd);
+		function fnGoToGoodsDetail(goodsCd, ordCanYn) {
+			if(ordCanYn == "Y" || !ordCanYn) {
+				cfnGoToPage(_PAGE_GOODS_DETAIL + goodsCd);
+			} else {
+				mcxDialog.alert("현재 구매가 불가능한 상품입니다.");
+			}
 		}
 
 		// 전체선택 버튼

+ 1 - 3
src/main/webapp/WEB-INF/views/web/cart/CartTmtbSalesGoodsPopupWeb.html

@@ -21,7 +21,7 @@
 							<div th:each="goods, status : ${goodsList}" class="swiper-slide swiper-slide-active" style="width: 150px; margin-right: 20px;">
 								<div class="item_prod">
 									<div class="item_state">
-										<a href="#none" class="itemLink">
+										<a th:href="|javascript:fnGoToGoodsDetail('${goods.goodsCd}')|" class="itemLink">
 											<div class="itemPic">
 												<img class="vLHTC pd_img" th:src="${imgGoodsUrl} + '/' + ${goods.sysImgNm} + '?RS=150'" src="/" width="100%" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"  th:alt="${goods.sysImgNm}" alt="">
 											</div>
@@ -89,8 +89,6 @@
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
 			},
 			success 	: function(result) {
-				alert(result.goodsCd + " / " + result.optCd);
-
 				let compsList = [];
 				let temp 			= new Object;
 				temp.goodsCd 		= goodsCd;

+ 49 - 52
src/main/webapp/WEB-INF/views/web/mypage/MypageCustDeliveryAddrFormWeb.html

@@ -73,62 +73,59 @@
 	}
 
 	var fnCustDeliveryAddListCallback = function (result) {
-		console.log('result', result);
+		let html = '';
 		if (result.length < 1) {
 			$('#nodata').show();
-			return;
+		} else {
+			$('#nodata').hide();
+			$.each(result, function (idx, custDeliveryAddr){
+				if (custDeliveryAddr.defaultYn  === 'Y') {
+					html += '<tr class="addrs_default">\n';
+				} else {
+					html += '<tr>\n';
+				}
+				html +=	'    <td>\n';
+				html +=	'        <div class="block_line">\n';
+				html +=	'            <ul>\n';
+				html +=	'                <li>\n';
+				html +=	'                   <span>'+custDeliveryAddr.recipNm +'</span>\n';
+				if (custDeliveryAddr.defaultYn  === 'Y') {
+					html += '                   <span class="tag">기본 배송지</span>\n';
+				}
+				if (custDeliveryAddr.shotDelvUseYn  === 'Y') {
+					html += '                   <span class="tag primary_line">총알배송</span>\n';
+				}
+				html +=	'                </li>\n';
+				html +=	'                <li>\n';
+				html +=	'                    <span class="phone_number">'+custDeliveryAddr.recipPhnno+'</span>\n';
+				html +=	'                </li>\n';
+				html +=	'                <li>\n';
+				html +=	'                   <span>'+custDeliveryAddr.recipBaseAddr + custDeliveryAddr.recipDtlAddr +'</span>\n';
+				html +=	'                </li>\n';
+				html +=	'                <li>\n';
+				html +=	'                   배송요청 사항&nbsp;:&nbsp;<span>'+ custDeliveryAddr.delvMemo +'</span>\n';
+				html +=	'                </li>\n';
+				html +=	'            </ul>\n';
+				html +=	'        </div>\n';
+				html +=	'    </td>\n';
+				html +=	'    <td>\n';
+				html +=	'        <div class="button_box">\n';
+				html +=	'            <p>';
+				html +=	'                <button type="button" class="btn btn_default btn_sm" onclick="fnModiFyCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">';
+				html +=	'                    <span>수정</span>';
+				html +=	'                </button>';
+				html +=	'            </p>';
+				html +=	'            <p>';
+				html +=	'                <button type="button" class="btn btn_dark btn_sm" onclick="fnDeleteCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">';
+				html +=	'                   <span>삭제</span>';
+				html +=	'                </button>';
+				html +=	'            </p>';
+				html +=	'        </div>\n';
+				html +=	'    </td>\n';
+				html += '</tr>\n';
+			});
 		}
-		$('#nodata').hide();
-		$('#custDeliveryList').html('');
-		let html = '';
-		$.each(result, function (idx, custDeliveryAddr){
-			if (custDeliveryAddr.defaultYn  === 'Y') {
-				html += '<tr class="addrs_default">\n';
-			} else {
-				html += '<tr>\n';
-			}
-			html +=	'    <td>\n';
-			html +=	'        <div class="block_line">\n';
-			html +=	'            <ul>\n';
-			html +=	'                <li>\n';
-			html +=	'                   <span>'+custDeliveryAddr.recipNm +'</span>\n';
-			if (custDeliveryAddr.defaultYn  === 'Y') {
-				html += '                   <span class="tag">기본 배송지</span>\n';
-			}
-			if (custDeliveryAddr.shotDelvUseYn  === 'Y') {
-				html += '                   <span class="tag primary_line">총알배송</span>\n';
-			}
-			html +=	'                </li>\n';
-			html +=	'                <li>\n';
-			html +=	'                    <span class="phone_number">'+custDeliveryAddr.recipPhnno+'</span>\n';
-			html +=	'                </li>\n';
-			html +=	'                <li>\n';
-			html +=	'                   <span>'+custDeliveryAddr.recipBaseAddr + custDeliveryAddr.recipDtlAddr +'</span>\n';
-			html +=	'                </li>\n';
-			html +=	'                <li>\n';
-			html +=	'                   배송요청 사항&nbsp;:&nbsp;<span>'+ custDeliveryAddr.delvMemo +'</span>\n';
-			html +=	'                </li>\n';
-			html +=	'            </ul>\n';
-			html +=	'        </div>\n';
-			html +=	'    </td>\n';
-			html +=	'    <td>\n';
-			html +=	'        <div class="button_box">\n';
-			html +=	'            <p>';
-			html +=	'                <button type="button" class="btn btn_default btn_sm" onclick="fnModiFyCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">';
-			html +=	'                    <span>수정</span>';
-			html +=	'                </button>';
-			html +=	'            </p>';
-			html +=	'            <p>';
-			html +=	'                <button type="button" class="btn btn_dark btn_sm" onclick="fnDeleteCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">';
-			html +=	'                   <span>삭제</span>';
-			html +=	'                </button>';
-			html +=	'            </p>';
-			html +=	'        </div>\n';
-			html +=	'    </td>\n';
-			html += '</tr>\n';
-		});
 		$('#custDeliveryList').html(html);
-
 	}
 
 	// 배송지 추가

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

@@ -132,20 +132,7 @@
 		gagaPaging.init('searchForm2', fnSearchCallback2, 'paging2', 10);
 		gagaPaging.load(1);
 	})
-	
-	$(document).ready(function() {
 
-		// 마이페이지 LNB 설정
-		fnSetMypageLnbList(7);
-
-		// 마이페이지 location 설정
-		fnSetMypageLocation('리뷰', '_PAGE_MYPAGE_REVIEW');
-				
-		// 작성가능한 리뷰표시
-		$("#completeReview").trigger('click');
-	
-	});
-	
 	// 주문 목록 조회 콜백
 	var fnSearchCallback1 = function(result) {
 		$('#nodata1').hide();
@@ -207,7 +194,7 @@
 			$('#nodata1').show();
 		}
 		// Create pagination
-		gagaPaging.createPagination(result.paging.pageable);
+		gagaPaging.createPagination(result.paging1.pageable);
 	}
 	
 	// 주문 목록 조회 콜백
@@ -429,6 +416,21 @@
 		document.createReview.submit();
 		// cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd+'/'+reviewStat);
 	}
+	
+	
+	$(document).ready(function() {
+
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(7);
+
+		// 마이페이지 location 설정
+		fnSetMypageLocation('리뷰', '_PAGE_MYPAGE_REVIEW');
+				
+		// 작성가능한 리뷰표시
+		$("#completeReview").trigger('click');
+	
+	});
+	
 	</script>
 	</th:block>
 

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

@@ -107,7 +107,7 @@
 										<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
 									</p>
 									<p id="vipGrade" style="display: none;">
-										다음달에<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
+										다음달에 <strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
 									</p>
 								</div>
 							</div>
@@ -340,6 +340,7 @@
 		if (remnantBuyAmt > 0 || remnantBuyCnt > 0) {
 			$nextGrde.text(nextCustGradePolicy.gradeCdNm);
 		}
+
 	}
 
 	// 기존 VIP / 새로운 VIP 구분

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

@@ -244,8 +244,6 @@ let planCornerList = [[${planCornerList}]];
 let _mall = [[${@environment.getProperty('domain.front')}]];
 let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
 let imgUrl=[[${@environment.getProperty('upload.image.view')}]];
-console.log(planCornerList);
-console.log(planCornerGoodsList);
 if(planCornerList.length>0){
 	var html = '';
 	

+ 145 - 40
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -40,54 +40,38 @@
                     </div>  
                     <div class="list_content">
                         <div class="itemsGrp rowtype"> <!-- itemsGrp rank hot deal --> <!-- rowtype 추가시 가로형태로 출력 -->
-                        <th:block th:each="SocialData, SocialStat : ${socialGoods}">
-                            <div class="item_prod" th:class="${SocialData.stockQtySum == 0 ? 'item_prod sold_out' : 'item_prod'}">
-                                <div class="item_state"> <!-- item_state AD soldout -->
-                                    <button type="button" th:class="${SocialData.likeIt == 'likeit'}? 'itemLike active' : 'itemLike'" onclick="cfnPutWishList(this);" th:attr="goodsCd=${SocialData.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-                                    <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${SocialData.goodsCd}]])" >
-                                        <div class="itemPic">
-                                            <img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + SocialData.sysImgNm}">
-                                        </div>
-                                        <div class="itemSpecialPrice"><span>특가</span></div>
-                                        <p class="itemBrand" th:text="${SocialData.brandGroupNm}"></p>
-                                        <div class="itemName" th:text="${SocialData.goodsNm}"></div>
-                                       <div class="itemComment" th:if="${SocialData.goodsTnm!=null}" th:text="${SocialData.goodsTnm}"></div>
-                                        <p class="itemPrice">
-                                             [[${#numbers.formatInteger(SocialData.currPrice,0,'COMMA')} + 원]]
-                                            <span class="itemPrice_original" th:text="${#numbers.formatInteger(SocialData.listPrice,0,'COMMA')} + '원'"></span>
-											<span class=" itemPercent" th:text="${#numbers.formatDecimal(SocialData.dcRate,1,0)} + '%'"></span>
-                                        </p>
-                                    </a>
-                                    	 <div class="shopBagBtn">
-                                            <button type="button" class="btn btn_defalt" onclick="socialAddCart(this)" th:attr="goodsCd=${SocialData.goodsCd}, minOrdQty=${SocialData.minOrdQty}, goodsType=${SocialData.goodsType}, optCd=${SocialData.optCd}">
-                                                <span>쇼핑백 담기</span>
-                                            </button>
-                                        </div>
-                                </div>
-                            </div>
-                            </th:block>
-                        </div>
+									<section id="infiniteContainer">
+										<div id="listBoxOuter">
+											<ul id="listBox">
+											</ul>
+										</div>
+									</section>
+								</div>
+                         <div class="last_page" id="divLastPage" style="display: none;">
+						<span>마지막 페이지입니다.</span>
+					</div>
                     </div>
+                   
                 </div>
 		    </div>
 		</th:block>
-		<th:block th:unless="${socialInfo != null}">
-				<div class="nodata" >
-					<div class="txt_box">
-						<p>
-							진행하는 핫딜이 없습니다.
-						</p>
-					</div>
-					<div class="btn_box">
-						<button class="btn btn_default" th:onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>
-					</div>
-				</div>	
-		</th:block>
+
+
         </div>
     </div>   
+<form id="socialForm" name="socialForm" action="#" th:action="@{'/social/list'}">
+	<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+	<input type="hidden" name="pageSize" value ="10"/>
+</form>
+<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+	<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
 <script th:inline="javascript">
-var socialInfo = [[${socialInfo}]];
+let socialInfo = [[${socialInfo}]];
+let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
+
+
 var socialAddCart = function (obj) {
+
 	let btnType = "C";
 	let params = [];
 
@@ -108,7 +92,110 @@ var socialAddCart = function (obj) {
 		cfnAddCart(params);	
 	} 
 }
+
+let fnGetSocialList = function(result) {
+	var html = '';
+
+	$.each(result.dataList, function(idx, item) {
+		if (item.stockQtySum == 0) {
+			html += ' <div class="item_prod"class="item_prod sold_out">';
+		}else{
+			html += ' <div class="item_prod"class="item_prod">';
+		}
+		
+		html += '    <div class="item_state"> ';
+		if (item.likeIt == 'likeit') {
+			html += '        <button type="button" class="itemLike active" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+		}else{
+			html += '        <button type="button" class="itemLike" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+		}
+		
+		html += '        <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\')" >';
+		html += '            <div class="itemPic">';
+		html += '                <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item.sysImgNm +'">';
+		html += '            </div>';
+		html += '            <div class="itemSpecialPrice"><span>특가</span></div>';
+		html += '            <p class="itemBrand">'+item.brandGroupNm+'</p>';
+		html += '            <div class="itemName">'+item.goodsNm+'</div>';
+		if(item.goodsTnm != null){
+			html += '           <div class="itemComment">'+item.goodsTnm+'</div>';
+		}
+
+		html += '            <p class="itemPrice">';
+		html += item.currPrice.addComma() +'원';
+		if (item.currPrice != item.listPrice) {
+			html += '                <span class="itemPrice_original">'+item.listPrice.addComma()+'원</span>';
+		}
+		if (item.dcRate != 0) {
+			html += '                                 <span class=" itemPercent">'+item.dcRate.addComma()+'%</span>';
+		}
+		html += '            </p>';
+		html += '        </a>';
+		html += '        	 <div class="shopBagBtn">';
+		html += '                <button type="button" class="btn btn_defalt" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'">';
+		html += '                    <span>쇼핑백 담기</span>';
+		html += '                </button>';
+		html += '            </div>';
+		html += '    </div>';
+		html += '</div>';
+	});
+	return html;
+	
+}
+
+
+var fnSocialListSearch = function() {
+	fnSocialInfiniteScrollInit();
+	gagaInfiniteScroll.getHistory();
+}
+// 인피니트 스크롤 초기화
+var fnSocialInfiniteScrollInit = function(){
+	sessionStorage.removeItem(document.location.href);
+	//History 초기화
+	$("#listBox").html("");
+}
+
+
+//인피니트 스크롤 이벤트 발생 시 데이터 가져오기
+var fnGetInfiniteScrollDataList = function(pageNum) {
+	$("#socialForm input[name=pageNo]").val(pageNum+1);
+	gagajf.ajaxFormSubmit("/social/list",document.socialForm, gagaInfiniteScroll.jsonToHtml);
+}
+
+var fnDrawInfiniteScrollData = function (result){
+	let totalCnt = result.totalCnt;
+	gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
+
+	if (result.dataList != null && result.dataList.length > 0) {
+		let lastPage = result.paging.pageable.pageNo;
+		let endRow = result.endRow - result.paging.pageable.pageSize;
+		
+		var htm = fnGetSocialList(result, lastPage, endRow);
+		gagaInfiniteScroll.draw(htm);
+	}else{
+		if($("#socialForm input[name=pageNo]").val()==1){
+			var html = '';
+			html += '<div class="nodata" >';
+			html += '	<div class="txt_box">';
+			html += '		<p>';
+			html += '			진행하는 핫딜이 없습니다.';
+			html += '		</p>';
+			html += '	</div>';
+			html += '	<div class="btn_box">';
+			html += '		<button class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>';
+			html += '	</div>';
+			html += '</div>';	
+			
+			$('#listBox').html(html);
+		}
+		$("#divLastPage").show();
+		gagaInfiniteScroll.draw('not');
+	}
+}
+
+
 $(function(){
+	fnSocialListSearch();
        /* 핫딜 countDown */
        function hotdealTimer() {
            var endTime = new Date(socialInfo.socialEddt); // 남은시간 지정
@@ -137,6 +224,24 @@ $(function(){
        setInterval(function() { hotdealTimer(); }, 1000);
        /* countDown */
 });
+
+/* $(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 = {};
+		}
+		fnSocialListSearch();
+	}else{
+
+		fnSocialListSearch();
+	}
+});
+ */
+
+
 </script>
 </th:block>
 

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

@@ -1780,7 +1780,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 
 
 /*  modal popup  */
-.blocker{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:auto;/*z-index:999999;*/ z-index:200; padding:0px;box-sizing:border-box;background-color:#000;background-color:rgba(0,0,0,0.75);text-align:center;}
+.blocker{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:auto;/*z-index:999999;*/ z-index:200; padding:0px;box-sizing:border-box;background-color:#000;background-color:rgba(0,0,0,0.75);text-align:center;pointer-events: none;}
 .blocker:before{content:"";display:inline-block;height:100%;vertical-align:middle;margin-right:-0.05em;}
 .blocker.behind{background-color:transparent;}
 .modal{

+ 17 - 9
src/main/webapp/ux/pc/css/layout.css

@@ -89,7 +89,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 .more_category a.btn_more_cate {position:relative; display:inline-block; padding-right:16px; color:#888; font-size:16px; font-weight:300; z-index:8;}
 .more_category a.btn_more_cate:after {display:block; position:absolute; top:2px; right:0; width:6px; height:6px; border:2px solid #888; border-width:2px 2px 0 0; transform:rotate(135deg); -webkit-transform:rotate(135deg); content:''}
 .more_category.on a.btn_more_cate:after {top:5px; transform:rotate(-45deg); -webkit-transform:rotate(-45deg); content:''}
-.more_category .cate_list {display:none; position:absolute; left:-30px; top:-22px; background:#222; min-width:180px; padding:60px 25px 25px; box-sizing:initial; border:1px solid #aaa; z-index:2;}
+.more_category .cate_list {display:none; position:absolute; left:-30px; top:-22px; background:#222; min-width:180px; padding:60px 25px 25px; box-sizing:initial; border:1px solid #aaa; z-index:5;}
 .more_category .cate_list ul li {margin-top:14px; display: none;}
 .more_category .cate_list ul li:first-child {margin-top:0}
 .more_category .cate_list ul li a {display:block; padding:5px; color:#fff; font-size:19px;}
@@ -1672,9 +1672,11 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.dp .list_content.nodata .itemsGrp {display:none;}
 	.dp .list_content.nodata .list_defult {display:block;}
 	.dp .list_defult {display:none; text-align:center; padding: 120px 0 160px;}
-	.dp .list_defult > div:first-child {margin-bottom:46px;}
-	.dp .list_defult > div:first-child p {line-height: 2;}
+	.dp .list_defult > div:first-child {margin-bottom:40px;}
+	.dp .list_defult > div:first-child p {line-height: 2; font-size: 16px; color:#666; font-weight: 300;}
+	.dp .list_defult > div:first-child p::before {content:''; display:block; width:36px; height:46px; margin:0 auto 24px; background:url('/images/pc/ico_content_none.png') no-repeat;}
 	.dp .list_defult .ui_row {justify-content: center; margin-bottom: 0;}
+	.dp .list_defult .ui_row .btn {color:#222; font-size:14px; font-weight:300;padding: 9px 23px;}
 	
 	/* dp_sticky_nav_리스트 */
 	.dp .sticky_nav_list {margin-top:60px}
@@ -1792,7 +1794,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail {position: absolute; left: 0; bottom: 100px; z-index: 9; padding: 23px; padding-bottom: 0;}
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail * {display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; color: #fff; font-weight: 300; letter-spacing: 0;}
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .brand {font-size: 14px;}
-	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .tit {margin:20px 0 15px; max-height:66px; font-size:24px; line-height:1.4; word-break:keep-all; text-align:left;}
+	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .tit {margin:20px 0 15px; padding-bottom: 0; max-height:66px; font-size:24px; line-height:1.4; word-break:keep-all; text-align:left;}
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .sale {font-size: 14px;}
 	.dp_Exhibition .exhi_list .exhi_item_pr {background: #fff; padding: 20px; position: relative; z-index: 9; width: 88.4%; margin:-70px auto 0;}
 	.dp_Exhibition .exhi_list .exhi_item_pr li {height: 150px; margin-bottom: 16px;}
@@ -2677,7 +2679,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 
 	.pd_detail .area_desc .desc_wrap {/*position:absolute; right:auto; top:0; background:#eee*/width:500px; z-index:2;}
 	.pd_detail .area_desc .desc_wrap.absbottom {position:absolute; top:auto; bottom:0px;}
-	.pd_detail .area_desc .desc_wrap.fixbottom {position:fixed; top:auto; bottom:0px;}
+	.pd_detail .area_desc .desc_wrap.fixbottom {position:fixed; top: 100px; bottom:0px;}
 	
 	.pd_detail .area_desc .desc_wrap .timer_box {position:relative; padding-bottom:30px;}
 	.pd_detail .area_desc .desc_wrap .timer_box::after{content:''; position:absolute; right:-12px; bottom:18px; border:12px solid transparent; border-top:12px solid #fff; transform:rotate(-45deg);}
@@ -2782,6 +2784,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	
 	/* pd_deal_옵션셀렉트 폼 */
 	.pd .option_box [class^="opt_"] {}
+	.pd .option_box [class^="opt_"] .select_custom .combo .list {height:170%;}
 	.option_box [class^="opt_"] .form_field {display:block; margin-top:10px;}
 	.option_box [class^="opt_"] .form_field:first-child {margin-top:0}
 	.option_box [class^="opt_"] .select_custom {min-height:52px;}
@@ -3067,7 +3070,9 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd_desc_wrap .item_descrp .area_list::after {content:''; position:absolute; right:-62px; top:0; bottom:0; width:1px; height:100%; background:#ddd; z-index:2;}
 	.pd_desc_wrap .item_descrp .area_option {float:right;}
 	.pd_desc_wrap .item_descrp .area_option .opt_wrap {width:500px; padding-left:60px; padding-top:30px;}
-	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px}
+	/* .pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px;} */
+	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px;height: calc(100% - 11%);}
+	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop .option_box {overflow-y: auto; height: calc(100% - 25%);}
 	.pd_desc_wrap .item_descrp .area_option .opt_wrap.absbottom {position:absolute; top:auto; bottom:0px; right:70px;}
 	@media screen and (max-width:1459px) {
 		.pd.deal .tab_detail_nav.fix ul {position:absolute; left:0; top:0; width:100%; height:60px; z-index:25;}
@@ -3587,7 +3592,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd_review .area_rv_best .btn_arrow {position:absolute; right:0; top:0px; width:50px; height:24px; z-index:2;}
 	.pd_review .area_rv_best .btn_arrow::after {clear:both; display:block;}
 	.pd_review .area_rv_best .btn_arrow .swiper-button-prev,
-	.pd_review .area_rv_best .btn_arrow .swiper-button-next {display:inline-block; position:absolute; left:auto; right:auto; top:3px; bottom:auto; width:auto; height:auto; margin:0}
+	.pd_review .area_rv_best .btn_arrow .swiper-button-next {display:inline-block; position:absolute; left:auto; right:auto; top:3px; bottom:auto; width:auto; height:auto; margin:0;background:#ffffff;}
 	.pd_review .area_rv_best .btn_arrow .swiper-button-prev {content:''; display:block; position:absolute; top:3px; left:4px; width:14px; height:14px; border:2px solid #a7a7a7; border-width:2px 2px 0 0; transform:rotate(-135deg); -webkit-transform:rotate(-135deg);}
 	.pd_review .area_rv_best .btn_arrow .swiper-button-next {content:''; display:block; position:absolute; top:3px; right:4px; width:14px; height:14px; border:2px solid #a7a7a7; border-width:2px 2px 0 0; transform:rotate(45deg); -webkit-transform:rotate(45deg);}
 	.pd_review .area_rv_best .best_review {width:100%;}
@@ -3837,7 +3842,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.br_lookbook_view .swiper-button-next::after {background-position:100% 50%;}
 	.br_lookbook_view .swiper-button-prev::after {background-position:0% 50%;}
 
-	.content.br_lookbook_view.cont_visual {padding-bottom:120px;}
+	.content.br_lookbook_view.cont_visual {padding-bottom:80px;}
 	.br_lookbook_view.cont_visual .cont_head {margin-bottom:60px}
 	.br_lookbook_view.cont_visual .cont_body .area_slider {margin-left:-70px; margin-right:-70px;}
 	.br_lookbook_view.cont_visual .swiper-slide {width: auto; height: 660px;}
@@ -3853,7 +3858,10 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.br_lookbook_view.cont_visual .swiper-button-prev {left:70px;}
 	.br_lookbook_view.cont_visual .swiper-button-next::after,
 	.br_lookbook_view.cont_visual .swiper-button-prev::after {filter:invert(100%);}
-	.br_lookbook_view.cont_visual .text_cont {margin-top:80px; color:#666; font-size:16px; font-weight:200; line-height:26px;}
+	/* .br_lookbook_view.cont_visual .text_cont {margin-top:80px; color:#666; font-size:16px; font-weight:200; line-height:26px;} */
+	
+	.br_lookbook_view.cont_txts {margin-bottom:120px;pointer-events: none;}
+	.br_lookbook_view.cont_txts .text_cont {color:#666; font-size:16px; font-weight:200; line-height:26px; background: #ffffff; pointer-events: none;}
 
 	.content.br_lookbook_view.cont_items {padding-top:120px; padding-bottom:120px; background:#f5f5f5;}
 	.br_lookbook_view.cont_items .cont_head h3 {margin-bottom:40px; color:#222; font-size:24px; font-weight:500;}

+ 11 - 9
src/main/webapp/ux/pc/css/main.css

@@ -86,9 +86,10 @@
 .post-visual .txtWrap dl.w,
 .post-visual .txtWrap dl.w + button {color:#ffffff; border-color:#fff;}
 .post-visual .txtWrap dt {font-size:18px; padding-bottom:20px; font-weight:200;}
-.post-visual .txtWrap dd {font-size:62px;line-height:1;font-weight:500; padding-bottom:5px;}
-.post-visual .txtWrap dd.txt_xs {font-size:18px;line-height:1;font-weight:200;padding:20px 0 0px 0;}
-.post-visual .vrt_txt{width:auto;height:auto;font-size:18px;color:#888888;position:absolute;left:-90px;bottom:-99px;top:0;-webkit-transform:rotate(-90deg);transform:rotate(-180deg); white-space: nowrap; -webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;}
+.post-visual .txtWrap dd {font-size:62px;line-height:1;font-weight:500; padding-bottom:5px; display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp: 1;-webkit-box-orient: vertical; overflow:hidden;}
+.post-visual .txtWrap dd.txt_xs {font-size:18px;line-height:1;font-weight:200;padding:20px 0 0px 0; display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp: 1;-webkit-box-orient: vertical; max-height:37px; overflow:hidden;}
+/* .post-visual .vrt_txt{width:auto;height:auto;font-size:18px;color:#888888;position:absolute;left:-90px;bottom:-99px;top:0;-webkit-transform:rotate(-90deg);transform:rotate(-180deg); white-space: nowrap; -webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;} */
+.post-visual .vrt_txt{width: 500px;height: 20px;box-sizing: content-box;display: inline-block;text-align: left;font-size: 18px;color: #888888;position: absolute;left: -80%;bottom: 160px;position: relative;left: -65%;bottom: -160px;top: auto;-webkit-transform: rotate(-90deg);transform: rotate(-90deg);white-space: nowrap;}
 .post-visual.swiper-container {margin-left:-30px;}
 .post-visual .swiper-pagination-bullets{bottom:0px;}
 .post-visual .swiper-wrapper{width:100%;height:750px; height:auto; margin:0px auto;padding-bottom:65px;filter:drop-shadow(0px 0px 10px rgba(0, 0, 0, 0.2));}
@@ -151,7 +152,7 @@
 		padding-left:0;
 	}
 
-	.post-visual .vrt_txt {bottom:-79px !important;}
+	.post-visual .vrt_txt {bottom:-120px !important;}
 	.post-visual.swiper-container {margin-left:0px;}
 	.main .post-visual .swiper-slide {padding-bottom:20px;}
 	.main .post-visual .swiper-slide-prev {}
@@ -221,7 +222,7 @@
 		*/
 	}   
 
-	.main .post-visual .swiper-slide .vrt_txt {left:-50px;}
+	.main .post-visual .swiper-slide .vrt_txt {left:-50%;left:-354px;}
 }
 
 .post-visual .swiper-slide img::after{
@@ -366,6 +367,7 @@
 .main_2stage .cont_body {}
 .bnnbox_crop {width:100%;}
 .bnnbox_crop::after {content:''; clear:both; display:block;}
+.bnnbox_crop > div {width: 100%;height: 230px;float: none;overflow: hidden;}
 .bnnbox_crop > .bnn_half {float:left; width:50%;}
 .bnnbox_crop > .bnn_half > a {display:block; position:relative; width:100%; height:0%; padding-top:26.0918%; overflow:hidden;}
 .bnnbox_crop > .bnn_half > a img {position:absolute; left:50%; right:0; top:50%; bottom:auto; transform:translate(-50%, -50%); width:auto; height:100%;}
@@ -575,13 +577,13 @@ header.minify .common_header.br_header::after {bottom:-565px;}
 .brand_main .brand_visual .cont_body {}
 .brand_main .brand_visual .swiper-button-prev {left:70px; opacity:0.5;}
 .brand_main .brand_visual .swiper-button-next {right:70px; opacity:0.5;}
-.brand_main .post-visual.swiper-container {margin-left:0;}
+.brand_main .post-visual .swiper-container {margin-left:0;}
 .brand_main .post-visual .swiper-wrapper {padding-bottom:0;}
-.brand_main .post-visual .swiper-slide {position:relative; max-width:1520px; padding-left:28.9473%; mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; -webkit-mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; transition:all 200ms ease;}
+.brand_main .post-visual .swiper-slide {position:relative; max-width:1520px; padding-left:28.9473%; mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; -webkit-mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; /*transition:all 200ms ease;*/}
 .brand_main .post-visual .swiper-slide img {width:1080px; margin:0;}
 .brand_main .post-visual .swiper-slide .txtWrap {opacity:0; position:absolute; padding-left:0px; top:110px; bottom:auto; left:0px; right:auto; z-index:1;}
 .brand_main .post-visual .txtWrap dt {font-size:0; padding-bottom:0;}
-.brand_main .post-visual .swiper-slide-active {opacity:1;}
+.brand_main .post-visual .swiper-slide-active {opacity:1 !important;}
 .brand_main .post-visual .swiper-slide-active .txtWrap {animation-name: fade-in;animation-duration: 1.5s;animation-delay: 1s;animation-fill-mode: both;}
 
 @keyframes fade-in {
@@ -598,7 +600,7 @@ header.minify .common_header.br_header::after {bottom:-565px;}
 }
 
 .brand_main .post-visual .swiper-slide-prev {opacity:0;}
-.brand_main .post-visual .swiper-slide-next {padding-left:0px; padding-right:440px;}
+.brand_main .post-visual .swiper-slide-next {opacity:1 !important; padding-left:0px; padding-right:440px;}
 .brand_main .post-visual .swiper-controls {position:absolute; width:auto; bottom:100px; left:190px; padding-right:15px; z-index:10;}
 .brand_main .post-visual .swiper-controls .swiper-pagination {margin-top:0}
 

+ 17 - 4
src/main/webapp/ux/pc/js/common-ui.js

@@ -87,11 +87,13 @@ $(document).ready(function() {
 				var fileReader = new FileReader();
 				fileReader.onload = (function(e) {
 					var file = e.target;
+					console.log(file);
 					$("<span class=\"pics\">" +
 						"<img class=\"picsThumbs\" src=\"" + e.target.result + "\" title=\"" + file.name + "\"/>" +
 						"<br/><span class=\"removes\">Removes image</span>" +
 						"</span>").insertAfter("#fileAdd");
 					$(".removes").click(function(){
+						$(this).parent(".pics").closest(".imgUpload").children("input").val("");
 						$(this).parent(".pics").remove();
 						cmtLa.css('display', 'block');
 						cmtIn.css('display', 'block');
@@ -492,13 +494,24 @@ $(document).ready( function() {
 
 
 	
-	
+	//210428_카테고리 재클릭 시 사라짐
 	//상품 리스트_필터
+	var listFilNum = 0;
 	$('.filter_list ul li').click(function(){ 
-		$(".filter_list ul li").removeClass('on');
+		//$(".filter_list ul li").removeClass('on');
 		$(".dp_list .sort, .sch_result .sort").removeClass('on');
-		$(this).addClass('on');
-		$("."+$(this).data('id')).addClass('on');
+		if($(this).hasClass("on")){
+			$(this).removeClass('on');
+			$("."+$(this).data('id')).removeClass('on');
+			listFilNum = 0;
+		} else {
+			$(".filter_list ul li").removeClass('on');
+			$(this).addClass('on');
+			$("."+$(this).data('id')).addClass('on');
+			listFilNum = 1;
+		}
+		console.log();
+		
 		$('.sort ul li').removeClass('on');
 		$('.sort ul li div').hide();
 		$('.container .dp_list .fillter, .container .sch_result .fillter').show();

+ 2 - 2
src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollLayer.js

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

+ 20 - 13
src/main/webapp/ux/style24_link.js

@@ -268,20 +268,27 @@ function cfnAddCart(cartList) {
 		success : function(result) {
 			if(result.message == "SUCCESS") {
 				if(result.cartGb == "C") {
-					mcxDialog.confirm("<div class="+"dialog-title"+">"+"상품이 쇼핑백에 추가되었습니다.</div><p>쇼핑백으로 이동하시겠습니까?</p>", {
-						cancelBtnText: "계속 쇼핑하기",
-						sureBtnText: "쇼핑백 가기",
-						sureBtnClick: function(){
-							location.href='/cart/list/form'; 	//내 쇼핑백 이동url
+					// 룩북 및 이벤트 페이지에서 여러 타입의 상품이 들어 올 수 있음. 반복문으로 들어오므로 cartList[0].multiGoodsGb == O면 confirm 창 안띄움.
+					// 일반적인 장바구니 담기를 위해 공백이나 O가 아닌 값일때 confirm 처리
+					if(!(cartList != null && cartList[0].multiGoodsGb != null && cartList[0].multiGoodsGb == "O")) {
+						mcxDialog.confirm("<div class=" + "dialog-title" + ">" + "상품이 쇼핑백에 추가되었습니다.</div><p>쇼핑백으로 이동하시겠습니까?</p>", {
+							cancelBtnText: "계속 쇼핑하기",
+							sureBtnText  : "쇼핑백 가기",
+							sureBtnClick : function () {
+								location.href = '/cart/list/form'; 	//내 쇼핑백 이동url
+							}
+						});
+						
+						// PC버전에서만 동작해야함(퀵메뉴)
+						if (navigator.userAgent.indexOf('Mobile') == -1) {
+							fnGetCartGoodsList();
+						}
+						
+						// 장바구니 팝업에서
+						if (cartList != null && cartList[0].popupYn != null && cartList[0].popupYn == "Y") {
+							let data = {shotDelvUseYn: $("input[name=shotDelvUseYn]:checked").val()};
+							getCartList(data);
 						}
-					});
-					
-					fnGetCartGoodsList();
-					
-					// 장바구니 팝업에서
-					if(cartList != null && cartList[0].popupYn != null && cartList[0].popupYn == "Y") {
-						let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
-						getCartList(data);
 					}
 				} else if (result.cartGb == "O"){
 					let orderHtml = "";