Ver Fonte

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

card007 há 5 anos atrás
pai
commit
b0d892230c
52 ficheiros alterados com 1840 adições e 2968 exclusões
  1. 16 0
      src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java
  2. 47 0
      src/main/java/com/style24/front/biz/dao/TsfKollusDao.java
  3. 10 2
      src/main/java/com/style24/front/biz/service/TsfGiftcardService.java
  4. 59 0
      src/main/java/com/style24/front/biz/service/TsfKollusService.java
  5. 1 1
      src/main/java/com/style24/front/biz/web/TsfCallcenterController.java
  6. 16 6
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  7. 1 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  8. 2 1
      src/main/java/com/style24/front/biz/web/TsfIndexController.java
  9. 71 0
      src/main/java/com/style24/front/biz/web/TsfKollusUploadController.java
  10. 1 1
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  11. 1 0
      src/main/java/com/style24/persistence/domain/Goods.java
  12. 22 0
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  13. 1 0
      src/main/java/com/style24/persistence/domain/Plan.java
  14. 1 1
      src/main/java/com/style24/persistence/domain/Review.java
  15. 36 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  16. 38 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  17. 3 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  18. 47 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfKollus.xml
  19. 5 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  20. 3 3
      src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html
  21. 95 0
      src/main/webapp/WEB-INF/views/mob/customer/JoinCompleteFormMob.html
  22. 178 125
      src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html
  23. 3 3
      src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html
  24. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceCallbackFormMob.html
  25. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceCellPhoneFormMob.html
  26. 3 3
      src/main/webapp/WEB-INF/views/mob/goods/CardPrmtFormMob.html
  27. 1 2019
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  28. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html
  29. 16 14
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  30. 31 52
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  31. 274 33
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  32. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html
  33. 2 2
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html
  34. 17 5
      src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html
  35. 220 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypagePointFormMob.html
  36. 1 1
      src/main/webapp/WEB-INF/views/web/SnsCallBackFormWeb.html
  37. 220 204
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  38. 3 3
      src/main/webapp/WEB-INF/views/web/goods/CardPrmtFormWeb.html
  39. 7 6
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  40. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailDeliveryFormWeb.html
  41. 47 30
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  42. 4 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  43. 3 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  44. 13 19
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  45. 1 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaDetailFormWeb.html
  46. 14 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  47. 0 281
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html
  48. 169 127
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html
  49. 24 4
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  50. 97 1
      src/main/webapp/biz/goods.js
  51. 5 3
      src/main/webapp/ux/pc/css/layout.css
  52. 6 4
      src/main/webapp/ux/style24_link.js

+ 16 - 0
src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java

@@ -68,5 +68,21 @@ public interface TsfGiftcardDao {
 	 */
 	 Collection<GiftCard> getRecentlyDate();
 	 
+	 /**
+	 * 상품권 CUST_GFCD_SQ
+	 *
+	 * @param 
+	 * @author sowon
+	 * @since 2021. 4. 19
+	 */
+	 int getCustGiftCardSq(String gfcdNo);
 	 
+	 /**
+	 * 상품권 hst insert
+	 *
+	 * @param 
+	 * @author sowon
+	 * @since 2021. 4. 19
+	 */
+	 void createCustGiftcardHistory(GiftCard giftcard);
 }

+ 47 - 0
src/main/java/com/style24/front/biz/dao/TsfKollusDao.java

