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

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.front.git into develop

eskim 5 лет назад
Родитель
Сommit
d1a9b1d2ea
100 измененных файлов с 3822 добавлено и 779 удалено
  1. 0 1
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 7 6
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  3. 2 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  4. 7 2
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  5. 16 9
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  6. 4 8
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  7. 6 1
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  8. 31 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  9. 199 264
      src/main/java/com/style24/front/biz/web/TsfNoMemberController.java
  10. 16 3
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  11. 13 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  12. 63 28
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  13. 6 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  14. 63 22
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  15. 1 0
      src/main/resources/i18n/messages/message_ko_KR.properties
  16. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/UseTermsLayerFormMob.html
  17. 3 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreCancelDetailFormMob.html
  18. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html
  19. 191 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustDeliveryAddrFormMob.html
  20. 18 16
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  21. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListFormMob.html
  22. 30 29
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html
  23. 250 49
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  24. 28 6
      src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html
  25. 7 4
      src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html
  26. 82 25
      src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html
  27. 1 1
      src/main/webapp/WEB-INF/views/mob/order/OrderFreegiftInfoMob.html
  28. 10 1
      src/main/webapp/WEB-INF/views/mob/order/OrderListInfoMob.html
  29. 1 1
      src/main/webapp/WEB-INF/views/mob/order/OrderPaymentInfoMob.html
  30. 8 1
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrAddPopMob.html
  31. 8 1
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrModifyPopMob.html
  32. 4 0
      src/main/webapp/WEB-INF/views/web/common/layout/NoMemberLayoutWeb.html
  33. 1 1
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  34. 139 69
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  35. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/ChangeOptionPopupFormWeb.html
  36. 20 22
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  37. 7 6
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html
  38. 85 17
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreExchangeDetailFormWeb.html
  39. 29 9
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreListFormWeb.html
  40. 12 8
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreReturnDetailFormWeb.html
  41. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustDeliveryAddrFormWeb.html
  42. 7 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html
  43. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb_20210330.html
  44. 46 6
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  45. 7 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  46. 26 23
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  47. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb_20210329.html
  48. 277 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html
  49. 7 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  50. 28 6
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  51. 18 20
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCancelFormWeb.html
  52. 577 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreListFormWeb.html
  53. 647 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberExchangeFormWeb.html
  54. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderListFormWeb.html
  55. 638 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberReturnFormWeb.html
  56. 28 7
      src/main/webapp/WEB-INF/views/web/order/OrderCompleteWeb.html
  57. 8 4
      src/main/webapp/WEB-INF/views/web/order/OrderDcAmtInfoWeb.html
  58. 91 17
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  59. 1 1
      src/main/webapp/WEB-INF/views/web/order/OrderFreegiftInfoWeb.html
  60. 1 4
      src/main/webapp/WEB-INF/views/web/order/OrderPaymentInfoWeb.html
  61. 8 1
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrAddPopWeb.html
  62. 8 1
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrModifyPopWeb.html
  63. 7 0
      src/main/webapp/WEB-INF/views/web/popup/DelvMemoChangePopWeb.html
  64. 1 1
      src/main/webapp/WEB-INF/views/web/popup/RefundAccountAddPopupFormWeb.html
  65. 13 40
      src/main/webapp/biz/mypage.js
  66. BIN
      src/main/webapp/images/mo/mo_btn_top.png
  67. BIN
      src/main/webapp/images/pc/br_logo_andew.png
  68. BIN
      src/main/webapp/images/pc/br_logo_andew_bk.png
  69. BIN
      src/main/webapp/images/pc/br_logo_brand_andew.png
  70. BIN
      src/main/webapp/images/pc/br_logo_brand_buckaroo.png
  71. BIN
      src/main/webapp/images/pc/br_logo_brand_conversekids.png
  72. BIN
      src/main/webapp/images/pc/br_logo_brand_curlysue.png
  73. BIN
      src/main/webapp/images/pc/br_logo_brand_frj.png
  74. BIN
      src/main/webapp/images/pc/br_logo_brand_hurleykids.png
  75. BIN
      src/main/webapp/images/pc/br_logo_brand_jordankids.png
  76. BIN
      src/main/webapp/images/pc/br_logo_brand_leviskids.png
  77. BIN
      src/main/webapp/images/pc/br_logo_brand_lpga.png
  78. BIN
      src/main/webapp/images/pc/br_logo_brand_moi.png
  79. BIN
      src/main/webapp/images/pc/br_logo_brand_nba.png
  80. BIN
      src/main/webapp/images/pc/br_logo_brand_nbakids.png
  81. BIN
      src/main/webapp/images/pc/br_logo_brand_nikekids.png
  82. BIN
      src/main/webapp/images/pc/br_logo_brand_pga.png
  83. BIN
      src/main/webapp/images/pc/br_logo_brand_tbj.png
  84. BIN
      src/main/webapp/images/pc/br_logo_buckaroo.png
  85. BIN
      src/main/webapp/images/pc/br_logo_buckaroo_bk.png
  86. BIN
      src/main/webapp/images/pc/br_logo_converse.png
  87. BIN
      src/main/webapp/images/pc/br_logo_conversekisds.png
  88. BIN
      src/main/webapp/images/pc/br_logo_conversekisds_bk.png
  89. BIN
      src/main/webapp/images/pc/br_logo_curlysu.png
  90. BIN
      src/main/webapp/images/pc/br_logo_curlysue.png
  91. BIN
      src/main/webapp/images/pc/br_logo_curlysue_bk.png
  92. BIN
      src/main/webapp/images/pc/br_logo_frj.png
  93. BIN
      src/main/webapp/images/pc/br_logo_frj_bk.png
  94. BIN
      src/main/webapp/images/pc/br_logo_hurley.png
  95. BIN
      src/main/webapp/images/pc/br_logo_hurley_bk.png
  96. BIN
      src/main/webapp/images/pc/br_logo_jordan.png
  97. BIN
      src/main/webapp/images/pc/br_logo_jordan_bk.png
  98. BIN
      src/main/webapp/images/pc/br_logo_levis.png
  99. BIN
      src/main/webapp/images/pc/br_logo_levis_bk.png
  100. BIN
      src/main/webapp/images/pc/br_logo_lpga.png

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

@@ -1,7 +1,6 @@
 package com.style24.front.biz.dao;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;

+ 7 - 6
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -611,15 +611,15 @@ public class TsfCartService {
 						leftAmt -= (int)tempDcAmt;
 						resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
 						
-						resultAmt.setTmtb1DcAmt(tempAmt - resultAmt.getTmtbDcAmt()); // tmtb1 할인금액
+						resultAmt.setTmtb1DcAmt((int)tempDcAmt); // tmtb1 할인금액
 					}
 				} else {                                                                // 할인 방식 할인율일 경우
 					tempAmt = resultAmt.getCurrPrice();
-					
 					tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getQtyDcVal() / 100.0)));
 					resultAmt.setTmtbDcAmt(tempAmt);
 					
-					resultAmt.setTmtb1DcAmt((int) (tempAmt * (resultAmt.getQtyDcVal() / 100.0))); // tmtb1 할인금액
+					// 2021.04.29 다다익선할인금액수정
+					resultAmt.setTmtb1DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getQtyDcVal() / 100.0))); // tmtb1 할인금액
 				}
 			}
 
@@ -661,14 +661,15 @@ public class TsfCartService {
 						leftAmt -= (int)tempDcAmt;
 						resultAmt.setTmtbDcAmt(tempAmt - (int)tempDcAmt);
 						
-						resultAmt.setTmtb2DcAmt(tempAmt - resultAmt.getTmtbDcAmt()); // tmtb1 할인금액
+						resultAmt.setTmtb2DcAmt((int)tempDcAmt); // tmtb1 할인금액
 					}
 				} else {                                                                // 할인 방식 할인율일 경우
 					tempAmt = resultAmt.getCurrPrice();
 					tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getAmtDcVal() / 100.0)));
 					resultAmt.setTmtbDcAmt(tempAmt);
 					
-					resultAmt.setTmtb2DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getAmtDcVal() / 100.0))); // tmtb1 할인금액
+					// 2021.04.29 다다익선할인금액수정
+					resultAmt.setTmtb2DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getAmtDcVal() / 100.0))); // tmtb2 할인금액
 				}
 			}
 		}
@@ -1122,7 +1123,7 @@ public class TsfCartService {
 				} else {
 					sb.append(param.getCustNo());
 				}
-				sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCds()[i]).append("' \n AND CD.OPT_CD = '").append(param.getOptCds()[i]).append("'");
+				sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCds()[i]).append("' \n AND CD.OPT_CD = '").append(param.getOptCds()[i]).append("' AND C.CART_GB = 'G026_BC' ");
 				if (i < param.getCartDtlSqArr().length - 1) {
 					sb.append("\n UNION ALL \n");
 				}

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

@@ -7,7 +7,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
-import com.gagaframework.web.util.GagaDateUtil;
+
 import com.style24.persistence.domain.CustGrade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -284,6 +284,7 @@ public class TsfCustomerService {
 	 * @author jsshin
 	 * @since 2021. 02. 19
 	 */
+	@Transactional("shopTxnManager")
 	public boolean saveJoinCustomerSns (Customer customer) {
 		boolean isJoin = true;
 		String snsId = customer.getSnsType().equals(TscConstants.SnsType.YES24.value()) ? customer.getMemNo() : customer.getSnsId();

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

@@ -1,10 +1,8 @@
 package com.style24.front.biz.service;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
-import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -89,6 +87,7 @@ public class TsfOrderChangeService {
 		GagaMap map = new GagaMap();
 		Collection<Order> result = new ArrayList<>();
 		List<Integer> ordDtlNoList = new ArrayList<>();
+		String returnAbleYn = "Y";
 
 		for (Order tmpOrder : orderChangeDao.getReturnListForMypage(order)) {
 			// 세트상품 옵션별 배열로 담기
@@ -107,6 +106,11 @@ public class TsfOrderChangeService {
 
 			ordDtlNoList.add(tmpOrder.getOrdDtlNo());
 			result.add(tmpOrder);
+			
+			if ("Y".equals(returnAbleYn)
+				&& (!TscConstants.OrderChangeStat.RETURN.value().equals(tmpOrder.getChgStat()) || !TscConstants.OrderChangeStat.RETURN_WAIT.value().equals(tmpOrder.getChgStat()))) {
+				returnAbleYn = "N";
+			}
 		}
 
 		Order oneData = result.iterator().next();
@@ -114,6 +118,7 @@ public class TsfOrderChangeService {
 
 		map.set("oneData", oneData);
 		map.set("returnList", result);
+		map.set("returnAbleYn", returnAbleYn);
 
 		return map;
 	}

+ 16 - 9
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -1,7 +1,6 @@
 package com.style24.front.biz.service;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
@@ -19,7 +18,6 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 import com.gagaframework.web.parameter.GagaMap;
 import com.kcp.J_PP_CLI_N;
 import com.style24.core.biz.dao.TscOrderDao;
-import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscNaverPayService;
@@ -28,7 +26,6 @@ import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.front.biz.dao.TsfRendererDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
-import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.KakaoPay;
@@ -88,6 +85,7 @@ public class TsfOrderService {
 		Collection<GagaMap> orderList = new ArrayList<>();
 		Collection<Order> ordDtlList = new ArrayList<>();
 		String allCanYn = "Y";
+		String allDecideYn = "Y";
 		int ordNo = 0;
 		int index = 0;
 		int ordReqChgQty = 0;
@@ -109,11 +107,12 @@ public class TsfOrderService {
 
 			// 주문 목록 데이터 설정
 			if (index > 0 && ordNo != tmpOrder.getOrdNo()) {
-				orderList.add(setOrderMap(ordDtlList, allCanYn, ordReqChgQty));
+				orderList.add(setOrderMap(ordDtlList, allCanYn, allDecideYn, ordReqChgQty));
 
 				ordDtlList = new ArrayList<>();
 				ordDtlList.add(tmpOrder);
 				allCanYn = "Y";
+				allDecideYn = "Y";
 				ordReqChgQty = 0;
 			} else {
 				ordDtlList.add(tmpOrder);
@@ -123,24 +122,31 @@ public class TsfOrderService {
 			ordReqChgQty += tmpOrder.getOrdReqChgQty();
 
 			if ("Y".equals(allCanYn)
-				&& !tmpOrder.getOrdDtlStat().equals(TscConstants.OrderDetailStat.DEPOSIT_WAIT.value())
-				&& !tmpOrder.getOrdDtlStat().equals(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value())
-				&& !tmpOrder.getOrdDtlStat().equals(TscConstants.OrderDetailStat.GOODS_PREPARE.value())) {
+				&& !TscConstants.OrderDetailStat.DEPOSIT_WAIT.value().equals(tmpOrder.getOrdDtlStat())
+				&& !TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value().equals(tmpOrder.getOrdDtlStat())
+				&& !TscConstants.OrderDetailStat.GOODS_PREPARE.value().equals(tmpOrder.getOrdDtlStat())) {
 				allCanYn = "N";
 			}
 
+			// 전체 구매확정 가능 여부 설정
+			if ("Y".equals(allDecideYn)
+				&& !TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value().equals(tmpOrder.getOrdDtlStat())
+				&& !TscConstants.OrderDetailStat.PURCHASE_CONFIRM.value().equals(tmpOrder.getOrdDtlStat())) {
+				allDecideYn = "N";
+			}
+
 			ordNo = tmpOrder.getOrdNo();
 			index++;
 		}
 
 		if (ordDtlList.size() > 0) {
-			orderList.add(setOrderMap(ordDtlList, allCanYn, ordReqChgQty));
+			orderList.add(setOrderMap(ordDtlList, allCanYn, allDecideYn, ordReqChgQty));
 		}
 		
 		return orderList;
 	}
 	
-	private GagaMap setOrderMap(Collection<Order> ordDtlList, String allCanYn, int ordReqChgQty) {
+	private GagaMap setOrderMap(Collection<Order> ordDtlList, String allCanYn, String allDecideYn, int ordReqChgQty) {
 		Order order = ordDtlList.iterator().next();
 
 		GagaMap map = new GagaMap();
@@ -149,6 +155,7 @@ public class TsfOrderService {
 		map.set("ordDt", order.getOrdDt());
 		map.set("freeGiftList", orderDao.getOrderFreeGiftListForMypage(order));
 		map.set("allCanYn", allCanYn);
+		map.set("allDecideYn", allDecideYn);
 		map.set("ordReqChgQty", ordReqChgQty);
 		map.set("oneData", order);
 		map.set("ordDtlList", ordDtlList);

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

@@ -4,14 +4,11 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
 import com.style24.front.biz.thirdparty.Yes24Login;
-import com.style24.front.support.env.TsfConstants;
 import com.style24.persistence.domain.CustSnsInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpRequest;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -96,7 +93,7 @@ public class TsfCustomerController extends TsfBaseController {
 		boolean isFind = false;
 
 		if (StringUtils.isBlank(customer.getAuthMethod())) {
-			throw new IllegalStateException("인증방법이 없습니다. <br>관리자에게 문의하시기 바랍니다.");
+			throw new IllegalStateException(message.getMessage("CUST_0005"));
 		}
 
 		Customer params = new Customer();
@@ -165,7 +162,7 @@ public class TsfCustomerController extends TsfBaseController {
 		boolean isFind = false;
 
 		if (StringUtils.isBlank(customer.getAuthMethod())) {
-			throw new IllegalStateException("인증방법이 없습니다. <br>관리자에게 문의하시기 바랍니다.");
+			throw new IllegalStateException(message.getMessage("CUST_0005"));
 		}
 
 		// 고객정보 찾기 - 아이디, 이름, 이메일
@@ -210,7 +207,7 @@ public class TsfCustomerController extends TsfBaseController {
 		boolean isFind = false;
 
 		if (StringUtils.isBlank(customer.getAuthMethod())) {
-			throw new IllegalStateException("인증방법이 없습니다. <br>관리자에게 문의하시기 바랍니다.");
+			throw new IllegalStateException(message.getMessage("CUST_0005"));
 		}
 
 		Customer params = new Customer();
@@ -875,8 +872,7 @@ public class TsfCustomerController extends TsfBaseController {
 
 		mav.addObject("custNm", customer.getCustNm());
 
-//		mav.setViewName(super.getDeviceViewName("customer/ConsentUseInfoForm"));
-		mav.setViewName("web/customer/ConsentUseInfoFormWeb");
+		mav.setViewName(super.getDeviceViewName("customer/ConsentUseInfoForm"));
 
 		return mav;
 	}

+ 6 - 1
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -729,7 +729,12 @@ public class TsfDisplayController extends TsfBaseController {
 	@ResponseBody
 	public Collection<Contents> getGnbTabBannerlist(Contents contents) {
 //		contents.setContentsLoc("STAB003");
-		contents.setContentsLoc("SCM005");
+		if(contents.getCateNo().equals(3000)){
+			contents.setContentsLoc("SOM005");
+		}else{
+			contents.setContentsLoc("SCM005");
+		}
+
 		return displayService.getGnbTabBannerlist(contents);
 	}
 

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

@@ -192,6 +192,10 @@ public class TsfMypageController extends TsfBaseController {
 		} else {
 			mav.addObject("mypageMainYn", "N");
 		}
+		
+		// 2021.04.30 모바일 추가
+		String custGradeNm1Str = coreCustomerService.getCustomerInfo(customer).getCustGradeNm().substring(0,1);
+		mav.addObject("custGradeNm1Str", custGradeNm1Str);
 
 		// 주문상세상태코드 설정
 		mav.addObject("ordDtlStatList", rendererService.getCommonCodeList("G013", "Y", new String[] {"G013_10", "G013_11", "G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
@@ -246,6 +250,7 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("orderList", orderList);
 		mav.addObject("oneData", orderList.iterator().next().get("oneData"));
 		mav.addObject("allCanYn", orderList.iterator().next().get("allCanYn"));
+		mav.addObject("allDecideYn", orderList.iterator().next().get("allDecideYn"));
 
 		// 주문정보 조회
 		mav.addObject("orderInfo", coreOrderService.getOrderInfoList(order).iterator().next());
@@ -288,7 +293,6 @@ public class TsfMypageController extends TsfBaseController {
 
 		// 페이징 처리 설정
 		order.setCustNo(custNo);
-		log.info("order >>> {}", order);
 		TscPageRequest pageable = new TscPageRequest((order.getPageNo() > 0 ? order.getPageNo() - 1 : 0), order.getPageSize(), order.getPageUnit());
 		pageable.setTotalCount(orderService.getPagingOrdNoListCount(order));
 		order.setPageable(pageable);
@@ -404,6 +408,7 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("isLogin", TsfSession.isLogin());
 
 		// 교환 가능 리스트 조회
+		order.setChgGb(TscConstants.OrderChangeGb.EXCHANGE.value());
 		GagaMap map = orderChangeService.getReturnListForMypage(order);
 		Order oneData = (Order)map.get("oneData");
 		mav.addObject("exchangeList", map);
@@ -643,6 +648,7 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("isLogin", TsfSession.isLogin());
 
 		// 반품 가능 리스트 조회
+		order.setChgGb(TscConstants.OrderChangeGb.RETURN.value());
 		GagaMap map = orderChangeService.getReturnListForMypage(order);
 		Order oneData = (Order)map.get("oneData");
 		mav.addObject("returnList", map);
@@ -1563,8 +1569,6 @@ public class TsfMypageController extends TsfBaseController {
 		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
 		pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
 		review.setPageable(pageable);
-		log.info("pageable: {}", pageable);
-		log.info("totalCount {}", pageable.getTotalCount());
 		
 		result.set("paging1", review);
 		
@@ -1699,6 +1703,30 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 	
+	/**
+	 * 상품상세 -  상품평 상세 레이어
+	 * @return
+	 * @author sowon
+	 * @since 2021. 5. 3
+	 */
+	@PostMapping("/review/detail/layer")
+	public ModelAndView mypageReviewDetailForm(Review review) {
+		ModelAndView mav = new ModelAndView();
+		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
+		Goods paramsGoods = new Goods();
+		paramsGoods.setGoodsCd(review.getGoodsCd());
+
+		// 상품 기본정보
+		mav.addObject("params", paramsGoods);
+
+		mav.addObject("review", review);
+
+		mav.addObject("reviewList", reviewService.getReviewList(review));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewDetailForm"));
+		return mav;
+	}
+	
 	/**
 	 * 마이페이지 어드민 댓글 확인
 	 *

+ 199 - 264
src/main/java/com/style24/front/biz/web/TsfNoMemberController.java

@@ -6,7 +6,6 @@ import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -33,7 +32,6 @@ import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.Cart;
-import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 
@@ -423,12 +421,12 @@ public class TsfNoMemberController extends TsfBaseController {
 	}
 
 	/**
-	 * 마이페이지 취소신청
+	 * 비회원 취소신청
 	 *
 	 * @param Collection<Order>
 	 * @return GagaMap
 	 * @author card007
-	 * @since 2021. 03. 22
+	 * @since 2021. 04. 28
 	 */
 	@SuppressWarnings("unchecked")
 	@PostMapping("/cancel")
@@ -457,7 +455,7 @@ public class TsfNoMemberController extends TsfBaseController {
 	 * @param Cart
 	 * @return Collecion<Cart>
 	 * @author card007
-	 * @since 2021. 03. 26
+	 * @since 2021. 04. 28
 	 */
 	@PostMapping("/cart/add/info")
 	@ResponseBody
@@ -465,191 +463,13 @@ public class TsfNoMemberController extends TsfBaseController {
 		return cartService.getAddCartInfoForMypage(cart);
 	}
 
-	// ==================================    아직 처리 안함    =====================================
-	/**
-	 * 마이페이지 교환신청 화면
-	 *
-	 * @param Order
-	 * @return ModelAndView
-	 * @author card007
-	 * @since 2021. 02. 22
-	 */
-	@PostMapping("/exchange/form")
-	@ResponseBody
-	public ModelAndView exchangeForm(Order order) {
-		ModelAndView mav = new ModelAndView();
-
-		// 주문번호 설정
-		mav.addObject("ordNo", order.getOrdNo());
-
-		// 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		order.setCustNo(custNo);
-		mav.addObject("custNo", custNo);
-
-		// 고객정보 조회
-		Customer customer = new Customer();
-		customer.setSiteCd(TscConstants.Site.STYLE24.value());
-		customer.setCustNo(custNo);
-		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
-		customer = coreCustomerService.getCustomerInfo(customer);
-
-		mav.addObject("customerInfo", customer);
-
-		// 로그인여부 설정
-		mav.addObject("isLogin", TsfSession.isLogin());
-
-		// 교환 가능 리스트 조회
-		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));
-
-		// 교환 사유 목록 조회
-		mav.addObject("exchangeReason", rendererService.getCommonCodeList("G689", "Y"));
-
-		mav.setViewName(super.getDeviceViewName("/mypage/MypageExchangeForm"));
-
-		return mav;
-	}
-
-	/**
-	 * 마이페이지 교환 옵션 변경 팝업
-	 *
-	 * @param Order
-	 * @return ModelAndView
-	 * @author card007
-	 * @since 2021. 03. 30
-	 */
-	@PostMapping("/change/option/popup/form")
-	@ResponseBody
-	public ModelAndView changeOptionPopupForm(OrderChange orderChange) {
-		ModelAndView mav = new ModelAndView();
-
-		// custNo 설정
-		if (TsfSession.isLogin()) {
-			orderChange.setCustNo(TsfSession.getInfo().getCustNo());
-		} else {
-			orderChange.setCustNo(0);
-		}
-
-		// 교환 옵션 정보 조회
-		Collection<OrderChange> exchangeOptionInfo = orderChangeService.getExchangeOptionInfo(orderChange);
-		mav.addObject("exchangeOptionInfo", exchangeOptionInfo);
-		mav.addObject("oneData", exchangeOptionInfo.iterator().next());
-		mav.addObject("ordDtlNo", orderChange.getOrdDtlNo());
-		mav.addObject("chgQty", orderChange.getChgQty());
-
-		mav.setViewName(super.getDeviceViewName("mypage/ChangeOptionPopupForm"));
-
-		return mav;
-	}
-
-	/**
-	 * 교환신청
-	 *
-	 * @param OrderChange
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 04. 06
-	 */
-	@SuppressWarnings("unchecked")
-	@PostMapping("/exchange")
-	@ResponseBody
-	public GagaMap excReq(@RequestBody OrderChange orderChange) {
-		GagaMap result = new GagaMap();
-
-		// 교환요청 데이터 확인
-		if (orderChange == null) {
-			result.set("status", GagaResponseStatus.FAIL.getCode());
-			result.set("message", message.getMessage("FAIL_1001"));
-			return result;
-		}
-
-		// 세션 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		orderChange.setUpdNo(custNo);
-		orderChange.setRegNo(custNo);
-
-		// 교환처리
-		result = coreOrderChangeService.exchReq(orderChange);
-
-		// 처리 결과 코드에 따른 메세지 설정
-		if (result.get("status").equals(GagaResponseStatus.SUCCESS.getCode())) {
-			if (orderChange.getAddPayCost() == 0) {
-				result.set("message", message.getMessage("EXCHANGE_0001"));
-			}
-		} else {
-			result.set("message", message.getMessage("FAIL_0004"));
-		}
-
-		return result;
-	}
-
-	/**
-	 * 교환요청철회
-	 *
-	 * @param OrderChange
-	 * @return GagaResponse
-	 * @author card007
-	 * @since 2021. 04. 20
-	 */
-	@PostMapping("/exchange/cancel")
-	@ResponseBody
-	public GagaResponse exchangeRequestCancel(@RequestBody OrderChange orderChange) {
-
-		if (orderChange== null) {
-			throw new IllegalStateException(message.getMessage("FAIL_1001"));
-		}
-
-		// 1. 교환요청철회 정보 설정
-		int custNo = TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0;
-		orderChange.setCustNo(custNo);
-		orderChange.setRegNo(custNo);
-		orderChange.setUpdNo(custNo);
-
-		String ipAddress = TsfSession.getIpAddress();
-		orderChange.setIpAddress(ipAddress);
-
-		// 2.교환요청철회 
-		coreOrderChangeService.exchangeCancel(orderChange);
-
-		return super.ok(message.getMessage("EXCHANGE_0002"));
-		// return super.ok();
-	}
-
-	/**
-	 * 마이페이지 상태별 수량 조회
-	 *
-	 * @return
-	 * @author card007
-	 * @since 2021. 02. 25
-	 */
-	@PostMapping("/status/count")
-	@ResponseBody
-	public GagaMap fnReloadStatusCount() {
-		GagaMap result = new GagaMap();
-
-		// 쿠폰정보 조회
-		Order order = new Order();
-		order.setCustNo(TsfSession.getInfo().getCustNo());
-		result.set("orderCount", coreOrderService.getOrderStatCount(order));
-
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
 	/**
-	 * 마이페이지 반품신청 화면
+	 * 비회원 반품신청 화면
 	 *
 	 * @param Order
 	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 02. 25
+	 * @since 2021. 05. 02
 	 */
 	@PostMapping("/return/form")
 	@ResponseBody
@@ -659,24 +479,11 @@ public class TsfNoMemberController extends TsfBaseController {
 		// 주문번호 설정
 		mav.addObject("ordNo", order.getOrdNo());
 
-		// 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		order.setCustNo(custNo);
-		mav.addObject("custNo", custNo);
-
-		// 고객정보 조회
-		Customer customer = new Customer();
-		customer.setSiteCd(TscConstants.Site.STYLE24.value());
-		customer.setCustNo(custNo);
-		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
-		customer = coreCustomerService.getCustomerInfo(customer);
-
-		mav.addObject("customerInfo", customer);
-
 		// 로그인여부 설정
-		mav.addObject("isLogin", TsfSession.isLogin());
+		mav.addObject("isLogin", false);
 
 		// 반품 가능 리스트 조회
+		order.setChgGb(TscConstants.OrderChangeGb.RETURN.value());
 		GagaMap map = orderChangeService.getReturnListForMypage(order);
 		Order oneData = (Order)map.get("oneData");
 		mav.addObject("returnList", map);
@@ -691,7 +498,7 @@ public class TsfNoMemberController extends TsfBaseController {
 		// 반품 사유 목록 조회
 		mav.addObject("returnReason", rendererService.getCommonCodeList("G688", "Y"));
 
-		mav.setViewName(super.getDeviceViewName("/mypage/MypageReturnForm"));
+		mav.setViewName(super.getDeviceViewName("/mypage/NoMemberReturnForm"));
 
 		return mav;
 	}
@@ -702,7 +509,7 @@ public class TsfNoMemberController extends TsfBaseController {
 	 * @param OrderChange
 	 * @return GagaMap
 	 * @author card007
-	 * @since 2021. 03. 30
+	 * @since 2021. 05. 02
 	 */
 	@SuppressWarnings("unchecked")
 	@PostMapping("/return")
@@ -716,23 +523,16 @@ public class TsfNoMemberController extends TsfBaseController {
 		// @ 주문취소시 상태값 체크
 		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
 
-		// 1. 세션회원조회
-		int custNo = TsfSession.getInfo().getCustNo();
-		orderChange.setCustNo(custNo);
-
 		// 2. 환불 사전 정보 조회
 		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(orderChange);
 		List<Order> returnReqList = (List<Order>)refundPreInfo.get("cnclReqList");
-		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
-		String supplyCompCd = refundPreInfo.getString("supplyCompCd");
 
 		// 3. 환불금액계산
 		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(returnReqList);
 
 		// 4. 주문변경 기본정보 설정
 		result.set("ordNo", orderChange.getOrdNo());					// 주문번호
-		result.setInt("custNo", custNo);								// 고객번호
-		// result.set("ordChgSq", orderChange.getOrdChgSq());			// 주문변경번호
+		result.setInt("custNo", 0);										// 고객번호
 		result.set("chgReason", orderChange.getChgReason());			// 변경사유
 		result.set("chgMemo", orderChange.getChgMemo());				// 변경메모
 
@@ -740,7 +540,6 @@ public class TsfNoMemberController extends TsfBaseController {
 		result.set("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
 		result.set("bankCd", orderChange.getBankCd());					// 환불계좌은행코드
 
-		result.setString("allLastCanYn", allLastCanYn);					// 전체 마지막 취소 여부
 		result.set("isCustomer", orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
 		result.set("wdGb", orderChange.getWdGb());						// 회수방법
 		result.set("wdInvoiceNo", orderChange.getWdInvoiceNo());		// 회수송장번호
@@ -757,7 +556,6 @@ public class TsfNoMemberController extends TsfBaseController {
 
 		// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
 		coreOrderChangeService.returnRequest(result);
-		// coreOrderChangeService.rtnReq(result, custNo);
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 		if (orderChange.getAddPayCost() == 0) {
@@ -773,7 +571,7 @@ public class TsfNoMemberController extends TsfBaseController {
 	 * @param OrderChange
 	 * @return GagaResponse
 	 * @author card007
-	 * @since 2021. 04. 20
+	 * @since 2021. 05. 02
 	 */
 	@PostMapping("/return/cancel")
 	@ResponseBody
@@ -804,7 +602,7 @@ public class TsfNoMemberController extends TsfBaseController {
 	 * @param OrderChange
 	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 04. 05
+	 * @since 2021. 05. 02
 	 */
 	@ResponseBody
 	@RequestMapping(value = "/refund/account/register/popup/form")
@@ -826,35 +624,191 @@ public class TsfNoMemberController extends TsfBaseController {
 	}
 
 	/**
-	 * 마이페이지 취반교 목록 화면
+	 * 비회원 교환신청 화면
 	 *
-	 * @return
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 05. 02
+	 */
+	@PostMapping("/exchange/form")
+	@ResponseBody
+	public ModelAndView exchangeForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		// 주문번호 설정
+		mav.addObject("ordNo", order.getOrdNo());
+
+		// 로그인여부 설정
+		mav.addObject("isLogin", false);
+
+		// 교환 가능 리스트 조회
+		order.setChgGb(TscConstants.OrderChangeGb.EXCHANGE.value());
+		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));
+
+		// 교환 사유 목록 조회
+		mav.addObject("exchangeReason", rendererService.getCommonCodeList("G689", "Y"));
+
+		mav.setViewName(super.getDeviceViewName("/mypage/NoMemberExchangeForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 비회원 교환 옵션 변경 팝업
+	 * 
+	 * @param Order
+	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 02. 04
+	 * @since 2021. 05. 02
 	 */
-	@GetMapping({"/cre/list/form"})
-	public ModelAndView mypageCreListForm() {
+	@PostMapping("/change/option/popup/form")
+	@ResponseBody
+	public ModelAndView changeOptionPopupForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
+		// 교환 옵션 정보 조회
+		Collection<OrderChange> exchangeOptionInfo = orderChangeService.getExchangeOptionInfo(orderChange);
+		mav.addObject("exchangeOptionInfo", exchangeOptionInfo);
+		mav.addObject("oneData", exchangeOptionInfo.iterator().next());
+		mav.addObject("ordDtlNo", orderChange.getOrdDtlNo());
+		mav.addObject("chgQty", orderChange.getChgQty());
+
+		mav.setViewName(super.getDeviceViewName("mypage/ChangeOptionPopupForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 교환신청
+	 *
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 05. 02
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/exchange")
+	@ResponseBody
+	public GagaMap excReq(@RequestBody OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+
+		// 교환요청 데이터 확인
+		if (orderChange == null) {
+			result.set("status", GagaResponseStatus.FAIL.getCode());
+			result.set("message", message.getMessage("FAIL_1001"));
+			return result;
+		}
+
 		// 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		mav.addObject("custNo", custNo);
+		orderChange.setUpdNo(0);
+		orderChange.setRegNo(0);
+
+		// 교환처리
+		result = coreOrderChangeService.exchReq(orderChange);
+
+		// 처리 결과 코드에 따른 메세지 설정
+		if (result.get("status").equals(GagaResponseStatus.SUCCESS.getCode())) {
+			if (orderChange.getAddPayCost() == 0) {
+				result.set("message", message.getMessage("EXCHANGE_0001"));
+			}
+		} else {
+			result.set("message", message.getMessage("FAIL_0004"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * 교환요청철회
+	 *
+	 * @param OrderChange
+	 * @return GagaResponse
+	 * @author card007
+	 * @since 2021. 04. 20
+	 */
+	@PostMapping("/exchange/cancel")
+	@ResponseBody
+	public GagaResponse exchangeRequestCancel(@RequestBody OrderChange orderChange) {
+
+		if (orderChange== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// 1. 교환요청철회 정보 설정
+		orderChange.setCustNo(0);
+		orderChange.setRegNo(0);
+		orderChange.setUpdNo(0);
+
+		String ipAddress = TsfSession.getIpAddress();
+		orderChange.setIpAddress(ipAddress);
+
+		// 2.교환요청철회 
+		coreOrderChangeService.exchangeCancel(orderChange);
+
+		return super.ok(message.getMessage("EXCHANGE_0002"));
+		// return super.ok();
+	}
+
+	/**
+	 * 비회원 상태별 수량 조회
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 05. 02
+	 */
+	@PostMapping("/status/count")
+	@ResponseBody
+	public GagaMap fnReloadStatusCount(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+
+		// 상태별 수량 조회
+		result.set("orderCount", coreOrderService.getOrderStatCount(order));
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+		return result;
+	}
+
+	/**
+	 * 비회원 취반교 목록 화면
+	 * 
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 05. 02
+	 */
+	@PostMapping("/cre/list/form")
+	public ModelAndView mypageCreListForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		// 주문 정보 설정
+		mav.addObject("ordNo", order.getOrdNo());
+		mav.addObject("ordNm", order.getOrdNm());
+		mav.addObject("ordPhnno", order.getOrdPhnno());
 
 		// 주문 상태 별 수량 조회
-		Order order = new Order();
-		order.setCustNo(custNo);
 		mav.addObject("orderCount", coreOrderService.getOrderStatCount(order));
 
 		// 2021.04.21 모바일에서 사용하려고 추가
 		OrderChange orderChange = new OrderChange();
-		orderChange.setCustNo(custNo);
+		orderChange.setOrdNo(order.getOrdNo());
+		orderChange.setOrdNm(order.getOrdNm());
+		orderChange.setOrdPhnno(order.getOrdPhnno());
 		int totalCnt = orderChangeService.getPagingCreListCount(orderChange);
 		mav.addObject("totalCnt", totalCnt);
 
 		// 주문상세상태코드 설정
 		mav.addObject("chgStatList", rendererService.getCommonCodeList("G685", "Y", new String[] {"G685_10", "G685_11", "G685_19"}));
 
-		mav.setViewName(super.getDeviceViewName("mypage/MypageCreListForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/NoMemberCreListForm"));
 
 		return mav;
 	}
@@ -865,21 +819,14 @@ public class TsfNoMemberController extends TsfBaseController {
 	 * @param OrderChange
 	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 02. 18
+	 * @since 2021. 05. 02
 	 */
 	@PostMapping("/cre/list")
 	@ResponseBody
 	public GagaMap getCreList(@RequestBody OrderChange orderChange) {
 		GagaMap map = new GagaMap();
 
-		// 고객번호 설정
-		int custNo = 0;
-		if(TsfSession.isLogin()) {
-			custNo = TsfSession.getInfo().getCustNo();
-		}
-
 		// 페이징 처리 설정
-		orderChange.setCustNo(custNo);
 		TscPageRequest pageable = new TscPageRequest((orderChange.getPageNo() > 0 ? orderChange.getPageNo() - 1 : 0), orderChange.getPageSize(), orderChange.getPageUnit());
 		pageable.setTotalCount(orderChangeService.getPagingCreListCount(orderChange));
 		orderChange.setPageable(pageable);
@@ -903,21 +850,17 @@ public class TsfNoMemberController extends TsfBaseController {
 
 	/**
 	 * 마이페이지 취반교 취소 상세 화면
-	 *
+	 * 
+	 * @param OrderChange
 	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 04. 12
+	 * @since 2021. 05. 02
 	 */
-	@PostMapping({"/cre/cancel/detail/form"})
+	@PostMapping("/cre/cancel/detail/form")
 	public ModelAndView mypageCreCancelDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
-		// 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		mav.addObject("custNo", custNo);
-
 		// 취소상세 데이터 조회
-		orderChange.setCustNo(custNo);
 		GagaMap map = orderChangeService.getCreCancelDetailInfo(orderChange);
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("cancelDetailList", map);
@@ -929,31 +872,27 @@ public class TsfNoMemberController extends TsfBaseController {
 		order.setOrdNo(orderChange.getOrdNo());
 		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
 
-		mav.setViewName(super.getDeviceViewName("mypage/MypageCreCancelDetailForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/NoMemberCreCancelDetailForm"));
 
 		return mav;
 	}
 
 	/**
 	 * 마이페이지 취반교 반품 상세 화면
-	 *
+	 * 
+	 * @param OrderChange
 	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 04. 13
+	 * @since 2021. 05. 02
 	 */
-	@PostMapping({"/cre/return/detail/form"})
+	@PostMapping("/cre/return/detail/form")
 	public ModelAndView mypageCreReturnDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
-		// 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		mav.addObject("custNo", custNo);
-
 		// 로그인여부 설정
-		mav.addObject("isLogin", TsfSession.isLogin());
+		mav.addObject("isLogin", false);
 
 		// 취소상세 데이터 조회
-		orderChange.setCustNo(custNo);
 		GagaMap map = orderChangeService.getCreReturnDetailInfo(orderChange);
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("returnDetailList", map);
@@ -964,37 +903,33 @@ public class TsfNoMemberController extends TsfBaseController {
 		order.setOrdNo(orderChange.getOrdNo());
 		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
 
-		mav.setViewName(super.getDeviceViewName("mypage/MypageCreReturnDetailForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/NoMemberCreReturnDetailForm"));
 
 		return mav;
 	}
 
 	/**
 	 * 마이페이지 취반교 교환 상세 화면
-	 *
+	 * 
+	 * @param OrderChange
 	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 04. 13
+	 * @since 2021. 05. 02
 	 */
-	@PostMapping({"/cre/exchange/detail/form"})
+	@PostMapping("/cre/exchange/detail/form")
 	public ModelAndView mypageCreExchangeDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
-		// 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		mav.addObject("custNo", custNo);
-
 		// 로그인여부 설정
-		mav.addObject("isLogin", TsfSession.isLogin());
+		mav.addObject("isLogin", false);
 
 		// 취소상세 데이터 조회
-		orderChange.setCustNo(custNo);
 		GagaMap map = orderChangeService.getCreExchangeDetailInfo(orderChange);
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("exchangeDetailList", map);
 		mav.addObject("oneData", oneData);
 
-		mav.setViewName(super.getDeviceViewName("mypage/MypageCreExchangeDetailForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/NoMemberCreExchangeDetailForm"));
 
 		return mav;
 	}
@@ -1002,8 +937,8 @@ public class TsfNoMemberController extends TsfBaseController {
 	/**
 	 * WMS 주문 취소 가능 여부 조회
 	 *
-	 * @param
-	 * @return
+	 * @param OrderChange
+	 * @return GagaMap
 	 * @author card007
 	 * @since 2021. 04. 22
 	 */

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

@@ -247,7 +247,8 @@ public class TsfOrderController extends TsfBaseController {
 
 		// 4.2 할인정보(상품금액, 즉시할인, 다다익선, 선포인트, 적립예정포인트) 
 		mav.addObject("listSumAmt"			, goodsDcAmtMap.get("listSumAmt"));			// 상품금액합계(정상가)
-		mav.addObject("orgGoodsSumAmt"		, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
+		mav.addObject("orgGoodsSumAmt"		, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계(판매가)
+		mav.addObject("goodsDcSumAmt"		, goodsDcAmtMap.get("goodsDcSumAmt"));		// 상품할인금액(정상가-판매가)
 		mav.addObject("cpn1DcSumAmt"		, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
 		mav.addObject("tmtbDcSumAmt"		, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
 		mav.addObject("prePntDcAmt"			, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
@@ -404,6 +405,11 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("deliveryAddrInfo"	, deliveryAddrInfo);						// 배송지정보
 		mav.addObject("order"				, order);									// 파라미터
 		mav.addObject("isLogin"				, TsfSession.isLogin());					// 로그인여부
+
+		// 2021.04.29 해외구매대행, 주문제작
+		mav.addObject("foreignBuyYn"		, order.getForeignBuyYn());					// 해외구매대행여부
+		mav.addObject("orderMadeYn"			, order.getOrderMadeYn());					// 주문제작여부
+				
 		mav.setViewName(super.getDeviceViewName("order/OrderDeliveryAddrInfo"));
 		
 		return mav;
@@ -507,6 +513,7 @@ public class TsfOrderController extends TsfBaseController {
 		
 		// 4.2 할인정보(상품금액, 즉시할인, 다다익선, 선포인트, 적립예정포인트) 
 		mav.addObject("orgGoodsSumAmt"		, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
+		mav.addObject("goodsDcSumAmt"		, goodsDcAmtMap.get("goodsDcSumAmt"));		// 상품할인금액(정상가-판매가)
 		mav.addObject("cpn1DcSumAmt"		, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
 		mav.addObject("tmtbDcSumAmt"		, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
 		mav.addObject("prePntDcAmt"			, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
@@ -626,8 +633,12 @@ public class TsfOrderController extends TsfBaseController {
 			
 			// 2.10 고객 보유 상품권 정보 조회
 			rmGfcdAmt = coreOrderService.getGiftcardInfo(order);
-		} 
-
+		}
+		
+		// 2021.04.29 포인트사용정보조회
+		Order pointUseEnvset = coreOrderService.getPointUseEnvset();
+		
+		// 주문시포인트설정정보조회
 		ModelAndView mav = new ModelAndView();
 		mav.addObject("goodsApplyCpnList"				, goodsApplyCpnList);						// 상품적용쿠폰
 		mav.addObject("cartCpnList"						, cartCpnList);								// 장바구니쿠폰목록
@@ -643,6 +654,7 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("savePntSumAmt"					, goodsDcAmtMap.get("savePntSumAmt"));		// 적립예정포인트합계
 		mav.addObject("order"							, order);									// 파라미터
 		mav.addObject("isLogin"							, TsfSession.isLogin());					// 로그인여부
+		mav.addObject("pointUseEnvset"					, pointUseEnvset);							// 포인트사용정보조회
 		
 		mav.setViewName(super.getDeviceViewName("order/OrderDcAmtInfo"));
 		
@@ -880,6 +892,7 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("realOrdSumAmt"		, realOrdSumAmt);						// 결제금액합계
 		mav.addObject("listSumAmt"			, resultMap.get("listSumAmt"));			// 상품금액합계(정상가)
 		mav.addObject("goodsSumAmt"			, resultMap.get("goodsSumAmt"));		// 상품금액합계(판매가)
+		mav.addObject("goodsDcSumAmt"		, resultMap.get("goodsDcSumAmt"));		// 상품금액합계(정상가 - 판매가)
 		mav.addObject("delvFeeSumAmt"		, resultMap.get("delvFeeSumAmt"));		// 배송비합계
 		mav.addObject("cpn1DcSumAmt"		, resultMap.get("cpn1DcSumAmt"));		// 즉시할인합계
 		mav.addObject("tmtbSumAmt"			, resultMap.get("tmtbSumAmt"));			// 다다익선합계

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

@@ -1500,7 +1500,15 @@
 	<!-- GNB TAB 기획전배너 조회 -->
 	<select id="getGnbTabBannerList" parameterType="Contents" resultType="Contents">
 		/* TsfDisplay.getGnbTabBannerList */
-		SELECT (SELECT CONTENTS_TITLE FROM TB_MAIN_LAYOUT WHERE 1=1 AND CATE_NO = #{cateNo} AND CONTENTS_LOC = #{contentsLoc}) AS GNB_TAB_TITLE
+		SELECT
+		       <choose>
+				   <when test="contentsLoc != null and contentsLoc =='SOM005'">
+					   (SELECT CONTENTS_TITLE FROM TB_MAIN_LAYOUT WHERE 1=1 AND CATE_NO = 1713 AND CONTENTS_LOC = #{contentsLoc}) AS GNB_TAB_TITLE
+				   </when>
+				   <otherwise>
+					   (SELECT CONTENTS_TITLE FROM TB_MAIN_LAYOUT WHERE 1=1 AND CATE_NO = #{cateNo} AND CONTENTS_LOC = #{contentsLoc}) AS GNB_TAB_TITLE
+				   </otherwise>
+			   </choose>
 		      , Z.BANNER_GB
 		      , Z.IMG_PATH1
 		      , Z.STR_VAR1
@@ -1517,6 +1525,8 @@
 		            AND     CATE_NO = #{cateNo}
 		            AND     CONTENTS_LOC = #{contentsLoc}
 		            AND     USE_YN = 'Y'
+		            AND    DISP_STDT <![CDATA[<=]]> NOW()
+		            AND    DISP_EDDT <![CDATA[>=]]> NOW()
 		            UNION ALL
 		            SELECT  'PLAN' AS BANNER_GB
 		                  , A.MAIN_PIMG AS IMG_PATH1
@@ -1529,6 +1539,8 @@
 		              AND  B.CATE_NO = #{cateNo}
 		              AND  A.OPEN_YN = 'Y'
 		              AND  B.DISP_YN = 'Y'
+		              AND  A.DISP_STDT <![CDATA[<=]]> NOW()
+		              AND  A.DISP_EDDT <![CDATA[>=]]> NOW()
 		        ) Z
 		LIMIT 2
 	</select>

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

@@ -297,6 +297,14 @@
 		<if test="delvFeeCd != null and delvFeeCd != ''">
 		           AND OD.DELV_FEE_CD = #{delvFeeCd}
 		</if>
+		<choose>
+			<when test="chgGb == 'G680_30'">
+		           AND OD.RETURNABLE_YN = 'Y'
+			</when>
+			<when test="chgGb == 'G680_40'">
+		           AND OD.CHANGEABLE_YN = 'Y'
+			</when>
+		</choose>
 		       ) Z
 		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.ORD_NM, Z.ORD_PHNNO, Z.GIFT_ADDR_INP_YN, Z.ORD_DTL_NO, Z.ORD_EXCH_GB, 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
@@ -376,7 +384,7 @@
 					 , ODI.ITEM_CD
 					 , ODI.OPT_CD1
 					 , ODI.OPT_CD2
-					 , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS COLOR_NM
+					 , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 					 , OD.GOODS_TYPE
 		             , G1.SELF_GOODS_YN
 					 , G2.GOODS_NM AS ITEM_NM
@@ -512,15 +520,15 @@
 		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN TB_REFUND R
 		            ON R.ORD_CHG_SQ = OC.ORD_CHG_SQ
-		         WHERE OCD.DEL_YN = 'N'
-		           AND O.DISP_YN = 'Y'
+		         WHERE O.DISP_YN = 'Y'
 		<choose>
-			<when test="custNo != null and custNo != ''">
+			<when test="custNo > 0">
 		           AND O.CUST_NO = #{custNo}
 			</when>
 			<otherwise>
 		           AND O.ORD_NO = #{ordNo}
-		           AND O.ORD_NM = #{orderNm}
+		           AND O.ORD_NM = #{ordNm}
+		           AND O.ORD_PHNNO = #{ordPhnno}
 			</otherwise>
 		</choose>
 		<if test="ordChgSq != null and ordChgSq != ''">
@@ -607,8 +615,17 @@
 		         INNER JOIN TB_BRAND B
 		            ON G1.BRAND_CD = B.BRAND_CD
 		           AND B.USE_YN = 'Y'
-		         WHERE O.CUST_NO = #{custNo}
-		           AND O.DISP_YN = 'Y'
+		         WHERE O.DISP_YN = 'Y'
+		<choose>
+			<when test="custNo > 0">
+		           AND O.CUST_NO = #{custNo}
+			</when>
+			<otherwise>
+		           AND O.ORD_NO = #{ordNo}
+		           AND O.ORD_NM = #{ordNm}
+		           AND O.ORD_PHNNO = #{ordPhnno}
+			</otherwise>
+		</choose>
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 		           AND OCD.REG_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
 		</if>
@@ -680,8 +697,17 @@
 		 INNER JOIN TB_BRAND B
 		    ON G1.BRAND_CD = B.BRAND_CD
 		   AND B.USE_YN = 'Y'
-		 WHERE O.CUST_NO = #{custNo}
-		   AND O.DISP_YN = 'Y'
+		 WHERE O.DISP_YN = 'Y'
+		<choose>
+			<when test="custNo > 0">
+		   AND O.CUST_NO = #{custNo}
+			</when>
+			<otherwise>
+		   AND O.ORD_NO = #{ordNo}
+		   AND O.ORD_NM = #{ordNm}
+		   AND O.ORD_PHNNO = #{ordPhnno}
+			</otherwise>
+		</choose>
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 		   AND OCD.REG_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
 		</if>
@@ -741,7 +767,7 @@
 		             , OD.ORD_DTL_NO
 		             , OD.ORG_ORD_DTL_NO
 		             , OD.ORD_DTL_STAT
-		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS COLOR_NM
+		             , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 		             , G2.GOODS_NM                      AS ITEM_NM
 		             , ODI.OPT_CD1
 		             , ODI.OPT_CD2
@@ -758,10 +784,8 @@
 		            ON OD.GOODS_CD = G1.GOODS_CD
 		         INNER JOIN TB_GOODS G2
 		            ON ODI.ITEM_CD = G2.GOODS_CD
-		          LEFT OUTER JOIN TB_COLOR C
-		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1, ''), G1.MAIN_COLOR_CD)
-		           AND C.USE_YN = 'Y'
 		         WHERE OC.ORD_CHG_SQ = #{ordChgSq}
+		           AND OCD.ORD_DTL_NO = #{ordDtlNo}
 		  ) Z
 		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_GB, Z.ORD_DTL_NO, Z.ORG_ORD_DTL_NO, Z.ORD_DTL_STAT
 	</select>
@@ -847,7 +871,7 @@
 		             , OD.SHOT_DELV_YN
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
-		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1)                                 AS COLOR_NM
+		             , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 		             , G2.GOODS_NM                                                      AS ITEM_NM
 		             , G1.GOODS_TYPE
 		             , ODI.ORD_DTL_ITEM_SQ
@@ -913,12 +937,13 @@
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		<choose>
-			<when test="custNo != null and custNo != ''">
+			<when test="custNo > 0">
 		           AND O.CUST_NO = #{custNo}
 			</when>
 			<otherwise>
 		           AND O.ORD_NO = #{ordNo}
-		           AND O.ORD_NM = #{orderNm}
+		           AND O.ORD_NM = #{ordNm}
+		           AND O.ORD_PHNNO = #{ordPhnno}
 			</otherwise>
 		</choose>
 		<if test="ordChgSq != null and ordChgSq != ''">
@@ -1023,7 +1048,7 @@
 		             , OD.SHOT_DELV_YN
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
-		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1)                                 AS COLOR_NM
+		             , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 		             , G2.GOODS_NM                                                      AS ITEM_NM
 		             , G1.GOODS_TYPE
 		             , ODI.ORD_DTL_ITEM_SQ
@@ -1093,15 +1118,15 @@
 		            ON P.ORD_NO = O.ORD_NO
 		           AND P.PAY_GB = 'O'
 		           AND P.PAY_STAT = 'G016_30'
-		         WHERE OCD.DEL_YN = 'N'
-		           AND O.DISP_YN = 'Y'
+		         WHERE O.DISP_YN = 'Y'
 		<choose>
-			<when test="custNo != null and custNo != ''">
+			<when test="custNo > 0">
 			       AND O.CUST_NO = #{custNo}
 			</when>
 			<otherwise>
 			       AND O.ORD_NO = #{ordNo}
-			       AND O.ORD_NM = #{orderNm}
+			       AND O.ORD_NM = #{ordNm}
+		           AND O.ORD_PHNNO = #{ordPhnno}
 			</otherwise>
 		</choose>
 		<if test="ordChgSq != null and ordChgSq != ''">
@@ -1135,6 +1160,7 @@
 		     , Z.COMPLETE_DT
 		     , Z.CHG_STAT
 		     , Z.CHG_STAT_NM
+		     , Z.ORD_DTL_STAT
 		     , Z.ORD_NO
 		     , Z.ORD_AMT
 		     , Z.ORD_QTY
@@ -1172,6 +1198,10 @@
 		     , Z.RECIP_DTL_ADDR
 		     , Z.DELV_MEMO
 		     , Z.PG_TID
+		     , Z.PAY_MEANS
+		     , Z.PAY_MEANS_NM
+		     , Z.CARD_NM
+		     , Z.CARD_MIPS
 		     , Z.CHG_ORD_DTL_STAT
 		  FROM (SELECT OC.ORD_CHG_SQ
 		             , OC.CHG_GB
@@ -1183,6 +1213,7 @@
 		             , DATE_FORMAT(OCD.COMPLETE_DT, '%Y.%m.%d')                         AS COMPLETE_DT
 		             , OCD.CHG_STAT
 		             , FN_GET_CODE_NM('G685', OCD.CHG_STAT)                             AS CHG_STAT_NM
+		             , OD2.ORD_DTL_STAT                                                 AS ORD_DTL_STAT
 		             , OD.ORD_NO
 		             , OD.ORD_AMT
 		             , OD.ORD_QTY
@@ -1200,7 +1231,7 @@
 		             , OD.SHOT_DELV_YN
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
-		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1)                                 AS COLOR_NM
+		             , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 		             , G2.GOODS_NM                                                      AS ITEM_NM
 		             , G1.GOODS_TYPE
 		             , ODI.ORD_DTL_ITEM_SQ
@@ -1230,6 +1261,10 @@
 		             , DA.RECIP_DTL_ADDR
 		             , DA.DELV_MEMO
 		             , P.PG_TID
+		             , P.PAY_MEANS
+		             , FN_GET_CODE_NM('G014', P.PAY_MEANS)                              AS PAY_MEANS_NM
+		             , P.CARD_NM
+		             , IF(P.CARD_MIPS = 0, '일시불', CONCAT(P.CARD_MIPS, '개월'))          AS CARD_MIPS
 		             , OD2.ORD_DTL_STAT                                                 AS CHG_ORD_DTL_STAT
 		          FROM TB_ORDER_CHANGE OC
 		         INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
@@ -1266,15 +1301,15 @@
 		            ON P.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		           AND P.PAY_GB = 'D'
 		           AND P.PAY_STAT = 'G016_30'
-		         WHERE OCD.DEL_YN = 'N'
-		           AND O.DISP_YN = 'Y'
+		         WHERE O.DISP_YN = 'Y'
 		<choose>
-			<when test="custNo != null and custNo != ''">
+			<when test="custNo > 0">
 			       AND O.CUST_NO = #{custNo}
 			</when>
 			<otherwise>
 			       AND O.ORD_NO = #{ordNo}
-			       AND O.ORD_NM = #{orderNm}
+			       AND O.ORD_NM = #{ordNm}
+		           AND O.ORD_PHNNO = #{ordPhnno}
 			</otherwise>
 		</choose>
 		<if test="ordChgSq != null and ordChgSq != ''">
@@ -1282,11 +1317,11 @@
 		</if>
 		       ) Z
 		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_GB, Z.CHG_QTY, Z.ORD_DT, Z.CHG_DATE, Z.CHG_TIME, Z.CHG_DT, Z.COMPLETE_DT, Z.CHG_STAT
-		        , Z.CHG_STAT_NM, Z.ORD_NO, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT, Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT
+		        , Z.CHG_STAT_NM, Z.ORD_DTL_STAT, Z.ORD_NO, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT, Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT
 		        , Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 		        , Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.WD_GB, Z.CHGER_NM, Z.CHGER_PHNNO, Z.CHGER_BASE_ADDR
 		        , Z.CHGER_DTL_ADDR, Z.CHG_MEMO, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM, Z.DELV_ADDR_SQ, Z.RECIP_NM, Z.RECIP_PHNNO
-		        , Z.RECIP_BASE_ADDR, Z.RECIP_DTL_ADDR, Z.DELV_MEMO, Z.PG_TID, Z.CHG_ORD_DTL_STAT
+		        , Z.RECIP_BASE_ADDR, Z.RECIP_DTL_ADDR, Z.DELV_MEMO, Z.PG_TID, Z.PAY_MEANS, Z.PAY_MEANS_NM, Z.CARD_NM, Z.CARD_MIPS, Z.CHG_ORD_DTL_STAT
 		 ORDER BY Z.ORD_CHG_SQ DESC
 	</select>
 	

+ 6 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -347,7 +347,8 @@
 		/* TsfReivew.getCompleteReviewList */
 		<include refid="selectForPagingHeader"/>
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
-		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
@@ -478,7 +479,8 @@
 	<select id="getReviewGoodsInfo" parameterType="Review" resultType="Review">
 		/* TsfReivew.getReviewGoodsInfo */
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
-		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		  -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
@@ -906,7 +908,8 @@
 		/* TsfReivew.getAlreadyReviewList */
 		<include refid="selectForPagingHeader"/>
 		        SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
-		             , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		          -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		             , GROUP_CONCAT(CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		             , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		             , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		             , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM

+ 63 - 22
src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml

@@ -101,28 +101,69 @@
 			    AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
 			    GROUP  BY PG.GOODS_CD
 			)
-			SELECT 
-			       PG.BRAND_GROUP_NM
-			     , PG.GOODS_CD
-			     , PG.STOCK_QTY
-			     , PG.MIN_ORD_QTY
-			     , PG.GOODS_TYPE
-			     , PG.OPT_CD
-			     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
-			     , PG.GOODS_NM
-			     , PG.GOODS_TNM
-			     , PG.MAIN_COLOR_CD
-			     , PG.LIST_PRICE
-			     , PG.AF_LINK_CD 
-			     , PG.CONTENTS_LOC 
-			     , PG.CUST_NO 
-			     , PG.REG_DT
-			     , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                     AS CURR_PRICE    /*현재판매가*/
-			     , GI.SYS_IMG_NM
-			     , GI.SYS_IMG_NM2
-				FROM   TAB_PLAN_GOODS PG
-			INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
-			)Z
+			, TAB_COLORCHIP AS (
+		            /* 상품 컬러칩 */
+		            SELECT PG.GOODS_CD
+		                 , GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
+		            FROM   TAB_PLAN_GOODS PG
+		                 , TB_OPTION O
+		                 , TB_COLOR C
+		                 , TB_COMMON_CODE CC
+		            WHERE  PG.GOODS_CD = O.GOODS_CD
+		            AND    O.OPT_CD1 = C.COLOR_CD
+		            AND    C.COLOR_GRP_CD = CC.CD
+		            AND    O.DISP_YN = 'Y'
+		            AND    C.USE_YN = 'Y'
+		            AND    CC.USE_YN = 'Y'
+		            GROUP  BY PG.GOODS_CD
+		        )
+		    , TAB_GOODS_BENEFIT AS (
+		            /* 상품혜택 */
+		            SELECT GOODS_CD
+		                 , GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',') AS ICON
+		            FROM   (
+		                    SELECT PG.GOODS_CD
+		                         , GB.BENEFIT_GB
+		                         , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		                                WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		                                WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		                                ELSE '신상'
+		                           END                               AS BENEFIT_NM
+		                         , RANK() OVER(PARTITION BY PG.GOODS_CD
+		                                       ORDER BY GB.BENEFIT_GB
+		                                              , GB.GOODS_CD) AS NUMB
+		                    FROM   TAB_PLAN_GOODS PG
+		                         , TB_GOODS_BENEFIT GB
+		                    WHERE  PG.GOODS_CD = GB.GOODS_CD
+		                   ) Z
+		            GROUP  BY GOODS_CD
+		        )
+		    SELECT 
+		           PG.BRAND_GROUP_NM
+		         , PG.GOODS_CD
+		         , PG.STOCK_QTY
+		         , PG.MIN_ORD_QTY
+		         , PG.GOODS_TYPE
+		         , PG.OPT_CD
+		         , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		         , PG.GOODS_NM
+		         , PG.GOODS_TNM
+		         , PG.MAIN_COLOR_CD
+		         , PG.LIST_PRICE
+		         , PG.AF_LINK_CD 
+		         , PG.CONTENTS_LOC 
+		         , PG.CUST_NO 
+		         , C.COLOR_CHIPS                                                                                                      /*컬러칩*/
+		         , GB.ICON 
+		         , PG.REG_DT
+		         , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                     AS CURR_PRICE    /*현재판매가*/
+		         , GI.SYS_IMG_NM
+		         , GI.SYS_IMG_NM2
+		    	FROM   TAB_PLAN_GOODS PG
+		    INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
+		    LEFT OUTER JOIN TAB_COLORCHIP C ON PG.GOODS_CD = C.GOODS_CD
+		    LEFT OUTER JOIN TAB_GOODS_BENEFIT GB ON PG.GOODS_CD = GB.GOODS_CD
+		    )Z
 		ORDER BY Z.REG_DT DESC
 		<if test="quickYn != null and quickYn != ''">
 			,Z.STOCK_QTY

+ 1 - 0
src/main/resources/i18n/messages/message_ko_KR.properties

@@ -76,6 +76,7 @@ CUST_0001=\uC815\uC0C1\uC801\uC73C\uB85C \uD0C8\uD1F4\uB418\uC5C8\uC2B5\uB2C8\uB
 CUST_0002=\uC774\uBBF8 \uD0C8\uD1F4\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
 CUST_0003=\uC9C4\uD589\uC911\uC778 \uAC70\uB798\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC9C4\uD589\uC911\uC778 \uAC70\uB798\uB97C \uC644\uB8CC \uD6C4 \uD0C8\uD1F4 \uC2E0\uCCAD\uC744 \uD574\uC8FC\uC138\uC694.
 CUST_0004=\uD0C8\uD1F4\uAC00 \uC815\uC0C1\uC801\uC73C\uB85C \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.
+CUST_0005=\uC778\uC99D\uBC29\uBC95\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. <br>\uAD00\uB9AC\uC790\uC5D0\uAC8C \uBB38\uC758\uD558\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4.
 
 #\uC0AC\uBC29\uB137
 SABANGNET_0001=\uC131\uACF5\uC801\uC73C\uB85C \uC0C1\uD488 \uC815\uBCF4\uAC00 \uC804\uC1A1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC131\uACF5)

+ 1 - 0
src/main/webapp/WEB-INF/views/mob/customer/UseTermsLayerFormMob.html

@@ -1,3 +1,4 @@
+<!DOCTYPE html>
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org">
 <!--

+ 3 - 2
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreCancelDetailFormMob.html

@@ -40,7 +40,8 @@
 				<th:block th:if="${cancelDetailList.cancelDetailList}" th:each="returnDtl, status : ${cancelDetailList.cancelDetailList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 					<div class="goods_section">
 						<div class="goods_status">
-							<p class="dlvr_staus" th:text="${returnDtl.chgStatNm}"></p>
+							<p class="dlvr_staus" th:if="${returnDtl.chgStat == 'G685_17' or returnDtl.chgStat == 'G685_18'}">주문취소</p>
+							<p class="dlvr_staus" th:unless="${returnDtl.chgStat == 'G685_17' or returnDtl.chgStat == 'G685_18'}" th:text="${returnDtl.chgStatNm}"></p>
 							<p class="dlvr_desc" th:text="|${returnDtl.chgDate} ${returnDtl.chgTime}|"></p>
 						</div>
 						
@@ -56,7 +57,7 @@
 											<div class="badge_wrap">
 												<em class="tag primary" th:if="${returnDtl.shotDelvYn == 'Y'}">총알배송</em>
 												<em class="tag" th:if="${returnDtl.shotDelvYn == 'N' and returnDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
-												<em class="tag" th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</span>
+												<em class="tag" th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</em>
 											</div>
 										</div>
 										<div class="name" th:text="${returnDtl.goodsNm}"></div>

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html

@@ -104,11 +104,11 @@
 							<div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
 						</div>
 						<div class="goods_txt">
-							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_21' or (returnDtl.chgGb == 'G680_40' and returnDtl.chgStat == 'G685_32')}" th:text="|${returnDtl.addPayCost}원 결제 후 반품 가능합니다.|"></p>
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_21' or (returnDtl.chgGb == 'G680_40' and returnDtl.chgStat == 'G685_32')}" th:text="|${returnDtl.addPayCost}원 결제 후 교환 가능합니다.|"></p>
 							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_20'}">교환 신청이 접수 되었습니다.<br> 신속하게 처리하여 드리겠습니다.</p>
 							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_30'}">고객님이 요청하신 회수지로 상품을 회수 중에 있습니다.</p>
 							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_31' and returnDtl.chgGb == 'G680_40'}">고객님이 교환하신 상품을 검수 중에 있습니다.</p>
-							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_40'} and (returnDtl.chgOrdDtlStat == 'G013_60' or returnDtl.chgOrdDtlStat == 'G013_70')}">교환이 완료되었습니다.</p>
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_40' and (returnDtl.chgOrdDtlStat == 'G013_60' or returnDtl.chgOrdDtlStat == 'G013_70')}">교환이 완료되었습니다.</p>
 							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_49'}">요청하신 교환을 취소하였습니다.</p>
 						</div>
 					</div>

+ 191 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustDeliveryAddrFormMob.html

@@ -0,0 +1,191 @@
+<!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  : MypageCustDeliveryAddrFormMob.html
+ * @desc    : 마이페이지 > 배송지관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   jsshin      최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main class="container my">
+	<section class="content my_delivery">
+		<div class="inner">
+			<div class="inner wide">
+				<div id="custDeliveryList" class="delivery_list"></div>
+				<div id="nodata" class="nodata" style="display: none;">
+					<div class="txt_box">
+						<p>
+							등록된 배송지가 없습니다.<br/>
+						</p>
+					</div>
+				</div>
+				<div class="inner wide">
+					<div class="btn_group btn_group_flex">
+						<button type="button" class="btn btn_dark" id="btnAdrsaddPop">
+							<span>배송지 추가</span>
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</section>
+</main>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+
+	var fnCustDeliveryAddList = function () {
+		$.get('/mypage/customer/delivery/addr/list', fnCustDeliveryAddListCallback);
+	}
+
+	var fnCustDeliveryAddListCallback = function (result) {
+		let html = '';
+		if (result.length < 1) {
+			$('#nodata').show();
+		} else {
+			$('#nodata').hide();
+			$.each(result, function (idx, custDeliveryAddr){
+				if (custDeliveryAddr.defaultYn  === 'Y') {
+					html += '<div class="ship_info active">\n';
+				} else {
+					html += '<div class="ship_info">\n';
+				}
+				html +=	'        <dl>\n';
+				html +=	'            <div class="name">\n';
+				html +=	'                <dt><span class="sr-only">배송지명</span></dt>\n';
+				html +=	'                    <dd>\n';
+				html +=	'                       '+custDeliveryAddr.recipNm +'\n';
+				html +=	'                       <div class="badge_wrap">\n';
+				if (custDeliveryAddr.defaultYn  === 'Y') {
+					html += '                       <em class="order_badge">기본배송지</em>\n';
+				}
+				if (custDeliveryAddr.shotDelvUseYn  === 'Y') {
+					html += '                       <em class="order_badge order_bullet_badge">총알배송</em>\n';
+				}
+				html +=	'                       </div>\n';
+				html +=	'                    </dd>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div class="phone">\n';
+				html +=	'                <dt><span class="sr-only">휴대폰 번호</span></dt>\n';
+				html +=	'                <dd>'+custDeliveryAddr.recipPhnno+'</dd>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div class="addr">\n';
+				html +=	'               <dt><span class="sr-only">배송주소</span></dt>\n';
+				html +=	'               <dd>'+custDeliveryAddr.recipBaseAddr + custDeliveryAddr.recipDtlAddr +'</dd>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div class="ship_request">\n';
+				html +=	'                <dl>\n';
+				html +=	'                    <dt>배송요청 사항</dt>\n';
+				html +=	'                    <dd>'+custDeliveryAddr.delvMemo+'</dd>\n';
+				html +=	'                </dl>\n';
+				html +=	'            </div>\n';
+				html +=	'        </dl>\n';
+				html +=	'        <div class="btn_group btn_group_flex">\n';
+				html +=	'            <div>\n';
+				html +=	'                <button type="button" class="btn btn_gost" onclick="fnModiFyCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">\n';
+				html +=	'                    <span>수정</span>\n';
+				html +=	'                </button>\n';
+				html +=	'            </div>\n';
+				html +=	'            <div>\n';
+				html +=	'                <button type="button" class="btn btn_dark" onclick="fnDeleteCustDelvAddr(\''+custDeliveryAddr.custDelvAddrSq+'\')">\n';
+				html +=	'                   <span>삭제</span>\n';
+				html +=	'                </button>\n';
+				html +=	'            </div>\n';
+				html +=	'        </div>\n';
+				html +=	'   </div>\n';
+			});
+		}
+		$('#custDeliveryList').html(html);
+	}
+
+	// 배송지 추가
+	$('#btnAdrsaddPop').on('click', function () {
+		$.ajax( {
+			type		: "POST",
+			url 		: '/common/delvAddrAddPop',
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				$("#adrsAddPop .modal-dialog .modal-content").html(result);
+				$("#adrsAddPop").modal("show");
+			}
+		});
+	});
+
+	var delvAddrSet = function (delvObj) {
+		if(!gagajf.isNull(delvObj.custDelvAddrSq)) {
+			fnCustDeliveryAddList();
+		}
+	};
+
+	var fnModiFyCustDelvAddr = function (custDelvAddrSq) {
+		let params = {}
+		params.custDelvAddrSq = custDelvAddrSq;
+
+		$.ajax( {
+			type		: "POST",
+			url 		: '/common/delvAddrModifyPop',
+			data		: JSON.stringify(params),
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+			},
+			success 	: function(result) {
+				$("#adrsModifyPop .modal-dialog .modal-content").html(result);
+				$("#adrsModifyPop").modal("show");
+			}
+		});
+	};
+
+	var fnDeleteCustDelvAddr = function (custDelvAddrSq) {
+		let params = {}
+		params.custDelvAddrSq = custDelvAddrSq;
+		let jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit("/mypage/customer/delivery/addr/delete", jsonData, function (result) {
+			if (result.isSuccess) {
+				fnCustDeliveryAddList();
+			} else {
+				mcxDialog.alert("배송지 삭제를 실패 하였습니다.");
+				return;
+			}
+		})
+	}
+
+
+	$(document).ready(function() {
+
+		$('#htopTitle').text('배송지 관리');
+
+		// 배송목록 조회
+		fnCustDeliveryAddList();
+
+		// $(document).on("scroll",function(){
+		// 	if($(".tabbar").hasClass("fixed")) {
+		// 		$(".my .my_delivery .inner > .btn_group").addClass('active');
+		// 	}else{
+		// 		$(".my .my_delivery .inner > .btn_group").removeClass('active');
+		// 	}
+		// });
+	});
+
+	/*]]>*/
+</script>
+</th:block>
+</body>
+</html>

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

@@ -360,24 +360,26 @@
 							<!-- //주문상태별 문구정보 정의 -->
 							
 							<!-- 사은품 영역 -->
-							<th:block th:if="${order.freeGiftList != null and #lists.size(order.freeGiftList) > 0}">
-								<div class="goods_gift">
-									<div class="gift_wrap">
-										<div class="title">사은품</div>
-										<div class="li_gift">
-											<ul>
-												<th:block th:each="freeGift , j : ${order.freeGiftList}">
-													<li>
-														<span class="gift_name" th:text="${freeGift.goodsNm}"></span> 
-														<th:block th:if="${freeGift.usePoint} > 0">
-															<span class="deduct_p" th:text="|(-${#numbers.formatInteger(freeGift.usePoint, 1, 'COMMA')}P)|"></span>
-														</th:block>
-													</li>
-												</th:block>
-											</ul>
+							<th:block th:if="${#lists.size(order.ordDtlList) == status.count}">
+								<th:block th:if="${order.freeGiftList != null and #lists.size(order.freeGiftList) > 0}">
+									<div class="goods_gift">
+										<div class="gift_wrap">
+											<div class="title">사은품</div>
+											<div class="li_gift">
+												<ul>
+													<th:block th:each="freeGift , j : ${order.freeGiftList}">
+														<li>
+															<span class="gift_name" th:text="${freeGift.goodsNm}"></span> 
+															<th:block th:if="${freeGift.usePoint} > 0">
+																<span class="deduct_p" th:text="|(-${#numbers.formatInteger(freeGift.usePoint, 1, 'COMMA')}P)|"></span>
+															</th:block>
+														</li>
+													</th:block>
+												</ul>
+											</div>
 										</div>
 									</div>
-								</div>
+								</th:block>
 							</th:block>
 							<!-- //사은품 영역 -->
 						</div>

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

@@ -61,7 +61,7 @@
 			<div class="inner bg_gray">
 				<div class="mem_info clear">
 					<div class="mem_rank">
-						<div class="rank_icon vip">V</div>
+						<div th:class="|rank_icon ${#strings.toLowerCase(customerInfo.custGradeNm)}|" th:text="${custGradeNm1Str}"></div>
 						<div class="mem_name"><strong th:text="${customerInfo.custNm}"></strong>님</div>
 						<a href="javascript:void(0);" class="rank_txt" th:text="${customerInfo.custGradeNm}" onclick="fnGoToCustomerBenefit();"></a> <!-- 210408_a태그 변경 | 회원등급혜택 페이지 링크 이동-->
 						<button type="button" id="btn_coupon_down" class="btn cou_btn" onclick="fnDownloadCoupon();">등급 쿠폰 다운로드</button> <!-- 210409_추가 : btn_coupon_down id 추가 -->

+ 30 - 29
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html

@@ -13,6 +13,7 @@
 					<a href="javascript:void(0);" class="detail_btn" th:ordno="${order.ordNo}" onclick="fnGoToOrderDetail(this)">상세보기</a>
 				</div>
 				
+				<!-- 주문목록 -->
 				<th:block th:each="ordDtl , j : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 					<!-- 주문 접수 -->
 					<div class="goods_section">
@@ -161,9 +162,11 @@
 								<div class="goods_btn_wrap btn_group_flex">
 									<!-- 교환가능, 반품가능 -->
 									<th:block th:if="${ordDtl.changeableYn} == 'Y'">
-										<button type="button" class="btn btn_default btn_exch_req" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:ordCanChgQty="${ordDtl.ordCanChgQty}" th:delvFeeCd="${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');">
-											<span>교환 신청</span>
-										</button>
+										<div>
+											<button type="button" class="btn btn_default btn_exch_req" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:ordCanChgQty="${ordDtl.ordCanChgQty}" th:delvFeeCd="${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');">
+												<span>교환 신청</span>
+											</button>
+										</div>
 									</th:block>
 									<th:block th:if="${ordDtl.returnableYn} == 'Y'">
 										<div>
@@ -174,7 +177,7 @@
 									</th:block>
 									<!-- //교환가능, 반품가능 -->
 									<div>
-										<button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnDecideOrder(this);">
+										<button type="button" id="btn_purchase_confirm" class="btn btn_primary" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnDecideOrder(this);">
 											<span>구매 확정</span>
 										</button>
 									</div>
@@ -183,7 +186,7 @@
 									<!-- 교환불가, 반품불가 -->
 									<th:block th:if="${ordDtl.changeableYn} == 'N' or ${ordDtl.returnableYn} == 'N'">
 										<div>
-											<button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"">
+											<button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);">
 												<span>1:1 문의</span>
 											</button>
 										</div>
@@ -191,9 +194,9 @@
 									<!-- //교환불가, 반품불가 -->
 									
 									<!-- 리뷰사용가능, 리뷰등록전일때 -->
-									<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+									<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == ''">
 										<div>
-											<button type="button" class="btn btn_primary btn_review_write" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:goodsCd="${ordDtl.GoodsCd}" onclick="fnCreateReview(this);">
+											<button type="button" class="btn btn_primary btn_review_write" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:goodsCd="${ordDtl.goodsCd}" onclick="fnCreateReview(this);">
 												<span>리뷰 쓰기</span>
 											</button>
 										</div>
@@ -207,15 +210,10 @@
 							<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" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"">
+										<button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th: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);"">
-											<span>1:1 문의</span>
-										</button>
-									</div>
 									
 									<!-- 리뷰사용가능, 리뷰등록전일때 -->
 									<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
@@ -384,29 +382,32 @@
 						<!-- //상태문구정리 -->
 						
 						<!-- 사은품 영역 -->
-						<th:block th:if="${order.freeGiftList != null and #lists.size(order.freeGiftList) > 0}">
-							<div class="goods_gift">
-								<div class="gift_wrap">
-									<div class="title">사은품</div>
-									<div class="li_gift">
-										<ul>
-											<th:block th:each="freeGift , j : ${order.freeGiftList}">
-												<li>
-													<span class="gift_name" th:text="${freeGift.goodsNm}"></span> 
-													<th:block th:if="${freeGift.usePoint} > 0">
-														<span class="deduct_p" th:text="|(-${#numbers.formatInteger(freeGift.usePoint, 1, 'COMMA')}P)|"></span>
-													</th:block>
-												</li>
-											</th:block>
-										</ul>
+						<th:block th:if="${#lists.size(order.ordDtlList) == j.count}">
+							<th:block th:if="${order.freeGiftList != null and #lists.size(order.freeGiftList) > 0}">
+								<div class="goods_gift">
+									<div class="gift_wrap">
+										<div class="title">사은품</div>
+										<div class="li_gift">
+											<ul>
+												<th:block th:each="freeGift , j : ${order.freeGiftList}">
+													<li>
+														<span class="gift_name" th:text="${freeGift.goodsNm}"></span> 
+														<th:block th:if="${freeGift.usePoint} > 0">
+															<span class="deduct_p" th:text="|(-${#numbers.formatInteger(freeGift.usePoint, 1, 'COMMA')}P)|"></span>
+														</th:block>
+													</li>
+												</th:block>
+											</ul>
+										</div>
 									</div>
 								</div>
-							</div>
+							</th:block>
 						</th:block>
 						<!-- //사은품 영역 -->
 					</div>
 					<!-- //주문 접수 -->
 				</th:block>
+				<!-- //주문목록 -->
 			</th:block>
 		</th:block>
 		<!-- //주문목록이 있을때 -->

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

@@ -50,59 +50,33 @@
 						</ul>
 						<div class="tabContents">
 							<div class="tab_cont active">
+							
+								<div class="once" th:if="${adminCount.count>0}" id="check_notice">
+									<div class="alert" role="alert">
+										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
+										<p class="formOnly" th:onclick="fnMove([[${adminCount.reviewSq}]])">바로확인</p>
+										<button type="button" class="alertCls" onclick="location.href='#newreply2'" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
+									</div>
+								</div>
 								<!-- tab_cont Start -->
-								<div class="inner">
-
+								<div class="inner" id="reviewList">
 									<div class="part_goods">
 										<!-- 굿즈_리뷰 -->
-										<div class="goods_section">
-											<div class="goods_detail">
-												<a href="">
-													<div class="thumb_box">
-														<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
-													</div>
-													<div class="info_box">
-														<div class="od_name">
-															<div class="goods_date"><span class="date">2020.10.25</span> 구매</div>
-															<div class="brand">
-																<span>Mollimelli 몰리멜리</span>
-															</div>
-															<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
-														</div>
-														<div class="od_opt">
-															<div class="option">
-																<em>Black</em><em>XXL</em>
-															</div>
-														</div>
-													</div>
-												</a>
-											</div>
-											<div class="goods_btn_wrap btn_group_flex">
-												<div><button type="button" class="btn btn_default"><span>리뷰쓰기(</span><em>15</em><span>일 남음)</span></button></div>
-											</div>
-										</div>
+										
 										<!-- //굿즈_리뷰 -->
 									</div>
-									
+									<div class="nodata" id="nodata1" style="display: none;">
+									<div class="txt_box">
+										<p>
+											작성 가능한 리뷰가 없습니다.<br>
+										</p>
+									</div>
 								</div>
+							</div>
 								<!-- // tab_cont End -->
 							</div>
 							<div class="tab_cont ">
 								<!-- tab_cont Start -->
-
-								<div class="once">
-									<div class="alert" role="alert">
-										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
-										<p class="formOnly">바로확인</p>
-										<button type="button" class="alertCls" onclick="location.href='#newreply2'" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
-										<!--
-											.reply_box(관리자댓글)가 추가된 
-											부모, class="reviewMy"의 
-											id="newreply2"로 이동 됩니다.
-										 -->
-									</div>
-								</div>
-
 								<div class="inner">
 									<div class="part_goods">
 										<!-- 굿즈_리뷰 -->
@@ -233,6 +207,16 @@
 				</div>
 			</section>
 		</main>
+<form id="searchForm1" name="searchForm1" th:action="@{'/mypage/complete/review/list'}" th:method="post">
+	<input type="hidden" name="pageNo" value="1" />
+	<input type="hidden" name="pageSize" value="10" />
+</form>
+<form id="searchForm2" name="searchForm2" th:action="@{'/mypage/already/review/list'}" th:method="post">
+	<input type="hidden" name="pageNo2" value="1" />
+	<input type="hidden" name="pageSize2" value="10" />
+</form>
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
@@ -242,21 +226,238 @@
 	$("#completeReview").click(function() {
 		$("#alreadyReview").removeClass("active");
 		$("#completeReview").addClass("active");
-		$(".check_notice").hide();
-		gagaPaging.init('searchForm1', fnSearchCallback1, 'paging', 10);
-		gagaPaging.load(1);
+		$("#check_notice").hide();
+		
 	})
 	
+	var fnGetInfiniteScrollCompleteDataList = function(pageNum) {
+	
+		$("#searchForm1 input[name=pageNo]").val(pageNum+1);
+		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+		gagajf.ajaxFormSubmit("/mypage/complete/review/list", document.goodsReviewForm,  gagaInfiniteScroll.jsonToHtml);
+	}
+	
+	
 	$("#alreadyReview").click(function() {
 		$("#completeReview").removeClass("active");
 		$("#alreadyReview").addClass("active");
-		$(".check_notice").show();
-		gagaPaging.init('searchForm2', fnSearchCallback2, 'paging2', 10);
-		gagaPaging.load(1);
+		$("#check_notice").show();
+		
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/mypage/already/review/list', jsonData,	function(result) {
+			if (result.dataList1 != null && result.dataList1.length > 0) {
+				$.each(result.dataList1, function(idx, item) {
+					let html = '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					html += '';
+					$('#reviewList').append(html);
+				})
+			}else{
+				$('#nodata2').show();
+			}
+		});
+	
 	})
 /*]]>*/
  
  $(document).ready(function() {
+	 $("#completeReview").trigger('click');
  	$('#htopTitle').text('리뷰');
 
  });

+ 28 - 6
src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html

@@ -216,7 +216,16 @@
 									</div>
 									<!-- //210330 : 태그 분할 -->
 									<div>
-										<dt>상품할인(즉시할인)</dt>
+										<dt>상품할인</dt>
+										<th:block th:if="${goodsDcSumAmt}>0">
+											<dd><div><span th:text="|- ${#numbers.formatInteger(goodsDcSumAmt, 1, 'COMMA')}|"></span>원</div></dd>
+										</th:block>
+										<th:block th:if="${goodsDcSumAmt}<1">
+											<dd><div><span>0</span>원<div></dd>
+										</th:block>
+									</div>
+									<div>
+										<dt>즉시할인</dt>
 										<th:block th:if="${cpn1DcSumAmt}>0">
 											<dd><div><span th:text="|- ${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')}|"></span>원</div></dd>
 										</th:block>
@@ -300,13 +309,19 @@
 									</div>
 									<div>
 										<dt>결제방법</dt>
-										<!-- kcp 신용카드 -->
+										<dd th:if="${orderInfo.pgGb == 'NAVER'}"><div><span>네이버 페이</span></div></dd>
+										<dd th:if="${orderInfo.pgGb == 'KAKAO'}"><div><span>카카오 페이</span></div></dd>
+										<dd th:if="${orderInfo.pgGb == 'PAYCO'}"><div><span>PAYCO</span></div></dd>
+										<dd th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_10'}"><div><span>실시간계좌이체</span></div></dd>
+										<dd th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_20'}"><div><span>무통장입금</span></div></dd>
+										<dd><div><span th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_30'}" th:text="|${orderInfo.cardNm}/${orderInfo.cardMips}|"></span></div></dd>
+										<dd th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_60'}"><div><span>휴대폰결제</span></div></dd>
+													
+										<!-- kcp 신용카드 
 										<th:block th:if="${orderInfo.payMeans} == 'G014_30'">
-											<!--  체크카드 -->
 											<th:block th:if="${orderInfo.cardType} == 'Y'">
 												<dd><div><span th:text="|체크카드(${orderInfo.cardNm})/${orderInfo.cardMips}|"></span></div></dd>
 											</th:block>
-											<!--  신용카드 -->
 											<th:block th:if="${orderInfo.cardType} == 'N'">
 												<dd><div><span th:text="|체크카드(${orderInfo.cardNm})/${orderInfo.cardMips}|"></span></div></dd>
 											</th:block>
@@ -314,6 +329,7 @@
 										<th:block th:if="${orderInfo.payMeans} != 'G014_30'">
 											<dd><div><span th:text="${orderInfo.payType}"></span></div></dd>
 										</th:block>
+										-->
 									</div>
 								</dl>
 							</td>
@@ -322,8 +338,8 @@
 				</div>
 			</div>
 			<div class="btn_group btn_group_flex">
-				<div><button type="button" class="btn btn_gost"><span>주문 상세보기</span></button></div>
-				<div><button type="button" class="btn btn_dark"><span>쇼핑 계속하기</span></button></div>
+				<div><button type="button" class="btn btn_gost" th:ordno="${orderInfo.ordNo}" onclick="fnGoToOrderDetail(this)"><span>주문 상세보기</span></button></div>
+				<div><button type="button" class="btn btn_dark" onclick="location.href='/'"><span>쇼핑 계속하기</span></button></div>
 			</div>
 		</div>
 	</section>
@@ -471,6 +487,12 @@ var delvMemoSet = function(delvMemoObj) {
 	)
 }
 
+//주문상세보기 버튼 클릭 이벤트 처리
+var fnGoToOrderDetail = function(param) {
+	let ordNo = $(param).attr('ordNo');
+	cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
+}
+
 </script>
 </th:block>
 </body>

+ 7 - 4
src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html

@@ -160,12 +160,15 @@
 							<!-- 포인트금액 0보다 클때 적용 -->
 							<th:block th:if="${rmPntAmt} > 0">
 								<div>
-									<dt>STYLE24 포인트 <span>결제금액의 최대 40%까지 사용가능</span></dt>
+									<dt>STYLE24 포인트 <span th:text="|결제금액의 최대 ${pointUseEnvset.pointUseMaxLimit}%까지 사용가능|"></span></dt>
 									<dd>
 										<div class="form_field">
 											<input type="hidden" name="rmPntAmt" th:value="${rmPntAmt}"/>
+											<input type="hidden" name="pointUseOrdMinAmt" th:value="${pointUseEnvset.pointUseOrdMinAmt}"/>
+											<input type="hidden" name="pointUseMaxLimit" th:value="${pointUseEnvset.pointUseMaxLimit}"/>
+											
 											<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
-											<th:block th:if="${orgGoodsSumAmt} >= 30000">
+											<th:block th:if="${orgGoodsSumAmt} >= ${pointUseEnvset.pointUseOrdMinAmt}">
 												<div class="input_wrap">
 													<input type="text" name="pntDcAmtStr" class="form_control" maxlength="11" placeholder="사용할 포인트를 입력해주세요." onkeyup="inputNumberFormat(this);">
 													<button type="button" class="btn btn_dark btn_sm" id="btn_point_apply">
@@ -176,9 +179,9 @@
 											<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
 											
 											<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
-											<th:block th:if="${orgGoodsSumAmt} < 30000">
+											<th:block th:if="${orgGoodsSumAmt} < ${pointUseEnvset.pointUseOrdMinAmt}">
 												<div class="input_wrap">
-													<input type="text" class="form_control" maxlength="" placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다." readonly="readonly" onfocus="this.blur();">
+													<input type="text" class="form_control" maxlength="" th:placeholder="|${#numbers.formatInteger(pointUseEnvset.pointUseOrdMinAmt, 1, 'COMMA')} 이상 결제시에만 포인트 사용이 가능합니다.|" readonly="readonly" onfocus="this.blur();">
 													<button type="button" class="btn btn_dark btn_sm">
 														<span>적용</span>
 													</button>

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

@@ -383,6 +383,7 @@
 										</table>
 									</div>
 								</div>
+								<!-- 
 								<div class="payinfo_blk">
 									<a href="">
 										결제대행 서비스 약관 동의
@@ -392,6 +393,7 @@
 										결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
 									</div>
 								</div>
+								 -->
 							</div>
 						</div>
 						
@@ -641,6 +643,11 @@ var orderGiftInfoSet = function() {
 
 // 1.4.2 배송정보로드
 var deliveryAddrInfoSet = function(delvObj, temp) {
+	
+	// 2021.04.29 AJAX 로드를 위한 변수 설정	
+	delvObj.foreignBuyYn 	= foreignBuyYn;
+	delvObj.orderMadeYn 	= orderMadeYn;
+	
 	$.ajax( {
 		type		: "POST",
 		url 		: '/order/deliveryAddrInfo',
@@ -779,6 +786,8 @@ var orderListInfoSet = function(orderListJsonData, temp) {
 			if (result != null) {
 				$("#orderListInfo").css("display", "block");
 				$("#orderListInfo").html(result);
+				
+				alert(result);
 
 				$("#delvFeeCdCnt").text($("#orderForm input[name=delvFeeCdCnt]").val());
 				
@@ -816,17 +825,6 @@ var freegiftInfoSet = function() {
 				$("#freegiftInfo").html(result);
 				var total_gift 		= 0;
 				var total_deduct 	= 0;
-				
-				// 2021.04.29 무료사은품 기본선택
-				$("#orderForm .freegiftRdo").each(function(index) {
-					var usepoint = parseInt($(this).attr("usepoint"));
-					var usepoint = parseInt($(this).attr("count"));
-					
-					// 첫번째 무료 선택 
-					if (usepoint == 0 && count == 1) {
-						$(this).trigger("click");
-					}
-				});
 
 				// 2.2 사은품선택 라디오 버튼 기능
 				$("#orderForm .freegiftRdo").on("click", function() {
@@ -859,8 +857,12 @@ var freegiftInfoSet = function() {
 					$("#orderForm .total_deduct").text(total_deduct.addComma());			// 사은품총사용포인트
 					$("#orderAmtForm .freegiftUsePnt").text(total_deduct);
 					
-					// 포인트초기화기능
-					pntDcAmtReset();
+					// 2021.04.29 사은품기능 리셋
+					var pntDcAmt = parseInt($("#orderAmtForm .pntDcSumAmt").text());
+					if (pntDcAmt > 0) {
+						mcxDialog.alert("적용된 할인/혜택이 초기화 됩니다.");
+						pntDcAmtReset();
+					}
 				});
 				
 				// 2021.04.29 무료사은품 기본선택
@@ -871,6 +873,42 @@ var freegiftInfoSet = function() {
 					// 첫번째 무료 선택 
 					if (usepoint == 0 && count == 1) {
 						$(this).trigger("click");
+						
+						total_gift 		= 0;
+						total_deduct 	= 0;
+						
+						// 2021.04.14 사은품 사용 포인트가 보유포인트보다 작아야 한다.
+						var rmPntAmt 			= parseInt($("#orderForm input[name='rmPntAmt']").val());
+						var freegiftUsePnt 		= parseInt($("#orderAmtForm .freegiftUsePnt").text());
+						var usepoint			= parseInt($(this).attr("usepoint"));
+						rmPntAmt 				= rmPntAmt - freegiftUsePnt - usepoint;
+						
+						if (rmPntAmt < 0) {
+							mcxDialog.alert("보유포인트가 부족합니다.");
+							return false;
+						}
+						
+						$("#orderForm .freegiftRdo").each(function(){
+							if ($(this).attr("allYn") == "Y" ) {
+								total_gift 		+= 1;
+							}
+							
+							// 라디오버튼 사은품 체크
+							if ($(this).is(":checked")) {
+								// 수령거부가 아닐때 체크
+								if ($(this).val() != "noSel") {
+									total_gift 		+= 1;
+									total_deduct 	+= parseInt($(this).attr("usepoint"));
+								}
+							}
+						});
+						
+						$("#orderForm .total_gift").text(total_gift);							// 사은품총선택개수
+						$("#orderForm .total_deduct").text(total_deduct.addComma());			// 사은품총사용포인트
+						$("#orderAmtForm .freegiftUsePnt").text(total_deduct);
+						
+						// 포인트초기화기능
+						pntDcAmtReset();
 					}
 				});
 
@@ -891,11 +929,13 @@ var freegiftInfoSet = function() {
 				});
 				
 				// 2021.04.29 사은품동의 체크 기능
+				/*
 				$("#orderForm #chk-agree_gift").on("click", function(){
 					if ($(this).is(":checked") == false) {
 						mcxDialog.alert("미동의시 사은품 지급이 되지 않습니다.");
 					}
 				});
+				*/
 			}
 			
 			// 1.8 결제타입로드
@@ -934,8 +974,10 @@ var paymentInfoSet = function() {
 						$("#orderForm .area_paymethod .agree_insurance").show();
 					} else {
 						$("#orderForm .area_paymethod .agree_insurance").hide();
-						$("#orderForm input[name=insuranceYn]").attr("checked", false);
 					}
+					
+					// 2021.04.29 수정
+					$("#orderForm input[name=insuranceYn]").attr("checked", false);
 				});
 				
 				// 결재하기
@@ -1051,7 +1093,6 @@ var paymentInfoSet = function() {
 					}
 					
 					// 사은품지급할 경우 체크
-					/*
 					if ($("#orderAmtForm .freegiftValArr").text().length > 0) {
 						if (!$("#orderForm #chk-agree_gift").is(":checked")) {
 							mcxDialog.alert("사은품 지급 정보 동의를 체크해주세요.");
@@ -1061,7 +1102,6 @@ var paymentInfoSet = function() {
 							return false;
 						}
 					}
-					*/
 					
 					// 결재수단
 					if (gagajf.isNull(paynormal)) {
@@ -1075,6 +1115,11 @@ var paymentInfoSet = function() {
 					var paynormalArr		= paynormal.split("|");
 					var pgGb				= paynormalArr[0];
 					var payMeans			= paynormalArr[1];
+					
+					// 자주쓰는결제타입
+					if ($("#orderForm #chk-agree_paymethod").is(":checked") == true) {
+						custPayMeans		= "Y";
+					}
 
 					// 주문상세데이타 생성
 					$("#orderDetailInfo .cartSq").each(function(){
@@ -1152,12 +1197,14 @@ var paymentInfoSet = function() {
 					var freegiftGoodsArr 		= $("#orderAmtForm .freegiftGoodsArr").text().split(",");
 					var freegiftUsePointArr 	= $("#orderAmtForm .freegiftUsePointArr").text().split(",");
 					
+					/*
 					if (!$("#orderForm #chk-agree_gift").is(":checked") == false) {
 						freegiftValArr 			= "";
 						freegiftSqArr 			= "";
 						freegiftGoodsArr 		= "";
 						freegiftUsePointArr 	= "";
 					}
+					*/
 					
 					// 주문데이타 생성
 					var orderData = {
@@ -1189,6 +1236,7 @@ var paymentInfoSet = function() {
 						,"freegiftGoodsArr"		: freegiftGoodsArr
 						,"freegiftUsePointArr"	: freegiftUsePointArr
 						,"giftMsg"				: giftMsg
+						,"custPayMeans"			: custPayMeans
 					};
 					
 					$.ajax( {
@@ -1439,7 +1487,8 @@ var dcAmtInfoSet = function() {
 					var freegiftUsePnt 		= parseInt($("#orderAmtForm .freegiftUsePnt").text());
 					var pntDcAmt 			= parseInt(uncomma($("#orderForm input[name='pntDcAmtStr']").val()));
 					var realOrdAmt 			= parseInt($("#orderAmtForm .realOrdSumAmt").text());
-					var applyPntDcAmt 		= (realOrdAmt * 40) / 100;
+					var pointUseMaxLimit	= parseInt($("#orderForm input[name='pointUseMaxLimit']").val());
+					var applyPntDcAmt 		= (realOrdAmt * pointUseMaxLimit) / 100;
 					
 					rmPntAmt				= rmPntAmt - freegiftUsePnt;
 					
@@ -1491,7 +1540,7 @@ var dcAmtInfoSet = function() {
 					
 					// 실결제금액보다 크게 적용 되었을때 적용 불가능
 					if (pntDcAmt > applyPntDcAmt) {
-						mcxDialog.alert("결제금액의 최대 40%를 초과 사용 할 수 없습니다.");
+						mcxDialog.alert("결제금액의 최대 " + pointUseMaxLimit +"%를 초과 사용 할 수 없습니다.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -2055,11 +2104,13 @@ var custCpnNotApply = function(obj, idx) {
 
 // 1.14 선포인트리셋기능 (사용안함)
 var prePntDcAmtReset = function() {
-	var rmPrePntAmt = 0; 
-	
-	if ($("#orderForm input[name='rmPrePntAmt']") > 0) {
+	// 2021.04.29 수정
+	var rmPrePntAmt = parseInt($("#orderForm input[name='rmPrePntAmt']").val());
+	if (rmPrePntAmt > 0) {
 		rmPrePntAmt = parseInt($("#orderForm input[name='rmPrePntAmt']").val());
 		$("#orderForm input[name='prePntDcAmt']").val(rmPrePntAmt);
+	} else {
+		rmPrePntAmt = 0;
 	}
 	
 	// 선포인트사용여부 체크 후 적용
@@ -2217,12 +2268,18 @@ var custCpnSumAmtCal = function() {
 		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
 		ordSumAmt			= ordSumAmt + ordAmt;
 		
-		// 선포인트사용여부
+		// 선포인트사용여부 
 		// 할인금액합계 = 다다익선수량금액 + 다다익선금액금액 + 상품쿠폰금액 + 장바구니금액 + 선포인트금액
 		if (prePntDcAmtYn == "Y") {
 			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt + prePntDcAmt1;
+			
+			// 2021.04.29 선포인트사용포인트 적립포인트금액 0원처리
+			if (prePntDcAmt1 < 1) {
+				savePntSumAmt	= savePntSumAmt + savePntAmt1;
+			}
 		} else {
 			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt;
+			savePntSumAmt	= savePntSumAmt + savePntAmt1;
 		}
 		
 		totDcSumAmt			= totDcSumAmt + dcSumAmt;
@@ -2231,7 +2288,7 @@ var custCpnSumAmtCal = function() {
 		$(this).parent().find(".ordAmt").text(ordAmt);
 		$(this).parent().find(".dcSumAmt").text(dcSumAmt);
 		
-		savePntSumAmt		= savePntSumAmt + savePntAmt1;
+		//savePntSumAmt		= savePntSumAmt + savePntAmt1;
 	});
 	
 	// 포인트, 상품권 금액 분배
@@ -2291,8 +2348,8 @@ var custCpnSumAmtCal = function() {
 	rmPntAmt 				= rmPntAmt - freegiftUsePnt; 
 	$("#orderForm .rmPntAmt").text(rmPntAmt.addComma());
 	
-	// 적립포인트
-	$("#savePntSumAmt").text(savePntSumAmt.addComma()+" P");
+	// 2021.04.29 적립포인트금액 선포인트 사용시 사용금액제외
+	$("#orderForm #savePntSumAmt").text(savePntSumAmt.addComma() + " P");
 	
 	// 사은품정보 설정
 	var freegiftValArr 			= [];

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

@@ -105,7 +105,7 @@
 					<div class="form_field">
 						<div class="agree_gift">
 							<p>
-								<input id="chk-agree_gift" type="checkbox" checked>
+								<input id="chk-agree_gift" type="checkbox">
 								<label for="chk-agree_gift"><span>동의합니다</span></label>
 							</p>
 							<p class="txt">사은품 지금에 대한 내용을 확인하였으며, 이에 동의합니다.</p>

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

@@ -128,7 +128,16 @@
 							<dd><em id="delvSumAmt" th:text="${#numbers.formatInteger(sumDelvFee, 1, 'COMMA')}"></em>원</dd>
 						</div>
 						<div>
-							<dt>상품할인(즉시할인)</dt>
+							<dt>상품할인</dt>
+							<th:block th:if="${goodsDcSumAmt} > 0">
+								<dd><span class="disc_amount" th:text="|-${#numbers.formatInteger(goodsDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+							</th:block>
+							<th:block th:if="${cpn1DcSumAmt} < 1">
+								<dd><span class="disc_amount" th:text="|${#numbers.formatInteger(goodsDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+							</th:block>
+						</div>
+						<div>
+							<dt>즉시할인</dt>
 							<th:block th:if="${cpn1DcSumAmt} > 0">
 								<dd><span class="disc_amount" id="cpn1DcSumAmt" th:text="|-${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')}원|"></span></dd>
 							</th:block>

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

@@ -95,7 +95,7 @@
 									‘전자상거래 등에서의 소비자보호에 관한 법률‘에 따라 현금 결제 시 서울보증보험㈜가 제공하는 소비자
 									피해보상보험을<br>신청할 수 있도록 해드리고 있습니다. (2013.11.28부터 시행)
 								</p>
-								<a href="" class="btn btn_default"><span>FAQ확인</span></a>
+								<a href="/callcenter/faq/form" class="btn btn_default"><span>FAQ확인</span></a>
 							</div>
 						</div>
 					</div>

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

@@ -164,6 +164,13 @@ $("#btn_delivery_addr_save").on("click", function(){
 		delvMemo = $("#deliveryAddForm input[name=delvMemoText]").val();
 	}
 	
+	// 2021.04.29 추가
+	if (gagajf.isNull(delvMemo)) {
+		mcxDialog.alert("기타사항을 입력해주세요.");
+		$("#deliveryAddForm input[name=delvMemoText]").focus();
+		return false;
+	}
+	
 	// custDelvAddrSq 부모창으로 전달
 	var delvObj = {
 		"custDelvAddrSq"	: 0
@@ -216,7 +223,7 @@ $("#btn_delivery_addr_save").on("click", function(){
 var deliveryAddFormCheck = function() {
 	// TODO 유효성 체크 추가
 	if (gagajf.isNull($("#deliveryAddForm input[name=recipNm]").val())) {
-		mcxDialog.alert("이름을 입력해주세요.");
+		mcxDialog.alert("받는분을 입력해주세요.");
 		$('#deliveryAddForm input[name=custNm]').focus();
 		return false;
 	}

+ 8 - 1
src/main/webapp/WEB-INF/views/mob/popup/DelvAddrModifyPopMob.html

@@ -195,6 +195,13 @@ $("#btn_delivery_modi_save").on("click", function(){
 		delvMemo = $("#deliveryModifyForm input[name=delvMemoText]").val();
 	}
 	
+	// 2021.04.29 추가
+	if (gagajf.isNull(delvMemo)) {
+		mcxDialog.alert("기타사항을 입력해주세요.");
+		$("#deliveryAddForm input[name=delvMemoText]").focus();
+		return false;
+	}
+	
 	// 배송지정보설정
 	var jsonObj = {
 		"defaultYn"			: defaultYn
@@ -245,7 +252,7 @@ $("#btn_delivery_modi_save").on("click", function(){
 var deliveryModifyFormCheck = function() {
 	// TODO 유효성 체크 추가
 	if (gagajf.isNull($("#deliveryModifyForm input[name=recipNm]").val())) {
-		mcxDialog.alert("이름을 입력해주세요.");
+		mcxDialog.alert("받는분을 입력해주세요.");
 		$('#deliveryModifyForm input[name=custNm]').focus();
 		return false;
 	}

+ 4 - 0
src/main/webapp/WEB-INF/views/web/common/layout/NoMemberLayoutWeb.html

@@ -61,6 +61,10 @@
 			<input type="hidden" name="ordDtlNo"/>
 			<input type="hidden" name="delvFeeCd"/>
 		</form>
+		<form id="addPaymentForm" name="addPaymentForm" th:action="@{'/order/addPaymentForm'}" th:method="post">
+			<input type="hidden" name="ordNo"/>
+			<input type="hidden" name="ordChgSq"/>
+		</form>
 	</div>
 </div>
 

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

@@ -281,7 +281,7 @@
 									<div class="swiper-wrapper">
 										<th:block th:each="planningData, planningStat : ${brandMainLayoutData.planningList}">
 										<div class="swiper-slide">
-											<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail('','','','SBM011',[[${planningData.planSq}]],'');">
+											<a href="javascript:void(0);" th:onclick="cfnGoToPlanDetail([[${planningData.planSq}]],[[${brandGroupInfo.brandGroupNo}]]);">
 												<div class="txtWrap">
 													<p th:text="${planningData.planNm}">티.바지.점퍼의 계절!</p>
 													<!--<p>가을 전격 오픈</p>-->

+ 139 - 69
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -203,17 +203,23 @@
 						<div class="cont_body">
 							<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
 								<th:block th:if="${ContentsData.contentsType!=null && ContentsData.contentsType!=''}">
-									<div class="ui_row" th:if="${ContentsData.contentsType=='1'}">
-										<div class="ui_col_6">
-											<a th:href="${ContentsData.strVar1}"><img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt=""></a>
+									<div class="bnnbox_crop" th:if="${ContentsData.contentsType=='1'}">
+										<div class="bnn_half" style="width: 100%;height: 230px;float: none;overflow: hidden;">
+											<a th:href="${ContentsData.strVar1}" target="_blank">
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt="">
+											</a>
 										</div>
 									</div>
-									<div class="ui_row" th:if="${ContentsData.contentsType=='2'}">
-										<div class="ui_col_6">
-											<a th:href="${ContentsData.strVar1}"><img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt=""></a>
+									<div class="bnnbox_crop" th:if="${ContentsData.contentsType=='2'}">
+										<div class="bnn_half">
+											<a th:href="${ContentsData.strVar1}" target="_blank">
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}" alt="">
+											</a>
 										</div>
-										<div class="ui_col_6">
-											<a th:href="${ContentsData.strVar2}"><img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath2}" alt=""></a>
+										<div class="bnn_half">
+											<a th:href="${ContentsData.strVar2}" target="_blank">
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath2}" alt="">
+											</a>
 										</div>
 									</div>
 								</th:block>
@@ -836,11 +842,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 100,
-		
-		// initialSlide: 0, 
+
+		// initialSlide: 0,
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250, 
+		// slidesOffsetBefore: 250,
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -865,11 +871,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 70,
-		
-		// initialSlide: 0, 
+
+		// initialSlide: 0,
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250, 
+		// slidesOffsetBefore: 250,
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -929,22 +935,22 @@ var main_trendy_slide = new Swiper('.main_trendy .post-trendy', {
 main_trendy_slide.on('slideChange', function () {
 	var newitemIndex = main_trendy_slide.activeIndex;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-	
+
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(0).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(3).addClass('scaleBig');
-	
+
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 });
 
 main_trendy_slide.on('reachEnd', function () {
 	var newitemIndex = main_trendy_slide.activeIndex + 1;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-	
+
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(1).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(4).addClass('scaleBig');
-	
+
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 	function l(n) {
 		if (n.direction !== "none")
@@ -1002,52 +1008,116 @@ var main_deal_slide = new Swiper ('.main_deal .post-deal', {
 	},
 });
 
-/* SLIDE - MAIN_PICK */
-var main_pick_nav = new Swiper('.main_pick .post-pick-nav', { //top
-	initialSlide: 1,
-	slidesPerView: 6,
-	// slidesPerGroup: 6,
-	loop: true,
-	loopeSlides: 6,
-	loopFillGroupWithBlank : true,
-	// slideToClickedSlide : true,
-	slideToClickedSlide : true,
-	loopAdditionalSlides : 1,
-	// centeredSlides : true,
-	watchSlidesVisibility: true,
-	watchSlidesProgress: true,
-	freeMode: false,
-	navigation: {
-		nextEl: '.main_pick .swiper-button-next',
-		prevEl: '.main_pick .swiper-button-prev',
-	},
-	autoplay: {
-		delay: 5000,
-		disableOnInteraction: false,
-	},
-});
-var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
-	initialSlide: 1,
-	slidesPerView: 1,
-	// slidesPerGroup: 6,
-	loop: true,
-	loopeSlides: 6,
-	spaceBetween: 10,
-	// loopFillGroupWithBlank : true,
-	loopAdditionalSlides: 1,
-	allowTouchMove: false,
-	navigation: {
-		nextEl: '.main_pick .swiper-button-next',
-		prevEl: '.main_pick .swiper-button-prev',
-	},
-	thumbs: {
-		swiper: main_pick_nav
-	},
-	autoplay: {
-		delay: 5000,
-		disableOnInteraction: false,
-	},
-});
+/* 브랜드 PICK 갯수체크 210430_수정 */
+var pickCont = $('.post-pick-nav .swiper-slide');
+var pickLength = pickCont.length;
+if (pickLength < 2) {
+	/* SLIDE - MAIN_PICK */
+	var main_pick_nav = new Swiper('.main_pick .post-pick-nav', { //top
+		initialSlide: 0,
+		slidesPerView: 6,
+		// slidesPerGroup: 6,
+		loop: false,
+		watchOverflow : true,
+		loopeSlides: 6,
+		loopFillGroupWithBlank : true,
+		// slideToClickedSlide : true,
+		slideToClickedSlide : true,
+		loopAdditionalSlides : 1,
+		// centeredSlides : true,
+		watchSlidesVisibility: true,
+		watchSlidesProgress: true,
+		freeMode: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+} else {
+	/* SLIDE - MAIN_PICK */
+	var main_pick_nav = new Swiper('.main_pick .post-pick-nav', { //top
+		initialSlide: 0,
+		slidesPerView: 6,
+		// slidesPerGroup: 6,
+		loop: true,
+		loopeSlides: 6,
+		loopFillGroupWithBlank : true,
+		// slideToClickedSlide : true,
+		slideToClickedSlide : true,
+		loopAdditionalSlides : 1,
+		// centeredSlides : true,
+		watchSlidesVisibility: true,
+		watchSlidesProgress: true,
+		freeMode: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+
+
+}
+
+/* 브랜드 PICK 갯수체크 210430_수정 */
+var pickForCont = $('.post-pick-for .swiper-slide');
+var pickForLength = pickForCont.length;
+if (pickForLength < 2) {
+	var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
+		initialSlide: 0,
+		slidesPerView: 1,
+		// slidesPerGroup: 6,
+		loop: false,
+		watchOverflow : true,
+		loopeSlides: 6,
+		spaceBetween: 10,
+		// loopFillGroupWithBlank : true,
+		loopAdditionalSlides: 1,
+		allowTouchMove: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		thumbs: {
+			swiper: main_pick_nav
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+}else{
+	var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
+		initialSlide: 0,
+		slidesPerView: 1,
+		// slidesPerGroup: 6,
+		loop: true,
+		loopeSlides: 6,
+		spaceBetween: 10,
+		// loopFillGroupWithBlank : true,
+		loopAdditionalSlides: 1,
+		allowTouchMove: false,
+		navigation: {
+			nextEl: '.main_pick .swiper-button-next',
+			prevEl: '.main_pick .swiper-button-prev',
+		},
+		thumbs: {
+			swiper: main_pick_nav
+		},
+		autoplay: {
+			delay: 5000,
+			disableOnInteraction: false,
+		},
+	});
+}
+
 // main_pick_nav.controller.control = main_pick_post;
 // main_pick_post.controller.control = main_pick_nav;
 
@@ -1070,8 +1140,8 @@ var main_pick_lookbook = new Swiper ('.main_pick .post-lookbook', {
 var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
 	slidesPerView: 1,
 	speed : 1500,
-	initialSlide: 2,
-	loop: true,
+	initialSlide: 0,
+	//loop: true,
 	watchOverflow: true, //loop와 함께 사용 불가.
 	autoplay: {
 		delay: 4000,
@@ -1095,9 +1165,9 @@ $(".main_recomm .tag_list .btn").click(function(){
 	$('#'+recommActive).addClass('active');
 });
 function init(){
-	
+
 	if(main_recomm_slide != null) main_recomm_slide.destroy();
-	
+
 	var main_recomm_slide = new Swiper ('.main_recomm .post-recomm', {
 		slidesPerView: 5,
 		slidesPerGroup: 5,
@@ -1149,7 +1219,7 @@ var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container',
 				$('#fy1').addClass('active');
 				cntNum = 0;
 			}
-			
+
 			clearInterval(ti);
 			ti = startTimeInterval();
 		}

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

@@ -1,6 +1,6 @@
 <!-- 배송지변경 팝업 -->
 <div class="modal-header">
-	<h5 class="modal-title" id="exchangeLabel">교환상품 옵션 변경</h5>
+	<h5 class="modal-title" id="exchangeLabel">교환 옵션 변경</h5>
 </div>
 <div class="modal-body">
 	<div class="pop_cont">

+ 20 - 22
src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html

@@ -347,34 +347,32 @@
 		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;				// 환불예정금액
-
+			let refundPoint = Number(result.spanPntDcAmt);							// 환불 포인트 금액
+			let refundGiftCard = Number(result.spanGfcdUseAmt);						// 환불 상품권 금액
+			let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);						// 환불 상품 금액
+			let spanCpnDcAmt = Number(result.spanCpnDcAmt);							// 쿠폰 할인 차감 금액
+			let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);						// 다다익선 할인 차감 금액
+			let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);					// 선포인트 할인 차감 금액
+			let sumDeliveryFee = Number(result.sumDeliveryFee);						// 원주문배송비
+			let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);				// 추가배송비 (무료배송비 허들 깨져서 발생한 배송비)
+			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() + '원');
+				//refundPayAmt = spanRefundAmt;
+				//$('#addDeliveryFee').css('display', '');
+				//$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
 				addPayCost = spanTotDeliveryFee;
 			} else {
 				addPayCost = 0;
 			}
-
+			
 			// 금액 설정
 			$('#returnAmt').text(returnAmt.addComma());
 			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());

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

@@ -41,7 +41,7 @@
 						<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>
-							<a href="javascript:void(0)" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this);">상세보기</a>
+<!--							<a href="javascript:void(0)" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this);">상세보기</a>-->
 						</div>
 						<div class="goods_cont">
 							<!-- 주문상품 -->
@@ -76,15 +76,16 @@
 												<p>
 													<span class="count"><em th:text="${cancelDtl.chgQty}"></em>개</span>
 												</p>
-												<p>
-													<span class="price_org" th:if="${cancelDtl.priceOrg > cancelDtl.priceSale}"><em th:text="${#numbers.formatInteger(cancelDtl.priceOrg, 1, 'COMMA')}"></em>원</span>
-													<span class="price_sale"><em th:text="${#numbers.formatInteger(cancelDtl.priceSale, 1, 'COMMA')}"></em>원</span>
-												</p>
+<!--												<p>-->
+<!--													<span class="price_org" th:if="${cancelDtl.priceOrg > cancelDtl.priceSale}"><em th:text="${#numbers.formatInteger(cancelDtl.priceOrg, 1, 'COMMA')}"></em>원</span>-->
+<!--													<span class="price_sale"><em th:text="${#numbers.formatInteger(cancelDtl.priceSale, 1, 'COMMA')}"></em>원</span>-->
+<!--												</p>-->
 											</div>
 										</div>
 										<div class="status_box">
 											<p>
-												<th:block th:text="${cancelDtl.chgStatNm}"></th:block>
+												<th:block th:if="${cancelDtl.chgStat == 'G685_17' or cancelDtl.chgStat == 'G685_18'}" th:text="|주문취소|"></th:block>
+												<th:block th:unless="${cancelDtl.chgStat == 'G685_17' or cancelDtl.chgStat == 'G685_18'}" th:text="${cancelDtl.chgStatNm}"></th:block>
 												<span class="date" th:text="${cancelDtl.chgDate}"></span>
 												<span class="time" th:text="${cancelDtl.chgTime}"></span>
 											</p>

+ 85 - 17
src/main/webapp/WEB-INF/views/web/mypage/MypageCreExchangeDetailFormWeb.html

@@ -40,7 +40,7 @@
 						<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>
-							<a href="javascript:void(0)" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this);">상세보기</a>
+							<a href="javascript:void(0)" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" th:attr="ordNo=${oneData.ordNo}, ordChgSq=${oneData.ordChgSq}, cancelGb=${oneData.chgGb}" onclick="fnCreCancel(this);">전체신청취소</a>
 						</div>
 						<div class="goods_cont">
 							<!-- 주문상품 -->
@@ -75,10 +75,10 @@
 												<p>
 													<span class="count"><em th:text="${exchangeDtl.chgQty}"></em>개</span>
 												</p>
-												<p>
-													<span class="price_org" th:if="${exchangeDtl.priceOrg > exchangeDtl.priceSale}"><em th:text="${#numbers.formatInteger(exchangeDtl.priceOrg, 1, 'COMMA')}"></em>원</span>
-													<span class="price_sale"><em th:text="${#numbers.formatInteger(exchangeDtl.priceSale, 1, 'COMMA')}"></em>원</span>
-												</p>
+<!--												<p>-->
+<!--													<span class="price_org" th:if="${exchangeDtl.priceOrg > exchangeDtl.priceSale}"><em th:text="${#numbers.formatInteger(exchangeDtl.priceOrg, 1, 'COMMA')}"></em>원</span>-->
+<!--													<span class="price_sale"><em th:text="${#numbers.formatInteger(exchangeDtl.priceSale, 1, 'COMMA')}"></em>원</span>-->
+<!--												</p>-->
 											</div>
 											<div class="gd_opt">
 												<div class="option_wrap">
@@ -90,14 +90,17 @@
 										</div>
 										<div class="status_box">
 											<p>
-												<th:block th:text="${exchangeDtl.chgStatNm}"></th:block>
+												<th:block th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_20' or exchangeDtl.ordDtlStat == 'G013_30' or exchangeDtl.ordDtlStat == 'G013_35' or exchangeDtl.ordDtlStat == 'G013_40' or exchangeDtl.ordDtlStat == 'G013_50')}" th:text="|교환진행중|"></th:block>
+												<th:block th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_60' or exchangeDtl.ordDtlStat == 'G013_70')}" th:text="|교환완료|"></th:block>
+												<th:block th:unless="${exchangeDtl.chgStat == 'G685_40'}" th:text="${exchangeDtl.chgStatNm}"></th:block>
 												<span class="date" th:text="${exchangeDtl.chgDate}"></span>
 												<span class="time" th:text="${exchangeDtl.chgTime}"></span>
 											</p>
 										</div>
 										<div class="button_box">
-											<p th:if="${exchangeDtl.chgStat == 'G685_20' or exchangeDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordChgSq=${exchangeDtl.ordChgSq}" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>
+<!--											<p th:if="${exchangeDtl.chgStat == 'G685_20' or exchangeDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${exchangeDtl.ordNo}, ordChgSq=${exchangeDtl.ordChgSq}, cancelGb=${exchangeDtl.chgGb}" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>-->
 											<p th:if="${exchangeDtl.chgStat == 'G685_32' or exchangeDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${exchangeDtl.ordNo}, ordChgSq=${exchangeDtl.ordChgSq}" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>
+											<p th:if="${exchangeDtl.chgStat == 'G685_40' && (exchangeDtl.ordDtlStat == 'G013_20' or exchangeDtl.ordDtlStat == 'G013_30' or exchangeDtl.ordDtlStat == 'G013_35' or exchangeDtl.ordDtlStat == 'G013_40' or exchangeDtl.ordDtlStat == 'G013_50')}"><button type="button" class="btn btn_default btn_sm" ordDtlNo="' + cre.ordDtlNo + '" onclick="fnGoToDeliveryTrack(this);"><span>배송조회</span></button></p>
 											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
 										</div>
 									</div>
@@ -132,7 +135,7 @@
 								</tr>
 								<tr>
 									<th>교환완료 일자</th>
-									<td th:text="${oneData.completeDt}"></td>
+									<td th:if="${oneData.chgStat == 'G685_40' && (oneData.ordDtlStat == 'G013_60' or oneData.ordDtlStat == 'G013_70')}" th:text="${oneData.completeDt}"></td>
 								</tr>
 							</tbody>
 						</table>
@@ -174,7 +177,7 @@
 						</table>
 					</div>
 					<th:block th:if="${oneData.wdGb == 'W'}">
-						<h4 class="subH3">상품 회수지</h4>
+						<h4 class="subH3">교환 회수지 주소</h4>
 						<div class="tbl type1">
 							<table>
 								<colgroup>
@@ -220,6 +223,61 @@
 							</table>
 						</div>
 					</th:block>
+					<th:block th:if="${oneData.addPayCost > 0}">
+						<h4 class="subH3">결제정보</h4>
+						<div class="tbl type6">
+							<table>
+								<colgroup>
+									<col width="50%">
+									<col width="50%">
+								</colgroup>
+								<tbody>
+									<tr>
+										<td>
+											<dl>
+												<div>
+													<dt>배송비</dt>
+													<dd>
+														<div class="price">
+															<span class="order_total_price"><em th:text="${#numbers.formatInteger(oneData.addPayCost, 1, 'COMMA')}"></em>원</span>
+														</div>
+													</dd>
+												</div>
+	<!--											<div class="include_item"> &lt;!&ndash; 할인항목 표기 class명 include_item &ndash;&gt;-->
+	<!--												<dt>제휴할인</dt>-->
+	<!--												<dd><em>-123,456,789</em>원</dd>-->
+	<!--											</div>-->
+											</dl>
+										</td>
+										<td>
+											<dl>
+												<div>
+													<dt>결제 금액</dt>
+													<dd>
+														<div class="price">
+															<span class="pay_total_price"><em th:text="${#numbers.formatInteger(oneData.addPayCost, 1, 'COMMA')}"></em>원</span>
+														</div>
+													</dd>
+												</div>
+												<div>
+													<dt class="sr-only">결제방법</dt>
+													<dd th:if="${oneData.payMeans == 'G014_30'}" th:text="|${oneData.payMeansNm}(${oneData.cardNm}) / ${oneData.cardMips}|"></dd>
+													<dd th:if="${oneData.payMeans == 'G014_60'}" th:text="${oneData.payMeansNm}"></dd>
+												</div>
+												<div th:if="${oneData.payMeans == 'G014_30'}">
+													<dt class="sr-only">영수증 확인</dt>
+													<dd>
+														<button type="button" class="btn btn_default btn_sm" onclick="fnReceipt('card')"><span>신용카드 전표</span></button>
+													</dd>
+												</div>
+											</dl>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+							<p class="t_help">※ NPAY등의 대체결제수단으로 결제 시 해당 결제 플랫폼에서 영수증 확인이 가능합니다.</p>
+						</div>
+					</th:block>
 					<div class="btn_footer_area">
 						<button type="button" class="btn btn_dark btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);"><span>확인</span></button>
 					</div>
@@ -233,6 +291,16 @@
 	/*<![CDATA[*/
 	let addrGb = '';
 	let memoGb = '';
+	let oneData = [[${oneData}]];
+	let ordNo = oneData.ordNo;
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+
+	// 추가배송비 전표 데이터 설정
+	let paymentInfo = {};
+	paymentInfo.pgTid = oneData.pgTid;
+	let orderAmtInfo = {};
+	orderAmtInfo.realOrdAmt = oneData.addPayCost;
+	orderAmtInfo.realDelvAmt = 0;
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
@@ -241,19 +309,19 @@
 		// 마이페이지 location 설정
 		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 상세');
 	});
-	
+
 	// 배송메모 및 반품메모 변경 처리
 	var fnChangeMemo = function(param) {
 		memoGb = param;
 		fnChangeDeliveryMemo();
 	}
-	
+
 	// 배송지 및 교환지 변경 처리
 	var fnChangeAddr = function(param) {
 		addrGb = param;
 		fnChangeDeliveryAddr();
 	}
-	
+
 	// 배송지 및 회수지 정보 설정
 	var delvAddrSet = function(delvObj) {
 		let url = '';
@@ -307,16 +375,16 @@
 			}
 		});
 	}
-	
+
 	// 배송메모 설정
 	var delvMemoSet = function(delvMemoObj) {
 		let url = '';
 		let ordChgSq = oneData.ordChgSq;
 		let delvAddrSq = oneData.delvAddrSq;
 		let delvMemo = delvMemoObj.delvMemo;
-		
+
 		let data = {};
-		
+
 		if (memoGb == 'chger') {
 			url = '/mypage/change/chger/rtn/memo';
 			data.ordChgSq = ordChgSq;
@@ -326,9 +394,9 @@
 			data.delvAddrSq = delvAddrSq;
 			data.delvMemo = delvMemo;
 		}
-		
+
 		let jsonData = JSON.stringify(data);
-		
+
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 			if (result.status == '200') {
 				if (memoGb == 'chger') {

+ 29 - 9
src/main/webapp/WEB-INF/views/web/mypage/MypageCreListFormWeb.html

@@ -394,19 +394,14 @@
 					}
 					tag += '												</div>\n';
 					tag += '											</div>\n';
-					tag += '											<div class="gd_calc">\n';
-					tag += '												<p>\n';
-					tag += '													<span class="count"><em>' + cre.chgQty + '</em>개</span>\n';
-					tag += '												</p>\n';
-					tag += '											</div>\n';
 					tag += '											<div class="gd_opt">\n';
 					tag += '												<div class="option_wrap">\n';
 					// 교환옵션
 					if (cre.chgGb == 'G680_40') {
 						$.each(creList.exchangeOptionList, function(index, exchange) {
 							if (cre.chgOrdDtlNo == exchange.ordDtlNo) {
+								tag += '													<span class="title">교환 옵션</span>';
 								if (cre.goodsType == 'G056_S') {
-									tag += '													<span class="title">교환 옵션</span>';
 									$.each(exchange.colorNmArr, function (index2, option) {
 										tag += '													<span class="option">' + exchange.itemNmArr[index2] + ' / ' + option + ' / ' + exchange.optCd2Arr[index2] + '</span>\n';
 									});
@@ -418,10 +413,31 @@
 					}
 					tag += '												</div>\n';
 					tag += '											</div>\n';
+					tag += '											<div class="gd_calc">\n';
+					tag += '												<p>\n';
+					tag += '													<span class="count"><em>' + cre.chgQty + '</em>개</span>\n';
+					tag += '												</p>\n';
+					tag += '											</div>\n';
 					tag += '										</div>\n';
 					tag += '										<div class="status_box">\n';
 					tag += '											<p>\n';
-					tag += '												' + cre.chgStatNm + '\n';
+					if (cre.chgStat == 'G685_17' || cre.chgStat == 'G685_18') {
+						tag += '												주문취소\n';
+					} else if (cre.chgStat == 'G685_40') {
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_20' || exchange.ordDtlStat == 'G013_30' || exchange.ordDtlStat == 'G013_35' || exchange.ordDtlStat == 'G013_40' || exchange.ordDtlStat == 'G013_50')) {
+								tag += '												교환진행중\n';
+							} else if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_60' || exchange.ordDtlStat == 'G013_70')) {
+								tag += '												교환완료\n';
+							}
+						});
+					} else if (cre.chgStat == 'G685_33') {
+						tag += '												환불진행중\n';
+					} else if (cre.chgStat == 'G685_49' || cre.chgStat == 'G685_69') {
+						tag += '												접수취소\n';
+					} else {
+						tag += '												' + cre.chgStatNm + '\n';
+					}
 					tag += '												<span class="date">' + cre.chgDate + '</span>\n';
 					tag += '												<span class="time">' + cre.chgTime + '</span>\n';
 					tag += '											</p>\n';
@@ -434,7 +450,11 @@
 						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>\n';
 					}
 					if (cre.chgStat == 'G685_40') {
-						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordDtlNo="' + cre.ordDtlNo + '" onclick="fnGoToDeliveryTrack(this);"><span>배송조회</span></button></p>\n';
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_20' || exchange.ordDtlStat == 'G013_30' || exchange.ordDtlStat == 'G013_35' || exchange.ordDtlStat == 'G013_40' || exchange.ordDtlStat == 'G013_50')) {
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" ordDtlNo="' + cre.ordDtlNo + '" onclick="fnGoToDeliveryTrack(this);"><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';
 					tag += '										</div>\n';
@@ -494,7 +514,7 @@
 					}
 					// 환불진행중
 					if (cre.chgStat == 'G685_33') {
-						tag += '									<div class="order_text"><p>' + cre.refundAmt.addComma() + '원 환불을 진행하고 있습니다.(영업일 최대 3일 내 환불 예정)</p></div>\n';
+						tag += '									<div class="order_text"><p>환불을 진행하고 있습니다.(영업일 최대 3일 내 환불 예정)</p></div>\n';
 					}
 					// 반품완료
 					if (cre.chgStat == 'G685_60') {

+ 12 - 8
src/main/webapp/WEB-INF/views/web/mypage/MypageCreReturnDetailFormWeb.html

@@ -40,7 +40,7 @@
 						<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>
-							<a href="javascript:void(0)" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this);">상세보기</a>
+							<a href="javascript:void(0)" th:attr="ordNo=${oneData.ordNo}, ordChgSq=${oneData.ordChgSq}, cancelGb=${oneData.chgGb}" onclick="fnCreCancel(this);">전체신청취소</a>
 						</div>
 						<div class="goods_cont">
 							<!-- 주문상품 -->
@@ -75,21 +75,23 @@
 												<p>
 													<span class="count"><em th:text="${returnDtl.chgQty}"></em>개</span>
 												</p>
-												<p>
-													<span class="price_org" th:if="${returnDtl.priceOrg > returnDtl.priceSale}"><em th:text="${#numbers.formatInteger(returnDtl.priceOrg, 1, 'COMMA')}"></em>원</span>
-													<span class="price_sale"><em th:text="${#numbers.formatInteger(returnDtl.priceSale, 1, 'COMMA')}"></em>원</span>
-												</p>
+<!--												<p>-->
+<!--													<span class="price_org" th:if="${returnDtl.priceOrg > returnDtl.priceSale}"><em th:text="${#numbers.formatInteger(returnDtl.priceOrg, 1, 'COMMA')}"></em>원</span>-->
+<!--													<span class="price_sale"><em th:text="${#numbers.formatInteger(returnDtl.priceSale, 1, 'COMMA')}"></em>원</span>-->
+<!--												</p>-->
 											</div>
 										</div>
 										<div class="status_box">
 											<p>
-												<th:block th:text="${returnDtl.chgStatNm}"></th:block>
+												<th:block th:if="${returnDtl.chgStat == 'G685_33'}" th:text="|환불진행중|"></th:block>
+												<th:block th:if="${returnDtl.chgStat == 'G685_69'}" th:text="|접수취소|"></th:block>
+												<th:block th:unless="${returnDtl.chgStat == 'G685_33'}" th:text="${returnDtl.chgStatNm}"></th:block>
 												<span class="date" th:text="${returnDtl.chgDate}"></span>
 												<span class="time" th:text="${returnDtl.chgTime}"></span>
 											</p>
 										</div>
 										<div class="button_box">
-											<p th:if="${returnDtl.chgStat == 'G685_50' or returnDtl.chgStat == 'G685_51'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${returnDtl.ordNo}, ordChgSq=${returnDtl.ordChgSq}, cancelGb=${returnDtl.chgGb}" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>
+<!--											<p th:if="${returnDtl.chgStat == 'G685_50' or returnDtl.chgStat == 'G685_51'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${returnDtl.ordNo}, ordChgSq=${returnDtl.ordChgSq}, cancelGb=${returnDtl.chgGb}" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>-->
 											<p th:if="${returnDtl.chgStat == 'G685_32' or returnDtl.chgStat == 'G685_51'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${returnDtl.ordNo}, ordChgSq=${returnDtl.ordChgSq}" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>
 											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
 										</div>
@@ -133,7 +135,7 @@
 						</table>
 					</div>
 					<th:block th:if="${oneData.wdGb == 'W'}">
-						<h4 class="subH3">상품 회수지</h4>
+						<h4 class="subH3">반품 회수지 주소</h4>
 						<div class="tbl type1">
 							<table>
 								<colgroup>
@@ -269,6 +271,8 @@
 	/*<![CDATA[*/
 	let oneData = [[${oneData}]];
 	var isLogin = [[${isLogin}]];
+	let ordNo = oneData.ordNo;
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
 	let jsonObj = {};
 
 	$(document).ready(function() {

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

@@ -52,7 +52,7 @@
 				<div id="nodata" class="nodata">
 					<div class="txt_box">
 						<p>
-							현재 노출 할 수 있는 데이터가 없습니다.<br>
+							등록된 배송지가 없습니다.<br/>
 						</p>
 					</div>
 				</div>
@@ -65,7 +65,7 @@
 		<!-- // CONT-BODY -->
 	</div>
 </div>
-	<script th:inline="javascript">
+<script th:inline="javascript">
 	/*<![CDATA[*/
 
 	var fnCustDeliveryAddList = function () {

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

@@ -139,7 +139,7 @@
 										<td>
 											<div class="form_field">
 												<div class="input_wrap">
-													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요." onkeyup="cfnGetTextLength(this, 200, $('#reason_cnt'));" style="resize: none;"></textarea>
+													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" maxlength="200" placeholder="자세한 사유를 입력해주세요." onkeyup="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
 													<p class="txt_cnt"><span id="reason_cnt" class="c_primary">0</span>/200</p>
 												</div>
 											</div>
@@ -379,9 +379,9 @@
 			let qty = item.chgQty;
 
 			if (goodsType == 'G056_S') {
-				html += '												<span class="option">' + itemNm + ' / ' + colorNm + ' / ' + optCd2 + ' / ' + qty + '개</span>\n';
+				html += '												<span class="option">' + itemNm + ' / ' + colorNm + ' / ' + optCd2 + '</span>\n';
 			} else {
-				html += '												<span class="option">' + colorNm + ' / ' + optCd2 + ' / ' + qty + '개</span>\n';
+				html += '												<span class="option">' + colorNm + ' / ' + optCd2 + '</span>\n';
 			}
 		});
 
@@ -431,9 +431,9 @@
 			if (chgOrdDtlNoArr.includes($(item).attr('ordDtlNo')) && !gagajf.isNull($(item).val())) {
 				let json = $(item).val();
 				let jsonData = JSON.parse(json);
+				let cancelReq = {};
 				$.each(jsonData, function (index, chgOpt) {
-					let cancelReq = {};
-					cancelReq.ordDtlNo = ordDtlNo;
+					cancelReq.ordDtlNo = chgOpt.ordDtlNo;
 					cancelReq.ordDtlItemSq = chgOpt.ordDtlItemSq;
 					cancelReq.delvFeeCd = delvFeeCd;
 					cancelReq.supplyCompCd = supplyCompCd;
@@ -489,10 +489,10 @@
 			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);

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

@@ -126,7 +126,7 @@
 							</tr>
 							<tr>
 								<td>
-									<textarea class="doc_exchange" name="chgMemo" id="chgMemo" placeholder="자세한 사유를 입력해주세요." onkeyup="cfnGetTextLength(this, 200, $('#exchange_cnt'));"></textarea>
+									<textarea class="doc_exchange" name="chgMemo" id="chgMemo" placeholder="자세한 사유를 입력해주세요." onkeyup="fnGetTextLength(this, 200);"></textarea>
 									<p class="txt_cnt"><span id="exchange_cnt" class="c_primary">0</span>/200</p>
 								</td>
 							</tr>

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

@@ -48,7 +48,8 @@
 								<div class="goods_head">
 									<p th:unless="${order.giftPackYn == 'Y'}">주문일 <span th:text="${order.ordDt}"></span></p>
 									<p th:if="${order.giftPackYn == 'Y'}">선물일 <span th:text="${order.ordDt}"></span></p>
-									<li><a href="javascript:void(0)" th:if="${order.allCanYn == 'Y' and order.ordReqChgQty == 0}" onclick="fnAllCancel();">주문전체취소</a></li>
+									<li><a href="javascript:void(0)" th:if="${allCanYn == 'Y' and order.ordReqChgQty == 0}" onclick="fnAllCancel();">주문전체취소</a></li>
+									<li><a href="javascript:void(0)" th:if="${allDecideYn == 'Y'}"  th:attr="ordNo=${ordNo}" onclick="fnAllDecideOrder(this);">전체구매확정</a></li>
 								</div>
 								<div class="goods_cont">
 									<!-- 주문상품 -->
@@ -103,7 +104,8 @@
 													</th:block>
 													<!-- 주문 -->
 													<th:block th:unless="${order.giftPackYn == 'Y'}">
-														<p th:text="${ordDtl.ordDtlStatNm}"></p>
+														<p th:if="${ordDtl.ordDtlStat == 'G013_10'}">주문접수</p>
+														<p th:unless="${ordDtl.ordDtlStat == 'G013_10'}" th:text="${ordDtl.ordDtlStatNm}"></p>
 													</th:block>
 												</div>
 												<div class="button_box">
@@ -211,10 +213,10 @@
 											<th:block th:unless="${order.giftPackYn == 'Y'}">
 												<!-- 주문 접수 -->
 												<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_10'}">
-													<p>주문이 완료되어 결제를 기다리고 있습니다.</p>
+													<p>주문 완료/결제를 기다리고 있습니다.</p>
 	
 													<!-- 예약 상품 -->
-													<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+													<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
 												</div>
 												
 												<!-- 상품준비중 -->
@@ -222,7 +224,7 @@
 													<p>배송할 상품을 준비 중입니다.</p>
 	
 													<!-- 예약 상품 -->
-													<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+													<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
 												</div>
 												
 												<!-- 배송준비중 -->
@@ -230,7 +232,7 @@
 													<p>상품 준비가 완료되어 곧 배송될 예정입니다.</p>
 	
 													<!-- 예약 상품 -->
-													<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+													<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
 												</div>
 												
 												<!-- 배송중, 배송완료 -->
@@ -673,6 +675,44 @@
 			cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
 		});
 	}
+	
+	// 전체구매확정 버튼 클릭 이벤트
+	var fnAllDecideOrder = function(param) {
+		let orderDecisionArr = [];
+		let ordNo = $(param).attr('ordNo');
+
+		// 주문상세번호 설정
+		$.each($('#orderDetailForm input[name=ordDtlNoArr]'), function(idx, item) {
+			orderDecisionArr.push($(item).val());
+		});
+		
+		if (orderDecisionArr.length == 0) {
+			mcxDialog.alert('구매확정 가능한 상품이 없습니다.');
+			return false;
+		}
+		
+		mcxDialog.confirm('구매확정 후에는 반품/교환이 불가합니다. 구매확정하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				let data = {};
+				
+				data.ordNo = ordNo;
+				data.ordDtlNoArr = orderDecisionArr;
+				
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/mypage/order/decision'
+					, jsonData
+					, function() {
+						if (typeof(fnReloadStatusCount) == 'function') {
+							fnReloadStatusCount();
+						} else {
+							cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
+						}
+					});
+			}
+		});
+	}
 </script>
 
 </th:block>

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

@@ -485,6 +485,8 @@
 						} else if (ordDtl.ordDtlStat == 'G013_98' || ordDtl.ordDtlStat == 'G013_99' || ordDtl.giftLimitDay < 0) {
 							tag += '											<p>선물 취소</p>\n';
 						}
+					} else if (ordDtl.ordDtlStat == 'G013_10') {
+						tag += '											<p>주문접수</p>\n';
 					} else {
 						tag += '											<p>' + ordDtl.ordDtlStatNm + '</p>\n';
 					}
@@ -587,10 +589,10 @@
 						// 주문 접수
 						if (ordDtl.ordDtlStat == 'G013_10') {
 							tag += '									<div class="order_text">';
-							tag += '										<p>주문이 완료되어 결제를 기다리고 있습니다.</p>';
+							tag += '										<p>주문 완료/결제를 기다리고 있습니다.</p>';
 							// 예약상품
 							if (!gagajf.isNull(ordDtl.delvResDt)) {
-								tag += '										<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
+								tag += '										<p>예약판매 상품으로 ' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
 							}
 							tag += '									</div>\n';
 						}
@@ -598,7 +600,7 @@
 						// 결제완료
 						if (ordDtl.ordDtlStat == 'G013_20' && !gagajf.isNull(ordDtl.delvResDt)) {
 							tag += '									<div class="order_text">';
-							tag += '										<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
+							tag += '										<p>예약판매 상품으로 ' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
 							tag += '									</div>\n';
 						}
 						
@@ -608,7 +610,7 @@
 							tag += '										<p>배송할 상품을 준비 중입니다.</p>';
 							// 예약상품
 							if (!gagajf.isNull(ordDtl.delvResDt)) {
-								tag += '										<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
+								tag += '										<p>예약판매 상품으로 ' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
 							}
 							tag += '									</div>\n';
 						}
@@ -619,7 +621,7 @@
 							tag += '										<p>상품 준비가 완료되어 곧 배송될 예정입니다.</p>';
 							// 예약상품
 							if (!gagajf.isNull(ordDtl.delvResDt)) {
-								tag += '										<p>예약판매 상품으로' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
+								tag += '										<p>예약판매 상품으로 ' + ordDtl.delvResDt + ' 출고 예정입니다.</p>';
 							}
 							tag += '									</div>\n';
 						}

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

@@ -139,7 +139,7 @@
 										<td>
 											<div class="form_field">
 												<div class="input_wrap">
-													<textarea class="doc_reason" name="chgMemo" id="chgMemo" 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="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
 													<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
 												</div>
 											</div>
@@ -503,44 +503,47 @@
 
 			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);
-
+				let refundPoint = Number(result.spanPntDcAmt);							// 환불 포인트 금액
+				let refundGiftCard = Number(result.spanGfcdUseAmt);						// 환불 상품권 금액
+				let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);						// 환불 상품 금액
+				let spanCpnDcAmt = Number(result.spanCpnDcAmt);							// 쿠폰 할인 차감 금액
+				let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);						// 다다익선 할인 차감 금액
+				let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);					// 선포인트 할인 차감 금액
+				let sumDeliveryFee = Number(result.sumDeliveryFee);						// 원주문배송비 (반품에서는 안돌려줘서 항상 0일듯)
+				let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);				// 추가배송비 (무료배송비 허들 깨져서 발생한 배송비)
+				let spanTotRtnDelvFee = Number(result.spanTotRtnDelvFee);				// 반품배송비 (회수요청으로 인한 반품 배송비)
+				let spanRealCnclRtnAmt = Number(result.spanRealCnclRtnAmt);				// 환불 상품 실결제 금액 (환불상품금액 - 할인차감금액)
+				let spanRefundAmt = spanRealCnclRtnAmt + sumDeliveryFee;				// 환불예정금액 (환불상품실결제금액 + 원주문배송비)
+				
 				// 반품 사유 및 반품 방식 배송비 계산
 				if (result.spanRealCnclRtnAmt > 0) {
 					let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
 					// 회사사유 : 추가배송비 0, 반품배송비 0
 					if (!isCustomer) {
 						spanTotRtnDelvFee = 0;
+						spanTotDeliveryFee = 0;
 					}
 					// 고객사유(직접발송) : 반품배송비 0
 					else if (wdGb == 'D') {
 						spanTotRtnDelvFee = 0;
 					}
+				} else {
+					spanTotRtnDelvFee = 0;
+					spanTotDeliveryFee = 0;
 				}
-
+				
 				let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
-				let addDelvFee = spanTotRtnDelvFee;											// 추가배송비
-				let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
-				let refundPayAmt = spanRefundAmt - spanTotRtnDelvFee;						// 결제금액 환불
-
-				if (!isCustomer) {
-					refundPayAmt += spanTotDeliveryFee;
-				}
-
+				let addDelvFee = spanTotRtnDelvFee + spanTotDeliveryFee;					// 추가배송비
+				let deductDcAmt = spanCpnDcAmt + spanTmtbDcAmt + spanPrePntDcAmt;			// 할인금액 차감(쿠폰+다다익선+선포인트)
+				let refundPayAmt = spanRefundAmt - addDelvFee;								// 결제금액 환불
+				
 				// 추가배송비 영역 설정
 				if (refundPayAmt < 0) {
 					refundPayAmt += addDelvFee;
@@ -553,7 +556,7 @@
 				}
 				
 				let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
-
+				
 				// 금액 설정
 				$('#returnAmt').text(returnAmt.addComma());
 				$('#goodsCancelAmt').text(goodsCancelAmt.addComma());

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

@@ -150,7 +150,7 @@
 										</tr>
 										<tr>
 											<td>
-												<textarea class="doc_exchange" name="chgMemo" id="chgMemo" placeholder="자세한 사유를 입력해주세요." onkeyup="cfnGetTextLength(this, 200, $('#return_cnt'));"></textarea>
+												<textarea class="doc_exchange" name="chgMemo" id="chgMemo" placeholder="자세한 사유를 입력해주세요." onkeyup="fnGetTextLength(this, 200);"></textarea>
 												<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
 											</td>
 										</tr>

+ 277 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

@@ -0,0 +1,277 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * * @source  : MypageReviewDetailFormWeb.html
+ * @desc	: 상품평 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.03   sowon		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="pdPhotoReviewDetailLabel">포토/영상 리뷰</h5>
+		</div>
+		<div class="modal-body" id="reviewBody">
+		</div>
+	</div>
+</div>
+<form name="reviewDetailForm" id="reviewDetailForm" method="post">
+<input type="hidden" name="goodsCd" th:value="${review.goodsCd}" />
+<!-- <input type="hidden" name="bestYn" th:value="${review.bestYn}" /> -->
+<input type="hidden" name="photoYn" th:value="${review.photoYn}" />
+<input type="hidden" name="reviewSq" th:value="${review.reviewSq}" />
+</form>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	var fnReviewDetail = function() {
+		
+		var params = new Object();
+		params.goodsCd = $('#reviewDetailForm input[name=goodsCd]').val();
+		params.reviewSq = $('#reviewDetailForm input[name=reviewSq]').val();
+		//params.bestYn =$('#reviewDetailForm input[name=bestYn]').val();
+		params.photoYn = $('#reviewDetailForm input[name=photoYn]').val();
+		
+		gagajf.ajaxSubmit("/goods/review/detail/list", "json", fnReviewDetailCallback, params);
+	}
+
+	var fnReviewDetailCallback = function(result) {
+		$('#reviewBody').html('');
+		// 목록
+		if (result.reviewList != null && result.reviewList.length > 0) {
+			let fileGbClass = '';
+			$.each(result.reviewList, function(idx, review) {
+				let tag = '';
+				tag +='<div class="pop_cont">\n';
+				tag +='<div class="swiper-container detail">\n';
+				tag +='<div class="swiper-wrapper">\n';
+				tag +='<div class="swiper-slide">\n';
+				
+				let reviewClass = 'empty_photo';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					reviewClass = '';
+				}
+				tag +='<div class="review '+reviewClass+'" >\n';  <!-- 첨부이미지 없을 시 empty_photo 클래스 추가 --> 
+				tag +='	<div class="pic">\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='		<span class="thumb" class="'+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
+						if (reviewAttach.fileGb == "M") {
+				tag +='			<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">\n';
+				tag +='				<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">\n';
+				tag +='			</video>\n';
+						}else{
+				tag +='			<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
+						}
+				tag +='		</span>\n';
+						return false;
+					});	
+				}else{
+				tag +='		<span class="thumb">\n';
+				tag +='			<img src="'+_uploadGoodsUrl +'/'+review.sysImgNm+'?RS=365" alt="" onerror="' + _uximgUrl + '/images/pc/thumb/bg_item_none.png"  />\n';
+				tag +='		</span>\n';	
+				}
+				tag +='	</div>\n';
+				tag +='	<div class="review_cont">\n';
+				tag +='		<div class="box_wrap">\n';
+				tag +='			<div class="star_box">\n';
+				tag +='				<div class="star_score">\n';
+				tag +='					<span class="star">\n';
+				tag +='						<em class="progbar" style="width:'+(review.iscore*20)+'%;"></em>\n'; <!-- 평점 style로 표기 -->
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="response_box">\n';
+				tag +='				<div class="full">\n';
+				tag +='					<dl>\n';
+				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
+					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
+				tag +='						<div>\n';
+				tag +='							<dt>구매옵션</dt>\n';
+				tag +='							<dd>'+ reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2+'</dd>\n';
+				tag +='						</div>\n';
+					});		
+				}
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				tag +='				<div class="full">\n';
+				tag +='					<dl>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>키/몸무게</dt>\n';
+				tag +='							<dd>'+review.height+' / '+review.weight +' \n';
+				tag +='							</dd>\n';
+				tag +='						</div>\n';
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				if (!gagajf.isNull(review.sizeGb)){  <!-- 사이즈구분(T:상의, B:하의, S:신발) -->
+				tag +='				<div>\n'; 
+				tag +='					<dl > \n';
+				tag +='						<div>\n';
+				tag +='							<dt>사이즈</dt>\n';
+				tag +='							<dd>'+review.scoreSizeNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>컬러</dt>\n';
+				tag +='							<dd>'+review.scoreColorNm+'</dd>\n';
+				tag +='						</div>\n';
+					if (review.sizeGb == 'T' || review.sizeGb == 'B'){
+				tag +='						<div>\n';
+				tag +='							<dt>핏</dt>\n';
+				tag +='							<dd>'+review.scoreFitNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>두께감</dt>\n';
+				tag +='							<dd>'+ review.scoreThickNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+					if (review.sizeGb == 'S'){
+				tag +='						<div>\n';
+				tag +='							<dt>무게감</dt>\n';
+				tag +='							<dd>'+review.scoreWeightNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>볼너비</dt>\n';
+				tag +='							<dd>'+review.scoreBallNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				}
+				tag +='			</div>\n';
+				tag +='			<div class="txt_review_box">\n';
+				tag +='				<p>' + review.reviewContent +'</p>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="writer_box">\n';
+				tag += '			<div class="writer">\n';
+				tag += '				<span class="wr_id">'+ review.maskingCustId +'</span>\n';
+				tag += '				<span class="wr_date">' + review.regDt + '</span>\n';
+				tag += '			</div>\n'
+				tag +='			</div>\n';
+				if (!gagajf.isNull(review.admRpl)){
+				tag += '		<div class="reply_box">\n';
+				tag += '			<div class="reply">\n';
+				tag += '				<div class="reply_writer">\n';
+				tag += '					<span class="wr_name">관리자</span>\n';
+				tag += '					<span class="wr_date">'+review.admRplDt+'</span>\n';
+				tag += '				</div>\n';
+				tag += '				<div class="reply_txt">\n';
+				tag += '					<p>' + review.admRpl+'</p>\n';
+				tag += '				</div>\n';
+				tag += '			</div>\n';
+				tag += '		</div>\n';	
+				}
+				tag +='		</div>\n';
+				tag +='	</div>\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length >= 2){
+				tag +='	<div class="thumblist">\n';
+				tag +='		<ul>\n';
+					let activeClass = '';
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						activeClass = '';
+						if (aIdx == 0){
+							activeClass = 'active';
+						}
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='			<li>\n';
+				tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+				tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</li>\n';
+					});
+				tag +='		</ul>\n';
+				tag +='	</div>\n';
+				}
+				tag +='</div>\n';
+				
+				tag +='</div>\n';
+				tag +='</div>\n';
+				tag +='</div>\n';
+				tag +='</div>\n';
+				
+				$('#reviewBody').append(tag);
+				
+				$('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+				        var $this = $(this);
+				        
+				        var thumbCount = $this.find('.thumblist ul li').length;
+				        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+				        var thumbMargin = 8 * thumbCount;
+				        var thumbListWidth = thumbUlWidth + thumbMargin;
+
+				        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+				        
+				    }); 
+
+			});
+		}
+		
+	}
+	
+	// 다른 상품평 보기
+	var fnReviewNext = function(reviewSq){
+		if (gagajf.isNull(reviewSq)) return false;
+		
+		$('#reviewDetailForm input[name=reviewSq]').val(reviewSq);
+		fnReviewDetail();
+	}
+	
+	$(document).ready( function() {
+		
+		fnReviewDetail();
+       
+		 //슬라이드 - 상품 베스트 리뷰 자세히보기 영역 
+	    var photoReviewDetailSwiper = new Swiper('.pd_photoreviewdetail_pop .swiper-container.detail', {
+	        effect :'fade',
+	        slidesPerView: 1,
+	        spaceBetween: 0,
+	        simulateTouch:false,
+	        navigation: {
+	            nextEl: '.pd_photoreviewdetail_pop .swiper-button-next',
+	            prevEl: '.pd_photoreviewdetail_pop .swiper-button-prev',
+	        },
+	    });   
+
+	    $('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+	        var $this = $(this);
+	        
+	        var thumbCount = $this.find('.thumblist ul li').length;
+	        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+	        var thumbMargin = 8 * thumbCount;
+	        var thumbListWidth = thumbUlWidth + thumbMargin;
+
+	        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+	        
+	    });
+
+	    $(document).on('click','.pd_photoreviewdetail_pop .thumblist ul li',function(e){
+
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
+	        $(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
+	        $(this).find(".pic").addClass('active');
+
+	        var thumbIndex = $(this).index();
+	        thumbContentHtml = $(this).find('.pic .thumb').html();
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbContentHtml);
+
+	        return false;
+	    });
+	});		
+
+	 
+/*]]>*/
+</script>	
+ </html>

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

@@ -173,7 +173,7 @@
 						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option + ' / ' + item.optCd2Arr[index2] + '</span>\n';
 					})
 				}else{
-					html += '							<span class="option">'+item.optCd1Nm+'&nbsp;/&nbsp;'+item.optCd2+'</span>     ';
+					html += '							<span class="option">'+item.colorNm+'</span>     ';
 				}
 				html += '						</div>                                                                                            ';
 				html += '					</div>                                                                                                ';
@@ -232,7 +232,7 @@
 				html+='						<div class="gd_opt">';
 				html+='							<div class="option_wrap">';
 				html+='								<span class="title sr-only">주문 옵션</span>';
-				html+='								<span class="option">'+item.optCd1Nm+'&nbsp;/&nbsp;'+item.optCd2+'</span>';
+				html+='								<span class="option">'+item.colorNm+'</span>';
 				html+='							</div>';
 				html+='						</div>';
 				html+='					</div>';
@@ -260,7 +260,7 @@
 				html+='								<dl>';
 				html+='									<div>';
 				html+='										<dt>구매옵션</dt>';
-				html+='										<dd>'+item.optCd1Nm+' / '+item.optCd2+'</dd>';
+				html+='										<dd>'+item.colorNm+'</dd>';
 				html+='									</div>';
 				html+='								</dl>';
 				html+='							</div>';
@@ -268,7 +268,7 @@
 				html+='								<dl>';
 				html+='									<div>';
 				html+='										<dt>키/몸무게</dt>';
-				html+='										<dd>'+item.weight+'cm/'+item.height+'kg</dd>';
+				html+='										<dd>'+item.height+'cm/'+item.weight+'kg</dd>';
 				html+='									</div>';
 				if (item.sizeGb == 'T' || item.sizeGb == 'B' || item.sizeGb == 'S') {
 					html+='									<div>';
@@ -310,12 +310,12 @@
 					for (var i = 0; i < attachList.length; i++) {
 						if (attachList[i].reviewSq == item.reviewSq) {
 						html+='									<li>';
-						html+='										<a onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">';
+						html+='										<a>';
 						html+='											<div class="pic">';
 						if (attachList[i].fileGb == 'M') {
-							html+='												<span class="thumb mov" style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
+							html+='												<span onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" class="thumb mov" style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
 						}else{
-							html+='												<span class="thumb" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
+							html+='												<span onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" class="thumb" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
 						}
 						html+='											</div>';
 						html+='										</a>';

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

@@ -93,13 +93,35 @@ var ajaxWishList = function () {
 							
 							html+='					</p>';
 							html+='					<div class="itemcolorchip">';
-							html+='						<span class="chip_color35" value="ABM">BEIGE</span>';
-							html+='						<span class="chip_color54" value="BDS">BLACK</span>';
-							html+='						<span class="chip_color40" value="YBR">WHITE</span>';
+							if(!gagajf.isNull(item.colorChips)){
+								var colorArr = item.colorChips.split(",");
+								var colorCd = '';
+								var rgbColor = '';
+								for(let i=0; i<colorArr.length; i++){
+									var colorInfo = colorArr[i].split(":");
+									colorCd = colorInfo[0];
+									rgbColor = colorInfo[1];
+									if(rgbColor=='#FFFFFF'){
+										html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+									}else{
+										html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+									}
+								}
+							}
 							html+='					</div>';
-							html+='					 <p class="itemBadge">';
-							html+='						<span class="badge13">베스트 </span>';
-							html+='					</p>';
+							if(!gagajf.isNull(item.icon)){
+								var iconArr = item.icon.split(",");
+								var iconGb = '';
+								var iconNm = '';
+								html += '	<p class="itemBadge">';
+								for(let i=0; i<iconArr.length; i++){
+									var iconInfo = iconArr[i].split(":");
+									iconGb = iconInfo[0];
+									iconNm = iconInfo[1];
+									html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+								}
+								html += '	</p>';
+							}
 							if (item.goodsTnm != null && item.goodsTnm != '') {
 								html+='					<div class="itemComment">'+item.goodsTnm+'</div>';
 							}

+ 18 - 20
src/main/webapp/WEB-INF/views/web/mypage/NoMemberCancelFormWeb.html

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="web/common/layout/MypageLayoutWeb">
+	layout:decorator="web/common/layout/NoMemberLayoutWeb">
 <!--
  *******************************************************************************
  * @source  : NoMemberCancelFormWeb.html
@@ -347,29 +347,27 @@
 		let jsonData = JSON.stringify(data);
 
 		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
-			// 환불포인트, 환불상품권 금액 계산
-			let refundPoint = Number(result.spanPntDcAmt);
-			let refundGiftCard = Number(result.spanGfcdUseAmt);
+			let refundPoint = Number(result.spanPntDcAmt);							// 환불 포인트 금액
+			let refundGiftCard = Number(result.spanGfcdUseAmt);						// 환불 상품권 금액
+			let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);						// 환불 상품 금액
+			let spanCpnDcAmt = Number(result.spanCpnDcAmt);							// 쿠폰 할인 차감 금액
+			let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);						// 다다익선 할인 차감 금액
+			let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);					// 선포인트 할인 차감 금액
+			let sumDeliveryFee = Number(result.sumDeliveryFee);						// 원주문배송비
+			let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);				// 추가배송비 (무료배송비 허들 깨져서 발생한 배송비)
+			let spanRefundAmt = Number(result.spanRefundAmt);						// 환불 예정 금액
 
-			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;				// 환불예정금액
+			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() + '원');
+				//refundPayAmt = spanRefundAmt;
+				//$('#addDeliveryFee').css('display', '');
+				//$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
 				addPayCost = spanTotDeliveryFee;
 			} else {
 				addPayCost = 0;

+ 577 - 0
src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreListFormWeb.html

@@ -0,0 +1,577 @@
+<!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  : NoMemberCreListFormWeb.html
+ * @desc    : 비회원 > 취소/반품/교환내역 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.02   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content myOrderList"> <!-- 페이지특정 클래스 = myOrderList -->
+		<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 class="cont">
+				<div class="sec_head">
+					<!-- 주문 현황 -->
+					<div class="my_order_progress">
+						<div class="progress">
+							<ul>
+								<li>
+									<div>
+										<p class="txt">주문접수</p>
+										<p class="count"><span id="orderReceiptCount" th:text="${orderCount.depositWaitingCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">결제완료</p>
+										<p class="count"><span id="paymentCompleteCount" th:text="${orderCount.paymentCompleteCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">상품 준비 중</p>
+										<p class="count"><span id="goodsPrepareCount" th:text="${orderCount.goodsPrepareCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">배송 준비 중</p>
+										<p class="count"><span id="shipPrepareCount" th:text="${orderCount.shipPrepareCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">배송 중</p>
+										<p class="count"><span id="shippingCount" th:text="${orderCount.shippingCount}">0</span></p>
+									</div>
+								</li>
+								<li>
+									<div>
+										<p class="txt">배송 완료</p>
+										<p class="count"><span id="shipCompleteCount" th:text="${orderCount.shipCompleteCount}">0</span></p>
+									</div>
+								</li>
+							</ul>
+						</div>
+						<div class="invalid">
+							<p class="txt">취소/교환/반품</p>
+							<p class="count"><span id="orderCreCount" th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount + orderCount.confirmCount}">0</span></p>
+						</div>
+					</div>
+					<!-- //주문 현황 -->
+				</div>
+				<div class="sec_body">
+					<h3 class="subH2">취소/반품/교환 내역</h3>
+					<!-- 주문조회 검색 -->
+					<div class="area_filter">
+						<div class="select_month_box">
+							<div class="form_field">
+								<div>
+									<input type="radio" name="rdi-month" id="rdi-month1" onclick="fnSetSearchPeriod(1);">
+									<label for="rdi-month1"><span>최근 1개월</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-month" id="rdi-month2" onclick="fnSetSearchPeriod(3);">
+									<label for="rdi-month2"><span>최근 3개월</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-month" id="rdi-month3" onclick="fnSetSearchPeriod(6);">
+									<label for="rdi-month3"><span>최근 6개월</span></label>
+								</div>
+							</div>
+						</div>
+						<div class="select_period_box">
+							<form class="form_wrap">
+								<div class="form_field">
+									<label class="input_label sr-only">선택기간 시작</label>
+									<div class="input_wrap">
+										<input type="text" class="form_control period_datepicker" value="" id="stDate" onchange="fnCheckPeriod(this);">
+									</div>
+								</div>
+								<div class="form_field">
+									<label class="input_label sr-only">선택기간 끝</label>
+									<div class="input_wrap">
+										<input type="text" class="form_control n_input period_datepicker" value="" id="edDate" onchange="fnCheckPeriod(this);">
+									</div>
+								</div>
+								<button type="button" class="btn btn_dark btn_sm" onclick="fnSearchCreList();"><span>조회</span></button>
+							</form>
+						</div>
+						<div class="select_status_box">
+							<form class="form_wrap">
+								<div class="form_field">
+									<div class="select_custom demand_status">
+										<div class="combo">
+											<div class="select">전체상태</div>
+											<ul class="list">
+												<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+												<li class="selected" code="">전체상태</li>
+												<li code="G685_91">결제대기</li>
+												<li code="G685_20">교환접수</li>
+												<li code="G685_50">반품접수</li>
+												<li code="G685_30">회수요청</li>
+												<li code="G685_31">상품 검수중</li>
+												<li code="G685_34">교환 진행중</li>
+												<li code="G685_33">환불 진행중</li>
+												<li code="G685_40">교환완료</li>
+												<li code="G685_60">반품완료</li>
+												<li code="G685_92">접수취소</li>
+												<li code="G685_93">주문취소</li>
+												<li code="G685_94">품절취소</li>
+<!--												<li th:if="${chgStatList}" th:each="oneData, status : ${chgStatList}" th:attr="code=${oneData.cd}" th:text="${oneData.cdNm}"></li>-->
+											</ul>
+										</div>
+									</div>
+								</div>
+							</form>
+						</div>
+					</div>
+					<!-- //주문조회 검색 -->
+					<div class="area_list" id="creList"></div>
+				</div>
+				<div class="sec_foot">
+					<div class="ui_row">
+						<ul class="pageNav" id="paging"></ul>
+					</div>
+				</div>
+				<form id="searchForm" name="searchForm" th:action="@{'/noMember/cre/list'}" th:method="post">
+					<input type="hidden" name="pageNo" value=1 />
+					<input type="hidden" name="pageSize" value=5 />
+					<input type="hidden" name="pageUnit" value=10 />
+					<input type="hidden" name="chgStat" value="" />
+					<input type="hidden" name="stDate" value="" />
+					<input type="hidden" name="edDate" value="" />
+					<input type="hidden" name="ordNo" th:value="${ordNo}" />
+					<input type="hidden" name="ordNm" th:value="${ordNm}" />
+					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
+				</form>
+				<form id="exchangeForm" name="exchangeForm" action="#" th:action="@{'/noMember/cre/exchange/detail/form'}" th:method="post">
+					<input type="hidden" name="ordChgSq"/>
+					<input type="hidden" name="ordNo"/>
+				</form>
+				<form id="returnForm" name="returnForm" action="#" th:action="@{'/noMember/cre/return/detail/form'}" th:method="post">
+					<input type="hidden" name="ordChgSq"/>
+					<input type="hidden" name="ordNo"/>
+				</form>
+				<form id="cancelForm" name="cancelForm" th:action="@{'/noMember/cre/cancel/detail/form'}" th:method="post">
+					<input type="hidden" name="ordChgSq"/>
+					<input type="hidden" name="ordNo"/>
+				</form>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let totalCount = 0;
+	let pageSize = 0;
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetNoMemberLnbList(2);
+		
+		// 마이페이지 location 설정
+		fnSetNoMemberLocation('취소/반품/교환내역');
+		
+		// datepicker 설정
+		$('.period_datepicker').datepicker();
+
+		// 셀렉트박스 활성화
+		$('.select_custom.demand_status').each(function(index) {
+			new sCombo($(this));
+		});
+
+		// 주문 검색 기간 설정
+		$('#rdi-month2').click();
+
+		// Initialize a pagination
+		gagaPaging.init('searchForm', fnSearchCallback, 'paging', 5, 10);
+		
+		// Load data
+		gagaPaging.load(1);
+	});
+	
+	// 검색기간 버튼 클릭 이벤트 처리
+	var fnSetSearchPeriod = function(period) {
+		let date = new Date();
+		let edDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate())).slice(-2);
+		date.setMonth(date.getMonth() - period);
+		let stDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate())).slice(-2);
+
+		$('#edDate').val(edDate);
+		$('#searchForm input[name=edDate]').val(edDate);
+		$('#stDate').val(stDate);
+		$('#searchForm input[name=stDate]').val(stDate);
+	}
+
+	// 주문 목록 조회
+	var fnSearchCreList = function() {
+		gagaPaging.load(1);
+	}
+
+	// 주문 목록 조회 콜백
+	var fnSearchCallback = function(result) {
+		$('#creList').html(fnCreateCreList(result));
+
+		// Create pagination
+		gagaPaging.createPagination(result.creInfo.pageable);
+	}
+
+	// 검색기간 설정 체크
+	var fnCheckPeriod = function(param) {
+		let id = $(param).attr('id');
+		let stDate = $('#stDate').val();
+		let edDate = $('#edDate').val();
+		let chgDate;
+
+		$('#searchForm input[name=stDate]').val(stDate);
+		$('#searchForm input[name=edDate]').val(edDate);
+
+		let sdt = new Date(stDate);
+		let edt = new Date(edDate);
+		let today = new Date();
+
+		// 검색기간 버튼 처리
+		$.each($('.select_month_box input:radio'), function(idx, item) {
+			if ($(item).is(':checked')) {
+				$(item).prop('checked', false);
+			}
+		});
+
+		// 오늘 이후 날짜 선택 처리
+		chgDate = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + (today.getDate())).slice(-2);
+		if (id == 'stDate' && Math.ceil((sdt.getTime() - today.getTime()) / (1000 * 3600 * 24))) {
+			mcxDialog.alert('조회기간을 확인해주세요.');
+			$('#stDate').val(chgDate);
+			$('#searchForm input[name=stDate]').val(chgDate);
+
+			return false;
+		} else if (id == 'edDate' && Math.ceil((edt.getTime() - today.getTime()) / (1000 * 3600 * 24))) {
+			mcxDialog.alert('조회기간을 확인해주세요.');
+			$('#edDate').val(chgDate);
+			$('#searchForm input[name=edDate]').val(chgDate);
+
+			return false;
+		}
+
+		// 시작 종료일자 확인
+		if (sdt > edt) {
+			mcxDialog.alert('조회기간을 확인해주세요.');
+
+			if (id == 'stDate') {
+				chgDate = sdt.getFullYear() + '-' + ('0' + (sdt.getMonth() + 1)).slice(-2) + '-' + ('0' + (sdt.getDate())).slice(-2);
+			} else {
+				chgDate = edt.getFullYear() + '-' + ('0' + (edt.getMonth() + 1)).slice(-2) + '-' + ('0' + (edt.getDate())).slice(-2);
+			}
+
+			$('#stDate').val(chgDate);
+			$('#edDate').val(chgDate);
+			$('#searchForm input[name=stDate]').val(chgDate);
+			$('#searchForm input[name=edDate]').val(chgDate);
+
+			return false;
+		}
+
+		// 기간 1년 확인
+		let dateDiff = Math.ceil((edt.getTime() - sdt.getTime()) / (1000 * 3600 * 24));
+
+		if (dateDiff > 366) {
+			mcxDialog.alert('조회기간은 최대 1년을 넘을 수 없습니다.');
+			if (id == 'stDate') {
+				sdt.setFullYear(sdt.getFullYear() + 1);
+				let chgEdDate = sdt.getFullYear() + '-' + ('0' + (sdt.getMonth() + 1)).slice(-2) + '-' + ('0' + (sdt.getDate())).slice(-2);
+
+				$('#edDate').val(chgEdDate);
+				$('#searchForm input[name=edDate]').val(chgEdDate);
+			} else {
+				edt.setFullYear(edt.getFullYear() - 1);
+				let chgStDate = edt.getFullYear() + '-' + ('0' + (edt.getMonth() + 1)).slice(-2) + '-' + ('0' + (edt.getDate())).slice(-2);
+
+				$('#stDate').val(chgStDate);
+				$('#searchForm input[name=stDate]').val(chgStDate);
+			}
+
+			return false;
+		}
+	}
+
+	// 상태값 별 수량 업데이트 처리
+	var fnReloadStatusCount = function() {
+		let url = '/noMember/status/count';
+		
+		let data = {};
+
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			$('#orderReceiptCount').text(result.orderCount.orderReceiptCount);
+			$('#paymentCompleteCount').text(result.orderCount.paymentCompleteCount);
+			$('#goodsPrepareCount').text(result.orderCount.goodsPrepareCount);
+			$('#shipPrepareCount').text(result.orderCount.shipPrepareCount);
+			$('#shippingCount').text(result.orderCount.shippingCount);
+			$('#shipCompleteCount').text(result.orderCount.shipCompleteCount);
+			$('#orderCreCount').text(result.orderCount.cancelCount + result.orderCount.returnCount + result.orderCount.exchangeCount);
+		});
+	}
+
+	// 주문상세상태코드 셀렉트박스 변경 이벤트
+	$('.select_custom.demand_status').find('li').on('click', function() {
+		$('#searchForm input[name=chgStat]').val($(this).attr('code'));
+	});
+
+	// 주문내역 리스트 처리
+	var fnCreateCreList = function(param) {
+		let tag = '';
+		let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
+
+		if (param.creList != null && param.creList.length > 0) {
+			$.each(param.creList, function (idx, creList) {
+				tag += '						<div class="part_goods">\n';
+				tag += '							<div class="goods_head">\n';
+				tag += '								<p>주문일 <span>' + creList.ordDt + '</span></p>\n';
+				tag += '								<a href="javascript:void(0)" ordChgSq="' + creList.ordChgSq + '" chgGb="' + creList.oneData.chgGb + '" ordNo ="' + creList.oneData.ordNo + '" onclick="fnGoToCreDetail(this)">상세보기</a>\n';
+				tag += '							</div>\n';
+				tag += '							<div class="goods_cont">\n';
+				$.each(creList.creList, function (index, cre) {
+					tag += '								<!-- 주문상품1 -->\n';
+					tag += '								<div class="goods_info">\n';
+					tag += '									<div class="order_desc">\n';
+					tag += '										<div class="goods_box">\n';
+					tag += '											<div class="gd_item">\n';
+					tag += '												<a href="javascript:void(0)" goodsCd="' + cre.goodsCd + '" onclick="fnGoToGoodsDetail(this)">\n';
+					tag += '													<span class="thumb">\n';
+					tag += '														<img src="' + imageUrl + '/' + cre.sysImgNm + '" width="100%" alt="">\n';
+					tag += '													</span>\n';
+					tag += '													<p>\n';
+					tag += '														<span class="brand">' + cre.brandNm + '</span>\n';
+					// 배송 아이콘 처리
+					if (cre.shotDelvYn == 'Y') {
+						tag += '														<span class="tag primary">총알배송</span>\n';
+					} else if (cre.selfGoodsYn == 'Y') {
+						tag += '														<span class="tag">STYLE24 일반배송</span>\n';
+					} else {
+						tag += '														<span class="tag">업체직배송</span>\n';
+					}
+					tag += '													</p>\n';
+					tag += '													<p>\n';
+					tag += '														<span class="name">' + cre.goodsNm + '</span>\n';
+					tag += '													</p>\n';
+					tag += '												</a>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_opt">\n';
+					tag += '												<div class="option_wrap">\n';
+					tag += '													<span class="title sr-only">주문 옵션</span>\n';
+					// 세트아이템 옵션 처리
+					if (cre.goodsType == 'G056_S') {
+						$.each(cre.colorNmArr, function (index2, option) {
+							tag += '													<span class="option">' + cre.itemNmArr[index2] + ' / ' + option + ' / ' + cre.optCd2Arr[index2] + '</span>\n';
+						});
+					} else {
+						tag += '													<span class="option">' + cre.colorNm + ' / ' + cre.optCd2 + '</span>\n';
+					}
+					tag += '												</div>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_opt">\n';
+					tag += '												<div class="option_wrap">\n';
+					// 교환옵션
+					if (cre.chgGb == 'G680_40') {
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo) {
+								tag += '													<span class="title">교환 옵션</span>';
+								if (cre.goodsType == 'G056_S') {
+									$.each(exchange.colorNmArr, function (index2, option) {
+										tag += '													<span class="option">' + exchange.itemNmArr[index2] + ' / ' + option + ' / ' + exchange.optCd2Arr[index2] + '</span>\n';
+									});
+								} else {
+									tag += '													<span class="option">' + exchange.colorNm + ' / ' + exchange.optCd2 + '</span>\n';
+								}
+							}
+						});
+					}
+					tag += '												</div>\n';
+					tag += '											</div>\n';
+					tag += '											<div class="gd_calc">\n';
+					tag += '												<p>\n';
+					tag += '													<span class="count"><em>' + cre.chgQty + '</em>개</span>\n';
+					tag += '												</p>\n';
+					tag += '											</div>\n';
+					tag += '										</div>\n';
+					tag += '										<div class="status_box">\n';
+					tag += '											<p>\n';
+					if (cre.chgStat == 'G685_17' || cre.chgStat == 'G685_18') {
+						tag += '												주문취소\n';
+					} else if (cre.chgStat == 'G685_40') {
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_20' || exchange.ordDtlStat == 'G013_30' || exchange.ordDtlStat == 'G013_35' || exchange.ordDtlStat == 'G013_40' || exchange.ordDtlStat == 'G013_50')) {
+								tag += '												교환진행중\n';
+							} else if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_60' || exchange.ordDtlStat == 'G013_70')) {
+								tag += '												교환완료\n';
+							}
+						});
+					} else if (cre.chgStat == 'G685_33') {
+						tag += '												환불진행중\n';
+					} else if (cre.chgStat == 'G685_49' || cre.chgStat == 'G685_69') {
+						tag += '												접수취소\n';
+					} else {
+						tag += '												' + cre.chgStatNm + '\n';
+					}
+					tag += '												<span class="date">' + cre.chgDate + '</span>\n';
+					tag += '												<span class="time">' + cre.chgTime + '</span>\n';
+					tag += '											</p>\n';
+					tag += '										</div>\n';
+					tag += '										<div class="button_box">\n';
+					if (cre.chgStat == 'G685_20' || cre.chgStat == 'G685_21' || cre.chgStat == 'G685_50' || cre.chgStat == 'G685_51') {
+						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" cancelGb="' + cre.chgGb + '" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>\n';
+					}
+					if (cre.chgStat == 'G685_21' || cre.chgStat == 'G685_51' || cre.chgStat == 'G685_32') {
+						tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + cre.ordNo + '" ordChgSq="' + cre.ordChgSq + '" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>\n';
+					}
+					if (cre.chgStat == 'G685_40') {
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_20' || exchange.ordDtlStat == 'G013_30' || exchange.ordDtlStat == 'G013_35' || exchange.ordDtlStat == 'G013_40' || exchange.ordDtlStat == 'G013_50')) {
+								tag += '											<p><button type="button" class="btn btn_default btn_sm" ordDtlNo="' + cre.ordDtlNo + '" onclick="fnGoToDeliveryTrack(this);"><span>배송조회</span></button></p>\n';
+							}
+						});
+					}
+					tag += '										</div>\n';
+					tag += '									</div>\n';
+					//if (cre.chgStat == 'G685_10') {
+					//	tag += '									<div class="order_text"><p>' + cre.addPayCost + '원 결제 후 취소 가능합니다.</p></div>\n';
+					//}
+					// cre.chgGb == 'G680_30' : 반품
+					// cre.chgGb == 'G680_40' : 교환
+					// 교환접수
+					if (cre.chgStat == 'G685_20') {
+						tag += '									<div class="order_text"><p>교환 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>\n';
+					}
+					// 교환대기
+					if (cre.chgStat == 'G685_21') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 교환 가능합니다.</p></div>\n';
+					}
+					// 회수요청
+					if (cre.chgStat == 'G685_30') {
+						tag += '									<div class="order_text"><p>고객님이 요청하신 회수지로 상품을 회수 중에 있습니다.</p></div>\n';
+					}
+					// 상품 검수중(교환)
+					if (cre.chgStat == 'G685_31' && cre.chgGb == 'G680_40') {
+						tag += '									<div class="order_text"><p>고객님이 교환하신 상품을 검수 중에 있습니다.</p></div>\n';
+					}
+					// 결제대기(교환)
+					if (cre.chgStat == 'G685_32' && cre.chgGb == 'G680_40') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 교환 가능합니다.</p></div>\n';
+					}
+					// 교환완료
+					if (cre.chgStat == 'G685_40') {
+						$.each(creList.exchangeOptionList, function(index, exchange) {
+							if (cre.chgOrdDtlNo == exchange.ordDtlNo && (exchange.ordDtlStat == 'G013_60' || exchange.ordDtlStat == 'G013_70')) {
+								tag += '									<div class="order_text"><p>교환이 완료되었습니다.</p></div>\n';
+							}
+						});
+					}
+					// 교환철회
+					if (cre.chgStat == 'G685_49') {
+						tag += '									<div class="order_text"><p>요청하신 교환을 취소하였습니다.</p></div>\n';
+					}
+					// 반품접수
+					if (cre.chgStat == 'G685_50') {
+						tag += '									<div class="order_text"><p>반품 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>\n';
+					}
+					// 반품대기
+					if (cre.chgStat == 'G685_51') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 반품 가능합니다.</p></div>\n';
+					}
+					// 상품 검수중(반품)
+					if (cre.chgStat == 'G685_31' && cre.chgGb == 'G680_30') {
+						tag += '									<div class="order_text"><p>고객님이 반품하신 상품을 검수 중에 있습니다.</p></div>\n';
+					}
+					// 결제대기(반품)
+					if (cre.chgStat == 'G685_32' && cre.chgGb == 'G680_30') {
+						tag += '									<div class="order_text"><p>' + cre.addPayCost.addComma() + '원 결제 후 반품 가능합니다.</p></div>\n';
+					}
+					// 환불진행중
+					if (cre.chgStat == 'G685_33') {
+						tag += '									<div class="order_text"><p>환불을 진행하고 있습니다.(영업일 최대 3일 내 환불 예정)</p></div>\n';
+					}
+					// 반품완료
+					if (cre.chgStat == 'G685_60') {
+						tag += '									<div class="order_text"><p>반품이 완료되었습니다.</p></div>\n';
+					}
+					// 반품철회
+					if (cre.chgStat == 'G685_69') {
+						tag += '									<div class="order_text"><p>요청하신 반품을 취소하였습니다.</p></div>\n';
+					}
+					tag += '								</div>\n';
+				});
+				tag += '							</div>\n';
+				tag += '						</div>\n';
+			});
+		} else {
+			// 데이터 없음 표시
+			tag += '						<div class="nodata">';
+			tag += '							<div class="txt_box">';
+			tag += '								<p>';
+			tag += '									취소/반품/교환내역이 없습니다.<br>';
+			tag += '								</p>';
+			tag += '							</div>';
+			tag += '						</div>';
+		}
+
+		return tag;
+	}
+	
+	// 취반교 상세 페이지 이동
+	var fnGoToCreDetail = function(param) {
+		let ordChgSq = $(param).attr('ordChgSq');
+		let chgGb = $(param).attr('chgGb');
+		let ordNo = $(param).attr('ordNo');
+		
+		if (chgGb == 'G680_20') {
+			$('#cancelForm input[name=ordChgSq]').val(ordChgSq);
+			$('#cancelForm input[name=ordNo]').val(ordNo);
+			document.cancelForm.submit();
+		} else if (chgGb == 'G680_30') {
+			$('#returnForm input[name=ordChgSq]').val(ordChgSq);
+			$('#returnForm input[name=ordNo]').val(ordNo);
+			document.returnForm.submit();
+		} else if (chgGb == 'G680_40') {
+			$('#exchangeForm input[name=ordChgSq]').val(ordChgSq);
+			$('#exchangeForm input[name=ordNo]').val(ordNo);
+			document.exchangeForm.submit();
+		}
+	}
+	
+	// 취반교 배송조회 버튼 클릭 이벤트
+	var fnGoToDeliveryTrack = function(param) {
+		let ordDtlNo = $(param).attr('ordDtlNo');
+		// TODO
+		// 최반교 배송조회 페이지 이동 처리
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 647 - 0
src/main/webapp/WEB-INF/views/web/mypage/NoMemberExchangeFormWeb.html

@@ -0,0 +1,647 @@
+<!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/NoMemberLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NoMemberExchangeFormWeb.html
+ * @desc    : 비회원 > 교환신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.02   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<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 class="cont">
+				<form id="exchangeForm">
+					<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>주문일 <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 class="gd_opt exchangeOption" style="display:none" th:attr="ordDtlNo=${exchange.ordDtlNo}">
+												<div class="option_wrap"></div>
+											</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}"/>
+																<input type="hidden" name="chgOptionList" th:attr="ordDtlNo=${exchange.ordDtlNo}"/>
+																<div class="select">선택</div>
+																<ul class="list">
+																	<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+																	<li class="selected" qty="0" th:attr="ordDtlNo=${exchange.ordDtlNo}" onclick="fnChangeExchangeQty(this);">선택</li>
+																	<li th:if="${exchange.ordCanChgQty > 0}" th:each="num : ${#numbers.sequence(1,exchange.ordCanChgQty)}" th:attr="qty=${num}, ordDtlNo=${exchange.ordDtlNo}" th:text="${num}" onclick="fnChangeExchangeQty(this);"></li>
+																</ul>
+															</div>
+														</div>
+													</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>
+								</div>
+								<!-- //주문상품 -->
+								</th:block>
+							</div>
+						</div>
+						<h4 class="subH3">교환 사유</h4>
+						<div class="tbl type1">
+							<table>
+								<tbody>
+									<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">
+															<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" maxlength="200" placeholder="자세한 사유를 입력해주세요." onkeyup="fnGetTextLength(this, 200);" 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>
+						<h4 class="subH3 wdGb">반품 방식 선택</h4>
+						<div class="tbl type1 wdGb">
+							<table>
+								<tbody>
+								<tr>
+									<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>
+						<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 id="chgerAddr">
+												<th:block th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></th:block>
+												<button type="button" class="btn btn_default btn_sm" onclick="fnChangeAddr('chger');"><span>회수지 변경</span></button>
+											</td>
+											<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}">
+										</tr>
+									</tbody>
+								</table>
+							</div>
+						</div>
+						<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" data-valid-type="numeric" placeholder="송장번호를 입력해주세요.">
+													</div>
+												</div>
+											</form>
+										</td>
+									</tr>
+									</tbody>
+								</table>
+							</div>
+						</div>
+						<h4 class="subH3">교환 상품 배송지</h4>
+						<div class="tbl type1">
+							<table>
+								<colgroup>
+									<col width="210">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>
+											배송지 정보
+										</th>
+										<td>
+											<div class="block_line">
+												<ul>
+													<li>
+														<span id="recipNm" th:text="${deliveryAddrInfo.recipNm}"></span>
+													</li>
+													<li>
+														<span id="recipPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></span>
+													</li>
+													<li>
+														<span id="recipAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></span>
+														<button type="button" class="btn btn_default btn_sm" onclick="fnChangeAddr('recip')"><span>배송지 변경</span></button>
+													</li>
+													<li>
+														배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${deliveryAddrInfo.delvMemo}"></span>
+														<button type="button" class="btn_underline" onclick="fnChangeDeliveryMemo(this)"><span>변경하기</span></button>
+													</li>
+												</ul>
+											</div>
+										</td>
+										<input type="hidden" name="recipNm" th:value="${deliveryAddrInfo.recipNm}">
+										<input type="hidden" name="recipPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+										<input type="hidden" name="recipZipcode" th:value="${deliveryAddrInfo.recipZipcode}">
+										<input type="hidden" name="recipBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
+										<input type="hidden" name="recipDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+										<input type="hidden" name="delvMemo" th:value="${deliveryAddrInfo.delvMemo}">
+									</tr>
+								</tbody>
+							</table>
+						</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="fnGoToNoMemberCreList()"><span>취소</span></button>
+							<button type="button" id="btn_confirm_exchange" class="btn btn_dark btn_md" onclick="fnExchange()"><span>교환 신청</span></button>
+						</div>
+					</div>
+				</form>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	var isLogin = [[${isLogin}]];
+	let oneData = [[${oneData}]];
+	let isCustomer = false;
+	let addrGb = '';
+	let jsonObj = {};
+
+	$(document).ready(function() {
+		// 비회원 LNB 설정
+		fnSetNoMemberLnbList(2);
+		
+		// 비회원 location 설정
+		fnSetNoMemberLocation('취소/반품/교환 내역', '교환 신청');
+		
+		// 셀렉트박스 활성화
+		$('.select_custom').each(function() {
+			new sCombo($(this));
+		});
+
+		// 입점업체의 경우 회수방식 방문회수 처리
+		if (oneData.selfGoodsYn != 'Y') {
+			$('#withdraw').click();
+			$('.wdGb').css('display','none');
+		}
+	});
+
+	// 교환 옵션 변경 팝업
+	var fnChangeOption = function(param) {
+		let ordNo = $(param).attr('ordNo');
+		let ordDtlNo = $(param).attr('ordDtlNo');
+
+		// 옵션변경 수량 체크
+		let chgQtyArr = [];
+		let chgOrdDtlNoArr = [];
+
+		$.each($('#exchangeForm input[name=chgQty]'), function(idx, item) {
+			chgQtyArr.push($(item).val());
+			chgOrdDtlNoArr.push($(item).attr('ordDtlNo'));
+		});
+
+		let index = chgOrdDtlNoArr.indexOf(ordDtlNo);
+		let chgQty = chgQtyArr[index];
+		
+		if (chgQty == null || chgQty <= 0) {
+			mcxDialog.alert('교환 옵션 변경 수량을 선택해주세요.');
+			return false;
+		}
+
+		var jsonObj = {};
+		jsonObj.ordNo = ordNo;
+		jsonObj.ordDtlNo = ordDtlNo;
+		jsonObj.chgQty = chgQty;
+
+		$.ajax({
+			type		: "POST",
+			url 		: "/noMember/change/option/popup/form",
+			data		: jsonObj,
+			dataType 	: "html",
+			success 	: function(result) {
+				if (result != null) {
+					$("#exchangePop .modal-content").html(result);
+					$("#exchangePop").modal("show");
+				}
+			}
+		});
+	}
+
+	// 교환 옵션 변경 팝업 콜백 처리
+	var fnChangeOptionCallback = function(param) {
+		let ordDtlNo;
+
+		// 교환옵션 HTML 처리
+		let html = '												<span class="title">교환 옵션</span>\n';
+		$.each(param, function(idx, item) {
+			ordDtlNo = item.ordDtlNo;
+			let colorNm = item.colorNm;
+			let itemNm = item.itemNm;
+			let goodsType = item.goodsType;
+			let optCd2 = item.chgOptCd2;
+
+			if (goodsType == 'G056_S') {
+				html += '												<span class="option">' + itemNm + ' / ' + colorNm + ' / ' + optCd2 + '</span>\n';
+			} else {
+				html += '												<span class="option">' + colorNm + ' / ' + optCd2 + '</span>\n';
+			}
+		});
+
+		$.each($('.exchangeOption'), function(idx, item) {
+			if (ordDtlNo == $(item).attr('ordDtlNo')) {
+				$(item).css('display', '');
+				$(item).find('.option_wrap').html(html);
+			}
+		});
+
+		// 교환옵션 값 JSON 형태로 설정
+		$.each($('#exchangeForm input[name=chgOptionList]'), function(idx, item) {
+			if (ordDtlNo == $(item).attr('ordDtlNo')) {
+				$(item).val(JSON.stringify(param));
+			}
+		});
+	}
+
+	// 교환 처리
+	var fnExchange = function() {
+		let url = '/noMember/exchange';
+		let delvFeeCd = oneData.delvFeeCd;
+		let ordDtlNo = oneData.ordDtlNo;
+		let supplyCompCd = oneData.supplyCompCd;
+		let excDelvFee = oneData.excDelvFee;
+		let rtnDelvFee = oneData.rtnDelvFee;
+		let chgReason = $('#exchangeForm input[name=chgReason]').val();
+		let addPayCost = $('#exchangeForm input[name=addPayCost]').val();
+		
+		// 교환 사유 체크
+		if (gagajf.isNull(chgReason)) {
+			mcxDialog.alert('교환 사유를 선택해주세요.');
+			return false;
+		}
+
+		// 교환 상품 설정
+		let chgOrdDtlNoArr = [];
+		$.each($('#exchangeForm input[name=chgQty]'), function(idx, item) {
+			if (Number($(item).val()) > 0) {
+				chgOrdDtlNoArr.push($(item).attr('ordDtlNo'));
+			}
+		});
+
+		// 교환옵션 설정
+		let cancelReqList = [];
+		$.each($('#exchangeForm input[name=chgOptionList]'), function(idx, item) {
+			if (chgOrdDtlNoArr.includes($(item).attr('ordDtlNo')) && !gagajf.isNull($(item).val())) {
+				let json = $(item).val();
+				let jsonData = JSON.parse(json);
+				let cancelReq = {};
+				$.each(jsonData, function (index, chgOpt) {
+					cancelReq.ordDtlNo = chgOpt.ordDtlNo;
+					cancelReq.ordDtlItemSq = chgOpt.ordDtlItemSq;
+					cancelReq.delvFeeCd = delvFeeCd;
+					cancelReq.supplyCompCd = supplyCompCd;
+					cancelReq.excDelvFee = excDelvFee;
+					cancelReq.rtnDelvFee = rtnDelvFee;
+					cancelReq.ordChgOpt = chgOpt.chgOptCd2;
+					cancelReq.chgQty = chgOpt.chgQty;
+					cancelReqList.push(cancelReq);
+				});
+			}
+		});
+
+		// 교환 수량 및 변경 옵션 체크
+		if (chgOrdDtlNoArr.length > cancelReqList.length) {
+			mcxDialog.alert('교환하실 상품의 변경 옵션을 선택해주세요.');
+			return false;
+		} else if (chgOrdDtlNoArr.length < cancelReqList.length || chgOrdDtlNoArr.length == 0) {
+			mcxDialog.alert('교환하실 상품의 수량을 선택해주세요.');
+			return false;
+		}
+
+		// 교환 필요 데이터 설정
+		let data = {};
+		data.ordNo = oneData.ordNo;
+		data.ordNm = oneData.ordNm;
+		data.ordPhnno = oneData.ordPhnno;
+		data.isCustomer = isCustomer;
+		data.wdGb = $('#exchangeForm input[name=wdGb]:radio:checked').val();
+		data.wdInvoiceNo = $('#exchangeForm input[name=wdInvoiceNo]').val();
+		data.recipNm = $('#exchangeForm input[name=recipNm]').val();
+		data.recipPhnno = $('#exchangeForm input[name=recipPhnno]').val();
+		data.recipTelno = $('#exchangeForm input[name=recipTelno]').val();
+		data.recipZipcode = $('#exchangeForm input[name=recipZipcode]').val();
+		data.recipBaseAddr = $('#exchangeForm input[name=recipBaseAddr]').val();
+		data.recipDtlAddr = $('#exchangeForm input[name=recipDtlAddr]').val();
+		data.delvMemo = $('#exchangeForm input[name=delvMemo]').val();
+		data.chgReason = $('#exchangeForm input[name=chgReason]').val();
+		data.chgMemo = $('#exchangeForm textarea[name=chgMemo]').val();
+		data.chgerNm = $('#exchangeForm input[name=chgerNm]').val();
+		data.chgerPhnno = $('#exchangeForm input[name=chgerPhnno]').val();
+		data.chgerTelno = $('#exchangeForm input[name=chgerTelno]').val();
+		data.chgerEmail = $('#exchangeForm input[name=chgerEmail]').val();
+		data.chgerZipcode = $('#exchangeForm input[name=chgerZipcode]').val();
+		data.chgerBaseAddr = $('#exchangeForm input[name=chgerBaseAddr]').val();
+		data.chgerDtlAddr = $('#exchangeForm input[name=chgerDtlAddr]').val();
+		data.chgerRtnMemo = $('#exchangeForm input[name=chgerRtnMemo]').val();
+		data.addPayCost = addPayCost;
+		data.addPayAmt = 0;
+		data.cancelReqList = cancelReqList;
+
+		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 {
+				fnGoToNoMemberCreList();
+			}
+		}, true);
+	}
+
+	// 반품 방식 변경 이벤트
+	$('#exchangeForm input[name=wdGb]').on('change', function() {
+		let wdGb = $('#exchangeForm input[name=wdGb]:radio:checked').val();
+
+		if (wdGb == 'W') {
+			$('#chgerLocation').css('display', '');
+			$('#returnLocation').css('display', 'none');
+		} else {
+			$('#chgerLocation').css('display', 'none');
+			$('#returnLocation').css('display', '');
+		}
+
+		// 추가 배송비 계산
+		fnAddCost();
+	});
+
+	// 교환 수량 변경 이벤트
+	var fnChangeExchangeQty = function(param) {
+		let ordDtlNo = $(param).attr('ordDtlNo');
+
+		if (param != null) {
+			$(param).parent().parent().find('input[name=chgQty]').val($(param).attr('qty'));
+		}
+
+		// 교환옵션 표기 초기화
+		$.each($('.exchangeOption'), function(idx, item) {
+			if (ordDtlNo == $(item).attr('ordDtlNo')) {
+				$(item).css('display', 'none');
+				$(item).find('.option_wrap').html('');
+			}
+		});
+
+		// 교환옵션 값 초기화
+		$.each($('#exchangeForm input[name=chgOptionList]'), function(idx, item) {
+			if (ordDtlNo == $(item).attr('ordDtlNo')) {
+				$(item).val('');
+			}
+		});
+		
+		// 추가 배송비 계산
+		fnAddCost();
+	}
+
+	// 교환 사유 변경 이벤트
+	var fnChangeExchangeReason = function(param) {
+		var customerReasonArr = ['G689_10', 'G689_30'];
+		let chgReason = $(param).attr('chgReason');
+
+		// 귀책사유체크(취소,반품,교환)
+		isCustomer = customerReasonArr.includes(chgReason);
+
+		// 교환 사유 설정
+		$(param).parent().parent().find('input[name=chgReason]').val(chgReason);
+
+		// 추가 배송비 계산
+		fnAddCost();
+	}
+
+	// 추가 배송비 계산
+	var fnAddCost = function() {
+		let addPayCost = 0;
+		let delvFee = oneData.delvFee;
+		let rtnDelvFee = oneData.rtnDelvFee;
+
+		// 교환 수량 체크
+		let qty = 0;
+		$.each($('#exchangeForm input[name=chgQty]'), function (idx, item) {
+			qty += Number($(item).val());
+		});
+
+		// 교환 수량이 있고 고객 귀책 사유 시 추가 배송비 계산
+		if (isCustomer && qty > 0) {
+			addPayCost = delvFee;
+
+			// 회수 요청 시 반품배송비 추가
+			if ($('#exchangeForm input[name=wdGb]:radio:checked').val() == 'W') {
+				addPayCost += rtnDelvFee;
+			}
+
+			// 추가배송비 영역 설정
+			$('#addDeliveryFee').css('display', '');
+			$('#addPayCost').text(addPayCost.addComma() + '원');
+			$('#exchangeForm input[name=addPayCost]').val(addPayCost);
+		} else {
+			$('#addDeliveryFee').css('display', 'none');
+			$('#exchangeForm input[name=addPayCost]').val(0);
+		}
+	}
+
+	// 배송지 정보 설정
+	var delvAddrSet = function(delvObj) {
+		let recipNm = delvObj.recipNm;
+		let recipPhnno = delvObj.recipPhnno;
+		let recipZipcode = delvObj.recipZipcode;
+		let recipBaseAddr = delvObj.recipBaseAddr;
+		let recipDtlAddr = delvObj.recipDtlAddr;
+		let delvMemo = delvObj.delvMemo;
+
+		if (addrGb == 'recip') {
+			$('#recipNm').text(recipNm);
+			$('#recipPhnno').text(recipPhnno);
+			$('#recipAddr').text(recipBaseAddr + ' ' + recipDtlAddr);
+			$('#delvMemo').text(delvMemo);
+
+			$('#exchangeForm input[name=recipNm]').val(recipNm);
+			$('#exchangeForm input[name=recipPhnno]').val(recipPhnno);
+			$('#exchangeForm input[name=recipZipcode]').val(recipZipcode);
+			$('#exchangeForm input[name=recipBaseAddr]').val(recipBaseAddr);
+			$('#exchangeForm input[name=recipDtlAddr]').val(recipDtlAddr);
+			$('#exchangeForm input[name=delvMemo]').val(delvMemo);
+		} else if (addrGb == 'chger') {
+			let chgerAddr = recipBaseAddr + ' ' + recipDtlAddr + '\n';
+			chgerAddr += '<button type="button" class="btn btn_default btn_sm" onclick="fnChangeAddr(\'chger\');"><span>회수지 변경</span></button>';
+
+			$('#exchangeForm input[name=chgerNm]').val(recipNm);
+			$('#exchangeForm input[name=chgerPhnno]').val(recipPhnno);
+			$('#exchangeForm input[name=chgerZipcode]').val(recipZipcode);
+			$('#exchangeForm input[name=chgerBaseAddr]').val(recipBaseAddr);
+			$('#exchangeForm input[name=chgerDtlAddr]').val(recipDtlAddr);
+			$('#exchangeForm input[name=chgerRtnMemo]').val(delvMemo);
+
+			$('#chgerNm').text(recipNm);
+			$('#chgerPhnno').text(recipPhnno);
+			$('#chgerAddr').html(chgerAddr);
+		}
+	}
+
+	// 배송메모 설정
+	var delvMemoSet = function(delvMemoObj) {
+		let delvMemo = delvMemoObj.delvMemo;
+		$('input[name=delvMemo]').val(delvMemo);
+		$("#delvMemo").text(delvMemo);
+	}
+
+	// 배송지 및 교환지 변경 처리
+	var fnChangeAddr = function(param) {
+		addrGb = param;
+		fnChangeDeliveryAddr();
+	}
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -298,7 +298,7 @@
 
 	// 상태값 별 수량 업데이트 처리
 	var fnReloadStatusCount = function() {
-		let url = '/mypage/status/count';
+		let url = '/noMember/status/count';
 		
 		let data = {};
 		

+ 638 - 0
src/main/webapp/WEB-INF/views/web/mypage/NoMemberReturnFormWeb.html

@@ -0,0 +1,638 @@
+<!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/NoMemberLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NoMemberReturnFormWeb.html
+ * @desc    : 비회원 > 반품신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.02   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content 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 class="cont">
+				<form id="returnForm">
+					<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="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>주문일 <span th:text="${oneData.ordDt}"></span></p>
+							</div>
+							<div class="goods_cont">
+								<th:block th:if="${returnList.returnList}" th:each="return, status : ${returnList.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=${return.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+													<span class="thumb">
+														<img th:src="${imageUrl + '/' + return.sysImgNm}" width="100%" alt="">
+													</span>
+													<p>
+														<span class="brand" th:text="${return.brandNm}"></span>
+														<span class="tag primary" th:if="${return.shotDelvYn == 'Y'}">총알배송</span>
+														<span class="tag" th:if="${return.shotDelvYn == 'N' and return.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+														<span class="tag" th:if="${return.selfGoodsYn == 'N'}">업체직배송</span>
+													</p>
+													<p>
+														<span class="name" th:text="${return.goodsNm}"></span>
+													</p>
+												</a>
+											</div>
+											<div class="gd_opt">
+												<div class="option_wrap">
+													<span class="title sr-only">주문 옵션</span>
+													<span class="option" th:if="${return.goodsType == 'G056_S'}" th:each="option, status : ${return.colorNmArr}" th:text="|${return.itemNmArr[status.index]} / ${option} / ${return.optCd2Arr[status.index]}|"></span>
+													<span class="option" th:unless="${return.goodsType == 'G056_S'}" th:text="|${return.colorNm} / ${return.optCd2}|"></span>
+												</div>
+											</div>
+											<div class="gd_calc">
+												<p>
+													<span class="count"><em th:text="${return.ordQty - return.cnclRtnQty}"></em>개</span>
+												</p>
+												<p>
+													<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>
+										<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=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
+																<div class="select">선택</div>
+																<ul class="list">
+																	<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+																	<li class="selected" qty="0" onclick="fnChangeReturnQty(this);">선택</li>
+																	<li th:if="${return.ordCanChgQty > 0}" th:each="num : ${#numbers.sequence(1,return.ordCanChgQty)}" th:attr="qty=${num}" th:text="${num}" onclick="fnChangeReturnQty(this);"></li>
+																</ul>
+															</div>
+														</div>
+													</div>
+												</form>
+											</div>
+										</div>
+									</div>
+									<div class="order_text">
+										<p>반품하실 상품의 수량을 선택하신 후 반품 신청을 하실 수 있습니다.</p>
+									</div>
+								</div>
+								<!-- //주문상품 -->
+								</th:block>
+							</div>
+						</div>
+						<h4 class="subH3">반품 사유</h4>
+						<div class="tbl type1">
+							<table>
+								<tbody>
+									<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="${returnReason}" th:each="oneData, status : ${returnReason}" th:attr="chgReason=${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeReturnReason(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="자세한 사유를 입력해주세요."  onkeyup="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
+													<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
+												</div>
+											</div>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+						<h4 class="subH3 wdGb">반품 방식 선택</h4>
+						<div class="tbl type1 wdGb">
+							<table>
+								<tbody>
+									<tr>
+										<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>
+						<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 id="chgerAddr">
+												<th:block th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></th:block>
+												<button type="button" class="btn btn_default btn_sm" onclick="fnChangeDeliveryAddr();"><span>회수지 변경</span></button>
+											</td>
+											<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}">
+										</tr>
+									</tbody>
+								</table>
+							</div>
+						</div>
+						<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" data-valid-type="numeric" placeholder="송장번호를 입력해주세요.">
+														</div>
+													</div>
+												</form>
+											</td>
+										</tr>
+									</tbody>
+								</table>
+							</div>
+						</div>
+						<h4 class="subH3">환불정보</h4>
+						<div class="tbl type6">
+							<table>
+								<colgroup>
+									<col width="50%">
+									<col width="50%">
+								</colgroup>
+								<tbody>
+									<tr>
+										<td>
+											<dl>
+												<div>
+													<dt>환불 예정 금액</dt>
+													<dd>
+														<div class="price">
+															<span class="return_total_price"><em id="returnAmt">0</em>원</span>
+														</div>
+													</dd>
+												</div>
+												<div class="include_item"> <!-- 할인항목 표기 class명 include_item -->
+													<dt>상품 취소 금액</dt>
+													<dd><em id="goodsCancelAmt">0</em>원</dd>
+												</div>
+												<div class="include_item">
+													<dt>배송비</dt>
+													<dd><em id="deliveryFee">0</em>원</dd>
+												</div>
+												<div class="include_item">
+													<dt>할인 금액 차감</dt>
+													<dd><em id="deductDcAmt">0</em>원</dd>
+												</div>
+											</dl>
+										</td>
+										<td>
+											<dl>
+												<div>
+													<dt>환불 수단</dt>
+													<dd th:if="${paymentInfo.pgGb == 'KCP'}" th:text="${paymentInfo.payMeansNm}"></dd>
+													<dd th:if="${paymentInfo.pgGb == 'NAVER'}">네이버페이</dd>
+													<dd th:if="${paymentInfo.pgGb == 'KAKAO'}">카카오페이</dd>
+													<dd th:if="${paymentInfo.pgGb == 'PAYCO'}">PAYCO</dd>
+												</div>
+												<div>
+													<dt>결제 금액 환불</dt>
+													<dd>
+														<em id="refundPayAmt">0</em>원
+													</dd>
+												</div>
+												<div>
+													<dt>포인트 환불</dt>
+													<dd>
+														<em id="refundPoint">0</em>P
+													</dd>
+												</div>
+												<div>
+													<dt>상품권 환불</dt>
+													<dd>
+														<em id="refundGiftCard">0</em>원
+													</dd>
+												</div>
+											</dl>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+						<div class="txt_info">
+							<ul>
+								<li>
+									카드사로 결제 취소 요청이 전달된 후 환불까지는 평일 기준 3 ~7일이 소요될 수 있습니다.
+								</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="fnGoToNoMemberCreList()"><span>취소</span></button>
+							<button type="button" id="btn_refund_pop" class="btn btn_dark btn_md" onclick="fnReturn()"><span>반품 신청</span></button>
+						</div>
+					</div>
+				</form>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+
+		<!-- 환불계좌 등록 팝업 -->
+		<div class="modal fade refund_pop" id="refundPop" tabindex="-1" role="dialog" aria-labelledby="refundLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content"></div>
+			</div>
+			<a href="#close-modal" rel="modal:close" id="refundPop_close" class="close-modal">Close</a>
+			<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
+		</div>
+		<!-- //환불계좌 등록 팝업 -->
+	</div>
+<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() {
+		// 비회원 LNB 설정
+		fnSetNoMemberLnbList(2);
+		
+		// 비회원 location 설정
+		fnSetNoMemberLocation('취소/반품/교환 내역', '반품 신청');
+
+		// 셀렉트박스 활성화
+		$('.select_custom').each(function() {
+			new sCombo($(this));
+		});
+
+		// 입점업체의 경우 회수방식 회수요청 처리
+		if (oneData.selfGoodsYn != 'Y') {
+			$('#withdraw').click();
+			$('.wdGb').css('display','none');
+		}
+	});
+
+	// 반품 처리
+	var fnReturn = function() {
+		let url = '/noMember/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();
+
+		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;
+		}
+
+		// 추가배송비 PG 처리
+		let addPayCost = $('#returnForm input[name=addPayCost]').val();
+
+		let data = {};
+		data.ordNo = oneData.ordNo;
+		data.ordNm = oneData.ordNm;
+		data.ordPhnno = oneData.ordPhnno;
+		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 {
+				fnGoToNoMemberCreList()
+			}
+		}, true);
+	}
+
+	// 반품 수량 변경 이벤트 처리
+	var fnChangeReturnQty = function(param) {
+		let url = '/noMember/cancel/refund/amt/calculate';
+
+		if (param != null) {
+			$(param).parent().parent().find('input[name=chgQty]').val($(param).attr('qty'));
+		}
+
+		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.ordNm = oneData.ordNm;
+			data.ordPhnno = oneData.ordPhnno;
+			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 spanCpnDcAmt = Number(result.spanCpnDcAmt);							// 포인트 할인 차감 금액
+				let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);						// 다다익선 할인 차감 금액
+				let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);					// 선포인트 할인 차감 금액
+				let sumDeliveryFee = Number(result.sumDeliveryFee);						// 원주문배송비 (반품에서는 안돌려줘서 항상 0일듯)
+				//let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);				// 추가배송비 (무료배송비 허들 깨져서 발생한 배송비) - 추가배송비는 환불컨펌에서 처리
+				let spanTotDeliveryFee = 0;
+				let spanTotRtnDelvFee = Number(result.spanTotRtnDelvFee);				// 반품배송비 (회수요청으로 인한 반품 배송비)
+				let spanRealCnclRtnAmt = Number(result.spanRealCnclRtnAmt);				// 환불 상품 실결제 금액 (환불상품금액 - 할인차감금액)
+				let spanRefundAmt = spanRealCnclRtnAmt + sumDeliveryFee;				// 환불예정금액 (환불상품실결제금액 - 원주문배송비)
+
+				// 반품 사유 및 반품 방식 배송비 계산
+				if (result.spanRealCnclRtnAmt > 0) {
+					let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
+					// 회사사유 : 추가배송비 0, 반품배송비 0
+					if (!isCustomer) {
+						spanTotRtnDelvFee = 0;
+						//spanTotDeliveryFee = 0;											// 추가배송비는 환불컨펌에서 처리
+					}
+					// 고객사유(직접발송) : 반품배송비 0
+					else if (wdGb == 'D') {
+						spanTotRtnDelvFee = 0;
+					}
+				} else {
+					spanTotRtnDelvFee = 0;
+					//spanTotDeliveryFee = 0;												// 추가배송비는 환불컨펌에서 처리
+				}
+
+				let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
+				let addDelvFee = spanTotRtnDelvFee + spanTotDeliveryFee;					// 추가배송비
+				let deductDcAmt = spanCpnDcAmt + spanTmtbDcAmt + spanPrePntDcAmt;			// 할인금액 차감(쿠폰+다다익선+선포인트)
+				let refundPayAmt = spanRefundAmt - addDelvFee;								// 결제금액 환불
+
+				// 추가배송비 영역 설정
+				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((0 - 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 fnChangeReturnReason = function(param) {
+		var customerReasonArr = ['G688_10'];
+		let chgReason = $(param).attr('chgReason');
+
+		// 귀책사유체크(취소,반품,교환)
+		isCustomer = customerReasonArr.includes(chgReason);
+
+		// 반품 사유 설정
+		$(param).parent().parent().find('input[name=chgReason]').val(chgReason);
+
+		// 환불금액 계산
+		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 + '\n';
+		chgerAddr += '<button type="button" class="btn btn_default btn_sm" onclick="fnChangeDeliveryAddr();"><span>회수지 변경</span></button>';
+
+		$('#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);
+	}
+
+	// 환불계좌 등록 콜백 처리
+	var fnRegisterAccountCallback = function(result) {
+		// 환불계좌 정보 설정
+		$('#returnForm input[name=accountNo]').val(result.accountNo);
+		$('#returnForm input[name=accountNm]').val(result.accountNm);
+		$('#returnForm input[name=bankCd]').val(result.bankCd);
+
+		// 반품처리
+		fnReturn();
+	}
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 28 - 7
src/main/webapp/WEB-INF/views/web/order/OrderCompleteWeb.html

@@ -128,7 +128,16 @@
 													<dd><em th:text="${#numbers.formatInteger(delvFeeSumAmt, 1, 'COMMA')}"></em>원</dd>	
 												</div>
 												<div>
-													<dt>상품할인(즉시할인)</dt>
+													<dt>상품할인</dt>
+													<th:block th:if="${goodsDcSumAmt}>0">
+														<dd><em th:text="|- ${#numbers.formatInteger(goodsDcSumAmt, 1, 'COMMA')}|"></em>원</dd>
+													</th:block>
+													<th:block th:if="${goodsDcSumAmt}<1">
+														<dd><em>0</em>원</dd>
+													</th:block>
+												</div>
+												<div>
+													<dt>즉시할인</dt>
 													<th:block th:if="${cpn1DcSumAmt}>0">
 														<dd><em th:text="|- ${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')}|"></em>원</dd>
 													</th:block>
@@ -218,14 +227,20 @@
 												</div>
 												<!-- 신용카드 일때 -->
 												<div>
-													<dt class="sr-only">결제방법</dt>
-													<!-- kcp 신용카드 -->
+													<dt>결제방법</dt>
+													<dd th:if="${orderInfo.pgGb == 'NAVER'}">네이버 페이</dd>
+													<dd th:if="${orderInfo.pgGb == 'KAKAO'}">카카오 페이</dd>
+													<dd th:if="${orderInfo.pgGb == 'PAYCO'}">PAYCO</dd>
+													<dd th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_10'}">실시간계좌이체</dd>
+													<dd th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_20'}">무통장입금</dd>
+													<dd th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_30'}" th:text="|${orderInfo.cardNm}/${orderInfo.cardMips}|"></dd>
+													<dd th:if="${orderInfo.pgGb == 'KCP' and orderInfo.payMeans == 'G014_60'}">휴대폰결제</dd>
+																										
+													<!-- kcp 신용카드
 													<th:block th:if="${orderInfo.payMeans} == 'G014_30'">
-														<!--  체크카드 -->
 														<th:block th:if="${orderInfo.cardType} == 'Y'">
 															<dd th:text="|체크카드(${orderInfo.cardNm})/${orderInfo.cardMips}|"></dd>
 														</th:block>
-														<!--  신용카드 -->
 														<th:block th:if="${orderInfo.cardType} == 'N'">
 															<dd th:text="|신용카드(${orderInfo.cardNm})/${orderInfo.cardMips}|"></dd>
 														</th:block>
@@ -233,6 +248,7 @@
 													<th:block th:if="${orderInfo.payMeans} != 'G014_30'">
 														<dd th:text="${orderInfo.payType}"></dd>
 													</th:block>
+													-->
 												</div>
 												<!-- //신용카드 일때 -->
 											</dl>
@@ -256,8 +272,8 @@
 					</div>
 					<div class="sec_foot">
 						<div class="btn_group_md">
-							<button type="button" class="btn btn_default btn_md"><span>주문 상세보기</span></button>
-							<button type="button" class="btn btn_dark btn_md"><span>쇼핑 계속하기</span></button>
+							<button type="button" class="btn btn_default btn_md" th:ordno="${orderInfo.ordNo}" onclick="fnGoToOrderDetail(this)"><span>주문 상세보기</span></button>
+							<button type="button" class="btn btn_dark btn_md" onclick="location.href='/'"><span>쇼핑 계속하기</span></button>
 						</div>
 					</div>
 				</div>
@@ -392,6 +408,11 @@ var delvMemoSet = function(delvMemoObj) {
 	$("#delvMemo").text(delvMemo);
 }
 
+//주문상세보기 버튼 클릭 이벤트 처리
+var fnGoToOrderDetail = function(param) {
+	let ordNo = $(param).attr('ordNo');
+	cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
+}
 
 
 </script>

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

@@ -169,8 +169,11 @@
 						<dd>
 							<div class="form_field">
 								<input type="hidden" name="rmPntAmt" th:value="${rmPntAmt}"/>
+								<input type="hidden" name="pointUseOrdMinAmt" th:value="${pointUseEnvset.pointUseOrdMinAmt}"/>
+								<input type="hidden" name="pointUseMaxLimit" th:value="${pointUseEnvset.pointUseMaxLimit}"/>
+								
 								<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
-								<th:block th:if="${orgGoodsSumAmt} >= 30000">
+								<th:block th:if="${orgGoodsSumAmt} >= ${pointUseEnvset.pointUseOrdMinAmt}">
 									<div class="input_wrap">
 										<input type="text" name="pntDcAmtStr" class="form_control" maxlength="11" placeholder="사용할 포인트를 입력해주세요." onkeyup="inputNumberFormat(this);">
 										<button type="button" class="btn btn_dark btn_sm" id="btn_point_apply">
@@ -181,9 +184,9 @@
 								<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
 								
 								<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
-								<th:block th:if="${orgGoodsSumAmt} < 30000">
+								<th:block th:if="${orgGoodsSumAmt} < ${pointUseEnvset.pointUseOrdMinAmt}">
 									<div class="input_wrap">
-										<input type="text" class="form_control" maxlength="" placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다." disabled="">
+										<input type="text" class="form_control" maxlength="" th:placeholder="|${#numbers.formatInteger(pointUseEnvset.pointUseOrdMinAmt, 1, 'COMMA')} 이상 결제시에만 포인트 사용이 가능합니다.|" disabled="">
 									</div>
 								</th:block>
 								<!-- //스타일 포인트 3만원 미만 결제시 노출 -->
@@ -191,7 +194,8 @@
 								<p>
 									<span class="remain_point">보유:&nbsp;
 										<em class="rmPntAmt" th:text="${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')}"></em>P
-									</span>(결제금액의 최대 40%까지 사용가능)
+									</span>
+									<th:block th:text="|(결제금액의 최대 ${pointUseEnvset.pointUseMaxLimit}%까지 사용가능)|"></th:block>
 								</p>
 							</div>
 						</dd>

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

@@ -351,12 +351,14 @@
 											개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.
 										</div>
 									</div>
+									<!-- 
 									<div class="payinfo_blk">
 										<a href="">결제대행 서비스 약관 동의<span>보기</span></a>
 										<div class="infotxt">
 											결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
 										</div>
 									</div>
+									 -->
 								</div>
 								<div class="agree_payment">
 									위 주문내역을 확인 하였으며, 회원 본인은 결제에 동의합니다. (전자상거래법 제 8조 제2항)
@@ -395,7 +397,16 @@
 									<dd id="delvSumAmt" th:text="|${#numbers.formatInteger(sumDelvFee, 1, 'COMMA')} 원|"></dd>
 								</div>
 								<div>
-									<dt>할인금액</dt>
+									<dt>상품할인금액</dt>
+									<th:block th:if="${goodsDcSumAmt} > 0">
+										<dd><span class="disc_amount" th:text="|-${#numbers.formatInteger(goodsDcSumAmt, 1, 'COMMA')} 원|"></span></dd>
+									</th:block>
+									<th:block th:if="${goodsDcSumAmt} < 1">
+										<dd><span class="disc_amount" th:text="|${#numbers.formatInteger(goodsDcSumAmt, 1, 'COMMA')} 원|"></span></dd>
+									</th:block>
+								</div>
+								<div>
+									<dt>즉시할인금액</dt>
 									<th:block th:if="${cpn1DcSumAmt} > 0">
 										<dd><span class="disc_amount" id="cpn1DcSumAmt" th:text="|-${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')} 원|"></span></dd>
 									</th:block>
@@ -626,6 +637,11 @@ var custemerInfoSet = function() {
 
 // 1.2 배송정보로드
 var deliveryAddrInfoSet = function(delvObj, temp) {
+	
+	// 2021.04.29 AJAX 로드를 위한 변수 설정	
+	delvObj.foreignBuyYn 	= foreignBuyYn;
+	delvObj.orderMadeYn 	= orderMadeYn;
+	
 	$.ajax( {
 		type		: "POST",
 		url 		: '/order/deliveryAddrInfo',
@@ -866,8 +882,12 @@ var freegiftInfoSet = function() {
 					$("#orderForm .total_deduct").text(total_deduct.addComma());			// 사은품총사용포인트
 					$("#orderAmtForm .freegiftUsePnt").text(total_deduct);
 					
-					// 포인트초기화기능
-					pntDcAmtReset();
+					// 2021.04.29 사은품기능 리셋
+					var pntDcAmt = parseInt($("#orderAmtForm .pntDcSumAmt").text());
+					if (pntDcAmt > 0) {
+						mcxDialog.alert("적용된 할인/혜택이 초기화 됩니다.");
+						pntDcAmtReset();
+					}
 				});
 				
 				// 2021.04.29 무료사은품 기본선택
@@ -878,6 +898,42 @@ var freegiftInfoSet = function() {
 					// 첫번째 무료 선택 
 					if (usepoint == 0 && count == 1) {
 						$(this).trigger("click");
+						
+						total_gift 		= 0;
+						total_deduct 	= 0;
+						
+						// 2021.04.14 사은품 사용 포인트가 보유포인트보다 작아야 한다.
+						var rmPntAmt 			= parseInt($("#orderForm input[name='rmPntAmt']").val());
+						var freegiftUsePnt 		= parseInt($("#orderAmtForm .freegiftUsePnt").text());
+						var usepoint			= parseInt($(this).attr("usepoint"));
+						rmPntAmt 				= rmPntAmt - freegiftUsePnt - usepoint;
+						
+						if (rmPntAmt < 0) {
+							mcxDialog.alert("보유포인트가 부족합니다.");
+							return false;
+						}
+						
+						$("#orderForm .freegiftRdo").each(function(){
+							if ($(this).attr("allYn") == "Y" ) {
+								total_gift 		+= 1;
+							}
+							
+							// 라디오버튼 사은품 체크
+							if ($(this).is(":checked")) {
+								// 수령거부가 아닐때 체크
+								if ($(this).val() != "noSel") {
+									total_gift 		+= 1;
+									total_deduct 	+= parseInt($(this).attr("usepoint"));
+								}
+							}
+						});
+						
+						$("#orderForm .total_gift").text(total_gift);							// 사은품총선택개수
+						$("#orderForm .total_deduct").text(total_deduct.addComma());			// 사은품총사용포인트
+						$("#orderAmtForm .freegiftUsePnt").text(total_deduct);
+						
+						// 포인트초기화기능
+						pntDcAmtReset();
 					}
 				});
 				
@@ -892,11 +948,13 @@ var freegiftInfoSet = function() {
 				});
 				
 				// 2021.04.29 사은품동의 체크 기능
+				/*
 				$("#orderForm #chk-agree_gift").on("click", function(){
 					if ($(this).is(":checked") == false) {
 						mcxDialog.alert("미동의시 사은품 지급이 되지 않습니다.");
 					}
 				});
+				*/
 			}
 			
 			// 1.6 결제타입로드
@@ -935,8 +993,9 @@ var paymentInfoSet = function() {
 						$("#orderForm .area_paymethod .agree_insurance").show();
 					} else {
 						$("#orderForm .area_paymethod .agree_insurance").hide();
-						$("#orderForm input[name=insuranceYn]").attr("checked", false);
 					}
+					// 2021.04.29 수정
+					$("#orderForm input[name=insuranceYn]").attr("checked", false);
 				});
 				
 				// 결재하기
@@ -1019,7 +1078,6 @@ var paymentInfoSet = function() {
 					}
 					
 					// 사은품지급할 경우 체크 2020.04.29 사은품지급이 필수가 아닙니다.
-					/*
 					if ($("#orderAmtForm .freegiftValArr").text().length > 0) {
 						if (!$("#orderForm #chk-agree_gift").is(":checked")) {
 							mcxDialog.alert("사은품 지급 정보 동의를 체크해주세요.");
@@ -1029,7 +1087,6 @@ var paymentInfoSet = function() {
 							return false;
 						}
 					}
-					*/
 					
 					// 결재수단
 					if (gagajf.isNull(paynormal)) {
@@ -1043,6 +1100,12 @@ var paymentInfoSet = function() {
 					var paynormalArr		= paynormal.split("|");
 					var pgGb				= paynormalArr[0];
 					var payMeans			= paynormalArr[1];
+					var custPayMeans		= "N";
+					
+					// 자주쓰는결제타입
+					if ($("#orderForm #chk-agree_paymethod").is(":checked") == true) {
+						custPayMeans		= "Y";
+					}
 
 					// 주문상세데이타 생성
 					$("#orderDetailInfo .cartSq").each(function(){
@@ -1122,12 +1185,14 @@ var paymentInfoSet = function() {
 					var freegiftGoodsArr 		= $("#orderAmtForm .freegiftGoodsArr").text().split(",");
 					var freegiftUsePointArr 	= $("#orderAmtForm .freegiftUsePointArr").text().split(",");
 					
+					/*
 					if (!$("#orderForm #chk-agree_gift").is(":checked") == false) {
 						freegiftValArr 			= "";
 						freegiftSqArr 			= "";
 						freegiftGoodsArr 		= "";
 						freegiftUsePointArr 	= "";
 					}
+					*/
 					
 					// 주문데이타 생성
 					var orderData = {
@@ -1159,6 +1224,7 @@ var paymentInfoSet = function() {
 						,"freegiftGoodsArr"		: freegiftGoodsArr
 						,"freegiftUsePointArr"	: freegiftUsePointArr
 						,"giftMsg"				: ""
+						,"custPayMeans"			: custPayMeans
 					};
 					
 					$.ajax( {
@@ -1345,7 +1411,8 @@ var dcAmtInfoSet = function() {
 					var freegiftUsePnt 		= parseInt($("#orderAmtForm .freegiftUsePnt").text());
 					var pntDcAmt 			= parseInt(uncomma($("#orderForm input[name='pntDcAmtStr']").val()));
 					var realOrdAmt 			= parseInt($("#orderAmtForm .realOrdSumAmt").text());
-					var applyPntDcAmt 		= (realOrdAmt * 40) / 100;
+					var pointUseMaxLimit	= parseInt($("#orderForm input[name='pointUseMaxLimit']").val());
+					var applyPntDcAmt 		= (realOrdAmt * pointUseMaxLimit) / 100;
 					
 					rmPntAmt				= rmPntAmt - freegiftUsePnt;
 					
@@ -1397,7 +1464,7 @@ var dcAmtInfoSet = function() {
 					
 					// 실결제금액보다 크게 적용 되었을때 적용 불가능
 					if (pntDcAmt > applyPntDcAmt) {
-						mcxDialog.alert("결제금액의 최대 40%를 초과 사용 할 수 없습니다.");
+						mcxDialog.alert("결제금액의 최대 " + pointUseMaxLimit +"%를 초과 사용 할 수 없습니다.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -1948,15 +2015,15 @@ var custCpnNotApply = function(obj) {
 
 // 1.14 선포인트리셋기능 (사용안함)
 var prePntDcAmtReset = function() {
-	var rmPrePntAmt = 0;
-	
-	if ($("#orderForm input[name='rmPrePntAmt']") != null) {
+	// 2021.04.29 수정
+	var rmPrePntAmt = parseInt($("#orderForm input[name='rmPrePntAmt']").val());
+	if (rmPrePntAmt > 0) {
 		rmPrePntAmt = parseInt($("#orderForm input[name='rmPrePntAmt']").val());
 		$("#orderForm input[name='prePntDcAmt']").val(rmPrePntAmt);
+	} else {
+		rmPrePntAmt = 0;
 	}
 	
-	$("#orderForm input[name='prePntDcAmt']").val(rmPrePntAmt);
-	
 	// 선포인트사용여부 체크 후 적용
 	$("#orderForm input[name='rdi-beforpoint']").each(function(){
 		// 선포인트 초기 설정 사용함
@@ -1980,7 +2047,7 @@ var prePntDcAmtReset = function() {
 		});
 	});
 
-	$("#prePntDcAmt").text(getZeroMinusDelAmt(rmPrePntAmt)+" 원");
+	$("#orderForm #prePntDcAmt").text(getZeroMinusDelAmt(rmPrePntAmt)+" 원");
 
 	// 포인트기능 리렛
 	pntDcAmtReset();
@@ -2102,19 +2169,23 @@ var custCpnSumAmtCal = function() {
 		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
 		ordSumAmt			= ordSumAmt + ordAmt;
 		
-		// 선포인트사용여부
+		// 선포인트사용여부 
 		// 할인금액합계 = 다다익선수량금액 + 다다익선금액금액 + 상품쿠폰금액 + 장바구니금액 + 선포인트금액
 		if (prePntDcAmtYn == "Y") {
 			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt + prePntDcAmt1;
+			
+			// 2021.04.29 선포인트사용포인트 적립포인트금액 0원처리
+			if (prePntDcAmt1 < 1) {
+				savePntSumAmt	= savePntSumAmt + savePntAmt1;
+			}
 		} else {
 			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt;
+			savePntSumAmt	= savePntSumAmt + savePntAmt1;
 		}
 		
 		// 주문금액설정
 		$(this).parent().find(".ordAmt").text(ordAmt);
 		$(this).parent().find(".dcSumAmt").text(dcSumAmt);
-		
-		savePntSumAmt		= savePntSumAmt + savePntAmt1;
 	});
 	
 	// 포인트, 상품권 금액 분배
@@ -2163,6 +2234,9 @@ var custCpnSumAmtCal = function() {
 	$("#realOrdAmt").text(realOrdSumAmt.addComma()); // 총 결제 예정 금액
 	$("#orderForm .realOrdAmt").text(realOrdSumAmt.addComma() + " 원"); // 총 결제 예정 금액
 	
+	// 2021.04.29 적립포인트금액 선포인트 사용시 사용금액제외
+	$("#orderForm #savePntSumAmt").text(savePntSumAmt.addComma() + " P");
+	
 	var tempSavePnt			= savePntSumAmt - prePntDcAmt;
 	
 	// 사은품사용 후 보유포인트	

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

@@ -90,7 +90,7 @@
 		<div class="form_field">
 			<div class="agree_gift">
 				<p>
-					<input id="chk-agree_gift" type="checkbox" chedked><label for="chk-agree_gift"><span>동의합니다</span></label>
+					<input id="chk-agree_gift" type="checkbox"><label for="chk-agree_gift"><span>동의합니다</span></label>
 				</p>
 				<p class="txt">
 					사은품 지금에 대한 내용을 확인하였으며, 이에 동의합니다.

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

@@ -77,7 +77,6 @@
 				</ul>
 			</div>
 		</div>
-		<!-- 
 		<div class="form_field">
 			<div class="agree_paymethod">
 				<input id="chk-agree_paymethod" type="checkbox">
@@ -88,14 +87,12 @@
 				</label>
 			</div>
 		</div>
-		 -->
-		 
 		<div class="form_field">
 			<div class="agree_insurance">
 				<input id="chk-insurance" type="checkbox" name="insuranceYn"> 
 				<label for="chk-insurance"> 
 					<span>소비자 피해 보상보험 신청&nbsp;&nbsp;<em class="tmark_optional">(선택)</em></span> 
-					<a href="javascript:void(0);" class="btn_underline"><span>FAQ확인</span></a>
+					<a href="/callcenter/faq/form" class="btn_underline"><span>FAQ확인</span></a>
 				</label>
 				<p>
 					‘전자상거래 등에서의 소비자보호에 관한 법률‘에 따라 현금 결제 시 서울보증보험㈜가 제공하는 소비자

+ 8 - 1
src/main/webapp/WEB-INF/views/web/popup/DelvAddrAddPopWeb.html

@@ -127,6 +127,13 @@ $("#btn_delivery_addr_save").on("click", function(){
 		delvMemo = $("#deliveryAddForm input[name=delvMemoText]").val();
 	}
 	
+	// 2021.04.29 추가
+	if (gagajf.isNull(delvMemo)) {
+		mcxDialog.alert("기타사항을 입력해주세요.");
+		$("#deliveryAddForm input[name=delvMemoText]").focus();
+		return false;
+	}
+	
 	// custDelvAddrSq 부모창으로 전달
 	var delvObj = {
 		"custDelvAddrSq"	: 0
@@ -179,7 +186,7 @@ $("#btn_delivery_addr_save").on("click", function(){
 var deliveryAddFormCheck = function() {
 	// TODO 유효성 체크 추가
 	if (gagajf.isNull($("#deliveryAddForm input[name=recipNm]").val())) {
-		mcxDialog.alert("이름을 입력해주세요.");
+		mcxDialog.alert("받는분을 입력해주세요.");
 		$('#deliveryAddForm input[name=custNm]').focus();
 		return false;
 	}

+ 8 - 1
src/main/webapp/WEB-INF/views/web/popup/DelvAddrModifyPopWeb.html

@@ -158,6 +158,13 @@ $("#btn_delivery_modi_save").on("click", function(){
 		delvMemo = $("#deliveryModifyForm input[name=delvMemoText]").val();
 	}
 	
+	// 2021.04.29 추가
+	if (gagajf.isNull(delvMemo)) {
+		mcxDialog.alert("기타사항을 입력해주세요.");
+		$("#deliveryAddForm input[name=delvMemoText]").focus();
+		return false;
+	}
+	
 	// 배송지정보설정
 	var jsonObj = {
 		"defaultYn"			: defaultYn
@@ -208,7 +215,7 @@ $("#btn_delivery_modi_save").on("click", function(){
 var deliveryModifyFormCheck = function() {
 	// TODO 유효성 체크 추가
 	if (gagajf.isNull($("#deliveryModifyForm input[name=recipNm]").val())) {
-		mcxDialog.alert("이름을 입력해주세요.");
+		mcxDialog.alert("받는분을 입력해주세요.");
 		$('#deliveryModifyForm input[name=custNm]').focus();
 		return false;
 	}

+ 7 - 0
src/main/webapp/WEB-INF/views/web/popup/DelvMemoChangePopWeb.html

@@ -90,6 +90,13 @@ $(document).ready( function() {
 		if (rtnTxt == "기타사항") {
 			rtnTxt = $("#deliveryAddrMemoForm input[name='delvMemoText']").val();
 		} 
+		
+		// 2021.04.29 추가
+		if (gagajf.isNull(rtnTxt)) {
+			mcxDialog.alert("기타사항을 입력해주세요.");
+			$("#deliveryAddrMemoForm input[name='delvMemoText']").focus();
+			return false;
+		}
 
 		// 배송메모 부모창에 설정
 		if (typeof fnChangeDelvMemo === 'function') {

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

@@ -63,7 +63,7 @@
 						<td>
 							<div class="form_field">
 								<div class="input_wrap">
-									<input type="text" class="form_control" name="accountNo" value="" placeholder="계좌번호를 입력해주세요.">
+									<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>
 								</div>
 							</div>

+ 13 - 40
src/main/webapp/biz/mypage.js

@@ -351,47 +351,20 @@ var fnReceipt = function(param) {
 }
 
 // 문자열 길이를 체크
-var cfnGetTextLength = function(obj, maxLen, dpLoc) {
-	var valLen = $(obj).val().length;
-	var cByte = 0;
-	var sliceLen = 0;
+var fnGetTextLength = function(obj, maxLen) {
+	//var content = $(obj).val();
+	//$('.txt_cnt').html('<span id="review_cnt" class="c_primary">'+content.length+'</span>/'+maxLen);    //글자수 실시간 카운팅
+	//
+	//
+	//if (content.length > maxLen){
+	//	mcxDialog.alertC("최대 "+maxLen+"자까지 입력 가능합니다.");
+	//	$(obj).val(content.substring(0, maxLen));
+	//	$('.txt_cnt').html('<span id="review_cnt" class="c_primary">'+maxLen+'</span>/'+maxLen);
+	//}
 	
-	for (i = 0; i < valLen; i++) {
-		var aChar = $(obj).val().charAt(i);
-		if (escape(aChar).length == 6) {
-			cByte += 3; //한글이면 3를 더한다
-		} else if (aChar == '\n') {
-			cByte += 2; //엔터면 2을 더한다
-		} else {
-			cByte++; //한글아니면 1을 더한다
-		}
-		
-		if (cByte <= maxLen) {
-			sliceLen = i + 1;
-		}
-	}
-	
-	// 사용자가 입력한 값이 제한 값을 초과하는지를 검사한다.
-	if (parseInt(cByte) > parseInt(maxLen)) {
-		mcxDialog.alert('허용된 글자수가 초과되었습니다.\n초과된 부분은 자동으로 삭제됩니다.');
-		//var orgStr = $(obj).val();
-		var slicedStr = $(obj).val().substr(0, sliceLen);
-		$(obj).val(slicedStr);
-		var cByte = 0;
-		for (i = 0; i < $(obj).val().length; i++) {
-			var aChar = $(obj).val().charAt(i);
-			if (escape(aChar).length == 6) {
-				cByte += 3; //한글이면 3를 더한다
-			} else if (aChar == '\n') {
-				cByte += 2; //엔터면 2을 더한다
-			} else {
-				cByte++; //한글아니면 1을 더한다
-			}
-		}
-	}
-	
-	$(dpLoc).text(cByte.addComma());
-}
+	var content = $(obj).val();
+	$('.txt_cnt').html('<span id="review_cnt" class="c_primary">'+content.length+'</span>/'+maxLen);
+};
 
 // 리뷰작성 페이지 이동
 var fnReviewCreate = function(obj1,obj2,obj3) {

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


Некоторые файлы не были показаны из-за большого количества измененных файлов