Bläddra i källkod

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

jsh77b 5 år sedan
förälder
incheckning
948754a8c3
28 ändrade filer med 1533 tillägg och 288 borttagningar
  1. 31 0
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  2. 31 1
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  3. 14 0
      src/main/java/com/style24/front/biz/dao/TsfSocialDao.java
  4. 63 41
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  5. 36 0
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  6. 2 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  7. 36 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  8. 3 0
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  9. 6 2
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  10. 1 0
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  11. 61 1
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  12. 26 0
      src/main/java/com/style24/persistence/domain/ReinboundInform.java
  13. 72 0
      src/main/java/com/style24/persistence/domain/Social.java
  14. 65 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  15. 108 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  16. 309 0
      src/main/webapp/WEB-INF/views/mob/SigninFormMob.html
  17. 38 0
      src/main/webapp/WEB-INF/views/mob/common/layout/DefaultLayoutMob.html
  18. 37 0
      src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html
  19. 3 3
      src/main/webapp/WEB-INF/views/web/SigninFormWeb.html
  20. 31 4
      src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html
  21. 25 39
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  22. 68 94
      src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html
  23. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  24. 18 12
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  25. 357 0
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  26. 77 81
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  28. 12 3
      src/main/webapp/ux/style24_link.js

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

@@ -15,6 +15,7 @@ import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsViewHst;
 import com.style24.persistence.domain.Notice;
+import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.VideoDisploc;
 
 /**
@@ -222,5 +223,35 @@ public interface TsfGoodsDao {
 	 * @date 2021. 3. 8
 	 */
 	Collection<Goods> getTmtbGoodsList(Goods goods);
+	
+	/**
+	 * 재입고 알림 미 알림 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 10
+	 */
+	ReinboundInform getNotReinboundInform(ReinboundInform reinboundInform);
+	
+	/**
+	 * 재입고알림 생성
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 10
+	 */
+	void createReinboundInform(ReinboundInform reinboundInform);
+	
+	/**
+	 * 재입고알림 수정
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 10
+	 */
+	void updateReinboundInform(ReinboundInform reinboundInform);
 
 }

+ 31 - 1
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -46,7 +46,7 @@ public interface TsfPlanningDao {
 	Collection<Plan> getPlanList(Plan plan);
 	
 	/**
-	 * 기획전 목록
+	 * 기획전 상품 목록
 	 *
 	 * @param
 	 * @return
@@ -54,6 +54,26 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 8
 	 */
 	Collection<Plan> getPlanGoodsList(Plan plan);
+	
+	/**
+	 * 기획전 상세정보
+	 *
+	 * @param 기획전 번호
+	 * @return
+	 * @author sowon
+	 * @date 2020. 7. 27
+	 */
+	Plan getPlanDetailInfo(Plan plan);
+	
+	/**
+	 * 기획전 고객등급 확인 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @date 2021. 3. 8
+	 */
+	Collection<Plan> planCustGrade(Plan plan);
 
 	/**
 	 * 이벤트 갯수 조회
@@ -64,5 +84,15 @@ public interface TsfPlanningDao {
 	 * @since 2021.03.08
 	 */
 	int getEventAllCount(Plan plan);
+	
+	/**
+	 * 이벤트 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @date 2021. 3. 8
+	 */
+	Collection<Plan> getPlanEventList(Plan plan);
 
 }

+ 14 - 0
src/main/java/com/style24/front/biz/dao/TsfSocialDao.java

@@ -0,0 +1,14 @@
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 소셜관리(핫딜) Dao
+ * 
+ * @author sowon
+ * @since 2021. 3. 9
+ */
+@ShopDs
+public interface TsfSocialDao {
+
+}

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

