Browse Source

Merge branch 'develop' into eskim

Conflicts:
	src/main/java/com/style24/front/biz/web/TsfMypageController.java
eskim 5 years ago
parent
commit
c2d4b300d8

+ 11 - 19
src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -1,17 +1,9 @@
 package com.style24.front.biz.dao;
 
-import java.util.Collection;
-
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.BrandGroup;
-import com.style24.persistence.domain.Cate1;
-import com.style24.persistence.domain.Cate2;
-import com.style24.persistence.domain.Cate3;
-import com.style24.persistence.domain.Cate4;
-import com.style24.persistence.domain.Cate4Srch;
-import com.style24.persistence.domain.Cate5;
-import com.style24.persistence.domain.Contents;
-import com.style24.persistence.domain.GnbTab;
+import com.style24.persistence.domain.*;
+
+import java.util.Collection;
 
 /**
  * 전시 Dao
@@ -23,31 +15,31 @@ import com.style24.persistence.domain.GnbTab;
 public interface TsfDisplayDao {
 
 	/**
-	 * GNB 목록
-	 * @param gnbTab - GNB탭 정보
+	 * GNB 브랜드그룹 목록
+	 * @param contents - 컨텐츠 정보
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<GnbTab> getGnbTabList(GnbTab gnbTab);
+	Collection<BrandGroup> getGnbBrandGroupList(Contents contents);
 
 	/**
-	 * 컨텐츠 목록
-	 * @param contents - 컨텐츠 정보
+	 * GNB탭 목록
+	 * @param gnbTab - GNB탭 정보
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<Contents> getContentsList(Contents contents);
+	Collection<GnbTab> getGnbTabList(GnbTab gnbTab);
 
 	/**
-	 * GNB 브랜드그룹 목록
+	 * 컨텐츠 목록
 	 * @param contents - 컨텐츠 정보
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<BrandGroup> getGnbBrandGroupList(Contents contents);
+	Collection<Contents> getContentsList(Contents contents);
 
 	/**
 	 * 카테고리1 목록

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

@@ -1,6 +1,9 @@
 package com.style24.front.biz.dao;
 
+import java.util.Collection;
+
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.GiftCard;
 
 /**
  * 상품권 Dao
@@ -11,4 +14,30 @@ import com.style24.core.support.annotation.ShopDs;
 @ShopDs
 public interface TsfGiftcardDao {
 
+	/**
+	 * 상품권정보 조회
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 12
+	 */	
+	GiftCard getGiftcardInfo(GiftCard giftcard);
+	
+	/**
+	 * 상품권 사용 정보 조회
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 12
+	 */	
+	Collection<GiftCard> getGiftcardUseList(GiftCard giftcard);
+	
+	/**
+	 * 상품권 보유 정보 조회
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 12
+	 */	
+	Collection<GiftCard> getGiftcardOwnList(GiftCard giftcard);
 }