@@ -0,0 +1,47 @@
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.KollusResult;
+
+/**
+ * 카테노이드 Kollus 동영상업로드 결과 Dao
+ *
+ * @author gagamel
+ * @since 2021. 4. 19
+ */
+@ShopDs
+public interface TsfKollusDao {
+
+	/**
+	 * 카테노이드 Kollus 상품동영상 업로드 결과 처리
+	 * @param result - 업로드결과 정보
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	void updateGoodsVideo(KollusResult result);
+
+	/**
+	 * 카테노이드 Kollus 리뷰동영상 업로드 결과 처리
+	 * @param result - 업로드결과 정보
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	void updateReviewVideo(KollusResult result);
+
+	/**
+	 * 카테노이드 Kollus 전시동영상 업로드 결과 처리
+	 * @param result - 업로드결과 정보
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	void updateDisplayVideoPreview(KollusResult result);
+
+	/**
+	 * 카테노이드 Kollus 전시동영상 업로드 결과 처리
+	 * @param result - 업로드결과 정보
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	void updateDisplayVideo(KollusResult result);
+
+}

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

@@ -132,8 +132,16 @@ public class TsfGiftcardService {
 			giftcard.setRmGfcdAmt(Integer.parseInt(param[1])); // 승인금액
 			giftcard.setUseStDate(param2[0]);
 			giftcard.setUseExpDate(param3[0]);
-			
 			giftcardDao.getGiftcardUseConfirm(giftcard);
+			
+			int custGfcdSq = giftcardDao.getCustGiftCardSq(pubNo);
+			giftcard.setCustGfcdSq(custGfcdSq);
+			giftcard.setOccurGb("G074_11");
+			giftcard.setOccurDtlDesc("상품권등록");
+			giftcard.setGfcdAmt(Integer.parseInt(param[1]));
+			
+			giftcardDao.createCustGiftcardHistory(giftcard);
+			
 		}
 
 	}
@@ -148,5 +156,5 @@ public class TsfGiftcardService {
 	 public Collection<GiftCard> getRecentlyDate(){
 		 return giftcardDao.getRecentlyDate();
 	 }
-
+	 
 }

+ 59 - 0
src/main/java/com/style24/front/biz/service/TsfKollusService.java

@@ -0,0 +1,59 @@
+package com.style24.front.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.front.biz.dao.TsfKollusDao;
+import com.style24.persistence.domain.KollusResult;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 카테노이드 Kollus 동영상업로드 결과 Service
+ *
+ * @author gagamel
+ * @since 2021. 4. 19
+ */
+@Service
+@Slf4j
+public class TsfKollusService {
+
+	@Autowired
+	private TsfKollusDao kollusDao;
+
+	/**
+	 * 카테노이드 Kollus 상품동영상 업로드 결과 처리
+	 * @param goods
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	@Transactional("shopTxnManager")
+	public void updateGoodsVideoResult(KollusResult result) {
+		kollusDao.updateGoodsVideo(result);
+	}
+
+	/**
+	 * 카테노이드 Kollus 리뷰동영상 업로드 결과 처리
+	 * @param result - 업로드결과 정보
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	@Transactional("shopTxnManager")
+	public void updateReviewVideoResult(KollusResult result) {
+		kollusDao.updateReviewVideo(result);
+	}
+
+	/**
+	 * 카테노이드 Kollus 전시동영상 업로드 결과 처리
+	 * @param result - 업로드결과 정보
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	@Transactional("shopTxnManager")
+	public void updateDisplayVideoResult(KollusResult result) {
+		kollusDao.updateDisplayVideoPreview(result);
+		kollusDao.updateDisplayVideo(result);
+	}
+
+}

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

@@ -326,7 +326,7 @@ public class TsfCallcenterController extends TsfBaseController {
 	public GagaResponse createGoodsQna(@RequestBody Counsel counsel) {
 		log.info("createGoodsQna counsel = {}", counsel);
 		counselService.createGoodsQna(counsel);
-		return super.ok(message.getMessage("SUCC_0001"));
+		return super.ok("상품 문의가 등록되었습니다. 빠른 시일 내에 답변드리겠습니다.");
 	}
 
 	/**

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

@@ -324,7 +324,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 03. 02
 	 */
 	@GetMapping("/join/type/form")
-	public ModelAndView getJoinWayForm() {
+	public ModelAndView getJoinTypeForm() {
 		ModelAndView mav = new ModelAndView();
 
 		mav.setViewName(super.getDeviceViewName("customer/JoinTypeForm"));
@@ -339,10 +339,17 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @author jsshin
 	 * @since 2021. 02. 05
 	 */
-	@GetMapping("/join/form")
-	public ModelAndView getJoinForm() {
+	@RequestMapping("/join/form")
+	public ModelAndView getJoinForm(@RequestParam(value = "sEncData", required = false) String sEncData
+			, @RequestParam(value = "authMethod", required = false) String authMethod
+			, @RequestParam(value = "custParams", required = false) String custParams) {
+
 		ModelAndView mav = new ModelAndView();
 
+		mav.addObject("sEncData", sEncData);
+		mav.addObject("authMethod", authMethod);
+		mav.addObject("custParams", custParams);
+
 		mav.setViewName(super.getDeviceViewName("customer/JoinForm"));
 
 		return mav;
@@ -351,19 +358,20 @@ public class TsfCustomerController extends TsfBaseController {
 	/**
 	 * 휴대폰 인증 화면
 	 * @param redirectUrl - 모바일사용
-	 * @param custparams - 회원정보 수정시 사용
+	 * @param custParams - 회원정보 수정시 사용
 	 * @return ModelAndView
 	 * @author jsshin
 	 * @since 2021. 02. 09
 	 */
 	@GetMapping("/nice/cellphone/form")
 	public ModelAndView niceCellphoneForm(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
-			, @RequestParam(value = "custparams", required = false) String custparams) {
+			, @RequestParam(value = "custParams", required = false) String custParams) {
 		ModelAndView mav = new ModelAndView();
 		GagaMap result = niceCertify.certifyCellPhone();
 
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 			mav.addObject("redirectUrl", redirectUrl); // 모바일만 사용
+			mav.addObject("custParams", custParams); // 모바일만 사용
 		}
 
 		mav.addObject("sEncData", result.getString("sEncData"));
@@ -405,7 +413,8 @@ public class TsfCustomerController extends TsfBaseController {
 	@RequestMapping("/nice/certify/callback")
 	public ModelAndView niceCertifyCallback(@RequestParam(value = "EncodeData", required = false) String encodeData
 			, @RequestParam(value = "enc_data", required = false) String encData
-			, @RequestParam(value = "param_r1", required = false) String redirectUrl) {
+			, @RequestParam(value = "param_r1", required = false) String redirectUrl
+			, @RequestParam(value = "param_r2", required = false) String custParams) {
 
 		ModelAndView mav = new ModelAndView();
 		String sEncData = "";
@@ -421,6 +430,7 @@ public class TsfCustomerController extends TsfBaseController {
 
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 			mav.addObject("redirectUrl", redirectUrl);
+			mav.addObject("custParams", custParams);
 		}
 
 		mav.addObject("sEncData", sEncData);

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

@@ -259,7 +259,7 @@ public class TsfGoodsController extends TsfBaseController {
 			}
 			
 		}
-
+		
 		// 상품 문의건수
 		Counsel counsel = new Counsel();
 		counsel.setRelGoodsCd(goods.getGoodsCd());

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

@@ -353,7 +353,8 @@ public class TsfIndexController extends TsfBaseController {
 	 * @since 2021. 02. 23
 	 */
 	@RequestMapping( "/signin/yes24LoginCallback")
-	public ModelAndView yes24LoginCallback(@RequestParam(value = "ipin", required = false) String ipin, @RequestParam(value = "ipn", required = false) String ipn, HttpSession session) {
+	public ModelAndView yes24LoginCallback(@RequestParam(value = "ipin", required = false) String ipin
+			, @RequestParam(value = "ipn", required = false) String ipn, HttpSession session) {
 		ModelAndView mav = new ModelAndView();
 		boolean isSnsLoing = false;
 		GagaMap userInfo = new GagaMap();

+ 71 - 0
src/main/java/com/style24/front/biz/web/TsfKollusUploadController.java

@@ -0,0 +1,71 @@
+package com.style24.front.biz.web;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import com.style24.front.biz.service.TsfKollusService;
+import com.style24.front.support.controller.TsfBaseController;
+import com.style24.persistence.domain.KollusResult;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Kollus Upload Controller (카테노이드 동영상 업로드)
+ *
+ * @author gagamel
+ * @since 2021. 4. 16
+ */
+@Controller
+@RequestMapping("/kollus")
+@Slf4j
+public class TsfKollusUploadController extends TsfBaseController {
+
+	@Autowired
+	private TsfKollusService kollusService;
+
+	/**
+	 * 상품 동영상 업로드 결과
+	 * @author gagamel
+	 * @since 2021. 4. 16
+	 */
+	@GetMapping("/goods/upload/result")
+	public void updateGoodsVideoResult(KollusResult result) {
+		log.info("{}", result);
+
+		if (StringUtils.isNotBlank(result.getMedia_content_key()) && StringUtils.isNotBlank(result.getUpload_file_key())) {
+			kollusService.updateGoodsVideoResult(result);
+		}
+	}
+
+	/**
+	 * 리뷰 동영상 업로드 결과
+	 * @author gagamel
+	 * @since 2021. 4. 16
+	 */
+	@GetMapping("/review/upload/result")
+	public void updateReviewVideoResult(KollusResult result) {
+		log.info("{}", result);
+
+		if (StringUtils.isNotBlank(result.getMedia_content_key()) && StringUtils.isNotBlank(result.getUpload_file_key())) {
+			kollusService.updateReviewVideoResult(result);
+		}
+	}
+
+	/**
+	 * 전시 동영상 업로드 결과
+	 * @author gagamel
+	 * @since 2021. 4. 16
+	 */
+	@GetMapping("/display/upload/result")
+	public void updateDisplayVideoResult(KollusResult result) {
+		log.info("{}", result);
+
+		if (StringUtils.isNotBlank(result.getMedia_content_key()) && StringUtils.isNotBlank(result.getUpload_file_key())) {
+			kollusService.updateDisplayVideoResult(result);
+		}
+	}
+
+}

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

@@ -1019,7 +1019,7 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("usePointList", pointService.getUsePointList(point));
 		// 최근 12개월
 		mav.addObject("date", pointService.getRecentlyDate());
-		mav.setViewName(super.getDeviceViewName("mypage/MypagePointForm2"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypagePointForm"));
 		return mav;
 	}
 

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

@@ -150,6 +150,7 @@ public class Goods extends TscBaseDomain {
 	private String goodsStatNm;
 	private String regDtMonth;
 	
+	private int goodsQnaCnt;	// 상품문의건수
 
 	private String sizeGb;		// 사이즈구분(T:상의, B:하의, S:신발)
 	private String optionSoldoutSkip; 	//품절제외 Y, N

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
@@ -66,4 +67,25 @@ public class GoodsSearch extends TscBaseDomain {
 
     private String contentsLoc;
     private int maxRow;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] brandSearch;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] sizeSearch;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] priceSearch;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] dcrateSearch;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] seasonSearch;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] colorSearch;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] benefitSearch;
 }

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

@@ -181,6 +181,7 @@ public class Plan extends TscBaseDomain {
 	private String itemVal;				//아이템값(상품코드, 이미지파일명 등)
 	private String reviewDispStdt;		//리뷰노출시작일시
 	private String reviewDispEddt;		//리뷰노툴종료일시
+	private String linkOpenGb;			//링크 본창 새창
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiPlanReview;		//리뷰상품목록

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

@@ -28,7 +28,7 @@ public class Review extends TscBaseDomain {
 	private Integer ordDtlNo;		// 주문상세번호
 	private String reviewTitle;		// 상품평제목
 	private String reviewContent;	// 상품평내용
-	private float score;			// 구매평점
+	private String score;			// 구매평점
 	private int height;				// 키
 	private int weight;				// 몸무게
 	private String scoreSize;		// 사이즈점수(공통코드G040)

+ 36 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -698,8 +698,43 @@
 		  AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
 		  AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
 		  AND S.STOCK_QTY > 0 /*재고있는상품*/
+		<include refid="getCategoryGoodsList_sql"/>
 	</select>
 
+	<!-- 카테고리 상품별  목록 필터 조건 -->
+	<sql id="getCategoryGoodsList_sql">
+		<if test='brandSearch != null and brandSearch.length > 0'>
+		     AND EXISTS ( SELECT 1 FROM TB_BRAND
+		     WHERE BRAND_CD = G.BRAND_CD
+		     AND BRAND_GROUP_NO IN
+		     <foreach collection="brandSearch" item="item" index="index" open="(" close=")" separator=",">
+		        #{item}
+		     </foreach>
+		     )
+		</if>
+		<if test='sizeSearch != null and sizeSearch.length > 0'>
+		     AND G.GOODS_CD IN (
+		          SELECT GOODS_CD
+		          FROM VW_STOCK
+		          WHERE OPT_CD2 IN
+		     <foreach collection="sizeSearch" item="item" index="index"  open="(" close=")" separator=",">
+		         #{item}
+		     </foreach>
+		     )
+		</if>
+		<if test='colorSearch != null and colorSearch.length > 0'>
+		     AND G.MAIN_COLOR_CD IN (
+		          SELECT OPT_CD1
+		          FROM TB_OPTION
+		          WHERE GOODS_CD = G.GOODS_CD
+		          AND  OPT_CD1 IN
+		     <foreach collection="colorSearch" item="item" index="index"  open="(" close=")" separator=",">
+		     	#{item}
+		     </foreach>
+		     )
+		</if>
+	</sql>
+
 	<!-- 카테고리별 상품 총 리스트 -->
 	<select id="getCategoryGoodsList" parameterType="GoodsSearch" resultType="Goods">
 		/* TsfDisplay.getCategoryGoodsList */
@@ -784,6 +819,7 @@
 		          AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
 		          AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
 		          AND S.STOCK_QTY > 0 /*재고있는상품*/
+		          <include refid="getCategoryGoodsList_sql"/>
 		          <if test="contentsLoc == 'SBM013'">
 		          GROUP BY G.GOODS_CD
 		          </if>

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

@@ -14,7 +14,7 @@
 		      ,(SELECT SUM(CG3.RM_GFCD_AMT)
 				FROM TB_CUST_GIFTCARD CG3
 				WHERE DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN CG3.USE_ST_DATE AND CG3.USE_EXP_DATE
-				  AND  DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN DATE_ADD(CG3.USE_EXP_DATE, INTERVAL -1 MONTH) AND USE_EXP_DATE
+				  AND  NOW() BETWEEN DATE_ADD(DATE_FORMAT(CG3.USE_EXP_DATE,'%Y-%m-%d'), INTERVAL -30 DAY) AND USE_EXP_DATE
 				  AND CUST_NO = #{custNo}
 				  AND CG3.RM_GFCD_AMT > 0 ) AS EXPIRE_COUNT  /*한달 이내 소멸*/
 		FROM TB_CUST_GIFTCARD CG 
@@ -135,6 +135,7 @@
 	</insert>
 	
 	<select id="getRecentlyDate" resultType="GiftCard">
+		/*TsfGiftcard.getRecentlyDate*/  
 		SELECT A.*
 		FROM
 		    (		
@@ -164,6 +165,42 @@
 		    )A	
 	</select>
 	
+	<select id="getCustGiftCardSq" parameterType="GiftCard" resultType="int">
+		/*TsfGiftcard.getCustGiftCardSq*/  
+		SELECT CUST_GFCD_SQ 
+		FROM TB_CUST_GIFTCARD 
+		WHERE GFCD_NO = #{gfcdNo}
+	</select>
+	
+	<insert id="createCustGiftcardHistory"  parameterType="GiftCard" >
+		/* TsfGiftcard.createCustGiftcardHistorys */
+		INSERT INTO TB_CUST_GIFTCARD_HST ( 
+		      CUST_NO
+		    , OCCUR_GB
+		    , OCCUR_DTL_DESC
+		    , GFCD_AMT
+		    , CUST_GFCD_SQ
+		    , ORD_NO
+		    , ORD_DTL_NO
+		    , REG_NO
+		    , REG_DT
+		    , UPD_NO
+		    , UPD_DT
+		) VALUES (
+		      #{custNo}
+		    , #{occurGb}
+		    , #{occurDtlDesc}
+		    , #{gfcdAmt}
+		    , #{custGfcdSq}
+		    , #{ordNo}
+		    , #{ordDtlNo}
+		    , #{custNo}
+		    , NOW()
+		    , #{custNo}
+		    , NOW()
+		)	
+	</insert>
+	
 	<!-- 페이징을 위한 select절 상단 -->
 	<sql id="selectForPagingHeader">
 		SELECT *

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

@@ -454,8 +454,11 @@
 		        WHERE GOODS_CD = G.GOODS_CD
 		        GROUP BY GOODS_CD 
 		        ) AS STOCK_QTY
+		     , GS.REVIEW_REG_CNT
+		     , GS.GOODS_QNA_CNT
 		FROM TB_GOODS_COMPOSE C
 		INNER JOIN TB_GOODS G ON C.COMPS_GOODS_CD = G.GOODS_CD
+		INNER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		                      AND B.USE_YN = 'Y'
 		INNER JOIN TB_SITE_BRAND SB ON B.BRAND_CD = SB.BRAND_CD

+ 47 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfKollus.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.front.biz.dao.TsfKollusDao">
+
+	<!-- 카테노이드 Kollus 상품동영상 업로드 결과 처리 -->
+	<update id="updateGoodsVideo" parameterType="KollusResult">
+		/* TsfKollus.updateGoodsVideo */
+		UPDATE TB_GOODS_VIDEO
+		SET    KMC_KEY = #{media_content_key}
+		     , UPD_NO = 0
+		     , UPD_DT = NOW()
+		WHERE  KUF_KEY = #{upload_file_key}
+	</update>
+	
+	<!-- 카테노이드 Kollus 리뷰동영상 업로드 결과 처리 -->
+	<update id="updateReviewVideo" parameterType="KollusResult">
+		/* TsfKollus.updateReviewVideo */
+		UPDATE TB_REVIEW_ATTACH
+		SET    KMC_KEY = #{media_content_key}
+		     , UPD_NO = 0
+		     , UPD_DT = NOW()
+		WHERE  KUF_KEY = #{upload_file_key}
+	</update>
+	
+	<!-- 카테노이드 Kollus 전시동영상 업로드 결과 처리 -->
+	<update id="updateDisplayVideoPreview" parameterType="KollusResult">
+		/* TsfKollus.updateDisplayVideoPreview */
+		UPDATE TB_CONTENTS_PREVIEW
+		SET    STR_VAR3 = #{media_content_key}
+		     , UPD_NO = 0
+		     , UPD_DT = NOW()
+		WHERE  STR_VAR1 = 'M' /*MP4*/
+		AND    STR_VAR2 = #{upload_file_key}
+	</update>
+	
+	<!-- 카테노이드 Kollus 전시동영상 업로드 결과 처리 -->
+	<update id="updateDisplayVideo" parameterType="KollusResult">
+		/* TsfKollus.updateDisplayVideo */
+		UPDATE TB_CONTENTS
+		SET    STR_VAR3 = #{media_content_key}
+		     , UPD_NO = 0
+		     , UPD_DT = NOW()
+		WHERE  STR_VAR1 = 'M' /*MP4*/
+		AND    STR_VAR2 = #{upload_file_key}
+	</update>
+	
+</mapper>

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

@@ -436,6 +436,7 @@
 		     , PLAN_CONT_SQ
 		     ,TITLE 
 		     ,LINK_URL
+		     ,LINK_OPEN_GB
 		     ,NOTE 
 		     ,DISP_YN 
 		FROM TB_PLAN_CONTENTS TPC 
@@ -667,11 +668,12 @@
 		      ,PC.PLAN_SQ
 		      ,PC.TMPL_TYPE
 		      ,PC.TITLE
-		      ,PC.LINK_URL
 		      ,PC.DISP_YN
 		      ,PC.DISP_ORD
 		      ,PCI.PLAN_CONT_ITEM_SQ
 		      ,PCI.ITEM_VAL
+		      ,PCI.LINK_URL
+		      ,PCI.LINK_OPEN_GB
 		      ,PCI.DISP_ORD
 		      ,PCI.REVIEW_DISP_STDT
 		      ,PCI.REVIEW_DISP_EDDT
@@ -692,6 +694,7 @@
 		WITH TAB_PLAN_GOODS AS (
 		    SELECT P.PLAN_SQ                                                /*기획전번호*/
 		         , PC.LINK_URL 
+		         , PC.LINK_OPEN_GB
 		         , PC.DISP_ORD 
 		         , PC.TITLE 
 		         , PC.TMPL_TYPE 
@@ -764,6 +767,7 @@
 		     , PG.TITLE
 		     , PG.TMPL_TYPE
 		     , PG.LINK_URL
+		     , PG.LINK_OPEN_GB
 		     , PG.ITEM_VAL
 		     , PG.PLAN_CONT_SQ
 		     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/

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

@@ -3,15 +3,15 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : SigninFormWeb.html
- * @desc    : 로그인 Page
+ * @source  : SnsCallBackFormMob.html
+ * @desc    : SNS 콜백 화면 Page
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021.02.15   gagamel     최초 작성
+ * 1.0  2021.02.15   jsshin     최초 작성
  *******************************************************************************
  -->
 <head th:replace="~{mob/common/fragments/HeadMob :: head}"></head>

+ 95 - 0
src/main/webapp/WEB-INF/views/mob/customer/JoinCompleteFormMob.html

@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/LoginLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : JoinCompleteFormMob.html
+ * @desc    : 회원 가입완료 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.19   jsshin     최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+	<main class="container mb">
+		<section th:if="${maskingCustId != ''}" class="content mb_join_3">
+			<div class="inner">
+				<div class="close">
+					<a href="javascript:void(0)" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+				</div>
+			</div>
+			<div class="inner">
+				<h2 class="title">회원가입</h2>
+			</div>
+			<div class="inner">
+				<form class="form_wrap form_full" role="form">
+					<div class="form_head">
+						<h3 class="title sr-only">회원가입</h3>
+					</div>
+					<div class="form_info">
+						<span class="ico_content_find"></span>
+						<p>이미 가입된 아이디가 있습니다.</p>
+						<p class="t_info mt15">
+							아래의 아이디로 로그인 하시거나<br>
+							잊으신 경우 ID 찾기를 통해 이용 가능합니다.
+						</p>
+					</div>
+					<div class="print_bar mt30">
+						<p class="c_primary bold" data-font="lato" th:text="${maskingCustId}"></p>
+					</div>
+					<!-- 210415_수정 : 버튼 형식 변경. -->
+					<div class="btn_group_flex btn_group_md">
+						<div>
+							<button id="btn_login" class="btn btn_dark" onclick="cfnGoToPage(_PAGE_LOGIN);">
+								<span>로그인</span>
+							</button>
+						</div>
+						<div>
+							<button id="btn_id_find" class="btn btn_default" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
+								<span>아이디 찾기</span>
+							</button>
+						</div>
+					</div>
+					<!-- //210415_수정 : 버튼 형식 변경. -->
+				</form>
+			</div>
+		</section>
+		<!-- ★ 컨텐츠 시작 -->
+		<section th:unless="${maskingCustId != ''}" class="content mb_join_1">
+			<div class="inner">
+				<div class="close">
+					<a href="javascript:void(0)" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+				</div>
+			</div>
+			<div class="inner">
+				<h2 class="title">신규회원 혜택 안내</h2>
+			</div>
+			<div class="inner">
+				<form class="form_wrap form_full" role="form">
+					<div class="form_head">
+						<h3 class="title sr-only">신규회원 혜택 안내</h3>
+					</div>
+					<img src="/images/mo/img_mb_join_done.jpg" width="100%" alt="신규회원 혜택안내 내용">
+					<div class="btn_group_flex">
+						<div>
+							<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_MAIN);">
+								<span>쇼핑하러 가기</span>
+							</button>
+						</div>
+					</div>
+				</form>
+			</div>
+		</section>
+		<!-- ★ 컨텐츠 종료 -->
+	</main>
+</th:block>
+</body>
+</html>

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

@@ -34,122 +34,92 @@
 			<h2 class="title">회원정보 입력</h2>
 		</div>
 		<div class="inner">
-
-			   <form class="form_wrap form_full" role="form">
-					<div class="form_head">
-						<h2 class="title sr-only">회원정보 입력</h2>
+			<form id="joinForm" name="joinForm" class="form_wrap form_full" role="form">
+				<div class="form_head">
+					<h2 class="title sr-only">회원정보 입력</h2>
+				</div>
+				<!-- 아이디 사용가능시 -->
+				<div class="form_field">
+					<label class="input_label sr-only">아이디</label>
+					<div class="input_wrap form_full">
+						<input type="text" id="custId" name="custId" placeholder="아이디" class="form_control" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디" minlength="4" maxlength="12"/>
+						<span class="usable" style="display:block;"></span>
 					</div>
-					<!-- 아이디 사용가능시 -->
-					<div class="form_field">
-						<label class="input_label sr-only">아이디</label>
-						<div class="input_wrap form_full">
-							<input type="text" id="custId" name="custId" placeholder="아이디" class="form_control" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디" minlength="4" maxlength="12"/>
-							<span class="usable" style="display:block;"></span>
-						</div>
-						<div id="dupCustIdDiv" class="help_block hide">
-							<p class="t_err">이미 가입된 아이디입니다.다른 아이디를 입력하여 주세요.</p>
-						</div>
+					<div id="dupCustIdDiv" class="help_block hide">
+						<p class="t_err">이미 가입된 아이디입니다.다른 아이디를 입력하여 주세요.</p>
 					</div>
-					<!-- //아이디 사용가능시 -->
-					<!-- 오류시 부모 div에서 제어 -->
-					<div class="form_field">
-						<label class="input_label sr-only">비밀번호</label>
-						<div class="input_wrap form_full">
-							<input type="password" id="passwd" name="passwd" placeholder="비밀번호 (8~20자 영문, 숫자, 특수문자 중 2가지 이상 조합)" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
-							<!-- case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
-							<div class="help_block">
-								<!-- 사용불가 비밀번호일경우 -->
-								<p class="mt10">
-									<span id="firstFailed" class="c_gray">
-										<i class="ico ico_check gray mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br>
-									</span>
-									<span id="secondFailed" class="c_gray">
-										<i class="ico ico_check gray mr5"></i>4개이상 연속되거나 동일한 문자/숫자 제외<br>
-									</span>
-									<span id="thirdFailed" class="c_gray">
-										<i class="ico ico_check gray mr5"></i>아이디 제외
-									</span>
-								</p>
-								<!-- //사용불가 비밀번호일경우 -->
-								<!-- 사용가능한 비밀번호일경우 -->
-								<p id="avlPwd" class="mt10 hide">
-									<span class="c_black2">
-										<i class="ico ico_check black mr5"></i>사용 가능한 비밀번호입니다
-									</span>
-								</p>
-								<!-- //사용가능한 비밀번호일경우 -->
-							</div>
-							<!-- //case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
-						</div>
-					</div>
-					<!-- //오류시 부모 div에서 제어 -->
-					<div class="form_field">
-						<label class="input_label sr-only">비밀번호 확인</label>
-						<div class="input_wrap form_full">
-							<input type="password" id="confirmPassword" name="confirmPassword" placeholder="비밀번호 확인" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
-							<!-- case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
-							<div class="help_block">
-								<!-- 비밀번호확인 틀렸을경우 -->
-								<p id="misPwd" class="t_err hide">
-									비밀번호가 일치하지 않습니다.
-								</p>
-								<!-- //비밀번호확인 틀렸을경우 -->
-								<!-- 비밀번호 일치할경우 -->
-								<p id="avlConPwd"  class="mt10 hide">
-									<span class="c_black2">
-										<i class="ico ico_check black mr5"></i>비밀번호가 일치합니다.
-									</span>
-								</p>
-								<!-- //비밀번호 일치할경우 -->
-							</div>
-							<!-- //case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
+				</div>
+				<!-- //아이디 사용가능시 -->
+				<!-- 오류시 부모 div에서 제어 -->
+				<div class="form_field">
+					<label class="input_label sr-only">비밀번호</label>
+					<div class="input_wrap form_full">
+						<input type="password" id="passwd" name="passwd" placeholder="비밀번호 (8~20자 영문, 숫자, 특수문자 중 2가지 이상 조합)" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
+						<!-- case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
+						<div class="help_block">
+							<!-- 사용불가 비밀번호일경우 -->
+							<p class="mt10">
+								<span id="firstFailed" class="c_gray">
+									<i class="ico ico_check gray mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br>
+								</span>
+								<span id="secondFailed" class="c_gray">
+									<i class="ico ico_check gray mr5"></i>4개이상 연속되거나 동일한 문자/숫자 제외<br>
+								</span>
+								<span id="thirdFailed" class="c_gray">
+									<i class="ico ico_check gray mr5"></i>아이디 제외
+								</span>
+							</p>
+							<!-- //사용불가 비밀번호일경우 -->
+							<!-- 사용가능한 비밀번호일경우 -->
+							<p id="avlPwd" class="mt10 hide">
+								<span class="c_black2">
+									<i class="ico ico_check black mr5"></i>사용 가능한 비밀번호입니다
+								</span>
+							</p>
+							<!-- //사용가능한 비밀번호일경우 -->
 						</div>
+						<!-- //case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
 					</div>
-					<div class="form_field">
-						<label class="input_label sr-only">이메일</label>
-						<div class="input_wrap form_full">
-							<input type="text" id="email" name="email" placeholder="이메일" class="form_control" required="required" data-valid-name="이메일" maxlength="30"/><!-- 잘못기입된 경우 class "err" 추가 -->
-							<!-- case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
-							<div class="help_block">
-								<!-- 이메일 형식이 바르지않을경우 -->
-								<p id="failEmail" class="t_err hide">
-									이메일 형식이 올바르지 않습니다.
-								</p>
-								<!-- //이메일 형식이 바르지않을경우 -->
-								<!-- 이미 가입되어있는 이메일인경우 -->
-								<p id="dupEmail" class="t_err hide">
-									이미 가입된 이메일 주소입니다. 다른 이메일 주소를 입력하여 주세요.
-								</p>
-								<div id="dupEmailDiv" class="mt20 hide">
-									<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_LOGIN);">
-										<span>로그인</span>
-									</button>
-									<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
-										<span>아이디 찾기</span>
-									</button>
-								</div>
-								<!-- //이미 가입되어있는 이메일인경우 -->
-							</div>
-							<!-- //case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
+				</div>
+				<!-- //오류시 부모 div에서 제어 -->
+				<div class="form_field">
+					<label class="input_label sr-only">비밀번호 확인</label>
+					<div class="input_wrap form_full">
+						<input type="password" id="confirmPassword" name="confirmPassword" placeholder="비밀번호 확인" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
+						<!-- case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
+						<div class="help_block">
+							<!-- 비밀번호확인 틀렸을경우 -->
+							<p id="misPwd" class="t_err hide">
+								비밀번호가 일치하지 않습니다.
+							</p>
+							<!-- //비밀번호확인 틀렸을경우 -->
+							<!-- 비밀번호 일치할경우 -->
+							<p id="avlConPwd"  class="mt10 hide">
+								<span class="c_black2">
+									<i class="ico ico_check black mr5"></i>비밀번호가 일치합니다.
+								</span>
+							</p>
+							<!-- //비밀번호 일치할경우 -->
 						</div>
+						<!-- //case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
 					</div>
-					<!-- 210415_수정 : 휴대폰 인증 수정 -->
-					<div class="form_field">
-						<label class="input_label sr-only">휴대폰번호</label>
-						<!-- 휴대폰 인증 입력 전 -->
-						<div class="input_wrap form_full">
-							<input type="text" id="cellPhnno" name="cellPhnno" placeholder="휴대폰 인증 해주세요." class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰" readonly="readonly"/>
-							<button type="button" id="btnCellPhoneCertify" class="btn btn_dark btn_hp_certi">
-								<span>본인인증</span>
-							</button>
-						</div>
-						<!-- //휴대폰 인증 입력 전 -->
-
-						<!-- case (휴대폰번호 형식이 맞지 않을경우,이미 가입되어있는 핸드폰번호일경우) -->
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">이메일</label>
+					<div class="input_wrap form_full">
+						<input type="text" id="email" name="email" placeholder="이메일" class="form_control" required="required" data-valid-name="이메일" maxlength="30"/><!-- 잘못기입된 경우 class "err" 추가 -->
+						<!-- case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
 						<div class="help_block">
-							<p id="failPhnno" class="t_err hide">휴대폰번호를 형식에 맞게 정확히 입력해주세요</p>
-							<p id="dupPhnno" class="t_err hide">I***D로 가입된 핸드폰 번호 입니다.</p>
-							<div id="dupPhnnoDiv" class="mt20 hide">
+							<!-- 이메일 형식이 바르지않을경우 -->
+							<p id="failEmail" class="t_err hide">
+								이메일 형식이 올바르지 않습니다.
+							</p>
+							<!-- //이메일 형식이 바르지않을경우 -->
+							<!-- 이미 가입되어있는 이메일인경우 -->
+							<p id="dupEmail" class="t_err hide">
+								이미 가입된 이메일 주소입니다. 다른 이메일 주소를 입력하여 주세요.
+							</p>
+							<div id="dupEmailDiv" class="mt20 hide">
 								<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_LOGIN);">
 									<span>로그인</span>
 								</button>
@@ -157,27 +127,55 @@
 									<span>아이디 찾기</span>
 								</button>
 							</div>
+							<!-- //이미 가입되어있는 이메일인경우 -->
 						</div>
+						<!-- //case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
 					</div>
-					<div class="btn_group_flex">
-						<div>
-							<button type="button" id="btnJoin" class="btn btn_primary btn_block" disabled="disabled">
-								<span>동의하고 가입하기</span>
+				</div>
+				<!-- 210415_수정 : 휴대폰 인증 수정 -->
+				<div class="form_field">
+					<label class="input_label sr-only">휴대폰번호</label>
+					<!-- 휴대폰 인증 입력 전 -->
+					<div class="input_wrap form_full">
+						<input type="text" id="cellPhnno" name="cellPhnno" placeholder="휴대폰 인증 해주세요." class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰" readonly="readonly"/>
+						<button type="button" id="btnCellPhoneCertify" class="btn btn_dark btn_hp_certi">
+							<span>본인인증</span>
+						</button>
+					</div>
+					<!-- //휴대폰 인증 입력 전 -->
+
+					<!-- case (휴대폰번호 형식이 맞지 않을경우,이미 가입되어있는 핸드폰번호일경우) -->
+					<div class="help_block">
+						<p id="failPhnno" class="t_err hide">휴대폰번호를 형식에 맞게 정확히 입력해주세요</p>
+						<p id="dupPhnno" class="t_err hide">I***D로 가입된 핸드폰 번호 입니다.</p>
+						<div id="dupPhnnoDiv" class="mt20 hide">
+							<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_LOGIN);">
+								<span>로그인</span>
+							</button>
+							<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
+								<span>아이디 찾기</span>
 							</button>
 						</div>
 					</div>
-					<!-- //210415_수정 : 버튼 형식 변경. -->
-					<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="cfnPrivacyTrustLayer();">개인정보 취급 위탁<i class="ico ico_blank ml5"></i></a><br>
-							내용을 확인 하였으며,동의합니다.
-						</p>
+				</div>
+				<div class="btn_group_flex">
+					<div>
+						<button type="button" id="btnJoin" class="btn btn_primary btn_block" disabled="disabled">
+							<span>동의하고 가입하기</span>
+						</button>
 					</div>
-				</form>
+				</div>
+				<!-- //210415_수정 : 버튼 형식 변경. -->
+				<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="cfnPrivacyTrustLayer();">개인정보 취급 위탁<i class="ico ico_blank ml5"></i></a><br>
+						내용을 확인 하였으며,동의합니다.
+					</p>
+				</div>
+			</form>
 		</div>
-
 	</section>
 	<!-- ★ 컨텐츠 종료 -->
 </main>
@@ -185,7 +183,11 @@
 <script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
 <script th:inline="javascript">
 	/*<![CDATA[*/
-let custIdCheck = false;
+	const sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
+	const authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
+	let custParams = [[${custParams}]];
+
+	let custIdCheck = false;
 	let passwdCheck = false;
 	let emailCheck = false;
 	let authCheck = false;
@@ -324,6 +326,12 @@ let custIdCheck = false;
 	//	이메일 확인
 	$('#email').on('blur', function () {
 		const $failEmail = $('#failEmail');
+		const $dupEmail = $('#dupEmail');
+		const $dupEmailDiv = $('#dupEmailDiv');
+		$failEmail.hide();
+		$dupEmail.hide();
+		$dupEmailDiv.hide();
+
 		let email = $(this).val();
 		let validation;
 
@@ -363,7 +371,9 @@ let custIdCheck = false;
 
 	//휴대폰 인증
 	$('#btnCellPhoneCertify').on('click', function () {
-		cfnOpenCellphoneCertify();
+		let joinForm = $('#joinForm').serializeObject();
+		let custParams = joinForm.custId +','+ joinForm.passwd +','+ joinForm.confirmPassword +','+ joinForm.email;
+		cfnOpenCellphoneCertify(_PAGE_CUSTOMER_JOIN, custParams);
 	});
 
 	// 나이스 본인인증 후 콜백
@@ -432,6 +442,49 @@ let custIdCheck = false;
 			$btnJoin.attr('disabled', true);
 		}
 	};
+
+	// 본인인증 후 데이터 입력 값 셋팅
+	var fnDataSet = function (custParams) {
+		const $custId = $('#joinForm input[name=custId]');
+		const $passwd = $('#joinForm input[name=passwd]');
+		const $confirmPassword = $('#joinForm input[name=confirmPassword]');
+		const $email = $('#joinForm input[name=email]');
+
+		let arrayParams = custParams.split(',');
+		//[0]아이디/[1]비밀번호/[2]비밀번호확인/[3]이메일
+		let custId = arrayParams[0];
+		let passwd = arrayParams[1];
+		let confirmPassword = arrayParams[2];
+		let email = arrayParams[3];
+
+		// console.log(arrayParams);
+		if (!gagajf.isNull(custId)) {
+			$custId.val(custId);
+			$custId.trigger('blur');
+		}
+		if (!gagajf.isNull(passwd)) {
+			$passwd.val(passwd);
+			$passwd.trigger('blur');
+		}
+		if (!gagajf.isNull(confirmPassword)) {
+			$confirmPassword.val(confirmPassword);
+			$confirmPassword.trigger('blur');
+		}
+		if (!gagajf.isNull(email)) {
+			$email.val(email);
+			$email.trigger('blur');
+		}
+	};
+
+	$(document).ready(function () {
+		if (!gagajf.isNull(custParams)) {
+			fnDataSet(custParams);
+		}
+		if (!gagajf.isNull(sEncData)) {
+			fnNiceCallBack(sEncData, authMethod);
+		}
+	});
+
 	/*]]>*/
 </script>
 </th:block>

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html

@@ -39,12 +39,12 @@
 						<p class="c_primary t_c">STYLE24 회원으로 가입</p>
 						<p class="t_c mt10">신규 가입 시 할인 쿠폰 등<br> 다양한 혜택을 받으실 수 있습니다.</p>
 					</div>
-				   <div class="ui_row mt20">
-					   <button type="button" class="btn btn_primary" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">회원가입</button>
+				   <div class="btn_group_flex">
+					   <button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">동의하고 가입하기</button>
 				   </div>
 				</form>
 				<div class="t_c sns_wrap">
-					<h3 class="sr-only">간편로그인</h3>
+					<h5>간편하게 시작하기</h5>
 					<ul class="login_utill">
 						<li class="lu_kakao">
 							<a href="javascript:void(0);" onclick="cfnLoginKakao();">

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

@@ -18,6 +18,7 @@
 	<form name="niceCallbackForm" id="niceCallbackForm" method="post" th:action="${redirectUrl}">
 		<input type="hidden" name="sEncData" th:value="${sEncData}"/>
 		<input type="hidden" name="authMethod" th:value="${authMethod}"/>
+		<input type="hidden" name="custParams" th:value="${custParams}"/>
 	</form>
 <script th:inline="javascript">
 	/*<![CDATA[*/

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

@@ -20,6 +20,7 @@
 	<input type="hidden" name="m" value="checkplusSerivce" />
 	<input type="hidden" name="EncodeData" th:value="${sEncData}" />
 	<input type="hidden" name="param_r1" th:value="${redirectUrl}"/>
+	<input type="hidden" name="param_r2" th:value="${custParams}"/>
 </form>
 
 <script th:inline="javascript">

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

@@ -77,18 +77,18 @@
 				</th:block>
 				<th:block th:each="cardInfo, status : ${cardInfoList}" >
 				<div class="benefit_blk"  th:if="${cardInfo.prmtGb == 'B' and not #strings.isEmpty(cardInfo.note) and cardInfo.rownum ==  1}">
-					<th:block >
 					<h6>부분 무이자 할부</h6>
 					<th:block th:utext="${#strings.unescapeJava(#strings.escapeJava(cardInfo.note))}"></th:block>
+				</div>
+				</th:block>
+				<div class="benefit_blk" >
 					<div class="info_txt">
 						<ul>
 							<li>무이자할부는 행사기간 동안 실 결제금액 기준으로 가능</li>
 							<li>법인, 체크, 기프트 카드는 부분 무이자 할부 제외</li>
 						</ul>
 					</div>
-					</th:block>
 				</div>
-				</th:block>
 			</div>
 		</div>
 	</div>

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 2019
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html


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

@@ -27,7 +27,7 @@
 				<h3>배송비</h3>
 				<p class="dot">
 					<th:block th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
-					<th:block th:if="${goodsInfo.delvFee > 0}" th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>
+					<th:block th:if="${goodsInfo.delvFee > 0}" th:text="|${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}원|" ></th:block>
 					<th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
 				</p>
 			</div>

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

@@ -724,7 +724,7 @@
 											</div>
 										</div>
 										<div class="form_field"> 
-											<div class="select_custom item_opt2 item_opt2_1" th:classappend="${goodsInfo.goodsCd}"  disabled>
+											<div class="select_custom item_opt2 item_opt2_1" th:classappend="${goodsInfo.goodsCd}"  disabled th:attr="qty=${goodsInfo.minOrdQty}">
 												<div class="combo">
 													<div class="select">선택</div>
 													<ul class="list" th:id="|goodsOpt2${goodsInfo.goodsCd}|" >
@@ -795,10 +795,13 @@
 						<button class="gift">
 							<span><span>선물해보세요!</span></span>
 						</button>
-						<th:block  th:if="${goodsInfo.stockQty > 0}">
+						<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 							<button type="button" class="cart" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 							<button type="button" class="buyNow" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 						</th:block>
+						<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
+						<button class="cantbuying" style="display:block;">SOLD OUT</button>
+						</th:block>
 					</div>
 				</div>
 			</div>
@@ -817,11 +820,11 @@
 					th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">위시리스트</button>
 		</div>
 		<div class="prd_buy">
-			<th:block  th:if="${goodsInfo.stockQty > 0}">
+			<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 			<button type="button" class="buying btPop_auto">구매하기</button>
 			</th:block>
-			<th:block  th:unless="${goodsInfo.stockQty > 0}">
-			<button type="button" class="cantbuying">SOLD OUT</button>
+			<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
+			<button type="button" class="cantbuying" style="display:block;">SOLD OUT</button>
 			</th:block>
 		</div>
 	</div>
@@ -1242,7 +1245,7 @@
 			if (result.dataList != null && result.dataList.length > 0) {
 				let tag = "";
 				let $obj = null;
-				
+				let qty = 0; // 구성수량
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_1');	
@@ -1255,13 +1258,12 @@
 					}else{
 						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_5');
 					}
-					
+					qty = $obj.parent().parent().find('.select_custom').attr('qty'); // 구성수량
 				}else{
 					$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_1');
+					qty = $obj.attr('qty'); // 구성수량
 				}	
 				
-				let qty = $obj.parent().parent().find('.select_custom').attr('qty'); // 구성수량
-				
 				$.each(result.dataList, function(idx, item) {
 					if (idx == 0){
 						//$obj = $('#goodsOpt2'+item.goodsCd);
@@ -1333,7 +1335,7 @@
 		let maxOrdQty = 0;
 		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 			minOrdQty = parseInt($("#cartForm  input[name=minOrdQty]").val());
@@ -1371,7 +1373,7 @@
 		let maxOrdQty = parseInt($("#cartForm  input[name=maxOrdQty]").val());
 		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 		}else{
@@ -1384,12 +1386,12 @@
 		let alertMsg = '';
 		
 		if (ea < minOrdQty) {
-			alertMsg ="최소 주문 가능 수량은 "+minOrdQty+"개 입니다.";
+			alertMsg = minOrdQty+"개 부터 구매 가능합니다.";;
 			ea = minOrdQty;
 		}
 
 		if (ea > maxOrdQty) {
-			alertMsg = "최대 주문 가능 수량은 "+maxOrdQty+"개 입니다.";
+			alertMsg = maxOrdQty+"개 까지만 구매 가능합니다.";
 			ea = maxOrdQty;
 		}
 		
@@ -1472,7 +1474,7 @@
 
 		if (goodsType == 'G056_N' && selfGoodsYn == 'Y' ){
 			if (gagajf.isNull($("#cartForm  input[name=optCd2]").val())) {
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return;
 			}
 		

+ 31 - 52
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -17,7 +17,7 @@
 <!-- 상품문의 리스트 내용 -->
 <form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 <input type="hidden" name="pageNo"  value ="1"/>
-<input type="hidden" name="pageSize" value ="20"/>
+<input type="hidden" name="pageSize" value ="3"/>
 <input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 <div class="pd_qnalist">
 	<div class="info_txt">
@@ -36,10 +36,10 @@
 				<input id="except_secret" type="checkbox"><label for="except_secret" onclick="fnGetList();"><span>비밀글제외</span></label>
 				<input  type="hidden" name="secretYn" >
 			</div>
-			<div class="ui_row" id="infiniteContainer">
-				<div class="foldGroup case2" id="listBoxOuter">
+			<div class="ui_row">
+				<div class="foldGroup case2" >
 					<!-- list2 -->
-					<ul  id="listBox">
+					<ul  id="ulGoodsQna">
 					</ul>
 					<!-- //list2 -->
 				</div>
@@ -55,55 +55,37 @@
 			</div>
 		</div>
 		<!-- //나열조건결과 없을 때 노출 내용 -->
+		<div class="btn_group_flex"  style="display:none;">
+			<div>
+				<button type="button" class="btn btn_default" id="btnMore">
+					<span>더보기</span>
+				</button>
+			</div>
+		</div>
 	</div>
 	<div class="btn_group_flex">
 		<div><button type="button" class="btn btn_dark" id="btn_pdQnaWrite_pop" th:onclick="cfGoodsQngCreate([[${goodsInfo.goodsCd}]] )"><span>상품 문의하기</span></button></div>
 	</div>
 </div>
 </form>
-<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-<script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	$(function() { gagaInfiniteScroll.getHistory(); });
-	
-	// 상품 검색
-	var fnGetInfiniteScrollDataList = function(pageNum) {
-	
+	var fnGoodsQnaListSearch = function() {
+
 		$('#goodsQnaForm  input[name="secretYn"]').val('');
 		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){
 			$('#goodsQnaForm  input[name="secretYn"]').val('N');
 		}
 		
-		$("#goodsQnaForm input[name=pageNo]").val(pageNum+1);
-		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
-		gagajf.ajaxFormSubmit("/goods/qna/list", document.goodsQnaForm,  gagaInfiniteScroll.jsonToHtml);
-	}
-	
-	var fnDrawInfiniteScrollData = function(result, pageNum){
-
-		if (result.dataList != null && result.dataList.length > 0) {
-			var htm = fnCreateGoodsQnaList(result);
-			gagaInfiniteScroll.draw(htm);
-		}else {
-			if($("#goodsQnaForm input[name=pageNo]").val()==1){
-				$('#goodsQnaForm').find('.nodata').show();
-			}
-			gagaInfiniteScroll.draw('not');
-		}
+		gagajf.ajaxFormSubmit($('#goodsQnaForm').prop('action'), '#goodsQnaForm', fnGetListCallback);
 	}
 
-	var fnGoodsQnaListSearch = function() {
-		fnGoodsQnaInfiniteScrollInit();
-		gagaInfiniteScroll.getHistory();
-	}
+	var fnGetListCallback = function(result) {
 
-	var fnCreateGoodsQnaList = function(result) {
-
-		let tag = '';
 		$.each(result.dataList, function(idx, item) {
 			$('#goodsQnaForm').find('.nodata').hide();
+			let tag = '';
 			tag += '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
 			if (item.selfGb == 1){
 				tag += ' my_qna';	
@@ -151,29 +133,26 @@
 			tag += '	</div>\n';
 			tag += '</li>\n';
 			
+			$('#ulGoodsQna').append(tag);
 		});
-		return tag;
-	}
-
-	// 인피니트 스크롤 초기화
-	var fnGoodsQnaInfiniteScrollInit = function(){
-		// sessionStorage.removeItem(document.location.href);
-		History.replaceState(null, null);
-		gagaInfiniteScroll.pageStatus = {
-				  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
-				, loadPage : 0      // 로드할 페이지
-				, loadAlign : 'not' // 로드 상태(prev, next, not)
-				, historyScroll : 0 //
-				, nowPage : null    // 현재 페이지
-				, pageUrl : {       // page url
-				}
+		
+		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
+			$('#btnMore').parent().parent().show();
+			$('#goodsQnaForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
+		} else {
+			$('.nodata').show();
+			$('#btnMore').parent().parent().hide();
 		}
-		//History 초기화
-		$("#listBox").html("");
 	}
 	
+	// 더보기
+	$('#btnMore').on('click', function() {
+		fnGoodsQnaListSearch();
+	});
+	
+	
 	$(document).ready( function() {
-		//fnGoodsQnaListSearch();
+		fnGoodsQnaListSearch();
 	});
 	
 	

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

@@ -75,26 +75,19 @@
 					<div class="item_blk">
 						<div class="item_prod">
 							<div class="item_state">
-								<a href="#none" class="itemLink">
-									<div class="itemPic">
-										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-									</div>
-									<p class="itemBrand">NBA 키즈</p>
-									<div class="itemName">
-										<span class="tit_option">[상품1]</span>
-										유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업
-									</div>
-									<p class="itemText">
-										<span class="tx1">(리뷰 9,999+)</span>
-									</p>
-								</a>
+								<a href="javascript:void(0)" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+								</div>
+								<div class="itemName">선택</div>
+							</a>
 							</div>
 						</div>
 					</div>
 					<!-- //아이템 -->
 				</div>
 			</div>
-			<div class="cont_body"></div>
+			<div class="cont_body" id="goodsDealReview"></div>
 		</div>
 		<!-- //상품리뷰 리스트 -->
 		<!-- 상품문의 리스트 -->
@@ -106,18 +99,11 @@
 				<div class="item_blk">
 					<div class="item_prod">
 						<div class="item_state">
-							<a href="#none" class="itemLink">
+							<a href="javascript:void(0)" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
-								<p class="itemBrand">NBA 키즈</p>
-								<div class="itemName">
-									<span class="tit_option">[상품1]</span>
-									유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업
-								</div>
-								<p class="itemText">
-									<span class="tx1">(문의 9,999+)</span>
-								</p>
+								<div class="itemName">선택</div>
 							</a>
 						</div>
 					</div>
@@ -125,7 +111,7 @@
 				<!-- //아이템 -->
 			</div>
 			</div>
-		<div class="cont_body"></div>
+		<div class="cont_body"  id="goodsDealQna"></div>
 		</div>
 		<!-- //상품문의 리스트 -->
 		<!-- 배송/교환/반품 정보 -->
@@ -137,15 +123,11 @@
 				<div class="item_blk">
 					<div class="item_prod">
 						<div class="item_state">
-							<a href="#none" class="itemLink">
+							<a href="javascript:void(0)" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-								</div>
-								<p class="itemBrand">NBA 키즈</p>
-								<div class="itemName">
-									<span class="tit_option">[상품1]</span>
-									유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
+								<div class="itemName">선택</div>
 							</a>
 						</div>
 					</div>
@@ -153,15 +135,274 @@
 				<!-- //아이템 -->
 			</div>
 			</div>
-		<div class="cont_body"></div>
+		<div class="cont_body" id="goodsDealDelivery" ></div>
 		</div>
 		<!-- //배송/교환/반품 정보 -->
 	</div>
 </div>
+
+<!-- 딜리뷰제품리스트팝업 -->
+<div class="pd_pop list_pop pd_pop pd_listReview_pop" id="listReviewPop">
+	<div class="modal_content">
+		<div class="close">닫기</div>
+		<div class="listpop_body">
+			<!-- 아이템선택 -->
+			<div class="deal_list_select">
+				<ul class="list">
+					<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+						th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+						th:onclick="fnSelGoodsDealReview([[${goodsInfo.compsGoodsCd}]])">
+						<div class="item_prod" th:attr="goodsCd=${goodsInfo.compsGoodsCd}">
+							<div class="item_state active">
+								<a href="javascript:void(0);" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=331'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									</div>
+									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+									<div class="itemText">
+										<span class="tx1">(리뷰 <th:block  th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</span>
+									</div>
+								</a>
+								<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+							</div>
+						</div>
+					</li> 
+				</ul>
+			</div>
+			<!-- //아이템선택 -->
+		</div>
+	</div>
+</div>
+<!-- //딜리뷰제품리스트팝업 -->
+
+<!-- 딜문의제품리스트팝업 -->
+<div class="pd_pop list_pop pd_pop pd_listQna_pop" id="listQnaPop">
+	<div class="modal_content">
+		<div class="close">닫기</div>
+		<div class="listpop_body">
+			<!-- 아이템선택 -->
+			<div class="deal_list_select">
+				<ul class="list">
+					<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+						th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+						th:onclick="fnSelGoodsDealQna([[${goodsInfo.compsGoodsCd}]])">
+						<div class="item_prod" th:attr="goodsCd=${goodsInfo.compsGoodsCd}">
+							<div class="item_state active">
+								<a href="javascript:void(0);" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=331'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									</div>
+									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+									<p class="itemText">
+										<span class="tx1">(문의 9,999+)</span>
+									</p>
+									<div class="itemText">
+										<span class="tx1">(문의 <th:block  th:text="${(goodsInfo.goodsQnaCnt <= 9999) ? #numbers.formatInteger(goodsInfo.goodsQnaCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</span>
+									</div>
+								</a>
+								<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+							</div>
+						</div>
+					</li>  
+				</ul>
+			</div>
+			<!-- //아이템선택 -->
+		</div>
+	</div>
+</div>
+<!-- //딜문의제품리스트팝업 -->
+
+<!-- 딜배송제품리스트팝업 -->
+<div class="pd_pop list_pop pd_pop pd_listDelivery_pop" id="listDeliveryPop">
+	<div class="modal_content">
+		<div class="close">닫기</div>
+		<div class="listpop_body">
+			<!-- 아이템선택 -->
+			<div class="deal_list_select">
+				<ul class="list">
+					<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+						th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+						th:onclick="fnSelGoodsDealDelivery([[${goodsInfo.compsGoodsCd}]])">
+						<div class="item_prod" th:attr="goodsCd=${goodsInfo.compsGoodsCd}">
+							<div class="item_state active">
+								<a href="javascript:void(0);" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=331'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									</div>
+									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+								</a>
+								<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+							</div>
+						</div>
+					</li> 
+				</ul>
+			</div>
+			<!-- //아이템선택 -->
+		</div>
+	</div>
+</div>
+<!-- //딜배송제품리스트팝업 -->
+
+
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
+	
+	// 구성 상품 상세 상품평
+	var fnGoodsDetailReview = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/review/frame", "html", "goodsDealReview", params);
+	}
+	
+	// 상품평 상품선택시
+	var fnSelGoodsDealReview = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailReview(params);  // ajax html
+		
+		$('.pd_pop.pd_listReview_pop').find('.deal_list_select .list li').each(function() { 
+			
+			if (goodsCd == $(this).find('input[name=selectGoods]').val()){
+				let tag = $(this).parent().parent().find('.item_prod').parent().html();
+				$('.tab_detail_cont.pd_review .item_blk').html(tag);
+			}
+		});
 
+	}
+	
+	// 구성 상품 상세 문의
+	var fnGoodsDetailQna = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/qna/frame", "html", "goodsDealQna", params);
+	}
+	
+	// 문의 상품선택시
+	var fnSelGoodsDealQna = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailQna(params);  // ajax html
+		
+		$('.pd_pop.pd_listQna_pop').find('.deal_list_select .list li').each(function() { 
+			if (goodsCd == $(this).find('input[name=selectGoods]').val()){
+				$('.pd_pop.pd_listQna_pop').find('.deal_list_select .list li').removeClass('selected');
+				$(this).addClass('selected');
+				let tag = $(this).html();
+				$('.tab_detail_cont.pd_qnalist .item_blk').html(tag);
+			}
+		});
+
+	}
+	
+	// 구성 상품 상세 배송정보
+	var fnGoodsDetailDelivery = function(params) {
+		
+		gagajf.ajaxSubmit("/goods/detail/delivery/frame", "html", "goodsDealDelivery", params);
+	}
+	
+	// 배송정보 상품선택시
+	var fnSelGoodsDealDelivery = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailDelivery(params);  // ajax html
+		
+		$('.pd_pop.pd_listDelivery_pop').find('.deal_list_select .list li').each(function() { 
+			
+			if (goodsCd == $(this).find('input[name=selectGoods]').val()){
+				$('.pd_pop.pd_listDelivery_pop').find('.deal_list_select .list li').removeClass('selected');
+				$(this).addClass('selected');
+				let tag = $(this).html();
+				$('.tab_detail_cont.pd_delivery .item_blk').html(tag);
+			}
+		});
+		
+	}
+	
+	
+	// 상품선택시 상품상세내용 변경
+	var fnOpenGoodsDealDetail = function(goodsCd, compsGoodsCd){
+		
+		/* // 콤보박스 선택 처리
+		let $selObj = $('#layer_goods_deal_detail').find('.select_custom.deal_opt_item');
+		
+		// 탭별 선택시 기본 상품 설정
+		let selIdx = 0;
+		let selfGoodsYn = '';
+		let currPrice = 0;
+		let soldoutYn = "N";
+		$selObj.find('.combo .list li').each(function() { 
+			if ($(this).find('input[name=selectGoods]').val() == compsGoodsCd){
+				selfGoodsYn = $(this).find('input[name=selectGoods]').attr('selfGoodsYn');
+				currPrice = $(this).find('input[name=selectGoods]').attr('currPrice');
+				if ($(this).find('.item_prod').hasClass('soldout')) soldoutYn = "Y";
+				return false;
+			}
+			selIdx ++;
+		});
+		
+		$selObj.find('.combo .list li').eq(selIdx).trigger("click"); */
+		
+		// 상세노출
+		fnGoodsDealDesc(compsGoodsCd);
+/* 		
+		if (!soldout){
+			// 옵션1 처리
+			fnOption1("layer", compsGoodsCd, currPrice, selfGoodsYn);	
+		}
+ */		
+		
+	/* 	let $obj = $('.pd_detail .opt_result'); 
+		let $taget = $('.full_pop_fix_r .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
+		
+		$('body').addClass('lock');
+		$("#layer_goods_deal_detail").show();  */
+		
+	}
+	
+	// 상세 레이어 창닫기
+	var fnCloseGoodsDealDetail = function(){
+		// 선택값 본창에 넘기기
+		/* let $obj = $('.full_pop_fix_r .opt_result');
+		let $taget = $('.pd_detail .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
+		
+		$('body').removeClass('lock');
+		$('#goodsDealDetail').html('');
+		$("#layer_goods_deal_detail").hide(); */
+	}
+	
+	// 구성 상품 상세 
+	var fnGoodsDealDetail2 = function(params) {
+		
+		var Param = new Object();
+		var str = '<div class="modal pop_full fade pd_pop pd_descrp_pop" id="layer_goods_deal_desc" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+
+		if ($('#layer_goods_deal_desc').length == 0) {
+			$('body').append(str);
+		}
+
+		cfOpenLayer(_'/goods/deal/detail/info/frame', 'layer_goods_deal_desc' ,params );
+	
+	}
+
+	
+	// 레이어에서 상품선택시
+	var fnGoodsDealDesc = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		params.adminYn = "Y";
+		fnGoodsDealDetail2(params);  // ajax html
+	}
+	
+	$(document).ready( function() {
+		
+	});
+	
 	
 /*]]>*/
 </script>

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

@@ -33,7 +33,7 @@
 			</div>
 			<!-- //해당상품 -->
 		</div>
-		<div class="modal-body" id="goodsDealQna" data-id="layer_infinite_item" >
+		<div class="modal-body" id="goodsDealQna">
 		</div>
 		<div class="modal-footer">
 			

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

@@ -83,11 +83,11 @@
 		}
 		
 		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
-			$('#btnMore').parent().show();
+			$('#btnMore').parent().parent().show();
 			$('#goodsReviewPhotoForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
 		} else {
 			$('.review_last').show();
-			$('#btnMore').parent().hide();
+			$('#btnMore').parent().parent().hide();
 		}
 	}
 	

+ 17 - 5
src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html

@@ -216,15 +216,27 @@ function useGiftcard(result) {
 		let useGiftcard = giftcardUseList[i];
 		tmtbHtml += '	<li>                                                               ';
 		tmtbHtml += '		<div>                                                          ';
-		tmtbHtml += '			<span class="tag deepgray">차감</span>                       ';
-		tmtbHtml += '			<span class="tag_name">상품구매</span>                         ';
+		if (useGiftcard.gfcdAmt<0) {
+			tmtbHtml += '			<span class="tag deepgray">차감</span>                       ';
+		}else{
+			tmtbHtml += '		    <span class="tag primary">적립</span>';
+		}
+		
+		tmtbHtml += '			<span class="tag_name">'+useGiftcard.occurDtlDesc+'</span>                         ';
 		tmtbHtml += '			<span class="txt_content">'	+ useGiftcard.goodsNm + '</span>   ';
 		tmtbHtml += '			<span class="txt_time">'+useGiftcard.regDt+'</span>          ';
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '		<div>                                                          ';
-		tmtbHtml += '			<span class="amount_minus">                                ';
-		tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
-		tmtbHtml += '			</span>                                                    ';
+		if (useGiftcard.gfcdAmt<0) {
+			tmtbHtml += '			<span class="amount_minus">                                ';
+			tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
+			tmtbHtml += '			</span>                                                    ';
+		}else{
+			tmtbHtml += '			<span class="amount_plus">                                ';
+			tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
+			tmtbHtml += '			</span>                                                    ';
+		}
+		
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '	</li>                                                              ';
 	}

+ 220 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypagePointFormMob.html

@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypagePointFormMob.html
+ * @desc    : 마이페이지 > 포인트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.19   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main role="" id="" class="container my">
+			<section class="content point">
+
+				<div class="inner">
+					<div class="highlight_area">
+						<div class="have_amount">
+							<div class="total_amount">
+								보유 포인트&nbsp;<span><em th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</span>
+							</div>
+						</div>
+					</div>
+					<div class="have_amount">
+						<dl>
+							<div>
+								<dt>적립 예정 포인트</dt>
+								<dd><em th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+							</div>
+						</dl>
+						<dl>
+							<div>
+								<dt>한 달 이내 소멸 예정<span class="tag primary_line">D-<em>30</em></span></dt>
+								<dd><em th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+							</div>
+						</dl>
+					</div>
+				</div>
+				
+				<div class="inner wide">
+					<div class="select_box ">
+						<div class="form_field">
+							<div class="select_custom month sup">
+								<!-- 210408_ 수정 : 스크립트없는 기본 셀렉터 사용으로 변경 -->
+								<div class="select pure">
+									<select name="month" id="month" onchange='fnChangeDate(this.value)' >
+									</select>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="tabWrap">
+						<ul class="tabIndex">
+							<li id="allPointList"><a href="javascript:void(0);">전체 내역</a></li>
+							<li id="accumulatePointList"><a href="javascript:void(0);">적립 내역</a></li>
+							<li id="usePointList"><a href="javascript:void(0);">사용 내역</a></li>
+						</ul>
+						<div class="tabContents">
+							<div class="tab_cont active" id="pointAjaxList">
+	
+								<!-- // tab_cont End -->
+							</div>
+						</div>
+					</div>
+				</div>
+
+			</section>
+		</main>
+<script th:inline="javascript">
+let accumulatePointList = [[${accumulatePointList}]];
+let usePointList = [[${usePointList}]];
+let allPointList = [[${allPointList}]];
+let date = [[${date}]];
+var year = date[0].year;
+var month = date[0].month;
+
+//동적으로 날짜 년도 append
+function appendYear() {
+	for (var i = 0; i < date.length; i++) {
+		$("#month").append(	"<option value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" + date[i].month + "월 </option>")
+	}
+	//$(".month").append("<option class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년" + date[0].month + "월 </option>"); // 현재년도 선택 */ 
+}
+appendYear($("#month"));
+
+//날짜변경 이벤트
+var fnChangeDate = function(param) {
+	let url = '/mypage/allpoint/list';
+	
+	
+	//$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
+	//var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
+	
+	// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
+	let data = {
+		searchDt : year + "" + month,
+		month : month
+	};
+	var jsonData = JSON.stringify(data);
+	
+	gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
+
+			accumulatePointList = result.accumulatePointList;
+			usePointList = result.usePointList;
+			allPointList = result.allPointList;
+			// 클릭상태 확인
+			if($("#accumulatePointList").hasClass("active")){
+				$("#accumulatePointList").click();
+				// 첫화면 전체내역 조회
+				fnGetPointTableInfo(result.accumulatePointList);
+			}else if($("#usePointList").hasClass("active")){
+				$("#usePointList").click();
+				fnGetPointTableInfo(usePointList);
+			}else if($("#allPointList").hasClass("active")) {
+				$("#allPointList").click();
+				fnGetPointTableInfo(allPointList);
+			}
+	});
+}
+
+// HTML 그리기
+var fnGetPointTableInfo = function(param) {
+	let tag = "";
+	if(param != null && param.length > 0){
+		$.each(param, function(idx,item){
+			tag += '<ul>';
+			tag += ' <li>';
+			tag += ' 	<div>';
+			if(item.pntAmt > 0){
+				tag += '		<span class="tag primary">적립</span>';
+			}else{
+				tag += ' 		<span class="tag deepgray">차감</span>';
+			}
+			
+			tag += ' 		<span class="tag_name">'+item.occurGb+'</span>';
+			tag += ' 		<span class="txt_content">'+ item.occurDtlDesc + '</span>';
+			tag += ' 		<span class="txt_time">'+item.pntUploadDt+'</span>';
+			tag += ' 	</div>';
+			tag += ' 	<div>';
+			if(item.pntAmt > 0){
+				tag += '		<span class="amount_plus">';
+				tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
+				tag += '		</span>';
+			}else{
+				tag += '		<span class="c_primary">';
+				tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
+				tag += '		</span>';
+			}
+			tag += ' 	</div>';
+			tag += ' </li>';
+			tag += '</ul>';
+		});
+		$("#pointAjaxList").html(tag);
+	}
+}
+
+// 전체내역 조회
+$("#allPointList").click(function(){
+
+		$("#accumulatePointList").removeClass("active");
+		$("#usePointList").removeClass("active");
+		
+		$("#allPointList").addClass("active");
+		//$("#plusMinus").text("증감/차감");
+		
+		fnGetPointTableInfo(allPointList);
+});
+
+// 적립내역 조회
+$("#accumulatePointList").click(function(){
+
+		$("#allPointList").removeClass("active");
+		$("#usePointList").removeClass("active");
+		
+		$("#accumulatePointList").addClass("active");
+		//$("#plusMinus").text("증감");
+	
+		fnGetPointTableInfo(accumulatePointList);
+});
+
+// 사용내역 조회
+$("#usePointList").click(function(){
+	
+	$("#accumulatePointList").removeClass("active");
+	$("#allPointList").removeClass("active");
+	
+	$("#usePointList").addClass("active");
+	//$("#plusMinus").text("차감");
+	
+	fnGetPointTableInfo(usePointList);
+});
+
+$(document).ready(function() {
+	// 전체내역 표시
+	$("#allPointList").trigger("click");
+	
+
+	// 셀렉트박스 활성화
+	$('.select_custom').each(function(index) {
+		var selecter01 = new sCombo($(this));
+	});
+
+	// 셀렉트박스 데이터 설정
+	fnChangeDate();
+
+});
+
+</script>
+	</th:block>
+
+</body>
+</html>

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

@@ -3,7 +3,7 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : SigninFormWeb.html
+ * @source  : SnsCallBackFormWeb.html
  * @desc    : 로그인 Page
  *============================================================================
  * STYLE24

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

@@ -44,235 +44,237 @@
 					</div>
 				</div>
 				<div class="cont">
-					<div class="cont_body">
-						<div class="filter_list">
-							<!-- 1depth -->
-							<ul>
-								<li data-id="tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}">
-									<a href="javascript:void(0)">브랜드</a>
-								</li>
-								<li data-id="tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}">
-									<a href="javascript:void(0)">사이즈</a>
-								</li>
-								<li data-id="tap04" th:if="${filterPriceList!=null and !filterPriceList.empty}">
-									<a href="javascript:void(0)">가격</a>
-								</li>
-								<li data-id="tap05">
-									<a href="javascript:void(0)">할인율</a>
-								</li>
-								<li data-id="tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}">
-									<a href="javascript:void(0)">연령</a>
-								</li>
-								<li data-id="tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}">
-									<a href="javascript:void(0)">시즌</a>
-								</li>
-								<li data-id="tap08" th:if="${filterColorList!=null and !filterColorList.empty}">
-									<a href="javascript:void(0)">컬러</a>
-								</li>
-								<li data-id="tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}">
-									<a href="javascript:void(0)">혜택</a>
-								</li>
-							</ul>
-							<div class="form_field">
-								<div>
-									<input id="price" type="checkbox" ><label for="price"> <span>남여 공용만 보기</span> </label>
-								</div>
-								<div>
-									<input id="chk-2" type="checkbox" checked=""><label for="chk-2"> <span>신상품만 보기</span> </label>
-								</div>
-							</div>
-						</div>
-						<div class="filter_content">
-							<!-- 브랜드 -->
-							<div class="sort tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}">
+					<form id="filterForm">
+						<div class="cont_body">
+							<div class="filter_list">
+								<!-- 1depth -->
 								<ul>
-									<th:block th:each="filterBrandData, filterBrandStat : ${filterBrandList}">
-									<li>
-										<label class="brand_btn" onclick="filterSel();">
-											<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="filterBrandCds" th:value="${filterBrandData.filterCd}"><span th:text="${filterBrandData.filterNm}"></span>
-										</label>
+									<li data-id="tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}">
+										<a href="javascript:void(0)">브랜드</a>
 									</li>
-									</th:block>
-								</ul>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
-							</div>
-							<!-- //브랜드 -->
-							<!-- 사이즈 -->
-							<div class="sort tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}">
-								<ul>
-									<li>
-										<strong>상의</strong>
-										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'T'}">
-											<label class="size_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.filterNm}"><span th:text="${filterSizeData.filterNm}">80</span>
-											</label>
-										</th:block>
+									<li data-id="tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}">
+										<a href="javascript:void(0)">사이즈</a>
 									</li>
-									<li>
-										<strong>하의</strong>
-										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'B'}">
-											<label class="size_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.filterNm}"><span th:text="${filterSizeData.filterNm}">80</span>
-											</label>
-										</th:block>
+									<li data-id="tap04" th:if="${filterPriceList!=null and !filterPriceList.empty}">
+										<a href="javascript:void(0)">가격</a>
 									</li>
