Преглед на файлове

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

card007 преди 5 години
родител
ревизия
fb506a0e96
променени са 60 файла, в които са добавени 2073 реда и са изтрити 1246 реда
  1. 0 2
      src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java
  2. 0 16
      src/main/java/com/style24/front/biz/service/TsfDeliveryService.java
  3. 1 1
      src/main/java/com/style24/front/biz/service/TsfGiftcardService.java
  4. 27 6
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  5. 246 0
      src/main/java/com/style24/front/biz/thirdparty/EigeneaiApi.java
  6. 0 104
      src/main/java/com/style24/front/biz/thirdparty/Yes24Giftcard.java
  7. 7 1
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  8. 0 1
      src/main/java/com/style24/front/biz/web/TsfDeliveryController.java
  9. 24 6
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  10. 18 0
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  11. 5 0
      src/main/java/com/style24/front/biz/web/TsfIndexController.java
  12. 62 0
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  13. 7 0
      src/main/java/com/style24/persistence/domain/Plan.java
  14. 0 44
      src/main/java/com/style24/persistence/domain/Popup.java
  15. 46 0
      src/main/java/com/style24/persistence/domain/eigene/Eigeneai.java
  16. 0 14
      src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml
  17. 69 29
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  18. 44 12
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  19. 2 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  20. 4 4
      src/main/resources/config/application-locd.yml
  21. 6 5
      src/main/resources/config/application-style.yml
  22. 5 4
      src/main/resources/config/application-tsit.yml
  23. 2 2
      src/main/webapp/WEB-INF/views/mob/SigninFormMob.html
  24. 1 1
      src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html
  25. 2 2
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  26. 144 0
      src/main/webapp/WEB-INF/views/mob/customer/ConsentUseInfoFormMob.html
  27. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html
  28. 15 1
      src/main/webapp/WEB-INF/views/mob/customer/PrivacyPolicyLayerFormMob.html
  29. 14 0
      src/main/webapp/WEB-INF/views/mob/customer/PrivacyTrustLayerFormMob.html
  30. 14 1
      src/main/webapp/WEB-INF/views/mob/customer/UseTermsLayerFormMob.html
  31. 330 190
      src/main/webapp/WEB-INF/views/mob/display/CategoryGoodsListFormMob.html
  32. 164 26
      src/main/webapp/WEB-INF/views/mob/display/LookbookMainFormMob.html
  33. 7 8
      src/main/webapp/WEB-INF/views/mob/goods/GoodsCouponFormMob.html
  34. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html
  35. 16 14
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  36. 21 7
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  37. 2 3
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html
  38. 8 4
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html
  39. 54 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningCouponDetailFormMob.html
  40. 225 598
      src/main/webapp/WEB-INF/views/mob/planning/PlanningDetailFormMob.html
  41. 157 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningReplyPhotoFormMob.html
  42. 2 2
      src/main/webapp/WEB-INF/views/web/SigninFormWeb.html
  43. 2 2
      src/main/webapp/WEB-INF/views/web/customer/ConsentUseInfoFormWeb.html
  44. 1 1
      src/main/webapp/WEB-INF/views/web/customer/JoinTypeFormWeb.html
  45. 8 8
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  46. 125 69
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  47. 2 2
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  48. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  49. 10 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  50. 17 8
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  51. 3 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewPhotoFormWeb.html
  52. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  53. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  54. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  55. 9 11
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  56. 2 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  57. 1 1
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  58. 97 11
      src/main/webapp/biz/goods.js
  59. 1 1
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollLayer.js
  60. 36 6
      src/main/webapp/ux/style24_link.js

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

