Ver Fonte

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

card007 há 5 anos atrás
pai
commit
39ff201a3a
66 ficheiros alterados com 3294 adições e 3744 exclusões
  1. 21 0
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 2 56
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  3. 11 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  4. 55 0
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  5. 4 75
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  6. 12 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  7. 51 54
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  8. 19 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  9. 53 15
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  10. 1 0
      src/main/java/com/style24/persistence/domain/Cate4Srch.java
  11. 8 8
      src/main/java/com/style24/persistence/domain/GoodsSafeNo.java
  12. 3 0
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  13. 1 0
      src/main/java/com/style24/persistence/domain/GoodsStock.java
  14. 11 0
      src/main/java/com/style24/persistence/domain/Plan.java
  15. 56 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  16. 17 421
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  17. 2 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  18. 37 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  19. 2 4
      src/main/resources/config/application.yml
  20. 2 1
      src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html
  21. 1 1
      src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html
  22. 442 1724
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  23. 151 317
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  24. 574 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormWeb.html
  25. 80 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  26. 18 15
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaDetailFormMob.html
  27. 6 6
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html
  28. 76 876
      src/main/webapp/WEB-INF/views/mob/goods/GoodsSizeInfoFormMob.html
  29. 50 124
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  30. 475 0
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  31. 1 1
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  32. 28 23
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  33. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  34. 6 6
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  35. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  36. 3 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html
  37. 39 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustDeliveryAddrFormWeb.html
  38. 373 0
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  39. 314 0
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  40. 1 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  41. 3 3
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  42. 1 1
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  43. BIN
      src/main/webapp/images/mo/coachmask01.png
  44. BIN
      src/main/webapp/images/mo/coachmask02.png
  45. BIN
      src/main/webapp/images/mo/coachmask03.png
  46. BIN
      src/main/webapp/images/mo/ico_app_arr.png
  47. BIN
      src/main/webapp/images/mo/ico_app_arr2.png
  48. BIN
      src/main/webapp/images/mo/ico_app_setting.png
  49. BIN
      src/main/webapp/images/mo/ico_full.png
  50. BIN
      src/main/webapp/images/mo/ico_full_on.png
  51. BIN
      src/main/webapp/images/mo/ico_go_save.png
  52. BIN
      src/main/webapp/images/mo/ico_like.png
  53. BIN
      src/main/webapp/images/mo/ico_paging.png
  54. BIN
      src/main/webapp/images/mo/ico_pop_cls.png
  55. BIN
      src/main/webapp/images/mo/ico_pop_cls_org.png
  56. BIN
      src/main/webapp/images/mo/logo_STYLE24_full.png
  57. BIN
      src/main/webapp/images/mo/movloading.gif
  58. BIN
      src/main/webapp/images/mo/page_accessApp.jpg
  59. BIN
      src/main/webapp/images/mo/page_consentAlarm.jpg
  60. BIN
      src/main/webapp/images/mo/pay_kakao.png
  61. BIN
      src/main/webapp/images/mo/pay_naver.png
  62. BIN
      src/main/webapp/images/mo/pay_payco.png
  63. 233 0
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollSession.js
  64. 27 0
      src/main/webapp/ux/plugins/jquery/jquery.history.min.js
  65. 1 0
      src/main/webapp/ux/plugins/lazyload.min.js
  66. 20 0
      src/main/webapp/ux/style24_link.js

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

@@ -2,6 +2,7 @@ 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;
 import com.style24.persistence.domain.WishList;
@@ -146,5 +147,25 @@ public interface TsfCustomerDao {
 	 */
 	int updateCustomerInfo(Customer customer);
 
+	/**
+	 * 고객등급 정책
+	 *
+	 * @param custGrade - 사이트 코드
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 04. 06
+	 */
+	Collection<CustGrade> getCustGradePolicy(CustGrade custGrade);
+
+	/**
+	 * 고객 예상등급 조회
+	 *
+	 * @param custGrade - 사이트 코드
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 04. 06
+	 */
+	CustGrade getExpectedCustGrde(CustGrade custGrade);
+
 
 }

+ 2 - 56
src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -146,65 +146,11 @@ public interface TsfDisplayDao {
 	Collection<Contents> getContentsBannerList(Contents contents);
 
 	/**
-	 * 상품카테고리 필터 브랜드 목록
+	 * 상품카테고리 필터 목록
 	 * @param
 	 * @return
 	 * @author bin2107
 	 * @date 2021. 4. 5
 	 */
-	Collection<GoodsSearch> getCategoryFliterBrand(GoodsSearch goodsSearch);
-
-	/**
-	 * 상품카테고리 필터 사이즈 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	Collection<GoodsSearch> getCategoryFliterSize(GoodsSearch goodsSearch);
-
-	/**
-	 * 상품카테고리 필터 가격 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	Collection<GoodsSearch> getCategoryFliterPrice(GoodsSearch goodsSearch);
-
-	/**
-	 * 상품카테고리 필터 연령대 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	Collection<GoodsSearch> getCategoryFliterAge(GoodsSearch goodsSearch);
-
-	/**
-	 * 상품카테고리 필터 시즌 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	Collection<GoodsSearch> getCategoryFliterSeason(GoodsSearch goodsSearch);
-
-	/**
-	 * 상품카테고리 필터 컬러 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	Collection<GoodsSearch> getCategoryFliterColor(GoodsSearch goodsSearch);
-
-	/**
-	 * 상품카테고리 필터 컬러 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	Collection<GoodsSearch> getCategoryFliterBenefit(GoodsSearch goodsSearch);
+	Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch);
 }

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

@@ -302,5 +302,16 @@ public interface TsfPlanningDao {
 	 */
 	CustDeliveryAddr getCustAddrShotConfirm(String recipZipcode);
 	
+	/**
+	 * 출석체크 달력
+	 *
+	 * @param Plan
+	 * @return plan
+	 * @author sowon
+	 * @date 2021. 4. 6
+	 */
+	Collection<Plan> getAttendMonth(Plan plan);
+	
+	
 	
 }

+ 55 - 0
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -7,6 +7,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import com.style24.persistence.domain.CustGrade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -791,6 +792,7 @@ public class TsfCustomerService {
 
 	/**
 	 * 고객계좌 정보
+	 *
 	 * @param  custNo - 고객번호
 	 * @return CustAccount - 고객계과 정보
 	 * @author jsshin
@@ -803,6 +805,7 @@ public class TsfCustomerService {
 
 	/**
 	 * 고객정보 수정
+	 *
 	 * @param  customer - 고객정보
 	 * @return GagaMap - 결과
 	 * @author jsshin
@@ -865,6 +868,7 @@ public class TsfCustomerService {
 	 * 이메일 유효성 체크 -
 	 * 본인이 사용하고 있는 이메일 제외 하고 다른 사람이
 	 * 변경하려는 이메일 사용하느지 체크
+	 *
 	 * @param  customer - 이메일, 고객번호
 	 * @return GagaMap - 결과
 	 * @author jsshin
@@ -878,17 +882,20 @@ public class TsfCustomerService {
 
 	/**
 	 * 회원탈퇴 처리
+	 *
 	 * @param  customer - 고객번호
 	 * @return GagaMap - 결과
 	 * @author jsshin
 	 * @since 2021. 03. 24
 	 */
+	@Transactional("shopTxnManager")
 	public GagaMap saveCustomerSecede(Customer customer) {
 		return coreCustomerService.saveCustomerSecede(customer);
 	}
 
 	/**
 	 * 마이페이지 - 비밀번호 변경
+	 *
 	 * @param  customer - 고객번호
 	 * @return GagaMap - 결과
 	 * @author jsshin
@@ -919,6 +926,7 @@ public class TsfCustomerService {
 
 	/**
 	 * 마이페이지 - 배송지 목록
+	 *
 	 * @param  custDeliveryAddr - 고객번호
 	 * @return Collection<CustDeliveryAddr> - 배송목록
 	 * @author jsshin
@@ -928,4 +936,51 @@ public class TsfCustomerService {
 		return coreCustomerService.getCustomerDeliveryAddrList(custDeliveryAddr);
 	}
 
+	/**
+	 * 마이페이지 - 배송지 삭제
+	 *
+	 * @param  custDeliveryAddr - 고객번호
+	 * @return Collection<CustDeliveryAddr> - 배송목록
+	 * @author jsshin
+	 * @since 2021. 04. 01
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap deleteCustDeliveryAddr(CustDeliveryAddr custDeliveryAddr) {
+		GagaMap resultMap = new GagaMap();
+		Integer custNo = TsfSession.getInfo().getCustNo();
+		custDeliveryAddr.setCustNo(custNo);
+		custDeliveryAddr.setRegNo(custNo);
+		custDeliveryAddr.setUpdNo(custNo);
+		int resultCnt = coreCustomerService.deleteCustDeliveryAddr(custDeliveryAddr);
+		boolean isSuccess = resultCnt > 0;
+		resultMap.setBoolean("isSuccess", isSuccess);
+		return resultMap;
+	}
+
+	/*
+	 * 고객 예상등급
+	 *
+	 * @param  custGrade - 고객번호
+	 * @return CustGrade
+	 * @author jsshin
+	 * @since 2021. 04. 06
+	 */
+	public GagaMap getExpectedCustGrde(Customer customer) {
+		GagaMap result = new GagaMap();
+		CustGrade params = new CustGrade();
+		params.setCustNo(customer.getCustNo());
+		params.setSiteCd(customer.getSiteCd());
+		Collection<CustGrade> custGradePolicy = customerDao.getCustGradePolicy(params);
+		result.set("custGradePolicy", custGradePolicy);
+		CustGrade expctCustGrade;
+		for (CustGrade grade : custGradePolicy) {
+			grade.setCustNo(customer.getCustNo());
+			expctCustGrade = customerDao.getExpectedCustGrde(grade);
+			if (expctCustGrade != null) {
+				result.set("expctCustGrade", expctCustGrade);
+				return result;
+			}
+		}
+		return result;
+	}
 }

+ 4 - 75
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -325,86 +325,15 @@ public class TsfDisplayService {
 	}
 
 	/**
-	 * 상품카테고리 필터 브랜드 목록
+	 * 상품카테고리 필터 목록
 	 * @param
 	 * @return
 	 * @author bin2107
 	 * @date 2021. 4. 5
 	 */
-	@Cacheable(value = "cate", key = "'categoryFilterBrand-'.concat(#brandGroupNo).concat(#formalGb).concat(#cateNo)")
-	public Collection<GoodsSearch> getCategoryFliterBrand(GoodsSearch goodsSearch, String brandGroupNo, String formalGb, Integer cateNo){
-		return displayDao.getCategoryFliterBrand(goodsSearch);
+	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb){
+		cate4Srch.setFilterGb(filterGb);
+		return displayDao.getCategoryFilter(cate4Srch);
 	}
 
-	/**
-	 * 상품카테고리 필터 사이즈 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	@Cacheable(value = "cate", key = "'categoryFilterSize-'.concat(#brandGroupNo).concat(#formalGb).concat(#cateNo)")
-	public Collection<GoodsSearch> getCategoryFliterSize(GoodsSearch goodsSearch, String brandGroupNo, String formalGb, Integer cateNo){
-		return displayDao.getCategoryFliterSize(goodsSearch);
-	}
-
-	/**
-	 * 상품카테고리 필터 가격 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	@Cacheable(value = "cate", key = "'categoryFilterPrice-'.concat(#brandGroupNo).concat(#formalGb).concat(#cateNo)")
-	public Collection<GoodsSearch> getCategoryFliterPrice(GoodsSearch goodsSearch, String brandGroupNo, String formalGb, Integer cateNo){
-		return displayDao.getCategoryFliterPrice(goodsSearch);
-	}
-
-	/**
-	 * 상품카테고리 필터 연령대 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	@Cacheable(value = "cate", key = "'categoryFilterAge-'.concat(#brandGroupNo).concat(#formalGb).concat(#cateNo)")
-	public Collection<GoodsSearch> getCategoryFliterAge(GoodsSearch goodsSearch, String brandGroupNo, String formalGb, Integer cateNo){
-		return displayDao.getCategoryFliterAge(goodsSearch);
-	}
-
-	/**
-	 * 상품카테고리 필터 시즌 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	@Cacheable(value = "cate", key = "'categoryFilterSeason-'.concat(#brandGroupNo).concat(#formalGb).concat(#cateNo)")
-	public Collection<GoodsSearch> getCategoryFliterSeason(GoodsSearch goodsSearch, String brandGroupNo, String formalGb, Integer cateNo){
-		return displayDao.getCategoryFliterSeason(goodsSearch);
-	}
-
-	/**
-	 * 상품카테고리 필터 컬러 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	@Cacheable(value = "cate", key = "'categoryFilterColor-'.concat(#brandGroupNo).concat(#formalGb).concat(#cateNo)")
-	public Collection<GoodsSearch> getCategoryFliterColor(GoodsSearch goodsSearch, String brandGroupNo, String formalGb, Integer cateNo){
-		return displayDao.getCategoryFliterColor(goodsSearch);
-	}
-
-	/**
-	 * 상품카테고리 필터 혜택 목록
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @date 2021. 4. 5
-	 */
-	@Cacheable(value = "cate", key = "'categoryFilterBenefit-'.concat(#brandGroupNo).concat(#formalGb).concat(#cateNo)")
-	public Collection<GoodsSearch> getCategoryFliterBenefit(GoodsSearch goodsSearch, String brandGroupNo, String formalGb, Integer cateNo){
-		return displayDao.getCategoryFliterBenefit(goodsSearch);
-	}
 }

+ 12 - 0
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -456,6 +456,18 @@ public class TsfPlanningService {
 		return planningDao.getCustAddrShotConfirm(recipZipcode);
 	}
 	
+	/**
+	 * 출석체크 달력 출력
+	 *
+	 * @param Plan
+	 * @return Plan
+	 * @author sowon
+	 * @date 2021. 4. 6
+	 */
+	public Collection<Plan> getAttendMonth(Plan plan) {
+		return planningDao.getAttendMonth(plan);
+	}
+	
 
 
 }

+ 51 - 54
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -382,6 +382,32 @@ public class TsfDisplayController extends TsfBaseController {
 		return coreLookbookService.getLookbookList(lookbook);
 	}
 
+	/**
+	 * 룩북 상세
+	 * @param lookbook
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 6
+	 */
+	@GetMapping("/lookbook/detail/form")
+	public ModelAndView lookbookDetail(Device device, @RequestParam HashMap<String, String> paramMap) {
+		ModelAndView mav = new ModelAndView();
+
+		Lookbook lookbook = new Lookbook();
+		lookbook.setLookbookSq(Integer.parseInt(paramMap.get("lookbookSq")));
+		lookbook.setBrandCd(paramMap.get("brandGroupNo"));
+
+		mav.addObject("lookbookSq", paramMap.get("lookbookSq"));
+
+		lookbook.setFrontGb(TsfSession.getFrontGb());
+		mav.addObject("lookbookDetailList", coreLookbookService.getLookbookListForGoods(lookbook));
+
+		mav.addObject("otherLookbookList", coreLookbookService.getOtherLookbookList(lookbook));
+
+		mav.setViewName(super.getDeviceViewName("display/LookbookDetailForm"));
+		return mav;
+	}
+
 	/**
 	 * 팝업 목록
 	 *
@@ -410,67 +436,38 @@ public class TsfDisplayController extends TsfBaseController {
 	 * @param
 	 * @return
 	 * @author bin2107
-	 * @since 2021. 4. 2
+	 * @since 2021. 4. 2 CATE4SRCH
 	 */
 	@GetMapping("/category/goods/list/form")
-	public ModelAndView categoryGoodsListForm(Device device, @RequestParam HashMap<String, String> paramMap) {
+	public ModelAndView categoryGoodsListForm(Cate4Srch cate4Srch) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/CategoryGoodsListForm"));
 
-		String siteCd = TscConstants.Site.STYLE24.value();
-		String cateGb = paramMap.get("cateGb");
-		String formalGb = "G009_10";	//paramMap.get("formalGb");
-		String brandGroupNo = "0";
-		if(paramMap.get("brandGroupNo") != null && !paramMap.get("brandGroupNo").equals("")){
-			brandGroupNo = paramMap.get("brandGroupNo");
+		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
+		cate4Srch.setFormalGb("G009_10");
+		cate4Srch.setFrontGb(TsfSession.getFrontGb());
+		cate4Srch.setCustGb(TsfSession.getCustGb());
+		if(cate4Srch.getBrandGroupNo()==null || cate4Srch.getBrandGroupNo().equals("")){
+			cate4Srch.setBrandGroupNo(0);
 		}
-
-		GoodsSearch goodsSearch = new GoodsSearch();
-		Integer cateNo = 0;
-		if(paramMap.get("cate4No") != null && !paramMap.get("cate4No").equals("")){
-			goodsSearch.setCate4No(Integer.parseInt(paramMap.get("cate4No")));
-			cateNo = Integer.parseInt(paramMap.get("cate4No"));
-			mav.addObject("cateNo",cateNo);
-		} else if(paramMap.get("cate3No") != null && !paramMap.get("cate3No").equals("")){
-			goodsSearch.setCate3No(Integer.parseInt(paramMap.get("cate3No")));
-			cateNo = Integer.parseInt(paramMap.get("cate3No"));
-			mav.addObject("cateNo",cateNo);
-		} else if(paramMap.get("cate2No") != null && !paramMap.get("cate2No").equals("")) {
-			goodsSearch.setCate2No(Integer.parseInt(paramMap.get("cate2No")));
-			cateNo = Integer.parseInt(paramMap.get("cate2No"));
-			mav.addObject("cateNo",cateNo);
-		} else if(paramMap.get("cate1No") != null && !paramMap.get("cate1No").equals("")){
-			goodsSearch.setCate1No(Integer.parseInt(paramMap.get("cate1No")));
-			cateNo = Integer.parseInt(paramMap.get("cate1No"));
-			mav.addObject("cateNo",cateNo);
+		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());
 		}
 
-		goodsSearch.setCateNo(cateNo);
-		goodsSearch.setSiteCd(siteCd);
-		goodsSearch.setCateGb(cateGb);
-		goodsSearch.setFormalGb(formalGb);
-		goodsSearch.setBrandGroupNo(Integer.parseInt(brandGroupNo));
-		goodsSearch.setCateType("G031_10");
-		goodsSearch.setFrontGb(TsfSession.getFrontGb());
-		goodsSearch.setCustGb(TsfSession.getCustGb());
-
-		mav.addObject("filterBrandList", displayService.getCategoryFliterBrand(goodsSearch, brandGroupNo, formalGb, cateNo));
-		mav.addObject("filterSizeList", displayService.getCategoryFliterSize(goodsSearch, brandGroupNo, formalGb, cateNo));
-		mav.addObject("filterPriceList", displayService.getCategoryFliterPrice(goodsSearch, brandGroupNo, formalGb, cateNo));
-		//mav.addObject("filterAgeList", displayService.getCategoryFliterAge(goodsSearch, brandGroupNo, formalGb, cateNo));
-		//mav.addObject("filterSeasonList", displayService.getCategoryFliterSeason(goodsSearch, brandGroupNo, formalGb, cateNo));
-		mav.addObject("filterAgeList", null);
-		mav.addObject("filterSeasonList", null);
-		mav.addObject("filterColorList", displayService.getCategoryFliterColor(goodsSearch, brandGroupNo, formalGb, cateNo));
-		mav.addObject("filterBenefitList", displayService.getCategoryFliterBenefit(goodsSearch, brandGroupNo, formalGb, cateNo));
-		
-		mav.addObject("siteCd",siteCd);
-		mav.addObject("cateGb",cateGb);
-		mav.addObject("formalGb",formalGb);
-		mav.addObject("brandGroupNo",brandGroupNo);
-		mav.addObject("cate1No",paramMap.get("cate1No"));
-		mav.addObject("cate2No",paramMap.get("cate2No"));
-		mav.addObject("cate3No",paramMap.get("cate3No"));
-		mav.addObject("cate4No",paramMap.get("cate4No"));
+		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.getCategoryFilter(cate4Srch, "BENEFIT"));
+		mav.addObject("cateInfo", cate4Srch);
 
 		return mav;
 	}

