Преглед изворни кода

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

gagamel пре 5 година
родитељ
комит
0ef3cfd256
32 измењених фајлова са 1578 додато и 204 уклоњено
  1. 11 2
      src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java
  2. 14 5
      src/main/java/com/style24/front/biz/service/TsfDeliveryService.java
  3. 30 6
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  4. 4 1
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  5. 60 5
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  6. 12 12
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  7. 11 2
      src/main/java/com/style24/persistence/domain/SweetTracker.java
  8. 12 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml
  9. 11 5
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  10. 12 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  11. 170 38
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html
  12. 660 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageExchangeFormMob.html
  13. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  14. 114 52
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReturnFormMob.html
  15. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartDelvFeeSaveGoodsPopupWeb.html
  16. 3 3
      src/main/webapp/WEB-INF/views/web/cart/CartTmtbSalesGoodsPopupWeb.html
  17. 7 1
      src/main/webapp/WEB-INF/views/web/common/layout/MypageLayoutWeb.html
  18. 10 10
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreExchangeDetailFormWeb.html
  19. 353 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageDeliveryInfoFormWeb.html
  20. 5 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  21. 1 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  22. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb_20210315.html
  23. 8 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  24. 10 10
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreExchangeDetailFormWeb.html
  25. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderDetailFormWeb.html
  26. 0 6
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderListFormWeb.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberReturnFormWeb.html
  28. 5 1
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  29. 9 1
      src/main/webapp/biz/mypage.js
  30. 14 1
      src/main/webapp/ux/mo/css/style24_m.css
  31. 14 9
      src/main/webapp/ux/pc/css/layout.css
  32. 11 7
      src/main/webapp/ux/pc/css/main.css

+ 11 - 2
src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java

@@ -61,6 +61,15 @@ public interface TsfDeliveryDao {
 	void updateOrdChgSqStat(SweetTracker sweetTracker);		
 	
 
-	int saveTemp(SweetTracker sweetTracker);			
-	
+	int saveTemp(SweetTracker sweetTracker);
+
+	/**
+	 * 스윗트래커 정보 조회
+	 * 
+	 * @param SweetTracker
+	 * @return Collection<SweetTracker>
+	 * @author card007
+	 * @since 2021. 05. 04
+	 */
+	Collection<SweetTracker> getSweetTrackerDeliveryInfo(SweetTracker sweetTracker);
 }

+ 14 - 5
src/main/java/com/style24/front/biz/service/TsfDeliveryService.java

@@ -8,15 +8,13 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.biz.dao.TscOrderDao;
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.core.support.env.TscConstants.OrderDetailStat;
 import com.style24.core.support.env.TscConstants.OrderChangeStat;
-
+import com.style24.core.support.env.TscConstants.OrderDetailStat;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.dao.TsfDeliveryDao;
 import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.SweetTracker;
 import com.style24.persistence.domain.OrderChange;
-
+import com.style24.persistence.domain.SweetTracker;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -112,4 +110,15 @@ public class TsfDeliveryService {
 		return rtn;
 	}
 
+	/**
+	 * 스윗트래커 정보 조회
+	 *
+	 * @param SweetTracker
+	 * @return Collection<SweetTracker>
+	 * @author card007
+	 * @since 2021. 05. 04
+	 */
+	public Collection<SweetTracker> getSweetTrackerDeliveryInfo(SweetTracker sweetTracker) {
+		return deliveryDao.getSweetTrackerDeliveryInfo(sweetTracker);
+	}
 }

+ 30 - 6
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -89,6 +89,8 @@ public class TsfOrderService {
 		int ordNo = 0;
 		int index = 0;
 		int ordReqChgQty = 0;
+		int count = 0;
+		Collection<Order> list = orderDao.getOrderListForMypage(order);
 
 		for (Order tmpOrder : orderDao.getOrderListForMypage(order)) {
 			// 세트상품 옵션별 배열로 담기
@@ -130,8 +132,7 @@ public class TsfOrderService {
 
 			// 전체 구매확정 가능 여부 설정
 			if ("Y".equals(allDecideYn)
-				&& !TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value().equals(tmpOrder.getOrdDtlStat())
-				&& !TscConstants.OrderDetailStat.PURCHASE_CONFIRM.value().equals(tmpOrder.getOrdDtlStat())) {
+				&& !TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value().equals(tmpOrder.getOrdDtlStat())) {
 				allDecideYn = "N";
 			}
 
@@ -331,7 +332,24 @@ public class TsfOrderService {
 			}
 
 			if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
-				result = coreKcpService.kcpPayRequest(param, request, response);
+				if(TscConstants.PayMeans.GIFTCARD.value().equals(param.getPayMeans())) {
+					// 상품권 100% 결제 (PG PASS)
+					result.setPayAmt(0);
+					result.setPgCpnAmt(0);
+					result.setNpayPntAmt(0);
+					result.setPayGb("O");
+					result.setCardPcableYn("Y");
+					result.setEscrowYn("N");
+					result.setUpdNo(param.getCustNo());
+					result.setRegNo(param.getCustNo());
+					result.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());
+					result.setPgGb(TscConstants.PgGb.ISTYLE.value());
+					result.setOrdNo(Integer.parseInt(request.getParameter("ordr_idxx")));
+					result.setPayMeans(param.getPayMeans());
+				} else {
+					// 일반 KCP 결제
+					result = coreKcpService.kcpPayRequest(param, request, response);
+				}
 			} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 				result = coreKakaoPayService.approveKakaoPayment(param);
 			} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