@@ -58,7 +58,7 @@ public class TsfCartService {
 	 * @param params
 	 */
 	public void saveCartInfo(Collection<Cart> params) {
-		Cart cart = new Cart();
+		String goodsType = "";
 
 		// 로그인 유무 확인 (로그인이 되어 있지 않으면 regNo 를 0으로 장바구니에 저장한다.)
 		Login login = new Login();
@@ -70,10 +70,6 @@ public class TsfCartService {
 
 		// 장바구니 상품 및 재고 가능 여부 체크
 		for (Cart param : params) {
-			cart.setJsessionId(TscSession.getSessionId());
-			cart.setRegNo(login.getCustNo());
-			cart.setUpdNo(login.getCustNo());
-			cart.setCustNo(login.getCustNo());
 
 			// 상품 마스터 정보 확인
 			Goods goods = new Goods();
@@ -102,24 +98,22 @@ public class TsfCartService {
 				throw new IllegalArgumentException(stockResult);
 			}
 
-			cart.setGoodsCd(param.getGoodsCd());
-
 			// 장바구니에 있는 같은 상품(옵션이 상이해도 같은 상품이므로 상품 전체 조회)
 			int goodsCartCnt = cartDao.getHasGoodsCartCnt(param);
 			if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
 				throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
 			}
 
-			cart = param;
+			goodsType = param.getGoodsType();
 		}
 
 		// 장바구니 정보 수정
-		if (cart.getGoodsType().equals(TscConstants.GoodsType.SET.value())) {
+		if (goodsType.equals(TscConstants.GoodsType.SET.value())) {
 			// 세트상품일 경우
 			saveSetTypeCartInfo(params);
 		} else {
 			// 세트 상품이 아닐 경우
-			saveNormalDealCartInfo(params.iterator().next());
+			saveNormalDealCartInfo(params);
 		}
 	}
 
@@ -169,8 +163,12 @@ public class TsfCartService {
 		cart.setGoodsType(params.iterator().next().getGoodsType());
 		cart.setItemCdSql(sb.toString());
 
+		Collection<Cart> cartSqList = null;
+
 		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "C".equals(params.iterator().next().getCartGb())) {
 			cart.setCartGb(TscConstants.CartGb.CART.value());
+			cartSqList = cartDao.selectHasSetItemCartList(cart);
+			// 같은 장바구니 상품 확인
 		} else if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "O".equals(params.iterator().next().getCartGb())) {
 			if ("P".equals(TsfSession.getFrontGb())) {
 				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
@@ -181,9 +179,6 @@ public class TsfCartService {
 			cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
 		}
 
-		// 같은 장바구니 상품 확인
-		Collection<Cart> cartSqList = cartDao.selectHasSetItemCartList(cart);
-
 		if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
 			if (cartSqList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
 				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
@@ -195,6 +190,9 @@ public class TsfCartService {
 		} else {
 			cartDao.insertCartInfo(cart);					// 장바구니 마스터 정보 저장
 			cartDao.insertCartHst(cart);                    // 장바구니 이력 정보 저장
+
+			TsfSession.setAttribute("cartSqArr", cart.getCartSq()+"");
+
 			for (Cart param : params) {
 				param.setCartSq(cart.getCartSq());
 				param.setRegNo(cart.getRegNo());
@@ -210,50 +208,74 @@ public class TsfCartService {
 	}
 
 	@Transactional("shopTxnManager")
-	public void saveNormalDealCartInfo(Cart param) {
+	public void saveNormalDealCartInfo(Collection<Cart> params) {
+		Cart cart = new Cart();
 		// 로그인 정보
 		if(TsfSession.isLogin()) {
 			Login login = TsfSession.getInfo();
-			param.setRegNo(login.getCustNo());
-			param.setCustNo(login.getCustNo());
-			param.setUpdNo(login.getCustNo());
+			cart.setCustNo(login.getCustNo());
 		} else {
-			param.setCustNo(0);
-			param.setRegNo(0);
-			param.setUpdNo(0);
+			cart.setCustNo(0);
 		}
-		param.setJsessionId(TscSession.getSessionId());
-
+		cart.setJsessionId(TscSession.getSessionId());
 
-		if ("C".equals(param.getCartGb())) {
-			param.setCartGb(TscConstants.CartGb.CART.value());
-		} else if ("O".equals(param.getCartGb())) {
+		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "C".equals(params.iterator().next().getCartGb())) {
+			cart.setCartGb(TscConstants.CartGb.CART.value());
+		} else if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "O".equals(params.iterator().next().getCartGb())) {
 			if ("P".equals(TsfSession.getFrontGb())) {
-				param.setCartGb(TscConstants.CartGb.PC_ORDER.value());
+				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
 			} else {
-				param.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
+				cart.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
 			}
 		} else {
-			param.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
+			cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
 		}
 
-		// 같은 장바구니 상품 확인
-		Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
+		// 세션 추가용 변수
+		List<String> sendCartSqList = new ArrayList<String>();
+		for(Cart item : params) {
+			item.setCartGb(cart.getCartGb());
+			item.setCustNo(cart.getCustNo());
+			item.setRegNo(cart.getCustNo());
+			item.setUpdNo(cart.getCustNo());
+			item.setJsessionId(cart.getJsessionId());
 
-		if (cartSqList != null && cartSqList.size() > 0) {			// 장바구니 기존재
-			if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
-				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+			// 같은 장바구니 상품 확인
+			Collection<Integer> cartSqList = null;
+			if(TscConstants.CartGb.CART.value().equals(cart.getCartGb())) {
+				cartSqList = cartDao.selectHasNormalDealItemCartList(item);
+			}
+
+			if (cartSqList != null && cartSqList.size() > 0) {			// 장바구니 기존재
+				if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
+					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+				} else {
+					item.setCartSq(cartSqList.iterator().next());
+					cartDao.updateCartInfo(item);
+					cartDao.insertCartHst(item);                // 장바구니 수정 이력 저장
+				}
 			} else {
-				param.setCartSq(cartSqList.iterator().next());
-				cartDao.updateCartInfo(param);
-				cartDao.insertCartHst(param);                // 장바구니 수정 이력 저장
+				cartDao.insertCartInfo(item);					// 장바구니 마스터 정보 저장
+				cartDao.insertCartHst(item);					// 장바구니 수정 이력 저장
+				cartDao.insertCartDetailInfo(item);				// 장바구니 상세 저장
+				cartDao.insertCartDetailHst(item);				// 장바구니 수정 이력 저장
+
+				sendCartSqList.add(item.getCartSq() + "");
 			}
-		} else {
-			cartDao.insertCartInfo(param);					// 장바구니 마스터 정보 저장
-			cartDao.insertCartHst(param);                   // 장바구니 수정 이력 저장
-			cartDao.insertCartDetailInfo(param);			// 장바구니 상세 저장
-			cartDao.insertCartDetailHst(param);             // 장바구니 수정 이력 저장
 		}
+
+		StringBuilder cartSqComma = new StringBuilder();
+
+		int i = 0;
+		for(String cartSq : sendCartSqList) {
+			if(i > 0) {
+				cartSqComma.append(",");
+			}
+			cartSqComma.append(cartSq);
+			i++;
+		}
+
+		TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
 	}
 
 	// 장바구니 상품 리스트 조회 서비스

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

@@ -22,6 +22,7 @@ import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsViewHst;
 import com.style24.persistence.domain.Notice;
+import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.VideoDisploc;
 
 import lombok.extern.slf4j.Slf4j;
@@ -431,4 +432,39 @@ public class TsfGoodsService {
 		return goodsDao.getTmtbGoodsList(goods);
 	}
 	
+	/**
+	 * 재입고 알림 미 알림 조회
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 10
+	 */
+	public ReinboundInform getNotReinboundInform(ReinboundInform reinboundInform) {
+		return goodsDao.getNotReinboundInform(reinboundInform);
+	}
+	
+	/**
+	 * 재입고알림 생성
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 10
+	 */
+	@Transactional("shopTxnManager")
+	public void createReinboundInform(ReinboundInform reinboundInform) {
+		goodsDao.createReinboundInform(reinboundInform);
+	}
+	
+	/**
+	 * 재입고알림 수정
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 10
+	 */
+	@Transactional("shopTxnManager")
+	public void updateReinboundInform(ReinboundInform reinboundInform) {
+		goodsDao.updateReinboundInform(reinboundInform);
+	}
+	
 }

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

@@ -249,7 +249,7 @@ public class TsfOrderService {
 			} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 				result = coreKakaoPayService.approveKakaoPayment(param);
 			} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
-				result = null;
+				result = coreNaverPayService.approveNaverPayment(param);
 			} else {
 				throw new IllegalArgumentException("결제 수단이 잘못 입력되었습니다. 새로고침 후 다시 시도해주세요.");
 			}
@@ -265,7 +265,7 @@ public class TsfOrderService {
 				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 					coreKakaoPayService.cancelKakaoPayment(param);
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
-					result = null;
+					coreNaverPayService.cancelNaverPayment(param);
 				} else {
 					throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
 				}

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

@@ -73,6 +73,30 @@ public class TsfPlanningService {
 		//plan.setSiteCd(TsfConstants.SITE_CD);
 		return planningDao.getPlanGoodsList(plan);
 	}
+	
+	/**
+	 * 기획전 고객등급 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 9
+	 */
+	public Collection<Plan>planCustGrade(Plan plan) {
+		return planningDao.planCustGrade(plan);
+	}
+	
+	/**
+	 * 기획전 상세 정보
+	 *
+	 * @param
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 3. 8
+	 */
+	public Plan getPlanDetailInfo(Plan plan) {
+		return planningDao.getPlanDetailInfo(plan);
+	}
 
 	/**
 	 * 이벤트 갯수 조회
@@ -84,5 +108,17 @@ public class TsfPlanningService {
 	public int getEvnetAllCount(Plan plan) {
 		return planningDao.getEventAllCount(plan);
 	}
+	
+	/**
+	 * 이벤트 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 9
+	 */
+	public Collection<Plan> getPlanEventList(Plan plan) {
+		return planningDao.getPlanEventList(plan);
+	}
 
 }

+ 3 - 0
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -78,6 +78,7 @@ public class TsfCartController extends TsfBaseController {
 	 * 장바구니 등록
 	 * @param param
 	 * goodsCd : 상품코드 (세트 : 세트상품코드, 딜상품 : 원상품코드, 일반상품 : 상품코드)
+	 * dealGoodsCd : 딜상품코드
 	 * itemCd : 구성상품코드 (세트. 세트 아닐 경우 입력X)
 	 * optCd : 옵션코드
 	 * goodsType : 상품타입 (공통코드 G026)
@@ -132,6 +133,8 @@ public class TsfCartController extends TsfBaseController {
 		model.addAttribute("delvCartList", order.getDelvCartList());
 		model.addAttribute("IMG_PATH", env.getProperty("upload.goods.view"));
 
+		log.info("CHECK SESSION CARTSQARR INFO ::: {}", TsfSession.getAttribute("cartSqArr"));
+
 		return super.getDeviceViewName("cart/cartListAjaxForm");
 	}
 

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

@@ -485,17 +485,21 @@ public class TsfGoodsController extends TsfBaseController {
 	 * @author eskim
 	 * @since 2021. 3. 8
 	 */
-	@PostMapping("/instock/alarm/layer/{goodsCd}")
-	public ModelAndView goodsInstockAlarmForm(@PathVariable String goodsCd) {
+	@PostMapping("/instock/alarm/layer/{goodsCd}/{colorCd}")
+	public ModelAndView goodsInstockAlarmForm(@PathVariable String goodsCd, @PathVariable String colorCd) {
 		ModelAndView mav = new ModelAndView();
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		Goods paramsGoods = new Goods();
 		paramsGoods.setGoodsCd(goodsCd);
+		paramsGoods.setColorCd(colorCd);
 		setGoods(paramsGoods);
 		Goods goods = goodsService.getGoodsInfo(paramsGoods);
 		
 		// 상품 기본정보
 		mav.addObject("goodsInfo", goods);
+		
+		// 자사 일반상품- 옵션2(사이즈) 정보
+		mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
 
 		mav.setViewName(super.getDeviceViewName("goods/GoodsInstockAlarmForm"));
 		return mav;

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

@@ -825,6 +825,7 @@ public class TsfOrderController extends TsfBaseController {
 		//model.addAttribute("payment", payment);
 
 		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+
 		return mav;
 		//return super.getDeviceViewName("pg/kcpOrder");
 	}

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

@@ -1,5 +1,8 @@
 package com.style24.front.biz.web;
 
+import java.util.Collection;
+import java.util.Iterator;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -7,6 +10,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.core.support.env.TscConstants;
@@ -73,6 +77,60 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 기획전 상세화면
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 9
+	 */
+	@GetMapping("/detail/form")
+	@ResponseBody
+	public ModelAndView PlanningDetailForm(Plan plan) throws Exception {
+		ModelAndView mav = new ModelAndView();
+		// 상세정보
+		//plan.setSiteCd(TsfConstants.SITE_CD);
+		
+		// 디바이스 set
+		plan.setFrontGb(TsfSession.getFrontGb());
+
+		Plan planInfo = planningService.getPlanDetailInfo(plan);
+		mav.addObject("planInfo", planInfo);
+
+		if (planInfo == null || planInfo.getPlanSq() == null) {
+			mav.setViewName("redirect:/planning/main/form");
+			return mav;
+		}
+		
+		// 다른기획전 보기 
+		mav.addObject("planList", planningService.getPlanList(plan));
+//
+//		mav.addObject("couponList", planningService.getPlusCouponList(plan));
+//
+//		// 소스
+//		mav.addObject("fsrcInfo", planningService.getPlanFsrcInfo(plan));
+//
+//		// 기획전 상세 및 코너 목록
+//		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
+//
+//		// 특가세일 기준
+//		mav.addObject("specialPriceSaleRate", policyService.getSpecialPriceSaleDisplayRate(TsfConstants.SITE_CD));
+//
+//		if ("E".equals(planInfo.getPlanGb())) { // 기획전 일 떄
+//			if (planInfo.getPrivacyPolicy() != null && !planInfo.getPrivacyPolicy().equals("")) {
+//				mav.addObject("planQuestionList", planningService.getPlanQuestionList(plan));
+//			}
+//		}
+
+		// Popup Parameter
+//		mav.addObject("preview", plan.getPreview());
+//		mav.addObject("viewDt", plan.getViewDt());
+//		mav.addObject("viewPage", "40");
+//		mav.addObject("popupPlanSq", plan.getPlanSq());
+
+		mav.setViewName(super.getDeviceViewName("planning/PlanningDetailForm"));
+		return mav;
+	}
 	/**
 	 * 이벤트 메인 화면
 	 * 
@@ -89,7 +147,9 @@ public class TsfPlanningController extends TsfBaseController {
 		
 		// 이벤트 갯수
 		mav.addObject("cnt",planningService.getEvnetAllCount(plan));
-				
+		
+		// 이벤트 목록
+		mav.addObject("evnetList",planningService.getPlanEventList(plan));		
 		
 		mav.setViewName(super.getDeviceViewName("planning/PlanningEventMainForm"));
 		return mav;

+ 26 - 0
src/main/java/com/style24/persistence/domain/ReinboundInform.java

@@ -0,0 +1,26 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 재입고알림 Domain
+ *
+ * @author eskim
+ * @since 2021. 03. 10
+ */
+@SuppressWarnings("serial")
+@Data
+public class ReinboundInform extends TscBaseDomain {
+
+	private Integer rinbdInfoSq;
+	private Integer custNo;
+	private String goodsCd;
+	private String optCd;
+	private String optCd1;
+	private String optCd2;
+	private String reqDt;
+	private String informDt;
+	
+}

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

@@ -0,0 +1,72 @@
+package com.style24.persistence.domain;
+
+
+import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
+
+import lombok.Data;
+
+/**
+ * 소셜관리 Domain
+ *
+ * @author sowon
+ * @since 2021. 03. 03
+ */
+
+@SuppressWarnings("serial")
+@Data
+public class Social extends TscBaseDomain{
+		// SOCIAL
+		private Integer socialSq;			// 소셜일련번호
+		private String socialNm;		// 소셜명
+		private String socialType;		// 소셜유형
+		private String siteCd;			// 사이트코드
+		private String frontGb;			// 프론튿구분
+		private String socialStdt;		// 소셜시작시간
+		private String socialEddt;		// 소셜종료시간
+		private String socialTnm;		// 소셜타이틀명
+		private String useYn;			// 사용여부
+		private String applyGb;			// 적용구분
+		
+		private String regNm;
+		// PLAN
+		private Integer planSq;			// 기획전 일련번호
+		
+		
+
+		// SOCIAL GOODS
+		private Integer scgoodsSq;		// 소셜상품일련번호(SEQ_SCGOODS sequence)
+		private String goodsCd;			// 상품코드(상품)
+		private int currBprice;		// 변경전현재판매가
+		private int currAprice;		// 변경후현재판매가
+		private float dcBrate;			// 변경전할인율
+		private float dcArate;			// 변경후할인율
+		private float pntBprate;		// 변경전포인트적립율(PC)
+		private float pntAprate;		// 변경후포인트적립율(PC)
+		private float pntBmrate;		// 변경전포인트적립율(모바일)
+		private float pntAmrate;		// 변경후포인트적립율(모바일)
+		private String erpPriceLinkYn;	// erp가격연계여부(자사품만 사용, y연계)
+		private String dispOrd;			// 표시순서
+		private String delYn;			// 삭제여부(Y:삭제)
+
+		// GOODS
+		private int currPrice;		// 현재 판매가
+		private float dcRate;			// 할인율
+		private float pntPrate;		// PC 포인트 적립율
+		private float pntMrate;		// MOBILE 포인트 적립율
+
+		
+
+		private String excelFileNm;		// 엑셀파일명
+		// 검색
+		private String stDate;	// 시작일시
+		private String edDate;	// 종료일시
+		
+		
+		// Pagination
+		private TscPageRequest pageable;
+		private int pageNo = 1;
+		private int pageSize = 50;
+		private int pageUnit = 10;
+		
+}

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

@@ -105,7 +105,6 @@
 		     , G.GOODS_STAT
 		     , (CASE WHEN #{frontGb} = 'P' THEN G.PNT_PRATE ELSE G.PNT_MRATE END) AS PNT_RATE
 		     , (CASE WHEN #{frontGb} = 'P' THEN G.PRE_PPNT_USABLE_YN ELSE G.PRE_MPNT_USABLE_YN END) AS PRE_PNT_USABLE_YN
-		    -- 
 		     , G.MIN_ORD_QTY
 		     , G.MAX_ORD_QTY
 		     , G.DAY_MAX_ORD_QTY
@@ -120,6 +119,7 @@
 		        FROM TB_ITEMKIND
 		        WHERE ITEMKIND_CD = G.ITEMKIND_CD) AS NI_CLSF_CD
 		     , G.MAIN_COLOR_CD
+		     , (IFNULL(NULLIF(#{colorCd},'') , G.MAIN_COLOR_CD )) AS COLOR_CD
 		     , G.SUPPLY_COMP_CD
 		     , G.SELF_MALL_YN
 		     , G.AGE_GRP_CD
@@ -132,7 +132,7 @@
 		     , G.ORIGIN_CD
 		     , FN_GET_CODE_NM('G076',G.ORIGIN_CD) AS ORIGIN_NM
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(#{colorCd}, IFNULL(G.MAIN_COLOR_CD,'XX')) AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-		     , (SELECT COLOR_KNM FROM tb_color C WHERE COLOR_CD = IFNULL(NULLIF(#{colorCd},'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y') AS COLOR_NM
+		     , (SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(#{colorCd},'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y') AS COLOR_NM
 		     -- , BP.CURR_PRICE AS BENEFIT_PRICE
 		     , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		     , (CASE WHEN G.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
@@ -722,4 +722,67 @@
 		LIMIT #{maxRownum}
 	</select>
 	
+	<!-- 재입고 알림 미 알림 조회 -->
+	<select id="getNotReinboundInform" parameterType="ReinboundInform" resultType="ReinboundInform">
+		/* TsfGoods.getNotReinboundInform */
+		SELECT RINBD_INFO_SQ
+		    , CUST_NO
+		    , GOODS_CD
+		    , OPT_CD
+		    , OPT_CD1
+		    , OPT_CD2
+		    , REQ_DT
+		    , INFORM_DT
+		FROM TB_REINBOUND_INFORM
+		WHERE CUST_NO = #{custNo}
+		AND GOODS_CD = #{GOODS_CD}
+		AND OPT_CD = #{optCd}
+		AND INFORM_DT IS NOT NULL  -- 미알림
+		AND DATE_FORMAT(NOW(), '%Y%m%d' ) > DATE_FORMAT(DATE_ADD(A.REQ_DT, INTERVAL 15 DAY),'%Y%m%d')   -- 요청일기준15일경과
+		ORDER BY  RINBD_INFO_SQ DESC 
+		LIMIT 1
+	</select>
+	
+	<!-- 재입고알림 생성 -->
+	<insert id="createReinboundInform" parameterType="ReinboundInform">
+		/* TsfGoods.createReinboundInform */
+		INSERT INTO TB_REINBOUND_INFORM
+		    (
+		    RINBD_INFO_SQ
+		  , CUST_NO
+		  , GOODS_CD
+		  , OPT_CD
+		  , OPT_CD1
+		  , OPT_CD2
+		  , REQ_DT
+		  , REG_NO
+		  , REG_DT
+		  , UPD_NO
+		  , UPD_DT
+		    )
+		VALUS(
+		    NULL
+		  , #{custNo}
+		  , #{goodsCd}
+		  , #{optCd}
+		  , #{optCd1}
+		  , #{optCd2}
+		  , NOW()
+		  , #{regNo}
+		  , NOW()
+		  , #{updNo}
+		  , NOW()
+		    )
+	</insert>
+	
+	<!-- 재입고알림 수정 -->
+	<update id="updateReinboundInform" parameterType="ReinboundInform">
+		/* TsfGoods.updateReinboundInform */
+		UPDATE TB_REINBOUND_INFORM
+		SET REQ_DT = NOW()
+		  , UPD_NO = #{updNo}
+		  , UPD_DT = NOW()
+		WHERE RINBD_INFO_SQ = #{rinbdInfoSq}
+	</update>
+	
 </mapper>

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

@@ -102,6 +102,9 @@
 		  AND P1.DEL_YN = 'N'
 		  AND P1.PLAN_GB = 'P'
 		  AND NOW() BETWEEN P1.DISP_STDT AND P1.DISP_EDDT
+	   	<if test="planSq != null and planSq != ''">
+			AND P1.PLAN_SQ != #{planSq}
+		</if>
 		 <!--  AND P1.FRONT_GB IN (#{frontGb}, 'A') -->
 		  AND P1.PLAN_SQ IN (
 				   						SELECT PLAN_SQ 
@@ -174,6 +177,64 @@
 			WHERE F.RNUM IN (1,2)
 	</select>
 	
+	<!-- 기획전 상세정보 -->
+	<select id="getPlanDetailInfo" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getPlanDetailInfo*/
+		SELECT A.PLAN_SQ
+		     , A.PLAN_NM
+		     , A.PLAN_GB
+		     , A.SITE_CD
+		     , A.FRONT_GB
+		     , A.DISP_STDT
+		     , A.DISP_EDDT
+		     , A.MAIN_PIMG
+		     , A.MAIN_MIMG
+		     , A.DTL_PIMG
+		     , A.DTL_MIMG
+		     , A.DTL_TITLE1
+		     , A.DTL_TITLE2
+		     , A.REPLY_YN
+		     , A.REPLY_LOC
+		     , A.REPLY_IMG
+		     , A.REPLY_TITLE1
+		     , A.REPLY_TITLE2
+		     , A.CORNER_NM_DISP_YN
+		     , A.GOODS_LIMIT_YN
+		     , A.GOODS_LIMIT_QTY
+		     , A.DEL_YN
+		     , A.OPEN_YN
+		     , A.DISP_ORD
+		     , A.READ_CNT
+		     , A.DEV_URL
+		     , A.BADGE_NM
+		     , A.BADGE_FCOLOR
+		     , A.BADGE_BCOLOR
+		     , A.POLL_SQ
+		     , A.REG_NO
+		     , A.REG_DT
+		     , A.UPD_NO
+		     , A.UPD_DT
+		FROM   TB_PLAN A
+		WHERE  A.PLAN_SQ = #{planSq}
+		<!-- AND    A.SITE_CD = #{siteCd} -->
+		<if test='adminPreview != "Y"'> -- 어드민 미리보기
+		AND    NOW() BETWEEN A.DISP_STDT AND A.DISP_EDDT
+		</if>
+		<if test="frontGb != null and frontGb != ''">
+		AND    (A.FRONT_GB = 'A' OR A.FRONT_GB = #{frontGb})
+		</if>
+	</select>
+	
+	<select id="planCustGrade" resultType="int" parameterType="Plan">
+		/* TsfPlanning.planCustGrade */
+		SELECT G.CUST_GRADE 
+			  ,G.PLAN_SQ 
+			  ,G.REG_DT 
+			  ,G.REG_NO 
+		FROM TB_PLAN_CUST_GRADE G 
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
 	<select id="getEventAllCount" resultType="int" parameterType="Plan">
 		/* TsfPlanning.getEventAllCount */
 		SELECT COUNT(*) AS CNT
@@ -185,6 +246,53 @@
 		    <!-- AND P.FRONT_GB IN (#{frontGb}, 'A') -->
 	</select>
 	
+	<select id="getPlanEventList" parameterType="Plan" resultType="Plan">
+		SELECT P1.*
+		FROM 
+		(
+			 SELECT
+			       P.PLAN_SQ
+			      ,P.PLAN_NM
+			      ,P.PLAN_GB
+			      ,P.SITE_CD
+			      ,P.FRONT_GB
+			      ,SUBSTRING_INDEX(P.DISP_STDT , ' ', +1) AS DISP_STDT
+			      ,SUBSTRING_INDEX(P.DISP_EDDT , ' ', +1) AS DISP_EDDT
+			      ,CASE WHEN DATE(P.REG_DT) BETWEEN DATE_ADD(NOW(),INTERVAL -3 DAY ) AND NOW() THEN 'NEW' END AS 'NEW_PLAN'   /*등록일 기준 3일 */
+			      ,P.MAIN_PIMG
+			      ,P.MAIN_MIMG
+			      ,P.DTL_PIMG
+			      ,P.DTL_MIMG
+			      ,P.DTL_TITLE1
+			      ,P.DTL_TITLE2
+			      ,P.REPLY_YN
+			      ,P.REPLY_LOC
+			      ,P.REPLY_IMG
+			      ,P.REPLY_TITLE1
+			      ,P.REPLY_TITLE2
+			      ,P.CORNER_NM_DISP_YN
+			      ,P.GOODS_LIMIT_YN
+			      ,P.GOODS_LIMIT_QTY
+			      ,P.DEL_YN, OPEN_YN
+			      ,P.DISP_ORD
+			      ,P.READ_CNT
+			      ,P.DEV_URL
+			      ,P.BADGE_NM
+			      ,P.BADGE_FCOLOR
+			      ,P.BADGE_BCOLOR
+			      ,P.POLL_SQ
+			      ,P.REG_NO
+			      ,P.REG_DT
+			      ,P.UPD_NO
+			      ,P.UPD_DT
+			 FROM TB_PLAN P 
+			 WHERE 1=1 
+			 	AND P.PLAN_GB = 'E' /*이벤트 경우*/
+			 	AND NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT /*진행기간*/
+			 	AND P.DEL_YN = 'N'
+		)P1
+		ORDER BY P1.NEW_PLAN DESC , ABS(DATEDIFF(P1.DISP_EDDT,NOW()))  
+	</select>
 	
 
 </mapper>

+ 309 - 0
src/main/webapp/WEB-INF/views/mob/SigninFormMob.html

@@ -0,0 +1,309 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : SigninFormMob.html
+ * @desc    : 로그인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.10   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main class="container mb">
+		<div class="close">
+			<a href="javascript:void(0)" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+		</div>
+
+		<!-- ★ 컨텐츠 시작 -->
+		<section class="content mb_login">
+
+			<div class="inner">
+				<h2 class="title">로그인</h2>
+			</div>
+			<div class="inner">
+				<form class="form_wrap form_full" name="loginForm" id="loginForm" th:action="@{/login}" method="post">
+					<div class="form_head"><h3 class="title sr-only">로그인</h3></div>
+					<div class="form_field mt0">
+						<input type="text" name="loginId" placeholder="아이디" class="form_control"minlength="4" maxlength="12" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디"/>
+					</div>
+					<div class="form_field">
+						<input type="password" name="passwd" placeholder="비밀번호 8자~20자 입력" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/>
+					</div>
+					<div class="login_check mt10">
+						<div class="left">
+							<div class="form_field">
+								<input id="chkSaveId" type="checkbox"><label for="chkSaveId"><span>아이디 저장</span></label>
+							</div>
+						</div>
+						<div class="right">
+							<ul>
+								<li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a></li>
+								<li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a></li>
+							</ul>
+						</div>
+					</div>
+					<div class="help_block">
+						<!-- 보안문자 입력시 -->
+						<div>
+							<div class="captcha" style="display: none;"> <!-- 캡차영역 -->
+								<ul>
+									<li class="lap"> <!-- 캡차이미지 -->
+										<div class="captcha_box"> <!-- 캡차이미지 -->
+											<img src="" id="imgCaptcha"/>
+										</div>
+										<div class="captcha_btn_dual">
+											<button type="button" id="play_audio" onclick="fnReloadCaptchaImage();">새로고침</button>
+											<button type="button" id="swap_captcha">음성듣기</button>
+										</div>
+									</li>
+									<li class="captcha_area">
+										<label for="captcha" id="label_captcha_area" class="sr-only">보안문자 입력</label>
+										<input type="text" id="captcha" name="captcha" placeholder="위 보안문자 이미지에 보이는 문자 입력" title="문자입력"/>
+									</li>
+								</ul>
+							</div>
+							<p class="t_err mt10 t_err_login_fail" style="display: none;">
+								<span id="err_msg">보안문자 입력을 다시 시도해 주세요.</span><br>
+								(10회 이상 실패하면 180초 동안 로그인이 불가능 합니다.)<br>
+								<span id="login_fail_cnt">4</span>회 실패 / 잔여 : <span id="login_remain_cnt">6</span>회<span id="blockSecs1" style="display: none;"> / <span id="blockSecs2">180</span>초 남음
+							</p>
+						</div>
+						<!-- //보안문자 입력시 -->
+					</div>
+					<div class="ui_row mt20">
+						<button type="button" class="btn btnL btn_dark" id="btnLogin">로그인</button>
+					</div>
+				</form>
+				<div class="t_c sns_wrap">
+					<h3 class="sr-only">간편로그인</h3>
+					<ul class="login_utill">
+						<li class="lu_kakao">
+							<a href="javascript:void(0)">
+								<div class="ico"></div>카카오로<br>시작하기
+							</a>
+						</li>
+						<li class="lu_naver">
+							<a href="javascript:void(0)">
+								<div class="ico"></div>네이버로<br>시작하기
+							</a>
+						</li>
+						<li class="lu_yes24">
+							<a href="javascript:void(0)">
+								<div class="ico"></div>YES24로<br>시작하기
+							</a>
+						</li>
+					</ul>
+				</div>
+				<div class="t_c mt30"><botton class="btn_nonMb">비회원 주문조회</botton>
+				</div>
+
+		</section>
+		<!-- ★ 컨텐츠 종료 -->
+
+	</main>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let ckLoginId = "ckLoginId";
+
+	// 로그인블락시간(초) 설정
+	let fnSetLoginBlockTime = function() {
+		let blockSecs = Number($("#blockSecs2").html()) - 1;
+		$("#blockSecs2").html(blockSecs);
+		if (blockSecs == 0) {
+			clearTimeout(fnSetLoginBlockTime);
+			$('#btnLogin').attr('disabled',false);
+		} else {
+			setTimeout(fnSetLoginBlockTime, 1000);
+		}
+	}
+	
+	// 로그인
+	$('#btnLogin').on('click', function() {
+		if (!gagajf.validation($('#loginForm'))) {
+			return;
+		}
+
+		let params = new Object();
+		params.loginId = $('#loginForm input[name=loginId]').val();
+		params.passwd = $('#loginForm input[name=passwd]').val();
+		
+		$.post($('#loginForm').prop('action')
+			, $.param(params)
+			, function(result) {
+				if (result.status != 'OK') {
+
+					if (result.status == 'PWD_5WRONG') {
+						// Do nothing
+					} else if (result.status == 'DORMANT_CUST') {
+						// 휴면회원
+						mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
+							sureBtnText: "확인",
+							sureBtnClick: function() {
+								cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+							}
+						});
+
+						return;
+					} else if (result.status == 'SECEDE_CUST') {
+						// 탈퇴회원
+					} else if (result.status == 'SESSION_EXPIRED') {
+						// 세션만료
+					}
+
+					if (!gagajf.isNull(result.message)) {
+						let loginFailCnt = Number(result.loginFailInfo.loginFailCnt);
+						
+						$("#err_msg").html(result.message);
+						$("#login_fail_cnt").html(loginFailCnt);
+						$("#login_remain_cnt").html(10 - loginFailCnt);
+						$(".t_err_login_fail").show();
+						
+						if (loginFailCnt >= 5 && loginFailCnt < 10) {
+							// 비밀번호 5회 이상 틀린 경우 캡챠 노출
+							$('.captcha').show();
+						} else if (loginFailCnt >= 10) {
+							$('.captcha').hide();
+							
+							// 비밀번호 10회 이상 틀린 경우 로그인 블락
+							let blockSecs = Number(result.loginFailInfo.blockSecs);
+							if (blockSecs > 0) {
+								$("#blockSecs2").html(blockSecs);
+								fnSetLoginBlockTime();
+								$("#blockSecs1").show();
+								$('#btnLogin').attr('disabled',true);
+							}
+						}
+					}
+
+					return; // 정상적으로 로그인 되지 않았으므로 return
+				}
+				
+				document.location.href = result.returnUrl;
+				
+// 				if (gagajf.isNull(result.returnUrl)) {
+// 					cfnGoToPage(_PAGE_MAIN);
+// 				} else {
+// 					if (result.returnUrl.indexOf(_PAGE_DIRECT_BUY) > -1) {
+// 						// 바로주문
+// 						jfOrderByMember();
+// 					} else if (result.returnUrl.indexOf(_PAGE_CUSTOMER_JOIN) > -1 ||
+// 						result.returnUrl.indexOf(_PAGE_CUSTOMER_ID_FIND) > -1 ||
+// 						result.returnUrl.indexOf(_PAGE_CUSTOMER_PW_FIND) > -1 ||
+// 						result.returnUrl.indexOf(_PAGE_CUSTOMER_JOIN_COMPLETE) > -1) {
+// 						cfnGoToPage(_PAGE_MAIN);
+// 					} else {
+// 						document.location.href = result.returnUrl;
+// 					}
+// 				}
+			}
+			, 'json');
+	});
+	
+	// Save ID
+	$('#chkSaveId').on('click', function() {
+		if ($(this).is(":checked")) {
+			if (!gagajf.isNull($('#loginForm input[name=loginId]').val())) {
+				gagajf.setCookie(ckLoginId, $('#loginForm input[name=loginId]').val(), 1);
+			}
+		} else {
+			if (!gagajf.isNull(gagajf.getCookie(ckLoginId)) && (gagajf.getCookie(ckLoginId) === $('#loginForm input[name=loginId]').val())) {
+				gagajf.setCookie(ckLoginId, $('#loginForm input[name=loginId]').val(), -1);
+			}
+		}
+	});
+	
+	// 캡챠 이미지 로딩
+	let fnReloadCaptchaImage = function() {
+		$('#imgCaptcha').attr('src', '/common/captcha.do?dummy=' + new Date());
+	}
+
+	// SNS 로그인 콜백함수
+	var fnSnsSigninCallback = function(userInfo) {
+		// Ci이 조회 시 없음
+		if (userInfo.custStat === 'DUP_PHONE_CUST') {
+			mcxDialog.alert("이미 사용 중인 휴대전화번호 입니다.");
+			return;
+		}
+		if (userInfo.custStat === 'DUP_EMAIL_CUST') {
+			mcxDialog.alert("이미 사용 중인 이메일 입니다.");
+			return;
+		}
+		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+		}
+		// Ci이 조회 시 있음
+		if (userInfo.custStat === 'SECEDE_CUST') {
+			mcxDialog.alert("탈퇴 회원 입니다.");
+			return;
+		}
+		if (userInfo.custStat === 'DORMANT_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+		}
+		if (userInfo.custStat === 'FAIL_CUST') {
+			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+			return;
+		}
+		if (userInfo.custStat === 'NEW_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
+		}
+
+
+		if (userInfo.custStat === 'SUCC_CUST') {
+			let params = {};
+			params.snsType = userInfo.snsType;
+			params.snsId = [[${snsLoginPrefix}]] + userInfo.snsId;
+			$.post(_frontUrl + '/login'
+				, $.param(params)
+				, function(result) {
+					fnReloadAfterLogin(result);
+				}
+				, "json");
+		}
+
+
+	};
+
+	var fnReloadAfterLogin = function(result) {
+		if (result.status === 'OK') {
+			document.location.href = result.returnUrl;
+		} else if (result.status === 'EMAIL_DUP') {
+
+		} else if(result.status === 'DORMANT_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+		} else if(result.status === 'SECEDE_CUST') {
+
+		} else {
+			//cfnGoToPage(_PAGE_CUSTOMER_JOIN_CERTIFY_SNS);
+		}
+	};
+
+
+
+	$(document).ready(function() {
+		$('#loginForm input[name=loginId]').val(gagajf.getCookie(ckLoginId));
+		if (gagajf.isNull($('#loginForm input[name=loginId]').val())) {
+			$('#loginForm input[name=loginId]').focus();
+			$('#chkSaveId').prop('checked', false);
+		} else {
+			$('#loginForm input[name=passwd]').focus();
+			$('#chkSaveId').prop('checked', true);
+		}
+	});
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 38 - 0
src/main/webapp/WEB-INF/views/mob/common/layout/DefaultLayoutMob.html

@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+
+<head th:replace="~{mob/common/fragments/HeadMob :: head}"></head>
+
+<body>
+
+	<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+	
+	<div class="app">
+		<!-- GNB -->
+		<th:block th:replace="~{mob/common/fragments/GnbMob :: gnb}"></th:block>
+		<!--// GNB -->
+		
+		<!-- CONTENT AREA -->
+		<th:block layout:fragment="content"></th:block>
+		<!-- // CONTENT AREA -->
+
+		<!-- Footer -->
+		<th:block th:replace="~{mob/common/fragments/FooterMob :: footer}"></th:block>
+
+		<th:block th:replace="~{mob/common/fragments/ScriptsMob :: scripts}"></th:block>
+		<!-- <th:block th:replace="~{mob/common/fragments/MarketingScripts :: mscripts}"></th:block> -->
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+	</div>
+	
+</body>
+</html>

+ 37 - 0
src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MallMainFormMob.html
+ * @desc    : 몰메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.10   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+
+	<h1>Mall Main ...............</h1>
+	
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// 컨텐츠 호출
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -63,7 +63,7 @@
 								</li>
 								<li class="captcha_area">
 									<label for="captcha" id="label_captcha_area">보안문자 입력</label>
-									<input type="text" id="captcha" name="captcha" title="문자입력">
+									<input type="text" id="captcha" name="captcha" title="문자입력"/>
 								</li>
 							</ul>
 						</div>
@@ -106,8 +106,8 @@
 								</a>
 							</li>
 							<li>
-								<a href="javascript:void(0)">
-									<i class="ico ico_snslogin yes24" onclick="cfnLoginYes24();"></i>
+								<a href="javascript:void(0)" onclick="cfnLoginYes24();">
+									<i class="ico ico_snslogin yes24"></i>
 									<span>YES24로 시작하기</span>
 								</a>
 							</li>

+ 31 - 4
src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html

@@ -433,7 +433,7 @@
 		temp.optCd = "베이지110";
 		temp.goodsQty = 1;
 		temp.goodsType = "G056_S";
-		temp.cartGb = "C";
+		temp.cartGb = "O";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";
@@ -445,7 +445,7 @@
 		temp.optCd = "블루110";
 		temp.goodsQty = 1;
 		temp.goodsType = "G056_S";
-		temp.cartGb = "C";
+		temp.cartGb = "O";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";
@@ -457,14 +457,41 @@
 		temp.optCd = "아이보리110";
 		temp.goodsQty = 1;
 		temp.goodsType = "G056_S";
-		temp.cartGb = "C";
+		temp.cartGb = "O";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";
 		temp.planDtlSq = "123";
 		compsList.push(temp);
 
-		alert(JSON.stringify(compsList));
+		cfnAddCart(compsList);*/
+
+		/*let compsList = [];
+		let temp = new Object;
+		temp.goodsCd = "14373686";
+		temp.optCd = "챠콜그레이150";
+		temp.goodsQty = 2;
+		temp.goodsType = "G056_D";
+		temp.dealGoodsCd = "STYD000000025"
+		temp.cartGb = "O";
+		temp.afLinkCd = "afLinkCd";
+		temp.ithrCd = "G027_ZZZ";
+		temp.contentsLoc = "G028_YYY";
+		temp.planDtlSq = "123";
+		compsList.push(temp);
+
+		temp = new Object;
+		temp.goodsCd = "14373710";
+		temp.optCd = "L핑크130";
+		temp.goodsQty = 3;
+		temp.goodsType = "G056_D";
+		temp.dealGoodsCd = "STYD000000025"
+		temp.cartGb = "O";
+		temp.afLinkCd = "afLinkCd";
+		temp.ithrCd = "G027_ZZZ";
+		temp.contentsLoc = "G028_YYY";
+		temp.planDtlSq = "123";
+		compsList.push(temp);
 
 		cfnAddCart(compsList);*/
 	});

+ 25 - 39
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -180,7 +180,7 @@
 									</div>
 									<div class="form_field">
 										<div  th:each="goodsOption2, status : ${goodsOption2List}">
-											<input type="radio" name="rdi-optsize"  th:disabled="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" 
+											<input type="radio" name="opt"  th:id="${'size'+goodsOption2.optCd}" th:disabled="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" 
 													th:attr="addPrice=${goodsOption2.addPrice}, optCd1=${goodsOption2.optCd1}, optCd=${goodsOption2.optCd}">
 											<label th:for="${goodsInfo.goodsCd + '-'+ goodsInfo.colorCd + '-' +goodsOption2.optCd2}"><span th:text="${goodsOption2.optCd2}" th:onclick="jfViewStock(this, [[${goodsInfo.goodsCd}]],[[${goodsOption2.optCd1}]],[[${goodsOption2.optCd2}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]] )">100</span></label>
 										</div>
@@ -240,42 +240,10 @@
 								</div>
 								</th:block>
 								<!-- 해당 상품 품절시 노출 -->
-								<div class="info_restock">
-									<a href="javascript:void(0);" id="btn_pushRestock_pop" class="btn_popup" th:onclick="cfGoodsInstockAlarmInfo([[${goodsInfo.goodsCd}]])">재입고 시 알림을 받아보세요</a>
+								<div class="info_restock" style="display:none;">
+									<a href="javascript:void(0);" id="btn_pushRestock_pop" class="btn_popup" th:onclick="cfGoodsInstockAlarmInfo([[${goodsInfo.goodsCd}]], [[${goodsInfo.colorCd}]])">재입고 시 알림을 받아보세요</a>
 								</div>
 								<!-- //해당 상품 품절시 노출 -->
-								<!-- <div class="opt_result">
-									<div class="result_item">
-										<div class="opt_header">
-											<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-											<span class="item_option">다크그레이/XXL</span>
-										</div>
-										<div class="number_count">
-											<span class="minus"><em class="sr-only">감소</em></span>
-											<input type="text" name="" maxlength="3" style="ime-mode:disabled" value="1">
-											<span class="plus"><em class="sr-only">추가</em></span>
-										</div>
-										<div class="item_price">
-											<p><em>99,999,999</em>원</p>
-										</div>
-										<button type="button" class="btn_delete_item"><span>삭제</span></button>
-									</div>
-									<div class="result_item">
-										<div class="opt_header">
-											<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-											<span class="item_option">블루그레이/S</span>
-										</div>
-										<div class="number_count">
-											<span class="minus"><em class="sr-only">감소</em></span>
-											<input type="text" name="" maxlength="3" style="ime-mode:disabled" value="1">
-											<span class="plus"><em class="sr-only">추가</em></span>
-										</div>
-										<div class="item_price">
-											<p><em>99,999,999</em>원</p>
-										</div>
-										<button type="button" class="btn_delete_item"><span>삭제</span></button>
-									</div>
-								</div> -->
 								<div class="opt_count">
 									<div class="opt_header">
 										<span class="title">수량</span>
@@ -747,13 +715,14 @@
 	var jfGoodsLikeSearch = function(params) {
 		gagajf.ajaxSubmit("/goods/detail/like/frame", "html", "goodsLikebArea", params);
 	}
-
 	
 	//사이즈 클릭시
 	var jfViewStock = function(obj, goodsCd, optCd1, optCd2,  minOrdQty, maxOrdQty) {
-		let $obj = $(obj);
+		debugger;
+		alert(optCd);
+		var $obj = $(obj);
 
-		var $target = $obj.parent().parent().children('input[name="rdi-optsize"]');
+		var $target = $obj.parent().parent().children('input[name="opt"]');
 		$target.prop("checked",true);
 		var addPrice  = $target.attr("addPrice");
 		var optCd  = $target.attr("optCd");
@@ -876,7 +845,6 @@
 		}
 
 		jfSetTotalPrice();
-
 	}
 	
 	//합계 계산
@@ -993,6 +961,23 @@
 		}
 	}
 	
+	var jfOptionSoldout = function(){
+		var $target=$("#cartForm").find('.form_field');
+		var soldout = false;
+		for(var i=0;i<$target.find('input[name="opt"]').length;i++){
+			
+			if($target.find('input[name="opt"]').eq(i).attr('disabled')) {
+				soldout = true;
+			}
+		}
+
+		var goodsType = [[${goodsInfo.goodsType}]];
+		if (soldout && goodsType == 'G056_N') {
+			$(".info_restock").show();
+		}
+	}
+	
+	
 	$(document).ready( function() {
 		
 		var params = new Object();
@@ -1190,6 +1175,7 @@
 			});
 		}; */
 		
+		jfOptionSoldout();
 	});
 	
 /*]]>*/

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

@@ -20,128 +20,102 @@
 			<h5 class="modal-title" id="pushRestockLabel">재입고 알림 신청</h5>
 		</div>
 		<div class="modal-body">
+			<form name="goodsInstockAlarmForm" id="goodsInstockAlarmForm" method="post">
 			<div class="pop_cont">
 				<div class="item_blk">
-					<div class="item_prod">
+					<div class="item_prod" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
 						<div class="item_state">
-							<a href="#none" class="itemLink">
+							<a href="javascript:void(0);" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
 								</div>
-								<p class="itemBrand">BRAND NAME1</p>
-								<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-								<p class="itemPrice">80,100
-									<span class="itemPrice_original">89,000</span>
-									<span class="itemPercent">10%</span>
+								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
+								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+								<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+									<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+									<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
 								</p>
 							</a>
 						</div>
 					</div>
 				</div>
-				<div class="select_blk">
+				<th:block th:if="${goodsInfo.selfGoodsYn =='Y' }">
+				<div class="select_blk" th:if="${goodsOption2List != null and !goodsOption2List.empty}" >
 					<h6>사이즈 선택</h6>
 					<div class="opt_size">
 						<div class="form_field">
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize11" value="">
-								<label for="rdi-optsize11"><span>90</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize12" value="">
-								<label for="rdi-optsize12"><span>95</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize13" value="">
-								<label for="rdi-optsize13"><span>100</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize14" value="">
-								<label for="rdi-optsize14"><span>105</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize15" value="">
-								<label for="rdi-optsize15"><span>110</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize16" value="">
-								<label for="rdi-optsize16"><span>115</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize17" value="">
-								<label for="rdi-optsize17"><span>free</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize18" value="">
-								<label for="rdi-optsize18"><span>size1</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-optsize" id="rdi-optsize19" value="">
-								<label for="rdi-optsize19"><span>size2</span></label>
+							<div th:each="goodsOption2, status : ${goodsOption2List}">
+								<th:block th:if="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" >
+								<input type="radio" name="opt" th:id="${'size'+goodsOption2.optCd}" th:value="${goodsOption2.optCd}">
+								<label th:for="${'size'+goodsOption2.optCd}"><span th:text="${goodsOption2.optCd2}" >90</span></label>
+								</th:block>
 							</div>
 						</div>
 					</div>
 				</div>
+				</th:block>
+				<th:block th:if="${goodsInfo.selfGoodsYn =='N' }">
 				<div class="select_blk">
 					<h6>옵션 선택</h6>
 					<div class="opt_select">
 						<div class="opt_header">
-									<span class="title">옵션</span>
-									<button type="button" id="btn_infoSize_pop" class="btn_popup"><span>사이즈정보</span></button>
-								</div>
-						<form class="form_wrap">
-							<div class="form_field">
-								<div class="select_custom item_opt3">
-									<div class="combo">
-										<div class="select">선택</div>
-										<ul class="list">
-											<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-											<li class="selected">선택</li> 
-											<li>상품옵션01</li>
-											<li>상품옵션02</li>
-											<li>상품옵션03</li>
-											<li aria-disabled="true">
-												<div>상품옵션05</div>
-												<div>120,000원</div>
-											</li>
-											<li>상품옵션06</li>
-											<li aria-disabled="true" data-soldout="true">
-												<div>상품옵션07</div>
-												<div>120,000원</div>
-											</li>
-										</ul>
-									</div>
+							<span class="title">옵션</span>
+							<button type="button" id="btn_infoSize_pop" class="btn_popup"><span>사이즈정보</span></button>
+						</div>
+						<div class="form_field">
+							<div class="select_custom item_opt3">
+								<div class="combo">
+									<div class="select">선택</div>
+									<ul class="list">
+										<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
+										<li class="selected">선택</li> 
+										<li>상품옵션01</li>
+										<li>상품옵션02</li>
+										<li>상품옵션03</li>
+										<li aria-disabled="true">
+											<div>상품옵션05</div>
+											<div>120,000원</div>
+										</li>
+										<li>상품옵션06</li>
+										<li aria-disabled="true" data-soldout="true">
+											<div>상품옵션07</div>
+											<div>120,000원</div>
+										</li>
+									</ul>
 								</div>
 							</div>
-							<div class="form_field">
-								<div class="select_custom item_opt4" disabled>
-									<div class="combo">
-										<div class="select">선택</div>
-										<ul class="list">
-											<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-											<li class="selected">선택</li> 
-											<li>상품옵션11</li>
-											<li>상품옵션12</li>
-											<li>상품옵션13</li>
-											<li aria-disabled="true">
-												<div>상품옵션15</div>
-												<div>120,000원</div>
-											</li>
-											<li>상품옵션16</li>
-											<li aria-disabled="true" data-soldout="true">
-												<div>상품옵션17</div>
-												<div>120,000원</div>
-											</li>
-										</ul>
-									</div>
+						</div>
+						<div class="form_field">
+							<div class="select_custom item_opt4" disabled>
+								<div class="combo">
+									<div class="select">선택</div>
+									<ul class="list">
+										<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
+										<li class="selected">선택</li> 
+										<li>상품옵션11</li>
+										<li>상품옵션12</li>
+										<li>상품옵션13</li>
+										<li aria-disabled="true">
+											<div>상품옵션15</div>
+											<div>120,000원</div>
+										</li>
+										<li>상품옵션16</li>
+										<li aria-disabled="true" data-soldout="true">
+											<div>상품옵션17</div>
+											<div>120,000원</div>
+										</li>
+									</ul>
 								</div>
 							</div>
-						</form>
-					</div>   
-				</div>	  
+						</div>
+					</div>
+				</div>
+				</th:block>
 			</div>
+			</form>
 		</div>
 		<div class="modal-footer">
-			<button type="button" id="" class="btn btn_dark"><span>신청</span></button>
+			<button type="button"  class="btn btn_dark" onclick=""><span>신청</span></button>
 		</div>
 	</div>
 </div>

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

@@ -87,7 +87,7 @@
 												<div class="form_field">
 													<div class="select_custom type1">
 														<div class="combo">
-															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
+<!--															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>-->
 															<div class="select">선택</div>
 															<ul class="list" style="width:100px; margin:0 auto">
 																<li class="selected" value="0">선택</li>
@@ -344,7 +344,7 @@
 	var fnChangeQty = function(param) {
 		let url = '/mypage/cancel/refund/amt/calculate';
 		$(param).parent().parent().find('input[name=chgQty]').val($(param).val());
-		
+		$(param).val();
 		let chgReason = $('div[name=chgReason]').parent().find('li.selected').attr('value');
 		
 		if (!gagajf.isNull(chgReason)) {

+ 18 - 12
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -58,9 +58,11 @@
 
 	<form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
 	
-	
-	<input type="button" id="buyBtn" value="테스트버튼" style="width:200px; height:200px;"/>
-
+	<div style="margin:20px;">
+		<input type="button" id="buyBtn" value="KCP테스트버튼" style="width:200px; height:70px; background-color: #fd4801; color: white; border: unset;"/>
+		<input type="button" id="kakaoBtn" value="카카오테스트버튼" style="width:200px; height:70px; background-color: #fffa00; color: black; border: unset;"/>
+		<input type="button" id="naverBtn" value="네이버테스트버튼" style="width:200px; height:70px; background-color: lawngreen; color: black; border: unset;"/>
+	</div>
 <!-- // xodud1202 -->
 
 
@@ -189,11 +191,11 @@
 					, custNo		: [[${sessionInfo.custNo}]]
 					, ordNo			: 1000
 					, goodsNm		: "상품 테스트"
-					, payAmt		: 10
+					, payAmt		: 1000
 					, ordGoodsQty	: [[${goodsTotCnt}]]
 				},
 				error : function(e) {
-					console.log(e.responseText);
+					mcxDialog.alert(e.responseText);
 				},
 				success : function(result) {
 					$("#order_info").html(result);
@@ -239,6 +241,9 @@
 			let url = '/order/naver/payment/approve';
 			let data = {};
 			data.pgTid = $('#order_info input[name=pgTid]').val();
+			data.paySq = 1234;
+			data.custNo = [[${sessionInfo.custNo}]];
+			data.updNo = [[${sessionInfo.custNo}]];
 
 			let jsonData = JSON.stringify(data);
 
@@ -248,7 +253,7 @@
 				console.log(' ');
 				fnNaverPaymentOrder();
 			});
-			
+
 			return true;
 		}
 		
@@ -262,7 +267,7 @@
 			
 			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 				console.log('====== naverPaymentOrder ======');
-				console.log(result.kakaoPay);
+				console.log(result.naverPay);
 				console.log(' ');
 				fnCancelNaverPayment();
 			});
@@ -277,20 +282,21 @@
 			data.pgTid = $('#order_info input[name=pgTid]').val();
 			data.cancelRequester = '1';
 			data.chgReasonNm = '고객변심';
-			data.payAmt = 5;
+			data.payAmt = 1000;
+			data.paySq = 1234;
+			data.custNo = [[${sessionInfo.custNo}]];
+			data.updNo = [[${sessionInfo.custNo}]];
 
 			let jsonData = JSON.stringify(data);
 
 			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 				console.log('====== naverPaymentCancel ======');
-				console.log(result.kakaoPay);
+				console.log(result.naverPay);
 				console.log(' ');
 			});
 		}
-	</script>
 
-	<input type="button" id="kakaoBtn" value="카카오테스트버튼" style="width:200px; height:200px;"/>
-	<input type="button" id="naverBtn" value="네이버테스트버튼" style="width:200px; height:200px;"/>
+	</script>
 <!-- // card007 -->
 
 

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

@@ -0,0 +1,357 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : PlanningDetailFormWeb.html
+ * @desc    : 기획전메인 Page
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.3.9     sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+	<!--  container -->
+	<div id="container" class="container dp">
+		<div class="breadcrumb"> 
+			<ul>
+               <li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_2depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);">기획전</a></li>
+				<li class="bread_2depth">[[${planInfo.planNm}]]</li>
+			</ul> 
+		</div>
+		<div class="wrap">
+            <div class="content wide"> <!-- 풀사이즈 -->
+                <div class="cont_head">
+					<div>
+                        <h3>[[${planInfo.planNm}]]</h3>
+                        <div>
+                            <a href="javascript:void(0)">sns share</a>
+                        </div>
+                    </div>
+                </div>
+                <div class="cont_body">
+                    <div class="coner_content">
+                        <div class="coner_front">
+                            <div class="big_banner"></div> <!-- 상단배너 -->
+                        </div>
+                        <div class="coner_item01">
+                            <div class="dp_listItems_wrap"> <!-- 추천아이템 -->
+                                <div>
+                                    <a href="javascript:void(0)">겨울 아우터 추천템</a>
+                                </div>
+                                <div class="dp_listItems_cont">
+                                    <ul>
+                                        <li>
+                                            <div class="dp_listItems">
+                                                <div class="dp_listItems_img">
+                                                    <img src="/images/pc/thumb/dp_item01.jpg" alt="">
+                                                </div>
+                                                <div class="dp_listItems_info">
+                                                    <div class="dp_listItems_brand">BUCKAROO</div>
+                                                    <div class="dp_listItems_name">여성 유니 하이넥 벨트 빈티지 숏 기장 무스탕<br>(B204Z5010P)</div>
+                                                    <div class="dp_listItems_price">
+                                                        <span class="price">79,900</span>
+                                                        <del>98,000</del>
+                                                        <span class="percent">10%</span>
+                                                    </div>
+                                                    <div class="ui_row">
+                                                        <button type="button" class="btn btn_default"><span>VIEW MORE</span></button>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <li>
+                                            <div class="dp_listItems">
+                                                <div class="dp_listItems_img">
+                                                    <img src="/images/pc/thumb/dp_item02.jpg" alt="">
+                                                </div>
+                                                <div class="dp_listItems_info">
+                                                    <div class="dp_listItems_brand">NBA</div>
+                                                    <div class="dp_listItems_name">남성 유니 와플 패턴 코듀로이 숏기장 다운점퍼<br>(B204DW040P)</div>
+                                                    <div class="dp_listItems_price">
+                                                        <span class="price">79,900</span>
+                                                        <del>98,000</del>
+                                                        <span class="percent">10%</span>
+                                                    </div>
+                                                    <div class="ui_row">
+                                                        <button type="button" class="btn btn_default"><span>VIEW MORE</span></button>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <div class="ui_row">
+                                            <button type="button" class="btn btn_default"><span>더 많은 상품보기</span></button>
+                                        </div>
+                                    </ul>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="coner_item02">
+                            <div class="dp_coupon_wrap">
+                                <div>
+                                    <p>TBJ 시즌오프 기간한정 20% 할인쿠폰</p>
+                                </div>
+                                <div class="dp_coupon_list">
+                                    <div class="dp_coupon_item">
+                                        <div class="dp_coupon">
+                                            <p>멤버십 10%할인쿠폰</p>
+                                            <p>10%</p>
+                                            <button></button>
+                                        </div>
+                                        <div>
+                                            <a href="javascript:void(0)" id="coupon_pop">사용안내</a>
+                                        </div>
+                                    </div>
+                                    <div class="dp_coupon_item">
+                                        <div class="dp_coupon">
+                                            <p>멤버십 10%할인쿠폰멤버십 10%할인쿠폰멤버십 10%할인쿠폰</p>
+                                            <p>10%</p>
+                                            <button></button>
+                                        </div>
+                                        <div>
+                                            <a href="javascript:void(0)" id="coupon_pop2">사용안내</a>
+                                        </div>
+                                    </div>
+                                    <div class="dp_coupon_item">
+                                        <div class="dp_coupon">
+                                            <p>멤버십 10%할인쿠폰멤버십 10%할인쿠폰멤버십 10%할인쿠폰</p>
+                                            <p>10%</p>
+                                            <button></button>
+                                        </div>
+                                        <div>
+                                            <a href="javascript:void(0)" id="coupon_pop">사용안내</a>
+                                        </div>
+                                    </div>
+                                    <div class="dp_coupon_item">
+                                        <div class="dp_coupon">
+                                            <p>멤버십 10%할인쿠폰멤버십 10%할인쿠폰멤버십 10%할인쿠폰</p>
+                                            <p>10%</p>
+                                            <button></button>
+                                        </div>
+                                        <div>
+                                            <a href="javascript:void(0)" id="coupon_pop">사용안내</a>
+                                        </div>
+                                    </div>
+                                    <div class="dp_coupon_item">
+                                        <div class="dp_coupon">
+                                            <p>멤버십 10%할인쿠폰멤버십 10%할인쿠폰멤버십 10%할인쿠폰</p>
+                                            <p>10%</p>
+                                            <button></button>
+                                        </div>
+                                        <div>
+                                            <a href="javascript:void(0)" id="coupon_pop">사용안내</a>
+                                        </div>
+                                    </div>
+                                    <div class="dp_coupon_item">
+                                        <div class="dp_coupon">
+                                            <p>멤버십 10%할인쿠폰멤버십 10%할인쿠폰멤버십 10%할인쿠폰</p>
+                                            <p>10%</p>
+                                            <button></button>
+                                        </div>
+                                        <div>
+                                            <a href="javascript:void(0)" id="coupon_pop">사용안내</a>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="dp_coupon_tip">
+                                    <div class="dp_coupon_notice">
+                                    </div>
+                                    <ul>
+                                        <li>쿠폰 발급 기간 : 2020.09 ~ 2020.10.05</li>
+                                        <li>쿠폰 사용 기간 : 2020.09 ~ 2020.10.05이며, 이후 자동 소멸됩니다.</li>
+                                        <li>본 쿠폰은 해당 기획전 상품에만 적용 가능합니다.</li>
+                                        <li>본 쿠폰은 해당 기획전 다운로드 버튼을 통해 발급받으실 수 있습니다.</li>
+                                    </ul>
+                                </div>
+                            </div>
+                        </div>
+                        
+                        
+                        <div class="coner_visual">
+                            <div class="dp_banner_slide"> 
+                                <div class="post-wrapper dp_lookbook_case1"> <!-- 슬라이드case1 -->
+                                   <div class="post"><img src="/images/pc/thumb/dp_slide_banner1.png"></div>
+                                   <div class="post"><img src="/images/pc/thumb/dp_slide_banner1.png"></div>
+                                   <div class="post"><img src="/images/pc/thumb/dp_slide_banner1.png"></div>
+                                   <div class="post"><img src="/images/pc/thumb/dp_slide_banner1.png"></div>
+                                </div>
+                             </div>
+                        </div>
+                    </div>
+                </div>
+            </div> <!-- //풀사이즈 -->
+			<div class="content">
+				<div class="cont_head">
+                    <div class="bullet_sticky_nav">
+                        <ul>    
+                            <li><a href="#23">모이몰른</a></li> <!-- 섹션이동 -->
+                        </ul>
+                    </div>
+                    <div class="item_header">
+                        <h3>겨울 아우터 재입고</h3>
+                    </div>
+				</div>
+				<div class="cont_body">
+                    <div class="list_content">
+                        <div class="list_defult">
+                            <div>
+                                <p>등록된 기획전이 없습니다.</p>
+                            </div>
+                            <div class="ui_row">
+                                <button type="button" class="btn btn_default btn_md"><span>메인으로 가기</span></button>
+                            </div>
+                        </div>
+                        <div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
+                            <div class=" item_prod"> <!-- item_prod ranker d_detail -->
+                                <div class="item_state"> <!-- item_state AD soldout -->
+                                    <a href="#none" class="itemLink">
+                                        <div class="itemPic">
+                                            <img alt="BLUE-a" class=" vLHTC pd_img" src="/images/pc/thumb/prod1.jpg">
+                                            <button type="button" class="itemLike active">관심상품 추가</button>
+                                        </div>
+                                        <p class="itemBrand">BRAND NAME</p>
+
+                                        <div class=" itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+                                        <p class="itemPrice">488,000<!-- -->원</p>
+                                        <p class="itemBadge">
+                                            <span class="badge13">베스트 </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="itemComment">#주문 폭주 상품</div>
+                                    </a>
+                                </div>
+                            </div>
+                           
+                        </div>
+
+                        <div class="foot_banner_slide"> 
+                            <div>
+                                <p>다른 기획전 보기</p>
+                                <a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);">전체보기</a>
+                            </div>
+                            <div class="dp_banner_slide">
+                                <div class="post-wrapper dp_lookbook_case3"> <!-- 슬라이드case3 -->
+                                   <th:block th:each="PlanData, PlanStat : ${planList}">  
+                                    <div class="post">     
+                                              
+                                        <a href="#none" class="dp_lookbook_item" th:onclick="cfnGoToPage(_PAGE_PLANNING_DETAIL + '?planSq=' + [[${PlanData.planSq}]]);">
+                                            <div>
+                                                <img th:src="${@environment.getProperty('domain.image')+'/planning/'+PlanData.mainPimg}" style="width: 100%;" alt="">
+                                            </div>
+                                            <div>
+                                            <th:block th:if="${PlanData.cnt > 1}">
+                                            <p class="itemBrand">[[${PlanData.brand}]] 외</p>
+                                            </th:block>
+                                            <th:block th:if="${PlanData.cnt <= 1}">
+                                            <p class="itemBrand">[[${PlanData.brand}]]</p>
+                                            </th:block>
+                                             <div class="itemName">[[${PlanData.planNm}]]</div>
+                                            </div>
+                                        </a>
+                                    </div>
+                                    </th:block>
+                                </div>
+                            </div>
+                        </div>
+
+                    </div>
+                </div>
+		    </div>
+        </div>
+    </div>   	
+
+<script th:inline="javascript">
+$(document).ready(function() {
+	var error = [[${error}]];
+	console.log("====" + error);
+	
+	if(error!= null){
+		mcxDialog.alert(error);
+	}
+});
+</script>
+<script>
+// header scroll
+$(function(){
+	$(window).scroll(function(){
+		var scroll = $(this).scrollTop();
+		var headerH = $(".header").height();
+		if ($(window).scrollTop() > headerH){
+			$(".header").addClass("minify");
+			return false;
+		}
+		else {
+			$(".header").removeClass("minify");
+			return false;
+		}
+	});
+});
+  </script>
+<script>
+    $(document).ready( function() {
+        $(window).scroll(function(){
+            var navOffset = $('.item_header').offset().top - $('.bullet_sticky_nav').height();
+            var windScroll = $(window).scrollTop();
+            if (windScroll > navOffset){
+                $(".bullet_sticky_nav").addClass("sticky");
+            }
+            else {
+                $(".bullet_sticky_nav").removeClass("sticky");
+            }
+            $("#shiping_pop").click(function() {
+                $("#Bulletship_modal").modal("show");
+            });	
+        });
+    });
+</script>
+<script>
+    $(function(){
+        $('.dp_lookbook_case1').slick({
+            dots: true,
+            infinite: true,
+            speed: 300,
+            slidesToShow: 1,
+            adaptiveHeight: true
+        });
+        $('.dp_lookbook_case2').slick({
+            dots: true,
+            infinite: true,
+            speed: 300,
+            slidesToShow: 2,
+            slidesToScroll: 1,
+            adaptiveHeight: true,
+            variableWidth:true
+        });
+        $('.dp_lookbook_case3').slick({
+            dots: false,
+            infinite: true,
+            speed: 300,
+            slidesToShow: 5,
+            slidesToScroll: 1,
+            adaptiveHeight: true
+        });
+        $('.dp_lookbook_case4').slick({
+            dots: true,
+            infinite: true,
+            speed: 300,
+            slidesToShow: 1,
+            adaptiveHeight: true
+        });
+    });
+</script>
+</th:block>
+
+</body>
+</html>

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