+ 19 - 3
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1370,9 +1370,13 @@ public class TsfMypageController extends TsfBaseController {
 
 		if (StringUtils.isBlank(referer)) {
 			redirect = true;
-		} else if (!referer.contains("/mypage/customer/confirm/form")) {
+		}
+
+		if (!referer.contains("/mypage/customer/confirm/form")) {
 			redirect = true;
-		} else if (!"Y".equals(confirmYn)) {
+		}
+
+		if (!"Y".equals(confirmYn)) {
 			redirect = true;
 		}
 
@@ -1381,7 +1385,7 @@ public class TsfMypageController extends TsfBaseController {
 			return mav;
 		}
 
-		mav.addObject("bankList", rendererService.getCommonCodeList("G940", "Y"));
+		mav.addObject("bankList", rendererService.getCommonCodeList("G942", "Y"));
 
 		mav.setViewName(super.getDeviceViewName("mypage/MypageCustModifyForm"));
 		return mav;
@@ -1636,6 +1640,18 @@ public class TsfMypageController extends TsfBaseController {
 		return customerService.getCustomerDeliveryAddrList(custDeliveryAddr);
 	}
 
+	/**
+	 * 마이페이지 - 배송지 삭제
+	 *
+	 * @return Collection<CustDeliveryAddr>
+	 * @author jsshin
+	 * @since 2021. 04. 05
+	 */
+	@PostMapping("/customer/delivery/addr/delete")
+	@ResponseBody
+	public GagaMap deleteCustDeliveryAddr(@RequestBody CustDeliveryAddr custDeliveryAddr) {
+		return customerService.deleteCustDeliveryAddr(custDeliveryAddr);
+	}
 
 	/*신주승 끝*/
 }

+ 53 - 15
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -3,6 +3,7 @@ package com.style24.front.biz.web;
 import java.util.Collection;
 import java.util.Map;
 
+import com.style24.front.biz.service.TsfCustomerService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
@@ -61,6 +62,10 @@ public class TsfPlanningController extends TsfBaseController {
 
 	@Autowired
 	private TscCouponService coreCouponService;
+
+	@Autowired
+	private TsfCustomerService customerService;
+
 	/**
 	 * 기획전 메인 화면
 	 * @param cateNo - 카테고리번호
@@ -184,19 +189,6 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setTmplType("G082_52");
 		mav.addObject("goods4Info", planningService.getPlanGoodsDisplayList(plan));
 
-		if (planGb.equals("P")) {
-			// 다른기획전 보기 
-			mav.addObject("planList", planningService.getPlanningList(plan));
-			mav.addObject("listSize", planningService.getPlanningList(plan).size());
-		}
-		else{
-			// 다른이벤트 보기
-			mav.addObject("planList", planningService.getPlanEventList(plan));
-			mav.addObject("listSize", planningService.getPlanEventList(plan).size());
-		}
-		
-		
-//
 //		mav.addObject("couponList", planningService.getPlusCouponList(plan));
 //
 //		// 코너 목록
@@ -213,6 +205,25 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.addObject("viewPage", "G037_40");
 		mav.addObject("popupPlanSq", plan.getPlanSq());
 		
+		if (planGb.equals("P")) {
+			// 다른기획전 보기 
+			mav.addObject("planList", planningService.getPlanningList(plan));
+			mav.addObject("listSize", planningService.getPlanningList(plan).size());
+		}
+		else if(planGb.equals("E")){
+			// 다른이벤트 보기
+			mav.addObject("planList", planningService.getPlanEventList(plan));
+			mav.addObject("listSize", planningService.getPlanEventList(plan).size());
+		}else if(planGb.equals("C")) {
+			// 출석체크 
+			mav.addObject("planList", planningService.getPlanEventList(plan));
+			mav.addObject("listSize", planningService.getPlanEventList(plan).size());
+			mav.addObject("month", planningService.getAttendMonth(planInfo));
+			mav.setViewName(super.getDeviceViewName("planning/PlanningEventAttendForm"));
+			return mav;
+		}
+		
+		
 		mav.setViewName(super.getDeviceViewName("planning/PlanningDetailForm"));
 		return mav;
 	}
@@ -428,11 +439,11 @@ public class TsfPlanningController extends TsfBaseController {
 
 	
 	/**
-	 * 총알배송 메인 화면
+	 * 총알배송 / 일반배송 확인
 	 * 
 	 * @return
 	 * @author sowon
-	 * @since 2021. 3. 30
+	 * @since 2021. 4. 5
 	 */
 	@GetMapping("shot/delivery/confirm")
 	@ResponseBody
@@ -441,4 +452,31 @@ public class TsfPlanningController extends TsfBaseController {
 		result.set("shotYn", planningService.getCustAddrShotConfirm(recipZipcode));
 		return result;
 	}
+
+	/**
+	 * 회원등급 혜택
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 04. 06
+	 */
+	@GetMapping("/event/custgrade/benefit/form")
+	public ModelAndView getCustGradeBenefitForm() {
+		ModelAndView mav = new ModelAndView();
+		boolean isLogin = TsfSession.isLogin();
+		mav.addObject("isLogin", isLogin);
+
+		if (isLogin) {
+			Customer customer = new Customer();
+			customer.setSiteCd(TscConstants.Site.STYLE24.value());
+			customer.setCustNo(TsfSession.getInfo().getCustNo());
+			customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+
+			mav.addObject("exptCustGrdeMap", customerService.getExpectedCustGrde(customer));
+			mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
+		}
+
+		mav.setViewName(super.getDeviceViewName("planning/PlanningCustGradeBenefitForm"));
+		return mav;
+	}
 }

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

@@ -49,4 +49,5 @@ public class Cate4Srch extends TscBaseDomain {
 	private String viewDt;			// 미리보기 일시
 	private String preview;			// 미리보기 여부 (Y:미리보기)
 
+	private String filterGb;		// 필터 구분값
 }

+ 8 - 8
src/main/java/com/style24/persistence/domain/GoodsSafeNo.java

@@ -21,13 +21,13 @@ public class GoodsSafeNo extends TscBaseDomain {
 	private String certDiv;
 	private String certDt;
 
-	public boolean getIsCertNum() {
-		if (this.certNum.matches(".*[0-9].*")) {
-			return true;
-		} else {
-			return false;
-		}
-
-	}
+//	public boolean getIsCertNum() {
+//		if (this.certNum.matches(".*[0-9].*")) {
+//			return true;
+//		} else {
+//			return false;
+//		}
+//
+//	}
 
 }

+ 3 - 0
src/main/java/com/style24/persistence/domain/GoodsSearch.java

@@ -53,5 +53,8 @@ public class GoodsSearch extends TscBaseDomain {
     private Integer price5;
     private Integer price6;
 
+    private String  filterGb;
+    private String  filterCd;
+    private String  filterNm;
 
 }

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

@@ -34,6 +34,7 @@ public class GoodsStock extends TscBaseDomain {
 	private int stockQty;			// 상품 재고
 	private String selfGoodsYn;		// 자사상품구분
 	private String optNm;			// 옵션명
+	private String goodsStat;		// 상품상태
 	private int minOrdQty;
 	private int maxOrdQty;
 	

+ 11 - 0
src/main/java/com/style24/persistence/domain/Plan.java

@@ -244,6 +244,17 @@ public class Plan extends TscBaseDomain {
 	private String brandKnm;
 
 	private String sysImgNm;			// 상품 이미지
+	
+	private String sun;
+	private String mon;
+	private String tue;
+	private String wed;
+	private String thu;
+	private String fri;
+	private String sat;
+	
+	
+	
 	// Pagination
 	private TscPageRequest pageable;
 	private int pageNo = 1;

+ 56 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml

@@ -568,4 +568,60 @@
 		WHERE  CUST_NO = #{custNo}
 	</update>
 
+	<!--고객등급 정책조회-->
+	<select id="getCustGradePolicy" parameterType="CustGrade" resultType="CustGrade">
+		/* TsfCustomer.getCustGradePolicy */
+		SELECT SITE_CD
+		     , GRADE_CD
+		     , FN_GET_CODE_NM('G110', GRADE_CD) AS GRADE_CD_NM
+		     , SUBSTRING(GRADE_CD, 6, 2) AS GRADE_CD_NO
+		     , ICON_NM
+		     , CAL_MONTHS
+		     , MIN_BUY_AMT
+		     , MIN_BUY_CNT
+		     , BUY_EXCEPT_AMT
+		     , GRADE_CPN_ID1
+		     , GRADE_CPN_ID2
+		     , GRADE_CPN_ID3
+		     , DISP_ORD
+		     , USE_YN
+		FROM  TB_CUST_GRADE_POLICY
+		WHERE SITE_CD = #{siteCd}
+		AND   USE_YN = 'Y'
+		ORDER BY GRADE_CD
+	</select>
+	
+	<!--고객 예상등급 조회-->
+	<select id="getExpectedCustGrde" parameterType="CustGrade" resultType="CustGrade">
+		/* TsfCustomer.getExpectedCustGrde */
+		SELECT B.ORD_NO_CNT
+		     , B.SUM_REAL_ORD_AMT
+		     , #{gradeCd}        AS GRADE_CD
+		     , FN_GET_CODE_NM('G110', #{gradeCd}) AS GRADE_CD_NM
+		     , SUBSTRING(#{gradeCd}, 6, 2)        AS GRADE_CD_NO
+		FROM  (
+		       SELECT COUNT(DISTINCT A.ORD_NO) AS ORD_NO_CNT
+		            , SUM(A.SUM_REAL_ORD_AMT)  AS SUM_REAL_ORD_AMT
+		       FROM (
+		              SELECT O.ORD_NO
+		                   , SUM(OD.REAL_ORD_AMT + OD.GFCD_USE_AMT) AS SUM_REAL_ORD_AMT
+		              FROM   TB_ORDER O
+		              INNER JOIN
+		                     TB_ORDER_DETAIL OD
+		              ON     O.ORD_NO = OD.ORD_NO
+		              INNER JOIN
+		                     TB_CUSTOMER C
+		              ON     O.CUST_NO = C.CUST_NO
+		              WHERE  OD.ORD_DTL_STAT = 'G013_70' /*구매확정*/
+		              AND    C.CUST_NO = #{custNo}
+		              AND    O.ORD_DT >= DATE_ADD(DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY), INTERVAL -#{calMonths} MONTH)
+		              AND    O.ORD_DT <![CDATA[<]]> DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*익월 1일*/
+		              GROUP BY O.ORD_NO
+		              HAVING SUM(OD.REAL_ORD_AMT + OD.GFCD_USE_AMT) >= #{buyExceptAmt}
+		            ) A
+		       ) B
+		WHERE B.ORD_NO_CNT >= #{minBuyCnt}
+		OR    B.SUM_REAL_ORD_AMT >= #{minBuyAmt}
+	</select>
+
 </mapper>

+ 17 - 421
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -588,431 +588,27 @@
 				 )
 	</select>
 
-	<!-- 상품 카테고리 필터 브랜드 -->
-	<select id="getCategoryFliterBrand" parameterType="GoodsSearch" resultType="GoodsSearch" timeout="300">
-		/* TsfDisplay.getCategoryFliterBrand */
-		SELECT BG.BRAND_GROUP_NO
-		     , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
-		            BG.BRAND_GROUP_ENM
-		       ELSE
-		            BG.BRAND_GROUP_KNM
-		       END               AS BRAND_GROUP_NM /*브랜드그룹명*/
-		FROM   TB_BRAND_GROUP BG
-		WHERE  BRAND_GROUP_NO IN (SELECT B.BRAND_GROUP_NO
-		                          FROM   TB_CATE_4SRCH C4
-		                               , TB_CATE_GOODS CG
-		                               , TB_GOODS G
-		                               , TB_GOODS_STOCK GS
-		                               , TB_BRAND B
-		                               , TB_SITE_BRAND SB
-		                          WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
-		                          <choose>
-			                        <when test="brandGroupNo != null and brandGroupNo != ''">
-				                  AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
-									</when>
-			                        <otherwise>
-				                  AND    CG.BRAND_GROUP_NO = 0
-			                        </otherwise>
-		                          </choose>
-		                          AND    CG.GOODS_CD = G.GOODS_CD
-		                          AND    G.GOODS_CD = GS.GOODS_CD
-		                          AND    G.BRAND_CD = B.BRAND_CD
-		                          AND    B.BRAND_CD = SB.BRAND_CD
-		                          AND    C4.SITE_CD = #{siteCd}
-		                          AND    C4.CATE_GB = #{cateGb}
-		                          AND    C4.CATE_TYPE = 'G031_10'
-		                          AND    C4.CATE1_NO = #{cate1No}
-		                          <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>
-		                          AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		                          AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		                          AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
-		                          AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
-		                          AND    SB.SITE_CD = #{siteCd}
-		                          AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
-		                          AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		                         )
-		AND  BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
-		ORDER  BY 2
-	</select>
-
-	<!-- 상품 카테고리 필터 사이즈 -->
-	<select id="getCategoryFliterSize" parameterType="GoodsSearch" resultType="GoodsSearch" timeout="300">
-		/* TsfDisplay.getCategoryFliterSize */
-		SELECT DISTINCT
-		       I.SIZE_GB /*사이즈구분(T:상의, B:하의, S:신발)*/
-		       , S.OPT_CD2 /*옵션코드2*/
-		FROM   TB_CATE_4SRCH C4
-		     , TB_CATE_GOODS CG
-		     , TB_GOODS G
-		     , TB_ITEMKIND I
-		     , VW_STOCK S
-		     , TB_BRAND B
-		     , TB_SITE_BRAND SB
-		WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+	<!-- 상품 카테고리 필터 -->
+	<select id="getCategoryFilter" parameterType="Cate4srch" resultType="GoodsSearch">
+		/* TsfDisplay.getCategoryFilter */
+		SELECT
 		<choose>
-			<when test="brandGroupNo != null and brandGroupNo != ''">
-				AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+			<when test="filterGb != null and filterGb =='SIZE'">
+		       SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
 			</when>
 			<otherwise>
-				AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		       FILTER_CD
 			</otherwise>
 		</choose>
-		AND    CG.GOODS_CD = G.GOODS_CD
-		AND    G.ITEMKIND_CD = I.ITEMKIND_CD
-		AND    G.GOODS_CD = S.GOODS_CD
-		AND    G.BRAND_CD = B.BRAND_CD
-		AND    B.BRAND_CD = SB.BRAND_CD
-		AND    C4.SITE_CD = #{siteCd}
-		AND    C4.CATE_GB = #{cateGb}
-		AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		AND    C4.CATE1_NO = #{cate1No}
-		<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>
-		AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
-		AND    I.SIZE_GB IS NOT NULL
-		AND    S.CURR_STOCK_QTY - S.BASE_STOCK_QTY <![CDATA[>]]> 0 /*재고있는옵션*/
-		AND    S.SOLDOUT_YN = 'N' /*품절이 아닌 옵션*/
-		AND    S.DISP_YN = 'Y' /*노출하는 옵션*/
-		AND    LENGTH(S.OPT_CD2) > 0
-		AND    SB.SITE_CD = #{siteCd}
-		AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
-		AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		ORDER  BY CASE WHEN I.SIZE_GB = 'T' THEN 1
-		               WHEN I.SIZE_GB = 'B' THEN 2
-		               WHEN I.SIZE_GB = 'S' THEN 3
-		               ELSE 4
-		               END, S.OPT_CD2
-	</select>
-
-	<!-- 상품 카테고리 필터 사이즈 -->
-	<select id="getCategoryFliterPrice" parameterType="GoodsSearch" resultType="GoodsSearch" timeout="300">
-		/* TsfDisplay.getCategoryFliterPrice */
-		SELECT FLOOR(MIN_CURR_PRICE / 1000) * 1000                   AS PRICE1
-		     , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 1) / 1000) * 1000 AS PRICE2
-		     , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 2) / 1000) * 1000 AS PRICE3
-		     , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 3) / 1000) * 1000 AS PRICE4
-		     , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 4) / 1000) * 1000 AS PRICE5
-		     , FLOOR(MAX_CURR_PRICE / 1000) * 1000                   AS PRICE6
-		FROM   (
-		        SELECT MIN(CURR_PRICE) AS MIN_CURR_PRICE                    /*최소현재판매가*/
-		        , MAX(CURR_PRICE) AS MAX_CURR_PRICE                    /*최대현재판매가*/
-		        , (MAX(CURR_PRICE) - MIN(CURR_PRICE)) / 5 AS SLICE_VAL /*분할값*/
-		        FROM   (
-		                SELECT FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb}) AS CURR_PRICE /*현재판매가*/
-		                FROM   TB_CATE_4SRCH C4
-		                     , TB_CATE_GOODS CG
-		                     , TB_GOODS G
-		                     , TB_GOODS_STOCK GS
-		                     , TB_BRAND B
-		                     , TB_SITE_BRAND SB
-		                WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
-		                <choose>
-		                	<when test="brandGroupNo != null and brandGroupNo != ''">
-		                		AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
-		                	</when>
-		                	<otherwise>
-		                		AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		                	</otherwise>
-		                </choose>
-		                AND    CG.GOODS_CD = G.GOODS_CD
-		                AND    CG.GOODS_CD = GS.GOODS_CD
-		                AND    G.BRAND_CD = B.BRAND_CD
-		                AND    B.BRAND_CD = SB.BRAND_CD
-		                AND    C4.SITE_CD = #{siteCd}
-		                AND    C4.CATE_GB = #{cateGb}
-		                AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		                AND    C4.CATE1_NO = #{cate1No}
-		                <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>
-		                AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		                AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		                AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
-		                AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
-		                AND    SB.SITE_CD = #{siteCd}
-		                AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
-		                AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		        ) Z
-		) Z
-	</select>
-
-	<!-- 상품 카테고리 필터 연령대 -->
-	<select id="getCategoryFliterAge" parameterType="GoodsSearch" resultType="GoodsSearch" timeout="300">
-		/* TsfDisplay.getCategoryFliterAge */
-		SELECT CD    AS AGES_CD /*연령대코드*/
-		     , CD_NM AS AGES_NM /*연령대명*/
-		FROM   TB_COMMON_CODE
-		WHERE  CD_GB = 'G023'
-		AND    CD IN (SELECT G.AGE_GRP_CD
-		              FROM   TB_CATE_4SRCH C4
-		                   , TB_CATE_GOODS CG
-		                   , TB_GOODS G
-		                   , TB_GOODS_STOCK GS
-		                   , TB_BRAND B
-		                   , TB_SITE_BRAND SB
-		              WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
-		              <choose>
-		              	<when test="brandGroupNo != null and brandGroupNo != ''">
-		              		AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
-		              	</when>
-		              	<otherwise>
-		              		AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		              	</otherwise>
-		              </choose>
-		              AND    CG.GOODS_CD = G.GOODS_CD
-		              AND    CG.GOODS_CD = GS.GOODS_CD
-		              AND    G.BRAND_CD = B.BRAND_CD
-		              AND    B.BRAND_CD = SB.BRAND_CD
-		              AND    C4.SITE_CD = #{siteCd}
-		              AND    C4.CATE_GB = #{cateGb}
-		              AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		              AND    C4.CATE1_NO = #{cate1No}
-		              <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>
-		              AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		              AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		              AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
-		              AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
-		              AND    SB.SITE_CD = #{siteCd}
-		              AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
-		              AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		            )
-		AND    USE_YN = 'Y'
-		ORDER  BY DISP_ORD
-	</select>
-
-	<!-- 상품 카테고리 필터 시즌 -->
-	<select id="getCategoryFliterSeason" parameterType="GoodsSearch" resultType="GoodsSearch" timeout="300">
-	/* TsfDisplay.getCategoryFliterSeason */
-		SELECT CD    AS SEASON_CD /*시즌코드*/
-		     , CD_NM AS SEASON_NM /*시즌명*/
-		FROM   TB_COMMON_CODE
-		WHERE  CD_GB = 'G006'
-		AND    CD IN (SELECT G.SEASON_CD
-		              FROM   TB_CATE_4SRCH C4
-		                   , TB_CATE_GOODS CG
-		                   , TB_GOODS G
-		                   , TB_GOODS_STOCK GS
-		                   , TB_BRAND B
-		                   , TB_SITE_BRAND SB
-		              WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
-		              <choose>
-		              	<when test="brandGroupNo != null and brandGroupNo != ''">
-		              		AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
-		              	</when>
-		              	<otherwise>
-		              		AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		              	</otherwise>
-		              </choose>
-		              AND    CG.GOODS_CD = G.GOODS_CD
-		              AND    CG.GOODS_CD = GS.GOODS_CD
-		              AND    G.BRAND_CD = B.BRAND_CD
-		              AND    B.BRAND_CD = SB.BRAND_CD
-		              AND    C4.SITE_CD = #{siteCd}
-		              AND    C4.CATE_GB = #{cateGb}
-		              AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		              AND    C4.CATE1_NO = #{cate1No}
-		              <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>
-		              AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		              AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		              AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
-		              AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
-		              AND    SB.SITE_CD = #{siteCd}
-		              AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
-		              AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		     )
-		AND    USE_YN = 'Y'
-		ORDER  BY DISP_ORD
-	</select>
-
-	<!-- 상품 카테고리 필터 컬러 -->
-	<select id="getCategoryFliterColor" parameterType="GoodsSearch" resultType="GoodsSearch" timeout="300">
-		/* TsfDisplay.getCategoryFliterColor */
-		SELECT C.COLOR_GRP_CD               /*컬러그룹코드*/
-		     , CC.CD_DESC     AS COLOR_CHIP /*컬러칩*/
-		FROM   TB_COLOR C
-		     , TB_COMMON_CODE CC
-		WHERE  C.COLOR_GRP_CD = CC.CD
-		AND    CC.CD_GB = 'G072'
-		AND    C.COLOR_CD IN (SELECT O.OPT_CD1
-		                      FROM   TB_CATE_4SRCH C4
-		                           , TB_CATE_GOODS CG
-		                           , TB_GOODS G
-		                           , TB_GOODS_STOCK GS
-		                           , TB_BRAND B
-		                           , TB_SITE_BRAND SB
-		                           , TB_OPTION O
-		                      WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
-		                      <choose>
-		                      	<when test="brandGroupNo != null and brandGroupNo != ''">
-		                      		AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
-		                      	</when>
-		                      	<otherwise>
-		                      		AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		                      	</otherwise>
-		                      </choose>
-		                      AND    CG.GOODS_CD = G.GOODS_CD
-		                      AND    CG.GOODS_CD = GS.GOODS_CD
-		                      AND    G.BRAND_CD = B.BRAND_CD
-		                      AND    B.BRAND_CD = SB.BRAND_CD
-		                      AND    G.GOODS_CD = O.GOODS_CD
-		                      AND    C4.SITE_CD = #{siteCd}
-		                      AND    C4.CATE_GB = #{cateGb}
-		                      AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		                      AND    C4.CATE1_NO = #{cate1No}
-		                      <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>
-		                      AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		                      AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		                      AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
-		                      AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
-		                      AND    SB.SITE_CD = #{siteCd}
-		                      AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
-		                      AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		                      AND    O.SOLDOUT_YN = 'N' /*품절이 아닌 옵션*/
-		                      AND    O.DISP_YN = 'Y' /*노출하는 옵션*/
-		            )
-		AND    CC.USE_YN = 'Y'
-		GROUP BY C.COLOR_GRP_CD , CC.CD_DESC
-		ORDER  BY CC.DISP_ORD
-	</select>
-
-	<!-- 상품 카테고리 필터 혜택 -->
-	<select id="getCategoryFliterBenefit" parameterType="GoodsSearch" resultType="GoodsSearch" timeout="300">
-		/* TsfDisplay.getCategoryFliterBenefit */
-		WITH TAB_BENEFIT AS (
-			            SELECT GB.CPN_YN
-			            	 , GB.FREEGIFT_YN
-			            	 , G.FORMAL_GB
-			            	 , G.MIN_ORD_AMT
-			            	 , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb}) AS CURR_PRICE /*현재판매가*/
-			            	 , DF.REAL_DELV_AMT
-			            FROM	TB_CATE_4SRCH C4
-						JOIN	TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
-		                <choose>
-		                	<when test="brandGroupNo != null and brandGroupNo != ''">
-		                		AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
-		                	</when>
-		                	<otherwise>
-		                		AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		                	</otherwise>
-		                </choose>
-						JOIN	TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
-						JOIN	TB_GOODS_STOCK GS ON CG.GOODS_CD = GS.GOODS_CD
-						LEFT OUTER JOIN	TB_GOODS_BENEFIT GB ON G.GOODS_CD = GB.GOODS_CD
-						JOIN	TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-						JOIN	TB_SITE_BRAND SB ON B.BRAND_CD = SB.BRAND_CD
-						JOIN	TB_DELIVERY_FEE DF ON G.DELV_FEE_CD = DF.DELV_FEE_CD
-			           WHERE	1=1
-		               AND    C4.SITE_CD = #{siteCd}
-		               AND    C4.CATE_GB = #{cateGb}
-		               AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		               AND    C4.CATE1_NO = #{cate1No}
-		               <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>
-		               AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		               AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		               AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
-		               AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
-		               AND    SB.SITE_CD = #{siteCd}
-		               AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
-		               AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		)
-		   SELECT	Z.BENEFIT_CD , Z.BENEFIT_NM
-		    FROM	(
-					SELECT '10'       AS BENEFIT_CD
-						 , '쿠폰할인' AS BENEFIT_NM
-					FROM   TAB_BENEFIT
-					WHERE  CPN_YN = 'Y'
-					UNION ALL
-					SELECT '20'       AS BENEFIT_CD
-						 , '무료배송' AS BENEFIT_NM
-					FROM   TAB_BENEFIT
-					WHERE  REAL_DELV_AMT = 0 -- MIN_ORD_AMT >= CURR_PRICE
-					UNION ALL
-					SELECT '30'       AS BENEFIT_CD
-						 , '사은품' AS BENEFIT_NM
-					FROM   TAB_BENEFIT
-					WHERE  FREEGIFT_YN = 'Y'
-					UNION ALL
-					SELECT '40'   AS BENEFIT_CD
-						 , '신상' AS BENEFIT_NM
-					FROM   TAB_BENEFIT
-					WHERE  FORMAL_GB = 'G009_10'
-				) Z
-		GROUP BY Z.BENEFIT_CD , Z.BENEFIT_NM
+			 , FILTER_NM
+		FROM	TB_CATE_FILTER
+		WHERE	1=1
+		  AND	SITE_CD = #{siteCd}
+		  AND 	CATE_GB = #{cateGb}
+		  AND 	FORMAL_GB = #{formalGb}
+		  AND 	BRAND_GROUP_NO = #{brandGroupNo}
+		  AND 	CATE_NO = #{cateNo}
+		  AND 	FILTER_GB = #{filterGb}
+		ORDER BY DISP_ORD
 	</select>
 </mapper>

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

