Bläddra i källkod

Merge branch 'develop' into eskim

eskim 5 år sedan
förälder
incheckning
e76ad6817b
54 ändrade filer med 2795 tillägg och 401 borttagningar
  1. 20 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  2. 78 1
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  3. 10 4
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  4. 16 0
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  5. 12 4
      src/main/java/com/style24/front/biz/web/TsfCommonController.java
  6. 126 12
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  7. 3 4
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  8. 5 4
      src/main/java/com/style24/front/support/config/TsfMybatisWmsConfig.java
  9. 1 0
      src/main/java/com/style24/persistence/domain/Contents.java
  10. 53 51
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  11. 380 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  12. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  13. 28 6
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  14. 2 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  15. 4 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  16. 22 6
      src/main/resources/config/application-dev.yml
  17. 16 7
      src/main/resources/config/application-locp.yml
  18. 1 1
      src/main/resources/config/application-run.yml
  19. 3 3
      src/main/webapp/WEB-INF/views/mob/SigninFormMob.html
  20. 20 6
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  21. 2 0
      src/main/webapp/WEB-INF/views/mob/common/layout/MypageLayoutMob.html
  22. 12 10
      src/main/webapp/WEB-INF/views/mob/customer/IdFindFormMob.html
  23. 3 3
      src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html
  24. 14 10
      src/main/webapp/WEB-INF/views/mob/customer/PasswordFindFormMob.html
  25. 2 1
      src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html
  26. 0 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  27. 891 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  28. 268 19
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListFormMob.html
  29. 359 40
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html
  30. 4 1
      src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html
  31. 4 4
      src/main/webapp/WEB-INF/views/mob/order/OrderDeliveryAddrInfoMob.html
  32. 73 48
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html
  33. 3 3
      src/main/webapp/WEB-INF/views/web/SigninFormWeb.html
  34. 20 6
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  35. 17 7
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  36. 2 2
      src/main/webapp/WEB-INF/views/web/customer/IdFindFormWeb.html
  37. 1 1
      src/main/webapp/WEB-INF/views/web/customer/PasswordFindFormWeb.html
  38. 43 0
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  39. 124 43
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  40. 3 2
      src/main/webapp/WEB-INF/views/web/error/InaccessWeb.html
  41. 13 10
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  42. 15 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  43. 7 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  44. 4 4
      src/main/webapp/WEB-INF/views/web/order/OrderDeliveryAddrInfoWeb.html
  45. 2 2
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  46. 65 48
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html
  47. 15 0
      src/main/webapp/biz/goods.js
  48. 1 1
      src/main/webapp/ux/mo/css/common_m.css
  49. 9 3
      src/main/webapp/ux/mo/css/layout_m.css
  50. 6 5
      src/main/webapp/ux/mo/css/style24_m.css
  51. 2 2
      src/main/webapp/ux/pc/css/common.css
  52. 8 2
      src/main/webapp/ux/pc/css/layout.css
  53. 1 1
      src/main/webapp/ux/pc/css/main.css
  54. 1 0
      src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollLayer.js

+ 20 - 0
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -422,4 +422,24 @@ public interface TsfPlanningDao {
 	 */
 	void deleteEntryReplyAttach(Plan plan);
 	
+	/**
+	 * 기획전/이벤트 접근 고객 리스트
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 22
+	 */
+	Plan getCustomerGubunAccessibleList(Plan plan);
+	
+	/**
+	 * 기획전/이벤트 접근 고객 리스트
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 22
+	 */
+	Collection<Plan> getCustomerGradeAccessibleList(Plan plan);
+	
 }

+ 78 - 1
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -9,10 +9,12 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.kcp.J_PP_CLI_N;
 import com.style24.core.biz.dao.TscOrderDao;
 import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscKcpService;
@@ -22,6 +24,7 @@ import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.KakaoPay;
 import com.style24.persistence.domain.NaverPay;
 import com.style24.persistence.domain.Order;
@@ -60,6 +63,9 @@ public class TsfOrderService {
 	@Autowired
 	private TsfCartService cartService;
 
+	@Autowired
+	private Environment env;
+
 	/**
 	 * 마이페이지 주문 정보 조회
 	 *
@@ -605,5 +611,76 @@ public class TsfOrderService {
 		return resultStr;
 		
 	}
-	
+
+	/**
+	 * KCP 현금영수증 신청
+	 * param.setTradeTime("20210422200347");	// 결제시각 : YYYYMMDDHH24MISS 형식
+	 * param.setOrdPhnno("01011111111");		// 현금영수증 대상 휴대폰번호
+	 * param.setUsGfcdAmt(10000);				// 현금영수증 신청 금액
+	 * param.setOrdNo(211);						// 주문번호
+	 * param.setGoodsNm("보라색 원피스");		// 상품명 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 상품명을 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+	 * param.setOrdNm("구매자");				// 구매자명
+	 * param.setOrdEmail("xxxx@xxxx.com");		// 구매자이메일 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 메일주소를 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+	 * @param param
+	 * @return
+	 */
+	public GiftCard kcpCashReceiptsRequest(GiftCard param) {
+		GiftCard result = new GiftCard();
+		String cust_ip = TsfSession.getInfo().getIpAddr();
+		String reqTx = "pay";		// 현금영수증 신청
+		String txCd = "07010000";	// 현금영수증 등록 요청
+		String ordPhnno = "";
+		if(!StringUtils.isEmpty(param.getOrdPhnno())) {
+			ordPhnno = param.getOrdPhnno().replaceAll("-", "");
+		}
+
+		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
+		c_PayPlus.mf_init( "", env.getProperty("pg.kcp.gw.url"), env.getProperty("pg.kcp.gw.port"), Integer.parseInt(env.getProperty("pg.kcp.tx.mode")), env.getProperty("pg.kcp.log.dir") );
+		c_PayPlus.mf_init_set();
+
+		int rcpt_data_set   = c_PayPlus.mf_add_set( "rcpt_data" ) ;
+		int ordr_data_set   = c_PayPlus.mf_add_set( "ordr_data" ) ;
+		int corp_data_set   = c_PayPlus.mf_add_set( "corp_data" ) ;
+
+		// 현금영수증 정보
+		c_PayPlus.mf_set_us( rcpt_data_set, "user_type", "PG01") ;
+		c_PayPlus.mf_set_us( rcpt_data_set, "trad_time", param.getTradeTime()) ;
+		c_PayPlus.mf_set_us( rcpt_data_set, "tr_code"  , "0") ;							// 0 : 소득공제용(개인), 1 : 지출증빙용(기업)
+		c_PayPlus.mf_set_us( rcpt_data_set, "id_info"  , ordPhnno) ;							// 발급 대상이 개인인 경우에는 주민번호, 휴대폰번호,현금영수증 카드를 세팅하며, 기업인 경우에는 대상 사업자 번호를 입력. 자진발급으로 등록 시, “0100001234” 으로 입력.
+		c_PayPlus.mf_set_us( rcpt_data_set, "amt_tot"  , param.getUsGfcdAmt() + "") ;	// 현금영수증 금액 (공급가액 + 부가가치세 + 봉사료)
+		//c_PayPlus.mf_set_us( rcpt_data_set, "amt_sup"  , amt_sup   ) ;		// 공급가액
+		//c_PayPlus.mf_set_us( rcpt_data_set, "amt_svc"  , amt_svc   ) ;		// 봉사료
+		//c_PayPlus.mf_set_us( rcpt_data_set, "amt_tax"  , amt_tax   ) ;		// 부가가치세 (공급가액의 10%)
+		c_PayPlus.mf_set_us( rcpt_data_set, "pay_type" , "PAXX") ;		// 무슨 값인지 알 수 없음.
+
+		// 주문 정보
+		c_PayPlus.mf_set_us( ordr_data_set, "ordr_idxx", param.getOrdNo() + "") ;		// 주문번호
+		c_PayPlus.mf_set_us( ordr_data_set, "good_name", param.getGoodsNm());				// 상품명
+		c_PayPlus.mf_set_us( ordr_data_set, "buyr_name", param.getOrdNm());
+		c_PayPlus.mf_set_us( ordr_data_set, "buyr_tel1", ordPhnno);
+		c_PayPlus.mf_set_us( ordr_data_set, "buyr_mail", param.getOrdEmail());
+		// c_PayPlus.mf_set_us( ordr_data_set, "comment"  , comment);		// 비고 (ex - 여유 파라미터)
+
+		// 가맹점 정보
+		c_PayPlus.mf_set_us( corp_data_set, "corp_type", "0");		// 사업장 구분 (직접 판매 : 0, 입점몰 판매 : 1)
+
+		// 실행
+		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), "", txCd, cust_ip, param.getOrdNo() + "", env.getProperty("pg.kcp.log.dir"), "0");
+
+		// 결과
+		result.setResultCd(c_PayPlus.m_res_cd);
+		result.setResultMsg(c_PayPlus.m_res_msg);
+		result.setOrdNo(param.getOrdNo());
+		result.setUsGfcdAmt(param.getUsGfcdAmt());
+		if("0000".equals(result.getResultCd())) {
+			result.setTradeNo(c_PayPlus.mf_get_res("cash_no"));
+			result.setAuthNo(c_PayPlus.mf_get_res("receipt_no"));
+
+			// 성공시 TB_GIFTCARD_RECEIPT INSERT
+		}
+
+		// 성공이든 실패이든 로그성 데이터 TB_GIFTCARD_RECEIPT_API INSERT
+
+		return result;
+	}
 }

