Browse Source

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

card007 5 years ago
parent
commit
7ff7721f0a
30 changed files with 802 additions and 299 deletions
  1. 9 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 11 0
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  3. 24 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  4. 9 5
      src/main/java/com/style24/front/biz/service/TsfGiftcardService.java
  5. 29 17
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  6. 22 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  7. 13 7
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  8. 3 1
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  9. 2 0
      src/main/java/com/style24/front/biz/web/TsfSocialController.java
  10. 5 0
      src/main/java/com/style24/persistence/domain/Contents.java
  11. 1 0
      src/main/java/com/style24/persistence/domain/MainLayout.java
  12. 33 0
      src/main/java/com/style24/persistence/domain/Tmtb.java
  13. 15 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  14. 4 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  15. 50 10
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  16. 105 84
      src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml
  17. 15 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  18. 87 31
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  19. 7 6
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  20. 3 3
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  21. 50 2
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  22. 95 11
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  23. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html
  24. 4 8
      src/main/webapp/WEB-INF/views/web/goods/GoodsShopBenefitFormWeb.html
  25. 3 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  26. 184 89
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  28. 5 11
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  29. 11 5
      src/main/webapp/biz/goodsSession.js
  30. 1 1
      src/main/webapp/ux/pc/css/common.css

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

@@ -181,4 +181,13 @@ public interface TsfDisplayDao {
 	 * @date 2021. 4. 8
 	 */
 	Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch);
+
+	/**
+	 * 몰메인 BESTITEM 카테고리 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 9
+	 */
+	Collection<Contents> getBestItemCategoryList(Contents contents);
 }

+ 11 - 0
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -18,6 +18,7 @@ import com.style24.persistence.domain.Measurement;
 import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.SizeInfo;
+import com.style24.persistence.domain.Tmtb;
 import com.style24.persistence.domain.VideoDisploc;
 
 /**
@@ -305,6 +306,16 @@ public interface TsfGoodsDao {
 	 */
 	Collection<Goods> getRecentlyGoodsList(Goods goods);
 
+	/**
+	 * 상품의 다다익선 목록 
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 4. 11
+	 */
+	Collection<Tmtb> getTmtbList(Goods goods);
+
 	/**
 	 * 컨텐츠카테고리상품 목록
 	 * @param cate - 카테고리 정보

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

@@ -322,7 +322,31 @@ public class TsfDisplayService {
 		log.info("getContentsForGoods contentsList.size()::{}", contentsList.size());
 
 		return contentsList;
+	}
 
+	/**
+	 * 몰메인 BESTITEM 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 9
+	 */
+	public Collection<Contents> getBestItemForGoods(Contents contents) {
+		contents.setContentsLoc("SCM003");
+		Collection<Contents> contentsList = displayDao.getBestItemCategoryList(contents);
+		Cate4Srch tempCate = new Cate4Srch();
+
+		for(Contents data : contentsList){
+			tempCate.setContentsLoc(data.getContentsLoc());
+			tempCate.setMaxRow(10);
+			tempCate.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+			tempCate.setCate1No(data.getCateNo());
+			tempCate.setSiteCd(data.getSiteCd());
+			tempCate.setCateGb(data.getCateGb());
+			data.setGoodsList(goodsDao.getContentsCategoryGoodsList(tempCate));
+		}
+
+		return contentsList;
 	}
 
 	/**

+ 9 - 5
src/main/java/com/style24/front/biz/service/TsfGiftcardService.java

@@ -117,17 +117,21 @@ public class TsfGiftcardService {
 			giftcard.setResultVal(result);  
 			giftcardDao.saveGiftcardApi(giftcard);
 			throw new IllegalArgumentException("시스템 오류입니다.");
-		} else if(result.equals("00")){
-			
-			giftcard.setResultVal(result);  
+		} else{
+					
+			giftcard.setResultVal("00");  
 			giftcardDao.saveGiftcardApi(giftcard);
 			
 			// 성공일 경우 tb_cust_giftcard insert
 			String[] param = result.split("[|]");
+			// [2021-04-01, 오전, 12:00:00]
+			String[] param2 = param[2].split(" ");
+			String[] param3 = param[3].split(" ");
 			
 			giftcard.setChgGfcdAmt(Integer.parseInt(param[1])); // 승인금액
-			giftcard.setUseStDate(param[2]);
-			giftcard.setUseExpDate(param[3]);
+			giftcard.setRmGfcdAmt(Integer.parseInt(param[1])); // 승인금액
+			giftcard.setUseStDate(param2[0]);
+			giftcard.setUseExpDate(param3[0]);
 			
 			giftcardDao.getGiftcardUseConfirm(giftcard);
 		}

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

@@ -3,6 +3,15 @@ package com.style24.front.biz.service;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.core.support.env.TscConstants;
+import com.style24.front.biz.dao.TsfDisplayDao;
+import com.style24.front.biz.dao.TsfGoodsDao;
+import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Delivery;
@@ -12,23 +21,15 @@ import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsSafeNo;
+import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsViewHst;
-import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.Measurement;
 import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.SizeInfo;
+import com.style24.persistence.domain.Tmtb;
 import com.style24.persistence.domain.VideoDisploc;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.style24.core.support.env.TscConstants;
-import com.style24.front.biz.dao.TsfGoodsDao;
-import com.style24.front.biz.dao.TsfDisplayDao;
-import com.style24.front.support.security.session.TsfSession;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -263,7 +264,7 @@ public class TsfGoodsService {
 
 			compsInfo = goodsDao.getGoodsCompsInfo(compsInfo);						// 구성상품 정보 조회
 
-			if(TscConstants.GoodsStat.SOLDOUT.value().equals(compsInfo.getGoodsStat())) {
+			if (TscConstants.GoodsStat.SOLDOUT.value().equals(compsInfo.getGoodsStat())) {
 				return compsInfo.getGoodsNm() + " 상품은 품절입니다.";
 			} else if (!TscConstants.GoodsStat.APPR.value().equals(compsInfo.getGoodsStat())) {
 				return compsInfo.getGoodsNm() + " 상품은 구매할 수 없습니다.";
@@ -275,11 +276,11 @@ public class TsfGoodsService {
 
 			stockCheck = goodsDao.getGoodsStockInfo(stockCheck);					// 구성 상품 재고 조회
 
-			if(stockCheck == null) {
+			if (stockCheck == null) {
 				return "재고체크 실패했습니다. 새로고침 후 다시 시도해주세요.";
 			}
 
-			if("Y".equals(stockCheck.getSoldoutYn())) {
+			if ("Y".equals(stockCheck.getSoldoutYn())) {
 				return stockCheck.getOptCd2() + " 옵션은 품절입니다.";
 			}
 
@@ -293,11 +294,11 @@ public class TsfGoodsService {
 
 			stockCheck = goodsDao.getGoodsStockInfo(stockCheck);					// 구성 상품 재고 조회
 
-			if(stockCheck == null) {
+			if (stockCheck == null) {
 				return "재고체크 실패했습니다. 새로고침 후 다시 시도해주세요.";
 			}
 
-			if("Y".equals(stockCheck.getSoldoutYn())) {
+			if ("Y".equals(stockCheck.getSoldoutYn())) {
 				return stockCheck.getOptCd2() + " 옵션은 품절입니다.";
 			}
 
@@ -701,6 +702,17 @@ public class TsfGoodsService {
 		return goodsDao.getRecentlyGoodsList(goods);
 	}
 
+	/**
+	 * 상품의 다다익선 목록 
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 4. 11
+	 */
+	public Collection<Tmtb> getTmtbList(Goods goods) {
+		return goodsDao.getTmtbList(goods);
+	}
+
 	/**
 	 * 컨텐츠카테고리상품 목록
 	 * @param cate - 카테고리 정보
@@ -738,7 +750,7 @@ public class TsfGoodsService {
 
 			// 추천솔루션 데이터가 없으면 베스트로 등록된 상품 조회
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
-		} else if(cate.getContentsLoc().equals("SBM013")){
+		} else if (cate.getContentsLoc().equals("SBM013")) {
 			GoodsSearch goodsSearch = new GoodsSearch();
 			goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
 			goodsSearch.setCustNo(cate.getCustNo());
@@ -746,7 +758,7 @@ public class TsfGoodsService {
 			goodsSearch.setMaxRow(cate.getMaxRow());
 			goodsSearch.setContentsLoc(cate.getContentsLoc());
 			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
-		}else{
+		} else {
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 		}
 

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

@@ -144,6 +144,10 @@ public class TsfDisplayController extends TsfBaseController {
 				}
 			}
 
+			if(contentsLoc.equals("SMM004")){
+				mainLayout.setBestItemList(displayService.getBestItemForGoods(contents));
+			}
+
 			if (contentsLoc.equals("SMM006")) {
 				Social social = new Social();
 				social.setSiteCd("G000_10");
@@ -184,6 +188,22 @@ public class TsfDisplayController extends TsfBaseController {
 		return displayService.getGnbBrandGroupList(contents);
 	}
 
+	/**
+	 * GNB탭 > TOP BANNER 목록
+	 * @param contents - 컨텐츠 정보
+	 * @return
+	 * @throws Exception
+	 * @author bin2107
+	 * @since 2021. 4. 11
+	 */
+	@GetMapping("/gnb/topbanner/list")
+	@ResponseBody
+	public Collection<Contents> getGnbTopBannerList(Contents contents) {
+		contents.setContentsLoc("SGNB001");
+		contents.setMaxRow(1);
+		return displayService.getContentsList(contents);
+	}
+
 //	/**
 //	 * 전체 카테고리 목록
 //	 * @return
