Browse Source

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

Conflicts:
	src/main/java/com/style24/front/biz/web/TsfOrderController.java
tsit14 5 years ago
parent
commit
5ae193fe3e
100 changed files with 5192 additions and 2059 deletions
  1. 11 2
      src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java
  2. 9 18
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  3. 41 3
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  4. 32 2
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  5. 5 2
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  6. 14 5
      src/main/java/com/style24/front/biz/service/TsfDeliveryService.java
  7. 129 22
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  8. 49 1
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  9. 30 6
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  10. 44 17
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  11. 20 1
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  12. 4 1
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  13. 93 5
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  14. 4 4
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  15. 18 7
      src/main/java/com/style24/front/biz/web/TsfKollusUploadController.java
  16. 55 5
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  17. 8 0
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  18. 13 3
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  19. 4 1
      src/main/java/com/style24/persistence/domain/Cate4Srch.java
  20. 4 0
      src/main/java/com/style24/persistence/domain/Freegift.java
  21. 1 0
      src/main/java/com/style24/persistence/domain/Popup.java
  22. 1 0
      src/main/java/com/style24/persistence/domain/Review.java
  23. 11 2
      src/main/java/com/style24/persistence/domain/SweetTracker.java
  24. 7 0
      src/main/java/com/style24/persistence/domain/searchengine/SearchEngine.java
  25. 7 11
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  26. 12 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml
  27. 86 684
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  28. 1073 13
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  29. 11 5
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  30. 12 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  31. 121 64
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  32. 274 162
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  33. 18 10
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  34. 2 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  35. 2 7
      src/main/resources/config/application-run.yml
  36. 85 0
      src/main/resources/config/application-style.yml
  37. 2 1
      src/main/resources/config/application-tsit.yml
  38. 46 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/GnbSubGoodsMob.html
  39. 1 22
      src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html
  40. 1 1
      src/main/webapp/WEB-INF/views/mob/display/AllBrandFormMob.html
  41. 11 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  42. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html
  43. 191 69
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  44. 28 22
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  45. 2 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  46. 2 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  47. 2 10
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaDetailFormMob.html
  48. 15 8
      src/main/webapp/WEB-INF/views/mob/goods/GoodsShopBenefitFormMob.html
  49. 138 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeCompleteFormMob.html
  50. 293 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeFormMob.html
  51. 3 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html
  52. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  53. 421 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningCustGradeBenefitFormMob.html
  54. 1 1
      src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html
  55. 7 7
      src/main/webapp/WEB-INF/views/mob/planning/PlanningMainFormMob.html
  56. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartDelvFeeSaveGoodsPopupWeb.html
  57. 3 3
      src/main/webapp/WEB-INF/views/web/cart/CartTmtbSalesGoodsPopupWeb.html
  58. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html
  59. 33 16
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  60. 17 8
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  61. 7 1
      src/main/webapp/WEB-INF/views/web/common/layout/MypageLayoutWeb.html
  62. 6 6
      src/main/webapp/WEB-INF/views/web/display/AllBrandFormWeb.html
  63. 207 100
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  64. 231 84
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  65. 238 196
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  66. 12 8
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  67. 142 70
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  68. 11 10
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  69. 6 6
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  70. 19 19
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  71. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  72. 10 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  73. 9 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  74. 8 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html
  75. 6 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsShopBenefitFormWeb.html
  76. 10 10
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreExchangeDetailFormWeb.html
  77. 1 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html
  78. 353 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageDeliveryInfoFormWeb.html
  79. 5 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  80. 5 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  81. 1 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  82. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb_20210315.html
  83. 8 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  84. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  85. 9 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html
  86. 10 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  87. 10 10
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreExchangeDetailFormWeb.html
  88. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderDetailFormWeb.html
  89. 0 6
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderListFormWeb.html
  90. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberReturnFormWeb.html
  91. 5 1
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  92. 8 5
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  93. 76 87
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  94. 4 4
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  95. 69 64
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  96. 28 24
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  97. 110 41
      src/main/webapp/biz/goods.js
  98. 9 1
      src/main/webapp/biz/mypage.js
  99. 7 6
      src/main/webapp/ux/mo/css/layout_m.css
  100. 14 1
      src/main/webapp/ux/mo/css/style24_m.css

+ 11 - 2
src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java

@@ -61,6 +61,15 @@ public interface TsfDeliveryDao {
 	void updateOrdChgSqStat(SweetTracker sweetTracker);		
 	
 
-	int saveTemp(SweetTracker sweetTracker);			
-	
+	int saveTemp(SweetTracker sweetTracker);
+
+	/**
+	 * 스윗트래커 정보 조회
+	 * 
+	 * @param SweetTracker
+	 * @return Collection<SweetTracker>
+	 * @author card007
+	 * @since 2021. 05. 04
+	 */
+	Collection<SweetTracker> getSweetTrackerDeliveryInfo(SweetTracker sweetTracker);
 }

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

@@ -155,6 +155,15 @@ public interface TsfDisplayDao {
 	 */
 	Collection<Filter> getGoodsListCategoryFilterList(SearchEngine searchEngine);
 
+	/**
+	 * 검색키워드를 통한 검색상품리스트 카테고리별 필터 목록
+	 * @param searchEngine - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 3
+	 */
+	Collection<Filter> getSearchGoodsListCategoryFilterList(SearchEngine searchEngine);
+
 	/**
 	 * 상품카테고리 필터 목록
 	 * @param
@@ -173,24 +182,6 @@ public interface TsfDisplayDao {
 	 */
 	Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch);
 
-	/**
-	 * 카테고리 별 상품수
-	 * @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);
-
 	/**
 	 * 몰메인 BESTITEM 카테고리 목록
 	 * @param

+ 41 - 3
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
@@ -237,7 +238,7 @@ public interface TsfGoodsDao {
 	 * @date 2021. 3. 8
 	 */
 	Collection<Goods> getTmtbGoodsList(Goods goods);
-	
+
 	/**
 	 * 상품 추천상품 목록
 	 *
@@ -326,7 +327,7 @@ public interface TsfGoodsDao {
 	 * @date 2021. 4. 11
 	 */
 	Collection<Tmtb> getTmtbList(Goods goods);
-	
+
 	/**
 	 * 상품의 사은품 목록 
 	 *
@@ -336,7 +337,7 @@ public interface TsfGoodsDao {
 	 * @date 2021. 4. 13
 	 */
 	Collection<Freegift> getFreeGoodsList(Goods goods);
-	
+
 	/**
 	 * 컨텐츠카테고리상품 목록
 	 * @param cate - 카테고리 정보
@@ -363,4 +364,41 @@ 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);
+
+	/**
+	 * 검색상품 총건수
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 6
+	 */
+	int getSearchGoodsCount(SearchEngine params);
+
+	/**
+	 * 검색상품 목록
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 6
+	 */
+	Collection<SearchEngine> getSearchGoodsList(SearchEngine params);
+
 }

+ 32 - 2
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -223,14 +223,24 @@ public interface TsfPlanningDao {
 	Collection<Plan> getPlanEventList(Plan plan);
 
 	/**
-	 * 총알배송 html 소스 
+	 * 총알배송 상단 html 소스 
 	 *
 	 * @param plan
 	 * @return plan
 	 * @author sowon
 	 * @date 2021. 3. 30
 	 */
-	Plan getShotDeliveryHtml(Plan plan);
+	Plan getShotDeliveryHtmlTop(Plan plan);
+	
+	/**
+	 * 총알배송 하단 html 소스 
+	 *
+	 * @param plan
+	 * @return plan
+	 * @author sowon
+	 * @date 2021. 3. 30
+	 */
+	Plan getShotDeliveryHtmlBtm(Plan plan);
 	
 	/**
 	 * 설문조사 정보
@@ -442,4 +452,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);
+	
 }

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

+ 14 - 5
src/main/java/com/style24/front/biz/service/TsfDeliveryService.java

@@ -8,15 +8,13 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.biz.dao.TscOrderDao;
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.core.support.env.TscConstants.OrderDetailStat;
 import com.style24.core.support.env.TscConstants.OrderChangeStat;
-
+import com.style24.core.support.env.TscConstants.OrderDetailStat;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.dao.TsfDeliveryDao;
 import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.SweetTracker;
 import com.style24.persistence.domain.OrderChange;
-
+import com.style24.persistence.domain.SweetTracker;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -112,4 +110,15 @@ public class TsfDeliveryService {
 		return rtn;
 	}
 
+	/**
+	 * 스윗트래커 정보 조회
+	 *
+	 * @param SweetTracker
+	 * @return Collection<SweetTracker>
+	 * @author card007
+	 * @since 2021. 05. 04
+	 */
+	public Collection<SweetTracker> getSweetTrackerDeliveryInfo(SweetTracker sweetTracker) {
+		return deliveryDao.getSweetTrackerDeliveryInfo(sweetTracker);
+	}
 }

+ 129 - 22
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -297,6 +297,45 @@ 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 brandGroupNo - 브랜드그룹번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 4. 12
+	 */
+	@Cacheable(value = "cate", key = "'reloadCate-'.concat(#cateGb)")
+	public Collection<Cate1> getCategoryReloadList(String cateGb) {
+		Cate4Srch cate = new Cate4Srch();
+		cate.setSiteCd(TscConstants.Site.STYLE24.value()); // 사이트코드
+
+		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
@@ -447,6 +486,20 @@ public class TsfDisplayService {
 		return displayDao.getGoodsListCategoryFilterList(params);
 	}
 
+	/**
+	 * 검색키워드를 통한 검색상품리스트 카테고리별 필터 목록
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 3
+	 */
+	public Collection<Filter> getSearchGoodsListCategoryFilterList(SearchEngine params) {
+		params.setSiteCd(TscConstants.Site.STYLE24.value());
+		params.setCateGb(TsfConstants.CateGb.BYITEM.value());
+		params.setFormalGb("G009_10");
+		return displayDao.getSearchGoodsListCategoryFilterList(params);
+	}
+
 	/**
 	 * 카테고리별 필터 목록
 	 * @param filterList - 필터 목록
@@ -488,28 +541,6 @@ public class TsfDisplayService {
 		return displayDao.getCategoryFilterBenefit(cate4Srch);
 	}
 
-	/**
-	 * 카테고리별 상품수
-	 * @param params - 검색엔진 정보
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 7
-	 */
-	public int getCategoryGoodsCount(SearchEngine params) {
-		return displayDao.getCategoryGoodsCount(params);
-	}
-
-	/**
-	 * 카테고리별 상품 목록
-	 * @param params - 검색엔진 정보
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 8
-	 */
-	public Collection<SearchEngine> getCategoryGoodsList(SearchEngine params) {
-		return displayDao.getCategoryGoodsList(params);
-	}
-
 	/**
 	 * 전체 브랜드 이미지 리스트
 	 * @param
@@ -544,4 +575,80 @@ public class TsfDisplayService {
 		return contentsList;
 	}
 
+	/**
+	 * 상품검색키워드 카테고리 목록
+	 * @param keyword - 상품검색키워드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 6
+	 */
+	public Collection<Cate1> getKeywordCategoryList(String keyword) {
+		Cate4Srch cate = new Cate4Srch();
+		cate.setSiteCd(TscConstants.Site.STYLE24.value()); // 사이트코드
+		cate.setCateGb(TsfConstants.CateGb.BYITEM.value()); // 카테고리구분
+		cate.setCateType(TsfConstants.CateType.GOODS.value()); // 상품분류카테고리
+		cate.setSoldoutGoodsDispYn(envsetService.getSoldoutGoodsDisplayYn(TscConstants.Site.STYLE24.value()));
+		cate.setKeyword(keyword);
+
+		// 카테고리1 목록
+		Collection<Cate1> cate1List = displayDao.getCategory1List(cate);
+
+		if (cate1List != null && !cate1List.isEmpty()) {
+			for (Cate1 cate1 : cate1List) {
+				if (cate1.getLeafYn().equals("N")) {
+					cate.setCate1No(cate1.getCate1No());
+
+					// 카테고리2 목록
+					Collection<Cate2> cate2List = displayDao.getCategory2List(cate);
+
+					if (cate2List != null && !cate2List.isEmpty()) {
+						for (Cate2 cate2 : cate2List) {
+							if (cate2.getLeafYn().equals("N")) {
+								cate.setCate2No(cate2.getCate2No());
+
+								// 카테고리3 목록
+								Collection<Cate3> cate3List = displayDao.getCategory3List(cate);
+
+								if (cate3List != null && !cate3List.isEmpty()) {
+									for (Cate3 cate3 : cate3List) {
+										if (cate3.getLeafYn().equals("N")) {
+											cate.setCate3No(cate3.getCate3No());
+
+											// 카테고리4 목록
+											Collection<Cate4> cate4List = displayDao.getCategory4List(cate);
+
+											if (cate4List != null && !cate4List.isEmpty()) {
+												for (Cate4 cate4 : cate4List) {
+													if (cate4.getLeafYn().equals("N")) {
+														cate.setCate4No(cate4.getCate4No());
+
+														// 카테고리5 목록 담기
+														cate4.setCate5List(displayDao.getCategory5List(cate));
+													}
+												}
+
+												log.info("cate4List: {}", cate4List);
+
+												// 카테고리4 목록 담기
+												cate3.setCate4List(cate4List);
+											}
+										}
+									}
+
+									// 카테고리3 목록 담기
+									cate2.setCate3List(cate3List);
+								}
+							}
+						}
+
+						// 카테고리2 목록 담기
+						cate1.setCate2List(cate2List);
+					}
+				}
+			}
+		}
+
+		return cate1List;
+	}
+
 }

+ 49 - 1
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -30,6 +30,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;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -701,7 +702,7 @@ public class TsfGoodsService {
 			// 이미지 정보
 			goodsExtend.setGoodsImgList(goodsDao.getGoodsImgList(tmpGoods));
 			// 상품 안전인증 정보
-			goodsExtend.setGoodsSafeNo(goodsDao.getGoodsSafeNo(tmpGoods));
+			//goodsExtend.setGoodsSafeNo(goodsDao.getGoodsSafeNo(tmpGoods));
 
 		}
 		return getGoodsSetComposeList;
@@ -760,6 +761,7 @@ public class TsfGoodsService {
 			if (cate.getContentsLoc().equals("SBM003")) {
 				maxRow = 3;
 			}
+
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 
 			// 조회된 데이터가 없거나 건수가 20개 미만이면 신규상품(=정상상품) 조회
@@ -776,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);
 				}
@@ -808,6 +811,7 @@ public class TsfGoodsService {
 //			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) {
@@ -841,4 +845,48 @@ 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);
+	}
+
+	/**
+	 * 검색상품 총건수
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 6
+	 */
+	public int getSearchGoodsCount(SearchEngine params) {
+		return goodsDao.getSearchGoodsCount(params);
+	}
+
+	/**
+	 * 검색상품 목록
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 6
+	 */
+	public Collection<SearchEngine> getSearchGoodsList(SearchEngine params) {
+		return goodsDao.getSearchGoodsList(params);
+	}
+
 }

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

@@ -93,6 +93,8 @@ public class TsfOrderService {
 		int ordNo = 0;
 		int index = 0;
 		int ordReqChgQty = 0;
+		int count = 0;
+		Collection<Order> list = orderDao.getOrderListForMypage(order);
 
 		for (Order tmpOrder : orderDao.getOrderListForMypage(order)) {
 			// 세트상품 옵션별 배열로 담기
@@ -134,8 +136,7 @@ public class TsfOrderService {
 
 			// 전체 구매확정 가능 여부 설정
 			if ("Y".equals(allDecideYn)
-				&& !TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value().equals(tmpOrder.getOrdDtlStat())
-				&& !TscConstants.OrderDetailStat.PURCHASE_CONFIRM.value().equals(tmpOrder.getOrdDtlStat())) {
+				&& !TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value().equals(tmpOrder.getOrdDtlStat())) {
 				allDecideYn = "N";
 			}
 
@@ -335,7 +336,24 @@ public class TsfOrderService {
 			}
 
 			if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
-				result = coreKcpService.kcpPayRequest(param, request, response);
+				if(TscConstants.PayMeans.GIFTCARD.value().equals(param.getPayMeans())) {
+					// 상품권 100% 결제 (PG PASS)
+					result.setPayAmt(0);
+					result.setPgCpnAmt(0);
+					result.setNpayPntAmt(0);
+					result.setPayGb("O");
+					result.setCardPcableYn("Y");
+					result.setEscrowYn("N");
+					result.setUpdNo(param.getCustNo());
+					result.setRegNo(param.getCustNo());
+					result.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());
+					result.setPgGb(TscConstants.PgGb.ISTYLE.value());
+					result.setOrdNo(Integer.parseInt(request.getParameter("ordr_idxx")));
+					result.setPayMeans(param.getPayMeans());
+				} else {
+					// 일반 KCP 결제
+					result = coreKcpService.kcpPayRequest(param, request, response);
+				}
 			} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 				result = coreKakaoPayService.approveKakaoPayment(param);
 			} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
@@ -368,16 +386,22 @@ public class TsfOrderService {
 			// TB_PAYMENT 등록. 실패시 PG 환불.
 			if(coreOrderDao.insertPayment(result) < 1) {
 				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
-					coreKcpService.kcpCancel(result);
+					if(TscConstants.PayMeans.GIFTCARD.value().equals(param.getPayMeans())) {
+						// 상품권 100% 결제 (PG PASS)
+						result.setPayStat(TscConstants.PaymentStat.PAY_BEFORE_CANCEL.value());
+						coreOrderDao.insertPayment(result);
+					} else {
+						coreKcpService.kcpCancel(result);
+					}
 				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 					param.setLeftAmt(0);
 					coreKakaoPayService.kakaoPayRollBack(param);
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
 					param.setLeftAmt(0);
 					coreNaverPayService.naverPayRollBack(param);
-				} else {
-					throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
 				}
+
+				throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
 			}
 		} catch(Exception e) {
 			e.printStackTrace();

+ 44 - 17
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -124,29 +124,33 @@ 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 + "에서만 접근이 가능합니다.";
 			}
 		}
 