+ 10 - 4
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -140,18 +140,23 @@ public class TsfPlanningService {
 		if ("N".equals(planningDao.getNewCustomerAccessibleYn(plan))) {
 			msg = "신규회원만 접근 가능합니다.";
 		}
-
+		
 		if (TsfSession.isLogin()) {
 			// 고객구분접근가능여부 조회
 			plan.setCustGb(TsfSession.getCustGb());
 			if ("N".equals(planningDao.getCustomerGubunAccessibleYn(plan))) {
-				msg = TsfSession.getInfo().getCustGbNm() + "만 접근이 가능합니다.";
+				msg = planningDao.getCustomerGubunAccessibleList(plan).getCustGb() + "만 접근이 가능합니다.";
 			}
 
+			String custGrade = "";
 			// 고객등급접근가능여부 조회
 			plan.setCustGrade(TsfSession.getInfo().getCustGrade());
 			if ("N".equals(planningDao.getCustomerGradeAccessibleYn(plan))) {
-				msg = TsfSession.getInfo().getCustGradeNm() + " 회원만 접근 가능합니다.";
+				Iterator<Plan> iter = planningDao.getCustomerGradeAccessibleList(plan).iterator();
+				while (iter.hasNext()) {
+					custGrade += iter.next().getCustGrade()+ " ";
+				}
+				msg = custGrade+ " 회원만 접근 가능합니다.";
 			}
 		}
 
@@ -159,7 +164,8 @@ public class TsfPlanningService {
 			// 웹제휴채널접근가능여부 조회
 			plan.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
 			if ("N".equals(planningDao.getAfLinkAccessibleYn(plan))) {
-				msg = commonDao.getAfLinkName(TsfSession.getAttribute("afLinkCd")) + " 채널만 접근 가능합니다.";
+				//msg = commonDao.getAfLinkName(TsfSession.getAttribute("afLinkCd")) + " 채널만 접근 가능합니다.";
+				msg = "제휴 채널을 통해서만 접근 가능합니다. ";
 			}
 		}
 

+ 16 - 0
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -27,12 +27,15 @@ import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.core.support.util.CryptoUtils;
 import com.style24.front.biz.service.TsfCartService;
 import com.style24.front.biz.service.TsfCouponService;
+import com.style24.front.biz.service.TsfOrderService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Order;
@@ -64,6 +67,9 @@ public class TsfCartController extends TsfBaseController {
 	@Autowired
 	private TscOrderService coreOrderService;
 
+	@Autowired
+	private TsfOrderService orderService;
+
 	@Autowired
 	private Environment env;
 
@@ -148,6 +154,16 @@ public class TsfCartController extends TsfBaseController {
 		model.addAttribute("order", order);
 		model.addAttribute("IMG_PATH", env.getProperty("upload.goods.view"));
 
+		GiftCard temp = new GiftCard();
+		temp.setTradeTime("20210422200347");	// 결제시각 : YYYYMMDDHH24MISS 형식
+		temp.setOrdPhnno("01011111111");		// 현금영수증 대상 휴대폰번호
+		temp.setUsGfcdAmt(10000);				// 현금영수증 신청 금액
+		temp.setOrdNo(211);						// 주문번호
+		temp.setGoodsNm("보라색 원피스");		// 상품명 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 상품명을 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+		temp.setOrdNm("구매자");				// 구매자명
+		temp.setOrdEmail("xxxx@xxxx.com");		// 구매자이메일 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 메일주소를 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+		orderService.kcpCashReceiptsRequest(temp);
+
 		return super.getDeviceViewName("cart/CartListAjaxForm");
 	}
 

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

@@ -223,8 +223,19 @@ public class TsfCommonController extends TsfBaseController {
 		
 		// 1.0 주문고객 배송지정보조회
 		Collection<Order> deliveryAddrList = coreOrderService.getDeliveryAddrInfo(order);
+		int index 				= 0;
+		int deliveryAddrCnt 	= deliveryAddrList.size();
 		
-		mav.addObject("deliveryAddrList", deliveryAddrList);	// 배송지정보
+		for (Order deliveryAddr : deliveryAddrList) {
+			if (index == 0) {
+				if (deliveryAddr.getRecipZipcode() == null || "".equals(deliveryAddr.getRecipZipcode())) {
+					deliveryAddrCnt = 0;
+				}
+			}
+		}
+		
+		mav.addObject("deliveryAddrList"	, deliveryAddrList);		// 배송지정보
+		mav.addObject("deliveryAddrCnt"		, deliveryAddrCnt);			// 배송지등록수
 		mav.setViewName(super.getDeviceViewName("popup/DelvAddrChangePop"));
 		
 		return mav;
@@ -353,9 +364,6 @@ public class TsfCommonController extends TsfBaseController {
 	public ModelAndView delvMemoChangePop(@RequestBody Order order) {
 		
 		ModelAndView mav = new ModelAndView();
-
-		log.info("ordNo >>> {}", order.getOrdNo());
-		log.info("delvMemo >>> {}", order.getDelvMemo());
 		
 		mav.addObject("ordNo", order.getOrdNo() == null ? 0 : order.getOrdNo());
 		

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

@@ -22,11 +22,11 @@ import com.gagaframework.web.rest.server.GagaResponse;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.service.TscCouponService;
 import com.style24.core.biz.service.TscCustomerService;
-import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.biz.service.TscOrderService;
+import com.style24.core.biz.service.TscWmsService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCartService;
@@ -52,6 +52,7 @@ import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
@@ -114,9 +115,6 @@ public class TsfMypageController extends TsfBaseController {
 	@Autowired
 	private TsfRendererService rendererService;
 
-	@Autowired
-	private TscKakaoPayService kakaoPayService;
-
 	@Autowired
 	private NiceCertify niceCertify;
 
@@ -130,10 +128,13 @@ public class TsfMypageController extends TsfBaseController {
 	private TsfCommonService commonService;
 
 	@Autowired
-	private TscKcpService kcpService;
+	private TscKcpService coreKcpService;
 
 	@Autowired
 	private TsfReinboundService reinboundService;
+	
+	@Autowired
+	private TscWmsService coreWmsService;
 
 	/**
 	 * 마이페이지 메인 화면
@@ -175,6 +176,10 @@ public class TsfMypageController extends TsfBaseController {
 
 		// 주문 상태 별 수량 조회
 		mav.addObject("orderCount", coreOrderService.getOrderStatCount(order));
+		
+		// 2021.04.21 모바일에서 사용하려고 추가
+		int totalCnt = orderService.getPagingOrdNoListCount(order);
+		mav.addObject("totalCnt", totalCnt);
 
 		// 주문상세상태코드 설정
 		mav.addObject("ordDtlStatList", rendererService.getCommonCodeList("G013", "Y", new String[] {"G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
@@ -465,6 +470,38 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 
+	/**
+	 * 교환요청철회
+	 *
+	 * @param OrderChange
+	 * @return GagaResponse
+	 * @author card007
+	 * @since 2021. 04. 20
+	 */
+	@PostMapping("/exchange/cancel")
+	@ResponseBody
+	public GagaResponse exchangeRequestCancel(@RequestBody OrderChange orderChange) {
+
+		if (orderChange== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// 1. 교환요청철회 정보 설정
+		int custNo = TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0;
+		orderChange.setCustNo(custNo);
+		orderChange.setRegNo(custNo);
+		orderChange.setUpdNo(custNo);
+		
+		String ipAddress = TsfSession.getIpAddress();
+		orderChange.setIpAddress(ipAddress);
+
+		// 2.교환요청철회 
+		coreOrderChangeService.exchangeCancel(orderChange);
+
+		return super.ok(message.getMessage("EXCHANGE_0002"));
+		// return super.ok();
+	}
+
 	/**
 	 * 마이페이지 등급쿠폰 다운 처리
 	 *
@@ -747,17 +784,13 @@ public class TsfMypageController extends TsfBaseController {
 			throw new IllegalStateException(message.getMessage("FAIL_1001"));
 		}
 
-		// TODO
-		// @ 결품취소로직 추가
-		// @ 주문취소시 상태값 체크
-		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
-
 		// 1. 세션회원조회
 		int custNo = TsfSession.getInfo().getCustNo();
 		orderChange.setCustNo(custNo);
 		orderChange.setIpAddress(TsfSession.getIpAddress());
 
-		GagaMap result = coreOrderChangeService.orderCancelPreInfo(orderChange);
+		// 2. 취소완료 처리
+		GagaMap result = coreOrderChangeService.orderCancelPreInfo(orderChange, custNo);
 
 		// TODO
 		// 취소 완료 알림톡 발송 에정
@@ -970,6 +1003,35 @@ public class TsfMypageController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * WMS 주문 취소 가능 여부 조회
+	 * 
+	 * @param
+	 * @return
+	 * @author card007
+	 * @since 2021. 04. 22
+	 */
+	@PostMapping("/wms/cancel/available")
+	@ResponseBody
+	public GagaMap getWmsCancelYn(@RequestBody OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+		String cancelYn = "Y";
+
+		Integer ordNo = orderChange.getOrdNo();
+
+		for (Integer ordDtlNo : orderChange.getOrdDtlNoArr()) {
+			String rst = coreWmsService.getCancelYn(ordNo, ordDtlNo);
+			
+			if ("Y".equals(cancelYn) && "N".equals(rst)) {
+				cancelYn = "N";
+			}
+		}
+
+		result.setString("cancelYn", cancelYn);
+
+		return result;
+	}
+
 	/**
 	 * 마이페이지 STYLE24 포인트화면
 	 *
@@ -1725,7 +1787,7 @@ public class TsfMypageController extends TsfBaseController {
 	public GagaMap getAccountCheck(@RequestBody CustAccount custAccount) throws Exception {
 		custAccount.setIpAddress(TsfSession.getIpAddress());
 		boolean isValid = false;
-		GagaMap result = kcpService.checkAccount(custAccount);
+		GagaMap result = coreKcpService.checkAccount(custAccount);
 		if ("0000".equals(result.get("resCd"))) {
 			isValid = true;
 		}
@@ -1967,12 +2029,64 @@ public class TsfMypageController extends TsfBaseController {
 	@ResponseBody
 	@PostMapping("/order/listInfo")
 	public ModelAndView getOrderListInfo(@RequestBody Order order) {
+		
 		// 주문목록조회
 		ModelAndView mav = new ModelAndView();
+		
+		// 페이징 처리 설정
+		TscPageRequest pageable = new TscPageRequest((order.getPageNo() > 0 ? order.getPageNo() - 1 : 0), order.getPageSize(), order.getPageUnit());
+		int totalCnt = orderService.getPagingOrdNoListCount(order);
+		pageable.setTotalCount(totalCnt);
+		order.setPageable(pageable);
+		
+		// 페이징 처리 및 주문정보 조회
+		List<Integer> ordNoList = new ArrayList<>();
+
+		for (Order tmpOrder : orderService.getPagingOrdNoList(order)) {
+			ordNoList.add(tmpOrder.getOrdNo());
+		}
+		
+		if (ordNoList.size() > 0) {
+			order.setOrdNoList(ordNoList.stream().mapToInt(Integer::intValue).toArray());
+		}
+				
 		mav.addObject("orderList", orderService.getOrderListForMypage(order));
 		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderListInfo"));
 
 		return mav;
 	}
+	
+	/**
+	 * 마이페이지 주문목록 조회 (모바일)
+	 * 
+	 * @param Order
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2021. 04. 19
+	 */
+	@ResponseBody
+	@PostMapping("/order/listInfo2")
+	public GagaMap getOrderListInfo2(@RequestBody Order order) {
+		
+		GagaMap result = new GagaMap();
+		
+		// 페이징 처리 설정
+		TscPageRequest pageable = new TscPageRequest((order.getPageNo() > 0 ? order.getPageNo() - 1 : 0), order.getPageSize(), order.getPageUnit());
+		int totalCnt = orderService.getPagingOrdNoListCount(order);
+		pageable.setTotalCount(orderService.getPagingOrdNoListCount(order));
+		order.setPageable(pageable);
+
+		result.set("paging"		, order);
+		result.set("totalCnt"	, totalCnt);
+		result.set("endRow"		, pageable.getEndRow());
+		result.set("orderList"	, orderService.getOrderListForMypage(order));
+		
+		// 주문목록조회
+		//ModelAndView mav = new ModelAndView();
+		//mav.addObject("orderList", orderService.getOrderListForMypage(order));
+		//mav.setViewName(super.getDeviceViewName("mypage/MypageOrderListInfo"));
+
+		return result;
+	}
 
 }

+ 3 - 4
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -335,6 +335,7 @@ public class TsfPlanningController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 - 기본정보
+		coupon.setPlanCouponStat("Y");
 		mav.addObject("couponDetailInfo", couponService.getCouponDetailInfo(coupon));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningCouponDetailForm"));
 		return mav;
@@ -678,14 +679,12 @@ public class TsfPlanningController extends TsfBaseController {
 						coupon.setRegNo(TsfSession.getInfo().getCustNo());
 						coupon.setUpdNo(TsfSession.getInfo().getCustNo());
 						// 이거 공통코드 변경예정.. 밑에
-						coupon.setPubReason("G068_60");
-						coupon.setPubReasonDtl("이벤트출석체크");
+						coupon.setPubReason("G068_91");
+						coupon.setPubReasonDtl("출석체크");
 						coupon.setEndAlimSendYn("N");
 						coreCouponService.saveCouponIssue(coupon);
 						String msg =  "축하합니다. " + toNumFormat(pointAmt) + " 포인트와 " + toNumFormat(coupon.getDcVal()) +coupon.getDcWay() + " 할인쿠폰이 지급 되었습니다!";
 						result.set("msg", msg);
-						
-						
 					}
 
 				}else {

+ 5 - 4
src/main/java/com/style24/front/support/config/TsfMybatisWmsConfig.java

@@ -1,7 +1,7 @@
 package com.style24.front.support.config;
 
-import com.style24.core.support.annotation.WmsDs;
-import com.style24.core.support.env.TscConstants;
+import javax.sql.DataSource;
+
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.mybatis.spring.SqlSessionFactoryBean;
 import org.mybatis.spring.SqlSessionTemplate;
@@ -12,7 +12,8 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import javax.sql.DataSource;
+import com.style24.core.support.annotation.WmsDs;
+import com.style24.core.support.env.TscConstants;
 
 /**
  * wmsDs용 Mybatis Configuration
@@ -34,7 +35,7 @@ public class TsfMybatisWmsConfig {
 		sessionFactoryBean.setDataSource(dataSource);
 		sessionFactoryBean.setTypeAliasesPackage(TscConstants.DOMAIN_PACKAGE);
 		sessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:persistence/mybatis-wms-config.xml"));
-		sessionFactoryBean.setMapperLocations(applicationContext.getResources(TscConstants.MAPPER_LOCATION_PATH + "/shop/*.xml"));
+		sessionFactoryBean.setMapperLocations(applicationContext.getResources(TscConstants.MAPPER_LOCATION_PATH + "/wms/*.xml"));
 
 		return sessionFactoryBean.getObject();
 	}

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

@@ -52,6 +52,7 @@ public class Contents extends TscBaseDomain {
 	private String brandGroupNm;	// 브랜드그룹이름
 	private String brandGroupImg;	// 브랜드그룹이미지경로
 	private String mdTitle;			// MD타이틀
+	private String html;
 
 	private String viewDt;			// 미리보기일시
 	private String preview;			// 미리보기여부

+ 53 - 51
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -813,7 +813,9 @@
 		                       END)                              AS EXPIRE_YN /*만료여부*/
 		            FROM   TB_CUST_COUPON CC
 		            WHERE  1 = 1
+		            <if test="planCouponStat == null and planCouponStat == ''">
 		            AND    CC.CUST_NO = #{custNo}
+		            </if>
 		            AND    CC.USED_DT IS NULL /*사용하지않은쿠폰만*/
 		            AND    CC.AVAIL_EDDT >= DATE_ADD(NOW(), INTERVAL -3 MONTH) /*최근3개월쿠폰만*/
 		            GROUP  BY CC.CPN_ID, DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i'), DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i')
@@ -998,57 +1000,57 @@
 		     , Z.DOWNLOAD_CNT
 		     , Z.OWN_COUPON
 		  FROM (SELECT A.*
-					 , CASE WHEN A.CNT <![CDATA[<=]]> 0 THEN 0
-							WHEN A.CNT > (A.DN_ABLE_CNT * A.ONE_PUB_QTY) THEN (A.DN_ABLE_CNT * A.ONE_PUB_QTY)
-							ELSE A.CNT
-						END AS DOWNLOAD_CNT
-				  FROM (SELECT #{custNo} AS CUST_NO
-							 , C.CPN_ID
-							 , C.CPN_NM
-							 , C.CUST_PUB_LIMIT_QTY
-							 , C.ONE_PUB_QTY
-							 , IF(C.PD_GB = 'P', C.AVAIL_STDT, NOW()) AS AVAIL_STDT
-							 , IF(C.PD_GB = 'P', C.AVAIL_EDDT, CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59')) AS AVAIL_EDDT
-				             , C.END_ALIM_YN
-							 , IFNULL(CC.CPN_CNT, 0) AS DN_CNT
-				             , IF(C.CUST_PUB_LIMIT_QTY = 0 OR C.CUST_PUB_LIMIT_QTY - CC.CPN_CNT > 0, 1, 0) AS DN_ABLE_CNT
-				             , IF(C.TOT_PUB_LIMIT_QTY > 0, C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT, 99999) AS CNT
-				             , (SELECT COUNT(*) FROM TB_CUST_COUPON TCC WHERE CPN_ID = #{cpnId} AND CUST_NO = #{custNo}) AS OWN_COUPON
-						  FROM TB_COUPON C
-						 INNER JOIN TB_COUPON_CUST_GBN CCGB
-							ON C.CPN_ID = CCGB.CPN_ID
-						   AND CCGB.USABLE_CUST_GB = #{custGb}
-						 INNER JOIN TB_COUPON_CUST_GRADE CCGR
-							ON C.CPN_ID = CCGR.CPN_ID
-						   AND CCGR.USABLE_CUST_GRADE = #{custGrade}
-						  LEFT OUTER JOIN (SELECT CPN_ID
-												, CUST_NO
-												, COUNT(*) AS CPN_CNT
-											 FROM TB_CUST_COUPON
-											GROUP BY CPN_ID, CUST_NO) CC
-							ON C.CPN_ID = CC.CPN_ID
-						   AND CC.CUST_NO = #{custNo}
-						  LEFT OUTER JOIN (SELECT CPN_ID
-												, COUNT(*) AS CPN_CNT
-											 FROM TB_CUST_COUPON
-											GROUP BY CPN_ID) CC2
-							ON C.CPN_ID = CC2.CPN_ID
-						 WHERE C.DOWN_ABL_YN = 'N'
-						    AND C.CPN_ID IN (
-						       					SELECT PCI.ITEM_VAL 
-						       					FROM TB_PLAN_CONTENTS_ITEM PCI 
-						       					WHERE PCI.ITEM_VAL = #{cpnId}
-						       				)
-						   AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
-						   AND C.CPN_STAT = 'G232_11'  -- 진행
-						   AND CASE WHEN C.TOT_PUB_LIMIT_QTY = 0 THEN 1
-									WHEN C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT > 0 THEN 1
-									ELSE 0
-								END = 1
-						   AND IF(C.NEW_CUST_YN = 'Y', (SELECT COUNT(*) FROM TB_CUSTOMER WHERE CUST_NO = #{custNo} AND REG_DT BETWEEN C.CUST_JOIN_STDT AND C.CUST_JOIN_EDDT), 1) = 1
-						   AND IF(C.FIRST_ORD_YN = 'Y', (SELECT COUNT(*) FROM TB_ORDER WHERE CUST_NO = #{custNo} AND ORD_DT BETWEEN C.BUY_STDT AND C.BUY_EDDT), 0) = 0
-						) A
-				) Z
+		            , CASE WHEN A.CNT <![CDATA[<=]]> 0 THEN 0
+		                   WHEN A.CNT > (A.DN_ABLE_CNT * A.ONE_PUB_QTY) THEN (A.DN_ABLE_CNT * A.ONE_PUB_QTY)
+		                   ELSE A.CNT
+		               END AS DOWNLOAD_CNT
+		        FROM (SELECT #{custNo} AS CUST_NO
+		                  , C.CPN_ID
+		                   , C.CPN_NM
+		                   , C.CUST_PUB_LIMIT_QTY
+		                   , C.ONE_PUB_QTY
+		                   , IF(C.PD_GB = 'P', C.AVAIL_STDT, NOW()) AS AVAIL_STDT
+		                   , IF(C.PD_GB = 'P', C.AVAIL_EDDT, CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59')) AS AVAIL_EDDT
+		                   , C.END_ALIM_YN
+		                   , IFNULL(CC.CPN_CNT, 0) AS DN_CNT
+		                   , IF(C.CUST_PUB_LIMIT_QTY = 0 OR C.CUST_PUB_LIMIT_QTY - CC.CPN_CNT > 0, 1, 0) AS DN_ABLE_CNT
+		                   , IF(C.TOT_PUB_LIMIT_QTY > 0, C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT, 99999) AS CNT
+		                   , (SELECT COUNT(*) FROM TB_CUST_COUPON TCC WHERE CPN_ID = #{cpnId} AND CUST_NO = #{custNo}) AS OWN_COUPON
+		                FROM TB_COUPON C
+		               INNER JOIN TB_COUPON_CUST_GBN CCGB
+		                ON C.CPN_ID = CCGB.CPN_ID
+		               AND CCGB.USABLE_CUST_GB = #{custGb}
+		               INNER JOIN TB_COUPON_CUST_GRADE CCGR
+		                ON C.CPN_ID = CCGR.CPN_ID
+		               AND CCGR.USABLE_CUST_GRADE = #{custGrade}
+		                LEFT OUTER JOIN (SELECT CPN_ID
+		                                     , CUST_NO
+		                                     , COUNT(*) AS CPN_CNT
+		                                  FROM TB_CUST_COUPON
+		                                 GROUP BY CPN_ID, CUST_NO) CC
+		                    ON C.CPN_ID = CC.CPN_ID
+		                     AND CC.CUST_NO = #{custNo}
+		                    LEFT OUTER JOIN (SELECT CPN_ID
+		                                          , COUNT(*) AS CPN_CNT
+		                                     FROM TB_CUST_COUPON
+		                                    GROUP BY CPN_ID) CC2
+		                    ON C.CPN_ID = CC2.CPN_ID
+		               WHERE C.DOWN_ABL_YN = 'N'
+		                  AND C.CPN_ID IN (
+		                                    SELECT PCI.ITEM_VAL 
+		                                    FROM TB_PLAN_CONTENTS_ITEM PCI 
+		                                    WHERE PCI.ITEM_VAL = #{cpnId}
+		                                  )
+		                 AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
+		                 AND C.CPN_STAT = 'G232_11'  -- 진행
+		                 AND CASE WHEN C.TOT_PUB_LIMIT_QTY = 0 THEN 1
+		                          WHEN C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT > 0 THEN 1
+		                          ELSE 0
+		                            END = 1
+		                 AND IF(C.NEW_CUST_YN = 'Y', (SELECT COUNT(*) FROM TB_CUSTOMER WHERE CUST_NO = #{custNo} AND REG_DT BETWEEN C.CUST_JOIN_STDT AND C.CUST_JOIN_EDDT), 1) = 1
+		                 AND IF(C.FIRST_ORD_YN = 'Y', (SELECT COUNT(*) FROM TB_ORDER WHERE CUST_NO = #{custNo} AND ORD_DT BETWEEN C.BUY_STDT AND C.BUY_EDDT), 0) = 0
+		              ) A
+		     ) Z
 		 <!-- WHERE Z.DOWNLOAD_CNT <![CDATA[>=]]> 0 -->
 	</select>
 

+ 380 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -140,6 +140,9 @@
 		     , SUB_TEXT2       /*서브텍스트2*/
 		     , SUB_TEXT3       /*서브텍스트3*/
 		     , SUB_TEXT4       /*서브텍스트4*/
+		     <if test='contentsLoc != null and contentsLoc =="SGNB001"'>
+			 , HTML
+		     </if>
 		     , BRAND_GROUP_NO  /*브랜드그룹번호*/
 		     <if test='contentsLoc != null and contentsLoc =="SMM007"'>
 		     , BRAND_GROUP_NM
@@ -182,6 +185,9 @@
 		             , A.SUB_TEXT2                                          /*서브텍스트2*/
 		             , A.SUB_TEXT3                                          /*서브텍스트3*/
 		             , A.SUB_TEXT4                                          /*서브텍스트4*/
+		             <if test='contentsLoc != null and contentsLoc =="SGNB001"'>
+		             , A.HTML
+					 </if>
 		             , A.BRAND_GROUP_NO                                     /*브랜드그룹번호*/
 		             <if test='contentsLoc != null and contentsLoc =="SMM007"'>
 		             , (SELECT FN_GET_BRAND_GROUP_NM(A.BRAND_GROUP_NO)) AS BRAND_GROUP_NM
@@ -661,9 +667,380 @@
 		GROUP BY GB.BENEFIT_GB
 	</select>
 
-	<!-- 카테고리별 상품 총 수 -->
+	<!-- 카테고리별 상품 총  new -->
 	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
 		/* TsfDisplay.getCategoryGoodsCount */
+		WITH TAB_GOODS AS (
+		      SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		           , G.GOODS_CD           /*상품코드*/
+		           , G.GOODS_NM           /*상품명*/
+		           , G.GOODS_GB           /*상품구분*/
+		           , G.SELF_GOODS_YN      /*자사상품여부*/
+		           , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		           , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		           , G.ORDER_MADE_YN      /*주문제작여부*/
+		           , G.GOODS_TNM          /*상품타이틀명*/
+		           , G.MAIN_COLOR_CD      /*대표색상코드*/
+		           , G.LIST_PRICE         /*정상가(최초판매가)*/
+		           , G.CURR_PRICE         /*현재판매가*/
+		           , G.FORMAL_GB
+		           , G.REG_DT             /*등록일시*/
+		           , G.SELL_WEEK_QTY  /*주간판매수량*/
+		           , G.REVIEW_REG_CNT /*리뷰등록건수*/
+		      FROM   (
+		           SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                  BG.BRAND_GROUP_ENM
+		                  ELSE
+		                  BG.BRAND_GROUP_KNM
+		                  END                                                                AS BRAND_GROUP_NM /*브랜드그룹명*/
+		                  , G.GOODS_CD                                                                           /*상품코드*/
+		                  , G.GOODS_NM                                                                           /*상품명*/
+		                  , G.GOODS_GB                                                                           /*상품구분*/
+		                  , G.SELF_GOODS_YN                                                                      /*자사상품여부*/
+		                  , G.FOREIGN_BUY_YN                                                                     /*해외구매대행여부*/
+		                  , G.PARALLEL_IMPORT_YN                                                                 /*병행수입여부*/
+		                  , G.ORDER_MADE_YN                                                                      /*주문제작여부*/
+		                  , G.GOODS_TNM                                                                          /*상품타이틀명*/
+		                  , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
+		                  , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
+		                  , CASE WHEN 'P' = 'P' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		                  WHEN 'P' = 'M' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		                  WHEN 'P' = 'A' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		                  WHEN 'P' = 'P' AND GBP.CUST_GB != 'G100_20' THEN GBP.PC_CURR_PRICE
+		                  WHEN 'P' = 'M' AND GBP.CUST_GB != 'G100_20' THEN GBP.MO_CURR_PRICE
+		                  WHEN 'P' = 'A' AND GBP.CUST_GB != 'G100_20' THEN GBP.APP_CURR_PRICE
+		                  ELSE G.CURR_PRICE
+		                  END                                                   AS CURR_PRICE       /*현재판매가*/
+		                  , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
+		                  , G.FORMAL_GB /*정상이월구분*/
+		                  , G.REG_DT                                                                             /*등록일시*/
+		                  , GS.SELL_WEEK_QTY  /*주간판매수량*/
+		                  , GS.REVIEW_REG_CNT /*리뷰등록건수*/
+		           FROM   TB_CATE_4SRCH C4
+		           INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		           INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		           INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		           INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		           INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		           LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		           WHERE  C4.SITE_CD = 'G000_10'
+		           AND    C4.CATE_GB = 'G032_101'
+		           AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		           AND    C4.CATE1_NO = #{cate1No}
+		           <if test="cate2No != null and cate2No != ''">
+		           AND    C4.CATE2_NO = #{cate2No}
+		           </if>
+		           <if test="cate3No != null and cate3No != ''">
+		           AND    C4.CATE3_NO = #{cate3No}
+		           </if>
+		           <if test="cate4No != null and cate4No != ''">
+		           AND    C4.CATE4_NO = #{cate4No}
+		           </if>
+		           <if test="cate5No != null and cate5No != ''">
+		           AND    C4.CATE5_NO = #{cate5No}
+		           </if>
+		           <choose>
+		               <when test="brandGroupNo != null and brandGroupNo != ''">
+		           AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		               </when>
+		               <otherwise>
+		           AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		                  </otherwise>
+		              </choose>
+		AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		AND    S.STOCK_QTY > 0 /*재고있는 상품*/
+		AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		) G
+		WHERE  1 = 1
+		)
+		, TAB_OPTION AS (
+		      /* 자사상품 색상 목록 */
+		      SELECT O.GOODS_CD
+		      , O.OPT_CD1  AS MAIN_COLOR_CD
+		      FROM   TAB_GOODS G
+		      , TB_OPTION O
+		      WHERE  G.GOODS_CD = O.GOODS_CD
+		      AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
+		      AND    O.DISP_YN = 'N'
+		      GROUP  BY O.GOODS_CD, O.OPT_CD1
+		)
+		, TAB_ALL_GOODS AS (
+		         SELECT *
+		         FROM   (
+		         SELECT G.BRAND_GROUP_NM
+		              , G.GOODS_CD
+		              , G.GOODS_NM           /*상품명*/
+		              , G.GOODS_GB           /*상품구분*/
+		              , G.SELF_GOODS_YN      /*자사상품여부*/
+		              , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		              , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		              , G.ORDER_MADE_YN      /*주문제작여부*/
+		              , G.GOODS_TNM          /*상품타이틀명*/
+		              , IFNULL(O.MAIN_COLOR_CD,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD /*대표색상코드*/
+		              , G.LIST_PRICE         /*정상가(최초판매가)*/
+		              , G.CURR_PRICE         /*현재판매가*/
+		              , G.FORMAL_GB
+		              , G.REG_DT             /*등록일시*/
+		              , G.SELL_WEEK_QTY
+		              , G.REVIEW_REG_CNT
+		              , RANK() OVER(ORDER BY G.FORMAL_GB
+		              , G.REG_DT DESC
+		              , G.GOODS_CD) AS NUMB
+		        FROM TAB_GOODS G
+		        LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
+		        ) ORIGINAL
+		)
+		, TAB_GOODS_IMG AS (
+		/* 상품의 이미지 */
+		     SELECT GOODS_CD
+		     ,MAX(SYS_IMG_NM)  AS SYS_IMG_NM
+		     ,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		     FROM   (
+		             SELECT G.GOODS_CD
+		             , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		             , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		             FROM   TAB_ALL_GOODS G
+		             , TB_GOODS_IMG GI
+		             WHERE  G.GOODS_CD = GI.GOODS_CD
+		             AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		     ) Z
+		GROUP  BY GOODS_CD
+		)
+		SELECT COUNT(1) AS TOTCNT
+		FROM TAB_ALL_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+	     <if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+	     LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+	                                  AND W.CUST_NO = #{custNo}
+	     </if>
+	</select>
+
+	<!-- 카테고리별 상품 리스트 -->
+	<select id="getCategoryGoodsList" parameterType="GoodsSearch" resultType="Goods">
+		/* TsfDisplay.getCategoryGoodsList */
+		WITH TAB_GOODS AS (
+		SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		, G.GOODS_CD           /*상품코드*/
+		, G.GOODS_NM           /*상품명*/
+		, G.GOODS_GB           /*상품구분*/
+		, G.SELF_GOODS_YN      /*자사상품여부*/
+		, G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		, G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		, G.ORDER_MADE_YN      /*주문제작여부*/
+		, G.GOODS_TNM          /*상품타이틀명*/
+		, G.MAIN_COLOR_CD      /*대표색상코드*/
+		, G.LIST_PRICE         /*정상가(최초판매가)*/
+		, G.CURR_PRICE         /*현재판매가*/
+		, G.FORMAL_GB
+		, G.REG_DT             /*등록일시*/
+		, G.SELL_WEEK_QTY  /*주간판매수량*/
+		, G.REVIEW_REG_CNT /*리뷰등록건수*/
+		FROM   (
+		SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		BG.BRAND_GROUP_ENM
+		ELSE
+		BG.BRAND_GROUP_KNM
+		END                                                                AS BRAND_GROUP_NM /*브랜드그룹명*/
+		, G.GOODS_CD                                                                           /*상품코드*/
+		, G.GOODS_NM                                                                           /*상품명*/
+		, G.GOODS_GB                                                                           /*상품구분*/
+		, G.SELF_GOODS_YN                                                                      /*자사상품여부*/
+		, G.FOREIGN_BUY_YN                                                                     /*해외구매대행여부*/
+		, G.PARALLEL_IMPORT_YN                                                                 /*병행수입여부*/
+		, G.ORDER_MADE_YN                                                                      /*주문제작여부*/
+		, G.GOODS_TNM                                                                          /*상품타이틀명*/
+		, G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
+		, G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
+		, CASE WHEN 'P' = 'P' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		WHEN 'P' = 'M' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		WHEN 'P' = 'A' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		WHEN 'P' = 'P' AND GBP.CUST_GB != 'G100_20' THEN GBP.PC_CURR_PRICE
+		WHEN 'P' = 'M' AND GBP.CUST_GB != 'G100_20' THEN GBP.MO_CURR_PRICE
+		WHEN 'P' = 'A' AND GBP.CUST_GB != 'G100_20' THEN GBP.APP_CURR_PRICE
+		ELSE G.CURR_PRICE
+		END                                                   AS CURR_PRICE       /*현재판매가*/
+		, G.MIN_ORD_AMT                                                                        /*최수주문금액*/
+		, G.FORMAL_GB /*정상이월구분*/
+		, G.REG_DT                                                                             /*등록일시*/
+		, GS.SELL_WEEK_QTY  /*주간판매수량*/
+		, GS.REVIEW_REG_CNT /*리뷰등록건수*/
+		FROM   TB_CATE_4SRCH C4
+		INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		WHERE  C4.SITE_CD = 'G000_10'
+		AND    C4.CATE_GB = 'G032_101'
+		AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		AND    C4.CATE1_NO = #{cate1No}
+		<if test="cate2No != null and cate2No != ''">
+			AND    C4.CATE2_NO = #{cate2No}
+		</if>
+		<if test="cate3No != null and cate3No != ''">
+			AND    C4.CATE3_NO = #{cate3No}
+		</if>
+		<if test="cate4No != null and cate4No != ''">
+			AND    C4.CATE4_NO = #{cate4No}
+		</if>
+		<if test="cate5No != null and cate5No != ''">
+			AND    C4.CATE5_NO = #{cate5No}
+		</if>
+		<choose>
+			<when test="brandGroupNo != null and brandGroupNo != ''">
+				AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+			</when>
+			<otherwise>
+				AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+			</otherwise>
+		</choose>
+		AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		AND    S.STOCK_QTY > 0 /*재고있는 상품*/
+		AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		) G
+		WHERE  1 = 1
+		)
+		, TAB_OPTION AS (
+		/* 자사상품 색상 목록 */
+		SELECT O.GOODS_CD
+		, O.OPT_CD1  AS MAIN_COLOR_CD
+		FROM   TAB_GOODS G
+		, TB_OPTION O
+		WHERE  G.GOODS_CD = O.GOODS_CD
+		AND    G.SELF_GOODS_YN = 'Y' /*자사상품만*/
+		AND    O.DISP_YN = 'N'
+		GROUP  BY O.GOODS_CD, O.OPT_CD1
+		)
+		, TAB_ALL_GOODS AS (
+		SELECT *
+		FROM   (
+		SELECT G.BRAND_GROUP_NM
+		, G.GOODS_CD
+		, G.GOODS_NM           /*상품명*/
+		, G.GOODS_GB           /*상품구분*/
+		, G.SELF_GOODS_YN      /*자사상품여부*/
+		, G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		, G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		, G.ORDER_MADE_YN      /*주문제작여부*/
+		, G.GOODS_TNM          /*상품타이틀명*/
+		, IFNULL(O.MAIN_COLOR_CD,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD /*대표색상코드*/
+		, G.LIST_PRICE         /*정상가(최초판매가)*/
+		, G.CURR_PRICE         /*현재판매가*/
+		, G.FORMAL_GB
+		, G.REG_DT             /*등록일시*/
+		, G.SELL_WEEK_QTY
+		, G.REVIEW_REG_CNT
+		, RANK() OVER(ORDER BY G.FORMAL_GB
+		, G.REG_DT DESC
+		, G.GOODS_CD) AS NUMB
+		FROM TAB_GOODS G
+		LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
+		) ORIGINAL
+		WHERE 1=1
+		<if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+			AND  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		</if>
+		<if test="maxRow != null and maxRow !=''">
+			AND  NUMB <![CDATA[<=]]> #{maxRow}
+		</if>
+		)
+		, TAB_GOODS_IMG AS (
+		/* 상품의 이미지 */
+		SELECT GOODS_CD
+		,MAX(SYS_IMG_NM)  AS SYS_IMG_NM
+		,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		FROM   (
+		SELECT G.GOODS_CD
+		, CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		, CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		FROM   TAB_ALL_GOODS G
+		, TB_GOODS_IMG GI
+		WHERE  G.GOODS_CD = GI.GOODS_CD
+		AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		) Z
+		GROUP  BY GOODS_CD
+		)
+		SELECT G.BRAND_GROUP_NM
+		, G.GOODS_CD
+		, FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		, G.GOODS_TNM
+		, G.MAIN_COLOR_CD
+		, G.LIST_PRICE
+		, G.CURR_PRICE                                                                                                  /*현재판매가*/
+		, GI.SYS_IMG_NM
+		, GI.SYS_IMG_NM2
+		, (
+		SELECT GROUP_CONCAT(CONCAT(VIDEO_GB,':',KMC_KEY) ORDER BY NUMB SEPARATOR ',')
+		FROM   (
+		SELECT GV.VIDEO_GB
+		, GV.KMC_KEY
+		, GV.REG_DT
+		, RANK() OVER(ORDER BY GV.REG_DT, GV.KMC_KEY) AS NUMB
+		FROM   TB_GOODS_VIDEO GV
+		WHERE  GV.GOODS_CD = G.GOODS_CD
+		AND    GV.DISP_YN = 'Y'
+		AND    GV.KMC_KEY IS NOT NULL
+		) Z
+		WHERE  NUMB <![CDATA[<=]]>  2
+		) AS VIDEO_VAL
+		, (
+		SELECT GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
+		FROM   TB_OPTION O
+		, TB_COLOR C
+		, TB_COMMON_CODE CC
+		WHERE  O.OPT_CD1 = C.COLOR_CD
+		AND    C.COLOR_GRP_CD = CC.CD
+		AND    O.GOODS_CD = G.GOODS_CD
+		AND    O.DISP_YN = 'Y'
+		AND    C.USE_YN = 'Y'
+		AND    CC.USE_YN = 'Y'
+		) AS COLOR_CHIPS /*컬러칩*/
+		, (
+		SELECT GROUP_CONCAT(DISTINCT CONCAT(OPT_CD2
+		,':'
+		,CASE WHEN SOLDOUT_YN = 'Y' THEN 'Y'
+		ELSE
+		CASE WHEN CURR_STOCK_QTY - BASE_STOCK_QTY > 0 THEN 'N'
+		ELSE 'Y'
+		END
+		END)
+		ORDER BY DISP_ORD SEPARATOR ',') AS SIZES
+		FROM   VW_STOCK
+		WHERE  GOODS_CD = G.GOODS_CD
+		AND    OPT_CD1 = G.MAIN_COLOR_CD
+		AND    DISP_YN = 'Y'
+		) AS SIZES /*사이즈*/
+		, FORMAL_GB
+		, REG_DT
+		, NUMB
+		<choose>
+			<when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+				, IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+			</when>
+			<otherwise>
+				, ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+			</otherwise>
+		</choose>
+		FROM TAB_ALL_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+			LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+			AND W.CUST_NO = #{custNo}
+		</if>
+	</select>
+
+	<!-- 카테고리별 상품 총 수 -->
+	<select id="getCategoryGoodsCount_old" parameterType="GoodsSearch" resultType="int">
+		/* TsfDisplay.getCategoryGoodsCount_old */
 		SELECT COUNT(1) AS CNT
 		  FROM TB_GOODS G
 		  JOIN TB_CATE_GOODS CG ON G.GOODS_CD = CG.GOODS_CD
@@ -749,8 +1126,8 @@
 	</sql>
 
 	<!-- 카테고리별 상품 총 리스트 -->
-	<select id="getCategoryGoodsList" parameterType="GoodsSearch" resultType="Goods">
-		/* TsfDisplay.getCategoryGoodsList */
+	<select id="getCategoryGoodsList_old" parameterType="GoodsSearch" resultType="Goods">
+		/* TsfDisplay.getCategoryGoodsList_old */
 		WITH TAB_GOODS AS (
 		     SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
 		          , G.GOODS_CD           /*상품코드*/

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

@@ -126,7 +126,7 @@
 		          LEFT OUTER JOIN TB_CUST_ACCOUNT CA
 		            ON O.CUST_NO = CA.CUST_NO
 		         WHERE O.ORD_NO = #{ordNo}
-		           AND OD.ORD_DTL_STAT IN ('G013_10', 'G013_11', 'G013_20', 'G013_30')
+		           AND OD.ORD_DTL_STAT IN ('G013_10', 'G013_11', 'G013_20', 'G013_30', 'G013_35')
 		<choose>
 			<when test='custNo != null and custNo != ""'>
 		           AND O.CUST_NO = #{custNo}

+ 28 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -92,9 +92,9 @@
 		        FROM   TB_PLAN P
 		        WHERE  P.PLAN_GB = 'P' /*기획전*/
 		        AND    P.SITE_CD = #{siteCd}
-		        <if test="frontGb != null and frontGb != ''">
+		       <!--  <if test="frontGb != null and frontGb != ''">
 		        AND    P.FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
-		        </if>
+		        </if> -->
 		        AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
 		        AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
 		        AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
@@ -160,9 +160,9 @@
 		    AND    P.PLAN_SQ = #{planSq}
 		    AND    P.PLAN_GB = 'P' /*기획전*/
 		    AND    P.SITE_CD = #{siteCd}
-		    <if test="frontGb != null and frontGb != ''">
+		  <!--   <if test="frontGb != null and frontGb != ''">
 		    AND    P.FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
-		    </if>
+		    </if> -->
 		    AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
 		    AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
 		    AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
@@ -377,6 +377,28 @@
 		AND    CUST_GB = #{custGb}
 	</select>
 	
+	<!-- 고객구분접근가능리스트 -->
+	<select id="getCustomerGubunAccessibleList" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getCustomerGubunAccessibleList */
+		SELECT CASE CUST_GB WHEN 'G100_10' THEN '일반회원'
+		                    WHEN 'G100_20' THEN '임직원' END AS CUST_GB 
+		FROM TB_PLAN_CUST_DIVISION 
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
+	<!-- 고객등급접근가능리스트 -->
+	<select id="getCustomerGradeAccessibleList" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getCustomerGradeAccessibleList */
+		SELECT CASE CUST_GRADE WHEN 'G110_10' THEN 'VIP'
+		                       WHEN 'G110_20' THEN 'GOLD'
+		                       WHEN 'G110_30' THEN 'SILVER'
+		                       WHEN 'G110_40' THEN 'BRONZE'
+		                       WHEN 'G110_50' THEN 'WELCOME'
+		                       END AS CUST_GRADE
+		FROM TB_PLAN_CUST_GRADE 
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
 	<!-- 고객등급접근가능여부 조회 -->
 	<select id="getCustomerGradeAccessibleYn" parameterType="Plan" resultType="String">
 		/* TsfPlanning.getCustomerGradeAccessibleYn */
@@ -498,9 +520,9 @@
 		        FROM   TB_PLAN P
 		        WHERE  P.PLAN_GB IN ('E','C') /*이벤트,출석체크*/
 		        AND    P.SITE_CD = #{siteCd}
-		        <if test="frontGb != null and frontGb != ''">
+		       <!--  <if test="frontGb != null and frontGb != ''">
 		        AND    P.FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
-		        </if>
+		        </if> -->
 		        AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
 		        AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
 		        AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/

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

@@ -20,7 +20,8 @@
 		SELECT IFNULL(SUM(RM_PNT_AMT), 0) AS RM_PNT_AMT
 		FROM   TB_CUST_POINT
 		WHERE  CUST_NO = #{custNo}
-		AND    EXP_BE_DT > NOW();
+		AND    EXP_BE_DT > NOW()
+		AND    EXP_CMP_DT IS NULL
 	</select>
 	
 	<!-- 적립예정 포인트조회-->

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

@@ -501,10 +501,10 @@
 		     , Z.ORD_CAN_CHG_QTY
 		     , Z.ITEMKIND_NM 
 		   	 , Z.ITEMKIND_CD 
-             , Z.SIZE_GB 
-             , Z.REMAIN_DT
-             <if test="reviewStat == 'u'.toString()">
-             , Z.REVIEW_SQ        
+		     , Z.SIZE_GB 
+		     , Z.REMAIN_DT
+		     <if test="reviewStat == 'u'.toString()">
+		     , Z.REVIEW_SQ        
 			 , Z.REVIEW_GB        
 			 , Z.REVIEW_TITLE     
 			 , Z.REVIEW_CONTENT   

+ 22 - 6
src/main/resources/config/application-dev.yml

@@ -63,9 +63,25 @@ mail:
 
 # PG
 pg:
-    nicepay:
-        merchantId: nictest00m
-        merchantKey: 33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A==
-        log.path: /home/app/logs/nicepay
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp
+    kcp:
+        log.dir: /WIDE/workspace/files/data/style24/logs/front
+        gw:
+            url: testpaygw.kcp.co.kr
+            port: 8090
+        js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
+        server: false
+        site:
+            cd: T0000
+            key: 3grptw1.zW0GSo4PQdaGvsF__
+            name: ISTYLE TEST
+        log.level: 3
+        module.type: 01
+        tx.mode: 0
+        receipt.url : https://testadmin8.kcp.co.kr/assist/bill.BillActionNew.do
+
+# 네이버페이 API
+naverPay:
+    apiUrl: https://dev.apis.naver.com/
+    payUrl:
+        web : test-pay.naver.com
+        mob : test-m.pay.naver.com

+ 16 - 7
src/main/resources/config/application-locp.yml

@@ -64,13 +64,22 @@ mail:
 
 # PG
 pg:
-    nicepay:
-        merchantId: wivismallm
-        merchantKey: pXTdML8rIaOVCeXQQsyRp1uCfTSTT/n80BV4LCqa+/yJM64MYIqeBCIQdH1rKhJRwSOsdCxVPa1V6hRxkkdJxg==
-        cancelPwd: wivis@2020
-        log.path: /WIDE/workspace/logs/wivis
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp
+    kcp:
+        log.dir: /WIDE/workspace/files/data/style24/logs/front
+        gw:
+            url: paygw.kcp.co.kr
+            port: 8090
+        user.type: PGNW
+        js.url: https://pay.kcp.co.kr/plugin/payplus_web.jsp
+        server: true
+        site:
+            cd: U3476
+            key: 4aVa--.Xz8Fc78nwYPsrmmY__
+            name: ISTYLE
+        log.level: 3
+        module.type: 01
+        tx.mode: 0
+        receipt.url : https://admin8.kcp.co.kr/assist/bill.BillActionNew.do
 
 # 네이버페이 API
 naverPay:

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

@@ -64,7 +64,7 @@ mail:
 # PG
 pg:
     kcp:
-        log.dir: /WIDE/workspace/files/data/style24/logs/front
+        log.dir: E:/Run/Payplus
         gw:
             url: paygw.kcp.co.kr
             port: 8090

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/SigninFormMob.html

@@ -78,17 +78,17 @@
 					<ul class="login_utill">
 						<li class="lu_kakao">
 							<a href="javascript:void(0)" onclick="cfnLoginKakao();">
-								<div class="ico"></div>카카오로<br>시작하기
+								<div class="ico"></div>카카오
 							</a>
 						</li>
 						<li class="lu_naver">
 							<a href="javascript:void(0)" onclick="cfnLoginNaver();">
-								<div class="ico"></div>네이버로<br>시작하기
+								<div class="ico"></div>네이버
 							</a>
 						</li>
 						<li class="lu_yes24">
 							<a href="javascript:void(0)" onclick="cfnLoginYes24();">
-								<div class="ico"></div>YES24로<br>시작하기
+								<div class="ico"></div>YES24
 							</a>
 						</li>
 					</ul>

+ 20 - 6
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -704,7 +704,7 @@
 				setLoginInfo();
 
 				if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
-					//$(".shotDelvSelect").hide();
+					$(".shotDelvSelect").hide();
 				}
 
 				$("#cartListForm .area_salecoupon .coupon_box").hide();
@@ -1020,11 +1020,11 @@
 						let message = info.goodsNm + " 상품은 구매 할 수 없습니다. 제외하고 계속 주문하시겠습니까?";
 						fnRemoveCartSqConfirm(message, cartSqArr, info.cartSq, list, listIndex, allYn);
 					} else if (info.soldoutYn == "Y") {		// 품절
-						if (info.goodsStat == "G008_70" || info.ordCanQty < info.minOrdQty) {		// 상품 상태가 품절이거나 주문 가능 수량이 최소주문수량보다 적을경우
+						if (info.goodsStat == "G008_70") {		// 상품 상태가 품절이거나 주문 가능 수량이 최소주문수량보다 적을경우
 							let message = info.goodsNm + " 상품은 품절입니다. 제외하고 계속 주문하시겠습니까?";
 							fnRemoveCartSqConfirm(message, cartSqArr, info.cartSq, list, listIndex, allYn)
-						} else if (info.goodsQty < info.ordCanQty) {		// 주문 가능 수량이 0일경우
-							let message = info.goodsNm + "의 " + info.colorNm + " 옵션이 품절되었습니다. 제외하고 계속 주문하시겠습니까?";
+						} else if (info.goodsQty < info.ordCanQty || info.ordCanQty < info.minOrdQty) {		// 주문 가능 수량이 0일경우
+							let message = info.goodsNm + "의 " + info.colorNm + "/" + info.optCd2 + "이 품절되었습니다. 제외하고 계속 주문하시겠습니까?";
 							fnRemoveCartSqConfirm(message, cartSqArr, info.cartSq, list, listIndex, allYn)
 						} else if (listIndex < list.length) {
 							// 혹시 else일 경우
@@ -1076,8 +1076,13 @@
 						if (index == 1) { //button1 일때 처리문
 							orderFlag = false; return false;
 						} else {	//button2 일때 처리문
-							fnCheckOffCartSqArr(cartSqArr, info.cartSq);
-							fnOrderValidation(list, listIndex, cartSqArr, allYn);
+							if(cartSqArr.length > 1) {
+								fnCheckOffCartSqArr(cartSqArr, cartSq);
+								fnOrderValidation(list, listIndex, cartSqArr, allYn);
+							} else {
+								mcxDialog.alert("주문 가능한 상품이 없습니다.");
+								orderFlag = false; return false;
+							}
 						}
 					}
 				});
@@ -1092,10 +1097,19 @@
 				});
 
 				// 장바구니 선택된것 삭제 > cartSq 0으로 변경
+				let cartSqLength = 0;
 				for (let i = 0; i < cartSqArr.length; i++) {
 					if (cartSqArr[i] == cartSq) {
 						cartSqArr[i] = 0;
 					}
+					if(cartSqArr[i] > 0) {
+						cartSqLength++;
+					}
+				}
+
+				if(cartSqLength < 1) {
+					mcxDialog.alert("주문 가능한 상품이 없습니다.");
+					orderFlag = false; return false;
 				}
 			}
 

+ 2 - 0
src/main/webapp/WEB-INF/views/mob/common/layout/MypageLayoutMob.html

@@ -22,6 +22,8 @@
 		<th:block th:replace="~{mob/common/fragments/FooterMob :: footer}"></th:block>
 
 		<th:block th:replace="~{mob/common/fragments/ScriptsMob :: scripts}"></th:block>
+		
+		<script th:src="@{'/biz/mypage.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/mypage.js"></script>
 
 <script th:inline="javascript">
 /*<![CDATA[*/

+ 12 - 10
src/main/webapp/WEB-INF/views/mob/customer/IdFindFormMob.html

@@ -138,8 +138,10 @@
 								</li>
 							</ul>
 						</div>
-						<div class="ui_row mt20">
-							<button type="button" class="btn btn_dark" onclick="cfnGoToPage(_PAGE_LOGIN);">로그인 하기</button>
+						<div class="btn_group_flex">
+							<div>
+								<button type="button" class="btn btn_dark btn_block" onclick="cfnGoToPage(_PAGE_LOGIN);">로그인 하기</button>
+							</div>
 						</div>
 					</div>
 				</div>
@@ -154,14 +156,14 @@
 								정확한 확인을 위해 휴대폰 인증/아이핀 인증을 통한<br>아이디 찾기를 진행해 주세요.
 							</p>
 						</div>
-						<div class="btn_group_block btn_group_md ui_row">
-							<div class="ui_col_6">
-								<button type="button" class="btn btn_primary" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+						<div class="btn_group_flex">
+							<div>
+								<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
 									<span>회원가입</span>
 								</button>
 							</div>
-							<div class="ui_col_6">
-								<button type="button" class="btn btn_dark" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
+							<div>
+								<button type="button" class="btn btn_dark btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
 									<span>다시 찾기</span>
 								</button>
 							</div>
@@ -179,9 +181,9 @@
 								<span class="c_primary">STYLE24의 새로운 가족이 되어 주세요!</span>
 							</p>
 						</div>
-						<div class="btn_group_block btn_group_md ui_row">
-							<div class="ui_col_12">
-								<button type="button" class="btn btn_primary" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+						<div class="btn_group_flex">
+							<div>
+								<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
 									<span>회원가입</span>
 								</button>
 							</div>

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html

@@ -48,17 +48,17 @@
 					<ul class="login_utill">
 						<li class="lu_kakao">
 							<a href="javascript:void(0);" onclick="cfnLoginKakao();">
-								<div class="ico"></div>카카오로<br>시작하기
+								<div class="ico"></div>카카오
 							</a>
 						</li>
 						<li class="lu_naver">
 							<a href="javascript:void(0);" onclick="cfnLoginNaver();">
-								<div class="ico"></div>네이버로<br>시작하기
+								<div class="ico"></div>네이버
 							</a>
 						</li>
 						<li class="lu_yes24">
 							<a href="javascript:void(0);" onclick="cfnLoginYes24();">
-								<div class="ico"></div>YES24로<br>시작하기
+								<div class="ico"></div>YES24
 							</a>
 						</li>
 					</ul>

+ 14 - 10
src/main/webapp/WEB-INF/views/mob/customer/PasswordFindFormMob.html

@@ -32,8 +32,12 @@
             <div class="inner">
                 <div class="registration_nav">
                     <ul class="tab_btn">
-                        <li onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</li>
-                        <li class="active">비밀번호찾기</li>
+                        <li>
+                            <a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a>
+                        </li>
+                        <li class="active">
+                            <a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a>
+                        </li>
                     </ul>
                 </div>
                 <div class="registration_tap">
@@ -139,14 +143,14 @@
                                 정확한 확인을 위해 휴대폰 인증/아이핀 인증을 통한<br>아이디 찾기를 진행해 주세요.
                             </p>
                         </div>
-                        <div class="btn_group_block btn_group_md ui_row">
-                            <div class="ui_col_6">
-                                <button type="button" class="btn btn_primary" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+                        <div class="btn_group_flex">
+                            <div>
+                                <button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
                                     <span>회원가입</span>
                                 </button>
                             </div>
-                            <div class="ui_col_6">
-                                <button type="button" class="btn btn_dark" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">
+                            <div>
+                                <button type="button" class="btn btn_dark btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">
                                     <span>다시 찾기</span>
                                 </button>
                             </div>
@@ -164,9 +168,9 @@
                                 <span class="c_primary">STYLE24의 새로운 가족이 되어 주세요!</span>
                             </p>
                         </div>
-                        <div class="btn_group_block btn_group_md ui_row">
-                            <div class="ui_col_12">
-                                <button type="button" class="btn btn_primary" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+                        <div class="btn_group_flex">
+                            <div>
+                                <button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
                                     <span>회원가입</span>
                                 </button>
                             </div>

+ 2 - 1
src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html

@@ -790,7 +790,8 @@
 	// 컨텐츠 호출
 	$(document).ready(function() {
 		setHtop();
-		$(".it_nav .btn").eq(0).trigger('click');
+		let randomNum = Math.floor( ( Math.random() * 4 ) );
+		$(".it_nav .btn").eq(randomNum).trigger('click');
 
 		// 몰메인 <br> 태그
 		$('.mainTitle').each(function (){

+ 0 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html

@@ -577,7 +577,6 @@
 	}
 	
 	var fnDrawInfiniteScrollData = function(result, pageNum){
-
 		if (result.dataList != null && result.dataList.length > 0) {
 			var htm = fnCreateGoodsReviewList(result);
 			gagaInfiniteScroll.draw(htm);

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

@@ -0,0 +1,891 @@
+<!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  : MypageOrderDetailFormMob.html
+ * @desc    : 마이페이지 > 주문상세 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.22   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+<main role="" id="" class="container my">
+	<section class="content my_order">
+		<div class="inner wide bg_beige">
+			<div class="order_number">
+				<dl class="clear">
+					<dt>주문번호</dt>
+					<dd  th:text="${ordNo}"></dd>
+				</dl>
+				<a href="javascript:void(0);" class="delete" onclick="fnDeleteOrder()">주문 내역 삭제</a>
+			</div>
+		</div>
+		<div class="inner">
+			<th:block th:if="${orderList}" th:each="order, status : ${orderList}">
+				<div class="part_goods">
+					<div class="goods_top">
+						<th:block th:unless="${order.giftPackYn == 'Y'}">
+							<div class="goods_date">주문일<span class="date" th:text="${order.ordDt}"></span></div>
+						</th:block>
+						<th:block th:if="${order.giftPackYn == 'Y'}">
+							<div class="goods_date">선물일<span class="date" th:text="${order.ordDt}"></span></div>
+						</th:block>
+						<th:block th:if="${order.allCanYn == 'Y' and order.ordReqChgQty == 0}">
+							<a href="javascript:void(0);" id="btn_all_delete" class="delete_btn" onclick="fnAllCancel();">주문 전체 취소</a> <!-- 210409_추가 : btn_all_delete id 추가 -->
+						</th:block>
+						<!--<a href="javascript:;" id="btn_all_confirm" class="purchase_btn">전체 구매 확정</a> 전체 구매확정 버튼. --> <!-- 210409_추가 : btn_all_confirm id 추가 -->
+					</div>
+					
+					<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<div class="goods_section">
+							<div class="goods_status">
+								<!-- 선뭃주문 -->
+								<th:block th:if="${order.giftPackYn == 'Y'}">
+									<p class="dlvr_staus" th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">주소 입력 대기중</p>
+									<p class="dlvr_staus" th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">선물 완료</p>
+									<p class="dlvr_staus" th:if="${ordDtl.ordDtlStat == 'G013_98' or ordDtl.ordDtlStat == 'G013_99'}">선물 취소</p>
+								</th:block>
+								<!-- //선뭃주문 -->
+								<!-- 일반주문 -->
+								<th:block th:unless="${order.giftPackYn == 'Y'}">
+									<p class="dlvr_staus" th:text="${ordDtl.ordDtlStatNm}"></p>
+								</th:block>
+								<!-- //일반주문 -->
+							</div>
+							<div class="goods_detail">
+								<input type="hidden" name="ordDtlNoArr" th:value="${ordDtl.ordDtlNo}"/>
+								<input type="hidden" name="cnclRtnReqQtyArr" th:value="${ordDtl.ordQty - ordDtl.cnclRtnQty}"/>
+														
+								<a href="javascript:void(0);" onclick="fnGoToGoodsDetail(this)">
+									<div class="thumb_box">
+										<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+									</div>
+									<div class="info_box">
+										<div class="od_name">
+											<div class="brand">
+												<span th:text="${ordDtl.brandNm}"></span>
+												<div class="badge_wrap">
+													<span class="brand" th:text="${ordDtl.brandNm}"></span>
+													<em class="order_badge" th:if="${ordDtl.shotDelvYn == 'Y'}">총알배송</em>
+													<em class="order_badge" th:if="${ordDtl.shotDelvYn == 'N' and ordDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
+													<em class="order_badge" th:if="${ordDtl.selfGoodsYn == 'N'}">업체직배송</em>
+												</div>
+											</div>
+											<div class="name" th:text="${ordDtl.goodsNm}"></div>
+										</div>
+										<div class="od_opt">
+											<div class="option">
+												<!-- 세트상품 -->
+												<th:block th:if="${ordDtl.goodsType == 'G056_S'}">
+													<th:block th:each="option, status : ${ordDtl.colorNmArr}">
+														<em th:text="${option}"></em>
+														<em th:text="${ordDtl.optCd2Arr[status.index]}"></em>
+													</th:block>
+												</th:block>
+												<!-- //세트상품 -->
+												<!-- 일반상품 -->
+												<th:block th:unless="${ordDtl.goodsType == 'G056_S'}">
+													<th:block th:each="option, status : ${ordDtl.colorNmArr}">
+														<em th:text="${ordDtl.colorNm}"></em>
+														<em th:text="${ordDtl.optCd2}"></em>
+													</th:block>
+												</th:block>
+												<!-- //일반상품 -->
+											</div>
+										</div>
+										<div class="od_calc">
+											<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>P 적립예정</p>
+											<p class="sale_price">
+												<del>
+													<em th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}">95,000</em>원
+												</del>
+											</p>
+											<p class="price">
+												<span class="selling_price">
+													<em th:text="${#numbers.formatInteger(ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt, 1, 'COMMA')}"></em>원
+												</span>
+												<span class="count">
+													<em th:text="${ordDtl.ordQty - ordDtl.cnclRtnQty}"></em>개
+												</span>
+											</p>
+										</div>
+									</div>
+								</a>
+							</div>
+							
+							<!-- 주문상태별 버튼기능 정의 -->
+							<!-- 일반주문 -->
+							<th:block th:unless="${ordDtl.giftPackYn} == 'Y'">
+								<!-- 입금대기, 결제완료, 상품준비중, 출고처지정 : 주문취소 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
+									<div class="goods_btn_wrap btn_group_flex">
+										<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+									</div>
+								</th:block>
+								<!-- //입금대기, 결제완료, 상품준비중, 출고처지정 : 주문취소 -->
+								
+								<!-- 배송준비중-->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_40'">
+								</th:block>
+								<!-- //배송준비중-->
+								
+								<!-- 배송중 (교환가능, 반품가능) -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55'">
+									<!-- 교환가능, 반품가능 -->
+									<th:block th:if="${ordDtl.changeableYn} == 'Y' or ${ordDtl.returnableYn} == 'Y'">
+										<div class="goods_btn_wrap btn_group_flex">
+											<th:block th:if="${ordDtl.changeableYn} == 'Y'">
+												<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+											</th:block>
+											<th:block th:if="${ordDtl.returnableYn} == 'Y'">
+												<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+											</th:block>
+										</div>
+									</th:block>
+									<!-- //교환가능, 반품가능 -->
+									
+									<!-- 리뷰사용가능, 리뷰등록전일때 -->
+									<div class="goods_btn_wrap btn_group_flex">
+										<div><button type="button" class="btn btn_default btn_delv_sch"><span>배송 조회</span></button></div>
+										<!-- 리뷰사용가능, 리뷰등록전일때 -->
+										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+										</th:block>
+										<!-- //리뷰사용가능, 리뷰등록전일때 -->
+									</div>
+									<!-- //리뷰사용가능, 리뷰등록전일때 -->
+								</th:block>
+								<!-- //배송중 (교환가능, 반품가능) -->
+								
+								<!-- 배송완료 (교환가능, 반품가능) -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_60'">
+									<div class="goods_btn_wrap btn_group_flex">
+										<!-- 교환가능, 반품가능 -->
+										<th:block th:if="${ordDtl.changeableYn} == 'Y'">
+											<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+										</th:block>
+										<th:block th:if="${ordDtl.returnableYn} == 'Y'">
+											<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+										</th:block>
+										<!-- //교환가능, 반품가능 -->
+										
+										<div><button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary"><span>구매 확정</span></button></div>
+									</div>
+									<div class="goods_btn_wrap btn_group_flex">
+										<!-- 교환불가, 반품불가 -->
+										<th:block th:if="${ordDtl.changeableYn} == 'N' or ${ordDtl.returnableYn} == 'N'">
+											<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+										</th:block>
+										<!-- //교환불가, 반품불가 -->
+										
+										<!-- 리뷰사용가능, 리뷰등록전일때 -->
+										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+										</th:block>
+										<!-- //리뷰사용가능, 리뷰등록전일때 -->
+									</div>
+								</th:block>
+								<!-- //배송완료 (교환가능, 반품가능) -->
+								
+								<!-- 구매확정 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
+									<div class="goods_btn_wrap btn_group_flex">
+										<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+										
+										<!-- 리뷰사용가능, 리뷰등록전일때 -->
+										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+										</th:block>
+										<!-- //리뷰사용가능, 리뷰등록전일때 -->
+									</div>
+								</th:block>
+								<!-- //구매확정 -->
+							</th:block>
+							<!-- //일반주문 -->
+							<!-- 선물주문 -->
+							<th:block th:if="${ordDtl.giftPackYn} == 'Y'">
+								<!-- 배송지등록전 -->
+								<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
+									<div><button type="button" class="btn btn_primary btn_sms_send"><span>SMS 재발송</span></button></div>
+								</th:block>
+								<!-- //배송지등록전 -->
+								
+								<!-- 배송지등록후 (입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
+									<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+								</th:block>
+								<!-- //배송지등록후 (입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
+								
+								<!-- 배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60' or ${ordDtl.ordDtlStat} == 'G013_70'">
+									<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
+										<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
+										<!-- 리뷰사용가능, 리뷰등록전일때 -->
+										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null and ${ordDtl.ordDtlStat} == 'G013_70'">
+											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+										</th:block>
+										<!-- //리뷰사용가능, 리뷰등록전일때 -->
+									</th:block>
+								</th:block>
+								<!-- //배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
+							</th:block>
+							<!-- //선물주문 -->
+							<!-- //주문상태별 버튼기능 정의 -->
+							
+							<!-- 주문상태별 문구정보 정의 -->
+							<th:block th:unless="${ordDtl.giftPackYn} == 'Y'">
+								<div class="goods_alert">
+									<!-- 배송중, 배송완료 상태 교환, 반품 가능 상태 체크 -->
+									<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60'">
+										<!-- 교환불가능, 반품불가능 -->
+										<th:block th:if="${ordDtl.changeableYn} == 'N' and ${ordDtl.returnableYn} == 'N'">
+											<p class="cf_txt cf_desc">해당 상품은 교환/반품이 불가능한 상품입니다.<br>문의사항은 1:1 문의를 이용해 주세요.</p>
+										</th:block>
+										<!-- //교환불가능, 반품불가능 -->
+										
+										<!-- 교환불가능 -->
+										<th:block th:if="${ordDtl.changeableYn} == 'N'">
+											<p class="cf_txt cf_desc">해당 상품은 교환이 불가능한 상품입니다.<br>문의사항은 1:1 문의를 이용해 주세요.</p>
+										</th:block>
+										<!-- //교환불가능 -->
+										
+										<!-- 반품불가능 -->
+										<th:block th:if="${ordDtl.returnableYn} == 'N'">
+											<p class="cf_txt cf_desc">해당 상품은 교환이 불가능한 상품입니다.<br>문의사항은 1:1 문의를 이용해 주세요.</p>
+										</th:block>
+										<!-- //반품불가능 -->
+										
+									</th:block>
+									<!-- //배송중, 배송완료 상태 -->
+								</div>
+								
+								<!-- 주문접수 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10'">
+									<div class="goods_txt">
+										<p class="cf_txt cf_desc">주문 완료 / 결제를 기다리고 있습니다.</p>
+										<th:block th:if="${ordDtl.delvResDt} != null">
+											<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+										</th:block>
+									</div>
+								</th:block>
+								<!-- //주문접수 -->
+								
+								<!-- 결제완료, 예약배송상품 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10'">
+									<th:block th:if="${ordDtl.delvResDt} != null">
+										<div class="goods_txt">
+											<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+										</div>
+									</th:block>
+								</th:block>
+								<!-- //결제완료, 예약배송상품 -->
+								
+								<!-- 상품준비중 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_30'">
+									<div class="goods_txt">
+										<p class="cf_txt cf_desc">배송할 상품을 준비 중입니다.</p>
+										<th:block th:if="${ordDtl.delvResDt} != null">
+											<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+										</th:block>
+									</div>
+								</th:block>
+								<!-- //상품준비중 -->
+								
+								<!-- 배송준비중 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_40'">
+									<div class="goods_txt">
+										<p class="cf_txt cf_desc">상품 준비가 완료되어 곧 배송될 예정입니다.</p>
+										<th:block th:if="${ordDtl.delvResDt} != null">
+											<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+										</th:block>
+									</div>
+								</th:block>
+								<!-- //배송준비중 -->
+								
+								<!-- 배송완료 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_60'">
+									<div class="goods_txt">
+										<p class="cf_txt cf_desc">15일 후 자동으로 구매확정됩니다.</p>
+									</div>
+								</th:block>
+								<!-- //배송완료 -->
+								
+								<!-- 구매확정 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
+									<!-- 리뷰사용가능, 리뷰등록전일때 -->
+									<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+										<div class="goods_txt">
+											<p class="cf_txt cf_desc">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다</p>
+										</div>
+									</th:block>
+									<!-- //리뷰사용가능, 리뷰등록전일때 -->
+								</th:block>
+								<!-- //구매확정 -->
+							</th:block>
+							
+							<!-- 선물배송일때 -->
+							<th:block th:if="${ordDtl.giftPackYn} == 'Y'">
+								<div class="goods_txt">
+									<!-- 배송지등록전 -->
+									<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
+										<p class="cf_txt cf_desc"><span th:text="|‘${ordDtl.recipNm}’|"></span>님 주소를 입력하기 전입니다.</p>
+										<p class="period">입력기한 <span th:text="${ordDtl.giftLimitDt}"></span></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'">
+										<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
+											<p class="cf_txt cf_desc"><span th:text="|‘${ordDtl.recipNm}’|"></span>님께 선물이 발송되었습니다.</p>
+										</th:block>
+									</th:block>
+									<!-- //배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
+									
+									<!-- 선물 취소 -->
+									<th:block th:if="${ordDtl.ordDtlStat} == 'G013_98' and ${ordDtl.ordDtlStat} == 'G013_99'">
+										<p class="cf_txt cf_desc">주소 입력 기한이 경과되어 선물이 취소 되었습니다.</p>
+									</th:block>
+									<!-- //선물 취소 -->
+								</div>
+							</th:block>
+							<!-- //선물배송일때 -->
+							<!-- //주문상태별 문구정보 정의 -->
+							
+							<!-- 사은품 영역 -->
+							<th:block th:if="${order.freeGiftList != null and #lists.size(order.freeGiftList) > 0}">
+								<div class="goods_gift">
+									<div class="gift_wrap">
+										<div class="title">사은품</div>
+										<div class="li_gift">
+											<ul>
+												<th:block th:each="freeGift , j : ${order.freeGiftList}">
+													<li>
+														<span class="gift_name" th:text="${freeGift.goodsNm}"></span> 
+														<th:block th:if="${freeGift.usePoint} > 0">
+															<span class="deduct_p" th:text="|(-${freeGift.usePoint.addComma()}P)|"></span>
+														</th:block>
+													</li>
+												</th:block>
+											</ul>
+										</div>
+									</div>
+								</div>
+							</th:block>
+							<!-- //사은품 영역 -->
+						</div>
+					</th:block>
+				</div>
+				<input type="hidden" name="accountNo" 	th:value="${order.oneData.accountNo}"/>
+				<input type="hidden" name="accountNm" 	th:value="${order.oneData.accountNm}"/>
+				<input type="hidden" name="bankCd" 		th:value="${order.oneData.bankCd}"/>
+				<input type="hidden" name="delvMemo" 	th:value="${deliveryAddrInfo.delvMemo}"/>
+			</th:block>
+		</div>
+		
+		<!-- 무통장입금정보 -->
+		<th:block th:if="${paymentInfo.payMeans == 'G014_20'}">
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>무통장 입금 정보</h3>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="107">
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<th>은행명/명의자</th>
+								<td><div><span th:text="${paymentInfo.vaBank}"></span>/<span th:text="|(${paymentInfo.vaNm})|"></span></div></td>
+							</tr>
+							<tr>
+								<th>계좌번호</th>
+								<td><div><span th:text="${paymentInfo.vaNo}"></span></div></td>
+							</tr>
+							<tr>
+								<th>입금기한</th>
+								<td><div><span th:text="${paymentInfo.vaDeadlineYmd}"></span><span th:text="${paymentInfo.vaDeadlineHms}"></span> 까지</div></td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</div>
+		</th:block>
+		<!-- //무통장입금정보 -->
+		
+		<div class="inner wide">
+			<!-- 폴딩리스트 -->
+			<div class="ui_row">
+				<div class="foldGroup customerfold">
+					<ul>
+						<li>
+							<div class="fold_head">
+								<a href="javascript:void(0)">
+									<div>
+										<div class="fold_tit">
+											<div class="lap2"><span >주문고객</span></div>
+											<span class="fold_txt" th:text="${orderInfo.ordNm}"></span>
+										</div>
+									</div>
+								</a>
+							</div>
+							<div class="fold_cont">
+								<div class="customer_info">
+									<dl>
+										<div>
+											<dt><span class="sr-only">주문자명</span></dt>
+											<dd th:text="${orderInfo.ordNm}"></dd>
+										</div>
+										<div>
+											<dt><span class="sr-only">이메일</span></dt>
+											<dd th:text="${orderInfo.ordEmail}"></dd>
+										</div>
+										<div>
+											<dt><span class="sr-only">휴대폰 번호</span></dt>
+											<dd th:text="${orderInfo.ordPhnno}"></dd>
+										</div>
+									</dl>
+								</div>
+							</div>
+						</li>
+					</ul>
+				</div>
+			</div>
+			<!-- 폴딩리스트 -->
+		</div>
+		
+		<div class="inner wide">
+			<!-- 폴딩리스트 -->
+			<div class="ui_row">
+				<div class="foldGroup shipfold">
+					<ul>
+						<li>
+							<div class="fold_head">
+								<a href="javascript:void(0)">
+									<div>
+										<div class="fold_tit">
+											<div class="lap2"><span>배송지 정보</span></div>
+											<span class="fold_txt recipNm" th:text="${deliveryAddrInfo.recipNm}"></span>
+										</div>
+									</div>
+								</a>
+							</div>
+							<div class="fold_cont">
+								<div class="ship_info ship_edit">
+									<!--  배송비정보변경가능 -->
+									<th:block th:if="${allCanYn == 'Y'}">
+										<button type="button" id="btn_adrsChange_pop" class="btn_popup">
+											<span>배송지 변경</span>
+										</button>
+									</th:block>
+									<!--  //배송비정보변경가능 -->
+									<dl>
+										<div class="company">
+											<dt><span class="sr-only">배송지명</span></dt>
+											<dd>
+												<span th:text="${deliveryAddrInfo.recipNm}" id="recipNm"></span>
+												<div class="badge_wrap">
+													<th:block th:if="${deliveryAddrInfo.defaultYn} == 'Y'">
+														<em class="order_badge defaultYn">기본 배송지</em>
+													</th:block>
+													<em class="order_badge order_bullet_badge" style="display:none">총알배송</em>
+												</div>
+											</dd>
+										</div>
+										<div class="addr">
+											<dt><span class="sr-only">배송주소</span></dt>
+											<dd th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|" id="recipAddr"></dd>
+										</div>
+										<div class="phone">
+											<dt><span class="sr-only">휴대폰 번호</span></dt>
+											<dd th:text="${deliveryAddrInfo.recipPhnno}" id="recipPhnno"></dd>
+										</div>
+										<!--  배송메모정보변경가능 -->
+										<th:block th:if="${allCanYn == 'Y'}">
+											<div class="ship_request ship_select">
+												<span>배송요청 사항</span>
+												<div class="ship_option">
+													<div class="form_field">
+														<div class="select_custom delivery_list"> <!-- 비활성화시 disabled 추가 -->
+															<div class="combo">
+																<div class="select" th:text="${deliveryAddrInfo.delvMemo}">선택</div>
+																<ul class="list">
+																	<li>문 앞</li> 
+																	<li>직접 받고 부재 시 문 앞</li>
+																	<li>경비실</li> 
+																	<li>택배함</li>
+																	<li class="select_etc">기타사항</li>
+																</ul>
+															</div>
+														</div>
+													</div>
+												</div>
+											</div>
+											<div class="ship_etc">
+												<div class="form_text etc">
+													<input type="text" name="delvMemoText" placeholder="보관 장소만 입력 (필수)" maxlength="30" disabled>
+													<p class="desc_txt">보관 장소 외 다른 내용 입력시 통보 없이 삭제 될 수 있습니다.</p>
+												</div>
+											</div>
+										</th:block>
+										<!--  //배송메모정보변경가능 -->
+										<!--  배송메모정보변경불가 -->
+										<th:block th:unless="${allCanYn == 'Y'}">
+											<div class="ship_request">
+												<dt>배송요청 사항</dt>
+												<dd th:text="${deliveryAddrInfo.delvMemo}"></dd>
+											</div>
+										</th:block>
+										<!--  //배송메모정보변경불가 -->
+									</dl>
+								</div>
+							</div>
+						</li>
+					</ul>
+				</div>
+			</div>
+			<!-- 폴딩리스트 -->
+		</div>
+		
+		<th:block th:if="${orderInfo.giftPackYn} == 'Y'">
+			<div class="inner">
+				<div class="gift_wrap">
+					<h3>선물 받으실 분</h3>
+					<div class="gift_con">
+						<div class="gift_info">
+							<span th:text="${orderInfo.recipNm}"></span> / <span th:text="${orderInfo.recipPhnno}"></span>
+						</div>
+						<div class="message">
+							<p class="gift_tit">선물 메세지</p>
+							<div class="content">
+								<p th:text="${orderInfo.giftMsg}" id="giftMsg"></p>
+							</div> 
+						</div>
+					</div>
+				</div>
+			</div>
+		</th:block>
+		
+		<div class="inner">
+			<div class="tbl_wrap pay_wrap">
+				<div class="tbl_tit"> 
+					<h3>결제 정보</h3>
+					<strong class="pay"><span th:text="${#numbers.formatInteger(orderAmtInfo.ordAmt - orderAmtInfo.cnclRtnAmt + orderAmtInfo.realDelvAmt, 1, 'COMMA')}"></span>원</strong>
+				</div>
+				<div class="tbl type1">
+					<table>
+						<colgroup>
+							<col width="227">
+							<col width="*">
+						</colgroup>   
+						<tr>
+							<td>
+								<dl>
+									<div>
+										<dt>총주문금액(상품금액+배송비)</dt>
+										<dd><div><span th:text="${#numbers.formatInteger(orderAmtInfo.ordAmt - orderAmtInfo.cnclRtnAmt + orderAmtInfo.realDelvAmt, 1, 'COMMA')}"></span>원</div></dd>
+									</div>
+									<th:block th:if="${orderAmtInfo.cpn1DcAmt} > 0">
+										<div>
+											<dt>상품할인(즉시할인)</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.cpn1DcAmt, 1, 'COMMA')}|"></span>원</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${orderAmtInfo.tmtb1DcAmt} + ${orderAmtInfo.tmtb2DcAmt} > 0">
+										<div>
+											<dt>다다익선 할인</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.tmtb1DcAmt + orderAmtInfo.tmtb2DcAmt, 1, 'COMMA')}|"></span>원</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${orderAmtInfo.cartCpnDcAmt} + ${orderAmtInfo.goodsCpnDcAmt} + ${orderAmtInfo.delvCpnDcAmt} > 0">
+										<div>
+											<dt>쿠폰할인</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.cartCpnDcAmt + orderAmtInfo.goodsCpnDcAmt + orderAmtInfo.delvCpnDcAmt, 1, 'COMMA')}|"></span>원</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${orderAmtInfo.prePntDcAmt} > 0">
+										<div>
+											<dt>선 포인트 사용</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.prePntDcAmt, 1, 'COMMA')}|"></span>P</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${orderAmtInfo.pntDcAmt} > 0">
+										<div>
+											<dt>포인트 사용</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.pntDcAmt, 1, 'COMMA')}|"></span>P</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${orderAmtInfo.gfcdUseAmt} > 0">
+										<div>
+											<dt>상품권 사용</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.gfcdUseAmt, 1, 'COMMA')}|"></span>원</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${orderAmtInfo.npayPntAmt} > 0">
+										<div>
+											<dt>마일리지 사용</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(orderAmtInfo.npayPntAmt, 1, 'COMMA')}|"></span>원</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${paymentInfo.pgCpnAmt} > 0">
+										<div>
+											<dt>제휴 할인</dt>
+											<dd><div><span th:text="|- ${#numbers.formatInteger(paymentInfo.pgCpnAmt, 1, 'COMMA')}|"></span>원</div></dd>
+										</div>
+									</th:block>
+									<th:block th:if="${orderAmtInfo.savePntAmt} > 0">
+										<div>
+											<dt>적립예정 포인트</dt>
+											<dd><div><span th:text="|${#numbers.formatInteger(orderAmtInfo.savePntAmt, 1, 'COMMA')}P|">3000</span>P</div></dd>
+										</div>
+									</th:block>
+									<div>
+										<dt>결제수단</dt>
+										<dd>
+											<div>
+												<span th:if="${paymentInfo.pgGb == 'NAVER'}">네이버 페이</span>
+												<span th:if="${paymentInfo.pgGb == 'KAKAO'}">카카오 페이</span>
+												<span th:if="${paymentInfo.pgGb == 'PAYCO'}">PAYCO</span>
+												<span th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_10'}">실시간계좌이체</span>
+												<span th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_20'}">무통장입금</span>
+												<span th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_30'}" th:text="|${paymentInfo.cardNm}/${paymentInfo.cardMips}|"></span>
+												<span th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_60'}">휴대폰결제</span>
+											</div>
+										</dd>
+									</div>
+								</dl>
+							</td>
+						</tr>
+					</table>
+					<button type="button" class="btn btn_default btn_sm" th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_30'}" onclick="fnReceipt('card')"><span>신용카드 전표</span></button>
+					<button type="button" class="btn btn_default btn_sm" th:if="${paymentInfo.pgGb == 'KCP' and not #strings.isEmpty(paymentInfo.cashAuthNo) and (paymentInfo.payMeans == 'G014_10' or paymentInfo.payMeans == 'G014_20')}" onclick="fnReceipt('cash')"><span>현금 영수증</span></button>
+					<!-- 
+					<button type="button" class="btn btn_default btn_sm" th:if="${orderAmtInfo.gfcdUseAmt > 0 and #strings.isEmpty(paymentInfo.cashAuthNo)}" th:attr="ordNo=${ordNo}" onclick="fnRequestCashReceipt(this);"><span>상품권 현금 영수증 신청</span></button>
+					 -->
+				</div>
+				<!-- 210415_ 추가 : 결제정보 안내 텍스트 추가 -->
+				<p class="txt_ref">NPAY등의 대체결제수단으로 결제 시 해당 결제 플랫폼에서 영수증 확인이 가능합니다.</p>
+			</div>
+			<div class="btn_group btn_group_flex">
+				<div>
+					<button type="button" class="btn btn_dark"><span>확인</span></button>
+				</div>
+			</div>
+		</div>
+	</section>
+</main>
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	let giftMsg				= [[${orderInfo.giftMsg}]];		// 선물메세지
+	let ordNo 				= [[${ordNo}]];
+	var isLogin 			= [[${isLogin}]];
+	let orderList 			= [[${orderList}]];
+	let oneData 			= [[${oneData}]];
+	let paymentInfo 		= [[${paymentInfo}]];
+	let orderAmtInfo 		= [[${orderAmtInfo}]];
+	let deliveryAddrInfo 	= [[${deliveryAddrInfo}]];
+	let kcpReceiptUrl 		= [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+	let jsonObj 			= {};
+	let delvMemo			= [[${deliveryAddrInfo.delvMemo}]];
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(1);
+		
+		// 마이페이지 location 설정
+		fnSetMypageLocation('주문확인/배송조회', '_PAGE_MYPAGE_ORDER_LIST', '주문상세');
+		
+		// 선물메시지
+		if ($("#giftMsg").html() != null) {
+			$("#giftMsg").html(giftMsg.replaceAll("\n", "</br>"));
+		}
+		
+		// 2021.04.22 배송지정보수정
+		var delvMemoArr = ["문 앞", "직접 받고 부재 시 문 앞", "경비실", "택배함"];
+		var tempMemo = true;
+		
+		$(".ship_request .ship_option .delivery_list ul li").removeClass("selected");
+		
+		// 배송요청사항설정
+		for (i=0 ; i<delvMemoArr.length ; i++) {
+			if (delvMemoArr[i] == delvMemo) {
+				tempMemo = false;
+			}
+		}
+
+		// 배송메모설정
+		$(".ship_request .ship_option .delivery_list ul li").each(function(){
+			if (delvMemo == $(this).text()) {
+				$(this).addClass("selected");
+			}
+		});
+		
+		if (tempMemo) {
+			$(".ship_request .ship_option .delivery_list .select").text("기타사항");
+			$("input[name=delvMemoText]").attr("disabled", false);
+			$("input[name=delvMemoText]").val(delvMemo);
+			$(".ship_request .ship_option .delivery_list ul li").eq(4).addClass("selected");
+		}
+		
+		// 콤보박스 
+		var od_delivery_list = new sCombo('.ship_request .ship_option .delivery_list');
+		
+		// 210405_배송요청 사항 기타사항 selected시 기타사항 input 구현
+		$(".ship_request .ship_option .delivery_list ul li").on("click", function(){
+			if ($(".ship_request .ship_option .delivery_list ul .select_etc").hasClass("selected")){
+				$(".ship_etc").show();
+			} else {
+				$(".ship_etc").hide();
+			}
+		});
+	});
+	
+	// 전체취소 버튼 클릭 이벤트
+	var fnAllCancel = function() {
+		// 환불계좌 체크
+		let accountNo = $('#orderDetailForm input[name=accountNo]').val();
+		let accountNm = $('#orderDetailForm input[name=accountNm]').val();
+		let bankCd = $('#orderDetailForm input[name=bankCd]').val();
+
+		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+			let data = {};
+			data.ordNo = oneData.ordNo;
+			data.accountNm = oneData.accountNm;
+			
+			let jsonData = JSON.stringify(data);
+			
+			$.ajax( {
+				type		: "POST",
+				url 		: '/mypage/refund/account/register/popup/form',
+				data		: jsonData,
+				dataType 	: 'html',
+				beforeSend : function(xhr, settings) {
+					xhr.setRequestHeader("AJAX"			, "true");
+					xhr.setRequestHeader('Accept'		, 'application/json');
+					xhr.setRequestHeader('Content-Type'	, 'application/json');
+					gagajf.showProgressbar(true);
+				},
+				success 	: function(result) {
+					$("#refundPop .modal-dialog .modal-content").html(result);
+					$("#refundPop").modal("show");
+				}
+			});
+			
+			return false;
+		}
+
+		mcxDialog.confirm('전체취소 처리하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				// 취소요청 데이터 설정
+				let url = '/mypage/cancel';
+				
+				// 주문상세번호 설정
+				let ordDtlNoArr = [];
+				$.each($('#orderDetailForm input[name=ordDtlNoArr]'), function(idx, item) {
+					ordDtlNoArr.push($(item).val());
+				});
+				
+				// 취소 수량 설정
+				let cnclRtnReqQtyArr = [];
+				$.each($('#orderDetailForm input[name=cnclRtnReqQtyArr]'), function(idx, item) {
+					cnclRtnReqQtyArr.push($(item).val());
+				});
+				
+				// 전체 취소 처리
+				let data = {};
+				data.ordNo = ordNo;
+				data.chgReason = 'G686_10';
+				data.chgReasonNm = '고객변심';
+				data.accountNo = accountNo;
+				data.accountNm = accountNm;
+				data.bankCd = bankCd;
+				data.isCustomer = 'Y';
+				data.reqGbn = 'cnclComplete';
+				data.ordDtlNoArr = ordDtlNoArr;
+				data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
+				
+				let jsonData = JSON.stringify(data);
+				
+				gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+					cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
+				});
+			}
+		});
+	}
+
+	// 배송지 정보 설정
+	var delvAddrSet = function(delvObj) {
+		let delvAddrSq = deliveryAddrInfo.delvAddrSq;
+		let recipNm = delvObj.recipNm;
+		let recipPhnno = delvObj.recipPhnno;
+		let recipZipcode = delvObj.recipZipcode;
+		let recipBaseAddr = delvObj.recipBaseAddr;
+		let recipDtlAddr = delvObj.recipDtlAddr;
+		let delvMemo = delvObj.delvMemo;
+		
+		$('#recipNm').text(recipNm);
+		$('#recipPhnno').text(recipPhnno);
+		$('#recipAddr').text(recipBaseAddr + ' ' + recipDtlAddr);
+		$('#delvMemo').text(delvMemo);
+		
+		let url = '/mypage/change/delvery/addr';
+		let data = {};
+		data.delvAddrSq = delvAddrSq;
+		data.recipNm = recipNm;
+		data.recipPhnno = recipPhnno;
+		data.recipZipcode = recipZipcode;
+		data.recipBaseAddr = recipBaseAddr;
+		data.recipDtlAddr = recipDtlAddr;
+		data.delvMemo = delvMemo;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+		})
+	}
+	
+	// 배송메모 설정
+	var delvMemoSet = function(delvMemoObj) {
+		let url = '/mypage/change/delvery/memo';
+		let delvMemo = delvMemoObj.delvMemo;
+
+		let data = {};
+		data.delvMemo = delvMemo;
+		data.delvAddrSq = oneData.delvAddrSq;
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+		})
+
+		$("#delvMemo").text(delvMemo);
+	}
+
+	// 환불계좌 등록 콜백 처리
+	var fnRegisterAccountCallback = function(result) {
+		// 환불계좌 정보 설정
+		$('#orderDetailForm input[name=accountNo]').val(result.accountNo);
+		$('#orderDetailForm input[name=accountNm]').val(result.accountNm);
+		$('#orderDetailForm input[name=bankCd]').val(result.bankCd);
+		
+		// 반품처리
+		fnReturn();
+	}
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -16,37 +16,134 @@
 <body>
 
 <th:block layout:fragment="content">
+
+<!-- 주문목록조회 -->
+<form id="searchForm" name="searchForm">
+	<input type="hidden" name="pageNo" 		value=1 />
+	<input type="hidden" name="pageSize" 	value=5 />
+	<input type="hidden" name="pageUnit" 	value=10 />
+	<input type="hidden" name="ordDtlStat" 	value="" />
+	<input type="hidden" name="stDate" 		value="" />
+	<input type="hidden" name="edDate" 		value="" />
+	<input type="hidden" name="custNo" 		th:value ="${customerInfo.custNo}"/>
+</form>
+<!-- //주문목록조회 -->
+
+<!-- 교환상세 -->
+<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>
+<!-- //취소상세 -->
+
 <main role="" id="" class="container my">
 	<section class="content my_order">
 		<div class="inner">
 			<div class="order_sort">
-				<a href="javascript:;" class="od_date_btn">최근 1개월</a>
-				<a href="javascript:;" class="od_status_btn">전체</a>
+				<a href="javascript:void(0);" class="od_date_btn">최근 3개월</a>
+				<a href="javascript:void(0);" class="od_status_btn">전체</a>
 			</div>
 		</div>
 		
 		<!-- 주문목록 -->
-		<div class="area_list" id="orderList">
-		</div>
-		<!-- //주문목록 -->
-		
-		
+		<div data-id="layer_infinite_item" >
+			<section id="infiniteContainer">
+				<div id="listBoxOuter">
+					<div class="area_list" id="listBox">
+					</div>
+				</div>
+			</section>
+ 		</div>
+ 		
 	</section>
 </main>