@@ -18,20 +18,18 @@
  -->
  <body>
 <th:block layout:fragment="content">
-	<!--  container -->
+<!--  container -->
 	<div id="container" class="container ev">
 		<div class="breadcrumb">
 			<ul>
-				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_home"><a href="index.html">홈</a></li>
 				<li class="bread_2depth">이벤트/혜택</li>
 			</ul>
 		</div>
 		<div class="wrap">
-			<div class="content ev_list">
+			<div class="content ev_list"> <!-- 페이지특정 클래스 = ev_list -->
 				<div class="cont_head">
-					<div>
-						<h3>이벤트</h3>
-					</div>
+                    <h2 class="displayH t_c">이벤트</h2>
 				</div>
 				<div class="cont_body">
 					<div class="ev_mem_rank">
@@ -65,145 +63,143 @@
 							</ul>
 						</div>
 					</div>
-					<th:block th:if="${cnt > 0}">
-					<div class="event_list">
-					</th:block>
-					<th:block th:unless="${cnt > 0}">
-					<div class="event_list no_data">
-					</th:block>
-						<div class="event_top">
-							<div class="count">
-								<span>[[${cnt}]]</span>개의 이벤트
-							</div>
-							<div class="event_btn">
-								<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOTICE);">당첨자 발표</a>
-							</div>
+					<div class="area_top_list_info">
+						<div class="total_count">
+							<span>9999</span>개의 이벤트
 						</div>
