Просмотр исходного кода

Merge branch 'develop' into eskim

Conflicts:
	src/main/webapp/ux/mo/css/layout_m.css
	src/main/webapp/ux/mo/css/style24_m.css
eskim 5 лет назад
Родитель
Сommit
88849b7376
45 измененных файлов с 1790 добавлено и 237 удалено
  1. 11 0
      src/main/java/com/style24/front/biz/dao/TsfCouponDao.java
  2. 9 0
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  3. 16 1
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  4. 6 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  5. 1 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  6. 11 0
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  7. 23 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  8. 77 14
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  9. 75 5
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  10. 1 0
      src/main/java/com/style24/persistence/domain/Cart.java
  11. 4 0
      src/main/java/com/style24/persistence/domain/Plan.java
  12. 2 1
      src/main/java/com/style24/persistence/domain/Review.java
  13. 2 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  14. 20 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  15. 29 7
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  16. 12 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  17. 57 22
      src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html
  18. 32 12
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  19. 19 8
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  20. 6 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  21. 1 1
      src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html
  22. 54 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCouponDetailFormMob.html
  23. 152 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCouponFormMob.html
  24. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html
  25. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  26. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html
  27. 75 52
      src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html
  28. 76 57
      src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html
  29. 580 0
      src/main/webapp/WEB-INF/views/mob/order/OrderGiftCompleteMob.html
  30. 11 14
      src/main/webapp/WEB-INF/views/mob/order/OrderGiftInfoMob.html
  31. 2 2
      src/main/webapp/WEB-INF/views/mob/order/OrderListInfoMob.html
  32. 334 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningEventAttendFormMob.html
  33. 2 2
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrAddPopMob.html
  34. 24 12
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  35. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  36. 5 5
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  37. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponDetailFormWeb.html
  38. 3 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponFormWeb.html
  39. 13 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  40. 13 1
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  41. 2 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  42. BIN
      src/main/webapp/images/mo/ico_check_coupon.png
  43. BIN
      src/main/webapp/images/mo/ico_check_point.png
  44. 3 0
      src/main/webapp/ux/mo/css/layout_m.css
  45. 21 1
      src/main/webapp/ux/mo/css/style24_m.css

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

@@ -4,6 +4,7 @@ import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.CustCoupon;
 import com.style24.persistence.domain.Goods;
 
 /**
@@ -146,6 +147,16 @@ public interface TsfCouponDao {
 	 */
 	Coupon getPlanCouponDetailInfo(Coupon coupon);
 	
+	/**
+	 * 출석체크 쿠폰  정보
+	 * @param coupon - 쿠폰정보
+	 * @return Coupon
+	 * @author sowon
+	 * @since 2021. 04. 15
+	 */
+	CustCoupon getAttendCouponInfo(CustCoupon coupon);
+	
+	
 	
 	
 }

+ 9 - 0
src/main/java/com/style24/front/biz/dao/TsfReviewDao.java

@@ -169,6 +169,15 @@ public interface TsfReviewDao {
 	 */
 	Review reviewDeleteConfirm(Review review);
 	
+	/**
+	 * 마이페이지 어드민댓글 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 15
+	 */
+	void reviewCustomerConfirm(Review review);
+	
 	
 	
 	

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

@@ -108,11 +108,12 @@ public class TsfCouponService {
 				cpn.setRegNo(param.getRegNo());
 				cpn.setUpdNo(param.getUpdNo());
 				updateGiveRandomCpnInfo(cpn);
+				cpn.setDownloadCnt(1);
 			}
 		} else {
 			// 다운로드 받을 수 있는 쿠폰이 존재하지 않음.
 			cpn = new Coupon();
-			cpn.setResult("해당 쿠폰은 존재하지 않습니다.");
+			cpn.setResult("할인코드가 일치하지 않습니다. 정확히 입력해주세요.");
 			return cpn;
 		}
 
@@ -619,6 +620,7 @@ public class TsfCouponService {
 	}
 	
 	/**
+
 	 * EP 쿠폰 다운 처리
 	 *
 	 * @param coupon
@@ -702,4 +704,17 @@ public class TsfCouponService {
 		return result;
 	}
 
+	 /* 출석체크 쿠폰  정보
+	 * @param coupon - 쿠폰정보
+	 * @return Coupon
+	 * @author sowon
+	 * @since 2021. 04. 15
+	 */
+	public CustCoupon getAttendCouponInfo(CustCoupon coupon) {
+		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
+		coupon.setFrontGb(TsfSession.getFrontGb());
+		return couponDao.getAttendCouponInfo(coupon);
+	}
+	
+
 }

+ 6 - 0
src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java

