Ver código fonte

Merge branch 'develop' into bin2107

bin2107 5 anos atrás
pai
commit
b01dc1dc19
42 arquivos alterados com 1831 adições e 786 exclusões
  1. 10 20
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  2. 2 2
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  3. 16 24
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  4. 101 10
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  5. 10 5
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  6. 117 111
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  7. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  8. 13 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  9. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  10. 4 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  11. 1 1
      src/main/resources/config/application-tsit.yml
  12. 5 1
      src/main/webapp/WEB-INF/views/mob/error/404Mob.html
  13. 1 0
      src/main/webapp/WEB-INF/views/mob/error/500Mob.html
  14. 39 0
      src/main/webapp/WEB-INF/views/mob/error/InaccessMob.html
  15. 54 9
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  16. 10 19
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html
  17. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb_20210319.html
  18. 2 2
      src/main/webapp/WEB-INF/views/web/common/layout/DefaultLayoutWeb.html
  19. 53 1
      src/main/webapp/WEB-INF/views/web/common/layout/MypageLayoutWeb.html
  20. 5 1
      src/main/webapp/WEB-INF/views/web/error/404Web.html
  21. 39 0
      src/main/webapp/WEB-INF/views/web/error/InaccessWeb.html
  22. 205 0
      src/main/webapp/WEB-INF/views/web/mypage/ChangeOptionPopupFormWeb.html
  23. 55 36
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  24. 251 194
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html
  25. 285 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb_20210330.html
  26. 1 20
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  27. 6 6
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  28. 146 26
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  29. 8 2
      src/main/webapp/WEB-INF/views/web/order/OrderCouponApplyPopWeb.html
  30. 29 37
      src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrAddPopWeb.html
  31. 6 6
      src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrChangePopWeb.html
  32. 105 119
      src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrModifyPopWeb.html
  33. 50 57
      src/main/webapp/WEB-INF/views/web/order/OrderDelvMemoChangePopWeb.html
  34. 135 27
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  35. 1 1
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb_20210317.html
  36. 2 2
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb_20210318.html
  37. 1 1
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb_2021031801.html
  38. 15 15
      src/main/webapp/WEB-INF/views/web/order/OrderPaymentInfoWeb.html
  39. 22 21
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  40. 21 3
      src/main/webapp/biz/mypage.js
  41. 0 0
      src/main/webapp/biz/payment.js
  42. 1 1
      src/main/webapp/ux/style24_link.js

+ 10 - 20
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -336,9 +336,6 @@ public class TsfCartService {
 				if (cart.getTmtbDcAmt() == 0) {
 					cart.setTmtbDcAmt(cart.getCurrPrice());
 				}
-
-				log.info("CHECK TMTB_DC_AMT :::: {} / {}", cart.getCartSq(), cart.getTmtbDcAmt());
-				log.info("CHECK TMTB_INFO   :::: {} / {}", cart.getApplyQtySectionYn(), cart.getApplyAmtSectionYn());
 			}
 		}
 
@@ -664,47 +661,40 @@ public class TsfCartService {
 			lastCompCheck.setAddDelvFeeYn("Y");
 		}
 
+		int wmsSumPrice = 0, wmsMinOrdAmt = 0, wmsDelvFee = 0;
+
 		// 장바구니 업체별 합계 금액으로 무료배송 여부 저장
