Przeglądaj źródła

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

xodud1202 5 lat temu
rodzic
commit
da8b83f21b
68 zmienionych plików z 2791 dodań i 348 usunięć
  1. 10 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 10 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  3. 14 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  4. 27 14
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  5. 11 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  6. 6 6
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  7. 38 30
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  8. 1 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  9. 4 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  10. 40 8
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  11. 32 4
      src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java
  12. 12 0
      src/main/java/com/style24/front/support/security/session/TsfSession.java
  13. 1 0
      src/main/java/com/style24/persistence/domain/Goods.java
  14. 2 2
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  15. 12 0
      src/main/java/com/style24/persistence/domain/Login.java
  16. 7 0
      src/main/java/com/style24/persistence/domain/Plan.java
  17. 226 33
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  18. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  19. 2 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfLogin.xml
  20. 30 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  21. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  22. 2 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  23. 1 3
      src/main/resources/config/application-tsit.yml
  24. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDeliveryFormMob.html
  25. 28 37
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  26. 14 23
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  27. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  28. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  29. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsInstockAlarmFormMob.html
  30. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  31. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html
  32. 168 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html
  33. 113 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html
  34. 262 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  35. 112 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html
  36. 134 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html
  37. 92 14
      src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html
  38. 2 2
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  39. 4 4
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  40. 51 4
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  41. 1 9
      src/main/webapp/WEB-INF/views/web/customer/IdFindFormWeb.html
  42. 32 8
      src/main/webapp/WEB-INF/views/web/customer/PasswordFindFormWeb.html
  43. 1 2
      src/main/webapp/WEB-INF/views/web/customer/PrivacyTrustLayerFormWeb.html
  44. 32 7
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  45. 2 2
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  46. 324 1
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  47. 3 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  48. 4 4
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  49. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealListFormWeb.html
  50. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDeliveryFormWeb.html
  51. 30 18
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  52. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  53. 12 12
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  54. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html
  55. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html
  56. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaFormWeb.html
  57. 5 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  58. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewFormWeb.html
  59. 3 10
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html
  60. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  61. 8 4
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  62. 174 28
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  63. 25 22
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  64. 1 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  65. 1 0
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  66. 431 0
      src/main/webapp/biz/goodsSession.js
  67. 205 0
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scroll.js
  68. 11 4
      src/main/webapp/ux/style24_link.js

+ 10 - 0
src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -16,6 +16,7 @@ import com.style24.persistence.domain.GnbTab;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.Goods;
 
 /**
  * 전시 Dao
@@ -171,4 +172,13 @@ public interface TsfDisplayDao {
 	 * @date 2021. 4. 7
 	 */
 	int getCategoryGoodsCount(GoodsSearch goodsSearch);
+
+	/**
+	 * 카테고리 별 상품 리스트
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 8
+	 */
+	Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch);
 }

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

@@ -342,4 +342,14 @@ public interface TsfPlanningDao {
 	 */
 	Collection<Plan> getCustAttendEntryList(Plan plan);
 	
+	/**
+	 * 기획전/이벤트 댓글
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 8
+	 */
+	Collection<Plan> getReplyList(Plan plan);
+	
 }

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

@@ -75,7 +75,7 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 08
 	 */
 	public Customer getCustomerFindId(Customer customer) {
-		TscSession.setAttribute("maskingYn","Y");
+		TsfSession.setAttribute("maskingYn","Y");
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData(); // 데이터 암호하
 		return customerDao.getCusomterActiveAndDormant(customer);
@@ -972,6 +972,7 @@ public class TsfCustomerService {
 		params.setSiteCd(customer.getSiteCd());
 		Collection<CustGrade> custGradePolicy = customerDao.getCustGradePolicy(params);
 		result.set("custGradePolicy", custGradePolicy);
+
 		CustGrade expctCustGrade;
 		for (CustGrade grade : custGradePolicy) {
 			grade.setCustNo(customer.getCustNo());
@@ -981,6 +982,18 @@ public class TsfCustomerService {
 				return result;
 			}
 		}
+		return result;
+	}
+
+	public GagaMap downloadCustGradeCoupon(Integer custNo) {
+		GagaMap result = new GagaMap();
+		Customer custInfo = getCustomerFindByCustNo(custNo);
+
+
+		// 1. 등급정책 정보
+
+
+
 		return result;
 	}
 }

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