@@ -254,6 +254,7 @@
 		           , G.SELF_GOODS_YN
 		           , G.MIN_ORD_QTY
 		           , G.MAX_ORD_QTY
+		           , G.GOODS_STAT
 		           , O.OPT_CD1
 		           , SUM(CASE WHEN O.SOLDOUT_YN = 'Y' THEN 0
 		                      WHEN VS.CURR_STOCK_QTY  <![CDATA[<=]]> 0 THEN 0
@@ -539,7 +540,7 @@
 	<select id="getGoodsResSell" parameterType="Goods" resultType="Goods">
 		/* TsfGoods.getGoodsResSell */
 		SELECT GOODS_CD
-		     , DATE_FORMAT(DELV_RES_DT ,'%Y년 %m월 %d일') AS DELV_RES_DT
+		     , DATE_FORMAT(DELV_RES_DT ,'%Y.%m.%d') AS DELV_RES_DT
 		FROM TB_GOODS_RES_SELL
 		WHERE GOODS_CD = #{goodsCd}
 		AND DELV_RES_DT > NOW()

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

@@ -388,7 +388,7 @@
 		               END                                  AS NEW_YN   /*신규여부(등록일기준3일)*/
 		             , TIMESTAMPDIFF(DAY,NOW(),P.DISP_EDDT) AS END_DAYS /*종료임박일수*/
 		        FROM   TB_PLAN P
-		        WHERE  P.PLAN_GB = 'E' /*이벤트*/
+		        WHERE  P.PLAN_GB IN ('E','C') /*이벤트,출석체크*/
 		        AND    P.SITE_CD = #{siteCd}
 		        <if test="frontGb != null and frontGb != ''">
 		        AND    P.FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
@@ -1100,4 +1100,40 @@
 		WHERE 1=1 
 		AND ZIP_NO = #{recipZipcode}
 	</select>
+	
+	<!-- 달력 출력 -->
+	<select id="getAttendMonth" resultType="Plan" parameterType="Plan">
+		SELECT
+		      MIN(CASE WHEN WEEKDAY = '1' THEN DAY END ) AS 'sun'
+		      ,MIN(CASE WHEN WEEKDAY = '2' THEN DAY END )AS 'mon'
+		      ,MIN(CASE WHEN WEEKDAY = '3' THEN DAY END )AS 'tue'
+		      ,MIN(CASE WHEN WEEKDAY = '4' THEN DAY END )AS 'wed'
+		      ,MIN(CASE WHEN WEEKDAY = '5' THEN DAY END )AS 'thu'
+		      ,MIN(CASE WHEN WEEKDAY = '6' THEN DAY END )AS 'fri'
+		      ,MIN(CASE WHEN WEEKDAY = '7' THEN DAY END )AS 'sat'
+		FROM (
+		SELECT 
+				 CASE WHEN DAYOFWEEK(CDATE) = 1 THEN  WEEKOFYEAR(CDATE) +1 ELSE WEEKOFYEAR(CDATE) END AS WEEK
+				,DAYOFWEEK(CDATE) AS WEEKDAY
+				,DAYOFMONTH(CDATE) AS DAY
+		FROM (
+		        SELECT D1+D2 AS CDATE
+		        FROM (
+		               SELECT STR_TO_DATE(#{dispStdt},'%Y-%m-%d')D1
+		             )D1
+		             ,(
+		               SELECT 0 D2 UNION 
+		               SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION
+		               SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION
+		               SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION
+		               SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION
+		               SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION
+		               SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23 UNION
+		               SELECT 24 UNION SELECT 25 UNION SELECT 26 UNION SELECT 27 UNION
+		               SELECT 28 UNION SELECT 29 UNION SELECT 30 UNION SELECT 31
+		             )AS D2) AS TEMP
+		       WHERE TEMP.CDATE <![CDATA[<=]]> LAST_DAY(TEMP.CDATE)
+		)AS TEMP2
+		GROUP BY WEEK
+	</select>
 </mapper>

+ 2 - 4
src/main/resources/config/application.yml

@@ -109,10 +109,8 @@ yes24 :
     unlinkUrl : https://wsyes24.yes24.com/Yes_Mem.asmx/Yes_Partner_Remove
 
 google :
-    # 개발정보
-    sitekey : 6LcY_JUaAAAAAIy1nHPE_lTkpIa51ihEd-waJCeO
-    secretKey : 6LcY_JUaAAAAAFux56mVih0a5NUwP3ARq0HUHR9p
-    # 개발정보
+    sitekey : 6LeZUp4aAAAAAAU-p4cZUfHvGJ_iFUkTUcT1MpKl
+    secretKey : 6LeZUp4aAAAAAD_0Tv4_Jc1lPeOFey604Z812QD-
     recaptchaVerifyUrl : https://www.google.com/recaptcha/api/siteverify
 
 

+ 2 - 1
src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html

@@ -61,6 +61,7 @@
 	<script src="/ux/plugins/jquery.serializeObject.min.js"></script>
 	<script src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>
 	<script type="text/javascript" src="https://ssl.daumcdn.net/dmaps/map_js_init/postcode.v2.js"></script>
+	<script src="/ux/plugins/lazyload.min.js"></script>
 
 	<!-- Global site tag (gtag.js) - Google Analytics -->
 <!-- 	<script async src="https://www.googletagmanager.com/gtag/js?id=UA-168660512-1"></script> -->
@@ -117,4 +118,4 @@
 	</script>
 </head>
 
-</html>
+</html>

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

@@ -20,7 +20,7 @@
 						<i class="gl3"></i>
 					</span>
 				</button>
-				<h1 id="htopTitle">PAGE TITLE</h1>
+				<h1 id="htopTitle">상품상세</h1>
 			</section>
 		</header>
 

Diff do ficheiro suprimidas por serem muito extensas
+ 442 - 1724
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html


+ 151 - 317
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -14,342 +14,176 @@
  * 1.0  2021.04.04   eskim	   최초 작성
  *******************************************************************************
  -->
-	<!-- 상품문의 리스트 내용 -->
+<!-- 상품문의 리스트 내용 -->
 <div class="pd_qnalist">
-    <div class="info_txt">
-        <ul>
-            <li>상품에 대해 궁금한 점이 있으시다면 문의해주세요.</li>
-            <li>배송, 주문/결제, 취소/반품/교환/환불, 회원, 쿠폰/포인트, 이벤트 등의 자세한 문의사항은 고객센터 &gt; 1:1문의를 이용하여 주시기 바랍니다.</li>
-        </ul>              
-        <div class="btn_group_flex">
-            <div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_GOODS_QNA);"><span>고객센터 1:1문의</span></button></div>
-        </div>     
-    </div>
-    <div class="qna_list">
-        <!-- 나열조건결과 있을 때 노출 내용 -->
-        <div class="yesdata">
-            <div class="form_field check_secret">
-                <input id="except_secret" type="checkbox"><label for="except_secret"><span>비밀글제외</span></label>
-            </div>
-            <div class="ui_row">
-                <div class="foldGroup case2">
-                    <!-- list2 -->
-                    <ul>
-                        <li class="my_qna"><!-- 내가 쓴 글에 클래스 my_qna 추가 -->
-                            <div class="fold_head">
-                                <a href="javascript:void(0)">
-                                    <div>
-                                        <div class="fold_tit">
-                                            <div class="lap1">
-                                                <span class="fold_state done">답변완료</span> <!-- 답변완료 : done / 처리중 : doing -->
-                                                <span class="prod"><i class="ico ico_myqna"></i><i class="ico ico_secret"></i></span>
-                                            </div>
-                                            <div class="lap2"><span>상품을 받았는데, 옷의 색상이 화면과 다릅니다. </span></div>
-                                        </div>
-                                        <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                    </div>
-                                </a>
-                            </div>
-                            <div class="fold_cont">
-                                <!-- 내 1대1문의 내용 -->
-                                <div class="fold_detail">
-                                    <div>
-                                        <p>
-                                            PC에서 남성 분또 맨투맨 (T203TS120P)<br>
-                                            오렌지 컬러 선물하려고 하는데 선물을 할 수 없다고 나오네요.<br>
-                                            다른 컬러는 선물이 가능한 것 같은데 오렌지 컬러는 왜 안 되는건가요?<br>
-                                            바쁘시겠지만 확인 부탁드립니다.
-                                        </p>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 내용 -->
-                                <!-- 내 1대1문의 답변 -->
-                                <div class="fold_answer">
-                                    <div>
-                                        <div class="answer_body">
-                                            안녕하세요, 고객님. 스타일24 담당자 배수지 입니다. <br>
-                                            문의주신 해당 상품의 선물하기는 모바일에서만 사용이 가능합니다. <br>
-                                            이외 궁금하신 사항이 있으시면 1:1문의나 고객센터(1544-5336)로 문의 부탁 드립니다. <br>
-                                            고객 만족을 위해 더욱 더 노력하는 스타일24가 되겠습니다. <br>
-                                            좋은 하루 보내세요, 감사합니다.
-                                        </div>
-                                        <div class="answer_foot">
-                                            <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                            <button type="button" class="btn_delete"><span>삭제</span></button>
-                                        </div>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 답변 -->
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fold_head">
-                                <a href="javascript:void(0)">
-                                    <div>
-                                        <div class="fold_tit">
-                                            <div class="lap1">
-                                                <span class="fold_state done">답변완료</span> <!-- 답변완료 : done / 처리중 : doing -->
-                                                <span class="prod"></span>
-                                            </div>
-                                            <div class="lap2"><span>상품을 받았는데, 옷의 색상이 화면과 다릅니다. </span></div>
-                                        </div>
-                                        <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                    </div>
-                                </a>
-                            </div>
-                            <div class="fold_cont">
-                                <!-- 내 1대1문의 내용 -->
-                                <div class="fold_detail">
-                                    <div>
-                                        <p>
-                                            PC에서 남성 분또 맨투맨 (T203TS120P)<br>
-                                            오렌지 컬러 선물하려고 하는데 선물을 할 수 없다고 나오네요.<br>
-                                            다른 컬러는 선물이 가능한 것 같은데 오렌지 컬러는 왜 안 되는건가요?<br>
-                                            바쁘시겠지만 확인 부탁드립니다.
-                                        </p>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 내용 -->
-                                <!-- 내 1대1문의 답변 -->
-                                <div class="fold_answer">
-                                    <div>
-                                        <div class="answer_body">
-                                            안녕하세요, 고객님. 스타일24 담당자 배수지 입니다. <br>
-                                            문의주신 해당 상품의 선물하기는 모바일에서만 사용이 가능합니다. <br>
-                                            이외 궁금하신 사항이 있으시면 1:1문의나 고객센터(1544-5336)로 문의 부탁 드립니다. <br>
-                                            고객 만족을 위해 더욱 더 노력하는 스타일24가 되겠습니다. <br>
-                                            좋은 하루 보내세요, 감사합니다.
-                                        </div>
-                                        <div class="answer_foot">
-                                            <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                            <button type="button" class="btn_delete"><span>삭제</span></button>
-                                        </div>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 답변 -->
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fold_head">
-                                <a href="javascript:void(0)">
-                                    <div>
-                                        <div class="fold_tit">
-                                            <div class="lap1">
-                                                <span class="fold_state doing">처리중</span> <!-- 답변완료 : done / 처리중 : doing -->
-                                                <span class="prod"></span>
-                                            </div>
-                                            <div class="lap2"><span>상품을 받았는데, 옷의 색상이 화면과 다릅니다. </span></div>
-                                        </div>
-                                        <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                    </div>
-                                </a>
-                            </div>
-                            <div class="fold_cont">
-                                <!-- 내 1대1문의 내용 -->
-                                <div class="fold_detail">
-                                    <div>
-                                        <p>
-                                            PC에서 남성 분또 맨투맨 (T203TS120P)<br>
-                                            오렌지 컬러 선물하려고 하는데 선물을 할 수 없다고 나오네요.<br>
-                                            다른 컬러는 선물이 가능한 것 같은데 오렌지 컬러는 왜 안 되는건가요?<br>
-                                            바쁘시겠지만 확인 부탁드립니다.
-                                        </p>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 내용 -->
-                            </div>
-                        </li>		
-                        <li>
-                            <div class="fold_head">
-                                <a href="javascript:void(0)">
-                                    <div>
-                                        <div class="fold_tit">
-                                            <div class="lap1">
-                                                <span class="fold_state doing">처리중</span> <!-- 답변완료 : done / 처리중 : doing -->
-                                                <span class="prod"></span>
-                                            </div>
-                                            <div class="lap2"><span>상품을 받았는데, 옷의 색상이 화면과 다릅니다. </span></div>
-                                        </div>
-                                        <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                    </div>
-                                </a>
-                            </div>
-                            <div class="fold_cont">
-                                <!-- 내 1대1문의 내용 -->
-                                <div class="fold_detail">
-                                    <div>
-                                        <p>
-                                            PC에서 남성 분또 맨투맨 (T203TS120P)<br>
-                                            오렌지 컬러 선물하려고 하는데 선물을 할 수 없다고 나오네요.<br>
-                                            다른 컬러는 선물이 가능한 것 같은데 오렌지 컬러는 왜 안 되는건가요?<br>
-                                            바쁘시겠지만 확인 부탁드립니다.
-                                        </p>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 내용 -->
-                            </div>
-                        </li>	
-                        <li>
-                            <div class="fold_head">
-                                <a href="javascript:void(0)">
-                                    <div>
-                                        <div class="fold_tit">
-                                            <div class="lap1">
-                                                <span class="fold_state doing">처리중</span> <!-- 답변완료 : done / 처리중 : doing -->
-                                                <span class="prod"></span>
-                                            </div>
-                                            <div class="lap2"><span>상품을 받았는데, 옷의 색상이 화면과 다릅니다. </span></div>
-                                        </div>
-                                        <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                    </div>
-                                </a>
-                            </div>
-                            <div class="fold_cont">
-                                <!-- 내 1대1문의 내용 -->
-                                <div class="fold_detail">
-                                    <div>
-                                        <p>
-                                            PC에서 남성 분또 맨투맨 (T203TS120P)<br>
-                                            오렌지 컬러 선물하려고 하는데 선물을 할 수 없다고 나오네요.<br>
-                                            다른 컬러는 선물이 가능한 것 같은데 오렌지 컬러는 왜 안 되는건가요?<br>
-                                            바쁘시겠지만 확인 부탁드립니다.
-                                        </p>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 내용 -->
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fold_head">
-                                <a href="javascript:void(0)">
-                                    <div>
-                                        <div class="fold_tit">
-                                            <div class="lap1">
-                                                <span class="fold_state done">답변완료</span> <!-- 답변완료 : done / 처리중 : doing -->
-                                                <span class="prod"><i class="ico ico_secret"></i></span>
-                                            </div>
-                                            <div class="lap2"><span>비밀글입니다.</span></div>
-                                        </div>
-                                        <span class="id">**nana</span><span class="data">2020.12.02</span>
-                                    </div>
-                                </a>
-                            </div>
-                            <div class="fold_cont">
-                                <!-- 내 1대1문의 내용 -->
-                                <div class="fold_detail">
-                                    <div>
-                                        <p>
-                                            PC에서 남성 분또 맨투맨 (T203TS120P)<br>
-                                            오렌지 컬러 선물하려고 하는데 선물을 할 수 없다고 나오네요.<br>
-                                            다른 컬러는 선물이 가능한 것 같은데 오렌지 컬러는 왜 안 되는건가요?<br>
-                                            바쁘시겠지만 확인 부탁드립니다.
-                                        </p>
-                                    </div>
-                                </div>
-                                <!-- //내 1대1문의 내용 -->
-                            </div>
-                        </li>	
-                    </ul>
-                    <!-- //list2 -->
-                </div>
-            </div>
-        </div>
-        <!-- //나열조건결과 있을 때 노출 내용 -->
-        <!-- 나열조건결과 없을 때 노출 내용 -->
-        <div class="nodata">
-            <div class="txt_box">
-                <p>
-                    등록된 상품문의가 없습니다.
-                </p>
-            </div>
-        </div>
-        <!-- //나열조건결과 없을 때 노출 내용 -->
-    </div>
-    <div class="btn_group_flex">
-        <div><button type="button" class="btn btn_dark" id="btn_pdQnaWrite_pop" th:onclick="cfGoodsQngCreate([[${goodsInfo.goodsCd}]] )"><span>상품 문의하기</span></button></div>
-    </div>
+	<div class="info_txt">
+		<ul>
+			<li>상품에 대해 궁금한 점이 있으시다면 문의해주세요.</li>
+			<li>배송, 주문/결제, 취소/반품/교환/환불, 회원, 쿠폰/포인트, 이벤트 등의 자세한 문의사항은 고객센터 &gt; 1:1문의를 이용하여 주시기 바랍니다.</li>
+		</ul>			  
+		<div class="btn_group_flex">
+			<div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_GOODS_QNA);"><span>고객센터 1:1문의</span></button></div>
+		</div>	 
+	</div>
+	<div class="qna_list">
+		<!-- 나열조건결과 있을 때 노출 내용 -->
+		<div class="yesdata">
+			<div class="form_field check_secret">
+				<input id="except_secret" type="checkbox"><label for="except_secret" onclick="fnGetList();"><span>비밀글제외</span></label>
+				<input  type="hidden" name="secretYn" >
+			</div>
+			<div class="ui_row" id="infiniteContainer">
+				<div class="foldGroup case2" id="listBoxOuter">
+					<!-- list2 -->
+					<ul  id="listBox">
+					</ul>
+					<!-- //list2 -->
+				</div>
+			</div>
+		</div>
+		<!-- //나열조건결과 있을 때 노출 내용 -->
+		<!-- 나열조건결과 없을 때 노출 내용 -->
+		<div class="nodata"  style="display:none;">
+			<div class="txt_box">
+				<p>
+					등록된 상품문의가 없습니다.
+				</p>
+			</div>
+		</div>
+		<!-- //나열조건결과 없을 때 노출 내용 -->
+	</div>
+	<div class="btn_group_flex">
+		<div><button type="button" class="btn btn_dark" id="btn_pdQnaWrite_pop" th:onclick="cfGoodsQngCreate([[${goodsInfo.goodsCd}]] )"><span>상품 문의하기</span></button></div>
+	</div>
 </div>