-		for (Order delv : delvFeeInfo) {
-			for (Order param : params) {
+		for (Order param : params) {
+			// 입점업체 배송비
+			for (Order delv : delvFeeInfo) {
 				if (param.getDelvFeeCd().equals(delv.getDelvFeeCd()) && !"WMS".equals(param.getDelvFeeCd())) {
 					param.setCompCnt(delv.getCompCnt());
 					if (TscConstants.DelvFeeCrite.FREE.value().equals(delv.getDelvFeeCrite())) {
 						param.setDelvFee(0);
-						delv.setFormalGb("TEST1");
 					} else if (TscConstants.DelvFeeCrite.NORMAL.value().equals(delv.getDelvFeeCrite()) && delv.getCompSumPrice() > delv.getMinOrdAmt()) {
 						param.setDelvFee(0);
-						delv.setFormalGb("TEST2");
 					} else {
 						param.setDelvFee(delv.getDelvFee());
-						delv.setFormalGb("TEST3");
 					}
 				}
 			}
-		}
 
-		int wmsSumPrice = 0;
-		for(Order param : params) {
+			// 자사 상품 가격 계산
 			if("WMS".equals(param.getDelvFeeCd())) {
 				if("N".equals(param.getSoldoutYn())) {
 					wmsSumPrice = wmsSumPrice + param.getCurrPrice();
+					wmsMinOrdAmt = param.getMinOrdAmt();
+					wmsDelvFee = param.getDelvFee();
 				}
 			}
 		}
 
-		// 자사 무료배송비 기준 조회
-		Envset wmsDelvFee = new Envset();
-		wmsDelvFee.setSiteCd(TscConstants.Site.STYLE24.value());
-		wmsDelvFee.setEnvsetType("O10");
-		wmsDelvFee = coreEnvsetDao.getEnvset(wmsDelvFee);
-		int wmsLimitDelvFee = Integer.parseInt(wmsDelvFee.getStrSetVal3());
-
 		// 자사 배송비 등록
 		if(params.size() > 0) {
-			if (wmsSumPrice > wmsLimitDelvFee) {
+			if (wmsSumPrice > wmsMinOrdAmt) {
 				order.setWmsDelvFee(0);
 			} else {
-				order.setWmsDelvFee(2500);
+				order.setWmsDelvFee(wmsDelvFee);
 			}
 		}
 	}

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

@@ -65,8 +65,6 @@ public class TsfCouponService {
 	 * @since 2021. 02. 16
 	 */
 	public Coupon serialCpnApplyInfo(Coupon param) {
-
-		// TODO 로그인 정보 입력
 		if (TsfSession.isLogin()) {
 			Login login = TsfSession.getInfo();
 			param.setCustNo(login.getCustNo());
@@ -112,6 +110,8 @@ public class TsfCouponService {
 		}
 
 		Coupon dtData = couponDao.getSerialCpnUseInfo(cpn);
+		cpn.setAvailStdtTime(cpn.getAvailStdt());
+		cpn.setAvailEddtTime(cpn.getAvailEddt());
 		cpn.setAvailStdt(dtData.getAvailStdt());
 		cpn.setAvailEddt(dtData.getAvailEddt());
 

+ 16 - 24
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -116,44 +116,45 @@ public class TsfPlanningService {
 //	}
 
 	/**
-	 * 기획전에 대해 접근여부 체크
+	 * 접근 불가능한 기획전 메시지 조회
 	 * @param planSq - 기획전번호
+	 * @return 접근 불가능 사유 메시지
 	 * @author gagamel
 	 * @since 2021. 3. 30
 	 */
-	public void checkAccessablePlanning(Integer planSq) {
+	public String getInaccessiblePlanningMessage(Integer planSq) {
+		String msg = "";
+
 		Plan plan = new Plan();
 		plan.setPlanSq(planSq);
 
 		// 디바이스접근가능여부 조회
 		plan.setFrontGb(TsfSession.getFrontGb());
 		if ("N".equals(planningDao.getDeviceAccessibleYn(plan))) {
-			String msg = "PC웹에서만 접근이 가능합니다.";
+			msg = "PC웹에서만 접근이 가능합니다.";
 			if ("M".equals(TsfSession.getFrontGb())) {
 				msg = "모바일웹에서만 접근이 가능합니다.";
 			} else if ("A".equals(TsfSession.getFrontGb())) {
 				msg = "앱에서만 접근이 가능합니다.";
 			}
-
-			throw new IllegalArgumentException(msg);
 		}
 
 		// 신규회원접근가능여부 조회
 		if ("N".equals(planningDao.getNewCustomerAccessibleYn(plan))) {
-			throw new IllegalArgumentException("신규회원만 접근 가능합니다.");
+			msg = "신규회원만 접근 가능합니다.";
 		}
 
 		if (TsfSession.isLogin()) {
 			// 고객구분접근가능여부 조회
 			plan.setCustGb(TsfSession.getCustGb());
 			if ("N".equals(planningDao.getCustomerGubunAccessibleYn(plan))) {
-				throw new IllegalArgumentException(TsfSession.getInfo().getCustGbNm() + "만 접근이 가능합니다.");
+				msg = TsfSession.getInfo().getCustGbNm() + "만 접근이 가능합니다.";
 			}
 
 			// 고객등급접근가능여부 조회
 			plan.setCustGrade(TsfSession.getInfo().getCustGrade());
 			if ("N".equals(planningDao.getCustomerGradeAccessibleYn(plan))) {
-				throw new IllegalArgumentException(TsfSession.getInfo().getCustGradeNm() + "만 접근 가능합니다.");
+				msg = TsfSession.getInfo().getCustGradeNm() + " 회원만 접근 가능합니다.";
 			}
 		}
 
@@ -161,26 +162,14 @@ public class TsfPlanningService {
 			// 웹제휴채널접근가능여부 조회
 			plan.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
 			if ("N".equals(planningDao.getAfLinkAccessibleYn(plan))) {
-				throw new IllegalArgumentException(commonDao.getAfLinkName(TsfSession.getAttribute("afLinkCd")) + " 채널만 접근 가능합니다.");
+				msg = commonDao.getAfLinkName(TsfSession.getAttribute("afLinkCd")) + " 채널만 접근 가능합니다.";
 			}
 		}
-	}
-
-	/**
-	 * 기획전 고객등급 목록
-	 *
-	 * @param
-	 * @return
-	 * @author sowon
-	 * @since 2021. 3. 9
-	 */
-	public void accessCustGrade(Plan plan) {
-		if (!TsfSession.isLogin()) {
-			throw new IllegalArgumentException("로그인 후 접근이 가능합니다.");
-		}
 
+		return msg;
 	}
 
+
 	/**
 	 * 기획전 상세 정보
 	 *
@@ -238,7 +227,10 @@ public class TsfPlanningService {
 	 * @since 2021. 3. 22
 	 */
 	public Collection<Plan> getPlanCouponInfo(Coupon coupon) {
-		coupon.setCustNo(TsfSession.getInfo().getCustNo());
+		if (TsfSession.isLogin()) {
+			coupon.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+		
 		return planningDao.getPlanCouponInfo(coupon);
 	}
 

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

@@ -357,15 +357,11 @@ public class TsfMypageController extends TsfBaseController {
 
 		mav.addObject("customerInfo", customer);
 
-		// 주문목록 조회
-		Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
-
-		if (orderList.size() == 0) {
-			mav.setViewName("redirect:/mypage/order/list/form");
-			return mav;
-		}
-
-		mav.addObject("orderList", orderList);
+		// 반품 가능 리스트 조회
+		GagaMap map = orderChangeService.getReturnListForMypage(order);
+		Order oneData = (Order) map.get("oneData");
+		mav.addObject("exchangeList", map);
+		mav.addObject("oneData", oneData);
 
 		// 주문 배송지 정보 조회
 		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
@@ -378,6 +374,36 @@ public class TsfMypageController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 마이페이지 교환 옵션 변경 팝업
+	 *
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 03. 30
+	 */
+	@PostMapping("/change/option/popup/form")
+	@ResponseBody
+	public ModelAndView changeOptionPopupForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		// custNo 설정
+		if (TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			order.setCustNo(0);
+		}
+
+		// 교환 옵션 정보 조회
+		
+
+		// mav.addObject("exchangeOptionInfo", );
+		mav.setViewName(super.getDeviceViewName("mypage/ChangeOptionPopupForm"));
+
+		return mav;
+	}
+	
+
 	/**
 	 * 마이페이지 등급쿠폰 다운 처리
 	 *
@@ -514,6 +540,71 @@ public class TsfMypageController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 반품신청
+	 * 
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 30
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/return")
+	@ResponseBody
+	public GagaMap rtnReq(@RequestBody OrderChange orderChange) {
+		if (orderChange== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// TODO
+		// @ 주문취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+
+		// 1. 세션회원조회
+		int custNo = TsfSession.getInfo().getCustNo();
+		orderChange.setCustNo(custNo);
+
+		// 2. 환불 사전 정보 조회
+		GagaMap refundPreInfo = orderChangeService.getRefundPreInfo(orderChange);
+		List<Order> returnReqList = (List<Order>) refundPreInfo.get("cnclReqList");
+		String allCanYn = refundPreInfo.getString("allCanYn");
+
+		// 2. 환불금액계산
+		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(returnReqList);
+
+		// 3. 주문변경 기본정보 설정
+		result.set("ordNo"			, orderChange.getOrdNo());				// 주문번호
+		result.set("ordChgSq"		, orderChange.getOrdChgSq());			// 주문변경번호
+		result.set("chgReason"		, orderChange.getChgReason());			// 변경사유
+		result.set("chgMemo"		, orderChange.getChgMemo());			// 변경메모
+
+		result.set("accountNo"		, orderChange.getAccountNo());			// 환불계좌번호
+		result.set("accountNm"		, orderChange.getAccountNm());			// 환불계좌예금주명
+		result.set("bankCd"			, orderChange.getBankCd());				// 환불계좌은행코드
+
+		result.set("allCanYn"		, allCanYn);							// 무통장입금전 전체취소 여부 
+		result.set("isCustomer"		, orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
+		result.set("wdGb"			, orderChange.getWdGb());				// 회수방법
+
+		// 4. 주문변경 회수지정보 추가
+		result.set("chgerNm"		, orderChange.getChgerNm());			// 변경자명
+		result.set("chgerEmail"		, orderChange.getChgerEmail());			// 변경자이메일주소
+		result.set("chgerZipcode"	, orderChange.getChgerZipcode());		// 회수지우편번호
+		result.set("chgerBaseAddr"	, orderChange.getChgerBaseAddr());		// 회수지기본주소
+		result.set("chgerDtlAddr"	, orderChange.getChgerDtlAddr());		// 회수지상세주소
+		result.set("chgerPhnno"		, orderChange.getChgerPhnno());			// 변경자핸드폰번호
+		result.set("chgerTelno"		, orderChange.getChgerTelno());			// 변경자전화번호
+		result.set("chgerRtnMemo"	, orderChange.getChgerRtnMemo());		// 반품메모
+
+		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
+		coreOrderChangeService.rtnReq(result, custNo);
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", "반품 신청이 접수되었습니다.");
+
+		return result;
+	}
+
 	/**
 	 * 마이페이지 취소신청 화면
 	 *
@@ -872,7 +963,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * 마이페이지 리뷰화면
 	 *
 	 * @return
-	 * @author sowon	
+	 * @author sowon
 	 * @since 2021. 03. 24
 	 */
 	@GetMapping("/review/form")

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

@@ -2,6 +2,7 @@ package com.style24.front.biz.web;
 
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
@@ -125,10 +126,16 @@ public class TsfPlanningController extends TsfBaseController {
 	@GetMapping("/detail/form")
 	@ResponseBody
 	public ModelAndView PlanningDetailForm(@RequestParam(value = "planSq") int planSq) {
-		// 기획전 접근가능여부 체크
-		planningService.checkAccessablePlanning(planSq);
-
 		ModelAndView mav = new ModelAndView();
+
+		// 접근 불가능한 기획전 메시지 조회
+		String inaccessibleMsg = planningService.getInaccessiblePlanningMessage(planSq);
+		if (StringUtils.isNotBlank(inaccessibleMsg)) {
+			mav.addObject("inaccessibleMsg", inaccessibleMsg);
+			mav.setViewName(super.getDeviceViewName("error/Inaccess"));
+			return mav;
+		}
+
 		Plan plan = new Plan();
 		Review review = new Review();
 		Coupon coupon = new Coupon();
@@ -144,8 +151,6 @@ public class TsfPlanningController extends TsfBaseController {
 		review.setPlanSq(planSq);
 		coupon.setPlanSq(planSq);
 
-		planningService.accessCustGrade(plan);
-		// 이거 access로 옮겨야 하나..?
 		//plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setFrontGb(TsfSession.getFrontGb());
 

+ 117 - 111
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -513,6 +513,8 @@
 			 , Z.GOODS_TYPE
 			 , Z.SUPPLY_COMP_CD
 			 , Z.DELV_FEE_CD
+		     , Z.MIN_ORD_AMT
+		     , Z.DELV_FEE
 			 , Z.CART_DELV_FEE_CD
 			 , (Z.CURR_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS CURR_PRICE
 			 , (Z.LIST_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS LIST_PRICE
@@ -521,119 +523,121 @@
 					ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
 			 , SYS_IMG_NM
 		FROM   (SELECT C.CART_SQ
-					 , C.GOODS_CD
-					 , C.GOODS_QTY
-					 , CD.ITEM_CD
-					 , CD.OPT_CD
-					 , CD.ITEM_QTY
-					 , CD.CART_DTL_SQ
-					 , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(O.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), O.OPT_CD1) AS COLOR_NM
+		             , C.GOODS_CD
+		             , C.GOODS_QTY
+		             , CD.ITEM_CD
+		             , CD.OPT_CD
+		             , CD.ITEM_QTY
+		             , CD.CART_DTL_SQ
+		             , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(O.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), O.OPT_CD1) AS COLOR_NM
 		             , O.OPT_CD1
-					 , O.OPT_CD2
-					 , G.GOODS_TYPE
-					 , G.SUPPLY_COMP_CD
-					 , G.GOODS_NM
-					 , G.BRAND_CD
-					 , G.PNT_PRATE
-					 , G.PNT_MRATE
-					 , STOCK.SOLDOUT_YN
-					 , FN_GET_APPLY_CPN1_PRICE(C.GOODS_CD, #{frontGb}) AS CURR_PRICE
+		             , O.OPT_CD2
+		             , G.GOODS_TYPE
+		             , G.SUPPLY_COMP_CD
+		             , G.GOODS_NM
+		             , G.BRAND_CD
+		             , G.PNT_PRATE
+		             , G.PNT_MRATE
+		             , STOCK.SOLDOUT_YN
+		             , FN_GET_APPLY_CPN1_PRICE(C.GOODS_CD, #{frontGb}) AS CURR_PRICE
 		             , G.LIST_PRICE
-					 , IFNULL(O.ADD_PRICE, 0) AS OPT_ADD_PRICE
-					 , BR.BRAND_ENM
-					 , BR.BRAND_KNM
-					 , CT.CUST_GRADE
-					 , CASE WHEN GOG.CUST_GRADE IS NOT NULL AND GOG.CUST_GRADE = IFNULL(CT.CUST_GRADE, '') THEN GOG.CUST_GRADE
-							WHEN GOG.CUST_GRADE IS NOT NULL THEN 'NO'
-							ELSE CT.CUST_GRADE END AS ORDER_GRADE
-					 , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
-					 , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CD.ITEM_CD) AS ITEM_NM
-					 , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
-							ELSE DFP.DELV_FEE_CD END AS DELV_FEE_CD
-					 , CASE WHEN GQDS.GOODS_CD IS NULL AND G.SELF_GOODS_YN = 'Y' THEN 'SHOT'
-							WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
-							ELSE DFP.DELV_FEE_CD END AS CART_DELV_FEE_CD
-					 , CASE WHEN C.CUST_NO > 0 AND (SELECT IFNULL(SUM(OD.ORD_QTY), 0)
-													FROM   TB_ORDER_DETAIL OD
-													INNER  JOIN TB_ORDER O
-													ON     OD.ORD_NO = O.ORD_NO
-													WHERE  O.CUST_NO = C.CUST_NO
-													AND    OD.ORD_EXCH_GB = 'O'
-													AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_00'
-													AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_98'
-													AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_99'
-													AND    OD.GOODS_CD = C.GOODS_CD
-													AND    DATE(ORD_DT) = CURRENT_DATE) + C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END CUST_TODAY_ORD
-					 , CASE WHEN C.CUST_NO = 0 AND C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END AS NOCUST_TODAY_ORD
-					 /*, CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
-							ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM*/
-					 /* , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM */
-					 , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
-							ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
-				FROM   TB_CART C
-				INNER  JOIN TB_CART_DETAIL CD
-				ON     C.CART_SQ = CD.CART_SQ
-				INNER  JOIN TB_GOODS G
-				ON     C.GOODS_CD = G.GOODS_CD
-				INNER  JOIN TB_BRAND BR 
-				ON     G.BRAND_CD = BR.BRAND_CD
-				INNER  JOIN TB_DELV_FEE_POLICY DFP
-				ON     G.DELV_FEE_CD = DFP.DELV_FEE_CD
-				INNER  JOIN TB_OPTION O
-				ON     CD.ITEM_CD = O.GOODS_CD
-				AND    CD.OPT_CD = O.OPT_CD
-				INNER  JOIN (   SELECT A.CART_SQ
-									 , MAX(A.SOLDOUT_YN) AS SOLDOUT_YN
-								FROM   (SELECT C.CART_SQ
-											 , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY * GC.QTY THEN 'N'
-													ELSE 'Y' END AS SOLDOUT_YN
-										FROM   TB_CART C
-										INNER  JOIN TB_CART_DETAIL CD
-										ON	 C.CART_SQ = CD.CART_SQ
-										INNER  JOIN TB_GOODS G
-										ON	 C.GOODS_CD = G.GOODS_CD
-										INNER  JOIN TB_GOODS_COMPOSE GC
-										ON	 C.GOODS_CD = GC.GOODS_CD
-										AND	CD.ITEM_CD = GC.COMPS_GOODS_CD
-										INNER  JOIN VW_STOCK VS
-										ON	 CD.ITEM_CD = VS.GOODS_CD
-										AND	CD.OPT_CD = VS.OPT_CD
-										WHERE  1=1
-										AND	C.CART_GB = 'G026_BC'
-										AND	G.GOODS_STAT = 'G008_90'
-										AND	G.SELF_MALL_YN = 'Y'
-										<if test="custNo == 0">
-											AND	C.CUST_NO = 0
-											AND	C.JSESSION_ID = #{jsessionId}
-										</if>
-										<if test="custNo != 0">
-											AND	C.CUST_NO = #{custNo}
-										</if>
-										UNION ALL
-										SELECT C.CART_SQ
-											 , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY THEN 'N'
-													ELSE 'Y' END AS SOLDOUT_YN
-										FROM   TB_CART C
-										INNER  JOIN TB_CART_DETAIL CD
-										ON	 C.CART_SQ = CD.CART_SQ
-										INNER  JOIN TB_GOODS G
-										ON	 C.GOODS_CD = G.GOODS_CD
-										INNER  JOIN VW_STOCK VS
-										ON	 C.GOODS_CD = VS.GOODS_CD
-										AND	CD.OPT_CD = VS.OPT_CD
-										WHERE  1=1
-										AND	C.CART_GB = 'G026_BC'
-										AND	G.GOODS_STAT = 'G008_90'
-										AND	G.SELF_MALL_YN = 'Y'
-										<if test="custNo == 0">
-											AND	C.CUST_NO = 0
-											AND	C.JSESSION_ID = #{jsessionId}
-										</if>
-										<if test="custNo != 0">
-											AND	C.CUST_NO = #{custNo}
-										</if>
-									   ) A
-								GROUP  BY  A.CART_SQ
+		             , IFNULL(O.ADD_PRICE, 0) AS OPT_ADD_PRICE
+		             , BR.BRAND_ENM
+		             , BR.BRAND_KNM
+		             , CT.CUST_GRADE
+		             , DFP.MIN_ORD_AMT
+		             , DFP.DELV_FEE
+		             , CASE WHEN GOG.CUST_GRADE IS NOT NULL AND GOG.CUST_GRADE = IFNULL(CT.CUST_GRADE, '') THEN GOG.CUST_GRADE
+		                    WHEN GOG.CUST_GRADE IS NOT NULL THEN 'NO'
+		                    ELSE CT.CUST_GRADE END AS ORDER_GRADE
+		             , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
+		             , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CD.ITEM_CD) AS ITEM_NM
+		             , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
+		                    ELSE DFP.DELV_FEE_CD END AS DELV_FEE_CD
+		             , CASE WHEN GQDS.GOODS_CD IS NULL AND G.SELF_GOODS_YN = 'Y' THEN 'SHOT'
+		                    WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
+		                    ELSE DFP.DELV_FEE_CD END AS CART_DELV_FEE_CD
+		             , CASE WHEN C.CUST_NO > 0 AND (SELECT IFNULL(SUM(OD.ORD_QTY), 0)
+		                                            FROM   TB_ORDER_DETAIL OD
+		                                            INNER  JOIN TB_ORDER O
+		                                            ON     OD.ORD_NO = O.ORD_NO
+		                                            WHERE  O.CUST_NO = C.CUST_NO
+		                                            AND    OD.ORD_EXCH_GB = 'O'
+		                                            AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_00'
+		                                            AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_98'
+		                                            AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_99'
+		                                            AND    OD.GOODS_CD = C.GOODS_CD
+		                                            AND    DATE(ORD_DT) = CURRENT_DATE) + C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END CUST_TODAY_ORD
+		             , CASE WHEN C.CUST_NO = 0 AND C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END AS NOCUST_TODAY_ORD
+		             /*, CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
+		            		ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM*/
+		             /* , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM */
+		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
+		            		ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
+		        FROM   TB_CART C
+		        INNER  JOIN TB_CART_DETAIL CD
+		        ON     C.CART_SQ = CD.CART_SQ
+		        INNER  JOIN TB_GOODS G
+		        ON     C.GOODS_CD = G.GOODS_CD
+		        INNER  JOIN TB_BRAND BR
+		        ON     G.BRAND_CD = BR.BRAND_CD
+		        INNER  JOIN TB_DELV_FEE_POLICY DFP
+		        ON     G.DELV_FEE_CD = DFP.DELV_FEE_CD
+		        INNER  JOIN TB_OPTION O
+		        ON     CD.ITEM_CD = O.GOODS_CD
+		        AND    CD.OPT_CD = O.OPT_CD
+		        INNER  JOIN (   SELECT A.CART_SQ
+		                             , MAX(A.SOLDOUT_YN) AS SOLDOUT_YN
+		                        FROM   (SELECT C.CART_SQ
+		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY * GC.QTY THEN 'N'
+		                                            ELSE 'Y' END AS SOLDOUT_YN
+		                                FROM   TB_CART C
+		                                INNER  JOIN TB_CART_DETAIL CD
+		                                ON     C.CART_SQ = CD.CART_SQ
+		                                INNER  JOIN TB_GOODS G
+		                                ON     C.GOODS_CD = G.GOODS_CD
+		                                INNER  JOIN TB_GOODS_COMPOSE GC
+		                                ON     C.GOODS_CD = GC.GOODS_CD
+		                                AND    CD.ITEM_CD = GC.COMPS_GOODS_CD
+		                                INNER  JOIN VW_STOCK VS
+		                                ON     CD.ITEM_CD = VS.GOODS_CD
+		                                AND	CD.OPT_CD = VS.OPT_CD
+		                                WHERE  1=1
+		                                AND	C.CART_GB = 'G026_BC'
+		                                AND	G.GOODS_STAT = 'G008_90'
+		                                AND	G.SELF_MALL_YN = 'Y'
+		                                <if test="custNo == 0">
+		                                AND	C.CUST_NO = 0
+		                                AND	C.JSESSION_ID = #{jsessionId}
+		                                </if>
+		                                <if test="custNo != 0">
+		                                AND	C.CUST_NO = #{custNo}
+		                                </if>
+		                                UNION ALL
+		                                SELECT C.CART_SQ
+		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY THEN 'N'
+		                                            ELSE 'Y' END AS SOLDOUT_YN
+		                                FROM   TB_CART C
+		                                INNER  JOIN TB_CART_DETAIL CD
+		                                ON     C.CART_SQ = CD.CART_SQ
+		                                INNER  JOIN TB_GOODS G
+		                                ON     C.GOODS_CD = G.GOODS_CD
+		                                INNER  JOIN VW_STOCK VS
+		                                ON     C.GOODS_CD = VS.GOODS_CD
+		                                AND    CD.OPT_CD = VS.OPT_CD
+		                                WHERE  1=1
+		                                AND    C.CART_GB = 'G026_BC'
+		                                AND    G.GOODS_STAT = 'G008_90'
+		                                AND    G.SELF_MALL_YN = 'Y'
+		                                <if test="custNo == 0">
+		                                AND    C.CUST_NO = 0
+		                                AND    C.JSESSION_ID = #{jsessionId}
+		                                </if>
+		                                <if test="custNo != 0">
+		                                AND    C.CUST_NO = #{custNo}
+		                                 </if>
+		                               ) A
+		                        GROUP  BY  A.CART_SQ
 		               ) STOCK
 		        ON     C.CART_SQ = STOCK.CART_SQ
 		        LEFT   OUTER JOIN TB_CUSTOMER CT
@@ -676,6 +680,8 @@
 		     , Z.LIST_PRICE
 		     , Z.SUPPLY_COMP_NM
 		     , Z.DELV_FEE_CD
+		     , Z.MIN_ORD_AMT
+		     , Z.DELV_FEE
 		     , Z.CART_DELV_FEE_CD
 		     , Z.CURR_PRICE
 		     , Z.PNT_PRATE

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

@@ -38,6 +38,7 @@
 		     , CP.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
 			 , RC.RD_CPN_NM
 		     , RC.RD_CPN_ID

+ 13 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -62,6 +62,7 @@
 		     , Z.PURCHASE_CONFIRM_DAY
 		     , Z.DELV_RES_DT
 		     , Z.ORD_REQ_CHG_QTY
+		     , Z.ORD_CAN_CHG_QTY
 		     , Z.BANK_CD
 		     , Z.ACCOUNT_NO
 		     , Z.ACCOUNT_NM
@@ -116,6 +117,7 @@
 					 , TIMESTAMPDIFF(DAY, NOW(), OD.DELV_EDDT + INTERVAL 2 WEEK)		AS PURCHASE_CONFIRM_DAY
 					 , DATE_FORMAT(GRS.DELV_RES_DT, '%Y.%m.%d') AS DELV_RES_DT
 					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_CAN_CHG_QTY
 					 , CA.BANK_CD
 					 , CA.ACCOUNT_NO
 					 , CA.ACCOUNT_NM
@@ -143,8 +145,16 @@
 									 FROM TB_ORDER_CHANGE_DETAIL OCD
 									INNER JOIN TB_ORDER_DETAIL OD
 									   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
-									WHERE OD.ORD_NO = #{ordNo}
-									  AND OCD.DEL_YN = 'N'
+									WHERE OCD.DEL_YN = 'N'
+		<if test="ordNo != null and ordNo != ''">
+									  AND OD.ORD_NO = #{ordNo}
+		</if>
+		<if test="ordNoList != null">
+									  AND OD.ORD_NO IN
+			<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
 									  AND OCD.CHG_STAT IN ('G685_20', 'G685_30', 'G685_33', 'G685_40')
 									GROUP BY OCD.ORD_DTL_NO
 								  ) OCD
@@ -187,7 +197,7 @@
 				, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
 				, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.SHIP_COMP_CD, Z.GIFT_PACK_YN, Z.SHIP_COMP_NM, Z.INVOICE_NO
 				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.ORD_DTL_STAT_NM, Z.REVIEW_SQ
-				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM
+				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD
 	</select>
 

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

@@ -410,8 +410,8 @@
 			 , CPH.ORD_DTL_NO
 			 , SUM(CPH.PNT_AMT) AS PNT_AMT
 		  FROM TB_CUST_POINT_HST CPH
-		  INNER JOIN TB_CUST_POINT CP
-		  ON CP.CUST_PNT_SQ = CPH.CUST_PNT_SQ
+		 INNER JOIN TB_CUST_POINT CP
+		    ON CP.CUST_PNT_SQ = CPH.CUST_PNT_SQ
 		 WHERE CPH.CUST_NO = #{custNo}
 		   AND CPH.ORD_NO = #{ordNo}
 		<if test="ordDtlNoArr != null">

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

@@ -589,8 +589,10 @@
 	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
 		/* TsfPlanning.templateDispOrdInfo*/
 		SELECT F.*
+		<if test="planSq != null and planSq != ''">
 		      ,(CASE F.CPN_ID WHEN (SELECT CPN_ID FROM TB_CUST_COUPON C WHERE C.CPN_ID = F.CPN_ID AND CUST_NO = #{custNo})THEN '받기완료'
 		        ELSE '쿠폰받기' END ) AS COUPON_STAT
+		</if>
 		FROM
 		(
 			SELECT  PC.PLAN_CONT_SQ 
@@ -637,7 +639,9 @@
 			FROM TB_PLAN_CONTENTS PC INNER JOIN TB_PLAN_CONTENTS_ITEM PCI ON PC.PLAN_CONT_SQ = PCI.PLAN_CONT_SQ 
 			  						 INNER JOIN TB_COUPON TC ON PCI.ITEM_VAL = TC.CPN_ID 
 			WHERE 1=1 
+			<if test="planSq != null and planSq != ''">
 				AND PC.PLAN_SQ = #{planSq}
+			</if>
 				AND PC.TMPL_TYPE = 'G082_20'
 				AND PC.DISP_YN ='Y'
 				AND NOW() BETWEEN TC.AVAIL_STDT AND TC.AVAIL_EDDT

+ 1 - 1
src/main/resources/config/application-tsit.yml

@@ -36,7 +36,7 @@ upload:
         target.path: /TSIT/servers/files/data/goods
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //tdimage.style24.com/Upload/ProductImage
+        view: //image.istyle24.com/Upload/ProductImage
     image:
         target.path: /TSIT/servers/files/data
         max.size: 10

+ 5 - 1
src/main/webapp/WEB-INF/views/mob/error/404Mob.html

@@ -53,7 +53,7 @@
 				<p class="none_m">방문하시려는 페이지의 주소가 잘못 입력되었거나,<br>페이지의 주소가 변경 혹은 삭제되어 요청하신 페이지를 찾을 수 없습니다. </p>
 				<p>입력하신 주소가 정확한지<br/> 다시 한 번 확인해 주시기 바랍니다</p>
 				<p class="none_pc">
-					서비스 이용 중 문의사항이나 불편하셨던 점은 <br/><a class="none_pc"  href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);">고객센터</a>를 이용해주세요. 감사합니다.
+					서비스 이용 중 문의사항이나 불편하셨던 점은 <br/><a class="none_pc"  href="javascript:void(0);" onclick="fnGoToFaq();">고객센터</a>를 이용해주세요. 감사합니다.
 				</p>
 			</div>
 			<div class="btn_group">
@@ -67,6 +67,10 @@
 	let fnGoToHome = function() {
 		document.location.href = '/';
 	}
+	
+	let fnGoToFaq = function() {
+		document.location.href = '/callcenter/faq/form';
+	}
 </script>
 
 </body>

+ 1 - 0
src/main/webapp/WEB-INF/views/mob/error/500Mob.html

@@ -59,5 +59,6 @@
 		</div>
 	</div>
 	<!-- // container -->
+
 </body>
 </html>

Diferenças do arquivo suprimidas por serem muito extensas
+ 39 - 0
src/main/webapp/WEB-INF/views/mob/error/InaccessMob.html


+ 54 - 9
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -469,10 +469,10 @@
 							</p>
 						</div>
 						<p class="cp_date">
-							<span>2021.01.01</span>&nbsp;~&nbsp;<span>2021.12.30</span>
+							<span class="availStdt">2021.01.01</span>&nbsp;~&nbsp;<span class="availEddt">2021.12.30</span>
 						</p>
 					</div>
-					<button type="button" class="btn_underline" id="btn_couponInfo_pop">
+					<button type="button" class="btn_underline" id="btn_cartCouponInfo_pop">
 						<span>사용안내</span>
 					</button>
 				</div>
@@ -489,6 +489,49 @@
 	<!-- 즉시구매 form -->
 	<form id="cartInfoForm" method="post" action="/order/noMember"></form>
 
+	<!-- 쿠폰사용안내 팝업 -->
+	<div class="modal fade couponInfo_pop cartCpnInfoModal" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<div class="modal-header">
+					<h5 class="modal-title" id="couponInfoLabel">aa</h5>
+				</div>
+				<div class="modal-body">
+					<div class="pop_cont">
+						<dl>
+							<div class="cartCpnCondition">
+								<dt>사용조건</dt>
+								<dd class="cpnCondition">
+									<span>9,999,999</span>원 이상 구매 시 최대 <span>9,999,999</span>원 할인
+								</dd>
+							</div>
+							<div>
+								<dt>발급수량</dt>
+								<dd>
+									1인 최대<span>9,999</span>매
+								</dd>
+							</div>
+							<div>
+								<dt>유효기간</dt>
+								<dd>
+									<span>2020.09.21 23:59</span>&nbsp;~&nbsp;<span>2020.09.21 23:59</span>
+								</dd>
+							</div>
+							<div>
+								<dt>대상조건</dt>
+								<dd>
+									카테고리명 / 브랜드명 / 상품명 등 (일부 품목 제외)
+								</dd>
+							</div>
+						</dl>
+					</div>
+				</div>
+			</div>
+		</div>
+		<a href="#close-modal" rel="modal:close" id="couponInfoPop_close" class="close-modal">Close</a>
+	</div>
+	<!-- //쿠폰사용안내 팝업 -->
+
 	<script th:inline="javascript">
 		let sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 		let totDcAmt = [[${order.totDcAmt}]];
@@ -798,6 +841,14 @@
 						} else if (result.serialCpnInfo.dcWay == "G240_11") {
 							$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + result.serialCpnInfo.dcVal + "%</em>");
 						}
+
+
+						$(".cartCpnInfoModal .modal-header").html('<h5 class="modal-title" id="couponInfoLabel">' + result.serialCpnInfo.cpnNm + '</h5>');
+						$(".cartCpnInfoModal .cartCpnCondition").html('<h5 class="modal-title" id="couponInfoLabel">' + result.serialCpnInfo.cpnNm + '</h5>');
+
+
+
+
 					} else {
 						mcxDialog.alert(result.serialCpnInfo.result);
 					}
@@ -886,12 +937,6 @@
 			});
 		}
 
-		//쿠폰사용안내 팝업열기
-		$(document).on('click','#btn_cpinfo_pop',function(e){
-			$("#cpinfoPop").modal("show");
-			return false;
-		});
-
 		$("input[name=cartSqArr]").on("change", function(e) {
 			let cartArr = [];
 
@@ -1056,7 +1101,7 @@
 						}
 
 						if(delv.delvFee == 0) {
-							$(".delvList").find(".delv_" + delv.delvFeeCd).html("<span class='dlvr_fee'>배송비 무료</span>");
+							$(".delvList").find(".delv_" + delv.delvFeeCd).html("<span class='dlvr_fee'>배송비 무료</span><span class='dlvr_fee'><em>" + delv.supplyCOmpNm + "</em> 업체직배송</span>");
 						} else {
 							let html = "<div className='order_delivery'><span class='dlvr_fee'>배송비 <em>" + Number(delv.delvFee).toLocaleString() + "</em>원</span><span class='dlvr_shop'><em>" + delv.supplyCompNm + "</em> 업체직배송</span><a href='#' className='btn_popup_save'>배송비 SAVE 상품 보기</a></div>";
 							$(".delvList").find(".delv_" + delv.delvFeeCd).html(html);

+ 10 - 19
src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html

@@ -23,7 +23,7 @@
 
     <!-- payment.js -->
     <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
-    <script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+    <script type="text/javascript" src="/biz/payment.js"></script>
 
 	<!--  container -->
 	<div id="container" class="container od">
@@ -257,24 +257,6 @@
 	</div>
 	<!-- // container -->
 
-<!-- 쿠폰사용안내 팝업 -->
-<div class="modal fade od_pop cpinfo_pop" id="cpinfoPop" tabindex="-1" role="dialog" aria-labelledby="cpinfoLabel" aria-hidden="true">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title" id="cpinfoLabel">쿠폰사용안내</h5>
-            </div>
-            <div class="modal-body">
-                <div class="pop_cont">
-                    쿠폰사용안내 내용입니다.
-                </div>
-            </div>
-            <div class="modal-footer"></div>
-        </div>
-    </div>
-</div>
-<!-- //쿠폰사용안내 팝업 -->
-
 <script src="/ux/pc/js/swiper.min.js"></script>
 <link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
 
@@ -321,6 +303,15 @@
         return false;
     });
 
+	//팝업 - 쿠폰사용안내
+	$(document).on('click','#btn_cartCouponInfo_pop',function(e){
+		$(".cartCpnInfoModal").modal("show");
+		return false;
+	});
+	$("#couponInfoPop_close").click(function() {
+		$(".cartCpnInfoModal").modal("hide");
+	});
+
 	//수량조절 이벤트
 	$(document).on('click','.optModify_pop .number_count .minus',function(e){
 		var $input = $(this).parent().find('input');

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

@@ -23,7 +23,7 @@
 
     <!-- payment.js -->
     <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
-    <script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+    <script type="text/javascript" src="/biz/payment.js"></script>
 
     <!--  container -->
     <div id="container" class="container od">

+ 2 - 2
src/main/webapp/WEB-INF/views/web/common/layout/DefaultLayoutWeb.html

@@ -15,6 +15,8 @@
 	
 <th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 
+<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
+
 <!-- GNB -->
 <header id="header" th:replace="~{web/common/fragments/GnbWeb :: gnb}"></header>
 <!--// GNB -->
@@ -26,8 +28,6 @@
 <!-- Footer -->
 <footer id="footer" th:replace="~{web/common/fragments/FooterWeb :: footer}"></footer>
 
-<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
-
 <script th:inline="javascript">
 /*<![CDATA[*/
 	$(document).ready(function() {

+ 53 - 1
src/main/webapp/WEB-INF/views/web/common/layout/MypageLayoutWeb.html

@@ -36,8 +36,60 @@
 <!-- Footer -->
 <footer id="footer" th:replace="~{web/common/fragments/FooterWeb :: footer}"></footer>
 
+<!---------------------------------------- 팝업영역 -------------------------------->
+<!-- 배송지변경 팝업 -->
+<div class="modal fade adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송지변경 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="adrsChangePop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송지변경 팝업 -->
+<!-- 배송지추가 팝업 -->
+<div class="modal fade adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송지추가 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="adrsAddPop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송지추가 팝업 -->
+<!-- 배송지수정 팝업 -->
+<div class="modal fade adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송지수정 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="adrsModifyPop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송지수정 팝업 -->
+<!-- 배송요청사항수정 팝업 -->
+<div class="modal fade rqstModify_pop" id="rqstModifyPop" tabindex="-1" role="dialog" aria-labelledby="rqstModifyLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송요청사항수정 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="rqstModifyPop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송요청사항수정 팝업 -->
+<!--교환상품 옵션변경 팝업 -->
+<div class="modal fade exchange_pop" id="exchangePop" tabindex="-1" role="dialog" aria-labelledby="exchangeLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!--교환상품 옵션변경 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="exchangePop_close" class="close-modal">Close</a>
+</div>
+<!-- //교환상품 옵션변경 팝업 -->
+
 <th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
-<script th:src="@{'/ux/pc/js/mypage.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/pc/js/mypage.js"></script>
+<script th:src="@{'/biz/mypage.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/mypage.js"></script>
 
 <script th:inline="javascript">
 /*<![CDATA[*/

+ 5 - 1
src/main/webapp/WEB-INF/views/web/error/404Web.html

@@ -53,7 +53,7 @@
 				<p class="none_m">방문하시려는 페이지의 주소가 잘못 입력되었거나,<br/>페이지의 주소가 변경 혹은 삭제되어 요청하신 페이지를 찾을 수 없습니다. </p>
 				<p>입력하신 주소가 정확한지 다시 한 번 확인해 주시기 바랍니다.</p>
 				<p class="none_m">
-					서비스 이용 중 문의사항이나 불편하셨던 점은 <a class="none_m"  href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);">고객센터</a>를 이용해주세요. 감사합니다.
+					서비스 이용 중 문의사항이나 불편하셨던 점은 <a class="none_m"  href="javascript:void(0);" onclick="fnGoToFaq();">고객센터</a>를 이용해주세요. 감사합니다.
 				</p>
 			</div>
 			<div class="btn_group">
@@ -67,6 +67,10 @@
 	let fnGoToHome = function() {
 		document.location.href = '/';
 	}
+	
+	let fnGoToFaq = function() {
+		document.location.href = '/callcenter/faq/form';
+	}
 </script>
 
 </body>

Diferenças do arquivo suprimidas por serem muito extensas
+ 39 - 0
src/main/webapp/WEB-INF/views/web/error/InaccessWeb.html


+ 205 - 0
src/main/webapp/WEB-INF/views/web/mypage/ChangeOptionPopupFormWeb.html

@@ -0,0 +1,205 @@
+<!-- 배송지변경 팝업 -->
+<div class="modal-header">
+	<h5 class="modal-title" id="exchangeLabel">교환상품 옵션 변경</h5>
+</div>
+<div class="modal-body">
+	<div class="pop_cont">
+		<form class="form_wrap">
+			<div class="select_option_area">
+				<h6>옵션 변경 상품 선택</h6>
+				<div class="form_field">
+					<div>
+						<input id="chk_exchange_item1" name="chk_exchange_item" type="checkbox" checked=""><label for="chk_exchange_item1"><span>슬림핏 체크 네이비컬러 스탠드카라 셋업수트 자켓 / Black</span></label>
+					</div>
+					<div>
+						<input id="chk_exchange_item2" name="chk_exchange_item" type="checkbox"><label for="chk_exchange_item2"><span>베이직 셔츠 / Green</span> </label>
+					</div>
+					<div>
+						<input id="chk_exchange_item3" name="chk_exchange_item" type="checkbox"><label for="chk_exchange_item3"><span>체크 베이직 셔츠 / Green / M</span></label>
+					</div>
+				</div>
+			</div>
+			<div class="modify_option_area">
+				<div class="modify_box">
+					<div class="name_blk">
+						슬림핏 체크 네이비컬러 스탠드카라 셋업수트 자켓 / Black
+					</div>
+					<div class="select_blk">
+						<!-- 옵션교환 라디오 형태 -->
+						<div class="sel_radio">
+							<div class="form_field">
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize11" value="" checked="">
+									<label for="rdi-modifysize11"><span>90</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize12" value="" disabled="">
+									<label for="rdi-modifysize12"><span>95</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize13" value="">
+									<label for="rdi-modifysize13"><span>100</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize14" value="">
+									<label for="rdi-modifysize14"><span>105</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize15" value="">
+									<label for="rdi-modifysize15"><span>110</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize16" value="">
+									<label for="rdi-modifysize16"><span>115</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize17" value="">
+									<label for="rdi-modifysize17"><span>free</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize18" value="">
+									<label for="rdi-modifysize18"><span>size1</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize1" id="rdi-modifysize19" value="">
+									<label for="rdi-modifysize19"><span>size2</span></label>
+								</div>
+							</div>
+						</div>
+						<!-- //옵션교환 라디오 형태 -->
+						<!-- 옵션교환 셀렉트박스 형태 -->
+						<div class="sel_select">
+							<div class="form_field">
+								<div class="select_custom exchange_option1">
+									<div class="combo">
+										<div class="select">옵션 선택</div>
+										<ul class="list">
+											<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
+											<li class="selected">옵션 선택</li>
+											<li>상품옵션01</li>
+											<li>상품옵션02</li>
+											<li>상품옵션03</li>
+											<li aria-disabled="true">상품옵션04</li>
+											<li>상품옵션05</li>
+											<li aria-disabled="true" data-soldout="true">상품옵션06</li>
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+						<!-- //옵션교환 셀렉트박스 형태 -->
+					</div>
+					<div class="allcheck_blk">
+						<div class="form_field">
+							<div>
+								<input id="chk_exchange_all1" name="chk_exchange_all1" type="checkbox" checked=""><label for="chk_exchange_all1"><span>선택 옵션으로 전체 교환</span></label>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="modify_box">
+					<div class="name_blk">
+						베이직 셔츠 / Green
+					</div>
+					<div class="select_blk">
+						<!-- 옵션교환 라디오 형태 -->
+						<div class="sel_radio">
+							<div class="form_field">
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize21" value="" checked="">
+									<label for="rdi-modifysize21"><span>90</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize22" value="" disabled="">
+									<label for="rdi-modifysize22"><span>95</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize23" value="">
+									<label for="rdi-modifysize23"><span>100</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize24" value="">
+									<label for="rdi-modifysize24"><span>105</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize25" value="">
+									<label for="rdi-modifysize25"><span>110</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize26" value="">
+									<label for="rdi-modifysize26"><span>115</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize27" value="">
+									<label for="rdi-modifysize27"><span>free</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize28" value="">
+									<label for="rdi-modifysize28"><span>size1</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-modifysize2" id="rdi-modifysize29" value="">
+									<label for="rdi-modifysize29"><span>size2</span></label>
+								</div>
+							</div>
+						</div>
+						<!-- //옵션교환 라디오 형태 -->
+					</div>
+					<div class="allcheck_blk">
+						<div class="form_field">
+							<div>
+								<input id="chk_exchange_all2" name="chk_exchange_all2" type="checkbox" checked=""><label for="chk_exchange_all2"><span>선택 옵션으로 전체 교환</span></label>
+							</div>
+						</div>
+					</div>
+				</div>
+
+				<div class="modify_box">
+					<div class="name_blk">
+						체크 베이직 셔츠 / Green
+					</div>
+					<div class="select_blk">
+						<!-- 옵션교환 셀렉트박스 형태 -->
+						<div class="sel_select">
+							<div class="form_field">
+								<div class="select_custom exchange_option2">
+									<div class="combo">
+										<div class="select">옵션 선택</div>
+										<ul class="list">
+											<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
+											<li class="selected">옵션 선택</li>
+											<li>상품옵션01</li>
+											<li>상품옵션02</li>
+											<li>상품옵션03</li>
+											<li aria-disabled="true">상품옵션04</li>
+											<li>상품옵션05</li>
+											<li aria-disabled="true" data-soldout="true">상품옵션06</li>
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+						<!-- //옵션교환 셀렉트박스 형태 -->
+					</div>
+					<div class="allcheck_blk">
+						<div class="form_field">
+							<div>
+								<input id="chk_exchange_all3" name="chk_exchange_all3" type="checkbox" checked=""><label for="chk_exchange_all3"><span>선택 옵션으로 전체 교환</span></label>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</form>
+	</div>
+</div>
+<div class="modal-footer">
+	<button type="button" id="" class="btn btn_dark"><span>옵션 저장</span></button>
+</div>
+<script th:inline="javascript">
+//컨텐츠 호출
+$(document).ready( function() {
+	var exchange_option_selecter1 = new sCombo('#exchangePop .select_custom.exchange_option1');
+	var exchange_option_selecter2 = new sCombo('#exchangePop .select_custom.exchange_option2');
+});
+</script>

+ 55 - 36
src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html

@@ -78,8 +78,8 @@
 												<span class="count"><em th:text="${cancel.ordQty - cancel.cnclRtnQty}"></em>개</span>
 											</p>
 											<p>
-												<span class="price_org" th:if="${(cancel.listPrice * (cancel.ordQty - cancel.cnclRtnQty)) > (cancel.ordAmt - cancel.cnclRtnAmt)}"><em th:text="${#numbers.formatInteger(cancel.listPrice * (cancel.ordQty - cancel.cnclRtnQty), 1, 'COMMA')}"></em>원</span>
-												<span class="price_sale"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
+												<span class="price_org" th:if="${(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+												<span class="price_sale"><em th:text="${#numbers.formatInteger(cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 											</p>
 										</div>
 									</div>
@@ -182,6 +182,12 @@
 							</li>
 						</ul>
 					</div>
+					<div class="info_footer_area" id="addDeliveryFee" style="display:none">
+						<p>
+							<span id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.
+							<input type="hidden" name="addPayCost"/>
+						</p>
+					</div>
 					<div class="btn_footer_area">
 						<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"><span>취소</span></button>
 						<button type="button" id="btn_refund_pop" class="btn btn_dark btn_md" onclick="fnCancel();"><span>주문 취소</span></button>
@@ -198,63 +204,66 @@
 	let paymentInfo = [[${paymentInfo}]];
 	let usedGiftCardInfo = [[${usedGiftCardInfo}]];
 	let usedPointInfo = [[${usedPointInfo}]];
+	let addPayCost = 0;
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(2);
-		
+
 		// 마이페이지 location 설정
 		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '취소 신청');
-		
+
 		// 셀렉트박스 활성화
-		//var goods_count_selecter = new sCombo('.myOrderView .part_goods .select_custom.select_count');
 		$(".myOrderView .part_goods .select_custom.select_count").each(function() {
 			new sCombo(this);
 		});
 	});
-	
+
 	// 취소 처리
 	var fnCancel = function() {
 		// 취소수량 설정
 		fnChangeCancelQty();
 
-		// 취소수량 체크
-		let index = 0;
-		$.each(cancelList.cancelList, function (idx, item) {
-			index += item.ordCanChgQty;
+		// 주문상세번호 및 취소 수량 설정
+		let ordDtlNoArr = [];
+		let cnclRtnReqQtyArr = [];
+		let chkQty = 0;
+		$.each($('input[name=chgQty]'), function(idx, item) {
+			let chgQty = $(item).val();
+			let ordDtlNo = $(item).attr('ordDtlNo');
+			
+			ordDtlNoArr.push(Number(ordDtlNo));
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			chkQty += chgQty;
 		});
-		
-		if (index == 0) {
-			mcxDialog.alert('취소 수량을 선택해주세요.');
+
+		// 취소 수량 체크
+		if (chkQty == 0) {
+			mcxDialog.alert('취소하실 상품의 수량을 선택해주세요.');
 			return false;
 		}
-		
+
 		// 환불계좌 체크
 		let accountNo = $('input[name=accountNo]').val();
 		let accountNm = $('input[name=accountNm]').val();
 		let bankCd = $('input[name=bankCd]').val();
-		
+
 		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_00' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
 			// TODO
 			// 환불계좌 등록 팝업
 			
 			return false;
 		}
-		
+
+		// 추가배송비 PG 처리
+		if (addPayCost > 0) {
+			// TODO
+			// 추가배송비 PG 처리
+		}
+
 		// 취소요청 데이터 설정
 		let url = '/mypage/cancel';
 
-		// 주문상세번호 및 취소 수량 설정
-		let ordDtlNoArr = [];
-		let cnclRtnReqQtyArr = [];
-		$.each($('input[name=chgQty]'), function(idx, item) {
-			let chgQty = $(item).val();
-			let ordDtlNo = $(item).attr('ordDtlNo');
-			
-			ordDtlNoArr.push(Number(ordDtlNo));
-			cnclRtnReqQtyArr.push(Number(chgQty));
-		});
-
 		// 취소 처리
 		let data = {};
 		data.ordNo = oneData.ordNo;
@@ -300,7 +309,7 @@
 		data.ordNo = oneData.ordNo;
 		data.ordDtlNoArr = ordDtlNoArr;
 		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
-		
+
 		let jsonData = JSON.stringify(data);
 
 		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
@@ -315,13 +324,23 @@
 			let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);
 			let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);
 			let spanRefundAmt = Number(result.spanRefundAmt);
-			
+
 			let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
 			let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
 			let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
-			let refundPayAmt = spanRefundAmt;											// 결제금액 환불
+			let refundPayAmt = spanRefundAmt - spanTotDeliveryFee;						// 결제금액 환불
 			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
-			
+
+			// 추가배송비 영역 설정
+			if (refundPayAmt > 0) {
+				refundPayAmt = spanRefundAmt;
+				$('#addDeliveryFee').css('display', '');
+				$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
+				addPayCost = spanTotDeliveryFee;
+			} else {
+				addPayCost = 0;
+			}
+
 			// 금액 설정
 			$('#returnAmt').text(returnAmt.addComma());
 			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
@@ -341,7 +360,7 @@
 			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
 			let chgQty = chgQtyArr[index];
 			let ordCanChgQty = ordCanChgQtyArr[index];
-			
+
 			if (chgQty > 0) {
 				if (chgQty == ordCanChgQty) {
 					refundPoint += item.pntAmt;
@@ -350,19 +369,19 @@
 				}
 			}
 		});
-		
+
 		return refundPoint;
 	}
 	
 	// 환불 상품권 계산
 	var fnCalculateGiftCard = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
 		let refundGiftCard = 0;
-		
+
 		$.each(usedGiftCardInfo, function(idx, item) {
 			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
 			let chgQty = chgQtyArr[index];
 			let ordCanChgQty = ordCanChgQtyArr[index];
-			
+
 			if (chgQty > 0) {
 				if (chgQty == ordCanChgQty) {
 					refundGiftCard += item.gfcdAmt;
@@ -371,7 +390,7 @@
 				}
 			}
 		});
-		
+
 		return refundGiftCard;
 	}
 </script>

+ 251 - 194
src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html

@@ -19,229 +19,270 @@
 <body>
 
 <th:block layout:fragment="content">
-	<div class="my_cont">
-		<div class="sec_head">
-			<h3>교환 신청</h3>
-			<div class="od_detail">
-				(주문번호 : <span class="num" th:text="${ordNo}"></span>)
+	<div class="content myOrderView"> <!-- 페이지특정 클래스 = myOrderView -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+					<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
 			</div>
-		</div>
-		<div class="sec_body mypage_body">
-			<div class="order_list return_list">
-				<section class="order_row">
-					<th:block th:if="${orderList}" th:each="oneData, status : ${orderList}">
-						<div class="part_deliver">
-							<div class="tbl_tit">
-								<!-- 주문일/선물일 설정 -->
-								<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
-								<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
-								<!-- //주문일/선물일 설정 -->
-
-								<span class="order_date" th:text="${oneData.ordDt}"></span>
-
-								<!-- 배송구분 설정 -->
-								<span class="order_label02" th:if="${oneData.shotDelv}">총알배송</span>
-								<span class="order_label01" th:if="${oneData.selfMall}">STYLE24 일반배송</span>
-								<span class="order_label01" th:if="${oneData.supplyMall}">업체직배송</span>
-								<!-- //배송구분 설정 -->
-								<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
-							</div>
-							<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}">
-								<div class="tbl type2">
-									<table id="exchangeList">
-										<colgroup>
-											<col width="1020">
-											<col width="180">
-										</colgroup>
-										<tbody>
-										<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-											<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
-											<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
-											<input type="hidden" name="reviewSq" th:value="${ordDtl.reviewSq}"/>
-											<tr>
-												<td>
-													<div class="info_item">
-														<div class="thumb_box">
-															<a href="">
-																<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
-															</a>
-														</div>
-														<div class="info_box">
-															<p class="od_name">
-																<a href="">
-																	<span class="brand" th:text="${ordDtl.brandNm}"></span>
-																	<span class="name" th:text="${ordDtl.goodsNm}"></span>
-																</a>
-															</p>
-															<p class="od_opt">
-																<span class="option"><em th:text="${ordDtl.optCd1}"></em><em th:text="${ordDtl.optCd2}"></em></span>
-																<span class="count">수량 <em th:text="${ordDtl.ordQty}"></em>개</span>
-															</p>
-														</div>
-														<div class="info_calc">
-															<p class="price">
-																<span class="selling_price" th:text="|${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}원|"></span>
-															</p>
-															<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>p</p>
+			<div class="cont">
+				<div class="sec_head">
+					<h3 class="subH1">교환 신청</h3>
+					<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${oneData.ordNo}"></em></span>
+				</div>
+				<div class="sec_body">
+					<div class="part_goods">
+						<div class="goods_head">
+							<p th:unless="${oneData.giftPackYn == 'Y'}">주문일 <span th:text="${oneData.ordDt}"></span></p>
+							<p th:if="${oneData.giftPackYn == 'Y'}">선물일 <span th:text="${oneData.ordDt}"></span></p>
+						</div>
+						<div class="goods_cont">
+							<th:block th:if="${exchangeList.returnList}" th:each="exchange, status : ${exchangeList.returnList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+							<!-- 주문상품 -->
+							<div class="goods_info">
+								<div class="order_desc">
+									<div class="goods_box">
+										<div class="gd_item">
+											<a href="javascript:void(0)" th:attr="goodsCd=${exchange.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+												<span class="thumb">
+													<img th:src="${imageUrl + '/' + exchange.sysImgNm}" width="100%" alt="">
+												</span>
+												<p>
+													<span class="brand" th:text="${exchange.brandNm}"></span>
+													<span class="tag primary" th:if="${exchange.shotDelvYn == 'Y'}">총알배송</span>
+													<span class="tag" th:if="${exchange.shotDelvYn == 'N' and exchange.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+													<span class="tag" th:if="${exchange.selfGoodsYn == 'N'}">업체직배송</span>
+												</p>
+												<p>
+													<span class="name" th:text="${exchange.goodsNm}"></span>
+												</p>
+											</a>
+										</div>
+										<div class="gd_opt">
+											<div class="option_wrap">
+												<span class="title sr-only">주문 옵션</span>
+												<span class="option" th:if="${exchange.goodsType == 'G056_S'}" th:each="option, status : ${exchange.colorNmArr}" th:text="|${exchange.itemNmArr[status.index]} / ${option} / ${exchange.optCd2Arr[status.index]}|"></span>
+												<span class="option" th:unless="${exchange.goodsType == 'G056_S'}" th:text="|${exchange.colorNm} / ${exchange.optCd2}|"></span>
+											</div>
+										</div>
+										<div class="gd_calc">
+											<p>
+												<span class="count"><em th:text="${exchange.ordQty - exchange.cnclRtnQty}"></em>개</span>
+											</p>
+											<p>
+												<span class="price_org" th:if="${(exchange.ordAmt - exchange.cnclRtnAmt - exchange.cpn1DcAmt) > (exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(exchange.ordAmt - exchange.cnclRtnAmt - exchange.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+												<span class="price_sale"><em th:text="${#numbers.formatInteger(exchange.realOrdAmt + exchange.pntDcAmt + exchange.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
+											</p>
+										</div>
+									</div>
+									<div class="button_box">
+										<div class="count_modify">
+											<span class="txt">수량</span>
+											<form class="form_wrap">
+												<div class="form_field">
+													<div class="select_custom select_count">
+														<div class="combo">
+															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${exchange.ordDtlNo}, ordCanChgQty=${exchange.ordCanChgQty}"/>
+															<div class="select">선택</div>
+															<ul class="list">
+																<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+																<li class="selected" qty="0" onclick="fnChangeExchangeQty(this);">선택</li>
+																<li th:if="${exchange.ordCanChgQty > 0}" th:each="num : ${#numbers.sequence(1,exchange.ordCanChgQty)}" th:attr="qty=${num}" th:text="${num}" onclick="fnChangeExchangeQty(this);"></li>
+															</ul>
 														</div>
 													</div>
-												</td>
-												<td class="cnt_sel">
-													<span class="cnt_t">수량</span>
-													<select class="select_dress" name="chgQty">
-														<option value="">선택</option>
-														<option th:if="${ordDtl.ordQty > 0}" th:each="num : ${#numbers.sequence(1,ordDtl.ordQty)}" th:value="${num}" th:text="${num}"></option>
-													</select>
-													<button class="btn btn_dark btn_sm" th:attr="ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnChangeOption(this);">옵션 변경</button>
-												</td>
-											</tr>
-										</th:block>
-										</tbody>
-									</table>
+												</div>
+											</form>
+											<button type="button" id="btn_exchange_pop" class="btn btn_dark btn_sm" th:attr="ordNo=${exchange.ordNo}, ordDtlNo=${exchange.ordDtlNo}" onclick="fnChangeOption(this)"><span>교환 옵션 변경</span></button>
+										</div>
+									</div>
+								</div>
+								<div class="order_text">
+									<p>교환하실 상품의 수량 및 옵션을 선택하신 후 교환 신청을 하실 수 있습니다.</p>
 								</div>
-							</th:block>
-							<div class="order_confirm">
-								<p class="cf_txt cf_desc c_primary">교환하실 상품의 수량 및 옵션을 선택하신 후 교환 신청을 하실 수 있습니다.</p>
 							</div>
+							<!-- //주문상품 -->
+							</th:block>
 						</div>
-					</th:block>
-				</section>
-				<section class="order_row">
-					<div class="tbl_tit">
-						<h3 class="subH3">교환 사유</h3>
 					</div>
+					<h4 class="subH3">교환 사유</h4>
 					<div class="tbl type1">
 						<table>
-							<colgroup>
-								<col width="*">
-							</colgroup>
 							<tbody>
-							<tr>
-								<td>
-									<select id="mounth" name="chgReason" onchange="fnChangeReason(this);">
-										<option value="">교환 사유를 선택하세요</option>
-										<option th:if="${exchangeReason}" th:each="oneData, status : ${exchangeReason}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
-									</select>
-								</td>
-							</tr>
-							<tr>
-								<td>
-									<textarea class="doc_exchange" name="chgMemo" id="chgMemo" placeholder="자세한 사유를 입력해주세요." onkeyup="cfnGetTextLength(this, 200, $('#exchange_cnt'));"></textarea>
-									<p class="txt_cnt"><span id="exchange_cnt" class="c_primary">0</span>/200</p>
-								</td>
-							</tr>
+								<tr>
+									<td>
+										<div class="form_field">
+											<div class="select_custom select_reason">
+												<div class="combo">
+													<input type="hidden" name="chgReason"/>
+													<div class="select">교환 사유를 선택하세요.</div>
+													<ul class="list">
+														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+														<li class="selected">교환 사유를 선택하세요.</li>
+														<li th:if="${exchangeReason}" th:each="oneData, status : ${exchangeReason}" th:attr="chgReason=${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeExchangeReason(this);"></li>
+													</ul>
+												</div>
+											</div>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<td>
+										<div class="form_field">
+											<div class="input_wrap">
+												<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요." style="resize: none;"></textarea>
+												<p class="txt_cnt"><span id="reason_cnt" class="c_primary">0</span>/200</p>
+											</div>
+										</div>
+									</td>
+								</tr>
 							</tbody>
 						</table>
 					</div>
-				</section>
-				<section class="order_row" id="chgerLocation">
-					<div class="order_tit">
-						<h3 class="subH3">상품 회수지</h3>
-						<span class="del_t">택배사에서 반품 상품을 직접 회수할 장소 선택</span>
-						<button type="button" class="btn_popup" onclick="fnChangeDeliveryAddr('chger');"><span>회수지 선택</span></button>
-					</div>
+					<h4 class="subH3">반품 방식 선택</h4>
 					<div class="tbl type1">
 						<table>
-							<colgroup>
-								<col width="200">
-								<col width="*">
-							</colgroup>
 							<tbody>
 							<tr>
-								<th>성명</th>
-								<td id="chgerNm" th:text="${deliveryAddrInfo.recipNm}"></td>
-								<input type="hidden" name="chgerNm" th:value="${deliveryAddrInfo.recipNm}">
-							</tr>
-							<tr>
-								<th>연락처</th>
-								<td id="chgerPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></td>
-								<input type="hidden" name="chgerPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
-							</tr>
-							<tr>
-								<th>주소</th>
-								<td id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></td>
-								<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
-								<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+								<td>
+									<div class="retrieve_method">
+										<div class="form_field">
+											<div>
+												<input type="radio" name="wdGb" id="withdraw" value="W" checked>
+												<label for="withdraw"><span>방문회수<em>택배사에서 고객에게 방문하여 회수</em></span></label>
+											</div>
+											<div>
+												<input type="radio" name="wdGb" id="direct" value="D">
+												<label for="direct"><span>직접배송<em>고객이 반품지로 직접 반송</em></span></label>
+											</div>
+										</div>
+									</div>
+								</td>
 							</tr>
 							</tbody>
 						</table>
 					</div>
-				</section>
-				<section class="order_row" id="returnLocation">
-					<div class="order_tit">
-						<h3 class="subH3">반품하실 배송지</h3>
-					</div>
-					<div class="tbl type1">
-						<table>
-							<colgroup>
-								<col width="200">
-								<col width="*">
-							</colgroup>
-							<tbody>
-							<tr>
-								<th>성명</th>
-								<td th:text="${deliveryAddrInfo.rtnLocNm}"></td>
-								<input type="hidden" name="rtnLocNm" th:value="${deliveryAddrInfo.rtnLocNm}">
-							</tr>
-							<tr>
-								<th>연락처</th>
-								<td th:text="${deliveryAddrInfo.rtnLocTelno}"></td>
-								<input type="hidden" name="rtnLocTelno" th:value="${deliveryAddrInfo.rtnLocTelno}">
-							</tr>
-							<tr>
-								<th>주소</th>
-								<td th:text="|${deliveryAddrInfo.rtnLocBaseAddr} ${deliveryAddrInfo.rtnLocDtlAddr}|"></td>
-								<input type="hidden" name="rtnLocBaseAddr" th:value="${deliveryAddrInfo.rtnLocBaseAddr}">
-								<input type="hidden" name="rtnLocDtlAddr" th:value="${deliveryAddrInfo.rtnLocDtlAddr}">
-							</tr>
-							</tbody>
-						</table>
+					<div class="retrieve_box visit" style="display:block;" id="chgerLocation">
+						<h4 class="subH3">교환 회수지 주소 <span class="tit_info">택배사에서 교환 상품을 직접 회수할 장소 선택</span></h4>
+						<div class="tbl type1">
+							<table>
+								<colgroup>
+									<col width="210">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>성명</th>
+										<td id="chgerNm" th:text="${deliveryAddrInfo.recipNm}"></td>
+										<input type="hidden" name="chgerNm" th:value="${deliveryAddrInfo.recipNm}">
+									</tr>
+									<tr>
+										<th>연락처</th>
+										<td id="chgerPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></td>
+										<input type="hidden" name="chgerPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+									</tr>
+									<tr>
+										<th>주소</th>
+										<td>
+											<th:block  th:id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></th:block>
+											<button type="button" class="btn btn_default btn_sm" onclick="fnChangeDeliveryAddr('chger');"><span>회수지 변경</span></button>
+										</td>
+										<input type="hidden" name="chgerZipcode" th:value="${deliveryAddrInfo.chgerZipcode}">
+										<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
+										<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+										<input type="hidden" name="chgerRtnMemo" th:value="${deliveryAddrInfo.chgerRtnMemo}">
+									</tr>
+								</tbody>
+							</table>
+						</div>
 					</div>
-				</section>
-				<section class="order_row">
-					<div class="order_tit">
-						<h3 class="subH3">교환 상품 받으실 주소</h3>
-						<span class="del_t">교환받을 상품을 수령할 장소 선택</span>
-						<button type="button" class="btn_popup" onclick="fnChangeDeliveryAddr('recip');"><span>회수지 선택</span></button>
+					<div class="retrieve_box direct" style="display:none;" id="returnLocation">
+						<h4 class="subH3">반송 정보</h4>
+						<div class="tbl type1">
+							<table>
+								<colgroup>
+									<col width="210">
+									<col width="*">
+								</colgroup>
+								<tbody>
+								<tr>
+									<th>
+										반송주소
+									</th>
+									<td th:text="|${deliveryAddrInfo.rtnLocBaseAddr} ${deliveryAddrInfo.rtnLocDtlAddr}|"></td>
+								</tr>
+								<tr>
+									<th>
+										반송 송장번호
+									</th>
+									<td>
+										<form class="form_wrap">
+											<div class="form_field">
+												<div class="input_wrap">
+													<input type="text" class="form_control" name="wdInvoiceNo" placeholder="송장번호를 입력해주세요.">
+												</div>
+											</div>
+										</form>
+									</td>
+								</tr>
+								</tbody>
+							</table>
+						</div>
 					</div>
+					<h4 class="subH3">교환 상품 배송지</h4>
 					<div class="tbl type1">
 						<table>
 							<colgroup>
-								<col width="200">
+								<col width="210">
 								<col width="*">
 							</colgroup>
 							<tbody>
-							<tr>
-								<th>성명</th>
-								<td id="recipNm" th:text="${deliveryAddrInfo.recipNm}"></td>
-								<input type="hidden" name="recipNm" th:value="${deliveryAddrInfo.recipNm}">
-							</tr>
-							<tr>
-								<th>연락처</th>
-								<td id="recipPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></td>
-								<input type="hidden" name="recipPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
-							</tr>
-							<tr>
-								<th>주소</th>
-								<td id="recipAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></td>
-								<input type="hidden" name="recipBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
-								<input type="hidden" name="recipDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
-							</tr>
+								<tr>
+									<th>
+										배송지 정보
+									</th>
+									<td>
+										<div class="block_line">
+											<ul>
+												<li>
+													<span th:text="${deliveryAddrInfo.recipNm}"></span>
+												</li>
+												<li>
+													<span th:text="${deliveryAddrInfo.recipPhnno}"></span>
+												</li>
+												<li>
+													<span th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></span>
+													<button type="button" class="btn btn_default btn_sm" onclick="fnChangeDeliveryAddr()"><span>배송지 변경</span></button>
+												</li>
+												<li>
+													배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${deliveryAddrInfo.delvMemo}"></span>
+													<button type="button" class="btn_underline" onclick="fnChangeDeliveryMemo()"><span>변경하기</span></button>
+												</li>
+											</ul>
+										</div>
+									</td>
+								</tr>
 							</tbody>
 						</table>
 					</div>
-				</section>
-				<section class="order_row" id="addDeliveryFee" style="display:none">
-					<div class="ship_fee">
-						<p><span class="c_primary" id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.</p>
-						<input type="hidden" name="addPayCost"/>
+					<div class="info_footer_area" id="addDeliveryFee" style="display:none">
+						<p>
+							<span id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.
+							<input type="hidden" name="addPayCost"/>
+						</p>
+					</div>
+					<div class="btn_footer_area">
+						<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>취소</span></button>
+						<button type="button" id="btn_confirm_exchange" class="btn btn_dark btn_md" onclick="fnExchange()"><span>교환 신청</span></button>
 					</div>
-				</section>
-				<div class="btn_wrap">
-					<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>교환 취소</span></button>
-					<button tyep="submit" class="btn btn_primary submit_btn" onclick="fnExchange()"><span id="exchangeButton">교환 신청</span></button>
 				</div>
 			</div>
+			<!-- // CONT-BODY -->
 		</div>
 	</div>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
@@ -258,6 +299,22 @@
 	var fnChangeOption = function(param) {
 		// TODO
 		// 옵션변경 처리
+		var jsonObj = {};
+		jsonObj.ordNo = $(param).attr('ordNo');
+		jsonObj.ordDtlNo = $(param).attr('ordDtlNo');
+
+		$.ajax({
+			type		: "POST",
+			url 		: "/mypage/change/option/popup/form",
+			data		: jsonObj,
+			dataType 	: "html",
+			success 	: function(result) {
+				if (result != null) {
+					$("#exchangePop .modal-content").html(result);
+					$("#exchangePop").modal("show");
+				}
+			}
+		});
 	}
 
 	// 교환 처리
@@ -267,15 +324,15 @@
 	}
 	
 	// 교환 사유 변경 이벤트
-	var fnChangeReason = function(param) {
+	var fnChangeExchangeReason = function(param) {
 		let chgReason = $(param).val();
 		// TODO
 		// 사유 변경 처리
-		alert('a');
-		console.log($('#exchangeList tr'));
-		$.each($('#exchangeList tr'), function(idx, item) {
-			console.log(item);
-		})
+	}
+	
+	// 교환 수량 변경 이벤트
+	var fnChangeExchangeQty = function(param) {
+		
 	}
 </script>
 

+ 285 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb_20210330.html

@@ -0,0 +1,285 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MypageExchangeFormWeb.html
+ * @desc    : 마이페이지 > 교환신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.22   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="my_cont">
+		<div class="sec_head">
+			<h3>교환 신청</h3>
+			<div class="od_detail">
+				(주문번호 : <span class="num" th:text="${ordNo}"></span>)
+			</div>
+		</div>
+		<div class="sec_body mypage_body">
+			<div class="order_list return_list">
+				<section class="order_row">
+					<th:block th:if="${orderList}" th:each="oneData, status : ${orderList}">
+						<div class="part_deliver">
+							<div class="tbl_tit">
+								<!-- 주문일/선물일 설정 -->
+								<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
+								<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
+								<!-- //주문일/선물일 설정 -->
+
+								<span class="order_date" th:text="${oneData.ordDt}"></span>
+
+								<!-- 배송구분 설정 -->
+								<span class="order_label02" th:if="${oneData.shotDelv}">총알배송</span>
+								<span class="order_label01" th:if="${oneData.selfMall}">STYLE24 일반배송</span>
+								<span class="order_label01" th:if="${oneData.supplyMall}">업체직배송</span>
+								<!-- //배송구분 설정 -->
+								<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
+							</div>
+							<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}">
+								<div class="tbl type2">
+									<table id="exchangeList">
+										<colgroup>
+											<col width="1020">
+											<col width="180">
+										</colgroup>
+										<tbody>
+										<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+											<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
+											<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
+											<input type="hidden" name="reviewSq" th:value="${ordDtl.reviewSq}"/>
+											<tr>
+												<td>
+													<div class="info_item">
+														<div class="thumb_box">
+															<a href="">
+																<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+															</a>
+														</div>
+														<div class="info_box">
+															<p class="od_name">
+																<a href="">
+																	<span class="brand" th:text="${ordDtl.brandNm}"></span>
+																	<span class="name" th:text="${ordDtl.goodsNm}"></span>
+																</a>
+															</p>
+															<p class="od_opt">
+																<span class="option"><em th:text="${ordDtl.optCd1}"></em><em th:text="${ordDtl.optCd2}"></em></span>
+																<span class="count">수량 <em th:text="${ordDtl.ordQty}"></em>개</span>
+															</p>
+														</div>
+														<div class="info_calc">
+															<p class="price">
+																<span class="selling_price" th:text="|${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}원|"></span>
+															</p>
+															<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>p</p>
+														</div>
+													</div>
+												</td>
+												<td class="cnt_sel">
+													<span class="cnt_t">수량</span>
+													<select class="select_dress" name="chgQty">
+														<option value="">선택</option>
+														<option th:if="${ordDtl.ordQty > 0}" th:each="num : ${#numbers.sequence(1,ordDtl.ordQty)}" th:value="${num}" th:text="${num}"></option>
+													</select>
+													<button class="btn btn_dark btn_sm" th:attr="ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnChangeOption(this);">옵션 변경</button>
+												</td>
+											</tr>
+										</th:block>
+										</tbody>
+									</table>
+								</div>
+							</th:block>
+							<div class="order_confirm">
+								<p class="cf_txt cf_desc c_primary">교환하실 상품의 수량 및 옵션을 선택하신 후 교환 신청을 하실 수 있습니다.</p>
+							</div>
+						</div>
+					</th:block>
+				</section>
+				<section class="order_row">
+					<div class="tbl_tit">
+						<h3 class="subH3">교환 사유</h3>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<td>
+									<select id="mounth" name="chgReason" onchange="fnChangeReason(this);">
+										<option value="">교환 사유를 선택하세요</option>
+										<option th:if="${exchangeReason}" th:each="oneData, status : ${exchangeReason}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+									</select>
+								</td>
+							</tr>
+							<tr>
+								<td>
+									<textarea class="doc_exchange" name="chgMemo" id="chgMemo" placeholder="자세한 사유를 입력해주세요." onkeyup="cfnGetTextLength(this, 200, $('#exchange_cnt'));"></textarea>
+									<p class="txt_cnt"><span id="exchange_cnt" class="c_primary">0</span>/200</p>
+								</td>
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row" id="chgerLocation">
+					<div class="order_tit">
+						<h3 class="subH3">상품 회수지</h3>
+						<span class="del_t">택배사에서 반품 상품을 직접 회수할 장소 선택</span>
+						<button type="button" class="btn_popup" onclick="fnChangeDeliveryAddr('chger');"><span>회수지 선택</span></button>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="200">
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<th>성명</th>
+								<td id="chgerNm" th:text="${deliveryAddrInfo.recipNm}"></td>
+								<input type="hidden" name="chgerNm" th:value="${deliveryAddrInfo.recipNm}">
+							</tr>
+							<tr>
+								<th>연락처</th>
+								<td id="chgerPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></td>
+								<input type="hidden" name="chgerPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+							</tr>
+							<tr>
+								<th>주소</th>
+								<td id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></td>
+								<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
+								<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row" id="returnLocation">
+					<div class="order_tit">
+						<h3 class="subH3">반품하실 배송지</h3>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="200">
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<th>성명</th>
+								<td th:text="${deliveryAddrInfo.rtnLocNm}"></td>
+								<input type="hidden" name="rtnLocNm" th:value="${deliveryAddrInfo.rtnLocNm}">
+							</tr>
+							<tr>
+								<th>연락처</th>
+								<td th:text="${deliveryAddrInfo.rtnLocTelno}"></td>
+								<input type="hidden" name="rtnLocTelno" th:value="${deliveryAddrInfo.rtnLocTelno}">
+							</tr>
+							<tr>
+								<th>주소</th>
+								<td th:text="|${deliveryAddrInfo.rtnLocBaseAddr} ${deliveryAddrInfo.rtnLocDtlAddr}|"></td>
+								<input type="hidden" name="rtnLocBaseAddr" th:value="${deliveryAddrInfo.rtnLocBaseAddr}">
+								<input type="hidden" name="rtnLocDtlAddr" th:value="${deliveryAddrInfo.rtnLocDtlAddr}">
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row">
+					<div class="order_tit">
+						<h3 class="subH3">교환 상품 받으실 주소</h3>
+						<span class="del_t">교환받을 상품을 수령할 장소 선택</span>
+						<button type="button" class="btn_popup" onclick="fnChangeDeliveryAddr('recip');"><span>회수지 선택</span></button>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="200">
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<th>성명</th>
+								<td id="recipNm" th:text="${deliveryAddrInfo.recipNm}"></td>
+								<input type="hidden" name="recipNm" th:value="${deliveryAddrInfo.recipNm}">
+							</tr>
+							<tr>
+								<th>연락처</th>
+								<td id="recipPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></td>
+								<input type="hidden" name="recipPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+							</tr>
+							<tr>
+								<th>주소</th>
+								<td id="recipAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></td>
+								<input type="hidden" name="recipBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
+								<input type="hidden" name="recipDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row" id="addDeliveryFee" style="display:none">
+					<div class="ship_fee">
+						<p><span class="c_primary" id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.</p>
+						<input type="hidden" name="addPayCost"/>
+					</div>
+				</section>
+				<div class="btn_wrap">
+					<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>교환 취소</span></button>
+					<button tyep="submit" class="btn btn_primary submit_btn" onclick="fnExchange()"><span id="exchangeButton">교환 신청</span></button>
+				</div>
+			</div>
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(2);
+		
+		// 마이페이지 location 설정
+		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '교환 신청');
+	});
+
+	// 교환 옵션 변경 팝업
+	var fnChangeOption = function(param) {
+		// TODO
+		// 옵션변경 처리
+	}
+
+	// 교환 처리
+	var fnExchange = function() {
+		// TODO
+		// 교환신청 처리
+	}
+	
+	// 교환 사유 변경 이벤트
+	var fnChangeReason = function(param) {
+		let chgReason = $(param).val();
+		// TODO
+		// 사유 변경 처리
+		alert('a');
+		console.log($('#exchangeList tr'));
+		$.each($('#exchangeList tr'), function(idx, item) {
+			console.log(item);
+		})
+	}
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -314,12 +314,10 @@
 												<li>
 													<span th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></span>
 													<button type="button" class="btn btn_default btn_sm" th:if="${allCanYn == 'Y'}" onclick="fnChangeDeliveryAddr()"><span>배송지 변경</span></button>
-													<button type="button" class="btn btn_default btn_sm" th:unless="${allCanYn == 'Y'}" onclick="fnChangeDeliveryAddr()"><span>배송지 변경</span></button>
 												</li>
 												<li>
 													배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${deliveryAddrInfo.delvMemo}"></span>
-													<button type="button" class="btn_underline"th:if="${allCanYn == 'Y'}" onclick="fnChangeDeliveryMemo()"><span>변경하기</span></button>
-													<button type="button" class="btn_underline"th:unless="${allCanYn == 'Y'}" onclick="fnChangeDeliveryMemo()"><span>변경하기</span></button>
+													<button type="button" class="btn_underline" th:if="${allCanYn == 'Y'}" onclick="fnChangeDeliveryMemo()"><span>변경하기</span></button>
 												</li>
 											</ul>
 										</div>
@@ -442,26 +440,9 @@
 				<input type="hidden" name="ordNo"/>
 				<input type="hidden" name="ordDtlNo"/>
 			</form>
-			<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="post">
-				<input type="hidden" name="ordNo"/>
-				<input type="hidden" name="ordDtlNo"/>
-			</form>
 			<!-- // CONT-BODY -->
 		</div>
 	</div>
-
-	<!-- 배송지변경 -->
-	<div class="modal fade od_pop adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true"></div>
-
-	<!-- 배송지추가 팝업 -->
-	<div class="modal fade od_pop adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true"></div>
-
-	<!-- 배송지수정 팝업 -->
-	<div class="modal fade od_pop adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true"></div>
-
-	<!-- 배송요청사항수정 팝업 -->
-	<div class="modal fade od_pop rqstModify_pop" id="rqstModifyPop" tabindex="-1" role="dialog" aria-labelledby="rqstModifyLabel" aria-hidden="true"></div>
-
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	let ordNo = [[${ordNo}]];

+ 6 - 6
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -200,7 +200,7 @@
 					<input type="hidden" name="ordNo"/>
 					<input type="hidden" name="ordDtlNo"/>
 				</form>
-				<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="post">
+				<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="get">
 					<input type="hidden" name="ordNo"/>
 					<input type="hidden" name="ordDtlNo"/>
 				</form>
@@ -457,24 +457,24 @@
 					} else {
 						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
 						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35' || ordDtl.ordDtlStat == 'G013_40') {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
+							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
 						}
 
 						// 교환신청 버튼(배송중, 출고완료, 배송완료)
 						if (ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55' || ordDtl.ordDtlStat == 'G013_60') {
 							// 교환/반품 가능한 상품
 							if (ordDtl.changeableYn == 'Y' && ordDtl.returnableYn == 'Y') {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
 							}
 							// 교환 신청 불가 상품
 							else if (ordDtl.changeableYn == 'N' && ordDtl.returnableYn == 'Y') {
 								tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"><span>1:1 문의</span></button></p>\n';
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
 							}
 							// 반품 신청 불가 상품
 							else if (ordDtl.changeableYn == 'Y' && ordDtl.returnableYn == 'N') {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
 								tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
 							}
 							// 교환/반품 신청 불가 상품

+ 146 - 26
src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html

@@ -79,8 +79,8 @@
 												<span class="count"><em th:text="${return.ordQty - return.cnclRtnQty}"></em>개</span>
 											</p>
 											<p>
-												<span class="price_org" th:if="${(return.listPrice * (return.ordQty - return.cnclRtnQty)) > (return.ordAmt - return.cnclRtnAmt)}"><em th:text="${#numbers.formatInteger(return.listPrice * (return.ordQty - return.cnclRtnQty), 1, 'COMMA')}"></em>원</span>
-												<span class="price_sale"><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
+												<span class="price_org" th:if="${(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+												<span class="price_sale"><em th:text="${#numbers.formatInteger(return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 											</p>
 										</div>
 									</div>
@@ -127,7 +127,7 @@
 													<ul class="list">
 														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
 														<li class="selected">반품 사유를 선택하세요.</li>
-														<li th:if="${returnReason}" th:each="oneData, status : ${returnReason}" th:value="${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeReason(this);"></li>
+														<li th:if="${returnReason}" th:each="oneData, status : ${returnReason}" th:attr="chgReason=${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeReturnReason(this);"></li>
 													</ul>
 												</div>
 											</div>
@@ -138,7 +138,7 @@
 									<td>
 										<div class="form_field">
 											<div class="input_wrap">
-												<textarea class="doc_reason" name="" id="" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요."  onkeyup="cfnGetTextLength(this, 200, $('#return_cnt'));" style="resize: none;"></textarea>
+												<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요."  onkeyup="cfnGetTextLength(this, 200, $('#return_cnt'));" style="resize: none;"></textarea>
 												<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
 											</div>
 										</div>
@@ -191,11 +191,14 @@
 									</tr>
 									<tr>
 										<th>주소</th>
-										<td id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|">
+										<td>
+											<th:block  th:id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></th:block>
 											<button type="button" class="btn btn_default btn_sm" onclick="fnChangeDeliveryAddr('chger');"><span>회수지 변경</span></button>
 										</td>
+										<input type="hidden" name="chgerZipcode" th:value="${deliveryAddrInfo.chgerZipcode}">
 										<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
 										<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+										<input type="hidden" name="chgerRtnMemo" th:value="${deliveryAddrInfo.chgerRtnMemo}">
 									</tr>
 								</tbody>
 							</table>
@@ -327,8 +330,12 @@
 <script th:inline="javascript">
 	let returnList = [[${returnList.returnList}]];
 	let oneData = [[${oneData}]];
+	let paymentInfo = [[${paymentInfo}]];
 	let usedGiftCardInfo = [[${usedGiftCardInfo}]];
 	let usedPointInfo = [[${usedPointInfo}]];
+	var isCustomer = true;
+	let jsonObj = {};
+	let addPayCost = 0;
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
@@ -349,13 +356,89 @@
 			$('#wdGb').css('display','none');
 		}
 	});