@@ -20,9 +20,10 @@ import com.style24.persistence.domain.Cate4;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
+import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
-import com.style24.persistence.domain.GoodsSearch;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -75,7 +76,7 @@ public class TsfDisplayService {
 	 * @author gagamel
 	 * @date 2021. 3. 11
 	 */
-	@Cacheable(value = "commonGnb", key = "'gnbTab-'.concat(#gnbTab.gtabGb)")
+//	@Cacheable(value = "commonGnb", key = "'gnbTab-'.concat(#gnbTab.gtabGb)")
 	public Collection<GnbTab> getGnbTabList(GnbTab gnbTab) {
 		return displayDao.getGnbTabList(gnbTab);
 	}
@@ -269,7 +270,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 16
 	 */
-	public Collection<MainLayout> getMainLayout(MainLayout mainLayout){
+	public Collection<MainLayout> getMainLayout(MainLayout mainLayout) {
 		return displayDao.getMainLayout(mainLayout);
 	}
 
@@ -280,10 +281,10 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 16
 	 */
-	public Cate4Srch getCate4srch(Cate4Srch cate4Srch){
+	public Cate4Srch getCate4srch(Cate4Srch cate4Srch) {
 		return displayDao.getCate4srch(cate4Srch);
 	}
-	
+
 	/**
 	 * 팝업 목록
 	 *
@@ -295,7 +296,7 @@ public class TsfDisplayService {
 	public Collection<Popup> getPopupList(Popup popup) {
 		popup.setSiteCd(TscConstants.Site.STYLE24.value());
 		return displayDao.getPopupList(popup);
-	} 
+	}
 
 	/**
 	 * 몰메인 MD PICK 목록
@@ -304,21 +305,21 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 30
 	 */
-	public Collection<Contents> getContentsForGoods(Contents contents){
+	public Collection<Contents> getContentsForGoods(Contents contents) {
 		Collection<Contents> contentsList = displayDao.getContentsList(contents);
 		Cate4Srch tempContents = new Cate4Srch();
-		for(Contents data : contentsList){
+		for (Contents data : contentsList) {
 			tempContents.setContentsLoc(data.getContentsLoc());
 			tempContents.setDispOrd(data.getDispOrd());
 			tempContents.setMaxRow(20);
 			tempContents.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
-			if("SMM007".equals(data.getContentsLoc())){
+			if ("SMM007".equals(data.getContentsLoc())) {
 				data.setBannerList(displayDao.getContentsBannerList(data));
 			}
 			data.setGoodsList(goodsDao.getContentsCategoryGoodsList(tempContents));
 		}
 
-		log.info("getContentsForGoods contentsList.size()::{}",contentsList.size());
+		log.info("getContentsForGoods contentsList.size()::{}", contentsList.size());
 
 		return contentsList;
 
@@ -331,7 +332,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 5
 	 */
-	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb){
+	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb) {
 		cate4Srch.setFilterGb(filterGb);
 		return displayDao.getCategoryFilter(cate4Srch);
 	}
@@ -343,7 +344,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 7
 	 */
-	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch){
+	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch) {
 		return displayDao.getCategoryFilterBenefit(cate4Srch);
 	}
 
@@ -354,8 +355,20 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 7
 	 */
-	public int getCategoryGoodsCount(GoodsSearch goodsSearch){
-	return displayDao.getCategoryGoodsCount(goodsSearch);
+	public int getCategoryGoodsCount(GoodsSearch goodsSearch) {
+		return displayDao.getCategoryGoodsCount(goodsSearch);
+	}
+
+	/**
+	 * 카테고리 별 상품 리스트
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 8
+	 */
+	public Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch) {
+		Collection<Goods> goodsList = displayDao.getCategoryGoodsList(goodsSearch);
+		return goodsList;
 	}
 
 }

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

@@ -510,5 +510,16 @@ public class TsfPlanningService {
 		return planningDao.getCustAttendEntryList(plan);
 	}
 
+	/**
+	 * 기획전/이벤트 댓글
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 8
+	 */
+	public Collection<Plan> getReplyList(Plan plan){
+		return planningDao.getReplyList(plan);
+	}
 
 }

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

@@ -21,7 +21,6 @@ import org.springframework.web.servlet.ModelAndView;
 import com.style24.core.biz.service.TscClauseService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.core.support.session.TscSession;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfKakaoService;
 import com.style24.front.biz.thirdparty.NiceCertify;
@@ -223,7 +222,7 @@ public class TsfCustomerController extends TsfBaseController {
 		Customer custInfo = customerService.getCustomerFindId(params);
 		if (custInfo != null) {
 			isFind = true;
-			TscSession.setAttribute("custNo", String.valueOf(custInfo.getCustNo()));
+			TsfSession.setAttribute("custNo", String.valueOf(custInfo.getCustNo()));
 		}
 
 		result.setString("authMethod", customer.getAuthMethod()); // 인증방법
@@ -244,7 +243,7 @@ public class TsfCustomerController extends TsfBaseController {
 		String custNo = "";
 
 		if ("find".equals(pageGb)) { //비밀번호 찾기 사용
-			custNo = TscSession.getAttribute("custNo");
+			custNo = TsfSession.getAttribute("custNo");
 		}
 
 		if ("temp".equals(pageGb)) { // 비밀번호 변경 캠페인, 임시비밀번호로 로그인시 사용, 마이페이지 내정보 관리-비밀번호 수정
@@ -286,7 +285,7 @@ public class TsfCustomerController extends TsfBaseController {
 		if (TsfSession.isLogin()) {
 			custNo = String.valueOf(TsfSession.getInfo().getCustNo());
 		} else {
-			custNo = TscSession.getAttribute("custNo");
+			custNo = TsfSession.getAttribute("custNo");
 		}
 
 		if (StringUtils.isBlank(custNo)) {
@@ -539,7 +538,7 @@ public class TsfCustomerController extends TsfBaseController {
 		result.setBoolean("isFind", false);
 		result.setString("cellPhnno", customer.getCellPhnno());
 
-		TscSession.setAttribute("encData", customer.getEncData());
+		TsfSession.setAttribute("encData", customer.getEncData());
 
 		return result;
 	}
@@ -560,7 +559,7 @@ public class TsfCustomerController extends TsfBaseController {
 		GagaMap result = new GagaMap();
 
 		// 1.세션에 인코딩된 데이터를 가져온다.
-		String encData = TscSession.getAttribute("encData");
+		String encData = TsfSession.getAttribute("encData");
 		customer.setEncData(encData);
 		session.removeAttribute("encData");
 
@@ -880,6 +879,7 @@ public class TsfCustomerController extends TsfBaseController {
 	@PostMapping("/privacy/trust/layer")
 	public ModelAndView getMarketingLayerForm() {
 		ModelAndView mav = new ModelAndView();
+		mav.addObject("clause", clauseService.getClause(TscConstants.Site.STYLE24.value(), "G057_43"));
 		mav.setViewName(super.getDeviceViewName("customer/PrivacyTrustLayerForm"));
 		return mav;
 	}

+ 38 - 30
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -7,14 +7,13 @@ import java.util.HashMap;
 
 import javax.servlet.http.HttpServletResponse;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.style24.core.support.env.TscConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -22,6 +21,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.biz.service.TscLookbookService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfDisplayService;
 import com.style24.front.biz.service.TsfGoodsService;
@@ -35,15 +35,17 @@ import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.Lookbook;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Popup;
 import com.style24.persistence.domain.Social;
-import com.style24.persistence.domain.GoodsSearch;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 전시 Controller
  * 
@@ -131,18 +133,18 @@ public class TsfDisplayController extends TsfBaseController {
 				}
 			}
 
-			if(contentsLoc.equals("SMM006")){
+			if (contentsLoc.equals("SMM006")) {
 				Social social = new Social();
 				social.setSiteCd("G000_10");
 				social.setFrontGb(TsfSession.getFrontGb());
 				mainLayout.setSocialInfo(socialService.getSocialForGoods(social));
 			}
 
-			if(contentsLoc.equals("SMM007")){
+			if (contentsLoc.equals("SMM007")) {
 				mainLayout.setBrandPickList(displayService.getContentsForGoods(contents));
 			}
 
-			if(contentsLoc.equals("SMM009")){
+			if (contentsLoc.equals("SMM009")) {
 				mainLayout.setMdPickList(displayService.getContentsForGoods(contents));
 			}
 
@@ -293,12 +295,12 @@ public class TsfDisplayController extends TsfBaseController {
 			}
 			brandMainLayoutList.add(brandMain);
 		}
-		
-		mav.addObject("preview", paramMap.get("preview") );
+
+		mav.addObject("preview", paramMap.get("preview"));
 		mav.addObject("viewDt", paramMap.get("viewDt"));
 		mav.addObject("viewPage", "G037_31");
 		mav.addObject("popupCateNo", paramMap.get("brandGroupNo"));
-		
+
 		//log.info("brandMainLayoutList::{}", brandMainLayoutList);
 		mav.addObject("brandMainLayoutList", brandMainLayoutList);
 		mav.setViewName(super.getDeviceViewName("display/BrandMainForm"));
@@ -347,11 +349,11 @@ public class TsfDisplayController extends TsfBaseController {
 		cate.setMaxRow(20);
 		mav.addObject("bestGoodsList", goodsService.getContentsCategoryGoodsList(cate));
 
-		mav.addObject("preview", cate.getPreview() );
+		mav.addObject("preview", cate.getPreview());
 		mav.addObject("viewDt", cate.getViewDt());
 		mav.addObject("viewPage", "G037_30");
 		mav.addObject("popupCateNo", cate.getCate1No());
-		
+
 		mav.addObject("params", cate);
 
 		return mav;
@@ -400,8 +402,8 @@ public class TsfDisplayController extends TsfBaseController {
 		Collection<Lookbook> lookbookList = coreLookbookService.getLookbookListForGoods(lookbook);
 		String brandNm = "";
 		String lookbookTitle = "";
-		if(lookbookList != null){
-			for(Lookbook lbInfo : lookbookList){
+		if (lookbookList != null) {
+			for (Lookbook lbInfo : lookbookList) {
 				brandNm = lbInfo.getBrandNm();
 				lookbookTitle = lbInfo.getTitle();
 			}
@@ -455,28 +457,27 @@ public class TsfDisplayController extends TsfBaseController {
 		cate4Srch.setFormalGb("G009_10");
 		cate4Srch.setFrontGb(TsfSession.getFrontGb());
 		cate4Srch.setCustGb(TsfSession.getCustGb());
-		if(cate4Srch.getBrandGroupNo()==null || cate4Srch.getBrandGroupNo().equals("")){
+		if (cate4Srch.getBrandGroupNo() == null) {
 			cate4Srch.setBrandGroupNo(0);
 		}
-		if(cate4Srch.getCate4No()!=null && !cate4Srch.getCate4No().equals("")){
+		if (cate4Srch.getCate4No() != null && !cate4Srch.getCate4No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate4No());
-		} else if(cate4Srch.getCate3No()!=null && !cate4Srch.getCate3No().equals("")){
+		} else if (cate4Srch.getCate3No() != null && !cate4Srch.getCate3No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate3No());
-		} else if(cate4Srch.getCate2No()!=null && !cate4Srch.getCate2No().equals("")){
+		} else if (cate4Srch.getCate2No() != null && !cate4Srch.getCate2No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate2No());
-		} else if(cate4Srch.getCate1No()!=null && !cate4Srch.getCate1No().equals("")){
+		} else if (cate4Srch.getCate1No() != null && !cate4Srch.getCate1No().equals("")) {
 			cate4Srch.setCateNo(cate4Srch.getCate1No());
 		}
 
-		log.info("categoryGoodsListForm cate4Srch::::{}",cate4Srch);
+		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("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
+		mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
 		mav.addObject("cateInfo", cate4Srch);
 
 		return mav;
@@ -491,30 +492,37 @@ public class TsfDisplayController extends TsfBaseController {
 	 */
 	@PostMapping("/category/goods/list")
 	@ResponseBody
-	public GagaMap getGoodsList(GoodsSearch goodsSearch){
+	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
 		GagaMap result = new GagaMap();
+		log.info("getGoodsListgetGoodsListgetGoodsList::::{}", goodsSearch);
 		TscPageRequest pageable = new TscPageRequest((goodsSearch.getPageNo() > 0 ? goodsSearch.getPageNo() - 1 : 0), goodsSearch.getPageSize(), goodsSearch.getPageUnit());
 
 		goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
 		goodsSearch.setFormalGb("G009_10");
 		goodsSearch.setFrontGb(TsfSession.getFrontGb());
 		goodsSearch.setCustGb(TsfSession.getCustGb());
-		if(goodsSearch.getBrandGroupNo()==null || goodsSearch.getBrandGroupNo().equals("")){
+
+		if (goodsSearch.getBrandGroupNo() == null || goodsSearch.getBrandGroupNo().equals("")) {
 			goodsSearch.setBrandGroupNo(0);
 		}
-		if(goodsSearch.getCate4No()!=null && !goodsSearch.getCate4No().equals("")){
+
+		if (goodsSearch.getCate4No() != null && !goodsSearch.getCate4No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate4No());
-		} else if(goodsSearch.getCate3No()!=null && !goodsSearch.getCate3No().equals("")){
+		} else if (goodsSearch.getCate3No() != null && !goodsSearch.getCate3No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate3No());
-		} else if(goodsSearch.getCate2No()!=null && !goodsSearch.getCate2No().equals("")){
+		} else if (goodsSearch.getCate2No() != null && !goodsSearch.getCate2No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate2No());
-		} else if(goodsSearch.getCate1No()!=null && !goodsSearch.getCate1No().equals("")){
+		} else if (goodsSearch.getCate1No() != null && !goodsSearch.getCate1No().equals("")) {
 			goodsSearch.setCateNo(goodsSearch.getCate1No());
 		}
 
 		int totalCnt = displayService.getCategoryGoodsCount(goodsSearch);
-		log.info("totalCnt::::::::::{}",totalCnt);
-		pageable.setTotalCount(0);
+		log.info("totalCnt::::::::::{}", totalCnt);
+		pageable.setTotalCount(totalCnt);
+		goodsSearch.setPageable(pageable);
+		result.set("paging", goodsSearch);
+		result.set("totalCnt", totalCnt);
+		result.set("dataList", displayService.getCategoryGoodsList(goodsSearch));
 		return result;
 	}
 }

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

@@ -773,7 +773,7 @@ public class TsfGoodsController extends TsfBaseController {
 
 		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
 		pageable.setTotalCount(reviewService.getReviewTotalCount(review));
-		review.setPageable(pageable);
+		review.setPageable(pageable);	
 
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());

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

@@ -6,6 +6,7 @@ import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -1185,7 +1186,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 03. 24
 	 */
 	@GetMapping("/review/form")
-	public ModelAndView mypageReviewForm(Review review) {
+	public ModelAndView mypageReviewForm(Review review, Device device) {
 		ModelAndView mav = new ModelAndView();
 		
 		review.setCustNo(TsfSession.getInfo().getCustNo());
@@ -1282,7 +1283,7 @@ public class TsfMypageController extends TsfBaseController {
 	 */
 	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}/{reviewStat}")
 	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo,@PathVariable(value = "ordDtlNo") Integer ordDtlNo
-			,@PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat) {
+			,@PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat, Device device) {
 		Review review = new Review();
 		ModelAndView mav = new ModelAndView();
 		
@@ -1351,7 +1352,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 03. 29
 	 */
 	@GetMapping("/wish/list/form")
-	public ModelAndView mypageWishListForm(WishList wishList) {
+	public ModelAndView mypageWishListForm(WishList wishList, Device device) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("mypage/MypageWishListForm"));
 		wishList.setSiteCd(TscConstants.Site.STYLE24.value());
 		wishList.setFrontGb(TsfSession.getFrontGb());

+ 40 - 8
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -1,5 +1,6 @@
 package com.style24.front.biz.web;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
@@ -27,13 +28,14 @@ import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Poll;
 import com.style24.persistence.domain.Review;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 
@@ -185,13 +187,11 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setTmplType("G082_51");
 		mav.addObject("goods2Info", planningService.getPlanGoodsDisplayList(plan));
 
-		//상품4열 전시
+		// 상품4열 전시
 		plan.setTmplType("G082_52");
 		mav.addObject("goods4Info", planningService.getPlanGoodsDisplayList(plan));
-
-//		mav.addObject("couponList", planningService.getPlusCouponList(plan));
-//
-//		// 코너 목록
+		
+		// 코너 목록
 		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
 		mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
 		
@@ -231,6 +231,26 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 기획전/이벤트 댓글 리스트
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 04. 08
+	 */
+	@GetMapping("/reply/list")
+	@ResponseBody
+	public GagaMap getReplyList(@RequestParam(value="planSq")Integer planSq) {
+		GagaMap result = new GagaMap();
+		Plan plan = new Plan();
+		plan.setPlanSq(planSq);
+		
+		result.set("replyList",planningService.getReplyList(plan));
+		result.set("custNo",TsfSession.getInfo().getCustNo());
+		return result;
+	}
+
+	
 	/**
 	 * 기획전 쿠폰 상세보기 모달
 	 *
@@ -325,7 +345,7 @@ public class TsfPlanningController extends TsfBaseController {
 	 */
 	@GetMapping("/event/main/list")
 	@ResponseBody
-	public Collection<Plan> getPlanningEventMainList(Plan plan) {
+	public Collection<Plan> getPlanningEventMainList(Plan plan, Device device) {
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setFrontGb(TsfSession.getFrontGb());
 		plan.setCustGb(TsfSession.getCustGb());
@@ -476,7 +496,7 @@ public class TsfPlanningController extends TsfBaseController {
 			customer.setCustNo(TsfSession.getInfo().getCustNo());
 			customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
 
-			mav.addObject("exptCustGrdeMap", customerService.getExpectedCustGrde(customer));
+			mav.addObject("exptCustGradeMap", customerService.getExpectedCustGrde(customer));
 			mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
 		}
 
@@ -484,6 +504,18 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 회원등급 쿠폰 다운로드
+	 *
+	 * @return GagaMap
+	 * @author jsshin
+	 * @since 2021. 04. 08
+	 */
+	@GetMapping("/event/custgrade/coupon/down")
+	public GagaMap downCustGradeCoupon() {
+		return customerService.downloadCustGradeCoupon(TsfSession.getInfo().getCustNo());
+	}
+
 	
 	/**
 	 * 출석체크

+ 32 - 4
src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpSession;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
 
@@ -48,16 +49,21 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 		"/customer/dormant/certify/complete/form",	// 휴면해제
 		"/customer/certification/form"				// 본인인증화면
 	};
-	private static final int CHANG_PWD_CAMPAIGN_DAY = 90; // 비밀번호 변경 캠페인일자
+	private static final int CHANG_PWD_CAMPAIGN_DAY = 90;	// 비밀번호 변경 캠페인일자
 
 	private static final String CHANG_TEMP_PWD = "Y";	//임시비밀번호여부
 
+	private static final String GOODS_DETAIL_FORM = "/goods/detail/form";	// 주문상세 URL
+
 	@Autowired
 	private TsfLoginService loginService;
 
 	@Autowired
 	private TsfCartService cartService;
 
+	@Value("${has-ssl}")
+	private String hasSsl;
+
 	@Override
 	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
 		// 로그인 상세 정보
@@ -76,9 +82,14 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 		// 로그인이력 생성
 		loginService.createLoginHistory(custNo);
 
+		// 장바구니 번호
+		String cartSqArr = TsfSession.getAttribute("cartSqArr");
+
 		// 세션 생성
 		this.createSession(request, loginDetails);
 
+		boolean isSslServer = Boolean.parseBoolean(hasSsl);
+
 		// 자동로그인용 RememberMe 쿠키 및 토큰 생성
 		if (request.getParameter("rememberMe") != null && request.getParameter(TsfConstants.REMEMBER_ME_PARAMETER).equals("true")) {
 			Date expiry = new Date(System.currentTimeMillis() + (1000 * TsfConstants.REMEMBER_ME_LIMIT));
@@ -86,7 +97,11 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 			String remembermeToken = Base64.getEncoder().encodeToString((TsfConstants.REMEMBER_ME_KEY + ":" + md5HexToken).getBytes());
 
 			// RememberMe 쿠키 생성
-			GagaCookieUtil.setSecureCookie(response, TsfConstants.CK_PREFIX + "_remember-me", remembermeToken, TsfConstants.REMEMBER_ME_LIMIT);
+			if (isSslServer) {
+				GagaCookieUtil.setSecureCookie(response, TsfConstants.CK_PREFIX + "_remember-me", remembermeToken, TsfConstants.REMEMBER_ME_LIMIT);
+			} else {
+				GagaCookieUtil.setCookie(response, TsfConstants.CK_PREFIX + "_remember-me", remembermeToken, TsfConstants.REMEMBER_ME_LIMIT);
+			}
 
 			// 로그인유지토큰 생성
 			loginService.createPersistentToken(custNo, remembermeToken, expiry);
@@ -118,14 +133,27 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 
 		// 비밀번호 변경 캠페인 일자
 		if (loginDetails.getLoginInfo().getPwdChgDay() >= CHANG_PWD_CAMPAIGN_DAY) {
-			returnUrl ="/customer/password/campaign/form";
+			returnUrl = "/customer/password/campaign/form";
 		}
 
 		// 임시비밀번호로 로그인 한 경우
 		if (CHANG_TEMP_PWD.equals(loginDetails.getLoginInfo().getTempPasswdYn())) {
-			returnUrl ="/customer/password/change/form?pageGb=temp";
+			returnUrl = "/customer/password/change/form?pageGb=temp";
 		}
 
+		// 상품상세 바로구매 > 로그인 한 경우
+		if (returnUrl.indexOf(GOODS_DETAIL_FORM) > -1)  {
+			if (StringUtils.isNotBlank(cartSqArr)) {
+				returnUrl = "/order/form?cartSqArr="+ cartSqArr;
+			}
+		}
+
+		if (isSslServer) {
+			// 로그인 성공 쿠키로 저장 (마케팅 스크립트용)
+			GagaCookieUtil.setSecureCookie(response, TsfConstants.CK_PREFIX + "_login_success", "Y", 1*60);
+		} else {
+			GagaCookieUtil.setCookie(response, TsfConstants.CK_PREFIX + "_login_success", "Y", 1*60);
+		}
 
 		GagaMap result = new GagaMap();
 		result.setString("status", "OK");

+ 12 - 0
src/main/java/com/style24/front/support/security/session/TsfSession.java

@@ -114,4 +114,16 @@ public class TsfSession extends GagaSession {
 		return "";
 	}
 
+	/**
+	 * 세션 값 삭제
+	 * @param name - 명칭
+	 */
+	public static void removeAtrribute(String name) {
+		HttpServletRequest request = getHttpServletRequest();
+		HttpSession session = request.getSession();
+		if (session != null && session.getAttribute(name) != null) {
+			session.removeAttribute(name);
+		}
+	}
+
 }

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

@@ -150,6 +150,7 @@ public class Goods extends TscBaseDomain {
 	private int weight;				// 몸무게
 	private Integer reviewSq;
 	private String goodsStatNm;
+	private String regDtMonth;
 
 	private String sizeGb;		// 사이즈구분(T:상의, B:하의, S:신발)
 

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

@@ -59,8 +59,8 @@ public class GoodsSearch extends TscBaseDomain {
     private String  filterNm;
 
     private TscPageRequest pageable;				// 페이징
-    private int pageNo;
-    private int pageSize;
+    private int pageNo = 1;
+    private int pageSize = 50;
     private int pageUnit = 10;
     private String sortGb;
 

+ 12 - 0
src/main/java/com/style24/persistence/domain/Login.java

@@ -35,6 +35,8 @@ public class Login extends TscBaseDomain {
 	private String custStat;		// 고객상태
 	private String cellPhnno;		// 휴대전화번호
 	private String email;			// 이메일
+	private String birthYmd;		// 생년월일
+	private String sexGb;			// 성별
 	private String snsType;			// SNS유형
 	private String snsId;			// SNS가입ID
 	private int loginFailCnt;		// 로그인실패건수
@@ -63,6 +65,16 @@ public class Login extends TscBaseDomain {
 		this.email = CryptoUtils.decryptAES(this.email);
 		return this.email;
 	}
+
+	public String getBirthYmd() {
+		this.birthYmd = CryptoUtils.decryptAES(this.birthYmd);
+		return this.birthYmd;
+	}
+
+	public String getSexGb() {
+		this.sexGb = CryptoUtils.decryptAES(this.sexGb);
+		return this.sexGb;
+	}
 	// 암호화 대상 복호화 처리 =================================================
 
 }

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

@@ -4,6 +4,7 @@ import java.util.Collection;
 import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 
@@ -340,5 +341,11 @@ public class Plan extends TscBaseDomain {
 	private String likeIt;			// 위시리스트담은상품
 	private int maxRow;				// 최대ROW수
 	private Integer exceptPlanSq;	// 제외할기획전번호
+	private String custId;			// 고객ID
+	// Masking
+	public String getMaskingCustId() {
+		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
+	}
+		
 
 }

+ 226 - 33
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -593,12 +593,12 @@
 		/* TsfDisplay.getCategoryFilter */
 		SELECT
 		<choose>
-			<when test="filterGb != null and filterGb =='SIZE'">
+		     <when test="filterGb != null and filterGb =='SIZE'">
 		SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
-			</when>
-			<otherwise>
+		     </when>
+		     <otherwise>
 		FILTER_CD
-			</otherwise>
+		     </otherwise>
 		</choose>
 		, FILTER_NM
 		FROM TB_CATE_FILTER
@@ -612,37 +612,230 @@
 		ORDER BY DISP_ORD
 	</select>
 
-	<!-- 카테고리별 상품 총 수 -->
-	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
-		/* TsfDisplay.getCategoryGoodsCount */
-		SELECT COUNT(1) AS TOTCNT
-		FROM (SELECT A.GOODS_CD
-		           , A.CATE_NO
-		           , A.DISP_ORD
-		           , A.REG_NO
-		           , A.REG_DT
-		      FROM TB_CATE_GOODS A
-		      WHERE 1 = 1
-		        AND EXISTS(SELECT 1
-		                    FROM TB_CATE_4SRCH
-		                    WHERE 1 = 1
-		                      AND LEAF_CATE_NO = A.CATE_NO
-		                      AND CATE1_NO = #{cate1No}
-		                    <if test="cate2No != null and cate2No != ''">
-		                     AND CATE2_NO = #{cate2No}
-							</if>
-		                    <if test="cate3No != null and cate3No != ''">
+	<!-- 상품 카테고리 필터 중 혜택 -->
+	<select id="getCategoryFilterBenefit" parameterType="Cate4srch" resultType="GoodsSearch">
+		/* TsfDisplay.getCategoryFilterBenefit */
+		SELECT	GB.BENEFIT_GB AS FILTER_CD
+		      , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		             WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		             WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		             WHEN GB.BENEFIT_GB = '40' THEN '신상' ELSE '' END AS FILTER_NM
+		FROM	TB_GOODS_BENEFIT GB
+		INNER JOIN TB_CATE_GOODS CG ON GB.GOODS_CD = CG.GOODS_CD
+		WHERE	1=1
+		  AND	EXISTS (
+		                  SELECT 1
+		                  FROM	 TB_CATE_4SRCH
+		                  WHERE	 1=1
+		                    AND	 LEAF_CATE_NO = CG.CATE_NO
+		                    AND	 CATE1_NO = #{cate1No}
+		                  <if test="cate2No != null and cate2No != ''">
+		                    AND CATE2_NO = #{cate2No}
+		                  </if>
+		                  <if test="cate3No != null and cate3No != ''">
 		                    AND CATE3_NO = #{cate3No}
-							</if>
-		                    <if test="cate4No != null and cate4No != ''">
+		                  </if>
+		                  <if test="cate4No != null and cate4No != ''">
 		                    AND CATE4_NO = #{cate4No}
-							</if>
-		                    <if test="cate5No != null and cate5No != ''">
+		                  </if>
+		                  <if test="cate5No != null and cate5No != ''">
 		                    AND CATE5_NO = #{cate5No}
-		                    </if>
-				  )
-		) A
-		   , TB_GOODS C
-		WHERE A.GOODS_CD = C.GOODS_CD
+		                  </if>
+		                )
+		GROUP BY GB.BENEFIT_GB
+	</select>
+
+	<!-- 카테고리별 상품 총 수 -->
+	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
+		/* TsfDisplay.getCategoryGoodsCount */
+		SELECT COUNT(1) AS CNT
+		  FROM TB_GOODS G
+		  JOIN TB_CATE_GOODS CG ON G.GOODS_CD = CG.GOODS_CD
+		  JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD AND B.USE_YN = 'Y'
+		  JOIN TB_SITE_BRAND SB ON G.BRAND_CD = SB.BRAND_CD AND SB.USE_YN = 'Y'
+		  JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO AND BG.USE_YN = 'Y'
+		  JOIN TB_GOODS_STOCK S ON G.GOODS_CD = S.GOODS_CD
+		  LEFT OUTER JOIN TB_GOODS_SUMMARY SU ON G.GOODS_CD = SU.GOODS_CD
+		WHERE 1=1
+		  AND CG.GOODS_CD = G.GOODS_CD
+		  AND CG.GOODS_CD = S.GOODS_CD
+		  AND G.BRAND_CD = B.BRAND_CD
+		  AND B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		  AND CG.GOODS_CD = S.GOODS_CD
+		  AND EXISTS (
+		               SELECT 1
+		               FROM TB_CATE_4SRCH
+		               WHERE 1 = 1
+		                 AND LEAF_CATE_NO = CG.CATE_NO
+		                 AND SITE_CD = #{siteCd}
+		                 AND CATE_GB = 'G032_101' /*BY ITEM*/
+		                 AND CATE_TYPE = 'G031_10'
+		                 AND CATE1_NO = #{cate1No}
+		                 <if test="cate2No != null and cate2No != ''">
+		                 AND CATE2_NO = #{cate2No}
+		                 </if>
+		                 <if test="cate3No != null and cate3No != ''">
+		                 AND CATE3_NO = #{cate3No}
+		                 </if>
+		                 <if test="cate4No != null and cate4No != ''">
+		                 AND CATE4_NO = #{cate4No}
+		                 </if>
+		                 <if test="cate5No != null and cate5No != ''">
+		                 AND CATE5_NO = #{cate5No}
+		                 </if>
+		                 )
+		  AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		  AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		  AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		  AND S.STOCK_QTY > 0 /*재고있는상품*/
+	</select>
+
+	<select id="getCategoryGoodsList" parameterType="GoodsSearch" resultType="Goods">
+		/* TsfDisplay.getCategoryGoodsList */
+		WITH TAB_GOODS AS (
+		     SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		          , G.GOODS_CD           /*상품코드*/
+		          , G.GOODS_NM           /*상품명*/
+		          , G.GOODS_GB           /*상품구분*/
+		          , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		          , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		          , G.ORDER_MADE_YN      /*주문제작여부*/
+		          , G.GOODS_TNM          /*상품타이틀명*/
+		          , G.MAIN_COLOR_CD      /*대표색상코드*/
+		          , G.LIST_PRICE         /*정상가(최초판매가)*/
+		          , G.CURR_PRICE         /*현재판매가*/
+		          , G.REG_DT             /*등록일시*/
+		          , G.NUMB
+		     FROM   (
+		          SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM
+		               ELSE BG.BRAND_GROUP_KNM
+		               END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		               , G.GOODS_CD                                               /*상품코드*/
+		               , G.GOODS_NM                                               /*상품명*/
+		               , G.GOODS_GB                                               /*상품구분*/
+		               , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		               , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		               , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		               , G.GOODS_TNM                                              /*상품타이틀명*/
+		               , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		               , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		               , G.CURR_PRICE                                             /*현재판매가*/
+		               , G.REG_DT                                                 /*등록일시*/
+		               , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
+		                                          , G.REG_DT DESC
+		                                          , G.GOODS_CD) AS NUMB
+		          FROM	TB_GOODS G
+		          JOIN	TB_CATE_GOODS CG ON G.GOODS_CD = CG.GOODS_CD
+		          JOIN	TB_BRAND B ON G.BRAND_CD = B.BRAND_CD AND B.USE_YN = 'Y'
+		          JOIN	TB_SITE_BRAND SB ON G.BRAND_CD = SB.BRAND_CD AND SB.USE_YN = 'Y'
+		          JOIN	TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO AND BG.USE_YN = 'Y'
+		          JOIN	TB_GOODS_STOCK S ON G.GOODS_CD = S.GOODS_CD
+		          LEFT OUTER JOIN TB_GOODS_SUMMARY SU ON G.GOODS_CD = SU.GOODS_CD
+		          WHERE 1=1
+		          AND CG.GOODS_CD = G.GOODS_CD
+		          AND CG.GOODS_CD = S.GOODS_CD
+		          AND G.BRAND_CD = B.BRAND_CD
+		          AND B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		          AND CG.GOODS_CD = S.GOODS_CD
+		          AND EXISTS (
+		                        SELECT 1
+		                        FROM TB_CATE_4SRCH
+		                        WHERE 1 = 1
+		                        AND LEAF_CATE_NO = CG.CATE_NO
+		                        AND SITE_CD = #{siteCd}
+		                        AND CATE_GB = 'G032_101' /*BY ITEM*/
+		                        AND CATE_TYPE = 'G031_10'
+		                        AND CATE1_NO = #{cate1No}
+		                        <if test="cate2No != null and cate2No != ''">
+		                        AND CATE2_NO = #{cate2No}
+		                        </if>
+		                        <if test="cate3No != null and cate3No != ''">
+		                        AND CATE3_NO = #{cate3No}
+		                        </if>
+		                        <if test="cate4No != null and cate4No != ''">
+		                        AND CATE4_NO = #{cate4No}
+		                        </if>
+		                        <if test="cate5No != null and cate5No != ''">
+		                        AND CATE5_NO = #{cate5No}
+		                        </if>
+		              )
+		          AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		          AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		          AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		          AND S.STOCK_QTY > 0 /*재고있는상품*/
+		          ) G
+		     WHERE  1=1
+		     <if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+		     AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		     </if>
+		)
+		, TAB_GOODS_IMG AS (
+		/* 상품의 이미지 */
+		SELECT GOODS_CD
+		,MAX(SYS_IMG_NM) AS SYS_IMG_NM
+		,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		FROM (
+		SELECT G.GOODS_CD
+		, CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		, CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		FROM   TAB_GOODS G
+		, TB_GOODS_IMG GI
+		WHERE  G.GOODS_CD = GI.GOODS_CD
+		AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		) Z
+		GROUP BY GOODS_CD
+		)
+		, TAB_GOODS_VIDEO AS (
+		/* 상품의 동영상 목록 */
+		SELECT GOODS_CD
+		, MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		, MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
+		, MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		, MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
+		FROM   (
+		SELECT G.GOODS_CD
+		, V.VIDEO_GB
+		, V.VIDEO_VAL
+		, VD.REG_DT
+		, RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		FROM   TAB_GOODS G
+		, TB_VIDEO_DISPLOC VD
+		, TB_VIDEO V
+		WHERE  G.GOODS_CD = VD.DISPLOC_VAL
+		AND    VD.VIDEO_SQ = V.VIDEO_SQ
+		AND    VD.DISPLOC_GB = 'G' /*상품*/
+		AND    VD.DISP_YN = 'Y'
+		AND    V.DISP_YN ='Y'
+		) Z
+		GROUP  BY GOODS_CD
+		)
+		SELECT	G.BRAND_GROUP_NM
+		      , G.GOODS_CD
+		      , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		      , G.GOODS_TNM
+		      , G.MAIN_COLOR_CD
+		      , G.LIST_PRICE
+		      , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
+		      , GI.SYS_IMG_NM
+		      , GI.SYS_IMG_NM2
+		      , GV.VIDEO_GB_M
+		      , GV.VIDEO_VAL_M
+		      , GV.VIDEO_GB_S
+		      , GV.VIDEO_VAL_S
+		      <choose>
+		      	<when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		      		, IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		      	</when>
+		      	<otherwise>
+		      		, ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		      	</otherwise>
+		      </choose>
+		FROM	TAB_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+		AND W.CUST_NO = #{custNo}
+		</if>
 	</select>
 </mapper>

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

@@ -817,7 +817,7 @@
 		SELECT A.GOODS_CD
 		     , A.COMPS_GOODS_CD
 		     , G.GOODS_NM AS COMPS_GOODS_NM
-		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS COMPS_GOODS_FULL_NM /*상품FULL명*/
 		     , A.QTY
 		     , G.BRAND_CD
 		     , G.GOODS_STAT

+ 2 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfLogin.xml

@@ -29,6 +29,8 @@
 		     , TEMP_PASSWD_YN                                            /*임시비밀번호여부*/
 		     , IFNULL(DATEDIFF(NOW(),PASSWD_CHG_DT),0) AS PWD_CHG_DAY    /*비밀번호변경일자*/
 		     , CI                                                        /*CI본인인증여부*/
+		     , BIRTH_YMD                                                 /*생년월일*/
+		     , SEX_GB                                                    /*성별*/
 		FROM   TB_CUSTOMER A
 		WHERE  1 = 1
 		<choose>

+ 30 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1200,4 +1200,34 @@
 		AND PLAN_SQ = #{planSq}
 		AND ENTRY_CUST_NO = #{custNo}
 	</select>
+	
+	<!-- 댓글 리스트  (수정필)-->
+	<select id="getReplyList" resultType="Plan" parameterType="Plan">
+		/* TsfPlanning.getReplyList */	
+		SELECT Z.*
+		      ,(SELECT CUST_ID FROM TB_CUSTOMER WHERE CUST_NO = Z.ENTRY_CUST_NO) AS CUST_ID
+		FROM 
+		(		
+			SELECT PE.PLAN_ENTRY_SQ
+			     , PE.PLAN_SQ
+			     , PE.ENTRY_CUST_NO
+			     , DATE_FORMAT(PE.ENTRY_DT,'%Y-%m-%d') AS ENTRY_DT
+			     , PE.ENTRY_VAL1
+			     , PE.ENTRY_VAL2
+			     , PE.ENTRY_VAL3
+			     , PE.ENTRY_VAL4
+			     , PE.ENTRY_VAL5
+			     , PE.ENTRY_VAL6
+			     , PE.ENTRY_VAL7
+			     , PE.ENTRY_VAL8
+			     , PE.REG_NO
+			     , PE.REG_DT
+			     , PE.UPD_NO
+			     , PE.UPD_DT
+			FROM TB_PLAN_ENTRY PE
+			WHERE 1=1
+		    AND PE.PLAN_SQ = #{planSq}
+		    ORDER BY REG_NO DESC
+		)Z
+	</select>
 </mapper>

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

@@ -610,7 +610,7 @@
 				  FROM TB_ORDER O
 				 INNER JOIN TB_ORDER_DETAIL OD
 				    ON O.ORD_NO = OD.ORD_NO
-				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60) -- 구매 확정인것만
+				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
 				 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
 				    ON OD.ORD_NO = ODI.ORD_NO
 				   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
@@ -646,7 +646,7 @@
 					</otherwise>
 				</choose>
 				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
-				AND O.CUST_NO = 100000
+				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = 'G000_10'
      			<if test="ordNo!=null and ordNo != ''">

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

@@ -30,13 +30,14 @@
 		/* TsfWishlist.getWishListGoodsList*/
 		SELECT Z.*
 			      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
+			      ,DATE_FORMAT(Z.REG_DT,'%Y.%m') AS REG_DT_MONTH 
 			FROM
 			(
 			WITH TAB_PLAN_GOODS AS (
 			    SELECT W.AF_LINK_CD 
 			          ,W.CONTENTS_LOC 
 			          ,W.CUST_NO 
-			          ,DATE_FORMAT(W.REG_DT,'%Y.%m') AS REG_DT 
+			          ,W.REG_DT
 			          ,CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
 			                    BG.BRAND_GROUP_ENM
 			                ELSE

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

@@ -20,10 +20,8 @@ logging:
 
 domain:
     admin: //tdadmin.style24.com
-    front: //ts5000.ipdisk.co.kr
-    style24: //tdfront.style24.com
+    front: //tdfront.style24.com
     image: //tdimage.style24.com
-    cdnimage: //tdimage.style24.com
     uximage: //tdimage.style24.com
 
 upload:

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

@@ -23,7 +23,7 @@
 					<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'}+'\';'">
+								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=40'}" 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>

+ 28 - 37
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -49,7 +49,7 @@
 							<div class="swiper-slide" th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-							<div class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></div></div>
+							<div class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></div></div>
 							</th:block>
 						</div>
 						<!-- Add Pagination -->
@@ -103,7 +103,7 @@
 					<ul>
 						<li th:each="goodsOption1, status : ${goodsOption1List}">
 							<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-								<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+								<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="">
 							</a>
 						</li>
 					</ul>
@@ -219,7 +219,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -241,7 +241,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -273,7 +273,7 @@
 				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" >
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 							</th:block>
 					</div>
 				</div>
@@ -405,7 +405,7 @@
 							<div class="swiper-slide"  th:each="bestReview, status : ${bestReviewList}"  >
 								<!-- 베스트 리뷰 등록시 노출 -->
 								<div class="best_review">
-									<a href="javascript:void(0);">
+									<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])">
 										<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">
 											<span class="star">
 												<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
@@ -572,7 +572,7 @@
 							<ul>
 								<li th:each="goodsOption1, status : ${goodsOption1List}">
 									<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-										<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+										<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm+'?RS=50'}" alt="">
 									</a>
 								</li>
 							</ul>
@@ -1607,7 +1607,7 @@
 			$(".pic_list > div").hide();
 			$(".pic_list > div").eq(pic_index).fadeIn();
 		});
-		
+
 		//슬라이드 - 베스트리뷰팝업 
 		var bestreviewdetailSwiper = new Swiper('.pd_bestreviewdetail_pop .area_slider .swiper-container', {
 			observer: true,
@@ -1630,31 +1630,30 @@
 			},
 		});
 
-		//팝업 - 리뷰
-		$(document).on('click','#btn_pdReview_pop',function(e){
-			$("#pdReviewPop").modal("show");
-			$('#pdReviewPop .modal-body .pop_cont').load('pd_review_pop.html');
-			return false;
-		})
+		$(document).on('click','.pd_bestreviewdetail_pop .thumblist ul li',function(e){
 
-		//팝업 - 베스트리뷰
-		$(document).on('click','#btn_pdBestReview_pop a',function(e){
-			$("#pdBestReviewPop").modal("show");
-			return false;
-		})
+			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
+			$(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
+			$(this).find(".pic").addClass('active');
 
-		//팝업 - 포토/영상 리뷰 (detail)
-		$(document).on('click','.area_rv_photo .photo_list a, .area_rv_all .review_list .photo_list a, .pd_photoreviewlist_pop .photo_list ul li a',function(e){
-			$("#pdPhotoReviewDetailPop").modal("show");
+			var thumbIndex = $(this).index();
+			var thumbImg = $(this).find('.pic .thumb').attr('style');
+			var thumbImgSrc = thumbImg.split("background-image:url(")[1];
+			thumbImgHtml = "<img src="+ thumbImgSrc +" alt=''>";
+			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbImgHtml);
+			
 			return false;
-		})
-
-		//팝업 - 포토/영상 리뷰 (list)
-		$(document).on('click','#btn_more_photoreview',function(e){
-			$("#pdPhotoReviewListPop").modal("show");
+		});
+			
+		// 포토,베스트리뷰숨김
+		var review_open=$(".btn_review_open");
+		$(document).on('click','.btn_review_open',function(e){
+			$(this).toggleClass('active');
+			$(this).next(".review_list").toggleClass('active');
 			return false;
-		})
-
+		});
+		
+		
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
 			$(".Purchase_pop .pop_option_select").show();
@@ -1666,14 +1665,6 @@
 			return false;
 		});
 
-		// 포토,베스트리뷰숨김
-		var review_open=$(".btn_review_open");
-		$(document).on('click','.btn_review_open',function(e){
-			$(this).toggleClass('active');
-			$(this).next(".review_list").toggleClass('active');
-			return false;
-		});
-		
 		fnOptionSoldout();
 		
 		// 광고 스크립트용

+ 14 - 23
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -17,7 +17,7 @@
 <!-- 상품문의 리스트 내용 -->
 <form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 <input type="hidden" name="pageNo"  value ="1"/>
-<input type="hidden" name="pageSize" value ="20"/>
+<input type="hidden" name="pageSize" value ="3"/>
 <input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 <div class="pd_qnalist">
 	<div class="info_txt">
@@ -62,7 +62,7 @@
 </div>
 </form>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scroll.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
@@ -93,6 +93,7 @@
 	}
 
 	var fnGoodsQnaListSearch = function() {
+		fnGoodsQnaInfiniteScrollInit();
 		gagaInfiniteScroll.getHistory();
 	}
 
@@ -154,33 +155,23 @@
 
 	// 인피니트 스크롤 초기화
 	var fnGoodsQnaInfiniteScrollInit = function(){
-		 sessionStorage.removeItem(document.location.href);
+		// sessionStorage.removeItem(document.location.href);
+		History.replaceState(null, null);
+		gagaInfiniteScroll.pageStatus = {
+				  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
+				, loadPage : 0      // 로드할 페이지
+				, loadAlign : 'not' // 로드 상태(prev, next, not)
+				, historyScroll : 0 //
+				, nowPage : null    // 현재 페이지
+				, pageUrl : {       // page url
+				}
+		}
 		//History 초기화
 		$("#listBox").html("");
 	}
 	
-	// 왜 안될가?
-	// 사파리 - 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();
-		
 	});
 	
 /*]]>*/

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

@@ -458,7 +458,7 @@
 				</li>
 			</ul>
 			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
-			<div th:if="${#lists.size(photoReviewList) >= 8}">
+			<div th:if="${#lists.size(photoReviewList) >= 1}">
 				<div>
 					<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])"><span>더 보기</span></button>
 				</div>	

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

@@ -19,7 +19,7 @@
 <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="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=80'}');|"><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>

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

@@ -31,7 +31,7 @@
 						<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}">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=70'}">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

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

@@ -30,7 +30,7 @@
 							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit 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'}+'\';'">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=156'}" 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>

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

@@ -23,7 +23,7 @@
 					<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'}+'\';'">
+								<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=40'}" 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>

+ 168 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html

@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewDetailFormMob.html
+ * @desc	: 상품평 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<th:block th:if="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">베스트 리뷰</h5>
+			</th:block>
+			<th:block th:unless="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">
+				<button type="button" id="btn_more_photoreview"></button>
+				포토/영상리뷰
+			</h5>
+			</th:block>
+		</div>
+		<div class="modal-body" th:if="${reviewList != null and !reviewList.empty}">
+			<div class="pop_cont" th:each="review, status : ${reviewList}" >
+				<!-- 리뷰사진영역 -->
+					<div class="area_slider">
+						<div class="swiper-container thumb_list">
+							<div class="swiper-wrapper">
+								<th:block th:if="${review.reviewAttachList != null and !review.reviewAttachList.empty}" >
+								<th:block th:each="reviewAttach, attachStatus : ${review.reviewAttachList}" th:if="${attachStatus.first}">
+								<div class="swiper-slide">
+									<div class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}">
+										<th:block th:if="${reviewAttach.fileGb == 'M'}">
+											<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">
+											<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">
+										</video>
+										</th:block>
+										<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+											<img th:src="${imgUrl+'/'+reviewAttach.sysFileNm}" alt="">
+										</th:block>
+									</div>
+								</div>
+								</th:block>
+								</th:block>
+								<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
+									<div class="swiper-slide"><div class="thumb nodata"><img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=358'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" alt=""></div></div><!-- 이미지 없으면 calss .nodata  -->
+								</th:block>
+							</div>
+							<!-- Add Pagination -->
+							<div class="swiper-pagination"></div>
+						</div>
+					</div>
+				<!-- //리뷰사진영역 -->
+				<!-- 리뷰내용 -->
+				<div class="pd_review best">
+					<div class="area_rv_all">
+						<div class="btn_review_open">리뷰오픈</div>
+						<div class="review_list">
+							<ul>
+								<li>
+									<div class="review">
+										<div class="info_box">
+											<div class="star_score" h:with="starScore=${#numbers.formatDecimal((review.score*100/5), 0,0)}">
+												<span class="star">
+													<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+												</span>
+											</div>
+											<div class="writer">
+												<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
+												<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
+											</div>
+										</div>
+										<div class="response_box">
+											<div>
+												<dl>
+													<div th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}" th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}">
+														<dt >구매옵션</dt>
+														<dd th:text="${reviewGoods.optCd1 +' / '+ reviewGoods.optCd2}">베이지 / 100</dd>
+													</div>
+													<div>
+														<dt>키/몸무게</dt>
+														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
+															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
+														</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="txt_review_box">
+											<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">옷</p>
+										</div>
+										<div class="response_box2"  th:if="${not #strings.isEmpty(review.sizeGb)}">
+											<div>
+												<dl>
+													<div>
+														<dt>사이즈</dt>
+														<dd th:text="${review.scoreSizeNm}">작음</dd>
+													</div>
+													<div>
+														<dt>컬러</dt>
+														<dd th:text="${review.scoreColorNm}">밝음</dd>
+													</div>
+													<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>핏</dt>
+														<dd th:text="${review.scoreFitNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>두께감</dt>
+														<dd th:text="${review.scoreThickNm}">적당함</dd>
+													</div>
+													</th:block>
+													<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>무게감</dt>
+														<dd th:text="${review.scoreWeightNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>볼너비</dt>
+														<dd th:text="${review.scoreBallNm}">적당함</dd>
+													</div>
+													</th:block>
+												</dl>
+											</div>
+										</div>
+										<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
+											<div class="reply">
+												<div class="reply_writer">
+													<span class="wr_name">관리자</span>
+													<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
+												</div>
+												<div class="reply_txt">
+													<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
+														안녕하세요, 스타일24 관리자입니다.
+													</p>
+												</div>
+											</div>
+										</div>
+									</div>
+								</li>
+							</ul>
+						</div>
+					</div>
+				</div>
+				<!-- //리뷰내용 -->
+			</div>
+		</div>
+	</div>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	$(document).ready( function() {
+
+
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 113 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html

@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewPhotoFormMob.html
+ * @desc	: 상품평 - 포토/영상 리스트 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.008   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="exampleFullLabel">포토/영상리뷰</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="photo_list" >
+					<ul id="ulGoodsReviewPhoto">
+					</ul>
+				</div>
+				<div class="review_last"   style="display:none;">
+					마지막 게시글입니다.
+				</div>
+				<div class="btn_group_flex"  style="display:none;">
+					<div>
+						<button type="button" class="btn btn_default" id="btnMore">
+							<span>더보기</span>
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<form id="goodsReviewPhotoForm" name="goodsReviewPhotoForm" action="#" th:action="@{'/goods/review/list'}">
+		<input type="hidden" name="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="photoYn" value ="Y"/>
+		<input type="hidden" name="goodsCd" th:value ="${params.goodsCd}"/>
+	</form>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_photo')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	var fnReviewPhotoGetList = function() {
+
+		gagajf.ajaxFormSubmit($('#goodsReviewPhotoForm').prop('action'), '#goodsReviewPhotoForm', fnGetListCallback);
+	}
+	
+	var fnGetListCallback = function(result) {
+		//$('#ulGoodsReviewPhoto').html('');
+	
+		// 목록
+		if (result.dataList != null && result.dataList.length > 0) {
+			
+			$.each(result.dataList, function(idx, item) {
+				let tag = '';
+				if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
+					var fileGbClass = '';
+					$.each(item.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach == "M") fileGbClass = "mov";
+				tag += '				<li>\n';
+				tag += '					<a href="javascript:void();" onclick="fnGoodsReviewDetail(\''+item.reviewSq+'\');">\n';
+				tag += '						<div class="pic">\n';
+				tag += '							<span class="thumb '+ fileGbClass +'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				tag += '						</div>\n';
+				tag += '					</a>\n';
+				tag += '				</li>\n';		
+					});	
+				}
+				
+				$('#ulGoodsReviewPhoto').append(tag);
+			});
+			
+		}
+		
+		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
+			$('#btnMore').parent().show();
+			$('#goodsReviewPhotoForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
+		} else {
+			$('.review_last').show();
+			$('#btnMore').parent().hide();
+		}
+	}
+	
+	// 더보기
+	$('#btnMore').on('click', function() {
+		fnReviewPhotoGetList();
+	});
+	
+	// 상세보기
+	var fnGoodsReviewDetail = function(reviewSq){
+		cfGoodsReviewDetail([[${params.goodsCd}]],'', 'Y', reviewSq);
+		cfCloseLayer('layer_review_photo');
+	}
+	
+	$(document).ready( function() {
+		
+		fnReviewPhotoGetList();
+		
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 262 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -0,0 +1,262 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageWishListFormMob.html
+ * @desc    : 마이페이지 > 리뷰 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<!-- 상단헤드 //? -->
+<th:block layout:fragment="content">
+		<main role="" id="" class="container my">
+			<section class="content review">
+				<div class="inner">
+					<div class="ADwrap">
+						<span class="adcopy">일반 리뷰 150P, 포토/영상 리뷰 350P 적립!</span>
+
+						<div class="tip_wrap tip1" >
+							<div class="tip_tit">?</div>
+							<div class="tip_contents">
+								<a href="javascript:;" class="tip_close"><span class="sr-only">팁 닫기</span></a> <!-- 210407_tip_close 요소 추가 -->
+								<p class="tip_txt">
+									<ul>
+										<li>일반 리뷰 작성시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다.</li>
+										<li>월 최대 10,000P까지 적립 가능합니다. <br> (합산 후 월 1회 지급)</li>
+										<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다.</li>
+										<li>리뷰는 주문일 기준 90일간 작성이 가능합니다.</li>
+									</ul>
+								</p>
+							</div>
+						</div>
+					</div>
+
+				</div>
+				<div class="inner wide">
+					<div class="tabWrap">
+						<ul class="tabIndex">
+							<li id="completeReview"><a href="javascript:void(0);">작성 가능한 리뷰<span class="count" th:text="'('+${#numbers.formatInteger(completeReviewCount,0,'COMMA')}+')'"></span></a></li>
+							<li id="alreadyReview"><a href="javascript:void(0);" >내가 쓴 리뷰<span class="count" th:text="'('+${#numbers.formatInteger(alreadyReviewCount,0,'COMMA')}+')'" ></span></a></li>
+						</ul>
+						<div class="tabContents">
+							<div class="tab_cont active">
+								<!-- tab_cont Start -->
+								<div class="inner">
+
+									<div class="part_goods">
+										<!-- 굿즈_리뷰 -->
+										<div class="goods_section">
+											<div class="goods_detail">
+												<a href="">
+													<div class="thumb_box">
+														<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
+													</div>
+													<div class="info_box">
+														<div class="od_name">
+															<div class="goods_date"><span class="date">2020.10.25</span> 구매</div>
+															<div class="brand">
+																<span>Mollimelli 몰리멜리</span>
+															</div>
+															<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
+														</div>
+														<div class="od_opt">
+															<div class="option">
+																<em>Black</em><em>XXL</em>
+															</div>
+														</div>
+													</div>
+												</a>
+											</div>
+											<div class="goods_btn_wrap btn_group_flex">
+												<div><button type="button" class="btn btn_default"><span>리뷰쓰기(</span><em>15</em><span>일 남음)</span></button></div>
+											</div>
+										</div>
+										<!-- //굿즈_리뷰 -->
+									</div>
+									
+								</div>
+								<!-- // tab_cont End -->
+							</div>
+							<div class="tab_cont ">
+								<!-- tab_cont Start -->
+
+								<div class="once">
+									<div class="alert" role="alert">
+										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
+										<p class="formOnly">바로확인</p>
+										<button type="button" class="alertCls" onclick="location.href='#newreply2'" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
+										<!--
+											.reply_box(관리자댓글)가 추가된 
+											부모, class="reviewMy"의 
+											id="newreply2"로 이동 됩니다.
+										 -->
+									</div>
+								</div>
+
+								<div class="inner">
+									<div class="part_goods">
+										<!-- 굿즈_리뷰 -->
+										<div class="goods_section">
+											<div class="goods_detail">
+												<a href="">
+													<div class="thumb_box">
+														<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
+													</div>
+													<div class="info_box">
+														<div class="od_name">
+															<div class="goods_date"><span class="date">2020.10.25</span>구매</div>
+															<div class="brand">
+																<span>Mollimelli 몰리멜리</span>
+															</div>
+															<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
+														</div>
+														<div class="od_opt">
+															<div class="option">
+																<em>Black</em><em>XXL</em>
+															</div>
+														</div>
+													</div>
+												</a>
+											</div>											
+										</div>
+										<!-- //굿즈_리뷰 -->
+									</div>
+									<div class="reviewMy">
+										<div class="info_box">
+											<div class="star_score">
+												<span class="star">
+													<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
+												</span>
+											</div>
+											<div class="writer">
+												<span class="wr_date">2020.07.15</span>
+											</div>
+										</div>
+										<div class="response_box">
+											<div>
+												<dl>
+													<div>
+														<dt>구매옵션</dt>
+														<dd>베이지 / 100</dd>
+													</div>
+													<div>
+														<dt>키/몸무게</dt>
+														<dd>178cm/71kg</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="photo_box">
+											<div class="photo_list">
+												<ul>
+													<li>
+														<a href="">
+															<div class="pic">
+																<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+															</div>
+														</a>
+													</li>
+													<li>
+														<a href="">
+															<div class="pic">
+																<span class="thumb" style="background-image:url('/images/pc/thumb/tmp_pdDetail4.jpg');"></span>
+															</div>
+														</a>
+													</li>
+												</ul>
+											</div>
+										</div>
+										<div class="txt_review_box">
+											<p>
+												옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
+											</p>
+										</div>
+										<div  class="response_box2">
+											<div>
+												<dl class="clear">
+													<div>
+														<dt>사이즈</dt>
+														<dd>작음</dd>
+													</div>
+													<div>
+														<dt>핏</dt>
+														<dd>레귤러</dd>
+													</div>
+													<div>
+														<dt>컬러</dt>
+														<dd>밝음</dd>
+													</div>
+													<div>
+														<dt>두께감</dt>
+														<dd>적당함</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="reply_box">
+											<div class="reply">
+												<div class="reply_writer">
+													<span class="wr_name">관리자</span>
+													<span class="wr_date">2020.07.15</span>
+												</div>
+												<div class="reply_txt">
+													<p>
+														안녕하세요, 스타일24 관리자입니다.<br>
+														최대한 검수작업을 하고 있으나, 상품 출고량이 많은 경우 간혹 검수가 누락되는 경우가 있습니다.<br>
+														만약, 받아보시고 문제가 있을 경우 텍 제거하지마시고 고객센터로 접수 해주시면 처리 도와드리겠습니다.<br>
+														구매해주셔서 감사합니다.                                                 
+													</p>
+												</div>
+											</div>
+										</div>
+										<!-- .reply_box가 노출될 경우, 삭제만 -->
+										<div class="goods_btn_wrap btn_group_flex">
+											<div><button type="button" class="btn btn_default"><span>리뷰 삭제</span></button></div>
+										</div>
+									</div>
+								</div>
+
+								<!-- // tab_cont End -->
+							</div>
+						</div>
+					</div>
+				</div>
+			</section>
+		</main>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
+	let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
+	let attachList = [[${alreadyReviewAttach}]];
+	// 작성가능한 리뷰 클릭 시 
+	$("#completeReview").click(function() {
+		$("#alreadyReview").removeClass("active");
+		$("#completeReview").addClass("active");
+		$(".check_notice").hide();
+		gagaPaging.init('searchForm1', fnSearchCallback1, 'paging', 10);
+		gagaPaging.load(1);
+	})
+	
+	$("#alreadyReview").click(function() {
+		$("#completeReview").removeClass("active");
+		$("#alreadyReview").addClass("active");
+		$(".check_notice").show();
+		gagaPaging.init('searchForm2', fnSearchCallback2, 'paging2', 10);
+		gagaPaging.load(1);
+	})
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

+ 112 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html

@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageWishListFormMob.html
+ * @desc    : 마이페이지 > 위시리스트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<!-- 상단헤드 //? -->
+<th:block layout:fragment="content">
+	<main role="" id="" class="container my">
+			<section class="content my_wishlist">
+				<div class="inner">
+					<div class="wishlist" id="wishList">
+					</div>
+				</div>
+			</section>
+		</main>
+<script th:inline="javascript">
+/*<![CDATA[*/
+let month = [[${wishMonth}]];
+
+var wishlistDelete = function(obj) {
+	mcxDialog.confirm("위시리스트를 해제하시겠습니까?", {
+		cancelBtnText : "취소",
+		sureBtnText : "확인",
+		sureBtnClick : function() {
+			cfnPutWishList(obj);
+			ajaxWishList();
+		}
+	});
+}	
+//마이페이지 위시리스트 
+var ajaxWishList = function () {
+	 $.getJSON('/mypage/wish/list', function(result, status) {
+		if (status == 'success') {
+			$('#wishList').html('');
+			html = '';
+			for (var i = 0; i < month.length; i++) {
+				html += '<div class="monthly_wish_wrap">\n';
+				html += '	<div class="date">\n';
+				html += '		<span>'+month[i].regDt+'</span>\n';
+				html += '	</div>\n';
+				html += '	<div class="itemsGrp">\n';
+				
+				$.each(result, function (idx, item) {
+					if (item.regDtMonth == month[i].regDt) {
+						html += '		<div class="item_prod">\n';
+						html += '			<div class="item_state">\n';
+						html += '				<button type="button" class="itemLike likeit" goodsCd="'+item.goodsCd+'" onclick="wishlistDelete(this)">관심상품 추가</button>\n';
+						html += '				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail('+item.goodsCd+')">\n';
+						html += '					<div class="itemPic">\n';
+						html += '						<img class="vLHTC pd_img"  src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">\n';
+						html += '					</div>\n';
+						html += '					<p class="itemBrand">'+item.brandGroupNm+'</p>\n';
+						html += '					<div class="itemName">'+item.goodsNm+'</div>\n';
+						html += '					<p class="itemPrice">\n';
+						
+						if (item.currPrice != item.listPrice) {
+							html+='						<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>\n';
+						}
+						html += item.currPrice.addComma();
+						if (item.dcRate>0) {
+							html+='						<span class=" itemPercent">'+item.dcRate+'%</span>\n';
+						}
+						html += '					</p>\n';
+						html += '					<div class="itemcolorchip">\n';
+						html += '						<span class="chip_color35" value="ABM">BEIGE</span>\n';
+						html += '						<span class="chip_color54" value="BDS">BLACK</span>\n';
+						html += '						<span class="chip_color40" value="YBR">WHITE</span>\n';
+						html += '					</div>\n';
+						html += '					<p class="itemBadge">\n';
+						html += '						<span class="badge13">베스트 </span>\n';
+						html += '					</p>\n';
+						if (item.goodsTnm != null && item.goodsTnm != '') {
+							html+='					<div class="itemComment">'+item.goodsTnm+'</div>\n';
+						}
+						html += '				</a>\n';
+						html += '			</div>\n';
+						html += '		</div>\n';
+						
+					}
+				});
+				
+				html += '	</div>\n';
+				html += '</div>\n';
+				$('#wishList').html(html);
+			}
+		}
+	});
+}
+
+$(document).ready(function() {
+	ajaxWishList();
+});
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

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

@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : PlanningEventMainFormMob.html
+ * @desc    : 이벤트메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<!--  container -->
+		<main role="" id="" class="container ev">
+			<section class="content ev_list">
+				<div class="inner bg_gray">
+					<div class="ev_mem_rank">
+						<div class="txt">
+							<p>
+								STYLE24 회원등급에 따라<br>제공되는 혜택 정보를 확인해 보세요.
+							</p>
+							<a href="javascript:;" class="btn btn_dark">회원등급 혜택 보기</a>
+						</div>
+					</div>
+				</div>
+				<div class="inner">
+					<div class="event_list">
+						<div class="event_top">
+							<div class="count"id="eventTotCnt">
+								<!-- <span>9,999</span>개의 이벤트 -->
+							</div>
+							<div class="event_btn">
+								<a href="javascript:void(0);" th:onclick="cfnGoToPage(_PAGE_NOTICE)">당첨자 발표</a>
+							</div>
+						</div>
+						<div class="list" id="divEventList">
+							<!-- <ul class="event_con">
+								<li><a href="">
+										<div class="ev_img">
+											<div class="shape ranker">
+												<span>NEW</span>
+											</div>
+											<img src="/images/mo/thumb/ev_list_img01.jpg"
+												alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션">
+										</div>
+										<div class="txt">
+											<p class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ
+												컬렉션</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+								</a></li>
+							</ul> -->
+							 <div class="nodata" id="divEventNoData" style="display:none;">
+								<p><img src="/images/mo/ico_content_find02.png" alt="등록된 이벤트가 없습니다."></p>
+								<span>등록된 이벤트가 없습니다.</span>
+								
+							</div> 
+
+						</div>
+					</div>
+				</div>
+
+			</section>
+		</main>
+<script th:inline="javascript">
+
+/*<![CDATA[*/
+let fnGetEventList = function() {
+	let actionUrl = '/planning/event/main/list';
+	
+	$.getJSON(actionUrl
+		, function(result, status) {
+			if (status == 'success') {
+				if (result.length > 0) {
+					$('#eventTotCnt').html('<span>' + result.length.addComma() + '</span>개의 이벤트');
+					$('#divEventList').html('');
+					let tag = '';
+					tag += '<ul class="event_con">\n';
+					$.each(result, function(idx, item) {
+						tag += '	<li>\n';
+						tag += '        <a onclick="cfnGoToPlanDetail(\'' + item.planSq + '\')">\n'
+						tag += '			<div class="ev_img">\n';
+						if (item.newYn == 'Y') {
+							tag += '				<div class="shape ranker">\n';
+							tag += '					<span>NEW</span>\n';
+							tag += '				</div>\n';
+						}
+						tag += '				<img src="' + _uploadImageUrl + item.mainImg + '" alt="">\n';
+						tag += '			</div>\n';
+						tag += '			<div class="txt">\n';
+						tag += '				<p class="tit">'+item.planNm+'</p>\n';
+						tag += '				<div class="date">\n';
+						tag += '					<span>'+item.dispStdt+'</span> - <span>'+item.dispEddt+'</span>\n';
+						tag += '				</div>\n';
+						tag += '			</div>\n';
+						tag += '        </a>\n';
+						tag += '	</li>\n';
+					});
+					
+					tag += '</ul>\n';
+					
+					
+					$('#divEventList').html(tag);
+					
+					$('#divEventNoData').hide();
+					$('#divEventList').show();
+				} else {
+					$('#eventTotCnt').html('<span>0</span>개의 이벤트');
+					$('#divEventNoData').show();
+					$('#divEventList').hide();
+				}
+			}
+		});
+}
+
+$(document).ready(function() {
+	fnGetEventList();
+});
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

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

@@ -20,7 +20,10 @@
 		<div class="area">
 			<div class="logo">
 				<a href="#none">
-					<h1><img th:src="${@environment.getProperty('domain.image') + brandGroupInfo.logoFileNm}" src="/images/pc/thumb/br_tbj_logo.png" alt="TBJ nearby"/></h1>
+					<h1>
+						<!-- <img th:src="${@environment.getProperty('domain.image') + brandGroupInfo.logoFileNm}" src="/images/pc/thumb/br_tbj_logo.png" alt="TBJ nearby"/> -->
+						<p th:text="${brandGroupInfo.brandGroupNm}"></p>
+					</h1>
 				</a>
 			</div>
 			<div class="util_group">
@@ -35,10 +38,21 @@
 			<!-- nav -->
 			<div class="nav">
 				<ul class="bundle" id="ulGnbTab">
-					<li><a href="#">상품</a></li>
-					<li><a href="#">룩북</a></li>
-					<li><a href="#">20S/S시즌오프</a></li>
-					<li><a href="#">이벤트</a></li>
+					<li class="home"><a href="javascript:void(0);" onclick="cfnGoToBrandMain([[${brandGroupInfo.brandGroupNo}]]);">브랜드 홈</a></li>
+					<li class="has_depth"><!-- depth_menu 있을 시 has_depth 클래스 추가 -->
+						<a href="#">상품</a>
+						<!-- 상품 depth -->
+						<div class="depth_menu category">
+							<div class="head_category">
+								<div class="menu">
+									<ul class="maintabs" id="ulGnbCate">
+									</ul>
+								</div>
+							</div>
+							<div class="head_banner" id="divGnbBrandBanner">
+							</div>
+						</div>
+					</li>
 				</ul>
 			</div>
 			<!-- // nav -->
@@ -59,21 +73,57 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	// GNB탭 > 카테고리
+	let fnGetGnbCategory = function(cate1) {
+		let tag = '';
+		if (cate1 != null) {
+			tag += '<li>\n';
+			tag += '	<a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate1.cateGb + '\',' + cate1.cate1No + ');">' + cate1.cate1Nm + '</a>\n';
+			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+				tag += '	<ul class="box_depth2">\n';
+				$.each(cate1.cate2List, function(idx2, cate2) {
+					tag += '		<li>\n';
+					tag += '			<a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+						tag += '			<ul class="box_depth3">\n';
+						$.each(cate2.cate3List, function(idx3, cate3) {
+							tag += '				<li>\n';
+							tag += '					<a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
+							if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+								tag += '					<ul class="box_depth3">\n';
+								$.each(cate3.cate4List, function(idx4, cate4) {
+									tag += '						<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
+								});
+								tag += '					</ul>\n';
+							}
+							tag += '				</li>\n';
+						});
+						tag += '			</ul>\n';
+					}
+					tag += '		</li>\n';
+				});
+				tag += '	</ul>\n';
+			}
+			tag += '</li>\n';
+		}
+		return tag;
+	}
+	
 	// GNB탭 생성
 	let fnCreateGnbTab = function() {
-		$.getJSON('/display/brand/gnb/tab/list/' + [[${brandGroupInfo.brandGroupNo}]]
+		$('#ulGnbCate').html('');
+		let allCate = [[${allCateList}]];
+		$.each(allCate, function(allCateIdx, allCateItem) {
+			let gnbCate = fnGetGnbCategory(allCateItem);
+			$('#ulGnbCate').append(gnbCate);
+		});
+		
+		$.getJSON('/display/brand/gnb/tab/list?brandGroupNo=' + [[${brandGroupInfo.brandGroupNo}]]
 			, function(result, status) {
 				if (status == 'success') {
 					if (result.length > 0) {
-						$('#ulGnbTab').html('');
 						$.each(result, function(idx, item) {
-							/* if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
-								$.each(allCate, function(allCateIdx, allCateItem) {
-									if (item.cate1No == allCateItem.cate1No) {
-										$('#ulGnbTab').append(gnbCate);
-									}
-								});
-							} else  */if (item.contentsType == 'L') { // 컨텐츠유형:링크
+							if (item.contentsType == 'L') { // 컨텐츠유형:링크
 								$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
 							}
 						});
@@ -86,6 +136,34 @@
 		//검색창 호출
 		$(".common_search").load("sch_layer_pop.html");
 
+		// GNB toggle
+		$(document).on('mouseenter','.common_header.br_header .gnb .nav > ul > li',function(e){
+			$(this).parents('.nav').find('.bundle > li > a').removeClass('active');
+			$(this).children('a').addClass('active');
+			if(!$(this).hasClass('has_depth')){
+				$('.black_screen').hide();
+				$('.common_header.br_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+			} else if($(this).hasClass('has_depth')){
+				$('.black_screen').show();
+				$(this).find('.depth_menu').show();
+				$(this).parents('ul').siblings('ul').find('li.has_depth .depth_menu').hide();
+				$(this).siblings('li.has_depth').find('.depth_menu').hide();
+			}
+		}).on('mouseleave','.common_header.br_header .gnb',function(e){
+			$(this).find('.bundle > li > a').removeClass('active');
+			$('.black_screen').hide();
+			$('.common_header.br_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+		});
+
+		// GNB 하위메뉴
+		$(document).on('mouseenter','.common_header.br_header .maintabs li',function(e){
+			if($(this).find('> ul').length > 0){
+				$(this).addClass('on');
+			}
+			$(this).find('> ul').show();
+			$(this).siblings('li').find('> ul').hide();
+		});
+		
 		// GNB탭 생성
 		fnCreateGnbTab();
 	});

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

@@ -893,9 +893,9 @@
 			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 				tag += '	<ul class="quick_depth">\n';
 				tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');"><span>메인</span></a>\n';
-				tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');"><span>전체</span></a>\n';
+				tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\',' + cate1.cate1No + ');"><span>전체</span></a>\n';
 				$.each(cate1.cate2List, function(idx2, cate2) {
-					tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');"><span>' + cate2.cate2Nm + '</span></a>\n';
+					tag += '		<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');"><span>' + cate2.cate2Nm + '</span></a>\n';
 				});
 				tag += '	</ul>\n';
 			}

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

@@ -579,23 +579,23 @@
 			tag += '		<div class="head_category">\n';
 			tag += '			<div class="tit">\n';
 			tag += '				<p>' + cate1.cate1Nm + '</p>\n';
-			tag += '				<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');" class="more">전체보기</a>\n';
+			tag += '				<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\',' + cate1.cate1No + ');" class="more">전체보기</a>\n';
 			tag += '			</div>\n';
 			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 				tag += '			<div class="menu">\n';
 				tag += '				<ul class="maintabs">\n';
 				$.each(cate1.cate2List, function(idx2, cate2) {
 					tag += '					<li>\n';
-					tag += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					tag += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
 					if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
 						tag += '						<ul class="box_depth2">\n';
 						$.each(cate2.cate3List, function(idx3, cate3) {
 							tag += '							<li>\n';
-							tag += '								<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
+							tag += '								<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
 							if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
 								tag += '								<ul class="box_depth3">\n';
 								$.each(cate3.cate4List, function(idx4, cate4) {
-									tag += '									<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
+									tag += '									<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
 								});
 								tag += '								</ul>\n';
 							}

+ 51 - 4
src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html

@@ -82,23 +82,28 @@
 // 		gtag('config', 'UA-168660512-1');
 	</script>
 	
-	<th:block th:if="${sessioninfo != null}">
+	<th:block th:if="${sessionInfo != null}">
 		<script th:inline="javascript">
 		/*<![CDATA[*/
 			var gCustId = [[${sessionInfo.custId}]];
-			var gEmail = [[${sessionInfo.Email}]];
+			var gEmail = [[${sessionInfo.email}]];
+			var gGender = [[${sessionInfo.sexGb}]];
+			var gBirthYmd = [[${sessionInfo.birthYmd}]];
 			/*]]>*/
 		</script>
 	</th:block>
-	<th:block th:if="${sessioninfo == null}">
+	<th:block th:if="${sessionInfo == null}">
 		<script th:inline="javascript">
 		/*<![CDATA[*/
 			var gCustId = '';
 			var gEmail = '';
+			var gGender = '';
+			var gBirthYmd = '';
 			/*]]>*/
 		</script>
 	</th:block>
-	
+
+	<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.validation.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.validation.js"></script>
 	<script src="/ux/sha512.min.js"></script>
 	<script>
 		String.prototype.hashCode = function() {
@@ -125,6 +130,48 @@
 			x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);
 		})();
 		/* \\Eiengine Script (Visit) */
+
+		// 로그인 성공 시 - 시작
+
+		// 나이대 구하기 31 -> 30
+		var fnGetAge = function (birthYmd) {
+			let age = '';
+			if (!gagajf.isNull(birthYmd) && birthYmd.length > 7) {
+				let year = Number(new Date().getFullYear());
+				let curretAge = year - Number(birthYmd.substr(0, 4));
+				age = String(curretAge).substr(0 , 1) + '0';
+			}
+			return age;
+		}
+		// 성별 공통코드 값 M-> A, F-> B
+		var fnGetGender = function (gGender) {
+			let gender = '';
+			if (!gagajf.isNull(gGender)) {
+				gender = gGender.substr(5,6) === 'M' ? 'A' : 'B';
+			}
+			return gender;
+		}
+
+		let loginSuccessYn = gagajf.getCookie('st24ck_login_success');
+		if (loginSuccessYn === 'Y') {
+			gagajf.setCookie('st24ck_login_success', '', 0);
+			let age = fnGetAge(gBirthYmd);
+			let gender = fnGetGender(gGender);
+			window._eglqueue = window._eglqueue || [];
+			_eglqueue.push(['setVar','cuid', eglqueueCuid]);
+			_eglqueue.push(['setVar','userId', hCustId]);
+			_eglqueue.push(['setVar','gender', gender]);
+			_eglqueue.push(['setVar','age', age]);
+			_eglqueue.push(['track','user']);
+			(function (s, x) {
+				s = document.createElement('script'); s.type = 'text/javascript';
+				s.async = true; s.defer = true; s.src = (('https:' == document.location.protocol) ? 'https' : 'http') + '://logger.eigene.io/js/logger.min.js';
+				x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);
+			})();
+		}
+		
+
+		// 로그인 성공 시 - 끝
 	</script>
 </head>
 

+ 1 - 9
src/main/webapp/WEB-INF/views/web/customer/IdFindFormWeb.html

@@ -312,15 +312,7 @@
 		};
 
 		$(document).ready( function() {
-			$(document).on('click','.mb .registration_tap > .form_group > .form_field > div',function(e){
-				// form 데이터 리셋
-				$('#searchCustInfo')[0].reset();
-
-				$(this).find('input').prop('checked', true);
-				$(this).parents('.form_group').find('.regist_box').removeClass('on');
-				$(this).parents('.form_group').find('.regist_box').eq($(this).index()).addClass('on');
-				return false;
-			});
+			$('#searchCustInfo')[0].reset();
 		});
 
 /*]]>*/

+ 32 - 8
src/main/webapp/WEB-INF/views/web/customer/PasswordFindFormWeb.html

@@ -138,8 +138,30 @@
 									</div>
 								</div>
 								<!-- //임시비밀번호 발급 -->
+								<div id="failCustId" class="find_result clear hide">
+									<div class="form_info">
+										<span class="ico_content_none"></span>
+										<p>입력한 정보와 일치하는 아이디가 존재하지 않습니다.</p>
+										<p class="t_info mt10">
+											정확한 확인을 위해 휴대폰 인증/아이핀 인증을 통한<br>아이디 찾기를 진행해 주세요.
+										</p>
+									</div>
+									<div class="btn_group_block btn_group_md ui_row">
+										<div class="ui_col_6">
+											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+												<span>회원가입</span>
+											</button>
+										</div>
+										<div class="ui_col_6">
+											<button type="button" class="btn btn_dark btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">
+												<span>다시 찾기</span>
+											</button>
+										</div>
+									</div>
+								</div>
+								<!-- //회원정보로 아이디찾기 실패일경우 -->
 								<!-- 비밀번호 찾기 결과안내 실패일경우 -->
-								<div id="failAuthentication" class="find_result clear" style="display: none;">
+								<div id="failAuthentication" class="find_result clear hide">
 									<div class="form_info">
 										<span class="ico_content_none"></span>
 										<p>입력한 정보와 일치하는 정보가 존재하지 않습니다.</p>
@@ -235,7 +257,13 @@
 		var fnGetDisplayFail = function (authMethod) {
 			$('.form_head').hide();
 			$('.registration_nav').hide();
-			$('#failAuthentication').show();
+			if (authMethod === 'custInfo') {
+				$('#failCustId').show();
+			}
+			if (authMethod === 'mobile' || authMethod === 'ipin') {
+				$('#failAuthentication').show();
+			}
+
 		};
 
 		// 나이스 본인인증 후 콜백
@@ -250,14 +278,10 @@
 		};
 
 		$(document).ready( function() {
-			$(document).on('click','.mb .registration_tap > .form_group >.form_field > div',function(e){
-				$(this).find('input').prop('checked', true);
-				$(this).parents('.form_group').find('.regist_box').removeClass('on');
-				$(this).parents('.form_group').find('.regist_box').eq($(this).index()).addClass('on');
-				return false;
-			});
+			$('#searchCustInfo')[0].reset();
 		});
 
+
 		/*]]>*/
 	</script>
 

+ 1 - 2
src/main/webapp/WEB-INF/views/web/customer/PrivacyTrustLayerFormWeb.html

@@ -22,8 +22,7 @@
 		<div class="modal-body">
 			<div class="pop_cont">
 				<div class="text_wrap">
-					개인정보 취급 위탁내용이 들어갑니다.<br>
-
+					<div class="text_wrap" th:utext="${#strings.replace(#strings.replace(clause,'&amplt;','<'),'&ampgt;','>')}">
 				</div>
 			</div>
 		</div>

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

@@ -243,7 +243,7 @@
 							</div>
 							<div class="count_wrap">
 								<div>
-									<p><span>9999</span>개의 상품</p>
+									<p><span id="totCntId">9999</span>개의 상품</p>
 								</div>
 								<div>
 									<ul>
@@ -259,6 +259,16 @@
 									</ul>
 								</div>
 							</div>
+
+							<div id="infiniteContainer">
+								<div id="listBoxOuter">
+									<!-- 상품진열 -->
+									<ul class="productlist quarter" id="listBox"><!-- max 30개 정렬-->
+									</ul>
+									<!-- //상품진열 -->
+								</div>
+							</div>
+
 							<div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
 								<div class="item_prod">
 									<div class="item_state">
@@ -441,9 +451,9 @@
 		<input type="hidden" name="sortGb"/>
 	</form>
 
-	<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 src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+	<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+	<script th:src="@{'/biz/goodsSession.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goodsSession.js"></script>
 	<script th:inline="javascript">
 		/*<![CDATA[*/
 		var filterPriceList = [[${filterPriceList}]];
@@ -505,12 +515,27 @@
 
 		// 상품 검색
 		var fnGetInfiniteScrollDataList = function (pageNum){
-			$("#searchForm input[name=pageNo]").val(pageNum+1);
-			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchForm,  gagaInfiniteScroll.jsonToHtml);
+			$("#searchGoodsForm input[name=pageNo]").val(pageNum+1);
+			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchGoodsForm,  gagaInfiniteScroll.jsonToHtml);
 		}
 
 		var fnDrawInfiniteScrollData = function (result){
-			console.log('nn');
+			console.log('fnDrawInfiniteScrollData');
+			let totalCnt = result.totalCnt;
+			$("#totCntId").text(totalCnt.addComma());
+			gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
+
+			var ithrCd = '';
+			var contentLoc = 'CATE1100';
+			if (result.dataList != null && result.dataList.length > 0) {
+				var htm = fnCreateGoodsList(result, ithrCd, contentLoc);
+				gagaInfiniteScroll.draw(htm);
+			}else {
+				if($("#searchForm input[name=pageNo]").val()==1){
+					$('#listBox').html('<li class="none">상품정보가 존재하지 않습니다.</li>');
+				}
+				gagaInfiniteScroll.draw('not');
+			}
 		}
 
 		var fnCreateCategoryList = function (){

+ 2 - 2
src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html

@@ -209,10 +209,10 @@
 		let allCate = [[${allCateList}]];
 		$.each(allCate, function(idx1, cate1) {
 			if ([[${params.cate1No}]] == cate1.cate1No) {
-				let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
+				let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
 				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 					$.each(cate1.cate2List, function(idx2, cate2) {
-						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
 					});
 				}
 				$('.dp_cate_list').html(tag);

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

@@ -211,7 +211,7 @@
 															</div>
 															<p class="itemBrand" th:text="${goodsData.brandEnm}">BRAND NAME</p>
 															<div class="itemName" th:text="${goodsData.goodsNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-															<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">80,100
+															<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currAprice,1,'COMMA')}">80,100
 																<span class="itemPrice_original" th:text="${#numbers.formatInteger(planningGoods.listPrice,1,'COMMA')}">89,000</span>
 																<span class="itemPercent" th:if="${planningGoods.currPrice != planningGoods.listPrice}" th:text="${(planningGoods.listPrice == 0 ? 0 : #numbers.formatDecimal((planningGoods.listPrice - planningGoods.currPrice) / (planningGoods.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 															</p>
@@ -398,6 +398,329 @@
 			</th:block>
 		</th:block>
 
+		<!-- 10. 당신을위한제안 -->
+		<div class="content main_foryou">
+			<div class="cont_head">
+				<p class="displayH">당신을 위한 제안</p>
+				<span>스타일24에서 가장 주목받는 상품을 살펴보세요</span>
+			</div>
+			<div class="cont_body">
+				<div class="post-sug fy_nav">
+					<div class="swiper-container">
+						<div class="swiper-wrapper">
+							<div class="swiper-slide">
+								<ul>
+									<li><button class="btn btn_shape active" data-tab="fy1"><div><span class="number">1</span><span>BUCKAROO</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy2"><div><span class="number">2</span><span>기모청바지</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy3"><div><span class="number">3</span><span>겨울 팬츠</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy4"><div><span class="number">4</span><span>컨버스 주니어</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy5"><div><span class="number">5</span><span>모이몰른</span></div></button><a href="#none">자세히 보기</a></li>
+								</ul>
+							</div>
+							<div class="swiper-slide">
+								<ul>
+									<li><button class="btn btn_shape" data-tab="fy6"><div><span class="number">6</span><span>컨버스 주니어</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy7"><div><span class="number">7</span><span>겨울 팬츠</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy8"><div><span class="number">8</span><span>BUCKAROO</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy9"><div><span class="number">9</span><span>모이몰른</span></div></button><a href="#none">자세히 보기</a></li>
+									<li><button class="btn btn_shape" data-tab="fy10"><div><span class="number">10</span><span>기모청바지</span></div></button><a href="#none">자세히 보기</a></li>
+								</ul>
+							</div>
+						</div>
+					</div>
+					<div class="swiper-controls">
+						<div class="swiper-pagination"></div>
+					</div>
+				</div>
+				<div class="fy_item active" id="fy1">
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug01.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">자카드 방풍 패딩 스웨터 가디건 자카드 </div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug02.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part lg">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug03.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug04.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug05.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug06.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug07.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+				</div>
+
+				<div class="fy_item" id="fy2">
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug04.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug05.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug01.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">자카드 방풍 패딩 스웨터 가디건 자카드 </div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug02.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug06.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug07.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<div class="part lg">
+						<div class="item_prod">
+							<div class="item_state">
+								<button type="button" class="itemLike" tabindex="0">관심상품 추가</button>
+								<a href="#none" class="itemLink" tabindex="0">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/pc/thumb/main_sug03.jpg">
+									</div>
+									<div class="itemInfo">
+										<p class="itemBrand">BRAND NAME</p>
+										<div class=" itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+										<p class="itemPrice">80,100</p>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="fy_item" id="fy3"></div>
+				<div class="fy_item" id="fy4"></div>
+				<div class="fy_item" id="fy5"></div>
+				<div class="fy_item" id="fy6"></div>
+				<div class="fy_item" id="fy7"></div>
+				<div class="fy_item" id="fy8"></div>
+				<div class="fy_item" id="fy9"></div>
+				<div class="fy_item" id="fy10"></div>
+			</div>
+		</div>
+
+		<!-- 11. TV 슬라이드 -->
+		<div class="content wide main_tv">
+			<div class="cont_head">
+				<p class="displayH t_c">STYLE24 TV</p>
+			</div>
+			<div class="cont_body">
+				<div class="swiper-container post-tv">
+					<div class="swiper-wrapper">
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+						<div class="swiper-slide">
+							<div class="movbox">
+								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+							</div>
+						</div>
+					</div>
+					<div class="swiper-button-prev white"></div> <!-- 클래스명 white 추가 -->
+					<div class="swiper-button-next white"></div>
+				</div>
+				<div class="swiper-controls">
+					<div class="swiper-pagination"></div>
+				</div>
+			</div>
+		</div>
 
 
 	<!-- End Of Main Contents -->

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

@@ -56,7 +56,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																		or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																		or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
 	</div>
@@ -79,7 +79,7 @@
 																		or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																		or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																		or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
 	</div>
@@ -112,7 +112,7 @@
 	<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 		<div class="view">
 			<th:block th:each="goodsImg, status : ${goodsImgList}" >
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 				</th:block>
 		</div>
 	</div>

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

@@ -40,7 +40,7 @@
 													th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
+											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
 										</th:block>	
 										</div>
 									</div>
@@ -55,7 +55,7 @@
 									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 												or #strings.contains(goodsImg.sysImgNm,'_L1.')
 												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
+									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=558'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
 								</th:block>
 							</ul>
 						</div>
@@ -159,7 +159,7 @@
 														<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'}+'\';'">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																</div>
 																<div class="itemName">선택</div>
 															</a>
@@ -174,7 +174,7 @@
 															<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'}+'\';'">
+																		<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" 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>

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

@@ -29,7 +29,7 @@
 							<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'}+'\';'">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>
@@ -47,7 +47,7 @@
 								<div class="item_state">
 									<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]])">
 										<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'}+'\';'">
+											<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>

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

@@ -25,7 +25,7 @@
 			<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}">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}">
 					</div>
 					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

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

@@ -41,7 +41,7 @@
 													th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 															or #strings.contains(goodsImg.sysImgNm,'_L1.')
 															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
+											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
 										</th:block>	
 										</div>
 									</div>
@@ -56,7 +56,7 @@
 									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 												or #strings.contains(goodsImg.sysImgNm,'_L1.')
 												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
+									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
 								</th:block>
 							</ul>
 						</div>
@@ -176,7 +176,7 @@
 									<ul >
 										<li th:each="goodsOption1, status : ${goodsOption1List}">
 											<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
-												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
+												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm +'?RS=64'}" alt="">
 											</a>
 										</li>
 									</ul>