-		// 신규회원접근가능여부 조회
-		if ("N".equals(planningDao.getNewCustomerAccessibleYn(plan))) {
-			msg = "신규회원만 접근 가능합니다.";
+		if (!TsfSession.isLogin()) {
+			plan.setCustGrade("G110_60");
+			if ("N".equals(planningDao.getCustomerGradeAccessibleYn(plan))) {
+				msg = "로그인 후 이용 가능합니다.";
+			}
 		}
 		
 		if (TsfSession.isLogin()) {
+			
+			// 신규회원접근가능여부 조회
+			if ("N".equals(planningDao.getNewCustomerAccessibleYn(plan))) {
+				msg = "신규회원만 접근 가능합니다.";
+			}
+			
 			// 고객구분접근가능여부 조회
 			plan.setCustGb(TsfSession.getCustGb());
 			if ("N".equals(planningDao.getCustomerGubunAccessibleYn(plan))) {
@@ -315,17 +319,30 @@ public class TsfPlanningService {
 	}
 	
 	/**
-	 * 총알배송 html 소스 
+	 * 총알배송 상단 html 소스 
+	 *
+	 * @param plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 3. 30
+	 */
+	public Plan getShotDeliveryHtmlTop(Plan plan) {
+		return planningDao.getShotDeliveryHtmlTop(plan);
+	}
+	
+	/**
+	 * 총알배송 하단 html 소스 
 	 *
 	 * @param plan
-	 * @return plan
+	 * @return Collection<Plan>
 	 * @author sowon
 	 * @date 2021. 3. 30
 	 */
-	public Plan getShotDeliveryHtml(Plan plan) {
-		return planningDao.getShotDeliveryHtml(plan);
+	public Plan getShotDeliveryHtmlBtm(Plan plan) {
+		return planningDao.getShotDeliveryHtmlBtm(plan);
 	}
 	
+	
 	/**
 	 * 설문조사 정보
 	 *
@@ -569,11 +586,11 @@ public class TsfPlanningService {
 		
 		//이미지등록
 		Plan filePlan = new Plan();
-		if(!StringUtils.isAllEmpty(plan.getMultiReplyOrgFile())) {
+		if(!StringUtils.isAllEmpty(plan.getMultiReplySysFile())) {
 			filePlan.setRegNo(custNo);
 			filePlan.setPlanEntrySq(plan.getPlanEntrySq());
 			//파일아이템 등록
-			String[] fileItemVal1 = plan.getMultiReplyOrgFile();
+			String[] fileItemVal1 = plan.getMultiReplySysFile();
 			int ind = 1;
 			for (int j = 0; j < fileItemVal1.length; j++) {
 				String imgInd = String.valueOf(ind);
@@ -637,4 +654,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;
 	}
 	
 	/**

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

@@ -212,7 +212,10 @@ public class TsfCartController extends TsfBaseController {
 		mav.addObject("tmtbDcDescList", tmtbDcDescList);
 
 		// 다다익선 상품 조회 (수량, 금액 섞어서)
-		mav.addObject("goodsList", goodsService.getTmtbGoodsList(param));
+		Collection<Goods> goodsList = goodsService.getTmtbGoodsList(param);
+		goodsList.removeIf(goods -> !TscConstants.GoodsType.NORMAL.value().equals(goods.getGoodsType()));
+
+		mav.addObject("goodsList", goodsList);
 
 		mav.setViewName(super.getDeviceViewName("cart/CartTmtbSalesGoodsPopup"));
 		return mav;

+ 93 - 5
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -338,7 +338,7 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("preview", paramMap.get("preview"));
 		mav.addObject("viewDt", paramMap.get("viewDt"));
 		mav.addObject("viewPage", "G037_31");
-		mav.addObject("popupCateNo", paramMap.get("brandGroupNo"));
+		mav.addObject("popupBrandCd", paramMap.get("brandGroupNo"));
 		mav.addObject("brandGroupNo", paramMap.get("brandGroupNo"));
 
 		//log.info("brandMainLayoutList::{}", brandMainLayoutList);
@@ -445,7 +445,7 @@ public class TsfDisplayController extends TsfBaseController {
 			lookbook.setLookbookGb("BL");
 			mav.addObject("brandGroupInfo", displayService.getGnbBrandGroup(lookbook.getBrandGroupNo()));
 		} else {
-			lookbook.setLookbookGb("B");
+			lookbook.setLookbookGb("L");
 			mav.addObject("brandGroupInfo", null);
 		}
 
@@ -464,6 +464,7 @@ public class TsfDisplayController extends TsfBaseController {
 	@ResponseBody
 	public Collection<Lookbook> lookbooklist(Lookbook lookbook) {
 		lookbook.setFrontGb(TsfSession.getFrontGb());
+		lookbook.setFrontYn("Y");
 		return coreLookbookService.getLookbookList(lookbook);
 	}
 
@@ -518,6 +519,7 @@ public class TsfDisplayController extends TsfBaseController {
 		if (paramMap.get("cateNo") != null && paramMap.get("cateNo") != "") {
 			popup.setCateNo(Integer.parseInt(paramMap.get("cateNo")));
 		}
+		popup.setBrandCd(paramMap.get("brandCd"));
 		popup.setPlanSq(paramMap.get("planSq"));
 		popup.setPreview(paramMap.get("preview"));
 		popup.setViewDt(paramMap.get("viewDt"));
@@ -630,12 +632,12 @@ public class TsfDisplayController extends TsfBaseController {
 //			params.setCateNo(params.getCate1No());
 //		}
 
-		pageable.setTotalCount(displayService.getCategoryGoodsCount(params));
+		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", displayService.getCategoryGoodsList(params));
+		result.set("dataList", goodsService.getCategoryGoodsList(params));
 
 		return result;
 	}
@@ -683,6 +685,32 @@ public class TsfDisplayController extends TsfBaseController {
 		return displayService.getBrandCategoryList(brandGroupNo);
 	}
 
+	/**
+	 * 아울렛 카테고리 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 5. 3
+	 */
+	@GetMapping("/category/reload/list")
+	@ResponseBody
+	public Collection<Cate1> getCategoryReloadList(String cateGb) {
+		return displayService.getCategoryReloadList(cateGb);
+	}
+
+	/**
+	 * 아울렛 카테고리 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 5. 3
+	 */
+	@GetMapping("/outlet/cate/list")
+	@ResponseBody
+	public Collection<Cate1> getOutletCategoryList(String formalGb) {
+		return displayService.getOutletCategoryList(formalGb);
+	}
+
 	/**
 	 * 베스트 메인
 	 * @param
@@ -811,7 +839,7 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("outletMainLayoutList", outletMainLayoutList);
 		mav.addObject("preview", cate.getPreview());
 		mav.addObject("viewDt", cate.getViewDt());
-		mav.addObject("viewPage", "G037_30");
+		mav.addObject("viewPage", "G037_32");
 		mav.addObject("popupCateNo", cate.getCate1No());
 
 		mav.addObject("params", cate);
@@ -819,4 +847,64 @@ public class TsfDisplayController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 검색상품 목록 화면
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 6
+	 */
+	@GetMapping("/search/goods/list/form")
+	public ModelAndView searchGoodsListForm(SearchEngine params) {
+		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/SearchGoodsListForm"));
+
+		mav.addObject("cateInfo", params);
+
+		// 상품검색키워드 카테고리 목록
+		mav.addObject("cateList", displayService.getKeywordCategoryList(params.getKeyword()));
+
+		// 상품리스트 카테고리별 필터 목록
+		Collection<Filter> filterList = displayService.getSearchGoodsListCategoryFilterList(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 params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 6
+	 */
+	@PostMapping("/search/goods/list")
+	@ResponseBody
+	public GagaMap getSearchGoodsList(@RequestBody SearchEngine params) {
+		GagaMap result = new GagaMap();
+
+		TscPageRequest pageable = new TscPageRequest((params.getPageNo() > 0 ? params.getPageNo() - 1 : 0), params.getPageSize(), params.getPageUnit());
+
+		if (TsfSession.isLogin()) {
+			params.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+
+		params.setFrontGb(TsfSession.getFrontGb());
+		params.setCustGb(TsfSession.getCustGb());
+
+		pageable.setTotalCount(goodsService.getSearchGoodsCount(params));
+		params.setPageable(pageable);
+		result.set("paging", pageable);
+		result.set("dataList", goodsService.getSearchGoodsList(params));
+
+		return result;
+	}
+
 }

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

@@ -209,7 +209,7 @@ public class TsfGoodsController extends TsfBaseController {
 
 			// 사은품
 			paramsGoods.setMaxRownum(1);
-			mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods));
+			mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods)); 
 
 			// 딜용 상품평건수
 			Review review = new Review();
@@ -237,7 +237,7 @@ public class TsfGoodsController extends TsfBaseController {
 //				// 상품 고시정보
 				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 				// 상품 안전인증 정보
-				mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
+				//mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
 
 			} else if (TscConstants.GoodsType.SET.value().equals(goods.getGoodsType())) {		// 셋트상품
 				mav.addObject("goodsComposeList", goodsService.getGoodsSetComposeList(paramsGoods));
@@ -824,7 +824,7 @@ public class TsfGoodsController extends TsfBaseController {
 	@ResponseBody
 	public GagaMap getGoodsReviewList(@RequestBody Review review) {
 
-		//log.info(" getGoodsReviewList =>{}", review);
+		log.info(" getGoodsReviewList =>{}", review);
 
 		GagaMap result = new GagaMap();
 
@@ -1334,7 +1334,7 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 고시정보
 		mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 		// 상품 안전인증 정보
-		mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
+		//mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods)); 
 
 		// 상품 공통 베너
 		log.info("paramsGoods={}", paramsGoods);

+ 18 - 7
src/main/java/com/style24/front/biz/web/TsfKollusUploadController.java

@@ -3,8 +3,8 @@ package com.style24.front.biz.web;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.style24.front.biz.service.TsfKollusService;
 import com.style24.front.support.controller.TsfBaseController;
@@ -12,6 +12,8 @@ import com.style24.persistence.domain.KollusResult;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.rest.server.GagaResponse;
+
 /**
  * Kollus Upload Controller (카테노이드 동영상 업로드)
  *
@@ -31,13 +33,16 @@ public class TsfKollusUploadController extends TsfBaseController {
 	 * @author gagamel
 	 * @since 2021. 4. 16
 	 */
-	@GetMapping("/goods/upload/result")
-	public void updateGoodsVideoResult(KollusResult result) {
+	@RequestMapping("/goods/upload/result")
+	@ResponseBody
+	public GagaResponse updateGoodsVideoResult(KollusResult result) {
 		log.info("{}", result);
 
 		if (StringUtils.isNotBlank(result.getMedia_content_key()) && StringUtils.isNotBlank(result.getUpload_file_key())) {
 			kollusService.updateGoodsVideoResult(result);
 		}
+
+		return super.ok();
 	}
 
 	/**
@@ -45,13 +50,16 @@ public class TsfKollusUploadController extends TsfBaseController {
 	 * @author gagamel
 	 * @since 2021. 4. 16
 	 */
-	@GetMapping("/review/upload/result")
-	public void updateReviewVideoResult(KollusResult result) {
+	@RequestMapping("/review/upload/result")
+	@ResponseBody
+	public GagaResponse updateReviewVideoResult(KollusResult result) {
 		log.info("{}", result);
 
 		if (StringUtils.isNotBlank(result.getMedia_content_key()) && StringUtils.isNotBlank(result.getUpload_file_key())) {
 			kollusService.updateReviewVideoResult(result);
 		}
+
+		return super.ok();
 	}
 
 	/**
@@ -59,13 +67,16 @@ public class TsfKollusUploadController extends TsfBaseController {
 	 * @author gagamel
 	 * @since 2021. 4. 16
 	 */
-	@GetMapping("/display/upload/result")
-	public void updateDisplayVideoResult(KollusResult result) {
+	@RequestMapping("/display/upload/result")
+	@ResponseBody
+	public GagaResponse updateDisplayVideoResult(KollusResult result) {
 		log.info("{}", result);
 
 		if (StringUtils.isNotBlank(result.getMedia_content_key()) && StringUtils.isNotBlank(result.getUpload_file_key())) {
 			kollusService.updateDisplayVideoResult(result);
 		}
+
+		return super.ok();
 	}
 
 }

+ 55 - 5
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -36,6 +36,7 @@ import com.style24.front.biz.service.TsfCartService;
 import com.style24.front.biz.service.TsfCommonService;
 import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfCustomerService;
+import com.style24.front.biz.service.TsfDeliveryService;
 import com.style24.front.biz.service.TsfGiftcardService;
 import com.style24.front.biz.service.TsfOrderChangeService;
 import com.style24.front.biz.service.TsfOrderService;
@@ -60,6 +61,7 @@ import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.Review;
+import com.style24.persistence.domain.SweetTracker;
 import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
@@ -138,6 +140,9 @@ public class TsfMypageController extends TsfBaseController {
 	@Autowired
 	private TscWmsService coreWmsService;
 	
+	@Autowired
+	private TsfDeliveryService deliveryService;
+	
 	@Autowired
 	private TscEnvsetService eventService;
 
@@ -212,7 +217,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 02. 15
 	 */
-	@GetMapping({"/order/detail/form/{ordNo}"})
+	@GetMapping("/order/detail/form/{ordNo}")
 	public ModelAndView mypageOrderDetailForm(@PathVariable(value = "ordNo") int ordNo) {
 		ModelAndView mav = new ModelAndView();
 
@@ -894,7 +899,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 02. 04
 	 */
-	@GetMapping({"/cre/list/form"})
+	@GetMapping("/cre/list/form")
 	public ModelAndView mypageCreListForm() {
 		ModelAndView mav = new ModelAndView();
 
@@ -970,7 +975,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 04. 12
 	 */
-	@PostMapping({"/cre/cancel/detail/form"})
+	@PostMapping("/cre/cancel/detail/form")
 	public ModelAndView mypageCreCancelDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
@@ -1003,7 +1008,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 04. 13
 	 */
-	@PostMapping({"/cre/return/detail/form"})
+	@PostMapping("/cre/return/detail/form")
 	public ModelAndView mypageCreReturnDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
@@ -1039,7 +1044,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 04. 13
 	 */
-	@PostMapping({"/cre/exchange/detail/form"})
+	@PostMapping("/cre/exchange/detail/form")
 	public ModelAndView mypageCreExchangeDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
@@ -1334,6 +1339,51 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 
+	/**
+	 * 배송조회 화면
+	 * 
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since  2021. 05. 04
+	 */
+	@PostMapping("/delivery/info/form")
+	@ResponseBody
+	public ModelAndView deliveryInfoForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+		
+		// 고객번호 설정
+		order.setCustNo(TsfSession.getInfo().getCustNo());
+
+		// 주문번호 설정
+		mav.addObject("ordNo", order.getOrdNo());
+
+		// 주문목록 조회
+		Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
+
+		if (orderList.size() == 0) {
+			mav.setViewName("redirect:/mypage/order/list/form");
+			return mav;
+		}
+
+		mav.addObject("orderList", orderList);
+		mav.addObject("oneData", orderList.iterator().next().get("oneData"));
+
+
+		// 주문 배송지 정보 조회
+		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
+
+		// 스윗트래커 정보 조회
+		SweetTracker sweetTracker = new SweetTracker();
+		sweetTracker.setShipCompCd(order.getShipCompCd());
+		sweetTracker.setInvoiceNo(order.getInvoiceNo());
+		mav.addObject("sweetTrackerInfoList", deliveryService.getSweetTrackerDeliveryInfo(sweetTracker));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageDeliveryInfoForm"));
+		
+		return mav;
+	}
+
 	/**
 	 * 위시리스트 등록처리
 	 *

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

@@ -78,6 +78,10 @@ public class TsfOrderController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView();
 		
 		// 비회원 주문시 로직 정리
+		// @ WEB 인 경우에는 고객정보 입력 화면 후 주문서 이동 후 본인인중
+		// @ WEB 의 경우에는 입력한 고객정보와 인증받은 고객정보가 다른경우 고객정보 업데이트
+		// @ MOBILE 인 경우에는 본인인증 후 주문서 이동
+		
 		// 1. 카트시퀀스가 정보가 없을때 처리 장바구니로 이동
 		if (order.getCartSqArr() == null) {
 			mav.setViewName("redirect:/cart/list/form");						// 장바구니화면이동
@@ -129,6 +133,10 @@ public class TsfOrderController extends TsfBaseController {
 	public ModelAndView orderForm(HttpServletRequest request, Order order) {
 		ModelAndView mav = new ModelAndView();
 		
+		// TODO
+		// 1.비회주문, 회원 주문 판단 로직,  고객정보 세션 판단
+		// 세션고객정보가 존재하면 회원주문 없으면 비회원 주문
+		
 		// 1.1 referer 체크 (order/noMember)
 		String refererStr = "";
 		if (request.getHeader("referer") != null) {

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

@@ -159,13 +159,17 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setCustGb(TsfSession.getCustGb());
 		review.setFrontGb(TsfSession.getFrontGb());
 		review.setCustGb(TsfSession.getCustGb());
-		plan.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+		if (TsfSession.isLogin()) {
+			plan.setCustNo(TsfSession.getInfo().getCustNo());
+		}
 
 		// 기본 set
 		plan.setExceptPlanSq(plan.getPlanSq());
 		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);
@@ -210,7 +214,6 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
 		// 코너 상품
 		mav.addObject("planCornerGoodsList", planningService.getPlanningCornerGoodsList(plan));
-		//mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
 
 		// Popup Parameter
 		mav.addObject("preview", plan.getPreview());
@@ -240,6 +243,9 @@ public class TsfPlanningController extends TsfBaseController {
 			mav.setViewName(super.getDeviceViewName("planning/PlanningEventAttendForm"));
 			return mav;
 		}
+//		else if(planGb.equals("S")) {
+//			mav.setViewName("redirect:/planning/shot/delivery/guide/form?planSq="+plan.getPlanSq());
+//		}
 
 		// 브랜드그룹 정보 : 브랜드메인 링크에 설정된 기획전으로 들어올때 GNB 변경때문에 사용
 		mav.addObject("brandGroupInfo", displayService.getGnbBrandGroup(plan.getBrandGroupNo()));
@@ -374,8 +380,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;
@@ -499,6 +507,7 @@ public class TsfPlanningController extends TsfBaseController {
 		Integer custNo = null;
 		if (TsfSession.isLogin()) {
 			custNo = TsfSession.getInfo().getCustNo();
+			plan.setCustNo(custNo);
 			// 고객정보 조회
 			Customer customer = new Customer();
 			customer.setSiteCd(TscConstants.Site.STYLE24.value());
@@ -519,7 +528,8 @@ public class TsfPlanningController extends TsfBaseController {
 		
 		
 		mav.addObject("custAddr", planningService.getCustAddrInfo(addr));
-		mav.addObject("shotHtml", planningService.getShotDeliveryHtml(plan));
+		mav.addObject("shotHtmlTop", planningService.getShotDeliveryHtmlTop(plan));
+		mav.addObject("shotHtmlBtm", planningService.getShotDeliveryHtmlBtm(plan));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningShotGuideForm"));
 		return mav;
 	}

+ 4 - 1
src/main/java/com/style24/persistence/domain/Cate4Srch.java

@@ -1,8 +1,8 @@
 package com.style24.persistence.domain;
 
 import com.style24.persistence.TscBaseDomain;
-
 import com.style24.persistence.TscPageRequest;
+
 import lombok.Data;
 
 /**
@@ -58,4 +58,7 @@ public class Cate4Srch extends TscBaseDomain {
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;
+
+	private String keyword;		// 상품검색키워드
+
 }

+ 4 - 0
src/main/java/com/style24/persistence/domain/Freegift.java

@@ -25,4 +25,8 @@ public class Freegift {
 	private String leftQty;
 	private String targetVal;
 	
+	private int rnum;
+	
+	private String freeGoods;
+
 }

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

@@ -30,6 +30,7 @@ public class Popup extends TscBaseDomain {
 	private String linkUrl15;
 	private String viewPage;
 	private Integer cateNo;
+	private String brandCd;
 	private String planSq;
 	private Integer dispOrd;
 	private String preview = "N";

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

@@ -52,6 +52,7 @@ public class Review extends TscBaseDomain {
 	private String admRplDt;		// 관리자댓글등록일시
 	private String frontGb;
 	private String custGb;
+	private String brandNm;
 
 	private String custId;			// 고객ID
 	private String sysImgNm;		// 상품대표이미지

+ 11 - 2
src/main/java/com/style24/persistence/domain/SweetTracker.java

@@ -34,11 +34,20 @@ public class SweetTracker extends TscBaseDomain {
 	private String courier_code;
 	private String secret_value;
 	
-	
 	private Integer level; 	  // 배송단계(1~6단계)
 	private Integer ordDtlNo;
 	private Integer ordChgSq;
 	private Integer tmp_sq;
-	
+
+	private String shipCompCd;
+	private String invoiceNo;
+	private String telno;
+	private String timeTrans;
+	private String timeSweet;
+	private String telnoOffice;
+	private String telnoMan;
+	private String recvAddr;
+	private String recvName;
+	private String sendName;
 
 }

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

@@ -2,6 +2,7 @@ package com.style24.persistence.domain.searchengine;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscPageRequest;
 
 import lombok.Data;
@@ -33,15 +34,21 @@ public class SearchEngine implements Serializable {
 	private String defaultCateYn;	// 기본카테고리사용여부
 	private String frontGb;			// 프론트구분
 	private String custGb;			// 고객구분
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] brandGroupArr;	// 브랜드그룹배열
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] sizeArr;		// 사이즈배열
 	private Integer priceFrom;		// 가격From
 	private Integer priceTo;		// 가격To
 	private Integer dcRateFrom;		// 할인율From
 	private Integer dcRateTo;		// 할인율To
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] ageArr;		// 사이즈배열
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] seasonArr;		// 시즌배열
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] colorArr;		// 색상배열
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] benefitArr;	// 혜택배열
 	private String unisex;			// 남여공용만보기(성별구분:G007_Z)
 	private String newGoods;		// 신상품만보기(혜택구분:40)

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

@@ -728,8 +728,8 @@
 		                             WHEN 'M' = #{frontGb} THEN CP.DC_MVAL
 		                             ELSE CP.DC_AVAL END) AS DC_VAL
 		                     , CP.CPN_TYPE
-		                     , IF (CP.PD_GB = 'D', NOW(), CP.AVAIL_STDT) AS AVAIL_STDT
-		                     , IF (CP.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL Cp.AVAIL_DAYS DAY, ' 23:59:59'), CP.AVAIL_EDDT) AS AVAIL_EDDT
+		                     , CP.AVAIL_STDT
+		                     , CP.AVAIL_EDDT
 		                     , G.GOODS_CD
 		                     , G.CURR_PRICE
 		                FROM   TB_GOODS G
@@ -748,10 +748,7 @@
 		                </choose> 
 		                AND    CP.SITE_CD = #{siteCd}
 		                AND    CP.CPN_STAT = 'G232_11'   -- 쿠폰인 진행중인 쿠폰만
-		                <![CDATA[
-		                AND    NOW() <= IF (CP.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL CP.AVAIL_DAYS DAY, ' 23:59:59'), CP.AVAIL_EDDT)
-		                ]]>
-		                AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
+		                AND    NOW() BETWEEN CP.AVAIL_STDT AND CP.AVAIL_EDDT
 		                AND    CP.CPN_TYPE = 'G230_10' /*즉시할인쿠폰*/
 		                AND    CP.DC_CD_GB = 'G233_00'                         -- 일반유형(할인쿠폰구분)
 		                AND    (CASE WHEN 'P' = #{frontGb} THEN CP.DC_PVAL
@@ -1218,12 +1215,11 @@
 		                                     FROM TB_CUST_COUPON
 		                                    GROUP BY CPN_ID) CC2
 		                    ON C.CPN_ID = CC2.CPN_ID
-		               WHERE C.DOWN_ABL_YN = 'N'
-		                  AND C.CPN_ID IN (
+		               WHERE C.CPN_ID IN (
 		                                    SELECT PCI.ITEM_VAL 
 		                                    FROM TB_PLAN_CONTENTS_ITEM PCI 
 		                                    WHERE PCI.ITEM_VAL = #{cpnId}
-		                                  )
+		                                  ) 
 		                 AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
 		                 AND C.CPN_STAT = 'G232_11'  -- 진행
 		                 AND CASE WHEN C.TOT_PUB_LIMIT_QTY = 0 THEN 1
@@ -1321,13 +1317,13 @@
 		</if>
 		AND C.SITE_CD = #{siteCd}
 		AND C.CPN_TYPE IN ('G230_20','G230_30')
-		AND C.DOWN_ABL_YN = 'N'
+		AND C.DOWN_ABL_YN = 'Y'
 		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 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

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

@@ -99,6 +99,17 @@
 		)
 	</insert>	
 	
-	
+	<!-- 스윗트래커 정보 조회 -->
+	<select id="getSweetTrackerDeliveryInfo" parameterType="SweetTracker" resultType="SweetTracker">
+		/*TsfDelivery.getSweetTrackerDeliveryInfo*/
+		SELECT TIME_TRANS
+		     , DELV_WHERE
+		     , DETAILS
+		     , IFNULL(TELNO_MAN, TELNO_OFFICE) AS TELNO
+		  FROM TB_SWEET_TRACKER
+		 WHERE SHIP_COMP_CD = #{shipCompCd}
+		   AND INVOICE_NO = #{invoiceNo}
+		 ORDER BY DELV_LEVEL DESC;
+	</select>
 
 </mapper>

+ 86 - 684
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -318,6 +318,36 @@
 		               AND    STOCK_QTY > 0 /*품절상품전시여부가 N일 때 재고가 있는 카테고리만*/
 		               </if>
 		              )
+		<if test="keyword != null and keyword != ''"> <!-- 상품검색키워드 -->
+		AND    CATE1_NO IN (SELECT DISTINCT C4.CATE1_NO
+		                    FROM   TB_CATE_4SRCH C4
+		                         , TB_CATE_GOODS CG
+		                         , TB_GOODS G
+		                         , TB_GOODS_STOCK S
+		                         , TB_BRAND B
+		                    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		                    AND    CG.GOODS_CD = G.GOODS_CD
+		                    AND    CG.GOODS_CD = S.GOODS_CD
+		                    AND    G.BRAND_CD = B.BRAND_CD
+		                    AND    C4.SITE_CD = #{siteCd}
+		                    AND    C4.CATE_GB = #{cateGb}
+		                    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		                    AND    (
+		                            G.GOODS_NUM LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                            OR
+		                            G.GOODS_CD LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                            OR
+		                            UPPER(G.GOODS_NM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                            OR
+		                            UPPER(B.BRAND_ENM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                            OR
+		                            UPPER(B.BRAND_KNM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                           )
+		                    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		                    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		                    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		                   )
+		</if>
 		ORDER  BY DISP_ORD
 	</select>
 	
@@ -551,6 +581,9 @@
 		               <if test='planSq != null and planSq !=""'>
 		               AND PLAN_SQ = #{planSq}
 		               </if>
+		                <if test='brandCd != null and brandCd !=""'>
+		               AND BRAND_CD = #{brandCd}
+		               </if>
 		             )
 		    </if>
 		         )
@@ -618,14 +651,11 @@
 	<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>
+		     , CASE WHEN FILTER_GB = 'SIZE' THEN
+		                SUBSTRING_INDEX(FILTER_CD,'|',1)
+		            ELSE
+		                FILTER_CD
+		       END       AS FILTER_CD
 		     , FILTER_NM
 		FROM   TB_CATE_FILTER
 		WHERE  SITE_CD = #{siteCd}
@@ -648,6 +678,53 @@
 		ORDER  BY FILTER_GB, DISP_ORD
 	</select>
 	
+	<!-- 검색상품리스트 카테고리별 필터 목록 -->
+	<select id="getSearchGoodsListCategoryFilterList" parameterType="SearchEngine" resultType="Filter">
+		/* TsfDisplay.getSearchGoodsListCategoryFilterList */
+		SELECT DISTINCT
+		       FILTER_GB
+		     , CASE WHEN FILTER_GB = 'SIZE' THEN
+		                SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
+		            ELSE
+		                FILTER_CD
+		       END       AS FILTER_CD
+		     , 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 IN (SELECT DISTINCT C4.LEAF_CATE_NO
+		                   FROM   TB_CATE_4SRCH C4
+		                        , TB_CATE_GOODS CG
+		                        , TB_GOODS G
+		                        , TB_GOODS_STOCK S
+		                        , TB_BRAND B
+		                   WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		                   AND    CG.GOODS_CD = G.GOODS_CD
+		                   AND    CG.GOODS_CD = S.GOODS_CD
+		                   AND    G.BRAND_CD = B.BRAND_CD
+		                   AND    C4.SITE_CD = #{siteCd}
+		                   AND    C4.CATE_GB = #{cateGb}
+		                   AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		                   AND    (
+		                           G.GOODS_NUM LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                           OR
+		                           G.GOODS_CD LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                           OR
+		                           UPPER(G.GOODS_NM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                           OR
+		                           UPPER(B.BRAND_ENM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                           OR
+		                           UPPER(B.BRAND_KNM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                          )
+		                   AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		                   AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		                   AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		                  )
+		ORDER  BY FILTER_GB, DISP_ORD
+	</select>
+	
 	<!-- 상품 카테고리 필터 -->
 	<select id="getCategoryFilter" parameterType="Cate4srch" resultType="GoodsSearch">
 		/* TsfDisplay.getCategoryFilter */
@@ -715,515 +792,6 @@
 		GROUP BY GB.BENEFIT_GB
 	</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>
-
-	<!-- 카테고리별 상품 총 수 -->
-	<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'>
@@ -1279,173 +847,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">
@@ -1596,4 +997,5 @@
 		        ) Z
 		LIMIT 2
 	</select>
+	
 </mapper>

+ 1073 - 13
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1073,8 +1073,112 @@
 	<!-- 상품의 사은품 목록 -->
 	<select id="getFreeGoodsList"  parameterType="Goods" resultType="Freegift">
 		/* TsfGoods.getFreeGoodsList */
+		WITH TAB_GOODS AS (
+		          SELECT GOODS_CD
+		               , SUPPLY_COMP_CD
+		               , BRAND_CD
+		          FROM TB_GOODS
+		          WHERE GOODS_CD =  #{goodsCd}
+		      )
+		, TAB_FREEGIFT AS (
+		     SELECT A.FREEGIFT_SQ
+		          , B.FREEGIFT_SECTION_SQ
+		          , A.ALL_YN     -- 모두지급
+		          , B.SECTION_GB -- G810_10|수량, G810_11|금액
+		          , B.SECTION_VAL
+		          , D.GOODS_CD
+		     FROM TB_FREEGIFT A
+		     INNER JOIN TB_FREEGIFT_SECTION B ON A.FREEGIFT_SQ = B.FREEGIFT_SQ
+		     AND B.DEL_YN = 'N'
+		     INNER JOIN (SELECT D.FREEGIFT_SQ
+		                      , G.GOODS_CD
+		                 FROM TAB_GOODS G
+		                          INNER JOIN TB_FREEGIFT_GOODS D ON G.GOODS_CD = D.TARGET_VAL
+		                     AND D.GOODS_GB IN ('G800_10', 'G800_20')
+		                     AND D.TARGET_GB = 'G260_10' -- 상품코드
+		                     AND D.DEL_YN = 'N'
+		                 UNION
+		                 SELECT S.FREEGIFT_SQ
+		                      , G.GOODS_CD
+		                 FROM TAB_GOODS G
+		                          INNER JOIN TB_FREEGIFT_GOODS S ON G.SUPPLY_COMP_CD = S.TARGET_VAL
+		                     AND S.GOODS_GB IN ('G800_10', 'G800_20')
+		                     AND S.TARGET_GB = 'G260_13' -- 공급업체코드
+		                     AND S.DEL_YN = 'N'
+		                 UNION
+		                 SELECT SB.FREEGIFT_SQ
+		                      , G.GOODS_CD
+		                 FROM TAB_GOODS G
+		                          INNER JOIN TB_FREEGIFT_GOODS SB ON G.BRAND_CD = SB.TARGET_VAL
+		                     AND SB.GOODS_GB IN ('G800_10', 'G800_20')
+		                     AND SB.TARGET_GB = 'G260_12' -- 브랜드코드
+		                     AND SB.DEL_YN = 'N'
+		     ) D ON A.FREEGIFT_SQ = D.FREEGIFT_SQ
+		     LEFT OUTER JOIN TB_FREEGIFT_GOODS E ON A.FREEGIFT_SQ = E.FREEGIFT_SQ
+		                                         AND E.GOODS_GB = 'G800_30'
+		                                         AND E.TARGET_GB = 'G260_10'
+		                                         AND E.DEL_YN = 'N'
+		                                         AND E.TARGET_VAL = #{goodsCd}
+		     WHERE NOW() BETWEEN A.FREEGIFT_STAT AND A.FREEGIFT_EDDT
+		     AND A.FREEGIFT_STAT = 'G232_11'
+		     AND NULLIF(E.TARGET_VAL, '') IS NULL
+		     AND A.DEL_YN = 'N'
+		     ORDER BY A.FREEGIFT_SQ, B.FREEGIFT_SECTION_SQ
+		 )
+		 , TAB_FREEGOODS AS (
+		     SELECT B.ALL_YN
+		          , C.FREEGIFT_SQ
+		          , C.FREEGIFT_SECTION_SQ
+		          , C.FREEGIFT_VAL_SQ
+		          , F.GOODS_NM
+		          , C.ITEM_QTY
+		          , CASE WHEN B.ALL_YN = 'Y' THEN 1
+		                 ELSE (RANK() OVER (PARTITION BY B.ALL_YN , C.FREEGIFT_SQ, C.FREEGIFT_SECTION_SQ
+		                                    ORDER BY  C.FREEGIFT_SQ , C.FREEGIFT_SECTION_SQ , C.FREEGIFT_VAL_SQ)) 
+		                 END AS ROWNUM
+		     FROM TAB_FREEGIFT B
+		     INNER JOIN TB_FREEGIFT_VAL C ON B.FREEGIFT_SQ = C.FREEGIFT_SQ
+		                                  AND B.FREEGIFT_SECTION_SQ = C.FREEGIFT_SECTION_SQ
+		                                  AND C.DEL_YN = 'N'
+		                                  AND C.LEFT_QTY - C.ITEM_QTY > 0 -- 사은품 잔여수량
+		     INNER JOIN TB_FREE_GOODS F ON F.PRODUCT_NO = C.PRODUCT_NO
+		                                AND F.USE_YN = 'Y'
+		 )
+		SELECT Z.*
+		FROM (
+		    SELECT  F.FREEGIFT_SQ
+		          , F.FREEGIFT_SECTION_SQ
+		          , F.ALL_YN     -- 모두지급
+		          , F.SECTION_GB -- G810_10|수량, G810_11|금액
+		          , F.SECTION_VAL
+		          , FG.GOODS_NM
+		          , GROUP_CONCAT(CONCAT(FG.GOODS_NM,':',FG.ITEM_QTY)) AS FREE_GOODS
+		          -- , RANK() OVER (PARTITION BY F.FREEGIFT_SQ , F.FREEGIFT_SECTION_SQ ORDER BY  FG.FREEGIFT_VAL_SQ ) AS RNUM
+		    FROM TAB_FREEGIFT F
+		    INNER JOIN TAB_FREEGOODS FG ON F.FREEGIFT_SQ = FG.FREEGIFT_SQ
+		                                AND F.FREEGIFT_SECTION_SQ = F.FREEGIFT_SECTION_SQ
+		                                AND FG.ROWNUM = 1
+		    GROUP BY  F.FREEGIFT_SQ , F.FREEGIFT_SECTION_SQ , F.ALL_YN , F.SECTION_GB , F.SECTION_VAL
+		    ORDER BY F.FREEGIFT_SQ, F.FREEGIFT_SECTION_SQ
+		) Z
+		WHERE 1 = 1
+		<if test="maxRownum != null and maxRownum > 0">
+		LIMIT #{maxRownum}
+		</if> 
+	</select>
+	
+	<!-- 상품의 사은품 목록 -->
+	<select id="getFreeGoodsList_org"  parameterType="Goods" resultType="Freegift">
+		/* TsfGoods.getFreeGoodsList_org */
 		SELECT Z.*
 		FROM (
+		      WITH TAB_GOODS AS (
+		          SELECT GOODS_CD
+		               , SUPPLY_COMP_CD
+		               , BRAND_CD
+		          FROM TB_GOODS
+		          WHERE GOODS_CD = #{goodsCd}
+		      )
 		      SELECT  A.FREEGIFT_SQ
 		            , B.FREEGIFT_SECTION_SQ
 		            , C.FREEGIFT_VAL_SQ
@@ -1085,29 +1189,48 @@
 		            , F.GOODS_NM            -- 사은품 명
 		            , C.ITEM_QTY            -- 사은품 지급 수량
 		            , C.LEFT_QTY            -- 잔여수량
-		            , D.TARGET_VAL
+		            , D.GOODS_CD
 		      FROM TB_FREEGIFT A
 		      INNER JOIN TB_FREEGIFT_SECTION B ON A.FREEGIFT_SQ = B.FREEGIFT_SQ
 		                                       AND B.DEL_YN = 'N'
 		      INNER JOIN TB_FREEGIFT_VAL C ON B.FREEGIFT_SQ = C.FREEGIFT_SQ
 		                                   AND B.FREEGIFT_SECTION_SQ = C.FREEGIFT_SECTION_SQ
 		                                   AND C.DEL_YN = 'N'
-		                                   AND C.LEFT_QTY > 0    -- 사은품 잔여수량
+		                                   AND C.LEFT_QTY - C.ITEM_QTY > 0    -- 사은품 잔여수량
 		      INNER JOIN TB_FREE_GOODS F ON F.PRODUCT_NO = C.PRODUCT_NO
 		                                 AND F.USE_YN = 'Y'
-		      INNER JOIN TB_FREEGIFT_GOODS D ON A.FREEGIFT_SQ = D.FREEGIFT_SQ
-		                                   AND D.GOODS_GB  IN ( 'G800_10',  'G800_20')
-		                                   AND D.TARGET_GB = 'G260_10'
-		                                   AND D.DEL_YN = 'N'
-		                                   AND D.TARGET_VAL = #{goodsCd}
+		      INNER JOIN (SELECT D.FREEGIFT_SQ
+		                        ,G.GOODS_CD
+		                  FROM TAB_GOODS G
+		                  INNER JOIN TB_FREEGIFT_GOODS D ON G.GOODS_CD = D.TARGET_VAL
+		                                                 AND D.GOODS_GB  IN ( 'G800_10',  'G800_20')
+		                                                 AND D.TARGET_GB = 'G260_10'            -- 상품코드
+		                                                 AND D.DEL_YN = 'N'
+		                  UNION
+		                  SELECT S.FREEGIFT_SQ
+		                        ,G.GOODS_CD
+		                  FROM TAB_GOODS G
+		                  INNER JOIN TB_FREEGIFT_GOODS S ON G.SUPPLY_COMP_CD = S.TARGET_VAL
+		                                                 AND S.GOODS_GB  IN ( 'G800_10',  'G800_20')
+		                                                 AND S.TARGET_GB = 'G260_13'             -- 공급업체코드
+		                                                 AND S.DEL_YN = 'N'
+		                  UNION
+		                  SELECT SB.FREEGIFT_SQ
+		                        ,G.GOODS_CD
+		                  FROM TAB_GOODS G
+		                  INNER JOIN TB_FREEGIFT_GOODS SB ON G.BRAND_CD = SB.TARGET_VAL
+		                                                  AND SB.GOODS_GB  IN ( 'G800_10',  'G800_20')
+		                                                  AND SB.TARGET_GB = 'G260_12'            -- 브랜드코드
+		                                                  AND SB.DEL_YN = 'N'
+		                  ) D ON A.FREEGIFT_SQ = D.FREEGIFT_SQ
 		      LEFT OUTER JOIN TB_FREEGIFT_GOODS E ON A.FREEGIFT_SQ = E.FREEGIFT_SQ
-		                                   AND E.GOODS_GB = 'G800_30'
-		                                   AND E.TARGET_GB = 'G260_10'
-		                                   AND E.DEL_YN = 'N'
-		                                   AND E.TARGET_VAL = #{goodsCd}
+		                                          AND E.GOODS_GB = 'G800_30'
+		                                          AND E.TARGET_GB = 'G260_10'
+		                                          AND E.DEL_YN = 'N'
+		                                          AND E.TARGET_VAL = #{goodsCd}
 		      WHERE NOW() BETWEEN  A.FREEGIFT_STAT AND A.FREEGIFT_EDDT
 		      AND  A.FREEGIFT_STAT = 'G232_11'
-		      AND E.TARGET_VAL IS NULL
+		      AND NULLIF(E.TARGET_VAL,'') IS NULL
 		      AND A.DEL_YN = 'N'
 		      ORDER BY A.FREEGIFT_SQ, B.FREEGIFT_SECTION_SQ, C.FREEGIFT_VAL_SQ
 		) Z
@@ -1382,7 +1505,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 +1660,942 @@
 		             LIMIT  20 ) A
 		ON     G.GOODS_CD = A.GOODS_CD
 	</select>
+
+	<!-- 카테고리별 상품 총건수 -->
+	<select id="getCategoryGoodsCount" parameterType="SearchEngine" resultType="int">
+		/* TsfGoods.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    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 /*유효한 판매기간*/
+		<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="sizeArr" 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>
+		<if test='benefitArr != null and benefitArr.length > 0'>
+		            AND    EXISTS (SELECT 1
+		                           FROM   TB_GOODS_BENEFIT
+		                           WHERE  GOODS_CD = G.GOODS_CD
+		                           AND    BENEFIT_GB IN
+		                           <foreach collection="benefitArr" item="item" index="index"  open="(" close=")" separator=",">
+		                               #{item}
+		                           </foreach>
+		                        )
+		        </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">
+		/* TsfGoods.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    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 /*유효한 판매기간*/
+		        <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="sizeArr" 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>
+		        <if test='benefitArr != null and benefitArr.length > 0'>
+		            AND    EXISTS (SELECT 1
+		                           FROM   TB_GOODS_BENEFIT
+		                           WHERE  GOODS_CD = G.GOODS_CD
+		                           AND    BENEFIT_GB IN
+		                           <foreach collection="benefitArr" item="item" index="index"  open="(" close=")" separator=",">
+		                               #{item}
+		                           </foreach>
+		                        )
+		        </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'"> <!-- 인기상품순 -->
+		                        , ROW_NUMBER() OVER(ORDER BY G.SELL_WEEK_QTY DESC, G.GOODS_CD) AS NUMB
+		                    </when>
+		                    <when test="sortingType == 'REVIEW'"> <!-- 리뷰많은순 -->
+		                        , ROW_NUMBER() OVER(ORDER BY G.REVIEW_REG_CNT DESC, G.GOODS_CD) AS NUMB
+		                    </when>
+		                    <otherwise> <!-- 최신상품순 -->
+		                        , ROW_NUMBER() OVER(ORDER BY 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
+		                WHERE 1=1
+		            <if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
+		                AND    O.MAIN_COLOR_CD 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>
+		        ) 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
+		        , MAIN_COLOR_CD
+		        , MAX(SYS_IMG_NM)  AS SYS_IMG_NM
+		        , MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		        FROM   (
+		              SELECT G.GOODS_CD
+		              , GI.COLOR_CD AS MAIN_COLOR_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 , MAIN_COLOR_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 AND G.MAIN_COLOR_CD = GI.MAIN_COLOR_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="getSearchGoodsCount" parameterType="SearchEngine" resultType="int">
+		/* TsfGoods.getSearchGoodsCount */
+		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_GOODS G
+		        INNER JOIN TB_GOODS_STOCK S ON G.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 G.GOODS_CD = GS.GOODS_CD
+		        LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON G.GOODS_CD = GBP.GOODS_CD
+		        WHERE  (
+		                G.GOODS_NUM LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                OR
+		                G.GOODS_CD LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                OR
+		                UPPER(G.GOODS_NM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                OR
+		                UPPER(B.BRAND_ENM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                OR
+		                UPPER(B.BRAND_KNM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		               )
+		        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 = G.GOODS_CD
+		                       AND    OPT_CD2 IN
+		                       <foreach collection="sizeArr" 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>
+		        <if test='benefitArr != null and benefitArr.length > 0'>
+		        AND    EXISTS (SELECT 1
+		                       FROM   TB_GOODS_BENEFIT
+		                       WHERE  GOODS_CD = G.GOODS_CD
+		                       AND    BENEFIT_GB IN
+		                       <foreach collection="benefitArr" item="item" index="index"  open="(" close=")" separator=",">
+		                       #{item}
+		                       </foreach>
+		                      )
+		        </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="getSearchGoodsList" parameterType="SearchEngine" resultType="SearchEngine">
+		/* TsfGoods.getSearchGoodsList */
+		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_GOODS G
+		            INNER JOIN TB_GOODS_STOCK S ON G.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 G.GOODS_CD = GS.GOODS_CD
+		            LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON G.GOODS_CD = GBP.GOODS_CD
+		            WHERE  (
+		                    G.GOODS_NUM LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                    OR
+		                    G.GOODS_CD LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                    OR
+		                    UPPER(G.GOODS_NM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                    OR
+		                    UPPER(B.BRAND_ENM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                    OR
+		                    UPPER(B.BRAND_KNM) LIKE CONCAT('%',UPPER(#{keyword}),'%')
+		                   )
+		            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 = G.GOODS_CD
+		                           AND    OPT_CD2 IN
+		                           <foreach collection="sizeArr" 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>
+		            <if test='benefitArr != null and benefitArr.length > 0'>
+		            AND    EXISTS (SELECT 1
+		                           FROM   TB_GOODS_BENEFIT
+		                           WHERE  GOODS_CD = G.GOODS_CD
+		                           AND    BENEFIT_GB IN
+		                           <foreach collection="benefitArr" item="item" index="index"  open="(" close=")" separator=",">
+		                           #{item}
+		                           </foreach>
+		                          )
+		            </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'"> <!-- 인기상품순 -->
+		                 , ROW_NUMBER() OVER(ORDER BY G.SELL_WEEK_QTY DESC, G.GOODS_CD) AS NUMB
+		                     </when>
+		                     <when test="sortingType == 'REVIEW'"> <!-- 리뷰많은순 -->
+		                 , ROW_NUMBER() OVER(ORDER BY G.REVIEW_REG_CNT DESC, G.GOODS_CD) AS NUMB
+		                     </when>
+		                     <otherwise> <!-- 최신상품순 -->
+		                 , ROW_NUMBER() OVER(ORDER BY G.REG_DT DESC, G.GOODS_CD) AS NUMB
+		                     </otherwise>
+		                 </choose>
+		            FROM   TAB_GOODS G
+		            INNER 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>

+ 11 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -119,7 +119,7 @@
 					 , R.REVIEW_SQ
 					 , IF(NOW() <![CDATA[<]]> O.ORD_DT + INTERVAL 90 DAY, 'Y', 'N')		AS REVIEWABLE_YN
 					 , TIMESTAMPDIFF(DAY, NOW(), OD.DELV_EDDT + INTERVAL 2 WEEK)		AS PURCHASE_CONFIRM_DAY
-					 , DATE_FORMAT(GRS.DELV_RES_DT, '%Y.%m.%d') AS DELV_RES_DT
+		             , (SELECT MIN(DATE_FORMAT(DELV_RES_DT,'%Y.%m.%d')) FROM TB_GOODS_RES_SELL WHERE GOODS_CD = G.GOODS_CD AND NOW() <![CDATA[ < ]]> DELV_RES_DT AND USE_YN = 'Y') AS DELV_RES_DT
 					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
 					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
 					 , CA.BANK_CD
@@ -152,8 +152,6 @@
 				   AND R.ORD_DTL_NO = OD.ORD_DTL_NO
 				  LEFT OUTER JOIN TB_DELIVERY_ADDR DA
 				    ON DA.DELV_ADDR_SQ = OD.DELV_ADDR_SQ
-				  LEFT OUTER JOIN TB_GOODS_RES_SELL GRS
-				    ON GRS.GOODS_CD = OD.GOODS_CD
 				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 									 FROM TB_ORDER_CHANGE_DETAIL OCD
@@ -188,6 +186,9 @@
 			</choose>
 			<if test="ordNo != null and ordNo != ''">
 		   AND O.ORD_NO = #{ordNo}
+			</if>
+			<if test="ordDtlNo != null and ordDtlNo != ''">
+		   AND OD.ORD_DTL_NO = #{ordDtlNo}
 			</if>
 			<if test="ordDtlNoArr != null">
 		   AND OD.ORD_DTL_NO IN
@@ -220,7 +221,7 @@
 				, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
 				, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.SHIP_COMP_CD, Z.GIFT_PACK_YN, Z.SHIP_COMP_NM, Z.INVOICE_NO
 				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.ORD_DTL_STAT_NM, Z.REVIEW_SQ
-				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM, Z.DELV_ADDR_SQ
+				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM, Z.DELV_ADDR_SQ, Z.PAY_STAT
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.PAY_STAT
 	</select>
 
@@ -335,6 +336,7 @@
 			 , DF.REAL_DELV_AMT
 			 , P.PAY_AMT
 			 , P.NPAY_PNT_AMT
+			 , P.PG_CPN_AMT
 		  FROM TB_ORDER_DETAIL OD
 		  LEFT OUTER JOIN (
 			  SELECT ORD_NO
@@ -347,8 +349,9 @@
 		    ON OD.ORD_NO = DF.ORD_NO
 		  LEFT OUTER JOIN (
 		      SELECT ORD_NO
-		           , SUM(PAY_AMT)    AS PAY_AMT
+		           , SUM(PAY_AMT)         AS PAY_AMT
 		           , SUM(NPAY_PNT_AMT)    AS NPAY_PNT_AMT
+		           , SUM(PG_CPN_AMT)      AS PG_CPN_AMT
 		        FROM TB_PAYMENT
 		       WHERE ORD_NO = #{ordNo}
 		       GROUP BY ORD_NO
@@ -445,6 +448,9 @@
 		    ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
 		   AND OD.ORD_NO = #{ordNo}
 		   AND OD.ORD_EXCH_GB = 'O'
+		<if test="ordDtlNo != null and ordDtlNo != ''">
+		   AND OD.ORD_DTL_NO = #{ordDtlNo}
+		</if>
 		<if test="supplyCompCd != null and supplyCompCd != ''">
 		   AND OD.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>

+ 12 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -98,7 +98,9 @@
 		             , OD.CHANGEABLE_YN
 		             , OD.RETURNABLE_YN
 		             , G.SELF_GOODS_YN
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                             AS BRAND_NM
 		             , IFNULL(OCD.ORD_REQ_CHG_QTY, 0)                                   AS ORD_REQ_CHG_QTY
 		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
 		             , CA.BANK_CD
@@ -116,6 +118,9 @@
 		            ON OD.GOODS_CD = G.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON B.BRAND_CD = G.BRAND_CD
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 		                                , SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 		                             FROM TB_ORDER_CHANGE_DETAIL OCD
@@ -241,7 +246,9 @@
 		             , OD.CHANGEABLE_YN
 		             , OD.RETURNABLE_YN
 		             , G.SELF_GOODS_YN
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                                  AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                                   AS BRAND_NM
 		             , IFNULL(OCD.ORD_REQ_CHG_QTY, 0)                                         AS ORD_REQ_CHG_QTY
 		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)          AS ORD_CAN_CHG_QTY
 		             , CA.BANK_CD
@@ -262,6 +269,9 @@
 		            ON OD.GOODS_CD = G.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON B.BRAND_CD = G.BRAND_CD
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN TB_DELV_FEE_POLICY DFP
 		            ON OD.DELV_FEE_CD = DFP.DELV_FEE_CD
 		           AND OD.SUPPLY_COMP_CD = DFP.SUPPLY_COMP_CD

+ 121 - 64
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -354,7 +354,9 @@
 		SELECT CASE WHEN NEW_CUST_YN = 'N' THEN
 		                'Y' /*접근가능*/
 		            ELSE
-		                CASE WHEN NOW() BETWEEN CUST_JOIN_STDT AND CUST_JOIN_EDDT THEN
+		                CASE WHEN (SELECT JOIN_DT 
+		                           FROM TB_CUSTOMER C
+		                           WHERE C.CUST_NO = #{custNo}) BETWEEN CUST_JOIN_STDT AND CUST_JOIN_EDDT THEN
 		                         'Y' /*접근가능*/
 		                     ELSE
 		                         'N' /*접근불가*/
@@ -394,11 +396,35 @@
 		                       WHEN 'G110_30' THEN 'SILVER'
 		                       WHEN 'G110_40' THEN 'BRONZE'
 		                       WHEN 'G110_50' THEN 'WELCOME'
+		                       WHEN 'G110_60' THEN '비회원'
 		                       END AS CUST_GRADE
 		FROM TB_PLAN_CUST_GRADE 
 		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 +755,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">
@@ -1027,7 +1050,8 @@
 		                         , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
 		                                WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
 		                                WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		                                ELSE '신상'
+		                                WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		                                ELSE '총알배송'
 		                           END                               AS BENEFIT_NM
 		                         , RANK() OVER(PARTITION BY PG.GOODS_CD
 		                                       ORDER BY GB.BENEFIT_GB
@@ -1075,13 +1099,45 @@
 		       ) Z
 	</select>
 	
-	<!-- 총알배송 html 소스  -->
-	<select id="getShotDeliveryHtml" parameterType="Plan" resultType="Plan">
+	<!-- 총알배송 상단 html 소스  -->
+	<select id="getShotDeliveryHtmlTop" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getShotDeliveryHtml */
+		SELECT P.PLAN_SQ 
+		      ,P.PLAN_NM 
+		      ,PC.PLAN_CONT_SQ 
+		      ,PF.DISP_YN
+		      ,PF.FRONT_GB 
+		      ,PF.FSRC_PC 
+		      ,PF.FSRC_MOB 
+		FROM TB_PLAN P INNER JOIN TB_PLAN_CONTENTS PC ON P.PLAN_SQ = PC.PLAN_SQ 
+		                                              AND P.PLAN_SQ = PC.PLAN_SQ
+		               INNER JOIN TB_PLAN_FSRC PF ON P.PLAN_SQ = PF.PLAN_SQ 
+		                                              AND P.PLAN_SQ = PF.PLAN_SQ
+		WHERE 1=1
+		  AND P.PLAN_GB = 'S'
+		  AND P.DEL_YN = 'N'
+		        <if test="frontGb != null and frontGb != ''">
+		            <if test='frontGb == "P"'> <!-- PC웹 -->
+		        AND    P.FRONT_GB IN ('A','P')
+		            </if>
+		            <if test='frontGb == "A" or frontGb == "M"'> <!-- 모바일 -->
+		        AND    P.FRONT_GB IN ('A','M')
+		            </if>
+		        </if>
+		  AND P.OPEN_YN ='Y'
+		  AND PF.FRONT_GB = 'T'
+		  AND PF.DISP_YN ='Y'
+		  AND P.SITE_CD = #{siteCd}
+	</select>
+	
+	<!-- 총알배송 하단 html 소스  -->
+	<select id="getShotDeliveryHtmlBtm" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getShotDeliveryHtml */
 		SELECT P.PLAN_SQ 
 		      ,P.PLAN_NM 
 		      ,PC.PLAN_CONT_SQ 
 		      ,PF.DISP_YN
+		      ,PF.FRONT_GB 
 		      ,PF.FSRC_PC 
 		      ,PF.FSRC_MOB 
 		FROM TB_PLAN P INNER JOIN TB_PLAN_CONTENTS PC ON P.PLAN_SQ = PC.PLAN_SQ 
@@ -1100,6 +1156,7 @@
 		            </if>
 		        </if>
 		  AND P.OPEN_YN ='Y'
+		  AND PF.FRONT_GB = 'B'
 		  AND PF.DISP_YN ='Y'
 		  AND P.SITE_CD = #{siteCd}
 	</select>

+ 274 - 162
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -47,173 +47,285 @@
 	<!-- 적립내역 조회-->
 	<select id="getAccumulatePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAccumulatePointList */
-		SELECT  CASE CPH.OCCUR_GB
-					WHEN 'G069_11' THEN '구매 취소'
-		            WHEN 'G069_12' THEN '상품 구매'
-		            WHEN 'G069_20' THEN '리뷰'
-		            WHEN 'G069_30' THEN '이벤트'
-		            WHEN 'G069_31' THEN '회원가입'
-		            WHEN 'G069_32' THEN '생일'
-		            WHEN 'G069_35' THEN 'APP'
-		            WHEN 'G069_37' THEN '이벤트'
-		            WHEN 'G069_41' THEN '구매 취소'
-		            WHEN 'G069_43' THEN '구매 취소'
-		            WHEN 'G069_44' THEN '관리자'
-		            WHEN 'G069_90' THEN '관리자'
-		       END                                          AS OCCUR_GB
-		    , CASE CPH.OCCUR_GB
-					WHEN 'G069_11' THEN G.GOODS_NM
-		            WHEN 'G069_12' THEN G.GOODS_NM
-		            WHEN 'G069_20' THEN G.GOODS_NM
-		            WHEN 'G069_30' THEN '이벤트'
-		            WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_37' THEN '출석체크'
-		            WHEN 'G069_41' THEN G.GOODS_NM
-		            WHEN 'G069_43' THEN FR.GOODS_NM
-		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
-		       END                                          AS  OCCUR_DTL_DESC
-		     , CPH.PNT_AMT
-		     , CPH.REG_DT AS PNT_UPLOAD_DT
-		FROM TB_CUST_POINT_HST CPH
-		LEFT JOIN TB_ORDER_DETAIL OD
-		ON  CPH.ORD_NO = OD.ORD_NO
-		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
-		LEFT JOIN TB_GOODS G
-		ON  OD.GOODS_CD = G.GOODS_CD
-		LEFT JOIN (SELECT FG.GOODS_NM
-		                 ,OFV.ORD_NO 
-		           FROM TB_ORD_FREEGIFT_VAL OFV
-		           INNER JOIN TB_FREE_GOODS FG
-		           ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
-		           AND OFV.PRODUCT_NO = FG.PRODUCT_NO
-		           )FR ON CPH.ORD_NO = FR.ORD_NO
-
-		WHERE CPH.CUST_NO = #{custNo}
-		AND CPH.PNT_AMT > 0
-		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY CPH.REG_DT
-		ORDER BY CPH.REG_DT DESC
+		SELECT Z.*
+		FROM (
+		       SELECT  CASE CPH.OCCUR_GB
+		                    WHEN 'G069_20' THEN '리뷰'
+		                    WHEN 'G069_30' THEN '이벤트'
+		                    WHEN 'G069_31' THEN '회원가입'
+		                    WHEN 'G069_32' THEN '생일'
+		                    WHEN 'G069_35' THEN 'APP'
+		                    WHEN 'G069_36' THEN '상품 구매'
+		                    WHEN 'G069_37' THEN '이벤트'
+		                    WHEN 'G069_40' THEN '상품 구매'
+		                    WHEN 'G069_41' THEN '구매 취소'
+		                    WHEN 'G069_42' THEN '사은품'
+		                    WHEN 'G069_43' THEN '사은품'
+		                    WHEN 'G069_44' THEN '관리자'
+		                    WHEN 'G069_45' THEN '관리자'
+		                    WHEN 'G069_46' THEN '적립취소'
+		                    WHEN 'G069_90' THEN '기타'
+		                    WHEN 'G069_99' THEN '소멸'
+		                    END                                          AS OCCUR_GB
+		               ,CASE CPH.OCCUR_GB
+		                   WHEN 'G069_20' THEN G.GOODS_NM
+		                   WHEN 'G069_30' THEN '이벤트'
+		                   WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_36' THEN G.GOODS_NM
+		                   WHEN 'G069_37' THEN '출석체크'
+		                   WHEN 'G069_40' THEN G.GOODS_NM
+		                   WHEN 'G069_41' THEN G.GOODS_NM
+		                   WHEN 'G069_42' THEN FR.GOODS_NM
+		                   WHEN 'G069_43' THEN FR.GOODS_NM
+		                   WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_45' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_99' THEN '유효기간 경과 소멸'
+		                   END                                          AS  OCCUR_DTL_DESC
+		            , CPH.PNT_AMT
+		            , CPH.UPD_DT AS PNT_UPLOAD_DT
+		       FROM TB_CUST_POINT_HST CPH
+		       LEFT JOIN TB_ORDER_DETAIL OD
+		       ON  CPH.ORD_NO = OD.ORD_NO
+		       AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		       LEFT JOIN TB_GOODS G
+		       ON  OD.GOODS_CD = G.GOODS_CD
+		       LEFT JOIN (SELECT FG.GOODS_NM
+		                        ,OFV.ORD_NO
+		                  FROM TB_ORD_FREEGIFT_VAL OFV
+		                  INNER JOIN TB_FREE_GOODS FG
+		                  ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		                  AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		                  )FR ON CPH.ORD_NO = FR.ORD_NO
+		       WHERE CPH.CUST_NO = #{custNo}
+		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
+		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		       AND CPH.PNT_AMT <![CDATA[>]]> 0
+		UNION ALL
+		      SELECT  CASE CPH.OCCUR_GB
+		                  WHEN 'G069_12' THEN '상품 구매'
+		                  WHEN 'G069_13' THEN '구매 취소'
+		                 END                                          AS OCCUR_GB
+		            , CASE CPH.OCCUR_GB
+		                  WHEN 'G069_12' THEN G.GOODS_NM
+		                  WHEN 'G069_13' THEN G.GOODS_NM
+		                 END                                          AS  OCCUR_DTL_DESC
+		           , SUM(CPH.PNT_AMT)
+		           , CPH.UPD_DT AS PNT_UPLOAD_DT
+		      FROM TB_CUST_POINT_HST CPH
+		      LEFT JOIN TB_ORDER_DETAIL OD
+		      ON  CPH.ORD_NO = OD.ORD_NO
+		      AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		      LEFT JOIN TB_GOODS G
+		      ON  OD.GOODS_CD = G.GOODS_CD
+		      LEFT JOIN (SELECT FG.GOODS_NM
+		                       ,OFV.ORD_NO
+		                 FROM TB_ORD_FREEGIFT_VAL OFV
+		                 INNER JOIN TB_FREE_GOODS FG
+		                 ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		                 AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		                 )FR ON CPH.ORD_NO = FR.ORD_NO
+		      WHERE CPH.CUST_NO = #{custNo}
+		        AND CPH.SWITCH_DUE_DT IS NOT NULL
+		        AND CPH.OCCUR_GB IN ('G069_12','G069_13')
+		        AND CPH.PNT_UPLOAD_STAT = 'G070_30'
+		        AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		        AND CPH.PNT_AMT <![CDATA[>]]> 0
+		) Z
+		WHERE Z.PNT_UPLOAD_DT IS NOT NULL
+		ORDER BY Z.PNT_UPLOAD_DT DESC	
 	</select>
 	
 	<!-- 사용내역 조회-->
 	<select id="getUsePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getUsePointList */
-		SELECT  CASE CPH.OCCUR_GB
-		            WHEN 'G069_10' THEN '상품 구매'
-		            WHEN 'G069_13' THEN '구매 취소'
-		            WHEN 'G069_21' THEN '리뷰'
-		            WHEN 'G069_36' THEN '상품 구매'
-		            WHEN 'G069_40' THEN '상품 구매'
-		            WHEN 'G069_42' THEN '사은품'
-		            WHEN 'G069_46' THEN '적립취소'
-		            WHEN 'G069_90' THEN '관리자'
-		            WHEN 'G069_99' THEN '소멸'
-		       END                                          AS OCCUR_GB
-		     , CASE CPH.OCCUR_GB
-		            WHEN 'G069_10' THEN G.GOODS_NM
-		            WHEN 'G069_13' THEN G.GOODS_NM
-		            WHEN 'G069_21' THEN G.GOODS_NM
-		            WHEN 'G069_36' THEN G.GOODS_NM
-		            WHEN 'G069_40' THEN G.GOODS_NM
-		            WHEN 'G069_42' THEN FR.GOODS_NM
-		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_99' THEN '유효기간 경과 소멸'
-		       END                                          AS  OCCUR_DTL_DESC
-		     , CPH.PNT_AMT
-		     , CPH.REG_DT AS PNT_UPLOAD_DT
-		FROM TB_CUST_POINT_HST CPH
-		LEFT JOIN TB_ORDER_DETAIL OD
-		ON  CPH.ORD_NO = OD.ORD_NO
-		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
-		LEFT JOIN TB_GOODS G
-		ON  OD.GOODS_CD = G.GOODS_CD
-		LEFT JOIN (SELECT FG.GOODS_NM
-		                 ,OFV.ORD_NO 
-		           FROM TB_ORD_FREEGIFT_VAL OFV
-		           INNER JOIN TB_FREE_GOODS FG
-		           ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
-		           AND OFV.PRODUCT_NO = FG.PRODUCT_NO
-		           )FR ON CPH.ORD_NO = FR.ORD_NO
-		WHERE CPH.CUST_NO = #{custNo}
-		AND CPH.PNT_AMT <![CDATA[<]]> 0
-		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY CPH.ORD_NO, CPH.REG_DT
-		ORDER BY CPH.REG_DT DESC
+		SELECT Z.*
+		FROM (
+		       SELECT  CASE CPH.OCCUR_GB
+		                    WHEN 'G069_20' THEN '리뷰'
+		                    WHEN 'G069_30' THEN '이벤트'
+		                    WHEN 'G069_31' THEN '회원가입'
+		                    WHEN 'G069_32' THEN '생일'
+		                    WHEN 'G069_35' THEN 'APP'
+		                    WHEN 'G069_36' THEN '상품 구매'
+		                    WHEN 'G069_37' THEN '이벤트'
+		                    WHEN 'G069_40' THEN '상품 구매'
+		                    WHEN 'G069_41' THEN '구매 취소'
+		                    WHEN 'G069_42' THEN '사은품'
+		                    WHEN 'G069_43' THEN '사은품'
+		                    WHEN 'G069_44' THEN '관리자'
+		                    WHEN 'G069_45' THEN '관리자'
+		                    WHEN 'G069_46' THEN '적립취소'
+		                    WHEN 'G069_90' THEN '기타'
+		                    WHEN 'G069_99' THEN '소멸'
+		                    END                                          AS OCCUR_GB
+		               ,CASE CPH.OCCUR_GB
+		                   WHEN 'G069_20' THEN G.GOODS_NM
+		                   WHEN 'G069_30' THEN '이벤트'
+		                   WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_36' THEN G.GOODS_NM
+		                   WHEN 'G069_37' THEN '출석체크'
+		                   WHEN 'G069_40' THEN G.GOODS_NM
+		                   WHEN 'G069_41' THEN G.GOODS_NM
+		                   WHEN 'G069_42' THEN FR.GOODS_NM
+		                   WHEN 'G069_43' THEN FR.GOODS_NM
+		                   WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_45' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_99' THEN '유효기간 경과 소멸'
+		                   END                                          AS  OCCUR_DTL_DESC
+		            , CPH.PNT_AMT
+		            , CPH.UPD_DT AS PNT_UPLOAD_DT
+		       FROM TB_CUST_POINT_HST CPH
+		       LEFT JOIN TB_ORDER_DETAIL OD
+		       ON  CPH.ORD_NO = OD.ORD_NO
+		       AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		       LEFT JOIN TB_GOODS G
+		       ON  OD.GOODS_CD = G.GOODS_CD
+		       LEFT JOIN (SELECT FG.GOODS_NM
+		                        ,OFV.ORD_NO
+		                  FROM TB_ORD_FREEGIFT_VAL OFV
+		                  INNER JOIN TB_FREE_GOODS FG
+		                  ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		                  AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		                  )FR ON CPH.ORD_NO = FR.ORD_NO
+		       WHERE CPH.CUST_NO = #{custNo}
+		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
+		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		       AND CPH.PNT_AMT <![CDATA[<]]> 0
+		UNION ALL
+		      SELECT  CASE CPH.OCCUR_GB
+		                  WHEN 'G069_12' THEN '상품 구매'
+		                  WHEN 'G069_13' THEN '구매 취소'
+		                 END                                          AS OCCUR_GB
+		            , CASE CPH.OCCUR_GB
+		                  WHEN 'G069_12' THEN G.GOODS_NM
+		                  WHEN 'G069_13' THEN G.GOODS_NM
+		                 END                                          AS  OCCUR_DTL_DESC
+		           , SUM(CPH.PNT_AMT)
+		           , CPH.UPD_DT AS PNT_UPLOAD_DT
+		      FROM TB_CUST_POINT_HST CPH
+		      LEFT JOIN TB_ORDER_DETAIL OD
+		      ON  CPH.ORD_NO = OD.ORD_NO
+		      AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		      LEFT JOIN TB_GOODS G
+		      ON  OD.GOODS_CD = G.GOODS_CD
+		      LEFT JOIN (SELECT FG.GOODS_NM
+		                       ,OFV.ORD_NO
+		                 FROM TB_ORD_FREEGIFT_VAL OFV
+		                 INNER JOIN TB_FREE_GOODS FG
+		                 ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		                 AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		                 )FR ON CPH.ORD_NO = FR.ORD_NO
+		      WHERE CPH.CUST_NO = #{custNo}
+		        AND CPH.SWITCH_DUE_DT IS NOT NULL
+		        AND CPH.OCCUR_GB IN ('G069_12','G069_13')
+		        AND CPH.PNT_UPLOAD_STAT = 'G070_30'
+		        AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		        AND CPH.PNT_AMT <![CDATA[<]]> 0
+		) Z
+		WHERE Z.PNT_UPLOAD_DT IS NOT NULL
+		ORDER BY Z.PNT_UPLOAD_DT DESC	
 	</select>
 	
 	<!-- 전체내역 조회-->
 	<select id="getAllPointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAllPointList */
-		SELECT  CASE CPH.OCCUR_GB
-		            WHEN 'G069_10' THEN '상품 구매'
-		            WHEN 'G069_11' THEN '구매 취소'
-		            WHEN 'G069_12' THEN '상품 구매'
-		            WHEN 'G069_13' THEN '구매 취소'
-		            WHEN 'G069_20' THEN '리뷰'
-		            WHEN 'G069_21' THEN '리뷰'
-		            WHEN 'G069_30' THEN '이벤트'
-		            WHEN 'G069_31' THEN '회원가입'
-		            WHEN 'G069_32' THEN '생일'
-		            WHEN 'G069_35' THEN 'APP'
-		            WHEN 'G069_36' THEN '상품 구매'
-		            WHEN 'G069_37' THEN '이벤트'
-		            WHEN 'G069_40' THEN '상품 구매'
-		            WHEN 'G069_41' THEN '구매 취소'
-		            WHEN 'G069_42' THEN '사은품'
-		            WHEN 'G069_43' THEN '사은품'
-		            WHEN 'G069_44' THEN '관리자'
-		            WHEN 'G069_45' THEN '관리자'
-		            WHEN 'G069_46' THEN '적립취소'
-		            WHEN 'G069_90' THEN '관리자'
-		            WHEN 'G069_99' THEN '소멸'
-		       END                                          AS OCCUR_GB
-     , CASE CPH.OCCUR_GB
-                    WHEN 'G069_10' THEN G.GOODS_NM
-		            WHEN 'G069_11' THEN G.GOODS_NM
-		            WHEN 'G069_12' THEN G.GOODS_NM
-		            WHEN 'G069_13' THEN G.GOODS_NM
-		            WHEN 'G069_20' THEN G.GOODS_NM
-		            WHEN 'G069_21' THEN G.GOODS_NM
-		            WHEN 'G069_30' THEN '이벤트'
-		            WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_36' THEN G.GOODS_NM
-		            WHEN 'G069_37' THEN '출석체크'
-		            WHEN 'G069_40' THEN G.GOODS_NM
-		            WHEN 'G069_41' THEN G.GOODS_NM
-		            WHEN 'G069_42' THEN FR.GOODS_NM
-		            WHEN 'G069_43' THEN FR.GOODS_NM
-		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_45' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
-		            WHEN 'G069_99' THEN '유효기간 경과 소멸'
-		       END                                          AS  OCCUR_DTL_DESC
-		     , CPH.PNT_AMT
-		     , CPH.REG_DT AS PNT_UPLOAD_DT
-		FROM TB_CUST_POINT_HST CPH
-		LEFT JOIN TB_ORDER_DETAIL OD
-		ON  CPH.ORD_NO = OD.ORD_NO
-		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
-		LEFT JOIN TB_GOODS G
-		ON  OD.GOODS_CD = G.GOODS_CD
-		LEFT JOIN (SELECT FG.GOODS_NM
-		                 ,OFV.ORD_NO 
-		           FROM TB_ORD_FREEGIFT_VAL OFV
-		           INNER JOIN TB_FREE_GOODS FG
-		           ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
-		           AND OFV.PRODUCT_NO = FG.PRODUCT_NO
-		           )FR ON CPH.ORD_NO = FR.ORD_NO
-		WHERE CPH.CUST_NO = #{custNo}
-		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY CPH.REG_DT
-		ORDER BY CPH.REG_DT DESC
-	</select>
+		SELECT Z.*
+		FROM (
+		       SELECT  CASE CPH.OCCUR_GB
+		                    WHEN 'G069_20' THEN '리뷰'
+		                    WHEN 'G069_30' THEN '이벤트'
+		                    WHEN 'G069_31' THEN '회원가입'
+		                    WHEN 'G069_32' THEN '생일'
+		                    WHEN 'G069_35' THEN 'APP'
+		                    WHEN 'G069_36' THEN '상품 구매'
+		                    WHEN 'G069_37' THEN '이벤트'
+		                    WHEN 'G069_40' THEN '상품 구매'
+		                    WHEN 'G069_41' THEN '구매 취소'
+		                    WHEN 'G069_42' THEN '사은품'
+		                    WHEN 'G069_43' THEN '사은품'
+		                    WHEN 'G069_44' THEN '관리자'
+		                    WHEN 'G069_45' THEN '관리자'
+		                    WHEN 'G069_46' THEN '적립취소'
+		                    WHEN 'G069_90' THEN '기타'
+		                    WHEN 'G069_99' THEN '소멸'
+		                    END                                          AS OCCUR_GB
+		               ,CASE CPH.OCCUR_GB
+		                   WHEN 'G069_20' THEN G.GOODS_NM
+		                   WHEN 'G069_30' THEN '이벤트'
+		                   WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_36' THEN G.GOODS_NM
+		                   WHEN 'G069_37' THEN '출석체크'
+		                   WHEN 'G069_40' THEN G.GOODS_NM
+		                   WHEN 'G069_41' THEN G.GOODS_NM
+		                   WHEN 'G069_42' THEN FR.GOODS_NM
+		                   WHEN 'G069_43' THEN FR.GOODS_NM
+		                   WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_45' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
+		                   WHEN 'G069_99' THEN '유효기간 경과 소멸'
+		                   END                                          AS  OCCUR_DTL_DESC
+		            , CPH.PNT_AMT
+		            , CPH.UPD_DT AS PNT_UPLOAD_DT
+		       FROM TB_CUST_POINT_HST CPH
+		       LEFT JOIN TB_ORDER_DETAIL OD
+		       ON  CPH.ORD_NO = OD.ORD_NO
+		       AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		       LEFT JOIN TB_GOODS G
+		       ON  OD.GOODS_CD = G.GOODS_CD
+		       LEFT JOIN (SELECT FG.GOODS_NM
+		                        ,OFV.ORD_NO
+		                  FROM TB_ORD_FREEGIFT_VAL OFV
+		                  INNER JOIN TB_FREE_GOODS FG
+		                  ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		                  AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		                  )FR ON CPH.ORD_NO = FR.ORD_NO
+		       WHERE CPH.CUST_NO = #{custNo}
+		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
+		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		UNION ALL
+		      SELECT  CASE CPH.OCCUR_GB
+		                  WHEN 'G069_12' THEN '상품 구매'
+		                  WHEN 'G069_13' THEN '구매 취소'
+		                 END                                          AS OCCUR_GB
+		            , CASE CPH.OCCUR_GB
+		                  WHEN 'G069_12' THEN G.GOODS_NM
+		                  WHEN 'G069_13' THEN G.GOODS_NM
+		                 END                                          AS  OCCUR_DTL_DESC
+		           , SUM(CPH.PNT_AMT)
+		           , CPH.UPD_DT AS PNT_UPLOAD_DT
+		      FROM TB_CUST_POINT_HST CPH
+		      LEFT JOIN TB_ORDER_DETAIL OD
+		      ON  CPH.ORD_NO = OD.ORD_NO
+		      AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		      LEFT JOIN TB_GOODS G
+		      ON  OD.GOODS_CD = G.GOODS_CD
+		      LEFT JOIN (SELECT FG.GOODS_NM
+		                       ,OFV.ORD_NO
+		                 FROM TB_ORD_FREEGIFT_VAL OFV
+		                 INNER JOIN TB_FREE_GOODS FG
+		                 ON OFV.PRODUCT_CODE = FG.PRODUCT_CODE
+		                 AND OFV.PRODUCT_NO = FG.PRODUCT_NO
+		                 )FR ON CPH.ORD_NO = FR.ORD_NO
+		      WHERE CPH.CUST_NO = #{custNo}
+		        AND CPH.SWITCH_DUE_DT IS NOT NULL
+		        AND CPH.OCCUR_GB IN ('G069_12','G069_13')
+		        AND CPH.PNT_UPLOAD_STAT = 'G070_30'
+		        AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		) Z
+		WHERE Z.PNT_UPLOAD_DT IS NOT NULL
+		ORDER BY Z.PNT_UPLOAD_DT DESC	
+		</select>
 
 	<!-- 고객 포인트 내역 -->
 	<select id="getCustomerPoint" parameterType="Integer" resultType="Point">
@@ -239,20 +351,20 @@
 		               SELECT SUM(RM_PNT_AMT)
 		               FROM   TB_CUST_POINT
 		               WHERE  CUST_NO = C.CUST_NO
-		               AND    EXP_BE_DT <![CDATA[<]]> NOW()
-		               AND    EXP_CMP_DT IS NOT NULL
+		               AND    (EXP_BE_DT <![CDATA[<]]> NOW() OR EXP_CMP_DT IS NOT NULL)
 		               ), 0)                           AS EXPIRE_PNT_AMT -- 소멸포인트
 		     , IFNULL((
 		               SELECT SUM(CPH.PNT_AMT) AS PNT_AMT
 		               FROM   TB_CUST_POINT_HST CPH
-		               WHERE  CPH.OCCUR_GB IN ('G069_12', 'G069_13')       -- 적립예정, 적립취소
+		               WHERE  CPH.CUST_NO = C.CUST_NO
 		               AND    CPH.PNT_UPLOAD_STAT IN ('G070_10')           -- 반영예정
-		               AND    CPH.CUST_NO = #{custNo}
+		               AND    CPH.OCCUR_GB IN ('G069_12', 'G069_13')       -- 적립예정, 적립취소
 		               ), 0)                           AS EXPECTED_PNT_AMT -- 적립예정포인트
 		     , IFNULL((
 		                SELECT SUM(RM_PNT_AMT) AS RM_PNT_AMT
 		                FROM  TB_CUST_POINT
-		                WHERE EXP_BE_DT > NOW()
+		                WHERE CUST_NO = C.CUST_NO
+		                AND   EXP_BE_DT > NOW()
 		                AND   EXP_BE_DT <![CDATA[<]]> DATE_ADD(NOW(),INTERVAL 31 DAY)
 		               ), 0)                          AS EXPECTED_EXPIRE_PNT_AMT -- 소멸예정포인트(30일)
 		FROM   TB_CUSTOMER C

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

@@ -55,7 +55,7 @@
 		            AND REVIEW_SQ = R.REVIEW_SQ
 		            AND (FILE_GB  = 'I'
 		                 OR
-		                 FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'
+		                 FILE_GB = 'M' AND R.CONFIRM_YN = 'Y' AND NULLIF(KMC_KEY,'') IS NOT NULL 
 		                )
 		            )
 		</if>
@@ -167,7 +167,7 @@
 		                    AND RPA.REVIEW_SQ = RP.REVIEW_SQ
 		                    AND (RPA.FILE_GB  = 'I'
 		                         OR
-		                         RPA.FILE_GB = 'M' AND RP.CONFIRM_YN = 'Y'  AND  RPA.KMC_KEY IS NOT NULL
+		                         RPA.FILE_GB = 'M' AND RP.CONFIRM_YN = 'Y'  AND  NULLIF(RPA.KMC_KEY,'') IS NOT NULL
 		                        )
 		                    )
 		        </if>
@@ -246,13 +246,13 @@
 		<if test="reviewHeight != null and reviewHeight != ''">
 		 <![CDATA[
 		AND R.HEIGHT >= #{reviewHeightSt}
-		AND R.HEIGHT < #{reviewHeightEd}
+		AND R.HEIGHT <= #{reviewHeightEd}
 		]]>
 		</if>
 		<if test="reviewWeight != null and reviewWeight != ''">
 		<![CDATA[
 		AND R.WEIGHT >= #{reviewWeightSt}
-		AND R.WEIGHT < #{reviewWeightEd}
+		AND R.WEIGHT <= #{reviewWeightEd}
 		]]>
 		</if>
 		)Z
@@ -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
@@ -425,7 +425,9 @@
 					 , OD.CHANGEABLE_YN
 					 , OD.RETURNABLE_YN
 					 , G.SELF_GOODS_YN
-			         , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
+			         , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                       ELSE BG.BRAND_GROUP_KNM
+		               END                                                             AS BRAND_NM
 			         , B.BRAND_ENM
 					 , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
 					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
@@ -446,6 +448,8 @@
 				    ON OD.GOODS_CD = G.GOODS_CD
 				 INNER JOIN TB_BRAND B
 				    ON B.BRAND_CD = G.BRAND_CD
+				 INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
 				 LEFT JOIN TB_ITEMKIND I 
 				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
 				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
@@ -480,7 +484,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 +908,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
@@ -1014,7 +1018,9 @@
 		                  , OD.CHANGEABLE_YN
 		                  , OD.RETURNABLE_YN
 		                  , G.SELF_GOODS_YN
-		                  , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
+		                  , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                       ELSE BG.BRAND_GROUP_KNM
+		                        END                                                             AS BRAND_NM
 		                  , B.BRAND_ENM
 		                  , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
 		                  , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
@@ -1082,6 +1088,8 @@
 		      ON OD.GOODS_CD = G.GOODS_CD
 		   INNER JOIN TB_BRAND B
 		      ON B.BRAND_CD = G.BRAND_CD
+		    INNER JOIN TB_BRAND_GROUP BG
+		      ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
 		   INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
 		  	AND R.ORD_NO = O.ORD_NO
 		  	AND R.ORD_DTL_NO = OD.ORD_DTL_NO 

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

@@ -127,7 +127,8 @@
 		                         , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
 		                                WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
 		                                WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		                                ELSE '신상'
+		                                WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		                                ELSE '총알배송'
 		                           END                               AS BENEFIT_NM
 		                         , RANK() OVER(PARTITION BY PG.GOODS_CD
 		                                       ORDER BY GB.BENEFIT_GB

+ 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
 

+ 85 - 0
src/main/resources/config/application-style.yml

@@ -0,0 +1,85 @@
+spring:
+    profiles:
+        active: style
+    cache.type: redis
+    redis:
+        lettuce:
+            pool:
+                max-active: 10
+                max-idle: 10
+                min-idle: 2
+        host: 172.30.87.5
+        port: 6379
+        password: MdxpyGtipZSci6VhTpFdklXxb4Qv7zxEq3Jqg3ULekg=
+
+# SSL Server
+has-ssl: false
+
+logging:
+    config: classpath:log/logback-run.xml
+
+domain:
+    admin: //bos.style24.com
+    front: //www.style24.com
+    image: //image.istyle24.com
+    uximage: //www.style24.com
+
+
+upload:
+    default:
+        target.path: /usr/local/data/style24
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        view: //image.istyle24.com
+    goods:
+        target.path: /usr/local/data/style24/productimage
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png
+        view: //image.istyle24.com/Upload/ProductImage
+    image:
+        target.path: /usr/local/data/style24
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png
+        view: //image.istyle24.com
+    excel:
+        target.path: /usr/local/data/style24/excel
+        max.size: 10
+        allow.extension: xls|xlsx
+        view: //image.istyle24.com/excel
+    sample:
+        target.path: /usr/local/data/style24/sample
+        max.size: 10
+        allow.extension: txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        view: //image.style24.com/sample
+
+download.path: /usr/local/data
+
+# USAFE 보증보험 정보
+usafe.guarantee:
+    mall.id: TEST00
+    send.url: http://gateway.usafe.co.kr/esafe/guartrn.asp
+
+
+# PG
+pg:
+    kcp:
+        log.dir: /logs/style24/kcpLogs/front
+        gw:
+            url: testpaygw.kcp.co.kr
+            port: 8090
+        js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
+        server: false
+        site:
+            cd: U3476
+            key:
+            name: KCP TEST SHOP
+        log.level: 3
+        module.type: 01
+        tx.mode: 0
+
+# 네이버페이 API
+naverPay:
+    apiUrl: https://dev.apis.naver.com/
+    payUrl:
+        web : test-pay.naver.com
+        mob : test-m.pay.naver.com

+ 2 - 1
src/main/resources/config/application-tsit.yml

@@ -23,7 +23,8 @@ domain:
 #    front: //tdfront.style24.com
     front: //ts5000.ipdisk.co.kr
     image: //tdimage.style24.com
-    uximage: //tdimage.style24.com
+#    uximage: //tdimage.style24.com
+    uximage: //ts5000.ipdisk.co.kr
 
 upload:
     default:

+ 46 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/GnbSubGoodsMob.html

@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GnbSubMob.html
+ * @desc    : GNB Sub (모바일용)
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.08   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<th:block th:fragment="gnb">
+	<header class=" "> <!-- 서브페이지에서는 <header>의 클래스.main 제거 -->
+			<section class="htop" id="htopSub">
+				<button class="btn_back" title="이전페이지로">
+					<span><i class="gl1"></i><i class="gl2"></i><i class="gl3"></i></span>
+				</button>
+				<h1 id="htopTitle"></h1>
+				<div class="button_wrap">
+					<button type="button" class="home" style="display: inline-block;" onclick="cfnGoToPage(_PAGE_MAIN);">
+						<img src="/images/mo/ico_btn_home.png" alt="홈">
+					</button>
+					<button type="button" class="search">
+						<img src="/images/mo/ico_btn_search.png" alt="검색">
+					</button>
+					<button type="button" class="store">
+						<img src="/images/mo/ico_btn_store.png" alt="쇼핑백">
+						<span>99+</span> 
+					</button>
+				</div>
+			</section>
+		</header>	
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+/*]]>*/
+</script>
+
+</th:block>
+
+</html>

+ 1 - 22
src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html

@@ -11,28 +11,7 @@
 	
 	<div class="app">
 		<!-- GNB -->
-			
-		<header class=" "> <!-- 서브페이지에서는 <header>의 클래스.main 제거 -->
-			<section class="htop" id="htopSub">
-				<button class="btn_back" title="이전페이지로">
-					<span><i class="gl1"></i><i class="gl2"></i><i class="gl3"></i></span>
-				</button>
-				<h1 id="htopTitle"></h1>
-				<div class="button_wrap">
-					<button class="home">
-						<img src="/images/mo/ico_btn_home.png" alt="홈">
-					</button>
-					<button class="search">
-						<img src="/images/mo/ico_btn_search.png" alt="검색">
-					</button>
-					<button class="store">
-						<img src="/images/mo/ico_btn_store.png" alt="쇼핑백">
-						<span>99+</span>
-					</button>
-				</div>
-			</section>
-		</header>
-
+		<th:block th:replace="~{mob/common/fragments/GnbSubGoodsMob :: gnb}"></th:block>
 		<!--// GNB -->
 		
 		<!-- CONTENT AREA -->

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/display/AllBrandFormMob.html

@@ -76,7 +76,7 @@
 		if(!gagajf.isNull(brandGroupNm)){
 			actionUrl += '?brandGroupNm='+brandGroupNm;
 		}
-
+		$("#idNodata").hide();
 		$.getJSON(actionUrl
 				, function(result, status){
 					if(result.length>0){

+ 11 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html

@@ -449,6 +449,9 @@
 	<!-- //바닥메뉴 -->
 </main>
 
+<!-- 바로구매 및 선물하기 장바구니 등록 정보 저장을 위한 form -->
+<form id="directOrderForm" method="POST" action="/order/noMember"></form>
+
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
@@ -780,7 +783,14 @@
 			return false;
 		});
 			
-			
+
+	      //관심상품 등록
+        $(document).on('click','.pd .itemLike',function(e){
+            $(this).toggleClass('active');
+            return false;
+        });   
+      
+	      
 			// 광고 스크립트용
 			var goodsNavigation = [[${goodsNavigation}]];
 			var cate1Nm = "";

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html

@@ -67,7 +67,7 @@
 					</tr>
 					<tr>
 						<th>반품/교환 주소</th>
-						<td><th:block th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null}" th:text="${deliveryInfo.rtnLocZipcode +' '+ deliveryInfo.rtnLocBaseAddr +'<br/>'+ deliveryInfo.rtnLocDtlAddr }"></th:block></td>
+						<td><th:block th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null}" th:utext="${deliveryInfo.rtnLocZipcode +' '+ deliveryInfo.rtnLocBaseAddr +' '+ deliveryInfo.rtnLocDtlAddr }"></th:block></td>
 					</tr>
 				</tbody></table>
 			</div>

+ 191 - 69
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -42,11 +42,23 @@
 		<!-- 210409_ 구조변경 : .pd_info, .pd_info1 추가  -->
 		<div class="pd_info">
 			<div class="pd_info1" data-speed="10">
-				<div class="inner wide" th:if="${goodsImgList != null and !goodsImgList.empty}">
+				<div class="inner wide" th:if="${(goodsImgList != null and !goodsImgList.empty) or (goodsVideoList != null and !goodsVideoList.empty)}">
 					<div class="thumb_box">
 						<div class="area_slider">
 							<div class="swiper-container thumb_list">
 								<div class="swiper-wrapper">
+									<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+										<div class="swiper-slide">
+											<div class="movbox">
+												<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+												<iframe id="prodctThumbVideo" class="pd_mov" width="100%" height="100%" th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0&autoplay=1&mute=1'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+												</th:block>
+												<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+												<iframe id="child" class="pd_mov" width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?enable_initialize_focus=false&autoplay&mute&controls_activation=none'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+												</th:block>
+											</div>
+										</div>
+									</th:block>
 									<th:block th:each="goodsImg, status : ${goodsImgList}">
 									<div class="swiper-slide" th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1') 
 																or #strings.contains(goodsImg.sysImgNm,'_L1')
@@ -69,7 +81,6 @@
 						<p>
 							<span class="tt">남은시간</span>
 							<span class="timer">
-								<em id="d-days">0</em>
 								<em id="d-hours">0</em>
 								<em id="d-minutes">0</em>
 								<em id="d-seconds">0</em>
@@ -106,7 +117,7 @@
 						<ul>
 							<li th:each="goodsOption1, status : ${goodsOption1List}">
 								<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-									<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="">
+									<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</a>
 							</li>
 						</ul>
@@ -123,8 +134,8 @@
 							<div th:each="goodsOption2, status : ${goodsOption2List}">
 								<input type="radio" name="opt"  th:id="${goodsOption2.optCd}" th:disabled="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" 
 										th:attr="addPrice=${goodsOption2.addPrice}, optCd1=${goodsOption2.optCd1}, optCd2=${goodsOption2.optCd2}, optCd=${goodsOption2.optCd}"
-										th:onclick="fnViewStock(this, [[${goodsInfo.goodsCd}]],[[${goodsOption2.optCd}]],[[${goodsOption2.optCd1}]],[[${goodsOption2.optCd2}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]] )" />
-								<label th:for="${goodsOption2.optCd}"><span th:text="${goodsOption2.optCd2}">90</span></label>
+										 />
+								<label th:for="${goodsOption2.optCd}" th:onclick="fnViewStock(this, [[${goodsInfo.goodsCd}]],[[${goodsOption2.optCd}]],[[${goodsOption2.optCd1}]],[[${goodsOption2.optCd2}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]] )"><span th:text="${goodsOption2.optCd2}">90</span></label>
 							</div>
 						</div>
 					</div>
@@ -137,7 +148,9 @@
 									(tmtbList != null and !tmtbList.empty) or
 									(freeGoodsList != null and !freeGoodsList.empty)}" >
 				<div class="benefit_box">
-					<dl class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or (tmtbList != null and !tmtbList.empty)}">
+					<dl class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or
+													(tmtbList != null and !tmtbList.empty) or
+													(freeGoodsList != null and !freeGoodsList.empty)}" >
 						<dt>쇼핑혜택</dt>
 						<dd>
 							<th:block th:if="${goodsCouponList != null and !goodsCouponList.empty}">
@@ -154,11 +167,11 @@
 							</th:block>
 							<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 							<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
+							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="${'외 택1'}"></th:block></span>
 							<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 						</dd>
 					</dl>
-					<dl class="bnf_card">
+					<dl class="bnf_card"  th:if="${cardInfoList != null and !cardInfoList.empty}">
 						<dt>카드혜택</dt>
 						<dd>
 							<th:block th:each="cardInfo, status : ${cardInfoList}">
@@ -502,7 +515,7 @@
 		<div class="inner">
 			
 			<!-- 리뷰영역 -->
-			<div class="riview_box">
+			<div class="riview_box" th:if="${reviewDisplayYn == 'Y'}">
 				<div class="ex_review">
 					<a href="javascript:void(0);" id="btn_pdReview_pop" th:onclick="cfGoodsReview([[${goodsInfo.goodsCd}]])">	
 						<span class="tit">리뷰 <em class="number">(<th:block  th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</em></span>
@@ -635,13 +648,23 @@
 							<div class="swiper-container"  th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}">
 								<div class="swiper-wrapper">
 									<div class="swiper-slide" th:each="lookbookGoods, goodsStatus : ${lookbook.lookbookGoodsList}" >
-										<div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''" 
-																th:attr="goodsCd=${lookbookGoods.goodsCd}, optCd=${lookbookGoods.optCd}, minOrdQty=${lookbookGoods.minOrdQty},  goodsType=${lookbookGoods.goodsType}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}">
+										<div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''"
+																					th:attr="goodsCd=${lookbookGoods.goodsCd}, optCdInfo=${lookbookGoods.optCdInfo},
+																							minOrdQty=${lookbookGoods.minOrdQty},  goodsType=${lookbookGoods.goodsType}, 
+																							ithrCd=${ithrCd}, contentsLoc=${contentsLoc}"> <!-- 판매불가 상품에 unable 추가 -->
 											<div class="item_state">
+												<th:block th:each="optCd : ${#strings.arraySplit(lookbookGoods.optCdInfo,',')}">
+												<input type="hidden" name="lookbookGoodsOptCd" th:value="${optCd}"/>  
+												</th:block>
 												<button type="button" class="itemLike" th:classappend="${lookbookGoods.wishYn == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${lookbookGoods.goodsCd}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}, planDtlSq=''">관심상품 추가</button>
-												<a href="javascript:void(0)" class="itemLink">
+												<th:block th:if="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}">
+												<a href="javascript:void(0);" class="itemLink" >
+												</th:block>
+												<th:block th:unless="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}">
+												<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${lookbookGoods.goodsCd}]], '',[[${ithrCd}]],[[${contentsLoc}]] )">
+												</th:block>
 													<div class="itemPic">
-														<img class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														<img class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm+'?RS=96'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<p class="itemBrand" th:text="${lookbookGoods.brandGroupNm}">BRAND NAME</p>
 													<div class="itemName" th:text="${lookbookGoods.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
@@ -752,7 +775,7 @@
 						</th:block>
 					</div>
 					<!-- 네이버결제 -->
-					<div class="npay_box">
+					<div class="npay_box"  style="display:none;">
 						<div class="np_head">
 							<div><img src="/images/mo/img_npay_txt.png" alt="NAVER 네이버 ID로 간편구매 네이버페이"></div>
 							<div><button><img src="/images/mo/btn_npay_txt.png" alt="Npay 구매"></button></div>
@@ -797,7 +820,7 @@
 												<div class="combo">
 													<div class="select">선택</div>
 													<ul class="list" style="display: none;">
-														<li class="selected" th:id="|selfGoodsOpt1${goodsInfo.goodsCd}|" >선택</li> 
+														<!-- <li class="selected" th:id="|selfGoodsOpt1${goodsInfo.goodsCd}|" >선택</li>  -->
 														<th:block th:each="goodsOption, optionStatus : ${goodsOption1List}" >
 														<li th:onclick="fnOption2([[${optionStatus.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
 															th:attr="aria-disabled=${(goodsOption.goodsStat != 'G008_90' or goodsOption.stockQty <= 0)? 'true':''}, data-soldout=${(goodsOption.goodsStat != 'G008_90'  or goodsOption.stockQty <= 0)? 'true':''}">
@@ -836,7 +859,7 @@
 													<div class="select">선택</div>
 													<ul class="list" style="display: none;">
 														<th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
-														<li class="selected" th:id="|selfGoodsOpt1${goodsCompose.compsGoodsCd}|" th:if=${optionStatus.first}>선택</li> 
+														<!-- <li class="selected" th:id="|selfGoodsOpt1${goodsCompose.compsGoodsCd}|" th:if=${optionStatus.first}>선택</li> --> 
 														<li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
 															th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
 															><th:block th:text="${goodsOption.optCd1Nm}"></th:block>
@@ -879,9 +902,7 @@
 						</p>
 					</div>
 					<div class="btn_box">
-						<button class="gift">
-							<span><span>선물해보세요!</span></span>
-						</button>
+						<button type="button" class="gift" onclick="fnAddCart('G');" th:if="${goodsInfo.giftPackYn == 'Y'}"><span><span>선물해보세요!</span></span></button>
 						<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 							<button type="button" class="cart" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 							<button type="button" class="buyNow" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
@@ -908,7 +929,7 @@
 		</div>
 		<div class="prd_buy">
 			<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
-			<button type="button" class="buying btPop_auto">구매하기</button>
+			<button type="button" class="buying btPop_auto" id="btn_purchase">구매하기</button>
 			</th:block>
 			<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 			<button type="button" class="cantbuying" style="display:block;">SOLD OUT</button>
@@ -946,6 +967,8 @@
 		
 </main>
 
+<!-- 바로구매 및 선물하기 장바구니 등록 정보 저장을 위한 form -->
+<form id="directOrderForm" method="POST" action="/order/noMember"></form>
 <script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
@@ -1187,6 +1210,7 @@
 				
 				fnSetTotalPrice();
 				
+				$('.pop_option_select').css("display", "none");
 			}); 
 		}
 	}
@@ -1243,7 +1267,7 @@
 						tag += '<div class="select">선택</div>\n';
 						tag += '<ul class="list" style="display: none;">\n';
 						//------
-						tag += '<li class="selected" id="selfGoodsOpt'+item.goodsCd+'">선택</li>\n';
+						//tag += '<li class="selected" id="selfGoodsOpt'+item.goodsCd+'">선택</li>\n';
 						selfGoodsYn = item.selfGoodsYn;
 					}
 					let soldoutYn = ""; 
@@ -1281,34 +1305,34 @@
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						var opt_selecter01_1 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_1');	
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_1 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true);
-						$('.pop_option_select .select_custom.item_opt1.item_opt1_1').addClass('on');
-						$('.pop_option_select .select_custom.item_opt1.item_opt1_1').find('.list').css('display','block');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_1 .combo .list > li').eq(0).trigger("click");
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true);
+						//$('.pop_option_select .select_custom.item_opt1.item_opt1_1').addClass('on');
+						//$('.pop_option_select .select_custom.item_opt1.item_opt1_1').find('.list').css('display','block');
 					}else if (ridx == 2){
 						var opt_selecter01_2 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_2');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_2 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_2').attr('disabled',true);
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_2 .combo .list > li').eq(0).trigger("click");
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_2').attr('disabled',true);
 					}else if (ridx == 3){
 						var opt_selecter01_3 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_3');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_3 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_3').attr('disabled',true);
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_3 .combo .list > li').eq(0).trigger("click");
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_3').attr('disabled',true);
 					}else if (ridx == 4){
 						var opt_selecter01_4 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_4');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true);
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_4 .combo .list > li').eq(0).trigger("click");
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true);
 					}else{
 						var opt_selecter01_5 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_5');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true);
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_4 .combo .list > li').eq(0).trigger("click");
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true);
 					}
 					
 				}else{
 					var opt_selecter01_1 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_1');
-					$('.pop_option_select .select_custom.item_opt2 .combo .list > li').eq(0).trigger("click");
-					$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true);
-					$('.pop_option_select .select_custom.item_opt1.item_opt1_1').addClass('on');
-					$('.pop_option_select .select_custom.item_opt1.item_opt1_1').find('.list').css('display','block');
+					//$('.pop_option_select .select_custom.item_opt2 .combo .list > li').eq(0).trigger("click");
+					//$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true);
+					//$('.pop_option_select .select_custom.item_opt1.item_opt1_1').addClass('on');
+					//$('.pop_option_select .select_custom.item_opt1.item_opt1_1').find('.list').css('display','block');
 				}	
 				
 			}
@@ -1368,7 +1392,7 @@
 						tag += '<div class="select">선택</div>\n';
 						tag += '<ul class="list">\n';
 						//------
-						tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
+						//tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
 					}
 					let soldoutYn = ""; 
 					let saleQty = (Number(qty) * Number(minOrdQty));
@@ -1399,30 +1423,30 @@
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						var opt_selecter02_1 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_1');	
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_1').addClass('on');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_1').addClass('on');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
 					}else if (ridx == 2){
 						var opt_selecter02_2 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_2');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_2').addClass('on');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_2').find('.list').css('display','block');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_2').addClass('on');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_2').find('.list').css('display','block');
 					}else if (ridx == 3){
 						var opt_selecter02_3 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_3');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_3').addClass('on');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_3').find('.list').css('display','block');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_3').addClass('on');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_3').find('.list').css('display','block');
 					}else if (ridx == 4){
 						var opt_selecter02_4 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_4');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').addClass('on');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').find('.list').css('display','block');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_4').addClass('on');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_4').find('.list').css('display','block');
 					}else{
 						var opt_selecter02_5 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_5');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_5').addClass('on');
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_5').find('.list').css('display','block');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_5').addClass('on');
+						//$('.pop_option_select .select_custom.item_opt2.item_opt2_5').find('.list').css('display','block');
 					}
 					
 				}else{
 					var opt_selecter02_1 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_1');
-					$('.pop_option_select .select_custom.item_opt2.item_opt2_1').addClass('on');
-					$('.pop_option_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
+					//$('.pop_option_select .select_custom.item_opt2.item_opt2_1').addClass('on');
+					//$('.pop_option_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
 				}	
 			}
 			
