Sfoglia il codice sorgente

Merge branch 'develop' into jsshin

jsshin 5 anni fa
parent
commit
722bc3dd70
34 ha cambiato i file con 883 aggiunte e 521 eliminazioni
  1. 1 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  2. 3 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  3. 11 1
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  4. 16 13
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  5. 18 3
      src/main/java/com/style24/front/biz/web/TsfSocialController.java
  6. 1 0
      src/main/java/com/style24/persistence/domain/Cate4Srch.java
  7. 2 2
      src/main/java/com/style24/persistence/domain/Review.java
  8. 1 1
      src/main/java/com/style24/persistence/domain/Social.java
  9. 59 51
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  10. 208 207
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  11. 3 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml
  12. 2 2
      src/main/resources/config/application-dev.yml
  13. 2 2
      src/main/resources/config/application-locd.yml
  14. 2 2
      src/main/resources/config/application-tsit.yml
  15. 71 0
      src/main/webapp/WEB-INF/views/mob/cart/CartDelvFeeSaveGoodsPopupMob.html
  16. 37 26
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  17. 46 43
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  18. 95 0
      src/main/webapp/WEB-INF/views/mob/cart/CartTmtbSalesGoodsPopupMob.html
  19. 13 13
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  20. 1 3
      src/main/webapp/WEB-INF/views/web/cart/CartTmtbSalesGoodsPopupWeb.html
  21. 1 1
      src/main/webapp/WEB-INF/views/web/display/BestMainFormWeb.html
  22. 5 8
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  23. 76 15
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  24. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaDetailFormWeb.html
  25. 4 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsShopBenefitFormWeb.html
  26. 16 14
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  27. 0 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  28. 133 77
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  29. 1 1
      src/main/webapp/ux/pc/css/common.css
  30. 9 5
      src/main/webapp/ux/pc/css/layout.css
  31. 6 5
      src/main/webapp/ux/pc/css/main.css
  32. 17 4
      src/main/webapp/ux/pc/js/common-ui.js
  33. 2 2
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollLayer.js
  34. 20 13
      src/main/webapp/ux/style24_link.js

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