@@ -441,7 +441,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -464,7 +464,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
 																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -474,7 +474,7 @@
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
@@ -497,7 +497,7 @@
 				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" >
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 							</th:block>
 					</div>
 				</div>
@@ -660,7 +660,7 @@
 																	<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${lookbookGoods.goodsCd}]], '',[[${ithrCd}]],[[${contentsLoc}]] )">
 																	</th:block>
 																		<div class="itemPic">
-																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm}">
+																			<img alt="" class="vLHTC pd_img"  th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm+'?RS=100'}">
 																		</div>
 																		<p class="itemBrand" th:text="${lookbookGoods.brandGroupNm}">CURLYSUE 컬리수</p>
 																		<div class="itemName" th:text="${lookbookGoods.goodsFullNm}">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
@@ -849,7 +849,6 @@
 		let target=$('.select_custom.item_opt2');
 		let targetSize = target.length;	//구성품 갯수
 		
-		//eskim
 		let cnt = 0;
 		let itemSize = 0;
 		target.each(function(){
@@ -1037,7 +1036,7 @@
 	var fnAddCart = function(btnType){
 		
 		// 바로구매는 로그인여부 확인
-		if (btnType == "O" && !cfCheckLogin()) {
+/* 		if (btnType == "O" && !cfCheckLogin()) {
 			
 			let btn = ["비회원 구매", "로그인후 구매"]; //버튼명[좌,우]
 			mcxDialog.confirmC("로그인 후 구매 시 다양한 혜택을 받으실 수 있습니다.", { //내용
@@ -1052,9 +1051,8 @@
 				}
 			});
 			return false;
-		}
+		} */
 		
-		let params = [];
 		let goodsType = $("#cartForm  input[name=goodsType]").val();
 
 		if (goodsType == 'G056_N'){
@@ -1063,6 +1061,7 @@
 				return;
 			}
 		
+			let compsList = [];
 			let obj = new Object();
 			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
 			obj.optCd = $("#cartForm  input[name=optCd]").val();
@@ -1073,10 +1072,13 @@
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-			params.push(obj);
+			compsList.push(obj);
+			
+			// 장바구니담기
+			cfnAddCart(compsList);
 
 		}else if (goodsType == 'G056_S'){  //수정요
-		
+			
 			let target=$('.select_custom.item_opt2');
 			let targetSize = target.length;	//구성품 갯수
 			let itemSize = 0;
@@ -1091,6 +1093,11 @@
 				return false;
 			}
 			
+			let cartGoodsList = [];
+			let compsList = [];
+			let goodsList = {
+				cartCompsList : new Array()
+			}
 			target.each(function() {
 				var arrInfo = $(this).find('input[name=opt2]').val().split('|');	// 상품코드|사이즈|구성수량
 				
@@ -1105,13 +1112,17 @@
 				obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 				obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 				obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-				params.push(obj);
+				compsList.push(obj);
 				
 			});
+			
+			goodsList.cartCompsList = compsList;
+			cartGoodsList.push(goodsList);
+			
+			// 장바구니담기
+			cfnAddCart(cartGoodsList);
 		}
 		
-		// 장바구니담기
-		cfnAddCart(params);
 	}
 
 	// 룩북속 상품 쇼핑백 담기
@@ -1212,7 +1223,8 @@
 						tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
 					}
 					let soldoutYn = ""; 
