Ver Fonte

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

card007 há 5 anos atrás
pai
commit
c4b22d421c
60 ficheiros alterados com 2548 adições e 1066 exclusões
  1. 9 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 22 3
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  3. 20 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  4. 1 1
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  5. 110 1
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  6. 25 3
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  7. 25 11
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  8. 78 4
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  9. 1 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  10. 18 7
      src/main/java/com/style24/front/biz/web/TsfKollusUploadController.java
  11. 11 2
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  12. 4 1
      src/main/java/com/style24/persistence/domain/Cate4Srch.java
  13. 1 0
      src/main/java/com/style24/persistence/domain/Popup.java
  14. 1 0
      src/main/java/com/style24/persistence/domain/Review.java
  15. 7 0
      src/main/java/com/style24/persistence/domain/searchengine/SearchEngine.java
  16. 4 7
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  17. 86 8
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  18. 843 394
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  19. 83 61
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  20. 14 6
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  21. 2 7
      src/main/resources/config/application-run.yml
  22. 2 1
      src/main/resources/config/application-tsit.yml
  23. 46 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/GnbSubGoodsMob.html
  24. 1 22
      src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html
  25. 1 1
      src/main/webapp/WEB-INF/views/mob/display/AllBrandFormMob.html
  26. 8 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  27. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html
  28. 189 69
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  29. 28 22
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  30. 2 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  31. 2 10
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaDetailFormMob.html
  32. 13 8
      src/main/webapp/WEB-INF/views/mob/goods/GoodsShopBenefitFormMob.html
  33. 138 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeCompleteFormMob.html
  34. 293 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSecedeFormMob.html
  35. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html
  36. 33 16
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  37. 6 6
      src/main/webapp/WEB-INF/views/web/display/AllBrandFormWeb.html
  38. 92 44
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  39. 58 31
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  40. 138 191
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  41. 10 4
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  42. 7 7
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  43. 11 10
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  44. 6 6
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  45. 18 18
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  46. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  47. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  48. 6 4
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  49. 8 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html
  50. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsShopBenefitFormWeb.html
  51. 1 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html
  52. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  53. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html
  54. 4 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  55. 14 28
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  56. 4 5
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  57. 8 9
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  58. 16 11
      src/main/webapp/biz/goods.js
  59. 7 6
      src/main/webapp/ux/mo/css/layout_m.css
  60. 6 2
      src/main/webapp/ux/style24_link.js

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

+ 22 - 3
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -238,7 +238,7 @@ public interface TsfGoodsDao {
 	 * @date 2021. 3. 8
 	 */
 	Collection<Goods> getTmtbGoodsList(Goods goods);
-	
+
 	/**
 	 * 상품 추천상품 목록
 	 *
@@ -327,7 +327,7 @@ public interface TsfGoodsDao {
 	 * @date 2021. 4. 11
 	 */
 	Collection<Tmtb> getTmtbList(Goods goods);
-	
+
 	/**
 	 * 상품의 사은품 목록 
 	 *
@@ -337,7 +337,7 @@ public interface TsfGoodsDao {
 	 * @date 2021. 4. 13
 	 */
 	Collection<Freegift> getFreeGoodsList(Goods goods);
-	
+
 	/**
 	 * 컨텐츠카테고리상품 목록
 	 * @param cate - 카테고리 정보
@@ -382,4 +382,23 @@ public interface TsfGoodsDao {
 	 * @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);
+
 }

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

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

+ 1 - 1
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")

+ 110 - 1
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -298,7 +298,7 @@ public class TsfDisplayService {
 	}
 
 	/**
-	 * 브랜드 카테고리 목록
+	 * 아울렛 카테고리 목록
 	 * @param brandGroupNo - 브랜드그룹번호
 	 * @return
 	 * @author gagamel
@@ -317,6 +317,25 @@ public class TsfDisplayService {
 		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
@@ -467,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 - 필터 목록
@@ -542,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;
+	}
+
 }

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

@@ -3,7 +3,6 @@ package com.style24.front.biz.service;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import com.style24.persistence.domain.searchengine.SearchEngine;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -31,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;
 
@@ -779,7 +779,7 @@ public class TsfGoodsService {
 				maxRow = maxRow - goodsList.size();
 				cate.setMaxRow(maxRow);
 				cate.setCateGb("G032_101");
-				if(cate.getContentsLoc().equals("SBM003")){
+				if (cate.getContentsLoc().equals("SBM003")) {
 					cate.setCate1No(null);
 				}
 
@@ -811,7 +811,7 @@ public class TsfGoodsService {
 //			goodsSearch.setMaxRow(cate.getMaxRow());
 //			goodsSearch.setContentsLoc(cate.getContentsLoc());
 //			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
-			log.info("SBM013 goodsList cate>>>{}",cate);
+			log.info("SBM013 goodsList cate>>>{}", cate);
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 
 			for (Goods temp : goodsList) {
@@ -867,4 +867,26 @@ public class TsfGoodsService {
 		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);
+	}
+
 }

+ 25 - 11
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()) {
+			if (planningDao.getNonmemberGradeAccessible(plan) > 0) {
+				msg = "로그인 후 이용 가능합니다.";
+			}
 		}
 		
 		if (TsfSession.isLogin()) {
+			
+			// 신규회원접근가능여부 조회
+			if ("N".equals(planningDao.getNewCustomerAccessibleYn(plan))) {
+				msg = "신규회원만 접근 가능합니다.";
+			}
+			
 			// 고객구분접근가능여부 조회
 			plan.setCustGb(TsfSession.getCustGb());
 			if ("N".equals(planningDao.getCustomerGubunAccessibleYn(plan))) {
@@ -637,4 +641,14 @@ public class TsfPlanningService {
 	public Collection<Plan> getEntryReplyAttachList(Plan plan){
 		return planningDao.getEntryReplyAttachList(plan);
 	}
+	
+	/**
+	 * 기획전/이벤트 비회원 접근 조회
+	 *
+	 * @param Plan
+	 * @return int
+	 * @author sowon
+	 * @date 2021. 5. 4
+	 */
+	
 }

+ 78 - 4
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);
 		}
 
@@ -518,6 +518,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"));
@@ -684,7 +685,20 @@ public class TsfDisplayController extends TsfBaseController {
 	}
 
 	/**
-	 * 카테고리 목록
+	 * 아울렛 카테고리 목록
+	 * @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
@@ -824,7 +838,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);
@@ -832,4 +846,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;
+	}
+
 }

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

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

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

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

+ 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;		// 상품검색키워드
+
 }

+ 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;		// 상품대표이미지

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

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

+ 86 - 8
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) AS FILTER_CD
+		            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 */
@@ -920,4 +997,5 @@
 		        ) Z
 		LIMIT 2
 	</select>
+	
 </mapper>

+ 843 - 394
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1075,6 +1075,13 @@
 		/* TsfGoods.getFreeGoodsList */
 		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 +1092,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
@@ -1540,462 +1566,885 @@
 
 	<!-- 카테고리별 상품 총건수 -->
 	<select id="getCategoryGoodsCount" parameterType="SearchEngine" resultType="int">
-		/* TsfDisplay.getCategoryGoodsCount */
+		/* 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' /*상품카테고리*/
+		    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}
+		    AND    C4.CATE1_NO = #{cate1No}
 		</if>
 		<if test="cate2No != null and cate2No != ''">
-			AND    C4.CATE2_NO = #{cate2No}
+		    AND    C4.CATE2_NO = #{cate2No}
 		</if>
 		<if test="cate3No != null and cate3No != ''">
-			AND    C4.CATE3_NO = #{cate3No}
+		    AND    C4.CATE3_NO = #{cate3No}
 		</if>
 		<if test="cate4No != null and cate4No != ''">
-			AND    C4.CATE4_NO = #{cate4No}
+		    AND    C4.CATE4_NO = #{cate4No}
 		</if>
 		<if test="cate5No != null and cate5No != ''">
-			AND    C4.CATE5_NO = #{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>
+		    <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}
+		    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>
+		    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>
+		    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>
+		    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}
+		    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'
-			)
+		    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' /*자사상품만*/
-			)
+		    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}
-			)
+		    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}
+		    AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
 		</if>
 		<if test="priceTo != null and priceTo != ''">
-			AND    G.CURR_PRICE <![CDATA[<=]]> #{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}
+		    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}
+		    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 */
+		/* 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    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>
+		      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>
+		      ) 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
+		     /* 자사상품 색상 목록 */
+		     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>
+		          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
+		                JOIN   TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
+		                <!--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 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
+		      , 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'
+		     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'
+		     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
+		    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>
+		    <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}
+		    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>
+		       ) 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>
+		           ) 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>
 	

+ 83 - 61
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' /*접근불가*/
@@ -399,6 +401,29 @@
 		WHERE PLAN_SQ = #{planSq}
 	</select>
 	
+		<!-- 고객등급접근가능리스트 -->
+	<select id="getFrontAccessibleList" parameterType="Plan" resultType="String">
+		/* TsfPlanning.getFrontAccessibleList */
+		SELECT CASE FRONT_GB WHEN 'P'     THEN 'PC웹'
+		                     WHEN 'P|M'   THEN 'PC웹, 모바일웹'
+		                     WHEN 'P|M|A' THEN 'PC웹, 모바일웹, 모바일앱'
+		                     WHEN 'M'     THEN '모바일웹'
+		                     WHEN 'M|A'   THEN '모바일웹, 모바일앱'
+		                     WHEN 'A'     THEN '모바일앱'
+		                     WHEN 'P|A'   THEN 'PC웹, 모바일앱'
+		                     END AS FRONT_GB 
+		FROM tb_plan  
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
+		<!-- 비회원 접근 조회 -->
+	<select id="getNonmemberGradeAccessible" parameterType="Plan" resultType="int">
+		/* TsfPlanning.getCustomerGubunAccessibleYn */
+		SELECT count(*)
+		FROM TB_PLAN_CUST_GRADE 
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
 	<!-- 고객등급접근가능여부 조회 -->
 	<select id="getCustomerGradeAccessibleYn" parameterType="Plan" resultType="String">
 		/* TsfPlanning.getCustomerGradeAccessibleYn */
@@ -729,67 +754,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">

+ 14 - 6
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
@@ -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
@@ -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 - 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
 

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

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

@@ -780,7 +780,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>

+ 189 - 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>
@@ -1187,6 +1208,7 @@
 				
 				fnSetTotalPrice();
 				
+				$('.pop_option_select').css("display", "none");
 			}); 
 		}
 	}
@@ -1243,7 +1265,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 +1303,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 +1390,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 +1421,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 +1699,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 +1843,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 +1970,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 +1980,14 @@
 			return false;
 		});
 
+		 //관심상품 등록
+        $(document).on('click','.pd .itemLike',function(e){
+            $(this).toggleClass('active');
+            return false;
+        });   
+
+       
+        
 		fnOptionSoldout();
 		
 		// 광고 스크립트용
@@ -1982,6 +2068,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 - 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("문의내용을 입력해주세요.");

+ 13 - 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,16 @@
 								<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:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시
+										<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>
+									</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>

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

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

+ 92 - 44
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -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>
@@ -211,10 +213,11 @@
 													<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>
@@ -411,51 +414,78 @@
 
 	<!-- 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() {
 
 	// 컨텐츠 호출
@@ -685,18 +715,36 @@ $(document).ready( function() {
 	// 브랜드메인 배너 <br> 처리
 	$('.bMainTitle').each(function (){
 		let tag = '';
-		var brText = $(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 += '</dd>';
 			tag += reText[0];
-			tag += '<br>';
+			// tag += '<br>';
+			tag += '<dd>';
 			tag += reText[1];
 		}else{
 			tag += brText;
 		}
 		$(this).append(tag);
 	});
+
+	// 브랜드소개 <br> 처리
+	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>

+ 58 - 31
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>
@@ -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>
@@ -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,6 +305,11 @@
 		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() {
@@ -490,8 +497,7 @@
 				if( [[${cateInfo.formalGb}]] == 'G009_20'){
 					actionUrl = '/display/outlet/cate/list?cate1No='+cate1No+'&formalGb='+ [[${cateInfo.formalGb}]];
 				}else{
-					actionUrl = '/display/gnb/tab/list';
-					//actionUrl = '/display/category/cate/list?cate1No='+cate1No+'&formalGb=';
+					actionUrl = '/display/category/reload/list?cateGb='+[[${cateInfo.cateGb}]];
 				}
 			}else{
 				actionUrl = '/display/brand/cate/list?brandGroupNo=' + [[${cateInfo.brandGroupNo}]];
@@ -502,36 +508,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'){
-							$("#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{
+						if(brandGroupNo>0) {
+							$("#brandNm").show();
+							$("#brandNm").text(brandGroupNm);
 							$("#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 (allCateItem.contentsType == 'C') { // 컨텐츠유형:카테고리
-									$.each(allCate, function(allCateIdx, allCateItem) {
-										if (item.cate1No == allCateItem.cate1No) {
-											$('#ulAllCate').append(fnGetCategoryList(item));
-										}
-									});
-								// }
-							});
-						}else{
+						if(brandGroupNo > 0){
 							$.each(result, function(idx, item) {
 								$.each(allCate, function(brandCateIdx, brandCateItem) {
 									if (item.cate1No == brandCateItem.cate1No) {
@@ -539,6 +546,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));
+										}
+									});
+								});
+							}
 						}
 					}
 					//}
@@ -557,8 +582,6 @@
 			var navNm = "";
 			var formTitle = "";
 			let tag = '';
-			
-			console.log('cate1No>>>'+cate1No);
 		
 			if(cate1 != null){
 				tag += '<li';
@@ -583,10 +606,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';

+ 138 - 191
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" style="width:auto;height:660px;" 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,59 @@
 							<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="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}">
 				<div class="cont_head">
-					<h3>룩북 속 상품<span class="number">(9,999)</span></h3>
+					<h3>룩북 속 상품<span class="number">()</span></h3> <!--<th:block th:text="${#lists.size(lookbookDetailList.lookbookGoodsList)}"></th:block>-->
 					<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
 				</div>
 				<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 class="items_outside">
+							<th:block th:each="item, stat : ${lookbookDetailList}">
+							<div class="itemsOut">
+								<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">
+														<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>
-								</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>
+										</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 +143,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 +179,70 @@
 	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");
 	}
 	// 컨텐츠 호출
 	$(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 +251,33 @@
 				el: '.br_lookbook_view.cont_visual .swiper-pagination',
 				clickable: true,
 			},
+			on: {
+				slideChange:function(){
+					$('.text_cont').removeClass('active');
+					$('.itemsOut').removeClass('active');
+					$('.text_cont').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,

+ 10 - 4
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'}"></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">
 
@@ -80,12 +80,17 @@
 <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,7 +125,9 @@
 							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>';
@@ -160,7 +167,6 @@
 
 		if(lookbookGb=='BL'){
 			$("#brandBox").hide();
-			$("#brandLi").show();
 			$("#navHome").attr('onclick', 'cfnGoToBrandMain('+brandCd+');');
 		}else{
 			$("#navHome").attr('href', '/');

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

@@ -1296,7 +1296,7 @@ $(document).ready(function() {
 	// 몰메인 <br> 태그
 	$('.mainTitle').each(function (){
 		let tag = '';
-		var brText = $(this).find("input[name=mainTitlee]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+		var brText = $(this).find("input[name=mainTitlee]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
 		if(brText.indexOf('<br>') > -1){
 			var reText = brText.split("<br>");
 			tag += '</dd>';
@@ -1312,7 +1312,7 @@ $(document).ready(function() {
 	// 가로긴배너 슬라이드
 	$('.silderBannerArea').each(function (){
 		let tag = '';
-		var noteText = $(this).find("input[name=bannerNote]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+		var noteText = $(this).find("input[name=bannerNote]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
 		if(noteText.indexOf('<br>') > -1){
 			var reText = noteText.split("<br>");
 			tag += reText[0];
@@ -1328,8 +1328,8 @@ $(document).ready(function() {
 	$('.styleArea').each(function (){
 		let tag = '';
 		let tag2 = '';
-		var titleText = $(this).find("input[name=styleTitle]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
-		var noteText = $(this).find("input[name=styleNote]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+		var titleText = $(this).find("input[name=styleTitle]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
+		var noteText = $(this).find("input[name=styleNote]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
 
 		if(titleText.indexOf('<br>') > -1){
 			var reText = titleText.split("<br>");
@@ -1354,7 +1354,7 @@ $(document).ready(function() {
 	});
 
 	// 잇아이템 <br> 태그
-	var id004Text = $("#id004").find("input[name=title]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+	var id004Text = $("#id004").find("input[name=title]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
 	if(id004Text.indexOf('<br>') > -1){
 		let tag = '';
 		var reText = id004Text.split("<br>");
@@ -1369,7 +1369,7 @@ $(document).ready(function() {
 	}
 
 	// 핫딜 <br> 태그
-	var id006Text = $("#id006").find("input[name=title]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+	var id006Text = $("#id006").find("input[name=title]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
 	if(!gagajf.isNull(id006Text)){
 		if(id006Text.indexOf('<br>') > -1){
 			let tag = '';
@@ -1388,7 +1388,7 @@ $(document).ready(function() {
 	// 브랜드픽 <br> 태그
 	$('#id007 .title').each(function (){
 		let tag = '';
-		var brText = $(this).find("input[name=title]").val().replace("<BR>", "<br>").replace("<bR>", "<br>").replace("<Br>", "<br>");
+		var brText = $(this).find("input[name=title]").val().replaceAll("<BR>", "<br>").replaceAll("<bR>", "<br>").replaceAll("<Br>", "<br>");
 
 		if(brText.indexOf('<br>') > -1){
 			var reText = brText.split("<br>");

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

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

@@ -46,7 +46,6 @@
 												</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>
 												</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) {

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

@@ -492,7 +492,7 @@
 				tag += '					<dt>구매옵션</dt>\n';
 				if (item.goodsOptionList != null && item.goodsOptionList.length > 0){
 					$.each(item.goodsOptionList, function(gIdx, goodsOption){
-				tag += '					<dd>'+ goodsOption.optCd1 +' / '+ goodsOption.optCd2 +'</dd>\n';		
+				tag += '					<dd>'+ goodsOption.optCd1Nm +' / '+ goodsOption.optCd2 +'</dd>\n';		
 					});
 				}
 				tag += '				</div>\n';

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

@@ -101,21 +101,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';
+				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
+					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
 				tag +='							<dd>'+ reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2+'</dd>\n';
-				tag +='						</div>\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;
 					});	
 				}
 				

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

@@ -77,7 +77,7 @@
 								<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="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>
 									</td>
 								</tr>
 							</tbody>

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

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

+ 1 - 1
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';	

+ 4 - 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>																';
@@ -234,7 +234,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>     ';

+ 14 - 28
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

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

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

@@ -154,7 +154,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>';
@@ -169,11 +168,11 @@ if(planCornerList.length>0){
 		$.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';
+			if(item2.likeIt === 'likeit'){
+			html += '		<button type="button" class="itemLike likeit active"';
+			}else{
+				html += '		<button type="button" class="itemLike"';
 			}
-			html += ' "';
 			html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
 			
 			html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';

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

@@ -97,30 +97,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 +126,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+'\'">';

+ 16 - 11
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");
@@ -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">';
@@ -364,16 +368,17 @@ var filterSel = function (obj, gubun, staus, sizeGb){
 
 var fnFilterSet = function (searchId, sizeGb){
 	fnCategoryGoodsInfiniteScrollInit();
-	$("#searchGoodsForm input:hidden[name="+searchId+"Search]").remove();
+	console.log('searchId>>'+searchId);
+	$("#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);
 		});
 	}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);
 		});
 	}

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

+ 6 - 2
src/main/webapp/ux/style24_link.js

@@ -1031,7 +1031,9 @@ function cfnPutWishList(a) {
 				//		}
 				//	});
 				}
-				fnGetWishList();
+				if ("P" == _frontGb){
+					fnGetWishList();	
+				}
 			} else if (result.status == "중복") {
 				Msg = '이미 등록 되어있습니다.';
 			} else {
@@ -1053,7 +1055,9 @@ function cfnPutWishList(a) {
 			if (result.status == "200") {
 				Msg = '삭제 되었습니다.';
 				$(a).removeClass('active');
-				fnGetWishList();
+				if ("P" == _frontGb){
+					fnGetWishList();	
+				}
 			} else {
 				Msg = '오류로 인해 처리되지 않았습니다.';
 			}