@@ -61,8 +61,6 @@ public interface TsfDeliveryDao {
 	void updateOrdChgSqStat(SweetTracker sweetTracker);		
 	
 
-	int saveTemp(SweetTracker sweetTracker);
-
 	/**
 	 * 스윗트래커 정보 조회
 	 * 

+ 0 - 16
src/main/java/com/style24/front/biz/service/TsfDeliveryService.java

@@ -95,22 +95,6 @@ public class TsfDeliveryService {
 		sweetTracker.setDelvWhere(sweetTracker.getWhere());
 		deliveryDao.insertTbSweetTracker(sweetTracker);
 	}
-	
-	/**
-	 * 스윗트래커 배송상태 등록 및 주문상세상태 변경 
-	 * @param  SweetTracker
-	 * @return 
-	 * @author moon
-	 * @since  2021. 04. 13
-	 */
-	@Transactional("shopTxnManager")
-	public int saveTemp(String msg) {
-		int rtn=0;
-		SweetTracker tmp = new SweetTracker();
-		tmp.setMan(msg);
-		deliveryDao.saveTemp(tmp);
-		return rtn;
-	}
 
 	/**
 	 * 스윗트래커 정보 조회

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

@@ -2,11 +2,11 @@ package com.style24.front.biz.service;
 
 import java.util.Collection;
 
+import com.style24.core.biz.thirdparty.Yes24Giftcard;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.style24.front.biz.dao.TsfGiftcardDao;
-import com.style24.front.biz.thirdparty.Yes24Giftcard;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;

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

@@ -1016,9 +1016,7 @@ public class TsfOrderService {
 			// 장바구니 등록된 주문 정보 조회
 			Collection<Order> cartList = coreOrderService.getCartGoodsList(param);
 
-			// 배송비 정보 조회
-			GagaMap delvMap = coreOrderService.getCartDelvGoodsCntList(cartList, param);
-			param.setDelvFeeCdList((Collection<Order>) delvMap.get("delvFeeCdList"));
+			log.info("CHECK DELV_FEE 1 ::::: {}", cartList.stream().iterator().next().getDelvFee());
 
 			// 주문 상세 정보 세팅
 			for(Order item : cartList) {
@@ -1028,12 +1026,23 @@ public class TsfOrderService {
 				item.setShotDelvYn("N");
 				item.setGiftPackYn("N");
 				item.setRegNo(param.getCustNo());
+				item.setOrgDelvFee(item.getDelvFee());
 			}
 			param.setOrderDetailList(cartList);
 
+			log.info("CHECK DELV_FEE 2 ::::: {}", cartList.stream().iterator().next().getDelvFee());
+
+			// 배송비 정보 조회
+			GagaMap delvMap = coreOrderService.getCartDelvGoodsCntList(cartList, param);
+			param.setDelvFeeCdList((Collection<Order>) delvMap.get("delvFeeCdList"));
+
+			log.info("CHECK DELV_FEE 3 ::::: {}", param.getOrderDetailList().stream().iterator().next().getDelvFee());
+
 			// 주문 정보 등록
 			coreOrderService.createPreOrder(param);
 
+			log.info("CHECK DELV_FEE 4 ::::: {}", param.getOrderDetailList().stream().iterator().next().getDelvFee());
+
 			// 네이버페이 기본정보
 			String shopId			= env.getProperty("naverPay.shop.id");				// shopId
 			String certificationKey	= env.getProperty("naverPay.certification.key");	// 네이버페이 인증키
@@ -1061,6 +1070,9 @@ public class TsfOrderService {
 			sb.append("\t</interface>\n");
 
 			for(Order item : param.getOrderDetailList()) {
+
+				log.info("CHECK DELV_FEE 5 ::::: {}", item.getDelvFee());
+
 				//<!-- 상품정보 -->
 				sb.append("\t<product>\n");
 				sb.append("\t\t<id>").append(item.getGoodsCd()).append("</id>\n");								//<!-- 상품코드 -->
@@ -1098,10 +1110,12 @@ public class TsfOrderService {
 				sb.append("\t\t\t</selectedItem>\n");
 				sb.append("\t\t</option>\n");
 
+				log.info("CHECK DELV_FEE 6 ::::: {}", item.getDelvFee());
+
 				// 배송비 판단 후 배송비유형 선택 (추가 기본배송비, 무료배송비 기준 조회후 등록)
 				//<!-- 배송정보 -->
 				String delvFeeCrite = "CHARGE";
-				int delvFee = item.getDelvFee();
+				int delvFee = item.getOrgDelvFee();
 				String feePayType = "PREPAYED";
 				// 배송비 조건
 				if(TscConstants.DelvFeeCrite.NORMAL.value().equals(item.getDelvFeeCrite())) {
@@ -1112,12 +1126,15 @@ public class TsfOrderService {
 					delvFee = 0;
 				}
 
+				log.info("CHECK DELV_FEE 7 ::::: {}", item.getDelvFee());
+
 				sb.append("\t\t<shippingPolicy>\n");
 				sb.append("\t\t\t<groupId>").append(item.getDelvFeeCd()).append("</groupId>\n");		//<!-- 배송비묶음그룹ID -->
 				sb.append("\t\t\t<method>DELIVERY</method>\n");											//<!-- 배송방법 : 택배,소포,등기 -->
 				sb.append("\t\t\t<feeType>").append("CONDITIONAL_FREE").append("</feeType>\n");			//<!-- 배송비유형 : 유료 -->
 				sb.append("\t\t\t<feePayType>").append("PREPAYED").append("</feePayType>\n");			//<!-- 배송비결제방법 : 선불 -->
-				sb.append("\t\t\t<feePrice>").append(item.getDelvFee()).append("</feePrice>\n");		//<!-- 기본배송비 -->
+				//sb.append("\t\t\t<feePrice>").append(item.getDelvFee()).append("</feePrice>\n");		//<!-- 기본배송비 -->
+				 sb.append("\t\t\t<feePrice>").append(delvFee).append("</feePrice>\n");					//<!-- 기본배송비 -->
 
 				// 조건부 무료일경우에만 송부
 				if(TscConstants.DelvFeeCrite.NORMAL.value().equals(item.getDelvFeeCrite())) {
@@ -1138,8 +1155,12 @@ public class TsfOrderService {
 
 			result = sendOrderInfoToNC(sb);
 
+			log.info("CHECK state ::::: {}", result.get("state").toString());
+			log.info("CHECK orderKey ::::: {}",result.get("orderKey").toString());
+			log.info("CHECK resultNo ::::: {}", result.get("resultNo").toString());
+
 			// 네이버 페이 주문번호 저장
-			param.setNpayOrdNo(Integer.parseInt(result.get("orderKey").toString()));
+			param.setNpayOrdNo(Integer.parseInt(result.get("resultNo").toString()));
 
 			log.info("CHECK NAVER PAY ORD NO ::::: {}", param.getNpayOrdNo());
 

+ 246 - 0
src/main/java/com/style24/front/biz/thirdparty/EigeneaiApi.java

@@ -0,0 +1,246 @@
+package com.style24.front.biz.thirdparty;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import com.google.gson.Gson;
+import com.style24.persistence.domain.eigene.Eigeneai;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 추천솔루션 - Eigene.ai
+ *
+ * @author gagamel
+ * @since 2021. 5. 14
+ */
+@Component
+@Slf4j
+public class EigeneaiApi {
+
+	private String apiUrl = "http://api.eigene.io/rec";
+	private String cuid = "1252aed4-78dc-46e8-b784-94ac42e86dd4";
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	@PostConstruct
+	public void init() {
+		log.debug("\n\n---- Eigene.ai initialization started ----");
+		log.debug("apiUrl: [{}]", apiUrl);
+		log.debug("cuid: [{}]", cuid);
+		log.debug("\n--- Eigene.ai initialization completed ----\n");
+	}
+
+	/**
+	 * 주간베스트추천상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getWeeklyBestGoodsList(int size) {
+		String requestUrl = apiUrl + "/m008?cuid=" + cuid + "&size=" + size;
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 카테고리별 주간베스트추천상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getCategoryWeeklyBestGoodsList(int size) {
+		// TODO: 카테고리ID는 어떻게 조회? 아이겐 미개발
+		String requestUrl = apiUrl + "/m008?cuid=" + cuid + "&cids=" + "" + "&size=" + size;
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 월간클릭베스트추천상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getMonthlyClickBestGoodsList(int size) {
+		// TODO: 아이겐 미개발
+		String requestUrl = apiUrl + "/m008?cuid=" + cuid + "&cids=" + "" + "&size=" + size;
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 실시간베스트상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getRealtimeBestGoodsList(int size) {
+		String requestUrl = apiUrl + "/stats-transition?cuid=" + cuid + "&size=" + size;
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 매출급상승 카테고리별 상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getSalesSoaringGoodsList() {
+		// TODO: 매출급상승 카테고리 5개 조회 후 카테고리별 상품 7개 조회
+		String requestUrl = apiUrl + "/m010?cuid=" + cuid + "&size=5";
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 고객의 최근검색어별 상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Collection<Eigeneai> getCustomerKeywordGoodsList() {
+		Collection<Eigeneai> dataList = new ArrayList<>();
+
+		// 고객별 최근검색어 목록. TODO: 아이겐에서 미개발
+		String requestUrl = apiUrl + "/m010?cuid=" + cuid + "&size=5";
+		Eigeneai eigeneai = this.getRecommendationGoodsList(requestUrl);
+
+		Collection<Eigeneai.Result> resultList = eigeneai.getResults();
+		if (resultList == null || resultList.isEmpty()) {
+			return dataList;
+		}
+
+		// 고객별 최근검색어 기준 검색어연관상품 목록 조회
+		for (Eigeneai.Result result : resultList) {
+			dataList.add(this.getKeywordGoodsList(result.getCategoryId(), 10));
+		}
+
+		return dataList;
+	}
+
+	/**
+	 * 검색어연관상품 목록
+	 * @param keyword - 키워드
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getKeywordGoodsList(String keyword, int size) {
+		String requestUrl = apiUrl + "/s001?cuid=" + cuid + "&size=" + size;
+		try {
+			requestUrl += "&st=" + URLEncoder.encode(keyword, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 실시간 많이 조회되고 있는 상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getRealtimeGoodsList(int size) {
+		String requestUrl = apiUrl + "/stream?cuid=" + cuid + "&size=" + size; //iids
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 연관상품 목록
+	 * @param goodsCd - 상품코드
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getRelatedGoodsList(String goodsCd, int size) {
+		String requestUrl = apiUrl + "/a003?cuid=" + cuid + "&iids=" + goodsCd + "&size=" + size;
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 브랜드 연관상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getBrandRelatedGoodsList(int size) {
+		// TODO: 아이겐 미개발 (a004&cids=category3 or a002&inbids=brandId)
+		String requestUrl = apiUrl + "/a004?cuid=" + cuid + "&cids=" + "" + "&size=" + size;
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 동일 카테고리 연관상품 목록
+	 * @param goodsCd - 상품코드
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getSameCategoryRelatedGoodsList(String goodsCd, int size) {
+		String requestUrl = apiUrl + "/a002?cuid=" + cuid + "&iids=" + goodsCd + "&size=" + size;
+		return this.getRecommendationGoodsList(requestUrl);
+	}
+
+	/**
+	 * 상품의 실시간 조회수
+	 * @param goodsCd - 상품코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getRealtimeViewCount(String goodsCd) {
+		// TODO: 아이겐 미개발 (건수를 가져오는 걸로 해야하지 않을까?)
+		String requestUrl = apiUrl + "/stat?cuid=" + cuid + "&cids=" + goodsCd;
+		Eigeneai eigeneai = this.getRecommendationGoodsList(requestUrl);
+		return eigeneai;
+	}
+
+	/**
+	 * 추천상품 목록
+	 * @param requestUrl - Reqeust URL
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	private Eigeneai getRecommendationGoodsList(String requestUrl) {
+		log.info("requestUrl: {}", requestUrl);
+		URI url = URI.create(requestUrl);
+
+		// GET방식으로 호출
+		ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
+		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+		String responseJson = responseEntity.getBody();
+		log.info("responseEntity.getBody(): {}", responseJson);
+
+		if (!responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+			return null;
+		}
+
+		Gson gson = new Gson();
+		return gson.fromJson(responseJson, Eigeneai.class);
+	}
+
+}

+ 0 - 104
src/main/java/com/style24/front/biz/thirdparty/Yes24Giftcard.java

@@ -1,104 +0,0 @@
-package com.style24.front.biz.thirdparty;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.StringReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.soap.MessageFactory;
-import javax.xml.soap.Node;
-import javax.xml.soap.SOAPBody;
-import javax.xml.soap.SOAPConnection;
-import javax.xml.soap.SOAPConnectionFactory;
-
-import javax.xml.soap.SOAPMessage;
-import javax.xml.soap.SOAPPart;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathFactory;
-
-import org.springframework.stereotype.Component;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Component
-@Slf4j
-public class Yes24Giftcard {
-
-	public String soapDataTransfer(String pubNo, String ip, Integer userId) throws Exception {
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		Document doc = null;
-
-		// request SOAP message DOMSource create
-		String message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-				+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
-				+ "<soap:Body>" + "<Approval xmlns=\"http://tempuri.org/\">" + "<ticPubNo>" + pubNo + "</ticPubNo>"
-				+ "<ipAddress>" + ip + "</ipAddress>" + "<iStyle24UserID>" + userId + "</iStyle24UserID>"
-				+ "</Approval>" + "</soap:Body>" + "</soap:Envelope>";
-
-		OutputStreamWriter wr = null;
-		BufferedReader in = null;
-
-		String strURL = "http://api.yes24.com/Yes24GiftTicketAPI/Yes24GiftTicketService.asmx";
-
-		URL url = new URL(strURL); // 보낼 주소
-		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-
-		conn.setDoOutput(true);
-		conn.setRequestMethod("POST");
-		conn.addRequestProperty("Content-Type", "text/xml");
-		wr = new OutputStreamWriter(conn.getOutputStream());
-		wr.write(message);
-		wr.flush();
-		int code = conn.getResponseCode();
-
-		String inputLine = null;
-		StringBuffer buffer = new StringBuffer();
-		in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
-		while ((inputLine = in.readLine()) != null) {
-			buffer.append(inputLine);
-		}
-		System.out.println(buffer.toString()); // 결과 값
-
-		// xml 파싱하기
-		InputSource is = new InputSource(new StringReader(buffer.toString()));
-
-		Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
-
-		NodeList nodeList = null;
-		ArrayList<Map<String, String>> xmlList = new ArrayList<Map<String, String>>();
-		String getNodeName = "";
-		String childnodevalue = "";
-		if (document.getFirstChild().getChildNodes().getLength() > 0) {
-			getNodeName = document.getFirstChild().getFirstChild().getNodeName();
-
-			nodeList = document.getElementsByTagName(getNodeName);
-			
-			for (int i = 0; i < nodeList.getLength(); i++) {
-				NodeList childList = nodeList.item(i).getChildNodes();
-
-				for (int j = 0; j < childList.getLength(); j++) {
-					String childnodename = childList.item(j).getNodeName();
-					childnodevalue = childList.item(j).getTextContent();
-				}
-			}
-		} 
-
-		return childnodevalue;
-	}
-
-}

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

@@ -2,6 +2,7 @@ package com.style24.front.biz.web;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import javax.websocket.server.PathParam;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -878,6 +879,10 @@ public class TsfCustomerController extends TsfBaseController {
 		CustSnsInfo custSnsInfo = (CustSnsInfo)session.getAttribute("custSnsInfo");
 		session.removeAttribute("custSnsInfo"); // YES24 세션 지움
 
+		if (custSnsInfo == null) {
+			throw new IllegalStateException("연계정보 값이 없습니다. 고객센터에 문의하시기 바랍니다.");
+		}
+
 		// 1. SNS처리
 		GagaMap resultMap = customerService.customerSnsProcessing(custSnsInfo);
 		String custStat = resultMap.getString("custStat");
@@ -916,9 +921,10 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 04. 01
 	 */
 	@PostMapping("/privacy/policy/layer")
-	public ModelAndView getPrivacyPolicyLayer() {
+	public ModelAndView getPrivacyPolicyLayer(HttpServletRequest request) {
 		ModelAndView mav = new ModelAndView();
 		mav.addObject("clause", clauseService.getClause(TscConstants.Site.STYLE24.value(), "G057_11"));
+		mav.addObject("mallGb", request.getParameter("mallGb"));
 		mav.setViewName(super.getDeviceViewName("customer/PrivacyPolicyLayerForm"));
 		return mav;
 	}

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

@@ -51,7 +51,6 @@ public class TsfDeliveryController extends TsfBaseController {
 	@ResponseBody
 	public String sweetTrackerResponse(@RequestBody SweetTracker  sweetTracker) throws Exception {
 
-		deliveryService.saveTemp(sweetTracker.toString());
 		
 		JsonObject rtn = new JsonObject();
 		

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

@@ -470,12 +470,30 @@ public class TsfDisplayController extends TsfBaseController {
 	 * @author bin2107
 	 * @since 2021. 3. 30
 	 */
-	@GetMapping("/lookbook/main/list")
+//	@GetMapping("/lookbook/main/list")
+//	@ResponseBody
+//	public Collection<Lookbook> lookbooklist(Lookbook lookbook) {
+//		lookbook.setFrontGb(TsfSession.getFrontGb());
+//		lookbook.setFrontYn("Y");
+//		return coreLookbookService.getLookbookList(lookbook);
+//	}
+	@PostMapping("/lookbook/main/list")
 	@ResponseBody
-	public Collection<Lookbook> lookbooklist(Lookbook lookbook) {
-		lookbook.setFrontGb(TsfSession.getFrontGb());
-		lookbook.setFrontYn("Y");
-		return coreLookbookService.getLookbookList(lookbook);
+	public GagaMap lookbooklist(@RequestBody Lookbook params){
+		GagaMap result = new GagaMap();
+		TscPageRequest pageable = new TscPageRequest((params.getPageNo() > 0 ? params.getPageNo() - 1 : 0), params.getPageSize(), params.getPageUnit());
+		pageable.setTotalCount(coreLookbookService.getLookbookListCount(params));
+
+		params.setPageable(pageable);
+		result.set("paging", pageable);
+		result.set("dataList", coreLookbookService.getLookbookList(params));
+		return result;
+	}
+
+	@GetMapping("/lookbook/main/brand/list")
+	@ResponseBody
+	public Collection<Lookbook> lookbookBrandList(Lookbook lookbook){
+		return coreLookbookService.lookbookBrandList(lookbook);
 	}
 
 	/**
@@ -530,7 +548,7 @@ public class TsfDisplayController extends TsfBaseController {
 			popup.setCateNo(Integer.parseInt(paramMap.get("cateNo")));
 		}
 		popup.setBrandCd(paramMap.get("brandCd"));
-		popup.setPlanSq(paramMap.get("planSq"));
+		popup.setPlanSq((StringUtils.isBlank(paramMap.get("planSq").toString())? 0 : Integer.parseInt(paramMap.get("planSq"))));
 		popup.setPreview(paramMap.get("preview"));
 		popup.setViewDt(paramMap.get("viewDt"));
 		return displayService.getPopupList(popup);

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

@@ -30,6 +30,7 @@ import com.style24.front.biz.service.TsfRecentlyGoodsService;
 import com.style24.front.biz.service.TsfRendererService;
 import com.style24.front.biz.service.TsfReviewService;
 import com.style24.front.biz.service.TsfWishlistService;
+import com.style24.front.biz.thirdparty.EigeneaiApi;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
@@ -49,6 +50,7 @@ import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.WishList;
+import com.style24.persistence.domain.eigene.Eigeneai;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -104,6 +106,9 @@ public class TsfGoodsController extends TsfBaseController {
 	@Autowired
 	private TsfRecentlyGoodsService recentlyGoodsService;
 
+	@Autowired
+	private EigeneaiApi eigeneaiApi;
+
 	/**
 	 * 상품상세
 	 *
@@ -1575,4 +1580,17 @@ public class TsfGoodsController extends TsfBaseController {
 		return result;
 	}
 
+	/**
+	 * 상품상세 > 이 상품과 비슷한 상품
+	 * @param goodsCd - 상품코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	@GetMapping("/same/category/goods/list/{goodsCd}")
+	@ResponseBody
+	public Eigeneai getSameCategoryGoodsList(@PathVariable String goodsCd) {
+		return eigeneaiApi.getSameCategoryRelatedGoodsList(goodsCd, 10);
+	}
+
 }

+ 5 - 0
src/main/java/com/style24/front/biz/web/TsfIndexController.java

@@ -360,6 +360,11 @@ public class TsfIndexController extends TsfBaseController {
 		GagaMap userInfo = new GagaMap();
 		log.info("ipn {}", ipn);
 		log.info("ipin {}", ipin);
+
+//		if (StringUtils.isBlank(ipn)) {
+//			ipin = "TQnw8ltThGlTy5cDnD0GW6ZgQ/OEH5FBFhjI5NFmCsZ+dmk3DHCFFcRSBT5+sLSIiReYKFUYnwfYGbW31Asj8picaODc8OHNxKjKwcl1hVEmZOeI5PT709zuMBUCR89sV6w3jpgX0QeAJPGdr+Lfmg==";
+//		}
+
 		if (StringUtils.isNotBlank(ipin)) {
 			userInfo = yes24Login.getUserInfo(ipin);
 			userInfo.setString("snsType", TscConstants.SnsType.YES24.value());

+ 62 - 0
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -39,6 +39,7 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustCoupon;
 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.Point;
 import com.style24.persistence.domain.Poll;
@@ -207,6 +208,13 @@ public class TsfPlanningController extends TsfBaseController {
 
 		// 상품2열 전시
 		plan.setTmplType("G082_51");
+		/*
+		 * if (TsfSession.getFrontGb().equals("M")) { TscPageRequest pageable = new
+		 * TscPageRequest((plan.getPageNo2() > 0 ? plan.getPageNo2() - 1 : 0),
+		 * plan.getPageSize2(), plan.getPageUnit2()); int totalCnt =
+		 * planningService.getPlanGoodsDisplayList(plan).size();
+		 * pageable.setTotalCount(totalCnt); plan.setPageable2(pageable); }
+		 */
 		mav.addObject("goods2Info", planningService.getPlanGoodsDisplayList(plan));
 
 		// 상품4열 전시
@@ -254,6 +262,41 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 모바일 상품 2열 전시 더보기
+	 * @param plan
+	 * @return
+	 * @author sowon
+	 * @since 2021. 05. 14
+	 */
+	@PostMapping("/goods/list")
+	@ResponseBody
+	public GagaMap getPlanningGoodsList(@RequestBody Plan plan) {
+		
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		if (TsfSession.isLogin()) {
+			plan.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+		plan.setFrontGb(TsfSession.getFrontGb());
+		GagaMap result = new GagaMap();
+		plan.setTmplType("G082_51");
+		plan.setPlanStat("Y");
+		result.set("planGoods2List", planningService.getPlanGoodsDisplayList(plan).size());
+		
+		TscPageRequest pageable = new TscPageRequest((plan.getPageNo2() > 0 ? plan.getPageNo2() - 1 : 0), plan.getPageSize2(), plan.getPageUnit2());
+		int totalCnt = planningService.getPlanGoodsDisplayList(plan).size();
+		
+		pageable.setTotalCount(totalCnt);
+		plan.setPageable2(pageable);
+		result.set("paging1", plan);
+		result.set("totalCnt", totalCnt);
+		result.set("endRow", pageable.getEndRow());
+		result.set("dataList", planningService.getPlanGoodsDisplayList(plan));
+
+		return result;
+	}
+
+	
 	/**
 	 * 기획전 쿠폰 상세보기 팝업
 	 *
@@ -272,6 +315,25 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 댓글이미지상세 -  댓글 상세 레이어
+	 * @return
+	 * @author sowon
+	 * @since 2021. 5. 15
+	 */
+	@PostMapping("/reply/detail/layer")
+	public ModelAndView planReplyDetailForm(Plan plan) {
+		ModelAndView mav = new ModelAndView();
+
+		// 상품 기본정보
+		mav.addObject("plan",plan);
+
+		mav.addObject("replyAttachList",planningService.getEntryReplyAttachList(plan));
+		mav.addObject("replyList",planningService.getReplyList(plan));
+		mav.setViewName(super.getDeviceViewName("planning/PlanningReplyPhotoForm"));
+		return mav;
+	}
+	
 	/**
 	 * 기획전/이벤트 댓글 리스트
 	 *

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

@@ -210,6 +210,7 @@ public class Plan extends TscBaseDomain {
 	private String reDispYn;			//리뷰전시여부
 	private String reItemNm;			//리뷰상품이름
 	private Integer rePlanContSq;		//리뷰 컨텐츠일련번호
+	private String planStat;
 
 	private String cuTitle;				//쿠폰타이틀
 	private long cuDispOrd;				//쿠폰전시순서
@@ -271,6 +272,7 @@ public class Plan extends TscBaseDomain {
 	private String entryVal7;			//참여값7
 	private String entryVal8;			//참여값8
 	private Integer planEntrySq;		//참여일련번호
+	private Integer planEntryAtSq;
 	private String orgFileNm;
 	private String sysFileNm;
 	private String entryAllYn;
@@ -293,6 +295,11 @@ public class Plan extends TscBaseDomain {
 	private int pageNo = 1;
 	private int pageSize = 10;
 	private int pageUnit = 10;
+	
+	private TscPageRequest pageable2;
+	private int pageNo2 = 1;
+	private int pageSize2 = 6;
+	private int pageUnit2 = 10;
 
 	private String condition; // 키워드 종류
 	private String search; // 검색어

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

@@ -1,44 +0,0 @@
-package com.style24.persistence.domain;
-
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * 팝업 Domain
- *
- * @author eskim
- * @since 2021.03.30
- */
-@SuppressWarnings("serial")
-@Data
-public class Popup extends TscBaseDomain {
-
-	private String popupSq;
-	private String siteCd;
-	private String frontGb;
-	private String popupGb;
-	private String imgUrl1;
-	private String linkUrl1;
-	private String imgUrl2;
-	private String linkUrl2;
-	private String imgUrl3;
-	private String linkUrl3;
-	private String imgUrl4;
-	private String linkUrl4;
-	private String imgUrl15;
-	private String linkUrl15;
-	private String viewPage;
-	private Integer cateNo;
-	private String brandCd;
-	private String planSq;
-	private Integer dispOrd;
-	private String preview = "N";
-	private String viewDt;
-	private Integer topLoc;
-	private Integer leftLoc;
-	private String popupWidth;
-	private String popupHeight;
-	private Integer unexpDays;
-
-}

+ 46 - 0
src/main/java/com/style24/persistence/domain/eigene/Eigeneai.java

@@ -0,0 +1,46 @@
+package com.style24.persistence.domain.eigene;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+import lombok.Data;
+
+/**
+ * 추천솔루션 - Eigene 도메인
+ * 
+ * @author gagamel
+ * @since 2021. 5. 14
+ */
+@SuppressWarnings("serial")
+@Data
+public class Eigeneai implements Serializable {
+
+	private String recType;					// 추천영역코드
+	private Collection<Product> products;	// 인풋상품정보
+	private Collection<Result> results;		// 결과상품정보
+
+	// 인풋상품정보
+	@Data
+	public class Product {
+		private String itemId;			// 상품코드
+		private String itemImage;		// 상품이미지URL
+		private String itemName;		// 상품명
+		private String itemUrl;			// 상품상세페이지URL
+		private String category1;		// 1레벨카테고리
+		private String category2;		// 2레벨카테고리
+		private String category3;		// 3레벨카테고리
+		private double originalPrice;	// 정상가
+		private double salePrice;		// 판매가
+	}
+
+	// 결과상품정보
+	@Data
+	public class Result {
+		private int rank;			// 결과순위
+		private String logicType;	// 사용된추천로직종류
+		private String categoryId;	// 카테고리ID
+		private String itemId;		// 결과상품코드
+		private Product product;	// 상품정보
+	}
+
+}

+ 0 - 14
src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml

@@ -85,20 +85,6 @@
 	</update>	
 
 	
-	<!-- 주문상세 상태값 변경    -->
-	<insert id="saveTemp" parameterType="SweetTracker" keyProperty="tmp_sq">
-		/*TssDelivery.saveTemp*/
-		insert into tb_sw_temp 
-		(
-			  msg
-			, reg_dt 
-		)values
-		(
-			#{man}
-			, now()
-		)
-	</insert>	
-	
 	<!-- 스윗트래커 정보 조회 -->
 	<select id="getSweetTrackerDeliveryInfo" parameterType="SweetTracker" resultType="SweetTracker">
 		/*TsfDelivery.getSweetTrackerDeliveryInfo*/

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

@@ -1161,19 +1161,35 @@
 		          , FG.ALL_YN     -- 모두지급
 		          , FG.SECTION_GB -- G810_10|수량, G810_11|금액
 		          , FG.SECTION_VAL
+		<choose>
+		<when test="maxRownum != null and maxRownum > 0">
 		          , FG.GOODS_NM
 		          , FG.ITEM_QTY
+		</when>
+		<otherwise>
+		          ,  '' AS GOODS_NM
+		          ,  0 AS ITEM_QTY
+		</otherwise>
+		</choose>
 		          , GROUP_CONCAT(CONCAT(FG.GOODS_NM,':',FG.ITEM_QTY)) AS FREE_GOODS
 		          -- , RANK() OVER (PARTITION BY F.FREEGIFT_SQ , F.FREEGIFT_SECTION_SQ ORDER BY  FG.FREEGIFT_VAL_SQ ) AS RNUM
 		    FROM TAB_FREEGOODS FG
 		     WHERE FG.ROWNUM = 1
+		<choose>
+		<when test="maxRownum != null and maxRownum > 0">
 		    GROUP BY  FG.FREEGIFT_SQ , FG.FREEGIFT_SECTION_SQ , FG.ALL_YN , FG.SECTION_GB , FG.SECTION_VAL, FG.GOODS_NM, FG.ITEM_QTY
+		</when>
+		<otherwise>
+		    GROUP BY  FG.FREEGIFT_SQ , FG.FREEGIFT_SECTION_SQ , FG.ALL_YN , FG.SECTION_GB , FG.SECTION_VAL
+		</otherwise>
+		</choose>
+		    
 		    ORDER BY FG.FREEGIFT_SQ, FG.FREEGIFT_SECTION_SQ
 		) Z
 		WHERE 1 = 1
 		<if test="maxRownum != null and maxRownum > 0">
 		LIMIT #{maxRownum}
-		</if>
+		</if>		
 	</select>
 	
 	<!-- 상품의 사은품 목록 -->
@@ -1880,7 +1896,7 @@
 		            , G.PARALLEL_IMPORT_YN /*병행수입여부*/
 		            , G.ORDER_MADE_YN      /*주문제작여부*/
 		            , G.GOODS_TNM          /*상품타이틀명*/
-		            , G.MAIN_COLOR_CD      /*대표색상코드*/
+		            , IFNULL(O.OPT_CD1,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD      /*대표색상코드*/
 		            , G.LIST_PRICE         /*정상가(최초판매가)*/
 		            , G.CURR_PRICE         /*현재판매가*/
 		            , G.FORMAL_GB          /*정상이월구분*/
@@ -2006,34 +2022,46 @@
 		                            </foreach>
 		            )
 		         </if>
-				<if test="priceFrom != null and priceFrom != ''">
-					AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
-				</if>
-				<if test="priceTo != null and priceTo != ''">
-					AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
-				</if>
-				<if test="dcRateFrom != null and dcRateFrom != ''">
-					AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
-				</if>
-				<if test="dcRateTo != null and dcRateTo != ''">
-					AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
-				</if>
+		        <if test="priceFrom != null and priceFrom != ''">
+		            AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
+		        </if>
+		        <if test="priceTo != null and priceTo != ''">
+		            AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
+		        </if>
+		        <if test="dcRateFrom != null and dcRateFrom != ''">
+		            AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
+		        </if>
+		        <if test="dcRateTo != null and dcRateTo != ''">
+		            AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
+		        </if>
 		       ) G
-				LEFT OUTER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD AND G.SELF_GOODS_YN = 'Y' /*자사상품만*/ AND    O.DISP_YN = 'Y'
-				<if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
-					AND    O.OPT_CD1 IN (SELECT COLOR_CD
-					FROM   TB_COLOR
-					WHERE  1 = 1
-					AND    COLOR_GRP_CD IN
-					<foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
-						#{item}
-					</foreach>
-					AND    USE_YN = 'Y' /*사용하는색상*/
-					)
-				</if>
+		        LEFT OUTER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD AND G.SELF_GOODS_YN = 'Y' /*자사상품만*/ AND    O.DISP_YN = 'Y'
+		        <if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
+		            AND    O.OPT_CD1 IN (SELECT COLOR_CD
+		            FROM   TB_COLOR
+		            WHERE  1 = 1
+		            AND    COLOR_GRP_CD IN
+		            <foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+		                #{item}
+		            </foreach>
+		            AND    USE_YN = 'Y' /*사용하는색상*/
+		            )
+		        </if>
 		)
 		SELECT COUNT(*)
 		FROM   TAB_GOODS G
+		WHERE 1=1
+		<if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
+		  AND    G.MAIN_COLOR_CD IN (SELECT COLOR_CD
+		                               FROM   TB_COLOR
+		                               WHERE  1 = 1
+		                               AND    COLOR_GRP_CD IN
+		                               <foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+		                               	#{item}
+		                               </foreach>
+		                               AND    USE_YN = 'Y' /*사용하는색상*/
+		                              )
+		</if>
 	</select>
 
 	<!-- 카테고리별 상품 목록 -->
@@ -2049,7 +2077,7 @@
 		           , G.PARALLEL_IMPORT_YN /*병행수입여부*/
 		           , G.ORDER_MADE_YN      /*주문제작여부*/
 		           , G.GOODS_TNM          /*상품타이틀명*/
-		           , G.MAIN_COLOR_CD      /*대표색상코드*/
+		           , IFNULL(O.OPT_CD1,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD      /*대표색상코드*/
 		           , G.LIST_PRICE         /*정상가(최초판매가)*/
 		           , G.CURR_PRICE         /*현재판매가*/
 		           , G.FORMAL_GB          /*정상이월구분*/
@@ -2224,8 +2252,8 @@
 		      , G.MAIN_COLOR_CD
 		      , G.LIST_PRICE
 		      , G.CURR_PRICE
-			  , (SELECT SYS_IMG_NM FROM TB_GOODS_IMG X WHERE X.GOODS_CD = G.GOODS_CD AND G.MAIN_COLOR_CD = X.COLOR_CD AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-			  , (SELECT SYS_IMG_NM FROM TB_GOODS_IMG X WHERE X.GOODS_CD = G.GOODS_CD AND G.MAIN_COLOR_CD = X.COLOR_CD AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
+			  , (SELECT SYS_IMG_NM FROM TB_GOODS_IMG X WHERE X.GOODS_CD = G.GOODS_CD AND G.MAIN_COLOR_CD = X.COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) AS SYS_IMG_NM
+			  , (SELECT SYS_IMG_NM FROM TB_GOODS_IMG X WHERE X.GOODS_CD = G.GOODS_CD AND G.MAIN_COLOR_CD = X.COLOR_CD AND MOUSEOVER_IMG_YN = 'Y' LIMIT 1) AS SYS_IMG_NM2
 		      , (
 		      SELECT GROUP_CONCAT(CONCAT(VIDEO_GB,':',KMC_KEY) ORDER BY NUMB SEPARATOR ',')
 		      FROM   (
@@ -2290,6 +2318,18 @@
 		    LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		    AND    W.CUST_NO = #{custNo}
 		</if>
+		WHERE 1=1
+		<if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
+		  AND    G.MAIN_COLOR_CD IN (SELECT COLOR_CD
+		        FROM   TB_COLOR
+		        WHERE  1 = 1
+		        AND    COLOR_GRP_CD IN
+		        <foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+		            #{item}
+		        </foreach>
+		        AND    USE_YN = 'Y' /*사용하는색상*/
+		  )
+		</if>
 	</select>
 	
 	<!-- 검색상품 총건수 -->

+ 44 - 12
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -10,8 +10,27 @@
 
 	<!-- 페이징을 위한 select절 하단 -->
 	<sql id="selectForPagingFooter">
-		       ) ORIGINAL
-		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		<choose>
+			<when test="pageable != null">
+			    ) ORIGINAL
+			WHERE RNUM BETWEEN  #{pageable.startRow} AND #{pageable.endRow}
+			</when>
+			<otherwise>
+			    ) ORIGINAL
+			</otherwise>
+		</choose>
+	</sql>
+	
+	<sql id="selectForPagingFooter2">
+		<choose>
+			<when test="pageable2 != null">
+			    ) ORIGINAL
+			WHERE RNUM BETWEEN  #{pageable2.startRow} AND #{pageable2.endRow}
+			</when>
+			<otherwise>
+			    ) ORIGINAL
+			</otherwise>
+		</choose>
 	</sql>
 	
 	<!-- 기획전 카테고리 목록 -->
@@ -590,11 +609,11 @@
 		SELECT TMPL_TYPE 
 		     , DISP_ORD
 		     , PLAN_CONT_SQ
-		     ,TITLE 
-		     ,LINK_URL
-		     ,LINK_OPEN_GB
-		     ,NOTE 
-		     ,DISP_YN 
+		     , TITLE 
+		     , LINK_URL
+		     , LINK_OPEN_GB
+		     , NOTE 
+		     , DISP_YN 
 		FROM TB_PLAN_CONTENTS TPC 
 		WHERE 1=1 
 			AND TPC.PLAN_SQ = #{planSq}
@@ -661,9 +680,9 @@
 					 ,F.SUPPLY_GOODS_CD
 					 ,F.PNT_PRATE
 					 ,F.PNT_MRATE
-					 ,F.FILE_GB
 				  ,(SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD =F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
 				  ,(SELECT MAX(SYS_FILE_NM) FROM TB_REVIEW_ATTACH WHERE REVIEW_SQ =F.REVIEW_SQ ORDER BY FILE_GB , REVIEW_SQ LIMIT 1) AS REVIEW_SYS_IMG
+				  ,(SELECT FILE_GB FROM TB_REVIEW_ATTACH WHERE REVIEW_SQ =F.REVIEW_SQ ORDER BY FILE_GB , REVIEW_SQ LIMIT 1) AS FILE_GB 
 				  , CASE IFNULL((SELECT COUNT(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ),0) 
 			            WHEN 0 THEN 'N'
 			            ELSE 'Y' END AS GOODS_IMAGE_YN
@@ -727,9 +746,7 @@
 					 ,G.SUPPLY_GOODS_CD
 					 ,G.PNT_PRATE
 					 ,G.PNT_MRATE
-					 ,RA.FILE_GB
 				FROM TB_REVIEW R LEFT JOIN TB_GOODS G ON R.GOODS_CD = G.GOODS_CD 
-								 LEFT JOIN TB_REVIEW_ATTACH RA ON R.REVIEW_SQ = RA.REVIEW_SQ 
 				WHERE 1=1 
 				 AND R.DEL_YN = 'N'
 				 AND R.DISP_YN = 'Y'
@@ -856,6 +873,7 @@
 	<!-- 기획전 상품  전시 -->
 	<select id="getPlanGoodsDisplayList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanGoodsDisplayList */
+		<include refid="selectForPagingHeader"/>
 		SELECT Z.*
 		      ,(CASE WHEN Z.LIST_PRICE > 0 THEN 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
 		FROM
@@ -886,6 +904,7 @@
 		         , G.MAIN_COLOR_CD                                          /*대표색상코드*/
 		         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
 		         , G.CURR_PRICE                                             /*현재판매가*/
+		         , PCI.REG_DT 
 		    FROM   TB_PLAN P
 		    	 , TB_PLAN_CONTENTS PC
 		    	 , TB_PLAN_CONTENTS_ITEM PCI
@@ -899,7 +918,11 @@
 		    AND    G.GOODS_CD = GS.GOODS_CD
 		    AND    G.BRAND_CD = B.BRAND_CD
 		    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		    AND    P.PLAN_SQ =  #{planSq} /**P*/
+		    AND    P.PLAN_SQ =  #{planSq} 
+		    <if test='planStat == "Y"'>
+		         AND PC.PLAN_CONT_SQ = #{planContSq}
+		         AND PC.TMPL_TYPE = #{tmplType}
+		    </if>
 		    -- AND    P.PLAN_GB = 'P' /*기획전*/
 		    AND    P.SITE_CD =  #{siteCd} /**P*/
 		    <if test="frontGb != null and frontGb != ''">
@@ -947,9 +970,11 @@
 		     , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                     AS CURR_PRICE    /*현재판매가*/
 		     , GI.SYS_IMG_NM
 		     , GI.SYS_IMG_NM2
+		     , ROW_NUMBER() OVER(ORDER BY PG.REG_DT DESC) AS RNUM
 		FROM   TAB_PLAN_GOODS PG
 		INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
 		)Z
+		<include refid="selectForPagingFooter2"/>
 	</select>
 	
 	<!-- 기획전 코너 목록 -->
@@ -1511,10 +1536,13 @@
 			     , PE.REG_DT
 			     , PE.UPD_NO
 			     , PE.UPD_DT
-			     , RANK() OVER(ORDER BY REG_DT DESC) AS NUMB
+			     , RANK() OVER(ORDER BY REG_DT DESC) AS RNUM
 			FROM TB_PLAN_ENTRY PE
 			WHERE 1=1
 		    AND PE.PLAN_SQ = #{planSq}
+		    <if test="planEntrySq != null and planEntrySq != ''">
+		    AND PE.PLAN_ENTRY_SQ = #{planEntrySq}
+		    </if>
 		    ORDER BY REG_DT DESC
 		)Z
 		<include refid="selectForPagingFooter"/>
@@ -1597,12 +1625,16 @@
 	<select id="getEntryReplyAttachList" resultType="Plan" parameterType="Plan">
 		/* TsfPlanning.getEntryReplyAttach */	
 		SELECT PEA.PLAN_ENTRY_SQ
+		      ,PEA.PLAN_ENTRY_AT_SQ
 		      ,PEA.ORG_FILE_NM 
 		      ,PEA.SYS_FILE_NM 
 		FROM TB_PLAN_ENTRY PE INNER JOIN TB_PLAN_ENTRY_ATTACH PEA 
 		                                    ON PE.PLAN_ENTRY_SQ = PEA.PLAN_ENTRY_SQ 
 		WHERE 1=1
 		   AND PE.PLAN_SQ = #{planSq}
+		   <if test="planEntrySq != null and planEntrySq != ''">
+		   AND PE.PLAN_ENTRY_SQ = #{planEntrySq}
+		   </if>
 	</select>
 	
 	<delete id="deleteEntryReplyAttach" parameterType="Plan">

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

@@ -48,6 +48,7 @@
 		INNER JOIN TB_GOODS_COMPOSE GC ON R.GOODS_CD  = GC.COMPS_GOODS_CD
 		</if>
 		WHERE 1 = 1
+		AND R.CONFIRM_YN = 'Y'  -- 승인된 상품평만 조회
 		<choose>
 		    <when test="goodsType != null and goodsType == 'G056_D'">
 		AND    R.GOODS_CD = GC.COMPS_GOODS_CD
@@ -214,6 +215,7 @@
 		INNER JOIN TB_CUSTOMER C ON R.REG_NO  = C.CUST_NO
 		WHERE 1 = 1
 		AND R.GOODS_CD = #{goodsCd}
+		AND R.CONFIRM_YN = 'Y'  -- 승인된 상품평만 조회
 		<if test="reviewSq != null and reviewSq != ''" >
 		AND R.REVIEW_SQ = #{reviewSq}
 		</if>

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

@@ -83,10 +83,10 @@ naverPay:
     payUrl:
         web : test-pay.naver.com
         mob : test-m.pay.naver.com
-    shop.id : istyle2424
-    button.key : 5DF64042-EF37-45F1-878E-67C7098135E6
-    common.certification.key : s_3799db3bf4af-
-    certification.key: 2BC5E173-2840-4B48-BC7D-FF770005DD76
+    shop.id : istyle24
+    button.key : 3A1578F9-6824-4FCF-AC8D-262318C63227
+    common.certification.key : E3122594-C690-4542-B3A0-E74ABD4E8222
+    certification.key: E3122594-C690-4542-B3A0-E74ABD4E8222
     order.api.url: https://test-api.pay.naver.com/o/customer/api/order/v20/register
     order.url: https://test-order.pay.naver.com/customer/buy
 

+ 6 - 5
src/main/resources/config/application-style.yml

@@ -63,7 +63,7 @@ upload:
         target.path: /files/data/style24/sample
         max.size: 10
         allow.extension: txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.style24.com/Upload/sample
+        view: //image.istyle24.com/Upload/sample
 
 download.path: /files/data/style24
 
@@ -96,11 +96,12 @@ naverPay:
     payUrl:
         web : test-pay.naver.com
         mob : test-m.pay.naver.com
-    shop.id : istyle2424
-    button.key: 5DF64042-EF37-45F1-878E-67C7098135E6
-    common.certification.key: s_3799db3bf4af-
-    certification.key: 2BC5E173-2840-4B48-BC7D-FF770005DD76
+    shop.id: istyle24
+    button.key: 3A1578F9-6824-4FCF-AC8D-262318C63227
+    common.certification.key: E3122594-C690-4542-B3A0-E74ABD4E8222
+    certification.key: E3122594-C690-4542-B3A0-E74ABD4E8222
     order.api.url: https://test-api.pay.naver.com/o/customer/api/order/v20/register
+    order.url: https://test-order.pay.naver.com/customer/buy
 
 # ERP (한세드림)
 erp:

+ 5 - 4
src/main/resources/config/application-tsit.yml

@@ -84,8 +84,9 @@ naverPay:
     payUrl:
         web : test-pay.naver.com
         mob : test-m.pay.naver.com
-    shop.id: istyle2424
-    button.key: 5DF64042-EF37-45F1-878E-67C7098135E6
-    common.certification.key: s_3799db3bf4af-
-    certification.key: 2BC5E173-2840-4B48-BC7D-FF770005DD76
+    shop.id : istyle24
+    button.key : 3A1578F9-6824-4FCF-AC8D-262318C63227
+    common.certification.key : E3122594-C690-4542-B3A0-E74ABD4E8222
+    certification.key: E3122594-C690-4542-B3A0-E74ABD4E8222
     order.api.url: https://test-api.pay.naver.com/o/customer/api/order/v20/register
+    order.url: https://test-order.pay.naver.com/customer/buy

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

@@ -34,7 +34,7 @@
 						<h3 class="title sr-only">로그인</h3>
 					</div>
 					<div class="form_field mt0">
-						<input type="text" name="loginId" placeholder="아이디" class="form_control"minlength="4" maxlength="12" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디"/>
+						<input type="text" name="loginId" placeholder="아이디" class="form_control"minlength="4" maxlength="12" required="required" data-valid-name="아이디"/>
 					</div>
 					<div class="form_field">
 						<input type="password" name="passwd" placeholder="비밀번호 8자~20자 입력" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/>
@@ -275,7 +275,7 @@
 		}
 		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
 		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN);
 		}
 		// 5. YES24 첫 로그인 시도 시 정보동의 페이지 이동
 		if (userInfo.custStat === 'NEED_AGREE_CUST') {

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

@@ -52,7 +52,7 @@
 		}
 		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
 		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN);
 		}
 		// 5. YES24 첫 로그인 시도 시 정보동의 페이지 이동
 		if (userInfo.custStat === 'NEED_AGREE_CUST') {

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

@@ -29,8 +29,8 @@
 			<div class="inner">
 				<ul class="link wider">
 					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);">고객센터</a></li>
-					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_USE_TERMS);">이용약관</a></li>
-					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PRIVACY_POLICY);">개인정보취급방침</a></li>
+					<li><a href="javascript:void(0);" onclick="cfnUseTermsLayer();">이용약관</a></li>
+					<li><a href="javascript:void(0);" onclick="cfnPrivacyPolicyLayer();">개인정보취급방침</a></li>
 				</ul>
 	
 				<div class="collapse">