-					if ("Y" == item.soldoutYn || item.stockQty <= 0)soldoutYn = "true";
+					let saleQty = (Number(qty) * Number(minOrdQty));
+					if ("Y" == item.soldoutYn || item.stockQty <= saleQty)soldoutYn = "true";
 					if (selfGoodsYn == "Y"){
 						tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSet(this, \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';	
 					}else{

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

@@ -304,7 +304,7 @@
 								</th:block>
 							</div>
 							<div class="pic" th:unless="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
-								<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+');'}">
+								<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=365);'}">
 								</span>
 							</div>
 							<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">

+ 12 - 12
src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html

@@ -66,7 +66,7 @@
 <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="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=80'}');|"><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>
@@ -104,7 +104,7 @@
 										<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'}+'\';'">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=285'}" 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>
@@ -131,7 +131,7 @@
 											<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'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -146,7 +146,7 @@
 												<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'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>
@@ -182,7 +182,7 @@
 											<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'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -197,7 +197,7 @@
 												<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'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>
@@ -233,7 +233,7 @@
 											<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'}+'\';'">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
 													<div class="itemName">선택</div>
 												</a>
@@ -248,7 +248,7 @@
 												<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'}+'\';'">
+															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>
@@ -284,7 +284,7 @@
 													<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'}+'\';'">
+																<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 															</div>
 															<div class="itemName">선택</div>
 														</a>
@@ -299,7 +299,7 @@
 														<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'}+'\';'">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>
@@ -391,7 +391,7 @@
 										<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'}+'\';'">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 												</div>
 												<div class="itemName">선택</div>
 											</a>
@@ -404,7 +404,7 @@
 										<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'}+'\';'">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>

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

@@ -31,7 +31,7 @@
 						<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}">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}">
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>

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

@@ -34,7 +34,7 @@
 							<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'}+'\';'">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>

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

@@ -25,7 +25,7 @@
 			<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'}+'\';'">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>

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

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsReviewBestFormWeb.html
- * @desc	: 베스트 상품평 팝업
+ * * @source  : GoodsReviewDetailFormWeb.html
+ * @desc	: 상품평 상세 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -14,7 +14,7 @@
  * 1.0  2021.03.02   eskim		최초 작성
  *******************************************************************************
  -->
-<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="modal-content">
 		<div class="modal-header">
 			<th:block th:if="${review.bestYn == 'Y'}">
@@ -49,7 +49,7 @@
 									</th:block>
 									<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
 									<span class="thumb">
-										<img th:src="${imgGoodsUrl+'/'+review.sysImgNm}" alt="">
+										<img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=365'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 									</span>
 									</th:block>
 								</div>
@@ -75,7 +75,7 @@
 												<dl>
 													<div>
 														<dt>키/몸무게</dt>
-														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm|"></th:block> /
+														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
 															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
 														</dd>
 													</div>

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

@@ -25,7 +25,7 @@
 			<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'}+'\';'">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" 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>

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

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsInstockAlarmFormWeb.html
- * @desc	: 재입고알림 팝업
+ * @source  : GoodsReviewPhotoFormWeb.html
+ * @desc	: 상품평 - 포토/영상 리스트 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -23,13 +23,6 @@
 			<div class="pop_cont">
 				<div class="photo_list">
 					<ul id="ulGoodsReviewPhoto">
-						<li>
-							<a href="">
-								<div class="pic">
-									<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-								</div>
-							</a>
-						</li>
 					</ul>
 				</div>
 				<div class="ui_row">
@@ -42,7 +35,7 @@
 	</div>
 	<form id="goodsReviewPhotoForm" name="goodsReviewPhotoForm" action="#" th:action="@{'/goods/review/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
-		<input type="hidden" name="pageSize" value ="1"/>
+		<input type="hidden" name="pageSize" value ="20"/>
 		<input type="hidden" name="photoYn" value ="Y"/>
 		<input type="hidden" name="goodsCd" th:value ="${params.goodsCd}"/>
 	</form>

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