+<form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
+<input type="hidden" name="pageNo"  value ="1"/>
+<input type="hidden" name="pageSize" value ="20"/>
+<input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
+</form>
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	var fnGetList = function() {
-
+	// 상품 검색
+	var fnGetInfiniteScrollDataList = function(pageNum) {
+	
 		$('#goodsQnaForm  input[name="secretYn"]').val('');
 		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){
 			$('#goodsQnaForm  input[name="secretYn"]').val('N');
 		}
-		// Initialize a pagination
-		gagaPaging.init('goodsQnaForm', fnGetListCallback, 'pageNav', 20);
-
-		// Load data
-		gagaPaging.load(1);
+		
+		$("#goodsQnaForm input[name=pageNo]").val(pageNum+1);
+		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+		gagajf.ajaxFormSubmit("/goods/qna/list", document.goodsQnaForm,  gagaInfiniteScroll.jsonToHtml);
 	}
 	
-	var fnGetListCallback = function(result) {
-		$('#ulGoodsQna').html('');
-		$('#goodsQnaForm').find('.nodata').hide();
-		// 목록
+	var fnDrawInfiniteScrollData = function(result, pageNum){
+
 		if (result.dataList != null && result.dataList.length > 0) {
+			var htm = fnCreateGoodsQnaList(result);
+			gagaInfiniteScroll.draw(htm);
+		}else {
+			if($("#goodsQnaForm input[name=pageNo]").val()==1){
+				$('#goodsQnaForm').find('.nodata').show();
+			}
+			gagaInfiniteScroll.draw('not');
+		}
+	}
+
+	var fnGoodsQnaListSearch = function() {
+		gagaInfiniteScroll.getHistory();
+	}
+
+	var fnCreateGoodsQnaList = function(result) {
+
+		let tag = '';
+		$.each(result.dataList, function(idx, item) {
 			
-			$.each(result.dataList, function(idx, item) {
-				let tag = '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
-				if (item.selfGb == 1){
-					tag += ' my_qna';	
-				}else if (item.secretYn == "Y"){
-					tag += ' secret_qna';
-				}
-				tag += ' ">\n';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
-				tag += '	<div class="fold_head">\n';
-				tag += '		<a href="javascript:void(0)">\n';
-				tag += '			<div>\n';
-				tag += '				<span class="fold_state ' + (item.ansStat == "G060_10" ? "doing" : "done") + '">' + item.ansStatNm + '</span>\n'; //답변완료 : done / 처리중 : doing
-				tag += '				<div class="fold_tit">\n';
-				tag += '					<span>' + item.questContent + '</span>\n';
-				if (item.selfGb == 1){
-				tag += '					<i class="ico ico_myqna"></i>\n';	//내가 쓴 글에 추가되는 아이콘
-				}
-				if (item.secretYn == "Y"){
-				tag += '					<i class="ico ico_secret"></i>\n';	//비밀글에 추가되는 아이콘
-				}
-				tag += '				</div>\n';
-				tag += '				<div class="data">\n';
-				tag += '					<span class="wr_id">'+ item.maskingCustId+'</span>\n';
-				tag += '					<span class="wr_data">' + item.questDt + '</span>\n';
-				tag += '				</div>\n';
-				tag += '			</div>\n';
-				tag += '		</a>\n';
-				tag += '	</div>\n';
-				tag += '	<div class="fold_cont" style="display: none;">\n';
-				tag += '		<div class="fold_detail">\n'; //문의 내용
-				tag += '			<div>\n';
-				tag += '				<p>' + item.questContent + '</p>\n';
+			tag += '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
+			if (item.selfGb == 1){
+				tag += ' my_qna';	
+			}else if (item.secretYn == "Y"){
+				tag += ' secret_qna';
+			}
+			tag += ' ">\n';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
+			tag += '	<div class="fold_head">\n';
+			tag += '		<a href="javascript:void(0)">\n';
+			tag += '			<div>\n';
+			tag += '				<div class="fold_tit">\n';
+			tag += '					<div class="lap1">\n';
+			tag += '						<span class="fold_state ' + (item.ansStat == "G060_10" ? "doing" : "done") + '">' + item.ansStatNm + '</span>\n'; //답변완료 : done / 처리중 : doing
+			tag += '						<span class="prod">\n';
+			if (item.selfGb == 1){
+			tag += '						<i class="ico ico_myqna"></i>';	//내가 쓴 글에 추가되는 아이콘
+			}
+			if (item.secretYn == "Y"){
+			tag += '						<i class="ico ico_secret"></i>';	//비밀글에 추가되는 아이콘
+			}
+			tag += '						</span>\n';
+			tag += '					</div>\n';
+			tag += '					<div class="lap2"><span>' + item.questContent + '</span></div>\n';
+			tag += '					<span class="id">'+ item.maskingCustId+'</span><span class="data">' + item.questDt + '</span>\n';
+			tag += '				</div>\n';
+			tag += '			</div>\n';
+			tag += '		</a>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="fold_cont">\n';
+			tag += '		<div class="fold_detail">\n'; //문의 내용
+			tag += '			<div>\n';
+			tag += '				<p>' + item.questContent.replaceAll("\n", "</br>") + '</p>\n';
+			tag += '			</div>\n';
+			tag += '		</div>\n';
+			
+			if (item.ansStat == 'G060_20') { // 답변완료 상태일 때
+				tag += '	<div class="fold_answer">\n'; //문의 답변
+				tag += '		<div>\n';
+				tag += '			<div class="answer_body">' + item.ansContent.replaceAll("\n", "</br>") + '</div>\n';
+				tag += '			<div class="answer_foot"><span class="data">' + item.ansDt + '</span>\n';
 				tag += '			</div>\n';
 				tag += '		</div>\n';
-				
-				if (item.ansStat == 'G060_20') { // 답변완료 상태일 때
-					tag += '	<div class="fold_answer">\n'; //문의 답변
-					tag += '		<div class="answer_head">답변이 등록되었습니다.</div>\n';
-					tag += '		<div class="answer_body">' + item.ansContent + '</div>\n';
-					tag += '		<span class="data">' + item.ansDt + '</span>\n';
-					tag += '	</div>\n';
-				}
-				
 				tag += '	</div>\n';
-				tag += '</li>\n';
-				
-				$('#ulGoodsQna').append(tag);
-			});
-		} else {
-			$('#goodsQnaForm').find('.nodata').show();
-			$('#goodsQnaForm').find('.ui_foot').hide();
-		}
+			}
+			tag += '	</div>\n';
+			tag += '</li>\n';
+			
+		});
+		
+		
+		return tag;
+	}
+	
 
-		// Create pagination
-		gagaPaging.createPagination(result.paging.pageable);
+	// 인피니트 스크롤 초기화
+	var fnGoodsQnaInfiniteScrollInit = function(){
+		 sessionStorage.removeItem(document.location.href);
+		//History 초기화
+		$("#listBox").html("");
 	}
 	
