Просмотр исходного кода

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.front.git into develop

gagamel 5 лет назад
Родитель
Сommit
e05b4994e1
36 измененных файлов с 1948 добавлено и 110 удалено
  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. 1 0
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  4. 10 0
      src/main/java/com/style24/front/biz/dao/TsfOrderDao.java
  5. 9 0
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  6. 6 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  7. 23 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  8. 3 2
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  9. 117 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  10. 11 1
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  11. 10 12
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  12. 10 53
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  13. 10 4
      src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java
  14. 22 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  15. 24 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  16. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  17. 198 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  18. 41 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  19. 11 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  20. 2 1
      src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html
  21. 375 0
      src/main/webapp/WEB-INF/views/mob/display/BestMainFormMob.html
  22. 628 0
      src/main/webapp/WEB-INF/views/mob/display/BrandMainFormMob.html
  23. 171 0
      src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html
  24. 170 0
      src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html
  25. 4 4
      src/main/webapp/WEB-INF/views/web/display/BestMainFormWeb.html
  26. 47 6
      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 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  32. 4 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html
  33. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreExchangeDetailFormWeb.html
  34. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreReturnDetailFormWeb.html
  35. 0 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventPollFormWeb.html
  36. 5 3
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.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);
+
 
 }

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

@@ -401,4 +401,5 @@ public interface TsfGoodsDao {
 	 */
 	Collection<SearchEngine> getSearchGoodsList(SearchEngine params);
 
+	int getContentsCategoryGoodsCount(Cate4Srch cate4Srch);
 }

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

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