-	
+
 	// 반품 처리
 	var fnReturn = function() {
-		// TODO
-		// 반품신청 처리
+		let url = '/mypage/return';
+
+		// 반품 사유 체크
+		let chgReason = $('input[name=chgReason]').val();
+		if (gagajf.isNull(chgReason)) {
+			mcxDialog.alert('반품사유를 선택해주세요.');
+			return false;
+		}
+
+		// 반송 송장번호 체크
+		let wdGb = $('input[name=wdGb]:radio:checked').val();
+		let wdInvoiceNo = $('input[name=chgReason]').val();
+		if (wdGb == 'D' && gagajf.isNull(wdInvoiceNo)) {
+			mcxDialog.alert('직접 반송하신 송장번호를 입력해주세요.');
+			return false;
+		}
+
+		// 주문상세번호 및 반품 수량 설정
+		let ordDtlNoArr = [];
+		let cnclRtnReqQtyArr = [];
+		let chkQty = 0;
+		$.each($('input[name=chgQty]'), function(idx, item) {
+			let chgQty = $(item).val();
+			let ordDtlNo = $(item).attr('ordDtlNo');
+			
+			ordDtlNoArr.push(Number(ordDtlNo));
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			chkQty += chgQty;
+		});
+
+		// 반품 수량 체크
+		if (chkQty == 0) {
+			mcxDialog.alert('반품하실 상품의 수량을 선택해주세요.');
+			return false;
+		}
+
+		// 환불계좌 체크
+		let accountNo = $('input[name=accountNo]').val();
+		let accountNm = $('input[name=accountNm]').val();
+		let bankCd = $('input[name=bankCd]').val();
+
+		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_00' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+			// TODO
+			// 환불계좌 등록 팝업
+			
+			return false;
+		}
+
+		// 추가배송비 PG 처리
+		if (addPayCost > 0) {
+			// TODO
+			// 추가배송비 PG 처리
+		}
+
+		let data = {};
+		data.ordNo = oneData.ordNo;
+		data.ordChgSq = 0;
+		data.chgReason = chgReason;
+		data.chgMemo = $('input[name=chgMemo]').val();
+		data.accountNo = $('input[name=accountNo]').val();
+		data.accountNm = $('input[name=accountNm]').val();
+		data.bankCd = $('input[name=bankCd]').val();
+		data.isCustomer = isCustomer;
+		data.wdGb = wdGb;
+		data.chgerNm = $('#chgerNm').text();
+		data.chgerZipcode = $('input[name=chgerZipcode]').val();
+		data.chgerBaseAddr = $('input[name=chgerBaseAddr]').val();
+		data.chgerDtlAddr = $('input[name=chgerDtlAddr]').val();
+		data.chgerPhnno = $('input[name=chgerPhnno]').val();
+		data.chgerRtnMemo = $('input[name=chgerRtnMemo]').val();
+		data.ordDtlNoArr = ordDtlNoArr;
+		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function() {
+			cfnGoToPage(_PAGE_MYPAGE_CRS_LIST);
+		});
 	}
