Browse Source

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

# Conflicts:
#	src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html
card007 5 năm trước cách đây
mục cha
commit
7ba91ae59f

+ 177 - 144
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -488,6 +488,11 @@ public class TsfCartService {
 				if (cart.getTmtbDcAmt() == 0) {
 					cart.setTmtbDcAmt(cart.getCurrPrice());
 				}
+				if(cart.getPntRate() > 0) {
+					cart.setSavePntAmt((int) (cart.getTmtbDcAmt() * cart.getPntRate() / 100.0));
+				} else {
+					cart.setSavePntAmt(0);
+				}
 			}
 		}
 
@@ -506,6 +511,32 @@ public class TsfCartService {
 		return order;
 	}
 
+	// 장바구니 수량 계산(품절제거)
+	@SuppressWarnings("unchecked")
+	public Order getCartNotSoldoutCnt() {
+		Order order = new Order();
+		//ModelAndView result = new ModelAndView();
+		GagaMap result = new GagaMap();							// return
+		List<Integer> cartSqs = new ArrayList<Integer>();				// 품절 제외 장바구니 리스트
+
+		// 로그인 체크
+		if(TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			order.setCustNo(0);
+		}
+		order.setFrontGb(TsfSession.getFrontGb());
+		order.setJsessionId(TscSession.getSessionId());
+
+		// 장바구니 상품 조회
+		Collection<Order> cartGoodsList = cartDao.getCartGoodsList(order);
+
+		// 총계 금액 계산 (수량 계산 내부에 존재)
+		setCartListTotAmtInfo(cartGoodsList, order);
+
+		return order;
+	}
+
 	/**
 	 * 다다익선 할인 금액 조회
 	 * @param param
@@ -519,176 +550,178 @@ public class TsfCartService {
 		param.setFrontGb(TsfSession.getFrontGb());
 		Collection<Order> cartGoodsList = coreOrderService.getCartGoodsList(param);
 
-		// 장바구니 내 수량 다다익선 적용 가능 리스트 조회 (등록된 기본,적용 상품 정보 전체 조회)
-		Collection<Order> tmtbApplyList = cartDao.selectMoreBetterApplyCartList(param);
+		if(param.getCustNo() > 0 ) {
+			// 장바구니 내 수량 다다익선 적용 가능 리스트 조회 (등록된 기본,적용 상품 정보 전체 조회)
+			Collection<Order> tmtbApplyList = cartDao.selectMoreBetterApplyCartList(param);
 
-		// 장바구니 등록 다다익선 일련번호 지정
-		List<Integer> applySq 		= new ArrayList<Integer>();
-		
-		for(Order tmtbApply : tmtbApplyList) {
-			if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb()) || TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
-				if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb())) {
-					applySq.add(tmtbApply.getQtyTmtbSq());
-				}
-				if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
-					applySq.add(tmtbApply.getAmtTmtbSq());
+			// 장바구니 등록 다다익선 일련번호 지정
+			List<Integer> applySq 		= new ArrayList<Integer>();
+
+			for(Order tmtbApply : tmtbApplyList) {
+				if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb()) || TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
+					if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb())) {
+						applySq.add(tmtbApply.getQtyTmtbSq());
+					}
+					if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
+						applySq.add(tmtbApply.getAmtTmtbSq());
+					}
 				}
 			}
-		}
-		param.setTmtbSqs(applySq.stream().mapToInt(Integer::intValue).toArray());
-
-		// 섹션 정보 조회 후 할인 여부 판단
-		Collection<Order> tmtbSectionList = cartDao.selectTmtbSectionValList(applySq);
-		
-		for(Order applyInfo : tmtbApplyList) {													// 기준 상품 및 다다익선 정보 조회
-			// 다다익선 할인 조건 조회
-			for(Order section : tmtbSectionList) {
-				if(applyInfo.getQtyTmtbSq() == section.getTmtbSq()) {
-					// 수량 적용 다다익선
-					if (section.getSectionVal() <= applyInfo.getQtyTmtbSumQty()) {             // 장바구니 수량 할인 기준 달성시
-						if (applyInfo.getQtySectionVal() <= section.getSectionVal()) {            // 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
-							applyInfo.setQtySectionVal(section.getSectionVal());
-							applyInfo.setApplyQtySectionYn("Y");
-							applyInfo.setQtyDcWay(section.getDcWay());
-							applyInfo.setQtyDcVal(section.getDcVal());
-						}
-					} else {
-						if (applyInfo.getQtySectionVal() < 1 && applyInfo.getQtyGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
-							applyInfo.setApplyQtySectionYn("N");
+			param.setTmtbSqs(applySq.stream().mapToInt(Integer::intValue).toArray());
+
+			// 섹션 정보 조회 후 할인 여부 판단
+			Collection<Order> tmtbSectionList = cartDao.selectTmtbSectionValList(applySq);
+
+			for(Order applyInfo : tmtbApplyList) {													// 기준 상품 및 다다익선 정보 조회
+				// 다다익선 할인 조건 조회
+				for(Order section : tmtbSectionList) {
+					if(applyInfo.getQtyTmtbSq() == section.getTmtbSq()) {
+						// 수량 적용 다다익선
+						if (section.getSectionVal() <= applyInfo.getQtyTmtbSumQty()) {             // 장바구니 수량 할인 기준 달성시
+							if (applyInfo.getQtySectionVal() <= section.getSectionVal()) {            // 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
+								applyInfo.setQtySectionVal(section.getSectionVal());
+								applyInfo.setApplyQtySectionYn("Y");
+								applyInfo.setQtyDcWay(section.getDcWay());
+								applyInfo.setQtyDcVal(section.getDcVal());
+							}
+						} else {
+							if (applyInfo.getQtySectionVal() < 1 && applyInfo.getQtyGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
+								applyInfo.setApplyQtySectionYn("N");
+							}
 						}
 					}
-				}
 
-				if (applyInfo.getAmtTmtbSq() == section.getTmtbSq()) {
-					// 금액 적용 다다익선
-					if(section.getSectionVal() <= applyInfo.getAmtTmtbSumAmt()) {			// 장바구니 수량 할인 기준 달성시
-						if(applyInfo.getAmtSectionVal() <= section.getSectionVal()) {			// 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
-							applyInfo.setAmtSectionVal(section.getSectionVal());
-							applyInfo.setApplyAmtSectionYn("Y");
-							applyInfo.setAmtDcWay(section.getDcWay());
-							applyInfo.setAmtDcVal(section.getDcVal());
-						}
-					} else {
-						if(applyInfo.getAmtSectionVal() < 1 && applyInfo.getAmtGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
-							applyInfo.setApplyAmtSectionYn("N");
+					if (applyInfo.getAmtTmtbSq() == section.getTmtbSq()) {
+						// 금액 적용 다다익선
+						if(section.getSectionVal() <= applyInfo.getAmtTmtbSumAmt()) {			// 장바구니 수량 할인 기준 달성시
+							if(applyInfo.getAmtSectionVal() <= section.getSectionVal()) {			// 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
+								applyInfo.setAmtSectionVal(section.getSectionVal());
+								applyInfo.setApplyAmtSectionYn("Y");
+								applyInfo.setAmtDcWay(section.getDcWay());
+								applyInfo.setAmtDcVal(section.getDcVal());
+							}
+						} else {
+							if(applyInfo.getAmtSectionVal() < 1 && applyInfo.getAmtGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
+								applyInfo.setApplyAmtSectionYn("N");
+							}
 						}
 					}
 				}
 			}
-		}
 
-		// 수량 다다익선에 맞춰 정렬
-		Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
-			@Override
-			public int compare(Order c1, Order c2) {
-				return c1.getQtyTmtbSq() - c2.getQtyTmtbSq();
-			}
-		});
+			// 수량 다다익선에 맞춰 정렬
+			Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
+				@Override
+				public int compare(Order c1, Order c2) {
+					return c1.getQtyTmtbSq() - c2.getQtyTmtbSq();
+				}
+			});
 
-		// 수량 다다익선 적용 상품 할인 금액 계산
-		int leftAmt = 0;
-		int i = 0;
+			// 수량 다다익선 적용 상품 할인 금액 계산
+			int leftAmt = 0;
+			int i = 0;
 
-		for(Order resultAmt : tmtbApplyList) {
-			int tempAmt  = 0;
-			
-			if("Y".equals(resultAmt.getApplyQtySectionYn()) && resultAmt.getQtyTmtbSq() > 0) {
-				if (TscConstants.DcWay.AMT.value().equals(resultAmt.getQtyDcWay())) {        // 할인 방식 금액일경우
-					i++;
-					tempAmt = resultAmt.getCurrPrice();
+			for(Order resultAmt : tmtbApplyList) {
+				int tempAmt  = 0;
 
-					if (i == 1) {
-						leftAmt = resultAmt.getQtyDcVal();
-					}
+				if("Y".equals(resultAmt.getApplyQtySectionYn()) && resultAmt.getQtyTmtbSq() > 0) {
+					if (TscConstants.DcWay.AMT.value().equals(resultAmt.getQtyDcWay())) {        // 할인 방식 금액일경우
+						i++;
+						tempAmt = resultAmt.getCurrPrice();
 
-					if (i == resultAmt.getQtyTmtbCnt()) {
-						resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
-						resultAmt.setTmtb1DcAmt(leftAmt); // tmtb1 할인금액
-						leftAmt = 0;
-						i = 0;
-					} else {
-						double tempDcAmt = resultAmt.getQtyDcVal() * ((tempAmt) / (double)resultAmt.getQtyTmtbSumAmt());
-						leftAmt -= (int)tempDcAmt;
-						resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
-						
-						resultAmt.setTmtb1DcAmt((int)tempDcAmt); // tmtb1 할인금액
+						if (i == 1) {
+							leftAmt = resultAmt.getQtyDcVal();
+						}
+
+						if (i == resultAmt.getQtyTmtbCnt()) {
+							resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
+							resultAmt.setTmtb1DcAmt(leftAmt); // tmtb1 할인금액
+							leftAmt = 0;
+							i = 0;
+						} else {
+							double tempDcAmt = resultAmt.getQtyDcVal() * ((tempAmt) / (double)resultAmt.getQtyTmtbSumAmt());
+							leftAmt -= (int)tempDcAmt;
+							resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
+
+							resultAmt.setTmtb1DcAmt((int)tempDcAmt); // tmtb1 할인금액
+						}
+					} else {                                                                // 할인 방식 할인율일 경우
+						tempAmt = resultAmt.getCurrPrice();
+						tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getQtyDcVal() / 100.0)));
+						resultAmt.setTmtbDcAmt(tempAmt);
+
+						// 2021.04.29 다다익선할인금액수정
+						resultAmt.setTmtb1DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getQtyDcVal() / 100.0))); // tmtb1 할인금액
 					}
-				} else {                                                                // 할인 방식 할인율일 경우
-					tempAmt = resultAmt.getCurrPrice();
-					tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getQtyDcVal() / 100.0)));
-					resultAmt.setTmtbDcAmt(tempAmt);
-					
-					// 2021.04.29 다다익선할인금액수정
-					resultAmt.setTmtb1DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getQtyDcVal() / 100.0))); // tmtb1 할인금액
 				}
-			}
 
-			if (resultAmt.getTmtbDcAmt() > 0) {
-				resultAmt.setCurrPrice(resultAmt.getTmtbDcAmt());
+				if (resultAmt.getTmtbDcAmt() > 0) {
+					resultAmt.setCurrPrice(resultAmt.getTmtbDcAmt());
+				}
 			}
-		}
 
-		// 금액 다다익선에 맞춰 정렬
-		Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
-			@Override
-			public int compare(Order c1, Order c2) {
-				return c1.getAmtTmtbSq() - c2.getAmtTmtbSq();
-			}
-		});
+			// 금액 다다익선에 맞춰 정렬
+			Collections.sort((ArrayList<Order>) tmtbApplyList, new Comparator<Order>() {
+				@Override
+				public int compare(Order c1, Order c2) {
+					return c1.getAmtTmtbSq() - c2.getAmtTmtbSq();
+				}
+			});
+
+			// 금액 다다익선 할인 계산
+			leftAmt = 0;
+			i = 0;
+			for(Order resultAmt : tmtbApplyList) {
+				int tempAmt  = 0;
+
+				if("Y".equals(resultAmt.getApplyAmtSectionYn()) && resultAmt.getAmtTmtbSq() > 0) {
+					if (TscConstants.DcWay.AMT.value().equals(resultAmt.getAmtDcWay())) {        // 할인 방식 금액일경우
+						i++;
+						tempAmt = resultAmt.getCurrPrice();
+						if (i == 1) {
+							leftAmt = resultAmt.getAmtDcVal();
+						}
 
-		// 금액 다다익선 할인 계산
-		leftAmt = 0;
-		i = 0;
-		for(Order resultAmt : tmtbApplyList) {
-			int tempAmt  = 0;
-			
-			if("Y".equals(resultAmt.getApplyAmtSectionYn()) && resultAmt.getAmtTmtbSq() > 0) {
-				if (TscConstants.DcWay.AMT.value().equals(resultAmt.getAmtDcWay())) {        // 할인 방식 금액일경우
-					i++;
-					tempAmt = resultAmt.getCurrPrice();
-					if (i == 1) {
-						leftAmt = resultAmt.getAmtDcVal();
-					}
+						if (i == resultAmt.getAmtTmtbCnt()) {
+							resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
+							resultAmt.setTmtb2DcAmt(leftAmt); // tmtb1 할인금액
 
-					if (i == resultAmt.getAmtTmtbCnt()) {
-						resultAmt.setTmtbDcAmt(tempAmt - leftAmt);
-						resultAmt.setTmtb2DcAmt(leftAmt); // tmtb1 할인금액
-						
-						leftAmt = 0;
-						i = 0;
-					} else {
-						double tempDcAmt = resultAmt.getAmtDcVal() * ((tempAmt) / (double)resultAmt.getAmtTmtbSumAmt());
-						leftAmt -= (int)tempDcAmt;
-						resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
-						
-						resultAmt.setTmtb2DcAmt((int)tempDcAmt); // tmtb1 할인금액
+							leftAmt = 0;
+							i = 0;
+						} else {
+							double tempDcAmt = resultAmt.getAmtDcVal() * ((tempAmt) / (double)resultAmt.getAmtTmtbSumAmt());
+							leftAmt -= (int)tempDcAmt;
+							resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
+
+							resultAmt.setTmtb2DcAmt((int)tempDcAmt); // tmtb1 할인금액
+						}
+					} else {                                                                // 할인 방식 할인율일 경우
+						tempAmt = resultAmt.getCurrPrice();
+						tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getAmtDcVal() / 100.0)));
+						resultAmt.setTmtbDcAmt(tempAmt);
+
+						// 2021.04.29 다다익선할인금액수정
+						resultAmt.setTmtb2DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getAmtDcVal() / 100.0))); // tmtb2 할인금액
 					}
-				} else {                                                                // 할인 방식 할인율일 경우
-					tempAmt = resultAmt.getCurrPrice();
-					tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getAmtDcVal() / 100.0)));
-					resultAmt.setTmtbDcAmt(tempAmt);
-					
-					// 2021.04.29 다다익선할인금액수정
-					resultAmt.setTmtb2DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getAmtDcVal() / 100.0))); // tmtb2 할인금액
 				}
 			}
-		}
 
-		// 장바구니 정보에 수량 다다익선 정보 입력
-		for (Order cart : cartGoodsList) {
-			for (Order apply : tmtbApplyList) {
-				if (cart.getCartSq().equals(apply.getCartSq())) {
-					// 2021.02.24 jsh77b
-					cart.setTmtb1DcAmt(apply.getTmtb1DcAmt());
-					cart.setTmtb2DcAmt(apply.getTmtb2DcAmt());
-					
-					cart.setTmtbDcAmt(apply.getTmtbDcAmt());
-					cart.setApplyQtySectionYn(apply.getApplyQtySectionYn());
-					cart.setQtyTmtbNm(apply.getQtyTmtbNm());
-					cart.setQtyTmtbSq(apply.getQtyTmtbSq());
-					cart.setApplyAmtSectionYn(apply.getApplyAmtSectionYn());
-					cart.setAmtTmtbNm(apply.getAmtTmtbNm());
-					cart.setAmtTmtbSq(apply.getAmtTmtbSq());
+			// 장바구니 정보에 수량 다다익선 정보 입력
+			for (Order cart : cartGoodsList) {
+				for (Order apply : tmtbApplyList) {
+					if (cart.getCartSq().equals(apply.getCartSq())) {
+						// 2021.02.24 jsh77b
+						cart.setTmtb1DcAmt(apply.getTmtb1DcAmt());
+						cart.setTmtb2DcAmt(apply.getTmtb2DcAmt());
+
+						cart.setTmtbDcAmt(apply.getTmtbDcAmt());
+						cart.setApplyQtySectionYn(apply.getApplyQtySectionYn());
+						cart.setQtyTmtbNm(apply.getQtyTmtbNm());
+						cart.setQtyTmtbSq(apply.getQtyTmtbSq());
+						cart.setApplyAmtSectionYn(apply.getApplyAmtSectionYn());
+						cart.setAmtTmtbNm(apply.getAmtTmtbNm());
+						cart.setAmtTmtbSq(apply.getAmtTmtbSq());
+					}
 				}
 			}
 		}

+ 35 - 4
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -359,10 +359,6 @@ public class TsfCartController extends TsfBaseController {
 	@ResponseBody
 	public Order getCartList() {
 		Order cart = new Order();
-		int custNo = 0;
-		if(TsfSession.isLogin()) {
-			custNo = TsfSession.getInfo().getCustNo();
-		}
 
 		// 장바구니 상품목록
 		cart = cartService.getCartGoodsList(cart);
@@ -377,9 +373,44 @@ public class TsfCartController extends TsfBaseController {
 			}
 		});
 
+		List<Order> cartList = new ArrayList<>();
+		for(Order oneData : cart.getDelvAllCartList()) {
+			if(oneData.getOrdCanQty() < 6 && oneData.getOrdCanQty() > 0) {
+				cartList.add(oneData);
+			}
+		}
+
+		// 장바구니 등록 최신순 정렬
+		Collections.sort((ArrayList<Order>) cart.getDelvAllCartList(), new Comparator<Order>() {
+			@Override
+			public int compare(Order c1, Order c2) {
+				return c2.getCartSq() - c1.getCartSq();	//역순 정렬
+			}
+		});
+
+		for(Order oneData : cart.getDelvAllCartList()) {
+			if(oneData.getOrdCanQty() > 5) {
+				cartList.add(oneData);
+			}
+		}
+
+		cart.setDelvAllCartList(cartList);
+
 		return cart;
 	}
 
+	/**
+	 * 장바구니 수량 조회(모바일 헤더)
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 05. 04
+	 */
+	@ResponseBody
+	@GetMapping("/goods/not/soldout/cnt")
+	public Order getCartNotSoldoutCnt() {
+		return cartService.getCartNotSoldoutCnt();
+	}
+
 	/**
 	 * 상품 품절 제외 옵션 조회
 	 * @param param

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

@@ -662,6 +662,9 @@ public class TsfMypageController extends TsfBaseController {
 
 		// 반품 사유 목록 조회
 		mav.addObject("returnReason", rendererService.getCommonCodeList("G688", "Y"));
+		
+		// 2021.05.03 은행목록추가
+		mav.addObject("bankList", rendererService.getCommonCodeList("G942", "Y"));
 
 		mav.setViewName(super.getDeviceViewName("/mypage/MypageReturnForm"));
 

+ 50 - 4
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -814,10 +814,56 @@ public class TsfOrderController extends TsfBaseController {
 		coreOrderService.updateOrderInfo(order);
 		
 		// TODO 4. 보증보험 API 연동
-		
-		
-		
-		
+		// orderDao.createInsurance(order);
+
+		/*
+		 * temp.setItemNmArr(goodsNameArr);			// 상품명 배열
+		 * temp.setGoodsPriceArr(goodsPriceArr);	// 상품별 가격 배열
+		 * temp.setItemQtyArr(goodsQuantityArr);	// 상품별 수량 배열
+		 * temp.setOrdNo(1);						// 주문번호
+		 * temp.setRealOrdAmt(32000);				// 결제금액
+		 * temp.setBirthYmd("198912021");			// 생년월일 + 성별(남자 : 1, 여자 : 2)
+		 * temp.setPayMeans(TscConstants.PayMeans.ACCOUNT_TRANSFER.value());		// 무통장입금 or 계좌이체
+		 * temp.setBankNm("신한은행");					// 은행명  >> PG 송부 후 result에서 값 입력하면됨
+		 * temp.setOrdNm("이태영");					// 주문자명
+		 * temp.setOrdTelno("");					// 주문자전화1 ("-" 포함)
+		 * temp.setOrdPhnno("010-7111-4489");		// 주문자전화2 ("-" 포함)
+		 * temp.setRecipZipcode("08755");			// 주문자우편번호
+		 * temp.setRecipAddr("서울시 관악구 신림동 1414-26 해피타워 501호");	// 주문자주소
+		 * temp.setOrdEmail("xodud1202@naver.com");	// 주문자이메일
+		 * temp.setRecipNm("이태영");					// 수령인명
+		 * temp.setRecipTelno("");					// 수령인전화번호
+		 * temp.setRecipPhnno("010-7111-4489");		// 수령인휴대폰번호
+		 * temp.setCustNo(100010);					// 고객번호
+		 * temp.setPgTid("20210423952698");			// temp.setVaNo("110242222222");  >> PG 송부 후 result에서 값 입력하면됨
+		 *  */
+		
+		String[] goodsNameArr = new String[2]; goodsNameArr[0] ="테스트1";goodsNameArr[1] = "테스트2";
+		String[] goodsPriceArr = new String[2]; goodsPriceArr[0] ="10000";goodsPriceArr[1] = "12000";
+		String[] goodsQuantityArr = new String[2]; goodsQuantityArr[0] ="2";goodsQuantityArr[1] = "3";
+		
+		order.setItemNmArr(goodsNameArr);		// 상품명 배열
+		order.setGoodsPriceArr(goodsPriceArr);	// 상품별 가격 배열
+		order.setItemQtyArr(goodsQuantityArr);	// 상품별 수량 배열
+		order.setOrdNo(order.getOrdNo());		// 주문번호
+		order.setRealOrdAmt(32000);				// 결제금액
+		order.setBirthYmd("198912021");			// 생년월일 + 성별(남자 : 1, 여자 : 2)
+		order.setPayMeans(TscConstants.PayMeans.ACCOUNT_TRANSFER.value());		// 무통장입금 or 계좌이체
+		order.setBankNm("신한은행");				// 은행명  >> PG 송부 후 result에서 값 입력하면됨
+		order.setOrdNm("이태영");					// 주문자명
+		order.setOrdTelno("");					// 주문자전화1 ("-" 포함)
+		order.setOrdPhnno("010-1234-5555");		// 주문자전화2 ("-" 포함)
+		order.setRecipZipcode("08755");			// 주문자우편번호
+		order.setRecipAddr("서울시 관악구 신림동 1414-11 타워타워 101호");	// 주문자주소
+		order.setOrdEmail("xodud1202@naver.com");	// 주문자이메일
+		order.setRecipNm("이태영");					// 수령인명
+		order.setRecipTelno("");					// 수령인전화번호
+		order.setRecipPhnno("010-1234-5555");		// 수령인휴대폰번호
+		order.setCustNo(100010);					// 고객번호
+		order.setVaNo("110242222222");				// 가상계좌번호
+
+		// uSafeGuaranteeInsurance(order);
+		orderService.uSafeGuaranteeInsurance(order);
 		
 		// 2021.03.16 주문완료화면이동처리
 		mav.setViewName("redirect:/order/complete?ordNo=" + order.getOrdNo());

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

