Browse Source

Merge branch 'develop' into bin2107

bin2107 5 years ago
parent
commit
af3bc13fd3
30 changed files with 1073 additions and 1278 deletions
  1. 30 0
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  2. 3 3
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  3. 25 0
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  4. 57 16
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  5. 34 18
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  6. 1 0
      src/main/java/com/style24/persistence/domain/WishList.java
  7. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  8. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  9. 11 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  10. 7 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  11. 35 24
      src/main/webapp/WEB-INF/views/web/SigninFormWeb.html
  12. 82 74
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  13. 28 21
      src/main/webapp/WEB-INF/views/web/customer/ConsentUseInfoFormWeb.html
  14. 12 11
      src/main/webapp/WEB-INF/views/web/customer/JoinFormWeb.html
  15. 28 23
      src/main/webapp/WEB-INF/views/web/customer/JoinTypeFormWeb.html
  16. 6 5
      src/main/webapp/WEB-INF/views/web/customer/PasswordChangeFormWeb.html
  17. 0 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponDetailFormWeb.html
  18. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponFormWeb.html
  19. 13 18
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustConfirmFormWeb.html
  20. 7 9
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html
  21. 264 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustPwdModifyFormWeb.html
  22. 9 12
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustSnsJoinInitPwdFormWeb.html
  23. 55 9
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  24. 0 57
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListWeb.html
  25. 82 0
      src/main/webapp/WEB-INF/views/web/planning/PlanningCouponDetailFormWeb.html
  26. 10 8
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  27. 6 5
      src/main/webapp/biz/customer.js
  28. 19 16
      src/main/webapp/ux/pc/css/common.css
  29. 220 938
      src/main/webapp/ux/pc/css/layout.css
  30. 26 4
      src/main/webapp/ux/style24_link.js

+ 30 - 0
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -889,6 +889,36 @@ public class TsfCustomerService {
 		return coreCustomerService.saveCustomerSecede(customer);
 	}
 
+	/**
+	 * 마이페이지 - 비밀번호 변경
+	 * @param  customer - 고객번호
+	 * @return GagaMap - 결과
+	 * @author jsshin
+	 * @since 2021. 04. 01
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap changePassword(Customer customer) {
+		GagaMap resultMap = new GagaMap();
+		boolean isSuccess = false;
+		Login login = new Login();
+		login.setCustNo(customer.getCustNo());
+		Login loginCheckInfo = loginService.getLoginCheckInfo(login);
+
+		if (loginCheckInfo != null) {
+			isSuccess = passwordEncoder.matchesSha256(customer.getOrgPasswd(), loginCheckInfo.getPasswd());
+		}
+		if (!isSuccess) {
+			resultMap.setBoolean("isSuccess", isSuccess);
+			resultMap.setString("resultType", "WRONG_PWD");
+			return resultMap;
+		} else {
+			customer.setTempPasswdYn("N"); // 임시비밀번호여부
+			saveCustomerPassword(customer); // 비밀번호 수정
+		}
+		resultMap.setBoolean("isSuccess", isSuccess);
+		return resultMap;
+	}
+
 
 	/**
 	 * KCP 계좌인증 처리

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

@@ -801,11 +801,11 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @author jsshin
 	 * @since 2021. 03. 25
 	 */
-	@PostMapping("/consent/useinfo/layer")
-	public ModelAndView cnstentUseInfoLayer() {
+	@PostMapping("/consent/useinfo/form")
+	public ModelAndView cnstentUseInfoForm(@RequestBody Customer customer) {
 		ModelAndView mav = new ModelAndView();
 
-		mav.addObject("custNm", "신주승");
+		mav.addObject("custNm", customer.getCustNm());
 
 		mav.setViewName(super.getDeviceViewName("customer/ConsentUseInfoForm"));
 

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

@@ -25,6 +25,7 @@ import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.biz.service.TsfRendererService;
 import com.style24.front.biz.service.TsfReviewService;
+import com.style24.front.biz.service.TsfWishlistService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
@@ -40,6 +41,7 @@ import com.style24.persistence.domain.Measurement;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.SizeInfo;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -82,6 +84,9 @@ public class TsfGoodsController extends TsfBaseController {
 
 	@Autowired
 	private TsfRendererService rendererService;
+	
+	@Autowired
+	private TsfWishlistService wishListService;
 
 	@Value("${has-ssl}")
 	private String hasSsl;
@@ -1225,4 +1230,24 @@ public class TsfGoodsController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("goods/GoodsDetailReviewForm"));
 		return mav;
 	}
+	
+	/**
+	 * 퀵메뉴 위시리스트
+	 * @return
+	 * @author sowon
+	 * @since 2021. 4. 1
+	 */
+	@GetMapping("/wish/list")
+	@ResponseBody
+	public Collection<Goods> getWishList() {
+		Collection<Goods> wishList = new ArrayList<>();
+		WishList wish = new WishList();
+		wish.setSiteCd(TscConstants.Site.STYLE24.value());
+		wish.setFrontGb(TsfSession.getFrontGb());
+		wish.setCustGb(TsfSession.getCustGb());
+		wish.setQuickYn("Y");
+		// 위시리스트 상품목록
+		wishList = wishListService.getWishListGoodsList(wish);
+		return wishList;
+	}
 }

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

@@ -49,6 +49,7 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustAccount;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
@@ -955,7 +956,7 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("cpnDtlRefvalBrandList", coreCouponService.getCouponRefvalBrandList(cpnId));
 		// 쿠폰적용대상 - 제외상품 조회
 		mav.addObject("cpnDtlRefvalExceptGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_14"));
-		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailPop"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailForm"));
 		return mav;
 	}
 	
@@ -1135,9 +1136,14 @@ public class TsfMypageController extends TsfBaseController {
 	@GetMapping("/wish/list/form")
 	public ModelAndView mypageWishListForm(WishList wishList) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("mypage/MypageWishListForm"));
+		wishList.setSiteCd(TscConstants.Site.STYLE24.value());
+		wishList.setFrontGb(TsfSession.getFrontGb());
+		wishList.setCustGb(TsfSession.getCustGb());
+		// 위시리스트 달
+		mav.addObject("wishMonth", wishListService.getWishListMonth(wishList));
 		return mav;
 	}
-	
+
 	/**
 	 * 마이페이지 상품목록 가져오기
 	 *
@@ -1146,19 +1152,19 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 03. 29
 	 */
 	@GetMapping("/wish/list")
-	public ModelAndView mypageWishGoodsList(WishList wishList) {
-		ModelAndView mav = new ModelAndView();
-		wishList.setSiteCd(TscConstants.Site.STYLE24.value());
-		wishList.setFrontGb(TsfSession.getFrontGb());
-		wishList.setCustGb(TsfSession.getCustGb());
-		// 위시리스트 달
-		mav.addObject("wishMonth", wishListService.getWishListMonth(wishList));
+	@ResponseBody
+	public Collection<Goods> getWishList() {
+		Collection<Goods> wishList = new ArrayList<>();
+		WishList wish = new WishList();
+		wish.setSiteCd(TscConstants.Site.STYLE24.value());
+		wish.setFrontGb(TsfSession.getFrontGb());
+		wish.setCustGb(TsfSession.getCustGb());
 		// 위시리스트 상품목록
-		mav.addObject("wishGoods", wishListService.getWishListGoodsList(wishList));
-		mav.setViewName(super.getDeviceViewName("mypage/MypageWishList"));
-		return mav;
+		wishList = wishListService.getWishListGoodsList(wish);
+		return wishList;
 	}
 
+
 	/*신주승 시작*/
 
 	/**
@@ -1175,7 +1181,7 @@ public class TsfMypageController extends TsfBaseController {
 
 		mav.addObject("custId", customer.getCustId());
 
-		mav.addObject("snsType", customer.getSnsType());
+		mav.addObject("snsType", StringUtils.defaultString(customer.getSnsType(), ""));
 
 		// 1.간편가입인데 처음 마이페지로 진입 했을떄
 		if (StringUtils.isNotBlank(customer.getSnsType()) && StringUtils.isBlank(customer.getPasswd())) {
@@ -1232,7 +1238,7 @@ public class TsfMypageController extends TsfBaseController {
 
 		mav.addObject("bankList", rendererService.getCommonCodeList("G940", "Y"));
 
-		mav.setViewName(super.getDeviceViewName("/mypage/MypageCustModifyForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCustModifyForm"));
 		return mav;
 	}
 
@@ -1353,7 +1359,7 @@ public class TsfMypageController extends TsfBaseController {
 
 		mav.addObject("custNm", customer.getCustNm());
 
-		mav.setViewName(super.getDeviceViewName("/mypage/MypageCustSecedeForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCustSecedeForm"));
 
 		return mav;
 	}
@@ -1411,10 +1417,45 @@ public class TsfMypageController extends TsfBaseController {
 			return mav;
 		}
 
-		mav.setViewName(super.getDeviceViewName("/mypage/MypageCustSecedeCompleteForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCustSecedeCompleteForm"));
 
 		return mav;
 	}
 
+	/**
+	 * 마이페이지 - 비밀번호 변경 팝업
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 04. 01
+	 */
+	@PostMapping("/password/modify/form")
+	public ModelAndView pwdModifyForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("custId", TsfSession.getInfo().getCustId());
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCustPwdModifyForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 - 비밀번호 변경
+	 *
+	 * @return GagaMap
+	 * @author jsshin
+	 * @since 2021. 04. 01
+	 */
+	@PostMapping("/password/change")
+	@ResponseBody
+	public GagaMap changePassword(@RequestBody Customer customer) {
+		Integer custNo = TsfSession.getInfo().getCustNo();
+		customer.setCustNo(custNo);
+		customer.setRegNo(custNo);
+		customer.setUpdNo(custNo);
+		return customerService.changePassword(customer);
+	}
+
 	/*신주승 끝*/
 }

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