@@ -166,6 +166,7 @@ public class TsfOrderChangeService {
 		// 전체 및 마지막 취소여부 설정
 		String delvFeeCd = "";
 		String allCanYn = "Y";
+		String allLastCanYn = "Y";
 		List<String> delvFeeCdList = new ArrayList<>();
 		for (Order order : cnclRtnList) {
 			int index = ordDtlNoList.indexOf(order.getOrdDtlNo());
@@ -181,6 +182,10 @@ public class TsfOrderChangeService {
 			if ((index < 0 || cnclRtnReqQtyArr[index] != (ordQty - cnclRtnQty)) && !delvFeeCd.equals(order.getDelvFeeCd())) {
 				delvFeeCdList.add(order.getDelvFeeCd());
 				delvFeeCd = order.getDelvFeeCd();
+				
+				if ("Y".equals(allLastCanYn)) {
+					allLastCanYn = "N";
+				}
 			}
 		}
 
@@ -209,6 +214,7 @@ public class TsfOrderChangeService {
 		}
 		
 		result.setString("allCanYn", allCanYn);									// 전체 취소 여부
+		result.setString("allLastCanYn", allLastCanYn);							// 전체 마지막 취소 여부
 		result.setString("allCanYnBeforePayment", allCanYnBeforePayment);		// 무통장입금전 전체 취소 여부
 		result.set("cnclReqList", cnclReqList);									// 취소신청목록
 

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

@@ -526,6 +526,7 @@ public class TsfPlanningService {
 	 * @date 2021. 4. 14
 	 */
 	public Collection<Plan> getAttendBenefitList(Plan plan){
+		plan.setFrontGb(TsfSession.getFrontGb());
 		return planningDao.getAttendBenefitList(plan);
 	}
 

+ 11 - 0
src/main/java/com/style24/front/biz/service/TsfReviewService.java

@@ -239,6 +239,17 @@ public class TsfReviewService {
 		return reviewDao.reviewDeleteConfirm(review);
 	}
 	
+	/**
+	 * 마이페이지 어드민댓글 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 15
+	 */
+	public void reviewCustomerConfirm(Review review) {
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+		reviewDao.reviewCustomerConfirm(review);
+	}
 	
 	
 	

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

@@ -734,6 +734,7 @@ public class TsfMypageController extends TsfBaseController {
 		GagaMap refundPreInfo = orderChangeService.getRefundPreInfo(orderChange);
 		List<Order> cnclReqList = (List<Order>)refundPreInfo.get("cnclReqList");
 		String allCanYn = refundPreInfo.getString("allCanYn");
+		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
 		String allCanYnBeforePayment = refundPreInfo.getString("allCanYnBeforePayment");
 
 		// 3. 환불금액계산
@@ -751,15 +752,18 @@ public class TsfMypageController extends TsfBaseController {
 		result.set("bankCd", orderChange.getBankCd());				// 환불계좌은행코드
 
 		result.set("allCanYnBeforePayment", allCanYnBeforePayment);	// 무통장입금전 전체취소 여부
+		result.set("allCanYn", allCanYn);							// 전체취소 여부
+		result.set("allLastCanYn", allLastCanYn);					// 전체 마지막 취소 여부
 		result.set("isCustomer", orderChange.getIsCustomer());		// 변경사유 (고객, 회사)
 
 		// 5. 주문변경 회수지정보 추가
-		// result.set("chgerNm", orderChange.getChgerNm());			// 변경자명
+		// result.set("chgerNm", orderChange.getChgerNm());				// 변경자명
 		// result.set("chgerEmail", orderChange.getChgerEmail());		// 변경자이메일주소
 		// result.set("chgerPhnno", orderChange.getChgerPhnno());		// 변경자핸드폰번호
 		// result.set("chgerTelno", orderChange.getChgerTelno());		// 변경자전화번호
 
 		result.set("reqGbn", orderChange.getReqGbn());				// 신청구분
+		result.set("ipAddress", TsfSession.getIpAddress());			// IP주소
 
 		// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
 		coreOrderChangeService.cnclComplete(result, custNo);
@@ -1511,9 +1515,25 @@ public class TsfMypageController extends TsfBaseController {
 	public GagaMap mypageReviewDelete(@RequestBody Review review) throws Exception {
 		GagaMap result = new GagaMap();
 		reviewService.reviewDelete(review);
-
 		result.set("status", "200");
-
+		return result;
+	}
+	
+	/**
+	 * 마이페이지 어드민 댓글 확인
+	 *
+	 * @param review
+	 * @return 
+	 * @throws Exception
+	 * @author sowon
+	 * @since 2021. 04. 15
+	 */
+	@PostMapping("/review/customer/confirm")
+	@ResponseBody
+	public GagaMap mypageReviewCustomerConfirm(@RequestBody Review review) throws Exception {
+		GagaMap result = new GagaMap();
+		reviewService.reviewCustomerConfirm(review);
+		result.set("status", "200");
 		return result;
 	}
 

+ 77 - 14
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -157,7 +157,7 @@ public class TsfOrderController extends TsfBaseController {
 		}
 		
 		// 선물받기여부
-		String orderGiftYn = "N";
+		String giftPackYn = "N";
 		
 		// 1.3. 선물하기주문 체크 후 비 로그인 상태면 장바구니로 강제 이동
 		if (coreOrderService.getGiftOrderCheck(order) > 0) {
@@ -167,7 +167,7 @@ public class TsfOrderController extends TsfBaseController {
 				return mav;
 			}
 			// 선물받기여부
-			orderGiftYn = "Y";
+			giftPackYn = "Y";
 			
 			// 선물하기일때 PC 로 접근하면 
 			if ("P".equals(TsfSession.getFrontGb())) {
@@ -206,12 +206,12 @@ public class TsfOrderController extends TsfBaseController {
 		} 
 		
 		// 2.2 선물받기 Y 이면 총알배송 불가
-		if ("Y".equals(orderGiftYn)) {
+		if ("Y".equals(giftPackYn)) {
 			order.setShotDelvUseYn("N");
 		}
 		
 		order.setShotDelvYn(order.getShotDelvUseYn());
-		order.setOrderGiftYn(orderGiftYn);
+		order.setGiftPackYn(giftPackYn);
 
 		// 3. 장바구니상품시퀀스 상품목록조회
 		// 3.1 즉시할인, 다다익선 할인금액 정보 적용 상품 정보
@@ -263,7 +263,7 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("isLogin"				, TsfSession.isLogin());					// 로그인여부
 		
 		// 4.6 선물받기여부
-		mav.addObject("orderGiftYn"			, orderGiftYn);								// 선물받기여부
+		mav.addObject("giftPackYn"			, giftPackYn);								// 선물받기여부
 
 		mav.setViewName(super.getDeviceViewName("order/OrderForm"));
 		
@@ -510,6 +510,8 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("tmtbDcSumAmt"		, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
 		mav.addObject("prePntDcAmt"			, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
 		mav.addObject("savePntSumAmt"		, goodsDcAmtMap.get("savePntSumAmt"));		// 적립예정포인트합계
+		
+		mav.addObject("order"				, order);									// 파라미터
 		mav.setViewName(super.getDeviceViewName("order/OrderListInfo"));
 		
 		return mav;
@@ -730,6 +732,7 @@ public class TsfOrderController extends TsfBaseController {
 		log.info("order.getFreegiftSqArr()     ::: {}", order.getFreegiftSqArr());
 		log.info("order.getSexGb()             ::: {}", order.getSexGb());
 		log.info("order.getBirthYmd()          ::: {}", order.getBirthYmd());
+		log.info("order.getGiftMsg()           ::: {}", order.getGiftMsg());
 		
 		for(int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
 			log.info("order.getFreegiftGoodsArr()  ::: {}", order.getFreegiftGoodsArr()[i]);
@@ -821,31 +824,46 @@ public class TsfOrderController extends TsfBaseController {
 		
 		ModelAndView mav = new ModelAndView();
 		
-		// 1. 로그인체크 후 custNo 설정
+		// 1. 주문번호 체크
+		if (order.getOrdNo() == null) {
+			mav.setViewName("redirect:/");
+			return mav;
+		}
+		
+		// 2. 로그인체크 후 custNo 설정
 		if (TsfSession.isLogin()) {
 			order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
 		} else {
 			order.setCustNo(0);
 		}
 		
-		// 2. 결제완료정보조회
+		// 3. 결제완료정보조회
 		GagaMap resultMap = coreOrderService.getOrderCompleteInfo(order);
 		
-		// 2.1 본인회원인 경우 체크
+		// 3.1 본인회원인 경우 체크
 		Order orderInfo = (Order) resultMap.get("orderInfo");
 		if (orderInfo.getCustNo() != 0) {
 			if (TsfSession.isLogin()) {
 				if (!TsfSession.getInfo().getCustNo().equals(orderInfo.getCustNo())) {
-					mav.setViewName("redirect:/cart/list/form");
+					mav.setViewName("redirect:/");
 					return mav;
 				}
 			} else {
-				mav.setViewName("redirect:/cart/list/form");
+				mav.setViewName("redirect:/");
 				return mav;
 			}
 		}
 		
-		// 3. 화면전송변수설정
+		// 3.2 상품주문금액이 없는 경우 체크
+		int goodsSumAmt = (Integer) resultMap.get("goodsSumAmt");
+		if (goodsSumAmt < 1) {
+			mav.setViewName("redirect:/");
+			return mav;
+		}
+		
+		// TODO 주문정보 알림톡전송
+		
+		// 4. 화면전송변수설정
 		mav.addObject("orderInfo"			, resultMap.get("orderInfo"));			// 주문기본정보
 		mav.addObject("ordSumAmt"			, resultMap.get("ordSumAmt"));			// 주문금액합계
 		mav.addObject("dcSumAmt"			, resultMap.get("dcSumAmt"));			// 할인금액합계
@@ -863,15 +881,60 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("allianceDcAmt"		, resultMap.get("allianceDcAmt"));		// 제휴할인합계
 		mav.addObject("isLogin"				, TsfSession.isLogin());				// 로그인여부
 		mav.addObject("delvAddrSq"			, resultMap.get("delvAddrSq"));			// 배송지번호
+		mav.setViewName(super.getDeviceViewName("order/OrderComplete"));
 		
-		// TODO 주문정보 알림톡전송
+		return mav;
+	}
+	
+	/**
+	 * 선물받기완료페이지
+	 *
+	 * @param
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 04. 15
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/giftComplete")
+	public ModelAndView orderGiftComplete(Order order) {
 		
+		ModelAndView mav = new ModelAndView();
 		
+		// 0. 주문번호 체크
+		if (order.getOrdNo() == null) {
+			mav.setViewName("redirect:/");
+			return mav;
+		}
+		
+		// 2. 결제완료정보조회
+		GagaMap resultMap = coreOrderService.getOrderGiftCompleteInfo(order);
+		
+		// 4. 화면전송변수설정
+		mav.addObject("orderInfo"			, resultMap.get("orderInfo"));			// 주문기본정보
+		mav.addObject("orderList"			, resultMap.get("orderList"));			// 주문목록정보
+		mav.addObject("orderListCnt"		, resultMap.get("orderListCnt"));		// 주문목록갯수
+		mav.addObject("giftAddrInpYn"		, resultMap.get("giftAddrInpYn"));		// 선물받기배송지등록여부
+		mav.addObject("delvRegYn"			, resultMap.get("delvRegYn"));			// 배송지등록여부
+		
+		mav.setViewName(super.getDeviceViewName("order/OrderGiftComplete"));
 		
-		// TODO 주문정보조회
-		mav.setViewName(super.getDeviceViewName("order/OrderComplete"));
 		return mav;
 	}
+	
+	/**
+	 * 선물주문배송신청완료
+	 *
+	 * @param
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 04. 15
+	 */
+	@ResponseBody
+	@PostMapping(value = "/giftDelvComplete")
+	public int updateDeliveryAddr(@RequestBody Order order) {
+		int rtn = coreOrderService.updateOrderDetailGiftAddrInpYn(order);
+		return rtn;
+	}
 
 	/**
 	 * 총알배송 가능 지역 체크

+ 75 - 5
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -1,7 +1,12 @@
 package com.style24.front.biz.web;
 
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Collection;
+import java.util.Date;
 import java.util.Map;
 
 import com.style24.front.biz.service.TsfCustomerService;
@@ -29,14 +34,13 @@ import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.CustCoupon;
 import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.Customer;
-import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Poll;
 import com.style24.persistence.domain.Review;
-import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -229,6 +233,8 @@ public class TsfPlanningController extends TsfBaseController {
 			mav.addObject("planList", planningService.getPlanEventList(plan));
 			mav.addObject("listSize", planningService.getPlanEventList(plan).size());
 			mav.addObject("month", planningService.getAttendMonth(planInfo));
+			mav.addObject("benefitList", planningService.getAttendBenefitList(plan));
+			
 			if (TsfSession.isLogin()) {
 				mav.addObject("custAttendList",planningService.getCustAttendEntryList(plan));
 			}
@@ -603,7 +609,6 @@ public class TsfPlanningController extends TsfBaseController {
 			count = planningService.getAttendEntryCount(plan);
 			for (Plan tPlan : benefitList) {
 				if (tPlan.getBasDays() == count) {
-					System.out.println("여기들어오니?1");
 					// 지급 방식이 포인트일 경우
 					if (tPlan.getBenefitGb().equals("P")) {
 						Point point = new Point();
@@ -614,13 +619,72 @@ public class TsfPlanningController extends TsfBaseController {
 						point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
 						point.setGvPntAmt(pointAmt);
 						point.setRmPntAmt(pointAmt);
+						point.setPntAmt(pointAmt);
+						point.setOccurDtlDesc("출석체크이벤트");
 						point.setOccurGb("G069_37"); //출석체크 이벤트
+						Calendar cal = Calendar.getInstance();
+				        cal.setTime(new Date());
+				        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+				        int usableDay = tPlan.getPntUsableDay();
+				       cal.add(Calendar.DATE, +usableDay);
+				        point.setExpBeDt(df.format(cal.getTime()));
 						corePointService.saveCustomerPoint(point);
-						System.out.println("여기들어오니?2");
-						String msg =  "축하합니다." + pointAmt + "포인트가 지급 되었습니다!";
+						String msg =  "축하합니다. " + toNumFormat(pointAmt) + " 포인트가 지급 되었습니다!";
 						result.set("msg", msg);
 						break;
 					}
+					else if(tPlan.getBenefitGb().equals("C")) {
+						CustCoupon coupon = new CustCoupon();
+						coupon.setCpnId(tPlan.getCpnId());
+						coupon = couponService.getAttendCouponInfo(coupon);
+						coupon.setCustNo(TsfSession.getInfo().getCustNo());
+						coupon.setRegNo(TsfSession.getInfo().getCustNo());
+						coupon.setUpdNo(TsfSession.getInfo().getCustNo());
+						// 이거 공통코드 변경예정.. 밑에
+						coupon.setPubReason("G068_60");
+						coupon.setPubReasonDtl("이벤트출석체크");
+						coupon.setEndAlimSendYn("N");
+						coreCouponService.saveCouponIssue(coupon);
+						String msg =  "축하합니다. " + toNumFormat(coupon.getDcVal()) +coupon.getDcWay() + " 할인쿠폰이 지급 되었습니다!";
+						result.set("msg", msg);
+						break;
+					}
+					else if(tPlan.getBenefitGb().equals("A")) {
+						Point point = new Point();
+						int pointAmt = tPlan.getPntAmt();
+						point.setRegNo(TsfSession.getInfo().getCustNo());
+						point.setUpdNo(TsfSession.getInfo().getCustNo());
+						point.setCustNo(TsfSession.getInfo().getCustNo());
+						point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+						point.setGvPntAmt(pointAmt);
+						point.setRmPntAmt(pointAmt);
+						point.setPntAmt(pointAmt);
+						point.setOccurDtlDesc("출석체크이벤트");
+						point.setOccurGb("G069_37"); //출석체크 이벤트
+						Calendar cal = Calendar.getInstance();
+				        cal.setTime(new Date());
+				        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+				        int usableDay = tPlan.getPntUsableDay();
+				       cal.add(Calendar.DATE, +usableDay);
+				        point.setExpBeDt(df.format(cal.getTime()));
+						corePointService.saveCustomerPoint(point);
+						
+						CustCoupon coupon = new CustCoupon();
+						coupon.setCpnId(tPlan.getCpnId());
+						coupon = couponService.getAttendCouponInfo(coupon);
+						coupon.setCustNo(TsfSession.getInfo().getCustNo());
+						coupon.setRegNo(TsfSession.getInfo().getCustNo());
+						coupon.setUpdNo(TsfSession.getInfo().getCustNo());
+						// 이거 공통코드 변경예정.. 밑에
+						coupon.setPubReason("G068_60");
+						coupon.setPubReasonDtl("이벤트출석체크");
+						coupon.setEndAlimSendYn("N");
+						coreCouponService.saveCouponIssue(coupon);
+						String msg =  "축하합니다. " + toNumFormat(pointAmt) + " 포인트와 " + toNumFormat(coupon.getDcVal()) +coupon.getDcWay() + " 할인쿠폰이 지급 되었습니다!";
+						result.set("msg", msg);
+						
+						
+					}
 
 				}else {
 					result.set("msg", "출석체크 되었습니다.");
@@ -632,4 +696,10 @@ public class TsfPlanningController extends TsfBaseController {
 		result.set("custAttendList",planningService.getCustAttendEntryList(plan));
 		return result;
 	}
+	
+	// 컴마
+	 public static String toNumFormat(int num) {
+		  DecimalFormat df = new DecimalFormat("#,###");
+		  return df.format(num);
+	 }
 }

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

@@ -60,6 +60,7 @@ public class Cart extends TscBaseDomain {
 	private int qty;				// 구성 상품 기준 재고 수량
 	private int currPrice;			// 상품판매가
 	private int minOrdQty;			// 최소주문가능수량
+	private int maxOrdQty;			// 최대주문가능수량
 	private int addPrice;			// 상품 옵션가
 	private String goodsType;		// 상품 타입
 	private String compsGoodsCd;	// 세트 구성상품 코드

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

@@ -275,6 +275,10 @@ public class Plan extends TscBaseDomain {
 	private String benefitGb;
 	private int pntAmt;
 	private Integer cpnId;
+	private String cpnNm;
+	private String dcWay;
+	private int dcVal;
+	private int pntUsableDay;		//포인트사용가능일
 	
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiReplyOrgFile;			//댓글 이미지

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

@@ -90,7 +90,8 @@ public class Review extends TscBaseDomain {
 	private int count;				// 작성한 리뷰 카운트
 	private String siteCd;
 	private String reviewStat;		// 리뷰상태(수정or등록)
-	
+	private String rplCfmYn;		//관리자댓글확인여부(고객)
+	private String rplCfmDt;		//관리자댓글확인일시(고객)
 	private String payDt;
 	private String brandEnm;
 	private String optCd1;

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

@@ -869,6 +869,8 @@
 		     , G.GOODS_NM
 			 , BR.BRAND_ENM
 			 , BR.BRAND_KNM
+		     , G.MIN_ORD_QTY
+		     , CASE WHEN G.MAX_ORD_QTY > G.DAY_MAX_ORD_QTY THEN G.DAY_MAX_ORD_QTY ELSE G.MAX_ORD_QTY END AS MAX_ORD_QTY
 			 , CA.CART_SQ
 			 , CA.GOODS_QTY
 			 , G.SELF_GOODS_YN

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

@@ -1074,5 +1074,25 @@
 		                  AND    CC.REG_DT <![CDATA[<=]]> DATE_FORMAT(CONCAT(LAST_DAY(NOW()), ' 23:59:59'), '%Y%m%d%H%i%S')
 		                  )
 	</select>
+	
+	<select id="getAttendCouponInfo" parameterType="CustCoupon" resultType="CustCoupon">
+		/*TsfCoupon.getAttendCouponInfo*/
+		SELECT CP.CPN_ID
+		     , CP.END_ALIM_YN
+		     , CASE WHEN CP.DC_WAY = 'G240_10' THEN '원'
+            		ELSE '%'
+                                                         END             AS DC_WAY    /*할인방법*/
+		     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
+		            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
+		            WHEN #{frontGb} = 'A' THEN CP.DC_AVAL
+		            ELSE CP.DC_AVAL                                              END AS DC_VAL
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(NOW(), '%Y%m%d%H%i%S')
+		            ELSE DATE_FORMAT(CP.AVAIL_STDT, '%Y%m%d%H%i%S')              END AS AVAIL_STDT
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL CP.AVAIL_DAYS DAY), '%Y%m%d%H%i%S')
+		            ELSE  DATE_FORMAT(CP.AVAIL_EDDT, '%Y%m%d%H%i%S')             END AS AVAIL_EDDT
+		FROM  TB_COUPON CP
+		WHERE CP.CPN_ID = #{cpnId}
+		AND   CP.SITE_CD = #{siteCd}	
+	</select>
 
 </mapper>

+ 29 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1206,13 +1206,35 @@
 	
 	<select id="getAttendBenefitList" resultType="Plan" parameterType="Plan">
 		/* TsfPlanning.getAttendBenefitList */	
-		SELECT PLAN_SQ 
-		      ,BAS_DAYS 
-		      ,BENEFIT_GB 
-		      ,PNT_AMT 
-		      ,CPN_ID 
-		FROM TB_PLAN_ATTEND 
-		WHERE PLAN_SQ = #{planSq}	
+		SELECT  PA.PLAN_SQ 
+		      , PA.BENEFIT_GB
+		      , PA.BAS_DAYS 
+		      , PA.PNT_AMT 
+		      , PA.PNT_USABLE_DAY
+		      , C.CPN_ID                    /*쿠폰ID*/
+		      , C.CPN_NM                     /*쿠폰명*/
+		      , C.BUY_LIMIT_AMT              /*구매제한금액*/
+		      , C.MAX_DC_AMT                 /*최대할인금액*/
+		      , CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
+		             WHEN #{frontGb} = 'M' THEN C.DC_MVAL
+		             WHEN #{frontGb} = 'A' THEN C.DC_AVAL
+		        END             AS DC_VAL    /*할인값*/
+		      , CASE WHEN C.DC_WAY = 'G240_10' THEN '원'                                                                                             
+		             ELSE '%'
+		        END             AS DC_WAY    /*할인방법*/
+		      , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
+		                    ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
+		               END
+		              ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
+		                    ELSE CONCAT('최대 ',FORMAT(C.MAX_DC_AMT , 0),'원 할인')
+		               END)     AS USE_CONDITION  /*사용조건*/
+		      , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
+		             ELSE CONCAT('1인당 최대',C.CUST_PUB_LIMIT_QTY,'매')
+		        END             AS ISSUE_CONDITION /*발급수량*/
+		FROM TB_PLAN_ATTEND PA LEFT JOIN TB_COUPON C ON PA.CPN_ID = C.CPN_ID 
+		WHERE 1=1
+		-- AND C.CPN_STAT = 'G232_11' /*진행중인쿠폰*/
+		AND PA.PLAN_SQ = #{planSq}	
 	</select>
 	
 	<!-- 댓글 리스트  (수정필)-->

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

@@ -989,12 +989,14 @@
 	<select id="getAdminConfirmCount" parameterType="Review" resultType="Review">
 		/* TsfReivew.getAlreadyReviewCount */
 		SELECT COUNT(*) AS COUNT
-		     , R.REVIEW_SQ 
+		     , R.REVIEW_SQ
+		     , MAX(ADM_RPL_DT) 
 		FROM TB_REVIEW R
 		WHERE 1=1
 		 AND CUST_NO = #{custNo}
 		 AND DEL_YN = 'N'
-		 AND DISP_YN = 'Y' 
+		 AND DISP_YN = 'Y'
+		 AND RPL_CFM_YN ='N'
 		 AND ADM_RPL IS NOT NULL
 		ORDER BY  R.ADM_RPL_DT DESC, R.REVIEW_SQ LIMIT 1
 	</select>
@@ -1028,4 +1030,12 @@
 		  AND R.GOODS_CD = #{goodsCd}
 		  AND R.CUST_NO = #{custNo}
 	</select>
+	
+	<update id="reviewCustomerConfirm" parameterType="Review">
+		/* TsfReivew.reviewCustomerConfirm */	
+		UPDATE TB_REVIEW
+		SET RPL_CFM_YN = 'Y'
+		   ,RPL_CFM_DT = NOW()
+		WHERE CUST_NO = #{custNo}
+	</update>
 </mapper>

+ 57 - 22
src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html

@@ -55,7 +55,7 @@
 						<div class="opt_header">
 							<span class="title">컬러</span>
 							<th:block th:each="color, index : ${comp.cartColorList}">
-								<span class="info" th:if="${color.cartColorNm != null}" th:text="${color.cartColorNm}"></span>
+								<span class="info color" th:if="${color.cartColorNm != null}" th:text="${color.cartColorNm}"></span>
 							</th:block>
 						</div>
 
@@ -70,14 +70,14 @@
 					<div class="opt_size">
 						<div class="opt_header">
 							<span class="title">사이즈</span>
-							<span class="info">
-									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
-										<th:block th:each="size, index : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
-											<span th:text="${size.optCd2}"></span>
-											<span th:if="${size.addPrice > 0}">(+<em th:text="${#numbers.formatInteger(size.addPrice, 1, 'COMMA')}"></em>)원</span>
-										</th:block>
+							<span class="info color">
+								<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+									<th:block th:each="size, index : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
+										<span th:text="${size.optCd2}"></span>
+										<span th:if="${size.addPrice > 0}">(+<em th:text="${#numbers.formatInteger(size.addPrice, 1, 'COMMA')}"></em>)원</span>
 									</th:block>
-								</span>
+								</th:block>
+							</span>
 						</div>
 						<div class="form_field selfGoodsSize">
 							<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
@@ -109,9 +109,14 @@
 						</div>
 						<div class="opt_header">
 							<span class="title">옵션1</span>
-							<span class="info" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
-							<div class="form_field">
-								<input id="od_item_off" type="checkbox"><label for="od_item_off"><span>품절 제외</span></label>
+							<span class="info color" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
+							<div class="check_excluding form_field">
+								<div>
+									<input th:id="|od_item_off_${comp.goodsCd}|" type="checkbox" class="soldoutRemove" th:value="${comp.goodsCd}" onClick='getGuidance(event, this)'><label th:for="|od_item_off_${comp.goodsCd}|"> <span>품절제외</span> </label>
+								</div>
+								<div class="guidance">
+									<p><span class="soldoutCnt">aa</span>개 품절 옵션이 제외되었습니다</p>
+								</div>
 							</div>
 						</div>
 						<form class="form_wrap">
@@ -132,7 +137,9 @@
 					<div class="opt_select">
 						<div class="opt_header">
 							<span class="title">옵션2</span>
-							<span class="color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
+							<!--<span th:text="${size.optCd2}"></span>
+							<span th:if="${size.addPrice > 0}">(+<em th:text="${#numbers.formatInteger(size.addPrice, 1, 'COMMA')}"></em>)원</span>-->
+							<span class="info color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
 						</div>
 						<form class="form_wrap">
 							<div class="form_field">
@@ -142,7 +149,7 @@
 											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:addPrice="${size.addPrice}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 												</th:block>
 											</ul>
 										</div>
@@ -166,9 +173,14 @@
 					<div class="opt_select">
 						<div class="opt_header">
 							<span class="title">옵션1</span>
-							<span class="info" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
-							<div class="form_field">
-								<input id="od_item_off" type="checkbox"><label for="od_item_off"><span>품절 제외</span></label>
+							<span class="info color" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
+							<div class="check_excluding form_field">
+								<div>
+									<input th:id="|od_item_off_${comp.goodsCd}|" class="soldoutRemove" type="checkbox" th:value="${comp.goodsCd}" onClick='getGuidance(event, this)'><label th:for="|od_item_off_${comp.goodsCd}|"><span>품절 제외</span></label>
+								</div>
+								<div class="guidance">
+									<p><span class="soldoutCnt">aa</span>개 품절 옵션이 제외되었습니다</p>
+								</div>
 							</div>
 						</div>
 						<form class="form_wrap">
@@ -189,7 +201,7 @@
 					<div class="opt_select">
 						<div class="opt_header">
 							<span class="title">옵션2</span>
-							<span class="info" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
+							<span class="info color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
 						</div>
 						<form class="form_wrap">
 							<div class="form_field">
@@ -199,7 +211,7 @@
 											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:addPrice="${size.addPrice}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 												</th:block>
 											</ul>
 										</div>
@@ -212,12 +224,14 @@
 			</th:block>
 
 			<div class="opt_count">
+				<input type="hidden" class="minOrdQty" th:value="${cart.minOrdQty}" />
+				<input type="hidden" class="maxOrdQty" th:value="${cart.maxOrdQty}" />
 				<div class="opt_header">
 					<span class="title">수량</span>
 				</div>
 				<div class="number_count">
 					<span class="minus"><em class="sr-only">감소</em></span>
-					<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}"/>
+					<input type="text" name="goodsQty" th:max="${cart.maxOrdQty}" style='ime-mode:disabled' th:value="${cart.goodsQty}"/>
 					<span class="plus"><em class="sr-only">추가</em></span>
 				</div>
 			</div>
@@ -240,6 +254,7 @@
 		let goodsCd = $(this).parent().attr("data");
 		let optCd1 = $(this).attr("data");
 		let colorNo = $(this).attr("colorNo");
+
 		let firstSize = "";
 		if(optCd1 != $(".option1_" + goodsCd).val()) {
 			let firstOptCd = $("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " li:first").attr("optcd");
@@ -259,9 +274,18 @@
 
 	// 세트상품, 입점업체 상품 사이즈 변경시
 	$(".sizeList > .combo > .list li").on("click", function() {
-		$(this).parent().parent().parent().parent().parent().parent().find(".opt_header .text").text($(this).text());
+		let size = $(this).text();
+		let addPrice = $(this).attr("addPrice");
+
 		$("#cartOptionModal .option_" + $(this).parent().attr("data")).val($(this).attr("optcd"));
-		$("#cartOptionModal .option2_" + $(this).parent().attr("data")).val($(this).text());
+		$("#cartOptionModal .option2_" + $(this).parent().attr("data")).val(size);
+
+		let sizeTextHtml = "<span>" + size + "</span>";
+		if(addPrice > 0) {
+			sizeTextHtml += "<span>(+<em>" + Number(addPrice).toLocaleString() + "</em>)원</span>";
+		}
+
+		$(this).parent().parent().parent().parent().parent().parent().find(".opt_header .info").html(sizeTextHtml);
 	});
 
 	/* 옵션변경 > 수량조절 */
@@ -348,7 +372,7 @@
 			},
 			success : function(result) {
 				mcxDialog.alert(result.message);
-				$(".closeCartOptionModal").trigger("click");
+				$("#optModifyPop01 .cartOptionModal .popup_close").trigger("click");
 				$("body").css("overflow", "");
 				if(result.status == "SUCCESS") {
 					let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
@@ -357,6 +381,17 @@
 			}
 		});
 	}
+
+	function getGuidance(event, obj)  {
+		if(event.target.checked){
+			$(".size_" + $(obj).val()).find("li[aria-disabled=true]").hide();
+			$(obj).parent().parent().find(".soldoutCnt").text($(".size_" + $(obj).val()).find("li[aria-disabled=true]").length);
+			$(obj).parent().parent().find(".guidance").addClass("ontoast");
+			setTimeout(function(){$(obj).parent().parent().find(".guidance").removeClass("ontoast");}, 5000);
+		} else {
+			$(".size_" + $(obj).val()).find("li[aria-disabled=true]").show();
+		}
+	}
 </script>
 <!-- //옵션변경 팝업 -->
 </html>

+ 32 - 12
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -34,7 +34,7 @@
 							<th class="sr-only">총알배송</th>
 							<td>
 								<div class="form_field">
-									<input type="radio" id="chk-1" name="shotDelvUseYn" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y')}">
+									<input type="radio" id="chk-1" name="shotDelvUseYn" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y') and order.shotCartList.size() > 0}">
 									<label for="chk-1">
 										<span th:text="|${order.shotDelvDt}일 24:00 까지 도착|"></span>
 										<span class="icon_tag">
@@ -48,7 +48,7 @@
 							<th class="sr-only">총알배송 안함</th>
 							<td>
 								<div class="form_field">
-									<input id="chk-2" type="radio" name="shotDelvUseYn" value="N" th:checked="${order.shotDelvUseYn == null or !order.shotDelvUseYn.equals('Y')}">
+									<input id="chk-2" type="radio" name="shotDelvUseYn" value="N" th:checked="${order.shotDelvUseYn == null or !order.shotDelvUseYn.equals('Y') or order.shotCartList.size() < 1}">
 									<label for="chk-2">
 										<span>총알배송 안함</span>
 									</label>
@@ -166,14 +166,17 @@
 						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}">
 							<span th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></span>
 						</div>
-						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}">
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}">
+							<span th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></span>
+						</div>
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}">
 							<span th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></span>
 						</div>
 					</div>
 				</div>
 				<!-- 총알 배송 -->
 				<!-- 일반 배송 -->
-				<div class="goods_area goods_basic wmsList" th:if="${order.wmsCartList != null and order.wmsCartList.size() > 0}">
+				<div class="goods_area goods_basic wmsList" th:if="${order.wmsCartList != null and order.wmsCartList.size() > 0}" th:style="${order.shotCartList.size() < 1 ? 'padding-top:unset;border-top:unset;' : ''}">
 					<h3>일반배송</h3>
 					<div class="goods_section wmsCartInfo cartInfo" th:each="cart, status : ${order.wmsCartList}">
 						<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
@@ -264,7 +267,10 @@
 						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}">
 							<span th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></span>
 						</div>
-						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}">
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}">
+							<span th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></span>
+						</div>
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}">
 							<span th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></span>
 						</div>
 					</div>
@@ -382,7 +388,10 @@
 						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}">
 							<span th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></span>
 						</div>
-						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}">
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}">
+							<span th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></span>
+						</div>
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}">
 							<span th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></span>
 						</div>
 
@@ -682,7 +691,7 @@
 			$(document).ready(function() {
 				setLoginInfo();
 
-				if([[${!order.shotCanYn.equals('Y')}]]) {
+				if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
 					//$(".shotDelvSelect").hide();
 				}
 
@@ -700,6 +709,12 @@
 			function serialCpnApply() {
 				let cartArr = [];
 				let currPrices = [];
+
+				if(!$("#serialCpnNm").val()) {
+					mcxDialog.alert("할인코드를 입력해주세요.");
+					return false;
+				}
+
 				$("#cartListForm input[name=cartSqArr]:checked").each(function(index, item) {
 					cartArr.push($(this).val());
 					currPrices.push($(this).parents(".cartInfo").find("input[name=tmtbDcAmt]").val());
@@ -784,6 +799,10 @@
 
 							$(".cartCpnInfoModal .availDt").html('<span>' + cpnInfo.availStdtTime + "</span> ~ <span>" + cpnInfo.availEddtTime + "</span>");
 							$(".cartCpnInfoModal .refVal").html(refValComment);
+
+							if(cpnInfo.downloadCnt > 0) {
+								mcxDialog.alert("성공적으로 등록되었습니다.");
+							}
 						} else {
 							mcxDialog.alert(result.serialCpnInfo.result);
 						}
@@ -999,7 +1018,7 @@
 							// 혹시 else일 경우
 							fnOrderValidation(list, listIndex, cartSqArr, allYn);
 						}
-					} else if (info.ordCanQty < info.goodsQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
+					} else if (info.ordCanQty < info.goodsQty && info.ordCanQty != info.maxOrdQty) {
 						let message;
 						if ("G056_S" == info.goodsType) {
 							message = info.goodsNm + " 의" + info.itemNm + "/" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
@@ -1007,13 +1026,13 @@
 							message = info.goodsNm + " 의" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
 						}
 
-						fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
-					} else if (info.goodsQty < info.minOrdQty) {
+						fnUpdateConfirmChangeQty(message, info.cartSq, info.ordCanQty, list, listIndex, cartSqArr, allYn);
+					} else if (info.goodsQty < info.minOrdQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
 						let message = info.goodsNm + " 의 최소 구매수량은 " + info.minOrdQty + "개입니다.\n최소 구매 수량으로 주문하시겠습니까?";
 						fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
 					} else if (info.goodsQty > info.maxOrdQty) {
 						let message = info.goodsNm + " 의 최대 구매 사능 수량은 " + info.maxOrdQty + "개입니다. 최대 구매 가능한 수량으로 주문하시겠습니까?";
-						fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
+						fnUpdateConfirmChangeQty(message, info.cartSq, info.maxOrdQty, list, listIndex, cartSqArr, allYn);
 					} else if (listIndex < list.length) {
 						fnOrderValidation(list, listIndex, cartSqArr, allYn);
 					} else {
@@ -1232,7 +1251,8 @@
 						return false;
 					}
 
-					confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
+					// confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
+					confirmMessage = "선택한 상품을 삭제하시겠습니까?";
 				} else {
 					cartArr.push(gbn);
 					deleteCartAjax(cartArr, menu);

+ 19 - 8
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -158,20 +158,34 @@
 		$(document).on('click','.optModifyPop01 .number_count .minus',function(e){
 			var $input = $(this).parent().find('input');
 			var count = parseInt($input.val()) - 1;
-			count = count < 1 ? 1 : count;
+			var minOrdQty = $(this).parent().parent().find(".minOrdQty").val();
+
+			count = count < minOrdQty ? minOrdQty : count;
 			$input.val(count);
 			$input.change();
-			//수량1개 이하 감소버튼 비활성화
-			if ($input.val() == 1) {
+			//주문 최소 수량 이하 감소버튼 비활성화
+			if ($input.val() == minOrdQty) {
 				$('.optModifyPop01 .number_count .minus').addClass('min_val');
 			}
+
+			$('.optModifyPop01 .number_count .plus').removeClass('min_val');
+
 			return false;
 		}).on('click','.optModifyPop01 .number_count .plus',function(e){
 			var $input = $(this).parent().find('input');
-			$input.val(parseInt($input.val()) + 1);
+			var count = parseInt($input.val()) + 1;
+			var maxOrdQty = $(this).parent().parent().find(".maxOrdQty").val();
+
+			count = count > maxOrdQty ? maxOrdQty : count;
+			$input.val(count);
 			$input.change();
-			//수량2개 이상부터 감소버튼 활성화
+			//주문 최대 수량 이상 증가버튼 비활성화
+			if ($input.val() == maxOrdQty) {
+				$('.optModifyPop01 .number_count .plus').addClass('min_val');
+			}
+
 			$('.optModifyPop01 .number_count .minus').removeClass('min_val');
+
 			return false;
 		}).on('keyup','.optModifyPop01 .number_count input[type=text]',function(e){
 			//텍스트, 0 입력금지
@@ -226,9 +240,6 @@
 						let img = color[i].cartImgList[j];
 						if(optCd1 == img.colorCd && img.defaultImgYn == "Y") {
 							imgHtml += '<img src="' + _uploadGoodsUrl + "/" + img.sysImgNm + '?RS=100" onerror="' + _uximgUrl + '/images/pc/thumb/bg_item_none.png" alt="' + img.sysImgNm + '" />\n';
-							/*imgHtml += "<li>\n<span class='thumb'>\n";
-							imgHtml += "<img src='" + _uploadGoodsUrl + "/" + img.sysImgNm + "' onerror='this.src='" + [[${@environment.getProperty('domain.uximage')}]] + "/images/pc/thumb/bg_item_none.png' alt='" + img.sysImgNm + "' />\n";
-							imgHtml += "</span>\n</li>\n";*/
 						}
 					}
 				}

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

@@ -104,6 +104,12 @@
 			</div>
 		</div>
 	</div>
+	
+	<!-- 2021.04.15 스크립트오류때문에 임시 소스 -->
+	<div class="btPopAuto"> 
+		<div class="btPopAuto_head"></div>
+		<div class="btPopAuto_body"></div>
+	</div>
 
 <script th:inline="javascript">
 /*<![CDATA[*/

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

@@ -119,5 +119,5 @@
 		/* \\Eiengine Script (Visit) */
 	</script>
 </head>
-
+	
 </html>

+ 54 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageCouponDetailFormMob.html

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

+ 152 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageCouponFormMob.html

@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageCouponFormMob.html
+ * @desc    : 마이페이지 > 쿠폰 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.15   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+	<th:block layout:fragment="content">
+			<main role="" id="" class="container my">
+			<section class="content my_coupon">
+				<div class="inner">
+					<div class="highlight_area">
+						<div class="have_amount">
+							<div class="total_amount">
+								보유 쿠폰&nbsp;<span><em th:text="${#numbers.formatInteger(couponInfo.allCouponCnt,0,'COMMA')}"></em>장</span>
+							</div>
+						</div>
+					</div>
+					<div class="have_amount">
+						<dl>
+							<div>
+								<dt>7일 이내 소멸 예정<span class="tag primary_line">D-<em>7</em></span></dt>
+								<dd><em th:text="${#numbers.formatInteger(couponInfo.expireCouponCnt,0,'COMMA')}"></em>장</dd>
+							</div>
+						</dl>
+					</div>
+				</div>
+
+				<div class="inner">
+					<div class="content_area">
+						<!-- 데이터 있을 시 -->
+						<div class="list_box">
+							<div class="coupon_list">
+								<ul>
+								<th:block th:if="${couponList != null and !couponList.empty}" th:each="CouponData, CouponStat : ${couponList}">
+									<li>
+										<!-- 쿠폰사용 완료 -->
+										<div th:class="${CouponData.expireYn == 'N' ? 'coupon' : 'coupon disable'}">
+											<div>
+												<p class="cp_name" th:text="${CouponData.cpnNm}">					
+												</p>
+												<p class="cp_cont">
+												<th:block th:if="${CouponData.dcWay == '%'}">
+													<span><em th:text="${CouponData.dcVal}"></em>%</span>
+												</th:block>
+												<th:block th:unless="${CouponData.dcWay == '%'}">
+													<span><em th:text="${CouponData.dcVal}"></em>원</span>
+												</th:block>
+												</p>
+												<p class="cp_condition">
+													[[${CouponData.useCondition}]]
+													<span><em class="tag primary_line" th:text="${CouponData.cpnCnt}+' 장 보유'"></em></span>
+												</p>
+											</div>
+											<th:block th:if="${CouponData.expireYn == 'N'}">
+													<p class="cp_date">
+														<span th:text="${CouponData.availStdt}"></span>&nbsp;~&nbsp;<span th:text="${CouponData.availEddt}"></span>
+													</p>
+												</th:block>
+												<th:block th:unless="${CouponData.expireYn == 'N'}">
+													<p class="cp_date">사용완료</p>
+											</th:block>
+										</div>
+										<!-- 쿠폰사용 완료 -->
+										<button type="button" class="btn_underline" id="btn_cpinfo_pop" th:onclick="useInfoCoupon([[${CouponData.cpnId}]])">
+											<span>사용안내</span>
+										</button>
+									</li>																																							
+								</ul>
+							</div>
+						</div>
+						<!-- //데이터 있을 시 -->
+						<!-- 데이터 없을 시 -->
+						<div class="nodata" style="display: none;">
+							<div class="txt_box">
+								<p>
+									보유한 쿠폰이 없습니다.<br>
+								</p>
+							</div>
+						</div>
+						<!-- 데이터 없을 시 -->	
+					</div>
+				</div>
+
+			</section>
+		</main>
+		<!-- 쿠폰사용안내 팝업 -->
+	<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+                <!-- 쿠폰사용안내 팝업 내용 -->      
+			</div>
+		</div>
+		<a href="#close-modal" rel="modal:close" id="couponInfoPop_close" class="close-modal">Close</a>
+	</div>
+	<!-- //쿠폰사용안내 팝업 -->
+	
+	<script th:inline="javascript">
+	
+	let couponList = ([[${couponList}]]);	
+
+	// 사용안내 모달
+	var useInfoCoupon = function (id) {
+		var data = {cpnId : id};
+		var jsonData = JSON.stringify(data);
+		
+		 $.ajax( {
+			type		: "POST",
+			url 		: '/mypage/coupon/detailPop',
+			data		: jsonData,
+			contentType: 'application/json',
+			dataType 	: 'html',
+			success 	: function(result) {
+				if (result != null) {
+					$("#couponInfoPop").html(result);
+					$("#couponInfoPop").modal("show");
+				}
+			}
+		});
+		
+		return false; 
+	}
+
+	if(couponList.length>0){
+		$(".nodata").hide();
+	}else{
+		$(".nodata").show();
+	}
+
+    $(document).ready(function() {
+		if(couponList.length>0){
+			$(".nodata").hide();
+		}else{
+			$(".nodata").show();
+		}		
+	});
+	
+	</script>
+	</th:block>
+</body>
+</html>

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

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="mob/common/layout/DefaultLayoutMob">
+	layout:decorator="mob/common/layout/MypageLayoutMob">
 <!--
  *******************************************************************************
  * @source  : MypageGiftcardFormMob.html

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

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="mob/common/layout/DefaultLayoutMob">
+	layout:decorator="mob/common/layout/MypageLayoutMob">
 <!--
  *******************************************************************************
  * @source  : MypageWishListFormMob.html

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

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="mob/common/layout/DefaultLayoutMob">
+	layout:decorator="mob/common/layout/MypageLayoutMob">
 <!--
  *******************************************************************************
  * @source  : MypageWishListFormMob.html

+ 75 - 52
src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html

@@ -116,62 +116,76 @@
 			</div>
 			<!-- 폴딩리스트 -->
 		</div>
-		<div class="inner wide">
-			<!-- 폴딩리스트 -->
-			<div class="ui_row">
-				<div class="foldGroup shipfold">
-					<ul>
-						<li class="fold_delivery">
-							<div class="fold_head">
-								<a href="javascript:void(0)">
-									<div>
-										<div class="fold_tit">
-											<span>배송지 정보</span>
-										</div>
-										<div class="data">
-											<span class="recipAddr" th:text="${orderInfo.recipBaseAddr} + '    ' + ${orderInfo.recipDtlAddr}"></span>
+		<th:block th:if="${orderInfo.giftPackYn} == 'N'">
+			<div class="inner wide">
+				<!-- 폴딩리스트 -->
+				<div class="ui_row">
+					<div class="foldGroup shipfold">
+						<ul>
+							<li class="fold_delivery">
+								<div class="fold_head">
+									<a href="javascript:void(0)">
+										<div>
+											<div class="fold_tit">
+												<span>배송지 정보</span>
+											</div>
+											<div class="data">
+												<span class="recipAddr" th:text="${orderInfo.recipBaseAddr} + '    ' + ${orderInfo.recipDtlAddr}"></span>
+											</div>
 										</div>
+									</a>
+								</div>
+								<div class="fold_cont">
+									<!-- //배송지 정보 변경불가 -->
+									<div class="ship_info">
+										<button type="button" id="btn_adrsChange_pop" class="btn_popup"><span>배송지 변경</span></button>
+										<dl>
+											<div class="company">
+												<dt><span class="sr-only">배송지명</span></dt>
+												<dd id="recipNm" th:text="${orderInfo.recipNm}"></dd>
+											</div>
+											<div class="phone">
+												<dt><span class="sr-only">휴대폰 번호</span></dt>
+												<dd id="recipPhnno" th:text="${orderInfo.recipPhnno}"></dd>
+											</div>
+											<div class="addr">
+												<dt><span class="sr-only">배송주소</span></dt>
+												<dd id="recipAddr" th:text="${orderInfo.recipBaseAddr} + '    ' + ${orderInfo.recipDtlAddr}"></dd>
+											</div>
+											<div class="ship_request">
+												<dt>배송요청 사항</dt>
+												<dd id="delvMemo" th:text="${orderInfo.delvMemo}"></dd>
+											</div>
+										</dl>
 									</div>
-								</a>
-							</div>
-							<div class="fold_cont">
-								<!-- //배송지 정보 변경불가 -->
-								<div class="ship_info">
-									<button type="button" id="btn_adrsChange_pop" class="btn_popup"><span>배송지 변경</span></button>
-									<dl>
-										<div class="company">
-											<dt><span class="sr-only">배송지명</span></dt>
-											<dd id="recipNm" th:text="${orderInfo.recipNm}">
-												<!-- 
-												<span class="icon_tag">
-													<em class="tag_stype1">기본 배송지</em>
-													<em class="tag_stype2">총알배송</em>
-												</span>
-												 -->
-											</dd>
-										</div>
-										<div class="phone">
-											<dt><span class="sr-only">휴대폰 번호</span></dt>
-											<dd id="recipPhnno" th:text="${orderInfo.recipPhnno}"></dd>
-										</div>
-										<div class="addr">
-											<dt><span class="sr-only">배송주소</span></dt>
-											<dd id="recipAddr" th:text="${orderInfo.recipBaseAddr} + '    ' + ${orderInfo.recipDtlAddr}"></dd>
-										</div>
-										<div class="ship_request">
-											<dt>배송요청 사항</dt>
-											<dd id="delvMemo" th:text="${orderInfo.delvMemo}"></dd>
-										</div>
-									</dl>
+									<!-- //배송지 정보 변경불가 -->
 								</div>
-								<!-- //배송지 정보 변경불가 -->
-							</div>
-						</li>
-					</ul>
+							</li>
+						</ul>
+					</div>
 				</div>
+				<!-- 폴딩리스트 -->
 			</div>
-			<!-- 폴딩리스트 -->
-		</div>
+		</th:block>
+		<th:block th:if="${orderInfo.giftPackYn} == 'Y'">
+			<div class="inner">
+				<!-- 폴딩리스트 -->
+				<div class="gift_wrap">
+					<h3>선물 받으실 분</h3>
+					<div class="gift_con">
+						<div class="gift_info">
+							<span th:text="${orderInfo.recipNm}"></span> / <span th:text="${orderInfo.recipPhnno}"></span>
+						</div>
+						<div class="message">
+							<p class="gift_tit">선물 메세지</p>
+							<div class="content">
+								<p th:text="${orderInfo.giftMsg}" id="giftMsg"></p>
+							</div> 
+						</div>
+					</div>
+				</div>
+			</div>
+		</th:block>
 		<div class="inner">
 			<div class="tbl_wrap pay_wrap">
 				<div class="tbl_tit"> 
@@ -280,7 +294,7 @@
 										<dt>적립예정 포인트</dt>
 										<dd>
 											<div>
-												<span th:text="${#numbers.formatInteger(savePntSumAmt, 1, 'COMMA')}">3000</span>P
+												<span th:text="${#numbers.formatInteger(savePntSumAmt, 1, 'COMMA')}"></span>P
 											</div>
 										</dd>
 									</div>
@@ -321,6 +335,15 @@
 var ordNo			= [[${orderInfo.ordNo}]]		// 배송목록
 var isLogin			= [[${isLogin}]];				// 로그인여부
 var delvAddrSq		= [[${delvAddrSq}]];			// 배송지번호
+var giftMsg			= [[${orderInfo.giftMsg}]];		// 선물메세지
+
+// item.questContent.replaceAll("\n", "</br>")
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 선물메시지
+	$("#giftMsg").html(giftMsg.replaceAll("\n", "</br>"));
+});
 
 // 2.1 회원 배송지변경 팝업열기
 $('#btn_adrsChange_pop').on("click", function(){

+ 76 - 57
src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html

@@ -44,7 +44,7 @@
 				<th>delvMemo</th>
 				<th>sexGb</th>
 				<th>birthYmd</th>
-				<th>orderGiftYn</th>
+				<th>giftPackYn</th>
 			</tr>
 			<tr style="height:30px;">
 				<td class="custNm"></td>
@@ -58,7 +58,7 @@
 				<td class="delvMemo"></td>
 				<td class="sexGb"></td>
 				<td class="birthYmd"></td>
-				<td class="orderGiftYn" th:text="${orderGiftYn}"></td>
+				<td class="giftPackYn" th:text="${giftPackYn}"></td>
 			</tr>
 		</tbody>
 	</table>
@@ -410,7 +410,7 @@ var foreignBuyYn		= [[${order.foreignBuyYn}]];	// 해외구매대행
 var foreignBuyYn		= [[${foreignBuyYn}]];			// 해외구매대행여부
 var orderMadeYn			= [[${orderMadeYn}]];			// 주문제작상품여부
 var isLogin				= [[${isLogin}]];				// 로그인여부
-var orderGiftYn			= [[${orderGiftYn}]];			// 선물받기여부
+var giftPackYn			= [[${giftPackYn}]];			// 선물받기여부
 
 var custCpnSq 			= 0;
 var cpnIndex			= 0;
@@ -462,7 +462,7 @@ $(document).ready( function() {
 		, "foreignBuyYn"	: foreignBuyYn
 		, "orderMadeYn"		: orderMadeYn
 		, "custDelvAddrSq"	: 0
-		, "orderGiftYn"		: "Y"
+		, "giftPackYn"		: "Y"
 	}
 	
 	jsonData = JSON.stringify(jsonObj);
@@ -511,7 +511,7 @@ var custemerInfoSet = function() {
 			}
 			
 			// 1.4 선물하기여부체크
-			if (orderGiftYn == "Y") {
+			if (giftPackYn == "Y") {
 				// 1.4.1 선물하기정보로드
 				orderGiftInfoSet(jsonObj, true);
 			} else {
@@ -579,6 +579,24 @@ var orderGiftInfoSet = function() {
 			$("#orderGiftInfo").css("display", "block");
 			$("#orderGiftInfo").html(result);
 			
+			// 직접입력 선택 버튼
+			$("#orderGiftInfo .gift_tab .fold_cont ul li").on("click", function(){
+				$(this).parent().find("li").removeClass("active");
+				$(this).addClass("active");
+				
+				$(this).parent().parent().find("input[name=recipNm]").val("");
+				$(this).parent().parent().find("input[name=recipPhnno]").val("");
+				
+				// 직접입력시 입력창 활성화
+				if ($(this).find("span").text() == "직접입력") {
+					$(this).parent().parent().find("input[name=recipNm]").attr("readOnly", false);
+					$(this).parent().parent().find("input[name=recipPhnno]").attr("readOnly", false);
+				} else {
+					$(this).parent().parent().find("input[name=recipNm]").attr("readOnly", true);
+					$(this).parent().parent().find("input[name=recipPhnno]").attr("readOnly", true);
+				}
+			});
+			
 			// 주문목록정보로드
 			orderListInfoSet(JSON.stringify(jsonObj), true);
 		}
@@ -773,6 +791,17 @@ var freegiftInfoSet = function() {
 					total_gift 		= 0;
 					total_deduct 	= 0;
 					
+					// 2021.04.14 사은품 사용 포인트가 보유포인트보다 작아야 한다.
+					var rmPntAmt 			= parseInt($("#orderForm input[name='rmPntAmt']").val());
+					var freegiftUsePnt 		= parseInt($("#orderAmtForm .freegiftUsePnt").text());
+					var usepoint			= parseInt($(this).attr("usepoint"));
+					rmPntAmt 				= rmPntAmt - freegiftUsePnt - usepoint;
+					
+					if (rmPntAmt > 0) {
+						mcxDialog.alert("보유포인트가 부족합니다.");
+						return false;
+					}
+					
 					$("#orderForm .freegiftRdo").each(function(){
 						// 라디오버튼 사은품 체크
 						if ($(this).is(":checked")) {
@@ -853,43 +882,38 @@ var paymentInfoSet = function() {
 					var goodsNm				= "";
 					var orgEntryNo 			= "";
 					var entryNo 			= "";
-					
-					// 주문데이타 생성
-					var orderData = {
-						"custNm"				: $("#orderAmtForm .custNm").text()
-						,"email"				: $("#orderAmtForm .email").text()
-						,"recipNm"				: $("#orderAmtForm .recipNm").text()
-						,"recipPhnno"			: $("#orderAmtForm .recipPhnno").text()
-						,"recipZipcode"			: $("#orderAmtForm .recipZipcode").text()
-						,"recipBaseAddr"		: $("#orderAmtForm .recipBaseAddr").text()
-						,"recipDtlAddr"			: $("#orderAmtForm .recipDtlAddr").text()
-						,"delvMemo"				: $("#orderAmtForm .delvMemo").text()
-						,"sexGb"				: $("#orderAmtForm .sexGb").text()
-						,"birthYmd"				: $("#orderAmtForm .birthYmd").text()
-						,"prePntDcAmtYn"		: prePntDcAmtYn
-						,"orderDetailList"		: orderDetailList
-						,"delvFeeCdList"		: delvFeeCdList
-						,"shotDelvYn"			: shotDelvYn
-						,"entryNo"				: entryNo
-						,"pgGb"					: pgGb
-						,"payMeans"				: payMeans // 네이버페이, 카카오페이
-						,"payAmt"				: $("#orderAmtForm .realOrdSumAmt").text()
-						,"ordNm"				: $("#orderAmtForm .custNm").text()
-						,"ordPhnno"				: $("#orderAmtForm .cellPhnno").text()
-						,"goodsNm"				: $("#orderAmtForm .goodsNm").eq(0).text()
-						,"ordGoodsQty"			: ordGoodsQty
-						,"freegiftValArr"		: $("#orderAmtForm .freegiftValArr").text().split(",")
-						,"freegiftSqArr"		: $("#orderAmtForm .freegiftSqArr").text().split(",")
-						,"freegiftGoodsArr"		: $("#orderAmtForm .freegiftGoodsArr").text().split(",")
-						,"freegiftUsePointArr"	: $("#orderAmtForm .freegiftUsePointArr").text().split(",")
-					};
+					var giftMsg				= "감사합니다.";
 					
 					// 선물받기일때 배송지주소 받지않음
-					if (orderGiftYn == "N") {
+					if (giftPackYn == "N") {
 						if ($("#orderAmtForm .recipZipcode").text() == "0000" || gagajf.isNull($("#orderAmtForm .recipZipcode").text())) {
-							mcxDialog.alert("배송지주소를를 입력해주세요.");
+							mcxDialog.alert("배송정보를 입력해주세요.");
+							return false;
+						}
+					} else {
+						if (gagajf.isNull($("#orderForm #orderGiftInfo input[name=recipNm]").val())) {
+							mcxDialog.alert("선물받을분 이름을 입력해주세요.");
+							$("#orderForm #orderGiftInfo input[name=recipNm]").focus();
+							
+							orderGiftInfoDispYn("Y");
 							return false;
 						}
+						if (gagajf.isNull($("#orderForm #orderGiftInfo input[name=recipPhnno]").val())) {
+							mcxDialog.alert("선물받을분 휴대폰번호를 입력해주세요.");
+							$("#orderForm #orderGiftInfo input[name=recipPhnno]").focus();
+							
+							orderGiftInfoDispYn("Y");
+							return false;
+						}
+						
+						$("#orderAmtForm .recipNm").text($("#orderForm #orderGiftInfo input[name=recipNm]").val());
+						$("#orderAmtForm .recipPhnno").text($("#orderForm #orderGiftInfo input[name=recipPhnno]").val());
+						
+						if (gagajf.isNull($("#orderForm #orderGiftInfo input[name=recipPhnno]").val())) {
+							giftMsg = "감사합니다.";
+						} else {
+							giftMsg = $("textarea#giftMsg").val();
+						}
 					}
 					
 					// TODO 개인통관번호 동의 체크시 통관번호 등록
@@ -1008,7 +1032,7 @@ var paymentInfoSet = function() {
 							,"itemQtyArr"		: $(this).parent().find(".itemQtyr").text().split(",")
 							,"goodsType"		: $(this).parent().find(".goodsType").text()
 							,"entryNo"			: entryNo
-							,"giftPackYn"		: orderGiftYn
+							,"giftPackYn"		: giftPackYn
 						}
 						
 						// 상품수
@@ -1058,6 +1082,7 @@ var paymentInfoSet = function() {
 						,"freegiftSqArr"		: $("#orderAmtForm .freegiftSqArr").text().split(",")
 						,"freegiftGoodsArr"		: $("#orderAmtForm .freegiftGoodsArr").text().split(",")
 						,"freegiftUsePointArr"	: $("#orderAmtForm .freegiftUsePointArr").text().split(",")
+						,"giftMsg"				: giftMsg
 					};
 					
 					$.ajax( {
@@ -1072,24 +1097,18 @@ var paymentInfoSet = function() {
 							gagajf.showProgressbar(true);
 						},
 						success 	: function(result) {
-							// 유효성체크 통과
-							if (result.message == "SUCCESS") {
-								// 결재정보로드
-								$("#order_info").html(result);
-								
-								var pgGb = $("#order_info input[name=pgGb]").val();
-								
-								if (pgGb == "NAVER") {
-									fnNaverPaymentReady();
-								} else if (pgGb == "KAKAO") {
-									fnKakaoPaymentReady();
-								} else if (pgGb == "KCP" || pgGb == "PAYCO") {
-									jsf__pay(document.order_info);
-								}
-								return;
-							} else {
-								alert(result.message);
-								return false;
+							
+							// 결재정보로드
+							$("#order_info").html(result);
+							
+							var pgGb = $("#order_info input[name=pgGb]").val();
+							
+							if (pgGb == "NAVER") {
+								fnNaverPaymentReady();
+							} else if (pgGb == "KAKAO") {
+								fnKakaoPaymentReady();
+							} else if (pgGb == "KCP" || pgGb == "PAYCO") {
+								jsf__pay(document.order_info);
 							}
 						}
 					});
@@ -2098,7 +2117,7 @@ var custCpnSumAmtCal = function() {
 		});
 	});
 	
-	$("#orderAmtForm .freegiftValArr").text(freegiftValArr);				// 사은품시퀀스배열
+	$("#orderAmtForm .freegiftValArr").text(freegiftValArr);			// 사은품시퀀스배열
 	$("#orderAmtForm .freegiftUsePointArr").text(freegiftUsePointArr);	// 사은품사용포인트배열
 };
 

+ 580 - 0
src/main/webapp/WEB-INF/views/mob/order/OrderGiftCompleteMob.html

@@ -0,0 +1,580 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="mob/common/layout/SubLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : OrderGiftCompleteMob.html
+ * @desc    : 선물받기주문완료 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.15   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+
+<form class="form_wrap form_full" name="orderGiftForm" id="orderGiftForm">
+	<main role="" id="" class="container od">
+		<section class="content od_gift">
+			<!-- 배송지 입력기한이 경과 -->
+			<th:block th:if="${orderInfo.giftPackCloseYn} == 'N'">
+				<div class="inner wide">
+					<div class="gift_banner">
+						<img src="/images/mo/logo_STYLE24_white.png" alt="스타일24 로고">
+						<p>고객님께 선물이 도착했습니다!</p>
+					</div>
+				</div>
+			</th:block>
+			<!-- //배송지 입력기한이 경과 -->
+			
+			<!-- 배송지 입력기한이 경과 -->
+			<th:block th:if="${orderInfo.giftPackCloseYn} == 'Y'">
+				<div class="inner wide">
+					<div class="gift_banner timeout">
+						<img src="/images/mo/ico_big_check.png" alt="배송지 입력기한 경과">
+						<p>배송지 입력기한이 경과해<br>선물을 수령하실 수 없습니다.</p>
+						<dl>
+							<dt>배송지 입력기한</dt>
+							<dd th:text="${orderInfo.giftPackCloseDt}"></dd>
+						</dl>
+					</div>
+				</div>
+			</th:block>
+			<!-- 배송지 입력기한이 경과 -->
+			
+			<div class="inner wide">
+				<!-- 폴딩리스트 -->
+				<div class="ui_row">
+					<div class="foldGroup giftfold">
+						<ul>
+							<li>
+								<div class="fold_head">
+									<a href="javascript:void(0)">
+										<div>
+											<div class="fold_tit">
+												<span>선물받으실 상품</span>
+											</div>
+											<div class="data">
+												<em class="c_primary" th:text="${orderListCnt}"></em>개의 상품
+											</div>
+										</div>
+									</a>
+								</div>
+								<div class="fold_cont">
+									<div class="part_goods">
+										<th:block th:each="goods, i : ${orderList}">
+											<div class="goods_section">
+												<div class="goods_detail">
+													<div class="thumb_box">
+														<a href="javascript:;">
+															<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
+														</a>
+													</div>
+													<div class="info_box">
+														<div class="od_name">
+															<div class="brand"><span th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></span></div>
+															<div class="name" th:text="${goods.goodsNm}"></div>
+														</div>
+														<div class="od_opt">
+															<div class="option" th:each="colorNm, index : ${goods.colorNmArr}">
+																<em th:text="${colorNm}"></em>
+																<em th:text="${goods.optCd2Arr[index.index]}"></em>
+															</div>
+														</div>
+														<div class="od_calc">
+															<p class="count">수량 <em th:text="${goods.ordQty} - ${goods.cnclRtnQty}"></em>개</p>
+														</div>
+													</div>
+												</div>
+												
+												<!-- 배송지 입력기한이 경과 -->
+												<th:block th:if="${orderInfo.giftPackCloseYn} == 'N'">
+													<div class="goods_btn_wrap btn_group_flex">
+														<div>
+															<button type="button" class="btn btn_default btn_option_pop02">
+																<span>옵션변경</span>
+															</button>
+														</div> <!-- 옵션변경_팝업02 호출 -->
+													</div>
+												</th:block>
+												<!-- //배송지 입력기한이 경과 -->
+											</div>
+										</th:block>
+									</div>
+								</div>
+							</li>
+						</ul>
+					</div>
+				</div>
+				<!-- 폴딩리스트 -->
+			</div>
+			<div class="inner wide">
+				<!-- 폴딩리스트 -->
+				<div class="ui_row">
+					<div class="foldGroup giftfold">
+						<ul>
+							<li>
+								<div class="fold_head">
+									<a href="javascript:void(0)">
+										<div class="fold_tit"><span>선물하신 분</span></div>
+										<div class="data fixed"><span th:text="${orderInfo.ordNm}"></span></div>
+									</a>
+								</div>
+								<div class="fold_cont">
+									<div class="gift_order_message">
+										<p th:text="${orderInfo.giftMsg}" id="giftMsg"></p>
+									</div>
+								</div>
+							</li>
+						</ul>
+					</div>
+				</div>
+				<!-- 폴딩리스트 -->
+			</div>
+			
+			<!-- 배송지 입력기한이 경과 -->
+			<th:block th:if="${orderInfo.giftPackCloseYn} == 'N'">
+				<!-- //배송지 정보 변경불가 -->
+				<th:block th:if="${delvRegYn} == 'Y'">
+					<div class="inner wide">
+						<!-- 폴딩리스트 -->
+						<div class="ui_row">
+							<div class="foldGroup shipfold">
+								<ul>
+									<li>
+										<div class="fold_head">
+											<a href="javascript:void(0)">
+												<div class="fold_tit"><span>선물 받으실 분 배송지</span></div>
+												<div class="data">
+													<span class="recipAddr" th:text="${orderInfo.recipBaseAddr} + '    ' + ${orderInfo.recipDtlAddr}"></span>
+												</div>
+											</a>
+										</div>
+										<div class="fold_cont">
+											<div class="ship_info">
+												<button type="button" id="btn_adrsChange_pop" class="btn_popup"><span>배송지 변경</span></button>
+												<dl>
+													<div class="company">
+														<dt><span class="sr-only">배송지명</span></dt>
+														<dd id="recipNm" th:text="${orderInfo.recipNm}"></dd>
+													</div>
+													<div class="phone">
+														<dt><span class="sr-only">휴대폰 번호</span></dt>
+														<dd id="recipPhnno" th:text="${orderInfo.recipPhnno}"></dd>
+													</div>
+													<div class="addr">
+														<dt><span class="sr-only">배송주소</span></dt>
+														<dd id="recipAddr" th:text="${orderInfo.recipBaseAddr} + '    ' + ${orderInfo.recipDtlAddr}"></dd>
+													</div>
+													<div class="ship_request">
+														<dt>배송요청 사항</dt>
+														<dd id="delvMemo" th:text="${orderInfo.delvMemo}"></dd>
+													</div>
+												</dl>
+												<div class="btn_group btn_group_flex">
+													<div>
+														<button type="button" class="btn btn_primary" id="btn_plz_delv">
+															<span>선물 배송 요청</span>
+														</button>
+													</div>
+												</div>
+												<div class="info_txt">
+													<ul>
+														<li>배송지 등록이 완료되면 선물상품 배송이 시작됩니다.</li>
+														<li>배송이 시작된 후는 배송지 변경이 불가능합니다.</li>
+														<li>배송기한 내(선물받은 날로부터 3일) 배송지 미입력시 선물받기가 불가능합니다.</li>
+													</ul>
+												</div>
+											</div>
+										</div>
+									</li>
+								</ul>
+							</div>
+						</div>
+						<!-- 폴딩리스트 -->
+					</div>
+				</th:block>
+				<!-- //배송지 정보 변경불가 -->
+				
+				<!-- (배송지 변경 클릭 후) 선물 받으실 분 배송지 입력 -->
+				<th:block th:if="${delvRegYn} == 'N'">
+					<div class="inner wide">
+						<div class="ui_row">
+							<div class="foldGroup shipfold">
+								<ul>
+									<li>
+										<div class="fold_head">
+											<a href="javascript:void(0)">
+												<div>
+													<div class="fold_tit">
+														<div class="lap2"><span>선물 받으실 분 배송지</span></div>
+													</div>
+													<div class="data"><span id="recipAddr"></span></div>
+												</div>
+											</a>
+										</div>
+										<div class="fold_cont">
+											<div class="tbl_wrap">
+												<div class="tbl tbl_dlvr">
+													<table>
+														<colgroup>
+															<col width="*">
+														</colgroup>   
+														<tbody>
+															<tr>
+																<td>
+																	<span class="sr-only">배송지명(이름 등)</span>
+																	<input type="text" class="form_control" name="recipNm" placeholder="배송지명(이름 등)" th:value="${orderInfo.recipNm}">
+																</td>
+															</tr>
+															<tr>
+																<td>
+																	<span class="sr-only">휴대폰 번호</span>
+																	<input type="text" class="form_control" name="recipPhnno" placeholder="휴대폰 번호" th:value="${orderInfo.recipPhnno}">
+																</td>
+															</tr>
+															<tr>
+																<td>
+																	<span class="sr-only">배송 주소</span>
+																	<div class="input_wrap">
+																		<input type="hidden" class="form_control" name="recipZipcode" placeholder="우편번호" readonly="readonly">
+																		<input type="hidden" class="form_control" name="recipBaseAddr" placeholder="기본주소" readonly="readonly">
+																		<input type="text" class="form_control" name="recipAddr" placeholder="배송주소" readonly="readonly">
+																		<input type="text" class="form_control" name="recipDtlAddr" placeholder="상세주소">
+																		<button type="button" class="btn btn_sch" onclick="fnOpenDaumAddr();">
+																			<span class="sr-only">우편번호 찾기</span>
+																		</button>
+																	</div>
+																</td>
+															</tr>
+														</tbody>
+													</table>
+												</div>
+											</div>
+											<div class="tbl_wrap">
+												<div class="tbl_tit"><h3>배송 요청사항</h3></div>
+												<div class="tbl tbl_request">
+													<table>
+														<colgroup>
+															<col width="*">
+														</colgroup>   
+														<tbody>
+															<tr>
+																<th class="sr-only">문 앞</th>
+																<td>
+																	<div class="form_field">
+																		<input type="radio" name="rdi-request1" id="rdi-12" value="문 앞">
+																		<label for="rdi-12">
+																			<span>문 앞</span>
+																		</label>
+																	</div>
+																</td>
+															</tr>
+															<tr>
+																<th class="sr-only">직접 받고 부재 시 문 앞</th>
+																<td>
+																	<div class="form_field">
+																		<input type="radio" name="rdi-request1" id="rdi-22" value="직접 받고 부재 시 문 앞">
+																		<label for="rdi-22">
+																			<span>직접 받고 부재 시 문 앞</span>
+																		</label>
+																	</div>
+																</td>
+															</tr>
+															<tr>
+																<th class="sr-only">경비실</th>
+																<td>
+																	<div class="form_field">
+																		<input type="radio" name="rdi-request1" id="rdi-32" value="경비실">
+																		<label for="rdi-32">
+																			<span>경비실</span>
+																		</label>
+																	</div>
+																</td>
+															</tr>
+															<tr>
+																<th class="sr-only">택배함</th>
+																<td>
+																	<div class="form_field">
+																		<input type="radio" name="rdi-request1" id="rdi-42" value="택배함">
+																		<label for="rdi-42">
+																			<span>택배함</span>
+																		</label>
+																	</div>
+																</td>
+															</tr>
+															<tr>
+																<th class="sr-only">기타사항</th>
+																<td>
+																	<div class="form_field">
+																		<input type="radio" name="rdi-request1" id="rdi-52" value="기타사항">
+																		<label for="rdi-52">
+																			<span>기타사항</span>
+																		</label>
+																	</div>
+																</td>
+															</tr>
+															<tr>
+																<th class="sr-only">보관 장소만 입력(필수)</th>
+																<td>
+																	<div class="form_text">
+																		<input type="text" name="delvMemoText" placeholder="보관 장소만 입력 (필수)" disabled>
+																		<p class="desc_txt">보관 장소 외 다른 내용 입력시 통보 없이 삭제 될 수 있습니다.</p>
+																	</div>
+																</td>
+															</tr>
+														</tbody>
+													</table>
+												</div>
+												<div class="btn_group btn_group_flex">
+													<div>
+														<button type="button" id="btn_delivery_addr_save" class="btn btn_dark">
+															<span>배송지 등록</span>
+														</button>
+													</div> <!-- 210406_ID 추가 -->
+												</div>
+												<div class="info_txt">
+													<ul>
+														<li>배송지 등록이 완료되면 선물상품 배송이 시작됩니다.</li>
+														<li>배송이 시작된 후는 배송지 변경이 불가능합니다.</li>
+														<li>배송기한 내(선물받은 날로부터 3일) 배송지 미입력시 선물받기가 불가능합니다.</li>
+													</ul>
+												</div>
+											</div>
+										</div>
+									</li>
+								</ul>
+							</div>
+						</div>
+					</div>
+				</th:block>
+				<!-- //(배송지 변경 클릭 후) 선물 받으실 분 배송지 입력 -->
+			</th:block>
+			<!-- //배송지 입력기한이 경과 -->
+			
+		</section>
+	</main>
+</form>
+
+
+<script th:inline="javascript">
+// 배송관련정보 변수선언
+var ordNo			= [[${orderInfo.ordNo}]]		// 배송목록
+var delvAddrSq		= [[${orderInfo.delvAddrSq}]];	// 배송지번호
+var giftMsg			= [[${orderInfo.giftMsg}]];		// 선물메세지
+
+// item.questContent.replaceAll("\n", "</br>")
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 선물메시지
+	$("#giftMsg").html(giftMsg.replaceAll("\n", "</br>"));
+	
+	// 배송요청사항 버튼기능
+	$("#orderGiftForm input[name=rdi-request1]").each(function(){
+		// 기타기능 버튼기능
+		$(this).on("click", function(){
+			var temp = $(this).parent().find('span').text();
+			$("#orderGiftForm input[name=delvMemoText]").val("");
+			if (temp == "기타사항") {
+				$("#orderGiftForm input[name=delvMemoText]").attr("disabled", false);
+			} else {
+				$("#orderGiftForm input[name=delvMemoText]").attr("disabled", true);
+			}
+		});
+	});
+});
+
+// 2.1 회원 배송지변경 팝업열기
+$('#btn_adrsChange_pop').on("click", function(){
+	// 비회원 case 적용
+	$.ajax( {
+		type		: "POST",
+		url 		: '/common/delvAddrAddPop',
+		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) {
+			$("#adrsAddPop .modal-dialog .modal-content").html(result);
+			$("#adrsAddPop").modal("show");
+		}
+	});	
+});
+
+// 배송요청버튼
+$("#btn_plz_delv").on("click", function() {
+	
+	mcxDialog.confirm("입력된 주소로 상품이 배송이 시작됩니다. 배송요청을 하시겠습니까?", {
+		cancelBtnText 	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick: function() {
+			var jsonObj = {
+				"ordNo" 		: ordNo
+			}
+			
+			gagajf.ajaxJsonSubmit(
+				"/order/giftDelvComplete"
+				, JSON.stringify(jsonObj)
+				, function (result) {
+					mcxDialog.alertC("선물 배송 요청이 완료 되었습니다.", {
+						sureBtnText		: "확인",
+						sureBtnClick	: function() {
+							location.href = "/";
+						}
+					});
+				}
+			)
+		}
+	});
+});
+
+// 1.18 배송지정보 설정
+var delvAddrSet = function(delvObj) {
+	
+	var rtnStr = "";
+	rtnStr += "| recipNm 			::: " + delvObj.recipNm;
+	rtnStr += "| recipPhnno 		::: " + delvObj.recipPhnno;
+	rtnStr += "| recipZipcode 		::: " + delvObj.recipZipcode;
+	rtnStr += "| recipBaseAddr 		::: " + delvObj.recipBaseAddr;
+	rtnStr += "| recipDtlAddr 		::: " + delvObj.recipDtlAddr;
+	rtnStr += "| delvMemo 			::: " + delvObj.delvMemo;
+	
+	$("#recipNm").text(delvObj.recipNm);
+	$("#recipPhnno").text(delvObj.recipPhnno);
+	$("#recipAddr").text(delvObj.recipBaseAddr + '    ' + delvObj.recipDtlAddr);
+	$("#delvMemo").text(delvObj.delvMemo);
+	
+	// 변수값 설정
+	var jsonObj = {
+		"delvAddrSq" 		: delvAddrSq
+		, "recipNm"			: delvObj.recipNm
+		, "recipPhnno"		: delvObj.recipPhnno
+		, "recipZipcode"	: delvObj.recipZipcode
+		, "recipBaseAddr"	: delvObj.recipBaseAddr
+		, "recipDtlAddr"	: delvObj.recipDtlAddr
+		, "delvMemo"		: delvObj.delvMemo
+	}
+	
+	gagajf.ajaxJsonSubmit(
+		"/common/updateDeliverAddr"
+		, JSON.stringify(jsonObj)
+		, function (result) {
+			mcxDialog.alert("수정되었습니다.");
+		}
+	)
+}
+
+// 배송지등록버튼
+$("#btn_delivery_addr_save").on("click", function(){
+	
+	// 유효성체크
+	if (!deliveryAddFormCheck()){
+		return false;
+	}
+	
+	// 기타사항일때 텍스트 등록
+	var delvMemo = $("#orderGiftForm input[name=rdi-request1]:checked").parent().find('span').text();
+	if ("기타사항" == delvMemo) {
+		delvMemo = $("#orderGiftForm input[name=delvMemoText]").val();
+	}
+	
+	// 변수값 설정
+	var jsonObj = {
+		"delvAddrSq" 		: delvAddrSq
+		, "recipNm"			: $("#orderGiftForm input[name=recipNm]").val()
+		, "recipPhnno"		: $("#orderGiftForm input[name=recipPhnno]").val()
+		, "recipZipcode"	: $("#orderGiftForm input[name=recipZipcode]").val()
+		, "recipBaseAddr"	: $("#orderGiftForm input[name=recipBaseAddr]").val()
+		, "recipDtlAddr"	: $("#orderGiftForm input[name=recipDtlAddr]").val()
+		, "delvMemo"		: delvMemo
+	}
+	
+	gagajf.ajaxJsonSubmit(
+		"/common/updateDeliverAddr"
+		, JSON.stringify(jsonObj)
+		, function (result) {
+			
+			gagajf.ajaxJsonSubmit(
+				"/common/updateDeliverAddr"
+				, JSON.stringify(jsonObj)
+				, function (result) {
+					mcxDialog.alert("수정되었습니다.");
+					location.href = "/order/giftComplete?" + "ordNo=" + ordNo;
+				}
+			)
+		}
+	)
+});
+
+// 유효성체크 함수
+var deliveryAddFormCheck = function() {
+	// TODO 유효성 체크 추가
+	if (gagajf.isNull($("#orderGiftForm input[name=recipNm]").val())) {
+		mcxDialog.alert("이름을 입력해주세요.");
+		$('#orderGiftForm input[name=custNm]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#orderGiftForm input[name=recipPhnno]").val())) {
+		mcxDialog.alert("휴대폰번호를 입력해주세요.");
+		$('#orderGiftForm input[name=recipPhnno]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#orderGiftForm input[name=recipZipcode]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#orderGiftForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#orderGiftForm input[name=recipBaseAddr]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#orderGiftForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#orderGiftForm input[name=recipDtlAddr]").val())) {
+		mcxDialog.alert("상세주소를 입력해주세요.");
+		$('#orderGiftForm input[name=recipDtlAddr]').focus();
+		return false;
+	}
+	
+	return true;
+}
+
+// 우편번호 DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function() {
+	$("body").css("overflow", "hidden");
+	
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			$('#orderGiftForm input[name=recipAddr]').val(data.zonecode + '    ' + cfnGetDaumRoadAddr(data));
+			$('#orderGiftForm input[name=recipZipcode]').val(data.zonecode);
+			$('#orderGiftForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#orderGiftForm input[name=recipDtlAddr]').focus();
+			
+			cfnCloseDaumAddr();
+
+			$("body").css("overflow", "");
+			$(".close-modal").trigger("click");
+		},
+		width: '100%'
+	});
+	cfnOpenDaumAddr(daumZip);
+}
+
+//2021.04.09 하이픈처리
+$(document).on("keyup", "#orderGiftForm input[name=recipPhnno]", function() { 
+	$(this).val( $(this).val().replace(/[^0-9]/g, "").replace(/(^02|^0505|^1[0-9]{3}|^0[0-9]{2})([0-9]+)?([0-9]{4})$/,"$1-$2-$3").replace("--", "-") ); 
+});
+</script>
+</th:block>
+</body>
+</html>

+ 11 - 14
src/main/webapp/WEB-INF/views/mob/order/OrderGiftInfoMob.html

@@ -30,30 +30,22 @@
 				<div class="fold_cont" style="display: none;">
 					<div class="tabWrap">
 						<ul class="tabIndex">
-							<li class="active"><a href="javascript:;"><span>연락처 불러오기</span></a></li>
-							<li class=""><a href="javascript:;"><span>직접입력</span></a></li>
+							<li><a href="javascript:;"><span>연락처 불러오기</span></a></li>
+							<li class="active"><a href="javascript:;"><span>직접입력</span></a></li>
 						</ul>
 						<div class="tabContents">
 							<div class="tab_cont active">
 								<div class="form_field">
 									<div class="input_wrap">
-										<input type="text" class="form_control" value="" placeholder="받으실분 휴대폰번호">
-										<p class="desc_txt">선물이 타인에게 전송될수 있으니 전화번호를 받으실분 연락처를 정확하게 입력해주세요.</p>
+										<input type="text" name="recipNm" class="form_control" value="" maxlength="10" placeholder="받는분">
 									</div>
-									<div class="textarea_wrap">
-										<textarea class="doc_review" name="review" id="" placeholder="선물 메시지 입력&#13;&#10;(미 입력시 ‘감사합니다’로 발송됩니다.)"></textarea>
-										<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/200</p>
-									</div>
-								</div>
-							</div>
-							<div class="tab_cont">
-								<div class="form_field">
+									<br>
 									<div class="input_wrap">
-										<input type="text" class="form_control" value="" placeholder="받으실분 휴대폰번호">
+										<input type="text" name="recipPhnno" class="form_control" value="" minlength="10" maxlength="14" placeholder="받으실분 휴대폰번호">
 										<p class="desc_txt">선물이 타인에게 전송될수 있으니 전화번호를 받으실분 연락처를 정확하게 입력해주세요.</p>
 									</div>
 									<div class="textarea_wrap">
-										<textarea class="doc_review" name="review" id="" placeholder="선물 메시지 입력&#13;&#10;(미 입력시 ‘감사합니다’로 발송됩니다.)"></textarea>
+										<textarea class="doc_review" name="giftMsg" id="giftMsg" placeholder="선물 메시지 입력&#13;&#10;(미 입력시 ‘감사합니다’로 발송됩니다.)"></textarea>
 										<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/200</p>
 									</div>
 								</div>
@@ -86,5 +78,10 @@ var orderGiftInfoDispYn = function(temp) {
 $(document).ready( function() {
 	
 });
+
+//2021.04.09 하이픈처리
+$(document).on("keyup", "#orderGiftInfo input[name=recipPhnno]", function() { 
+	$(this).val( $(this).val().replace(/[^0-9]/g, "").replace(/(^02|^0505|^1[0-9]{3}|^0[0-9]{2})([0-9]+)?([0-9]{4})$/,"$1-$2-$3").replace("--", "-") ); 
+});
 </script>
 </html>

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

@@ -23,10 +23,10 @@
 			<div class="fold_head">
 				<a href="javascript:void(0)">
 					<div>
-						<th:block th:if="${order.orderGiftYn} == 'N'">
+						<th:block th:if="${order.giftPackYn} == 'N'">
 							<div class="fold_tit"><span>주문내역</span></div>
 						</th:block>
-						<th:block th:if="${order.orderGiftYn} == 'Y'">
+						<th:block th:if="${order.giftPackYn} == 'Y'">
 							<div class="fold_tit"><span>선물하기 주문내역</span></div>
 						</th:block>
 						<div class="data"><em class="c_primary" th:text="${goodsTotCnt}"></em>개의 상품</div>

+ 334 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningEventAttendFormMob.html

@@ -0,0 +1,334 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : PlanningEventAttendFormMob.html
+ * @desc    : 출석체크 이벤트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
+		<main role="" id="" class="container ev">
+			<section class="content check">
+				<div class="inner">
+					<div class="renew_check_tit">
+						<h3 th:text="${planInfo.planNm}"></h3>
+						<div class="period">
+							<span th:text="${planInfo.dispStdt}"></span> - <span th:text="${planInfo.dispEddt}"></span>
+						</div>
+						<button type="button" class="share_btn"><img src="/images/mo/ico_share_btn.png" alt="공유" /></button>
+					</div>
+				</div>
+				<div class="inner wide">
+					<div class="event_calander ">
+						<div class="check_title">
+							<p>출석할수록 늘어나는 혜택!</p>
+							<h3><strong>4월</strong> 출석체크</h3>
+						</div>
+						<div class="check_info">
+							<span class="today">오늘</span>
+							<span class="complete">출석완료</span>
+						</div>
+						<div class="tbl_wrap">
+							<div class="my_attend_day">
+								<p>나의 출석 일수는?</p>
+								<span class="day">
+									<span></span>일
+								</span>
+							</div>
+							<table>
+								<colgroup>
+									<col width="14.28%">
+									<col width="14.28%">
+									<col width="14.28%">
+									<col width="14.28%">
+									<col width="14.28%">
+									<col width="14.28%">
+									<col width="14.28%">
+								</colgroup>
+								<thead>
+									<tr>
+										<th class="sun">SUN</th>
+										<th>MON</th>
+										<th>TUE</th>
+										<th>WED</th>
+										<th>THU</th>
+										<th>FRI</th>
+										<th class="sat">SAT</th>
+									</tr>
+								</thead>
+								<tbody id="monthTbody">
+									
+								</tbody>
+							</table>
+						</div>
+						<div class="btn_wrap">
+							<button type="button" class="btn btn_dark" onclick="fnAttendEntry()">출석 체크</button>
+						</div>
+					</div>
+				</div>
+				<div class="inner">
+					<div class="benefit_list">
+						<h4>출석 일수에 따라 달라지는 혜택</h4>
+						<div class="benefit_con">
+							<ul>
+								 <th:block th:each="a, benefitStat : ${benefitList}">
+								<li th:if="${a.benefitGb == 'P'}">
+									<div class="benfit_point">
+										<span th:text="${a.basDays}"></span>일 출석 시 <span class="c_primary"><em th:text="${a.pntAmt}"></em>P</span>
+									</div>
+								</li>
+								<li th:if="${a.benefitGb == 'C'}">
+									<div class="benfit_coupon">
+										<th:block th:if="${a.dcWay == '%'}">
+										<span th:text="${a.basDays}"></span>일 출석 시 <span class="c_primary"><em th:text="${a.dcVal}"></em>%</span><strong> 할인 쿠폰</strong>
+										</th:block>
+										<th:block th:if="${a.dcWay == '원'}">
+										<span th:text="${a.basDays}"></span>일 출석 시 <span class="c_primary"><em th:text="${a.dcVal}"></em>원</span><strong> 할인 쿠폰</strong>
+										</th:block>
+									</div>
+								</li>
+								<li th:if="${a.benefitGb == 'A'}">
+									<div class="benfit_coupon">
+									<th:block th:if="${a.dcWay == '%'}">
+										<span th:text="${a.basDays}"></span> 출석 시 <span class="c_primary"><em th:text="${a.pntAmt}"></em>P</span> + <span class="c_primary"><em th:text="${a.dcVal}"></em>%</span> <strong>할인 쿠폰</strong>
+									</th:block>
+									<th:block th:if="${a.dcWay == '원'}">
+										<span th:text="${a.basDays}"></span> 출석 시 <span class="c_primary"><em th:text="${a.pntAmt}"></em>P</span> + <span class="c_primary"><em th:text="${a.dcVal}"></em>원</span> <strong>할인 쿠폰</strong>
+									</th:block>
+									</div>
+								</li>
+								</th:block>
+							</ul>
+						</div>
+					</div>
+				</div>
+				<div class="inner">
+					<div class="announce_txt "> 
+						<div class="note_txt">
+							<img src="/images/mo/ico_content_find03.png" alt="유의사항">
+							<p>유의사항</p>
+						</div>
+						<div class="announce_list" th:if="${fsrcInfoTop != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcMob,'&amplt;','<'),'&ampgt;','>')}">
+							<!-- <ul>
+								<li>본 이벤트는 ID당 1회만 참여 가능합니다.</li>
+								<li>설문조사 참여 시 포인트를 지급해드립니다. (이벤트 종료 후, 일괄 지급)</li>
+								<li>지급된 포인트는 [ 마이페이지 > 나의 지갑 ] 메뉴에서 확인할 수 있습니다.</li>
+							</ul> -->
+						</div>
+					</div>
+				</div>
+				<div class="inner">
+					<div class="other_ev_slide">
+						<div class="tit">
+							<h4>다른 이벤트 보기</h4>
+						</div>
+						<div class="swiper-container">
+							<div class="swiper-wrapper">
+							  <th:block th:each="PlanData, PlanStat : ${planList}">
+								<div class="swiper-slide">
+									 <a href="javascript:void(0);" th:onclick="cfnGoToPlanDetail([[${PlanData.planSq}]])">
+										<div class="img">
+											<img th:src="${@environment.getProperty('upload.image.view')+PlanData.mainImg}" alt="${PlanData.planNm}">
+										</div>
+										<div class="txt">
+											<p class="subject" th:text="${PlanData.planNm}"></p>
+										</div> 
+									</a>
+								</div>
+								</th:block>
+							</div>
+						</div>
+					</div>
+				</div>
+			</section>
+		</main>
+	
+	<script th:inline="javascript">
+	/*<![CDATA[*/
+	let today = new Date();   
+let year = today.getFullYear();
+let date = today.getDate();
+let month =today.getMonth()+1;
+let calendar = [[${month}]];
+let planInfo = [[${planInfo}]];
+var custAttendList = [[${custAttendList}]];
+var appendHtml = function () {
+	
+	
+	$("#monthTbody").html('');
+	$.each(calendar, function(idx, item)  { 
+
+				
+		html = '<tr>\n';
+		
+		if (item.sun!=null && item.sun!='') {
+			html += '	<td id="td_'+item.sun+'">\n';
+			html += '		<div class="date" id="'+item.sun+'">'+item.sun+'</div>\n';
+			html += '	</td>\n	';
+		}else{
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
+		}
+		
+		if (item.mon!=null && item.mon!='') {
+			html += '	<td id="td_'+item.mon+'">\n';
+			html += '		<div class="date" id="'+item.mon+'">'+item.mon+'</div>\n';
+			html += '	</td>\n	';
+		}else{
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
+		}
+		if (item.tue!=null && item.tue!='') {
+			html += '	<td id="td_'+item.tue+'">\n';
+			html += '		<div class="date" id="'+item.tue+'">'+item.tue+'</div>\n';
+			html += '	</td>\n	';
+		}else{
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
+		}
+		if (item.wed!=null && item.wed!='') {
+			html += '	<td id="td_'+item.wed+'">\n';
+			html += '		<div class="date" id="'+item.wed+'">'+item.wed+'</div>\n';
+			html += '	</td>\n	';
+		}else{
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
+		}
+		if (item.thu!=null && item.thu!='') {
+			html += '	<td id="td_'+item.thu+'">\n';
+			html += '		<div class="date" id="'+item.thu+'">'+item.thu+'</div>\n';
+			html += '	</td>\n	';
+		}else{
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
+		}
+		if (item.fri!=null && item.fri!='') {
+			html += '	<td id="td_'+item.fri+'">\n';
+			html += '		<div class="date" id="'+item.fri+'">'+item.fri+'</div>\n';
+			html += '	</td>\n	';
+		}else{
+			html += '	<td>\n';
+			html += '		<div class="date" ></div>\n';
+			html += '	</td>\n	';
+		}
+		if (item.sat!=null && item.sat!='') {
+			html += '	<td id="td_'+item.sat+'">\n';
+			html += '		<div class="date" id="'+item.sat+'">'+item.sat+'</div>\n';
+			html += '	</td>\n	';
+		}else{
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
+		}
+		
+		html += '</tr>\n';
+
+		$("#monthTbody").append(html);
+		if (cfCheckLogin()) {
+			$.each(custAttendList, function(idx1, item1) {
+				$('.day').html('<span>' + custAttendList.length + '</span>일');
+				if(item1.entryDt == item.sun || item1.entryDt == item.mon || item1.entryDt == item.tue|| item1.entryDt == item.wed
+						|| item1.entryDt == item.thu || item1.entryDt == item.fri || item1.entryDt == item.sat){
+					$("#td_"+item1.entryDt).attr("class","complete");
+				}
+			})
+		}
+	})    
+} 
+
+
+var fnAttendEntry = function () {
+	if (!cfCheckLogin()) {
+		mcxDialog.alert("로그인 후 참여 가능합니다.");
+		return false;
+	}
+	
+	let data = {planSq : planInfo.planSq};
+	let jsonData = JSON.stringify(data);
+	gagajf.ajaxJsonSubmit('/planning/event/attend/entry', jsonData, fnInfoConfirmCallBack);
+	
+}
+
+var fnInfoConfirmCallBack = function(result) {
+	mcxDialog.alert(result.msg);
+	appendHtml();
+	$("#td_"+date).attr("class","complete");
+	
+};
+
+$(document).ready(function() {
+	appendHtml();
+	
+	if (!cfCheckLogin()) {
+		$(".day").html("<span>0</span>일");
+	}else{
+		$.each(custAttendList, function(idx, item) {
+			$('.day').html('<span>' + custAttendList.length + '</span>일');
+			if(item.entryDt == date){
+				$("#td_"+date).attr("class","complete");
+			}else{
+				$("#td_"+date).attr("class","today"); 
+			}
+		})
+	}
+	
+	
+	
+	
+	
+	
+	
+	$(".title").html("<strong>"+month+"월</strong> 출석체크");
+	
+	//공유 버튼 토글 
+	$("button[data-name=openShare]").on("click", function(){
+		$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
+		return false;
+	});
+	//영역밖 클릭으로 공유토글 닫기
+	$("body").on('click', function(e) { 
+		if(!$(".shareWrap.on").parent().has(e.target).length) {
+			$("button[data-name=openShare]").removeClass("on");
+			$(".shareWrap").removeClass("on");
+		};
+	});
+	
+	$('.btn_copy').bind('click', function() {
+		copyToClipboard();
+	});
+	
+	/* SLIDE - 다른 기획전,이벤트 보기 */
+	var ev_ohter_slide = new Swiper('.other_ev_slide .swiper-container', {
+		slidesPerView: 'auto',
+		spaceBetween: 8,
+		centerMode:true,
+		//navigation: {
+		//	nextEl: '.other_ev_slide .swiper-button-next',
+		//	prevEl: '.other_ev_slide .swiper-button-prev',
+		//},
+	});
+	
+})
+	/*]]>*/
+	</script>
+</th:block>
+
+</body>
+</html>

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

@@ -15,13 +15,13 @@
 								<tr>
 									<td>
 										<span class="sr-only">받는분</span>
-										<input type="text" class="form_control" name="recipNm" placeholder="받는분">
+										<input type="text" class="form_control" name="recipNm" maxlength="10" placeholder="받는분">
 									</td>
 								</tr>
 								<tr>
 									<td>
 										<span class="sr-only">휴대폰 번호</span>
-										<input type="text" class="form_control" name="recipPhnno" placeholder="휴대폰 번호">
+										<input type="text" class="form_control" name="recipPhnno" minlength="10" maxlength="14" placeholder="휴대폰 번호">
 									</td>
 								</tr>
 								<tr>

+ 24 - 12
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -34,11 +34,11 @@
 							<td>
 								<div class="form_field">
 									<div>
-										<input type="radio" name="shotDelvUseYn" id="blt_ship1" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y')}">
+										<input type="radio" name="shotDelvUseYn" id="blt_ship1" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y') and order.shotCartList.size() > 0}">
 										<label for="blt_ship1"><span><em class="tag primary_line">총알배송</em><span th:text="|${order.shotDelvDt}일 24:00 까지 도착|"></span></span></label>
 									</div>
 									<div>
-										<input type="radio" name="shotDelvUseYn" id="blt_ship2" value="N" th:checked="${order.shotDelvUseYn != null and !order.shotDelvUseYn.equals('Y')}">
+										<input type="radio" name="shotDelvUseYn" id="blt_ship2" value="N" th:checked="${order.shotDelvUseYn == null or !order.shotDelvUseYn.equals('Y') or order.shotCartList.size() < 1}">
 										<label for="blt_ship2"><span>총알 배송 안함</span></label>
 									</div>
 								</div>
@@ -145,7 +145,8 @@
 													<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 													<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
-													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}" th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
 												</div>
 											</div>
 											<div class="calc_box">
@@ -252,7 +253,8 @@
 														<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 														<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
-														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
+														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}" th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></p>
+														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
 													</div>
 												</div>
 											</div>
@@ -370,7 +372,8 @@
 													<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 													<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
-													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}" th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
 												</div>
 											</div>
 											<div class="calc_box">
@@ -556,8 +559,8 @@
 		$(document).ready(function() {
 			setLoginInfo();
 
-			if([[${!order.shotCanYn.equals('Y')}]]) {
-				$(".shotDelvSelect").hide();
+			if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
+				//$(".shotDelvSelect").hide();
 			}
 
 			$("#cartListForm .area_salecoupon .coupon_box").hide();
@@ -693,6 +696,12 @@
 		function serialCpnApply() {
 			let cartArr = [];
 			let currPrices = [];
+
+			if(!$("#serialCpnNm").val()) {
+				mcxDialog.alert("할인코드를 입력해주세요.");
+				return false;
+			}
+
 			$("#cartListForm input[name=cartSqArr]:checked").each(function(index, item) {
 				cartArr.push($(this).val());
 				currPrices.push($(this).parents(".cartInfo").find("input[name=tmtbDcAmt]").val());
@@ -722,7 +731,6 @@
 						let cpnInfo = result.serialCpnInfo;
 						$("#cartListForm .area_salecoupon .coupon_box").show();
 
-						// 합계 금액
 						// 합계 금액
 						if(cartArr.length > 0) {
 							$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt - cpnInfo.dcAmt).toLocaleString());
@@ -782,6 +790,10 @@
 
 						$(".cartCpnInfoModal .availDt").html('<span>' + cpnInfo.availStdtTime + "</span> ~ <span>" + cpnInfo.availEddtTime + "</span>");
 						$(".cartCpnInfoModal .refVal").html(refValComment);
+
+						if(cpnInfo.downloadCnt > 0) {
+							mcxDialog.alert("성공적으로 등록되었습니다.");
+						}
 					} else {
 						mcxDialog.alert(result.serialCpnInfo.result);
 					}
@@ -1018,7 +1030,7 @@
 						// 혹시 else일 경우
 						fnOrderValidation(list, listIndex, cartSqArr, allYn);
 					}
-				} else if (info.ordCanQty < info.goodsQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
+				} else if (info.ordCanQty < info.goodsQty && info.ordCanQty != info.maxOrdQty) {
 					let message;
 					if ("G056_S" == info.goodsType) {
 						message = info.goodsNm + " 의" + info.itemNm + "/" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
@@ -1026,13 +1038,13 @@
 						message = info.goodsNm + " 의" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
 					}
 
-					fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
-				} else if (info.goodsQty < info.minOrdQty) {
+					fnUpdateConfirmChangeQty(message, info.cartSq, info.ordCanQty, list, listIndex, cartSqArr, allYn);
+				} else if (info.goodsQty < info.minOrdQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
 					let message = info.goodsNm + " 의 최소 구매수량은 " + info.minOrdQty + "개입니다.\n최소 구매 수량으로 주문하시겠습니까?";
 					fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
 				} else if (info.goodsQty > info.maxOrdQty) {
 					let message = info.goodsNm + " 의 최대 구매 사능 수량은 " + info.maxOrdQty + "개입니다. 최대 구매 가능한 수량으로 주문하시겠습니까?";
-					fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
+					fnUpdateConfirmChangeQty(message, info.cartSq, info.maxOrdQty, list, listIndex, cartSqArr, allYn);
 				} else if (listIndex < list.length) {
 					fnOrderValidation(list, listIndex, cartSqArr, allYn);
 				} else {

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

@@ -1019,7 +1019,7 @@
 			});
 
 			if(cartArr.length < 1) {
-				mcxDialog.alert("선택된 상품이 없습니다.");
+				mcxDialog.alert("삭제하실 상품을 선택해 주세요.");
 				return false;
 			}
 

+ 5 - 5
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -40,7 +40,7 @@
 														<dd th:text="${ContentsData.strTitle1}"></dd>
 														<dd class="txt_xs" th:text="${ContentsData.subText1}"></dd>
 													</dl>
-													<a th:href="${ContentsData.strVar1}"><button type="button" class="btn"><span>VIEW MORE</span></button></a>
+													<button type="button" class="btn" th:onclick="cfnGoToPage([[${ContentsData.strVar1}]]);"><span>VIEW MORE</span></button>
 												</div>
 												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
 											</th:block>
@@ -94,10 +94,10 @@
 										<div class="swiper-slide">
 											<div class="item_prod">
 												<div class="item_state">
+													<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM007', planDtlSq=''">관심상품 추가</button>
 													<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBM007');">
 														<div class=" itemPic">
 															<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
-															<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM007', planDtlSq=''">관심상품 추가</button>
 														</div>
 														<p class="itemBrand" th:text="${goodsData.brandGroupNm}"></p>
 														<div class=" itemName" th:text="${goodsData.goodsFullNm}"></div>
@@ -162,11 +162,11 @@
 										<div class="swiper-slide">
 											<div class="item_prod sUiXc">
 												<div class="item_state">
+													<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM008', planDtlSq=''">관심상품 추가</button>
 													<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBM008');">
 														<div class="shape ranker"><span th:text="${goodsStat.index+1}"></span></div>
 														<div class="itemPic">
 															<img alt="BLACK-a" class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
-															<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM008', planDtlSq=''">관심상품 추가</button>
 														</div>
 														<p class="itemBrand" th:text="${goodsData.brandGroupNm}"></p>
 														<div class="itemName" th:text="${goodsData.goodsFullNm}"></div>
@@ -238,10 +238,10 @@
 									<div class="swiper-slide">
 										<div class="item_prod sUiXc">
 											<div class="item_state">
+												<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM009', planDtlSq=''">관심상품 추가</button>
 												<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBM009');">
 													<div class="itemPic">
 														<img alt="BLACK-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
-														<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM009', planDtlSq=''">관심상품 추가</button>
 													</div>
 													<p class=" itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
 													<div class=" itemName" th:text="${goodsData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
@@ -338,10 +338,10 @@
 								<th:block th:each="goodsData, goodsStat : ${brandMainLayoutData.goodsList}">
 									<div class="item_prod">
 										<div class="item_state">
+											<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM013', planDtlSq=''">관심상품 추가</button>
 											<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SBM013');">
 												<div class="itemPic">
 													<img alt="BLACK-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
-													<button type="button" class="itemLike" th:classappend="${goodsData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsData.goodsCd}, ithrCd='', contentsLoc='SBM013', planDtlSq=''">관심상품 추가</button>
 												</div>
 												<p class=" itemBrand" th:text="${goodsData.brandGroupNm}"></p>
 												<div class="itemName" th:text="${goodsData.goodsFullNm}"></div>

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

@@ -6,7 +6,7 @@
 <!--
  *******************************************************************************
  * @source  : CouponDetailPopWeb.html
- * @desc    : 쿠폰적용대상 리스트 Page
+ * @desc    : 쿠폰정보 팝업 Page
  *============================================================================
  * PastelMall
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -23,7 +23,7 @@
 <div class="modal-body">
     <div class="pop_cont">
         <dl>
-            <div>
+            <div th:if="${couponDetailInfo.useCondition!=null && couponDetailInfo.useCondition!=''}">
                 <dt>사용조건</dt>
                 <dd  th:text="${couponDetailInfo.useCondition}"></dd>
             </div>

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

@@ -87,13 +87,13 @@
 																th:text="${CouponData.cpnCnt}+' 장 보유'"></em></span>
 														</p>
 													</div>
-													<th:block th:if="${CouponData.expireYn == 'Y'}">
+													<th:block th:if="${CouponData.expireYn == 'N'}">
 														<p class="cp_date">
 															<span th:text="${CouponData.availStdt}"></span>&nbsp;~&nbsp;<span
 																th:text="${CouponData.availEddt}"></span>
 														</p>
 													</th:block>
-													<th:block th:unless="${CouponData.expireYn == 'Y'}">
+													<th:block th:unless="${CouponData.expireYn == 'N'}">
 														<p class="cp_date">사용완료</p>
 													</th:block>
 
@@ -110,7 +110,7 @@
 							<div class="nodata" style="display: none;">
 								<div class="txt_box">
 									<p>
-										현재 노출 할 수 있는 쿠폰이 없습니다.<br>
+										보유한 쿠폰이 없습니다.<br>
 									</p>
 								</div>
 								<!-- 버튼 필요시 -->

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

@@ -341,7 +341,7 @@
 					}
 					
 				}
