Переглянути джерело

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

eskim 5 роки тому
батько
коміт
3fdb1fda22
33 змінених файлів з 1303 додано та 223 видалено
  1. 66 0
      src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java
  2. 9 1
      src/main/java/com/style24/front/biz/dao/TsfOrderDao.java
  3. 0 2
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  4. 115 0
      src/main/java/com/style24/front/biz/service/TsfDeliveryService.java
  5. 15 9
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  6. 4 10
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  7. 122 0
      src/main/java/com/style24/front/biz/web/TsfDeliveryController.java
  8. 23 6
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  9. 3 1
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  10. 4 0
      src/main/java/com/style24/persistence/domain/Goods.java
  11. 44 0
      src/main/java/com/style24/persistence/domain/SweetTracker.java
  12. 104 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml
  13. 13 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  14. 8 5
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  15. 20 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  16. 1 1
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  17. 69 38
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  18. 73 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListFormMob.html
  19. 107 45
      src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html
  20. 73 5
      src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html
  21. 14 14
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html
  22. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  23. 85 8
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  24. 48 36
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  25. 5 5
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  26. 1 1
      src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  28. 0 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb_back.html
  29. 119 8
      src/main/webapp/WEB-INF/views/web/order/OrderDcAmtInfoWeb.html
  30. 63 6
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  31. 9 2
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html
  32. 75 10
      src/main/webapp/biz/goods.js
  33. 9 6
      src/main/webapp/ux/pc/js/common-ui.js

+ 66 - 0
src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java

@@ -0,0 +1,66 @@
+package com.style24.front.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.SweetTracker;
+
+/**
+ * 배송 Dao
+ *
+ * @author moon
+ * @since 2021. 04. 25
+ */
+@ShopDs
+public interface TsfDeliveryDao {
+
+	
+	/**
+	 * 배송완료 상태값 변경 
+	 * @param SweetTracker
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 14
+	 */
+	void updateTbOrderDtlStat(SweetTracker sweetTracker);	
+	
+	/**
+	 * 스윗트래커 배송상태 등록 
+	 * @param SweetTracker
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 14
+	 */
+	void insertTbSweetTracker(SweetTracker sweetTracker);
+	
+	/**
+	 * 주문상세번호 조회  
+	 * @param SweetTracker
+	 * @return Collection<SweetTracker>
+	 * @author moon
+	 * @since 2021. 04. 14
+	 */	
+	Collection<SweetTracker> getOrdDtlNoList(SweetTracker sweetTracker);
+	
+	/**
+	 * 주문변경번호 조회  
+	 * @param SweetTracker
+	 * @return Collection<SweetTracker>
+	 * @author moon
+	 * @since 2021. 04. 14
+	 */	
+	Collection<SweetTracker> getOrdChgSqList(SweetTracker sweetTracker);
+	
+	/**
+	 * 주문변경 상태값 변경 
+	 * @param SweetTracker
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 14
+	 */
+	void updateOrdChgSqStat(SweetTracker sweetTracker);		
+	
+
+	int saveTemp(SweetTracker sweetTracker);			
+	
+}

+ 9 - 1
src/main/java/com/style24/front/biz/dao/TsfOrderDao.java

@@ -4,6 +4,7 @@ import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 
@@ -127,5 +128,12 @@ public interface TsfOrderDao {
 	 * @since 2021.04.13
 	 */
 	int getCheckFreegiftVal(Order order);
-	
+
+	/**
+	 * 상품권 현금영수증 정보 등록
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021.04.23
+	 */
+	void createGiftcartReceipt(GiftCard param);
 }

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

@@ -688,8 +688,6 @@ public class TsfCartService {
 					cart.setAmtTmtbSq(apply.getAmtTmtbSq());
 				}
 			}
-
-			log.info("FINAL AMT CHECK :::: {} / {} / {} / {}", cart.getCartSq(), cart.getApplyQtySectionYn(), cart.getApplyAmtSectionYn(), cart.getTmtbDcAmt());
 		}
 
 		//return result;

+ 115 - 0
src/main/java/com/style24/front/biz/service/TsfDeliveryService.java

@@ -0,0 +1,115 @@
+package com.style24.front.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.core.biz.dao.TscOrderChangeDao;
+import com.style24.core.biz.dao.TscOrderDao;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.core.support.env.TscConstants.OrderDetailStat;
+import com.style24.core.support.env.TscConstants.OrderChangeStat;
+
+import com.style24.front.biz.dao.TsfDeliveryDao;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.SweetTracker;
+import com.style24.persistence.domain.OrderChange;
+
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 배송 Service
+ *
+ * @author moon
+ * @since 2021. 04. 13
+ */
+@Service
+@Slf4j
+public class TsfDeliveryService {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private TscOrderChangeDao orderChangeDao;
+	
+	@Autowired
+	private TsfDeliveryDao deliveryDao;
+
+	@Autowired
+	private TscOrderDao orderDao;	
+	
+	/**
+	 * 스윗트래커 배송상태 등록 및 주문상세상태 변경 
+	 * @param  SweetTracker
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 13
+	 */
+	@Transactional("shopTxnManager")
+	public void saveDelvStat(SweetTracker sweetTracker) {
+
+		// 배송완료건 상태값 변경   
+		if(6 == sweetTracker.getLevel()) {
+			// 주문상세번호 조회 
+			Collection<SweetTracker> list = deliveryDao.getOrdDtlNoList(sweetTracker);
+			for(SweetTracker data : list) {
+				// 주문상태값 변경
+				data.setUpdNo(0);
+				data.setRegNo(0);
+				data.setOrdDtlStat(OrderDetailStat.DELIVERY_COMPLETE.value());  // 배송완료 G013_60
+				deliveryDao.updateTbOrderDtlStat(data);
+				// 주문상세이력
+				Order order = new Order();
+				order.setOrdDtlNo(data.getOrdDtlNo());
+				order.setUpdNo(0);
+				order.setRegNo(0);
+				orderDao.createOrderDetailHst(order);				
+			}
+			
+			// 주문변경번호 조회 
+			Collection<SweetTracker> chgList = deliveryDao.getOrdChgSqList(sweetTracker);
+			for(SweetTracker chgSq : chgList ) {
+				
+				// 주문상세변경 상태값 변경 
+				chgSq.setUpdNo(0);
+				chgSq.setRegNo(0);
+				chgSq.setChgStat(OrderChangeStat.WITHDRAW_GOODS_CHECK.value());  // 상품검수중  G685_31
+				deliveryDao.updateOrdChgSqStat(chgSq);
+				
+				// 주문상세변경 이력 
+				OrderChange ordChg = new OrderChange();
+				ordChg.setRegNo(0);
+				ordChg.setUpdNo(0);
+				ordChg.setOrdChgSq(chgSq.getOrdChgSq()); 
+				ordChg.setOrdDtlNo(chgSq.getOrdDtlNo()); 
+				orderChangeDao.createOrderChangeDetailHst(ordChg);
+			}
+		}
+		
+		// 	TB_SWEET_TRACKER 등록 
+		sweetTracker.setDelvLevel(sweetTracker.getLevel()+"");
+		sweetTracker.setDelvWhere(sweetTracker.getWhere());
+		deliveryDao.insertTbSweetTracker(sweetTracker);
+	}
+	
+	/**
+	 * 스윗트래커 배송상태 등록 및 주문상세상태 변경 
+	 * @param  SweetTracker
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 13
+	 */
+	@Transactional("shopTxnManager")
+	public int saveTemp(String msg) {
+		int rtn=0;
+		SweetTracker tmp = new SweetTracker();
+		tmp.setMan(msg);
+		deliveryDao.saveTemp(tmp);
+		return rtn;
+	}
+
+}

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

