Pārlūkot izejas kodu

Merge branch 'develop' into jsshin

jsshin 5 gadi atpakaļ
vecāks
revīzija
ed8424ea4a
59 mainītis faili ar 2183 papildinājumiem un 622 dzēšanām
  1. 66 0
      src/main/java/com/style24/front/biz/dao/TsfDeliveryDao.java
  2. 21 0
      src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java
  3. 9 1
      src/main/java/com/style24/front/biz/dao/TsfOrderDao.java
  4. 0 2
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  5. 115 0
      src/main/java/com/style24/front/biz/service/TsfDeliveryService.java
  6. 25 2
      src/main/java/com/style24/front/biz/service/TsfGiftcardService.java
  7. 15 9
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  8. 4 10
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  9. 122 0
      src/main/java/com/style24/front/biz/web/TsfDeliveryController.java
  10. 23 6
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  11. 49 31
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  12. 49 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  13. 3 1
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  14. 7 2
      src/main/java/com/style24/persistence/domain/Goods.java
  15. 16 15
      src/main/java/com/style24/persistence/domain/Review.java
  16. 44 0
      src/main/java/com/style24/persistence/domain/SweetTracker.java
  17. 104 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfDelivery.xml
  18. 13 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  19. 30 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  20. 10 7
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  21. 20 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  22. 38 24
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  23. 2 1
      src/main/resources/config/application-tsit.yml
  24. 1 1
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  25. 69 38
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  26. 112 24
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListFormMob.html
  27. 1 1
      src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html
  28. 107 45
      src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html
  29. 19 3
      src/main/webapp/WEB-INF/views/mob/order/OrderDeliveryAddrInfoMob.html
  30. 190 45
      src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html
  31. 1 2
      src/main/webapp/WEB-INF/views/mob/order/OrderListInfoMob.html
  32. 2 2
      src/main/webapp/WEB-INF/views/mob/order/OrderPaymentInfoMob.html
  33. 14 14
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html
  34. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  35. 85 8
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  36. 48 36
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  37. 5 5
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  38. 1 1
      src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html
  39. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  40. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  41. 248 169
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  42. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  43. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html
  44. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreListFormWeb.html
  45. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreReturnDetailFormWeb.html
  46. 18 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  47. 28 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  48. 0 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb_back.html
  49. 3 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  50. 2 2
      src/main/webapp/WEB-INF/views/web/order/OrderCompleteWeb.html
  51. 119 8
      src/main/webapp/WEB-INF/views/web/order/OrderDcAmtInfoWeb.html
  52. 57 4
      src/main/webapp/WEB-INF/views/web/order/OrderDeliveryAddrInfoWeb.html
  53. 148 41
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  54. 5 4
      src/main/webapp/WEB-INF/views/web/order/OrderPaymentInfoWeb.html
  55. 13 6
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html
  56. 75 10
      src/main/webapp/biz/goods.js
  57. 4 10
      src/main/webapp/biz/mypage.js
  58. 9 6
      src/main/webapp/ux/pc/js/common-ui.js
  59. 6 6
      src/main/webapp/ux/style24_link.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);			
+	
+}

+ 21 - 0
src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java

@@ -4,6 +4,7 @@ import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Order;
 
 /**
  * 상품권 Dao
@@ -85,4 +86,24 @@ public interface TsfGiftcardDao {
 	 * @since 2021. 4. 19
 	 */
 	 void createCustGiftcardHistory(GiftCard giftcard);
+
+	/**
+	 * 상품권 KCP 현금영수증 신청 정보 조회
+	 * 
+	 * @param GiftCard
+	 * @return GiftCard
+	 * @author card007
+	 * @since 2021. 04. 25
+	 */
+	GiftCard getCashReceiptsInfo(GiftCard giftCard);
+
+	/**
+	 * 상품권 KCP 현금영수증 신청 여부 조회
+	 *
+	 * @param Order
+	 * @return GiftCard
+	 * @author card007
+	 * @since 2021. 04. 25
+	 */
+	GiftCard getCashReceiptsRequestInfo(Order order);
 }

+ 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;
+	}
+
+}

+ 25 - 2
src/main/java/com/style24/front/biz/service/TsfGiftcardService.java

@@ -1,7 +1,6 @@
 package com.style24.front.biz.service;
 
 import java.util.Collection;
-import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -10,6 +9,7 @@ import com.style24.front.biz.dao.TsfGiftcardDao;
 import com.style24.front.biz.thirdparty.Yes24Giftcard;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Order;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -156,5 +156,28 @@ public class TsfGiftcardService {
 	 public Collection<GiftCard> getRecentlyDate(){
 		 return giftcardDao.getRecentlyDate();
 	 }
-	 
+
+	/**
+	 * 상품권 KCP 현금영수증 신청 정보 조회
+	 *
+	 * @param GiftCard
+	 * @return GiftCard
+	 * @author card007
+	 * @since 2021. 04. 25
+	 */
+	public GiftCard getCashReceiptsInfo(GiftCard giftCard) {
+		return giftcardDao.getCashReceiptsInfo(giftCard);
+	}
+
+	/**
+	 * 상품권 KCP 현금영수증 신청 여부 조회
+	 *
+	 * @param GiftCard
+	 * @return GiftCard
+	 * @author card007
+	 * @since 2021. 04. 25
+	 */
+	public GiftCard getCashReceiptsRequestInfo(Order order) {
+		return giftcardDao.getCashReceiptsRequestInfo(order);
+	}
 }

+ 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);

+ 49 - 31
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -215,7 +215,9 @@ public class TsfGoodsController extends TsfBaseController {
 				// 상품 옵션1(색상) 정보
 				mav.addObject("goodsOption1List", goodsService.getGoodsOption1List(paramsGoods));
 				// 상품 옵션2(사이즈) 정보
-				if (StringUtils.isEmpty(paramsGoods.getMastrGoodsCd())) paramsGoods.setMastrGoodsCd(goods.getGoodsCd());
+				if (StringUtils.isEmpty(paramsGoods.getMastrGoodsCd())) {
+					paramsGoods.setMastrGoodsCd(goods.getGoodsCd());
+				}
 				mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
 //				} else {
 //					mav.addObject("goodsOptionList", goodsService.getGoodsOptionList(paramsGoods));
@@ -241,11 +243,10 @@ public class TsfGoodsController extends TsfBaseController {
 			// 다다익선
 			paramsGoods.setMaxRownum(1);
 			mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
-			
+
 			// 사은품
 			paramsGoods.setMaxRownum(1);
 			mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods));
-			
 
 			// 베스트 상품평
 			Review review = new Review();
@@ -256,14 +257,14 @@ public class TsfGoodsController extends TsfBaseController {
 				review.setRownum(1);
 			}
 			mav.addObject("bestReviewList", reviewService.getReviewList(review));
-			
+
 			if (!"P".equals(goods.getFrontGb())) {
 				paramsGoods.setMaxRownum(20);
-				mav.addObject("goodsList", goodsService.getTmtbGoodsList(paramsGoods));	
+				mav.addObject("goodsList", goodsService.getTmtbGoodsList(paramsGoods));
 			}
-			
+
 		}
-		
+
 		// 상품 문의건수
 		Counsel counsel = new Counsel();
 		counsel.setRelGoodsCd(goods.getGoodsCd());