-						<div class="list">
-							
-							<ul class="clear event_con">
+						<div class="ui_right">
+							<button class="btn btn_default"><span>당첨자 발표</span></button>
+						</div>
+					</div>
+					<div class="area_thumb_list">
+						<div class="thumb_list">
+							<ul>
 								<li>
 									<a href="">
-										<div class="ev_img">
-											<div class="rank ranker"><span>NEW</span></div>
-											<img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션">
+										<div class="rank ranker"><span>NEW</span></div>
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img01.jpg" alt="">
 										</div>
 										<div class="txt">
-											<p class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</p>
-											<div class="date">
+											<p class="title">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</p>
+											<p class="date">
 												<span>2020.12.17</span> - <span>2021.01.03</span>
-											</div>
+											</p>
 										</div>
 									</a>
 								</li>
 								<li>
 									<a href="">
-									<div class="ev_img">
-										<div class="rank ranker"><span>NEW</span></div><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP">
-									</div>
-									<div class="txt">
-										<p class="tit">단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP 단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP</p>
-										<div class="date">
-											<span>2020.12.17</span> - <span>2021.01.03</span>
-										</div>
-									</div>
-								</a>
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img02.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP 단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP</p>
+											<p class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</p>
+										</div>
+									</a>
 								</li>
 								<li>
 									<a href="">