@@ -400,6 +400,7 @@ public class TsfDisplayService {
 	public Collection<Goods> getBestItemCategoryGoodsList(Contents contents) {
 		Cate4Srch cate4Srch = new Cate4Srch();
 
+		cate4Srch.setPageGb(contents.getPageGb());
 		cate4Srch.setContentsLoc(contents.getContentsLoc());
 		cate4Srch.setPageable(contents.getPageable());
 		cate4Srch.setPageNo(contents.getPageNo());

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

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

@@ -168,6 +168,12 @@ public class TsfDisplayController extends TsfBaseController {
 			mainLayoutList.add(mainLayout);
 		}
 
+		mav.addObject(paramMap.get("preview"));
+		mav.addObject(paramMap.get("viewDt"));
+		mav.addObject("viewPage", "G037_10");
+		//mav.addObject("popupCateNo", "");
+
+		
 		//log.info("mainLayoutList::{}", mainLayoutList);
 		mav.addObject("mainLayoutList", mainLayoutList);
 		mav.setViewName(super.getDeviceViewName("display/MallMainForm"));
@@ -696,14 +702,18 @@ public class TsfDisplayController extends TsfBaseController {
 		contents.setPageGb("BEST");
 		MainLayout mainLayout = new MainLayout();
 		mainLayout.setGoodsList(displayService.getBestItemCategoryGoodsList(contents));
-
 		int totalCnt = mainLayout.getGoodsList().size();
+		if(totalCnt>100){
+			totalCnt = 100;
+		}
 		pageable.setTotalCount(totalCnt);
 		contents.setPageable(pageable);
 
 		result.set("paging", contents);
 		result.set("totalCnt", totalCnt);
 		result.set("endRow", pageable.getEndRow());
+		contents.setContentsLoc("SCM003");
+		contents.setPageGb("BEST");
 		result.set("dataList", displayService.getBestItemCategoryGoodsList(contents));
 		return result;
 	}

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

+ 18 - 3
src/main/java/com/style24/front/biz/web/TsfSocialController.java

@@ -6,14 +6,18 @@ 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;
 
@@ -65,15 +69,26 @@ public class TsfSocialController extends TsfBaseController {
 	 * @author sowon
 	 * @since 2021. 4. 29
 	 */
-	@GetMapping("/list")
+	@PostMapping("/list")
 	@ResponseBody
-	public Collection<Social> getSocialList(Social social) {
+	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 socialService.getSocialGoodsList(social);
+		return result;
 	}
 	
 

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

@@ -52,6 +52,7 @@ public class Cate4Srch extends TscBaseDomain {
 	private String preview;			// 미리보기 여부 (Y:미리보기)
 
 	private String filterGb;		// 필터 구분값
+	private String pageGb;
 
 	private TscPageRequest pageable;				// 페이징
 	private int pageNo = 1;

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

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

@@ -1160,8 +1160,11 @@
 		                 , G.REG_DT DESC
 		                 , G.GOODS_CD) AS NUMB
 		                     </when>
-		                     <when test="contentsLoc == 'SCM002' or contentsLoc == 'SCM003'"> <!-- md추천 -->
+		                     <when test="contentsLoc == 'SCM002' or (contentsLoc == 'SCM003' and pageGb == null)"> <!-- md추천 -->
 		                  , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD ,G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC) AS NUMB
+		                     </when>
+		                     <when test="contentsLoc == 'SCM003' and pageGb != null and pageGb == 'BEST'">
+		                  , ROW_NUMBER() OVER(ORDER BY C4.CATE1_NO, CG.DISP_ORD ,G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC) AS NUMB
 		                     </when>
 		                     <otherwise>
 		                 , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
@@ -1170,62 +1173,67 @@
 		                     </otherwise>
 		                 </choose>
 		            <choose>
-						<when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007'"> <!-- md추천 -->
-							FROM	TB_CONTENTS CT
-							, TMP_CONTENTS_GOODS CTG
-							, TB_GOODS G
-							, TB_GOODS_STOCK S
-							, TB_BRAND B
-							, TB_BRAND_GROUP BG
-							WHERE	CT.CONTENTS_LOC = CTG.CONTENTS_LOC
-							AND 	CT.DISP_ORD = CTG.CONTENTS_SQ
-							AND		CTG.GOODS_CD = G.GOODS_CD
-							AND		CTG.GOODS_CD = S.GOODS_CD
-							AND		G.BRAND_CD = B.BRAND_CD
-							AND     B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-							AND		CT.CONTENTS_LOC = #{contentsLoc}
-						    AND 	CTG.CONTENTS_SQ = #{dispOrd}
-							AND		NOW() BETWEEN CT.DISP_STDT AND CT.DISP_EDDT
-						</when>
-		            	<otherwise>
-							FROM   TB_CATE_4SRCH C4
-							, TB_CATE_GOODS CG
-							, TB_GOODS G
-							, TB_GOODS_STOCK S
-							, TB_BRAND B
-							, TB_BRAND_GROUP BG
-							<if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
-								, TB_GOODS_SUMMARY GS
-							</if>
-							WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
-							<choose>
-								<when test="brandGroupNo != null and brandGroupNo != ''">
-									AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
-								</when>
-								<otherwise>
-									AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-								</otherwise>
-							</choose>
-							AND    CG.GOODS_CD = G.GOODS_CD
-							AND    CG.GOODS_CD = S.GOODS_CD
-							AND    G.BRAND_CD = B.BRAND_CD
-							AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-							<if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
-								AND    CG.GOODS_CD = GS.GOODS_CD
-							</if>
-							AND    C4.SITE_CD = #{siteCd}
-							AND    C4.CATE_GB = #{cateGb}
-							AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
-							AND    C4.CATE1_NO = #{cate1No}
-							AND    C4.CONTENTS_LOC = #{contentsLoc}
-						</otherwise>
-					</choose>
+		                <when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007'"> <!-- md추천 -->
+		                    FROM	TB_CONTENTS CT
+		                    , TMP_CONTENTS_GOODS CTG
+		                    , TB_GOODS G
+		                    , TB_GOODS_STOCK S
+		                    , TB_BRAND B
+		                    , TB_BRAND_GROUP BG
+		                    WHERE	CT.CONTENTS_LOC = CTG.CONTENTS_LOC
+		                    AND 	CT.DISP_ORD = CTG.CONTENTS_SQ
+		                    AND		CTG.GOODS_CD = G.GOODS_CD
+		                    AND		CTG.GOODS_CD = S.GOODS_CD
+		                    AND		G.BRAND_CD = B.BRAND_CD
+		                    AND     B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		                    AND		CT.CONTENTS_LOC = #{contentsLoc}
+		                    AND 	CTG.CONTENTS_SQ = #{dispOrd}
+		                    AND		NOW() BETWEEN CT.DISP_STDT AND CT.DISP_EDDT
+		                </when>
+		                <otherwise>
+		                    FROM   TB_CATE_4SRCH C4
+		                    , TB_CATE_GOODS CG
+		                    , TB_GOODS G
+		                    , TB_GOODS_STOCK S
+		                    , TB_BRAND B
+		                    , TB_BRAND_GROUP BG
+		                    <if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		                    , TB_GOODS_SUMMARY GS
+		                    </if>
+		                    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		                    <choose>
+		                        <when test="brandGroupNo != null and brandGroupNo != ''">
+		                    AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		                        </when>
+		                        <otherwise>
+		                    AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		                        </otherwise>
+		                    </choose>
+		                    AND    CG.GOODS_CD = G.GOODS_CD
+		                    AND    CG.GOODS_CD = S.GOODS_CD
+		                    AND    G.BRAND_CD = B.BRAND_CD
+		                    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		                    <if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		                    AND    CG.GOODS_CD = GS.GOODS_CD
+	                        </if>
+	                        AND    C4.SITE_CD = #{siteCd}
+	                        AND    C4.CATE_GB = #{cateGb}
+	                        AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
+	                        <if test="pageGb == null or pageGb != 'BEST'">
+		                    AND    C4.CATE1_NO = #{cate1No}
+		                    </if>
+		                    AND    C4.CONTENTS_LOC = #{contentsLoc}
+		              </otherwise>
+		           </choose>
 		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
 		            AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
 		            AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
 		            AND    S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
 		            AND    B.USE_YN = 'Y'
 		            AND    BG.USE_YN = 'Y'
+		            <if test="pageGb != null and pageGb == 'BEST'">
+		            ORDER BY C4.CATE1_NO
+		            </if>
 		           ) G
 		    WHERE  1=1
 		<if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">

+ 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

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

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

@@ -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>
@@ -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>
@@ -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")) {
@@ -1205,7 +1205,7 @@
 
 		// 페이지 이동
 		function fnGoToGoodsDetail(goodsCd, ordCanYn) {
-			if(ordCanYn == "Y") {
+			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;

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

@@ -270,7 +270,7 @@
 
 	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
 	<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-	<script th:src="@{'/biz/goodsSession.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goodsSession.js"></script>
+	<script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
 
 	<script th:inline="javascript">
 /*<![CDATA[*/

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

@@ -83,7 +83,6 @@
 								<p>
 									<span class="tit">남은시간</span>
 									<span class="timer">
-										<em id="d-days">0</em>
 										<em id="d-hours">0</em>
 										<em id="d-minutes">0</em>
 										<em id="d-seconds">0</em>
@@ -351,9 +350,9 @@
 					}else{ 
 						tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Down\')">\n';	
 					}
-					tag2 += '<div>'+ item.optCd1Nm+'</div>\n';
+					tag2 += '<div class="opt_name">'+ item.optCd1Nm+'</div>\n';
 					if (item.addPrice > 0){
-						tag2 += '<div>+'+ item.addPrice.addComma() +'원</div>\n';	
+						tag2 += '<div class="opt_price">+'+ item.addPrice.addComma() +'원</div>\n';	
 					}
 					tag2 += '<input type="hidden" name="opt1" value="'+ goodsCd +'" currPrice="'+ currPrice+'" optCd1="'+item.optCd1+'"  minOrdQty="'+item.minOrdQty+'"  maxOrdQty="'+item.maxOrdQty+'"   selfGoodsYn="'+selfGoodsYn+'" />\n';
 					tag2 += '</li>\n';
@@ -466,9 +465,9 @@
 					}else{
 						tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'Down\' )">\n';	
 					}
-					tag2 += '<div>'+ item.optCd2+'</div>\n';
+					tag2 += '<div class="opt_name">'+ item.optCd2+'</div>\n';
 					if (item.addPrice > 0){
-						tag2 += '<div>+'+ item.addPrice.addComma() +'원</div>\n';	
+						tag2 += '<div class="opt_price">+'+ item.addPrice.addComma() +'원</div>\n';	
 					}
 					tag2 += '<input type="hidden" name="opt2" value="'+ goodsCd +'" currPrice="'+ currPrice+'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'" optCd1Nm="'+item.optCd1Nm+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
 					tag2 += '</li>\n';
@@ -878,9 +877,7 @@
 					if (seconds < '10') { seconds = '0' + seconds; }
 	
 					if (Number(days) > 0 ){
-						$('#d-days').html(days);	
-					}else{
-						$('#d-days').css('display','none');
+						hours = Number(hours) + (Number(days) * 24);
 					}
 					$('#d-hours').html(hours);
 					$('#d-minutes').html(minutes);

+ 76 - 15
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -791,8 +791,13 @@
 													<ul >
 														<li th:each="lookbookGoods, status : ${lookbook.lookbookGoodsList}">
 															<div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''"
-																					th:attr="goodsCd=${lookbookGoods.goodsCd}, optCd=${lookbookGoods.optCd}, minOrdQty=${lookbookGoods.minOrdQty},  goodsType=${lookbookGoods.goodsType}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}"> <!-- 판매불가 상품에 unable 추가 -->
+																					th:attr="goodsCd=${lookbookGoods.goodsCd}, optCdInfo=${lookbookGoods.optCdInfo},
+																							minOrdQty=${lookbookGoods.minOrdQty},  goodsType=${lookbookGoods.goodsType}, 
+																							ithrCd=${ithrCd}, contentsLoc=${contentsLoc}"> <!-- 판매불가 상품에 unable 추가 -->
 																<div class="item_state">
+																	<th:block th:each="optCd : ${#strings.arraySplit(lookbookGoods.optCdInfo,',')}">
+																	<input type="hidden" name="lookbookGoodsOptCd" th:value="${optCd}"/>  
+																	</th:block>
 																	<th:block th:if="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}">
 																	<a href="javascript:void(0);" class="itemLink" >
 																	</th:block>
@@ -1167,32 +1172,88 @@
 		
 		let $obj = $(obj);
 		let $target = $obj.parent().find('.li_item').find('.item_prod');
+		let goodsSize = $target.length;
 		let btnType = "C";
 		let params = [];
-		
+		let goodsIdx = 0;
 		$target.each(function(){
+			goodsIdx ++; 
 			if ($(this).hasClass('unable')) {
 				
 			}else{
 				
-				let obj = new Object();
-				obj.goodsCd = $(this).attr("goodsCd");
-				obj.optCd = $(this).attr("optCd");
-				obj.goodsQty = $(this).attr("minOrdQty");
-				obj.goodsType = $(this).attr("goodsType");
-				obj.cartGb = btnType;
-				obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
-				obj.ithrCd = $(this).attr("ithrCd");
-				obj.contentsLoc = $(this).attr("contentsLoc");
-				obj.planDtlSq = '';
-				params.push(obj);
+				// 옵션확인
+				let goodsCnt = $(this).find('input[name=lookbookGoodsOptCd]').length;
+				if (goodsCnt == 1){
+					let arrOpt = $(this).find('input[name=lookbookGoodsOptCd]').val();
+					let arrOptInfo = arrOpt.split(':');
+					
+					let obj = new Object();
+					obj.goodsCd = $(this).attr("goodsCd");
+					//obj.optCd = $(this).attr("optCd");
+					obj.optCd = arrOptInfo[1];
+					obj.goodsQty = $(this).attr("minOrdQty");
+					obj.goodsType = $(this).attr("goodsType");
+					obj.cartGb = btnType;
+					obj.afLinkCd = '';
+					obj.ithrCd = $(this).attr("ithrCd");
+					obj.contentsLoc = $(this).attr("contentsLoc");
+					obj.planDtlSq = '';
+					obj.multiGoodsGb = 'O'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+					if (goodsIdx == goodsSize){
+						obj.multiGoodsGb = 'E'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+					}
+					params.push(obj);
+					
+					// 장바구니담기
+					cfnAddCart(params);	
+				}else{
+					let $goods = $(this);
+					let cartGoodsList = [];
+					let compsList = [];
+					let goodsList = {
+						cartCompsList : new Array()
+					}
+					
+					let arrInfo = $(this).find('input[name=lookbookGoodsOptCd]').val().split(',');	// 상품코드단위
+					
+					
+					$.each(arrInfo, function(idx, item) {
+						let arrOptInfo = item.split(':');
+						
+						let obj = new Object();
+						obj.cartGb = btnType;
+						obj.goodsType = $goods.attr("goodsType");
+						obj.goodsCd = $goods.attr("goodsCd");
+						obj.itemCd =arrOptInfo[0];
+						obj.optCd = arrOptInfo[1];
+						obj.goodsQty = $goods.attr("minOrdQty");
+						obj.afLinkCd = '';
+						obj.ithrCd =  $goods.attr("ithrCd");
+						obj.contentsLoc = $goods.attr("contentsLoc");
+						obj.planDtlSq = ''
+						obj.multiGoodsGb = 'O'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+						if (goodsIdx == goodsSize){
+							obj.multiGoodsGb = 'E'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+						}
+						compsList.push(obj);
+						
+					});
+
+					goodsList.cartCompsList = compsList;
+					cartGoodsList.push(goodsList);
+					
+					// 장바구니담기
+					cfnAddCart(cartGoodsList);
+				}
+				
 			}
 		});
 		
 		// 장바구니담기
-		if (params.length > 0){
+		/* if (params.length > 0){
 			cfnAddCart(params);	
-		}
+		} */
 	}
 	
 	// 품절처리

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

@@ -32,7 +32,7 @@
 				</div>
 				<div class="form_field">
 					<div class="input_box">
-						<textarea class="doc_itemqna" name="questContent" id="" cols="30" rows="10" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
+						<textarea class="doc_itemqna" name="questContent" id="" cols="30" rows="10" maxlength="500" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
 						<p class="txt_cnt">
 							<span id="itemqna_cnt" class="itemqna_cnt">(<em class="c_primary">0</em>/500자)</span>
 						</p>			  

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

@@ -72,8 +72,10 @@
 							</colgroup>
 							<tbody>
 								<tr th:each="freeGoods, status : ${freeGoodsList}">
-									<th><th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시</th>
-									<td><th:block th:text="${freeGoods.goodsNm}"></th:block> <th:block th:text="${#numbers.formatInteger(freeGoods.itemQty, 0,'COMMA')}"></th:block>개 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></td>
+									<td>
+										<div class="th"><th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시</div>
+										<div class="td"><th:block th:text="${freeGoods.goodsNm}"></th:block> <th:block th:text="${#numbers.formatInteger(freeGoods.itemQty, 0,'COMMA')}"></th:block>개 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></div>
+									</td>
 								</tr>
 							</tbody>
 						</table>

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

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

+ 133 - 77
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -39,10 +39,19 @@
                         </div>
                     </div>  
                     <div class="list_content">
-                        <div class="itemsGrp rowtype" id="socialList"> <!-- itemsGrp rank hot deal --> <!-- rowtype 추가시 가로형태로 출력 -->
-                  
-                        </div>
+                        <div class="itemsGrp rowtype"> <!-- itemsGrp rank hot deal --> <!-- rowtype 추가시 가로형태로 출력 -->
+									<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>
@@ -50,11 +59,17 @@
 
         </div>
     </div>   
-<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-<script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
+<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">
 let socialInfo = [[${socialInfo}]];
 let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
+
+
 var socialAddCart = function (obj) {
 
 	let btnType = "C";
@@ -78,86 +93,109 @@ var socialAddCart = function (obj) {
 	} 
 }
 
-let fnGetSocialList = function() {
-	let actionUrl = '/social/list';
+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;
 	
-	$.getJSON(actionUrl
-		, function(result, status) {
-		html = '';
-			if (status == 'success') {
-				if (result.length > 0) {
-					$.each(result, 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>';
-					});
-					$("#socialList").html(html);
-					
-				} else {
-					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>';	
-					
-					$("#socialList").html(html);
-					$('#eventTotCnt').html('<span>0</span>개의 이벤트');
-				}
-			}
-		});
 }
 
+
+var fnSocialListSearch = function() {
+	fnSocialInfiniteScrollInit();
+	gagaInfiniteScroll.getHistory();
+}
+// 인피니트 스크롤 초기화
+var fnSocialInfiniteScrollInit = function(){
+	sessionStorage.removeItem(document.location.href);
+	//History 초기화
+	$("#listBox").html("");
+}
+
+
 //인피니트 스크롤 이벤트 발생 시 데이터 가져오기
 var fnGetInfiniteScrollDataList = function(pageNum) {
-	// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
-	gagajf.ajaxSubmitForm(document.searchForm, "/goods/list", "json", gagaInfiniteScroll.jsonToHtml);
+	$("#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(){
-	fnGetSocialList();
+	fnSocialListSearch();
        /* 핫딜 countDown */
        function hotdealTimer() {
            var endTime = new Date(socialInfo.socialEddt); // 남은시간 지정
@@ -186,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{

+ 9 - 5
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;}
@@ -2679,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);}
@@ -2784,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;}
@@ -3071,7 +3072,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.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;height: calc(100% - 11%);}
-	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop .option_box {overflow-y: auto; height: calc(100% - 30%);}
+	.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;}
@@ -3841,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;}
@@ -3857,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;}

+ 6 - 5
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{

+ 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 = "";