+ 144 - 0
src/main/webapp/WEB-INF/views/mob/customer/ConsentUseInfoFormMob.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ConsentUseInfoFormMob.html
+ * @desc    : 정보이용동의팝업
+ *            Yes24 간편가입에 사용됨
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.14   jsshin       최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header sr-only">
+			<h5 class="modal-title" id="mbAgreeLabel">YES24 로그인 정보 이용동의</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="agree_info">
+					<h5 class="title">YES24 로그인 정보 이용동의</h5>
+					<p>계정연동의 경우, STYLE24 휴면계정이면<br>휴면해제 후 이용 가능합니다</p>
+					<div class="info_txt">
+						<ul>
+							<li>“<span class="mb_name" th:text="${custNm}">회원명</span>” 님의 <em>CI, 이름, 성별, 생년월일, 핸드폰번호, 이메일 정보</em>를 로그인 연동을 위해 아이스타일24에 제공합니다.</li>
+							<li>정보제공 동의 시 YES24 계정으로 로그인 가능하며, 간편하게 회원가입이 가능합니다.</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="modal-footer">
+			<div class="btn_group_flex">
+				<div>
+					<button type="button" id="btnAgree" class="btn btn_primary">
+						<span>동의하기</span>
+					</button>
+				</div>
+				<div>
+					<button type="button" id="btnClose" class="btn btn_dark">
+						<span>닫기</span>
+					</button>
+				</div>
+			</div>
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="mbAgreePop_close" class="close-modal">Close</a>
+</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	$('#btnAgree').on('click', function () {
+		let jsonData = JSON.stringify({});
+		gagajf.ajaxJsonSubmit('/customer/peristalsis/yes24', jsonData, fnPeristalsisCallback)
+	});
+
+
+	var fnPeristalsisCallback = function (userInfo) {
+		// 1. CI 정보로 사용자가 없어서 회원가입 프로세스 처리 중 이메일, 휴대전화 중복
+		if (userInfo.custStat === 'DUP_PHONE_CUST') {
+			mcxDialog.alert("이미 사용 중인 휴대전화번호 입니다.");
+			$.modal.close();
+			return;
+		}
+		if (userInfo.custStat === 'DUP_EMAIL_CUST') {
+			mcxDialog.alert("이미 사용 중인 이메일 입니다.");
+			$.modal.close();
+			return;
+		}
+		// 2. SNS 로그인 정보로 탈퇴확인
+		if (userInfo.custStat === 'SECEDE_CUST') {
+			mcxDialog.alert("탈퇴 회원 입니다.");
+			$.modal.close();
+			return;
+		}
+		// 3. SNS 로그인 정보로 휴면확인
+		if (userInfo.custStat === 'DORMANT_CUST') {
+			mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+					$.modal.close();
+				}
+			});
+			return;
+		}
+		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
+		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN);
+			$.modal.close();
+			return;
+		}
+		// 5. SNS 정보로 가입 성공시 가입완료 페이지 이동
+		if (userInfo.custStat === 'NEW_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
+			$.modal.close();
+			return;
+		}
+		// 6.SNS 정보로 가입 실패시 안내 창 알림
+		if (userInfo.custStat === 'FAIL_CUST') {
+			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+			$.modal.close();
+			return;
+		}
+		// 7. SNS 로그인 연동 성공 및 기존 SNS 연동된 회원 로그인 시도
+		if (userInfo.custStat === 'SUCC_CUST') {
+			let params = {};
+			params.snsType = userInfo.snsType;
+			params.snsId = [[${snsLoginPrefix}]] + userInfo.snsId;
+			$.post(_frontUrl + '/login'
+				, $.param(params)
+				, fnReloadAfterLogin
+				, "json");
+		}
+	}
+	var fnReloadAfterLogin = function(result) {
+		if (result.status === 'OK') {
+			document.location.href = result.returnUrl;
+		} else {
+			mcxDialog.alert("로그인 실패 하였습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+		}
+		$.modal.close();
+	};
+
+	$("#btnClose").click(function() {
+		cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);
+		$.modal.close();
+	});
+
+	$(document).ready(function () {
+		$('.close-modal').on('click', function () {
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);
+		});
+	});
+
+
+
+	/*]]>*/
+</script>
+</html>

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

@@ -168,7 +168,7 @@
 				<div class="desc_wrap t_c mt20">
 					<p>
 						본인은&nbsp;만 14세 이상이며&nbsp;<a href="javascript:void(0)" onclick="cfnUseTermsLayer();">STYLE24이용약관<i class="ico ico_blank ml5"></i></a>,<br>
-						<a href="javascript:void(0)" onclick="cfnPrivacyPolicyLayer();">개인정보 수집 및 이용<i class="ico ico_blank ml5"></i></a>,
+						<a href="javascript:void(0)" onclick="cfnPrivacyPolicyLayer('join');">개인정보 수집 및 이용<i class="ico ico_blank ml5"></i></a>,
 						<a href="javascript:void(0)" onclick="cfnPrivacyTrustLayer();">개인정보 취급 위탁<i class="ico ico_blank ml5"></i></a><br>
 						내용을 확인 하였으며,동의합니다.
 					</p>

+ 15 - 1
src/main/webapp/WEB-INF/views/mob/customer/PrivacyPolicyLayerFormMob.html

@@ -17,7 +17,7 @@
 <div class="modal-dialog" role="document">
 	<div class="modal-content">
 		<div class="modal-header">
-			<h5 class="modal-title" id="exampleFullLabel">개인정보 수집 및 이용</h5>
+			<h5 class="modal-title" id="exampleFullLabel" th:text="${mallGb=='join'? '개인정보 수집 및 이용': '개인정보취급방침'}">개인정보 수집 및 이용</h5>
 		</div>
 		<div class="modal-body">
 			<div class="pop_cont">
@@ -30,4 +30,18 @@
 		</div>
 	</div>
 </div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	//약관내부링크
+	$(function(){
+		$(".hook_list ul li a").on("click", function(){
+			var hookHeader = $(".modal-header").outerHeight() + 3000;
+			var hookHref = $(this).attr("href");
+			var hookPot = $(hookHref == "#" || hookHref == "" ? "body" : hookHref);
+			var hookPos = hookPot.offset().top - hookHeader;
+			$("html, body").animate({ scrollTop: hookPos }, 3000);
+		});
+	});
+/*]]>*/
+</script>
 </html>

+ 14 - 0
src/main/webapp/WEB-INF/views/mob/customer/PrivacyTrustLayerFormMob.html

@@ -30,4 +30,18 @@
 		</div>
 	</div>
 </div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	//약관내부링크
+	$(function(){
+		$(".hook_list ul li a").on("click", function(){
+			var hookHeader = $(".modal-header").outerHeight() + 3000;
+			var hookHref = $(this).attr("href");
+			var hookPot = $(hookHref == "#" || hookHref == "" ? "body" : hookHref);
+			var hookPos = hookPot.offset().top - hookHeader;
+			$("html, body").animate({ scrollTop: hookPos }, 3000);
+		});
+	});
+/*]]>*/
+</script>
 </html>

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

@@ -29,5 +29,18 @@
 			</div>
 		</div>
 	</div>
-</div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	//약관내부링크
+	$(function(){
+		$(".hook_list ul li a").on("click", function(){
+			var hookHeader = $(".modal-header").outerHeight() + 3000;
+			var hookHref = $(this).attr("href");
+			var hookPot = $(hookHref == "#" || hookHref == "" ? "body" : hookHref);
+			var hookPos = hookPot.offset().top - hookHeader;
+			$("html, body").animate({ scrollTop: hookPos }, 3000);
+		});
+	});
+/*]]>*/
+</script>
 </html>

+ 330 - 190
src/main/webapp/WEB-INF/views/mob/display/CategoryGoodsListFormMob.html

@@ -93,77 +93,31 @@
 						<div class="filter_header">
 							<div class="form_field">
 								<div>
-									<input id="price" type="checkbox"><label for="price"> <span>남여 공용만 보기</span> </label>
+									<input id="unisex" type="checkbox" onclick="fnFilterOption(this,'on');"><label for="unisex"> <span>남여 공용만 보기</span> </label>
 								</div>