@@ -1677,34 +1701,91 @@
 		
 		let $obj = $(obj);
 		let $target = $obj.parent().parent().parent().find('.swiper-container').find('.item_prod');
+		let goodsSize = $target.length;
 		let btnType = "C";
 		let params = [];
+		let goodsIdx = 0;
 		
 		$target.each(function(){
+			goodsIdx ++; 
 			if ($(this).hasClass('unable')) {
 				
 			}else{
 				
-				let obj = new Object();
-				obj.goodsCd = $(this).attr("goodsCd");
-				obj.optCd = $(this).attr("optCd");
-				obj.goodsQty = $(this).attr("minOrdQty");
-				obj.goodsType = $(this).attr("goodsType");
-				obj.cartGb = btnType;
-				obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
-				obj.ithrCd = $(this).attr("ithrCd");
-				obj.contentsLoc = $(this).attr("contentsLoc");
-				obj.planDtlSq = '';
-				params.push(obj);
+				// 옵션확인
+				let goodsCnt = $(this).find('input[name=lookbookGoodsOptCd]').length;
+				if (goodsCnt == 1){
+					let arrOpt = $(this).find('input[name=lookbookGoodsOptCd]').val();
+					let arrOptInfo = arrOpt.split(':');
+					
+					let obj = new Object();
+					obj.goodsCd = $(this).attr("goodsCd");
+					//obj.optCd = $(this).attr("optCd");
+					obj.optCd = arrOptInfo[1];
+					obj.goodsQty = $(this).attr("minOrdQty");
+					obj.goodsType = $(this).attr("goodsType");
+					obj.cartGb = btnType;
+					obj.afLinkCd = '';
+					obj.ithrCd = $(this).attr("ithrCd");
+					obj.contentsLoc = $(this).attr("contentsLoc");
+					obj.planDtlSq = '';
+					obj.multiGoodsGb = 'O'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+					if (goodsIdx == goodsSize){
+						obj.multiGoodsGb = 'E'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+					}
+					params.push(obj);
+					
+					// 장바구니담기
+					cfnAddCart(params);	
+				}else{
+					let $goods = $(this);
+					let cartGoodsList = [];
+					let compsList = [];
+					let goodsList = {
+						cartCompsList : new Array()
+					}
+					
+					let arrInfo = $(this).find('input[name=lookbookGoodsOptCd]').val().split(',');	// 상품코드단위
+					
+					
+					$.each(arrInfo, function(idx, item) {
+						let arrOptInfo = item.split(':');
+						
+						let obj = new Object();
+						obj.cartGb = btnType;
+						obj.goodsType = $goods.attr("goodsType");
+						obj.goodsCd = $goods.attr("goodsCd");
+						obj.itemCd =arrOptInfo[0];
+						obj.optCd = arrOptInfo[1];
+						obj.goodsQty = $goods.attr("minOrdQty");
+						obj.afLinkCd = '';
+						obj.ithrCd =  $goods.attr("ithrCd");
+						obj.contentsLoc = $goods.attr("contentsLoc");
+						obj.planDtlSq = ''
+						obj.multiGoodsGb = 'O'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+						if (goodsIdx == goodsSize){
+							obj.multiGoodsGb = 'E'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+						}
+						compsList.push(obj);
+						
+					});
+
+					goodsList.cartCompsList = compsList;
+					cartGoodsList.push(goodsList);
+					
+					// 장바구니담기
+					cfnAddCart(cartGoodsList);
+				}
+			
 			}
 		});
 		
 		// 장바구니담기
-		if (params.length > 0){
+		/* if (params.length > 0){
 			cfnAddCart(params);	
-		}
+		} */
 	}
-	
+	 
 	$(document).ready( function() {
 		
 		$('.timer_box').css('display', 'none');
@@ -1764,10 +1845,9 @@
 					if (seconds < '10') { seconds = '0' + seconds; }
 	
 					if (Number(days) > 0 ){
-						$('#d-days').html(days);	
-					}else{
-						$('#d-days').css('display','none');
+						hours = Number(hours) + (Number(days) * 24);
 					}
+					
 					$('#d-hours').html(hours);
 					$('#d-minutes').html(minutes);
 					$('#d-seconds').html(seconds);		
@@ -1892,8 +1972,8 @@
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
 			$(".Purchase_pop .pop_option_select").show(); 
-			$(".Purchase_pop .pop_option_select").find('.select_custom.item_opt1.item_opt1_1').addClass('on');
-			$(".Purchase_pop .pop_option_select").find('.select_custom.item_opt1.item_opt1_1 .list').css('display','block');
+			//$(".Purchase_pop .pop_option_select").find('.select_custom.item_opt1.item_opt1_1').addClass('on');
+			//$(".Purchase_pop .pop_option_select").find('.select_custom.item_opt1.item_opt1_1 .list').css('display','block');
 			return false;
 		});
 		
@@ -1902,6 +1982,14 @@
 			return false;
 		});
 
+		 //관심상품 등록
+        $(document).on('click','.pd .itemLike',function(e){
+            $(this).toggleClass('active');
+            return false;
+        });   
+
+       
+        
 		fnOptionSoldout();
 		
 		// 광고 스크립트용
@@ -1982,6 +2070,40 @@
 		fnEpCouponDown([[${afLinkCd}]], [[${params.goodsCd}]], 1);
 	});
 	
+	 $('.Purchase_pop .btPop_close').click(function(){
+			$('html, body').css({'overflow': 'visible', 'height': '100%'});
+			$('.container').removeClass('btPop_open');
+			autome.style.top  = 100 + "%";
+			return false;
+		});
+     
+     $(window).scroll(function(){
+		var lastScrollTop = 0;
+		var st = $(this).scrollTop();
+		if($('header').hasClass("main") !== true){
+			if (st > lastScrollTop){
+				$(".app .gnb").css("position", "fixed");
+				$(".htop").css("background", "#fff");
+				$(".app .gnb .btn-expand").css("position", "fixed");
+				$(".tabbar").removeClass("fixed");
+			} else {
+				$(".app .gnb").css("position", "fixed");
+				$(".htop").css("background", "#fff");
+				$(".app .gnb .btn-expand").css("position", "fixed");
+				$(".tabbar").addClass("fixed");
+				setTimeout(function(){
+					if($(window).scrollTop() === 0){
+						$(".app .gnb").css("position", "relative");
+						$(".app .gnb .btn-expand").css("position", "absolute");
+					}
+				},300)
+			}
+			if(st < 10) {
+				$(".htop").css("background", "transparent");
+			}
+			lastScrollTop = st;
+		}
+     });
 /*]]>*/
 </script>
 

+ 28 - 22
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -17,7 +17,7 @@
 <!-- 상품문의 리스트 내용 -->
 <form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 <input type="hidden" name="pageNo"  value ="1"/>
-<input type="hidden" name="pageSize" value ="3"/>
+<input type="hidden" name="pageSize" value ="20"/>
 <input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 <div class="pd_qnalist">
 	<div class="info_txt">
@@ -33,7 +33,7 @@
 		<!-- 나열조건결과 있을 때 노출 내용 -->
 		<div class="yesdata">
 			<div class="form_field check_secret">
-				<input id="except_secret" type="checkbox"><label for="except_secret" onclick="fnGetList();"><span>비밀글제외</span></label>
+				<input id="except_secret" name="except_secret" type="checkbox"  onclick="fnSecretGoodsQnaList();"><label for="except_secret"><span>비밀글제외</span></label>
 				<input  type="hidden" name="secretYn" >
 			</div>
 			<div class="ui_row">
@@ -55,12 +55,8 @@
 			</div>
 		</div>
 		<!-- //나열조건결과 없을 때 노출 내용 -->
-		<div class="btn_group_flex"  style="display:none;">
-			<div>
-				<button type="button" class="btn btn_default" id="btnMore">
-					<span>더보기</span>
-				</button>
-			</div>
+		<div class="ui_foot"  style="display:none;">
+			<button class="btn btnIcon_more"  id="btnMore">더보기</button>
 		</div>
 	</div>
 	<div class="btn_group_flex">
@@ -71,18 +67,16 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	var fnGoodsQnaListSearch = function() {
-
-		$('#goodsQnaForm  input[name="secretYn"]').val('');
-		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){
-			$('#goodsQnaForm  input[name="secretYn"]').val('N');
-		}
-		
+	var fnGoodsQnaList = function() {
 		gagajf.ajaxFormSubmit($('#goodsQnaForm').prop('action'), '#goodsQnaForm', fnGetListCallback);
 	}
 
 	var fnGetListCallback = function(result) {
 
+		if (result.dataList != null && result.dataList.length > 0) {
+		if (result.paging.pageable.pageNo == 1){
+			$('#ulGoodsQna').html('');
+		}	
 		$.each(result.dataList, function(idx, item) {
 			$('#goodsQnaForm').find('.nodata').hide();
 			let tag = '';
@@ -135,24 +129,36 @@
 			
 			$('#ulGoodsQna').append(tag);
 		});
+			if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
+				$('#btnMore').parent().show();
+				$('#goodsQnaForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
+			}
 		
-		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
-			$('#btnMore').parent().parent().show();
-			$('#goodsQnaForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
-		} else {
+		}else{
 			$('.nodata').show();
-			$('#btnMore').parent().parent().hide();
+			$('#btnMore').parent().hide();
 		}
 	}
 	
+	//
+	var fnSecretGoodsQnaList = function(){
+		$('#goodsQnaForm  input[name="secretYn"]').val('');
+		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){
+			$('#goodsQnaForm  input[name="secretYn"]').val('N');
+		}
+		
+		$('#goodsQnaForm input[name=pageNo]').val(1);
+		fnGoodsQnaList();
+	}
+	
 	// 더보기
 	$('#btnMore').on('click', function() {
-		fnGoodsQnaListSearch();
+		fnGoodsQnaList();
 	});
 	
 	
 	$(document).ready( function() {
-		fnGoodsQnaListSearch();
+		fnGoodsQnaList();
 	});
 	
 	

+ 2 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html

@@ -44,6 +44,7 @@
 	<!-- //등록리뷰 없을 시 -->
 	<!-- 등록리뷰 있을 시 -->
 	<div class="area_rv_average" th:if="${reviewList != null and !reviewList.empty}">
+		<th:block th:if="${goodsInfo.reviewRegCnt > 0}">
 		<h6 class="sr-only">구매평점</h6>
 		<div class="star_score">
 			<span class="tit">구매평점</span>
@@ -52,6 +53,7 @@
 				<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
 			</span>
 		</div>
+		</th:block>
 		<!-- 착용정보 있을 시 노출 -->
 		<th:block th:if="${not #strings.isEmpty(goodsInfo.sizeGb)}">
 		<div class="average">

+ 2 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html

@@ -21,7 +21,7 @@
 	<th:block th:if="${params.goodsOtherGb =='like'}" th:text="${'이 상품과 비슷한 상품'}"></th:block>
 	</h3>
 	<div class="area_slider">
-		<div class="swiper-container swiper-container-initialized swiper-container-horizontal">
+		<div class="swiper-container">
 			<div class="swiper-wrapper">
 				<div class="swiper-slide" th:each="goodsInfo, status : ${goodsList}">
 					<div class="item_prod">
@@ -77,6 +77,7 @@
 			slidesPerView: 3,
 			spaceBetween: 8,
 		});	 
+		
 	});
 	
 /*]]>*/

+ 2 - 10
src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaDetailFormMob.html

@@ -33,7 +33,7 @@
 				<div class="form_field">
 					<div class="input_box">
 						<div class="lap">
-							<textarea class="doc_itemqna"  name="questContent" cols="30" rows="10" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
+							<textarea class="doc_itemqna"  name="questContent" cols="30" rows="10"  maxlength="500" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
 							<p class="txt_cnt">
 								<span id="itemqna_cnt" class="itemqna_cnt" ><em class="c_primary">0</em>/500자</span>
 							</p>   
@@ -78,7 +78,7 @@
 	$('.pd_qnawrite_pop .doc_itemqna').keyup(function (e){
 		let contentQna = $(this).val();
 		$('.itemqna_cnt').html("(<em class='c_primary'>"+contentQna.length+"</em>/500자)");
-		
+		debugger;
 		if (contentQna.length > 500){
 			alert("최대 500자까지 입력 가능합니다.");
 			$(this).val(contentQna.substring(0, 500));
@@ -88,14 +88,6 @@
 	
 	// 저장
 	var fnGoodsQnaSave = function() {
-		/*// 테스트용
-		 		gagajf.ajaxFormSubmit($('#goodsQnaDetailForm').prop('action')
-				, $('#goodsQnaDetailForm')
-				, function() {
-					mcxDialog.alert("상품 문의가 등록되었습니다. 빠른 시일 내에 답변드리겠습니다.");
-				}
-		);*/ 
-		
 		// 입력 값 체크
 		if (gagajf.isNull($("#goodsQnaDetailForm  textarea[name=questContent]").val())){
 			mcxDialog.alert("문의내용을 입력해주세요.");

+ 15 - 8
src/main/webapp/WEB-INF/views/mob/goods/GoodsShopBenefitFormMob.html

@@ -21,7 +21,7 @@
 		</div>
 		<div class="modal-body">
 			<div class="pop_cont">
-				<div class="benefit_blk" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or (goodsInfo.prePntUsableYn == 'Y')}">
+				<div class="benefit_blk" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or (goodsCoupon1List != null and !goodsCoupon1List.empty)}">
 					<h6>할인혜택</h6>
 					<div class="tbl type1">
 						<table>
@@ -30,9 +30,12 @@
 								<col width="*">
 							</colgroup>
 							<tbody>
-								<tr th:if="${(goodsInfo.prePntUsableYn == 'Y')}">
-									<th>즉시 할인</th>
-									<td th:text="|${#numbers.formatInteger(goodsInfo.pntAmt, 0,'COMMA')}원 할인|">50% 할인</td>
+								<tr th:if="${(goodsCoupon1List != null and !goodsCoupon1List.empty)}">
+									<th>즉시할인</th>
+									<td th:each="goodsCoupon, status : ${goodsCoupon1List}" th:if="${status.first}">최대
+									<th:block th:if="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${#numbers.formatInteger(goodsCoupon.dcVal, 0,'COMMA')}원|"></th:block>
+									<th:block th:unless="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${goodsCoupon.dcVal}%|"></th:block>
+									 할인</td>
 								</tr>
 								<tr th:if="${(goodsCouponList != null and !goodsCouponList.empty)}">
 									<th>쿠폰할인</th>
@@ -71,14 +74,18 @@
 								<col width="*">
 							</colgroup>
 							<tbody>
-								<tr  th:each="freeGoods, status : ${freeGoodsList}">
-									<th><th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시</th>
-									<td><p><th:block th:text="${freeGoods.goodsNm}"></th:block> <th:block th:text="${#numbers.formatInteger(freeGoods.itemQty, 0,'COMMA')}"></th:block>개 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></p></td>
+								<tr th:each="freeGoods, status : ${freeGoodsList}">
+									<th>
+										<th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시
+										<th:block th:each="goodsNm : ${#strings.arraySplit(freeGoods.freeGoods,',')}" th:with="goodsArray=${#strings.arraySplit(goodsNm,':')}">
+										<p><th:block th:text="${goodsArray[0]}"></th:block> <th:block th:text="${#numbers.formatInteger(goodsArray[1], 0,'COMMA')}"></th:block>개 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="${'외 택1'}"></th:block></p>
+										</th:block>
+									</th>
 								</tr>
 							</tbody>
 						</table>
 					</div>
-				</div>					 
+				</div>
 			</div>
 		</div>
 	</div>

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

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

@@ -0,0 +1,293 @@
+<!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 id="leaveIncomplete" class="message hide">
+				<p class="msg_tit t_err">
+					고객님께서는 진행중인 주문/취소/반품/교환건이<br>
+					<span id="totalCnt"></span>건 이상 확인이 되어 탈퇴오청이 불가능 합니다.
+				</p>
+				<div class="content">
+					<p>
+						진행중인 건이 종료된 후 다시 시도해 주세요.
+					</p>
+				</div>
+			</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;
+									<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>

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

@@ -358,8 +358,8 @@ function giftcardSave() {
 			gagajf.ajaxJsonSubmit(
 					'/mypage/gift/use/confirm', jsonData,
 					function() {
-						$("#gift_input").val('');
-						//cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);
+						//$("#gift_input").val('');
+						cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);
 					});
 		}
 	});
@@ -370,6 +370,7 @@ function giftcardSave() {
 
 /*<![CDATA[*/
 $(document).ready(function() {
+	$('#htopTitle').text('상품권');
 	// 전체내역 표시
 	$("#SearchUseGiftcard").trigger('click');
 	// 셀렉트박스 활성화

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

@@ -649,10 +649,10 @@
 											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.npayPntAmt, 1, 'COMMA')}|"></span>원</div></dd>
 										</div>
 									</th:block>
-									<th:block th:if="${paymentInfo.pgCpnAmt} > 0">
+									<th:block th:if="${orderAmtInfo.pgCpnAmt} > 0">
 										<div>
 											<dt>제휴 할인</dt>
-											<dd><div><span th:text="|- ${#numbers.formatInteger(paymentInfo.pgCpnAmt, 1, 'COMMA')}|"></span>원</div></dd>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.pgCpnAmt, 1, 'COMMA')}|"></span>원</div></dd>
 										</div>
 									</th:block>
 									<th:block th:if="${orderAmtInfo.savePntAmt} > 0">

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

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

@@ -34,15 +34,15 @@
 				<div class="list_content"> <!-- 데이터 없을시 클래스 nodata 추가 -->
 					<div class="count_wrap">
 						<div>
-							<p id="planningTotCnt"></p>
+							<p id="planningTotCnt">></p>
 						</div>
 					</div>
-					<div class="list_defult nodata" style="display: none;" id="divPlanningNoData">
-						<div>
-							<p>등록된 기획전이 없습니다.</p>
-						</div>
-						<button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>
-					</div>
+					 <div class="list_defult" style="display: none;" id="divPlanningNoData">
+                          <div>
+                              <p>등록된 기획전이 없습니다.</p>
+                          </div>
+                         <button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>
+                     </div>
 					<div class="list_item" style="display: none;" id="divPlanningList">
 					</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" th:if="${goodsList.size() > 5}"></div>
+							<!--<div class="swiper-scrollbar"></div>-->
 							<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span>
 						</div>
 					</div>

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

@@ -1,7 +1,7 @@
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org">
 <!-- 다다익선 할인 상품 보기 -->
-<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+<div class="modal-dialog tmtbSalesPopup" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="modal-content"><div class="modal-header">
 		<h5 class="modal-title" id="moresaleLabel">다다익선 상품</h5>
 	</div>
@@ -41,7 +41,7 @@
 							</div>
 						</div>
 						<!-- Add Scrollbar -->
-						<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>
+						<!--<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>-->
 						<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
 				</div>
 				<!-- -->
@@ -56,7 +56,7 @@
 				slidesPerView: 5,
 				spaceBetween: 20,
 				scrollbar: {
-					el: '.moresale_pop .swiper-scrollbar',
+					el: '.tmtbSalesPopup .swiper-scrollbar',
 					hide: true,
 				},
 			});

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

@@ -27,7 +27,7 @@
 				</a>
 			</div>
 			<div class="util_group">
-				<span><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);" title="STYLE24 홈화면 바로가기"><b>STYLE24</b></a></span>
+				<span><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);" title="STYLE24 홈화면 바로가기"><b>STYLE24</b></a></span>
 				<span th:if="${sessionInfo == null}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_LOGIN);" title="로그인 바로가기">로그인</a></span>
 				<span th:if="${sessionInfo != null}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_LOGOUT);" title="로그아웃">로그아웃</a></span>
 				<span th:if="${sessionInfo == null}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);" title="회원가입 바로가기">회원가입</a></span>

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

@@ -1389,6 +1389,7 @@
 	let fnGetPopup = function(){
 		let data = {viewPage : [[${viewPage}]]
 					,cateNo : [[${popupCateNo}]]
+					,brandCd : [[${popupBrandCd}]]
 					,planSq : [[${popupPlanSq}]]
 					,preview : [[${preview}]]
 					,viewDt : [[${viewDt}]]
@@ -1437,27 +1438,43 @@
 						}	
 					}
 					
-					/* SLIDE - 메인 공지 팝업 */
-					var popup_main_notice_slide = new Swiper ('.popup_main_notice .swiper-container', {
-						loop: false,
-						slidesPerView:'auto',
-						spaceBetween: 0,
-						speed:200,
-						autoplay: false,
-						navigation: {
-							nextEl: '.popup_main_notice .swiper-button-next',
-							prevEl: '.popup_main_notice .swiper-button-prev',
-						},
-					});	
-
-					/* 메인 공지 팝업 갯수체크 */
+					/* 메인 공지 팝업 갯수체크 210430_수정 */
 					var popNoticeCont = $('.popup_main_notice .swiper-slide');
 					var popNoticeLength = popNoticeCont.length;
-					if (popNoticeLength == 1) {
+					if (popNoticeLength < 4) {
 						popNoticeCont.parents('.popup_body').addClass('onlyNotice');
+						var popup_main_notice_slide = new Swiper ('.popup_main_notice .swiper-container', {
+							loop: false,
+							watchOverflow: true, //loop와 함께 사용 불가.
+							slidesPerView:'auto',
+							spaceBetween: 0,
+							speed:200,
+							autoplay: {
+								delay: 3000,
+								disableOnInteraction: false,
+							},
+							navigation: {
+								nextEl: '.popup_main_notice .swiper-button-next',
+								prevEl: '.popup_main_notice .swiper-button-prev',
+							},
+						});	
 					} else {
 						popNoticeCont.parents('.popup_body').removeClass('onlyNotice');
-					}
+						var popup_main_notice_slide = new Swiper ('.popup_main_notice .swiper-container', {
+							loop: true,
+							slidesPerView:'auto',
+							spaceBetween: 0,
+							speed:200,
+							autoplay: {
+								delay: 3000,
+								disableOnInteraction: false,
+							},
+							navigation: {
+								nextEl: '.popup_main_notice .swiper-button-next',
+								prevEl: '.popup_main_notice .swiper-button-prev',
+							},
+						});	
+					}	
 					
 				}
 			}

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

+ 7 - 1
src/main/webapp/WEB-INF/views/web/common/layout/MypageLayoutWeb.html

@@ -36,10 +36,16 @@
 			<input type="hidden" name="goodsCd"/>
 			<input type="hidden" name="reviewStat"/>
 		</form>
-		<form id="addPaymentForm" name="addPaymentForm" action="/order/addPaymentForm" method="post">
+		<form id="addPaymentForm" name="addPaymentForm" th:action="@{'/order/addPaymentForm'}" th:method="post">
 			<input type="hidden" name="ordNo"/>
 			<input type="hidden" name="ordChgSq"/>
 		</form>
+		<form id="deliveryInfoForm" name="deliveryInfoForm" th:action="@{'/mypage/delivery/info/form'}" th:method="post">
+			<input type="hidden" name="ordNo"/>
+			<input type="hidden" name="ordDtlNo"/>
+			<input type="hidden" name="shipCompCd"/>
+			<input type="hidden" name="invoiceNo"/>
+		</form>
 	</div>
 </div>
 

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

@@ -41,11 +41,11 @@
 			</div>
 			<div class="cont_body">
 				<div class="area_input">
-					<form id="searchBrandForm" name="searchBrandForm">
+					<form id="searchBrandForm" name="searchBrandForm" onsubmit="return false;">
 						<fieldset>
 							<legend>브랜드명 검색</legend>
-							<input type="text" id="search" name="search" value="" placeholder="브랜드명 입력" class="search_input" title="검색어 입력" maxlength="100">
-							<button type="button" class="sch_btn" onclick="fnSearchBrand();"><span>브랜드 검색</span></button>
+							<input type="text" id="search" name="search" value="" placeholder="브랜드명 입력" class="search_input" title="검색어 입력" maxlength="100" onkeypress="if( window.event.keyCode==13 ){$('#btnSearch').trigger('click');}">
+							<button type="button" class="sch_btn" id="btnSearch"><span>브랜드 검색</span></button>
 						</fieldset>
 					</form>
 				</div>
@@ -101,17 +101,17 @@
 		fnCreateAllBrandList();
 	});
 
-	let fnSearchBrand = function(){
+	$('#btnSearch').on('click', function() {
 		var searchBrand = $("#searchBrandForm").find("input[name=search]").val();
 		fnCreateAllBrandList(searchBrand);
-	}
+	});
 
 	let fnCreateAllBrandList = function (brandGroupNm){
 		let actionUrl = '/display/all/brand/list'
 		if(!gagajf.isNull(brandGroupNm)){
 			actionUrl += '?brandGroupNm='+brandGroupNm;
 		}
-
+		$("#idNodata").hide();
 		$.getJSON(actionUrl
 			, function(result, status){
 					if(result.length>0){

+ 207 - 100
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -42,8 +42,8 @@
 														</dd>
 														<dd class="txt_xs" th:text="${ContentsData.subText1}"></dd>
 													</dl>
-													<button type="button" th:if="${ContentsData.contentsType=='SELF'}" class="btn" th:onclick="cfnGoToPage([[${ContentsData.strVar1}]]);"><span>자세히 보기</span></button>
-													<button type="button" th:unless="${ContentsData.contentsType=='SELF'}" class="btn" th:onclick="window.open(_frontUrl+[[${ContentsData.strVar1}]], '_blank','width=1180,height=800,toolbars=no,scrollbars=no'); return false;"><span>VIEW MORE</span></button>
+													<a th:if="${ContentsData.contentsType=='SELF'}" th:href="${ContentsData.strVar1}" target="_self" title="새 창으로 열기" class="btn"><span>자세히 보기</span></a>
+													<a th:unless="${ContentsData.contentsType=='SELF'}" th:href="${ContentsData.strVar1}" target="_blank" title="새 창으로 열기" class="btn"><span>자세히 보기</span></a>
 												</div>
 												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
 											</th:block>
@@ -76,9 +76,11 @@
 									<a th:if="${ContentsData.contentsType=='SELF'}" th:href="${ContentsData.strVar1}" target="_self">브랜드 사이트</a>
 									<a th:unless="${ContentsData.contentsType=='SELF'}" th:href="${ContentsData.strVar1}" target="_blank">브랜드 사이트</a>
 								</div>
-								<div class="brand_desc">
+								<div class="brand_desc" id="brandDesc">
 									<p class="cate" th:text="${ContentsData.strTitle1}"></p>
-									<p class="desc" th:text="${ContentsData.subText1}"></p>
+									<p class="desc" > <!--th:text="${ContentsData.subText1}"-->
+										<input type="hidden" name="brandNote" th:value="${ContentsData.subText1}"/>
+									</p>
 								</div>
 							</div>
 						</div>
@@ -87,7 +89,7 @@
 
 				<!-- new_item -->
 				<th:block th:if="${contentsLoc=='007'}">
-					<div class="content wide new_item" th:if="${brandMainLayoutData.goodsList != null}">
+					<div class="content new_item" th:if="${brandMainLayoutData.goodsList != null}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>
@@ -168,7 +170,7 @@
 												<div class="item_state">
 													<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM008', planDtlSq=''">관심상품 추가</button>
 													<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBM008');">
-														<div class="shape ranker"><span th:text="${goodsStat.index+1}"></span></div>
+														<div class="shape" th:classappend="${goodsStat.count==1}?'ranker'"><span th:text="${goodsStat.index+1}"></span></div>
 														<div class="itemPic">
 															<img alt="BLACK-a" class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
 														</div>
@@ -196,7 +198,7 @@
 
 				<!-- LOOKBOOK -->
 				<th:block th:if="${contentsLoc=='010'}">
-					<div class="content br_lookbook" th:if="${brandMainLayoutData.lookbookList != null and !brandMainLayoutData.lookbookList.empty}">
+					<div class="content wide br_lookbook" th:if="${brandMainLayoutData.lookbookList != null and !brandMainLayoutData.lookbookList.empty}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>
@@ -211,18 +213,19 @@
 													<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
 														<!--<button type="button" id="btn_lookbook_picker01" ><span class="ico ico_picker"></span></button>-->
 														<button type="button" th:onclick="fnGoodsPopup([[${lookbookGoods.sysImgNm}]],[[${lookbookGoods.brandGroupNm}]],[[${lookbookGoods.goodsFullNm}]],[[${lookbookGoods.listPrice}]],[[${lookbookGoods.currPrice}]],[[${lookbookGoods.dcRate}]],[[${lookbookGoods.goodsCd}]])"><span class="ico ico_picker"></span></button>
-														<!--id="btn_lookbook_picker01" <div class="pick_descr">
-															<a href="" th:text="${lookbookGoods.goodsNm}">
+<!--														<button type="button" th:onclick="fnLookbookPicker(this,[[${lookbookGoods.goodsCd}]]);"><span class="ico ico_picker"></span></button>-->
+														<div class="pick_descr">
+															<a href="javascript:void(0);">
 															</a>
-														</div>-->
+														</div>
 													</div>
 												</th:block>
 											</div>
 										</div>
 									</th:block>
 								</div>
-								<div class="swiper-button-prev"></div>
-								<div class="swiper-button-next"></div>
+								<div class="swiper-button-prev white"></div>
+								<div class="swiper-button-next white"></div>
 							</div>
 							<div class="swiper-pagination"></div>
 						</div>
@@ -411,83 +414,145 @@
 
 	<!-- lookbook_picker_상품_팝업 -->
 	<div class="modal fade br_lookbook_popup" id="brLookbookPopup" tabindex="-1" role="dialog" aria-labelledby="br_lookbook_label" aria-hidden="true">
-		<div class="modal-dialog" role="document">
-			<div class="modal-content">
-				<div class="modal-header">
-					<h5 class="modal-title sr-only" id="br_lookbook_label">상품정보</h5>
-				</div>
-				<div class="modal-body">
-					<div class="itemsGrp">
-						<div class="item_prod"> <!-- 품절일때 sold_out 클래스 추가 요청 -->
-							<div class="item_state">
-								<div class="itemLink">
-									<div class="itemPic">
-										<img alt="BLACK-a" class=" vLHTC pd_img" src="">
-									</div>
-									<p class="itemBrand"></p>
-									<div class="itemName"></div>
-									<span class="itemPrice_original"></span>
-									<p class="itemPrice">
-										<span class="itemPercent"></span>
-									</p>
-									<button type="button" class="btn btn_default"><span>자세히 보기</span></button>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
+<!--		<div class="modal-dialog" role="document">-->
+<!--			<div class="modal-content">-->
+<!--				<div class="modal-header">-->
+<!--					<h5 class="modal-title sr-only" id="br_lookbook_label">상품정보</h5>-->
+<!--				</div>-->
+<!--				<div class="modal-body">-->
+<!--					<div class="itemsGrp">-->
+<!--						<div class="item_prod"> &lt;!&ndash; 품절일때 sold_out 클래스 추가 요청 &ndash;&gt;-->
+<!--							<div class="item_state">-->
+<!--								<div class="itemLink">-->
+<!--									<div class="itemPic">-->
+<!--										<img alt="BLACK-a" class=" vLHTC pd_img" src="">-->
+<!--									</div>-->
+<!--									<p class="itemBrand"></p>-->
+<!--									<div class="itemName"></div>-->
+<!--									<span class="itemPrice_original"></span>-->
+<!--									<p class="itemPrice">-->
+<!--										<span class="itemPercent"></span>-->
+<!--									</p>-->
+<!--									<button type="button" class="btn btn_default"><span>자세히 보기</span></button>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--						</div>-->
+<!--					</div>-->
+<!--				</div>-->
+<!--			</div>-->
+<!--		</div>-->
 	</div>
 	<!-- //lookbook_picker_상품_팝업 -->
 
 <script th:inline="javascript">
 /*<![CDATA[*/
 var brandMainLayoutList = [[${brandMainLayoutList}]];
-//console.log('brandMainLayoutList::'+brandMainLayoutList);
 var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
 var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
-	$("#brLookbookPopup").modal("show");
-	$("#brLookbookPopup").find(".pd_img").attr('src',goodsImgUrl+'/'+obj1);
-	$("#brLookbookPopup").find(".itemBrand").text(obj2);
-	$("#brLookbookPopup").find(".itemName").text(obj3);
-	$("#brLookbookPopup").find(".itemPrice_original").text(obj4);
-	$("#brLookbookPopup").find(".itemPrice").text(obj5);
-	$("#brLookbookPopup").find(".itemPercent").text(obj6+'%');
-	$("#brLookbookPopup").find(".btn_default").attr('onclick','cfnGoToPage(_PAGE_GOODS_DETAIL+"'+obj7+'");');
+	$("#brLookbookPopup .modal-dialog").remove();
+	tag = '';
+
+	tag += '	<div class="modal-dialog" role="document">\n';
+	tag += '		<div class="modal-content">\n';
+	tag += '			<div class="modal-header">\n';
+	tag += '				<h5 class="modal-title sr-only" id="br_lookbook_label">상품정보</h5>\n';
+	tag += '			</div>\n';
+	tag += '			<div class="modal-body">\n';
+	tag += '				<div class="itemsGrp">\n';
+	tag += '					<div class="item_prod">\n';
+	tag += '						<div class="item_state">\n';
+	tag += '							<div class="itemLink">\n';
+	tag += '								<div class="itemPic">\n';
+	tag += '									<img alt="BLACK-a" class=" vLHTC pd_img" src="'+goodsImgUrl+'/'+obj1+'?RS=260" onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
+	tag += '								</div>\n';
+	tag += '								<p class="itemBrand">'+obj2+'</p>\n';
+	tag += '								<div class="itemName">'+obj3+'</div>\n';
+	tag += '								<span class="itemPrice_original">'+obj4.addComma()+'</span>\n';
+	tag += '								<p class="itemPrice">'+obj5.addComma()+'\n';
+	if(obj6>0){
+		tag += '									<span class="itemPercent">'+obj6+'%</span>\n';
+	}
+	tag += '								</p>\n';
+	tag += '								<button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\''+obj7+'\',\'\',\'\')"><span>자세히 보기</span></button>\n';
+	tag += '							</div>\n';
+	tag += '						</div>\n';
+	tag += '					</div>\n';
+	tag += '				</div>\n';
+	tag += '			</div>\n';
+	tag += '		</div>\n';
+	tag += '	</div>\n';
+
+	$("#brLookbookPopup").append(tag);
+	$('#brLookbookPopup').modal("show");
 }
+
 $(document).ready( function() {
 
 	// 컨텐츠 호출
 	//$("#br_header").load("br_head.html");
 	//$("#footer").load("foot.html");
 
-	/* SLIDE - BRAND_VISUAL */
-	var br_post_slide = new Swiper('.brand_main .brand_visual .post-visual', {
-		loop: true,
-		spaceBetween: 60,
-		slidesPerView: 'auto',
-		centeredSlides: true,
-		speed : 1000,
-		autoplay: {
-			delay: 3000,
-			disableOnInteraction: false,
-		},
-		navigation: {
-			nextEl: '.brand_main .brand_visual .swiper-button-next',
-			prevEl: '.brand_main .brand_visual .swiper-button-prev',
-		},
-		pagination: {
-			el: '.brand_main .brand_visual .swiper-pagination',
-			clickable: true,
-		},
+	/* 210503_수정 : 배너 2개 이상일시 자동 롤링 */
+	var postVisualCont = $('.brand_visual .post-visual .swiper-slide');
+	var postVisualLength = postVisualCont.length;
+	if (postVisualLength < 2) {
+		//배너 1개일 때
+		var br_post_slide = new Swiper('.brand_main .brand_visual .post-visual', {
+			loop: false,
+			watchOverflow : true,
+			spaceBetween: 60,
+			slidesPerView: 'auto',
+			centeredSlides: true,
+			speed : 1000,
+			autoplay: {
+				delay: 7000, //210422_수정 : delay 시간 늘림.
+				disableOnInteraction: false,
+			},
+			navigation: {
+				nextEl: '.brand_main .brand_visual .swiper-button-next',
+				prevEl: '.brand_main .brand_visual .swiper-button-prev',
+			},
+			pagination: {
+				el: '.brand_main .brand_visual .swiper-pagination',
+				clickable: true,
+			},
 
-		on: {
-			slideChangeTransitionStart: function () {
-				//$('.brand_main .post-visual .swiper-slide-prev .txtWrap').hide();
+			on: {
+				slideChangeTransitionStart: function () {
+					$('.brand_main .post-visual .swiper-slide-prev').css({'opacity':'0'});
+				},
+			},
+		});
+	}else{
+		//배너 1개 이상일 때
+		var br_post_slide = new Swiper('.brand_main .brand_visual .post-visual', {
+			loop: true,
+			spaceBetween: 60,
+			slidesPerView: 'auto',
+			centeredSlides: true,
+			speed : 1000,
+			//autoplay: {
+			//	delay: 7000, //210422_수정 : delay 시간 늘림.
+			//	disableOnInteraction: false,
+			//},
+			navigation: {
+				nextEl: '.brand_main .brand_visual .swiper-button-next',
+				prevEl: '.brand_main .brand_visual .swiper-button-prev',
+			},
+			pagination: {
+				el: '.brand_main .brand_visual .swiper-pagination',
+				clickable: true,
 			},
-		},
-	});
+
+			on: {
+				slideChangeTransitionStart: function () {
+					$('.brand_main .post-visual .swiper-slide-prev').css({'opacity':'0'});
+				},
+			},
+		});
+	}
+	/* //210503_수정 : 배너 2개 이상일시 자동 롤링 */
+
 
 	//VISUAL SLIDE Control - PAUSE
 	$(document).on('click','.brand_main .brand_visual .slide-curb-pause',function(e){
@@ -518,10 +583,10 @@ $(document).ready( function() {
 			nextEl: '.new_item .swiper-button-next',
 			prevEl: '.new_item .swiper-button-prev',
 		},
-		pagination: {
-			el: '.new_item .swiper-pagination',
-			clickable: true,
-		},
+		// pagination: {
+		// 	el: '.new_item .swiper-pagination',
+		// 	clickable: true,
+		// },
 		slidesPerView: 'auto',
 		spaceBetween: 22,
 	});
@@ -548,18 +613,33 @@ $(document).ready( function() {
 		$(".new_item .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 	});
 
-
-	/* SLIDE - WIDE BANNER */
-	var br_bn_slide = new Swiper ('.brand_main .main_1stage .post-bnnWide', {
-		loop: true,
-		slidesPerView: 1,
-		speed : 1500,
-		navigation: {
-			nextEl: '.main_1stage .swiper-button-next',
-			prevEl: '.main_1stage .swiper-button-prev',
-		},
-	});
-
+	//210506_수정 : 기획전 배너 swiper 무한루프 변경.
+	var pickBnnCont = $('.post-bnnWide .swiper-slide');
+	var pickBnnLength = pickBnnCont.length;
+	if (pickBnnLength < 2) {
+		/* SLIDE - WIDE BANNER */
+		var br_bn_slide = new Swiper ('.brand_main .main_1stage .post-bnnWide', {
+			loop: false,
+			watchOverflow : true, //210503_추가 : 슬라이드 1개일때 롤링 막는 기능 추가.
+			slidesPerView: 1,
+			speed : 1500,
+			navigation: {
+				nextEl: '.main_1stage .swiper-button-next',
+				prevEl: '.main_1stage .swiper-button-prev',
+			},
+		});
+	}else{
+		/* SLIDE - WIDE BANNER */
+		var br_bn_slide = new Swiper ('.brand_main .main_1stage .post-bnnWide', {
+			loop: true,
+			slidesPerView: 1,
+			speed : 1500,
+			navigation: {
+				nextEl: '.main_1stage .swiper-button-next',
+				prevEl: '.main_1stage .swiper-button-prev',
+			},
+		});
+	}
 
 	/* SLIDE - BEST ITEMS */
 	var br_best_slide = new Swiper('.brand_main .best_item .swiper-container', {
@@ -567,7 +647,9 @@ $(document).ready( function() {
 			nextEl: '.best_item .swiper-button-next',
 			prevEl: '.best_item .swiper-button-prev',
 		},
+		loop:true,
 		slidesPerView: 5,
+		slidesPerGroup:5, //210429_추가 : slidesPerGroup 추가.
 		spaceBetween: 22,
 		pagination: {
 			el: '.best_item .swiper-pagination',
@@ -582,7 +664,9 @@ $(document).ready( function() {
 			nextEl: '.md_item .swiper-button-next',
 			prevEl: '.md_item .swiper-button-prev',
 		},
+		loop:true,
 		slidesPerView: 5,
+		slidesPerGroup:5, //210429_추가 : slidesPerGroup 추가.
 		spaceBetween: 22,
 		pagination: {
 			el: '.md_item .swiper-pagination',
@@ -603,9 +687,11 @@ $(document).ready( function() {
 		on: {
 			slideChangeTransitionStart: function () {
 				$('.brand_main .spe_pr_list .spe_sl').hide();
-				$('.brand_main .spe_pr_list .spe_sl').eq(br_special_left_slide.activeIndex).show();
+				$('.brand_main .spe_pr_list .spe_sl').eq(this.realIndex).show();
 			},
-		}
+		},
+
+		loop:true,
 	});
 
 	$(".brand_main .special_shop .spe_pr_list .spe_sl .swiper-container").each(function(index, element){
@@ -685,18 +771,39 @@ $(document).ready( function() {
 	// 브랜드메인 배너 <br> 처리
 	$('.bMainTitle').each(function (){
 		let tag = '';
-		var brText = $(this).find("input[name=mainTitle]").val();
-
-		if(brText.indexOf('<br>') > -1){
-			var reText = brText.split("<br>");
-			tag += reText[0];
-			tag += '<br>';
-			tag += reText[1];
-		}else{
-			tag += brText;
+		if(!gagajf.isNull($(this).find("input[name=mainTitle]").val())){
+			var brText = $(this).find("input[name=mainTitle]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>").replaceAll("<br/>", "<br>");
+			if(brText.indexOf('<br>') > -1){
+				var reText = brText.split("<br>");
+				tag += reText[0];
+				tag += '<br>';
+				tag += reText[1];
+			}else{
+				tag += brText;
+			}
+			$(this).append(tag);
 		}
-		$(this).append(tag);
 	});
+
+	// 브랜드소개 <br> 처리
+	if(!gagajf.isNull($("#brandDesc").find("input[name=brandNote]").val())){
+		var brandDesc = $("#brandDesc").find("input[name=brandNote]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
+		if(!gagajf.isNull(brandDesc)){
+			if(brandDesc.indexOf('<br>') > -1){
+				let tag = '';
+				var reText = brandDesc.split("<br>");
+				tag += reText[0];
+				tag += '<br>';
+				tag += reText[1];
+				$("#brandDesc .desc").append(tag);
+			}else{
+				let tag = '';
+				tag += brandDesc;
+				$("#brandDesc .desc").append(tag);
+			}
+		}
+	}
+
 });
 /*]]>*/
 </script>

+ 231 - 84
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -23,6 +23,7 @@
 		<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="brandNm" style="display: none;"></li>
 				<li class="bread_2depth" id="navNm"></li>
 			</ul>
 		</div>
@@ -79,18 +80,18 @@
 										<input id="unisex" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="unisex"> <span>남여 공용만 보기</span> </label>
 									</div>
 									<div>
-										<input id="newGoods" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="newGoods"> <span>신상품만 보기</span> </label>
+										<input id="newGoods" type="checkbox" onclick="fnFilterOption(this,'off');" checked="checked"><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="brandGroupFilterDiv">
 									<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>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand' + status.index}" name="brandGroup" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'brandGroup','off');"><span th:text="${oneData.filterNm}"></span>
 												</label>
 											</li>
 										</th:block>
@@ -105,7 +106,7 @@
 											<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>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="1" onclick="filterSel(this,'size','off','1');"><span th:text="${oneData.filterNm}">80</span>
 												</label>
 											</th:block>
 										</li>
@@ -113,7 +114,7 @@
 											<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>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="2" onclick="filterSel(this,'size','off','2');"><span th:text="${oneData.filterNm}">80</span>
 												</label>
 											</th:block>
 										</li>
@@ -121,7 +122,7 @@
 											<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>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="3" onclick="filterSel(this,'size','off','3');"><span th:text="${oneData.filterNm}">80</span>
 												</label>
 											</th:block>
 										</li>
@@ -133,8 +134,8 @@
 								<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"/>
+										<input type="hidden" id="price_input_from" name="price_input_from" value="0"/>
+										<input type="hidden" id="price_input_to" name="price_input_to" value="0"/>
 									</div>
 									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
 								</div>
@@ -195,9 +196,9 @@
 										<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>
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor' + status.index}" name="color" th:value="${oneData.filterCd}" 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.filterCd}"></span>
+													<span class="pdColor-color" th:if="${oneData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+oneData.filterNm}" th:value="${oneData.filterCd}"></span>
 												</label>
 											</li>
 										</th:block>
@@ -243,13 +244,13 @@
 									<div>
 										<ul id="sortArea">
 											<li>
-												<a href="javascript:void(0);" class="on" onclick="fnSortList(this,'NEW');">최신상품순</a>
+												<a href="javascript:void(0);" id="sortingNEW" class="on" onclick="fnSortingChange(this,'NEW');">최신상품순</a>
 											</li>
 											<li>
-												<a href="javascript:void(0);" onclick="fnSortList(this,'BEST');">인기상품순</a>
+												<a href="javascript:void(0);" id="sortingBEST" onclick="fnSortingChange(this,'BEST');">인기상품순</a>
 											</li>
 											<li>
-												<a href="javascript:void(0);" onclick="fnSortList(this,'REVIEW');">리뷰 많은순</a>
+												<a href="javascript:void(0);" id="sortingREVIEW" onclick="fnSortingChange(this,'REVIEW');">리뷰 많은순</a>
 											</li>
 										</ul>
 									</div>
@@ -292,6 +293,7 @@
 		<input type="hidden" name="cate3No" th:value="${cateInfo.cate3No}"/>
 		<input type="hidden" name="cate4No" th:value="${cateInfo.cate4No}"/>
 		<input type="hidden" name="sortingType" value="NEW"/>
+		<input type="hidden" name="newGoods" value="40"/>
 	</form>
 
 	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
@@ -303,21 +305,32 @@
 		var custom_values = [];
 		var custom_values02  = [];
 		var currUrl = document.location.href;
+		var brandGroupInfo =  [[${brandGroupInfo}]];
+		var brandGroupNm = '';
+		if(!gagajf.isNull(brandGroupInfo)){
+			brandGroupNm = brandGroupInfo.brandGroupNm;
+		}
 
 		// 컨텐츠 호출
 		$(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];
+				let my_from = custom_values.indexOf(custom_values[0]);
+				let my_to = custom_values.indexOf(custom_values[5]);
+				
+				if(gagajf.isNull($("#filterForm input:hidden[name=priceFrom]").val())){
+					my_from = $("#filterForm input:hidden[name=priceFrom]").val();
+				}
+				if(gagajf.isNull($("#filterForm input:hidden[name=priceTo]").val())){
+					my_to = $("#filterForm input:hidden[name=priceTo]").val();
+				}
+				let minValue = custom_values[0];
+				let maxValue = custom_values[5];
 
 				$(".dp .js-range-slider01, .sch_result .js-range-slider01").ionRangeSlider({
 					type: "double",
@@ -332,7 +345,7 @@
 					values: custom_values,
 					min_interval: 1,
 					// onStart : function(data){
-					// 	fnCheckPrice(data);
+					//  	fnCheckPrice(data);
 					// },
 					// onChange : fnCheckPrice,
 					onFinish : function(data){
@@ -341,6 +354,7 @@
 				});
 			}
 
+			/*
 			//할인율
 			custom_values02 = ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'];
 			var my_from02 = custom_values02.indexOf('0%');
@@ -365,7 +379,7 @@
 				onFinish : function (data){
 					fnCheckDcRate(data);
 				}
-			});
+			});*/
 
 			fnCreateCategoryList();
 			
@@ -404,12 +418,10 @@
 		// 필터 가격 확인
 		var fnCheckPrice = function (data){
 			$("#priceSpan").remove();
-			$("#searchGoodsForm input:hidden[name=priceRow]").remove();
-			$("#searchGoodsForm input:hidden[name=priceHigh]").remove();
+			$("#searchGoodsForm input:hidden[name=priceFrom]").remove();
+			$("#searchGoodsForm input:hidden[name=priceTo]").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]);
 
@@ -419,8 +431,8 @@
 		// 필터 할인율 확인
 		var fnCheckDcRate = function (data){
 			$("#dcrateSpan").remove();
-			$("#searchGoodsForm input:hidden[name=dcrateRow]").remove();
-			$("#searchGoodsForm input:hidden[name=dcrateHigh]").remove();
+			$("#searchGoodsForm input:hidden[name=dcRateFrom]").remove();
+			$("#searchGoodsForm input:hidden[name=dcRateTo]").remove();
 			let min = data.from;
 			let max = data.to;
 			$("#price_input_from").val(0);
@@ -476,7 +488,7 @@
 				}else{
 					// 마지막 페이지 일때
 					$('#endPage').show();
-					$('.list_content .count_wrap').hide();
+					//$('.list_content .count_wrap').hide();
 				}
 				gagaInfiniteScroll.draw('not');
 			}
@@ -485,8 +497,13 @@
 		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/category/reload/list?cateGb='+[[${cateInfo.cateGb}]];
+				}
 			}else{
 				actionUrl = '/display/brand/cate/list?brandGroupNo=' + [[${cateInfo.brandGroupNo}]];
 			}
@@ -496,36 +513,37 @@
 					//if (status == 'success') {
 					if (result.length > 0) {
 						let formalGb = [[${cateInfo.formalGb}]];
+						if(formalGb == 'G009_10'){
+							formalGb = '';
+						}
 						let cateGb = 'G032_101';
 						let navNm = '';
 						$('#ulAllCate').html('');
-						if(formalGb=='G009_20'){
+						if(brandGroupNo>0) {
+							$("#brandNm").show();
+							$("#brandNm").text(brandGroupNm);
 							$("#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');
+							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\''+brandGroupNo+'\',\''+cateGb+'\');">전체</a></li>\n');
 							navNm += '<li class="bread_2depth" id="navNm1">전체</li>';
+						}else{
+							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 = [[${cateList}]];
-						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{
+						if(brandGroupNo > 0){
 							$.each(result, function(idx, item) {
 								$.each(allCate, function(brandCateIdx, brandCateItem) {
 									if (item.cate1No == brandCateItem.cate1No) {
@@ -533,6 +551,24 @@
 									}
 								});
 							});
+						}else{
+							if(formalGb == 'G009_20'){
+								$.each(result, function(idx, item) {
+									$.each(allCate, function(allCateIdx, allCateItem) {
+										if (item.cate1No == allCateItem.cate1No) {
+											$('#ulAllCate').append(fnGetCategoryList(item));
+										}
+									});
+								});
+							}else{
+								$.each(result, function(idx, item) {
+									$.each(allCate, function(allCateIdx, allCateItem) {
+										if (item.cate1No == allCateItem.cate1No) {
+											$('#ulAllCate').append(fnGetCategoryList(item));
+										}
+									});
+								});
+							}
 						}
 					}
 					//}
@@ -551,8 +587,6 @@
 			var navNm = "";
 			var formTitle = "";
 			let tag = '';
-			
-			console.log('cate1No>>>'+cate1No);
 		
 			if(cate1 != null){
 				tag += '<li';
@@ -577,10 +611,14 @@
 					$("#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';
+					if (cate1.cate1No == cate1No) {
+						tag += '<div class="sub_cate" style="display: block;">\n';
+					}else{
+						tag += '<div class="sub_cate">\n';
+					}
+
 					tag += '	<ul>\n';
 					$.each(cate1.cate2List, function (idx2, cate2) {
 						tag += '		<li';
@@ -649,6 +687,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';
@@ -658,14 +697,13 @@
 							tag += '</ul>\n';
 							tag += '</div>\n';
 						}
-						
 						tag += '</li>';
 					});
 					tag += '</ul>';
 					tag += '</div>';
 				}
+				tag += '</li>\n';
 			}
-			
 			return tag;
 		}
 
@@ -753,6 +791,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) {
@@ -780,6 +819,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) {
@@ -805,13 +845,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';
@@ -830,7 +875,7 @@
 			var overSrc;
 			var srcName = nowImg.attr('src');
 			overSrc = srcName.substring(0, srcName.lastIndexOf('.'));
-			
+
 			var srcImg;
 			var srcdat;
 
@@ -875,25 +920,73 @@
 				// $(this).attr('src', overSrc + '.' + /[^.]+$/.exec(srcName));
 				//$(this).attr('src', img1);
 				// return false;
+				$(this).parents('.itemPic').removeClass();
 				$(this).children('.pd_img').siblings(".itemOpt").removeClass('on');
 				$(this).children('.pd_img').attr('src', srcImg);
+				$(this).children('.pd_img').css("opacity","1");
 			});
 		}
 
 		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
 		$(window).on("pageshow", function(event) {
-			$('#filterForm input[name=brand]:checked').each(function(){
+			$('#filterForm input[name=brandGroup]:checked').each(function(){
+				let filterGb = 'brandGroup';
+				$(this).attr('onclick','filterSel(this,\''+filterGb+'\',\'on\');');
 				$(this).parent().addClass("active");
 			});
 			$('#filterForm input[name=size]:checked').each(function(){
+				let filterGb = 'size';
+				let rowNum = $(this).attr('data-idx');
+				$(this).attr('onclick','filterSel(this,\''+filterGb+'\',\'on\',\''+rowNum+'\');');
 				$(this).parent().addClass("active");
 			});
-			$('#filterForm input[name=price]:checked').each(function(){
+			$('#filterForm input[name=season]:checked').each(function(){
+				let filterGb = 'season';
+				$(this).attr('onclick','filterSel(this,\''+filterGb+'\',\'on\');');
 				$(this).parent().addClass("active");
 			});
+			$('#filterForm input[name=color]:checked').each(function(){
+				let filterGb = 'color';
+				$(this).attr('onclick','filterSel(this,\''+filterGb+'\',\'on\');');
+				$(this).parent().addClass("active");
+			});
+			$('#filterForm input[name=benefit]:checked').each(function(){
+				let filterGb = 'benefit';
+				$(this).attr('onclick','filterSel(this,\''+filterGb+'\',\'on\');');
+				$(this).parent().addClass("active");
+			});
+
+			//할인율
+			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%');
+			if(gagajf.isNull($('#searchGoodsForm').find("input[name=dcRateFrom]").val())){
+				my_from02 = $('#searchGoodsForm').find("input[name=dcRateFrom]").val();
+			}
+			if(gagajf.isNull($('#searchGoodsForm').find("input[name=dcRateTo]").val())){
+				my_to02 = $('#searchGoodsForm').find("input[name=dcRateTo]").val();
+			}
+
+			$(".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,
+				onFinish : function (data){
+					fnCheckDcRate(data);
+				}
+			});
 			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
 				var historyData = sessionStorage.getItem(document.location.href);
 				if(historyData!=null){
+					//console.log('historyData>>'+historyData);
 					historyData = JSON.parse(historyData);
 				}else{
 					historyData = {};
@@ -902,49 +995,102 @@
 					$(".arrayWrap .btn").text(historyData.sortingTypeNm);
 				}
 				if(typeof historyData.filterHtml!='undefined' && historyData.filterHtml!=''){
-					$("#searchForm").append(historyData.filterHtml);
+					$("#searchGoodsForm").append(historyData.filterHtml);
 					filterHtml = historyData.filterHtml;
 				}
 				if(typeof historyData.filterStatHtml!='undefined' && historyData.filterStatHtml!=''){
-					$(".filterstate").append(historyData.filterStatHtml);
+					$("#filterData").append(historyData.filterStatHtml);
 					filterStatHtml = historyData.filterStatHtml;
 				}
 				if(typeof historyData.totalCount!='undefined' && historyData.totalCount!=''){
-					$("#totalGoodsCnt").text(historyData.totalCount);
+					$("#totCntId").text(historyData.totalCount);
+				}
+				if(!gagajf.isNull(filterPriceList)){
+					let min = 0;
+					let max = 5;
+					let priceFrom = '';
+					let priceTo = '';
+					if(!gagajf.isNull($("#searchGoodsForm").find("input:hidden[name=priceFrom]").val())){
+						priceFrom = $("#searchGoodsForm").find("input:hidden[name=priceFrom]").val();
+					}
+					if(!gagajf.isNull($("#searchGoodsForm").find("input:hidden[name=priceTo]").val())){
+						priceTo = $("#searchGoodsForm").find("input:hidden[name=priceTo]").val();
+					}
+					$.each(filterPriceList, function (priceIdx, priceItem){
+						custom_values[priceIdx] = priceItem.filterNm;
+						if(custom_values[priceIdx] == priceFrom){
+							min = priceIdx;
+						}
+						if(custom_values[priceIdx] == priceTo){
+							max = priceIdx;
+						}
+					});
+				
+					fnFilterSliderMove(min,max);
 				}
 				if(typeof historyData.sortingType!='undefined' && historyData.sortingType!=''){
-					$("#sortSelect").val(historyData.sortingType);
-					$("#searchForm input:hidden[name=sortingType]").val(historyData.sortingType);
-					fnSortChange(historyData.sortingType);
+					$("#searchGoodsForm input:hidden[name=sortingType]").val(historyData.sortingType);
+					fnSortingChange(this,historyData.sortingType,'back');
+					$(".fillter").show();
 				}else{
+					$(".fillter").show();
+					fnCategoryGoodsInfiniteScrollInit();
 					fnGoodsListSearch();
+					fnImgOnoff();
 				}
 			}else{
 				fnCategoryGoodsInfiniteScrollInit();
-				/*var sortingType = [[${sortingType}]];
-				if(sortingType=='NEW' || sortingType=='BEST'){
-					$("#sortSelect").val(sortingType);
-					$("#sortSelect").parent('div').children('span').text($("#sortSelect option:selected").text())
-					fnSortChange(sortingType);
+				var sortingType = $("#searchGoodsForm input:hidden[name=sortingType]").val();
+				if(sortingType=='BEST' || sortingType=='REVIEW'){
+					$("#sortArea").find('li').each(function (){
+						$(this).find('a').attr('class','off');
+					});
+
+					$(this).addClass("on");
+					fnSortingChange(this, sortingType);
 				}else{
 					fnGoodsListSearch();
-				}*/
-				fnGoodsListSearch();
+				}
 			}
 		});
-
-		var fnSortList = function (obj, sortingType){
-			$("#sortArea").find('li').each(function (){
-				$(this).find('a').attr('class','off');
-			});
-
-			$(obj).addClass("on");
-			$("#searchGoodsForm").find("[name=sortingType]").val(sortingType);
-			fnCategoryGoodsInfiniteScrollInit();
-			fnGoodsListSearch();
-		}
-
+		
 		/*]]>*/
+		
+		// 동영상 플레이어
+		var iframe= document.createElement('iframe');
+		iframe.setAttribute('allowFullScreen', '');
+		iframe.setAttribute('allow', 'fullscreen');
+		var controller;
+		var player = document.getElementById('player');
+		
+		player.onload = function() {
+			try {
+				var controller = new VgControllerClient({
+					target_window: document.getElementById('pdThumbVideo').contentWindow
+					// target_window: document.getElementsByClassName('pd_mov').contentWindow
+				});
+				var playMov;
+				
+				controller.on('ready', function(){
+					//플레이어 준비 완료
+					controller.set_ratio('fill');
+					//  contain : 비율에 맞게 채웁니다.
+					//fill : 화면에 꽉 차게 채웁니다.
+					//enlargement : 세로 높이를 꽉 차게 맞춥니다. 좌우로 스크롤이 가능합니다
+					controller.play();
+				});
+				controller.on('done', function(){
+					//플레이어 재생 완료
+					controller.play();
+				});
+				
+			} catch(e) {
+				// Videogateweay Controller Library는 window.postMessage API를 이용하기 때문에
+				// 해당 기능을 지원하지 않는 웹브라우져에서는 동작하지 않습니다.
+				// 이 부분에 적절한 fail-over 코드를 추가하여 주십시요.
+			}
+			
+		}
 	</script>
 
 	<script>
@@ -960,6 +1106,7 @@
 			//$(noneSrc).attr("src", no_src);
 		}
 	</script>
+	
 
 </th:block>
 

+ 238 - 196
src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html

@@ -23,7 +23,7 @@
 		<div class="breadcrumb">
 			<ul>
 				<li class="bread_home"><a href="javascript:void(0);" id="navHome">홈</a></li>
-				<li class="bread_2depth" th:text="${lookbookInfo.brandNm}">TBJ</li>
+				<li class="bread_2depth" th:if="${lookbookInfo.lookbookGb==BL}" th:text="${lookbookInfo.brandNm}">TBJ</li>
 				<li class="bread_3depth">룩북</li>
 			</ul>
 		</div>
@@ -39,10 +39,10 @@
 								<th:block th:each="item, stat : ${lookbookDetailList}">
 									<div class="swiper-slide">
 										<div class="bt_lb_item">
-											<img class="vLHTC lb_img" th:src="${@environment.getProperty('domain.image')+item.sysFileNm}" alt="BLUE-a" />
+											<img class="vLHTC lb_img" th:src="${@environment.getProperty('domain.image')+item.sysFileNm+'?RS=460'}" alt="BLUE-a"/>
 											<th:block th:if="${item.lookbookGoodsList != null and !item.lookbookGoodsList.empty}" th:each="goodsItem, goodsStatus : ${item.lookbookGoodsList}">
 												<div class="item_picker" th:style="${'left:'+goodsItem.xlim+'%; top:'+goodsItem.ylim+'%;'}">
-													<button type="button" th:onclick="fnLookbookGoodsPopup([[${goodsItem.sysImgNm}]],[[${goodsItem.brandGroupNm}]],[[${goodsItem.goodsNm}]],[[${goodsItem.listPrice}]],[[${goodsItem.currPrice}]],[[${goodsItem.dcRate}]],[[${goodsItem.goodsCd}]])"><span class="ico ico_picker"></span></button>
+													<button type="button" th:onclick="fnLookbookGoodsPopup([[${goodsItem.sysImgNm}]],[[${goodsItem.brandGroupNm}]],[[${goodsItem.goodsFullNm}]],[[${goodsItem.listPrice}]],[[${goodsItem.currPrice}]],[[${goodsItem.dcRate}]],[[${goodsItem.goodsCd}]],[[${goodsItem.stockQty}]],[[${goodsItem.soldoutYn}]])"><span class="ico ico_picker"></span></button>
 												</div>
 											</th:block>
 										</div>
@@ -53,168 +53,70 @@
 							<div class="swiper-button-next"></div>
 						</div>
 					</div>
-					<!--<th:block th:each="item, stat : ${lookbookDetailList}">
-					<div class="text_cont" th:text="${item.imgDesc}">
-						국내 대표 패션기업 한세엠케이의 스타일리시 어반 캐주얼 브랜드 앤듀(ANDEW)가 중성적이고 시크한 감각을 극대화한 2020 F/W 시즌 룩북을 공개했다.<br>
-						앤듀는 올 하반기 정소현, 안재형, 고웅호 등 글로벌 런웨이 무대에서 활약중인 전문 패션 모델들과 함께 성별의 경계를 뛰어넘어 개개인의 개성을 드러내는 젠더뉴트럴 패션을 앤듀만의 감각으로 새롭게 전개한다. 중성적인 매력을 자아내는 3명의 모델들은 각자의 개성과 매력을 뽐내며 세련미를 더한 젠더리스 감성을 한층 더 완성도 있게 소화해 눈길을 끈다. 공개된 룩북에서는 따뜻하고 부드러운 파스텔톤, 차분한 모노크롬 컬러로 극명하게 상반된 분위기를  연출하며 각기 다른 유니섹스 스타일을 선보였다. 격식을 갖추되 포멀하진 않게 자연스럽게 떨어지는 핏과 힙한 디자인을 통해 앤듀만의 젠더뉴트럴 캐주얼룩을 연출한 것. 또한, 이번 시즌에도 패션업계에 불고 있는 ‘필(必)환경’  트렌드에 따라 그린슈머들을 사로잡을 다양한 친환경적인 제품들을 주력으로 출시하며 지속가능한 패션을 실천할 계획이다. 버려진 페트병이나 플라스틱을 활용해 친환경 재생 섬유인 리사이클 페트(PET)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
-					</div>
-					</th:block>-->
-					<div class="text_cont">
-						국내 대표 패션기업 한세엠케이의 스타일리시 어반 캐주얼 브랜드 앤듀(ANDEW)가 중성적이고 시크한 감각을 극대화한 2020 F/W 시즌 룩북을 공개했다.<br>
-						앤듀는 올 하반기 정소현, 안재형, 고웅호 등 글로벌 런웨이 무대에서 활약중인 전문 패션 모델들과 함께 성별의 경계를 뛰어넘어 개개인의 개성을 드러내는 젠더뉴트럴 패션을 앤듀만의 감각으로 새롭게 전개한다. 중성적인 매력을 자아내는 3명의 모델들은 각자의 개성과 매력을 뽐내며 세련미를 더한 젠더리스 감성을 한층 더 완성도 있게 소화해 눈길을 끈다. 공개된 룩북에서는 따뜻하고 부드러운 파스텔톤, 차분한 모노크롬 컬러로 극명하게 상반된 분위기를  연출하며 각기 다른 유니섹스 스타일을 선보였다. 격식을 갖추되 포멀하진 않게 자연스럽게 떨어지는 핏과 힙한 디자인을 통해 앤듀만의 젠더뉴트럴 캐주얼룩을 연출한 것. 또한, 이번 시즌에도 패션업계에 불고 있는 ‘필(必)환경’  트렌드에 따라 그린슈머들을 사로잡을 다양한 친환경적인 제품들을 주력으로 출시하며 지속가능한 패션을 실천할 계획이다. 버려진 페트병이나 플라스틱을 활용해 친환경 재생 섬유인 리사이클 페트(PET)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
-					</div>
 				</div>
 			</div>
-			<div class="content br_lookbook_view cont_items" th:if="${lookbookDetailList != null}">
 
-				<div class="cont_head">
-					<h3>룩북 속 상품<span class="number">(9,999)</span></h3>
-					<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
+			<div class="content br_lookbook_view cont_txts" th:if="${lookbookDetailList != null}">
+				<div class="cont_body">
+					<th:block th:each="item, stat : ${lookbookDetailList}">
+						<div class="text_cont" th:text="${item.imgDesc}">
+						</div>
+					</th:block>
+				</div>
+			</div>
+
+			<div class="content br_lookbook_view cont_items" th:if="${lookbookDetailList != null}">
+				<th:block th:each="item, stat : ${lookbookDetailList}">
+				<div class="cont_head ioTit">
+					<h3>룩북 속 상품<span class="number">(<th:block th:text="${#lists.size(item.lookbookGoodsList)}"></th:block>)</span></h3>
+					<button class="btn btn_primary" th:onclick="fnAddCartLookBookGoods1(this,[[${stat.count}]]);"><span>모두 쇼핑백 담기</span></button>
 				</div>
+				</th:block>
 				<div class="cont_body">
 					<div class="area_slider">
-						<div class="swiper-container">
-							<div class="swiper-wrapper">
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+						<!-- 겉 상품 -->
+						<div class="items_outside">
+							<th:block th:each="item, stat : ${lookbookDetailList}">
+							<div class="itemsOut" th:id="${'itemsList'+stat.count}">
+								<div class="swiper-container items_inside">
+									<div class="swiper-wrapper">
+										<th:block th:if="${item.lookbookGoodsList != null and !item.lookbookGoodsList.empty}" th:each="goodsItem, goodsStatus : ${item.lookbookGoodsList}">
+											<div class="swiper-slide">
+												<div class="item_prod" th:classappend="${(goodsItem.stockQty <= 0 or goodsItem.soldoutYn == 'Y')}? 'unable' : ''"
+													 th:attr="goodsCd=${goodsItem.goodsCd}, optCdInfo=${goodsItem.optCdInfo}, minOrdQty=${goodsItem.minOrdQty},  goodsType=${goodsItem.goodsType}">
+													<div class="item_state">
+														<th:block th:each="optCd : ${#strings.arraySplit(goodsItem.optCdInfo,',')}">
+															<input type="hidden" name="lookbookGoodsOptCd" th:value="${optCd}"/>
+														</th:block>
+														<th:block th:if="${(goodsItem.stockQty <= 0 or goodsItem.soldoutYn == 'Y')}">
+															<a href="javascript:void(0);" class="itemLink" >
+														</th:block>
+														<th:block th:unless="${(goodsItem.stockQty <= 0 or goodsItem.soldoutYn == 'Y')}">
+															<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsItem.goodsCd}]])">
+														</th:block>
+														<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsItem.goodsCd}]]);">
+															<div class="itemPic">
+																<img alt="" class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsItem.sysImgNm}">
+															</div>
+															<p class="itemBrand" th:text="${goodsItem.brandGroupNm}">BRAND NAME1</p>
+															<div class="itemName" th:text="${goodsItem.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+															<p class="itemPrice">[[${#numbers.formatInteger(goodsItem.currPrice,0,'COMMA')} + 원]]
+																<span class="itemPrice_original" th:if="${goodsItem.currPrice != goodsItem.listPrice}" th:text="${#numbers.formatInteger(goodsItem.listPrice,3,'COMMA')}">89,000</span>
+																<span class="itemPercent" th:if="${goodsItem.currPrice != goodsItem.listPrice}" th:text="${(goodsItem.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsItem.listPrice - goodsItem.currPrice) / (goodsItem.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+															</p>
+														</a>
+													</div>
 												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
+											</div>
+										</th:block>
+										<!-- Add Scrollbar -->
+										<div class="swiper-scrollbar"></div>
 									</div>
 								</div>
 							</div>
-							<!-- Add Scrollbar -->
-							<div class="swiper-scrollbar"></div>
+							</th:block>
 						</div>
+						<!-- 겉 상품 종료 -->
 					</div>
 				</div>
 			</div>
@@ -252,33 +154,33 @@
 
 	<!-- 상단_LOOKBOOK_picker_상품_팝업 -->
 	<div class="modal fade br_pop lookbook_item_pop" id="lookbookItemPop" tabindex="-1" role="dialog" aria-labelledby="lookbook_item_label" aria-hidden="true">
-		<div class="modal-dialog" role="document">
-			<div class="modal-content">
-				<div class="modal-header">
-					<h5 class="modal-title sr-only" id="lookbook_item_label">상품정보</h5>
-				</div>
-				<div class="modal-body">
-					<div class="itemsGrp">
-						<div class="item_prod">
-							<div class="item_state">
-								<div class="itemLink">
-									<div class="itemPic">
-										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/ev_list_img05.jpg">
-									</div>
-									<p class="itemBrand">BRAND NAME</p>
-									<div class="itemName">[온라인 단독] 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼</div>
-									<span class="itemPrice_original">89,000</span>
-									<p class="itemPrice">80,100
-										<span class="itemPercent">10%</span>
-									</p>
-									<button type="button" class="btn btn_default"><span>자세히 보기</span></button>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
+<!--		<div class="modal-dialog" role="document">-->
+<!--			<div class="modal-content">-->
+<!--				<div class="modal-header">-->
+<!--					<h5 class="modal-title sr-only" id="lookbook_item_label">상품정보</h5>-->
+<!--				</div>-->
+<!--				<div class="modal-body">-->
+<!--					<div class="itemsGrp">-->
+<!--						<div class="item_prod">-->
+<!--							<div class="item_state">-->
+<!--								<div class="itemLink">-->
+<!--									<div class="itemPic">-->
+<!--										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/ev_list_img05.jpg">-->
+<!--									</div>-->
+<!--									<p class="itemBrand">BRAND NAME</p>-->
+<!--									<div class="itemName">[온라인 단독] 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼</div>-->
+<!--									<span class="itemPrice_original">89,000</span>-->
+<!--									<p class="itemPrice">80,100-->
+<!--										<span class="itemPercent">10%</span>-->
+<!--									</p>-->
+<!--									<button type="button" class="btn btn_default"><span>자세히 보기</span></button>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--						</div>-->
+<!--					</div>-->
+<!--				</div>-->
+<!--			</div>-->
+<!--		</div>-->
 	</div>
 	<!-- //상단_LOOKBOOK_picker_상품_팝업 -->
 
@@ -288,28 +190,151 @@
 	var brandCd = [[${lookbookInfo.brandCd}]];
 
 	var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
-	var fnLookbookGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
-	$("#lookbookItemPop").modal("show");
-	$("#lookbookItemPop").find(".pd_img").attr('src',goodsImgUrl+'/'+obj1);
-	$("#lookbookItemPop").find(".itemBrand").text(obj2);
-	$("#lookbookItemPop").find(".itemName").text(obj3);
-	$("#lookbookItemPop").find(".itemPrice_original").text(obj4);
-	$("#lookbookItemPop").find(".itemPrice").text(obj5);
-	$("#lookbookItemPop").find(".itemPercent").text(obj6+'%');
-	$("#lookbookItemPop").find(".btn_default").attr('onclick','cfnGoToPage(_PAGE_GOODS_DETAIL+"'+obj7+'");');
+	var fnLookbookGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7,obj8,obj9){
+	// $("#lookbookItemPop").modal("show");
+	// $("#lookbookItemPop").find(".pd_img").attr('src',goodsImgUrl+'/'+obj1);
+	// $("#lookbookItemPop").find(".itemBrand").text(obj2);
+	// $("#lookbookItemPop").find(".itemName").text(obj3);
+	// $("#lookbookItemPop").find(".itemPrice_original").text(obj4);
+	// $("#lookbookItemPop").find(".itemPrice").text(obj5);
+	// $("#lookbookItemPop").find(".itemPercent").text(obj6+'%');
+	// $("#lookbookItemPop").find(".btn_default").attr('onclick','cfnGoToPage(_PAGE_GOODS_DETAIL+"'+obj7+'");');
+		$("#lookbookItemPop .modal-dialog").remove();
+		tag = '';
+
+		tag += '<div class="modal-dialog" role="document">\n';
+		tag += '	<div class="modal-content">\n';
+		tag += '		<div class="modal-header">\n';
+		tag += '			<h5 class="modal-title sr-only" id="lookbook_item_label">상품정보</h5>\n';
+		tag += '		</div>\n';
+		tag += '		<div class="modal-body">\n';
+		tag += '			<div class="itemsGrp">\n';
+		tag += '				<div class="item_prod ';
+		if(obj9 == 'Y'){
+			tag += ' sold_out';
+		}
+		tag +='">\n';
+		tag += '					<div class="item_state">\n';
+		tag += '						<div class="itemLink">\n';
+		tag += '							<div class="itemPic">\n';
+		tag += '								<img alt="BLACK-a" class=" vLHTC pd_img" src="'+goodsImgUrl+'/'+obj1+'?RS=260" onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
+		tag += '							</div>\n';
+		tag += '							<p class="itemBrand">'+obj2+'</p>\n';
+		tag += '							<div class="itemName">'+obj3+'</div>\n';
+		tag += '							<span class="itemPrice_original">'+obj4.addComma()+'</span>\n';
+		tag += '							<p class="itemPrice">'+obj5.addComma()+'\n';
+		if(obj6>0){
+			tag += '								<span class="itemPercent">'+obj6+'%</span>\n';
+		}
+		tag += '							</p>\n';
+		tag += '							<button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\''+obj7+'\',\'\',\'\')"><span>자세히 보기</span></button>\n';
+		tag += '						</div>\n';
+		tag += '					</div>\n';
+		tag += '				</div>\n';
+		tag += '			</div>\n';
+		tag += '		</div>\n';
+		tag += '	</div>\n';
+		tag += '</div>\n';
+
+		$("#lookbookItemPop").append(tag);
+		$('#lookbookItemPop').modal("show");
 	}
+	
+	var fnAddCartLookBookGoods1 = function (obj, idx){
+		let $obj = $(obj);
+		let $target = $('.cont_items #itemsList'+idx).find('.item_prod');
+		let goodsSize = $target.length;
+		let btnType = "C";
+		let params = [];
+		let goodsIdx = 0;
+		
+		$target.each(function(){
+			goodsIdx ++;
+			if ($(this).hasClass('unable')) {
+				
+			}else{
+				// 옵션확인
+				let goodsCnt = $(this).find('input[name=lookbookGoodsOptCd]').length;
+				if(goodsCnt == 1){
+					let arrOpt = $(this).find('input[name=lookbookGoodsOptCd]').val();
+					let arrOptInfo = arrOpt.split(':');
+					
+					let obj = new Object();
+					obj.goodsCd = $(this).attr("goodsCd");
+					obj.optCd = arrOptInfo[1];
+					obj.goodsQty = $(this).attr("minOrdQty");
+					obj.goodsType = $(this).attr("goodsType");
+					obj.cartGb = btnType;
+					obj.afLinkCd = '';
+					obj.ithrCd = $(this).attr("ithrCd");
+					obj.contentsLoc = $(this).attr("contentsLoc");
+					obj.planDtlSq = '';
+					obj.multiGoodsGb = 'O'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+					if (goodsIdx == goodsSize){
+						obj.multiGoodsGb = 'E'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+					}
+					params.push(obj);
+					
+					// 장바구니담기
+					cfnAddCart(params);
+				}else{
+					let $goods = $(this);
+					let cartGoodsList = [];
+					let compsList = [];
+					let goodsList = {
+						cartCompsList : new Array()
+					}
+					
+					let arrInfo = $(this).find('input[name=lookbookGoodsOptCd]').val().split(',');	// 상품코드단위
+					
+					
+					$.each(arrInfo, function(idx, item) {
+						let arrOptInfo = item.split(':');
+						
+						let obj = new Object();
+						obj.cartGb = btnType;
+						obj.goodsType = $goods.attr("goodsType");
+						obj.goodsCd = $goods.attr("goodsCd");
+						obj.itemCd =arrOptInfo[0];
+						obj.optCd = arrOptInfo[1];
+						obj.goodsQty = $goods.attr("minOrdQty");
+						obj.afLinkCd = '';
+						obj.ithrCd =  $goods.attr("ithrCd");
+						obj.contentsLoc = $goods.attr("contentsLoc");
+						obj.planDtlSq = ''
+						obj.multiGoodsGb = 'O'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+						if (goodsIdx == goodsSize){
+							obj.multiGoodsGb = 'E'  // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
+						}
+						compsList.push(obj);
+						
+					});
+					
+					goodsList.cartCompsList = compsList;
+					cartGoodsList.push(goodsList);
+					
+					// 장바구니담기
+					cfnAddCart(cartGoodsList);
+				}
+			}
+		});
+	}
+	
 	// 컨텐츠 호출
 	$(document).ready( function() {
 		/* 슬라이드 - 상단_LOOKBOOK */
 		var lookbook_visual_slide = new Swiper('.br_lookbook_view.cont_visual .swiper-container', {
 			loop: true,
+			loopAdditionalSlides : 1,
 			slidesPerView: 'auto',
 			spaceBetween: 20,
 			speed : 800,
 			autoWidth: true,
 			autoHeight: true,
+			observer: true,
 			centeredSlides: true,
 			autoplay: false,
+			nested: true,
 			navigation: {
 				nextEl: '.br_lookbook_view.cont_visual .swiper-button-next',
 				prevEl: '.br_lookbook_view.cont_visual .swiper-button-prev',
@@ -318,19 +343,36 @@
 				el: '.br_lookbook_view.cont_visual .swiper-pagination',
 				clickable: true,
 			},
+			on: {
+				slideChange:function(){
+					// 05.06_ 추가 : .ioTit
+					$('.text_cont').removeClass('active');
+					$('.ioTit').removeClass('active');
+					$('.itemsOut').removeClass('active');
+					$('.text_cont').eq(this.realIndex).addClass('active');
+					$('.ioTit').eq(this.realIndex).addClass('active');
+					$('.itemsOut').eq(this.realIndex).addClass('active');
+				}
+			},
+			watchOverflow : true,
+			watchSlidesVisibility: true,
+			watchSlidesProgress: true,
 		});
-
-		/* 슬라이드 - 룩북 속 상품 */
-		var togetherItemSwiper = new Swiper('.br_lookbook_view.cont_items .swiper-container', {
+		
+		/* 슬라이드 - 룩북 상품 inSide */
+		var togetherIteminner = new Swiper('.br_lookbook_view.cont_items .items_inside', {
+			observer: true,
+			observeParents: true,
 			slidesPerView: 6,
 			spaceBetween: 20,
 			scrollbar: {
 				el: '.br_lookbook_view.cont_items .swiper-scrollbar',
 				hide: true,
 			},
+			// nested: true,
 		});
-
-
+		
+		/* 슬라이드 - 다른 룩북 보기 */
 		var br_ohter_slide = new Swiper('.br_lookbook_view.cont_others .swiper-container', {
 			slidesPerView: 5,
 			spaceBetween: 20,
@@ -339,7 +381,7 @@
 				prevEl: '.br_lookbook_view.cont_others .swiper-button-prev',
 			},
 		});
-
+		
 		// 슬라이드 - 상단_LOOKBOOK > picker - 룩북_피커_상품정보 팝업
 		$(document).on('click','#btn_picker_item01',function(e){
 			$("#lookbookItemPop").modal("show");

+ 12 - 8
src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html

@@ -23,7 +23,7 @@
 		<div class="breadcrumb">
 			<ul>
 				<li class="bread_home"><a href="javascript:void(0);" id="navHome">홈</a></li>
-				<li class="bread_home" id="brandLi" style="display: none;"></li>
+				<li class="bread_home" id="brandLi" th:if="${lbInfo.lookbookGb=='BL'}" th:text="${brandGroupInfo.brandGroupNm}"></li>
 				<li class="bread_2depth">룩북</li>
 			</ul>
 		</div>
@@ -44,7 +44,7 @@
 									<div class="ui_col_12">
 										<div class="btn_group">
 											<!-- <div class="btn_group open"> -->
-											<a href="#none" data-toggle="dropdown" class="btn btn_default tgl_dropdown" aria-expanded="true" id="brandBox">브랜드 선택<span class="caret"></span></a>
+											<a href="javascript:void(0);" data-toggle="dropdown" class="btn btn_default tgl_dropdown" aria-expanded="true" id="brandBox">브랜드 선택<span class="caret"></span></a>
 											<div class="dropdown_menu">
 												<ul id="brandArea">
 
@@ -67,7 +67,8 @@
 									<li>
 										<p><img src="/images/pc/ico_content_none.png" alt="등록된 이벤트가 없습니다."></p>
 										<span>등록된 룩북이 없습니다.</span>
-										<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">메인으로 가기</a>
+										<a href="javascript:void(0);" th:unless="${lbInfo.lookbookGb=='BL'}" onclick="cfnGoToPage(_PAGE_MAIN);">메인으로 가기</a>
+										<a href="javascript:void(0);" th:if="${lbInfo.lookbookGb=='BL'}" th:onclick="cfnGoToBrandMain([[${lbInfo.brandCd}]]);" th:text="${brandGroupInfo.brandGroupNm+' 홈으로 가기'}"></a>
 									</li>
 								</ul>
 							</div>
@@ -80,12 +81,16 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	var lookbookGb = [[${lbInfo.lookbookGb}]];
+	if(lookbookGb != 'BL'){
+		lookbookGb = 'L';
+	}
 	var brandCd = [[${lbInfo.brandCd}]];
-	var navBrandNm = "";
 
 	let fnGetLookbookList = function (lookbookGb, brandGroupNo){
 		let actionUrl = '/display/lookbook/main/list?lookbookGb='+lookbookGb;
 		if (!gagajf.isNull(brandGroupNo)) actionUrl += '&multiBrandCd=' + brandGroupNo;
+		$('#lookbookArea').html('');
+		$('#divLookbookNoData').hide();
 
 		$.getJSON(actionUrl
 			, function (result, status){
@@ -120,13 +125,13 @@
 							tag2 += '			<img src="' + _imgUrl + item.orgTnfileNm + '" alt="" style="height:100%">';
 							tag2 += '		</div>';
 							tag2 += '		<div class="txt">';
-							tag2 += '			<span class="brand">'+item.brandNm+'</span>';
+							if(lookbookGb != 'BL') {
+								tag2 += '			<span class="brand">' + item.brandNm + '</span>';
+							}
 							tag2 += '			<p class="tit">'+item.title+'</p>';
 							tag2 += '		</div>';
 							tag2 += '	</a>';
 							tag2 += '</li>';
-							navBrandNm = item.brandNm;
-							$("#brandLi").text(navBrandNm);
 						});
 						tag2 += '</ul>';
 
@@ -160,7 +165,6 @@
 
 		if(lookbookGb=='BL'){
 			$("#brandBox").hide();
-			$("#brandLi").show();
 			$("#navHome").attr('onclick', 'cfnGoToBrandMain('+brandCd+');');
 		}else{
 			$("#navHome").attr('href', '/');

+ 142 - 70
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -71,9 +71,6 @@
 								</div>
 							</div>
 						</div>
-						<div class="cont_foot dpnone">
-							CONT-FOOT
-						</div>
 					</div>
 				</th:block>
 
@@ -88,12 +85,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>
@@ -225,9 +226,6 @@
 								</th:block>
 							</th:block>
 						</div>
-						<div class="cont_foot dpnone">
-							CONT-FOOT
-						</div>
 					</div>
 				</th:block>
 
@@ -275,7 +273,7 @@
 															<div class="itemPic">
 																<img alt="" class="pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
 															</div>
-															<p class="itemBrand" th:text="${goodsData.brandEnm}">BRAND NAME</p>
+															<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
 															<div class="itemName" th:text="${goodsData.goodsNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
 															<p class="itemPrice">
 																[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')} + 원]]
@@ -384,12 +382,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>
@@ -1032,10 +1032,10 @@ if (pickLength < 2) {
 			nextEl: '.main_pick .swiper-button-next',
 			prevEl: '.main_pick .swiper-button-prev',
 		},
-		autoplay: {
-			delay: 5000,
-			disableOnInteraction: false,
-		},
+		// autoplay: {
+		// 	delay: 5000,
+		// 	disableOnInteraction: false,
+		// },
 	});
 } else {
 	/* SLIDE - MAIN_PICK */
@@ -1057,10 +1057,10 @@ if (pickLength < 2) {
 			nextEl: '.main_pick .swiper-button-next',
 			prevEl: '.main_pick .swiper-button-prev',
 		},
-		autoplay: {
-			delay: 5000,
-			disableOnInteraction: false,
-		},
+		// autoplay: {
+		// 	delay: 5000,
+		// 	disableOnInteraction: false,
+		// },
 	});
 
 
@@ -1088,10 +1088,10 @@ if (pickForLength < 2) {
 		thumbs: {
 			swiper: main_pick_nav
 		},
-		autoplay: {
-			delay: 5000,
-			disableOnInteraction: false,
-		},
+		// autoplay: {
+		// 	delay: 5000,
+		// 	disableOnInteraction: false,
+		// },
 	});
 }else{
 	var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
@@ -1100,7 +1100,7 @@ if (pickForLength < 2) {
 		// slidesPerGroup: 6,
 		loop: true,
 		loopeSlides: 6,
-		spaceBetween: 10,
+		//spaceBetween: 10,
 		// loopFillGroupWithBlank : true,
 		loopAdditionalSlides: 1,
 		allowTouchMove: false,
@@ -1111,10 +1111,10 @@ if (pickForLength < 2) {
 		thumbs: {
 			swiper: main_pick_nav
 		},
-		autoplay: {
-			delay: 5000,
-			disableOnInteraction: false,
-		},
+		// autoplay: {
+		// 	delay: 5000,
+		// 	disableOnInteraction: false,
+		// },
 	});
 }
 
@@ -1136,24 +1136,48 @@ var main_pick_lookbook = new Swiper ('.main_pick .post-lookbook', {
 	},
 });
 
-/* SLIDE - MAIN_BANNER WIDE */
-var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
-	slidesPerView: 1,
-	speed : 1500,
-	initialSlide: 0,
-	//loop: true,
-	watchOverflow: true, //loop와 함께 사용 불가.
-	autoplay: {
-		delay: 4000,
-		disableOnInteraction: false,
-	},
-	navigation: {
-		nextEl: '.main_1stage .swiper-button-next',
-		prevEl: '.main_1stage .swiper-button-prev',
-	},
-	// allowTouchMove : false,
-	// centeredSlides: true,
-});
+//210506_수정 : 기획전 배너 swiper 무한루프 변경.
+var pickBnnCont = $('.post-bnnWide .swiper-slide');
+var pickBnnLength = pickBnnCont.length;
+if (pickBnnLength < 2) {
+	/* SLIDE - MAIN_BANNER WIDE */
+	var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
+		slidesPerView: 1,
+		speed : 1500,
+		initialSlide: 0,
+		loop: false,
+		watchOverflow: true, //loop와 함께 사용 불가.
+		autoplay: {
+			delay: 4000,
+			disableOnInteraction: false,
+		},
+		navigation: {
+			nextEl: '.main_1stage .swiper-button-next',
+			prevEl: '.main_1stage .swiper-button-prev',
+		},
+		// allowTouchMove : false,
+		// centeredSlides: true,
+	});
+}else{
+	/* SLIDE - MAIN_BANNER WIDE */
+	var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
+		slidesPerView: 1,
+		speed : 1500,
+		initialSlide: 0,
+		loop: true,
+		watchOverflow: true, //loop와 함께 사용 불가.
+		autoplay: {
+			delay: 4000,
+			disableOnInteraction: false,
+		},
+		navigation: {
+			nextEl: '.main_1stage .swiper-button-next',
+			prevEl: '.main_1stage .swiper-button-prev',
+		},
+		// allowTouchMove : false,
+		// centeredSlides: true,
+	});
+}
 
 /* SLIDE - MAIN_RECOMM */
 //MAIN_RECOMM_키워드 탭