@@ -464,7 +464,8 @@
 		                   FROM   TB_TMTB_SECTION TS
 		                   WHERE  TS.DEL_YN = 'N'
 		                   GROUP  BY TS.TMTB_SQ) TS
-		ON TC.TMTB_SQ = TS.TMTB_SQ
+		ON     TC.TMTB_SQ = TS.TMTB_SQ
+		AND    TC.SECTION_VAL = TS.SECTION_VAL
 		WHERE  1=1
 		AND	   TC.DEL_YN = 'N'
 		AND	   TV.DEL_YN = 'N'
@@ -510,8 +511,7 @@
 		     , (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
 		     , Z.SOLDOUT_YN
-		     , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
-		            ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
+		     , CASE WHEN #{frontGb} = 'P' THEN Z.PNT_PRATE ELSE Z.PNT_MRATE END AS PNT_RATE
 		     , SYS_IMG_NM
 		FROM   (SELECT C.CART_SQ
 		             , C.GOODS_CD
@@ -695,7 +695,7 @@
 		     , CURR_PRICE
 		     , LIST_PRICE
 		     , Z.SOLDOUT_YN
-		     , SAVE_PNT_AMT
+		     , PNT_RATE
 		     , SYS_IMG_NM
 		ORDER  BY Z.DELV_FEE_CD DESC
 		     , Z.GOODS_CD DESC

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

@@ -113,7 +113,17 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	$(document).ready( function() {
+	$(document).ready(function() {
+		$.getJSON('/cart/goods/not/soldout/cnt', function (order, status) {
+			let cartCnt;
+			if (order.totCartCnt > 99) {
+				cartCnt = "99+";
+			} else {
+				cartCnt = order.totCartCnt;
+			}
+
+			$("header #htopSub .button_wrap .store>span").text(cartCnt);
+		});
 	});
 /*]]>*/
 </script>

+ 366 - 256
src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html

@@ -20,9 +20,9 @@
 <main role="" id="" class="container my">
 	<section class="content my_return">
 		<form id="cancelForm" class="form_wrap">
-			<input type="hidden" name="accountNo" th:value="${oneData.accountNo}"/>
-			<input type="hidden" name="accountNm" th:value="${oneData.accountNm}"/>
-			<input type="hidden" name="bankCd" th:value="${oneData.bankCd}"/>
+			<input type="hidden" name="accountNo" 	th:value="${oneData.accountNo}"/>
+			<input type="hidden" name="accountNm" 	th:value="${oneData.accountNm}"/>
+			<input type="hidden" name="bankCd" 		th:value="${oneData.bankCd}"/>
 					
 			<div class="inner wide bg_beige">
 				<div class="order_number">
@@ -38,102 +38,78 @@
 						<div th:unless="${oneData.giftPackYn == 'Y'}" class="goods_date">주문일<span class="date" th:text="${oneData.ordDt}"></span></div>
 						<div th:if="${oneData.giftPackYn == 'Y'}" class="goods_date">선물일<span class="date" th:text="${oneData.ordDt}"></span></div>
 					</div>
-					<div class="goods_section">
-						<div class="goods_detail">
-							<a href="">
-								<div class="thumb_box">
-									<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
-								</div>
-								<div class="info_box">
-									<div class="od_name">
-										<div class="brand">
-											<span>Mollimelli 몰리멜리</span>
-											<div class="badge_wrap">
-												<em class="order_badge">업체직배송</em>
+					
+					<!-- 취소상품목록 -->
+					<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<div class="goods_section">
+							<div class="goods_detail">
+								<a href="">
+									<div class="thumb_box">
+										<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
+									</div>
+									<div class="info_box">
+										<div class="od_name">
+											<div class="brand">
+												<span th:text="${cancel.brandNm}"></span>
+												<div class="badge_wrap">
+													<em class="tag primary" th:if="${cancel.shotDelvYn == 'Y'}">총알배송</em>
+													<em class="tag" th:if="${cancel.shotDelvYn == 'N' and cancel.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
+													<em class="tag" th:if="${cancel.selfGoodsYn == 'N'}">업체직배송</em>
+												</div>
 											</div>
+											<div class="name" th:text="${cancel.goodsNm}"></div>
 										</div>
-										<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
-									</div>
-									<div class="od_opt">
-										<div class="option">
-											<em>Black</em>
-											<em>XXL</em>
+										<div class="od_opt">
+												<div class="option">
+													<th:block th:if="${cancel.goodsType == 'G056_S'}" th:each="option, status : ${cancel.colorNmArr}">
+														<em th:text="${cancel.itemNmArr[status.index]}"></em>
+														<em th:text="${cancel.optCd2Arr[status.index]}"></em>
+													</th:block>
+													<th:block th:unless="${cancel.goodsType == 'G056_S'}">
+														<em th:text="${cancel.colorNm}"></em>
+														<em th:text="${cancel.optCd2}"></em>
+													</th:block>
+												</div>
+										</div>
+										<div class="od_calc">
+											<th:block th:if="${(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}">
+												<p class="sale_price">
+													<del><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt, 1, 'COMMA')}"></em>원</del>
+												</p>
+											</th:block>
+											<p class="price">
+												<span class="selling_price">
+													<em th:text="${#numbers.formatInteger(cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt, 1, 'COMMA')}"></em>원
+												</span>
+											</p>
 										</div>
 									</div>
-									<div class="od_calc">
-										<p class="sale_price"><del><em>95,000</em>원</del></p>
-										<p class="price">
-											<span class="selling_price"><em>61,200</em>원</span>
-										</p>
+								</a>
+							</div>
+							<div class="goods_select">
+								<div class="select_custom select_count">
+									<div class="combo">
+										<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${cancel.ordDtlNo}, ordCanChgQty=${cancel.ordCanChgQty}"/>
+										<div class="select">수량 0개</div>
 									</div>
 								</div>
-							</a>
-						</div>
-						<div class="goods_select">
-							<div class="select_custom select_count">
-								<div class="combo">
-									<div class="select">수량 0개</div>
-								</div>
 							</div>
+							<th:block th:if="${#lists.size(cancelList.cancelList) == status.count}">
+								<div class="goods_txt">
+									<p class="cf_txt cf_desc">취소하실 상품의 수량을 선택하신 후<br>취소 신청을 하실 수 있습니다.</p>
+								</div>
+							</th:block>
 						</div>
-						<div class="goods_txt">
-							<p class="cf_txt cf_desc">취소하실 상품의 수량을 선택하신 후<br>취소 신청을 하실 수 있습니다.</p>
-						</div>
-					</div>
-				</div>
-			</div>
-			<div class="inner">
-				<div class="tbl_wrap">
-					<div class="tbl_tit"> 
-						<h3>취소 사유</h3>
-					</div>
-					<div class="tbl tbl_tarea">
-						<table>
-							<colgroup>
-								<col width="*">
-							</colgroup>   
-							<tr>
-								<th class="sr-only">취소 접수 일자</th>
-								<td>
-									<div class="select_custom select_return">
-										<div class="combo">
-											<div class="select">취소 사유를 선택하세요.</div>
-											<ul class="list">
-												<li>단순 변심</li>
-												<li>색상/사이즈가 상이</li>
-												<li>타사이트가 더 저렴함</li>
-												<li>상품옵션 선택 잘못 함</li>
-												<li>상품 결함이 있음</li>
-												<li>실제 상품이 상품 설명과 다름</li>
-												<li>포장과 상품이 훼손 됨</li>
-												<li>상품이 훼손 됨(포장은 양호)</li>
-												<li>주문상품 일부가 배송되지 않음</li>
-												<li>구성품, 부속품이 없음</li>
-												<li>다른 상품이 배송됨(주문상품 아님)</li>
-												<li>상품이 늦게 배송 됨</li>
-											</ul>
-										</div>
-									</div>
-								</td>
-							</tr>
-							<tr>
-								<th class="sr-only">취소 완료 일자</th>
-								<td>
-									<div class="textarea_wrap">
-										<textarea class="doc_return" name="" id="" placeholder="자세한 사유를 입력해주세요."></textarea>
-										<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
-									</div>
-								</td>
-							</tr>
-						</table>
-					</div>
+					</th:block>
+					<!-- //취소상품목록 -->
+					
 				</div>
 			</div>
 			<div class="inner">
 				<div class="tbl_wrap pay_wrap">
 					<div class="tbl_tit"> 
 						<h3>환불 정보</h3>
-						<strong class="pay"><span>123,456,789</span>원</strong>
+						<strong class="pay"><span id="returnAmt">0</span>원</strong>
 					</div>
 					<div class="tbl type1">
 						<table>
@@ -148,7 +124,7 @@
 											<dt>상품 취소 금액</dt>
 											<dd>
 												<div>
-													<span>123,456,789</span>원
+													<span id="goodsCancelAmt">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -156,7 +132,7 @@
 											<dt>배송비</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="deliveryFee">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -164,7 +140,7 @@
 											<dt>할인 금액 차감</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="deductDcAmt">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -174,7 +150,10 @@
 											<dt>환불 수단</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span th:if="${paymentInfo.pgGb == 'KCP'}" th:text="${paymentInfo.payMeansNm}"></span>
+													<span th:if="${paymentInfo.pgGb == 'NAVER'}" th:text="|네이버페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'KAKAO'}" th:text="|카카오페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'PAYCO'}" th:text="|PAYCO|"></span>
 												</div>
 											</dd>
 										</div>
@@ -182,7 +161,7 @@
 											<dt>결제금액 환불</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="refundPayAmt">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -190,7 +169,7 @@
 											<dt>포인트 환불</dt>
 											<dd>
 												<div>
-													<span>-123,456,789</span>원
+													<span id="refundPoint">0</span>P
 												</div>
 											</dd>
 										</div>
@@ -198,7 +177,7 @@
 											<dt>상품권 환불</dt>
 											<dd>
 												<div>
-													<span>3000</span>P
+													<span id="refundGiftCard">0</span>원
 												</div>
 											</dd>
 										</div>
@@ -206,207 +185,338 @@
 								</td>
 							</tr>
 						</table>
+						<!-- 
 						<button type="button" class="btn btn_default"><span>취소 전표 보기</span></button>
+						 -->
 					</div>
 				</div>
 				<div class="required_group">
-					<p>배송비 <span class="c_primary">5,000원</span> 추가 결제가 필요합니다.</p>
+					<p>배송비 <span class="c_primary" id="addPayCost">0원</span> 추가 결제가 필요합니다.</p>
 				</div>
 				<div class="btn_group btn_group_flex">
-					<div><button type="button" class="btn btn_default"><span>취소</span></button></div>
-					<div><button type="button" id="btn_order_return" class="btn btn_dark"><span>취소 신청</span></button></div> <!-- 210409_추가 : btn_order_return id 추가 -->
+					<div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"><span>취소</span></button></div>
+					<div><button type="button" id="btn_order_return" class="btn btn_dark" onclick="fnCancel();"><span>주문 취소</span></button></div>
 				</div>
 			</div>
 		</form>
 	</section>
 </main>
+
+<!-- 210408_취소 수량 선택 팝업 -->
+<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}">
+	<div class="popup_box returnCountPop">
+		<div class="lap">
+			<div class="popup_close">카테고리닫기</div>
+			<div class="popup_head sr-only">
+				<h2 class="">주문상태 선택 팝업</h2>
+			</div>
+			<div class="popup_con">
+				<div class="button_list clear">
+					<button type="button"><span>수량 0개</span></button>
+					<th:block th:each="num : ${#numbers.sequence(1,cancel.ordCanChgQty)}">
+						<button type="button" th:qty="${num}" onclick="fnChangeCancelQty(this);"><span th:text="|수량 ${num}개|"></span></button>
+					</th:block>
+					<input type="hidden" name="ordDtlNo" th:value="${cancel.ordDtlNo}">
+				</div> 
+			</div>
+		</div>
+	</div>
+</th:block>
+<!-- //210408_취소 수량 선택 팝업 -->
+
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
-	let cancelList = [[${cancelList}]];
-	let oneData = [[${oneData}]];
-	let paymentInfo = [[${paymentInfo}]];
-	let addPayCost = 0;
+let cancelList 		= [[${cancelList}]];
+let oneData 		= [[${oneData}]];
+let paymentInfo 	= [[${paymentInfo}]];
+let addPayCost 		= 0;
 
-	$(document).ready(function() {
-		// 마이페이지 LNB 설정
-		fnSetMypageLnbList(2);
+$(document).ready(function() {
+	
+});
 
-		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '취소 신청');
+// 취소수량버튼기능
+$(".select_custom.select_count").each(function(idx){
+	$(this).on("click", function(){
+		// 전체비활성화
+		$(".returnCountPop").hide();
+		
+		// 수량팝업활성화
+		$(".returnCountPop").eq(idx).show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+	});
+});
 
-		// 셀렉트박스 활성화
-		$(".myOrderView .part_goods .select_custom.select_count").each(function() {
-			new sCombo(this);
-		});
+// 취소 처리
+var fnCancel = function() {
+	// 주문상세번호 및 취소 수량 설정
+	let ordDtlNoArr 			= [];
+	let cnclRtnReqQtyArr 		= [];
+	let chkQty 					= 0;
+	
+	$.each($('#cancelForm 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;
 	});
 
-	// 취소 처리
-	var fnCancel = function() {
-		// 취소수량 설정
-		//fnChangeCancelQty();
-
-		// 주문상세번호 및 취소 수량 설정
-		let ordDtlNoArr = [];
-		let cnclRtnReqQtyArr = [];
-		let chkQty = 0;
-		$.each($('#cancelForm 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 	= $('#cancelForm input[name=accountNo]').val();
+	let accountNm 	= $('#cancelForm input[name=accountNm]').val();
+	let bankCd 		= $('#cancelForm input[name=bankCd]').val();
+
+	// 무통장입금, 결제완료 일때 환불계좌정보 체크
+	if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+		let data 		= {};
+		data.ordNo 		= oneData.ordNo;
+		data.accountNm 	= oneData.accountNm;
+		let jsonData	 = JSON.stringify(data);
+
+		$.ajax( {
+			type		: "POST",
+			url 		: '/mypage/refund/account/register/popup/form',
+			data		: jsonData,
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				$("#refundPop .modal-dialog .modal-content").html(result);
+				$("#refundPop").modal("show");
+			}
 		});
+		
+		return false;
+	}
 
-		// 취소 수량 체크
-		if (chkQty == 0) {
-			mcxDialog.alert('취소하실 상품의 수량을 선택해주세요.');
-			return false;
-		}
+	// 취소요청 데이터 설정
+	let url = '/mypage/cancel';
+
+	// 취소 처리
+	let data = {};
+	data.ordNo 				= oneData.ordNo;
+	data.chgReason 			= 'G686_10';
+	data.chgReasonNm 		= '고객변심';
+	data.accountNo 			= accountNo;
+	data.accountNm 			= accountNm;
+	data.bankCd 			= bankCd;
+	data.isCustomer 		= 'Y';
+	data.reqGbn 			= 'cnclComplete';
+	data.pgTid 				= paymentInfo.pgTid;
+	data.payAmt 			= paymentInfo.payAmt;
+	data.ordDtlNoArr 		= ordDtlNoArr;
+	data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
 
-		// 환불계좌 체크
-		let accountNo = $('#cancelForm input[name=accountNo]').val();
-		let accountNm = $('#cancelForm input[name=accountNm]').val();
-		let bankCd = $('#cancelForm input[name=bankCd]').val();
-
-		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
-			let data = {};
-			data.ordNo = oneData.ordNo;
-			data.accountNm = oneData.accountNm;
-
-			let jsonData = JSON.stringify(data);
-
-			$.ajax( {
-				type		: "POST",
-				url 		: '/mypage/refund/account/register/popup/form',
-				data		: jsonData,
-				dataType 	: 'html',
-				beforeSend : function(xhr, settings) {
-					xhr.setRequestHeader("AJAX"			, "true");
-					xhr.setRequestHeader('Accept'		, 'application/json');
-					xhr.setRequestHeader('Content-Type'	, 'application/json');
-				},
-				success 	: function(result) {
-					$("#refundPop .modal-dialog .modal-content").html(result);
-					$("#refundPop").modal("show");
-				}
+	let jsonData = JSON.stringify(data);
+	
+	// 취소 처리 가능 여부 조회
+	gagajf.ajaxJsonSubmit('/mypage/wms/cancel/available', jsonData, function(result) {
+		if (result.cancelYn == 'Y') {
+			// 취소 처리
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
 			});
-			
-			return false;
+		} else {
+			mcxDialog.alert('이미 배송처리 되어 취소 처리에 실패 하였습니다.');
 		}
+	});
+}
 
-		// 취소요청 데이터 설정
-		let url = '/mypage/cancel';
-
-		// 취소 처리
-		let data = {};
-		data.ordNo = oneData.ordNo;
-		data.chgReason = 'G686_10';
-		data.chgReasonNm = '고객변심';
-		data.accountNo = accountNo;
-		data.accountNm = accountNm;
-		data.bankCd = bankCd;
-		data.isCustomer = 'Y';
-		data.reqGbn = 'cnclComplete';
-		data.pgTid = paymentInfo.pgTid;
-		data.payAmt = paymentInfo.payAmt;
-		data.ordDtlNoArr = ordDtlNoArr;
-		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
-
-		let jsonData = JSON.stringify(data);
-		
-		// 취소 처리 가능 여부 조회
-		gagajf.ajaxJsonSubmit('/mypage/wms/cancel/available', jsonData, function(result) {
-			if (result.cancelYn == 'Y') {
-				// 취소 처리
-				gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-					cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
-				});
-			} else {
-				mcxDialog.alert('이미 배송처리 되어 취소 처리에 실패 하였습니다.');
+// 취소 수량 변경 이벤트 처리
+var fnChangeCancelQty = function(param) {
+	let url = '/mypage/cancel/refund/amt/calculate';
+	
+	// 취소수량설정
+	if (param != null) {
+		$("#cancelForm input[name=chgQty]").each(function(idx){
+			var ordDtlNo = $(this).attr("ordDtlNo");
+			if (ordDtlNo == $(param).parent().find("input[name=ordDtlNo]").val()) {
+				$(this).val($(param).attr("qty"));
+				$(this).parent().find(".select").text($(param).find("span").text());
 			}
 		});
 	}
+
+	// 취소 수량 설정
+	let cnclRtnReqQtyArr 	= [];
+	let ordDtlNoArr 		= [];
+	let ordCanChgQtyArr 	= [];
 	
-	// 취소 수량 변경 이벤트 처리
-	var fnChangeCancelQty = function(param) {
-		let url = '/mypage/cancel/refund/amt/calculate';
+	$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
+		let chgQty 			= $(item).val();
+		let ordDtlNo		= $(item).attr('ordDtlNo');
+		let ordCanChgQty 	= $(item).attr('ordCanChgQty');
+		
+		cnclRtnReqQtyArr.push(Number(chgQty));
+		ordDtlNoArr.push(Number(ordDtlNo));
+		ordCanChgQtyArr.push(Number(ordCanChgQty));
+	});
+
+	let data = {};
+	data.ordNo 				= oneData.ordNo;
+	data.ordDtlNoArr 		= ordDtlNoArr;
+	data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
+
+	let jsonData = JSON.stringify(data);
 
-		if (param != null) {
-			$(param).parent().parent().find('input[name=chgQty]').val($(param).attr('qty'));
+	gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+		// 환불포인트, 환불상품권 금액 계산
+		let refundPoint 		= Number(result.spanPntDcAmt);
+		let refundGiftCard 		= Number(result.spanGfcdUseAmt);
+
+		let spanCnclRtnAmt 		= Number(result.spanCnclRtnAmt);
+		let sumDeliveryFee 		= Number(result.sumDeliveryFee);
+		let spanTotDeliveryFee 	= Number(result.spanTotDeliveryFee);
+		let spanCpnDcAmt 		= Number(result.spanCpnDcAmt);
+		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 returnAmt 			= refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
+
+		// 추가배송비 영역 설정
+		if (refundPayAmt < 0) {
+			refundPayAmt = spanRefundAmt;
+			$('#addDeliveryFee').css('display', '');
+			$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
+			addPayCost = spanTotDeliveryFee;
+		} else {
+			$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
+			addPayCost = 0;
 		}
 
-		// 취소 수량 설정
-		let cnclRtnReqQtyArr = [];
-		let ordDtlNoArr = [];
-		let ordCanChgQtyArr = [];
-		$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
-			let chgQty = $(item).val();
-			let ordDtlNo = $(item).attr('ordDtlNo');
-			let ordCanChgQty = $(item).attr('ordCanChgQty');
-			
-			cnclRtnReqQtyArr.push(Number(chgQty));
-			ordDtlNoArr.push(Number(ordDtlNo));
-			ordCanChgQtyArr.push(Number(ordCanChgQty));
-		});
+		// 금액 설정
+		$('#returnAmt').text(returnAmt.addComma());
+		$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
+		$('#deliveryFee').text(deliveryFee.addComma());
+		$('#deductDcAmt').text(deductDcAmt.addComma());
+		$('#refundPayAmt').text(refundPayAmt.addComma());
+		$('#refundPoint').text(refundPoint.addComma());
+		$('#refundGiftCard').text(refundGiftCard.addComma());
+	});
+}
 