-	$(document).ready(function() {
-	//	fnGetList();
+	// 왜 안될가?
+	// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
+	$(window).on("pageshow", function(event) {
+		if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
+			var historyData = sessionStorage.getItem(document.location.href);
+			if(historyData!=null){
+				historyData = JSON.parse(historyData);
+			}else{
+				historyData = {};
+			}
+			fnGoodsQnaListSearch();
+		}else{
+			fnGoodsQnaInfiniteScrollInit();
+			fnGoodsQnaListSearch();
+		}
+
+	});
+	
+	
+	$(document).ready( function() {
+		fnGoodsQnaListSearch();
+		
 	});
 	
 /*]]>*/

+ 574 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormWeb.html

@@ -0,0 +1,574 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsIncludeFormWeb.html
+ * @desc    : 상품상세 Include Page - 공용
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.02   eskim	   최초 작성
+ *******************************************************************************
+ -->
+<!-- 상품상세 SNS  -->
+<th:block  th:fragment="goodsSnsForm" >
+<!-- toggle contents -->
+<div class="shareWrap" th:with="stylelUrl=${@environment.getProperty('domain.front')}, imgGoodsUrl=${@environment.getProperty('upload.goods.view')}">
+	<div id="layerShare" class="setShare open">
+		<span>
+			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm}');|"><span>카카오톡</span></button>
+			<button type="button" class="fb" th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '', '');|"><span>페이스북</span></button>
+			<button type="button" class="tw" th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm+ '#style24몰'}', '', '');|"><span>트위터</span></button>
+			<button type="button" class="url btn_copy"><span>URL</span></button>
+		</span>
+	</div>
+</div>
+
+</th:block>
+
+<!-- 딜 상품 상품소개영역 -->
+<th:block  th:fragment="goodsDealComposeForm">
+<!-- ***** 상품소개영역 ***** -->
+<div class="content pd_desc_wrap" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+	<div class="cont_body">
+		<div class="item_descrp">
+			<div class="area_list">
+				<!-- 상품소개 탭 -->
+				<div class="tab_detail_nav">
+					<ul>
+						<li class="active"><a href="javascript:void(0)">상세정보</a></li>
+						<li><a href="javascript:void(0)">리뷰<em>(<th:block  th:text="${(goodsReviewCnt <= 9999) ? #numbers.formatInteger(goodsReviewCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</em></a></li>
+						<li><a href="javascript:void(0)">문의<em>(<th:block  th:text="${(goodsQnaCnt <= 9999) ? #numbers.formatInteger(goodsQnaCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</em></a></li>
+						<li><a href="javascript:void(0)">배송/교환/반품</em></a></li>
+					</ul>
+				</div>
+				<!-- //상품소개 탭 -->
+				<!-- 상품상세정보 -->
+				<div class="tab_detail_cont pd_dealitem" style="display:block;" >
+					<div class="itemsGrp" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+						<!--  반복 -->
+						<div class="item_prod" th:each="goodsInfo, status : ${goodsDealComposeList}">
+							<div class="item_state">
+								<a href="javascript:void(0);" class="itemLink" th:onclick="fnOpenGoodsDealDetail([[${goodsInfo.goodsCd}]],[[${goodsInfo.compsGoodsCd}]])">
+									<div class="shape ranker">
+										<span>상품<em class="number" th:text="${#numbers.formatInteger(status.count,2)}">01</em></span>
+									</div>
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									</div>
+									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+									<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+										<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+										<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+									</p>
+								</a>
+							</div>
+						</div>
+					</div>
+				</div>
+				<!-- //상품상세정보 -->
+				<!-- 상품리뷰 리스트 -->
+				<div class="tab_detail_cont pd_review">
+					<div class="cont_head">
+						<h3 class="sr-only">상품리뷰 목록</h3>
+						<!-- 아이템선택 -->
+						<div class="form_field">
+							<div class="select_custom deal_opt_item forReview">
+								<div class="combo">
+									<div class="select">
+										<div class="item_prod">
+											<div class="item_state">
+												<a href="javascript:void(0)" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													</div>
+													<div class="itemName">선택</div>
+												</a>
+											</div>
+										</div>
+									</div>
+									<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+										<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+											th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+											th:onclick="fnSelGoodsDealReview([[${goodsInfo.compsGoodsCd}]])" >
+											<div class="item_prod">
+												<div class="item_state">
+													<a href="#none" class="itemLink">
+														<div class="itemPic">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														</div>
+														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+														</p>
+													</a>
+													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}"  th:attr="currPrice=${goodsInfo.currPrice}, selfGoodsYn=${goodsInfo.selfGoodsYn}"/>
+												</div>
+											</div>
+										</li> 
+									</ul>
+								</div>
+							</div>
+						</div>
+						<!-- //아이템선택 -->
+					</div>
+					<div class="cont_body" id="goodsDealReview">
+					</div>
+				</div>
+				<!-- //상품리뷰 리스트 -->
+				<!-- 상품문의 리스트 -->
+				<div class="tab_detail_cont pd_qnalist">
+					<div class="cont_head">
+						<h3 class="sr-only">상품문의 목록</h3>
+						<!-- 아이템선택 -->
+						<div class="form_field">
+							<div class="select_custom deal_opt_item forQna">
+								<div class="combo">
+									<div class="select">
+										<div class="item_prod">
+											<div class="item_state">
+												<a href="javascript:void(0)" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													</div>
+													<div class="itemName">선택</div>
+												</a>
+											</div>
+										</div>
+									</div>
+									<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+										<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+											th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+											th:onclick="fnSelGoodsDealQna([[${goodsInfo.compsGoodsCd}]])" >
+											<div class="item_prod">
+												<div class="item_state">
+													<a href="#none" class="itemLink">
+														<div class="itemPic">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														</div>
+														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+														</p>
+													</a>
+													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+												</div>
+											</div>
+										</li> 
+									</ul>
+								</div>
+							</div>
+						</div>
+						<!-- //아이템선택 -->
+					</div>
+					<div class="cont_body" id="goodsDealQna">
+					</div>
+				</div>
+				<!-- //상품문의 리스트 -->
+				<!-- 배송/교환/반품 정보 -->
+				<div class="tab_detail_cont pd_delivery">
+					<div class="cont_head">
+						<h3 class="sr-only">배송/교환/반품 정보</h3>
+						<!-- 아이템선택 -->
+						<div class="form_field">
+							<div class="select_custom deal_opt_item forExinfo">
+								<div class="combo">
+									<div class="select">
+										<div class="item_prod">
+											<div class="item_state">
+												<a href="javascript:void(0)" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													</div>
+													<div class="itemName">선택</div>
+												</a>
+											</div>
+										</div>
+									</div>
+									<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+										<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+											th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+											th:onclick="fnSelGoodsDealDelivery([[${goodsInfo.compsGoodsCd}]])" >
+											<div class="item_prod">
+												<div class="item_state">
+													<a href="#none" class="itemLink">
+														<div class="itemPic">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+														</div>
+														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+														</p>
+													</a>
+													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+												</div>
+											</div>
+										</li> 
+									</ul>
+								</div>
+							</div>
+						</div>
+						<!-- //아이템선택 -->
+					</div>
+					<div class="cont_body" id="goodsDealDelivery">
+					</div>
+				</div>
+				<!-- //배송/교환/반품 정보 -->
+			</div>
+			<div class="area_option">
+				<div class="opt_wrap">
+					<div class="option_box">
+						<div class="opt_select">
+								<div class="form_field">
+									<div class="select_custom deal_opt_item">
+										<div class="combo">
+											<div class="select">
+												<div class="item_prod">
+													<div class="item_state">
+														<a href="javascript:void(0)" class="itemLink">
+															<div class="itemPic">
+																<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+															</div>
+															<div class="itemName">선택</div>
+														</a>
+													</div>
+												</div>
+											</div>
+											<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+												<th:block th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
+												<li  th:onclick="fnOption1('Down', [[${goodsInfo.compsGoodsCd}]], [[${goodsInfo.currPrice}]] , [[${goodsInfo.selfGoodsYn}]]);"
+														th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90')? 'true':''}, data-soldout=${(goodsInfo.goodsStat != 'G008_90')? 'true':''}">
+													<div class="item_prod">
+														<div class="item_state">
+															<a href="javascript:void(0);" class="itemLink">
+																<div class="itemPic">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																</div>
+																<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
+																<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></div>
+																<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+																	<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+																	<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+																</p>
+															</a>
+															<input type="hidden" name="selectGoods" th:attr="goodsNm=${'[상품'+status.count+']' +goodsInfo.goodsFullNm}, currPrice=${goodsInfo.currPrice}, goodsCd=${goodsInfo.compsGoodsCd}" />
+														</div>
+													</div>
+												</li>
+												</th:block> 
+											</ul>
+										</div>
+									</div>
+								</div>
+								<div class="form_field">
+									<div class="select_custom deal_opt1" disabled>
+										<div class="combo">
+											<div class="select">선택</div>
+											<ul class="list" id="goodsDealOptDown1">
+												<!--  옵션 1 -->
+											</ul>
+										</div>
+									</div>
+								</div>
+								<div class="form_field">
+									<div class="select_custom deal_opt2" disabled>
+										<div class="combo">
+											<div class="select">선택</div>
+											<ul class="list" id="goodsDealOptDown2">
+												<!--  옵션 2 -->
+											</ul>
+										</div>
+									</div>
+								</div>
+						</div>
+						<div class="opt_result">
+						</div>
+					</div>
+					<div class="price_box">
+						<p class="number">
+							총&nbsp;<span>0</span>개
+						</p>
+						<p class="price">
+							<span>
+								0<em>원</em>
+							</span>
+						</p>
+					</div>
+					<div class="btn_box">
+						<div class="btn_group_block ui_row">
+						<th:block  th:if="${goodsInfo.stockQty > 0}">
+							<div class="ui_col_6">
+								<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
+							</div>
+							<div class="ui_col_6">
+								<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
+							</div>
+						</th:block>
+						<th:block  th:unless="${goodsInfo.stockQty > 0}">
+							<div class="ui_col_12">
+								<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
+							</div>
+						</th:block>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- **************** 개별상품 상세정보 팝업 **************** -->
+	<div class="pd_pop full_pop pd_descrp_pop" id="layer_goods_deal_detail">
+		<div class="full_popup_wrap" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+			<h5 class="sr-only">개별상품 상세정보 안내</h5>
+			<div class="btn_close">
+				<a href="javascript:void(0)" onclick="fnCloseGoodsDealDetail();">닫기버튼</a>
+			</div>
+			<div class="full_pop_header">
+				<!-- 아이템선택 -->
+				<div class="form_field">
+					<div class="select_custom deal_opt_item">
+						<div class="combo">
+							<div class="select">
+								<div class="item_prod">
+										<div class="item_state">
+											<a href="javascript:void(0)" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												</div>
+												<div class="itemName">선택</div>
+											</a>
+										</div>
+									</div>
+							</div>
+							<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+								<li class="selected" th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
+									<div class="item_prod"  th:classappend="${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'soldout':'' }">
+										<div class="item_state">
+											<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]], [[${goodsInfo.currPrice}]], [[${goodsInfo.selfGoodsYn}]], [[${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'Y':'N' }]])">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												</div>
+												<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
+												<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+												<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+													<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+													<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+												</p>
+											</a>
+											<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" th:attr="goodsNm=${'[상품'+status.count+']' +goodsInfo.goodsFullNm}, currPrice=${goodsInfo.currPrice}, goodsCd=${goodsInfo.compsGoodsCd}, selfGoodsYn=${goodsInfo.selfGoodsYn}"  />
+										</div>
+									</div>
+								</li> 
+							</ul>
+						</div>
+					</div>
+				</div>
+				<!-- //아이템선택 -->
+			</div>
+			<div class="full_pop_container" id="goodsDealDetail">
+				<!-- 개별상품 상세정보 팝업 내용 -->
+			</div>
+			<div class="full_pop_fix_r">
+				<div class="option_box">
+					<div class="opt_select">
+						<div class="form_field">
+							<div class="select_custom deal_opt1" disabled>
+								<div class="combo">
+									<div class="select">선택</div>
+									<ul class="list"  id="goodsDealOptLayer1">
+										<!--  옵션 1 -->
+									</ul>
+								</div>
+							</div>
+						</div>
+						<div class="form_field">
+							<div class="select_custom deal_opt2" disabled>
+								<div class="combo">
+									<div class="select">선택</div>
+									<ul class="list"  id="goodsDealOptLayer2">
+										<!--  옵션 2 -->
+									</ul>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="opt_result">
+					</div>
+				</div>
+				<div class="price_box">
+					<p class="number">
+						총&nbsp;<span>0</span>개
+					</p>
+					<p class="price">
+						<span>
+							0<em>원</em>
+						</span>
+					</p>
+				</div>
+				<div class="btn_box">
+					<div class="btn_group_block ui_row">
+					<th:block  th:if="${goodsInfo.stockQty > 0}">
+						<div class="ui_col_6">
+							<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
+						</div>
+						<div class="ui_col_6">
+							<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
+						</div>
+					</th:block>
+					<th:block  th:unless="${goodsInfo.stockQty > 0}">
+						<div class="ui_col_12">
+							<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
+						</div>
+					</th:block>
+					</div>
+				</div>
+			</div>
+		</div>
+				
+	</div>
+	<!-- **************** 개별상품 상세정보 팝업 **************** -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	// 구성 상품 상세 상품평
+	var fnGoodsDetailReview = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/review/frame", "html", "goodsDealReview", params);
+	}
+	
+	// 상품평 상품선택시
+	var fnSelGoodsDealReview = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailReview(params);  // ajax html
+	}
+	
+	// 구성 상품 상세 문의
+	var fnGoodsDetailQna = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/qna/frame", "html", "goodsDealQna", params);
+	}
+	
+	// 문의 상품선택시
+	var fnSelGoodsDealQna = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailQna(params);  // ajax html
+	}
+	
+	// 구성 상품 상세 배송정보
+	var fnGoodsDetailDelivery = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/delivery/frame", "html", "goodsDealDelivery", params);
+	}
+	
+	// 배송정보 상품선택시
+	var fnSelGoodsDealDelivery = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailDelivery(params);  // ajax html
+	}
+	
+	// 상품선택시 상품상세내용 변경
+	var fnOpenGoodsDealDetail = function(goodsCd, compsGoodsCd){
+		
+		// 콤보박스 선택 처리
+		let $selObj = $('#layer_goods_deal_detail').find('.select_custom.deal_opt_item');
+		
+		// 탭별 선택시 기본 상품 설정
+		let selIdx = 0;
+		let selfGoodsYn = '';
+		let currPrice = 0;
+		let soldoutYn = "N";
+		$selObj.find('.combo .list li').each(function() { 
+			if ($(this).find('input[name=selectGoods]').val() == compsGoodsCd){
+				selfGoodsYn = $(this).find('input[name=selectGoods]').attr('selfGoodsYn');
+				currPrice = $(this).find('input[name=selectGoods]').attr('currPrice');
+				if ($(this).find('.item_prod').hasClass('soldout')) soldoutYn = "Y";
+				return false;
+			}
+			selIdx ++;
+		});
+		
+		$selObj.find('.combo .list li').eq(selIdx).trigger("click");
+		
+		// 상세노출
+		fnGoodsDealDesc(compsGoodsCd, currPrice, selfGoodsYn, soldoutYn);
+/* 		
+		if (!soldout){
+			// 옵션1 처리
+			fnOption1("layer", compsGoodsCd, currPrice, selfGoodsYn);	
+		}
+ */		
+		
+		let $obj = $('.pd_detail .opt_result'); 
+		let $taget = $('.full_pop_fix_r .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
+		
+		$('body').addClass('lock');
+		$("#layer_goods_deal_detail").show(); 
+		
+	}
+	
+	// 상세 레이어 창닫기
+	var fnCloseGoodsDealDetail = function(){
+		// 선택값 본창에 넘기기
+		let $obj = $('.full_pop_fix_r .opt_result');
+		let $taget = $('.pd_detail .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
+		
+		$('body').removeClass('lock');
+		$('#goodsDealDetail').html('');
+		$("#layer_goods_deal_detail").hide();
+	}
+	
+	// 구성 상품 상세 
+	var fnGoodsDealDetail2 = function(params) {
+		gagajf.ajaxSubmit("/goods/deal/detail/info/frame", "html", "goodsDealDetail", params);
+	}
+	
+	// 레이어에서 상품선택시
+	var fnGoodsDealDesc = function(goodsCd, currPrice, selfGoodsYn , soldout){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		params.adminYn = "Y";
+		fnGoodsDealDetail2(params);  // ajax html
+		if (soldout == "N"){
+			// 옵션1 처리
+			fnOption1("layer", goodsCd, currPrice, selfGoodsYn);
+		}
+		
+	}
+	
+	$(document).ready( function() {
+
+		/* var params = new Object();
+		params.goodsCd = [[${params.compsGoodsCd}]];
+		params.adminYn = [[${params.adminYn}]];
+		fnGoodsDealDetail(params);  // ajax html
+		
+		let $obj = $('.pd_detail .opt_result'); 
+		let $taget = $('.full_pop_fix_r .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice(); */
+		
+	});
+	
+	
+/*]]>*/
+</script>
+</th:block>
+</html>

+ 80 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html

@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsOtherFormMob.html
+ * @desc    : 상품 안내
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.05   eskim        최초 작성
+ *******************************************************************************
+ -->
+<th:block th:if="${goodsList != null and !goodsList.empty}" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+	<h3 class="tit">
+	<th:block th:if="${params.goodsOtherGb =='tmtb'}" th:text="${'함께하면 할인되는 다다익선 상품'}"></th:block>
+	<th:block th:if="${params.goodsOtherGb =='together'}" th:text="${'이 상품과 함께 본 상품'}"></th:block>
+	<th:block th:if="${params.goodsOtherGb =='recommend'}" th:text="${params.brandGroupNm +' 추천상품'}"></th:block>
+	<th:block th:if="${params.goodsOtherGb =='like'}" th:text="${'이 상품과 비슷한 상품'}"></th:block>
+	</h3>
+	<div class="area_slider">
+		<div class="swiper-container swiper-container-initialized swiper-container-horizontal">
+			<div class="swiper-wrapper">
+				<div class="swiper-slide" th:each="goodsInfo, status : ${goodsList}">
+					<div class="item_prod">
+						<div class="item_state">
+							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
+							<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'[[${params.contentsLoc}]]','','pc_detail');" class="itemLink" >
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+								</div>
+								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+								<p class="itemPrice">
+									<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
+									<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
+									<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+								</p>
+							</a>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+
+	//슬라이드 - 함께하면 할인되는 다다익선 상품
+	var togetherItemSwiper = new Swiper('.pd .pd_together .area_slider .swiper-container', {
+		slidesPerView: 3,
+		spaceBetween: 8,
+	});  
+
+	//슬라이드 - 이 상품과 함께 본 상품 
+	var otherItemSwiper = new Swiper('.pd .pd_clickother .area_slider .swiper-container', {
+		slidesPerView: 2,
+		spaceBetween: 8,
+	});	
+	//슬라이드 - 동일브랜드 상품 추천
+	var rcmdItemSwiper = new Swiper('.pd .pd_samebrand .area_slider .swiper-container', {
+		slidesPerView: 3,
+		spaceBetween: 8,
+	}); 
+
+	//슬라이드 - 이 상품과 비슷한 상품 
+	var relateItemSwiper = new Swiper('.pd .pd_relate .area_slider .swiper-container', {
+		slidesPerView: 3,
+		spaceBetween: 8,
+	});	 
+	
+/*]]>*/
+</script>	
+
+</th:block>
+</html>

+ 18 - 15
src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaDetailFormMob.html

@@ -15,6 +15,8 @@
  *******************************************************************************
  -->
 <div class="modal-dialog" role="document">
+<form id="goodsQnaDetailForm" name="goodsQnaDetailForm" action="#" th:action="@{'/callcenter/goods/qna/create'}">
+		<input type="hidden" name="relGoodsCd" th:value ="${goodsCd}"/>
 	<div class="modal-content">
 		<div class="modal-header">
 			<h5 class="modal-title" id="exampleFullLabel">상품 문의하기</h5>
@@ -31,13 +33,13 @@
 				<div class="form_field">
 					<div class="input_box">
 						<div class="lap">
-							<textarea class="doc_itemqna" name="" id="" cols="30" rows="10" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
+							<textarea class="doc_itemqna"  name="questContent" cols="30" rows="10" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
 							<p class="txt_cnt">
-								<span id="itemqna_cnt" class="itemqna_cnt"><em class="c_primary">0</em>/500자</span>
+								<span id="itemqna_cnt" class="itemqna_cnt" ><em class="c_primary">0</em>/500자</span>
 							</p>   
 						</div>           
 						<div class="secret_box">
-							<input id="wr_secret" type="checkbox"><label for="wr_secret"><span>비밀글설정</span></label>
+							<input id="wr_secret" type="checkbox" name="secretYn" value="Y"><label for="wr_secret"><span>비밀글설정</span></label>
 						</div>
 					</div> 
 				</div>
@@ -47,11 +49,11 @@
 						<dd>
 							<div class="form_field">
 								<div>
-									<input type="radio" name="rdi-push" id="rdi-push1" value="" checked="">
+									<input type="radio" name="smsReqYn" id="rdi-push1" value="Y"  checked="checked">
 									<label for="rdi-push1"><span>수신</span></label>
 								</div>
 								<div>
-									<input type="radio" name="rdi-push" id="rdi-push2" value="">
+									<input type="radio" name="smsReqYn" id="rdi-push2" value="N">
 									<label for="rdi-push2"><span>미수신</span></label>
 								</div>
 							</div>
@@ -62,10 +64,11 @@
 		</div>	
 		<div class="modal-footer">
 			<div class="btn_group_flex">
-				<div><button type="button" class="btn btn_dark"><span>등록</span></button></div>
+				<div><button type="button" class="btn btn_dark"  onclick="fnGoodsQnaSave();"><span>등록</span></button></div>
 			</div>
 		</div>
 	</div>
+</form>	
 </div>
 <a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_goods_qna_reg')" class="close-modal">Close</a> 	
 <script th:inline="javascript">
@@ -74,24 +77,24 @@
 	// 상품문의 작성 > 글자수 체크
 	$('.pd_qnawrite_pop .doc_itemqna').keyup(function (e){
 		let contentQna = $(this).val();
-		$('#itemqna_cnt').html("(<em class='c_primary'>"+contentQna.length+"</em>/500자)");  
+		$('.itemqna_cnt').html("(<em class='c_primary'>"+contentQna.length+"</em>/500자)");
+		
 		if (contentQna.length > 500){
 			alert("최대 500자까지 입력 가능합니다.");
 			$(this).val(contentQna.substring(0, 500));
-			$('#itemqna_cnt').html("(<em class='c_primary'>500</em>/500자)");
+			$('.itemqna_cnt').html("(<em class='c_primary'>500</em>/500자)");
 		}
 	});
 	
 	// 저장
-	$('#btnGoodsQnaSave').on('click', function() {
-		
-		// 테스트용
-/* 		gagajf.ajaxFormSubmit($('#goodsQnaDetailForm').prop('action')
+	var fnGoodsQnaSave = function() {
+		/*// 테스트용
+		 		gagajf.ajaxFormSubmit($('#goodsQnaDetailForm').prop('action')
 				, $('#goodsQnaDetailForm')
 				, function() {
 					mcxDialog.alert("상품 문의가 등록되었습니다. 빠른 시일 내에 답변드리겠습니다.");
 				}
-		); */
+		);*/ 
 		
 		// 입력 값 체크
 		if (gagajf.isNull($("#goodsQnaDetailForm  textarea[name=questContent]").val())){
@@ -111,8 +114,8 @@
 				);
 			}
 		});
-	
-	});
+		
+	}
 
 /*]]>*/
 </script>

+ 6 - 6
src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html

@@ -19,14 +19,14 @@
 		<div class="modal-header">
 			<!-- 해당상품 -->
 			<div class="item_blk">
-				<div class="item_prod">
+				<div class="item_prod" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
 					<div class="item_state">
-						<a href="#none" class="itemLink">
+						<a href="javascript:void(0);" class="itemLink">
 							<div class="itemPic">
-								<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</div>
-							<p class="itemBrand">NBA</p>
-							<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+							<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA</p>
+							<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성</div>
 						</a>
 					</div>
 				</div>
@@ -34,7 +34,6 @@
 			<!-- //해당상품 -->
 		</div>
 		<div class="modal-body" id="goodsDealQna">
-			
 		</div>
 		<div class="modal-footer">
 			
@@ -44,6 +43,7 @@
 <a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_goods_qna')" class="close-modal">Close</a>
 <script th:inline="javascript">
 /*<![CDATA[*/
+	
 	// 구성 상품 상세 문의
 	var fnGoodsDetailQna = function(params) {
 		gagajf.ajaxSubmit("/goods/detail/qna/frame", "html", "goodsDealQna", params);

Diff do ficheiro suprimidas por serem muito extensas
+ 76 - 876
src/main/webapp/WEB-INF/views/mob/goods/GoodsSizeInfoFormMob.html


+ 50 - 124
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -69,13 +69,13 @@
 								<li data-id="tap08" th:if="${filterColorList!=null and !filterColorList.empty}">
 									<a href="javascript:void(0)">컬러</a>
 								</li>
-								<li data-id="tap09">
+								<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="price" type="checkbox"><label for="price"> <span>남여 공용만 보기</span> </label>
+									<input id="price" type="checkbox" ><label for="price"> <span>남여 공용만 보기</span> </label>
 								</div>
 								<div>
 									<input id="chk-2" type="checkbox" checked=""><label for="chk-2"> <span>신상품만 보기</span> </label>
@@ -89,7 +89,7 @@
 									<th:block th:each="filterBrandData, filterBrandStat : ${filterBrandList}">
 									<li>
 										<label class="brand_btn" onclick="filterSel();">
-											<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="filterBrandCds" th:value="${filterBrandData.brandGroupNo}"><span th:text="${filterBrandData.brandGroupNm}"></span>
+											<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="filterBrandCds" th:value="${filterBrandData.filterCd}"><span th:text="${filterBrandData.filterNm}"></span>
 										</label>
 									</li>
 									</th:block>
@@ -102,25 +102,25 @@
 								<ul>
 									<li>
 										<strong>상의</strong>
-										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.sizeGb == 'T'}">
+										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'T'}">
 											<label class="size_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.optCd2}"><span th:text="${filterSizeData.optCd2}">80</span>
+												<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.filterNm}"><span th:text="${filterSizeData.filterNm}">80</span>
 											</label>
 										</th:block>
 									</li>
 									<li>
 										<strong>하의</strong>
-										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.sizeGb == 'B'}">
+										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'B'}">
 											<label class="size_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.optCd2}"><span th:text="${filterSizeData.optCd2}">80</span>
+												<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.filterNm}"><span th:text="${filterSizeData.filterNm}">80</span>
 											</label>
 										</th:block>
 									</li>
 									<li>
 										<strong>신발</strong>
-										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.sizeGb == 'S'}">
+										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'S'}">
 											<label class="size_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.optCd2}"><span th:text="${filterSizeData.optCd2}">80</span>