-								<div>
-									<input id="chk-2" type="checkbox"><label for="chk-2"> <span>신상품만 보기</span> </label>
+								<div th:unless="${cateInfo.formalGb=='G009_20'}">
+									<input id="newGoods" type="checkbox" checked="checked" onclick="fnFilterOption(this,'off');"><label for="newGoods"> <span>신상품만 보기</span> </label>
 								</div>
 							</div>
 						</div>
 						<div class="filter_body">
 							<!-- 필터메뉴 -->
-							<ul>
-								<li class="categori">
-									<a href="javascript:void(0)" class="daps1">카테고리<span class="pic">셔츠/블라우스</span></a>
-									<ul class="daps2">
-										<li>
-											<a href="javascript:void(0)">여성</a>
-											<ul class="daps3">
-												<li>
-													<a href="javascript:void(0)">티셔츠/셔츠</a>
-													<ul class="daps4">
-														<li>
-															<a href="javascript:void(0)">셔츠/블라우스</a>
-															<ul class="daps5">
-																<li><a href="javascript:void(0)">셔츠</a></li>
-																<li><a href="javascript:void(0)">블라우스</a></li>
-															</ul>
-														</li>
-														<li>
-															<a href="javascript:void(0)">맨투맨/모자티</a>
-															<ul class="daps5">
-																<li><a href="javascript:void(0)">맨투맨</a></li>
-																<li><a href="javascript:void(0)">모자티</a></li>
-															</ul>
-														</li>
-													</ul>
-												</li>
-											</ul>
-										</li>
-										<li>
-											<a href="javascript:void(0)">남성</a>
-											<ul class="daps3">
-												<li>
-													<a href="javascript:void(0)">티셔츠/셔츠</a>
-													<ul class="daps4">
-														<li>
-															<a href="javascript:void(0)">셔츠/블라우스</a>
-															<ul class="daps5">
-																<li><a href="javascript:void(0)">셔츠</a></li>
-																<li><a href="javascript:void(0)">블라우스</a></li>
-															</ul>
-														</li>
-													</ul>
-												</li>
-											</ul>
-										</li>
-									</ul>
-								</li>
-								<li class="brand" th:if="${filterBrandList != null and !filterBrandList.empty}" id="brandGroupFilterDiv">
+							<ul class="allFilter">
+								<li class="brand chkFilter" th:if="${filterBrandList != null and !filterBrandList.empty}" id="brandGroupFilterDiv">
 									<a href="javascript:void(0)" class="daps1">브랜드</a>
 									<ul class="daps2">
 										<li th:each="oneData, status : ${filterBrandList}">
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input th:id="${'chkFilterBrand' + status.index}" name="brandGroup" type="checkbox" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'brandGroup','off','','Mob');"><label th:for="${'chkFilterBrand' + status.index}"><span th:text="${oneData.filterNm}"></span></label>
+														<input th:id="${'chkFilterBrand' + status.index}" name="brandGroup" type="checkbox" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="fnSelectFilerMob(this,'brandGroup','off','');"><label th:for="${'chkFilterBrand' + status.index}"><span th:text="${oneData.filterNm}"></span></label>
 													</div>
 												</div>
 											</a>
 										</li>
 									</ul>
 								</li>
-								<li calss="size" th:if="${filterSizeList != null and !filterSizeList.empty}" id="sizeFilterDiv">
+								<li class="size chkFilter" th:if="${filterSizeList != null and !filterSizeList.empty}" id="sizeFilterDiv">
 									<a href="javascript:void(0)" class="daps1">사이즈</a>
 									<div class="daps2">
 										<ul class="sizebox">
@@ -171,7 +125,7 @@
 												<strong>상의</strong>
 												<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'T')}">
 													<label class="size_btn">
-														<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="1" onclick="filterSel(this,'size','off','1','Mob');"><span th:text="${oneData.filterNm}">80</span>
+														<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="1" onclick="fnSelectFilerMob(this,'size','off','1');"><span th:text="${oneData.filterNm}">80</span>
 													</label>
 												</th:block>
 											</li>
@@ -179,7 +133,7 @@
 												<strong>하의</strong>
 												<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'B')}">
 													<label class="size_btn">
-														<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="2" onclick="filterSel(this,'size','off','2','Mob');"><span th:text="${oneData.filterNm}">44</span>
+														<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="2" onclick="fnSelectFilerMob(this,'size','off','2');"><span th:text="${oneData.filterNm}">44</span>
 													</label>
 												</th:block>
 											</li>
@@ -187,82 +141,19 @@
 												<strong>신발</strong>
 												<th:block th:each="oneData, status : ${filterSizeList}" th:if="${#strings.startsWith(oneData.filterCd,'S')}">
 													<label class="size_btn">
-														<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="3" onclick="filterSel(this,'size','off','3','Mob');"><span th:text="${oneData.filterNm}">120</span>
+														<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize' + status.index}" name="size" th:vale="${oneData.filterNm}" th:data-id="${oneData.filterNm}" data-idx="3" onclick="fnSelectFilerMob(this,'size','off','3');"><span th:text="${oneData.filterNm}">120</span>
 													</label>
 												</th:block>
 											</li>
 										</ul>
 									</div>
 								</li>
-								<li class="price" id="priceFilterDiv">
+								<li class="price chkFilter" id="priceFilterDiv">
 									<a href="javascript:void(0)" class="daps1">가격<!--<span class="pic">230,000원~487,000원, 700,000원~990,000원</span>--></a>
 									<ul class="daps2" id="priceArea">
-<!--										<li>-->
-<!--											<a href="javascript:void(0)">-->
-<!--												<div class="form_field">-->
-<!--													<div>-->
-<!--														<input id="price1" type="checkbox"><label for="price1"> <span>9천원 이하</span> </label>-->
-<!--													</div>-->
-<!--												</div>-->
-<!--											</a>-->
-<!--										</li>-->
-<!--										<li>-->
-<!--											<a href="javascript:void(0)">-->
-<!--												<div class="form_field">-->
-<!--													<div>-->
-<!--														<input id="price2" type="checkbox"><label for="price2"> <span>9천원 ~ 23만원</span> </label>-->
-<!--													</div>-->
-<!--												</div>-->
-<!--											</a>-->
-<!--										</li>-->
-<!--										<li>-->
-<!--											<a href="javascript:void(0)">-->
-<!--												<div class="form_field">-->
-<!--													<div>-->
-<!--														<input id="price3" type="checkbox" checked><label for="price3"> <span>23만원 ~ 48만원 7천원</span> </label>-->
-<!--													</div>-->
-<!--												</div>-->
-<!--											</a>-->
-<!--										</li>-->
-<!--										<li>-->
-<!--											<a href="javascript:void(0)">-->
-<!--												<div class="form_field">-->
-<!--													<div>-->
-<!--														<input id="price4" type="checkbox" ><label for="price4"> <span>48만원 7천원 ~ 79만원</span> </label>-->
-<!--													</div>-->
-<!--												</div>-->
-<!--											</a>-->
-<!--										</li>-->
-<!--										<li>-->
-<!--											<a href="javascript:void(0)">-->
-<!--												<div class="form_field">-->
-<!--													<div>-->
-<!--														<input id="price5" type="checkbox" checked><label for="price5"> <span>70만원 ~ 99만원</span> </label>-->
-<!--													</div>-->
-<!--												</div>-->
-<!--											</a>-->
-<!--										</li>-->
-<!--										<li>-->
-<!--											<a href="javascript:void(0)">-->
-<!--												<div class="form_field">-->
-<!--													<div>-->
-<!--														<input id="price6" type="checkbox"><label for="price6"> <span>99만원 ~ 136만원</span> </label>-->
-<!--													</div>-->
-<!--												</div>-->
-<!--											</a>-->
-<!--										</li>-->
-<!--										<li>-->
-<!--											<a href="javascript:void(0)">-->
-<!--												<div class="form_field">-->
-<!--													<div>-->
-<!--														<input id="price7" type="checkbox"><label for="price7"> <span>136만원 ~ 179만원 9천원</span> </label>-->
-<!--													</div>-->
-<!--												</div>-->
-<!--											</a>-->
-<!--										</li>-->
 									</ul>
 								</li>
-								<li class="discount" id="dcRateFilterDiv">
+								<li class="discount chkFilter" id="dcRateFilterDiv">
 									<a href="javascript:void(0)" class="daps1">할인율</a>
 									<ul class="daps2">
 										<li>
@@ -357,35 +248,35 @@
 										</li>
 									</ul>
 								</li>
-								<li class="age" th:if="${filterAgeList != null and !filterAgeList.empty}" id="ageFilterDiv">
+								<li class="age chkFilter" th:if="${filterAgeList != null and !filterAgeList.empty}" id="ageFilterDiv">
 									<a href="javascript:void(0)" class="daps1">연령</a>
 									<ul class="daps2">
 										<li th:each="oneData, status : ${filterAgeList}">
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input th:id="${'chkFilterAge' + status.index}" name="age" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'age','off','','Mob');" type="checkbox"><label th:for="${'chkFilterAge' + status.index}"> <span th:text="${oneData.filterNm}"></span> </label>
+														<input th:id="${'chkFilterAge' + status.index}" name="age" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="fnSelectFilerMob(this,'age','off','');" type="checkbox"><label th:for="${'chkFilterAge' + status.index}"> <span th:text="${oneData.filterNm}"></span> </label>
 													</div>
 												</div>
 											</a>
 										</li>
 									</ul>
 								</li>
-								<li class="season" th:if="${filterSeasonList != null and !filterSeasonList.empty}" id="seasonFilterDiv">
+								<li class="season chkFilter" th:if="${filterSeasonList != null and !filterSeasonList.empty}" id="seasonFilterDiv">
 									<a href="javascript:void(0)" class="daps1">시즌</a>
 									<ul class="daps2">
 										<li th:each="oneData, status : ${filterSeasonList}">
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input th:id="${'chkFilterSeason' + status.index}" name="season" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'season','off','','Mob');" type="checkbox"><label th:for="${'chkFilterSeason' + status.index}"> <span th:text="${oneData.filterNm}">봄</span> </label>
+														<input th:id="${'chkFilterSeason' + status.index}" name="season" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="fnSelectFilerMob(this,'season','off','');" type="checkbox"><label th:for="${'chkFilterSeason' + status.index}"> <span th:text="${oneData.filterNm}">봄</span> </label>
 													</div>
 												</div>
 											</a>
 										</li>
 									</ul>
 								</li>
-								<li class="color" th:if="${filterColorList != null and !filterColorList.empty}" id="colorFilterDiv">
+								<li class="color chkFilter" th:if="${filterColorList != null and !filterColorList.empty}" id="colorFilterDiv">
 									<a href="javascript:void(0)" class="daps1">컬러
 										<span class="pic">
 <!--											<span class="pdColor-color01"></span><span class="pdColor-color02"></span>-->
@@ -395,7 +286,7 @@
 										<ul class="colorbox">
 											<li th:each="oneData, status : ${filterColorList}">
 												<label class="color-check">
-													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor' + status.index}" name="color" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm.replace('#','')}" onclick="filterSel(this,'color','off','','Mob');">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor' + status.index}" name="color" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm.replace('#','')}" onclick="fnSelectFilerMob(this,'color','off','');">
 													<span class="pdColor-color" th:if="${oneData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+oneData.filterNm+';'+' border:1px solid #aaa;'}" th:value="${oneData.filterCd}"></span>
 													<span class="pdColor-color" th:if="${oneData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+oneData.filterNm}" th:value="${oneData.filterCd}"></span>
 												</label>
@@ -403,14 +294,14 @@
 										</ul>
 									</div>
 								</li>
-								<li class="benefit" th:if="${filterBenefitList != null and !filterBenefitList.empty}" id="benefitFilterDiv">
+								<li class="benefit chkFilter" th:if="${filterBenefitList != null and !filterBenefitList.empty}" id="benefitFilterDiv">
 									<a href="javascript:void(0)" class="daps1">혜택</a>
 									<ul class="daps2">
 										<li th:each="oneData, status : ${filterBenefitList}">
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input th:id="${'chkFilterBenefits' + status.index}" name="benefit" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="filterSel(this,'benefit','off','','Mob');" type="checkbox"><label th:for="${'chkFilterBenefits' + status.index}"> <span th:text="${oneData.filterNm}"></span> </label>
+														<input th:id="${'chkFilterBenefits' + status.index}" name="benefit" th:value="${oneData.filterCd}" th:data-id="${oneData.filterNm}" onclick="fnSelectFilerMob(this,'benefit','off','');" type="checkbox"><label th:for="${'chkFilterBenefits' + status.index}"> <span th:text="${oneData.filterNm}"></span> </label>
 													</div>
 												</div>
 											</a>
@@ -443,6 +334,26 @@
 				</div>
 			</div>
 		</div>
+
+		<div class="nav_box">
+			<div class="lap">
+				<div class="nav_close">네비닫기</div>
+				<div class="nav_list">
+					<!-- 카테고리 선택 -->
+					<div class="nav">
+						<ul>
+							<li class="active">
+<!--								<a href="javascript:void(0)" class="daps1">여성</a>-->
+								<ul class="daps2" id="cateDepth">
+
+								</ul>
+							</li>
+						</ul>
+					</div>
+					<!-- //카테고리 선택 -->
+				</div>
+			</div>
+		</div>
 	</main>
 
 	<form id="searchGoodsForm" name="searchGoodsForm">
@@ -469,7 +380,6 @@
 		var filterPriceList = [[${filterPriceList}]];
 
 		$(document).ready(function(){
-			console.log('filterPriceList len:::'+filterPriceList.length);
 			if(filterPriceList.length > 0){
 				$("#priceArea").html('');
 				var priceHtml = '';
@@ -497,6 +407,10 @@
 				$("#priceArea").append(priceHtml);
 			}
 
+			// TOP 동일 카테고리
+			fnCreateDepthList();
+
+			// 상단노출 하위 카테고리
 			fnCreateCategoryList();
 
 			if ($('#sizeLi1').find('label').length == 0) $('#sizeLi1').hide();
@@ -524,8 +438,6 @@
 						$("body").css({"overflow":"hidden"});
 						bodyChk = 0;
 					}
-
-
 				});
 
 				navClose.on("click",function(){
@@ -679,14 +591,107 @@
 				$("body").css({"overflow":"visible"});
 			});
 
+			$(".nav_close").click();
 
 		});
 
+		// TOP 카테고리 노출
+		var fnCreateDepthList = function (){
+			let cateList = [[${cateList}]];
+			var brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			var cateGb =  [[${cateInfo.cateGb}]];
+			var formalGb = [[${cateInfo.formalGb}]];
+			var cate1No = [[${cateInfo.cate1No}]];
+			var cate2No = [[${cateInfo.cate2No}]];
+			var cate3No = [[${cateInfo.cate3No}]];
+			var cate4No = [[${cateInfo.cate4No}]];
+			var cate5No = [[${cateInfo.cate5No}]];
+			var tag = '';
+			$("#cateDepth").html('');
+
+			if(!gagajf.isNull(cate5No)){
+
+			}else if(!gagajf.isNull(cate4No)) {
+				$.each(cateList, function (idx, cate){
+					$.each(cate.cate2List, function (idx2,cate2){
+						if(cate2.leafYn == 'N' && cate2.cate3List != null){
+							$.each(cate2.cate3List, function (idx3, cate3){
+								if(cate3.leafYn == 'N' && cate3.cate4List != null){
+									$.each(cate3.cate4List, function (idx4, cate4){
+										if(cate4.cate4No == cate4No){
+											$("#htopTitle").append(fnDisplayTitle(cate4.cate4Nm));
+										}
+										if(cate4.cate3No==cate3No){
+											tag += '<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ' ';
+											if(formalGb=='G009_20'){
+												tag += ' ,\'\',\''+formalGb+'\'';
+											}
+											tag += ');">'+cate4.cate4Nm+'</a></li>';
+										}
+									});
+								}
+							});
+						}
+					});
+				});
+				$("#cateDepth").append(tag);
+			}else if(!gagajf.isNull(cate3No)){
+				$.each(cateList, function (idx, cate){
+					$.each(cate.cate2List, function (idx2,cate2){
+						if(cate2.leafYn == 'N' && cate2.cate3List != null){
+							$.each(cate2.cate3List, function (idx3, cate3){
+								if(cate3.cate3No == cate3No){
+									$("#htopTitle").append(fnDisplayTitle(cate3.cate3Nm));
+								}
+								if(cate3.cate2No==cate2No){
+									tag += '<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ' ';
+									if(formalGb=='G009_20'){
+										tag += ' ,\'\',\'\',\''+formalGb+'\'';
+									}
+									tag += ');">'+cate3.cate3Nm+'</a></li>';
+								}
+							});
+						}
+					});
+				});
+				$("#cateDepth").append(tag);
+			}else if(!gagajf.isNull(cate2No)){
+				$.each(cateList, function (idx, cate){
+					$.each(cate.cate2List, function (idx2,cate2){
+						if(cate2.cate2No == cate2No){
+							$("#htopTitle").append(fnDisplayTitle(cate2.cate2Nm));
+						}
+						if(cate2.cate1No==cate1No){
+							tag += '<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ' ';
+							if(formalGb=='G009_20'){
+								tag += ' ,\'\',\'\',\'\',\''+formalGb+'\'';
+							}
+							tag += ');">'+cate2.cate2Nm+'</a></li>';
+						}
+					});
+				});
+				$("#cateDepth").append(tag);
+			}else{
+				$.each(cateList, function (idx, cate1){
+					if(cate1.cate1No == cate1No){
+						$("#htopTitle").append(fnDisplayTitle(cate1.cate1Nm));
+					}
+					tag += '<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ' ';
+					if(formalGb=='G009_20'){
+						tag += ' ,\'\',\'\',\'\',\'\',\''+formalGb+'\'';
+					}
+					tag += ');">'+cate1.cate1Nm+'</a></li>';
+				});
+				$("#cateDepth").append(tag);
+			}
+		}
+
+		// 상단 하위카테고리 노출
 		var fnCreateCategoryList = function (){
 			let actionUrl = '';
 			let brandGroupNo = [[${cateInfo.brandGroupNo}]];
 			let cate1No = [[${cateInfo.cate1No}]];
-			console.log('cateList brandGroupNo::'+brandGroupNo+'>>cate1No::'+cate1No);
+			// console.log('cateList brandGroupNo::'+brandGroupNo+'>>cate1No::'+cate1No);
 
 			if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
 				if( [[${cateInfo.formalGb}]] == 'G009_20'){
@@ -708,17 +713,13 @@
 					$("#leafCateList").html('');
 
 					let allCate = [[${cateList}]];
-					if(brandGroupNo > 0){
-
-					}else{
-						$.each(result, function(idx, item) {
-							$.each(allCate, function(allCateIdx, allCateItem) {
-								if (item.cate1No == allCateItem.cate1No) {
-									$('#leafCateList').append(fnGetCategoryList(item));
-								}
-							});
+					$.each(result, function(idx, item) {
+						$.each(allCate, function(allCateIdx, allCateItem) {
+							if (item.cate1No == allCateItem.cate1No) {
+								$('#leafCateList').append(fnGetCategoryList(item));
+							}
 						});
-					}
+					});
 				}
 			});
 		}
