Преглед изворни кода

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

xodud1202 пре 5 година
родитељ
комит
57c3a1ae08
62 измењених фајлова са 2988 додато и 1420 уклоњено
  1. 20 0
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 11 0
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  3. 30 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  4. 31 3
      src/main/java/com/style24/front/biz/service/TsfCounselService.java
  5. 67 13
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  6. 14 0
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  7. 38 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  8. 2 1
      src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java
  9. 14 0
      src/main/java/com/style24/front/biz/web/TsfCommonController.java
  10. 69 6
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  11. 24 0
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  12. 42 11
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  13. 149 73
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  14. 34 8
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  15. 8 3
      src/main/java/com/style24/front/support/security/TsfAuthenticationProvider.java
  16. 11 7
      src/main/java/com/style24/persistence/domain/Counsel.java
  17. 28 0
      src/main/java/com/style24/persistence/domain/Delivery.java
  18. 3 1
      src/main/java/com/style24/persistence/domain/Goods.java
  19. 19 0
      src/main/java/com/style24/persistence/domain/Login.java
  20. 5 0
      src/main/java/com/style24/persistence/domain/Plan.java
  21. 24 0
      src/main/java/com/style24/persistence/domain/WishList.java
  22. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCounsel.xml
  23. 36 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  24. 27 90
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  25. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfLogin.xml
  26. 141 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  27. 81 43
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  28. 6 0
      src/main/resources/config/application-locd.yml
  29. 7 0
      src/main/resources/config/application-locp.yml
  30. 7 0
      src/main/resources/config/application-run.yml
  31. 7 0
      src/main/resources/config/application-tsit.yml
  32. 22 0
      src/main/resources/config/application.yml
  33. 246 0
      src/main/webapp/WEB-INF/views/mob/callcenter/OneToOneQnaFormMob.html
  34. 62 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  35. 37 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/GnbMob.html
  36. 48 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html
  37. 24 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/ScriptsMob.html
  38. 42 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/VariablesMob.html
  39. 47 0
      src/main/webapp/WEB-INF/views/mob/common/layout/CallcenterLayoutMob.html
  40. 27 0
      src/main/webapp/WEB-INF/views/mob/common/layout/ErrorLayoutMob.html
  41. 60 0
      src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaFormWeb.html
  42. 28 38
      src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaRegisterFormWeb.html
  43. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  44. 5 2
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  45. 1 1
      src/main/webapp/WEB-INF/views/web/customer/DormantCertifyCompleteFormWeb.html
  46. 23 2
      src/main/webapp/WEB-INF/views/web/customer/DormantCertifyFormWeb.html
  47. 21 23
      src/main/webapp/WEB-INF/views/web/customer/JoinFormWeb.html
  48. 193 0
      src/main/webapp/WEB-INF/views/web/goods/GoodsDeliveryFormWeb.html
  49. 115 501
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  50. 4 4
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaFormWeb.html
  51. 33 18
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html
  52. 4 4
      src/main/webapp/WEB-INF/views/web/order/OrderCustemerInfoWeb.html
  53. 70 62
      src/main/webapp/WEB-INF/views/web/order/OrderDeliveryAddrInfoWeb.html
  54. 402 247
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  55. 44 20
      src/main/webapp/WEB-INF/views/web/order/OrderFreegiftInfoWeb.html
  56. 74 0
      src/main/webapp/WEB-INF/views/web/order/OrderListInfoWeb.html
  57. 1 1
      src/main/webapp/WEB-INF/views/web/order/OrderNoMemberWeb.html
  58. 215 0
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  59. 26 229
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  60. BIN
      src/main/webapp/images/pc/ico_point_sm.png
  61. 1 1
      src/main/webapp/ux/plugins/gaga/gaga.validation.js
  62. 155 4
      src/main/webapp/ux/style24_link.js

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

@@ -3,6 +3,7 @@ package com.style24.front.biz.dao;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.WishList;
 
 /**
  * 고객(회원) Dao
@@ -75,4 +76,23 @@ public interface TsfCustomerDao {
 	 * @since 2021. 03. 02
 	 */
 	String getCustomerMaxCustId(Customer customer);
+	
+	/**
+	 * 위시리스트 등록
+	 *
+	 * @param wishlist - 위시리스트 정보
+	 * @return
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	void createWishList(WishList wishlist);
+
+	/**
+	 * 위시리스트 삭제처리
+	 *
+	 * @param params - 고객일련번호, 상품코드
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	void deleteWishList(WishList wishList);
 }

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

@@ -5,6 +5,7 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Cate4Srch;
+import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsCompose;
 import com.style24.persistence.domain.GoodsDesc;
@@ -201,5 +202,15 @@ public interface TsfGoodsDao {
 	 * @since 2021. 3. 7
 	 */
 	GoodsSafeNo getGoodsSafeNo(Goods goods);
+	
+	/**
+	 * 상품  배송안내정보
+	 *
+	 * @param goodsCd
+	 * @return
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	Delivery getGoodsDeliveryInfo(String goodsCd);
 
 }

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

@@ -34,5 +34,35 @@ public interface TsfPlanningDao {
 	 * @since 2021.03.05
 	 */
 	int getPlanAllCount(Plan plan);
+	
+	/**
+	 * 기획전 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @date 2021. 3. 8
+	 */
+	Collection<Plan> getPlanList(Plan plan);
+	
+	/**
+	 * 기획전 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @date 2021. 3. 8
+	 */
+	Collection<Plan> getPlanGoodsList(Plan plan);
+
+	/**
+	 * 이벤트 갯수 조회
+	 * 
+	 * @param Plan
+	 * @return int
+	 * @author sowon
+	 * @since 2021.03.08
+	 */
+	int getEventAllCount(Plan plan);
 
 }

+ 31 - 3
src/main/java/com/style24/front/biz/service/TsfCounselService.java

@@ -2,6 +2,7 @@ package com.style24.front.biz.service;
 
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -13,6 +14,8 @@ import com.style24.persistence.domain.Counsel;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.util.GagaStringUtil;
+
 /**
  * 상담(1:1문의) Service
  *
@@ -37,7 +40,19 @@ public class TsfCounselService {
 	public void createOneToOneQna(Counsel counsel) {
 		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
 		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setCellPhnno(TsfSession.getInfo().getCellPhnno());
 		counsel.setEmail(TsfSession.getInfo().getEmail());
+
+		if (StringUtils.isNotBlank(counsel.getFile1SysFileNm())) {
+			counsel.setOrgFileNm1(counsel.getFile1OrgFileNm());
+			counsel.setSysFileNm1(counsel.getFile1SysFileNm());
+		}
+
+		if (StringUtils.isNotBlank(counsel.getFile2SysFileNm())) {
+			counsel.setOrgFileNm2(counsel.getFile2OrgFileNm());
+			counsel.setSysFileNm2(counsel.getFile2SysFileNm());
+		}
+
 		counsel.setRegNo(TsfSession.getInfo().getCustNo());
 		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
 		counselDao.createOneToOneQna(counsel);
@@ -75,7 +90,13 @@ public class TsfCounselService {
 	 * @since 2020. 12. 28
 	 */
 	public Collection<Counsel> getOneToOneQnaList(Counsel counsel) {
-		return counselDao.getOneToOneQnaList(counsel);
+		Collection<Counsel> counselList = counselDao.getOneToOneQnaList(counsel);
+		for (Counsel item : counselList) {
+			item.setQuestContent(GagaStringUtil.replace(item.getQuestContent(), "\r\n", "<br/>"));
+			item.setAnsContent(GagaStringUtil.replace(item.getAnsContent(), "\r\n", "<br/>"));
+		}
+
+		return counselList;
 	}
 
 	/**
@@ -152,6 +173,7 @@ public class TsfCounselService {
 	public void createGoodsQna(Counsel counsel) {
 		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
 		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setCellPhnno(TsfSession.getInfo().getCellPhnno());
 		counsel.setEmail(TsfSession.getInfo().getEmail());
 		counsel.setRegNo(TsfSession.getInfo().getCustNo());
 		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -190,7 +212,13 @@ public class TsfCounselService {
 	 * @since 2020. 12. 24
 	 */
 	public Collection<Counsel> getGoodsQnaList(Counsel counsel) {
-		return counselDao.getGoodsQnaList(counsel);
+		Collection<Counsel> counselList = counselDao.getGoodsQnaList(counsel);
+		for (Counsel item : counselList) {
+			item.setQuestContent(GagaStringUtil.replace(item.getQuestContent(), "\r\n", "<br/>"));
+			item.setAnsContent(GagaStringUtil.replace(item.getAnsContent(), "\r\n", "<br/>"));
+		}
+
+		return counselList;
 	}
 
 	/**
@@ -203,7 +231,7 @@ public class TsfCounselService {
 	public Collection<Counsel> getGoodsQnaListForGoods(Counsel counsel) {
 		return counselDao.getGoodsQnaListForGoods(counsel);
 	}
-	
+
 	/**
 	 * 상품문의 삭제
 	 * @param counsel - 상담정보

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

@@ -1,32 +1,36 @@
 package com.style24.front.biz.service;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.core.support.util.MaskingUtils;
+import com.style24.front.biz.dao.TsfCustomerDao;
 import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Login;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfCustomerDao;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.transaction.annotation.Transactional;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.util.ArrayList;
-import java.util.List;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.security.GagaPasswordEncoder;
 
 /**
  * 고객(회원) Service
@@ -612,7 +616,57 @@ public class TsfCustomerService {
 		return maskingCustId;
 	}
 
+	/**
+	 * 위시리스트 등록
+	 *
+	 * @return void
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public void createWishList(Collection<WishList> wishlist) {
+
+		for (WishList wishInfo : wishlist) {
+			wishInfo.setCustNo(TsfSession.getInfo().getCustNo());
+			wishInfo.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
+			//wishInfo.setIthrCd(GagaCookieUtil.getCookie(TsfSession.getHttpServletRequest(), TsfConstants.CK_PREFIX + "_ithrCd"));
+			//wishInfo.setContentsLoc(GagaCookieUtil.getCookie(TsfSession.getHttpServletRequest(), TsfConstants.CK_PREFIX + "_contentsLoc"));
+			wishInfo.setRegNo(TsfSession.getInfo().getCustNo());
+			customerDao.createWishList(wishInfo);
+		}
+	}
 
+	/**
+	 * 위시리스트 삭제처리
+	 *
+	 * @param paramList - 고객 일련번호
+	 * @return void
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteWishList(Collection<WishList> wishlist) {
 
+		for (WishList wishInfo : wishlist) {
+			wishInfo.setCustNo(TsfSession.getInfo().getCustNo());
+			customerDao.deleteWishList(wishInfo);
+		}
+	}
 
+	/**
+	 * 휴면해제
+	 *
+	 * @param customer - 고객정보
+	 * @return GagaMap - 결과
+	 * @author jsshin
+	 * @since 2021. 03. 08
+	 */
+	public GagaMap releaseDormantCustomer(Customer customer) {
+		GagaMap result = new GagaMap();
+		customer.setRegNo(customer.getCustNo());
+		customer.setUpdNo(customer.getCustNo());
+		boolean isRelase = coreCustomerService.saveDormantCustomerRelease(customer);
+		result.setBoolean("isRelase", isRelase);
+		return result;
+	}
 }

+ 14 - 0
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -12,6 +12,7 @@ import com.style24.front.biz.dao.TsfGoodsDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Cate4Srch;
+import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsCompose;
 import com.style24.persistence.domain.GoodsDesc;
@@ -407,4 +408,17 @@ public class TsfGoodsService {
 	public GoodsSafeNo getGoodsSafeNo(Goods goods) {
 		return goodsDao.getGoodsSafeNo(goods);
 	}
+	
+	/**
+	 * 상품  배송안내정보
+	 * @param goodsCd
+	 * @return
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	public Delivery getGoodsDeliveryInfo(String goodsCd) {
+		return goodsDao.getGoodsDeliveryInfo(goodsCd);
+	}
+	
+	
 }

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

@@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.style24.front.biz.dao.TsfPlanningDao;
+import com.style24.front.support.env.TsfConstants;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Point;
@@ -46,5 +47,42 @@ public class TsfPlanningService {
 	public int getPlanAllCount(Plan plan) {
 		return planningDao.getPlanAllCount(plan);
 	}
+	
+	/**
+	 * 기획전 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 8
+	 */
+	public Collection<Plan> getPlanList(Plan plan) {
+		//plan.setSiteCd(TsfConstants.SITE_CD);
+		return planningDao.getPlanList(plan);
+	}
+	
+	/**
+	 * 기획전 상품 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 8
+	 */
+	public Collection<Plan> getPlanGoodsList(Plan plan) {
+		//plan.setSiteCd(TsfConstants.SITE_CD);
+		return planningDao.getPlanGoodsList(plan);
+	}
+
+	/**
+	 * 이벤트 갯수 조회
+	 * 
+	 * @param Plan
+	 * @author sowon
+	 * @since 2021.03.08
+	 */
+	public int getEvnetAllCount(Plan plan) {
+		return planningDao.getEventAllCount(plan);
+	}
 
 }

+ 2 - 1
src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java