@@ -82,7 +82,7 @@ var ajaxWishList = function () {
 				html+='	<div class="itemsGrp">';
 				
 				$.each(result, function (idx, item) {
-					if (item.regDt == month[i].regDt) {
+					if (item.regDtMonth == month[i].regDt) {
 						html+='		<div class="item_prod">';
 						html+='			<div class="item_state">';
 						html+='				<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" onclick="wishlistDelete(this)">관심상품 추가</button>';

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

@@ -98,7 +98,7 @@
 								</div>
 								<div class="benefit_txt">
 									<p id="etcGrade">
-										<span id="ordSpan">	구매 건수 <strong id="ordCnt" class="c_primary" >0회</strong> </span>
+										<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>
@@ -269,11 +269,11 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
- 	let exptCustGrdeMap = [[${exptCustGrdeMap}]]
+ 	let exptCustGradeMap = [[${exptCustGradeMap}]]
 	let custGradeNm = [[${customerInfo.custGradeNm}]];
 
  	var fnInit = function () {
-		let expctCustGrade = exptCustGrdeMap.expctCustGrade;	// 예상등급
+		let expctCustGrade = exptCustGradeMap.expctCustGrade;	// 예상등급
 
 		//expctCustGrade.custGradeNo 10:VIP, 20: GOLD, 30:SILVER, 40:BRONZE, 50:WELCOME
 
@@ -290,7 +290,7 @@
 
  	// 다음 등급정책
  	var fnGetNextGradePolicyInfo = function (nextGradeNo) {
-		let custGradePolicy = exptCustGrdeMap.custGradePolicy;	// 등급별정책
+		let custGradePolicy = exptCustGradeMap.custGradePolicy;	// 등급별정책
 		let nextCustGradePolicy;
 		$(custGradePolicy).each(function(idx, item) {
 			if (Number(item.gradeCdNo) === nextGradeNo ) {
@@ -359,6 +359,10 @@
 		}
 	}
 
+	$('#btnDownGradeCoupon').on('click', function () {
+		gagajf.ajaxJsonSubmit('')
+	});
+
 	$(document).ready(function() {
 
 		fnInit();

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

@@ -33,6 +33,9 @@
 					<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">
@@ -59,7 +62,6 @@
 							</div>
 						</div>
 					</div>
-				</div>
 				<div class="cont_body" th:if="${fsrcInfoTop != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
                     <!-- 프로모션배너 type1 --> 
                     <!-- <div class="promotion_visual type1" th:if="${fsrcInfoTop != null and planInfo.planGb == 'P'}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"></div> -->
@@ -83,6 +85,7 @@
                     </div> -->
                     <!-- 프로모션배너 type2 -->                    
                 </div>
+            </div>
             <!-- //상단 프로모션 배너 -->
             
             <th:block th:each="a, template : ${templateOrd}">
@@ -108,6 +111,85 @@
 						<div class="content dp_special" th:id="${a.tmplType + a.planContSq}"></div>
 				</th:block>
 			</th:block>
+			
+			 <!-- 댓글리스트 -->
+			<th:block th:if="${planInfo.replyYn == 'Y'}">
+			<div class="content wide cmt">
+				<div class="cont_body">
+					<div class="cmt_wrap">
+						<div class="cmt_write">
+							<form class="form_wrap">
+								<div class="cmt_tarea">
+									<textarea class="cmt_ans" name="replyText" id="replyText" placeholder="댓글을 입력해주세요.(500자 이내)" onclick="fnTextConfirm()"></textarea>
+									<p class="txt_cnt"><span id="cmt_cnt" class="c_primary">0</span>/500</p>
+								</div>
+								<div class="cmt_thumb">
+									<div class="form_field">
+										<div class="imgUpload">
+											<label for="fileAdd" class="fileAdd" >업로드</label>
+											<input type="file" id="fileAdd" name="files[]" />
+										</div>
+									</div>
+								</div>
+								<button type="submit" class="btn btn_dark"><span>등록</span></button>
+							</form>
+						</div>
+						<div class="cmt_group" id="replyList">
+					   <!-- <div class="cmt_list_tit">
+								<strong>댓글</strong><span class="cnt">(9,999)</span>
+							</div>
+							데이터 있을 시
+							<ul class="cmt_list">
+								<li>
+									<div class="cmt_top">
+										<span class="writer">DI2****</span>
+										<span class="date">2020.12.30</span>
+									</div>
+									<div class="cmt_cont">
+										<p>
+											애용하는 회원으로서 스타일24의 리뉴얼은 저의 일처럼 기쁘네요 ^^ 깔끔하고 세련된 느낌으로 단장해서 사이트 들어왔을 때 기분이 좋답니다! 사이트 리뉴얼 겸 겨울옷을  사려고 한창 둘러보았어요. <br/>
+											따뜻한 느낌 풀풀 내는아이템들로 찜꽁 해놓았답니다! 이왕 이벤트도 당첨되어서 포인트도 얻고, 또 구매도 하고 싶네요ㅋㅋㅋ <br/>
+											리뉴얼 하신거  축하드려요!!!  당첨되길 바랍니다.^^ 
+										</p>
+									</div>
+								</li>
+								<li>
+									<div class="cmt_top">
+										<span class="writer">ety****</span>
+										<span class="date">2020.12.30</span>
+									</div>
+									<div class="cmt_cont">
+										<div class="img_wrap clear">
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>
+										</div>
+										<p>모처럼 스타일24를 다시 애용해야 겠어요! 축하축하 ^^</p>
+										<button class="btn btn_default btn_del"><span>삭제</span></button>
+									</div>
+								</li>
+							</ul> -->
+							<!-- 데이터 있을 시 -->
+							<!-- 데이터 없을 시 -->
+							<div class="nodata" style="display:none;">
+								<div class="txt_box">
+									<p>
+										등록된 댓글이 없습니다.
+									</p>
+								</div>
+							</div>
+							<!-- //데이터 없을 시 -->
+						</div>
+						<div class="paging_wrap">
+							<ul class="pageNav" id="paging">
+								
+							</ul>
+						</div>
+					</div>
+				</div>
+			</div>
+			</th:block>            
             
             <!-- 관련상품 리스트 -->
 			<div class="content sticky_nav_list" th:if="${planCornerListLength>0}">
@@ -157,17 +239,16 @@
                                     </div>
                                 </div>  
                                 </th:block>          
-                            </div>
-                            </th:block>
-                        </div>                
-                    </div>
-                </div>
-		    </div>
+                          	</div>
+                          </div>
+                      </th:block>
+                  </div>         
+              </div>
+          </div>
 		  
             <!-- //관련상품 리스트 -->  
-
-            <!-- 다른 기획전 보기 -->
-            <div class="content other_dp_slide" th:if="${listSize > 0}">
+             <!-- 다른 기획전,이벤트 보기 -->
+            <div class="content other_promotion_slide">
                 <div class="cont_head">
                     <div>
                         <h4 th:if="${planInfo.planGb == 'P'}">다른 기획전 보기</h4>
@@ -179,7 +260,7 @@
                 <div class="cont_body">
                     <div class="swiper-container">
                         <div class="swiper-wrapper">
-                        	<th:block th:each="PlanData, PlanStat : ${planList}">
+                           <th:block th:each="PlanData, PlanStat : ${planList}">
                             <div class="swiper-slide">                   
                                 <a th:onclick="cfnGoToPlanDetail([[${PlanData.planSq}]])">
                                     <div class="thumb">
@@ -197,14 +278,15 @@
                     <div class="swiper-button-next"></div>
                 </div>
             </div>
-            <!-- //다른 기획전 보기 -->
-        </div>
-        <form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
-				<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
-		</form>
-<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
-
-</div>
+       </div>
+  </div>       
+  
+
+<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true"></div>
+<form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
+	<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
+</form>
+
 <script th:inline="javascript">
 
 let review = [[${reviewInfo}]];
@@ -215,6 +297,7 @@ let goods1 = [[${goods1Info}]];
 let goods2 = [[${goods2Info}]];
 let goods4 = [[${goods4Info}]];
 let template =[[${templateOrd}]];
+let replyList = [[${replyList}]];
 let _mall = [[${@environment.getProperty('domain.front')}]];
 let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
 let imgUrl=[[${@environment.getProperty('upload.image.view')}]];
@@ -652,15 +735,56 @@ var fnJoinConfirm = function () {
 			document.pollListForm.submit();
 		}
 	})
-		
-	
-
 }
 
+// 댓글 입력 확인
+var fnTextConfirm = function() {
+	//로그인 확인
+	if (!cfCheckLogin()) {
+		mcxDialog.alert("로그인 후 참여 가능합니다.");
+		$("#replyText").val('');
+		return false;
+	}
+}
 
+var ajaxReplyList = function () {
+	 $.getJSON('/planning/reply/list?planSq='+plan.planSq, function(result, status) {
+		 console.log(result);
+		 if (status == 'success') {
+			 $("#replyList").html('');
+			 var html = '';
+			 html += '<div class="cmt_list_tit">';
+			 html += '	<strong>댓글</strong><span class="cnt">('+result.replyList.length.addComma()+')</span>';
+			 html += '</div>';
+			 html += '<ul class="cmt_list">';
+			 $.each(result.replyList, function (idx, item) {
+				 html += '	<li>';
+				 html += '		<div class="cmt_top">';
+				 html += '			<span class="writer">'+item.maskingCustId+'</span>';
+				 html += '			<span class="date">'+item.entryDt+'</span>';
+				 html += '		</div>';
+				 html += '		<div class="cmt_cont">';
+				 html += '			<div class="img_wrap clear">';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>';
+				 html += '			</div>';
+				 html += '			<p>'+item.entryVal1+'</p>';
+				 if (item.entryCustNo == result.custNo) {
+					 html += '			<button class="btn btn_default btn_del"><span>삭제</span></button>';
+				}
+				 html += '		</div>';
+				 html += '	</li>';
+			 });
+			 html += '</ul>';
+		 }
+		 $("#replyList").append(html);
+	 });
+}
 
 $(document).ready( function() {
-
+	ajaxReplyList();
 	//공유 버튼 토글 
 	$("button[data-name=openShare]").on("click", function(){
 		$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
@@ -761,16 +885,38 @@ $(document).ready( function() {
             clickable: true,
         },
     });
-
-    /* SLIDE - 다른 기획전 보기 */
-    var other_dp_slide_slide = new Swiper ('.other_dp_slide .swiper-container', {
+    /* SLIDE - 다른 기획전,이벤트 보기 */
+    var other_slide_slide = new Swiper ('.other_promotion_slide .swiper-container', {
 		slidesPerView: 5,
         spaceBetween: 20,
 		navigation: {
-			nextEl: '.other_dp_slide .swiper-button-next',
-			prevEl: '.other_dp_slide .swiper-button-prev',
+			nextEl: '.other_promotion_slide .swiper-button-next',
+			prevEl: '.other_promotion_slide .swiper-button-prev',
 		},
 	});            
+    
+	 // 첨부파일 갯수제한
+	$('.imgUpload .fileAdd').click(function(){
+		var maxFileLength = 10; /* 최대 파일 갯수를 입력해 주세요 */
+		var imgFiles=$('.imgUpload .pics');
+		if (imgFiles.length >= maxFileLength) {
+			alert('이미지는 최대' + maxFileLength +'장 까지 첨부 가능합니다.');
+			$('#fileAdd').attr("disabled",true);
+		} else if(imgFiles.length < maxFileLength){
+			$('#fileAdd').removeAttr("disabled");
+		}
+	});			
+
+	//댓글 작성시 글자 카운트
+	$('.cmt_ans').keyup(function (e){
+		var content = $(this).val();
+		$('#cmt_cnt').html(content.length);
+		if (content.length > 500){
+			alert("최대 500자까지 입력 가능합니다.");
+			$(this).val(content.substring(0, 500));
+			$('#cmt_cnt').html("500");
+		}
+	});
 
 });
 </script>

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

@@ -66,7 +66,7 @@
 						<div class="event_calander">
 							<div class="check_title">
 								<p>출석할수록 늘어나는 혜택!</p>
-								<div class="title"><strong>1월</strong> 출석체크</div>
+								<div class="title"><strong></strong> 출석체크</div>
 							</div>
 							<div class="check_info">
 								<span class="today">오늘</span>
@@ -76,7 +76,7 @@
 								<div class="my_attend_day">
 									<p>나의 출석 일수는?</p>
 									<span class="day">
-										<span>11</span>일
+										<span></span>일
 									</span>
 								</div>
 								<div class="tbl">
@@ -155,12 +155,12 @@
 							<img src="/images/pc/ico_content_find.png" alt="유의사항">
 							<p>유의사항</p>
 						</div>
-						<div class="announce_list">
-							<ul>
+						<div class="announce_list" th:if="${fsrcInfoTop != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
+							<!-- <ul>
 								<li>본 이벤트는 ID당 1회만 참여 가능합니다.</li>
 								<li>설문조사 참여 시 포인트를 지급해드립니다. (이벤트 종료 후, 일괄 지급)</li>
 								<li>지급된 포인트는 [ 마이페이지 > 나의 지갑 ] 메뉴에서 확인할 수 있습니다.</li>
-							</ul>
+							</ul> -->
 						</div>
 					</div> 
 				</div>
@@ -283,14 +283,15 @@ var appendHtml = function () {
 		html += '</tr>\n';
 
 		$("#monthTbody").append(html);
-		
-		$.each(custAttendList, function(idx1, item1) {
-			if(item1.entryDt == item.sun || item1.entryDt == item.mon || item1.entryDt == item.tue|| item1.entryDt == item.wed
-					|| item1.entryDt == item.thu || item1.entryDt == item.fri || item1.entryDt == item.sat){
-				$("#td_"+item.tue).attr("class","complete");
-			}
-		})
-	
+		if (cfCheckLogin()) {
+			$.each(custAttendList, function(idx1, item1) {
+				$('.day').html('<span>' + custAttendList.length + '</span>일');
+				if(item1.entryDt == item.sun || item1.entryDt == item.mon || item1.entryDt == item.tue|| item1.entryDt == item.wed
+						|| item1.entryDt == item.thu || item1.entryDt == item.fri || item1.entryDt == item.sat){
+					$("#td_"+item1.entryDt).attr("class","complete");
+				}
+			})
+		}
 	})    
 } 
 
@@ -315,19 +316,21 @@ var fnInfoConfirmCallBack = function(result) {
 };
 
 $(document).ready(function() {
+	appendHtml();
+	
 	if (!cfCheckLogin()) {
 		$(".day").html("<span>0</span>일");
+	}else{
+		$.each(custAttendList, function(idx, item) {
+			$('.day').html('<span>' + custAttendList.length + '</span>일');
+			if(item.entryDt == date){
+				$("#td_"+date).attr("class","complete");
+			}else{
+				$("#td_"+date).attr("class","today"); 
+			}
+		})
 	}
 	
-	appendHtml();
-	
-	$.each(custAttendList, function(idx, item) {
-		if(item.entryDt == date){
-			$("#td_"+date).attr("class","complete");
-		}else{
-			$("#td_"+date).attr("class","today"); 
-		}
-	})
 	
 	
 	

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

@@ -104,7 +104,7 @@ let fnGetEventList = function() {
 				if (result.length > 0) {
 					$('#eventTotCnt').html('<span>' + result.length.addComma() + '</span>개의 이벤트');
 					
-					$('#eventList').html('');
+					$("#divEventList").html('');
 					let tag = '';
 					tag += '<div  class="thumb_list">';
 					tag += '	<ul>';

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

@@ -30,6 +30,7 @@
 			<div class="content wide dp_hotdeal"> <!-- 페이지특정 클래스 = dp_hotdeal -->
 				<div class="cont_body">
                     <div class="hotdeal">
+                    <img src="/images/pc/thumb/hotdeal_bg2.jpg" alt="핫한 아이템을 핫한 가격에 LAST DAY DEAL">
                         <div id="countdown">
                             <span id="h-hours"></span>
                             <span id="h-minutes"></span>

+ 431 - 0
src/main/webapp/biz/goodsSession.js

@@ -0,0 +1,431 @@
+//****************상품목록  start **********************************
+var categoryGoodsList = [];
+var cnt = 1;
+var fnCreateGoodsList = function(result, ithrCd, contentLoc, searchGb) {
+	console.log('fnCreateGoodsList');
+	var specialPriceRate = result.specialPriceRate;
+	var tag = '';
+	$.each(result.dataList, function(idx, item) {
+		if (idx < 3) {
+			categoryGoodsList.push(item.goodsCd);
+		}
+
+		tag += '<li class="item">';
+		tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\', \''+ithrCd+'\', \''+contentLoc+'\');" class="link">';
+		//--베스트 상품 start--//
+		if (typeof(bestPageNo) != 'undefined' && bestPageNo != ""){
+			var cnt = ((idx+1)+((bestPageNo-1)*30));
+			if(cnt<10){
+				cnt = "0"+cnt;
+			}
+			tag += '<span class="rank">'+cnt+'</span>';
+		}
+		//--베스트 상품 end--//
+		var imgPath = '';
+		var imgSize = '1000';
+		if(item.imgType=='A'){
+			imgPath = _uploadGoodsUrl;
+			imgSize = '300';
+		}
+
+		if(_frontGb != "P"){
+			tag += '<img class="dummy" src=\''+_uximgUrl+'/image/mob/global/dummy.gif\' alt="" />';
+		}
+		tag += '<span class="img">';
+		if(item.imgPath6!=null && item.imgPath6!=''){
+			tag += '<img class="lazy active" data-src="'+imgPath+item.imgPath6.replace('1000', imgSize)+'" onerror="this.src=\''+_uximgUrl+'/image/web/common/no.gif\';">';
+			if(item.imgPath1 && _frontGb == "P"){
+				tag += '<img class="lazy" data-src="'+imgPath+item.imgPath1.replace('1000', imgSize)+'" onerror="this.src=\''+_uximgUrl+'/image/web/common/no.gif\';">';
+			}
+		}else{
+			tag += '<img class="lazy active" data-src="'+imgPath+item.imgPath1.replace('1000', imgSize)+'" onerror="this.src=\''+_uximgUrl+'/image/web/common/no.gif\';">';
+			if(item.imgPath2 && _frontGb == "P"){
+				tag += '<img class="lazy" data-src="'+imgPath+item.imgPath2.replace('1000', imgSize)+'" onerror="this.src=\''+_uximgUrl+'/image/web/common/no.gif\';">';
+			}
+		}
+
+		tag += '</span>';
+
+		if(_frontGb != "P"){
+			/*tag += '<div class="colors">';
+			if(item.colorGrpFile=='#FFFFFF'){
+				tag += '<span class="colorchip active" style="background-color:#FF0000"></span>';
+			}else{
+				tag += '<span class="colorchip active" style="background-color:'+item.colorGrpFile+'"></span>';
+			}
+			tag += '</div>';*/
+			tag += '<div class="info">';
+		}else{
+			tag += '<span class="info">';
+		}
+		tag += '<span class="brand">'+ item.brandGrpNm+'</span>';
+		tag += '<span class="title">'+item.goodsTnmFull+'</span>';
+		tag += '<span class="price">';
+		if(item.goodsType=='N'){
+			if(item.tagPrice>item.currPrice){
+				tag += '<span>'+item.dcRate+'%&nbsp;</span>';
+				tag += '<strong>'+item.currPrice.addComma()+'</strong>원';
+				tag += '<em>'+item.tagPrice.addComma()+'</em>';
+			}else{
+				tag += '<strong>'+item.currPrice.addComma()+'</strong>원';
+			}
+		}else{
+			tag += '<strong>'+item.currPrice.addComma()+'</strong>원 ~';
+		}
+		tag += '</span>';
+
+		if(_frontGb != "P"){
+			tag += '</div>';
+			tag += '<div class="icons">';
+
+		}else{
+			tag += '<span class="icons">';
+		}
+		if(item.spriceIcon > 0){
+			tag += '<img src="'+_uximgUrl+'/image/web/global/icon_sample3.gif" alt="특가" />';
+		}
+		if(item.bestIcon > 0){
+			tag += '<img src="'+_uximgUrl+'/image/web/global/icon_sample5.gif" alt="BEST" />';
+		}
+		if(item.newIcon < 5){
+			tag += '<img src="'+_uximgUrl+'/image/web/global/icon_sample2.gif" alt="NEW" />';
+		}
+		if(item.GoodsIconList!=null && typeof item.GoodsIconList!='undefined'){
+			$.each(item.GoodsIconList, function(idx2, icon) {
+				tag += '<img src="'+_imgUrl+ '/display/icon/' + icon.goodsIconImgPath + '" alt="" />';
+			});
+		}
+		tag += '</span>';
+
+		if(_frontGb != "P"){
+			tag += '</div>';
+		}else{
+			tag += '</span>';
+		}
+		tag += '</a>';
+		var wishActive = '';
+		if(item.wishYn=='Y'){
+			wishActive = 'active';
+		}
+		tag += '<button type="button" class="wish '+wishActive+'" goodsCd="'+item.goodsCd+'" onclick="cfnPutWishList(this)"  planDtlSq="">찜</button>';
+		tag += '</li>';
+	});
+
+	if (cnt == 1) {
+		// <!-- Criteo 카테고리/리스팅 태그 -->
+		window.criteo_q = window.criteo_q || [];
+		var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d";
+		window.criteo_q.push(
+			{event: "setAccount", account: 26073}, // 이 라인은 업데이트하면 안됩니다
+			{event: "setEmail", email: email}, // 유저가 로그인이 안되 있는 경우 빈 문자열을 전달
+			{event: "setSiteType", type: deviceType},
+			{event: "viewList", item: categoryGoodsList} // 가장 위에있는 3개의 상품 ID를 전달
+		);
+		// <!-- END 카테고리/리스팅 태그 -->
+		cnt++;
+	}
+
+	return tag;
+}
+
+
+// 인피니트 스크롤 초기화
+var fnCategoryGoodsInfiniteScrollInit = function(){
+	sessionStorage.removeItem(document.location.href);
+	//History 초기화
+	$("#listBox").html("");
+}
+
+//****************상품목록  end **********************************
+
+//****************상품상세  start **********************************
+// 브랜드 인기상품 (모바일)
+var jfGoodsCustRecommendSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsOther/frame", "html", "goodsCustRecommendArea", params);
+}
+
+//상품베너, 다른컬러, 함께본(카테고리 ) 상품
+var jfGoodsOtherSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsOther/frame", "html", "goodsOtherArea", params);
+}
+
+//상품평
+var jfGoodsReviewSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsReview/frame", "html", "goodsReviewArea", params);
+}
+
+//상품문의
+var jfGoodsQnaSearch = function(params) {
+	gagajf.ajaxSubmit("/goods/detail/goodsQna/frame", "html", "goodsQnaArea", params);
+}
+
+//재고수정시
+var jfStockChange = function(gb){
+
+	var obj = $("#goodsQty");
+	var objQty = parseInt($("#goodsQty").val());
+	if(gb == 'minus'){
+		if(gagajf.isNull($("#cartForm  input[name=sizeCd]").val())){
+			mcxDialog.alert("사이즈를 선택하세요.");
+		} else if(objQty <= parseInt($("#cartForm  input[name=minOrdQty]").val()) && !gagajf.isNull($("#cartForm  input[name=sizeCd]").val())){
+			mcxDialog.alert("구매하실 수 있는 최소 수량입니다.");
+		} else {
+			obj.val(objQty-1);
+		}
+	} else {
+		if(gagajf.isNull($("#cartForm  input[name=sizeCd]").val())){
+			mcxDialog.alert("사이즈를 선택하세요.");
+		}else if(objQty < parseInt($("#cartForm  input[name=maxOrdQty]").val())){
+			obj.val(objQty+1);
+		}else{
+			mcxDialog.alert("구매하실 수 있는 최대 수량입니다.");
+		}
+	}
+
+	$("#cartForm  input[name=ordQty]").val(obj.val());
+}
+
+//장바구니담기(단품)
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 바로구매, 장바구니 담기
+ * <pre>
+ *		addCart(btnType,goodsType);
+ * </pre>
+ * @param  : btnType - 장바구니. '' , 바로구매 : 'DIRECT'. 필수
+ * @param  : layer - 레이어 여부. 딜상품일 경우 . '' : 본창, 'layer':레이어창
+ * @since  : 2020/07/23
+ * @author : eskim
+ */
+var addCart = function(btnType, layer){
+	var params = [];
+	var goodsType = $("#cartForm  input[name=goodsType]").val();
+
+	if (goodsType == 'N'){
+		if (gagajf.isNull($("#cartForm  input[name=sizeCd]").val())) {
+			mcxDialog.alertC('사이즈를 선택해 주십시오.');
+			return;
+		}
+		var obj = new Object();
+
+		obj.btnType = btnType;
+		obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+		obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
+		obj.itemCd = $("#cartForm  input[name=goodsCd]").val();
+		obj.sizeCd = $("#cartForm  input[name=sizeCd]").val();
+		obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
+		obj.itemQty = 1;
+		obj.planDtlSq =$("#cartForm  input[name=planDtlSq]").val();
+		params.push(obj);
+
+	}else if (goodsType == 'S'){
+		var target=$('.sizelistCart');
+		var targetSize=target.length;
+		var itemSize = target.find('.item').find('input[type=radio]:checked').length;
+		if (targetSize != itemSize){
+			mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+			return false;
+		}
+
+		target.find('.item').find('input[type=radio]:checked').each(function() {
+
+			var arrInfo = $(this).val().split('|');	// 상품코드|사이즈|구성수량
+
+			var obj = new Object();
+			obj.btnType = btnType;
+			obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
+			obj.itemCd = arrInfo[0];
+			obj.sizeCd = arrInfo[1];
+			obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
+			obj.itemQty = Number(arrInfo[2]);
+			obj.planDtlSq =$("#cartForm  input[name=planDtlSq]").val();
+			params.push(obj);
+
+		});
+
+	}else{
+		if (layer == 'layer'){
+
+			var goodsSize = $("#optionListLayer").children('ul').length
+			if (goodsSize <= 0){
+				mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+				return false;
+			}
+			$('#optionListLayer > ul').each(function() {
+
+				var arrInfo = $(this).find('input[name="coption"]').val().split(':');
+
+				var obj = new Object();
+				obj.btnType = btnType;
+				obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+				obj.goodsCd =  $("#cartForm  input[name=goodsCd]").val();
+				obj.itemCd = arrInfo[0];
+				obj.sizeCd = arrInfo[1];
+				obj.goodsQty = $(this).find('input[name="cea"]').val();
+				obj.itemQty = 1;
+				obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+				params.push(obj);
+
+			});
+		}else{
+			if (_frontGb == "P"){
+				var goodsSize = $("#optionListDiv").children('ul').length
+				if (goodsSize <= 0){
+					mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+					return false;
+				}
+				$('#optionListDiv > ul').each(function() {
+
+					var arrInfo = $(this).find('input[name="coption"]').val().split(':');
+					$(this).find('input[name="coption"]').attr('goodsCd')
+
+					var obj = new Object();
+					obj.btnType = btnType;
+					obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+					obj.goodsCd =  $("#cartForm  input[name=goodsCd]").val();
+					obj.itemCd = arrInfo[0];
+					obj.sizeCd = arrInfo[1];
+					obj.goodsQty = $(this).find('input[name="cea"]').val();
+					obj.itemQty = 1;
+					obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+					params.push(obj);
+				});
+			}else{
+				var goodsSize = $("#optionListDiv").children('dl').length
+				if (goodsSize <= 0){
+					mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+					return false;
+				}
+				$('#optionListDiv > dl').each(function() {
+
+					var arrInfo = $(this).find('input[name="coption"]').val().split(':');
+					$(this).find('input[name="coption"]').attr('goodsCd')
+
+					var obj = new Object();
+					obj.btnType = btnType;
+					obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+					obj.goodsCd =  $("#cartForm  input[name=goodsCd]").val();
+					obj.itemCd = arrInfo[0];
+					obj.sizeCd = arrInfo[1];
+					obj.goodsQty = $(this).find('input[name="cea"]').val();
+					obj.itemQty = 1;
+					obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+					params.push(obj);
+				});
+			}
+		}
+	}
+
+	//DIRECT : 바로 구매. '' : 장바구니
+	cfnPutCartList(params);
+
+}
+
+
+//url 복사
+var jfCopyLinkUrl = function(goodsCd){
+	cfnCopyLinkUrl(location.protocol + _PAGE_GOODS_DETAIL + goodsCd);
+}
+
+//SNS 연동
+var jfSendToSns = function(goodsCd, goodsNm, goodsImg, snsGb) {
+	var linkUrl = location.protocol + _PAGE_GOODS_DETAIL + goodsCd;
+
+	if (goodsImg.indexOf("http") <= -1 || goodsImg.indexOf("https") <= -1){
+		var _goodsImgUrl = _uploadGoodsUrl;
+		goodsImg = "https:"+goodsImg;
+	}
+
+	if (snsGb == "FB"){
+		cfnSendToFaceBook(linkUrl,goodsNm ,goodsImg);
+	}else if (snsGb == "KK"){
+		if (_frontGb == "P"){
+			cfnSendToKakao(linkUrl,goodsNm ,goodsImg);
+		}else{
+			cfnSendToKakaoMob(linkUrl,goodsNm ,goodsImg);
+		}
+	}
+}
+
+//****************상품상세  end **********************************
+
+//****************상품검색  start **********************************
+// 상품 정렬
+var fnSortChange = function(sortGb) {
+	if($("#searchForm input:hidden[name=sortGb]").val()==sortGb){
+		return;
+	}
+	if (_frontGb == "P"){
+		$('.productsection .filterbutton').html('필터 열기<span>현재 상태 : 닫힘</span>').removeClass('active');
+		$('.filterlist').css({'height':'0'});
+	}else{
+		areaClose();
+	}
+	$("#searchForm input[name=sortGb]").val(sortGb);
+	fnCategoryGoodsInfiniteScrollInit();
+	fnGoodsListSearch();
+}
+
+
+var filterHtml = '';
+var filterStatHtml = '';
+// 필터 적용
+var fnFilterSearch = function() {
+	$(".filterstate .filter_div").empty();
+	fnCategoryGoodsInfiniteScrollInit();
+	filterHtml = '';
+	filterStatHtml = '';
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+	fnFilterSet('brand');
+	fnFilterSet('size');
+	fnFilterSet('color');
+	fnFilterSet('price');
+	if (_frontGb == "P"){
+		$('.productsection .filterbutton').html('필터 열기<span>현재 상태 : 닫힘</span>').removeClass('active');
+		$('.filterlist').css({'height':'0'});
+	}else{
+		areaClose();
+	}
+	fnGoodsListSearch();
+}
+
+var fnFilterSet = function(searchId) {
+
+	$("#searchForm input:hidden[name="+searchId+"Search]").remove();
+	$(".filterstate li[name="+searchId+"Stat]").remove();
+	var tag = '';
+	$('#filterForm input[name='+searchId+']:checked').each(function(){
+		tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).val()+'"/>\n';
+		$("#searchForm").append(tag);
+		filterHtml += tag;
+		if(_frontGb != "P"){
+			tag = '<button type="button" class="removefilter" onclick="fnFilterStatRemove(\''+searchId+'\', \''+$(this).val()+'\');">'+$(this).closest('li').children('label').text()+'</button>';
+			$(".filterstate .filter_div").append(tag);
+		}else{
+			tag = '<li name="'+searchId+'Stat">'+$(this).closest('li').children('label').text()+'<button type="button" onclick="fnFilterStatRemove(\''+searchId+'\', \''+$(this).val()+'\');">DELETE</button></li>';
+			$(".filterstate").append(tag);
+		}
+		filterStatHtml += tag;
+	});
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+}
+
+var fnFilterStatRemove = function(searchId, val){
+	$('#filterForm input[name='+searchId+']:checked').each(function(){
+		if($(this).val()==val){
+			$(this).attr("checked", false);
+			$(this).parent().removeClass("active");
+		}
+	});
+	fnFilterSearch();
+}
+
+// 필터 초기화
+var fnFilterReset = function() {
+	filterReset();
+}
+//****************상품검색  end **********************************

+ 205 - 0
src/main/webapp/ux/plugins/gaga/gaga.infinite.scroll.js

@@ -0,0 +1,205 @@
+/*
+ * 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
+		}
+	},
+	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 = History.getState();
+
+		if (historyData.data.pageNum === undefined || historyData.data.pageNum === '' || historyData.data.htm === undefined || historyData.data.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.data.pageNum;
+			this.pageStatus.pageNum[0] = historyData.data.pageNum;
+			this.pageStatus.historyScroll = historyData.data.dataIndex;
+			this.pageStatus.loadAlign = 'next';
+
+			gagaInfiniteScroll.draw(historyData.data.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() {
+				if (len - 1 == loadCheck) {
+					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) {
+		History.replaceState({
+			  state: page
+			, scroll: sScrollTop
+			, height: sHeight
+			, pageUrl: gagaInfiniteScroll.pageStatus.pageUrl
+			, name: gagaInfiniteScroll.pageStatus.nowPage
+			, pageNum : sPageNum
+			, dataIndex : sDataIndex
+			, htm : sHtml
+		}, "", "");
+	},
+	pushLinkHistory : function(pageNum, dataIndex, obj) { // 링크에서 사용
+		var $pageNum = (pageNum || pageNum == 0) ? pageNum : '';
+		var $dataIndex = (dataIndex || dataIndex == 0) ? dataIndex : '';
+		var $html = (obj) ? $(obj).parents('#listBox').html() : '';
+
+		History.replaceState({
+			  state : gagaInfiniteScroll.pageStatus.nowPage
+			, scroll : $(window).scrollTop()
+			, height : $('#infiniteContainer').height()
+			, pageUrl : gagaInfiniteScroll.pageStatus.pageUrl
+			, name : gagaInfiniteScroll.pageStatus.nowPage
+			, pageNum : $pageNum
+			, dataIndex : $dataIndex
+			, htm : $html
+		}, "", "");
+
+		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);
+	}
+};

+ 11 - 4
src/main/webapp/ux/style24_link.js

@@ -584,6 +584,9 @@ function cfGoodsInstockAlarmInfo(goodsCd, colorCd) {
 */
 function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq) {
 	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
 
 	if ($('#layer_review_best').length == 0) {
 		$('body').append(str);
@@ -607,7 +610,10 @@ function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq) {
 */
 function cfGoodsReviewPhoto(goodsCd) {
 	var str = '<div class="modal fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="pdPhotoReviewListLabel" aria-hidden="true"></div>';
-
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
+	
 	if ($('#layer_review_photo').length == 0) {
 		$('body').append(str);
 	}
@@ -1004,8 +1010,9 @@ var cfnGoToCategoryMain = function(cateGb, cate1No) {
  * @access : public
  * @desc   : 품목메인 페이지로 이동
  * <pre>
- *		cfnGoToGoodsList('G032_10', 1100);
+ *		cfnGoToGoodsList(0, 'G032_10', 1100);
  * </pre>
+ * @param  : brandGroupNo - 브랜드그룹번호(BYITEM 기준이면 0. 이외는 브랜드그룹번호). 필수
  * @param  : cateGb - 카테고리구분. 필수
  * @param  : cate1No - 카테고리1번호. 필수
  * @param  : cate2No - 카테고리2번호. 옵션
@@ -1015,8 +1022,8 @@ var cfnGoToCategoryMain = function(cateGb, cate1No) {
  * @since  : 2021/03/22
  * @author : gagamel
  */
-var cfnGoToGoodsList = function(cateGb, cate1No, cate2No, cate3No, cate4No, cate5No) {
-	var params = '?cateGb=' + cateGb + '&cate1No=' + cate1No;
+var cfnGoToGoodsList = function(brandGroupNo, cateGb, cate1No, cate2No, cate3No, cate4No, cate5No) {
+	var params = '?brandGroupNo=' + brandGroupNo + '&cateGb=' + cateGb + '&cate1No=' + cate1No;
 	if (typeof (cate2No) != 'undefined') params += '&cate2No=' + cate2No;
 	if (typeof (cate3No) != 'undefined') params += '&cate3No=' + cate3No;
 	if (typeof (cate4No) != 'undefined') params += '&cate4No=' + cate4No;