@@ -364,16 +382,22 @@ public class TsfOrderService {
 			// TB_PAYMENT 등록. 실패시 PG 환불.
 			if(coreOrderDao.insertPayment(result) < 1) {
 				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
-					coreKcpService.kcpCancel(result);
+					if(TscConstants.PayMeans.GIFTCARD.value().equals(param.getPayMeans())) {
+						// 상품권 100% 결제 (PG PASS)
+						result.setPayStat(TscConstants.PaymentStat.PAY_BEFORE_CANCEL.value());
+						coreOrderDao.insertPayment(result);
+					} else {
+						coreKcpService.kcpCancel(result);
+					}
 				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 					param.setLeftAmt(0);
 					coreKakaoPayService.kakaoPayRollBack(param);
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
 					param.setLeftAmt(0);
 					coreNaverPayService.naverPayRollBack(param);
-				} else {
-					throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
 				}
+
+				throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
 			}
 		} catch(Exception e) {
 			e.printStackTrace();

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

@@ -212,7 +212,10 @@ public class TsfCartController extends TsfBaseController {
 		mav.addObject("tmtbDcDescList", tmtbDcDescList);
 
 		// 다다익선 상품 조회 (수량, 금액 섞어서)
-		mav.addObject("goodsList", goodsService.getTmtbGoodsList(param));
+		Collection<Goods> goodsList = goodsService.getTmtbGoodsList(param);
+		goodsList.removeIf(goods -> !TscConstants.GoodsType.NORMAL.value().equals(goods.getGoodsType()));
+
+		mav.addObject("goodsList", goodsList);
 
 		mav.setViewName(super.getDeviceViewName("cart/CartTmtbSalesGoodsPopup"));
 		return mav;

+ 60 - 5
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -36,6 +36,7 @@ import com.style24.front.biz.service.TsfCartService;
 import com.style24.front.biz.service.TsfCommonService;
 import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfCustomerService;
+import com.style24.front.biz.service.TsfDeliveryService;
 import com.style24.front.biz.service.TsfGiftcardService;
 import com.style24.front.biz.service.TsfOrderChangeService;
 import com.style24.front.biz.service.TsfOrderService;
@@ -60,6 +61,7 @@ import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.Review;
+import com.style24.persistence.domain.SweetTracker;
 import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
@@ -138,6 +140,9 @@ public class TsfMypageController extends TsfBaseController {
 	@Autowired
 	private TscWmsService coreWmsService;
 	
+	@Autowired
+	private TsfDeliveryService deliveryService;
+	
 	@Autowired
 	private TscEnvsetService eventService;
 
@@ -212,7 +217,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 02. 15
 	 */
-	@GetMapping({"/order/detail/form/{ordNo}"})
+	@GetMapping("/order/detail/form/{ordNo}")
 	public ModelAndView mypageOrderDetailForm(@PathVariable(value = "ordNo") int ordNo) {
 		ModelAndView mav = new ModelAndView();
 
@@ -885,7 +890,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 02. 04
 	 */
-	@GetMapping({"/cre/list/form"})
+	@GetMapping("/cre/list/form")
 	public ModelAndView mypageCreListForm() {
 		ModelAndView mav = new ModelAndView();
 
@@ -961,7 +966,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 04. 12
 	 */
-	@PostMapping({"/cre/cancel/detail/form"})
+	@PostMapping("/cre/cancel/detail/form")
 	public ModelAndView mypageCreCancelDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
@@ -994,7 +999,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 04. 13
 	 */
-	@PostMapping({"/cre/return/detail/form"})
+	@PostMapping("/cre/return/detail/form")
 	public ModelAndView mypageCreReturnDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
@@ -1030,7 +1035,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author card007
 	 * @since 2021. 04. 13
 	 */
-	@PostMapping({"/cre/exchange/detail/form"})
+	@PostMapping("/cre/exchange/detail/form")
 	public ModelAndView mypageCreExchangeDetailForm(OrderChange orderChange) {
 		ModelAndView mav = new ModelAndView();
 
@@ -1325,6 +1330,51 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 
+	/**
+	 * 배송조회 화면
+	 * 
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since  2021. 05. 04
+	 */
+	@PostMapping("/delivery/info/form")
+	@ResponseBody
+	public ModelAndView deliveryInfoForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+		
+		// 고객번호 설정
+		order.setCustNo(TsfSession.getInfo().getCustNo());
+
+		// 주문번호 설정
+		mav.addObject("ordNo", order.getOrdNo());
+
+		// 주문목록 조회
+		Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
+
+		if (orderList.size() == 0) {
+			mav.setViewName("redirect:/mypage/order/list/form");
+			return mav;
+		}
+
+		mav.addObject("orderList", orderList);
+		mav.addObject("oneData", orderList.iterator().next().get("oneData"));
+
+
+		// 주문 배송지 정보 조회
+		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
+
+		// 스윗트래커 정보 조회
+		SweetTracker sweetTracker = new SweetTracker();
+		sweetTracker.setShipCompCd(order.getShipCompCd());
+		sweetTracker.setInvoiceNo(order.getInvoiceNo());
+		mav.addObject("sweetTrackerInfoList", deliveryService.getSweetTrackerDeliveryInfo(sweetTracker));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageDeliveryInfoForm"));
+		
+		return mav;
+	}
+
 	/**
 	 * 위시리스트 등록처리
 	 *
@@ -1969,6 +2019,11 @@ public class TsfMypageController extends TsfBaseController {
 	public GagaMap getAccountCheck(@RequestBody CustAccount custAccount) {
 		custAccount.setIpAddress(TsfSession.getIpAddress());
 		boolean isValid = false;
+		
+		log.info("custAccount.getAccountNm() ::: {}",custAccount.getAccountNm());
+		log.info("custAccount.getBankCd() ::: {}",custAccount.getBankCd());
+		log.info("custAccount.getAccountNo() ::: {}",custAccount.getAccountNo());
+		
 		GagaMap result = coreKcpService.checkAccount(custAccount);
 		if ("0000".equals(result.get("resCd"))) {
 			isValid = true;

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

@@ -839,28 +839,28 @@ public class TsfOrderController extends TsfBaseController {
 		 *  */
 		
 		String[] goodsNameArr = new String[2]; goodsNameArr[0] ="테스트1";goodsNameArr[1] = "테스트2";
-		String[] goodsPriceArr = new String[2]; goodsPriceArr[0] ="10000";goodsPriceArr[1] = "12000";
+		String[] goodsPriceArr = new String[2]; goodsPriceArr[0] ="20000";goodsPriceArr[1] = "22000";
 		String[] goodsQuantityArr = new String[2]; goodsQuantityArr[0] ="2";goodsQuantityArr[1] = "3";
 		
-		order.setItemNmArr(goodsNameArr);		// 상품명 배열
-		order.setGoodsPriceArr(goodsPriceArr);	// 상품별 가격 배열
-		order.setItemQtyArr(goodsQuantityArr);	// 상품별 수량 배열
-		order.setOrdNo(order.getOrdNo());		// 주문번호
-		order.setRealOrdAmt(32000);				// 결제금액
-		order.setBirthYmd("198912021");			// 생년월일 + 성별(남자 : 1, 여자 : 2)
-		order.setPayMeans(TscConstants.PayMeans.ACCOUNT_TRANSFER.value());		// 무통장입금 or 계좌이체
+		order.setItemNmArr(goodsNameArr);			// 상품명 배열
+		order.setGoodsPriceArr(goodsPriceArr);		// 상품별 가격 배열
+		order.setItemQtyArr(goodsQuantityArr);		// 상품별 수량 배열
+		order.setOrdNo(order.getOrdNo());			// 주문번호
+		order.setRealOrdAmt(53000);					// 결제금액
+		order.setBirthYmd("198912021");				// 생년월일 + 성별(남자 : 1, 여자 : 2)
+		order.setPayMeans(TscConstants.PayMeans.BANK_DEPOSIT.value());		// 무통장입금 or 계좌이체
 		order.setBankNm("신한은행");				// 은행명  >> PG 송부 후 result에서 값 입력하면됨
 		order.setOrdNm("이태영");					// 주문자명
-		order.setOrdTelno("");					// 주문자전화1 ("-" 포함)
-		order.setOrdPhnno("010-1234-5555");		// 주문자전화2 ("-" 포함)
-		order.setRecipZipcode("08755");			// 주문자우편번호
+		order.setOrdTelno("");						// 주문자전화1 ("-" 포함)
+		order.setOrdPhnno("010-1234-5555");			// 주문자전화2 ("-" 포함)
+		order.setRecipZipcode("08755");				// 주문자우편번호
 		order.setRecipAddr("서울시 관악구 신림동 1414-11 타워타워 101호");	// 주문자주소
 		order.setOrdEmail("xodud1202@naver.com");	// 주문자이메일
 		order.setRecipNm("이태영");					// 수령인명
 		order.setRecipTelno("");					// 수령인전화번호
 		order.setRecipPhnno("010-1234-5555");		// 수령인휴대폰번호
 		order.setCustNo(100010);					// 고객번호
-		order.setVaNo("110242222222");				// 가상계좌번호
+		order.setVaNo("110222119990");				// 가상계좌번호
 
 		// uSafeGuaranteeInsurance(order);
 		orderService.uSafeGuaranteeInsurance(order);

+ 11 - 2
src/main/java/com/style24/persistence/domain/SweetTracker.java

@@ -34,11 +34,20 @@ public class SweetTracker extends TscBaseDomain {
 	private String courier_code;
 	private String secret_value;
 	
-	
 	private Integer level; 	  // 배송단계(1~6단계)
 	private Integer ordDtlNo;
 	private Integer ordChgSq;
 	private Integer tmp_sq;
-	
+
+	private String shipCompCd;
+	private String invoiceNo;
+	private String telno;
+	private String timeTrans;
+	private String timeSweet;
+	private String telnoOffice;
+	private String telnoMan;
+	private String recvAddr;
+	private String recvName;
+	private String sendName;
 
 }

+ 12 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml

@@ -99,6 +99,17 @@
 		)
 	</insert>	
 	
-	
+	<!-- 스윗트래커 정보 조회 -->
+	<select id="getSweetTrackerDeliveryInfo" parameterType="SweetTracker" resultType="SweetTracker">
+		/*TsfDelivery.getSweetTrackerDeliveryInfo*/
+		SELECT TIME_TRANS
+		     , DELV_WHERE
+		     , DETAILS
+		     , IFNULL(TELNO_MAN, TELNO_OFFICE) AS TELNO
+		  FROM TB_SWEET_TRACKER
+		 WHERE SHIP_COMP_CD = #{shipCompCd}
+		   AND INVOICE_NO = #{invoiceNo}
+		 ORDER BY DELV_LEVEL DESC;
+	</select>
 
 </mapper>

+ 11 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -119,7 +119,7 @@
 					 , R.REVIEW_SQ
 					 , IF(NOW() <![CDATA[<]]> O.ORD_DT + INTERVAL 90 DAY, 'Y', 'N')		AS REVIEWABLE_YN
 					 , TIMESTAMPDIFF(DAY, NOW(), OD.DELV_EDDT + INTERVAL 2 WEEK)		AS PURCHASE_CONFIRM_DAY
-					 , DATE_FORMAT(GRS.DELV_RES_DT, '%Y.%m.%d') AS DELV_RES_DT
+		             , (SELECT MIN(DATE_FORMAT(DELV_RES_DT,'%Y.%m.%d')) FROM TB_GOODS_RES_SELL WHERE GOODS_CD = G.GOODS_CD AND NOW() <![CDATA[ < ]]> DELV_RES_DT AND USE_YN = 'Y') AS DELV_RES_DT
 					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
 					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
 					 , CA.BANK_CD
@@ -152,8 +152,6 @@
 				   AND R.ORD_DTL_NO = OD.ORD_DTL_NO
 				  LEFT OUTER JOIN TB_DELIVERY_ADDR DA
 				    ON DA.DELV_ADDR_SQ = OD.DELV_ADDR_SQ
-				  LEFT OUTER JOIN TB_GOODS_RES_SELL GRS
-				    ON GRS.GOODS_CD = OD.GOODS_CD
 				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 									 FROM TB_ORDER_CHANGE_DETAIL OCD
@@ -188,6 +186,9 @@
 			</choose>
 			<if test="ordNo != null and ordNo != ''">
 		   AND O.ORD_NO = #{ordNo}
+			</if>
+			<if test="ordDtlNo != null and ordDtlNo != ''">
+		   AND OD.ORD_DTL_NO = #{ordDtlNo}
 			</if>
 			<if test="ordDtlNoArr != null">
 		   AND OD.ORD_DTL_NO IN
@@ -220,7 +221,7 @@
 				, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
 				, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.SHIP_COMP_CD, Z.GIFT_PACK_YN, Z.SHIP_COMP_NM, Z.INVOICE_NO
 				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.ORD_DTL_STAT_NM, Z.REVIEW_SQ
-				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM, Z.DELV_ADDR_SQ
+				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM, Z.DELV_ADDR_SQ, Z.PAY_STAT
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.PAY_STAT
 	</select>
 
@@ -335,6 +336,7 @@
 			 , DF.REAL_DELV_AMT
 			 , P.PAY_AMT
 			 , P.NPAY_PNT_AMT
+			 , P.PG_CPN_AMT
 		  FROM TB_ORDER_DETAIL OD
 		  LEFT OUTER JOIN (
 			  SELECT ORD_NO
@@ -347,8 +349,9 @@
 		    ON OD.ORD_NO = DF.ORD_NO
 		  LEFT OUTER JOIN (
 		      SELECT ORD_NO
-		           , SUM(PAY_AMT)    AS PAY_AMT
+		           , SUM(PAY_AMT)         AS PAY_AMT
 		           , SUM(NPAY_PNT_AMT)    AS NPAY_PNT_AMT
+		           , SUM(PG_CPN_AMT)      AS PG_CPN_AMT
 		        FROM TB_PAYMENT
 		       WHERE ORD_NO = #{ordNo}
 		       GROUP BY ORD_NO
@@ -445,6 +448,9 @@
 		    ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
 		   AND OD.ORD_NO = #{ordNo}
 		   AND OD.ORD_EXCH_GB = 'O'
+		<if test="ordDtlNo != null and ordDtlNo != ''">
+		   AND OD.ORD_DTL_NO = #{ordDtlNo}
+		</if>
 		<if test="supplyCompCd != null and supplyCompCd != ''">
 		   AND OD.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>

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

@@ -98,7 +98,9 @@
 		             , OD.CHANGEABLE_YN
 		             , OD.RETURNABLE_YN
 		             , G.SELF_GOODS_YN
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                             AS BRAND_NM
 		             , IFNULL(OCD.ORD_REQ_CHG_QTY, 0)                                   AS ORD_REQ_CHG_QTY
 		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
 		             , CA.BANK_CD
@@ -116,6 +118,9 @@
 		            ON OD.GOODS_CD = G.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON B.BRAND_CD = G.BRAND_CD
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 		                                , SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 		                             FROM TB_ORDER_CHANGE_DETAIL OCD
@@ -241,7 +246,9 @@
 		             , OD.CHANGEABLE_YN
 		             , OD.RETURNABLE_YN
 		             , G.SELF_GOODS_YN
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                                  AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                                   AS BRAND_NM
 		             , IFNULL(OCD.ORD_REQ_CHG_QTY, 0)                                         AS ORD_REQ_CHG_QTY
 		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)          AS ORD_CAN_CHG_QTY
 		             , CA.BANK_CD
@@ -262,6 +269,9 @@
 		            ON OD.GOODS_CD = G.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON B.BRAND_CD = G.BRAND_CD
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN TB_DELV_FEE_POLICY DFP
 		            ON OD.DELV_FEE_CD = DFP.DELV_FEE_CD
 		           AND OD.SUPPLY_COMP_CD = DFP.SUPPLY_COMP_CD

+ 170 - 38
src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html

@@ -212,7 +212,7 @@
 			</div>
 			<div class="popup_con">
 				<div class="button_list clear">
-					<button type="button"><span>수량 0개</span></button>
+					<button type="button" qty=0 onclick="fnChangeCancelQty(this);"><span>수량 0개</span></button>
 					<th:block th:each="num : ${#numbers.sequence(1,cancel.ordCanChgQty)}">
 						<button type="button" th:qty="${num}" onclick="fnChangeCancelQty(this);"><span th:text="|수량 ${num}개|"></span></button>
 					</th:block>
@@ -224,6 +224,89 @@
 </th:block>
 <!-- //210408_취소 수량 선택 팝업 -->
 
+<!-- 210408_ 추가 : 환불 계좌 등록 팝업 -->
+<div id="refundAccountPop" class="popup_box refundAccountPop">
+	<div class="lap">
+		<div class="popup_close">카테고리닫기</div>
+		<div class="popup_head sr-only">
+			<h2 class="">환불 계좌 등록 팝업</h2>
+		</div>
+		<div class="popup_con">
+			<div class="tbl_wrap">
+				<div class="tbl_tit"> 
+					<h3>환불 계좌 등록</h3><!-- 210409_수정 : 텍스트 변경 -->
+				</div>
+				<div class="tbl type1">
+					<table>
+						<colgroup>
+							<col width="*">
+						</colgroup>   
+						<tbody>
+							<tr>
+								<th>예금주</th>
+								<td>
+									<div class="form_field">
+										<input type="text" name="accountNm" class="form_control" th:value="${customerInfo.custNm}" placeholder="이름를 입력해 주세요" readonly="readonly">
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th>은행명</th>
+								<td>
+									<div class="form_field">
+										<div class="select_custom select_bank">
+											<div class="combo">
+												<div class="select">선택</div>
+												<input type="hidden" name="bankCd" value=""/>
+											</div>
+										</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th>계좌번호</th>
+								<td>
+									<div class="input_wrap certi_wrap">
+										<input type="tel" class="form_control" value="" placeholder="">
+										<button type="button" id="btn_bank_certi" class="btn btn_dark"><span>계좌인증</span></button>
+									</div>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			
+		</div>
+		<div class="pop_foot">
+			<div class="btn_group_flex">
+				<div class="">
+					<button type="submit" id="btn_bank_return" class="btn btn_dark btn_block"><span>계좌 등록 후 환불 신청</span></button>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_ 추가 : 환불 계좌 등록 토스트 팝업 -->
+
+<!-- 210408_ 추가 : 은행 선택 팝업 -->
+<div id="refundBankPop" class="popup_box refundBankPop">
+	<div class="lap">
+		<div class="popup_close">카테고리닫기</div>
+		<div class="popup_head sr-only">
+			<h2 class="">은행 선택 팝업</h2>
+		</div>
+		<div class="popup_con">
+			<div class="button_list clear">
+				<th:block th:if="${bankList}" th:each="oneData, status : ${bankList}">
+					<button type="button" th:id="|bankCd_${oneData.cd}|"><span th:text="${oneData.cdNm}"></span></button>
+				</th:block>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //210408_ 추가 : 은행 선택 팝업 -->
+
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 let cancelList 		= [[${cancelList}]];
@@ -276,26 +359,12 @@ var fnCancel = function() {
 
 	// 무통장입금, 결제완료 일때 환불계좌정보 체크
 	if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
-		let data 		= {};
-		data.ordNo 		= oneData.ordNo;
-		data.accountNm 	= oneData.accountNm;
-		let jsonData	 = JSON.stringify(data);
-
-		$.ajax( {
-			type		: "POST",
-			url 		: '/mypage/refund/account/register/popup/form',
-			data		: jsonData,
-			dataType 	: 'html',
-			beforeSend : function(xhr, settings) {
-				xhr.setRequestHeader("AJAX"			, "true");
-				xhr.setRequestHeader('Accept'		, 'application/json');
-				xhr.setRequestHeader('Content-Type'	, 'application/json');
-			},
-			success 	: function(result) {
-				$("#refundPop .modal-dialog .modal-content").html(result);
-				$("#refundPop").modal("show");
-			}
-		});
+		let data = {};
+		data.ordNo 			= oneData.ordNo;
+		data.accountNm 		= oneData.accountNm;
+		
+		$('#refundAccountPop').show().addClass("active");
+		$("body").css({"overflow":"hidden"});
 		
 		return false;
 	}
@@ -304,7 +373,7 @@ var fnCancel = function() {
 	let url = '/mypage/cancel';
 
 	// 취소 처리
-	let data = {};
+	let data 				= {};
 	data.ordNo 				= oneData.ordNo;
 	data.chgReason 			= 'G686_10';
 	data.chgReasonNm 		= '고객변심';
@@ -411,19 +480,89 @@ var fnChangeCancelQty = function(param) {
 	});
 }
 
-// 환불계좌 등록 콜백 처리
-var fnRegisterAccountCallback = function(result) {
-	// 환불계좌 정보 설정
-	$('#cancelForm input[name=accountNo]').val(result.accountNo);
-	$('#cancelForm input[name=accountNm]').val(result.accountNm);
-	$('#cancelForm input[name=bankCd]').val(result.bankCd);
+let isValid = false;
 
-	// 취소처리
-	fnCancel();
-}
+// 계좌인증
+$('#btn_bank_certi').on('click', function () {
+	
+	if (gagajf.isNull($('#refundAccountPop input[name=bankCd]').val())) {
+		mcxDialog.alert('은행을 선택해주세요.');
+		return false;
+	}
+	
+	if (gagajf.isNull($('#refundAccountPop input[name=accountNo]').val())) {
+		mcxDialog.alert('계좌번호를 입력해주세요.');
+		return false;
+	}
+	
+	if (!isValid) {
+		let url 		= '/mypage/account/check';
+		let accountNm 	= $('#refundAccountPop input[name=accountNm]').val();
+		let accountNo 	= $('#refundAccountPop input[name=accountNo]').val();
+		let bankCd 		= $('#refundAccountPop input[name=bankCd]').val();
+		
+		let data = {};
+		data.accountNm 	= accountNm;
+		data.accountNo 	= accountNo;
+		data.bankCd 	= bankCd;
+		data.ordNo 		= ordNo;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+			isValid = result.isValid;
+			
+			if (isValid) {
+				mcxDialog.alert('계좌인증에 성공했습니다.');
+				// 계좌인증 성공 시 Disabled 처리
+				$('#refundAccountPop .select_custom.select_bank').attr('disabled', true);
+				$('#refundAccountPop input[name=accountNo]').attr('disabled', true);
+				return false;
+			} else {
+				mcxDialog.alert('계좌정보를 다시 확인해주세요.');
+				return false;
+			}
+		});
+	}
+});
+
+//계좌등록 후 환불신청 버튼 클릭 이벤트
+$('#btn_bank_return').click(function() {
+	if (isValid) {
+		let accountNm 	= $('#refundAccountPop input[name=accountNm]').val();
+		let accountNo 	= $('#refundAccountPop input[name=accountNo]').val();
+		let bankCd 		= $('#refundAccountPop input[name=bankCd]').val();
+		
+		// 부모창의 input 값으로 환불계좌정보 설정
+		$('#returnForm input[name=accountNo]').val(accountNo);
+		$('#returnForm input[name=accountNm]').val(accountNm);
+		$('#returnForm input[name=bankCd]').val(bankCd);
+
+		// 팝업 닫기
+		$(".close-modal").trigger("click");
+		
+		// 취소신청
+		fnCancel();
+	} else {
+		mcxDialog.alert('계좌인증이 필요합니다.');
+	}
+});
 </script>
 
 <script>
+// 버튼 색
+$(document).on('click','.popup_box .button_list button',function(){
+	$('.popup_box .button_list button').removeClass('on');
+	$(this).addClass('on');
+});
+
+// 210408_송장번호 input 글자 수 제한
+function handleOnInput(el, maxlength) {
+	if(el.value.length > maxlength)  {
+		el.value = el.value.substr(0, maxlength);
+	}
+}
+
 $(document).ready(function(){
 	/*
 	// 세부 사유 글자 수 제한
@@ -510,13 +649,6 @@ $(document).ready(function(){
 	*/
 
 });
-
-//210408_송장번호 input 글자 수 제한
-function handleOnInput(el, maxlength) {
-	if(el.value.length > maxlength)  {
-		el.value = el.value.substr(0, maxlength);
-	}
-}
 </script>
 
 </th:block>

+ 660 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageExchangeFormMob.html

@@ -0,0 +1,660 @@
+<!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  : MypageExchangeFormMob.html
+ * @desc    : 마이페이지 > 교환신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.04   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+
+<main role="" id="" class="container my">
+	<section class="content my_exchange">
+		<form id="exchangeForm" class="form_wrap">
+			<input type="hidden" name="chgReason"/>
+			
+			<div class="inner wide bg_beige">
+				<div class="order_number">
+					<dl class="clear">
+						<dt>주문번호</dt>
+						<dd th:text="${oneData.ordNo}"></dd>
+					</dl>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="part_goods">
+					<div class="goods_top">
+						<div th:unless="${oneData.giftPackYn == 'Y'}">주문일 <span class="date" th:text="${oneData.ordDt}"></span></div>
+						<div th:if="${oneData.giftPackYn == 'Y'}">선물일 <span class="date" th:text="${oneData.ordDt}"></span></div>
+					</div>
+					
+					<th:block th:if="${exchangeList.returnList}" th:each="exchange, status : ${exchangeList.returnList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<div class="goods_section">
+							<div class="goods_detail">
+								<a href="">
+									<div class="thumb_box">
+										<img th:src="${imageUrl + '/' + exchange.sysImgNm}" width="100%" alt="">
+									</div>
+									<div class="info_box">
+										<div class="od_name">
+											<div class="brand">
+												<span th:text="${exchange.brandNm}"></span>
+												<div class="badge_wrap">
+													<em class="tag primary" th:if="${exchange.shotDelvYn == 'Y'}">총알배송</em>
+													<em class="tag" th:if="${exchange.shotDelvYn == 'N' and exchange.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
+													<em class="tag" th:if="${exchange.selfGoodsYn == 'N'}">업체직배송</em>
+												</div>
+											</div>
+											<div class="name" th:text="${exchange.goodsNm}"></div>
+										</div>
+										<div class="od_opt">
+											<div class="option">
+												<th:block th:if="${return.goodsType == 'G056_S'}" th:each="option, status : ${return.colorNmArr}">
+													<em th:text="${return.itemNmArr[status.index]}"></em>
+													<em th:text="${return.optCd2Arr[status.index]}"></em>
+												</th:block>
+												<th:block th:unless="${return.goodsType == 'G056_S'}">
+													<em th:text="${return.colorNm}"></em>
+													<em th:text="${return.optCd2}"></em>
+												</th:block>
+											</div>
+										</div>
+										<div class="od_calc">
+											<th:block th:if="${(return.ordAmt - return.cnclRtnAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}">
+												<p class="sale_price">
+													<del><em th:text="${#numbers.formatInteger(return.ordAmt - return.cnclRtnAmt, 1, 'COMMA')}"></em>원</del>
+												</p>
+											</th:block>
+											<p class="price">
+												<span class="selling_price">
+													<em th:text="${#numbers.formatInteger(return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt, 1, 'COMMA')}"></em>원
+												</span>
+											</p>
+										</div>
+									</div>
+								</a>
+							</div>
+							<div class="goods_select">
+								<div class="select_custom select_count">
+									<div class="combo">
+										<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
+										<div class="select">수량 0개</div>
+									</div>
+								</div>
+							</div>
+							<div class="goods_btn_wrap btn_group_flex">
+								<div>
+									<button type="button" class="btn btn_dark btn_opion_change">
+										<span>교환 옵션 변경</span>
+									</button>
+								</div>
+							</div>
+							<th:block th:if="${#lists.size(exchangeList.returnList) == status.count}">
+								<div class="goods_txt">
+									<p class="cf_txt cf_desc">교환하실 상품의 수량 및 옵션을 선택하신 후<br>교환 신청을 하실 수 있습니다.</p>
+								</div>
+							</th:block>
+						</div>
+					</th:block>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>교환 사유</h3>
+					</div>
+					<div class="tbl tbl_tarea">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<th class="sr-only">반품 접수 일자</th>
+								<td>
+									<div class="select_custom select_exchange">
+										<div class="combo">
+											<div class="select">교환 사유를 선택하세요.</div>
+										</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th class="sr-only">반품 완료 일자</th>
+								<td>
+									<div class="textarea_wrap">
+										<textarea class="doc_return" name="" id="" placeholder="자세한 사유를 입력해주세요."></textarea>
+										<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
+									</div>
+								</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</div>
+			<div class="inner wdGb">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>반품방식 선택</h3>
+					</div>
+					<div class="retrieve_method">
+						<div class="tbl tbl_radio">
+							<table>
+								<colgroup>
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th class="sr-only">방문 회수</th>
+										<td>
+											<div class="form_field">
+												<input type="radio" name="wdGb" id="withdraw"  checked="checked" value="W">
+												<label for="withdraw"><span>방문 회수 <b class="c_primary">택배사에서 고객에게 방문하여 회수</b></span></label>
+											</div>
+										</td>
+									</tr>
+									<tr>
+										<th class="sr-only">직접 배송</th>
+										<td>
+											<div class="form_field">
+												<input type="radio" name="wdGb" id="direct" value="D">
+												<label for="direct"><span>직접 배송 <b class="c_primary">고객이 반품지로 직접 반송</b></span></label>
+											</div>
+										</td>
+									</tr>
+								</tbody>
+								
+							</table>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="retrieve_box visit" style="display:block;" id="chgerLocation">
+					<div class="tbl_wrap">
+						<div class="tbl_tit"> 
+							<h3>반품 회수지 주소</h3>
+							<button type="button" id="btn_adrsChange_pop" class="btn_popup" onclick="fnChangeDeliveryAddr();"><span>회수지 변경</span></button>
+						</div>
+						<div class="tbl">
+							<div class="ship_info">
+								<dl>
+									<div class="name">
+										<dt><span class="sr-only">배송지명</span></dt>
+										<dd th:text="${deliveryAddrInfo.recipNm}"></dd>
+									</div>
+									<div class="addr">
+										<dt><span class="sr-only">배송주소</span></dt>
+										<dd id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr}    ${deliveryAddrInfo.recipDtlAddr}|"></dd>
+									</div>
+									<div class="phone">
+										<dt><span class="sr-only">휴대폰 번호</span></dt>
+										<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+									</div>
+									<div class="desc_txt">택배사에서 반품 상품을 직접 회수할 장소 선택</div>
+								</dl>
+								<input type="hidden" name="chgerNm" 		th:value="${deliveryAddrInfo.recipNm}">
+								<input type="hidden" name="chgerPhnno" 		th:value="${deliveryAddrInfo.recipPhnno}">
+								<input type="hidden" name="chgerZipcode" 	th:value="${deliveryAddrInfo.recipZipcode}">
+								<input type="hidden" name="chgerBaseAddr" 	th:value="${deliveryAddrInfo.recipBaseAddr}">
+								<input type="hidden" name="chgerDtlAddr" 	th:value="${deliveryAddrInfo.recipDtlAddr}">
+								<input type="hidden" name="chgerRtnMemo" 	th:value="${deliveryAddrInfo.delvMemo}">
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="retrieve_box direct" style="display:none;" id="returnLocation">
+					<div class="tbl_wrap">
+						<div class="tbl_tit"> 
+							<h3>반송 정보</h3>
+						</div>
+						<div class="tbl">
+							<div class="ship_info">
+								<dl>
+									<div class="addr">
+										<dt><span>반송 주소</span></dt>
+										<dd th:text="|${deliveryAddrInfo.rtnLocBaseAddr} ${deliveryAddrInfo.rtnLocDtlAddr}|"></dd>
+									</div>
+									<div class="phone">
+										<dt><span>반송 송장번호</span></dt>
+										<dd><input type="tel" class="form_control" name="wdInvoiceNo" data-valid-type="numeric" value="" oninput='handleOnInput(this, 20)' placeholder="송장번호를 입력해주세요."></dd>
+									</div>
+								</dl>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>교환 상품 배송지</h3>
+						<button type="button" class="btn_popup"><span>배송지 변경</span></button>
+					</div>
+					<div class="tbl">
+						<div class="ship_info">
+							<dl>
+								<div class="name">
+									<dt><span class="sr-only">배송지명</span></dt>
+									<dd th:text="${deliveryAddrInfo.recipNm}"></dd>
+								</div>
+								<div class="addr">
+									<dt><span class="sr-only">배송주소</span></dt>
+									<dd id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr}    ${deliveryAddrInfo.recipDtlAddr}|"></dd>
+								</div>
+								<div class="phone">
+									<dt><span class="sr-only">휴대폰 번호</span></dt>
+									<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+								</div>
+							</dl>
+							<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}">
+						</div>
+					</div>
+				</div>
+				<!-- 교환 배송비결제 필요할 경우 -->
+				<div class="required_group">
+					<p>배송비 <span class="c_primary">5,000원</span> 추가 결제가 필요합니다.</p>
+				</div>
+				<!-- //교환 배송비결제 필요할 경우 -->
+				<div class="btn_group btn_group_flex">
+					<div><button type="button" class="btn btn_default"><span>취소</span></button></div>
+					<div><button type="button" id="btn_exchange_confirm" class="btn btn_dark" onclick="fnExchange()"><span>교환 신청</span></button></div>
+				</div>
+			</div>
+		</form>
+	</section>
+</main>
+
+<!-- 210408_ 추가 : 교환 수량 선택 팝업 -->
+<th:block th:if="${exchangeList.returnList}" th:each="exchange, status : ${exchangeList.returnList}">
+	<div id="exchangeCountPop" class="popup_box exchangeCountPop">
+		<div class="lap">
+			<div class="popup_close">카테고리닫기</div>
+			<div class="popup_head sr-only">
+				<h2 class="">주문상태 선택 팝업</h2>
+			</div>
+			<div class="popup_con">
+				<div class="button_list clear">
+					<button type="button" qty=0 onclick="fnChangeExchangeQty(this);"><span>수량 0개</span></button>
+					<th:block th:each="num : ${#numbers.sequence(1, exchange.ordCanChgQty)}">
+						<button type="button" th:qty="${num}" onclick="fnChangeExchangeQty(this);"><span th:text="|수량 ${num}개|"></span></button>
+					</th:block>
+					<input type="hidden" name="ordDtlNo" th:value="${return.ordDtlNo}">
+				</div> 
+			</div>
+		</div>
+	</div>
+</th:block>
+<!-- //210408_ 추가 : 수량 선택 팝업 -->
+
+<!-- 210408_ 추가 : 사유 선택 팝업 -->
+<div id="exchangeReasonPop" class="popup_box exchangeReasonPop">
+	<div class="lap">
+		<div class="popup_close">카테고리닫기</div>
+		<div class="popup_head sr-only">
+			<h2 class="">주문상태 선택 팝업</h2>
+		</div>
+		<div class="popup_con">
+			<div class="button_list">
+				<th:block th:if="${exchangeReason}" th:each="oneData, status : ${exchangeReason}">
+					<button type="button" th:attr="chgReason=${oneData.cd}" onclick="fnChangeExchangeReason(this);">
+						<span th:text="${oneData.cdNm}"></span>
+					</button>
+				</th:block>
+			</div> 
+		</div>
+	</div>
+</div>
+<!-- //210408_ 추가 : 사유 선택 팝업 -->
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+var isLogin 		= [[${isLogin}]];
+let oneData 		= [[${oneData}]];
+let isCustomer 		= false;
+let addrGb 			= '';
+let jsonObj 		= {};
+
+$(document).ready(function() {
+	// 입점업체의 경우 회수방식 방문회수 처리
+	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 		: "/mypage/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;
+		let qty = item.chgQty;
+
+		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 = '/mypage/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.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 {
+			cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
+		}
+	}, 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>

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

@@ -642,10 +642,10 @@
 											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.npayPntAmt, 1, 'COMMA')}|"></span>원</div></dd>
 										</div>
 									</th:block>
-									<th:block th:if="${paymentInfo.pgCpnAmt} > 0">
+									<th:block th:if="${orderAmtInfo.pgCpnAmt} > 0">
 										<div>
 											<dt>제휴 할인</dt>
-											<dd><div><span th:text="|- ${#numbers.formatInteger(paymentInfo.pgCpnAmt, 1, 'COMMA')}|"></span>원</div></dd>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.pgCpnAmt, 1, 'COMMA')}|"></span>원</div></dd>
 										</div>
 									</th:block>
 									<th:block th:if="${orderAmtInfo.savePntAmt} > 0">

+ 114 - 52
src/main/webapp/WEB-INF/views/mob/mypage/MypageReturnFormMob.html

@@ -61,16 +61,16 @@
 											<div class="name" th:text="${return.goodsNm}"></div>
 										</div>
 										<div class="od_opt">
-												<div class="option">
-													<th:block th:if="${return.goodsType == 'G056_S'}" th:each="option, status : ${return.colorNmArr}">
-														<em th:text="${return.itemNmArr[status.index]}"></em>
-														<em th:text="${return.optCd2Arr[status.index]}"></em>
-													</th:block>
-													<th:block th:unless="${return.goodsType == 'G056_S'}">
-														<em th:text="${return.colorNm}"></em>
-														<em th:text="${return.optCd2}"></em>
-													</th:block>
-												</div>
+											<div class="option">
+												<th:block th:if="${return.goodsType == 'G056_S'}" th:each="option, status : ${return.colorNmArr}">
+													<em th:text="${return.itemNmArr[status.index]}"></em>
+													<em th:text="${return.optCd2Arr[status.index]}"></em>
+												</th:block>
+												<th:block th:unless="${return.goodsType == 'G056_S'}">
+													<em th:text="${return.colorNm}"></em>
+													<em th:text="${return.optCd2}"></em>
+												</th:block>
+											</div>
 										</div>
 										<div class="od_calc">
 											<th:block th:if="${(return.ordAmt - return.cnclRtnAmt) > (return.realOrdAmt + return.pntDcAmt + return.gfcdUseAmt)}">
