Kaynağa Gözat

Merge branch 'develop' into eskim

eskim 5 yıl önce
ebeveyn
işleme
4b96e3e63d
38 değiştirilmiş dosya ile 2425 ekleme ve 412 silme
  1. 16 0
      src/main/java/com/style24/front/biz/dao/TsfCartDao.java
  2. 10 0
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  3. 10 0
      src/main/java/com/style24/front/biz/dao/TsfOrderDao.java
  4. 6 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  5. 3 2
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  6. 117 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  7. 8 4
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  8. 10 53
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  9. 2 1
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  10. 10 4
      src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java
  11. 22 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  12. 24 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  13. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  14. 41 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  15. 9 8
      src/main/resources/config/application-run.yml
  16. 10 10
      src/main/resources/config/application-style.yml
  17. 2 1
      src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html
  18. 3 3
      src/main/webapp/WEB-INF/views/mob/common/layout/DefaultLayoutMob.html
  19. 375 0
      src/main/webapp/WEB-INF/views/mob/display/BestMainFormMob.html
  20. 628 0
      src/main/webapp/WEB-INF/views/mob/display/BrandMainFormMob.html
  21. 171 0
      src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html
  22. 170 0
      src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html
  23. 325 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningEventPollFormMob.html
  24. 3 2
      src/main/webapp/WEB-INF/views/mob/planning/PlanningMainFormMob.html
  25. 372 293
      src/main/webapp/WEB-INF/views/mob/planning/PlanningShotGuideFormMob.html
  26. 46 5
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html
  28. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreExchangeDetailFormWeb.html
  29. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreReturnDetailFormWeb.html
  30. 1 4
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html
  31. 1 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  32. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreExchangeDetailFormWeb.html
  33. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreReturnDetailFormWeb.html
  34. 16 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  35. 0 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventPollFormWeb.html
  36. 3 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  37. 0 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  38. 3 3
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

+ 16 - 0
src/main/java/com/style24/front/biz/dao/TsfCartDao.java

@@ -308,4 +308,20 @@ public interface TsfCartDao {
 	 * @since 2021. 04. 16
 	 */
 	void deleteCartDetailFromEmptyCart();
+
+	/**
+	 * 2021.05.10 주문완료 주문번호로 장바구니정보 삭제
+	 * @return void
+	 * @author jsh77b
+	 * @since 2021. 05. 10
+	 */
+	void deleteCartOrdNo(Cart param);
+	
+	/**
+	 * 2021.05.10 주문완료 주문번호로 장바구니상세정보 삭제
+	 * @return void
+	 * @author jsh77b
+	 * @since 2021. 05. 10
+	 */
+	void deleteCartDetailOrdNo(Cart param);
 }

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

@@ -169,5 +169,15 @@ public interface TsfCustomerDao {
 	 */
 	CustGrade getExpectedCustGrde(CustGrade custGrade);
 
+	/**
+	 * 고객 생년월일 저장
+	 *
+	 * @param customer - 고객번호, 생년월일
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 05. 10
+	 */
+	int saveBatchBirth(Customer customer);
+
 
 }

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

@@ -136,4 +136,14 @@ public interface TsfOrderDao {
 	 * @since 2021.04.23
 	 */
 	void createGiftcartReceipt(GiftCard param);
+	
+	/**
+	 * 보증보험 API 연동위한 정보조회
+	 *
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 05. 10
+	 */
+	Collection<Order> getGoodsInfoForInsurance(Order order);
 }

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