@@ -742,48 +743,92 @@
 			if (cate1 != null) {
 				if(cate1.cate1No == cate1No){
 					if(gagajf.isNull(cate2No)){
-						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ');">cate1전체(test)</a>';
+						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ' ';
+						if(formalGb=='G009_20'){
+							tag += ' ,\'\',\'\',\'\',\'\',\''+formalGb+'\'';
+						}
+						tag += ');">전체</a>';
 					}
 					if(cate1.leafYn == 'N' && cate1.cate2List.length > 0){
 						$.each(cate1.cate2List, function (idx2, cate2){
 							if(gagajf.isNull(cate2No)){
-								tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">'+cate2.cate2Nm+'</a>';
+								tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ' ';
+								if(formalGb=='G009_20'){
+									tag += ' ,\'\',\'\',\'\',\''+formalGb+'\'';
+								}
+								tag += ');">'+cate2.cate2Nm+'</a>';
 							}else{
 								if(cate2.cate2No == cate2No){
 									if(cate2.leafYn == 'N' && cate2.cate3List.length > 0){
 										if(gagajf.isNull(cate3No)){
-											tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">cate2전체(test)</a>';
+											tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ' ';
+											if(formalGb=='G009_20'){
+												tag += ' ,\'\',\'\',\'\',\''+formalGb+'\'';
+											}
+											tag += ');">전체</a>';
 										}
 										$.each(cate2.cate3List, function (idx3, cate3){
 											if(gagajf.isNull(cate3No)){
-												tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">'+cate3.cate3Nm+'</a>';
+												tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ' ';
+												if(formalGb=='G009_20'){
+													tag += ' ,\'\',\'\',\''+formalGb+'\'';
+												}
+												tag += ');">'+cate3.cate3Nm+'</a>';
 											}else{
 												if(cate3.cate3No == cate3No){
 													if(cate3.leafYn == 'N' && cate3.cate4List.length > 0){
 														if(gagajf.isNull(cate4No)){
-															tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">cate3전체(test)</a>';
+															tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ' ';
+															if(formalGb=='G009_20'){
+																tag += ' ,\'\',\'\',\''+formalGb+'\'';
+															}
+															tag += ');">전체</a>';
 														}
 														$.each(cate3.cate4List, function (idx4, cate4){
 															if(gagajf.isNull(cate4No)){
-																tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">'+cate4.cate4Nm+'</a>';
+																tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ' ';
+																if(formalGb=='G009_20'){
+																	tag += ' ,\'\',\''+formalGb+'\'';
+																}
+																tag += ');">'+cate4.cate4Nm+'</a>';
 															}else{
 																if(cate4.cate4No == cate4No){
 																	if(cate4.leafYn == 'N' && cate4.cate5List.length > 0){
 																		if(gagajf.isNull(cate5No)){
-																			tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">cate4전체(test)</a>';
+																			tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ' ';
+																			if(formalGb=='G009_20'){
+																				tag += ' ,\'\',\''+formalGb+'\'';
+																			}
+																			tag += ');">전체</a>';
 																		}
 																		$.each(cate4.cate5List, function (idx5, cate5){
 																			if(gagajf.isNull(cate5No)){
-																				tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',' + cate5.cate5No + ');">'+cate5.cate5Nm+'</a>';
+																				tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',' + cate5.cate5No + ' ';
+																				if(formalGb=='G009_20'){
+																					tag += ' ,\''+formalGb+'\'';
+																				}
+																				tag += ');">'+cate5.cate5Nm+'</a>';
 																			}else{
 																				if(cate5.cate5No == cate5No){
-																					tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',' + cate5.cate5No + ');">'+cate5.cate5Nm+'</a>';
+																					tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',' + cate5.cate5No + ' ';
+																					if(formalGb=='G009_20'){
+																						tag += ' ,\''+formalGb+'\'';
+																					}
+																					tag += ');">'+cate5.cate5Nm+'</a>';
 																				}
 																			}
 																		});
 																	}else{
-																		tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">cate4전체</a>';
-																		tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">'+cate4.cate4Nm+'</a>';
+																		tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ' ';
+																		if(formalGb=='G009_20'){
+																			tag += ' ,\'\',\''+formalGb+'\'';
+																		}
+																		tag += ');">전체</a>';
+																		tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ' ';
+																		if(formalGb=='G009_20'){
+																			tag += ' ,\'\',\''+formalGb+'\'';
+																		}
+																		tag += ');">'+cate4.cate4Nm+'</a>';
 																	}
 																}
 															}
@@ -798,26 +843,6 @@
 						});
 					}
 				}
-
-				// if(cate1.leafYn == 'N' && cate1.cate2List.length > 0){
-				// 	$.each(cate1.cate2List, function (idx2, cate2){
-				// 		if(cate2No == null){
-				// 			tag += '<a href="javascript:void(0);">cate2전체(test)</a>';
-				// 		}else{
-				// 			if(cate2.leafYn == 'N' && cate2.cate3List.length > 0){
-				// 				$.each(cate2.cate3List, function (idx3, cate3){
-				// 					if(cate3No == null){
-				// 						tag += '<a href="javascript:void(0);">cate3전체(test)</a>';
-				// 					}else{
-				// 						tag += '<a href="javascript:void(0);">3'+cate3.cateNm+'</a>';
-				// 					}
-				// 				});
-				// 			}else{
-				// 				tag += '<a href="javascript:void(0);">2'+cate2.cateNm+'</a>';
-				// 			}
-				// 		}
-				// 	});
-				// }
 			}
 
 			return tag;
@@ -852,7 +877,7 @@
 				if($("#searchGoodsForm input[name=pageNo]").val()==1){
 					// 필터 값으로 조회 데이터 없을때
 					$('.list_content .list_defult').show();
-					$('.list_content .count_wrap').hide();
+					//$('.list_content .count_wrap').hide();
 				}else{
 					// 마지막 페이지 일때
 					$('#endPage').show();
@@ -862,11 +887,60 @@
 			}
 		}
 
+		var fnFilterOption = function (obj, stat){
+			var thisId = $(obj).attr('id');
+			var tag = '';
+
+			if(thisId == 'unisex'){
+				if(stat=='on'){
+					$(obj).attr('onclick','fnFilterOption(this,\'off\');');
+					tag += '<input type="hidden" name="unisex" value="G007_Z"/>\n';
+					$("#searchGoodsForm").append(tag);
+				}else{
+					$(obj).attr('onclick','fnFilterOption(this,\'on\');');
+					$("#searchGoodsForm input:hidden[name=unisex]").remove();
+				}
+			}else{
+				if(stat=='on'){
+					$(obj).attr('onclick','fnFilterOption(this,\'off\');');
+					tag += '<input type="hidden" name="newGoods" value="40"/>\n';
+					$("#searchGoodsForm").append(tag);
+				}else{
+					$(obj).attr('onclick','fnFilterOption(this,\'on\');');
+					$("#searchGoodsForm input:hidden[name=newGoods]").remove();
+				}
+			}
+			fnCategoryGoodsInfiniteScrollInit();
+			fnGoodsListSearch();
+		}
+
 		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
 		$(window).on("pageshow", function(event) {
+			$('#filterForm input[name=brandGroup]:checked').each(function(){
+				$(this).attr('checked', true);
+			});
+			$('#filterForm input[name=size]:checked').each(function(){
+				$(this).attr('checked', true);
+			});
+			$('#filterForm input[name=dcRate]:checked').each(function(){
+				$(this).attr('checked', true);
+			});
+			$('#filterForm input[name=age]:checked').each(function(){
+				$(this).attr('checked', true);
+			});
+			$('#filterForm input[name=season]:checked').each(function(){
+				$(this).attr('checked', true);
+			});
+			$('#filterForm input[name=color]:checked').each(function(){
+				$(this).attr('checked', true);
+			});
+			$('#filterForm input[name=benefit]:checked').each(function(){
+				$(this).attr('checked', true);
+			});
 			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
 				var historyData = sessionStorage.getItem(document.location.href);
 				if(historyData!=null){
+					//console.log('M historyData>>'+historyData);
 					historyData = JSON.parse(historyData);
 				}else{
 					historyData = {};
@@ -874,36 +948,102 @@
 				if(typeof historyData.filterHtml!='undefined' && historyData.filterHtml!=''){
 					$("#searchGoodsForm").append(historyData.filterHtml);
 					filterHtml = historyData.filterHtml;
+					fnReCheckFilterList();
 				}
 				if(typeof historyData.filterStatHtml!='undefined' && historyData.filterStatHtml!=''){
-					$(".filterstate .filter_div").append(historyData.filterStatHtml);
+					$("#filterForm").append(historyData.filterStatHtml);
 					filterStatHtml = historyData.filterStatHtml;
 				}
 				if(typeof historyData.totalCount!='undefined' && historyData.totalCount!=''){
-					//$("#totalGoodsCnt").text(historyData.totalCount);
+					$("#totCntId").text(historyData.totalCount);
 				}
-				if(typeof historyData.sortGb!='undefined' && historyData.sortGb!=''){
-					$("#sortSelect").val(historyData.sortGb);
-					$("#searchGoodsForm input:hidden[name=sortGb]").val(historyData.sortGb);
+				if(filterPriceList.length > 0){
+					let min = 0;
+					let max = 0;
+					var val = '';
+					if(!gagajf.isNull($("#searchGoodsForm").find("input:hidden[name=priceFrom]").val())){
+						min = $("#searchGoodsForm").find("input:hidden[name=priceFrom]").val();
+					}
+					if(!gagajf.isNull($("#searchGoodsForm").find("input:hidden[name=priceTo]").val())){
+						max = $("#searchGoodsForm").find("input:hidden[name=priceTo]").val();
+					}
+					val = min+','+max;
+
+					$('#filterForm input[name=price]').each(function (){
+						if(val == $(this).val()){
+							$(this).prop("checked",true);
+						}
+					});
+				}
+				if(typeof historyData.sortingType!='undefined' && historyData.sortingType!=''){
+					$("#searchGoodsForm input:hidden[name=sortingType]").val(historyData.sortingType);
+					fnSortingChange(this,historyData.sortingType,'back','Mob');
+				}else{
+					fnCategoryGoodsInfiniteScrollInit();
+					fnGoodsListSearch();
 				}
-				fnGoodsListSearch();
 			}else{
 				fnCategoryGoodsInfiniteScrollInit();
-				// var sortGb = [[${sortGb}]];
-				// if(sortGb=='new' || sortGb=='best'){
-				// 	$("#sortSelect").val(sortGb);
-				// 	$("#sortSelect").parent('div').children('span').text($("#sortSelect option:selected").text())
-				// 	fnSortChange(sortGb);
-				// }else{
-				// 	fnGoodsListSearch();
-				// }
-				fnGoodsListSearch();
+				var sortingType = $("#searchGoodsForm input:hidden[name=sortingType]").val();
+				if(sortingType=='BEST' || sortingType=='REVIEW'){
+					fnSortingChange(this,sortingType,'','Mob');
+				}else{
+					fnGoodsListSearch();
+				}
 			}
 
 		});
 
+		// var iframe= document.createElement('iframe');
+		// iframe.setAttribute('allowFullScreen', '');
+		// iframe.setAttribute('allow', 'fullscreen');
+		// var controller;
+		// var player = document.getElementById('player');
+		//
+		// player.onload = function() {
+		// 	try {
+		// 		var controller = new VgControllerClient({
+		// 			target_window: document.getElementById('pdThumbVideo').contentWindow
+		// 			// target_window: document.getElementsByClassName('pd_mov').contentWindow
+		// 		});
+		// 		var playMov;
+		//
+		// 		controller.on('ready', function(){
+		// 			//플레이어 준비 완료
+		// 			controller.set_ratio('fill');
+		// 			//  contain : 비율에 맞게 채웁니다.
+		// 			//fill : 화면에 꽉 차게 채웁니다.
+		// 			//enlargement : 세로 높이를 꽉 차게 맞춥니다. 좌우로 스크롤이 가능합니다
+		// 			controller.play();
+		// 		});
+		// 		controller.on('done', function(){
+		// 			//플레이어 재생 완료
+		// 			controller.play();
+		// 		});
+		//
+		// 	} catch(e) {
+		// 		// Videogateweay Controller Library는 window.postMessage API를 이용하기 때문에
+		// 		// 해당 기능을 지원하지 않는 웹브라우져에서는 동작하지 않습니다.
+		// 		// 이 부분에 적절한 fail-over 코드를 추가하여 주십시요.
+		// 	}
+		//
+		// }
+
+		var fnDisplayTitle = function (cateNm){
+			$("#htopTitle").html('');
+			var tag = '';
+
+			tag += '<span>'+cateNm+'</span>\n';
+			tag += '<button class="dp_list_btn_gnbs" title="서브타이틀 메뉴 열기/닫기">\n';
+			tag += '	<span><i></i></span>\n';
+			tag += '</button>\n';
+
+			return tag;
+		}
+
 	</script>
 
+
 </th:block>
 </body>
 </html>

+ 164 - 26
src/main/webapp/WEB-INF/views/mob/display/LookbookMainFormMob.html

@@ -27,7 +27,7 @@
 				<div class="list_content"> <!-- 데이터 없을시 클래스 nodata 추가 -->
 					<div class="count_wrap">
 						<div>
-							<p><span id="totCnt"></span>개의 상품</p>
+							<p><span id="lookbookTotCnt"></span>개의 상품</p>
 						</div>
 						<div>
 							<ul class="dp_util">
@@ -54,13 +54,15 @@
 					<div class="lookbookGrp">
 						<div class="swiper_filter brand" id="filterChkArea">
 							<div class="cate_wrap" id="chkBrand">
-								<a href="javascript:void(0);" onclick="fnReset();">전체</a>
+								<a href="javascript:void(0);" onclick="fnLookbookReset();">전체</a>
 							</div>
-							<div class="btnbox"><a href="javascript:void(0);" class="reset" onclick="fnReset();">새로고침</a></div>
+							<div class="btnbox"><a href="javascript:void(0);" class="reset" onclick="fnLookbookReset();">새로고침</a></div>
+						</div>
+						<div class="list_content">
+							<ul class="event_con itemsGrp" id="listBox">
+							</ul>
 						</div>
-						<ul class="event_con" id="lookbookArea">
 
-						</ul>
 					</div>
 					<div class="list_last">마지막페이지 입니다.</div>
 				</div>
@@ -82,7 +84,7 @@
 			</div>
 			<div class="brand_floormenu"><!--  ☞☞ 제품이 품절되면 soldout클래스 추가 -->
 				<div class="share_like">
-					<button class="refresh" onclick="fnReset();">초기화</button>
+					<button class="refresh" onclick="fnReset1();">초기화</button>
 					<!--<button class="like">위시리스트</button>-->
 				</div>
 				<div class="prd_buy">
@@ -93,6 +95,18 @@
 		</div>
 	</main>
 
+	<form id="lbMainForm" name="lbMainForm">
+		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="lookbookGb" th:value="${lbInfo.lookbookGb}"/>
+		<input type="hidden" name="brandCd" th:value="${lbInfo.brandCd}">
+		<input type="hidden" name="frontYn" value="Y"/>
+		<input type="hidden" name="totalCnt" />
+	</form>
+
+<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	var currUrl = document.location.href;
@@ -106,7 +120,139 @@
 	}
 	var brandCd = [[${lbInfo.brandCd}]];
 
-	let fnGetLookbookList = function (lookbookGb, brandGroupNo){
+	var fnLookbookListSearch = function (){
+		gagaInfiniteScroll.getHistory();
+	}
+
+	var fnGetInfiniteScrollDataList = function (pageNum){
+		$("#lbMainForm input[name=pageNo]").val(pageNum+1);
+		gagajf.ajaxFormSubmit("/display/lookbook/main/list", document.lbMainForm,  gagaInfiniteScroll.jsonToHtml);
+	}
+
+	var fnDrawInfiniteScrollData = function (result){
+		let totalCnt = result.paging.totalCount;
+		$("#lookbookTotCnt").text(totalCnt);
+		$("#lbMainForm").find("input[name=totalCnt]").val(totalCnt);
+		gagaInfiniteScroll.pageStatus.totalCount = totalCnt;
+
+		if (result.dataList != null && result.dataList.length > 0) {
+			$(".nodata").hide();
+			let lastPage = result.paging.pageNo;
+			let endRow = result.paging.endRow - result.paging.pageSize;
+
+			var htm = fnGetLookbookList(result);
+			gagaInfiniteScroll.draw(htm);
+		}else{
+			if($("#lbMainForm input[name=pageNo]").val()==1){
+				$("#divLookbookNoData").show();
+			}else{
+				$("#divLastPage").show();
+			}
+			gagaInfiniteScroll.draw('not');
+		}
+	}
+
+	let fnGetLookbookList = function (result){
+		var html = '';
+
+		$.each(result.dataList, function (idx, item){
+			html += '<li>\n';
+			html += '	<a href="javascript:void(0);" onclick="cfnGoToLookbookDetail(\''+lookbookGb+'\','+item.lookbookSq+','+item.brandCd+')">\n';
+			html += '		<div class="ev_img">\n';
+			html += '			<img src="' + _imgUrl + item.orgTnfileNm + '" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션">\n';
+			html += '		</div>\n';
+			html += '		<div class="ev_txt">\n';
+			if(lookbookGb != 'BL') {
+				html += '			<p class="brand">' + item.brandNm + '</p>\n';
+			}
+			html += '			<p class="tit">'+item.title+'</p>\n';
+			html += '		</div>\n';
+			html += '	</a>\n';
+			html += '</li>\n';
+		});
+		return html;
+	}
+
+	// 브랜드 리스트 가져오기
+	let fnGetBrandList = function (){
+		let actionUrl = '/display/lookbook/main/brand/list?frontYn=Y';
+		$.getJSON(actionUrl, function(result, status){
+			if(result.length > 0){
+				$('#brandArea').html('');
+				let tag = '';
+				tag += '<button type="button" data-name="" id="chkFilterBrand" class="on" onclick="fnAddBrand(\'\');"><span>전체</span></button>\n';
+				$.each(result, function(idx, item) {
+					tag += '<button type="button" id="chkFilterBrand'+idx+'" data-name="'+item.brandCd+'" onclick="fnAddBrand(\''+item.brandCd+'\');"><span>'+item.brandNm+'</span></button>\n';
+				});
+				$('#brandArea').html(tag);
+			}
+		});
+	}
+
+	// 브랜드 선택 적용
+	var fnGetBrandLookbookList = function (){
+		$("#lbMainForm input:hidden[name=multiBrandCd]").remove();
+		var tag = '';
+		var tag2 = '';
+		$('#chkBrand').html('');
+		$(".button_list button").each(function (index) {
+			if($(this).hasClass("on")){
+				if(!gagajf.isNull($(this).attr('data-name'))){
+					tag += '<input type="hidden" name="multiBrandCd" value="'+$(this).attr('data-name')+'" />';
+					$("#lbMainForm").append(tag);
+
+					var brandCd = $(this).attr("data-name");
+					var brandNm = $(this).find('span').text();
+					tag2 += '<a href="javascript:void(0);" onclick="fnDeleteBrandFilter(\''+brandCd+'\');">'+brandNm+'</a>';
+					$('#chkBrand').html(tag2);
+				}else{
+					$(this).addClass("on");
+					tag2 += '<a href="javascript:void(0);" onclick="fnDeleteBrandFilter("");">전체</a>';
+					$('#chkBrand').html(tag2);
+				}
+			}
+		});
+
+		var chkLen = $("#chkBrand").find('a').length;
+		if(chkLen < 1){
+			$('#chkBrand').html('<a href="javascript:void(0);" onclick="fnDeleteBrandFilter("");">전체</a>');
+			$(".button_list button").each(function (index) {
+				if(gagajf.isNull($(this).attr('data-name'))){
+					$(this).addClass("on");
+				}
+			});
+		}
+
+		fnLookbookInfiniteScrollInit();
+		fnLookbookListSearch();
+	}
+
+	// 브랜드 선택 초기화
+	var fnLookbookReset = function (){
+		$("#lbMainForm input:hidden[name=multiBrandCd]").remove();
+
+		var tag2 = '';
+		tag2 += '<a href="javascript:void(0);" onclick="fnDeleteBrandFilter(\'\');">전체</a>';
+		$('#chkBrand').html(tag2);
+
+		$(".button_list button").each(function (index) {
+			$(this).removeClass("on");
+		});
+
+		$("#chkFilterBrand").addClass('on');
+
+		fnLookbookInfiniteScrollInit();
+		fnLookbookListSearch();
+		//fnGetBrandLookbookList();
+	}
+
+	// 인피니티 스크롤 초기화
+	var fnLookbookInfiniteScrollInit = function (){
+		sessionStorage.removeItem(document.location.href);
+		$("#listBox").html("");
+	}
+
+	let fnGetLookbookList2 = function (lookbookGb, brandGroupNo){
 		let actionUrl = '/display/lookbook/main/list?lookbookGb='+lookbookGb;
 		if (!gagajf.isNull(brandGroupNo)) actionUrl += '&multiBrandCd=' + brandGroupNo;
 
@@ -120,7 +266,7 @@
 						let tag = '';
 						let tag3 = '';
 						let brandArr = [];
-						tag += '<button type="button" data-name="" class="on" onclick="fnAddBrand(\'\');"><span>전체</span></button>\n';
+						tag += '<button type="button" data-name="" id="chkFilterBrand" class="on" onclick="fnAddBrand(\'\');"><span>전체</span></button>\n';
 						$.each(result, function(idx, item) {
 							if(!brandArr.includes(item.brandCd)){
 								brandArr.push(item.brandCd);
@@ -197,25 +343,9 @@
 		});
 	}
 
-	// 선택된 브랜드 조회
-	var fnGetBrandLookbookList = function (){
-		var multiBrandCd = [];
-		$(".button_list button").each(function (index) {
-			if($(this).hasClass("on")){
-				multiBrandCd.push($(this).attr('data-name'));
-			}
-		});
-		$('#chkBrand').html('');
-		fnGetLookbookList(lookbookGb,multiBrandCd);
-	}
-
 	// 초기화버튼
 	var fnReset = function (){
-		// var multiBrandCd = [];
-		// $('#chkBrand').html('');
-		// fnGetLookbookList(lookbookGb,multiBrandCd);
-		// $(".popup_close").click();
-		document.location.href = currUrl;
+		$('.reset').click();
 	}
 
 	// 리스트상단 필터 리스트에서 삭제 시
@@ -232,12 +362,19 @@
 	}
 
 	$(document).ready(function(){
-		fnGetLookbookList(lookbookGb,brandCd);
+		// fnGetLookbookList(lookbookGb,brandCd);
+		//fnLookbookListSearch();
+		fnLookbookReset();
 
 		if(lookbookGb=='BL'){
 			$("#btnHome").attr('onclick', 'cfnGoToBrandMain('+brandCd+');');
 		}else{
 			$("#btnHome").attr('href', '/');
+			fnGetBrandList();
+		}
+
+		if(!gagajf.isNull($("#lbMainForm").find("input[name=totalCnt]").val())){
+			$("#lookbookTotCnt").text($("#lbMainForm").find("input[name=totalCnt]").val());
 		}
 
 		$(document).on('click','.sub_category .more_btn',function(){
@@ -274,6 +411,7 @@
 		});
 		$(document).on('click','.brand_floormenu .refresh',function(){
 			$('.popup_box .button_list button').removeClass('on');
+			$('#chkFilterBrand').addClass('on');
 		});
 		$(document).on('click','.popup_box .buying',function(){
 			$(this).parents('.popup_box').hide().removeClass('active');

+ 7 - 8
src/main/webapp/WEB-INF/views/mob/goods/GoodsCouponFormMob.html

@@ -41,7 +41,7 @@
 							</div>
 							<div class="btn_group_flex">
 								<div>
-									<button type="button" class="btn btn_dark" id="btn_result_coupon" 
+									<button type="button" class="btn btn_dark btn_coupon_down" id="btn_result_coupon" 
 											th:disabled="${goodsCoupon.custPubLimitQty > 0 and goodsCoupon.custPubLimitQty <= goodsCoupon.custCouponCnt}"
 											th:attr="cpnId=${goodsCoupon.cpnId}" th:id="${'coupon_'+goodsCoupon.cpnId}" onclick="fnGoodsCouponDown(this);">
 										<span>쿠폰받기</span>
@@ -62,7 +62,8 @@
 		</form>	
 		</div>
 		<div class="modal-footer">
-			<button type="button" class="btn btn_primary btn_all_cpdown" onclick="fnGoodsCouponDownAll();"><span>쿠폰 모두 받기</span></button>
+			<button type="button" id="btn_all_coupon" class="btn btn_primary" onclick="fnGoodsCouponDownAll();">
+			<span>쿠폰 모두 받기</span><span>쿠폰 모두 받기 완료</span></button>
 		</div>
 	</div>
 </div>
@@ -118,11 +119,11 @@
 	
 	
 	// 쿠폰 전체 다운로드
-	var fnGoodsCouponDownAll = function(){
+	var fnGoodsCouponDownAll = function(){debugger;
 		//00개 쿠폰이 발급되었습니다.
 		let couponDownAbleYn = "N";
 		let arrCpnId = [];
-		$('.btn_coupon_down').each(function(){
+		$('.btn_coupon_down').each(function(){debugger;
 			if (!$(this).attr('disabled')){
 				couponDownAbleYn = "Y";
 				arrCpnId.push($(this).attr('cpnId'));
@@ -151,13 +152,13 @@
 						if (coupon.cpnId == cpnId){
 							if (Number(coupon.custPubLimitQty) > 0){
 								if (Number(coupon.custPubLimitQty) <= Number(coupon.custCouponCnt)){
-									$('#coupon_'+ coupon.cpnId).html('<span>받기완료</span>');
+								//	$('#coupon_'+ coupon.cpnId).html('<span>받기완료</span>');
 									$('#coupon_'+ coupon.cpnId).attr('disabled', true);
 								}
 							}
 							if (Number(coupon.TotPubLimitQty) > 0){
 								if (Number(coupon.TotPubLimitQty) <= Number(coupon.CustCouponCnt)){
-									$('#coupon_'+ coupon.cpnId).html('<span>받기완료</span>');
+								//	$('#coupon_'+ coupon.cpnId).html('<span>받기완료</span>');
 									$('#coupon_'+ coupon.cpnId).attr('disabled', true);
 								}
 							}
@@ -179,9 +180,7 @@
 		});	
 		
 		if(couponDownAbleYn == "N"){
-			$('.btn_all_cpdown').addClass('btn_coupon_done');
 			$('.btn_all_cpdown').attr('disabled', true);
-			$('.btn_all_cpdown').find('span').text('쿠폰 모두 받기 완료');
 		}
 	}	
 	

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

@@ -213,7 +213,7 @@
 					<p class="tit normal" th:text="${goodsSafeNo.certDiv +' '+goodsSafeNo.certTypeNm + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
 					</th:block>
 					<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
-					<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' / '+goodsSafeNo.certTypeNm}"></p>
+					<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' '+goodsSafeNo.certTypeNm}"></p>
 					</th:block>
 					<p class="normal" >
 						<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">

+ 16 - 14
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -18,8 +18,6 @@
  -->
 <body>
 <th:block layout:fragment="content">
-<main role="" id="" class="container pd" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
-	<!-- ★ 컨텐츠 시작 -->
 	<form name="cartForm" id="cartForm" method="post">
 		<input type="hidden" name="mode">
 		<input type="hidden" name="goodsCd" th:value="${params.goodsCd}" />
@@ -38,6 +36,9 @@
 		<input type="hidden" name="currPrice" th:value="${goodsInfo.currPrice}"/>
 		<input type="hidden" name="goodsType" th:value="${goodsInfo.goodsType}"/>
 		<input type="hidden" name="selfGoodsYn" th:value="${goodsInfo.selfGoodsYn}"/>
+<main role="" id="" class="container pd" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<!-- ★ 컨텐츠 시작 -->
+
 	<section class="pd_detail">
 		<!-- 210409_ 구조변경 : .pd_info, .pd_info1 추가  -->
 		<div class="pd_info">
@@ -278,14 +279,13 @@
 					</th:block>
 					</th:block>
 					</th:block>
+					<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty }" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
 					
 				</div>
 					
-				<div class="view_outfit_box" >
+				<div class="view_outfit_box" th:if="${goodsInfo.tobeFormYn == 'N' and goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}">
 				<!-- 관리자 에디터입력 내용 노출  상단 html -->
-					<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty }" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
-					
-					<th:block th:if="${goodsInfo.tobeFormYn == 'N' and goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
+					<th:block  th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
 				</div>
 				<th:block th:if="${goodsInfo.tobeFormYn == 'Y'}">	
 				<!-- 착용컷 노출 -->
@@ -429,7 +429,7 @@
 							<p class="tit normal" th:text="${goodsSafeNo.certDiv +' '+goodsSafeNo.certTypeNm + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
 							</th:block>
 							<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
-							<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' / '+goodsSafeNo.certTypeNm}"></p>
+							<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' '+goodsSafeNo.certTypeNm}"></p>
 							</th:block>
 							<p class="normal" >
 								<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
@@ -477,7 +477,7 @@
 							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certDiv +' '+goodsCompose.goodsSafeNo.certTypeNm + ' / ' + goodsCompose.goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
 							</th:block>
 							<th:block th:unless="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
-							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certFormNm + ' / '+goodsCompose.goodsSafeNo.certTypeNm}"></p>
+							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certFormNm + ' '+goodsCompose.goodsSafeNo.certTypeNm}"></p>
 							</th:block>
 							<p class="normal" >
 								<th:block th:if="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
@@ -583,7 +583,7 @@
 				</div>
 				<!-- //상품필수정보 노출 -->
 			</div>
-			<div class="btn_more_box">
+			<div class="btn_more_box covered">
 				<div class="btn_group_flex">
 					<div>
 						<button type="button" class="btn btn_default">
@@ -1003,7 +1003,7 @@
 		<!-- 구매하기팝업 -->
 	</section>
 	<!-- ★ 컨텐츠 종료 -->	
-</form>
+
 	<!-- 바닥메뉴 -->	
 	<div class="product_floormenu"><!--  ☞☞ 제품이 품절되면 soldout클래스 추가 -->
 		<div class="share_like">
@@ -1050,9 +1050,9 @@
 			</div>
 		</div>
 	</div>
-		
-</main>
 
+</main>
+</form>
 <!-- 바로구매 및 선물하기 장바구니 등록 정보 저장을 위한 form -->
 <form id="directOrderForm" method="POST" action="/order/noMember"></form>
 <script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
@@ -1961,6 +1961,8 @@
 			return false;
 		}); 
 		
+
+		
 		//슬라이드 - 함께하면 할인되는 다다익선 상품
 		var togetherItemSwiper = new Swiper('.pd .pd_together .area_slider .swiper-container', {
 			slidesPerView: 3,
@@ -2164,12 +2166,12 @@
 		fnEpCouponDown([[${afLinkCd}]], [[${params.goodsCd}]], 1);
 		
 		
-		/*  $('.Purchase_pop .btPop_close').click(function(){
+		$('.Purchase_pop .btPop_close').click(function(){
 			$('html, body').css({'overflow': 'visible', 'height': '100%'});
 			$('.container').removeClass('btPop_open');
 			autome.style.top  = 100 + "%";
 			return false;
-		}); */
+		}); 
 		 
 	});
 	

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

@@ -426,7 +426,12 @@
 									<div class="lap">
 										<div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
 											<th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
-											<span class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}"  th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+												<th:block th:if="${reviewAttach.fileGb == 'M'}">
+											<span class="thumb mov" th:style="${'background-image:url('+kollusMediaUrl+'/poster/'+reviewAttach.kmcKey+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+												</th:block>
+												<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+											<span class="thumb" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span>
+												</th:block>
 											</th:block>
 										</div>
 										<div class="txt_best_review">
@@ -447,12 +452,17 @@
 		<h6>포토/영상 리뷰</h6>
 		<div class="photo_list">
 			<ul>
-				<li  th:each="photoReview, status : ${photoReviewList}" >
+				<li  th:each="photoReview, status : ${photoReviewList}" th:if="${status.count<=7}">
 					<th:block th:if="${photoReview.reviewAttachList != null and !photoReview.reviewAttachList.empty}">
 					<th:block th:each="reviewAttach, attachStatus : ${photoReview.reviewAttachList}" th:if="${attachStatus.first}">
 					<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]], '', 'Y', [[${photoReview.reviewSq}]])">
 						<div class="pic">
-							<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+							<th:block th:if="${reviewAttach.fileGb == 'M'}">
+							<span class="thumb mov" th:style="${'background-image:url('+kollusMediaUrl+'/poster/'+reviewAttach.kmcKey+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+							</th:block>
+							<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+							<span class="thumb" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span>
+							</th:block>
 						</div>
 					</a>
 					</th:block>
@@ -460,7 +470,7 @@
 				</li>
 			</ul>
 			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
-			<div th:if="${#lists.size(photoReviewList) >= 1}">
+			<div th:if="${#lists.size(photoReviewList) >= 8}">
 				<div>
 					<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])"><span>더 보기</span></button>
 				</div>	
@@ -679,12 +689,16 @@
 			if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
 				var fileGbClass = '';
 				$.each(item.reviewAttachList, function(aIdx, reviewAttach){
-					fileGbClass = '';
-					if (reviewAttach == "M") fileGbClass = "mov";
+//					fileGbClass = '';
+//					if (reviewAttach == "M") fileGbClass = "mov";
 			tag += '				<li>\n';
 			tag += '					<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">\n';
 			tag += '						<div class="pic">\n';
-			tag += '							<span class="thumb '+ fileGbClass +'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+			if (reviewAttach.fileGb == "M") {
+			tag +='								<span class="thumb mov" style="background-image:url('+_kollusMediaUrl +'/poster/'+reviewAttach.kmcKey +');\" ></span>\n';
+				}else{
+			tag +='								<span class="thumb" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" ></span>\n';
+				}
 			tag += '						</div>\n';
 			tag += '					</a>\n';
 			tag += '				</li>\n';		

+ 2 - 3
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html

@@ -38,14 +38,13 @@
 								<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>
+											<iframe class="pd_mov" width="100%" height="100%" th:src="${kollusMediaUrl+'/'+reviewAttach.kmcKey +'?enable_initialize_focus=false&autoplay&mute&controls_activation=none'}" frameborder="0" allowfullscreen></iframe>
 										</th:block>
 										<th:block th:unless="${reviewAttach.fileGb == 'M'}">
 											<img th:src="${imgUrl+'/'+reviewAttach.sysFileNm}" alt="">
 										</th:block>
 									</div>
+									
 								</div>
 								</th:block>
 								</th:block>

+ 8 - 4
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html

@@ -3,15 +3,15 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsReviewPhotoFormMob.html
- * @desc	: 상품평 - 포토/영상 리스트 팝업
+ * @source  : PlanningReplyPhotoFormMob.html
+ * @desc	: 댓글 이미지 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE		 AUTHOR	  DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021.04.008   eskim		최초 작성
+ * 1.0  2021.05.15   sowon		최초 작성
  *******************************************************************************
  -->
 <div class="modal-dialog" role="document">
@@ -70,7 +70,11 @@
 				tag += '				<li>\n';
 				tag += '					<a href="javascript:void();" onclick="fnGoodsReviewDetail(\''+item.reviewSq+'\');">\n';
 				tag += '						<div class="pic">\n';
-				tag += '							<span class="thumb '+ fileGbClass +'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				if ("I" ==reviewAttach.fileGb){
+				tag += '							<span class="thumb" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->	
+				}else{
+				tag += '							<span class="thumb mov" style="background-image:url('+_kollusMediaUrl+'/poster/'+reviewAttach.kmcKey+');"></span>\n';
+				}
 				tag += '						</div>\n';
 				tag += '					</a>\n';
 				tag += '				</li>\n';		

+ 54 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningCouponDetailFormMob.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	style="overflow-x: hidden !important;"
+>
+<!--
+ *******************************************************************************
+ * @source  : CouponDetailPopMob.html
+ * @desc    : 쿠폰정보 팝업 Page
+ *============================================================================
+ * PastelMall
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.15   sowon     최초 작성
+ *******************************************************************************
+ -->
+<!-- 쿠폰 상세보기 팝업 -->
+<div class="modal-header">
+    <h5 class="modal-title" id="couponInfoLabel">
+        사용안내
+    </h5>
+</div>
+<div class="modal-body">
+    <div class="pop_head" >
+        <h6 th:text="${couponDetailInfo.cpnNm}"></h6>
+    </div>
+    <div class="pop_cont">
+        <dl>
+            <div th:if="${couponDetailInfo.useCondition!=null && couponDetailInfo.useCondition!=''}">
+                <dt>사용조건</dt>
+                <dd th:text="${couponDetailInfo.useCondition}">
+                    <!-- <span>9,999,999</span>원 이상 구매 시 최대 <span>9,999,999</span>원 할인 -->
+                </dd>
+            </div>
+            <div>
+                <dt>발급수량</dt>
+                <dd th:if="${couponDetailInfo.issueCondition!=null && couponDetailInfo.issueCondition!=''}"th:text="${couponDetailInfo.issueCondition}"></dd>
+                <dd th:unless="${couponDetailInfo.issueCondition!=null && couponDetailInfo.issueCondition!=''}">제한없음</dd>
+            </div>
+            <div>
+                <dt>유효기간</dt>
+                <dd>
+                    <span th:text="${couponDetailInfo.availStdt}"></span>&nbsp;~&nbsp;<span th:text="${couponDetailInfo.availEddt}"></span>
+                </dd>
+            </div>
+             <div th:if="${couponDetailInfo.tgtCondition!=null}">
+                <dt>대상조건</dt>
+               <dd th:text="${couponDetailInfo.tgtCondition}"> </dd>
+            </div>
+        </dl>
+    </div>
+</div>

Файловите разлики са ограничени, защото са твърде много
+ 225 - 598
src/main/webapp/WEB-INF/views/mob/planning/PlanningDetailFormMob.html


+ 157 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningReplyPhotoFormMob.html

@@ -0,0 +1,157 @@
+<!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" th:with="imageUrl=${@environment.getProperty('upload.image.view')}">
+		<div class="modal-header">
+			<h5 class="modal-title" id="comment_popup">포토 댓글</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="pop_slide">
+					<div class="swiper-container">
+						<div class="swiper-wrapper">
+						<th:block th:each="a, stat : ${replyAttachList}">
+							<div class="swiper-slide">
+								<div class="img">
+									<img th:src="${imageUrl + a.sysFileNm}">
+								</div>
+							</div>
+						</th:block>
+						</div>
+					</div>
+					<!-- Add Pagination -->
+					<div class="swiper-pagination"></div>
+				</div>
+				<div class="pop_detail">
+					<button class="pop_open_btn">
+						<span class="sr-only"></span>
+					</button>
+					<!-- 210414_추가 : comment_wrap 태그 추가. -->
+					
+					<th:block th:each="a, stat : ${replyList}">	
+					<div class="comment_wrap">
+						<div class="review_p" th:text=${a.entryVal1}></div>
+						<div class="comment_writer">
+							<span class="writer" th:text="${a.maskingCustId}"></span> <span class="date" th:text="${a.entryDt}">2020.12.30</span>
+						</div>
+					</div>
+					</th:block>
+					<!-- //210414_추가 : comment_wrap 태그 추가. -->
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<a href="javascript:void(0);" rel="modal:close"
+	onclick="cfCloseLayer('layer_review_photo')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	
+	
+	$(document).ready( function() {
+		
+		$(document).on('click','.pop_open_btn',function(){
+			$('.modal.photo_comment_popup .pop_detail').toggleClass('active');
+		});
+		
+		/* 210414_추가 : swiper fraction 숫자 1자리수 일때 앞에 0 스크립트 추가 */
+		var swiper = new Swiper('.pop_slide .swiper-container', {
+			observer: true,
+			observeParents: true,
+			pagination: {
+				el: '.pop_slide .swiper-pagination',
+				type: 'fraction',
+				formatFractionCurrent: function (number) {
+					switch(number)
+					{
+						case 1:
+						myNum='01'
+						break;
+						case 2:
+						myNum='02'
+						break;
+						case 3:
+						myNum='03'
+						break;
+						case 4:
+						myNum='04'
+						break;
+						case 5:
+						myNum='05'
+						break;
+						case 6:
+						myNum='06'
+						break;
+						case 7:
+						myNum='07'
+						break;
+						case 8:
+						myNum='08'
+						break;
+						case 9:
+						myNum='09'
+						break;
+						default:myNum= number
+						}
+					return myNum; 
+				},
+				formatFractionTotal: function (number) {
+					switch(number)
+					{
+						case 1:
+						myNum='01'
+						break;
+						case 2:
+						myNum='02'
+						break;
+						case 3:
+						myNum='03'
+						break;
+						case 4:
+						myNum='04'
+						break;
+						case 5:
+						myNum='05'
+						break;
+						case 6:
+						myNum='06'
+						break;
+						case 7:
+						myNum='07'
+						break;
+						case 8:
+						myNum='08'
+						break;
+						case 9:
+						myNum='09'
+						break;
+						default:myNum= number
+						}
+					return myNum; 
+				},
+			},
+		});
+		
+		
+	});
+	
+	
+	
+/*]]>*/
+</script>
+</html>

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

@@ -30,7 +30,7 @@
 						<label class="input_label sr-only">아이디</label>
 						<div class="ui_col_12">
 							<div class="input_wrap">
-								<input type="text" name="loginId" placeholder="아이디" class="form_control" minlength="4" maxlength="12" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디"/>
+								<input type="text" name="loginId" placeholder="아이디" class="form_control" minlength="4" maxlength="12" required="required" data-valid-name="아이디"/>
 							</div>
 						</div>
 					</div>
@@ -282,7 +282,7 @@
 		}
 		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
 		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN);
 		}
 		// 5. YES24 첫 로그인 시도 시 정보동의 페이지 이동
 		if (userInfo.custStat === 'NEED_AGREE_CUST') {

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

@@ -87,7 +87,7 @@
 		}
 		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
 		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN);
 			$.modal.close();
 			return;
 		}