@@ -225,6 +225,15 @@ public interface TsfReviewDao {
 	 */
 	void createReviewPointHst(Point point);
 	
+	/**
+	 * 마이페이지 CONFIRM_YN 업데이트
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 5. 10
+	 */
+	void updateMypageReviewConfimYn(Review review);
+	
 
 
 	

+ 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
 

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

@@ -462,6 +462,8 @@ public class TsfDisplayService {
 		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
 		cate4Srch.setCateGb("G032_101");
 
+		log.info("getBestItemCategoryGoodsList cate4Srch:::::::::{}",cate4Srch);
+
 		Collection<Goods> goodsList = goodsDao.getContentsCategoryGoodsList(cate4Srch);
 
 		if (goodsList.size() < 100) {
@@ -651,4 +653,25 @@ public class TsfDisplayService {
 		return cate1List;
 	}
 
+	public int getContentsCategoryGoodsCount(Contents contents) {
+		Cate4Srch cate4Srch = new Cate4Srch();
+		// 로그인 유무 확인 (로그인이 되어 있지 않으면 regNo 를 0으로 장바구니에 저장한다.)
+		Login login = new Login();
+		if (TsfSession.isLogin()) {
+			login = TsfSession.getInfo();
+		} else {
+			login.setCustNo(0);
+		}
+
+		cate4Srch.setCustNo(login.getCustNo());
+		cate4Srch.setPageGb(contents.getPageGb());
+		cate4Srch.setContentsLoc(contents.getContentsLoc());
+		cate4Srch.setMaxRow(100);
+		cate4Srch.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+		cate4Srch.setCate1No(contents.getCateNo());
+		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
+		cate4Srch.setCateGb("G032_101");
+		return goodsDao.getContentsCategoryGoodsCount(cate4Srch);
+	}
+
 }

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

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

@@ -172,6 +172,7 @@ public class TsfReviewService {
 	public void saveMypageReview(Review review) {
 		review.setDispYn("Y");
 		review.setDelYn("N");
+		review.setConfirmYn("Y");
 		review.setRegNo(TsfSession.getInfo().getCustNo());
 		review.setUpdNo(TsfSession.getInfo().getCustNo());
 		if (review.getKufKeyArr() == null && review.getOrgFileNmArr() == null) {
@@ -181,10 +182,12 @@ public class TsfReviewService {
 		}else {
 			review.setPntGiveStat("G043_10");
 		}
+		
 		reviewDao.saveMypageReview(review);
 		
 		//이미지등록
 		if(review.getOrgFileNmArr() != null) {
+			review.setConfirmYn("Y");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -220,6 +223,7 @@ public class TsfReviewService {
 		}
 		
 		if(review.getKufKeyArr() != null) {
+			review.setConfirmYn("N");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -255,6 +259,7 @@ public class TsfReviewService {
 				point.setReviewSq(review.getReviewSq());
 				reviewDao.createReviewPointHst(point);
 			}else if(review.getKufKeyArr() == null && review.getOrgFileNmArr() != null) {
+				
 				// 상품평 + 사진
 				point.setCustNo(TsfSession.getInfo().getCustNo());
 				point.setGvPntAmt(photoReviewPnt);
@@ -264,9 +269,14 @@ public class TsfReviewService {
 				point.setReviewSq(review.getReviewSq());
 				reviewDao.createReviewPointHst(point);
 			}
-			
 		}
+		
+		if (review.getConfirmYn()=="Y") {
+			reviewDao.updateMypageReviewConfimYn(review);
+		}
+		
 	}
+		
 	
 	/**
 	 * 마이페이지 리뷰 업데이트

+ 10 - 12
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -294,7 +294,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);
@@ -305,7 +305,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);
@@ -319,10 +319,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));
@@ -747,20 +751,14 @@ public class TsfDisplayController extends TsfBaseController {
 
 		contents.setContentsLoc("SCM003");
 		contents.setPageGb("BEST");
-		MainLayout mainLayout = new MainLayout();
-		mainLayout.setGoodsList(displayService.getBestItemCategoryGoodsList(contents));
-		int totalCnt = mainLayout.getGoodsList().size();
-		if (totalCnt > 100) {
-			totalCnt = 100;
-		}
+
+		int totalCnt = displayService.getContentsCategoryGoodsCount(contents);
 		pageable.setTotalCount(totalCnt);
 		contents.setPageable(pageable);
 
 		result.set("paging", contents);
 		result.set("totalCnt", totalCnt);
 		result.set("endRow", pageable.getEndRow());
-		contents.setContentsLoc("SCM003");
-		contents.setPageGb("BEST");
 		result.set("dataList", displayService.getBestItemCategoryGoodsList(contents));
 		return result;
 	}

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

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

+ 198 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1344,9 +1344,16 @@
 	                        AND    C4.SITE_CD = #{siteCd}
 	                        AND    C4.CATE_GB = #{cateGb}
 	                        AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
-	                        <if test="pageGb == null or pageGb != 'BEST'">
-		                    AND    C4.CATE1_NO = #{cate1No}
-		                    </if>
+		                    <choose>
+		                        <when test="pageGb != null and pageGb == 'BEST'">
+		                            <if test="cate1No != null and cate1No != ''">
+		                            AND    C4.CATE1_NO = #{cate1No}
+		                            </if>
+		                        </when>
+		                        <otherwise>
+		                        AND    C4.CATE1_NO = #{cate1No}
+		                        </otherwise>
+		                    </choose>
 		                    AND    C4.CONTENTS_LOC = #{contentsLoc}
 		              </otherwise>
 		           </choose>
@@ -1362,7 +1369,14 @@
 		           ) G
 		    WHERE  1=1
 		<if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
-			AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		    <choose>
+		        <when test="pageGb == 'BEST' and pageable.endRow >= 100">
+		    AND  G.NUMB BETWEEN #{pageable.startRow} AND 100
+		        </when>
+		        <otherwise>
+		    AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		        </otherwise>
+		    </choose>
 		</if>
 		<if test="maxRow != null and maxRow !=''">
 			AND  G.NUMB <![CDATA[<=]]> #{maxRow}
@@ -1460,6 +1474,186 @@
 		                             AND W.CUST_NO = #{custNo}
 		</if>
 	</select>
+
+	<!-- 컨텐츠카테고리상품 건수 -->
+	<select id="getContentsCategoryGoodsCount"  parameterType="Cate4Srch" resultType="int">
+		/* TsfGoods.getContentsCategoryGoodsCount */
+		WITH TAB_GOODS AS (
+		           SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		           , G.GOODS_CD           /*상품코드*/
+		           , G.GOODS_NM           /*상품명*/
+		           , G.GOODS_GB           /*상품구분*/
+		           , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		           , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		           , G.ORDER_MADE_YN      /*주문제작여부*/
+		           , G.GOODS_TNM          /*상품타이틀명*/
+		           , G.MAIN_COLOR_CD      /*대표색상코드*/
+		           , G.LIST_PRICE         /*정상가(최초판매가)*/
+		           , G.CURR_PRICE         /*현재판매가*/
+		           , G.REG_DT             /*등록일시*/
+		           , G.NUMB
+		           FROM   (
+		                    SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                    BG.BRAND_GROUP_ENM
+		                    ELSE
+		                    BG.BRAND_GROUP_KNM
+		                    END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		                    , G.GOODS_CD                                               /*상품코드*/
+		                    , G.GOODS_NM                                               /*상품명*/
+		                    , G.GOODS_GB                                               /*상품구분*/
+		                    , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                    , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                    , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                    , G.GOODS_TNM                                              /*상품타이틀명*/
+		                    , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                    , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                    , G.CURR_PRICE                                             /*현재판매가*/
+		                    , G.REG_DT                                                 /*등록일시*/
+		             <choose>
+		             	<when test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		             		, ROW_NUMBER() OVER(ORDER BY GS.SELL_WEEK_QTY DESC
+		             		, G.GOODS_CD) AS NUMB
+		             	</when>
+		             	<when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007' or contentsLoc == 'SMM012'"> <!-- md추천 -->
+		             		, ROW_NUMBER() OVER(ORDER BY CTG.DISP_ORD
+		             		, G.REG_DT DESC
+		             		, G.GOODS_CD) AS NUMB
+		             	</when>
+		             	<when test="contentsLoc == 'SCM002' or (contentsLoc == 'SCM003' and pageGb == null)"> <!-- md추천 -->
+		             		, ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD ,G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC) AS NUMB
+		             	</when>
+		             	<when test="contentsLoc == 'SCM003' and pageGb != null and pageGb == 'BEST'">
+		             		, ROW_NUMBER() OVER(ORDER BY C4.CATE1_NO, CG.DISP_ORD ,G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC) AS NUMB
+		             	</when>
+		             	<otherwise>
+		             		, ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
+		             		, G.REG_DT DESC
+		             		, G.GOODS_CD) AS NUMB
+		             	</otherwise>
+		             </choose>
+		<choose>
+		        	<when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007' or contentsLoc == 'SMM012'"> <!-- md추천 -->
+		        		FROM	TB_CONTENTS CT
+		        		, TMP_CONTENTS_GOODS CTG
+		        		, TB_GOODS G
+		        		, TB_GOODS_STOCK S
+		        		, TB_BRAND B
+		        		, TB_BRAND_GROUP BG
+		        		WHERE	CT.CONTENTS_LOC = CTG.CONTENTS_LOC
+		        		AND 	CT.DISP_ORD = CTG.CONTENTS_SQ
+		        		AND		CTG.GOODS_CD = G.GOODS_CD
+		        		AND		CTG.GOODS_CD = S.GOODS_CD
+		        		AND		G.BRAND_CD = B.BRAND_CD
+		        		AND     B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		        		AND		CT.CONTENTS_LOC = #{contentsLoc}
+		        		AND 	CTG.CONTENTS_SQ = #{dispOrd}
+		        		AND		NOW() BETWEEN CT.DISP_STDT AND CT.DISP_EDDT
+		        	</when>
+		        	<otherwise>
+		        		FROM   TB_CATE_4SRCH C4
+		        		, TB_CATE_GOODS CG
+		        		, TB_GOODS G
+		        		, TB_GOODS_STOCK S
+		        		, TB_BRAND B
+		        		, TB_BRAND_GROUP BG
+		        		<if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		        			, TB_GOODS_SUMMARY GS
+		        		</if>
+		        		WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		        		<choose>
+		        			<when test="brandGroupNo != null and brandGroupNo != ''">
+		        				AND    CG.BRAND_GROUP_NO = #{brandGroupNo}</when>
+		        			<otherwise>
+		        				AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		        			</otherwise>
+		        		</choose>
+		        		AND    CG.GOODS_CD = G.GOODS_CD
+		        		AND    CG.GOODS_CD = S.GOODS_CD
+		        		AND    G.BRAND_CD = B.BRAND_CD
+		        		AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		        		<if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		        			AND    CG.GOODS_CD = GS.GOODS_CD
+		        		</if>
+		        		AND    C4.SITE_CD = #{siteCd}
+		        		AND    C4.CATE_GB = #{cateGb}
+		        		AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
+		        		<choose>
+		        			<when test="pageGb != null and pageGb == 'BEST'">
+		        				<if test="cate1No != null and cate1No != ''">
+		        					AND    C4.CATE1_NO = #{cate1No}
+		        				</if>
+		        			</when>
+		        			<otherwise>
+		        				AND    C4.CATE1_NO = #{cate1No}
+		        			</otherwise>
+		        		</choose>
+		        		AND    C4.CONTENTS_LOC = #{contentsLoc}
+		        	</otherwise>
+		        </choose>
+		        AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		        AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
+		        AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
+		        AND    S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		        AND    B.USE_YN = 'Y'
+		        AND    BG.USE_YN = 'Y'
+		        <if test="pageGb != null and pageGb == 'BEST'">
+		        	ORDER BY C4.CATE1_NO
+		        </if>
+		        ) G
+		    WHERE  1=1
+		    <if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+		    	AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		    </if>
+		    <if test="maxRow != null and maxRow !=''">
+		    	AND  G.NUMB <![CDATA[<=]]> #{maxRow}
+		    </if>
+		    )
+		    , TAB_GOODS_IMG AS (
+		         /* 상품의 이미지 */
+		         SELECT GOODS_CD
+		               ,MAX(SYS_IMG_NM) AS SYS_IMG_NM
+		               ,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		         FROM (
+		                SELECT G.GOODS_CD
+		                , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		                , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		                FROM   TAB_GOODS G
+		                , TB_GOODS_IMG GI
+		                WHERE  G.GOODS_CD = GI.GOODS_CD
+		                AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		         ) Z
+		         GROUP BY GOODS_CD
+		    )
+		, TAB_GOODS_VIDEO AS (
+		        /* 상품의 동영상 목록 */
+		        SELECT GOODS_CD
+		        , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		        , MAX(CASE WHEN RNUM = 1 THEN KMC_KEY END) AS VIDEO_VAL_M
+		        , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		        , MAX(CASE WHEN RNUM = 2 THEN KMC_KEY END) AS VIDEO_VAL_S
+		        FROM   (
+		             SELECT G.GOODS_CD
+		             , VD.VIDEO_GB
+		             , VD.KMC_KEY
+		             , VD.REG_DT
+		             , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		             FROM   TAB_GOODS G
+		             , TB_GOODS_VIDEO VD
+		             WHERE  G.GOODS_CD = VD.GOODS_CD
+		             AND    VD.DISP_YN = 'Y'
+		             AND    VD.KMC_KEY IS NOT NULL
+		        ) Z
+		    GROUP  BY GOODS_CD
+		)
+		SELECT COUNT(1) AS CNT
+		FROM TAB_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+			LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+			AND W.CUST_NO = #{custNo}
+		</if>
+	</select>
 	
 	<!-- 컨텐츠카테고리 신규상품 목록 -->
 	<select id="getContentsCategoryNewGoodsList"  parameterType="Cate4Srch" resultType="Goods">

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

+ 11 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -840,6 +840,14 @@
 		AND   GOODS_CD   = #{goodsCd}
 	</update>
 	
+	<update id="updateMypageReviewConfimYn" parameterType="Review">
+		/* TsfReivew.updateMypageReviewConfimYn */
+		UPDATE TB_REVIEW
+		SET CONFIRM_YN = 'N'
+		   ,CONFIRM_DT = NOW()
+		WHERE REVIEW_SQ  = #{reviewSq}
+	</update>
+	
 	
 	
 	
@@ -884,6 +892,7 @@
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S')
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
+				AND R.CONFIRM_YN = 'Y'
  				AND O.SITE_CD = #{siteCd}
 			GROUP BY O.ORD_NO 
 			      ,O.ORD_NM 
@@ -1112,6 +1121,7 @@
 		   AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
 		   AND O.CUST_NO =  #{custNo}
 		   AND O.DISP_YN = 'Y'
+		   AND R.CONFIRM_YN = 'Y'
 		   AND O.SITE_CD =  #{siteCd}
 		   	) Z
 		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
@@ -1176,7 +1186,7 @@
 		 AND RA.DEL_YN = 'N'
 		 AND (RA.FILE_GB  = 'I'
 		      OR
-		      RA.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'  AND  RA.KMC_KEY IS NOT NULL
+		      RA.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'  AND  NULLIF(RA.KMC_KEY,'') IS NOT NULL
 		     )
 	</select>
 	

+ 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() {

+ 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,'');">전체</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' || contentsLoc=='014'||contentsLoc=='015'||contentsLoc=='016'}">
+					<!-- 배너 슬라이드 -->
+					<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>

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

@@ -37,7 +37,7 @@
 					<div class="taps">
 						<div>
 							<ul id="cateListArea">
-								<li class="active" id="li0"><a href="javascript:void(0);" onclick="fnBestListSearch(this,0);">전체</a></li>
+								<li class="active" id="li0"><a href="javascript:void(0);" onclick="fnBestListSearch(this,'');">전체</a></li>
 								<th:block th:each="item, stat : ${bestCateList}">
 									<li class="" th:id="${'li'+item.cateNo}"><a href="javascript:void(0);" th:onclick="fnBestListSearch(this,[[${item.cateNo}]]);" th:text="${item.cateNm}"></a></li>
 								</th:block>
@@ -296,9 +296,9 @@
 	});
 
 	var fnBestListSearch = function (obj, cateNo){
-		if(gagajf.isNull(cateNo)){
-			cateNo = 0;
-		}
+		// if(gagajf.isNull(cateNo)){
+		// 	cateNo = 0;
+		// }
 
 		$.each($("#cateListArea").find('li'), function() {
 			$(this).removeClass();

+ 47 - 6
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>
@@ -125,7 +127,7 @@
 
 				<!-- 가로 긴 배너 슬라이드 -->
 				<!-- 브랜드 배너 -->
-				<th:block th:if="${contentsLoc=='006'}">
+				<th:block th:if="${contentsLoc=='006' || contentsLoc=='014'||contentsLoc=='015'||contentsLoc=='016}">
 					<div class="content wide main_1stage">
 						<div class="cont_head dpnone">
 							<p class="t_c">배너 슬라이드</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 - 1
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(){

+ 4 - 3
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

@@ -68,9 +68,10 @@
 						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
 				tag +='		<span class="thumb" class="'+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
 						if (reviewAttach.fileGb == "M") {
-				tag +='			<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">\n';
-				tag +='				<source src="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + 'player_version=html5" type="video/mp4">\n';
-				tag +='			</video>\n';
+			    tag +='<iframe width="100%" height="100%" src="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + '/player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>';
+				//tag +='			<video poster="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + '/player_version=html5" muted="muted" preload="metadata" controls="controls">\n';
+				//tag +='				<source src="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + '/player_version=html5" type="video/mp4">\n';
+				//tag +='			</video>\n';
 						}else{
 				tag +='			<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
 						}

+ 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>
 									<!-- 회수요청 -->

+ 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자)");
 		}

+ 5 - 3
src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

@@ -35,7 +35,8 @@
 				</div>
 				<div class="cont_body">
 				    <div class="bulletship">
-						<div class="bulletship_head" th:utext="${#strings.replace(#strings.replace(shotHtmlTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
+						<!-- <div class="bulletship_head" th:utext="${#strings.replace(#strings.replace(shotHtmlTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"> -->
+						<div class="bulletship_head">
                             <img src="/images/pc/thumb/bullet_bg1.png" alt="10시까지 주문하면 당일도착">
                         </div>
                         <div class="bulletship_body" id="shotHtml">
@@ -55,8 +56,9 @@
                         </div>
                         <div class="bulletship_foot"><br>
                         </div>
-                        <div class="bulletship_foot" th:utext="${#strings.replace(#strings.replace(shotHtmlBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
-                           <!--  <img src="/images/pc/thumb/bullet_bg2.png" alt="주문/도착, 배송일, 대상상품"> -->
+                        <!-- <div class="bulletship_foot" th:utext="${#strings.replace(#strings.replace(shotHtmlBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"> -->
+                        <div class="bulletship_foot">
+                            <img src="/images/pc/thumb/bullet_bg2.png" alt="주문/도착, 배송일, 대상상품">
                         </div>
                     </div> 
                 </div>