@@ -12,6 +12,8 @@ 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 org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.kcp.J_PP_CLI_N;
@@ -348,8 +350,10 @@ public class TsfOrderService {
 				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
 					coreKcpService.kcpCancel(result);
 				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
+					param.setLeftAmt(0);
 					coreKakaoPayService.kakaoPayRollBack(param);
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
+					param.setLeftAmt(0);
 					coreNaverPayService.naverPayRollBack(param);
 				} else {
 					throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
@@ -626,7 +630,8 @@ public class TsfOrderService {
 	 */
 	public GiftCard kcpCashReceiptsRequest(GiftCard param) {
 		GiftCard result = new GiftCard();
-		String cust_ip = TsfSession.getInfo().getIpAddr();
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
+		String cust_ip = request.getRemoteAddr();
 		String reqTx = "pay";		// 현금영수증 신청
 		String txCd = "07010000";	// 현금영수증 등록 요청
 		String ordPhnno = "";
@@ -635,7 +640,7 @@ public class TsfOrderService {
 		}
 
 		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( "", 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" ) ;
@@ -643,15 +648,15 @@ public class TsfOrderService {
 		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, "user_type", "PGNW") ;
 		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( rcpt_data_set, "amt_sup"  , (param.getUsGfcdAmt() - ((int)(param.getUsGfcdAmt() / 11))) + "") ;		// 공급가액
+		c_PayPlus.mf_set_us( rcpt_data_set, "amt_svc"  , "0") ;		// 봉사료
+		c_PayPlus.mf_set_us( rcpt_data_set, "amt_tax"  , ((int)(param.getUsGfcdAmt() / 11)) + "") ;		// 부가가치세 (공급가액의 10%)
+		c_PayPlus.mf_set_us( rcpt_data_set, "pay_type" , "PAXX") ;
 
 		// 주문 정보
 		c_PayPlus.mf_set_us( ordr_data_set, "ordr_idxx", param.getOrdNo() + "") ;		// 주문번호
@@ -659,13 +664,12 @@ public class TsfOrderService {
 		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");
+		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), "", txCd, cust_ip, String.valueOf(param.getOrdNo()), env.getProperty("pg.kcp.log.level"), "0");
 
 		// 결과
 		result.setResultCd(c_PayPlus.m_res_cd);
@@ -677,9 +681,11 @@ public class TsfOrderService {
 			result.setAuthNo(c_PayPlus.mf_get_res("receipt_no"));
 
 			// 성공시 TB_GIFTCARD_RECEIPT INSERT
+			orderDao.createGiftcartReceipt(result);
 		}
 
 		// 성공이든 실패이든 로그성 데이터 TB_GIFTCARD_RECEIPT_API INSERT
+		coreOrderDao.createGiftcartReceiptApi(result);
 
 		return result;
 	}

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

@@ -24,6 +24,7 @@ import org.springframework.web.servlet.ModelAndView;
 import org.thymeleaf.util.StringUtils;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
@@ -67,6 +68,9 @@ public class TsfCartController extends TsfBaseController {
 	@Autowired
 	private TscOrderService coreOrderService;
 
+	@Autowired
+	private TscKcpService coreKcpService;
+
 	@Autowired
 	private TsfOrderService orderService;
 
@@ -154,16 +158,6 @@ 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");
 	}
 

+ 122 - 0
src/main/java/com/style24/front/biz/web/TsfDeliveryController.java

@@ -0,0 +1,122 @@
+package com.style24.front.biz.web;
+
+import javax.servlet.http.HttpServletResponse;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Enumeration;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.parameter.GagaMapList;
+import com.style24.persistence.domain.SweetTracker;
+import com.style24.front.biz.service.TsfDeliveryService;
+import com.style24.front.support.controller.TsfBaseController;
+import com.google.gson.JsonObject;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 배송 Controller
+ *
+ * @author moon
+ * @since 2021. 04. 25
+ */
+@Controller
+@RequestMapping("/delivery")
+@Slf4j
+public class TsfDeliveryController extends TsfBaseController {
+
+
+	@Autowired
+	private TsfDeliveryService deliveryService;
+
+	/**
+	 * 스윗트래커 
+	 *
+	 * @param String
+	 * @return  
+	 * @author moon
+	 * @since 2021. 04. 13
+	 */
+	@PostMapping(value = "/sweettracker/response" )
+	@ResponseBody
+	public String sweetTrackerResponse(SweetTracker  sweetTracker) throws Exception {
+		
+		deliveryService.saveTemp("들어옴");
+		
+		String msg = "";
+//		Enumeration  enums = request.getParameterNames();
+//		while (enums.hasMoreElements()) {
+//			String name = (String) enums.nextElement();
+//			log.info("name: "+name);
+//			msg = msg+ name+": "+request.getParameter(name)+" ";
+//		}
+//		
+//		deliveryService.saveTemp(msg);
+//		
+//		String fid  = request.getParameter("fid");
+//		String courier_code  = request.getParameter("courier_code");
+//		String invoice_no  = request.getParameter("invoice_no");
+//		String level  = request.getParameter("level");
+//		String time_trans  = request.getParameter("time_trans");
+//		String time_sweet  = request.getParameter("time_sweet");
+//		String where  = request.getParameter("where");
+//		String telno_office  = request.getParameter("telno_office");
+//		String telno_man  = request.getParameter("telno_man");
+//		String details  = request.getParameter("details");
+//		String recv_addr  = request.getParameter("recv_addr");
+//		String recv_name  = request.getParameter("recv_name");
+//		String send_name  = request.getParameter("send_name");
+//		String man  = request.getParameter("man");
+//		String estmate  = request.getParameter("estmate");
+//		
+//		String msg2 = "fid: "+fid+" courier_code:"+courier_code+" invoice_no:"+invoice_no+" level:"+level+" time_trans:"+time_trans;
+//		
+//		deliveryService.saveTemp(msg2);
+//		
+//		
+//		
+//		SweetTracker  sweetTracker = new SweetTracker();
+//		sweetTracker.setFid(request.getParameter("fid"));
+//		sweetTracker.setCourier_code(request.getParameter("courier_code"));
+//		sweetTracker.setInvoice_no(request.getParameter("invoice_no"));
+//		sweetTracker.setLevel(Integer.parseInt(request.getParameter("level")));
+//		sweetTracker.setTime_trans(request.getParameter("time_trans"));
+//		sweetTracker.setTime_sweet(request.getParameter("time_sweet"));
+//		sweetTracker.setWhere(request.getParameter("where"));
+//		sweetTracker.setTelno_office(request.getParameter("telno_office"));
+//		sweetTracker.setTelno_man(request.getParameter("telno_man"));
+//		sweetTracker.setDetails(request.getParameter("details"));
+//		sweetTracker.setRecv_addr(request.getParameter("recv_addr"));
+//		sweetTracker.setRecv_name(request.getParameter("recv_name"));
+//		sweetTracker.setSend_name(request.getParameter("send_name"));
+//		sweetTracker.setMan(request.getParameter("man"));
+//		sweetTracker.setEstmate(request.getParameter("estmate"));
+//		
+		
+		deliveryService.saveTemp(sweetTracker.toString());
+		
+		JsonObject rtn = new JsonObject();
+		
+		
+		try {
+			deliveryService.saveDelvStat(sweetTracker);
+			
+			rtn.addProperty("code", true); 
+			rtn.addProperty("message", "success"); 
+		} catch(Exception e) {
+			rtn.addProperty("code", false); 
+			rtn.addProperty("message", "fail - invalid fid"); 
+		}
+		
+		return rtn.toString();
+	}	
+}

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

@@ -381,14 +381,31 @@ public class TsfDisplayController extends TsfBaseController {
 				mav.addObject("planningList", displayService.getContentsList(contents));
 			} else if ("SCM002".equals(cateMain.getContentsLoc())) {
 				// 신상품
-				cate.setContentsLoc("SCM002");
-				cate.setMaxRow(20);
-				mav.addObject("newGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+				Contents contents = new Contents();
+				contents.setContentsLoc("SCM002");
+				contents.setCateNo(cate.getCate1No());
+				contents.setMaxRow(1);
+				Collection<Contents> conList = displayService.getContentsList(contents);
+				mav.addObject("newGoodsList", null);
+
+				for(Contents contentsData : conList){
+					cate.setContentsLoc("SCM002");
+					cate.setMaxRow(20);
+					mav.addObject("newGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+				}
 			} else if ("SCM003".equals(cateMain.getContentsLoc())) {
 				// 베스트품
-				cate.setContentsLoc("SCM003");
-				cate.setMaxRow(20);
-				mav.addObject("bestGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+				Contents contents = new Contents();
+				contents.setContentsLoc("SCM003");
+				contents.setCateNo(cate.getCate1No());
+				contents.setMaxRow(1);
+				Collection<Contents> conList = displayService.getContentsList(contents);
+				mav.addObject("bestGoodsList", null);
+				for(Contents contentsData : conList){
+					cate.setContentsLoc("SCM003");
+					cate.setMaxRow(Integer.parseInt(contentsData.getStrVar1()));
+					mav.addObject("bestGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+				}
 			}
 
 			cateMainLayoutList.add(cateMain);

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

@@ -4,6 +4,8 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import javax.servlet.http.HttpServletRequest;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
@@ -144,7 +146,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 02. 04
 	 */
 	@GetMapping({"/main/form", "/order/list/form"})
-	public ModelAndView mypageOrderListForm(@RequestBody(required = false) Order order) {
+	public ModelAndView mypageOrderListForm(HttpServletRequest request, @RequestBody(required = false) Order order) {
 		ModelAndView mav = new ModelAndView();
 
 		if (order == null) {

+ 4 - 0
src/main/java/com/style24/persistence/domain/Goods.java

@@ -197,5 +197,9 @@ public class Goods extends TscBaseDomain {
 	private String goodsSql;	// 오늘본상품SQL
 
 	private String likeIt;			// 위시리스트에담긴상품
+	private String videoVal;
+	private String colorChips;
+	private String sizes;
+	private String icon;
 
 }

+ 44 - 0
src/main/java/com/style24/persistence/domain/SweetTracker.java

@@ -0,0 +1,44 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 스윗트래커 Domain
+ * 
+ * @author moon
+ * @since 2021. 04. 13
+ */
+@SuppressWarnings("serial")
+@Data
+public class SweetTracker extends TscBaseDomain {
+
+	private String fid;            // 식별값
+	private String invoice_no;	   // 운송장번호
+	private String time_trans; 	   // 택배사 처리시간
+	private String time_sweet; 	   // 스윗트래커 등록시간
+	private String where; 		   // 택배 위치
+	private String telno_office;   // 사업소 기반 전화번호
+	private String telno_man; 	   // 배송기사 전화번호
+	private String details; 	   // 배송상세 정보
+	private String recv_addr; 	   // 수취인 주소
+	private String recv_name; 	   // 수취인 이름
+	private String send_name; 	   // 발신인 이름
+	private String man; 		   // 배송기사 이름
+	private String estmate;        // 배송예정 시간
+	private String delvLevel;
+	private String delvWhere; 
+	private String chgStat;
+	private String ordDtlStat; 
+	private String courier_code;
+	private String secret_value;
+	
+	
+	private Integer level; 	  // 배송단계(1~6단계)
+	private Integer ordDtlNo;
+	private Integer ordChgSq;
+	private Integer tmp_sq;
+	
+
+}

+ 104 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml

@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.front.biz.dao.TsfDeliveryDao">
+
+	<!-- 스윗트래커정보 등록   -->
+	<insert id="insertTbSweetTracker" parameterType="SweetTracker" >
+		/*TssDelivery.insertTbSweetTracker*/
+		INSERT INTO TB_SWEET_TRACKER 
+		(
+			  SHIP_COMP_CD		-- 택배사코드
+			, INVOICE_NO		-- 운송장번호			
+			, DELV_LEVEL		-- 배송단계  			
+			, TIME_TRANS		-- 택배사 처리시간		
+			, TIME_SWEET		-- 스윗트래커 등록시간	
+			, DELV_WHERE		-- 택배 위치			
+			, TELNO_OFFICE		-- 사업소 기반 전화번호	
+			, TELNO_MAN			-- 배송기사 전화번호		
+			, DETAILS			-- 배송상세 정보		
+			, RECV_ADDR			-- 수취인 주소			
+			, RECV_NAME			-- 수취인 이름			
+			, SEND_NAME			-- 발신인 이름			
+			, MAN				-- 배송기사 이름		
+			, ESTMATE			-- 배송예정 시간		
+			, REG_DT			-- 등록일시
+		)
+		VALUES
+		(
+			  #{courier_code}
+			, #{invoice_no}		-- 운송장번호			
+			, #{delvLevel}		-- 배송단계  			
+			, #{time_trans}		-- 택배사 처리시간		
+			, #{time_sweet}		-- 스윗트래커 등록시간	
+			, #{delvWhere}		-- 택배 위치			
+			, #{telno_office}	-- 사업소 기반 전화번호	
+			, #{telno_man}		-- 배송기사 전화번호		
+			, #{details}		-- 배송상세 정보		
+			, #{recv_addr}		-- 수취인 주소			
+			, #{recv_name}		-- 수취인 이름			
+			, #{send_name}		-- 발신인 이름			
+			, #{man}			-- 배송기사 이름		
+			, #{estmate}		-- 배송예정 시간		
+			, NOW()
+		) ON DUPLICATE KEY
+		  UPDATE
+		  REG_DT = NOW()
+	</insert>
+
+	<!-- 주문상세번호 조회 -->	
+	<select id="getOrdDtlNoList" resultType="SweetTracker">
+		/*TssDelivery.getOrdDtlNoList*/
+		SELECT ORD_DTL_NO FROM TB_ORDER_DETAIL WHERE INVOICE_NO = #{invoice_no}
+		
+	</select>
+	
+	<!-- 주문상세 상태값 변경    -->
+	<update id="updateTbOrderDtlStat" parameterType="SweetTracker" >
+		/*TssDelivery.updateTbOrderDtlStat*/
+		UPDATE TB_ORDER_DETAIL SET
+			  ORD_DTL_STAT = #{ordDtlStat}
+			, UPD_NO       = #{regNo}
+			, UPD_DT       = NOW()
+		WHERE ORD_DTL_NO   = #{ordDtlNo}
+	</update>	
+	
+	
+	<!-- 주문변경번호 조회 -->	
+	<select id="getOrdChgSqList" resultType="SweetTracker">
+		/*TssDelivery.getOrdChgSqList*/
+		SELECT A.ORD_CHG_SQ , B.ORD_DTL_NO
+		  FROM TB_ORDER_CHANGE A 
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ 
+		 WHERE A.WD_INVOICE_NO  =  #{invoice_no}
+		   AND B.DEL_YN = 'N'
+	</select>
+	
+	<!-- 주문상세 상태값 변경    -->
+	<update id="updateOrdChgSqStat" parameterType="SweetTracker" >
+		/*TssDelivery.updateOrdChgSqStat*/
+		UPDATE TB_ORDER_CHANGE_DETAIL SET
+			  CHG_STAT = #{chgStat}  -- G685_31
+			, UPD_NO   = #{regNo}
+			, UPD_DT   = NOW()
+		WHERE ORD_CHG_SQ = #{ordChgSq}
+		  AND ORD_DTL_NO = #{ordDtlNo}
+	</update>	
+
+	
+	<!-- 주문상세 상태값 변경    -->
+	<insert id="saveTemp" parameterType="SweetTracker" keyProperty="tmp_sq">
+		/*TssDelivery.saveTemp*/
+		insert into tb_sw_temp 
+		(
+			  msg
+			, reg_dt 
+		)values
+		(
+			#{man}
+			, now()
+		)
+	</insert>	
+	
+	
+
+</mapper>

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

@@ -1019,6 +1019,19 @@
 		AND    OPT_CD1 = G.MAIN_COLOR_CD
 		AND    DISP_YN = 'Y'
 		) AS SIZES /*사이즈*/
+		, (
+		SELECT GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',')
+		FROM   (
+		SELECT GB.BENEFIT_GB
+		, CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		       WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		       WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		       ELSE '신상' END AS BENEFIT_NM
+		, RANK() OVER(ORDER BY GB.BENEFIT_GB, GB.GOODS_CD) AS NUMB
+		FROM   TB_GOODS_BENEFIT GB
+		WHERE  GB.GOODS_CD = G.GOODS_CD
+		) Z
+		) AS ICON
 		, FORMAL_GB
 		, REG_DT
 		, NUMB

+ 8 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1129,11 +1129,14 @@
 		                 , ROW_NUMBER() OVER(ORDER BY GS.SELL_WEEK_QTY DESC
 		                                            , G.GOODS_CD) AS NUMB
 		                     </when>
-							 <when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007'"> <!-- md추천 -->
-						 , ROW_NUMBER() OVER(ORDER BY CTG.DISP_ORD
-								 , G.REG_DT DESC
-								 , G.GOODS_CD) AS NUMB
-							 </when>
+		                     <when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007'"> <!-- md추천 -->
+		                 , ROW_NUMBER() OVER(ORDER BY CTG.DISP_ORD
+		                 , G.REG_DT DESC
+		                 , G.GOODS_CD) AS NUMB
+		                     </when>
+		                     <when test="contentsLoc == 'SCM002' or contentsLoc == 'SCM003'"> <!-- md추천 -->
+		                  , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD ,G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC) AS NUMB
+		                     </when>
 		                     <otherwise>
 		                 , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
 		                                            , G.REG_DT DESC

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

@@ -496,5 +496,24 @@
 		    AND    FV.DEL_YN = 'Y'
 		) A
 	</select>
-	
+
+	<!-- 상품권 현금영수증 정보 등록 -->
+	<insert id="createGiftcartReceipt" parameterType="GiftCard">
+		/* TsfOrder.createGiftcartReceipt : 상품권 현금영수증 정보 등록 */
+		INSERT INTO TB_GIFTCARD_RECEIPT (
+		      ORD_NO
+		    , TRADE_NO
+		    , AUTH_NO
+		    , AMT
+		    , REG_DT
+		    , UPD_DT
+		) VALUES (
+		      #{ordNo}
+		    , #{tradeNo}
+		    , #{authNo}
+		    , #{usGfcdAmt}
+		    , NOW()
+		    , NOW()
+		)
+	</insert>
 </mapper>

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

@@ -703,7 +703,7 @@
 			$(document).ready(function() {
 				setLoginInfo();
 
-				if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
+				if([[${!order.shotCanYn.equals('Y')}]]) {
 					$(".shotDelvSelect").hide();
 				}
 

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

@@ -16,7 +16,7 @@
 <body>
 
 <th:block layout:fragment="content">
-<main role="" id="" class="container my">
+<main role="" id="mypageOrderDetailForm" class="container my">
 	<section class="content my_order">
 		<div class="inner wide bg_beige">
 			<div class="order_number">
@@ -509,13 +509,13 @@
 											<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="select_custom delivery_list">
 															<div class="combo">
 																<div class="select" th:text="${deliveryAddrInfo.delvMemo}">선택</div>
 																<ul class="list">
@@ -538,7 +538,7 @@
 											</div>
 										</th:block>
 										<!--  //배송메모정보변경가능 -->
-										<!--  배송메모정보변경불가 -->
+										<!--  배송메모정보변경불가 
 										<th:block th:unless="${allCanYn == 'Y'}">
 											<div class="ship_request">
 												<dt>배송요청 사항</dt>
@@ -546,6 +546,10 @@
 											</div>
 										</th:block>
 										<!--  //배송메모정보변경불가 -->
+										<div class="ship_request">
+											<dt>배송요청 사항</dt>
+											<dd th:text="${deliveryAddrInfo.delvMemo}" id="delvMemo"></dd>
+										</div>
 									</dl>
 								</div>
 							</div>
@@ -696,7 +700,7 @@
 	let deliveryAddrInfo 	= [[${deliveryAddrInfo}]];
 	let kcpReceiptUrl 		= [[${@environment.getProperty('pg.kcp.receipt.url')}]];
 	let jsonObj 			= {};
-	let delvMemo			= [[${deliveryAddrInfo.delvMemo}]];
+	//let delvMemo			= [[${deliveryAddrInfo.delvMemo}]];
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
@@ -711,6 +715,7 @@
 		}
 		
 		// 2021.04.22 배송지정보수정
+		/*
 		var delvMemoArr = ["문 앞", "직접 받고 부재 시 문 앞", "경비실", "택배함"];
 		var tempMemo = true;
 		
@@ -748,6 +753,49 @@
 				$(".ship_etc").hide();
 			}
 		});
+		*/
+	});
+	
+	// 2.1 회원 배송지변경 팝업열기
+	$('#btn_adrsChange_pop').on("click", function(){
+		// 회원인경우
+		if (isLogin == true) {
+			$.ajax( {
+				type		: "POST",
+				url 		: '/common/delvAddrChangePop',
+				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) {
+					$("#adrsChangePop .modal-dialog .modal-content").html(result);
+					$("#adrsChangePop").modal("show");
+				}
+			});
+		}
+		// 비회원인경우
+		else {
+			$.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");
+				}
+			});	
+		}
 	});
 	
 	// 전체취소 버튼 클릭 이벤트
@@ -827,51 +875,34 @@
 
 	// 배송지 정보 설정
 	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;
+		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);
+		$('#mypageOrderDetailForm .recipNm').text(recipNm);
 		
 		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;
+		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) {
+			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) {

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

@@ -55,14 +55,65 @@
 
 <main role="" id="" class="container my">
 	<section class="content my_order">
+		<!-- only 마이페이지메인 -->
+		<div class="inner bg_gray">
+			<div class="mem_info clear">
+				<div class="mem_rank">
+					<div class="rank_icon vip">V</div>
+					<div class="mem_name"><strong th:text="${customerInfo.custNm}"></strong>님</div>
+					<a href="javascript:void(0);" class="rank_txt" th:text="${customerInfo.custGradeNm}" onclick="fnGoToCustomerBenefit();"></a> <!-- 210408_a태그 변경 | 회원등급혜택 페이지 링크 이동-->
+					<button type="button" id="btn_coupon_down" class="btn cou_btn" onclick="fnDownloadCoupon();">등급 쿠폰 다운로드</button> <!-- 210409_추가 : btn_coupon_down id 추가 -->
+				</div>
+				<div class="mem_box">
+					<div class="mem_point">
+						<p class="tit">STYLE포인트</p>
+						<em th:text="${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')}"></em>P
+					</div>
+					<div class="mem_gift">
+						<p class="tit">상품권</p>
+						<span>
+							<em th:text="${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')}"></em>원
+						</span>
+					</div>
+					<div class="mem_coupon">
+						<p class="tit">쿠폰</p>
+						<span>
+							<em id="couponCnt" th:text="${couponCnt}"></em>장
+						</span>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="inner">
+			<div class="order_info clear">
+				<ul class="clear">
+					<li>
+						<div class="count"><span id="shippingCount" th:text="${orderCount.shippingCount}"></span></div>
+						<div class="or_p">배송 중</div>
+					</li>
+					<li>
+						<div class="count"><span id="shipCompleteCount" th:text="${orderCount.shipCompleteCount}"></span></div>
+						<div class="or_p">배송 완료</div>
+					</li>
+					<li>
+						<div class="count"><span id="orderCreCount" th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount + orderCount.confirmCount}">7</span></div>
+						<div class="or_p">취소/교환/반품</div>
+					</li>
+				</ul>
+			</div>
+		</div>
+		<!-- //only 마이페이지메인 -->
+		
+		<!-- onlhy 주문목록 -->
 		<div class="inner">
 			<div class="order_sort">
 				<a href="javascript:void(0);" class="od_date_btn">최근 3개월</a>
 				<a href="javascript:void(0);" class="od_status_btn">전체</a>
 			</div>
 		</div>