@@ -288,10 +289,9 @@ public class TsfGoodsController extends TsfBaseController {
 		boolean isSslServer = Boolean.parseBoolean(hasSsl);
 		//log.info("isSslServer: [{}]", isSslServer);
 		setTodayGoodsCd(paramsGoods);
-		
+
 		mav.addObject("params", paramsGoods);
 		mav.addObject("afLinkCd", afLinkCd);	// 파라미터 제휴코드
-		
 
 		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) {
 			if ("Y".equals(mobileYn)) {
@@ -670,7 +670,9 @@ public class TsfGoodsController extends TsfBaseController {
 
 		// 자사 일반상품- 옵션2(사이즈) 정보
 		paramsGoods.setOptCd1(colorCd);
-		if (StringUtils.isEmpty(paramsGoods.getMastrGoodsCd())) paramsGoods.setMastrGoodsCd(goods.getGoodsCd());
+		if (StringUtils.isEmpty(paramsGoods.getMastrGoodsCd())) {
+			paramsGoods.setMastrGoodsCd(goods.getGoodsCd());
+		}
 		mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
 
 		mav.setViewName(super.getDeviceViewName("goods/GoodsInstockAlarmForm"));
@@ -841,13 +843,12 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@PostMapping("/review/detail/layer")
 	public ModelAndView goodsReviewDetailForm(Review review) {
-		//log.info("goodsReviewDetailForm {}", review);
+		log.info("goodsReviewDetailForm {}", review);
 		ModelAndView mav = new ModelAndView();
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		Goods paramsGoods = new Goods();
 		paramsGoods.setGoodsCd(review.getGoodsCd());
 		setGoods(paramsGoods);
-		// Goods goods = goodsService.getGoodsInfo(paramsGoods);
 
 		// 상품 기본정보
 		mav.addObject("params", paramsGoods);
@@ -860,6 +861,21 @@ public class TsfGoodsController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 상품상세 -  상품평 상세 레이어
+	 * @return
+	 * @author eskim
+	 * @since 2021. 3. 8
+	 */
+	@PostMapping("/review/detail/list")
+	@ResponseBody
+	public GagaMap getReviewDetailList(@RequestBody Review review) {
+		log.info("getReviewDetailList {}", review);
+		GagaMap result = new GagaMap();
+		result.set("reviewList", reviewService.getReviewList(review));
+		return result;
+	}
+
 	/**
 	 * 상품상세 - 다다익선 상품
 	 * 
@@ -896,7 +912,7 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(goods);
 		goods.setMaxRownum(15);
-		String [] arrGoodsCd= {"10813855",
+		String[] arrGoodsCd = {"10813855",
 			"L171TJ561P",
 			"B172SH710P",
 			"B192DO995P",
@@ -915,7 +931,7 @@ public class TsfGoodsController extends TsfBaseController {
 			"L171TJ501P",
 			"10814432",
 			"B192SH730P"};
-		
+
 		StringBuilder sql = new StringBuilder();
 		if (arrGoodsCd.length > 0) {
 			int idx = 1;
@@ -928,8 +944,8 @@ public class TsfGoodsController extends TsfBaseController {
 				}
 			}
 			goods.setGoodsSql(sql.toString());
-		}	
-		
+		}
+
 		goods.setArrGoodsCd(arrGoodsCd);
 		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
 		//log.info("goodsTogetherForm = goods{}", goods);
@@ -953,8 +969,8 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(goods);
 		goods.setMaxRownum(15);
-		
-		String [] arrGoodsCd= {"10813855",
+
+		String[] arrGoodsCd = {"10813855",
 			"L171TJ561P",
 			"B172SH710P",
 			"B192DO995P",
@@ -973,7 +989,7 @@ public class TsfGoodsController extends TsfBaseController {
 			"L171TJ501P",
 			"10814432",
 			"B192SH730P"};
-		
+
 		StringBuilder sql = new StringBuilder();
 		if (arrGoodsCd.length > 0) {
 			int idx = 1;
@@ -986,10 +1002,10 @@ public class TsfGoodsController extends TsfBaseController {
 				}
 			}
 			goods.setGoodsSql(sql.toString());
-		}	
-		
+		}
+
 		goods.setArrGoodsCd(arrGoodsCd);
-		
+
 		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
 		//log.info("goodsRecommendForm = goods{}", goods);
 		mav.addObject("params", goods);
@@ -1012,8 +1028,8 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(goods);
 		goods.setMaxRownum(15);
-		
-		String [] arrGoodsCd= {"10813855",
+
+		String[] arrGoodsCd = {"10813855",
 			"L171TJ561P",
 			"B172SH710P",
 			"B192DO995P",
@@ -1032,7 +1048,7 @@ public class TsfGoodsController extends TsfBaseController {
 			"L171TJ501P",
 			"10814432",
 			"B192SH730P"};
-		
+
 		StringBuilder sql = new StringBuilder();
 		if (arrGoodsCd.length > 0) {
 			int idx = 1;
@@ -1045,10 +1061,10 @@ public class TsfGoodsController extends TsfBaseController {
 				}
 			}
 			goods.setGoodsSql(sql.toString());
-		}	
-		
+		}
+
 		goods.setArrGoodsCd(arrGoodsCd);
-		
+
 		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
 		//log.info("goodsLikeForm = goods{}", goods);
 		mav.addObject("params", goods);
@@ -1134,7 +1150,9 @@ public class TsfGoodsController extends TsfBaseController {
 
 		//log.info("goods = {}", goods);
 		GagaMap result = new GagaMap();
-		if (StringUtils.isEmpty(goods.getMastrGoodsCd())) goods.setMastrGoodsCd(goods.getGoodsCd());
+		if (StringUtils.isEmpty(goods.getMastrGoodsCd())) {
+			goods.setMastrGoodsCd(goods.getGoodsCd());
+		}
 		result.set("dataList", goodsService.getGoodsOption2List(goods));
 
 		return result;
@@ -1396,7 +1414,7 @@ public class TsfGoodsController extends TsfBaseController {
 		wishList = wishListService.getWishListGoodsList(wish);
 		return wishList;
 	}
-	
+
 	/**
 	 * ep 쿠폰 목록
 	 *
@@ -1411,7 +1429,7 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		Goods paramsGoods = new Goods();
 		setGoods(paramsGoods);
-		
+
 		// 순서중요 setGoods 이후에 설정
 		paramsGoods.setAfLinkCd(paramMap.get("afLinkCd"));
 		paramsGoods.setGoodsCd(paramMap.get("goodsCd"));

+ 49 - 3
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;
@@ -52,7 +54,6 @@ 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;
@@ -144,7 +145,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) {
@@ -180,6 +181,13 @@ public class TsfMypageController extends TsfBaseController {
 		// 2021.04.21 모바일에서 사용하려고 추가
 		int totalCnt = orderService.getPagingOrdNoListCount(order);
 		mav.addObject("totalCnt", totalCnt);
+		
+		// 2021.04.25 마이페이지 메인화면 판단기준
+		if (request.getRequestURL().toString().indexOf("mypage/main/form") > 0) {
+			mav.addObject("mypageMainYn", "Y");
+		} else {
+			mav.addObject("mypageMainYn", "N");
+		}
 
 		// 주문상세상태코드 설정
 		mav.addObject("ordDtlStatList", rendererService.getCommonCodeList("G013", "Y", new String[] {"G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
@@ -247,6 +255,9 @@ public class TsfMypageController extends TsfBaseController {
 		// 주문 배송지 정보 조회
 		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
 
+		// 상품권 현금영수증 신청 정보 조회
+		mav.addObject("cashReceiptsInfo", giftcardService.getCashReceiptsRequestInfo(order));
+
 		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderDetailForm"));
 
 		return mav;
@@ -279,9 +290,9 @@ public class TsfMypageController extends TsfBaseController {
 
 		if (ordNoList.size() > 0) {
 			order.setOrdNoList(ordNoList.stream().mapToInt(Integer::intValue).toArray());
+			map.set("orderList", orderService.getOrderListForMypage(order));
 		}
 
-		map.set("orderList", orderService.getOrderListForMypage(order));
 		map.set("orderInfo", order);
 
 		return map;
@@ -1032,6 +1043,41 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 
+	/**
+	 * 상품권 KCP 현금영수증 신청
+	 * 
+	 * @param Order
+	 * @return GagaResponse
+	 * @author card007
+	 * @since 2021. 04. 25
+	 */
+	@PostMapping("/cash/receipts/request")
+	@ResponseBody
+	public GagaMap requestCashReceipts(@RequestBody GiftCard giftCard) {
+		GagaMap map = new GagaMap();
+		// 상품권 KCP 현금영수증 신청 정보 조회
+		giftCard = giftcardService.getCashReceiptsInfo(giftCard);
+
+		if (giftCard == null || giftCard.getUsGfcdAmt() == 0) {
+			throw new IllegalStateException(message.getMessage("FAIL_0004"));
+		}
+
+		// 상품권 KCP 현금영수증 신청
+		GiftCard result = orderService.kcpCashReceiptsRequest(giftCard);
+
+		// 결과 처리
+		if("0000".equals(result.getResultCd())) {
+			map.set("status", GagaResponseStatus.SUCCESS.getCode());
+			map.set("message", message.getMessage("SUCC_0004"));
+		} else {
+			map.set("status", GagaResponseStatus.SUCCESS.getCode());
+			map.set("message", message.getMessage("FAIL_0004"));
+		}
+
+		return map;
+	}
+	
+
 	/**
 	 * 마이페이지 STYLE24 포인트화면
 	 *

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

@@ -246,6 +246,7 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("sumDelvFee" 			, delvOrderMap.get("sumDelvFee"));			// 배송비합계
 
 		// 4.2 할인정보(상품금액, 즉시할인, 다다익선, 선포인트, 적립예정포인트) 
+		mav.addObject("listSumAmt"			, goodsDcAmtMap.get("listSumAmt"));			// 상품금액합계(정상가)
 		mav.addObject("orgGoodsSumAmt"		, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
 		mav.addObject("cpn1DcSumAmt"		, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
 		mav.addObject("tmtbDcSumAmt"		, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
@@ -868,7 +869,8 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("ordSumAmt"			, resultMap.get("ordSumAmt"));			// 주문금액합계
 		mav.addObject("dcSumAmt"			, resultMap.get("dcSumAmt"));			// 할인금액합계
 		mav.addObject("realOrdSumAmt"		, resultMap.get("realOrdSumAmt"));		// 결제금액합계
-		mav.addObject("goodsSumAmt"			, resultMap.get("goodsSumAmt"));		// 상품금액합계
+		mav.addObject("listSumAmt"			, resultMap.get("listSumAmt"));			// 상품금액합계(정상가)
+		mav.addObject("goodsSumAmt"			, resultMap.get("goodsSumAmt"));		// 상품금액합계(판매가)
 		mav.addObject("delvFeeSumAmt"		, resultMap.get("delvFeeSumAmt"));		// 배송비합계
 		mav.addObject("cpn1DcSumAmt"		, resultMap.get("cpn1DcSumAmt"));		// 즉시할인합계
 		mav.addObject("tmtbSumAmt"			, resultMap.get("tmtbSumAmt"));			// 다다익선합계

+ 7 - 2
src/main/java/com/style24/persistence/domain/Goods.java

@@ -149,7 +149,7 @@ public class Goods extends TscBaseDomain {
 	private Integer reviewSq;
 	private String goodsStatNm;
 	private String regDtMonth;
-	
+
 	private int goodsQnaCnt;	// 상품문의건수
 
 	private String sizeGb;		// 사이즈구분(T:상의, B:하의, S:신발)
@@ -159,10 +159,11 @@ public class Goods extends TscBaseDomain {
 
 	private String skuModelNo;		// SKUModelNo(WMS)
 	private String compsGoodsCd;	// 세트 구성품 상품번호
-	private String mastrGoodsCd; 	
+	private String mastrGoodsCd;
 	private String optCd;			// 옵션코드
 	private String optCd1;			// 옵션코드1
 	private String optCd2;			// 옵션코드2
+	private String optCd1Nm;
 	private int qty;				// 세트 상품 구성 수량
 	private String itemCd;			// 단품코드
 
@@ -196,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;
 
 }

+ 16 - 15
src/main/java/com/style24/persistence/domain/Review.java

@@ -50,9 +50,9 @@ public class Review extends TscBaseDomain {
 	private String admRpl;			// 관리자댓글
 	private int admRplRegNo;		// 댓글등록자번호
 	private String admRplDt;		// 관리자댓글등록일시
-	private String frontGb;			
+	private String frontGb;
 	private String custGb;
-	
+
 	private String custId;			// 고객ID
 	private String sysImgNm;		// 상품대표이미지
 	private String sizeGb;			// 사이즈구분(T:상의, B:하의, S:신발)
@@ -67,7 +67,7 @@ public class Review extends TscBaseDomain {
 	private String selfGoodsYn;		// 자사상품여부
 	private int iscore;				// 구매평점(상품상세용)
 	private int rownum;
-	
+
 	private String reviewScore;		// 상품평 검색조건 평점
 	private String reviewOption;	// 상품평 검색조건 옵션
 	private String reviewHeight;	// 상품평 검색조건 키	0-150
@@ -76,7 +76,7 @@ public class Review extends TscBaseDomain {
 	private String reviewWeight;	// 상품평 검색조건 몸무게	0-50
 	private int reviewWeightSt;	// 상품평 검색조건 몸무게 구간시작	0
 	private int reviewWeightEd;	// 상품평 검색조건 몸무게 구간종료	50
-	
+
 	private String reviewSysImg;	// 리뷰대표이미지
 	private String sysFileNm;		//시스템 파일명
 	private String orgFileNm;		// 원본 파일명
@@ -97,11 +97,12 @@ public class Review extends TscBaseDomain {
 	private String brandEnm;
 	private String optCd1;
 	private String optCd2;
+	private String optCd1Nm;
 	private String remainDt;
 	private String itemNm;
-	private String colorNm;	
-	
-	
+	private String colorNm;
+	private int prevReviewSq;
+	private int nextReviewSq;
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] orgFileNmArr;
@@ -119,17 +120,18 @@ public class Review extends TscBaseDomain {
 	private String[] optCd2Arr;		// 옵션코드
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] itemQtyArr;	// 구성상품번호
+
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	
+
 	// Masking
 	public String getMaskingCustId() {
-		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
+		return (this.custId != null) ? MaskingUtils.id(this.custId) : this.custId;
 	}
-	
+
 	Collection<ReviewAttach> reviewAttachList;	//상품평 첨부파일목록
-	
+
 	Collection<Goods> goodsOptionList;			//상품평 상품 옵션목록
-	
+
 	// Pagination
 	@JsonInclude(JsonInclude.Include.NON_EMPTY)
 	private TscPageRequest pageable;
@@ -139,10 +141,9 @@ public class Review extends TscBaseDomain {
 	private int pageNo = 1;							// 페이지번호
 	private int pageSize = 5;						// 페이지목록수
 	private int pageUnit = 10;						// 페이지번호수
-	
+
 	private int pageNo2 = 1;							// 페이지번호
 	private int pageSize2 = 5;						// 페이지목록수
 	private int pageUnit2 = 10;						// 페이지번호수
-	
-	
+
 }

+ 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

+ 30 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml

@@ -212,6 +212,36 @@
 		       ) ORIGINAL
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 	</sql>
+	
+	<!-- 상품권 KCP 현금영수증 신청 정보 조회 -->
+	<select id="getCashReceiptsInfo" parameterType="GiftCard" resultType="GiftCard">
+		/* TsfGiftcard.getCashReceiptsInfo */
+		SELECT O.ORD_NO
+		     , DATE_FORMAT(O.ORD_DT, '%Y%m%d%H%i%S') AS TRADE_TIME
+		     , O.ORD_NM
+		     , O.ORD_PHNNO
+		     , O.ORD_EMAIL
+		     , MAX((SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = OD.GOODS_CD)) OVER(ORDER BY OD.ORD_DTL_NO) AS GOODS_NM
+		     , SUM(OD.GFCD_USE_AMT) AS US_GFCD_AMT
+		  FROM TB_ORDER O
+		 INNER JOIN TB_ORDER_DETAIL OD
+		    ON O.ORD_NO = OD.ORD_NO
+		 WHERE O.ORD_NO = #{ordNo}
+		 GROUP BY O.ORD_NO, DATE_FORMAT(O.ORD_DT, '%Y%m%d%H%i%S'), O.ORD_NM, O.ORD_PHNNO, O.ORD_EMAIL
+	</select>
+	
+	<!-- 상품권 KCP 현금영수증 신청 여부 조회 -->
+	<select id="getCashReceiptsRequestInfo" parameterType="Order" resultType="GiftCard">
+		/* TsfGiftcard.getCashReceiptsRequestInfo */
+		SELECT ORD_NO
+		     , TRADE_NO
+		     , AUTH_NO
+		     , AMT
+		     , REG_DT
+		     , UPD_DT
+		  FROM TB_GIFTCARD_RECEIPT
+		 WHERE ORD_NO = #{ordNo}
+	</select>
 
 
 </mapper>

+ 10 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -744,7 +744,7 @@
 		         , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
 		         , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
 		         , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
-		         , (CASE WHEN G.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
+		         , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		    FROM TAB_MASTER_GOODS G
 		    LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                                  AND IFNULL(#{custNo}, 0) = W.CUST_NO
@@ -835,7 +835,7 @@
 		         , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
 		         , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
 		         , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
-		         , (CASE WHEN G.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
+		         , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		    FROM TAB_MASTER_GOODS G
 		    LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                                  AND IFNULL(#{custNo}, 0) = W.CUST_NO
@@ -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>

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

@@ -146,42 +146,42 @@
 		     , C.CUST_ID 
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
 		     , (SELECT TI.SIZE_GB FROM TB_ITEMKIND TI WHERE TI.ITEMKIND_CD = G.ITEMKIND_CD) AS SIZE_GB
-		     , (SELECT MAX(REVIEW_SQ) 
-		        FROM TB_REVIEW R
-		        WHERE REVIEW_SQ <![CDATA[<]]> #{reviewSq} 
-		        AND GOODS_CD = R.GOODS_CD 
-		        AND DEL_YN = 'N'
+		     , (SELECT MAX(RP.REVIEW_SQ) 
+		        FROM TB_REVIEW RP
+		        WHERE RP.REVIEW_SQ <![CDATA[<]]> #{reviewSq} 
+		        AND RP.GOODS_CD = R.GOODS_CD 
+		        AND RP.DEL_YN = 'N'
 		        <if test='bestYn != null and bestYn == "Y"'>
-		        AND BEST_YN = 'Y'
+		        AND RP.BEST_YN = 'Y'
 		        </if>
 		        <if test='photoYn != null and photoYn == "Y"'>
 		        AND EXISTS (SELECT 1 
-		                    FROM TB_REVIEW_ATTACH 
-		                    WHERE DEL_YN = 'N' 
-		                    AND REVIEW_SQ = R.REVIEW_SQ
-		                    AND (FILE_GB  = 'I'
+		                    FROM TB_REVIEW_ATTACH RPA
+		                    WHERE RPA.DEL_YN = 'N' 
+		                    AND RPA.REVIEW_SQ = RP.REVIEW_SQ
+		                    AND (RPA.FILE_GB  = 'I'
 		                         OR
-		                         FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'
+		                         RPA.FILE_GB = 'M' AND RP.CONFIRM_YN = 'Y'  AND  RPA.KMC_KEY IS NOT NULL
 		                        )
 		                    )
 		        </if>
 		        ) AS PREV_REVIEW_SQ
-		     , (SELECT MIN(REVIEW_SQ) 
-		        FROM TB_REVIEW 
-		        WHERE REVIEW_SQ > #{reviewSq}
-		        AND GOODS_CD = R.GOODS_CD 
-		        AND DEL_YN = 'N'
+		     , (SELECT MIN(RN.REVIEW_SQ) 
+		        FROM TB_REVIEW RN
+		        WHERE RN.REVIEW_SQ > #{reviewSq}
+		        AND RN.GOODS_CD = R.GOODS_CD 
+		        AND RN.DEL_YN = 'N'
 		        <if test='bestYn != null and bestYn == "Y"'>
-		        AND BEST_YN = 'Y'
+		        AND RN.BEST_YN = 'Y'
 		        </if>
 		        <if test='photoYn != null and photoYn == "Y"'>
 		        AND EXISTS (SELECT 1 
-		                    FROM TB_REVIEW_ATTACH 
-		                    WHERE DEL_YN = 'N' 
-		                    AND REVIEW_SQ = R.REVIEW_SQ
-		                    AND (FILE_GB  = 'I'
+		                    FROM TB_REVIEW_ATTACH RNA
+		                    WHERE RNA.DEL_YN = 'N' 
+		                    AND RNA.REVIEW_SQ = RN.REVIEW_SQ
+		                    AND (RNA.FILE_GB  = 'I'
 		                         OR
-		                         FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'
+		                         RNA.FILE_GB = 'M' AND RN.CONFIRM_YN = 'Y'  AND  RNA.KMC_KEY IS NOT NULL
 		                        )
 		                    )
 		        </if>
@@ -208,7 +208,7 @@
 		            AND REVIEW_SQ = R.REVIEW_SQ
 		            AND (FILE_GB  = 'I'
 		                 OR
-		                 FILE_GB = 'M' AND R.CONFIRM_YN = 'Y' AND  KMC_EKY IS NOT NULL
+		                 FILE_GB = 'M' AND R.CONFIRM_YN = 'Y' AND  KMC_KEY IS NOT NULL
 		                )
 		            )
 		</if>
@@ -274,7 +274,7 @@
 		AND R.REVIEW_SQ = #{reviewSq}
 		AND (A.FILE_GB  = 'I'
 		     OR
-		     A.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y' AND  A.KMC_EKY IS NOT NULL
+		     A.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y' AND  A.KMC_KEY IS NOT NULL
 		    )
 	</select>
 	
@@ -289,6 +289,7 @@
 		     , ODI.ITEM_CD 
 		     , ODI.OPT_CD1 
 		     , ODI.OPT_CD2
+		     , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS OPT_CD1_NM
 		FROM TB_REVIEW R 
 		INNER JOIN TB_ORDER_DETAIL OD ON R.ORD_NO = OD.ORD_NO 
 		                              AND R.ORD_DTL_NO  = OD.ORD_DTL_NO
@@ -296,6 +297,8 @@
 		INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_NO = ODI.ORD_NO 
 		                                    AND OD.ORD_DTL_NO  = ODI.ORD_DTL_NO
 		INNER JOIN TB_GOODS G ON ODI.ITEM_CD = G.GOODS_CD
+		LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
+		                           AND C.USE_YN = 'Y'
 		WHERE R.REVIEW_SQ = #{reviewSq} 
 		AND R.GOODS_CD = #{goodsCd}
 	</select>
@@ -341,6 +344,7 @@
 		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
+		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
 		     , Z.ORD_NO
 		     , Z.ORD_DT
 		     , Z.PAY_DT
@@ -392,6 +396,7 @@
 		             , ODI.ORD_DTL_ITEM_SQ
 					 , ODI.OPT_CD1
 					 , ODI.OPT_CD2
+					 , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS OPT_CD1_NM
 					 , G.LIST_PRICE
 		             , G.GOODS_TYPE
 		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
@@ -444,6 +449,8 @@
 									GROUP BY OCD.ORD_DTL_NO
 								  ) OCD
 				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
+		                                   AND C.USE_YN = 'Y'
 				  WHERE 1=1
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') 
 				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
@@ -467,6 +474,7 @@
 		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(Z.OPT_CD1 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
+		     , GROUP_CONCAT(Z.OPT_CD1_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD1_NM
 		     , Z.ORD_NO
 		     , Z.ORD_DT
 		     , Z.PAY_DT
@@ -549,6 +557,7 @@
 		             , ODI.ORD_DTL_ITEM_SQ
 					 , ODI.OPT_CD1
 					 , ODI.OPT_CD2
+					 , IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS OPT_CD1_NM
 					 , G.LIST_PRICE
 		             , G.GOODS_TYPE
 		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
@@ -638,6 +647,8 @@
 									GROUP BY OCD.ORD_DTL_NO
 								  ) OCD
 				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
+		                                   AND C.USE_YN = 'Y'
 				  WHERE 1=1
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') 
 				<choose>
@@ -838,6 +849,7 @@
 			      ,ODI.OPT_CD 
 			      ,ODI.OPT_CD1
 			      ,ODI.OPT_CD2
+			      ,IFNULL(C.COLOR_KNM, ODI.OPT_CD1) AS OPT_CD1_NM
 			      ,ODI.ITEM_QTY 
 			      ,ODI.ITEM_PRICE
 			      ,G.GOODS_NM 
@@ -906,6 +918,8 @@
 			                              		AND R.DEL_YN = 'N'
 			                              		AND R.DISP_YN = 'Y'
 			                LEFT JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD 
+			                LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
+		                                               AND C.USE_YN = 'Y'
 			WHERE 1=1
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'

+ 2 - 1
src/main/resources/config/application-tsit.yml

@@ -20,7 +20,8 @@ logging:
 
 domain:
     admin: //tdadmin.style24.com
-    front: //tdfront.style24.com
+#    front: //tdfront.style24.com
+    front: //ts5000.ipdisk.co.kr
     image: //tdimage.style24.com
     uximage: //tdimage.style24.com
 

+ 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) {

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

@@ -55,14 +55,70 @@
 
 <main role="" id="" class="container my">
 	<section class="content my_order">
-		<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>
+		
+		<!-- only 마이페이지메인 -->
+		<th:block th:if="${mypageMainYn} == 'Y'">
+			<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>
+			<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>
+		</th:block>
+		<!-- //only 마이페이지메인 -->
+		
+		<!-- only 주문목록 -->
+		<th:block th:if="${mypageMainYn} == 'N'">
+			<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>
+		</th:block>
+		<!-- only 주문목록 -->
 		
-		<!-- 주문목록 -->
+		<!-- common 주문목록 -->
 		<div data-id="layer_infinite_item" >
 			<section id="infiniteContainer">
 				<div id="listBoxOuter">
@@ -71,6 +127,29 @@
 				</div>
 			</section>
  		</div>
+ 		<!-- common 주문목록 -->
+ 		
+ 		<!-- only 마이페이지메인 -->
+ 		<th:block th:if="${mypageMainYn} == 'Y'">
+	 		<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>
+		</th:block>
+		<!-- //only 마이페이지메인 -->
  		
 	</section>
 </main>
@@ -105,7 +184,9 @@
 			<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>
+					<button type="button" class="ordDtlStat" th:code="${ordDtlStat.cd}">
+						<span th:text="${ordDtlStat.cdNm}"></span>
+					</button>
 				</th:block>
 			</div>
 		</div>
@@ -125,6 +206,7 @@ var totalPage		= 0;
 var remainList		= 0;
 var jsonObj 		= {};
 var scrollTemp		= true;
+var mypageMainYn	= [[${mypageMainYn}]];
 
 // 초기설정
 $(document).ready(function() {
@@ -155,25 +237,31 @@ $(document).ready(function() {
 	jsonData = JSON.stringify(jsonObj);
 	
 	// 초기 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);
+	if (mypageMainYn == 'Y') {
+		jsonObj.pageSize = 1;
+		jsonObj.pageUnit = 1;
+		fnSetSearchPeriod(1);
+	} else {
+		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() {

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

@@ -205,7 +205,7 @@
 									<div>
 										<dt>상품금액</dt>
 										<dd>
-											<div><span th:text="${#numbers.formatInteger(goodsSumAmt, 1, 'COMMA')}"></span>원</div>
+											<div><span th:text="${#numbers.formatInteger(listSumAmt, 1, 'COMMA')}"></span>원</div>
 										</dd>
 									</div>
 									<div>

+ 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>

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

@@ -31,7 +31,12 @@
 					<div>
 						<div class="fold_tit"><span>배송지 정보</span></div>
 						<div class="data">
-							<span id="recipAddr" th:text="${deliveryAddrInfo.recipBaseAddr} + '   ' + ${deliveryAddrInfo.recipDtlAddr}"></span>
+							<th:block th:if="${deliveryAddrInfo.recipZipcode} == '00000'">
+								<span id="recipAddr">배송지 정보를 등록해 주세요.</span>
+							</th:block>
+							<th:block th:if="${deliveryAddrInfo.recipZipcode} != '00000'">
+								<span id="recipAddr" th:text="${deliveryAddrInfo.recipBaseAddr} + '   ' + ${deliveryAddrInfo.recipDtlAddr}"></span>
+							</th:block>
 						</div>
 					</div>
 				</a>
@@ -57,11 +62,22 @@
 						</div>
 						<div class="phone">
 							<dt><span class="sr-only">휴대폰 번호</span></dt>
-							<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+							<th:block th:if="${deliveryAddrInfo.recipZipcode} == '00000'">
+								<dd>휴대폰번호를 등록해 주세요.</dd>
+							</th:block>
+							<th:block th:if="${deliveryAddrInfo.recipZipcode} != '00000'">
+								<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+							</th:block>
+							
 						</div>
 						<div class="addr">
 							<dt><span class="sr-only">배송주소</span></dt>
-							<dd th:text="${deliveryAddrInfo.recipBaseAddr} + '    ' + ${deliveryAddrInfo.recipDtlAddr}"></dd>
+							<th:block th:if="${deliveryAddrInfo.recipZipcode} == '00000'">
+								<dd id="recipAddr">배송지 정보를 등록해 주세요.</dd>
+							</th:block>
+							<th:block th:if="${deliveryAddrInfo.recipZipcode} != '00000'">
+								<dd th:text="${deliveryAddrInfo.recipBaseAddr} + '    ' + ${deliveryAddrInfo.recipDtlAddr}"></dd>
+							</th:block>
 						</div>
 						
 						<div class="ship_request ship_select">

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

@@ -321,45 +321,85 @@
 				<div class="area_paymentinfo">
 					<div class="paymentinfo">
 						<div class="payinfo_blk_wrap">
-							<a href=""> 구매조건 확인 및 결제대행 서비스 약관 동의 <span>보기</span>
-							</a>
+							<a href="javascript:void(0);">구매조건 확인 및 결제대행 서비스 약관 동의<span>보기</span></a>
 							<div class="payinfo_blk_parent">
 								<div class="payinfo_blk">
-									<a href=""> 개인정보 제공에 대한 동의 <span>보기</span></a>
-									<div class="infotxt">개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-										내용입니다.개인정보제공에 대한 동의 내용입니다.</div>
+									<a href="javascript:void(0);">개인정보 제공에 대한 동의<span>보기</span></a>
+									<div class="infotxt">
+										STYLE24는 다음과 같이 회원님의 개인정보를 제3자에게 제공합니다.
+										<table>
+											<colgroup>
+												<col width="30%">
+												<col width="*">
+											</colgroup>
+											<tbody>
+												<tr>
+													<th>제공받는 자</th>
+													<td>서울보증보험㈜, ㈜유세이프</td>
+												</tr>
+												<tr>
+													<th>제공하는 항목</th>
+													<td>
+														구매자명, 구매자 생년월일,
+														구매자 성별, 구매자 연락처
+														(일반전화 및 핸드폰), 구매자
+														이메일, 주문번호,
+														배송지 정보, 주문 금액
+													</td>
+												</tr>
+												<tr>
+													<th>제공 목적</th>
+													<td>쇼핑몰보증보험 가입 및 보험가입 제반 사항</td>
+												</tr>
+												<tr>
+													<th>보유 및 이용기간</th>
+													<td>개별서비스 제공기간</td>
+												</tr>
+											</tbody>
+										</table>
+										<table>
+											<colgroup>
+												<col width="30%">
+												<col width="*">
+											</colgroup>
+											<tbody>
+												<tr>
+													<th>제공받는 자</th>
+													<td>더비오유컴퍼니 주식회사</td>
+												</tr>
+												<tr>
+													<th>제공하는 항목</th>
+													<td>성명, 주소, 연락처</td>
+												</tr>
+												<tr>
+													<th>제공 목적</th>
+													<td>주문상품의 배송, 고객상담 및 불만처리</td>
+												</tr>
+												<tr>
+													<th>보유 및 이용기간</th>
+													<td>이용목적 달성 시 까지</td>
+												</tr>
+											</tbody>                                                       
+										</table>
+									</div>
 								</div>
 								<div class="payinfo_blk">
-									<a href=""> 결제대행 서비스 약관 동의 <span>보기</span></a>
-									<div class="infotxt">결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-										내용입니다.결제대행서비스 약관 동의 내용입니다.</div>
+									<a href="">
+										결제대행 서비스 약관 동의
+										<span>보기</span>
+									</a>
+									<div class="infotxt">
+										결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
+									</div>
 								</div>
 							</div>
 						</div>
+						
+					</div>
+					
+					<div class="agree_payment">
+						위 주문내역을 확인 하였으며, 회원 본인은 결제에 동의합니다. (전자상거래법 제 8조 제2항)
 					</div>
-					<div class="agree_payment">위 주문내역을 확인 하였으며, 회원 본인은 결제에 동의합니다.</div>
 				</div>
 			</div>
 
@@ -869,6 +909,14 @@ var paymentInfoSet = function() {
 					if ($(this).find("input[name=rdi-paynormal]").is(":checked")) {
 						$(".payTypeNm").text(payType);
 					}
+					
+					// 2021.04.25 실시간계좌이체, 무통장입금시 보증보험 신청 약관 노출
+					if (payType == "실시간계좌이체" || payType == "무통장입금" ) {
+						$("#orderForm .area_paymethod .agree_insurance").show();
+					} else {
+						$("#orderForm .area_paymethod .agree_insurance").hide();
+						$("#orderForm input[name=insuranceYn]").attr("checked", false);
+					}
 				});
 				
 				// 결재하기
@@ -883,6 +931,20 @@ var paymentInfoSet = function() {
 					var orgEntryNo 			= "";
 					var entryNo 			= "";
 					var giftMsg				= "감사합니다.";
+					var insuranceYn			= "N";
+					
+					// 2021.04.25 
+					if ($("#orderForm input[name=insuranceYn]").is(":checked")) {
+						insuranceYn = "Y"; 
+					}
+					
+					// 배송주소등록
+					if ($("#orderAmtForm .recipZipcode").text() == "00000") {
+						mcxDialog.alert("배송정보를 등록해 주세요.");
+						// 배송정보화면노출
+						deliveryAddrInfoDispYn("Y");
+						return false;
+					}
 					
 					// 선물받기일때 배송지주소 받지않음
 					if (giftPackYn == "N") {
@@ -1064,6 +1126,7 @@ var paymentInfoSet = function() {
 						,"recipBaseAddr"		: $("#orderAmtForm .recipBaseAddr").text()
 						,"recipDtlAddr"			: $("#orderAmtForm .recipDtlAddr").text()
 						,"delvMemo"				: $("#orderAmtForm .delvMemo").text()
+						,"insuranceYn"			: insuranceYn
 						,"sexGb"				: $("#orderAmtForm .sexGb").text()
 						,"birthYmd"				: $("#orderAmtForm .birthYmd").text()
 						,"prePntDcAmtYn"		: prePntDcAmtYn
@@ -1204,6 +1267,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 +1316,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 +1342,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 +1405,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 +1436,7 @@ var dcAmtInfoSet = function() {
 					
 					// 보유포인트보다 초과 사용 불가
 					if (pntDcAmt > rmPntAmt) {
-						mcxDialog.alert("보유포인트 보다 초과 사용 할 수 없습니다.");
+						mcxDialog.alert("입력하신 포인트가 보유한 포인트보다 많습니다.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -1350,6 +1458,9 @@ var dcAmtInfoSet = function() {
 						return false;
 					}
 					
+					// 2021.04.23 추가
+					mcxDialog.alert("총 " + getZeroMinusDelAmt(pntDcAmt) + " P를 차감 결제 합니다.”");
+					
 					// 포인트 적용
 					$("#orderAmtForm .pntDcSumAmt").text(pntDcAmt);
 					$("#pntDcAmt").text(getZeroMinusDelAmt(pntDcAmt));
@@ -1362,16 +1473,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 +1522,9 @@ var dcAmtInfoSet = function() {
 						return false;
 					}
 					
+					// 2021.04.23 추가
+					mcxDialog.alert("총 " + gfcdUseAmt.addComma() + " 원를 상품권 금액에서 차감 결제 합니다.”");
+					
 					// 상품권 적용
 					$("#orderAmtForm .gfcdUseSumAmt").text(gfcdUseAmt);
 					$("#gfcdUseAmt").text(getZeroMinusDelAmt(gfcdUseAmt));
@@ -2200,6 +2331,7 @@ $(document).ready( function() {
 	});
 
 	//결제수단 선택
+	/*
 	$(document).on('change','.odPayment .area_paymethod .paymethod_radio input',function(e){
 		$('.radio_blk').removeClass('on');
 		$(this).parents('.radio_blk').addClass('on');
@@ -2221,6 +2353,7 @@ $(document).ready( function() {
 		});
 		return false;
 	});
+	*/
 
 	//STYLE24 간편결제 배너닫기
 	$(document).on('click','.odPayment .area_paymethod .quickpay_bnr .btn_close_bnr',function(e){
@@ -2233,7 +2366,8 @@ $(document).ready( function() {
 		return false;
 	});
 
-	//결제수단 > 일반결제> 실시간계좌이체 선택시            
+	//결제수단 > 일반결제> 실시간계좌이체 선택시
+	/*
 	$(document).on('change','.odPayment input:radio[name=rdi-paynormal]',function(e){
 		var paynormalValue = $(this).attr('id');
 		if (paynormalValue == 'rdi-paynormal2') {
@@ -2243,15 +2377,26 @@ $(document).ready( function() {
 		}
 		return false;
 	});
+	*/
 
-	// 개인정보동의 열고닫기
-	$(document).on('click','.area_paymentinfo .payinfo_blk a',function(e){
-		e.preventDefault();
-		$(this).parents('.payinfo_blk').toggleClass('on');
-		var privacyToggle = $(this).find('span');
-		$(privacyToggle).text($(privacyToggle).text() == '보기' ? '닫기' : '보기');
-		return false;
-	});
+	//구매조건 확인 및 결제대행 서비스 약관 동의 클릭시
+    $(document).on('click','.area_paymentinfo .payinfo_blk_wrap a',function(e){
+        e.preventDefault();
+		$(this).parent('.payinfo_blk_wrap').toggleClass('on');
+        $(this).siblings('.payinfo_blk_parent').toggle();
+        var privacyToggle = $(this).find('span');
+        $(privacyToggle).text($(privacyToggle).text() == '보기' ? '닫기' : '보기');
+        return false;
+    });
+
+    //개인정보동의 열고닫기
+    $(document).on('click','.area_paymentinfo .payinfo_blk a',function(e){
+        e.preventDefault();
+        $(this).parents('.payinfo_blk').toggleClass('on');
+        var privacyToggle = $(this).find('span');
+        $(privacyToggle).text($(privacyToggle).text() == '보기' ? '닫기' : '보기');
+        return false;
+    });
 
 	//배송지수정 팝업열기
 	$(document).on('click','#btn_addrModify_pop',function(e){

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

@@ -103,7 +103,6 @@
 													<span class="sale_price"><del><em th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.goodsQty, 1, 'COMMA')}"></em>원</del></span>
 													<span class="selling_price"><em th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></em>원</span>
 												</th:block>
-
 											</p>
 										</div>
 										<th:block th:if="${goods.delvResDt}">
@@ -122,7 +121,7 @@
 					<dl>
 						<div>
 							<dt>상품금액</dt>
-							<dd><em id="orgGoodsSumAmt" th:text="${#numbers.formatInteger(orgGoodsSumAmt, 1, 'COMMA')}"></em>원</dd>
+							<dd><em id="orgGoodsSumAmt" th:text="${#numbers.formatInteger(listSumAmt, 1, 'COMMA')}"></em>원</dd>
 						</div>
 						<div>
 							<dt>배송비</dt>

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

@@ -50,7 +50,7 @@
 								<li>
 									<input type="radio" name="rdi-paynormal" id="payRealBank" class="KCP" value="KCP|G014_10">
 									<label for="payRealBank">
-										<span>실시간계좌이체</span>
+										<span class="payType">실시간계좌이체</span>
 									</label>
 								</li>
 								<li>
@@ -87,7 +87,7 @@
 						</div>
 						<div class="form_field">
 							<div class="agree_insurance">
-								<input id="chk-insurance" type="checkbox"> 
+								<input id="chk-insurance" type="checkbox" name="insuranceYn"> 
 								<label for="chk-insurance"> 
 									<span>소비자 피해 보상보험 신청&nbsp;&nbsp;<em class="tmark_optional">(선택)</em></span>
 								</label>

+ 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/goods/GoodsDetailQnaFormWeb.html

@@ -65,7 +65,7 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	var fnGetList = function() {debugger;
+	var fnGetList = function() {
 		
 		// 상품문의창 닫기
 		//$("#layer_goods_qna_reg").modal("hide");

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html

@@ -547,7 +547,7 @@
 					var fileGbClass = '';
 					$.each(item.reviewAttachList, function(aIdx, reviewAttach){
 						fileGbClass = '';
-						if (reviewAttach == "M") fileGbClass = "mov";
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
 				tag += '				<li>\n';
 				tag += '					<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">\n';
 				tag += '						<div class="pic">\n';

+ 248 - 169
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html

@@ -25,191 +25,270 @@
 			<button type="button" id="btn_pdPhotoReviewList_pop" th:onclick="cfGoodsReviewPhoto([[${params.goodsCd}]])"  class="btn_more"><span>전체보기</span></button>
 			</th:block>
 		</div>
-		<div class="modal-body" th:if="${reviewList != null and !reviewList.empty}">
-			<div class="pop_cont">
-				<div class="swiper-container detail">
-					<div class="swiper-wrapper">
-						<div class="swiper-slide"  th:each="review, status : ${reviewList}" >
-							<!-- 리뷰내용 -->
-							<div class="review" th:classAppend="${(review.reviewAttachList == null or review.reviewAttachList.empty) ? 'empty_photo' :''}" >  <!-- 첨부이미지 없을 시 empty_photo 클래스 추가 --> 
-								<div class="pic">
-									<th:block th:if="${review.reviewAttachList != null and !review.reviewAttachList.empty}" >
-										<th:block th:each="reviewAttach, attachStatus : ${review.reviewAttachList}" th:if="${attachStatus.first}">
-									<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" ><!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
-										<th:block th:if="${reviewAttach.fileGb == 'M'}">
-										<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">
-											<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">
-										</video>
-										</th:block>
-										<th:block th:unless="${reviewAttach.fileGb == 'M'}">
-										<img th:src="${imgUrl+'/'+reviewAttach.sysFileNm}" alt="">
-										</th:block>
-									</span>
-										</th:block>
-									</th:block>
-									<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
-									<span class="thumb">
-										<img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=365'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
-									</span>
-									</th:block>
-								</div>
-								<div class="review_cont">
-									<div class="box_wrap">
-										<div class="star_box">
-											<div class="star_score" th:with="starScore=${#numbers.formatDecimal((review.iscore*100/5), 0,0)}">
-												<span class="star">
-													<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
-												</span>
-											</div>
-										</div>
-										<div class="response_box">
-											<div class="full" th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}">
-												<dl>
-													<div th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}" >
-														<dt>구매옵션</dt>
-														<dd th:text="${reviewGoods.optCd1 +' / '+ reviewGoods.optCd2}">베이지 / 100</dd>
-													</div>
-												</dl>
-											</div>
-											<div class="full">
-												<dl>
-													<div>
-														<dt>키/몸무게</dt>
-														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
-															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
-														</dd>
-													</div>
-												</dl>
-											</div>
-											<div th:if="${not #strings.isEmpty(review.sizeGb)}">  <!-- 사이즈구분(T:상의, B:하의, S:신발) -->
-												<dl > 
-													<div>
-														<dt>사이즈</dt>
-														<dd th:text="${review.scoreSizeNm}">작음</dd>
-													</div>
-													<div>
-														<dt>컬러</dt>
-														<dd th:text="${review.scoreColorNm}">밝음</dd>
-													</div>
-													<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
-													<div>
-														<dt>핏</dt>
-														<dd th:text="${review.scoreFitNm}">레귤러</dd>
-													</div>
-													<div>
-														<dt>두께감</dt>
-														<dd th:text="${review.scoreThickNm}">적당함</dd>
-													</div>
-													</th:block>
-													<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
-													<div>
-														<dt>무게감</dt>
-														<dd th:text="${review.scoreWeightNm}">레귤러</dd>
-													</div>
-													<div>
-														<dt>볼너비</dt>
-														<dd th:text="${review.scoreBallNm}">적당함</dd>
-													</div>
-													</th:block>
-												</dl>
-											</div>
-										</div>
-										<div class="txt_review_box">
-											<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">슬림</p>
-										</div>
-										<div class="writer_box">
-											<div class="writer">
-												<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
-												<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
-											</div>
-										</div>
-										<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
-											<div class="reply">
-												<div class="reply_writer">
-													<span class="wr_name">관리자</span>
-													<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
-												</div>
-												<div class="reply_txt">
-													<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
-														안녕하세요, 스타일24 관리자입니다.
-													</p>
-												</div>
-											</div>
-										</div>
-									</div>
-								</div>
-								<!-- 첨부이미지 썸네일 리스트 -->
-								<div class="thumblist" th:if="${review.reviewAttachList != null and !review.reviewAttachList.empty and #lists.size(review.reviewAttachList) >= 2}">
-									<ul>
-										<li th:each="reviewAttach, attachStatus : ${review.reviewAttachList}">
-											<div class="pic" th:classAppend="${(attachStatus.first) ? 'active' :''}" ><!-- 활성화시 active 클래스 추가 -->
-												<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}"  th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}" ></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-											</div>
-										</li>
-									</ul>
-								</div>
-								<!-- //첨부이미지 썸네일 리스트 -->
-							</div>
-							<!-- //리뷰내용 -->
-						</div>
-					</div>
-				</div>
-				<div class="swiper-button-next"></div>
-				<div class="swiper-button-prev"></div>
-			</div>
+		<div class="modal-body" id="reviewBody">
 		</div>
 	</div>
 </div>
+<form name="reviewDetailForm" id="reviewDetailForm" method="post">
+<input type="hidden" name="goodsCd" th:value="${review.goodsCd}" />
+<input type="hidden" name="bestYn" th:value="${review.bestYn}" />
+<input type="hidden" name="photoYn" th:value="${review.photoYn}" />
+<input type="hidden" name="reviewSq" th:value="${review.reviewSq}" />
+</form>
 <a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	 $(document).ready( function() {
+	var fnReviewDetail = function() {
+		
+		var params = new Object();
+		params.goodsCd = $('#reviewDetailForm input[name=goodsCd]').val();
+		params.reviewSq = $('#reviewDetailForm input[name=reviewSq]').val();
+		params.bestYn =$('#reviewDetailForm input[name=bestYn]').val();
+		params.photoYn = $('#reviewDetailForm input[name=photoYn]').val();
+		
+		gagajf.ajaxSubmit("/goods/review/detail/list", "json", fnReviewDetailCallback, params);
+	}
 
-		//슬라이드 - 상품 베스트 리뷰 자세히보기 영역 
-		var bestReviewDetailSwiper = new Swiper('.pd_bestreviewdetail_pop .swiper-container.detail', {
-			observer: true,
-			observeParents: true,		
-			effect :'fade',
-			slidesPerView: 1,
-			spaceBetween: 0,
-			simulateTouch:false,
-			navigation: {
-				nextEl: '.pd_bestreviewdetail_pop .swiper-button-next',
-				prevEl: '.pd_bestreviewdetail_pop .swiper-button-prev',
-			}
-		});
+	var fnReviewDetailCallback = function(result) {
+		$('#reviewBody').html('');
+		// 목록
+		if (result.reviewList != null && result.reviewList.length > 0) {
+			let fileGbClass = '';
+			$.each(result.reviewList, function(idx, review) {
+				let tag = '';
+				tag +='<div class="pop_cont">\n';
+				tag +='<div class="swiper-container detail">\n';
+				tag +='<div class="swiper-wrapper">\n';
+				tag +='<div class="swiper-slide">\n';
+				
+				let reviewClass = 'empty_photo';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					reviewClass = '';
+				}
+				tag +='<div class="review" class="'+reviewClass+'" >\n';  <!-- 첨부이미지 없을 시 empty_photo 클래스 추가 --> 
+				tag +='	<div class="pic">\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='		<span class="thumb" class="'+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
+						if (reviewAttach.fileGb == "M") {
+				tag +='			<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">\n';
+				tag +='				<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">\n';
+				tag +='			</video>\n';
+						}else{
+				tag +='			<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
+						}
+				tag +='		</span>\n';
+						return false;
+					});	
+				}else{
+				tag +='		<span class="thumb">\n';
+				tag +='			<img src="'+_uploadGoodsUrl +'/'+review.sysImgNm+'?RS=365" alt="" onerror="' + _uximgUrl + '/images/pc/thumb/bg_item_none.png"  />\n';
+				tag +='		</span>\n';	
+				}
+				tag +='	</div>\n';
+				tag +='	<div class="review_cont">\n';
+				tag +='		<div class="box_wrap">\n';
+				tag +='			<div class="star_box">\n';
+				tag +='				<div class="star_score">\n';
+				tag +='					<span class="star">\n';
+				tag +='						<em class="progbar" style="width:'+(review.iscore*20)+'%;"></em>\n'; <!-- 평점 style로 표기 -->
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="response_box">\n';
+				tag +='				<div class="full">\n';
+				tag +='					<dl>\n';
+				if (review.goodsOptionList != null && review.goodsOptionList.length > 0){
+					$.each(review.goodsOptionList, function(aIdx, reviewGoods){
+				tag +='						<div>\n';
+				tag +='							<dt>구매옵션</dt>\n';
+				tag +='							<dd>'+ reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2+'</dd>\n';
+				tag +='						</div>\n';
+					});		
+				}
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				tag +='				<div class="full">\n';
+				tag +='					<dl>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>키/몸무게</dt>\n';
+				tag +='							<dd>'+review.height+' / '+review.weight +' \n';
+				tag +='							</dd>\n';
+				tag +='						</div>\n';
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				if (!gagajf.isNull(review.sizeGb)){  <!-- 사이즈구분(T:상의, B:하의, S:신발) -->
+				tag +='				<div>\n'; 
+				tag +='					<dl > \n';
+				tag +='						<div>\n';
+				tag +='							<dt>사이즈</dt>\n';
+				tag +='							<dd>'+review.scoreSizeNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>컬러</dt>\n';
+				tag +='							<dd>'+review.scoreColorNm+'</dd>\n';
+				tag +='						</div>\n';
+					if (review.sizeGb == 'T' || review.sizeGb == 'B'){
+				tag +='						<div>\n';
+				tag +='							<dt>핏</dt>\n';
+				tag +='							<dd>'+review.scoreFitNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>두께감</dt>\n';
+				tag +='							<dd>'+ review.scoreThickNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+					if (review.sizeGb == 'S'){
+				tag +='						<div>\n';
+				tag +='							<dt>무게감</dt>\n';
+				tag +='							<dd>'+review.scoreWeightNm+'</dd>\n';
+				tag +='						</div>\n';
+				tag +='						<div>\n';
+				tag +='							<dt>볼너비</dt>\n';
+				tag +='							<dd>'+review.scoreBallNm+'</dd>\n';
+				tag +='						</div>\n';
+					}
+				tag +='					</dl>\n';
+				tag +='				</div>\n';
+				}
+				tag +='			</div>\n';
+				tag +='			<div class="txt_review_box">\n';
+				tag +='				<p>' + review.reviewContent +'</p>\n';
+				tag +='			</div>\n';
+				tag +='			<div class="writer_box">\n';
+				tag += '			<div class="writer">\n';
+				tag += '				<span class="wr_id">'+ review.maskingCustId +'</span>\n';
+				tag += '				<span class="wr_date">' + review.regDt + '</span>\n';
+				tag += '			</div>\n'
+				tag +='			</div>\n';
+				if (!gagajf.isNull(review.admRpl)){
+				tag += '		<div class="reply_box">\n';
+				tag += '			<div class="reply">\n';
+				tag += '				<div class="reply_writer">\n';
+				tag += '					<span class="wr_name">관리자</span>\n';
+				tag += '					<span class="wr_date">'+review.admRplDt+'</span>\n';
+				tag += '				</div>\n';
+				tag += '				<div class="reply_txt">\n';
+				tag += '					<p>' + review.admRpl+'</p>\n';
+				tag += '				</div>\n';
+				tag += '			</div>\n';
+				tag += '		</div>\n';	
+				}
+				tag +='		</div>\n';
+				tag +='	</div>\n';
+				if (review.reviewAttachList != null && review.reviewAttachList.length >= 2){
+				tag +='	<div class="thumblist">\n';
+				tag +='		<ul>\n';
+					let activeClass = '';
+					$.each(review.reviewAttachList, function(aIdx, reviewAttach){
+						activeClass = '';
+						if (aIdx == 0){
+							activeClass = 'active';
+						}
+						fileGbClass = '';
+						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
+				tag +='			<li>\n';
+				tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+				tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+				tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
+				tag +='					</span>\n';
+				tag +='				</div>\n';
+				tag +='			</li>\n';
+					});
+				tag +='		</ul>\n';
+				tag +='	</div>\n';
+				}
+				tag +='</div>\n';
+				
+				tag +='</div>\n';
+				tag +='</div>\n';
+				tag +='</div>\n';
+				if (gagajf.isNull(review.nextReviewSq) || review.nextReviewSq <= 0) {
+					tag +='<div class="swiper-button-next swiper-button-disabled" id="reviewBodyNext" ></div>\n';
+				}else{
+					tag +='<div class="swiper-button-next" id="reviewBodyNext" onclick="fnReviewNext('+review.nextReviewSq+')"></div>\n';	
+				}
+				
+				if (gagajf.isNull(review.prevReviewSq) || review.prevReviewSq <= 0) {
+					tag +='<div class="swiper-button-prev swiper-button-disabled" id="reviewBodyPrev"  ></div>\n';
+				}else{
+					tag +='<div class="swiper-button-prev" id="reviewBodyPrev" onclick="fnReviewNext('+review.prevReviewSq+')"></div>\n';	
+				}
+				tag +='</div>\n';
+				
+				$('#reviewBody').append(tag);
+				
+				 $('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+				        var $this = $(this);
+				        
+				        var thumbCount = $this.find('.thumblist ul li').length;
+				        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+				        var thumbMargin = 8 * thumbCount;
+				        var thumbListWidth = thumbUlWidth + thumbMargin;
 
-	   /* $('.pd_bestreviewdetail_pop .swiper-slide').each(function(index, element){
-		   var $this = $(this);
-		   
-		   var thumbCount = $this.find('.thumblist ul li').length;
-		   var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
-		   var thumbMargin = 8 * thumbCount;
-		   var thumbListWidth = thumbUlWidth + thumbMargin;
+				        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+				        
+				    });
 
-		   $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
-		   
-	   }); */
+			});
+		}
+		
+	}
+	
+	// 다른 상품평 보기
+	var fnReviewNext = function(reviewSq){
+		if (gagajf.isNull(reviewSq)) return false;
+		
+		$('#reviewDetailForm input[name=reviewSq]').val(reviewSq);
+		fnReviewDetail();
+	}
+	
+	$(document).ready( function() {
+		
+		fnReviewDetail();
+       
+		 //슬라이드 - 상품 베스트 리뷰 자세히보기 영역 
+	    var photoReviewDetailSwiper = new Swiper('.pd_photoreviewdetail_pop .swiper-container.detail', {
+	        effect :'fade',
+	        slidesPerView: 1,
+	        spaceBetween: 0,
+	        simulateTouch:false,
+	        navigation: {
+	            nextEl: '.pd_photoreviewdetail_pop .swiper-button-next',
+	            prevEl: '.pd_photoreviewdetail_pop .swiper-button-prev',
+	        },
+	    });   
+
+	    $('.pd_photoreviewdetail_pop .swiper-slide').each(function(index, element){
+	        var $this = $(this);
+	        
+	        var thumbCount = $this.find('.thumblist ul li').length;
+	        var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
+	        var thumbMargin = 8 * thumbCount;
+	        var thumbListWidth = thumbUlWidth + thumbMargin;
 
-		$(document).on('click','.pd_bestreviewdetail_pop .thumblist ul li',function(e){
+	        $this.find('.thumblist ul').attr('style', 'width:' + thumbListWidth + 'px;');
+	        
+	    });
 
-			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
-			$(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
-			$(this).find(".pic").addClass('active');
+	    $(document).on('click','.pd_photoreviewdetail_pop .thumblist ul li',function(e){
 
-			var thumbIndex = $(this).index();
-			var thumbImg = $(this).find('.pic .thumb').attr('style');
-			var thumbImgSrc = thumbImg.split("background-image:url(")[1];
-			thumbImgHtml = "<img src="+ thumbImgSrc +" alt=''>";
-			$(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbImgHtml);
-			
-			return false;
-		});
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").empty();
+	        $(this).parents(".swiper-slide").find(".thumblist ul li .pic").removeClass('active');
+	        $(this).find(".pic").addClass('active');
 
+	        var thumbIndex = $(this).index();
+	        thumbContentHtml = $(this).find('.pic .thumb').html();
+	        $(this).parents(".swiper-slide").find(".review > .pic > .thumb").append(thumbContentHtml);
+
+	        return false;
+	    });
 	});		
 
-	
+	 
 /*]]>*/
 </script>	
  </html>

+ 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;				// 환불예정금액
 
 			// 추가배송비 영역 설정

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

@@ -142,7 +142,7 @@
 											</div>
 											<div class="include_item">
 												<dt>배송비</dt>
-												<dd><em th:text="${#numbers.formatInteger(oneData.rfDeliveryFee * -1, 1, 'COMMA')}"></em>원</dd>
+												<dd><em th:text="${#numbers.formatInteger(oneData.rfDeliveryFee, 1, 'COMMA')}"></em>원</dd>
 											</div>
 											<div class="include_item">
 												<dt>할인 금액 차감</dt>

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

@@ -202,9 +202,9 @@
 	// 검색기간 버튼 클릭 이벤트 처리
 	var fnSetSearchPeriod = function(period) {
 		let date = new Date();
-		let edDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+		let edDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate())).slice(-2);
 		date.setMonth(date.getMonth() - period);
-		let stDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+		let stDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate())).slice(-2);
 
 		$('#edDate').val(edDate);
 		$('#searchForm input[name=edDate]').val(edDate);

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

@@ -204,7 +204,7 @@
 											</div>
 											<div class="include_item">
 												<dt>배송비</dt>
-												<dd><em th:text="${#numbers.formatInteger(-oneData.rfDeliveryFee, 1, 'COMMA')}"></em>원</dd>
+												<dd><em th:text="${#numbers.formatInteger(oneData.rfDeliveryFee, 1, 'COMMA')}"></em>원</dd>
 											</div>
 											<div class="include_item">
 												<dt>할인 금액 차감</dt>

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

@@ -442,7 +442,7 @@
 												<dd>
 													<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>
+													<button type="button" class="btn btn_default btn_sm" th:if="${orderAmtInfo.gfcdUseAmt > 0 and (cashReceiptsInfo == null or #strings.isEmpty(cashReceiptsInfo.authNo))}" th:attr="ordNo=${ordNo}" onclick="fnRequestCashReceipt(this);"><span>상품권 현금 영수증 신청</span></button>
 												</dd>
 											</div>
 										</dl>
@@ -658,6 +658,23 @@
 		// 반품처리
 		fnReturn();
 	}
+
+	// 상품권 현금영수증 신청 처리
+	var fnRequestCashReceipt = function(param) {
+		// TODO
+		// 현금영수증 신청 처리
+		let url = '/mypage/cash/receipts/request';
+		let ordNo = $(param).attr('ordNo');
+		
+		let data = {};
+		data.ordNo = ordNo;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
+		});
+	}
 </script>
 
 </th:block>

+ 28 - 4
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -240,9 +240,9 @@
 	// 검색기간 버튼 클릭 이벤트 처리
 	var fnSetSearchPeriod = function(period) {
 		let date = new Date();
-		let edDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+		let edDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate())).slice(-2);
 		date.setMonth(date.getMonth() - period);
-		let stDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2);
+		let stDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate())).slice(-2);
 
 		$('#edDate').val(edDate);
 		$('#searchForm input[name=edDate]').val(edDate);
@@ -265,15 +265,39 @@
 
 	// 검색기간 설정 체크
 	var fnCheckPeriod = function(param) {
+		let id = $(param).attr('id');
 		let stDate = $('#stDate').val();
 		let edDate = $('#edDate').val();
 
+		$('#searchForm input[name=stDate]').val(stDate);
+		$('#searchForm input[name=edDate]').val(edDate);
+
 		let sdt = new Date(stDate);
 		let edt = new Date(edDate);
+
+		// 시작 종료일자 확인
+		if (sdt > edt) {
+			mcxDialog.alert('조회기간을 확인해주세요.');
+			
+			let chgDate;
+			if (id == 'stDate') {
+				chgDate = sdt.getFullYear() + '-' + ('0' + (sdt.getMonth() + 1)).slice(-2) + '-' + ('0' + (sdt.getDate())).slice(-2);
+			} else {
+				chgDate = edt.getFullYear() + '-' + ('0' + (edt.getMonth() + 1)).slice(-2) + '-' + ('0' + (edt.getDate())).slice(-2);
+			}
+
+			$('#stDate').val(chgDate);
+			$('#edDate').val(chgDate);
+			$('#searchForm input[name=stDate]').val(chgDate);
+			$('#searchForm input[name=edDate]').val(chgDate);
+			
+			return false;
+		}
+
+		// 기간 1년 확인
 		let dateDiff = Math.ceil((edt.getTime() - sdt.getTime()) / (1000 * 3600 * 24));
 
 		if (dateDiff > 366) {
-			let id = $(param).attr('id');
 			mcxDialog.alert('조회기간은 최대 1년을 넘을 수 없습니다.');
 			if (id == 'stDate') {
 				sdt.setFullYear(sdt.getFullYear() + 1);
@@ -634,7 +658,7 @@
 			tag += '							</div>';
 			tag += '						</div>';
 		}
-
+console.log(tag);
 		return tag;
 	}
 /*]]>*/

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


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

@@ -186,7 +186,7 @@
 						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option + ' / ' + item.optCd2Arr[index2] + '</span>\n';
 					})
 				}else{
-					html += '							<span class="option">'+item.optCd1+'&nbsp;/&nbsp;'+item.optCd2+'</span>     ';
+					html += '							<span class="option">'+item.optCd1Nm+'&nbsp;/&nbsp;'+item.optCd2+'</span>     ';
 				}
 				
 				
@@ -246,7 +246,7 @@
 				html+='						<div class="gd_opt">';
 				html+='							<div class="option_wrap">';
 				html+='								<span class="title sr-only">주문 옵션</span>';
-				html+='								<span class="option">'+item.optCd1+'&nbsp;/&nbsp;'+item.optCd2+'</span>';
+				html+='								<span class="option">'+item.optCd1Nm+'&nbsp;/&nbsp;'+item.optCd2+'</span>';
 				html+='							</div>';
 				html+='						</div>';
 				html+='					</div>';
@@ -274,7 +274,7 @@
 				html+='								<dl>';
 				html+='									<div>';
 				html+='										<dt>구매옵션</dt>';
-				html+='										<dd>'+item.optCd1+' / '+item.optCd2+'</dd>';
+				html+='										<dd>'+item.optCd1Nm+' / '+item.optCd2+'</dd>';
 				html+='									</div>';
 				html+='								</dl>';
 				html+='							</div>';

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

@@ -85,7 +85,7 @@
 														<li>
 															<span id="recipNm" th:text="${orderInfo.recipNm}"></span>
 															<!-- 
-															<span class="tag">STYLE24 일반배송</span>
+															<span class="tag">기본배송지</span>
 															<span class="tag primary_line">총알배송</span>
 															 -->
 														</li>
@@ -121,7 +121,7 @@
 											<dl>
 												<div>
 													<dt>상품금액</dt>
-													<dd><em th:text="${#numbers.formatInteger(goodsSumAmt, 1, 'COMMA')}"></em>원</dd>	
+													<dd><em th:text="${#numbers.formatInteger(listSumAmt, 1, 'COMMA')}"></em>원</dd>	
 												</div>
 												<div>
 													<dt>배송비</dt>

+ 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">

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

@@ -28,11 +28,53 @@
 	<a href="javascript:void(0)">
 		<div>
 			<div class="fold_tit"><span>배송지 정보</span></div>
-			<div class="data" id="recipAddr" th:text="${deliveryAddrInfo.recipBaseAddr} + '   ' + ${deliveryAddrInfo.recipDtlAddr}"></div>
+			<th:block th:if="${deliveryAddrInfo.recipZipcode} == '00000'">
+				<div class="data" id="recipAddr">배송지 정보를 등록해 주세요.</div>
+			</th:block>
+			<th:block th:if="${deliveryAddrInfo.recipZipcode} != '00000'">
+				<div class="data" id="recipAddr" th:text="${deliveryAddrInfo.recipBaseAddr} + '   ' + ${deliveryAddrInfo.recipDtlAddr}"></div>
+			</th:block>
 		</div>
 	</a>
 </div>
 <div class="fold_cont" style="display: none;">
+	<!-- 
+	<div class="area_receiveinfo">
+		<dl>
+			<div>
+				<dt><span class="sr-only">배송지명</span></dt>
+				<dd>
+					홍길동
+					<span class="icon_tag">
+						<em class="tag">기본 배송지</em>
+						<em class="tag primary_line">총알배송</em>
+					</span>
+				</dd>
+			</div>
+			<div>
+				<dt><span class="sr-only">휴대폰 번호</span></dt>
+				<dd>
+					010-1234-5647
+				</dd>
+			</div>
+			<div>
+				<dt><span class="sr-only">배송주소</span></dt>
+				<dd>
+					서울시 영등포구 은행로 11,8층(여의도동,일신빌딩)
+					<button type="button" class="btn btn_default btn_sm" id="btn_adrsChange_pop"><span>배송지 변경</span></button>
+				</dd>
+			</div>
+			<div>
+				<dt>배송요청 사항</dt>
+				<dd>
+					직접받고 부재 시 문앞
+					<button type="button" class="btn_underline" id="btn_rqstModify_pop"><span>변경하기</span></button>
+				</dd>
+			</div>
+		</dl>
+	</div>
+	 -->
+
 	<div class="area_receiveinfo">
 		<dl>
 			<div>
@@ -50,7 +92,12 @@
 			<div>
 				<dt><span class="sr-only">배송주소</span></dt>
 				<dd>
-					<th:block th:text="${deliveryAddrInfo.recipBaseAddr} + '    ' + ${deliveryAddrInfo.recipDtlAddr}"></th:block>
+					<th:block th:if="${deliveryAddrInfo.recipZipcode} == '00000'">
+						배송지 정보를 등록해 주세요.
+					</th:block>
+					<th:block th:if="${deliveryAddrInfo.recipZipcode} != '00000'">
+						<th:block th:text="${deliveryAddrInfo.recipBaseAddr} + '    ' + ${deliveryAddrInfo.recipDtlAddr}"></th:block>
+					</th:block>
 					<button type="button" class="btn btn_default btn_sm" id="btn_adrsChange_pop">
 						<span>배송지 변경</span>
 					</button>
@@ -58,10 +105,16 @@
 			</div>
 			<div>
 				<dt><span class="sr-only">휴대폰 번호</span></dt>
-				<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+				<th:block th:if="${deliveryAddrInfo.recipZipcode} == '00000'">
+					<dd>휴대폰 번호를 등록해 주세요.</dd>
+				</th:block>
+				<th:block th:if="${deliveryAddrInfo.recipZipcode} != '00000'">
+					<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+				</th:block>
+				
 			</div>
 			<div>
-				<dt class="sr-only">배송요청 사항</dt>
+				<dt>배송요청 사항</dt>
 				<dd>
 					<span th:text="${deliveryAddrInfo.delvMemo}" id="delvMemo"></span>
 					<button type="button" class="btn_underline" id="btn_rqstModify_pop">

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

@@ -310,41 +310,57 @@
 							<div class="area_paymentinfo">
 								<div class="paymentinfo">
 									<div class="payinfo_blk">
-										<a href=""> 개인정보 제공에 대한 동의 <span>보기</span>
-										</a>
-										<div class="infotxt">개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
-											내용입니다.개인정보제공에 대한 동의 내용입니다.</div>
+										<a href="">개인정보 제공에 대한 동의<span>보기</span></a>
+										<div class="infotxt">STYLE24는 다음과 같이 회원님의 개인정보를 제3자에게 제공합니다.
+											<table>
+												<colgroup>
+													<col width="25%">
+													<col width="*">
+													<col width="25%">
+													<col width="25%">
+												</colgroup>
+												<thead>
+													<tr>
+														<th>제공받는 자</th>
+														<th>제공하는 항목</th>
+														<th>제공 목적</th>
+														<th>보유 및 이용기간</th>
+													</tr>
+												</thead> 
+												<tbody>
+													<tr>
+														<td>서울보증보험㈜, ㈜유세이프</td>
+														<td>
+															구매자명, 구매자 생년월일,
+															구매자 성별, 구매자 연락처
+															(일반전화 및 핸드폰), 구매자
+															이메일, 주문번호,
+															배송지 정보, 주문 금액
+														</td>
+														<td>쇼핑몰보증보험 가입 및 보험가입 제반 사항</td>
+														<td>개별서비스 제공기간</td>
+													</tr>
+													<tr>
+														<td>더비오유컴퍼니 주식회사</td>
+														<td>성명, 주소, 연락처</td>
+														<td>주문상품의 배송, 고객상담 및 불만처리</td>
+														<td>이용목적 달성 시 까지</td>
+													</tr>
+												</tbody>
+											</table>
+											개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.
+										</div>
 									</div>
 									<div class="payinfo_blk">
-										<a href=""> 결제대행 서비스 약관 동의 <span>보기</span>
-										</a>
-										<div class="infotxt">결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
-											내용입니다.결제대행서비스 약관 동의 내용입니다.</div>
+										<a href="">결제대행 서비스 약관 동의<span>보기</span></a>
+										<div class="infotxt">
+											결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
+										</div>
 									</div>
 								</div>
-								<div class="agree_payment">위 주문내역을 확인 하였으며, 회원 본인은 결제에 동의합니다.</div>
+								<div class="agree_payment">
+									위 주문내역을 확인 하였으며, 회원 본인은 결제에 동의합니다. (전자상거래법 제 8조 제2항)
+								</div>
 							</div>
 							
 							<div class="area_paybtn">
@@ -372,7 +388,7 @@
 							<dl>
 								<div>
 									<dt>상품금액</dt>
-									<dd id="orgGoodsSumAmt" th:text="|${#numbers.formatInteger(orgGoodsSumAmt, 1, 'COMMA')} 원|"></dd>
+									<dd id="orgGoodsSumAmt" th:text="|${#numbers.formatInteger(listSumAmt, 1, 'COMMA')} 원|"></dd>
 								</div>
 								<div>
 									<dt>배송비</dt>
@@ -899,19 +915,41 @@ var paymentInfoSet = function() {
 					if ($(this).find("input[name=rdi-paynormal]").is(":checked")) {
 						$("#orderForm .payTypeNm").text(payType);
 					}
+
+					// 2021.04.25 실시간계좌이체, 무통장입금시 보증보험 신청 약관 노출
+					if (payType == "실시간계좌이체" || payType == "무통장입금" ) {
+						$("#orderForm .area_paymethod .agree_insurance").show();
+					} else {
+						$("#orderForm .area_paymethod .agree_insurance").hide();
+						$("#orderForm input[name=insuranceYn]").attr("checked", false);
+					}
 				});
 				
 				// 결재하기
 				$("#btn_payment").on("click", function(){
 					// 사은품정보
-					var prePntDcAmtYn		= $("input[name='rdi-beforpoint']:checked").val();
-					var paynormal			= $("input[name='rdi-paynormal']:checked").val();
+					var prePntDcAmtYn		= $("#orderForm input[name='rdi-beforpoint']:checked").val();
+					var paynormal			= $("#orderForm input[name='rdi-paynormal']:checked").val();
 					var orderDetailList		= [];
 					var delvFeeCdList		= [];
 					var ordGoodsQty			= 0;
 					var goodsNm				= "";
 					var orgEntryNo 			= "";
 					var entryNo 			= "";
+					var insuranceYn			= "N";
+					
+					// 2021.04.25 
+					if ($("#orderForm input[name=insuranceYn]").is(":checked")) {
+						insuranceYn = "Y"; 
+					}
+					
+					// 배송주소등록
+					if ($("#orderAmtForm .recipZipcode").text() == "00000") {
+						mcxDialog.alert("배송정보를 등록해 주세요.");
+						// 배송정보화면노출
+						deliveryAddrInfoDispYn("Y");
+						return false;
+					}
 					
 					// TODO 개인통관번호 동의 체크시 통관번호 등록
 					if (foreignBuyYn == "Y") {
@@ -1063,6 +1101,7 @@ var paymentInfoSet = function() {
 						,"recipBaseAddr"		: $("#orderAmtForm .recipBaseAddr").text()
 						,"recipDtlAddr"			: $("#orderAmtForm .recipDtlAddr").text()
 						,"delvMemo"				: $("#orderAmtForm .delvMemo").text()
+						,"insuranceYn"			: insuranceYn
 						,"sexGb"				: $("#orderAmtForm .sexGb").text()
 						,"birthYmd"				: $("#orderAmtForm .birthYmd").text()
 						,"prePntDcAmtYn"		: prePntDcAmtYn
@@ -1228,7 +1267,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 +1291,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 +1315,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 +1346,7 @@ var dcAmtInfoSet = function() {
 					
 					// 보유포인트보다 초과 사용 불가
 					if (pntDcAmt > rmPntAmt) {
-						mcxDialog.alert("보유포인트 보다 초과 사용 할 수 없습니다.");
+						mcxDialog.alert("입력하신 포인트가 보유한 포인트보다 많습니다.");
 						// 포인트리셋기능
 						pntDcAmtReset();
 						return false;
@@ -1295,6 +1368,9 @@ var dcAmtInfoSet = function() {
 						return false;
 					}
 					
+					// 2021.04.23 추가
+					mcxDialog.alert("총 " + getZeroMinusDelAmt(pntDcAmt) + " P를 차감 결제 합니다.”");
+					
 					// 포인트 적용
 					$("#orderAmtForm .pntDcSumAmt").text(pntDcAmt);
 					$("#pntDcAmt").text(getZeroMinusDelAmt(pntDcAmt)+" 원");
@@ -1307,16 +1383,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 +1432,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();
@@ -1679,6 +1775,9 @@ var custCpnApply = function(obj) {
 			$("#orderForm input[name=rdi-paynormal]").attr("disabled", false);
 		}
 		
+		// 2021.04.25 실시간계좌이체, 무통장입금시 보증보험 신청 약관 노출 감추는기능
+		$("#orderForm .insuranceYn").hide();
+		
 		// 선택안함
 		$("#orderForm .payTypeNm").text("선택없음");
 		
@@ -2118,6 +2217,7 @@ $(document).ready( function() {
 	});
 
 	//결제수단 선택
+	/*
 	$(document).on('change','.odPayment .area_paymethod .paymethod_radio input',function(e){
 		$('.radio_blk').removeClass('on');
 		$(this).parents('.radio_blk').addClass('on');
@@ -2139,6 +2239,7 @@ $(document).ready( function() {
 		});
 		return false;
 	});
+	*/
 
 	//STYLE24 간편결제 배너닫기
 	$(document).on('click','.odPayment .area_paymethod .quickpay_bnr .btn_close_bnr',function(e){
@@ -2151,7 +2252,8 @@ $(document).ready( function() {
 		return false;
 	});
 
-	//결제수단 > 일반결제> 실시간계좌이체 선택시            
+	//결제수단 > 일반결제> 실시간계좌이체 선택시
+	/*
 	$(document).on('change','.odPayment input:radio[name=rdi-paynormal]',function(e){
 		var paynormalValue = $(this).attr('id');
 		if (paynormalValue == 'rdi-paynormal2') {
@@ -2161,6 +2263,7 @@ $(document).ready( function() {
 		}
 		return false;
 	});
+	*/
 
 	// 개인정보동의 열고닫기
 	$(document).on('click','.area_paymentinfo .payinfo_blk a',function(e){
@@ -2172,16 +2275,20 @@ $(document).ready( function() {
 	});
 
 	//배송지수정 팝업열기
+	/*
 	$(document).on('click','#btn_addrModify_pop',function(e){
 		$("#adrsModifyPop").modal("show");
 		return false;
 	});
+	*/
 
 	//배송요청사항 팝업열기
+	/*
 	$(document).on('click','#btn_rqstModify_pop',function(e){
 		$("#rqstModifyPop").modal("show");
 		return false;
 	});
+	*/
 
 	//사은품지급안내 팝업열기
 	$(document).on('click','#btn_infoGift_pop',function(e){

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

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

+ 13 - 6
src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html

@@ -39,8 +39,15 @@
 										<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>
+								<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}" style="float:right;"><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,12 +111,12 @@ $(".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")
 	} 
-	
+
 	$.ajax( {
 		type		: "POST",
 		url 		: '/common/delvAddrModifyPop',
@@ -125,7 +132,7 @@ $(".btn_addrModify_pop").on("click", function(){
 			$("#adrsModifyPop .modal-dialog .modal-content").html(result);
 			$("#adrsModifyPop").modal("show");
 		}
-	});	
+	});
 });
 
 

+ 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>';
 		}

+ 4 - 10
src/main/webapp/biz/mypage.js

@@ -295,10 +295,10 @@ var fnReceipt = function(param) {
 		if (refundYn == 'Y') {
 			// TODO
 			// 취소전표 확인 처리
-			//receiptWin += '?cmd=card_bill';
-			//receiptWin += '&tno=' + oneData.pgTid;
-			//receiptWin += '&order_no=' + oneData.ordNo;
-			//receiptWin += '&trade_mony=' + oneData.refundAmt;
+			receiptWin += '?cmd=card_bill';
+			receiptWin += '&tno=' + oneData.pgTid;
+			receiptWin += '&order_no=' + oneData.ordNo;
+			receiptWin += '&trade_mony=' + oneData.refundAmt;
 		} else {
 			mcxDialog.alert('아직 전표생성이 되지 않았습니다.');
 			return false;
@@ -321,12 +321,6 @@ var fnReceipt = function(param) {
 	window.open(receiptWin, "", option);
 }
 
-// 상품권 현금영수증 신청 처리
-var fnRequestCashReceipt = function(param) {
-	// TODO
-	// 현금영수증 신청 처리
-}
-
 // 문자열 길이를 체크
 var cfnGetTextLength = function(obj, maxLen, dpLoc) {
 	var valLen = $(obj).val().length;

+ 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');

+ 6 - 6
src/main/webapp/ux/style24_link.js

@@ -607,12 +607,12 @@ function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq) {
 		$('body').append(str);
 	}
 	
-	var params = new Object();
-	params.goodsCd = goodsCd;
-	params.bestYn = bestYn;
-	params.photoYn = photoYn;
-	params.reviewSq = reviewSq;
-	cfOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER, 'layer_review_best' ,params );
+	var params = '?goodsCd=' + goodsCd;
+	params += '&reviewSq=' + reviewSq;
+	params += '&bestYn=' + bestYn;
+	params += '&photoYn=' + photoYn;debugger;
+	
+	cfOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
 }
 
 /**