@@ -140,7 +140,7 @@
 				</div>
 			</div>
 			
-			<div class="inner">
+			<div class="inner wdGb">
 				<div class="tbl_wrap">
 					<div class="tbl_tit"> 
 						<h3>반품방식 선택</h3>
@@ -156,7 +156,7 @@
 										<th class="sr-only">방문 회수</th>
 										<td>
 											<div class="form_field">
-												<input type="radio" name="wdGb" id="withdraw"  checked="checked" value="W">
+												<input type="radio" name="wdGb" id="withdraw" checked="checked" value="W">
 												<label for="withdraw"><span>방문 회수 <b class="c_primary">택배사에서 고객에게 방문하여 회수</b></span></label>
 											</div>
 										</td>
@@ -190,23 +190,23 @@
 									<div class="name">
 										<dt><span class="sr-only">배송지명</span></dt>
 										<dd th:text="${deliveryAddrInfo.recipNm}"></dd>
-										<input type="hidden" name="chgerNm" th:value="${deliveryAddrInfo.recipNm}">
 									</div>
 									<div class="addr">
 										<dt><span class="sr-only">배송주소</span></dt>
 										<dd id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr}    ${deliveryAddrInfo.recipDtlAddr}|"></dd>
-										<input type="hidden" name="chgerZipcode" th:value="${deliveryAddrInfo.recipZipcode}">
-										<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
-										<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
-										<input type="hidden" name="chgerRtnMemo" th:value="${deliveryAddrInfo.delvMemo}">
 									</div>
 									<div class="phone">
 										<dt><span class="sr-only">휴대폰 번호</span></dt>
 										<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
-										<input type="hidden" name="chgerPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
 									</div>
 									<div class="desc_txt">택배사에서 반품 상품을 직접 회수할 장소 선택</div>
 								</dl>
+								<input type="hidden" name="chgerNm" 		th:value="${deliveryAddrInfo.recipNm}">
+								<input type="hidden" name="chgerPhnno" 		th:value="${deliveryAddrInfo.recipPhnno}">
+								<input type="hidden" name="chgerZipcode" 	th:value="${deliveryAddrInfo.recipZipcode}">
+								<input type="hidden" name="chgerBaseAddr" 	th:value="${deliveryAddrInfo.recipBaseAddr}">
+								<input type="hidden" name="chgerDtlAddr" 	th:value="${deliveryAddrInfo.recipDtlAddr}">
+								<input type="hidden" name="chgerRtnMemo" 	th:value="${deliveryAddrInfo.delvMemo}">
 							</div>
 						</div>
 					</div>
@@ -340,7 +340,7 @@
 			</div>
 			<div class="popup_con">
 				<div class="button_list clear">
-					<button type="button"><span>수량 0개</span></button>
+					<button type="button" qty=0 onclick="fnChangeReturnQty(this);"><span>수량 0개</span></button>
 					<th:block th:each="num : ${#numbers.sequence(1, return.ordCanChgQty)}">
 						<button type="button" th:qty="${num}" onclick="fnChangeReturnQty(this);"><span th:text="|수량 ${num}개|"></span></button>
 					</th:block>
@@ -413,7 +413,7 @@
 								<th>계좌번호</th>
 								<td>
 									<div class="input_wrap certi_wrap">
-										<input type="tel" class="form_control" value="" placeholder="">
+										<input type="tel" class="form_control" name="accountNo" value="" placeholder="">
 										<button type="button" id="btn_bank_certi" class="btn btn_dark"><span>계좌인증</span></button>
 									</div>
 								</td>
@@ -422,7 +422,6 @@
 					</table>
 				</div>
 			</div>
-			
 		</div>
 		<div class="pop_foot">
 			<div class="btn_group_flex">
@@ -445,7 +444,7 @@
 		<div class="popup_con">
 			<div class="button_list clear">
 				<th:block th:if="${bankList}" th:each="oneData, status : ${bankList}">
-					<button type="button" th:id="|bankCd_${oneData.cd}|"><span th:text="${oneData.cdNm}"></span></button>
+					<button type="button" th:id="${oneData.cd}"><span th:text="${oneData.cdNm}"></span></button>
 				</th:block>
 			</div>
 		</div>
@@ -461,6 +460,7 @@ let oneData 		= [[${oneData}]];
 let paymentInfo 	= [[${paymentInfo}]];
 let isCustomer 		= true;
 let jsonObj 		= {};