@@ -124,7 +124,7 @@
 	};
 
 	$("#btnClose").click(function() {
-		cfnGoToPage(_PAGE_CUSTOMER_JOIN);
+		cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);
 		$.modal.close();
 	});
 

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

@@ -95,7 +95,7 @@
 		}
 		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
 		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN);
 		}
 		// 5. YES24 첫 로그인 시도 시 정보동의 페이지 이동
 		if (userInfo.custStat === 'NEED_AGREE_CUST') {

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

@@ -598,7 +598,7 @@
 					tag += ' class="on"';
 				}
 				tag += '>\n';
-				tag += '	<a href="javascript:javascript:void(0);"';
+				tag += '	<a href="javascript:void(0);"';
 				if (cate1.cate1No == cate1No && cate2No == null) {
 					tag += ' class="on"';
 					formTitle = cate1.cate1Nm;
@@ -630,7 +630,7 @@
 							tag += ' class="on"';
 						}
 						tag += '		>\n';
-						tag += '		<a href="javascript:javascript:void(0);" ';
+						tag += '		<a href="javascript:void(0);" ';
 						if (cate2.cate2No == cate2No && cate3No == null) {
 							tag += ' class="on"';
 							navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li>';
@@ -655,7 +655,7 @@
 									tag += ' class="on"';
 								}
 								tag += '>';