-	
+
 	// 반품 수량 변경 이벤트 처리
 	var fnChangeReturnQty = function(param) {
 		let url = '/mypage/cancel/refund/amt/calculate';
@@ -390,8 +473,8 @@
 
 			gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
 				// 환불포인트, 환불상품권 금액 계산
-				let refundPoint = fnCalculatePoint(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
-				let refundGiftCard = fnCalculateGiftCard(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+				let refundPoint = fnCalculatePoint(cnclRtnReqQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+				let refundGiftCard = fnCalculateGiftCard(cnclRtnReqQtyArr, ordDtlNoArr, ordCanChgQtyArr);
 
 				let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);
 				let sumDeliveryFee = Number(result.sumDeliveryFee);
@@ -400,13 +483,41 @@
 				let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);
 				let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);
 				let spanRefundAmt = Number(result.spanRefundAmt);
-				
+				let spanTotRtnDelvFee = Number(result.spanTotRtnDelvFee);
+
+				// 반품 사유 및 반품 방식 배송비 계산
+				if (result.spanRealCnclRtnAmt > 0) {
+					let wdGb = $('input[name=wdGb]:radio:checked').val();
+
+					// 회사사유 : 추가배송비 0, 반품배송비 0
+					if (!isCustomer) {
+						spanTotDeliveryFee = 0;
+						spanTotRtnDelvFee = 0;
+					}
+					// 고객사유(직접발송) : 반품배송비 0
+					else if (wdGb == 'D') {
+						spanTotRtnDelvFee = 0;
+					}
+				}
+
+				let addDelvFee = spanTotDeliveryFee + spanTotRtnDelvFee;
+
 				let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
-				let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
+				let deliveryFee = sumDeliveryFee - addDelvFee;								// 배송비
 				let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
-				let refundPayAmt = spanRefundAmt;											// 결제금액 환불
+				let refundPayAmt = spanRefundAmt - addDelvFee;								// 결제금액 환불
 				let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
-				
+
+				// 추가배송비 영역 설정
+				if (refundPayAmt < 0) {
+					refundPayAmt = spanRefundAmt;
+					$('#addDeliveryFee').css('display', '');
+					$('#addPayCost').text(addDelvFee.addComma() + '원');
+					addPayCost = addDelvFee;
+				} else {
+					addPayCost = 0;
+				}
+
 				// 금액 설정
 				$('#returnAmt').text(returnAmt.addComma());
 				$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
@@ -430,15 +541,24 @@
 			$('#chgerLocation').css('display', 'none');
 			$('#returnLocation').css('display', '');
 		}