-									<li>
-										<strong>신발</strong>
-										<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'S'}">
-											<label class="size_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize'+filterSizeStat.count}" name="filterSizeCds" th:vale="${filterSizeData.filterNm}"><span th:text="${filterSizeData.filterNm}">80</span>
-											</label>
-										</th:block>
+									<li data-id="tap05">
+										<a href="javascript:void(0)">할인율</a>
+									</li>
+									<li data-id="tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}">
+										<a href="javascript:void(0)">연령</a>
+									</li>
+									<li data-id="tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}">
+										<a href="javascript:void(0)">시즌</a>
+									</li>
+									<li data-id="tap08" th:if="${filterColorList!=null and !filterColorList.empty}">
+										<a href="javascript:void(0)">컬러</a>
+									</li>
+									<li data-id="tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}">
+										<a href="javascript:void(0)">혜택</a>
 									</li>
 								</ul>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
-							</div>
-							<!-- //사이즈 -->
-							<!-- 가격 -->
-							<div class="sort tap04">
-								<div class="range">
-									<input type="text" class="js-range-slider01" name="my_range01" value="" />
-								</div>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
-							</div>
-							<!-- //가격 -->
-							<!-- 할인율 -->
-							<div class="sort tap05">
-								<ul style="display:none;">
-									<li><input type="checkbox" id="percent01" name="range" value="0"><label for="percent01"><span></span><span>0%</span></label></li>
-									<li><input type="checkbox" id="percent02" name="range" value="10"><label for="percent02"><span></span><span>10%</span></label></li>
-									<li><input type="checkbox" id="percent03" name="range" value="20"><label for="percent03"><span></span><span>20%</span></label></li>
-									<li><input type="checkbox" id="percent04" name="range" value="30"><label for="percent04"><span></span><span>30%</span></label></li>
-									<li><input type="checkbox" id="percent05" name="range" value="40"><label for="percent05"><span></span><span>40%</span></label></li>
-									<li><input type="checkbox" id="percent06" name="range" value="50"><label for="percent06"><span></span><span>50%</span></label></li>
-									<li><input type="checkbox" id="percent07" name="range" value="60"><label for="percent07"><span></span><span>60%</span></label></li>
-									<li><input type="checkbox" id="percent08" name="range" value="70"><label for="percent08"><span></span><span>70%</span></label></li>
-									<li><input type="checkbox" id="percent09" name="range" value="80"><label for="percent09"><span></span><span>80%</span></label></li>
-									<li><input type="checkbox" id="percent10" name="range" value="100"><label for="percent10"><span></span><span>100%</span></label></li>
-								</ul>
-								<div class="range">
-									<input type="text" class="js-range-slider02" name="my_range02" value="" />
+								<div class="form_field">
+									<div>
+										<input id="price" type="checkbox" ><label for="price"> <span>남여 공용만 보기</span> </label>
+									</div>
+									<div>
+										<input id="chk-2" type="checkbox" checked=""><label for="chk-2"> <span>신상품만 보기</span> </label>
+									</div>
 								</div>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
 							</div>
-							<!-- //할인율 -->
-							<!-- 연령 -->
-							<div class="sort tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}">
-								<ul>
-									<th:block th:each="filterAgeData, filterAgeStat : ${filterAgeList}">
+							<div class="filter_content">
+								<!-- 브랜드 -->
+								<div class="sort tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}" id="brandFilterDiv">
+									<ul>
+										<th:block th:each="filterBrandData, filterBrandStat : ${filterBrandList}">
 										<li>
-											<label class="Age_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterAge'+filterAgeStat.count}" name="filterAgeCds" th:value="${filterAgeData.filterCd}"><span th:text="${filterAgeData.filterNm}">베이비(0~18개월)</span>
+											<label class="brand_btn">
+												<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="brand" th:value="${filterBrandData.filterCd}" th:data-id="${filterBrandData.filterNm}" onclick="filterSel(this,'brand','off');"><span th:text="${filterBrandData.filterNm}"></span>
 											</label>
 										</li>
-									</th:block>
-								</ul>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
-							</div>
-							<!-- //연령 -->
-							<!-- 시즌 -->
-							<div class="sort tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}">
-								<ul>
-									<th:block th:each="filterSeasonData, filterSeasonStat : ${filterSeasonList}">
-										<li>
-											<label class="Season_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason'+filterSeasonStat.count}" name="filterSeasonCds" th:value="${filterSeasonData.filterCd}"><span th:text="${filterSeasonData.filterNm}">봄</span>
-											</label>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //브랜드 -->
+								<!-- 사이즈 -->
+								<div class="sort tap03" th:if="${filterSizeList!=null and !filterSizeList.empty}" id="sizeFilterDiv">
+									<ul>
+										<li id="sizeLi1">
+											<strong>상의</strong>
+											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'T'}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterTSize'+filterSizeStat.count}" name="size" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','1');"><span th:text="${filterSizeData.filterNm}">80</span>
+												</label>
+											</th:block>
 										</li>
-									</th:block>
-								</ul>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
-							</div>
-							<!-- //시즌 -->
-							<!-- 컬러 -->
-							<div class="sort tap08" th:if="${filterColorList!=null and !filterColorList.empty}">
-								<ul>
-									<th:block th:each="filterColorData, filterColorStat : ${filterColorList}">
-										<li>
-											<label class="color-check" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterColor'+filterColorStat.count}" name="filterColorCds" th:value="${filterColorData.filterNm}" >
-												<span class="pdColor-color" th:if="${filterColorData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm+';'+' border:1px solid #aaa;'}"></span>
-												<span class="pdColor-color" th:if="${filterColorData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm}"></span>
-											</label>
+										<li id="sizeLi2">
+											<strong>하의</strong>
+											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'B'}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBSize'+filterSizeStat.count}" name="size2" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','2');"><span th:text="${filterSizeData.filterNm}">80</span>
+												</label>
+											</th:block>
 										</li>
-									</th:block>
-								</ul>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
-							</div>
-							<!-- //컬러 -->
-							<!-- 혜택 -->
-							<div class="sort tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}">
-								<ul>
-									<th:block th:each="filterBenefitData, filterBenefitStat : ${filterBenefitList}">
-										<li>
-											<label class="Benefits_btn" onclick="filterSel();">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits'+filterBenefitStat.count}" name="filterBenefitsCds" th:value="${filterBenefitData.filterCd}"><span th:text="${filterBenefitData.filterNm}"></span>
-											</label>
+										<li id="sizeLi3">
+											<strong>신발</strong>
+											<th:block th:each="filterSizeData, filterSizeStat : ${filterSizeList}" th:if="${filterSizeData.filterCd == 'S'}">
+												<label class="size_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterSSize'+filterSizeStat.count}" name="size3" th:vale="${filterSizeData.filterNm}" th:data-id="${filterSizeData.filterNm}" onclick="filterSel(this,'size','off','3');"><span th:text="${filterSizeData.filterNm}">80</span>
+												</label>
+											</th:block>
 										</li>
-									</th:block>
-								</ul>
-								<a href="javascript:void(0)" class="tap_close">delete-btn</a>
-							</div>
-							<!-- //혜택 -->
-							<!-- 필터 -->
-							<div class="fillter">
-								<div class="fillter_box">
-                                    <span>
-                                        모이몰른
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<!-- 컬러 표시 -->
-									<span>
-                                        <span class="pdColor-color12"></span>
-                                        <a href="javascript:;" class="filter_delete"></a >
-                                    </span>
-									<!-- 컬러 표시 -->
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
 								</div>
-								<button class="fillter_reset"><span>전체 초기화</span></button>
-							</div>
-							<!-- //필터 -->
-						</div>
-						<div class="list_content"> <!-- 데이터 없을시 클래스 nodata 추가 -->
-							<div class="list_defult">
-								<div>
-									<p>선택하신 조건에 맞는 상품이 없습니다.<br>필터를 변경해 보세요.</p>
+								<!-- //사이즈 -->
+								<!-- 가격 -->
+								<div class="sort tap04" id="priceFilterDiv">
+									<div class="range">
+										<input type="text" class="js-range-slider01" name="my_range01" value="" />
+									</div>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
 								</div>
-								<div class="ui_row">
-									<button type="button" class="btn btn_default btn_md"><span>선택한 필터 초기화</span></button>
+								<!-- //가격 -->
+								<!-- 할인율 -->
+								<div class="sort tap05" id="dcrateFilterDiv">
+									<ul style="display:none;">
+										<li><input type="checkbox" id="percent01" name="range" value="0"><label for="percent01"><span></span><span>0%</span></label></li>
+										<li><input type="checkbox" id="percent02" name="range" value="10"><label for="percent02"><span></span><span>10%</span></label></li>
+										<li><input type="checkbox" id="percent03" name="range" value="20"><label for="percent03"><span></span><span>20%</span></label></li>
+										<li><input type="checkbox" id="percent04" name="range" value="30"><label for="percent04"><span></span><span>30%</span></label></li>
+										<li><input type="checkbox" id="percent05" name="range" value="40"><label for="percent05"><span></span><span>40%</span></label></li>
+										<li><input type="checkbox" id="percent06" name="range" value="50"><label for="percent06"><span></span><span>50%</span></label></li>
+										<li><input type="checkbox" id="percent07" name="range" value="60"><label for="percent07"><span></span><span>60%</span></label></li>
+										<li><input type="checkbox" id="percent08" name="range" value="70"><label for="percent08"><span></span><span>70%</span></label></li>
+										<li><input type="checkbox" id="percent09" name="range" value="80"><label for="percent09"><span></span><span>80%</span></label></li>
+										<li><input type="checkbox" id="percent10" name="range" value="100"><label for="percent10"><span></span><span>100%</span></label></li>
+									</ul>
+									<div class="range">
+										<input type="text" class="js-range-slider02" name="my_range02" value="" />
+									</div>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
 								</div>
-							</div>
-							<div class="count_wrap">
-								<div>
-									<p><span id="totCntId"></span>개의 상품</p>
+								<!-- //할인율 -->
+								<!-- 연령 -->
+								<div class="sort tap06" th:if="${filterAgeList!=null and !filterAgeList.empty}" id="ageFilterDiv">
+									<ul>
+										<th:block th:each="filterAgeData, filterAgeStat : ${filterAgeList}">
+											<li>
+												<label class="Age_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterAge'+filterAgeStat.count}" name="age" th:value="${filterAgeData.filterCd}" th:data-id="${filterAgeData.filterNm}" onclick="filterSel(this,'age','off');"><span th:text="${filterAgeData.filterNm}">베이비(0~18개월)</span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
 								</div>
-								<div>
+								<!-- //연령 -->
+								<!-- 시즌 -->
+								<div class="sort tap07" th:if="${filterSeasonList!=null and !filterSeasonList.empty}" id="seasonFilterDiv">
 									<ul>
-										<li>
-											<a href="" class="on">최신상품순</a>
-										</li>
-										<li>
-											<a href="">인기상품순</a>
-										</li>
-										<li>
-											<a href="">리뷰 많은순</a>
-										</li>
+										<th:block th:each="filterSeasonData, filterSeasonStat : ${filterSeasonList}">
+											<li>
+												<label class="Season_btn">
+													<input type="checkbox" group="filterValue"  th:id="${'chkFilterSeason'+filterSeasonStat.count}" name="season" th:value="${filterSeasonData.filterCd}" th:data-id="${filterSeasonData.filterNm}" onclick="filterSel(this,'season','off');"><span th:text="${filterSeasonData.filterNm}">봄</span>
+												</label>
+											</li>
+										</th:block>
 									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
 								</div>
-							</div>
-
-							<div id="infiniteContainer">
-								<div id="listBoxOuter" class="itemsGrp">
-									<ul class="productlist quarter" >
+								<!-- //시즌 -->
+								<!-- 컬러 -->
+								<div class="sort tap08" th:if="${filterColorList!=null and !filterColorList.empty}" id="colorFilterDiv">
+									<ul>
+										<th:block th:each="filterColorData, filterColorStat : ${filterColorList}">
+											<li>
+												<label class="color-check">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterColor'+filterColorStat.count}" name="color" th:value="${filterColorData.filterNm}" th:data-id="${filterColorData.filterNm.replace('#','')}" onclick="filterSel(this,'color','off');">
+													<span class="pdColor-color" th:if="${filterColorData.filterNm=='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm+';'+' border:1px solid #aaa;'}" th:value="${filterColorData.filterNm}"></span>
+													<span class="pdColor-color" th:if="${filterColorData.filterNm!='#FFFFFF'}" th:style="${'background-color:'+filterColorData.filterNm}" th:value="${filterColorData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
+									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //컬러 -->
+								<!-- 혜택 -->
+								<div class="sort tap09" th:if="${filterBenefitList!=null and !filterBenefitList.empty}" id="benefitFilterDiv">
+									<ul>
+										<th:block th:each="filterBenefitData, filterBenefitStat : ${filterBenefitList}">
+											<li>
+												<label class="Benefits_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBenefits'+filterBenefitStat.count}" name="benefit" th:value="${filterBenefitData.filterCd}" th:data-id="${filterBenefitData.filterNm}" onclick="filterSel(this,'benefit','off');"><span th:text="${filterBenefitData.filterNm}"></span>
+												</label>
+											</li>
+										</th:block>
 									</ul>
+									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
+								</div>
+								<!-- //혜택 -->
+								<!-- 필터 -->
+								<div class="fillter">
+									<div class="fillter_box" id="filterData">
+<!--										<span>-->
+<!--											모이몰른-->
+<!--											<a href="javascript:;" class="filter_delete"></a >-->
+<!--										</span>-->
+										<!-- 컬러 표시 -->
+<!--										<span>-->
+<!--											<span class="pdColor-color12"></span>-->
+<!--											<a href="javascript:;" class="filter_delete"></a >-->
+<!--										</span>-->
+										<!-- 컬러 표시 -->
+									</div>
+									<button class="fillter_reset" onclick="fnFilterReset();"><span>전체 초기화</span></button>
 								</div>
+								<!-- //필터 -->
 							</div>
+							<div class="list_content"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+								<div class="list_defult">
+									<div>
+										<p>선택하신 조건에 맞는 상품이 없습니다.<br>필터를 변경해 보세요.</p>
+									</div>
+									<div class="ui_row">
+										<button type="button" class="btn btn_default btn_md"><span>선택한 필터 초기화</span></button>
+									</div>
+								</div>
+								<div class="count_wrap">
+									<div>
+										<p><span id="totCntId"></span>개의 상품</p>
+									</div>
+									<div>
+										<ul>
+											<li>
+												<a href="" class="on">최신상품순</a>
+											</li>
+											<li>
+												<a href="">인기상품순</a>
+											</li>
+											<li>
+												<a href="">리뷰 많은순</a>
+											</li>
+										</ul>
+									</div>
+								</div>
 
-							<div class="itemsGrp" id="listBox">
+								<div id="infiniteContainer">
+									<div id="listBoxOuter" class="itemsGrp">
+										<ul class="productlist quarter" >
+										</ul>
+									</div>
+								</div>
 
-							</div>
+								<div class="itemsGrp" id="listBox">
 
+								</div>
+
+							</div>
 						</div>
-					</div>
+					</form>
 				</div>
 			</div>
 		</div>
@@ -312,6 +314,7 @@
 				var my_to = custom_values.indexOf(custom_values[5]); //custom_values.indexOf('230,000원');
 				var minValue = custom_values[0];
 				var maxValue = custom_values[5];
+				console.log('my_from>>'+my_from);
 
 				$(".dp .js-range-slider01, .sch_result .js-range-slider01").ionRangeSlider({
 					type: "double",
@@ -330,7 +333,7 @@
 			//할인율
 			var custom_values02 = ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'];
 			var my_from02 = custom_values02.indexOf('0%');
-			var my_to02 = custom_values02.indexOf('100%');
+			var my_to02 = custom_values02.indexOf('10%');
 			$(".dp .js-range-slider02, .sch_result .js-range-slider02").ionRangeSlider({
 				type: "double",
 				min: 0,
@@ -349,12 +352,25 @@
 			//fnGoodsListSearch();
 		});
 
+		var fnFilterReset = function (){
+			$("#searchGoodsForm input:hidden[name=brandSearch]").remove();
+			$("#searchGoodsForm input:hidden[name=sizeSearch]").remove();
+			$("#searchGoodsForm input:hidden[name=priceSearch]").remove();
+			$("#searchGoodsForm input:hidden[name=dcrateSearch]").remove();
+			$("#searchGoodsForm input:hidden[name=seasonSearch]").remove();
+			$("#searchGoodsForm input:hidden[name=colorSearch]").remove();
+			$("#searchGoodsForm input:hidden[name=benefitSearch]").remove();
+		}
+
 		var fnGoodsListSearch = function (){
+			console.log('1');
 			gagaInfiniteScroll.getHistory();
+			console.log('2');
 		}
 
 		// 상품 검색
 		var fnGetInfiniteScrollDataList = function (pageNum){
+			console.log('3');
 			$("#searchGoodsForm input[name=pageNo]").val(pageNum+1);
 			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchGoodsForm,  gagaInfiniteScroll.jsonToHtml);
 		}
@@ -496,7 +512,7 @@
 
 		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
 		$(window).on("pageshow", function(event) {
-			/*$('#filterForm input[name=brand]:checked').each(function(){
+			$('#filterForm input[name=brand]:checked').each(function(){
 				$(this).parent().addClass("active");
 			});
 			$('#filterForm input[name=size]:checked').each(function(){
@@ -504,7 +520,7 @@
 			});
 			$('#filterForm input[name=price]:checked').each(function(){
 				$(this).parent().addClass("active");
-			});*/
+			});
 			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
 				var historyData = sessionStorage.getItem(document.location.href);
 				if(historyData!=null){

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

@@ -84,18 +84,18 @@
 				</th:block>
 				<th:block th:each="cardInfo, status : ${cardInfoList}" >
 				<div class="benefit_blk"  th:if="${cardInfo.prmtGb == 'B' and not #strings.isEmpty(cardInfo.note) and cardInfo.rownum ==  1}">
-					<th:block >
 					<h6>부분 무이자 할부</h6>
 					<th:block th:utext="${#strings.unescapeJava(#strings.escapeJava(cardInfo.note))}"></th:block>
+				</div>
+				</th:block>
+				<div class="benefit_blk" >
 					<div class="info_txt">
 						<ul>
 							<li>무이자할부는 행사기간 동안 실 결제금액 기준으로 가능</li>
 							<li>법인, 체크, 기프트 카드는 부분 무이자 할부 제외</li>
 						</ul>
 					</div>
-					</th:block>
 				</div>
-				</th:block>
 			</div>
 		</div>
 	</div>

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

@@ -195,7 +195,7 @@
 									<div class="form_field">
 										<div class="select_custom deal_opt1" disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션1</div>
 												<ul class="list" id="goodsDealOptUp1">
 													<!--  옵션 1 -->
 												</ul>
@@ -205,7 +205,7 @@
 									<div class="form_field">
 										<div class="select_custom deal_opt2" disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션2</div>
 												<ul class="list" id="goodsDealOptUp2">
 													<!--  옵션 2 -->
 												</ul>
@@ -228,7 +228,7 @@
 							</div>
 							<div class="btn_box">
 								<div class="btn_group_block ui_row">
-								<th:block  th:if="${goodsInfo.stockQty > 0}">
+								<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_6">
 										<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 									</div>
@@ -236,7 +236,7 @@
 										<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 									</div>
 								</th:block>
-								<th:block  th:unless="${goodsInfo.stockQty > 0}">
+								<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_12">
 										<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 									</div>
@@ -657,12 +657,12 @@
 		let optCd =  $(obj).attr('optCd');
 		let alertMsg = '';
 		if (ea < minOrdQty) {
-			mcxDialog.alert("최소 주문 가능 수량은 "+minOrdQty+"개 입니다.");
+			alertMsg = minOrdQty+"개 부터 구매 가능합니다.";
 			ea = minOrdQty;
 		}
 
 		if (ea > maxOrdQty) {
-			mcxDialog.alert("최대 주문 가능 수량은 "+maxOrdQty+"개 입니다.");
+			alertMsg = maxOrdQty+"개 까지만 구매 가능합니다.";
 			ea = maxOrdQty;
 		}
 
@@ -779,6 +779,7 @@
 		
 		var params = new Object();
 		params.goodsCd = [[${params.goodsCd}]];
+		params.colorCd = [[${params.colorCd}]];
 		params.viewDt = [[${params.viewDt}]];
 		params.preview = [[${params.preview}]];
 		params.adminYn = [[${params.adminYn}]];

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

@@ -39,7 +39,7 @@
 						</th>
 						<td>
 							<th:block th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
-							<th:block th:if="${goodsInfo.delvFee > 0}" th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>
+							<th:block th:if="${goodsInfo.delvFee > 0}" th:text="|${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}원|" ></th:block>
 							<th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
 						</td>
 					</tr>

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

@@ -222,7 +222,7 @@
 										<div class="select_custom item_opt1"  th:classappend="${'item_opt1_'+status.count +' '+goodsCompose.compsGoodsCd}" 
 																			th:if="${goodsCompose.goodsOption1List != null and !goodsCompose.goodsOption1List.empty}" >
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션1</div>
 												<ul class="list">
 													<th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
 													<li class="selected" th:id="|selfGoodsOpt1${goodsCompose.compsGoodsCd}|" th:if=${optionStatus.first}>선택</li> 
@@ -241,7 +241,7 @@
 									<div class="form_field">
 										<div class="select_custom item_opt2" th:classappend="${'item_opt2_'+status.count +' '+goodsCompose.compsGoodsCd}"  disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션2</div>
 												<ul class="list" th:id="|goodsOpt2${goodsCompose.compsGoodsCd}|" >
 													<!-- 옵션2 -->
 												</ul>
@@ -262,7 +262,7 @@
 									<div class="form_field">
 										<div class="select_custom item_opt1 item_opt1_1" th:classappend="${goodsInfo.goodsCd}" >
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션1</div>
 												<ul class="list">
 													<li class="selected" th:id="|selfGoodsOpt1${goodsInfo.goodsCd}|" >선택</li> 
 													<th:block th:each="goodsOption, optionStatus : ${goodsOption1List}" >
@@ -279,7 +279,7 @@
 									<div class="form_field">
 										<div class="select_custom item_opt2 item_opt2_1" th:classappend="${goodsInfo.goodsCd}"  disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션2</div>
 												<ul class="list" th:id="|goodsOpt2${goodsInfo.goodsCd}|" >
 													<!-- 옵션2 -->
 												</ul>
@@ -298,14 +298,14 @@
 										<span class="title">수량</span>
 									</div>
 									<div class="number_count">
-										<span class="minus" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>
-										<input type="text" name="cea" maxlength="3" style="ime-mode:disabled" th:value="${goodsInfo.minOrdQty}" onblur="fnChangeOrderEa(this)" data-valid-type="numeric">
+										<span class="minus min_val" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>
+										<input type="text" name="cea" maxlength="3" style="ime-mode:disabled" th:value="${goodsInfo.minOrdQty}" readonly >
 										<input type="hidden" name="coption" value=""   th:attr="price=${goodsInfo.currPrice}">
 										<span class="plus" onclick="fnAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>
 									</div>
 								</div>
 							</div>
-							<div class="price_box">
+							<div class="price_box" style="display:none;">
 								<p class="number">
 									총&nbsp;<span id="goodsTotalQty">0</span>개
 								</p>
@@ -317,7 +317,7 @@
 							</div>
 							<div class="btn_box">
 								<div class="btn_group_block ui_row">
-								<th:block  th:if="${goodsInfo.stockQty > 0}">
+								<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_6">
 										<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 									</div>
@@ -325,14 +325,14 @@
 										<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 									</div>
 								</th:block>
-								<th:block  th:unless="${goodsInfo.stockQty > 0}">
+								<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_12">
 										<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 									</div>
 								</th:block>
 								</div>
 							</div>
-							<div class="npay_box">
+							<div class="npay_box" style="display:none;">
 								<a href="">네이버id로 간편구매~</a>
 							</div>
 							<div class="exinfo_box">
@@ -423,8 +423,8 @@
 					</div>
 					<div class="desc_character" th:if="${goodsInfo.goodsSpecialDesc != null  and !goodsInfo.goodsSpecialDesc.empty}"> <!-- 상품특징 -->
 						<span class="tit_desc">상품특징</span>
-						<p class="ptxt01" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsSpecialDesc))}">
-							- 지퍼플러 장식을 더해 완성도를 높여줌
+						<p class="ptxt01">
+							<th:block th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsSpecialDesc))}"></th:block>
 						</p>
 					</div>
 				</div>
@@ -803,6 +803,7 @@
 				$("#cartForm  input[name=cea]").attr("readonly",false);
 				$("#cartForm  input[name=stock]").val(itemCnt);
 	
+				$('.price_box').show();
 				fnSetTotalPrice();
 			}); 
 		}
@@ -811,9 +812,9 @@
 	// 수량 변경 클릭
 	var fnAdjustOrderEa = function(obj) {
 
-		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
+		if("G056_N" == $("#cartForm  input[name=goodsType]").val() && "Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 		}else{
@@ -827,7 +828,7 @@
 			});
 			
 			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
+				mcxDialog.alert("옵션을 선택해 주세요.");
 				return false;
 			}
 		}
@@ -854,9 +855,9 @@
 	//옵션 갯수 변경
 	var fnChangeOrderEa = function() {
 
-		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
+		if("G056_N" == $("#cartForm  input[name=goodsType]").val() && "Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 		}else{
@@ -871,7 +872,7 @@
 			});
 			
 			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
+				mcxDialog.alert("옵션을 선택해 주세요.");
 				return false;
 			}
 		}
@@ -882,12 +883,12 @@
 		let buymax = parseInt($("#cartForm  input[name=maxOrdQty]").val());
 		let alertMsg = '';
 		if (ea < buymin) {
-			alertMsg ="최소 주문 가능 수량은 "+buymin+"개 입니다.";
+			alertMsg = buymin+"개 부터 구매 가능합니다.";
 			ea = buymin;
 		}
 
 		if (ea > buymax) {
-			alertMsg = "최대 주문 가능 수량은 "+buymax+"개 입니다.";
+			alertMsg = buymax+"개 까지만 구매 가능합니다.";
 			ea = buymax;
 		}
 
@@ -918,13 +919,23 @@
 		$('input[name="cea"]').each(function() {
 			let ea = parseInt($(this).val());
 			let addPrice = 0;
-			let target=$('.select_custom.item_opt2');
-			target.each(function() {
-				if (typeof ($(this).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('input[name=opt2]').val())){
-					addPrice += Number($(this).find('input[name=opt2]').attr('addPrice'));	
-				}
-			});	
 			
+			if("G056_N" == $("#cartForm  input[name=goodsType]").val() && "Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
+				let target=$('.opt_size').find('input[name=opt]');
+				target.each(function() {
+					if ($(this).is(":checked")){
+						addPrice += Number($(this).attr('addPrice'));	
+					}
+				});	
+			}else{
+			
+				let target=$('.select_custom.item_opt2');
+				target.each(function() {
+					if (typeof ($(this).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('input[name=opt2]').val())){
+						addPrice += Number($(this).find('input[name=opt2]').attr('addPrice'));	
+					}
+				});	
+			}
 			let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
 
 			totalEa += ea;
@@ -945,8 +956,14 @@
 
 		if (goodsType == 'G056_N'){
 			if (gagajf.isNull($("#cartForm  input[name=optCd2]").val())) {
-				mcxDialog.alert("사이즈를 선택하세요.");
-				return;
+				if("Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
+					mcxDialog.alert("사이즈를 선택해 주세요.");
+					return false;	
+				}else{
+					mcxDialog.alert("옵션을 선택해 주세요.");
+					return false;
+				}
+				
 			}
 		
 			let compsList = [];
@@ -977,7 +994,7 @@
 			});
 			
 			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
+				mcxDialog.alert("옵션을 선택해 주세요.");
 				return false;
 			}
 			
@@ -1149,7 +1166,7 @@
 					}
 					
 				}else{
-					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
+					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1'); 
 				}	
 			}
 			

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

@@ -66,7 +66,10 @@
 /*<![CDATA[*/
 	
 	var fnGetList = function() {
-
+		
+		// 상품문의창 닫기
+		cfCloseLayer('layer_goods_qna_reg')
+	
 		$('#goodsQnaForm  input[name="secretYn"]').val('');
 		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){
 			$('#goodsQnaForm  input[name="secretYn"]').val('N');

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

@@ -582,7 +582,9 @@
 				$('#ulGoodsReview').append(tag);
 			});
 		} else {
-			$('#goodsReviewForm').find('.nodata').show();
+			if ([[${reviewCount}]] > 0){
+				$('#goodsReviewForm').find('.nodata').show();	
+			}
 			$('#goodsReviewForm').find('.ui_row').hide();
 		}
 

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

@@ -3,12 +3,12 @@
 <!--
  *******************************************************************************
  * @source  : GoodsIncludeFormWeb.html
- * @desc    : 상품상세 Include Page - 공용
+ * @desc	: 상품상세 Include Page - 공용
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
+ * VER  DATE		 AUTHOR	  DESCRIPTION
  * ===  ===========  ==========  =============================================
  * 1.0  2021.03.02   eskim	   최초 작성
  *******************************************************************************
@@ -144,16 +144,15 @@
 											th:onclick="fnSelGoodsDealReview([[${goodsInfo.compsGoodsCd}]])" >
 											<div class="item_prod">
 												<div class="item_state">
-													<a href="#none" class="itemLink">
+													<a href="javascript:void(0);" class="itemLink">
 														<div class="itemPic">
 															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
-														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
-															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
-															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-														</p>
+														 <div class="itemPostCount">
+															 (리뷰 <span><th:block  th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA')  : '9,999+'}"></th:block></span>)
+														 </div>
 													</a>
 													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}"  th:attr="currPrice=${goodsInfo.currPrice}, selfGoodsYn=${goodsInfo.selfGoodsYn}"/>
 												</div>
@@ -195,16 +194,15 @@
 											th:onclick="fnSelGoodsDealQna([[${goodsInfo.compsGoodsCd}]])" >
 											<div class="item_prod">
 												<div class="item_state">
-													<a href="#none" class="itemLink">
+													<a href="javascript:void(0);" class="itemLink">
 														<div class="itemPic">
 															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
-														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
-															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
-															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-														</p>
+														<div class="itemPostCount">
+															(문의 <span><th:block  th:text="${(goodsInfo.goodsQnaCnt <= 9999) ? #numbers.formatInteger(goodsInfo.goodsQnaCnt, 0,'COMMA')  : '9,999+'}"></th:block></span>)
+														</div>
 													</a>
 													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
 												</div>
@@ -246,16 +244,12 @@
 											th:onclick="fnSelGoodsDealDelivery([[${goodsInfo.compsGoodsCd}]])" >
 											<div class="item_prod">
 												<div class="item_state">
-													<a href="#none" class="itemLink">
+													<a href="javascript:void(0);" class="itemLink">
 														<div class="itemPic">
 															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
-														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
-															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
-															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-														</p>
 													</a>
 													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
 												</div>
@@ -353,7 +347,7 @@
 					</div>
 					<div class="btn_box">
 						<div class="btn_group_block ui_row">
-						<th:block  th:if="${goodsInfo.stockQty > 0}">
+						<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 							<div class="ui_col_6">
 								<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 							</div>
@@ -361,7 +355,7 @@
 								<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 							</div>
 						</th:block>
-						<th:block  th:unless="${goodsInfo.stockQty > 0}">
+						<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 							<div class="ui_col_12">
 								<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 							</div>

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

@@ -106,9 +106,7 @@
 			sureBtnClick: function() {
 				gagajf.ajaxFormSubmit($('#goodsQnaDetailForm').prop('action')
 						, $('#goodsQnaDetailForm')
-						, function() {
-							mcxDialog.alert("상품 문의가 등록되었습니다. 빠른 시일 내에 답변드리겠습니다.");
-						}
+						, fnGetList()
 				);
 			}
 		});

+ 14 - 3
src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html

@@ -202,15 +202,26 @@
 			for (let i = 0; i < giftcardUseList.length; i++) {
 				let useGiftcard = giftcardUseList[i];
 				tmtbHtml += '<tr>';
-				tmtbHtml += '<td><span class="tag deepgray">차감</span></td>';
+				if(useGiftcard.gfcdAmt > 0){
+					tmtbHtml += '		<td><span class="tag primary">적립</span></td>';
+				}else{
+					tmtbHtml += '		<td><span class="tag deepgray">차감</span></td>';
+				}
 				tmtbHtml += '<td>';
 				tmtbHtml += '<div class="txt_content">'	+ useGiftcard.goodsNm + '</div>';
 				tmtbHtml += '</td>';
-				tmtbHtml += '<td><span class="amount_minus"> <em>'
-						/* + '-' */
+				if(useGiftcard.gfcdAmt<0){
+					tmtbHtml += '<td><span class="amount_minus"> <em>'
 						+ ' '
 						+ useGiftcard.gfcdAmt.addComma()
 						+ '</em>원';
+				}else{
+					tmtbHtml += '<td><span class="amount_plus"> <em>'
+						+ ' '
+						+ useGiftcard.gfcdAmt.addComma()
+						+ '</em>원';
+				}
+				
 				tmtbHtml += '</span></td>';
 				tmtbHtml += '<td>' + useGiftcard.regDt
 						+ '</td>';

+ 0 - 281
src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html

@@ -1,281 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org"
-	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="web/common/layout/MypageLayoutWeb">
-<!--
- *******************************************************************************
- * @source  : MypagePointForm.html
- * @desc    : 마이페이지 > STYLE24포인트 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2021 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.02.26   csh9191     최초 작성
- *******************************************************************************
- -->
-<body>
-
-<th:block layout:fragment="content">
-<div class="content myPoint"> <!-- 페이지특정 클래스 = myPoint -->
-		<div class="cont_body">
-			<!-- CONT-BODY -->
-			<div class="lnb">
-				<div class="lnb_tit">
-				<h2>마이페이지</h2>
-				</div>
-				<div class="lnb_list">
-					<ul id="mypageLnbList"></ul>
-				</div>
-			</div>
-			<div class="cont">
-				<div class="sec_head">
-					<h3 class="subH1">STYLE 포인트</h3>
-				</div>
-				<div class="sec_body">
-					<div class="highlight_area">
-						<div class="have_amount">
-							<div class="total_amount">
-								나의 보유 포인트&nbsp;<span><em th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</span>
-							</div>
-							<dl>
-								<div>
-									<dt>적립 예정 포인트</dt>
-									<dd><em th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
-								</div>
-								<div>
-									<dt><span class="tag primary_line">D-<em >30</em></span>한 달 이내 소멸 예정</dt>
-									<dd><em th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
-								</div>
-							</dl>
-						</div>
-					</div>
-					<div class="content_area">
-						<div class="taps">
-							<div>
-								<ul>
-									<li id="allPointList"><a href="javascript:void(0);">전체내역</a></li>
-									<li id="accumulatePointList"><a href="javascript:void(0);">적립내역</a></li>
-									<li id="usePointList"><a href="javascript:void(0);">사용내역</a></li>
-								</ul>
-							</div>
-						</div>
-						<div class="select_box">
-							<div class="form_field">
-								<div class="select_custom month">
-									<div class="combo">
-										<input type="hidden" name="pointDate" value="0" id="pointDate"/>
-										<div class="select"></div>
-										<ul id="searchDt" class="list">
-											
-										</ul>
-									</div>
-								</div>
-							</div>
-						</div>
-						<!-- 데이터 있을 시 -->
-						<div class="list_box">
-							<div class="tbl type5">
-								<table>
-									<colgroup>
-										<col width="10%">
-										<col width="12%">
-										<col width="42%">
-										<col width="18%">
-										<col width="18%">
-									</colgroup>
-									<thead>
-										<tr>
-											<th scope="col"><span class="sr-only">증감여부</span></th>
-											<th scope="col">사유</th>
-											<th scope="col">내용</th>
-											<th scope="col">포인트</th>
-											<th scope="col">일자</th>
-										</tr>
-									</thead>
-									<tbody id="pointAjaxList">
-															
-									</tbody>
-								</table>
-							</div>
-						</div>
-						<!-- //데이터 있을 시 -->
-						<!-- 데이터 없을 시 -->
-						 <div class="nodata">
-							<div class="txt_box">
-								<p>
-									STYLE 포인트 적립/사용내역이 없습니다.<br>
-	
-								</p>
-							</div>
-						</div> 
-						<!-- //데이터 없을 시 -->	
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-<script th:inline="javascript">
-	let accumulatePointList = [[${accumulatePointList}]];
-	let usePointList = [[${usePointList}]];
-	let allPointList = [[${allPointList}]];
-	let date = [[${date}]];
-	var year = date[0].year;
-	var month = date[0].month;
-	// TODO - 퍼블확정시
-	
-	// 이번년도
-	//동적으로 날짜 년도 append
-	function appendYear() {
-		for (var i = 0; i < date.length; i++) {
-			$("#searchDt").append(	"<li onclick='fnChangeDate(this.value)' value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" + date[i].month + "월 </li>")
-		}
-		$(".select").append("<li class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년" + date[0].month + "월 </li>"); // 현재년도 선택 */ 
-	}
-	appendYear($("#searchDt"));
-
-	// 날짜변경 이벤트
-	var fnChangeDate = function(param) {
-		let url = '/mypage/allpoint/list';
-		
-		
- 		//$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
- 		//var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
- 		
- 		// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
- 		var data = {};
- 		if(typeof param == 'undefined'){
- 			data.searchDt = year.toString() + "" + month.toString();
- 		}else{
- 			data.searchDt = param;
- 		}
-		var jsonData = JSON.stringify(data);
-		
-		gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
-
-						accumulatePointList = result.accumulatePointList;
-						usePointList = result.usePointList;
-						allPointList = result.allPointList;
-						// 클릭상태 확인
-						if($("#accumulatePointList").hasClass("active")){
-							$("#accumulatePointList").click();
-							// 첫화면 전체내역 조회
-							fnGetPointTableInfo(result.accumulatePointList);
-						}else if($("#usePointList").hasClass("active")){
-							$("#usePointList").click();
-							fnGetPointTableInfo(usePointList);
-						}else if($("#allPointList").hasClass("active")) {
-							$("#allPointList").click();
-							fnGetPointTableInfo(allPointList);
-						}
-						
-		});
-	}
-	
-	// HTML 그리기
-	var fnGetPointTableInfo = function(param) {
-		$('.nodata').hide();
-		let tag = "";
-		if(param != null && param.length > 0){
-			$.each(param, function(idx,item){
-				tag += '<tr>';
-				tag += '	<td>';
-				if(item.pntAmt > 0){
-					tag += '		<span class="tag primary">적립</span>';
-				}else{
-					tag += '		<span class="tag deepgray">차감</span>';
-				}
-				
-				tag += '	</td>';
-				tag += '	<td>'+item.occurGb+'</td>';
-				tag += '	<td>';
-				tag += '		<div class="txt_content">'+ item.occurDtlDesc + '</div>';
-				tag += '	</td>';
-				tag += '	<td>';
-				if(item.pntAmt > 0){
-					tag += '		<span class="amount_plus">';
-					tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
-					tag += '		</span>';
-				}else{
-					tag += '		<span class="c_primary">';
-					tag += '			<em>'+item.pntAmt+'</em>P';
-					tag += '		</span>';
-				}
-				
-				tag += '	</td>';
-				tag += '	<td>'+item.pntUploadDt;
-				tag += '	</td>';
-				tag += '</tr>		';
-			});
-		}else{
-			$('.nodata').show();
-			
-		}
-		
-		$("#pointAjaxList").html(tag);
-	}
-	
-	// 전체내역 조회
-	$("#allPointList").click(function(){
-
- 		$("#accumulatePointList").removeClass("active");
- 		$("#usePointList").removeClass("active");
- 		
- 		$("#allPointList").addClass("active");
- 		//$("#plusMinus").text("증감/차감");
- 		
- 		fnGetPointTableInfo(allPointList);
-	});
-	
-	// 적립내역 조회
-	$("#accumulatePointList").click(function(){
-
- 		$("#allPointList").removeClass("active");
- 		$("#usePointList").removeClass("active");
- 		
- 		$("#accumulatePointList").addClass("active");
- 		//$("#plusMinus").text("증감");
-		
- 		fnGetPointTableInfo(accumulatePointList);
-	});
-	
-	// 사용내역 조회
-	$("#usePointList").click(function(){
-		
-		$("#accumulatePointList").removeClass("active");
-		$("#allPointList").removeClass("active");
-		
-		$("#usePointList").addClass("active");
-		//$("#plusMinus").text("차감");
-		
-		fnGetPointTableInfo(usePointList);
-	});
-	
-	$(document).ready(function() {
-		// 전체내역 표시
- 		$("#allPointList").trigger("click");
-		// 마이페이지 LNB 설정
-		fnSetMypageLnbList(5);
-		
-		// 마이페이지 location 설정
-		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
-		
-		
-
-		// 셀렉트박스 활성화
-		$('.select_custom').each(function(index) {
-			var selecter01 = new sCombo($(this));
-		});
-
-		// 셀렉트박스 데이터 설정
-		fnChangeDate();
-
-	});
-
-</script>
-</th:block>
-
-</body>
-</html>

+ 169 - 127
src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html

@@ -19,171 +19,212 @@
 <body>
 
 <th:block layout:fragment="content">
-	<div class="my_cont">
-		<div class="sec_head">
-			<h3>STYLE24 포인트</h3>
-		</div>
-		<div class="sec_body">
-			<div class="save_area mypage_coupon">
-				<p>사용 가능한 보유 포인트<strong th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></strong>P</p>
-				<ul>
-					<li>적립 예정 포인트 <span>
-						<th:block th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></th:block>P
-					</span></li>
-					<li>한달 이내 소멸 예정 <span>
-						<th:block th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></th:block>P
-					</span></li>
-				</ul>
+<div class="content myPoint"> <!-- 페이지특정 클래스 = myPoint -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+				<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
 			</div>
-			<div class="my_tab coupon_tab">
-				<ul>
-					<li><a href="javascript:void(0);" id="allPointList">전체내역</a></li>
-					<li><a href="javascript:void(0);" id="accumulatePointList">적립내역</a></li>
-					<li><a href="javascript:void(0);" id="usePointList">사용내역</a></li>
-				</ul>
-	<!-- 								<div class="form_field"> -->
-	<!-- 									<select id="searchDt" name="searchDt" onchange="fnSearchDate(this);"> -->
-	<!-- 									</select>  -->
-	<!-- 								</div> -->
-				<div class="form_field">
-					<div class="select_custom type1">
-						<div class="combo">
-							<input type="hidden" name="pointDate" value="0"/>
-							<div class="select"></div> <!-- 셀렉박스 -->
-								<ul id="searchDt" class="list" style="width:200px; margin:0 auto">
+			<div class="cont">
+				<div class="sec_head">
+					<h3 class="subH1">STYLE 포인트</h3>
+				</div>
+				<div class="sec_body">
+					<div class="highlight_area">
+						<div class="have_amount">
+							<div class="total_amount">
+								나의 보유 포인트&nbsp;<span><em th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</span>
+							</div>
+							<dl>
+								<div>
+									<dt>적립 예정 포인트</dt>
+									<dd><em th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+								</div>
+								<div>
+									<dt><span class="tag primary_line">D-<em >30</em></span>한 달 이내 소멸 예정</dt>
+									<dd><em th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+								</div>
+							</dl>
+						</div>
+					</div>
+					<div class="content_area">
+						<div class="taps">
+							<div>
+								<ul>
+									<li id="allPointList"><a href="javascript:void(0);">전체내역</a></li>
+									<li id="accumulatePointList"><a href="javascript:void(0);">적립내역</a></li>
+									<li id="usePointList"><a href="javascript:void(0);">사용내역</a></li>
 								</ul>
+							</div>
+						</div>
+						<div class="select_box">
+							<div class="form_field">
+								<div class="select_custom month">
+									<div class="combo">
+										<input type="hidden" name="pointDate" value="0" id="pointDate"/>
+										<div class="select"></div>
+										<ul id="searchDt" class="list">
+											
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+						<!-- 데이터 있을 시 -->
+						<div class="list_box">
+							<div class="tbl type5">
+								<table>
+									<colgroup>
+										<col width="10%">
+										<col width="12%">
+										<col width="42%">
+										<col width="18%">
+										<col width="18%">
+									</colgroup>
+									<thead>
+										<tr>
+											<th scope="col"><span class="sr-only">증감여부</span></th>
+											<th scope="col">사유</th>
+											<th scope="col">내용</th>
+											<th scope="col">포인트</th>
+											<th scope="col">일자</th>
+										</tr>
+									</thead>
+									<tbody id="pointAjaxList">
+															
+									</tbody>
+								</table>
+							</div>
 						</div>
+						<!-- //데이터 있을 시 -->
+						<!-- 데이터 없을 시 -->
+						 <div class="nodata">
+							<div class="txt_box">
+								<p>
+									STYLE 포인트 적립/사용내역이 없습니다.<br>
+	
+								</p>
+							</div>
+						</div> 
+						<!-- //데이터 없을 시 -->	
 					</div>
 				</div>
 			</div>
-			<div class="order_list">
-				<section class="order_row">
-					<div class="tbl point_tbl track_tbl type2">
-						<table>
-							<colgroup>
-								<col width="150px">
-								<col width="660px">
-								<col width="*">
-								<col width="200px">
-							</colgroup>
-							<thead>
-								<tr>
-									<th>사유</th>
-									<th>내용</th>
-									<th id="plusMinus"></th>
-									<th>일자</th>
-								</tr>
-							</thead>
-							<tbody id="pointAjaxList">
-							</tbody>
-						</table>
-					</div>
-				</section>
-			</div>
 		</div>
 	</div>
 <script th:inline="javascript">
 	let accumulatePointList = [[${accumulatePointList}]];
 	let usePointList = [[${usePointList}]];
 	let allPointList = [[${allPointList}]];
-
-	// select 날짜 생성
-	var date = new Date();
-	var year = date.getFullYear();
-	var month = date.getMonth() +1;
-
+	let date = [[${date}]];
+	var year = date[0].year;
+	var month = date[0].month;
 	// TODO - 퍼블확정시
-	var oneYearAgo = year -1;
-	var twoYearAgo = year -2;
 	
 	// 이번년도