-										<div class="ev_img">
-											<img src="/images/pc/thumb/ev_list_img03.jpg" alt="ANDEW white 20winter">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img03.jpg" alt="">
 										</div>
 										<div class="txt">
-											<p class="tit">ANDEW white 20winter</p>
-											<div class="date">
+											<p class="title">ANDEW white 20winter</p>
+											<p class="date">
 												<span>2020.12.17</span> - <span>2021.01.03</span>
-											</div>
+											</p>
 										</div>
 									</a>
 								</li>
 								<li>
 									<a href="">
-										<div class="ev_img">
-											<img src="/images/pc/thumb/ev_list_img04.jpg" alt="자연스럽고 편안한  Earth Colors">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img04.jpg" alt="">
 										</div>
 										<div class="txt">
-											<p class="tit">자연스럽고 편안한  Earth Colors</p>
-											<div class="date">
+											<p class="title">자연스럽고 편안한  Earth Colors</p>
+											<p class="date">
 												<span>2020.12.17</span> - <span>2021.01.03</span>
-											</div>
+											</p>
 										</div>
 									</a>
 								</li>
 								<li>
 									<a href="">
-										<div class="ev_img">
-											<img src="/images/pc/thumb/ev_list_img05.jpg" alt="RETRO CONTEMPORARY 3개 브랜드 BUCKAROO/NBA/ANDEW">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img05.jpg" alt="">
 										</div>
 										<div class="txt">
-											<p class="tit">RETRO CONTEMPORARY 3개 브랜드 BUCKAROO/NBA/ANDEW</p>
-											<div class="date">
+											<p class="title">RETRO CONTEMPORARY 3개 브랜드 BUCKAROO/NBA/ANDEW</p>
+											<p class="date">
 												<span>2020.12.17</span> - <span>2021.01.03</span>
-											</div>
+											</p>
 										</div>
 									</a>
 								</li>
 								<li>
 									<a href="">
-										<div class="ev_img">
-											<img src="/images/pc/thumb/ev_list_img06.jpg" alt="스타일24만의 스타일로, tbj 하이 스타일링">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img06.jpg" alt="">
 										</div>
 										<div class="txt">
-											<p class="tit">스타일24만의 스타일로, TBJ 하이 스타일링</p>
-											<div class="date">
+											<p class="title">스타일24만의 스타일로, TBJ 하이 스타일링</p>
+											<p class="date">
 												<span>2020.12.17</span> - <span>2021.01.03</span>
-											</div>
+											</p>
 										</div>
 									</a>
 								</li>
 								<li>
 									<a href="">
-										<div class="ev_img">
-											<img src="/images/pc/thumb/ev_list_img07.jpg" alt="올 겨울, 나를 설레게하는 선물같은 브랜드 THIS IS FOUR YOU">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img07.jpg" alt="">
 										</div>
 										<div class="txt">