+
+		// 환불금액 계산
+		fnChangeReturnQty();
 	});
 	
 	// 반품 사유 변경 이벤트
-	var fnChangeReason = function(param) {
-		// TODO
-		// 반품 사유 변경 처리
-		console.log($(param).val());
-		$(param).parent().parent().find('input[name=chgReason]').val($(param).val());
-		fnChangeQty();
+	var fnChangeReturnReason = function(param) {
+		var customerReasonArr = ['G688_10', 'G688_11', 'G688_12', 'G688_13', 'G688_15' , 'G688_21', 'G688_30'];
+		let chgReason = $(param).attr('chgReason');
+
+		// 귀책사유체크(취소,반품,교환)
+		isCustomer = customerReasonArr.includes(chgReason);
+
+		// 반품 사유 설정
+		$(param).parent().parent().find('input[name=chgReason]').val(chgReason);
+
+		// 환불금액 계산
+		fnChangeReturnQty();
 	}
 
 	// 환불 포인트 계산
@@ -458,19 +578,19 @@
 				}
 			}
 		});
-		
+
 		return refundPoint;
 	}
-	
+
 	// 환불 상품권 계산
 	var fnCalculateGiftCard = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
 		let refundGiftCard = 0;
-		
+
 		$.each(usedGiftCardInfo, function(idx, item) {
 			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
 			let chgQty = chgQtyArr[index];
 			let ordCanChgQty = ordCanChgQtyArr[index];
-			
+
 			if (chgQty > 0) {
 				if (chgQty == ordCanChgQty) {
 					refundGiftCard += item.gfcdAmt;
@@ -479,7 +599,7 @@
 				}
 			}
 		});