+												<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.filterNm}"><span th:text="${filterSizeData.filterNm}">80</span>
 											</label>
 										</th:block>
 									</li>
@@ -162,7 +162,7 @@
 									<th:block th:each="filterAgeData, filterAgeStat : ${filterAgeList}">
 										<li>
 											<label class="Age_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterAge'+filterAgeStat.count}" name="filterAgeCds" th:value="${filterAgeData.agesCd}"><span th:text="${filterAgeData.agesNm}">베이비(0~18개월)</span>
+												<input type="checkbox" group="filterValue" th:id="${'chkFilterAge'+filterAgeStat.count}" name="filterAgeCds" th:value="${filterAgeData.filterCd}"><span th:text="${filterAgeData.filterNm}">베이비(0~18개월)</span>
 											</label>
 										</li>
 									</th:block>
@@ -176,7 +176,7 @@
 									<th:block th:each="filterSeasonData, filterSeasonStat : ${filterSeasonList}">
 										<li>
 											<label class="Season_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason'+filterAgeStat.count}" name="filterSeasonCds" th:value="${filterSeasonData.seasonCd}"><span th:text="${filterSeasonData.seasonNm}">봄</span>
+												<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason'+filterSeasonStat.count}" name="filterSeasonCds" th:value="${filterSeasonData.filterCd}"><span th:text="${filterSeasonData.filterNm}">봄</span>
 											</label>
 										</li>
 									</th:block>
@@ -190,9 +190,9 @@
 									<th:block th:each="filterColorData, filterColorStat : ${filterColorList}">
 										<li>
 											<label class="color-check" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterColor'+filterColorStat.count}" name="filterColorCds" th:value="${filterColorData.colorChip}" >
-												<span class="pdColor-color" th:if="${filterColorData.colorChip=='#FFFFFF'}" th:style="${'background-color:'+filterColorData.colorChip+';'+' border:1px solid #aaa;'}"></span>
-												<span class="pdColor-color" th:if="${filterColorData.colorChip!='#FFFFFF'}" th:style="${'background-color:'+filterColorData.colorChip}"></span>
+												<input type="checkbox" group="filterValue" th:id="${'chkFilterColor'+filterColorStat.count}" name="filterColorCds" th:value="${filterColorData.filterNm}" >
+												<span class="pdColor-color" th:if="${filterColorData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm+';'+' border:1px solid #aaa;'}"></span>
+												<span class="pdColor-color" th:if="${filterColorData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm}"></span>
 											</label>
 										</li>
 									</th:block>
@@ -206,7 +206,7 @@
 									<th:block th:each="filterBenefitData, filterBenefitStat : ${filterBenefitList}">
 										<li>
 											<label class="Benefits_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits'+filterBenefitStat.count}" name="filterBenefitsCds" th:value="${filterBenefitData.benefitCd}"><span th:text="${filterBenefitData.benefitNm}"></span>
+												<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits'+filterBenefitStat.count}" name="filterBenefitsCds" th:value="${filterBenefitData.filterCd}"><span th:text="${filterBenefitData.filterNm}"></span>
 											</label>
 										</li>
 									</th:block>
@@ -220,87 +220,11 @@
                                     <span>
                                         모이몰른
                                         <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        85
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        버커루
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        TBJ
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        ANDEW
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        모이몰른
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        85
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        버커루
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        TBJ
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        ANDEW
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        모이몰른
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        85
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        버커루
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        TBJ
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        ANDEW
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        모이몰른
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        85
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        버커루
-                                        <a href="javascript:;" class="filter_delete"></a>
-                                    </span>
-									<span>
-                                        TBJ
-                                        <a href="javascript:;" class="filter_delete"></a >
                                     </span>
 									<!-- 컬러 표시 -->
 									<span>
                                         <span class="pdColor-color12"></span>
                                         <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<span>
-                                        <span class="pdColor-color13"></span>
-                                        <a href="javascript:;" class="filter_delete"></a >
                                     </span>
 									<!-- 컬러 표시 -->
 								</div>
@@ -506,14 +430,14 @@
 	<form id="searchGoodsForm" name="searchGoodsForm">
 		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 		<input type="hidden" name="pageSize" value ="32"/>
-		<input type="hidden" name="cateNo"/>
-		<input type="hidden" name="cateGb" th:value="${cateGb}"/>
-		<input type="hidden" name="brandGroupNo" th:value="${brandGroupNo}"/>
-		<input type="hidden" name="formalGb" th:value="${formalGb}"/>
-		<input type="hidden" name="cate1No" th:value="${cate1No}"/>
-		<input type="hidden" name="cate2No" th:value="${cate2No}"/>
-		<input type="hidden" name="cate3No" th:value="${cate3No}"/>
-		<input type="hidden" name="cate4No" th:value="${cate4No}"/>
+		<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"/>
 	</form>
 
@@ -525,33 +449,35 @@
 		$(document).ready( function() {
 			//가격 슬라이드
 			//var custom_values = ['9,000원', '230,000원', '487,000원', '700,000원', '1,360,000원', '1,799,000원'];
-			var custom_values = [];
-			$.each(filterPriceList, function (priceIdx, priceItem){
-				custom_values[0] = priceItem.price1;
-				custom_values[1] = priceItem.price2;
-				custom_values[2] = priceItem.price3;
-				custom_values[3] = priceItem.price4;
-				custom_values[4] = priceItem.price5;
-				custom_values[5] = priceItem.price6;
-			});
+			if(!gagajf.isNull(filterPriceList)){
+				var custom_values = [];
+				$.each(filterPriceList, function (priceIdx, priceItem){
+					custom_values[0] = priceItem.price1;
+					custom_values[1] = priceItem.price2;
+					custom_values[2] = priceItem.price3;
+					custom_values[3] = priceItem.price4;
+					custom_values[4] = priceItem.price5;
+					custom_values[5] = priceItem.price6;
+				});
 
-			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];
+				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
-			});
+				$(".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
+				});
+			}
 
 			//할인율
 			var custom_values02 = ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'];

+ 475 - 0
src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html

@@ -0,0 +1,475 @@
+<!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/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : LookbookDetailFormWeb.html
+ * @desc    : 룩북 상세 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.06   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div id="container" class="container br">
+		<div class="breadcrumb">
+			<ul>
+				<li class="bread_home"><a href="index.html">홈</a></li>
+				<li class="bread_2depth">TBJ</li>
+				<li class="bread_3depth">룩북</li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content br_lookbook_view cont_visual"> <!-- 페이지특정 클래스 = br_lookbook_view -->
+				<div class="cont_head">
+					<h3 class="displayH t_c">2020 F/W COLLECTION</h3>
+				</div>
+				<div class="cont_body">
+					<div class="area_slider">
+						<div class="swiper-container">
+							<div class="swiper-wrapper">
+								<div class="swiper-slide">
+									<div class="bt_lb_item">
+										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img01.jpg" alt="BLUE-a" />
+										<div class="item_picker" style="left:20%; top:44%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명11
+												</a>
+											</div>
+										</div>
+										<div class="item_picker" style="left:60%; top:30%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명12
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="bt_lb_item">
+										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img02.jpg" alt="BLUE-a" />
+										<div class="item_picker" style="left:20%; top:44%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명21
+												</a>
+											</div>
+										</div>
+										<div class="item_picker" style="left:60%; top:30%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명22
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="bt_lb_item">
+										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img03.jpg" alt="BLUE-a" />
+										<div class="item_picker" style="left:20%; top:44%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명31
+												</a>
+											</div>
+										</div>
+										<div class="item_picker" style="left:60%; top:30%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명32
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="bt_lb_item">
+										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img04.jpg" alt="BLUE-a" />
+										<div class="item_picker" style="left:20%; top:44%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명41
+												</a>
+											</div>
+										</div>
+										<div class="item_picker" style="left:60%; top:30%;">
+											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
+											<div class="pick_descr">
+												<a href="">
+													상품명42
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-button-prev"></div>
+							<div class="swiper-button-next"></div>
+						</div>
+					</div>
+					<div class="text_cont">
+						국내 대표 패션기업 한세엠케이의 스타일리시 어반 캐주얼 브랜드 앤듀(ANDEW)가 중성적이고 시크한 감각을 극대화한 2020 F/W 시즌 룩북을 공개했다.<br>
+						앤듀는 올 하반기 정소현, 안재형, 고웅호 등 글로벌 런웨이 무대에서 활약중인 전문 패션 모델들과 함께 성별의 경계를 뛰어넘어 개개인의 개성을 드러내는 젠더뉴트럴 패션을 앤듀만의 감각으로 새롭게 전개한다. 중성적인 매력을 자아내는 3명의 모델들은 각자의 개성과 매력을 뽐내며 세련미를 더한 젠더리스 감성을 한층 더 완성도 있게 소화해 눈길을 끈다. 공개된 룩북에서는 따뜻하고 부드러운 파스텔톤, 차분한 모노크롬 컬러로 극명하게 상반된 분위기를  연출하며 각기 다른 유니섹스 스타일을 선보였다. 격식을 갖추되 포멀하진 않게 자연스럽게 떨어지는 핏과 힙한 디자인을 통해 앤듀만의 젠더뉴트럴 캐주얼룩을 연출한 것. 또한, 이번 시즌에도 패션업계에 불고 있는 ‘필(必)환경’  트렌드에 따라 그린슈머들을 사로잡을 다양한 친환경적인 제품들을 주력으로 출시하며 지속가능한 패션을 실천할 계획이다. 버려진 페트병이나 플라스틱을 활용해 친환경 재생 섬유인 리사이클 페트(PET)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
+					</div>
+				</div>
+			</div>
+			<div class="content br_lookbook_view cont_items">
+				<div class="cont_head">
+					<h3>룩북 속 상품<span class="number">(9,999)</span></h3>
+					<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
+				</div>
+				<div class="cont_body">
+					<div class="area_slider">
+						<div class="swiper-container">
+							<div class="swiper-wrapper">
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+										</div>
+									</div>
+								</div>
+							</div>
+							<!-- Add Scrollbar -->
+							<div class="swiper-scrollbar"></div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="content br_lookbook_view cont_others">
+				<div class="cont_head">
+					<h3 class="subH1 t_c mb40">다른 룩북 보기</h3>
+					<button><span>전체보기</span></button>
+				</div>
+				<div class="cont_body">
+					<div class="area_slider">
+						<div class="swiper-container">
+							<div class="swiper-wrapper">
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img01.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2020 F/W COLLECTION 2020</p>
+										</div>
+									</a>
+								</div>
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img02.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2020 S/S COLLECTION</p>
+										</div>
+									</a>
+								</div>
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img03.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2019 F/W COLLECTION 2019 F/W COLLECTION</p>
+										</div>
+									</a>
+								</div>
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img04.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2019 S/S COLLECTION</p>
+										</div>
+									</a>
+								</div>
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img05.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2018 F/W COLLECTION</p>
+										</div>
+									</a>
+								</div>
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img06.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2018 S/S COLLECTION</p>
+										</div>
+									</a>
+								</div>
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img07.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2017 F/W COLLECTION</p>
+										</div>
+									</a>
+								</div>
+								<div class="swiper-slide">
+									<a href="">
+										<div class="thumb">
+											<img src="/images/pc/thumb/ev_list_img08.jpg" alt="">
+										</div>
+										<div class="txt">
+											<p class="title">2017 S/S COLLECTION 2017 S/S COLLECTION</p>
+										</div>
+									</a>
+								</div>
+							</div>
+						</div>
+						<!-- Add Arrows -->
+						<div class="swiper-button-next"></div>
+						<div class="swiper-button-prev"></div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<!-- 상단_LOOKBOOK_picker_상품_팝업 -->
+	<div class="modal fade br_pop lookbook_item_pop" id="lookbookItemPop" tabindex="-1" role="dialog" aria-labelledby="lookbook_item_label" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<div class="modal-header">
+					<h5 class="modal-title sr-only" id="lookbook_item_label">상품정보</h5>
+				</div>
+				<div class="modal-body">
+					<div class="itemsGrp">
+						<div class="item_prod">
+							<div class="item_state">
+								<div class="itemLink">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/ev_list_img05.jpg">
+									</div>
+									<p class="itemBrand">BRAND NAME</p>
+									<div class="itemName">[온라인 단독] 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼</div>
+									<span class="itemPrice_original">89,000</span>
+									<p class="itemPrice">80,100
+										<span class="itemPercent">10%</span>
+									</p>
+									<button type="button" class="btn btn_default"><span>자세히 보기</span></button>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- //상단_LOOKBOOK_picker_상품_팝업 -->
+
+	<script th:inline="javascript">
+/*<![CDATA[*/
+	// 컨텐츠 호출
+	$(document).ready( function() {
+		/* 슬라이드 - 상단_LOOKBOOK */
+		var lookbook_visual_slide = new Swiper('.br_lookbook_view.cont_visual .swiper-container', {
+			loop: true,
+			slidesPerView: 'auto',
+			spaceBetween: 20,
+			speed : 800,
+			autoWidth: true,
+			autoHeight: true,
+			centeredSlides: true,
+			autoplay: false,
+			navigation: {
+				nextEl: '.br_lookbook_view.cont_visual .swiper-button-next',
+				prevEl: '.br_lookbook_view.cont_visual .swiper-button-prev',
+			},
+			pagination: {
+				el: '.br_lookbook_view.cont_visual .swiper-pagination',
+				clickable: true,
+			},
+		});
+
+		/* 슬라이드 - 룩북 속 상품 */
+		var togetherItemSwiper = new Swiper('.br_lookbook_view.cont_items .swiper-container', {
+			slidesPerView: 6,
+			spaceBetween: 20,
+			scrollbar: {
+				el: '.br_lookbook_view.cont_items .swiper-scrollbar',
+				hide: true,
+			},
+		});
+
+
+		var br_ohter_slide = new Swiper('.br_lookbook_view.cont_others .swiper-container', {
+			slidesPerView: 5,
+			spaceBetween: 20,
+			navigation: {
+				nextEl: '.br_lookbook_view.cont_others .swiper-button-next',
+				prevEl: '.br_lookbook_view.cont_others .swiper-button-prev',
+			},
+		});
+
+		// 슬라이드 - 상단_LOOKBOOK > picker - 룩북_피커_상품정보 팝업
+		$(document).on('click','#btn_picker_item01',function(e){
+			$("#lookbookItemPop").modal("show");
+			return false;
+		});
+	});
+
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -110,7 +110,7 @@
 						tag2 += '<ul class="clear event_con" id="lookbookArea" style="display: block;">';
 						$.each(result, function(idx, item) {
 							tag2 += '<li>';
-							tag2 += '	<a href="javascript:void(0);">';
+							tag2 += '	<a href="javascript:void(0);" onclick="cfnGoToLookbookDetail('+item.lookbookSq+','+item.brandCd+')">';
 							tag2 += '		<div class="ev_img">';
 							tag2 += '			<img src="' + _imgUrl + item.orgTnfileNm + '" alt="" style="height:100%">';
 							tag2 += '		</div>';

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

@@ -349,36 +349,40 @@
 						<div class="cont_body">
 							<div class="sec_head">
 								<div class="filter action tag_list">
-									<th:block th:each="titleData, titleStat : ${mainLayoutData.mdPickList}">
-										<button class="btn" th:classappend="${titleStat.count} == 1? active" th:attr="data-tab=${'tag'+titleStat.count}" th:text="${titleData.mdTitle}">따뜻한 무드2</button>
+									<th:block th:each="titleData, titleStat : ${mainLayoutData.mdPickList}" >
+										<th:block th:if="${titleData.goodsList!=null and !titleData.goodsList.empty}" >
+											<button class="btn" th:attr="data-tab=${'tag'+titleStat.count}" th:text="${titleData.mdTitle}">따뜻한 무드2</button>
+										</th:block>
 									</th:block>
 								</div>
 							</div>
 							<div class="sec_body">
 								<th:block th:each="titleData, titleStat : ${mainLayoutData.mdPickList}">
-									<div th:id="${'tag'+titleStat.count}" class="tagitem" th:classappend="${titleStat.count} == 1? active">
+									<div th:id="${'tag'+titleStat.count}" class="tagitem" > <!--th:classappend="${titleStat.count} == 1? active"-->
 										<div class="swiper-container post-recomm">
 											<div class="swiper-wrapper">
-												<th:block th:each="goodsData, goodsStat : ${titleData.goodsList}">
-													<div class="swiper-slide">
-														<div class="item_prod">
-															<div class="item_state">
-																<button type="button" class="itemLike" th:classappend="${goodsData.likeIt}">관심상품 추가</button>
-																<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SMM009');">
-																	<div class="itemPic">
-																		<img alt="" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
-																	</div>
-																	<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
-																	<div class=" itemName" th:text="${goodsData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-																	<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">80,100
-																		<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
-																		<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
-																	</p>
-																	<div class="itemComment">#주문 폭주 상품</div>
-																</a>
+												<th:block th:if="${titleData.goodsList!=null and !titleData.goodsList.empty}">
+													<th:block th:each="goodsData, goodsStat : ${titleData.goodsList}">
+														<div class="swiper-slide">
+															<div class="item_prod">
+																<div class="item_state">
+																	<button type="button" class="itemLike" th:classappend="${goodsData.likeIt}">관심상품 추가</button>
+																	<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SMM009');">
+																		<div class="itemPic">
+																			<img alt="" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
+																		</div>
+																		<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
+																		<div class=" itemName" th:text="${goodsData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+																		<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">80,100
+																			<span class="itemPrice_original" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
+																			<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+																		</p>
+																		<div class="itemComment">#주문 폭주 상품</div>
+																	</a>
+																</div>
 															</div>
 														</div>
-													</div>
+													</th:block>
 												</th:block>
 											</div>
 											<div class="swiper-controls">
@@ -448,8 +452,9 @@ if(targetTime != null && targetTime != ''){
 
 // 컨텐츠 호출
 $(document).ready( function() {
-	$("#header").load("head.html");
-	$("#footer").load("foot.html");
+	//$("#header").load("head.html");
+	//$("#footer").load("foot.html");
+	$(".tag_list .btn").eq(0).trigger('click');
 });
 
 /* SLIDE - MAIN_VISUAL */

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

@@ -545,7 +545,7 @@
 			}
 
 			if (minOrdQty > itemCnt) {
-				alert("무슨작업을 해야할가요?");
+				//alert("무슨작업을 해야할가요?");
 				return false;		 //무슨작업을 해야하나?
 			}
 			

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

@@ -288,7 +288,7 @@
 										<span class="title">수량</span>
 									</div>
 									<div class="number_count">
-										<span class="minus" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></a></span>
+										<span class="minus" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>
 										<input type="text" name="cea" maxlength="3" style="ime-mode:disabled" th:value="${goodsInfo.minOrdQty}" onblur="fnChangeOrderEa(this)" data-valid-type="numeric">
 										<input type="hidden" name="coption" value=""   th:attr="price=${goodsInfo.currPrice}">
 										<span class="plus" onclick="fnAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>
@@ -552,12 +552,12 @@
 							어린이제품 안전인증 / 한국건설생활시험연구원(KCL)
 						</p>
 						<p class="normal" >
-							<th:block th:if="${not #strings.isEmpty(goodsSafeNo.isCertNum)}" >
-							 인증번호: :CB123A123-1234
-							<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
+							<th:block th:if="${#strings.contains(goodsSafeNo.isCertNum, '해당')}" >
+							해당 없음 
 							</th:block>
-							<th:block th:unless="${goodsSafeNo.isCertNum}">
-							해당사항 없음
+							<th:block th:unless="${#strings.contains(goodsSafeNo.isCertNum, '해당')}" >
+							인증번호: : <th:block th:text="${goodsSafeNo.isCertNum}"></th:block>
+							<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
 							</th:block>
 						</p>
 						<p class="t_info dot_info">

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

@@ -115,14 +115,14 @@
 				tag += '	<div class="fold_cont" style="display: none;">\n';
 				tag += '		<div class="fold_detail">\n'; //문의 내용
 				tag += '			<div>\n';
-				tag += '				<p>' + item.questContent + '</p>\n';
+				tag += '				<p>' + item.questContent.replaceAll("\n", "</br>") + '</p>\n';
 				tag += '			</div>\n';
 				tag += '		</div>\n';
 				
 				if (item.ansStat == 'G060_20') { // 답변완료 상태일 때
 					tag += '	<div class="fold_answer">\n'; //문의 답변
 					tag += '		<div class="answer_head">답변이 등록되었습니다.</div>\n';
-					tag += '		<div class="answer_body">' + item.ansContent + '</div>\n';
+					tag += '		<div class="answer_body">' + item.ansContent.replaceAll("\n", "</br>") + '</div>\n';
 					tag += '		<span class="data">' + item.ansDt + '</span>\n';
 					tag += '	</div>\n';
 				}

+ 3 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html

@@ -64,7 +64,7 @@
 	</div>
 	<!-- // CONT-BODY -->
 </div>
-</th:block>
+
 
 
 <script th:inline="javascript">
@@ -123,5 +123,6 @@
 		},
 	});	  
 /*]]>*/
-</script>	
+</script>
+</th:block>	
 </html>

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

@@ -114,12 +114,12 @@
 			html +=	'    <td>\n';
 			html +=	'        <div class="button_box">\n';
 			html +=	'            <p>';
-			html +=	'                <button type="button" class="btn btn_default btn_sm" onclick="fnChangeDeliveryAddr(custDeliveryAddr.custDelvAddrSq)">';
+			html +=	'                <button type="button" class="btn btn_default btn_sm" onclick="fnModiFyCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">';
 			html +=	'                    <span>수정</span>';
 			html +=	'                </button>';
 			html +=	'            </p>';
 			html +=	'            <p>';
-			html +=	'                <button type="button" class="btn btn_dark btn_sm">';
+			html +=	'                <button type="button" class="btn btn_dark btn_sm" onclick="fnDeleteCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">';
 			html +=	'                   <span>삭제</span>';
 			html +=	'                </button>';
 			html +=	'            </p>';
@@ -154,8 +154,45 @@
 		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');
+				gagajf.showProgressbar(true);
+			},
+			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() {
 
 		// 마이페이지 LNB 설정

+ 373 - 0
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -0,0 +1,373 @@
+<!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/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : PlanningCustGradeBenefitFormWeb.html
+ * @desc    : 회원등급 혜택 Page
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021. 04. 05     jsshin     최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+	<!--  container -->
+	<div id="container" class="container ev">
+		<div class="breadcrumb">
+			<ul>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_2depth" ><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">이벤트/혜택</a></li>
+				<li class="bread_2depth">회원등급 혜택</li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content ev_rank">
+				<div class="cont_head">
+					<div>
+						<h3>회원등급 혜택</h3>
+					</div>
+				</div>
+				<div class="cont_body">
+					<div class="my_rank_info" th:if="${isLogin}"> <!-- 회원일 경우 -->
+						<div class="inner">
+							<div class="desc">
+								<p>
+									<span class="my_name" th:text="${customerInfo.custNm}">홍길동</span>님의<br />
+									이번 달 회원등급은<br />
+									<span class="my_rank" th:text="${customerInfo.custGradeNm}">GOLD</span> 입니다.
+								</p>
+								<button type="button" id="btnDownGradeCoupon" class="btn btn_dark cou_btn" >등급 쿠폰 다운로드</button>
+							</div>
+							<!-- 회원 등급 progress바 -->
+							<div class="my_rank_progress">
+								<div th:class="'pro_wrap '+${#strings.toLowerCase(customerInfo.custGradeNm)}"> <!-- welcome, bronze, silver, gold, vip 각각 클래스 넣으면 상태가 달라집니다. -->
+									<div class="rank_txt clear">
+										<ul class="clear">
+											<li>
+												<div class="icon welcome">
+													<span>W</span>
+												</div>
+												<div class="txt">
+													<span>WELCOME</span>
+												</div>
+											</li>
+											<li>
+												<div class="icon bronze">
+													<span>B</span>
+												</div>
+												<div class="txt">
+													<span>BRONZE</span>
+												</div>
+											</li>
+											<li>
+												<div class="icon silver">
+													<span>S</span>
+												</div>
+												<div class="txt">
+													<span>SILVER</span>
+												</div>
+											</li>
+											<li>
+												<div class="icon gold">
+													<span>G</span>
+												</div>
+												<div class="txt">
+													<span>GOLD</span>
+												</div>
+											</li>
+											<li>
+												<div class="icon vip">
+													<span>V</span>
+												</div>
+												<div class="txt">
+													<span>VIP</span>
+												</div>
+											</li>
+										</ul>
+									</div>
+									<div class="progress_bar">
+										<span class="current_bar"></span>
+									</div>
+								</div>
+								<div class="benefit_txt">
+									<p id="etcGrade">
+										<span id="ordSpan">	구매 건수 <strong id="ordCnt" class="c_primary" >0회</strong> </span>
+										<span id="realOrdAmtSpan">, 구매 금액 <strong id="realOrdAmt" class="c_primary">0원 </span>
+										</strong> 더 구매하시면 <strong>
+										<span id="nextGrde" class="c_black"></span>로 등급UP!</strong>
+									</p> <!-- 등급 상승까지 남은 정보 안내 -->
+									<p id="sameVipGrade" style="display: none;">
+										<strong>등급 유지 조건 달성!</strong> 다음달에도
+										<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
+									</p>
+									<p id="vipGrade" style="display: none;">
+										<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
+									</p>
+								</div>
+							</div>
+							<!-- //회원 등급 progress바 -->
+						</div>
+					</div>
+					<div class="my_rank_info no_member" th:unless="${isLogin}"> <!-- 비회원일 경우 -->
+						<div class="inner">
+							<p>
+								로그인 후 이번 달 나의 회원 등급을 확인하고 쿠폰혜택을 받아보세요.
+							</p>
+							<button type="button" class="btn btn_dark login_btn" onclick="cfnGoToPage(_PAGE_LOGIN);">로그인</button>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="content inner ev_benefit_tbl">
+				<div class="cont_head">
+					<h3>등급 혜택</h3>
+				</div>
+				<div class="cont_body">
+					<div class="rank_tbl_wrap inner">
+						<div class="tbl_wrap">
+							<table>
+								<caption>등급 혜택 표</caption>
+								<tr>
+									<th>회원등급</th>
+									<td>
+										<div class="icon vip"><span>V</span></div>
+										<span>VIP</span>
+									</td>
+									<td>
+										<div class="icon gold"><span>G</span></div>
+										<span>GOLD</span>
+									</td>
+									<td>
+										<div class="icon silver"><span>S</span></div>
+										<span>SILVER</span>
+									</td>
+									<td>
+										<div class="icon bronze"><span>B</span></div>
+										<span>BRONZE</span>
+									</td>
+									<td>
+										<div class="icon welcome"><span>W</span></div>
+										<span>WELCOME</span>
+									</td>
+								</tr>
+								<tr class="td_30">
+									<th>선정기준</th>
+									<td>
+										<p>최근 3개월<br />30만원 또는6건 이상 구매</p>
+									</td>
+									<td>
+										<p>최근 3개월<br />20만원 또는4건 이상 구매</p>
+									</td>
+									<td>
+										<p>최근 3개월<br />10만원 또는2건 이상 구매</p>
+									</td>
+									<td>
+										<p>최근 3개월<br />1건 이상 구매</p>
+									</td>
+									<td>
+										<p>신규 회원 및<br />최근 3개월 미구매</p>
+									</td>
+								</tr>
+								<tr>
+									<th rowspan="2">혜택</th>
+									<td class="bbn">
+										<div class="cou_img"><img src="/images/pc/ico_coupon_12.png" alt="7% 할인 쿠폰"></div>
+										<p>최대 1만 5천원 할인<br>(3만원 이상 구매 시)</p>
+									</td>
+									<td class="bbn">
+										<div class="cou_img"><img src="/images/pc/ico_coupon_10.png" alt="12% 할인 쿠폰"></div>
+										<p>최대 1만 5천원 할인<br>(3만원 이상 구매 시)</p>
+									</td>
+									<td class="vt" rowspan="2">
+										<div class="cou_img"><img src="/images/pc/ico_coupon_7.png" alt="10% 할인 쿠폰"></div>
+										<p>최대 7천원 할인<br>(3만원 이상 구매 시)</p>
+									</td>
+									<td class="vt" rowspan="2">
+										<div class="cou_img"><img src="/images/pc/ico_coupon_5.png" alt="10% 할인 쿠폰"></div>
+										<p>최대 3천원 할인<br>(2만원 이상 구매 시)</p>
+									</td>
+									<td class="bbn">
+										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="15% 할인 쿠폰"></div>
+										<p>최대 3만원 할인<br><strong>신규회원 한정 1회 발급</strong></p>
+									</td>
+								</tr>
+								<tr>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_20000.png" alt="20,000원 할인 쿠폰"></div>
+										<p>10만원 이상 구매 시</p>
+									</td>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_15000.png" alt="15,000원 할인 쿠폰"></div>
+										<p>10만원 이상 구매 시</p>
+									</td>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_3000.png" alt="15,000원 할인 쿠폰"></div>
+										<p>2만원 이상 구매 시</p>
+									</td>
+								</tr>
+								<tr>
+									<th>생일쿠폰</th>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="7% 할인 쿠폰"></div>
+										<p>최대 3만원 할인</p>
+									</td>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="12% 할인 쿠폰"></div>
+										<p>최대 2만원 할인</p>
+									</td>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="10% 할인 쿠폰"></div>
+										<p>최대 1만원 할인</p>
+									</td>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_10.png" alt="10% 할인 쿠폰"></div>
+										<p>최대 1만원 할인</p>
+									</td>
+									<td>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="15% 할인 쿠폰"></div>
+										<p>최대 1만원 할인</p>
+									</td>
+								</tr>
+							</table>
+						</div>
+					</div>
+					<div class="announce_txt inner">
+						<div class="note_txt">
+							<img src="/images/pc/ico_content_find.png" alt="유의사항">
+							<p>유의사항</p>
+						</div>
+						<div class="announce_list">
+							<p class="tit">회원등급 안내사항</p>
+							<ul>
+								<li>회원등급은 직전 3개월의 구매금액 또는 구매건수 기준으로 산정되며, 익월 1일에 확정됩니다.</li>
+								<li>구매금액 1만원 미만의 구매건수는 SILVER등급 이상의 등급산정에서 제외됩니다.</li>
+								<li>주문 취소/반품 건에 대한 결제금액은 등급산정에서 제외됩니다.</li>
+								<li>구매금액은 구매확정건에 대한 순수주문금액(할인쿠폰, 스타일포인트, 배송비, 취소/반품 내역을 제외한 실결제금액)을 의미합니다.</li>
+								<li>신규회원 한정 할인쿠폰을 제외한 회원등급 쿠폰은 매월 1일 다운로드 가능합니다.</li>
+							</ul>
+							<p class="tit">생일쿠폰 안내사항</p>
+							<ul>
+								<li>등급 별 생일 쿠폰은 생일 당월 1일부터 말일까지 다운로드 가능합니다. (생일 당월의 기준은 회원정보 내 생년월일 정보를 기준으로 합니다.)</li>
+								<li>쿠폰이 지급되는 당월 말일까지 사용 가능합니다.</li>
+								<li>쿠폰 사용가능기간 내 미사용 시 소멸됩니다.</li>
+							</ul>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+ 	let exptCustGrdeMap = [[${exptCustGrdeMap}]]
+	let custGradeNm = [[${customerInfo.custGradeNm}]];
+
+ 	var fnInit = function () {
+		let expctCustGrade = exptCustGrdeMap.expctCustGrade;	// 예상등급
+
+		//expctCustGrade.custGradeNo 10:VIP, 20: GOLD, 30:SILVER, 40:BRONZE, 50:WELCOME
+
+		// 예정등급이 VIP가 아닌경우
+		if (Number(expctCustGrade.gradeCdNo) > 10) {
+			let nextGradeNo = Number(expctCustGrade.gradeCdNo)-10;				// 다음등급번호
+			let nextCustGradePolicy = fnGetNextGradePolicyInfo(nextGradeNo);	// 다음등급정책정보
+			fnNextGradeCondition(nextCustGradePolicy, expctCustGrade);			// 다음조건 알림
+		} else {
+			fnDisplayVipText(expctCustGrade);
+		}
+
+	};
+
+ 	// 다음 등급정책
+ 	var fnGetNextGradePolicyInfo = function (nextGradeNo) {
+		let custGradePolicy = exptCustGrdeMap.custGradePolicy;	// 등급별정책
+		let nextCustGradePolicy;
+		$(custGradePolicy).each(function(idx, item) {
+			if (Number(item.gradeCdNo) === nextGradeNo ) {
+				nextCustGradePolicy = item;
+			}
+		});
+		return nextCustGradePolicy;
+	}
+
+	// 다음등급 조건 알림
+	var fnNextGradeCondition = function (nextCustGradePolicy, expctCustGrade) {
+		let $etcGrade = $('#etcGrade');
+		let $sameVipGrade = $('#sameVipGrade');
+		let $vipGrade = $('#vipGrade');
+		let $ordCnt = $('#ordCnt');
+		let $ordSpan = $('#ordSpan');
+		let $realOrdAmt = $('#realOrdAmt');
+		let $realOrdAmtSpan = $('#realOrdAmtSpan');
+		let $nextGrde = $('#nextGrde');
+
+		let remnantBuyAmt = 0;
+		if (nextCustGradePolicy.minBuyAmt > expctCustGrade.sumRealOrdAmt) {
+			remnantBuyAmt = nextCustGradePolicy.minBuyAmt - expctCustGrade.sumRealOrdAmt;
+		}
+
+		let remnantBuyCnt = 0;
+		if (nextCustGradePolicy.minBuyCnt > expctCustGrade.ordCnt) {
+			remnantBuyCnt = nextCustGradePolicy.minBuyCnt -  expctCustGrade.ordCnt;
+		}
+
+		$etcGrade.show();
+		$sameVipGrade.hide();
+		$vipGrade.hide();
+
+		if (remnantBuyAmt > 0) {
+			$realOrdAmtSpan.show()
+			$realOrdAmt.text(remnantBuyAmt.addComma()+'원');
+		} else {
+			$realOrdAmtSpan.hide()
+		}
+
+		if (remnantBuyCnt > 0) {
+			$ordSpan.show();
+			$ordCnt.text(remnantBuyCnt.addComma()+'회');
+		} else {
+			$ordSpan.hide();
+		}
+
+		if (remnantBuyAmt > 0 || remnantBuyCnt > 0) {
+			$nextGrde.text(nextCustGradePolicy.gradeCdNm);
+		}
+	}
+
+	// 기존 VIP / 새로운 VIP 구분
+	var fnDisplayVipText = function (expctCustGrade) {
+		let $etcGrade = $('#etcGrade');
+		let $sameVipGrade = $('#sameVipGrade');
+		let $vipGrade = $('#vipGrade');
+		$etcGrade.hide();
+		if (expctCustGrade.gradeCdNm === custGradeNm) {
+			$vipGrade.hide();
+			$sameVipGrade.show();
+		} else {
+			$sameVipGrade.hide();
+			$vipGrade.show();
+		}
+	}
+
+	$(document).ready(function() {
+
+		fnInit();
+
+	});
+
+/*]]>*/
+</script>
+
+</th:block>
+</body>
+</html>
+
+

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

@@ -0,0 +1,314 @@
+<!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/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : PlanningEventAttendFormWeb.html
+ * @desc    : 이벤트 출석체크 Page
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.4.6     sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
+<!--  container -->
+	<div id="container" class="container dp">
+		<div class="breadcrumb">
+			<ul>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_2depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">이벤트/혜택</a></li>
+				<li class="bread_2depth" th:text="${planInfo.planNm}"></li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content wide dp_detail_visual">
+				<div class="cont_head">
+					<div>
+						<h3 th:text="${planInfo.planNm}"></h3>
+						<div class="period">
+							<span th:text="${planInfo.dispStdt}"></span> ~ <span th:text="${planInfo.dispEddt}"></span>
+						</div>
+						<div class="shareSet">
+								<button class="btn_share" data-name="openShare">공유하기</button>
+								<div class="shareWrap">
+									<div id="layerShare" class="setShare open">
+										<span>
+											<button type="button" class="kk"
+												th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '${planView+ '/'+planInfo.mainImg}');|">
+												<span>카카오톡</span>
+											</button>
+											<button type="button" class="fb"
+												th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '', '');|">
+												<span>페이스북</span>
+											</button>
+											<button type="button" class="tw"
+												th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm+ '#style24몰'}', '', '');|">
+												<span>트위터</span>
+											</button>
+											<button type="button" class="url btn_copy">
+												<span>URL</span>
+											</button>
+										</span>
+									</div>
+								</div>
+					</div>
+				</div>
+				<div class="cont_body">
+                    <!-- 프로모션 출석체크 -->
+					<div class="stamp_event">
+						<div class="event_calander">
+							<div class="check_title">
+								<p>출석할수록 늘어나는 혜택!</p>
+								<div class="title"><strong>1월</strong> 출석체크</div>
+							</div>
+							<div class="check_info">
+								<span class="today">오늘</span>
+								<span class="complete">출석완료</span>
+							</div>
+							<div class="tbl_wrap">
+								<div class="my_attend_day">
+									<p>나의 출석 일수는?</p>
+									<span class="day">
+										<span>11</span>일
+									</span>
+								</div>
+								<div class="tbl">
+									<table>
+										<colgroup>
+											<col width="14.28%">
+											<col width="14.28%">
+											<col width="14.28%">
+											<col width="14.28%">
+											<col width="14.28%">
+											<col width="14.28%">
+											<col width="14.28%">
+										</colgroup>
+										<thead>
+											<tr>
+												<th>SUN</th>
+												<th>MON</th>
+												<th>TUE</th>
+												<th>WED</th>
+												<th>THU</th>
+												<th>FRI</th>
+												<th>SAT</th>
+											</tr>
+										</thead>
+										<tbody id="monthTbody">
+										   <!--  <th:block th:each="a, month : ${month}" id="month">
+											<tr>
+												<td>
+													<div class="date" th:text="${a.sun}"></div>
+												</td>	
+												<td>
+													<div class="date" th:text="${a.mon}"></div>
+												</td>	
+												<td>
+													<div class="date" th:text="${a.tue}"></div>
+												</td>	
+												<td>
+													<div class="date" th:text="${a.wed}"></div>
+												</td>	
+												<td>
+													<div class="date" th:text="${a.thu}"></div>
+												</td>	
+												<td>
+													<div class="date" th:text="${a.fri}"></div>
+												</td>	
+												<td>
+													<div class="date" th:text="${a.sat}"></div> unused
+												</td>											
+											</tr> 
+											</th:block> -->
+										</tbody>
+									</table>
+								</div>
+							</div>
+							<button type="button" class="btn btn_primary"><span>출석 체크</span></button>
+						</div>
+                        <div class="event_benefit">
+                            <p class="title">출석 일수에 따라 달라지는 혜택</p>
+                            <div class="benefit_con">
+                                <img src="/images/pc/benefit_txt.jpg" alt="출석 일수에 따라 달라지는 혜택">
+                            </div>
+                        </div>                        
+					</div>                   
+                    <!-- //프로모션 출석체크-->
+				</div>
+			</div>
+			<div class="content dp_announce">
+				<div class="cont_head">
+					<div>
+						<h4>유의사항</h4>
+					</div>
+				</div>
+				<div class="cont_body">
+					<div class="announce_txt">
+						<div class="note_txt">
+							<img src="/images/pc/ico_content_find.png" alt="유의사항">
+							<p>유의사항</p>
+						</div>
+						<div class="announce_list">
+							<ul>
+								<li>본 이벤트는 ID당 1회만 참여 가능합니다.</li>
+								<li>설문조사 참여 시 포인트를 지급해드립니다. (이벤트 종료 후, 일괄 지급)</li>
+								<li>지급된 포인트는 [ 마이페이지 > 나의 지갑 ] 메뉴에서 확인할 수 있습니다.</li>
+							</ul>
+						</div>
+					</div> 
+				</div>
+			</div>
+            <!-- 다른 기획전,이벤트 보기 -->
+            <div class="content other_promotion_slide">
+                <div class="cont_head">
+                    <div>
+                        <h4>다른 이벤트 보기</h4>
+                        <a href="">전체보기</a>
+                    </div>
+                </div>
+                <div class="cont_body">
+                    <div class="swiper-container">
+                        <div class="swiper-wrapper">
+                            <div class="swiper-slide">                   
+                                <a href="">
+                                    <div class="thumb">
+                                        <img src="/images/pc/thumb/ev_list_img06.jpg" alt="스타일24만의 스타일로, tbj 하이 스타일링">
+                                    </div>
+                                    <div class="txt">
+                                        <span class="brand">BUCKAROO</span>
+                                        <p class="tit">스타일24만의 스타일로, TBJ 하이 스타일링</p>
+                                    </div>
+                                </a>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="swiper-button-prev"></div>
+                    <div class="swiper-button-next"></div>
+                </div>
+            </div>
+            <!-- //다른 기획전,이벤트 보기 -->
+		</div>
+	</div>
+</div>
+<script th:inline="javascript">
+let today = new Date();   
+let date = today.getDate();
+let month = [[${month}]];
+
+var appendHtml = function () {
+	$.each(month, function(idx, item)  { 
+		html = '';
+		html += '<tr>';
+		
+		if (item.sun!=null && item.sun!='') {
+			html += '	<td>';
+			html += '		<div class="date">'+item.sun+'</div>';
+			html += '	</td>	';
+		}else{
+			html += '	<td>';
+			html += '		<div class="date"></div>';
+			html += '	</td>	';
+		}
+		if (item.mon!=null && item.mon!='') {
+			html += '	<td>';
+			html += '		<div class="date">'+item.mon+'</div>';
+			html += '	</td>	';
+		}else{
+			html += '	<td>';
+			html += '		<div class="date"></div>';
+			html += '	</td>	';
+		}
+		if (item.tue!=null && item.tue!='') {
+			html += '	<td>';
+			html += '		<div class="date">'+item.tue+'</div>';
+			html += '	</td>	';
+		}else{
+			html += '	<td>';
+			html += '		<div class="date"></div>';
+			html += '	</td>	';
+		}
+		if (item.wed!=null && item.wed!='') {
+			html += '	<td>';
+			html += '		<div class="date">'+item.wed+'</div>';
+			html += '	</td>	';
+		}else{
+			html += '	<td>';
+			html += '		<div class="date"></div>';
+			html += '	</td>	';
+		}
+		if (item.thu!=null && item.thu!='') {
+			html += '	<td>';
+			html += '		<div class="date">'+item.thu+'</div>';
+			html += '	</td>	';
+		}else{
+			html += '	<td>';
+			html += '		<div class="date"></div>';
+			html += '	</td>	';
+		}
+		if (item.fri!=null && item.fri!='') {
+			html += '	<td>';
+			html += '		<div class="date">'+item.fri+'</div>';
+			html += '	</td>	';
+		}else{
+			html += '	<td>';
+			html += '		<div class="date"></div>';
+			html += '	</td>	';
+		}
+		if (item.sat!=null && item.sat!='') {
+			html += '	<td>';
+			html += '		<div class="date">'+item.sat+'</div>';
+			html += '	</td>	';
+		}else{
+			html += '	<td>';
+			html += '		<div class="date"></div>';
+			html += '	</td>	';
+		}
+		
+		html += '</tr>'
+		$("#monthTbody").append(html);
+	})    
+} 
+$(document).ready(function() {
+	 
+	appendHtml();
+	
+	//공유 버튼 토글 
+	$("button[data-name=openShare]").on("click", function(){
+		$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
+		return false;
+	});
+	//영역밖 클릭으로 공유토글 닫기
+	$("body").on('click', function(e) { 
+		if(!$(".shareWrap.on").parent().has(e.target).length) {
+			$("button[data-name=openShare]").removeClass("on");
+			$(".shareWrap").removeClass("on");
+		};
+	});
+	
+	$('.btn_copy').bind('click', function() {
+		copyToClipboard();
+	});
+	
+	/* SLIDE - 다른 기획전,이벤트 보기 */
+	var other_slide_slide = new Swiper ('.other_promotion_slide .swiper-container', {
+		slidesPerView: 5,
+		spaceBetween: 20,
+		navigation: {
+			nextEl: '.other_promotion_slide .swiper-button-next',
+			prevEl: '.other_promotion_slide .swiper-button-prev',
+		},
+	});    
+	
+})
+</script>
+</th:block>
+
+</body>
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html

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

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