+ 13 - 47
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -7,6 +7,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import com.style24.core.biz.service.TscEnvsetService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -197,7 +198,6 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 15
 	 */
 	public boolean getCustomerFindByCiCount(String ci) {
-		TscSession.setAttribute("maskingYn","Y");
 		Customer customer = new Customer();
 		customer.setCi(ci);
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
@@ -221,6 +221,7 @@ public class TsfCustomerService {
 		customer.setCi(ci);
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData();
+
 		return customerDao.getCustomerInfo(customer);
 	}
 
@@ -238,52 +239,8 @@ public class TsfCustomerService {
 		customer.setHypenCellPhone(); // 010-0000-0000
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData();
-		return customerDao.getCustomerInfo(customer);
-	}
-
-	/**
-	 * 고객 가입 확인
-	 * @param customer - ci, 휴대폰
-	 * @return 가입 수
-	 * @author jsshin
-	 * @since 2021. 02. 18
-	 */
-	public GagaMap getJoinCustomerValidation(Customer customer) {
-		GagaMap result = new GagaMap();
-		TscSession.setAttribute("maskingYn","Y");
-		boolean isFind = false; //가입된 고객이 있으면 true 아니면 false
-		Customer custInfo;
-
-		if (StringUtils.isBlank(customer.getCi())) {
-			throw new IllegalStateException("안심본인인증을 사용할 수 없습니다. 다시 시도해주세요(CI 데이터 없음)");
-		}
-
-		if (StringUtils.isBlank(customer.getCellPhnno())) {
-			throw new IllegalStateException("안심본인인증을 사용할 수 없습니다. 다시 시도해주세요(휴대폰 번호 없음)");
-		}
-
-		// CI로 가입된 고객 있는지 확인
-		custInfo = getCustomerFindByCi(customer.getCi());
-
-		if (custInfo != null) {
-			isFind = true;
-			result.setBoolean("isFind", isFind);
-			result.setString("maskingCustId", custInfo.getMaskingCustId());
-			return result;
-		}
-
-		// 휴대폰 번호로 가입된 고객 있는지 확인
-		custInfo = getCustomerFindByCellPhnno(customer.getCellPhnno());
-
-		if (custInfo != null) {
-			isFind = true;
-			result.setBoolean("isFind", isFind);
-			result.setString("maskingCustId",custInfo.getMaskingCustId());
-			return result;
-		}
 
-		result.setBoolean("isFind", isFind);
-		return result;
+		return customerDao.getCustomerInfo(customer);
 	}
 
 	/**
@@ -296,7 +253,6 @@ public class TsfCustomerService {
 	@Transactional("shopTxnManager")
 	public boolean saveJoinCustomer(Customer customer) {
 		boolean isJoin = true;
-		// 1. validation
 		customer.setHypenCellPhone();
 		customer.encryptData();
 		customer.setEncodedPasswd(passwordEncoder.encodeSha256(customer.getPasswd()));
@@ -578,7 +534,9 @@ public class TsfCustomerService {
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.setCustId(custId);
 		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+
 		maskingCustId = MaskingUtils.id(maskingCustId);
+
 		return maskingCustId;
 	}
 
@@ -595,7 +553,9 @@ public class TsfCustomerService {
 		customer.setEmail(email);
 		customer.encryptData();
 		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+
 		maskingCustId = MaskingUtils.id(maskingCustId);
+
 		return maskingCustId;
 	}
 
@@ -611,8 +571,11 @@ public class TsfCustomerService {
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.setCellPhnno(cellPhnno);
 		customer.encryptData();
+
 		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+
 		maskingCustId = MaskingUtils.id(maskingCustId);
+
 		return maskingCustId;
 	}
 
@@ -628,8 +591,11 @@ public class TsfCustomerService {
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.setCi(ci);
 		customer.encryptData();
+
 		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+
 		maskingCustId = MaskingUtils.id(maskingCustId);
+
 		return maskingCustId;
 	}
 

+ 36 - 56
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -1,24 +1,16 @@
 package com.style24.front.biz.service;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Service;
-
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfDisplayDao;
 import com.style24.front.support.env.TsfConstants;
-import com.style24.persistence.domain.BrandGroup;
-import com.style24.persistence.domain.Cate1;
-import com.style24.persistence.domain.Cate2;
-import com.style24.persistence.domain.Cate3;
-import com.style24.persistence.domain.Cate4;
-import com.style24.persistence.domain.Cate4Srch;
-import com.style24.persistence.domain.Contents;
-
+import com.style24.persistence.domain.*;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  * 전시 Service
@@ -34,61 +26,49 @@ public class TsfDisplayService {
 	private TsfDisplayDao displayDao;
 
 	/**
-	 * 컨텐츠 목록
+	 * GNB 브랜드그룹 목록
 	 * @param contents - 컨텐츠 정보
 	 * @return
 	 * @author gagamel
+	 * @since 2021. 3. 11
+	 */
+	public Collection<BrandGroup> getGnbBrandGroupList(Contents contents) {
+		return displayDao.getGnbBrandGroupList(contents);
+	}
+
+	/**
+	 * GNB 탭 목록
+	 * @param gnbTab - GNB탭 정보
+	 * @return
+	 * @author gagamel
 	 * @date 2021. 3. 11
 	 */
-	public Collection<Contents> getContentsList(Contents contents) {
-		return displayDao.getContentsList(contents);
+	public Collection<GnbTab> getGnbTapList(GnbTab gnbTab) {
+		// GNB 탭 목록
+		Collection<GnbTab> tapList = displayDao.getGnbTabList(gnbTab);
+
+		if (tapList != null && !tapList.isEmpty()) {
+			for (GnbTab tab : tapList) {
+				if (tab.getContentsType().equals("C") || tab.getContentsType().equals("O")) { // 컨텐츠유형:카테고리, 아울렛
+					gnbTab.setCateList(this.getCategoryList(TsfConstants.CateGb.BYITEM.value(), tab.getCate1No()));
+				}
+			}
+		}
+
+		return tapList;
 	}
 
 	/**
-	 * GNB 브랜드그룹 목록
+	 * 컨텐츠 목록
 	 * @param contents - 컨텐츠 정보
 	 * @return
 	 * @author gagamel
-	 * @since 2021. 3. 11
+	 * @date 2021. 3. 11
 	 */
-	public Collection<BrandGroup> getGnbBrandGroupList(Contents contents) {
-		return displayDao.getGnbBrandGroupList(contents);
+	public Collection<Contents> getContentsList(Contents contents) {
+		return displayDao.getContentsList(contents);
 	}
 
-//	/**
-//	 * GNB 탭 목록
-//	 * @param gnbTab - GNB탭 정보
-//	 * @return
-//	 * @author gagamel
-//	 * @date 2021. 3. 11
-//	 */
-//	public Collection<Contents> getGnbTapList(GnbTab gnbTab) {
-//		this.getGnbBrandGroupList(contents);
-//
-//		// GNB 탭 목록
-//		Collection<GnbTab> tapList = displayDao.getGnbTabList(gnbTab);
-//
-//		if (tapList != null && !tapList.isEmpty()) {
-//			for (GnbTab tap : tapList) {
-//				if (tap.getContentsType().equals("B")) { // 컨텐츠유형:브랜드
-//					// 캐주얼 브랜드그룹 목록
-//					contents.setCasualBrandGroupList(displayDao.getBrandGroupList(tap.getStrVar2()));
-//
-//					// 골프 브랜드그룹 목록
-//					contents.setGolfBrandGroupList(displayDao.getBrandGroupList(tap.getStrVar3()));
-//
-//					// 키즈 브랜드그룹 목록
-//					contents.setKidsBrandGroupList(displayDao.getBrandGroupList(tap.getStrVar4()));
-//				} else if (tap.getContentsType().equals("C")) { // 컨텐츠유형:카테고리
-//					contents.setCateList(this.getCategoryList(TsfConstants.CateGb.BYITEM.value(), Integer.parseInt(tap.getStrVar2())));
-////					contents.
-//				}
-//			}
-//		}
-//
-//		return tapList;
-//	}
-
 	/**
 	 * 카테고리 목록
 	 * @param cateGb - 카테고리구분

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

@@ -1,9 +1,13 @@
 package com.style24.front.biz.service;
 
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.style24.front.biz.dao.TsfGiftcardDao;
+import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.GiftCard;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -19,5 +23,51 @@ public class TsfGiftcardService {
 
 	@Autowired
 	private TsfGiftcardDao giftcardDao;
+	
+	/**
+	 * 상품권정보 조회
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 12
+	 */	
+	public GiftCard getGiftcardInfo(GiftCard giftcard) {
+		
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		giftcard.setCustNo(custNo);
+		
+		return giftcardDao.getGiftcardInfo(giftcard);		
+	}
+	
+	/**
+	 * 상품권 사용 정보 조회
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 12
+	 */	
+	public Collection<GiftCard> getGiftcardUseList(GiftCard giftcard){
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		giftcard.setCustNo(custNo);
+		
+		return giftcardDao.getGiftcardUseList(giftcard);
+	}
+	
+	/**
+	 * 상품권 보유 조회
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 12
+	 */	
+	public Collection<GiftCard> getGiftcardOwnList(GiftCard giftcard){
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		giftcard.setCustNo(custNo);
+		
+		return giftcardDao.getGiftcardOwnList(giftcard);
+	}
 
 }

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

@@ -591,18 +591,22 @@ public class TsfCustomerController extends TsfBaseController {
 	 * 가입처리
 	 *
 	 * @param customer - 고객정보
+	 * @param request - 자동로그인
+	 * @param session - 세션 저장된 내용삭제
 	 * @return GagaMap - 결과정보
 	 * @author jsshin
 	 * @since 2021. 02. 18
 	 */
 	@PostMapping("/join/save")
 	@ResponseBody
-	public GagaMap saveJoinCustomer(@RequestBody Customer customer, HttpServletRequest request) {
+	public GagaMap saveJoinCustomer(@RequestBody Customer customer, HttpServletRequest request, HttpSession session) {
 		GagaMap result = new GagaMap();
 
 		// 1.세션에 인코딩된 데이터를 가져온다.
 		String encData = TscSession.getAttribute("encData");
 		customer.setEncData(encData);
+		session.removeAttribute("encData");
+
 		GagaMap authInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
 
 		// 2.인증통해 받은 데이터 매핑

+ 39 - 25
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -1,20 +1,23 @@
 package com.style24.front.biz.web;
 
-import java.util.HashMap;
-
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.front.biz.service.TsfDisplayService;
+import com.style24.front.support.controller.TsfBaseController;
+import com.style24.persistence.domain.BrandGroup;
+import com.style24.persistence.domain.Contents;
+import com.style24.persistence.domain.GnbTab;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.front.biz.service.TsfDisplayService;
-import com.style24.front.support.controller.TsfBaseController;
-
-import lombok.extern.slf4j.Slf4j;
+import java.util.Collection;
+import java.util.HashMap;
 
 /**
  * 전시 Controller
@@ -48,24 +51,35 @@ public class TsfDisplayController extends TsfBaseController {
 		return mav;
 	}
 
-//	/**
-//	 * GNB 탭 목록
-//	 * @param contents - 컨텐츠 정보
-//	 * @return
-//	 * @throws Exception
-//	 * @author gagamel
-//	 * @since 2020. 3. 11
-//	 */
-//	@GetMapping("/gnb/tap/list")
-//	@ResponseBody
-//	public Collection<Contents> getGnbTapList(Contents contents) {
-//		contents.setContentsLoc("STAB001");
-//
-//		// GNB 브랜드그룹 목록
-//		displayService.getGnbBrandGroupList(contents);
-//
-//		return displayService.getGnbTapList(contents);
-//	}
+	/**
+	 * GNB탭 > 브랜드그룹 목록
+	 * @param contents - 컨텐츠 정보
+	 * @return
+	 * @throws Exception
+	 * @author gagamel
+	 * @since 2020. 3. 11
+	 */
+	@GetMapping("/gnb/brand/group/list")
+	@ResponseBody
+	public Collection<BrandGroup> getGnbBrandGroupList(Contents contents) {
+		contents.setContentsLoc("STAB001");
+		return displayService.getGnbBrandGroupList(contents);
+	}
+
+	/**
+	 * GNB 탭 목록
+	 * @param gnbTab - GNB탭 정보
+	 * @return
+	 * @throws Exception
+	 * @author gagamel
+	 * @since 2020. 3. 11
+	 */
+	@GetMapping("/gnb/tap/list")
+	@ResponseBody
+	public Collection<GnbTab> getGnbTapList(GnbTab gnbTab) {
+		gnbTab.setGtabGb("C"); // 공통GNB
+		return displayService.getGnbTapList(gnbTab);
+	}
 
 //	/**
 //	 * 전체 카테고리 목록

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

@@ -35,6 +35,7 @@ import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.WishList;
@@ -630,4 +631,51 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 	
+	
+	/**
+	 * 마이페이지 상품권화면
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 12
+	 */
+	@GetMapping({"/gift/card/form"})
+	public ModelAndView mypageGiftcardForm(GiftCard giftcard) {
+		ModelAndView mav = new ModelAndView();
+		// 상품권 기본정보
+		mav.addObject("giftcardInfo", giftcardService.getGiftcardInfo(giftcard));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageGiftcardForm"));
+
+		return mav;
+	}
+	
+	/**
+	 * 마이페이지 상품권 사용 리스트
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 12
+	 */
+	@PostMapping("/gift/use/list")
+	@ResponseBody
+	public GagaMap getGiftcardUseList(@RequestBody GiftCard giftcard) {
+		GagaMap result = new GagaMap();
+		result.set("giftcardUseList",giftcardService.getGiftcardUseList(giftcard));
+		return result;
+	}
+	
+	/**
+	 * 마이페이지 상품권 보유 리스트
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 12
+	 */
+	@PostMapping("/gift/own/list")
+	@ResponseBody
+	public GagaMap getGiftcardOwnList(@RequestBody GiftCard giftcard) {
+		GagaMap result = new GagaMap();
+		result.set("giftcardOwnList",giftcardService.getGiftcardOwnList(giftcard));
+		return result;
+	}
 }

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

@@ -1,12 +1,10 @@
 package com.style24.persistence.domain;
 
-import java.util.Collection;
-
 import com.style24.persistence.TscBaseDomain;
-
-import lombok.Builder;
 import lombok.Data;
 
+import java.util.Collection;
+
 /**
  * 컨텐츠 Domain
  * 
@@ -15,7 +13,6 @@ import lombok.Data;
  */
 @SuppressWarnings("serial")
 @Data
-@Builder
 public class Contents extends TscBaseDomain {
 
 	private Integer preContentsSq;	// 컨텐츠미리보기일련번호
@@ -58,10 +55,6 @@ public class Contents extends TscBaseDomain {
 	private String preview;			// 미리보기여부
 	private int maxRow;				// 최대ROW
 
-	private Collection<BrandGroup> casualBrandGroupList;	// 캐주얼브랜드그룹목록
-	private Collection<BrandGroup> golfBrandGroupList;		// 골프브랜드그룹목록
-	private Collection<BrandGroup> kidsBrandGroupList;		// 키즈브랜드그룹목록
-
 	private Collection<Cate1> cateList;	// 카테고리목록
 
 }

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

@@ -1,12 +1,10 @@
 package com.style24.persistence.domain;
 
-import java.util.Collection;
-
 import com.style24.persistence.TscBaseDomain;
-
-import lombok.Builder;
 import lombok.Data;
 
+import java.util.Collection;
+
 /**
  * 컨텐츠 Domain
  * 
@@ -15,7 +13,6 @@ import lombok.Data;
  */
 @SuppressWarnings("serial")
 @Data
-@Builder
 public class GnbTab extends TscBaseDomain {
 
 	private Integer preGtabSq;		// GNB탭미리보기일련번호
@@ -33,10 +30,6 @@ public class GnbTab extends TscBaseDomain {
 	private String viewDt;			// 미리보기일시
 	private String preview;			// 미리보기여부
 
-	private Collection<BrandGroup> casualBrandGroupList;	// 캐주얼브랜드그룹목록
-	private Collection<BrandGroup> golfBrandGroupList;		// 골프브랜드그룹목록
-	private Collection<BrandGroup> kidsBrandGroupList;		// 키즈브랜드그룹목록
-
 	private Collection<Cate1> cateList;	// 카테고리목록
 
 }

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

@@ -13,6 +13,42 @@
 		       ) ORIGINAL
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 	</sql>
+
+	<!-- GNB 브랜드그룹 목록 -->
+	<select id="getGnbBrandGroupList" parameterType="Contents" resultType="BrandGroup">
+		/* TsfDisplay.getGnbBrandGroupList */
+		SELECT B.STR_TITLE1     AS TITLE
+		     , A.BRAND_GROUP_NO
+		     , CASE WHEN A.DISP_NM_LANG = 'EN' THEN A.BRAND_GROUP_ENM
+		            ELSE A.BRAND_GROUP_KNM
+		       END              AS BRAND_GROUP_NM
+		     , A.LOGO_FILE_NM
+		     , B.DISP_ORD
+		FROM   TB_BRAND_GROUP A
+		<choose>
+		    <when test='preview != null and preview == "Y"'>
+		     , TB_CONTENTS_PREVIEW B
+		    </when>
+		    <otherwise>
+		     , TB_CONTENTS B
+		    </otherwise>
+		</choose>
+		WHERE  A.BRAND_GROUP_NO = B.STR_VAR1
+		AND    A.USE_YN = 'Y'
+		AND    B.CONTENTS_LOC = #{contentsLoc}
+		<choose>
+		    <when test='preview != null and preview == "Y"'>
+		AND    B.DISP_STDT <![CDATA[<=]]> STR_TO_DATE(#{viewDt},'%Y%m%d%H%i%S')
+		AND    B.DISP_EDDT <![CDATA[>=]]> STR_TO_DATE(#{viewDt},'%Y%m%d%H%i%S')
+		ORDER  BY B.DISP_ORD, B.PRE_CONTENTS_SQ
+		    </when>
+		    <otherwise>
+		AND    B.DISP_STDT <![CDATA[<=]]> NOW()
+		AND    B.DISP_EDDT <![CDATA[>=]]> NOW()
+		ORDER  BY B.DISP_ORD, B.CONTENTS_SQ
+		    </otherwise>
+		</choose>
+	</select>
 	
 	<!-- GNB탭 목록 -->
 	<select id="getGnbTabList" parameterType="GnbTab" resultType="GnbTab">
@@ -195,43 +231,7 @@
 		LIMIT #{maxRow}
 		</if>
 	</select>
-	
-	<!-- GNB 브랜드그룹 목록 -->
-	<select id="getGnbBrandGroupList" parameterType="Contents" resultType="BrandGroup">
-		/* TsfDisplay.getGnbBrandGroupList */
-		SELECT B.STR_TITLE1     AS TITLE
-		     , A.BRAND_GROUP_NO
-		     , CASE WHEN A.DISP_NM_LANG = 'EN' THEN A.BRAND_GROUP_ENM
-		            ELSE A.BRAND_GROUP_KNM
-		       END              AS BRAND_GROUP_NM
-		     , A.LOGO_FILE_NM
-		     , B.DISP_ORD
-		FROM   TB_BRAND_GROUP A
-		<choose>
-		    <when test='preview != null and preview == "Y"'>
-		     , TB_CONTENTS_PREVIEW B
-		    </when>
-		    <otherwise>
-		     , TB_CONTENTS B
-		    </otherwise>
-		</choose>
-		WHERE  A.BRAND_GROUP_NO = B.STR_VAR1
-		AND    A.USE_YN = 'Y'
-		AND    B.CONTENTS_LOC = 'STAB001'
-		<choose>
-		    <when test='preview != null and preview == "Y"'>
-		AND    B.DISP_STDT <![CDATA[<=]]> STR_TO_DATE(#{viewDt},'%Y%m%d%H%i%S')
-		AND    B.DISP_EDDT <![CDATA[>=]]> STR_TO_DATE(#{viewDt},'%Y%m%d%H%i%S')
-		ORDER  BY B.DISP_ORD, B.PRE_CONTENTS_SQ
-		    </when>
-		    <otherwise>
-		AND    B.DISP_STDT <![CDATA[<=]]> NOW()
-		AND    B.DISP_EDDT <![CDATA[>=]]> NOW()
-		ORDER  BY B.DISP_ORD, B.CONTENTS_SQ
-		    </otherwise>
-		</choose>
-	</select>
-	
+
 	<!-- 카테고리1 목록 -->
 	<select id="getCategory1List" parameterType="Cate4Srch" resultType="Cate1">
 		/* TsfDisplay.getCategory1List */

+ 73 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml

@@ -2,6 +2,79 @@
 <!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.TsfGiftcardDao">
 
+	<!-- 상품권 기본정보  -->
+	<select id="getGiftcardInfo" parameterType="GiftCard" resultType="GiftCard">
+		<!-- TsfGiftcard.getGiftcardInfo -->
+		SELECT SUM(CG.RM_GFCD_AMT) AS USE_GIFT    				/*사용가능한 보유 금액*/
+		      ,(SELECT COUNT(*) 
+		        FROM TB_CUST_GIFTCARD CG2 
+		        WHERE NOW() BETWEEN CG2.USE_ST_DATE AND CG2.USE_EXP_DATE
+		          AND CUST_NO = #{custNo}) AS TOTAL_COUNT 		/*총 상품권 수*/
+		      ,(SELECT COUNT(*)
+				FROM TB_CUST_GIFTCARD CG3
+				WHERE NOW() BETWEEN CG3.USE_ST_DATE AND CG3.USE_EXP_DATE
+				  AND  NOW() BETWEEN DATE_ADD(CG3.USE_EXP_DATE, INTERVAL -1 MONTH) AND USE_EXP_DATE
+				  AND CUST_NO = #{custNo}) AS EXPIRE_COUNT  	/*한달 이내 소멸*/
+		FROM TB_CUST_GIFTCARD CG 
+		WHERE 1=1  
+			AND CUST_NO = #{custNo}
+			AND NOW() BETWEEN CG.USE_ST_DATE AND CG.USE_EXP_DATE
+	</select>
+	
+	<select id="getGiftcardUseList" parameterType="GiftCard" resultType="GiftCard">
+		<!-- TsfGiftcard.getGiftcardUseList -->
+		SELECT A.* 
+		      ,(CASE A.OCCUR_GB WHEN 'G074_11'THEN '+' 
+		                        WHEN 'G074_12'THEN '-'
+		                        WHEN 'G074_13'THEN '+'
+		                        WHEN 'G074_14'THEN '-'
+		                        WHEN 'G074_15'THEN '-'
+		                        WHEN 'G074_16'THEN '-'
+		                        WHEN 'G074_17'THEN '+'
+		                        WHEN 'G074_18'THEN '+'
+		                        WHEN 'G074_19'THEN '-'
+		       END) AS BALANCE
+		      ,(CASE A.OCCUR_GB WHEN 'G074_11'THEN '상품권 등록'        
+                         WHEN 'G074_12'THEN '상품권 사용'       
+                         WHEN 'G074_13'THEN '상품권 사용취소'     
+                         WHEN 'G074_14'THEN '상품권 유효기간만료'   
+                         WHEN 'G074_15'THEN '상품권 파기'       
+                         WHEN 'G074_16'THEN '상품권 현금전환'     
+                         WHEN 'G074_17'THEN '결품으로 인한 기간 연장'
+                         WHEN 'G074_18'THEN '오환불로 인한 금액추가' 
+                         WHEN 'G074_19'THEN '오환불로 인한 금액차감' 
+               END) AS BALANCE_NAME
+		      ,B.GOODS_CD 
+		      ,D.GOODS_NM 
+		FROM TB_CUST_GIFTCARD_HST A LEFT JOIN TB_ORDER_DETAIL B ON A.ORD_DTL_NO = B.ORD_DTL_NO AND A.ORD_NO = B.ORD_NO
+									LEFT JOIN TB_CUST_GIFTCARD C ON A.CUST_GFCD_SQ =C.CUST_GFCD_SQ 
+									LEFT JOIN TB_GOODS D ON B.GOODS_CD = D.GOODS_CD 
+		WHERE 1=1
+		 AND A.CUST_NO = #{custNo}
+		ORDER BY A.REG_DT DESC
+	</select>
+	
+	<select id="getGiftcardOwnList" parameterType="GiftCard" resultType="GiftCard">
+		<!-- TsfGiftcard.getGiftcardOwnList -->
+		 SELECT  CUST_GFCD_SQ
+				 , CUST_NO
+				 , GFCD_NO
+				 , GFCD_NM
+				 , CHG_GFCD_AMT
+				 , US_GFCD_AMT
+				 , RM_GFCD_AMT
+				 , DATE_FORMAT(USE_ST_DATE,'%Y-%m-%d') AS USE_ST_DATE
+		         , DATE_FORMAT(USE_EXP_DATE,'%Y-%m-%d') AS USE_EXP_DATE
+				 , REG_NO
+				 , REG_DT
+				 , UPD_NO
+				 , UPD_DT
+		 FROM TB_CUST_GIFTCARD CG 
+		 WHERE 1=1 
+		  AND CUST_NO = #{custNo}
+	</select>
+	
+	
 	<!-- 페이징을 위한 select절 상단 -->
 	<sql id="selectForPagingHeader">
 		SELECT *

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

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
+	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
  * @source  : GnbWeb.html
@@ -18,28 +18,14 @@
 
 	<!-- head start -->
 	<div class="common_header">
+		<!-- 프로모션 띠 배너 등록 시 노출 -->
 		<div class="hd_top_banner" style="background-color:#fd4801;">
 			<a href="" class="t_bnr">
 				<span style="margin:0 auto;height:60px;line-height:60px;font-size: 20px;font-weight: 600;letter-spacing: -.025em; color:#fff;">APP 수신동의 하면 1만 포인트 증정!</span>
-				<!--<img src="ABC.jpg" alt="프로모션">-->
+				<!--<img src="ABC.jpg" alt="프로모션"/>-->
 			</a>
 		</div>
-	
-<!-- 		<div class="quick_menu_group"> -->
-<!-- 			<div class="area"> -->
-<!-- 				<div> -->
-<!-- 					<span><a href="" title="바로가기">위치테스트1</a></span> -->
-<!-- 					<span><a href="" title="바로가기">위치테스트2</a></span> -->
-<!-- 				</div> -->
-<!-- 				<div class="inr"> -->
-<!-- 					<span><a href="" title="바로가기">로그인</a></span> -->
-<!-- 					<span><a href="" title="바로가기">회원가입</a></span> -->
-<!-- 					<span><a href="" title="바로가기">마이페이지</a></span> -->
-<!-- 					<span><a href="" title="바로가기">고객센터</a></span> -->
-<!-- 					<span><a href="" onclick="AppDownloadPopup();" title="바로가기">앱다운로드</a></span> -->
-<!-- 				</div> -->
-<!-- 			</div> -->
-<!-- 		</div> -->
+		<!-- //프로모션 띠 배너 등록 시 노출 -->
 
 		<div class="area">
 			<div class="logo">
@@ -57,62 +43,50 @@
 				<span><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE);" title="마이페이지 바로가기">마이페이지</a></span>
 			</div>
 		</div>
-		
+
 		<div class="gnb">
 			<!-- nav -->
-			<div class="nav" id="header_area_01">
-				<ul class="bundle" id="nav1" >
-					<!-- [D] 전체메뉴 열림 닫힘 구분 클래스 on -->
-					<li class="all_menu">
-						<a href="#">브랜드</a>
-						<div class="depth_menu">
-							<div style="background:#333; max-width: 1780px;   margin: 0 auto;">
-								<p>브랜드</p>
-								<div class="step1">
-									<ul>
-										<li><a href="#" title="바로가기">1차_1</a></li>
-										<li><a href="#" title="바로가기">1차_2</a></li>
-									</ul>
+			<div class="nav">
+				<ul class="bundle btn_home">
+					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);" class="">홈</a></li>
+				</ul>
+
+				<ul class="bundle">
+					<li class="has_depth">
+						<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_ALL_BRAND);">브랜드</a>
+						<!-- 브랜드_depth -->
+						<div class="depth_menu brand">
+							<div class="head_category">
+								<div class="tit">
+									<p>브랜드</p>
+									<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_ALL_BRAND);" class="more">전체보기</a>
 								</div>
-								<div class="step2">
-									<ul>
-										<li><a href="#" title="바로가기">2차_1</a></li>
-									</ul>
-									<ul>
-										<li><a href="" title="바로가기">3차_1</a></li>
-										<li><a href="" title="바로가기">3차_2</a></li>
-									</ul>
+								<div class="menu" id="divGnbBrandGrp">
 								</div>
 							</div>
 						</div>
 					</li>
 				</ul>
-				<ul class="bundle" id="nav2" >
-					<li><a href="#">여성</a></li>
-					<li><a href="#">남성</a></li>
-					<li><a href="#">유아동</a></li>
-					<li><a href="#">골프</a></li>
-					<li><a href="#">라이프</a></li>
-				</ul>
-				<ul class="bundle" id="nav3">
-					<li class="active" ><a href="#">베스트</a></li>
-					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_SOCIAL_MAIN);" title="핫딜 바로가기">핫딜</a></li>
-					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);" title="기획전 바로가기">기획전</a></li>
-					<li><a href="#">총알배송</a></li>
-					<li><a href="#">아울렛</a></li>
-					<li><a href="#">룩북</a></li>
-					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);" title="기획전 바로가기">이벤트/혜택</a></li>
+				<ul class="bundle" id="divGnbTab">
 				</ul>
 			</div>
 			<!-- // nav -->
 
+			<div class="more_category">
+				<a href="" class="btn_more_cate">더보기</a>
+				<div class="cate_list">
+					<ul id="ulGnbTab">
+					</ul>
+				</div>
+			</div>
+
 			<!-- search -->
 			<div class="search">
 				<div class="area">
 					<form id="searchMainForm" name="searchMainForm">
-						<fieldset>  
+						<fieldset>
 							<legend>통합검색</legend>
-							<input type="text" id="search" name="search" value="" placeholder="모이몰론, 남들보다 빠르게! 신상 check" class="search_input" title="검색어 입력" maxlength="100">								
+							<input type="text" id="search" name="search" value="" placeholder="모이몰론, 남들보다 빠르게! 신상 check" class="search_input" title="검색어 입력" maxlength="100">
 							<div class="search_group" id="ark" style="display: none;">
 								<div id="ark_down" style="position: absolute; display: block; cursor: pointer; top: 3px; left: 366px;"></div>
 								<div id="ark_up" style="position: absolute; display: none; cursor: pointer; top: 3px; left: 366px;"></div>
@@ -185,33 +159,244 @@
 				</div>
 
 				<a href="#" class="btn_ico btn_cart" title="장바구니 바로가기"><i class="ico ico_bag"></i><span class="circle_count">99+</span></a>
-				
+
 			</div>
 			<!-- // search -->
 		</div>
 	</div>
 	<!-- head end -->
 
-<script th:inline="javascript">
-/*<![CDATA[*/
-	/* header minify */
-	$(function(){
-		$(window).scroll(function(){
-			var scroll = $(this).scrollTop();
-			var headerH =  $("#header").height();
-			if ($(window).scrollTop() > headerH){
-				$("#header").addClass("minify");
-				return false;
+	<script th:inline="javascript">
+		/*<![CDATA[*/
+		// GNB탭 > 카테고리
+		let fnGetGnbCategory = function(cateList) {
+			let tag = '';
+
+			if (cateList.length > 0) {
+				$.each(cateList, function(idx1, cate1) {
+					tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
+					tag += '	<a href="javascript:void(0);" onclick="cfnGoToCategory(' + cate1.cate1Nm + ');">' + cate1.cate1Nm + '</a>\n';
+					tag += '	<div class="depth_menu category">\n';
+					tag += '		<div class="head_category">\n';
+					tag += '			<div class="tit">\n';
+					tag += '				<p>' + cate1.cate1Nm + '</p>\n';
+					tag += '				<a href="javascript:void(0);" onclick="cfnGoToCategory(' + cate1.cate1No + ');" class="more">전체보기</a>\n';
+					tag += '			</div>\n';
+
+					if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+						tag += '			<div class="menu">\n';
+						tag += '				<ul class="maintabs">\n';
+
+						$.each(cate1.cate2List, function(idx2, cate2) {
+							tag += '					<li>\n';
+							tag += '						<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate2.cateGb + '\',\'' + cate2.cate1No + '\',\'' + cate2.cate2No + '\');">' + cate2.cate2Nm + '</a>\n';
+
+							if (cate2.leafYn == 'N' && cate2.cate3List.length > 0) {
+								tag += '						<ul class="box_depth2">\n';
+
+								$.each(cate2.cate3List, function(idx3, cate3) {
+									tag += '							<li>\n';
+									tag += '								<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate3.cateGb + '\',\'' + cate3.cate1No + '\',\'' + cate3.cate2No + '\',\'' + cate3.cate3No + '\');">' + cate3.cate3Nm + '</a>\n';
+
+									if (cate3.leafYn == 'N' && cate3.cate4List.length > 0) {
+										tag += '								<ul class="box_depth3">\n';
+
+										$.each(cate3.cate4List, function(idx4, cate4) {
+											tag += '									<li><a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate4.cateGb + '\',\'' + cate4.cate1No + '\',\'' + cate4.cate2No + '\',\'' + cate4.cate3No + '\',\'' + cate4.cate4No + '\');">' + cate4.cate4Nm + '</a></li>\n';
+										});
+
+										tag += '								</ul>\n';
+									}
+
+									tag += '							</li>\n';
+								});
+
+								tag += '						</ul>\n';
+							}
+
+							tag += '					</li>\n';
+						});
+
+						tag += '				</ul>\n';
+						tag += '			</div>\n';
+						tag += '		</div>\n';
+						tag += '	</div>\n';
+					}
+
+					// if (cate1.bannerList.length > 0) {
+					// 	tag += '	<div class="head_banner">\n';
+					// 	tag += '		<div class="tit">\n';
+					// 	tag += '			<p>가을의 신상 만나기</p>\n';
+					// 	tag += '		</div>\n';
+					// 	tag += '		<div class="list">\n';
+					// 	tag += '			<ul class="clear event_con">\n';
+					// 	tag += '				<li>\n';
+					// 	tag += '					<a href="">\n';
+					// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션"></div>\n';
+					// 	tag += '						<div class="txt">\n';
+					// 	tag += '							<p class="tit">2020 FALL COLLECTION 가을에는 이 컬러 2020 FALL COLLECTION 가을에는 이 컬러</p>\n';
+					// 	tag += '						</div>\n';
+					// 	tag += '					</a>\n';
+					// 	tag += '				</li>\n';
+					// 	tag += '				<li>\n';
+					// 	tag += '					<a href="">\n';
+					// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP"></div>\n';
+					// 	tag += '						<div class="txt">\n';
+					// 	tag += '							<p class="tit">FALL NEW ARRIVAL</p>\n';
+					// 	tag += '						</div>\n';
+					// 	tag += '					</a>\n';
+					// 	tag += '				</li>\n';
+					// 	tag += '			</ul>\n';
+					// 	tag += '		</div>\n';
+					// 	tag += '	</div>\n';
+					// }
+
+					tag += '</li>\n';
+				});
 			}
-			else {
-				$("#header").removeClass("minify");
+
+			return tag;
+		}
+
+		// GNB탭 생성
+		let fnCreateGnbTap = function() {
+			$.getJSON('/display/gnb/tap/list'
+				, function(result, status) {
+					if (status == 'success') {
+						if (result.length > 0) {
+							$('#divGnbTab').html('');
+							$('#ulGnbTab').html('');
+
+							$.each(result, function(idx, item) {
+								if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
+									let gnbCate = fnGetGnbCategory(item.cateList);
+									$('#divGnbTab').append(gnbCate);
+									$('#ulGnbTab').append(gnbCate);
+								} else if (item.contentsType == 'L') { // 컨텐츠유형:링크
+									$('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.title + '</a></li>');
+									$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.title + '</a></li>');
+								}
+							});
+						}
+					}
+				});
+		}
+
+		// GNB탭 > 브랜드 생성
+		let fnCreateGnbBrandGroup = function() {
+			$.getJSON('/display/gnb/brand/group/list'
+				, function(result, status) {
+					if (status == 'success') {
+						if (result.length > 0) {
+							$('#divGnbBrandGrp').html('');
+							let tag = '';
+							let prevTitle = '';
+
+							$.each(result, function (idx, item) {
+								if (prevTitle != item.title) {
+									if (idx > 0) {
+										tag += '		</ul>\n';
+										tag += '	</div>\n';
+										tag += '</div>\n';
+									}
+
+									tag += '<div class="row">\n';
+									tag += '	<p>' + item.title + '</p>\n';
+									tag += '	<div class="brand_list swiper-container">\n';
+									tag += '		<ul class="clear swiper-wrapper">\n';
+								} else {
+									tag += '			<li class="swiper-slide">\n';
+									tag += '				<a href="javascript:void(0);" onclick="cfnGoToBrandMain(' + item.brandGroupNo + ');">\n';
+									tag += '					<img src="' + _uploadDefaultUrl + item.logoFileNm + '" alt=""/>\n';
+									tag += '					<span><em>' + item.brandGroupNm + '</em></span>\n';
+									tag += '				</a>\n';
+									tag += '			</li>\n';
+								}
+
+								prevTitle = item.title;
+							});
+
+							tag += '		</ul>\n';
+							tag += '	</div>\n';
+							tag += '</div>\n';
+
+							$('#divGnbBrandGrp').html(tag);
+						}
+
+						fnCreateGnbTap();
+					}
+			});
+		}
+
+		$(document).ready(function() {
+			//검색창 호출
+			$(".common_search").load("sch_layer_pop.html");
+
+			// GNB toggle
+			$(document).on('mouseenter','.common_header .gnb .nav > ul > li',function(e){
+				if(!$(this).hasClass('has_depth')){
+					$('.black_screen').hide();
+					$('.common_header .gnb .depth_menu').hide();
+				} else if($(this).hasClass('has_depth')){
+					$('.black_screen').show();
+					$(this).find('.depth_menu').show();
+					$(this).parents('ul').siblings('ul').find('li.has_depth .depth_menu').hide();
+					$(this).siblings('li.has_depth').find('.depth_menu').hide();
+				}
+			}).on('mouseleave','.common_header .gnb',function(e){
+				$('.black_screen').hide();
+				$('.common_header .gnb .depth_menu').hide();
+			});
+
+			// GNB 하위메뉴
+			$(document).on('mouseenter','.common_header .maintabs li',function(e){
+				if($(this).find('> ul').length > 0){
+					$(this).addClass('on');
+				}
+				$(this).find('> ul').show();
+				$(this).siblings('li').find('> ul').hide();
+			});
+
+			// GNB 더보기
+			$(document).on('click','.more_category .btn_more_cate',function(e){
+				$(this).parent('.more_category').toggleClass('on');
+				$(this).parent('.more_category').find('.cate_list').toggle();
 				return false;
-			}
+			});
+
+			// GNB - 슬라이드 > 브랜드_GNB
+			var brand_gnb_slide = new Swiper('#header .gnb .brand_list', {
+				observer: true,
+				observeParents: true,
+				centeredSlides: false,
+				slidesPerView: 'auto',
+				freeMode:true,
+			});
+
+			//통합검색 - 슬라이드 > 지금 고객님들이 많이 보고 있어요
+			var realtimeItemSwiper = new Swiper('.common_search .realtime_slider .swiper-container', {
+				observer: true,
+				observeParents: true,
+				slidesPerView: 5,
+				spaceBetween: 20,
+				autoplay: {
+					delay: 2500,
+					disableOnInteraction:false,
+				},
+				navigation: {
+					nextEl: '.common_search .realtime_slider .swiper-button-next',
+					prevEl: '.common_search .realtime_slider .swiper-button-prev',
+				},
+				pagination: {
+					el: '.common_search .realtime_slider .swiper-pagination',
+					clickable: true,
+				},
+			});
+
+			fnCreateGnbBrandGroup();
 		});
-	});
-	/* //header minify */
-/*]]>*/
-</script>
+		/*]]>*/
+	</script>
 
 </header>
 

+ 0 - 1
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb2.html

@@ -171,7 +171,6 @@
 			</div>
 			<!-- // nav -->
 
-			<!-- search -->
 			<div class="search">
 				<div class="area">
 					<form id="searchMainForm" name="searchMainForm">

+ 238 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html

@@ -0,0 +1,238 @@
+<!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.25   csh9191     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+<!--  container -->
+	<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.formatInteger(giftcardInfo.useGift,0,'COMMA')}"></strong>원</p>
+				<ul>
+					<li>보유 상품권 <span th:text="${#numbers.formatInteger(giftcardInfo.totalCount,0,'COMMA')} + '장'"></span></li>
+					<li>한달 이내 소멸 예정 <span th:text="${#numbers.formatInteger(giftcardInfo.expireCount,0,'COMMA')} + '장'"></span></li>
+				</ul>
+			</div>
+			<div class="gift_search">
+				<div class="gift_sea_wrap clear">
+					<label for="gift_input">상품권 등록</label>
+					<input type="text" id="gift_input" placeholder="상품권 번호를 입력해주세요.">
+					<button type="button" class="btn btn_dark">등록</button>
+				</div>
+			</div>
+			<div class="com_info_txt">
+				<p class="tit">상품권 등록 안내</p>
+				<ul>
+					<li>상품권은 상품 구매시 현금과 동일하게 사용됩니다.</li>
+					<li>상품권은 등록한 해당 몰에서만 사용이 가능합니다.</li>
+					<li>사용 후 남은 잔액은 상품권 잔액으로 환불되며,유효기간 내에 사용 가능합니다.</li>
+					<li>유효기간이 지난 상품권의 잔액은 자동 소멸됩니다.</li>
+					<li>상품권은 현금성 결제 수단에 포함되어 주문시 포인트 적립이 가능합니다.</li>
+					<li>상품권으로 결제한 금액은 마이페이지>주문상세페이지에서 현금영수증을 발급 받으실 수 있습니다.</li>
+				</ul>
+			</div>
+			<div class="my_tab coupon_tab">
+				<ul>
+					<li><a href="javascript:void(0);" id="SearchUseGiftcard">사용내역</a></li>
+					<li><a href="javascript:void(0);" id="SearchOwnGiftcard">보유 상품권</a></li>
+				</ul>
+				<div class="form_field">
+					<select id="searchDt" onchange="fnChangeDate(this)">
+						
+					</select> 
+				</div>
+			</div>
+			<div id="giftcardList">
+			</div>
+		</div>
+	</div>
+<!-- // CONT-BODY -->					
+<script th:inline="javascript">
+//동적으로 날짜 년도 append
+function appendYear(){
+ 
+    var date = new Date();
+    var year = date.getFullYear();
+    var month = date.getMonth()+1;
+  
+    for(var i=year; i<=year; i++){
+       	for (var j= 1; j <=month; j++) {
+       		$("#searchDt").prepend("<option value='"+year+"-"+j+"'>"+i+"년"+ j +"월 </option>");
+		}
+    }
+	$("#searchDt").find("option:eq(0)").prop("selected", true); // 현재년도 선택
+}
+ 
+appendYear($("#searchDt"));
+
+// 사용내역 조회
+$("#SearchUseGiftcard").click(function(){
+	// class제거 추가
+	$("#SearchOwnGiftcard").removeClass("on");
+	$("#SearchUseGiftcard").addClass("on");
+	$("#giftcardList").attr("class","order_list");
+	
+	let data = {};
+	
+	var jsonData = JSON.stringify(data);
+	
+	$.ajax(
+			{
+				type 	 : "POST",
+				data	 : jsonData,
+				url 	 : '/mypage/gift/use/list',
+				contentType: 'application/json',
+					dataType : 'json',
+				success  : function(result){
+					useGiftcard(result);
+				}
+			}
+	)
+});
+
+function useGiftcard(result) {
+	
+	let giftcardUseList = result.giftcardUseList;
+	
+	let tmtbHtml = "";
+	
+	tmtbHtml += '<section class="order_row mt30">';
+	tmtbHtml += '<div class="tbl track_tbl type2">';
+	tmtbHtml += '<table>';
+	tmtbHtml += '<colgroup>';
+	tmtbHtml += '<col width="750px">';
+	tmtbHtml += '<col width="150px">';
+	tmtbHtml += '<col width="*">';
+	tmtbHtml += '</colgroup>';
+	tmtbHtml += '<thead>';
+	tmtbHtml += '<tr>';
+	tmtbHtml +=	'<th>내용</th>';
+	tmtbHtml += '<th>증감/차감</th>';
+	tmtbHtml += '<th>일자</th>';
+	tmtbHtml += '</tr>';
+	tmtbHtml += '</thead>';
+	tmtbHtml += '<tbody>';
+	
+	
+	for(let i=0; i<giftcardUseList.length; i++){
+		let useGiftcard = giftcardUseList[i];
+		tmtbHtml +='<tr>';
+		if(useGiftcard.goodsNm != null){
+			tmtbHtml +='<td class="t_l pl40">'+ useGiftcard.goodsNm + '</td>';	
+		}else{
+			tmtbHtml +='<td class="t_l pl40">'+ useGiftcard.balanceName + '</td>';	
+		}
+		tmtbHtml += '<td class="c_primary">'+ useGiftcard.balance + ' ' + useGiftcard.gfcdAmt.addComma() + '</td>';
+		tmtbHtml += '<td>'+ useGiftcard.regDt + '</td>';
+		tmtbHtml += '</tr>';
+	}
+	
+	tmtbHtml += '</tbody>';
+	tmtbHtml += '</table>';
+	tmtbHtml += '</div>';
+	tmtbHtml += '</section>';
+	
+	$("#giftcardList").html(tmtbHtml);
+}
+
+// 보유상품권 조회
+$("#SearchOwnGiftcard").click(function(){
+	$("#SearchUseGiftcard").removeClass("on");
+	$("#SearchOwnGiftcard").addClass("on");
+	$("#giftcardList").attr("class","gift_list");
+	
+	let data = {};
+	
+	var jsonData = JSON.stringify(data);
+	
+	$.ajax(
+			{
+				type 	 : "POST",
+				data	 : jsonData,
+				url 	 : '/mypage/gift/own/list',
+				contentType: 'application/json',
+					dataType : 'json',
+				success  : function(result){
+					ownGiftcard(result);
+				}
+			}
+	)
+});
+
+function ownGiftcard(result) {
+	
+	let giftcardOwnList = result.giftcardOwnList;
+	
+	let tmtbHtml2 = "";
+	
+
+	tmtbHtml2 += '<ul class="clear">';
+
+	for(let i=0; i<giftcardOwnList.length; i++){
+		let ownGiftcard = giftcardOwnList[i];
+
+		if(ownGiftcard.rmGfcdAmt > 0){
+			tmtbHtml2 += '<li>';
+		}else{
+			tmtbHtml2 += '<li class="off">';
+		}	
+		tmtbHtml2 += '<div class="gift_shape">';
+		tmtbHtml2 += '<strong>' + ownGiftcard.gfcdNm + '</strong>';
+		tmtbHtml2 += '<div class="gift_price01">' +ownGiftcard.chgGfcdAmt.addComma() + ' 원권' +'</div>';
+		tmtbHtml2 += '<div class="gift_price02">';
+		tmtbHtml2 += '<span class="pr_t">잔액</span><span class="pr_num">'+ownGiftcard.rmGfcdAmt.addComma()+'</span>원'
+		tmtbHtml2 += '<div>';
+		tmtbHtml2 += '<div class="gift_price03">' +ownGiftcard.gfcdNo + '</div>';
+		tmtbHtml2 += '</div>';
+		tmtbHtml2 += '<div class="gift_date">';
+		tmtbHtml2 += '~ <span>' +ownGiftcard.useExpDate + '</span>';
+		tmtbHtml2 += '</div>';
+		tmtbHtml2 += '</li>';
+	}
+	
+	tmtbHtml2 += '</ul>';		
+		
+	$("#giftcardList").html(tmtbHtml2);
+
+}
+
+function fnChangeDate(obj) {
+	console.log(obj);
+}
+
+$(document).ready(function() {
+
+	// 마이페이지 LNB 설정
+	fnSetMypageLnbList(6);
+	
+	// 마이페이지 location 설정
+	fnSetMypageLocation('상품권', '_PAGE_MYPAGE_GIFTCARD');
+	
+	// 전체내역 표시
+	$("#SearchUseGiftcard").trigger('click');
+
+});
+</script>
+</th:block>
+
+</body>
+</html>

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

@@ -82,7 +82,6 @@
 
 <script th:inline="javascript">
 var socialInfo = [[${socialInfo}]];
-console.log(socialInfo);
 
 $(function(){
        /* 핫딜 countDown */

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

@@ -6,6 +6,7 @@ const _PAGE_LOGOUT = _frontUrl + "/logout";	// GNB > 로그아웃
 
 //== 메인 ==/
 const _PAGE_MAIN = _frontUrl + "/display/mall/main/form";	// 몰메인
+const _PAGE_ALL_BRAND = _frontUrl + "/display/all/brand/form";	// 전체 브랜드
 
 //== 고객 ==/
 const _PAGE_CUSTOMER_JOIN_TYPE = _frontUrl + "/customer/join/type/form";							// 고객 > 회원가입 유형