-		
+
 		return refundGiftCard;
 	}
 </script>

+ 8 - 2
src/main/webapp/WEB-INF/views/web/order/OrderCouponApplyPopWeb.html

@@ -79,12 +79,18 @@
 								<div class="cartCpn" th:value="${cartCpn.custCpnSq}">
 									<input type="hidden" name="dcWay" th:value="${cartCpn.dcWay}"/>
 									<input type="hidden" name="dcVal" th:value="${cartCpn.dcVal}"/>
+									<!-- 장바구니쿠폰 적용 장바구니 시퀀스 -->
 									<th:block th:each="cartCpnCartSq, kokok : ${cartCpn.cartCpnCartSqArr}"> 
 										<input type="hidden" name="cartCpnCartSq" th:value="${cartCpnCartSq}" />
 									</th:block>
 									
-									<input type="radio" name="rdi-cart-coupon" id="rdi-cart-coupon1" value="">
-									<label for="rdi-cart-coupon1">
+									<!-- 장바구니쿠폰 결제가능수단목록조회 -->
+									<th:block th:each="payType, kokok : ${cartCpn.payTypeArr}"> 
+										<input type="hidden" name="payTypeArr" th:value="${payType}" />
+									</th:block>
+									
+									<input type="radio" name="rdi-cart-coupon" th:id="|rdi-cart-coupon${k.index}|" value="">
+									<label th:for="|rdi-cart-coupon${k.index}|">
 										<div class="cart_coupon">
 											<p class="name" th:text="${cartCpn.cpnNm}"></p>
 											<p class="txt">

+ 29 - 37
src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrAddPopWeb.html

@@ -3,7 +3,7 @@
 </div>
 <div class="modal-body">
 	<div class="pop_cont">
-		<form class="form_wrap form_full" name="deliveryAddrForm" id="deliveryAddrForm">
+		<form class="form_wrap form_full" name="deliveryAddForm" id="deliveryAddForm">
 			<div class="area_adrsinfo">
 				<h6>배송지 정보</h6>
 				<div class="default_addrs">
@@ -15,11 +15,11 @@
 				<div class="form_field">
 					<label class="input_label sr-only">받는 분</label>
 					<div class="ui_col_12">
-						<div class="input_wrap">
+						<div class="input_wrap"> 
 							<input type="text" class="form_control" name="recipNm" placeholder="받는 분" id="">
 						</div>
 					</div>
-				</div>
+				</div>	
 				<div class="form_field">
 					<label class="input_label sr-only">휴대폰 번호</label>
 					<div class="ui_col_12">
@@ -32,21 +32,14 @@
 					<label class="input_label sr-only">배송주소</label>
 					<div class="ui_col_12">
 						<div class="input_wrap"> 
-							<input type="text" class="form_control" name="recipZipcode" placeholder="배송주소" id="">
+							<input type="hidden" class="form_control" name="recipZipcode" placeholder="우편번호" id="">
+							<input type="text" class="form_control" name="recipBaseAddr" placeholder="기본주소" id="" disabled>
 						</div>
-						<button type="button" class="btn btn_dark btn_sm">
+						<button type="button" class="btn btn_dark btn_sm" onclick="fnOpenDaumAddr();">
 							<span>우편번호 찾기</span>
 						</button>
 					</div>
 				</div>
-				<div class="form_field">
-					<label class="input_label sr-only">기본주소</label>
-					<div class="ui_col_12">
-						<div class="input_wrap"> 
-							<input type="text" class="form_control" name="recipBaseAddr" placeholder="상세주소" id="">
-						</div>
-					</div>
-				</div>
 				<div class="form_field">
 					<label class="input_label sr-only">상세주소</label>
 					<div class="ui_col_12">
@@ -58,30 +51,30 @@
 			</div>
 			<div class="area_request">
 				<h6>배송요청 사항</h6> 
-				<div class="form_field">
+					<div class="form_field">
 					<div>
-						<input type="radio" name="rdi-request1" id="rdi-request11" value="문앞" checked="">
+						<input type="radio" name="rdi-request1" id="rdi-request11" value="문앞" >
 						<label for="rdi-request11"><span>문앞</span></label>
 					</div>
 					<div>
-						<input type="radio" name="rdi-request1" id="rdi-request12" value="직접받고 부재시 문 앞" checked="">
+						<input type="radio" name="rdi-request1" id="rdi-request12" value="직접받고 부재시 문 앞">
 						<label for="rdi-request12"><span>직접받고 부재시 문 앞</span></label>
 					</div>
 					<div>
-						<input type="radio" name="rdi-request1" id="rdi-request13" value="경비실" checked="">
+						<input type="radio" name="rdi-request1" id="rdi-request13" value="경비실">
 						<label for="rdi-request13"><span>경비실</span></label>
 					</div>
 					<div>
-						<input type="radio" name="rdi-request1" id="rdi-request14" value="택배함" checked="">
+						<input type="radio" name="rdi-request1" id="rdi-request14" value="택배함">
 						<label for="rdi-request14"><span>택배함</span></label>
 					</div>
 					<div>
-						<input type="radio" name="rdi-request1" id="rdi-request15" value="기타사항" checked="">
+						<input type="radio" name="rdi-request1" id="rdi-request15" value="기타사항">
 						<label for="rdi-request15"><span>기타사항</span></label>
 						<div class="info_box">
 							<div class="input_wrap">
 								<input type="text" class="form_control" maxlength="30" placeholder="보관장소만 입력 (필수)">
-							<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
+								<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
 							</div>
 						</div>
 					</div>
@@ -94,20 +87,19 @@
 	<button type="button" class="btn btn_dark" id="btn_delivery_addr_save"><span>배송지 등록</span></button>
 </div>
 