-		let data = {};
-		data.ordNo = oneData.ordNo;
-		data.ordDtlNoArr = ordDtlNoArr;
-		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
-
-		let jsonData = JSON.stringify(data);
-
-		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
-			// 환불포인트, 환불상품권 금액 계산
-			let refundPoint = Number(result.spanPntDcAmt);
-			let refundGiftCard = Number(result.spanGfcdUseAmt);
-
-			let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);
-			let sumDeliveryFee = Number(result.sumDeliveryFee);
-			let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);
-			let spanCpnDcAmt = Number(result.spanCpnDcAmt);
-			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 returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
-
-			// 추가배송비 영역 설정
-			if (refundPayAmt < 0) {
-				refundPayAmt = spanRefundAmt;
-				$('#addDeliveryFee').css('display', '');
-				$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
-				addPayCost = spanTotDeliveryFee;
-			} else {
-				addPayCost = 0;
-			}
+// 환불계좌 등록 콜백 처리
+var fnRegisterAccountCallback = function(result) {
+	// 환불계좌 정보 설정
+	$('#cancelForm input[name=accountNo]').val(result.accountNo);
+	$('#cancelForm input[name=accountNm]').val(result.accountNm);
+	$('#cancelForm input[name=bankCd]').val(result.bankCd);
 
-			// 금액 설정
-			$('#returnAmt').text(returnAmt.addComma());
-			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
-			$('#deliveryFee').text(deliveryFee.addComma());
-			$('#deductDcAmt').text(deductDcAmt.addComma());
-			$('#refundPayAmt').text(refundPayAmt.addComma());
-			$('#refundPoint').text(refundPoint.addComma());
-			$('#refundGiftCard').text(refundGiftCard.addComma());
+	// 취소처리
+	fnCancel();
+}
+</script>
+
+<script>
+$(document).ready(function(){
+	/*
+	// 세부 사유 글자 수 제한
+	$('.doc_return').keyup(function(e){
+		var content = $(this).val();
+		$('#return_cnt').html(content.length);
+		if (content.length > 200){
+			mcxDialog.alert("최대 200자까지 입력 가능합니다."); //210420_수정 : 시스템 alert -> dialog 변경.
+			$(this).val(content.substring(0, 200));
+			$('#return_cnt').html("200");
+		}
+	});
+
+	//210408_추가 : 스크립트 추가.
+	//반품회수방법 선택 스크립트 추가
+	$(document).on('change','.my_return .retrieve_method #rdi_retrieve_visit',function(e){
+		$('.my_return .retrieve_box.direct').hide();
+		$('.my_return .retrieve_box.visit').show();
+		return false;
+	}).on('change','.my_return .retrieve_method #rdi_retrieve_direct',function(e){
+		$('.my_return .retrieve_box.visit').hide();
+		$('.my_return .retrieve_box.direct').show();
+		return false;
+	});
+
+	//버튼 색
+	$(document).on('click','.popup_box .button_list button',function(){
+		$('.popup_box .button_list button').removeClass('on');
+		$(this).addClass('on');
+	});
+
+	// 반품 수량 선택 팝업
+	//$(document).on("click",".select_custom.select_count",function(e){
+		//$('#returnCountPop').show().addClass("active");
+		//$("body").css({"overflow":"hidden"});
+	//});
+
+	//반품 사유 선택 팝업
+	$(document).on("click",".select_custom.select_return",function(e){
+		$('#returnReasonPop').show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+	});
+
+	//팝업_닫기
+	$('.popup_close').on("click",function(){
+		$('.popup_box').hide().removeClass('active');
+		$("body").css({"overflow":"visible"});
+	});
+
+	//배송지추가_팝업
+	$(document).on('click','#btn_adrsAdd_pop',function(e){
+		$("#adrsAddPop").modal("show");
+		return false;
+	});      
+	$("#adrsAddPop_close").click(function() {
+		$("#adrsAddPop").modal("hide");
+	});
+
+	//배송지정보_팝업
+	$(document).on('click','#btn_adrsChange_pop',function(e){
+		$("#adrsChangePop").modal("show");
+		return false;
+	});
+	$("#adrsChangePop_close").click(function() {
+		$("#adrsChangePop").modal("hide");
+	});
+
+	//배송지수정_팝업
+	$(document).on('click','#btn_addrModify_pop',function(e){
+		$("#adrsModifyPop").modal("show");
+		return false;
+	});
+	$("#adrsModifyPop_close").click(function() {
+		$("#adrsModifyPop").modal("hide");
+	});
+
+	$(document).on("click", "#btn_order_return", function(){
+		mcxDialog.alert("반품 신청이 접수되었습니다.", {
+				//alert("반품하실 상품의 수량을 선택해주세요.") : 클릭 시 반품 수량을 모두 0개로 선택한 경우
+				//alert("반품 사유를 선택해주세요.") : 반품 사유를 선택하지 않는 경우
+			sureBtnText: "확인",  // Confirmation button text
 		});
-	}
+	});
+	*/
 
-	// 환불계좌 등록 콜백 처리
-	var fnRegisterAccountCallback = function(result) {
-		// 환불계좌 정보 설정
-		$('#cancelForm input[name=accountNo]').val(result.accountNo);
-		$('#cancelForm input[name=accountNm]').val(result.accountNm);
-		$('#cancelForm input[name=bankCd]').val(result.bankCd);
+});
 
-		// 취소처리
-		fnCancel();
+//210408_송장번호 input 글자 수 제한
+function handleOnInput(el, maxlength) {
+	if(el.value.length > maxlength)  {
+		el.value = el.value.substr(0, maxlength);
 	}
+}
 </script>
 
 </th:block>

+ 32 - 16
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html

@@ -126,7 +126,7 @@
 								<!-- 입금대기, 결제완료, 상품준비중, 출고처지정 : 주문취소 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
 									<div class="goods_btn_wrap btn_group_flex">
-										<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cncl_complete" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></div>
 									</div>
 								</th:block>
 								<!-- //입금대기, 결제완료, 상품준비중, 출고처지정 : 주문취소 -->
@@ -142,10 +142,10 @@
 									<th:block th:if="${ordDtl.changeableYn} == 'Y' or ${ordDtl.returnableYn} == 'Y'">
 										<div class="goods_btn_wrap btn_group_flex">
 											<th:block th:if="${ordDtl.changeableYn} == 'Y'">
-												<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+												<div><button type="button" class="btn btn_default btn_exch_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></div>
 											</th:block>
 											<th:block th:if="${ordDtl.returnableYn} == 'Y'">
-												<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+												<div><button type="button" class="btn btn_default btn_rtn_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></div>
 											</th:block>
 										</div>
 									</th:block>
@@ -156,7 +156,7 @@
 										<div><button type="button" class="btn btn_default btn_delv_sch"><span>배송 조회</span></button></div>
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</div>
@@ -169,25 +169,25 @@
 									<div class="goods_btn_wrap btn_group_flex">
 										<!-- 교환가능, 반품가능 -->
 										<th:block th:if="${ordDtl.changeableYn} == 'Y'">
-											<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+											<div><button type="button" class="btn btn_default btn_exch_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></div>
 										</th:block>
 										<th:block th:if="${ordDtl.returnableYn} == 'Y'">
-											<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+											<div><button type="button" class="btn btn_default btn_rtn_req" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></div>
 										</th:block>
 										<!-- //교환가능, 반품가능 -->
 										
-										<div><button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary"><span>구매 확정</span></button></div>
+										<div><button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnDecideOrder(this);"><span>구매 확정</span></button></div>
 									</div>
 									<div class="goods_btn_wrap btn_group_flex">
 										<!-- 교환불가, 반품불가 -->
 										<th:block th:if="${ordDtl.changeableYn} == 'N' or ${ordDtl.returnableYn} == 'N'">
-											<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+											<div><button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
 										</th:block>
 										<!-- //교환불가, 반품불가 -->
 										
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</div>
@@ -197,12 +197,12 @@
 								<!-- 구매확정 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
 									<div class="goods_btn_wrap btn_group_flex">
-										<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
-										<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
 										
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</div>
@@ -214,23 +214,23 @@
 							<th:block th:if="${ordDtl.giftPackYn} == 'Y'">
 								<!-- 배송지등록전 -->
 								<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
-									<div><button type="button" class="btn btn_primary btn_sms_send"><span>SMS 재발송</span></button></div>
+									<div><button type="button" class="btn btn_primary btn_sms_send" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></div>
 								</th:block>
 								<!-- //배송지등록전 -->
 								
 								<!-- 배송지등록후 (입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
-									<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+									<div><button type="button" class="btn btn_default btn_cncl_complete" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></div>
 								</th:block>
 								<!-- //배송지등록후 (입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
 								
 								<!-- 배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60' or ${ordDtl.ordDtlStat} == 'G013_70'">
 									<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
-										<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null and ${ordDtl.ordDtlStat} == 'G013_70'">
-											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>
 										</th:block>
 										<!-- //리뷰사용가능, 리뷰등록전일때 -->
 									</th:block>
@@ -690,6 +690,22 @@
 	</section>
 </main>
 
+<form id="exchangeForm" name="exchangeForm" th:action="@{'/mypage/exchange/form'}" th:method="post">
+	<input type="hidden" name="ordNo"/>
+	<input type="hidden" name="ordDtlNo"/>
+	<input type="hidden" name="delvFeeCd"/>
+</form>
+<form id="returnForm" name="returnForm" th:action="@{'/mypage/return/form'}" th:method="post">
+	<input type="hidden" name="ordNo"/>
+	<input type="hidden" name="ordDtlNo"/>
+	<input type="hidden" name="delvFeeCd"/>
+</form>
+<form id="cancelForm" name="cancelForm" th:action="@{'/mypage/cancel/form'}" th:method="post">
+	<input type="hidden" name="ordNo"/>
+	<input type="hidden" name="ordDtlNo"/>
+	<input type="hidden" name="delvFeeCd"/>
+</form>
+
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	let giftMsg				= [[${orderInfo.giftMsg}]];		// 선물메세지

+ 889 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReturnFormMob.html

@@ -0,0 +1,889 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="mob/common/layout/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypagReturnFormMob.html
+ * @desc    : 마이페이지 > 취소신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+
+<main role="" id="" class="container my">
+	<section class="content my_return">
+		<form id="returnForm" class="form_wrap">
+			<input type="hidden" name="accountNo" 	th:value="${oneData.accountNo}"/>
+			<input type="hidden" name="accountNm" 	th:value="${oneData.accountNm}"/>
+			<input type="hidden" name="bankCd" 		th:value="${oneData.bankCd}"/>
+			<input type="hidden" name="chgReason"/>
+					
+			<div class="inner wide bg_beige">
+				<div class="order_number">
+					<dl class="clear">
+						<dt>주문번호</dt>
+						<dd th:text="${oneData.ordNo}"></dd>
+					</dl>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="part_goods">
+					<div class="goods_top">
+						<div th:unless="${oneData.giftPackYn == 'Y'}" class="goods_date">주문일<span class="date" th:text="${oneData.ordDt}"></span></div>
+						<div th:if="${oneData.giftPackYn == 'Y'}" class="goods_date">선물일<span class="date" th:text="${oneData.ordDt}"></span></div>
+					</div>
+					
+					<!-- 반품상품목록 -->
+					<th:block th:if="${returnList.returnList}" th:each="return, status : ${returnList.returnList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<div class="goods_section">
+							<div class="goods_detail">
+								<a href="">
+									<div class="thumb_box">
+										<img th:src="${imageUrl + '/' + return.sysImgNm}" width="100%" alt="">
+									</div>
+									<div class="info_box">
+										<div class="od_name">
+											<div class="brand">
+												<span th:text="${return.brandNm}"></span>
+												<div class="badge_wrap">
+													<em class="tag primary" th:if="${return.shotDelvYn == 'Y'}">총알배송</em>
+													<em class="tag" th:if="${return.shotDelvYn == 'N' and return.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
+													<em class="tag" th:if="${return.selfGoodsYn == 'N'}">업체직배송</em>
+												</div>
+											</div>
+											<div class="name" th:text="${return.goodsNm}"></div>
+										</div>
+										<div class="od_opt">
+												<div class="option">
+													<th:block th:if="${return.goodsType == 'G056_S'}" th:each="option, status : ${return.colorNmArr}">
+														<em th:text="${return.itemNmArr[status.index]}"></em>
+														<em th:text="${return.optCd2Arr[status.index]}"></em>
+													</th:block>
+													<th:block th:unless="${return.goodsType == 'G056_S'}">
+														<em th:text="${return.colorNm}"></em>
+														<em th:text="${return.optCd2}"></em>
+													</th:block>
+												</div>
+										</div>
+										<div class="od_calc">
+											<th:block th:if="${(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}">
+												<p class="sale_price">
+													<del><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt - return.cpn1DcAmt, 1, 'COMMA')}"></em>원</del>
+												</p>
+											</th:block>
+											<p class="price">
+												<span class="selling_price">
+													<em th:text="${#numbers.formatInteger(return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt, 1, 'COMMA')}"></em>원
+												</span>
+											</p>
+										</div>
+									</div>
+								</a>
+							</div>
+							<div class="goods_select">
+								<div class="select_custom select_count">
+									<div class="combo">
+										<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
+										<div class="select">수량 0개</div>
+									</div>
+								</div>
+							</div>
+							<th:block th:if="${#lists.size(returnList.returnList) == status.count}">
+								<div class="goods_txt">
+									<p class="cf_txt cf_desc">반품하실 상품의 수량을 선택하신 후<br>반품 신청을 하실 수 있습니다.</p>
+								</div>
+							</th:block>
+						</div>
+					</th:block>
+					<!-- //취소상품목록 -->
+					
+				</div>
+			</div>
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>반품 사유</h3>
+					</div>
+					<div class="tbl tbl_tarea">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<th class="sr-only">반품 접수 일자</th>
+								<td>
+									<div class="select_custom select_return">
+										<div class="combo">
+											<div class="select">반품 사유를 선택하세요.</div>
+										</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th class="sr-only">반품 완료 일자</th>
+								<td>
+									<div class="textarea_wrap">
+										<textarea class="doc_return" name="" id="" placeholder="자세한 사유를 입력해주세요."></textarea>
+										<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
+									</div>
+								</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</div>
+			
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>반품방식 선택</h3>
+					</div>
+					<div class="retrieve_method">
+						<div class="tbl tbl_radio">
+							<table>
+								<colgroup>
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th class="sr-only">방문 회수</th>
+										<td>
+											<div class="form_field">
+												<input type="radio" name="wdGb" id="withdraw"  checked="checked" value="W">
+												<label for="withdraw"><span>방문 회수 <b class="c_primary">택배사에서 고객에게 방문하여 회수</b></span></label>
+											</div>
+										</td>
+									</tr>
+									<tr>
+										<th class="sr-only">직접 배송</th>
+										<td>
+											<div class="form_field">
+												<input type="radio" name="wdGb" id="direct" value="D">
+												<label for="direct"><span>직접 배송 <b class="c_primary">고객이 반품지로 직접 반송</b></span></label>
+											</div>
+										</td>
+									</tr>
+								</tbody>
+								
+							</table>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="retrieve_box visit" style="display:block;" id="chgerLocation">
+					<div class="tbl_wrap">
+						<div class="tbl_tit"> 
+							<h3>반품 회수지 주소</h3>
+							<button type="button" id="btn_adrsChange_pop" class="btn_popup" onclick="fnChangeDeliveryAddr();"><span>회수지 변경</span></button>
+						</div>
+						<div class="tbl">
+							<div class="ship_info">
+								<dl>
+									<div class="name">
+										<dt><span class="sr-only">배송지명</span></dt>
+										<dd th:text="${deliveryAddrInfo.recipNm}"></dd>
+										<input type="hidden" name="chgerNm" th:value="${deliveryAddrInfo.recipNm}">
+									</div>
+									<div class="addr">
+										<dt><span class="sr-only">배송주소</span></dt>
+										<dd id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr}    ${deliveryAddrInfo.recipDtlAddr}|"></dd>
+										<input type="hidden" name="chgerZipcode" th:value="${deliveryAddrInfo.recipZipcode}">
+										<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.delvMemo}">
+									</div>
+									<div class="phone">
+										<dt><span class="sr-only">휴대폰 번호</span></dt>
+										<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+										<input type="hidden" name="chgerPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+									</div>
+									<div class="desc_txt">택배사에서 반품 상품을 직접 회수할 장소 선택</div>
+								</dl>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="retrieve_box direct" style="display:none;" id="returnLocation">
+					<div class="tbl_wrap">
+						<div class="tbl_tit"> 
+							<h3>반송 정보</h3>
+						</div>
+						<div class="tbl">
+							<div class="ship_info">
+								<dl>
+									<div class="addr">
+										<dt><span>반송 주소</span></dt>
+										<dd th:text="|${deliveryAddrInfo.rtnLocBaseAddr} ${deliveryAddrInfo.rtnLocDtlAddr}|"></dd>
+									</div>
+									<div class="phone">
+										<dt><span>반송 송장번호</span></dt>
+										<dd><input type="tel" class="form_control" name="wdInvoiceNo" data-valid-type="numeric" value="" oninput='handleOnInput(this, 20)' placeholder="송장번호를 입력해주세요."></dd>
+									</div>
+								</dl>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="tbl_wrap pay_wrap">
+					<div class="tbl_tit"> 
+						<h3>환불 정보</h3>
+						<strong class="pay"><span id="returnAmt"></span>원</strong>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="227">
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<td>
+									<dl class="refund_deduct">
+										<div>
+											<dt>상품 취소 금액</dt>
+											<dd>
+												<div>
+													<span id="goodsCancelAmt">0</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>배송비</dt>
+											<dd>
+												<div>
+													<span id="deliveryFee">0</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>할인 금액 차감</dt>
+											<dd>
+												<div>
+													<span id="deductDcAmt">0</span>원
+												</div>
+											</dd>
+										</div>
+									</dl>
+									<dl class="refund_detail">
+										<div>
+											<dt>환불 수단</dt>
+											<dd>
+												<div>
+													<span th:if="${paymentInfo.pgGb == 'KCP'}" th:text="${paymentInfo.payMeansNm}"></span>
+													<span th:if="${paymentInfo.pgGb == 'NAVER'}" th:text="|네이버페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'KAKAO'}" th:text="|카카오페이|"></span>
+													<span th:if="${paymentInfo.pgGb == 'PAYCO'}" th:text="|PAYCO|"></span>
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>결제금액 환불</dt>
+											<dd>
+												<div>
+													<span id="refundPayAmt">0</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>포인트 환불</dt>
+											<dd>
+												<div>
+													<span id="refundPoint">0</span>P
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>상품권 환불</dt>
+											<dd>
+												<div>
+													<span id="refundGiftCard">0</span>원
+												</div>
+											</dd>
+										</div>
+									</dl>
+								</td>
+							</tr>
+						</table>
+						<!-- 
+						<button type="button" class="btn btn_default"><span>취소 전표 보기</span></button>
+						 -->
+					</div>
+				</div>
+				<div class="required_group">
+					<p>배송비 <span class="c_primary" id="addPayCost">0원</span> 추가 결제가 필요합니다.</p>
+				</div>
+				<div class="btn_group btn_group_flex">
+					<div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"><span>취소</span></button></div>
+					<div><button type="button" id="btn_order_return" class="btn btn_dark" onclick="fnReturn()"><span>반품 신청</span></button></div>
+				</div>
+			</div>
+		</form>
+	</section>
+</main>
+
+<!-- 210408_반품 수량 선택 팝업 -->
+<th:block th:if="${returnList.returnList}" th:each="return, status : ${returnList.returnList}">
+	<div class="popup_box returnCountPop">
+		<div class="lap">
+			<div class="popup_close">카테고리닫기</div>
+			<div class="popup_head sr-only">
+				<h2 class="">주문상태 선택 팝업</h2>
+			</div>
+			<div class="popup_con">
+				<div class="button_list clear">
+					<button type="button"><span>수량 0개</span></button>
+					<th:block th:each="num : ${#numbers.sequence(1, return.ordCanChgQty)}">
+						<button type="button" th:qty="${num}" onclick="fnChangeReturnQty(this);"><span th:text="|수량 ${num}개|"></span></button>
+					</th:block>
+					<input type="hidden" name="ordDtlNo" th:value="${return.ordDtlNo}">
+				</div> 
+			</div>
+		</div>
+	</div>
+</th:block>
+<!-- //210408_반품 수량 선택 팝업 -->
+
+<!-- 210408_반품 사유 선택 팝업 -->
+<div id="returnReasonPop" class="popup_box returnReasonPop">
+	<div class="lap">
+		<div class="popup_close">카테고리닫기</div>
+		<div class="popup_head sr-only">
+			<h2 class="">주문상태 선택 팝업</h2>
+		</div>
+		<div class="popup_con">
+			<div class="button_list">
+				<th:block th:if="${returnReason}" th:each="oneData, status : ${returnReason}">
+					<button type="button" th:attr="chgReason=${oneData.cd}" onclick="fnChangeReturnReason(this);"><span th:text="${oneData.cdNm}">단순 변심</span></button>
+				</th:block>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_반품 사유 선택 팝업 -->
+
+<!-- 210408_ 추가 : 환불 계좌 등록 팝업 -->
+<div id="refundAccountPop" class="popup_box refundAccountPop">
+	<div class="lap">
+		<div class="popup_close">카테고리닫기</div>
+		<div class="popup_head sr-only">
+			<h2 class="">환불 계좌 등록 팝업</h2>
+		</div>
+		<div class="popup_con">
+			<div class="tbl_wrap">
+				<div class="tbl_tit"> 
+					<h3>환불 계좌 등록</h3><!-- 210409_수정 : 텍스트 변경 -->
+				</div>
+				<div class="tbl type1">
+					<table>
+						<colgroup>
+							<col width="*">
+						</colgroup>   
+						<tbody>
+							<tr>
+								<th>예금주</th>
+								<td>
+									<div class="form_field">
+										<input type="text" name="accountNm" class="form_control" th:value="${customerInfo.custNm}" placeholder="이름를 입력해 주세요" readonly="readonly">
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th>은행명</th>
+								<td>
+									<div class="form_field">
+										<div class="select_custom select_bank">
+											<div class="combo">
+												<div class="select">선택</div>
+												<input type="hidden" name="bankCd" value=""/>
+											</div>
+										</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th>계좌번호</th>
+								<td>
+									<div class="input_wrap certi_wrap">
+										<input type="tel" class="form_control" value="" placeholder="">
+										<button type="button" id="btn_bank_certi" class="btn btn_dark"><span>계좌인증</span></button>
+									</div>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			
+		</div>
+		<div class="pop_foot">
+			<div class="btn_group_flex">
+				<div class="">
+					<button type="submit" id="btn_bank_return" class="btn btn_dark btn_block"><span>계좌 등록 후 환불 신청</span></button>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_ 추가 : 환불 계좌 등록 토스트 팝업 -->
+
+<!-- 210408_ 추가 : 은행 선택 팝업 -->
+<div id="refundBankPop" class="popup_box refundBankPop">
+	<div class="lap">
+		<div class="popup_close">카테고리닫기</div>
+		<div class="popup_head sr-only">
+			<h2 class="">은행 선택 팝업</h2>
+		</div>
+		<div class="popup_con">
+			<div class="button_list clear">
+				<th:block th:if="${bankList}" th:each="oneData, status : ${bankList}">
+					<button type="button" th:id="|bankCd_${oneData.cd}|"><span th:text="${oneData.cdNm}"></span></button>
+				</th:block>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_ 추가 : 은행 선택 팝업 -->
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+var isLogin 		= [[${isLogin}]];
+let returnList 		= [[${returnList.returnList}]];
+let oneData 		= [[${oneData}]];
+let paymentInfo 	= [[${paymentInfo}]];
+let isCustomer 		= true;
+let jsonObj 		= {};
+
+$(document).ready(function() {
+	// 입점업체의 경우 회수방식 직접배송 처리
+	if (oneData.selfGoodsYn != 'Y') {
+		$('#withdraw').click();
+		$('.wdGb').css('display','none');
+	}
+});
+
+// 반품수량버튼기능
+$(".select_custom.select_count").each(function(idx){
+	$(this).on("click", function(){
+		// 전체비활성화
+		$(".returnCountPop").hide();
+		
+		// 수량팝업활성화
+		$("#returnCountPop").eq(idx).show().addClass("active");
+		
+		$("body").css({"overflow":"hidden"});
+	});
+});
+
+// 은행목록 버튼 기능
+$("#refundBankPop .button_list button").each(function(){
+	$(this).on("click", function(){
+		$("#refundAccountPop input[name=bankCd]").val($(this).attr("id"));
+		$("#refundAccountPop .select_custom.select_bank .select").text($(this).find("span").text());
+	});
+});
+
+// 반품 처리
+var fnReturn = function() {
+	let url = '/mypage/return';
+
+	// 반품 사유 체크
+	let chgReason = $('#returnForm input[name=chgReason]').val();
+	if (gagajf.isNull(chgReason)) {
+		mcxDialog.alert('반품사유를 선택해주세요.');
+		return false;
+	}
+
+	// 주문상세번호 및 반품 수량 설정
+	let ordDtlNoArr 		= [];
+	let cnclRtnReqQtyArr 	= [];
+	let chkQty 				= 0;
+	$.each($('#returnForm input[name=chgQty]'), function(idx, item) {
+		let chgQty 		= $(item).val();
+		let ordDtlNo 	= $(item).attr('ordDtlNo');
+
+		if (chgQty > 0) {
+			ordDtlNoArr.push(Number(ordDtlNo));
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			chkQty += chgQty;
+		}
+	});
+
+	// 반품 수량 체크
+	if (chkQty == 0) {
+		mcxDialog.alert('반품하실 상품의 수량을 선택해주세요.');
+		return false;
+	}
+
+	// 환불계좌 체크
+	let accountNo 	= $('#returnForm input[name=accountNo]').val();
+	let accountNm	= $('#returnForm input[name=accountNm]').val();
+	let bankCd 		= $('#returnForm input[name=bankCd]').val();
+	
+	// 임시
+	paymentInfo.payMeans 	= "G014_20";
+	paymentInfo.payStat 	= "G016_30";
+	
+	// 무통장입금, 결제완료 일때 환불계좌정보 체크
+	if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+		let data = {};
+		data.ordNo 			= oneData.ordNo;
+		data.accountNm 		= oneData.accountNm;
+		
+		$('#refundAccountPop').show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+		
+		return false;
+	}
+
+	// 추가배송비 PG 처리
+	let addPayCost 			= $('#returnForm input[name=addPayCost]').val();
+
+	let data 				= {};
+	data.ordNo 				= oneData.ordNo;
+	data.ordChgSq 			= 0;
+	data.chgReason 			= chgReason;
+	data.chgMemo 			= $('#returnForm textarea[name=chgMemo]').val();
+	data.accountNo 			= $('#returnForm input[name=accountNo]').val();
+	data.accountNm 			= $('#returnForm input[name=accountNm]').val();
+	data.bankCd 			= $('#returnForm input[name=bankCd]').val();
+	data.isCustomer 		= isCustomer;
+	data.wdGb 				= $('#returnForm input[name=wdGb]:radio:checked').val();
+	data.chgerNm 			= $('#chgerNm').text();
+	data.chgerZipcode 		= $('#returnForm input[name=chgerZipcode]').val();
+	data.chgerBaseAddr 		= $('#returnForm input[name=chgerBaseAddr]').val();
+	data.chgerDtlAddr 		= $('#returnForm input[name=chgerDtlAddr]').val();
+	data.chgerPhnno 		= $('#returnForm input[name=chgerPhnno]').val();
+	data.chgerRtnMemo 		= $('#returnForm input[name=chgerRtnMemo]').val();
+	data.ordDtlNoArr 		= ordDtlNoArr;
+	data.wdInvoiceNo 		= $('#returnForm input[name=wdInvoiceNo]').val();
+	data.addPayCost 		= addPayCost;
+	data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
+
+	let jsonData = JSON.stringify(data);
+
+	gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+		if (addPayCost > 0) {
+			let ordChgSq = result.ordChgSq;
+			let ordNo = result.ordNo;
+
+			$('#addPaymentForm input[name=ordChgSq]').val(ordChgSq);
+			$('#addPaymentForm input[name=ordNo]').val(ordNo);
+
+			document.addPaymentForm.submit();
+		} else {
+			cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
+		}
+	}, true);
+}
+
+// 반품 수량 변경 이벤트 처리
+var fnChangeReturnQty = function(param) {
+	let url = '/mypage/cancel/refund/amt/calculate';
+	
+	// 반품수량설정
+	if (param != null) {
+		$("#returnForm input[name=chgQty]").each(function(idx){
+			var ordDtlNo = $(this).attr("ordDtlNo");
+			if (ordDtlNo == $(param).parent().find("input[name=ordDtlNo]").val()) {
+				$(this).val($(param).attr("qty"));
+				$(this).parent().find(".select").text($(param).find("span").text());
+			}
+		});
+	}
+
+	let chgReason = $('#returnForm input[name=chgReason]').val();
+
+	if (!gagajf.isNull(chgReason)) {
+		// 반품 수량 설정
+		let cnclRtnReqQtyArr 	= [];
+		let ordDtlNoArr 		= [];
+		let ordCanChgQtyArr 	= [];
+		
+		$.each($('#returnForm input[name=chgQty]'), function(idx, item) {
+			let chgQty 			= $(item).val();
+			let ordDtlNo 		= $(item).attr('ordDtlNo');
+			let ordCanChgQty 	= $(item).attr('ordCanChgQty');
+			
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			ordDtlNoArr.push(Number(ordDtlNo));
+			ordCanChgQtyArr.push(Number(ordCanChgQty));
+		});
+
+		let data 				= {};
+		data.ordNo 				= oneData.ordNo;
+		data.chgGb 				= 'G680_30';
+		data.ordDtlNoArr 		= ordDtlNoArr;
+		data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+			let refundPoint 		= Number(result.spanPntDcAmt);
+			let refundGiftCard 		= Number(result.spanGfcdUseAmt);
+			let spanCnclRtnAmt 		= Number(result.spanCnclRtnAmt);
+			let spanTotDeliveryFee 	= Number(result.spanTotDeliveryFee);
+			let spanCpnDcAmt 		= Number(result.spanCpnDcAmt);
+			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 = $('#returnForm input[name=wdGb]:radio:checked').val();
+				// 회사사유 : 추가배송비 0, 반품배송비 0
+				if (!isCustomer) {
+					spanTotRtnDelvFee = 0;
+				}
+				// 고객사유(직접발송) : 반품배송비 0
+				else if (wdGb == 'D') {
+					spanTotRtnDelvFee = 0;
+				}
+			} else {
+				spanTotRtnDelvFee = 0;
+			}
+			
+			let goodsCancelAmt 	= spanCnclRtnAmt;										// 상품취소금액
+			let addDelvFee 		= spanTotRtnDelvFee;									// 추가배송비
+			let deductDcAmt 	= 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;	// 할인금액 차감(쿠폰+다다익선+선포인트)
+			let refundPayAmt 	= spanRefundAmt - spanTotRtnDelvFee;					// 결제금액 환불
+			
+			if (!isCustomer) {
+				refundPayAmt += spanTotDeliveryFee;
+			}
+			
+			// 추가배송비 영역 설정
+			if (refundPayAmt < 0) {
+				refundPayAmt += addDelvFee;
+				$('#addDeliveryFee').css('display', '');
+				$('#addPayCost').text(addDelvFee.addComma() + '원');
+				$('#returnForm input[name=addPayCost]').val(addDelvFee);
+			} else {
+				$('#addDeliveryFee').css('display', 'none');
+				$('#returnForm input[name=addPayCost]').val(0);
+			}
+			
+			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
+			
+			// 금액 설정
+			$('#returnAmt').text(returnAmt.addComma());
+			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
+			$('#deliveryFee').text((0 - addDelvFee).addComma());
+			$('#deductDcAmt').text(deductDcAmt.addComma());
+			$('#refundPayAmt').text(refundPayAmt.addComma());
+			$('#refundPoint').text(refundPoint.addComma());
+			$('#refundGiftCard').text(refundGiftCard.addComma());
+		});
+	}
+}
+
+// 반품 방식 변경 이벤트
+$('#returnForm input[name=wdGb]').on('change', function() {
+	let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
+
+	if (wdGb == 'W') {
+		$('#chgerLocation').css('display', '');
+		$('#returnLocation').css('display', 'none');
+	} else {
+		$('#chgerLocation').css('display', 'none');
+		$('#returnLocation').css('display', '');
+	}
+
+	// 환불금액 계산
+	fnChangeReturnQty();
+});
+
+// 환불계좌 등록 콜백 처리
+var fnRegisterAccountCallback = function(result) {
+	// 환불계좌 정보 설정
+	$('#cancelForm input[name=accountNo]').val(result.accountNo);
+	$('#cancelForm input[name=accountNm]').val(result.accountNm);
+	$('#cancelForm input[name=bankCd]').val(result.bankCd);
+
+	// 취소처리
+	fnCancel();
+}
+
+// 반품 사유 변경 이벤트
+var fnChangeReturnReason = function(param) {
+	var customerReasonArr = ['G688_10'];
+	let chgReason = $(param).attr('chgReason');
+
+	// 귀책사유체크(취소, 반품, 교환)
+	isCustomer = customerReasonArr.includes(chgReason);
+	
+	// 반품 사유 설정
+	$('#returnForm input[name=chgReason]').val(chgReason);
+	$("#returnForm .select_custom.select_return .select").text($(param).find("span").text());
+
+	// 환불금액 계산
+	fnChangeReturnQty();
+}
+
+//회수지 정보 설정
+var delvAddrSet = function(delvObj) {
+	let chgerNm 			= delvObj.recipNm;
+	let chgerPhnno 			= delvObj.recipPhnno;
+	let chgerZipcode 		= delvObj.recipZipcode;
+	let chgerBaseAddr 		= delvObj.recipBaseAddr;
+	let chgerDtlAddr 		= delvObj.recipDtlAddr;
+	let delvMemo 			= delvObj.delvMemo;
+	let chgerAddr 			= chgerBaseAddr + '    ' + chgerDtlAddr;
+
+	$('#returnForm input[name=chgerNm]').val(chgerNm);
+	$('#returnForm input[name=chgerPhnno]').val(chgerPhnno);
+	$('#returnForm input[name=chgerZipcode]').val(chgerZipcode);
+	$('#returnForm input[name=chgerBaseAddr]').val(chgerBaseAddr);
+	$('#returnForm input[name=chgerDtlAddr]').val(chgerDtlAddr);
+	$('#returnForm input[name=chgerRtnMemo]').val(delvMemo);
+	
+	$('#chgerNm').text(chgerNm);
+	$('#chgerPhnno').text(chgerPhnno);
+	$('#chgerAddr').html(chgerAddr);
+}
+</script>
+
+<script>
+//세부 사유 글자 수 제한
+$('.doc_return').keyup(function(e){
+	var content = $(this).val();
+	$('#return_cnt').html(content.length);
+	if (content.length > 200){
+		mcxDialog.alert("최대 200자까지 입력 가능합니다."); //210420_수정 : 시스템 alert -> dialog 변경.
+		$(this).val(content.substring(0, 200));
+		$('#return_cnt').html("200");
+	}
+});
+
+// 반품 사유 선택 팝업
+$(document).on("click",".select_custom.select_return",function(e){
+	$('#returnReasonPop').show().addClass("active");
+	$("body").css({"overflow":"hidden"});
+});
+
+// 팝업_닫기
+$('.popup_close').on("click",function(){
+	$('.popup_box').hide().removeClass('active');
+	$("body").css({"overflow":"visible"});
+});
+
+// 버튼 색
+$(document).on('click','.popup_box .button_list button',function(){
+	$('.popup_box .button_list button').removeClass('on');
+	$(this).addClass('on');
+});
+
+function handleOnInput(el, maxlength) {
+	if(el.value.length > maxlength)  {
+		el.value = el.value.substr(0, maxlength);
+	}
+}
+
+// 210408_ 추가 : 환불계좌등록 팝업 스크립트
+$(document).on("click","#btn_refund_pop",function(e){
+	$('#refundAccountPop').show().addClass("active");
+	$("body").css({"overflow":"hidden"});
+});
+
+//210408_ 추가 : 은행선택 팝업 스크립트
+$(document).on("click","#refundAccountPop .select_bank",function(e){
+	$('#refundBankPop').show().addClass("active");
+	$('#refundBankPop').css({"z-index":"1000"});
+	$("body").css({"overflow":"hidden"});
+});
+
+//210408_ 추가 : 환불계좌등록 팝업 스크립트 닫기
+$('.refundAccountPop .popup_close').on("click",function(){
+	$('.refundAccountPop').hide().removeClass('active');
+	$("body").css({"overflow":"visible"});
+});
+
+//210408_ 추가 : 은행선택 팝업 스크립트 닫기
+$('.refundBankPop .popup_close').on("click",function(){
+	$('.refundBankPop').hide().removeClass('active');
+});
+
+/* 210409_추가 : alert 모음 */
+$(document).on("click", "#btn_bank_certi", function(){
+	mcxDialog.alert("계좌인증에 성공했습니다.", {
+			//alert("계좌정보를 다시 확인해주세요.") : 계좌인증 실패/유효하지 않은 경우
+			//alert("은행을 선택해주세요.") : 은행을 선택하지 않은 경우
+			//alert("계좌번호를 입력해주세요.") : 계좌번호를 입력하지 않은 경우
+		sureBtnText: "확인",  // Confirmation button text
+	});
+});
+
+/*
+$(document).ready(function(){
+
+	//210408_추가 : 스크립트 추가.
+	//반품회수방법 선택 스크립트 추가
+	$(document).on('change','.my_return .retrieve_method #rdi_retrieve_visit',function(e){
+		$('.my_return .retrieve_box.direct').hide();
+		$('.my_return .retrieve_box.visit').show();
+		return false;
+	}).on('change','.my_return .retrieve_method #rdi_retrieve_direct',function(e){
+		$('.my_return .retrieve_box.visit').hide();
+		$('.my_return .retrieve_box.direct').show();
+		return false;
+	});
+
+	// 반품 수량 선택 팝업
+	//$(document).on("click",".select_custom.select_count",function(e){
+		//$('#returnCountPop').show().addClass("active");
+		//$("body").css({"overflow":"hidden"});
+	//});
+
+	//배송지추가_팝업
+	$(document).on('click','#btn_adrsAdd_pop',function(e){
+		$("#adrsAddPop").modal("show");
+		return false;
+	});      
+	$("#adrsAddPop_close").click(function() {
+		$("#adrsAddPop").modal("hide");
+	});
+
+	//배송지정보_팝업
+	$(document).on('click','#btn_adrsChange_pop',function(e){
+		$("#adrsChangePop").modal("show");
+		return false;
+	});
+	$("#adrsChangePop_close").click(function() {
+		$("#adrsChangePop").modal("hide");
+	});
+
+	//배송지수정_팝업
+	$(document).on('click','#btn_addrModify_pop',function(e){
+		$("#adrsModifyPop").modal("show");
+		return false;
+	});
+	$("#adrsModifyPop_close").click(function() {
+		$("#adrsModifyPop").modal("hide");
+	});
+
+	// //210408_추가 : 스크립트
+
+	$(document).on("click", "#btn_order_return", function(){
+		mcxDialog.alert("반품 신청이 접수되었습니다.", {
+				//alert("반품하실 상품의 수량을 선택해주세요.") : 클릭 시 반품 수량을 모두 0개로 선택한 경우
+				//alert("반품 사유를 선택해주세요.") : 반품 사유를 선택하지 않는 경우
+			sureBtnText: "확인",  // Confirmation button text
+		});
+	});
+});
+*/
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -2265,7 +2265,7 @@ var custCpnSumAmtCal = function() {
 		cpnDcSumAmt			= cpnDcSumAmt + (goodsCpnDcAmt + cartCpnDcAmt);
 		prePntDcSumAmt		= prePntDcSumAmt + prePntDcAmt1;
 		
-		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
+		var ordAmt			= ((orgCurrPrice - cpn1DcAmt) + optAddPrice) * goodsQty;
 		ordSumAmt			= ordSumAmt + ordAmt;
 		
 		// 선포인트사용여부 

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

@@ -33,7 +33,7 @@
 								</div>
 							</div>
 							<!-- Add Scrollbar -->
-							<div class="swiper-scrollbar"></div>
+							<div class="swiper-scrollbar" th:if="${goodsList.size() > 5}"></div>
 							<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span>
 						</div>
 					</div>

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

@@ -41,7 +41,7 @@
 							</div>
 						</div>
 						<!-- Add Scrollbar -->
-						<div class="swiper-scrollbar" style="opacity: 0; transition-duration: 400ms;"><div class="swiper-scrollbar-drag" style="width: 514.104px; transform: translate3d(0px, 0px, 0px);"></div></div>
+						<div class="swiper-scrollbar" th:if="${goodsList.size() > 5}" style="opacity: 0; transition-duration: 400ms;"><div class="swiper-scrollbar-drag" style="width: 514.104px; transform: translate3d(0px, 0px, 0px);"></div></div>
 						<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
 				</div>
 				<!-- -->

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

@@ -1071,7 +1071,7 @@
 							if(info.ordCanQty < 6 && info.ordCanQty > 0) {
 								quickShoppingBagHtml += '			<div class="shape"><span>곧 품절돼요!</span></div>';
 							}
-							quickShoppingBagHtml += "			<a href='javascript:fnGoToGoodsDetail(\"" + info.goodsCd + "\")' class='itemLink'>";
+							quickShoppingBagHtml += "			<a href='javascript:cfnGoToGoodsDetail(\"" + info.goodsCd + "\")' class='itemLink'>";
 							quickShoppingBagHtml += '				<div class="itemPic">';
 							quickShoppingBagHtml += '					<img alt="BLACK-a" class="vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + info.sysImgNm + '?RS=120"/>';
 							quickShoppingBagHtml += '				</div>';

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

@@ -2166,7 +2166,7 @@ var custCpnSumAmtCal = function() {
 		cpnDcSumAmt			= cpnDcSumAmt + (goodsCpnDcAmt + cartCpnDcAmt);
 		prePntDcSumAmt		= prePntDcSumAmt + prePntDcAmt1;
 		
-		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
+		var ordAmt			= ((orgCurrPrice - cpn1DcAmt) + optAddPrice) * goodsQty;
 		ordSumAmt			= ordSumAmt + ordAmt;
 		
 		// 선포인트사용여부 

+ 4 - 2
src/main/webapp/WEB-INF/views/web/popup/RefundAccountAddPopupFormWeb.html

@@ -63,8 +63,10 @@
 						<td>
 							<div class="form_field">
 								<div class="input_wrap">
-									<input type="text" class="form_control" name="accountNo" value="" data-valid-type="numeric" placeholder="계좌번호를 입력해주세요.">
-									<button type="button" id="confirmAccount" class="btn btn_dark btn_sm"><span>계좌인증</span></button>
+									<input type="text" id="accountNo" name="accountNo" class="form_control" maxlength="20" data-valid-type="numeric"  placeholder="계좌번호를 입력해 주세요"/>
+									<button type="button" id="btnAccountCheck" class="btn btn_dark">
+										<span>계좌인증</span>
+									</button>
 								</div>
 							</div>
 						</td>

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

@@ -282,6 +282,20 @@ function cfnAddCart(cartList) {
 						// PC버전에서만 동작해야함(퀵메뉴)
 						if (navigator.userAgent.indexOf('Mobile') == -1) {
 							fnGetCartGoodsList();
+						} else {
+							if($("header #htopSub .button_wrap .store>span")) {
+								// 장바구니 수량 조회
+								$.getJSON('/cart/goods/not/soldout/cnt', function (order, status) {
+									let cartCnt;
+									if (order.totCartCnt > 99) {
+										cartCnt = "99+";
+									} else {
+										cartCnt = order.totCartCnt;
+									}
+									
+									$("header #htopSub .button_wrap .store>span").text(cartCnt);
+								});
+							}
 						}
 						
 						// 장바구니 팝업에서