+		<!-- onlhy 주문목록 -->
 		
-		<!-- 주문목록 -->
+		<!-- common 주문목록 -->
 		<div data-id="layer_infinite_item" >
 			<section id="infiniteContainer">
 				<div id="listBoxOuter">
@@ -71,6 +122,27 @@
 				</div>
 			</section>
  		</div>
+ 		<!-- common 주문목록 -->
+ 		
+ 		<!-- only 마이페이지메인 -->
+ 		<div class="inner wide">
+			<div class="lnb_list">
+				<ul>
+					<li><a href="javascript:void(0);" class="on">주문확인/배송조회</a></li>
+					<li><a href="javascript:void(0);">취소/반품/교환내역</a></li>
+					<li><a href="javascript:void(0);">재입고 알림 내역</a></li>
+					<li><a href="javascript:void(0);">쿠폰</a></li>
+					<li><a href="javascript:void(0);">STYLE 포인트</a></li>
+					<li><a href="javascript:void(0);">상품권</a></li>
+					<li><a href="javascript:void(0);">리뷰</a></li>
+					<li><a href="javascript:void(0);">배송지 관리</a></li>
+					<li><a href="javascript:void(0);">위시리스트</a></li>
+					<li><a href="javascript:void(0);">내정보 관리</a></li>
+					<li><a href="javascript:void(0);">회원 탈퇴</a></li>
+				</ul>
+			</div>
+		</div>
+		<!-- //only 마이페이지메인 -->
  		
 	</section>
 </main>

+ 107 - 45
src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html

@@ -57,13 +57,13 @@
 							</dt>
 							<dd>
 								<div class="sale_coupon_box">
-									<th:block th:if="${goodsApplyCpnList.size() > 0} or ${cartCpnList.size() > 0}">
-										<div>
-											<button type="button" id="btn_couponModify_pop" class="btn btn_default btn_sm">
-												<span>쿠폰변경</span>
-											</button>
-										</div>
-									</th:block>
+									<input type="hidden" name="custCpnCnt" th:value="${goodsApplyCpnList.size()} + ${cartCpnList.size()}">
+									<input type="hidden" name="custDelvCpnCnt" th:value="${delvCpnList.size()}">
+									<div>
+										<button type="button" id="btn_couponModify_pop" class="btn btn_default btn_sm">
+											<span>쿠폰변경</span>
+										</button>
+									</div>
 									<div class="form_field">
 										<div class="input_wrap">
 											<input type="text" class="form_control" id="serialCpnNm" maxlength="13" placeholder="할인코드를 입력해주세요.">
@@ -77,6 +77,7 @@
 						</div>
 						
 						<!-- 배송비쿠폰 -->
+						<!-- 배송비쿠폰이 존재 -->
 						<th:block th:if="${delvCpnList.size() > 0}">
 							<div>
 								<dt>배송비 쿠폰</dt>
@@ -95,55 +96,43 @@
 											</div>
 										</div>
 										<!-- 쿠폰 선택 전 -->
-										
-										<!-- 쿠폰 선택 적용 시 
-										<div class="form_field">
-											<div class="select_custom coupon_list">
-												<div class="combo">
-													<div class="select">
-														<div class="dlvr_coupon">
-															<p class="name">TBJ 배송비 무료쿠폰</p>
-															<p class="txt"><span>30,000</span>원 이상 구매시 최대 <span>3,000</span>원 할인</p>
-															<p class="discount"><span>15,000</span>원 할인</p>
-														</div>
-													</div>
-												</div>
+									</div>
+								</dd>
+							</div>
+						</th:block>
+						<!-- //배송비쿠폰이 존재 -->
+						<!-- 배송비쿠폰이 미존재 -->
+						<th:block th:if="${delvCpnList.size() < 1}">
+							<!-- 적용 쿠폰 없을 시 -->
+							<div class="form_field">
+								<div class="select_custom" disabled>
+									<div class="combo">
+										<div class="select">
+											<div class="dlvr_coupon">
+												<p class="empty">적용 가능한 쿠폰이 없습니다</p>
 											</div>
 										</div>
-										<!-- //쿠폰 선택 적용 시 -->
-										
-										<!-- 적용 쿠폰 없을 시
-										<div class="form_field">
-											<div class="select_custom" disabled>
-												<div class="combo">
-													<div class="select">
-														<div class="dlvr_coupon">
-															<p class="empty">적용 가능한 쿠폰이 없습니다</p>
-														</div>
-													</div>
-													
-													<ul class="list">
-														<li class="selected">
-															<div class="dlvr_coupon">
-																<p class="empty">적용 가능한 쿠폰이 없습니다</p>
-															</div>
-														</li>
-													</ul>
+										<ul class="list">
+											<li class="selected">
+												<div class="dlvr_coupon">
+													<p class="empty">적용 가능한 쿠폰이 없습니다</p>
 												</div>
-											</div>
-										</div>      
-										<!-- //적용 쿠폰 없을 시 -->
+											</li>
+										</ul>
 									</div>
-								</dd>
+								</div>
 							</div>
+							<!-- //적용 쿠폰 없을 시 -->
 						</th:block>
+						<!-- //배송비쿠폰이 미존재 -->
+						
 						<!-- //배송비쿠폰 -->
 						
 					</dl>
 				</div>
 				
 				<!-- 선포인트금액, 포인트금액, 상품권금액 0보다 클때 적용 -->
-				<th:block th:if="${prePntDcAmt} > 0 or ${rmPntAmt} > 0 or ${rmGfcdAmt} > 0">
+				<!-- <th:block th:if="${prePntDcAmt} > 0 or ${rmPntAmt} > 0 or ${rmGfcdAmt} > 0"> -->
 					<div class="area_selpoint">
 						<dl>
 							<!-- 선포인트금액 0보다 클때 적용 -->
@@ -167,6 +156,27 @@
 								</div>
 							</th:block>
 							<!-- //선포인트금액 0보다 클때 적용 -->
+							<!-- 선포인트금액 1보다 작을때 적용 -->
+							<th:block th:if="${prePntDcAmt} < 1">
+								<div>
+									<dt>선 포인트 사용</dt>
+									<dd>
+										<div class="form_field">
+											<input type="hidden" name="rmPrePntAmt" th:value="${prePntDcAmt}"/>
+											<div>
+												<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint11" value="N"> 
+												<label for="rdi-beforpoint1"><span>사용 안함</span></label>
+											</div>
+											<div>
+												<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint12" value="Y" checked>
+												<label for="rdi-beforpoint2"><span>사용함</span></label> 
+												<span class="useable_point">(<em th:text="|${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}P|"></em>&nbsp;사용 가능)</span>
+											</div>
+										</div>
+									</dd>
+								</div>
+							</th:block>
+							<!-- //선포인트금액 1보다 작을때 적용 -->
 							
 							<!-- 포인트금액 0보다 클때 적용 -->
 							<th:block th:if="${rmPntAmt} > 0">
@@ -202,6 +212,40 @@
 								</div>
 							</th:block>
 							<!-- //포인트금액 0보다 클때 적용 -->
+							<!-- 포인트금액 1보다 작을때 적용 -->
+							<th:block th:if="${rmPntAmt} < 1">
+								<div>
+									<dt>STYLE24 포인트 <span>결제금액의 최대 40%까지 사용가능</span></dt>
+									<dd>
+										<div class="form_field">
+											<input type="hidden" name="rmPntAmt" th:value="${rmPntAmt}"/>
+											<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+											<th:block th:if="${orgGoodsSumAmt} >= 30000">
+												<div class="input_wrap">
+													<input type="text" name="pntDcAmtStr" class="form_control" maxlength="11" placeholder="사용할 포인트를 입력해주세요." disabled="" onkeyup="inputNumberFormat(this);">
+													<button type="button" class="btn btn_dark btn_sm" id="btn_point_apply">
+														<span>적용</span>
+													</button>
+												</div>
+											</th:block>
+											<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+											
+											<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
+											<th:block th:if="${orgGoodsSumAmt} < 30000">
+												<div class="input_wrap">
+													<input type="text" class="form_control" maxlength="" placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다." disabled="" onfocus="this.blur();">
+													<button type="button" class="btn btn_dark btn_sm">
+														<span>적용</span>
+													</button>
+												</div>
+											</th:block>
+											<!-- //스타일 포인트 3만원 미만 결제시 노출 -->
+											<p><span>보유:&nbsp;<em class="rmPntAmt" th:text="${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')}"></em>P</span></p>
+										</div>
+									</dd>
+								</div>
+							</th:block>
+							<!-- //포인트금액 1보다 작을때 적용 -->
 							
 							<!-- 상품권금액 0보다 클때 적용 -->
 							<th:block th:if="${rmGfcdAmt} > 0">
@@ -221,9 +265,27 @@
 								</div>
 							</th:block>
 							<!-- //상품권금액 0보다 클때 적용 -->
+							<!-- 상품권금액 1보다 작을때 적용 -->
+							<th:block th:if="${rmGfcdAmt} < 1">
+								<div>
+									<dt>상품권</dt>
+									<dd>
+										<div class="form_field">
+											<div class="input_wrap">
+												<input type="text" name="gfcdUseAmtStr" class="form_control" maxlength="11" placeholder="사용할 금액을 입력해주세요." onkeyup="inputNumberFormat(this);" disabled="">
+												<button type="button" class="btn btn_dark btn_sm" id="btn_gfcd_apply">
+													<span>적용</span>
+												</button>
+											</div>
+											<p><span class="remain_point">보유:&nbsp;<em th:text="${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')}"></em>원</span></p>
+										</div>
+									</dd>
+								</div>
+							</th:block>
+							<!-- //상품권금액 1보다 작을때 적용 -->
 						</dl>
 					</div>
-				</th:block>
+				<!-- </th:block> -->
 				<!-- //선포인트금액, 포인트금액, 상품권금액 0보다 클때 적용 -->
 			</div>
 		</li>

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

@@ -1204,6 +1204,13 @@ var dcAmtInfoSet = function() {
 						
 						// 상품쿠폰, 장바구니쿠폰 팝업 열기
 						$("#btn_couponModify_pop").on("click", function(){
+							// 2021.04.23 보유쿠폰이 없을때 적용
+							var custCpnCnt = parseInt($("#orderForm input[name=custCpnCnt]").val());
+							if (custCpnCnt < 1) {
+								mcxDialog.alert("적용 가능한 쿠폰이 없습니다.");
+								return false;
+							}
+							
 							$("#couponModifyPop").modal("show");
 							
 							// 쿠폰적용초기화(할인율최고)(상품,장바구니)
@@ -1246,7 +1253,18 @@ var dcAmtInfoSet = function() {
 						
 						// 1.8.5 쿠폰 최대할인금액 초기화 버튼 설정
 						$("#chk-maxdisc01").on("click", function(){
+							// 2021.04.23 보유쿠폰이 없을때 적용
+							var custCpnCnt 		= parseInt($("#orderForm input[name=custCpnCnt]").val());
+							var custDelvCpnCnt 	= parseInt($("#orderForm input[name=custDelvCpnCnt]").val());
+							if ((custCpnCnt + custDelvCpnCnt) < 1) {
+								mcxDialog.alert("적용 가능한 쿠폰이 없습니다.");
+								return false;
+							}
+							
 							if ($(this).is(":checked")) {
+								// 2021.04.23 
+								mcxDialog.alert("선택한 쿠폰이 아닌 보유한 쿠폰을 통해 최대할인 혜택을 받을 수 있도록 쿠폰이 자동 적용됩니다.");
+								
 								// 상품&장바구니쿠폰 초기환
 								custGoodsCpnInit();
 								
@@ -1261,7 +1279,18 @@ var dcAmtInfoSet = function() {
 						
 						// 1.8.5 쿠폰 최대할인금액 초기화 버튼 설정
 						$("#chk-maxdisc").on("click", function(){
+							// 2021.04.23 보유쿠폰이 없을때 적용
+							var custCpnCnt 		= parseInt($("#orderForm input[name=custCpnCnt]").val());
+							var custDelvCpnCnt 	= parseInt($("#orderForm input[name=custDelvCpnCnt]").val());
+							if ((custCpnCnt + custDelvCpnCnt) < 1) {
+								mcxDialog.alert("적용 가능한 쿠폰이 없습니다.");
+								return false;
+							}
+							
 							if ($(this).is(":checked")) {
+								// 2021.04.23 
+								mcxDialog.alert("선택한 쿠폰이 아닌 보유한 쿠폰을 통해 최대할인 혜택을 받을 수 있도록 쿠폰이 자동 적용됩니다.");
+								
 								// 상품&장바구니쿠폰 초기환
 								custGoodsCpnInit();
 								
@@ -1313,14 +1342,30 @@ var dcAmtInfoSet = function() {
 					rmPntAmt				= rmPntAmt - freegiftUsePnt;
 					
 					if (gagajf.isNull($("#orderForm input[name=pntDcAmtStr]").val())) {
-						mcxDialog.alert("사용할 포인트를 입력해주세요.");
+						mcxDialog.alert("포인트를 입력하신 후 다시 시도해주세요.");
 						$('#orderForm input[name=pntDcAmtStr]').focus();
 						return false;
 					}
 					
 					// 입력여부체크
 					if (pntDcAmt < 1) {
-						mcxDialog.alert("사용할 포인트를 입력해주세요");
+						mcxDialog.alert("포인트를 입력하신 후 다시 시도해주세요.");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+					
+					// 10원단위부터 입력가능
+					if (pntDcAmt % 10 > 0) {
+						mcxDialog.alert("포인트는 10P단위로 사용이 가능합니다.");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+					
+					// 결제금액을 초과 할 수 없습니다.
+					if (pntDcamt > realOrdAmt) {
+						mcxDialog.alert("포인트를 입력하신 후 다시 시도해주세요.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -1328,7 +1373,7 @@ var dcAmtInfoSet = function() {
 					
 					// 보유포인트보다 초과 사용 불가
 					if (pntDcAmt > rmPntAmt) {
-						mcxDialog.alert("보유포인트 보다 초과 사용 할 수 없습니다.");
+						mcxDialog.alert("입력하신 포인트가 보유한 포인트보다 많습니다.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -1350,6 +1395,9 @@ var dcAmtInfoSet = function() {
 						return false;
 					}
 					
+					// 2021.04.23 추가
+					mcxDialog.alert("총 " + getZeroMinusDelAmt(pntDcAmt) + " P를 차감 결제 합니다.”");
+					
 					// 포인트 적용
 					$("#orderAmtForm .pntDcSumAmt").text(pntDcAmt);
 					$("#pntDcAmt").text(getZeroMinusDelAmt(pntDcAmt));
@@ -1362,16 +1410,33 @@ var dcAmtInfoSet = function() {
 				$("#btn_gfcd_apply").on("click", function(){
 					var rmGfcdAmt 		= parseInt($("#orderForm input[name='rmGfcdAmt']").val());
 					var gfcdUseAmt 		= parseInt(uncomma($("#orderForm input[name='gfcdUseAmtStr']").val()));
+					var realOrdAmt 		= parseInt($("#orderAmtForm .realOrdSumAmt").text());
 					
 					if (gagajf.isNull($("#orderForm input[name=gfcdUseAmtStr]").val())) {
-						mcxDialog.alert("사용할 금액을 입력해주세요.");
+						mcxDialog.alert("금액을 입력하신 후 다시 시도해주세요.");
 						$('#orderForm input[name=gfcdUseAmtStr]').focus();
 						return false;
 					}
 					
 					// 입력여부체크
 					if (gfcdUseAmt < 1 || $("#orderForm input[name='gfcdUseAmtStr']").val() == "") {
-						mcxDialog.alert("사용할 금액을 입력해주세요");
+						mcxDialog.alert("금액을 입력하신 후 다시 시도해주세요.");
+						// 상품권리셋기능
+						gfcdUseAmtReset();
+						return false;
+					}
+					
+					// 결제금액을 초과 할 수 없습니다.
+					if (gfcdUseAmt > realOrdAmt) {
+						mcxDialog.alert("입력하신 금액이 결제할 금액보다 많습니다.");
+						// 포인트리셋기능
+						gfcdUseAmtReset();
+						return false;
+					}
+					
+					// 보유금액보다 초과 사용 불가
+					if (gfcdUseAmt > rmGfcdAmt) {
+						mcxDialog.alert("보유금액 보다 초과 사용 할 수 없습니다.");
 						// 상품권리셋기능
 						gfcdUseAmtReset();
 						return false;
@@ -1394,6 +1459,9 @@ var dcAmtInfoSet = function() {
 						return false;
 					}
 					
+					// 2021.04.23 추가
+					mcxDialog.alert("총 " + gfcdUseAmt.addComma() + " 원를 상품권 금액에서 차감 결제 합니다.”");
+					
 					// 상품권 적용
 					$("#orderAmtForm .gfcdUseSumAmt").text(gfcdUseAmt);
 					$("#gfcdUseAmt").text(getZeroMinusDelAmt(gfcdUseAmt));

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

@@ -46,12 +46,12 @@
 									<div><button type="button" class="btn btn_dark btn_sel_delvAddr" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button></div>
 								</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}"/>
+								<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>
 					</div>
@@ -96,18 +96,18 @@ $(document).ready( function() {
 
 // 2. 버튼기능구현
 // 2.1 배송지선택버튼
-$(".btn_sel_delvAddr").on("click", function(){
+$("#delvAddrChangeForm .btn_sel_delvAddr").on("click", function(){
 	
 	// custDelvAddrSq 부모창으로 전달
 	var delvObj = {
 		"custDelvAddrSq"	: $(this).attr("value")
 		, "dispYn"			: "Y"
-		, "recipNm"			: $(this).parent().find("input[name=recipNm]").val()
-		, "recipPhnno"		: $(this).parent().find("input[name=recipPhnno]").val()
-		, "recipZipcode"	: $(this).parent().find("input[name=recipZipcode]").val()
-		, "recipBaseAddr"	: $(this).parent().find("input[name=recipBaseAddr]").val()
-		, "recipDtlAddr"	: $(this).parent().find("input[name=recipDtlAddr]").val()
-		, "delvMemo"		: $(this).parent().find("input[name=delvMemo]").val()
+		, "recipNm"			: $(this).parent().parent().parent().find("input[name=recipNm]").val()
+		, "recipPhnno"		: $(this).parent().parent().parent().find("input[name=recipPhnno]").val()
+		, "recipZipcode"	: $(this).parent().parent().parent().find("input[name=recipZipcode]").val()
+		, "recipBaseAddr"	: $(this).parent().parent().parent().find("input[name=recipBaseAddr]").val()
+		, "recipDtlAddr"	: $(this).parent().parent().parent().find("input[name=recipDtlAddr]").val()
+		, "delvMemo"		: $(this).parent().parent().parent().find("input[name=delvMemo]").val()
 	}
 	
 	// 부모장으로 값 전닫
@@ -118,7 +118,7 @@ $(".btn_sel_delvAddr").on("click", function(){
 });
 
 // 2.2 배송지수정버튼
-$(".btn_addrModify_pop").on("click", function(){
+$("#delvAddrChangeForm .btn_addrModify_pop").on("click", function(){
 		
 	var obj = {
 		"custDelvAddrSq" : $(this).attr("value")

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

@@ -559,7 +559,7 @@
 		$(document).ready(function() {
 			setLoginInfo();
 
-			if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
+			if([[${!order.shotCanYn.equals('Y')}]]) {
 				$(".shotDelvSelect").hide();
 			}
 

+ 85 - 8
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html

@@ -666,7 +666,7 @@
 						
 						let allCate = [[${allCateList}]];
 						$.each(result, function(idx, item) {
-							if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
+							if (item.contentsType == 'C') { // 컨텐츠유형:카테고리, 아울렛
 								$.each(allCate, function(allCateIdx, allCateItem) {
 									if (item.cate1No == allCateItem.cate1No) {
 										let gnbCate = fnGetGnbCategory(allCateItem);
@@ -675,6 +675,13 @@
 										$('#ulGnbTab').append(gnbCate);
 									}
 								});
+							} else if(item.contentsType == 'O'){
+								let outletCate = fnGetOutletCategory(item.gtabNm);
+
+								$('#divGnbTab').append(outletCate);
+								// $('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
+								$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
+								fnGetOutletLeafCategory();
 							} else if (item.contentsType == 'L') { // 컨텐츠유형:링크
 								$('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
 								$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
@@ -685,6 +692,76 @@
 			});
 	}
 
+	// OUTLET 탭 생성
+	var fnGetOutletCategory = function (outletNm){
+		var tag = '';
+		tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
+		tag += '	<a href="javascript:void(0);" onclick="cfnGoToOutletMain(\'G032_103\',\'1713\')">' + outletNm + '</a>\n';
+		tag += '	<div class="depth_menu category">\n';
+		tag += '		<div class="head_category">\n';
+		tag += '			<div class="tit">\n';
+		tag += '				<p>' + outletNm + '</p>\n';
+		tag += '				<a href="javascript:void(0);" onclick="cfnGoToOutletMain(\'G032_103\',\'1713\')" class="more">전체보기</a>\n';
+		tag += '			</div>\n';
+		let allCate = [[${allCateList}]];
+		tag += '			<div class="menu">\n';
+		tag += '				<ul class="maintabs" >\n';
+		$.each(allCate, function(allCateIdx, allCateItem) {
+			tag += '					<li id="cate'+allCateItem.cate1No+'">\n';
+			tag += '						<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + allCateItem.cateGb + '\',' + allCateItem.cate1No + ');">' + allCateItem.cate1Nm + '</a>\n';
+			tag += '					</li>\n';
+		});
+		tag += '				</ul>\n';
+		tag += '			</div>\n';
+		tag += '		</div>\n';
+		tag += '	<div class="head_banner" id="outlet'+allCateItem.cate1No+'">\n';
+		tag += '	</div>';
+		tag += '	</div>\n';
+		tag += '</li>\n';
+		return tag;
+	}
+
+	var fnGetOutletLeafCategory = function(){
+		let allCate = [[${allCateList}]];
+		$.each(allCate, function(allCateIdx, allCateItem) {
+			let gnbCate = fnGetOutletLeafData(allCateIdx,allCateItem);
+			$('#cate'+allCateItem.cate1No).append(gnbCate);
+		});
+	}
+
+	var fnGetOutletLeafData= function (idx, cate1){
+		let tag2 = '';
+
+		if (cate1 != null) {
+			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+				tag2 += '<ul class="box_depth2">';
+				$.each(cate1.cate2List, function(idx2, cate2) {
+					tag2 += '					<li>\n';
+					tag2 += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+						tag2 += '						<ul class="box_depth2">\n';
+						$.each(cate2.cate3List, function(idx3, cate3) {
+							tag2 += '							<li>\n';
+							tag2 += '								<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
+							if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+								tag2 += '								<ul class="box_depth3">\n';
+								$.each(cate3.cate4List, function(idx4, cate4) {
+									tag2 += '									<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
+								});
+								tag2 += '								</ul>\n';
+							}
+							tag2 += '							</li>\n';
+						});
+						tag2 += '						</ul>\n';
+					}
+					tag2 += '					</li>\n';
+				});
+				tag2 += '</ul>';
+			}
+		}
+		return tag2;
+	}
+
 	// GNB탭 > 브랜드 생성
 	let fnCreateGnbBrandGroup = function() {
 		$.getJSON('/display/gnb/brand/group/list'
@@ -705,14 +782,14 @@
 								tag += '	<p>' + item.title + '</p>\n';
 								tag += '	<div class="brand_list swiper-container">\n';
 								tag += '		<ul class="clear swiper-wrapper">\n';
-							} else {
-								tag += '			<li class="swiper-slide">\n';
-								tag += '				<a href="javascript:void(0);" onclick="cfnGoToBrandMain(' + item.brandGroupNo + ');">\n';
-								tag += '					<img src="' + _uploadDefaultUrl + item.logoFileNm + '" alt=""/>\n';
-								tag += '					<span><em>' + item.brandGroupNm + '</em></span>\n';
-								tag += '				</a>\n';
-								tag += '			</li>\n';
 							}
+							tag += '			<li class="swiper-slide">\n';
+							tag += '				<a href="javascript:void(0);" onclick="cfnGoToBrandMain(' + item.brandGroupNo + ');">\n';
+							tag += '					<img src="' + _uploadDefaultUrl + item.logoFileNm + '" alt=""/>\n';
+							tag += '					<span><em>' + item.brandGroupNm + '</em></span>\n';
+							tag += '				</a>\n';
+							tag += '			</li>\n';
+
 							prevTitle = item.title;
 						});
 						tag += '		</ul>\n';

+ 48 - 36
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -385,6 +385,7 @@
 				let endRow = result.endRow - result.paging.pageable.pageSize;
 				var htm = fnCreateGoodsList(result, ithrCd, contentLoc, goodsUrl, lastPage, endRow);
 				gagaInfiniteScroll.draw(htm);
+				fnImgOnoff();
 			}else {
 				if($("#searchForm input[name=pageNo]").val()==1){
 					$('#listBox').html('<li class="none">상품정보가 존재하지 않습니다.</li>');
@@ -507,6 +508,53 @@
 			return tag;
 		}
 
+		var fnImgOnoff = 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('.'));
+
+			var img1;
+			var img2;
+
+			$(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() {
+				img1 = $(this).attr('src');
+				img2 = $(this).attr('data-img');
+				// [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));
+				$(this).attr('src',img2);
+				// 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));
+				$(this).attr('src', img1);
+				// return false;
+			});
+		}
+
 		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
 		$(window).on("pageshow", function(event) {
 			$('#filterForm input[name=brand]:checked').each(function(){
@@ -566,43 +614,7 @@
 	<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>
 

+ 5 - 5
src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html

@@ -29,7 +29,7 @@
 	</div>
 
 	<div class="wrap">
-		<th:block th:if="${cateMainLayoutList}" th:each="mainLayoutData, mainStat : ${cateMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SCM','')},contentsTitle=${brandMainLayoutData.contentsTitle}">
+		<th:block th:if="${cateMainLayoutList}" th:each="mainLayoutData, mainStat : ${cateMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SCM','')},contentsTitle=${mainLayoutData.contentsTitle}">
 			<th:block th:if="${contentsLoc=='001'}">
 				<div class="content dp_submain" > <!-- 페이지특정 클래스 = dp_list -->
 					<div class="cont_head">
@@ -89,9 +89,9 @@
 						<div class="swiper-container post-trendy">
 							<div class="swiper-wrapper">
 								<div class="swiper-slide" th:each="item, status : ${newGoodsList}">
-									<div class="item_prod">
+									<div class="item_prod" th:if="${status.count<21}">
 										<div class="item_state">
-											<button type="button" class="itemLike" th:classappend="${item.likeIt}">관심상품 추가</button>
+											<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SCM001', planDtlSq=''">관심상품 추가</button>
 											<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SCM001');">
 												<div class=" itemPic">
 													<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" th:alt="${item.goodsCd}"/>
@@ -123,9 +123,9 @@
 							<div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
 								<div class="item_prod" th:each="item, status : ${bestGoodsList}">
 									<div class="item_state" >
-										<button type="button" class="itemLike" th:classappend="${item.likeIt}">관심상품 추가</button>
+										<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SCM002', planDtlSq=''">관심상품 추가</button>
 										<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SCM002');">
-											<div class="rank ranker"><span th:text="${status.index+1}">1</span></div>
+											<div class="rank" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
 											<div class="itemPic">
 												<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" th:alt="${item.goodsCd}"/>
 											</div>

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

@@ -133,7 +133,7 @@
 								<div class="item_state">
 									<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM003', planDtlSq=''">관심상품 추가</button>
 									<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM003');">
-										<div class="rank ranker"><span>1</span></div>
+										<div class="rank" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
 										<div class="itemPic">
 											<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}">
 										</div>

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

@@ -363,7 +363,7 @@
 			let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
 			let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
 			let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
-			let refundPayAmt = spanRefundAmt - spanTotDeliveryFee;						// 결제금액 환불
+			let refundPayAmt = spanRefundAmt;											// 결제금액 환불
 			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
 
 			// 추가배송비 영역 설정

+ 0 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb.html → src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb_back.html


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

@@ -42,11 +42,12 @@
 					<div class="sale_coupon_box">
 						<div>
 							<span class="maxdisc_amount">총&nbsp;<em class="goodsCartCpnDcAmt"></em>원 할인</span>
-							<th:block th:if="${goodsApplyCpnList.size() > 0} or ${cartCpnList.size() > 0}">
-								<button type="button" id="btn_couponModify_pop" class="btn btn_default btn_sm">
-									<span>쿠폰변경</span>
-								</button>
-							</th:block>
+							<input type="hidden" name="custCpnCnt" th:value="${goodsApplyCpnList.size()} + ${cartCpnList.size()}">
+							<input type="hidden" name="custDelvCpnCnt" th:value="${delvCpnList.size()}">
+							
+							<button type="button" id="btn_couponModify_pop" class="btn btn_default btn_sm">
+								<span>쿠폰변경</span>
+							</button>
 						</div>
 						<div class="form_field">
 							<div class="input_wrap">
@@ -61,6 +62,7 @@
 			</div>
 			
 			<!-- 배송비쿠폰 -->
+			<!-- 배송비쿠폰이 존재 -->
 			<th:block th:if="${delvCpnList.size() > 0}">
 				<div>
 					<dt>배송비 쿠폰</dt>
@@ -99,12 +101,43 @@
 					</dd>
 				</div>
 			</th:block>
+			<!-- //배송비쿠폰이 존재 -->
+			<!-- 배송비쿠폰이 미존재 -->
+			<th:block th:if="${delvCpnList.size() < 1}">
+				<div>
+					<dt>배송비 쿠폰</dt>
+					<dd>
+						<div class="dlvr_fee_box">
+							<div class="form_field">
+								<div class="select_custom" disabled="">
+									<div class="combo">
+										<div class="select">
+											<div class="dlvr_coupon">
+												<p class="empty">적용 가능한 쿠폰이 없습니다</p>
+											</div>
+										</div>
+										<ul class="list">
+										<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true"추가  -->
+											<li class="selected">
+												<div class="dlvr_coupon">
+													<p class="empty">적용 가능한 쿠폰이 없습니다</p>
+												</div>
+											</li>
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+					</dd>
+				</div>
+			</th:block>
+			<!-- //배송비쿠폰이 미존재 -->
 			<!-- //배송비쿠폰 -->
 		</dl>
 	</div>
 	
 	<!-- 선포인트금액, 포인트금액, 상품권금액 0보다 클때 적용 -->
-	<th:block th:if="${prePntDcAmt} > 0 or ${rmPntAmt} > 0 or ${rmGfcdAmt} > 0">
+	<!-- <th:block th:if="${prePntDcAmt} > 0 or ${rmPntAmt} > 0 or ${rmGfcdAmt} > 0"> -->
 		<div class="area_selpoint">
 			<dl>
 				<!-- 선포인트금액 0보다 클때 적용 -->
@@ -128,7 +161,28 @@
 					</div>
 				</th:block>
 				<!-- //선포인트금액 0보다 클때 적용 -->
-				
+				<!-- 선포인트금액 1보다 작을때 적용 -->
+				<th:block th:if="${prePntDcAmt} < 1">
+					<div>
+						<dt>선 포인트 사용</dt>
+						<dd>
+							<div class="form_field">
+								<input type="hidden" name="rmPrePntAmt" th:value="${prePntDcAmt}"/>
+								<div>
+									<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint11" value="N"> 
+									<label for="rdi-beforpoint1"><span>사용 안함</span></label>
+								</div>
+								<div>
+									<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint12" value="Y" checked> 
+									<label for="rdi-beforpoint2"><span>사용함</span></label> 
+									<span class="useable_point">(<em th:text="|${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}원|"></em>&nbsp;사용 가능)</span>
+								</div>
+							</div>
+						</dd>
+					</div>
+				</th:block>
+				<!-- //선포인트금액 1보다 작을때 적용 -->
+
 				<!-- 포인트금액 0보다 클때 적용 -->
 				<th:block th:if="${rmPntAmt} > 0">
 					<div>
@@ -166,6 +220,43 @@
 				</th:block>
 				<!-- //포인트금액 0보다 클때 적용 -->
 				
+				<!-- 포인트금액 1보다 작을때 적용 -->
+				<th:block th:if="${rmPntAmt} < 1">
+					<div>
+						<dt>스타일 포인트</dt>
+						<dd>
+							<div class="form_field">
+								<input type="hidden" name="rmPntAmt" th:value="${rmPntAmt}"/>
+								<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+								<th:block th:if="${orgGoodsSumAmt} >= 30000">
+									<div class="input_wrap">
+										<input type="text" name="pntDcAmtStr" class="form_control" maxlength="11" placeholder="사용할 포인트를 입력해주세요." onkeyup="inputNumberFormat(this);" disabled="">
+										<button type="button" class="btn btn_dark btn_sm" id="btn_point_apply">
+											<span>적용</span>
+										</button>
+									</div>
+								</th:block>
+								<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+								
+								<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
+								<th:block th:if="${orgGoodsSumAmt} < 30000">
+									<div class="input_wrap">
+										<input type="text" class="form_control" maxlength="" placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다." disabled="">
+									</div>
+								</th:block>
+								<!-- //스타일 포인트 3만원 미만 결제시 노출 -->
+								
+								<p>
+									<span class="remain_point">보유:&nbsp;
+										<em class="rmPntAmt" th:text="${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')}"></em>P
+									</span>(결제금액의 최대 40%까지 사용가능)
+								</p>
+							</div>
+						</dd>
+					</div>
+				</th:block>
+				<!-- //포인트금액 1보다 작을때 적용 -->
+				
 				<!-- 상품권금액 0보다 클때 적용 -->
 				<th:block th:if="${rmGfcdAmt} > 0">
 					<div>
@@ -185,9 +276,29 @@
 					</div>
 				</th:block>
 				<!-- //상품권금액 0보다 클때 적용 -->
+				
+				<!-- 상품권금액 1보다 작을때 적용 -->
+				<th:block th:if="${rmGfcdAmt} < 1">
+					<div>
+						<dt>상품권</dt>
+						<dd>
+							<div class="form_field">
+								<input type="hidden" name="rmGfcdAmt" th:value="${rmGfcdAmt}"/>
+								<div class="input_wrap">
+									<input type="text" name="gfcdUseAmtStr" class="form_control" maxlength="11" placeholder="사용할 금액을 입력해주세요." onkeyup="inputNumberFormat(this);" disabled="">
+									<button type="button" class="btn btn_dark btn_sm" id="btn_gfcd_apply">
+										<span>적용</span>
+									</button>
+								</div>
+								<p><span class="remain_point">보유:&nbsp;<em th:text="${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')}"></em>원</span></p>
+							</div>
+						</dd>
+					</div>
+				</th:block>
+				<!-- //상품권금액 1보다 작을때 적용 -->
 			</dl>
 		</div>
-	</th:block>
+	<!-- </th:block> -->
 </div> <!-- //할인/혜택 사용 -->
 
 <script th:inline="javascript">

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

@@ -1228,7 +1228,18 @@ var dcAmtInfoSet = function() {
 						
 						// 1.8.5 쿠폰 최대할인금액 초기화 버튼 설정
 						$("#chk-maxdisc").on("click", function(){
+							// 2021.04.23 보유쿠폰이 없을때 적용
+							var custCpnCnt 		= parseInt($("#orderForm input[name=custCpnCnt]").val());
+							var custDelvCpnCnt 	= parseInt($("#orderForm input[name=custDelvCpnCnt]").val());
+							if ((custCpnCnt + custDelvCpnCnt) < 1) {
+								mcxDialog.alert("적용 가능한 쿠폰이 없습니다.");
+								return false;
+							}
+							
 							if ($(this).is(":checked")) {
+								// 2021.04.23 
+								mcxDialog.alert("선택한 쿠폰이 아닌 보유한 쿠폰을 통해 최대할인 혜택을 받을 수 있도록 쿠폰이 자동 적용됩니다.");
+								
 								// 상품&장바구니쿠폰 초기환
 								custGoodsCpnInit();
 								
@@ -1241,6 +1252,13 @@ var dcAmtInfoSet = function() {
 				
 				// 쿠폰변경팝업호출
 				$("#btn_couponModify_pop").on("click", function(){
+					// 2021.04.23 보유쿠폰이 없을때 적용
+					var custCpnCnt = parseInt($("#orderForm input[name=custCpnCnt]").val());
+					if (custCpnCnt < 1) {
+						mcxDialog.alert("적용 가능한 쿠폰이 없습니다.");
+						return false;
+					}
+					
 					// 쿠폰초기화
 					custGoodsCpnInit();
 					
@@ -1258,14 +1276,30 @@ var dcAmtInfoSet = function() {
 					rmPntAmt				= rmPntAmt - freegiftUsePnt;
 					
 					if (gagajf.isNull($("#orderForm input[name=pntDcAmtStr]").val())) {
-						mcxDialog.alert("사용할 포인트를 입력해주세요.");
+						mcxDialog.alert("포인트를 입력하신 후 다시 시도해주세요.");
 						$('#orderForm input[name=pntDcAmtStr]').focus();
 						return false;
 					}
 					
 					// 입력여부체크
 					if (pntDcAmt < 1) {
-						mcxDialog.alert("사용할 포인트를 입력해주세요");
+						mcxDialog.alert("포인트를 입력하신 후 다시 시도해주세요.");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+					
+					// 10원단위부터 입력가능
+					if (pntDcAmt % 10 > 0) {
+						mcxDialog.alert("포인트는 10P단위로 사용이 가능합니다.");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+					
+					// 결제금액을 초과 할 수 없습니다.
+					if (pntDcamt > realOrdAmt) {
+						mcxDialog.alert("포인트를 입력하신 후 다시 시도해주세요.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -1273,7 +1307,7 @@ var dcAmtInfoSet = function() {
 					
 					// 보유포인트보다 초과 사용 불가
 					if (pntDcAmt > rmPntAmt) {
-						mcxDialog.alert("보유포인트 보다 초과 사용 할 수 없습니다.");
+						mcxDialog.alert("입력하신 포인트가 보유한 포인트보다 많습니다.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -1295,6 +1329,9 @@ var dcAmtInfoSet = function() {
 						return false;
 					}
 					
+					// 2021.04.23 추가
+					mcxDialog.alert("총 " + getZeroMinusDelAmt(pntDcAmt) + " P를 차감 결제 합니다.”");
+					
 					// 포인트 적용
 					$("#orderAmtForm .pntDcSumAmt").text(pntDcAmt);
 					$("#pntDcAmt").text(getZeroMinusDelAmt(pntDcAmt)+" 원");
@@ -1307,16 +1344,33 @@ var dcAmtInfoSet = function() {
 				$("#btn_gfcd_apply").on("click", function(){
 					var rmGfcdAmt 		= parseInt($("#orderForm input[name='rmGfcdAmt']").val());
 					var gfcdUseAmt 		= parseInt(uncomma($("#orderForm input[name='gfcdUseAmtStr']").val()));
+					var realOrdAmt 		= parseInt($("#orderAmtForm .realOrdSumAmt").text());
 					
 					if (gagajf.isNull($("#orderForm input[name=gfcdUseAmtStr]").val())) {
-						mcxDialog.alert("사용할 금액을 입력해주세요.");
+						mcxDialog.alert("금액을 입력하신 후 다시 시도해주세요.");
 						$('#orderForm input[name=gfcdUseAmtStr]').focus();
 						return false;
 					}
 					
 					// 입력여부체크
 					if (gfcdUseAmt < 1 || $("#orderForm input[name='gfcdUseAmtStr']").val() == "") {
-						mcxDialog.alert("사용할 금액을 입력해주세요");
+						mcxDialog.alert("금액을 입력하신 후 다시 시도해주세요.");
+						// 상품권리셋기능
+						gfcdUseAmtReset();
+						return false;
+					}
+					
+					// 결제금액을 초과 할 수 없습니다.
+					if (gfcdUseAmt > realOrdAmt) {
+						mcxDialog.alert("입력하신 금액이 결제할 금액보다 많습니다.");
+						// 포인트리셋기능
+						gfcdUseAmtReset();
+						return false;
+					}
+					
+					// 보유금액보다 초과 사용 불가
+					if (gfcdUseAmt > rmGfcdAmt) {
+						mcxDialog.alert("보유금액 보다 초과 사용 할 수 없습니다.");
 						// 상품권리셋기능
 						gfcdUseAmtReset();
 						return false;
@@ -1339,9 +1393,12 @@ var dcAmtInfoSet = function() {
 						return false;
 					}
 					
+					// 2021.04.23 추가
+					mcxDialog.alert("총 " + gfcdUseAmt.addComma() + " 원를 상품권 금액에서 차감 결제 합니다.”");
+					
 					// 상품권 적용
 					$("#orderAmtForm .gfcdUseSumAmt").text(gfcdUseAmt);
-					$("#gfcdUseAmt").text("-"+gfcdUseAmt.addComma()+" 원");
+					$("#gfcdUseAmt").text(getZeroMinusDelAmt(gfcdUseAmt)+" 원");
 					
 					// 금액전체계산
 					custCpnSumAmtCal();

+ 9 - 2
src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html

@@ -41,6 +41,13 @@
 								</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>
+								
+								<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>
@@ -82,7 +89,7 @@ $(document).ready( function() {
 
 // 2. 버튼기능구현
 // 2.1 배송지선택버튼
-$(".btn_sel_delvAddr").on("click", function(){
+$("#delvAddrChangeForm .btn_sel_delvAddr").on("click", function(){
 	
 	// custDelvAddrSq 부모창으로 전달
 	var delvObj = {
@@ -104,7 +111,7 @@ $(".btn_sel_delvAddr").on("click", function(){
 });
 
 // 2.2 배송지수정버튼
-$(".btn_addrModify_pop").on("click", function(){
+$("#delvAddrChangeForm .btn_addrModify_pop").on("click", function(){
 		
 	var obj = {
 		"custDelvAddrSq" : $(this).attr("value")

+ 75 - 10
src/main/webapp/biz/goods.js

@@ -176,8 +176,6 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		tag += '		<a href="#none" class="itemLink">';
 		// tag += '			<div class="rank ranker"><span>'+(rank+(idx+1))+'</span></div>';
 		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 = '';
@@ -188,11 +186,54 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 				videoUrl = videoInfo[1];
 			}
 			if(videoGb=='Y'){
-				tag += '<iframe id="child" className="pd_mov" src="https://www.youtube.com/embed/'+videoUrl+'"></iframe>';
+				tag += '<iframe id="child" class="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 += '<iframe id="child" class="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'"></iframe>';
 			}
 		}
+		tag += '		<img class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'" data-img="'+goodsUrl+'/'+item.sysImgNm2+'">';
+		if(!gagajf.isNull(item.sizes)){
+			var sizeArr = item.sizes.split(",");
+			var minSize;
+			var maxSize;
+			var sizeVal = '';
+			var soldOutYn = '';
+			tag +='<div class="itemOpt">';
+			tag +='	<p>SIZE</p>';
+
+			if(sizeArr.length>5){
+				for(let i=0; i<sizeArr.length; i++){
+					var sizeInfo = sizeArr[i].split(":");
+					sizeVal = sizeInfo[0];
+					soldOutYn = sizeInfo[1];
+					if(i==0){
+						minSize = sizeVal;
+					}else if(i==sizeArr.length-1){
+						maxSize = sizeVal;
+					}
+				}
+				tag +='	<div class="exc">';
+				tag +='		<span>'+minSize+'</span> ~ <span>'+maxSize+'</span> 사이즈가 있습니다.';
+				tag +='	</div>';
+			}else{
+				tag += '<ul>';
+				for(let i=0; i<sizeArr.length; i++){
+					var sizeInfo = sizeArr[i].split(":");
+					sizeVal = sizeInfo[0];
+					soldOutYn = sizeInfo[1];
+					if(soldOutYn=='N'){
+						tag +='		<li>'+sizeVal+'</li>';
+					}else{
+						tag +='		<li className="none">'+sizeVal+'</li>';
+					}
+				}
+				tag += '</ul>';
+			}
+			tag += '			</div>';
+		}
+
+		tag += '			</div>';
+
 		tag += '			<p class="itemBrand">'+item.brandGroupNm+'</p>';
 		tag += '			<div class="itemName">'+item.goodsFullNm+'</div>';
 		tag += '			<p class="itemPrice">'+item.currPrice.addComma();
@@ -204,13 +245,37 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 		}
 		tag += '			</p>';
 		tag += '			<div class="itemcolorchip">';
-		tag += '				<span class="chip_color35" value="ABM">BEIGE</span>';
-		tag += '				<span class="chip_color54" value="BDS">BLACK</span>';
-		tag += '				<span class="chip_color40" value="YBR">WHITE</span>';
+		if(!gagajf.isNull(item.colorChips)){
+			var colorArr = item.colorChips.split(",");
+			var colorCd = '';
+			var rgbColor = '';
+			for(let i=0; i<colorArr.length; i++){
+				var colorInfo = colorArr[i].split(":");
+				colorCd = colorInfo[0];
+				rgbColor = colorInfo[1];
+				if(rgbColor=='#FFFFFF'){
+					tag += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+				}else{
+					tag += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+				}
+			}
+		}
 		tag += '			</div>';
-		tag += '			<p class="itemBadge">';
-		tag += '				<span class="badge13">베스트 </span>';
-		tag += '			</p>';
+
+		if(!gagajf.isNull(item.icon)){
+			var iconArr = item.icon.split(",");
+			var iconGb = '';
+			var iconNm = '';
+			tag += '	<p class="itemBadge">';
+			for(let i=0; i<iconArr.length; i++){
+				var iconInfo = iconArr[i].split(":");
+				iconGb = iconInfo[0];
+				iconNm = iconInfo[1];
+				tag += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+			}
+			tag += '	</p>';
+		}
+
 		if(item.goodsTnm != null){
 			tag += '			<div class="itemComment">'+item.goodsTnm+'</div>';
 		}

+ 9 - 6
src/main/webapp/ux/pc/js/common-ui.js

@@ -311,9 +311,9 @@ $(document).ready( function() {
 	});
 
 	//통합검색 - 레이어 열고닫기
-	$(document).on('click','.common_header .search .promotion_search, .common_header .search .btn_open_search',function(e){
-		$('body').addClass('lock');
-		$("#header .common_search").addClass('active'); 
+	//210420_수정 : 검색창 호출 스크립트 수정.
+	$(document).on('click','.common_header.main_header .search .promotion_search, .common_header.main_header .search .btn_open_search',function(e){
+		location.href='sch_result.html';
 		return false;
 	}).on('click','.common_search .btn_close_search',function(e){
 		$("#header .common_search").removeClass('active'); 
@@ -540,7 +540,7 @@ $(document).ready( function() {
 $(document).ready( function() {
 
 	//팝업 - 상품썸네일 크게보기
-	$(document).on('click','.pd_detail .area_pic .thumb_list_wrap ul li',function(e){
+	$(document).on('click','.pd_detail .area_pic .thumb_list_wrap ul li a',function(e){
 		$('body').addClass('lock');
 		$("#pdItemThumbPop .full_pop_container").empty();
 		var thumbIndex = $(this).index() + 1;
@@ -663,7 +663,7 @@ $(document).ready( function() {
 		$(this).parent('.swiper-slide').addClass('on');
 		targetThumb.siblings('li').removeClass('on');
 		targetThumb.addClass('on');
-		$('html,body').animate({scrollTop : topThumb}, 500);
+		$('html,body').animate({scrollTop : topThumb}, 100);
 		return false;
 	});
 
@@ -671,7 +671,10 @@ $(document).ready( function() {
 	/* 상품상세 > 상품문의 _accordion */
 	$(document).on('click','.pd_qnalist .foldGroup .fold_head',function(e){
 		if($(this).parent().hasClass('secret_qna')){
-			alert('비밀글은 열람하실 수 없습니다.');
+			//210420_수정 : dialog alert 변경.
+			mcxDialog.alert("비밀글은 열람하실 수 없습니다.", {
+				sureBtnText: "확인",
+			});
 		}else {
 			$(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
 			$(this).toggleClass('on');