@@ -36,10 +36,11 @@ public class Yes24Login {
 	 */
 	public String getAuthorizeUrl(String state) {
 		String authorizeUrl = "https://www.yes24.com/Templates/FTLogin.aspx";
+		String authorizeUrl2 = "https://www.yes24.com/Templates/FTLoginPartner.aspx";
 		String callBackUrl = "/signin/snsLoginCallback?snsType=YS";
 		StringBuilder apiUrlBuilder = new StringBuilder();
 		String redirectUri = GagaFileUtil.getConcatenationPath(PROTOCOL + TsfSession.getHttpServletRequest().getServerName(), callBackUrl);
-		apiUrlBuilder.append(authorizeUrl)
+		apiUrlBuilder.append(authorizeUrl2)
 				.append("?PID=101582")
 				.append("&ReturnURL=")
 				.append(redirectUri);

+ 14 - 0
src/main/java/com/style24/front/biz/web/TsfCommonController.java

@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import com.style24.front.support.controller.TsfBaseController;
+import com.style24.front.support.security.session.TsfSession;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -171,4 +172,17 @@ public class TsfCommonController extends TsfBaseController {
 		return ufList;
 	}
 
+	/**
+	 * 로그인 체크
+	 *
+	 * @return true:로그인, false:비로그인
+	 * @author eskim
+	 * @since 2021. 3. 08
+	 */
+	@GetMapping("/login/check")
+	@ResponseBody
+	public boolean checkLogin() {
+		return TsfSession.isLogin();
+	}
+
 }

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

@@ -542,21 +542,32 @@ public class TsfCustomerController extends TsfBaseController {
 		GagaMap authInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
 		customer.setCi(authInfo.getString("sCi"));
 		customer.setCellPhnno(authInfo.getString("sMobileNo"));
-		//customer.setCellPhnno("01025906246");
+
 
 		if ("N".equals(authInfo.getString("adult"))) {
 			throw new IllegalStateException("만14세 이상만 회원가입이 가능합니다.");
 		}
 
-		Customer custInfo = customerService.getCustomerFindByCi(customer.getCi());
+		Customer custInfo;
+		custInfo = customerService.getCustomerFindByCi(customer.getCi());	// CI 중복체크
 		if (custInfo != null) {
 			result.setString("maskingCustId", custInfo.getMaskingCustId());
 			result.setBoolean("isFind", true);
-		} else {
-			result.setBoolean("isFind", false);
-			TscSession.setAttribute("encData",customer.getEncData());
+			return result;
 		}
 
+		custInfo = customerService.getCustomerFindByCellPhnno(customer.getCellPhnno());	// 휴대전화 중복체크
+		if (custInfo != null) {
+			result.setString("maskingCustId", custInfo.getMaskingCustId());
+			result.setBoolean("isFind", true);
+			return result;
+		}
+
+		result.setBoolean("isFind", false);
+		result.setString("cellPhnno", customer.getCellPhnno());
+
+		TscSession.setAttribute("encData",customer.getEncData());
+
 		return result;
 	}
 
@@ -634,7 +645,7 @@ public class TsfCustomerController extends TsfBaseController {
 	/**
 	 * 가입완료 페이지
 	 *
-	 * @return GagaMap - 결과정보
+	 * @return ModelAndView - 가입완료 화면
 	 * @author jsshin
 	 * @since 2021. 02. 18
 	 */
@@ -651,5 +662,57 @@ public class TsfCustomerController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 휴면해제 인증화면
+	 *
+	 * @return ModelAndView - 가입완료 화면
+	 * @author jsshin
+	 * @since 2021. 03. 08
+	 */
+	@GetMapping("/dormant/certify/form")
+	public ModelAndView getDormantCeirtyForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName(super.getDeviceViewName("customer/DormantCertifyForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 휴면해제
+	 *
+	 * @return GagaMap - 결과
+	 * @author jsshin
+	 * @since 2021. 03. 08
+	 */
+	@PostMapping("/dormant/release")
+	@ResponseBody
+	public GagaMap releaseDormantCustomer(@RequestBody Customer customer) {
+		String custNo = TsfSession.getAttribute("custNo");
+		if (StringUtils.isBlank(custNo) || StringUtils.isBlank(customer.getEncData())) {
+			throw new IllegalStateException("로그인 후 재인증 해주세요.");
+		}
+		customer.setCustNo(Integer.parseInt(custNo));
+		return customerService.releaseDormantCustomer(customer);
+	}
+
+	/**
+	 * 휴면해제 완료화면
+	 *
+	 * @return ModelAndView - 가입완료 화면
+	 * @author jsshin
+	 * @since 2021. 03. 08
+	 */
+	@GetMapping("/dormant/certify/complete/form")
+	public ModelAndView getDormantCeirtyCompleteForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName(super.getDeviceViewName("customer/DormantCertifyCompleteForm"));
+
+		return mav;
+	}
+
+
+
 
 }

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

@@ -388,4 +388,28 @@ public class TsfGoodsController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 상품상세 -  배송안내 레이어
+	 * @return
+	 * @author eskim
+	 * @since 2021. 3. 8
+	 */
+	@PostMapping("/delivery/layer/{goodsCd}")
+	public ModelAndView goodsDeliveryForm(@PathVariable String goodsCd) {
+		ModelAndView mav = new ModelAndView();
+		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
+		Goods paramsGoods = new Goods();
+		paramsGoods.setGoodsCd(goodsCd);
+		setGoods(paramsGoods);
+		Goods goods = goodsService.getGoodsInfo(paramsGoods);
+		
+		// 배송업체명, 반품비, 교환비, 주소
+		mav.addObject("deliveryInfo", goodsService.getGoodsDeliveryInfo(goodsCd));
+		
+		// 상품 기본정보
+		mav.addObject("goodsInfo", goods);
+
+		mav.setViewName(super.getDeviceViewName("goods/GoodsDeliveryForm"));
+		return mav;
+	}
 }

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

@@ -4,21 +4,16 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscOrderChangeService;
@@ -42,9 +37,13 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
+
 /**
  * 마이페이지 Controller
  * 
@@ -533,8 +532,6 @@ public class TsfMypageController extends TsfBaseController {
 		
 		result.set("accumulatePointList",pointService.getAccumulatePointList(point));
 		
-		log.info("result {}", result);
-		
 		return result;
 	}
 	
@@ -556,8 +553,6 @@ public class TsfMypageController extends TsfBaseController {
 		
 		result.set("usePointList",pointService.getUsePointList(point));
 		
-		log.info("result {}", result);
-		
 		return result;
 	}
 	
@@ -579,8 +574,6 @@ public class TsfMypageController extends TsfBaseController {
 		
 		result.set("allPointList",pointService.getAllPointList(point));
 		
-		log.info("result {}", result);
-		
 		return result;
 	}
 
@@ -598,4 +591,42 @@ public class TsfMypageController extends TsfBaseController {
 		return coreOrderRefundService.cnclRtnRefundAmt(orderList);
 	}
 
+	/**
+	 * 위시리스트 등록처리
+	 *
+	 * @param wishList 
+	 * @return GagaResponse
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@PostMapping("/wish/list/put")
+	@ResponseBody
+	public GagaMap createWishList(@RequestBody Collection<WishList> wishList) throws Exception {
+		GagaMap result = new GagaMap();
+
+		customerService.createWishList(wishList);
+		result.set("status", "200");
+
+		return result;
+	}
+
+	/**
+	 * 위시리스트 삭제처리
+	 *
+	 * @param wishList
+	 * @return GagaResponse
+	 * @throws Exception
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@PostMapping("/wish/list/delete")
+	@ResponseBody
+	public GagaMap deleteWishList(@RequestBody Collection<WishList> wishList) throws Exception {
+		GagaMap result = new GagaMap();
+
+		customerService.deleteWishList(wishList);
+		result.set("status", "200");
+
+		return result;
+	}
 }

+ 149 - 73
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -81,8 +81,6 @@ public class TsfOrderController extends TsfBaseController {
 	public ModelAndView orderNoMember(Order order, RedirectAttributes redirectAttributes) {
 		ModelAndView mav = new ModelAndView();
 		
-		String rtnView = "";
-		
 		// 비회원 주문시 로직 정리
 		// @ web 인 경우에는 고객정보 입력 화면 후 주문서 이동 후 본인인중
 		// @ web 의 경우에는 입력한 고객정보와 인증받은 고객정보가 다른경우 고객정보 업데이트
@@ -92,8 +90,8 @@ public class TsfOrderController extends TsfBaseController {
 		// TODO 임시 장바구니
 		// 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)
 		int[] arr = {11,77,8};
-		order.setCartSqArr(arr);
-		order.setShotDelvYn("Y");
+		order.setCartSqArr(arr);		// 장바구니시퀀스
+		order.setShotDelvUseYn("Y");	// 장바구니총알배송사용여부
 		
 		mav.addObject("order" 	, order);										// 주문정보
 		mav.addObject("isLogin"	, TsfSession.isLogin());						// 로그인여부
@@ -102,8 +100,6 @@ public class TsfOrderController extends TsfBaseController {
 		return mav;
 	}
 	
-	
-	
 	/**
 	 * 주문페이지
 	 *
@@ -112,7 +108,6 @@ public class TsfOrderController extends TsfBaseController {
 	 * @author jsh77b
 	 * @since 2021. 02. 02
 	 */
-	@SuppressWarnings({ "unchecked", "null" })
 	@RequestMapping(value = "/form")
 	public ModelAndView orderForm(Order order) {
 		ModelAndView mav = new ModelAndView();
@@ -142,77 +137,51 @@ public class TsfOrderController extends TsfBaseController {
 			order.setEmail("");
 			
 			order.setDelvAddrNm("");
-			order.setRecipZipcode("");
-			order.setRecipBaseAddr("");
-			order.setRecipDtlAddr("");
+			order.setRecipZipcode("00000");
+			order.setRecipBaseAddr("기본주소정보없음");
+			order.setRecipDtlAddr("상제주소정보없음");
 		}
 
 		// TODO 임시 장바구니
-		// 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)		
-		// 2.1 배송단위별 상품 목록 조회 (장바구니)
+		// 3. 장바구니상품시퀀스 상품목록조회		
+		// 3.1 즉시할인, 다다익선 할인금액 정보 적용 정보
 		Collection<Order> tmtbGoodsApplyList = cartService.getMoreBetterAmtList(order);
 		
-		// 2.1.0 상품금액, 선포인트, 다다익선할인금액
-		GagaMap goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
-		
-		// 2.2 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
-		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
-
-		// 3. 할인구간정보조회
-		// 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
-		GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
+		// 3.2 배송정보조회(장바구니상품목록)
+		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList, order);
 		
-		Collection<Order> goodsCpnList 	= (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
-		Collection<Order> cartCpnList 	= (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
-		
-		// 3.2.1 상품기준 ---> 상품쿠폰 적용된 상품 목록
-		Collection<Order> goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
-		
-		// 3.2.2 장바구니쿠폰기준 ---> 상품목록
-		cartCpnList = coreOrderService.getCartCpnApplyList(tmtbGoodsApplyList, cartCpnList);
-		
-		// 3.3 배송비쿠폰목록 조회
-		Collection<Order> delvCpnList = coreOrderService.getDelvCpnList(order);
+		// 3.3 할인정보조회(상품금액, 선포인트, 다다익선할인금액)
+		GagaMap goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
 
-		Collection<Order> delvFeeCdList = (Collection<Order>) delvOrderMap.get("delvFeeCdList");
+		// 4. 화면설정설정
+		// 4.1 배송정보설정
+		mav.addObject("cartGoodsList"		, tmtbGoodsApplyList);						// 장바구니상품목록(즉시할인, 다다익선적용)
 		
-		// 3.3.1 배소업체기준 ---> 배송비쿠폰
-		delvCpnList = coreOrderService.getDelvCpnApplyList(delvFeeCdList, delvCpnList);
-		
-		// 3.4 고객 보유 포인트 정보 조회
-		//int rmPntAmt = coreOrderService.getCustPointInfo(order);
+		mav.addObject("delvFeeCdCnt"		, delvOrderMap.get("delvFeeCdCnt"));		// 배송정책단위건수
+		mav.addObject("shotCnt" 			, delvOrderMap.get("shotCnt"));				// 자사총알배송상품건수
+		mav.addObject("wmsCnt" 				, delvOrderMap.get("wmsCnt"));				// 자사일반상품건수
+		mav.addObject("shotWmsCnt" 			, delvOrderMap.get("shotWmsCnt"));			// 자사총알,일반상품건수
+		mav.addObject("resCnt" 				, delvOrderMap.get("resCnt"));				// 자사예약상품건수
+		mav.addObject("delvCnt" 			, delvOrderMap.get("delvCnt"));				// 입점업체상품건수
 		
-		// 2.5 고객 보유 상품권 정보 조회
-		//int rmGfcdAmt = coreOrderService.getGiftcardInfo(order);
+		mav.addObject("goodsTotCnt" 		, delvOrderMap.get("goodsTotCnt"));			// 총상품건수
+		mav.addObject("delvAllCartList" 	, delvOrderMap.get("delvAllCartList"));		// 전체배송목록
+		mav.addObject("delvCartGoodsList" 	, delvOrderMap.get("delvCartGoodsList"));	// 장바구니상품목록 sort
+		mav.addObject("sumDelvFee" 			, delvOrderMap.get("sumDelvFee"));			// 배송비합계
 
-		// 101. 상품정보
-		mav.addObject("cartGoodsList"					, tmtbGoodsApplyList);						// 장바구니상품목록 (즉시할인쿠폰적용)
-		mav.addObject("delvTotCnt" 						, delvOrderMap.get("delvTotCnt"));			// 총상품건수
-		mav.addObject("delvFeeTotCnt"					, delvOrderMap.get("delvFeeTotCnt"));		// 총배송타입건수
-		mav.addObject("wmsCnt" 							, delvOrderMap.get("wmsCnt"));				// 자사상품건수
-		mav.addObject("resCnt" 							, delvOrderMap.get("resCnt"));				// 자사예약상품건수
-		mav.addObject("delvCnt" 						, delvOrderMap.get("delvCnt"));				// 입점업체상품건수
+		// 4.2 할인정보(상품금액, 즉시할인, 다다익선, 선포인트, 적립예정포인트) 
+		mav.addObject("orgGoodsSumAmt"		, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
+		mav.addObject("cpn1DcSumAmt"		, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
+		mav.addObject("tmtbDcSumAmt"		, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
+		mav.addObject("prePntDcAmt"			, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
+		mav.addObject("savePntSumAmt"		, goodsDcAmtMap.get("savePntSumAmt"));		// 적립예정포인트합계
 		
-		mav.addObject("shotCartList" 					, delvOrderMap.get("shotCartList"));		// 자사총알배송상품목록
-		mav.addObject("wmsCartList" 					, delvOrderMap.get("wmsCartList"));			// 자사일반배송상품목록
-		mav.addObject("delvCartList" 					, delvOrderMap.get("delvCartList"));		// 입점업체상품목록
-		mav.addObject("resCartList" 					, delvOrderMap.get("resCartList"));			// 자사예약배송상품목록
-		mav.addObject("delvAllCartList" 				, delvOrderMap.get("delvAllCartList"));		// 전체배송목록
-		mav.addObject("sumDelvFee" 						, delvOrderMap.get("sumDelvFee"));			// 배송비합계
+		// 4.3 주문정보
+		mav.addObject("order" 				, order);									// 주문정보(고객정보, 배송지정보, 총알배송사용여부)
 		
-		// 102. 주문정보
-		mav.addObject("order" 							, order);									// 주문정보
-
-		// 103. 할인정보
-		mav.addObject("tmtbGoodsApplyList"				, tmtbGoodsApplyList);						// 다다익선상품 적용목록
-		mav.addObject("orgGoodsSumAmt"					, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
-		mav.addObject("cpn1DcSumAmt"					, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
-		mav.addObject("tmtbDcSumAmt"					, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
-		mav.addObject("prePntDcAmt"						, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
-
-		//mav.addObject("rmPntAmt"						, rmPntAmt);								// 고객포인트정보
-		//mav.addObject("rmGfcdAmt"						, rmGfcdAmt);								// 고객상품권정보
-		mav.addObject("savePntSumAmt"					, goodsDcAmtMap.get("savePntSumAmt"));		// 적립예정포인트합계
+		// 4.5 해외구매대행, 주문제작
+		mav.addObject("foreignBuyYn"		, delvOrderMap.get("foreignBuyYn"));		// 해외구매대행여부
+		mav.addObject("orderMadeYn"			, delvOrderMap.get("orderMadeYn"));			// 주문제작여부
 		
 		mav.setViewName(super.getDeviceViewName("order/OrderForm"));
 		
@@ -288,9 +257,9 @@ public class TsfOrderController extends TsfBaseController {
 			if (deliveryAddrInfo == null) {
 				deliveryAddrInfo = new Order();
 				deliveryAddrInfo.setDelvAddrNm(deliveryAddrInfo.getCustNm());
-				deliveryAddrInfo.setRecipZipcode("");
-				deliveryAddrInfo.setRecipBaseAddr("");
-				deliveryAddrInfo.setRecipDtlAddr("");
+				deliveryAddrInfo.setRecipZipcode("00000");
+				deliveryAddrInfo.setRecipBaseAddr("기본주소정보없음");
+				deliveryAddrInfo.setRecipDtlAddr("상제주소정보없음");
 				deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
 			}
 		} else {
@@ -310,6 +279,38 @@ public class TsfOrderController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 주문내역정보조회
+	 *
+	 * @param
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 02. 17
+	 */
+	@ResponseBody
+	@PostMapping("/orderListInfo")
+	public ModelAndView orderListInfo(@RequestBody Order order) {
+		
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+		} else {
+			order.setJsessionId(TsfSession.getSessionId());
+		}
+		
+		// 2. 장바구니상품목록조회
+		Collection<Order> cartGoodsList = coreOrderService.getCartGoodsList(order);
+		
+		// 3. 배송정보조회(장바구니상품목록)
+		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(cartGoodsList, order);
+				
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("delvAllCartList" 	, delvOrderMap.get("delvAllCartList"));		// 전체배송목록
+		mav.setViewName(super.getDeviceViewName("order/OrderListInfo"));
+		
+		return mav;
+	}
+	
 	/**
 	 * 사은품정보조회
 	 *
@@ -388,7 +389,7 @@ public class TsfOrderController extends TsfBaseController {
 			goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
 			
 			// 2.3 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
-			GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
+			GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList, order);
 			
 			// 2.4 상품쿠폰, 장바구니쿠폰 목록 조회
 			GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
@@ -686,7 +687,7 @@ public class TsfOrderController extends TsfBaseController {
 		GagaMap goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
 		
 		// 2.2 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
-		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
+		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList, order);
 
 		// 3. 할인구간정보조회
 		// 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
@@ -928,10 +929,10 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/naver/payment/request")
 	@ResponseBody
-	public ModelAndView naverPaymentRequest(@RequestParam(value = "reserveId", required = false) String reserveId) {
+	public ModelAndView naverPaymentRequest(@RequestParam(value = "paymentId", required = false) String paymentId) {
 		ModelAndView mav = new ModelAndView();
 
-		mav.addObject("reserveId", reserveId);
+		mav.addObject("paymentId", paymentId);
 
 		mav.setViewName(super.getDeviceViewName("/pg/NaverPaymentRequest"));
 
@@ -963,4 +964,79 @@ public class TsfOrderController extends TsfBaseController {
 		return result;
 	}
 
+	/**
+	 * 네이버페이 결제 승인 처리
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 04
+	 */
+	@RequestMapping(value = "/naver/payment/approve")
+	@ResponseBody
+	public GagaMap approveNaverPayment(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+
+		if (TsfSession.getInfo().getCustNo() == null) {
+			order.setCustNo(0);
+		} else {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+
+		result.set("payment", naverPayService.approveNaverPayment(order));
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+		return result;
+	}
+
+	/**
+	 * 네이버페이 결제 조회
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 09
+	 */
+	@RequestMapping(value = "/naver/payment/order")
+	@ResponseBody
+	public GagaMap naverPaymentOrder(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+
+		if (TsfSession.getInfo().getCustNo() == null) {
+			order.setCustNo(0);
+		} else {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+
+		result.set("naverPay", naverPayService.getNaverPaymentOrder(order));
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+		return result;
+	}
+
+	/**
+	 * 네이버페이 결제 취소
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 09
+	 */
+	@RequestMapping(value = "/naver/payment/cancel")
+	@ResponseBody
+	public GagaMap cancelNaverPayment(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+
+		if (TsfSession.getInfo().getCustNo() == null) {
+			order.setCustNo(0);
+		} else {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+
+		result.set("naverPay", naverPayService.cancelNaverPayment(order));
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+		return result;
+	}
+
 }

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

@@ -40,7 +40,7 @@ public class TsfPlanningController extends TsfBaseController {
 	
 	/**
 	 * 기획전 메인 화면
-	 *
+	 * 
 	 * @return
 	 * @author sowon
 	 * @since 2021. 3. 5
@@ -49,23 +49,49 @@ public class TsfPlanningController extends TsfBaseController {
 	public ModelAndView PlanningMainForm(Plan plan) throws Exception {
 		ModelAndView mav = new ModelAndView();
 		Cate4Srch cate = new Cate4Srch();
+		
+		// 디바이스 set
+		//plan.setFrontGb(TsfSession.getFrontGb());
+		
 		// 카테고리 
 		mav.addObject("categoryList", planningService.getPlanCate1(cate));
 		mav.addObject("cateNo", plan.getCateNo());
 		
-		// 각 가테고리 기획전 갯수
+		
+		
+		// 각 카테고리 기획전 갯수
 		mav.addObject("planCount",planningService.getPlanAllCount(plan));
 		
-		if (plan.getCateNo() != null) {
-			cate.setCate1No(plan.getCateNo());
-			mav.addObject("cateNm", planningService.getPlanCate1(cate).iterator().next().getCate1Nm());
+		cate.setCate1No(plan.getCateNo());
+		mav.addObject("cateNm", planningService.getPlanCate1(cate).iterator().next().getCate1Nm());
 			
-		}
 		
 		
+		mav.addObject("planList", planningService.getPlanList(plan));
+		mav.addObject("goodsList", planningService.getPlanGoodsList(plan));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningMainForm"));
 		return mav;
 	}
-
-
+	
+	/**
+	 * 이벤트 메인 화면
+	 * 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 8
+	 */
+	@GetMapping("/event/main/form")
+	public ModelAndView PlanningEventMainForm(Plan plan) throws Exception {
+		ModelAndView mav = new ModelAndView();
+		
+		// 디바이스 set
+		//plan.setFrontGb(TsfSession.getFrontGb());
+		
+		// 이벤트 갯수
+		mav.addObject("cnt",planningService.getEvnetAllCount(plan));
+				
+		
+		mav.setViewName(super.getDeviceViewName("planning/PlanningEventMainForm"));
+		return mav;
+	}
 }

+ 8 - 3
src/main/java/com/style24/front/support/security/TsfAuthenticationProvider.java

@@ -13,6 +13,7 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.stereotype.Component;
 
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfLoginService;
 import com.style24.front.support.env.TsfConstants;
@@ -21,6 +22,7 @@ import com.style24.front.support.exception.TsfEmailDuplicationException;
 import com.style24.front.support.exception.TsfLockedAccountException;
 import com.style24.front.support.exception.TsfSecedeAccountException;
 import com.style24.front.support.exception.TsfUsernameNotFoundException;
+import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Login;
 
 import lombok.extern.slf4j.Slf4j;
@@ -91,10 +93,13 @@ public class TsfAuthenticationProvider implements AuthenticationProvider {
 			}
 		}
 
-		if (loginInfo.getCustStat().equals("20")) { // 휴면회원
-//			WfoSession.setDormantMemberNo(request, loginInfo.getCustId());
+		if (TscConstants.CustStat.DORMANT.value().equals(loginInfo.getCustStat())) { // 휴면회원
+
+			// 휴면해제를 위한 고객번호 세선저장
+			TsfSession.setAttribute("custNo", String.valueOf(loginInfo.getCustNo()));
 			throw new TsfDormantAccountException(message.getMessage("LOGN_0006"));
-		} else if (loginInfo.getCustStat().equals("30")) { // 탈퇴회원
+
+		} else if (TscConstants.CustStat.SECEDE.value().equals(loginInfo.getCustStat())) { // 탈퇴회원
 			throw new TsfSecedeAccountException(message.getMessage("LOGN_0007"));
 		}
 

+ 11 - 7
src/main/java/com/style24/persistence/domain/Counsel.java

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 
@@ -40,6 +41,10 @@ public class Counsel extends TscBaseDomain {
 	private String sysFileNm1;		// 시스템파일명1
 	private String orgFileNm2;		// 원본파일명2
 	private String sysFileNm2;		// 시스템파일명2
+	private String file1OrgFileNm;	// 원본파일명1(등록시 사용)
+	private String file1SysFileNm;	// 시스템파일명1(등록시 사용)
+	private String file2OrgFileNm;	// 원본파일명2(등록시 사용)
+	private String file2SysFileNm;	// 시스템파일명2(등록시 사용)
 	private String ansStat;			// 답변상태(공통코드G060)
 	private String ansStatNm;		// 답변상태명
 	private String ansTitle;		// 답변제목
@@ -54,12 +59,12 @@ public class Counsel extends TscBaseDomain {
 	private int ansCnt;		// 답변완료건수
 	private int ingCnt;		// 처리중건수
 
-	
 	// Masking
-	//public String getMaskingCustId() {
-		//return MaskingUtils.id(this.custId);
-	//}
-		
+	public String getMaskingCustId() {
+		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
+	}
+	
+
 	// Pagination
 	@JsonInclude(JsonInclude.Include.NON_EMPTY)
 	private TscPageRequest pageable;
@@ -67,6 +72,5 @@ public class Counsel extends TscBaseDomain {
 	private int pageNo = 1;
 	private int pageSize = 10;
 	private int pageUnit = 10;
-	
-	
+
 }

+ 28 - 0
src/main/java/com/style24/persistence/domain/Delivery.java

@@ -0,0 +1,28 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 배송 Domain
+ *
+ * @author eskim
+ * @since 2023. 3. 08
+ */
+@SuppressWarnings("serial")
+@Data
+public class Delivery extends TscBaseDomain {
+
+	private String delvFeeCd; 		// 배송비코드
+	private String supplyCompCd; 	// 공급업체
+	private int delvFee; 			// 배송비
+	private int minOrdAmt; 			// 무료배송비최소주문금액
+	private int rtnDelvFee; 		// 반품배송비
+	private String rtnLocZipcode;	// 반품처우편번호
+	private String rtnLocBaseAddr;	// 반품처기본주소
+	private String rtnLocDtlAddr;	// 반품처상세주소
+	private String rtnLocTelno;		// 반품처전화번호
+	private String note;			// 배송안내정보
+
+}

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

@@ -96,7 +96,7 @@ public class Goods extends TscBaseDomain {
 	private String custGrade;	//고객등급
 	private Integer custNo;		//고객번호
 	private String soldoutGoodsDisplayYn = "N";	//품절노추여부
-	private int pointUnit = 10;	//포인트단위
+	private int pointUnit = 1;	//포인트단위
 	private String goodsNmFull;	//상품타이틀+ 상품명
 	private String sysImgNm;	//상품이미지
 	private String logoFileNm;	//브랜드로고이미지
@@ -112,6 +112,8 @@ public class Goods extends TscBaseDomain {
 	private String socialStdt;	//소셜시작일
 	private String socialEddt;	//소셜종료일
 	private String planDtlSq;	//기획전상세번호
+	private String quikDelvYn;	//총알배송여부
+	private String delvFeeCrite;	//배송비부과기준(공통코드G078)
 
 	private int floorUnit; // 절사단위(1:일원단위절사, 10:십원단위절사, 100:백원단위절사)
 

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

@@ -2,6 +2,7 @@ package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.style24.core.support.util.CryptoUtils;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -30,6 +31,7 @@ public class Login extends TscBaseDomain {
 	private String custGb;			// 고객구분
 	private String custGbNm;		// 고객구분명
 	private String custStat;		// 고객상태
+	private String cellPhnno;		// 휴대전화번호
 	private String email;			// 이메일
 	private String snsType;			// SNS유형
 	private String snsId;			// SNS가입ID
@@ -42,4 +44,21 @@ public class Login extends TscBaseDomain {
 	private String loginFailYn;		// 로그인실패여부
 	private String custGrade;		// 고객등급
 
+	// 암호화 대상 복호화 처리 =================================================
+	public String getCustNm() {
+		this.custNm = CryptoUtils.decryptAES(this.custNm);
+		return this.custNm;
+	}
+
+	public String getCellPhnno() {
+		this.cellPhnno = CryptoUtils.decryptAES(this.cellPhnno);
+		return this.cellPhnno;
+	}
+
+	public String getEmail() {
+		this.email = CryptoUtils.decryptAES(this.email);
+		return this.email;
+	}
+	// 암호화 대상 복호화 처리 =================================================
+
 }

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

@@ -228,6 +228,11 @@ public class Plan extends TscBaseDomain{
 		private String brandEnm;			//브랜드명
 		private Integer goodsPlanContSq;	//상품 컨텐츠일련번호
 		
+		private String brand;				// 기획전 리스트 (브랜드 명 외)
+		private String newPlan;				// 기획전 new 확인
+		private int cnt;					// 기획전 브랜드 카운트;
+		
+		private String sysImgNm;			// 상품 이미지
 		// Pagination
 		private TscPageRequest pageable;
 		private int pageNo = 1;

+ 24 - 0
src/main/java/com/style24/persistence/domain/WishList.java

@@ -0,0 +1,24 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 위시리스트 Domain
+ * 
+ * @author eskim
+ * @since 2021. 03. 08
+ */
+@SuppressWarnings("serial")
+@Data
+public class WishList extends TscBaseDomain {
+
+	private Integer custNo;
+	private String goodsCd;
+	private String afLinkCd;
+	private String ithrCd;
+	private String contentsLoc;
+	private Integer planDtlSq;
+
+}

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

@@ -242,7 +242,7 @@
 		     , CONCAT('[',#{relGoodsCd},'] 상품문의')
 		     , #{questContent}
 		     , NOW()
-		     , ifNull(#{secretYn},'N')
+		     , IFNULL(#{secretYn},'N')
 		     , 'G060_10' /*답변상태:처리중*/
 		     , 'N'
 		     , #{regNo}

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

@@ -163,7 +163,6 @@
 		     , CUST_NM
 		     , PASSWD
 		     , BIRTH_YMD
-		     , BIRTH_SM
 		     , SEX_GB
 		     , CELL_PHNNO
 		     , APP_AGREE_YN
@@ -204,7 +203,6 @@
 		     , #{encodedCustNm}                    AS CUST_NM
 		     , #{encodedPasswd}                    AS PASSWD
 		     , #{encodedBirthYmd}                  AS BIRTH_YMD
-		     , #{birthSm}                          AS BIRTH_SM
 		     , #{encodedSexGb}                     AS SEX_GB
 		     , #{encodedCellPhnno}                 AS CELL_PHNNO
 		     , IFNULL(#{appAgreeYn}, 'N')          AS APP_AGREE_YN
@@ -444,4 +442,40 @@
 		      ) B
 	</select>
 
+	<!-- 위시리스트 등록 -->
+	<insert id="createWishList" parameterType="WishList">
+		/* TsfCustomer.createWishList */
+		INSERT INTO TB_WISHLIST
+		(
+		            CUST_NO
+		          , GOODS_CD
+		          , AF_LINK_CD
+		          , ITHR_CD
+		          , CONTENTS_LOC
+		          , PLAN_DTL_SQ
+		          , REG_NO
+		          , REG_DT
+		         ) VALUES (
+		            #{custNo}
+		          , #{goodsCd}
+		          , #{afLinkCd}
+		          , #{ithrCd}
+		          , #{contentsLoc}
+		          , #{planDtlSq}
+		          , #{regNo}
+		          , NOW()
+		         )
+		ON DUPLICATE KEY UPDATE
+		         REG_DT = NOW()
+	</insert>
+
+	<!-- 위시리스트 삭제 -->
+	<delete id="deleteWishList" parameterType="WishList">
+		/* TsfCustomer.deleteWishInfo */
+		DELETE FROM TB_WISHLIST
+		WHERE  CUST_NO = #{custNo}
+		<if test="goodsCd != null and goodsCd != ''">
+		AND    GOODS_CD = #{goodsCd}
+		</if>
+	</delete>
 </mapper>

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

@@ -87,7 +87,7 @@
 		     , G.GOODS_NM
 		     , G.GOODS_TNM
 		     , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
-		             ,IF(G.FOREIGN_BUY_YN='N','[해외구매대행]','' )
+		             ,IF(G.FOREIGN_BUY_YN='Y','[해외구매대행]','' )
 		             ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
 		             ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
 		             ,G.GOODS_NM ) AS GOODS_FULL_NM
@@ -113,6 +113,7 @@
 		     , FN_GET_CODE_NM('G007',G.SEX_GB) AS SEX_NM
 		     , E.DELV_FEE
 		     , E.MIN_ORD_AMT
+		     , E.DELV_FEE_CRITE
 		     , G.GOODS_GB
 		     , FN_GET_CODE_NM('G073',G.GOODS_GB) AS GOODS_GB_NM
 		     , (SELECT NI_CLSF_CD
@@ -149,6 +150,7 @@
 		                  WHERE GOODS_CD= G.GOODS_CD
 		                  GROUP BY GOODS_CD )
 		            END) AS STOCK_QTY
+		     , (CASE WHEN G.SELF_GOODS_YN ='Y' AND IFNULL(DS.GOODS_CD, 'Y') THEN 'Y' ELSE 'N' END ) AS QUIK_DELV_YN
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		                      AND B.USE_YN = 'Y'
@@ -158,6 +160,7 @@
 		                                     AND G.DELV_FEE_CD =  E.DELV_FEE_CD
 		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
+		LEFT OUTER JOIN TB_GOODS_QUICK_DELEVERY_SKIP DS ON G.GOODS_CD =DS.GOODS_CD
 		WHERE G.GOODS_CD = #{goodsCd}
 		-- AND G.SELF_MALL_YN = 'Y' --자사몰 노출(기획전과 상품상세는 노출)
 		<if test='adminYn == null or adminYn != "Y"'>
@@ -563,95 +566,6 @@
 		LIMIT 1
 	</select>
 	
-	<!-- 룩북 베너 목록 조회 -->
-	<select id="getLookbookBannerList" parameterType="Lookbook" resultType="Lookbook">
-		/* TsfGoods.getLookbookBannerList */
-		SELECT A.LOOKBOOK_SQ
-		     , A.BRAND_CD
-		     , A.TITLE
-		     , B.LOOKBOOKB_SQ
-		     , B.SYS_FILE_NM
-		FROM TB_LOOKBOOK A
-		INNER JOIN TB_LOOKBOOK_BANNER B ON A.LOOKBOOK_SQ = B.LOOKBOOK_SQ 
-			                            AND B.DISP_YN = 'Y'
-			                            AND B.LOOKBOOKB_SQ IN (SELECT LOOKBOOKB_SQ FROM TB_LOOKBOOK_GOODS WHERE  GOODS_CD = #{goodsCd} AND DEL_YN  ='N')
-		WHERE NOW() BETWEEN A.DISP_STDT AND A.DISP_EDDT
-		AND A.DISP_YN  = 'Y'
-		ORDER BY A.DISP_ORD, B.DISP_ORD
-	</select>
-	
-	<!-- 룩북 베너 상품 목록 조회 -->
-	<select id="getLookbookBannerGoodsList" parameterType="Lookbook" resultType="Lookbook">
-		/* TsfGoods.getLookbookBannerGoodsList */
-		SELECT Z.*
-		     , 100 - ROUND((CURR_PRICE / LIST_PRICE) * 100 ,0) AS DC_RATE
-		FROM (
-		      SELECT A.LOOKBOOK_SQ
-		           , B.LOOKBOOKB_SQ 
-		           , C.GOODS_CD 
-		           , RANK() OVER(PARTITION BY A.LOOKBOOK_SQ, B.LOOKBOOKB_SQ  ORDER BY C.DISP_ORD ) RNUM 
-		           , C.DISP_ORD 
-		           , G.GOODS_NM
-		           , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
-		                   ,IF(G.FOREIGN_BUY_YN='N','[해외구매대행]','' )
-		                   ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
-		                   ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
-		                   ,G.GOODS_NM ) AS GOODS_FULL_NM
-		          , G.GOODS_STAT
-		          , G.MIN_ORD_QTY 
-		          , (CASE WHEN D.DISP_NM_LANG = 'EN' THEN D.BRAND_ENM ELSE D.BRAND_KNM END) AS BRAND_NM
-		          , G.LIST_PRICE
-		          , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
-		          , G.MAIN_COLOR_CD
-		          , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'00') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-		          , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'00') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
-		          , S.STOCK_QTY
-		          , S.SOLDOUT_YN
-		          , V.VIDEO_GB_M
-		          , V.VIDEO_VAL_M
-		          , V.VIDEO_GB_S
-		          , V.VIDEO_VAL_S
-		      FROM TB_LOOKBOOK A
-		      INNER JOIN TB_LOOKBOOK_BANNER B ON A.LOOKBOOK_SQ = B.LOOKBOOK_SQ 
-		                                      AND B.DISP_YN = 'Y'
-		                                      AND B.LOOKBOOKB_SQ = #{lookbookbSq}
-		      INNER JOIN TB_LOOKBOOK_GOODS C ON B.LOOKBOOKB_SQ  = C.LOOKBOOKB_SQ 
-		      INNER JOIN TB_GOODS G ON C.GOODS_CD = G.GOODS_CD
-		                            AND G.GOODS_STAT = 'G008_90'
-		      INNER JOIN TB_BRAND D ON G.BRAND_CD = D.BRAND_CD
-		                    AND D.USE_YN = 'Y'
-		      LEFT OUTER JOIN (SELECT GOODS_CD
-		                            , SUM(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
-		                                       ELSE CURR_STOCK_QTY
-		                                       END) AS STOCK_QTY
-		                            , MIN(SOLDOUT_YN) AS SOLDOUT_YN
-		                       FROM VW_STOCK
-		                       WHERE DISP_YN = 'Y'
-		                       GROUP BY GOODS_CD) S ON G.GOODS_CD = S.GOODS_CD
-		      LEFT OUTER JOIN (SELECT MAX(GOODS_CD) AS GOODS_CD 
-		                             , MAX(CASE WHEN  RNUM = 1 THEN  VIDEO_GB END) AS  VIDEO_GB_M
-		                             , MAX(CASE WHEN  RNUM = 1 THEN  VIDEO_VAL END) AS  VIDEO_VAL_M
-		                             , MAX(CASE WHEN  RNUM = 2 THEN  VIDEO_GB END) AS  VIDEO_GB_S
-		                             , MAX(CASE WHEN  RNUM = 2 THEN  VIDEO_VAL END) AS  VIDEO_VAL_S
-		                       FROM (
-		                             SELECT A.DISPLOC_VAL AS GOODS_CD
-		                                  , B.VIDEO_GB 
-		                                  , B.VIDEO_VAL 
-		                                  , A.REG_DT 
-		                                  , RANK() OVER(PARTITION BY A.DISPLOC_VAL ORDER BY A.REG_DT ) RNUM 
-		                             FROM TB_VIDEO_DISPLOC  A
-		                             INNER JOIN  TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ 
-		                                                    AND B.DISP_YN ='Y'
-		                             WHERE A.DISPLOC_GB ='G'
-		                             AND A.DISP_YN = 'Y'
-		                            ) V
-		                       ) V ON G.GOODS_CD = V.GOODS_CD
-		      WHERE NOW() BETWEEN A.DISP_STDT AND A.DISP_EDDT
-		      AND A.DISP_YN  = 'Y'
-		      AND A.LOOKBOOK_SQ = #{lookbookSq}
-		) Z
-	</select>
-	
 	<!-- 상품 사이즈 선택 시 재고수량 가져오기 -->
 	<select id="getGoodsStockQty"  parameterType="GoodsStock" resultType="int">
 		/* TsfGoods.getGoodsStockQty */
@@ -700,5 +614,28 @@
 		WHERE GOODS_CD = #{goodsCd}
 	</select>
 	
+	<!-- 상품  배송안내정보  -->
+	<select id="getGoodsDeliveryInfo"  parameterType="String" resultType="Delivery">
+		/* TsfGoods.getGoodsDeliveryInfo */
+		SELECT G.GOODS_CD 
+		     , A.DELV_FEE_CD 
+		     , A.SUPPLY_COMP_CD 
+		     , A.DELV_FEE 
+		     , A.MIN_ORD_AMT 
+		     , A.RTN_DELV_FEE 
+		     , B.RTN_LOC_ZIPCODE
+		     , B.RTN_LOC_BASE_ADDR
+		     , B.RTN_LOC_DTL_ADDR
+		     , B.RTN_LOC_TELNO
+		     , S.NOTE
+		FROM TB_GOODS G
+		INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
+		INNER JOIN TB_DELV_FEE_POLICY A ON G.DELV_FEE_CD = A.DELV_FEE_CD
+		LEFT OUTER JOIN TB_DELIVERY_LOC B ON A.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD 
+		                                  AND B.USE_YN = 'Y'
+		WHERE G.GOODS_CD = #{goodsCd}
+		ORDER BY A.DELV_FEE_CD 
+		LIMIT 1
+	</select>
 	
 </mapper>

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

@@ -12,6 +12,7 @@
 		     , CUST_GB                                          /*고객구분*/
 		     , FN_GET_CODE_NM('G100',CUST_GB) AS CUST_GB_NM     /*고객구분명*/
 		     , CUST_STAT                                        /*회원상태*/
+		     , CELL_PHNNO                                       /*휴대전화번호*/
 		     , EMAIL                                            /*이메일*/
 		     , #{snsType}                     AS SNS_TYPE       /*SNS유형*/
 		     , #{snsId}                       AS SNS_ID         /*SNS가입ID*/

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

@@ -15,6 +15,7 @@
 	</sql>
 	
 	<select id="getPlanCate1" resultType="Cate4Srch" parameterType="Cate4Srch">
+		/* TsfPlanning.getPlanCate1 */
 		SELECT CATE1_NO 
       		  ,CATE1_NM 
 		      ,CATE_GB 
@@ -31,10 +32,12 @@
 	</select>
 	
 	<select id="getPlanAllCount" resultType="int" parameterType="Plan">
+		/* TsfPlanning.getPlanAllCount */
 		SELECT COUNT(*) AS CNT
 		FROM TB_PLAN P  
 		WHERE 1=1
 		   AND P.DEL_YN = 'N'
+		   AND P.PLAN_GB = 'P'
 		   <if test="cateNo != null and cateNo != ''">
 		   AND P.PLAN_SQ IN (
 		   						SELECT PLAN_SQ 
@@ -42,6 +45,144 @@
 		   						WHERE CATE_NO = #{cateNo}
 		   					)
 		   </if>
+		    AND NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		    <!-- AND P.FRONT_GB IN (#{frontGb}, 'A') -->
+	</select>
+	
+	<!-- 기획전 목록 -->
+	<select id="getPlanList" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getPlanList */
+		SELECT P1.PLAN_SQ 
+		      ,P1.PLAN_NM 
+		      ,P1.DTL_TITLE1 
+		      ,P1.PLAN_GB 
+		      ,P1.FRONT_GB 
+		      ,P1.MAIN_PIMG 
+		      ,P1.MAIN_MIMG 
+		      ,P1.DISP_ORD
+		      ,P1.NEW_PLAN
+		      ,P1.DISP_STDT
+		      ,P1.DISP_EDDT
+		      ,P1.REG_NO 
+		      ,P2.BRAND
+		      ,P2.CNT
+		FROM 
+		(
+			SELECT P.PLAN_SQ 
+			      ,P.PLAN_NM 
+			      ,P.DTL_TITLE1 
+			      ,P.PLAN_GB 
+			      ,P.FRONT_GB 
+			      ,P.MAIN_PIMG 
+			      ,P.MAIN_MIMG 
+			      ,P.DISP_ORD 
+			      ,P.REG_NO 
+			      ,CASE WHEN DATE(P.REG_DT) BETWEEN DATE_ADD(NOW(),INTERVAL -3 DAY ) AND NOW() THEN 'NEW' END AS 'NEW_PLAN'   /*등록일 기준 3일 */
+			      ,P.DISP_EDDT 
+			      ,P.DISP_STDT 
+			      ,P.DEL_YN 
+			FROM TB_PLAN P
+			GROUP BY  P.PLAN_SQ 
+			      ,P.PLAN_NM 
+			      ,P.DTL_TITLE1 
+			      ,P.PLAN_GB 
+			      ,P.FRONT_GB 
+			      ,P.MAIN_PIMG 
+			      ,P.MAIN_MIMG 
+			      ,P.DISP_ORD 
+			      ,P.REG_NO
+		)P1 INNER JOIN (
+						SELECT  PB.PLAN_SQ 
+						      , COUNT(PLAN_SQ) AS CNT
+						      ,CASE WHEN COUNT(PLAN_SQ) = 1 THEN MAX(TBG.BRAND_GROUP_KNM) ELSE MAX(TBG.BRAND_GROUP_KNM)END AS BRAND
+						FROM TB_PLAN_BRAND PB INNER JOIN TB_BRAND_GROUP TBG  ON PB.BRAND_GROUP_NO = TBG.BRAND_GROUP_NO
+						GROUP BY PB.PLAN_SQ
+						)P2 ON P1.PLAN_SQ = P2.PLAN_SQ
+		WHERE 1=1
+		  AND P1.DEL_YN = 'N'
+		  AND P1.PLAN_GB = 'P'
+		  AND NOW() BETWEEN P1.DISP_STDT AND P1.DISP_EDDT
+		 <!--  AND P1.FRONT_GB IN (#{frontGb}, 'A') -->
+		  AND P1.PLAN_SQ IN (
+				   						SELECT PLAN_SQ 
+				   						FROM TB_PLAN_CATE 
+				   						 <if test="cateNo != null and cateNo != ''">
+				   						WHERE CATE_NO = #{cateNo}
+				   						</if>
+				   					)
+		ORDER BY P1.NEW_PLAN DESC, ABS(DATEDIFF(P1.DISP_EDDT,NOW())) 
+	</select>
+	
+		<!-- 기획전 목록 -->
+	<select id="getPlanGoodsList" parameterType="Plan" resultType="Plan">
+			SELECT F.*
+			FROM
+			(
+				SELECT Z.* 
+				     , (CASE WHEN Z.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = Z.GOODS_CD) 
+							ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = Z.GOODS_CD) 
+							END) AS STOCK_QTY_SUM
+				     , ROW_NUMBER() OVER(PARTITION BY Z.PLAN_SQ ORDER BY Z.PLAN_SQ) AS RNUM
+				     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = Z.GOODS_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+				FROM
+				(	
+					SELECT P.PLAN_SQ 
+					      ,P.PLAN_NM 
+					      ,PD.CORNER_NM 
+					      ,PD.DISP_STDT 
+					      ,PD.DISP_EDDT 
+					      ,PD.DISP_YN 
+					      ,PD.PLAN_DTL_SQ 
+					      ,PD.DISP_ORD 
+					      ,PG.GOODS_CD 
+					      ,PG.DEL_YN 
+					      ,TG.GOODS_TYPE 
+					      ,TG.GOODS_NM 
+					      ,TG.LIST_PRICE 
+					      ,TG.CURR_PRICE                                                                 
+					      ,TG.DC_RATE
+					      ,CASE TG.FORMAL_GB WHEN 'G009_20' THEN '이월' ELSE '정상' END AS FORMAL_GB                                                                 
+						  ,TG.SEASON_CD       
+						  , (SELECT SUPPLY_COMP_NM
+						 	 FROM   TB_SUPPLY_COMPANY
+						     WHERE  SUPPLY_COMP_CD = TG.SUPPLY_COMP_CD
+							) AS SUPPLY_COMP_NM                                                           
+						  ,TG.ERP_STOCK_LINK_YN                                                          
+						  ,TG.ERP_PRICE_LINK_YN                                                                                                                  
+						  ,TG.NEW_CUST_ORD_YN                                                            
+						  ,TG.DELV_FEE_CD                                                                
+						  ,TG.FRST_CFRM_DT                  
+						  ,TG.PRICE_UPD_DT             
+					FROM TB_PLAN P INNER JOIN TB_PLAN_DETAIL PD ON P.PLAN_SQ = PD.PLAN_SQ 
+					               INNER JOIN TB_PLAN_GOODS PG ON PD.PLAN_DTL_SQ = PG.PLAN_DTL_SQ 
+					               INNER JOIN TB_GOODS TG  ON PG.GOODS_CD = TG.GOODS_CD 
+					WHERE 1=1
+					 AND NOW() BETWEEN PD.DISP_STDT AND PD.DISP_EDDT 
+					 AND PD.DISP_YN = 'Y'
+					 AND PG.DEL_YN = 'N'
+					 AND P.PLAN_GB = 'P'
+				     AND P.PLAN_SQ IN (
+				   						SELECT PLAN_SQ 
+				   						FROM TB_PLAN_CATE 
+				   						 <if test="cateNo != null and cateNo != ''">
+				   						WHERE CATE_NO = #{cateNo}
+				   						</if>
+				   	 					)
+				)Z
+				ORDER BY Z.DISP_ORD ASC, STOCK_QTY_SUM DESC
+			)F
+			WHERE F.RNUM IN (1,2)
+	</select>
+	
+	<select id="getEventAllCount" resultType="int" parameterType="Plan">
+		/* TsfPlanning.getEventAllCount */
+		SELECT COUNT(*) AS CNT
+		FROM TB_PLAN P  
+		WHERE 1=1
+		   AND P.DEL_YN = 'N'
+		   AND P.PLAN_GB = 'E'
+		    AND NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		    <!-- AND P.FRONT_GB IN (#{frontGb}, 'A') -->
 	</select>
 	
 	

+ 81 - 43
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -46,34 +46,49 @@
 	<!-- 적립내역 조회-->
 	<select id="getAccumulatePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAccumulatePointList */
-	SELECT
-		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_12' THEN '상품 구매'
-		WHEN   'G069_20' THEN '리뷰'
-		WHEN   'G069_30' THEN '이벤트'
-		WHEN   'G069_90' THEN '관리자'
-		END AS OCCUR_GB ,	
-		CASE   TCHP.OCCUR_GB  	
-		WHEN   'G069_12' THEN TG.GOODS_NM 
-		WHEN   'G069_20' THEN TG.GOODS_NM 
-		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
+	SELECT	
+	   CASE   TCHP.OCCUR_GB
+			WHEN   'G069_12' THEN '상품 구매'
+			WHEN   'G069_20' THEN '리뷰'
+			WHEN   'G069_30' THEN '이벤트'
+			WHEN   'G069_90' THEN '관리자'
+		END AS OCCUR_GB
+	  , CASE   TCHP.OCCUR_GB
+			WHEN   'G069_12' THEN TG.GOODS_NM
+			WHEN   'G069_20' THEN TG.GOODS_NM
+			WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
+			WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
 		END AS  OCCUR_DTL_DESC
 			  , TCHP.PNT_AMT AS pntAmt
 			  , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
+		LEFT JOIN 
+		(
+			SELECT REVIEW_SQ
+				 , ORD_NO 
+				 , ORD_DTL_NO 
+		         , GOODS_CD
+			FROM TB_REVIEW TR
+			WHERE TR.PNT_GIVE_STAT = 'G043_30' 														/* 리뷰조건 : 포인트지급반영*/
+		) TR
+		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
+		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
 		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TOD.ORD_NO = TCHP.ORD_NO
-		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
-		LEFT JOIN TB_GOODS TG 
-		ON TG.GOODS_CD = TOD.GOODS_CD 
+		ON TCHP.ORD_NO = TOD.ORD_NO
+		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS TG
+		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
 		WHERE TCHP.CUST_NO = #{custNo}
+		AND CASE 																					/* 상품평조건 */
+			WHEN TCHP.REVIEW_SQ IS NULL THEN 1
+			WHEN TCHP.REVIEW_SQ IS NOT NULL AND TR.REVIEW_SQ IS NOT NULL THEN 1
+		END > 0	
 		AND TCHP.OCCUR_GB IN ('G069_12','G069_20','G069_30','G069_90')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
+		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
 		AND TCHP.PNT_AMT <![CDATA[>]]> 0
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
-	ORDER BY TCHP.UPD_DT DESC
+		GROUP BY tchp.REVIEW_SQ,TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 	
 	<!-- 사용내역 조회-->
@@ -81,69 +96,92 @@
 	/* TsfPoint.getUsePointList */
 	SELECT
 		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_10' THEN '구매 사용'
-		WHEN   'G069_21' THEN '구매 취소'
-		WHEN   'G069_90' THEN '관리자'
-		WHEN   'G069_99' THEN '소멸'
+			WHEN   'G069_13' THEN '구매 취소'
+			WHEN   'G069_40' THEN '구매 사용'
+			WHEN   'G069_42' THEN '사은품'
+			WHEN   'G069_90' THEN '관리자'
+			WHEN   'G069_99' THEN '소멸'
 		END AS OCCUR_GB ,	
 		CASE   TCHP.OCCUR_GB	
-		WHEN   'G069_10' THEN TG.GOODS_NM 
-		WHEN   'G069_21' THEN TG.GOODS_NM 
-		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_99' THEN TCHP.OCCUR_DTL_DESC
+			WHEN   'G069_13' THEN TG.GOODS_NM
+			WHEN   'G069_40' THEN TG.GOODS_NM 
+			WHEN   'G069_42' THEN TG.GOODS_NM
+			WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
+			WHEN   'G069_99' THEN '유효기간 경과 소멸'
 		END AS OCCUR_DTL_DESC
 			 , TCHP.PNT_AMT AS pntAmt
 			 , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN TB_ORDER_DETAIL TOD
+		LEFT JOIN TB_ORDER_DETAIL TOD																/* 주문상세 */
 		ON TOD.ORD_NO = TCHP.ORD_NO
 		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
-		LEFT JOIN TB_GOODS TG 
+		LEFT JOIN TB_ORD_FREEGIFT TOF																/* 사은품 */
+		ON TOD.ORD_NO = TOF.ORD_NO
+		LEFT JOIN TB_GOODS TG																		/* 상품품 */
 		ON TG.GOODS_CD = TOD.GOODS_CD 
 		WHERE TCHP.CUST_NO = #{custNo}
-		AND TCHP.OCCUR_GB IN ('G069_10','G069_21','G069_90','G069_99')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
+		AND TCHP.OCCUR_GB IN ('G069_13','G069_40','G069_42','G069_90','G069_99')
+		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
 		AND 0 <![CDATA[>]]> TCHP.PNT_AMT
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY  TCHP.OCCUR_GB, PNT_AMT, GOODS_NM,  TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+		GROUP BY  TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
 	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 	
 	<!-- 전체내역 조회-->
 	<select id="getAllPointList" parameterType="Point" resultType="Point">
-		/* TsfPoint.getAllPointList */
+	/* TsfPoint.getAllPointList */
 	SELECT
 		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_10' THEN '구매 사용'
 		WHEN   'G069_12' THEN '상품 구매'
+		WHEN   'G069_13' THEN '구매 취소'
 		WHEN   'G069_20' THEN '리뷰'	
-		WHEN   'G069_21' THEN '구매 취소'
 		WHEN   'G069_30' THEN '이벤트'
+		WHEN   'G069_40' THEN '구매 사용'
+		WHEN   'G069_42' THEN '사은품'
 		WHEN   'G069_90' THEN '관리자'
 		WHEN   'G069_99' THEN '소멸'
 		END AS OCCUR_GB ,	
 		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_10' THEN TG.GOODS_NM
 		WHEN   'G069_12' THEN TG.GOODS_NM 
+		WHEN   'G069_13' THEN TG.GOODS_NM 
 		WHEN   'G069_20' THEN TG.GOODS_NM 
-		WHEN   'G069_21' THEN TG.GOODS_NM
 		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_40' THEN TG.GOODS_NM 
+		WHEN   'G069_42' THEN TG.GOODS_NM
 		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_99' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_99' THEN '유효기간 경과 소멸'
 		END AS OCCUR_DTL_DESC
 			 , TCHP.PNT_AMT AS pntAmt
 			 , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
+		LEFT JOIN 
+		(
+			SELECT REVIEW_SQ
+				 , ORD_NO 
+				 , ORD_DTL_NO 
+		         , GOODS_CD
+			FROM TB_REVIEW TR
+			WHERE TR.PNT_GIVE_STAT = 'G043_30'
+		) TR
+		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
+		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
 		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TOD.ORD_NO = TCHP.ORD_NO
-		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
+		ON TCHP.ORD_NO = TOD.ORD_NO
+		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
+		LEFT JOIN TB_ORD_FREEGIFT TOF
+		ON TOD.ORD_NO = TOF.ORD_NO
 		LEFT JOIN TB_GOODS TG 
-		ON TG.GOODS_CD = TOD.GOODS_CD 
+		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
 		WHERE TCHP.CUST_NO = #{custNo}
-		AND TCHP.OCCUR_GB IN ('G069_10','G069_12','G069_20','G069_21','G069_30','G069_90','G069_99')
+		AND CASE
+			WHEN TCHP.REVIEW_SQ IS NULL THEN 1
+			WHEN TCHP.REVIEW_SQ IS NOT NULL AND TR.REVIEW_SQ IS NOT NULL THEN 1
+		END > 0		
+		AND TCHP.OCCUR_GB IN ('G069_12','G069_13','G069_20','G069_30','G069_40','G069_42','G069_90','G069_99')
 		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+		GROUP BY TCHP.REVIEW_SQ, TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
 	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 </mapper>

+ 6 - 0
src/main/resources/config/application-locd.yml

@@ -76,3 +76,9 @@ pg:
         module.type: 01
         tx.mode: 0
 
+# 네이버페이 API
+naverPay:
+    apiUrl: https://dev.apis.naver.com/
+    payUrl:
+        web : test-pay.naver.com
+        mob : test-m.pay.naver.com

+ 7 - 0
src/main/resources/config/application-locp.yml

@@ -71,3 +71,10 @@ pg:
         log.path: /WIDE/workspace/logs/wivis
         account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
         vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp
+
+# 네이버페이 API
+naverPay:
+    apiUrl: https://apis.naver.com/
+    payUrl:
+        web : pay.naver.com
+        mob : m.pay.naver.com

+ 7 - 0
src/main/resources/config/application-run.yml

@@ -70,3 +70,10 @@ pg:
         log.path: /app/was/applogs/nicepay
         account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
         vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp
+
+# 네이버페이 API
+naverPay:
+    apiUrl: https://apis.naver.com/
+    payUrl:
+        web : pay.naver.com
+        mob : m.pay.naver.com

+ 7 - 0
src/main/resources/config/application-tsit.yml

@@ -54,3 +54,10 @@ upload:
         view: //tdimage.style24.com/sample
 
 download.path: /TSIT/servers/files/data
+
+# 네이버페이 API
+naverPay:
+    apiUrl: https://dev.apis.naver.com/
+    payUrl:
+        web : test-pay.naver.com
+        mob : test-m.pay.naver.com

+ 22 - 0
src/main/resources/config/application.yml

@@ -45,9 +45,29 @@ naver:
     tokenUrl: https://nid.naver.com/oauth2.0/token
     userInfoUrl : https://openapi.naver.com/v1/nid/me
     authorizeUrl : https://nid.naver.com/oauth2.0/authorize
+    pay:
+        partnerId: np_ktptw906068
+        clientId: 8TSWSyJMMUvOLKUySQx6
+        clientSecret: oGXnO7cMD1
+        paymentReadyUrl: /naverpay/payments/v2/reserve
+        approvePaymentUrl: /naverpay/payments/v2/apply/payment
+        paymentOrderUrl: /naverpay/payments/v2/list/history
+        cancelPaymentUrl: /naverpay/payments/v1/cancel
+
+# 네이버페이 API
+naverPay:
+    partnerId: np_ktptw906068
+    clientId: 8TSWSyJMMUvOLKUySQx6
+    clientSecret: oGXnO7cMD1
+    paymentReadyUrl: /naverpay/payments/v2/reserve
+    approvePaymentUrl: /naverpay/payments/v2/apply/payment
+    paymentOrderUrl: /naverpay/payments/v2/list/history
+    cancelPaymentUrl: /naverpay/payments/v1/cancel
 
 #카카오 API
 kakao:
+# 카카오페이 운영정보
+#    cid : 운영cid정보 없음
 #    appId: 442702
 #    appName: 아이스타일24
 #    companyName: 예스이십사
@@ -55,6 +75,7 @@ kakao:
 #    restApiKey: 46d601394bd887cbada3cf00fdddef54
 #    javascriptKey: b3c9ee69171042c3637e8d714a4c8a75
 #    adminKey: 7cc33b2ef96d785c4caf3376f9dc9254
+# 카카오페이 운영정보
     cid : TC0ONETIME
     appId : 399207
     appName : 구축용 테스트앱
@@ -86,3 +107,4 @@ speedy:
 app.down.url: 
     ios: https://apps.apple.com/kr/app/WIVISMALL/id1517275108
     aos: https://play.google.com/store/apps/details?id=com.wivis.wivismal
+

+ 246 - 0
src/main/webapp/WEB-INF/views/mob/callcenter/OneToOneQnaFormMob.html

@@ -0,0 +1,246 @@
+<!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/CallcenterLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : OneToOneQnaFormWeb.html
+ * @desc    : 1:1문의 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.19   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container cs">
+		<!-- 고객센터 Gnb -->
+		<nav class="pnb" id="callcenterGnb">
+		</nav>
+		<!-- //고객센터 Gnb -->
+		
+		<!-- ★ 컨텐츠 시작 -->
+		<section class="content cs_contactUs_1">
+			<div class="inner sr-only"><h2 class="title">1:1문의</h2></div>
+			<div class="inner wide">
+				<!-- 게시판info -->
+				<ul class="inquiry_box">
+					<li>
+						<p th:text="${qnaCountInfo.totCnt}">999</p>
+						<p>총 문의</p>
+					</li>
+					<li>
+						<p th:text="${qnaCountInfo.ansCnt}">456</p>
+						<p>답변완료</p>
+					</li>
+					<li>
+						<p th:text="${qnaCountInfo.ingCnt}">690</p>
+						<p>처리 중</p>
+					</li>
+				</ul>
+				<!-- //게시판info -->
+			</div>
+			
+			<div class="inner wide">
+				<!-- 폴딩리스트2 -->
+				<div class="ui_row" id="divQna"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+					<div class="foldGroup case2">
+						<!-- list2 -->
+						<ul id="ulQna">
+						</ul>
+						<!-- //list2 -->
+					</div>
+				</div>
+				<div class="ui_foot" id="nextPage">
+					<button class="btn btnM btnIcon_more" onclick="fnGetList();">더보기</button>
+				</div>
+			</div>
+		</section>
+		<!-- ★ 컨텐츠 종료 -->
+	</main>
+	
+	<div class="cs_contactUs_my_footer">
+		<a href="#none" class="questionMy"><p>1:1문의</p></a>
+	</div>
+	
+	<!-- 모달영역 -->
+	<div>
+		<div class="modal pop_full fade" id="thumb_pic" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true" style="display: none;">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h5 class="modal-title sr-only">문의이미지슬라이드</h5>
+					</div>
+					<div class="modal-body">
+						<div class="pop_cont">
+							<!-- Swiper -->
+							<div class="swiper-container cs_pop">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide"><div class="pop_img" style="background-image: url(/images/mo/cs_pop_people.png);"></div></div>
+									<div class="swiper-slide"><div class="pop_img" style="background-image: url(/images/mo/cs_pop_people2.png);"></div></div>
+								</div>
+								<!-- Add Pagination -->
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- //모달끝 -->
+		
+	<form id="qnaForm" name="qnaForm" action="#" th:action="@{'/callcenter/onetoone/qna/list'}">
+		<input type="hidden" name="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="10"/>
+	</form>
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// JQUERY를 이용한 버튼 모달 팝업
+	$(".thumb_pic").click(function() {
+		$("#thumb_pic").modal("show");
+	});
+	
+	// 슬라이더_팝업에 문의이미지슬라이드
+	var swiper = new Swiper('#thumb_pic .swiper-container.cs_pop', {
+		observer: true,
+		observeParents: true,
+		pagination: {
+			el: '#thumb_pic .swiper-pagination',
+		},
+	});
+	
+	$(document).ready(function() {
+		// 고객센터 GNB 설정
+		fnSetCallcenterGnb(2);
+		
+		fnGetList(1);
+	});
+	
+	let fnGetList = function(page) {
+		// Initialize a pagination
+		gagaPaging.init('qnaForm', fnGetListCallback, 'pageNav', 10);
+
+		// Load data
+		gagaPaging.load(page);
+	}
+	
+	var fnGetListCallback = function(result) {
+		$('#ulQna').html('');
+
+		// 목록
+		if (result.dataList != null && result.dataList.length > 0) {
+			$.each(result.dataList, function(idx, item) {
+				let tag = '<li>\n';
+				tag += '	<div class="inner wide">\n';
+				tag += '		<div class="ui_row">\n'; //데이터 없을시 클래스 nodata 추가
+				tag += '			<div class="foldGroup case2">\n';
+				tag += '				<ul>\n';
+				tag += '					<li>\n';
+				tag += '						<div class="fold_head">\n';
+				tag += '							<a href="javascript:void(0)">\n';
+				tag += '						<div>\n';
+				tag += '						<div class="fold_tit">\n';
+				tag += '							<div class="lap1">\n';
+				tag += '								<span class="fold_state ' + (item.ansStat == "G060_10" ? "doing" : "done") + '">' + item.ansStatNm + '</span>\n'; //답변완료 : done / 처리중 : doing
+				tag += '								<span class="prod">' + item.counselClsfNm + '</span>\n';
+				tag += '							</div>\n';
+				tag += '							<div class="lap2"><span>' + item.questTitle + '</span></div>\n';
+				tag += '						</div>\n';
+				tag += '						<span class="data">' + item.questDt + '</span>\n';
+				tag += '					</div>\n';
+				tag += '				</a>\n';
+				tag += '			</div>\n';
+				tag += '			<div class="fold_cont">\n';
+				tag += '				<div class="fold_detail">\n';
+				tag += '					<div>' + item.questContent + '</p>\n';
+				
+				if (!gagajf.isNull(item.sysFileNm1) || !gagajf.isNull(item.sysFileNm2)) {
+					tag += '				<p class="img_group">\n';
+					
+					if (!gagajf.isNull(item.sysFileNm1)) {
+						tag += '					<span class="thumb_pic">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm1 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
+						tag += '					</span>\n';
+					}
+					
+					if (!gagajf.isNull(item.sysFileNm2)) {
+						tag += '					<span class="thumb_pic">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm2 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
+						tag += '					</span>\n';
+					}
+					
+					tag += '				</p>\n';
+				}
+				
+				tag += '				</div>\n';
+				tag += '			</div>\n';
+				
+				if (item.ansStat == 'G060_20') { // 답변완료 상태일 때
+					tag += '			<div class="fold_answer">\n';
+					tag += '				<div>\n';
+					tag += '					<div class="answer_body">' + item.ansContent + '</div>\n';
+					tag += '					<div class="answer_foot">\n';
+					tag += '						<span class="data">' + item.ansDt + '</span>\n';
+					
+					if (item.ansStat == 'G060_10') { // 처리중일때
+// 					tag += '						<button type="button" class="btn_delete" onclick="fnDeleteQna(' + item.counselSq + ');"><span>삭제</span></button>
+					}
+					tag += '					</div>\n';
+					tag += '				</div>\n';
+					tag += '			</div>\n';
+				}
+				
+				tag += '		</div>\n';
+				tag += '	</div>\n';
+				tag += '</li>\n';
+
+				$('#ulQna').append(tag);
+			});
+		} else {
+			let tag = '<li>내역이 없습니다.</li>\n';
+			$('#ulQna').append(tag);
+			$('#divQna').addClass('nodata');
+		}
+
+		// 더보기 버튼 노출/미노출
+		if (result.paging.pageable.totalPage == result.paging.pageable.currPage) {
+			$('#nextPage').hide();
+		} else {
+			$('#nextPage').show();
+		}
+	}
+	
+	// 삭제
+	let fnDeleteQna = function(counselSq) {
+		mcxDialog.confirm("등록된 내용을 삭제하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let params = new Object();
+				params.counselSq = counselSq;
+				
+				var jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/callcenter/onetoone/qna/delete'
+						, jsonData
+						, function() {
+							fnGetList();
+						});
+			}
+		});
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+
+<footer id="footer" th:fragment="footer">
+
+	<button class="btn_top" title="페이지 맨위로 이동">
+		<span>
+			<i class="gl1"></i>
+			<i class="gl2"></i>
+			<i class="gl3"></i>
+		</span>
+	</button>
+	<section class="f1">
+		<div class="inner">
+			<ul class="link wider">
+				<li><a href="#none">고객센터</a></li>
+				<li><a href="#none">이용약관</a></li>
+				<li><a href="#none">개인정보취급방침</a></li>
+			</ul>
+
+			<div class="collapse">
+				<div class="btnWrap">
+					<button class="btn_infos">아이스타일이십사 주식회사</button>
+				</div>
+				<ul class="infos info">
+					<li class="fn">대표이사 : 윤종선</li>
+					<li class="fn">주소 : 서울시 영등포구 은행로 11, 8층(여의도동, 일신빌딩)</li>
+					<li class="fn">사업자등록번호 : 116-81-32499 </li>
+					<li class="fn">개인정보관리책임자 : 이정득 </li>
+					<li class="fn">통신판매업신고번호 : 제 2020-서울영등포1432</li>
+					<li class="fn">개인정보보호책임자 : 김명인</li>
+					<li class="fn">호스팅 서비스 : 아이스타일이십사㈜</li>
+				</ul>
+			</div>
+			
+			<ul class="link">
+				<li><a href="#none">사업자정보확인</a></li>
+				<li><a href="#none">PC버전</a></li>
+				<li><a href="#none">APP 다운로드</a></li>
+				<li><a href="#none">SN&#64;PP</a></li>
+			</ul>
+			<ul class="copy">
+				<li>COPYRIGHTⓒ2020 STYLE24 ALL RIGHTS RESERVED.</li>
+			</ul>
+			<ul class="sns">
+				<li><a href="#none" class="insta">Instagram</a></li>
+				<li><a href="#none" class="facebook">facebook</a></li>
+			</ul>
+		</div>
+	</section>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready( function() {
+	});
+/*]]>*/
+</script>
+
+</footer>
+
+</html>

+ 37 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/GnbMob.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GnbMob.html
+ * @desc    : GNB
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.08   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<header th:fragment="gnb">
+	<section class="htop" id="htopSub" style="background: #fff;">
+		<button class="btn_back" title="이전페이지로">
+			<span>
+				<i class="gl1"></i>
+				<i class="gl2"></i>
+				<i class="gl3"></i>
+			</span>
+		</button>
+		<h1 id="htopTitle">고객센터</h1>
+	</section>
+	
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+/*]]>*/
+</script>
+
+</header>
+
+</html>

+ 48 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html

@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+
+<head th:fragment="head">
+	<meta charset="utf-8"/>
+	<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=medium-dpi"/> 
+<!-- 	<meta http-equiv="cache-control" content="no-cache"/> -->
+<!-- 	<meta http-equiv="expires" content="0"/> -->
+<!-- 	<meta http-equiv="pragma" content="no-cache"/> -->
+	<meta name="Title" th:content="${metaBrowserTitle}" content="한세공식몰 스타일24"/>
+	<meta name="description" th:content="${metaOgDesc}" content="한세공식몰,TBJ,FRJ,NBA,NBA KIDS,LPGA,PGATOUR,컬리수,모이몰른,MOIMOLN,리카앤,리바이스키즈,ANDEW,BUCKAROO,나이키키즈"/>
+	<meta name="keywords" th:content="${metaKeywords}" content="한세공식몰,TBJ,FRJ,NBA,NBA KIDS,LPGA,PGATOUR,컬리수,모이몰른,MOIMOLN,리카앤,리바이스키즈,ANDEW,BUCKAROO,나이키키즈"/>
+	<meta property="og:type" content="website"/>
+	<meta property="og:image" th:content="${metaOgImage}" content="/image/web/common/og_style24.png"/>
+	<meta property="og:url" th:content="${@environment.getProperty('domain.front')}" content="http://www.style24.com"/>
+	<meta property="og:title" th:content="${metaBrowserTitle}" content="스타일24"/>
+	<meta property="og:description" th:content="${metaOgDesc}" content="한세공식몰,TBJ,FRJ,NBA,NBA KIDS,LPGA,PGATOUR,컬리수,모이몰른,MOIMOLN,리카앤,리바이스키즈,ANDEW,BUCKAROO,나이키키즈"/>
+	<meta property="og:locale" content="ko_KR"/>
+	<meta property="og:site_name" th:content="${metaBrowserTitle}" content="한세공식몰 스타일24"/>
+	
+	<title th:text="${metaBrowserTitle}">한세공식몰 스타일24</title>
+	<link rel="icon" th:href="@{/images/favicon.ico}" href="favicon.ico" type="image/x-icon"/>
+	<link rel="apple-touch-icon" href="/images/apple-touch-icon.png" sizes="180x180"/>
+	<link rel="icon" href="/images/favicon-32x32.png" sizes="32x32" type="image/png"/>
+	<link rel="icon" href="/images/favicon-16x16.png" sizes="16x16" type="image/png"/>
+	
+	<link rel="stylesheet" type="text/css" href="/ux/mo/css/swiper.min.css"/>
+	<link rel="stylesheet" type="text/css" th:href="@{'/ux/mo/css/style24.m.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/mo/css/style24.m.css"/>
+	
+	<script src="/ux/mo/js/jquery-3.5.1.min.js"></script>
+	<script src="/ux/mo/js/jquery.modal.min.js"></script>
+	<script src="/ux/mo/js/swiper.min.js"></script>
+	<script src="/ux/plugins/jquery.serializeObject.min.js"></script>
+	<script src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>
+
+	<!-- Global site tag (gtag.js) - Google Analytics -->
+<!-- 	<script async src="https://www.googletagmanager.com/gtag/js?id=UA-168660512-1"></script> -->
+	<script>
+// 		window.dataLayer = window.dataLayer || [];
+// 		function gtag(){dataLayer.push(arguments);}
+// 		gtag('js', new Date());
+// 		gtag('config', 'UA-168660512-1');
+	</script>
+</head>
+
+</html>

+ 24 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/ScriptsMob.html

@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ScriptsWeb.html
+ * @desc    : 공통 스크립트
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.08   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<th:block th:fragment="scripts">
+<script th:src="@{'/ux/mo/js/common_m.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/mo/js/common_m.js"></script>
+<script th:src="@{'/ux/mo/js/main_m.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/mo/js/main_m.js"></script>
+<script th:src="@{'/ux/style24_link.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/style24_link.js"></script>
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.common.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.common.js"></script>
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.validation.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.validation.js"></script>
+</th:block>
+</html>

+ 42 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/VariablesMob.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : VariablesWeb.html
+ * @desc    : Global variables 설정
+ *            prefix를 _(underbar)로 시작한다.
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.28   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<th:block th:fragment="variables">
+<script th:inline="javascript">
+/*<![CDATA[*/
+var _frontUrl = [[${@environment.getProperty('domain.front')}]];
+var _uximgUrl = [[${@environment.getProperty('domain.uximage')}]];
+var _imgUrl = [[${@environment.getProperty('domain.image')}]];
+var _uploadDefaultUrl = [[${@environment.getProperty('upload.default.view')}]];
+var _uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
+var _uploadImageUrl = [[${@environment.getProperty('upload.image.view')}]];
+var _frontGb = [[${frontGb}]];
+
+var _today = [[${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}]];
+var _realtime = [[${#calendars.format(#calendars.createNow(), 'HHmmss')}]];
+var _thisYear = [[${#calendars.format(#calendars.createNow(), 'yyyy')}]];
+
+// App Info.
+var _osType = [[${osType}]];
+var _isApp = [[${isApp}]];
+var _appName = [[${appName}]];
+var _appVersion = [[${appVersion}]];
+/*]]>*/
+</script>
+</th:block>
+
+</html>

+ 47 - 0
src/main/webapp/WEB-INF/views/mob/common/layout/CallcenterLayoutMob.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+
+<head th:replace="~{web/common/fragments/HeadWeb :: head}"></head>
+
+<body>
+
+	<div class="app">
+		<a href="#mainCon" class="skipNav">본문바로가기</a>
+		
+		<!-- GNB -->
+		<header th:replace="~{web/common/fragments/GnbWeb :: gnb}"></header>
+		<!--// GNB -->
+
+		<!-- CONTENT AREA -->
+		<th:block layout:fragment="content"></th:block>
+		<!-- // CONTENT AREA -->
+
+<!-- Footer -->
+<footer id="footer" th:replace="~{web/common/fragments/FooterWeb :: footer}"></footer>
+
+<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
+<!-- <th:block th:replace="~{web/common/fragments/MarketingScripts :: mscripts}"></th:block> -->
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var fnSetCallcenterGnb = function(lnbLvl) {
+		let tag = '';
+		tag += '<ul>\n';
+		tag += '	<li><a href=javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);"' + (lnbLvl == 1 ? ' class="on"' : '') + '>FAQ</a></li>\n';
+		tag += '	<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"' + (lnbLvl == 2 ? ' class="on"' : '') + '>1:1문의</a></li>\n';
+		tag += '	<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_GOODS_QNA);"' + (lnbLvl == 3 ? ' class="on"' : '') + '>상품문의</a></li>\n';
+		tag += '	<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOTICE);"' + (lnbLvl == 4 ? ' class="on"' : '') + '>공지</a></li>\n';
+		tag += '</ul>\n';
+		$('#callcenterGnb').html(tag);
+	}
+	
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+</body>
+</html>

+ 27 - 0
src/main/webapp/WEB-INF/views/mob/common/layout/ErrorLayoutMob.html

@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+
+<head th:replace="~{web/common/fragments/HeadWeb :: head}"></head>
+
+<body>
+
+<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
+
+<!-- CONTENT AREA -->
+<th:block layout:fragment="content"></th:block>
+<!-- // CONTENT AREA -->
+
+<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+</body>
+</html>

+ 60 - 0
src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaFormWeb.html

@@ -87,6 +87,30 @@
 	</div>
 	<!-- // container -->
 	
+	<!-- 문의 이미지 팝업 -->
+	<div class="modal fade cs_pop contact_img_pop" id="contactImgPop" tabindex="-1" role="dialog" aria-labelledby="contactImgLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<div class="modal-header sr-only">
+					<h5 class="modal-title" id="contactImgLabel">이미지 상세보기</h5>
+				</div>
+				<div class="modal-body">
+					<div class="pop_cont">
+ 						<div class="swiper-container">
+							<div class="swiper-wrapper">
+								<!-- 이미지 슬라이드 영역 -->
+							</div>
+						</div>
+						<div class="swiper-button-next"></div>
+						<div class="swiper-button-prev"></div>
+						<div class="swiper-pagination"></div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- //문의 이미지 팝업 -->
+	
 	<form id="qnaForm" name="qnaForm" action="#" th:action="@{'/callcenter/onetoone/qna/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
 		<input type="hidden" name="pageSize" value ="10"/>
@@ -95,6 +119,42 @@
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
+	//슬라이드 - 문의 이미지 팝업
+	var contactPopSwiper = new Swiper('.cs_pop.contact_img_pop .swiper-container', {
+		navigation: {
+			nextEl: '.cs_pop.contact_img_pop .swiper-button-next',
+			prevEl: '.cs_pop.contact_img_pop .swiper-button-prev',
+		},
+		pagination: {
+			el: '.cs_pop.contact_img_pop .swiper-pagination',
+			clickable: true,
+		},
+		observer:true,
+		observeParents: true,
+	});
+	
+	// 팝업 - 문의 이미지 슬라이드
+	$(document).on('click','.contactUs .img_group .thumb_pic',function(e){
+		$("#contactImgPop .swiper-wrapper").empty();
+
+		var popSlideIndex = $(this).index();
+		contactPopSwiper.slideTo(popSlideIndex);
+		contactPopSwiper.update();
+
+		var contactImglength = $('.contactUs .img_group .thumb_pic').length;
+		var popImgHtml = "";
+		for (i = 1; i <= contactImglength; i++) {
+			var contactImg = $(this).find('img');
+			var contactImgSrc = $('.img_group .thumb_pic:nth-child('+i+') img').attr('src');
+			popImgHtml += "<div class='swiper-slide'><div class='pop_img' style='background-image:url("+ contactImgSrc +")'></div></div>";
+		}
+
+		$("#contactImgPop .swiper-wrapper").append(popImgHtml);
+		$('#contactImgPop').modal("show");
+		
+		return false;
+	});
+	
 	$(document).ready(function() {
 		// 고객센터 LNB 설정
 		fnSetCallcenterLnb(2);

+ 28 - 38
src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaRegisterFormWeb.html

@@ -41,7 +41,7 @@
 							<div class="sec_body">
 								<div class="t_info blt_dot mb15 light">문의를 남겨 주시면 24시간 이내(토/일/공휴일 제외)에 답변 드릴 수 있도록 최선을 다 하겠습니다.</div>
 								
-								<form class="form_wrap" role="form" name="qnaForm" id="qnaForm" th:action="@{'/onetoone/qna/create'}" method="post">
+								<form class="form_wrap" role="form" name="qnaForm" id="qnaForm" th:action="@{'/callcenter/onetoone/qna/create'}" method="post">
 									<div class="form_field">
 										<label class="ui_col_2 input_label">문의 유형</label>
 										<div class="ui_col_10 form_full">
@@ -82,14 +82,14 @@
 												<!-- 이미지첨부 -->
 												<div class="form_field">
 													<div class="imgUpload">
-														<label for="fileAdd" class="fileAdd">업로드</label>
+														<label for="fileAdd" class="fileAdd">첫번째업로드</label>
 														<input type="file" id="fileAdd" name="file1"/>
-														<input type="hidden" name="fileAddOrgFileNm"/>
-														<input type="hidden" name="fileAddSysFileNm"/>
+														<input type="hidden" name="file1OrgFileNm"/>
+														<input type="hidden" name="file1SysFileNm"/>
 													</div>
 													<div class="imgUpload">
-														<label for="fileAdd" class="fileAdd">업로드</label>
-														<input type="file" id="file2" name="file2"/>
+														<label for="fileAdds" class="fileAdd">두번째업로드</label>
+														<input type="file" id="fileAdds" name="file2"/>
 														<input type="hidden" name="file2OrgFileNm"/>
 														<input type="hidden" name="file2SysFileNm"/>
 													</div>
@@ -106,20 +106,16 @@
 										</div>
 									</div>
 									<div class="form_field">
-										<label class="ui_col_2 input_label">휴대폰</label>
-										<div class="ui_col_10 cellphone">
+										<label class="ui_col_2 input_label">알림톡 수신 여부</label>
+										<div class="ui_col_10 push_agree">
 											<div class="input_wrap">
-												<input type="text" class="form_control" name="cellPhnno" maxlength="13" placeholder="휴대폰 번호를 입력해 주세요." required="required" data-valid-type="cellPhone" data-valid-name="휴대폰번호"/> <!-- 잘못 입력시 클래스명 : err 추가  -->
-												<!-- 알림 신청 체크박스(선택 _ 기본값) -->
-												<div class="ck_box">
-													<input type="hidden" name="smsReqYn"/>
-													<input type="checkbox" name="chkSmsReqYn" value="Y" checked="checked"/>
-													<label for="chkSmsReqYn"><span>알림 신청</span></label>
+												<div>
+													<input type="radio" name="smsReqYn" id="smsReqYn1" value="Y" checked="checked"><label for="smsReqYn1"><span>수신</span></label>
+												</div>
+												<div>
+													<input type="radio" name="smsReqYn" id="smsReqYn2" value="N"><label for="smsReqYn2"><span>미수신</span></label>
 												</div>
 											</div> 
-											<div class="help_block" style="display: none;" id="divCellPhnno">
-												<p class="t_err">휴대폰 번호를 형식에 맞게 정확히 입력해주세요.</p>
-											</div>
 										</div>
 									</div>
 								</form>
@@ -157,7 +153,7 @@
 	
 	// 파일첨부 선택 시
 	$('#fileAdd').on('change', function() { fnChooseFile(this); });
-	$('#file2').on('change', function() { fnChooseFile(this); });
+	$('#fileAdds').on('change', function() { fnChooseFile(this); });
 	
 	var fnChooseFile = function(obj) {
 		// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
@@ -166,16 +162,26 @@
 		if (!gagajf.isNull(file.name)) {
 			var extension = "\.(jpg|jpeg|png)$";
 			if (!(new RegExp(extension, "i")).test(file.name)) {
-				mcxDialog.alert('이미지는 [jpg, jpeg, png] 파일만 가능합니다.');
+				mcxDialog.alertC('이미지는 [jpg, jpeg, png] 파일만 가능합니다.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$(obj).parent('.imgUpload').find('.removes').trigger('click');
+					}
+				});
 				return false;
 			}
 		}
 		
 		if (!gagajf.isNull(file.size) && Number(file.size) > 20 * 1000000) {
-			mcxDialog.alert('이미지는 최대 20MB 이하 파일만 가능합니다.');
+			mcxDialog.alertC('이미지는 최대 20MB 이하 파일만 가능합니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(obj).parent('.imgUpload').find('.removes').trigger('click');
+				}
+			});
 			return false;
 		}
-
+		
 		// 파일 업로드
 		gagajf.ajaxFileUpload('/common/file/upload?subDir=/counsel'
 				, file
@@ -193,28 +199,12 @@
 		if (!gagajf.validation('#qnaForm'))
 			return false;
 
-		if (!gagajf.isNull($('#qnaForm input[name=cellPhnno]').val())) {
-			let regexp = /^(01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4})$/;
-			if (!regexp.test($('#qnaForm input[name=cellPhnno]').val())) {
-				$('#qnaForm input[name=cellPhnno]').addClass('err');
-				$('#divCellPhnno').show();
-				$('#qnaForm input[name=cellPhnno]').select();
-				$('#qnaForm input[name=cellPhnno]').focus();
-				return false;
-			}
-		}
-		
-		$('#qnaForm input[name=cellPhnno]').removeClass('err');
-		$('#divCellPhnno').hide();
-		
-		$('#qnaForm input[name=smsReqYn]').val($('#qnaForm input:checkbox[name=chkSmsReqYn]').is(":checked") ? 'Y' : 'N');
-
 		mcxDialog.confirm("저장하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
 				gagajf.ajaxFormSubmit($('#qnaForm').prop('action')
-						, $('#qnaForm')
+						, '#qnaForm'
 						, function() {
 							cfnGoToPage(_PAGE_ONETOONE_QNA);
 						}

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

@@ -101,7 +101,7 @@
 					<li><a href="#">총알배송</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>
 			</div>
 			<!-- // nav -->

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

@@ -28,11 +28,14 @@
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/common.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/common.css"/>
 	<link rel="stylesheet" type="text/css" href="/ux/pc/css/jquery-ui.css">
 	<link rel="stylesheet" type="text/css" href="/ux/pc/css/slick.css" />
+	<link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
 	
-	<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
+	<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
+	<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
+	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
+	<script src="/ux/pc/js/jquery.modal.min.js"></script>
 	<script src="/ux/pc/js/slick.min.js"></script>
 	<script src="/ux/pc/js/jquery-ui.js"></script>
-	<script src="/ux/pc/js/jquery.modal.min.js"></script>
 	<script src="/ux/pc/js/jquery.ui.datepicker.monthyearpicker.js"></script>
 	<script src="/ux/plugins/jquery.serializeObject.min.js"></script>
 	<script src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/customer/DormantCertifyResultFormWeb.html → src/main/webapp/WEB-INF/views/web/customer/DormantCertifyCompleteFormWeb.html

@@ -37,7 +37,7 @@
 					</div>
 					<div class="btn_group_block btn_group_md ui_row">
 						<div class="ui_col_12">
-							<button class="btn btn_dark btn_block"><span>로그인</span></button>
+							<button type="button" class="btn btn_dark btn_block" onclick="cfnGoToPage(_PAGE_LOGIN);"><span>로그인</span></button>
 						</div>
 					</div>
 				</div>

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

@@ -38,10 +38,14 @@
 					<div class="btn_group_block">
 						<div class="ui_row">
 							<div class="ui_col_6">
-								<button class="btn btn_default btn_block"><span><i class="ico ico_phone"></i>휴대폰인증</span></button>
+								<button type="button" class="btn btn_default btn_block" onclick="cfnOpenCellphoneCertify();">
+									<span><i class="ico ico_phone"></i>휴대폰인증</span>
+								</button>
 							</div>
 							<div class="ui_col_6">
-								<button class="btn btn_default btn_block"><span><i class="ico ico_ipin"></i>아이핀인증</span></button>
+								<button type="button" class="btn btn_default btn_block" onclick="cfnOpenIpinCertify();">
+									<span><i class="ico ico_ipin"></i>아이핀인증</span>
+								</button>
 							</div>
 						</div>
 					</div>
@@ -59,7 +63,24 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	// 나이스 본인인증 후 콜백
+	var fnNiceCallBack = function(encData) {
+		if (!gagajf.isNull(encData)) {
+			let custInfo = {};
+			custInfo.encData = encData;
+			let jsonData = JSON.stringify(custInfo);
+			gagajf.ajaxJsonSubmit('/customer/dormnat/release', jsonData, fnRelaseCallback);
+		}
+	};
 
+	var fnRelaseCallback = function (result) {
+		if (result.isRelase) {
+			cfnGoToPage(_PAGE_CUSTOMER_DORMANT_COMPLETE);
+		} else {
+			mcxDialog.alert("휴면해제 실패하였습니다. <br> 고객센터에 문의 하시기 바랍니다.");
+			return;
+		}
+	}
 /*]]>*/
 </script>
 

+ 21 - 23
src/main/webapp/WEB-INF/views/web/customer/JoinFormWeb.html

@@ -133,7 +133,15 @@
 								<p id="failPhnno" class="t_err hide">휴대폰번호를 형식에 맞게 정확히 입력해주세요</p>
 								<!-- //휴대폰번호 형식이 맞지 않을경우 -->
 								<!-- 이미 가입되어있는 핸드폰번호일경우 -->
-								<p id="dupPhnno" class="t_err hide">I***D로 가입된 핸드폰 번호 입니다.</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" onclick="cfnGoToPage(_PAGE_LOGIN);">
+										<span>로그인</span>
+									</button>
+									<button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
+										<span>아이디 찾기</span>
+									</button>
+								</div>
 								<div class="mt20">
 									<button type="button" id="btnCellPhoneCertify" class="btn btn_default btn_sm">
 										<span>휴대폰 인증</span>
@@ -168,7 +176,6 @@
 	let custIdCheck = false;
 	let passwdCheck = false;
 	let emailCheck = false;
-	let phoneCheck = false;
 	let authCheck = false;
 
 	// 아이디 확인
@@ -364,23 +371,6 @@
 		}
 	});
 
-	// 휴대폰 번호 입력에대한 결과
-	var fnPhoneConfirmCallBack = function (result) {
-		// const $cellPhnno = $('#cellPhnno');
-		const $dupPhnno = $('#dupPhnno');
-		if (result.isFind) { // 가입된 고객 정보가 있으면
-			$dupPhnno.text(result.maskingCustId+'로 가입된 핸드폰 번호 입니다.');
-			$dupPhnno.show();
-			// $cellPhnno.text(result.cellPhnno);
-			// $cellPhnno.show();
-			phoneCheck = false;
-		} else {
-			$dupPhnno.hide();
-			phoneCheck = true;
-		}
-		fnPossibleJoin();
-	};
-	
 
 	//휴대폰 인증
 	$('#btnCellPhoneCertify').on('click', function () {
@@ -399,16 +389,24 @@
 
 	// 본인인증 후 결과
 	var fnInfoConfirmCallBack = function (result) {
-		// const $cellPhnno = $('#cellPhnno');
+		const $cellPhnno = $('#cellPhnno');
 		const $dupPhnno = $('#dupPhnno');
+		const $dupPhnnoDiv = $('#dupPhnnoDiv');
+		const $btnCellPhoneCertify = $('#btnCellPhoneCertify');
+		$cellPhnno.val(result.cellPhnno);
+
 		if (result.isFind) { // 가입된 고객 정보가 있으면
 			$dupPhnno.text(result.maskingCustId+'로 가입된 이력이 있습니다.');
 			$dupPhnno.show();
-			// $cellPhnno.text(result.cellPhnno);
-			// $cellPhnno.show();
+			$dupPhnnoDiv.show();
+			$btnCellPhoneCertify.text('휴대폰 인증');
+			$btnCellPhoneCertify.attr('disabled', false);
 			authCheck = false;
 		} else {
 			$dupPhnno.hide();
+			$dupPhnnoDiv.hide();
+			$btnCellPhoneCertify.text('인증완료');
+			$btnCellPhoneCertify.attr('disabled', true);
 			authCheck = true;
 		}
 		fnPossibleJoin();
@@ -435,7 +433,7 @@
 	// 가입 가능한지 확인
 	var fnPossibleJoin = function () {
 		const $btnJoin = $('#btnJoin');
-		if (custIdCheck && passwdCheck && emailCheck && phoneCheck && authCheck ) {
+		if (custIdCheck && passwdCheck && emailCheck && authCheck ) {
 			$btnJoin.attr('disabled', false);
 		} else {
 			$btnJoin.attr('disabled', true);

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

@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  :GoodsDeliveryFormWeb.html
+ * @desc	: 상품 배송안내 팝업
+ *============================================================================
+ * Wivismall
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.08   eskim		최초 작성
+ *******************************************************************************
+ -->
+ <div class="full_popup_wrap">
+	<h5 class="sr-only">배송교환반품 안내</h5>
+	<div class="btn_close">
+		<a href="javascript:void(0)" onclick="cfCloseFullLayer('layer_goods_delivery');">닫기버튼</a>
+	</div>
+	<div class="full_pop_header">
+		<!-- 해당 상품 -->
+		<div class="item_prod" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+			<div class="item_state">
+				<a href="javascript:void(0);" class="itemLink">
+					<div class="itemPic">
+						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
+					</div>
+					<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
+					<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+					<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+						<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+						<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+					</p>
+				</a>
+			</div>
+		</div>
+		<!-- //해당 상품 -->
+	</div>
+	<div class="full_pop_container">
+		<div class="pd_delivery">
+			<div class="table_box">
+				<h6>배송안내</h6>
+				<div class="tbl type1">
+					<table>
+						<colgroup>
+							<col width="220">
+							<col width="*">
+						</colgroup>
+						<tbody>
+							<tr>
+								<th>
+									구분
+								</th>
+								<td>
+									<th:block th:if="${goodsInfo.quikDelvYn = 'Y'}" >총알배송(오전 10시까지 주문 시)</th:block>
+									<th:block th:unless="${goodsInfo.quikDelvYn = 'Y'}" >일반배송</th:block>
+									
+									 
+								</td>
+							</tr>
+							<tr>
+								<th>
+									배송비
+								</th>
+								<td>
+									<th:block 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>
+									<th:block  th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
+								</td>
+							</tr>
+							<tr>
+								<th>
+									배송업체
+								</th>
+								<td>
+									CJ 대한통운  -- 수정
+								</td>
+							</tr>
+							<tr>
+								<th>
+									기간
+								</th>
+								<td>
+									총알배송  :  오늘 밤 12시까지 도착 (토/일/공휴일 제외)<br>
+									일반배송  :  결제 완료 후 2~3일 이내 (일/공휴일 제외)<br>
+									단, 제주도나 도서 지방은 별도요금이 부과될 수 있습니다. 날씨나 택배사 사정에 따라 배송이 지연될 수 있습니다.
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="table_box">
+				<h6>반품/교환안내</h6>
+				<div class="tbl type1">
+					<table>
+						<colgroup>
+							<col width="220">
+							<col width="*">
+						</colgroup>
+						<tbody>
+							<tr>
+								<th>
+									반품/교환 배송업체
+								</th>
+								<td>
+									CJ 대한통운  -- 수정
+								</td>
+							</tr>
+							<tr>
+								<th>
+									반품배송비
+								</th>
+								<td>
+									<th:block th:text="${#numbers.formatInteger(deliveryInfo.rtnDelvFee, 0,'COMMA')}" ></th:block>원(최소 배송비가 무료인 경우 왕복 배송비 <th:block th:text="${#numbers.formatInteger((deliveryInfo.rtnDelvFee+deliveryInfo.delvFee), 0,'COMMA')}" ></th:block>원 부과)
+								</td>
+							</tr>
+							<tr>
+								<th>
+									교환배송비
+								</th>
+								<td>
+									<th:block th:text="${#numbers.formatInteger((deliveryInfo.rtnDelvFee+deliveryInfo.delvFee), 0,'COMMA')}" ></th:block>원
+								</td>
+							</tr>
+							<tr>
+								<th>
+									반품/교환 주소
+								</th>
+								<td>
+									<th:block th:text="${deliveryInfo.rtnLocZipcode +' '+ deliveryInfo.rtnLocBaseAddr +' '+ deliveryInfo.rtnLocDtlAddr }"></th:block>
+								</td>
+							</tr>
+							<tr>
+								<th>
+									반품/교환 신청
+								</th>
+								<td>
+									반품/교환시 먼저 고객센터(1544-5336)나 일대일 문의로 반품/교환 신청 후 상품을 발송 해 주시기 바랍니다.<br>
+									마이페이지 > 나의쇼핑 > 정상주문내역에서 하실 수 있습니다.<br>
+									반품/교환 신청시 상품의 반송입고 확인 후 환불/교환 처리해 드립니다.
+								</td>
+							</tr>
+							<tr>
+								<th>
+									반품시기
+								</th>
+								<td>
+									상품의 반품/교환은 상품 수령 후 7일 이내 가능합니다.<br>
+									단 상품을 수령하셨을 때의 상태를 그대로 보존해주셔야 합니다.
+								</td>
+							</tr>
+							<tr>
+								<th>
+									반품/교환 불가사유
+								</th>
+								<td>
+									반품/교환 가능기간을 초과하였을 경우.<br>
+									상품 및 구성품을 분실하였거나 취급 부주의로 인한 파손/고장/오염된 경우.<br>
+									고객님의 요청에 따른 주문제작 상품의 경우.<br>
+									상품을 착용 또는 설치하였거나, 상품의 일부를 소비하였을 경우.<br>
+									상품의 포장을 개봉하여 사용 및 설치가 완료 되거나 상품의 가치가 훼손되었을 경우.<br>
+									구매한 상품의 구성품(세트, 기프트상품, 부속품, 의류부착 악세사리 등) 이 누락 된 경우.<br>
+									신발, 그릇류의 박스포장을 포함, 상품이 판매할 수 없게 훼손 된 경우(신발박스 등의 파손, 박스포장 위 송장 부착, 박스 훼손/파손/찢어짐, 택 분실 등)
+								</td>
+							</tr>
+							<tr th:if="${not #strings.isEmpty(deliveryInfo.note)}">
+								<th>
+									기타사항
+								</th>
+								<td th:utext="${#strings.unescapeJava(#strings.escapeJava(deliveryInfo.note))}">
+									상품에 따라 반송주소/방법이 각각 다를 수 있습니다.<br>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div> 
+		</div>	
+	</div>
+</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	
+	
+/*]]>*/
+</script>
+
+ </html>

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

@@ -87,7 +87,7 @@
 								<div class="desc_top">
 									<a href="javascript:void(0);" class="btn_brand" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</a>
 									<button type="button" class="itemShare">상품 공유하기</button>
-									<button type="button" class="itemLike" th:classappend="${wishYn == 'Y'}? 'active' : ''">관심상품 추가</button>
+									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								<div class="desc_info">
 									<div class="title_blk">
@@ -354,13 +354,14 @@
 									</li>
 									<li>
 										<div class="ex_shipping">
-											<a href="" id="btn_pdDeliveryPop">
+											<a href="javascript:void(0);" id="btn_pdDeliveryPop" th:onclick="cfGoodsDelivery([[${goodsInfo.goodsCd}]])">
 												<span class="tit">배송/교환/반품</span>
 												<!-- 해당 배송정보 선택노출 -->
-												<span class="txt_shippingfee">배송비 2,500원</span>
-												<span class="txt_shippingfee">배송비 2,500원 (4,000원 이상 무료배송)</span>
-												<span class="txt_shippingfee">무료배송</span>
-												<span class="txt_shippingfee">총알배송(오전 10시까지 주문 시)</span>
+												<span class="txt_shippingfee" th:if="${goodsInfo.delvFee > 0}">배송비 <th:block 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>
+												</span>
+												<span class="txt_shippingfee" th:if="${goodsInfo.delvFee <= 0}">무료배송</span>
+												<span class="txt_shippingfee" th:if="${goodsInfo.quikDelvYn = 'Y'}">총알배송(오전 10시까지 주문 시)</span>
 												<!-- //해당 배송정보 선택노출 -->
 											</a>
 										</div>
@@ -420,114 +421,6 @@
 									</div>
 								</div>
 							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
 						</div>
 						<!-- Add Scrollbar -->
 						<div class="swiper-scrollbar"></div> 
@@ -546,12 +439,12 @@
 				<!-- 상품설명 노출 -->
 				<div class="descrp_box">
 					<div class="desc_simple"> <!-- 상품 간략설명-->
-						<span class="tit_desc" th:if="${goodsInfo.goodsTitle}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
+						<span class="tit_desc" th:if="${goodsInfo.goodsTitle  != null  and !goodsInfo.goodsTitle.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
 						<p class="ptxt01"th:if="${goodsInfo.goodsTitleDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitleDesc))}">
 							슬림핏에 사이드 밴딩으로 편안함을 더해준 슬랙스입니다. 
 						</p>
 					</div>
-					<div class="desc_character" th:if="${goodsInfo.goodsSpecialDesc}"> <!-- 상품특징 -->
+					<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))}">
 							- 지퍼플러 장식을 더해 완성도를 높여줌
@@ -559,53 +452,97 @@
 					</div>
 				</div>
 				<!-- //상품설명 노출 -->
-				<!-- 관리자 에디터입력 내용   상단 html -->
-				<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" ></th:block>
-				<div class="mdhtml_box" th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}">
-				</div>
+				<!-- 관리자 에디터입력 내용   공지 html -->
+					<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
+				<div class="mdhtml_box" th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></div>
+					</th:block>
+				<!-- 관리자 에디터입력 내용   공지 html -->
 				<!-- 관리자 에디터입력 내용 노출  상단 html -->
-				<div class="mdhtml_box" th:if="${goodsInfo.goodsTopDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}">
-				</div>
-				<!-- //관리자 에디터입력 내용 노출 -->
+				<div class="mdhtml_box" th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></div>
+					
 				<!-- 착용컷 노출 -->
-				<div class="view_outfit_box">
+				<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1.') 
+													or #strings.contains(goodsImgList,'_M2.')
+													or #strings.contains(goodsImgList,'_M3.')
+													or #strings.contains(goodsImgList,'_M4.')
+													or #strings.contains(goodsImgList,'_M5.')}">
 					<span class="tit_view">OUTFIT VIEW</span>
 					<span class="model_info">(모델정보 : 185cm / 78kg / XL 착용)</span>
 					<div class="view">
-						<img src="/images/pc/thumb/tmp_outfit_desc1.jpg" alt="">
-						<img src="/images/pc/thumb/tmp_outfit_desc2.jpg" alt="">
-						<img src="/images/pc/thumb/tmp_outfit_desc3.jpg" alt="">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1.') 
+																					or #strings.contains(goodsImg.sysImgNm,'_M2.')
+																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
+																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
+																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						</th:block>
 					</div>
 				</div>
+				
 				<!-- //착용컷 노출 -->
 				<!-- 상품컷 노출 -->
-				<div class="view_detail_box">
+				<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01.') 
+													or #strings.contains(goodsImgList,'_02.')
+													or #strings.contains(goodsImgList,'_D1.')
+													or #strings.contains(goodsImgList,'_D2.')
+													or #strings.contains(goodsImgList,'_D3.')
+													or #strings.contains(goodsImgList,'_D4.')
+													or #strings.contains(goodsImgList,'_D5.')}">
 					<span class="tit_view">PRODUCT VIEW</span>
 					<div class="view">
-						<img src="/images/pc/thumb/tmp_detail_desc1.jpg" alt="">
-						<img src="/images/pc/thumb/tmp_detail_desc2.jpg" alt="">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01.') 
+																					or #strings.contains(goodsImg.sysImgNm,'_02.')
+																					or #strings.contains(goodsImg.sysImgNm,'_D1.')
+																					or #strings.contains(goodsImg.sysImgNm,'_D2.')
+																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
+																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
+																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						</th:block>
 					</div>
 				</div>
 				<!-- //상품컷 노출 -->
 				<!-- 원단 노출 -->
-				<div class="view_fabric_box">
+				<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1.')}">
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
-						<img src="/images/pc/thumb/tmp_fabric_desc1.jpg" alt="">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						</th:block>
 					</div>
 				</div>
 				<!-- //원단 노출 -->
 				<!-- 라벨 노출 -->
-				<div class="view_label_box">
+				<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1.') 
+													or #strings.contains(goodsImgList,'_L2.')}">
 					<span class="tit_view">LABEL INFO</span>
 					<div class="view">
 						<span>
-							<img src="/images/pc/thumb/tmp_label_desc1.jpg" alt="">
-							<img src="/images/pc/thumb/tmp_label_desc2.jpg" alt="">
+							<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1.') 
+																					or #strings.contains(goodsImg.sysImgNm,'_L2.')}">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							</th:block>
 						</span>
 					</div>
 				</div>
-				<!-- //라벨 노출 -->					
+				<!-- //라벨 노출 -->
+				
+				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
+					<div class="view">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" >
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+							</th:block>
+					</div>
+				</div>
+				
+					<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" >
+				<!-- 상세 html 이 존재하면  -->
+				<div class="mdhtml_box" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></div>
+					</th:block>
+					
+				<!-- 관리자 에디터입력 내용 노출  하다단 html -->
+				<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>
+					
 				<!-- 브랜드 노출 -->
 				<div class="brand_box">
 					<p class="name" th:text="${goodsInfo.brandGroupNm}">TBJ 티비제이</p>
@@ -633,7 +570,7 @@
 							어린이제품 안전인증 / 한국건설생활시험연구원(KCL)
 						</p>
 						<p class="normal" >
-							<th:block th:if="${goodsSafeNo.isCertNum}">
+							<th:block th:if="${not #strings.isEmpty(goodsSafeNo.isCertNum)}" >
 							 인증번호: :CB123A123-1234
 							<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
 							</th:block>
@@ -737,114 +674,6 @@
 										</div>
 									</div>
 								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
 							</div>
 						</div>
 						<!-- Add Pagination -->
@@ -866,8 +695,8 @@
 				<!-- CONT-BODY -->
 				<div class="area_slider">
 						<div class="swiper-container">
-							<div class="swiper-wrapper" th:each="lookbook, status : ${lookbookList}">
-								<div class="swiper-slide">
+							<div class="swiper-wrapper" >
+								<div class="swiper-slide" th:each="lookbook, status : ${lookbookList}">
 									<div class="page">
 										<div class="pic">
 											<span class="thumb" style="background-image:url('/images/pc/thumb/tmp_pdLookbook1.jpg');"></span>
@@ -893,7 +722,8 @@
 												<div class="li_item">
 													<ul >
 														<li th:each="lookbookGoods, status : ${lookbook.lookbookGoodsList}">
-															<div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''"> <!-- 판매불가 상품에 unable 추가 -->
+															<div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''"
+																					th:attr="goodsCd=${lookbookGoods.goodsCd}, optCd=${lookbookGoods.optCd}, minOrdQty=${lookbookGoods.minOrdQty},  goodsType=${lookbookGoods.goodsType}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}"> <!-- 판매불가 상품에 unable 추가 -->
 																<div class="item_state">
 																	<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${lookbookGoods.goodsCd}]], '',[[${ithrCd}]],[[${contentsLoc}]] )">
 																		<div class="itemPic">
@@ -912,13 +742,11 @@
 														</li>
 													</ul>
 												</div>
-												<button type="button" class="btn btn_block btn_md"><span>모두 쇼핑백 담기</span></button>
+												<button type="button" class="btn btn_block btn_md" onclick="jfAddCartLookBookGoods(this);"><span>모두 쇼핑백 담기</span></button>
 											</div>
 										</div>
-									</div>									
+									</div>
 								</div>
-								
-								
 							</div>
 						</div>
 						<!-- Add Pagination -->
@@ -977,114 +805,6 @@
 										</div>
 									</div>
 								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
 							</div>
 						</div>
 						<!-- Add Pagination -->
@@ -1161,96 +881,6 @@
 										</div>
 									</div>
 								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
 							</div>
 						</div>
 						<!-- Add Pagination -->
@@ -2544,40 +2174,6 @@
 	</div>
 	<!-- //재입고 알림신청 팝업 -->  
 
-	<!-- 배송교환반품안내 팝업 -->
-	<div class="pd_pop full_pop pd_delivery_pop" id="pdDeliveryPop"> 
-		<div class="full_popup_wrap">
-			<h5 class="sr-only">배송교환반품 안내</h5>
-			<div class="btn_close">
-				<a href="" id="btn_close_deliveryPop">닫기버튼</a>
-			</div>
-			<div class="full_pop_header">
-				<!-- 해당 상품 -->
-				<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">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
-							<p class="itemPrice">134,100
-								<span class="itemPrice_original">149,000</span>
-								<span class="itemPercent">30%</span>
-							</p>
-						</a>
-					</div>
-				</div>
-				<!-- //해당 상품 -->
-			</div>
-			<div class="full_pop_container">
-				<!-- 배송교환반품안내 리스트 내용 -->
-			</div>
-		</div>		
-	</div>
-	<!-- //배송교환반품안내 팝업 -->
-
-
 	<!-- **************** 상품리뷰 팝업 **************** -->
 	<!-- 상품리뷰 리스트 팝업 -->
 	<div class="pd_pop full_pop pd_review_pop" id="pdReviewPop">
@@ -2771,9 +2367,6 @@
 			return false;
 		});   
 
-		//상품상세정보 안내 호출
-		$(".pd_descrp").load("pd_descrp_pop.html");
-
 		//상품상세정보 더보기   
 		$(document).on('click','.pd_descrp .btn_more_box button',function(e){
 			$('.pd_descrp .cont_body').toggleClass('on'); 
@@ -2952,19 +2545,6 @@
 			return false;
 		});		
 		
-		//팝업 - 배송교환반품 안내
-		$(document).on('click','#btn_pdDeliveryPop',function(e){
-			$('body').addClass('lock');
-			$("#pdDeliveryPop .full_pop_container").load("pd_delivery_pop.html");
-			$("#pdDeliveryPop").show(); 
-			return false;
-		}).on('click','#btn_close_deliveryPop',function(e){
-			$("#pdDeliveryPop").hide(); 
-			$('body').removeClass('lock');
-			
-			return false;
-		});
-
 	});
 	
 	//사이즈 클릭시
@@ -3141,7 +2721,7 @@
 			obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
-			obj.planDtlSq =$("#cartForm  input[name=planDtlSq]").val();
+			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();;
 			params.push(obj);
 
 		}else if (goodsType == 'G056_S'){  //수정요
@@ -3175,6 +2755,40 @@
 		cfnAddCart(params);
 	}
 
+	// 룩북속 상품 쇼핑백 담기
+	var jfAddCartLookBookGoods = function(obj){
+		
+		var $obj = $(obj);
+		var $target = $obj.parent().find('.li_item').find('.item_prod');
+		var btnType = "C";
+		var params = [];
+		
+		$target.each(function(){
+			
+			if ($target.hasClass('unbale')) {
+				
+			}else{
+				debugger;
+				var obj = new Object();
+				obj.goodsCd = $target.attr("goodsCd");
+				obj.optCd = $target.attr("optCd");
+				obj.goodsQty = $target.attr("minOrdQty");
+				obj.goodsType = $target.attr("goodsType");
+				//obj.dealGoodsCd = $("#cartForm  input[name=goodsType]").val();
+				obj.cartGb = btnType;
+				obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
+				obj.ithrCd = $target.attr("ithrCd");
+				obj.contentsLoc = $target.attr("contentsLoc");
+				obj.planDtlSq = '';
+				params.push(obj);
+			}
+			
+			
+		});
+		
+		// 장바구니담기
+		cfnAddCart(params);
+	}
 	
 /*]]>*/
 </script>

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

@@ -23,7 +23,7 @@
 		<!-- 해당 상품 -->
 		<div class="item_prod" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
 			<div class="item_state">
-				<a href="#none" class="itemLink">
+				<a href="javascript:void(0);" class="itemLink">
 					<div class="itemPic">
 						<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}">
 					</div>
@@ -43,7 +43,7 @@
 		<div class="pd_qnalist">
 		<form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
-		<input type="hidden" name="pageSize" value ="10"/>
+		<input type="hidden" name="pageSize" value ="20"/>
 		<input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 			<div class="info_txt">
 				<ul>
@@ -93,7 +93,7 @@
 	
 	let fnGetList = function() {
 		// Initialize a pagination
-		gagaPaging.init('goodsQnaForm', fnGetListCallback, 'pageNav', 10);
+		gagaPaging.init('goodsQnaForm', fnGetListCallback, 'pageNav', 20);
 
 		// Load data
 		gagaPaging.load(1);
@@ -121,7 +121,7 @@
 				}
 				tag += '				</div>\n';
 				tag += '				<div class="data">\n';
-				tag += '					<span class="wr_id">'+ item.custId+'</span>\n';
+				tag += '					<span class="wr_id">'+ item.maskingCustId+'</span>\n';
 				tag += '					<span class="wr_data">' + item.questDt + '</span>\n';
 				tag += '				</div>\n';
 				tag += '			</div>\n';

+ 33 - 18
src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html

@@ -86,24 +86,30 @@
 		// select 날짜 생성
 		var date = new Date();
 		var year = date.getFullYear();
-		var month = date.getMonth() + 1;
+		var month = date.getMonth() +1;
 		
 		var oneYearAgo = year -1;
-		var yearMonth = year;
 		var oneYearLater = year +1;
 		
+		if(10 > month){
+			month = 0 + "" + (date.getMonth()+1);
+		}
+		// Select this year month
+		var checkYm = year + "" + month;
+		
 		for(var i = 1;i <= 12; i++){
 			if(i < 10 && i != month){
-				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + 0 + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
 			}
 			else if(i < 10 && i == month){
-				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + 0 + i +"'>" + yearMonth + "년" + " " + i + "월" +"</li>");
+				$(".select").append("<li 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='"+ yearMonth + "" + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
 			}
 			else if(i > 9 && i == month){
-				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
 			}
 		}
 		
@@ -112,9 +118,8 @@
 		
 		let url = '/mypage/allpoint/list';		
 		let data = {};
-				
+
 		data.searchDt = $('#searchDt').find('.selected').val();
-		console.log(data);
 
 		var jsonData = JSON.stringify(data);
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
@@ -140,9 +145,13 @@
 		
 		let data = {};
 		
-		data.searchDt = $('#searchDt').find('.selected').val();
-		
-		console.log(data);
+		// 처음 화면 로딩시 이번 달 선택
+		if($('.select').find('.selected').val() == checkYm){
+			data.searchDt = $('.select').find('.selected').val();
+		}else{
+			data.searchDt = $('#searchDt').find('.selected').val();
+		}
+
 		var jsonData = JSON.stringify(data);
 		
 		$.ajax(
@@ -158,9 +167,7 @@
 				}
 		)
 	});
-	
 
-	
 	function PointAllListInfo(result) {
 		
 		let allPointList = result.allPointList;
@@ -197,7 +204,11 @@
 		
 		let data = {};
 		
-		data.searchDt = $('#searchDt').find('.selected').val();
+		if($('.select').find('.selected').val() == checkYm){
+			data.searchDt = $('.select').find('.selected').val();
+		}else{
+			data.searchDt = $('#searchDt').find('.selected').val();
+		}
 		
 		let jsonData = JSON.stringify(data);
 		
@@ -246,7 +257,11 @@
 		
 		let data = {};
 		
-		data.searchDt = $('#searchDt').find('.selected').val();
+		if($('.select').find('.selected').val() == checkYm){
+			data.searchDt = $('.select').find('.selected').val();
+		}else{
+			data.searchDt = $('#searchDt').find('.selected').val();
+		}
 		
 		let jsonData = JSON.stringify(data);
 		
@@ -287,9 +302,9 @@
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
 		
-		// 전체내역
-		$("#SearchFullHistory").trigger('click');
-		
+		// 전체내역 표시
+ 		$("#SearchFullHistory").trigger('click');
+
 		// 셀렉트박스 활성화
 		$('.select_custom.type1').each(function(index) {
 			var selecter01 = new sCombo($(this));

+ 4 - 4
src/main/webapp/WEB-INF/views/web/order/OrderCustemerInfoWeb.html

@@ -29,9 +29,9 @@
 </div>
 
 <div class="fold_cont" style="display: none;">
-	<input type="hidden" name="custNm" 		th:value="${custNm}"/>
-	<input type="hidden" name="email" 		th:value="${email}"/>
-	<input type="hidden" name="cellPhnno" 	th:value="${cellPhnno}"/>
+	<input type="hidden" name="custNm" 		th:value="${custemerInfo.custNm}"/>
+	<input type="hidden" name="email" 		th:value="${custemerInfo.email}"/>
+	<input type="hidden" name="cellPhnno" 	th:value="${custemerInfo.cellPhnno}"/>
 	
 	<div class="area_mbinfo">
 		<dl>
@@ -45,7 +45,7 @@
 				<dt>
 					<span class="sr-only">이메일</span>
 				</dt>
-				<dd th:text="${custemerInfo.email}">/dd>
+				<dd th:text="${custemerInfo.email}"></dd>
 			</div>
 			<div>
 				<dt>

+ 70 - 62
src/main/webapp/WEB-INF/views/web/order/OrderDeliveryAddrInfoWeb.html

@@ -21,7 +21,7 @@
 			<div class="fold_tit">
 				<span>배송지 정보</span>
 			</div>
-			<div class="data" th:text="${deliveryAddrInfo.recipBaseAddr} + ${deliveryAddrInfo.recipDtlAddr}"></div>
+			<div class="data" th:text="${deliveryAddrInfo.recipBaseAddr} + ' ' + ${deliveryAddrInfo.recipDtlAddr}"></div>
 		</div>
 	</a>
 </div>
@@ -32,6 +32,8 @@
 		<input type="hidden" name="recipBaseAddr" 	th:value="${deliveryAddrInfo.recipBaseAddr}"/>
 		<input type="hidden" name="recipDtlAddr" 	th:value="${deliveryAddrInfo.recipDtlAddr}"/>
 		<input type="hidden" name="delvMemo" 		th:value="${deliveryAddrInfo.delvMemo}"/>
+		<input type="hidden" name="foreignBuyYn" 	th:value="${order.foreignBuyYn}"/>
+		<input type="hidden" name="orderMadeYn" 	th:value="${order.orderMadeYn}"/>
 		
 		<dl>
 			<div>
@@ -39,8 +41,10 @@
 				<dd>
 					<span th:text="${deliveryAddrInfo.delvAddrNm}"></span>
 					<span class="icon_tag">
-						<em class="tag_stype1">기본 배송지</em> 
-						<em class="tag_stype2">총알배송</em>
+						<em class="tag_stype1">기본 배송지</em>
+						<th:block th:if="${order.shotDelvUseYn} == 'Y'"> 
+							<em class="tag_stype2">총알배송</em>
+						</th:block>
 					</span>
 				</dd>
 			</div>
@@ -75,74 +79,78 @@
 	<!-- /배송지정보 -->
 	
 	<!-- 해외배송상품일 경우 노출 -->
-	<div class="area_overseas">
-		<dl>
-			<div>
-				<input type="hidden" name="entryNo" value=""/>
-				
-				<dt>개인통관고유부호</dt>
-				<dd>
-					<div class="form_field">
-						<div>
-							<input type="radio" name="rdi-overseas" id="rdi-overs1" checked> 
-							<label for="rdi-overs1"><span>받는사람 개인통관고유부호</span></label>
-						</div>
-						<div>
-							<input type="radio" name="rdi-overseas" id="rdi-overs2">
-							<label for="rdi-overs2"><span>입력 안 함</span></label>
-						</div>
-						<div class="info_box overs1">
-							<div class="input_wrap">
-								<input type="text" class="form_control err" maxlength="13" placeholder="P로 시작하는 13자리">
-								<!-- 유효하지 않은 개인통관고유부호 일때 class명 'err' 추가 -->
+	<th:block th:if="${order.foreignBuyYn} == 'Y'">
+		<div class="area_overseas">
+			<dl>
+				<div>
+					<input type="hidden" name="entryNo" value=""/>
+					
+					<dt>개인통관고유부호</dt>
+					<dd>
+						<div class="form_field">
+							<div>
+								<input type="radio" name="rdi-overseas" id="rdi-overs1" checked> 
+								<label for="rdi-overs1"><span>받는사람 개인통관고유부호</span></label>
+							</div>
+							<div>
+								<input type="radio" name="rdi-overseas" id="rdi-overs2">
+								<label for="rdi-overs2"><span>입력 안 함</span></label>
 							</div>
-							<div class="t_err">개인통관고유부호가 유효하지 않습니다.</div>
-							<!-- 유효하지 않은 개인통관고유부호 일때 노출 -->
-							<div class="agree_overs">
-								<input id="chk-overs-agr" type="checkbox" checked="">
-								<label for="chk-overs-agr">
-									<span>
-										위 정보는 원활한 통관을 위해 수집 및 판매자에게 제공하며,계속 사용하도록 안전하게 STYLE24에서 저장 &#47; 관리 합니다.&nbsp;&nbsp;
-										<em class="tmark_required">(필수)</em>
-									</span>
-								</label>
+							<div class="info_box overs1">
+								<div class="input_wrap">
+									<input type="text" class="form_control err" maxlength="13" placeholder="P로 시작하는 13자리">
+									<!-- 유효하지 않은 개인통관고유부호 일때 class명 'err' 추가 -->
+								</div>
+								<div class="t_err">개인통관고유부호가 유효하지 않습니다.</div>
+								<!-- 유효하지 않은 개인통관고유부호 일때 노출 -->
+								<div class="agree_overs">
+									<input id="chk-overs-agr" type="checkbox" checked="">
+									<label for="chk-overs-agr">
+										<span>
+											위 정보는 원활한 통관을 위해 수집 및 판매자에게 제공하며,계속 사용하도록 안전하게 STYLE24에서 저장 &#47; 관리 합니다.&nbsp;&nbsp;
+											<em class="tmark_required">(필수)</em>
+										</span>
+									</label>
+								</div>
+							</div>
+							<div class="info_box overs2" style="display: none;">
+								<p>개인통관고유부호를 입력하지 않아도 관세사무소에서 개인정보 확인을 위해 별도 연락을 드릴 예정입니다.</p>
 							</div>
 						</div>
-						<div class="info_box overs2" style="display: none;">
-							<p>개인통관고유부호를 입력하지 않아도 관세사무소에서 개인정보 확인을 위해 별도 연락을 드릴 예정입니다.</p>
+						<div class="info_txt">
+							<ul>
+								<li>물품가액이 $150초과할 경우 관/부과세가 발생 할 수 있습니다.</li>
+								<li>물품 종류와 해외공급자 관계없이 같은 날 입항하게 되면 합산과세 대상이 됩니다.</li>
+							</ul>
 						</div>
-					</div>
-					<div class="info_txt">
-						<ul>
-							<li>물품가액이 $150초과할 경우 관/부과세가 발생 할 수 있습니다.</li>
-							<li>물품 종류와 해외공급자 관계없이 같은 날 입항하게 되면 합산과세 대상이 됩니다.</li>
-						</ul>
-					</div>
-				</dd>
-			</div>
-		</dl>
-	</div>
+					</dd>
+				</div>
+			</dl>
+		</div>
+	</th:block>
 	<!-- //해외배송상품일 경우 노출 -->
 	
 	<!-- 주문제작상품일 경우 노출 -->
-	<div class="area_customitem">
-		<div class="form_field">
-			<div class="agree_custom">
-				<input id="chk-custom-agr1" type="checkbox" checked="">
-				<label for="chk-custom-agr1">
-					<span>고객님께서 주문하신 상품에는 주문제작상품이 포함되어 있습니다.<br>주문제작상품에 대한 안내를 확인하였으며 배송에 동의합니다.&nbsp;&nbsp;
-						<em class="tmark_required">(필수)</em>
-					</span>
-				</label>
+	<th:block th:if="${order.orderMadeYn} == 'Y'">
+		<div class="area_customitem">
+			<div class="form_field">
+				<div class="agree_custom">
+					<input id="chk-custom-agr1" type="checkbox" checked="">
+					<label for="chk-custom-agr1">
+						<span>고객님께서 주문하신 상품에는 주문제작상품이 포함되어 있습니다.<br>주문제작상품에 대한 안내를 확인하였으며 배송에 동의합니다.&nbsp;&nbsp;
+							<em class="tmark_required">(필수)</em>
+						</span>
+					</label>
+				</div>
+			</div>
+			<div class="info_txt">
+				<ul>
+					<li>주문 제작 상품은 주문 후 제작이 진행되며, 제작 완료 후 배송이 시작됩니다.</li>
+					<li>주문 제작 상품의 특성상 주문 완료 후 취소/교환이 불가능합니다. (상품 하자에 한해 가능)</li>
+				</ul>
 			</div>
 		</div>
-		<div class="info_txt">
-			<ul>
-				<li>주문 제작 상품은 주문 후 제작이 진행되며, 제작 완료 후 배송이 시작됩니다.</li>
-				<li>주문 제작 상품의 특성상 주문 완료 후 취소/교환이 불가능합니다. (상품 하자에 한해 가능)</li>
-			</ul>
-		</div>
-	</div>
+	</th:block>
 	<!-- //주문제작상품일 경우 노출 -->
 </div>
 

+ 402 - 247
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -23,55 +23,65 @@
 <script type="text/javascript" src="/ux/pc/js/slick.min.js"></script>
 <script type="text/javascript" src="/ux/pc/js/jquery-ui.js"></script>
 
+<!-- payment.js -->
+<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
+<script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+
+
 <!-- xodud1202 -->
-	<script type="text/javascript">
-		/****************************************************************/
-		/* m_Completepayment  설명                                      */
-		/****************************************************************/
-		/* 인증완료시 재귀 함수                                         */
-		/* 해당 함수명은 절대 변경하면 안됩니다.                        */
-		/* 해당 함수의 위치는 payplus.js 보다먼저 선언되어여 합니다.    */
-		/* Web 방식의 경우 리턴 값이 form 으로 넘어옴                   */
-		/****************************************************************/
-		function m_Completepayment( FormOrJson, closeEvent ) {
-			var frm = document.order_info;
-
-			/********************************************************************/
-			/* FormOrJson은 가맹점 임의 활용 금지                               */
-			/* frm 값에 FormOrJson 값이 설정 됨 frm 값으로 활용 하셔야 됩니다.  */
-			/* FormOrJson 값을 활용 하시려면 기술지원팀으로 문의바랍니다.       */
-			/********************************************************************/
-			GetField( frm, FormOrJson );
-
-			if( frm.res_cd.value == "0000" ) {
-				frm.submit();
-			} else {
-				alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
-				closeEvent();
-			}
+<script type="text/javascript">
+	/****************************************************************/
+	/* m_Completepayment  설명                                      */
+	/****************************************************************/
+	/* 인증완료시 재귀 함수                                         */
+	/* 해당 함수명은 절대 변경하면 안됩니다.                        */
+	/* 해당 함수의 위치는 payplus.js 보다먼저 선언되어여 합니다.    */
+	/* Web 방식의 경우 리턴 값이 form 으로 넘어옴                   */
+	/****************************************************************/
+	function m_Completepayment( FormOrJson, closeEvent )
+	{
+		var frm = document.order_info;
+
+		/********************************************************************/
+		/* FormOrJson은 가맹점 임의 활용 금지                               */
+		/* frm 값에 FormOrJson 값이 설정 됨 frm 값으로 활용 하셔야 됩니다.  */
+		/* FormOrJson 값을 활용 하시려면 기술지원팀으로 문의바랍니다.       */
+		/********************************************************************/
+		GetField( frm, FormOrJson );
+
+
+		if( frm.res_cd.value == "0000" )
+		{
+			alert("결제 승인 요청 전,\n\n반드시 결제창에서 고객님이 결제 인증 완료 후\n\n리턴 받은 ordr_chk 와 업체 측 주문정보를\n\n다시 한번 검증 후 결제 승인 요청하시기 바랍니다."); //업체 연동 시 필수 확인 사항.
+			alert(frm);
+			/*
+				가맹점 리턴값 처리 영역
+			*/
+
+			frm.submit();
+		} else {
+			alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
+			closeEvent();
 		}
-	</script>
-
-	<script th:inline="javascript" th:src="|${@environment.getProperty('pg.kcp.js.url')}?v=${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}|" src=""></script>
+	}
+	
+	/* 표준웹 실행 */
+	function jsf__pay( form ) {
+		try {
+			KCP_Pay_Execute( form );
+		} catch (e) {
+			/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
+		}
+	}
+</script>
 
-	<form id="order_info" name="order_info" method="post" action="/order/pay/result/response" >
-		<input type="button" id="kcpBuyBtn" value="테스트버튼" style="width:200px; height:200px;"/>
-	</form>
+	
 
 	<script type="text/javascript">
-		/* 표준웹 실행 */
-		function jsf__pay(form) {
-			try {
-				KCP_Pay_Execute(form);
-			} catch (e) {
-				/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
-			}
-		}
-
-		$("#kcpBuyBtn").click(function() {
+		$(document).on("click", "#buyBtn", function() {
 			$.ajax({
 				type: "POST",
-				url : '/order/create/order',
+				url : '/order/create/preOrder',
 				dataType : 'html',
 				data : {
 					  pgGb		: "PAYCO"
@@ -94,6 +104,14 @@
 			});
 		});
 	</script>
+	
+	
+
+	<form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
+	
+	
+	<input type="button" id="buyBtn" value="테스트버튼" style="width:200px; height:200px;"/>
+
 <!-- // xodud1202 -->
 
 
@@ -203,18 +221,15 @@
 	<script src="https://nsp.pay.naver.com/sdk/js/naverpay.min.js"></script>
 	<script th:inline="javascript">
 		let custNo = [[${sessionInfo.custNo}]];
-		//let naverPayClientId = [[${@environment.getProperty('naver.clientId')}]];
-		let naverPayClientId = '8TSWSyJMMUvOLKUySQx6';
+		let naverPayClientId = [[${@environment.getProperty('naverPay.clientId')}]];
 		let redirectUrl = '/order/naver/payment/request';
 		const protocol = 'http:';
 		
-		console.log('naverPayClientId : ' + naverPayClientId);
 		var oPay = Naver.Pay.create({
 			"mode" : "development",				// development or production
 			"clientId": naverPayClientId	// clientId
 		});
 		
-		console.log('oPay : ' + oPay);
 		$(document).on("click", "#naverBtn", function() {
 			$.ajax( {
 				type: "POST",
@@ -243,37 +258,71 @@
 			let jsonData = JSON.stringify(data);
 			
 			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				console.log(result.naverPay);
 				let reserveId = result.naverPay.body.reserveId;
 				let url = "https://test-pay.naver.com/payments/" + reserveId;
-				console.log(url);
-				window.open(url, 'naverPaymentPopup');
+				let option = 'width=750, height=' + $(window).height();
+
+				window.open(url, 'naverPaymentPopup', option);
 			});
 		}
 
-		// 카카오페이 결제 승인 요청
+		// 네이버페이 결제 승인 요청
 		var fnNaverPaymentRequest = function(paymentId) {
-			$('#order_info').append('<input type=hidden name="paymentId" value="' + paymentId + '" />');
+			$('#order_info').append('<input type=hidden name="pgTid" value="' + paymentId + '" />');
+
+			let url = '/order/naver/payment/approve';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+
+			let jsonData = JSON.stringify(data);
+
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== naverPaymentRequest ======');
+				console.log(result.payment);
+				console.log(' ');
+				fnNaverPaymentOrder();
+			});
+			
+			return true;
+		}
+		
+		// 네이버페이 결제 정보 조회
+		var fnNaverPaymentOrder = function() {
+			let url = '/order/naver/payment/order';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
 			
-			console.log('paymentId : ' + paymentId);
+			let jsonData = JSON.stringify(data);
 			
-			//let url = '/order/naver/payment/approve';
-			//let data = {};
-			//data.pgTid = $('#order_info input[name=pgTid]').val();
-			//data.ordNo = $('#order_info input[name=ordr_idxx]').val();
-			//data.pgToken = $('#order_info input[name=pgToken]').val();
-			//
-			//let jsonData = JSON.stringify(data);
-			//
-			//gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			//	console.log('====== kakaoPaymentRequest ======');
-			//	console.log(result.payment);
-			//	console.log(' ');
-			//	fnKakaoPaymentOrder();
-			//});
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== naverPaymentOrder ======');
+				console.log(result.kakaoPay);
+				console.log(' ');
+				fnCancelNaverPayment();
+			});
 			
 			return true;
 		}
+
+		// 네이버페이 결제 취소
+		var fnCancelNaverPayment = function() {
+			let url = '/order/naver/payment/cancel';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+			data.cancelRequester = '1';
+			data.cancelReason = '고객변심';
+			data.cnclRtnAmt = 1000;
+			//data.allCanYn = 'Y';
+			
+			let jsonData = JSON.stringify(data);
+			
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== naverPaymentCancel ======');
+				console.log(result.kakaoPay);
+				console.log(' ');
+				
+			});
+		}
 	</script>
 
 	<input type="button" id="kakaoBtn" value="카카오테스트버튼" style="width:200px; height:200px;"/>
@@ -281,8 +330,55 @@
 <!-- // card007 -->
 
 
+
+
+
+
+
+
+
 <!--  container -->
 <form id="payForm" name="payForm">
+	<br>
+	<!-- 주문고객정보 -->
+	<table border="1" style="font-size:10px; text-align:center;">
+		<tr style="height:30px;">
+			<th>custNm</th>
+			<th>email</th>
+			<th>cellPhnno</th>
+			<th>recipZipcode</th>
+			<th>recipBaseAddr</th>
+			<th>recipDtlAddr</th>
+			<th>delvMemo</th>
+			<th>foreignBuyYn</th>
+			<th>orderMadeYn</th>
+		</tr>
+		<tr style="height:30px;">
+			<td class="custNm"></td>
+			<td class="email"></td>
+			<td class="cellPhnno"></td>
+			<td class="recipZipcode"></td>
+			<td class="recipBaseAddr"></td>
+			<td class="recipDtlAddr"></td>
+			<td class="delvMemo"></td>
+			<td class="foreignBuyYn"></td>
+			<td class="orderMadeYn"></td>
+		</tr>
+	</table>
+	
+	<br>
+	<!-- 사은품정보 -->
+	<table border="1" style="font-size:10px; text-align:center;">
+		<tr style="height:30px;">
+			<th>freegiftValArr</th>
+			<th>freegiftUsePointArr</th>
+		</tr>
+		<tr style="height:30px;">
+			<td class="freegiftValArr"></td>
+			<td class="freegiftUsePointArr"></td>
+		</tr>
+	</table>
+	
 	<br>
 	<!-- 주문상세금액 -->
 	<table border="1" style="font-size:10px; text-align:center;">
@@ -308,8 +404,11 @@
 			<th>gfcdUseAmt1</th>
 			<th>realOrdAmt1</th>
 			<th>savePntAmt1</th>
+			<th>shoDelvYn</th>
+			<th>foreignYn</th>
+			<th>orderMadeYn</th>
 		</tr>
-		<th:block th:each="delvAllCart, i : ${delvAllCartList}">
+		<th:block th:each="delvAllCart, index : ${delvCartGoodsList}">
 			<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
 				<th:block th:each="goods, i : ${delvAllCart}">
 					<tr style="height:30px;">
@@ -346,6 +445,9 @@
 						<td class="gfcdUseAmt1">0</td>
 						<td class="realOrdAmt1">0</td>
 						<td class="savePntAmt1" 	th:text="${goods.savePntAmt}"></td>
+						<td class="shotDelvYn" 		th:text="${goods.shotDelvYn}"></td>
+						<td class="foreignBuyYn" 	th:text="${goods.foreignBuyYn}"></td>
+						<td class="orderMadeYn" 	th:text="${goods.orderMadeYn}"></td>
 					</tr>
 				</th:block>
 			</th:block>
@@ -353,7 +455,6 @@
 	</table>
 	
 	<br>
-	
 	<!-- 주문금액합계 -->
 	<table border="1" style="font-size:10px; text-align:center;">
 		<tr style="height:30px;">
@@ -424,10 +525,10 @@
 										</colgroup>
 										<tbody>
 											<tr>
-												<th>총 <span class="c_primary bold" th:text="${delvFeeTotCnt}"></span> 건으로 나뉘어 배송 예정</th>
+												<th>총 <span class="c_primary bold" th:text="${delvFeeCdCnt}"></span> 건으로 나뉘어 배송 예정</th>
 												<td class="t_l">
-													<span>총알배송<em class="c_primary bold" th:text="${wmsCnt}" id="shotDelv"></em>건</span>
-													<span>STYLE24<em class="c_primary bold" th:text="${wmsCnt}" id="wmsDelv"></em>건</span>
+													<span>총알배송<em class="c_primary bold" th:text="${shotCnt}" id="shotCnt"></em>건</span>
+													<span>STYLE24<em class="c_primary bold" th:text="${wmsCnt}" id="wmsCnt"></em>건</span>
 													<span>업체직배송<em class="c_primary bold" th:text="${delvCnt}"></em>건</span>
 													<span>예약배송<em class="c_primary bold" th:text="${resCnt}"></em>건</span>
 												</td>
@@ -468,64 +569,10 @@
 							<div class="area_order">
 								<div class="tit_box">
 									<h3 class="subH2">주문내역</h3>
-									<span> <em class="number" id="ordQty" th:text="${delvTotCnt}"></em>개의 상품</span>
+									<span> <em class="number" th:text="${goodsTotCnt}"></em>개의 상품</span>
 								</div>
-								<div class="od_item_box">
 								
-									<!-- 전체배송목록 sort --> 
-									<th:block th:each="delvAllCart, i : ${delvAllCartList}">
-										<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-											<div class="part_dlvr">
-												<th:block th:if="${i.index} == 0">
-													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-														<h4 class="subH3 mb20">STYLE24 총알배송<span>오늘 자정까지 도착</span></h4>
-													</th:block>
-												</th:block>
-												<th:block th:if="${i.index} == 1">
-													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-														<h4 class="subH3 mb20" id="wmsDelvTitle">STYLE24 일반배송</h4>
-													</th:block>
-												</th:block>
-												<th:block th:if="${i.index} == 2">
-													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-														<h4 class="subH3 mb20">업체직배송</h4>
-													</th:block>
-												</th:block>
-												<th:block th:if="${i.index} == 3">
-													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-														<h4 class="subH3 mb20">예약배송</h4>
-													</th:block>
-												</th:block>
-												
-												<div class="gd_list">
-													<th:block th:each="goods, i : ${delvAllCart}">
-														<div class="item_gd">
-															<figure>
-																<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
-																<figcaption>
-																	<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
-																	<div class="name" th:text="${goods.goodsNm}"></div>
-																	<div class="option" th:each="opt, index : ${goods.itemNmArr}">
-																		<span th:text="${goods.optCdArr[index.index]}"></span> 
-																		<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
-																	</div>
-																	<div class="price">
-																		<th:block th:if="${goods.tmtbDcAmt} > 0">
-																			<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
-																		</th:block>
-																		<th:block th:if="${goods.tmtbDcAmt} < 1">
-																			<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
-																		</th:block>
-																	</div>
-																</figcaption>
-															</figure>
-														</div>
-													</th:block>
-												</div>
-											</div>
-										</th:block>
-									</th:block>
-									<!-- //전체배송목록 sort -->
+								<div id="orderListInfo" style="display:none">
 								</div>
 								
 								<div class="od_amount_box">
@@ -625,10 +672,11 @@
 <script th:inline="javascript">
 // 배송관련정보 변수선언
 var cartGoodsList		= [[${cartGoodsList}]]			// 배송목록
-var wmsCnt 				= [[${wmsCnt}]];				// 자사 일반,촐알 배송건수
+var shotCnt 			= [[${shotCnt}]];				// 자사 총알 배송건수
+var wmsCnt 				= [[${wmsCnt}]];				// 자사 일반 배송건수
+var shotWmsCnt 			= [[${shotWmsCnt}]];			// 자사 총알,일반 배송건수
 var resCnt 				= [[${resCnt}]];				// 자사 예약 배송건수
-var delvCnt 			= [[${delvCnt}]];				// 입전 일반 배송건수
-var shotDelvYn			= [[${shotDelvYn}]];			// 총알배송여부
+var delvCnt 			= [[${delvCnt}]];				// 입점 일반 배송건수
 var orgSumDelvFee		= [[${sumDelvFee}]];			// 최초배송비합계
 var prePntDcAmt			= [[${prePntDcAmt}]];			// 선포인트사용가능금액
 
@@ -639,10 +687,18 @@ var recipZipcode		= [[${order.recipZipcode}]];	// 우편번호
 var recipBaseAddr		= [[${order.recipBaseAddr}]];	// 기본주소
 var recipDtlAddr		= [[${order.recipDtlAddr}]];	// 상세주소
 var cartSqArr			= [[${order.cartSqArr}]];		// 장바구니시퀀스 목록
+var shotDelvUseYn		= [[${order.shotDelvUseYn}]];	// 총알배송사용여부(장바구니)
+var shotDelvYn			= [[${order.shotDelvUseYn}]];	// 총알배송사용여부(장바구니)
+
+var foreignBuyYn		= [[${foreignBuyYn}]];			// 해외구매대행여부
+var orderMadeYn			= [[${orderMadeYn}]];			// 주문제작상품여부
 
 var custCpnSq 			= 0;
 var cpnIndex			= 0;
 var cpnApplyTemp		= false;
+
+//AJAX 로드를 위한 변수 설정
+var jsonObj 			= {};
 var jsonData			= null;
 
 // 컨텐츠 호출
@@ -651,8 +707,8 @@ $(document).ready( function() {
 	// 장바구니시퀀스 배열 변환
 	cartSqArr = String(cartSqArr).split(",");
 	
-	// 1. 각각의 컨텐츠 AJAX 로드
-	var jsonObj = {
+	// AJAX 로드를 위한 변수 설정
+	jsonObj = {
 		"custNm" 			: custNm
 		, "cellPhnno" 		: cellPhnno
 		, "email" 			: email
@@ -661,48 +717,18 @@ $(document).ready( function() {
 		, "recipDtlAddr" 	: recipDtlAddr
 		, "cartSqArr"		: cartSqArr
 		, "dispYn"			: "N"
+		, "shotDelvYn"		: shotDelvUseYn
+		, "foreignBuyYn"	: foreignBuyYn
+		, "orderMadeYn"		: orderMadeYn
 	}
 	
-	
-	var jsonData = JSON.stringify(jsonObj);
-	
-	// 1.1 고객정보로드
+	jsonData = JSON.stringify(jsonObj);
+
+	// 1. AJAX 정보(회원정보로드)
 	custemerInfoSet(jsonData);
-	
-	// 2. 각각의 기능 구현
-	// 2.1 총알배송가능 지역, 총알배송 가능 시간 체크
-	fnGetDailyDeliveryCheck();
 });
 
-// 3. 함수기능 정의
-// 3.1 프로모션 쿠폰 적용 함수
-function serialCpnApply() {
-	let data = {
-		rdCpnNm : $("#payForm #serialCpnNm").val()
-	}
-
-	let jsonData = JSON.stringify(data);
-
-	$.ajax( {
-		type			: "POST",
-		url 			: '/cart/list/serialCpnApply',
-		contentType		: 'application/json',
-		dataType 		: 'json',
-		data 			: jsonData,
-		success 		: function(result) {
-			var jsonObj 	= {"cartSqArr" : cartSqArr,"dispYn" : "Y"};
-			var jsonData 	= JSON.stringify(jsonObj);
-
-			// 성공일때는 쿠폰정보 및 포인트 정보 reset
-			if (result.serialCpnInfo.result == "SUCCESS") {
-				dcAmtInfoSet(jsonData);
-			} else {
-				alert(result.serialCpnInfo.result);
-			}
-		}
-	});
-}
-
+// 1. 함수기능 정의
 // 1.1 고객정보로드
 var custemerInfoSet = function(jsonData) {
 	$.ajax( {
@@ -720,6 +746,11 @@ var custemerInfoSet = function(jsonData) {
 			if (result != null) {
 				$("#custemerInfo").css("display", "block");
 				$("#custemerInfo").html(result);
+
+				// 고객정보설정
+				$(".custNm").text($("input[name='custNm'").val());
+				$(".email").text($("input[name='email'").val());
+				$(".cellPhnno").text($("input[name='cellPhnno'").val());
 			}
 			// 1.2 배송정보로드
 			deliveryAddrInfoSet(jsonData);
@@ -744,14 +775,103 @@ var deliveryAddrInfoSet = function(jsonData) {
 			if (result != null) {
 				$("#deliveryAddrInfo").css("display", "block");
 				$("#deliveryAddrInfo").html(result);
+				
+				// 배송정보설정
+				$(".recipZipcode").text($("input[name='recipZipcode'").val());
+				$(".recipBaseAddr").text($("input[name='recipBaseAddr'").val());
+				$(".recipDtlAddr").text($("input[name='recipDtlAddr'").val());
+				$(".delvMemo").text($("input[name='delvMemo'").val());
+				$(".foreignBuyYn").text($("input[name='foreignBuyYn'").val());
+				$(".orderMadeYn").text($("input[name='orderMadeYn'").val());
+			}
+			
+			// 1.3 총알배송가능 지역, 총알배송 가능 시간 체크(초기로드정보)
+			fnGetDailyDeliveryCheck(true);
+		}
+	});
+}
+
+// 1.3 총알배송가능 지역, 총알배송 가능 시간 체크
+var fnGetDailyDeliveryCheck = function (temp) {
+	
+	// 장바구니 총알배송 사용여부 체크 N
+	if (shotDelvUseYn == "N") {
+		// 초기에 한번 데이타 로드
+		if (temp) {
+			// 1.4 주문상품목록로드
+			orderListInfoSet(jsonData, temp);
+		}
+	} else {
+		// 배송지 우편번호 체크
+		var zipcode		= $("input[name='recipZipcode']").val();
+	
+		// 총알배송여부 체크 배송지정보 존재여부 체크
+		if (zipcode == null || zipcode == '') {
+			//alert("배송지정보가 없습니다. 기본 총알배송 가능지역으로 설정 합니다.");
+			zipcode = "04320"; // 기본 서울역 우편번호로 설정
+		}
+		
+		// TODO
+		var shotDelvObj 	= {"zipNo" : zipcode};
+	
+		gagajf.ajaxJsonSubmit(
+			"/order/getDailyDeliveryCheck"
+			, JSON.stringify(shotDelvObj)
+			, function (result) {
+				// 총알배송여부체크
+				var tempShotDelvYn = "N";
+				
+				if (parseInt(result) > 0) {
+					tempShotDelvYn = "Y";
+				}
+				
+				// json 값 설정
+				var orderListObj 		= {"cartSqArr":cartSqArr, "shotDelvYn":tempShotDelvYn};
+				var orderListJsonData 	= JSON.stringify(orderListObj);
+				
+				if (temp) {
+					// 1.3 주문상품목록로드
+					orderListInfoSet(orderListJsonData, temp);
+				} else {
+					if (tempShotDelvYn != shotDelvYn) {
+						orderListInfoSet(orderListJsonData, temp);
+					}
+				}
+				
+				shotDelvYn = tempShotDelvYn;
+			}
+		)
+	}
+}
+
+// 1.4 주문상품목록로드
+var orderListInfoSet = function(orderListJsonData, temp) {
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/orderListInfo',
+		data		: orderListJsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			if (result != null) {
+				$("#orderListInfo").css("display", "block");
+				$("#orderListInfo").html(result);
+			}
+			
+			// 1.5 사은품정보로드
+			if (temp) {
+				freegiftInfoSet(jsonData);
 			}
-			// 1.2 배송정보로드
-			freegiftInfoSet(jsonData);
 		}
 	});
 }
 
-// 1.3 사은품정보로드
+// 1.5 사은품정보로드
 var freegiftInfoSet = function(jsonData) {
 	
 	$.ajax( {
@@ -769,12 +889,19 @@ var freegiftInfoSet = function(jsonData) {
 			if (result != null) {
 				$("#freegiftInfo").html(result);
 				
+				var total_gift 		= 0;
+				var total_deduct 	= 0;
+				
 				// 2.2 사은품선택 라디오 버튼 기능
 				$(".freegiftRdo").on("click", function() {
-					var total_gift 		= 0;
-					var total_deduct 	= 0;
+					total_gift 		= 0;
+					total_deduct 	= 0;
 					
 					$(".freegiftRdo").each(function(){
+						if ($(this).attr("allYn") == "Y" ) {
+							total_gift 		+= 1;
+						}
+						
 						// 라디오버튼 사은품 체크
 						if ($(this).is(":checked")) {
 							// 수령거부가 아닐때 체크
@@ -789,18 +916,28 @@ var freegiftInfoSet = function(jsonData) {
 					$(".total_deduct").text(total_deduct.addComma());			// 사은품총사용포인트
 					$(".freegiftUsePnt").text(total_deduct);
 					
-					// 쿠폰초기화기능
-					custCpnInit();
+					// 포인트초기화기능
+					pntDcAmtReset();
+				});
+				
+				// 사은품테이블 그리기
+				$(".gift_box").each(function(){
+					$(this).find(".freegiftRdo").each(function(){
+						if ($(this).attr("allYn") == "Y" ) {
+							total_gift += 1;
+						}
+						$(".total_gift").text(total_gift);							// 사은품총선택개수
+					});
 				});
 			}
 			
-			// 1.5 결제타입로드
+			// 1.6 결제타입로드
 			paymentInfoSet(jsonData);
 		}
 	});
 }
 
-// 1.5 결제타입로드
+// 1.6 결제타입로드
 var paymentInfoSet = function(jsonData) {
 	$.ajax( {
 		type		: "POST",
@@ -818,16 +955,45 @@ var paymentInfoSet = function(jsonData) {
 				$("#paymentInfo").css("display", "block");
 				$("#paymentInfo").html(result);
 				
-				// 3.2 할인영역 설정
+				// 1.8 할인영역 설정
 				dcAmtInfoSet(jsonData);
 			}
 		}
 	});
 }
 
-// 3.2 할인영역 설정
+// 1.7 프로모션 쿠폰 적용 함수
+var serialCpnApply = function(){
+	let data = {
+		rdCpnNm : $("#payForm #serialCpnNm").val()
+	}
+
+	let jsonData = JSON.stringify(data);
+
+	$.ajax( {
+		type			: "POST",
+		url 			: '/cart/list/serialCpnApply',
+		contentType		: 'application/json',
+		dataType 		: 'json',
+		data 			: jsonData,
+		success 		: function(result) {
+			var jsonObj 	= {"cartSqArr" : cartSqArr,"dispYn" : "Y"};
+			var jsonData 	= JSON.stringify(jsonObj);
+
+			// 성공일때는 쿠폰정보 및 포인트 정보 reset
+			if (result.serialCpnInfo.result == "SUCCESS") {
+				// 1.8 할인영역 재로드
+				dcAmtInfoSet(jsonData);
+			} else {
+				alert(result.serialCpnInfo.result);
+			}
+		}
+	});
+}
+
+// 1.8 할인영역 설정 (쿠폰, 선포인트, 포인트, 상품권)
 var dcAmtInfoSet = function(jsonData) {
-	// 3.2.1 할인정보로드
+	// 1.8.1 할인정보로드
 	$.ajax( {
 		type		: "POST",
 		url 		: '/order/dcAmtInfo',
@@ -844,10 +1010,10 @@ var dcAmtInfoSet = function(jsonData) {
 				$("#dcAmtInfo").css("display", "block");
 				$("#dcAmtInfo").html(result);
 				
-				// 3.2.2 쿠폰적용초기화(할인율최고)
+				// 1.8.2 쿠폰적용초기화(할인율최고)
 				custCpnInit();
 				
-				// 3.2.3 쿠폰 SELECT BOX 기능 설정(js적용)
+				// 1.8.3 쿠폰 SELECT BOX 기능 설정(js적용)
 				$('.select_custom.type1').each(function(index){
 					var selecter01 	= new sCombo($(this));
 					
@@ -886,14 +1052,14 @@ var dcAmtInfoSet = function(jsonData) {
 					});
 				});
 				
-				// 3.2.4 쿠폰 최대할인금액 초기화 버튼 설정
+				// 1.8.4 쿠폰 최대할인금액 초기화 버튼 설정
 				$("#chk-maxdisc").on("click", function(){
 					if ($(this).is(":checked")) {
 						custCpnInit();
 					}
 				});
 
-				// 3.2.5 쿠폰할인적용 삭제 버튼
+				// 1.8.5 쿠폰할인적용 삭제 버튼
 				$(".btn_del_coupon").on("click", function(){
 					//선택없음선택
 					$(this).parent().parent().find("ul li").each(function(i){
@@ -903,7 +1069,7 @@ var dcAmtInfoSet = function(jsonData) {
 					});
 				});
 				
-				// 3.2.6 선포인트 적용 버튼 기능
+				// 1.8.6 선포인트 적용 버튼 기능
 				$("input[name='rdi-beforpoint']").each(function(){
 					// 선포인트 초기 설정 사용함
 					if ($(this).val() == "Y") {
@@ -921,12 +1087,12 @@ var dcAmtInfoSet = function(jsonData) {
 							$("#prePntDcAmt").text("0원");
 						}
 						
-						// 포인트기능 리렛
-						pntDcAmtReset();
+						// 쿠폰할인금액 SUM
+						custCpnSumAmtCal();
 					});
 				});
 				
-				// 3.2.6 포인트 적용버튼 기능
+				// 1.8.7 포인트 적용버튼 기능
 				$("#btn_point_apply").on("click", function(){
 					var rmPntAmt 			= parseInt($("input[name='rmPntAmt']").val());
 					var freegiftUsePnt 		= parseInt($(".freegiftUsePnt").text());
@@ -976,7 +1142,7 @@ var dcAmtInfoSet = function(jsonData) {
 					gfcdUseAmtReset();
 				});
 				
-				// 3.2.7 상품권 적용버튼 기능
+				// 1.8.8 상품권 적용버튼 기능
 				$("#btn_gfcd_apply").on("click", function(){
 					var rmGfcdAmt 		= parseInt($("input[name='rmGfcdAmt']").val());
 					var gfcdUseAmt 		= parseInt($("input[name='gfcdUseAmtStr']").val());
@@ -1017,7 +1183,7 @@ var dcAmtInfoSet = function(jsonData) {
 	});
 }
 
-// 3.3 쿠폰 최대할인율 쿠폰적용
+// 1.9 쿠폰 최대할인율 쿠폰적용
 var custCpnInit = function() {
 	
 	// 쿠폰적용없음적용
@@ -1063,11 +1229,11 @@ var custCpnInit = function() {
 		});
 	});
 	
-	// 선포인트기능리셋
-	prePntDcAmtReset();
+	// 포인트기능 리렛
+	pntDcAmtReset();
 }
 
-// 3.4 쿠폰중복사용체크
+// 1.10 쿠폰중복사용체크
 var custCpnDuplicationCheck = function(custCpnSq, index) {
 	var selCustSq 	= 0;
 	var cnt 		= 0;
@@ -1092,7 +1258,7 @@ var custCpnDuplicationCheck = function(custCpnSq, index) {
 	}
 }
 
-// 3.5 쿠폰중복체크 후 적용가능
+// 1.11 쿠폰중복체크 후 적용가능
 var custCpnApply = function(obj) {
 	// select box 쿠폰 적용
 	var cpnType 	= obj.parent().parent().find("input[name='cpnType']").val();
@@ -1218,11 +1384,11 @@ var custCpnApply = function(obj) {
 	// 선택된 할인금액 노출
 	obj.parent().parent().parent().parent().parent().find(".cp_discount").css("display", "block");
 	
-	// 선포인트기능리셋
-	prePntDcAmtReset();
+	// 포인트기능 리렛
+	pntDcAmtReset();
 }
 
-// 3.6 쿠폰중복체크 후 적용불가
+// 1.12 쿠폰중복체크 후 적용불가
 var custCpnNotApply = function(obj) {
 	// 이전에 등록된 쿠폰시퀀스  
 	var custCpnSq = obj.parent().parent().find("input[name='custCpnSq']").val();
@@ -1240,11 +1406,11 @@ var custCpnNotApply = function(obj) {
 		}
 	});
 	
-	// 선포인트기능리셋
-	prePntDcAmtReset();
+	// 포인트기능 리렛
+	pntDcAmtReset();
 }
 
-// 3.7 쿠폰 선택없음 기능 구현
+// 1.13 쿠폰 선택없음 기능 구현
 var cpnApplyDel = function(obj) {
 	// 쿠폰타입(상품쿠폰, 장바구니쿠폰, 배송비쿠폰)
 	var cpnType = obj.parent().parent().find("input[name='cpnType']").val();
@@ -1286,8 +1452,8 @@ var cpnApplyDel = function(obj) {
 	obj.parent().parent().find(".select").text("선택없음");
 	obj.parent().parent().parent().parent().parent().find(".cp_discount").css("display", "none");
 	
-	// 선포인트기능리셋
-	prePntDcAmtReset();
+	// 포인트기능 리렛
+	pntDcAmtReset();
 	
 	// 최대할인혜택적용 체크해제
 	if ($("#chk-maxdisc").is(":checked")) {
@@ -1295,7 +1461,7 @@ var cpnApplyDel = function(obj) {
 	}
 }
 
-// 3.9 선포인트리셋기능
+// 1.14 선포인트리셋기능 (사용안함)
 var prePntDcAmtReset = function() {
 	var rmPrePntAmt = parseInt($("input[name='rmPrePntAmt']").val());
 	$("input[name='prePntDcAmt']").val(rmPrePntAmt);
@@ -1314,7 +1480,7 @@ var prePntDcAmtReset = function() {
 	pntDcAmtReset();
 }
 
-// 3.10 포인트리셋기능
+// 1.15 포인트리셋기능
 var pntDcAmtReset = function() {
 	$(".pntDcSumAmt").text("0");
 	$("input[name='pntDcAmtStr']").val("");
@@ -1324,7 +1490,7 @@ var pntDcAmtReset = function() {
 	gfcdUseAmtReset();
 }
 
-// 3.11 상품권리셋기능
+// 1.16 상품권리셋기능
 var gfcdUseAmtReset = function() {
 	$(".gfcdUseSumAmt").text("0");
 	$("input[name='gfcdUseAmtStr']").val("");
@@ -1334,7 +1500,7 @@ var gfcdUseAmtReset = function() {
 	custCpnSumAmtCal();
 }
 
-// 3.12 쿠폰할인금액합계설정(금액전체계산)
+// 1.17 쿠폰할인금액합계설정(금액전체계산)
 var custCpnSumAmtCal = function() {
 	var cpnDcSumAmt = 0;
 	var cpnApplyCnt = 0;
@@ -1474,6 +1640,8 @@ var custCpnSumAmtCal = function() {
 	$(".realOrdSumAmt").text(realOrdSumAmt);
 	$(".savePntSumAmt").text(savePntSumAmt);
 	
+	$("#realOrdAmt").text(realOrdSumAmt.addComma() + "원"); // 총 결제 예정 금액
+	
 	var tempSavePnt			= savePntSumAmt - prePntDcAmt;
 	
 	// 사은품사용 후 보유포인트	
@@ -1487,49 +1655,36 @@ var custCpnSumAmtCal = function() {
 	
 	// 적립포인트
 	$("#savePntSumAmt").text(savePntSumAmt.addComma()+"P");
-};
-
-// 3.20 총알배송가능 지역, 총알배송 가능 시간 체크
-var fnGetDailyDeliveryCheck = function () {
-	// TODO
-	var jsonObj 	= {"zipNo" : 12345};
-	var jsonData 	= JSON.stringify(jsonObj);
-
-	gagajf.ajaxJsonSubmit(
-		"/order/getDailyDeliveryCheck"
-		, jsonData
-		, function (result) {
-			// 자사몰 일반배송
-			$("#shotDelv").text(0);
-			$("#wmsDelv").text(wmsCnt);
-			$("#wmsDelvTitle").css("display", "block");
-			$("#shotDelvTitle").css("display", "none");
-			$(".tag_stype2").css("display", "none");
-
-			// 자사몰 총알배송
-			if (shotDelvYn == "Y") {
-				if (parseInt(result) > 0) {
-					$("#shotDelv").text(wmsCnt);
-					$("#wmsDelv").text(0);
-					
-					$("#wmsDelvTitle").css("display", "none");
-					$("#shotDelvTitle").css("display", "block");
-					$(".tag_stype2").css("display", "block");
+	
+	// 사은품정보 설정
+	var freegiftValArr 			= [];
+	var freegiftUsePointArr 	= [];
+		
+	$(".gift_box").each(function(){
+		$(this).find(".freegiftRdo").each(function(){
+			// 사은품필수
+			if ($(this).attr("allYn") == "Y" ) {
+				freegiftValArr.push($(this).val());
+				freegiftUsePointArr.push($(this).attr("usepoint"));
+			}
+			
+			// 라디오버튼 선택 사은품 체크
+			if ($(this).is(":checked")) {
+				// 수령거부가 아닐때 체크
+				if ($(this).val() != "noSel") {
+					freegiftValArr.push($(this).val());
+					freegiftUsePointArr.push($(this).attr("usepoint"));
 				}
 			}
-		}
-	)
-}
-</script>
-
-
-
-
-
-
-
+		});
+	});
+	
+	$(".freegiftValArr").text(freegiftValArr);				// 사은품시퀀스배열
+	$(".freegiftUsePointArr").text(freegiftUsePointArr);	// 사은품사용포인트배열
+};
 
 
+</script>
 
 <script th:inline="javascript">
 // 화면준비상태
@@ -1734,4 +1889,4 @@ $(document).ready( function() {
 
 </th:block>
 </body>
-</html>
+</html>

+ 44 - 20
src/main/webapp/WEB-INF/views/web/order/OrderFreegiftInfoWeb.html

@@ -15,6 +15,7 @@
  -->
 
 <th:block th:if="${freegiftList != null && #lists.size(freegiftList) > 0}">
+
 <div class="fold_head">
 	<a href="javascript:void(0)">
 		<div>
@@ -33,30 +34,53 @@
 		<th:block th:each="freegift, i : ${freegiftList}">
 			<div class="gift_box">
 				<p class="txt">
-					<span th:text="'사은품선택' + ${i.count} + '' + ${freegift.freegiftNm}"></span>
+					<th:block th:if="${freegift.allYn} == 'Y'">
+						<span th:text="'사은품필수' + ${i.count} + ' ' + ${freegift.freegiftNm}"></span>
+					</th:block>
+					<th:block th:if="${freegift.allYn} == 'N'">
+						<span th:text="'사은품선택' + ${i.count} + ' ' + ${freegift.freegiftNm}"></span>
+					</th:block>
 				</p>
 				<div class="form_field">
-					<th:block th:each="freegiftGoods, k : ${freegiftGoodsList}">
-						<th:block th:if="${freegift.freegiftSq} == ${freegiftGoods.freegiftSq}">
-							<div class="gift">
-								<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="'rdi-gift'+${i.count}+${k.count}" class="chk_img freegiftRdo" th:value="${freegiftGoods.freegiftValSq}" th:usepoint="${freegiftGoods.usePoint}"> 
-								<label th:for="'rdi-gift'+${i.count}+${k.count}"> 
-									<span class="thumb"><img src="http://ts5000.ipdisk.co.kr:89/images/pc/thumb/tmp_gift1.jpg" width="" alt=""></span>
-									<span class="name" th:text="${freegiftGoods.goodsNm}"></span> 
-									<span th:if="${freegiftGoods.usePoint} < 1" class="deduct" th:text="무료"></span>
-									<span th:if="${freegiftGoods.usePoint} > 0" class="deduct" th:text="|- ${freegiftGoods.usePoint} P|"></span>
-								</label>
-							</div>
+					<!-- 전체지급 사음품(필수) -->
+					<th:block th:if="${freegift.allYn} == 'Y'">
+						<th:block th:each="freegiftGoods, k : ${freegiftGoodsList}">
+							<th:block th:if="${freegift.freegiftSq} == ${freegiftGoods.freegiftSq}">
+								<div class="gift">
+									<input type="hidden" th:name="'rdi-gift'+${i.count}" th:id="'rdi-gift'+${i.count}+${k.count}" class="chk_img freegiftRdo" th:value="${freegiftGoods.freegiftValSq}" usepoint="0" allYn="Y">
+									<label th:for="'rdi-gift'+${i.count}+${k.count}"> 
+										<span class="thumb"><img src="http://ts5000.ipdisk.co.kr:89/images/pc/thumb/tmp_gift1.jpg" width="" alt=""></span>
+										<span class="name" th:text="${freegiftGoods.goodsNm}"></span> 
+										<span class="deduct">무료</span>
+									</label>
+								</div>
+							</th:block>
+						</th:block>
+					</th:block>
+					<!-- 선택지급 사음품(선택) -->
+					<th:block th:if="${freegift.allYn} == 'N'">
+						<th:block th:each="freegiftGoods, k : ${freegiftGoodsList}">
+							<th:block th:if="${freegift.freegiftSq} == ${freegiftGoods.freegiftSq}">
+								<div class="gift">
+									<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="'rdi-gift'+${i.count}+${k.count}" class="chk_img freegiftRdo" th:value="${freegiftGoods.freegiftValSq}" th:usepoint="${freegiftGoods.usePoint}"  allYn="N"> 
+									<label th:for="'rdi-gift'+${i.count}+${k.count}"> 
+										<span class="thumb"><img src="http://ts5000.ipdisk.co.kr:89/images/pc/thumb/tmp_gift1.jpg" width="" alt=""></span>
+										<span class="name" th:text="${freegiftGoods.goodsNm}"></span> 
+										<span th:if="${freegiftGoods.usePoint} < 1" class="deduct" th:text="무료"></span>
+										<span th:if="${freegiftGoods.usePoint} > 0" class="deduct" th:text="|- ${freegiftGoods.usePoint} P|"></span>
+									</label>
+								</div>
+							</th:block>
 						</th:block>
+						<div class="gift">
+							<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="${i.count}+'0'" class="chk_img freegiftRdo" value="noSel" usepoint="0" allYn="N"> 
+							<label th:for="${i.count}+'0'">
+								<span class="thumb"><img src="/images/pc/thumb/tmp_gift_empty.jpg" width=""alt=""></span> 
+								<span class="name">사은품 수령안함</span>
+								<span class="deduct">수령거부</span>
+							</label>
+						</div>
 					</th:block>
-					<div class="gift">
-						<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="${i.count}+'0'" class="chk_img freegiftRdo" value="noSel" usepoint="0"> 
-						<label th:for="${i.count}+'0'">
-							<span class="thumb"><img src="/images/pc/thumb/tmp_gift_empty.jpg" width=""alt=""></span> 
-							<span class="name">사은품 수령안함</span>
-							<span class="deduct">수령거부</span>
-						</label>
-					</div>
 				</div>
 			</div>
 		</th:block>

+ 74 - 0
src/main/webapp/WEB-INF/views/web/order/OrderListInfoWeb.html

@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderCustemerInfoWeb.html
+ * @desc    : 고객정보 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<!-- 주문목록 -->
+<div class="od_item_box">
+	<!-- 전체배송목록 sort --> 
+	<th:block th:each="delvAllCart, i : ${delvAllCartList}">
+		<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+			<div class="part_dlvr">
+				<th:block th:if="${i.index} == 0">
+					<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+						<h4 class="subH3 mb20">STYLE24 총알배송 <span>오늘 자정까지 도착</span></h4>
+					</th:block>
+				</th:block>
+				<th:block th:if="${i.index} == 1">
+					<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+						<h4 class="subH3 mb20">STYLE24 일반배송</h4>
+					</th:block>
+				</th:block>
+				<th:block th:if="${i.index} == 2">
+					<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+						<h4 class="subH3 mb20">업체직배송</h4>
+					</th:block>
+				</th:block>
+				<th:block th:if="${i.index} == 3">
+					<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+						<h4 class="subH3 mb20">예약배송</h4>
+					</th:block>
+				</th:block>
+				
+				<div class="gd_list">
+					<th:block th:each="goods, i : ${delvAllCart}">
+						<div class="item_gd">
+							<figure>
+								<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
+								<figcaption>
+									<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
+									<div class="name" th:text="${goods.goodsNm}"></div>
+									<div class="option" th:each="opt, index : ${goods.itemNmArr}">
+										<span th:text="${goods.optCdArr[index.index]}"></span> 
+										<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
+									</div>
+									<div class="price">
+										<th:block th:if="${goods.tmtbDcAmt} > 0">
+											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
+										</th:block>
+										<th:block th:if="${goods.tmtbDcAmt} < 1">
+											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+										</th:block>
+									</div>
+								</figcaption>
+							</figure>
+						</div>
+					</th:block>
+				</div>
+			</div>
+		</th:block>
+	</th:block>
+<!-- //전체배송목록 sort -->
+</div>
+<!-- //주문목록 -->
+</html>

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

@@ -20,7 +20,7 @@
 
 <th:block layout:fragment="content">
 <form id="orderForm" name="orderForm" class="form_wrap form_col_c form_full" action="#" th:action="@{'/order/form'}" th:method="post">
-	<input type="hidden" name="shotDelvYn" th:value="${order.shotDelvYn}" /><!-- 장바구니화면 총알배송여부 -->
+	<input type="hidden" name="shotDelvUseYn" th:value="${order.shotDelvUseYn}" /><!-- 장바구니화면 총알배송사용여부 -->
 	<!-- 장바구니화면 시퀀스 배열 등록 -->
 	<th:block th:each="cartSq , index : ${order.cartSqArr}">
 		<input type="hidden" name="cartSqArr" th:value="${cartSq}" />

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

@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : PlanningEventMainFormWeb.html
+ * @desc    : 이벤트 Page
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.3.8  	 sowon     최초 작성
+ *******************************************************************************
+ -->
+ <body>
+<th:block layout:fragment="content">
+	<!--  container -->
+	<div id="container" class="container ev">
+		<div class="breadcrumb">
+			<ul>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_2depth">이벤트/혜택</li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content ev_list">
+				<div class="cont_head">
+					<div>
+						<h3>이벤트</h3>
+					</div>
+				</div>
+				<div class="cont_body">
+					<div class="ev_mem_rank">
+						<div class="txt">
+							<strong>STYLE24 BENEFIT</strong>
+							<p>STYLE24 회원등급에 따라<br>제공되는 혜택 정보를 확인해 보세요.</p>
+							<a href="javascript:;" class="btn btn_dark">회원등급 혜택 보기</a>
+						</div>
+						<div class="mem_rank_list">
+							<ul class="clear">
+								<li>
+									<div class="icon vip"><span>V</span></div>
+									<span>VIP</span>
+								</li>
+								<li>
+									<div class="icon gold"><span>G</span></div>
+									<span>GOLD</span>
+								</li>
+								<li>
+									<div class="icon silver"><span>S</span></div>
+									<span>SILVER</span>
+								</li>
+								<li>
+									<div class="icon bronze"><span>B</span></div>
+									<span>BRONZE</span>
+								</li>
+								<li>
+									<div class="icon welcome"><span>W</span></div>
+									<span>WELCOME</span>
+								</li>
+							</ul>
+						</div>
+					</div>
+					<th:block th:if="${cnt > 0}">
+					<div class="event_list">
+					</th:block>
+					<th:block th:unless="${cnt > 0}">
+					<div class="event_list no_data">
+					</th:block>
+						<div class="event_top">
+							<div class="count">
+								<span>[[${cnt}]]</span>개의 이벤트
+							</div>
+							<div class="event_btn">
+								<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOTICE);">당첨자 발표</a>
+							</div>
+						</div>
+						<div class="list">
+							
+							<ul class="clear event_con">
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<div class="rank ranker"><span>NEW</span></div>
+											<img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션">
+										</div>
+										<div class="txt">
+											<p class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+									<div class="ev_img">
+										<div class="rank ranker"><span>NEW</span></div><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP">
+									</div>
+									<div class="txt">
+										<p class="tit">단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP 단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP</p>
+										<div class="date">
+											<span>2020.12.17</span> - <span>2021.01.03</span>
+										</div>
+									</div>
+								</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img03.jpg" alt="ANDEW white 20winter">
+										</div>
+										<div class="txt">
+											<p class="tit">ANDEW white 20winter</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img04.jpg" alt="자연스럽고 편안한  Earth Colors">
+										</div>
+										<div class="txt">
+											<p class="tit">자연스럽고 편안한  Earth Colors</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img05.jpg" alt="RETRO CONTEMPORARY 3개 브랜드 BUCKAROO/NBA/ANDEW">
+										</div>
+										<div class="txt">
+											<p class="tit">RETRO CONTEMPORARY 3개 브랜드 BUCKAROO/NBA/ANDEW</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img06.jpg" alt="스타일24만의 스타일로, tbj 하이 스타일링">
+										</div>
+										<div class="txt">
+											<p class="tit">스타일24만의 스타일로, TBJ 하이 스타일링</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img07.jpg" alt="올 겨울, 나를 설레게하는 선물같은 브랜드 THIS IS FOUR YOU">
+										</div>
+										<div class="txt">
+											<p class="tit">올 겨울, 나를 설레게하는 선물같은 브랜드 THIS IS FOUR YOU</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img08.jpg" alt="한눈에 살펴보는 우리 아이 겨울 아이템">
+										</div>
+										<div class="txt">
+											<p class="tit">한눈에 살펴보는 우리 아이 겨울 아이템</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+							</ul>
+							
+							<ul class="clear no_con">
+								<li>
+									<p><img src="/images/pc/ico_content_find.png" alt="등록된 이벤트가 없습니다."></p>
+									<span>등록된 이벤트가 없습니다.</span>
+									<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈으로 가기</a>
+								</li>
+							</ul>
+						
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- // container -->	
+
+<script th:inline="javascript">
+
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -24,7 +24,7 @@
 			<ul>
 				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
 				<li class="bread_2depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);">기획전</a></li>
-				<th:block th:if="${cateNm != null}">
+				<th:block th:if="${cateNo != null}">
 				<li class="bread_3depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN+'?cateNo='+[[${cateNo}]]);">[[${cateNm}]]</a></li>
 				</th:block>
 			</ul> 
@@ -70,255 +70,52 @@
                                 <button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>
                             </div>
                         </div>
+                        
+                        
                         <div class="itemsGrp">
+                        <th:block th:each="PlanData, PlanStat : ${planList}">
                             <div class="exhi_item">
+                             
                                 <div class="exhi_item_img">
-                                    <a href="">
+                                    <a href="javascript:void(0);" th:onclick="fnEventGoToPage('[[${PlanData.planSq}]]');">
+                                    	<th:block th:if="${PlanData.newPlan != null}">
                                         <div class="shape ranker"><span>NEW</span></div>
-                                        <img src="/images/pc/thumb/ev_list_img01.jpg" alt=""> <!-- 430x430 사이즈 최적 -->
+                                        </th:block>
+                                        <img th:src="${@environment.getProperty('domain.image')+'/planning/'+PlanData.mainPimg}" style="width: 100%;" alt=""> <!-- 430x430 사이즈 최적 -->
                                         <div class="exhi_detail">
-                                            <p class="brand">TBJ 외</p>
-                                            <h3 class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션 ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</h3>
-                                            <p class="sale">신상 15%쿠폰할인</p>
+                                        	<th:block th:if="${PlanData.cnt > 1}">
+                                            <p class="brand">[[${PlanData.brand}]] 외</p>
+                                            </th:block>
+                                            <th:block th:if="${PlanData.cnt <= 1}">
+                                            <p class="brand">[[${PlanData.brand}]]</p>
+                                            </th:block>
+                                            <h3 class="tit">[[${PlanData.planNm}]]</h3>
+                                            <p class="sale">[[${PlanData.dtlTitle1}]]</p>
                                         </div>
                                     </a>
                                 </div>
+                             	
                                 <div class="exhi_item_pr">
                                     <ul class="prod_list clear">
+                                    <th:block th:each="goodsList, k : ${goodsList}">
+										<th:block th:if="${PlanData.planSq} == ${goodsList.planSq} and ${goodsList.goodsCd} != null">
                                         <li>
                                             <a href="">
                                                 <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr01.jpg" alt="볼패딩 푸퍼점퍼">
+                                                   <img th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsList.sysImgNm}"  style="width: 100%;" alt="">
                                                 </div>
                                                 <div class="txt">
-                                                    <p class="pr_tit">볼패딩 푸퍼점퍼 T204JP060P 볼패딩 푸퍼점퍼 T204JP060P</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr02.jpg" alt="테이퍼드 M톤 기모 데님 팬츠">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">테이퍼드 M톤 기모 데님 팬츠</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr03.jpg" alt="패딩 리버서블 FLEECE  점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">패딩 리버서블 FLEECE  점퍼</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                    </ul>
-                                </div>
-                            </div>
-                            <div class="exhi_item">
-                                <div class="exhi_item_img">
-                                    <a href="">
-                                        <div class="shape ranker"><span>NEW</span></div>
-                                        <img src="/images/pc/thumb/tmp_pdLookbook1.jpg" alt="">
-                                        <div class="exhi_detail">
-                                            <p class="brand">TBJ 외</p>
-                                            <h3 class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션 ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</h3>
-                                            <p class="sale">신상 15%쿠폰할인</p>
-                                        </div>
-                                    </a>
-                                </div>
-                                <div class="exhi_item_pr">
-                                    <ul class="prod_list clear">
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr01.jpg" alt="볼패딩 푸퍼점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">볼패딩 푸퍼점퍼 T204JP060P 볼패딩 푸퍼점퍼 T204JP060P</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr02.jpg" alt="테이퍼드 M톤 기모 데님 팬츠">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">테이퍼드 M톤 기모 데님 팬츠</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr03.jpg" alt="패딩 리버서블 FLEECE  점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">패딩 리버서블 FLEECE  점퍼</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                    </ul>
-                                </div>
-                            </div>
-                            <div class="exhi_item">
-                                <div class="exhi_item_img">
-                                    <a href="">
-                                        <div class="shape ranker"><span>NEW</span></div>
-                                        <img src="/images/pc/thumb/tmp_pdLookbook1.jpg" alt="">
-                                        <div class="exhi_detail">
-                                            <p class="brand">TBJ 외</p>
-                                            <h3 class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션 ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</h3>
-                                            <p class="sale">신상 15%쿠폰할인</p>
-                                        </div>
-                                    </a>
-                                </div>
-                                <div class="exhi_item_pr">
-                                    <ul class="prod_list clear">
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr01.jpg" alt="볼패딩 푸퍼점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">볼패딩 푸퍼점퍼 T204JP060P 볼패딩 푸퍼점퍼 T204JP060P</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr02.jpg" alt="테이퍼드 M톤 기모 데님 팬츠">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">테이퍼드 M톤 기모 데님 팬츠</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr03.jpg" alt="패딩 리버서블 FLEECE  점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">패딩 리버서블 FLEECE  점퍼</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                    </ul>
-                                </div>
-                            </div>
-                            <div class="exhi_item">
-                                <div class="exhi_item_img">
-                                    <a href="">
-                                        <img src="/images/pc/thumb/tmp_pdLookbook1.jpg" alt="">
-                                        <div class="exhi_detail">
-                                            <p class="brand">TBJ 외</p>
-                                            <h3 class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션 ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</h3>
-                                            <p class="sale">신상 15%쿠폰할인</p>
-                                        </div>
-                                    </a>
-                                </div>
-                                <div class="exhi_item_pr">
-                                    <ul class="prod_list clear">
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr01.jpg" alt="볼패딩 푸퍼점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">볼패딩 푸퍼점퍼 T204JP060P 볼패딩 푸퍼점퍼 T204JP060P</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr02.jpg" alt="테이퍼드 M톤 기모 데님 팬츠">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">테이퍼드 M톤 기모 데님 팬츠</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr03.jpg" alt="패딩 리버서블 FLEECE  점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">패딩 리버서블 FLEECE  점퍼</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                    </ul>
-                                </div>
-                            </div>
-                            <div class="exhi_item">
-                                <div class="exhi_item_img">
-                                    <a href="">
-                                        <img src="/images/pc/thumb/tmp_pdLookbook1.jpg" alt="">
-                                        <div class="exhi_detail">
-                                            <p class="brand">TBJ 외</p>
-                                            <h3 class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션 ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</h3>
-                                            <p class="sale">신상 15%쿠폰할인</p>
-                                        </div>
-                                    </a>
-                                </div>
-                                <div class="exhi_item_pr">
-                                    <ul class="prod_list clear">
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr01.jpg" alt="볼패딩 푸퍼점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">볼패딩 푸퍼점퍼 T204JP060P 볼패딩 푸퍼점퍼 T204JP060P</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr02.jpg" alt="테이퍼드 M톤 기모 데님 팬츠">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">테이퍼드 M톤 기모 데님 팬츠</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr03.jpg" alt="패딩 리버서블 FLEECE  점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">패딩 리버서블 FLEECE  점퍼</p>
-                                                    <p class="price"><span>25,410</span>원</p>
+                                                    <p class="pr_tit">[[${goodsList.goodsNm}]]</p>
+                                                    <p class="price"><span th:text="${#numbers.formatInteger(goodsList.currPrice, 0,'COMMA')}"></span>원</p>
                                                 </div>
                                             </a>
                                         </li>
                                     </ul>
                                 </div>
                             </div>
+                            </th:block>
+             		
+             				
                         </div>
                     </div>
                 </div>

BIN
src/main/webapp/images/pc/ico_point_sm.png


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

@@ -501,7 +501,7 @@ var gagajf = {
 	 * 사용) gagajf.replaceOneQuestionMark('#registerForm');
 	 */
 	replaceOneQuestionMark : function(formId) {
-		$(formId).find('input').each(function(idx, el) {
+		$(formId).find('input[type=text]').each(function(idx, el) {
 			$(el).val($(el).val().replace(/\?+/gi, "?"));
 		});
 		

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

@@ -8,7 +8,7 @@ const _PAGE_LOGOUT = _frontUrl + "/logout";	// GNB > 로그아웃
 const _PAGE_MAIN = _frontUrl + "/display/mall/main/form";	// 몰메인
 
 //== 고객 ==/
-const _PAGE_CUSTOMER_JOIN_TYPE = _frontUrl + "/customer/join/type/form";									// 고객 > 회원가입 유형
+const _PAGE_CUSTOMER_JOIN_TYPE = _frontUrl + "/customer/join/type/form";							// 고객 > 회원가입 유형
 const _PAGE_CUSTOMER_JOIN = _frontUrl + "/customer/join/form";										// 고객 > 회원가입
 const _PAGE_CUSTOMER_SNS_JOIN = _frontUrl + "/customer/sns/join/form";								// 고객 > SNS가입
 const _PAGE_CUSTOMER_JOIN_COMPLETE = _frontUrl + "/customer/join/complete/form";					// 고객 > 고객가입 > 완료페이지
@@ -17,6 +17,7 @@ const _PAGE_CUSTOMER_PWD_FIND = _frontUrl + "/customer/password/find/form";
 const _PAGE_CUSTOMER_PWD_CHANGE_FIND = _frontUrl + "/customer/password/change/form?pageGb=find";	// 고객 > 비밀번호 찾기> 비밀번호 변경 화면
 const _PAGE_CUSTOMER_PWD_CHANGE_TEMP = _frontUrl + "/customer/password/change/form?pageGb=temp";	// 고객 > 임시비밀번호 로그인 > 비밀번호 변경 화면
 const _PAGE_CUSTOMER_DORMANT = _frontUrl + "/customer/dormant/certify/form";						// 고객 > 휴면회원
+const _PAGE_CUSTOMER_DORMANT_COMPLETE = _frontUrl + "/customer/dormant/certify/complete/form";		// 고객 > 휴면회원 > 완료페이지
 
 //== 상품상세 ==/
 const _PAGE_GOODS_DETAIL = _frontUrl + "/goods/detail/form?goodsCd=";						// 상품 상세
@@ -26,7 +27,7 @@ const _PAGE_CARD_PRMT_LAYER = _frontUrl + "/goods/card/prmt/layer";							// 카
 const _PAGE_GOODS_SIZEINFO_LAYER = _frontUrl + "/goods/sizeInfo/layer?goodsCd=";			// 사이즈정보레이어
 const _PAGE_GOODS_QNA_LAYER = _frontUrl + "/goods/qna/layer/";								// 상품문의레이어
 const _PAGE_GOODS_QNA_CREATE_LAYER = _frontUrl + "/goods/qna/create/layer/";				// 상품문의레이어
-const _PAGE_GOODS_DELIVERY_LAYER = _frontUrl + "/goods/delivery/layer?goodsCd=";			// 배송/교환/반품 레이어
+const _PAGE_GOODS_DELIVERY_LAYER = _frontUrl + "/goods/delivery/layer/";			// 배송/교환/반품 레이어
 const _PAGE_GOODS_REVIEW_LAYER = _frontUrl + "/goods/review/layer?goodsCd=";				// 상품평 레이어
 
 //== 장바구니 ==/
@@ -47,12 +48,18 @@ const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	//
 const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
 const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/form";				// 마이페이지 > 내정보 관리
 const _PAGE_MYPAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";			// 마이페이지 > 회원탈퇴
+const _PAGE_WISHLIST_PUT = _frontUrl + "/mypage/wish/list/put";					// 위시리스트 담기
+const _PAGE_WISHLIST_DEL = _frontUrl + "/mypage/wish/list/delete";				// 위시리스트 삭제
 
 //== 검색 ==/
 
 //== 기획전 ==/
 const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 					// 기획전 메인
 
+
+//== 이벤트 ==/
+const _PAGE_EVENT_MAIN = _frontUrl + "/planning/event/main/form"; 					// 이벤트 메인
+
 //== 고객센터 ==/
 const _PAGE_FAQ = _frontUrl + "/callcenter/faq/form";									// 고객센터 > FAQ
 const _PAGE_ONETOONE_QNA = _frontUrl + "/callcenter/onetoone/qna/form";					// 고객센터 > 1:1문의
@@ -276,9 +283,9 @@ var cfnLoginYes24 = function (requestGb, chkRememberMe) {
 	let popupX = (window.screen.width / 2) - (popupWidth / 2);
 	let popupY = (window.screen.height / 3) - (popupHeight / 3);
 	if ('P' === _frontGb) {
-		//window.open(actionUrl, 'yes24Login', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
+		window.open(actionUrl, 'yes24Login', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
 	} else {
-		//document.location.href = actionUrl + '&requestGb=' + requestGb;
+		document.location.href = actionUrl + '&requestGb=' + requestGb;
 	}
 };
 
@@ -473,3 +480,147 @@ function cfGoodsQngCreate(goodsCd) {
 	cfOpenLayer(_PAGE_GOODS_QNA_CREATE_LAYER + goodsCd, 'layer_goods_qna_reg');
 }
 
+
+/**
+* @type   : function
+* @access : public
+* @desc   : 상품문의 full 팝업
+* <pre>
+*		cfGoodsQngReg();
+* </pre>
+*/
+function cfGoodsDelivery(goodsCd) {
+	var Param = new Object();
+	var str = '<div class="pd_pop full_pop pd_delivery_pop" id="layer_goods_delivery">';
+
+	if ($('#layer_goods_delivery').length == 0) {
+		$('body').append(str);
+	}
+
+	cfOpenFullLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
+}
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 로그인 확인
+ * <pre>
+ *		cfCheckLogin('callbackFn');
+ * </pre>
+ */
+function cfCheckLogin() {
+	var result = '';
+	$.ajax({
+		type: 'get'
+		, async: false
+		, url: '/common/login/check'
+		, success: function (data) {
+			result = data;
+		}
+	});
+
+	return result;
+}
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 위시리스트 담기/삭제
+ * <pre>
+ *	 cfnPutWishList(OBJ);
+ * </pre>
+ * @param  : goodsCd - 상품코드. 필수
+ * @param  : planSq - 기획전번호. 옵션
+ * @date   : 2021/03/08
+ * @author : yujung
+ */
+function cfnPutWishList(a) {
+
+	if (!cfCheckLogin()) {
+		cfnGoToPage(_PAGE_LOGIN);
+		return false;
+	}
+
+	var goodsCd = $(a).attr("goodsCd");
+	var ithrCd = $(a).attr("ithrCd");
+	var contentsLoc = $(a).attr("contentsLoc");
+	var planDtlSq = $(a).attr("planDtlSq");
+	var flag = 'REG';
+	if ($(a).hasClass('active')) {
+		flag = 'DEL'
+	}
+
+	if (gagajf.isNull(goodsCd)) return;
+
+	var data = [];
+
+	var params = new Object();
+	params.goodsCd = goodsCd;
+
+	if (!gagajf.isNull(ithrCd)) {
+		params.ithrCd = ithrCd;
+	}
+	if (!gagajf.isNull(contentsLoc)) {
+		params.contentsLoc = contentsLoc;
+	}
+	if (!gagajf.isNull(planDtlSq)) {
+		params.planDtlSq = planDtlSq;
+	}
+	data.push(params);
+
+	var jsonData = JSON.stringify(data);
+
+	if (flag == 'REG') {
+		gagajf.ajaxJsonSubmit(_PAGE_WISHLIST_PUT, jsonData, function (result) {
+			var Msg = '';
+			if (result.status == "200") {
+				$(a).addClass('active');
+				if (_frontGb == "M") {
+					Msg = '위시리스트에 담겼습니다.';
+
+				} else {
+
+				//	mcxDialog.confirm("위시리스트로 이동하시겠습니까?", {
+				//		cancelBtnText: "아니요",	//취소 또는 닫기 버튼명
+				//		sureBtnText: "예",		//처리문 버튼명
+				//		sureBtnClick: function () {
+				//			cfnGoToPage(_PAGE_WISHLIST);
+				//		}
+				//	});
+				}
+			} else if (result.status == "중복") {
+				Msg = '이미 등록 되어있습니다.';
+			} else {
+				//Msg = '오류로 인해 처리되지 않았습니다.';
+			}
+
+			// 메시지 처리
+			if (!gagajf.isNull(Msg)) {
+				if (_frontGb == "M") {
+			//		mcxDialog.toast(Msg);
+				} else {
+			//		mcxDialog.alertC(Msg);
+				}
+			}
+		});
+	} else {
+		gagajf.ajaxJsonSubmit(_PAGE_WISHLIST_DEL, jsonData, function (result) {
+			var Msg = '';
+			if (result.status == "200") {
+				Msg = '삭제 되었습니다.';
+				$(a).removeClass('active');
+			} else {
+				Msg = '오류로 인해 처리되지 않았습니다.';
+			}
+
+			// 메시지 처리
+			if (!gagajf.isNull(Msg)) {
+				if (_frontGb == "M") {
+			//		mcxDialog.toast(Msg);
+				} else {
+			//		mcxDialog.alertC(Msg);
+				}
+			}
+		});
+	}
+}