+let ordNo 			= [[${oneData.ordNo}]];
 
 $(document).ready(function() {
 	// 입점업체의 경우 회수방식 직접배송 처리
@@ -477,7 +477,7 @@ $(".select_custom.select_count").each(function(idx){
 		$(".returnCountPop").hide();
 		
 		// 수량팝업활성화
-		$("#returnCountPop").eq(idx).show().addClass("active");
+		$(".returnCountPop").eq(idx).show().addClass("active");
 		
 		$("body").css({"overflow":"hidden"});
 	});
@@ -529,8 +529,8 @@ var fnReturn = function() {
 	let bankCd 		= $('#returnForm input[name=bankCd]').val();
 	
 	// 임시
-	paymentInfo.payMeans 	= "G014_20";
-	paymentInfo.payStat 	= "G016_30";
+	//paymentInfo.payMeans 	= "G014_20";
+	//paymentInfo.payStat 	= "G016_30";
 	
 	// 무통장입금, 결제완료 일때 환불계좌정보 체크
 	if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
@@ -620,6 +620,7 @@ var fnChangeReturnQty = function(param) {
 
 		let data 				= {};
 		data.ordNo 				= oneData.ordNo;
+		data.delvFeeCd 			= oneData.delvFeeCd;
 		data.chgGb 				= 'G680_30';
 		data.ordDtlNoArr 		= ordDtlNoArr;
 		data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
@@ -642,20 +643,22 @@ var fnChangeReturnQty = function(param) {
 				let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
 				// 회사사유 : 추가배송비 0, 반품배송비 0
 				if (!isCustomer) {
-					spanTotRtnDelvFee = 0;
+					spanTotRtnDelvFee 	= 0;
+					spanTotDeliveryFee 	= 0;
 				}
 				// 고객사유(직접발송) : 반품배송비 0
 				else if (wdGb == 'D') {
 					spanTotRtnDelvFee = 0;
 				}
 			} else {
-				spanTotRtnDelvFee = 0;
+				spanTotRtnDelvFee 	= 0;
+				spanTotDeliveryFee 	= 0;
 			}
 			
 			let goodsCancelAmt 	= spanCnclRtnAmt;										// 상품취소금액
-			let addDelvFee 		= spanTotRtnDelvFee;									// 추가배송비
-			let deductDcAmt 	= 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;	// 할인금액 차감(쿠폰+다다익선+선포인트)
-			let refundPayAmt 	= spanRefundAmt - spanTotRtnDelvFee;					// 결제금액 환불
+			let addDelvFee 		= spanTotRtnDelvFee + spanTotDeliveryFee;					// 추가배송비
+			let deductDcAmt 	= spanCpnDcAmt + spanTmtbDcAmt + spanPrePntDcAmt;			// 할인금액 차감(쿠폰+다다익선+선포인트)
+			let refundPayAmt 	= spanRefundAmt - addDelvFee;								// 결제금액 환불
 			
 			if (!isCustomer) {
 				refundPayAmt += spanTotDeliveryFee;
@@ -702,21 +705,10 @@ $('#returnForm input[name=wdGb]').on('change', function() {
 	fnChangeReturnQty();
 });
 
-// 환불계좌 등록 콜백 처리
-var fnRegisterAccountCallback = function(result) {
-	// 환불계좌 정보 설정
-	$('#cancelForm input[name=accountNo]').val(result.accountNo);
-	$('#cancelForm input[name=accountNm]').val(result.accountNm);
-	$('#cancelForm input[name=bankCd]').val(result.bankCd);
-
-	// 취소처리
-	fnCancel();
-}
-
 // 반품 사유 변경 이벤트
 var fnChangeReturnReason = function(param) {
-	var customerReasonArr = ['G688_10'];
-	let chgReason = $(param).attr('chgReason');
+	var customerReasonArr 	= ['G688_10'];
+	let chgReason 			= $(param).attr('chgReason');
 
 	// 귀책사유체크(취소, 반품, 교환)
 	isCustomer = customerReasonArr.includes(chgReason);
@@ -729,7 +721,7 @@ var fnChangeReturnReason = function(param) {
 	fnChangeReturnQty();
 }
 
-//회수지 정보 설정
+// 회수지 정보 설정
 var delvAddrSet = function(delvObj) {
 	let chgerNm 			= delvObj.recipNm;
 	let chgerPhnno 			= delvObj.recipPhnno;
@@ -750,10 +742,78 @@ var delvAddrSet = function(delvObj) {
 	$('#chgerPhnno').text(chgerPhnno);
 	$('#chgerAddr').html(chgerAddr);
 }
+
+let isValid = false;
+
+// 계좌인증
+$('#btn_bank_certi').on('click', function () {
+	
+	if (gagajf.isNull($('#refundAccountPop input[name=bankCd]').val())) {
+		mcxDialog.alert('은행을 선택해주세요.');
+		return false;
+	}
+	
+	if (gagajf.isNull($('#refundAccountPop input[name=accountNo]').val())) {
+		mcxDialog.alert('계좌번호를 입력해주세요.');
+		return false;
+	}
+	
+	if (!isValid) {
+		let url 		= '/mypage/account/check';
+		let accountNm 	= $('#refundAccountPop input[name=accountNm]').val();
+		let accountNo 	= $('#refundAccountPop input[name=accountNo]').val();
+		let bankCd 		= $('#refundAccountPop input[name=bankCd]').val();
+		
+		let data = {};
+		data.accountNm 	= accountNm;
+		data.accountNo 	= accountNo;
+		data.bankCd 	= bankCd;
+		data.ordNo 		= ordNo;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+			isValid = result.isValid;
+			
+			if (isValid) {
+				mcxDialog.alert('계좌인증에 성공했습니다.');
+				// 계좌인증 성공 시 Disabled 처리
+				$('#refundAccountPop .select_custom.select_bank').attr('disabled', true);
+				$('#refundAccountPop input[name=accountNo]').attr('disabled', true);
+				return false;
+			} else {
+				mcxDialog.alert('계좌정보를 다시 확인해주세요.');
+				return false;
+			}
+		});
+	}
+});
+
+// 계좌등록 후 환불신청 버튼 클릭 이벤트
+$('#btn_bank_return').click(function() {
+	if (isValid) {
+		let accountNm 	= $('#refundAccountPop input[name=accountNm]').val();
+		let accountNo 	= $('#refundAccountPop input[name=accountNo]').val();
+		let bankCd 		= $('#refundAccountPop input[name=bankCd]').val();
+		
+		// 부모창의 input 값으로 환불계좌정보 설정
+		$('#returnForm input[name=accountNo]').val(accountNo);
+		$('#returnForm input[name=accountNm]').val(accountNm);
+		$('#returnForm input[name=bankCd]').val(bankCd);
+
+		// 팝업 닫기
+		$(".close-modal").trigger("click");
+		
+		// 반품신청
+		fnReturn();
+	} else {
+		mcxDialog.alert('계좌인증이 필요합니다.');
+	}
+});
 </script>
 
 <script>
-//세부 사유 글자 수 제한
+// 세부 사유 글자 수 제한
 $('.doc_return').keyup(function(e){
 	var content = $(this).val();
 	$('#return_cnt').html(content.length);
@@ -794,14 +854,16 @@ $(document).on("click","#btn_refund_pop",function(e){
 	$("body").css({"overflow":"hidden"});
 });
 
-//210408_ 추가 : 은행선택 팝업 스크립트
+// 210408_ 추가 : 은행선택 팝업 스크립트
 $(document).on("click","#refundAccountPop .select_bank",function(e){
-	$('#refundBankPop').show().addClass("active");
-	$('#refundBankPop').css({"z-index":"1000"});
-	$("body").css({"overflow":"hidden"});
+	if (isValid == false) {
+		$('#refundBankPop').show().addClass("active");
+		$('#refundBankPop').css({"z-index":"1000"});
+		$("body").css({"overflow":"hidden"});
+	}
 });
 
-//210408_ 추가 : 환불계좌등록 팝업 스크립트 닫기
+// 210408_ 추가 : 환불계좌등록 팝업 스크립트 닫기
 $('.refundAccountPop .popup_close').on("click",function(){
 	$('.refundAccountPop').hide().removeClass('active');
 	$("body").css({"overflow":"visible"});
@@ -812,7 +874,7 @@ $('.refundBankPop .popup_close').on("click",function(){
 	$('.refundBankPop').hide().removeClass('active');
 });
 
-/* 210409_추가 : alert 모음 */
+/* 210409_추가 : alert 모음 
 $(document).on("click", "#btn_bank_certi", function(){
 	mcxDialog.alert("계좌인증에 성공했습니다.", {
 			//alert("계좌정보를 다시 확인해주세요.") : 계좌인증 실패/유효하지 않은 경우
@@ -821,7 +883,7 @@ $(document).on("click", "#btn_bank_certi", function(){
 		sureBtnText: "확인",  // Confirmation button text
 	});
 });
-
+*/
 /*
 $(document).ready(function(){
 

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

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

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

@@ -1,7 +1,7 @@
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org">
 <!-- 다다익선 할인 상품 보기 -->
-<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-dialog tmtbSalesPopup" 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="moresaleLabel">다다익선 상품</h5>
 	</div>
@@ -41,7 +41,7 @@
 							</div>
 						</div>
 						<!-- Add Scrollbar -->
-						<div class="swiper-scrollbar" th:if="${goodsList.size() > 5}" style="opacity: 0; transition-duration: 400ms;"><div class="swiper-scrollbar-drag" style="width: 514.104px; transform: translate3d(0px, 0px, 0px);"></div></div>
+						<!--<div class="swiper-scrollbar" style="opacity: 0; transition-duration: 400ms;"><div class="swiper-scrollbar-drag" style="width: 514.104px; transform: translate3d(0px, 0px, 0px);"></div></div>-->
 						<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
 				</div>
 				<!-- -->
@@ -56,7 +56,7 @@
 				slidesPerView: 5,
 				spaceBetween: 20,
 				scrollbar: {
-					el: '.moresale_pop .swiper-scrollbar',
+					el: '.tmtbSalesPopup .swiper-scrollbar',
 					hide: true,
 				},
 			});

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

@@ -36,10 +36,16 @@
 			<input type="hidden" name="goodsCd"/>
 			<input type="hidden" name="reviewStat"/>
 		</form>
-		<form id="addPaymentForm" name="addPaymentForm" action="/order/addPaymentForm" method="post">
+		<form id="addPaymentForm" name="addPaymentForm" th:action="@{'/order/addPaymentForm'}" th:method="post">
 			<input type="hidden" name="ordNo"/>
 			<input type="hidden" name="ordChgSq"/>
 		</form>
+		<form id="deliveryInfoForm" name="deliveryInfoForm" th:action="@{'/mypage/delivery/info/form'}" th:method="post">
+			<input type="hidden" name="ordNo"/>
+			<input type="hidden" name="ordDtlNo"/>
+			<input type="hidden" name="shipCompCd"/>
+			<input type="hidden" name="invoiceNo"/>
+		</form>
 	</div>
 </div>
 

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

@@ -71,15 +71,6 @@
 													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.colorNm} / ${exchangeDtl.optCd2}|"></span>
 												</div>
 											</div>
-											<div class="gd_calc">
-												<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>-->
-											</div>
 											<div class="gd_opt">
 												<div class="option_wrap">
 													<span class="title">교환 옵션</span>
@@ -87,6 +78,15 @@
 													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.chgColorNm} / ${exchangeDtl.chgOptCd2}|"></span>
 												</div>
 											</div>
+											<div class="gd_calc">
+												<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>-->
+											</div>
 										</div>
 										<div class="status_box">
 											<p>
@@ -114,7 +114,7 @@
 									<!-- 교환상품검수중 -->
 									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_31' and exchangeDtl.chgGb == 'G680_40'}"><p>고객님이 교환하신 상품을 검수 중에 있습니다.</p></div>
 									<!-- 교환완료 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_40' and (exchangeDtl.chgOrdDtlStat == 'G013_60' or exchangeDtl.chgOrdDtlStat == 'G013_70')}"><p>반품이 완료되었습니다.</p></div>
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_40' and (exchangeDtl.chgOrdDtlStat == 'G013_60' or exchangeDtl.chgOrdDtlStat == 'G013_70')}"><p>교환이 완료되었습니다.</p></div>
 									<!-- 교환철회 -->
 									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_49'}"><p>요청하신 교환을 취소하였습니다.</p></div>
 								</div>

+ 353 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageDeliveryInfoFormWeb.html

@@ -0,0 +1,353 @@
+<!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  : MypageOrderDetailFormWeb.html
+ * @desc    : 마이페이지 > 배송조회 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.04   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">
+				<div class="sec_head">
+					<h3 class="subH1">주문상세</h3>
+					<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${ordNo}"></em></span>
+					<button type="button" id="btn_order_cancel" class="btn_underline" onclick="fnDeleteOrder()"><span>삭제하기</span></button>
+				</div>
+				<div class="sec_body">
+					<th:block th:if="${orderList}" th:each="order, status : ${orderList}">
+						<div class="part_goods">
+							<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="${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">
+								<!-- 주문상품 -->
+								<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+									<div class="goods_info">
+										<div class="order_desc">
+											<div class="goods_box">
+												<input type="hidden" name="ordDtlNoArr" th:value="${ordDtl.ordDtlNo}"/>
+												<input type="hidden" name="cnclRtnReqQtyArr" th:value="${ordDtl.ordQty - ordDtl.cnclRtnQty}"/>
+												<div class="gd_item">
+													<a href="javascript:void(0)" th:attr="goodsCd=${ordDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+															<span class="thumb">
+																<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+															</span>
+														<p>
+															<span class="brand" th:text="${ordDtl.brandNm}"></span>
+															<span class="tag primary" th:if="${ordDtl.shotDelvYn == 'Y'}">총알배송</span>
+															<span class="tag" th:if="${ordDtl.shotDelvYn == 'N' and ordDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+															<span class="tag" th:if="${ordDtl.selfGoodsYn == 'N'}">업체직배송</span>
+														</p>
+														<p>
+															<span class="name" th:text="${ordDtl.goodsNm}"></span>
+														</p>
+													</a>
+												</div>
+												<div class="gd_opt">
+													<div class="option_wrap">
+														<span class="title sr-only">주문 옵션</span>
+														<span class="option" th:if="${ordDtl.goodsType == 'G056_S'}" th:each="option, status : ${ordDtl.colorNmArr}" th:text="|${ordDtl.itemNmArr[status.index]} / ${option} / ${ordDtl.optCd2Arr[status.index]}|"></span>
+														<span class="option" th:unless="${ordDtl.goodsType == 'G056_S'}" th:text="|${ordDtl.colorNm} / ${ordDtl.optCd2}|"></span>
+													</div>
+												</div>
+												<div class="gd_calc">
+													<p>
+														<span class="count"><em th:text="${ordDtl.ordQty - ordDtl.cnclRtnQty}"></em>개</span>
+													</p>
+													<p>
+														<span class="price_org" th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
+														<span class="price_sale"><em th:text="${#numbers.formatInteger(ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
+													</p>
+													<p>
+														<span class="point"><em th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정</span>
+													</p>
+												</div>
+											</div>
+											<div class="status_box">
+												<!-- 선물 -->
+												<th:block th:if="${order.giftPackYn == 'Y'}">
+													<p th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">주소 입력 대기중</p>
+													<p th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">선물 완료</p>
+													<p th:if="${ordDtl.ordDtlStat == 'G013_98' or ordDtl.ordDtlStat == 'G013_99'}">선물 취소</p>
+												</th:block>
+												<!-- 주문 -->
+												<th:block th:unless="${order.giftPackYn == 'Y'}">
+													<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">
+												<!-- 선물 -->
+												<th:block th:if="${order.giftPackYn == 'Y'}">
+													<!-- SMS 재발송 버튼 -->
+													<th:block th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>
+													</th:block>
+
+													<!-- 주문취소 버튼(결제완료, 상품준비중, 출고처지정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
+													</th:block>
+
+													<!-- 리뷰 쓰기 버튼 -->
+													<th:block th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99' and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
+														<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+													</th:block>
+
+													<!-- 쇼핑백담기 버튼(구매확정) -->
+													<th:block th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>
+													</th:block>
+												</th:block>
+												<!-- 주문 -->
+												<th:block th:unless="${order.giftPackYn == 'Y'}">
+													<!-- 주문취소 버튼(결제완료, 상품준비중, 출고처지정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
+													</th:block>
+
+													<!-- 교환/반품 신청 버튼(배송중, 출고완료, 배송완료) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60'}">
+														<!-- 교환/반품 가능한 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'Y'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></p>
+														</th:block>
+
+														<!-- 교환 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'Y'}">
+															<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></p>
+														</th:block>
+
+														<!-- 반품 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'N'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><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>
+														</th:block>
+
+														<!-- 교환/반품 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'N'}">
+															<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+														</th:block>
+													</th:block>
+
+													<!-- 배송조회 버튼(배송중) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55'}">
+<!--														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, shipCompCd=${ordDtl.shipCompCd}, invoiceNo=${ordDtl.invoiceNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>-->
+													</th:block>
+
+													<!-- 구매확정 버튼(배송완료) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_60'}">
+														<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnDecideOrder(this);"><span>구매 확정</span></button></p>
+													</th:block>
+
+													<!-- 리뷰작성 버튼(구매확정) -->
+													<th:block th:if="${(ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60' or ordDtl.ordDtlStat == 'G013_70') and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
+														<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+													</th:block>
+
+													<!-- 쇼핑백담기 버튼(입금대기, 배송준비중, 구매확정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_40' or ordDtl.ordDtlStat == 'G013_70'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>
+													</th:block>
+
+													<!-- 1:1문의 버튼(입금대기, 배송준비중, 구매확정) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_40' or (ordDtl.ordDtlStat == 'G013_70' and (ordDtl.reviewableYn == 'N' or ordDtl.reviewSq > 0))}">
+														<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+													</th:block>
+												</th:block>
+											</div>
+										</div>
+										<!-- 선물 -->
+										<th:block th:if="${order.giftPackYn == 'Y'}">
+											<!-- 주소 입력 대기중 -->
+											<div class="order_text" th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">
+												<p th:text="|${ordDtl.recipNm}님이 주소를 입력하기 전입니다. (입력기한 ${ordDtl.giftLimitDt})|"></p>
+											</div>
+
+											<!-- 선물 완료 -->
+											<div class="order_text" th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">
+												<p th:text="|${ordDtl.recipNm}님께 선물이 발송되었습니다.|"></p>
+											</div>
+
+											<!-- 선물 취소 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_98' and ordDtl.ordDtlStat == 'G013_99'}">
+												<p th:text="|주소 입력 기한이 경과되어 선물이 취소 되었습니다.|"></p>
+											</div>
+										</th:block>
+
+										<!-- 주문 -->
+										<th:block th:unless="${order.giftPackYn == 'Y'}">
+											<!-- 주문 접수 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_10'}">
+												<p>주문 완료/결제를 기다리고 있습니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+
+											<!-- 상품준비중 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_30'}">
+												<p>배송할 상품을 준비 중입니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+
+											<!-- 배송준비중 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_40'}">
+												<p>상품 준비가 완료되어 곧 배송될 예정입니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+
+											<!-- 배송중, 배송완료 -->
+											<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60'}">
+											<div class="order_text" th:unless="${(ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55') and ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'Y'}">
+												<p th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'Y'}">해당 상품은 교환이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>
+												<p th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'N'}">해당 상품은 반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>
+												<p th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'N'}">해당 상품은 교환/반품이 불가능한 상품입니다. 문의사항은 1:1문의를 이용해주세요.</p>
+												<p th:if="${ordDtl.ordDtlStat == 'G013_60'}">15일 후 자동으로 구매확정됩니다.</p>
+											</div>
+											</th:block>
+
+											<!-- 구매확정 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_70' and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
+												<p>리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</p>
+											</div>
+										</th:block>
+									</div>
+								</th:block>
+								<!-- //주문상품 -->
+							</div>
+						</div>
+					</th:block>
+					<h4 class="subH3">배송 정보</h4>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="210">
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>
+										보내는 사람
+									</th>
+									<td>
+										<div class="single_line">
+											<ul>
+												<li><span th:text="${deliveryAddrInfo.recipNm}">홍길동</span></li>
+												<li><span th:text="${deliveryAddrInfo.recipPhnno}">010-3456-7890</span></li>
+											</ul>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th>제품 정보</th>
+									<td th:text="|${oneData.brandNm} ${oneData.goodsNm}|"></td>
+								</tr>
+								<tr>
+									<th>송장 번호</th>
+									<td th:text="${oneData.invoiceNo}"></td>
+								</tr>
+								<tr>
+									<th>배송 주소</th>
+									<td th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|">
+										경기도 시흥시 서울대학2로, 1120동 2204호
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<div class="tbl type5 mt60">
+						<table>
+							<colgroup>
+								<col width="25%">
+								<col width="25%">
+								<col width="25%">
+								<col width="25%">
+							</colgroup>
+							<thead>
+							<tr>
+								<th scope="col">시간</th>
+								<th scope="col">장소</th>
+								<th scope="col">유형</th>
+								<th scope="col">전화번호</th>
+							</tr>
+							</thead>
+							<tbody>
+							<tr th:if="${sweetTrackerInfoList}" th:each="sweetTrackerInfo, status : ${sweetTrackerInfoList}">
+								<td th:text="${sweetTrackerInfo.timeTrans}"></td>
+								<td th:text="${sweetTrackerInfo.delvWhere}"></td>
+								<td th:text="${sweetTrackerInfo.details}"></td>
+								<td th:text="${sweetTrackerInfo.telno}"></td>
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+	</div>
+	<form id="exchangeForm" name="exchangeForm" action="#" th:action="@{'/mypage/exchange/form'}" th:method="post">
+		<input type="hidden" name="ordNo"/>
+		<input type="hidden" name="ordDtlNo"/>
+		<input type="hidden" name="delvFeeCd"/>
+	</form>
+	<form id="returnForm" name="returnForm" action="#" th:action="@{'/mypage/return/form'}" th:method="post">
+		<input type="hidden" name="ordNo"/>
+		<input type="hidden" name="ordDtlNo"/>
+		<input type="hidden" name="delvFeeCd"/>
+	</form>
+	<form id="cancelForm" name="cancelForm" th:action="@{'/mypage/cancel/form'}" th:method="post">
+		<input type="hidden" name="ordNo"/>
+		<input type="hidden" name="ordDtlNo"/>
+		<input type="hidden" name="delvFeeCd"/>
+	</form>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	let ordNo = [[${ordNo}]];
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(1);
+		
+		// 마이페이지 location 설정
+		fnSetMypageLocation('주문확인/배송조회', '_PAGE_MYPAGE_ORDER_LIST', '주문상세');
+	});
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -166,7 +166,7 @@
 														
 														<!-- 배송조회 버튼(배송중) -->
 														<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55'}">
-															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, shipCompCd=${ordDtl.shipCompCd}, invoiceNo=${ordDtl.invoiceNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
 														</th:block>
 	
 														<!-- 구매확정 버튼(배송완료) -->
@@ -385,7 +385,7 @@
 												</dd>
 											</div>
 											<div class="include_item" th:if="${orderAmtInfo.cpn1DcAmt > 0}"> <!-- 할인항목 표기 class명 include_item -->
-												<dt>상품할인(즉시할인)</dt>
+												<dt>즉시할인</dt>
 												<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.cpn1DcAmt, 1, 'COMMA')}|"></em>원</dd>
 											</div>
 											<div class="include_item" th:if="${orderAmtInfo.tmtb1DcAmt + orderAmtInfo.tmtb2DcAmt > 0}">
@@ -412,9 +412,9 @@
 												<dt>마일리지 사용</dt>
 												<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.npayPntAmt, 1, 'COMMA')}|"></em>원</dd>
 											</div>
-											<div class="include_item" th:if="${paymentInfo.pgCpnAmt > 0}">
+											<div class="include_item" th:if="${orderAmtInfo.pgCpnAmt > 0}">
 												<dt>제휴할인</dt>
-												<dd><em th:text="|- ${#numbers.formatInteger(paymentInfo.pgCpnAmt, 1, 'COMMA')}|"></em>원</dd>
+												<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.pgCpnAmt, 1, 'COMMA')}|"></em>원</dd>
 											</div>
 										</dl>
 									</td>
@@ -424,7 +424,7 @@
 												<dt>결제 금액</dt>
 												<dd>
 													<div class="price">
-														<span class="pay_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.payAmt - orderAmtInfo.npayPntAmt, 1, 'COMMA')}"></em>원</span>
+														<span class="pay_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.payAmt - orderAmtInfo.npayPntAmt - orderAmtInfo.pgCpnAmt, 1, 'COMMA')}"></em>원</span>
 													</div>
 												</dd>
 											</div>

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

@@ -402,12 +402,6 @@
 		$('#searchForm input[name=ordDtlStat]').val($(this).attr('code'));
 	});
 
-	// 배송조회 버튼 클릭 이벤트
-	var fnGoToDelivery = function(param) {
-		// TODO
-		// 배송조회 페이지 이동
-	}
-
 	// 주문내역 리스트 처리
 	var fnCreateOrderList = function(param) {
 		let tag = '';
@@ -544,7 +538,7 @@
 
 						// 배송조회 버튼(배송중)
 						if (ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55') {
-							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>\n';
+							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" shipCompCd="' + ordDtl.shipCompCd + '" invoiceNo="' + ordDtl.invoiceNo + '" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>\n';
 						}
 
 						// 구매확정 버튼(배송완료)

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

@@ -120,7 +120,7 @@
 				</div>
 				<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}">
 					<span class="cf_txt" th:text="|${order.shipCompNm} / ${order.invoiceNo}|"></span>
-					<button type="button" class="btn btn_primary" th:attr="ordNo=${oneData.ordNo}, invoiceNo=${order.invoiceNo}, shipCompCd=${order.shipCompCd}" onclick="fnGetDeliveryInfo(this)">배송조회</button>
+					<button type="button" class="btn btn_primary" th:attr="ordNo=${order.ordNo}, ordDtlNo=${order.ordDtlNo}, invoiceNo=${order.invoiceNo}, shipCompCd=${order.shipCompCd}" onclick="fnGetDeliveryInfo(this)">배송조회</button>
 				</div>
 				<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_60'}">
 					<span class="cf_txt" th:text="|${order.purchaseConfirmDay}일 후 자동으로 구매확정|"></span>

+ 8 - 5
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="fnGetTextLength(this, 200);" style="resize: none;"></textarea>
+													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요." maxlength="200" 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>
@@ -390,13 +390,16 @@
 		$.each($('#returnForm input[name=chgQty]'), function(idx, item) {
 			let chgQty = $(item).val();
 			let ordDtlNo = $(item).attr('ordDtlNo');
-
+			console.log(chgQty);
 			if (chgQty > 0) {
 				ordDtlNoArr.push(Number(ordDtlNo));
 				cnclRtnReqQtyArr.push(Number(chgQty));
 				chkQty += chgQty;
 			}
 		});
+		
+		console.log(ordDtlNoArr);
+		console.log(cnclRtnReqQtyArr);
 
 		// 반품 수량 체크
 		if (chkQty == 0) {
@@ -522,10 +525,11 @@
 				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;
@@ -539,8 +543,7 @@
 					spanTotRtnDelvFee = 0;
 					spanTotDeliveryFee = 0;
 				}
-				console.log('spanTotRtnDelvFee : '+spanTotRtnDelvFee);
-				console.log('spanTotDeliveryFee : '+spanTotDeliveryFee);
+
 				let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
 				let addDelvFee = spanTotRtnDelvFee + spanTotDeliveryFee;					// 추가배송비
 				let deductDcAmt = spanCpnDcAmt + spanTmtbDcAmt + spanPrePntDcAmt;			// 할인금액 차감(쿠폰+다다익선+선포인트)

+ 10 - 10
src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreExchangeDetailFormWeb.html

@@ -70,15 +70,6 @@
 													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.colorNm} / ${exchangeDtl.optCd2}|"></span>
 												</div>
 											</div>
-											<div class="gd_calc">
-												<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>-->
-											</div>
 											<div class="gd_opt">
 												<div class="option_wrap">
 													<span class="title">교환 옵션</span>
@@ -86,6 +77,15 @@
 													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.chgColorNm} / ${exchangeDtl.chgOptCd2}|"></span>
 												</div>
 											</div>
+											<div class="gd_calc">
+												<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>-->
+											</div>
 										</div>
 										<div class="status_box">
 											<p>
@@ -111,7 +111,7 @@
 									<!-- 교환상품검수중 -->
 									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_31' and exchangeDtl.chgGb == 'G680_40'}"><p>고객님이 교환하신 상품을 검수 중에 있습니다.</p></div>
 									<!-- 교환완료 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_40' and (exchangeDtl.chgOrdDtlStat == 'G013_60' or exchangeDtl.chgOrdDtlStat == 'G013_70')}"><p>반품이 완료되었습니다.</p></div>
+									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_40' and (exchangeDtl.chgOrdDtlStat == 'G013_60' or exchangeDtl.chgOrdDtlStat == 'G013_70')}"><p>교환이 완료되었습니다.</p></div>
 									<!-- 교환철회 -->
 									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_49'}"><p>요청하신 교환을 취소하였습니다.</p></div>
 								</div>

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

@@ -124,7 +124,7 @@
 													
 													<!-- 배송조회 버튼(배송중) -->
 													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55'}">
-														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, shipCompCd=${ordDtl.shipCompCd}, invoiceNo=${ordDtl.invoiceNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
 													</th:block>
 
 													<!-- 쇼핑백담기 버튼(구매확정) -->
@@ -268,7 +268,7 @@
 													</dd>
 												</div>
 												<div class="include_item" th:if="${orderAmtInfo.cpn1DcAmt > 0}"> <!-- 할인항목 표기 class명 include_item -->
-													<dt>상품할인(즉시할인)</dt>
+													<dt>즉시할인</dt>
 													<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.cpn1DcAmt, 1, 'COMMA')}|"></em>원</dd>
 												</div>
 												<div class="include_item" th:if="${paymentInfo.npayPntAmt > 0}">

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

@@ -320,12 +320,6 @@
 		$('#searchForm input[name=ordDtlStat]').val($(this).attr('code'));
 	});
 
-	// 배송조회 버튼 클릭 이벤트
-	var fnGoToDelivery = function(param) {
-		// TODO
-		// 배송조회 페이지 이동
-	}
-	
 	// 비회원 주문상세보기 버튼 클릭 이벤트
 	var fnGoToNoMemberOrderDetail = function(param) {
 		let ordNo = $(param).attr('ordNo');

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

@@ -137,7 +137,7 @@
 										<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>
+													<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요." maxlength="200" 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>

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

@@ -1248,7 +1248,11 @@ var paymentInfoSet = function() {
 							} else if (pgGb == "KAKAO") {
 								fnKakaoPaymentReady();
 							} else if (pgGb == "KCP" || pgGb == "PAYCO") {
-								jsf__pay(document.order_info);
+								if(payMeans == "G014_70") {
+									$("#order_info").submit();
+								} else {
+									jsf__pay(document.order_info);
+								}
 							}
 						}
 					});

+ 9 - 1
src/main/webapp/biz/mypage.js

@@ -74,12 +74,20 @@ var fnGoToGoodsDetail = function(param) {
 }
 
 // 배송조회 버튼 클릭 이벤트
-var fnGetDeliveryInfo = function(param) {
+var fnGoToDelivery = function(param) {
+	let ordNo = $(param).attr('ordNo');
+	let ordDtlNo = $(param).attr('ordDtlNo');
 	let invoiceNo = $(param).attr('invoiceNo');
 	let shipCompCd = $(param).attr('shipCompCd');
 	
 	// TODO
 	// 배송조회 처리
+	$('#deliveryInfoForm input[name=ordNo]').val(ordNo);
+	$('#deliveryInfoForm input[name=ordDtlNo]').val(ordDtlNo);
+	$('#deliveryInfoForm input[name=shipCompCd]').val(shipCompCd);
+	$('#deliveryInfoForm input[name=invoiceNo]').val(invoiceNo);
+	
+	document.deliveryInfoForm.submit();
 }
 
 // 구매확정 버튼 클릭 이벤트

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

@@ -2267,6 +2267,13 @@ main.container .shopping_bag .inner:last-child {padding-bottom: 0;}
 .shopping_bag .inner {padding:3rem 2rem;}
 .shopping_bag .inner.wide {padding: 0;}
 .shopping_bag .btn_delete {position: absolute; top: 0; right: 0; z-index: 9; width: 4rem; height: 4rem; background: url(/images/mo/ico_itemdelete_btn.png) no-repeat center/1.2rem; background-position: center;}
+
+.shopping_bag .tip1 .tip_contents{width: 32.5rem;transform: translate(-70%, 1.0rem);}
+.shopping_bag .tip1 .tip_contents:before,
+.shopping_bag .tip1 .tip_contents:after{left: 72.2%;}
+.shopping_bag .tip_wrap ul li{position: relative;padding-left: 1.0rem;font-weight: 200;font-size: 1.3rem;}
+.shopping_bag .tip_wrap ul li::before{content: '';position: absolute;top: 7px;left: 0;background: #858585;width: 0.2rem;height: 0.2rem;}
+
 .shopping_bag .inner:nth-child(2) {padding:1.5rem 2rem;}
 .shopping_bag .nodata {min-height:13rem; line-height:13rem; text-align: center;}
 .shopping_bag .nodata p {color: #888;}
@@ -2562,4 +2569,10 @@ main.container .od_extra .inner:last-child {padding-bottom: 0;}
 .popup_main_notice.half .popup_content .popup_header {position: relative; background:transparent; height: 6rem; padding: 2.2rem;}
 .popup_main_notice.half .popup_content .popup_header::after {content:''; clear:both; display:block;}
 .popup_main_notice.half .popup_content .popup_header a.btn_underline {display:inline-block; float:left; color:#fff; font-size:1.3rem; font-weight:200; border-color:#fff; opacity: 0.4; padding-top: 0.2rem;}
-.popup_main_notice.half .popup_content .popup_header a.btn_popup_close {position: absolute; top: 0; right: 0; width: 6rem; height: 6rem; background: url(/images/mo/btn_main_pop_arrow.png) no-repeat center; background-size:1.6rem; text-indent:-999em;}
+.popup_main_notice.half .popup_content .popup_header a.btn_popup_close {position: absolute; top: 0; right: 0; width: 6rem; height: 6rem; background: url(/images/mo/btn_main_pop_arrow.png) no-repeat center; background-size:1.6rem; text-indent:-999em;}
+
+/* popup_마이페이지 회수조회 팝업 */
+.modal.reclaim_pop {}
+.modal.reclaim_pop .modal-body {margin-top: 8rem;}
+.modal.reclaim_pop .modal-body .pop_cont {color:#222;}
+.modal.reclaim_pop .modal-body .pop_cont .tbl_wrap .tbl {border-bottom: 1px solid #ddd; padding-bottom: 1.5rem;}

+ 14 - 9
src/main/webapp/ux/pc/css/layout.css

@@ -64,7 +64,7 @@ header .common_header {}
 .gnb .nav .bundle > li:last-child > a::after{content: ''; display: block; width: 1px; height: 18px; background: #4e4e4e; position: absolute; top:50%; bottom:auto; right: -20px; left:auto; transform: translateY(-50%);}
 .gnb .nav .bundle:last-child > li > a::after{content: ''; display: none;}
 .gnb .nav .bundle > li > .depth_menu {}
-.depth_menu {position:absolute; top:80px; left:0; width:100%; background:#fff; color:#222; z-index:150; display:none;}
+.depth_menu {position:absolute; top:80px; left:0; width:100%; background:#fff; color:#222; z-index:150; display:none;height: 450px;}
 .depth_menu::after {content:''; display: block; clear:both;}
 .depth_menu .head_category {position:relative; float:left; width: 68.75%;padding:50px 70px;padding: 50px 70px 50px 240px;}
 .depth_menu .head_category .tit {position:absolute; width:170px; left:70px;}
@@ -95,7 +95,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 .more_category .cate_list ul li a {display:block; padding:5px; color:#fff; font-size:19px;}
 .more_category .cate_list ul li a:hover {color:#fd4801; text-decoration:underline;}
 
-.depth_menu .head_banner {float:left; width: 31.25%; background: #f5f5f5; padding:50px 70px;}
+.depth_menu .head_banner {float:left; width: 31.25%; background: #f5f5f5; padding:50px 70px;height: 450px;}
 .depth_menu .head_banner .tit p {font-size: 24px; font-weight: 500; margin-bottom: 20px; }
 .depth_menu .head_banner li {float:left; width:49%;}
 .depth_menu .head_banner li:first-child {margin-right:2%;}
@@ -430,7 +430,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 #quick_menu .wishlist .shape:after {height: 18px; border-left:10px solid #fd4802;}
 #quick_menu .wishlist .shape span {width: 100%; font-size: 13px; font-weight: 300;}
 #quick_menu .wishlist .itemLike {top: 10px;}
-#quick_menu .wishlist .hover_con {z-index:3; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0,0,0,.4); display: none;}
+#quick_menu .wishlist .hover_con {z-index:98; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0,0,0,.4); display: none;}
 #quick_menu .wishlist .hover_con .cart_btn {position: absolute; top: 50%; left: 50%; transform:translate(-50%, -50%);}
 #quick_menu .wishlist .item_prod:hover .hover_con {display: block;}
 #quick_menu .wishlist .itemsGrp .item_prod .cart_btn {width: 91px; border:1px solid #ddd; font-size: 13px; padding: 6px 0;}
@@ -1766,7 +1766,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.dp_best_top100 .ui_row .ui_col_12 .form_field {justify-content: flex-end;}
 	.dp_best_top100 .ui_row .ui_col_12 .select_custom {width:180px;}
 	.dp_best_top100 .ui_row .ui_col_12 .select_custom:first-child {margin-right: 10px;}
-	.dp_best_top100 .select_custom .combo .list {border-top:1px solid #ddd;}
+	.dp_best_top100 .select_custom .combo .list {border-top:1px solid #ddd; z-index: 99;}
 	.dp_best_top100 .select_custom .combo .list > li {padding-left:15px; padding-right:15px; font-size:14px; line-height:40px;}
 	.dp_best_top100 .select_custom .combo .select {font-size: 14px; padding:14px 15px;}
 	.dp_best_top100 .list_content .item_prod {width: 20%;}
@@ -2682,7 +2682,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 
 	.pd_detail .area_desc .desc_wrap {/*position:absolute; right:auto; top:0; background:#eee*/width:500px; z-index:2;}
 	.pd_detail .area_desc .desc_wrap.absbottom {position:absolute; top:auto; bottom:0px;}
-	.pd_detail .area_desc .desc_wrap.fixbottom {position:fixed; top: 100px; bottom:0px;}
+	.pd_detail .area_desc .desc_wrap.fixbottom {position:fixed; top: auto; bottom:0px;}
 	
 	.pd_detail .area_desc .desc_wrap .timer_box {position:relative; padding-bottom:30px;}
 	.pd_detail .area_desc .desc_wrap .timer_box::after{content:''; position:absolute; right:-12px; bottom:18px; border:12px solid transparent; border-top:12px solid #fff; transform:rotate(-45deg);}
@@ -3074,7 +3074,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd_desc_wrap .item_descrp .area_option {float:right;}
 	.pd_desc_wrap .item_descrp .area_option .opt_wrap {width:500px; padding-left:60px; padding-top:30px;}
 	/* .pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px;} */
-	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px;height: calc(100% - 11%);}
+	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; bottom:80px; width:500px;height: calc(100% - 11%);}
 	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop .option_box {overflow-y: auto; height: calc(100% - 25%);}
 	.pd_desc_wrap .item_descrp .area_option .opt_wrap.absbottom {position:absolute; top:auto; bottom:0px; right:70px;}
 	@media screen and (max-width:1459px) {
@@ -3325,7 +3325,9 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
     .modal[class*="reviewdetail_pop"] .detail .review .review_cont .response_box > div dl div {float:left; width:50%;}
     .modal[class*="reviewdetail_pop"] .detail .review .review_cont .response_box > div.full dl div {width:100%}
 	.modal[class*="reviewdetail_pop"] .detail .review .review_cont .response_box > div dl div dt {float:left; width:60px; color:#888}
-	.modal[class*="reviewdetail_pop"] .detail .review .review_cont .response_box > div dl div dd {float:left; margin-left:20px; color:#fd4802}    
+	.modal[class*="reviewdetail_pop"] .detail .review .review_cont .response_box > div dl div dd {float:left; margin-left:20px; color:#fd4802}
+	.modal[class*="reviewdetail_pop"] .detail .review .review_cont .response_box > div dl div dd p{margin-bottom:0.4rem;}
+	.modal[class*="reviewdetail_pop"] .detail .review .review_cont .response_box > div dl div dd p:last-child{margin-bottom:0;}
     .modal[class*="reviewdetail_pop"] .detail .review .review_cont .txt_review_box {color:#666; font-size:14px; line-height:24px;}
     .modal[class*="reviewdetail_pop"] .detail .review .review_cont .writer_box {}
     .modal[class*="reviewdetail_pop"] .detail .review .review_cont .writer_box span {position:relative; margin-left:20px; padding-left:20px; color:#888; font-size:14px; line-height: 18px;}
@@ -4827,7 +4829,10 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.modal.lookbook_item_pop .itemsGrp .item_prod .itemPercent {position:relative; font-size: 26px; line-height: 0.8;}
 	.modal.lookbook_item_pop .itemsGrp .item_prod .itemLink .btn {margin-top:40px; border:1px solid #a7a7a7; font-weight:300;}
 
-	
+	/* popup_마이페이지 회수조회 팝업 */
+	.modal.reclaim_pop {width: 1000px; max-width:1000px;}
+	.modal.reclaim_pop .modal-header {margin-bottom: 0; padding-bottom: 40px;}
+	.modal.reclaim_pop .modal-body .pop_cont {color:#222;}
 	
 	/******* 지울예정 *******/
 	/* 핫딜 전용 아이템 리스트 */
@@ -5084,4 +5089,4 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 		.cs .history_wrap .txt {padding-left: 0px;}
 		.cs .history_wrap {padding: 50px 30px 50px 0;}
 	
-	}
+	}

+ 11 - 7
src/main/webapp/ux/pc/css/main.css

@@ -79,14 +79,14 @@
 
 .main_visual::before {content:'';display:block;width:100%; /*height:72px;*/ height:172px; position:absolute; top:-100px; left:0; background:#222222; z-index:-1;}
 .post-visual .btn {font-weight:300; border:1px solid #a7a7a7;}
-.post-visual .txtWrap{position:absolute; top:auto;bottom:100px;left:90px;right:auto;z-index:1;} 
+.post-visual .txtWrap{position:absolute; top:auto;bottom:100px;left:90px;right:auto;z-index:1; width: 85%;} 
 .post-visual .txtWrap dl,
 .post-visual .txtWrap dl + button {opacity:0; transition:all 200ms ease;}
 .post-visual .txtWrap dl {color:#222; line-height:1; padding-bottom:40px;}
 .post-visual .txtWrap dl.w,
 .post-visual .txtWrap dl.w + button {color:#ffffff; border-color:#fff;}
 .post-visual .txtWrap dt {font-size:18px; padding-bottom:20px; font-weight:200;}
-.post-visual .txtWrap dd {font-size:62px;line-height:1;font-weight:500; padding-bottom:5px; display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp: 1;-webkit-box-orient: vertical; overflow:hidden;}
+.post-visual .txtWrap dd {font-size:62px;line-height:1;font-weight:500; display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp: 2;-webkit-box-orient: vertical; overflow:hidden;}
 .post-visual .txtWrap dd.txt_xs {font-size:18px;line-height:1;font-weight:200;padding:20px 0 0px 0; display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp: 1;-webkit-box-orient: vertical; max-height:37px; overflow:hidden;}
 /* .post-visual .vrt_txt{width:auto;height:auto;font-size:18px;color:#888888;position:absolute;left:-90px;bottom:-99px;top:0;-webkit-transform:rotate(-90deg);transform:rotate(-180deg); white-space: nowrap; -webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;} */
 .post-visual .vrt_txt{width: 500px;height: 20px;box-sizing: content-box;display: inline-block;text-align: left;font-size: 18px;color: #888888;position: absolute;left: -80%;bottom: 160px;position: relative;left: -65%;bottom: -160px;top: auto;-webkit-transform: rotate(-90deg);transform: rotate(-90deg);white-space: nowrap;}
@@ -509,11 +509,11 @@
 .fy_item .part .itemPic {width:100%; margin:0;}
 .fy_item .part {width:20%;}
 .fy_item .part.lg {width:40%;}
-.fy_item .part .item_state .itemInfo {display:none; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:65%; height:auto; text-align:center; z-index:1;}
+.fy_item .part .item_state .itemInfo {display:none; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:65%; height:auto; text-align:center; z-index:21;}
 .fy_item .part .item_state:hover .itemInfo,
 .fy_item .part .item_state:active .itemInfo,
 .fy_item .part .item_state:focus .itemInfo {display:block;}
-.fy_item .part .item_state:hover::after{content:''; position:absolute; left:0; right:0; top:0; bottom:0; width:100%; height:100%; background:rgba(0,0,0,0.8);}
+.fy_item .part .itemLink:hover::after{content:''; position:absolute; left:0; right:0; top:0; bottom:0; width:100%; height:100%; background:rgba(0,0,0,0.8); z-index: 19;}
 .fy_item .part .itemBrand,
 .fy_item .part .itemName,
 .fy_item .part .itemPrice {color:#ffffff; width:100%; max-width:none; word-break:keep-all;}
@@ -534,11 +534,14 @@
 .main_tv .cont_head p {color:#ffffff; font-size:42px;}
 .post-tv {width:100%;height:760px; height:auto; margin:0px auto; padding-top:60px; padding-bottom:60px;}
 .post-tv .swiper-slide {width:890px;}
-.post-tv .swiper-slide .movbox {position:relative; width:100%; height:0; padding-top:56.1818%; overflow:hidden; transition:all 300ms ease; transform:scale(1);}
-.post-tv .swiper-slide .movbox iframe {position:absolute; left:0; right:0; top:0; bottom:0; width:100%; height:100%; z-index:1;}
-.post-tv .swiper-slide-active .movbox {transform:scale(1.24);}
+.post-tv .swiper-slide .movbox {position:relative; width:100%; height:0; padding-top:56.1818%; overflow:hidden; transition:all 300ms ease; transform:scale(1); pointer-events: none;}
+.post-tv .swiper-slide .movbox iframe {position:absolute; left:0; right:0; top:0; bottom:0; width:100%; height:100%; z-index:1; }
+.post-tv .swiper-slide-active .movbox {transform:scale(1.24); pointer-events:auto;}
+.post-tv .swiper-slide-active .movbox iframe {}
 .post-tv .swiper-button-next,
 .post-tv .swiper-button-prev{opacity:0.5;}
+.post-tv .swiper-button-next:hover,
+.post-tv .swiper-button-prev:hover{opacity:1; background-image:url('/images/pc/ico_slide_arrow_orange.png');}
 .post-tv .swiper-button-next {right:140px;}
 .post-tv .swiper-button-prev {left:140px;}
 .main_tv .swiper-controls {margin-top:40px}
@@ -577,6 +580,7 @@ header.minify .common_header.br_header::after {bottom:-565px;}
 .brand_main .brand_visual .cont_body {}
 .brand_main .brand_visual .swiper-button-prev {left:70px; opacity:0.5;}
 .brand_main .brand_visual .swiper-button-next {right:70px; opacity:0.5;}
+.brand_main .brand_visual .swiper-button-disabled {display: none;}
 .brand_main .post-visual .swiper-container {margin-left:0;}
 .brand_main .post-visual .swiper-wrapper {padding-bottom:0;}
 .brand_main .post-visual .swiper-slide {position:relative; max-width:1520px; padding-left:28.9473%; mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; -webkit-mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; /*transition:all 200ms ease;*/}