-											<p class="tit">올 겨울, 나를 설레게하는 선물같은 브랜드 THIS IS FOUR YOU</p>
-											<div class="date">
+											<p class="title">올 겨울, 나를 설레게하는 선물같은 브랜드 THIS IS FOUR YOU</p>
+											<p class="date">
 												<span>2020.12.17</span> - <span>2021.01.03</span>
-											</div>
+											</p>
 										</div>
 									</a>
 								</li>
 								<li>
 									<a href="">
-										<div class="ev_img">
-											<img src="/images/pc/thumb/ev_list_img08.jpg" alt="한눈에 살펴보는 우리 아이 겨울 아이템">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img08.jpg" alt="">
 										</div>
 										<div class="txt">
-											<p class="tit">한눈에 살펴보는 우리 아이 겨울 아이템</p>
-											<div class="date">
+											<p class="title">한눈에 살펴보는 우리 아이 겨울 아이템</p>
+											<p class="date">
 												<span>2020.12.17</span> - <span>2021.01.03</span>
-											</div>
+											</p>
 										</div>
 									</a>
 								</li>
-							</ul>
-							
-							<ul class="clear no_con">
-								<li>
-									<p><img src="/images/pc/ico_content_find.png" alt="등록된 이벤트가 없습니다."></p>
-									<span>등록된 이벤트가 없습니다.</span>
-									<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈으로 가기</a>
-								</li>
-							</ul>
-						
+							</ul>	
 						</div>