-<!-- 210408_분류 팝업 추가 -->
 
-<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<!-- 기간 선택 팝업 -->
+<div id="odDatePop" class="popup_box odDatePop">
+	<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" onclick="fnSetSearchPeriod(1);" period="1"><span>최근 1개월</span></button>
+				<button type="button" onclick="fnSetSearchPeriod(3);" period="3"><span>최근 3개월</span></button>
+				<button type="button" onclick="fnSetSearchPeriod(6);" period="6"><span>최근 6개월</span></button>
+				<button type="button" onclick="fnSetSearchPeriod(9);" period="9"><span>최근 9개월</span></button>
+				<button type="button" onclick="fnSetSearchPeriod(12);" period="12"><span>최근 12개월</span></button>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //기간 선택 팝업 -->
+<!-- 주문상태 선택 팝업 -->
+<div id="odStatusPop" class="popup_box odStatusPop">
+	<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" code="" class="ordDtlStat on"><span>전체상태</span></button>
+				<th:block th:each="ordDtlStat , i : ${ordDtlStatList}">
+					<button type="button" class="ordDtlStat" th:code="${ordDtlStat.cd}"><span th:text="${ordDtlStat.cdNm}"></span></button>
+				</th:block>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //주문상태 선택 팝업 -->
+
+<!-- <script src="/ux/plugins/jquery/jquery.history.min.js"></script> -->
+<!-- <script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script> -->
+<!-- <script src="/ux/plugins/gaga/gaga.paging.js"></script> -->
+
 <script th:inline="javascript">
 // 변수설정
 var custNo 			= [[${customerInfo.custNo}]];
+var totalCnt		= [[${totalCnt}]];
+var totalPage		= 0;
+var remainList		= 0;
 var jsonObj 		= {};
+var scrollTemp		= true;
 
 // 초기설정
 $(document).ready(function() {
 	
+	// 전체페이지 구하기
+	totalPage 	= parseInt(totalCnt / 10);
+	remainList 	= totalCnt % 10; 
+	
+	// 나머지가 있으면 전체 페이지 + 1
+	if (remainList > 0) {
+		totalPage = totalPage + 1;
+	}
+	
+	// 인피니티스크롤 초기화
+	//fnGoodsReviewInfiniteScrollInit();
+	
 	// AJAX 로드를 위한 변수 설정
 	jsonObj = {
-		"pageNo" 			: 1
+		"pageNo" 			: 0
 		, "pageSize" 		: 5
 		, "pageUnit" 		: 10
 		, "ordDtlStat" 		: ""
@@ -56,21 +153,56 @@ $(document).ready(function() {
 	}
 	// AJAX 변수 설정
 	jsonData = JSON.stringify(jsonObj);
-
-	// 초기주문목로조회
-	fnSearchOrderList(1);
 	
+	// 초기 3개월 조회
+	fnSetSearchPeriod(3);
+	
+	var win = $(window);
+	 
+	// Each time the user scrolls
+	win.scroll(function() {
+		// End of the document reached?
+		if ($(document).height() - win.height() == win.scrollTop()) {
+			if (scrollTemp) {
+				var tempPage 	= parseInt($("#searchForm input[name=pageNo]").val());
+				tempPage 		= tempPage + 1;
+				
+				if (totalPage > tempPage) {
+					scrollTemp = false;
+					fnGetInfiniteScrollDataList(tempPage);
+				}
+			}
+		}
+	});
+	
+	// 주문상세상태코드 셀렉트박스 변경 이벤트
+	$('#odStatusPop .popup_con .button_list .ordDtlStat').on('click', function() {
+		$('#searchForm input[name=ordDtlStat]').val($(this).attr('code'));
+		jsonObj.ordDtlStat = $(this).attr('code');
+		
+		// 상태값 명칭
+		var ordDtlStatNm = $(this).find("span").text();
+		$(".container .my_order .od_status_btn").text(ordDtlStatNm);
+		
+		// 초기화설정
+		fnGetInfiniteScrollDataList(0);
+	});
 });
 
-//주문 목록 조회
-var fnSearchOrderList = function(pageNo) {
-	alert(pageNo);
-	
+// 주문 목록 조회
+var fnGetInfiniteScrollDataList = function(pageNo) {
+
+	// 페이지번호가 없으면 1페이지 설정
 	if (pageNo == null) {
 		pageNo = 1;
 	}
 	
+	// 페이지설정
+	$("#searchForm input[name=pageNo]").val(pageNo);
+	
 	jsonObj.pageNo = pageNo;
+	jsonObj.stDate = $("#searchForm input[name=stDate]").val();
+	jsonObj.edDate = $("#searchForm input[name=edDate]").val();
 	
 	$.ajax( {
 		type		: "POST",
@@ -85,17 +217,134 @@ var fnSearchOrderList = function(pageNo) {
 		},
 		success 	: function(result) {
 			if (result != null) {
-				$("#orderList").css("display", "block");
-				$("#orderList").append(result);
+				$("#listBox").css("display", "block");
+				$("#listBox").append(result);
+				
+				scrollTemp = true;
+				
+				// 인피니티 스크롤 기억기능
+				//gagaInfiniteScroll.draw(result);
+				//gagaInfiniteScroll.draw('not');
+				
 			}
 		}
 	});
+	
+	//$("#searchForm input[name=pageNo]").val(pageNo+1);
+	//gagajf.ajaxFormSubmit("/mypage/order/listInfo2", document.searchForm,  gagaInfiniteScroll.jsonToHtml);
+}
+
+//검색기간 버튼 클릭 이벤트 처리
+var fnSetSearchPeriod = function(period) {
+	let date 		= new Date();
+	let edDate 		= date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+	date.setMonth(date.getMonth() - period);
+	let stDate 		= date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+
+	$('#searchForm input[name=edDate]').val(edDate);
+	$('#searchForm input[name=stDate]').val(stDate);
+	
+	// 리헷
+	$("#listBox").html("");
+	
+	// 초기화설정
+	fnGetInfiniteScrollDataList(0);
+	
+	$("#odDatePop .popup_con button").removeClass("on");
+	
+	// 기간설정
+	$("#odDatePop .popup_con button").each(function() {
+		var tempPeriod = $(this).attr("period");
+		if (tempPeriod == period) {
+			$(this).addClass("on");
+			
+			// 텍스트설정
+			var periodStr = $(this).find("span").text();
+			$(".container .my_order .od_date_btn").text(periodStr);
+		}
+	});
+}
+
+// 2021.04.21 인피니티 스크롤 기능 구현전 추후 수정
+// 인피니트 스크롤 초기화
+/*
+var fnGoodsReviewInfiniteScrollInit = function(){
+	// sessionStorage.removeItem(document.location.href);
+	History.replaceState(null, null);
+	gagaInfiniteScroll.pageStatus = {
+			  pageNum 			: []      // [0,1,2...] 로드된 페이지 (Array)
+			, loadPage 			: 0      // 로드할 페이지
+			, loadAlign 		: 'not' // 로드 상태(prev, next, not)
+			, historyScroll 	: 0 //
+			, nowPage 			: null    // 현재 페이지
+			, pageUrl 			: {       // page url
+				
+			}
+	}
+	
+	//History 초기화
+	$("#listBox").html("");
+}
+
+var fnDrawInfiniteScrollData = function (result){
+	let totalCnt 								= result.totalCnt;
+	gagaInfiniteScroll.pageStatus.totalCount 	= result.totalCnt;
+	
+	var htm = fnCreateGoodsList(result);
+	gagaInfiniteScroll.draw(htm);
 }
 
+$(function() { gagaInfiniteScroll.getHistory(); });
+*/
+</script>
 
+<!-- 210408_스크립트 추가 -->
+<script>
+	$(document).ready(function(){
+		$(document).on('click','.popup_box .button_list button',function(){
+			$('.popup_box .button_list button').removeClass('on');
+			$(this).addClass('on');
+		})
+	});
 
+	//기간 선택 팝업
+	$(document).on("click", ".order_sort .od_date_btn", function(){
+		$('#odDatePop').show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+	});
 
+	//주문상태 선택 팝업
+	$(document).on("click", ".order_sort .od_status_btn", function(){
+		$('#odStatusPop').show().addClass("active");
+		$("body").css({"overflow":"hidden"});
+	});
+
+	//팝업_닫기
+	$('.popup_close').on("click",function(){
+		$('.popup_box').hide().removeClass('active');
+		$("body").css({"overflow":"visible"});
+	});
+
+	/* 210409_추가 : alert 모음 */
+	$(document).on("click", "#btn_purchase_confirm", function(){
+		mcxDialog.confirm("구매확정 후에는 반품/교환이 불가합니다. 구매확정하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",  // Confirmation button text
+			sureBtnClick: function() {  // Confirm button click callback
+				alert("9,999P가 적립되었습니다.");
+			}
+		});
+	});
+
+	$(document).on("click", "#btn_sms_alert", function(){
+		mcxDialog.alert("SMS로 선물내역을 다시 전송하였습니다.", { 
+				//alert("선물하기 SMS를 조금 전 다시 발송하였습니다. 잠시 후 다시 시도해주세요."); : SMS 발송한지 10분이 지나지 않았을 경우
+			sureBtnText: "닫기",  
+		});
+	});
+	/* //210409_추가 : alert 모음 */
 </script>
+<!-- //210408_스크립트 추가 -->
 </th:block>
 </body>
 </html>

+ 359 - 40
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html

@@ -1,54 +1,373 @@
 <div class="inner">
 	<div class="part_goods">
-		<div class="goods_top">
-			<div class="goods_date">주문일<span class="date">2020.10.25</span></div>
-			<a href="javascript:;" class="detail_btn">상세보기</a>
-		</div>
 		
-		<!-- 주문 접수 -->
-		<div class="goods_section">
-			<div class="goods_status">
-				<p class="dlvr_staus">주문 접수</p>
+		<th:block th:each="order , i : ${orderList}">
+			<div class="goods_top">
+				<th:block th:if="${order.giftPackYn} == 'Y'">
+					<div class="goods_date">선물일<span class="date" th:text="${order.ordDt}"></span></div>
+				</th:block>
+				<th:block th:if="${order.giftPackYn} == 'N'">
+					<div class="goods_date">주문일<span class="date" th:text="${order.ordDt}"></span></div>
+				</th:block>
+				<a href="javascript:void(0);" class="detail_btn" th:ordno="${order.ordNo}" onclick="fnGoToOrderDetail(this)">상세보기</a>
 			</div>
-			<div class="goods_detail">
-				<a href="">
-					<div class="thumb_box">
-						<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
+			
+			<th:block th:each="ordDtl , j : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+				<!-- 주문 접수 -->
+				<div class="goods_section">
+					<div class="goods_status">
+						<!-- 선물배송일때 -->
+						<th:block th:if="${ordDtl.giftPackYn} == 'Y'">
+							<div class="goods_txt">
+								<!-- 배송지등록전 -->
+								<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
+									<p class="dlvr_staus">주소 입력 대기 중</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'">
+									<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
+										<p class="dlvr_staus">선물 완료</p>
+									</th:block>
+								</th:block>
+								<!-- //배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
+								
+								<!-- 선물 취소 -->
+								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_98' and ${ordDtl.ordDtlStat} == 'G013_99'">
+									<p class="dlvr_staus">선물 취소</p>
+								</th:block>
+								<!-- //선물 취소 -->
+							</div>
+						</th:block>
+						<!-- //선물배송일때 -->
+						
+						<!-- 일반배송일때 -->
+						<th:block th:if="${ordDtl.giftPackYn} == 'N'">
+							<p class="dlvr_staus" th:text="${ordDtl.ordDtlStatNm}"></p>
+						</th:block>
+						<!-- //일반배송일때 -->
+					</div>
+					<div class="goods_detail">
+						<a href="">
+							<div class="thumb_box">
+								<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" src="/" width="100%" alt="">
+							</div>
+							<div class="info_box">
+								<div class="od_name">
+									<div class="brand">
+										<span th:text="${ordDtl.brandNm}"></span>
+										<div class="badge_wrap">
+											<th:block th:if="${ordDtl.shotDelvYn} == 'Y'">
+												<em class="order_badge order_bullet_badge">총알배송</em>
+											</th:block>
+											<th:block th:if="${ordDtl.selfGoodsYn} == 'Y'">
+												<em class="order_badge">STYLE24 일반배송</em>
+											</th:block>
+											<th:block th:if="${ordDtl.shotDelvYn} != 'Y' and ${ordDtl.selfGoodsYn} != 'Y'">
+												<em class="order_badge">업체직배송</em>
+											</th:block>
+										</div>
+									</div>
+									<div class="name" th:text="${ordDtl.goodsNm}"></div>
+								</div>
+								<div class="od_opt">
+									<div class="option" th:each="colorNm, index : ${ordDtl.colorNmArr}">
+										<em th:text="${colorNm}"></em>
+										<em th:text="${ordDtl.optCd2Arr[index.index]}"></em>
+									</div>
+								</div>
+								<div class="od_calc">
+									<!-- 판매금액과 할인금액이 같으면 표시 안함 -->
+									<th:block th:if="(${ordDtl.ordAmt} - ${ordDtl.cnclRtnAmt} - ${ordDtl.cpn1DcAmt}) > ${ordDtl.realOrdAmt} + ${ordDtl.pntDcAmt} + ${ordDtl.gfcdUseAmt}">
+										<p class="sale_price">
+											<del>
+												<em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}"></em>원
+											</del>
+										</p>
+									</th:block>
+									<p class="price">
+										<span class="selling_price">
+											<em th:text="${#numbers.formatInteger(ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt, 1, 'COMMA')}"></em>원
+										</span>
+										<span class="count">
+											<em th:text="${ordDtl.ordQty} - ${ordDtl.cnclRtnQty}"></em>개
+										</span>
+									</p>
+								</div>
+							</div>
+						</a>
 					</div>
-					<div class="info_box">
-						<div class="od_name">
-							<div class="brand">
-								<span>Mollimelli 몰리멜리</span>
-								<div class="badge_wrap">
-									<em class="order_badge">STYLE24 일반배송</em>
-									<em class="order_badge order_bullet_badge">총알배송</em>
+					
+					<!-- 버튼기능정리 -->
+					<!-- 일반배송 -->
+					<th:block th:unless="${ordDtl.giftPackYn} == 'Y'">
+						<!-- 입금대기, 결제완료, 상품준비중, 출고처지정 (주문취소) -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
+							<div class="goods_btn_wrap btn_group_flex">
+								<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+							</div>
+						</th:block>
+						<!-- //입금대기, 결제완료, 상품준비중, 출고처지정 (주문취소) -->
+						
+						<!-- 배송준비중-->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_40'">
+						</th:block>
+						<!-- //배송준비중-->
+						
+						<!-- 배송중 (교환가능, 반품가능) -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55'">
+							<!-- 교환가능, 반품가능 -->
+							<th:block th:if="${ordDtl.changeableYn} == 'Y' or ${ordDtl.returnableYn} == 'Y'">
+								<div class="goods_btn_wrap btn_group_flex">
+									<th:block th:if="${ordDtl.changeableYn} == 'Y'">
+										<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+									</th:block>
+									<th:block th:if="${ordDtl.returnableYn} == 'Y'">
+										<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+									</th:block>
 								</div>
+							</th:block>
+							<!-- //교환가능, 반품가능 -->
+							
+							<!-- 리뷰사용가능, 리뷰등록전일때 -->
+							<div class="goods_btn_wrap btn_group_flex">
+								<div><button type="button" class="btn btn_default btn_delv_sch"><span>배송 조회</span></button></div>
+								<!-- 리뷰사용가능, 리뷰등록전일때 -->
+								<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+									<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+								</th:block>
+								<!-- //리뷰사용가능, 리뷰등록전일때 -->
+							</div>
+							<!-- //리뷰사용가능, 리뷰등록전일때 -->
+						</th:block>
+						<!-- //배송중 (교환가능, 반품가능) -->
+							
+						<!-- 배송완료 (교환가능, 반품가능) -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_60'">
+							<div class="goods_btn_wrap btn_group_flex">
+								<!-- 교환가능, 반품가능 -->
+								<th:block th:if="${ordDtl.changeableYn} == 'Y'">
+									<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+								</th:block>
+								<th:block th:if="${ordDtl.returnableYn} == 'Y'">
+									<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+								</th:block>
+								<!-- //교환가능, 반품가능 -->
+								
+								<div><button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary"><span>구매 확정</span></button></div>
 							</div>
-							<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
+							<div class="goods_btn_wrap btn_group_flex">
+								<!-- 교환불가, 반품불가 -->
+								<th:block th:if="${ordDtl.changeableYn} == 'N' or ${ordDtl.returnableYn} == 'N'">
+									<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+								</th:block>
+								<!-- //교환불가, 반품불가 -->
+								
+								<!-- 리뷰사용가능, 리뷰등록전일때 -->
+								<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+									<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+								</th:block>
+								<!-- //리뷰사용가능, 리뷰등록전일때 -->
+							</div>
+						</th:block>
+						<!-- //배송완료 (교환가능, 반품가능) -->
+						
+						<!-- 구매확정 -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
+							<div class="goods_btn_wrap btn_group_flex">
+								<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
+								<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+								
+								<!-- 리뷰사용가능, 리뷰등록전일때 -->
+								<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+									<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+								</th:block>
+								<!-- //리뷰사용가능, 리뷰등록전일때 -->
+							</div>
+						</th:block>
+						<!-- //구매확정 -->
+					</th:block>
+					
+					<!--  선물배송 -->
+					<th:block th:if="${ordDtl.giftPackYn} == 'Y'">
+						<!-- 선물배송, 배송미입력 -->
+						<div class="goods_btn_wrap btn_group_flex">
+							<!-- 배송지등록전 -->
+							<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
+								<div><button type="button" class="btn btn_primary btn_sms_send"><span>SMS 재발송</span></button></div>
+							</th:block>
+							<!-- //배송지등록전 -->
+							
+							<!-- 배송지등록후(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
+							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
+								<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+							</th:block>
+							<!-- //배송지등록후(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
+							
+							<!-- 배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
+							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60' or ${ordDtl.ordDtlStat} == 'G013_70'">
+								<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
+									<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
+									<!-- 리뷰사용가능, 리뷰등록전일때 -->
+									<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null and ${ordDtl.ordDtlStat} == 'G013_70'">
+										<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+									</th:block>
+									<!-- //리뷰사용가능, 리뷰등록전일때 -->
+								</th:block>
+							</th:block>
+							<!-- //배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
+						</div>
+					</th:block>
+					<!-- //선물배송 -->
+					<!-- //버튼기능정리 -->
+					
+					<!-- 상태문구정리 -->
+					<!-- 일반배송일때 -->
+					<th:block th:if="${ordDtl.giftPackYn} == 'N'">
+						<div class="goods_alert">
+							<!-- 배송중, 배송완료 상태 교환, 반품 가능 상태 체크 -->
+							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60'">
+								<!-- 교환불가능, 반품불가능 -->
+								<th:block th:if="${ordDtl.changeableYn} == 'N' and ${ordDtl.returnableYn} == 'N'">
+									<p class="cf_txt cf_desc">해당 상품은 교환/반품이 불가능한 상품입니다.<br>문의사항은 1:1 문의를 이용해 주세요.</p>
+								</th:block>
+								<!-- //교환불가능, 반품불가능 -->
+								
+								<!-- 교환불가능 -->
+								<th:block th:if="${ordDtl.changeableYn} == 'N'">
+									<p class="cf_txt cf_desc">해당 상품은 교환이 불가능한 상품입니다.<br>문의사항은 1:1 문의를 이용해 주세요.</p>
+								</th:block>
+								<!-- //교환불가능 -->
+								
+								<!-- 반품불가능 -->
+								<th:block th:if="${ordDtl.returnableYn} == 'N'">
+									<p class="cf_txt cf_desc">해당 상품은 교환이 불가능한 상품입니다.<br>문의사항은 1:1 문의를 이용해 주세요.</p>
+								</th:block>
+								<!-- //반품불가능 -->
+								
+							</th:block>
+							<!-- //배송중, 배송완료 상태 -->
 						</div>
-						<div class="od_opt">
-							<div class="option">
-								<em>Black</em><em>XXL</em>
+						
+						<!-- 주문접수 -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10'">
+							<div class="goods_txt">
+								<p class="cf_txt cf_desc">주문 완료 / 결제를 기다리고 있습니다.</p>
+								<th:block th:if="${ordDtl.delvResDt} != null">
+									<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+								</th:block>
 							</div>
+						</th:block>
+						<!-- //주문접수 -->
+						
+						<!-- 결제완료, 예약배송상품 -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10'">
+							<th:block th:if="${ordDtl.delvResDt} != null">
+								<div class="goods_txt">
+									<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+								</div>
+							</th:block>
+						</th:block>
+						<!-- //결제완료, 예약배송상품 -->
+						
+						<!-- 상품준비중 -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_30'">
+							<div class="goods_txt">
+								<p class="cf_txt cf_desc">배송할 상품을 준비 중입니다.</p>
+								<th:block th:if="${ordDtl.delvResDt} != null">
+									<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+								</th:block>
+							</div>
+						</th:block>
+						<!-- //상품준비중 -->
+						
+						<!-- 배송준비중 -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_40'">
+							<div class="goods_txt">
+								<p class="cf_txt cf_desc">상품 준비가 완료되어 곧 배송될 예정입니다.</p>
+								<th:block th:if="${ordDtl.delvResDt} != null">
+									<p class="cf_txt cf_desc" th:text="|예약판매 상품으로 ${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+								</th:block>
+							</div>
+						</th:block>
+						<!-- //배송준비중 -->
+						
+						<!-- 배송완료 -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_60'">
+							<div class="goods_txt">
+								<p class="cf_txt cf_desc">15일 후 자동으로 구매확정됩니다.</p>
+							</div>
+						</th:block>
+						<!-- //배송완료 -->
+						
+						<!-- 구매확정 -->
+						<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
+							<!-- 리뷰사용가능, 리뷰등록전일때 -->
+							<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+								<div class="goods_txt">
+									<p class="cf_txt cf_desc">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다</p>
+								</div>
+							</th:block>
+							<!-- //리뷰사용가능, 리뷰등록전일때 -->
+						</th:block>
+						<!-- //구매확정 -->
+					</th:block>
+					<!-- //일반배송일때 -->
+					
+					<!-- 선물배송일때 -->
+					<th:block th:if="${ordDtl.giftPackYn} == 'Y'">
+						<div class="goods_txt">
+							<!-- 배송지등록전 -->
+							<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
+								<p class="cf_txt cf_desc"><span th:text="|‘${ordDtl.recipNm}’|"></span>님 주소를 입력하기 전입니다.</p>
+								<p class="period">입력기한 <span th:text="${ordDtl.giftLimitDt}"></span></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'">
+								<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
+									<p class="cf_txt cf_desc"><span th:text="|‘${ordDtl.recipNm}’|"></span>님께 선물이 발송되었습니다.</p>
+								</th:block>
+							</th:block>
+							<!-- //배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
+							
+							<!-- 선물 취소 -->
+							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_98' and ${ordDtl.ordDtlStat} == 'G013_99'">
+								<p class="cf_txt cf_desc">주소 입력 기한이 경과되어 선물이 취소 되었습니다.</p>
+							</th:block>
+							<!-- //선물 취소 -->
 						</div>
-						<div class="od_calc">
-							<p class="sale_price"><del><em>95,000</em>원</del></p>
-							<p class="price">
-								<span class="selling_price"><em>61,200</em>원</span>
-								<span class="count"><em>99</em>개</span>
-							</p>
+					</th:block>
+					<!-- //선물배송일때 -->
+					<!-- //상태문구정리 -->
+					
+					<!-- 사은품 영역 -->
+					<th:block th:if="${order.freeGiftList != null and #lists.size(order.freeGiftList) > 0}">
+						<div class="goods_gift">
+							<div class="gift_wrap">
+								<div class="title">사은품</div>
+								<div class="li_gift">
+									<ul>
+										<th:block th:each="freeGift , j : ${order.freeGiftList}">
+											<li>
+												<span class="gift_name" th:text="${freeGift.goodsNm}"></span> 
+												<th:block th:if="${freeGift.usePoint} > 0">
+													<span class="deduct_p" th:text="|(-${freeGift.usePoint.addComma()}P)|"></span>
+												</th:block>
+											</li>
+										</th:block>
+									</ul>
+								</div>
+							</div>
 						</div>
-					</div>
-				</a>
-			</div>
-			<div class="goods_btn_wrap btn_group_flex">
-				<div><button type="button" class="btn btn_default"><span>주문 취소</span></button></div>
-			</div>
-			<div class="goods_txt">
-				<p class="cf_txt cf_desc">주문 완료 / 결제를 기다리고 있습니다.</p>
-			</div>
-		</div>
-		<!-- //주문 접수 -->
+					</th:block>
+					<!-- //사은품 영역 -->
+				</div>
+				<!-- //주문 접수 -->
+			</th:block>
+		</th:block>
 	</div>
 </div>
 

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

@@ -341,8 +341,11 @@ var giftMsg			= [[${orderInfo.giftMsg}]];		// 선물메세지
 
 //컨텐츠 호출
 $(document).ready( function() {
+	
 	// 선물메시지
-	$("#giftMsg").html(giftMsg.replaceAll("\n", "</br>"));
+	if ($("#giftMsg").html() != null) {
+		$("#giftMsg").html(giftMsg.replaceAll("\n", "</br>"));
+	}
 });
 
 // 2.1 회원 배송지변경 팝업열기

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

@@ -49,7 +49,7 @@
 								<th:block th:text="${deliveryAddrInfo.recipNm}"></th:block> 
 								<span class="icon_tag"> 
 									<th:block th:if="${deliveryAddrInfo.defaultYn} == 'Y'">
-										<em class="tag_stype1">기본배송지</em> 
+										<em class="tag_stype1 defaultYn">기본배송지</em> 
 									</th:block>
 									<em class="tag_stype2 shotDelv" style="display:none">총알배송</em>
 								</span>
@@ -116,6 +116,9 @@ var deliveryAddrInfoDispYn = function(temp) {
 
 //컨텐츠 호출
 $(document).ready( function() {
+	// 화면펼침
+	deliveryAddrInfoDispYn(dispYn);
+	
 	var delvMemoArr = ["문 앞", "직접 받고 부재 시 문 앞", "경비실", "택배함"];
 	var tempMemo = true;
 	
@@ -143,9 +146,6 @@ $(document).ready( function() {
 		$(".ship_etc").show();
 	}
 	
-	// 화면펼침
-	deliveryAddrInfoDispYn(dispYn);
-	
 	// 콤보박스 
 	var od_delivery_list = new sCombo('#orderForm .ship_select .select_custom.delivery_list');
 	

+ 73 - 48
src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html

@@ -4,59 +4,63 @@
 		<h5 class="modal-title" id="adrsChangeLabel">배송지 관리</h5>
 	</div>
 	<div class="modal-body">
-		<div class="pop_cont">
-			<div class="inner wide">
-				<div class="delivery_list">
-					<!-- 배송지목록 -->
-					<th:block th:each="deliveryAddr, index : ${deliveryAddrList}">
-						<div class="ship_info">
-							<dl>
-								<div class="name">
-									<dt><span class="sr-only">배송지명</span></dt>
-									<dd>
-										<th:block th:text="${deliveryAddr.recipNm}"></th:block>
-										<div class="badge_wrap">
-											<th:block th:if="${deliveryAddr.defaultYn} == 'Y'">
-												<em class="order_badge">기본배송지</em> 
-											</th:block>
-											<th:block th:if="${deliveryAddr.shotDelvUseYn} == 'Y'">
-												<em class="order_badge order_bullet_badge">총알배송</em>
-											</th:block>
-										</div>
-									</dd>
+		<th:block th:if="${deliveryAddrList != null and #lists.size(deliveryAddrList) > 0}">
+			<div class="pop_cont">
+				<div class="inner wide">
+					<div class="delivery_list">
+						<!-- 배송지목록 -->
+						<th:block th:each="deliveryAddr, index : ${deliveryAddrList}">
+							<div class="ship_info">
+								<dl>
+									<div class="name">
+										<dt><span class="sr-only">배송지명</span></dt>
+										<dd>
+											<th:block th:text="${deliveryAddr.recipNm}"></th:block>
+											<div class="badge_wrap">
+												<th:block th:if="${deliveryAddr.defaultYn} == 'Y'">
+													<em class="order_badge">기본배송지</em> 
+												</th:block>
+												<th:block th:if="${deliveryAddr.shotDelvUseYn} == 'Y'">
+													<em class="order_badge order_bullet_badge">총알배송</em>
+												</th:block>
+											</div>
+										</dd>
+									</div>
+									<div class="phone">
+										<dt><span class="sr-only">휴대폰 번호</span></dt>
+										<dd th:text="${deliveryAddr.recipPhnno}"></dd>
+									</div>
+									<div class="addr">
+										<dt><span class="sr-only">배송주소</span></dt>
+										<dd th:text="${deliveryAddr.recipBaseAddr} + ' ' + ${deliveryAddr.recipDtlAddr}"></dd>
+									</div>
+									<div class="ship_request">
+										<dl>
+											<dt>배송요청 사항</dt>
+											<dd th:text="${deliveryAddr.delvMemo}"></dd>
+										</dl>
+									</div>
+								</dl>
+								<div class="btn_group btn_group_flex">
+									<div><button type="button" class="btn btn_gost btn_addrModify_pop" th:value="${deliveryAddr.custDelvAddrSq}" id="btn_addrModify_pop"><span>수정</span></button></div>
+									<div><button type="button" class="btn btn_dark btn_sel_delvAddr" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button></div>
 								</div>
-								<div class="phone">
-									<dt><span class="sr-only">휴대폰 번호</span></dt>
-									<dd th:text="${deliveryAddr.recipPhnno}"></dd>
-								</div>
-								<div class="addr">
-									<dt><span class="sr-only">배송주소</span></dt>
-									<dd th:text="${deliveryAddr.recipBaseAddr} + ' ' + ${deliveryAddr.recipDtlAddr}"></dd>
-								</div>
-								<div class="ship_request">
-									<dl>
-										<dt>배송요청 사항</dt>
-										<dd th:text="${deliveryAddr.delvMemo}"></dd>
-									</dl>
-								</div>
-							</dl>
-							<div class="btn_group btn_group_flex">
-								<div><button type="button" class="btn btn_gost btn_addrModify_pop" th:value="${deliveryAddr.custDelvAddrSq}" id="btn_addrModify_pop"><span>수정</span></button></div>
-								<div><button type="button" class="btn btn_dark btn_sel_delvAddr" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button></div>
+								
+								<input type="hidden" name="recipNm" 			th:value="${deliveryAddr.recipNm}"/>
+								<input type="hidden" name="recipPhnno" 			th:value="${deliveryAddr.recipPhnno}"/>
+								<input type="hidden" name="recipZipcode" 		th:value="${deliveryAddr.recipZipcode}"/>
+								<input type="hidden" name="recipBaseAddr" 		th:value="${deliveryAddr.recipBaseAddr}"/>
+								<input type="hidden" name="recipDtlAddr" 		th:value="${deliveryAddr.recipDtlAddr}"/>
+								<input type="hidden" name="delvMemo" 			th:value="${deliveryAddr.delvMemo}"/>
 							</div>
-							
-							<input type="hidden" name="recipNm" 			th:value="${deliveryAddr.recipNm}"/>
-							<input type="hidden" name="recipPhnno" 			th:value="${deliveryAddr.recipPhnno}"/>
-							<input type="hidden" name="recipZipcode" 		th:value="${deliveryAddr.recipZipcode}"/>
-							<input type="hidden" name="recipBaseAddr" 		th:value="${deliveryAddr.recipBaseAddr}"/>
-							<input type="hidden" name="recipDtlAddr" 		th:value="${deliveryAddr.recipDtlAddr}"/>
-							<input type="hidden" name="delvMemo" 			th:value="${deliveryAddr.delvMemo}"/>
-						</div>
-					</th:block>
+						</th:block>
+					</div>
 				</div>
 			</div>
-		</div>
+		</th:block>
 	</div>
+	
+	
 	<div class="modal-footer">
 		<button type="button" class="btn btn_dark" id="btn_adrsAdd_pop">
 			<span>배송지 추가</span>
@@ -65,8 +69,29 @@
 </form>
 
 <script th:inline="javascript">
+var deliveryAddrCnt = [[${deliveryAddrCnt}]];
+
 //컨텐츠 호출
 $(document).ready( function() {
+	// 목록이없으면 등록화면 이동
+	if (parseInt(deliveryAddrCnt) < 1) {
+		$.ajax( {
+			type		: "POST",
+			url 		: '/common/delvAddrAddPop',
+			data		: JSON.stringify(jsonObj),
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+				gagajf.showProgressbar(true);
+			},
+			success 	: function(result) {
+				$("#adrsAddPop .modal-dialog .modal-content").html(result);
+				$("#adrsAddPop").modal("show");
+			}
+		});	
+	}
 });
 
 // 2. 버튼기능구현

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

@@ -83,19 +83,19 @@
 							<li>
 								<a href="javascript:void(0)" onclick="cfnLoginKakao();">
 									<i class="ico ico_snslogin kakao"></i>
-									<span>카카오로 시작하기</span>
+									<span>카카오</span>
 								</a>
 							</li>
 							<li>
 								<a href="javascript:void(0)" onclick="cfnLoginNaver();">
 									<i class="ico ico_snslogin naver"></i>
-									<span>네이버로 시작하기</span>
+									<span>네이버</span>
 								</a>
 							</li>
 							<li>
 								<a href="javascript:void(0)" onclick="cfnLoginYes24();">
 									<i class="ico ico_snslogin yes24"></i>
-									<span>YES24로 시작하기</span>
+									<span>YES24</span>
 								</a>
 							</li>
 						</ul>

+ 20 - 6
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -560,7 +560,7 @@
 			setLoginInfo();
 
 			if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
-				//$(".shotDelvSelect").hide();
+				$(".shotDelvSelect").hide();
 			}
 
 			$("#cartListForm .area_salecoupon .coupon_box").hide();
@@ -1020,11 +1020,11 @@
 					let message = info.goodsNm + " 상품은 구매 할 수 없습니다. 제외하고 계속 주문하시겠습니까?";
 					fnRemoveCartSqConfirm(message, cartSqArr, info.cartSq, list, listIndex, allYn);
 				} else if (info.soldoutYn == "Y") {		// 품절
-					if (info.goodsStat == "G008_70" || info.ordCanQty < info.minOrdQty) {		// 상품 상태가 품절이거나 주문 가능 수량이 최소주문수량보다 적을경우
+					if (info.goodsStat == "G008_70") {		// 상품 상태가 품절이거나 주문 가능 수량이 최소주문수량보다 적을경우
 						let message = info.goodsNm + " 상품은 품절입니다. 제외하고 계속 주문하시겠습니까?";
 						fnRemoveCartSqConfirm(message, cartSqArr, info.cartSq, list, listIndex, allYn)
-					} else if (info.goodsQty < info.ordCanQty) {		// 주문 가능 수량이 0일경우
-						let message = info.goodsNm + "의 " + info.colorNm + " 옵션이 품절되었습니다. 제외하고 계속 주문하시겠습니까?";
+					} else if (info.goodsQty < info.ordCanQty || info.ordCanQty < info.minOrdQty) {		// 주문 가능 수량이 0일경우
+						let message = info.goodsNm + "의 " + info.colorNm + "/" + info.optCd2 + "이 품절되었습니다. 제외하고 계속 주문하시겠습니까?";
 						fnRemoveCartSqConfirm(message, cartSqArr, info.cartSq, list, listIndex, allYn)
 					} else if (listIndex < list.length) {
 						// 혹시 else일 경우
@@ -1078,8 +1078,13 @@
 					if (index == 1) { //button1 일때 처리문
 						orderFlag = false; return false;
 					} else {	//button2 일때 처리문
-						fnCheckOffCartSqArr(cartSqArr, info.cartSq);
-						fnOrderValidation(list, listIndex, cartSqArr, allYn);
+						if(cartSqArr.length > 1) {
+							fnCheckOffCartSqArr(cartSqArr, cartSq);
+							fnOrderValidation(list, listIndex, cartSqArr, allYn);
+						} else {
+							mcxDialog.alert("주문 가능한 상품이 없습니다.");
+							orderFlag = false; return false;
+						}
 					}
 				}
 			});
@@ -1095,10 +1100,19 @@
 			});
 
 			// 장바구니 선택된것 삭제 > cartSq 0으로 변경
+			let cartSqLength = 0;
 			for (let i = 0; i < cartSqArr.length; i++) {
 				if (cartSqArr[i] == cartSq) {
 					cartSqArr[i] = 0;
 				}
+				if(cartSqArr[i] > 0) {
+					cartSqLength++;
+				}
+			}
+
+			if(cartSqLength < 1) {
+				mcxDialog.alert("주문 가능한 상품이 없습니다.");
+				orderFlag = false; return false;
 			}
 		}
 

+ 17 - 7
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html

@@ -755,13 +755,23 @@
 							let tag = '';
 							if(item.contentsType == 'OPEN'){
 								tag +='<div class="bnrtype_open" style="background-color:#'+item.strVar5+';">';
-								tag +=' 	<a href="'+item.strVar1+'" target="">';
-								tag +=' 		<img src="'+bannerImgUrl+''+item.imgPath1+'" alt="">';
-								tag +=' 		<div class="open_bnr_area">';
-								tag +=' 			<img src="'+bannerImgUrl+''+item.imgPath2+'" alt=""/>';
-								tag +=' 		</div>';
-								tag +=' 	</a>';
-								tag +=' 	<button class="btn_toggle_bnr"><span>열기</span></button>';
+								if(item.strVar7=='IMG'){
+									tag +=' 	<a href="'+item.strVar1+'" target="">';
+									tag +=' 		<img src="'+bannerImgUrl+''+item.imgPath1+'" alt="">';
+									tag +=' 		<div class="open_bnr_area">';
+									tag +=' 			<img src="'+bannerImgUrl+''+item.imgPath2+'" alt=""/>';
+									tag +=' 		</div>';
+									tag +=' 	</a>';
+									tag +=' 	<button class="btn_toggle_bnr"><span>열기</span></button>';
+								}else{
+									tag +=' 	<a href="'+item.strVar1+'" target="">';
+									tag +=' 		<img src="'+bannerImgUrl+''+item.imgPath1+'" alt="">';
+									tag +=' 		<div class="open_bnr_area">';
+									tag += '            '+item.html+' ';
+									tag +=' 		</div>';
+									tag +=' 	</a>';
+									tag +=' 	<button class="btn_toggle_bnr"><span>열기</span></button>';
+								}
 								tag +='</div>';
 								if(item.strVar8=='Y'){
 									tag+='<div class="close_bnr_area">';

+ 2 - 2
src/main/webapp/WEB-INF/views/web/customer/IdFindFormWeb.html

@@ -163,7 +163,7 @@
 									</div>
 									<div class="btn_group_block btn_group_md ui_row">
 										<div class="ui_col_6">
-											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
 												<span>회원가입</span>
 											</button>
 										</div>
@@ -186,7 +186,7 @@
 									</div>
 									<div class="btn_group_block btn_group_md ui_row">
 										<div class="ui_col_12">
-											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
 												<span>회원가입</span>
 											</button>
 										</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/customer/PasswordFindFormWeb.html

@@ -148,7 +148,7 @@
 									</div>
 									<div class="btn_group_block btn_group_md ui_row">
 										<div class="ui_col_6">
-											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
 												<span>회원가입</span>
 											</button>
 										</div>

+ 43 - 0
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -563,6 +563,49 @@
 		/*]]>*/
 	</script>
 
+	<script>
+		//(진행 중)
+		$(document).ready( function() {
+			var nowMov = $('.itemPic').children('.pd_mov');
+			var nowImg = $('.itemPic').children('.pd_img');
+			var ogrSrc;
+			var overSrc;
+			var srcName = nowImg.attr('src');
+			overSrc = srcName.substring(0, srcName.lastIndexOf('.'));
+
+			$(nowMov).on('mouseover', function() {
+				// [on] size opt
+				$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				// [on] mov none
+				$(this).css("opacity","0");
+				// return false;
+			});
+			$(nowMov).on('mouseleave', function() {
+				// [off] size opt
+				$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				// [off] mov block
+				$(this).css("opacity","1");
+				// return false;
+			});
+			$(nowImg).on('mouseover', function() {
+				// [on] size opt
+				$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				// [on] re-Name
+				ogrSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
+				overSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
+				$(this).attr('src', overSrc+ '_onhover.' + /[^.]+$/.exec(srcName));
+				// return false;
+			});
+			$(nowImg).on('mouseleave', function() {
+				// [off] size opt
+				$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				// [off] re-Name
+				$(this).attr('src', overSrc + '.' + /[^.]+$/.exec(srcName));
+				// return false;
+			});
+		});
+	</script>
+
 </th:block>
 
 </body>

+ 124 - 43
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -820,7 +820,9 @@ $(document).ready( function() {
 	//$("#header").load("head.html");
 	//$("#footer").load("foot.html");
 	$(".tag_list .btn").eq(0).trigger('click');
-	$(".it_nav .btn").eq(0).trigger('click');
+
+	let randomNum = Math.floor( ( Math.random() * 4 ) );
+	$(".it_nav .btn").eq(randomNum).trigger('click');
 });
 
 /* SLIDE - MAIN_VISUAL */
@@ -904,6 +906,8 @@ var main_trendy_slide = new Swiper('.main_trendy .post-trendy', {
 	watchSlidesProgress: true,
 	watchSlidesVisibility: true,
 	allowTouchMove: false,
+	loof: false,
+	loopAdditionalSlides : 1,
 	speed : 1000,
 	autoplay: {
 		delay: 30000,
@@ -913,10 +917,10 @@ var main_trendy_slide = new Swiper('.main_trendy .post-trendy', {
 		nextEl: '.main_trendy .swiper-button-next',
 		prevEl: '.main_trendy .swiper-button-prev',
 	},
-	pagination: {
-		el: '.main_trendy .swiper-pagination',
-		clickable: true,
-	},
+	// pagination: {
+	// 	el: '.main_trendy .swiper-pagination',
+	// 	clickable: true,
+	// },
 	slidesPerView: 'auto',
 	spaceBetween: 22,
 });
@@ -941,6 +945,13 @@ main_trendy_slide.on('reachEnd', function () {
 	$(".main_trendy .swiper-slide-visible").eq(4).addClass('scaleBig');
 
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
+	function l(n) {
+		if (n.direction !== "none")
+		{
+			var t = n.direction === "next" ? n.currentIndex + 1 : n.currentIndex - 1;
+			o(t)
+		}
+	}
 });
 
 /* SLIDE - MAIN_IT */
@@ -991,27 +1002,63 @@ var main_deal_slide = new Swiper ('.main_deal .post-deal', {
 });
 
 /* SLIDE - MAIN_PICK */
-var main_pick_nav = new Swiper('.main_pick .post-pick-nav', {
+var main_pick_nav = new Swiper('.main_pick .post-pick-nav', { //top
+	initialSlide: 1,
 	slidesPerView: 6,
-	freeMode: false,
+	// slidesPerGroup: 6,
+	loop: true,
+	loopeSlides: 6,
+	loopFillGroupWithBlank : true,
+	// slideToClickedSlide : true,
+	slideToClickedSlide : true,
+	loopAdditionalSlides : 1,
+	// centeredSlides : true,
 	watchSlidesVisibility: true,
 	watchSlidesProgress: true,
+	freeMode: false,
+	navigation: {
+		nextEl: '.main_pick .swiper-button-next',
+		prevEl: '.main_pick .swiper-button-prev',
+	},
+	autoplay: {
+		delay: 5000,
+		disableOnInteraction: false,
+	},
 });
-var main_pick_post = new Swiper('.main_pick .post-pick-for', {
-	allowTouchMove: false,
+var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
+	initialSlide: 1,
+	slidesPerView: 1,
+	// slidesPerGroup: 6,
+	loop: true,
+	loopeSlides: 6,
 	spaceBetween: 10,
+	// loopFillGroupWithBlank : true,
+	loopAdditionalSlides: 1,
+	allowTouchMove: false,
 	navigation: {
 		nextEl: '.main_pick .swiper-button-next',
 		prevEl: '.main_pick .swiper-button-prev',
 	},
 	thumbs: {
 		swiper: main_pick_nav
-	}
+	},
+	autoplay: {
+		delay: 5000,
+		disableOnInteraction: false,
+	},
 });
+// main_pick_nav.controller.control = main_pick_post;
+// main_pick_post.controller.control = main_pick_nav;
+
 var main_pick_lookbook = new Swiper ('.main_pick .post-lookbook', {
-	loop: true,
 	slidesPerView: 1,
 	speed : 1000,
+	// loop: true,
+	watchOverflow: true, //loop와 함께 사용 불가.
+	autoplay: {
+		delay: 2000,
+		disableOnInteraction: false,
+	},
 	pagination: {
 		el: '.main_pick .post-lookbook .swiper-pagination',
 		clickable: true,
@@ -1020,10 +1067,11 @@ var main_pick_lookbook = new Swiper ('.main_pick .post-lookbook', {
 
 /* SLIDE - MAIN_BANNER WIDE */
 var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
-	loop: true,
 	slidesPerView: 1,
-	// centeredSlides: true,
 	speed : 1500,
+	initialSlide: 2,
+	loop: true,
+	watchOverflow: true, //loop와 함께 사용 불가.
 	autoplay: {
 		delay: 4000,
 		disableOnInteraction: false,
@@ -1032,6 +1080,8 @@ var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
 		nextEl: '.main_1stage .swiper-button-next',
 		prevEl: '.main_1stage .swiper-button-prev',
 	},
+	// allowTouchMove : false,
+	// centeredSlides: true,
 });
 
 /* SLIDE - MAIN_RECOMM */
@@ -1043,31 +1093,39 @@ $(".main_recomm .tag_list .btn").click(function(){
 	$(this).addClass('active');
 	$('#'+recommActive).addClass('active');
 });
+function init(){
 
-var main_recomm_slide = new Swiper ('.main_recomm .post-recomm', {
-	slidesPerView: 5,
-	speed : 1500,
-	autoplay: false,
-	spaceBetween: 20,
-	pagination: {
-		el: '.main_recomm .swiper-pagination',
-		clickable: true,
-	},
-	navigation: {
-		nextEl: '.main_recomm .swiper-button-next',
-		prevEl: '.main_recomm .swiper-button-prev',
-	},
-	observer:true,
-	observeParents: true,
-});
+	if(main_recomm_slide != null) main_recomm_slide.destroy();
 
-/* SLIDE - MAIN_RECOMM */
+	var main_recomm_slide = new Swiper ('.main_recomm .post-recomm', {
+		slidesPerView: 5,
+		slidesPerGroup: 5,
+		speed : 1500,
+		spaceBetween: 20,
+		loop : true,
+		pagination: {
+			el: '.main_recomm .swiper-pagination',
+			clickable: true,
+		},
+		navigation: {
+			nextEl: '.main_recomm .swiper-button-next',
+			prevEl: '.main_recomm .swiper-button-prev',
+		},
+		observer:true,
+		observeParents: true,
+	});
+}
+
+init();
+
+/* SLIDE - MAIN_FORYOU */
 var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container', {
 	allowTouchMove: false,
 	loop: true,
 	effect: 'fade',
+	autoHeight: false,
 	autoplay: {
-		delay: 5000,
+		delay: 25000,
 		disableOnInteraction: false,
 	},
 	pagination: {
@@ -1075,6 +1133,26 @@ var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container',
 		clickable: true,
 	},
 });
+function foryouInterval(_foryouIndex) {
+	var foryouCateItems = $(".main_foryou .fy_nav .swiper-slide-active ul li .btn_shape");
+	$(foryouCateItems[(_foryouIndex + 1) % 5]).addClass("active");
+	$(foryouCateItems[_foryouIndex % 5]).removeClass("active");
+}
+function foryouFy_item(_Fy_itemIndex) {
+	var fynavItems = $('.main_foryou .fy_nav .swiper-slide-active ul li .btn_shape.active');
+	var fyActive = $(fynavItems).attr('data-tab');
+	// $(".fy_nav .btn_shape").removeClass('active');
+	$(".fy_item").removeClass('active');
+	// $(".fy_item").addClass('active');
+	$('#'+fyActive).addClass('active');
+}
+var foryouIndex = 0;
+setInterval(function () {
+	foryouInterval(foryouIndex);
+	foryouFy_item();
+	if (foryouIndex >= 5) foryouIndex = 0;
+	foryouIndex++;
+}, 5000);
 $(".fy_nav .btn_shape").click(function(){
 	var fyActive = $(this).attr('data-tab');
 	$(".fy_nav .btn_shape").removeClass('active');
@@ -1083,6 +1161,7 @@ $(".fy_nav .btn_shape").click(function(){
 	$('#'+fyActive).addClass('active');
 });
 
+
 /* SLIDE - MAIN_TV */
 var main_tv_slide = new Swiper ('.main_tv .post-tv', {
 	loop: true,
@@ -1101,7 +1180,7 @@ var main_tv_slide = new Swiper ('.main_tv .post-tv', {
 	},
 });
 
-	$(document).ready(function() {
+$(document).ready(function() {
 		// $("#id006").text();
 		// var brCheck = "오늘만 <br> 이 가격@".split("<br>");
 		// console.log(brCheck[0]);
@@ -1140,17 +1219,19 @@ var main_tv_slide = new Swiper ('.main_tv .post-tv', {
 
 		// 핫딜 <br> 태그
 		var id006Text = $("#id006").find("input[name=title]").val();
-		if(id006Text.indexOf('<br>') > -1){
-			let tag = '';
-			var reText = id006Text.split("<br>");
-			tag += reText[0];
-			tag += '<br>';
-			tag += reText[1];
-			$("#id006").append(tag);
-		}else{
-			let tag = '';
-			tag += id006Text;
-			$("#id006").append(tag);
+		if(!gagajf.isNull(id006Text)){
+			if(id006Text.indexOf('<br>') > -1){
+				let tag = '';
+				var reText = id006Text.split("<br>");
+				tag += reText[0];
+				tag += '<br>';
+				tag += reText[1];
+				$("#id006").append(tag);
+			}else{
+				let tag = '';
+				tag += id006Text;
+				$("#id006").append(tag);
+			}
 		}
 
 		// 브랜드픽 <br> 태그

+ 3 - 2
src/main/webapp/WEB-INF/views/web/error/InaccessWeb.html

@@ -50,10 +50,11 @@
 		<div class="wrap notfind system inspect"><!--  페이지 특정 클래스 -->
 			<div class="contGrp">
 				<h2>접근 불가</h2>
-				<p th:text="${inaccessibleMsg}">모바일웹에서만 접근이 가능합니다.</p>
+				<p th:text="${inaccessibleMsg}"></p>
 			</div>
 			<div class="btn_group">
-				<button class="btn btn_dark" onclick="fnGoToHome();"><span>홈으로 이동</span></button>
+				<button class="btn btn_default" onclick="fnGoToHome();"><span>홈으로 이동</span></button>
+				<button class="btn btn_dark" onclick="javascript:history.back(-1);"><span>목록으로 이동</span></button>
 			</div>
 		</div>
 	</div>

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

@@ -232,7 +232,7 @@
 	// 취소 처리
 	var fnCancel = function() {
 		// 취소수량 설정
-		fnChangeCancelQty();
+		//fnChangeCancelQty();
 
 		// 주문상세번호 및 취소 수량 설정
 		let ordDtlNoArr = [];
@@ -285,12 +285,6 @@
 			return false;
 		}
 
-		// 추가배송비 PG 처리
-		if (addPayCost > 0) {
-			// TODO
-			// 추가배송비 PG 처리
-		}
-
 		// 취소요청 데이터 설정
 		let url = '/mypage/cancel';
 
@@ -298,6 +292,7 @@
 		let data = {};
 		data.ordNo = oneData.ordNo;
 		data.chgReason = 'G686_10';
+		data.chgReasonNm = '고객변심';
 		data.accountNo = accountNo;
 		data.accountNm = accountNm;
 		data.bankCd = bankCd;
@@ -309,9 +304,17 @@
 		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
 
 		let jsonData = JSON.stringify(data);
-
-		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
+		
+		// 취소 처리 가능 여부 조회
+		gagajf.ajaxJsonSubmit('/mypage/wms/cancel/available', jsonData, function(result) {
+			if (result.cancelYn == 'Y') {
+				// 취소 처리
+				gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+					cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
+				});
+			} else {
+				mcxDialog.alert('이미 배송처리 되어 취소 처리에 실패 하였습니다.');
+			}
 		});
 	}
 	

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

@@ -580,10 +580,22 @@
 				data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
 				
 				let jsonData = JSON.stringify(data);
-				
-				gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-					cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
+
+				// 취소 처리 가능 여부 조회
+				gagajf.ajaxJsonSubmit('/mypage/wms/cancel/available', jsonData, function(result) {
+					let cancelYn = result.cancelYn;
+
+					if (cancelYn == 'Y') {
+						// 전체취소 처리
+						gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+							cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
+						});
+					} else {
+						mcxDialog.alert('이미 배송처리 되어 전체취소 처리에 실패 하였습니다.');
+					}
 				});
+				
+				
 			}
 		});
 	}

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

@@ -610,7 +610,13 @@
 					tag += '									<span class="title">사은품</span>';
 					tag += '									<ul>';
 					$.each(order.freeGiftList, function(index, freeGift) {
-						tag += '										<li>' + freeGift.goodsNm + ' ' + '<span>(-' + freeGift.usePoint.addComma() + 'P)</span></li>';
+						// 2021.04.20 무료 사은품일때 - 처리 삭제
+						if (freeGift.usePoint > 0) {
+							tag += '										<li>' + freeGift.goodsNm + ' ' + '<span>(-' + freeGift.usePoint.addComma() + 'P)</span></li>';
+						} else {
+							tag += '										<li>' + freeGift.goodsNm + ' ' + '<span></li>';
+						}
+						
 					});
 					tag += '									</ul>';
 					tag += '								</div>';

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

@@ -36,7 +36,7 @@
 	<div class="area_receiveinfo">
 		<dl>
 			<div>
-				<dt><span>배송지명</span></dt>
+				<dt><span class="sr-only">배송지명</span></dt>
 				<dd>
 					<th:block th:text="${deliveryAddrInfo.recipNm}"></th:block>
 					<span class="icon_tag"> 
@@ -48,7 +48,7 @@
 				</dd>
 			</div>
 			<div>
-				<dt><span>배송주소</span></dt>
+				<dt><span class="sr-only">배송주소</span></dt>
 				<dd>
 					<th:block th:text="${deliveryAddrInfo.recipBaseAddr} + '    ' + ${deliveryAddrInfo.recipDtlAddr}"></th:block>
 					<button type="button" class="btn btn_default btn_sm" id="btn_adrsChange_pop">
@@ -57,11 +57,11 @@
 				</dd>
 			</div>
 			<div>
-				<dt><span>휴대폰 번호</span></dt>
+				<dt><span class="sr-only">휴대폰 번호</span></dt>
 				<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
 			</div>
 			<div>
-				<dt>배송요청 사항</dt>
+				<dt class="sr-only">배송요청 사항</dt>
 				<dd>
 					<span th:text="${deliveryAddrInfo.delvMemo}" id="delvMemo"></span>
 					<button type="button" class="btn_underline" id="btn_rqstModify_pop">

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

@@ -1872,7 +1872,7 @@ var gfcdUseAmtReset = function() {
 }
 
 // 1.17 쿠폰할인금액합계설정(금액전체계산)
-var custCpnSumAmtCal = function() {
+var custCpnSumAmtCal = function() {	
 	var cpnDcSumAmt 		= 0;
 	var cpnApplyCnt 		= 0;
 	var goodsCartCpnSumAmt 	= 0;
@@ -1908,7 +1908,7 @@ var custCpnSumAmtCal = function() {
 	// 배송비할인적용
 	$("input[name='cpnType']").each(function(){
 		if ($(this).val() == "delvCpn") {
-			var delvSumAmt = parseInt(orgSumDelvFee) - parseInt($(this).parent().find("input[name='cpnDcAmt']").val());
+			delvSumAmt = parseInt(orgSumDelvFee) - parseInt($(this).parent().find("input[name='cpnDcAmt']").val());
 			
 			// 최종배송비
 			$("#delvSumAmt").text(delvSumAmt.addComma() + " 원");

+ 65 - 48
src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html

@@ -4,54 +4,50 @@
 		<h5 class="modal-title" id="adrsChangeLabel">배송지 선택</h5>
 	</div>
 	<div class="modal-body">
-		<div class="pop_cont">
-			<ul>
-				<!-- 배송지목록 -->
-				<th:block th:each="deliveryAddr, index : ${deliveryAddrList}">
-					<li>
-						<div class="adrs_box">
-							<dl>
-								<div>
-									<dt><span class="sr-only">배송지명</span></dt>
-									<dd>
-										<th:block th:text="${deliveryAddr.recipNm}"></th:block>
-										<span class="icon_tag">
-											<th:block th:if="${deliveryAddr.defaultYn} == 'Y'">
-												<em class="tag">기본 배송지</em>
-											</th:block>
-											<th:block th:if="${deliveryAddr.shotDelvUseYn} == 'Y'">
-												<em class="tag primary_line">총알배송</em>
-											</th:block>
-										</span>
-									</dd>
-								</div>
-								<div>
-									<dt><span class="sr-only">휴대폰 번호</span></dt>
-									<dd th:text="${deliveryAddr.recipPhnno}"></dd>
-								</div>
-								<div>
-									<dt><span class="sr-only">배송주소</span></dt>
-									<dd th:text="${deliveryAddr.recipBaseAddr} + ' ' + ${deliveryAddr.recipDtlAddr}"></dd>
-								</div>
-								<div>
-									<dt>배송요청 사항&nbsp;:&nbsp;</dt>
-									<dd th:text="${deliveryAddr.delvMemo}"></dd>
-								</div>
-							</dl>
-							<button type="button" class="btn btn_default btn_sm btn_addrModify_pop" th:value="${deliveryAddr.custDelvAddrSq}"><span>수정</span></button>
-							<button type="button" class="btn btn_dark btn_sm btn_sel_delvAddr" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button>
-							
-							<input type="hidden" name="recipNm" 			th:value="${deliveryAddr.recipNm}"/>
-							<input type="hidden" name="recipPhnno" 			th:value="${deliveryAddr.recipPhnno}"/>
-							<input type="hidden" name="recipZipcode" 		th:value="${deliveryAddr.recipZipcode}"/>
-							<input type="hidden" name="recipBaseAddr" 		th:value="${deliveryAddr.recipBaseAddr}"/>
-							<input type="hidden" name="recipDtlAddr" 		th:value="${deliveryAddr.recipDtlAddr}"/>
-							<input type="hidden" name="delvMemo" 			th:value="${deliveryAddr.delvMemo}"/>
-						</div>
-					</li>
-				</th:block>
-			</ul>
-		</div>
+		<th:block th:if="${deliveryAddrList != null and #lists.size(deliveryAddrList) > 0}">
+			<div class="pop_cont">
+				<ul>
+					<!-- 배송지목록 -->
+					<th:block th:each="deliveryAddr, index : ${deliveryAddrList}">
+						<li>
+							<div class="adrs_box">
+								<dl>
+									<div>
+										<dt><span class="sr-only">배송지명</span></dt>
+										<dd>
+											<th:block th:text="${deliveryAddr.recipNm}"></th:block>
+											<span class="icon_tag">
+												<th:block th:if="${deliveryAddr.defaultYn} == 'Y'">
+													<em class="tag">기본 배송지</em>
+												</th:block>
+												<th:block th:if="${deliveryAddr.shotDelvUseYn} == 'Y'">
+													<em class="tag primary_line">총알배송</em>
+												</th:block>
+											</span>
+										</dd>
+									</div>
+									<div>
+										<dt><span class="sr-only">휴대폰 번호</span></dt>
+										<dd th:text="${deliveryAddr.recipPhnno}"></dd>
+									</div>
+									<div>
+										<dt><span class="sr-only">배송주소</span></dt>
+										<dd th:text="${deliveryAddr.recipBaseAddr} + ' ' + ${deliveryAddr.recipDtlAddr}"></dd>
+									</div>
+									<div>
+										<dt>배송요청 사항&nbsp;:&nbsp;</dt>
+										<dd th:text="${deliveryAddr.delvMemo}"></dd>
+									</div>
+								</dl>
+								<button class="btn btn_default btn_sm btn_addrModify_pop" id="btn_adrsModify_pop" th:value="${deliveryAddr.custDelvAddrSq}"><span>수정</span></button>
+								<button class="btn btn_dark btn_sm btn_sel_delvAddr" id="" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button>
+							</div>
+						</li>
+					</th:block>
+				</ul>
+			</div>
+		</th:block>
+		
 	</div>
 	<div class="modal-footer">
 		<button type="button" class="btn btn_dark" id="btn_adrsAdd_pop"><span>배송지 추가</span></button>
@@ -59,8 +55,29 @@
 </form>
 
 <script th:inline="javascript">
+var deliveryAddrCnt = [[${deliveryAddrCnt}]];
+
 //컨텐츠 호출
 $(document).ready( function() {
+	// 목록이없으면 등록화면 이동
+	if (parseInt(deliveryAddrCnt) < 1) {
+		$.ajax( {
+			type		: "POST",
+			url 		: '/common/delvAddrAddPop',
+			data		: JSON.stringify(jsonObj),
+			dataType 	: 'html',
+			beforeSend : function(xhr, settings) {
+				xhr.setRequestHeader("AJAX"			, "true");
+				xhr.setRequestHeader('Accept'		, 'application/json');
+				xhr.setRequestHeader('Content-Type'	, 'application/json');
+				gagajf.showProgressbar(true);
+			},
+			success 	: function(result) {
+				$("#adrsAddPop .modal-dialog .modal-content").html(result);
+				$("#adrsAddPop").modal("show");
+			}
+		});
+	}
 });
 
 // 2. 버튼기능구현

+ 15 - 0
src/main/webapp/biz/goods.js

@@ -178,6 +178,21 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		tag += '			<div class="itemPic">';
 		tag += '				<img alt="BLUE-a" class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'">';
 		tag += '			</div>';
+		if(!gagajf.isNull(item.videoVal)){
+			var videoArr = item.videoVal.split(",");
+			var videoGb = '';
+			var videoUrl = '';
+			for(let i=0; i<videoArr.length; i++){
+				var videoInfo = videoArr[i].split(":");
+				videoGb = videoInfo[0];
+				videoUrl = videoInfo[1];
+			}
+			if(videoGb=='Y'){
+				tag += '<iframe id="child" className="pd_mov" src="https://www.youtube.com/embed/'+videoUrl+'"></iframe>';
+			}else{
+				tag += '<iframe id="child" className="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'"></iframe>';
+			}
+		}
 		tag += '			<p class="itemBrand">'+item.brandGroupNm+'</p>';
 		tag += '			<div class="itemName">'+item.goodsFullNm+'</div>';
 		tag += '			<p class="itemPrice">'+item.currPrice.addComma();

+ 1 - 1
src/main/webapp/ux/mo/css/common_m.css

@@ -1997,7 +1997,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 .app-only .guidance:after{content: '';position: absolute;top: 0;bottom: 15px;left: 10px;width: 100%;height: 100%;z-index: -1;}
 .app-only .guidance{
     box-shadow: 0 0px 30px rgb(0 0 0 / 20%), 0 0px 30px rgb(0 0 0 / 20%);
-	/* 마스크 미사용
+	/* 마스크 미사용 
 	mask-image: linear-gradient(to top right, transparent 49.5%, white 50.5%), linear-gradient(to top left, transparent 49.5%, white 50.5%), linear-gradient(white, white), linear-gradient(white, white);
     -webkit-mask-image: linear-gradient(to top right, transparent 49.5%, white 50.5%), linear-gradient(to top left, transparent 49.5%, white 50.5%), linear-gradient(white, white), linear-gradient(white, white);
 	mask-size: 100% 0%, 2vh 2vh, calc(100% - 1.9vh) 100%, 100% calc(100% - 1.9vh);

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

@@ -853,8 +853,14 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .dp .Bulletship_body{padding:0 2rem;}
 .dp .Bulletship_foot{padding:0 2rem;}
 /* 210420 */
-.app .gnb{background-color:#222222; z-index:99;}
+.app .gnb{background-color:#222222; position:relative; z-index:79;}
 .app .gnb .btn-expand::before{background: linear-gradient(90deg, rgba(0,0,0,0) 0%, #222222 100%);}
+/* 210421 */
+header .subs .dp_list_btn_gnbs {position: absolute;top: 0px;right: -2.0rem;width: 3.5rem;height: 4.5rem;z-index: 10;}
+header .subs .dp_list_btn_gnbs span i {display: block;position: absolute;left: 0;width: 100%;height: 100%;-webkit-transition: all 0.5s ease-out;transition: all 0.5s ease-out;}
+header .subs .dp_list_btn_gnbs span {display: block;width: 24px;height: 24px;margin: 0 auto;position: relative;}
+header .subs .dp_list_btn_gnbs span i {background: url(/images/mo/ico_btn_more.png) no-repeat;background-size: 1.3rem 0.733rem;background-position: 50% 50%;}
+header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-transform: rotate(-180deg);}
 
 
 
@@ -1934,7 +1940,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .filter_list .form_field div label span{color:#222!important;}
 .filter_list .form_field input[type="checkbox"] + label:before{left:auto; right:0}
 .filter_list .form_field input[type="checkbox"]:checked + label:after{left:auto; right:0}
-.filter_top{position: absolute; left:0; top:0; width:100%; padding:0 2rem; height:5rem; line-height:5rem; z-index:2;}
+.filter_top{position: absolute; left:0; top:0; width:100%; padding:0 2rem; height:5rem; line-height:5rem; z-index:10000;}
 .filter_top:after{content:''; display:block; clear:both;}
 .filter_top > div:nth-child(1){float:left;}
 .filter_top > div:nth-child(2){float:right;}
@@ -2147,7 +2153,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .br .pnb_mo > ul > li > a{font-size:1.6rem; color:#686868; font-weight:500; padding:0 1.2rem;}
 .br .pnb_mo > ul > li > a.on{color:#fff}
 .br .pnb_mo > button{background:url(/images/mo/ico_btn_expand.png) center top/1.8rem 2.0rem no-repeat; width:3.8rem; height:1.9rem; background-color:red; text-indent:-9999px; position:absolute; z-index:9; top:1.6rem; right:0; background-color:#222222;}
-.pnb_mo.fixed{-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-moz-transform: translate(0, 0);transform: translate(0, 0); position:fixed; top:0; width:100%; z-index:999;}
+.pnb_mo.fixed{-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-moz-transform: translate(0, 0);transform: translate(0, 0); position:fixed; top:0; width:100%; z-index:79;}
 .br_main{background-color:#fff;}
 /* br_main *
 /* br_main - 메인배너&info */

+ 6 - 5
src/main/webapp/ux/mo/css/style24_m.css

@@ -694,6 +694,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .modal.pop_full .modal-body {padding:0 2rem;}
 .modal.pop_full a.close-modal {background: url('/images/mo/ico_pop_cls.png') no-repeat center/100%; width: 1.6rem; height: 1.6rem;}
 .modal.photo_comment_popup {background: #f5f5f5; overflow:hidden; position: fixed; left: 0; top: 0;}
+.modal.photo_comment_popup:-webkit-full-screen {display: block;}
 .modal.photo_comment_popup .modal-dialog, .modal.photo_comment_popup .modal-content {height: 100%;}
 .modal.photo_comment_popup .modal-body {padding: 0 0; margin:0; height: 100%;}
 .modal.photo_comment_popup .modal-body .pop_cont {max-height:none; height: 100vh; height: calc(var(--vh, 1vh) * 100); overflow:hidden; position: relative; padding-bottom: 13rem; padding-top: 5.2rem;}
@@ -2096,8 +2097,8 @@ background-size:100%;}
 .od .paymentinfo .payinfo_blk a::after {clear:both; display:block; width:100%;}
 .od .paymentinfo .payinfo_blk a span {float:right; position:relative; padding-right:22px; color:#222; font-size:14px; text-indent: -999em;}
 .od .paymentinfo .payinfo_blk a span::after {content:''; position:absolute; right:0; top:2px; width:11px; height:9px; background:url('/images/pc/ico_mb_arrow.png') no-repeat 0% 100%; background-size:100% auto;}
-.od .paymentinfo .payinfo_blk .infotxt {display:none; max-height:190px; margin-top:20px; color:#888; font-size:14px; line-height:26px; overflow-y:scroll;}
-.od .paymentinfo .payinfo_blk.on {background:#f5f5f5;}
+.od .paymentinfo .payinfo_blk .infotxt {display:none; max-height:190px; margin-top:20px; color:#222; font-size:1.2rem; line-height:1.4; overflow-y:scroll;}
+.od .paymentinfo .payinfo_blk.on {background:#fff;}
 .od .paymentinfo .payinfo_blk.on a span::after {top:3px; transform:rotate(-180deg);}
 .od .paymentinfo .payinfo_blk.on .infotxt {display:block; margin:0px 1.9rem 1.9rem;}
 .od .area_paymentinfo .agree_payment {margin:4rem 0 4.8rem; color:#222; font-size:1.4rem; font-weight:200; text-align:center;}
@@ -2106,10 +2107,10 @@ background-size:100%;}
 
 .odPayment .infotxt table {word-break:keep-all;margin-top: 1.0rem;margin-bottom: 1.0rem;width: 100%;border-top: 1px solid #dddddd;}
 .odPayment .infotxt table th,
-.odPayment .infotxt table td {position:relative; padding:1.0rem 1.0rem; font-size:1.3rem;line-height: 1.4;color: #222222;letter-spacing:-0.025em;}
+.odPayment .infotxt table td {position:relative; padding:1.0rem 1.0rem; font-size:1.1rem;line-height: 1.4;color: #666;letter-spacing:-0.025em;}
 .odPayment .infotxt table td {border-bottom:1px solid #ddd;border-right: 1px solid #ddd;font-weight:200;}
 .odPayment .infotxt table td:last-child {border-right: 1px solid transparent;}
-.odPayment .infotxt table th {border-top: 0;border-bottom:1px solid #ddd;border-right:1px solid #ddd;font-weight: 400;text-align: center;background: #f5f5f5;}
+.odPayment .infotxt table th {border-top: 0;border-bottom:1px solid #ddd;border-right:1px solid #ddd;font-weight: 400;text-align: center;background: #fff; color:#666;}
 
 .od .extra_pay {padding:0px 30px 40px; margin-bottom: 20px; border-top:1px solid #222; border-bottom:1px solid #ddd;}
 .od .extra_pay .tit_pay {padding:30px 0px; line-height:1; font-size:24px; font-weight:500;}
@@ -2456,7 +2457,7 @@ main.container .od_gift .inner:last-child {padding-bottom: 0;}
 .od_gift .gift_banner.timeout dl dt, .od_gift .gift_banner.timeout dl dd {display: inline-block;}
 
 .od .gift_tab .tab_cont {background: #fff; padding:2.4rem 2rem;}
-.od .gift_tab .input_wrap {display: block;}
+.od .gift_tab .input_wrap {display: block; margin-bottom: 1rem;}
 .od .gift_tab .input_wrap .form_control {width: 100%; float:none;}
 .od .od_gift .gift_tab .desc_txt {margin:1rem 0 2.4rem;}
 .od .od_gift .gift_tab .tabIndex li {flex:1;}

+ 2 - 2
src/main/webapp/ux/pc/css/common.css

@@ -783,7 +783,7 @@ content: "〉";font-size: 12px;padding-left: 8px;
 .fgRDJH {padding: 0px 40px;font-size: 0px;box-sizing: border-box;}
 	@media (max-width: 1919px) and (min-width: 1401px){.fgRDJH {padding-left: 38px;padding-right: 38px;}}
 
-.itemLike {position: absolute;top: 20px;right: 18px;font-size: 0px;z-index: 2;width: 23px;height: 23px; background: url('/images/pc/ico_like.png');background-size: 46px;background-position:0px 0px;background-repeat: no-repeat;}
+.itemLike {position: absolute;top: 20px;right: 18px;font-size: 0px;z-index: 10;width: 23px;height: 23px; background: url('/images/pc/ico_like.png');background-size: 46px;background-position:0px 0px;background-repeat: no-repeat;}
 .itemLike::before, .itemLike::after {
 	content: "";position: absolute;top: 0px;right: 0px;width: 100%;height: 100%;
 	background-repeat: no-repeat;background-position: right top;background-size: contain;opacity: 0;transition: opacity 200ms ease 0s;
@@ -802,7 +802,7 @@ content: "〉";font-size: 12px;padding-left: 8px;
 .itemPic .pd_mov {z-index: 3;height: 100%;}
 .itemPic .pd_img {z-index: 2;transition: 0.5s;}
 /* .itemPic .pd_img {position: absolute;width: 100%;width: auto; height: auto;max-height: 500px;top: 50%;left: 50%;transform: translate(-50%,-50%);} */
-.itemOpt{z-index:10;position: absolute;bottom: -120px; left: 0; right: 0; width: 100%; height:111px;padding: 32px 0; text-align:center; color: #fff; background: rgb(0 0 0 / 0.8); }
+.itemOpt{z-index:3;position: absolute;bottom: -120px; left: 0; right: 0; width: 100%; height:111px;padding: 32px 0; text-align:center; color: #fff; background: rgb(0 0 0 / 0.8); }
 .itemOpt p{font-size: 12px;line-height: 1.2;padding-bottom: 15px;}
 .itemOpt ul{display: block;margin: 0 auto;width: auto;}
 .itemOpt ul li{font-size: 14px;line-height: 1.2;display: inline-block;margin-left: 10px;}

+ 8 - 2
src/main/webapp/ux/pc/css/layout.css

@@ -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 {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:3; 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;}
@@ -633,7 +633,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 .range .irs--round .irs-line::after {right:0;}
 .range .irs--round .irs-bar {background-color: #fd4802; height: 2px;}
 .range .irs--round .irs-handle {width:14px; height:14px; top:50%; margin-top:-3px; border-color: #fd4802; border: 2px solid #fd4802; box-shadow: none; cursor:pointer; margin-left: 0;}
-.range .irs--round .irs-grid {/*bottom:-5px;*/ z-index:-1;}
+.range .irs--round .irs-grid {/*bottom:-5px;*/ z-index:0;}
 .range .irs--round .irs-grid-text {display:block; color:#666; font-size:14px; font-weight:300;}
 .range .irs--round .irs-min,
 .range .irs--round .irs-max {display: none;}
@@ -2801,6 +2801,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.option_box [class^="opt_"] .select_custom.deal_opt_item .combo .list > li[aria-disabled="true"] a [class^="item"] {color:#bbb; text-decoration:line-through;} 
 	.option_box [class^="opt_"] .select_custom.deal_opt_item .combo .list > li[aria-disabled="true"] a img {opacity:0.3;}
 	.option_box .opt_select {}
+	.option_box .opt_select .select_custom .select .opt_price {display:none;}
 	.option_box .opt_set_select {}
 	.option_box .opt_set_select .set_option {margin-top:25px;}
 	.option_box .opt_set_select .set_option:first-child {margin-top:0}
@@ -2845,6 +2846,11 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.price_box + .btn_box .btn {height:60px; font-size:18px; font-weight:300;}
 	.price_box + .btn_box .btn:disabled{background:#aaa; border-color:#aaa; opacity:1;}
 
+	.pd_detail .btn_box .ui_row {margin-bottom: 0;}
+	.pd_detail .btn_box .ui_row [class^='ui_col_']:first-child {margin-right: 0;}
+	.pd_detail .btn_box .ui_row [class^='ui_col_']:last-child {margin-left: 0;}
+	.pd_detail .btn_box .btn {height:60px; font-size:18px; font-weight:300;}
+	.pd_detail .btn_box .btn:disabled{background:#aaa; border-color:#aaa; opacity:1;}
 
 	.pd_detail .area_desc .desc_wrap .npay_box {min-height:50px; margin-top:30px; background:#f5f5f5;}
 	.pd_detail .area_desc .desc_wrap .exinfo_box {margin-top:30px}

+ 1 - 1
src/main/webapp/ux/pc/css/main.css

@@ -577,7 +577,7 @@ header.minify .common_header.br_header::after {bottom:-565px;}
 .brand_main .brand_visual .swiper-button-next {right:70px; opacity:0.5;}
 .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;*/}
+.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;}
 .brand_main .post-visual .swiper-slide img {width:1080px; margin:0;}
 .brand_main .post-visual .swiper-slide .txtWrap {opacity:0; position:absolute; padding-left:0px; top:110px; bottom:auto; left:0px; right:auto; z-index:1;}
 .brand_main .post-visual .txtWrap dt {font-size:0; padding-bottom:0;}

+ 1 - 0
src/main/webapp/ux/plugins/gaga/gaga.infinite.scrollLayer.js

@@ -63,6 +63,7 @@ var gagaInfiniteScroll = {
 	},
 	scrollCheck : function() {
 		var obj = this.obj, stat = this.pageStatus;
+		alert("aaaaa");
 		if ($('[data-id="layer_infinite"]').scrollTop() + $('[data-id="layer_infinite"]').height() >= $('[data-id="layer_infinite_item"]').height() ) { // 더보기
 			if (stat.loadAlign == 'not') {
 				var pageLen = this.pageStatus.pageNum.length - 1;