@@ -14,9 +14,11 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.style24.core.biz.service.TscCouponService;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
@@ -49,7 +51,12 @@ public class TsfPlanningController extends TsfBaseController {
 
 	@Autowired
 	private TscCustomerService coreCustomerService;
+	
+	@Autowired
+	private TsfCouponService couponService;
 
+	@Autowired
+	private TscCouponService coreCouponService;
 	/**
 	 * 기획전 메인 화면
 	 * @param cateNo - 카테고리번호
@@ -98,24 +105,6 @@ public class TsfPlanningController extends TsfBaseController {
 		return planningService.getPlanningMainList(plan);
 	}
 
-//	/**
-//	 * 기획전 접근확인
-//	 * 
-//	 * @return
-//	 * @author sowon
-//	 * @since 2021. 3. 22
-//	 */
-//	@PostMapping("/access")
-//	@ResponseBody
-//	public GagaMap PlanningAccessConfrim(@RequestBody Plan plan) throws Exception {
-//		GagaMap result = new GagaMap();
-//		// 접근 가능 고객 등급 확인
-//		planningService.accessCustGrade(plan);
-//		result.set("status", "200");
-//
-//		return result;
-//	}
-
 	/**
 	 * 기획전 상세화면
 	 *
@@ -222,6 +211,33 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("planning/PlanningDetailForm"));
 		return mav;
 	}
+	
+	/**
+	 * 기획전 쿠폰 상세보기 모달
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 04. 01
+	 */
+	@GetMapping(value = "/coupon/detail")
+	public ModelAndView mypageCouponDetailPop(@RequestParam(value = "cpnId") int cpnId) {
+		ModelAndView mav = new ModelAndView();
+
+		// 쿠폰 - 기본정보
+		mav.addObject("couponDetailInfo", couponService.getCouponDetailInfo(cpnId));
+		// 쿠폰적용대상 - 공급업체 조회
+		mav.addObject("cpnDtlRefvalSupplyCompList", coreCouponService.getCouponRefvalSupplyCompList(cpnId));
+		// 쿠폰적용대상 - 적용상품 조회
+		mav.addObject("cpnDtlRefvalApplyGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_10"));
+		// 쿠폰적용대상 - 카테고리 조회
+		mav.addObject("cpnDtlRefvalCateList", coreCouponService.getCouponRefvalCategoryList(cpnId));
+		// 쿠폰적용대상 - 브랜드 조회
+		mav.addObject("cpnDtlRefvalBrandList", coreCouponService.getCouponRefvalBrandList(cpnId));
+		// 쿠폰적용대상 - 제외상품 조회
+		mav.addObject("cpnDtlRefvalExceptGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_14"));
+		mav.setViewName(super.getDeviceViewName("planning/PlanningCouponDetailForm"));
+		return mav;
+	}
 
 	/**
 	 * 기획전 쿠폰 다운로드. 고객이 상품쿠폰 다운로드 시 발급됨.

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

@@ -25,6 +25,7 @@ public class WishList extends TscBaseDomain {
 	private String siteCd;
 	private String frontGb;
 	private String custGb;
+	private String quickYn;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsCd;
 

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

@@ -590,6 +590,7 @@
 		  AND A.CPN_ID = B.CPN_ID 
 		  AND B.CUST_NO = #{custNo}
 		  AND A.CPN_STAT = 'G232_11'
+		  AND NOW() BETWEEN A.AVAIL_STDT AND A.AVAIL_EDDT
 	</select>
 	
 	<select id="getCouponDetailInfo" resultType="Coupon" parameterType="Coupon">

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

@@ -269,6 +269,7 @@
 		      AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT           /*판매기간 확인*/
 		      GROUP BY G.GOODS_CD , G.SELF_GOODS_YN , G.MIN_ORD_QTY, G.MAX_ORD_QTY, O.OPT_CD1
 		) A
+		ORDER BY GOODS_CD, OPT_CD1
 	</select>
 		
 	<!-- 상품 옵션2 목록  - 자사용-->

+ 11 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -428,7 +428,13 @@
 	
 	<select id="templateDispOrdInfo" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.templateDispOrdInfo*/
-		SELECT TMPL_TYPE , DISP_ORD, PLAN_CONT_SQ,TITLE ,LINK_URL ,DISP_YN 
+		SELECT TMPL_TYPE 
+		     , DISP_ORD
+		     , PLAN_CONT_SQ
+		     ,TITLE 
+		     ,LINK_URL
+		     ,NOTE 
+		     ,DISP_YN 
 		FROM TB_PLAN_CONTENTS TPC 
 		WHERE 1=1 
 			AND TPC.PLAN_SQ = #{planSq}
@@ -437,7 +443,7 @@
 	</select>
 	
 	<select id="getPlanReviewInfo" parameterType="Review" resultType="Review">
-		/* TsfPlanning.templateDispOrdInfo*/
+		/* TsfPlanning.getPlanReviewInfo*/
 		SELECT F2.*
 		FROM 
 		(
@@ -588,7 +594,7 @@
 	</select>
 	
 	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
-		/* TsfPlanning.templateDispOrdInfo*/
+		/* TsfPlanning.getPlanCouponInfo*/
 		SELECT F.*
 		<if test="planSq != null and planSq != ''">
 		      ,(CASE F.CPN_ID WHEN (SELECT CPN_ID FROM TB_CUST_COUPON C WHERE C.CPN_ID = F.CPN_ID AND CUST_NO = #{custNo})THEN '받기완료'
@@ -600,7 +606,8 @@
 				  , PC.PLAN_SQ 
 				  , PC.TMPL_TYPE 
 				  , PC.TITLE 
-				  , PC.LINK_URL 
+				  , PC.LINK_URL
+				  , PC.NOTE 
 				  , PCI.ITEM_VAL
 				  , PCI.DISP_ORD
 				  , TC.CPN_ID

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

@@ -22,6 +22,7 @@
 		FROM TB_WISHLIST W
 		WHERE CUST_NO = #{custNo}
 		GROUP BY DATE_FORMAT(W.REG_DT,'%Y-%m') 
+		ORDER BY REG_DT DESC
 	</select>
 	
 	<!-- 위시리스트 상품목록 (임시 = 수정예정)-->
@@ -35,7 +36,7 @@
 			    SELECT W.AF_LINK_CD 
 			          ,W.CONTENTS_LOC 
 			          ,W.CUST_NO 
-			          ,W.REG_DT 
+			          ,DATE_FORMAT(W.REG_DT,'%Y.%m') AS REG_DT 
 			          ,CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
 			                    BG.BRAND_GROUP_ENM
 			                ELSE
@@ -51,6 +52,7 @@
 			         , G.MAIN_COLOR_CD                                          /*대표색상코드*/
 			         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
 			         , G.CURR_PRICE                                             /*현재판매가*/
+			         , GS.STOCK_QTY
 			    FROM   TB_WISHlIST W
 			         , TB_GOODS G
 			         , TB_GOODS_STOCK GS
@@ -62,7 +64,6 @@
 			    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
 			    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
 			    AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-			    AND    GS.STOCK_QTY  >  0 /*재고있는상품*/
 			    AND    B.USE_YN = 'Y'
 			    AND    BG.USE_YN = 'Y'
 			    AND    W.CUST_NO = #{custNo}
@@ -82,6 +83,7 @@
 			SELECT 
 			       PG.BRAND_GROUP_NM
 			     , PG.GOODS_CD
+			     , PG.STOCK_QTY
 			     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
 			     , PG.GOODS_NM
 			     , PG.GOODS_TNM
@@ -98,6 +100,9 @@
 			INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
 			)Z
 		ORDER BY Z.REG_DT DESC
+		<if test="quickYn != null and quickYn != ''">
+			,Z.STOCK_QTY
+		</if>
 	</select>
 	
 

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

@@ -147,11 +147,11 @@
 		}
 	});
 
-		//엔터키 로그인
+	//엔터키 로그인
 	$('#loginForm input[name=passwd]').keypress(function (event) {
 		if (event.which === 13) {
 			event.preventDefault();
-			fnValidConfirm();
+			$('#btnLogin').trigger('click');
 		}
 	});
 
@@ -166,12 +166,13 @@
 
 	// 로그인 실패 후 과정
 	var fnFailLoginProcess = function (result) {
+		// 탈퇴회원
 		if (result.status === 'SECEDE_CUST') {
-			// 탈퇴회원
-		} else if (result.status === 'SESSION_EXPIRED') {
-			// 세션만료
-		} else if (result.status === 'DORMANT_CUST') {
-			// 휴면회원
+			mcxDialog.alert("탈퇴 회원 입니다.");
+			return;
+		}
+		// 휴면회원
+		if (result.status === 'DORMANT_CUST') {
 			mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
 				sureBtnText: "확인",
 				sureBtnClick: function() {
@@ -179,7 +180,9 @@
 				}
 			});
 			return;
-		} else if (result.status === 'CI_EMPTY') {
+		}
+		// CI(본인인증)정보 없는 회원
+		if (result.status === 'CI_EMPTY') {
 			// 본인이증 필요한 회원
 			mcxDialog.alertC("본인인증 후 다시 로그인 하시기 바랍니다.", {
 				sureBtnText: "확인",
@@ -189,6 +192,7 @@
 			});
 			return;
 		}
+		// 비밀번호 틀린 경우
 		if (!gagajf.isNull(result.message)) {
 			grecaptcha.reset(); // 리캡챠 리셋
 			let loginFailCnt = Number(result.loginFailInfo.loginFailCnt);
@@ -196,16 +200,16 @@
 			$("#login_fail_cnt").html(loginFailCnt);
 			$("#login_remain_cnt").html(10 - loginFailCnt);
 			$(".t_err_login_fail").show();
+
+			// 비밀번호 5회 이상 틀린 경우 캡챠 노출
 			if (loginFailCnt >= 5 && loginFailCnt < 10) {
-				// 비밀번호 5회 이상 틀린 경우 캡챠 노출
 				$('#recaptcha').show();
 				rechaptchCheck = false;
+			// 비밀번호 10회 이상 틀린 경우 로그인 블락
 			} else if (loginFailCnt >= 10) {
 				$('#recaptcha').hide();
 				rechaptchCheck = true;
-				// 비밀번호 10회 이상 틀린 경우 로그인 블락
 				let blockSecs = Number(result.loginFailInfo.blockSecs);
-
 				if (blockSecs > 0) {
 					$("#blockSecs2").html(blockSecs);
 					fnSetLoginBlockTime();
@@ -248,9 +252,9 @@
 		}
 	}
 
-	// SNS 로그인 콜백함수
+	// SNS 로그인 콜백함수(네이버, 카카오, YES24)
 	var fnSnsSigninCallback = function(userInfo) {
-		// Ci이 조회 시 없음
+		// 1. CI 정보로 사용자가 없어서 회원가입 프로세스 처리 중 이메일, 휴대전화 중복
 		if (userInfo.custStat === 'DUP_PHONE_CUST') {
 			mcxDialog.alert("이미 사용 중인 휴대전화번호 입니다.");
 			return;
@@ -259,14 +263,12 @@
 			mcxDialog.alert("이미 사용 중인 이메일 입니다.");
 			return;
 		}
-		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
-		}
-		// Ci이 조회 시 있음
+		// 2. SNS 로그인 정보로 탈퇴확인
 		if (userInfo.custStat === 'SECEDE_CUST') {
 			mcxDialog.alert("탈퇴 회원 입니다.");
 			return;
 		}
+		// 3. SNS 로그인 정보로 휴면확인
 		if (userInfo.custStat === 'DORMANT_CUST') {
 			mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
 				sureBtnText: "확인",
@@ -274,19 +276,28 @@
 					cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
 				}
 			});
+			return;
 		}
-		if (userInfo.custStat === 'FAIL_CUST') {
-			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
+		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+		}
+		// 5. YES24 첫 로그인 시도 시 정보동의 페이지 이동
+		if (userInfo.custStat === 'NEED_AGREE_CUST') {
+			cfnConsentUseInfo(userInfo.custNm);
 			return;
 		}
-		if (userInfo.custStat === 'NEW_CUST') { // 회원가입
+		// 6. SNS 정보로 가입 성공시 가입완료 페이지 이동
+		if (userInfo.custStat === 'NEW_CUST') {
 			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
+			return;
 		}
-
-		if (userInfo.custStat === 'NEED_AGREE_CUST') { // YES24 로그인 시 동의화면 필요
-			cfnConsentUseInfo(userInfo.custNm);
+		// 7.SNS 정보로 가입 실패시 안내 창 알림
+		if (userInfo.custStat === 'FAIL_CUST') {
+			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+			return;
 		}
-
+		// 8. SNS 로그인 연동 성공 및 기존 SNS 연동된 회원 로그인 시도
 		if (userInfo.custStat === 'SUCC_CUST') {
 			let params = {};
 			params.snsType = userInfo.snsType;

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

@@ -160,19 +160,19 @@
 				</button>
 			</li>
 			<li>
-				<button type="button" id="" class="quick_btn02" data-tab="quick02">
+				<button type="button" id="quick02" class="quick_btn02" data-tab="quick02">
 					<img src="/images/pc/ico_qk_cart.png" alt="쇼핑백"/>
-					<span class="count">2</span>
+					<span class="count"></span>
 				</button>
 			</li>
 			<li>
-				<button type="button" id="" class="quick_btn03" data-tab="quick03">
+				<button type="button" id="quick03" class="quick_btn03" data-tab="quick03">
 					<img src="/images/pc/ico_qk_like.png" alt="위시리스트"/>
 					<span class="count">100</span>
 				</button>
 			</li>
 			<li>
-				<button type="button" id="" class="quick_btn04" data-tab="quick04">
+				<button type="button" id="quick04" class="quick_btn04" data-tab="quick04">
 					<img src="/images/pc/ico_qk_coupon.png" alt="쿠폰"/>
 					<span class="count">100</span>
 				</button>
@@ -443,10 +443,10 @@
 			</div>
 			<div class="wishlist quick_con quick03"> <!-- 퀵메뉴_위시리스트 -->
 				<div class="quick_head"> 
-					<h3><a href="">위시리스트</a></h3>
+					<h3><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_WISHLIST);">위시리스트</a></h3>
 				</div>
-				<div class="quick_body"> <!-- 최근 본 상품 없을 시 nodata 클래스 추가 --> <!-- 비로그인 시 need_login 클래스 추가 -->
-					<div class="product_count"><span class='c_primary'>50</span>개의 상품</div>
+				<div class="quick_body" id="quickMenuWishList"> <!-- 최근 본 상품 없을 시 nodata 클래스 추가 --> <!-- 비로그인 시 need_login 클래스 추가 -->
+					<div class="product_count"><span class='c_primary' id="quickMenuWishListCount">50</span>개의 상품</div>
 					<div class="itemsGrp">
 						<div class="item_prod">
 							<div class="item_state">
@@ -461,73 +461,7 @@
 									<button type="button" class="btn btn_sm cart_btn on"><span>쇼핑백 담기</span></button>
 								</div>
 							</div>
-						</div>
-						<div class="item_prod">
-							<div class="item_state">
-								<div class="shape"><span>곧 품절돼요!</span></div>
-								<a href="#none" class=" itemLink">
-									<div class="itemPic">
-										<img class="vLHTC pd_img" src="/images/pc/thumb/prod2.jpg" alt="이미지설명"/>
-										<button type="button" class="itemLike active">관심상품 추가</button>
-									</div>
-								</a>
-								<div class="hover_con">
-									<button type="button" class="btn btn_sm cart_btn on"><span>쇼핑백 담기</span></button>
-								</div>
-							</div>
-						</div>
-						<div class="item_prod">
-							<div class="item_state">
-								<a href="#none" class=" itemLink">
-									<div class="itemPic">
-										<img class="vLHTC pd_img" src="/images/pc/thumb/prod1.jpg" alt="이미지설명"/>
-										<button type="button" class="itemLike active">관심상품 추가</button>
-									</div>
-								</a>
-								<div class="hover_con">
-									<button type="button" class="btn btn_sm cart_btn on"><span>쇼핑백 담기</span></button>
-								</div>
-							</div>
-						</div>
-						<div class="item_prod">
-							<div class="item_state">
-								<a href="#none" class=" itemLink">
-									<div class="itemPic">
-										<img class="vLHTC pd_img" src="/images/pc/thumb/prod2.jpg" alt="이미지설명"/>
-										<button type="button" class="itemLike active">관심상품 추가</button>
-									</div>
-								</a>
-								<div class="hover_con">
-									<button type="button" class="btn btn_sm cart_btn on"><span>쇼핑백 담기</span></button>
-								</div>
-							</div>
-						</div>
-						<div class="item_prod">
-							<div class="item_state">
-								<a href="#none" class=" itemLink">
-									<div class="itemPic">
-										<img class="vLHTC pd_img" src="/images/pc/thumb/prod2.jpg" alt="이미지설명"/>
-										<button type="button" class="itemLike active">관심상품 추가</button>
-									</div>
-								</a>
-								<div class="hover_con">
-									<button type="button" class="btn btn_sm cart_btn on"><span>쇼핑백 담기</span></button>
-								</div>
-							</div>
-						</div>
-						<div class="item_prod">
-							<div class="item_state">
-								<a href="#none" class=" itemLink">
-									<div class="itemPic">
-										<img class="vLHTC pd_img" src="/images/pc/thumb/prod1.jpg" alt="이미지설명"/>
-										<button type="button" class="itemLike active">관심상품 추가</button>
-									</div>
-								</a>
-								<div class="hover_con">
-									<button type="button" class="btn btn_sm cart_btn on"><span>쇼핑백 담기</span></button>
-								</div>
-							</div>
-						</div>
+						</div>	
 						<div class="item_prod">
 							<div class="item_state">
 								<a href="#none" class=" itemLink">
@@ -985,6 +919,77 @@
 // 	});
 	}
 	
+	// 위시리스트
+	let fnGetWishList = function() {
+		if (!cfCheckLogin()) {
+			$('#quickMenuWishList').addClass('need_login');
+			$('#quickMenuWishList').html('');
+			tag='<div class="login_con">';
+			tag+='<div>';
+			tag+='		<p>로그인 후 이용 가능한 서비스입니다.</p>';
+			tag+='		<button type="button" class="btn btn_sm" onclick="cfnGoToPage(_PAGE_LOGIN)"><span>로그인</span></button>';
+			tag+='	</div>';
+			tag+='</div>';
+			
+			$('#quickMenuWishList').html(tag);
+			return false;
+		}
+		
+		$.getJSON('/goods/wish/list'
+				, function(result, status) {
+					if (status == 'success') {
+						$('#quickMenuWishList').html('');
+						$('#quick03').find('span').html(result.length);
+						$('#quickMenuWishListCount').html(result.length);
+						
+						if (result.length > 0) {
+							let tag = '<div class="product_count"><span class="c_primary" id="quickMenuWishListCount">'+result.length+'</span>개의 상품</div>\n';
+							tag += '	<div class="itemsGrp">\n';
+							
+							$.each(result, function (idx, item) {
+								tag += '	<div class="item_prod">';	
+								tag += '		<div class="item_state">';	
+								if (item.stockQty>0 && item.stockQty<=5) {
+									tag += '			<div class="shape"><span>곧 품절돼요!</span></div>';
+								}
+								if (item.stockQty<=0) {
+									tag += '			<div class="shape"><span>품절</span></div>';
+								}
+								tag += '			<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" onclick="fnWishDelete(this);">관심상품 추가</button>';
+								tag += '			<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\', \'\', \'\', \'\');" class=" itemLink">';	
+								tag += '				<div class="itemPic">';		
+								tag += '					<img class="vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '" alt="이미지설명"/>';		
+								tag += '				</div>';	
+								tag += '			</a>';	
+								tag += '			<div class="hover_con">';
+								if (item.stockQty>0) {
+									tag += '				<button type="button" class="btn btn_sm cart_btn on"><span>쇼핑백 담기</span></button>';
+								}
+								tag += '			</div>';	    
+								tag += '		</div>';	    
+								tag += '	</div>	';		
+								tag += '	<div class="no_item">';	    
+								tag += '		최근 본 상품이 없습니다.';	    
+								tag += '	</div>';	    
+								
+							});
+							
+							tag += '	</div>\n';
+							
+							$('#quickMenuWishList').html(tag);
+						} else {
+							$('#quickMenuWishList').addClass('nodata');
+						}
+					}
+			});
+	}
+	
+	// 위시리스트 해제
+	let fnWishDelete = function(obj) {
+		cfnPutWishList(obj);
+		fnGetWishList();
+	}
+	
 	// 팝업
 	let fnGetPopup = function(){
 		let data = {viewPage : [[${viewPage}]]
@@ -1097,6 +1102,9 @@
 		// 최근본상품 조회
 		fnGetRecentlyGoods();
 		
+		// 위시리스트
+		fnGetWishList();
+		
 		// 팝업조회
 		fnGetPopup();
 		

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

@@ -57,61 +57,68 @@
 	});
 
 	var fnPeristalsisCallback = function (userInfo) {
+		// 1. CI 정보로 사용자가 없어서 회원가입 프로세스 처리 중 이메일, 휴대전화 중복
 		if (userInfo.custStat === 'DUP_PHONE_CUST') {
 			mcxDialog.alert("이미 사용 중인 휴대전화번호 입니다.");
+			$.modal.close();
 			return;
 		}
 		if (userInfo.custStat === 'DUP_EMAIL_CUST') {
 			mcxDialog.alert("이미 사용 중인 이메일 입니다.");
-			return;
-		}
-		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
 			$.modal.close();
+			return;
 		}
-		// Ci이 조회 시 있음
+		// 2. SNS 로그인 정보로 탈퇴확인
 		if (userInfo.custStat === 'SECEDE_CUST') {
 			mcxDialog.alert("탈퇴 회원 입니다.");
+			$.modal.close();
 			return;
 		}
+		// 3. SNS 로그인 정보로 휴면확인
 		if (userInfo.custStat === 'DORMANT_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
-			$.modal.close();
+			mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+					$.modal.close();
+				}
+			});
+			return;
 		}
-		if (userInfo.custStat === 'FAIL_CUST') {
-			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
+		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+			$.modal.close();
 			return;
 		}
+		// 5. SNS 정보로 가입 성공시 가입완료 페이지 이동
 		if (userInfo.custStat === 'NEW_CUST') {
 			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
 			$.modal.close();
+			return;
 		}
-
-		if (userInfo.custStat === 'SUCC_CUST') {
-			cfnGoToPage(_PAGE_MAIN);
+		// 6.SNS 정보로 가입 실패시 안내 창 알림
+		if (userInfo.custStat === 'FAIL_CUST') {
+			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
 			$.modal.close();
+			return;
 		}
+		// 7. SNS 로그인 연동 성공 및 기존 SNS 연동된 회원 로그인 시도
 		if (userInfo.custStat === 'SUCC_CUST') {
 			let params = {};
 			params.snsType = userInfo.snsType;
 			params.snsId = [[${snsLoginPrefix}]] + userInfo.snsId;
 			$.post(_frontUrl + '/login'
 				, $.param(params)
-				, function(result) {
-					fnReloadAfterLogin(result);
-				}
+				, fnReloadAfterLogin
 				, "json");
 		}
 	}
 	var fnReloadAfterLogin = function(result) {
 		if (result.status === 'OK') {
 			document.location.href = result.returnUrl;
-		} else if (result.status === 'EMAIL_DUP') {
-
-		} else if(result.status === 'DORMANT_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
-		} else if(result.status === 'SECEDE_CUST') {
-
+		} else {
+			mcxDialog.alert("로그인 실패 하였습니다.<br> 고객센터에 문의 하시기 바랍니다.");
 		}
 		$.modal.close();
 	};

+ 12 - 11
src/main/webapp/WEB-INF/views/web/customer/JoinFormWeb.html

@@ -298,18 +298,19 @@
 		const $avlConPwd = $('#avlConPwd');
 		let password = $('#joinForm input[name=passwd]').val();
 		let confirmPassword = $('#joinForm input[name=confirmPassword]').val();
-		if (!gagajf.isNull(password) && !gagajf.isNull(confirmPassword)) {
-			if (fnValidationPwdSameConfirmPwd(password, confirmPassword)) {
-				$avlConPwd.hide();
-				$misPwd.show();
-				passwdCheck = false;
-			} else {
-				$misPwd.hide();
-				$avlConPwd.show();
-				passwdCheck = true;
-			}
-			fnPossibleJoin();
+		let sameConfirmPwd = fnValidationPwdSameConfirmPwd(password, confirmPassword);
+
+		if (sameConfirmPwd) {
+			$avlConPwd.show();
+			$misPwd.hide()
+			passwdCheck = true;
+		} else {
+			$misPwd.show();
+			$avlConPwd.hide();
+			passwdCheck = false;
 		}
+		fnPossibleJoin();
+
 	};
 
 	//	이메일 확인

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

@@ -52,7 +52,6 @@
 							</li>
 							<li>
 								<a href="javascript:void(0)" onclick="cfnLoginYes24();">
-<!--									<a href="javascript:void(0)" onclick="cfnConsentUseInfo('신주승')">-->
 									<i class="ico ico_snslogin yes24"></i>
 									<span>YES24</span>
 								</a>
@@ -67,10 +66,10 @@
 
 <script th:inline="javascript">
 	/*<![CDATA[*/
-	// SNS 로그인 콜백함수
 
+	// SNS 로그인 콜백함수(네이버, 카카오, YES24)
 	var fnSnsSigninCallback = function(userInfo) {
-		// Ci이 조회 시 없음
+		// 1. CI 정보로 사용자가 없어서 회원가입 프로세스 처리 중 이메일, 휴대전화 중복
 		if (userInfo.custStat === 'DUP_PHONE_CUST') {
 			mcxDialog.alert("이미 사용 중인 휴대전화번호 입니다.");
 			return;
@@ -79,51 +78,57 @@
 			mcxDialog.alert("이미 사용 중인 이메일 입니다.");
 			return;
 		}
-		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
-		}
-		// Ci이 조회 시 있음
+		// 2. SNS 로그인 정보로 탈퇴확인
 		if (userInfo.custStat === 'SECEDE_CUST') {
 			mcxDialog.alert("탈퇴 회원 입니다.");
 			return;
 		}
+		// 3. SNS 로그인 정보로 휴면확인
 		if (userInfo.custStat === 'DORMANT_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+			mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+				}
+			});
+			return;
 		}
-		if (userInfo.custStat === 'FAIL_CUST') {
-			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+		// 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
+		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+		}
+		// 5. YES24 첫 로그인 시도 시 정보동의 페이지 이동
+		if (userInfo.custStat === 'NEED_AGREE_CUST') {
+			cfnConsentUseInfo(userInfo.custNm);
 			return;
 		}
+		// 6. SNS 정보로 가입 성공시 가입완료 페이지 이동
 		if (userInfo.custStat === 'NEW_CUST') {
 			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
+			return;
 		}
-
+		// 7.SNS 정보로 가입 실패시 안내 창 알림
+		if (userInfo.custStat === 'FAIL_CUST') {
+			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+			return;
+		}
+		// 8. SNS 로그인 연동 성공 및 기존 SNS 연동된 회원 로그인 시도
 		if (userInfo.custStat === 'SUCC_CUST') {
 			let params = {};
 			params.snsType = userInfo.snsType;
 			params.snsId = [[${snsLoginPrefix}]] + userInfo.snsId;
 			$.post(_frontUrl + '/login'
 				, $.param(params)
-				, function(result) {
-					fnReloadAfterLogin(result);
-				}
+				,fnReloadAfterLogin
 				, "json");
 		}
-
 	};
 
-
 	var fnReloadAfterLogin = function(result) {
 		if (result.status === 'OK') {
 			document.location.href = result.returnUrl;
-		} else if (result.status === 'EMAIL_DUP') {
-
-		} else if(result.status === 'DORMANT_CUST') {
-			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
-		} else if(result.status === 'SECEDE_CUST') {
-
 		} else {
-			//cfnGoToPage(_PAGE_CUSTOMER_JOIN_CERTIFY_SNS);
+			mcxDialog.alert("로그인 실패 하였습니다.<br> 고객센터에 문의 하시기 바랍니다.");
 		}
 	};
 

+ 6 - 5
src/main/webapp/WEB-INF/views/web/customer/PasswordChangeFormWeb.html

@@ -186,15 +186,16 @@
 		const $btnSavePassword = $('#btnSavePassword');
 		let password = $('#resetPasswordForm input[name=passwd]').val();
 		let confirmPassword = $('#resetPasswordForm input[name=confirmPassword]').val();
+		let sameConfirmPwd = fnValidationPwdSameConfirmPwd(password, confirmPassword);
 
-		if (fnValidationPwdSameConfirmPwd(password, confirmPassword)) {
-			$avlConPwd.hide();
-			$misPwd.show();
-			$btnSavePassword.attr('disabled', true);
-		} else {
+		if (sameConfirmPwd) {
 			$misPwd.hide();
 			$avlConPwd.show();
 			$btnSavePassword.attr('disabled', false);
+		} else {
+			$avlConPwd.hide();
+			$misPwd.show();
+			$btnSavePassword.attr('disabled', true);
 		}
 
 	};

+ 0 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCouponDetailPopWeb.html → src/main/webapp/WEB-INF/views/web/mypage/MypageCouponDetailFormWeb.html


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

@@ -64,7 +64,7 @@
 											<li>
 												<!-- 쿠폰사용 기한 -->
 												<div
-													th:class="${CouponData.userYn == 'coupon' ? '' : 'coupon disabled'}">
+													th:class="${CouponData.userYn == 'Y' ? 'coupon' : 'coupon disable'}">
 													<div>
 														<p class="cp_name" th:text="${CouponData.cpnNm}"></p>
 														<p class="cp_cont">

+ 13 - 18
src/main/webapp/WEB-INF/views/web/mypage/MypageCustConfirmFormWeb.html

@@ -44,29 +44,24 @@
 									<col width="*">
 								</colgroup>
 								<tbody>
-									<tr th:if="${snsType ==''}">
-										<th>아이디</th>
-										<td>
-											<div class="form_field">
-												<div class="input_wrap">
-													<input type="text" id="custId" name="custId" class="form_control" th:value="${custId}" readonly="readonly"/>
-												</div>
-											</div>
-										</td>
-									</tr>
-									<tr th:unless="${snsType ==''}">
+									<tr>
 										<th>아이디</th>
 										<td>
 											<div class="form_field">
 												<div class="input_wrap">
-													<th:block th:if="${snsType == 'NV'}">
-														<span>네이버 간편가입회원</span>
-													</th:block>
-													<th:block th:if="${snsType == 'KK'}">
-														<span>카카오 간편가입회원</span>
+													<th:block th:if="${snsType == ''}">
+														<input type="text" id="custId" name="custId" class="form_control" th:value="${custId}" readonly="readonly"/>
 													</th:block>
-													<th:block th:if="${snsType == 'YS'}">
-														<span>YES24 간편가입회원</span>
+													<th:block th:unless="${snsType == ''}">
+														<th:block th:if="${snsType == 'NV'}">
+															<span>네이버 간편가입회원</span>
+														</th:block>
+														<th:block th:if="${snsType == 'KK'}">
+															<span>카카오 간편가입회원</span>
+														</th:block>
+														<th:block th:if="${snsType == 'YS'}">
+															<span>YES24 간편가입회원</span>
+														</th:block>
 													</th:block>
 												</div>
 											</div>

+ 7 - 9
src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html

@@ -89,7 +89,7 @@
 												<span>비밀번호</span>
 											</th>
 											<td>
-												<button type="button" class="btn btn_primary_line" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_CHANGE_TEMP);">
+												<button type="button" class="btn btn_primary_line" onclick="cfnPasswordModify();">
 													<span>변경하기</span>
 												</button>
 											</td>
@@ -380,8 +380,6 @@
 		let marketingModifyYn = 'N';
 		let accountModifyYn = 'N';
 		let emailModifyYn = 'N';
-		let smsAgreeYn;
-		let emailAgreeYn;
 
 		if (gagajf.isNull(custModiFy.email)) {
 			mcxDialog.alertC('이메일 주소를 입력해주세요.',{
@@ -392,7 +390,7 @@
 			});
 		}
 
-		if (orgCustInfo.email != custModiFy.email) {
+		if (orgCustInfo.email !== custModiFy.email) {
 			emailModifyYn = 'Y';
 		}
 
@@ -402,11 +400,11 @@
 		custModiFy.bankCd = $('.combo .select').find('input[name=bankCd]').val();
 
 		// 은행코드가 바꼈는지
-		if (orgAccountInfo.bankCd != custModiFy.bankCd) {
+		if (orgAccountInfo.bankCd !== custModiFy.bankCd) {
 			accountModifyYn = 'Y';
 		}
 
-		if (orgAccountInfo.accountNo != custModiFy.accountNo) {
+		if (orgAccountInfo.accountNo !== custModiFy.accountNo) {
 			accountModifyYn = 'Y';
 		}
 
@@ -432,12 +430,12 @@
 		}
 
 		// SMS 수신여부
-		if (orgCustInfo.smsAgreeYn != custModiFy.smsAgreeYn) {
+		if (orgCustInfo.smsAgreeYn !== custModiFy.smsAgreeYn) {
 			marketingModifyYn = 'Y';
 		}
 
 		// 이메일 수신여부
-		if (orgCustInfo.emailAgreeYn != custModiFy.emailAgreeYn) {
+		if (orgCustInfo.emailAgreeYn !== custModiFy.emailAgreeYn) {
 			marketingModifyYn = 'Y';
 		}
 
@@ -465,7 +463,7 @@
 
 	// 은행계좌 유효성체크
 	var fnGetAccountValidation = function () {
-		let custModiFy =  $('#custModiFyForm').serializeObject();
+		let custModiFy = $('#custModiFyForm').serializeObject();
 
 		if (gagajf.isNull(custModiFy.bankCd) && !gagajf.isNull(custModiFy.accountNo)) {
 			mcxDialog.alertC('은행을 선택해주세요.',{

+ 264 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCustPwdModifyFormWeb.html

@@ -0,0 +1,264 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MypageCustPwdModifyFormWeb.html
+ * @desc    : 비밀번호 변경 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.01   jsshin       최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+		<h5 class="modal-title" id="pswordModifyLabel">비밀번호 변경</h5>
+	</div>
+	<div class="modal-body">
+		<div class="pop_cont">
+			<form id="pwdModifyForm" class="form_wrap form_full">
+				<input type="hidden" name="custId" th:value="${custId}"/>
+				<div class="form_field">
+					<label class="input_label">기존 비밀번호</label>
+					<div class="input_wrap">
+						<input type="password" class="form_control" id="orgPasswd" name="orgPasswd" placeholder="기존 비밀번호를 입력해주세요." minlength="8" maxlength="20" required="required" data-valid-name="기존 비밀번호" />
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label">신규 비밀번호</label>
+					<div class="input_wrap">
+						<input type="password" id="passwd" name="passwd" placeholder="신규 비밀번호를 입력해주세요.(8~20자 영문, 숫자, 특수문자 중 2가지 이상 조합)" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="신규 비밀번호"/>
+						<!-- case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
+						<div class="help_block">
+							<!-- 사용불가 비밀번호일경우 -->
+							<p>
+								<span id="firstFailed" class="c_gray">
+									<i class="ico ico_check gray"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)
+								</span>
+								<span id="secondFailed" class="c_gray">
+									<i class="ico ico_check gray"></i>4개이상 연속되거나 동일한 문자/숫자 제외
+								</span>
+								<span id="thirdFailed" class="c_gray">
+									<i class="ico ico_check gray"></i>아이디 제외
+								</span>
+							</p>
+							<!-- //사용불가 비밀번호일경우 -->
+							<!-- 사용가능한 비밀번호일경우 -->
+							<p id="avlPwd" class="hide">
+								<span class="c_black2">
+									<i class="ico ico_check black"></i>사용 가능한 비밀번호입니다
+								</span>
+							</p>
+							<!-- //사용가능한 비밀번호일경우 -->
+						</div>
+						<!-- //case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label">신규 비밀번호 확인</label>
+					<div class="input_wrap">
+						<input type="password" id="confirmPassword" name="confirmPassword" placeholder="신규 비밀번호를 다시 입력해주세요." class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="신규 비밀번호 확인"/>
+						<!-- case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
+						<div class="help_block">
+							<!-- 비밀번호확인 틀렸을경우 -->
+							<p id="misPwd" class="hide">
+								<span class="t_err">
+									새 비밀번호가 일치하지 않습니다.
+								</span>
+							</p>
+							<!-- //비밀번호확인 틀렸을경우 -->
+							<!-- 비밀번호 일치할경우 -->
+							<p id="avlConPwd" class=" hide">
+								<span class="c_black2">
+									<i class="ico ico_check black mr5"></i>새 비밀번호가 일치합니다.
+								</span>
+							</p>
+							<!-- //비밀번호 일치할경우 -->
+						</div>
+						<!-- //case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
+					</div>
+				</div>
+			</form>
+		</div>
+	</div>
+	<div class="modal-footer">
+		<div class="btn_group_block ui_row">
+			<div class="ui_col_6">
+				<button type="button" id="btnClose" class="btn btn_default btn_block"><span>취소</span></button>
+			</div>
+			<div class="ui_col_6">
+				<button type="button" id="btnSavePassword" class="btn btn_dark btn_block"><span>변경</span></button>
+			</div>
+		</div>
+	</div>
+</div>
+<script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let checkPwd;
+	let checkConfirmPwd;
+
+	$("#btnClose").on('click', function() {
+		$.modal.close();
+	});
+
+	// 신규 비밀번호 입력
+	$('#pwdModifyForm input[name=passwd]').on('focusout keyup keydown', function () {
+		fnCheckPassword();
+	});
+
+	// 신규 비밀번호 확인 입력
+	$('#pwdModifyForm input[name=confirmPassword]').on('focusout keyup keydown', function () {
+		fnCheckConfirmPassword();
+	});
+
+	// 비밀번호 확인
+	var fnCheckPassword = function () {
+		const $firstFailed = $('#firstFailed');
+		const $secondFailed = $('#secondFailed');
+		const $thirdFailed = $('#thirdFailed');
+		const $avlPwd = $('#avlPwd');
+		const red = 'c_red2';
+		const gray = 'c_gray';
+		let custId = $('#pwdModifyForm input[name=custId]').val();
+		let password = $('#pwdModifyForm input[name=passwd]').val();
+		let confirmPassword = $('#pwdModifyForm input[name=confirmPassword]').val();
+		let pwdCheck = true;
+
+		// 영문, 숫자, 특수문자 2종 이상 혼용 || 길이
+		if (fnValidtaionPwdMixedWord(password) || fnValidationPwdLength(password)) {
+			pwdCheck = false;
+			$firstFailed.removeClass(gray);
+			$firstFailed.addClass(red);
+		} else {
+			$firstFailed.removeClass(red);
+			$firstFailed.addClass(gray);
+		}
+
+		// 동일한 문자/숫자 4자이상 || 연속된 문자가 4자이상
+		if (fnValidationPwdSameWord(password) || fnValidtaionPwdCntnsWord(password)) {
+			pwdCheck = false;
+			$secondFailed.removeClass(gray);
+			$secondFailed.addClass(red);
+		} else {
+			$secondFailed.removeClass(red);
+			$secondFailed.addClass(gray);
+		}
+
+		// 아이디 포함
+		if (fnValidationPwdSameId(password, custId)) {
+			pwdCheck = false;
+			$thirdFailed.removeClass(gray);
+			$thirdFailed.addClass(red);
+		} else {
+			$thirdFailed.removeClass(red);
+			$thirdFailed.addClass(gray);
+		}
+
+		if (pwdCheck) {
+			$firstFailed.hide();
+			$secondFailed.hide();
+			$thirdFailed.hide();
+			$avlPwd.show();
+			checkPwd = true;
+		} else {
+			$firstFailed.show();
+			$secondFailed.show();
+			$thirdFailed.show();
+			$avlPwd.hide();
+			checkPwd = false;
+		}
+
+		if (!gagajf.isNull(confirmPassword)) {
+			fnCheckConfirmPassword();
+		}
+
+	};
+
+	// 비밀번호체크
+	var fnCheckConfirmPassword = function () {
+		const $misPwd = $('#misPwd');
+		const $avlConPwd = $('#avlConPwd');
+		const $btnSavePassword = $('#btnSavePassword');
+		let password = $('#pwdModifyForm input[name=passwd]').val();
+		let confirmPassword = $('#pwdModifyForm input[name=confirmPassword]').val();
+
+		let sameConfirmPwd = fnValidationPwdSameConfirmPwd(password, confirmPassword);
+
+		if (sameConfirmPwd) {
+			$avlConPwd.show();
+			$misPwd.hide();
+			checkConfirmPwd = true;
+			//$btnSavePassword.attr('disabled', false);
+		} else {
+			$misPwd.show();
+			$avlConPwd.hide();
+			checkConfirmPwd = false;
+			//$btnSavePassword.attr('disabled', true);
+		}
+
+	};
+
+	// 패스워드 저장
+	$('#btnSavePassword').on('click', function () {
+		let pwdModifyForm = $('#pwdModifyForm').serializeObject();
+
+		if (gagajf.isNull(pwdModifyForm.orgPasswd)) {
+			mcxDialog.alert('기존 비밀번호 입력해주세요.');
+			return;
+		}
+
+		if (gagajf.isNull(pwdModifyForm.passwd)) {
+			mcxDialog.alert('신규 비밀번호를 입력해주세요.');
+			return;
+		}
+
+		if (gagajf.isNull(pwdModifyForm.confirmPassword)) {
+			mcxDialog.alert('신규 비밀번호 확인을 입력해주세요.');
+			return;
+		}
+
+		if (!checkPwd) {
+			mcxDialog.alert('유효하지 않은 신규 비밀번호 입니다.');
+			return;
+		}
+
+		if (!checkConfirmPwd) {
+			mcxDialog.alert('유효하지 않은 신규 비밀번호 입니다.');
+			return;
+		}
+
+		if (pwdModifyForm.passwd !== pwdModifyForm.confirmPassword) {
+			mcxDialog.alert('신규 비밀번호가 일치하지 않습니다. 다시 확인해주세요.');
+			return;
+		}
+
+		fnCheckPassword();
+		fnCheckConfirmPassword();
+		let jsonData = JSON.stringify(pwdModifyForm);
+		gagajf.ajaxJsonSubmit('/mypage/password/change', jsonData, fnChangePasswordCallback);
+	});
+
+	var fnChangePasswordCallback = function (result) {
+		if (result.isSuccess) {
+			mcxDialog.alertC("비밀번호가 변경되었습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$.modal.close();
+				}
+			});
+		} else {
+			if (result.resultType === 'WRONG_PWD') {
+				mcxDialog.alert('기존 비밀번호가 일치하지 않습니다. 다시 확인해주세요.');
+			}
+		}
+	};
+
+	/*]]>*/
+</script>
+</html>

+ 9 - 12
src/main/webapp/WEB-INF/views/web/mypage/MypageCustSnsJoinInitPwdFormWeb.html

@@ -202,19 +202,16 @@
 		const $btnSavePassword = $('#btnSavePassword');
 		let password = $('#resetPasswordForm input[name=passwd]').val();
 		let confirmPassword = $('#resetPasswordForm input[name=confirmPassword]').val();
-		if (!gagajf.isNull(password) && !gagajf.isNull(confirmPassword)) {
-			if (fnValidationPwdSameConfirmPwd(password, confirmPassword)) {
-				$avlConPwd.hide();
-				$misPwd.show();
-				$btnSavePassword.attr('disabled', true);
-			} else {
-				$misPwd.hide();
-				$avlConPwd.show();
-				$btnSavePassword.attr('disabled', false);
-			}
+		let sameConfirmPwd = fnValidationPwdSameConfirmPwd(password, confirmPassword);
+		if (sameConfirmPwd) {
+			$misPwd.hide();
+			$avlConPwd.show();
+			$btnSavePassword.attr('disabled', false);
+		} else {
+			$avlConPwd.hide();
+			$misPwd.show();
+			$btnSavePassword.attr('disabled', true);
 		}
-
-
 	};
 
 	// 패스워드 저장

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

@@ -54,6 +54,8 @@
 
 
 <script th:inline="javascript">
+let month = [[${wishMonth}]];
+
 // 마이페이지 위시리스트 해제
 var wishlistDelete = function(obj) {
 	mcxDialog.confirm("위시리스트를 해제하시겠습니까?", {
@@ -68,16 +70,60 @@ var wishlistDelete = function(obj) {
 
 // 마이페이지 위시리스트 
 var ajaxWishList = function () {
-	 $.ajax({
-			type		: "GET",
-			url 		: '/mypage/wish/list',
-			dataType 	: 'html',
-			success 	: function(result) {
-				if (result != null) {
-					$("#wishList").html(result);
-				}
+	 $.getJSON('/mypage/wish/list', function(result, status) {
+		if (status == 'success') {
+			$('#wishList').html('');
+			html = '';
+			for (var i = 0; i < month.length; i++) {
+				html+='<div class="monthly_wish_wrap">';
+				html+='	<div class="date">';
+				html+='		<span>'+month[i].regDt+'</span>';
+				html+='	</div>';
+				html+='	<div class="itemsGrp">';
+				
+				$.each(result, function (idx, item) {
+					if (item.regDt == month[i].regDt) {
+						html+='		<div class="item_prod">';
+						html+='			<div class="item_state">';
+						html+='				<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" onclick="wishlistDelete(this)">관심상품 추가</button>';
+						html+='				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail('+item.goodsCd+')">';
+						html+='					<div class="itemPic">';
+						html+='						<img alt="" class=" vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">';
+						html+='					</div>';
+						html+='					<p class=" itemBrand">'+item.brandGroupNm+'</p>';
+						html+='					<div class=" itemName">'+item.goodsNm+'</div>';
+						html+='					<p class="itemPrice">'+item.currPrice.addComma();
+						if (item.currPrice != item.listPrice) {
+							html+='						<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
+						}
+						if (item.dcRate>0) {
+							html+='						<span class=" itemPercent">'+item.dcRate+'%</span>';
+						}
+						
+						html+='					</p>';
+						html+='					<div class="itemcolorchip">';
+						html+='						<span class="chip_color35" value="ABM">BEIGE</span>';
+						html+='						<span class="chip_color54" value="BDS">BLACK</span>';
+						html+='						<span class="chip_color40" value="YBR">WHITE</span>';
+						html+='					</div>';
+						html+='					 <p class="itemBadge">';
+						html+='						<span class="badge13">베스트 </span>';
+						html+='					</p>';
+						if (item.goodsTnm != null && item.goodsTnm != '') {
+							html+='					<div class="itemComment">'+item.goodsTnm+'</div>';
+						}
+						html+='				</a>';
+						html+='			</div>';
+						html+='		</div>';
+					}
+					
+				});
+				html+='	</div>';
+				html+='</div>';
+				$('#wishList').html(html);
 			}
-		});		
+		}
+	});
 }
 
 $(document).ready(function() {

+ 0 - 57
src/main/webapp/WEB-INF/views/web/mypage/MypageWishListWeb.html

@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org"
-	style="overflow-x: hidden !important;"
->
-<!--
- *******************************************************************************
- * @source  : CouponDetailPopWeb.html
- * @desc    : 쿠폰적용대상 리스트 Page
- *============================================================================
- * PastelMall
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.03.17   sowon     최초 작성
- *******************************************************************************
- -->
-<!-- 월별 관심상품 -->
-<th:block th:if="${wishMonth != null}" th:each="WishMonth, wishStat : ${wishMonth}">
-<div class="monthly_wish_wrap" th:with="frontUrl=${@environment.getProperty('domain.front')}, goodsView=${@environment.getProperty('upload.goods.view')}">
-	<div class="date">
-		<span th:text="${WishMonth.regDt}"></span>
-	</div>
-	<div class="itemsGrp">
-	   <th:block th:each="WishGoods, wishStat : ${wishGoods}">
-		<div class="item_prod">
-			<div class="item_state">
-				<button type="button" class="itemLike active" th:attr="goodsCd=${WishGoods.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''" onclick="wishlistDelete(this)">관심상품 추가</button>
-				<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${WishGoods.goodsCd}]])">
-					<div class="itemPic">
-						<img alt="" class=" vLHTC pd_img" th:src="${goodsView + '/' +WishGoods.sysImgNm}">
-					</div>
-					<p class=" itemBrand" th:text="${WishGoods.brandGroupNm}"></p>
-					<div class=" itemName" th:text="${WishGoods.goodsNm}"></div>
-					<p class="itemPrice">[[${#numbers.formatInteger(WishGoods.currPrice,3,'POINT') + '원'}]]
-						<span class="itemPrice_original"  th:if="${WishGoods.currPrice != WishGoods.listPrice}" th:text="${#numbers.formatInteger(WishGoods.listPrice,3,'POINT') + '원'}"></span>
-						<span class=" itemPercent" th:if="${WishGoods.dcRate > 0}" th:text="|${#numbers.formatDecimal(WishGoods.dcRate,0,0)}%|"></span>
-					</p>
-					<div class="itemcolorchip">
-						<span class="chip_color35" value="ABM">BEIGE</span>
-						<span class="chip_color54" value="BDS">BLACK</span>
-						<span class="chip_color40" value="YBR">WHITE</span>
-					</div>
-					 <p class="itemBadge">
-						<span class="badge13">베스트 </span>
-					</p>
-					<div class="itemComment" th:text="${WishGoods.goodsTnm}"></div>
-				</a>
-			</div>
-		</div>
-		</th:block>	
-	</div>
-</div>
-</th:block>
-<!-- //월별 관심상품 -->
-				

+ 82 - 0
src/main/webapp/WEB-INF/views/web/planning/PlanningCouponDetailFormWeb.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PlanningCouponDetailFormWeb.html
+ * @desc	: 기획전 쿠폰 사용안내 모달
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.01   sowon		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-body">
+			<div class="modal-header">
+				<h5 class="modal-title" id="couponInfoLabel" th:text="${couponDetailInfo.cpnNm}"></h5>
+			</div>
+			<div class="modal-body">
+				<div class="pop_cont">
+					<dl>
+						<div>
+							<dt>사용조건</dt>
+							<dd th:if="${couponDetailInfo.buyLimitAmt < 1}">
+								<span>제한없음</span>
+							</dd>
+							<dd th:unless="${couponDetailInfo.buyLimitAmt < 1}"> 
+								<span th:text="${#numbers.formatInteger(couponDetailInfo.buyLimitAmt,0,'COMMA')}"></span>원 이상 구매 시 최대 <span th:text="${#numbers.formatInteger(couponDetailInfo.maxDcAmt,0,'COMMA')}"></span>원 할인
+							</dd>
+						</div>
+						<div>
+							<dt>발급수량</dt>
+							<dd th:if="${couponDetailInfo.custPubLimitQty < 1}">
+								<span>제한없음</span>
+							</dd>
+							<dd th:unless="${couponDetailInfo.custPubLimitQty < 1}">
+								1인 최대<span th:text="${#numbers.formatInteger(couponDetailInfo.custPubLimitQty,0,'COMMA')}"></span>매
+							</dd>
+						</div>
+						<div>
+							<dt>유효기간</dt>
+							<dd>
+								<span th:text="${couponDetailInfo.availStdt}"></span>&nbsp;~&nbsp;<span  th:text="${couponDetailInfo.availEddt}"></span>
+							</dd>
+						</div>
+						<div>
+							<dt>브랜드</dt>
+							<th:block th:each="BrandData, BrandStat : ${cpnDtlRefvalBrandList}">
+                				<dd th:text="${BrandData.brandEnm == ''? '제한없음' :BrandData.brandEnm}"></dd>
+               				</th:block>
+						</div>
+						<div>
+							<dt>카테고리</dt>
+							<th:block th:each="CateData, CateStat : ${cpnDtlRefvalCateList}">
+                				<dd th:text="${CateData.cateNm} + ' '"></dd>
+               				</th:block>
+						</div>
+						<div>
+							<dt>젹용상품</dt>
+							<th:block th:each="GoodsData, GoodsStat : ${cpnDtlRefvalApplyGoodsList}">
+                				<dd th:text="${GoodsData.goodsNm} + ' '"></dd>
+               				</th:block>
+						</div>
+						<div>
+							<dt>제외상품</dt>
+							<th:block th:each="ExceptData, ExceptStat : ${cpnDtlRefvalExceptGoodsList}">
+                				<dd th:text="${ExceptData.goodsNm} + ' '"></dd>
+               				</th:block>
+						</div>
+					</dl>
+				</div>
+			</div>
+		</div>
+		<div class="modal-footer">
+			<p>본 쿠폰은 특정 상품&#47;행사에 적용되는 쿠폰이며,적용가능여부는 상품별 상이할 수 있습니다.</p>
+			<p>본 이벤트는 당사 사정에 따라 사전고지 없이 변경 또는 조기종료 될 수 있습니다.</p>
+		</div>
+	</div>
+</div>

+ 10 - 8
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -186,8 +186,9 @@
             </div>
             <!-- //다른 기획전 보기 -->
         </div>
-    </div>   
-<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true"></div>
+<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
+
+</div>
 <script th:inline="javascript">
 let review = [[${reviewInfo}]];
 let coupon = [[${couponInfo}]];
@@ -301,7 +302,7 @@ if(goods1 != null || goods1 != ''){
 			html += '<div class="cont_head">';
 			html += '	<div>';
 			html += '        <h4>';
-			if (template[i].linkUrl != null || template[i].linkUrl != '') { /* 링크 변경 예정 */
+			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+'</a>';
 			}else{
 				html += '        <a href="javascript:void(0)">'+template[i].title+'</a>';
@@ -366,7 +367,7 @@ if(goods2 != null || goods2 != ''){
 			html += '<div class="cont_head">';
 			html += '	<div>';
 			html += '        <h4>';
-				if (template[i].linkUrl != null || template[i].linkUrl != ' ' ||typeof template[i].linkUrl != 'undefined') { /* 링크 변경 예정 */
+				if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 					html+='            <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+'</a>';
 				}else{
 					html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
@@ -434,7 +435,7 @@ if(goods4 != null || goods4 != ''){
 			html += '<div class="cont_head">';
 			html += '<div>';
 			html += '        <h4>';
-			if (template[i].linkUrl != null || template[i].linkUrl != ' ' ||typeof template[i].linkUrl != 'undefined') { /* 링크 변경 예정 */
+			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				html+='            <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+'</a>';
 			}else{
 				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
@@ -550,11 +551,12 @@ if(coupon != null || coupon != ''){
 	html += '			<p>유의사항</p>';
 	html += '		</div>';
 	html += '		<div class="announce_list">';
-	html += '			<ul>';
+	html += coupon[0].note;
+/* 	html += '			<ul>';
 	html += '				<li>쿠폰 발급 기간 :'+ plan.dispStdt +'~'+ plan.dispEddt +'</li>';
 	html += '				<li>본 쿠폰은 해당 기획전 상품에만 적용 가능합니다.</li>';
 	html += '				<li>본 쿠폰은 해당 기획전 다운로드 버튼을 통해 발급받으실 수 있습니다.</li>';
-	html += '			</ul>';
+	html += '			</ul>'; */
 	html += '		</div>';
 	html += '	</div>';
 	html += '</div>';
@@ -567,7 +569,7 @@ if(coupon != null || coupon != ''){
 var useInfoCoupon = function (id) {
 	 $.ajax( {
 		type		: "GET",
-		url 		: '/mypage/coupon/detailPop?cpnId='+ id,
+		url 		: '/planning/coupon/detail?cpnId='+ id,
 		dataType 	: 'html',
 		success 	: function(result) {
 			if (result != null) {

+ 6 - 5
src/main/webapp/biz/customer.js

@@ -172,12 +172,13 @@ var fnValidationPwdSameId = function (password, custId) {
  * @since 2021. 02. 17
  */
 var fnValidationPwdSameConfirmPwd = function (password, confirmPassword) {
-	let result;
+	let result = false;
 
-	if (password != confirmPassword) {
-		result = true;
-	} else {
-		result = false;
+	if (!gagajf.isNull(password) && !gagajf.isNull(confirmPassword)) {
+		if (password === confirmPassword) {
+			result = true;
+		}
 	}
+
 	return result;
 };

+ 19 - 16
src/main/webapp/ux/pc/css/common.css

@@ -750,25 +750,28 @@ content: "〉";font-size: 12px;padding-left: 8px;
 .itemsGrp::after{content: "";display: table;clear: both;}
 
 /* row type */
-.itemsGrp.rowtype .item_prod {width: 49.43%; margin-bottom: 1.12%; height: 420px; border:1px solid #ddd; overflow: hidden;}
-.itemsGrp.rowtype .item_prod:nth-child(2n) {margin-right: 0;}
-.itemsGrp.rowtype .item_prod .itemBadge, .itemsGrp.rowtype .item_prod .itemcolorchip {display: none;}
-.itemsGrp.rowtype .item_prod .item_state {display: table; padding-left: 330px; padding-right: 50px; padding-bottom: 0; height: 420px; width: 100%;}
-.itemsGrp.rowtype .item_prod .itemLink {display: table-cell; position: static; vertical-align: middle;}
-.itemsGrp.rowtype .item_prod .itemLike {z-index: 99;}
+.itemsGrp.rowtype .item_prod {width:calc((100% - 20px)/2); margin-top:20px; margin-right:20px; height:420px; border:1px solid #ddd; overflow:hidden;}
+.itemsGrp.rowtype .item_prod:nth-child(2n) {margin-right:0;}
+.itemsGrp.rowtype .item_prod .itemBadge,
+.itemsGrp.rowtype .item_prod .itemcolorchip {display: none;}
+.itemsGrp.rowtype .item_prod .item_state {display:table; width:100%; padding:0;}
+.itemsGrp.rowtype .item_prod .itemLink {display:table-cell; position: relative;vertical-align: middle;width: 100%;height: 420px;padding-left: 330px;padding-right: 50px;}
+.itemsGrp.rowtype .item_prod .itemLike {left:240px; z-index:99;}
 .itemsGrp.rowtype .item_prod .itemPic {position: absolute; top: 0; left: 0; margin-bottom: 0; padding-top: 0; width: 280px; height: 420px;}
 .itemsGrp.rowtype .item_prod .itemPic .shape {z-index: 89;}
 .itemsGrp.rowtype .item_prod .itemPic::after {background: #f5f5f5; opacity:1; z-index: 87;}
 .itemsGrp.rowtype .item_prod .itemPic .pd_img {z-index: 88;}
-.itemsGrp.rowtype .item_state.soldout .itemPic:before {content:'SOLD OUT'; position: absolute; top: 50%; left: 50%; font-size: 20px; color:#fff; background: rgba(0,0,0,.5); width: 100%; height: 100%; transform:translate(-50%, -50%); line-height: 420px; z-index: 89; text-align: center;}
-.itemsGrp.rowtype .item_prod .itemBrand {margin:0px 6px 65px; font-size: 16px; font-weight: 300;}
-.itemsGrp.rowtype .item_prod .itemComment {position: absolute; left: 340px; top: 150px; font-size: 16px; font-weight: 300; margin:0;}
-.itemsGrp.rowtype .item_prod .itemName {margin:0px 6px 40px; font-size: 30px; font-weight: 200; line-height: 1.2; max-height:70px; height: 70px;}
-.itemsGrp.rowtype .item_prod .itemPrice {font-size: 30px; line-height: 1; font-weight: 500;}
+.itemsGrp.rowtype .item_state.soldout .itemPic:before {content:'SOLD OUT'; position:absolute; top:50%; left:50%; color:#fff; font-size:28px; font-weight:500; background:rgba(0,0,0,.7); width:100%; height:100%; transform:translate(-50%, -50%); line-height: 420px; z-index: 89; text-align:center;}
+.itemsGrp.rowtype .item_prod .itemBrand {margin:0px; font-size: 16px; font-weight: 300;}
+.itemsGrp.rowtype .item_prod .itemComment {position:relative; top:-80px; font-size: 16px; font-weight: 300; margin:0;}
+.itemsGrp.rowtype .item_prod .itemName {margin:10px 0px 60px; font-size:24px; font-weight: 200; line-height:34px; max-width:100%; max-height:68px; height:auto;}
+.itemsGrp.rowtype .item_prod .itemPrice {font-size: 30px; line-height: 1; font-weight:500; margin-left:0; margin-right:0;}
 .itemsGrp.rowtype .item_prod .itemPrice_original {font-size: 20px; font-weight: 200;}
-.itemsGrp.rowtype .item_prod .itemPercent {font-size: 42px; line-height: 0.8;}
-
-
+.itemsGrp.rowtype .item_prod .itemPercent {font-size: 42px; font-weight:300; line-height: 0.8;}
+.itemsGrp.rowtype .item_prod .shopBagBtn {margin-top:30px;}
+.itemsGrp.rowtype .item_prod .shopBagBtn .btn {width:178px; height:52px; border-color:#a7a7a7; color:#222; font-weight:300;}
+.itemsGrp.rowtype .item_prod .shopBagBtn .btn span {position:relative; padding-left:25px; line-height:1;}
+.itemsGrp.rowtype .item_prod .shopBagBtn .btn span::before {content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); width:15px; height:18px; background: url('/images/pc/ico_shopbag.png') no-repeat 50% 50%;}
 
 .item_prod {width: 20%;display: inline-block;font-size: 0px;vertical-align: top;color: rgb(31, 31, 31);position: relative;letter-spacing: -0.2px;}
 .item_state {position: relative; padding: 0px 10px 60px; box-sizing: border-box;}
@@ -949,7 +952,7 @@ select,
 }
 
 /*input */
-.help_block {display: block;margin-top: 5px;margin-bottom: 0px;width: 100%;text-indent: 10px;position: relative;}
+.help_block {display: block; position:relative; margin-top:5px; margin-bottom:0px; width:100%; text-indent:10px; font-size:14px;}
 .help_block p[class*="t_"] span {display:inline-block;}
 
 /* 체크박스 */
@@ -1249,7 +1252,7 @@ input[type="file"] {
 .quick_menu_group .area > div:first-child span:first-child a{margin-left:0}
 .quick_menu_group .area > div:first-child span:first-child a:after{display:none}
 .quick_menu_group .area > div:first-child span a:after{position:absolute;top:13px;left:0;width:1px;height:13px;background:#959596;content:''}
-.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}*/
+.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}
 
 
 

File diff suppressed because it is too large
+ 220 - 938
src/main/webapp/ux/pc/css/layout.css


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

@@ -28,7 +28,8 @@ const _PAGE_CUSTOMER_SECEDE_COMPLETE = _frontUrl + "/customer/secede/complete/fo
 const _PAGE_CUSTOMER_CERTIFICATION = _frontUrl + "/customer/certification/form"						// 고객 > 본인인증화면
 const _PAGE_USE_TERMS = _frontUrl + "/customer/use/terms/form";										// Footer > 이용약관
 const _PAGE_PRIVACY_POLICY = _frontUrl + "/customer/privacy/policy/form";							// Footer > 개인정보취급방침
-const _PAGE_CUSTOMER_CONSENT_USERINFO = _frontUrl + "/customer/consent/useinfo/layer";				// 정보 이용동의 : Yes24 로그인
+const _PAGE_CUSTOMER_CONSENT_USERINFO = _frontUrl + "/customer/consent/useinfo/form";				// 정보 이용동의 : Yes24 로그인
+
 
 //== 상품상세 ==/
 const _PAGE_GOODS_DETAIL = _frontUrl + "/goods/detail/form?goodsCd=";								// 상품 상세
@@ -66,6 +67,7 @@ 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/confirm/form";		// 마이페이지 > 내정보 관리 > 회원정보 확인
 const _PAGE_MYPAGE_CUSTOMER_MODIFY = _frontUrl + "/mypage/customer/modify/form";// 마이페이지 > 내정보 관리 > 회원정보 수정
+const _PAGE_PASSWORD_MODIFY = _frontUrl + "/mypage/password/modify/form";		// 마이페이지 > 비밀번호 변경
 const _PAGE_MYPAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";			// 마이페이지 > 회원탈퇴
 const _PAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";					// 마이페이지 > 위시리스트
 const _PAGE_WISHLIST_PUT = _frontUrl + "/mypage/wish/list/put";					// 위시리스트 담기
@@ -692,7 +694,7 @@ function cfGoodsReview(goodsCd) {
 /**
  * @type   : function
  * @access : public
- * @desc   : 딜구성상품상세 full 팝업
+ * @desc   : Yes24 정보이용동의 화면
  * @param  : custNm - 고객명
  * <pre>
  *		cfnConsentUseInfo(custNm);
@@ -700,12 +702,32 @@ function cfGoodsReview(goodsCd) {
  */
 function cfnConsentUseInfo(custNm) {
 	let str = '<div class="modal fade mbAgree_pop" id="layer_consent_useinfo" tabIndex="-1" role="dialog" aria-labelledby="mbAgreeLabel" aria-hidden="true"></div>';
-
+	let params = {}
+	params.custNm = custNm;
 	if ($('#layer_consent_useinfo').length == 0) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_CUSTOMER_CONSENT_USERINFO, 'layer_consent_useinfo');
+	cfOpenLayer(_PAGE_CUSTOMER_CONSENT_USERINFO, 'layer_consent_useinfo',params);
+}
+
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 패스워드 변경 팝업
+ * <pre>
+ *		cfnPasswordModify();
+ * </pre>
+ */
+function cfnPasswordModify() {
+	let str = '<div class="modal fade pswordModify_pop" id="pswordModifyPop" tabindex="-1" role="dialog" aria-labelledby="pswordModifyLabel" aria-hidden="true"></div>';
+
+	if ($('#pswordModifyPop').length == 0) {
+		$('body').append(str);
+	}
+
+	cfOpenLayer(_PAGE_PASSWORD_MODIFY, 'pswordModifyPop');
 }
 
 /**

Some files were not shown because too many files changed in this diff