-				html+='						<div class="txt_review_box" id="admin_'+item.reviewSq+'">';
+				html+='						<div class="txt_review_box"  id="admin_'+item.reviewSq+'">';
 				html+='							<p>'+item.reviewContent+'</p>';
 				html+='						</div>';
 				
@@ -380,9 +380,18 @@
 	
 	// 스크롤 이동
 	var fnMove = function(obj) {
-	  	 var offset = $("#admin_" + obj).offset();
-	  	 console.log(offset);
-        $('html, body').animate({scrollTop : offset.top}, 400);
+        var data = {};
+        var jsonData = JSON.stringify(data);
+        // 고객 확인 여부 업데이트
+    	gagajf.ajaxJsonSubmit('/mypage/review/customer/confirm', jsonData,function() {
+    		$(".check_notice").html('');
+    		$(".check_notice").css("background-color","#ffffff");
+    		
+		});
+        
+    	 var offset = $("#admin_" + obj).offset();
+         $('html, body').animate({scrollTop : offset.top}, 300); 
+         
 	}
 	
 	// 리뷰삭제

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

@@ -823,6 +823,17 @@ var freegiftInfoSet = function() {
 					total_gift 		= 0;
 					total_deduct 	= 0;
 					
+					// 2021.04.14 사은품 사용 포인트가 보유포인트보다 작아야 한다.
+					var rmPntAmt 			= parseInt($("#orderForm input[name='rmPntAmt']").val());
+					var freegiftUsePnt 		= parseInt($("#orderAmtForm .freegiftUsePnt").text());
+					var usepoint			= parseInt($(this).attr("usepoint"));
+					rmPntAmt 				= rmPntAmt - freegiftUsePnt - usepoint;
+					
+					if (rmPntAmt > 0) {
+						mcxDialog.alert("보유포인트가 부족합니다.");
+						return false;
+					}
+					
 					$("#orderForm .freegiftRdo").each(function(){
 						if ($(this).attr("allYn") == "Y" ) {
 							total_gift 		+= 1;
@@ -1020,6 +1031,7 @@ var paymentInfoSet = function() {
 							,"itemQtyArr"		: $(this).parent().find(".itemQtyr").text().split(",")
 							,"goodsType"		: $(this).parent().find(".goodsType").text()
 							,"entryNo"			: entryNo
+							,"giftPackYn"		: "N"
 						}
 						
 						// 상품수
@@ -1069,6 +1081,7 @@ var paymentInfoSet = function() {
 						,"freegiftSqArr"		: $("#orderAmtForm .freegiftSqArr").text().split(",")
 						,"freegiftGoodsArr"		: $("#orderAmtForm .freegiftGoodsArr").text().split(",")
 						,"freegiftUsePointArr"	: $("#orderAmtForm .freegiftUsePointArr").text().split(",")
+						,"giftMsg"				: ""
 					};
 					
 					$.ajax( {
@@ -1095,7 +1108,6 @@ var paymentInfoSet = function() {
 							} else if (pgGb == "KCP" || pgGb == "PAYCO") {
 								jsf__pay(document.order_info);
 							}
-							return;
 						}
 					});
 				});

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

@@ -92,13 +92,13 @@
 										</colgroup>
 										<thead>
 											<tr>
-												<th>SUN</th>
+												<th class="sun">SUN</th>
 												<th>MON</th>
 												<th>TUE</th>
 												<th>WED</th>
 												<th>THU</th>
 												<th>FRI</th>
-												<th>SAT</th>
+												<th class="sat">SAT</th>
 											</tr>
 										</thead>
 										<tbody id="monthTbody">

BIN
src/main/webapp/images/mo/ico_check_coupon.png


BIN
src/main/webapp/images/mo/ico_check_point.png


+ 3 - 0
src/main/webapp/ux/mo/css/layout_m.css

@@ -803,6 +803,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .cs .fold_head .fold_state{padding:0.2rem 0.3rem;}
 .cs .fold_head .data{font-family: 'LATO', 'Noto Sans kr', sans-serif;}
 .Purchase_pop .select_custom .combo .list>li{padding:1.2rem; line-height:2rem; word-wrap: break-word;}
+<<<<<<< HEAD
 /* 210415 */
 .dp .popup_box .button_list.clear button{width:100% !important;}
 .dp .open_categori a{display: inline-block;font-size: 1.2rem;font-weight: 300;padding-right: 1.4rem;background: url(/images/mo/ico_sort_arrow.png) no-repeat right center;background-size: 0.7rem 0.43rem;}
@@ -814,6 +815,8 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .dp .dp_Bulletship .items_option #filter{font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
 .Purchase_pop .select_custom .combo .list>li[data-soldout="true"]::after{top:1rem}
 
+=======
+>>>>>>> refs/heads/develop
 
 
 

+ 21 - 1
src/main/webapp/ux/mo/css/style24_m.css

@@ -652,7 +652,11 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev .comment .pics {overflow:hidden; /*width: calc((100% - 3.2rem) /4);*/ width: 23%; margin:1%; height:auto; padding-top: 23%; border:none; background: #f5f5f5;}
 .ev .comment .picsThumbs {max-width:100%; max-height:none; width: 100%; height:auto;}
 /* .ev .comment .imgUpload {width: 100%; height:100%;} */
+<<<<<<< HEAD
 .ev .comment .fileAdd {float:left; width: 23%; height:auto; padding-top: 23%; margin:1%;}
+=======
+.ev .comment .fileAdd {width: 23%; height:auto; padding-top: 23%; margin:1%;}
+>>>>>>> refs/heads/develop
 .ev .comment .btn_wrap {padding:2rem 2rem 3rem;}
 .ev .comment .btn_wrap button.btn {width: 100%; padding:1.1rem 0; font-size: 1.4rem; font-weight: 500; height:auto;}
 .ev .comment .nodata {padding:14rem 0; font-size: 1.3rem; color: #888; text-align: center;}
@@ -681,23 +685,39 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .modal.photo_comment_popup .modal-dialog, .modal.photo_comment_popup .modal-content {height: 100%;}
 .modal.photo_comment_popup .modal-body {padding: 5.2rem 0 0; margin:0; height: 100%;}
 .modal.photo_comment_popup .modal-body .pop_cont {height: 100%; overflow:hidden; position: relative; padding-bottom: 13rem;}
+<<<<<<< HEAD
 .modal.photo_comment_popup .modal-body .pop_cont .pop_slide {position: relative; height: 100%; overflow:hidden;}
+=======
+.modal.photo_comment_popup .modal-body .pop_cont .pop_slide {position: relative; height: 100%;}
+>>>>>>> refs/heads/develop
 .modal.photo_comment_popup .modal-body .pop_cont .pop_slide .swiper-container {height: 100%;}
 .modal.photo_comment_popup .modal-body .pop_cont .pop_slide .swiper-pagination-fraction {bottom:2.5rem; width:auto; left: 50%; transform:translateX(-50%); background: rgba(34,34,34,.5); color: #fff; font-weight: 300;padding:0.5rem 0.7rem; line-height: 1; font-size: 1.2rem; border-radius:2rem;}
 .swiper-pagination-current {font-weight: 600;}
 /* .swiper-pagination-current:before {content:'0';} */
+<<<<<<< HEAD
 .modal.photo_comment_popup .pop_detail {position: fixed; left: 0; bottom: 0; width: 100%; z-index: 99; background: #fff;  box-shadow: 0px -14px 17.8px 2.2px rgba(0, 0, 0, 0.04); font-size: 1.3rem;  transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1); }
+=======
+.modal.photo_comment_popup .pop_detail {position: fixed; left: 0; bottom: 0; width: 100%; z-index: 99; background: #fff;  box-shadow: 0px -14px 17.8px 2.2px rgba(0, 0, 0, 0.04); font-size: 1.3rem;  transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1);}
+>>>>>>> refs/heads/develop
 .pop_slide .swiper-slide .img {}
 .pop_slide .swiper-slide img {width: auto; height: auto; max-height: 100%; max-width: 100%; margin: auto 0; position: absolute; top: 50%; bottom: auto; left: 50%; right: 0; transform: translate(-50%, -50%); cursor: pointer;}
 .modal.photo_comment_popup .pop_detail .pop_open_btn {position: absolute; left: 0; top: 0; width: 100%; background: url('/images/mo/ico_pop_arrow.png') no-repeat center; display: block; width: 100%; height: 3rem; background-position:center; background-size:3rem;}
+<<<<<<< HEAD
 .modal.photo_comment_popup .pop_detail .comment_wrap {max-height: 10rem; padding:0 2rem 2rem; margin-top: 3rem; transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1); overflow-y:auto;}
+=======
+.modal.photo_comment_popup .pop_detail .comment_wrap {max-height: 10rem; padding:0 2rem 2rem; margin-top: 3rem; transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1);}
+>>>>>>> refs/heads/develop
 .modal.photo_comment_popup .pop_detail .comment_writer {margin-top: 1.4rem;}
 .modal.photo_comment_popup .pop_detail .comment_writer .writer {margin-right: 1.2rem; padding-right: 1.2rem; border-right:1px solid #ddd; font-size: 1.1rem; color: #666;}
 .modal.photo_comment_popup .pop_detail .comment_writer .date {color: #888; font-size: 1.1rem;}
 
 .modal.photo_comment_popup .pop_detail.active {}
 .modal.photo_comment_popup .pop_detail.active .pop_open_btn {background: url('/images/mo/ico_pop_arrow_on.png') no-repeat center; display: block; width: 100%; height: 3rem; background-position:center; background-size:3rem;}
+<<<<<<< HEAD
 .modal.photo_comment_popup .pop_detail.active .comment_wrap { max-height: 34rem;}
+=======
+.modal.photo_comment_popup .pop_detail.active .comment_wrap {overflow-y:auto; max-height: 34rem;}
+>>>>>>> refs/heads/develop
 .modal.photo_comment_popup .modal-footer {margin-top: 0;}
 
 .paging_wrap {text-align: center; margin-top: 3.6rem;}
@@ -932,7 +952,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .my .lnb_list li a {display: block; padding: 2rem; background: url(/images/mo/ico_lnb_arrow.png) no-repeat right 2rem center; background-size:0.7rem 1.26rem;}
 
 .my .mem_rank {position: relative; padding:1.6rem 0; padding-left: 6rem;}
-.my .mem_rank .mem_name {dib font-size: 1.8rem; font-weight: 300;}
+.my .mem_rank .mem_name {font-size: 1.8rem; font-weight: 300;}
 .my .mem_rank .mem_name strong {font-weight: 500;}
 .my .mem_rank .rank_txt {display: inline-block; font-size: 1.8rem; color: #666; font-weight: 500; padding-right: 1.7rem; background: url(/images/mo/ico_btn_detail03.png) no-repeat right top 5px; background-size:0.7rem 1.3rem;}
 .my .mem_rank .rank_txt02 button {display: inline-block; font-size: 14px; padding-right: 13px; margin-right: 20px; background: url(/images/pc/ico_mysm_arrow.png) no-repeat right top 6px;}