@@ -348,6 +368,7 @@ public class TsfDisplayController extends TsfBaseController {
 		// 기획전
 		Contents contents = new Contents();
 		contents.setContentsLoc("SCM001");
+		contents.setCateNo(cate.getCate1No());
 		mav.addObject("planningList", displayService.getContentsList(contents));
 
 		// 신상품
@@ -489,6 +510,7 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("filterSeasonList", displayService.getCategoryFilter(cate4Srch, "SEASON"));
 		mav.addObject("filterColorList", displayService.getCategoryFilter(cate4Srch, "COLOR"));
 		mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
+		mav.addObject("sortGb" , "new");
 		mav.addObject("cateInfo", cate4Srch);
 
 		return mav;

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

@@ -135,10 +135,10 @@ public class TsfGoodsController extends TsfBaseController {
 		if (StringUtils.isEmpty(paramsGoods.getColorCd())) {
 			paramsGoods.setColorCd(goods.getMainColorCd());
 			paramsGoods.setOptCd1(goods.getMainColorCd());
-		}else {
+		} else {
 			paramsGoods.setOptCd1(paramsGoods.getColorCd());
 		}
-		
+
 		paramsGoods.setSelfGoodsYn(goods.getSelfGoodsYn());
 		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType()) || TscConstants.GoodsType.SET.value().equals(goods.getGoodsType())) {
 			paramsGoods.setColorCd("XX");
@@ -160,8 +160,8 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 기본정보
 		mav.addObject("goodsInfo", goods);
 		// 상품 네비정보
-//		paramsGoods.setCateGb("G032_101"); 		//by item
-//		mav.addObject("goodsNavigation", goodsService.getGoodsNavigation(paramsGoods));
+		paramsGoods.setCateGb("G032_101"); 		//by item
+		mav.addObject("goodsNavigation", goodsService.getGoodsNavigation(paramsGoods));
 		// 상품 이미지정보
 		mav.addObject("goodsImgList", goodsService.getGoodsImgList(paramsGoods));
 		// 상품 동영상정보
@@ -231,13 +231,17 @@ public class TsfGoodsController extends TsfBaseController {
 			paramsGoods.setMaxRownum(1);
 			mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
 
+			// 다다익선
+			paramsGoods.setMaxRownum(1);
+			mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
+
 			// 베스트 상품평
 			Review review = new Review();
 			review.setGoodsCd(goods.getGoodsCd());
 			review.setBestYn("Y");
 			review.setGoodsType(goods.getGoodsType());
 			if ("P".equals(paramsGoods.getFrontGb())) {
-				review.setRownum(1);	
+				review.setRownum(1);
 			}
 			mav.addObject("bestReviewList", reviewService.getReviewList(review));
 		}
@@ -555,6 +559,8 @@ public class TsfGoodsController extends TsfBaseController {
 		paramsGoods.setMaxRownum(1);
 		mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
 		// 다다익선
+		paramsGoods.setMaxRownum(1);
+		mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
 
 		// 사은품
 
@@ -776,7 +782,7 @@ public class TsfGoodsController extends TsfBaseController {
 
 		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
 		pageable.setTotalCount(reviewService.getReviewTotalCount(review));
-		review.setPageable(pageable);	
+		review.setPageable(pageable);
 
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
@@ -1193,7 +1199,7 @@ public class TsfGoodsController extends TsfBaseController {
 		review.setGoodsType(goods.getGoodsType());
 		log.info("review {}", review);
 		mav.addObject("reviewCount", reviewService.getReviewTotalCount(review));	// 전체상품평 건수
-		
+
 		review.setRownum(1);
 		mav.addObject("reviewList", reviewService.getReviewList(review));	// 전체상품평 유무 확인
 		review.setBestYn("Y");

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

@@ -246,7 +246,9 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setPlanSq(planSq);
 		
 		result.set("replyList",planningService.getReplyList(plan));
-		result.set("custNo",TsfSession.getInfo().getCustNo());
+		if (TsfSession.isLogin()) {
+			result.set("custNo",TsfSession.getInfo().getCustNo());
+		}
 		return result;
 	}
 

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

@@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.servlet.ModelAndView;
 
+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;
@@ -40,6 +41,7 @@ public class TsfSocialController extends TsfBaseController {
 		// 디바이스 set
 		social.setFrontGb(TsfSession.getFrontGb());
 		social.setCustGb(TsfSession.getCustGb());
+		social.setSiteCd(TscConstants.Site.STYLE24.value());
 		
 		// 소셜(핫딜) 
 		mav.addObject("socialInfo", socialService.getSocialInfo(social));

+ 5 - 0
src/main/java/com/style24/persistence/domain/Contents.java

@@ -60,6 +60,11 @@ public class Contents extends TscBaseDomain {
 	private int planBrandGroupNo;
 	private String planBrandGroupNm;
 
+	// 몰메인 SMM003에서 사용
+	private String siteCd;
+	private String cateGb;
+	private String cateNm;
+
 	//private String contentsTitle;		// 메인 타이틀(md가 설정한)
 
 	private Collection<Cate1> cateList;	// 카테고리목록

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

@@ -34,5 +34,6 @@ public class MainLayout extends TscBaseDomain {
     private Social socialInfo;
     private Collection<Contents> mdPickList;
     private Collection<Contents> brandPickList;
+    private Collection<Contents> bestItemList;
 
 }

+ 33 - 0
src/main/java/com/style24/persistence/domain/Tmtb.java

@@ -0,0 +1,33 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 다다익선 Domain
+ *
+ * @author eskim
+ * @since 2021. 4. 11
+ */
+@SuppressWarnings("serial")
+@Data
+public class Tmtb extends TscBaseDomain {
+	// 다다익선 상품
+	private Integer tmtbSq;
+	private Integer tmtbSectionSq;
+	private Integer tmtbValSq;
+
+	private String sectionGb;		// 구간설정구분값(G810_10:수량,G810_11:금액)
+	private Integer sectionVal;		// 구간설정값/구간할인시작(수량이상,금액이상)
+
+	private String dcWay;			// 할인방식(G240_10:할인금액,G240_11:할인율)
+	private Integer dcVal;			// 할인값
+
+	private String delYn;			// 삭제여부
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrSectionSq;
+
+}

+ 15 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -855,4 +855,19 @@
 		AND W.CUST_NO = #{custNo}
 		</if>
 	</select>
+	
+	<!-- 몰메인 베스트아이템 조회 -->
+	<select id="getBestItemCategoryList" parameterType="Contents" resultType="Contents">
+		/* TsfDisplay.getBestItemCategoryList */
+		SELECT
+		       SITE_CD
+		     , CATE_GB
+		     , CATE1_NO AS CATE_NO
+			 , CATE1_NM AS CATE_NM
+             , CONTENTS_LOC
+		FROM  TB_CATE_4SRCH
+		WHERE 1=1
+		AND CATE_TYPE = 'G031_20'
+		AND	CONTENTS_LOC = #{contentsLoc}
+	</select>
 </mapper>

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

@@ -76,7 +76,8 @@
 				 , CASE WHEN DATE_FORMAT(now(),'%Y%m%d') <![CDATA[<=]]> DATE_FORMAT(USE_EXP_DATE,'%Y%m%d') THEN 'Y' ELSE 'N' END AS USE_YN
 		 FROM TB_CUST_GIFTCARD CG 
 		 WHERE 1=1 
-		  AND CUST_NO = #{custNo}
+		  AND CG.CUST_NO = #{custNo}
+		ORDER BY CG.REG_DT DESC
 	</select>
 	
 	<insert id="saveGiftcardApi" parameterType="GiftCard">
@@ -124,8 +125,8 @@
 	         , #{chgGfcdAmt}
 	         , #{usGfcdAmt}
 	         , #{rmGfcdAmt}
-	         , #{useStDate}
-	         , #{useExpDate}
+	         , DATE_FORMAT(#{useStDate},'%Y%m%d') /**P*/
+	         , DATE_FORMAT(#{useExpDate},'%Y%m%d') /**P*/
 	         , #{regNo}
 	         , CURRENT_TIMESTAMP
 	         , #{updNo}

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

@@ -98,9 +98,7 @@
 		     , G.ITEMKIND_CD
 		     , G.FORMAL_GB
 		     , G.LIST_PRICE
-		     -- , BP.CURR_PRICE
-		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
-		     -- , 100 - ROUND((BP.CURR_PRICE / G.LIST_PRICE) * 100 ,0) AS DC_RATE
+		     , FN_GET_APPLY_CPN1_PRICE(G.GOODS_CD, #{frontGb})  AS CURR_PRICE
 		     , G.SELF_GOODS_YN
 		     , G.GOODS_STAT
 		     , (CASE WHEN #{frontGb} = 'P' THEN G.PNT_PRATE ELSE G.PNT_MRATE END) AS PNT_RATE
@@ -626,6 +624,8 @@
 		SELECT Z.*
 		     , 100 - ROUND((CURR_PRICE / LIST_PRICE) * 100 ,0) AS DC_RATE
 		     , FN_GET_GOODS_NM(GOODS_NM,GOODS_GB,FOREIGN_BUY_YN,PARALLEL_IMPORT_YN,ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = Z.GOODS_CD AND COLOR_CD = IFNULL(Z.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
+		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = Z.GOODS_CD AND COLOR_CD = IFNULL(Z.MAIN_COLOR_CD,'XX') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
 		FROM (
 		      SELECT B.GOODS_CD 
 		           , G.GOODS_NM
@@ -635,13 +635,11 @@
 		           , G.ORDER_MADE_YN
 		           , G.GOODS_STAT
 		           , G.GOODS_TYPE
+		           , G.MAIN_COLOR_CD
 		           , G.MIN_ORD_QTY 
 		           , (CASE WHEN E.DISP_NM_LANG = 'EN' THEN E.BRAND_GROUP_ENM ELSE E.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
 		           , G.LIST_PRICE
 		           , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
-		           , G.MAIN_COLOR_CD
-		           , (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') AS SYS_IMG_NM
-		           ,  (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 MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
 		           , S.STOCK_QTY
 		           , S.SOLDOUT_YN
 		           , S.OPT_CD
@@ -651,7 +649,14 @@
 		           , V.VIDEO_VAL_S
 		           , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		      FROM TB_TMTB A
-		      INNER JOIN TB_TMTB_APPLY_GOODS B ON a.TMTB_SQ  = B.TMTB_SQ
+		      INNER JOIN TB_TMTB_APPLY_GOODS B ON A.TMTB_SQ  = B.TMTB_SQ
+		                                       AND B.DEL_YN = 'N'
+		                                       AND B.GOODS_GB IN ( 'G800_10', 'G800_20')  -- 기본과 적용상품
+		      LEFT OUTER JOIN TB_TMTB_APPLY_GOODS BB ON B.TMTB_SQ  = BB.TMTB_SQ
+		                                       AND BB.DEL_YN = 'N'
+		                                       AND B.GOODS_CD = BB.GOODS_CD
+		                                       AND BB.GOODS_GB = 'G800_30'  -- 제외상품
+		                                       AND BB.GOODS_CD IS NULL
 		      INNER JOIN TB_GOODS G ON B.GOODS_CD = G.GOODS_CD
 		                            AND G.GOODS_STAT = 'G008_90'
 		                            AND G.SELF_MALL_YN = 'Y'
@@ -659,6 +664,9 @@
 		                            <if test='adminYn == null or adminYn != "Y"'>
 		                            AND G.GOODS_STAT = 'G008_90'
 		                            </if>
+		                            <![CDATA[
+		                            AND B.GOODS_CD <> #{goodsCd}  -- 자기상품은 제외
+		                            ]]>
 		      INNER JOIN TB_BRAND D ON G.BRAND_CD = D.BRAND_CD
 		                    AND D.USE_YN = 'Y'
 		      INNER JOIN TB_SITE_BRAND SB ON D.BRAND_CD  = SB.BRAND_CD
@@ -697,9 +705,9 @@
 		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
 		      WHERE NOW() BETWEEN A.TMTB_ST_DT AND A.TMTB_ED_DT
 		      AND A.TMTB_STAT ='G232_11'
-		      AND A.TMTB_SQ IN (SELECT TMTB_SQ FROM tb_tmtb_apply_goods WHERE GOODS_CD = #{goodsCd} AND DEL_YN = 'N')
-		      <![CDATA[
-		      AND B.GOODS_CD <> #{goodsCd}
+		       <![CDATA[
+		      AND A.TMTB_SQ IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD = #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB IN ( 'G800_10', 'G800_20')) -- 기본과 적용상품
+		      AND A.TMTB_SQ NOT IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD = #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB = 'G800_30') -- 제외상품
 		       ]]>
 		      ORDER BY A.TMTB_SQ 
 		) Z
@@ -860,6 +868,36 @@
 		ORDER  BY A.DISP_ORD DESC
 	</select>
 	
+	<!-- 상품의 다다익선 목록 -->
+	<select id="getTmtbList"  parameterType="Goods" resultType="Tmtb">
+		/* TsfGoods.getTmtbList */
+		SELECT Z.*
+		FROM (
+		      SELECT A.TMTB_SQ 
+		           , C.TMTB_SECTION_SQ 
+		           , D.TMTB_VAL_SQ 
+		           , C.SECTION_GB  -- 구간설정구분값(G810_10:수량,G810_11:금액)
+		           , C.SECTION_VAL -- 구간설정값/구간할인시작(수량이상,금액이상)
+		           , D.DC_WAY      -- 할인방식(G240_10:할인금액,G240_11:할인율)
+		           , D.DC_VAL      -- 할인값
+		      FROM TB_TMTB A
+		      INNER JOIN TB_TMTB_SECTION C ON A.TMTB_SQ = C.TMTB_SQ 
+		                                      AND C.DEL_YN  = 'N'
+		      INNER JOIN TB_TMTB_VAL D ON C.TMTB_SQ = D.TMTB_SQ
+		                               AND C.TMTB_SECTION_SQ  = D.TMTB_SECTION_SQ  
+		                               AND D.DEL_YN  = 'N'
+		      WHERE NOW() BETWEEN A.TMTB_ST_DT AND A.TMTB_ED_DT
+		      AND A.TMTB_STAT ='G232_11'  -- 진행중
+		      AND A.TMTB_SQ IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD =  #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB IN ( 'G800_10', 'G800_20')) -- 기본과 적용상품
+		      AND A.TMTB_SQ NOT IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD =  #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB = 'G800_30') -- 제외상품 
+		      ORDER BY A.TMTB_SQ , C.TMTB_SECTION_SQ , D.TMTB_VAL_SQ 
+		) Z
+		WHERE 1 = 1
+		<if test="maxRownum != null and maxRownum > 0">
+		LIMIT #{maxRownum}
+		</if> 
+	</select>
+	
 	<!-- 컨텐츠카테고리상품 목록 -->
 	<select id="getContentsCategoryGoodsList"  parameterType="Cate4Srch" resultType="Goods">
 		/* TsfGoods.getContentsCategoryGoodsList */
@@ -1185,4 +1223,6 @@
 		</if>
 	</select>
 	
+	
+	
 </mapper>

+ 105 - 84
src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml

@@ -24,91 +24,112 @@
 	
 	<!-- 소셜상품(=핫딜) 목록 -->
 	<select id="getSocialGoodsList" resultType="Social" parameterType="Social">
-		/* TsfSocial.getSocialGoodsList */
-		SELECT F.*
-		     , CASE WHEN F.GOODS_TYPE = 'G056_N' THEN
-		                IFNULL((SELECT SUM(CURR_STOCK_QTY - BASE_STOCK_QTY)
-		                        FROM   VW_STOCK WHERE GOODS_CD = F.GOODS_CD
-		                       ),0)
+		/* TsfSocial.getSocialGoodsList*/
+		WITH TAB_GOODS AS (
+		    SELECT S.SOCIAL_SQ
+		         , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                BG.BRAND_GROUP_ENM
 		            ELSE
-		                IFNULL((SELECT SUM(CURR_STOCK_QTY - BASE_STOCK_QTY)
-		                        FROM   VW_STOCK_COMPOSE
-		                        WHERE  GOODS_CD = F.GOODS_CD
-		                       ),0)
-		       END                           AS STOCK_QTY_SUM
-		     , (SELECT MAX(SYS_IMG_NM)
-		        FROM   TB_GOODS_IMG
-		        WHERE  GOODS_CD = F.GOODS_CD
-		        AND    COLOR_CD = F.MAIN_COLOR_CD
-		        AND    DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-		     , CASE WHEN IFNULL((SELECT COUNT(SYS_IMG_NM)
-		                         FROM   TB_GOODS_IMG
-		                         WHERE  GOODS_CD = F.GOODS_CD
-		                         AND    COLOR_CD = F.MAIN_COLOR_CD
-		                         AND    DEFAULT_IMG_YN = 'Y'
-		                        ),0) = 0 THEN
-		                'N'
-		            ELSE
-		                'Y'
-		       END                           AS GOODS_IMAGE_YN
-		     , CASE WHEN F.WISH_GOOD IS NULL THEN
-		                'N'
-		            ELSE
-		                'Y'
-		       END                           AS WISH_YN
-		FROM   (
-		        SELECT A.SOCIAL_SQ
-		             , A.SOCIAL_NM
-		             , A.SOCIAL_TYPE
-		             , A.SITE_CD
-		             , A.FRONT_GB
-		             , A.SOCIAL_STDT
-		             , A.SOCIAL_EDDT
-		             , A.SOCIAL_TNM
-		             , A.USE_YN
-		             , A.APPLY_GB
-		             , A.REG_DT
-		             , B.GOODS_CD
-		             , B.CURR_BPRICE
-		             , B.CURR_APRICE
-		             , B.DC_BRATE
-		             , B.DC_ARATE
-		             , B.DEL_YN
-		             , B.DISP_ORD
-		             , C.GOODS_NM
-		             , C.GOODS_TYPE
-		             , C.GOODS_TNM
-		             , C.LIST_PRICE
-		             , C.MAIN_COLOR_CD
-		             , D.BRAND_KNM
-		             , D.BRAND_ENM
-		             , W.CUST_NO
-		             , W.GOODS_CD AS WISH_GOOD
-		             <choose>
-		                 <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
-		             , IF(W.GOODS_CD IS NULL,'','likeit') AS LIKE_IT /*위시리스트담긴상품*/
-		                 </when>
-		                <otherwise>
-		             , ''                                 AS LIKE_IT /*위시리스트담긴상품*/
-		                </otherwise>
-		             </choose>
-		        FROM   TB_SOCIAL A INNER JOIN TB_SOCIAL_GOODS B ON A.SOCIAL_SQ = B.SOCIAL_SQ
-		                           INNER JOIN TB_GOODS C ON B.GOODS_CD = C.GOODS_CD
-		                           INNER JOIN TB_BRAND D ON C.BRAND_CD = D.BRAND_CD
-		                           LEFT JOIN TB_WISHLIST W ON C.GOODS_CD = W.GOODS_CD
-		                                                  AND W.CUST_NO = IFNULL(#{custNo},0)
-		        WHERE  1 = 1
-		        AND    NOW() BETWEEN A.SOCIAL_STDT AND A.SOCIAL_EDDT
-		        AND    A.USE_YN = 'Y' /*사용하는소셜*/
-		        AND    A.APPLY_GB = 'A' /*적용구분(P:대기,A:적용,F:종료)*/
-		        AND    A.FRONT_GB IN ('A',#{frontGb}) /*프론트구분*/
-		        AND    B.DEL_YN = 'N' /*삭제안된상품*/
-		        AND    C.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		        AND    C.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		        AND    NOW() BETWEEN C.SELL_STDT AND C.SELL_EDDT /*판매기간*/
-		        ORDER  BY B.DISP_ORD 
-		       ) F
-		WHERE  F.SOCIAL_SQ = #{socialSq}
+		                BG.BRAND_GROUP_KNM
+		       END                                     AS BRAND_GROUP_NM /*브랜드그룹명*/
+		         , SG.GOODS_CD                                               /*상품코드*/
+		         , G.GOODS_TNM                                               /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD                                           /*메인컬러코드*/
+		         , G.GOODS_NM                                                /*상품명*/
+		         , G.GOODS_GB                                                /*상품구분*/
+		         , G.FOREIGN_BUY_YN                                          /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN                                      /*병행수입여부*/
+		         , G.ORDER_MADE_YN                                           /*주문제작여부*/
+		         , G.LIST_PRICE                                              /*정상가*/
+		         , SG.CURR_APRICE                          AS CURR_PRICE     /*변경후현재판매가*/
+		         , SG.DC_ARATE                             AS DC_RATE        /*변경후할인율*/
+		         , SG.DISP_ORD                                               /*노출순서*/
+		         , G.GOODS_TYPE                                              /*상품유형*/
+		         , G.GOODS_STAT                                              /*상품상태*/
+		         , ROW_NUMBER() OVER(ORDER BY SG.DISP_ORD
+		                                    , SG.GOODS_CD) AS NUMB
+		    FROM   TB_SOCIAL S
+		         , TB_SOCIAL_GOODS SG
+		         , TB_GOODS G
+		         , TB_BRAND B
+		         , TB_BRAND_GROUP BG
+		    WHERE  S.SOCIAL_SQ = SG.SOCIAL_SQ
+		    AND    SG.GOODS_CD = G.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		    AND    S.SOCIAL_SQ = #{socialSq}
+		    AND    NOW() BETWEEN S.SOCIAL_STDT AND S.SOCIAL_EDDT
+		    AND    S.SOCIAL_TYPE = 'G062_10' /*핫딜*/
+		    AND    S.SITE_CD = #{siteCd}
+		    AND    S.FRONT_GB IN ('A', #{frontGb}) /*프론트구분*/
+		    AND    S.APPLY_GB = 'A' /*적용구분(P:대기,A:적용,F:종료)*/
+		    AND    S.USE_YN = 'Y' /*사용하는소셜*/
+		    AND    SG.DEL_YN = 'N' /*삭제안된상품*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한판매기간*/
+		)
+		, TAB_GOODS_IMG AS (
+		    /* 상품의 이미지 */
+		    SELECT GOODS_CD
+		         , MAX(SYS_IMG_NM)  AS SYS_IMG_NM
+		         , MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		    FROM (
+		          SELECT G.GOODS_CD
+		               , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		               , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		          FROM   TAB_GOODS G
+		               , TB_GOODS_IMG GI
+		          WHERE  G.GOODS_CD = GI.GOODS_CD
+		          AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		          ) Z
+		     GROUP BY GOODS_CD
+		)
+		, TAB_STOCK AS (
+		    SELECT G.GOODS_CD
+		         , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
+		    FROM   TAB_GOODS G
+		         , VW_STOCK S
+		    WHERE  G.GOODS_CD = S.GOODS_CD
+		    AND    G.GOODS_TYPE = 'G056_N'
+		    AND    S.DISP_YN = 'Y' /*노출하는상품만*/
+		    GROUP  BY G.GOODS_CD
+		    UNION ALL 
+		    SELECT G.GOODS_CD
+		         , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
+		    FROM   TAB_GOODS G
+		         , VW_STOCK_COMPOSE S
+		    WHERE  G.GOODS_CD = S.GOODS_CD
+		    AND    G.GOODS_TYPE != 'G056_N'
+		    AND    S.DISP_YN = 'Y' /*노출하는상품만*/
+		    GROUP  BY G.GOODS_CD
+		)
+		SELECT G.BRAND_GROUP_NM
+		     , G.GOODS_CD
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , G.GOODS_TNM
+		     , G.MAIN_COLOR_CD
+		     , G.LIST_PRICE
+		     , G.CURR_PRICE    /*현재판매가*/
+		     , G.DC_RATE
+		     , GI.SYS_IMG_NM
+		     , GI.SYS_IMG_NM2
+		     , S.STOCK_QTY_SUM
+		     <choose>
+		         <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		     , IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		         </when>
+		         <otherwise>
+		     , ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		         </otherwise>
+		     </choose>
+		FROM   TAB_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		LEFT OUTER JOIN TAB_STOCK S ON G.GOODS_CD = S.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+		                             AND W.CUST_NO = #{custNo}
+		</if>
 	</select>
 	
 </mapper>

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

@@ -46,6 +46,7 @@
 			         , G.GOODS_CD                                               /*상품코드*/
 			         , G.GOODS_NM                                               /*상품명*/
 			         , G.GOODS_GB                                               /*상품구분*/
+			         , G.GOODS_TYPE 											/*상품타입*/
 			         , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
 			         , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
 			         , G.ORDER_MADE_YN                                          /*주문제작여부*/
@@ -53,9 +54,19 @@
 			         , G.MAIN_COLOR_CD                                          /*대표색상코드*/
 			         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
 			         , G.CURR_PRICE                                             /*현재판매가*/
+			         , G.MIN_ORD_QTY                                            /*최소주문수량*/  				
+			         , S.OPT_CD
 			         , GS.STOCK_QTY
 			    FROM   TB_WISHlIST W
-			         , TB_GOODS G
+			         , TB_GOODS G LEFT OUTER JOIN (SELECT GOODS_CD
+		                                                   , SUM(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
+		                                                                                       ELSE CURR_STOCK_QTY END) AS STOCK_QTY
+		                                                    , MIN(SOLDOUT_YN) AS SOLDOUT_YN
+		                                                    , MIN(CASE WHEN SOLDOUT_YN = 'N' THEN OPT_CD 
+		                                                                                       ELSE 'XXX' END) AS OPT_CD 
+		                                                  FROM VW_STOCK
+		                                                  WHERE DISP_YN = 'Y'
+		                                                  GROUP BY GOODS_CD) S ON G.GOODS_CD = S.GOODS_CD
 			         , TB_GOODS_STOCK GS
 			         , TB_BRAND B
 			         , TB_BRAND_GROUP BG
@@ -85,6 +96,9 @@
 			       PG.BRAND_GROUP_NM
 			     , PG.GOODS_CD
 			     , PG.STOCK_QTY
+			     , PG.MIN_ORD_QTY
+			     , PG.GOODS_TYPE
+			     , PG.OPT_CD
 			     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
 			     , PG.GOODS_NM
 			     , PG.GOODS_TNM

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

@@ -19,37 +19,37 @@
 	<!-- head start -->
 	<div class="common_header">
 		<!-- 프로모션 띠 배너 등록 시 노출 -->
-<!-- 		<div class="hd_top_banner"> -->
-<!-- 			<div class="bnrtype_open" style="background-color:#496ac9;"> -->
-<!-- 				<a href="" target=""> -->
-<!-- 					<img src="/images/pc/thumb/tmp_top_banner2.jpg" alt="">	 -->
-<!-- 					<div class="open_bnr_area"> -->
-<!-- 						<img src="/images/pc/thumb/tmp_top_banner2_open.jpg" alt=""/> -->
-<!-- 					</div> -->
-<!-- 				</a> -->
-<!-- 				<button class="btn_toggle_bnr"><span>열기</span></button> -->
-<!-- 			</div> -->
-<!-- 			<div class="bnrtype_img" style="background-color:#57799d;"> -->
-<!-- 				<a href="" target=""> -->
-<!-- 					<img src="/images/pc/thumb/tmp_top_banner1.jpg" alt=""/> -->
-<!-- 				</a> -->
-<!-- 			</div> -->
-<!-- 			<div class="bnrtype_text" style="background-color:#fd4801;"> -->
-<!-- 				<a href="" target=""> -->
-<!-- 					<div style="color:#fff; font-size:20px; font-weight:300;"> -->
-<!-- 						<span style="font-weight:500">APP</span> 수신동의 하면 <span style="font-weight:500">1</span>만 포인트 증정! -->
-<!-- 					</div> -->
-<!-- 				</a> -->
-<!-- 			</div> -->
-<!-- 			<div class="close_bnr_area"> -->
-<!-- 				<form class="form_wrap"> -->
-<!-- 					<div class="form_field"> -->
-<!-- 						<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label> -->
-<!-- 					</div> -->
-<!-- 				</form> -->
-<!-- 				<button id="btn_close_bnr" class="btn_close"><span>닫기</span></button> -->
-<!-- 			</div> -->
-<!-- 		</div> -->
+ 		<div class="hd_top_banner" id="divTopbanner">
+<!-- 			<div class="bnrtype_open" style="background-color:#496ac9;">-->
+<!-- 				<a href="" target="">-->
+<!-- 					<img src="/images/pc/thumb/tmp_top_banner2.jpg" alt="">-->
+<!-- 					<div class="open_bnr_area">-->
+<!-- 						<img src="/images/pc/thumb/tmp_top_banner2_open.jpg" alt=""/>-->
+<!-- 					</div>-->
+<!-- 				</a>-->
+<!-- 				<button class="btn_toggle_bnr"><span>열기</span></button>-->
+<!-- 			</div>-->
+<!-- 			<div class="bnrtype_img" style="background-color:#57799d;">-->
+<!-- 				<a href="" target="">-->
+<!-- 					<img src="/images/pc/thumb/tmp_top_banner1.jpg" alt=""/>-->
+<!-- 				</a>-->
+<!-- 			</div>-->
+<!-- 			<div class="bnrtype_text" style="background-color:#fd4801;">-->
+<!-- 				<a href="" target="">-->
+<!-- 					<div style="color:#fff; font-size:20px; font-weight:300;">-->
+<!-- 						<span style="font-weight:500">APP</span> 수신동의 하면 <span style="font-weight:500">1</span>만 포인트 증정!-->
+<!-- 					</div>-->
+<!-- 				</a>-->
+<!-- 			</div>-->
+<!-- 			<div class="close_bnr_area">-->
+<!-- 				<form class="form_wrap">-->
+<!-- 					<div class="form_field">-->
+<!-- 						<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>-->
+<!-- 					</div>-->
+<!-- 				</form>-->
+<!-- 				<button id="btn_close_bnr" class="btn_close"><span>닫기</span></button>-->
+<!-- 			</div>-->
+ 		</div>
 		<!-- //프로모션 띠 배너 등록 시 노출 -->
 
 		<div class="area">
@@ -716,6 +716,59 @@
 		//검색창 호출
 		$(".common_search").addClass('active');
 	});
+
+
+	// 띠배너 조회
+	let fnCreateTopBanner = function (){
+		$.getJSON('/display/gnb/topbanner/list', function (result, status){
+			if(status=='success'){
+				if(result.length>0){
+					var bannerImgUrl = [[${@environment.getProperty('domain.image')}]];
+					$.each(result, function (idx, item) {
+						$('#divTopbanner').html('');
+						let tag = '';
+						if(item.contentsType == 'OPEN'){
+							tag +='<div class="bnrtype_open" style="background-color:'+item.strVar5+';">';
+							tag +=' 	<a href="'+item.strVar1+'" target="">';
+							tag +=' 		<img src="'+bannerImgUrl+''+item.imgPath1+'" alt="">';
+							tag +=' 		<div class="open_bnr_area">';
+							tag +=' 			<img src="'+bannerImgUrl+''+item.imgPath2+'" alt=""/>';
+							tag +=' 		</div>';
+							tag +=' 	</a>';
+							tag +=' 	<button class="btn_toggle_bnr"><span>열기</span></button>';
+							tag +='</div>';
+							if(item.strVar8=='Y'){
+								tag+='<div class="close_bnr_area">';
+								tag+=' 	<form class="form_wrap">';
+								tag+=' 		<div class="form_field">';
+								tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
+								tag+=' 		</div>';
+								tag+=' 	</form>';
+								tag+=' 	<button id="btn_close_bnr" class="btn_close"><span>닫기</span></button>';
+								tag+='</div>';
+							}
+						}else if(item.contentsType == 'IMG'){
+							tag+='<div class="bnrtype_img" style="background-color:'+item.strVar5+';">';
+							tag+=' 	<a href="'+item.strVar1+'" target="">';
+							tag+=' 		<img src="'+bannerImgUrl+''+item.imgPath1+'" alt=""/>';
+							tag+=' 	</a>';
+							tag+='</div>';
+						}else{
+							tag+='<div class="bnrtype_text" style="background-color:'+item.strVar5+';">';
+							tag+=' 	<a href="'+item.strVar1+'" target="">';
+							tag+=' 		<div style="color:'+item.strVar6+'; font-size:20px; font-weight:300;">';
+							tag+=' 			<span style="font-weight:500">'+item.strTitle1+'</span>';
+							tag+=' 		</div>';
+							tag+=' 	</a>';
+							tag+='</div>';
+						}
+
+						$('#divTopbanner').html(tag);
+					});
+				}
+			}
+		});
+	}
 	
 	$(document).ready(function() {
 		//TOP BANNER close
@@ -810,6 +863,9 @@
 		
 		// GNB탭 > 브랜드 생성
 		fnCreateGnbBrandGroup();
+
+		// 띠배너 조회
+		fnCreateTopBanner();
 	});
 /*]]>*/
 </script>

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

@@ -243,7 +243,7 @@
 							</div>
 							<div class="count_wrap">
 								<div>
-									<p><span id="totCntId">9999</span>개의 상품</p>
+									<p><span id="totCntId"></span>개의 상품</p>
 								</div>
 								<div>
 									<ul>
@@ -346,7 +346,7 @@
 
 			fnCreateCategoryList();
 
-			fnGoodsListSearch();
+			//fnGoodsListSearch();
 		});
 
 		var fnGoodsListSearch = function (){
@@ -491,7 +491,7 @@
 
 		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
 		$(window).on("pageshow", function(event) {
-			$('#filterForm input[name=brand]:checked').each(function(){
+			/*$('#filterForm input[name=brand]:checked').each(function(){
 				$(this).parent().addClass("active");
 			});
 			$('#filterForm input[name=size]:checked').each(function(){
@@ -499,7 +499,7 @@
 			});
 			$('#filterForm input[name=price]:checked').each(function(){
 				$(this).parent().addClass("active");
-			});
+			});*/
 			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
 				var historyData = sessionStorage.getItem(document.location.href);
 				if(historyData!=null){
@@ -530,14 +530,15 @@
 				}
 			}else{
 				fnCategoryGoodsInfiniteScrollInit();
-				var sortGb = [[${sortGb}]];
+				/*var sortGb = [[${sortGb}]];
 				if(sortGb=='new' || sortGb=='best'){
 					$("#sortSelect").val(sortGb);
 					$("#sortSelect").parent('div').children('span').text($("#sortSelect option:selected").text())
 					fnSortChange(sortGb);
 				}else{
 					fnGoodsListSearch();
-				}
+				}*/
+				fnGoodsListSearch();
 			}
 		});
 

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

@@ -29,13 +29,13 @@
 	</div>
 
 	<div class="wrap">
-		<div class="content dp_submain"> <!-- 페이지특정 클래스 = dp_list -->
+		<div class="content dp_submain" > <!-- 페이지특정 클래스 = dp_list -->
 			<div class="cont_head">
 				<div>
-					<h3 class="cate1Nm">여성</h3>
+					<h3 class="cate1Nm"></h3>
 				</div>
 			</div>
-			<div class="cont_body" th:if="${planningList != null}">
+			<div class="cont_body" th:if="${planningList != null and !planningList.empty}">
 				<div class="dp_sum_slide dp_inner">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">

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

@@ -136,6 +136,53 @@
 					</div>
 				</th:block>
 
+				<!-- 4. 잇 아이템 -->
+				<th:block th:if="${contentsLoc=='004'}">
+					<div class="content main_it">
+						<div class="cont_head">
+							<p class="displayH" th:text="${mainLayoutData.contentsTitle}"></p>
+							<a href="#none"><span>전체보기</span></a>
+						</div>
+						<div class="cont_body">
+							<div class="it_nav">
+								<ul>
+									<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.BestItemList}">
+										<li><button class="btn btn_link" th:attr="data-tab=${'it'+ContentsStat.count}"><span th:text="${ContentsData.cateNm}"></span></button></li>
+									</th:block>
+								</ul>
+							</div>
+							<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.BestItemList}">
+								<div class="swiper-container post-it it_item" th:id="${'it'+ContentsStat.count}">
+									<div class="swiper-wrapper">
+										<th:block th:each="bestItemData, bestItemStat : ${ContentsData.goodsList}">
+											<div class="swiper-slide">
+												<div class=" item_prod sUiXc "> <!-- item_prod ranker d_detail -->
+													<div class="item_state"> <!-- item_state AD soldout -->
+														<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${bestItemData.goodsCd}]], '', '', 'SMM004');">
+															<div class="shape ranker"><span th:text="${bestItemStat.count}"></span></div>
+															<div class="itemPic">
+																<img alt="BLACK-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + bestItemData.sysImgNm}" >
+																<button type="button" class="itemLike" th:classappend="${bestItemData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${bestItemData.goodsCd}, ithrCd='', contentsLoc='SMM004', planDtlSq=''">관심상품 추가</button>
+															</div>
+															<p class=" itemBrand" th:text="${bestItemData.brandGroupNm}">BRAND NAME</p>
+															<div class=" itemName" th:text="${bestItemData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+															<p class="itemPrice">[[${#numbers.formatInteger(bestItemData.currPrice,0,'COMMA')} + 원]]
+																<span class="itemPrice_original" th:if="${bestItemData.currPrice != bestItemData.listPrice}" th:text="${#numbers.formatInteger(bestItemData.listPrice,3,'COMMA')}">89,000</span>
+																<span class=" itemPercent" th:if="${bestItemData.currPrice != bestItemData.listPrice}" th:text="${(bestItemData.listPrice == 0 ? 0 : #numbers.formatDecimal((bestItemData.listPrice - bestItemData.currPrice) / (bestItemData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+															</p>
+															<div class="itemComment" th:text="${bestItemData.goodsTnm}">#데일리웨어로 매일입고싶은</div>
+														</a>
+													</div>
+												</div>
+											</div>
+										</th:block>
+									</div>
+								</div>
+							</th:block>
+						</div>
+					</div>
+				</th:block>
+
 				<!-- 5. 프로모션배너 -->
 				<th:block th:if="${contentsLoc=='005'}">
 					<div class="content main_2stage">
@@ -212,9 +259,9 @@
 															<p class="itemBrand" th:text="${goodsData.brandEnm}">BRAND NAME</p>
 															<div class="itemName" th:text="${goodsData.goodsNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
 															<p class="itemPrice">
-																[[${#numbers.formatInteger(goodsData.currAprice,0,'COMMA')} + 원]]
+																[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')} + 원]]
 																<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,0,'COMMA')} + '원'"></span>
-																<span class=" itemPercent" th:text="${#numbers.formatDecimal(goodsData.dcArate,1,0)} + '%'"></span>
+																<span class=" itemPercent" th:text="${#numbers.formatDecimal(goodsData.dcRate,1,0)} + '%'"></span>
 																<!--<span class="itemPercent" th:if="${planningGoods.currPrice != planningGoods.listPrice}" th:text="${(planningGoods.listPrice == 0 ? 0 : #numbers.formatDecimal((planningGoods.listPrice - planningGoods.currPrice) / (planningGoods.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>-->
 															</p>
 															<div class="itemComment" th:text="${goodsData.goodsTnm}">#데일리웨어로 매일입고싶은</div>
@@ -775,6 +822,7 @@ $(document).ready( function() {
 	//$("#header").load("head.html");
 	//$("#footer").load("foot.html");
 	$(".tag_list .btn").eq(0).trigger('click');
+	$(".it_nav .btn").eq(0).trigger('click');
 });
 
 /* SLIDE - MAIN_VISUAL */

+ 95 - 11
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -136,7 +136,7 @@
 																(goodsCouponList != null and !goodsCouponList.empty)
 															}" >
 								<dl>
-									<div class="bnf_shopping" th:if="${goodsCouponList != null and !goodsCouponList.empty}">
+									<div class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or (tmtbList != null and !tmtbList.empty)}">
 										<dt>쇼핑혜택</dt>
 											<dd>
 												<span th:if="${goodsCouponList != null and !goodsCouponList.empty}">
@@ -147,7 +147,12 @@
 												</em> 쿠폰 할인
 												</th:block>
 												</span> 
-												<span><em class="c_primary">99개</em> 이상 구매 시 <em class="c_primary">9,999,999원</em> 할인</span>
+												<span th:if="${tmtbList != null and !tmtbList.empty}">
+												<th:block th:each="tmtb, status : ${tmtbList}" th:if="${status.first}">
+												<em class="c_primary"><th:block th:text="${#numbers.formatInteger(tmtb.sectionVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.sectionGb == 'G810_10')? '개':'금액'}"></th:block></em> 이상 구매 시 
+												<em class="c_primary"><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block></em></em> 할인
+												</th:block>
+												</span>
 												<span>미니언즈 우산 증정</span>
 												<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 											</dd>
@@ -176,7 +181,7 @@
 									<ul >
 										<li th:each="goodsOption1, status : ${goodsOption1List}">
 											<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm +'?RS=64'}" alt="">
+												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm +'?RS=64'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 											</a>
 										</li>
 									</ul>
@@ -632,9 +637,9 @@
 											<th:block th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}"
 														th:each="lookbookGoods, goodsStatus : ${lookbook.lookbookGoodsList}">
 											<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
-												<button type="button"><span class="ico ico_picker"></span></button>
-												<div class="pick_descr">
-													<a href="javascript:void(0);" ><th:block th:text="${lookbookGoods.goodsFullNm}"></th:block>
+												<button type="button" th:onclick="fnLookbookPicker(this,[[${lookbookGoods.goodsCd}]]);"><span class="ico ico_picker"></span></button>
+												<div class="pick_descr" >
+													<a href="javascript:void(0);" >
 													</a>
 												</div>
 											</div>
@@ -660,12 +665,12 @@
 																	<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${lookbookGoods.goodsCd}]], '',[[${ithrCd}]],[[${contentsLoc}]] )">
 																	</th:block>
 																		<div class="itemPic">
-																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm+'?RS=100'}">
+																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm+'?RS=100'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																		</div>
 																		<p class="itemBrand" th:text="${lookbookGoods.brandGroupNm}">CURLYSUE 컬리수</p>
 																		<div class="itemName" th:text="${lookbookGoods.goodsFullNm}">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
 																		<p class="itemPrice">
-																			<th:block th:text="${#numbers.formatInteger(lookbookGoods.currPrice, 0,'COMMA')}"></th:block>
+																			<span id="itemCurrprice" th:text="${#numbers.formatInteger(lookbookGoods.currPrice, 0,'COMMA')}">1,000,000</span>
 																			<span class="itemPrice_original" th:if="${lookbookGoods.listPrice > lookbookGoods.currPrice}"  th:text="${#numbers.formatInteger(lookbookGoods.listPrice, 0,'COMMA')}">1,000,000</span>
 																			<span class="itemPercent" th:if="${lookbookGoods.dcRate > 0}" th:text="|${#numbers.formatDecimal(lookbookGoods.dcRate,0,0)}%|">30%</span>
 																		</p>
@@ -762,6 +767,7 @@
 	</div>	
 	<!-- //EP 제휴쿠폰 팝업 -->
 
+
 	<!-- 바로구매 장바구니 등록 정보 저장을 위한 form -->
 	<form id="directOrderForm" method="POST" action="/order/noMember"></form>
 <script th:inline="javascript">
@@ -1269,6 +1275,84 @@
 		
 	}
 	
+	//룩북 피커 선택시 레이어 노출
+	var fnLookbookPicker = function(obj,goodsCd){
+		let $obj = $(obj);
+		var str = '<div class="modal fade pd_pop pd_lookbook_pop" id="layer_lookbook_goods" tabindex="-1" role="dialog" aria-labelledby="pd_lookbook_label" aria-hidden="true">';
+		let $target = $obj.parent().parent().parent().find('.item_prod');
+		
+		let goodsImg = '';
+		let brandName = '';
+		let goodsName = '';
+		let currPrice = '';
+		let listPrice = '';
+		let dcRate = '';
+		let soldout = '';
+		
+		$target.each(function(){
+			if ($(this).attr('goodsCd') == goodsCd) {
+				
+				if ($(this).hasClass('unable')) soldout = 'sold_out';
+				
+				goodsImg = $(this).find('.itemPic').children('.pd_img').attr('src');
+				brandName = $(this).find('.itemBrand').text();
+				goodsName = $(this).find('.itemName').text();
+				currPrice = $(this).find('#itemCurrprice').text();
+				listPrice = $(this).find('.itemPrice_original').text();
+				dcRate = $(this).find('.itemPercent').text();
+			}
+		});
+		
+		if (gagajf.isNull(goodsName)){
+			return false;
+		}
+		
+		let tag = '';
+		tag += '	<div class="modal-dialog" role="document">\n';
+		tag += '		<div class="modal-content">\n';
+		tag += '			<div class="modal-header">\n';
+		tag += '				<h5 class="modal-title sr-only" id="layer_lookbook_goods">상품정보</h5>\n';
+		tag += '			</div>\n';
+		tag += '			<div class="modal-body">\n';
+		tag += '				<div class="itemsGrp">\n';
+		tag += '					<div class="item_prod '+ soldout+'"> <!-- 품절일때 sold_out 클래스 추가 요청 -->\n';
+		tag += '						<div class="item_state">\n';
+		tag += '							<div class="itemLink">\n';
+		tag += '								<div class="itemPic">\n';
+		tag += '									<img alt="BLACK-a" class=" vLHTC pd_img" src="'+goodsImg +'?RS=260"  onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
+		tag += '								</div>\n';
+		tag += '								<p class="itemBrand">'+brandName+'</p>\n';
+		tag += '								<div class="itemName">'+goodsName+'</div>\n';
+		if (listPrice != currPrice){
+			tag += '								<span class="itemPrice_original">'+listPrice+'</span>\n';	
+		}
+		tag += '								<p class="itemPrice">'+currPrice+'\n';
+		if (!gagajf.isNull(dcRate)){
+		tag += '									<span class="itemPercent">'+dcRate+'</span>\n';
+		}
+		tag += '								</p>\n';
+		if (gagajf.isNull(soldout)){
+			tag += '								<button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\''+goodsCd+'\',\'\',\'\')"><span>자세히 보기</span></button>\n';	
+		}
+		tag += '							</div>\n';
+		tag += '						</div>\n';
+		tag += '					</div>\n';
+		tag += '				</div>\n';
+		tag += '			</div>\n';
+		tag += '		</div>\n';
+		tag += '	</div>\n';
+		tag += '	<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer(\'layer_lookbook_goods\')" class="close-modal">Close</a>\n';
+
+		
+		if ($('#layer_lookbook_goods').length == 0) {
+			$('body').append(str+tag+'</div>');
+			$('#layer_lookbook_goods').modal("show");
+		}
+	}
+	
+	var fnGotoGoodsDetail = function(goodsCd){
+		
+	}
 	$(document).ready( function() {
 		
 		$('.timer_box').css('display', 'none');
@@ -1306,19 +1390,19 @@
 		params.goodsOtherGb = "together";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		fnGoodsTogetherSearch(params);
+		//fnGoodsTogetherSearch(params);
 		
 		// 추천 상품(ajax html)
 		params.goodsOtherGb = "recommend";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		fnGoodsRecommendSearch(params);
+		//fnGoodsRecommendSearch(params);
 		
 		// 비슷한 상품(ajax html)
 		params.goodsOtherGb = "like";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		fnGoodsLikeSearch(params);
+		//fnGoodsLikeSearch(params);
 	
 		
 		// 상품 대표설명 > 좌측 상품썸네일 navi, 우측 상품정보 고정 

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

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

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

@@ -45,7 +45,7 @@
 						</table>
 					</div>
 				</div>
-				<div class="benefit_blk">
+				<div class="benefit_blk" th:if="${(tmtbList != null and !tmtbList.empty)}">
 					<h6>다다익선</h6>
 					<div class="tbl type1">
 						<table>
@@ -54,13 +54,9 @@
 								<col width="*">
 							</colgroup>
 							<tbody>
-								<tr>
-									<th>9,999개 이상 구매 시</th>
-									<td>9,999,999원 할인</td>
-								</tr>
-								<tr>
-									<th>9,999개 이상 구매 시</th>
-									<td>20% 할인</td>
+								<tr th:each="tmtb, status : ${tmtbList}">
+									<th><th:block th:text="${#numbers.formatInteger(tmtb.sectionVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.sectionGb == 'G810_10')? '개':'금액'}"></th:block> 이상 구매 시</th>
+									<td><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block> 할인</td>
 								</tr>
 							</tbody>
 						</table>

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

@@ -120,7 +120,7 @@
 		</div>
 		<!-- // CONT-BODY -->
 		</div>
-	</div>
+
 <script th:inline="javascript">
 	let date = [[${date}]];
 	let year = date[0].year;
@@ -346,7 +346,8 @@
 				gagajf.ajaxJsonSubmit(
 						'/mypage/gift/use/confirm', jsonData,
 						function() {
-							cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);
+							$("#gift_input").val('');
+							//cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);
 						});
 			}
 		});

+ 184 - 89
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -126,8 +126,10 @@
 								<div class="cmt_thumb">
 									<div class="form_field">
 										<div class="imgUpload">
-											<label for="fileAdd" class="fileAdd" >업로드</label>
+											<label for="fileAdd" class="fileAdd" onclick="fnFileAdd()">업로드</label>
 											<input type="file" id="fileAdd" name="files[]" />
+											<input type="hidden" id="orgFileNm" name="orgFileNm">
+											<input type="hidden" id="sysFileNm" name="sysFileNm">
 										</div>
 									</div>
 								</div>
@@ -135,51 +137,7 @@
 							</form>
 						</div>
 						<div class="cmt_group" id="replyList">
-					   <!-- <div class="cmt_list_tit">
-								<strong>댓글</strong><span class="cnt">(9,999)</span>
-							</div>
-							데이터 있을 시
-							<ul class="cmt_list">
-								<li>
-									<div class="cmt_top">
-										<span class="writer">DI2****</span>
-										<span class="date">2020.12.30</span>
-									</div>
-									<div class="cmt_cont">
-										<p>
-											애용하는 회원으로서 스타일24의 리뉴얼은 저의 일처럼 기쁘네요 ^^ 깔끔하고 세련된 느낌으로 단장해서 사이트 들어왔을 때 기분이 좋답니다! 사이트 리뉴얼 겸 겨울옷을  사려고 한창 둘러보았어요. <br/>
-											따뜻한 느낌 풀풀 내는아이템들로 찜꽁 해놓았답니다! 이왕 이벤트도 당첨되어서 포인트도 얻고, 또 구매도 하고 싶네요ㅋㅋㅋ <br/>
-											리뉴얼 하신거  축하드려요!!!  당첨되길 바랍니다.^^ 
-										</p>
-									</div>
-								</li>
-								<li>
-									<div class="cmt_top">
-										<span class="writer">ety****</span>
-										<span class="date">2020.12.30</span>
-									</div>
-									<div class="cmt_cont">
-										<div class="img_wrap clear">
-											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>
-											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>
-											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>
-											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>
-										</div>
-										<p>모처럼 스타일24를 다시 애용해야 겠어요! 축하축하 ^^</p>
-										<button class="btn btn_default btn_del"><span>삭제</span></button>
-									</div>
-								</li>
-							</ul> -->
-							<!-- 데이터 있을 시 -->
-							<!-- 데이터 없을 시 -->
-							<div class="nodata" style="display:none;">
-								<div class="txt_box">
-									<p>
-										등록된 댓글이 없습니다.
-									</p>
-								</div>
-							</div>
-							<!-- //데이터 없을 시 -->
+
 						</div>
 						<div class="paging_wrap">
 							<ul class="pageNav" id="paging">
@@ -287,6 +245,30 @@
 	<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
 </form>
 
+<!-- 댓글 이미지 팝업 -->
+	<div class="modal fade thumb_img_pop" id="thumbImgPop" tabindex="-1" role="dialog" aria-labelledby="thumbImgLabel" aria-hidden="true">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+				<div class="modal-header sr-only">
+                    <h5 class="modal-title" id="thumbImgLabel">이미지 상세보기</h5>
+                </div>
+                <div class="modal-body">
+                    <div class="pop_cont">
+ 						<div class="swiper-container">
+							<div class="swiper-wrapper">
+								<!-- 이미지 슬라이드 영역 -->
+							</div>
+						</div>
+						<div class="swiper-button-next"></div>
+						<div class="swiper-button-prev"></div>						
+						<div class="swiper-pagination"></div>
+                    </div>
+                </div>
+            </div>
+        </div>        
+    </div>
+	<!-- //댓글 이미지 팝업 -->	    
+
 <script th:inline="javascript">
 
 let review = [[${reviewInfo}]];
@@ -315,13 +297,23 @@ if(review.length>0){
 	$.each(review, function(idx, item)  {
 		html += '		<div class="reviw_box">'
 		html += '			<div class="best_review">';
-		html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">';
+		if(item.reviewSysImg!= null){
+			html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">';
+		}else{
+			html += '				<a href="javascript:void();" id="btn_pdBestReview_pop">';
+		}
+		
 		html += '					<div class="pic">';
-		if (item.fileGb == 'M') { 
-			html += '								<span class="thumb mov" style="background-image: url('+ imgUrl +'/'+item.reviewSysImg +');"></span>';	
+		if(item.reviewSysImg!= null){
+			if (item.fileGb == 'M') { 
+				html += '								<span class="thumb mov" style="background-image: url('+ imgUrl+item.reviewSysImg +');"></span>';	
+			}else{
+				html += '								<span class="thumb" style="background-image: url('+ imgUrl +item.reviewSysImg +');"></span>';			
+			}
 		}else{
-			html += '								<span class="thumb" style="background-image: url('+ imgUrl +'/'+item.reviewSysImg +');"></span>';			
+			html += '								<span class="thumb" style="background-image: url('+ goodsView+'/'+item.sysImgNm +');"></span>';	
 		}
+		
 		html += '                   </div>';
 		html += '                  <div class="star_score">';
 		html += '                      <span class="star">';
@@ -645,22 +637,26 @@ if(coupon.length>0){
 	});
 	html += '		</ul>';
 	html += '	</div>';
-	html += '	<div class="announce_txt">';
-	html += '		<div class="note_txt">';
-	html += '			<img src="/images/pc/ico_content_find.png" alt="유의사항">';
-	html += '			<p>유의사항</p>';
-	html += '		</div>';
-	html += '		<div class="announce_list">';
-	html += coupon[0].note;
-/* 	html += '			<ul>';
-	html += '				<li>쿠폰 발급 기간 :'+ plan.dispStdt +'~'+ plan.dispEddt +'</li>';
-	html += '				<li>본 쿠폰은 해당 기획전 상품에만 적용 가능합니다.</li>';
-	html += '				<li>본 쿠폰은 해당 기획전 다운로드 버튼을 통해 발급받으실 수 있습니다.</li>';
-	html += '			</ul>'; */
-	html += '		</div>';
-	html += '	</div>';
-	html += '</div>';
 	html += '</div>';
+	html += '<div class="content dp_announce line">                                                 ';
+	html += '    <div class="cont_head">                                                       ';
+	html += '        <div>                                                                     ';
+	html += '            <h4>유의사항</h4>                                                         ';
+	html += '        </div>                                                                    ';
+	html += '    </div>                                                                        ';
+	html += '    <div class="cont_body">                                                       ';
+	html += '        <div class="announce_txt">                                                ';
+	html += '            <div class="note_txt">                                                ';
+	html += '                <img src="/images/pc/ico_content_find.png" alt="유의사항">            ';
+	html += '                <p>유의사항</p>                                                       ';
+	html += '            </div>                                                                ';
+	html += '            <div class="announce_list">                                           ';
+	html += coupon[0].note;
+	html += '            </div>                                                                '; 
+	html += '        </div>                                                                    '; 
+	html += '    </div>                                                                        '; 
+	html += '</div>                                                                            ';  
+	
 		
 	$("#G082_20").append(html);
 }
@@ -747,42 +743,103 @@ var fnTextConfirm = function() {
 	}
 }
 
+// 파일 업로드 확인
+var fnFileAdd = function() {
+	//로그인 확인
+	if (!cfCheckLogin()) {
+		mcxDialog.alert("로그인 후 참여 가능합니다.");
+		$("#replyText").val('');
+		return false;
+	}
+}
+
 var ajaxReplyList = function () {
 	 $.getJSON('/planning/reply/list?planSq='+plan.planSq, function(result, status) {
-		 console.log(result);
+		 $("#replyList").html('');
 		 if (status == 'success') {
-			 $("#replyList").html('');
 			 var html = '';
 			 html += '<div class="cmt_list_tit">';
 			 html += '	<strong>댓글</strong><span class="cnt">('+result.replyList.length.addComma()+')</span>';
 			 html += '</div>';
-			 html += '<ul class="cmt_list">';
-			 $.each(result.replyList, function (idx, item) {
-				 html += '	<li>';
-				 html += '		<div class="cmt_top">';
-				 html += '			<span class="writer">'+item.maskingCustId+'</span>';
-				 html += '			<span class="date">'+item.entryDt+'</span>';
-				 html += '		</div>';
-				 html += '		<div class="cmt_cont">';
-				 html += '			<div class="img_wrap clear">';
-				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>';
-				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>';
-				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>';
-				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>';
-				 html += '			</div>';
-				 html += '			<p>'+item.entryVal1+'</p>';
-				 if (item.entryCustNo == result.custNo) {
-					 html += '			<button class="btn btn_default btn_del"><span>삭제</span></button>';
-				}
-				 html += '		</div>';
-				 html += '	</li>';
-			 });
-			 html += '</ul>';
+			 if (result.replyList.length>0) {
+				 html += '<ul class="cmt_list">';
+				 $.each(result.replyList, function (idx, item) {
+					 html += '	<li>';
+					 html += '		<div class="cmt_top">';
+					 html += '			<span class="writer">'+item.maskingCustId+'</span>';
+					 html += '			<span class="date">'+item.entryDt+'</span>';
+					 html += '		</div>';
+					 html += '		<div class="cmt_cont">';
+					 html += '			<div class="img_wrap clear">';
+					 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>';
+					 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>';
+					 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>';
+					 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>';
+					 html += '			</div>';
+					 html += '			<p>'+item.entryVal1+'</p>';
+					 if (item.entryCustNo == result.custNo) {
+						 html += '			<button class="btn btn_default btn_del"><span>삭제</span></button>';
+					}
+					 html += '		</div>';
+					 html += '	</li>';
+				 });
+				 html += '</ul>';
+			}else{
+				html += '<div class="nodata" id="replyNoData"> ';
+				html += '	<div class="txt_box">             ';
+				html += '		<p>                           ';
+				html += '			등록된 댓글이 없습니다.             ';
+				html += '		</p>                          ';
+				html += '	</div>                            ';
+				html += '</div>                                ';
+			}
+			 
 		 }
 		 $("#replyList").append(html);
 	 });
 }
 
+$('#fileAdd').on('change', function() { fnChooseFile(this); });
+
+var fnChooseFile = function(obj) {
+	// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
+	var file = obj.files[0];
+
+	if (!gagajf.isNull(file.name)) {
+		var extension = "\.(jpg|jpeg|png)$";
+		if (!(new RegExp(extension, "i")).test(file.name)) {
+			mcxDialog.alertC('이미지는 [jpg, jpeg, png] 파일만 가능합니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(obj).parent('.imgUpload').finId('.removes').trigger('click');
+				}
+			});
+			return false;
+		}
+	}
+	
+	if (!gagajf.isNull(file.size) && Number(file.size) > 10 * 1000000) {
+		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				$(obj).parent('.imgUpload').find('.removes').trigger('click');
+			}
+		});
+		return false;
+	}
+	
+	// 파일 업로드
+	gagajf.ajaxFileUpload('/common/file/upload?subDir=/reply'
+			, file
+			, function(result) {
+				// 업로드한 파일명 설정
+				$('input[name=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
+				$('input[name=' + obj.name + 'SysFileNm]').val(result.newFileName);
+			}
+	);
+}
+
+
 $(document).ready( function() {
 	ajaxReplyList();
 	//공유 버튼 토글 
@@ -917,6 +974,44 @@ $(document).ready( function() {
 			$('#cmt_cnt').html("500");
 		}
 	});
+	
+	//팝업 - 댓글 이미지 슬라이드
+	$(document).on('click','.cmt_cont .img_wrap .pics',function(e){
+		$("#thumbImgPop .swiper-wrapper").empty();
+
+		var popSlideIndex = $(this).index();
+		contactPopSwiper.slideTo(popSlideIndex);
+		contactPopSwiper.update();
+
+		var contactImglength = $('.cmt_cont .img_wrap .pics').length;
+		var popImgHtml = "";
+		for (i = 1; i <= contactImglength; i++) {
+			var contactImg = $(this).find('img');
+			var contactImgSrc = $('.cmt_cont .img_wrap .pics:nth-child('+i+') img').attr('src');
+			popImgHtml += "<div class='swiper-slide'><div class='pop_img' style='background-image:url("+ contactImgSrc +")'></div></div>";
+		}
+
+		$("#thumbImgPop .swiper-wrapper").append(popImgHtml);
+		$('#thumbImgPop').modal("show");
+		
+		return false;
+	});        
+	
+	 /* SLIDE - 댓글 이미지 팝업 */
+	var contactPopSwiper = new Swiper('.thumb_img_pop .swiper-container', {
+		navigation: {
+			nextEl: '.thumb_img_pop .swiper-button-next',
+			prevEl: '.thumb_img_pop .swiper-button-prev',
+		},
+		pagination: {
+			el: '.thumb_img_pop .swiper-pagination',
+			clickable: true,
+		},
+		observer:true,
+		observeParents: true,
+	});				
+
+
 
 });
 </script>

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

@@ -130,7 +130,7 @@
 						$.each(result, function(idx, item) {
 						    tag += '  <div class="exhi_item">\n';
 						    tag += '       <div class="exhi_item_img">\n';
-						    tag += '           <a onclick="cfnGoToPlanDetail(\'' + item.planSq + '\')">\n'; 
+						    tag += '           <a href= "javascript:void(0);" onclick="cfnGoToPlanDetail(\'' + item.planSq + '\')">\n'; 
                             if (item.newYn == 'Y') {
 						    	tag += '				<div class="shape ranker"><span>NEW</span></div>\n';
 						    }

+ 5 - 11
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -40,9 +40,9 @@
                     <div class="list_content">
                         <div class="itemsGrp rowtype"> <!-- itemsGrp rank hot deal --> <!-- rowtype 추가시 가로형태로 출력 -->
                         <th:block th:each="SocialData, SocialStat : ${socialGoods}">
-                            <div class="item_prod" th:class="${SocialData.stockQtySum == 0 ? 'item_prod sold_out' : 'item_prod'}" > 
+                            <div class="item_prod" th:class="${SocialData.stockQtySum == 0 ? 'item_prod sold_out' : 'item_prod'}">
                                 <div class="item_state"> <!-- item_state AD soldout -->
-                                    <button type="button" th:class="${SocialData.wishYn == 'Y'}? 'itemLike active' : 'itemLike'" onclick="cfnPutWishList(this);" th:attr="goodsCd=${SocialData.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''">관심상품 추가</button>
+                                    <button type="button" th:class="${SocialData.likeIt == 'likeit'}? 'itemLike active' : 'itemLike'" onclick="cfnPutWishList(this);" th:attr="goodsCd=${SocialData.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''">관심상품 추가</button>
                                     <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${SocialData.goodsCd}]])">
                                         <div class="itemPic">
                                             <img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + SocialData.sysImgNm}">
@@ -52,18 +52,12 @@
                                         <div class="itemName" th:text="${SocialData.goodsNm}"></div>
                                         <!-- <div class="itemComment">#주문 폭주 상품</div> -->
                                         <p class="itemPrice">
-                                             [[${#numbers.formatInteger(SocialData.currAprice,0,'COMMA')} + 원]]
+                                             [[${#numbers.formatInteger(SocialData.currPrice,0,'COMMA')} + 원]]
                                             <span class="itemPrice_original" th:text="${#numbers.formatInteger(SocialData.listPrice,0,'COMMA')} + '원'"></span>
-											<span class=" itemPercent" th:text="${#numbers.formatDecimal(SocialData.dcArate,1,0)} + '%'"></span>
+											<span class=" itemPercent" th:text="${#numbers.formatDecimal(SocialData.dcRate,1,0)} + '%'"></span>
                                         </p>
-                                       <!--  <div class="itemcolorchip">
-                                            <span class="chip_color35" value="ABM">BEIGE</span>
-                                            <span class="chip_color54" value="BDS">BLACK</span>
-                                            <span class="chip_color40" value="YBR">WHITE</span>
-                                        </div>
-                                         -->
                                         <div class="shopBagBtn">
-                                            <button class="btn btn_defalt" onclick="cfnAddCart()">
+                                            <button class="btn btn_defalt" onclick="AddCart(this)">
                                                 <span>쇼핑백 담기</span>
                                             </button>
                                         </div>

+ 11 - 5
src/main/webapp/biz/goodsSession.js

@@ -23,11 +23,15 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		tag += '			<div class="itemPic">';
 		tag += '				<img alt="BLUE-a" class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'">';
 		tag += '			</div>';
-		tag += '			<p class="itemBrand">BRAND NAME</p>';
+		tag += '			<p class="itemBrand">'+item.brandGroupNm+'</p>';
 		tag += '			<div class="itemName">'+item.goodsFullNm+'</div>';
-		tag += '			<p class="itemPrice">80,100';
-		tag += '				<span class="itemPrice_original">89,000</span>';
-		tag += '				<span class=" itemPercent">10%</span>';
+		tag += '			<p class="itemPrice">'+item.currPrice.addComma();
+		tag += '				<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
+		if(item.currPrice != item.listPrice){
+			if(item.listPrice != 0){
+		tag += '				<span class="itemPercent">'+ Math.round((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100) +'%</span>';
+			}
+		}
 		tag += '			</p>';
 		tag += '			<div class="itemcolorchip">';
 		tag += '				<span class="chip_color35" value="ABM">BEIGE</span>';
@@ -37,7 +41,9 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		tag += '			<p class="itemBadge">';
 		tag += '				<span class="badge13">베스트 </span>';
 		tag += '			</p>';
-		tag += '			<div class="itemComment">#주문 폭주 상품</div>';
+		if(item.goodsTnm != null){
+			tag += '			<div class="itemComment">'+item.goodsTnm+'</div>';
+		}
 		tag += '		</a>';
 		tag += '	</div>';
 		tag += '</div>';

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

@@ -1252,7 +1252,7 @@ input[type="file"] {
 .quick_menu_group .area > div:first-child span:first-child a{margin-left:0}
 .quick_menu_group .area > div:first-child span:first-child a:after{display:none}
 .quick_menu_group .area > div:first-child span a:after{position:absolute;top:13px;left:0;width:1px;height:13px;background:#959596;content:''}
-.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}
+.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}*/