@@ -22,7 +22,7 @@
 	<div id="container" class="container dp">
 		<div class="breadcrumb"> 
 			<ul>
-				<li class="bread_home"><a href="index.html">홈</a></li>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
 				<li class="bread_2depth">총알배송</li>
 			</ul> 
 		</div>
@@ -33,7 +33,7 @@
                         <h3>총알배송</h3>
                     </div>
 				</div>
-				<div class="cont_body" th:utext="${#strings.replace(#strings.replace(shotHtml.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
+				<div class="cont_body" th:utext="${#strings.replace(#strings.replace(shotHtml.fsrcPc,'<','<'),'>','>')}">
                      <div class="bulletship">
                         <div class="bulletship_head">
                             <img src="/images/pc/thumb/bullet_bg1.png" alt="10시까지 주문하면 당일도착">
@@ -221,7 +221,7 @@ $(document).ready(function() {
    
 });
  /*]]>*/
-</script> 
+</script>
 
 </th:block>
 

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

@@ -62,7 +62,7 @@
                                         </div>
                                          -->
                                         <div class="shopBagBtn">
-                                            <button class="btn btn_defalt">
+                                            <button class="btn btn_defalt" onclick="cfnAddCart()">
                                                 <span>쇼핑백 담기</span>
                                             </button>
                                         </div>

BIN
src/main/webapp/images/mo/coachmask01.png


BIN
src/main/webapp/images/mo/coachmask02.png


BIN
src/main/webapp/images/mo/coachmask03.png


BIN
src/main/webapp/images/mo/ico_app_arr.png


BIN
src/main/webapp/images/mo/ico_app_arr2.png


BIN
src/main/webapp/images/mo/ico_app_setting.png


BIN
src/main/webapp/images/mo/ico_full.png


BIN
src/main/webapp/images/mo/ico_full_on.png


BIN
src/main/webapp/images/mo/ico_go_save.png


BIN
src/main/webapp/images/mo/ico_like.png


BIN
src/main/webapp/images/mo/ico_paging.png


BIN
src/main/webapp/images/mo/ico_pop_cls.png


BIN
src/main/webapp/images/mo/ico_pop_cls_org.png


BIN
src/main/webapp/images/mo/logo_STYLE24_full.png


BIN
src/main/webapp/images/mo/movloading.gif


BIN
src/main/webapp/images/mo/page_accessApp.jpg


BIN
src/main/webapp/images/mo/page_consentAlarm.jpg


BIN
src/main/webapp/images/mo/pay_kakao.png


BIN
src/main/webapp/images/mo/pay_naver.png


BIN
src/main/webapp/images/mo/pay_payco.png


+ 233 - 0
src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollSession.js

@@ -0,0 +1,233 @@
+/*
+ * Inifinite Scroll Java Script written by gagamel.
+ *
+ * Copyright (c) 2016 gagamel (nogdoo.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2016-04-28 $
+ *
+ * 사용 예)
+ * 		// HTML 태그는 다음과 같은 구조로 되어 있어야 하며
+ * 		// id 명칭은 infiniteContainer, listBoxOuter, listBox 가 필요하다.
+ * 		<section id="infiniteContainer">
+ * 			<div id="listBoxOuter">
+ * 				<ul id="listBox">
+ * 				</ul>
+ *			</div>
+ *		</section>
+ *
+ * 		// JQUERY History 파일과 인피니트 스크롤 관련 자바스크립트 파일을 import 되어 있어야 한다.
+ * 		<script type="text/javascript" src="/ux/plugins/jquery.history.min.js"></script>
+ * 		<script type="text/javascript" src="/ux/plugins/gaga.infinite.scroll.js"></script>
+ *
+ * 		<script type="text/javascript">
+ * 			// 인피니트 스크롤에 대한 History 정보를 가져오기 위해 함수를 호출한다.
+ *			// History 정보가 없을 경우 fnGetInfiniteScrollDataList 함수가 호출된다.
+ * 			$(function() { gagaInfiniteScroll.getHistory(); });
+ *
+ *			// 인피니트 스크롤 이벤트 발생 시 데이터 가져오기
+ *			var fnGetInfiniteScrollDataList = function(pageNum) {
+ *				// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+ *				gagajf.ajaxSubmitForm(document.searchForm, "/goods/list", "json", gagaInfiniteScroll.jsonToHtml);
+ *			}
+ *
+ *			// 인피니트 스크롤 이벤트 발생 시 가져온 데이터를 특정 태그에 append
+ *			// fnDrawInfiniteScrollData(result, pageNum) 함수 구현
+ *			// 		이 함수 내에서의 로직은
+ *			//		1. 가져온 데이터로 HTML 태그를 만든다.
+ *			// 		2. 만든 태그를 append 하는 gagaInfiniteScroll.draw() 함수를 호출
+ *		</script>
+ */
+
+var gagaInfiniteScroll = {
+	pageStatus : {
+		  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
+		, loadPage : 0      // 로드할 페이지
+		, loadAlign : 'not' // 로드 상태(prev, next, not)
+		, historyScroll : 0 //
+		, nowPage : null    // 현재 페이지
+		, pageUrl : {       // page url
+		}
+		, sortGb : ''
+		, sortGbNm : ''
+		, filterHtml : ''
+		, filterStatHtml : ''
+		, totalCount : ''
+	},
+	obj : {
+		  $ajaxBoxOuter : $('#listBoxOuter')
+		, $ajaxBox : $('#listBox')
+		, $window : $(window)
+		, $loadingBar : '<div style="width: 100%; padding-top: 50px; text-align: center;" id="loadingBar"><img src="/ux/plugins/gaga/loader.gif" style="width:25px; height:25px;"/></div>'
+//		, $loadingBar : '<div style="width: 100%; padding-top: 50px; text-align: center;" id="loadingBar"><img src="/images/hsmob/common/loading_bar_01.gif" width="24px" height=" 22px"/></div>'
+	},
+	scrollCheck : function() {
+		var obj = this.obj, stat = this.pageStatus;
+
+		if (obj.$window.scrollTop() >= obj.$ajaxBox.offset().top + obj.$ajaxBox.height() - obj.$window.height()) { // 더보기
+			if (stat.loadAlign == 'not') {
+				var pageLen = this.pageStatus.pageNum.length - 1;
+				var nextPageNum = this.pageStatus.pageNum[pageLen] + 1;
+				this.pageStatus.pageNum.push(nextPageNum);
+				this.pageStatus.loadPage = nextPageNum;
+				stat.loadAlign = 'next';
+				this.getDataList();
+			};
+		}
+	},
+	getDataList : function() {
+		/*if (this.pageStatus.loadAlign == 'prev') {
+			this.obj.$ajaxBoxOuter.prepend($(this.obj.$loadingBar));
+		} else if (this.pageStatus.loadAlign == 'next') {
+			this.obj.$ajaxBoxOuter.append($(this.obj.$loadingBar));
+		};*/
+
+		$(".wrap-loading").removeClass('display-none');
+
+		// 인피니트 스크롤 이벤트에서 호출될 함수(데이터 가져오기 등)
+		// fnGetInfiniteScrollDataList 함수는 개발단에서 구현해야 한다.
+		fnGetInfiniteScrollDataList(this.pageStatus.loadPage);
+	},
+	getHistory : function() {
+		var historyData = sessionStorage.getItem(document.location.href);
+		if(historyData!=null){
+			historyData = JSON.parse(historyData);
+		}else{
+			historyData = {};
+		}
+
+		if (historyData.pageNum === undefined || historyData.pageNum === '' || historyData.htm === undefined || historyData.htm == '') {
+			this.pageStatus.loadPage = 0;
+			this.pageStatus.pageNum[0] = 0;
+			this.pageStatus.loadAlign = 'next';
+			this.pageStatus.historyScroll = 0;
+
+			this.getDataList();
+		} else {
+			this.pageStatus.loadPage = historyData.pageNum;
+			this.pageStatus.pageNum[0] = historyData.pageNum;
+			this.pageStatus.historyScroll = historyData.dataIndex;
+			this.pageStatus.loadAlign = 'next';
+			this.pageStatus.sortGb = historyData.sortGb;
+			this.pageStatus.sortGbNm = historyData.sortGbNm;
+			this.pageStatus.filterHtml = historyData.filterHtml;
+			this.pageStatus.filterStatHtml = historyData.filterStatHtml;
+			this.pageStatus.totalCount = historyData.totalCount;
+
+			gagaInfiniteScroll.draw(historyData.htm);
+		};
+
+		$(window).on('scroll', function() {
+			gagaInfiniteScroll.scrollCheck();
+		});
+	},
+	draw : function(htm, scrollTop, containerHeight) {
+		if (htm == 'not') {
+			$(".wrap-loading").addClass('display-none');
+			this.pageStatus.loadAlign = 'top';
+		} else {
+			var startH = $('#infiniteContainer').height();
+			var $addHtm = $(htm);
+			var $imgs = $addHtm.find('img');
+			var loadCheck = 0;
+			var len = $imgs.length;
+
+			if (scrollTop && containerHeight) {
+			} else {
+			}
+
+			$addHtm.find('img.lazy').lazyload({root: null,
+						rootMargin: "100px",
+						threshold: 0});
+
+			$.each($imgs, function(index) {
+				$imgs.eq(index).on('load',function() {
+					loadCheck++;
+					imgLpadComp();
+				});
+			});
+
+			var imgLpadComp = function() {
+				gagaInfiniteScroll.pushHistory(
+						  gagaInfiniteScroll.pageStatus.nowPage
+						, $(window).scrollTop()
+						, $('#infiniteContainer').height()
+						, gagaInfiniteScroll.pageStatus.loadPage
+						, 0
+						, gagaInfiniteScroll.obj.$ajaxBox.html());
+				if (scrollTop && containerHeight) {
+					gagaInfiniteScroll.obj.$window.scrollTop.scrollTop(0).scrollTop(scrollTop);
+				} else {
+					gagaInfiniteScroll.obj.$window.scrollTop(gagaInfiniteScroll.obj.$window.scrollTop() + 1);
+				}
+			};
+
+			$(".wrap-loading").addClass('display-none');
+
+			// Append HTML
+			this.obj.$ajaxBox.append($addHtm);
+
+			if (scrollTop && containerHeight) {
+				gagaInfiniteScroll.obj.$window.scrollTop.scrollTop(0).scrollTop(scrollTop);
+			} else {
+				$(window).scrollTop($(window).scrollTop() + 1);
+			}
+
+			this.pageStatus.loadAlign = 'not';
+		}
+	},
+	pushHistory : function(page, sScrollTop, sHeight, sPageNum, sDataIndex, sHtml) {
+		var historyData = {
+				state: page
+				, scroll: sScrollTop
+				, height: sHeight
+				, pageUrl: gagaInfiniteScroll.pageStatus.pageUrl
+				, name: gagaInfiniteScroll.pageStatus.nowPage
+				, pageNum : sPageNum
+				, dataIndex : sDataIndex
+				, htm : sHtml
+				, sortGb : gagaInfiniteScroll.pageStatus.sortGb
+				, sortGbNm : gagaInfiniteScroll.pageStatus.sortGbNm
+				, filterHtml : gagaInfiniteScroll.pageStatus.filterHtml
+				, filterStatHtml : gagaInfiniteScroll.pageStatus.filterStatHtml
+				, totalCount : gagaInfiniteScroll.pageStatus.totalCount
+		};
+		historyData = JSON.stringify(historyData);
+		sessionStorage.setItem(document.location.href, historyData);
+
+	},
+	pushLinkHistory : function(pageNum, dataIndex, obj) { // 링크에서 사용
+		var $pageNum = (pageNum || pageNum == 0) ? pageNum : '';
+		var $dataIndex = (dataIndex || dataIndex == 0) ? dataIndex : '';
+		var $html = (obj) ? $(obj).parents('#listBox').html() : '';
+
+		var historyData = {
+					state : gagaInfiniteScroll.pageStatus.nowPage
+					, scroll : $(window).scrollTop()
+					, height : $('#infiniteContainer').height()
+					, pageUrl : gagaInfiniteScroll.pageStatus.pageUrl
+					, name : gagaInfiniteScroll.pageStatus.nowPage
+					, pageNum : $pageNum
+					, dataIndex : $dataIndex
+					, htm : $html
+					, sortGb : gagaInfiniteScroll.pageStatus.sortGb
+					, sortGbNm : gagaInfiniteScroll.pageStatus.sortGbNm
+					, filterHtml : gagaInfiniteScroll.pageStatus.filterHtml
+					, filterStatHtml : gagaInfiniteScroll.pageStatus.filterStatHtml
+					, totalCount : gagaInfiniteScroll.pageStatus.totalCount
+		};
+		historyData = JSON.stringify(historyData);
+		sessionStorage.setItem(document.location.href, historyData);
+
+		return false;
+	},
+	jsonToHtml : function(result) {
+		// Data 가져온 후 실행될 함수
+		// fnDrawInfiniteScrollData 함수는 개발단에서 구현해야 한다.
+		if (result.dataList == "not") // data가 더 이상 없으면
+			fnDrawInfiniteScrollData('not', result.CURRENT_PAGE - 1);
+		else
+			fnDrawInfiniteScrollData(result, result.CURRENT_PAGE - 1);
+	}
+};

Diff do ficheiro suprimidas por serem muito extensas
+ 27 - 0
src/main/webapp/ux/plugins/jquery/jquery.history.min.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
src/main/webapp/ux/plugins/lazyload.min.js


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

@@ -88,6 +88,8 @@ const _PAGE_SOCIAL_MAIN = _frontUrl + "/social/main/form";						// 소설(핫딜
 //== 이벤트 ==/
 const _PAGE_EVENT_MAIN = _frontUrl + "/planning/event/main/form"; 					// 이벤트 메인
 const _PAGE_EVENT_POLL = _frontUrl + "/planning/event/poll/form"; 					// 이벤트 > 설문조사
+const _PAGE_CUSTOMER_GRADE_BENEFIT = _frontUrl + "/planning/event/custgrade/benefit/form"; // 이벤트 회원등급혜택
+
 
 //== 고객센터 ==/
 const _PAGE_FAQ = _frontUrl + "/callcenter/faq/form";									// 고객센터 > FAQ
@@ -1011,6 +1013,24 @@ var cfnGoToPlanDetail = function (planSq) {
     cfnGoToPage(_PAGE_PLANNING_DETAIL + '?planSq=' + planSq);
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 룩북상세로 이동
+ * <pre>
+ *        cfnGoToLookbookDetail(22);
+ * </pre>
+ * @param  : lookbookSq - 룩북 번호. 필수
+ * @since  : 2021/04/06
+ * @author : bin2107
+ */
+var cfnGoToLookbookDetail = function (lookbookSq, brandGroupNo) {
+	var params = '?lookbookSq=' + lookbookSq;
+	if (typeof (brandGroupNo) != 'undefined') params += '&brandGroupNo=' + brandGroupNo;
+
+	cfnGoToPage(_PAGE_LOOKBOOK_DETAIL + params);
+}
+
 /**
  * @type   : function
  * @access : public

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff