Bladeren bron

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

card007 5 jaren geleden
bovenliggende
commit
2e9f056ca5
30 gewijzigde bestanden met toevoegingen van 3194 en 788 verwijderingen
  1. 0 1
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 18 8
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  3. 2 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  4. 48 14
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  5. 27 29
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  6. 40 0
      src/main/java/com/style24/front/biz/thirdparty/SearchEngineDiquest.java
  7. 4 8
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  8. 92 72
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  9. 24 2
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  10. 21 0
      src/main/java/com/style24/persistence/domain/searchengine/Filter.java
  11. 73 0
      src/main/java/com/style24/persistence/domain/searchengine/SearchEngine.java
  12. 471 407
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  13. 6 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  14. 63 22
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  15. 1 0
      src/main/resources/i18n/messages/message_ko_KR.properties
  16. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/UseTermsLayerFormMob.html
  17. 191 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustDeliveryAddrFormMob.html
  18. 250 49
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  19. 1 1
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  20. 64 60
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  21. 963 0
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb2.html
  22. 323 0
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb3.html
  23. 139 69
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  24. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustDeliveryAddrFormWeb.html
  25. 277 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html
  26. 7 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  27. 28 6
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  28. 13 0
      src/main/webapp/ux/mo/css/common_m.css
  29. 0 6
      src/main/webapp/ux/pc/js/common-ui.js
  30. 45 21
      src/main/webapp/ux/style24_link.js

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

@@ -1,7 +1,6 @@
 package com.style24.front.biz.dao;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;

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

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

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

@@ -7,7 +7,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
-import com.gagaframework.web.util.GagaDateUtil;
+
 import com.style24.persistence.domain.CustGrade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -284,6 +284,7 @@ public class TsfCustomerService {
 	 * @author jsshin
 	 * @since 2021. 02. 19
 	 */
+	@Transactional("shopTxnManager")
 	public boolean saveJoinCustomerSns (Customer customer) {
 		boolean isJoin = true;
 		String snsId = customer.getSnsType().equals(TscConstants.SnsType.YES24.value()) ? customer.getMemNo() : customer.getSnsId();

+ 48 - 14
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -1,8 +1,9 @@
 package com.style24.front.biz.service;
 
-import java.util.Collection;
 import java.util.ArrayList;
+import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
@@ -23,9 +24,11 @@ import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
-import com.style24.persistence.domain.Login;
+import com.style24.persistence.domain.searchengine.Filter;
+import com.style24.persistence.domain.searchengine.SearchEngine;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -422,13 +425,45 @@ public class TsfDisplayService {
 
 		Collection<Goods> goodsList = goodsDao.getContentsCategoryGoodsList(cate4Srch);
 
-		if(goodsList.size() < 100){
+		if (goodsList.size() < 100) {
 			// TODO 추천솔루션
 		}
 
 		return goodsList;
 	}
 
+	/**
+	 * 상품리스트 카테고리별 필터 목록
+	 * @param params - 검색엔진 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 3
+	 */
+	public Collection<Filter> getGoodsListCategoryFilterList(SearchEngine params) {
+		params.setSiteCd(TscConstants.Site.STYLE24.value());
+		if (StringUtils.isBlank(params.getFormalGb())) {
+			params.setFormalGb("G009_10");
+		}
+		return displayDao.getGoodsListCategoryFilterList(params);
+	}
+
+	/**
+	 * 카테고리별 필터 목록
+	 * @param filterList - 필터 목록
+	 * @param filterGb - 필터 구분
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 5. 3
+	 */
+	public Collection<Filter> getCategoryFilterList(Collection<Filter> filterList, String filterGb) {
+		Collection<Filter> resultList = new ArrayList<Filter>();
+		for (Filter filter : filterList) {
+			if (filter.getFilterGb().equals(filterGb)) {
+				resultList.add(filter);
+			}
+		}
+		return resultList;
+	}
 
 	/**
 	 * 상품카테고리 필터 목록
@@ -454,26 +489,25 @@ public class TsfDisplayService {
 	}
 
 	/**
-	 * 카테고리 별 상품 
-	 * @param
+	 * 카테고리별 상품수
+	 * @param params - 검색엔진 정보
 	 * @return
 	 * @author bin2107
 	 * @date 2021. 4. 7
 	 */
-	public int getCategoryGoodsCount(GoodsSearch goodsSearch) {
-		return displayDao.getCategoryGoodsCount(goodsSearch);
+	public int getCategoryGoodsCount(SearchEngine params) {
+		return displayDao.getCategoryGoodsCount(params);
 	}
 
 	/**
-	 * 카테고리 별 상품 리스트
-	 * @param
+	 * 카테고리별 상품 목록
+	 * @param params - 검색엔진 정보
 	 * @return
 	 * @author bin2107
 	 * @date 2021. 4. 8
 	 */
-	public Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch) {
-		Collection<Goods> goodsList = displayDao.getCategoryGoodsList(goodsSearch);
-		return goodsList;
+	public Collection<SearchEngine> getCategoryGoodsList(SearchEngine params) {
+		return displayDao.getCategoryGoodsList(params);
 	}
 
 	/**
@@ -486,7 +520,7 @@ public class TsfDisplayService {
 	public Collection<BrandGroup> getBrandImgList(BrandGroup brandGroup) {
 		return displayDao.getBrandImgList(brandGroup);
 	}
-	
+
 	/**
 	 * 전체 브랜드
 	 * @param
@@ -505,7 +539,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @since 2021. 4. 14
 	 */
-	public Collection<Contents> getGnbTabBannerlist(Contents contenst){
+	public Collection<Contents> getGnbTabBannerlist(Contents contenst) {
 		Collection<Contents> contentsList = displayDao.getGnbTabBannerList(contenst);
 		return contentsList;
 	}

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

@@ -22,7 +22,6 @@ import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsSafeNo;
-import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.GoodsViewHst;
@@ -79,7 +78,7 @@ public class TsfGoodsService {
 			} else {
 				goodsViewHst.setReferer(referer);
 			}
-		} 
+		}
 
 		if (TsfSession.getInfo() != null) {
 			goodsViewHst.setCustNo(TsfSession.getInfo().getCustNo());
@@ -452,14 +451,14 @@ public class TsfGoodsService {
 		//String[][] arrGoodsStoreList = null;	// 상품코드, 매장코드, 상품별 주문수량
 
 		log.info("[getGoodsSetStockQty] goodsStock = {}", goodsStock);
-		
+
 		int ableOrderCnt = 0;
 		for (String arrGoodsCd : goodsStock.getArrGoodsOption()) {	// [{goodsCd|optCd|qty},{goodsCd|optCd|qty}]
 
 			String[] goodsSizeInfo = arrGoodsCd.split("\\|");
 			log.info("[getGoodsSetStockQty] goodsSizeInfo = {}", goodsSizeInfo);
 			if (goodsSizeInfo.length == 3) {
-				
+
 				GoodsStock tmpStock = new GoodsStock();
 				tmpStock.setGoodsCd(goodsSizeInfo[0]);
 				tmpStock.setOptCd(goodsSizeInfo[1]);
@@ -547,7 +546,7 @@ public class TsfGoodsService {
 	public Collection<Goods> getTmtbGoodsList(Goods goods) {
 		return goodsDao.getTmtbGoodsList(goods);
 	}
-	
+
 	/**
 	 * 상품 추천상품 목록
 	 * @param goods
@@ -558,7 +557,6 @@ public class TsfGoodsService {
 	public Collection<Goods> getRecommendGoodsList(Goods goods) {
 		return goodsDao.getRecommendGoodsList(goods);
 	}
-	
 
 	/**
 	 * 재입고 알림 미 알림 조회
@@ -730,7 +728,7 @@ public class TsfGoodsService {
 	public Collection<Tmtb> getTmtbList(Goods goods) {
 		return goodsDao.getTmtbList(goods);
 	}
-	
+
 	/**
 	 * 상품의 다다익선 목록 
 	 * @param goods
@@ -759,7 +757,7 @@ public class TsfGoodsService {
 
 		if (cate.getContentsLoc().equals("SCM002") || cate.getContentsLoc().equals("SBM007") || cate.getContentsLoc().equals("SMM003") || cate.getContentsLoc().equals("SBM003")) { // 신상품인 경우
 			int maxRow = 20;
-			if(cate.getContentsLoc().equals("SBM003")){
+			if (cate.getContentsLoc().equals("SBM003")) {
 				maxRow = 3;
 			}
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
@@ -778,7 +776,7 @@ public class TsfGoodsService {
 				}
 				maxRow = maxRow - goodsList.size();
 				cate.setMaxRow(maxRow);
-				if(cate.getContentsLoc().equals("SBM003")){
+				if (cate.getContentsLoc().equals("SBM003")) {
 					cate.setCate1No(null);
 				}
 
@@ -789,36 +787,37 @@ public class TsfGoodsService {
 
 			// 추천솔루션 데이터가 없으면 베스트로 등록된 상품 조회
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
-			for(Goods temp : goodsList){
-				if(temp.getSizes()!=null){
+			for (Goods temp : goodsList) {
+				if (temp.getSizes() != null) {
 					temp.setSizeArr(temp.getSizes().split(","));
 				}
-				if(temp.getColorChips()!=null){
+				if (temp.getColorChips() != null) {
 					temp.setColorArr(temp.getColorChips().split(","));
 				}
-				if(temp.getIcon()!=null){
+				if (temp.getIcon() != null) {
 					temp.setBenefitArr(temp.getIcon().split(","));
 				}
 			}
 		} else if (cate.getContentsLoc().equals("SBM013")) {
-			GoodsSearch goodsSearch = new GoodsSearch();
-			goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
-			goodsSearch.setFormalGb(cate.getFormalGb());
-			goodsSearch.setCustGb(cate.getCustGb());
-			goodsSearch.setCustNo(cate.getCustNo());
-			goodsSearch.setBrandGroupNo(cate.getBrandGroupNo());
-			goodsSearch.setMaxRow(cate.getMaxRow());
-			goodsSearch.setContentsLoc(cate.getContentsLoc());
-			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
-			
-			for(Goods temp : goodsList){
-				if(temp.getSizes()!=null){
+//			GoodsSearch goodsSearch = new GoodsSearch();
+//			goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
+//			goodsSearch.setFormalGb(cate.getFormalGb());
+//			goodsSearch.setCustGb(cate.getCustGb());
+//			goodsSearch.setCustNo(cate.getCustNo());
+//			goodsSearch.setBrandGroupNo(cate.getBrandGroupNo());
+//			goodsSearch.setMaxRow(cate.getMaxRow());
+//			goodsSearch.setContentsLoc(cate.getContentsLoc());
+//			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
+			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
+
+			for (Goods temp : goodsList) {
+				if (temp.getSizes() != null) {
 					temp.setSizeArr(temp.getSizes().split(","));
 				}
-				if(temp.getColorChips()!=null){
+				if (temp.getColorChips() != null) {
 					temp.setColorArr(temp.getColorChips().split(","));
 				}
-				if(temp.getIcon()!=null){
+				if (temp.getIcon() != null) {
 					temp.setBenefitArr(temp.getIcon().split(","));
 				}
 			}
@@ -828,7 +827,7 @@ public class TsfGoodsService {
 
 		return goodsList;
 	}
-	
+
 	/**
 	 * ep쿠폰 다운 처리
 	 *
@@ -842,5 +841,4 @@ public class TsfGoodsService {
 		return couponService.createEpCoupon(goods);
 	}
 
-
 }

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

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

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

@@ -4,14 +4,11 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
 import com.style24.front.biz.thirdparty.Yes24Login;
-import com.style24.front.support.env.TsfConstants;
 import com.style24.persistence.domain.CustSnsInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpRequest;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -96,7 +93,7 @@ public class TsfCustomerController extends TsfBaseController {
 		boolean isFind = false;
 
 		if (StringUtils.isBlank(customer.getAuthMethod())) {
-			throw new IllegalStateException("인증방법이 없습니다. <br>관리자에게 문의하시기 바랍니다.");
+			throw new IllegalStateException(message.getMessage("CUST_0005"));
 		}
 
 		Customer params = new Customer();
@@ -165,7 +162,7 @@ public class TsfCustomerController extends TsfBaseController {
 		boolean isFind = false;
 
 		if (StringUtils.isBlank(customer.getAuthMethod())) {
-			throw new IllegalStateException("인증방법이 없습니다. <br>관리자에게 문의하시기 바랍니다.");
+			throw new IllegalStateException(message.getMessage("CUST_0005"));
 		}
 
 		// 고객정보 찾기 - 아이디, 이름, 이메일
@@ -210,7 +207,7 @@ public class TsfCustomerController extends TsfBaseController {
 		boolean isFind = false;
 
 		if (StringUtils.isBlank(customer.getAuthMethod())) {
-			throw new IllegalStateException("인증방법이 없습니다. <br>관리자에게 문의하시기 바랍니다.");
+			throw new IllegalStateException(message.getMessage("CUST_0005"));
 		}
 
 		Customer params = new Customer();
@@ -875,8 +872,7 @@ public class TsfCustomerController extends TsfBaseController {
 
 		mav.addObject("custNm", customer.getCustNm());
 
-//		mav.setViewName(super.getDeviceViewName("customer/ConsentUseInfoForm"));
-		mav.setViewName("web/customer/ConsentUseInfoFormWeb");
+		mav.setViewName(super.getDeviceViewName("customer/ConsentUseInfoForm"));
 
 		return mav;
 	}

+ 92 - 72
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

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

+ 24 - 2
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1573,8 +1573,6 @@ public class TsfMypageController extends TsfBaseController {
 		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
 		pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
 		review.setPageable(pageable);
-		log.info("pageable: {}", pageable);
-		log.info("totalCount {}", pageable.getTotalCount());
 		
 		result.set("paging1", review);
 		
@@ -1709,6 +1707,30 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 	
+	/**
+	 * 상품상세 -  상품평 상세 레이어
+	 * @return
+	 * @author sowon
+	 * @since 2021. 5. 3
+	 */
+	@PostMapping("/review/detail/layer")
+	public ModelAndView mypageReviewDetailForm(Review review) {
+		ModelAndView mav = new ModelAndView();
+		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
+		Goods paramsGoods = new Goods();
+		paramsGoods.setGoodsCd(review.getGoodsCd());
+
+		// 상품 기본정보
+		mav.addObject("params", paramsGoods);
+
+		mav.addObject("review", review);
+
+		mav.addObject("reviewList", reviewService.getReviewList(review));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewDetailForm"));
+		return mav;
+	}
+	
 	/**
 	 * 마이페이지 어드민 댓글 확인
 	 *

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

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

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

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

+ 471 - 407
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -614,6 +614,40 @@
 				 )
 	</select>
 
+	<!-- 상품리스트 카테고리별 필터 목록 -->
+	<select id="getGoodsListCategoryFilterList" parameterType="SearchEngine" resultType="Filter">
+		/* TsfDisplay.getGoodsListCategoryFilterList */
+		SELECT FILTER_GB
+		       <choose>
+		           <when test="filterGb != null and filterGb == 'SIZE'">
+		     , SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
+		           </when>
+		           <otherwise>
+		     , FILTER_CD
+		           </otherwise>
+		       </choose>
+		     , FILTER_NM
+		FROM   TB_CATE_FILTER
+		WHERE  SITE_CD = #{siteCd}
+		AND    CATE_GB = #{cateGb}
+		AND    FORMAL_GB = #{formalGb}
+		AND    BRAND_GROUP_NO = #{brandGroupNo}
+		AND    CATE_NO = CASE WHEN IFNULL(#{cate4No},0) > 0 THEN
+		                          #{cate4No}
+		                      ELSE
+		                          CASE WHEN IFNULL(#{cate3No},0) > 0 THEN
+		                                   #{cate3No}
+		                               ELSE
+		                                   CASE WHEN IFNULL(#{cate2No},0) > 0 THEN
+		                                            #{cate2No}
+		                                        ELSE
+		                                            #{cate1No}
+		                                   END
+		                          END
+		                 END
+		ORDER  BY FILTER_GB, DISP_ORD
+	</select>
+	
 	<!-- 상품 카테고리 필터 -->
 	<select id="getCategoryFilter" parameterType="Cate4srch" resultType="GoodsSearch">
 		/* TsfDisplay.getCategoryFilter */
@@ -675,378 +709,395 @@
 		                    AND CATE5_NO = #{cate5No}
 		                  </if>
 		                )
-		<if test="brandGroupNo != null and brandGroupNo !=''">
-		  AND CG.BRAND_GROUP_NO = #{brandGroupNo}
+		<if test="brandGroupNo != null and brandGroupNo > 0">
+		AND   CG.BRAND_GROUP_NO = #{brandGroupNo}
 		</if>
 		GROUP BY GB.BENEFIT_GB
 	</select>
 
-	<!-- 카테고리별 상품 총 건수 new -->
-	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
+	<!-- 카테고리별 상품 총건수 -->
+	<select id="getCategoryGoodsCount" parameterType="SearchEngine" resultType="int">
 		/* TsfDisplay.getCategoryGoodsCount */
-		WITH TAB_GOODS AS (
-		      SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
-		           , G.GOODS_CD           /*상품코드*/
-		           , G.GOODS_NM           /*상품명*/
-		           , G.GOODS_GB           /*상품구분*/
-		           , G.SELF_GOODS_YN      /*자사상품여부*/
-		           , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
-		           , G.PARALLEL_IMPORT_YN /*병행수입여부*/
-		           , G.ORDER_MADE_YN      /*주문제작여부*/
-		           , G.GOODS_TNM          /*상품타이틀명*/
-		           , G.MAIN_COLOR_CD      /*대표색상코드*/
-		           , G.LIST_PRICE         /*정상가(최초판매가)*/
-		           , G.CURR_PRICE         /*현재판매가*/
-		           , G.FORMAL_GB
-		           , G.REG_DT             /*등록일시*/
-		           , G.SELL_WEEK_QTY  /*주간판매수량*/
-		           , G.REVIEW_REG_CNT /*리뷰등록건수*/
-		      FROM   (
-		           SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
-		                  BG.BRAND_GROUP_ENM
-		                  ELSE
-		                  BG.BRAND_GROUP_KNM
-		                  END                                                                AS BRAND_GROUP_NM /*브랜드그룹명*/
-		                  , G.GOODS_CD                                                                           /*상품코드*/
-		                  , G.GOODS_NM                                                                           /*상품명*/
-		                  , G.GOODS_GB                                                                           /*상품구분*/
-		                  , G.SELF_GOODS_YN                                                                      /*자사상품여부*/
-		                  , G.FOREIGN_BUY_YN                                                                     /*해외구매대행여부*/
-		                  , G.PARALLEL_IMPORT_YN                                                                 /*병행수입여부*/
-		                  , G.ORDER_MADE_YN                                                                      /*주문제작여부*/
-		                  , G.GOODS_TNM                                                                          /*상품타이틀명*/
-		                  , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
-		                  , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                  , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                         WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                         WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                         WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                         WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                         WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                         ELSE G.CURR_PRICE
-		                    END                                                   AS CURR_PRICE       /*현재판매가*/
-		                  , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
-		                  , G.FORMAL_GB /*정상이월구분*/
-		                  , G.REG_DT                                                                             /*등록일시*/
-		                  , GS.SELL_WEEK_QTY  /*주간판매수량*/
-		                  , GS.REVIEW_REG_CNT /*리뷰등록건수*/
-		           FROM   TB_CATE_4SRCH C4
-		           INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
-		           INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
-		           INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
-		           INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		           INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		           INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
-		           LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
-		           WHERE  C4.SITE_CD = 'G000_10'
-		           AND    C4.CATE_GB = 'G032_101'
-		           AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		           <if test="cate1No != null and cate1No != ''">
-		           AND    C4.CATE1_NO = #{cate1No}
-		           </if>
-		           <if test="cate2No != null and cate2No != ''">
-		           AND    C4.CATE2_NO = #{cate2No}
-		           </if>
-		           <if test="cate3No != null and cate3No != ''">
-		           AND    C4.CATE3_NO = #{cate3No}
-		           </if>
-		           <if test="cate4No != null and cate4No != ''">
-		           AND    C4.CATE4_NO = #{cate4No}
-		           </if>
-		           <if test="cate5No != null and cate5No != ''">
-		           AND    C4.CATE5_NO = #{cate5No}
-		           </if>
-		           <choose>
-		               <when test="brandGroupNo != null and brandGroupNo != ''">
-		           AND    B.BRAND_GROUP_NO = #{brandGroupNo}
-		               </when>
-		               <otherwise>
-		           AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		               </otherwise>
-		           </choose>
-		           <if test="formalGb != null and formalGb !=''">
-		           AND    G.FORMAL_GB = #{formalGb}
-		           </if>
-		           AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		           AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
-		           AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
-		           AND    S.STOCK_QTY > 0 /*재고있는 상품*/
-		           AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		           AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
-		           <if test="priceHigh != null and priceHigh != ''">
-		           AND    G.CURR_PRICE <![CDATA[<=]]> #{priceHigh}
-		           </if>
-		           <if test="priceRow != null and priceRow != ''">
-		           AND    G.CURR_PRICE <![CDATA[>=]]> #{priceRow}
-		           </if>
-		           <if test="dcrateHigh != null and dcrateHigh != ''">
-		           AND    G.DC_RATE <![CDATA[<=]]> #{dcrateHigh}
-		           </if>
-		           <if test="dcrateRow != null and dcrateRow != ''">
-		           AND    G.DC_RATE <![CDATA[>=]]> #{dcrateRow}
-		           </if>
-		           <if test="sexGb != null and sexGb != ''">
-		           AND    G.SEX_GB = #{sexGb}
-		           </if>
-		           <if test="newProd != null and newProd != ''">
-		           AND    EXISTS ( SELECT 1 FROM TB_GOODS_BENEFIT
-		                           WHERE GOODS_CD = G.GOODS_CD
-		                           AND BENEFIT_GB IN (#{newProd}) )
-		           </if>
-		           <include refid="getCategoryGoodsList_sql"/>
-		) G
+		SELECT COUNT(*)
+		FROM   (
+		        SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                         BG.BRAND_GROUP_ENM
+		                    ELSE
+		                         BG.BRAND_GROUP_KNM
+		               END                  AS BRAND_GROUP_NM /*브랜드그룹명*/
+		             , G.GOODS_CD                             /*상품코드*/
+		             , G.GOODS_NM                             /*상품명*/
+		             , G.GOODS_GB                             /*상품구분*/
+		             , G.SELF_GOODS_YN                        /*자사상품여부*/
+		             , G.FOREIGN_BUY_YN                       /*해외구매대행여부*/
+		             , G.PARALLEL_IMPORT_YN                   /*병행수입여부*/
+		             , G.ORDER_MADE_YN                        /*주문제작여부*/
+		             , G.GOODS_TNM                            /*상품타이틀명*/
+		             , G.MAIN_COLOR_CD                        /*대표색상코드*/
+		             , G.LIST_PRICE                           /*정상가(최초판매가)*/
+		             , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		                    WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		                    WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		                    WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		                    WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		                    WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		                    ELSE G.CURR_PRICE
+		               END                  AS CURR_PRICE     /*현재판매가*/
+		             , G.MIN_ORD_AMT                          /*최소주문금액*/
+		             , G.FORMAL_GB                            /*정상이월구분*/
+		             , G.REG_DT                               /*등록일시*/
+		             , GS.SELL_WEEK_QTY                       /*주간판매수량*/
+		             , GS.REVIEW_REG_CNT                      /*리뷰등록건수*/
+		        FROM   TB_CATE_4SRCH C4
+		        INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		        INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		        INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		        INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		        INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		        LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		        WHERE  C4.SITE_CD = #{siteCd}
+		        AND    C4.CATE_GB = #{cateGb}
+		        AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		        <if test="cate1No != null and cate1No != ''">
+		        AND    C4.CATE1_NO = #{cate1No}
+		        </if>
+		        <if test="cate2No != null and cate2No != ''">
+		        AND    C4.CATE2_NO = #{cate2No}
+		        </if>
+		        <if test="cate3No != null and cate3No != ''">
+		        AND    C4.CATE3_NO = #{cate3No}
+		        </if>
+		        <if test="cate4No != null and cate4No != ''">
+		        AND    C4.CATE4_NO = #{cate4No}
+		        </if>
+		        <if test="cate5No != null and cate5No != ''">
+		        AND    C4.CATE5_NO = #{cate5No}
+		        </if>
+		        <choose>
+		            <when test="brandGroupNo != null and brandGroupNo > 0">
+		        AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		            </when>
+		            <otherwise>
+		        AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		            </otherwise>
+		        </choose>
+		        <if test="formalGb != null and formalGb !=''">
+		        AND    G.FORMAL_GB = #{formalGb}
+		        </if>
+		        AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		        AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		        AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		        <if test="ageArr != null and ageArr.length > 0"> <!-- 연령대 -->
+		        AND    G.AGE_GRP_CD IN
+		            <foreach collection="agesArr" item="item" index="index"  open="(" close=")" separator=",">
+		            #{item}
+		            </foreach>
+		        </if>
+		        <if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
+		        AND    G.SEASON_CD IN
+		            <foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
+		            #{item}
+		            </foreach>
+		        </if>
+		        AND    S.STOCK_QTY > 0 /*재고있는 상품*/
+		        AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		        AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		        <if test="brandGroupArr != null and brandGroupArr.length > 0">
+		        AND    BG.BRAND_GROUP_NO IN
+		            <foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+		            #{item}
+		            </foreach>
+		        </if>
+		        <if test="unisex != null and unisex != ''">
+		        AND    G.SEX_GB = #{unisex}
+		        </if>
+		        <if test='sizeArr != null and sizeArr.length > 0'>
+		        AND    EXISTS (SELECT 1
+		                       FROM   TB_OPTION
+		                       WHERE  GOODS_CD = CG.GOODS_CD
+		                       AND    OPT_CD2 IN
+		                       <foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+		                       #{item}
+		                       </foreach>
+		                       AND    DISP_YN = 'Y'
+		                      )
+		        </if>
+		        <if test="colorArr != null and colorArr.length > 0">
+		        AND    EXISTS (SELECT 1
+		                       FROM   TB_OPTION O
+		                            , TB_COLOR C
+		                       WHERE  O.GOODS_CD = G.GOODS_CD
+		                       AND    O.OPT_CD1 = C.COLOR_CD
+		                       AND    O.DISP_YN = 'Y'
+		                       AND    C.COLOR_GRP_CD IN
+		                       <foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+		                       #{item}
+		                       </foreach>
+		                       AND    C.USE_YN = 'Y' /*사용하는색상*/
+		                       AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
+		                      )
+		        </if>
+		        <if test="newGoods != null and newGoods != ''">
+		        AND    EXISTS (SELECT 1
+		                       FROM   TB_GOODS_BENEFIT
+		                       WHERE  GOODS_CD = G.GOODS_CD
+		                       AND    BENEFIT_GB = #{newGoods}
+		                      )
+		        </if>
+		       ) G
 		WHERE  1 = 1
-		)
-		, TAB_OPTION AS (
-		      /* 자사상품 색상 목록 */
-		      SELECT O.GOODS_CD
-		      , O.OPT_CD1  AS MAIN_COLOR_CD
-		      FROM   TAB_GOODS G
-		      , TB_OPTION O
-		      WHERE  G.GOODS_CD = O.GOODS_CD
-		      AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
-		      AND    O.DISP_YN = 'N'
-		      GROUP  BY O.GOODS_CD, O.OPT_CD1
-		)
-		, TAB_ALL_GOODS AS (
-		         SELECT *
-		         FROM   (
-		         SELECT G.BRAND_GROUP_NM
-		              , G.GOODS_CD
-		              , G.GOODS_NM           /*상품명*/
-		              , G.GOODS_GB           /*상품구분*/
-		              , G.SELF_GOODS_YN      /*자사상품여부*/
-		              , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
-		              , G.PARALLEL_IMPORT_YN /*병행수입여부*/
-		              , G.ORDER_MADE_YN      /*주문제작여부*/
-		              , G.GOODS_TNM          /*상품타이틀명*/
-		              , IFNULL(O.MAIN_COLOR_CD,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD /*대표색상코드*/
-		              , G.LIST_PRICE         /*정상가(최초판매가)*/
-		              , G.CURR_PRICE         /*현재판매가*/
-		              , G.FORMAL_GB
-		              , G.REG_DT             /*등록일시*/
-		              , G.SELL_WEEK_QTY
-		              , G.REVIEW_REG_CNT
-		              , RANK() OVER(ORDER BY G.FORMAL_GB
-		              , G.REG_DT DESC
-		              , G.GOODS_CD) AS NUMB
-		        FROM TAB_GOODS G
-		        LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
-		        ) ORIGINAL
-		)
-		, TAB_GOODS_IMG AS (
-		/* 상품의 이미지 */
-		     SELECT GOODS_CD
-		     ,MAX(SYS_IMG_NM)  AS SYS_IMG_NM
-		     ,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
-		     FROM   (
-		             SELECT G.GOODS_CD
-		             , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
-		             , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
-		             FROM   TAB_ALL_GOODS G
-		             , TB_GOODS_IMG GI
-		             WHERE  G.GOODS_CD = GI.GOODS_CD
-		             AND    G.MAIN_COLOR_CD = GI.COLOR_CD
-		     ) Z
-		GROUP  BY GOODS_CD
-		)
-		SELECT COUNT(1) AS TOTCNT
-		FROM TAB_ALL_GOODS G
-		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
-	     <if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
-	     LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
-	                                  AND W.CUST_NO = #{custNo}
-	     </if>
+		<if test="priceFrom != null and priceFrom != ''">
+		AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
+		</if>
+		<if test="priceTo != null and priceTo != ''">
+		AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
+		</if>
+		<if test="dcRateFrom != null and dcRateFrom != ''">
+		AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
+		</if>
+		<if test="dcRateTo != null and dcRateTo != ''">
+		AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
+		</if>
 	</select>
 
-	<!-- 카테고리별 상품 리스트 -->
-	<select id="getCategoryGoodsList" parameterType="GoodsSearch" resultType="Goods">
+	<!-- 카테고리별 상품 목록 -->
+	<select id="getCategoryGoodsList" parameterType="SearchEngine" resultType="SearchEngine">
 		/* TsfDisplay.getCategoryGoodsList */
 		WITH TAB_GOODS AS (
-		          SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
-		               , G.GOODS_CD           /*상품코드*/
-		               , G.GOODS_NM           /*상품명*/
-		               , G.GOODS_GB           /*상품구분*/
-		               , G.SELF_GOODS_YN      /*자사상품여부*/
-		               , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
-		               , G.PARALLEL_IMPORT_YN /*병행수입여부*/
-		               , G.ORDER_MADE_YN      /*주문제작여부*/
-		               , G.GOODS_TNM          /*상품타이틀명*/
-		               , G.MAIN_COLOR_CD      /*대표색상코드*/
-		               , G.LIST_PRICE         /*정상가(최초판매가)*/
-		               , G.CURR_PRICE         /*현재판매가*/
-		               , G.FORMAL_GB
-		               , G.REG_DT             /*등록일시*/
-		               , G.SELL_WEEK_QTY  /*주간판매수량*/
-		               , G.REVIEW_REG_CNT /*리뷰등록건수*/
-		          FROM   (
-		                    SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM
-		                           ELSE BG.BRAND_GROUP_KNM   END                       AS BRAND_GROUP_NM /*브랜드그룹명*/
-		                         , G.GOODS_CD                                                                           /*상품코드*/
-		                         , G.GOODS_NM                                                                           /*상품명*/
-		                         , G.GOODS_GB                                                                           /*상품구분*/
-		                         , G.SELF_GOODS_YN                                                                      /*자사상품여부*/
-		                         , G.FOREIGN_BUY_YN                                                                     /*해외구매대행여부*/
-		                         , G.PARALLEL_IMPORT_YN                                                                 /*병행수입여부*/
-		                         , G.ORDER_MADE_YN                                                                      /*주문제작여부*/
-		                         , G.GOODS_TNM                                                                          /*상품타이틀명*/
-		                         , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
-		                         , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                         , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                                WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                                WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                                WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                                WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                                WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                                ELSE G.CURR_PRICE
-		                           END                                                   AS CURR_PRICE       /*현재판매가*/
-		                         , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
-		                         , G.FORMAL_GB /*정상이월구분*/
-		                         , G.REG_DT                                                                             /*등록일시*/
-		                         , GS.SELL_WEEK_QTY  /*주간판매수량*/
-		                         , GS.REVIEW_REG_CNT /*리뷰등록건수*/
-		                    FROM   TB_CATE_4SRCH C4
-		                    INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
-		                    INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
-		                    INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
-		                    INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		                    INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		                    INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
-		                    LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
-		                    WHERE  C4.SITE_CD = 'G000_10'
-		                    AND    C4.CATE_GB = 'G032_101'
-		                    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		                <if test="cate1No != null and cate1No != ''">
-		                    AND    C4.CATE1_NO = #{cate1No}
-		                </if>
-		                <if test="cate2No != null and cate2No != ''">
-		                    AND    C4.CATE2_NO = #{cate2No}
-		                </if>
-		                <if test="cate3No != null and cate3No != ''">
-		                    AND    C4.CATE3_NO = #{cate3No}
-		                </if>
-		                <if test="cate4No != null and cate4No != ''">
-		                    AND    C4.CATE4_NO = #{cate4No}
-		                </if>
-		                <if test="cate5No != null and cate5No != ''">
-		                    AND    C4.CATE5_NO = #{cate5No}
-		                </if>
-		                <choose>
-		                    <when test="brandGroupNo != null and brandGroupNo != ''">
-		                    AND    B.BRAND_GROUP_NO = #{brandGroupNo}
-		                    </when>
-		                    <otherwise>
-		                    AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		                    </otherwise>
-		                </choose>
-		                <if test="formalGb != null and formalGb !=''">
-		                    AND    G.FORMAL_GB = #{formalGb}
-		                </if>
-		                    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		                    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
-		                    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
-		                    AND    S.STOCK_QTY > 0 /*재고있는 상품*/
-		                    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		                    AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
-		                <if test="priceHigh != null and priceHigh != ''">
-		                    AND    G.CURR_PRICE <![CDATA[<=]]> #{priceHigh}
-		                </if>
-		                <if test="priceRow != null and priceRow != ''">
-		                    AND    G.CURR_PRICE <![CDATA[>=]]> #{priceRow}
-		                </if>
-		                <if test="dcrateHigh != null and dcrateHigh != ''">
-		                    AND    G.DC_RATE <![CDATA[<=]]> #{dcrateHigh}
-		                </if>
-		                <if test="dcrateRow != null and dcrateRow != ''">
-		                    AND    G.DC_RATE <![CDATA[>=]]> #{dcrateRow}
-		                </if>
-		                <if test="sexGb != null and sexGb != ''">
-		                    AND    G.SEX_GB = #{sexGb}
-		                </if>
-		                <if test="newProd != null and newProd != ''">
-		                    AND    EXISTS ( SELECT 1 FROM TB_GOODS_BENEFIT
-		                                    WHERE GOODS_CD = G.GOODS_CD
-		                                    AND BENEFIT_GB IN (#{newProd})
-		                        )
-		                </if>
-		                <include refid="getCategoryGoodsList_sql"/>
-		                ) G
-		          WHERE  1 = 1
+		    SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		         , G.GOODS_CD           /*상품코드*/
+		         , G.GOODS_NM           /*상품명*/
+		         , G.GOODS_GB           /*상품구분*/
+		         , G.SELF_GOODS_YN      /*자사상품여부*/
+		         , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		         , G.ORDER_MADE_YN      /*주문제작여부*/
+		         , G.GOODS_TNM          /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD      /*대표색상코드*/
+		         , G.LIST_PRICE         /*정상가(최초판매가)*/
+		         , G.CURR_PRICE         /*현재판매가*/
+		         , G.FORMAL_GB          /*정상이월구분*/
+		         , G.REG_DT             /*등록일시*/
+		         , G.SELL_WEEK_QTY      /*주간판매수량*/
+		         , G.REVIEW_REG_CNT     /*리뷰등록건수*/
+		    FROM   (
+		            SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                             BG.BRAND_GROUP_ENM
+		                        ELSE
+		                             BG.BRAND_GROUP_KNM
+		                   END                   AS BRAND_GROUP_NM /*브랜드그룹명*/
+		                 , G.GOODS_CD                              /*상품코드*/
+		                 , G.GOODS_NM                              /*상품명*/
+		                 , G.GOODS_GB                              /*상품구분*/
+		                 , G.SELF_GOODS_YN                         /*자사상품여부*/
+		                 , G.FOREIGN_BUY_YN                        /*해외구매대행여부*/
+		                 , G.PARALLEL_IMPORT_YN                    /*병행수입여부*/
+		                 , G.ORDER_MADE_YN                         /*주문제작여부*/
+		                 , G.GOODS_TNM                             /*상품타이틀명*/
+		                 , G.MAIN_COLOR_CD                         /*대표색상코드*/
+		                 , G.LIST_PRICE                            /*정상가(최초판매가)*/
+		                 , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		                        WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		                        WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		                        WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		                        WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		                        WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		                        ELSE G.CURR_PRICE
+		                   END                   AS CURR_PRICE     /*현재판매가*/
+		                 , G.MIN_ORD_AMT                           /*최소주문금액*/
+		                 , G.FORMAL_GB                             /*정상이월구분*/
+		                 , G.REG_DT                                /*등록일시*/
+		                 , GS.SELL_WEEK_QTY                        /*주간판매수량*/
+		                 , GS.REVIEW_REG_CNT                       /*리뷰등록건수*/
+		            FROM   TB_CATE_4SRCH C4
+		            INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		            INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		            INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		            INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		            INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		            INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		            LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		            WHERE  C4.SITE_CD = #{siteCd}
+		            AND    C4.CATE_GB = #{cateGb}
+		            AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		            <if test="cate1No != null and cate1No != ''">
+		            AND    C4.CATE1_NO = #{cate1No}
+		            </if>
+		            <if test="cate2No != null and cate2No != ''">
+		            AND    C4.CATE2_NO = #{cate2No}
+		            </if>
+		            <if test="cate3No != null and cate3No != ''">
+		            AND    C4.CATE3_NO = #{cate3No}
+		            </if>
+		            <if test="cate4No != null and cate4No != ''">
+		            AND    C4.CATE4_NO = #{cate4No}
+		            </if>
+		            <if test="cate5No != null and cate5No != ''">
+		            AND    C4.CATE5_NO = #{cate5No}
+		            </if>
+		            <choose>
+		                <when test="brandGroupNo != null and brandGroupNo > 0">
+		            AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		                </when>
+		                <otherwise>
+		            AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		                </otherwise>
+		            </choose>
+		            <if test="formalGb != null and formalGb !=''">
+		            AND    G.FORMAL_GB = #{formalGb}
+		            </if>
+		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		            AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		            AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		            <if test="ageArr != null and ageArr.length > 0"> <!-- 연령대 -->
+		            AND    G.AGE_GRP_CD IN
+		                <foreach collection="agesArr" item="item" index="index"  open="(" close=")" separator=",">
+		                #{item}
+		                </foreach>
+		            </if>
+		            <if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
+		            AND    G.SEASON_CD IN
+		                <foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
+		                #{item}
+		                </foreach>
+		            </if>
+		            AND    S.STOCK_QTY > 0 /*재고있는 상품*/
+		            AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		            AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		            <if test="brandGroupArr != null and brandGroupArr.length > 0">
+		            AND    BG.BRAND_GROUP_NO IN
+		                <foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+		                #{item}
+		                </foreach>
+		            </if>
+		            <if test="unisex != null and unisex != ''">
+		            AND    G.SEX_GB = #{unisex}
+		            </if>
+		            <if test='sizeArr != null and sizeArr.length > 0'>
+		            AND    EXISTS (SELECT 1
+		                           FROM   TB_OPTION
+		                           WHERE  GOODS_CD = CG.GOODS_CD
+		                           AND    OPT_CD2 IN
+		                           <foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+		                           #{item}
+		                           </foreach>
+		                           AND    DISP_YN = 'Y'
+		                          )
+		            </if>
+		            <if test="newGoods != null and newGoods != ''">
+		            AND    EXISTS (SELECT 1
+		                           FROM   TB_GOODS_BENEFIT
+		                           WHERE  GOODS_CD = G.GOODS_CD
+		                           AND    BENEFIT_GB = #{newGoods}
+		                          )
+		            </if>
+		           ) G
+		    WHERE  1 = 1
+		    <if test="priceFrom != null and priceFrom != ''">
+		    AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
+		    </if>
+		    <if test="priceTo != null and priceTo != ''">
+		    AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
+		    </if>
+		    <if test="dcRateFrom != null and dcRateFrom != ''">
+		    AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
+		    </if>
+		    <if test="dcRateTo != null and dcRateTo != ''">
+		    AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
+		    </if>
 		)
 		, TAB_OPTION AS (
-		          /* 자사상품 색상 목록 */
-		          SELECT O.GOODS_CD
-		          , O.OPT_CD1  AS MAIN_COLOR_CD
-		          FROM   TAB_GOODS G
-		          , TB_OPTION O
-		          WHERE  G.GOODS_CD = O.GOODS_CD
-		          AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
-		          AND    O.DISP_YN = 'N'
-		          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 *
-		        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          /*상품타이틀명*/
+		    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
+		                 , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                 , G.CURR_PRICE                                             /*현재판매가*/
+		                 , G.FORMAL_GB                                              /*정상이월구분*/
+		                 , G.REG_DT                                                 /*등록일시*/
+		                 , G.SELL_WEEK_QTY                                          /*주간판매수량*/
+		                 , G.REVIEW_REG_CNT                                         /*리뷰등록건수*/
 		                 <choose>
-		                    <when test="sortGb != null and sortGb !=''">
-		                        <choose>
-		                           <when test="sortGb == 'new'">
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.REG_DT DESC , G.GOODS_CD) AS NUMB
-		                           </when>
-		                           <when test="sortGb == 'best'">
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.SELL_WEEK_QTY DESC , G.REG_DT DESC, G.GOODS_CD) AS NUMB
-		                           </when>
-		                           <when test="sortGb == 'review'">
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.REVIEW_REG_CNT DESC , G.REG_DT DESC, G.GOODS_CD) AS NUMB
-		                           </when>
-		                        </choose>
-		                    </when>
-		                    <otherwise>
-		                 , RANK() OVER(ORDER BY G.FORMAL_GB , G.REG_DT DESC , G.GOODS_CD) AS NUMB
-		                    </otherwise>
+		                     <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>
-		        <if test="maxRow != null and maxRow !=''">
-		        	AND  NUMB <![CDATA[<=]]> #{maxRow}
-		        </if>
+		            FROM   TAB_GOODS G
+		            LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
+		           ) ORIGINAL
+		    WHERE  1 = 1
+		    <if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+		    AND    NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		    </if>
 		)
 		, TAB_GOODS_IMG AS (
-		         /* 상품의 이미지 */
-		         SELECT GOODS_CD
-		                ,MAX(SYS_IMG_NM)  AS SYS_IMG_NM
-		                ,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
-		         FROM   (
-		                SELECT G.GOODS_CD
-		                , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
-		                , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
-		                FROM   TAB_ALL_GOODS G
-		                , TB_GOODS_IMG GI
-		                WHERE  G.GOODS_CD = GI.GOODS_CD
-		                AND    G.MAIN_COLOR_CD = GI.COLOR_CD
-		         ) Z
-		         GROUP  BY GOODS_CD
+		    /* 상품의 이미지 */
+		    SELECT 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
@@ -1054,73 +1105,74 @@
 		     , G.GOODS_TNM
 		     , G.MAIN_COLOR_CD
 		     , G.LIST_PRICE
-		     , G.CURR_PRICE                                                                                                  /*현재판매가*/
+		     , G.CURR_PRICE
 		     , GI.SYS_IMG_NM
 		     , GI.SYS_IMG_NM2
 		     , (
-		           SELECT GROUP_CONCAT(CONCAT(VIDEO_GB,':',KMC_KEY) ORDER BY NUMB SEPARATOR ',')
-		           FROM   (
-		                  SELECT GV.VIDEO_GB
-		                  , GV.KMC_KEY
-		                  , GV.REG_DT
-		                  , RANK() OVER(ORDER BY GV.REG_DT, GV.KMC_KEY) AS NUMB
-		                  FROM   TB_GOODS_VIDEO GV
-		                  WHERE  GV.GOODS_CD = G.GOODS_CD
-		                  AND    GV.DISP_YN = 'Y'
-		                  AND    GV.KMC_KEY IS NOT NULL
-		           ) Z
-		           WHERE  NUMB <![CDATA[<=]]>  2
-		     ) AS VIDEO_VAL
+		        SELECT GROUP_CONCAT(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(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(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 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
+		                     , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		                            WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		                            WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		                            WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		                            ELSE '총알배송' END AS BENEFIT_NM
+		                     , RANK() OVER(ORDER BY GB.BENEFIT_GB, GB.GOODS_CD) AS NUMB
 		                FROM   TB_GOODS_BENEFIT GB
 		                WHERE  GB.GOODS_CD = G.GOODS_CD
-		          ) Z
-		     ) AS ICON
+		               ) 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
+		     <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}
+		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+		AND    W.CUST_NO = #{custNo}
 		</if>
 	</select>
 
@@ -1500,7 +1552,15 @@
 	<!-- GNB TAB 기획전배너 조회 -->
 	<select id="getGnbTabBannerList" parameterType="Contents" resultType="Contents">
 		/* TsfDisplay.getGnbTabBannerList */
-		SELECT (SELECT CONTENTS_TITLE FROM TB_MAIN_LAYOUT WHERE 1=1 AND CATE_NO = #{cateNo} AND CONTENTS_LOC = #{contentsLoc}) AS GNB_TAB_TITLE
+		SELECT
+		       <choose>
+				   <when test="contentsLoc != null and contentsLoc =='SOM005'">
+					   (SELECT CONTENTS_TITLE FROM TB_MAIN_LAYOUT WHERE 1=1 AND CATE_NO = 1713 AND CONTENTS_LOC = #{contentsLoc}) AS GNB_TAB_TITLE
+				   </when>
+				   <otherwise>
+					   (SELECT CONTENTS_TITLE FROM TB_MAIN_LAYOUT WHERE 1=1 AND CATE_NO = #{cateNo} AND CONTENTS_LOC = #{contentsLoc}) AS GNB_TAB_TITLE
+				   </otherwise>
+			   </choose>
 		      , Z.BANNER_GB
 		      , Z.IMG_PATH1
 		      , Z.STR_VAR1
@@ -1517,6 +1577,8 @@
 		            AND     CATE_NO = #{cateNo}
 		            AND     CONTENTS_LOC = #{contentsLoc}
 		            AND     USE_YN = 'Y'
+		            AND    DISP_STDT <![CDATA[<=]]> NOW()
+		            AND    DISP_EDDT <![CDATA[>=]]> NOW()
 		            UNION ALL
 		            SELECT  'PLAN' AS BANNER_GB
 		                  , A.MAIN_PIMG AS IMG_PATH1
@@ -1529,6 +1591,8 @@
 		              AND  B.CATE_NO = #{cateNo}
 		              AND  A.OPEN_YN = 'Y'
 		              AND  B.DISP_YN = 'Y'
+		              AND  A.DISP_STDT <![CDATA[<=]]> NOW()
+		              AND  A.DISP_EDDT <![CDATA[>=]]> NOW()
 		        ) Z
 		LIMIT 2
 	</select>

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

@@ -347,7 +347,8 @@
 		/* TsfReivew.getCompleteReviewList */
 		<include refid="selectForPagingHeader"/>
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
-		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
@@ -478,7 +479,8 @@
 	<select id="getReviewGoodsInfo" parameterType="Review" resultType="Review">
 		/* TsfReivew.getReviewGoodsInfo */
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
-		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		  -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
@@ -906,7 +908,8 @@
 		/* TsfReivew.getAlreadyReviewList */
 		<include refid="selectForPagingHeader"/>
 		        SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
-		             , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		          -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		             , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		             , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		             , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		             , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM

+ 63 - 22
src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml

@@ -101,28 +101,69 @@
 			    AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
 			    GROUP  BY PG.GOODS_CD
 			)
-			SELECT 
-			       PG.BRAND_GROUP_NM
-			     , PG.GOODS_CD
-			     , PG.STOCK_QTY
-			     , PG.MIN_ORD_QTY
-			     , PG.GOODS_TYPE
-			     , PG.OPT_CD
-			     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
-			     , PG.GOODS_NM
-			     , PG.GOODS_TNM
-			     , PG.MAIN_COLOR_CD
-			     , PG.LIST_PRICE
-			     , PG.AF_LINK_CD 
-			     , PG.CONTENTS_LOC 
-			     , PG.CUST_NO 
-			     , PG.REG_DT
-			     , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                     AS CURR_PRICE    /*현재판매가*/
-			     , GI.SYS_IMG_NM
-			     , GI.SYS_IMG_NM2
-				FROM   TAB_PLAN_GOODS PG
-			INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
-			)Z
+			, TAB_COLORCHIP AS (
+		            /* 상품 컬러칩 */
+		            SELECT PG.GOODS_CD
+		                 , GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
+		            FROM   TAB_PLAN_GOODS PG
+		                 , TB_OPTION O
+		                 , TB_COLOR C
+		                 , TB_COMMON_CODE CC
+		            WHERE  PG.GOODS_CD = O.GOODS_CD
+		            AND    O.OPT_CD1 = C.COLOR_CD
+		            AND    C.COLOR_GRP_CD = CC.CD
+		            AND    O.DISP_YN = 'Y'
+		            AND    C.USE_YN = 'Y'
+		            AND    CC.USE_YN = 'Y'
+		            GROUP  BY PG.GOODS_CD
+		        )
+		    , TAB_GOODS_BENEFIT AS (
+		            /* 상품혜택 */
+		            SELECT GOODS_CD
+		                 , GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',') AS ICON
+		            FROM   (
+		                    SELECT PG.GOODS_CD
+		                         , GB.BENEFIT_GB
+		                         , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		                                WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		                                WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		                                ELSE '신상'
+		                           END                               AS BENEFIT_NM
+		                         , RANK() OVER(PARTITION BY PG.GOODS_CD
+		                                       ORDER BY GB.BENEFIT_GB
+		                                              , GB.GOODS_CD) AS NUMB
+		                    FROM   TAB_PLAN_GOODS PG
+		                         , TB_GOODS_BENEFIT GB
+		                    WHERE  PG.GOODS_CD = GB.GOODS_CD
+		                   ) Z
+		            GROUP  BY GOODS_CD
+		        )
+		    SELECT 
+		           PG.BRAND_GROUP_NM
+		         , PG.GOODS_CD
+		         , PG.STOCK_QTY
+		         , PG.MIN_ORD_QTY
+		         , PG.GOODS_TYPE
+		         , PG.OPT_CD
+		         , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		         , PG.GOODS_NM
+		         , PG.GOODS_TNM
+		         , PG.MAIN_COLOR_CD
+		         , PG.LIST_PRICE
+		         , PG.AF_LINK_CD 
+		         , PG.CONTENTS_LOC 
+		         , PG.CUST_NO 
+		         , C.COLOR_CHIPS                                                                                                      /*컬러칩*/
+		         , GB.ICON 
+		         , PG.REG_DT
+		         , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                     AS CURR_PRICE    /*현재판매가*/
+		         , GI.SYS_IMG_NM
+		         , GI.SYS_IMG_NM2
+		    	FROM   TAB_PLAN_GOODS PG
+		    INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
+		    LEFT OUTER JOIN TAB_COLORCHIP C ON PG.GOODS_CD = C.GOODS_CD
+		    LEFT OUTER JOIN TAB_GOODS_BENEFIT GB ON PG.GOODS_CD = GB.GOODS_CD
+		    )Z
 		ORDER BY Z.REG_DT DESC
 		<if test="quickYn != null and quickYn != ''">
 			,Z.STOCK_QTY

+ 1 - 0
src/main/resources/i18n/messages/message_ko_KR.properties

@@ -76,6 +76,7 @@ CUST_0001=\uC815\uC0C1\uC801\uC73C\uB85C \uD0C8\uD1F4\uB418\uC5C8\uC2B5\uB2C8\uB
 CUST_0002=\uC774\uBBF8 \uD0C8\uD1F4\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
 CUST_0003=\uC9C4\uD589\uC911\uC778 \uAC70\uB798\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC9C4\uD589\uC911\uC778 \uAC70\uB798\uB97C \uC644\uB8CC \uD6C4 \uD0C8\uD1F4 \uC2E0\uCCAD\uC744 \uD574\uC8FC\uC138\uC694.
 CUST_0004=\uD0C8\uD1F4\uAC00 \uC815\uC0C1\uC801\uC73C\uB85C \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.
+CUST_0005=\uC778\uC99D\uBC29\uBC95\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. <br>\uAD00\uB9AC\uC790\uC5D0\uAC8C \uBB38\uC758\uD558\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4.
 
 #\uC0AC\uBC29\uB137
 SABANGNET_0001=\uC131\uACF5\uC801\uC73C\uB85C \uC0C1\uD488 \uC815\uBCF4\uAC00 \uC804\uC1A1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC131\uACF5)

+ 1 - 0
src/main/webapp/WEB-INF/views/mob/customer/UseTermsLayerFormMob.html

@@ -1,3 +1,4 @@
+<!DOCTYPE html>
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org">
 <!--

+ 191 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustDeliveryAddrFormMob.html

@@ -0,0 +1,191 @@
+<!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  : MypageCustDeliveryAddrFormMob.html
+ * @desc    : 마이페이지 > 배송지관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   jsshin      최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main class="container my">
+	<section class="content my_delivery">
+		<div class="inner">
+			<div class="inner wide">
+				<div id="custDeliveryList" class="delivery_list"></div>
+				<div id="nodata" class="nodata" style="display: none;">
+					<div class="txt_box">
+						<p>
+							등록된 배송지가 없습니다.<br/>
+						</p>
+					</div>
+				</div>
+				<div class="inner wide">
+					<div class="btn_group btn_group_flex">
+						<button type="button" class="btn btn_dark" id="btnAdrsaddPop">
+							<span>배송지 추가</span>
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</section>
+</main>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+
+	var fnCustDeliveryAddList = function () {
+		$.get('/mypage/customer/delivery/addr/list', fnCustDeliveryAddListCallback);
+	}
+
+	var fnCustDeliveryAddListCallback = function (result) {
+		let html = '';
+		if (result.length < 1) {
+			$('#nodata').show();
+		} else {
+			$('#nodata').hide();
+			$.each(result, function (idx, custDeliveryAddr){
+				if (custDeliveryAddr.defaultYn  === 'Y') {
+					html += '<div class="ship_info active">\n';
+				} else {
+					html += '<div class="ship_info">\n';
+				}
+				html +=	'        <dl>\n';
+				html +=	'            <div class="name">\n';
+				html +=	'                <dt><span class="sr-only">배송지명</span></dt>\n';
+				html +=	'                    <dd>\n';
+				html +=	'                       '+custDeliveryAddr.recipNm +'\n';
+				html +=	'                       <div class="badge_wrap">\n';
+				if (custDeliveryAddr.defaultYn  === 'Y') {
+					html += '                       <em class="order_badge">기본배송지</em>\n';
+				}
+				if (custDeliveryAddr.shotDelvUseYn  === 'Y') {
+					html += '                       <em class="order_badge order_bullet_badge">총알배송</em>\n';
+				}
+				html +=	'                       </div>\n';
+				html +=	'                    </dd>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div class="phone">\n';
+				html +=	'                <dt><span class="sr-only">휴대폰 번호</span></dt>\n';
+				html +=	'                <dd>'+custDeliveryAddr.recipPhnno+'</dd>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div class="addr">\n';
+				html +=	'               <dt><span class="sr-only">배송주소</span></dt>\n';
+				html +=	'               <dd>'+custDeliveryAddr.recipBaseAddr + custDeliveryAddr.recipDtlAddr +'</dd>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div class="ship_request">\n';
+				html +=	'                <dl>\n';
+				html +=	'                    <dt>배송요청 사항</dt>\n';
+				html +=	'                    <dd>'+custDeliveryAddr.delvMemo+'</dd>\n';
+				html +=	'                </dl>\n';
+				html +=	'            </div>\n';
+				html +=	'        </dl>\n';
+				html +=	'        <div class="btn_group btn_group_flex">\n';
+				html +=	'            <div>\n';
+				html +=	'                <button type="button" class="btn btn_gost" onclick="fnModiFyCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">\n';
+				html +=	'                    <span>수정</span>\n';
+				html +=	'                </button>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div>\n';
+				html +=	'                <button type="button" class="btn btn_dark" onclick="fnDeleteCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">\n';
+				html +=	'                   <span>삭제</span>\n';
+				html +=	'                </button>\n';
+				html +=	'            </div>\n';
+				html +=	'        </div>\n';
+				html +=	'   </div>\n';
+			});
+		}
+		$('#custDeliveryList').html(html);
+	}
+
+	// 배송지 추가
+	$('#btnAdrsaddPop').on('click', function () {
+		$.ajax( {
+			type		: "POST",
+			url 		: '/common/delvAddrAddPop',
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				$("#adrsAddPop .modal-dialog .modal-content").html(result);
+				$("#adrsAddPop").modal("show");
+			}
+		});
+	});
+
+	var delvAddrSet = function (delvObj) {
+		if(!gagajf.isNull(delvObj.custDelvAddrSq)) {
+			fnCustDeliveryAddList();
+		}
+	};
+
+	var fnModiFyCustDelvAddr = function (custDelvAddrSq) {
+		let params = {}
+		params.custDelvAddrSq = custDelvAddrSq;
+
+		$.ajax( {
+			type		: "POST",
+			url 		: '/common/delvAddrModifyPop',
+			data		: JSON.stringify(params),
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				$("#adrsModifyPop .modal-dialog .modal-content").html(result);
+				$("#adrsModifyPop").modal("show");
+			}
+		});
+	};
+
+	var fnDeleteCustDelvAddr = function (custDelvAddrSq) {
+		let params = {}
+		params.custDelvAddrSq = custDelvAddrSq;
+		let jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit("/mypage/customer/delivery/addr/delete", jsonData, function (result) {
+			if (result.isSuccess) {
+				fnCustDeliveryAddList();
+			} else {
+				mcxDialog.alert("배송지 삭제를 실패 하였습니다.");
+				return;
+			}
+		})
+	}
+
+
+	$(document).ready(function() {
+
+		$('#htopTitle').text('배송지 관리');
+
+		// 배송목록 조회
+		fnCustDeliveryAddList();
+
+		// $(document).on("scroll",function(){
+		// 	if($(".tabbar").hasClass("fixed")) {
+		// 		$(".my .my_delivery .inner > .btn_group").addClass('active');
+		// 	}else{
+		// 		$(".my .my_delivery .inner > .btn_group").removeClass('active');
+		// 	}
+		// });
+	});
+
+	/*]]>*/
+</script>
+</th:block>
+</body>
+</html>

+ 250 - 49
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -50,59 +50,33 @@
 						</ul>
 						<div class="tabContents">
 							<div class="tab_cont active">
+							
+								<div class="once" th:if="${adminCount.count>0}" id="check_notice">
+									<div class="alert" role="alert">
+										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
+										<p class="formOnly" th:onclick="fnMove([[${adminCount.reviewSq}]])">바로확인</p>
+										<button type="button" class="alertCls" onclick="location.href='#newreply2'" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
+									</div>
+								</div>
 								<!-- tab_cont Start -->
-								<div class="inner">
-
+								<div class="inner" id="reviewList">
 									<div class="part_goods">
 										<!-- 굿즈_리뷰 -->
-										<div class="goods_section">
-											<div class="goods_detail">
-												<a href="">
-													<div class="thumb_box">
-														<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
-													</div>
-													<div class="info_box">
-														<div class="od_name">
-															<div class="goods_date"><span class="date">2020.10.25</span> 구매</div>
-															<div class="brand">
-																<span>Mollimelli 몰리멜리</span>
-															</div>
-															<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
-														</div>
-														<div class="od_opt">
-															<div class="option">
-																<em>Black</em><em>XXL</em>
-															</div>
-														</div>
-													</div>
-												</a>
-											</div>
-											<div class="goods_btn_wrap btn_group_flex">
-												<div><button type="button" class="btn btn_default"><span>리뷰쓰기(</span><em>15</em><span>일 남음)</span></button></div>
-											</div>
-										</div>
+										
 										<!-- //굿즈_리뷰 -->
 									</div>
-									
+									<div class="nodata" id="nodata1" style="display: none;">
+									<div class="txt_box">
+										<p>
+											작성 가능한 리뷰가 없습니다.<br>
+										</p>
+									</div>
 								</div>
+							</div>
 								<!-- // tab_cont End -->
 							</div>
 							<div class="tab_cont ">
 								<!-- tab_cont Start -->
-
-								<div class="once">
-									<div class="alert" role="alert">
-										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
-										<p class="formOnly">바로확인</p>
-										<button type="button" class="alertCls" onclick="location.href='#newreply2'" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
-										<!--
-											.reply_box(관리자댓글)가 추가된 
-											부모, class="reviewMy"의 
-											id="newreply2"로 이동 됩니다.
-										 -->
-									</div>
-								</div>
-
 								<div class="inner">
 									<div class="part_goods">
 										<!-- 굿즈_리뷰 -->
@@ -233,6 +207,16 @@
 				</div>
 			</section>
 		</main>
+<form id="searchForm1" name="searchForm1" th:action="@{'/mypage/complete/review/list'}" th:method="post">
+	<input type="hidden" name="pageNo" value="1" />
+	<input type="hidden" name="pageSize" value="10" />
+</form>
+<form id="searchForm2" name="searchForm2" th:action="@{'/mypage/already/review/list'}" th:method="post">
+	<input type="hidden" name="pageNo2" value="1" />
+	<input type="hidden" name="pageSize2" value="10" />
+</form>
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
@@ -242,21 +226,238 @@
 	$("#completeReview").click(function() {
 		$("#alreadyReview").removeClass("active");
 		$("#completeReview").addClass("active");
-		$(".check_notice").hide();
-		gagaPaging.init('searchForm1', fnSearchCallback1, 'paging', 10);
-		gagaPaging.load(1);
+		$("#check_notice").hide();
+		
 	})
 	
+	var fnGetInfiniteScrollCompleteDataList = function(pageNum) {
+	
+		$("#searchForm1 input[name=pageNo]").val(pageNum+1);
+		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+		gagajf.ajaxFormSubmit("/mypage/complete/review/list", document.goodsReviewForm,  gagaInfiniteScroll.jsonToHtml);
+	}
+	
+	
 	$("#alreadyReview").click(function() {
 		$("#completeReview").removeClass("active");
 		$("#alreadyReview").addClass("active");
-		$(".check_notice").show();
-		gagaPaging.init('searchForm2', fnSearchCallback2, 'paging2', 10);
-		gagaPaging.load(1);
+		$("#check_notice").show();
+		
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/mypage/already/review/list', jsonData,	function(result) {
+			if (result.dataList1 != null && result.dataList1.length > 0) {
+				$.each(result.dataList1, function(idx, item) {
+					let html = '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					$('#reviewList').append(html);
+				})
+			}else{
+				$('#nodata2').show();
+			}
+		});
+	
 	})
 /*]]>*/
  
  $(document).ready(function() {
+	 $("#completeReview").trigger('click');
  	$('#htopTitle').text('리뷰');
 
  });

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

@@ -281,7 +281,7 @@
 									<div class="swiper-wrapper">
 										<th:block th:each="planningData, planningStat : ${brandMainLayoutData.planningList}">
 										<div class="swiper-slide">
-											<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail('','','','SBM011',[[${planningData.planSq}]],'');">
+											<a href="javascript:void(0);" th:onclick="cfnGoToPlanDetail([[${planningData.planSq}]],[[${brandGroupInfo.brandGroupNo}]]);">
 												<div class="txtWrap">
 													<p th:text="${planningData.planNm}">티.바지.점퍼의 계절!</p>
 													<!--<p>가을 전격 오픈</p>-->

+ 64 - 60
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

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

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

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

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

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

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

@@ -203,17 +203,23 @@
 						<div class="cont_body">
 							<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
 								<th:block th:if="${ContentsData.contentsType!=null && ContentsData.contentsType!=''}">
-									<div class="ui_row" th:if="${ContentsData.contentsType=='1'}">
-										<div class="ui_col_6">
-											<a th:href="${ContentsData.strVar1}"><img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt=""></a>
+									<div class="bnnbox_crop" th:if="${ContentsData.contentsType=='1'}">
+										<div class="bnn_half" style="width: 100%;height: 230px;float: none;overflow: hidden;">
+											<a th:href="${ContentsData.strVar1}" target="_blank">
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt="">
+											</a>
 										</div>
 									</div>
-									<div class="ui_row" th:if="${ContentsData.contentsType=='2'}">
-										<div class="ui_col_6">
-											<a th:href="${ContentsData.strVar1}"><img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt=""></a>
+									<div class="bnnbox_crop" th:if="${ContentsData.contentsType=='2'}">
+										<div class="bnn_half">
+											<a th:href="${ContentsData.strVar1}" target="_blank">
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt="">
+											</a>
 										</div>
-										<div class="ui_col_6">
-											<a th:href="${ContentsData.strVar2}"><img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath2}" alt=""></a>
+										<div class="bnn_half">
+											<a th:href="${ContentsData.strVar2}" target="_blank">
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath2}" alt="">
+											</a>
 										</div>
 									</div>
 								</th:block>
@@ -836,11 +842,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 100,
-		
-		// initialSlide: 0, 
+
+		// initialSlide: 0,
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250, 
+		// slidesOffsetBefore: 250,
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -865,11 +871,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 70,
-		
-		// initialSlide: 0, 
+
+		// initialSlide: 0,
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250, 
+		// slidesOffsetBefore: 250,
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -929,22 +935,22 @@ var main_trendy_slide = new Swiper('.main_trendy .post-trendy', {
 main_trendy_slide.on('slideChange', function () {
 	var newitemIndex = main_trendy_slide.activeIndex;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-	
+
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(0).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(3).addClass('scaleBig');
-	
+
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 });
 
 main_trendy_slide.on('reachEnd', function () {
 	var newitemIndex = main_trendy_slide.activeIndex + 1;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-	
+
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(1).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(4).addClass('scaleBig');
-	
+
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 	function l(n) {
 		if (n.direction !== "none")
@@ -1002,52 +1008,116 @@ var main_deal_slide = new Swiper ('.main_deal .post-deal', {
 	},
 });
 
-/* SLIDE - MAIN_PICK */
-var main_pick_nav = new Swiper('.main_pick .post-pick-nav', { //top
-	initialSlide: 1,
-	slidesPerView: 6,
-	// slidesPerGroup: 6,
-	loop: true,
-	loopeSlides: 6,
-	loopFillGroupWithBlank : true,
-	// slideToClickedSlide : true,
-	slideToClickedSlide : true,
-	loopAdditionalSlides : 1,
-	// centeredSlides : true,
-	watchSlidesVisibility: true,
-	watchSlidesProgress: true,
-	freeMode: false,
-	navigation: {
-		nextEl: '.main_pick .swiper-button-next',
-		prevEl: '.main_pick .swiper-button-prev',
-	},
-	autoplay: {
-		delay: 5000,
-		disableOnInteraction: false,
-	},
-});
-var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
-	initialSlide: 1,
-	slidesPerView: 1,
-	// slidesPerGroup: 6,
-	loop: true,
-	loopeSlides: 6,
-	spaceBetween: 10,
-	// loopFillGroupWithBlank : true,
-	loopAdditionalSlides: 1,
-	allowTouchMove: false,
-	navigation: {
-		nextEl: '.main_pick .swiper-button-next',
-		prevEl: '.main_pick .swiper-button-prev',
-	},
-	thumbs: {
-		swiper: main_pick_nav
-	},
-	autoplay: {
-		delay: 5000,
-		disableOnInteraction: false,
-	},
-});
+/* 브랜드 PICK 갯수체크 210430_수정 */
+var pickCont = $('.post-pick-nav .swiper-slide');
+var pickLength = pickCont.length;
+if (pickLength < 2) {
+	/* SLIDE - MAIN_PICK */
+	var main_pick_nav = new Swiper('.main_pick .post-pick-nav', { //top
+		initialSlide: 0,
+		slidesPerView: 6,
+		// slidesPerGroup: 6,
+		loop: false,
+		watchOverflow : true,
+		loopeSlides: 6,
+		loopFillGroupWithBlank : true,
+		// slideToClickedSlide : true,
+		slideToClickedSlide : true,
+		loopAdditionalSlides : 1,
+		// centeredSlides : true,
+		watchSlidesVisibility: true,
+		watchSlidesProgress: true,
+		freeMode: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+} else {
+	/* SLIDE - MAIN_PICK */
+	var main_pick_nav = new Swiper('.main_pick .post-pick-nav', { //top
+		initialSlide: 0,
+		slidesPerView: 6,
+		// slidesPerGroup: 6,
+		loop: true,
+		loopeSlides: 6,
+		loopFillGroupWithBlank : true,
+		// slideToClickedSlide : true,
+		slideToClickedSlide : true,
+		loopAdditionalSlides : 1,
+		// centeredSlides : true,
+		watchSlidesVisibility: true,
+		watchSlidesProgress: true,
+		freeMode: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+
+
+}
+
+/* 브랜드 PICK 갯수체크 210430_수정 */
+var pickForCont = $('.post-pick-for .swiper-slide');
+var pickForLength = pickForCont.length;
+if (pickForLength < 2) {
+	var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
+		initialSlide: 0,
+		slidesPerView: 1,
+		// slidesPerGroup: 6,
+		loop: false,
+		watchOverflow : true,
+		loopeSlides: 6,
+		spaceBetween: 10,
+		// loopFillGroupWithBlank : true,
+		loopAdditionalSlides: 1,
+		allowTouchMove: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		thumbs: {
+			swiper: main_pick_nav
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+}else{
+	var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
+		initialSlide: 0,
+		slidesPerView: 1,
+		// slidesPerGroup: 6,
+		loop: true,
+		loopeSlides: 6,
+		spaceBetween: 10,
+		// loopFillGroupWithBlank : true,
+		loopAdditionalSlides: 1,
+		allowTouchMove: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		thumbs: {
+			swiper: main_pick_nav
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+}
+
 // main_pick_nav.controller.control = main_pick_post;
 // main_pick_post.controller.control = main_pick_nav;
 
@@ -1070,8 +1140,8 @@ var main_pick_lookbook = new Swiper ('.main_pick .post-lookbook', {
 var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
 	slidesPerView: 1,
 	speed : 1500,
-	initialSlide: 2,
-	loop: true,
+	initialSlide: 0,
+	//loop: true,
 	watchOverflow: true, //loop와 함께 사용 불가.
 	autoplay: {
 		delay: 4000,
@@ -1095,9 +1165,9 @@ $(".main_recomm .tag_list .btn").click(function(){
 	$('#'+recommActive).addClass('active');
 });
 function init(){
-	
+
 	if(main_recomm_slide != null) main_recomm_slide.destroy();
-	
+
 	var main_recomm_slide = new Swiper ('.main_recomm .post-recomm', {
 		slidesPerView: 5,
 		slidesPerGroup: 5,
@@ -1149,7 +1219,7 @@ var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container',
 				$('#fy1').addClass('active');
 				cntNum = 0;
 			}
-			
+
 			clearInterval(ti);
 			ti = startTimeInterval();
 		}

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

@@ -52,7 +52,7 @@
 				<div id="nodata" class="nodata">
 					<div class="txt_box">
 						<p>
-							현재 노출 할 수 있는 데이터가 없습니다.<br>
+							등록된 배송지가 없습니다.<br/>
 						</p>
 					</div>
 				</div>
@@ -65,7 +65,7 @@
 		<!-- // CONT-BODY -->
 	</div>
 </div>
-	<script th:inline="javascript">
+<script th:inline="javascript">
 	/*<![CDATA[*/
 
 	var fnCustDeliveryAddList = function () {

+ 277 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

@@ -0,0 +1,277 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * * @source  : MypageReviewDetailFormWeb.html
+ * @desc	: 상품평 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   sowon		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="pdPhotoReviewDetailLabel">포토/영상 리뷰</h5>
+		</div>
+		<div class="modal-body" id="reviewBody">
+		</div>
+	</div>
+</div>
+<form name="reviewDetailForm" id="reviewDetailForm" method="post">
+<input type="hidden" name="goodsCd" th:value="${review.goodsCd}" />
+<!-- <input type="hidden" name="bestYn" th:value="${review.bestYn}" /> -->
+<input type="hidden" name="photoYn" th:value="${review.photoYn}" />
+<input type="hidden" name="reviewSq" th:value="${review.reviewSq}" />
+</form>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	var fnReviewDetail = function() {
+		
+		var params = new Object();
+		params.goodsCd = $('#reviewDetailForm input[name=goodsCd]').val();
+		params.reviewSq = $('#reviewDetailForm input[name=reviewSq]').val();
+		//params.bestYn =$('#reviewDetailForm input[name=bestYn]').val();
+		params.photoYn = $('#reviewDetailForm input[name=photoYn]').val();
+		
+		gagajf.ajaxSubmit("/goods/review/detail/list", "json", fnReviewDetailCallback, params);
+	}
+
+	var fnReviewDetailCallback = function(result) {
+		$('#reviewBody').html('');
+		// 목록
+		if (result.reviewList != null && result.reviewList.length > 0) {
+			let fileGbClass = '';
+			$.each(result.reviewList, function(idx, review) {
+				let tag = '';
+				tag +='<div class="pop_cont">\n';
+				tag +='<div class="swiper-container detail">\n';
+				tag +='<div class="swiper-wrapper">\n';
+				tag +='<div class="swiper-slide">\n';
+				
+				let reviewClass = 'empty_photo';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					reviewClass = '';
+				}
+				tag +='<div class="review '+reviewClass+'" >\n';  <!-- 첨부이미지 없을 시 empty_photo 클래스 추가 --> 
+				tag +='	<div class="pic">\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='		<span class="thumb" class="'+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
+						if (reviewAttach.fileGb == "M") {
+				tag +='			<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">\n';
+				tag +='				<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">\n';
+				tag +='			</video>\n';
+						}else{
+				tag +='			<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
+						}
+				tag +='		</span>\n';
+						return false;
+					});	
+				}else{
+				tag +='		<span class="thumb">\n';
+				tag +='			<img src="'+_uploadGoodsUrl +'/'+review.sysImgNm+'?RS=365" alt="" onerror="' + _uximgUrl + '/images/pc/thumb/bg_item_none.png"  />\n';
+				tag +='		</span>\n';	
+				}
+				tag +='	</div>\n';
+				tag +='	<div class="review_cont">\n';
+				tag +='		<div class="box_wrap">\n';
+				tag +='			<div class="star_box">\n';
+				tag +='				<div class="star_score">\n';
+				tag +='					<span class="star">\n';
+				tag +='						<em class="progbar" style="width:'+(review.iscore*20)+'%;"></em>\n'; <!-- 평점 style로 표기 -->
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="response_box">\n';
+				tag +='				<div class="full">\n';
+				tag +='					<dl>\n';
+				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
+					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
+				tag +='						<div>\n';
+				tag +='							<dt>구매옵션</dt>\n';
+				tag +='							<dd>'+ reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2+'</dd>\n';
+				tag +='						</div>\n';
+					});		
+				}
+				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>\n';
+				tag +='						</div>\n';
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				if (!gagajf.isNull(review.sizeGb)){  <!-- 사이즈구분(T:상의, B:하의, S:신발) -->
+				tag +='				<div>\n'; 
+				tag +='					<dl > \n';
+				tag +='						<div>\n';
+				tag +='							<dt>사이즈</dt>\n';
+				tag +='							<dd>'+review.scoreSizeNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>컬러</dt>\n';
+				tag +='							<dd>'+review.scoreColorNm+'</dd>\n';
+				tag +='						</div>\n';
+					if (review.sizeGb == 'T' || review.sizeGb == 'B'){
+				tag +='						<div>\n';
+				tag +='							<dt>핏</dt>\n';
+				tag +='							<dd>'+review.scoreFitNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>두께감</dt>\n';
+				tag +='							<dd>'+ review.scoreThickNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+					if (review.sizeGb == 'S'){
+				tag +='						<div>\n';
+				tag +='							<dt>무게감</dt>\n';
+				tag +='							<dd>'+review.scoreWeightNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>볼너비</dt>\n';
+				tag +='							<dd>'+review.scoreBallNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				}
+				tag +='			</div>\n';
+				tag +='			<div class="txt_review_box">\n';
+				tag +='				<p>' + review.reviewContent +'</p>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="writer_box">\n';
+				tag += '			<div class="writer">\n';
+				tag += '				<span class="wr_id">'+ review.maskingCustId +'</span>\n';
+				tag += '				<span class="wr_date">' + review.regDt + '</span>\n';
+				tag += '			</div>\n'
+				tag +='			</div>\n';
+				if (!gagajf.isNull(review.admRpl)){
+				tag += '		<div class="reply_box">\n';
+				tag += '			<div class="reply">\n';
+				tag += '				<div class="reply_writer">\n';
+				tag += '					<span class="wr_name">관리자</span>\n';
+				tag += '					<span class="wr_date">'+review.admRplDt+'</span>\n';
+				tag += '				</div>\n';
+				tag += '				<div class="reply_txt">\n';
+				tag += '					<p>' + review.admRpl+'</p>\n';
+				tag += '				</div>\n';
+				tag += '			</div>\n';
+				tag += '		</div>\n';	
+				}
+				tag +='		</div>\n';
+				tag +='	</div>\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length >= 2){
+				tag +='	<div class="thumblist">\n';
+				tag +='		<ul>\n';
+					let activeClass = '';
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						activeClass = '';
+						if (aIdx == 0){
+							activeClass = 'active';
+						}
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='			<li>\n';
+				tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+				tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</li>\n';
+					});
+				tag +='		</ul>\n';
+				tag +='	</div>\n';
+				}
+				tag +='</div>\n';
+				
+				tag +='</div>\n';
+				tag +='</div>\n';
+				tag +='</div>\n';
+				tag +='</div>\n';
+				
+				$('#reviewBody').append(tag);
+				
+				$('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+				        var $this = $(this);
+				        
+				        var thumbCount = $this.find('.thumblist ul li').length;
+				        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+				        var thumbMargin = 8 * thumbCount;
+				        var thumbListWidth = thumbUlWidth + thumbMargin;
+
+				        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+				        
+				    }); 
+
+			});
+		}
+		
+	}
+	
+	// 다른 상품평 보기
+	var fnReviewNext = function(reviewSq){
+		if (gagajf.isNull(reviewSq)) return false;
+		
+		$('#reviewDetailForm input[name=reviewSq]').val(reviewSq);
+		fnReviewDetail();
+	}
+	
+	$(document).ready( function() {
+		
+		fnReviewDetail();
+       
+		 //슬라이드 - 상품 베스트 리뷰 자세히보기 영역 
+	    var photoReviewDetailSwiper = new Swiper('.pd_photoreviewdetail_pop .swiper-container.detail', {
+	        effect :'fade',
+	        slidesPerView: 1,
+	        spaceBetween: 0,
+	        simulateTouch:false,
+	        navigation: {
+	            nextEl: '.pd_photoreviewdetail_pop .swiper-button-next',
+	            prevEl: '.pd_photoreviewdetail_pop .swiper-button-prev',
+	        },
+	    });   
+
+	    $('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+	        var $this = $(this);
+	        
+	        var thumbCount = $this.find('.thumblist ul li').length;
+	        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+	        var thumbMargin = 8 * thumbCount;
+	        var thumbListWidth = thumbUlWidth + thumbMargin;
+
+	        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+	        
+	    });
+
+	    $(document).on('click','.pd_photoreviewdetail_pop .thumblist ul li',function(e){
+
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
+	        $(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
+	        $(this).find(".pic").addClass('active');
+
+	        var thumbIndex = $(this).index();
+	        thumbContentHtml = $(this).find('.pic .thumb').html();
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbContentHtml);
+
+	        return false;
+	    });
+	});		
+
+	 
+/*]]>*/
+</script>	
+ </html>

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

@@ -173,7 +173,7 @@
 						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option + ' / ' + item.optCd2Arr[index2] + '</span>\n';
 					})
 				}else{
-					html += '							<span class="option">'+item.optCd1Nm+'&nbsp;/&nbsp;'+item.optCd2+'</span>     ';
+					html += '							<span class="option">'+item.colorNm+'</span>     ';
 				}
 				html += '						</div>                                                                                            ';
 				html += '					</div>                                                                                                ';
@@ -232,7 +232,7 @@
 				html+='						<div class="gd_opt">';
 				html+='							<div class="option_wrap">';
 				html+='								<span class="title sr-only">주문 옵션</span>';
-				html+='								<span class="option">'+item.optCd1Nm+'&nbsp;/&nbsp;'+item.optCd2+'</span>';
+				html+='								<span class="option">'+item.colorNm+'</span>';
 				html+='							</div>';
 				html+='						</div>';
 				html+='					</div>';
@@ -260,7 +260,7 @@
 				html+='								<dl>';
 				html+='									<div>';
 				html+='										<dt>구매옵션</dt>';
-				html+='										<dd>'+item.optCd1Nm+' / '+item.optCd2+'</dd>';
+				html+='										<dd>'+item.colorNm+'</dd>';
 				html+='									</div>';
 				html+='								</dl>';
 				html+='							</div>';
@@ -268,7 +268,7 @@
 				html+='								<dl>';
 				html+='									<div>';
 				html+='										<dt>키/몸무게</dt>';
-				html+='										<dd>'+item.weight+'cm/'+item.height+'kg</dd>';
+				html+='										<dd>'+item.height+'cm/'+item.weight+'kg</dd>';
 				html+='									</div>';
 				if (item.sizeGb == 'T' || item.sizeGb == 'B' || item.sizeGb == 'S') {
 					html+='									<div>';
@@ -310,12 +310,12 @@
 					for (var i = 0; i < attachList.length; i++) {
 						if (attachList[i].reviewSq == item.reviewSq) {
 						html+='									<li>';
-						html+='										<a onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">';
+						html+='										<a>';
 						html+='											<div class="pic">';
 						if (attachList[i].fileGb == 'M') {
-							html+='												<span class="thumb mov" style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
+							html+='												<span onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" class="thumb mov" style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
 						}else{
-							html+='												<span class="thumb" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
+							html+='												<span onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" class="thumb" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
 						}
 						html+='											</div>';
 						html+='										</a>';

+ 28 - 6
src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html

@@ -93,13 +93,35 @@ var ajaxWishList = function () {
 							
 							html+='					</p>';
 							html+='					<div class="itemcolorchip">';
-							html+='						<span class="chip_color35" value="ABM">BEIGE</span>';
-							html+='						<span class="chip_color54" value="BDS">BLACK</span>';
-							html+='						<span class="chip_color40" value="YBR">WHITE</span>';
+							if(!gagajf.isNull(item.colorChips)){
+								var colorArr = item.colorChips.split(",");
+								var colorCd = '';
+								var rgbColor = '';
+								for(let i=0; i<colorArr.length; i++){
+									var colorInfo = colorArr[i].split(":");
+									colorCd = colorInfo[0];
+									rgbColor = colorInfo[1];
+									if(rgbColor=='#FFFFFF'){
+										html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+									}else{
+										html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+									}
+								}
+							}
 							html+='					</div>';
-							html+='					 <p class="itemBadge">';
-							html+='						<span class="badge13">베스트 </span>';
-							html+='					</p>';
+							if(!gagajf.isNull(item.icon)){
+								var iconArr = item.icon.split(",");
+								var iconGb = '';
+								var iconNm = '';
+								html += '	<p class="itemBadge">';
+								for(let i=0; i<iconArr.length; i++){
+									var iconInfo = iconArr[i].split(":");
+									iconGb = iconInfo[0];
+									iconNm = iconInfo[1];
+									html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+								}
+								html += '	</p>';
+							}
 							if (item.goodsTnm != null && item.goodsTnm != '') {
 								html+='					<div class="itemComment">'+item.goodsTnm+'</div>';
 							}

+ 13 - 0
src/main/webapp/ux/mo/css/common_m.css

@@ -1765,6 +1765,19 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 .modal.pop_fullCol .modal-body .pop_cont{max-height: 100%;}
 .modal.pop_fullCol .modal-body [class^="ui_col_"]{margin: 0;}
 
+
+
+.pop_cont .nodata {padding:8.0rem 0 10.0rem;  text-align:center;}
+.pop_cont .nodata .txt_box {color:#666; font-size:1.6rem; font-weight:300; line-height:2.6rem;}
+.pop_cont .nodata .txt_box::before {content:''; display:block; width:3.6rem; height:4.6rem; margin:0 auto 2.4rem; background:url('/images/mo/ico_content_none.png') no-repeat;}
+.pop_cont .nodata .txt_box span {color:#fd4802; font-weight:500;}
+.pop_cont .nodata .btn_box {margin-top:4.0rem;}
+.pop_cont .nodata .btn_box .btn span {color:#222; font-size:1.4rem; font-weight:300;}
+
+
+
+
+
 .modal::-webkit-scrollbar,.pop_cont::-webkit-scrollbar {width: 2px;}
 .modal::-webkit-scrollbar-thumb,.pop_cont::-webkit-scrollbar-thumb {background-color: #888888;border-radius: 0px;background-clip: padding-box;border: 0px solid transparent;}
 .modal::-webkit-scrollbar-track, .pop_cont::-webkit-scrollbar-track{background-color: #dddddd;border-radius: 0px;}

+ 0 - 6
src/main/webapp/ux/pc/js/common-ui.js

@@ -404,12 +404,6 @@ $(document).ready( function() {
 		return false;
 	});
 
-	// $(".jquery-modal").modal({
-	// 	escapeClose: false,
-	// 	clickClose: false
-	// });
-
-
 	/* 같은 데이터 노출시 동일 영역끼리 병합 */
 	$(".merge_row").each(function() {
 		var txtcont = $(this).text();

+ 45 - 21
src/main/webapp/ux/style24_link.js

@@ -58,25 +58,26 @@ const _PAGE_CART = _frontUrl + "/cart/list/form";								// 장바구니
 //== 주문 ==/
 
 //== 마이페이지 ==/
-const _PAGE_MYPAGE = _frontUrl + "/mypage/main/form";							// 마이페이지 > 메인
-const _PAGE_MYPAGE_ORDER_LIST = _frontUrl + "/mypage/order/list/form";			// 마이페이지 > 주문확인/배송조회
-const _PAGE_MYPAGE_ORDER_DETAIL = _frontUrl + "/mypage/order/detail/form/";		// 마이페이지 > 주문/배송 상세
-const _PAGE_MYPAGE_CRE_LIST = _frontUrl + "/mypage/cre/list/form";				// 마이페이지 > 취소/교환/반품 목록
-const _PAGE_MYPAGE_RESTOCK = _frontUrl + "/mypage/restock/form";				// 마이페이지 > 재입고 알림 내역
-const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";					// 마이페이지 > 쿠폰
-const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 포인트
-const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";				// 마이페이지 > 상품권
-const _PAGE_MYPAGE_REVIEW = _frontUrl + "/mypage/review/form";					// 마이페이지 > 리뷰
-const _PAGE_MYPAGE_CREATE_REVIEW = _frontUrl + "/mypage/review/create/form/";	// 마이페이지 > 리뷰 > 리뷰작성
-const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	// 마이페이지 > 배송지 관리
-const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
-const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/confirm/form";		// 마이페이지 > 내정보 관리 > 회원정보 확인
-const _PAGE_MYPAGE_CUSTOMER_MODIFY = _frontUrl + "/mypage/customer/modify/form";// 마이페이지 > 내정보 관리 > 회원정보 수정
-const _PAGE_PASSWORD_MODIFY = _frontUrl + "/mypage/password/modify/form";		// 마이페이지 > 비밀번호 변경
-const _PAGE_MYPAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";			// 마이페이지 > 회원탈퇴
-const _PAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";					// 마이페이지 > 위시리스트
-const _PAGE_WISHLIST_PUT = _frontUrl + "/mypage/wish/list/put";					// 위시리스트 담기
-const _PAGE_WISHLIST_DEL = _frontUrl + "/mypage/wish/list/delete";				// 위시리스트 삭제
+const _PAGE_MYPAGE = _frontUrl + "/mypage/main/form";								// 마이페이지 > 메인
+const _PAGE_MYPAGE_ORDER_LIST = _frontUrl + "/mypage/order/list/form";				// 마이페이지 > 주문확인/배송조회
+const _PAGE_MYPAGE_ORDER_DETAIL = _frontUrl + "/mypage/order/detail/form/";			// 마이페이지 > 주문/배송 상세
+const _PAGE_MYPAGE_CRE_LIST = _frontUrl + "/mypage/cre/list/form";					// 마이페이지 > 취소/교환/반품 목록
+const _PAGE_MYPAGE_RESTOCK = _frontUrl + "/mypage/restock/form";					// 마이페이지 > 재입고 알림 내역
+const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";						// 마이페이지 > 쿠폰
+const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";						// 마이페이지 > 포인트
+const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";					// 마이페이지 > 상품권
+const _PAGE_MYPAGE_REVIEW = _frontUrl + "/mypage/review/form";						// 마이페이지 > 리뷰
+const _PAGE_MYPAGE_CREATE_REVIEW = _frontUrl + "/mypage/review/create/form/";		// 마이페이지 > 리뷰 > 리뷰작성
+const _PAGE_MYPAGE_REVIEW_DETAIL_LAYER = _frontUrl +"/mypage/review/detail/layer/";// 마이페이지- 포토/영상 리뷰 (list)
+const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";		// 마이페이지 > 배송지 관리
+const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";					// 마이페이지 > 위시리스트
+const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/confirm/form";			// 마이페이지 > 내정보 관리 > 회원정보 확인
+const _PAGE_MYPAGE_CUSTOMER_MODIFY = _frontUrl + "/mypage/customer/modify/form";	// 마이페이지 > 내정보 관리 > 회원정보 수정
+const _PAGE_PASSWORD_MODIFY = _frontUrl + "/mypage/password/modify/form";			// 마이페이지 > 비밀번호 변경
+const _PAGE_MYPAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";				// 마이페이지 > 회원탈퇴
+const _PAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";						// 마이페이지 > 위시리스트
+const _PAGE_WISHLIST_PUT = _frontUrl + "/mypage/wish/list/put";						// 위시리스트 담기
+const _PAGE_WISHLIST_DEL = _frontUrl + "/mypage/wish/list/delete";					// 위시리스트 삭제
 
 //== 마이페이지 ==/
 const _PAGE_NOMEMBER_ORDER_LIST = _frontUrl + "/noMember/order/list/form";		// 비회원 > 주문확인/배송조회
@@ -1247,8 +1248,31 @@ var cfnGoToMypageReview = function (ordNo,ordDtlNo,goodsCd) {
 		cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd+'/'+reviewStat);
 	}
 
-    
-    
+}
+
+/**
+* @type   : function
+* @access : public
+* @desc   : 상품평- 베스트 리뷰 보기
+* <pre>
+*		cfMypageReviewDetail(goodsCd, photoYn, reviewSq);
+* </pre>
+*/
+function cfMypageReviewDetail(goodsCd, photoYn, reviewSq) {
+	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
+
+	if ($('#layer_review_best').length == 0) {
+		$('body').append(str);
+	}
+	
+	var params = '?goodsCd=' + goodsCd;
+	params += '&reviewSq=' + reviewSq;
+	params += '&photoYn=' + photoYn;
+	
+	cfOpenLayer(_PAGE_MYPAGE_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
 }
 
 /**