-								tag += '		<a href="javascript:javascript:void(0);" ';
+								tag += '		<a href="javascript:void(0);" ';
 								if (cate3.cate3No == cate3No && cate4No == null) {
 									tag += ' class="on"';
 									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
@@ -679,7 +679,7 @@
 											tag += ' class="on"';
 										}
 										tag += '>';
-										tag += '		<a href="javascript:javascript:void(0);" ';
+										tag += '		<a href="javascript:void(0);" ';
 										if (cate4.cate4No == cate4No) {
 											tag += ' class="on"';
 											navNm = '<li class="bread_2depth" id="navNm3">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li><li class="bread_2depth" id="navNm3">' + cate4.cate4Nm + '</li>';
@@ -734,7 +734,7 @@
 					tag += ' class="on"';
 				}
 				tag += '>\n';
-				tag += '	<a href="javascript:javascript:void(0);"';
+				tag += '	<a href="javascript:void(0);"';
 				if (cate1.cate1No == cate1No && cate2No == null) {
 					tag += ' class="on"';
 					formTitle = cate1.cate1Nm;
@@ -781,7 +781,7 @@
 							tag += ' class="on"';
 						}
 						tag += '		>\n';
-						tag += '		<a href="javascript:javascript:void(0);" ';
+						tag += '		<a href="javascript:void(0);" ';
 						if (cate2.cate2No == cate2No && cate3No == null) {
 							tag += ' class="on"';
 							navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li>';
@@ -813,7 +813,7 @@
 									tag += ' class="on"';
 								}
 								tag += '>';
-								tag += '		<a href="javascript:javascript:void(0);" ';
+								tag += '		<a href="javascript:void(0);" ';
 								if (cate3.cate3No == cate3No && cate4No == null) {
 									tag += ' class="on"';
 									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
@@ -841,7 +841,7 @@
 											tag += ' class="on"';
 										}
 										tag += '>';
-										tag += '		<a href="javascript:javascript:void(0);" ';
+										tag += '		<a href="javascript:void(0);" ';
 										if (cate4.cate4No == cate4No) {
 											tag += ' class="on"';
 											navNm = '<li class="bread_2depth" id="navNm3">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li><li class="bread_2depth" id="navNm3">' + cate4.cate4Nm + '</li>';

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

@@ -50,7 +50,7 @@
 
 												</ul>
 												<div class="ui_row">
-													<button type="button" class="fillter_reset" onclick="fnGetLookbookList();"><span>초기화</span></button>
+													<button type="button" class="fillter_reset" onclick="fnLookbookReset();"><span>초기화</span></button>
 													<button type="button" class="fillter_apply" onclick="fnGetBrandLookbookList();"><span>적용</span></button>
 												</div>
 											</div>
@@ -60,9 +60,16 @@
 							</div>
 
 							<div class="list">
-								<ul class="clear event_con" id="lookbookArea" style="display: none;">
+								<section id="infiniteContainer">
+									<div id="listBoxOuter">
+										<ul class="clear event_con" id="listBox"> <!--id="lookbookArea"-->
 
-								</ul>
+										</ul>
+									</div>
+								</section>
+								<div class="last_page" id="divLastPage" style="display: none;">
+									<span>마지막 페이지입니다.</span>
+								</div>
 								<ul class="clear no_con" id="divLookbookNoData" style="display: none;">
 									<li>
 										<p><img src="/images/pc/ico_content_none.png" alt="등록된 이벤트가 없습니다."></p>
@@ -78,6 +85,18 @@
 			</div>
 		</div>
 
+		<form id="lbMainForm" name="lbMainForm">
+			<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+			<input type="hidden" name="pageSize" value ="30"/>
+			<input type="hidden" name="lookbookGb" th:value="${lbInfo.lookbookGb}"/>
+			<input type="hidden" name="brandCd" th:value="${lbInfo.brandCd}">
+			<input type="hidden" name="frontYn" value="Y"/>
+			<input type="hidden" name="totalCnt" />
+		</form>
+
+<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+
 <script th:inline="javascript">
 /*<![CDATA[*/
 	var lookbookGb = [[${lbInfo.lookbookGb}]];
@@ -86,88 +105,125 @@
 	}
 	var brandCd = [[${lbInfo.brandCd}]];
 
-	let fnGetLookbookList = function (lookbookGb, brandGroupNo){
-		let actionUrl = '/display/lookbook/main/list?lookbookGb='+lookbookGb;
-		if (!gagajf.isNull(brandGroupNo)) actionUrl += '&multiBrandCd=' + brandGroupNo;
-		$('#lookbookArea').html('');
-		$('#divLookbookNoData').hide();
-
-		$.getJSON(actionUrl
-			, function (result, status){
-				if (status == 'success'){
-					if (result.length > 0){
-						$('#lookbookTotCnt').html('<span>' + result.length.addComma() + '</span>');
-
-						if (gagajf.isNull(brandGroupNo)){
-							$('#brandArea').html('');
-							let tag = '';
-							let brandArr = [];
-							$.each(result, function(idx, item) {
-								if(!brandArr.includes(item.brandCd)){
-									brandArr.push(item.brandCd);
-									tag += '<li>';
-									tag += '	<label class="brand_btn">';
-									tag += '		<input type="checkbox" group="filterValue" id="chkFilterBrand'+idx+'" data-name="chkFilterBrand'+idx+'" name="filterBrandCds" value="'+item.brandCd+'"><span>'+item.brandNm+'</span>';
-									tag += '	</label>';
-									tag += '</li>';
-								}
-							});
-							$('#brandArea').html(tag);
-						}
-
-						$('#lookbookArea').html('');
-						let tag2 = '';
-						tag2 += '<ul class="clear event_con" id="lookbookArea" style="display: block;">';
-						$.each(result, function(idx, item) {
-							tag2 += '<li>';
-							tag2 += '	<a href="javascript:void(0);" onclick="cfnGoToLookbookDetail(\''+lookbookGb+'\','+item.lookbookSq+','+item.brandCd+')">';
-							tag2 += '		<div class="ev_img">';
-							tag2 += '			<img src="' + _imgUrl + item.orgTnfileNm + '" alt="" style="height:100%">';
-							tag2 += '		</div>';
-							tag2 += '		<div class="txt">';
-							if(lookbookGb != 'BL') {
-								tag2 += '			<span class="brand">' + item.brandNm + '</span>';
-							}
-							tag2 += '			<p class="tit">'+item.title+'</p>';
-							tag2 += '		</div>';
-							tag2 += '	</a>';
-							tag2 += '</li>';
-						});
-						tag2 += '</ul>';
-
-						$('#lookbookArea').html(tag2);
-						$('#divLookbookNoData').hide();
-						$('#lookbookArea').show();
-					}else{
-						$('#lookbookTotCnt').html('<span>0</span>');
-						document.getElementById("changeClass").className = "event_list no_data";
-						$('#lookbookArea').hide();
-						$('#divLookbookNoData').show();
-					}
-				}
-				document.getElementById("brandBox").className = "btn btn_default tgl_dropdown";
-				$('.dropdown_menu').hide();
-			});
+	var fnLookbookListSearch = function (){
+		gagaInfiniteScroll.getHistory();
+	}
+
+	var fnGetInfiniteScrollDataList = function (pageNum){
+		$("#lbMainForm input[name=pageNo]").val(pageNum+1);
+		gagajf.ajaxFormSubmit("/display/lookbook/main/list", document.lbMainForm,  gagaInfiniteScroll.jsonToHtml);
+	}
+
+	var fnDrawInfiniteScrollData = function (result){
+		let totalCnt = result.paging.totalCount;
+		$("#lookbookTotCnt").text(totalCnt);
+		$("#lbMainForm").find("input[name=totalCnt]").val(totalCnt);
+		gagaInfiniteScroll.pageStatus.totalCount = totalCnt;
+
+		if (result.dataList != null && result.dataList.length > 0) {
+			$(".nodata").hide();
+			let lastPage = result.paging.pageNo;
+			let endRow = result.paging.endRow - result.paging.pageSize;
+
+			var htm = fnGetLookbookList(result);
+			gagaInfiniteScroll.draw(htm);
+		}else{
+			if($("#lbMainForm input[name=pageNo]").val()==1){
+				$("#divLookbookNoData").show();
+			}else{
+				$("#divLastPage").show();
+			}
+			gagaInfiniteScroll.draw('not');
+		}
+	}
+
+	let fnGetLookbookList = function (result){
+		var html = '';
+
+		$.each(result.dataList, function (idx, item){
+			html += '<li>';
+			html += '	<a href="javascript:void(0);" onclick="cfnGoToLookbookDetail(\''+lookbookGb+'\','+item.lookbookSq+','+item.brandCd+')">';
+			html += '		<div class="ev_img">';
+			html += '			<img src="' + _imgUrl + item.orgTnfileNm + '" alt="" style="height:100%">';
+			html += '		</div>';
+			html += '		<div class="txt">';
+			if(lookbookGb != 'BL') {
+				html += '			<span class="brand">' + item.brandNm + '</span>';
+			}
+			html += '			<p class="tit">'+item.title+'</p>';
+			html += '		</div>';
+			html += '	</a>';
+			html += '</li>';
+		});
+		return html;
 	}
 
+	// 브랜드 리스트 가져오기
+	let fnGetBrandList = function (){
+		let actionUrl = '/display/lookbook/main/brand/list?frontYn=Y';
+		$.getJSON(actionUrl, function(result, status){
+			if(result.length > 0){
+				$('#brandArea').html('');
+				let tag = '';
+				$.each(result, function(idx, item) {
+					tag += '<li>';
+					tag += '	<label class="brand_btn">';
+					tag += '		<input type="checkbox" group="filterValue" id="chkFilterBrand'+idx+'" data-name="chkFilterBrand'+idx+'" name="filterBrandCds" value="'+item.brandCd+'"><span>'+item.brandNm+'</span>';
+					tag += '	</label>';
+					tag += '</li>';
+				});
+				$('#brandArea').html(tag);
+			}
+		});
+	}
+
+	// 브랜드 선택 적용
 	var fnGetBrandLookbookList = function (){
-		var multiBrandCd = [];
+		$("#lbMainForm input:hidden[name=multiBrandCd]").remove();
+		var tag = '';
 		$("input:checkbox:checked").each(function (index) {
-			multiBrandCd.push($(this).val());
+			tag += '<input type="hidden" name="multiBrandCd" value="'+$(this).val()+'" />';
+			$("#lbMainForm").append(tag);
+		});
+
+		fnLookbookInfiniteScrollInit();
+		fnLookbookListSearch();
+	}
+
+	// 브랜드 선택 초기화
+	var fnLookbookReset = function (){
+		$("#lbMainForm input:hidden[name=multiBrandCd]").remove();
+
+		$("#brandArea").find('input[name=filterBrandCds]').each(function(idx, item){
+			$(this).prop("checked",false);
 		});
 
-		fnGetLookbookList(lookbookGb,multiBrandCd);
+		fnLookbookInfiniteScrollInit();
+		fnLookbookListSearch();
+	}
+
+	// 인피니티 스크롤 초기화
+	var fnLookbookInfiniteScrollInit = function (){
+		sessionStorage.removeItem(document.location.href);
+		$("#listBox").html("");
 	}
 
 	$(document).ready(function() {
 		//$("#container .wrap .content .cont_body .event_list .event_top .ui_row .count").find('span').text(totalCnt.addComma());
-		fnGetLookbookList(lookbookGb,brandCd);
+		//fnGetLookbookList(lookbookGb,brandCd);
+		//fnLookbookListSearch();
+		fnLookbookReset();
 
 		if(lookbookGb=='BL'){
 			$("#brandBox").hide();
 			$("#navHome").attr('onclick', 'cfnGoToBrandMain('+brandCd+');');
 		}else{
 			$("#navHome").attr('href', '/');
+			fnGetBrandList();
+		}
+
+		if(!gagajf.isNull($("#lbMainForm").find("input[name=totalCnt]").val())){
+			$("#lookbookTotCnt").text($("#lbMainForm").find("input[name=totalCnt]").val());
 		}
 	});
 

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

@@ -143,7 +143,7 @@
 
 				<!-- 4. 잇 아이템 -->
 				<th:block th:if="${contentsLoc=='004'}">
-					<div class="content main_it">
+					<div class="content main_it" th:if="${mainLayoutData.BestItemList != null}">
 						<div class="cont_head">
 							<p class="displayH" id="id004">
 								<input type="hidden" name="title" th:value="${mainLayoutData.contentsTitle}">
@@ -197,7 +197,7 @@
 
 				<!-- 5. 프로모션배너 -->
 				<th:block th:if="${contentsLoc=='005'}">
-					<div class="content main_2stage">
+					<div class="content main_2stage" th:if="${mainLayoutData.ContentsList != null}">
 						<div class="cont_head dpnone">
 							<p class="t_c">프로모션배너</p>
 						</div>

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

@@ -212,8 +212,8 @@
 			<th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
 			<p class="tit normal" th:text="${goodsSafeNo.certDiv +' '+goodsSafeNo.certTypeNm + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
 			</th:block>
-			<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
-			<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' / '+ goodsSafeNo.certTypeNm}"></p>
+			<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and goodsSafeNo.certFormGb != 'G084_5' }">
+			<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' '+ goodsSafeNo.certTypeNm}"></p>
 			</th:block>
 			<p class="normal" >
 				<th:block th:if="${goodsSafeNo.certNum}" th:text="${'인증번호: ' + goodsSafeNo.certNum}"></th:block>

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

@@ -43,10 +43,10 @@
 											<a th:href="${'#navLocate'+ status.count}">
 												<span class="thumb  mov">
 												<th:block th:if="${goodsVideo.videoGb == 'Y'}">
-												<img th:src="${'https://img.youtube.com/vi/'+goodsVideo.kmcKey+'/default.jpg'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												<img th:src="${'https://img.youtube.com/vi/'+goodsVideo.kmcKey+'/default.jpg'}" alt="" >
 												</th:block>
 												<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
-												<iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?enable_initialize_focus=false&controls_activation=none'}" frameborder="0" allowfullscreen></iframe>
+												<img th:src="${kollusMediaUrl+'/poster/'+goodsVideo.kmcKey}"  alt="" >
 												</th:block>
 												</span>
 											</a>
@@ -548,7 +548,12 @@
 											<a href="javascript:void(0);" id="btn_pdBestReview_pop"  th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])" >
 												<div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
 													<th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
-													<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+														<th:block th:if="${reviewAttach.fileGb == 'M'}" >
+													<span class="thumb mov" th:style="${'background-image:url('+kollusMediaUrl+'/poster/'+reviewAttach.kmcKey+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+														</th:block>
+														<th:block th:unless="${reviewAttach.fileGb == 'M'}" >
+													<span class="thumb" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span>
+														</th:block>
 													</th:block>
 												</div>
 												<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.iscore*100/5), 0,0)}">
@@ -803,7 +808,7 @@
 						<p class="tit normal" th:text="${goodsSafeNo.certDiv +' '+goodsSafeNo.certTypeNm + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
 						</th:block>
 						<th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and  goodsSafeNo.certFormGb != 'G084_5' }">
-						<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' / '+goodsSafeNo.certTypeNm}"></p>
+						<p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' '+goodsSafeNo.certTypeNm}"></p>
 						</th:block>
 						<p class="normal" >
 							<th:block th:if="${goodsSafeNo.certNum}" th:text="${'인증번호: ' + goodsSafeNo.certNum}"></th:block>
@@ -845,7 +850,7 @@
 							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certDiv +' '+goodsCompose.goodsSafeNo.certTypeNm + ' / ' + goodsCompose.goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
 							</th:block>
 							<th:block th:unless="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and  goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
-							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certFormNm + ' / '+ goodsCompose.goodsSafeNo.certTypeNm}"></p>
+							<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certFormNm + ' '+ goodsCompose.goodsSafeNo.certTypeNm}"></p>
 							</th:block>
 							<p class="normal" >
 								<th:block th:if="${goodsCompose.goodsSafeNo.certNum}" th:text="${'인goodsCompose.증번호: ' + goodsSafeNo.certNum}"></th:block>

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

@@ -302,7 +302,12 @@
 						<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]], 'Y', '', [[${bestReview.reviewSq}]])" >
 							<div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
 								<th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
-								<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+									<th:block th:if="${reviewAttach.fileGb == 'M'}">
+									<span class="thumb mov" th:style="${'background-image:url('+kollusMediaUrl+'/poster/'+reviewAttach.kmcKey+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+									</th:block>
+									<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+									<span class="thumb" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span>
+									</th:block>
 								</th:block>
 							</div>
 							<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.iscore*100/5), 0,0)}">
@@ -325,13 +330,17 @@
 		<h6>포토/영상 리뷰</h6>
 		<div class="photo_list">
 			<ul>
-				<li  th:each="photoReview, status : ${photoReviewList}" >
+				<li  th:each="photoReview, status : ${photoReviewList}" th:if="${status.count<=7}">
 					<th:block th:if="${photoReview.reviewAttachList != null and !photoReview.reviewAttachList.empty}">
 					<th:block th:each="reviewAttach, attachStatus : ${photoReview.reviewAttachList}" th:if="${attachStatus.first}">
-					
 					<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]], '', 'Y', [[${photoReview.reviewSq}]])">
 						<div class="pic">
-							<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+							<th:block th:if="${reviewAttach.fileGb == 'M'}">
+							<span class="thumb mov" th:style="${'background-image:url('+kollusMediaUrl+'/poster/'+reviewAttach.kmcKey+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+							</th:block>
+							<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+							<span class="thumb" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span>
+							</th:block>
 						</div>
 					</a>
 					</th:block>