@@ -267,6 +267,7 @@ public class TsfCustomerService {
 		customer.setCustGrade(TscConstants.CustGrade.WELCOME.value());
 
 		int custCnt = customerDao.createCustomer(customer);
+		customerDao.saveBatchBirth(customer);
 
 		if (custCnt > 0) {
 			saveJoinPostProcessing(customer);
@@ -302,6 +303,7 @@ public class TsfCustomerService {
 
 		int custCnt = customerDao.createCustomer(customer);
 		customerDao.createCustomerSns(customer);
+		customerDao.saveBatchBirth(customer);
 
 		if (custCnt > 0) {
 			saveJoinPostProcessing(customer);
@@ -707,6 +709,8 @@ public class TsfCustomerService {
 		coreCustomerService.createCustomerHistory(customer);
 		// 2.CI 업데이트
 		int resultCnt = customerDao.updateCustomerCi(customer);
+		customerDao.saveBatchBirth(customer);
+
 		if (resultCnt > 0) {
 			isSuccess = true;
 		}
@@ -784,8 +788,9 @@ public class TsfCustomerService {
 		// 1. 이력쌓고
 		coreCustomerService.createCustomerHistory(customer);
 
-		// 2. 이름, 휴대전화 번호 저장
+		// 2. 이름, 휴대전화 번호, 생년월일 저장
 		int updateCnt = customerDao.updateCustomerAuth(customer);
+		customerDao.saveBatchBirth(customer);
 
 		boolean isSuccess = updateCnt > 0; // 변경 성공시 true
 

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

@@ -756,7 +756,7 @@ public class TsfGoodsService {
 
 		Collection<Goods> goodsList = new ArrayList<>();
 
-		if (cate.getContentsLoc().equals("SCM002") || cate.getContentsLoc().equals("SBM007") || cate.getContentsLoc().equals("SMM003") || cate.getContentsLoc().equals("SBM003")) { // 신상품인 경우
+		if (cate.getContentsLoc().equals("SCM002") || cate.getContentsLoc().equals("SBM007") || cate.getContentsLoc().equals("SMM003") || cate.getContentsLoc().equals("SBM003") || cate.getContentsLoc().equals("SBMM007")) { // 신상품인 경우
 			int maxRow = 20;
 			if (cate.getContentsLoc().equals("SBM003")) {
 				maxRow = 3;
@@ -801,7 +801,7 @@ public class TsfGoodsService {
 					temp.setBenefitArr(temp.getIcon().split(","));
 				}
 			}
-		} else if (cate.getContentsLoc().equals("SBM013")) {
+		} else if (cate.getContentsLoc().equals("SBM013") || cate.getContentsLoc().equals("SBMM013")) {
 //			GoodsSearch goodsSearch = new GoodsSearch();
 //			goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
 //			goodsSearch.setFormalGb(cate.getFormalGb());
@@ -811,6 +811,7 @@ public class TsfGoodsService {
 //			goodsSearch.setMaxRow(cate.getMaxRow());
 //			goodsSearch.setContentsLoc(cate.getContentsLoc());
 //			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
+			//todo 최신상품 불러오는거 만들어야함
 			log.info("SBM013 goodsList cate>>>{}", cate);
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 

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

@@ -23,6 +23,7 @@ import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscNaverPayService;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
+import com.style24.front.biz.dao.TsfCartDao;
 import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.front.biz.dao.TsfRendererDao;
 import com.style24.front.support.security.session.TsfSession;
@@ -77,6 +78,9 @@ public class TsfOrderService {
 
 	@Autowired
 	private Environment env;
+	
+	@Autowired
+	private TsfCartDao cartDao;
 
 	/**
 	 * 마이페이지 주문 정보 조회
@@ -548,7 +552,7 @@ public class TsfOrderService {
 		
 		// 장바구니 금액정보 체크
 		for (Order orderDetail : cartGoodsList) {
-			cartCurrPriceSum 			= cartCurrPriceSum + orderDetail.getCurrPrice();
+			cartCurrPriceSum 			= cartCurrPriceSum + orderDetail.getOrgCurrPrice();
 		}
 		
 		// 판매가비교
@@ -870,7 +874,7 @@ public class TsfOrderService {
 			param.setIfYn("F");			// 인터페이스 송부 실패
 		}
 
-		coreOrderDao.createInsurance(param);
+		//coreOrderDao.createInsurance(param);
 
 		return "SUCCESS";
 	}
@@ -909,4 +913,115 @@ public class TsfOrderService {
 
 		return "SUCCESS";
 	}
+	
+	/**
+	 * 장바구니정보 주문번호 이력 등록
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 05. 10
+	 */
+	@Transactional("shopTxnManager")
+	public String insertCartHstOrdNo(Order order) {
+
+		// cartsq
+		for (int i=0 ; i<order.getCartSqArr().length ; i++) {
+			Cart cart = new Cart();
+			cart.setOrdNo(order.getOrdNo());
+			cart.setCartSq(order.getCartSqArr()[i]);
+			cart.setRegNo(order.getCustNo());
+			
+			// 장바구니 이력등록
+			cartDao.insertCartHst(cart);
+		}
+
+		return "SUCCESS";
+	}
+	
+	/**
+	 * 장바구니정보 주문번호 삭제
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 05. 10
+	 */
+	@Transactional("shopTxnManager")
+	public String deleteCartOrdNo(Order order) {
+		
+		// 주문번호 존재할때만 실행
+		if (order.getOrdNo() > 0) {
+			// 장바구니 이력등록
+			Cart cart = new Cart();
+			cart.setOrdNo(order.getOrdNo());
+			
+			// 2021.05.10 주문완료 주문번호로 장바구니정보 삭제
+			cartDao.deleteCartOrdNo(cart);
+			
+			// 2021.05.10 주문완료 주문번호로 장바구니상세정보 삭제
+			cartDao.deleteCartDetailOrdNo(cart);
+		}
+
+		return "SUCCESS";
+	}
+	
+	/**
+	 * 보증보험정보 update
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 05. 10
+	 */
+	@Transactional("shopTxnManager")
+	public String updateInsurance(Order order) {
+		// 주문번호 존재할때만 실행
+		if (order.getOrdNo() > 0) {
+			// 보증보험 API 연동위한 정보조회
+			Collection<Order> goodsInfoList = orderDao.getGoodsInfoForInsurance(order);
+			
+			if (goodsInfoList.size() > 0) {
+				String[] goodsNameArr 		= new String[goodsInfoList.size()];
+				String[] goodsPriceArr 		= new String[goodsInfoList.size()];
+				String[] goodsQuantityArr 	= new String[goodsInfoList.size()];
+				
+				int realOrdAmt 				= 0;
+				int index 					= 0;
+				
+				for (Order goodsInfo : goodsInfoList) {
+					goodsNameArr[index] 		= goodsInfo.getGoodsNm();
+					goodsPriceArr[index] 		= String.valueOf(goodsInfo.getRealOrdAmt());
+					goodsQuantityArr[index] 	= String.valueOf(goodsInfo.getOrdQty());
+					
+					realOrdAmt = realOrdAmt + goodsInfo.getRealOrdAmt();
+					
+					if (index == 0) {
+						order.setBirthYmd(goodsInfo.getBirthGen());										// 생년월일 + 성별(남자 : 1, 여자 : 2)
+						order.setPayMeans(goodsInfo.getPayMeans());										// 무통장입금 or 계좌이체
+						order.setBankNm(goodsInfo.getBankNm());											// 은행명  >> PG 송부 후 result에서 값 입력하면됨
+						order.setOrdNm(goodsInfo.getOrdNm());											// 주문자명
+						order.setVaNo(goodsInfo.getVaNo());												// 가상계좌번호
+						order.setOrdPhnno(goodsInfo.getOrdPhnno());										// 주문자전화2 ("-" 포함)
+						order.setOrdEmail(goodsInfo.getOrdEmail());										// 주문자이메일
+						order.setRecipNm(goodsInfo.getRecipNm());										// 수령인명
+						order.setRecipPhnno(goodsInfo.getRecipPhnno());									// 수령인휴대폰번호
+						order.setRecipZipcode(goodsInfo.getRecipZipcode());								// 주문자우편번호
+						order.setRecipAddr(goodsInfo.getRecipBaseAddr() + goodsInfo.getRecipDtlAddr());	// 주문자주소
+						order.setCustNo(order.getCustNo());												// 고객번호
+					}
+						
+					index++;
+				}
+				
+				order.setItemNmArr(goodsNameArr);		// 상품명 배열
+				order.setGoodsPriceArr(goodsPriceArr);	// 상품별 가격 배열
+				order.setItemQtyArr(goodsQuantityArr);	// 상품별 수량 배열
+				order.setOrdNo(order.getOrdNo());		// 주문번호
+				order.setRealOrdAmt(realOrdAmt);		// 결제금액
+				
+				if (TscConstants.PayMeans.ACCOUNT_TRANSFER.value().equals(order.getPayMeans()) || TscConstants.PayMeans.BANK_DEPOSIT.value().equals(order.getPayMeans())) {
+					uSafeGuaranteeInsurance(order);
+				}
+			}
+		}
+
+		return "SUCCESS";
+	}
+	
+	
 }

+ 8 - 4
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -290,7 +290,7 @@ public class TsfDisplayController extends TsfBaseController {
 			brandMain.setCate4Srch(cate4Srch);
 
 			if ("C".equals(brandMain.getContentsYn())) {
-				if (contentsLoc.equals("SBM013")) {
+				if (contentsLoc.equals("SBM013") || contentsLoc.equals("SBMM013")) {
 					cate4Srch.setBrandGroupNo(brandMain.getBrandGroupNo());
 					cate4Srch.setMaxRow(50);
 					Collection<Goods> goodsList = goodsService.getContentsCategoryGoodsList(cate4Srch);
@@ -301,7 +301,7 @@ public class TsfDisplayController extends TsfBaseController {
 				cate4Srch.setBrandGroupNo(brandMain.getBrandGroupNo());
 				if (cate4Srch.getContentsLoc().equals("SBM008")) {
 					cate4Srch.setMaxRow(10);
-				} else if (cate4Srch.getContentsLoc().equals("SBM013")) {
+				} else if (cate4Srch.getContentsLoc().equals("SBM013") || cate4Srch.getContentsLoc().equals("SBMM013")) {
 					cate4Srch.setMaxRow(50);
 				} else {	// SBM007, SBM009
 					cate4Srch.setMaxRow(20);
@@ -315,10 +315,14 @@ public class TsfDisplayController extends TsfBaseController {
 			}
 
 			// 기획전 컨텐츠일때
-			if ("SBM011".equals(brandMain.getContentsLoc())) {
+			if ("SBM011".equals(brandMain.getContentsLoc()) || "SBMM011".equals(brandMain.getContentsLoc())) {
 				Plan plan = new Plan();
 				plan.setBrandGroupNo(Integer.parseInt(paramMap.get("brandGroupNo")));
-				plan.setMaxRow(6);
+				if("SBM011".equals(brandMain.getContentsLoc())){
+					plan.setMaxRow(6);
+				}else{
+					plan.setMaxRow(2);
+				}
 				plan.setFrontGb(TsfSession.getFrontGb());
 				plan.setSiteCd(TscConstants.Site.STYLE24.value());
 				brandMain.setPlanningList(planningService.getPlanningMainList(plan));

+ 10 - 53
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -738,6 +738,9 @@ public class TsfOrderController extends TsfBaseController {
 		// 3. 주문기본정보등록(주문접수)
 		coreOrderService.createPreOrder(order);
 		
+		// 4. 2021.05.10 장바구니정보 정보 삭제
+		orderService.insertCartHstOrdNo(order);
+		
 		log.info("order.getEntryNo()           ::: {}", order.getEntryNo());
 		log.info("order.getPgGb()              ::: {}", order.getPgGb());
 		log.info("order.getPayMeans()          ::: {}", order.getPayMeans());
@@ -754,7 +757,7 @@ public class TsfOrderController extends TsfBaseController {
 		log.info("order.getBirthYmd()          ::: {}", order.getBirthYmd());
 		log.info("order.getGiftMsg()           ::: {}", order.getGiftMsg());
 		
-		for(int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
+		for (int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
 			log.info("order.getFreegiftGoodsArr()  ::: {}", order.getFreegiftGoodsArr()[i]);
 		}
 
@@ -817,60 +820,14 @@ public class TsfOrderController extends TsfBaseController {
 		order.setPgGb(param.getPgGb());
 		order.setPayMeans(param.getPayMeans());
 		
-		// TODO 3. 주문정보 업데이트
+		// 3. 주문정보 업데이트
 		coreOrderService.updateOrderInfo(order);
 		
-		// TODO 4. 보증보험 API 연동
-		// orderDao.createInsurance(order);
-
-		/*
-		 * temp.setItemNmArr(goodsNameArr);			// 상품명 배열
-		 * temp.setGoodsPriceArr(goodsPriceArr);	// 상품별 가격 배열
-		 * temp.setItemQtyArr(goodsQuantityArr);	// 상품별 수량 배열
-		 * temp.setOrdNo(1);						// 주문번호
-		 * temp.setRealOrdAmt(32000);				// 결제금액
-		 * temp.setBirthYmd("198912021");			// 생년월일 + 성별(남자 : 1, 여자 : 2)
-		 * temp.setPayMeans(TscConstants.PayMeans.ACCOUNT_TRANSFER.value());		// 무통장입금 or 계좌이체
-		 * temp.setBankNm("신한은행");					// 은행명  >> PG 송부 후 result에서 값 입력하면됨
-		 * temp.setOrdNm("이태영");					// 주문자명
-		 * temp.setOrdTelno("");					// 주문자전화1 ("-" 포함)
-		 * temp.setOrdPhnno("010-7111-4489");		// 주문자전화2 ("-" 포함)
-		 * temp.setRecipZipcode("08755");			// 주문자우편번호
-		 * temp.setRecipAddr("서울시 관악구 신림동 1414-26 해피타워 501호");	// 주문자주소
-		 * temp.setOrdEmail("xodud1202@naver.com");	// 주문자이메일
-		 * temp.setRecipNm("이태영");					// 수령인명
-		 * temp.setRecipTelno("");					// 수령인전화번호
-		 * temp.setRecipPhnno("010-7111-4489");		// 수령인휴대폰번호
-		 * temp.setCustNo(100010);					// 고객번호
-		 * temp.setPgTid("20210423952698");			// temp.setVaNo("110242222222");  >> PG 송부 후 result에서 값 입력하면됨
-		 *  */
-		
-		String[] goodsNameArr 		= new String[2]; goodsNameArr[0] ="테스트1";goodsNameArr[1] = "테스트2";
-		String[] goodsPriceArr 		= new String[2]; goodsPriceArr[0] ="10000";goodsPriceArr[1] = "12000";
-		String[] goodsQuantityArr 	= new String[2]; goodsQuantityArr[0] ="2";goodsQuantityArr[1] = "3";
-		
-		order.setItemNmArr(goodsNameArr);		// 상품명 배열
-		order.setGoodsPriceArr(goodsPriceArr);	// 상품별 가격 배열
-		order.setItemQtyArr(goodsQuantityArr);	// 상품별 수량 배열
-		order.setOrdNo(order.getOrdNo());		// 주문번호
-		order.setRealOrdAmt(32000);				// 결제금액
-		order.setBirthYmd("198912021");			// 생년월일 + 성별(남자 : 1, 여자 : 2)
-		order.setPayMeans(TscConstants.PayMeans.ACCOUNT_TRANSFER.value());		// 무통장입금 or 계좌이체
-		order.setBankNm("신한은행");				// 은행명  >> PG 송부 후 result에서 값 입력하면됨
-		order.setOrdNm("이태영");					// 주문자명
-		order.setOrdTelno("");					// 주문자전화1 ("-" 포함)
-		order.setOrdPhnno("010-1234-5555");		// 주문자전화2 ("-" 포함)
-		order.setRecipZipcode("08755");			// 주문자우편번호
-		order.setRecipAddr("서울시 관악구 신림동 1414-11 타워타워 101호");	// 주문자주소
-		order.setOrdEmail("xodud1202@naver.com");	// 주문자이메일
-		order.setRecipNm("이태영");					// 수령인명
-		order.setRecipTelno("");					// 수령인전화번호
-		order.setRecipPhnno("010-1234-5555");		// 수령인휴대폰번호
-		order.setCustNo(100010);					// 고객번호
-		order.setVaNo("110242222222");				// 가상계좌번호
-
-		// uSafeGuaranteeInsurance(order);
-		orderService.uSafeGuaranteeInsurance(order);
+		// 4. 2021.05.10 장바구니정보 삭제
+		orderService.deleteCartOrdNo(order);
+		
+		// TODO 5. 2021.05.10 보증보험 API 연동
+		orderService.updateInsurance(order);
 		
 		// 2021.03.16 주문완료화면이동처리
 		mav.setViewName("redirect:/order/complete?ordNo=" + order.getOrdNo());

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

@@ -87,7 +87,7 @@ public class TsfPlanningController extends TsfBaseController {
 	 * @since 2021. 3. 5
 	 */
 	@GetMapping("/main/form")
-	public ModelAndView planningMainForm(@RequestParam(value = "cateNo", required = false) Integer cateNo) {
+	public ModelAndView planningMainForm(@RequestParam(value = "cateNo", required = false) Integer cateNo, @RequestParam(value = "brandGroupNo", required = false) Integer brandGroupNo) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("planning/PlanningMainForm"));
 
 		Plan plan = new Plan();
@@ -98,6 +98,7 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.addObject("cateList", planningService.getPlanningCategoryList(plan));
 
 		mav.addObject("cateNo", cateNo);
+		mav.addObject("brandGroupNo", brandGroupNo);
 
 		return mav;
 	}

+ 10 - 4
src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java

@@ -1,8 +1,10 @@
 package com.style24.front.support.config;
 
 import org.springframework.beans.factory.BeanClassLoaderAware;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.security.jackson2.SecurityJackson2Modules;
@@ -34,6 +36,9 @@ public class TsfRedisSessionConfig extends AbstractHttpSessionApplicationInitial
 
 	private ClassLoader classLoader;
 
+	@Autowired
+	private Environment env;
+
 	@Override
 	public void setBeanClassLoader(ClassLoader classLoader) {
 		this.classLoader = classLoader;
@@ -86,12 +91,13 @@ public class TsfRedisSessionConfig extends AbstractHttpSessionApplicationInitial
 		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
 		serializer.setCookiePath("/");
 		serializer.setUseBase64Encoding(false);
-//		serializer.setSameSite("NONE");
+		String active = env.getProperty("spring.profiles.active");
 		// TODO : SSL 적용 후 주석 풀고 테스트 해야함 2021-04-13
 		// SSL인증서 적용 시 주석 제거
-//		serializer.setUseSecureCookie(true);
-//		serializer.setSameSite("NONE");
-
+		if ("run".equals(active)) {
+			serializer.setUseSecureCookie(true);
+			serializer.setSameSite("NONE");
+		}
 		return serializer;
 	}
 

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

@@ -1183,4 +1183,26 @@
 		WHERE  CD.CART_SQ NOT IN (SELECT CART_SQ
 								  FROM   TB_CART CA)
 	</delete>
+	
+	<!-- 2021.05.10 주문완료 주문번호로 장바구니정보 삭제 -->
+	<delete id="deleteCartOrdNo" parameterType="Cart">
+		/* TsfCart.deleteCartOrdNo : 주문완료 주문번호로 장바구니정보 삭제 */
+		DELETE FROM TB_CART
+		WHERE  CART_SQ IN (
+			SELECT CART_SQ
+			FROM   TB_CART_HST
+			WHERE  ORD_NO = #{ordNo}
+		)
+	</delete>
+	
+	<!-- 2021.05.10 주문완료 주문번호로 장바구니상세정보 삭제 -->
+	<delete id="deleteCartDetailOrdNo"  parameterType="Cart">
+		/* TsfCart.deleteCartDetailOrdNo : 주문완료 주문번호로 장바구니상세정보 삭제 */
+		DELETE FROM TB_CART_DETAIL CD
+		WHERE  CART_SQ IN (
+			SELECT CART_SQ
+			FROM   TB_CART_HST
+			WHERE  ORD_NO = #{ordNo}
+		)
+	</delete>
 </mapper>

+ 24 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml

@@ -631,4 +631,28 @@
 		OR    B.SUM_REAL_ORD_AMT >= #{minBuyAmt}
 	</select>
 
+	<!--배치 생년월일 -->
+	<insert id="saveBatchBirth" parameterType="Customer">
+		/*TsfCustomer.saveBatchBirth*/
+		INSERT INTO TB_BATCH_BIRTH (
+		       CUST_NO
+		     , BIRTH_YMD
+		     , REG_DT
+		     , REG_NO
+		     , UPD_DT
+		     , UPD_NO
+		) VALUES (
+		       #{custNo}
+		     , #{birthYmd}
+		     , NOW()
+		     , #{custNo}
+		     , NOW()
+		     , #{custNo}
+		)
+		ON DUPLICATE KEY UPDATE
+		       BIRTH_YMD = #{birthYmd}
+		    ,  UPD_DT = NOW()
+		    ,  UPD_NO = #{updNo}
+	</insert>
+
 </mapper>

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

@@ -47,6 +47,7 @@
 													ON B.GOODS_CD = D.GOODS_CD 
 		WHERE 1=1
 		 AND A.CUST_NO = #{custNo}
+		 AND A.GFCD_AMT != 0
 		 <choose>
 		 	<when test="monthLength > 1">
 		 		AND DATE_FORMAT(A.REG_DT,'%Y%m') = #{searchDt}

+ 41 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -567,4 +567,45 @@
 		    , NOW()
 		)
 	</insert>
+	
+	<!-- 보증보험 API 연동위한 정보조회 -->
+	<select id="getGoodsInfoForInsurance" parameterType="Order" resultType="Order">
+		/* TsfOrder.getGoodsInfoForInsurance : 보증보험 API 연동위한 정보조회 */
+		SELECT G.GOODS_NM
+		     , OD.REAL_ORD_AMT
+		     , OD.ORD_QTY
+		     , O.ORD_NM
+		     , P.PAY_MEANS 
+		     , P.VA_BANK
+		     , P.VA_NM
+		     , P.VA_NO
+		     , FN_GET_CODE_NM('G940', P.VA_BANK) AS BANK_NM
+		     , P.PG_TID
+		     , O.ORD_PHNNO 
+		     , O.ORD_EMAIL 
+		     , INS.BIRTH_GEN 
+		     , DA.RECIP_NM 
+		     , DA.RECIP_PHNNO 
+		     , DA.RECIP_ZIPCODE 
+		     , DA.RECIP_BASE_ADDR 
+		     , DA.RECIP_DTL_ADDR 
+		FROM   TB_INSURANCE INS
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     OD.ORD_NO = INS.ORD_NO
+		INNER  JOIN TB_GOODS G
+		ON     OD.GOODS_CD = G.GOODS_CD
+		INNER  JOIN TB_PAYMENT P
+		ON     OD.ORD_NO = P.ORD_NO
+		INNER  JOIN TB_ORDER O
+		ON     P.ORD_NO = O.ORD_NO
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 
+		WHERE  1=1
+		AND    INS.IF_YN = 'N'
+		AND    P.PAY_GB = 'O'
+		AND    INS.ORD_NO = #{ordNo}
+	</select>
+	
+
+
 </mapper>

+ 9 - 8
src/main/resources/config/application-run.yml

@@ -27,31 +27,32 @@ spring:
 logging.config: classpath:log/logback-run.xml
 
 domain:
+    admin: //bos.style24.com
     front: //www.style24.com
-    image: //image.style24.com
-    uximage: //image.istyle24.com/Upload
+    image: //image.style24.com/Upload
+    uximage: //www.style24.com
 
 # SSL Server
 has-ssl: true
 
 upload:
     default:
-        target.path: /usr/local/data/style24
+        target.path: /files/data/style24
         max.size: 10
         allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.istyle24.com
+        view: //image.istyle24.com/Upload
     goods:
-        target.path: /usr/local/data/style24/productimage
+        target.path: /files/data/style24/ProductImage
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
         view: //image.istyle24.com/Upload/ProductImage
     image:
-        target.path:  /usr/local/data/style24
+        target.path: /files/data/style24
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //image.istyle24.com
+        view: //image.istyle24.com/Upload
 
-download.path: /usr/local/data
+download.path: /files/data/style24
 
 # SMTP
 mail:

+ 10 - 10
src/main/resources/config/application-style.yml

@@ -27,32 +27,32 @@ domain:
 
 upload:
     default:
-        target.path: /usr/local/data/style24
+        target.path: /files/data/style24
         max.size: 10
         allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.istyle24.com
+        view: //image.istyle24.com/Upload
     goods:
-        target.path: /usr/local/data/style24/productimage
+        target.path: /files/data/style24/ProductImage
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
         view: //image.istyle24.com/Upload/ProductImage
     image:
-        target.path: /usr/local/data/style24
+        target.path: /files/data/style24
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //image.istyle24.com
+        view: //image.istyle24.com/Upload
     excel:
-        target.path: /usr/local/data/style24/excel
+        target.path: /files/data/style24/excel
         max.size: 10
         allow.extension: xls|xlsx
-        view: //image.istyle24.com/excel
+        view: //image.istyle24.com/Upload/excel
     sample:
-        target.path: /usr/local/data/style24/sample
+        target.path: /files/data/style24/sample
         max.size: 10
         allow.extension: txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.style24.com/sample
+        view: //image.style24.com/Upload/sample
 
-download.path: /usr/local/data
+download.path: /files/data/style24
 
 # USAFE 보증보험 정보
 usafe.guarantee:

+ 2 - 1
src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html

@@ -90,7 +90,8 @@
 			/*]]>*/
 		</script>
 	</th:block>
-	
+
+	<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.validation.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.validation.js"></script>
 	<script src="/ux/sha512.min.js"></script>
 	<script>
 		String.prototype.hashCode = function() {

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

@@ -8,7 +8,7 @@
 <body>
 
 	<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
-	
+	<th:block th:replace="~{mob/common/fragments/ScriptsMob :: scripts}"></th:block>
 	<div class="app">
 		<!-- GNB -->
 		<th:block th:replace="~{mob/common/fragments/GnbMob :: gnb}"></th:block>
@@ -17,11 +17,11 @@
 		<!-- 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>
+		
 
 <script th:inline="javascript">
 /*<![CDATA[*/

+ 375 - 0
src/main/webapp/WEB-INF/views/mob/display/BestMainFormMob.html

@@ -0,0 +1,375 @@
+<!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  : BestMainFormMob.html
+ * @desc    : 베스트메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container dp">
+
+		<section class="content dp_best">
+			<div class="inner wide">
+				<div class="category_nav">
+					<ul id="cateListArea">
+						<li><button type="button" class="active" id="li0" onclick="fnBestListSearch(this,0);">전체</button></li>
+						<th:block th:each="item, stat : ${bestCateList}">
+							<li class="" th:id="${'li'+item.cateNo}"><button type="button" th:onclick="fnBestListSearch(this,[[${item.cateNo}]]);" th:text="${item.cateNm}">여성</button></li>
+						</th:block>
+					</ul>
+				</div>
+			</div>
+			<div class="inner bg_gray">
+				<div class="view_item">
+					<div class="count_wrap">
+						<div>
+							<p>지금 많이 <span>보고 있어요</span></p>
+						</div>
+						<div>
+							<ul class="dp_util">
+								<li><a href="#none" class="refresh">17:30 기준</a></li>
+							</ul>
+						</div>
+					</div>
+					<div class="swiper-container item_list">
+						<div class="swiper-wrapper">
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">508명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">320명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">1500명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">508명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">508명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+
+			<div class="inner">
+				<div class="best_item">
+					<h2 class="dp_subtitle">베스트 TOP 100</h2>
+					<div class="item_list">
+						<div class="count_wrap">
+							<ul class="dp_util">
+								<li>
+									<div class="open_categori sex">
+										<a id="filter">구매 성별 전체
+											<!--<option value="hide">구매 성별 전체</option>
+                                            <option value="Test_SELECT_OPTION_1" rel="icon-temperature">구매 성별 전체1</option>
+                                            <option value="Test_SELECT_OPTION_2">구매 성별 전체2</option>
+                                            <option value="Test_SELECT_OPTION_3">구매 성별 전체3</option>-->
+										</a>
+									</div>
+								</li>
+								<li>
+									<div class="open_categori age">
+										<a id="filter">구매 연령 전체
+											<!--<option value="hide">구매 연령전체</option>
+                                            <option value="Test_SELECT_OPTION_1" rel="icon-temperature">구매 연령전체1</option>
+                                            <option value="Test_SELECT_OPTION_2">구매 연령전체2</option>
+                                            <option value="Test_SELECT_OPTION_3">구매 연령전체3</option>-->
+										</a>
+									</div>
+								</li>
+							</ul>
+						</div>
+
+						<div id="infiniteContainer">
+							<div id="listBoxOuter" class="itemsGrp">
+								<ul class="productlist quarter" >
+								</ul>
+							</div>
+						</div>
+
+						<div class="list_content">
+							<div class="itemsGrp" id="listBox">
+							</div>
+						</div>
+
+
+						<div class="list_last" id="divLastPage" style="display: none;">마지막페이지 입니다.</div>
+					</div>
+				</div>
+			</div>
+		</section>
+
+		<!-- 카테고리 -->
+		<div class="category_box">
+			<div class="lap">
+				<div class="category_close">카테고리닫기</div>
+				<div class="category_list">
+					<!-- 카테고리 선택 -->
+					<div class="selcet_list">
+						<ul>
+							<li class="active"><a href="javascript:void(0)">구매성별 전체</a></li>
+							<li><a href="javascript:void(0)">구매성별1</a></li>
+							<li><a href="javascript:void(0)">구매성별2</a></li>
+							<li><a href="javascript:void(0)">구매성별3</a></li>
+							<li><a href="javascript:void(0)">구매성별4</a></li>
+						</ul>
+					</div>
+					<!-- //카테고리 선택 -->
+				</div>
+			</div>
+		</div>
+		<!-- //카테고리 -->
+
+		<!-- 210415_최신상품순 리스트 팝업 추가 -->
+		<div id="odDatePop1" class="popup_box odDatePop">
+			<div class="lap">
+				<div class="popup_close">카테고리닫기</div>
+				<div class="popup_head sr-only">
+					<h2 class="">기간 선택 팝업</h2>
+				</div>
+				<div class="popup_con">
+					<div class="button_list clear">
+						<button type="button" class="on"><span>구매성별 전체</span></button>
+						<button type="button"><span>구매성별1</span></button>
+						<button type="button"><span>구매성별2</span></button>
+						<button type="button"><span>구매성별3</span></button>
+						<button type="button"><span>구매성별4</span></button>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div id="odDatePop2" class="popup_box odDatePop">
+			<div class="lap">
+				<div class="popup_close">카테고리닫기</div>
+				<div class="popup_head sr-only">
+					<h2 class="">기간 선택 팝업</h2>
+				</div>
+				<div class="popup_con">
+					<div class="button_list clear">
+						<button type="button" class="on"><span>구매연령 전체</span></button>
+						<button type="button"><span>구매연령1</span></button>
+						<button type="button"><span>구매연령2</span></button>
+						<button type="button"><span>구매연령3</span></button>
+						<button type="button"><span>구매연령4</span></button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</main>
+
+	<form id="bestGoodsForm" name="bestGoodsForm">
+		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="cateNo" value=""/>
+		<input type="hidden" name="sortGb"/>
+	</form>
+
+	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+	<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+	<script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
+
+
+	<script th:inline="javascript">
+		/*<![CDATA[*/
+		var bestCateList = [[${bestCateList}]];
+		$(document).ready(function(){
+			$(document).on('click','.sub_category .more_btn',function(){
+				$(this).toggleClass('on');
+				$('.sub_category .cate_wrap').toggleClass('on');
+				if($(this).hasClass('on')){
+					$(this).find('span').text('접기');
+				}else{
+					$(this).find('span').text('더보기');
+				}
+			});
+
+			//카테고리
+			function category(){
+				var categoryOpen=$(".open_categori .select_dress");
+				var categoryClose=$(".category_box .category_close");
+				var categoryPop=$(".category_box");
+
+				categoryOpen.on("click",function(){
+					categoryPop.show();
+					categoryPop.addClass("active");
+					$("body").css({"overflow":"hidden"});
+				});
+
+				categoryClose.on("click",function(){
+					categoryPop.hide();
+					$("body").css({"overflow":"visible"});
+				});
+			}
+			category();
+
+			var dp_viewitem_slide = new Swiper('.view_item .swiper-container', {
+				slidesPerView: 'auto',
+				slidesPerView: 3,
+				spaceBetween: 8,
+				centerMode: true,
+			});
+
+			// 210415_팝업관련 추가
+			//기간 선택 팝업
+			$(document).on("click", ".open_categori.sex", function(){
+				$('#odDatePop1').show().addClass("active");
+				$("body").css({"overflow":"hidden"});
+			});
+			$(document).on("click", ".open_categori.age", function(){
+				$('#odDatePop2').show().addClass("active");
+				$("body").css({"overflow":"hidden"});
+			});
+			//팝업_닫기
+			$('.popup_close').on("click",function(){
+				$('.popup_box').hide().removeClass('active');
+				$("body").css({"overflow":"visible"});
+			});
+
+			//210510_수정 : 토스트 팝업 버튼 on 클래스 제어.
+			$(document).on('click','.popup_box .button_list button',function(){
+				$(this).siblings('.button_list button').removeClass('on');
+				$(this).addClass('on');
+			})
+
+			//210510_추가 : 토스트 팝업 button 클릭 시 팝업 닫기.
+			$(document).on('click','.popup_box.odDatePop .button_list button',function(){
+				$(this).parents('.popup_box.odDatePop').hide().removeClass('active');
+				$("body").css({"overflow":"visible"});
+			})
+
+			$(document).on('click','.popup_box.odDatePop .button_list button',function(){
+				$(this).parents('.popup_box.odDatePop').hide().removeClass('active');
+				$("body").css({"overflow":"visible"});
+			})
+		});
+
+		var fnBestListSearch = function (obj, cateNo){
+			if(gagajf.isNull(cateNo)){
+				cateNo = 0;
+			}
+
+			$.each($("#cateListArea").find('li'), function() {
+				$(this).removeClass();
+			});
+			$("#li"+cateNo).addClass('active');
+			$("#bestGoodsForm input[name=cateNo]").val(cateNo);
+			fnCategoryGoodsInfiniteScrollInit();
+			gagaInfiniteScroll.getHistory();
+		}
+
+		// 상품 검색
+		var fnGetInfiniteScrollDataList = function (pageNum){
+			$("#bestGoodsForm input[name=pageNo]").val(pageNum+1);
+			gagajf.ajaxFormSubmit("/display/best/main/goods/list", document.bestGoodsForm,  gagaInfiniteScroll.jsonToHtml);
+		}
+
+		var fnDrawInfiniteScrollData = function (result){
+			let totalCnt = result.totalCnt;
+			gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
+			var ithrCd = '';
+			var contentLoc = '';
+
+			if (result.dataList != null && result.dataList.length > 0) {
+				var goodsUrl = [[${@environment.getProperty('upload.goods.view')}]];;
+				let lastPage = result.paging.pageable.pageNo;
+				let endRow = result.endRow - result.paging.pageable.pageSize;
+				var htm = fnCreateGoodsList(result, ithrCd, contentLoc, goodsUrl, lastPage, endRow);
+				gagaInfiniteScroll.draw(htm);
+			}else{
+				if($("#bestGoodsForm input[name=pageNo]").val()==1){
+					$('#listBox').html('<li class="none">상품정보가 존재하지 않습니다.</li>');
+				}
+				$("#divLastPage").show();
+				gagaInfiniteScroll.draw('not');
+			}
+		}
+
+		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
+		$(window).on("pageshow", function(event) {
+			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
+				var historyData = sessionStorage.getItem(document.location.href);
+				if(historyData!=null){
+					historyData = JSON.parse(historyData);
+				}else{
+					historyData = {};
+				}
+				fnBestListSearch();
+			}else{
+				fnCategoryGoodsInfiniteScrollInit();
+
+				fnBestListSearch();
+			}
+		});
+
+		/*]]>*/
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 628 - 0
src/main/webapp/WEB-INF/views/mob/display/BrandMainFormMob.html

@@ -0,0 +1,628 @@
+<!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  : BrandMainFormMob.html
+ * @desc    : 브랜드메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<link rel="stylesheet" href="/ux/mo/css/layout_m.css">
+
+<th:block layout:fragment="content">
+<main role="" id="" class="container br">
+	<section class="content br_main">
+		<div class="inner sr-only">
+			<p class="br_subtitle">브랜드 메인</p>
+		</div>
+
+		<th:block th:if="${brandMainLayoutList}" th:each="brandMainLayoutData, mainStat : ${brandMainLayoutList}" th:with="contentsLoc=${#strings.replace(brandMainLayoutData.contentsLoc,'SBMM','')},contentsTitle=${brandMainLayoutData.contentsTitle}">
+			<th:block th:if="${brandMainLayoutData.ContentsList != null and !brandMainLayoutData.ContentsList.empty}">
+				<th:block th:if="${contentsLoc=='004'}">
+					<!-- 첫번째 슬라이드 -->
+					<div class="inner wide">
+						<div class="swiper-container submain_visual">
+							<div class="swiper-wrapper">
+								<th:block th:each="ContentsData, ContentsStat : ${brandMainLayoutData.ContentsList}">
+									<div class="swiper-slide">
+										<!-- 210506_추가 : 새창에 띄우기 -->
+										<a th:href="${ContentsData.strVar1}" th:target="${ContentsData.contentsType=='SELF'?'_self':'_blank'}" title="현재 창으로 열기">
+											<div class="img">
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt="">
+											</div>
+											<div class="txtWrap">
+												<p class="bMainTitle">
+													<input type="hidden" name="mainTitle" th:value="${ContentsData.strTitle1}"/>
+												</p>
+												<p class="txt_xs" th:text="${ContentsData.subText1}">신상 15% 쿠폰 할인</p>
+											</div>
+										</a>
+									</div>
+								</th:block>
+							</div>
+							<!-- Add Pagination -->
+							<div class="swiper-pagination"></div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='005'}">
+					<th:block th:each="ContentsData, ContentsStat : ${brandMainLayoutData.ContentsList}">
+						<!-- 정보 -->
+						<div class="inner">
+							<div class="br_top_info" id="brandDesc">
+								<p class="br_subtitle" th:text="${contentsTitle}"></p>
+								<p class="cate">
+									<input type="hidden" name="brandTitle" th:value="${ContentsData.strTitle1}">
+								</p>
+								<p class="desc">
+									<input type="hidden" name="brandNote" th:value="${ContentsData.subText1}"/>
+								</p>
+								<div class="btn_group_flex">
+									<div>
+										<button class="btn btn_default">브랜드 사이트<span></span></button>
+									</div>
+								</div>
+							</div>
+						</div>
+					</th:block>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='007'}">
+					<!-- 뉴아이템 슬라이드 -->
+					<div class="inner" th:if="${brandMainLayoutData.goodsList != null}">
+						<div class="new_item">
+							<p class="br_subtitle" th:text="${contentsTitle}"></p>
+							<div class="area_slider">
+								<div class="swiper-container">
+									<div class="swiper-wrapper">
+										<th:block th:each="goodsData, goodsStat : ${brandMainLayoutData.goodsList}">
+											<th:block th:if="${(goodsStat.index%4)==0 or goodsStat.first}">
+												<div class="swiper-slide">
+											</th:block>
+											<div class="item_prod">
+												<div class="item_state">
+													<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBMM007', planDtlSq=''">관심상품 추가</button>
+													<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBMM007');">
+														<div class="itemPic">
+															<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
+														</div>
+														<p class="itemBrand" th:text="${goodsData.brandGroupNm}"></p>
+														<div class="itemName" th:text="${goodsData.goodsFullNm}"></div>
+														<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}"></p>
+														<div class="itemComment" th:text="${goodsData.goodsTnm}"></div>
+													</a>
+												</div>
+											</div>
+											<th:block th:if="${(goodsStat.index%4)== 3 or goodsStat.last}">
+												<th:block th:utext="'</div>'"></th:block>
+											</th:block>
+										</th:block>
+									</div>
+									<!-- Add Pagination -->
+									<div class="swiper-pagination"></div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='006'}">
+					<!-- 배너 슬라이드 -->
+					<div class="inner wide" th:if="${brandMainLayoutData.ContentsList!=null}">
+						<div class="swiper-container br_second_slide">
+							<div class="swiper-wrapper">
+								<th:block th:each="ContentsData, ContentsStat : ${brandMainLayoutData.ContentsList}">
+									<div class="swiper-slide">
+										<a th:href="${ContentsData.strVar1}" target="_blank" title="새 창으로 열기">
+											<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt="">
+											<div class="s-text" id="bannerS">
+												<p class="bText">
+													<input type="hidden" name="bannerDesc" th:value="${ContentsData.strTitle1}">
+												</p>
+											</div>
+										</a>
+									</div>
+								</th:block>
+							</div>
+							<!-- Add Pagination -->
+							<div class="swiper-pagination"></div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='008'}">
+					<!-- 베스트아이템 슬라이드 -->
+					<div class="inner" th:if="${brandMainLayoutData.goodsList != null}">
+						<div class="pd_together best_item">
+							<p class="br_subtitle" th:text="${contentsTitle}">BEST ITEMS</p>
+							<div class="area_slider">
+								<!-- Swiper -->
+								<div class="swiper-container">
+									<div class="swiper-wrapper">
+										<th:block th:each="goodsData, goodsStat : ${brandMainLayoutData.goodsList}">
+											<div class="swiper-slide">
+												<div class="item_prod">
+													<div class="item_state">
+														<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBMM008', planDtlSq=''">관심상품 추가</button>
+														<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBMM008');">
+															<div class="shape" th:classappend="${goodsStat.count==1}?'ranker'"><span th:text="${goodsStat.index+1}"></span></div>
+															<div class="itemPic">
+																<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
+															</div>
+															<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
+															<div class="itemName"th:text="${goodsData.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+															<p class="itemPrice">
+																<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
+																[[${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}]]
+																<span class="itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+															</p>
+															<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을 느낌 물씬!!</div>
+														</a>
+													</div>
+												</div>
+											</div>
+										</th:block>
+									</div>
+									<!-- Add Pagination -->
+									<div class="swiper-pagination"></div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='010'}">
+					<!-- 룩북 슬라이드 -->
+					<div class="inner wide" th:if="${brandMainLayoutData.lookbookList != null and !brandMainLayoutData.lookbookList.empty}">
+						<div class="br_lookbook">
+							<p class="br_subtitle" th:text="${contentsTitle}"></p>
+							<div class="recommendedArea">
+								<!-- 상품이미지pic -->
+								<div class="area_slider pic_img">
+									<div class="swiper-container">
+										<div class="swiper-wrapper">
+											<th:block th:each="LookbookData, LookbookStat : ${brandMainLayoutData.lookbookList}">
+												<div class="swiper-slide">
+													<div class="page">
+														<div class="pic">
+															<span class="thumb" th:style="${'background-image:url(' + @environment.getProperty('domain.image') + LookbookData.sysFileNm + ');'}"></span>
+															<!-- 상품피커 -->
+															<th:block th:if="${LookbookData.lookbookGoodsList != null and !LookbookData.lookbookGoodsList.empty}" th:each="lookbookGoods, status : ${LookbookData.lookbookGoodsList}">
+																<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
+																	<div>
+																		<button type="button" th:onclick="fnGoodsPopup([[${lookbookGoods.sysImgNm}]],[[${lookbookGoods.brandGroupNm}]],[[${lookbookGoods.goodsFullNm}]],[[${lookbookGoods.listPrice}]],[[${lookbookGoods.currPrice}]],[[${lookbookGoods.dcRate}]],[[${lookbookGoods.goodsCd}]])"><span class="ico ico_picker"></span></button>
+																		<div class="pick_descr">
+																			<a href="javascript:void(0);"></a>
+																		</div>
+																	</div>
+																</div>
+															</th:block>
+															<!-- //상품피커 -->
+														</div>
+													</div>
+												</div>
+											</th:block>
+										</div>
+										<!-- Add Pagination -->
+										<div class="swiper-pagination"></div>
+									</div>
+								</div>
+								<!-- //상품이미지pic -->
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='009' or contentsLoc=='017' or contentsLoc=='018' or contentsLoc=='019'}">
+					<!-- 엠디픽 슬라이드 -->
+					<div class="inner" th:if="${brandMainLayoutData.goodsList != null}">
+						<div class="pd_together md_item">
+							<p class="br_subtitle" th:text="${contentsTitle}"></p>
+							<div class="area_slider">
+								<!-- Swiper -->
+								<div class="swiper-container">
+									<div class="swiper-wrapper">
+										<th:block th:each="goodsData, goodsStat : ${brandMainLayoutData.goodsList}">
+											<div class="swiper-slide">
+												<div class="item_prod">
+													<div class="item_state">
+														<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc=${contentsLoc}, planDtlSq=''">관심상품 추가</button>
+														<a href="javascript:void(0);" class="itemLink"  th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', [[${contentsLoc}]]);">
+															<div class="itemPic">
+																<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
+															</div>
+															<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
+															<div class="itemName" th:text="${goodsData.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+															<p class="itemPrice">
+																<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
+																[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')}]]
+																<span class="itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+															</p>
+															<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을 느낌 물씬!!</div>
+														</a>
+													</div>
+												</div>
+											</div>
+										</th:block>
+									</div>
+									<!-- Add Pagination -->
+									<div class="swiper-pagination"></div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='011'}">
+					<!-- 스페셜샵 슬라이드 -->
+					<div class="inner" th:if="${brandMainLayoutData.planningList != null}">
+						<div class="special_shop">
+							<p class="br_subtitle" th:text="${contentsTitle}"></p>
+							<div class="area_slider">
+								<div class="swiper-container">
+									<div class="swiper-wrapper">
+										<th:block th:each="planningData, planningStat : ${brandMainLayoutData.planningList}">
+											<div class="swiper-slide">
+												<div class="sp_item">
+													<div class="sp_img">
+														<img th:src="${@environment.getProperty('domain.image') + planningData.mainImg}" alt="">
+														<div class="s-text">
+															<p th:text="${planningData.planNm}">단 28시간 퓨어 아우터<br>최대 80%세일</p>
+															<p th:text="${planningData.dtlTitle1}">신상 아우터 7만원~</p>
+														</div>
+													</div>
+													<div class="sp_item">
+														<div class="itemsGrp rowtype">
+															<th:block th:if="${planningData.planningGoodsList != null and !planningData.planningGoodsList.empty}" th:each="planningGoods, status : ${planningData.planningGoodsList}">
+																<div class="item_prod">
+																	<div class="item_state">
+																		<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${planningGoods.goodsCd}]], '', '', 'SBMM011');">
+																			<div class="itemPic">
+																				<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + planningGoods.sysImgNm}">
+																			</div>
+																			<p class="itemBrand" th:text="${planningGoods.brandGroupNm}">BRAND NAME</p>
+																			<div class="itemName" th:text="${planningGoods.goodsNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+																			<p class="itemPrice">
+																				<span class="itemPrice_original" th:text="${#numbers.formatInteger(planningGoods.listPrice,1,'COMMA')}">89,000</span>
+																				[[${#numbers.formatInteger(planningGoods.currPrice,0,'COMMA')}]]
+																				<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>
+																		</a>
+																	</div>
+																</div>
+															</th:block>
+														</div>
+													</div>
+												</div>
+											</div>
+										</th:block>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='013'}">
+					<!-- brand_product -->
+					<div class="inner" th:if="${brandMainLayoutData.goodsList != null and !brandMainLayoutData.goodsList.empty}">
+						<div class="brand_product">
+							<p class="br_subtitle" th:text="${contentsTitle}"></p>
+							<th:block th:each="goodsData, goodsStat : ${brandMainLayoutData.goodsList}">
+								<th:block th:if="${(goodsStat.index%2)==0 or goodsStat.first}">
+									<div class="itemsGrp">
+								</th:block>
+								<div class="item_prod">
+									<div class="item_state">
+										<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBMM013', planDtlSq=''">관심상품 추가</button>
+										<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBMM013');">
+											<div class="itemPic">
+												<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
+											</div>
+											<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
+											<div class="itemName" th:text="${goodsData.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+											<p class="itemPrice">
+												<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
+												[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')}]]
+												<span class="itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+											</p>
+											<div class="itemcolorchip" th:if="${goodsData.colorArr != null}">
+												<th:block th:each="option, idx : ${goodsData.colorArr}" th:with="colorArray=${#strings.arraySplit(idx.current,':')}">
+													<span th:if="${colorArray[1]=='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';border:1px solid #aaa;'}" class="chip_color" th:value="${colorArray[0]}"></span>
+													<span th:if="${colorArray[1]!='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';'}" class="chip_color" th:value="${colorArray[0]}"></span>
+												</th:block>
+											</div>
+											<p class="itemBadge" th:if="${goodsData.benefitArr != null}">
+												<th:block th:each="option, idx : ${goodsData.benefitArr}" th:with="iconArray=${#strings.arraySplit(idx.current,':')}" >
+													<span class="badge13" th:if="${idx.index<3}" th:value="${iconArray[0]}" th:text="${iconArray[1]}"></span>
+												</th:block>
+											</p>
+											<div class="itemComment" th:text="${goodsData.goodsTnm}">#주문 폭주 상품</div>
+										</a>
+									</div>
+								</div>
+								<th:block th:if="${(goodsStat.index%2)== 1 or goodsStat.last}">
+									<th:block th:utext="'</div>'"></th:block>
+								</th:block>
+							</th:block>
+
+							<div class="btn_group_flex">
+								<div>
+									<button class="btn btn_default"  th:onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],[[${brandGroupInfo.cateGb}]]);">더보기</button>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='012'}">
+					<!-- 유튜브 슬라이드 -->
+					<div class="inner wide" th:if="${brandMainLayoutData.ContentsList != null}">
+						<div class="youtube">
+							<p class="br_subtitle" th:text="${contentsTitle}">STYLE24 TV</p>
+							<div class="swiper-container br_youtube_slide">
+								<div class="swiper-wrapper">
+									<th:block th:each="item, stat : ${brandMainLayoutData.ContentsList}">
+										<div class="swiper-slide">
+											<div class="movbox">
+												<iframe th:if="${item.strVar1=='Y'}" width="100%" height="100%" th:src="${'https://www.youtube.com/embed/'+item.strVar2+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+												<iframe th:if="${item.strVar1=='M'}" class="pd_mov"  th:src="${'http://v.kr.kollus.com/'+item.strVar2+'?enable_initialize_focus=false'}" allowfullscreen></iframe>
+											</div>
+										</div>
+									</th:block>
+								</div>
+								<!-- Add Pagination -->
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+
+			</th:block>
+		</th:block>
+	</section>
+</main>
+	<!-- 픽커모달 -->
+	<div class="modal fade" id="reco_pop" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
+
+		<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
+	</div>
+	<!-- //픽커모달 -->
+	<script th:inline="javascript">
+		var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
+
+		// 픽커모달
+		var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
+			$("#reco_pop .modal-dialog").remove();
+			var 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"><span class="sr_only">제품정보</span></h5>\n';
+			tag += '		</div>\n';
+			tag += '		<div class="modal-body">\n';
+			tag += '			<div class="itemsGrp rowtype">\n';
+			tag += '				<div class="item_prod">\n';
+			tag += '					<div class="item_state">\n';
+			tag += '						<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\''+obj7+'\',\'\',\'\')">\n';
+			tag += '							<div class="itemPic">\n';
+			tag += '								<img class="vLHTC pd_img" src="'+goodsImgUrl+'/'+obj1+'?RS=260" alt="">\n';
+			tag += '							</div>\n';
+			tag += '							<p class="itemBrand">'+obj2+'</p>\n';
+			tag += '							<div class="itemName">'+obj3+'</div>\n';
+			tag += '							<p class="itemPrice">'+obj5.addComma()+'</p>\n';
+			tag += '						</a>\n';
+			tag += '					</div>\n';
+			tag += '				</div>\n';
+			tag += '			</div>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '</div>\n';
+
+			$("#reco_pop").append(tag);
+			$('#reco_pop').modal("show");
+		}
+
+		$(document).ready(function () {
+			$(document).on('click','.item_picker',function(e){
+				//$("#reco_pop").modal("show");
+				$("body").addClass("recoPop");
+				return false;
+			});
+			$(document).on('click','#reco_pop .close-modal',function(e){
+				$("body").removeClass("recoPop");
+				return false;
+			});
+
+			var spc = $('.swiper-pagination-current');
+			var spt = $('.swiper-pagination-total');
+			setInterval(function(){
+				for(var i=0; i<spc.length; i++){
+					if(spc[i].innerText.length < 2){
+						var itNum = spc[i].innerText.toString();
+						spc[i].innerText = 0+itNum;
+					}
+				}
+				for(var i=0; i<spt.length; i++){
+					if(spt[i].innerText.length < 2){
+						var itNum2 = spt[i].innerText.toString();
+						spt[i].innerText = 0+itNum2;
+					}
+				}
+			}, 10);
+
+
+			var clNum = 0;
+			$(document).on('click', '.br .pnb_mo > button',function(e){
+				if(clNum === 0){
+					$('.br .pnb_mo > button').css("background", "url(/images/mo/ico_btn_narrow.png) center top/1.8rem 2.0rem no-repeat");
+					clNum = 1;
+				} else {
+					$('.br .pnb_mo > button').css("background", "url(/images/mo/ico_btn_expand.png) center top/1.8rem 2.0rem no-repeat");
+					clNum = 0;
+				}
+			});
+		});
+
+		// 서브비주얼 슬라이드
+		var myArray = ["01", "02", "03"];
+		var submainVisualSwiper = new Swiper('.swiper-container.submain_visual', {
+			//210414_자동롤링 추가
+			autoplay : {
+				delay : 3000,   // 시간 설정
+			},
+			pagination: {
+				el: '.swiper-pagination',
+				type: 'fraction',
+				//renderCustom: function (swiper, current, total) {
+				//	return current + ' of ' + total;
+				//}
+			}
+		});
+
+		//  이미지배너 슬라이드
+		var imgBannerSwiper = new Swiper('.swiper-container.br_second_slide', {
+			//210414_자동롤링 추가
+			autoplay : {
+				delay : 3000,   // 시간 설정
+			},
+			pagination: {
+				el: '.swiper-pagination',
+			},
+		});
+
+		// 뉴아이템 슬라이드
+		var newItemSwiper = new Swiper('.new_item .area_slider .swiper-container', {
+			slidesPerView: 1,
+			pagination: {
+				el: '.swiper-pagination',
+			},
+		});
+
+		// 베스트아이템 슬라이드
+		var bestItemSwiper = new Swiper('.best_item .area_slider .swiper-container', {
+			slidesPerView: 2,
+			spaceBetween: 8,
+		});
+
+		// 엠디픽 슬라이드
+		var mdItemSwiper = new Swiper('.md_item .area_slider .swiper-container', {
+			slidesPerView: 2,
+			spaceBetween: 8,
+		});
+
+		// 스페셜샵 슬라이드
+		var specialShopSwiper = new Swiper('.special_shop .area_slider .swiper-container', {
+			slidesPerView: 1,
+			spaceBetween: 10,
+		});
+
+		// 룩북 슬라이드
+		var rcmdPicimgSwiper = new Swiper('.recommendedArea .area_slider .swiper-container', {
+			slidesPerView: 1,
+			spaceBetween: 0,
+			pagination: {
+				el: '.swiper-pagination',
+				type: 'fraction',
+			},
+		});
+
+		// 유튜브 슬라이드
+		var swiperYoutu = new Swiper('.swiper-container.br_youtube_slide', {
+			pagination: {
+				el: '.swiper-pagination',
+			},
+		});
+
+		// 브랜드메인 배너 <br> 처리
+		$('.bMainTitle').each(function (){
+			let tag = '';
+			if(!gagajf.isNull($(this).find("input[name=mainTitle]").val())){
+				var brText = $(this).find("input[name=mainTitle]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>").replaceAll("<br/>", "<br>");
+				if(brText.indexOf('<br>') > -1){
+					var reText = brText.split("<br>");
+					tag += reText[0];
+					tag += '<br>';
+					tag += reText[1];
+				}else{
+					tag += brText;
+				}
+				$(this).append(tag);
+			}
+		});
+
+		// 브랜드소개 <br> 처리
+		if(!gagajf.isNull($("#brandDesc").find("input[name=brandTitle]").val())){
+			var brandDesc = $("#brandDesc").find("input[name=brandTitle]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
+			if(!gagajf.isNull(brandDesc)){
+				if(brandDesc.indexOf('<br>') > -1){
+					let tag = '';
+					var reText = brandDesc.split("<br>");
+					tag += reText[0];
+					tag += '<br>';
+					tag += reText[1];
+					$("#brandDesc .cate").append(tag);
+				}else{
+					let tag = '';
+					tag += brandDesc;
+					$("#brandDesc .cate").append(tag);
+				}
+			}
+		}
+
+		if(!gagajf.isNull($("#brandDesc").find("input[name=brandNote]").val())){
+			var brandDesc = $("#brandDesc").find("input[name=brandNote]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
+			if(!gagajf.isNull(brandDesc)){
+				if(brandDesc.indexOf('<br>') > -1){
+					let tag = '';
+					var reText = brandDesc.split("<br>");
+					tag += reText[0];
+					tag += '<br>';
+					tag += reText[1];
+					$("#brandDesc .desc").append(tag);
+				}else{
+					let tag = '';
+					tag += brandDesc;
+					$("#brandDesc .desc").append(tag);
+				}
+			}
+		}
+
+		// 배너 슬라이더 <br> 처리
+		$('.bText').each(function (){
+			let tag = '';
+			if(!gagajf.isNull($(this).find("input[name=bannerDesc]").val())){
+				var brText = $(this).find("input[name=bannerDesc]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>").replaceAll("<br/>", "<br>");
+				if(brText.indexOf('<br>') > -1){
+					var reText = brText.split("<br>");
+					tag += reText[0];
+					tag += '</p>';
+					tag += '<p>';
+					tag += reText[1];
+					tag += '</p>';
+				}else{
+					tag += brText;
+				}
+				$(this).append(tag);
+			}
+		});
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 171 - 0
src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html

@@ -0,0 +1,171 @@
+<!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  : CategoryMainFormMob.html
+ * @desc    : 카테고리메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container dp">
+		<section class="content dp_submain">
+			<th:block th:if="${cateMainLayoutList}" th:each="mainLayoutData, mainStat : ${cateMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SCM','')},contentsTitle=${mainLayoutData.contentsTitle}">
+				<th:block th:if="${contentsLoc=='001'}">
+					<div class="inner wide" th:if="${planningList != null and !planningList.empty}">
+						<div class="submain_visual">
+							<div class="swiper-container">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${planningList}">
+										<div class="img">
+											<img th:src="${@environment.getProperty('domain.image') + '/' + item.imgPath1}" alt="">
+										</div>
+										<div class="txtWrap">
+											<p th:text="${item.strTitle1}">겨울정기 가격제안전<br>겨울정기 가격</p>
+											<p class="txt_xs" th:text="${item.subText1}">나만의 겨울 스타일 찾기</p>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='004'}">
+					<div class="inner bg_gray">
+						<div class="sub_category">
+							<div class="cate_wrap">
+							</div>
+							<!-- 카테고리 3줄 이상일 경우 노출 -->
+							<div class="more_btn">
+								<button type="button" class="btn"><span>더보기</span></button>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='002'}">
+					<div class="inner wide" th:if="${newGoodsList != null}">
+						<div class="new_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">신상품</h2>
+							<div class="swiper-container item_list">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${newGoodsList}">
+										<div class="item_prod" th:if="${status.count<21}">
+											<div class="item_state">
+												<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SCM001');">
+													<div class="itemPic">
+														<img alt="BLACK-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" >
+														<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SCM001', planDtlSq=''">관심상품 추가</button>
+													</div>
+													<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+													<div class="itemName" th:text="${item.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+													<p class="itemPrice" th:text="${#numbers.formatInteger(item.currPrice,3,'POINT')}">80,100</p>
+													<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='003'}">
+					<div class="inner" th:if="${bestGoodsList != null}">
+						<div class="best_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">베스트 상품</h2>
+							<div class="item_list">
+								<div class="itemsGrp">
+									<div class=" item_prod" th:each="item, status : ${bestGoodsList}">
+										<div class="item_state">
+											<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SCM002');">
+												<div class="shape" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}"></span></div>
+												<div class=" itemPic">
+													<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" >
+													<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SCM002', planDtlSq=''">관심상품 추가</button>
+												</div>
+												<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+												<div class=" itemName" th:text="${item.goodsFullNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
+												<p class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'POINT')}">89,000</p>
+												<p class="itemPrice">[[${#numbers.formatInteger(item.currPrice,1,'COMMA')}]]
+													<span class=" itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+												</p>
+												<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+											</a>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+		</th:block>
+		</section>
+	</main>
+
+	<script th:inline="javascript">
+		$(document).ready(function () {
+			fnSetCategory1Depts();
+
+			var swiper = new Swiper('.submain_visual .swiper-container', {
+				observer: true,
+				observeParents: true,
+				pagination: {
+					el: '.submain_visual .swiper-pagination',
+					type: 'fraction',
+				},
+			});
+
+			$(document).on('click','.sub_category .more_btn',function(){
+				$(this).toggleClass('on');
+				$('.sub_category .cate_wrap').toggleClass('on');
+				if($(this).hasClass('on')){
+					$(this).find('span').text('접기');
+				}else{
+					$(this).find('span').text('더보기');
+				}
+			});
+
+			var dp_newitem_slide = new Swiper('.new_item .swiper-container', {
+				slidesPerView: 'auto',
+				spaceBetween: 8,
+				centerMode: true,
+			});
+		});
+
+		// 카테고리1Depts 설정
+		var fnSetCategory1Depts = function() {
+			let allCate = [[${allCateList}]];
+			$.each(allCate, function(idx1, cate1) {
+				if ([[${params.cate1No}]] == cate1.cate1No) {
+					let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
+					if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+						$.each(cate1.cate2List, function(idx2, cate2) {
+							tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						});
+					}
+					$('.cate_wrap').html(tag);
+				}
+			});
+		}
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 170 - 0
src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html

@@ -0,0 +1,170 @@
+<!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  : OutletMainFormMob.html
+ * @desc    : 아울렛메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container dp">
+		<section class="content dp_outlets">
+			<th:block th:if="${outletMainLayoutList}" th:each="mainLayoutData, mainStat : ${outletMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SOM','')},contentsTitle=${mainLayoutData.contentsTitle}">
+				<th:block th:if="${contentsLoc=='001'}">
+					<div class="inner wide" th:if="${planningList != null and !planningList.empty}">
+						<div class="outlets_visual">
+							<div class="swiper-container">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${planningList}">
+										<div class="img">
+											<img th:src="${@environment.getProperty('domain.image') + item.imgPath1}" alt="">
+										</div>
+										<div class="txtWrap">
+											<p th:text="${item.strTitle1}">오랫동안 기다려온<br>겨울세일 시작</p>
+											<p class="txt_xs" th:text="${item.subText1}">재고있을 때 미리 득템</p>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='004'}">
+					<div class="inner wide bg_gray">
+						<div class="dp_cate_list">
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='002'}">
+					<div class="inner wide" th:if="${mdPickGoodsList != null}">
+						<div class="md_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">MD가 추천하는 아울렛 아이템</h2>
+							<div class="swiper-container item_list">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${mdPickGoodsList}">
+										<div class="item_prod">
+											<div class="item_state">
+												<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM002', planDtlSq=''">관심상품 추가</button>
+												<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM002');">
+													<div class="itemPic">
+														<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" alt="">
+													</div>
+													<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+													<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+													<p class="itemPrice">
+														<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>
+														[[${#numbers.formatInteger(item.currPrice,0,'COMMA')}]]
+														<span class="itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+													</p>
+													<div class="itemComment" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='003'}">
+					<div class="inner" th:if="${bestGoodsList != null}">
+						<div class="best_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">베스트 상품</h2>
+							<div class="item_list">
+								<div class="itemsGrp">
+									<div class="item_prod" th:each="item, status : ${bestGoodsList}">
+										<div class="item_state">
+											<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM003', planDtlSq=''">관심상품 추가</button>
+											<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM003');">
+												<div class="shape" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
+												<div class="itemPic">
+													<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" alt="">
+												</div>
+												<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+												<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+												<p class="itemPrice">
+													<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>
+													[[${#numbers.formatInteger(item.currPrice,0,'COMMA')}]]
+													<span class="itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+												</p>
+												<div class="itemComment" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+											</a>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+			</th:block>
+		</section>
+	</main>
+
+	<script th:inline="javascript">
+		$(document).ready(function(){
+			fnSetCategory1Depts();
+
+			$(document).on('click','.sub_category .more_btn',function(){
+				$(this).toggleClass('on');
+				$('.sub_category .cate_wrap').toggleClass('on');
+				if($(this).hasClass('on')){
+					$(this).find('span').text('접기');
+				}else{
+					$(this).find('span').text('더보기');
+				}
+			});
+
+			var swiper = new Swiper('.outlets_visual .swiper-container', {
+				observer: true,
+				observeParents: true,
+				pagination: {
+					el: '.outlets_visual .swiper-pagination',
+					type: 'fraction',
+				},
+				autoplay : {
+					delay : 5000,   // 시간 설정
+				},
+			});
+
+			var dp_mditem_slide = new Swiper('.md_item .swiper-container', {
+				slidesPerView: 2,
+				spaceBetween: 8,
+				centerMode: true,
+			});
+		});
+
+		// 카테고리1Depts 설정
+		var fnSetCategory1Depts = function() {
+			let allCate = [[${allCateList}]];
+			let cateGb = 'G032_101';
+			let formalGb = 'G009_20';
+			let tag = '';
+			tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cateGb + '\',\'\',\'\',\'\',\'\',\'\',\'' + formalGb + '\');">전체</a>\n';
+			$.each(allCate, function(allCateIdx, allCateItem) {
+				tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + allCateItem.cateGb + '\',' + allCateItem.cate1No + ',\'\',\'\',\'\',\'\',\'' + formalGb + '\');">' + allCateItem.cate1Nm + '</a>\n';
+			});
+			$('.dp_cate_list').html(tag);
+		}
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 325 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningEventPollFormMob.html

@@ -0,0 +1,325 @@
+<!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  : PlanningEventPollFormMob.html
+ * @desc    : 설문조사 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main role="" id="" class="container ev">
+			<section class="content renew">
+				<div class="inner">
+					<div class="promotion_tit">
+						<h3 th:text="${pollInfo.pollTitle}"></h3>
+						<div class="period">
+							<span th:text="${pollInfo.pollStdt}"></span> - <span th:text="${pollInfo.pollEddt}"></span>
+						</div> 
+						<!-- <button type="button" class="share_btn"><img src="/images/mo/ico_share_btn.png" alt="공유" /></button> -->
+					</div>
+				</div>
+				<div class="inner wide">
+					<div class="survey_wrap">
+						<div class="survey_con">
+							<form action="">
+							<th:block th:each="pollData, pollStat : ${pollList}">
+								<div class="survey_row q1" th:if="${pollData.pollQtype == '10'}">
+									<h4 th:text=${pollData.pollQtitle}></h4>
+									<div class="answer">
+										<div class="form_field">
+											<ul class="clear" th:id="${pollData.pollQsq+'_'+(pollStat.index+1)}">
+												<li th:if="${pollData.pollQval1 != null && pollData.pollQval1 != ''}">
+													<th:block th:if="${pollData.pollQval1 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-1-'+${pollData.pollQsq}" th:value="${pollData.pollQval1}" ><label th:for="'rdi-1-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval1}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval1 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-1-'+${pollData.pollQsq}" th:value="${pollData.pollQval1}" class="etc"><label th:for="'rdi-1-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval1}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval2 != null && pollData.pollQval2 != ''}">
+													<th:block th:if="${pollData.pollQval2 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-2-'+${pollData.pollQsq}" th:value="${pollData.pollQval2}" ><label th:for="'rdi-2-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval2}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval2 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-2-'+${pollData.pollQsq}" th:value="${pollData.pollQval2}" class="etc"><label th:for="'rdi-2-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval2}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval3 != null && pollData.pollQval3 != ''}">
+													<th:block th:if="${pollData.pollQval3 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-3-'+${pollData.pollQsq}" th:value="${pollData.pollQval3}" ><label th:for="'rdi-3-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval3}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval3 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-3-'+${pollData.pollQsq}" th:value="${pollData.pollQval3}" class="etc"><label th:for="'rdi-3-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval3}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval4 != null && pollData.pollQval4 != ''}">
+													<th:block th:if="${pollData.pollQval4 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-4-'+${pollData.pollQsq}" th:value="${pollData.pollQval4}" ><label th:for="'rdi-4-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval4}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval4 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-4-'+${pollData.pollQsq}" th:value="${pollData.pollQval4}" class="etc"><label th:for="'rdi-4-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval4}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval5 != null && pollData.pollQval5 != ''}">
+													<th:block th:if="${pollData.pollQval5 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-5-'+${pollData.pollQsq}" th:value="${pollData.pollQval5}" ><label th:for="'rdi-5-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval5}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval5 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-5-'+${pollData.pollQsq}" th:value="${pollData.pollQval5}" class="etc"><label th:for="'rdi-5-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval5}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval6 != null && pollData.pollQval6 != ''}">
+													<th:block th:if="${pollData.pollQval6 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-6-'+${pollData.pollQsq}" th:value="${pollData.pollQval6}"><label th:for="'rdi-6-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval6}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval6 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-6-'+${pollData.pollQsq}" th:value="${pollData.pollQval6}" class="etc"><label th:for="'rdi-6-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval6}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval7 != null && pollData.pollQval7 != ''}">
+													<th:block th:if="${pollData.pollQval7 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-7-'+${pollData.pollQsq}" th:value="${pollData.pollQval7}" ><label th:for="'rdi-7-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval7}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval7 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-7-'+${pollData.pollQsq}" th:value="${pollData.pollQval7}" class="etc"><label th:for="'rdi-7-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval7}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval8 != null && pollData.pollQval8 != ''}">
+													<th:block th:if="${pollData.pollQval8 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-8-'+${pollData.pollQsq}" th:value="${pollData.pollQval8}"><label th:for="'rdi-8-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval8}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval8 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-8-'+${pollData.pollQsq}" th:value="${pollData.pollQval8}" class="etc"><label th:for="'rdi-8-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval8}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval9 != null && pollData.pollQval9 != ''}">
+													<th:block th:if="${pollData.pollQval9 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-9-'+${pollData.pollQsq}" th:value="${pollData.pollQval9}" ><label th:for="'rdi-9-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval9}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval9 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-9-'+${pollData.pollQsq}" th:value="${pollData.pollQval9}"class="etc"><label th:for="'rdi-9-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval9}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+												<li th:if="${pollData.pollQval10 != null && pollData.pollQval10 != ''}">
+													<th:block th:if="${pollData.pollQval10 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-10-'+${pollData.pollQsq}" th:value="${pollData.pollQval10}"><label th:for="'rdi-10-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval10}"></span></label>
+													</th:block>
+													<th:block th:unless="${pollData.pollQval10 != '기타'}">
+														<input type="radio" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'rdi-10-'+${pollData.pollQsq}" th:value="${pollData.pollQval10}" class="etc"><label th:for="'rdi-10-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval10}"></span></label>
+														<textarea th:name="'etc_input_'+${pollData.pollQsq}" id=""></textarea>
+													</th:block>
+												</li>
+											</ul>
+										</div>
+									</div>
+								</div>
+								<div class="survey_row q2" th:if="${pollData.pollQtype == '20'}">
+									<h4 th:text=${pollData.pollQtitle}></h4>
+									<div class="answer">
+										<div class="form_field">
+											<ul class="clear" th:id="${pollData.pollQsq+'_'+(pollStat.index+1)}">
+												<li th:if="${pollData.pollQval1 != null && pollData.pollQval1 != ''}">
+													<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-1-'+${pollData.pollQsq}" th:value="${pollData.pollQval1}"><label th:for="'chk-1-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval1}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval2 != null && pollData.pollQval2 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-2-'+${pollData.pollQsq}" th:value="${pollData.pollQval2}"><label th:for="'chk-2-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval2}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval3 != null && pollData.pollQval3 != ''}">
+														<input type="checkbox"  th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-3-'+${pollData.pollQsq}" th:value="${pollData.pollQval3}"><label th:for="'chk-3-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval3}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval4 != null && pollData.pollQval4 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-4-'+${pollData.pollQsq}" th:value="${pollData.pollQval4}"><label th:for="'chk-4-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval4}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval5 != null && pollData.pollQval5 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-5-'+${pollData.pollQsq}" th:value="${pollData.pollQval5}"><label th:for="'chk-5-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval5}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval6 != null && pollData.pollQval6 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-6-'+${pollData.pollQsq}" th:value="${pollData.pollQval6}"><label th:for="'chk-6-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval6}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval7 != null && pollData.pollQval7 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-7-'+${pollData.pollQsq}" th:value="${pollData.pollQval7}"><label th:for="'chk-7-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval7}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval8 != null && pollData.pollQval8 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-8-'+${pollData.pollQsq}" th:value="${pollData.pollQval8}"><label th:for="'chk-8-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval8}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval9 != null && pollData.pollQval9 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-9-'+${pollData.pollQsq}" th:value="${pollData.pollQval9}"><label th:for="'chk-9-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval9}"></span></label>
+												</li>
+												<li th:if="${pollData.pollQval10 != null && pollData.pollQval10 != ''}">
+														<input type="checkbox" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="'chk-10-'+${pollData.pollQsq}" th:value="${pollData.pollQval10}"><label th:for="'chk-10-'+${pollData.pollQsq}"><span th:text="${pollData.pollQval10}"></span></label>
+												</li>
+											</ul>
+										</div>
+									</div>
+								</div>
+
+								<div class="survey_row q4" th:if="${pollData.pollQtype == '40'}">
+									<h4 th:text=${pollData.pollQtitle}></h4> <!-- 210414_수정 : br태그 삭제 -->
+									<div class="answer">
+										<textarea class="doc_ans" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="${pollData.pollQsq+'_'+(pollStat.index+1)}" placeholder="1,000자 이내로 입력해 주세요." style="resize: none;"></textarea>
+										<p class="txt_cnt"><span id="ans_cnt" class="c_primary">0</span>/1,000</p>
+									</div>
+								</div>
+								<div class="survey_row q3" th:if="${pollData.pollQtype == '30'}">
+								<h4 th:text=${pollData.pollQtitle}></h4> <!-- 210414_수정 : br태그 삭제 -->
+									<div class="answer">
+										<textarea class="q4_ans" name="" id="" th:name="${pollData.pollQsq+'_'+(pollStat.index+1)}" th:id="${pollData.pollQsq+'_'+(pollStat.index+1)}"></textarea>
+									</div>
+							
+								</div>
+								</th:block>
+								
+								<div class="btn_wrap">
+									<button type="button" id="btn_survey_success" class="btn btn_dark" onclick="fnSubmitPoll()">응답 완료</button>
+								</div>
+							</form>
+						</div>
+					</div>
+				</div>
+			</section>
+		</main>
+<script th:inline="javascript">
+let pollList = [[${pollList}]];
+
+var fnSubmitPoll = function () {
+	//let pollQsq_20 = new Array();
+	let pollQsq_10 = '';
+	let pollQsq_20 = '';
+	let pollQsq_30 = '';
+	let pollQsq_40 = '';
+	
+	
+	// 유효성검사
+	for (let i = 0; i < pollList.length; i++) {
+		let type = pollList[i].pollQtype;
+		let pollQsq = pollList[i].pollQsq;
+		
+		
+		if(type == "10"){
+			if($('input:radio[name='+pollQsq+'_'+(i+1)+']').is(':checked')== false){
+				mcxDialog.alert("Q"+(i+1)+"항목은 필수항목입니다.");
+				return;
+			}
+			if($('input:radio[name='+pollQsq+'_'+(i+1)+']:checked').val() == '기타'){
+				if($('textarea[name=etc_input_'+pollQsq+']').val()==''){
+					mcxDialog.alert("Q"+(i+1)+"기타 내용을 입력해주세요.");
+					return;
+				}
+			}
+			if ($('input:radio[name='+pollQsq+'_'+(i+1)+']:checked').val() == '기타') {
+				pollQsq_10 += pollQsq +'-'+$('textarea[name=etc'+pollQsq+']').val() + '/';
+			}else{
+				pollQsq_10 += pollQsq +'-'+$('input:radio[name='+pollQsq+'_'+(i+1)+']:checked').val() + '/';
+			}
+		}
+		if(type == "20"){
+			if($('input:checkbox[name='+pollQsq+'_'+(i+1)+']').is(':checked')== false){
+				mcxDialog.alert("Q"+(i+1)+"항목은 필수항목입니다.");
+				return;
+			}else{
+				let chk = $('input:checkbox[name='+pollQsq+'_'+(i+1)+']:checked');
+				pollQsq_20 += pollQsq + '-' ;
+				for(let i=0; i< chk.length; i++){
+					pollQsq_20 += chk.eq(i).val();
+					if (i != chk.length-1) {
+						pollQsq_20 += ',';
+					}
+				}
+				pollQsq_20 += '/' ;
+			}
+		}
+		if(type == "30"){
+			if($('textarea[name='+pollQsq+'_'+(i+1)+']').val() == ''){
+				mcxDialog.alert("Q"+(i+1)+"항목은 필수항목입니다.");
+				return;
+			}else{
+				pollQsq_30 += pollQsq +'-'+$('textarea[name='+pollQsq+'_'+(i+1)+']').val() + '/';
+			}
+		}
+		if(type == "40"){
+			if($('textarea[name='+pollQsq+'_'+(i+1)+']').val() == ''){
+				mcxDialog.alert("Q"+(i+1)+"항목은 필수항목입니다.");
+				return;
+			}else{
+				//max1.set(pollQsq,$('textarea[name='+pollQsq+'_'+(i+1)+']').val());
+				pollQsq_40 += pollQsq +'-'+$('textarea[name='+pollQsq+'_'+(i+1)+']').val() + '/';
+			}
+		}
+	}
+	var data = {pollQsq_10 : pollQsq_10,
+				pollQsq_20 : pollQsq_20,
+			    pollQsq_30 : pollQsq_30,
+			    pollQsq_40 : pollQsq_40};
+	
+
+	var jsonData = JSON.stringify(data);
+
+	$.ajax({
+		type : "POST",
+		data : jsonData,
+		url : '/planning/event/poll/save',
+		contentType : 'application/json',
+		dataType : 'json',
+		success : function(result) {
+			mcxDialog.alertC('설문조사 이벤트 참여가 완료되었습니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					cfnGoToPage(_PAGE_EVENT_MAIN);
+				}
+			});
+		}
+	})
+}
+
+$(document).ready(function(){
+	//Q3 글자 수 카운트
+	$('.doc_ans').keyup(function (e){
+		var content = $(this).val();
+		$('#ans_cnt').html(content.length);
+		if (content.length > 1000){
+			$(this).val(content.substring(0, 1000));
+			$('#ans_cnt').html("500");
+		}
+	});
+	
+	$('.etc').keyup(function (e){
+		var content = $(this).val(); 
+		if (content.length > 50){
+			$(this).val(content.substring(0, 50));
+		}
+	});
+	
+	$('.q4_ans').keyup(function (e){
+		var content = $(this).val(); 
+		if (content.length > 50){
+			$(this).val(content.substring(0, 50));
+		}
+	});
+	
+	
+})
+</script>
+</th:block>
+
+</body>
+</html>

