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

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

eskim 5 лет назад
Родитель
Сommit
19baddb341
75 измененных файлов с 6109 добавлено и 1731 удалено
  1. 12 20
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 19 0
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  3. 20 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  4. 177 144
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  5. 5 2
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  6. 60 28
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  7. 51 27
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  8. 20 8
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  9. 20 1
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  10. 40 0
      src/main/java/com/style24/front/biz/thirdparty/SearchEngineDiquest.java
  11. 35 4
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  12. 101 73
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  13. 4 0
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  14. 31 6
      src/main/java/com/style24/front/biz/web/TsfNoMemberController.java
  15. 50 4
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  16. 4 0
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  17. 21 0
      src/main/java/com/style24/persistence/domain/searchengine/Filter.java
  18. 73 0
      src/main/java/com/style24/persistence/domain/searchengine/SearchEngine.java
  19. 4 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  20. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  21. 36 660
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  22. 462 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  23. 0 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  24. 3 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  25. 80 60
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  26. 4 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  27. 2 7
      src/main/resources/config/application-run.yml
  28. 11 1
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  29. 366 256
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html
  30. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html
  31. 138 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeCompleteFormMob.html
  32. 282 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeFormMob.html
  33. 33 17
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  34. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html
  35. 889 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReturnFormMob.html
  36. 1 1
      src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html
  37. 421 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningCustGradeBenefitFormMob.html
  38. 1 1
      src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html
  39. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartDelvFeeSaveGoodsPopupWeb.html
  40. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartTmtbSalesGoodsPopupWeb.html
  41. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  42. 17 8
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  43. 86 68
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  44. 963 0
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb2.html
  45. 323 0
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb3.html
  46. 108 63
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  47. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  48. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html
  49. 7 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreExchangeDetailFormWeb.html
  50. 14 14
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreListFormWeb.html
  51. 4 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreReturnDetailFormWeb.html
  52. 1 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html
  53. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html
  54. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb_20210330.html
  55. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  56. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  57. 4 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  58. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb_20210329.html
  59. 8 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  60. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCancelFormWeb.html
  61. 223 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreCancelDetailFormWeb.html
  62. 420 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreExchangeDetailFormWeb.html
  63. 26 20
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreListFormWeb.html
  64. 345 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreReturnDetailFormWeb.html
  65. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberExchangeFormWeb.html
  66. 3 3
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderDetailFormWeb.html
  67. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderListFormWeb.html
  68. 3 2
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberReturnFormWeb.html
  69. 1 1
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  70. 8 5
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  71. 13 27
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  72. 4 2
      src/main/webapp/WEB-INF/views/web/popup/RefundAccountAddPopupFormWeb.html
  73. 16 3
      src/main/webapp/biz/mypage.js
  74. 0 147
      src/main/webapp/ux/plugins/gaga/gaga.summernote.js
  75. 14 0
      src/main/webapp/ux/style24_link.js

+ 12 - 20
src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -13,10 +13,11 @@ import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Cate5;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
-import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
+import com.style24.persistence.domain.searchengine.Filter;
+import com.style24.persistence.domain.searchengine.SearchEngine;
 
 /**
  * 전시 Dao
@@ -145,6 +146,15 @@ public interface TsfDisplayDao {
 	 */
 	Collection<Contents> getContentsBannerList(Contents contents);
 
+	/**
+	 * 상품리스트 카테고리별 필터 목록
+	 * @param searchEngine - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 3
+	 */
+	Collection<Filter> getGoodsListCategoryFilterList(SearchEngine searchEngine);
+
 	/**
 	 * 상품카테고리 필터 목록
 	 * @param
@@ -163,24 +173,6 @@ public interface TsfDisplayDao {
 	 */
 	Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch);
 
-	/**
-	 * 카테고리 별 상품 수
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 7
-	 */
-	int getCategoryGoodsCount(GoodsSearch goodsSearch);
-
-	/**
-	 * 카테고리 별 상품 리스트
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 8
-	 */
-	Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch);
-
 	/**
 	 * 몰메인 BESTITEM 카테고리 목록
 	 * @param
@@ -198,7 +190,7 @@ public interface TsfDisplayDao {
 	 * @since 2021. 4. 28
 	 */
 	Collection<BrandGroup> getBrandImgList(BrandGroup brandGroup);
-	
+
 	/**
 	 * 전체 브랜드
 	 * @param

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

@@ -21,6 +21,7 @@ import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.Tmtb;
+import com.style24.persistence.domain.searchengine.SearchEngine;
 
 /**
  * 상품 Dao
@@ -363,4 +364,22 @@ public interface TsfGoodsDao {
 	 * @date 2021. 04. 27
 	 */
 	Collection<Goods> getDelvFeeSaveGoodsList(Goods param);
+
+	/**
+	 * 카테고리 별 상품수
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	int getCategoryGoodsCount(SearchEngine params);
+
+	/**
+	 * 카테고리별 상품 목록
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 8
+	 */
+	Collection<SearchEngine> getCategoryGoodsList(SearchEngine params);
 }

+ 20 - 0
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -442,4 +442,24 @@ public interface TsfPlanningDao {
 	 */
 	Collection<Plan> getCustomerGradeAccessibleList(Plan plan);
 	
+	/**
+	 * 기획전/이벤트 비회원 접근 조회
+	 *
+	 * @param Plan
+	 * @return int
+	 * @author sowon
+	 * @date 2021. 5. 4
+	 */
+	int getNonmemberGradeAccessible(Plan plan);
+	
+	/**
+	 * 기획전/이벤트 접근 프론트 구분
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 22
+	 */
+	String getFrontAccessibleList(Plan plan);
+	
 }

+ 177 - 144
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -488,6 +488,11 @@ public class TsfCartService {
 				if (cart.getTmtbDcAmt() == 0) {
 					cart.setTmtbDcAmt(cart.getCurrPrice());
 				}
+				if(cart.getPntRate() > 0) {
+					cart.setSavePntAmt((int) (cart.getTmtbDcAmt() * cart.getPntRate() / 100.0));
+				} else {
+					cart.setSavePntAmt(0);
+				}
 			}
 		}
 
@@ -506,6 +511,32 @@ public class TsfCartService {
 		return order;
 	}
 
+	// 장바구니 수량 계산(품절제거)
+	@SuppressWarnings("unchecked")
+	public Order getCartNotSoldoutCnt() {
+		Order order = new Order();
+		//ModelAndView result = new ModelAndView();
+		GagaMap result = new GagaMap();							// return
+		List<Integer> cartSqs = new ArrayList<Integer>();				// 품절 제외 장바구니 리스트
+
+		// 로그인 체크
+		if(TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			order.setCustNo(0);
+		}
+		order.setFrontGb(TsfSession.getFrontGb());
+		order.setJsessionId(TscSession.getSessionId());
+
+		// 장바구니 상품 조회
+		Collection<Order> cartGoodsList = cartDao.getCartGoodsList(order);
+
+		// 총계 금액 계산 (수량 계산 내부에 존재)
+		setCartListTotAmtInfo(cartGoodsList, order);
+
+		return order;
+	}
+
 	/**
 	 * 다다익선 할인 금액 조회
 	 * @param param
@@ -519,176 +550,178 @@ public class TsfCartService {
 		param.setFrontGb(TsfSession.getFrontGb());
 		Collection<Order> cartGoodsList = coreOrderService.getCartGoodsList(param);
 
-		// 장바구니 내 수량 다다익선 적용 가능 리스트 조회 (등록된 기본,적용 상품 정보 전체 조회)
-		Collection<Order> tmtbApplyList = cartDao.selectMoreBetterApplyCartList(param);
+		if(param.getCustNo() > 0 ) {
+			// 장바구니 내 수량 다다익선 적용 가능 리스트 조회 (등록된 기본,적용 상품 정보 전체 조회)
+			Collection<Order> tmtbApplyList = cartDao.selectMoreBetterApplyCartList(param);
 
-		// 장바구니 등록 다다익선 일련번호 지정
-		List<Integer> applySq 		= new ArrayList<Integer>();
-		
-		for(Order tmtbApply : tmtbApplyList) {
-			if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb()) || TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
-				if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb())) {
-					applySq.add(tmtbApply.getQtyTmtbSq());
-				}
-				if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
-					applySq.add(tmtbApply.getAmtTmtbSq());
+			// 장바구니 등록 다다익선 일련번호 지정
+			List<Integer> applySq 		= new ArrayList<Integer>();
+
+			for(Order tmtbApply : tmtbApplyList) {
+				if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb()) || TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
+					if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb())) {
+						applySq.add(tmtbApply.getQtyTmtbSq());
+					}
+					if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
+						applySq.add(tmtbApply.getAmtTmtbSq());
+					}
 				}
 			}
-		}
-		param.setTmtbSqs(applySq.stream().mapToInt(Integer::intValue).toArray());
-
-		// 섹션 정보 조회 후 할인 여부 판단
-		Collection<Order> tmtbSectionList = cartDao.selectTmtbSectionValList(applySq);
-		
-		for(Order applyInfo : tmtbApplyList) {													// 기준 상품 및 다다익선 정보 조회
-			// 다다익선 할인 조건 조회
-			for(Order section : tmtbSectionList) {
-				if(applyInfo.getQtyTmtbSq() == section.getTmtbSq()) {
-					// 수량 적용 다다익선
-					if (section.getSectionVal() <= applyInfo.getQtyTmtbSumQty()) {             // 장바구니 수량 할인 기준 달성시
-						if (applyInfo.getQtySectionVal() <= section.getSectionVal()) {            // 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
-							applyInfo.setQtySectionVal(section.getSectionVal());
-							applyInfo.setApplyQtySectionYn("Y");
-							applyInfo.setQtyDcWay(section.getDcWay());
-							applyInfo.setQtyDcVal(section.getDcVal());
-						}
-					} else {
-						if (applyInfo.getQtySectionVal() < 1 && applyInfo.getQtyGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
-							applyInfo.setApplyQtySectionYn("N");
+			param.setTmtbSqs(applySq.stream().mapToInt(Integer::intValue).toArray());
+
+			// 섹션 정보 조회 후 할인 여부 판단
+			Collection<Order> tmtbSectionList = cartDao.selectTmtbSectionValList(applySq);
+
+			for(Order applyInfo : tmtbApplyList) {													// 기준 상품 및 다다익선 정보 조회
+				// 다다익선 할인 조건 조회
+				for(Order section : tmtbSectionList) {
+					if(applyInfo.getQtyTmtbSq() == section.getTmtbSq()) {
+						// 수량 적용 다다익선
+						if (section.getSectionVal() <= applyInfo.getQtyTmtbSumQty()) {             // 장바구니 수량 할인 기준 달성시
+							if (applyInfo.getQtySectionVal() <= section.getSectionVal()) {            // 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
+								applyInfo.setQtySectionVal(section.getSectionVal());
+								applyInfo.setApplyQtySectionYn("Y");
+								applyInfo.setQtyDcWay(section.getDcWay());
+								applyInfo.setQtyDcVal(section.getDcVal());
+							}
+						} else {
+							if (applyInfo.getQtySectionVal() < 1 && applyInfo.getQtyGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
+								applyInfo.setApplyQtySectionYn("N");
+							}
 						}
 					}
-				}
 
-				if (applyInfo.getAmtTmtbSq() == section.getTmtbSq()) {
-					// 금액 적용 다다익선
-					if(section.getSectionVal() <= applyInfo.getAmtTmtbSumAmt()) {			// 장바구니 수량 할인 기준 달성시
-						if(applyInfo.getAmtSectionVal() <= section.getSectionVal()) {			// 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
-							applyInfo.setAmtSectionVal(section.getSectionVal());
-							applyInfo.setApplyAmtSectionYn("Y");
-							applyInfo.setAmtDcWay(section.getDcWay());
-							applyInfo.setAmtDcVal(section.getDcVal());
-						}
-					} else {
-						if(applyInfo.getAmtSectionVal() < 1 && applyInfo.getAmtGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
-							applyInfo.setApplyAmtSectionYn("N");
+					if (applyInfo.getAmtTmtbSq() == section.getTmtbSq()) {
+						// 금액 적용 다다익선
+						if(section.getSectionVal() <= applyInfo.getAmtTmtbSumAmt()) {			// 장바구니 수량 할인 기준 달성시
+							if(applyInfo.getAmtSectionVal() <= section.getSectionVal()) {			// 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
+								applyInfo.setAmtSectionVal(section.getSectionVal());
+								applyInfo.setApplyAmtSectionYn("Y");
+								applyInfo.setAmtDcWay(section.getDcWay());
+								applyInfo.setAmtDcVal(section.getDcVal());
+							}
+						} else {
+							if(applyInfo.getAmtSectionVal() < 1 && applyInfo.getAmtGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
+								applyInfo.setApplyAmtSectionYn("N");
+							}
 						}
 					}
 				}
 			}
-		}
 
-		// 수량 다다익선에 맞춰 정렬
-		Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
-			@Override
-			public int compare(Order c1, Order c2) {
-				return c1.getQtyTmtbSq() - c2.getQtyTmtbSq();
-			}
-		});
+			// 수량 다다익선에 맞춰 정렬
+			Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
+				@Override
+				public int compare(Order c1, Order c2) {
+					return c1.getQtyTmtbSq() - c2.getQtyTmtbSq();
+				}
+			});
 
-		// 수량 다다익선 적용 상품 할인 금액 계산
-		int leftAmt = 0;
-		int i = 0;
+			// 수량 다다익선 적용 상품 할인 금액 계산
+			int leftAmt = 0;
+			int i = 0;
 
-		for(Order resultAmt : tmtbApplyList) {
-			int tempAmt  = 0;
-			
-			if("Y".equals(resultAmt.getApplyQtySectionYn()) && resultAmt.getQtyTmtbSq() > 0) {
-				if (TscConstants.DcWay.AMT.value().equals(resultAmt.getQtyDcWay())) {        // 할인 방식 금액일경우
-					i++;
-					tempAmt = resultAmt.getCurrPrice();
+			for(Order resultAmt : tmtbApplyList) {
+				int tempAmt  = 0;
 
-					if (i == 1) {
-						leftAmt = resultAmt.getQtyDcVal();
-					}
+				if("Y".equals(resultAmt.getApplyQtySectionYn()) && resultAmt.getQtyTmtbSq() > 0) {
+					if (TscConstants.DcWay.AMT.value().equals(resultAmt.getQtyDcWay())) {        // 할인 방식 금액일경우
+						i++;
+						tempAmt = resultAmt.getCurrPrice();
 
-					if (i == resultAmt.getQtyTmtbCnt()) {
-						resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
-						resultAmt.setTmtb1DcAmt(leftAmt); // tmtb1 할인금액
-						leftAmt = 0;
-						i = 0;
-					} else {
-						double tempDcAmt = resultAmt.getQtyDcVal() * ((tempAmt) / (double)resultAmt.getQtyTmtbSumAmt());
-						leftAmt -= (int)tempDcAmt;
-						resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
-						
-						resultAmt.setTmtb1DcAmt((int)tempDcAmt); // tmtb1 할인금액
+						if (i == 1) {
+							leftAmt = resultAmt.getQtyDcVal();
+						}
+
+						if (i == resultAmt.getQtyTmtbCnt()) {
+							resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
+							resultAmt.setTmtb1DcAmt(leftAmt); // tmtb1 할인금액
+							leftAmt = 0;
+							i = 0;
+						} else {
+							double tempDcAmt = resultAmt.getQtyDcVal() * ((tempAmt) / (double)resultAmt.getQtyTmtbSumAmt());
+							leftAmt -= (int)tempDcAmt;
+							resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
+
+							resultAmt.setTmtb1DcAmt((int)tempDcAmt); // tmtb1 할인금액
+						}
+					} else {                                                                // 할인 방식 할인율일 경우
+						tempAmt = resultAmt.getCurrPrice();
+						tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getQtyDcVal() / 100.0)));
+						resultAmt.setTmtbDcAmt(tempAmt);
+
+						// 2021.04.29 다다익선할인금액수정
+						resultAmt.setTmtb1DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getQtyDcVal() / 100.0))); // tmtb1 할인금액
 					}
-				} else {                                                                // 할인 방식 할인율일 경우
-					tempAmt = resultAmt.getCurrPrice();
-					tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getQtyDcVal() / 100.0)));
-					resultAmt.setTmtbDcAmt(tempAmt);
-					
-					// 2021.04.29 다다익선할인금액수정
-					resultAmt.setTmtb1DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getQtyDcVal() / 100.0))); // tmtb1 할인금액
 				}
-			}
 
-			if (resultAmt.getTmtbDcAmt() > 0) {
-				resultAmt.setCurrPrice(resultAmt.getTmtbDcAmt());
+				if (resultAmt.getTmtbDcAmt() > 0) {
+					resultAmt.setCurrPrice(resultAmt.getTmtbDcAmt());
+				}
 			}
-		}
 
-		// 금액 다다익선에 맞춰 정렬
-		Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
-			@Override
-			public int compare(Order c1, Order c2) {
-				return c1.getAmtTmtbSq() - c2.getAmtTmtbSq();
-			}
-		});
+			// 금액 다다익선에 맞춰 정렬
+			Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
+				@Override
+				public int compare(Order c1, Order c2) {
+					return c1.getAmtTmtbSq() - c2.getAmtTmtbSq();
+				}
+			});
+
+			// 금액 다다익선 할인 계산
+			leftAmt = 0;
+			i = 0;
+			for(Order resultAmt : tmtbApplyList) {
+				int tempAmt  = 0;
+
+				if("Y".equals(resultAmt.getApplyAmtSectionYn()) && resultAmt.getAmtTmtbSq() > 0) {
+					if (TscConstants.DcWay.AMT.value().equals(resultAmt.getAmtDcWay())) {        // 할인 방식 금액일경우
+						i++;
+						tempAmt = resultAmt.getCurrPrice();
+						if (i == 1) {
+							leftAmt = resultAmt.getAmtDcVal();
+						}
 
-		// 금액 다다익선 할인 계산
-		leftAmt = 0;
-		i = 0;
-		for(Order resultAmt : tmtbApplyList) {
-			int tempAmt  = 0;
-			
-			if("Y".equals(resultAmt.getApplyAmtSectionYn()) && resultAmt.getAmtTmtbSq() > 0) {
-				if (TscConstants.DcWay.AMT.value().equals(resultAmt.getAmtDcWay())) {        // 할인 방식 금액일경우
-					i++;
-					tempAmt = resultAmt.getCurrPrice();
-					if (i == 1) {
-						leftAmt = resultAmt.getAmtDcVal();
-					}
+						if (i == resultAmt.getAmtTmtbCnt()) {
+							resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
+							resultAmt.setTmtb2DcAmt(leftAmt); // tmtb1 할인금액
 
-					if (i == resultAmt.getAmtTmtbCnt()) {
-						resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
-						resultAmt.setTmtb2DcAmt(leftAmt); // tmtb1 할인금액
-						
-						leftAmt = 0;
-						i = 0;
-					} else {
-						double tempDcAmt = resultAmt.getAmtDcVal() * ((tempAmt) / (double)resultAmt.getAmtTmtbSumAmt());
-						leftAmt -= (int)tempDcAmt;
-						resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
-						
-						resultAmt.setTmtb2DcAmt((int)tempDcAmt); // tmtb1 할인금액
+							leftAmt = 0;
+							i = 0;
+						} else {
+							double tempDcAmt = resultAmt.getAmtDcVal() * ((tempAmt) / (double)resultAmt.getAmtTmtbSumAmt());
+							leftAmt -= (int)tempDcAmt;
+							resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
+
+							resultAmt.setTmtb2DcAmt((int)tempDcAmt); // tmtb1 할인금액
+						}
+					} else {                                                                // 할인 방식 할인율일 경우
+						tempAmt = resultAmt.getCurrPrice();
+						tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getAmtDcVal() / 100.0)));
+						resultAmt.setTmtbDcAmt(tempAmt);
+
+						// 2021.04.29 다다익선할인금액수정
+						resultAmt.setTmtb2DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getAmtDcVal() / 100.0))); // tmtb2 할인금액
 					}
-				} else {                                                                // 할인 방식 할인율일 경우
-					tempAmt = resultAmt.getCurrPrice();
-					tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getAmtDcVal() / 100.0)));
-					resultAmt.setTmtbDcAmt(tempAmt);
-					
-					// 2021.04.29 다다익선할인금액수정
-					resultAmt.setTmtb2DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getAmtDcVal() / 100.0))); // tmtb2 할인금액
 				}
 			}
-		}
 
-		// 장바구니 정보에 수량 다다익선 정보 입력
-		for (Order cart : cartGoodsList) {
-			for (Order apply : tmtbApplyList) {
-				if (cart.getCartSq().equals(apply.getCartSq())) {
-					// 2021.02.24 jsh77b
-					cart.setTmtb1DcAmt(apply.getTmtb1DcAmt());
-					cart.setTmtb2DcAmt(apply.getTmtb2DcAmt());
-					
-					cart.setTmtbDcAmt(apply.getTmtbDcAmt());
-					cart.setApplyQtySectionYn(apply.getApplyQtySectionYn());
-					cart.setQtyTmtbNm(apply.getQtyTmtbNm());
-					cart.setQtyTmtbSq(apply.getQtyTmtbSq());
-					cart.setApplyAmtSectionYn(apply.getApplyAmtSectionYn());
-					cart.setAmtTmtbNm(apply.getAmtTmtbNm());
-					cart.setAmtTmtbSq(apply.getAmtTmtbSq());
+			// 장바구니 정보에 수량 다다익선 정보 입력
+			for (Order cart : cartGoodsList) {
+				for (Order apply : tmtbApplyList) {
+					if (cart.getCartSq().equals(apply.getCartSq())) {
+						// 2021.02.24 jsh77b
+						cart.setTmtb1DcAmt(apply.getTmtb1DcAmt());
+						cart.setTmtb2DcAmt(apply.getTmtb2DcAmt());
+
+						cart.setTmtbDcAmt(apply.getTmtbDcAmt());
+						cart.setApplyQtySectionYn(apply.getApplyQtySectionYn());
+						cart.setQtyTmtbNm(apply.getQtyTmtbNm());
+						cart.setQtyTmtbSq(apply.getQtyTmtbSq());
+						cart.setApplyAmtSectionYn(apply.getApplyAmtSectionYn());
+						cart.setAmtTmtbNm(apply.getAmtTmtbNm());
+						cart.setAmtTmtbSq(apply.getAmtTmtbSq());
+					}
 				}
 			}
 		}

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

@@ -495,7 +495,7 @@ public class TsfCouponService {
 	 *
 	 * @param coupon
 	 * @return Collection<Coupon>
-	 * @author card007
+	 * @author sowon
 	 * @since 2021.02.25
 	 */
 	@Transactional("shopTxnManager")
@@ -566,6 +566,7 @@ public class TsfCouponService {
 		couponFirst.setCustNo(custNo);
 		couponFirst.setCpnId(Integer.parseInt(custGradePolicy.getGradeCpnId1()));
 		couponFirst.setFrontGb(frontGb);
+		couponFirst.setPubReason(TscConstants.PubReason.CHANGE_CUSTOMER_GRADE.value());
 		int custGradeCpnFirst = saveCustGradeCoupon(couponFirst);
 
 		// 5. 회원등급 정책 쿠폰2 발급
@@ -573,6 +574,7 @@ public class TsfCouponService {
 		couponSecond.setCustNo(custNo);
 		couponSecond.setCpnId(Integer.parseInt(custGradePolicy.getGradeCpnId2()));
 		couponSecond.setFrontGb(frontGb);
+		couponSecond.setPubReason(TscConstants.PubReason.CHANGE_CUSTOMER_GRADE.value());
 		int custGradeCpnSecond = saveCustGradeCoupon(couponSecond);
 
 		// 6. 회원등급 정책 쿠폰3 발급(생일쿠폰)
@@ -586,6 +588,7 @@ public class TsfCouponService {
 				couponThird.setCustNo(custNo);
 				couponThird.setCpnId(Integer.parseInt(custGradePolicy.getGradeCpnId3()));
 				couponThird.setFrontGb(frontGb);
+				couponThird.setPubReason(TscConstants.PubReason.BIRTHDAY.value());
 				birthCpn = saveCustGradeCoupon(couponThird);
 			}
 		}
@@ -611,7 +614,7 @@ public class TsfCouponService {
 				custCoupon.setCpnId(custGradeCoupon.getCpnId());
 				custCoupon.setAvailStdt(custGradeCoupon.getAvailStdt());
 				custCoupon.setAvailEddt(custGradeCoupon.getAvailEddt());
-				custCoupon.setPubReason(TscConstants.PubReason.CHANGE_CUSTOMER_GRADE.value());
+				custCoupon.setPubReason(coupon.getPubReason());
 				custCoupon.setEndAlimSendYn("N");		// 알림 발송 여부(발송되면 Y)
 				custCoupon.setUpdNo(coupon.getCustNo());
 				custCoupon.setRegNo(coupon.getCustNo());

+ 60 - 28
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -1,8 +1,9 @@
 package com.style24.front.biz.service;
 
-import java.util.Collection;
 import java.util.ArrayList;
+import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
@@ -23,9 +24,11 @@ import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
-import com.style24.persistence.domain.Login;
+import com.style24.persistence.domain.searchengine.Filter;
+import com.style24.persistence.domain.searchengine.SearchEngine;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -294,6 +297,26 @@ public class TsfDisplayService {
 		return this.getAllCategoryList(cate);
 	}
 
+	/**
+	 * 브랜드 카테고리 목록
+	 * @param brandGroupNo - 브랜드그룹번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 4. 12
+	 */
+	@Cacheable(value = "cate", key = "'outletCate-'.concat(#formalGb)")
+	public Collection<Cate1> getOutletCategoryList(String formalGb) {
+		Cate4Srch cate = new Cate4Srch();
+		cate.setSiteCd(TscConstants.Site.STYLE24.value()); // 사이트코드
+
+		cate.setFormalGb(formalGb);
+		cate.setCateGb(TsfConstants.CateGb.BYITEM.value());
+		cate.setCateType(TsfConstants.CateType.GOODS.value()); // 상품분류카테고리
+		cate.setSoldoutGoodsDispYn(envsetService.getSoldoutGoodsDisplayYn(TscConstants.Site.STYLE24.value()));
+
+		return this.getAllCategoryList(cate);
+	}
+
 	/**
 	 * 메인 레이아웃 목록
 	 * @param cateNo - 카테고리No
@@ -422,58 +445,67 @@ public class TsfDisplayService {
 
 		Collection<Goods> goodsList = goodsDao.getContentsCategoryGoodsList(cate4Srch);
 
-		if(goodsList.size() < 100){
+		if (goodsList.size() < 100) {
 			// TODO 추천솔루션
 		}
 
 		return goodsList;
 	}
 
-
 	/**
-	 * 상품카테고리 필터 목록
-	 * @param
+	 * 상품리스트 카테고리 필터 목록
+	 * @param params - 검색엔진 정보
 	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
+	 * @author gagamel
+	 * @date 2021. 5. 3
 	 */
-	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb) {
-		cate4Srch.setFilterGb(filterGb);
-		return displayDao.getCategoryFilter(cate4Srch);
+	public Collection<Filter> getGoodsListCategoryFilterList(SearchEngine params) {
+		params.setSiteCd(TscConstants.Site.STYLE24.value());
+		if (StringUtils.isBlank(params.getFormalGb())) {
+			params.setFormalGb("G009_10");
+		}
+		return displayDao.getGoodsListCategoryFilterList(params);
 	}
 
 	/**
-	 * 상품카테고리 필터 혜택 목록
-	 * @param
+	 * 카테고리별 필터 목록
+	 * @param filterList - 필터 목록
+	 * @param filterGb - 필터 구분
 	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 7
+	 * @author gagamel
+	 * @date 2021. 5. 3
 	 */
-	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch) {
-		return displayDao.getCategoryFilterBenefit(cate4Srch);
+	public Collection<Filter> getCategoryFilterList(Collection<Filter> filterList, String filterGb) {
+		Collection<Filter> resultList = new ArrayList<Filter>();
+		for (Filter filter : filterList) {
+			if (filter.getFilterGb().equals(filterGb)) {
+				resultList.add(filter);
+			}
+		}
+		return resultList;
 	}
 
 	/**
-	 * 카테고리 별 상품 수
+	 * 상품카테고리 필터 목록
 	 * @param
 	 * @return
 	 * @author bin2107
-	 * @date 2021. 4. 7
+	 * @date 2021. 4. 5
 	 */
-	public int getCategoryGoodsCount(GoodsSearch goodsSearch) {
-		return displayDao.getCategoryGoodsCount(goodsSearch);
+	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb) {
+		cate4Srch.setFilterGb(filterGb);
+		return displayDao.getCategoryFilter(cate4Srch);
 	}
 
 	/**
-	 * 카테고리 별 상품 리스트
+	 * 상품카테고리 필터 혜택 목록
 	 * @param
 	 * @return
 	 * @author bin2107
-	 * @date 2021. 4. 8
+	 * @date 2021. 4. 7
 	 */
-	public Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch) {
-		Collection<Goods> goodsList = displayDao.getCategoryGoodsList(goodsSearch);
-		return goodsList;
+	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch) {
+		return displayDao.getCategoryFilterBenefit(cate4Srch);
 	}
 
 	/**
@@ -486,7 +518,7 @@ public class TsfDisplayService {
 	public Collection<BrandGroup> getBrandImgList(BrandGroup brandGroup) {
 		return displayDao.getBrandImgList(brandGroup);
 	}
-	
+
 	/**
 	 * 전체 브랜드
 	 * @param
@@ -505,7 +537,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @since 2021. 4. 14
 	 */
-	public Collection<Contents> getGnbTabBannerlist(Contents contenst){
+	public Collection<Contents> getGnbTabBannerlist(Contents contenst) {
 		Collection<Contents> contentsList = displayDao.getGnbTabBannerList(contenst);
 		return contentsList;
 	}

+ 51 - 27
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -3,6 +3,7 @@ package com.style24.front.biz.service;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import com.style24.persistence.domain.searchengine.SearchEngine;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -22,7 +23,6 @@ import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsSafeNo;
-import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.GoodsViewHst;
@@ -79,7 +79,7 @@ public class TsfGoodsService {
 			} else {
 				goodsViewHst.setReferer(referer);
 			}
-		} 
+		}
 
 		if (TsfSession.getInfo() != null) {
 			goodsViewHst.setCustNo(TsfSession.getInfo().getCustNo());
@@ -452,14 +452,14 @@ public class TsfGoodsService {
 		//String[][] arrGoodsStoreList = null;	// 상품코드, 매장코드, 상품별 주문수량
 
 		log.info("[getGoodsSetStockQty] goodsStock = {}", goodsStock);
-		
+
 		int ableOrderCnt = 0;
 		for (String arrGoodsCd : goodsStock.getArrGoodsOption()) {	// [{goodsCd|optCd|qty},{goodsCd|optCd|qty}]
 
 			String[] goodsSizeInfo = arrGoodsCd.split("\\|");
 			log.info("[getGoodsSetStockQty] goodsSizeInfo = {}", goodsSizeInfo);
 			if (goodsSizeInfo.length == 3) {
-				
+
 				GoodsStock tmpStock = new GoodsStock();
 				tmpStock.setGoodsCd(goodsSizeInfo[0]);
 				tmpStock.setOptCd(goodsSizeInfo[1]);
@@ -547,7 +547,7 @@ public class TsfGoodsService {
 	public Collection<Goods> getTmtbGoodsList(Goods goods) {
 		return goodsDao.getTmtbGoodsList(goods);
 	}
-	
+
 	/**
 	 * 상품 추천상품 목록
 	 * @param goods
@@ -558,7 +558,6 @@ public class TsfGoodsService {
 	public Collection<Goods> getRecommendGoodsList(Goods goods) {
 		return goodsDao.getRecommendGoodsList(goods);
 	}
-	
 
 	/**
 	 * 재입고 알림 미 알림 조회
@@ -730,7 +729,7 @@ public class TsfGoodsService {
 	public Collection<Tmtb> getTmtbList(Goods goods) {
 		return goodsDao.getTmtbList(goods);
 	}
-	
+
 	/**
 	 * 상품의 다다익선 목록 
 	 * @param goods
@@ -759,9 +758,10 @@ public class TsfGoodsService {
 
 		if (cate.getContentsLoc().equals("SCM002") || cate.getContentsLoc().equals("SBM007") || cate.getContentsLoc().equals("SMM003") || cate.getContentsLoc().equals("SBM003")) { // 신상품인 경우
 			int maxRow = 20;
-			if(cate.getContentsLoc().equals("SBM003")){
+			if (cate.getContentsLoc().equals("SBM003")) {
 				maxRow = 3;
 			}
+
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 
 			// 조회된 데이터가 없거나 건수가 20개 미만이면 신규상품(=정상상품) 조회
@@ -778,6 +778,7 @@ public class TsfGoodsService {
 				}
 				maxRow = maxRow - goodsList.size();
 				cate.setMaxRow(maxRow);
+				cate.setCateGb("G032_101");
 				if(cate.getContentsLoc().equals("SBM003")){
 					cate.setCate1No(null);
 				}
@@ -789,36 +790,38 @@ public class TsfGoodsService {
 
 			// 추천솔루션 데이터가 없으면 베스트로 등록된 상품 조회
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
-			for(Goods temp : goodsList){
-				if(temp.getSizes()!=null){
+			for (Goods temp : goodsList) {
+				if (temp.getSizes() != null) {
 					temp.setSizeArr(temp.getSizes().split(","));
 				}
-				if(temp.getColorChips()!=null){
+				if (temp.getColorChips() != null) {
 					temp.setColorArr(temp.getColorChips().split(","));
 				}
-				if(temp.getIcon()!=null){
+				if (temp.getIcon() != null) {
 					temp.setBenefitArr(temp.getIcon().split(","));
 				}
 			}
 		} else if (cate.getContentsLoc().equals("SBM013")) {
-			GoodsSearch goodsSearch = new GoodsSearch();
-			goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
-			goodsSearch.setFormalGb(cate.getFormalGb());
-			goodsSearch.setCustGb(cate.getCustGb());
-			goodsSearch.setCustNo(cate.getCustNo());
-			goodsSearch.setBrandGroupNo(cate.getBrandGroupNo());
-			goodsSearch.setMaxRow(cate.getMaxRow());
-			goodsSearch.setContentsLoc(cate.getContentsLoc());
-			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
-			
-			for(Goods temp : goodsList){
-				if(temp.getSizes()!=null){
+//			GoodsSearch goodsSearch = new GoodsSearch();
+//			goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
+//			goodsSearch.setFormalGb(cate.getFormalGb());
+//			goodsSearch.setCustGb(cate.getCustGb());
+//			goodsSearch.setCustNo(cate.getCustNo());
+//			goodsSearch.setBrandGroupNo(cate.getBrandGroupNo());
+//			goodsSearch.setMaxRow(cate.getMaxRow());
+//			goodsSearch.setContentsLoc(cate.getContentsLoc());
+//			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
+			log.info("SBM013 goodsList cate>>>{}",cate);
+			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
+
+			for (Goods temp : goodsList) {
+				if (temp.getSizes() != null) {
 					temp.setSizeArr(temp.getSizes().split(","));
 				}
-				if(temp.getColorChips()!=null){
+				if (temp.getColorChips() != null) {
 					temp.setColorArr(temp.getColorChips().split(","));
 				}
-				if(temp.getIcon()!=null){
+				if (temp.getIcon() != null) {
 					temp.setBenefitArr(temp.getIcon().split(","));
 				}
 			}
@@ -828,7 +831,7 @@ public class TsfGoodsService {
 
 		return goodsList;
 	}
-	
+
 	/**
 	 * ep쿠폰 다운 처리
 	 *
@@ -842,5 +845,26 @@ public class TsfGoodsService {
 		return couponService.createEpCoupon(goods);
 	}
 
+	/**
+	 * 카테고리별 상품수
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	public int getCategoryGoodsCount(SearchEngine params) {
+		return goodsDao.getCategoryGoodsCount(params);
+	}
+
+	/**
+	 * 카테고리별 상품 목록
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 8
+	 */
+	public Collection<SearchEngine> getCategoryGoodsList(SearchEngine params) {
+		return goodsDao.getCategoryGoodsList(params);
+	}
 
 }

+ 20 - 8
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -124,20 +124,16 @@ public class TsfPlanningService {
 
 		Plan plan = new Plan();
 		plan.setPlanSq(planSq);
-		
-		// 비회원일 때
-		if (!TsfSession.isLogin()) {
-			msg = "로그인 후 접근 가능합니다.";
-		}
 
 		// 디바이스접근가능여부 조회
 		plan.setFrontGb(TsfSession.getFrontGb());
 		if ("N".equals(planningDao.getDeviceAccessibleYn(plan))) {
-			msg = "PC웹에서만 접근이 가능합니다.";
+			String frontGb = planningDao.getFrontAccessibleList(plan);
+			msg = frontGb + "에서만 접근이 가능합니다.";
 			if ("M".equals(TsfSession.getFrontGb())) {
-				msg = "모바일웹에서만 접근이 가능합니다.";
+				msg =  frontGb + "에서만 접근이 가능합니다.";
 			} else if ("A".equals(TsfSession.getFrontGb())) {
-				msg = "에서만 접근이 가능합니다.";
+				msg =  frontGb + "에서만 접근이 가능합니다.";
 			}
 		}
 
@@ -146,6 +142,12 @@ public class TsfPlanningService {
 			msg = "신규회원만 접근 가능합니다.";
 		}
 		
+		if (!TsfSession.isLogin()) {
+			if (planningDao.getNonmemberGradeAccessible(plan) > 0) {
+				msg = "로그인 후 이용 가능합니다.";
+			}
+		}
+		
 		if (TsfSession.isLogin()) {
 			// 고객구분접근가능여부 조회
 			plan.setCustGb(TsfSession.getCustGb());
@@ -637,4 +639,14 @@ public class TsfPlanningService {
 	public Collection<Plan> getEntryReplyAttachList(Plan plan){
 		return planningDao.getEntryReplyAttachList(plan);
 	}
+	
+	/**
+	 * 기획전/이벤트 비회원 접근 조회
+	 *
+	 * @param Plan
+	 * @return int
+	 * @author sowon
+	 * @date 2021. 5. 4
+	 */
+	
 }

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

@@ -358,7 +358,26 @@ public class TsfReviewService {
 	 * @since 2021. 3. 26
 	 */
 	public Collection<Review> getAlreadyReviewList(Review review){
-		return reviewDao.getAlreadyReviewList(review);
+		Collection<Review> reviewList = new ArrayList<>();
+		
+		for (Review tmpReview : reviewDao.getAlreadyReviewList(review)) {
+			// 세트상품 옵션별 배열로 담기
+			if (tmpReview.getItemNm().contains("!@!")) {
+				tmpReview.setItemNmArr(tmpReview.getItemNm().split("!@!"));
+				tmpReview.setColorNmArr(tmpReview.getColorNm().split(","));
+				tmpReview.setOptCd1Arr(tmpReview.getOptCd1().split(","));
+				tmpReview.setOptCd2Arr(tmpReview.getOptCd2().split(","));
+			} else {
+				String[] arr = {tmpReview.getItemNm()}, arr2 = {tmpReview.getColorNm()}, arr3 = {tmpReview.getOptCd1()}, arr4 = {tmpReview.getOptCd2()};
+				tmpReview.setItemNmArr(arr);
+				tmpReview.setColorNmArr(arr2);
+				tmpReview.setOptCd1Arr(arr3);
+				tmpReview.setOptCd2Arr(arr4);
+			}
+			reviewList.add(tmpReview);
+		}
+		
+		return reviewList;
 	}
 	
 	/**

+ 40 - 0
src/main/java/com/style24/front/biz/thirdparty/SearchEngineDiquest.java

@@ -0,0 +1,40 @@
+package com.style24.front.biz.thirdparty;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 검색엔진 - NHN다이퀘스트
+ *
+ * @author gagamel
+ * @since 2021. 04. 29
+ */
+@Component
+@Slf4j
+public class SearchEngineDiquest {
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	private String ipAddr;
+	private String port;
+
+//	@PostConstruct
+//	public void init() {
+//		ipAddr = env.getProperty("search.engine.diquest.ip");
+//		port = env.getProperty("search.engine.diquest.port");
+//
+//		log.debug("\n\n---- NHN Diquest initialization started ----");
+//		log.debug("ipAddr: [{}]", ipAddr);
+//		log.debug("port: [{}]", port);
+//		log.debug("\n--- NHN Diquest initialization completed ----\n");
+//	}
+
+}

+ 35 - 4
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -359,10 +359,6 @@ public class TsfCartController extends TsfBaseController {
 	@ResponseBody
 	public Order getCartList() {
 		Order cart = new Order();
-		int custNo = 0;
-		if(TsfSession.isLogin()) {
-			custNo = TsfSession.getInfo().getCustNo();
-		}
 
 		// 장바구니 상품목록
 		cart = cartService.getCartGoodsList(cart);
@@ -377,9 +373,44 @@ public class TsfCartController extends TsfBaseController {
 			}
 		});
 
+		List<Order> cartList = new ArrayList<>();
+		for(Order oneData : cart.getDelvAllCartList()) {
+			if(oneData.getOrdCanQty() < 6 && oneData.getOrdCanQty() > 0) {
+				cartList.add(oneData);
+			}
+		}
+
+		// 장바구니 등록 최신순 정렬
+		Collections.sort((ArrayList<Order>) cart.getDelvAllCartList(), new Comparator<Order>() {
+			@Override
+			public int compare(Order c1, Order c2) {
+				return c2.getCartSq() - c1.getCartSq();	//역순 정렬
+			}
+		});
+
+		for(Order oneData : cart.getDelvAllCartList()) {
+			if(oneData.getOrdCanQty() > 5) {
+				cartList.add(oneData);
+			}
+		}
+
+		cart.setDelvAllCartList(cartList);
+
 		return cart;
 	}
 
+	/**
+	 * 장바구니 수량 조회(모바일 헤더)
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 05. 04
+	 */
+	@ResponseBody
+	@GetMapping("/goods/not/soldout/cnt")
+	public Order getCartNotSoldoutCnt() {
+		return cartService.getCartNotSoldoutCnt();
+	}
+
 	/**
 	 * 상품 품절 제외 옵션 조회
 	 * @param param

+ 101 - 73
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -36,13 +36,14 @@ import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
 import com.style24.persistence.domain.Goods;
-import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Lookbook;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Popup;
 import com.style24.persistence.domain.Social;
+import com.style24.persistence.domain.searchengine.Filter;
+import com.style24.persistence.domain.searchengine.SearchEngine;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -168,12 +169,11 @@ public class TsfDisplayController extends TsfBaseController {
 			mainLayoutList.add(mainLayout);
 		}
 
-		mav.addObject( (StringUtils.isBlank(paramMap.get("preview")))? "" : paramMap.get("preview") );
-		mav.addObject( (StringUtils.isBlank(paramMap.get("viewDt")))? "" : paramMap.get("viewDt") );
+		mav.addObject((StringUtils.isBlank(paramMap.get("preview"))) ? "" : paramMap.get("preview"));
+		mav.addObject((StringUtils.isBlank(paramMap.get("viewDt"))) ? "" : paramMap.get("viewDt"));
 		mav.addObject("viewPage", "G037_20");
 		//mav.addObject("popupCateNo", "");
 
-		
 		//log.info("mainLayoutList::{}", mainLayoutList);
 		mav.addObject("mainLayoutList", mainLayoutList);
 		mav.setViewName(super.getDeviceViewName("display/MallMainForm"));
@@ -526,102 +526,117 @@ public class TsfDisplayController extends TsfBaseController {
 
 	/**
 	 * 카테고리 상품 목록
-	 * @param
+	 * @param params - 검색엔진 정보
 	 * @return
 	 * @author bin2107
-	 * @since 2021. 4. 2 CATE4SRCH
+	 * @since 2021. 4. 2
 	 */
 	@GetMapping("/category/goods/list/form")
-	public ModelAndView categoryGoodsListForm(Cate4Srch cate4Srch) {
+	public ModelAndView categoryGoodsListForm(SearchEngine params) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/CategoryGoodsListForm"));
 
-		if (TsfSession.isLogin()) {
-			cate4Srch.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
-		if(cate4Srch.getFormalGb() == null || cate4Srch.getFormalGb().equals("")){
-			cate4Srch.setFormalGb("G009_10");
-		}
-		cate4Srch.setFrontGb(TsfSession.getFrontGb());
-		cate4Srch.setCustGb(TsfSession.getCustGb());
-		if (cate4Srch.getBrandGroupNo() == null) {
-			cate4Srch.setBrandGroupNo(0);
-		}
-		if (cate4Srch.getCate4No() != null && !cate4Srch.getCate4No().equals("")) {
-			cate4Srch.setCateNo(cate4Srch.getCate4No());
-		} else if (cate4Srch.getCate3No() != null && !cate4Srch.getCate3No().equals("")) {
-			cate4Srch.setCateNo(cate4Srch.getCate3No());
-		} else if (cate4Srch.getCate2No() != null && !cate4Srch.getCate2No().equals("")) {
-			cate4Srch.setCateNo(cate4Srch.getCate2No());
-		} else if (cate4Srch.getCate1No() != null && !cate4Srch.getCate1No().equals("")) {
-			cate4Srch.setCateNo(cate4Srch.getCate1No());
-		}
+//		if (TsfSession.isLogin()) {
+//			cate4Srch.setCustNo(TsfSession.getInfo().getCustNo());
+//		}
+//		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
+//		if (StringUtils.isBlank(cate4Srch.getFormalGb())) {
+//			cate4Srch.setFormalGb("G009_10");
+//		}
+//		cate4Srch.setFrontGb(TsfSession.getFrontGb());
+//		cate4Srch.setCustGb(TsfSession.getCustGb());
+//		if (cate4Srch.getBrandGroupNo() == null) {
+//			cate4Srch.setBrandGroupNo(0);
+//		}
+//		if (cate4Srch.getCate4No() != null) {
+//			cate4Srch.setCateNo(cate4Srch.getCate4No());
+//		} else if (cate4Srch.getCate3No() != null) {
+//			cate4Srch.setCateNo(cate4Srch.getCate3No());
+//		} else if (cate4Srch.getCate2No() != null) {
+//			cate4Srch.setCateNo(cate4Srch.getCate2No());
+//		} else if (cate4Srch.getCate1No() != null) {
+//			cate4Srch.setCateNo(cate4Srch.getCate1No());
+//		}
+//
+//		log.info("categoryGoodsListForm cate4Srch::::{}", cate4Srch);
+//		mav.addObject("filterBrandList", displayService.getCategoryFilter(cate4Srch, "BRAND"));
+//		mav.addObject("filterSizeList", displayService.getCategoryFilter(cate4Srch, "SIZE"));
+//		mav.addObject("filterPriceList", displayService.getCategoryFilter(cate4Srch, "PRICE"));
+//		mav.addObject("filterAgeList", displayService.getCategoryFilter(cate4Srch, "AGE"));
+//		mav.addObject("filterSeasonList", displayService.getCategoryFilter(cate4Srch, "SEASON"));
+//		mav.addObject("filterColorList", displayService.getCategoryFilter(cate4Srch, "COLOR"));
+//		mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
+//		mav.addObject("sortGb", "new");
 
-		log.info("categoryGoodsListForm cate4Srch::::{}", cate4Srch);
-		mav.addObject("filterBrandList", displayService.getCategoryFilter(cate4Srch, "BRAND"));
-		mav.addObject("filterSizeList", displayService.getCategoryFilter(cate4Srch, "SIZE"));
-		mav.addObject("filterPriceList", displayService.getCategoryFilter(cate4Srch, "PRICE"));
-		mav.addObject("filterAgeList", displayService.getCategoryFilter(cate4Srch, "AGE"));
-		mav.addObject("filterSeasonList", displayService.getCategoryFilter(cate4Srch, "SEASON"));
-		mav.addObject("filterColorList", displayService.getCategoryFilter(cate4Srch, "COLOR"));
-		mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
-		mav.addObject("sortGb", "new");
 		// 브랜드그룹 정보 : 브랜드메인 링크에 설정된 기획전으로 들어올때 GNB 변경때문에 사용
-		if (cate4Srch.getBrandGroupNo() != null && !cate4Srch.getBrandGroupNo().equals("") && !cate4Srch.getBrandGroupNo().equals(0)) {
-			mav.addObject("brandGroupInfo", displayService.getGnbBrandGroup(cate4Srch.getBrandGroupNo()));
-		} else {
-			mav.addObject("brandGroupInfo", null);
+		if (params.getBrandGroupNo() != null && params.getBrandGroupNo() > 0) {
+			mav.addObject("brandGroupInfo", displayService.getGnbBrandGroup(params.getBrandGroupNo()));
+//		} else {
+//			mav.addObject("brandGroupInfo", null);
 		}
-		mav.addObject("cateInfo", cate4Srch);
+
+		mav.addObject("cateInfo", params);
+
+		// 카테고리 목록
+		mav.addObject("cateList", displayService.getAllCategoryList(params.getCateGb()));
+
+		// 상품리스트 카테고리별 필터 목록
+		Collection<Filter> filterList = displayService.getGoodsListCategoryFilterList(params);
+
+		// 필터 설정
+		mav.addObject("filterBrandList", displayService.getCategoryFilterList(filterList, "BRAND"));
+		mav.addObject("filterSizeList", displayService.getCategoryFilterList(filterList, "SIZE"));
+		mav.addObject("filterPriceList", displayService.getCategoryFilterList(filterList, "PRICE"));
+		mav.addObject("filterAgeList", displayService.getCategoryFilterList(filterList, "AGE"));
+		mav.addObject("filterSeasonList", displayService.getCategoryFilterList(filterList, "SEASON"));
+		mav.addObject("filterColorList", displayService.getCategoryFilterList(filterList, "COLOR"));
+		mav.addObject("filterBenefitList", displayService.getCategoryFilterList(filterList, "BENEFIT"));
 
 		return mav;
 	}
 
 	/**
 	 * 카테고리 상품 리스트 조회
-	 * @param
+	 * @param params - 검색엔진 정보
 	 * @return
 	 * @author bin2107
 	 * @since 2021. 4. 7
 	 */
 	@PostMapping("/category/goods/list")
 	@ResponseBody
-	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
+	public GagaMap getGoodsList(@RequestBody SearchEngine params) {
 		GagaMap result = new GagaMap();
-		log.info("getGoodsListgetGoodsListgetGoodsList::::{}", goodsSearch);
-		TscPageRequest pageable = new TscPageRequest((goodsSearch.getPageNo() > 0 ? goodsSearch.getPageNo() - 1 : 0), goodsSearch.getPageSize(), goodsSearch.getPageUnit());
+		log.info("getGoodsList's parameter::: {}", params);
+		TscPageRequest pageable = new TscPageRequest((params.getPageNo() > 0 ? params.getPageNo() - 1 : 0), params.getPageSize(), params.getPageUnit());
 
 		if (TsfSession.isLogin()) {
-			goodsSearch.setCustNo(TsfSession.getInfo().getCustNo());
+			params.setCustNo(TsfSession.getInfo().getCustNo());
 		}
 
-		goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
-		goodsSearch.setFrontGb(TsfSession.getFrontGb());
-		goodsSearch.setCustGb(TsfSession.getCustGb());
+		params.setSiteCd(TscConstants.Site.STYLE24.value());
+		params.setFrontGb(TsfSession.getFrontGb());
+		params.setCustGb(TsfSession.getCustGb());
 
-		if (goodsSearch.getBrandGroupNo() == null || goodsSearch.getBrandGroupNo().equals("")) {
-			goodsSearch.setBrandGroupNo(0);
+		if (params.getBrandGroupNo() == null) {
+			params.setBrandGroupNo(0);
 		}
 
-		if (goodsSearch.getCate4No() != null && !goodsSearch.getCate4No().equals("")) {
-			goodsSearch.setCateNo(goodsSearch.getCate4No());
-		} else if (goodsSearch.getCate3No() != null && !goodsSearch.getCate3No().equals("")) {
-			goodsSearch.setCateNo(goodsSearch.getCate3No());
-		} else if (goodsSearch.getCate2No() != null && !goodsSearch.getCate2No().equals("")) {
-			goodsSearch.setCateNo(goodsSearch.getCate2No());
-		} else if (goodsSearch.getCate1No() != null && !goodsSearch.getCate1No().equals("")) {
-			goodsSearch.setCateNo(goodsSearch.getCate1No());
-		}
+//		if (params.getCate4No() != null && params.getCate4No() > 0) {
+//			params.setCateNo(params.getCate4No());
+//		} else if (params.getCate3No() != null && params.getCate3No() > 0) {
+//			params.setCateNo(params.getCate3No());
+//		} else if (params.getCate2No() != null && params.getCate2No() > 0) {
+//			params.setCateNo(params.getCate2No());
+//		} else if (params.getCate1No() != null && params.getCate1No() > 0) {
+//			params.setCateNo(params.getCate1No());
+//		}
+
+		pageable.setTotalCount(goodsService.getCategoryGoodsCount(params));
+		params.setPageable(pageable);
+		result.set("paging", pageable);
+//		result.set("totalCnt", pageable.getTotalCount());
+//		result.set("endRow", pageable.getEndRow());
+		result.set("dataList", goodsService.getCategoryGoodsList(params));
 
-		int totalCnt = displayService.getCategoryGoodsCount(goodsSearch);
-		log.info("totalCnt::::::::::{}", totalCnt);
-		pageable.setTotalCount(totalCnt);
-		goodsSearch.setPageable(pageable);
-		log.info("getEndRow:::::{}", pageable.getEndRow());
-		result.set("paging", goodsSearch);
-		result.set("totalCnt", totalCnt);
-		result.set("endRow", pageable.getEndRow());
-		result.set("dataList", displayService.getCategoryGoodsList(goodsSearch));
 		return result;
 	}
 
@@ -668,6 +683,19 @@ public class TsfDisplayController extends TsfBaseController {
 		return displayService.getBrandCategoryList(brandGroupNo);
 	}
 
+	/**
+	 * 카테고리 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 5. 3
+	 */
+	@GetMapping("/outlet/cate/list")
+	@ResponseBody
+	public Collection<Cate1> getOutletCategoryList(String formalGb) {
+		return displayService.getOutletCategoryList(formalGb);
+	}
+
 	/**
 	 * 베스트 메인
 	 * @param
@@ -703,7 +731,7 @@ public class TsfDisplayController extends TsfBaseController {
 		MainLayout mainLayout = new MainLayout();
 		mainLayout.setGoodsList(displayService.getBestItemCategoryGoodsList(contents));
 		int totalCnt = mainLayout.getGoodsList().size();
-		if(totalCnt>100){
+		if (totalCnt > 100) {
 			totalCnt = 100;
 		}
 		pageable.setTotalCount(totalCnt);
@@ -729,9 +757,9 @@ public class TsfDisplayController extends TsfBaseController {
 	@ResponseBody
 	public Collection<Contents> getGnbTabBannerlist(Contents contents) {
 //		contents.setContentsLoc("STAB003");
-		if(contents.getCateNo().equals(3000)){
+		if (contents.getCateNo().equals(3000)) {
 			contents.setContentsLoc("SOM005");
-		}else{
+		} else {
 			contents.setContentsLoc("SCM005");
 		}
 

+ 4 - 0
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -662,6 +662,9 @@ public class TsfMypageController extends TsfBaseController {
 
 		// 반품 사유 목록 조회
 		mav.addObject("returnReason", rendererService.getCommonCodeList("G688", "Y"));
+		
+		// 2021.05.03 은행목록추가
+		mav.addObject("bankList", rendererService.getCommonCodeList("G942", "Y"));
 
 		mav.setViewName(super.getDeviceViewName("/mypage/MypageReturnForm"));
 
@@ -1008,6 +1011,7 @@ public class TsfMypageController extends TsfBaseController {
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("returnDetailList", map);
 		mav.addObject("oneData", oneData);
+		mav.addObject("refundYn", map.getString("refundYn"));
 
 		// 주문 결제정보 조회
 		Order order = new Order();

+ 31 - 6
src/main/java/com/style24/front/biz/web/TsfNoMemberController.java

@@ -136,7 +136,7 @@ public class TsfNoMemberController extends TsfBaseController {
 		// 로그인여부 설정
 		mav.addObject("isLogin", false);
 
-		// 주문번호 설정
+		// 비회원 정보 설정
 		mav.addObject("ordNo", order.getOrdNo());
 		mav.addObject("ordNm", order.getOrdNm());
 		mav.addObject("ordPhnno", order.getOrdPhnno());
@@ -406,6 +406,11 @@ public class TsfNoMemberController extends TsfBaseController {
 	public ModelAndView noMemberCancelForm(Order order) {
 		ModelAndView mav = new ModelAndView();
 
+		// 비회원 정보 설정
+		mav.addObject("ordNo", order.getOrdNo());
+		mav.addObject("ordNm", order.getOrdNm());
+		mav.addObject("ordPhnno", order.getOrdPhnno());
+
 		// 취소 가능 리스트 조회
 		GagaMap map = orderChangeService.getCancelListForMypage(order);
 		Order oneData = (Order)map.get("oneData");
@@ -476,8 +481,10 @@ public class TsfNoMemberController extends TsfBaseController {
 	public ModelAndView returnForm(Order order) {
 		ModelAndView mav = new ModelAndView();
 
-		// 주문번호 설정
+		// 비회원 정보 설정
 		mav.addObject("ordNo", order.getOrdNo());
+		mav.addObject("ordNm", order.getOrdNm());
+		mav.addObject("ordPhnno", order.getOrdPhnno());
 
 		// 로그인여부 설정
 		mav.addObject("isLogin", false);
@@ -636,8 +643,10 @@ public class TsfNoMemberController extends TsfBaseController {
 	public ModelAndView exchangeForm(Order order) {
 		ModelAndView mav = new ModelAndView();
 
-		// 주문번호 설정
+		// 비회원 정보 설정
 		mav.addObject("ordNo", order.getOrdNo());
+		mav.addObject("ordNm", order.getOrdNm());
+		mav.addObject("ordPhnno", order.getOrdPhnno());
 
 		// 로그인여부 설정
 		mav.addObject("isLogin", false);
@@ -789,7 +798,7 @@ public class TsfNoMemberController extends TsfBaseController {
 	public ModelAndView mypageCreListForm(Order order) {
 		ModelAndView mav = new ModelAndView();
 
-		// 주문 정보 설정
+		// 비회원 정보 설정
 		mav.addObject("ordNo", order.getOrdNo());
 		mav.addObject("ordNm", order.getOrdNm());
 		mav.addObject("ordPhnno", order.getOrdPhnno());
@@ -872,6 +881,11 @@ public class TsfNoMemberController extends TsfBaseController {
 		order.setOrdNo(orderChange.getOrdNo());
 		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
 
+		// 비회원 정보 설정
+		mav.addObject("ordNo", orderChange.getOrdNo());
+		mav.addObject("ordNm", orderChange.getOrdNm());
+		mav.addObject("ordPhnno", orderChange.getOrdPhnno());
+
 		mav.setViewName(super.getDeviceViewName("mypage/NoMemberCreCancelDetailForm"));
 
 		return mav;
@@ -892,17 +906,23 @@ public class TsfNoMemberController extends TsfBaseController {
 		// 로그인여부 설정
 		mav.addObject("isLogin", false);
 
-		// 취소상세 데이터 조회
+		// 반품상세 데이터 조회
 		GagaMap map = orderChangeService.getCreReturnDetailInfo(orderChange);
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("returnDetailList", map);
 		mav.addObject("oneData", oneData);
+		mav.addObject("refundYn", map.getString("refundYn"));
 
 		// 주문 결제정보 조회
 		Order order = new Order();
 		order.setOrdNo(orderChange.getOrdNo());
 		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
 
+		// 비회원 정보 설정
+		mav.addObject("ordNo", orderChange.getOrdNo());
+		mav.addObject("ordNm", orderChange.getOrdNm());
+		mav.addObject("ordPhnno", orderChange.getOrdPhnno());
+
 		mav.setViewName(super.getDeviceViewName("mypage/NoMemberCreReturnDetailForm"));
 
 		return mav;
@@ -923,12 +943,17 @@ public class TsfNoMemberController extends TsfBaseController {
 		// 로그인여부 설정
 		mav.addObject("isLogin", false);
 
-		// 취소상세 데이터 조회
+		// 교환상세 데이터 조회
 		GagaMap map = orderChangeService.getCreExchangeDetailInfo(orderChange);
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("exchangeDetailList", map);
 		mav.addObject("oneData", oneData);
 
+		// 비회원 정보 설정
+		mav.addObject("ordNo", orderChange.getOrdNo());
+		mav.addObject("ordNm", orderChange.getOrdNm());
+		mav.addObject("ordPhnno", orderChange.getOrdPhnno());
+
 		mav.setViewName(super.getDeviceViewName("mypage/NoMemberCreExchangeDetailForm"));
 
 		return mav;

+ 50 - 4
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -814,10 +814,56 @@ public class TsfOrderController extends TsfBaseController {
 		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);
 		
 		// 2021.03.16 주문완료화면이동처리
 		mav.setViewName("redirect:/order/complete?ordNo=" + order.getOrdNo());

+ 4 - 0
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -166,6 +166,8 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setPlanSq(plan.getPlanSq());
 		review.setPlanSq(plan.getPlanSq());
 		coupon.setPlanSq(plan.getPlanSq());
+		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
+		coupon.setFrontGb(TsfSession.getFrontGb());
 		plan.setFrontGb(TsfSession.getFrontGb());
 
 		Plan planInfo = planningService.getPlanDetailInfo(plan);
@@ -374,8 +376,10 @@ public class TsfPlanningController extends TsfBaseController {
 
 		if (count == 0) {
 			result.set("message", message.getMessage("COUPON_0002"));
+			result.set("cpnId", coupon.getCpnId());
 		} else {
 			result.set("message", message.getMessage("COUPON_0001", new Object[] {count}));
+			result.set("cpnId", coupon.getCpnId());
 		}
 
 		return result;

+ 21 - 0
src/main/java/com/style24/persistence/domain/searchengine/Filter.java

@@ -0,0 +1,21 @@
+package com.style24.persistence.domain.searchengine;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+/**
+ * 검색엔진 연동 도메인
+ * 
+ * @author gagamel
+ * @since 2021. 4. 29
+ */
+@SuppressWarnings("serial")
+@Data
+public class Filter implements Serializable {
+
+	private String filterGb;	// 필터구분
+	private String filterCd;	// 필터코드
+	private String filterNm;	// 필터명
+
+}

+ 73 - 0
src/main/java/com/style24/persistence/domain/searchengine/SearchEngine.java

@@ -0,0 +1,73 @@
+package com.style24.persistence.domain.searchengine;
+
+import java.io.Serializable;
+
+import com.style24.persistence.TscPageRequest;
+
+import lombok.Data;
+
+/**
+ * 검색엔진 연동 도메인
+ * 
+ * @author gagamel
+ * @since 2021. 4. 29
+ */
+@SuppressWarnings("serial")
+@Data
+public class SearchEngine implements Serializable {
+
+	// 파라미터
+	private String siteCd;			// 사이트코드
+	private String cateGb;			// 카테고리구분
+	private String filterGb;		// 필터구분
+	private Integer custNo;			// 고객번호
+
+	private Integer cate1No;		// 카테고리1번호
+	private Integer cate2No;		// 카테고리2번호
+	private Integer cate3No;		// 카테고리3번호
+	private Integer cate4No;		// 카테고리4번호
+	private Integer cate5No;		// 카테고리5번호
+	private String keyword;			// 검색어
+	private Integer brandGroupNo;	// 브랜드그룹번호
+	private String formalGb;		// 정상이월구분
+	private String defaultCateYn;	// 기본카테고리사용여부
+	private String frontGb;			// 프론트구분
+	private String custGb;			// 고객구분
+	private String[] brandGroupArr;	// 브랜드그룹배열
+	private String[] sizeArr;		// 사이즈배열
+	private Integer priceFrom;		// 가격From
+	private Integer priceTo;		// 가격To
+	private Integer dcRateFrom;		// 할인율From
+	private Integer dcRateTo;		// 할인율To
+	private String[] ageArr;		// 사이즈배열
+	private String[] seasonArr;		// 시즌배열
+	private String[] colorArr;		// 색상배열
+	private String[] benefitArr;	// 혜택배열
+	private String unisex;			// 남여공용만보기(성별구분:G007_Z)
+	private String newGoods;		// 신상품만보기(혜택구분:40)
+	private String sortingType;		// 정렬순서(BELOVED: 인기상품순, REVIEW: 리뷰많은순 그외는 최신상품순)
+	private int pageNo = 1;			// 페이지번호
+	private int pageSize = 50;		// 페이지사이즈
+	private int pageUnit = 10;		// 페이지단위
+	private TscPageRequest pageable;
+
+	// Result - 상품리스트
+	private String brandGroupNm;	// 브랜드그룹명
+	private String goodsCd;			// 상품코드
+	private String goodsFullNm;		// 상품FULL명
+	private String goodsTnm;		// 상품타이틀명
+	private int listPrice;			// 정상가
+	private int currPrice;			// 현재판매가(=혜택가)
+	private String sysImgNm;		// 상품시스템파일명(썸네일 기본 이미지)
+	private String sysImgNm2;		// 상품시스템파일명2(썸네일 마우스오버 이미지)
+	private String videos;			// 동영상들(,로 연결된 문자열. 동영상구분:미디어컨텐츠 또는 유튜브동영상ID, ...)
+	private String colorChips;		// 컬러칩들(,로 연결된 문자열. 색상코드:컬러칩, ...)
+	private String sizes;			// 사이즈들(,로 연결된 문자열. 사이즈코드:품절여부, ...)
+	private String benefits;		// 혜택들(,로 연결된 문자열. 혜택구분:혜택명, ...)
+	private String likeIt;			// 좋아요(위시리스트에담긴상품)
+
+	private String adminIp;			// 검색엔진IP
+	private String adminPort;		// 검색엔진포트
+	private String returnCode;		// 검색오류코드(양수: 정상, 음수: 오류)
+
+}

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

@@ -464,7 +464,8 @@
 		                   FROM   TB_TMTB_SECTION TS
 		                   WHERE  TS.DEL_YN = 'N'
 		                   GROUP  BY TS.TMTB_SQ) TS
-		ON TC.TMTB_SQ = TS.TMTB_SQ
+		ON     TC.TMTB_SQ = TS.TMTB_SQ
+		AND    TC.SECTION_VAL = TS.SECTION_VAL
 		WHERE  1=1
 		AND	   TC.DEL_YN = 'N'
 		AND	   TV.DEL_YN = 'N'
@@ -510,8 +511,7 @@
 		     , (Z.CURR_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS CURR_PRICE
 		     , (Z.LIST_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS LIST_PRICE
 		     , Z.SOLDOUT_YN
-		     , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
-		            ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
+		     , CASE WHEN #{frontGb} = 'P' THEN Z.PNT_PRATE ELSE Z.PNT_MRATE END AS PNT_RATE
 		     , SYS_IMG_NM
 		FROM   (SELECT C.CART_SQ
 		             , C.GOODS_CD
@@ -695,7 +695,7 @@
 		     , CURR_PRICE
 		     , LIST_PRICE
 		     , Z.SOLDOUT_YN
-		     , SAVE_PNT_AMT
+		     , PNT_RATE
 		     , SYS_IMG_NM
 		ORDER  BY Z.DELV_FEE_CD DESC
 		     , Z.GOODS_CD DESC

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

@@ -1324,7 +1324,7 @@
 		AND (CASE WHEN 'P' = 'P' THEN C.DC_PVAL
 		         WHEN 'M' = 'P' THEN C.DC_MVAL
 		     ELSE C.DC_AVAL END) > 0                  -- PC, MOBILE,APP 별로 0 보다 큰 쿠폰
-		AND IF (C.TOT_PUB_LIMIT_QTY = 0, 9999999999,C.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO= #{custNo}) -- 총발행제한수
+		AND IF (C.TOT_PUB_LIMIT_QTY = 0, 9999999999,C.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID) -- 총발행제한수
 		AND IF (C.CUST_PUB_LIMIT_QTY = 0, 9999999999,C.CUST_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO= #{custNo}) -- 고객당발행제한수량
 		AND (SELECT COUNT(1)
 		     FROM TB_COUPON_CUST_GBN

+ 36 - 660
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -614,6 +614,40 @@
 				 )
 	</select>
 
+	<!-- 상품리스트 카테고리별 필터 목록 -->
+	<select id="getGoodsListCategoryFilterList" parameterType="SearchEngine" resultType="Filter">
+		/* TsfDisplay.getGoodsListCategoryFilterList */
+		SELECT FILTER_GB
+		       <choose>
+		           <when test="filterGb != null and filterGb == 'SIZE'">
+		     , SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
+		           </when>
+		           <otherwise>
+		     , FILTER_CD
+		           </otherwise>
+		       </choose>
+		     , FILTER_NM
+		FROM   TB_CATE_FILTER
+		WHERE  SITE_CD = #{siteCd}
+		AND    CATE_GB = #{cateGb}
+		AND    FORMAL_GB = #{formalGb}
+		AND    BRAND_GROUP_NO = #{brandGroupNo}
+		AND    CATE_NO = CASE WHEN IFNULL(#{cate4No},0) > 0 THEN
+		                          #{cate4No}
+		                      ELSE
+		                          CASE WHEN IFNULL(#{cate3No},0) > 0 THEN
+		                                   #{cate3No}
+		                               ELSE
+		                                   CASE WHEN IFNULL(#{cate2No},0) > 0 THEN
+		                                            #{cate2No}
+		                                        ELSE
+		                                            #{cate1No}
+		                                   END
+		                          END
+		                 END
+		ORDER  BY FILTER_GB, DISP_ORD
+	</select>
+	
 	<!-- 상품 카테고리 필터 -->
 	<select id="getCategoryFilter" parameterType="Cate4srch" resultType="GoodsSearch">
 		/* TsfDisplay.getCategoryFilter */
@@ -675,503 +709,12 @@
 		                    AND CATE5_NO = #{cate5No}
 		                  </if>
 		                )
-		<if test="brandGroupNo != null and brandGroupNo !=''">
-		  AND CG.BRAND_GROUP_NO = #{brandGroupNo}
+		<if test="brandGroupNo != null and brandGroupNo > 0">
+		AND   CG.BRAND_GROUP_NO = #{brandGroupNo}
 		</if>
 		GROUP BY GB.BENEFIT_GB
 	</select>
 
-	<!-- 카테고리별 상품 총 건수 new -->
-	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
-		/* TsfDisplay.getCategoryGoodsCount */
-		WITH TAB_GOODS AS (
-		      SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
-		           , G.GOODS_CD           /*상품코드*/
-		           , G.GOODS_NM           /*상품명*/
-		           , G.GOODS_GB           /*상품구분*/
-		           , G.SELF_GOODS_YN      /*자사상품여부*/
-		           , 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.FORMAL_GB
-		           , G.REG_DT             /*등록일시*/
-		           , G.SELL_WEEK_QTY  /*주간판매수량*/
-		           , G.REVIEW_REG_CNT /*리뷰등록건수*/
-		      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.SELF_GOODS_YN                                                                      /*자사상품여부*/
-		                  , G.FOREIGN_BUY_YN                                                                     /*해외구매대행여부*/
-		                  , G.PARALLEL_IMPORT_YN                                                                 /*병행수입여부*/
-		                  , G.ORDER_MADE_YN                                                                      /*주문제작여부*/
-		                  , G.GOODS_TNM                                                                          /*상품타이틀명*/
-		                  , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
-		                  , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                  , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                         WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                         WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                         WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                         WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                         WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                         ELSE G.CURR_PRICE
-		                    END                                                   AS CURR_PRICE       /*현재판매가*/
-		                  , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
-		                  , G.FORMAL_GB /*정상이월구분*/
-		                  , G.REG_DT                                                                             /*등록일시*/
-		                  , GS.SELL_WEEK_QTY  /*주간판매수량*/
-		                  , GS.REVIEW_REG_CNT /*리뷰등록건수*/
-		           FROM   TB_CATE_4SRCH C4
-		           INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
-		           INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
-		           INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
-		           INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		           INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		           INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
-		           LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
-		           WHERE  C4.SITE_CD = 'G000_10'
-		           AND    C4.CATE_GB = 'G032_101'
-		           AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		           <if test="cate1No != null and cate1No != ''">
-		           AND    C4.CATE1_NO = #{cate1No}
-		           </if>
-		           <if test="cate2No != null and cate2No != ''">
-		           AND    C4.CATE2_NO = #{cate2No}
-		           </if>
-		           <if test="cate3No != null and cate3No != ''">
-		           AND    C4.CATE3_NO = #{cate3No}
-		           </if>
-		           <if test="cate4No != null and cate4No != ''">
-		           AND    C4.CATE4_NO = #{cate4No}
-		           </if>
-		           <if test="cate5No != null and cate5No != ''">
-		           AND    C4.CATE5_NO = #{cate5No}
-		           </if>
-		           <choose>
-		               <when test="brandGroupNo != null and brandGroupNo != ''">
-		           AND    B.BRAND_GROUP_NO = #{brandGroupNo}
-		               </when>
-		               <otherwise>
-		           AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		               </otherwise>
-		           </choose>
-		           <if test="formalGb != null and formalGb !=''">
-		           AND    G.FORMAL_GB = #{formalGb}
-		           </if>
-		           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 > 0 /*재고있는 상품*/
-		           AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		           AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
-		           <if test="priceHigh != null and priceHigh != ''">
-		           AND    G.CURR_PRICE <![CDATA[<=]]> #{priceHigh}
-		           </if>
-		           <if test="priceRow != null and priceRow != ''">
-		           AND    G.CURR_PRICE <![CDATA[>=]]> #{priceRow}
-		           </if>
-		           <if test="dcrateHigh != null and dcrateHigh != ''">
-		           AND    G.DC_RATE <![CDATA[<=]]> #{dcrateHigh}
-		           </if>
-		           <if test="dcrateRow != null and dcrateRow != ''">
-		           AND    G.DC_RATE <![CDATA[>=]]> #{dcrateRow}
-		           </if>
-		           <if test="sexGb != null and sexGb != ''">
-		           AND    G.SEX_GB = #{sexGb}
-		           </if>
-		           <if test="newProd != null and newProd != ''">
-		           AND    EXISTS ( SELECT 1 FROM TB_GOODS_BENEFIT
-		                           WHERE GOODS_CD = G.GOODS_CD
-		                           AND BENEFIT_GB IN (#{newProd}) )
-		           </if>
-		           <include refid="getCategoryGoodsList_sql"/>
-		) G
-		WHERE  1 = 1
-		)
-		, TAB_OPTION AS (
-		      /* 자사상품 색상 목록 */
-		      SELECT O.GOODS_CD
-		      , O.OPT_CD1  AS MAIN_COLOR_CD
-		      FROM   TAB_GOODS G
-		      , TB_OPTION O
-		      WHERE  G.GOODS_CD = O.GOODS_CD
-		      AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
-		      AND    O.DISP_YN = 'N'
-		      GROUP  BY O.GOODS_CD, O.OPT_CD1
-		)
-		, TAB_ALL_GOODS AS (
-		         SELECT *
-		         FROM   (
-		         SELECT G.BRAND_GROUP_NM
-		              , G.GOODS_CD
-		              , G.GOODS_NM           /*상품명*/
-		              , G.GOODS_GB           /*상품구분*/
-		              , G.SELF_GOODS_YN      /*자사상품여부*/
-		              , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
-		              , G.PARALLEL_IMPORT_YN /*병행수입여부*/
-		              , G.ORDER_MADE_YN      /*주문제작여부*/
-		              , G.GOODS_TNM          /*상품타이틀명*/
-		              , IFNULL(O.MAIN_COLOR_CD,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD /*대표색상코드*/
-		              , G.LIST_PRICE         /*정상가(최초판매가)*/
-		              , G.CURR_PRICE         /*현재판매가*/
-		              , G.FORMAL_GB
-		              , G.REG_DT             /*등록일시*/
-		              , G.SELL_WEEK_QTY
-		              , G.REVIEW_REG_CNT
-		              , RANK() OVER(ORDER BY G.FORMAL_GB
-		              , G.REG_DT DESC
-		              , G.GOODS_CD) AS NUMB
-		        FROM TAB_GOODS G
-		        LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
-		        ) ORIGINAL
-		)
-		, 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_ALL_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
-		)
-		SELECT COUNT(1) AS TOTCNT
-		FROM TAB_ALL_GOODS G
-		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.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="getCategoryGoodsList" parameterType="GoodsSearch" resultType="Goods">
-		/* TsfDisplay.getCategoryGoodsList */
-		WITH TAB_GOODS AS (
-		          SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
-		               , G.GOODS_CD           /*상품코드*/
-		               , G.GOODS_NM           /*상품명*/
-		               , G.GOODS_GB           /*상품구분*/
-		               , G.SELF_GOODS_YN      /*자사상품여부*/
-		               , 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.FORMAL_GB
-		               , G.REG_DT             /*등록일시*/
-		               , G.SELL_WEEK_QTY  /*주간판매수량*/
-		               , G.REVIEW_REG_CNT /*리뷰등록건수*/
-		          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.SELF_GOODS_YN                                                                      /*자사상품여부*/
-		                         , G.FOREIGN_BUY_YN                                                                     /*해외구매대행여부*/
-		                         , G.PARALLEL_IMPORT_YN                                                                 /*병행수입여부*/
-		                         , G.ORDER_MADE_YN                                                                      /*주문제작여부*/
-		                         , G.GOODS_TNM                                                                          /*상품타이틀명*/
-		                         , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
-		                         , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                         , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                                WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                                WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                                WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                                WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                                WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                                ELSE G.CURR_PRICE
-		                           END                                                   AS CURR_PRICE       /*현재판매가*/
-		                         , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
-		                         , G.FORMAL_GB /*정상이월구분*/
-		                         , G.REG_DT                                                                             /*등록일시*/
-		                         , GS.SELL_WEEK_QTY  /*주간판매수량*/
-		                         , GS.REVIEW_REG_CNT /*리뷰등록건수*/
-		                    FROM   TB_CATE_4SRCH C4
-		                    INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
-		                    INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
-		                    INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
-		                    INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		                    INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		                    INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
-		                    LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
-		                    WHERE  C4.SITE_CD = 'G000_10'
-		                    AND    C4.CATE_GB = 'G032_101'
-		                    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		                <if test="cate1No != null and cate1No != ''">
-		                    AND    C4.CATE1_NO = #{cate1No}
-		                </if>
-		                <if test="cate2No != null and cate2No != ''">
-		                    AND    C4.CATE2_NO = #{cate2No}
-		                </if>
-		                <if test="cate3No != null and cate3No != ''">
-		                    AND    C4.CATE3_NO = #{cate3No}
-		                </if>
-		                <if test="cate4No != null and cate4No != ''">
-		                    AND    C4.CATE4_NO = #{cate4No}
-		                </if>
-		                <if test="cate5No != null and cate5No != ''">
-		                    AND    C4.CATE5_NO = #{cate5No}
-		                </if>
-		                <choose>
-		                    <when test="brandGroupNo != null and brandGroupNo != ''">
-		                    AND    B.BRAND_GROUP_NO = #{brandGroupNo}
-		                    </when>
-		                    <otherwise>
-		                    AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		                    </otherwise>
-		                </choose>
-		                <if test="formalGb != null and formalGb !=''">
-		                    AND    G.FORMAL_GB = #{formalGb}
-		                </if>
-		                    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 > 0 /*재고있는 상품*/
-		                    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		                    AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
-		                <if test="priceHigh != null and priceHigh != ''">
-		                    AND    G.CURR_PRICE <![CDATA[<=]]> #{priceHigh}
-		                </if>
-		                <if test="priceRow != null and priceRow != ''">
-		                    AND    G.CURR_PRICE <![CDATA[>=]]> #{priceRow}
-		                </if>
-		                <if test="dcrateHigh != null and dcrateHigh != ''">
-		                    AND    G.DC_RATE <![CDATA[<=]]> #{dcrateHigh}
-		                </if>
-		                <if test="dcrateRow != null and dcrateRow != ''">
-		                    AND    G.DC_RATE <![CDATA[>=]]> #{dcrateRow}
-		                </if>
-		                <if test="sexGb != null and sexGb != ''">
-		                    AND    G.SEX_GB = #{sexGb}
-		                </if>
-		                <if test="newProd != null and newProd != ''">
-		                    AND    EXISTS ( SELECT 1 FROM TB_GOODS_BENEFIT
-		                                    WHERE GOODS_CD = G.GOODS_CD
-		                                    AND BENEFIT_GB IN (#{newProd})
-		                        )
-		                </if>
-		                <include refid="getCategoryGoodsList_sql"/>
-		                ) G
-		          WHERE  1 = 1
-		)
-		, TAB_OPTION AS (
-		          /* 자사상품 색상 목록 */
-		          SELECT O.GOODS_CD
-		          , O.OPT_CD1  AS MAIN_COLOR_CD
-		          FROM   TAB_GOODS G
-		          , TB_OPTION O
-		          WHERE  G.GOODS_CD = O.GOODS_CD
-		          AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
-		          AND    O.DISP_YN = 'N'
-		          GROUP  BY O.GOODS_CD, O.OPT_CD1
-		)
-		, TAB_ALL_GOODS AS (
-		        SELECT *
-		        FROM   (
-		                 SELECT G.BRAND_GROUP_NM
-		                 , G.GOODS_CD
-		                 , G.GOODS_NM           /*상품명*/
-		                 , G.GOODS_GB           /*상품구분*/
-		                 , G.SELF_GOODS_YN      /*자사상품여부*/
-		                 , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
-		                 , G.PARALLEL_IMPORT_YN /*병행수입여부*/
-		                 , G.ORDER_MADE_YN      /*주문제작여부*/
-		                 , G.GOODS_TNM          /*상품타이틀명*/
-		                 , IFNULL(O.MAIN_COLOR_CD,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD /*대표색상코드*/
-		                 , G.LIST_PRICE         /*정상가(최초판매가)*/
-		                 , G.CURR_PRICE         /*현재판매가*/
-		                 , G.FORMAL_GB
-		                 , G.REG_DT             /*등록일시*/
-		                 , G.SELL_WEEK_QTY
-		                 , G.REVIEW_REG_CNT
-		                 <choose>
-		                    <when test="sortGb != null and sortGb !=''">
-		                        <choose>
-		                           <when test="sortGb == 'new'">
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.REG_DT DESC , G.GOODS_CD) AS NUMB
-		                           </when>
-		                           <when test="sortGb == 'best'">
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.SELL_WEEK_QTY DESC , G.REG_DT DESC, G.GOODS_CD) AS NUMB
-		                           </when>
-		                           <when test="sortGb == 'review'">
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.REVIEW_REG_CNT DESC , G.REG_DT DESC, G.GOODS_CD) AS NUMB
-		                           </when>
-		                        </choose>
-		                    </when>
-		                    <otherwise>
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.REG_DT DESC , G.GOODS_CD) AS NUMB
-		                    </otherwise>
-		                 </choose>
-		                 FROM TAB_GOODS G
-		                 LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
-		        ) ORIGINAL
-		        WHERE 1=1
-		        <if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
-		        	AND  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
-		        </if>
-		        <if test="maxRow != null and maxRow !=''">
-		        	AND  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_ALL_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
-		)
-		SELECT G.BRAND_GROUP_NM
-		     , G.GOODS_CD
-		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
-		     , G.GOODS_TNM
-		     , G.MAIN_COLOR_CD
-		     , G.LIST_PRICE
-		     , G.CURR_PRICE                                                                                                  /*현재판매가*/
-		     , GI.SYS_IMG_NM
-		     , GI.SYS_IMG_NM2
-		     , (
-		           SELECT GROUP_CONCAT(CONCAT(VIDEO_GB,':',KMC_KEY) ORDER BY NUMB SEPARATOR ',')
-		           FROM   (
-		                  SELECT GV.VIDEO_GB
-		                  , GV.KMC_KEY
-		                  , GV.REG_DT
-		                  , RANK() OVER(ORDER BY GV.REG_DT, GV.KMC_KEY) AS NUMB
-		                  FROM   TB_GOODS_VIDEO GV
-		                  WHERE  GV.GOODS_CD = G.GOODS_CD
-		                  AND    GV.DISP_YN = 'Y'
-		                  AND    GV.KMC_KEY IS NOT NULL
-		           ) Z
-		           WHERE  NUMB <![CDATA[<=]]>  2
-		     ) AS VIDEO_VAL
-		     , (
-		           SELECT GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
-		           FROM   TB_OPTION O
-		           , TB_COLOR C
-		           , TB_COMMON_CODE CC
-		           WHERE  O.OPT_CD1 = C.COLOR_CD
-		           AND    C.COLOR_GRP_CD = CC.CD
-		           AND    O.GOODS_CD = G.GOODS_CD
-		           AND    O.DISP_YN = 'Y'
-		           AND    C.USE_YN = 'Y'
-		           AND    CC.USE_YN = 'Y'
-		     ) AS COLOR_CHIPS /*컬러칩*/
-		     , (
-		           SELECT GROUP_CONCAT(DISTINCT CONCAT(OPT_CD2 ,':' ,CASE WHEN SOLDOUT_YN = 'Y' THEN 'Y'
-		                               ELSE CASE WHEN CURR_STOCK_QTY - BASE_STOCK_QTY > 0 THEN 'N' ELSE 'Y'  END END) ORDER BY DISP_ORD SEPARATOR ',') AS SIZES
-		           FROM   VW_STOCK
-		           WHERE  GOODS_CD = G.GOODS_CD
-		           AND    OPT_CD1 = G.MAIN_COLOR_CD
-		           AND    DISP_YN = 'Y'
-		     ) AS SIZES /*사이즈*/
-		     , (
-		          SELECT GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',')
-		          FROM   (
-		                SELECT GB.BENEFIT_GB
-		                , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
-		                       WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
-		                       WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		                       WHEN GB.BENEFIT_GB = '40' THEN '신상'
-		                       ELSE '총알배송' END AS BENEFIT_NM
-		                , RANK() OVER(ORDER BY GB.BENEFIT_GB, GB.GOODS_CD) AS NUMB
-		                FROM   TB_GOODS_BENEFIT GB
-		                WHERE  GB.GOODS_CD = G.GOODS_CD
-		          ) Z
-		     ) AS ICON
-		     , G.FORMAL_GB
-		     , G.REG_DT
-		     , G.NUMB
-		<choose>
-		    <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
-		    , IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
-		    </when>
-		    <otherwise>
-		    , ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
-		    </otherwise>
-		</choose>
-		FROM TAB_ALL_GOODS G
-		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.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="getCategoryGoodsCount_old" parameterType="GoodsSearch" resultType="int">
-		/* TsfDisplay.getCategoryGoodsCount_old */
-		SELECT COUNT(1) AS CNT
-		  FROM TB_GOODS G
-		  JOIN TB_CATE_GOODS CG ON G.GOODS_CD = CG.GOODS_CD
-		  JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD AND B.USE_YN = 'Y'
-		  JOIN TB_SITE_BRAND SB ON G.BRAND_CD = SB.BRAND_CD AND SB.USE_YN = 'Y'
-		  JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO AND BG.USE_YN = 'Y'
-		  JOIN TB_GOODS_STOCK S ON G.GOODS_CD = S.GOODS_CD
-		  LEFT OUTER JOIN TB_GOODS_SUMMARY SU ON G.GOODS_CD = SU.GOODS_CD
-		WHERE 1=1
-		  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
-		  AND CG.GOODS_CD = S.GOODS_CD
-		  AND EXISTS (
-		               SELECT 1
-		               FROM TB_CATE_4SRCH
-		               WHERE 1 = 1
-		                 AND LEAF_CATE_NO = CG.CATE_NO
-		                 AND SITE_CD = #{siteCd}
-		                 AND CATE_GB = 'G032_101' /*BY ITEM*/
-		                 AND CATE_TYPE = 'G031_10'
-		                 <if test="cate1No != null and cate1No != ''">
-		                 AND CATE1_NO = #{cate1No}
-		                 </if>
-		                 <if test="cate2No != null and cate2No != ''">
-		                 AND CATE2_NO = #{cate2No}
-		                 </if>
-		                 <if test="cate3No != null and cate3No != ''">
-		                 AND CATE3_NO = #{cate3No}
-		                 </if>
-		                 <if test="cate4No != null and cate4No != ''">
-		                 AND CATE4_NO = #{cate4No}
-		                 </if>
-		                 <if test="cate5No != null and cate5No != ''">
-		                 AND CATE5_NO = #{cate5No}
-		                 </if>
-		                 )
-		  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 > 0 /*재고있는상품*/
-		<include refid="getCategoryGoodsList_sql"/>
-	</select>
-
 	<!-- 카테고리 상품별  목록 필터 조건 -->
 	<sql id="getCategoryGoodsList_sql">
 		<if test='brandSearch != null and brandSearch.length > 0'>
@@ -1227,173 +770,6 @@
 			)
 		</if>
 	</sql>
-
-	<!-- 카테고리별 상품 총 리스트 -->
-	<select id="getCategoryGoodsList_old" parameterType="GoodsSearch" resultType="Goods">
-		/* TsfDisplay.getCategoryGoodsList_old */
-		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 == 'SBM013'">
-		               , ROW_NUMBER() OVER(ORDER BY G.REG_DT DESC) AS NUMB
-		                   </when>
-		                   <otherwise>
-		               , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD , G.REG_DT DESC , G.GOODS_CD) AS NUMB
-		                   </otherwise>
-		               </choose>
-		          FROM	TB_GOODS G
-		          JOIN	TB_CATE_GOODS CG ON G.GOODS_CD = CG.GOODS_CD
-		          JOIN	TB_BRAND B ON G.BRAND_CD = B.BRAND_CD AND B.USE_YN = 'Y'
-		          JOIN	TB_SITE_BRAND SB ON G.BRAND_CD = SB.BRAND_CD AND SB.USE_YN = 'Y'
-		          JOIN	TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO AND BG.USE_YN = 'Y'
-		          JOIN	TB_GOODS_STOCK S ON G.GOODS_CD = S.GOODS_CD
-		          LEFT OUTER JOIN TB_GOODS_SUMMARY SU ON G.GOODS_CD = SU.GOODS_CD
-		          WHERE 1=1
-		          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
-		          AND CG.GOODS_CD = S.GOODS_CD
-		          AND EXISTS (
-		                        SELECT 1
-		                        FROM TB_CATE_4SRCH
-		                        WHERE 1 = 1
-		                        AND LEAF_CATE_NO = CG.CATE_NO
-		                        AND SITE_CD = #{siteCd}
-		                        AND CATE_GB = 'G032_101' /*BY ITEM*/
-		                        AND CATE_TYPE = 'G031_10'
-		                        <if test="cate1No != null and cate1No != ''">
-		                        AND CATE1_NO = #{cate1No}
-		                        </if>
-		                        <if test="cate2No != null and cate2No != ''">
-		                        AND CATE2_NO = #{cate2No}
-		                        </if>
-		                        <if test="cate3No != null and cate3No != ''">
-		                        AND CATE3_NO = #{cate3No}
-		                        </if>
-		                        <if test="cate4No != null and cate4No != ''">
-		                        AND CATE4_NO = #{cate4No}
-		                        </if>
-		                        <if test="cate5No != null and cate5No != ''">
-		                        AND CATE5_NO = #{cate5No}
-		                        </if>
-		              )
-		          <if test="brandGroupNo != null and brandGroupNo != ''">
-		          AND BG.BRAND_GROUP_NO = #{brandGroupNo}
-		          </if>
-		          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 > 0 /*재고있는상품*/
-		          <include refid="getCategoryGoodsList_sql"/>
-		          <if test="contentsLoc == 'SBM013'">
-		          GROUP BY G.GOODS_CD
-		          </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 VIDEO_VAL END) AS VIDEO_VAL_M
-		, MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
-		, MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
-		FROM   (
-		SELECT G.GOODS_CD
-		, V.VIDEO_GB
-		, V.VIDEO_VAL
-		, VD.REG_DT
-		, RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
-		FROM   TAB_GOODS G
-		, TB_VIDEO_DISPLOC VD
-		, TB_VIDEO V
-		WHERE  G.GOODS_CD = VD.DISPLOC_VAL
-		AND    VD.VIDEO_SQ = V.VIDEO_SQ
-		AND    VD.DISPLOC_GB = 'G' /*상품*/
-		AND    VD.DISP_YN = 'Y'
-		AND    V.DISP_YN ='Y'
-		) Z
-		GROUP  BY GOODS_CD
-		)
-		SELECT	G.BRAND_GROUP_NM
-		      , G.GOODS_CD
-		      , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
-		      , G.GOODS_TNM
-		      , G.MAIN_COLOR_CD
-		      , G.LIST_PRICE
-		      , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
-		      , GI.SYS_IMG_NM
-		      , GI.SYS_IMG_NM2
-		      , GV.VIDEO_GB_M
-		      , GV.VIDEO_VAL_M
-		      , GV.VIDEO_GB_S
-		      , GV.VIDEO_VAL_S
-		      <choose>
-		      	<when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
-		      		, IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
-		      	</when>
-		      	<otherwise>
-		      		, ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
-		      	</otherwise>
-		      </choose>
-		FROM	TAB_GOODS G
-		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
-		LEFT OUTER JOIN TAB_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="getBestItemCategoryList" parameterType="Contents" resultType="Contents">

+ 462 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1382,7 +1382,7 @@
 		            WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
 		            <choose>
 		                <when test="brandGroupNo != null and brandGroupNo != ''">
-		            AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		            AND    B.BRAND_GROUP_NO = #{brandGroupNo}
 		                </when>
 		                <otherwise>
 		            AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
@@ -1537,5 +1537,466 @@
 		             LIMIT  20 ) A
 		ON     G.GOODS_CD = A.GOODS_CD
 	</select>
+
+	<!-- 카테고리별 상품 총건수 -->
+	<select id="getCategoryGoodsCount" parameterType="SearchEngine" resultType="int">
+		/* TsfDisplay.getCategoryGoodsCount */
+		SELECT COUNT(*)
+		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.SELF_GOODS_YN                        /*자사상품여부*/
+		, G.FOREIGN_BUY_YN                       /*해외구매대행여부*/
+		, G.PARALLEL_IMPORT_YN                   /*병행수입여부*/
+		, G.ORDER_MADE_YN                        /*주문제작여부*/
+		, G.GOODS_TNM                            /*상품타이틀명*/
+		, G.MAIN_COLOR_CD                        /*대표색상코드*/
+		, G.LIST_PRICE                           /*정상가(최초판매가)*/
+		, CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		ELSE G.CURR_PRICE
+		END                  AS CURR_PRICE     /*현재판매가*/
+		, G.MIN_ORD_AMT                          /*최소주문금액*/
+		, G.FORMAL_GB                            /*정상이월구분*/
+		, G.REG_DT                               /*등록일시*/
+		, GS.SELL_WEEK_QTY                       /*주간판매수량*/
+		, GS.REVIEW_REG_CNT                      /*리뷰등록건수*/
+		FROM   TB_CATE_4SRCH C4
+		INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		WHERE  C4.SITE_CD = #{siteCd}
+		AND    C4.CATE_GB = #{cateGb}
+		AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		<if test="cate1No != null and cate1No != ''">
+			AND    C4.CATE1_NO = #{cate1No}
+		</if>
+		<if test="cate2No != null and cate2No != ''">
+			AND    C4.CATE2_NO = #{cate2No}
+		</if>
+		<if test="cate3No != null and cate3No != ''">
+			AND    C4.CATE3_NO = #{cate3No}
+		</if>
+		<if test="cate4No != null and cate4No != ''">
+			AND    C4.CATE4_NO = #{cate4No}
+		</if>
+		<if test="cate5No != null and cate5No != ''">
+			AND    C4.CATE5_NO = #{cate5No}
+		</if>
+		<choose>
+			<when test="brandGroupNo != null and brandGroupNo > 0">
+				AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+			</when>
+			<otherwise>
+				AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+			</otherwise>
+		</choose>
+		<if test="formalGb != null and formalGb !=''">
+			AND    G.FORMAL_GB = #{formalGb}
+		</if>
+		AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		<if test="ageArr != null and ageArr.length > 0"> <!-- 연령대 -->
+			AND    G.AGE_GRP_CD IN
+			<foreach collection="agesArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		<if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
+			AND    G.SEASON_CD IN
+			<foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		AND    S.STOCK_QTY > 0 /*재고있는 상품*/
+		AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		<if test="brandGroupArr != null and brandGroupArr.length > 0">
+			AND    BG.BRAND_GROUP_NO IN
+			<foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		<if test="unisex != null and unisex != ''">
+			AND    G.SEX_GB = #{unisex}
+		</if>
+		<if test='sizeArr != null and sizeArr.length > 0'>
+			AND    EXISTS (SELECT 1
+			FROM   TB_OPTION
+			WHERE  GOODS_CD = CG.GOODS_CD
+			AND    OPT_CD2 IN
+			<foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+			AND    DISP_YN = 'Y'
+			)
+		</if>
+		<if test="colorArr != null and colorArr.length > 0">
+			AND    EXISTS (SELECT 1
+			FROM   TB_OPTION O
+			, TB_COLOR C
+			WHERE  O.GOODS_CD = G.GOODS_CD
+			AND    O.OPT_CD1 = C.COLOR_CD
+			AND    O.DISP_YN = 'Y'
+			AND    C.COLOR_GRP_CD IN
+			<foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+			AND    C.USE_YN = 'Y' /*사용하는색상*/
+			AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
+			)
+		</if>
+		<if test="newGoods != null and newGoods != ''">
+			AND    EXISTS (SELECT 1
+			FROM   TB_GOODS_BENEFIT
+			WHERE  GOODS_CD = G.GOODS_CD
+			AND    BENEFIT_GB = #{newGoods}
+			)
+		</if>
+		) G
+		WHERE  1 = 1
+		<if test="priceFrom != null and priceFrom != ''">
+			AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
+		</if>
+		<if test="priceTo != null and priceTo != ''">
+			AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
+		</if>
+		<if test="dcRateFrom != null and dcRateFrom != ''">
+			AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
+		</if>
+		<if test="dcRateTo != null and dcRateTo != ''">
+			AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
+		</if>
+	</select>
+
+	<!-- 카테고리별 상품 목록 -->
+	<select id="getCategoryGoodsList" parameterType="SearchEngine" resultType="SearchEngine">
+		/* TsfDisplay.getCategoryGoodsList */
+		WITH TAB_GOODS AS (
+		SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		, G.GOODS_CD           /*상품코드*/
+		, G.GOODS_NM           /*상품명*/
+		, G.GOODS_GB           /*상품구분*/
+		, G.SELF_GOODS_YN      /*자사상품여부*/
+		, 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.FORMAL_GB          /*정상이월구분*/
+		, G.REG_DT             /*등록일시*/
+		, G.SELL_WEEK_QTY      /*주간판매수량*/
+		, G.REVIEW_REG_CNT     /*리뷰등록건수*/
+		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.SELF_GOODS_YN                         /*자사상품여부*/
+		, G.FOREIGN_BUY_YN                        /*해외구매대행여부*/
+		, G.PARALLEL_IMPORT_YN                    /*병행수입여부*/
+		, G.ORDER_MADE_YN                         /*주문제작여부*/
+		, G.GOODS_TNM                             /*상품타이틀명*/
+		, G.MAIN_COLOR_CD                         /*대표색상코드*/
+		, G.LIST_PRICE                            /*정상가(최초판매가)*/
+		, CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		ELSE G.CURR_PRICE
+		END                   AS CURR_PRICE     /*현재판매가*/
+		, G.MIN_ORD_AMT                           /*최소주문금액*/
+		, G.FORMAL_GB                             /*정상이월구분*/
+		, G.REG_DT                                /*등록일시*/
+		, GS.SELL_WEEK_QTY                        /*주간판매수량*/
+		, GS.REVIEW_REG_CNT                       /*리뷰등록건수*/
+		FROM   TB_CATE_4SRCH C4
+		INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		WHERE  C4.SITE_CD = #{siteCd}
+		AND    C4.CATE_GB = #{cateGb}
+		AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		<if test="cate1No != null and cate1No != ''">
+			AND    C4.CATE1_NO = #{cate1No}
+		</if>
+		<if test="cate2No != null and cate2No != ''">
+			AND    C4.CATE2_NO = #{cate2No}
+		</if>
+		<if test="cate3No != null and cate3No != ''">
+			AND    C4.CATE3_NO = #{cate3No}
+		</if>
+		<if test="cate4No != null and cate4No != ''">
+			AND    C4.CATE4_NO = #{cate4No}
+		</if>
+		<if test="cate5No != null and cate5No != ''">
+			AND    C4.CATE5_NO = #{cate5No}
+		</if>
+		<choose>
+			<when test="brandGroupNo != null and brandGroupNo > 0">
+				AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+			</when>
+			<otherwise>
+				AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+			</otherwise>
+		</choose>
+		<if test="formalGb != null and formalGb !=''">
+			AND    G.FORMAL_GB = #{formalGb}
+		</if>
+		AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		<if test="ageArr != null and ageArr.length > 0"> <!-- 연령대 -->
+			AND    G.AGE_GRP_CD IN
+			<foreach collection="agesArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		<if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
+			AND    G.SEASON_CD IN
+			<foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		AND    S.STOCK_QTY > 0 /*재고있는 상품*/
+		AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		<if test="brandGroupArr != null and brandGroupArr.length > 0">
+			AND    BG.BRAND_GROUP_NO IN
+			<foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		<if test="unisex != null and unisex != ''">
+			AND    G.SEX_GB = #{unisex}
+		</if>
+		<if test='sizeArr != null and sizeArr.length > 0'>
+			AND    EXISTS (SELECT 1
+			FROM   TB_OPTION
+			WHERE  GOODS_CD = CG.GOODS_CD
+			AND    OPT_CD2 IN
+			<foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+			AND    DISP_YN = 'Y'
+			)
+		</if>
+		<if test="newGoods != null and newGoods != ''">
+			AND    EXISTS (SELECT 1
+			FROM   TB_GOODS_BENEFIT
+			WHERE  GOODS_CD = G.GOODS_CD
+			AND    BENEFIT_GB = #{newGoods}
+			)
+		</if>
+		) G
+		WHERE  1 = 1
+		<if test="priceFrom != null and priceFrom != ''">
+			AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
+		</if>
+		<if test="priceTo != null and priceTo != ''">
+			AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
+		</if>
+		<if test="dcRateFrom != null and dcRateFrom != ''">
+			AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
+		</if>
+		<if test="dcRateTo != null and dcRateTo != ''">
+			AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
+		</if>
+		)
+		, TAB_OPTION AS (
+		/* 자사상품 색상 목록 */
+		SELECT O.GOODS_CD
+		, O.OPT_CD1  AS MAIN_COLOR_CD
+		FROM   TAB_GOODS G
+		, TB_OPTION O
+		WHERE  G.GOODS_CD = O.GOODS_CD
+		AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
+		<if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
+			AND    O.OPT_CD1 IN (SELECT COLOR_CD
+			FROM   TB_COLOR
+			WHERE  1 = 1
+			AND    COLOR_GRP_CD IN
+			<foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+			AND    USE_YN = 'Y' /*사용하는색상*/
+			)
+		</if>
+		AND    O.DISP_YN = 'Y'
+		GROUP  BY O.GOODS_CD, O.OPT_CD1
+		)
+		, TAB_ALL_GOODS AS (
+		SELECT BRAND_GROUP_NM     /*브랜드그룹명*/
+		, GOODS_CD           /*상품코드*/
+		, GOODS_NM           /*상품명*/
+		, GOODS_GB           /*상품구분*/
+		, SELF_GOODS_YN      /*자사상품여부*/
+		, FOREIGN_BUY_YN     /*해외구매대행여부*/
+		, PARALLEL_IMPORT_YN /*병행수입여부*/
+		, ORDER_MADE_YN      /*주문제작여부*/
+		, GOODS_TNM          /*상품타이틀명*/
+		, MAIN_COLOR_CD      /*대표색상코드*/
+		, LIST_PRICE         /*정상가(최초판매가)*/
+		, CURR_PRICE         /*현재판매가*/
+		, FORMAL_GB          /*정상이월구분*/
+		, REG_DT             /*등록일시*/
+		, SELL_WEEK_QTY      /*주간판매수량*/
+		, REVIEW_REG_CNT     /*리뷰등록건수*/
+		, NUMB
+		FROM   (
+		SELECT G.BRAND_GROUP_NM                                         /*브랜드그룹명*/
+		, G.GOODS_CD                                               /*상품코드*/
+		, G.GOODS_NM                                               /*상품명*/
+		, G.GOODS_GB                                               /*상품구분*/
+		, G.SELF_GOODS_YN                                          /*자사상품여부*/
+		, G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		, G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		, G.ORDER_MADE_YN                                          /*주문제작여부*/
+		, G.GOODS_TNM                                              /*상품타이틀명*/
+		, IFNULL(O.MAIN_COLOR_CD,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD /*대표색상코드*/
+		, G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		, G.CURR_PRICE                                             /*현재판매가*/
+		, G.FORMAL_GB                                              /*정상이월구분*/
+		, G.REG_DT                                                 /*등록일시*/
+		, G.SELL_WEEK_QTY                                          /*주간판매수량*/
+		, G.REVIEW_REG_CNT                                         /*리뷰등록건수*/
+		<choose>
+			<when test="sortingType == 'BEST'"> <!-- 인기상품순 -->
+				, RANK() OVER(ORDER BY G.FORMAL_GB, G.SELL_WEEK_QTY DESC, G.GOODS_CD) AS NUMB
+			</when>
+			<when test="sortingType == 'REVIEW'"> <!-- 리뷰많은순 -->
+				, RANK() OVER(ORDER BY G.FORMAL_GB, G.REVIEW_REG_CNT DESC, G.GOODS_CD) AS NUMB
+			</when>
+			<otherwise> <!-- 최신상품순 -->
+				, RANK() OVER(ORDER BY G.FORMAL_GB, G.REG_DT DESC, G.GOODS_CD) AS NUMB
+			</otherwise>
+		</choose>
+		FROM   TAB_GOODS G
+		LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
+		) ORIGINAL
+		WHERE  1 = 1
+		<if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+			AND    NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		</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_ALL_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
+		)
+		SELECT G.BRAND_GROUP_NM
+		, G.GOODS_CD
+		, FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		, G.GOODS_TNM
+		, G.MAIN_COLOR_CD
+		, G.LIST_PRICE
+		, G.CURR_PRICE
+		, GI.SYS_IMG_NM
+		, GI.SYS_IMG_NM2
+		, (
+		SELECT GROUP_CONCAT(CONCAT(VIDEO_GB,':',KMC_KEY) ORDER BY NUMB SEPARATOR ',')
+		FROM   (
+		SELECT GV.VIDEO_GB
+		, GV.KMC_KEY
+		, GV.REG_DT
+		, RANK() OVER(ORDER BY GV.REG_DT, GV.KMC_KEY) AS NUMB
+		FROM   TB_GOODS_VIDEO GV
+		WHERE  GV.GOODS_CD = G.GOODS_CD
+		AND    GV.DISP_YN = 'Y'
+		AND    GV.KMC_KEY IS NOT NULL
+		) Z
+		WHERE  NUMB <![CDATA[<=]]> 2
+		) AS VIDEOS
+		, (
+		SELECT GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
+		FROM   TB_OPTION O
+		, TB_COLOR C
+		, TB_COMMON_CODE CC
+		WHERE  O.OPT_CD1 = C.COLOR_CD
+		AND    C.COLOR_GRP_CD = CC.CD
+		AND    O.GOODS_CD = G.GOODS_CD
+		AND    O.DISP_YN = 'Y'
+		AND    C.USE_YN = 'Y'
+		AND    CC.USE_YN = 'Y'
+		) AS COLOR_CHIPS /*컬러칩*/
+		, (
+		SELECT GROUP_CONCAT(DISTINCT CONCAT(OPT_CD2 ,':' ,CASE WHEN SOLDOUT_YN = 'Y' THEN 'Y'
+		ELSE CASE WHEN CURR_STOCK_QTY - BASE_STOCK_QTY > 0 THEN 'N' ELSE 'Y' END
+		END) ORDER BY DISP_ORD SEPARATOR ',') AS SIZES
+		FROM   VW_STOCK
+		WHERE  GOODS_CD = G.GOODS_CD
+		AND    OPT_CD1 = G.MAIN_COLOR_CD
+		AND    DISP_YN = 'Y'
+		) AS SIZES /*사이즈*/
+		, (
+		SELECT GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',')
+		FROM   (
+		SELECT GB.BENEFIT_GB
+		, CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		ELSE '총알배송' END AS BENEFIT_NM
+		, RANK() OVER(ORDER BY GB.BENEFIT_GB, GB.GOODS_CD) AS NUMB
+		FROM   TB_GOODS_BENEFIT GB
+		WHERE  GB.GOODS_CD = G.GOODS_CD
+		) Z
+		) AS BENEFITS
+		, G.FORMAL_GB
+		, G.REG_DT
+		, G.NUMB
+		<choose>
+			<when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+				, IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+			</when>
+			<otherwise>
+				, ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+			</otherwise>
+		</choose>
+		FROM   TAB_ALL_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+			LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+			AND    W.CUST_NO = #{custNo}
+		</if>
+	</select>
 	
 </mapper>

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

@@ -342,7 +342,6 @@
 				   , SUM(REAL_DELV_AMT)   AS REAL_DELV_AMT
 				FROM TB_DELIVERY_FEE
 			   WHERE ORD_NO = #{ordNo}
-				 AND DELV_FEE_GB = 'G018_10'
 			   GROUP BY ORD_NO
 		  ) DF
 		    ON OD.ORD_NO = DF.ORD_NO

+ 3 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -1187,6 +1187,7 @@
 		     , Z.CHGER_PHNNO
 		     , Z.CHGER_BASE_ADDR
 		     , Z.CHGER_DTL_ADDR
+		     , Z.CHGER_RTN_MEMO
 		     , Z.CHG_MEMO
 		     , Z.WD_INVOICE_NO
 		     , Z.SHIP_COMP_CD
@@ -1248,6 +1249,7 @@
 		             , OC.CHGER_PHNNO
 		             , OC.CHGER_BASE_ADDR
 		             , OC.CHGER_DTL_ADDR
+		             , OC.CHGER_RTN_MEMO
 		             , OC.CHG_MEMO
 		             , OC.WD_INVOICE_NO
 		             , OC.SHIP_COMP_CD
@@ -1320,7 +1322,7 @@
 		        , Z.CHG_STAT_NM, Z.ORD_DTL_STAT, Z.ORD_NO, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT, Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT
 		        , Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 		        , Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.WD_GB, Z.CHGER_NM, Z.CHGER_PHNNO, Z.CHGER_BASE_ADDR
-		        , Z.CHGER_DTL_ADDR, Z.CHG_MEMO, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM, Z.DELV_ADDR_SQ, Z.RECIP_NM, Z.RECIP_PHNNO
+		        , Z.CHGER_DTL_ADDR, Z.CHGER_RTN_MEMO, Z.CHG_MEMO, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM, Z.DELV_ADDR_SQ, Z.RECIP_NM, Z.RECIP_PHNNO
 		        , Z.RECIP_BASE_ADDR, Z.RECIP_DTL_ADDR, Z.DELV_MEMO, Z.PG_TID, Z.PAY_MEANS, Z.PAY_MEANS_NM, Z.CARD_NM, Z.CARD_MIPS, Z.CHG_ORD_DTL_STAT
 		 ORDER BY Z.ORD_CHG_SQ DESC
 	</select>

+ 80 - 60
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -399,6 +399,29 @@
 		WHERE PLAN_SQ = #{planSq}
 	</select>
 	
+		<!-- 고객등급접근가능리스트 -->
+	<select id="getFrontAccessibleList" parameterType="Plan" resultType="String">
+		/* TsfPlanning.getFrontAccessibleList */
+		SELECT CASE FRONT_GB WHEN 'P'     THEN 'PC웹'
+		                     WHEN 'P|M'   THEN 'PC웹, 모바일웹'
+		                     WHEN 'P|M|A' THEN 'PC웹, 모바일웹, 모바일앱'
+		                     WHEN 'M'     THEN '모바일웹'
+		                     WHEN 'M|A'   THEN '모바일웹, 모바일앱'
+		                     WHEN 'A'     THEN '모바일앱'
+		                     WHEN 'P|A'   THEN 'PC웹, 모바일앱'
+		                     END AS FRONT_GB 
+		FROM tb_plan  
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
+		<!-- 비회원 접근 조회 -->
+	<select id="getNonmemberGradeAccessible" parameterType="Plan" resultType="int">
+		/* TsfPlanning.getCustomerGubunAccessibleYn */
+		SELECT count(*)
+		FROM TB_PLAN_CUST_GRADE 
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
 	<!-- 고객등급접근가능여부 조회 -->
 	<select id="getCustomerGradeAccessibleYn" parameterType="Plan" resultType="String">
 		/* TsfPlanning.getCustomerGradeAccessibleYn */
@@ -729,67 +752,64 @@
 	
 	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
 		/* TsfPlanning.getPlanCouponInfo*/
-		SELECT F.*
-		<if test="planSq != null and planSq != ''">
-		      ,(CASE F.CPN_ID WHEN (SELECT CPN_ID FROM TB_CUST_COUPON C WHERE C.CPN_ID = F.CPN_ID AND CUST_NO = #{custNo})THEN '받기완료'
-		        ELSE '쿠폰받기' END ) AS COUPON_STAT
+		SELECT C.CPN_ID 
+		      ,C.CPN_NM 
+		      ,C.CPN_DESC       
+		      ,C.CPN_TYPE 
+		      ,C.BUY_LIMIT_AMT 
+		      ,C.CUST_PUB_LIMIT_QTY 
+		      ,C.TOT_PUB_LIMIT_QTY
+		      ,C.MAX_DC_AMT 
+		      ,PC.NOTE 
+		      ,PC.TITLE
+		      , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
+		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
+		              END
+		             ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
+		                   ELSE CONCAT('최대 ',FORMAT(C.MAX_DC_AMT , 0),'원 할인')
+		              END)     AS USE_CONDITION  /*사용조건*/
+		     , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
+		            ELSE CONCAT('1인 최대 ',C.CUST_PUB_LIMIT_QTY,'매')
+		       END             AS ISSUE_CONDITION /*발급수량*/
+		      ,CASE WHEN  #{frontGb} = 'P' THEN C.DC_PVAL
+		            WHEN  #{frontGb} = 'M' THEN C.DC_MVAL
+		            WHEN  #{frontGb} = 'A' THEN C.DC_AVAL
+		            ELSE C.DC_AVAL
+		            END                                       AS DC_VAL
+		      ,CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
+		                    ELSE '%'
+		                    END                                      AS DC_WAY    /*할인방법*/
+		      ,C.PD_GB 
+		      ,IF (C.PD_GB = 'D', NOW(), C.AVAIL_STDT) AS AVAIL_STDT
+		      ,IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT) AS AVAIL_EDDT
+		      ,(CASE WHEN CC.CPN_ID IS NULL THEN '쿠폰받기' ELSE '받기완료' END ) AS COUPON_STAT
+		FROM TB_PLAN_CONTENTS PC 
+		                 INNER JOIN TB_PLAN_CONTENTS_ITEM PCI ON PC.PLAN_CONT_SQ = PCI.PLAN_CONT_SQ 
+		                 INNER JOIN TB_COUPON C ON PCI.ITEM_VAL = C.CPN_ID 
+		                 LEFT JOIN TB_CUST_COUPON CC ON C.CPN_ID = CC.CPN_ID 
+		WHERE 1=1
+		AND C.CPN_STAT = 'G232_11'
+		AND C.SITE_CD = #{siteCd}
+		AND C.DOWN_ABL_YN  = 'N'
+		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
+		AND NOW()   <![CDATA[<=]]>  IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
+		AND (CASE WHEN 'P' = 'P' THEN C.DC_PVAL
+		         WHEN 'M' = 'P' THEN C.DC_MVAL
+		     ELSE C.DC_AVAL END) > 0                  -- PC, MOBILE,APP 별로 0 보다 큰 쿠폰
+		AND PC.PLAN_SQ = #{planSq}
+		AND PC.DISP_YN ='Y'
+		AND IF (C.TOT_PUB_LIMIT_QTY = 0, 9999999999,C.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID) -- 총발행제한수
+		<if test="custNo != null and custNo > 0">
+		AND IF (C.CUST_PUB_LIMIT_QTY = 0, 9999999999,C.CUST_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO=  #{custNo}) -- 고객당발행제한수량
 		</if>
-		FROM
-		(
-			SELECT  PC.PLAN_CONT_SQ 
-				  , PC.PLAN_SQ 
-				  , PC.TMPL_TYPE 
-				  , PC.TITLE 
-				  , PC.LINK_URL
-				  , PC.NOTE 
-				  , PCI.ITEM_VAL
-				  , PCI.DISP_ORD
-				  , TC.CPN_ID
-				  , TC.CPN_NM
-				  , TC.CPN_DESC
-				  , TC.SITE_CD
-				  , TC.AF_LINK_CD
-				  , TC.CPN_TYPE
-				  , TC.APPLY_SCOPE
-				  ,(CASE TC.DC_WAY WHEN 'G240_10' THEN '할인금액' 
-				 				   WHEN 'G240_11' THEN '할인율' END) AS DC_WAY 
-				  , TC.DC_PVAL
-				  , TC.DC_MVAL
-				  , TC.DC_AVAL
-				  , TC.MAX_DC_AMT
-				  , TC.PD_GB, AVAIL_STDT
-				  , TC.AVAIL_EDDT
-				  , TC.AVAIL_DAYS
-				  , TC.CUST_PUB_LIMIT_QTY
-				  , TC.TOT_PUB_LIMIT_QTY
-				  , TC.ONE_PUB_QTY
-				  , TC.DN_GB
-				  , TC.DOWN_STDT
-				  , TC.DOWN_EDDT
-				  , TC.BUY_LIMIT_AMT
-				  , TC.REISSUANCE
-				  , TC.CPN_STAT
-				  , TC.END_ALIM_YN
-				  , TC.FIRST_ORD_YN
-				  , TC.DOWN_ABL_YN
-				  , TC.DC_CD_GB
-				  , TC.CUST_JOIN_STDT
-				  , TC.CUST_JOIN_EDDT
-				  , TC.BUY_STDT
-				  , TC.BUY_EDDT
-				  , TC.NEW_CUST_YN
-			FROM TB_PLAN_CONTENTS PC INNER JOIN TB_PLAN_CONTENTS_ITEM PCI ON PC.PLAN_CONT_SQ = PCI.PLAN_CONT_SQ 
-			  						 INNER JOIN TB_COUPON TC ON PCI.ITEM_VAL = TC.CPN_ID 
-			WHERE 1=1 
-			<if test="planSq != null and planSq != ''">
-				AND PC.PLAN_SQ = #{planSq}
-			</if>
-				AND PC.TMPL_TYPE = 'G082_20'
-				AND PC.DISP_YN ='Y'
-				AND NOW() BETWEEN TC.AVAIL_STDT AND TC.AVAIL_EDDT
-				AND NOW() BETWEEN TC.DOWN_STDT AND TC.DOWN_EDDT 
-		)F
- 
+		GROUP BY    C.CPN_ID 
+		           ,C.CPN_NM 
+		           ,C.CPN_DESC       
+		           ,C.CPN_TYPE 
+		           ,C.BUY_LIMIT_AMT 
+		           ,C.CUST_PUB_LIMIT_QTY 
+		           ,C.TOT_PUB_LIMIT_QTY
+		           ,C.MAX_DC_AMT
 	</select>
 	
 	<select id="getPlanImageInfo" parameterType="Plan" resultType="Plan">

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

@@ -348,7 +348,7 @@
 		<include refid="selectForPagingHeader"/>
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
 		     -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
-		     , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
@@ -480,7 +480,7 @@
 		/* TsfReivew.getReviewGoodsInfo */
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
 		  -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
-		     , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(CONCAT(' ',OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
@@ -904,12 +904,12 @@
 		)F
 	</select>
 	
-	<select id="getAlreadyReviewList" parameterType="Review" resultType="Goods">
+	<select id="getAlreadyReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getAlreadyReviewList */
 		<include refid="selectForPagingHeader"/>
 		        SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
 		          -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
-		             , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		             , GROUP_CONCAT(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		             , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		             , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		             , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM

+ 2 - 7
src/main/resources/config/application-run.yml

@@ -29,7 +29,7 @@ logging.config: classpath:log/logback-run.xml
 domain:
     front: //www.style24.com
     image: //image.style24.com
-    uximage: //www.style24.com
+    uximage: //image.istyle24.com/Upload
 
 # SSL Server
 has-ssl: true
@@ -39,7 +39,7 @@ upload:
         target.path: /app/was/deploy/wivismall.front/data
         max.size: 10
         allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.style24.com/speedy_image-wivismall
+        view: //image.istyle24.com/Upload
     goods:
         target.path: /app/was/deploy/wivismall.front/data/goods
         max.size: 10
@@ -50,11 +50,6 @@ upload:
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
         view: //image.istyle24.com/Upload
-    excel:
-        target.path: /app/was/deploy/wivismall.front/data/excel
-        max.size: 10
-        allow.extension: xls|xlsx
-        view: //www.style24.com/excel
 
 download.path: /app/was/deploy/wivismall.front/data
 

+ 11 - 1
src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html

@@ -113,7 +113,17 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	$(document).ready( function() {
+	$(document).ready(function() {
+		$.getJSON('/cart/goods/not/soldout/cnt', function (order, status) {
+			let cartCnt;
+			if (order.totCartCnt > 99) {
+				cartCnt = "99+";
+			} else {
+				cartCnt = order.totCartCnt;
+			}
+
+			$("header #htopSub .button_wrap .store>span").text(cartCnt);
+		});
 	});
 /*]]>*/
 </script>

+ 366 - 256
src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html

@@ -20,9 +20,9 @@
 <main role="" id="" class="container my">
 	<section class="content my_return">
 		<form id="cancelForm" class="form_wrap">
-			<input type="hidden" name="accountNo" th:value="${oneData.accountNo}"/>
-			<input type="hidden" name="accountNm" th:value="${oneData.accountNm}"/>
-			<input type="hidden" name="bankCd" th:value="${oneData.bankCd}"/>
+			<input type="hidden" name="accountNo" 	th:value="${oneData.accountNo}"/>
+			<input type="hidden" name="accountNm" 	th:value="${oneData.accountNm}"/>
+			<input type="hidden" name="bankCd" 		th:value="${oneData.bankCd}"/>
 					
 			<div class="inner wide bg_beige">
 				<div class="order_number">
@@ -38,102 +38,78 @@
 						<div th:unless="${oneData.giftPackYn == 'Y'}" class="goods_date">주문일<span class="date" th:text="${oneData.ordDt}"></span></div>
 						<div th:if="${oneData.giftPackYn == 'Y'}" class="goods_date">선물일<span class="date" th:text="${oneData.ordDt}"></span></div>
 					</div>
-					<div class="goods_section">
-						<div class="goods_detail">
-							<a href="">
-								<div class="thumb_box">
-									<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
-								</div>
-								<div class="info_box">
-									<div class="od_name">
-										<div class="brand">
-											<span>Mollimelli 몰리멜리</span>
-											<div class="badge_wrap">
-												<em class="order_badge">업체직배송</em>
+					
+					<!-- 취소상품목록 -->
+					<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<div class="goods_section">
+							<div class="goods_detail">
+								<a href="">
+									<div class="thumb_box">
+										<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
+									</div>
+									<div class="info_box">
+										<div class="od_name">
+											<div class="brand">
+												<span th:text="${cancel.brandNm}"></span>
+												<div class="badge_wrap">
+													<em class="tag primary" th:if="${cancel.shotDelvYn == 'Y'}">총알배송</em>
+													<em class="tag" th:if="${cancel.shotDelvYn == 'N' and cancel.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
+													<em class="tag" th:if="${cancel.selfGoodsYn == 'N'}">업체직배송</em>
+												</div>
 											</div>
+											<div class="name" th:text="${cancel.goodsNm}"></div>
 										</div>
-										<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
-									</div>
-									<div class="od_opt">
-										<div class="option">
-											<em>Black</em>
-											<em>XXL</em>
+										<div class="od_opt">
+												<div class="option">
+													<th:block th:if="${cancel.goodsType == 'G056_S'}" th:each="option, status : ${cancel.colorNmArr}">
+														<em th:text="${cancel.itemNmArr[status.index]}"></em>
+														<em th:text="${cancel.optCd2Arr[status.index]}"></em>
+													</th:block>
+													<th:block th:unless="${cancel.goodsType == 'G056_S'}">
+														<em th:text="${cancel.colorNm}"></em>
+														<em th:text="${cancel.optCd2}"></em>
+													</th:block>
+												</div>
+										</div>
+										<div class="od_calc">
+											<th:block th:if="${(cancel.ordAmt - cancel.cnclRtnAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}">
+												<p class="sale_price">
+													<del><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt, 1, 'COMMA')}"></em>원</del>
+												</p>
+											</th:block>
+											<p class="price">
+												<span class="selling_price">
+													<em th:text="${#numbers.formatInteger(cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt, 1, 'COMMA')}"></em>원
+												</span>
+											</p>
 										</div>
 									</div>
-									<div class="od_calc">
-										<p class="sale_price"><del><em>95,000</em>원</del></p>
-										<p class="price">
-											<span class="selling_price"><em>61,200</em>원</span>
-										</p>
+								</a>
+							</div>
+							<div class="goods_select">
+								<div class="select_custom select_count">
+									<div class="combo">
+										<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${cancel.ordDtlNo}, ordCanChgQty=${cancel.ordCanChgQty}"/>
+										<div class="select">수량 0개</div>
 									</div>
 								</div>
-							</a>
-						</div>
-						<div class="goods_select">
-							<div class="select_custom select_count">
-								<div class="combo">
-									<div class="select">수량 0개</div>
-								</div>
 							</div>
+							<th:block th:if="${#lists.size(cancelList.cancelList) == status.count}">
+								<div class="goods_txt">
+									<p class="cf_txt cf_desc">취소하실 상품의 수량을 선택하신 후<br>취소 신청을 하실 수 있습니다.</p>
+								</div>
+							</th:block>
 						</div>
-						<div class="goods_txt">
-							<p class="cf_txt cf_desc">취소하실 상품의 수량을 선택하신 후<br>취소 신청을 하실 수 있습니다.</p>
-						</div>
-					</div>
-				</div>
-			</div>
-			<div class="inner">
-				<div class="tbl_wrap">
-					<div class="tbl_tit"> 
-						<h3>취소 사유</h3>
-					</div>
-					<div class="tbl tbl_tarea">
-						<table>
-							<colgroup>
-								<col width="*">
-							</colgroup>   
-							<tr>
-								<th class="sr-only">취소 접수 일자</th>
-								<td>
-									<div class="select_custom select_return">
-										<div class="combo">
-											<div class="select">취소 사유를 선택하세요.</div>
-											<ul class="list">
-												<li>단순 변심</li>
-												<li>색상/사이즈가 상이</li>
-												<li>타사이트가 더 저렴함</li>
-												<li>상품옵션 선택 잘못 함</li>
-												<li>상품 결함이 있음</li>
-												<li>실제 상품이 상품 설명과 다름</li>
-												<li>포장과 상품이 훼손 됨</li>
-												<li>상품이 훼손 됨(포장은 양호)</li>
-												<li>주문상품 일부가 배송되지 않음</li>
-												<li>구성품, 부속품이 없음</li>
-												<li>다른 상품이 배송됨(주문상품 아님)</li>
-												<li>상품이 늦게 배송 됨</li>
-											</ul>
-										</div>
-									</div>
-								</td>
-							</tr>
-							<tr>
-								<th class="sr-only">취소 완료 일자</th>
-								<td>
-									<div class="textarea_wrap">
-										<textarea class="doc_return" name="" id="" placeholder="자세한 사유를 입력해주세요."></textarea>
-										<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
-									</div>
-								</td>
-							</tr>
-						</table>
-					</div>
+					</th:block>
+					<!-- //취소상품목록 -->
+					
 				</div>
 			</div>
 			<div class="inner">
 				<div class="tbl_wrap pay_wrap">
 					<div class="tbl_tit"> 
 						<h3>환불 정보</h3>
-						<strong class="pay"><span>123,456,789</span>원</strong>
+						<strong class="pay"><span id="returnAmt">0</span>원</strong>
 					</div>
 					<div class="tbl type1">
 						<table>
@@ -148,7 +124,7 @@
 											<dt>상품 취소 금액</dt>
 											<dd>
 												<div>
-													<span>123,456,789</span>원
+													<span id="goodsCancelAmt">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -156,7 +132,7 @@
 											<dt>배송비</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="deliveryFee">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -164,7 +140,7 @@
 											<dt>할인 금액 차감</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="deductDcAmt">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -174,7 +150,10 @@
 											<dt>환불 수단</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span th:if="${paymentInfo.pgGb == 'KCP'}" th:text="${paymentInfo.payMeansNm}"></span>
+													<span th:if="${paymentInfo.pgGb == 'NAVER'}" th:text="|네이버페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'KAKAO'}" th:text="|카카오페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'PAYCO'}" th:text="|PAYCO|"></span>
 												</div>
 											</dd>
 										</div>
@@ -182,7 +161,7 @@
 											<dt>결제금액 환불</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="refundPayAmt">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -190,7 +169,7 @@
 											<dt>포인트 환불</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="refundPoint">0</span>P
 												</div>
 											</dd>
 										</div>
@@ -198,7 +177,7 @@
 											<dt>상품권 환불</dt>
 											<dd>
 												<div>
-													<span>3000</span>P
+													<span id="refundGiftCard">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -206,207 +185,338 @@
 								</td>
 							</tr>
 						</table>
+						<!-- 
 						<button type="button" class="btn btn_default"><span>취소 전표 보기</span></button>
+						 -->
 					</div>
 				</div>
 				<div class="required_group">
-					<p>배송비 <span class="c_primary">5,000원</span> 추가 결제가 필요합니다.</p>
+					<p>배송비 <span class="c_primary" id="addPayCost">0원</span> 추가 결제가 필요합니다.</p>
 				</div>
 				<div class="btn_group btn_group_flex">
-					<div><button type="button" class="btn btn_default"><span>취소</span></button></div>
-					<div><button type="button" id="btn_order_return" class="btn btn_dark"><span>취소 신청</span></button></div> <!-- 210409_추가 : btn_order_return id 추가 -->
+					<div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"><span>취소</span></button></div>
+					<div><button type="button" id="btn_order_return" class="btn btn_dark" onclick="fnCancel();"><span>주문 취소</span></button></div>
 				</div>
 			</div>
 		</form>
 	</section>
 </main>
+
+<!-- 210408_취소 수량 선택 팝업 -->
+<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}">
+	<div class="popup_box returnCountPop">
+		<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"><span>수량 0개</span></button>
+					<th:block th:each="num : ${#numbers.sequence(1,cancel.ordCanChgQty)}">
+						<button type="button" th:qty="${num}" onclick="fnChangeCancelQty(this);"><span th:text="|수량 ${num}개|"></span></button>
+					</th:block>
+					<input type="hidden" name="ordDtlNo" th:value="${cancel.ordDtlNo}">
+				</div> 
+			</div>
+		</div>
+	</div>
+</th:block>
+<!-- //210408_취소 수량 선택 팝업 -->
+
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
-	let cancelList = [[${cancelList}]];
-	let oneData = [[${oneData}]];
-	let paymentInfo = [[${paymentInfo}]];
-	let addPayCost = 0;
+let cancelList 		= [[${cancelList}]];
+let oneData 		= [[${oneData}]];
+let paymentInfo 	= [[${paymentInfo}]];
+let addPayCost 		= 0;
 
-	$(document).ready(function() {
-		// 마이페이지 LNB 설정
-		fnSetMypageLnbList(2);
+$(document).ready(function() {
+	
+});
 
-		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '취소 신청');
+// 취소수량버튼기능
+$(".select_custom.select_count").each(function(idx){
+	$(this).on("click", function(){
+		// 전체비활성화
+		$(".returnCountPop").hide();
+		
+		// 수량팝업활성화
+		$(".returnCountPop").eq(idx).show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+	});
+});
 
-		// 셀렉트박스 활성화
-		$(".myOrderView .part_goods .select_custom.select_count").each(function() {
-			new sCombo(this);
-		});
+// 취소 처리
+var fnCancel = function() {
+	// 주문상세번호 및 취소 수량 설정
+	let ordDtlNoArr 			= [];
+	let cnclRtnReqQtyArr 		= [];
+	let chkQty 					= 0;
+	
+	$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
+		let chgQty 		= $(item).val();
+		let ordDtlNo 	= $(item).attr('ordDtlNo');
+		
+		ordDtlNoArr.push(Number(ordDtlNo));
+		cnclRtnReqQtyArr.push(Number(chgQty));
+		chkQty += chgQty;
 	});
 
-	// 취소 처리
-	var fnCancel = function() {
-		// 취소수량 설정
-		//fnChangeCancelQty();
-
-		// 주문상세번호 및 취소 수량 설정
-		let ordDtlNoArr = [];
-		let cnclRtnReqQtyArr = [];
-		let chkQty = 0;
-		$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
-			let chgQty = $(item).val();
-			let ordDtlNo = $(item).attr('ordDtlNo');
-			
-			ordDtlNoArr.push(Number(ordDtlNo));
-			cnclRtnReqQtyArr.push(Number(chgQty));
-			chkQty += chgQty;
+	// 취소 수량 체크
+	if (chkQty == 0) {
+		mcxDialog.alert('취소하실 상품의 수량을 선택해주세요.');
+		return false;
+	}
+
+	// 환불계좌 체크
+	let accountNo 	= $('#cancelForm input[name=accountNo]').val();
+	let accountNm 	= $('#cancelForm input[name=accountNm]').val();
+	let bankCd 		= $('#cancelForm input[name=bankCd]').val();
+
+	// 무통장입금, 결제완료 일때 환불계좌정보 체크
+	if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+		let data 		= {};
+		data.ordNo 		= oneData.ordNo;
+		data.accountNm 	= oneData.accountNm;
+		let jsonData	 = JSON.stringify(data);
+
+		$.ajax( {
+			type		: "POST",
+			url 		: '/mypage/refund/account/register/popup/form',
+			data		: jsonData,
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				$("#refundPop .modal-dialog .modal-content").html(result);
+				$("#refundPop").modal("show");
+			}
 		});
+		
+		return false;
+	}
 
-		// 취소 수량 체크
-		if (chkQty == 0) {
-			mcxDialog.alert('취소하실 상품의 수량을 선택해주세요.');
-			return false;
-		}
+	// 취소요청 데이터 설정
+	let url = '/mypage/cancel';
+
+	// 취소 처리
+	let data = {};
+	data.ordNo 				= oneData.ordNo;
+	data.chgReason 			= 'G686_10';
+	data.chgReasonNm 		= '고객변심';
+	data.accountNo 			= accountNo;
+	data.accountNm 			= accountNm;
+	data.bankCd 			= bankCd;
+	data.isCustomer 		= 'Y';
+	data.reqGbn 			= 'cnclComplete';
+	data.pgTid 				= paymentInfo.pgTid;
+	data.payAmt 			= paymentInfo.payAmt;
+	data.ordDtlNoArr 		= ordDtlNoArr;
+	data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
 
-		// 환불계좌 체크
-		let accountNo = $('#cancelForm input[name=accountNo]').val();
-		let accountNm = $('#cancelForm input[name=accountNm]').val();
-		let bankCd = $('#cancelForm input[name=bankCd]').val();
-
-		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
-			let data = {};
-			data.ordNo = oneData.ordNo;
-			data.accountNm = oneData.accountNm;
-
-			let jsonData = JSON.stringify(data);
-
-			$.ajax( {
-				type		: "POST",
-				url 		: '/mypage/refund/account/register/popup/form',
-				data		: jsonData,
-				dataType 	: 'html',
-				beforeSend : function(xhr, settings) {
-					xhr.setRequestHeader("AJAX"			, "true");
-					xhr.setRequestHeader('Accept'		, 'application/json');
-					xhr.setRequestHeader('Content-Type'	, 'application/json');
-				},
-				success 	: function(result) {
-					$("#refundPop .modal-dialog .modal-content").html(result);
-					$("#refundPop").modal("show");
-				}
+	let jsonData = JSON.stringify(data);
+	
+	// 취소 처리 가능 여부 조회
+	gagajf.ajaxJsonSubmit('/mypage/wms/cancel/available', jsonData, function(result) {
+		if (result.cancelYn == 'Y') {
+			// 취소 처리
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
 			});
-			
-			return false;
+		} else {
+			mcxDialog.alert('이미 배송처리 되어 취소 처리에 실패 하였습니다.');
 		}
+	});
+}
 
-		// 취소요청 데이터 설정
-		let url = '/mypage/cancel';
-
-		// 취소 처리
-		let data = {};
-		data.ordNo = oneData.ordNo;
-		data.chgReason = 'G686_10';
-		data.chgReasonNm = '고객변심';
-		data.accountNo = accountNo;
-		data.accountNm = accountNm;
-		data.bankCd = bankCd;
-		data.isCustomer = 'Y';
-		data.reqGbn = 'cnclComplete';
-		data.pgTid = paymentInfo.pgTid;
-		data.payAmt = paymentInfo.payAmt;
-		data.ordDtlNoArr = ordDtlNoArr;
-		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
-
-		let jsonData = JSON.stringify(data);
-		
-		// 취소 처리 가능 여부 조회
-		gagajf.ajaxJsonSubmit('/mypage/wms/cancel/available', jsonData, function(result) {
-			if (result.cancelYn == 'Y') {
-				// 취소 처리
-				gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-					cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
-				});
-			} else {
-				mcxDialog.alert('이미 배송처리 되어 취소 처리에 실패 하였습니다.');
+// 취소 수량 변경 이벤트 처리
+var fnChangeCancelQty = function(param) {
+	let url = '/mypage/cancel/refund/amt/calculate';
+	
+	// 취소수량설정
+	if (param != null) {
+		$("#cancelForm input[name=chgQty]").each(function(idx){
+			var ordDtlNo = $(this).attr("ordDtlNo");
+			if (ordDtlNo == $(param).parent().find("input[name=ordDtlNo]").val()) {
+				$(this).val($(param).attr("qty"));
+				$(this).parent().find(".select").text($(param).find("span").text());
 			}
 		});
 	}
+
+	// 취소 수량 설정
+	let cnclRtnReqQtyArr 	= [];
+	let ordDtlNoArr 		= [];
+	let ordCanChgQtyArr 	= [];
 	
-	// 취소 수량 변경 이벤트 처리
-	var fnChangeCancelQty = function(param) {
-		let url = '/mypage/cancel/refund/amt/calculate';
+	$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
+		let chgQty 			= $(item).val();
+		let ordDtlNo		= $(item).attr('ordDtlNo');
+		let ordCanChgQty 	= $(item).attr('ordCanChgQty');
+		
+		cnclRtnReqQtyArr.push(Number(chgQty));
+		ordDtlNoArr.push(Number(ordDtlNo));
+		ordCanChgQtyArr.push(Number(ordCanChgQty));
+	});
+
+	let data = {};
+	data.ordNo 				= oneData.ordNo;
+	data.ordDtlNoArr 		= ordDtlNoArr;
+	data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
+
+	let jsonData = JSON.stringify(data);
 
-		if (param != null) {
-			$(param).parent().parent().find('input[name=chgQty]').val($(param).attr('qty'));
+	gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+		// 환불포인트, 환불상품권 금액 계산
+		let refundPoint 		= Number(result.spanPntDcAmt);
+		let refundGiftCard 		= Number(result.spanGfcdUseAmt);
+
+		let spanCnclRtnAmt 		= Number(result.spanCnclRtnAmt);
+		let sumDeliveryFee 		= Number(result.sumDeliveryFee);
+		let spanTotDeliveryFee 	= Number(result.spanTotDeliveryFee);
+		let spanCpnDcAmt 		= Number(result.spanCpnDcAmt);
+		let spanTmtbDcAmt 		= Number(result.spanTmtbDcAmt);
+		let spanPrePntDcAmt 	= Number(result.spanPrePntDcAmt);
+		let spanRefundAmt 		= Number(result.spanRefundAmt);
+
+		let goodsCancelAmt 		= spanCnclRtnAmt;											// 상품취소금액
+		let deliveryFee 		= sumDeliveryFee - spanTotDeliveryFee;						// 배송비
+		let deductDcAmt 		= 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
+		let refundPayAmt 		= spanRefundAmt;											// 결제금액 환불
+		let returnAmt 			= refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
+
+		// 추가배송비 영역 설정
+		if (refundPayAmt < 0) {
+			refundPayAmt = spanRefundAmt;
+			$('#addDeliveryFee').css('display', '');
+			$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
+			addPayCost = spanTotDeliveryFee;
+		} else {
+			$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
+			addPayCost = 0;
 		}
 
-		// 취소 수량 설정
-		let cnclRtnReqQtyArr = [];
-		let ordDtlNoArr = [];
-		let ordCanChgQtyArr = [];
-		$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
-			let chgQty = $(item).val();
-			let ordDtlNo = $(item).attr('ordDtlNo');
-			let ordCanChgQty = $(item).attr('ordCanChgQty');
-			
-			cnclRtnReqQtyArr.push(Number(chgQty));
-			ordDtlNoArr.push(Number(ordDtlNo));
-			ordCanChgQtyArr.push(Number(ordCanChgQty));
-		});
+		// 금액 설정
+		$('#returnAmt').text(returnAmt.addComma());
+		$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
+		$('#deliveryFee').text(deliveryFee.addComma());
+		$('#deductDcAmt').text(deductDcAmt.addComma());
+		$('#refundPayAmt').text(refundPayAmt.addComma());
+		$('#refundPoint').text(refundPoint.addComma());
+		$('#refundGiftCard').text(refundGiftCard.addComma());
+	});
+}
 
-		let data = {};
-		data.ordNo = oneData.ordNo;
-		data.ordDtlNoArr = ordDtlNoArr;
-		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
-
-		let jsonData = JSON.stringify(data);
-
-		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
-			// 환불포인트, 환불상품권 금액 계산
-			let refundPoint = Number(result.spanPntDcAmt);
-			let refundGiftCard = Number(result.spanGfcdUseAmt);
-
-			let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);
-			let sumDeliveryFee = Number(result.sumDeliveryFee);
-			let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);
-			let spanCpnDcAmt = Number(result.spanCpnDcAmt);
-			let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);
-			let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);
-			let spanRefundAmt = Number(result.spanRefundAmt);
-
-			let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
-			let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
-			let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
-			let refundPayAmt = spanRefundAmt;											// 결제금액 환불
-			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
-
-			// 추가배송비 영역 설정
-			if (refundPayAmt < 0) {
-				refundPayAmt = spanRefundAmt;
-				$('#addDeliveryFee').css('display', '');
-				$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
-				addPayCost = spanTotDeliveryFee;
-			} else {
-				addPayCost = 0;
-			}
+// 환불계좌 등록 콜백 처리
+var fnRegisterAccountCallback = function(result) {
+	// 환불계좌 정보 설정
+	$('#cancelForm input[name=accountNo]').val(result.accountNo);
+	$('#cancelForm input[name=accountNm]').val(result.accountNm);
+	$('#cancelForm input[name=bankCd]').val(result.bankCd);
 
-			// 금액 설정
-			$('#returnAmt').text(returnAmt.addComma());
-			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
-			$('#deliveryFee').text(deliveryFee.addComma());
-			$('#deductDcAmt').text(deductDcAmt.addComma());
-			$('#refundPayAmt').text(refundPayAmt.addComma());
-			$('#refundPoint').text(refundPoint.addComma());
-			$('#refundGiftCard').text(refundGiftCard.addComma());
+	// 취소처리
+	fnCancel();
+}
+</script>
+
+<script>
+$(document).ready(function(){
+	/*
+	// 세부 사유 글자 수 제한
+	$('.doc_return').keyup(function(e){
+		var content = $(this).val();
+		$('#return_cnt').html(content.length);
+		if (content.length > 200){
+			mcxDialog.alert("최대 200자까지 입력 가능합니다."); //210420_수정 : 시스템 alert -> dialog 변경.
+			$(this).val(content.substring(0, 200));
+			$('#return_cnt').html("200");
+		}
+	});
+
+	//210408_추가 : 스크립트 추가.
+	//반품회수방법 선택 스크립트 추가
+	$(document).on('change','.my_return .retrieve_method #rdi_retrieve_visit',function(e){
+		$('.my_return .retrieve_box.direct').hide();
+		$('.my_return .retrieve_box.visit').show();
+		return false;
+	}).on('change','.my_return .retrieve_method #rdi_retrieve_direct',function(e){
+		$('.my_return .retrieve_box.visit').hide();
+		$('.my_return .retrieve_box.direct').show();
+		return false;
+	});
+
+	//버튼 색
+	$(document).on('click','.popup_box .button_list button',function(){
+		$('.popup_box .button_list button').removeClass('on');
+		$(this).addClass('on');
+	});
+
+	// 반품 수량 선택 팝업
+	//$(document).on("click",".select_custom.select_count",function(e){
+		//$('#returnCountPop').show().addClass("active");
+		//$("body").css({"overflow":"hidden"});
+	//});
+
+	//반품 사유 선택 팝업
+	$(document).on("click",".select_custom.select_return",function(e){
+		$('#returnReasonPop').show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+	});
+
+	//팝업_닫기
+	$('.popup_close').on("click",function(){
+		$('.popup_box').hide().removeClass('active');
+		$("body").css({"overflow":"visible"});
+	});
+
+	//배송지추가_팝업
+	$(document).on('click','#btn_adrsAdd_pop',function(e){
+		$("#adrsAddPop").modal("show");
+		return false;
+	});      
+	$("#adrsAddPop_close").click(function() {
+		$("#adrsAddPop").modal("hide");
+	});
+
+	//배송지정보_팝업
+	$(document).on('click','#btn_adrsChange_pop',function(e){
+		$("#adrsChangePop").modal("show");
+		return false;
+	});
+	$("#adrsChangePop_close").click(function() {
+		$("#adrsChangePop").modal("hide");
+	});
+
+	//배송지수정_팝업
+	$(document).on('click','#btn_addrModify_pop',function(e){
+		$("#adrsModifyPop").modal("show");
+		return false;
+	});
+	$("#adrsModifyPop_close").click(function() {
+		$("#adrsModifyPop").modal("hide");
+	});
+
+	$(document).on("click", "#btn_order_return", function(){
+		mcxDialog.alert("반품 신청이 접수되었습니다.", {
+				//alert("반품하실 상품의 수량을 선택해주세요.") : 클릭 시 반품 수량을 모두 0개로 선택한 경우
+				//alert("반품 사유를 선택해주세요.") : 반품 사유를 선택하지 않는 경우
+			sureBtnText: "확인",  // Confirmation button text
 		});
-	}
+	});
+	*/
 
-	// 환불계좌 등록 콜백 처리
-	var fnRegisterAccountCallback = function(result) {
-		// 환불계좌 정보 설정
-		$('#cancelForm input[name=accountNo]').val(result.accountNo);
-		$('#cancelForm input[name=accountNm]').val(result.accountNm);
-		$('#cancelForm input[name=bankCd]').val(result.bankCd);
+});
 
-		// 취소처리
-		fnCancel();
+//210408_송장번호 input 글자 수 제한
+function handleOnInput(el, maxlength) {
+	if(el.value.length > maxlength)  {
+		el.value = el.value.substr(0, maxlength);
 	}
+}
 </script>
 
 </th:block>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html

@@ -311,7 +311,7 @@
 			data.ordChgSq = ordChgSq;
 			data.chgerRtnMemo = delvMemo;
 		} else {
-			url = 'change/delvery/memo';
+			url = '/mypage/change/delvery/memo';
 			data.delvAddrSq = delvAddrSq;
 			data.delvMemo = delvMemo;
 		}

+ 138 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeCompleteFormMob.html

@@ -0,0 +1,138 @@
+<!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/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageCustSecedeCompleteFormMob.html
+ * @desc    : 마이페이지 > 회원탈퇴 완료 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.04   jsshin      최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+<main class="container my">
+	<section class="content myMbLeave">
+		<div class="inner">
+			<div class="mb_leave_complete">
+				<span th:text="${custNm}"></span>님의 STYLE24 회원탈퇴가<br> 정상적으로 처리되었습니다
+			</div>
+			<div class="tbl type5">
+				<table>
+					<colgroup>
+						<col width="25%">
+						<col width="25%">
+					</colgroup>
+					<thead>
+						<tr>
+							<th scope="col">진행중<p>(주문/취소/반품/교환)</p></th>
+							<th scope="col">포인트<p>(보유/적립예정)</p></th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>
+								<span class="hold_order">
+									<em id="ordCnt">0</em>&nbsp;/&nbsp;
+									<em id="cnclCnt">0</em>&nbsp;/&nbsp;
+									<em id="rtnCnt">0</em>&nbsp;/&nbsp;
+									<em id="exCnt">0</em>
+								</span>
+							</td>
+							<td>
+								<span class="hold_point">
+									<em id="pntAmt" th:text="|${#numbers.formatDecimal(pointInfo.rmPntAmt, 0, 'COMMA', 0, 'POINT')}P|">0P</em>&nbsp;&nbsp;/&nbsp;
+									<em id="expAmt" th:text="|${#numbers.formatDecimal(pointInfo.expectedPntAmt, 0, 'COMMA', 0, 'POINT')}P|">0P</em>
+								</span>
+							</td>
+						</tr>
+					</tbody>
+					<thead>
+						<tr>
+							<th scope="col">상품권 잔여금액</th>
+							<th scope="col">쿠폰</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>
+								<span class="hold_voucher">
+									<em id="giftAmt" th:text="|${#numbers.formatDecimal(rmGfcdAmt, 0, 'COMMA', 0, 'POINT')}원|">0원</em>
+								</span>
+							</td>
+							<td>
+								<span class="hold_coupon">
+									<em id="cpnCnt" th:text="|${#numbers.formatDecimal(couponCnt, 0, 'COMMA', 0, 'POINT')}장|">0장</em>
+								</span>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+
+		</div>
+
+		<div class="inner">
+			<div class="announce_txt">
+				<div class="announce_list">
+					<ul>
+						<li>탈퇴 시 소유하고 있는 포인트, 쿠폰 등은 모두 소멸됩니다.</li>
+						<li>거래 정보가 있는 경우 전자상서래 등에서의 소비자 보호에 관한 법률에 따라 계약 또는 청약철외에 관란 기록, 대금 결제 및 재화 등의 공급에 대한 기록은 5년 동안 보존됩니다.</li>
+						<li>보유하셨던 상품권 금액은 탈퇴와 함께 삭제되면 환불되지 않습니다.<br>회원탈퇴 후 STYLE24에 입력하신 상품문의 및 후기, 댓글은 삭제되지 않으며, 회원 정보 삭제로 인해 작성자 본인을 확인할 수 없어 편집 및 삭제 처리가 원천적으로 불가능합니다. 상품문의 및 후기, 댓글 삭제를 원하시는 경우에는 먼저 해당게시물을 삭제하신 후 탈퇴를 신청하시기 바랍니다.</li>
+						<li>진행 중인 주문/취소/반품/교환 건이 있을 경우 탈퇴가 되지 않습니다.</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+		<div class="inner">
+			<div class="goods_btn_wrap btn_group_flex">
+				<div>
+					<button type="button" id="btnConfirm" class="btn btn_dark" onclick="cfnGoToPage(_PAGE_MAIN);">
+						<span>확인</span>
+					</button>
+				</div>
+			</div>
+		</div>
+	</section>
+</main>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	const orderStatInfo = [[${orderStatInfo}]];
+
+	var fnOrderStatInit = function () {
+
+		// 진행중인 주문건
+		let orderTotal = orderStatInfo.depositWaitingCount + orderStatInfo.waitingAddPaymentCount
+			+ orderStatInfo.paymentCompleteCount + orderStatInfo.goodsPrepareCount
+			+ orderStatInfo.shipPrepareCount + orderStatInfo.shippingCount;
+		let total = orderTotal + orderStatInfo.cancelCount + orderStatInfo.returnCount + orderStatInfo.exchangeCount;
+
+		$('#ordCnt').text(orderTotal.addComma());
+		// 진행중인 취소건
+		$('#cnclCnt').text(orderStatInfo.cancelCount.addComma());
+		// 진행중인 반품건
+		$('#rtnCnt').text(orderStatInfo.returnCount.addComma());
+		// 진행중인 교환건
+		$('#exCnt').text(orderStatInfo.exchangeCount.addComma());
+		// 토탈 건수
+		$('#totalCnt').text(total);
+
+	}
+
+	$(document).ready( function() {
+		fnOrderStatInit();
+		$('#htopTitle').text('회원탈퇴');
+	});
+	/*]]>*/
+</script>
+</th:block>
+</body>
+</html>

+ 282 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeFormMob.html

@@ -0,0 +1,282 @@
+<!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/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageCustSecedeFormMob.html
+ * @desc    : 마이페이지 > 탈퇴화면
+ *
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.04   jsshin      최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<style>
+.hide{display:none}
+</style>
+<main class="container my">
+	<section class="content myMbLeave">
+		<div class="inner">
+			<div class="tbl type5">
+				<table>
+					<colgroup>
+						<col width="25%">
+						<col width="25%">
+					</colgroup>
+					<thead>
+						<tr>
+							<th scope="col">진행중<p>(주문/취소/반품/교환)</p></th>
+							<th scope="col">포인트<p>(보유/적립예정)</p></th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>
+								<span class="hold_order">
+									<em id="ordCnt">0</em>&nbsp;/&nbsp;
+									<em id="cnclCnt">0</em>&nbsp;/&nbsp;
+									<em id="rtnCnt">0</em>&nbsp;/&nbsp;
+									<em id="exCnt">0</em>
+								</span>
+							</td>
+							<td>
+								<span class="hold_point">
+									<em id="pntAmt" th:text="|${#numbers.formatDecimal(pointInfo.rmPntAmt, 0, 'COMMA', 0, 'POINT')}P|">0P</em>&nbsp;/&nbsp;
+									<em id="expAmt" th:text="|${#numbers.formatDecimal(pointInfo.expectedPntAmt, 0, 'COMMA', 0, 'POINT')}P|">0P</em>
+								</span>
+							</td>
+						</tr>
+					</tbody>
+					<thead>
+						<tr>
+							<th scope="col">상품권 잔여금액</th>
+							<th scope="col">쿠폰</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>
+								<span class="hold_voucher">
+									<em id="giftAmt" th:text="|${#numbers.formatDecimal(rmGfcdAmt, 0, 'COMMA', 0, 'POINT')}원|">0원</em>
+								</span>
+							</td>
+							<td>
+								<span class="hold_coupon">
+									<em id="cpnCnt" th:text="|${#numbers.formatDecimal(couponCnt, 0, 'COMMA', 0, 'POINT')}장|">0장</em>
+								</span>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+
+		</div>
+		<form id="secedeCustForm" class="form_wrap" action="/mypage/customer/secede/complete/form" method="post">
+		<div class="inner">
+			<div class="titWrap">
+				<div class="">보안을 위해 회원님의<br>아이디 및 비밀번호를 다시 확인 합니다.</div>
+			</div>
+				<div class="tblWrap">
+					<div class="tbl">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<td>
+										<div class="form_field">
+											<input type="text" id="custId" name="custId" class="form_control" readonly="readonly"/>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<td>
+										<div class="form_field">
+											<input type="password" id="passwd" name="passwd" class="form_control" placeholder="비밀번호를 입력해주세요." minlength="8" maxlength="20"/>
+										</div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+		</div>
+		<div class="inner">
+			<div class="announce_txt">
+				<div class="announce_list">
+					<ul>
+						<li>탈퇴 시 소유하고 있는 포인트, 쿠폰 등은 모두 소멸됩니다.</li>
+						<li>거래 정보가 있는 경우 전자상거래 등에서의소비자 보호에 관한 법률에 따라 계약 또는 청약철회에 과난 기록, 대금 결제 및 재화 등의 공급에 대한 기록은 5년 동안 보존됩니다.</li>
+						<li>보유하셨던 상품권 금액은 탈퇴와 함께 삭제되며 환불되지 않습니다.<br>회원탈퇴 후 STYLE24에 입력하신 상품문의 및 후기, 댓글은 삭제되지 않으면, 회원정보 삭제로 인해 작성자 본인을 확인할 수 없어 편집 및 삭제 처리가 원천적으로 불가능합니다. 상품문의 및 후기, 댓글 삭제를 원하시는 경우에는 먼저 해당 게시물을 삭제하신 후 탈퇴를 신청하시기 바랍니다.</li>
+						<li>진행 중인 주문/취소/반품/교환 건이 있을 경우 탈퇴가 되지 않습니다.</li>
+					</ul>
+				</div>
+			</div>
+			<div class="check_box">
+				<div class="form_field">
+					<div>
+						<input type="checkbox" name="checkSecede" id="checkSecede" value="Y">
+						<label for="checkSecede">
+							<span>STYLE24 회원탈퇴 시 처리사항 안내를 확인하였음에 동의합니다.</span>
+						</label>
+					</div>
+				</div>
+			</div>
+		</div>
+		</form>
+		<div class="inner">
+			<div class="goods_btn_wrap btn_group_flex">
+				<div>
+					<button type="button" id="btnSaveSecede" class="btn btn_dark">
+						<span>회원탈퇴</span>
+					</button>
+					<button type="button" id="btnConfirm" class="btn btn_dark hide" onclick="cfnGoToPage(_PAGE_MAIN);">
+						<span>확인</span>
+					</button>
+				</div>
+			</div>
+		</div>
+	</section>
+</main>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	const orderStatInfo = [[${orderStatInfo}]];
+	const snsType = [[${snsType}]];
+	const custId = [[${custId}]];
+
+
+	var fnOrderStatInit = function () {
+		let $leaveIncomplete = $('#leaveIncomplete');
+		let $btnSaveSecede = $('#btnSaveSecede');
+		let $btnConfirm = $('#btnConfirm');
+		let $secedeCustForm = $('#secedeCustForm');
+		let $subH3 = $('.subH3');
+
+		let isPossible = true;
+
+		// 진행중인 주문건
+		let orderTotal = orderStatInfo.depositWaitingCount + orderStatInfo.waitingAddPaymentCount
+			+ orderStatInfo.paymentCompleteCount + orderStatInfo.goodsPrepareCount
+			+ orderStatInfo.shipPrepareCount + orderStatInfo.shippingCount;
+		let total = orderTotal + orderStatInfo.cancelCount + orderStatInfo.returnCount + orderStatInfo.exchangeCount;
+
+		$('#ordCnt').text(orderTotal.addComma());
+		// 진행중인 취소건
+		$('#cnclCnt').text(orderStatInfo.cancelCount.addComma());
+		// 진행중인 반품건
+		$('#rtnCnt').text(orderStatInfo.returnCount.addComma());
+		// 진행중인 교환건
+		$('#exCnt').text(orderStatInfo.exchangeCount.addComma());
+		// 토탈 건수
+		$('#totalCnt').text(total);
+
+		let custIdText = custId;
+		if (snsType === 'NV') {
+			custIdText = '네이버 간편가입회원'
+		}
+		if (snsType === 'KK') {
+			custIdText = '카카오 간편가입회원'
+		}
+		if (snsType === 'YS') {
+			custIdText = 'YES24 간편가입회원'
+		}
+		$('#secedeCustForm input[name=custId]').val(custIdText);
+
+		if (orderTotal > 0) {
+			$('#ordCnt').addClass('on');
+			isPossible = false
+		}
+
+		if (orderStatInfo.cancelCount > 0) {
+			$('#cnclCnt').addClass('on');
+			isPossible = false
+		}
+
+		if (orderStatInfo.returnCount > 0) {
+			$('#rtnCnt').addClass('on');
+			isPossible = false
+		}
+
+		if (orderStatInfo.exchangeCount > 0) {
+			$('#exCnt').addClass('on');
+			isPossible = false
+		}
+
+		if (isPossible) {
+			$subH3.show();
+			$secedeCustForm.show();
+			$btnConfirm.hide();
+			$leaveIncomplete.hide();
+			$btnSaveSecede.show();
+		} else {
+			$subH3.hide();
+			$secedeCustForm.hide();
+			$btnSaveSecede.hide();
+			$leaveIncomplete.show();
+			$btnConfirm.show();
+		}
+
+
+	}
+
+	$('#btnSaveSecede').on('click', function () {
+		let secedeCustInfo = $('#secedeCustForm').serializeObject();
+
+		if (gagajf.isNull(secedeCustInfo.passwd)) {
+			mcxDialog.alertC('비밀번호를 입력해주세요.',{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#secedeCustForm input[name=passwd]').focus();
+				}
+			});
+			return;
+		}
+
+		if (gagajf.isNull(secedeCustInfo.checkSecede)) {
+			mcxDialog.alertC('회원탈퇴 처리사항 안내에 동의해주세요.',{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+				}
+			});
+			return;
+		}
+		let params = {};
+		params.passwd = secedeCustInfo.passwd;
+		let jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit('/mypage/customer/password/confirm', jsonData, fnConfirmPassword)
+	});
+
+	var fnConfirmPassword = function (result) {
+		if (result.isMatch) {
+			$("#secedeCustForm").submit();
+		} else {
+			mcxDialog.alertC('비밀번호를 다시 입력해주세요.',{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#secedeCustForm input[name=passwd]').focus();
+				}
+			});
+			return;
+		}
+	}
+
+
+
+	$(document).ready( function() {
+		fnOrderStatInit();
+		$('#htopTitle').text('회원탈퇴');
+	});
+	/*]]>*/
+</script>
+</th:block>
+</body>
+</html>

+ 33 - 17
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html

@@ -104,7 +104,7 @@
 											<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>P 적립예정</p>
 											<p class="sale_price">
 												<del>
-													<em th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}">95,000</em>원
+													<em th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}">95,000</em>원
 												</del>
 											</p>
 											<p class="price">
@@ -126,7 +126,7 @@
 								<!-- 입금대기, 결제완료, 상품준비중, 출고처지정 : 주문취소 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
 									<div class="goods_btn_wrap btn_group_flex">
-										<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cncl_complete" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></div>
 									</div>
 								</th:block>
 								<!-- //입금대기, 결제완료, 상품준비중, 출고처지정 : 주문취소 -->
@@ -142,10 +142,10 @@
 									<th:block th:if="${ordDtl.changeableYn} == 'Y' or ${ordDtl.returnableYn} == 'Y'">
 										<div class="goods_btn_wrap btn_group_flex">
 											<th:block th:if="${ordDtl.changeableYn} == 'Y'">
-												<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+												<div><button type="button" class="btn btn_default btn_exch_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></div>
 											</th:block>
 											<th:block th:if="${ordDtl.returnableYn} == 'Y'">
-												<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+												<div><button type="button" class="btn btn_default btn_rtn_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></div>
 											</th:block>
 										</div>
 									</th:block>
@@ -156,7 +156,7 @@
 										<div><button type="button" class="btn btn_default btn_delv_sch"><span>배송 조회</span></button></div>
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</div>
@@ -169,25 +169,25 @@
 									<div class="goods_btn_wrap btn_group_flex">
 										<!-- 교환가능, 반품가능 -->
 										<th:block th:if="${ordDtl.changeableYn} == 'Y'">
-											<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+											<div><button type="button" class="btn btn_default btn_exch_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></div>
 										</th:block>
 										<th:block th:if="${ordDtl.returnableYn} == 'Y'">
-											<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+											<div><button type="button" class="btn btn_default btn_rtn_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></div>
 										</th:block>
 										<!-- //교환가능, 반품가능 -->
 										
-										<div><button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary"><span>구매 확정</span></button></div>
+										<div><button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnDecideOrder(this);"><span>구매 확정</span></button></div>
 									</div>
 									<div class="goods_btn_wrap btn_group_flex">
 										<!-- 교환불가, 반품불가 -->
 										<th:block th:if="${ordDtl.changeableYn} == 'N' or ${ordDtl.returnableYn} == 'N'">
-											<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+											<div><button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
 										</th:block>
 										<!-- //교환불가, 반품불가 -->
 										
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</div>
@@ -197,12 +197,12 @@
 								<!-- 구매확정 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
 									<div class="goods_btn_wrap btn_group_flex">
-										<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
-										<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
 										
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</div>
@@ -214,23 +214,23 @@
 							<th:block th:if="${ordDtl.giftPackYn} == 'Y'">
 								<!-- 배송지등록전 -->
 								<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
-									<div><button type="button" class="btn btn_primary btn_sms_send"><span>SMS 재발송</span></button></div>
+									<div><button type="button" class="btn btn_primary btn_sms_send" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></div>
 								</th:block>
 								<!-- //배송지등록전 -->
 								
 								<!-- 배송지등록후 (입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
-									<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+									<div><button type="button" class="btn btn_default btn_cncl_complete" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></div>
 								</th:block>
 								<!-- //배송지등록후 (입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
 								
 								<!-- 배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60' or ${ordDtl.ordDtlStat} == 'G013_70'">
 									<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
-										<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null and ${ordDtl.ordDtlStat} == 'G013_70'">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</th:block>
@@ -690,6 +690,22 @@
 	</section>
 </main>
 
+<form id="exchangeForm" name="exchangeForm" th:action="@{'/mypage/exchange/form'}" th:method="post">
+	<input type="hidden" name="ordNo"/>
+	<input type="hidden" name="ordDtlNo"/>
+	<input type="hidden" name="delvFeeCd"/>
+</form>
+<form id="returnForm" name="returnForm" th:action="@{'/mypage/return/form'}" th:method="post">
+	<input type="hidden" name="ordNo"/>
+	<input type="hidden" name="ordDtlNo"/>
+	<input type="hidden" name="delvFeeCd"/>
+</form>
+<form id="cancelForm" name="cancelForm" th:action="@{'/mypage/cancel/form'}" th:method="post">
+	<input type="hidden" name="ordNo"/>
+	<input type="hidden" name="ordDtlNo"/>
+	<input type="hidden" name="delvFeeCd"/>
+</form>
+
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	let giftMsg				= [[${orderInfo.giftMsg}]];		// 선물메세지

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html

@@ -81,10 +81,10 @@
 									</div>
 									<div class="od_calc">
 										<!-- 판매금액과 할인금액이 같으면 표시 안함 -->
-										<th:block th:if="(${ordDtl.ordAmt} - ${ordDtl.cnclRtnAmt} - ${ordDtl.cpn1DcAmt}) > ${ordDtl.realOrdAmt} + ${ordDtl.pntDcAmt} + ${ordDtl.gfcdUseAmt}">
+										<th:block th:if="(${ordDtl.ordAmt} - ${ordDtl.cnclRtnAmt}) > ${ordDtl.realOrdAmt} + ${ordDtl.pntDcAmt} + ${ordDtl.gfcdUseAmt}">
 											<p class="sale_price">
 												<del>
-													<em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}"></em>원
+													<em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt, 1, 'COMMA')}"></em>원
 												</del>
 											</p>
 										</th:block>

+ 889 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReturnFormMob.html

@@ -0,0 +1,889 @@
+<!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/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypagReturnFormMob.html
+ * @desc    : 마이페이지 > 취소신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+
+<main role="" id="" class="container my">
+	<section class="content my_return">
+		<form id="returnForm" class="form_wrap">
+			<input type="hidden" name="accountNo" 	th:value="${oneData.accountNo}"/>
+			<input type="hidden" name="accountNm" 	th:value="${oneData.accountNm}"/>
+			<input type="hidden" name="bankCd" 		th:value="${oneData.bankCd}"/>
+			<input type="hidden" name="chgReason"/>
+					
+			<div class="inner wide bg_beige">
+				<div class="order_number">
+					<dl class="clear">
+						<dt>주문번호</dt>
+						<dd th:text="${oneData.ordNo}"></dd>
+					</dl>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="part_goods">
+					<div class="goods_top">
+						<div th:unless="${oneData.giftPackYn == 'Y'}" class="goods_date">주문일<span class="date" th:text="${oneData.ordDt}"></span></div>
+						<div th:if="${oneData.giftPackYn == 'Y'}" class="goods_date">선물일<span class="date" th:text="${oneData.ordDt}"></span></div>
+					</div>
+					
+					<!-- 반품상품목록 -->
+					<th:block th:if="${returnList.returnList}" th:each="return, status : ${returnList.returnList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<div class="goods_section">
+							<div class="goods_detail">
+								<a href="">
+									<div class="thumb_box">
+										<img th:src="${imageUrl + '/' + return.sysImgNm}" width="100%" alt="">
+									</div>
+									<div class="info_box">
+										<div class="od_name">
+											<div class="brand">
+												<span th:text="${return.brandNm}"></span>
+												<div class="badge_wrap">
+													<em class="tag primary" th:if="${return.shotDelvYn == 'Y'}">총알배송</em>
+													<em class="tag" th:if="${return.shotDelvYn == 'N' and return.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
+													<em class="tag" th:if="${return.selfGoodsYn == 'N'}">업체직배송</em>
+												</div>
+											</div>
+											<div class="name" th:text="${return.goodsNm}"></div>
+										</div>
+										<div class="od_opt">
+												<div class="option">
+													<th:block th:if="${return.goodsType == 'G056_S'}" th:each="option, status : ${return.colorNmArr}">
+														<em th:text="${return.itemNmArr[status.index]}"></em>
+														<em th:text="${return.optCd2Arr[status.index]}"></em>
+													</th:block>
+													<th:block th:unless="${return.goodsType == 'G056_S'}">
+														<em th:text="${return.colorNm}"></em>
+														<em th:text="${return.optCd2}"></em>
+													</th:block>
+												</div>
+										</div>
+										<div class="od_calc">
+											<th:block th:if="${(return.ordAmt - return.cnclRtnAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}">
+												<p class="sale_price">
+													<del><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt, 1, 'COMMA')}"></em>원</del>
+												</p>
+											</th:block>
+											<p class="price">
+												<span class="selling_price">
+													<em th:text="${#numbers.formatInteger(return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt, 1, 'COMMA')}"></em>원
+												</span>
+											</p>
+										</div>
+									</div>
+								</a>
+							</div>
+							<div class="goods_select">
+								<div class="select_custom select_count">
+									<div class="combo">
+										<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
+										<div class="select">수량 0개</div>
+									</div>
+								</div>
+							</div>
+							<th:block th:if="${#lists.size(returnList.returnList) == status.count}">
+								<div class="goods_txt">
+									<p class="cf_txt cf_desc">반품하실 상품의 수량을 선택하신 후<br>반품 신청을 하실 수 있습니다.</p>
+								</div>
+							</th:block>
+						</div>
+					</th:block>
+					<!-- //취소상품목록 -->
+					
+				</div>
+			</div>
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>반품 사유</h3>
+					</div>
+					<div class="tbl tbl_tarea">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<th class="sr-only">반품 접수 일자</th>
+								<td>
+									<div class="select_custom select_return">
+										<div class="combo">
+											<div class="select">반품 사유를 선택하세요.</div>
+										</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th class="sr-only">반품 완료 일자</th>
+								<td>
+									<div class="textarea_wrap">
+										<textarea class="doc_return" name="" id="" placeholder="자세한 사유를 입력해주세요."></textarea>
+										<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
+									</div>
+								</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</div>
+			
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>반품방식 선택</h3>
+					</div>
+					<div class="retrieve_method">
+						<div class="tbl tbl_radio">
+							<table>
+								<colgroup>
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th class="sr-only">방문 회수</th>
+										<td>
+											<div class="form_field">
+												<input type="radio" name="wdGb" id="withdraw"  checked="checked" value="W">
+												<label for="withdraw"><span>방문 회수 <b class="c_primary">택배사에서 고객에게 방문하여 회수</b></span></label>
+											</div>
+										</td>
+									</tr>
+									<tr>
+										<th class="sr-only">직접 배송</th>
+										<td>
+											<div class="form_field">
+												<input type="radio" name="wdGb" id="direct" value="D">
+												<label for="direct"><span>직접 배송 <b class="c_primary">고객이 반품지로 직접 반송</b></span></label>
+											</div>
+										</td>
+									</tr>
+								</tbody>
+								
+							</table>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="retrieve_box visit" style="display:block;" id="chgerLocation">
+					<div class="tbl_wrap">
+						<div class="tbl_tit"> 
+							<h3>반품 회수지 주소</h3>
+							<button type="button" id="btn_adrsChange_pop" class="btn_popup" onclick="fnChangeDeliveryAddr();"><span>회수지 변경</span></button>
+						</div>
+						<div class="tbl">
+							<div class="ship_info">
+								<dl>
+									<div class="name">
+										<dt><span class="sr-only">배송지명</span></dt>
+										<dd th:text="${deliveryAddrInfo.recipNm}"></dd>
+										<input type="hidden" name="chgerNm" th:value="${deliveryAddrInfo.recipNm}">
+									</div>
+									<div class="addr">
+										<dt><span class="sr-only">배송주소</span></dt>
+										<dd id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr}    ${deliveryAddrInfo.recipDtlAddr}|"></dd>
+										<input type="hidden" name="chgerZipcode" th:value="${deliveryAddrInfo.recipZipcode}">
+										<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
+										<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+										<input type="hidden" name="chgerRtnMemo" th:value="${deliveryAddrInfo.delvMemo}">
+									</div>
+									<div class="phone">
+										<dt><span class="sr-only">휴대폰 번호</span></dt>
+										<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+										<input type="hidden" name="chgerPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+									</div>
+									<div class="desc_txt">택배사에서 반품 상품을 직접 회수할 장소 선택</div>
+								</dl>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="retrieve_box direct" style="display:none;" id="returnLocation">
+					<div class="tbl_wrap">
+						<div class="tbl_tit"> 
+							<h3>반송 정보</h3>
+						</div>
+						<div class="tbl">
+							<div class="ship_info">
+								<dl>
+									<div class="addr">
+										<dt><span>반송 주소</span></dt>
+										<dd th:text="|${deliveryAddrInfo.rtnLocBaseAddr} ${deliveryAddrInfo.rtnLocDtlAddr}|"></dd>
+									</div>
+									<div class="phone">
+										<dt><span>반송 송장번호</span></dt>
+										<dd><input type="tel" class="form_control" name="wdInvoiceNo" data-valid-type="numeric" value="" oninput='handleOnInput(this, 20)' placeholder="송장번호를 입력해주세요."></dd>
+									</div>
+								</dl>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="tbl_wrap pay_wrap">
+					<div class="tbl_tit"> 
+						<h3>환불 정보</h3>
+						<strong class="pay"><span id="returnAmt"></span>원</strong>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="227">
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<td>
+									<dl class="refund_deduct">
+										<div>
+											<dt>상품 취소 금액</dt>
+											<dd>
+												<div>
+													<span id="goodsCancelAmt">0</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>배송비</dt>
+											<dd>
+												<div>
+													<span id="deliveryFee">0</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>할인 금액 차감</dt>
+											<dd>
+												<div>
+													<span id="deductDcAmt">0</span>원
+												</div>
+											</dd>
+										</div>
+									</dl>
+									<dl class="refund_detail">
+										<div>
+											<dt>환불 수단</dt>
+											<dd>
+												<div>
+													<span th:if="${paymentInfo.pgGb == 'KCP'}" th:text="${paymentInfo.payMeansNm}"></span>
+													<span th:if="${paymentInfo.pgGb == 'NAVER'}" th:text="|네이버페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'KAKAO'}" th:text="|카카오페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'PAYCO'}" th:text="|PAYCO|"></span>
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>결제금액 환불</dt>
+											<dd>
+												<div>
+													<span id="refundPayAmt">0</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>포인트 환불</dt>
+											<dd>
+												<div>
+													<span id="refundPoint">0</span>P
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>상품권 환불</dt>
+											<dd>
+												<div>
+													<span id="refundGiftCard">0</span>원
+												</div>
+											</dd>
+										</div>
+									</dl>
+								</td>
+							</tr>
+						</table>
+						<!-- 
+						<button type="button" class="btn btn_default"><span>취소 전표 보기</span></button>
+						 -->
+					</div>
+				</div>
+				<div class="required_group">
+					<p>배송비 <span class="c_primary" id="addPayCost">0원</span> 추가 결제가 필요합니다.</p>
+				</div>
+				<div class="btn_group btn_group_flex">
+					<div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"><span>취소</span></button></div>
+					<div><button type="button" id="btn_order_return" class="btn btn_dark" onclick="fnReturn()"><span>반품 신청</span></button></div>
+				</div>
+			</div>
+		</form>
+	</section>
+</main>
+
+<!-- 210408_반품 수량 선택 팝업 -->
+<th:block th:if="${returnList.returnList}" th:each="return, status : ${returnList.returnList}">
+	<div class="popup_box returnCountPop">
+		<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"><span>수량 0개</span></button>
+					<th:block th:each="num : ${#numbers.sequence(1, return.ordCanChgQty)}">
+						<button type="button" th:qty="${num}" onclick="fnChangeReturnQty(this);"><span th:text="|수량 ${num}개|"></span></button>
+					</th:block>
+					<input type="hidden" name="ordDtlNo" th:value="${return.ordDtlNo}">
+				</div> 
+			</div>
+		</div>
+	</div>
+</th:block>
+<!-- //210408_반품 수량 선택 팝업 -->
+
+<!-- 210408_반품 사유 선택 팝업 -->
+<div id="returnReasonPop" class="popup_box returnReasonPop">
+	<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">
+				<th:block th:if="${returnReason}" th:each="oneData, status : ${returnReason}">
+					<button type="button" th:attr="chgReason=${oneData.cd}" onclick="fnChangeReturnReason(this);"><span th:text="${oneData.cdNm}">단순 변심</span></button>
+				</th:block>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_반품 사유 선택 팝업 -->
+
+<!-- 210408_ 추가 : 환불 계좌 등록 팝업 -->
+<div id="refundAccountPop" class="popup_box refundAccountPop">
+	<div class="lap">
+		<div class="popup_close">카테고리닫기</div>
+		<div class="popup_head sr-only">
+			<h2 class="">환불 계좌 등록 팝업</h2>
+		</div>
+		<div class="popup_con">
+			<div class="tbl_wrap">
+				<div class="tbl_tit"> 
+					<h3>환불 계좌 등록</h3><!-- 210409_수정 : 텍스트 변경 -->
+				</div>
+				<div class="tbl type1">
+					<table>
+						<colgroup>
+							<col width="*">
+						</colgroup>   
+						<tbody>
+							<tr>
+								<th>예금주</th>
+								<td>
+									<div class="form_field">
+										<input type="text" name="accountNm" class="form_control" th:value="${customerInfo.custNm}" placeholder="이름를 입력해 주세요" readonly="readonly">
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th>은행명</th>
+								<td>
+									<div class="form_field">
+										<div class="select_custom select_bank">
+											<div class="combo">
+												<div class="select">선택</div>
+												<input type="hidden" name="bankCd" value=""/>
+											</div>
+										</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th>계좌번호</th>
+								<td>
+									<div class="input_wrap certi_wrap">
+										<input type="tel" class="form_control" value="" placeholder="">
+										<button type="button" id="btn_bank_certi" class="btn btn_dark"><span>계좌인증</span></button>
+									</div>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			
+		</div>
+		<div class="pop_foot">
+			<div class="btn_group_flex">
+				<div class="">
+					<button type="submit" id="btn_bank_return" class="btn btn_dark btn_block"><span>계좌 등록 후 환불 신청</span></button>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_ 추가 : 환불 계좌 등록 토스트 팝업 -->
+
+<!-- 210408_ 추가 : 은행 선택 팝업 -->
+<div id="refundBankPop" class="popup_box refundBankPop">
+	<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">
+				<th:block th:if="${bankList}" th:each="oneData, status : ${bankList}">
+					<button type="button" th:id="|bankCd_${oneData.cd}|"><span th:text="${oneData.cdNm}"></span></button>
+				</th:block>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_ 추가 : 은행 선택 팝업 -->
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+var isLogin 		= [[${isLogin}]];
+let returnList 		= [[${returnList.returnList}]];
+let oneData 		= [[${oneData}]];
+let paymentInfo 	= [[${paymentInfo}]];
+let isCustomer 		= true;
+let jsonObj 		= {};
+
+$(document).ready(function() {
+	// 입점업체의 경우 회수방식 직접배송 처리
+	if (oneData.selfGoodsYn != 'Y') {
+		$('#withdraw').click();
+		$('.wdGb').css('display','none');
+	}
+});
+
+// 반품수량버튼기능
+$(".select_custom.select_count").each(function(idx){
+	$(this).on("click", function(){
+		// 전체비활성화
+		$(".returnCountPop").hide();
+		
+		// 수량팝업활성화
+		$("#returnCountPop").eq(idx).show().addClass("active");
+		
+		$("body").css({"overflow":"hidden"});
+	});
+});
+
+// 은행목록 버튼 기능
+$("#refundBankPop .button_list button").each(function(){
+	$(this).on("click", function(){
+		$("#refundAccountPop input[name=bankCd]").val($(this).attr("id"));
+		$("#refundAccountPop .select_custom.select_bank .select").text($(this).find("span").text());
+	});
+});
+
+// 반품 처리
+var fnReturn = function() {
+	let url = '/mypage/return';
+
+	// 반품 사유 체크
+	let chgReason = $('#returnForm input[name=chgReason]').val();
+	if (gagajf.isNull(chgReason)) {
+		mcxDialog.alert('반품사유를 선택해주세요.');
+		return false;
+	}
+
+	// 주문상세번호 및 반품 수량 설정
+	let ordDtlNoArr 		= [];
+	let cnclRtnReqQtyArr 	= [];
+	let chkQty 				= 0;
+	$.each($('#returnForm input[name=chgQty]'), function(idx, item) {
+		let chgQty 		= $(item).val();
+		let ordDtlNo 	= $(item).attr('ordDtlNo');
+
+		if (chgQty > 0) {
+			ordDtlNoArr.push(Number(ordDtlNo));
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			chkQty += chgQty;
+		}
+	});
+
+	// 반품 수량 체크
+	if (chkQty == 0) {
+		mcxDialog.alert('반품하실 상품의 수량을 선택해주세요.');
+		return false;
+	}
+
+	// 환불계좌 체크
+	let accountNo 	= $('#returnForm input[name=accountNo]').val();
+	let accountNm	= $('#returnForm input[name=accountNm]').val();
+	let bankCd 		= $('#returnForm input[name=bankCd]').val();
+	
+	// 임시
+	paymentInfo.payMeans 	= "G014_20";
+	paymentInfo.payStat 	= "G016_30";
+	
+	// 무통장입금, 결제완료 일때 환불계좌정보 체크
+	if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+		let data = {};
+		data.ordNo 			= oneData.ordNo;
+		data.accountNm 		= oneData.accountNm;
+		
+		$('#refundAccountPop').show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+		
+		return false;
+	}
+
+	// 추가배송비 PG 처리
+	let addPayCost 			= $('#returnForm input[name=addPayCost]').val();
+
+	let data 				= {};
+	data.ordNo 				= oneData.ordNo;
+	data.ordChgSq 			= 0;
+	data.chgReason 			= chgReason;
+	data.chgMemo 			= $('#returnForm textarea[name=chgMemo]').val();
+	data.accountNo 			= $('#returnForm input[name=accountNo]').val();
+	data.accountNm 			= $('#returnForm input[name=accountNm]').val();
+	data.bankCd 			= $('#returnForm input[name=bankCd]').val();
+	data.isCustomer 		= isCustomer;
+	data.wdGb 				= $('#returnForm input[name=wdGb]:radio:checked').val();
+	data.chgerNm 			= $('#chgerNm').text();
+	data.chgerZipcode 		= $('#returnForm input[name=chgerZipcode]').val();
+	data.chgerBaseAddr 		= $('#returnForm input[name=chgerBaseAddr]').val();
+	data.chgerDtlAddr 		= $('#returnForm input[name=chgerDtlAddr]').val();
+	data.chgerPhnno 		= $('#returnForm input[name=chgerPhnno]').val();
+	data.chgerRtnMemo 		= $('#returnForm input[name=chgerRtnMemo]').val();
+	data.ordDtlNoArr 		= ordDtlNoArr;
+	data.wdInvoiceNo 		= $('#returnForm input[name=wdInvoiceNo]').val();
+	data.addPayCost 		= addPayCost;
+	data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
+
+	let jsonData = JSON.stringify(data);
+
+	gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+		if (addPayCost > 0) {
+			let ordChgSq = result.ordChgSq;
+			let ordNo = result.ordNo;
+
+			$('#addPaymentForm input[name=ordChgSq]').val(ordChgSq);
+			$('#addPaymentForm input[name=ordNo]').val(ordNo);
+
+			document.addPaymentForm.submit();
+		} else {
+			cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
+		}
+	}, true);
+}
+
+// 반품 수량 변경 이벤트 처리
+var fnChangeReturnQty = function(param) {
+	let url = '/mypage/cancel/refund/amt/calculate';
+	
+	// 반품수량설정
+	if (param != null) {
+		$("#returnForm input[name=chgQty]").each(function(idx){
+			var ordDtlNo = $(this).attr("ordDtlNo");
+			if (ordDtlNo == $(param).parent().find("input[name=ordDtlNo]").val()) {
+				$(this).val($(param).attr("qty"));
+				$(this).parent().find(".select").text($(param).find("span").text());
+			}
+		});
+	}
+
+	let chgReason = $('#returnForm input[name=chgReason]').val();
+
+	if (!gagajf.isNull(chgReason)) {
+		// 반품 수량 설정
+		let cnclRtnReqQtyArr 	= [];
+		let ordDtlNoArr 		= [];
+		let ordCanChgQtyArr 	= [];
+		
+		$.each($('#returnForm input[name=chgQty]'), function(idx, item) {
+			let chgQty 			= $(item).val();
+			let ordDtlNo 		= $(item).attr('ordDtlNo');
+			let ordCanChgQty 	= $(item).attr('ordCanChgQty');
+			
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			ordDtlNoArr.push(Number(ordDtlNo));
+			ordCanChgQtyArr.push(Number(ordCanChgQty));
+		});
+
+		let data 				= {};
+		data.ordNo 				= oneData.ordNo;
+		data.chgGb 				= 'G680_30';
+		data.ordDtlNoArr 		= ordDtlNoArr;
+		data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+			let refundPoint 		= Number(result.spanPntDcAmt);
+			let refundGiftCard 		= Number(result.spanGfcdUseAmt);
+			let spanCnclRtnAmt 		= Number(result.spanCnclRtnAmt);
+			let spanTotDeliveryFee 	= Number(result.spanTotDeliveryFee);
+			let spanCpnDcAmt 		= Number(result.spanCpnDcAmt);
+			let spanTmtbDcAmt 		= Number(result.spanTmtbDcAmt);
+			let spanPrePntDcAmt 	= Number(result.spanPrePntDcAmt);
+			let spanRefundAmt 		= Number(result.spanRefundAmt);
+			let spanTotRtnDelvFee 	= Number(result.spanTotRtnDelvFee);
+			
+			// 반품 사유 및 반품 방식 배송비 계산
+			if (result.spanRealCnclRtnAmt > 0) {
+				let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
+				// 회사사유 : 추가배송비 0, 반품배송비 0
+				if (!isCustomer) {
+					spanTotRtnDelvFee = 0;
+				}
+				// 고객사유(직접발송) : 반품배송비 0
+				else if (wdGb == 'D') {
+					spanTotRtnDelvFee = 0;
+				}
+			} else {
+				spanTotRtnDelvFee = 0;
+			}
+			
+			let goodsCancelAmt 	= spanCnclRtnAmt;										// 상품취소금액
+			let addDelvFee 		= spanTotRtnDelvFee;									// 추가배송비
+			let deductDcAmt 	= 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;	// 할인금액 차감(쿠폰+다다익선+선포인트)
+			let refundPayAmt 	= spanRefundAmt - spanTotRtnDelvFee;					// 결제금액 환불
+			
+			if (!isCustomer) {
+				refundPayAmt += spanTotDeliveryFee;
+			}
+			
+			// 추가배송비 영역 설정
+			if (refundPayAmt < 0) {
+				refundPayAmt += addDelvFee;
+				$('#addDeliveryFee').css('display', '');
+				$('#addPayCost').text(addDelvFee.addComma() + '원');
+				$('#returnForm input[name=addPayCost]').val(addDelvFee);
+			} else {
+				$('#addDeliveryFee').css('display', 'none');
+				$('#returnForm input[name=addPayCost]').val(0);
+			}
+			
+			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
+			
+			// 금액 설정
+			$('#returnAmt').text(returnAmt.addComma());
+			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
+			$('#deliveryFee').text((0 - addDelvFee).addComma());
+			$('#deductDcAmt').text(deductDcAmt.addComma());
+			$('#refundPayAmt').text(refundPayAmt.addComma());
+			$('#refundPoint').text(refundPoint.addComma());
+			$('#refundGiftCard').text(refundGiftCard.addComma());
+		});
+	}
+}
+
+// 반품 방식 변경 이벤트
+$('#returnForm input[name=wdGb]').on('change', function() {
+	let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
+
+	if (wdGb == 'W') {
+		$('#chgerLocation').css('display', '');
+		$('#returnLocation').css('display', 'none');
+	} else {
+		$('#chgerLocation').css('display', 'none');
+		$('#returnLocation').css('display', '');
+	}
+
+	// 환불금액 계산
+	fnChangeReturnQty();
+});
+
+// 환불계좌 등록 콜백 처리
+var fnRegisterAccountCallback = function(result) {
+	// 환불계좌 정보 설정
+	$('#cancelForm input[name=accountNo]').val(result.accountNo);
+	$('#cancelForm input[name=accountNm]').val(result.accountNm);
+	$('#cancelForm input[name=bankCd]').val(result.bankCd);
+
+	// 취소처리
+	fnCancel();
+}
+
+// 반품 사유 변경 이벤트
+var fnChangeReturnReason = function(param) {
+	var customerReasonArr = ['G688_10'];
+	let chgReason = $(param).attr('chgReason');
+
+	// 귀책사유체크(취소, 반품, 교환)
+	isCustomer = customerReasonArr.includes(chgReason);
+	
+	// 반품 사유 설정
+	$('#returnForm input[name=chgReason]').val(chgReason);
+	$("#returnForm .select_custom.select_return .select").text($(param).find("span").text());
+
+	// 환불금액 계산
+	fnChangeReturnQty();
+}
+
+//회수지 정보 설정
+var delvAddrSet = function(delvObj) {
+	let chgerNm 			= delvObj.recipNm;
+	let chgerPhnno 			= delvObj.recipPhnno;
+	let chgerZipcode 		= delvObj.recipZipcode;
+	let chgerBaseAddr 		= delvObj.recipBaseAddr;
+	let chgerDtlAddr 		= delvObj.recipDtlAddr;
+	let delvMemo 			= delvObj.delvMemo;
+	let chgerAddr 			= chgerBaseAddr + '    ' + chgerDtlAddr;
+
+	$('#returnForm input[name=chgerNm]').val(chgerNm);
+	$('#returnForm input[name=chgerPhnno]').val(chgerPhnno);
+	$('#returnForm input[name=chgerZipcode]').val(chgerZipcode);
+	$('#returnForm input[name=chgerBaseAddr]').val(chgerBaseAddr);
+	$('#returnForm input[name=chgerDtlAddr]').val(chgerDtlAddr);
+	$('#returnForm input[name=chgerRtnMemo]').val(delvMemo);
+	
+	$('#chgerNm').text(chgerNm);
+	$('#chgerPhnno').text(chgerPhnno);
+	$('#chgerAddr').html(chgerAddr);
+}
+</script>
+
+<script>
+//세부 사유 글자 수 제한
+$('.doc_return').keyup(function(e){
+	var content = $(this).val();
+	$('#return_cnt').html(content.length);
+	if (content.length > 200){
+		mcxDialog.alert("최대 200자까지 입력 가능합니다."); //210420_수정 : 시스템 alert -> dialog 변경.
+		$(this).val(content.substring(0, 200));
+		$('#return_cnt').html("200");
+	}
+});
+
+// 반품 사유 선택 팝업
+$(document).on("click",".select_custom.select_return",function(e){
+	$('#returnReasonPop').show().addClass("active");
+	$("body").css({"overflow":"hidden"});
+});
+
+// 팝업_닫기
+$('.popup_close').on("click",function(){
+	$('.popup_box').hide().removeClass('active');
+	$("body").css({"overflow":"visible"});
+});
+
+// 버튼 색
+$(document).on('click','.popup_box .button_list button',function(){
+	$('.popup_box .button_list button').removeClass('on');
+	$(this).addClass('on');
+});
+
+function handleOnInput(el, maxlength) {
+	if(el.value.length > maxlength)  {
+		el.value = el.value.substr(0, maxlength);
+	}
+}
+
+// 210408_ 추가 : 환불계좌등록 팝업 스크립트
+$(document).on("click","#btn_refund_pop",function(e){
+	$('#refundAccountPop').show().addClass("active");
+	$("body").css({"overflow":"hidden"});
+});
+
+//210408_ 추가 : 은행선택 팝업 스크립트
+$(document).on("click","#refundAccountPop .select_bank",function(e){
+	$('#refundBankPop').show().addClass("active");
+	$('#refundBankPop').css({"z-index":"1000"});
+	$("body").css({"overflow":"hidden"});
+});
+
+//210408_ 추가 : 환불계좌등록 팝업 스크립트 닫기
+$('.refundAccountPop .popup_close').on("click",function(){
+	$('.refundAccountPop').hide().removeClass('active');
+	$("body").css({"overflow":"visible"});
+});
+
+//210408_ 추가 : 은행선택 팝업 스크립트 닫기
+$('.refundBankPop .popup_close').on("click",function(){
+	$('.refundBankPop').hide().removeClass('active');
+});
+
+/* 210409_추가 : alert 모음 */
+$(document).on("click", "#btn_bank_certi", function(){
+	mcxDialog.alert("계좌인증에 성공했습니다.", {
+			//alert("계좌정보를 다시 확인해주세요.") : 계좌인증 실패/유효하지 않은 경우
+			//alert("은행을 선택해주세요.") : 은행을 선택하지 않은 경우
+			//alert("계좌번호를 입력해주세요.") : 계좌번호를 입력하지 않은 경우
+		sureBtnText: "확인",  // Confirmation button text
+	});
+});
+
+/*
+$(document).ready(function(){
+
+	//210408_추가 : 스크립트 추가.
+	//반품회수방법 선택 스크립트 추가
+	$(document).on('change','.my_return .retrieve_method #rdi_retrieve_visit',function(e){
+		$('.my_return .retrieve_box.direct').hide();
+		$('.my_return .retrieve_box.visit').show();
+		return false;
+	}).on('change','.my_return .retrieve_method #rdi_retrieve_direct',function(e){
+		$('.my_return .retrieve_box.visit').hide();
+		$('.my_return .retrieve_box.direct').show();
+		return false;
+	});
+
+	// 반품 수량 선택 팝업
+	//$(document).on("click",".select_custom.select_count",function(e){
+		//$('#returnCountPop').show().addClass("active");
+		//$("body").css({"overflow":"hidden"});
+	//});
+
+	//배송지추가_팝업
+	$(document).on('click','#btn_adrsAdd_pop',function(e){
+		$("#adrsAddPop").modal("show");
+		return false;
+	});      
+	$("#adrsAddPop_close").click(function() {
+		$("#adrsAddPop").modal("hide");
+	});
+
+	//배송지정보_팝업
+	$(document).on('click','#btn_adrsChange_pop',function(e){
+		$("#adrsChangePop").modal("show");
+		return false;
+	});
+	$("#adrsChangePop_close").click(function() {
+		$("#adrsChangePop").modal("hide");
+	});
+
+	//배송지수정_팝업
+	$(document).on('click','#btn_addrModify_pop',function(e){
+		$("#adrsModifyPop").modal("show");
+		return false;
+	});
+	$("#adrsModifyPop_close").click(function() {
+		$("#adrsModifyPop").modal("hide");
+	});
+
+	// //210408_추가 : 스크립트
+
+	$(document).on("click", "#btn_order_return", function(){
+		mcxDialog.alert("반품 신청이 접수되었습니다.", {
+				//alert("반품하실 상품의 수량을 선택해주세요.") : 클릭 시 반품 수량을 모두 0개로 선택한 경우
+				//alert("반품 사유를 선택해주세요.") : 반품 사유를 선택하지 않는 경우
+			sureBtnText: "확인",  // Confirmation button text
+		});
+	});
+});
+*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html

@@ -2265,7 +2265,7 @@ var custCpnSumAmtCal = function() {
 		cpnDcSumAmt			= cpnDcSumAmt + (goodsCpnDcAmt + cartCpnDcAmt);
 		prePntDcSumAmt		= prePntDcSumAmt + prePntDcAmt1;
 		
-		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
+		var ordAmt			= ((orgCurrPrice - cpn1DcAmt) + optAddPrice) * goodsQty;
 		ordSumAmt			= ordSumAmt + ordAmt;
 		
 		// 선포인트사용여부 

+ 421 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningCustGradeBenefitFormMob.html

@@ -0,0 +1,421 @@
+<!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  : PlanningCustGradeBenefitFormMob.html
+ * @desc    : 회원등급 혜택 Page
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021. 05. 03     jsshin     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main class="container ev">
+	<section class="content ev_rank">
+	<th:block th:if="${isLogin}">
+		<div class="inner wide" >
+			<div class="my_rank_info">
+				<div class="desc">
+					<div th:class="'icon '+${#strings.toLowerCase(customerInfo.custGradeNm)}">
+						<span th:text="${#strings.substring(customerInfo.custGradeNm, 0, 1)}">G</span>
+					</div>
+					<p>
+						<span class="my_name" th:text="${customerInfo.custNm}">홍길동</span>님의
+						이번 달 회원등급은<br/>
+						<span class="my_rank" th:text="${customerInfo.custGradeNm}">GOLD</span> 입니다.
+					</p>
+				</div>
+				<button type="button" id="btnGradeCoupon" class="btn cou_btn">등급 쿠폰 다운로드</button> <!-- 210416_수정 : id 추가. -->
+			</div>
+		</div>
+		<div class="inner">
+			<!-- 회원 등급 progress바 -->
+			<div class="my_rank_progress">
+				<div th:class="'pro_wrap '+${#strings.toLowerCase(customerInfo.custGradeNm)}"> <!-- welcome, bronze, silver, gold, vip 각각 클래스 넣으면 상태가 달라집니다. -->
+					<div class="rank_txt clear">
+						<ul class="clear">
+							<li>
+								<div class="txt">
+									<span>WELCOME</span>
+								</div>
+							</li>
+							<li>
+								<div class="txt">
+									<span>BRONZE</span>
+								</div>
+							</li>
+							<li>
+								<div class="txt">
+									<span>SILVER</span>
+								</div>
+							</li>
+							<li>
+								<div class="txt">
+									<span>GOLD</span>
+								</div>
+							</li>
+							<li>
+								<div class="txt">
+									<span>VIP</span>
+								</div>
+							</li>
+						</ul>
+					</div>
+					<div class="progress_bar">
+						<span class="current_bar"></span>
+					</div>
+				</div>
+				<!-- 등급 상승까지 남은 정보 안내 -->
+				<div class="benefit_txt">
+					<p id="etcGrade">
+						<span id="ordSpan">	구매 건수 <strong id="ordCnt" class="c_primary">0회</strong> </span>
+						<span id="realOrdAmtSpan">, 구매 금액 <strong id="realOrdAmt" class="c_primary">0원 </span>
+						</strong> 더 구매하시면 <strong>
+						<span id="nextGrde" class="c_black"></span>로 등급UP!</strong>
+					</p> <!-- 등급 상승까지 남은 정보 안내 -->
+					<p id="sameVipGrade" style="display: none;">
+						<strong>등급 유지 조건 달성!</strong> 다음달에도
+						<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
+					</p>
+					<p id="vipGrade" style="display: none;">
+						다음달에 <strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
+					</p>
+				</div>
+				<!-- //등급 유지 조건 달성 -->
+			</div>
+			<!-- //회원 등급 progress바 -->
+		</div>
+	</th:block>
+	<th:block th:unless="${isLogin}">
+		<div class="inner wide">
+			<div class="my_rank_info no_member"> <!-- 비회원일 경우 -->
+				<p>
+					로그인 후 이번 달 나의 회원 등급을 확인하고<br>쿠폰혜택을 받아보세요.
+				</p>
+				<button type="button" class="btn btn_dark login_btn" onclick="cfnGoToPage(_PAGE_LOGIN);">로그인</button>
+			</div>
+		</div>
+	</th:block>
+		<div class="inner">
+			<div class="level_wrap">
+				<div class="member_level_area"> <!-- VIP -->
+					<div class="level_head">
+						<div class="icon vip"><span>V</span></div>
+						<div class="desc">
+							<span>VIP</span>
+							<p>최근 3개월 30만원 또는 6건 이상 구매</p>
+						</div>
+					</div>
+					<div class="level_content">
+						<div class="coupon">
+							<p class="coupon_txt">쿠폰 혜택</p>
+							<div class="coupon_box clear">
+								<div class="coupon_info">
+									<img src="/images/mo/ico_coupon_12.png" alt="12% 할인 쿠폰">
+									<p>최대 1만 5천원 할인<br>(3만원 이상 구매 시)</p> <!-- 210415_수정 : 텍스트 수정. -->
+								</div>
+								<div class="coupon_info">
+									<img src="/images/mo/ico_coupon_20000.png" alt="20,000원 할인 쿠폰">
+									<p>10만원 이상 구매 시</p>
+								</div>
+							</div>
+						</div>
+						<div class="birth">
+							<p class="birth_txt">생일 혜택</p>
+							<div class="birth_box clear">
+								<div class="birth_info">
+									<img src="/images/mo/ico_coupon_15.png" alt="15% 할인 쿠폰">
+									<p>최대 3만원 할인</p>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="member_level_area"> <!-- 골드 -->
+					<div class="level_head">
+						<div class="icon gold"><span>G</span></div>
+						<div class="desc">
+							<span>GOLD</span>
+							<p>최근 3개월 20만원 또는 4건 이상 구매</p>
+						</div>
+					</div>
+					<div class="level_content">
+						<div class="coupon">
+							<p class="coupon_txt">쿠폰 혜택</p>
+							<div class="coupon_box clear">
+								<div class="coupon_info">
+									<img src="/images/mo/ico_coupon_10.png" alt="10% 할인 쿠폰"> <!-- 210415_수정 : 이미지 수정. -->
+									<p>최대 1만 할인<br>(3만원 이상 구매 시)</p> <!-- 210415_수정 : 텍스트 수정. -->
+								</div>
+								<div class="coupon_info">
+									<img src="/images/mo/ico_coupon_15000.png" alt="15,000원 할인 쿠폰">
+									<p>10만원 이상 구매 시</p>
+								</div>
+							</div>
+						</div>
+						<div class="birth">
+							<p class="birth_txt">생일 혜택</p>
+							<div class="birth_box clear">
+								<div class="birth_info">
+									<img src="/images/mo/ico_coupon_15.png" alt="15% 할인 쿠폰">
+									<p>최대 2만원 할인</p>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="member_level_area"> <!-- 실버 -->
+					<div class="level_head">
+						<div class="icon silver"><span>S</span></div>
+						<div class="desc">
+							<span>SILVER</span>
+							<p>최근 3개월 10만원 또는 2  건 이상 구매</p>
+						</div>
+					</div>
+					<div class="level_content one_row">
+						<div class="coupon">
+							<p class="coupon_txt">쿠폰 혜택</p>
+							<div class="coupon_box clear">
+								<div class="coupon_info">
+									<img src="/images/mo/ico_coupon_7.png" alt="7% 할인 쿠폰"> <!-- 210415_수정 : 이미지 수정. -->
+									<p>최대 7천원 할인<br>(3만원 이상 구매 시)</p>
+								</div>
+							</div>
+						</div>
+						<div class="birth">
+							<p class="birth_txt">생일 혜택</p>
+							<div class="birth_box clear">
+								<div class="birth_info">
+									<img src="/images/mo/ico_coupon_15.png" alt="15% 할인 쿠폰">
+									<p>최대 1만원 할인</p>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="member_level_area"> <!-- 브론즈 -->
+					<div class="level_head">
+						<div class="icon bronze"><span>B</span></div>
+						<div class="desc">
+							<span>BRONZE</span>
+							<p>최근 3개월 1건 이상 구매</p>
+						</div>
+					</div>
+					<div class="level_content one_row">
+						<div class="coupon">
+							<p class="coupon_txt">쿠폰 혜택</p>
+							<div class="coupon_box clear">
+								<div class="coupon_info">
+									<img src="/images/mo/ico_coupon_5.png" alt="5% 할인 쿠폰"> <!-- 210415_수정 : 이미지 수정. -->
+									<p>최대 3천원 할인<br>(3만원 이상 구매 시)</p> <!-- 210415_수정 : 텍스트 수정. -->
+								</div>
+							</div>
+						</div>
+						<div class="birth">
+							<p class="birth_txt">생일 혜택</p>
+							<div class="birth_box clear">
+								<div class="birth_info">
+									<img src="/images/mo/ico_coupon_10.png" alt="10% 할인 쿠폰">
+									<p>최대 1만원 할인</p>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="member_level_area"> <!-- 웰컴 -->
+					<div class="level_head">
+						<div class="icon welcome"><span>W</span></div>
+						<div class="desc">
+							<span>WELCOME</span>
+							<p>최근 3개월 미구매</p> <!-- 210415_수정 : 텍스트 수정. -->
+						</div>
+					</div>
+					<div class="level_content one_row">
+						<div class="coupon">
+							<p class="coupon_txt">쿠폰 혜택</p>
+							<div class="coupon_box clear">
+								<div class="coupon_info">
+									<img src="/images/mo/ico_coupon_15.png" alt="15% 할인 쿠폰">
+									<p><strong>신규회원 한정 1회 발급</strong><br>최대 3만원 할인</p> <!-- 210415_추가 : strong태그 추가. -->
+								</div>
+							</div>
+						</div>
+						<div class="birth">
+							<p class="birth_txt">생일 혜택</p>
+							<div class="birth_box clear">
+								<div class="birth_info">
+									<img src="/images/mo/ico_coupon_10.png" alt="10% 할인 쿠폰">
+									<p>최대 1만원 할인</p>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="inner">
+			<div class="announce_txt">
+				<div class="note_txt">
+					<img src="/images/mo/ico_content_find03.png" alt="유의사항">
+					<p>유의사항</p>
+				</div>
+				<!-- 210414_수정 : 안내사항 문구 추가. -->
+				<div class="announce_list">
+					<p class="tit">회원등급 안내사항</p>
+					<ul>
+						<li>회원등급은 직전 3개월의 구매금액 또는 구매건수 기준으로 산정되며, 익월 1일에 확정됩니다.</li>
+						<li>구매금액 1만원 미만의 구매건수는 SILVER등급 이상의 등급산정에서 제외됩니다.</li>
+						<li>주문 취소/반품 건에 대한 결제금액은 등급산정에서 제외됩니다.</li>
+						<li>구매금액은 구매확정건에 대한 순수주문금액(할인쿠폰, 스타일포인트, 배송비, 취소/반품 내역을 제외한 실결제금액)을 의미합니다.</li>
+						<li>신규회원 한정 할인쿠폰을 제외한 회원등급 쿠폰은 매월 1월 다운로드 가능합니다.</li>
+						<li>회원등급 쿠폰은 입점상품에 적용이 불가합니다.</li>
+					</ul>
+					<p class="tit">생일쿠폰 안내사항</p>
+					<ul>
+						<li>등급 별 생일 쿠폰은 생일 당월 1일부터 말일까지 다운로드 가능합니다. (생일 당월의 기준은 회원정보 내 생년월일 정보를 기준으로 합니다.)</li>
+						<li>쿠폰이 지급되는 당월 말일까지 사용 가능합니다.</li>
+						<li>쿠폰 사용가능기간 내 미사용 시 소멸됩니다.</li>
+						<li>생일 쿠폰은 입점상품에 적용이 불가합니다.</li>
+					</ul>
+				</div>
+				<!-- //210414_수정 : 안내사항 문구 추가. -->
+			</div>
+		</div>
+
+	</section>
+</main>
+<script th:inline="javascript">
+/*<![CDATA[*/
+ 	let exptCustGradeMap = [[${exptCustGradeMap}]];
+	let isLogin = [[${isLogin}]];
+
+ 	var fnInit = function () {
+		let expctCustGrade = exptCustGradeMap.expctCustGrade;	// 예상등급
+
+		//expctCustGrade.custGradeNo 10:VIP, 20: GOLD, 30:SILVER, 40:BRONZE, 50:WELCOME
+
+		// 예정등급이 VIP가 아닌경우
+		if (Number(expctCustGrade.gradeCdNo) > 10) {
+			let nextGradeNo = Number(expctCustGrade.gradeCdNo)-10;				// 다음등급번호
+			let nextCustGradePolicy = fnGetNextGradePolicyInfo(nextGradeNo);	// 다음등급정책정보
+			fnNextGradeCondition(nextCustGradePolicy, expctCustGrade);			// 다음조건 알림
+		} else {
+			fnDisplayVipText(expctCustGrade);
+		}
+
+	};
+
+ 	// 다음 등급정책
+ 	var fnGetNextGradePolicyInfo = function (nextGradeNo) {
+		let custGradePolicy = exptCustGradeMap.custGradePolicy;	// 등급별정책
+		let nextCustGradePolicy;
+		$(custGradePolicy).each(function(idx, item) {
+			if (Number(item.gradeCdNo) === nextGradeNo ) {
+				nextCustGradePolicy = item;
+			}
+		});
+		return nextCustGradePolicy;
+	}
+
+	// 다음등급 조건 알림
+	var fnNextGradeCondition = function (nextCustGradePolicy, expctCustGrade) {
+		let $etcGrade = $('#etcGrade');
+		let $sameVipGrade = $('#sameVipGrade');
+		let $vipGrade = $('#vipGrade');
+		let $ordCnt = $('#ordCnt');
+		let $ordSpan = $('#ordSpan');
+		let $realOrdAmt = $('#realOrdAmt');
+		let $realOrdAmtSpan = $('#realOrdAmtSpan');
+		let $nextGrde = $('#nextGrde');
+
+		let remnantBuyAmt = 0;
+		if (nextCustGradePolicy.minBuyAmt > expctCustGrade.sumRealOrdAmt) {
+			remnantBuyAmt = nextCustGradePolicy.minBuyAmt - expctCustGrade.sumRealOrdAmt;
+		}
+
+		let remnantBuyCnt = 0;
+		if (nextCustGradePolicy.minBuyCnt > expctCustGrade.ordCnt) {
+			remnantBuyCnt = nextCustGradePolicy.minBuyCnt -  expctCustGrade.ordCnt;
+		}
+
+		$etcGrade.show();
+		$sameVipGrade.hide();
+		$vipGrade.hide();
+
+		if (remnantBuyAmt > 0) {
+			$realOrdAmtSpan.show()
+			$realOrdAmt.text(remnantBuyAmt.addComma()+'원');
+		} else {
+			$realOrdAmtSpan.hide()
+		}
+
+		if (remnantBuyCnt > 0) {
+			$ordSpan.show();
+			$ordCnt.text(remnantBuyCnt.addComma()+'회');
+		} else {
+			$ordSpan.hide();
+		}
+
+		if (remnantBuyAmt > 0 || remnantBuyCnt > 0) {
+			$nextGrde.text(nextCustGradePolicy.gradeCdNm);
+		}
+
+	}
+
+	// 기존 VIP / 새로운 VIP 구분
+	var fnDisplayVipText = function (expctCustGrade) {
+ 		let custGradeNm = [[${customerInfo.custGradeNm}]];
+		let $etcGrade = $('#etcGrade');
+		let $sameVipGrade = $('#sameVipGrade');
+		let $vipGrade = $('#vipGrade');
+		$etcGrade.hide();
+		if (expctCustGrade.gradeCdNm === custGradeNm) {
+			$vipGrade.hide();
+			$sameVipGrade.show();
+		} else {
+			$sameVipGrade.hide();
+			$vipGrade.show();
+		}
+	}
+
+	$('#btnGradeCoupon').on('click', function () {
+		let params = JSON.stringify({});
+		gagajf.ajaxJsonSubmit('/planning/event/custgrade/coupon/down', params, fnDownloadCallback)
+	});
+
+ 	var fnDownloadCallback = function (result) {
+ 		let message = '이미 쿠폰을 다운로드하셨습니다.';
+		if (result.isDownload) {
+			message = '모두 다운로드되었습니다. 쿠폰 정보는 마이페이지 > 나의 쿠폰에서 확인하실 수 있습니다.';
+		}
+
+		mcxDialog.alertC(message, {
+			sureBtnText: "확인",
+			sureBtnClick: function () {
+			}
+		});
+
+	}
+
+	$(document).ready(function() {
+		if (isLogin) {
+			fnInit();
+		}
+
+
+	});
+
+/*]]>*/
+</script>
+
+</th:block>
+</body>
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html

@@ -27,7 +27,7 @@
 							<p>
 								STYLE24 회원등급에 따라<br>제공되는 혜택 정보를 확인해 보세요.
 							</p>
-							<a href="javascript:;" class="btn btn_dark">회원등급 혜택 보기</a>
+							<a href="javascript:void(0);" class="btn btn_dark" onclick="cfnGoToPage(_PAGE_CUSTOMER_GRADE_BENEFIT);">회원등급 혜택 보기</a>
 						</div>
 					</div>
 				</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/cart/CartDelvFeeSaveGoodsPopupWeb.html

@@ -33,7 +33,7 @@
 								</div>
 							</div>
 							<!-- Add Scrollbar -->
-							<div class="swiper-scrollbar"></div>
+							<div class="swiper-scrollbar" th:if="${goodsList.size() > 5}"></div>
 							<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span>
 						</div>
 					</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/cart/CartTmtbSalesGoodsPopupWeb.html

@@ -41,7 +41,7 @@
 							</div>
 						</div>
 						<!-- Add Scrollbar -->
-						<div class="swiper-scrollbar" style="opacity: 0; transition-duration: 400ms;"><div class="swiper-scrollbar-drag" style="width: 514.104px; transform: translate3d(0px, 0px, 0px);"></div></div>
+						<div class="swiper-scrollbar" th:if="${goodsList.size() > 5}" style="opacity: 0; transition-duration: 400ms;"><div class="swiper-scrollbar-drag" style="width: 514.104px; transform: translate3d(0px, 0px, 0px);"></div></div>
 						<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
 				</div>
 				<!-- -->

+ 1 - 1
src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html

@@ -1071,7 +1071,7 @@
 							if(info.ordCanQty < 6 && info.ordCanQty > 0) {
 								quickShoppingBagHtml += '			<div class="shape"><span>곧 품절돼요!</span></div>';
 							}
-							quickShoppingBagHtml += "			<a href='javascript:fnGoToGoodsDetail(\"" + info.goodsCd + "\")' class='itemLink'>";
+							quickShoppingBagHtml += "			<a href='javascript:cfnGoToGoodsDetail(\"" + info.goodsCd + "\")' class='itemLink'>";
 							quickShoppingBagHtml += '				<div class="itemPic">';
 							quickShoppingBagHtml += '					<img alt="BLACK-a" class="vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + info.sysImgNm + '?RS=120"/>';
 							quickShoppingBagHtml += '				</div>';

+ 17 - 8
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html

@@ -682,8 +682,8 @@
 								let outletCate = fnGetOutletCategory(item.gtabNm);
 								$('#divGnbTab').append(outletCate);
 								// $('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
-								$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
-								fnGetOutletLeafCategory();
+								// $('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
+								fnGetOutletLeafCategory(outletCate);
 								fnGetGnbBanner('3000');
 							} else if (item.contentsType == 'L') { // 컨텐츠유형:링크
 								$('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
@@ -697,7 +697,6 @@
 			});
 	}
 
-	// OUTLET 탭 생성
 	var fnGetOutletCategory = function (outletNm){
 		let formalGb = 'G009_20';
 		var tag = '';
@@ -727,11 +726,21 @@
 		return tag;
 	}
 
-	var fnGetOutletLeafCategory = function(){
-		let allCate = [[${allCateList}]];
-		$.each(allCate, function(allCateIdx, allCateItem) {
-			let gnbCate = fnGetOutletLeafData(allCateIdx,allCateItem);
-			$('#cate'+allCateItem.cate1No).append(gnbCate);
+	var fnGetOutletLeafCategory = function (cate1List){
+		let formalGb = 'G009_20';
+		let actionUrl = '/display/outlet/cate/list?cate1No=&formalGb='+formalGb;
+		$.getJSON(actionUrl , function(result, status) {
+			if (result.length > 0) {
+				let allCate = [[${allCateList}]];
+				$.each(result, function(idx, item) {
+					$.each(allCate, function(allCateIdx, allCateItem) {
+						if (item.cate1No == allCateItem.cate1No) {
+							let gnbCate = fnGetOutletLeafData(idx,item);
+							$('#cate'+allCateItem.cate1No).append(gnbCate);
+						}
+					});
+				});
+			}
 		});
 	}
 

+ 86 - 68
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -49,48 +49,48 @@
 							<div class="filter_list">
 								<!-- 1depth -->
 								<ul>
-									<li data-id="tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}">
+									<li data-id="tap02" th:if="${filterBrandList != null and !filterBrandList.empty}">
 										<a href="javascript:void(0)">브랜드</a>
 									</li>
-									<li data-id="tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}">
+									<li data-id="tap03" th:if="${filterSizeList != null and !filterSizeList.empty}">
 										<a href="javascript:void(0)">사이즈</a>
 									</li>
-									<li data-id="tap04" th:if="${filterPriceList!=null and !filterPriceList.empty}">
+									<li data-id="tap04" th:if="${filterPriceList != null and !filterPriceList.empty}">
 										<a href="javascript:void(0)">가격</a>
 									</li>
 									<li data-id="tap05">
 										<a href="javascript:void(0)">할인율</a>
 									</li>
-									<li data-id="tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}">
+									<li data-id="tap06" th:if="${filterAgeList != null and !filterAgeList.empty}">
 										<a href="javascript:void(0)">연령</a>
 									</li>
-									<li data-id="tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}">
+									<li data-id="tap07" th:if="${filterSeasonList != null and !filterSeasonList.empty}">
 										<a href="javascript:void(0)">시즌</a>
 									</li>
-									<li data-id="tap08" th:if="${filterColorList!=null and !filterColorList.empty}">
+									<li data-id="tap08" th:if="${filterColorList != null and !filterColorList.empty}">
 										<a href="javascript:void(0)">컬러</a>
 									</li>
-									<li data-id="tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}">
+									<li data-id="tap09" th:if="${filterBenefitList != null and !filterBenefitList.empty}">
 										<a href="javascript:void(0)">혜택</a>
 									</li>
 								</ul>
 								<div class="form_field">
 									<div>
-										<input id="sexGb" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="sexGb"> <span>남여 공용만 보기</span> </label>
+										<input id="unisex" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="unisex"> <span>남여 공용만 보기</span> </label>
 									</div>
 									<div>
-										<input id="newProd" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="newProd"> <span>신상품만 보기</span> </label>
+										<input id="newGoods" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="newGoods"> <span>신상품만 보기</span> </label>
 									</div>
 								</div>
 							</div>
 							<div class="filter_content">
 								<!-- 브랜드 -->
-								<div class="sort tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}" id="brandFilterDiv">
+								<div class="sort tap02" th:if="${filterBrandList != null and !filterBrandList.empty}" id="brandFilterDiv">
 									<ul>
-										<th:block th:each="filterBrandData, filterBrandStat : ${filterBrandList}">
+										<th:block th:each="oneData, status : ${filterBrandList}">
 											<li>
 												<label class="brand_btn">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="brand" th:value="${filterBrandData.filterCd}" th:data-id="${filterBrandData.filterNm}" onclick="filterSel(this,'brand','off');"><span th:text="${filterBrandData.filterNm}"></span>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand' + status.index}" name="brand" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'brand','off');"><span th:text="${oneData.filterNm}"></span>
 												</label>
 											</li>
 										</th:block>
@@ -99,29 +99,29 @@
 								</div>
 								<!-- //브랜드 -->
 								<!-- 사이즈 -->
-								<div class="sort tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}" id="sizeFilterDiv">
+								<div class="sort tap03" th:if="${filterSizeList != null and !filterSizeList.empty}" id="sizeFilterDiv">
 									<ul>
 										<li id="sizeLi1">
 											<strong>상의</strong>
-											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'T'}">
+											<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'T')}">
 												<label class="size_btn">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize'+filterSizeStat.count}" name="size" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','1');"><span th:text="${filterSizeData.filterNm}">80</span>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'size','off','1');"><span th:text="${oneData.filterNm}">80</span>
 												</label>
 											</th:block>
 										</li>
 										<li id="sizeLi2">
 											<strong>하의</strong>
-											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'B'}">
+											<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'B')}">
 												<label class="size_btn">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize'+filterSizeStat.count}" name="size" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','2');"><span th:text="${filterSizeData.filterNm}">80</span>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'size','off','2');"><span th:text="${oneData.filterNm}">80</span>
 												</label>
 											</th:block>
 										</li>
 										<li id="sizeLi3">
 											<strong>신발</strong>
-											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'S'}">
+											<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'S')}">
 												<label class="size_btn">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize'+filterSizeStat.count}" name="size" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','3');"><span th:text="${filterSizeData.filterNm}">80</span>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'size','off','3');"><span th:text="${oneData.filterNm}">80</span>
 												</label>
 											</th:block>
 										</li>
@@ -162,12 +162,12 @@
 								</div>
 								<!-- //할인율 -->
 								<!-- 연령 -->
-								<div class="sort tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}" id="ageFilterDiv">
+								<div class="sort tap06" th:if="${filterAgeList != null and !filterAgeList.empty}" id="ageFilterDiv">
 									<ul>
-										<th:block th:each="filterAgeData, filterAgeStat : ${filterAgeList}">
+										<th:block th:each="oneData, status : ${filterAgeList}">
 											<li>
 												<label class="Age_btn">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterAge'+filterAgeStat.count}" name="age" th:value="${filterAgeData.filterCd}" th:data-id="${filterAgeData.filterNm}" onclick="filterSel(this,'age','off');"><span th:text="${filterAgeData.filterNm}">베이비(0~18개월)</span>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterAge' + status.index}" name="age" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'age','off');"><span th:text="${oneData.filterNm}">베이비(0~18개월)</span>
 												</label>
 											</li>
 										</th:block>
@@ -176,12 +176,12 @@
 								</div>
 								<!-- //연령 -->
 								<!-- 시즌 -->
-								<div class="sort tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}" id="seasonFilterDiv">
+								<div class="sort tap07" th:if="${filterSeasonList != null and !filterSeasonList.empty}" id="seasonFilterDiv">
 									<ul>
-										<th:block th:each="filterSeasonData, filterSeasonStat : ${filterSeasonList}">
+										<th:block th:each="oneData, status : ${filterSeasonList}">
 											<li>
 												<label class="Season_btn">
-													<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason'+filterSeasonStat.count}" name="season" th:value="${filterSeasonData.filterCd}" th:data-id="${filterSeasonData.filterNm}" onclick="filterSel(this,'season','off');"><span th:text="${filterSeasonData.filterNm}">봄</span>
+													<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason' + status.index}" name="season" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'season','off');"><span th:text="${oneData.filterNm}">봄</span>
 												</label>
 											</li>
 										</th:block>
@@ -190,14 +190,14 @@
 								</div>
 								<!-- //시즌 -->
 								<!-- 컬러 -->
-								<div class="sort tap08" th:if="${filterColorList!=null and !filterColorList.empty}" id="colorFilterDiv">
+								<div class="sort tap08" th:if="${filterColorList != null and !filterColorList.empty}" id="colorFilterDiv">
 									<ul>
-										<th:block th:each="filterColorData, filterColorStat : ${filterColorList}">
+										<th:block th:each="oneData, status : ${filterColorList}">
 											<li>
 												<label class="color-check">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor'+filterColorStat.count}" name="color" th:value="${filterColorData.filterNm}" th:data-id="${filterColorData.filterNm.replace('#','')}" onclick="filterSel(this,'color','off');">
-													<span class="pdColor-color" th:if="${filterColorData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm+';'+' border:1px solid #aaa;'}" th:value="${filterColorData.filterNm}"></span>
-													<span class="pdColor-color" th:if="${filterColorData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm}" th:value="${filterColorData.filterNm}"></span>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor' + status.index}" name="color" th:value="${oneData.filterNm}" th:data-id="${oneData.filterNm.replace('#','')}" onclick="filterSel(this,'color','off');">
+													<span class="pdColor-color" th:if="${oneData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+oneData.filterNm+';'+' border:1px solid #aaa;'}" th:value="${oneData.filterNm}"></span>
+													<span class="pdColor-color" th:if="${oneData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+oneData.filterNm}" th:value="${oneData.filterNm}"></span>
 												</label>
 											</li>
 										</th:block>
@@ -206,12 +206,12 @@
 								</div>
 								<!-- //컬러 -->
 								<!-- 혜택 -->
-								<div class="sort tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}" id="benefitFilterDiv">
+								<div class="sort tap09" th:if="${filterBenefitList != null and !filterBenefitList.empty}" id="benefitFilterDiv">
 									<ul>
-										<th:block th:each="filterBenefitData, filterBenefitStat : ${filterBenefitList}">
+										<th:block th:each="oneData, status : ${filterBenefitList}">
 											<li>
 												<label class="Benefits_btn">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits'+filterBenefitStat.count}" name="benefit" th:value="${filterBenefitData.filterCd}" th:data-id="${filterBenefitData.filterNm}" onclick="filterSel(this,'benefit','off');"><span th:text="${filterBenefitData.filterNm}"></span>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits' + status.index}" name="benefit" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'benefit','off');"><span th:text="${oneData.filterNm}"></span>
 												</label>
 											</li>
 										</th:block>
@@ -243,13 +243,13 @@
 									<div>
 										<ul id="sortArea">
 											<li>
-												<a href="javascript:void(0);" class="on" onclick="fnSortList(this,'new');">최신상품순</a>
+												<a href="javascript:void(0);" class="on" onclick="fnSortList(this,'NEW');">최신상품순</a>
 											</li>
 											<li>
-												<a href="javascript:void(0);" onclick="fnSortList(this,'best');">인기상품순</a>
+												<a href="javascript:void(0);" onclick="fnSortList(this,'BEST');">인기상품순</a>
 											</li>
 											<li>
-												<a href="javascript:void(0);" onclick="fnSortList(this,'review');">리뷰 많은순</a>
+												<a href="javascript:void(0);" onclick="fnSortList(this,'REVIEW');">리뷰 많은순</a>
 											</li>
 										</ul>
 									</div>
@@ -283,7 +283,7 @@
 	<form id="searchGoodsForm" name="searchGoodsForm">
 		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 		<input type="hidden" name="pageSize" value ="30"/>
-		<input type="hidden" name="cateNo" th:value="${cateInfo.cateNo}"/>
+<!-- 		<input type="hidden" name="cateNo" th:value="${cateInfo.cateNo}"/> -->
 		<input type="hidden" name="cateGb" th:value="${cateInfo.cateGb}"/>
 		<input type="hidden" name="brandGroupNo" th:value="${cateInfo.brandGroupNo}"/>
 		<input type="hidden" name="formalGb" th:value="${cateInfo.formalGb}"/>
@@ -291,7 +291,7 @@
 		<input type="hidden" name="cate2No" th:value="${cateInfo.cate2No}"/>
 		<input type="hidden" name="cate3No" th:value="${cateInfo.cate3No}"/>
 		<input type="hidden" name="cate4No" th:value="${cateInfo.cate4No}"/>
-		<input type="hidden" name="sortGb" value="new"/>
+		<input type="hidden" name="sortingType" value="NEW"/>
 	</form>
 
 	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
@@ -368,29 +368,33 @@
 			});
 
 			fnCreateCategoryList();
+			
+			if ($('#sizeLi1').find('label').length == 0) $('#sizeLi1').hide();
+			if ($('#sizeLi2').find('label').length == 0) $('#sizeLi2').hide();
+			if ($('#sizeLi3').find('label').length == 0) $('#sizeLi3').hide();
 		});
 
 		var fnFilterOption = function (obj, stat){
 			var thisId = $(obj).attr('id');
 			var tag = '';
 
-			if(thisId == 'sexGb'){
+			if(thisId == 'unisex'){
 				if(stat=='on'){
 					$(obj).attr('onclick','fnFilterOption(this,\'off\');');
-					tag += '<input type="hidden" name="sexGb" value="G007_Z"/>\n';
+					tag += '<input type="hidden" name="unisex" value="G007_Z"/>\n';
 					$("#searchGoodsForm").append(tag);
 				}else{
 					$(obj).attr('onclick','fnFilterOption(this,\'on\');');
-					$("#searchGoodsForm input:hidden[name=sexGb]").remove();
+					$("#searchGoodsForm input:hidden[name=unisex]").remove();
 				}
 			}else{
 				if(stat=='on'){
 					$(obj).attr('onclick','fnFilterOption(this,\'off\');');
-					tag += '<input type="hidden" name="newProd" value="40"/>\n';
+					tag += '<input type="hidden" name="newGoods" value="40"/>\n';
 					$("#searchGoodsForm").append(tag);
 				}else{
 					$(obj).attr('onclick','fnFilterOption(this,\'on\');');
-					$("#searchGoodsForm input:hidden[name=newProd]").remove();
+					$("#searchGoodsForm input:hidden[name=newGoods]").remove();
 				}
 			}
 			fnCategoryGoodsInfiniteScrollInit();
@@ -449,9 +453,9 @@
 		}
 
 		var fnDrawInfiniteScrollData = function (result){
-			let totalCnt = result.totalCnt;
+			let totalCnt = result.paging.totalCount;
 			$("#totCntId").text(totalCnt.addComma());
-			gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
+			gagaInfiniteScroll.pageStatus.totalCount = totalCnt;
 
 			var ithrCd = '';
 			var contentLoc = '';
@@ -459,8 +463,8 @@
 				$('.list_content .list_defult').hide();
 				$('.list_content .count_wrap').show();
 				var goodsUrl = [[${@environment.getProperty('upload.goods.view')}]];;
-				let lastPage = result.paging.pageable.pageNo;
-				let endRow = result.endRow - result.paging.pageable.pageSize;
+				let lastPage = result.paging.pageNo;
+				let endRow = result.paging.endRow - result.paging.pageSize;
 				var htm = fnCreateGoodsList(result, ithrCd, contentLoc, goodsUrl, lastPage, endRow);
 				gagaInfiniteScroll.draw(htm);
 				fnImgOnoff();
@@ -481,8 +485,14 @@
 		var fnCreateCategoryList = function (){
 			let actionUrl = '';
 			let brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			let cate1No = [[${cateInfo.cate1No}]];
 			if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
-				actionUrl = '/display/gnb/tab/list';
+				if( [[${cateInfo.formalGb}]] == 'G009_20'){
+					actionUrl = '/display/outlet/cate/list?cate1No='+cate1No+'&formalGb='+ [[${cateInfo.formalGb}]];
+				}else{
+					actionUrl = '/display/gnb/tab/list';
+					//actionUrl = '/display/category/cate/list?cate1No='+cate1No+'&formalGb=';
+				}
 			}else{
 				actionUrl = '/display/brand/cate/list?brandGroupNo=' + [[${cateInfo.brandGroupNo}]];
 			}
@@ -510,16 +520,16 @@
 							$("#formTitle").text('전체');
 						}
 
-						let allCate = [[${allCateList}]];
+						let allCate = [[${cateList}]];
 						if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
 							$.each(result, function(idx, item) {
-								if (item.contentsType == 'C') { // 컨텐츠유형:카테고리
+								// if (allCateItem.contentsType == 'C') { // 컨텐츠유형:카테고리
 									$.each(allCate, function(allCateIdx, allCateItem) {
 										if (item.cate1No == allCateItem.cate1No) {
-											$('#ulAllCate').append(fnGetCategoryList(allCateItem));
+											$('#ulAllCate').append(fnGetCategoryList(item));
 										}
 									});
-								}
+								// }
 							});
 						}else{
 							$.each(result, function(idx, item) {
@@ -645,6 +655,7 @@
 										} else {
 											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a>';
 										}
+										tag += '</li>';
 									});
 									tag += '</ul>\n';
 									tag += '</div>\n';
@@ -654,14 +665,13 @@
 							tag += '</ul>\n';
 							tag += '</div>\n';
 						}
-						
 						tag += '</li>';
 					});
 					tag += '</ul>';
 					tag += '</div>';
 				}
+				tag += '</li>\n';
 			}
-			
 			return tag;
 		}
 
@@ -678,6 +688,7 @@
 			var formTitle = "";
 			let tag = '';
 
+			console.log('cate1>>'+cate1.cate1No+ 'LL'+cate1.cate2List.length);
 			if (cate1 != null) {
 				tag += '<li';
 				if (cate1.cate1No == cate1No) {
@@ -749,6 +760,7 @@
 						}else{
 							tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
 						}
+
 						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
 							tag += '<div class="sub_cate"';
 							if (cate2.cate2No == cate2No) {
@@ -776,6 +788,7 @@
 								}else{
 									tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>';
 								}
+
 								if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
 									tag += '<div class="sub_cate"';
 									if (cate2.cate2No == cate2No) {
@@ -801,13 +814,18 @@
 										}else{
 											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a>';
 										}
+										tag += '</li>';
 									});
+									tag += '	</ul>\n';
+									tag += '</div>';
 								}
-								tag += '</li>\n';
+
+								tag += '</li>';
 							});
 							tag += '	</ul>\n';
-							tag += '</div>\n';
+							tag += '</div>';
 						}
+
 						tag += '</li>';
 					});
 					tag += '	</ul>\n';
@@ -894,8 +912,8 @@
 				}else{
 					historyData = {};
 				}
-				if(typeof historyData.sortGbNm!='undefined' && historyData.sortGbNm!=''){
-					$(".arrayWrap .btn").text(historyData.sortGbNm);
+				if(typeof historyData.sortingTypeNm!='undefined' && historyData.sortingTypeNm!=''){
+					$(".arrayWrap .btn").text(historyData.sortingTypeNm);
 				}
 				if(typeof historyData.filterHtml!='undefined' && historyData.filterHtml!=''){
 					$("#searchForm").append(historyData.filterHtml);
@@ -908,20 +926,20 @@
 				if(typeof historyData.totalCount!='undefined' && historyData.totalCount!=''){
 					$("#totalGoodsCnt").text(historyData.totalCount);
 				}
-				if(typeof historyData.sortGb!='undefined' && historyData.sortGb!=''){
-					$("#sortSelect").val(historyData.sortGb);
-					$("#searchForm input:hidden[name=sortGb]").val(historyData.sortGb);
-					fnSortChange(historyData.sortGb);
+				if(typeof historyData.sortingType!='undefined' && historyData.sortingType!=''){
+					$("#sortSelect").val(historyData.sortingType);
+					$("#searchForm input:hidden[name=sortingType]").val(historyData.sortingType);
+					fnSortChange(historyData.sortingType);
 				}else{
 					fnGoodsListSearch();
 				}
 			}else{
 				fnCategoryGoodsInfiniteScrollInit();
-				/*var sortGb = [[${sortGb}]];
-				if(sortGb=='new' || sortGb=='best'){
-					$("#sortSelect").val(sortGb);
+				/*var sortingType = [[${sortingType}]];
+				if(sortingType=='NEW' || sortingType=='BEST'){
+					$("#sortSelect").val(sortingType);
 					$("#sortSelect").parent('div').children('span').text($("#sortSelect option:selected").text())
-					fnSortChange(sortGb);
+					fnSortChange(sortingType);
 				}else{
 					fnGoodsListSearch();
 				}*/
@@ -929,13 +947,13 @@
 			}
 		});
 
-		var fnSortList = function (obj, sortGb){
+		var fnSortList = function (obj, sortingType){
 			$("#sortArea").find('li').each(function (){
 				$(this).find('a').attr('class','off');
 			});
 
 			$(obj).addClass("on");
-			$("#searchGoodsForm").find("[name=sortGb]").val(sortGb);
+			$("#searchGoodsForm").find("[name=sortingType]").val(sortingType);
 			fnCategoryGoodsInfiniteScrollInit();
 			fnGoodsListSearch();
 		}

+ 963 - 0
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb2.html

@@ -0,0 +1,963 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org"
+	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	  layout:decorator="web/common/layout/PlanningLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : CategoryGoodsListFormWeb.html
+ * @desc    : 카테고리 상품목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.02   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div id="container" class="container dp">
+		<div class="breadcrumb">
+			<ul id="navArea">
+				<li class="bread_home" id="idHome"><a href="javascript:void(0);" id="navHome">홈</a></li>
+				<li class="bread_2depth" id="navNm"></li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content dp_list"> <!-- 페이지특정 클래스 = dp_list -->
+				<div class="cont_head">
+					<div>
+						<h3 id="formTitle"></h3>
+					</div>
+				</div>
+				<div class="lnb">
+					<div class="lnb_tit">
+						<h3>카테고리</h3>
+					</div>
+					<div class="lnb_category">
+						<ul class="category" id="ulAllCate">
+
+						</ul>
+					</div>
+				</div>
+				<div class="cont">
+					<form id="filterForm">
+						<div class="cont_body">
+							<div class="filter_list">
+								<!-- 1depth -->
+								<ul>
+									<li data-id="tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}">
+										<a href="javascript:void(0)">브랜드</a>
+									</li>
+									<li data-id="tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}">
+										<a href="javascript:void(0)">사이즈</a>
+									</li>
+									<li data-id="tap04" th:if="${filterPriceList!=null and !filterPriceList.empty}">
+										<a href="javascript:void(0)">가격</a>
+									</li>
+									<li data-id="tap05">
+										<a href="javascript:void(0)">할인율</a>
+									</li>
+									<li data-id="tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}">
+										<a href="javascript:void(0)">연령</a>
+									</li>
+									<li data-id="tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}">
+										<a href="javascript:void(0)">시즌</a>
+									</li>
+									<li data-id="tap08" th:if="${filterColorList!=null and !filterColorList.empty}">
+										<a href="javascript:void(0)">컬러</a>
+									</li>
+									<li data-id="tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}">
+										<a href="javascript:void(0)">혜택</a>
+									</li>
+								</ul>
+								<div class="form_field">
+									<div>
+										<input id="sexGb" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="sexGb"> <span>남여 공용만 보기</span> </label>
+									</div>
+									<div>
+										<input id="newProd" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="newProd"> <span>신상품만 보기</span> </label>
+									</div>
+								</div>
+							</div>
+							<div class="filter_content">
+								<!-- 브랜드 -->
+								<div class="sort tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}" id="brandFilterDiv">
+									<ul>
+										<th:block th:each="filterBrandData, filterBrandStat : ${filterBrandList}">
+											<li>
+												<label class="brand_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="brand" th:value="${filterBrandData.filterCd}" th:data-id="${filterBrandData.filterNm}" onclick="filterSel(this,'brand','off');"><span th:text="${filterBrandData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //브랜드 -->
+								<!-- 사이즈 -->
+								<div class="sort tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}" id="sizeFilterDiv">
+									<ul>
+										<li id="sizeLi1">
+											<strong>상의</strong>
+											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'T'}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize'+filterSizeStat.count}" name="size" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','1');"><span th:text="${filterSizeData.filterNm}">80</span>
+												</label>
+											</th:block>
+										</li>
+										<li id="sizeLi2">
+											<strong>하의</strong>
+											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'B'}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize'+filterSizeStat.count}" name="size" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','2');"><span th:text="${filterSizeData.filterNm}">80</span>
+												</label>
+											</th:block>
+										</li>
+										<li id="sizeLi3">
+											<strong>신발</strong>
+											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'S'}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize'+filterSizeStat.count}" name="size" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','3');"><span th:text="${filterSizeData.filterNm}">80</span>
+												</label>
+											</th:block>
+										</li>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //사이즈 -->
+								<!-- 가격 -->
+								<div class="sort tap04" id="priceFilterDiv">
+									<div class="range">
+										<input type="text" class="js-range-slider01" name="" value="" />
+										<input type="hidden" id="price_input_from" value="0"/>
+										<input type="hidden" id="price_input_to" value="0"/>
+									</div>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //가격 -->
+								<!-- 할인율 -->
+								<div class="sort tap05" id="dcrateFilterDiv">
+									<ul style="display:none;">
+										<li><input type="checkbox" id="percent01" name="range" value="0"><label for="percent01"><span></span><span>0%</span></label></li>
+										<li><input type="checkbox" id="percent02" name="range" value="10"><label for="percent02"><span></span><span>10%</span></label></li>
+										<li><input type="checkbox" id="percent03" name="range" value="20"><label for="percent03"><span></span><span>20%</span></label></li>
+										<li><input type="checkbox" id="percent04" name="range" value="30"><label for="percent04"><span></span><span>30%</span></label></li>
+										<li><input type="checkbox" id="percent05" name="range" value="40"><label for="percent05"><span></span><span>40%</span></label></li>
+										<li><input type="checkbox" id="percent06" name="range" value="50"><label for="percent06"><span></span><span>50%</span></label></li>
+										<li><input type="checkbox" id="percent07" name="range" value="60"><label for="percent07"><span></span><span>60%</span></label></li>
+										<li><input type="checkbox" id="percent08" name="range" value="70"><label for="percent08"><span></span><span>70%</span></label></li>
+										<li><input type="checkbox" id="percent09" name="range" value="80"><label for="percent09"><span></span><span>80%</span></label></li>
+										<li><input type="checkbox" id="percent10" name="range" value="100"><label for="percent10"><span></span><span>100%</span></label></li>
+									</ul>
+									<div class="range">
+										<input type="text" class="js-range-slider02" name="" value="" />
+										<input type="hidden" id="dcrate_input_from" value="0"/>
+										<input type="hidden" id="dcrate_input_to" value="0"/>
+									</div>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //할인율 -->
+								<!-- 연령 -->
+								<div class="sort tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}" id="ageFilterDiv">
+									<ul>
+										<th:block th:each="filterAgeData, filterAgeStat : ${filterAgeList}">
+											<li>
+												<label class="Age_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterAge'+filterAgeStat.count}" name="age" th:value="${filterAgeData.filterCd}" th:data-id="${filterAgeData.filterNm}" onclick="filterSel(this,'age','off');"><span th:text="${filterAgeData.filterNm}">베이비(0~18개월)</span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //연령 -->
+								<!-- 시즌 -->
+								<div class="sort tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}" id="seasonFilterDiv">
+									<ul>
+										<th:block th:each="filterSeasonData, filterSeasonStat : ${filterSeasonList}">
+											<li>
+												<label class="Season_btn">
+													<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason'+filterSeasonStat.count}" name="season" th:value="${filterSeasonData.filterCd}" th:data-id="${filterSeasonData.filterNm}" onclick="filterSel(this,'season','off');"><span th:text="${filterSeasonData.filterNm}">봄</span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //시즌 -->
+								<!-- 컬러 -->
+								<div class="sort tap08" th:if="${filterColorList!=null and !filterColorList.empty}" id="colorFilterDiv">
+									<ul>
+										<th:block th:each="filterColorData, filterColorStat : ${filterColorList}">
+											<li>
+												<label class="color-check">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor'+filterColorStat.count}" name="color" th:value="${filterColorData.filterNm}" th:data-id="${filterColorData.filterNm.replace('#','')}" onclick="filterSel(this,'color','off');">
+													<span class="pdColor-color" th:if="${filterColorData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm+';'+' border:1px solid #aaa;'}" th:value="${filterColorData.filterNm}"></span>
+													<span class="pdColor-color" th:if="${filterColorData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm}" th:value="${filterColorData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //컬러 -->
+								<!-- 혜택 -->
+								<div class="sort tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}" id="benefitFilterDiv">
+									<ul>
+										<th:block th:each="filterBenefitData, filterBenefitStat : ${filterBenefitList}">
+											<li>
+												<label class="Benefits_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits'+filterBenefitStat.count}" name="benefit" th:value="${filterBenefitData.filterCd}" th:data-id="${filterBenefitData.filterNm}" onclick="filterSel(this,'benefit','off');"><span th:text="${filterBenefitData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //혜택 -->
+								<!-- 필터 -->
+								<div class="fillter">
+									<div class="fillter_box" id="filterData">
+									</div>
+									<button type="button" class="fillter_reset" onclick="fnFilterReset();"><span>전체 초기화</span></button>
+								</div>
+								<!-- //필터 -->
+							</div>
+							<div class="list_content"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+								<div class="list_defult">
+									<div>
+										<p>선택하신 조건에 맞는 상품이 없습니다.<br>필터를 변경해 보세요.</p>
+									</div>
+									<div class="ui_row">
+										<button type="button" class="btn btn_default btn_md"><span>선택한 필터 초기화</span></button>
+									</div>
+								</div>
+								<div class="count_wrap">
+									<div>
+										<p><span id="totCntId"></span>개의 상품</p>
+									</div>
+									<div>
+										<ul id="sortArea">
+											<li>
+												<a href="javascript:void(0);" class="on" onclick="fnSortList(this,'new');">최신상품순</a>
+											</li>
+											<li>
+												<a href="javascript:void(0);" onclick="fnSortList(this,'best');">인기상품순</a>
+											</li>
+											<li>
+												<a href="javascript:void(0);" onclick="fnSortList(this,'review');">리뷰 많은순</a>
+											</li>
+										</ul>
+									</div>
+								</div>
+
+								<div id="infiniteContainer">
+									<div id="listBoxOuter" class="itemsGrp">
+										<ul class="productlist quarter" >
+										</ul>
+									</div>
+								</div>
+
+								<div class="itemsGrp" id="listBox">
+
+								</div>
+
+							</div>
+							<div class="list_content">
+								<div class="list_defult" id="endPage">
+									<div>
+										<p>마지막 페이지 입니다.</p>
+									</div>
+								</div>
+							</div>
+						</div>
+					</form>
+				</div>
+			</div>
+		</div>
+	</div>
+	<form id="searchGoodsForm" name="searchGoodsForm">
+		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="cateNo" th:value="${cateInfo.cateNo}"/>
+		<input type="hidden" name="cateGb" th:value="${cateInfo.cateGb}"/>
+		<input type="hidden" name="brandGroupNo" th:value="${cateInfo.brandGroupNo}"/>
+		<input type="hidden" name="formalGb" th:value="${cateInfo.formalGb}"/>
+		<input type="hidden" name="cate1No" th:value="${cateInfo.cate1No}"/>
+		<input type="hidden" name="cate2No" th:value="${cateInfo.cate2No}"/>
+		<input type="hidden" name="cate3No" th:value="${cateInfo.cate3No}"/>
+		<input type="hidden" name="cate4No" th:value="${cateInfo.cate4No}"/>
+		<input type="hidden" name="sortGb" value="new"/>
+	</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 filterPriceList = [[${filterPriceList}]];
+		var custom_values = [];
+		var custom_values02  = [];
+		var currUrl = document.location.href;
+
+		// 컨텐츠 호출
+		$(document).ready( function() {
+			//가격 슬라이드
+			//var custom_values = ['9,000원', '230,000원', '487,000원', '700,000원', '1,360,000원', '1,799,000원'];
+			if(!gagajf.isNull(filterPriceList)){
+
+				$.each(filterPriceList, function (priceIdx, priceItem){
+					custom_values[priceIdx] = priceItem.filterNm;
+				});
+
+				var my_from = custom_values.indexOf(custom_values[0]); //custom_values.indexOf('9,000원');
+				var my_to = custom_values.indexOf(custom_values[5]); //custom_values.indexOf('230,000원');
+				var minValue = custom_values[0];
+				var maxValue = custom_values[5];
+
+				$(".dp .js-range-slider01, .sch_result .js-range-slider01").ionRangeSlider({
+					type: "double",
+					min: minValue,
+					max: maxValue,
+					from: my_from,
+					to: my_to,
+					grid: true,
+					skin: "round",
+					postfix: "원",
+					prettify_separator: ",",
+					values: custom_values,
+					min_interval: 1,
+					// onStart : function(data){
+					// 	fnCheckPrice(data);
+					// },
+					// onChange : fnCheckPrice,
+					onFinish : function(data){
+						fnCheckPrice(data);
+					}
+				});
+			}
+
+			//할인율
+			custom_values02 = ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'];
+			var my_from02 = custom_values02.indexOf('0%');
+			var my_to02 = custom_values02.indexOf('100%');
+
+			$(".dp .js-range-slider02, .sch_result .js-range-slider02").ionRangeSlider({
+				type: "double",
+				min: 0,
+				max: 100,
+				from: my_from02,
+				to: my_to02,
+				grid: true,
+				skin: "round",
+				postfix: "%",
+				prettify_separator: ",",
+				values: custom_values02,
+				min_interval: 1,
+				// onStart : function(data){
+				// 	fnCheckDcRate(data);
+				// },
+				// onChange : fnCheckDcRate,
+				onFinish : function (data){
+					fnCheckDcRate(data);
+				}
+			});
+
+			fnCreateCategoryList();
+		});
+
+		var fnFilterOption = function (obj, stat){
+			var thisId = $(obj).attr('id');
+			var tag = '';
+
+			if(thisId == 'sexGb'){
+				if(stat=='on'){
+					$(obj).attr('onclick','fnFilterOption(this,\'off\');');
+					tag += '<input type="hidden" name="sexGb" value="G007_Z"/>\n';
+					$("#searchGoodsForm").append(tag);
+				}else{
+					$(obj).attr('onclick','fnFilterOption(this,\'on\');');
+					$("#searchGoodsForm input:hidden[name=sexGb]").remove();
+				}
+			}else{
+				if(stat=='on'){
+					$(obj).attr('onclick','fnFilterOption(this,\'off\');');
+					tag += '<input type="hidden" name="newProd" value="40"/>\n';
+					$("#searchGoodsForm").append(tag);
+				}else{
+					$(obj).attr('onclick','fnFilterOption(this,\'on\');');
+					$("#searchGoodsForm input:hidden[name=newProd]").remove();
+				}
+			}
+			fnCategoryGoodsInfiniteScrollInit();
+			fnGoodsListSearch();
+		}
+
+		// 필터 가격 확인
+		var fnCheckPrice = function (data){
+			$("#priceSpan").remove();
+			$("#searchGoodsForm input:hidden[name=priceRow]").remove();
+			$("#searchGoodsForm input:hidden[name=priceHigh]").remove();
+			let min = data.from;
+			let max = data.to;
+			// console.log('Price from>>'+custom_values[min]);
+			// console.log('Price to>>'+custom_values[max]);
+			$("#price_input_from").val(custom_values[0]);
+			$("#price_input_to").val(custom_values[5]);
+
+			fnFilterSlider('price' , custom_values[min].addComma(), custom_values[max].addComma());
+		}
+
+		// 필터 할인율 확인
+		var fnCheckDcRate = function (data){
+			$("#dcrateSpan").remove();
+			$("#searchGoodsForm input:hidden[name=dcrateRow]").remove();
+			$("#searchGoodsForm input:hidden[name=dcrateHigh]").remove();
+			let min = data.from;
+			let max = data.to;
+			$("#price_input_from").val(0);
+			$("#price_input_to").val(100);
+
+			fnFilterSlider('dcrate' , custom_values02[min].replace('%',''), custom_values02[max].replace('%',''));
+		}
+
+		var fnFilterReset = function (){
+			document.location.href = currUrl;
+			// $("#searchGoodsForm input:hidden[name=brandSearch]").remove();
+			// $("#searchGoodsForm input:hidden[name=sizeSearch]").remove();
+			// $("#searchGoodsForm input:hidden[name=priceRow]").remove();
+			// $("#searchGoodsForm input:hidden[name=priceHigh]").remove();
+			// $("#searchGoodsForm input:hidden[name=dcrateRow]").remove();
+			// $("#searchGoodsForm input:hidden[name=dcrateHigh]").remove();
+			// $("#searchGoodsForm input:hidden[name=seasonSearch]").remove();
+			// $("#searchGoodsForm input:hidden[name=colorSearch]").remove();
+			// $("#searchGoodsForm input:hidden[name=benefitSearch]").remove();
+		}
+
+		var fnGoodsListSearch = function (){
+			gagaInfiniteScroll.getHistory();
+		}
+
+		// 상품 검색
+		var fnGetInfiniteScrollDataList = function (pageNum){
+			$("#searchGoodsForm input[name=pageNo]").val(pageNum+1);
+			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchGoodsForm,  gagaInfiniteScroll.jsonToHtml);
+		}
+
+		var fnDrawInfiniteScrollData = function (result){
+			let totalCnt = result.totalCnt;
+			$("#totCntId").text(totalCnt.addComma());
+			gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
+
+			var ithrCd = '';
+			var contentLoc = '';
+			if (result.dataList != null && result.dataList.length > 0) {
+				$('.list_content .list_defult').hide();
+				$('.list_content .count_wrap').show();
+				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);
+				fnImgOnoff();
+			}else {
+				if($("#searchGoodsForm input[name=pageNo]").val()==1){
+					// 필터 값으로 조회 데이터 없을때
+					$('.list_content .list_defult').show();
+					$('.list_content .count_wrap').hide();
+				}else{
+					// 마지막 페이지 일때
+					$('#endPage').show();
+					$('.list_content .count_wrap').hide();
+				}
+				gagaInfiniteScroll.draw('not');
+			}
+		}
+
+		var fnCreateCategoryList = function (){
+			let actionUrl = '';
+			let brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
+				actionUrl = '/display/gnb/tab/list';
+			}else{
+				actionUrl = '/display/brand/cate/list?brandGroupNo=' + [[${cateInfo.brandGroupNo}]];
+			}
+			
+			$.getJSON(actionUrl
+				, function(result, status) {
+					//if (status == 'success') {
+					if (result.length > 0) {
+						let formalGb = [[${cateInfo.formalGb}]];
+						let cateGb = 'G032_101';
+						let navNm = '';
+						$('#ulAllCate').html('');
+						if(formalGb=='G009_20'){
+							$("#navNm").hide();
+							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\',\'\',\'\',\'\',\'\',\'\',\''+formalGb+'\');">전체</a></li>\n');
+							navNm += '<li class="bread_2depth" id="navNm">아울렛</li><li class="bread_2depth" id="navNm1">전체</li>';
+						}else{
+							$("#navNm").hide();
+							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\');">전체</a></li>\n');
+							navNm += '<li class="bread_2depth" id="navNm1">전체</li>';
+						}
+						
+						if(gagajf.isNull($("#searchGoodsForm").find("[name=cate1No]").val())){
+							$("#navArea").append(navNm);
+							$("#formTitle").text('전체');
+						}
+
+						let allCate = [[${allCateList}]];
+						if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
+							$.each(result, function(idx, item) {
+								if (item.contentsType == 'C') { // 컨텐츠유형:카테고리
+									$.each(allCate, function(allCateIdx, allCateItem) {
+										if (item.cate1No == allCateItem.cate1No) {
+											$('#ulAllCate').append(fnGetCategoryList(allCateItem));
+										}
+									});
+								}
+							});
+						}else{
+							$.each(result, function(idx, item) {
+								$.each(allCate, function(brandCateIdx, brandCateItem) {
+									if (item.cate1No == brandCateItem.cate1No) {
+										$('#ulAllCate').append(fnGetBrandCategoryList(item));
+									}
+								});
+							});
+						}
+					}
+					//}
+				});
+		}
+		
+		let fnGetBrandCategoryList = function (cate1){
+			var brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			var cateGb =  [[${cateInfo.cateGb}]];
+			var formalGb = [[${cateInfo.formalGb}]];
+			var cate1No = [[${cateInfo.cate1No}]];
+			var cate2No = [[${cateInfo.cate2No}]];
+			var cate3No = [[${cateInfo.cate3No}]];
+			var cate4No = [[${cateInfo.cate4No}]];
+			
+			var navNm = "";
+			var formTitle = "";
+			let tag = '';
+			
+			console.log('cate1No>>>'+cate1No);
+		
+			if(cate1 != null){
+				tag += '<li';
+				if (cate1.cate1No == cate1No) {
+					tag += ' class="on"';
+				}
+				tag += '>\n';
+				tag += '	<a href="javascript:javascript:void(0);"';
+				if (cate1.cate1No == cate1No && cate2No == null) {
+					tag += ' class="on"';
+					formTitle = cate1.cate1Nm;
+					$("#formTitle").text(formTitle);
+					$("#navNm").hide();
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navHome").attr('onclick', 'cfnGoToBrandMain(' + brandGroupNo + ');');
+					$("#navArea").append(navNm);
+				}else if(cate1.cate1No == cate1No && cate3No == null){
+					$("#navNm").hide();
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navArea").append(navNm);
+				}else if(cate3No != null){
+					$("#navNm").hide();
+				}
+				tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ');" >' + cate1.cate1Nm + '</a>\n';
+				
+				
+				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+					tag += '<div class="sub_cate" style="display: block;">\n';
+					tag += '	<ul>\n';
+					$.each(cate1.cate2List, function (idx2, cate2) {
+						tag += '		<li';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+						}
+						tag += '		>\n';
+						tag += '		<a href="javascript:javascript:void(0);" ';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+							navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li>';
+							$("#navArea").append(navNm);
+							$("#formTitle").text(cate2.cate2Nm);
+						}else if(cate2.cate2No == cate2No){
+							navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+							$("#navArea").append(navNm);
+						}
+						tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						
+						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+							tag += '<div class="sub_cate"';
+							if (cate2.cate2No == cate2No) {
+								tag += ' style="display: block;"';
+							}
+							tag += '>\n';
+							tag += '	<ul>\n';
+							$.each(cate2.cate3List, function (idx3, cate3) {
+								tag += '<li';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+								}
+								tag += '>';
+								tag += '		<a href="javascript:javascript:void(0);" ';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+									$("#navArea").append(navNm);
+									$("#formTitle").text(cate3.cate3Nm);
+								}else if(cate3.cate3No == cate3No){
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+								}
+								tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>';
+								
+								if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+									tag += '<div class="sub_cate"';
+									if (cate3.cate3No == cate3No) {
+										tag += ' style="display: block;"';
+									}
+									tag += '>\n';
+									tag += '	<ul>\n';
+									$.each(cate3.cate4List, function (idx4, cate4) {
+										tag += '<li';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+										}
+										tag += '>';
+										tag += '		<a href="javascript:javascript:void(0);" ';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+											navNm = '<li class="bread_2depth" id="navNm3">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li><li class="bread_2depth" id="navNm3">' + cate4.cate4Nm + '</li>';
+											$("#navArea").append(navNm);
+											$("#formTitle").text(cate4.cate4Nm);
+										}
+										if (formalGb == 'G009_20') {
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',\'\',\'' + formalGb + '\');">' + cate4.cate4Nm + '</a>';
+										} else {
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a>';
+										}
+									});
+									tag += '</ul>\n';
+									tag += '</div>\n';
+								}
+								tag += '</li>';
+							});
+							tag += '</ul>\n';
+							tag += '</div>\n';
+						}
+						
+						tag += '</li>';
+					});
+					tag += '</ul>';
+					tag += '</div>';
+				}
+			}
+			
+			return tag;
+		}
+
+		let fnGetCategoryList = function (cate1){
+			var brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			var cateGb =  [[${cateInfo.cateGb}]];
+			var formalGb = [[${cateInfo.formalGb}]];
+			var cate1No = [[${cateInfo.cate1No}]];
+			var cate2No = [[${cateInfo.cate2No}]];
+			var cate3No = [[${cateInfo.cate3No}]];
+			var cate4No = [[${cateInfo.cate4No}]];
+
+			var navNm = "";
+			var formTitle = "";
+			let tag = '';
+
+			if (cate1 != null) {
+				tag += '<li';
+				if (cate1.cate1No == cate1No) {
+					tag += ' class="on"';
+				}
+				tag += '>\n';
+				tag += '	<a href="javascript:javascript:void(0);"';
+				if (cate1.cate1No == cate1No && cate2No == null) {
+					tag += ' class="on"';
+					formTitle = cate1.cate1Nm;
+					$("#formTitle").text(formTitle);
+					$("#navNm").hide();
+					if(formalGb=='G009_20'){
+						navNm += '<li class="bread_2depth" id="navNm1">아울렛</li>';
+					}
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					if (brandGroupNo == 0) {
+						$("#navHome").attr('href', '/');
+						$("#navArea").append(navNm);
+					} else {
+						$("#navHome").attr('onclick', 'cfnGoToBrandMain(' + brandGroupNo + ');');
+						$("#navArea").append(navNm);
+					}
+				}else if(cate1.cate1No == cate1No && cate3No == null){
+					$("#navNm").hide();
+					if(formalGb=='G009_20'){
+						navNm += '<li class="bread_2depth" id="navNm1">아울렛</li>';
+					}
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navArea").append(navNm);
+					//$("#navNm").text(cate1.cate1Nm);
+				}else if(cate3No != null){
+					$("#navNm").hide();
+				}
+				if(formalGb=='G009_20'){
+					tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',\'\',\'\',\'\',\'\',\'' + formalGb + '\');" >' + cate1.cate1Nm + '</a>\n';
+				}else{
+					tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ');" >' + cate1.cate1Nm + '</a>\n';
+				}
+				
+				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+					tag += '<div class="sub_cate"';
+					if (cate1.cate1No == cate1No) {
+						tag += ' style="display: block;"';
+					}
+					tag += '>\n';
+					tag += '	<ul>\n';
+					$.each(cate1.cate2List, function (idx2, cate2) {
+						tag += '		<li';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+						}
+						tag += '		>\n';
+						tag += '		<a href="javascript:javascript:void(0);" ';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+							navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li>';
+							$("#navArea").append(navNm);
+							$("#formTitle").text(cate2.cate2Nm);
+						}else if(cate2.cate2No == cate2No){
+							if(formalGb=='G009_20'){
+								navNm += '<li class="bread_2depth" id="navNm1">아울렛</li>';
+							}
+							navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+							$("#navArea").append(navNm);
+						}
+						if(formalGb=='G009_20'){
+							tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',\'\',\'\',\'\',\'' + formalGb + '\');">' + cate2.cate2Nm + '</a>\n';
+						}else{
+							tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						}
+						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+							tag += '<div class="sub_cate"';
+							if (cate2.cate2No == cate2No) {
+								tag += ' style="display: block;"';
+							}
+							tag += '>\n';
+							tag += '	<ul>\n';
+							$.each(cate2.cate3List, function (idx3, cate3) {
+								tag += '<li';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+								}
+								tag += '>';
+								tag += '		<a href="javascript:javascript:void(0);" ';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+									$("#navArea").append(navNm);
+									$("#formTitle").text(cate3.cate3Nm);
+								}else if(cate3.cate3No == cate3No){
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+								}
+								if(formalGb=='G009_20'){
+									tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',\'\',\'\',\'' + formalGb + '\');">' + cate3.cate3Nm + '</a>';
+								}else{
+									tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>';
+								}
+								if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+									tag += '<div class="sub_cate"';
+									if (cate2.cate2No == cate2No) {
+										tag += ' style="display: block;"';
+									}
+									tag += '>\n';
+									tag += '	<ul>\n';
+									$.each(cate3.cate4List, function (idx4, cate4) {
+										tag += '<li';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+										}
+										tag += '>';
+										tag += '		<a href="javascript:javascript:void(0);" ';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+											navNm = '<li class="bread_2depth" id="navNm3">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li><li class="bread_2depth" id="navNm3">' + cate4.cate4Nm + '</li>';
+											$("#navArea").append(navNm);
+											$("#formTitle").text(cate4.cate4Nm);
+										}
+										if(formalGb=='G009_20'){
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',\'\',\'' + formalGb + '\');">' + cate4.cate4Nm + '</a>';
+										}else{
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a>';
+										}
+									});
+								}
+								tag += '</li>\n';
+							});
+							tag += '	</ul>\n';
+							tag += '</div>\n';
+						}
+						tag += '</li>';
+					});
+					tag += '	</ul>\n';
+					tag += '</div>\n';
+				}
+				tag += '</li>\n';
+			}
+			return tag;
+		}
+
+		var fnImgOnoff = function (){
+			var nowFocus = $('.dp .itemPic');
+			var nowMov = $('.itemPic').children('.pd_mov');
+			var nowImg = $('.itemPic').children('.pd_img');
+			var ogrSrc;
+			var overSrc;
+			var srcName = nowImg.attr('src');
+			overSrc = srcName.substring(0, srcName.lastIndexOf('.'));
+			
+			var srcImg;
+			var srcdat;
+
+			$(nowFocus).on('mouseover', function() {
+				// [on] size opt
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				// [on] mov none
+				//$(this).css("opacity","0");
+				// return false;
+				$(this).children('.pd_mov').siblings(".itemOpt").addClass('on');
+				$(this).children('.pd_mov').css("opacity","0");
+			});
+			$(nowFocus).on('mouseleave', function() {
+				// [off] size opt
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				// [off] mov block
+				//$(this).css("opacity","1");
+				// return false;
+				$(this).children('.pd_mov').siblings(".itemOpt").removeClass('on');
+				$(this).children('.pd_mov').css("opacity","1");
+			});
+			$(nowFocus).on('mouseover', function() {
+				//img1 = $(this).attr('src');
+				//img2 = $(this).attr('data-img');
+				// [on] size opt
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				// [on] re-Name
+				// ogrSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
+				// overSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
+				// $(this).attr('src', overSrc+ '_onhover.' + /[^.]+$/.exec(srcName));
+				//$(this).attr('src',img2);
+				// return false;
+				$(this).children('.pd_img').siblings(".itemOpt").addClass('on');
+				srcImg = $(this).children('.pd_img').attr('src');
+				srcdat = $(this).children('.pd_img').attr('data-img');
+				$(this).children('.pd_img').attr('src',srcdat);
+			});
+			$(nowFocus).on('mouseleave', function() {
+				// [off] size opt
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				// [off] re-Name
+				// $(this).attr('src', overSrc + '.' + /[^.]+$/.exec(srcName));
+				//$(this).attr('src', img1);
+				// return false;
+				$(this).children('.pd_img').siblings(".itemOpt").removeClass('on');
+				$(this).children('.pd_img').attr('src', srcImg);
+			});
+		}
+
+		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
+		$(window).on("pageshow", function(event) {
+			$('#filterForm input[name=brand]:checked').each(function(){
+				$(this).parent().addClass("active");
+			});
+			$('#filterForm input[name=size]:checked').each(function(){
+				$(this).parent().addClass("active");
+			});
+			$('#filterForm input[name=price]:checked').each(function(){
+				$(this).parent().addClass("active");
+			});
+			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
+				var historyData = sessionStorage.getItem(document.location.href);
+				if(historyData!=null){
+					historyData = JSON.parse(historyData);
+				}else{
+					historyData = {};
+				}
+				if(typeof historyData.sortGbNm!='undefined' && historyData.sortGbNm!=''){
+					$(".arrayWrap .btn").text(historyData.sortGbNm);
+				}
+				if(typeof historyData.filterHtml!='undefined' && historyData.filterHtml!=''){
+					$("#searchForm").append(historyData.filterHtml);
+					filterHtml = historyData.filterHtml;
+				}
+				if(typeof historyData.filterStatHtml!='undefined' && historyData.filterStatHtml!=''){
+					$(".filterstate").append(historyData.filterStatHtml);
+					filterStatHtml = historyData.filterStatHtml;
+				}
+				if(typeof historyData.totalCount!='undefined' && historyData.totalCount!=''){
+					$("#totalGoodsCnt").text(historyData.totalCount);
+				}
+				if(typeof historyData.sortGb!='undefined' && historyData.sortGb!=''){
+					$("#sortSelect").val(historyData.sortGb);
+					$("#searchForm input:hidden[name=sortGb]").val(historyData.sortGb);
+					fnSortChange(historyData.sortGb);
+				}else{
+					fnGoodsListSearch();
+				}
+			}else{
+				fnCategoryGoodsInfiniteScrollInit();
+				/*var sortGb = [[${sortGb}]];
+				if(sortGb=='new' || sortGb=='best'){
+					$("#sortSelect").val(sortGb);
+					$("#sortSelect").parent('div').children('span').text($("#sortSelect option:selected").text())
+					fnSortChange(sortGb);
+				}else{
+					fnGoodsListSearch();
+				}*/
+				fnGoodsListSearch();
+			}
+		});
+
+		var fnSortList = function (obj, sortGb){
+			$("#sortArea").find('li').each(function (){
+				$(this).find('a').attr('class','off');
+			});
+
+			$(obj).addClass("on");
+			$("#searchGoodsForm").find("[name=sortGb]").val(sortGb);
+			fnCategoryGoodsInfiniteScrollInit();
+			fnGoodsListSearch();
+		}
+
+		/*]]>*/
+	</script>
+
+	<script>
+		//(진행 중)
+		$(document).ready( function() {
+			
+		});
+		
+		/* 210427_수정 : err 이미지 스크립트 */
+		function noneImg(noneSrc){
+			$(noneSrc).parents('.itemPic').css({'background':'url(/images/pc/thumb/bg_item_none.png)'});
+			$(noneSrc).css({'opacity':'0'});
+			//$(noneSrc).attr("src", no_src);
+		}
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 323 - 0
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb3.html

@@ -0,0 +1,323 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org"
+	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	  layout:decorator="web/common/layout/PlanningLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : CategoryGoodsListFormWeb.html
+ * @desc    : 카테고리 상품목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.02   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div id="container" class="container dp">
+		<div class="breadcrumb">
+			<ul id="navArea">
+				<li class="bread_home" id="idHome"><a href="javascript:void(0);" id="navHome">홈</a></li>
+				<li class="bread_2depth" id="navNm"></li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content dp_list"> <!-- 페이지특정 클래스 = dp_list -->
+				<div class="cont_head">
+					<div>
+						<h3 id="formTitle"></h3>
+					</div>
+				</div>
+				<div class="lnb">
+					<div class="lnb_tit">
+						<h3>카테고리</h3>
+					</div>
+					<div class="lnb_category">
+						<ul class="category" id="ulAllCate">
+
+						</ul>
+					</div>
+				</div>
+				<div class="cont">
+					<form id="filterForm">
+						<div class="cont_body">
+							<div class="filter_list">
+								<!-- 1depth -->
+								<ul>
+									<li data-id="tap02" th:if="${filterBrandList != null and !filterBrandList.empty}">
+										<a href="javascript:void(0)">브랜드</a>
+									</li>
+									<li data-id="tap03" th:if="${filterSizeList != null and !filterSizeList.empty}">
+										<a href="javascript:void(0)">사이즈</a>
+									</li>
+									<li data-id="tap04" th:if="${filterPriceList != null and !filterPriceList.empty}">
+										<a href="javascript:void(0)">가격</a>
+									</li>
+									<li data-id="tap05">
+										<a href="javascript:void(0)">할인율</a>
+									</li>
+									<li data-id="tap06" th:if="${filterAgeList != null and !filterAgeList.empty}">
+										<a href="javascript:void(0)">연령</a>
+									</li>
+									<li data-id="tap07" th:if="${filterSeasonList != null and !filterSeasonList.empty}">
+										<a href="javascript:void(0)">시즌</a>
+									</li>
+									<li data-id="tap08" th:if="${filterColorList != null and !filterColorList.empty}">
+										<a href="javascript:void(0)">컬러</a>
+									</li>
+									<li data-id="tap09" th:if="${filterBenefitList != null and !filterBenefitList.empty}">
+										<a href="javascript:void(0)">혜택</a>
+									</li>
+								</ul>
+								<div class="form_field">
+									<div>
+										<input id="sexGb" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="sexGb"> <span>남여 공용만 보기</span> </label>
+									</div>
+									<div>
+										<input id="newProd" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="newProd"> <span>신상품만 보기</span> </label>
+									</div>
+								</div>
+							</div>
+							<div class="filter_content">
+								<!-- 브랜드 -->
+								<div class="sort tap02" th:if="${filterBrandList != null and !filterBrandList.empty}" id="brandFilterDiv">
+									<ul>
+										<th:block th:each="oneData, status : ${filterBrandList}">
+											<li>
+												<label class="brand_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand' + status.index}" name="brand" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'brand','off');"><span th:text="${oneData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //브랜드 -->
+								<!-- 사이즈 -->
+								<div class="sort tap03" th:if="${filterSizeList != null and !filterSizeList.empty}" id="sizeFilterDiv">
+									<ul>
+										<li id="sizeLi1">
+											<strong>상의</strong>
+											<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'T')}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'size','off','1');"><span th:text="${oneData.filterNm}">80</span>
+												</label>
+											</th:block>
+										</li>
+										<li id="sizeLi2">
+											<strong>하의</strong>
+											<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'B')}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'size','off','2');"><span th:text="${oneData.filterNm}">80</span>
+												</label>
+											</th:block>
+										</li>
+										<li id="sizeLi3">
+											<strong>신발</strong>
+											<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'S')}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'size','off','3');"><span th:text="${oneData.filterNm}">80</span>
+												</label>
+											</th:block>
+										</li>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //사이즈 -->
+								<!-- 가격 -->
+								<div class="sort tap04" id="priceFilterDiv">
+									<div class="range">
+										<input type="text" class="js-range-slider01" name="" value="" />
+										<input type="hidden" id="price_input_from" value="0"/>
+										<input type="hidden" id="price_input_to" value="0"/>
+									</div>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //가격 -->
+								<!-- 할인율 -->
+								<div class="sort tap05" id="dcrateFilterDiv">
+									<ul style="display:none;">
+										<li><input type="checkbox" id="percent01" name="range" value="0"><label for="percent01"><span></span><span>0%</span></label></li>
+										<li><input type="checkbox" id="percent02" name="range" value="10"><label for="percent02"><span></span><span>10%</span></label></li>
+										<li><input type="checkbox" id="percent03" name="range" value="20"><label for="percent03"><span></span><span>20%</span></label></li>
+										<li><input type="checkbox" id="percent04" name="range" value="30"><label for="percent04"><span></span><span>30%</span></label></li>
+										<li><input type="checkbox" id="percent05" name="range" value="40"><label for="percent05"><span></span><span>40%</span></label></li>
+										<li><input type="checkbox" id="percent06" name="range" value="50"><label for="percent06"><span></span><span>50%</span></label></li>
+										<li><input type="checkbox" id="percent07" name="range" value="60"><label for="percent07"><span></span><span>60%</span></label></li>
+										<li><input type="checkbox" id="percent08" name="range" value="70"><label for="percent08"><span></span><span>70%</span></label></li>
+										<li><input type="checkbox" id="percent09" name="range" value="80"><label for="percent09"><span></span><span>80%</span></label></li>
+										<li><input type="checkbox" id="percent10" name="range" value="100"><label for="percent10"><span></span><span>100%</span></label></li>
+									</ul>
+									<div class="range">
+										<input type="text" class="js-range-slider02" name="" value="" />
+										<input type="hidden" id="dcrate_input_from" value="0"/>
+										<input type="hidden" id="dcrate_input_to" value="0"/>
+									</div>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //할인율 -->
+								<!-- 연령 -->
+								<div class="sort tap06" th:if="${filterAgeList != null and !filterAgeList.empty}" id="ageFilterDiv">
+									<ul>
+										<th:block th:each="oneData, status : ${filterAgeList}">
+											<li>
+												<label class="Age_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterAge' + status.index}" name="age" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'age','off');"><span th:text="${oneData.filterNm}">베이비(0~18개월)</span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //연령 -->
+								<!-- 시즌 -->
+								<div class="sort tap07" th:if="${filterSeasonList != null and !filterSeasonList.empty}" id="seasonFilterDiv">
+									<ul>
+										<th:block th:each="oneData, status : ${filterSeasonList}">
+											<li>
+												<label class="Season_btn">
+													<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason' + status.index}" name="season" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'season','off');"><span th:text="${oneData.filterNm}">봄</span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //시즌 -->
+								<!-- 컬러 -->
+								<div class="sort tap08" th:if="${filterColorList != null and !filterColorList.empty}" id="colorFilterDiv">
+									<ul>
+										<th:block th:each="oneData, status : ${filterColorList}">
+											<li>
+												<label class="color-check">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor' + status.index}" name="color" th:value="${oneData.filterNm}" th:data-id="${oneData.filterNm.replace('#','')}" onclick="filterSel(this,'color','off');">
+													<span class="pdColor-color" th:if="${oneData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+oneData.filterNm+';'+' border:1px solid #aaa;'}" th:value="${oneData.filterNm}"></span>
+													<span class="pdColor-color" th:if="${oneData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+oneData.filterNm}" th:value="${oneData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //컬러 -->
+								<!-- 혜택 -->
+								<div class="sort tap09" th:if="${filterBenefitList != null and !filterBenefitList.empty}" id="benefitFilterDiv">
+									<ul>
+										<th:block th:each="oneData, status : ${filterBenefitList}">
+											<li>
+												<label class="Benefits_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits' + status.index}" name="benefit" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'benefit','off');"><span th:text="${oneData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //혜택 -->
+								<!-- 필터 -->
+								<div class="fillter">
+									<div class="fillter_box" id="filterData">
+									</div>
+									<button type="button" class="fillter_reset" onclick="fnFilterReset();"><span>전체 초기화</span></button>
+								</div>
+								<!-- //필터 -->
+							</div>
+							<div class="list_content"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+								<div class="list_defult">
+									<div>
+										<p>선택하신 조건에 맞는 상품이 없습니다.<br>필터를 변경해 보세요.</p>
+									</div>
+									<div class="ui_row">
+										<button type="button" class="btn btn_default btn_md"><span>선택한 필터 초기화</span></button>
+									</div>
+								</div>
+								<div class="count_wrap">
+									<div>
+										<p><span id="totCntId"></span>개의 상품</p>
+									</div>
+									<div>
+										<ul id="sortArea">
+											<li>
+												<a href="javascript:void(0);" class="on" onclick="fnSortList(this,'new');">최신상품순</a>
+											</li>
+											<li>
+												<a href="javascript:void(0);" onclick="fnSortList(this,'best');">인기상품순</a>
+											</li>
+											<li>
+												<a href="javascript:void(0);" onclick="fnSortList(this,'review');">리뷰 많은순</a>
+											</li>
+										</ul>
+									</div>
+								</div>
+
+								<div id="infiniteContainer">
+									<div id="listBoxOuter" class="itemsGrp">
+										<ul class="productlist quarter" >
+										</ul>
+									</div>
+								</div>
+
+								<div class="itemsGrp" id="listBox">
+
+								</div>
+
+							</div>
+							<div class="list_content">
+								<div class="list_defult" id="endPage">
+									<div>
+										<p>마지막 페이지 입니다.</p>
+									</div>
+								</div>
+							</div>
+						</div>
+					</form>
+				</div>
+			</div>
+		</div>
+	</div>
+	
+<!-- 	<form id="searchGoodsForm" name="searchGoodsForm"> -->
+<!-- 		<input type="hidden" name="pageNo" id="pageNo" value ="1"/> -->
+<!-- 		<input type="hidden" name="pageSize" value ="30"/> -->
+<!-- 		<input type="hidden" name="cateNo" th:value="${cateInfo.cateNo}"/> -->
+<!-- 		<input type="hidden" name="cateGb" th:value="${cateInfo.cateGb}"/> -->
+<!-- 		<input type="hidden" name="brandGroupNo" th:value="${cateInfo.brandGroupNo}"/> -->
+<!-- 		<input type="hidden" name="formalGb" th:value="${cateInfo.formalGb}"/> -->
+<!-- 		<input type="hidden" name="cate1No" th:value="${cateInfo.cate1No}"/> -->
+<!-- 		<input type="hidden" name="cate2No" th:value="${cateInfo.cate2No}"/> -->
+<!-- 		<input type="hidden" name="cate3No" th:value="${cateInfo.cate3No}"/> -->
+<!-- 		<input type="hidden" name="cate4No" th:value="${cateInfo.cate4No}"/> -->
+<!-- 		<input type="hidden" name="sortGb" value="new"/> -->
+<!-- 	</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[*/
+		/*]]>*/
+	</script>
+
+	<script>
+		//(진행 중)
+		$(document).ready( function() {
+			
+		});
+		
+		/* 210427_수정 : err 이미지 스크립트 */
+		function noneImg(noneSrc){
+			$(noneSrc).parents('.itemPic').css({'background':'url(/images/pc/thumb/bg_item_none.png)'});
+			$(noneSrc).css({'opacity':'0'});
+			//$(noneSrc).attr("src", no_src);
+		}
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 108 - 63
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -88,12 +88,16 @@
 						<div class="cont_body">
 							<div class="ui_row">
 								<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
-									<div class="ui_col_3">
+									<div class="ui_col_3 styleArea">
 										<a th:href="${ContentsData.strVar1}">
 											<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
 											<dl>
-												<dt th:text="${ContentsData.strTitle1}"></dt>
-												<dd th:text="${ContentsData.subText1}"></dd>
+												<dt class="styleTitleC"> <!--th:text="${ContentsData.strTitle1}"-->
+													<input type="hidden" name="styleTitle" th:value="${ContentsData.strTitle1}"/>
+												</dt>
+												<dd class="styleNoteC"> <!--th:text="${ContentsData.subText1}"-->
+													<input type="hidden" name="styleNote" th:value="${ContentsData.subText1}"/>
+												</dd>
 												<!--<dd>당신을 위해 준비한 아우터 픽을 만나보자</dd>-->
 											</dl>
 										</a>
@@ -384,12 +388,14 @@
 							<div class="swiper-container post-bnnWide">
 								<div class="swiper-wrapper ">
 									<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
-										<div class="swiper-slide">
+										<div class="swiper-slide silderBannerArea">
 											<th:block th:if="${ContentsData.imgPath1!=null && ContentsData.imgPath1!=''}">
 												<a th:href="${ContentsData.strVar1}">
 													<div class="bnnbox" style="background:#e3e7ea;">
-														<div class="txtWrap ">
-															<p th:text="${ContentsData.strTitle1}"></p>
+														<div class="txtWrap bannerNote">
+															<p class="noteArea"> <!--th:text="${ContentsData.strTitle1}"-->
+																<input type="hidden" name="bannerNote" th:value="${ContentsData.strTitle1}"/>
+															</p>
 															<!--<p>아우터 + 이너 단독세일</p>-->	<!-- br 태그 줄바꿈해야함-->
 															<button type="button" class="btn">VIEW MORE</button>
 														</div>
@@ -1287,75 +1293,114 @@ var main_tv_slide = new Swiper ('.main_tv .post-tv', {
 });
 
 $(document).ready(function() {
-		// $("#id006").text();
-		// var brCheck = "오늘만 <br> 이 가격@".split("<br>");
-		// console.log(brCheck[0]);
-		// console.log(brCheck[1]);
+	// 몰메인 <br> 태그
+	$('.mainTitle').each(function (){
+		let tag = '';
+		var brText = $(this).find("input[name=mainTitlee]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+		if(brText.indexOf('<br>') > -1){
+			var reText = brText.split("<br>");
+			tag += '</dd>';
+			tag += reText[0];
+			tag += '<dd>';
+			tag += reText[1];
+		}else{
+			tag += brText;
+		}
+		$(this).append(tag);
+	});
 
-		// 몰메인 <br> 태그
-		$('.mainTitle').each(function (){
-			let tag = '';
-			var brText = $(this).find("input[name=mainTitlee]").val();
-
-			if(brText.indexOf('<br>') > -1){
-				var reText = brText.split("<br>");
-				tag += reText[0];
-				tag += '<br>';
-				tag += reText[1];
-			}else{
-				tag += brText;
-			}
-			$(this).append(tag);
-		});
+	// 가로긴배너 슬라이드
+	$('.silderBannerArea').each(function (){
+		let tag = '';
+		var noteText = $(this).find("input[name=bannerNote]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+		if(noteText.indexOf('<br>') > -1){
+			var reText = noteText.split("<br>");
+			tag += reText[0];
+			tag += '<br>';
+			tag += reText[1];
+		}else{
+			tag += noteText;
+		}
+		$(this).find('.noteArea').append(tag);
+	});
 
-		// 잇아이템 <br> 태그
-		var id004Text = $("#id004").find("input[name=title]").val();
-		if(id004Text.indexOf('<br>') > -1){
-			let tag = '';
-			var reText = id004Text.split("<br>");
+	// 스타일리포트 <br> 태그
+	$('.styleArea').each(function (){
+		let tag = '';
+		let tag2 = '';
+		var titleText = $(this).find("input[name=styleTitle]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+		var noteText = $(this).find("input[name=styleNote]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+
+		if(titleText.indexOf('<br>') > -1){
+			var reText = titleText.split("<br>");
 			tag += reText[0];
 			tag += '<br>';
 			tag += reText[1];
-			$("#id004").append(tag);
 		}else{
-			let tag = '';
-			tag += id004Text;
-			$("#id004").append(tag);
+			tag += titleText;
 		}
 
-		// 핫딜 <br> 태그
-		var id006Text = $("#id006").find("input[name=title]").val();
-		if(!gagajf.isNull(id006Text)){
-			if(id006Text.indexOf('<br>') > -1){
-				let tag = '';
-				var reText = id006Text.split("<br>");
-				tag += reText[0];
-				tag += '<br>';
-				tag += reText[1];
-				$("#id006").append(tag);
-			}else{
-				let tag = '';
-				tag += id006Text;
-				$("#id006").append(tag);
-			}
+		if(noteText.indexOf('<br>') > -1){
+			var reText = noteText.split("<br>");
+			tag2 += reText[0];
+			tag2 += '<br>';
+			tag2 += reText[1];
+		}else{
+			tag2 += noteText;
 		}
 
-		// 브랜드픽 <br> 태그
-		$('#id007 .title').each(function (){
+		$(this).find('.styleTitleC').append(tag);
+		$(this).find('.styleNoteC').append(tag2);
+	});
+
+	// 잇아이템 <br> 태그
+	var id004Text = $("#id004").find("input[name=title]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+	if(id004Text.indexOf('<br>') > -1){
+		let tag = '';
+		var reText = id004Text.split("<br>");
+		tag += reText[0];
+		tag += '<br>';
+		tag += reText[1];
+		$("#id004").append(tag);
+	}else{
+		let tag = '';
+		tag += id004Text;
+		$("#id004").append(tag);
+	}
+
+	// 핫딜 <br> 태그
+	var id006Text = $("#id006").find("input[name=title]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+	if(!gagajf.isNull(id006Text)){
+		if(id006Text.indexOf('<br>') > -1){
 			let tag = '';
-			var brText = $(this).find("input[name=title]").val();
-
-			if(brText.indexOf('<br>') > -1){
-				var reText = brText.split("<br>");
-				tag += reText[0];
-				tag += '<br>';
-				tag += reText[1];
-			}else{
-				tag += brText;
-			}
-			$(this).append(tag);
-		});
+			var reText = id006Text.split("<br>");
+			tag += reText[0];
+			tag += '<br>';
+			tag += reText[1];
+			$("#id006").append(tag);
+		}else{
+			let tag = '';
+			tag += id006Text;
+			$("#id006").append(tag);
+		}
+	}
+
+	// 브랜드픽 <br> 태그
+	$('#id007 .title').each(function (){
+		let tag = '';
+		var brText = $(this).find("input[name=title]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<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);
 	});
+});
 /*]]>*/
 </script>
 

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

@@ -79,7 +79,7 @@
 													<span class="count"><em th:text="${cancel.ordQty - cancel.cnclRtnQty}"></em>개</span>
 												</p>
 												<p>
-													<span class="price_org" th:if="${(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+													<span class="price_org" th:if="${(cancel.ordAmt - cancel.cnclRtnAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 													<span class="price_sale"><em th:text="${#numbers.formatInteger(cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 												</p>
 											</div>
@@ -221,7 +221,7 @@
 		fnSetMypageLnbList(2);
 
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '취소 신청');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '취소 신청');
 
 		// 셀렉트박스 활성화
 		$(".myOrderView .part_goods .select_custom.select_count").each(function() {

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

@@ -215,7 +215,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '취소 상세');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '취소 상세');
 	});
 /*]]>*/
 </script>

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

@@ -92,7 +92,8 @@
 											<p>
 												<th:block th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_20' or exchangeDtl.ordDtlStat == 'G013_30' or exchangeDtl.ordDtlStat == 'G013_35' or exchangeDtl.ordDtlStat == 'G013_40' or exchangeDtl.ordDtlStat == 'G013_50')}" th:text="|교환진행중|"></th:block>
 												<th:block th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_60' or exchangeDtl.ordDtlStat == 'G013_70')}" th:text="|교환완료|"></th:block>
-												<th:block th:unless="${exchangeDtl.chgStat == 'G685_40'}" th:text="${exchangeDtl.chgStatNm}"></th:block>
+												<th:block th:if="${exchangeDtl.chgStat == 'G685_49'}" th:text="|접수취소|"></th:block>
+												<th:block th:unless="${exchangeDtl.chgStat == 'G685_40' or exchangeDtl.chgStat == 'G685_49'}" th:text="${exchangeDtl.chgStatNm}"></th:block>
 												<span class="date" th:text="${exchangeDtl.chgDate}"></span>
 												<span class="time" th:text="${exchangeDtl.chgTime}"></span>
 											</p>
@@ -163,11 +164,11 @@
 												</li>
 												<li>
 													<span id="recipAddr" th:text="|${oneData.recipBaseAddr} ${oneData.recipDtlAddr}|"></span>
-													<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35' or oneData.chgOrdDtlStat == 'G013_40'}" onclick="fnChangeAddr('recip');"><span>배송지 변경</span></button>
+													<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35'}" onclick="fnChangeAddr('recip');"><span>배송지 변경</span></button>
 												</li>
 												<li>
 													배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${oneData.delvMemo}">직접 받고 부재 시 문 앞</span>
-													<button type="button" class="btn_underline" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35' or oneData.chgOrdDtlStat == 'G013_40'}" onclick="fnChangeMemo('recip')"><span>변경하기</span></button>
+													<button type="button" class="btn_underline" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35'}" onclick="fnChangeMemo('recip')"><span>변경하기</span></button>
 												</li>
 											</ul>
 										</div>
@@ -291,6 +292,7 @@
 	/*<![CDATA[*/
 	let addrGb = '';
 	let memoGb = '';
+	var isLogin = [[${isLogin}]];
 	let oneData = [[${oneData}]];
 	let ordNo = oneData.ordNo;
 	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
@@ -307,7 +309,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 상세');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '교환 상세');
 	});
 
 	// 배송메모 및 반품메모 변경 처리
@@ -390,7 +392,7 @@
 			data.ordChgSq = ordChgSq;
 			data.chgerRtnMemo = delvMemo;
 		} else {
-			url = 'change/delvery/memo';
+			url = '/mypage/change/delvery/memo';
 			data.delvAddrSq = delvAddrSq;
 			data.delvMemo = delvMemo;
 		}

+ 14 - 14
src/main/webapp/WEB-INF/views/web/mypage/MypageCreListFormWeb.html

@@ -163,15 +163,15 @@
 					<input type="hidden" name="stDate" value="" />
 					<input type="hidden" name="edDate" value="" />
 				</form>
-				<form id="exchangeForm" name="exchangeForm" action="#" th:action="@{'/mypage/cre/exchange/detail/form'}" th:method="post">
+				<form id="exchangeDetailForm" name="exchangeDetailForm" action="#" th:action="@{'/mypage/cre/exchange/detail/form'}" th:method="post">
 					<input type="hidden" name="ordChgSq"/>
 					<input type="hidden" name="ordNo"/>
 				</form>
-				<form id="returnForm" name="returnForm" action="#" th:action="@{'/mypage/cre/return/detail/form'}" th:method="post">
+				<form id="returnDetailForm" name="returnDetailForm" action="#" th:action="@{'/mypage/cre/return/detail/form'}" th:method="post">
 					<input type="hidden" name="ordChgSq"/>
 					<input type="hidden" name="ordNo"/>
 				</form>
-				<form id="cancelForm" name="cancelForm" th:action="@{'/mypage/cre/cancel/detail/form'}" th:method="post">
+				<form id="cancelDetailForm" name="cancelDetailForm" th:action="@{'/mypage/cre/cancel/detail/form'}" th:method="post">
 					<input type="hidden" name="ordChgSq"/>
 					<input type="hidden" name="ordNo"/>
 				</form>
@@ -190,7 +190,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/교환내역');
+		fnSetMypageLocation('취소/반품/교환 내역');
 		
 		// datepicker 설정
 		$('.period_datepicker').datepicker();
@@ -444,7 +444,7 @@
 					tag += '										</div>\n';
 					tag += '										<div class="button_box">\n';
 					if (cre.chgStat == 'G685_20' || cre.chgStat == 'G685_21' || cre.chgStat == 'G685_50' || cre.chgStat == 'G685_51') {
-						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" cancelGb="' + cre.chgGb + '" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>\n';
+						//tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" cancelGb="' + cre.chgGb + '" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>\n';
 					}
 					if (cre.chgStat == 'G685_21' || cre.chgStat == 'G685_51' || cre.chgStat == 'G685_32') {
 						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>\n';
@@ -550,17 +550,17 @@
 		let ordNo = $(param).attr('ordNo');
 		
 		if (chgGb == 'G680_20') {
-			$('#cancelForm input[name=ordChgSq]').val(ordChgSq);
-			$('#cancelForm input[name=ordNo]').val(ordNo);
-			document.cancelForm.submit();
+			$('#cancelDetailForm input[name=ordChgSq]').val(ordChgSq);
+			$('#cancelDetailForm input[name=ordNo]').val(ordNo);
+			document.cancelDetailForm.submit();
 		} else if (chgGb == 'G680_30') {
-			$('#returnForm input[name=ordChgSq]').val(ordChgSq);
-			$('#returnForm input[name=ordNo]').val(ordNo);
-			document.returnForm.submit();
+			$('#returnDetailForm input[name=ordChgSq]').val(ordChgSq);
+			$('#returnDetailForm input[name=ordNo]').val(ordNo);
+			document.returnDetailForm.submit();
 		} else if (chgGb == 'G680_40') {
-			$('#exchangeForm input[name=ordChgSq]').val(ordChgSq);
-			$('#exchangeForm input[name=ordNo]').val(ordNo);
-			document.exchangeForm.submit();
+			$('#exchangeDetailForm input[name=ordChgSq]').val(ordChgSq);
+			$('#exchangeDetailForm input[name=ordNo]').val(ordNo);
+			document.exchangeDetailForm.submit();
 		}
 	}
 	

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

@@ -40,7 +40,7 @@
 						<div class="goods_head">
 							<p th:unless="${oneData.giftPackYn == 'Y'}">주문일 <span th:text="${oneData.ordDt}"></span></p>
 							<p th:if="${oneData.giftPackYn == 'Y'}">선물일 <span th:text="${oneData.ordDt}"></span></p>
-							<a href="javascript:void(0)" th:attr="ordNo=${oneData.ordNo}, ordChgSq=${oneData.ordChgSq}, cancelGb=${oneData.chgGb}" onclick="fnCreCancel(this);">전체신청취소</a>
+							<a href="javascript:void(0)" th:if="${oneData.chgStat == 'G685_50' or oneData.chgStat == 'G685_51'}" th:attr="ordNo=${oneData.ordNo}, ordChgSq=${oneData.ordChgSq}, cancelGb=${oneData.chgGb}" onclick="fnCreCancel(this);">전체신청취소</a>
 						</div>
 						<div class="goods_cont">
 							<!-- 주문상품 -->
@@ -85,7 +85,7 @@
 											<p>
 												<th:block th:if="${returnDtl.chgStat == 'G685_33'}" th:text="|환불진행중|"></th:block>
 												<th:block th:if="${returnDtl.chgStat == 'G685_69'}" th:text="|접수취소|"></th:block>
-												<th:block th:unless="${returnDtl.chgStat == 'G685_33'}" th:text="${returnDtl.chgStatNm}"></th:block>
+												<th:block th:unless="${returnDtl.chgStat == 'G685_33' or returnDtl.chgStat == 'G685_69'}" th:text="${returnDtl.chgStatNm}"></th:block>
 												<span class="date" th:text="${returnDtl.chgDate}"></span>
 												<span class="time" th:text="${returnDtl.chgTime}"></span>
 											</p>
@@ -243,7 +243,7 @@
 											</div>
 											<div th:if="${refundYn == 'Y' and oneData.pgGb == 'KCP' and oneData.payMeans == 'G014_30'}">
 												<dt class="sr-only">영수증 확인</dt>
-												<dd><button type="button" class="btn btn_default btn_sm" onclick="fnReceipt('cancel')"><span>취소 전표 보기</span></button></dd>
+												<dd><button type="button" class="btn btn_default btn_sm" th:attr="ordChgSq=${oneData.ordChgSq}, refundYn=${refundYn}" onclick="fnReceipt('cancel')"><span>취소 전표 보기</span></button></dd>
 											</div>
 										</dl>
 									</td>
@@ -280,7 +280,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 상세');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '반품 상세');
 	});
 
 	var fnGoToWithdrawDelivery = function(param) {

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

@@ -17,7 +17,6 @@
  *******************************************************************************
  -->
 <body>
-
 <!--  container -->
 <th:block layout:fragment="content">
 	<div class="content myMbLeave"> <!-- 페이지특정 클래스 = myMbLeave -->
@@ -115,7 +114,7 @@
 									<td>
 										<div class="form_field">
 											<div class="input_wrap">
-												<input type="password" id="passwd" name="passwd" class="form_control" placeholder="비밀번호를 입력해주세요."/>
+												<input type="password" id="passwd" name="passwd" class="form_control" placeholder="비밀번호를 입력해주세요." minlength="8" maxlength="20"/>
 											</div>
 										</div>
 									</td>

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

@@ -76,7 +76,7 @@
 													<span class="count"><em th:text="${exchange.ordQty - exchange.cnclRtnQty}"></em>개</span>
 												</p>
 												<p>
-													<span class="price_org" th:if="${(exchange.ordAmt - exchange.cnclRtnAmt - exchange.cpn1DcAmt) > (exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(exchange.ordAmt - exchange.cnclRtnAmt - exchange.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+													<span class="price_org" th:if="${(exchange.ordAmt - exchange.cnclRtnAmt) > (exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(exchange.ordAmt - exchange.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 													<span class="price_sale"><em th:text="${#numbers.formatInteger(exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 												</p>
 											</div>
@@ -309,7 +309,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '교환 신청');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '교환 신청');
 		
 		// 셀렉트박스 활성화
 		$('.select_custom').each(function() {

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

@@ -251,7 +251,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '교환 신청');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '교환 신청');
 	});
 
 	// 교환 옵션 변경 팝업

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

@@ -87,7 +87,7 @@
 															<span class="count"><em th:text="${ordDtl.ordQty - ordDtl.cnclRtnQty}"></em>개</span>
 														</p>
 														<p>
-															<span class="price_org" th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+															<span class="price_org" th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 															<span class="price_sale"><em th:text="${#numbers.formatInteger(ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 														</p>
 														<p>
@@ -380,7 +380,7 @@
 												<dt>총 주문금액 (상품금액+배송비+추가비용)</dt>
 												<dd>
 													<div class="price">
-														<span class="order_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.ordAmt - orderAmtInfo.cnclRtnAmt + orderAmtInfo.realDelvAmt, 1, 'COMMA')}"></em>원</span>
+														<span class="order_total_price"><em th:text="${#numbers.formatInteger((orderAmtInfo.ordAmt + orderAmtInfo.cpn1DcAmt) - orderAmtInfo.cnclRtnAmt + orderAmtInfo.realDelvAmt, 1, 'COMMA')}"></em>원</span>
 													</div>
 												</dd>
 											</div>

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

@@ -468,8 +468,8 @@
 					tag += '													<span class="count"><em>' + (ordDtl.ordQty - ordDtl.cnclRtnQty) + '</em>개</span>\n';
 					tag += '												</p>\n';
 					tag += '												<p>\n';
-					if ((ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)) {
-						tag += '													<span class="price_org"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt).addComma() + '</em>원</span>\n';
+					if ((ordDtl.ordAmt - ordDtl.cnclRtnAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)) {
+						tag += '													<span class="price_org"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt).addComma() + '</em>원</span>\n';
 					}
 					tag += '													<span class="price_sale"><em>' + (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt).addComma() + '</em>원</span>\n';
 					tag += '												</p>\n';

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

@@ -80,7 +80,7 @@
 													<span class="count"><em th:text="${return.ordQty - return.cnclRtnQty}"></em>개</span>
 												</p>
 												<p>
-													<span class="price_org" th:if="${(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+													<span class="price_org" th:if="${(return.ordAmt - return.cnclRtnAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 													<span class="price_sale"><em th:text="${#numbers.formatInteger(return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 												</p>
 											</div>
@@ -503,6 +503,7 @@
 
 			let data = {};
 			data.ordNo = oneData.ordNo;
+			data.delvFeeCd = oneData.delvFeeCd;
 			data.chgGb = 'G680_30';
 			data.ordDtlNoArr = ordDtlNoArr;
 			data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
@@ -538,7 +539,8 @@
 					spanTotRtnDelvFee = 0;
 					spanTotDeliveryFee = 0;
 				}
-				
+				console.log('spanTotRtnDelvFee : '+spanTotRtnDelvFee);
+				console.log('spanTotDeliveryFee : '+spanTotDeliveryFee);
 				let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
 				let addDelvFee = spanTotRtnDelvFee + spanTotDeliveryFee;					// 추가배송비
 				let deductDcAmt = spanCpnDcAmt + spanTmtbDcAmt + spanPrePntDcAmt;			// 할인금액 차감(쿠폰+다다익선+선포인트)

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

@@ -340,7 +340,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 신청');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '반품 신청');
 		
 		// 셀렉트박스 활성화
 		$('.select_custom.type1').each(function(index) {

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

@@ -170,7 +170,7 @@
 				html += '							<span class="title sr-only">주문 옵션</span>                                                      ';
 				if (item.goodsType =='G056_S') {
 					$.each(item.colorNmArr, function (index2, option) {
-						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option + ' / ' + item.optCd2Arr[index2] + '</span>\n';
+						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option + '</span>\n';
 					})
 				}else{
 					html += '							<span class="option">'+item.colorNm+'</span>     ';
@@ -232,7 +232,13 @@
 				html+='						<div class="gd_opt">';
 				html+='							<div class="option_wrap">';
 				html+='								<span class="title sr-only">주문 옵션</span>';
-				html+='								<span class="option">'+item.colorNm+'</span>';
+				if (item.goodsType =='G056_S') {
+					$.each(item.colorNmArr, function (index2, option) {
+						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option +'</span>\n';
+					})
+				}else{
+					html += '							<span class="option">'+item.colorNm+'</span>     ';
+				}
 				html+='							</div>';
 				html+='						</div>';
 				html+='					</div>';

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

@@ -78,7 +78,7 @@
 													<span class="count"><em th:text="${cancel.ordQty - cancel.cnclRtnQty}"></em>개</span>
 												</p>
 												<p>
-													<span class="price_org" th:if="${(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+													<span class="price_org" th:if="${(cancel.ordAmt - cancel.cnclRtnAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 													<span class="price_sale"><em th:text="${#numbers.formatInteger(cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 												</p>
 											</div>

+ 223 - 0
src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreCancelDetailFormWeb.html

@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/NoMemberLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NoMemberCreCancelDetailFormWeb.html
+ * @desc    : 비회원 > 취소/반품/교환내역 > 취소상세 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content myOrderView"> <!-- 페이지특정 클래스 = myOrderView -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+					<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
+
+			</div>
+			<div class="cont">
+				<div class="sec_head">
+					<h3 class="subH1">취소상세</h3>
+					<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${oneData.ordNo}"></em></span>
+				</div>
+				<div class="sec_body">
+					<div class="part_goods">
+						<div class="goods_head">
+							<p>주문일 <span th:text="${oneData.ordDt}"></span></p>
+						</div>
+						<div class="goods_cont">
+							<!-- 주문상품 -->
+							<th:block th:if="${cancelDetailList.cancelDetailList}" th:each="cancelDtl, status : ${cancelDetailList.cancelDetailList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+								<div class="goods_info">
+									<div class="order_desc">
+										<div class="goods_box">
+											<div class="gd_item">
+												<a href="javascript:void(0)" th:attr="goodsCd=${cancelDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+													<span class="thumb">
+														<img th:src="${imageUrl + '/' + cancelDtl.sysImgNm}" width="100%" alt="">
+													</span>
+													<p>
+														<span class="brand" th:text="${cancelDtl.brandNm}"></span>
+														<span class="tag primary" th:if="${cancelDtl.shotDelvYn == 'Y'}">총알배송</span>
+														<span class="tag" th:if="${cancelDtl.shotDelvYn == 'N' and cancelDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+														<span class="tag" th:if="${cancelDtl.selfGoodsYn == 'N'}">업체직배송</span>
+													</p>
+													<p>
+														<span class="name" th:text="${cancelDtl.goodsNm}"></span>
+													</p>
+												</a>
+											</div>
+											<div class="gd_opt">
+												<div class="option_wrap">
+													<span class="title sr-only">주문 옵션</span>
+													<span class="option" th:if="${cancelDtl.goodsType == 'G056_S'}" th:each="option, status : ${cancelDtl.colorNmArr}" th:text="|${cancelDtl.itemNmArr[status.index]} / ${option} / ${cancelDtl.optCd2Arr[status.index]}|"></span>
+													<span class="option" th:unless="${cancelDtl.goodsType == 'G056_S'}" th:text="|${cancelDtl.colorNm} / ${cancelDtl.optCd2}|"></span>
+												</div>
+											</div>
+											<div class="gd_calc">
+												<p>
+													<span class="count"><em th:text="${cancelDtl.chgQty}"></em>개</span>
+												</p>
+<!--												<p>-->
+<!--													<span class="price_org" th:if="${cancelDtl.priceOrg > cancelDtl.priceSale}"><em th:text="${#numbers.formatInteger(cancelDtl.priceOrg, 1, 'COMMA')}"></em>원</span>-->
+<!--													<span class="price_sale"><em th:text="${#numbers.formatInteger(cancelDtl.priceSale, 1, 'COMMA')}"></em>원</span>-->
+<!--												</p>-->
+											</div>
+										</div>
+										<div class="status_box">
+											<p>
+												<th:block th:if="${cancelDtl.chgStat == 'G685_17' or cancelDtl.chgStat == 'G685_18'}" th:text="|주문취소|"></th:block>
+												<th:block th:unless="${cancelDtl.chgStat == 'G685_17' or cancelDtl.chgStat == 'G685_18'}" th:text="${cancelDtl.chgStatNm}"></th:block>
+												<span class="date" th:text="${cancelDtl.chgDate}"></span>
+												<span class="time" th:text="${cancelDtl.chgTime}"></span>
+											</p>
+										</div>
+										<div class="button_box">
+										</div>
+									</div>
+								</div>
+							</th:block>
+							<!-- //주문상품 -->
+						</div>
+					</div>
+					<h4 class="subH3">상세 정보</h4>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="210">
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>취소접수 일자</th>
+									<td th:text="${oneData.chgDt}"></td>
+								</tr>
+								<tr>
+									<th>취소완료 일자</th>
+									<td th:text="${oneData.completeDt}"></td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h4 class="subH3">환불정보</h4>
+					<div class="tbl type6">
+						<table>
+							<colgroup>
+								<col width="50%">
+								<col width="50%">
+							</colgroup>
+							<tbody>
+								<tr>
+									<td>
+										<dl>
+											<div>
+												<dt>환불 예정 금액</dt>
+												<dd>
+													<div class="price">
+														<span class="return_total_price"><em th:text="${#numbers.formatInteger(oneData.refundAmt + oneData.rfPntAmt + oneData.rfGfcdUseAmt, 1, 'COMMA')}"></em>원</span>
+													</div>
+												</dd>
+											</div>
+											<div class="include_item"> <!-- 할인항목 표기 class명 include_item -->
+												<dt>상품 취소 금액</dt>
+												<dd><em th:text="${#numbers.formatInteger(oneData.rfCnclAmt, 1, 'COMMA')}"></em>원</dd>
+											</div>
+											<div class="include_item">
+												<dt>배송비</dt>
+												<dd><em th:text="${#numbers.formatInteger(oneData.rfDeliveryFee, 1, 'COMMA')}"></em>원</dd>
+											</div>
+											<div class="include_item">
+												<dt>할인 금액 차감</dt>
+												<dd><em th:text="${#numbers.formatInteger((oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt) * -1, 1, 'COMMA')}"></em>원</dd>
+											</div>
+										</dl>
+									</td>
+									<td>
+										<dl>
+											<div>
+												<dt>결제 금액 환불</dt>
+												<dd>
+													<em th:text="${#numbers.formatInteger(oneData.refundAmt, 1, 'COMMA')}"></em>원
+												</dd>
+											</div>
+											<div>
+												<dt>포인트 환불</dt>
+												<dd>
+													<em th:text="${#numbers.formatInteger(oneData.rfPntAmt, 1, 'COMMA')}"></em>P
+												</dd>
+											</div>
+											<div>
+												<dt>상품권 환불</dt>
+												<dd>
+													<em  th:text="${#numbers.formatInteger(oneData.rfGfcdUseAmt, 1, 'COMMA')}"></em>원
+												</dd>
+											</div>
+											<div>
+												<dt>환불 수단</dt>
+												<dd th:if="${oneData.pgGb == 'KCP'}" th:text="${oneData.payMeansNm}"></dd>
+												<dd th:if="${oneData.pgGb == 'NAVER'}">네이버페이</dd>
+												<dd th:if="${oneData.pgGb == 'KAKAO'}">카카오페이</dd>
+												<dd th:if="${oneData.pgGb == 'PAYCO'}">PAYCO</dd>
+											</div>
+											<div th:if="${oneData.pgGb == 'KCP' and oneData.payMeans == 'G014_30'}">
+												<dt class="sr-only">영수증 확인</dt>
+												<dd><button type="button" class="btn btn_default btn_sm" th:attr="ordChgSq=${oneData.ordChgSq}, refundYn=${refundYn}" onclick="fnReceipt('cancel')"><span>취소 전표 보기</span></button></dd>
+											</div>
+										</dl>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<div class="txt_info">
+						<ul>
+							<li>
+								카드사로 결제 취소 요청이 전달된 후 환불까지는 평일 기준 3 ~7일이 소요될 수 있습니다.
+							</li>
+						</ul>
+					</div>
+					<div class="btn_footer_area">
+						<button type="button" class="btn btn_dark btn_md" onclick="fnGoToNoMemberCreList()"><span>확인</span></button>
+					</div>
+				</div>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let oneData = [[${oneData}]];
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+	let refundYn = [[${refundYn}]];
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetNoMemberLnbList(2);
+
+		// 마이페이지 location 설정
+		fnSetNoMemberLocation('취소/반품/교환 내역', '취소 상세');
+	});
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -0,0 +1,420 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/NoMemberLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NoMemberCreExchangeDetailFormWeb.html
+ * @desc    : 비회원 > 취소/반품/교환내역 > 교환상세 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content myOrderView"> <!-- 페이지특정 클래스 = myOrderView -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+					<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
+			</div>
+			<div class="cont">
+				<div class="sec_head">
+					<h3 class="subH1">교환상세</h3>
+					<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${oneData.ordNo}"></em></span>
+				</div>
+				<div class="sec_body">
+					<div class="part_goods">
+						<div class="goods_head">
+							<p>주문일 <span th:text="${oneData.ordDt}"></span></p>
+							<a href="javascript:void(0)" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" th:attr="ordNo=${oneData.ordNo}, ordChgSq=${oneData.ordChgSq}, cancelGb=${oneData.chgGb}, noMember=noMember" onclick="fnCreCancel(this);">전체신청취소</a>
+						</div>
+						<div class="goods_cont">
+							<!-- 주문상품 -->
+							<th:block th:if="${exchangeDetailList.exchangeDetailList}" th:each="exchangeDtl, status : ${exchangeDetailList.exchangeDetailList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+								<div class="goods_info">
+									<div class="order_desc">
+										<div class="goods_box">
+											<div class="gd_item">
+												<a href="javascript:void(0)" th:attr="goodsCd=${exchangeDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+													<span class="thumb">
+														<img th:src="${imageUrl + '/' + exchangeDtl.sysImgNm}" width="100%" alt="">
+													</span>
+													<p>
+														<span class="brand" th:text="${exchangeDtl.brandNm}"></span>
+														<span class="tag primary" th:if="${exchangeDtl.shotDelvYn == 'Y'}">총알배송</span>
+														<span class="tag" th:if="${exchangeDtl.shotDelvYn == 'N' and exchangeDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+														<span class="tag" th:if="${exchangeDtl.selfGoodsYn == 'N'}">업체직배송</span>
+													</p>
+													<p>
+														<span class="name" th:text="${exchangeDtl.goodsNm}"></span>
+													</p>
+												</a>
+											</div>
+											<div class="gd_opt">
+												<div class="option_wrap">
+													<span class="title sr-only">주문 옵션</span>
+													<span class="option" th:if="${exchangeDtl.goodsType == 'G056_S'}" th:each="option, status : ${exchangeDtl.colorNmArr}" th:text="|${exchangeDtl.itemNmArr[status.index]} / ${option} / ${exchangeDtl.optCd2Arr[status.index]}|"></span>
+													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.colorNm} / ${exchangeDtl.optCd2}|"></span>
+												</div>
+											</div>
+											<div class="gd_calc">
+												<p>
+													<span class="count"><em th:text="${exchangeDtl.chgQty}"></em>개</span>
+												</p>
+<!--												<p>-->
+<!--													<span class="price_org" th:if="${exchangeDtl.priceOrg > exchangeDtl.priceSale}"><em th:text="${#numbers.formatInteger(exchangeDtl.priceOrg, 1, 'COMMA')}"></em>원</span>-->
+<!--													<span class="price_sale"><em th:text="${#numbers.formatInteger(exchangeDtl.priceSale, 1, 'COMMA')}"></em>원</span>-->
+<!--												</p>-->
+											</div>
+											<div class="gd_opt">
+												<div class="option_wrap">
+													<span class="title">교환 옵션</span>
+													<span class="option" th:if="${exchangeDtl.goodsType == 'G056_S'}" th:each="option, status : ${exchangeDtl.chgColorNmArr}" th:text="|${exchangeDtl.chgItemNmArr[status.index]} / ${option} / ${exchangeDtl.chgOptCd2Arr[status.index]}|"></span>
+													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.chgColorNm} / ${exchangeDtl.chgOptCd2}|"></span>
+												</div>
+											</div>
+										</div>
+										<div class="status_box">
+											<p>
+												<th:block th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_20' or exchangeDtl.ordDtlStat == 'G013_30' or exchangeDtl.ordDtlStat == 'G013_35' or exchangeDtl.ordDtlStat == 'G013_40' or exchangeDtl.ordDtlStat == 'G013_50')}" th:text="|교환진행중|"></th:block>
+												<th:block th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_60' or exchangeDtl.ordDtlStat == 'G013_70')}" th:text="|교환완료|"></th:block>
+												<th:block th:if="${exchangeDtl.chgStat == 'G685_49'}" th:text="|접수취소|"></th:block>
+												<th:block th:unless="${exchangeDtl.chgStat == 'G685_40' or exchangeDtl.chgStat == 'G685_49'}" th:text="${exchangeDtl.chgStatNm}"></th:block>
+												<span class="date" th:text="${exchangeDtl.chgDate}"></span>
+												<span class="time" th:text="${exchangeDtl.chgTime}"></span>
+											</p>
+										</div>
+										<div class="button_box">
+											<p th:if="${exchangeDtl.chgStat == 'G685_32' or exchangeDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${exchangeDtl.ordNo}, ordChgSq=${exchangeDtl.ordChgSq}" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>
+											<p th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_20' or exchangeDtl.ordDtlStat == 'G013_30' or exchangeDtl.ordDtlStat == 'G013_35' or exchangeDtl.ordDtlStat == 'G013_40' or exchangeDtl.ordDtlStat == 'G013_50')}"><button type="button" class="btn btn_default btn_sm" th:attr="${exchangeDtl.ordDtlNo}" onclick="fnGoToDeliveryTrack(this);"><span>배송조회</span></button></p>
+										</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_20'}"><p>교환 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>
+									<!-- 회수요청 -->
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_30'}"><p>고객님이 요청하신 회수지로 상품을 회수 중에 있습니다.</p></div>
+									<!-- 교환상품검수중 -->
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_31' and exchangeDtl.chgGb == 'G680_40'}"><p>고객님이 교환하신 상품을 검수 중에 있습니다.</p></div>
+									<!-- 교환완료 -->
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_40' and (exchangeDtl.chgOrdDtlStat == 'G013_60' or exchangeDtl.chgOrdDtlStat == 'G013_70')}"><p>반품이 완료되었습니다.</p></div>
+									<!-- 교환철회 -->
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_49'}"><p>요청하신 교환을 취소하였습니다.</p></div>
+								</div>
+							</th:block>
+							<!-- //주문상품 -->
+						</div>
+					</div>
+					<h4 class="subH3">상세 정보</h4>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="210">
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>교환접수 일자</th>
+									<td th:text="${oneData.chgDt}"></td>
+								</tr>
+								<tr>
+									<th>교환완료 일자</th>
+									<td th:if="${oneData.chgStat == 'G685_40' && (oneData.ordDtlStat == 'G013_60' or oneData.ordDtlStat == 'G013_70')}" th:text="${oneData.completeDt}"></td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h4 class="subH3">교환 상품 배송지</h4>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="210">
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>
+										배송지 정보
+									</th>
+									<td>
+										<div class="block_line">
+											<ul>
+												<li>
+													<span id="recipNm" th:text="${oneData.recipNm}"></span>
+												</li>
+												<li>
+													<span id="recipPhnno" th:text="${oneData.recipPhnno}"></span>
+												</li>
+												<li>
+													<span id="recipAddr" th:text="|${oneData.recipBaseAddr} ${oneData.recipDtlAddr}|"></span>
+													<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35'}" onclick="fnChangeAddr('recip');"><span>배송지 변경</span></button>
+												</li>
+												<li>
+													배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${oneData.delvMemo}"></span>
+													<button type="button" class="btn_underline" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35'}" onclick="fnChangeMemo('recip')"><span>변경하기</span></button>
+												</li>
+											</ul>
+										</div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<th:block th:if="${oneData.wdGb == 'W'}">
+						<h4 class="subH3">교환 회수지 주소</h4>
+						<div class="tbl type1">
+							<table>
+								<colgroup>
+									<col width="210">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>회수 진행 여부</th>
+										<td>회수요청</td>
+									</tr>
+									<tr>
+										<th>회수지 정보</th>
+										<td>
+											<div class="block_line">
+												<ul>
+													<li>
+														<span id="chgerNm" th:text="${oneData.chgerNm}"></span>
+													</li>
+													<li>
+														<span id="chgerPhnno" th:text="${oneData.chgerPhnno}"></span>
+													</li>
+													<li>
+														<span id="chgerAddr" th:text="|${oneData.chgerBaseAddr} ${oneData.chgerDtlAddr}|"></span>
+														<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" onclick="fnChangeAddr('chger');"><span>회수지 변경</span></button>
+													</li>
+													<li>
+														배송요청 사항&nbsp;:&nbsp;<span id="chgerRtnMemo" th:text="${oneData.chgerRtnMemo}"></span>
+														<button type="button" class="btn_underline" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" onclick="fnChangeMemo('chger');"><span>변경하기</span></button>
+													</li>
+												</ul>
+											</div>
+										</td>
+									</tr>
+									<tr th:if="${not #strings.isEmpty(oneData.wdInvoiceNo) and not #strings.isEmpty(oneData.shipCompNm)}">
+										<th>회수 정보</th>
+										<td>
+											<th:block th:text="|${oneData.shipCompNm} / ${oneData.wdInvoiceNo}|"></th:block>
+											<button type="button" class="btn btn_default btn_sm" onclick="fnGoToWithdrawDelivery()"><span>회수조회</span></button>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+					</th:block>
+					<th:block th:if="${oneData.addPayCost > 0}">
+						<h4 class="subH3">결제정보</h4>
+						<div class="tbl type6">
+							<table>
+								<colgroup>
+									<col width="50%">
+									<col width="50%">
+								</colgroup>
+								<tbody>
+									<tr>
+										<td>
+											<dl>
+												<div>
+													<dt>배송비</dt>
+													<dd>
+														<div class="price">
+															<span class="order_total_price"><em th:text="${#numbers.formatInteger(oneData.addPayCost, 1, 'COMMA')}"></em>원</span>
+														</div>
+													</dd>
+												</div>
+	<!--											<div class="include_item"> &lt;!&ndash; 할인항목 표기 class명 include_item &ndash;&gt;-->
+	<!--												<dt>제휴할인</dt>-->
+	<!--												<dd><em>-123,456,789</em>원</dd>-->
+	<!--											</div>-->
+											</dl>
+										</td>
+										<td>
+											<dl>
+												<div>
+													<dt>결제 금액</dt>
+													<dd>
+														<div class="price">
+															<span class="pay_total_price"><em th:text="${#numbers.formatInteger(oneData.addPayCost, 1, 'COMMA')}"></em>원</span>
+														</div>
+													</dd>
+												</div>
+												<div>
+													<dt class="sr-only">결제방법</dt>
+													<dd th:if="${oneData.payMeans == 'G014_30'}" th:text="|${oneData.payMeansNm}(${oneData.cardNm}) / ${oneData.cardMips}|"></dd>
+													<dd th:if="${oneData.payMeans == 'G014_60'}" th:text="${oneData.payMeansNm}"></dd>
+												</div>
+												<div th:if="${oneData.payMeans == 'G014_30'}">
+													<dt class="sr-only">영수증 확인</dt>
+													<dd>
+														<button type="button" class="btn btn_default btn_sm" onclick="fnReceipt('card')"><span>신용카드 전표</span></button>
+													</dd>
+												</div>
+											</dl>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+							<p class="t_help">※ NPAY등의 대체결제수단으로 결제 시 해당 결제 플랫폼에서 영수증 확인이 가능합니다.</p>
+						</div>
+					</th:block>
+					<div class="btn_footer_area">
+						<button type="button" class="btn btn_dark btn_md" onclick="fnGoToNoMemberCreList();"><span>확인</span></button>
+					</div>
+				</div>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let addrGb = '';
+	let memoGb = '';
+	var isLogin = [[${isLogin}]];
+	let oneData = [[${oneData}]];
+	let ordNo = oneData.ordNo;
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+
+	// 추가배송비 전표 데이터 설정
+	let paymentInfo = {};
+	paymentInfo.pgTid = oneData.pgTid;
+	let orderAmtInfo = {};
+	orderAmtInfo.realOrdAmt = oneData.addPayCost;
+	orderAmtInfo.realDelvAmt = 0;
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetNoMemberLnbList(2);
+		
+		// 마이페이지 location 설정
+		fnSetNoMemberLocation('취소/반품/교환 내역', '교환 상세');
+	});
+
+	// 배송메모 및 반품메모 변경 처리
+	var fnChangeMemo = function(param) {
+		memoGb = param;
+		fnChangeDeliveryMemo();
+	}
+
+	// 배송지 및 교환지 변경 처리
+	var fnChangeAddr = function(param) {
+		addrGb = param;
+		fnChangeDeliveryAddr();
+	}
+
+	// 배송지 및 회수지 정보 설정
+	var delvAddrSet = function(delvObj) {
+		let url = '';
+		let ordChgSq = oneData.ordChgSq;
+		let delvAddrSq = oneData.delvAddrSq;
+		let recipNm = delvObj.recipNm;
+		let recipPhnno = delvObj.recipPhnno;
+		let recipZipcode = delvObj.recipZipcode;
+		let recipBaseAddr = delvObj.recipBaseAddr;
+		let recipDtlAddr = delvObj.recipDtlAddr;
+		let delvMemo = delvObj.delvMemo;
+		let recipAddr = recipBaseAddr + ' ' + recipDtlAddr;
+
+		let data = {};
+
+		if (addrGb == 'chger') {
+			url = '/noMember/change/chger/addr';
+			data.ordChgSq = ordChgSq;
+			data.chgerNm = recipNm;
+			data.chgerPhnno = recipPhnno;
+			data.chgerZipcode = recipZipcode;
+			data.chgerBaseAddr = recipBaseAddr;
+			data.chgerDtlAddr = recipDtlAddr;
+			data.chgerRtnMemo = delvMemo;
+		} else {
+			url = '/noMember/change/delvery/addr';
+			data.delvAddrSq = delvAddrSq;
+			data.recipNm = recipNm;
+			data.recipPhnno = recipPhnno;
+			data.recipZipcode = recipZipcode;
+			data.recipBaseAddr = recipBaseAddr;
+			data.recipDtlAddr = recipDtlAddr;
+			data.delvMemo = delvMemo;
+		}
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+			if (result.status == '200') {
+				if (addrGb == 'chger') {
+					$('#chgerNm').text(recipNm);
+					$('#chgerPhnno').text(recipPhnno);
+					$('#chgerAddr').text(recipAddr);
+					$('#chgerRtnMemo').text(delvMemo);
+				} else {
+					$('#recipNm').text(recipNm);
+					$('#recipPhnno').text(recipPhnno);
+					$('#recipAddr').text(recipAddr);
+					$('#delvMemo').text(delvMemo);
+				}
+			}
+		});
+	}
+
+	// 배송메모 설정
+	var delvMemoSet = function(delvMemoObj) {
+		let url = '';
+		let ordChgSq = oneData.ordChgSq;
+		let delvAddrSq = oneData.delvAddrSq;
+		let delvMemo = delvMemoObj.delvMemo;
+
+		let data = {};
+
+		if (memoGb == 'chger') {
+			url = '/noMember/change/chger/rtn/memo';
+			data.ordChgSq = ordChgSq;
+			data.chgerRtnMemo = delvMemo;
+		} else {
+			url = '/noMember/change/delvery/memo';
+			data.delvAddrSq = delvAddrSq;
+			data.delvMemo = delvMemo;
+		}
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			if (result.status == '200') {
+				if (memoGb == 'chger') {
+					$("#chgerRtnMemo").text(delvMemo);
+				} else {
+					$("#delvMemo").text(delvMemo);
+				}
+			}
+		});
+	}
+
+	var fnGoToWithdrawDelivery = function(param) {
+		// TODO
+		// 회수조회 페이지 이동
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 26 - 20
src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreListFormWeb.html

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="web/common/layout/MypageLayoutWeb">
+	layout:decorator="web/common/layout/NoMemberLayoutWeb">
 <!--
  *******************************************************************************
  * @source  : NoMemberCreListFormWeb.html
@@ -166,17 +166,23 @@
 					<input type="hidden" name="ordNm" th:value="${ordNm}" />
 					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
 				</form>
-				<form id="exchangeForm" name="exchangeForm" action="#" th:action="@{'/noMember/cre/exchange/detail/form'}" th:method="post">
+				<form id="exchangeDetailForm" name="exchangeDetailForm" action="#" th:action="@{'/noMember/cre/exchange/detail/form'}" th:method="post">
 					<input type="hidden" name="ordChgSq"/>
-					<input type="hidden" name="ordNo"/>
+					<input type="hidden" name="ordNo" th:value="${ordNo}" />
+					<input type="hidden" name="ordNm" th:value="${ordNm}" />
+					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
 				</form>
-				<form id="returnForm" name="returnForm" action="#" th:action="@{'/noMember/cre/return/detail/form'}" th:method="post">
+				<form id="returnDetailForm" name="returnDetailForm" action="#" th:action="@{'/noMember/cre/return/detail/form'}" th:method="post">
 					<input type="hidden" name="ordChgSq"/>
-					<input type="hidden" name="ordNo"/>
+					<input type="hidden" name="ordNo" th:value="${ordNo}" />
+					<input type="hidden" name="ordNm" th:value="${ordNm}" />
+					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
 				</form>
-				<form id="cancelForm" name="cancelForm" th:action="@{'/noMember/cre/cancel/detail/form'}" th:method="post">
+				<form id="cancelDetailForm" name="cancelDetailForm" th:action="@{'/noMember/cre/cancel/detail/form'}" th:method="post">
 					<input type="hidden" name="ordChgSq"/>
-					<input type="hidden" name="ordNo"/>
+					<input type="hidden" name="ordNo" th:value="${ordNo}" />
+					<input type="hidden" name="ordNm" th:value="${ordNm}" />
+					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
 				</form>
 			</div>
 			<!-- // CONT-BODY -->
@@ -193,7 +199,7 @@
 		fnSetNoMemberLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetNoMemberLocation('취소/반품/교환내역');
+		fnSetNoMemberLocation('취소/반품/교환 내역');
 		
 		// datepicker 설정
 		$('.period_datepicker').datepicker();
@@ -443,7 +449,7 @@
 					tag += '										</div>\n';
 					tag += '										<div class="button_box">\n';
 					if (cre.chgStat == 'G685_20' || cre.chgStat == 'G685_21' || cre.chgStat == 'G685_50' || cre.chgStat == 'G685_51') {
-						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" cancelGb="' + cre.chgGb + '" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>\n';
+						//tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" cancelGb="' + cre.chgGb + '" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>\n';
 					}
 					if (cre.chgStat == 'G685_21' || cre.chgStat == 'G685_51' || cre.chgStat == 'G685_32') {
 						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>\n';
@@ -545,20 +551,20 @@
 	var fnGoToCreDetail = function(param) {
 		let ordChgSq = $(param).attr('ordChgSq');
 		let chgGb = $(param).attr('chgGb');
-		let ordNo = $(param).attr('ordNo');
-		
+		//let ordNo = $(param).attr('ordNo');
+
 		if (chgGb == 'G680_20') {
-			$('#cancelForm input[name=ordChgSq]').val(ordChgSq);
-			$('#cancelForm input[name=ordNo]').val(ordNo);
-			document.cancelForm.submit();
+			$('#cancelDetailForm input[name=ordChgSq]').val(ordChgSq);
+			//$('#cancelDetailForm input[name=ordNo]').val(ordNo);
+			document.cancelDetailForm.submit();
 		} else if (chgGb == 'G680_30') {
-			$('#returnForm input[name=ordChgSq]').val(ordChgSq);
-			$('#returnForm input[name=ordNo]').val(ordNo);
-			document.returnForm.submit();
+			$('#returnDetailForm input[name=ordChgSq]').val(ordChgSq);
+			//$('#returnDetailForm input[name=ordNo]').val(ordNo);
+			document.returnDetailForm.submit();
 		} else if (chgGb == 'G680_40') {
-			$('#exchangeForm input[name=ordChgSq]').val(ordChgSq);
-			$('#exchangeForm input[name=ordNo]').val(ordNo);
-			document.exchangeForm.submit();
+			$('#exchangeDetailForm input[name=ordChgSq]').val(ordChgSq);
+			//$('#exchangeDetailForm input[name=ordNo]').val(ordNo);
+			document.exchangeDetailForm.submit();
 		}
 	}
 	

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

@@ -0,0 +1,345 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/NoMemberLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NoMemberCreReturnDetailFormWeb.html
+ * @desc    : 비회원 > 취소/반품/교환내역 > 반품상세 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content myOrderView"> <!-- 페이지특정 클래스 = myOrderView -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+					<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
+			</div>
+			<div class="cont">
+				<div class="sec_head">
+					<h3 class="subH1">반품상세</h3>
+					<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${oneData.ordNo}"></em></span>
+				</div>
+				<div class="sec_body">
+					<div class="part_goods">
+						<div class="goods_head">
+							<p>주문일 <span th:text="${oneData.ordDt}"></span></p>
+							<a href="javascript:void(0)" th:if="${oneData.chgStat == 'G685_50' or oneData.chgStat == 'G685_51'}" th:attr="ordNo=${oneData.ordNo}, ordChgSq=${oneData.ordChgSq}, cancelGb=${oneData.chgGb}, noMember=noMember" onclick="fnCreCancel(this);">전체신청취소</a>
+						</div>
+						<div class="goods_cont">
+							<!-- 주문상품 -->
+							<th:block th:if="${returnDetailList.returnDetailList}" th:each="returnDtl, status : ${returnDetailList.returnDetailList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+								<div class="goods_info">
+									<div class="order_desc">
+										<div class="goods_box">
+											<div class="gd_item">
+												<a href="javascript:void(0)" th:attr="goodsCd=${returnDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+													<span class="thumb">
+														<img th:src="${imageUrl + '/' + returnDtl.sysImgNm}" width="100%" alt="">
+													</span>
+													<p>
+														<span class="brand" th:text="${returnDtl.brandNm}"></span>
+														<span class="tag primary" th:if="${returnDtl.shotDelvYn == 'Y'}">총알배송</span>
+														<span class="tag" th:if="${returnDtl.shotDelvYn == 'N' and returnDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+														<span class="tag" th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</span>
+													</p>
+													<p>
+														<span class="name" th:text="${returnDtl.goodsNm}"></span>
+													</p>
+												</a>
+											</div>
+											<div class="gd_opt">
+												<div class="option_wrap">
+													<span class="title sr-only">주문 옵션</span>
+													<span class="option" th:if="${returnDtl.goodsType == 'G056_S'}" th:each="option, status : ${returnDtl.colorNmArr}" th:text="|${returnDtl.itemNmArr[status.index]} / ${option} / ${returnDtl.optCd2Arr[status.index]}|"></span>
+													<span class="option" th:unless="${returnDtl.goodsType == 'G056_S'}" th:text="|${returnDtl.colorNm} / ${returnDtl.optCd2}|"></span>
+												</div>
+											</div>
+											<div class="gd_calc">
+												<p>
+													<span class="count"><em th:text="${returnDtl.chgQty}"></em>개</span>
+												</p>
+<!--												<p>-->
+<!--													<span class="price_org" th:if="${returnDtl.priceOrg > returnDtl.priceSale}"><em th:text="${#numbers.formatInteger(returnDtl.priceOrg, 1, 'COMMA')}"></em>원</span>-->
+<!--													<span class="price_sale"><em th:text="${#numbers.formatInteger(returnDtl.priceSale, 1, 'COMMA')}"></em>원</span>-->
+<!--												</p>-->
+											</div>
+										</div>
+										<div class="status_box">
+											<p>
+												<th:block th:if="${returnDtl.chgStat == 'G685_33'}" th:text="|환불진행중|"></th:block>
+												<th:block th:if="${returnDtl.chgStat == 'G685_69'}" th:text="|접수취소|"></th:block>
+												<th:block th:unless="${returnDtl.chgStat == 'G685_33' or returnDtl.chgStat == 'G685_69'}" th:text="${returnDtl.chgStatNm}"></th:block>
+												<span class="date" th:text="${returnDtl.chgDate}"></span>
+												<span class="time" th:text="${returnDtl.chgTime}"></span>
+											</p>
+										</div>
+										<div class="button_box">
+<!--											<p th:if="${returnDtl.chgStat == 'G685_50' or returnDtl.chgStat == 'G685_51'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${returnDtl.ordNo}, ordChgSq=${returnDtl.ordChgSq}, cancelGb=${returnDtl.chgGb}" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>-->
+											<p th:if="${returnDtl.chgStat == 'G685_32' or returnDtl.chgStat == 'G685_51'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${returnDtl.ordNo}, ordChgSq=${returnDtl.ordChgSq}" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>
+										</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_50'}"><p>반품 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>
+									<!-- 회수요청 -->
+									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_30'}"><p>고객님이 요청하신 회수지로 상품을 회수 중에 있습니다.</p></div>
+									<!-- 반품상품검수중 -->
+									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_31' and returnDtl.chgGb == 'G680_30'}"><p>고객님이 반품하신 상품을 검수 중에 있습니다.</p></div>
+									<!-- 반품진행중 -->
+									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_33'}"><p>환불을 진행하고 있습니다(영업일 최대 3일 내 환불 예정)</p></div>
+									<!-- 반품완료 -->
+									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_60'}"><p>반품이 완료되었습니다.</p></div>
+									<!-- 반품철회 -->
+									<div class="order_text" th:if="${returnDtl.chgStat == 'G685_69'}"><p>요청하신 반품을 취소하였습니다.</p></div>
+								</div>
+							</th:block>
+							<!-- //주문상품 -->
+						</div>
+					</div>
+					<h4 class="subH3">상세 정보</h4>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="210">
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>반품접수 일자</th>
+									<td th:text="${oneData.chgDt}"></td>
+								</tr>
+								<tr>
+									<th>반품완료 일자</th>
+									<td th:text="${oneData.completeDt}"></td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<th:block th:if="${oneData.wdGb == 'W'}">
+						<h4 class="subH3">반품 회수지 주소</h4>
+						<div class="tbl type1">
+							<table>
+								<colgroup>
+									<col width="210">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>회수 진행 여부</th>
+										<td>회수요청</td>
+									</tr>
+									<tr>
+										<th>회수지 정보</th>
+										<td>
+											<div class="block_line">
+												<ul>
+													<li>
+														<span id="chgerNm" th:text="${oneData.chgerNm}"></span>
+													</li>
+													<li>
+														<span id="chgerPhnno" th:text="${oneData.chgerPhnno}"></span>
+													</li>
+													<li>
+														<span id="chgerAddr" th:text="|${oneData.chgerBaseAddr} ${oneData.chgerDtlAddr}|"></span>
+														<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgStat == 'G685_50' or oneData.chgStat == 'G685_51'}" onclick="fnChangeDeliveryAddr();"><span>회수지 변경</span></button>
+													</li>
+													<li>
+														배송요청 사항&nbsp;:&nbsp;<span id="chgerRtnMemo" th:text="${oneData.chgerRtnMemo}"></span>
+														<button type="button" class="btn_underline" th:if="${oneData.chgStat == 'G685_50' or oneData.chgStat == 'G685_51'}" onclick="fnChangeDeliveryMemo(this)"><span>변경하기</span></button>
+													</li>
+												</ul>
+											</div>
+										</td>
+									</tr>
+									<tr th:if="${not #strings.isEmpty(oneData.wdInvoiceNo) and not #strings.isEmpty(oneData.shipCompNm)}">
+										<th>회수 정보</th>
+										<td>
+											<th:block th:text="|${oneData.shipCompNm} / ${oneData.wdInvoiceNo}|"></th:block>
+											<button type="button" class="btn btn_default btn_sm" onclick="fnGoToWithdrawDelivery()"><span>회수조회</span></button>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+					</th:block>
+					<h4 class="subH3">환불정보</h4>
+					<div class="tbl type6">
+						<table>
+							<colgroup>
+								<col width="50%">
+								<col width="50%">
+							</colgroup>
+							<tbody>
+								<tr>
+									<td>
+										<dl>
+											<div>
+												<dt>환불 예정 금액</dt>
+												<dd>
+													<div class="price">
+														<span class="return_total_price"><em th:text="${#numbers.formatInteger(oneData.refundAmt + oneData.rfPntAmt + oneData.rfGfcdUseAmt, 1, 'COMMA')}"></em>원</span>
+													</div>
+												</dd>
+											</div>
+											<div class="include_item"> <!-- 할인항목 표기 class명 include_item -->
+												<dt>상품 취소 금액</dt>
+												<dd><em th:text="${#numbers.formatInteger(oneData.rfCnclAmt, 1, 'COMMA')}"></em>원</dd>
+											</div>
+											<div class="include_item">
+												<dt>배송비</dt>
+												<dd><em th:text="${#numbers.formatInteger(oneData.rfDeliveryFee, 1, 'COMMA')}"></em>원</dd>
+											</div>
+											<div class="include_item">
+												<dt>할인 금액 차감</dt>
+												<dd><em th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></em>원</dd>
+											</div>
+										</dl>
+									</td>
+									<td>
+										<dl>
+											<div>
+												<dt>결제 금액 환불</dt>
+												<dd>
+													<em th:text="${#numbers.formatInteger(oneData.refundAmt, 1, 'COMMA')}"></em>원
+												</dd>
+											</div>
+											<div>
+												<dt>포인트 환불</dt>
+												<dd>
+													<em th:text="${#numbers.formatInteger(oneData.rfPntAmt, 1, 'COMMA')}"></em>P
+												</dd>
+											</div>
+											<div>
+												<dt>상품권 환불</dt>
+												<dd>
+													<em  th:text="${#numbers.formatInteger(oneData.rfGfcdUseAmt, 1, 'COMMA')}"></em>원
+												</dd>
+											</div>
+											<div>
+												<dt>환불 수단</dt>
+												<dd th:if="${oneData.pgGb == 'KCP'}" th:text="${oneData.payMeansNm}"></dd>
+												<dd th:if="${oneData.pgGb == 'NAVER'}">네이버페이</dd>
+												<dd th:if="${oneData.pgGb == 'KAKAO'}">카카오페이</dd>
+												<dd th:if="${oneData.pgGb == 'PAYCO'}">PAYCO</dd>
+											</div>
+											<div th:if="${refundYn == 'Y' and oneData.pgGb == 'KCP' and oneData.payMeans == 'G014_30'}">
+												<dt class="sr-only">영수증 확인</dt>
+												<dd><button type="button" class="btn btn_default btn_sm" th:attr="ordChgSq=${oneData.ordChgSq}, refundYn=${refundYn}" onclick="fnReceipt('cancel')"><span>취소 전표 보기</span></button></dd>
+											</div>
+										</dl>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<div class="txt_info">
+						<ul>
+							<li>
+								카드사로 결제 취소 요청이 전달된 후 환불까지는 평일 기준 3 ~7일이 소요될 수 있습니다.
+							</li>
+						</ul>
+					</div>
+					<div class="btn_footer_area">
+						<button type="button" class="btn btn_dark btn_md" onclick="fnGoToNoMemberCreList();"><span>확인</span></button>
+					</div>
+				</div>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let oneData = [[${oneData}]];
+	var isLogin = [[${isLogin}]];
+	let ordNo = oneData.ordNo;
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+	let jsonObj = {};
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetNoMemberLnbList(2);
+		
+		// 마이페이지 location 설정
+		fnSetNoMemberLocation('취소/반품/교환 내역', '반품 상세');
+	});
+
+	var fnGoToWithdrawDelivery = function(param) {
+		// TODO
+		// 회수조회 페이지 이동
+	}
+
+	// 회수지 정보 설정
+	var delvAddrSet = function(delvObj) {
+		let ordChgSq = oneData.ordChgSq;
+		let chgerNm = delvObj.recipNm;
+		let chgerPhnno = delvObj.recipPhnno;
+		let chgerZipcode = delvObj.recipZipcode;
+		let chgerBaseAddr = delvObj.recipBaseAddr;
+		let chgerDtlAddr = delvObj.recipDtlAddr;
+		let chgerRtnMemo = delvObj.delvMemo;
+		let chgerAddr = chgerBaseAddr + ' ' + chgerDtlAddr;
+
+		let data = {};
+		data.ordChgSq = ordChgSq;
+		data.chgerNm = chgerNm;
+		data.chgerPhnno = chgerPhnno;
+		data.chgerZipcode = chgerZipcode;
+		data.chgerBaseAddr = chgerBaseAddr;
+		data.chgerDtlAddr = chgerDtlAddr;
+		data.chgerRtnMemo = chgerRtnMemo;
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit('/noMember/change/chger/addr', jsonData, function(result) {
+			if (result.status == '200') {
+				$('#chgerNm').text(chgerNm);
+				$('#chgerPhnno').text(chgerPhnno);
+				$('#chgerAddr').text(chgerAddr);
+				$('#chgerRtnMemo').text(chgerRtnMemo);
+			}
+		});
+	}
+	
+	// 배송메모 설정
+	var delvMemoSet = function(delvMemoObj) {
+		let ordChgSq = oneData.ordChgSq;
+		let delvMemo = delvMemoObj.delvMemo;
+
+		let data = {};
+		data.ordChgSq = ordChgSq;
+		data.chgerRtnMemo = delvMemo;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit('/noMember/change/chger/rtn/memo', jsonData, function(result) {
+			if (result.status == '200') {
+				$("#chgerRtnMemo").text(delvMemo);
+			}
+		});
+		
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -75,7 +75,7 @@
 													<span class="count"><em th:text="${exchange.ordQty - exchange.cnclRtnQty}"></em>개</span>
 												</p>
 												<p>
-													<span class="price_org" th:if="${(exchange.ordAmt - exchange.cnclRtnAmt - exchange.cpn1DcAmt) > (exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(exchange.ordAmt - exchange.cnclRtnAmt - exchange.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+													<span class="price_org" th:if="${(exchange.ordAmt - exchange.cnclRtnAmt) > (exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(exchange.ordAmt - exchange.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 													<span class="price_sale"><em th:text="${#numbers.formatInteger(exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 												</p>
 											</div>

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

@@ -85,7 +85,7 @@
 															<span class="count"><em th:text="${ordDtl.ordQty - ordDtl.cnclRtnQty}"></em>개</span>
 														</p>
 														<p>
-															<span class="price_org" th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+															<span class="price_org" th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 															<span class="price_sale"><em th:text="${#numbers.formatInteger(ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 														</p>
 													</div>
@@ -263,7 +263,7 @@
 													<dt>총 주문금액 (상품금액+배송비+추가비용)</dt>
 													<dd>
 														<div class="price">
-															<span class="order_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.ordAmt - orderAmtInfo.cnclRtnAmt + orderAmtInfo.realDelvAmt, 1, 'COMMA')}"></em>원</span>
+															<span class="order_total_price"><em th:text="${#numbers.formatInteger((orderAmtInfo.ordAmt + orderAmtInfo.cpn1DcAmt) - orderAmtInfo.cnclRtnAmt + orderAmtInfo.realDelvAmt, 1, 'COMMA')}"></em>원</span>
 														</div>
 													</dd>
 												</div>
@@ -371,7 +371,7 @@
 			
 			$.ajax( {
 				type		: "POST",
-				url 		: '/mypage/refund/account/register/popup/form',
+				url 		: '/noMember/refund/account/register/popup/form',
 				data		: jsonData,
 				dataType 	: 'html',
 				beforeSend : function(xhr, settings) {

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

@@ -391,8 +391,8 @@
 					tag += '													<span class="count"><em>' + (ordDtl.ordQty - ordDtl.cnclRtnQty) + '</em>개</span>\n';
 					tag += '												</p>\n';
 					tag += '												<p>\n';
-					if ((ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)) {
-						tag += '													<span class="price_org"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt).addComma() + '</em>원</span>\n';
+					if ((ordDtl.ordAmt - ordDtl.cnclRtnAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)) {
+						tag += '													<span class="price_org"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt).addComma() + '</em>원</span>\n';
 					}
 					tag += '													<span class="price_sale"><em>' + (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt).addComma() + '</em>원</span>\n';
 					tag += '												</p>\n';

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

@@ -78,7 +78,7 @@
 													<span class="count"><em th:text="${return.ordQty - return.cnclRtnQty}"></em>개</span>
 												</p>
 												<p>
-													<span class="price_org" th:if="${(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+													<span class="price_org" th:if="${(return.ordAmt - return.cnclRtnAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
 													<span class="price_sale"><em th:text="${#numbers.formatInteger(return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 												</p>
 											</div>
@@ -465,7 +465,7 @@
 
 				document.addPaymentForm.submit();
 			} else {
-				fnGoToNoMemberCreList()
+				fnGoToNoMemberCreList();
 			}
 		}, true);
 	}
@@ -500,6 +500,7 @@
 			data.ordNm = oneData.ordNm;
 			data.ordPhnno = oneData.ordPhnno;
 			data.chgGb = 'G680_30';
+			data.delvFeeCd = oneData.delvFeeCd;
 			data.ordDtlNoArr = ordDtlNoArr;
 			data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
 			

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

@@ -2166,7 +2166,7 @@ var custCpnSumAmtCal = function() {
 		cpnDcSumAmt			= cpnDcSumAmt + (goodsCpnDcAmt + cartCpnDcAmt);
 		prePntDcSumAmt		= prePntDcSumAmt + prePntDcAmt1;
 		
-		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
+		var ordAmt			= ((orgCurrPrice - cpn1DcAmt) + optAddPrice) * goodsQty;
 		ordSumAmt			= ordSumAmt + ordAmt;
 		
 		// 선포인트사용여부 

+ 8 - 5
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -249,14 +249,14 @@
 								<li>주문 취소/반품 건에 대한 결제금액은 등급산정에서 제외됩니다.</li>
 								<li>구매금액은 구매확정건에 대한 순수주문금액(할인쿠폰, 스타일포인트, 배송비, 취소/반품 내역을 제외한 실결제금액)을 의미합니다.</li>
 								<li>신규회원 한정 할인쿠폰을 제외한 회원등급 쿠폰은 매월 1일 다운로드 가능합니다.</li>
-								<li>입점상품은 적용 불가 합니다.</li>
+								<li>회원등급 쿠폰은 입점상품에 적용이 불가합니다.</li>
 							</ul>
 							<p class="tit">생일쿠폰 안내사항</p>
 							<ul>
 								<li>등급 별 생일 쿠폰은 생일 당월 1일부터 말일까지 다운로드 가능합니다. (생일 당월의 기준은 회원정보 내 생년월일 정보를 기준으로 합니다.)</li>
 								<li>쿠폰이 지급되는 당월 말일까지 사용 가능합니다.</li>
 								<li>쿠폰 사용가능기간 내 미사용 시 소멸됩니다.</li>
-								<li>입점상품은 적용 불가 합니다.</li>
+								<li>생일 쿠폰은 입점상품에 적용이 불가합니다.</li>
 							</ul>
 						</div>
 					</div>
@@ -267,8 +267,8 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
- 	let exptCustGradeMap = [[${exptCustGradeMap}]]
-	let custGradeNm = [[${customerInfo.custGradeNm}]];
+	let exptCustGradeMap = [[${exptCustGradeMap}]]
+	let isLogin = [[${isLogin}]];
 
  	var fnInit = function () {
 		let expctCustGrade = exptCustGradeMap.expctCustGrade;	// 예상등급
@@ -345,6 +345,7 @@
 
 	// 기존 VIP / 새로운 VIP 구분
 	var fnDisplayVipText = function (expctCustGrade) {
+ 		let custGradeNm = [[${customerInfo.custGradeNm}]];
 		let $etcGrade = $('#etcGrade');
 		let $sameVipGrade = $('#sameVipGrade');
 		let $vipGrade = $('#vipGrade');
@@ -379,7 +380,9 @@
 
 	$(document).ready(function() {
 
-		fnInit();
+		if (isLogin) {
+			fnInit();
+		}
 
 	});
 

+ 13 - 27
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -674,36 +674,22 @@ if(coupon.length>0){
 		html += '					<div>';
 		html += '						<p class="cp_name">'+item.cpnNm+'</p>';
 		html += '						<p class="cp_cont">';
-		if (item.dcWay == '할인율') {
-			html += '							<span> <span><em>'+item.dcPval+'%</em></span>';
-		}else{
-			html += '							<span><em>'+item.dcPval.addComma()+'</em>원</span>'; 
-		}
+		html += '							<span><em>'+item.dcVal+'</em>'+item.dcWay+'</span>';
 		html += '						</p>';
-		html += '						<p class="cp_condition">'+item.buyLimitAmt.addComma()+'원 이상 구매 시 최대 ' +item.maxDcAmt.addComma()+'원 할인';
-
-		if (item.custPubLimitQty != 0) {
-			html += '								<span>1인 최대 '+item.custPubLimitQty+'장</span>';	
-		}
+		html += '						<p class="cp_condition">'+item.useCondition;
+		html += '								<span>'+item.issueCondition+'</span>';	
 		html += '						</p>';
 		html += '					</div>';
-		if(typeof item.couponStat != 'undefined'){
-			if (item.couponStat == '쿠폰받기') {
-				html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
-				html += '						<span>쿠폰받기</span>';								/* 받기완료  */
-				html += '					</button>';			
-			}else{
-				html += '					<button type="button"';
-				html += '						class="btn btn_dark btn_block btn_coupon_done" disabled>';  
-				html += '						<span>받기완료</span>';								
-				html += '					</button>';			
-			}
-		}else{
-			html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
+		if (item.couponStat == '쿠폰받기') {
+			html += '					<button type="button" id="coupon_'+item.cpnId+'" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
 			html += '						<span>쿠폰받기</span>';								/* 받기완료  */
-			html += '					</button>';		
+			html += '					</button>';			
+		}else{
+			html += '					<button type="button"';
+			html += '						class="btn btn_dark btn_block btn_coupon_done" disabled>';  
+			html += '						<span>받기완료</span>';								
+			html += '					</button>';			
 		}
-		
 		html += '				</div>';
 		html += '				<button type="button" class="btn_underline"	id="btn_couponInfo_pop" onclick="useInfoCoupon('+item.cpnId+')">';
 		html += '					<span>사용안내</span>';
@@ -771,8 +757,8 @@ var fnPlanCouponDown = function(obj){
 
 // 쿠폰다운로드 콜백
 var fnPlanCouponCallBack = function(result){
-	
-	// 화면 전환 필요		
+	$('#coupon_'+ result.cpnId).html('<span>받기완료</span>');
+	$('#coupon_'+ result.cpnId).attr('disabled', true);
 }
 
 // 설문조사 참여 버튼 클릭

+ 4 - 2
src/main/webapp/WEB-INF/views/web/popup/RefundAccountAddPopupFormWeb.html

@@ -63,8 +63,10 @@
 						<td>
 							<div class="form_field">
 								<div class="input_wrap">
-									<input type="text" class="form_control" name="accountNo" value="" data-valid-type="numeric" placeholder="계좌번호를 입력해주세요.">
-									<button type="button" id="confirmAccount" class="btn btn_dark btn_sm"><span>계좌인증</span></button>
+									<input type="text" id="accountNo" name="accountNo" class="form_control" maxlength="20" data-valid-type="numeric"  placeholder="계좌번호를 입력해 주세요"/>
+									<button type="button" id="btnAccountCheck" class="btn btn_dark">
+										<span>계좌인증</span>
+									</button>
 								</div>
 							</div>
 						</td>

+ 16 - 3
src/main/webapp/biz/mypage.js

@@ -386,16 +386,25 @@ var fnCreCancel = function(param) {
 	let ordNo = $(param).attr('ordNo');
 	let ordChgSq = $(param).attr('ordChgSq');
 	let cancelGb = $(param).attr('cancelGb');
+	let noMember = $(param).attr('noMember');
 	let url;
 	let msg;
 
 	if (cancelGb == 'G680_30') {
 		// 반품신청철회
-		url = '/mypage/return/cancel';
+		if (noMember == 'noMember') {
+			url = '/noMember/return/cancel';
+		} else {
+			url = '/mypage/return/cancel';
+		}
 		msg = '반품 신청을 취소하시겠습니까?';
 	} else if (cancelGb == 'G680_40') {
 		// 교환신청철회
-		url = '/mypage/exchange/cancel';
+		if (noMember == 'noMember') {
+			url = '/noMember/exchange/cancel';
+		} else {
+			url = '/mypage/exchange/cancel';
+		}
 		msg = '교환 신청을 취소하시겠습니까?';
 	}
 
@@ -410,7 +419,11 @@ var fnCreCancel = function(param) {
 		sureBtnText: "확인",
 		sureBtnClick: function() {
 			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
+				if (noMember == 'noMember') {
+					fnGoToNoMemberCreList();
+				} else {
+					cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
+				}
 			});
 		}
 	});

+ 0 - 147
src/main/webapp/ux/plugins/gaga/gaga.summernote.js

@@ -1,147 +0,0 @@
-/*
- * Summernote Java Script written by gagamel.
- *
- * Copyright (c) 2010 gagamel
- * Dual licensed under GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2020-10-29 $
- *
- * 사용 예)
- * 		// HTML 태그는 textarea로 구성
- * 		// id는 gagaSn.summernote 함수 호출 시에 넘겨줘야 한다.
- * 		<textarea class="textareaR4" name="clauseContent" id="clauseContent"></textarea>
- *
- * 		// Import할 자바스크립트 파일
- * 		<script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020102902"></script>
- * 		<script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=2020102902"></script>
- *
- * 		<script type="text/javascript">
- * 			// Get a summernote options
- * 			var snOptions = gagaSn.getToolbarOptions();
- *
- * 			$(document).ready(function() {
- * 				// Create a summernote
- * 				gagaSn.createSummernote(snOptions, '#clauseContent');
- * 			});
- * 		</script>
- */
-
-var gagaSn = {
-	/**
-	 * Get a Toolbar options
-	 * @param type - 유형(default, media: 사진/동영상 업로드)
-	 */
-	getToolbarOptions : function(type) {
-		if (typeof(type) == 'undefined' || type == 'default') {
-			return [
-				['style', ['style']],
-				//['Font Style', ['fontname']], <!-- 210309 삭제 -->
-				['fontsize', ['fontsize']],
-				['height', ['height']],
-				['style', ['bold', 'italic', 'underline','clear']],
-				['font', ['strikethrough', 'superscript', 'subscript']],
-				['color', ['color']],
-				['para', ['ul', 'ol', 'paragraph']],
-				['Insert', ['table']],
-				['Insert', ['link']],
-				['misc', [ 'print']], //  프린트
-				['code', ['fullscreen', 'codeview', 'help']]
-			];
-		} else if (type == 'media') {
-			return [
-				['style', ['style']],
-				//['Font Style', ['fontname']], <!-- 210309 삭제 -->
-				['fontsize', ['fontsize']],
-				['height', ['height']],
-				['style', ['bold', 'italic', 'underline','clear']],
-				['font', ['strikethrough', 'superscript', 'subscript']],
-				['color', ['color']],
-				['para', ['ul', 'ol', 'paragraph']],
-				['Insert', ['table']],
-				['Insert', ['link', 'picture', 'video']],
-				['misc', [ 'print']], // 프린트
-				['code', ['fullscreen', 'codeview', 'help']]
-			];
-		}
-	},
-
-	/**
-	 * Create a summernote
-	 * @param toolbarOptions - 툴바옵션
-	 * @param editorId - 에디터 ID
-	 * @param editorHeight - 에디터 height
-	 */
-	createSummernote : function(toolbarOptions, editorId, editorHeight) {
-		if (typeof(editorHeight) == 'undefined') editorHeight = 300;
-		
-		$(editorId).summernote({
-			disableDragAndDrop: true, //drag&drop 사용안함
-			placeholder: '내용을 입력하세요',
-			height: editorHeight, //에디터 기본 높이
-			lang : 'ko-KR', //기본 언어 인코딩
-			//fontNames: ['Malgun Gothic', 'HY견고딕', 'Helvetica', 'Verdana', 'Arial', 'Arial Black'], //폰트 스타일  <!-- 210309 삭제 -->
-			//fontNamesIgnoreCheck: ['Malgun Gothic'], //기본폰트 스타일  <!-- 210309 삭제 -->
-			fontNames: ['Noto Sans kr'], //폰트 스타일  <!-- 210309 수정 -->
-			fontNamesIgnoreCheck: ['Noto Sans kr'], //기본폰트 스타일  <!-- 210309 수정 -->
-			focus: false, //로드시 에디터창에 포커싱
-			fontSizes: ['8','9','10','11','12','13','14','15','16','17','18','19','20','24','30','36'],
-			toolbar: toolbarOptions,
-			callbacks: {
-				onImageUpload: function(files) { // 이미지 업로드
-					for (var i = 0; i < files.length; i++) {
-						uploadImage(files[i], this);
-					}
-				},
-				onPaste: function(e) {
-					var clipboardData = e.originalEvent.clipboardData;
-					if (clipboardData && clipboardData.items && clipboardData.items.length) {
-						var item = clipboardData.items[0];
-						if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
-							e.preventDefault();
-						}
-					}
-				}
-			}
-		});
-	},
-
-	/**
-	 * Set value to summernote
-	 */
-	setContents : function(editorId, content) {
-		var content = content.replaceAll("&lt;", "<").replaceAll("&gt;",">");
-
-		try {
-			$(editorId).summernote('code', content);
-		} catch(e) {
-			// Do nothing
-		}
-	},
-	
-	uploadImage : function(file, editorId) {
-		var formData = new FormData();
-		formData.append("file", file);
-		formData.append("policy", image);
-		
-		$.ajax({
-			data : formData,
-			type : 'POST',
-			url : '/common/file/upload?subDir=/editor',
-			cache : false,
-			contentType : false,
-			enctype : 'multipart/form-data',
-			processData : false,
-			success : function(data) {
-				console.log("================== EDITOR FILE UPLOAD ===================");
-				console.log("viewUrl : " + data.viewUrl);
-				console.log("viewPath : " + data.viewPath);
-				console.log("oldFileNm : " + data.oldFileNm);
-				console.log("newFileNm : " + data.newFileNm);
-				console.log("filePath : " + data.filePath);
-				console.log("================== // EDITOR FILE UPLOAD ===================");
-				$(editorId).summernote('insertImage', data.viewPath);
-			}
-		});
-	}
-
-}

+ 14 - 0
src/main/webapp/ux/style24_link.js

@@ -283,6 +283,20 @@ function cfnAddCart(cartList) {
 						// PC버전에서만 동작해야함(퀵메뉴)
 						if (navigator.userAgent.indexOf('Mobile') == -1) {
 							fnGetCartGoodsList();
+						} else {
+							if($("header #htopSub .button_wrap .store>span")) {
+								// 장바구니 수량 조회
+								$.getJSON('/cart/goods/not/soldout/cnt', function (order, status) {
+									let cartCnt;
+									if (order.totCartCnt > 99) {
+										cartCnt = "99+";
+									} else {
+										cartCnt = order.totCartCnt;
+									}
+									
+									$("header #htopSub .button_wrap .store>span").text(cartCnt);
+								});
+							}
 						}
 						
 						// 장바구니 팝업에서