@@ -550,15 +559,15 @@
 				if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
 					var fileGbClass = '';
 					$.each(item.reviewAttachList, function(aIdx, reviewAttach){
-						fileGbClass = '';
-						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+//						fileGbClass = '';
+//						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
 				tag += '				<li>\n';
 				tag += '					<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\','+aIdx+');">\n';
 				tag += '						<div class="pic">\n';
 					if (reviewAttach.fileGb == "M") {
-				tag +='					<span class="thumb '+fileGbClass+'"><iframe width="100%" height="100%" src="'+_kollusMediaUrl +'/'+reviewAttach.kmcKey +'?player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></span>\n';
+				tag +='					<span class="thumb mov" style="background-image:url('+_kollusMediaUrl +'/poster/'+reviewAttach.kmcKey +');\" ></span>\n';
 					}else{
-				tag +='					<span class="thumb" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';
+				tag +='					<span class="thumb" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" ></span>\n';
 					}
 				tag += '						</div>\n';
 				tag += '					</a>\n';

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

@@ -65,15 +65,15 @@
 				if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
 					var fileGbClass = '';
 					$.each(item.reviewAttachList, function(aIdx, reviewAttach){
-						fileGbClass = '';
-						if (reviewAttach == "M") fileGbClass = "mov";
+					//	fileGbClass = '';
+					//	if (reviewAttach == "M") fileGbClass = "mov";
 				tag += '				<li>\n';
 				tag += '					<a href="javascript:void();" onclick="fnGoodsReviewDetail(\''+item.reviewSq+'\');">\n';
 				tag += '						<div class="pic">\n';
 				if ("I" ==reviewAttach.fileGb){
 					tag += '							<span class="thumb" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->	
 				}else{
-					tag += '							<span class="thumb '+ fileGbClass +'"><iframe width="100%" height="100%" src="'+_kollusMediaUrl +'/'+reviewAttach.kmcKey +'?player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></span>\n';	
+					tag += '							<span class="thumb mov" style="background-image:url('+_kollusMediaUrl+'/poster/'+reviewAttach.kmcKey+');"></span>\n';
 				}
 				tag += '						</div>\n';
 				tag += '					</a>\n';

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

@@ -60,7 +60,7 @@
 													<div class="gd_item">	
 														<a href="">
 															<span class="thumb">
-																<img th:src="${imageUrl + '/' + reviewInfo.sysImgNm}" width="100%" alt="">
+																<img th:src="${imageUrl + '/' + reviewInfo.sysImgNm +'?RS=550'}" width="100%" alt="">
 															</span>
 															<p>
 																<span class="buy_date"><em th:text="${reviewInfo.payDt}"></em>&nbsp;구매</span>

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

@@ -152,7 +152,7 @@
 				html += '					<div class="gd_item">	                                                                              ';
 				html += '						<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">                                                                                       ';
 				html += '							<span class="thumb">                                                                          ';
-				html += '								<img src="' + imageUrl + '/' + item.sysImgNm + '"  width="100%" alt="">  ';
+				html += '								<img src="' + imageUrl + '/' + item.sysImgNm + '?RS=550"  width="100%" alt="">  ';
 				html += '							</span>                                                                                       ';
 				html += '							<p>                                                                                           ';
 				html += '								<span class="buy_date"><em>'+item.payDt+'</em>&nbsp;구매</span>             ';
@@ -216,7 +216,7 @@
 				html+='						<div class="gd_item">	';
 				html+='							<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" >';
 				html+='								<span class="thumb">';
-				html+='									<img src="' + imageUrl + '/' + item.sysImgNm + '" width="100%" alt="">';
+				html+='									<img src="' + imageUrl + '/' + item.sysImgNm + '?RS=550" width="100%" alt="">';
 				html+='								</span>';
 				html+='								<p>';
 				html+='									<span class="buy_date"><em>'+item.payDt+'</em>&nbsp;구매</span>';

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

@@ -78,7 +78,7 @@ var ajaxWishList = function () {
 							html+='				<button type="button" class="itemLike likeit" goodsCd=\''+item.goodsCd+'\' onclick="wishlistDelete(this)">관심상품 추가</button>';
 							html+='				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">';
 							html+='					<div class="itemPic">';
-							html+='						<img alt="" class=" vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">';
+							html+='						<img alt="" class=" vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '?RS=550">';
 							html+='					</div>';
 							html+='					<p class=" itemBrand">'+item.brandGroupNm+'</p>';
 							html+='					<div class=" itemName">'+item.goodsNm+'</div>';

+ 9 - 11
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -118,8 +118,7 @@
 					</div>
 					<div class="cont_body">
 						<div class="btn_wrap">
-							<a href="javascript:void(0);" class="btn btn_primary go_next"
-								onclick="javascript:fnJoinConfirm()"> <span>설문조사 참여하기</span></a>
+							<a href="javascript:void(0);" class="btn btn_primary go_next" onclick="javascript:fnJoinConfirm()"> <span>설문조사 참여하기</span></a>
 						</div>
 					</div>
 				</div>
@@ -448,9 +447,9 @@ if(image.length>0){
 	for (var i = 0; i < image.length; i++) {
 		html += '                	<div class="swiper-slide">';
 		if (image[i].linkOpenGb == 'M') {
-			html += '                    	<a href="http://'+image[i].linkUrl+'" target="_self">><img alt="" src="'+ imgUrl + image[i].itemVal +'"></a>';
+			html += '                    	<a href="'+image[i].linkUrl+'" target="_self">><img alt="" src="'+ imgUrl + image[i].itemVal +'"></a>';
 		}else{
-			html += '                    	<a href="http://'+image[i].linkUrl+'" target="_blank">><img alt="" src="'+ imgUrl + image[i].itemVal +'"></a>';
+			html += '                    	<a href="'+image[i].linkUrl+'" target="_blank">><img alt="" src="'+ imgUrl + image[i].itemVal +'"></a>';
 		}
 		
 		html += '                	</div>';
@@ -485,9 +484,9 @@ if(goods1.length>0){
 			html += '        <h4>';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				if (template[i].linkOpenGb == 'M') { //본창
-					html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
 				}else{
-					html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
 				}
 				
 			}else{
@@ -555,9 +554,9 @@ if(goods2.length>0){
 			html += '        <h4>';
 				if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 					if (template[i].linkOpenGb == 'M') { //본창
-						html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+						html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
 					}else{
-						html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+						html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
 					}
 				}else{
 					html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
@@ -627,9 +626,9 @@ if(goods4.length>0){
 			html += '        <h4>';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				if (template[i].linkOpenGb == "M") { //본창
-					html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
 				}else{
-					html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
 				}
 			}else{
 				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
@@ -1152,7 +1151,6 @@ $(document).ready( function() {
 		var content = $(this).val();
 		$('#cmt_cnt').html(content.length);
 		if (content.length > 500){
-			mcxDialog.alert("최대 500자까지 입력 가능합니다.");
 			$(this).val(content.substring(0, 500));
 			$('#cmt_cnt').html("500");
 		}

+ 2 - 2
src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html

@@ -138,7 +138,7 @@
 						    	tag += '				<div class="shape ranker"><span>NEW</span></div>\n';
 						    }
                             tag += '               <div class="thumb">\n';
-						    tag += '                   <img src="' + _uploadImageUrl + item.mainImg + '" alt="">\n';
+						    tag += '                   <img src="' + _uploadImageUrl + item.mainImg + '?RS=430" alt="">\n';
 						    tag += '               </div>\n';
 						    tag += '               <div class="exhi_detail">\n';
 						    tag += '                   <h3 class="tit">' + item.planNm + '</h3>\n';
@@ -155,7 +155,7 @@
 								    tag += '                       <div class="item_state">\n';
 								    tag += '                           <a  onclick="cfnGoToGoodsDetail(\'' + goods.goodsCd + '\');" class="itemLink">\n';
 								    tag += '                               <div class="itemPic">\n';
-								    tag += '                                   <img alt="" class="vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + goods.sysImgNm + '">\n';
+								    tag += '                                   <img alt="" class="vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + goods.sysImgNm + '?RS=1000">\n';
 								    tag += '                               </div>\n';
 								    tag += '                               <div class="itemName">' + goods.goodsNm + '</div>\n';
 								    tag += '                               <p class="itemPrice"' + goods.currPrice.addComma() + '</p>\n';

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

@@ -122,7 +122,7 @@ let fnGetSocialList = function(result) {
 		
 		html += '        <a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\')" >';
 		html += '            <div class="itemPic">';
-		html += '                <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item.sysImgNm +'">';
+		html += '                <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item.sysImgNm +'?RS=550">';
 		html += '            </div>';
 		html += '            <div class="itemSpecialPrice"><span>특가</span></div>';
 		html += '            <p class="itemBrand">'+item.brandGroupNm+'</p>';

+ 97 - 11
src/main/webapp/biz/goods.js

@@ -354,7 +354,7 @@ var filterHtml = '';
 var filterStatHtml = '';
 
 // 상품상세 필터 조회
-var filterSel = function (obj, gubun, staus, sizeGb, appGb){
+var filterSel = function (obj, gubun, staus, sizeGb){
 	filterHtml = '';
 	filterStatHtml = '';
 	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
@@ -362,9 +362,9 @@ var filterSel = function (obj, gubun, staus, sizeGb, appGb){
 	let $obj = $(obj);
 	if(staus=='on'){
 		if(gubun=='size'){
-			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'off\',\''+sizeGb+'\',\''+appGb+'\');');
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'off\',\''+sizeGb+'\');');
 		}else{
-			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'off\',\'\',\''+appGb+'\');');
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'off\',\'\');');
 		}
 
 		$("#filterData").find('span').each(function(idx,item) {
@@ -380,9 +380,9 @@ var filterSel = function (obj, gubun, staus, sizeGb, appGb){
 		});
 	}else{
 		if(gubun=='size'){
-			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\''+sizeGb+'\',\''+appGb+'\');');
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\''+sizeGb+'\');');
 		}else{
-			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\'\',\''+appGb+'\');');
+			$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\'\');');
 		}
 
 		let tag = '';
@@ -405,15 +405,13 @@ var filterSel = function (obj, gubun, staus, sizeGb, appGb){
 			tag += '</span>';
 		}
 
-		if(appGb != 'Mob'){
-			$("#filterData").append(tag);
-		}
+		$("#filterData").append(tag);
 
 		filterStatHtml += tag;
 	}
 
 	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
-	fnFilterSet(gubun, sizeGb, appGb);
+	fnFilterSet(gubun, sizeGb);
 }
 
 var fnFilterSet = function (searchId, sizeGb, appGb){
@@ -437,6 +435,8 @@ var fnFilterSet = function (searchId, sizeGb, appGb){
 
 	if(appGb == 'Mob'){
 		var data = '';
+		var tag = '';
+		var filterSet = '';
 		$('#'+searchId+'FilterDiv').find('.daps1').find('span').html('');
 		$('#filterForm input[name='+searchId+']:checked').each(function(idx){
 			if(searchId=='color'){
@@ -458,10 +458,11 @@ var fnFilterSet = function (searchId, sizeGb, appGb){
 				data += $(this).attr('data-id');
 				$("#"+searchId+"FilterDiv").find('.daps1').append('<span class="pic">'+data+'</span>');
 			}
-
 		});
+
 	}
 	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
 	fnGoodsListSearch();
 }
 
@@ -612,12 +613,15 @@ var fnSortingChange = function (obj, sortingType, stat, appGb){
 		}
 	}
 
-	console.log('appGb:::'+appGb);
 	if(appGb != 'Mob'){
 		$("#sortArea").find('li').each(function (){
 			$(this).find('a').attr('class','off');
 		});
 	}else{
+		$("#sortArea").find('button').each(function (){
+			$(this).removeClass("on");
+		});
+		$("#sorting"+sortingType).addClass("on");
 		$("#filter").text($("#sorting"+sortingType).find('span').text());
 	}
 	
@@ -726,4 +730,86 @@ var filterDcRateMob = function (obj, gubun, staus, idx){
 
 }
 
+// 상품상세 필터 조회
+var fnSelectFilerMob = function (obj, gubun, staus, sizeGb){
+	filterHtml = '';
+	filterStatHtml = '';
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+	let $obj = $(obj);
+	if(staus=='on'){
+		if(gubun=='size'){
+			$(obj).attr('onclick','fnSelectFilerMob(this,\''+gubun+'\',\'off\',\''+sizeGb+'\');');
+		}else{
+			$(obj).attr('onclick','fnSelectFilerMob(this,\''+gubun+'\',\'off\',\'\');');
+		}
+
+		$("#filterData").find('span').each(function(idx,item) {
+			if(gubun=='color'){
+				if($obj.attr('data-id').replace('#','').trim() == $(this).closest("span").attr('id')) {
+					$(this).closest("span").remove();
+				}
+			}else{
+				if($obj.attr('data-id') == $(this).closest("span").text()) {
+					$(this).closest("span").remove();
+				}
+			}
+		});
+	}else{
+		if(gubun=='size'){
+			$(obj).attr('onclick','fnSelectFilerMob(this,\''+gubun+'\',\'on\',\''+sizeGb+'\');');
+		}else{
+			$(obj).attr('onclick','fnSelectFilerMob(this,\''+gubun+'\',\'on\',\'\');');
+		}
+	}
+	fnFilterSet(gubun, sizeGb, 'Mob');
+}
+
+var fnReCheckFilterList = function (){
+	var data = '';
+	var searchId = '';
+	$('#filterForm').find('.allFilter').find('.chkFilter').each(function() {
+		if(!gagajf.isNull($(this).attr('id'))){
+			if($(this).attr('id') == 'sizeFilterDiv'){
+				searchId = 'size';
+			}else{
+				searchId = $(this).attr('id').replace('FilterDiv','');
+			}
+		}
+
+		if(!gagajf.isNull(searchId)){
+			$('#filterForm input[name='+searchId+']:checked').each(function(idx){
+				if(searchId=='color'){
+					$('#'+searchId+'FilterDiv').find('.daps1').find('.pic').find('span').html('');
+					var mobTag = '';
+					var color = $(this).attr('data-id');
+					console.log('color::'+$(this).attr('data-id'));
+					if(color=='FFFFFF'){
+						mobTag += '<span class="pdColor-color" style="background-color:#'+color+';border:1px solid #aaa;"></span>';
+					}else{
+						mobTag += '<span class="pdColor-color" style="background-color:#'+color+'"></span>';
+					}
+					$("#"+searchId+"FilterDiv").find('.daps1').find('.pic').append(mobTag);
+				}else if(searchId=='price'){
+					$('#filterForm input[name=price]:checked').each(function(index){
+						$("#priceFilterDiv").find('.daps1').append('<span class="pic">'+$("#pricdSpan"+idx).text()+'</span>');
+					});
+				}else if(searchId=='dcRate'){
+					$('#filterForm input[name=dcRate]:checked').each(function(index){
+						$("#dcRateFilterDiv").find('.daps1').append('<span class="pic">'+$("#dcRateText"+idx).text()+'</span>');
+					});
+				}else{
+					$('#'+searchId+'FilterDiv').find('.daps1').find('span').html('');
+					if(idx>0){
+						data += ',';
+					}
+					data += $(this).attr('data-id');
+					$("#"+searchId+"FilterDiv").find('.daps1').append('<span class="pic">'+data+'</span>');
+				}
+			});
+		}
+
+	});
+}
+
 //****************상품리스트  end **********************************

+ 1 - 1
src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollLayer.js

@@ -63,7 +63,7 @@ var gagaInfiniteScroll = {
 	},
 	scrollCheck : function() {
 		var obj = this.obj, stat = this.pageStatus;
-		alert("aaaaa");
+		
 		if ($('[data-id="layer_infinite"]').scrollTop() + $('[data-id="layer_infinite"]').height() >= $('[data-id="layer_infinite_item"]').height() ) { // 더보기
 			if (stat.loadAlign == 'not') {
 				var pageLen = this.pageStatus.pageNum.length - 1;

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

@@ -88,9 +88,10 @@ const _PAGE_NOMEMBER_CRE_LIST = _frontUrl + "/noMember/cre/list/form";				// 비
 //== 검색 ==/
 
 //== 기획전 ==/
-const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 					// 기획전 메인
-const _PAGE_PLANNING_DETAIL = _frontUrl + "/planning/detail/form";				// 기획전 상세
-const _PAGE_PLANNING_CPN_DOWNLOAD = "/planning/coupon/download";			    // 상품쿠폰다운로드
+const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 					      // 기획전 메인
+const _PAGE_PLANNING_DETAIL = _frontUrl + "/planning/detail/form";				      // 기획전 상세
+const _PAGE_PLANNING_CPN_DOWNLOAD = "/planning/coupon/download";			          // 상품쿠폰다운로드
+const _PAGE_PLANNING_REPLY_DETAIL_LAYER = _frontUrl + "/planning/reply/detail/layer"; // 상품평- 상세(포토)
 
 //== 핫딜==/
 const _PAGE_SOCIAL_MAIN = _frontUrl + "/social/main/form";						// 소설(핫딜) 메인
@@ -663,6 +664,28 @@ function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq) {
 	cfnOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
 }
 
+/**
+* @type   : function
+* @access : public
+* @desc   : 댓글 이미지 팝업
+* <pre>
+*		cfPlanReplyDetail(planSq, planEntrySq, planEntryAtSq);
+* </pre>
+*/
+function cfPlanReplyDetail(planSq, planEntrySq, planEntryAtSq) {
+	var str = '<div class="modal pop_full photo_comment_popup" id="photo_full_popup" tabindex="-1" role="dialog" aria-labelledby="comment_popup" aria-hidden="true">';
+
+	if ($('#layer_review_best').length == 0) {
+		$('body').append(str);
+	}
+	
+	var params = '?planSq=' + planSq;
+	params += '&planEntrySq=' + planEntrySq;
+	if (typeof (planEntryAtSq) != 'undefined') params += "&planEntryAtSq=" + planEntryAtSq;
+	
+	cfnOpenLayer(_PAGE_PLANNING_REPLY_DETAIL_LAYER+params, 'photo_full_popup');
+}
+
 /**
 * @type   : function
 * @access : public
@@ -852,7 +875,12 @@ function cfGoodsReview(goodsCd) {
  * </pre>
  */
 function cfnConsentUseInfo(custNm) {
-	let str = '<div class="modal fade mbAgree_pop" id="layer_consent_useinfo" tabIndex="-1" role="dialog" aria-labelledby="mbAgreeLabel" aria-hidden="true"></div>';
+	let str;
+	if (_frontGb === 'P') {
+		str = '<div class="modal fade mbAgree_pop" id="layer_consent_useinfo" tabIndex="-1" role="dialog" aria-labelledby="mbAgreeLabel" aria-hidden="true"></div>';
+	} else {
+		str = '<div class="modal pop_full mbAgree_pop" id="layer_consent_useinfo" tabindex="-1" role="dialog" aria-labelledby="mbAgreeLabel" aria-hidden="true"></div>'
+	}
 	let params = {}
 	params.custNm = custNm;
 	if ($('#layer_consent_useinfo').length == 0) {
@@ -916,7 +944,7 @@ function cfnUseTermsLayer() {
  *		cfnPrivacyPolicyLayer();
  * </pre>
  */
-function cfnPrivacyPolicyLayer() {
+function cfnPrivacyPolicyLayer(mallGb) {
 	let str;
 	if (_frontGb === 'P') {
 		str = '<div class="modal fade policiesPrivacy_pop" id="policiesPrivacyPop" tabindex="-1" role="dialog" aria-labelledby="policiesPrivacyLabel" aria-hidden="true"></div>';
@@ -926,7 +954,9 @@ function cfnPrivacyPolicyLayer() {
 	if ($('#policiesPrivacyPop').length == 0) {
 		$('body').append(str);
 	}
-	cfnOpenLayer(_PAGE_PRIVACY_POLICY_LAYER, 'policiesPrivacyPop');
+	let params = {}
+	params.mallGb = mallGb;
+	cfnOpenLayer(_PAGE_PRIVACY_POLICY_LAYER, 'policiesPrivacyPop', params);
 }
 
 /**

Някои файлове не бяха показани, защото твърде много файлове са промени