+ 3 - 2
src/main/webapp/WEB-INF/views/mob/planning/PlanningMainFormMob.html

@@ -53,9 +53,10 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	let fnGetPlanningList = function(cateNo) {
+	let fnGetPlanningList = function(cateNo,brandGroupNo) {
 		let actionUrl = '/planning/main/list';
 		if (!gagajf.isNull(cateNo)) actionUrl += '?cateNo=' + cateNo;
+		if (!gagajf.isNull(brandGroupNo)) actionUrl += '?brandGroupNo=' + brandGroupNo;
 		
 		$.getJSON(actionUrl
 			, function(result, status) {
@@ -118,7 +119,7 @@
 	}
 	
 	$(document).ready(function() {
-		fnGetPlanningList([[${cateNo}]]);
+		fnGetPlanningList([[${cateNo}]],[[${brandGroupNo}]]);
 	});
 /*]]>*/
 </script>

+ 372 - 293
src/main/webapp/WEB-INF/views/mob/planning/PlanningShotGuideFormMob.html

@@ -18,165 +18,82 @@
  -->
 <body>
 <th:block layout:fragment="content">
-		<main role="" id="" class="container dp">
-
-			<section class="content dp_Bulletship">
-				<div class="inner wide">
-                    <div class="Bulletship_head">
-                        <img src="/images/mo/thumb/bullet_bg1.png" alt="오늘 사서 오늘 입자 AM 10시까지 주문하면 당일 도착 대상지역 서울, 경기, 인천 외 일부 지역 제외">
-                    </div>
-                    <div class="Bulletship_body">
-                        <div class="inner">
-                            <div class="ico-area">
-                                <img src="/images/mo/ico_bulltet-house.png" alt="지붕이 그려진 아이콘입니다">
+	<main role="" id="" class="container dp">
+			<section class="content">
+                <div class="inner wide">
+                    <div class="bulletship">
+                        <div class="Bulletship_head">
+                        	 <img src="/images/mo/thumb/bullet_bg1.png" alt="오늘 사서 오늘 입자 AM 10시까지 주문하면 당일 도착 대상지역 서울, 경기, 인천 외 일부 지역 제외">
+                        </div>
+                        <div class="Bulletship_body">
+                            <div>
+                                <div class="ico-area">
+                                    <img src="/images/mo/ico_bulltet-house.png" alt="지붕이 그려진 아이콘입니다">
+                                </div>
+                                <div class="txt-area" id="shotHtml">
+                                    <!-- 배송가능지역 -->
+                                   
+                                    <!-- // 배송가능지역 -->
+                                </div>  
                             </div>
-                            <div class="txt-area">
-								 <!-- 배송가능지역 -->
-								 <p class="bulltetship-time">오전10시 이전 주문 당일도착</p>
-								 <p class="bulltetship-check"><span class="c_primary">총알배송이 가능한 지역</span>인지<br> 확인해보세요!</p>
-							 
-								 <div class="btn_group_flex">
-									 <div>
-										 <button class="btn btn_default" id="btn_bulletship_pop">
-											 <span>내 배송지 확인하기</span>
-										 </button>
-									 </div>
-								 </div>
-								 <p class="bulltetship-disc ptxt01">서울·경기·인천 중 일부지역은 총알배송이 불가합니다.</p>
-								 <!-- // 배송가능지역 -->
-                            </div>  
                         </div>
-                    </div>
-                    <div class="Bulletship_foot">
-                        <div class="inner custom-inner">
-                            <ul class="clear">
-                                <li>
-                                    <div class="img-box">
-                                        <img src="/images/mo/ico_bulltet-order.png" alt="택배차가 그려진 아이콘입니다">
-                                    </div>
-                                    <div class="txt-box">
-                                        <span class="tit">주문/도착</span>
-                                        <p class="disc">오전 10시 전 주문완료하면 <br>당일 밤 12시까지 도착</p>
-                                    </div>
-                                </li>
-                                <li>
-                                    <div class="img-box">
-                                        <img src="/images/mo/ico_bulltet-delivery.png" alt="달력이 그려진 아이콘입니다">
-                                    </div>
-                                    <div class="txt-box">
-                                        <span class="tit">배송일</span>
-                                        <p class="disc">월, 화, 수, 목, 금 <br class="mo-only">(영업일 기준, 공휴일 휴무)</p>
-                                    </div>
-                                </li>
-                                <li>
-                                    <div class="img-box">
-                                        <img src="/images/mo/ico_bulltet-object.png" alt="쇼핑백이 그려진 아이콘입니다">
-                                    </div>
-                                    <div class="txt-box">
-                                        <span class="tit">대상상품</span>
-                                        <p class="disc ptxt01">한세 패밀리 브랜드 <br class="mo-only">(스타일24 직배송 한정)</p>
-                                    </div>
-                                </li>
-                            </ul>
+                        <div class="Bulletship_foot" >
+                            <div>
+                                <ul class="clear">
+                                    <li>
+                                        <div class="img-box">
+                                            <img src="/images/mo/ico_bulltet-order.png" alt="택배차가 그려진 아이콘입니다">
+                                        </div>
+                                        <div class="txt-box">
+                                            <span class="tit">주문/도착</span>
+                                            <p class="disc">오전 10시 전 주문완료하면 <br>당일 밤 12시까지 도착</p>
+                                        </div>
+                                    </li>
+                                    <li>
+                                        <div class="img-box">
+                                            <img src="/images/mo/ico_bulltet-delivery.png" alt="달력이 그려진 아이콘입니다">
+                                        </div>
+                                        <div class="txt-box">
+                                            <span class="tit">배송일</span>
+                                            <p class="disc">월, 화, 수, 목, 금 <br class="mo-only">(영업일 기준, 공휴일 휴무)</p>
+                                        </div>
+                                    </li>
+                                    <li>
+                                        <div class="img-box">
+                                            <img src="/images/mo/ico_bulltet-object.png" alt="쇼핑백이 그려진 아이콘입니다">
+                                        </div>
+                                        <div class="txt-box">
+                                            <span class="tit">대상상품</span>
+                                            <p class="disc ptxt01">한세 패밀리 브랜드 <br class="mo-only">(스타일24 직배송 한정)</p>
+                                        </div>
+                                    </li>
+                                </ul>
+                            </div>
                         </div>
                     </div>
-
-					<!-- 210415_드롭박스 위치수정 -->
-					<div class="items_option">
-						<div class="open_categori">
-							<a id="filter">모이몰른
-								<!-- 210415_select > a태그로 변경 -->
-								<!--<option value="hide">모이몰른</option>
-								<option value="Test_SELECT_OPTION_1" rel="icon-temperature">모이몰른</option>
-								<option value="Test_SELECT_OPTION_2">모이몰른</option>
-								<option value="Test_SELECT_OPTION_3">모이몰른</option>-->
-							</a> 
+                </div>
+				<div class="inner wide">
+					<div class="dp_listItems_cont type1">
+						<!-- 210415_드롭박스 위치수정 -->
+						<div class="items_option">
+							<div class="open_categori" style="position: relative; width: 100%; z-index: 0;">
+								<a id="filter"></a> 
+							</div>
 						</div>
 					</div>
                 </div>
-				<div class="inner">
-					<div class="delivery_item">
-						<h2 class="dp_subtitle dp_another_st">모이몰른</h2>
-						<div class="item_list">
-							<div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">
-												<span class="itemPrice_original">89,000</span>
-												80,100
-												<span class="itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">
-												<span class="itemPrice_original">89,000</span>
-												80,100
-												<span class="itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">
-												<span class="itemPrice_original">89,000</span>
-												80,100
-												<span class="itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
+                <div id="cornerList"></div>
+<!-- 				<div class="inner">
+					<div class="dp_listItems_wrap type1">
+						<h2 class="dp_subtitle">겨울 아우터 재입고</h2>
+						<div class="list_content"> 데이터 없을시 클래스 nodata 추가
+							<div class="list_defult">
+								<div>
+									<p>선택하신 조건에 맞는 상품이 없습니다.<br>필터를 변경해 보세요.</p>
 								</div>
+								<button type="button" class="btn btn_default"><span>선택한 필터 초기화</span></button>
+							</div>
+							<div class="itemsGrp">
 								<div class="item_prod">
 									<div class="item_state">
 										<button type="button" class="itemLike">관심상품 추가</button>
@@ -206,140 +123,42 @@
 							</div>
 						</div>
 					</div>
-				</div>
-				<div class="inner">
-					<div class="delivery_item">
-						<h2 class="dp_subtitle">컬리수</h2>
-						<div class="item_list">
-							<div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">
-												<span class="itemPrice_original">89,000</span>
-												80,100
-												<span class="itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">
-												<span class="itemPrice_original">89,000</span>
-												80,100
-												<span class="itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">
-												<span class="itemPrice_original">89,000</span>
-												80,100
-												<span class="itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
-								</div>
-								<div class="item_prod">
-									<div class="item_state">
-										<button type="button" class="itemLike">관심상품 추가</button>
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
-											</div>
-											<p class="itemBrand">BRAND NAME</p>
-											<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-											<p class="itemPrice">
-												<span class="itemPrice_original">89,000</span>
-												80,100
-												<span class="itemPercent">10%</span>
-											</p>
-											<div class="itemcolorchip">
-												<span class="chip_color35" value="ABM">BEIGE</span>
-												<span class="chip_color54" value="BDS">BLACK</span>
-												<span class="chip_color40" value="YBR">WHITE</span>
-											</div>
-											<p class="itemBadge">
-												<span class="badge13">베스트 </span>
-											</p>
-											<div class="itemComment">#주문 폭주 상품</div>
-										</a>
-									</div>
+				</div> -->
+<!-- 				<div class="inner">
+					<div class="dp_listItems_wrap type2">
+						<h2 class="dp_subtitle">2021 신상 아우터</h2>
+						<div class="itemsGrp">
+                            <div class="item_prod">
+								<div class="item_state">
+									<button type="button" class="itemLike">관심상품 추가</button>
+									<a href="#none" class="itemLink">
+										<div class="itemPic">
+											<img class="vLHTC pd_img" src="/images/mo/thumb/prod1.jpg" alt="">
+										</div>
+										<p class="itemBrand">BRAND NAME</p>
+										<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+										<p class="itemPrice">
+											<span class="itemPrice_original">89,000</span>
+											80,100
+											<span class="itemPercent">10%</span>
+										</p>
+										<div class="itemcolorchip">
+											<span class="chip_color35" value="ABM">BEIGE</span>
+											<span class="chip_color54" value="BDS">BLACK</span>
+											<span class="chip_color40" value="YBR">WHITE</span>
+										</div>
+										<p class="itemBadge">
+											<span class="badge13">베스트 </span>
+										</p>
+										<div class="itemComment">#주문 폭주 상품</div>
+									</a>
 								</div>
 							</div>
-						</div>
+						 </div>
 					</div>
-				</div>
+				</div> -->
 			</section>
 
-			<!-- 배송검색팝업 -->
-			<div class="modal fade dp_pop bulletShip_pop" id="bulletShipPop" tabindex="-1" role="dialog" aria-labelledby="modalScrollLabel" aria-hidden="true">
-				<div class="modal-dialog" role="document">
-					<div class="modal-content">
-						<div class="modal-header">
-							<h5 class="modal-title" id="modalScrollLabel"><span class="sr-only">배송팝업</span></h5>
-						</div>
-						<div class="modal-body">
-							<div class="pop_cont"></div>
-						</div>
-						<div class="modal-footer">
-							<button type="button" id="" class="btn btn_dark"><span>계속 쇼핑하기</span></button>
-						</div>
-					</div>
-				</div>
-			</div>
-			<!-- //배송검색팝업 -->
-
 			<!-- 카테고리 -->
 			<div class="category_box brand">
 				<div class="lap">
@@ -348,15 +167,15 @@
 						<!-- 카테고리 선택 -->
 						<div class="selcet_list">
 							<ul>
-								<li class="active"><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
-								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li class="active"><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
+								<li><a href="javascript:void(0)">모이몰</a></li>
 							</ul>
 						</div>
 						<!-- //카테고리 선택 -->
@@ -374,17 +193,277 @@
                     </div>
                     <div class="popup_con">
                         <div class="button_list clear">
-                            <button type="button" class="on"><span>모이몰른</span></button>
-                            <button type="button"><span>모이몰른</span></button>
-                            <button type="button"><span>모이몰른</span></button>
+                        	<th:block th:if="${planCornerList!=null}" th:each="a, cornerStat : ${planCornerList}">
+                           	 <button type="button" th:onclick="fnCornerClick([[${cornerStat.index+1}]], [[${a.cornerNm}]])"><span th:text="${a.cornerNm}"></span></button>
+                            </th:block>
                         </div>
                     </div>
                 </div>
             </div>
 		</main>
-
+		
+		<!-- 배송검색팝업 -->
+			<div class="modal fade dp_pop bulletShip_pop" id="bulletShipPop" tabindex="-1" role="dialog" aria-labelledby="modalScrollLabel" aria-hidden="true">
+				<div class="modal-dialog" role="document">
+					<div class="modal-content">
+						<div class="modal-header">
+							<h5 class="modal-title" id="modalScrollLabel"><span class="sr-only">배송팝업</span></h5>
+						</div>
+						<div class="modal-body">
+							<div class="pop_cont">
+								<div>
+								<div class="ico-area">
+									<img src="/images/mo/ico_bulltet-house.png"
+										alt="지붕이 그려진 아이콘입니다">
+								</div>
+								<div class="possible-popup" id="classPop">
+									<p class="">고객님이 찾으시는 지역은</p>
+									<p class="bulltetship-check">
+										<span class="c_primary" id="shotAdr"></span> 가능 지역
+									</p>
+									<div class="input-address" id="addr">
+										
+									</div>
+									<p class="possible-notice c_gray" id="infoTxt">
+										
+									</p>
+								</div>
+							</div>
+							</div>
+						</div>
+						<div class="modal-footer">
+							<button type="button" id="" class="btn btn_dark"  onclick="$.modal.close();"><span>계속 쇼핑하기</span></button>
+						</div>
+					</div>
+				</div>
+			</div>
+			<!-- //배송검색팝업 -->
 <script th:inline="javascript">
+let custAddr = [[${custAddr}]];
+let customerInfo = [[${customerInfo}]];
+let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
+let planCornerList = [[${planCornerList}]];
+let planCornerGoodsList = [[${planCornerGoodsList}]];
+if(planCornerList.length>0){
+	var html = '';
+	$.each(planCornerList, function(idx, item)  {
+		html += '<div class="inner" id="type'+idx+'">';
+		html += '	<div class="dp_listItems_wrap type'+idx+'">';
+		html += '		<h2 class="dp_subtitle">'+item.cornerNm+'</h2>';
+		html += '			<div class="itemsGrp">';
+		$.each(planCornerGoodsList, function(idx2, item2)  {
+			if (item2.cornerNm == item.cornerNm) {
+			html += '				<div class="item_prod">';
+			html += '					<div class="item_state">';
+			if(item2.likeIt === 'likeit'){
+				html += '						<button type="button" class="itemLike likeit active" onclick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			}else{
+				html += '						<button type="button" class="itemLike" onclick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			}
+			
+			html += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
+			html += '							<div class="itemPic">';
+			html += '								<img class="vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
+			html += '							</div>';
+			html += '							<p class="itemBrand">'+item2.brandGroupNm+'</p>';
+			html += '							<div class="itemName">'+item2.goodsNm+'</div>';
+			html += '							<p class="itemPrice">';
+			if (item2.currPrice != item2.listPrice) {
+				html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+			}
+			html += item2.currPrice.addComma();
+			if (item2.dcRate != 0) {
+				html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+			}
+			html += '							</p>';
+			html += '							<div class="itemcolorchip">';
+			if(!gagajf.isNull(item2.colorChips)){
+				var colorArr = item2.colorChips.split(",");
+				var colorCd = '';
+				var rgbColor = '';
+				for(let i=0; i<colorArr.length; i++){
+					var colorInfo = colorArr[i].split(":");
+					colorCd = colorInfo[0];
+					rgbColor = colorInfo[1];
+					if(rgbColor=='#FFFFFF'){
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+					}else{
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+					}
+				}
+			}
+			html += '							</div>';
+			if(!gagajf.isNull(item2.icon)){
+				var iconArr = item2.icon.split(",");
+				var iconGb = '';
+				var iconNm = '';
+				html += '	<p class="itemBadge">';
+				for(let i=0; i<iconArr.length; i++){
+					var iconInfo = iconArr[i].split(":");
+					iconGb = iconInfo[0];
+					iconNm = iconInfo[1];
+					html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+				}
+				html += '	</p>';
+			}
+			if(item2.goodsTnm != null){
+				html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+			}
+			html += '						</a>';
+			html += '					</div>';
+			html += '				</div>';
+			}
+		});
+		html += '			</div>';
+		html += '	  </div>';
+		html += '</div>';
+	});
+	
+	$("#cornerList").append(html);
+
+}
+var shotBody = function () {
+	if (!cfCheckLogin() || (custAddr == null || custAddr == '')) {
+		html = '';
+		html += '<p class="bulltetship-time">오전10시 이전 주문 당일도착</p>';
+		html += '<p class="bulltetship-check"><span class="c_primary">총알배송이 가능한 지역</span>인지<br> 확인해보세요!</p>';
+		html += '    <div class="btn_group_flex">';
+		html += '        <div>';
+		html += '            <button class="btn btn_default" id="btn_bulletship_pop" onclick="fnOpenDaumAddr();">';
+		html += '                <span>내 배송지 확인하기</span>';
+		html += '            </button>';
+		html += '        </div>';
+		html += '    </div>';
+		html += '<p class="bulltetship-disc ptxt01">서울·경기·인천 중 일부지역은 총알배송이 불가합니다.</p>';
+		
+		$("#shotHtml").append(html);
+	}else{
+		html = '';
+		html += ' <span class="costumer-name">'+customerInfo.custNm+'</span>님의 배송지는';
+		if (custAddr.shotDelvUseYn  === 'Y') {
+			html += '<p class="bulltetship-check"><span class="c_primary">총알배송</span> 지역</p>';
+		}else{
+			html += '<p class="bulltetship-check"><span class="c_primary">일반배송</span> 지역</p>';
+		}
+		html += '<div class="input-address">';
+		html += custAddr.recipBaseAddr+' <br>'+custAddr.recipDtlAddr;
+		html += '</div>';
+		html += '<div class="btn_group_flex">';
+		html += '	<div>';
+		html += '		<button class="btn btn_default btn_block" id="btn_bulletship_pop" onclick="fnOpenDaumAddr();">';
+		html += '			<span>다른 배송지 확인하기</span>';
+		html += '		</button>';
+		html += '	</div>';
+		html += '</div>';
+		
+		$("#shotHtml").append(html);
+	}
+} 
+
+//우편번호 DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function() {
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// data.zonecode
+			
+			$.ajax( {
+						type		: "GET",
+						url 		: '/planning/shot/delivery/confirm?recipZipcode='+data.zonecode,
+						dataType 	: 'json',
+						success 	: function(result) {
+							if (result != null) {
+								$('#addr').text(cfnGetDaumRoadAddr(data));
+								if(result.shotYn.shotDelvUseYn == "Y"){
+									$("#classPop").attr("class","possible-popup");
+									$('#shotAdr').text("총알배송");
+									$("#infoTxt").html("오늘 오전 10시까지 주문하시면 오늘 도착합니다. <br>(토, 일, 공휴일 휴무)")
+									
+								}else{
+									$("#classPop").attr("class","impossible-popup");
+									$('#shotAdr').text("일반배송");
+									$("#infoTxt").html("주문시간/배송지에 따라 2~3일 이내 도착합니다.<br> (일, 공휴일 휴무)")
+								}
+								
+								$("#bulletShipPop").modal("show");
+								
+							}
+						}
+					}); 
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
+	cfnOpenDaumAddr(daumZip);
+}
+
+var fnCornerClick = function (result1,result2) {
+	var num = result1 - 1;
+	$("#filter").text(result2);
+	//var offset = $('.dp_listItems_cont.type'+(result1)).offset(); //선택한 태그의 위치를 반환
+	var offset = $('#type'+num).offset(); //선택한 태그의 위치를 반환
+	//animate()메서드를 이용해서 선택한 태그의 스크롤 위치를 지정해서 0.4초 동안 부드럽게 해당 위치로 이동함 
+	$('html').animate({scrollTop : offset.top}, 400);
+	
+}
+
+$(document).ready(function(){
+	shotBody();
+	$("#filter").text(planCornerList[0].cornerNm);
+	// 다른기획전
+	var other_promotion_slide = new Swiper('.other_promotion_slide .swiper-container', {
+		slidesPerView: 2,
+		spaceBetween: 8,
+		centerMode: true,
+	});
+	
+	$(window).scroll(function(){
+		var scrollTop= $(window).scrollTop();
+		var itemTop=$('.dp .dp_listItems_cont').offset().top;
+
+        if (scrollTop >= itemTop){
+            $('.dp .dp_listItems_cont .items_option').addClass('fix');
+        } else {
+            $('.dp .dp_listItems_cont .items_option').removeClass('fix');
+        }
+
+	});
+	
+	// 아이템스라이드(리스트갯수1)
+	var dp_listItems_cont1 = new Swiper('.dp_listItems_cont .swiper-container.item01', {
+		slidesPerView: 1,
+		spaceBetween: 0,
+		centerMode: true,
+		pagination: {
+			el: '.dp_listItems_cont .swiper-container.item01 .swiper-pagination',
+		},
+	});
+	
+	
+	
+	//기간 선택 팝업
+    $(document).on("click", ".open_categori", function(){
+        $('#odDatePop').show().addClass("active");
+        $("body").css({"overflow":"hidden"});
+    });
+    //팝업_닫기
+    $('.popup_close').on("click",function(){
+        $('.popup_box').hide().removeClass('active');
+        $("body").css({"overflow":"visible"});
+    });
+    // 210415_팝업 테두리 선택 추가
+    $(document).ready(function(){
+	    $(document).on('click','.popup_box .button_list button',function(){
+            $('.popup_box .button_list button').removeClass('on');
+            $(this).addClass('on');
+		});
+	});
+    
+    $("#bulletShipPop_close").click(function() {
+        $.modal.close();
+ });	
 
+});
 </script>
 </th:block>
 

+ 46 - 5
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -77,7 +77,9 @@
 									<a th:unless="${ContentsData.contentsType=='SELF'}" th:href="${ContentsData.strVar1}" target="_blank">브랜드 사이트</a>
 								</div>
 								<div class="brand_desc" id="brandDesc">
-									<p class="cate" th:text="${ContentsData.strTitle1}"></p>
+									<p class="cate">
+										<input type="hidden" name="brandTitle" th:value="${ContentsData.strTitle1}">
+									</p>
 									<p class="desc" > <!--th:text="${ContentsData.subText1}"-->
 										<input type="hidden" name="brandNote" th:value="${ContentsData.subText1}"/>
 									</p>
@@ -136,9 +138,11 @@
 									<th:block th:each="ContentsData, ContentsStat : ${brandMainLayoutData.ContentsList}">
 										<div class="swiper-slide">
 											<a th:href="${ContentsData.strVar1}">
-												<div class="bnnbox" style="background:#e3e7ea;">
+												<div class="bnnbox" id="bannerS" style="background:#e3e7ea;">
 													<div class="txtWrap">
-														<p th:text="${ContentsData.strTitle1}"></p>
+														<p class="bText">
+															<input type="hidden" name="bannerDesc" th:value="${ContentsData.strTitle1}">
+														</p>
 														<!--<p>아우터 + 이너 단독세일</p>-->
 														<button type="button" class="btn">VIEW MORE</button>
 													</div>
@@ -274,7 +278,7 @@
 
 				<!-- special_shop -->
 				<th:block th:if="${contentsLoc=='011'}">
-					<div class="content wide special_shop">
+					<div class="content wide special_shop" th:if="${brandMainLayoutData.planningList != null}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>
@@ -450,7 +454,7 @@ var brandMainLayoutList = [[${brandMainLayoutList}]];
 var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
 var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
 	$("#brLookbookPopup .modal-dialog").remove();
-	tag = '';
+	var tag = '';
 
 	tag += '	<div class="modal-dialog" role="document">\n';
 	tag += '		<div class="modal-content">\n';
@@ -786,6 +790,24 @@ $(document).ready( function() {
 	});
 
 	// 브랜드소개 <br> 처리
+	if(!gagajf.isNull($("#brandDesc").find("input[name=brandTitle]").val())){
+		var brandDesc = $("#brandDesc").find("input[name=brandTitle]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
+		if(!gagajf.isNull(brandDesc)){
+			if(brandDesc.indexOf('<br>') > -1){
+				let tag = '';
+				var reText = brandDesc.split("<br>");
+				tag += reText[0];
+				tag += '<br>';
+				tag += reText[1];
+				$("#brandDesc .cate").append(tag);
+			}else{
+				let tag = '';
+				tag += brandDesc;
+				$("#brandDesc .cate").append(tag);
+			}
+		}
+	}
+
 	if(!gagajf.isNull($("#brandDesc").find("input[name=brandNote]").val())){
 		var brandDesc = $("#brandDesc").find("input[name=brandNote]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
 		if(!gagajf.isNull(brandDesc)){
@@ -804,6 +826,25 @@ $(document).ready( function() {
 		}
 	}
 
+	// 배너 슬라이더 <br> 처리
+	$('.bText').each(function (){
+		let tag = '';
+		if(!gagajf.isNull($(this).find("input[name=bannerDesc]").val())){
+			var brText = $(this).find("input[name=bannerDesc]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>").replaceAll("<br/>", "<br>");
+			if(brText.indexOf('<br>') > -1){
+				var reText = brText.split("<br>");
+				tag += reText[0];
+				tag += '</p>';
+				tag += '<p>';
+				tag += reText[1];
+				tag += '</p>';
+			}else{
+				tag += brText;
+			}
+			$(this).append(tag);
+		}
+	});
+
 });
 /*]]>*/
 </script>

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

@@ -133,7 +133,7 @@
 								<div class="item_state">
 									<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM003', planDtlSq=''">관심상품 추가</button>
 									<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM003');">
-										<div class="rank" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
+										<div class="shape" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
 										<div class="itemPic">
 											<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}">
 										</div>

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

@@ -107,7 +107,7 @@
 										</div>
 									</div>
 									<!-- 교환결제대기 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_21' or (exchangeDtl.chgGb == 'G680_40' and exchangeDtl.chgStat == 'G685_32')}"><p th:text="|${exchangeDtl.addPayCost}원 결제 후 교환 가능합니다.|"></p></div>
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_21' or (exchangeDtl.chgGb == 'G680_40' and exchangeDtl.chgStat == 'G685_32')}"><p th:text="|${#numbers.formatInteger(exchangeDtl.addPayCost, 1, 'COMMA')}원 결제 후 교환 가능합니다.|"></p></div>
 									<!-- 교환접수 -->
 									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_20'}"><p>교환 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>
 									<!-- 회수요청 -->
@@ -225,7 +225,7 @@
 							</table>
 						</div>
 					</th:block>
-					<th:block th:if="${oneData.addPayCost > 0}">
+					<th:block th:if="${oneData.addPayCost > 0 and not #strings.isEmpty(oneData.pgTid)}">
 						<h4 class="subH3">결제정보</h4>
 						<div class="tbl type6">
 							<table>

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

@@ -98,7 +98,7 @@
 										</div>
 									</div>
 									<!-- 반품결제대기 -->
-									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_51' or (returnDtl.chgGb == 'G680_30' and returnDtl.chgStat == 'G685_32')}"><p th:text="|${returnDtl.addPayCost}원 결제 후 반품 가능합니다.|"></p></div>
+									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_51' or (returnDtl.chgGb == 'G680_30' and returnDtl.chgStat == 'G685_32')}"><p th:text="|${#numbers.formatInteger(returnDtl.addPayCost, 1, 'COMMA')}원 결제 후 반품 가능합니다.|"></p></div>
 									<!-- 교환접수 -->
 									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_50'}"><p>반품 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>
 									<!-- 회수요청 -->

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

@@ -132,7 +132,7 @@
 		for (var i = 0; i < date.length; i++) {
 			$("#searchDt").append(	"<li onclick='fnChangeDate(this.value)' value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" +  "  " + date[i].month + "월 </li>")
 		}
-		$(".select").append("<li class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년"  +  "  " + date[0].month + "월 </li>"); // 현재년도 선택 */ 
+		$(".select").append("<li onclick='fnChangeDate(this.value)' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년"  +  "  " + date[0].month + "월 </li>"); // 현재년도 선택 */ 
 	}
 	appendYear($("#searchDt"));
 
@@ -261,14 +261,11 @@
 		
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
-		
-		
 
 		// 셀렉트박스 활성화
 		$('.select_custom').each(function(index) {
 			var selecter01 = new sCombo($(this));
 		});
-
 		// 셀렉트박스 데이터 설정
 		fnChangeDate();
 

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

@@ -481,7 +481,7 @@ var reviewCreate = function () {
 	}
 	
 	
-	mcxDialog.confirm('리뷰를 등록하시겠습니까"?', {
+	mcxDialog.confirm('리뷰를 등록하시겠습니까?', {
         cancelBtnText: "취소",
         sureBtnText: "확인",
         sureBtnClick: function(){
@@ -561,7 +561,6 @@ $('#reviewContent').keyup(function (e){
     
 
     if (content.length > 500){
-    	mcxDialog.alert("최대 500자까지 입력 가능합니다.");
         $(this).val(content.substring(0, 500));
         $('.txt_cnt').html('<span id="review_cnt" class="c_primary">500</span>/500');
     }

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

@@ -104,7 +104,7 @@
 										</div>
 									</div>
 									<!-- 교환결제대기 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_21' or (exchangeDtl.chgGb == 'G680_40' and exchangeDtl.chgStat == 'G685_32')}"><p th:text="|${exchangeDtl.addPayCost}원 결제 후 교환 가능합니다.|"></p></div>
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_21' or (exchangeDtl.chgGb == 'G680_40' and exchangeDtl.chgStat == 'G685_32')}"><p th:text="|${#numbers.formatInteger(exchangeDtl.addPayCost, 1, 'COMMA')}원 결제 후 교환 가능합니다.|"></p></div>
 									<!-- 교환접수 -->
 									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_20'}"><p>교환 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>
 									<!-- 회수요청 -->
@@ -222,7 +222,7 @@
 							</table>
 						</div>
 					</th:block>
-					<th:block th:if="${oneData.addPayCost > 0}">
+					<th:block th:if="${oneData.addPayCost > 0 and not #strings.isEmpty(oneData.pgTid)}">
 						<h4 class="subH3">결제정보</h4>
 						<div class="tbl type6">
 							<table>

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

@@ -96,7 +96,7 @@
 										</div>
 									</div>
 									<!-- 반품결제대기 -->
-									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_51' or (returnDtl.chgGb == 'G680_30' and returnDtl.chgStat == 'G685_32')}"><p th:text="|${returnDtl.addPayCost}원 결제 후 반품 가능합니다.|"></p></div>
+									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_51' or (returnDtl.chgGb == 'G680_30' and returnDtl.chgStat == 'G685_32')}"><p th:text="|${#numbers.formatInteger(returnDtl.addPayCost, 1, 'COMMA')}원 결제 후 반품 가능합니다.|"></p></div>
 									<!-- 교환접수 -->
 									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_50'}"><p>반품 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>
 									<!-- 회수요청 -->

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

@@ -109,8 +109,22 @@
 				</th:block>
 			</th:block>
 			<div class="coner_item01" th:if="${fsrcInfoBtm != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"></div>
-			
-			 <!-- 댓글리스트 -->
+			<div class="coner_item01" th:if="${planInfo.pollSq != null}">
+				<div class="content dp_btn_area">
+					<div class="cont_head">
+						<div>
+							<h4>버튼영역</h4>
+						</div>
+					</div>
+					<div class="cont_body">
+						<div class="btn_wrap">
+							<a href="javascript:void(0);" class="btn btn_primary go_next"
+								onclick="javascript:fnJoinConfirm()"> <span>설문조사 참여하기</span></a>
+						</div>
+					</div>
+				</div>
+			</div>
+				<!-- 댓글리스트 -->
 			<th:block th:if="${planInfo.replyYn == 'Y'}">
 			<div class="content wide cmt">
 				<div class="cont_body">

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

@@ -335,7 +335,6 @@ $(document).ready( function() {
 		var content = $(this).val();
 		$('#ans_cnt').html("(<em class='c_primary'>"+content.length+"</em>/1000자)");  
 		if (content.length > 1000){
-			alert("최대 1000자까지 입력 가능합니다.");
 			$(this).val(content.substring(0, 1000));
 			$('#ans_cnt').html("(<em class='c_primary'>1000</em>/1000자)");
 		}

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

@@ -113,9 +113,10 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	let fnGetPlanningList = function(cateNo) {
+	let fnGetPlanningList = function(cateNo,brandGroupNo) {
 		let actionUrl = '/planning/main/list';
 		if (!gagajf.isNull(cateNo)) actionUrl += '?cateNo=' + cateNo;
+		if (!gagajf.isNull(brandGroupNo)) actionUrl += '?brandGroupNo=' + brandGroupNo;
 		
 		$.getJSON(actionUrl	, function(result, status) {
 				if (status == 'success') {
@@ -185,7 +186,7 @@
 	}
 	
 	$(document).ready(function() {
-		fnGetPlanningList([[${cateNo}]]);
+		fnGetPlanningList([[${cateNo}]],[[${brandGroupNo}]]);
 	});
 /*]]>*/
 </script>

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

@@ -194,8 +194,6 @@ if(planCornerList.length>0){
 				if (item2.dcRate != 0) {
 					html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
 				}
-				
-				
 				html += '                             </p>';
 				html += '                             <div class="itemcolorchip">';
 				if(!gagajf.isNull(item2.colorChips)){

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

@@ -109,10 +109,10 @@ let fnGetSocialList = function(result) {
 	$.each(result.dataList, function(idx, item) {
 		
 		html += ' <div class="item_prod">';
-		if (item.stockQtySum == 0) {
-			html += '    <div class="item_state sold_out"> ';
-		}else{
+		if (item.stockQtySum > 0 || item.stockQtySum == null) {
 			html += '    <div class="item_state"> ';
+		}else{
+			html += '    <div class="item_state soldout"> ';
 		}
 		if (item.likeIt == 'likeit') {
 			html += '        <button type="button" class="itemLike active" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';