-	for(var i = 1;i <= 12; i++){
-		if(i < 10 && i != month){
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
-		}
-		else if(i < 10 && i == month){
-			//셀렉트박스 이번 달 표시설정
-			$('.select').append("<li style='pointer-events: none' onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
-		}
-		else if(i > 9 && i != month){
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
-		}
-		else if(i > 9 && i == month){
-			$('.select').append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + ""  + i +"'>" + year + "년" + " " + i + "월" +"</li>");
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
+	//동적으로 날짜 년도 append
+	function appendYear() {
+		for (var i = 0; i < date.length; i++) {
+			$("#searchDt").append(	"<li onclick='fnChangeDate(this.value)' value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" + date[i].month + "월 </li>")
 		}
+		$(".select").append("<li class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년" + date[0].month + "월 </li>"); // 현재년도 선택 */ 
 	}
+	appendYear($("#searchDt"));
 
 	// 날짜변경 이벤트
 	var fnChangeDate = function(param) {
 		let url = '/mypage/allpoint/list';
 		
- 		$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
- 		var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
- 		
- 		if(10 > month){
- 			month = "0" + month;
- 		}
+		
+ 		//$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
+ 		//var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
  		
  		// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
- 		if(pointData == null){
- 			pointData = year + "" + month;
+ 		var data = {};
+ 		if(typeof param == 'undefined'){
+ 			data.searchDt = year.toString() + "" + month.toString();
+ 		}else{
+ 			data.searchDt = param;
  		}
- 		
-		let data = {};
-		
-		data.searchDt = pointData;
-		
- 		console.log(data);
-		
 		var jsonData = JSON.stringify(data);
 		
 		gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
+
 						accumulatePointList = result.accumulatePointList;
 						usePointList = result.usePointList;
 						allPointList = result.allPointList;
-						
 						// 클릭상태 확인
-						if($("#accumulatePointList").hasClass("on")){
+						if($("#accumulatePointList").hasClass("active")){
 							$("#accumulatePointList").click();
-						}else if($("#usePointList").hasClass("on")){
+							// 첫화면 전체내역 조회
+							fnGetPointTableInfo(result.accumulatePointList);
+						}else if($("#usePointList").hasClass("active")){
 							$("#usePointList").click();
-						}else if($("#allPointList").hasClass("on")) {
+							fnGetPointTableInfo(usePointList);
+						}else if($("#allPointList").hasClass("active")) {
 							$("#allPointList").click();
+							fnGetPointTableInfo(allPointList);
 						}
-						// 첫화면 전체내역 조회
-						fnGetPointTableInfo();
+						
 		});
 	}
 	
 	// HTML 그리기
 	var fnGetPointTableInfo = function(param) {
+		$('.nodata').hide();
 		let tag = "";
-		$.each(param, function(idx,item){
-			tag +='<tr>';
-			tag +='<td>'+ item.occurGb + '</td>';
-			tag += '<td class="t_l pl40">'+ item.occurDtlDesc + '</td>';
-			// 증감 : 파랑, 차감 : 빨강으로 표시
-			if(item.pntAmt > 0){
-				tag += '<td class="c_blue">'+ item.pntAmt + '</td>';
-			}else{
-				tag += '<td class="c_primary">'+ item.pntAmt + '</td>';
-			}
-			tag += '<td>'+ item.pntUploadDt + '</td>';
-			tag += '</tr>';
-		});
+		if(param != null && param.length > 0){
+			$.each(param, function(idx,item){
+				tag += '<tr>';
+				tag += '	<td>';
+				if(item.pntAmt > 0){
+					tag += '		<span class="tag primary">적립</span>';
+				}else{
+					tag += '		<span class="tag deepgray">차감</span>';
+				}
+				
+				tag += '	</td>';
+				tag += '	<td>'+item.occurGb+'</td>';
+				tag += '	<td>';
+				tag += '		<div class="txt_content">'+ item.occurDtlDesc + '</div>';
+				tag += '	</td>';
+				tag += '	<td>';
+				if(item.pntAmt > 0){
+					tag += '		<span class="amount_plus">';
+					tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
+					tag += '		</span>';
+				}else{
+					tag += '		<span class="c_primary">';
+					tag += '			<em>'+item.pntAmt+'</em>P';
+					tag += '		</span>';
+				}
+				
+				tag += '	</td>';
+				tag += '	<td>'+item.pntUploadDt;
+				tag += '	</td>';
+				tag += '</tr>		';
+			});
+		}else{
+			$('.nodata').show();
+			
+		}
+		
 		$("#pointAjaxList").html(tag);
 	}
 	
 	// 전체내역 조회
 	$("#allPointList").click(function(){
 
- 		$("#accumulatePointList").removeClass("on");
- 		$("#usePointList").removeClass("on");
+ 		$("#accumulatePointList").removeClass("active");
+ 		$("#usePointList").removeClass("active");
  		
- 		$("#allPointList").addClass("on");
- 		$("#plusMinus").text("증감/차감");
+ 		$("#allPointList").addClass("active");
+ 		//$("#plusMinus").text("증감/차감");
  		
  		fnGetPointTableInfo(allPointList);
 	});
@@ -191,11 +232,11 @@
 	// 적립내역 조회
 	$("#accumulatePointList").click(function(){
 
- 		$("#allPointList").removeClass("on");
- 		$("#usePointList").removeClass("on");
+ 		$("#allPointList").removeClass("active");
+ 		$("#usePointList").removeClass("active");
  		
- 		$("#accumulatePointList").addClass("on");
- 		$("#plusMinus").text("증감");
+ 		$("#accumulatePointList").addClass("active");
+ 		//$("#plusMinus").text("증감");
 		
  		fnGetPointTableInfo(accumulatePointList);
 	});
@@ -203,27 +244,28 @@
 	// 사용내역 조회
 	$("#usePointList").click(function(){
 		
-		$("#accumulatePointList").removeClass("on");
-		$("#allPointList").removeClass("on");
+		$("#accumulatePointList").removeClass("active");
+		$("#allPointList").removeClass("active");
 		
-		$("#usePointList").addClass("on");
-		$("#plusMinus").text("차감");
+		$("#usePointList").addClass("active");
+		//$("#plusMinus").text("차감");
 		
 		fnGetPointTableInfo(usePointList);
 	});
 	
 	$(document).ready(function() {
+		// 전체내역 표시
+ 		$("#allPointList").trigger("click");
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(5);
 		
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
 		
-		// 전체내역 표시
- 		$("#allPointList").trigger('click');
+		
 
 		// 셀렉트박스 활성화
-		$('.select_custom.type1').each(function(index) {
+		$('.select_custom').each(function(index) {
 			var selecter01 = new sCombo($(this));
 		});
 

+ 24 - 4
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -372,7 +372,12 @@ if(image.length>0){
 	html += '            <div class="swiper-wrapper">';
 	for (var i = 0; i < image.length; i++) {
 		html += '                	<div class="swiper-slide">';
-		html += '                    	<img alt="" src="'+ imgUrl + image[i].itemVal +'">';
+		if (image[i].linkOpenGb == 'M') {
+			html += '                    	<a href="http://'+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 += '                	</div>';
 	}
 	html += '            </div>';
@@ -404,7 +409,13 @@ if(goods1.length>0){
 			html += '	<div>';
 			html += '        <h4>';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-				html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				console.log("template[i].linkOpenGb"+ template[i].linkOpenGb);
+				if (template[i].linkOpenGb == 'M') { //본창
+					html += '        <a href="http://'+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>';
+				}
+				
 			}else{
 				html += '        <a href="javascript:void(0)">'+template[i].title+'</a>';
 			}
@@ -469,7 +480,11 @@ if(goods2.length>0){
 			html += '	<div>';
 			html += '        <h4>';
 				if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-					html+='            <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+'<i class="ico_arrow"></i></a>';
+					if (template[i].linkOpenGb == 'M') { //본창
+						html += '        <a href="http://'+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>';
+					}
 				}else{
 					html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
 				}
@@ -536,8 +551,13 @@ if(goods4.length>0){
 			html += '<div class="cont_head">';
 			html += '<div>';
 			html += '        <h4>';
+			console.log(template[i].linkOpenGb );
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-				html+='            <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				if (template[i].linkOpenGb == "M") { //본창
+					html += '        <a href="http://'+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>';
+				}
 			}else{
 				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
 			}

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

@@ -61,6 +61,7 @@ var fnViewStock = function(obj, goodsCd, optCd, optCd1, optCd2,  minOrdQty, maxO
 			$("#cartForm  input[name=cea]").attr("readonly",false);
 			$("#cartForm  input[name=stock]").val(itemCnt);
 
+			$('.price_box').show();
 			fnSetTotalPrice();
 			
 			// 모바일에서 작업해야함
@@ -151,6 +152,9 @@ var fnEpCouponDownCallBack = function(){
 	//cfCloseLayer('epCouponPop');  //dim 이 안없어져요
 }
 
+//****************상품상세  end **********************************
+
+//****************상품리스트  start **********************************
 var categoryGoodsList = [];
 var cnt = 1;
 var email = '';
@@ -224,5 +228,97 @@ var fnCategoryGoodsInfiniteScrollInit = function(){
 	$("#listBox").html("");
 }
 
+var filterHtml = '';
+var filterStatHtml = '';
 
-//****************상품상세  end **********************************
+// 상품상세 필터 조회
+var filterSel = function (obj, gubun, staus, sizeGb){
+	let $obj = $(obj);
+	if(staus=='on'){
+		$(obj).attr('onclick','filterSel(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{
+		$(obj).attr('onclick','filterSel(this,\''+gubun+'\',\'on\',\'\');');
+
+		let tag = '';
+		if(gubun=='color'){
+			tag += '<span id="'+$obj.attr('data-id').replace('#','')+'">';
+			if($obj.attr('data-id')=='#FFFFFF'){
+				tag += '	<span class="pdColor-color" style="background-color: #'+$obj.attr('data-id')+';border:1px solid #aaa;" value="'+$obj.attr('data-id')+'"></span>';
+			}else{
+				tag += '	<span class="pdColor-color" style="background-color: #'+$obj.attr('data-id')+'" value="'+$obj.attr('data-id')+'"></span>';
+			}
+			tag += '	<a href="javascript:void(0);" class="filter_delete" onclick="fnDeleteFilter(this,\''+gubun+'\');"></a >';
+			tag += '</span>';
+		}else{
+			tag += '<span>'+$obj.attr('data-id');
+			if(!gagajf.isNull(sizeGb)){
+				tag += '<a href="javascript:void(0);" class="filter_delete" onclick="fnDeleteFilter(this,\''+gubun+'\',\'on\',\''+sizeGb+'\');"></a >';
+			}else{
+				tag += '<a href="javascript:void(0);" class="filter_delete" onclick="fnDeleteFilter(this,\''+gubun+'\',\'on\',\'\');"></a >';
+			}
+			tag += '</span>';
+		}
+
+		$("#filterData").append(tag);
+	}
+
+	fnFilterSet(gubun, sizeGb);
+}
+
+var fnFilterSet = function (searchId, sizeGb){
+	fnCategoryGoodsInfiniteScrollInit();
+	$("#searchGoodsForm input:hidden[name="+searchId+"Search]").remove();
+	var tag = '';
+	if(searchId=='size'){
+		//$('#filterForm #sizeLi'+sizeGb).find('input[name='+searchId+']:checked').each(function(idx,item){
+		$('#filterForm input[name='+searchId+']:checked').each(function(){
+			//console.log('idx::::'+item);
+			tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).val()+'"/>\n';
+			$("#searchGoodsForm").append(tag);
+		});
+	}else{
+		$('#filterForm input[name='+searchId+']:checked').each(function(){
+			tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).val()+'"/>\n';
+			$("#searchGoodsForm").append(tag);
+		});
+	}
+
+
+	fnGoodsListSearch();
+}
+
+// 상품상세 필터 삭제
+var fnDeleteFilter = function (obj, gubun, sizeGb){
+	$("#"+gubun+"FilterDiv > ul > li").each(function(idx,item) {
+		if(gubun == 'size'){
+			$("#sizeLi"+sizeGb+" .size_btn").each(function (){
+				if($(obj).closest("span").text() == $(this).find('input').attr('data-id')){
+					$(this).find('input').click();
+				}
+			});
+		}else if(gubun == 'color'){
+			if($(obj).closest("span").attr('id') == $(this).find('input').attr('data-id').trim()){
+				$(this).find('input').click();
+			}
+		}else{
+			if($(obj).closest("span").text() == $(this).find('input').attr('data-id')){
+				$(this).find('input').click();
+			}
+		}
+	});
+
+	$(obj).closest("span").remove();
+}
+
+//****************상품리스트  end **********************************

+ 5 - 3
src/main/webapp/ux/pc/css/layout.css

@@ -1530,7 +1530,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.faq .quick_list ul li {width: 19.99%; height: 49.9%; text-align: center; border-left: 1px solid #ddd; border-bottom: 1px solid #ddd;}
 	.faq .quick_list ul li:nth-child(1),.faq .quick_list ul li:nth-child(6) {border-left:none;}
 	.faq .quick_list ul li:nth-child(6),.faq .quick_list ul li:nth-child(7),.faq .quick_list ul li:nth-child(8),.faq .quick_list ul li:nth-child(9),.faq .quick_list ul li:nth-child(10) {border-bottom: none;}
-	.faq .quick_list ul li a {display: flex; display: -ms-flexbox; justify-content: center; width:100%; height: 100%; line-height:26px; font-size:16px; font-weight: 200; align-items: center; color:#222; letter-spacing:-0.025em;padding: 0 25px;}
+	.faq .quick_list ul li a {display: flex; display: -ms-flexbox; justify-content: center; word-break: keep-all; overflow: hidden; width:100%; height: 100%; line-height:26px; font-size:16px; font-weight: 200; align-items: center; color:#222; letter-spacing:-0.025em;padding: 0 15px;}
 	.faq .search_wrap {margin-bottom:60px;}
 	.faq .search_wrap .faq_search {height:190px; background:#f5f5f5; padding:50px; box-sizing:border-box; text-align:center;}
 	.faq .search_wrap .faq_search .search_box {display:inline-block; position:relative; width:600px; padding-right:50px; border-bottom:2px solid #222; box-sizing: border-box; text-align:left;}
@@ -1541,7 +1541,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.faq .fold_nav {width:100%;}
 	.faq .fold_nav ul {display: flex; display: -ms-flexbox; flex-wrap: wrap; margin-top:-12px}
 	.faq .fold_nav ul li {margin:12px 12px 0 0;}
-	.faq .fold_nav ul li a {display:inline-block;padding:15px 22px 13px;border: 1px solid #ddd;font-size: 16px;font-weight: 300;line-height: 1; letter-spacing:-0.025em;}
+	.faq .fold_nav ul li a {display:inline-block;padding:15px 22px;border: 1px solid #ddd;font-size: 16px;font-weight: 300;line-height: 1; letter-spacing:-0.025em;}
 	.faq .fold_nav ul li a.on {position: relative; background: #222; color:#fff; border: 1px solid #222;}
 	.faq .fold_nav ul li a.on::after {content:''; position: absolute; width:0; height: 0; bottom:-1px; right:-1px; border-bottom: 13px solid #fff; border-left: 13px solid transparent;}
 	.faq .foldGroup {margin-top:50px}
@@ -1813,7 +1813,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.stamp_event .event_benefit {margin-top:80px;}
 	.stamp_event .event_benefit .title {color:#222; font-size:30px; font-weight:500; text-align:center;}
 	.stamp_event .event_benefit .benefit_con {margin-top:40px; text-align:center;}
-	.stamp_event .event_benefit .benefit_con ul{display: flex;margin: -6px auto;width: 1200px;background: #f5f5f5;}
+	.stamp_event .event_benefit .benefit_con ul{margin: -6px auto;width: 1200px;background: #f5f5f5;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;}
 	.stamp_event .event_benefit .benefit_con li{width: 24%;height: 125px;margin:40px 0;position:relative;}
 	.stamp_event .event_benefit .benefit_con li::after{content: ''; display: inline-block;width: 1px;height: 100%;padding: 0;margin: 0;background: #e4e4e4;position: absolute;right: 0;top: 0;}
 	.stamp_event .event_benefit .benefit_con li:last-child::after{content: ''; display: inline-block; width:0;}
@@ -2582,6 +2582,8 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd_detail .thumb {display:block; position:relative; width:100%; height:0px; line-height:0; font-size:0; padding-top:150%; overflow:hidden;background:#f5f5f5;background: #ffffff;border: 1px solid #f5f5f5;box-sizing: content-box;}
 	.pd_detail .thumb img,
 	.pd_detail .thumb video {position:absolute; left:0; top:50%; width:100%; transform:translateY(-50%) ; z-index:2;}
+	.pd_detail .movbox {position: relative;height: 0;padding-top: 100%;padding-bottom:50.25%;overflow: hidden;transition: all 300ms ease;transform: scale(1);}
+	.pd_detail .movbox iframe{position: absolute;left: 0;right: 0;top: 0;bottom: 0;width: 100%;height: 100%;z-index: 1;}
 	.pd_detail .btn_popup {display:inline-block; padding:0px; box-sizing:border-box;}
 	.pd_detail .btn_popup span {color:#888; font-size:12px; font-weight:200; border-bottom:1px solid #888; /*vertical-align:top;*/}
 

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

@@ -138,7 +138,7 @@ var cfnGoToPage = function(page, ithrCd) {
  * @since  : 2021/02/09
  * @author : jsshin
  */
-var cfnOpenCellphoneCertify = function (redirectUrl, custparams) {
+var cfnOpenCellphoneCertify = function (redirectUrl, custParams) {
 	var actionUrl = _frontUrl + "/customer/nice/cellphone/form";
 	var popupWidth = 420;
 	var popupHeight = 720;
@@ -150,8 +150,8 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custparams) {
 		console.log('redirectUrl', redirectUrl);
 		if (!gagajf.isNull(redirectUrl)) {
 			actionUrl = actionUrl + "?redirectUrl=" + redirectUrl;
-			if (!gagajf.isNull(custparams)) {
-				actionUrl = actionUrl + "&custparams=" + custparams;
+			if (!gagajf.isNull(custParams)) {
+				actionUrl = actionUrl + "&custParams=" + custParams;
 			}
 			document.location.href = actionUrl;
 		}
@@ -695,7 +695,7 @@ function cfGoodsQng(goodsCd) {
 	var Param = new Object();
 	var str = '<div class="pd_pop full_pop pd_qnalist_pop" id="layer_goods_qna"></div>';
 	if ("P" != _frontGb){
-		str = '<div class="modal pop_full fade pd_pop pd_qnalist_pop"  data-id="layer_infinite" id="layer_goods_qna" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+		str = '<div class="modal pop_full fade pd_pop pd_qnalist_pop" id="layer_goods_qna" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
 	}
 
 	if ($('#layer_goods_qna').length == 0) {
@@ -963,6 +963,7 @@ function cfnPutWishList(a) {
 				//		}
 				//	});
 				}
+				fnGetWishList();
 			} else if (result.status == "중복") {
 				Msg = '이미 등록 되어있습니다.';
 			} else {
@@ -984,6 +985,7 @@ function cfnPutWishList(a) {
 			if (result.status == "200") {
 				Msg = '삭제 되었습니다.';
 				$(a).removeClass('active');
+				fnGetWishList();
 			} else {
 				Msg = '오류로 인해 처리되지 않았습니다.';
 			}

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