+						<!-- 등록된 이벤트가 없을 때 노출 -->
+						<div class="nodata">
+							<div class="txt_box">
+								<p>
+									등록된 이벤트가 없습니다.
+								</p>
+							</div>
+							<div class="btn_box">
+								<button class="btn btn_default"><span>홈으로 가기</span></button>
+							</div>
+						</div>		
+						<!-- //등록된 이벤트가 없을 때 노출 -->
 					</div>
-				</div>
-			</div>
-		</div>
+			    </div>
+		    </div>
+        </div>	
 	</div>
 	<!-- // container -->	
+	<!-- // container -->	
 
 <script th:inline="javascript">
 

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

@@ -77,7 +77,7 @@
                             <div class="exhi_item">
                              
                                 <div class="exhi_item_img">
-                                    <a href="javascript:void(0);" th:onclick="fnEventGoToPage('[[${PlanData.planSq}]]');">
+                                    <a href="javascript:void(0);" th:onclick="cfnGoToPage(_PAGE_PLANNING_DETAIL + '?planSq=' + [[${PlanData.planSq}]]);">
                                     	<th:block th:if="${PlanData.newPlan != null}">
                                         <div class="shape ranker"><span>NEW</span></div>
                                         </th:block>

+ 12 - 3
src/main/webapp/ux/style24_link.js

@@ -60,6 +60,7 @@ const _PAGE_WISHLIST_DEL = _frontUrl + "/mypage/wish/list/delete";				// 위시
 
 //== 기획전 ==/
 const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 					// 기획전 메인
+const _PAGE_PLANNING_DETAIL = _frontUrl + "/planning/detail/form";				// 기획전 상세
 
 
 //== 이벤트 ==/
@@ -210,7 +211,15 @@ function cfnAddCart(cartList) {
 		contentType: 'application/json',
 		dataType : 'text',
 		success : function(result) {
-			alert(result);
+			if(cartList[0].cartGb == "C") {
+				mcxDialog.confirm("<div class="+"dialog-title"+">"+"상품이 쇼핑백에 추가되었습니다.</div><p>쇼핑백으로 이동하시겠습니까?</p>", {
+					cancelBtnText: "계속 쇼핑하기",
+					sureBtnText: "쇼핑백 가기",
+					sureBtnClick: function(){
+						location.href='/cart/list/form'; 	//내 쇼핑백 이동url
+					}
+				});
+			}
 		}
 	});
 }
@@ -460,14 +469,14 @@ function cfGoodsSizeInfo(goodsCd) {
 *		cfGoodsInstockAlarmInfo(goodsCd);
 * </pre>
 */
-function cfGoodsInstockAlarmInfo(goodsCd) {
+function cfGoodsInstockAlarmInfo(goodsCd, colorCd) {
 	var str = '<div class="modal fade pd_pop push_restock_pop" id="layer_instock_alarm" tabindex="-1" role="dialog" aria-labelledby="pushRestockLabel" aria-hidden="true">';
 
 	if ($('#layer_instock_alarm').length == 0) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_GOODS_INSTOCK_ALARM_LAYER+goodsCd, 'layer_instock_alarm');
+	cfOpenLayer(_PAGE_GOODS_INSTOCK_ALARM_LAYER+goodsCd+'/'+colorCd, 'layer_instock_alarm');
 }
 
 /**