@@ -1287,29 +1311,72 @@ 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 += reText[0];
+			tag += '<br>';
+			tag += reText[1];
+		}else{
+			tag += brText;
+		}
+		$(this).append(tag);
+	});
 
-		// 몰메인 <br> 태그
-		$('.mainTitle').each(function (){
-			let tag = '';
-			var brText = $(this).find("input[name=mainTitlee]").val();
+	// 가로긴배너 슬라이드
+	$('.silderBannerArea').each(function (){
+		let tag = '';
+		if(!gagajf.isNull($(this).find("input[name=bannerNote]").val())) {
+			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);
+		}
+	});
 
-			if(brText.indexOf('<br>') > -1){
-				var reText = brText.split("<br>");
+	// 스타일리포트 <br> 태그
+	$('.styleArea').each(function (){
+		let tag = '';
+		let tag2 = '';
+		if(!gagajf.isNull($(this).find("input[name=styleTitle]").val())) {
+			var titleText = $(this).find("input[name=styleTitle]").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];
 			}else{
-				tag += brText;
+				tag += titleText;
 			}
-			$(this).append(tag);
-		});
+			$(this).find('.styleTitleC').append(tag);
+		}
+
+		if(!gagajf.isNull($(this).find("input[name=styleNote]").val())) {
+			var noteText = $(this).find("input[name=styleNote]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+			if(noteText.indexOf('<br>') > -1){
+				var reText = noteText.split("<br>");
+				tag2 += reText[0];
+				tag2 += '<br>';
+				tag2 += reText[1];
+			}else{
+				tag2 += noteText;
+			}
+			$(this).find('.styleNoteC').append(tag2);
+		}
+	});
 
-		// 잇아이템 <br> 태그
-		var id004Text = $("#id004").find("input[name=title]").val();
+	// 잇아이템 <br> 태그
+	if(!gagajf.isNull($("#id004").find("input[name=title]").val())){
+		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>");
@@ -1322,9 +1389,11 @@ $(document).ready(function() {
 			tag += id004Text;
 			$("#id004").append(tag);
 		}
+	}
 
-		// 핫딜 <br> 태그
-		var id006Text = $("#id006").find("input[name=title]").val();
+	// 핫딜 <br> 태그
+	if(!gagajf.isNull($("#id006").find("input[name=title]").val())){
+		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 = '';
@@ -1339,11 +1408,13 @@ $(document).ready(function() {
 				$("#id006").append(tag);
 			}
 		}
+	}
 
-		// 브랜드픽 <br> 태그
-		$('#id007 .title').each(function (){
-			let tag = '';
-			var brText = $(this).find("input[name=title]").val();
+	// 브랜드픽 <br> 태그
+	$('#id007 .title').each(function (){
+		let tag = '';
+		if(!gagajf.isNull($(this).find("input[name=title]").val())){
+			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>");
@@ -1354,8 +1425,9 @@ $(document).ready(function() {
 				tag += brText;
 			}
 			$(this).append(tag);
-		});
+		}
 	});
+});
 /*]]>*/
 </script>
 

+ 11 - 10
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html

@@ -47,6 +47,7 @@
 			<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
 			</th:block>
 			<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+			<iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?player_version=html5'}" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
 			</th:block>
 		</div>
 		</th:block>
@@ -85,7 +86,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_M3')
 																		or #strings.contains(goodsImg.sysImgNm,'_M4')
 																		or #strings.contains(goodsImg.sysImgNm,'_M5')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 			</th:block>
 		</div>
 	</div>
@@ -108,7 +109,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_D3')
 																		or #strings.contains(goodsImg.sysImgNm,'_D4')
 																		or #strings.contains(goodsImg.sysImgNm,'_D5')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 			</th:block>
 		</div>
 	</div>
@@ -118,7 +119,7 @@
 		<span class="tit_view">FABRIC</span>
 		<div class="view">
 			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 			</th:block>
 		</div>
 	</div>
@@ -131,7 +132,7 @@
 			<span>
 				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1') 
 																		or #strings.contains(goodsImg.sysImgNm,'_L2')}">
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=250}" alt="">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=250}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 				</th:block>
 			</span>
 		</div>
@@ -240,10 +241,10 @@
 		</div>
 	</div>
 	<!-- //상품필수정보 노출 -->
-	</div>
-	<div class="btn_more_box covered">
-		<button type="button" class="btn btn_default btn_md">
-			<span>상세정보 더보기</span>
-		</button>
-	</div>
+</div>
+<div class="btn_more_box covered">
+	<button type="button" class="btn btn_default btn_md">
+		<span>상세정보 더보기</span>
+	</button>
+</div>
 </html>

+ 6 - 6
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -374,15 +374,15 @@
 				if (flag == "layer"){
 					$objUp.prepend(tagUpS);
 					var pop_desc_option02 = new sCombo('.pd_descrp_pop .opt_select .select_custom.deal_opt1');
-					$('.pd_descrp_pop .opt_select .select_custom.deal_opt1').find('.combo .select').trigger('click');
+					//$('.pd_descrp_pop .opt_select .select_custom.deal_opt1').find('.combo .select').trigger('click');
 				}else if (flag == "Up"){
 					$objUp.prepend(tagUpS);
 					var detail_deal_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
-					$('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select').trigger('click');
+					//$('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select').trigger('click');
 				}else{
 					$objDown.prepend(tagDownS);
 					var desc_option02 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
-					$('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select').trigger('click');
+					//$('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select').trigger('click');
 				}
 				
 			}
@@ -489,15 +489,15 @@
 				if (flag == "layer"){
 					$objUp.prepend(tagUpS);
 					var pop_desc_option02 = new sCombo('.pd_descrp_pop .opt_select .select_custom.deal_opt2');
-					$('.pd_descrp_pop .opt_select .select_custom.deal_opt2').find('.combo .select').trigger('click');
+					//$('.pd_descrp_pop .opt_select .select_custom.deal_opt2').find('.combo .select').trigger('click');
 				}else if (flag == "Up"){
 					$objUp.prepend(tagUpS);
 					var detail_deal_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
-					$('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select').trigger('click');
+					//$('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select').trigger('click');
 				}else{
 					$objDown.prepend(tagDownS);
 					var desc_option03 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
-					$('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select').trigger('click');
+					//$('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select').trigger('click');
 				}
 			}
 			

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

@@ -45,8 +45,7 @@
 												<img th:src="${'https://img.youtube.com/vi/'+goodsVideo.kmcKey+'/default.jpg'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 												</th:block>
 												<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
-												<iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?player_version=html5'}" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
-												
+												<iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?enable_initialize_focus=false&controls_activation=none'}" frameborder="0" allowfullscreen></iframe>
 												</th:block>
 												</span>
 											</a>
@@ -197,7 +196,7 @@
 												</span>
 												<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 												<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
+												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="${'외 택1'}"></th:block></span>
 												<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 											</dd>
 									</div>
@@ -478,6 +477,7 @@
 						<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
 						</th:block>
 						<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+						<iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?player_version=html5'}" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
 						</th:block>
 					</div>
 					</th:block>
@@ -519,7 +519,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_M3')
 																					or #strings.contains(goodsImg.sysImgNm,'_M4')
 																					or #strings.contains(goodsImg.sysImgNm,'_M5')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 						</th:block>
 					</div>
 				</div>
@@ -542,7 +542,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 						</th:block>
 					</div>
 				</div>
@@ -552,7 +552,7 @@
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 						</th:block>
 					</div>
 				</div>
@@ -565,7 +565,7 @@
 						<span>
 							<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1') 
 																					or #strings.contains(goodsImg.sysImgNm,'_L2')}">
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=250'}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=250'}" alt=""  th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</th:block>
 						</span>
 					</div>
@@ -1349,34 +1349,34 @@
 					if (ridx == 1){
 						var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');
 						//$('.opt_set_select .select_custom.item_opt2.item_opt2_1').find('.combo .select').trigger('click');
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").addClass("on");
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").children(".combo").children(".list").css("display", "block");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").addClass("on");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").children(".combo").children(".list").css("display", "block");
 					}else if (ridx == 2){
 						var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');
 						//$('.opt_set_select .select_custom.item_opt2.item_opt2_2').find('.combo .select').trigger('click');
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_2").addClass("on");
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_2").children(".combo").children(".list").css("display", "block");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_2").addClass("on");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_2").children(".combo").children(".list").css("display", "block");
 					}else if (ridx == 3){
 						var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
 						//$('.opt_set_select .select_custom.item_opt2.item_opt2_3').find('.combo .select').trigger('click');
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_3").addClass("on");
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_3").children(".combo").children(".list").css("display", "block");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_3").addClass("on");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_3").children(".combo").children(".list").css("display", "block");
 					}else if (ridx == 4){
 						var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
 						//$('.opt_set_select .select_custom.item_opt2.item_opt2_4').find('.combo .select').trigger('click');
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_4").addClass("on");
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_4").children(".combo").children(".list").css("display", "block");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_4").addClass("on");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_4").children(".combo").children(".list").css("display", "block");
 					}else{
 						var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
 						//$('.opt_set_select .select_custom.item_opt2.item_opt2_5').find('.combo .select').trigger('click');
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_5").addClass("on");
-						$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_5").children(".combo").children(".list").css("display", "block");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_5").addClass("on");
+						//$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_5").children(".combo").children(".list").css("display", "block");
 					}
 					
 				}else{
 					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
-					$('.pd_detail .item_detail .opt_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").addClass("on");
-					$('.pd_detail .item_detail .opt_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").children(".combo").children(".list").css("display", "block");
+					//$('.pd_detail .item_detail .opt_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").addClass("on");
+					//$('.pd_detail .item_detail .opt_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").children(".combo").children(".list").css("display", "block");
 					//$('.opt_select .select_custom.item_opt2.item_opt2_1').find('.combo .select').trigger('click');
 					
 				}	

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

@@ -84,7 +84,7 @@
 	}
 	
 	var fnGoodsQnaListCallback = function(result) {
-		$('#ulGoodsQna').html('');
+		$('#ulGoodsQna').html('');   
 		$('#goodsQnaForm').find('.nodata').hide();
 		// 목록
 		if (result.dataList != null && result.dataList.length > 0) {

+ 10 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html

@@ -44,7 +44,8 @@
 	</div>
 	<!-- //등록리뷰 없을 시 -->
 	<!-- 등록리뷰 있을 시 -->
-	<div class="area_rv_average" th:if="${reviewList != null and !reviewList.empty}">
+	<div class="area_rv_average" th:if="${reviewList != null and !reviewList.empty }">
+		<th:block th:if="${goodsInfo.reviewRegCnt > 0}">
 		<h6 class="sr-only">구매평점</h6>
 		<div class="star_score">
 			<span class="tit">구매평점</span>
@@ -53,8 +54,9 @@
 				<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
 			</span>
 		</div>
+		</th:block>
 		<!-- 착용정보 있을 시 노출 -->
-		<th:block th:if="${not #strings.isEmpty(goodsInfo.sizeGb)}">
+		<th:block th:if="${not #strings.isEmpty(goodsInfo.sizeGb) and goodsInfo.reviewRegCnt > 0}">
 		<div class="average">
 			<div class="part_average">
 				<span class="tit">사이즈</span>
@@ -491,9 +493,14 @@
 				tag += '				<div>\n';
 				tag += '					<dt>구매옵션</dt>\n';
 				if (item.goodsOptionList != null && item.goodsOptionList.length > 0){
+				tag += '					<dd>';	
 					$.each(item.goodsOptionList, function(gIdx, goodsOption){
-				tag += '					<dd>'+ goodsOption.optCd1 +' / '+ goodsOption.optCd2 +'</dd>\n';		
+				tag += '					'+ goodsOption.optCd1Nm +' / '+ goodsOption.optCd2 ;		
+				if ((gIdx+1) < item.goodsOptionList.length){
+				tag += ', ';
+				}
 					});
+				tag += '					</dd>';	
 				}
 				tag += '				</div>\n';
 				tag += '			</dl>\n';

+ 9 - 5
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html

@@ -101,21 +101,25 @@
 				tag +='			<div class="response_box">\n';
 				tag +='				<div class="full">\n';
 				tag +='					<dl>\n';
-				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
-					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
+				
 				tag +='						<div>\n';
 				tag +='							<dt>구매옵션</dt>\n';
-				tag +='							<dd>'+ reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2+'</dd>\n';
-				tag +='						</div>\n';
+				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
+				tag +='							<dd>\n';	
+					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
+				tag +='							<p><span>'+ reviewGoods.optCd1Nm +'</span> / <span>'+ reviewGoods.optCd2+'</span></p>\n';
 					});		
+				tag +='							<dd>\n';	
 				}
+
+				tag +='						</div>\n';
 				tag +='					</dl>\n';
 				tag +='				</div>\n';
 				tag +='				<div class="full">\n';
 				tag +='					<dl>\n';
 				tag +='						<div>\n';
 				tag +='							<dt>키/몸무게</dt>\n';
-				tag +='							<dd>'+review.height+' / '+review.weight +' \n';
+				tag +='							<dd>'+review.height+'cm / '+review.weight +'kg \n';
 				tag +='							</dd>\n';
 				tag +='						</div>\n';
 				tag +='					</dl>\n';

+ 8 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html

@@ -35,7 +35,7 @@
 	</div>
 	<form id="goodsReviewPhotoForm" name="goodsReviewPhotoForm" action="#" th:action="@{'/goods/review/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
-		<input type="hidden" name="pageSize" value ="20"/>
+		<input type="hidden" name="pageSize" value ="18"/>
 		<input type="hidden" name="photoYn" value ="Y"/>
 		<input type="hidden" name="goodsCd" th:value ="${params.goodsCd}"/>
 	</form>
@@ -48,7 +48,7 @@
 	var fnReviewPhotoGetList = function() {
 
 	// Initialize a pagination
-		gagaPaging.init('goodsReviewPhotoForm', fnReviewPhotoGetListCallback, 'reviewPhtoPageNav', 1);
+		gagaPaging.init('goodsReviewPhotoForm', fnReviewPhotoGetListCallback, 'reviewPhtoPageNav', 18);
 
 		// Load data
 		gagaPaging.load(1);
@@ -70,10 +70,15 @@
 				tag += '				<li>\n';
 				tag += '					<a href="javascript:void();" onclick="fnGoodsReviewDetail(\''+item.reviewSq+'\');">\n';
 				tag += '						<div class="pic">\n';
-				tag += '							<span class="thumb '+ fileGbClass +'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				if ("I" ==reviewAttach.fileGb){
+					tag += '							<span class="thumb" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->	
+				}else{
+					tag += '							<span class="thumb '+ fileGbClass +'"><iframe width="100%" height="100%" src="'+_kollusMediaUrl +'/'+reviewAttach.kmcKey +'?player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></span>\n';	
+				}
 				tag += '						</div>\n';
 				tag += '					</a>\n';
 				tag += '				</li>\n';		
+						return false;
 					});	
 				}
 				

+ 6 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsShopBenefitFormWeb.html

@@ -73,11 +73,14 @@
 								<col width="50%">
 								<col width="*">
 							</colgroup>
-							<tbody>
+							<tbody> 
 								<tr th:each="freeGoods, status : ${freeGoodsList}">
 									<td>
-										<div class="th"><th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시</div>
-										<div class="td"><th:block th:text="${freeGoods.goodsNm}"></th:block> <th:block th:text="${#numbers.formatInteger(freeGoods.itemQty, 0,'COMMA')}"></th:block>개 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></div>
+										<div class="th"><th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시</div>
+										<th:block th:each="goodsNm : ${#strings.arraySplit(freeGoods.freeGoods,',')}" th:with="goodsArray=${#strings.arraySplit(goodsNm,':')}">
+										<div class="td"><th:block th:text="${goodsArray[0]}"></th:block> <th:block th:text="${#numbers.formatInteger(goodsArray[1], 0,'COMMA')}"></th:block>개 증정 
+										<th:block th:if="${freeGoods.allYn == 'N'}" th:text="${'외 택1'}"></th:block></div>
+										</th:block>
 									</td>
 								</tr>
 							</tbody>

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

@@ -71,15 +71,6 @@
 													<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>
@@ -87,6 +78,15 @@
 													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.chgColorNm} / ${exchangeDtl.chgOptCd2}|"></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>
 										<div class="status_box">
 											<p>
@@ -114,7 +114,7 @@
 									<!-- 교환상품검수중 -->
 									<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_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>

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

+ 353 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageDeliveryInfoFormWeb.html

@@ -0,0 +1,353 @@
+<!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/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MypageOrderDetailFormWeb.html
+ * @desc    : 마이페이지 > 배송조회 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.04   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="${ordNo}"></em></span>
+					<button type="button" id="btn_order_cancel" class="btn_underline" onclick="fnDeleteOrder()"><span>삭제하기</span></button>
+				</div>
+				<div class="sec_body">
+					<th:block th:if="${orderList}" th:each="order, status : ${orderList}">
+						<div class="part_goods">
+							<div class="goods_head">
+								<p th:unless="${order.giftPackYn == 'Y'}">주문일 <span th:text="${order.ordDt}"></span></p>
+								<p th:if="${order.giftPackYn == 'Y'}">선물일 <span th:text="${order.ordDt}"></span></p>
+<!--								<li><a href="javascript:void(0)" th:if="${allCanYn == 'Y' and order.ordReqChgQty == 0}" onclick="fnAllCancel();">주문전체취소</a></li>-->
+<!--								<li><a href="javascript:void(0)" th:if="${allDecideYn == 'Y'}"  th:attr="ordNo=${ordNo}" onclick="fnAllDecideOrder(this);">전체구매확정</a></li>-->
+							</div>
+							<div class="goods_cont">
+								<!-- 주문상품 -->
+								<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+									<div class="goods_info">
+										<div class="order_desc">
+											<div class="goods_box">
+												<input type="hidden" name="ordDtlNoArr" th:value="${ordDtl.ordDtlNo}"/>
+												<input type="hidden" name="cnclRtnReqQtyArr" th:value="${ordDtl.ordQty - ordDtl.cnclRtnQty}"/>
+												<div class="gd_item">
+													<a href="javascript:void(0)" th:attr="goodsCd=${ordDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+															<span class="thumb">
+																<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+															</span>
+														<p>
+															<span class="brand" th:text="${ordDtl.brandNm}"></span>
+															<span class="tag primary" th:if="${ordDtl.shotDelvYn == 'Y'}">총알배송</span>
+															<span class="tag" th:if="${ordDtl.shotDelvYn == 'N' and ordDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+															<span class="tag" th:if="${ordDtl.selfGoodsYn == 'N'}">업체직배송</span>
+														</p>
+														<p>
+															<span class="name" th:text="${ordDtl.goodsNm}"></span>
+														</p>
+													</a>
+												</div>
+												<div class="gd_opt">
+													<div class="option_wrap">
+														<span class="title sr-only">주문 옵션</span>
+														<span class="option" th:if="${ordDtl.goodsType == 'G056_S'}" th:each="option, status : ${ordDtl.colorNmArr}" th:text="|${ordDtl.itemNmArr[status.index]} / ${option} / ${ordDtl.optCd2Arr[status.index]}|"></span>
+														<span class="option" th:unless="${ordDtl.goodsType == 'G056_S'}" th:text="|${ordDtl.colorNm} / ${ordDtl.optCd2}|"></span>
+													</div>
+												</div>
+												<div class="gd_calc">
+													<p>
+														<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.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>
+														<span class="point"><em th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정</span>
+													</p>
+												</div>
+											</div>
+											<div class="status_box">
+												<!-- 선물 -->
+												<th:block th:if="${order.giftPackYn == 'Y'}">
+													<p th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">주소 입력 대기중</p>
+													<p th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">선물 완료</p>
+													<p th:if="${ordDtl.ordDtlStat == 'G013_98' or ordDtl.ordDtlStat == 'G013_99'}">선물 취소</p>
+												</th:block>
+												<!-- 주문 -->
+												<th:block th:unless="${order.giftPackYn == 'Y'}">
+													<p th:if="${ordDtl.ordDtlStat == 'G013_10'}">주문접수</p>
+													<p th:unless="${ordDtl.ordDtlStat == 'G013_10'}" th:text="${ordDtl.ordDtlStatNm}"></p>
+												</th:block>
+											</div>
+											<div class="button_box">
+												<!-- 선물 -->
+												<th:block th:if="${order.giftPackYn == 'Y'}">
+													<!-- SMS 재발송 버튼 -->
+													<th:block th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>
+													</th:block>
+
+													<!-- 주문취소 버튼(결제완료, 상품준비중, 출고처지정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
+													</th:block>
+
+													<!-- 리뷰 쓰기 버튼 -->
+													<th:block th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99' and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
+														<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+													</th:block>
+
+													<!-- 쇼핑백담기 버튼(구매확정) -->
+													<th:block th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>
+													</th:block>
+												</th:block>
+												<!-- 주문 -->
+												<th:block th:unless="${order.giftPackYn == 'Y'}">
+													<!-- 주문취소 버튼(결제완료, 상품준비중, 출고처지정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
+													</th:block>
+
+													<!-- 교환/반품 신청 버튼(배송중, 출고완료, 배송완료) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60'}">
+														<!-- 교환/반품 가능한 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'Y'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></p>
+														</th:block>
+
+														<!-- 교환 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'Y'}">
+															<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></p>
+														</th:block>
+
+														<!-- 반품 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'N'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+														</th:block>
+
+														<!-- 교환/반품 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'N'}">
+															<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+														</th:block>
+													</th:block>
+
+													<!-- 배송조회 버튼(배송중) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55'}">
+<!--														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, shipCompCd=${ordDtl.shipCompCd}, invoiceNo=${ordDtl.invoiceNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>-->
+													</th:block>
+
+													<!-- 구매확정 버튼(배송완료) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_60'}">
+														<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnDecideOrder(this);"><span>구매 확정</span></button></p>
+													</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') and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
+														<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+													</th:block>
+
+													<!-- 쇼핑백담기 버튼(입금대기, 배송준비중, 구매확정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_40' or ordDtl.ordDtlStat == 'G013_70'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>
+													</th:block>
+
+													<!-- 1:1문의 버튼(입금대기, 배송준비중, 구매확정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_40' or (ordDtl.ordDtlStat == 'G013_70' and (ordDtl.reviewableYn == 'N' or ordDtl.reviewSq > 0))}">
+														<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+													</th:block>
+												</th:block>
+											</div>
+										</div>
+										<!-- 선물 -->
+										<th:block th:if="${order.giftPackYn == 'Y'}">
+											<!-- 주소 입력 대기중 -->
+											<div class="order_text" th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">
+												<p th:text="|${ordDtl.recipNm}님이 주소를 입력하기 전입니다. (입력기한 ${ordDtl.giftLimitDt})|"></p>
+											</div>
+
+											<!-- 선물 완료 -->
+											<div class="order_text" th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">
+												<p th:text="|${ordDtl.recipNm}님께 선물이 발송되었습니다.|"></p>
+											</div>
+
+											<!-- 선물 취소 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_98' and ordDtl.ordDtlStat == 'G013_99'}">
+												<p th:text="|주소 입력 기한이 경과되어 선물이 취소 되었습니다.|"></p>
+											</div>
+										</th:block>
+
+										<!-- 주문 -->
+										<th:block th:unless="${order.giftPackYn == 'Y'}">
+											<!-- 주문 접수 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_10'}">
+												<p>주문 완료/결제를 기다리고 있습니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+
+											<!-- 상품준비중 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_30'}">
+												<p>배송할 상품을 준비 중입니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+
+											<!-- 배송준비중 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_40'}">
+												<p>상품 준비가 완료되어 곧 배송될 예정입니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+
+											<!-- 배송중, 배송완료 -->
+											<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60'}">
+											<div class="order_text" th:unless="${(ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55') and ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'Y'}">
+												<p th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'Y'}">해당 상품은 교환이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>
+												<p th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'N'}">해당 상품은 반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>
+												<p th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'N'}">해당 상품은 교환/반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>
+												<p th:if="${ordDtl.ordDtlStat == 'G013_60'}">15일 후 자동으로 구매확정됩니다.</p>
+											</div>
+											</th:block>
+
+											<!-- 구매확정 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_70' and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
+												<p>리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</p>
+											</div>
+										</th:block>
+									</div>
+								</th:block>
+								<!-- //주문상품 -->
+							</div>
+						</div>
+					</th:block>
+					<h4 class="subH3">배송 정보</h4>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="210">
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>
+										보내는 사람
+									</th>
+									<td>
+										<div class="single_line">
+											<ul>
+												<li><span th:text="${deliveryAddrInfo.recipNm}">홍길동</span></li>
+												<li><span th:text="${deliveryAddrInfo.recipPhnno}">010-3456-7890</span></li>
+											</ul>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th>제품 정보</th>
+									<td th:text="|${oneData.brandNm} ${oneData.goodsNm}|"></td>
+								</tr>
+								<tr>
+									<th>송장 번호</th>
+									<td th:text="${oneData.invoiceNo}"></td>
+								</tr>
+								<tr>
+									<th>배송 주소</th>
+									<td th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|">
+										경기도 시흥시 서울대학2로, 1120동 2204호
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<div class="tbl type5 mt60">
+						<table>
+							<colgroup>
+								<col width="25%">
+								<col width="25%">
+								<col width="25%">
+								<col width="25%">
+							</colgroup>
+							<thead>
+							<tr>
+								<th scope="col">시간</th>
+								<th scope="col">장소</th>
+								<th scope="col">유형</th>
+								<th scope="col">전화번호</th>
+							</tr>
+							</thead>
+							<tbody>
+							<tr th:if="${sweetTrackerInfoList}" th:each="sweetTrackerInfo, status : ${sweetTrackerInfoList}">
+								<td th:text="${sweetTrackerInfo.timeTrans}"></td>
+								<td th:text="${sweetTrackerInfo.delvWhere}"></td>
+								<td th:text="${sweetTrackerInfo.details}"></td>
+								<td th:text="${sweetTrackerInfo.telno}"></td>
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+	<form id="exchangeForm" name="exchangeForm" action="#" 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" action="#" 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 ordNo = [[${ordNo}]];
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(1);
+		
+		// 마이페이지 location 설정
+		fnSetMypageLocation('주문확인/배송조회', '_PAGE_MYPAGE_ORDER_LIST', '주문상세');
+	});
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -208,7 +208,7 @@
 					tmtbHtml += '		<td><span class="tag deepgray">차감</span></td>';
 				}
 				tmtbHtml += '<td>';
-				tmtbHtml += '<div class="txt_content">'	+ useGiftcard.goodsNm + '</div>';
+				tmtbHtml += '<div class="txt_content" style="padding-left:40px; text-align:left;">'	+ useGiftcard.goodsNm + '</div>';
 				tmtbHtml += '</td>';
 				if(useGiftcard.gfcdAmt<0){
 					tmtbHtml += '<td><span class="amount_minus"> <em>'
@@ -216,8 +216,8 @@
 						+ useGiftcard.gfcdAmt.addComma()
 						+ '</em>원';
 				}else{
-					tmtbHtml += '<td><span class="amount_plus"> <em>'
-						+ ' '
+					tmtbHtml += '<td><span class="amount_plus" style="color:#fd4802"> <em>'
+						+ '+'
 						+ useGiftcard.gfcdAmt.addComma()
 						+ '</em>원';
 				}
@@ -355,8 +355,8 @@
 				gagajf.ajaxJsonSubmit(
 						'/mypage/gift/use/confirm', jsonData,
 						function() {
-							$("#gift_input").val('');
-							//cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);
+							//$("#gift_input").val('');
+							cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);
 						});
 			}
 		});

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

@@ -166,7 +166,7 @@
 														
 														<!-- 배송조회 버튼(배송중) -->
 														<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55'}">
-															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, shipCompCd=${ordDtl.shipCompCd}, invoiceNo=${ordDtl.invoiceNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
 														</th:block>
 	
 														<!-- 구매확정 버튼(배송완료) -->
@@ -385,7 +385,7 @@
 												</dd>
 											</div>
 											<div class="include_item" th:if="${orderAmtInfo.cpn1DcAmt > 0}"> <!-- 할인항목 표기 class명 include_item -->
-												<dt>상품할인(즉시할인)</dt>
+												<dt>즉시할인</dt>
 												<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.cpn1DcAmt, 1, 'COMMA')}|"></em>원</dd>
 											</div>
 											<div class="include_item" th:if="${orderAmtInfo.tmtb1DcAmt + orderAmtInfo.tmtb2DcAmt > 0}">
@@ -412,9 +412,9 @@
 												<dt>마일리지 사용</dt>
 												<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.npayPntAmt, 1, 'COMMA')}|"></em>원</dd>
 											</div>
-											<div class="include_item" th:if="${paymentInfo.pgCpnAmt > 0}">
+											<div class="include_item" th:if="${orderAmtInfo.pgCpnAmt > 0}">
 												<dt>제휴할인</dt>
-												<dd><em th:text="|- ${#numbers.formatInteger(paymentInfo.pgCpnAmt, 1, 'COMMA')}|"></em>원</dd>
+												<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.pgCpnAmt, 1, 'COMMA')}|"></em>원</dd>
 											</div>
 										</dl>
 									</td>
@@ -424,7 +424,7 @@
 												<dt>결제 금액</dt>
 												<dd>
 													<div class="price">
-														<span class="pay_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.payAmt - orderAmtInfo.npayPntAmt, 1, 'COMMA')}"></em>원</span>
+														<span class="pay_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.payAmt - orderAmtInfo.npayPntAmt - orderAmtInfo.pgCpnAmt, 1, 'COMMA')}"></em>원</span>
 													</div>
 												</dd>
 											</div>

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

@@ -402,12 +402,6 @@
 		$('#searchForm input[name=ordDtlStat]').val($(this).attr('code'));
 	});
 
-	// 배송조회 버튼 클릭 이벤트
-	var fnGoToDelivery = function(param) {
-		// TODO
-		// 배송조회 페이지 이동
-	}
-
 	// 주문내역 리스트 처리
 	var fnCreateOrderList = function(param) {
 		let tag = '';
@@ -544,7 +538,7 @@
 
 						// 배송조회 버튼(배송중)
 						if (ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55') {
-							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" shipCompCd="' + ordDtl.shipCompCd + '" invoiceNo="' + ordDtl.invoiceNo + '" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>\n';
 						}
 
 						// 구매확정 버튼(배송완료)

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

@@ -120,7 +120,7 @@
 				</div>
 				<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}">
 					<span class="cf_txt" th:text="|${order.shipCompNm} / ${order.invoiceNo}|"></span>
-					<button type="button" class="btn btn_primary" th:attr="ordNo=${oneData.ordNo}, invoiceNo=${order.invoiceNo}, shipCompCd=${order.shipCompCd}" onclick="fnGetDeliveryInfo(this)">배송조회</button>
+					<button type="button" class="btn btn_primary" th:attr="ordNo=${order.ordNo}, ordDtlNo=${order.ordDtlNo}, invoiceNo=${order.invoiceNo}, shipCompCd=${order.shipCompCd}" onclick="fnGetDeliveryInfo(this)">배송조회</button>
 				</div>
 				<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_60'}">
 					<span class="cf_txt" th:text="|${order.purchaseConfirmDay}일 후 자동으로 구매확정|"></span>

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

@@ -139,7 +139,7 @@
 										<td>
 											<div class="form_field">
 												<div class="input_wrap">
-													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요."  onkeyup="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
+													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요." maxlength="200" onkeyup="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
 													<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
 												</div>
 											</div>
@@ -390,13 +390,16 @@
 		$.each($('#returnForm input[name=chgQty]'), function(idx, item) {
 			let chgQty = $(item).val();
 			let ordDtlNo = $(item).attr('ordDtlNo');
-
+			console.log(chgQty);
 			if (chgQty > 0) {
 				ordDtlNoArr.push(Number(ordDtlNo));
 				cnclRtnReqQtyArr.push(Number(chgQty));
 				chkQty += chgQty;
 			}
 		});
+		
+		console.log(ordDtlNoArr);
+		console.log(cnclRtnReqQtyArr);
 
 		// 반품 수량 체크
 		if (chkQty == 0) {
@@ -522,10 +525,11 @@
 				let spanTotRtnDelvFee = Number(result.spanTotRtnDelvFee);				// 반품배송비 (회수요청으로 인한 반품 배송비)
 				let spanRealCnclRtnAmt = Number(result.spanRealCnclRtnAmt);				// 환불 상품 실결제 금액 (환불상품금액 - 할인차감금액)
 				let spanRefundAmt = spanRealCnclRtnAmt + sumDeliveryFee;				// 환불예정금액 (환불상품실결제금액 + 원주문배송비)
-				
+
 				// 반품 사유 및 반품 방식 배송비 계산
 				if (result.spanRealCnclRtnAmt > 0) {
 					let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
+
 					// 회사사유 : 추가배송비 0, 반품배송비 0
 					if (!isCustomer) {
 						spanTotRtnDelvFee = 0;
@@ -539,8 +543,7 @@
 					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/MypageReviewCreateFormWeb.html

@@ -382,7 +382,6 @@
 let reviewList = [[${reviewInfo}]];
 let reviewStat = [[${reviewStat}]];
 let reviewAttach = [[${alreadyReviewAttach}]];
-console.log(reviewAttach);
 let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
 // 별점 class="on"
 var $starEls = $('#star button#starBtn');
@@ -600,6 +599,7 @@ var fnChooseFile = function(obj) {
 		}else if((new RegExp("mp4", "i")).test(file.name)){
 			setTimeout(function(){
 				$(".pics").children().eq(0).append("<input type='hidden' name='kufKeyArr' id='kufKey"+(picLength+1)+"'>");
+				$(".pics").children().eq(0).append("<input type='hidden' name='kmcKeyArr' id='kmcKey"+(picLength+1)+"'>");
 				gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
 			}, 2000);
 		}else{

+ 9 - 7
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

@@ -69,7 +69,7 @@
 				tag +='		<span class="thumb" class="'+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
 						if (reviewAttach.fileGb == "M") {
 				tag +='			<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">\n';
-				tag +='				<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">\n';
+				tag +='				<source src="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + 'player_version=html5" type="video/mp4">\n';
 				tag +='			</video>\n';
 						}else{
 				tag +='			<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
@@ -95,21 +95,23 @@
 				tag +='			<div class="response_box">\n';
 				tag +='				<div class="full">\n';
 				tag +='					<dl>\n';
-				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
-					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
 				tag +='						<div>\n';
 				tag +='							<dt>구매옵션</dt>\n';
-				tag +='							<dd>'+ reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2+'</dd>\n';
-				tag +='						</div>\n';
-					});		
+				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
+					tag +='							<dd>\n';	
+						$.each(review.goodsOptionList, function(aIdx, reviewGoods){
+					tag +='							<p><span>'+ reviewGoods.optCd1Nm +'</span> / <span>'+ reviewGoods.optCd2+'</span></p>\n';
+						});		
+					tag +='							<dd>\n';	
 				}
+				tag +='						</div>\n';
 				tag +='					</dl>\n';
 				tag +='				</div>\n';
 				tag +='				<div class="full">\n';
 				tag +='					<dl>\n';
 				tag +='						<div>\n';
 				tag +='							<dt>키/몸무게</dt>\n';
-				tag +='							<dd>'+review.height+' / '+review.weight +' \n';
+				tag +='							<dd>'+review.height+'cm / '+review.weight +'kg \n';
 				tag +='							</dd>\n';
 				tag +='						</div>\n';
 				tag +='					</dl>\n';

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

@@ -158,7 +158,7 @@
 				html += '								<span class="buy_date"><em>'+item.payDt+'</em>&nbsp;구매</span>             ';
 				html += '							</p>                                                                                          ';
 				html += '							<p>                                                                                           ';
-				html += '								<span class="brand">'+item.brandEnm+'</span>                               ';
+				html += '								<span class="brand">'+item.brandNm+'</span>                               ';
 				html += '							</p>                                                                                          ';
 				html += '							<p>                                                                                           ';
 				html += '								<span class="name">'+item.goodsNm+'</span>									';
@@ -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>     ';
@@ -222,7 +222,7 @@
 				html+='									<span class="buy_date"><em>'+item.payDt+'</em>&nbsp;구매</span>';
 				html+='								</p>';
 				html+='								<p>';
-				html+='									<span class="brand">'+item.brandEnm+'</span>';
+				html+='									<span class="brand">'+item.brandNm+'</span>';
 				html+='								</p>';
 				html+='								<p>';
 				html+='									<span class="name">'+item.goodsNm+'</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>';

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

@@ -70,15 +70,6 @@
 													<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>
@@ -86,6 +77,15 @@
 													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.chgColorNm} / ${exchangeDtl.chgOptCd2}|"></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>
 										<div class="status_box">
 											<p>
@@ -111,7 +111,7 @@
 									<!-- 교환상품검수중 -->
 									<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_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>

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

@@ -124,7 +124,7 @@
 													
 													<!-- 배송조회 버튼(배송중) -->
 													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55'}">
-														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, shipCompCd=${ordDtl.shipCompCd}, invoiceNo=${ordDtl.invoiceNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
 													</th:block>
 
 													<!-- 쇼핑백담기 버튼(구매확정) -->
@@ -268,7 +268,7 @@
 													</dd>
 												</div>
 												<div class="include_item" th:if="${orderAmtInfo.cpn1DcAmt > 0}"> <!-- 할인항목 표기 class명 include_item -->
-													<dt>상품할인(즉시할인)</dt>
+													<dt>즉시할인</dt>
 													<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.cpn1DcAmt, 1, 'COMMA')}|"></em>원</dd>
 												</div>
 												<div class="include_item" th:if="${paymentInfo.npayPntAmt > 0}">

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

@@ -320,12 +320,6 @@
 		$('#searchForm input[name=ordDtlStat]').val($(this).attr('code'));
 	});
 
-	// 배송조회 버튼 클릭 이벤트
-	var fnGoToDelivery = function(param) {
-		// TODO
-		// 배송조회 페이지 이동
-	}
-	
 	// 비회원 주문상세보기 버튼 클릭 이벤트
 	var fnGoToNoMemberOrderDetail = function(param) {
 		let ordNo = $(param).attr('ordNo');

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

@@ -137,7 +137,7 @@
 										<td>
 											<div class="form_field">
 												<div class="input_wrap">
-													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요."  onkeyup="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
+													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요." maxlength="200" onkeyup="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
 													<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
 												</div>
 											</div>

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

@@ -1251,7 +1251,11 @@ var paymentInfoSet = function() {
 							} else if (pgGb == "KAKAO") {
 								fnKakaoPaymentReady();
 							} else if (pgGb == "KCP" || pgGb == "PAYCO") {
-								jsf__pay(document.order_info);
+								if(payMeans == "G014_70") {
+									$("#order_info").submit();
+								} else {
+									jsf__pay(document.order_info);
+								}
 							}
 						}
 					});

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

+ 76 - 87
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -157,6 +157,7 @@
                     <div>
                         <h4 th:if="${planInfo.planGb == 'P'}">다른 기획전 보기</h4>
                         <h4 th:if="${planInfo.planGb == 'E'}">다른 이벤트 보기</h4>
+                        <h4 th:if="${planInfo.planGb == 'C'}">다른 이벤트 보기</h4>
                         <a href="javascript:void(0);" th:if="${planInfo.planGb == 'P'}" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);">전체보기</a>
                         <a href="javascript:void(0);" th:if="${planInfo.planGb == 'E'}" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">전체보기</a>
                     </div>
@@ -227,7 +228,6 @@
 	<!-- //댓글 이미지 팝업 -->	    
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
-
 let review = [[${reviewInfo}]];
 let coupon = [[${couponInfo}]];
 let plan = [[${planInfo}]];
@@ -266,69 +266,71 @@ if(planCornerList.length>0){
 		html += '             </div>';
 		html += '             <div class="itemsGrp">';
 		$.each(planCornerGoodsList, function(idx2, item2)  {
-			html += '                 <div class="item_prod">';
-			html += '                     <div class="item_state">';
-			html += '		<button type="button" class="itemLike';
-			if(item.likeIt == 'likeit'){
-				html += ' likeit';
-			}
-			html += ' "';
-			html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
-			
-			html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
-			html += '                             <div class="itemPic">';
-			html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
-			html += '                             </div>';
-			html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
-			html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
-			html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
-			if (item2.currPrice != item2.listPrice) {
-				html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
-			}
-			if (item2.dcRate != 0) {
-				html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
-			}
-			
-			
-			html += '                             </p>';
-			html += '                             <div class="itemcolorchip">';
-			if(!gagajf.isNull(item2.colorChips)){
-				var colorArr = item2.colorChips.split(",");
-				var colorCd = '';
-				var rgbColor = '';
-				for(let i=0; i<colorArr.length; i++){
-					var colorInfo = colorArr[i].split(":");
-					colorCd = colorInfo[0];
-					rgbColor = colorInfo[1];
-					if(rgbColor=='#FFFFFF'){
-						html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
-					}else{
-						html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+			if (item2.cornerNm == item.cornerNm) {
+				html += '                 <div class="item_prod">';
+				html += '                     <div class="item_state">';
+				html += '		<button type="button" class="itemLike';
+				if(item2.likeIt == 'likeit'){
+					html += ' likeit';
+				}
+				html += ' "';
+				html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+				
+				html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
+				html += '                             <div class="itemPic">';
+				html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
+				html += '                             </div>';
+				html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
+				html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
+				html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
+				if (item2.currPrice != item2.listPrice) {
+					html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+				}
+				if (item2.dcRate != 0) {
+					html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+				}
+				
+				
+				html += '                             </p>';
+				html += '                             <div class="itemcolorchip">';
+				if(!gagajf.isNull(item2.colorChips)){
+					var colorArr = item2.colorChips.split(",");
+					var colorCd = '';
+					var rgbColor = '';
+					for(let i=0; i<colorArr.length; i++){
+						var colorInfo = colorArr[i].split(":");
+						colorCd = colorInfo[0];
+						rgbColor = colorInfo[1];
+						if(rgbColor=='#FFFFFF'){
+							html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+						}else{
+							html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+						}
 					}
 				}
-			}
-			html += '                             </div>';
-			if(!gagajf.isNull(item2.icon)){
-				var iconArr = item2.icon.split(",");
-				var iconGb = '';
-				var iconNm = '';
-				html += '	<p class="itemBadge">';
-				for(let i=0; i<iconArr.length; i++){
-					var iconInfo = iconArr[i].split(":");
-					iconGb = iconInfo[0];
-					iconNm = iconInfo[1];
-					html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+				html += '                             </div>';
+				if(!gagajf.isNull(item2.icon)){
+					var iconArr = item2.icon.split(",");
+					var iconGb = '';
+					var iconNm = '';
+					html += '	<p class="itemBadge">';
+					for(let i=0; i<iconArr.length; i++){
+						var iconInfo = iconArr[i].split(":");
+						iconGb = iconInfo[0];
+						iconNm = iconInfo[1];
+						html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+					}
+					html += '	</p>';
 				}
-				html += '	</p>';
-			}
-			if(item2.goodsTnm != null){
-				html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+				if(item2.goodsTnm != null){
+					html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+				}
+				html += '                         </a>';
+				html += '                     </div>';
+				html += '                 </div>';
 			}
-			html += '                         </a>';
-			html += '                     </div>';
-			html += '                 </div>';
+			
 		})
-
 		html += '             </div>';
 		html += '         </div>';
 	})
@@ -674,36 +676,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 +759,8 @@ var fnPlanCouponDown = function(obj){
 
 // 쿠폰다운로드 콜백
 var fnPlanCouponCallBack = function(result){
-	
-	// 화면 전환 필요		
+	$('#coupon_'+ result.cpnId).html('<span>받기완료</span>');
+	$('#coupon_'+ result.cpnId).attr('disabled', true);
 }
 
 // 설문조사 참여 버튼 클릭
@@ -962,6 +950,7 @@ var fnReplySave = function() {
 			ajaxReplyList();	
 			$('#replyText').val('');
 			$('.pics').remove();
+			$('.fileAdd').show();
 			//댓글 작성시 글자 카운트
 			$('#cmt_cnt').text(0);
 			});
@@ -1126,7 +1115,7 @@ $(document).ready( function() {
 			$("#replyText").val('');
 			return false;
 		}
-		
+		var imgFiles=$('.imgUpload .pics');
 		var maxFileLength = 10; /* 최대 파일 갯수를 입력해 주세요 */
 		if (imgFiles.length >= maxFileLength) {
 			mcxDialog.alert('이미지는 최대' + maxFileLength +'장 까지 첨부 가능합니다.');

+ 4 - 4
src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html

@@ -139,12 +139,12 @@
 							<div class="benefit_con">
 							<ul>
 								 <th:block th:each="a, benefitStat : ${benefitList}">
-								<li th:if="${a.benefitGb == 'P'}">
+								<li th:if="${a.benefitGb == 'P' or ( a.basDays > 0 and a.dcVal > 0)}">
 									<div class="benfit_point">
 										<span th:text="${a.basDays}"></span>일 출석 시 <span class="c_primary"><em th:text="${a.pntAmt}"></em>P</span>
 									</div>
 								</li>
-								<li th:if="${a.benefitGb == 'C'}">
+								<li th:if="${a.benefitGb == 'C'  or ( a.basDays > 0 and a.dcVal > 0)}">
 									<div class="benfit_coupon">
 										<th:block th:if="${a.dcWay == '%'}">
 										<span th:text="${a.basDays}"></span>일 출석 시 <span class="c_primary"><em th:text="${a.dcVal}"></em>%</span><strong> 할인 쿠폰</strong>
@@ -154,7 +154,7 @@
 										</th:block>
 									</div>
 								</li>
-								<li th:if="${a.benefitGb == 'A'}">
+								<li th:if="${a.benefitGb == 'A'  or ( a.basDays > 0 and a.dcVal > 0)}">
 									<div class="benfit_coupon">
 									<th:block th:if="${a.dcWay == '%'}">
 										<span th:text="${a.basDays}"></span>일 출석 시<br><span class="c_primary"><em th:text="${a.pntAmt}"></em>P</span> + <span class="c_primary"><em th:text="${a.dcVal}"></em>%</span> <strong>할인 쿠폰</strong>
@@ -199,7 +199,7 @@
                 <div class="cont_head">
                     <div>
                         <h4>다른 이벤트 보기</h4>
-                        <a href="javascript:void(0);" th:if="${planInfo.planGb == 'E'}" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">전체보기</a>
+                        <a href="javascript:void(0);" th:if="${planInfo.planGb == 'C'}" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">전체보기</a>
                     </div>
                 </div>
                 <div class="cont_body">

+ 69 - 64
src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

@@ -35,7 +35,7 @@
 				</div>
 				<div class="cont_body">
 				    <div class="bulletship">
-						<div class="bulletship_head">
+						<div class="bulletship_head" th:utext="${#strings.replace(#strings.replace(shotHtmlTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
                             <img src="/images/pc/thumb/bullet_bg1.png" alt="10시까지 주문하면 당일도착">
                         </div>
                         <div class="bulletship_body" id="shotHtml">
@@ -50,8 +50,13 @@
                             </div> -->
                             		<!-- 비로그인 상태 or 로그인을 했지만 주소정보를 못 가져오는 경우 -->                      
                         </div>
-                        <div class="bulletship_foot"><div class="bulletship_foot"><br></div></div><div class="bulletship_foot"><br></div><div class="bulletship_foot">
-                            <img src="/images/pc/thumb/bullet_bg2.png" alt="주문/도착, 배송일, 대상상품">
+                        <div class="bulletship_foot">
+                        	<div class="bulletship_foot"><br></div>
+                        </div>
+                        <div class="bulletship_foot"><br>
+                        </div>
+                        <div class="bulletship_foot" th:utext="${#strings.replace(#strings.replace(shotHtmlBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
+                           <!--  <img src="/images/pc/thumb/bullet_bg2.png" alt="주문/도착, 배송일, 대상상품"> -->
                         </div>
                     </div> 
                 </div>
@@ -154,7 +159,6 @@ if(planCornerList.length>0){
 	$.each(planCornerList, function(idx, item)  {
 		html += '             <li><a href="#brand'+idx+'">'+item.cornerNm+'</a></li>';
 	})
-	
 	html += '         </ul>';
 	html += '     </div>';
 	html += '</div>';
@@ -167,69 +171,70 @@ if(planCornerList.length>0){
 		html += '             </div>';
 		html += '             <div class="itemsGrp">';
 		$.each(planCornerGoodsList, function(idx2, item2)  {
-			html += '                 <div class="item_prod">';
-			html += '                     <div class="item_state">';
-			html += '		<button type="button" class="itemLike';
-			if(item.likeIt == 'likeit'){
-				html += ' likeit';
-			}
-			html += ' "';
-			html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
-			
-			html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
-			html += '                             <div class="itemPic">';
-			html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
-			html += '                             </div>';
-			html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
-			html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
-			html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
-			if (item2.currPrice != item2.listPrice) {
-				html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
-			}
-			if (item2.dcRate != 0) {
-				html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
-			}
-			
-			
-			html += '                             </p>';
-			html += '                             <div class="itemcolorchip">';
-			if(!gagajf.isNull(item2.colorChips)){
-				var colorArr = item2.colorChips.split(",");
-				var colorCd = '';
-				var rgbColor = '';
-				for(let i=0; i<colorArr.length; i++){
-					var colorInfo = colorArr[i].split(":");
-					colorCd = colorInfo[0];
-					rgbColor = colorInfo[1];
-					if(rgbColor=='#FFFFFF'){
-						html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
-					}else{
-						html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+			if (item2.cornerNm == item.cornerNm) {
+				html += '                 <div class="item_prod">';
+				html += '                     <div class="item_state">';
+				if(item2.likeIt === 'likeit'){
+				html += '		<button type="button" class="itemLike likeit active"';
+				}else{
+					html += '		<button type="button" class="itemLike"';
+				}
+				html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+				
+				html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
+				html += '                             <div class="itemPic">';
+				html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
+				html += '                             </div>';
+				html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
+				html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
+				html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
+				if (item2.currPrice != item2.listPrice) {
+					html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+				}
+				if (item2.dcRate != 0) {
+					html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+				}
+				
+				
+				html += '                             </p>';
+				html += '                             <div class="itemcolorchip">';
+				if(!gagajf.isNull(item2.colorChips)){
+					var colorArr = item2.colorChips.split(",");
+					var colorCd = '';
+					var rgbColor = '';
+					for(let i=0; i<colorArr.length; i++){
+						var colorInfo = colorArr[i].split(":");
+						colorCd = colorInfo[0];
+						rgbColor = colorInfo[1];
+						if(rgbColor=='#FFFFFF'){
+							html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+						}else{
+							html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+						}
 					}
 				}
-			}
-			html += '                             </div>';
-			if(!gagajf.isNull(item2.icon)){
-				var iconArr = item2.icon.split(",");
-				var iconGb = '';
-				var iconNm = '';
-				html += '	<p class="itemBadge">';
-				for(let i=0; i<iconArr.length; i++){
-					var iconInfo = iconArr[i].split(":");
-					iconGb = iconInfo[0];
-					iconNm = iconInfo[1];
-					html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+				html += '                             </div>';
+				if(!gagajf.isNull(item2.icon)){
+					var iconArr = item2.icon.split(",");
+					var iconGb = '';
+					var iconNm = '';
+					html += '	<p class="itemBadge">';
+					for(let i=0; i<iconArr.length; i++){
+						var iconInfo = iconArr[i].split(":");
+						iconGb = iconInfo[0];
+						iconNm = iconInfo[1];
+						html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+					}
+					html += '	</p>';
 				}
-				html += '	</p>';
-			}
-			if(item2.goodsTnm != null){
-				html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+				if(item2.goodsTnm != null){
+					html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+				}
+				html += '                         </a>';
+				html += '                     </div>';
+				html += '                 </div>';
 			}
-			html += '                         </a>';
-			html += '                     </div>';
-			html += '                 </div>';
 		})
-
 		html += '             </div>';
 		html += '         </div>';
 	})
@@ -243,7 +248,7 @@ if(planCornerList.length>0){
 }
 
 var shotBody = function () {
-	if (!cfCheckLogin() || (custAddr == null && custAddr == '')) {
+	if (!cfCheckLogin() || (custAddr == null || custAddr == '')) {
 		html = '';
 		html += '<div class="txt_result">                                                                              ';
 		html += '     <p>오전10시 이전 주문 당일도착</p>                                                                         ';
@@ -289,7 +294,7 @@ var fnOpenDaumAddr = function() {
 						success 	: function(result) {
 							if (result != null) {
 								$('#addr').text(cfnGetDaumRoadAddr(data));
-								if(result.shotDelvUseYn == "Y"){
+								if(result.shotYn.shotDelvUseYn == "Y"){
 									$('#shotAdr').text("총알배송");
 									$("#infoTxt").text("오늘 오전 10시까지 주문하시면 오늘 도착합니다. (토, 일, 공휴일 휴무)")
 									

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

@@ -27,7 +27,17 @@
 			</ul> 
 		</div>
 		<div class="wrap">
-		<th:block th:if="${socialInfo != null}">
+				<div class="nodata" style="display: none;">
+					<div class="txt_box">
+						<p>진행하는 핫딜이 없습니다.</p>
+					</div>
+					<div class="btn_box">
+						<button class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);">
+							<span>홈으로 가기</span>
+						</button>
+					</div>
+				</div>
+				<th:block th:if="${socialInfo != null}">
 			<div class="content wide dp_hotdeal"> <!-- 페이지특정 클래스 = dp_hotdeal -->
 				<div class="cont_body">
                     <div class="hotdeal">
@@ -97,30 +107,26 @@ let fnGetSocialList = function(result) {
 	var html = '';
 
 	$.each(result.dataList, function(idx, item) {
+		
+		html += ' <div class="item_prod"class="item_prod">';
 		if (item.stockQtySum == 0) {
-			html += ' <div class="item_prod"class="item_prod sold_out">';
+			html += '    <div class="item_state sold_out"> ';
 		}else{
-			html += ' <div class="item_prod"class="item_prod">';
+			html += '    <div class="item_state"> ';
 		}
-		
-		html += '    <div class="item_state"> ';
 		if (item.likeIt == 'likeit') {
 			html += '        <button type="button" class="itemLike active" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
 		}else{
 			html += '        <button type="button" class="itemLike" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
 		}
 		
-		html += '        <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\')" >';
+		html += '        <a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\')" >';
 		html += '            <div class="itemPic">';
 		html += '                <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item.sysImgNm +'">';
 		html += '            </div>';
 		html += '            <div class="itemSpecialPrice"><span>특가</span></div>';
 		html += '            <p class="itemBrand">'+item.brandGroupNm+'</p>';
 		html += '            <div class="itemName">'+item.goodsNm+'</div>';
-		if(item.goodsTnm != null){
-			html += '           <div class="itemComment">'+item.goodsTnm+'</div>';
-		}
-
 		html += '            <p class="itemPrice">';
 		html += item.currPrice.addComma() +'원';
 		if (item.currPrice != item.listPrice) {
@@ -130,6 +136,9 @@ let fnGetSocialList = function(result) {
 			html += '                                 <span class=" itemPercent">'+item.dcRate.addComma()+'%</span>';
 		}
 		html += '            </p>';
+		if(item.goodsTnm != null){
+			html += '           <div class="itemComment">'+item.goodsTnm+'</div>';
+		}
 		html += '        </a>';
 		html += '        	 <div class="shopBagBtn">';
 		html += '                <button type="button" class="btn btn_defalt" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'">';
@@ -167,6 +176,7 @@ var fnDrawInfiniteScrollData = function (result){
 	gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
 
 	if (result.dataList != null && result.dataList.length > 0) {
+		$(".nodata").hide();		
 		let lastPage = result.paging.pageable.pageNo;
 		let endRow = result.endRow - result.paging.pageable.pageSize;
 		
@@ -174,22 +184,11 @@ var fnDrawInfiniteScrollData = function (result){
 		gagaInfiniteScroll.draw(htm);
 	}else{
 		if($("#socialForm input[name=pageNo]").val()==1){
-			var html = '';
-			html += '<div class="nodata" >';
-			html += '	<div class="txt_box">';
-			html += '		<p>';
-			html += '			진행하는 핫딜이 없습니다.';
-			html += '		</p>';
-			html += '	</div>';
-			html += '	<div class="btn_box">';
-			html += '		<button class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>';
-			html += '	</div>';
-			html += '</div>';	
-			
-			$('#listBox').html(html);
+			$(".nodata").show();		
 		}
 		$("#divLastPage").show();
 		gagaInfiniteScroll.draw('not');
+		
 	}
 }
 
@@ -197,6 +196,7 @@ var fnDrawInfiniteScrollData = function (result){
 $(function(){
 	fnSocialListSearch();
        /* 핫딜 countDown */
+    
        function hotdealTimer() {
            var endTime = new Date(socialInfo.socialEddt); // 남은시간 지정
 
@@ -221,7 +221,11 @@ $(function(){
                $('#h-minutes').html(minutes);
                $('#h-seconds').html(seconds);		
        }
-       setInterval(function() { hotdealTimer(); }, 1000);
+       
+     if (socialInfo != null) {
+    	setInterval(function() { hotdealTimer(); }, 1000);
+  	 }
+       
        /* countDown */
 });
 

+ 110 - 41
src/main/webapp/biz/goods.js

@@ -65,12 +65,16 @@ var fnViewStock = function(obj, goodsCd, optCd, optCd1, optCd2,  minOrdQty, maxO
 			fnSetTotalPrice();
 			
 			// 모바일에서 작업해야함
-			$("#cartForm  input[name=opt]").each(function(){
-				if ($(this).attr('id') == optCd){
-					$("#cartForm  input[name=opt]").parent().find('label').removeClass('on');
-					$(this).parent().find('label').addClass('on');
-				}
-			});
+			if ('P' != _frontGb) {
+				$("#cartForm  input[name=opt]").each(function(){
+					if ($(this).attr('id') == optCd){
+						//$("#cartForm  input[name=opt]").parent().find('label').removeClass('on');
+						$(this).parent().find('label').addClass('on');
+					}else{
+						$(this).parent().find('label').removeClass('on');
+					}
+				});
+			}
 		}
 
 	}, "text");
@@ -171,7 +175,7 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		}
 
 		tag += '<div class="item_prod">';
-		tag += '	<div class="item_state">';
+		tag += '	<div class="item_state" data-id="'+item.soldoutYn+'">';
 		tag += '		<button type="button" class="itemLike';
 		if(item.likeIt == 'likeit'){
 			tag += ' likeit';
@@ -180,8 +184,8 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		tag += ' onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
 		tag += '<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\');">';
 		tag += '			<div class="itemPic">';
-		if(!gagajf.isNull(item.videoVal)){
-			var videoArr = item.videoVal.split(",");
+		if(!gagajf.isNull(item.videos)){
+			var videoArr = item.videos.split(",");
 			var videoGb = '';
 			var videoUrl = '';
 			for(let i=0; i<videoArr.length; i++){
@@ -190,10 +194,10 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 				videoUrl = videoInfo[1];
 			}
 			if(videoGb=='Y'){
-				tag += '<iframe id="child" class="pd_mov" src="https://www.youtube.com/embed/'+videoUrl+'"></iframe>';
+				tag += '<iframe id="pdThumbVideo" class="pd_mov" src="https://www.youtube.com/embed/'+videoUrl+'?autoplay=1&mute=1"></iframe>';
 				//tag += '<iframe id="pdThumbVideo" class="pd_mov" src="http://v.kr.kollus.com/164MyIiv?enable_initialize_focus=false&autoplay&mute&controls_activation=none" allow="fullscreen" allowFullScreen></iframe>';
 			}else{
-				tag += '<iframe id="child" class="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'?enable_initialize_focus=false&autoplay&mute&controls_activation=none" allow="fullscreen" allowFullScreen></iframe>';
+				tag += '<iframe id="pdThumbVideo" class="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'?enable_initialize_focus=false&autoplay&mute&controls_activation=none" allow="fullscreen" allowFullScreen></iframe>';
 			}
 		}
 		tag += '		<img class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'" data-img="'+goodsUrl+'/'+item.sysImgNm2+'" onerror="noneImg(this)">';
@@ -229,7 +233,7 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 					if(soldOutYn=='N'){
 						tag +='		<li>'+sizeVal+'</li>';
 					}else{
-						tag +='		<li className="none">'+sizeVal+'</li>';
+						tag +='		<li class="none">'+sizeVal+'</li>';
 					}
 				}
 				tag += '</ul>';
@@ -267,8 +271,8 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		}
 		tag += '			</div>';
 
-		if(!gagajf.isNull(item.icon)){
-			var iconArr = item.icon.split(",");
+		if(!gagajf.isNull(item.benefits)){
+			var iconArr = item.benefits.split(",");
 			var iconGb = '';
 			var iconNm = '';
 			tag += '	<p class="itemBadge">';
@@ -319,9 +323,18 @@ var filterStatHtml = '';
 
 // 상품상세 필터 조회
 var filterSel = function (obj, gubun, staus, sizeGb){
+	filterHtml = '';
+	filterStatHtml = '';
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
 	let $obj = $(obj);
 	if(staus=='on'){
-		$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'off\',\'\');');
+		if(gubun=='size'){
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'off\',\''+sizeGb+'\');');
+		}else{
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'off\',\'\');');
+		}
+
 		$("#filterData").find('span').each(function(idx,item) {
 			if(gubun=='color'){
 				if($obj.attr('data-id').replace('#','').trim() == $(this).closest("span").attr('id')) {
@@ -334,7 +347,11 @@ var filterSel = function (obj, gubun, staus, sizeGb){
 			}
 		});
 	}else{
-		$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\'\');');
+		if(gubun=='size'){
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\''+sizeGb+'\');');
+		}else{
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\'\');');
+		}
 
 		let tag = '';
 		if(gubun=='color'){
@@ -357,53 +374,78 @@ var filterSel = function (obj, gubun, staus, sizeGb){
 		}
 
 		$("#filterData").append(tag);
+		filterStatHtml += tag;
 	}
-
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
 	fnFilterSet(gubun, sizeGb);
 }
 
 var fnFilterSet = function (searchId, sizeGb){
 	fnCategoryGoodsInfiniteScrollInit();
-	$("#searchGoodsForm input:hidden[name="+searchId+"Search]").remove();
+	$("#searchGoodsForm input:hidden[name="+searchId+"Arr]").remove();
 	var tag = '';
 	if(searchId=='size'){
 		$('#filterForm input[name='+searchId+']:checked').each(function(){
-			tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).attr('data-id')+'"/>\n';
+			tag = '<input type="hidden" name="'+searchId+'Arr" value="'+$(this).attr('data-id')+'"/>\n';
 			$("#searchGoodsForm").append(tag);
+			filterHtml += tag;
 		});
 	}else{
 		$('#filterForm input[name='+searchId+']:checked').each(function(){
-			tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).val()+'"/>\n';
+			tag = '<input type="hidden" name="'+searchId+'Arr" value="'+$(this).val()+'"/>\n';
 			$("#searchGoodsForm").append(tag);
+			filterHtml += tag;
 		});
 	}
-
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
 	fnGoodsListSearch();
 }
 
 // 상품상세 필터 삭제
 var fnDeleteFilter = function (obj, gubun, staus, sizeGb){
-	$("#"+gubun+"FilterDiv > ul > li").each(function(idx,item) {
-		if(gubun == 'size'){
+	if(gubun=='size'){
+		$("#"+gubun+"FilterDiv #sizeLi"+sizeGb).each(function(idx,item) {
 			$('#sizeLi'+sizeGb+' .size_btn').each(function (){
 				if($(obj).closest("span").text() == $(this).find('input').attr('data-id')){
 					$(this).find('input').click();
 				}
 			});
-		}else if(gubun == 'color'){
-			if($(obj).closest("span").attr('id') == $(this).find('input').attr('data-id').trim()){
-				$(this).find('input').click();
-			}
-		}else{
-			if($(obj).closest("span").text() == $(this).find('input').attr('data-id')){
-				$(this).find('input').click();
+		});
+	}else{
+		$("#"+gubun+"FilterDiv > ul > li").each(function(idx,item) {
+			if(gubun == 'color'){
+				if($(obj).closest("span").attr('id') == $(this).find('input').attr('data-id').trim()){
+					$(this).find('input').click();
+				}
+			}else{
+				if($(obj).closest("span").text() == $(this).find('input').attr('data-id')){
+					$(this).find('input').click();
+				}
 			}
-		}
-	});
+		});
+	}
 
 	$(obj).closest("span").remove();
 }
 
+var fnFilterSliderMove = function (min, max){
+	var $range = $(".dp .js-range-slider01, .sch_result .js-range-slider01");
+	var $inputFrom = $("#price_input_from");
+	var $inputTo = $("#price_input_to");
+	var instance;
+	
+	instance = $range.data("ionRangeSlider");
+	instance.update({
+		from: min
+	});
+	$inputFrom.val(min);
+	
+	instance.update({
+		to: max
+	});
+	$inputTo.prop("value",max);
+}
+
 var fnFilterSlider = function (gubun, min, max){
 	let tag = '';
 	let oriMin = '';
@@ -433,20 +475,25 @@ var fnFilterSlider = function (gubun, min, max){
 	tag += '</span>';
 
 	$("#filterData").append(tag);
+	filterStatHtml += tag;
 
 	var tag2 = '';
 	if(gubun=='price'){
-		tag2 += '<input type="hidden" name="priceRow" value="'+min.replace(",", "")+'"/>\n';
-		tag2 += '<input type="hidden" name="priceHigh" value="'+max.replace(",", "")+'"/>\n';
+		tag2 += '<input type="hidden" name="priceFrom" value="'+min.replace(",", "")+'"/>\n';
+		tag2 += '<input type="hidden" name="priceTo" value="'+max.replace(",", "")+'"/>\n';
 		$("#searchGoodsForm").append(tag2);
+		filterHtml += tag2;
 		fnCategoryGoodsInfiniteScrollInit();
 	}else{
-		tag2 += '<input type="hidden" name="dcrateRow" value="'+min+'"/>\n';
-		tag2 += '<input type="hidden" name="dcrateHigh" value="'+max+'"/>\n';
+		tag2 += '<input type="hidden" name="dcRateFrom" value="'+min+'"/>\n';
+		tag2 += '<input type="hidden" name="dcRateTo" value="'+max+'"/>\n';
 		$("#searchGoodsForm").append(tag2);
 		fnCategoryGoodsInfiniteScrollInit();
+		filterHtml += tag2;
 	}
-
+	
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
 	fnGoodsListSearch();
 }
 
@@ -467,8 +514,8 @@ var fnDeleteFilterSlider = function (obj, gubun, minVal, maxVal){
 			to: 5
 		});
 		$inputTo.prop("value",maxVal);
-		$("#searchGoodsForm input:hidden[name=priceRow]").remove();
-		$("#searchGoodsForm input:hidden[name=priceHigh]").remove();
+		$("#filterForm input:hidden[name=priceFrom]").remove();
+		$("#filterForm input:hidden[name=priceTo]").remove();
 	}else{
 		var $range = $(".dp .js-range-slider02, .sch_result .js-range-slider02");
 		var $inputFrom = $("#dcrate_input_from");
@@ -485,12 +532,34 @@ var fnDeleteFilterSlider = function (obj, gubun, minVal, maxVal){
 			to: 10
 		});
 		$inputTo.prop("value",maxVal);
-		$("#searchGoodsForm input:hidden[name=dcrateRow]").remove();
-		$("#searchGoodsForm input:hidden[name=dcrateHigh]").remove();
+		$("#searchGoodsForm input:hidden[name=dcRateFrom]").remove();
+		$("#searchGoodsForm input:hidden[name=dcRateTo]").remove();
 	}
 	$(obj).closest("span").remove();
 	fnCategoryGoodsInfiniteScrollInit();
 	fnGoodsListSearch();
 }
 
+// 정렬 순서
+var fnSortingChange = function (obj, sortingType, stat){
+	if(stat != 'back'){
+		if($("#searchGoodsForm input[name=sortingType]").val()==sortingType){
+			return;
+		}
+	}
+	
+	$("#sortArea").find('li').each(function (){
+		$(this).find('a').attr('class','off');
+	});
+	
+	$(obj).addClass("on");
+	if(stat=='back'){
+		$("#sorting"+sortingType).addClass("on");
+	}
+	$("#searchGoodsForm").find("[name=sortingType]").val(sortingType);
+	gagaInfiniteScroll.pageStatus.sortingType = sortingType;
+	fnCategoryGoodsInfiniteScrollInit();
+	fnGoodsListSearch();
+}
+
 //****************상품리스트  end **********************************

+ 9 - 1
src/main/webapp/biz/mypage.js

@@ -74,12 +74,20 @@ var fnGoToGoodsDetail = function(param) {
 }
 
 // 배송조회 버튼 클릭 이벤트
-var fnGetDeliveryInfo = function(param) {
+var fnGoToDelivery = function(param) {
+	let ordNo = $(param).attr('ordNo');
+	let ordDtlNo = $(param).attr('ordDtlNo');
 	let invoiceNo = $(param).attr('invoiceNo');
 	let shipCompCd = $(param).attr('shipCompCd');
 	
 	// TODO
 	// 배송조회 처리
+	$('#deliveryInfoForm input[name=ordNo]').val(ordNo);
+	$('#deliveryInfoForm input[name=ordDtlNo]').val(ordDtlNo);
+	$('#deliveryInfoForm input[name=shipCompCd]').val(shipCompCd);
+	$('#deliveryInfoForm input[name=invoiceNo]').val(invoiceNo);
+	
+	document.deliveryInfoForm.submit();
 }
 
 // 구매확정 버튼 클릭 이벤트

+ 7 - 6
src/main/webapp/ux/mo/css/layout_m.css

@@ -717,6 +717,7 @@
 .pd_detail .pd_samebrand{}
 .pd_detail .pd_relate{}
 .pd_detail .pd_relate .area_slider .itemName {height:3.2rem}
+
 /* 210405 */
 header .htop.trans{position:absolute; background:transparent !important;}
 .pd_qnalist_pop .btn_group_flex > div > .btn{height:5.3rem;}
@@ -725,7 +726,6 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_review_pop .btn_group_flex > div > .btn{height:5.3rem;}
 .modal.pd_pop.pd_qnawrite_pop .modal-footer button{height:5.3rem;}
 .modal.pd_pop.pd_qnawrite_pop .modal-header{border-bottom:0px none;}
-/*.modal.pd_pop.push_restock_pop .item_blk .item_prod .item_state .itemLink .itemBrand {display:block; font-size:1rem; color:#888888; font-weight:300; margin-left:0; margin-right:0; text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;width : calc(100% - 30%);overflow:hidden;}*/
 .modal.pd_pop.push_restock_pop .item_blk .item_prod .item_state .itemLink .itemName {display:block; margin-top:0.5rem; font-size:1.3rem; max-height: 3.3rem; margin-left:0; margin-right:0; display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; max-height: 3.3rem; overflow: hidden; white-space: normal; overflow-wrap: break-word; width : calc(100% - 5%)}
 .select_custom .combo .list>li[aria-disabled="true"]{background:#fff;}
 .Purchase_pop .select_custom.on .combo .select{border-bottom:1px solid #dcdcdc}
@@ -741,12 +741,9 @@ header .htop.trans{position:absolute; background:transparent !important;}
 /* 210407 */
 .pd.deal .pd_detail .foldGroup > ul > li{border-bottom:0px none;}
 .pd_listDescrp_pop .deal_list_select .list li{border-bottom:0px none;}
-/*.pd_descrp_pop .item_blk .item_prod .item_state .itemLink .itemBrand{text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;width:20rem;overflow:hidden; background:red;}
-.pd_descrp_pop .item_blk .item_prod .item_state .itemLink .itemName{overflow: hidden;text-overflow: ellipsis;display: -webkit-box; -webkit-box-orient: vertical; line-height: 1.2em; -webkit-line-clamp: 3; height: 3.6em}*/
 .pd_descrp_pop .item_prod .itemPrice_original{margin-left:0.6rem; margin-right:-0.6rem;}
 .Purchase_pop .item_prod .itemPrice_original{margin-left:0.5rem;}
 .Purchase_pop .item_prod .itemPercent{left:10.2rem}
-/*.Purchase_pop .option_box .opt_size .form_field input[type="radio"]:checked + label{border:1px solid #fd4802;}*/
 /* 210408 */
 .btPopAuto_body .opt_count .number_count span.min_val,
 .btPopAuto_body .opt_count .number_count span.max_val {opacity:0.2;}
@@ -819,7 +816,6 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .dp .popup_box .button_list.clear button{width:100% !important;}
 .dp .open_categori a{display: inline-block;font-size: 1.2rem;font-weight: 300;padding-right: 1.4rem;background: url(/images/mo/ico_sort_arrow.png) no-repeat right center;background-size: 0.7rem 0.43rem;}
 .dp .Bulletship_foot .clear{background:#f5f5f5; margin:4rem -2rem; padding:4rem 0 0rem 2rem;}
-/*.dp .dp_Bulletship .inner:first-child{margin-bottom:0; padding-bottom:0;}*/
 .dp .items_option{padding-top:0; margin:0 2rem;}
 .dp .items_option #filter{height:4.5rem; border:0.1rem solid #dddddd; font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
 .dp .items_option.fix{position:fixed; top:0; z-index:999; width:100%; left:0; margin:0; box-shadow:rgb(0 0 0 / 30%) 0px 3px 15px 0px;}
@@ -855,7 +851,6 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .brand_floormenu .share_like{overflow:hidden;}
 .brand_floormenu .share_like > button{float:left; width:100%; font-size:0; text-indent:-999999px;}
 .brand_floormenu .share_like > button.refresh{background:#000 url(/images/mo/dp_refresh.png) center center no-repeat; background-color:#222222;}
-/*.brand_floormenu .share_like > button.like{background:#000 url(/images/mo/ico_floorbtn_like.png) center center no-repeat; background-size:2rem;}*/
 .brand_floormenu .prd_buy > .buying{display:block; background-color:#fd4802;}
 .brand_floormenu .prd_buy > .cantbuying{display:none;}
 .brand_floormenu.soldout .prd_buy > .buying{display:none;}
@@ -915,6 +910,12 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .modal.photo_comment_popup.pd_bestreviewdetail_pop .modal-body .pop_cont{padding-top:0 !important;}
 .modal.photo_comment_popup.pd_bestreviewdetail_pop .pop_detail .review_list{border:0px none;}
 .modal.photo_comment_popup.pd_bestreviewdetail_pop .pop_detail .review_list ul li{padding:0;}
+/* 210503 */
+.br .br_lookbook .inner .lb_text .text_cont{display:none; height: 3.4rem; overflow: hidden; margin: 0 0 2.4rem; font-size: 1.2rem; font-weight: 300; line-height: 1.8rem;}
+.br .br_lookbook .inner .lb_text .text_cont.active{display:block;}
+.br .br_inlookbook .itemsOut{display:none}
+.br .br_inlookbook .itemsOut.active{display:block}
+
 
 
 

+ 14 - 1
src/main/webapp/ux/mo/css/style24_m.css

@@ -2267,6 +2267,13 @@ main.container .shopping_bag .inner:last-child {padding-bottom: 0;}
 .shopping_bag .inner {padding:3rem 2rem;}
 .shopping_bag .inner.wide {padding: 0;}
 .shopping_bag .btn_delete {position: absolute; top: 0; right: 0; z-index: 9; width: 4rem; height: 4rem; background: url(/images/mo/ico_itemdelete_btn.png) no-repeat center/1.2rem; background-position: center;}
+
+.shopping_bag .tip1 .tip_contents{width: 32.5rem;transform: translate(-70%, 1.0rem);}
+.shopping_bag .tip1 .tip_contents:before,
+.shopping_bag .tip1 .tip_contents:after{left: 72.2%;}
+.shopping_bag .tip_wrap ul li{position: relative;padding-left: 1.0rem;font-weight: 200;font-size: 1.3rem;}
+.shopping_bag .tip_wrap ul li::before{content: '';position: absolute;top: 7px;left: 0;background: #858585;width: 0.2rem;height: 0.2rem;}
+
 .shopping_bag .inner:nth-child(2) {padding:1.5rem 2rem;}
 .shopping_bag .nodata {min-height:13rem; line-height:13rem; text-align: center;}
 .shopping_bag .nodata p {color: #888;}
@@ -2562,4 +2569,10 @@ main.container .od_extra .inner:last-child {padding-bottom: 0;}
 .popup_main_notice.half .popup_content .popup_header {position: relative; background:transparent; height: 6rem; padding: 2.2rem;}
 .popup_main_notice.half .popup_content .popup_header::after {content:''; clear:both; display:block;}
 .popup_main_notice.half .popup_content .popup_header a.btn_underline {display:inline-block; float:left; color:#fff; font-size:1.3rem; font-weight:200; border-color:#fff; opacity: 0.4; padding-top: 0.2rem;}
-.popup_main_notice.half .popup_content .popup_header a.btn_popup_close {position: absolute; top: 0; right: 0; width: 6rem; height: 6rem; background: url(/images/mo/btn_main_pop_arrow.png) no-repeat center; background-size:1.6rem; text-indent:-999em;}
+.popup_main_notice.half .popup_content .popup_header a.btn_popup_close {position: absolute; top: 0; right: 0; width: 6rem; height: 6rem; background: url(/images/mo/btn_main_pop_arrow.png) no-repeat center; background-size:1.6rem; text-indent:-999em;}
+
+/* popup_마이페이지 회수조회 팝업 */
+.modal.reclaim_pop {}
+.modal.reclaim_pop .modal-body {margin-top: 8rem;}
+.modal.reclaim_pop .modal-body .pop_cont {color:#222;}
+.modal.reclaim_pop .modal-body .pop_cont .tbl_wrap .tbl {border-bottom: 1px solid #ddd; padding-bottom: 1.5rem;}

Some files were not shown because too many files changed in this diff