-
 <script th:inline="javascript">
 //컨텐츠 호출
 $(document).ready( function() {
 	// 배송요청사항 버튼기능
-	$("#deliveryAddrForm input[name=rdi-request1]").each(function(){
+	$("#deliveryAddForm input[name=rdi-request1]").each(function(){
 		// 버튼기능
 		$(this).on("click", function(){
 			var temp = $(this).parent().find('span').text();
-			$("input[name=delvMemoText]").val("");
+			$("#deliveryAddForm input[name=delvMemoText]").val("");
 			if (temp == "기타사항") {
-				$("input[name=delvMemoText]").attr("disabled", false);
+				$("#deliveryAddForm input[name=delvMemoText]").attr("disabled", false);
 			} else {
-				$("input[name=delvMemoText]").attr("disabled", true);
+				$("#deliveryAddForm input[name=delvMemoText]").attr("disabled", true);
 			}
 		});
 	});
@@ -117,9 +109,9 @@ $(document).ready( function() {
 var fnOpenDaumAddr = function() {
 	let daumZip = new daum.Postcode({
 		oncomplete: function(data) {
-			$('#deliveryAddrForm input[name=recipZipcode]').val(data.zonecode);
-			$('#deliveryAddrForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
-			$('#deliveryAddrForm input[name=recipDtlAddr]').focus();
+			$('#deliveryAddForm input[name=recipZipcode]').val(data.zonecode);
+			$('#deliveryAddForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#deliveryAddForm input[name=recipDtlAddr]').focus();
 			cfnCloseDaumAddr();
 		},
 		width: '100%'
@@ -132,12 +124,12 @@ var fnOpenDaumAddr = function() {
 $("#btn_delivery_addr_save").on("click", function(){
 	// 기본배송지여부
 	var defaultYn = "N";
-	if ($("#deliveryAddrForm input[name=defaultYn]").is(":checked")) {
+	if ($("#deliveryAddForm input[name=defaultYn]").is(":checked")) {
 		defaultYn = "Y";
 	}
 	
 	// 기타사항일때 텍스트 등록
-	var delvMemo = $("#deliveryAddrForm input[name=rdi-request1]:checked").parent().find('span').text();
+	var delvMemo = $("#deliveryAddForm input[name=rdi-request1]:checked").parent().find('span').text();
 	if ("기타사항" == delvMemo) {
 		delvMemo = $("input[name=delvMemoText]").val();
 	}
@@ -145,11 +137,11 @@ $("#btn_delivery_addr_save").on("click", function(){
 	// 배송지정보설정
 	var jsonObj = {
 		"defaultYn"			: defaultYn
-		, "recipNm"			: $("#deliveryAddrForm input[name=recipNm]").val()
-		, "recipPhnno"		: $("#deliveryAddrForm input[name=recipPhnno]").val()
-		, "recipZipcode"	: $("#deliveryAddrForm input[name=recipZipcode]").val()
-		, "recipBaseAddr"	: $("#deliveryAddrForm input[name=recipBaseAddr]").val()
-		, "recipDtlAddr"	: $("#deliveryAddrForm input[name=recipDtlAddr]").val()
+		, "recipNm"			: $("#deliveryAddForm input[name=recipNm]").val()
+		, "recipPhnno"		: $("#deliveryAddForm input[name=recipPhnno]").val()
+		, "recipZipcode"	: $("#deliveryAddForm input[name=recipZipcode]").val()
+		, "recipBaseAddr"	: $("#deliveryAddForm input[name=recipBaseAddr]").val()
+		, "recipDtlAddr"	: $("#deliveryAddForm input[name=recipDtlAddr]").val()
 		, "delvMemo"		: delvMemo
 	}
 	
@@ -181,8 +173,8 @@ $("#btn_delivery_addr_save").on("click", function(){
 					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
-					$("#adrsAddPop").html(result);
-					$("#adrsAddPop").modal("show");
+					$("#adrsChangePop .modal-dialog .modal-content").html(result);
+					$("#adrsChangePop").modal("show");
 				}
 			});	
 		}

+ 6 - 6
src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrChangePopWeb.html

@@ -54,7 +54,7 @@
 	</div>
 </div>
 <div class="modal-footer">
-	<button class="btn btn_dark" id="btn_adrsAdd_pop"><span>배송지 추가</span></button>
+	<button type="button" class="btn btn_dark" id="btn_adrsAdd_pop"><span>배송지 추가</span></button>
 </div>
 </form>
 
@@ -64,8 +64,8 @@ $(document).ready( function() {
 });
 
 // 2. 버튼기능구현
-// 2.1 배송지변경 팝업열기
-$('#btn_addrAdd_pop').on("click", function(){
+// 2.1 배송지추가 팝업열기
+$('#btn_adrsAdd_pop').on("click", function(){
 	$.ajax( {
 		type		: "POST",
 		url 		: '/order/delvAddrAddPop',
@@ -78,8 +78,8 @@ $('#btn_addrAdd_pop').on("click", function(){
 			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
-			$("#adrsChangePop").html(result);
-			$("#adrsChangePop").modal("show");
+			$("#adrsAddPop .modal-dialog .modal-content").html(result);
+			$("#adrsAddPop").modal("show");
 		}
 	});	
 });
@@ -116,7 +116,7 @@ $(".btn_addrModify_pop").on("click", function(){
 			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
-			$("#adrsModifyPop").html(result);
+			$("#adrsModifyPop .modal-dialog .modal-content").html(result);
 			$("#adrsModifyPop").modal("show");
 		}
 	});	

+ 105 - 119
src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrModifyPopWeb.html

@@ -1,112 +1,98 @@
-<div class="modal-dialog" role="document">
-	<div class="modal-content">
-		<div class="modal-header">
-			<h5 class="modal-title" id="adrsAddLabel">배송지 수정</h5>
-		</div>
-		<div class="modal-body">
-			<div class="pop_cont">
-				<form class="form_wrap form_full" name="deliveryAddrForm" id="deliveryAddrForm">
-					<input type="hidden" name="custDelvAddrSq" th:value="${deliveryAddrInfo.custDelvAddrSq}">
-					
-					<div class="area_adrsinfo">
-						<h6>배송지 정보</h6>
-						<div class="default_addrs">
-							<div class="form_field">
-								<th:block th:if="${deliveryAddrInfo.defaultYn} == 'Y'">
-									<input id="chk-default-addrs" type="checkbox" name="defaultYn" checked>
-								</th:block>
-								<th:block th:if="${deliveryAddrInfo.defaultYn} == 'N'">
-									<input id="chk-default-addrs" type="checkbox" name="defaultYn">
-								</th:block>
-								<label for="chk-default-addrs"><span>기본 배송지로 등록</span></label>
-							</div>
-						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">받는 분</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipNm" placeholder="받는 분" th:value="${deliveryAddrInfo.recipNm}">
-								</div>
-							</div>
-						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">휴대폰 번호</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipPhnno" placeholder="휴대폰 번호" th:value="${deliveryAddrInfo.recipPhnno}">
-								</div>
-							</div>
+<div class="modal-header">
+	<h5 class="modal-title" id="adrsModifyLabel">배송지 수정</h5>
+</div>
+<div class="modal-body">
+	<div class="pop_cont">
+		<form class="form_wrap form_full" name="deliveryModifyForm" id="deliveryModifyForm">
+			<input type="hidden" class="form_control" name="custDelvAddrSq" th:value="${deliveryAddrInfo.custDelvAddrSq}">
+			
+			<div class="area_adrsinfo">
+				<h6>배송지 정보</h6>
+				<div class="default_addrs">
+					<div class="form_field">
+						<th:block th:if="${deliveryAddrInfo.defaultYn} == 'Y'">
+							<input id="chk-default-addrs" type="checkbox" name="defaultYn" checked>
+						</th:block>
+						<th:block th:if="${deliveryAddrInfo.defaultYn} == 'N'">
+							<input id="chk-default-addrs" type="checkbox" name="defaultYn">
+						</th:block>
+						<label for="chk-default-addrs"><span>기본 배송지로 등록</span></label>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">받는 분</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="text" class="form_control" name="recipNm" placeholder="받는 분" id="" th:value="${deliveryAddrInfo.recipNm}">
 						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">배송주소</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipZipcode" placeholder="우편번호" th:value="${deliveryAddrInfo.recipZipcode}">
-									<button type="button" class="btn btn_dark btn_sm" onclick="fnOpenDaumAddr();">
-										<span>우편번호 찾기</span>
-									</button>
-								</div>
-							</div>
+					</div>
+				</div>	
+				<div class="form_field">
+					<label class="input_label sr-only">휴대폰 번호</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="text" class="form_control" name="recipPhnno" placeholder="휴대폰 번호" id="" th:value="${deliveryAddrInfo.recipPhnno}">
 						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">기본주소</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipBaseAddr" placeholder="기본주소" th:value="${deliveryAddrInfo.recipBaseAddr}">
-								</div>
-							</div>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">배송주소</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="hidden" name="recipZipcode" placeholder="우편번호" th:value="${deliveryAddrInfo.recipZipcode}">
+							<input type="text" class="form_control" name="recipBaseAddr" placeholder="기본주소" id="" th:value="${deliveryAddrInfo.recipBaseAddr}" disabled>
 						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">상세주소</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipDtlAddr" placeholder="상세주소" th:value="${deliveryAddrInfo.recipDtlAddr}">
-								</div>
-							</div>
+						<button type="button" class="btn btn_dark btn_sm" onclick="fnOpenDaumAddr();">
+							<span>우편번호 찾기</span>
+						</button>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">상세주소</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="text" class="form_control" name="recipDtlAddr" placeholder="상세주소" id="" th:value="${deliveryAddrInfo.recipDtlAddr}">
 						</div>
 					</div>
-					<div class="area_request">
-						<h6>배송요청 사항</h6>
-						<div class="form_field">
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request11" value="문앞"> 
-								<label for="rdi-request11"><span>문앞</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request12" value="직접받고 부재시 문 앞"> 
-								<label for="rdi-request12"><span>직접받고 부재시 문 앞</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request13" value="경비실"> 
-								<label for="rdi-request13"><span>경비실</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request14" value="택배함"> 
-								<label for="rdi-request14"><span>택배함</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request15" value="기타사항"> 
-								<label for="rdi-request15"><span>기타사항</span></label>
-								<div class="info_box">
-									<div class="input_wrap">
-										<input type="text" name="delvMemoText" class="form_control" maxlength="30" placeholder="보관장소만 입력" disabled>
-										<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
-									</div>
-								</div>
+				</div>
+			</div>
+			<div class="area_request">       
+				<h6>배송요청 사항</h6> 
+				<div class="form_field">
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request11" value="문앞">
+						<label for="rdi-request11"><span>문앞</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request12" value="직접받고 부재시 문 앞">
+						<label for="rdi-request12"><span>직접받고 부재시 문 앞</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request13" value="경비실">
+						<label for="rdi-request13"><span>경비실</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request14" value="택배함">
+						<label for="rdi-request14"><span>택배함</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request15" value="기타사항">
+						<label for="rdi-request15"><span>기타사항</span></label>
+						<div class="info_box">
+							<div class="input_wrap">
+								<input type="text" name="delvMemoText" class="form_control" maxlength="30" placeholder="보관장소만 입력 (필수)" disabled>
+								<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
 							</div>
 						</div>
 					</div>
-					<div class="btn_group_block">
-						<button type="button" class="btn btn_dark btn_block" id="btn_delivery_addr_save">
-							<span>배송지 수정</span>
-						</button>
-					</div>
-				</form>
+				</div>
 			</div>
-		</div>
+		</form>
 	</div>
 </div>
-<a href="#close-modal" rel="modal:close" id="adrsAddPop_close" class="close-modal">Close</a>
+<div class="modal-footer">
+	<button type="button" class="btn btn_dark" id="btn_delivery_addr_save"><span>배송지 등록</span></button>
+</div>
 
 <script th:inline="javascript">
 var delvMemo = [[${deliveryAddrInfo.delvMemo}]];
@@ -124,12 +110,12 @@ $(document).ready( function() {
 	}
 	
 	if (tempMemo) {
-		$("#deliveryAddrForm input[name=rdi-request1]").eq(4).attr("checked", true);
+		$("#deliveryModifyForm input[name=rdi-request1]").eq(4).attr("checked", true);
 		$("input[name=delvMemoText]").attr("disabled", false);
 		$("input[name=delvMemoText]").val(delvMemo);
 	}
 	
-	$("#deliveryAddrForm input[name=rdi-request1]").each(function(){
+	$("#deliveryModifyForm input[name=rdi-request1]").each(function(){
 		var temp = $(this).parent().find('span').text();
 		if (delvMemo == temp) {
 			$(this).attr("checked", true);
@@ -137,15 +123,15 @@ $(document).ready( function() {
 	});
 	
 	// 배송요청사항 버튼기능
-	$("#deliveryAddrForm input[name=rdi-request1]").each(function(){
+	$("#deliveryModifyForm input[name=rdi-request1]").each(function(){
 		// 버튼기능
 		$(this).on("click", function(){
 			var temp = $(this).parent().find('span').text();
-			$("input[name=delvMemoText]").val("");
+			$("#deliveryModifyForm input[name=delvMemoText]").val("");
 			if (temp == "기타사항") {
-				$("input[name=delvMemoText]").attr("disabled", false);
+				$("#deliveryModifyForm input[name=delvMemoText]").attr("disabled", false);
 			} else {
-				$("input[name=delvMemoText]").attr("disabled", true);
+				$("#deliveryModifyForm input[name=delvMemoText]").attr("disabled", true);
 			}
 		});
 	});
@@ -155,9 +141,9 @@ $(document).ready( function() {
 var fnOpenDaumAddr = function() {
 	let daumZip = new daum.Postcode({
 		oncomplete: function(data) {
-			$('#deliveryAddrForm input[name=recipZipcode]').val(data.zonecode);
-			$('#deliveryAddrForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
-			$('#deliveryAddrForm input[name=recipDtlAddr]').focus();
+			$('#deliveryModifyForm input[name=recipZipcode]').val(data.zonecode);
+			$('#deliveryModifyForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#deliveryModifyForm input[name=recipDtlAddr]').focus();
 			cfnCloseDaumAddr();
 		},
 		width: '100%'
@@ -170,25 +156,25 @@ var fnOpenDaumAddr = function() {
 $("#btn_delivery_addr_save").on("click", function(){
 	// 기본배송지여부
 	var defaultYn = "N";
-	if ($("#deliveryAddrForm input[name=defaultYn]").is(":checked")) {
+	if ($("#deliveryModifyForm input[name=defaultYn]").is(":checked")) {
 		defaultYn = "Y";
 	}
 	
 	// 기타사항일때 텍스트 등록
-	var delvMemo = $("#deliveryAddrForm input[name=rdi-request1]:checked").parent().find('span').text();
+	var delvMemo = $("#deliveryModifyForm input[name=rdi-request1]:checked").parent().find('span').text();
 	if ("기타사항" == delvMemo) {
-		delvMemo = $("input[name=delvMemoText]").val();
+		delvMemo = $("#deliveryModifyForm input[name=delvMemoText]").val();
 	}
 	
 	// 배송지정보설정
 	var jsonObj = {
 		"defaultYn"			: defaultYn
-		, "custDelvAddrSq"	: parseInt($("#deliveryAddrForm input[name=custDelvAddrSq]").val())
-		, "recipNm"			: $("#deliveryAddrForm input[name=recipNm]").val()
-		, "recipPhnno"		: $("#deliveryAddrForm input[name=recipPhnno]").val()
-		, "recipZipcode"	: $("#deliveryAddrForm input[name=recipZipcode]").val()
-		, "recipBaseAddr"	: $("#deliveryAddrForm input[name=recipBaseAddr]").val()
-		, "recipDtlAddr"	: $("#deliveryAddrForm input[name=recipDtlAddr]").val()
+		, "custDelvAddrSq"	: parseInt($("#deliveryModifyForm input[name=custDelvAddrSq]").val())
+		, "recipNm"			: $("#deliveryModifyForm input[name=recipNm]").val()
+		, "recipPhnno"		: $("#deliveryModifyForm input[name=recipPhnno]").val()
+		, "recipZipcode"	: $("#deliveryModifyForm input[name=recipZipcode]").val()
+		, "recipBaseAddr"	: $("#deliveryModifyForm input[name=recipBaseAddr]").val()
+		, "recipDtlAddr"	: $("#deliveryModifyForm input[name=recipDtlAddr]").val()
 		, "delvMemo"		: delvMemo
 	}
 	
@@ -220,11 +206,11 @@ $("#btn_delivery_addr_save").on("click", function(){
 					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
-					$("#adrsAddPop").html(result);
-					$("#adrsAddPop").modal("show");
+					$("#adrsChangePop .modal-dialog .modal-content").html(result);
+					$("#adrsChangePop").modal("show");
 				}
 			});	
 		}
 	});
 });
-</script>
+</script>

+ 50 - 57
src/main/webapp/WEB-INF/views/web/order/OrderDelvMemoChangePopWeb.html

@@ -1,57 +1,51 @@
 <!-- 배송요청사항수정 팝업 -->
-<div class="modal-dialog" role="document">
-	<form class="form_wrap form_full" name="deliveryAddrForm" id="deliveryAddrForm">
-		<div class="modal-content">
-			<div class="modal-header">
-				<h5 class="modal-title" id="rqstModifyLabel">배송요청 사항</h5>
-			</div>
-			<div class="modal-body">
-				<div class="pop_cont">
-					<div class="area_request">
-						<div class="form_field">
-							<div>
-								<input type="radio" name="rdi-request3" id="rdi-request31"> 
-								<label for="rdi-request31"><span>문앞</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request3" id="rdi-request32"> 
-								<label for="rdi-request32"><span>직접받고 부재시 문 앞</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request3" id="rdi-request33"> 
-								<label for="rdi-request33"><span>경비실</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request3" id="rdi-request34"> 
-								<label for="rdi-request34"><span>택배함</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request3" id="rdi-request35"> 
-								<label for="rdi-request35"><span>기타사항</span></label>
-								<div class="info_box">
-									<div class="input_wrap">
-										<input type="text" name="delvMemoText" class="form_control" maxlength="30" placeholder="보관장소만 입력" disabled>
-										<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
-									</div>
-								</div>
+<div class="modal-header">
+	<h5 class="modal-title" id="rqstModifyLabel">배송요청 사항</h5>
+</div>
+<div class="modal-body">
+	<div class="pop_cont">
+		<form class="form_wrap form_full" name="deliveryAddrMemoForm" id="deliveryAddrMemoForm">
+			<div class="area_request">
+				<div class="form_field">
+					<div>
+						<input type="radio" name="rdi-request3" id="rdi-request31">
+						<label for="rdi-request31"><span>문앞</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request3" id="rdi-request32">
+						<label for="rdi-request32"><span>직접받고 부재시 문 앞</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request3" id="rdi-request33">
+						<label for="rdi-request33"><span>경비실</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request3" id="rdi-request34">
+						<label for="rdi-request34"><span>택배함</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request3" id="rdi-request35">
+						<label for="rdi-request35"><span>기타사항</span></label>
+						<div class="info_box">
+							<div class="input_wrap">
+								<input type="text" name="delvMemoText" class="form_control" maxlength="30" placeholder="보관장소만 입력 (필수)" disabled>
+								<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
 							</div>
 						</div>
 					</div>
-					<div class="btn_group_block">
-						<button type="button" class="btn btn_dark btn_block" id="btn_delvMemoChange">
-							<span>등록</span>
-						</button>
-					</div>
 				</div>
 			</div>
-		</div>
-	</form>
+		</form>
+	</div>
+</div>
+<div class="modal-footer">
+    <button type="button" id="btn_delvMemoChange" class="btn btn_dark"><span>등록</span></button>
 </div>
 
 <script type="text/javascript">
 // 초기배송메모설정
 $(document).ready( function() {
-	var delvMemo = $("input[name='delvMemo']").val();
+	var delvMemo = $("#orderForm input[name=delvMemo]").val();
 	var delvMemoArr = ["문앞", "직접받고 부재시 문 앞", "경비실", "택배함"];
 	var tempMemo = true;
 	
@@ -63,12 +57,12 @@ $(document).ready( function() {
 	}
 	
 	if (tempMemo) {
-		$("#deliveryAddrForm input[name=rdi-request3]").eq(4).attr("checked", true);
-		$("input[name=delvMemoText]").attr("disabled", false);
-		$("input[name=delvMemoText]").val(delvMemo);
+		$("#deliveryAddrMemoForm input[name=rdi-request3]").eq(4).attr("checked", true);
+		$("#deliveryAddrMemoForm input[name=delvMemoText]").attr("disabled", false);
+		$("#deliveryAddrMemoForm input[name=delvMemoText]").val(delvMemo);
 	}
 	
-	$("#deliveryAddrForm input[name=rdi-request3]").each(function(){
+	$("#deliveryAddrMemoForm input[name=rdi-request3]").each(function(){
 		var temp = $(this).parent().find('span').text();
 		if (delvMemo == temp) {
 			$(this).attr("checked", true);
@@ -76,25 +70,24 @@ $(document).ready( function() {
 	});
 	
 	// 배송요청사항 버튼기능
-	$("#deliveryAddrForm input[name=rdi-request3]").each(function(){
+	$("#deliveryAddrMemoForm input[name=rdi-request3]").each(function(){
 		// 버튼기능
 		$(this).on("click", function(){
 			var temp = $(this).parent().find('span').text();
-			alert
-			$("input[name=delvMemoText]").val("");
+			$("#deliveryAddrMemoForm input[name=delvMemoText]").val("");
 			if (temp == "기타사항") {
-				$("input[name=delvMemoText]").attr("disabled", false);
+				$("#deliveryAddrMemoForm input[name=delvMemoText]").attr("disabled", false);
 			} else {
-				$("input[name=delvMemoText]").attr("disabled", true);
+				$("#deliveryAddrMemoForm input[name=delvMemoText]").attr("disabled", true);
 			}
 		});
 	});
 	
 	// 배송메모등록버튼
 	$("#btn_delvMemoChange").on("click", function(){
-		var rtnTxt = $("input[name='rdi-request3']:checked").parent().find('span').text();
+		var rtnTxt = $("#deliveryAddrMemoForm input[name='rdi-request3']:checked").parent().find('span').text();
 		if (rtnTxt == "기타사항") {
-			rtnTxt = $("input[name='delvMemoText']").val();
+			rtnTxt = $("#deliveryAddrMemoForm input[name='delvMemoText']").val();
 		} 
 
 		// 배송메모 부모창에 설정
@@ -102,9 +95,9 @@ $(document).ready( function() {
 			fnChangeDelvMemo(rtnTxt);
 		}
 
-		$("input[name='delvMemo']").val(rtnTxt);		// input 값에 설정
-		$("#delvMemo").text(rtnTxt);					// 메모 text 설정
-		$(".close-modal").trigger("click");				// 팝업닫기
+		$("#orderForm input[name=delvMemo]").val(rtnTxt);		// input 값에 설정
+		$("#delvMemo").text(rtnTxt);							// 메모 text 설정
+		$(".close-modal").trigger("click");						// 팝업닫기
 	});
 });
 </script>

+ 135 - 27
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -23,7 +23,7 @@
 
 <!-- payment.js -->
 <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
-<script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+<script type="text/javascript" src="/biz/payment.js"></script>
 
 <form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
 
@@ -432,7 +432,7 @@
 <!-- //배송지변경 팝업 -->
 
 <!-- 배송지추가 팝업 -->
-<div class="modal fade adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true">
+<div class="modal fade adrsModify_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true">
 	<div class="modal-dialog" role="document">
 		<div class="modal-content">
 			<!-- 배송지추가 팝업 내용 -->
@@ -599,7 +599,6 @@ var custemerInfoSet = function() {
 
 // 1.2 배송정보로드
 var deliveryAddrInfoSet = function(temp) {
-	
 	$.ajax( {
 		type		: "POST",
 		url 		: '/order/deliveryAddrInfo',
@@ -639,8 +638,8 @@ var deliveryAddrInfoSet = function(temp) {
 						gagajf.showProgressbar(true);
 					},
 					success 	: function(result) {
-						$("#adrsAddPop .modal-dialog .modal-content").html(result);
-						$("#adrsAddPop").modal("show");
+						$("#adrsChangePop .modal-dialog .modal-content").html(result);
+						$("#adrsChangePop").modal("show");
 					}
 				});	
 			});
@@ -648,12 +647,12 @@ var deliveryAddrInfoSet = function(temp) {
 			// 배송요청사항 팝업열기
 			$("#btn_rqstModify_pop").on("click", function(e){
 				var jsonObj = new Object();
-				jsonObj.delvMemo = $("input[name='delvMemo']").val();
+				jsonObj.delvMemo = $("#orderForm input[name=delvMemo]").val();
 				
 				$.ajax({
 					type		: "POST",
 					url 		: "/order/delvMemoChangePop",
-					data		: jsonObj,
+					data		: JSON.stringify(jsonObj),
 					dataType 	: "html",
 					success 	: function(result) {
 						if (result != null) {
@@ -837,6 +836,14 @@ var paymentInfoSet = function() {
 				$("#paymentInfo").css("display", "block");
 				$("#paymentInfo").html(result);
 				
+				// 결제타입명칭 설정
+				$("#orderForm .area_paymethod .paymethod_box ul li").on("click", function(){
+					var payType = $(this).find(".payType").text();
+					if ($(this).find("input[name=rdi-paynormal]").is(":checked")) {
+						$(".payTypeNm").text(payType);
+					}
+				});
+				
 				// 결재하기
 				$("#btn_payment").on("click", function(){
 					// 사은품정보
@@ -974,7 +981,7 @@ var paymentInfoSet = function() {
 // 1.7 프로모션 쿠폰 적용 함수
 var serialCpnApply = function(){
 	let data = {
-		rdCpnNm : $("#payForm #serialCpnNm").val()
+		rdCpnNm : $("#serialCpnNm").val()
 	}
 
 	$.ajax( {
@@ -989,6 +996,7 @@ var serialCpnApply = function(){
 
 			// 성공일때는 쿠폰정보 및 포인트 정보 reset
 			if (result.serialCpnInfo.result == "SUCCESS") {
+				alert("쿠폰 등록이 되었습니다.");
 				// 1.8 할인영역 재로드
 				dcAmtInfoSet(jsonData);
 			} else {
@@ -1038,7 +1046,7 @@ var dcAmtInfoSet = function() {
 						// 1.8.3 쿠폰적용초기화(할인율최고)(배송비)
 						custDelvCpnInit();
 						
-						// 쿠폰적용버튼
+						// 1.8.4 쿠폰적용버튼
 						$("#btn_coupon_apply").on("click", function(){
 							
 							// 상품쿠폰적용
@@ -1048,14 +1056,29 @@ var dcAmtInfoSet = function() {
 							
 							// 장바구니쿠폰적용
 							$('.cartCpn').each(function(index){
-								if ($(this).find("rdi-cart-coupon").is(":checked")) {
-									alert("a");
+								if ($(this).find("input[name=rdi-cart-coupon]").is(":checked")) {
 									custCpnApply($(this));
 								}
 							});
 							
+							// 최대할인혜택적용 체크해제
+							if ($("#chk-maxdisc").is(":checked")) {
+								$("#chk-maxdisc").attr("checked", false);
+							}
+							
 							$(".close-modal").trigger("click");				// 팝업닫기
 						});
+						
+						// 1.8.5 쿠폰 최대할인금액 초기화 버튼 설정
+						$("#chk-maxdisc").on("click", function(){
+							if ($(this).is(":checked")) {
+								// 상품&장바구니쿠폰 초기환
+								custGoodsCpnInit();
+								
+								// 배송비쿠폰 초기환
+								custDelvCpnInit();
+							}
+						});
 					}
 				});
 				
@@ -1166,6 +1189,9 @@ var dcAmtInfoSet = function() {
 // 1.9.1 상품쿠폰초기화
 var custGoodsCpnInit = function() {
 	
+	// 쿠폰최대할인 적용
+	$("#chk-maxdisc").attr("checked", true);
+	
 	// 쿠폰초기화
 	$(".goodsCpn").each(function(index){
 		// select box 쿠폰 적용
@@ -1235,6 +1261,11 @@ var custCartCpnInit = function() {
 		// 쿠폰 select 버튼기능
 		$(this).on("click", function(){
 			custCpnApplyTemp($(this)); // 쿠폰적용
+			
+			// 최대할인혜택적용 체크해제
+			if ($("#chk-maxdisc").is(":checked")) {
+				$("#chk-maxdisc").attr("checked", false);
+			}
 		});
 	});
 	
@@ -1307,6 +1338,9 @@ var custCpnApplyTemp = function(obj) {
 				custCpnApplyTemp($(this)); // 쿠폰적용
 			}
 		});
+		
+		//상품쿠폰 선택불가 처리
+		custCpnSqLiDisabled();
 	}
 	// 장바구니쿠폰적용
 	else if (cpnType == "cartCpn") {
@@ -1403,6 +1437,9 @@ var custCpnApply = function(obj) {
 		
 		// 선택활성화
 		$(obj).addClass("selected");
+		
+		//상품쿠폰 선택불가 처리
+		custCpnSqLiDisabled();
 	} 
 	// 장바구니쿠폰적용
 	else if (cpnType == "cartCpn") {
@@ -1444,6 +1481,26 @@ var custCpnApply = function(obj) {
 			});
 		});
 		
+		// 장바구니쿠폰 결제가능수단목록조회
+		if (obj.find("input[name='payTypeArr']").length > 0) {
+			$("#orderForm input[name=rdi-paynormal]").attr("disabled", true);
+			$("#orderForm input[name=rdi-paynormal]").attr("checked", false);
+			
+			obj.find("input[name='payTypeArr']").each(function(i){
+				var payType = $(this).val();
+				$('#orderForm .'+payType).attr("disabled", false);
+				//$('#orderForm .'+payType).eq(0).attr("checked", true);
+				//if (i == 0) {
+					//$("#orderForm input[name=rdi-paynormal]").attr("checked", true);
+				//}
+			});
+		} else {
+			$("#orderForm input[name=rdi-paynormal]").attr("disabled", false);
+		}
+		
+		// 선택안함
+		$(".payTypeNm").text("선택없음");
+		
 		// 금액일때 할인금액 적용
 		if (dcWay == "G240_10") {
 			cartCpnDcSumAmt = dcVal;
@@ -1519,6 +1576,32 @@ var custCpnApply = function(obj) {
 	
 }
 
+// 1.11.1 상품쿠폰 선택불가 처리
+var custCpnSqLiDisabled = function() {
+	// 상품쿠폰 선택불가 처리
+	$(".goodsCpn ul li").each(function(){
+		var custCpnSq = $(this).attr("value");
+		var liObj = $(this);
+		
+		liObj.attr("aria-disabled", false);
+		
+		// 선택된 li 제외
+		if ($(this).hasClass("selected") == false) {
+			// 적용안함 제외
+			if (custCpnSq > 0) {
+				// 선택된 custCpnSq li와 같으면 선택불가처리
+				$(".area_item_coupon input[name=custCpnSq]").each(function(){
+					var inputCustCpSq = $(this).val();
+					if (custCpnSq == inputCustCpSq) {
+						// 선택불가처리
+						liObj.attr("aria-disabled", true);
+					}
+				});
+			}
+		}
+	});
+}
+
 // 1.12 쿠폰중복체크 후 적용불가
 var custCpnNotApply = function(obj) {
 	// 이전에 등록된 쿠폰시퀀스  
@@ -1784,13 +1867,7 @@ var custCpnSumAmtCal = function() {
 };
 </script>
 
-<script type="text/javascript">
-
-// 2. 버튼기능구현
-// 2.1 배송지변경 팝업열기
-// $('#btn_adrsChange_pop').on("click", function(){
-	// $("#adrsChangePop").modal("show");
-// });
+<script th:inline="javascript">
 
 $(document).ready( function() {
 	//해외배송 입력
@@ -1865,14 +1942,6 @@ $(document).ready( function() {
 		return false;
 	});
 
-	
-
-	//배송지추가 팝업열기
-	$(document).on('click','#btn_addrAdd_pop',function(e){
-		$("#adrsAddPop").modal("show");
-		return false;
-	});
-
 	//배송지수정 팝업열기
 	$(document).on('click','#btn_addrModify_pop',function(e){
 		$("#adrsModifyPop").modal("show");
@@ -1924,8 +1993,47 @@ $(document).ready( function() {
 		$("#qPayidConfirm_pop").modal("show");
 		return false;
 	});
-
 });
+
+//PG 카카오페이 결제준비 처리
+var fnKakaoPaymentReady = function() {
+	let nextRedirectUrl = $('#order_info input[name=nextRedirectPcUrl]').val();
+	let option = 'width=420, height=520';
+	
+	window.open(nextRedirectUrl, 'kakaoPaymentPopup', option);
+}
+
+// PG 카카오페이 결제 승인 요청
+var fnKakaoPaymentRequest = function(pgToken) {
+	// Token 값 설정
+	$('#order_info input[name=pgToken]').val(pgToken);
+	
+	// Form Submit
+	document.order_info.submit();
+	
+	return true;
+}
+
+// PG 네이버페이 결제준비 처리
+var fnNaverPaymentReady = function() {
+	let naverPayUrl = 'https://' + [[${@environment.getProperty('naverPay.payUrl.web')}]];
+	let reserveId = $('#order_info input[name=reserveId]').val();
+	let url = naverPayUrl + '/payments/' + reserveId;
+	let option = 'width=750, height=' + $(window).height();
+	
+	window.open(url, 'naverPaymentPopup', option);
+}
+
+// PG 네이버페이 결제 승인 요청
+var fnNaverPaymentRequest = function(paymentId) {
+	// TID 설정
+	$('#order_info input[name=pgTid]').val(paymentId);
+
+	// Form Submit
+	document.order_info.submit();
+
+	return true;
+}
 </script>
 
 </th:block>

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

@@ -23,7 +23,7 @@
 
 <!-- payment.js -->
 <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
-<script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+<script type="text/javascript" src="/biz/payment.js"></script>
 
 <form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
 

+ 2 - 2
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb_20210318.html

@@ -23,7 +23,7 @@
 
 <!-- payment.js -->
 <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
-<script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+<script type="text/javascript" src="/biz/payment.js"></script>
 
 <form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
 
@@ -1159,4 +1159,4 @@ $(document).ready( function() {
 
 </th:block>
 </body>
-</html>
+</html>

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

@@ -23,7 +23,7 @@
 
 <!-- payment.js -->
 <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
-<script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+<script type="text/javascript" src="/biz/payment.js"></script>
 
 <form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
 

+ 15 - 15
src/main/webapp/WEB-INF/views/web/order/OrderPaymentInfoWeb.html

@@ -20,7 +20,7 @@
 			<div class="fold_tit">
 				<span>결제수단 선택</span>
 			</div>
-			<div class="data">
+			<div class="data payTypeNm">
 				<span>신용카드</span>
 			</div>
 		</div>
@@ -32,47 +32,47 @@
 			<div class="paymethod_box">
 				<ul class="sel_method">
 					<li>
-						<input type="radio" name="rdi-paynormal" id="payCreditCard" value="KCP|G014_30" checked="checked">
-						<label for="payCreditCard"><span>신용카드</span></label>
+						<input type="radio" name="rdi-paynormal" id="payCreditCard" class="KCP" value="KCP|G014_30">
+						<label for="payCreditCard"><span class="payType">신용카드</span></label>
 					</li>
 					<li>
-						<input type="radio" name="rdi-paynormal" id="payCellphone" value="KCP|G014_60"> 
-						<label for="payCellphone"><span>휴대폰 결제</span></label>
+						<input type="radio" name="rdi-paynormal" id="payCellphone" class="KCP" value="KCP|G014_60"> 
+						<label for="payCellphone"><span class="payType">휴대폰 결제</span></label>
 					</li>
 					<li>
-						<input type="radio" name="rdi-paynormal" id="payKakao" value="KAKAO|G014_99"> 
+						<input type="radio" name="rdi-paynormal" id="payKakao" class="KAKAO" value="KAKAO|G014_99"> 
 						<label for="payKakao">
 							<span>
-								<em class="sr-only">카카오페이 결제</em>
+								<em class="sr-only payType">카카오페이 결제</em>
 								<em class="payimg kakao"></em>
 							</span>
 						</label>
 					</li>
 					<li>
-						<input type="radio" name="rdi-paynormal" id="payNaver" value="NAVER|G014_99"> 
+						<input type="radio" name="rdi-paynormal" id="payNaver" class="NAVER" value="NAVER|G014_99"> 
 						<label for="payNaver">
 							<span>
-								<em class="sr-only">네이버페이 결제</em>
+								<em class="sr-only payType">네이버페이 결제</em>
 								<em class="payimg naver"></em>
 							</span>
 						</label>
 					</li>
 					<li>
-						<input type="radio" name="rdi-paynormal" id="payPayco" value="PAYCO|G014_30"> 
+						<input type="radio" name="rdi-paynormal" id="payPayco" class="PAYCO" value="PAYCO|G014_30"> 
 						<label for="payPayco">
 							<span>
-								<em class="sr-only">페이코 결제</em>
+								<em class="sr-only payType">페이코 결제</em>
 								<em class="payimg payco"></em>
 							</span>
 						</label>
 					</li>
 					<li>
-						<input type="radio" name="rdi-paynormal" id="payRealBank" value="KCP|G014_10"> 
-						<label for="payRealBank"><span>실시간계좌이체</span></label>
+						<input type="radio" name="rdi-paynormal" id="payRealBank" class="KCP" value="KCP|G014_10"> 
+						<label for="payRealBank"><span class="payType">실시간계좌이체</span></label>
 					</li>
 					<li>
-						<input type="radio" name="rdi-paynormal" id="payVirtualBank" value="KCP|G014_20"> 
-						<label for="payVirtualBank"><span>무통장입금</span></label>
+						<input type="radio" name="rdi-paynormal" id="payVirtualBank" class="KCP" value="KCP|G014_20"> 
+						<label for="payVirtualBank"><span class="payType">무통장입금</span></label>
 					</li>
 				</ul>
 			</div>

+ 22 - 21
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -294,7 +294,7 @@ if(review != null || review != ''){
 		html += '									<img alt="" class="vLHTC pd_img" src="'+ _imgUrl +'/'+item.sysImgNm +'">';
 		html += '								</div>';
 		html += '								<div class="itemName">'+item.goodsNm+'</div>';
-		html += '								<p class="itemPrice">'+comma(item.currPrice)+'원</p>';
+		html += '								<p class="itemPrice">'+item.currPrice.addComma()+'원</p>';
 		html += '							</a>';
 		html += '						</div>';
 		html += '					</div>';
@@ -328,26 +328,34 @@ if(coupon != null || coupon != ''){
 		if (item.dcWay == '할인율') {
 			html += '							<span> <span><em>'+item.dcPval+'%</em></span>';
 		}else{
-			html += '							<span><em>'+comma(item.dcPval)+'</em>원</span>'; 
+			html += '							<span><em>'+item.dcPval.addComma()+'</em>원</span>'; 
 		}
 		html += '						</p>';
-		html += '						<p class="cp_condition">'+comma(item.buyLimitAmt)+'원 이상 구매 시 최대 ' +comma(item.maxDcAmt)+'원 할인';
+		html += '						<p class="cp_condition">'+item.buyLimitAmt.addComma()+'원 이상 구매 시 최대 ' +item.maxDcAmt.addComma()+'원 할인';
+
 		if (item.custPubLimitQty != 0) {
 			html += '								<span>1인 최대 '+item.custPubLimitQty+'장</span>';	
 		}
 		
 		html += '						</p>';
 		html += '					</div>';
-		if (item.couponStat == '쿠폰받기') {
+		if(item.coupontStat != null){
+			if (item.couponStat == '쿠폰받기') {
+				html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
+				html += '						<span>쿠폰받기</span>';								/* 받기완료  */
+				html += '					</button>';			
+			}else{
+				html += '					<button type="button"';
+				html += '						class="btn btn_dark btn_block btn_coupon_done" disabled>';  
+				html += '						<span>받기완료</span>';								
+				html += '					</button>';			
+			}
+		}else{
 			html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
 			html += '						<span>쿠폰받기</span>';								/* 받기완료  */
-			html += '					</button>';			
-		}else{
-			html += '					<button type="button"';
-			html += '						class="btn btn_dark btn_block btn_coupon_done" disabled>';  
-			html += '						<span>받기완료</span>';								
-			html += '					</button>';			
+			html += '					</button>';		
 		}
+		
 		html += '				</div>';
 		html += '				<button type="button" class="btn_underline"	id="btn_cpinfo_pop" onclick="useInfoCoupon('+item.cpnId+')">';
 		html += '					<span>사용안내</span>';
@@ -437,9 +445,9 @@ if(goods1 != null || goods1 != ''){
 					html += '                        <div class="dp_listItems_brand">'+item.brandKnm+'</div>';
 					html += '                        <div class="dp_listItems_name">'+item.goodsNm+'</div>';
 					html += '                        <div class="dp_listItems_price">';
-					html += '                            <span class="price">'+comma(item.currPrice)+'</span>';
+					html += '                            <span class="price">'+item.currPrice.addComma()+'</span>';
 					if (item.currPrice != item.listPrice) {
-						html += '                            <del>'+comma(item.listPrice)+'</del>';
+						html += '                            <del>'+item.listPrice.addComma()+'</del>';
 						html += '                            <span class="percent">'+Math.floor(item.dcRate)+'%</span>';
 					}
 					
@@ -504,9 +512,9 @@ if(goods2 != null || goods2 != ''){
 					html+='                                </div>';
 					html+='                                <p class="itemBrand">'+item.brandKnm+'</p>';
 					html+='                                <div class="itemName">'+item.goodsNm+'</div>';
-					html+='                               <p class="itemPrice">'+comma(item.currPrice);
+					html+='                               <p class="itemPrice">'+item.currPrice.addComma();
 					if (item.currPrice != item.listPrice) {
-						html+='                                    <span class="itemPrice_original">'+comma(item.listPrice)+'</span>';
+						html+='                                    <span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
 						html+='                                    <span class=" itemPercent">'+Math.floor(item.dcRate)+'%</span>';
 					}
 					
@@ -573,13 +581,6 @@ var useInfoCoupon = function (id) {
 		// 화면 전환 필요		
 	}
 
-	
-//세번째 자리 콤마찍기 (숫자만 포함, 소수점자리 구분)
-function comma(num){
-	return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
-}
-
-
 </script>
 		<script type="text/javascript">
 	    // 컨텐츠 호출

+ 21 - 3
src/main/webapp/ux/pc/js/mypage.js → src/main/webapp/biz/mypage.js

@@ -145,6 +145,24 @@ var fnReSendSms = function(param) {
 
 // 반품/취소/교환 버튼 클릭 이벤트
 var fnCreateChange = function(param, gubun) {
+	let ordCanChgQty = $(param).attr('ordCanChgQty');
+
+	// 반품/취소/교환 가능 여부 체크
+	if (ordCanChgQty == 0) {
+		let str = '';
+		if (gubun == 'cancel') {
+			str = '취소 가능한 수량이 없습니다.';
+		} else if (gubun == 'return') {
+			str = '반품 가능한 수량이 없습니다.';
+		} else if (gubun == 'exchange') {
+			str = '교환 가능한 수량이 없습니다.';
+		}
+
+		mcxDialog.alert(str);
+		return false;
+	}
+
+	// 반품/취소/교환 페이지 이동
 	let ordNo = $(param).attr('ordNo');
 	let ordDtlNo = $(param).attr('ordDtlNo');
 
@@ -199,7 +217,7 @@ var fnChangeDeliveryAddr = function(param) {
 			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
-			$("#adrsAddPop").html(result);
+			$("#adrsAddPop .modal-dialog .modal-content").html(result);
 			$("#adrsAddPop").modal("show");
 		}
 	});
@@ -229,7 +247,7 @@ $("#btn_rqstModify_pop").on("click", function(e){
 		dataType 	: "html",
 		success 	: function(result) {
 			if (result != null) {
-				$("#rqstModifyPop").html(result);
+				$("#rqstModifyPop .modal-dialog .modal-content").html(result);
 				$("#rqstModifyPop").modal("show");
 			}
 		}
@@ -256,7 +274,7 @@ var fnChangeDeliveryMemo = function() {
 		dataType 	: "html",
 		success 	: function(result) {
 			if (result != null) {
-				$("#rqstModifyPop").html(result);
+				$("#rqstModifyPop .modal-dialog .modal-content").html(result);
 				$("#rqstModifyPop").modal("show");
 			}
 		}

+ 0 - 0
src/main/webapp/ux/pc/js/payment.js → src/main/webapp/biz/payment.js


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

@@ -712,7 +712,7 @@ function cfnConsentUseInfo(custNm) {
  * @access : public
  * @desc   : 로그인 확인
  * <pre>
- *		cfCheckLogin('callbackFn');
+ *		cfCheckLogin();
  * </pre>
  */
 function cfCheckLogin() {

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff