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

Merge branch 'develop' into jsshin

jsshin 5 лет назад
Родитель
Сommit
e7f576de78
52 измененных файлов с 4649 добавлено и 2256 удалено
  1. 10 0
      src/main/java/com/style24/front/biz/dao/TsfCouponDao.java
  2. 18 0
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  3. 12 0
      src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java
  4. 27 0
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  5. 38 17
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  6. 44 0
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  7. 54 5
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  8. 58 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  9. 27 5
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  10. 19 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  11. 37 0
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  12. 35 15
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  13. 55 6
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  14. 192 28
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  15. 5 6
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  16. 49 4
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  17. 7 1
      src/main/java/com/style24/persistence/domain/Cate4Srch.java
  18. 10 1
      src/main/java/com/style24/persistence/domain/Goods.java
  19. 2 0
      src/main/java/com/style24/persistence/domain/MainLayout.java
  20. 7 3
      src/main/java/com/style24/persistence/domain/Review.java
  21. 5 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  22. 66 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  23. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  24. 307 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  25. 157 87
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  26. 97 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  27. 206 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  28. 326 210
      src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html
  29. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb_20210319.html
  30. 1012 952
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  31. 10 2
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html
  32. 2 2
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  33. 6 4
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  34. 83 2
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  35. 229 0
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  36. 312 285
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  37. 56 15
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  38. 11 38
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  39. 0 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponDetailPopWeb.html
  40. 3 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  41. 60 387
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  42. 14 6
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  43. 562 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  44. 192 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  45. 104 69
      src/main/webapp/WEB-INF/views/web/order/OrderCouponApplyPopWeb.html
  46. 9 6
      src/main/webapp/WEB-INF/views/web/order/OrderDcAmtInfoWeb.html
  47. 49 51
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  48. 6 4
      src/main/webapp/WEB-INF/views/web/order/OrderListInfoWeb.html
  49. 41 5
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  50. 2 2
      src/main/webapp/ux/pc/css/layout.css
  51. 11 17
      src/main/webapp/ux/pc/js/mypage.js
  52. 3 9
      src/main/webapp/ux/style24_link.js

+ 10 - 0
src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -88,6 +88,16 @@ public interface TsfCouponDao {
 	 */
 	 */
 	Coupon getCouponDetailInfo(int cpnId);
 	Coupon getCouponDetailInfo(int cpnId);
 	
 	
+	/**
+	 * 마이페이지 등급쿠폰 다운가능 쿠폰 정보 조회
+	 * 
+	 * @param coupon
+	 * @return Collection<Coupon>
+	 * @author sowon
+	 * @since 2021.03.24
+	 */
+	Collection<Coupon> getPlanCouponInfo(Coupon coupon);
+	
 	
 	
 	
 	
 }
 }

+ 18 - 0
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -305,4 +305,22 @@ public interface TsfGoodsDao {
 	 */
 	 */
 	Collection<Goods> getRecentlyGoodsList(Goods goods);
 	Collection<Goods> getRecentlyGoodsList(Goods goods);
 
 
+	/**
+	 * 컨텐츠카테고리상품 목록
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 3. 25
+	 */
+	Collection<Goods> getContentsCategoryGoodsList(Cate4Srch cate);
+
+	/**
+	 * 컨텐츠카테고리 신규상품 목록
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 3. 25
+	 */
+	Collection<Goods> getContentsCategoryNewGoodsList(Cate4Srch cate);
+
 }
 }

+ 12 - 0
src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java

@@ -5,6 +5,7 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Point;
 
 
 /**
 /**
@@ -56,4 +57,15 @@ public interface TsfOrderChangeDao {
 	 */
 	 */
 	Collection<Point> getUsedPointInfo(Order order);
 	Collection<Point> getUsedPointInfo(Order order);
 
 
+
+	/**
+	 * 마이페이지 취소/반품 환불 사전 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author card007
+	 * @since 2021. 03. 25
+	 */
+	Collection<Order> getRefundPreInfo(OrderChange orderChange);
+
 }
 }

+ 27 - 0
src/main/java/com/style24/front/biz/dao/TsfReviewDao.java

@@ -60,6 +60,33 @@ public interface TsfReviewDao {
 	 * @since 2021. 3. 19
 	 * @since 2021. 3. 19
 	 */
 	 */
 	Collection<Goods> getReviewOptionList(String goodsCd);
 	Collection<Goods> getReviewOptionList(String goodsCd);
+	
+	/**
+	 * 마이페이지 작성가능한 리뷰 건수
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	int getCompleteReviewCount(Review review);
+	
+	/**
+	 * 마이페이지 작성가능한 리뷰 목록
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	Collection<Review> getCompleteReviewList(Review review);
+	
+	/**
+	 * 마이페이지 리뷰 등록
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	void saveMypageReview(Review review);
 
 
 
 
 }
 }

+ 38 - 17
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -116,7 +116,7 @@ public class TsfCartService {
 		}
 		}
 
 
 		// 장바구니 정보 수정
 		// 장바구니 정보 수정
-		if (TscConstants.GoodsType.SET.value().equals(params.iterator().next().getCartGb())) {
+		if (TscConstants.GoodsType.SET.value().equals(params.iterator().next().getGoodsType())) {
 			// 세트상품일 경우
 			// 세트상품일 경우
 			saveSetTypeCartInfo(params);
 			saveSetTypeCartInfo(params);
 		} else {
 		} else {
@@ -175,8 +175,8 @@ public class TsfCartService {
 
 
 		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "C".equals(params.iterator().next().getCartGb())) {
 		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "C".equals(params.iterator().next().getCartGb())) {
 			cart.setCartGb(TscConstants.CartGb.CART.value());
 			cart.setCartGb(TscConstants.CartGb.CART.value());
-			cartSqList = cartDao.selectHasSetItemCartList(cart);
 			// 같은 장바구니 상품 확인
 			// 같은 장바구니 상품 확인
+			cartSqList = cartDao.selectHasSetItemCartList(cart);
 		} else if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "O".equals(params.iterator().next().getCartGb())) {
 		} else if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "O".equals(params.iterator().next().getCartGb())) {
 			if ("P".equals(TsfSession.getFrontGb())) {
 			if ("P".equals(TsfSession.getFrontGb())) {
 				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
 				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
@@ -342,7 +342,7 @@ public class TsfCartService {
 		}
 		}
 
 
 		// 자사 / 입점업체 리스트 분리
 		// 자사 / 입점업체 리스트 분리
-		order = getCartDelvGoodsCntList(cartGoodsList);
+		order = getCartDelvGoodsCntList(cartGoodsList, order);
 
 
 		// 장바구니 업체별 배송비 계산
 		// 장바구니 업체별 배송비 계산
 		setCartListDelvFeeInfo(cartGoodsList, order);
 		setCartListDelvFeeInfo(cartGoodsList, order);
@@ -550,7 +550,7 @@ public class TsfCartService {
 	 * @author xodud1202
 	 * @author xodud1202
 	 * @since 2021. 02. 02
 	 * @since 2021. 02. 02
 	 */
 	 */
-	public Order getCartDelvGoodsCntList(Collection<Order> cartGoodsList) {
+	public Order getCartDelvGoodsCntList(Collection<Order> cartGoodsList, Order paramOrder) {
 
 
 		// 1. 장바구니 상품 배송단위별 건수 체크 로직 (자사:총알배송, 자사:일반배송, 입점업체, 예약배송)
 		// 1. 장바구니 상품 배송단위별 건수 체크 로직 (자사:총알배송, 자사:일반배송, 입점업체, 예약배송)
 		Order delvOrder = new Order();
 		Order delvOrder = new Order();
@@ -579,7 +579,11 @@ public class TsfCartService {
 
 
 			// 1.3 배송정책별 상품 구분
 			// 1.3 배송정책별 상품 구분
 			if ("SHOT".equals(order.getCartDelvFeeCd())) {
 			if ("SHOT".equals(order.getCartDelvFeeCd())) {
-				shotCartList.add(order);
+				if(paramOrder.getShotDelvUseYn() != null && "N".equals(paramOrder.getShotDelvUseYn())) {
+					wmsCartList.add(order);
+				} else {
+					shotCartList.add(order);
+				}
 			} else if ("WMS".equals(order.getCartDelvFeeCd())) {
 			} else if ("WMS".equals(order.getCartDelvFeeCd())) {
 				wmsCartList.add(order);
 				wmsCartList.add(order);
 			} else {
 			} else {
@@ -792,19 +796,19 @@ public class TsfCartService {
 			cart.getCartCompsList().add(new Cart());
 			cart.getCartCompsList().add(new Cart());
 
 
 			for(Cart comp : cart.getCartCompsList()) {
 			for(Cart comp : cart.getCartCompsList()) {
-				if("Y".equals(cart.getSelfGoodsYn())) {
+				//if("Y".equals(cart.getSelfGoodsYn())) {
 					comp.setCartColorList(cartDao.selectCartGoodsColorList(cart));
 					comp.setCartColorList(cartDao.selectCartGoodsColorList(cart));
 
 
-					if("Y".equals(cart.getSelfGoodsYn())) {		// 자사 상품은 TB_GOODS_IMG.COLOR_CD = TB_OPTION.OPT_CD1
+				//	if("Y".equals(cart.getSelfGoodsYn())) {		// 자사 상품은 TB_GOODS_IMG.COLOR_CD = TB_OPTION.OPT_CD1
 						for(Cart color : comp.getCartColorList()) {
 						for(Cart color : comp.getCartColorList()) {
 							color.setCartSq(cart.getCartSq());
 							color.setCartSq(cart.getCartSq());
 							color.setCartImgList(cartDao.selectCartSelfGoodsOptionImgList(color));
 							color.setCartImgList(cartDao.selectCartSelfGoodsOptionImgList(color));
 							color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));
 							color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));
 						}
 						}
-					}
-				} else {
-					comp.setCartColorList(cartDao.selectCartGoodsSizeList(cart));
-				}
+				//	}
+				//} else {
+				//	comp.setCartColorList(cartDao.selectCartGoodsSizeList(cart));
+				//}
 			}
 			}
 
 
 			if(!"Y".equals(cart.getSelfGoodsYn())) {			// 입점 상품은 TB_GOODS_IMG.COLOR_CD = TB_GOODS.MAIN_COLOR_CD
 			if(!"Y".equals(cart.getSelfGoodsYn())) {			// 입점 상품은 TB_GOODS_IMG.COLOR_CD = TB_GOODS.MAIN_COLOR_CD
@@ -818,7 +822,8 @@ public class TsfCartService {
 	}
 	}
 
 
 	@Transactional("shopTxnManager")
 	@Transactional("shopTxnManager")
-	public void updateCartOption(Cart param) {
+	public GagaMap updateCartOption(Cart param) {
+		GagaMap result = new GagaMap();
 		param.setJsessionId(TsfSession.getSessionId());
 		param.setJsessionId(TsfSession.getSessionId());
 		param.setFrontGb(TsfSession.getFrontGb());
 		param.setFrontGb(TsfSession.getFrontGb());
 
 
@@ -836,14 +841,19 @@ public class TsfCartService {
 		Goods goods = new Goods();
 		Goods goods = new Goods();
 		goods.setGoodsCd(param.getGoodsCd());
 		goods.setGoodsCd(param.getGoodsCd());
 		goods.setFrontGb(TsfSession.getFrontGb());
 		goods.setFrontGb(TsfSession.getFrontGb());
+		goods.setSiteCd(TscConstants.Site.STYLE24.value());
 
 
 		goods = goodsService.getGoodsInfo(goods);
 		goods = goodsService.getGoodsInfo(goods);
 
 
 		if (goods == null) {
 		if (goods == null) {
-			throw new IllegalArgumentException("상품 정보가 존재하지 않습니다.");
+			result.put("status", "FAIL");
+			result.put("message", "상품 정보가 존재하지 않습니다.");
+			return result;
 		}
 		}
 		if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
 		if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
-			throw new IllegalArgumentException("품절입니다.");
+			result.put("status", "FAIL");
+			result.put("message", "품절입니다.");
+			return result;
 		}
 		}
 		
 		
 		// 현재 장바구니 수량
 		// 현재 장바구니 수량
@@ -865,7 +875,9 @@ public class TsfCartService {
 			String stockResult = goodsService.getCheckStock(checkParam);
 			String stockResult = goodsService.getCheckStock(checkParam);
 
 
 			if (!"SUCCESS".equals(stockResult)) {
 			if (!"SUCCESS".equals(stockResult)) {
-				throw new IllegalArgumentException(stockResult);
+				result.put("status", "FAIL");
+				result.put("message", stockResult);
+				return result;
 			}
 			}
 		}
 		}
 
 
@@ -896,7 +908,9 @@ public class TsfCartService {
 			// 동일 상품 존재시
 			// 동일 상품 존재시
 			if (cartList != null && cartList.size() > 0) {		// 장바구니 기존재
 			if (cartList != null && cartList.size() > 0) {		// 장바구니 기존재
 				if (cartList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
 				if (cartList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
-					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+					result.put("status", "FAIL");
+					result.put("message", "장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+					return result;
 				} else {
 				} else {
 					// 기존 존재 장바구니 UPDATE
 					// 기존 존재 장바구니 UPDATE
 					Cart cart = new Cart();
 					Cart cart = new Cart();
@@ -935,10 +949,13 @@ public class TsfCartService {
 		} else {
 		} else {
 			param.setCartGb(TscConstants.CartGb.CART.value());
 			param.setCartGb(TscConstants.CartGb.CART.value());
 			param.setNotCartSq(param.getCartSq());						// 수정 장바구니 번호 제외
 			param.setNotCartSq(param.getCartSq());						// 수정 장바구니 번호 제외
+			param.setOptCd(param.getOptCds()[0]);
 			Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
 			Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
 			if (cartSqList != null && cartSqList.size() > 0) {			// 장바구니 기존재
 			if (cartSqList != null && cartSqList.size() > 0) {			// 장바구니 기존재
 				if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
 				if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
-					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+					result.put("status", "FAIL");
+					result.put("message", "장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+					return result;
 				} else {
 				} else {
 					param.setCartSq(cartSqList.iterator().next());
 					param.setCartSq(cartSqList.iterator().next());
 					cartDao.updateCartInfo(param);				// 장바구니 기존 데이터에 UPDATE(수량증가)
 					cartDao.updateCartInfo(param);				// 장바구니 기존 데이터에 UPDATE(수량증가)
@@ -962,5 +979,9 @@ public class TsfCartService {
 				cartDao.insertCartDetailHst(param);                // 장바구니 수정 이력 저장
 				cartDao.insertCartDetailHst(param);                // 장바구니 수정 이력 저장
 			}
 			}
 		}
 		}
+
+		result.put("status", "SUCCESS");
+
+		return result;
 	}
 	}
 }
 }

+ 44 - 0
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -165,6 +165,7 @@ public class TsfCouponService {
 				for (Order cpnInfo : serialGoodsList) {
 				for (Order cpnInfo : serialGoodsList) {
 					if ("A".equals(cpnInfo.getApplyScope()) || param.getCartSqArr()[i] == cpnInfo.getCartSq()) {
 					if ("A".equals(cpnInfo.getApplyScope()) || param.getCartSqArr()[i] == cpnInfo.getCartSq()) {
 						cpnInfo.setCurrPrice(param.getCurrPrices()[i]);
 						cpnInfo.setCurrPrice(param.getCurrPrices()[i]);
+						log.info("CHECK CURR_PRICE ::::: {}", cpnInfo.getCurrPrice());
 					}
 					}
 				}
 				}
 			}
 			}
@@ -176,6 +177,7 @@ public class TsfCouponService {
 				buyLimitAmt = info.getBuyLimitAmt();								// 최대할인율과 최소주문금액은 한 쿠폰에 값이 동일
 				buyLimitAmt = info.getBuyLimitAmt();								// 최대할인율과 최소주문금액은 한 쿠폰에 값이 동일
 				if (TscConstants.DcWay.RATE.value().equals(info.getDcWay())) {		// 할인방식이 할인율이면 각 상품별 할인금액을 따로 계산해야함
 				if (TscConstants.DcWay.RATE.value().equals(info.getDcWay())) {		// 할인방식이 할인율이면 각 상품별 할인금액을 따로 계산해야함
 					int dcAmt = (int)(info.getCurrPrice() * (info.getDcVal() / 100.0));		// 해당상품 할인금
 					int dcAmt = (int)(info.getCurrPrice() * (info.getDcVal() / 100.0));		// 해당상품 할인금
+					log.info("CHECK TOT_DC_AMT ::::: {} / {} / {}", info.getCurrPrice(), info.getDcVal(), dcAmt);
 					totDcAmt = totDcAmt + dcAmt;									// 적용 상품 총 할인금액
 					totDcAmt = totDcAmt + dcAmt;									// 적용 상품 총 할인금액
 				} else {															// 할인 방식이 금액일 경우
 				} else {															// 할인 방식이 금액일 경우
 					totDcAmt = info.getDcVal();
 					totDcAmt = info.getDcVal();
@@ -197,6 +199,8 @@ public class TsfCouponService {
 			}
 			}
 		}
 		}
 
 
+		log.info("CHECK TOTAL_DC_AMT ::::: {}", totDcAmt);
+
 		return totDcAmt;
 		return totDcAmt;
 	}
 	}
 
 
@@ -421,4 +425,44 @@ public class TsfCouponService {
 	}
 	}
 	
 	
 	
 	
+	/**
+	 * 기획전 쿠폰 다운 처리
+	 *
+	 * @param coupon
+	 * @return Collection<Coupon>
+	 * @author card007
+	 * @since 2021.02.25
+	 */
+	@Transactional("shopTxnManager")
+	public int getPlanCouponInfo(Coupon coupon) {
+		int count = 0;
+
+		Collection<Coupon> couponList = couponDao.getPlanCouponInfo(coupon);
+
+		for (Coupon tmpCoupon : couponList) {
+			//int downloadCnt = tmpCoupon.getDownloadCnt();
+			for (int i = 0; i < couponList.size(); i++) {
+				if(couponList.iterator().next().getOwnCoupon()==0) {
+					CustCoupon custCoupon = new CustCoupon();
+					custCoupon.setCustNo(tmpCoupon.getCustNo());
+					custCoupon.setCpnId(tmpCoupon.getCpnId());
+					custCoupon.setAvailStdt(tmpCoupon.getAvailStdt());
+					custCoupon.setAvailEddt(tmpCoupon.getAvailEddt());
+					custCoupon.setPubReason(TscConstants.PubReason.DOWNLOAD.value());
+					custCoupon.setEndAlimSendYn("N");		// 알림 발송 여부(발송되면 Y)
+					custCoupon.setRegNo(tmpCoupon.getCustNo());
+					custCoupon.setUpdNo(tmpCoupon.getCustNo());
+
+					coreCouponDao.saveCouponCustPub(custCoupon);
+
+					count++;
+
+				}
+			}
+		}
+
+		return count;
+	}
+
+	
 }
 }

+ 54 - 5
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -1,5 +1,6 @@
 package com.style24.front.biz.service;
 package com.style24.front.biz.service;
 
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collection;
 
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -256,6 +257,10 @@ public class TsfGoodsService {
 
 
 			stockCheck = goodsDao.getGoodsStockInfo(stockCheck);					// 구성 상품 재고 조회
 			stockCheck = goodsDao.getGoodsStockInfo(stockCheck);					// 구성 상품 재고 조회
 
 
+			if(stockCheck == null) {
+				return "재고체크 실패했습니다. 새로고침 후 다시 시도해주세요.";
+			}
+
 			Goods compsInfo = new Goods();
 			Goods compsInfo = new Goods();
 			compsInfo.setGoodsCd(param.getGoodsCd());
 			compsInfo.setGoodsCd(param.getGoodsCd());
 			compsInfo.setCompsGoodsCd(param.getItemCd());
 			compsInfo.setCompsGoodsCd(param.getItemCd());
@@ -265,7 +270,7 @@ public class TsfGoodsService {
 
 
 			// 재고 체크
 			// 재고 체크
 			if (param.getGoodsQty() * compsInfo.getQty() > stockCheck.getCurrStockQty()) {
 			if (param.getGoodsQty() * compsInfo.getQty() > stockCheck.getCurrStockQty()) {
-				return param.getItemCd() + "의 재고가 충분하지 않습니다.";
+				return compsInfo.getGoodsNm() + " 옵션의 재고가 충분하지 않습니다.";
 			}
 			}
 		} else {
 		} else {
 			GoodsStock stockCheck = new GoodsStock();								// 재고 조회 결과
 			GoodsStock stockCheck = new GoodsStock();								// 재고 조회 결과
@@ -274,8 +279,12 @@ public class TsfGoodsService {
 
 
 			stockCheck = goodsDao.getGoodsStockInfo(stockCheck);					// 구성 상품 재고 조회
 			stockCheck = goodsDao.getGoodsStockInfo(stockCheck);					// 구성 상품 재고 조회
 
 
+			if(stockCheck == null) {
+				return "재고체크 실패했습니다. 새로고침 후 다시 시도해주세요.";
+			}
+
 			if (param.getGoodsQty() > stockCheck.getCurrStockQty()) {
 			if (param.getGoodsQty() > stockCheck.getCurrStockQty()) {
-				return param.getGoodsCd() + "의 재고가 충분하지 않습니다.";
+				return "옵션의 재고가 충분하지 않습니다.";
 			}
 			}
 		}
 		}
 
 
@@ -405,8 +414,7 @@ public class TsfGoodsService {
 
 
 		return result;
 		return result;
 	}
 	}
-	
-	
+
 	/**
 	/**
 	 * 세트 상품 사이즈 선택 시 재고수량 가져오기
 	 * 세트 상품 사이즈 선택 시 재고수량 가져오기
 	 *
 	 *
@@ -458,7 +466,6 @@ public class TsfGoodsService {
 		}
 		}
 		result = ableOrderCnt;	//주문 가능 수량
 		result = ableOrderCnt;	//주문 가능 수량
 
 
-
 		if (returnFlag) {
 		if (returnFlag) {
 			return 0;
 			return 0;
 		}
 		}
@@ -676,4 +683,46 @@ public class TsfGoodsService {
 		return goodsDao.getRecentlyGoodsList(goods);
 		return goodsDao.getRecentlyGoodsList(goods);
 	}
 	}
 
 
+	/**
+	 * 컨텐츠카테고리상품 목록
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 25
+	 */
+	public Collection<Goods> getContentsCategoryGoodsList(Cate4Srch cate) {
+		cate.setSiteCd(TscConstants.Site.STYLE24.value());
+		cate.setFrontGb(TsfSession.getFrontGb());
+		cate.setCustGb(TsfSession.getCustGb());
+		cate.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+
+		Collection<Goods> goodsList = new ArrayList<>();
+
+		if (cate.getContentsLoc().equals("SCM002")) { // 신상품인 경우
+			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
+
+			// 조회된 데이터가 없거나 건수가 20개 미만이면 신규상품(=정상상품) 조회
+			if (goodsList == null || goodsList.size() < 20) {
+				if (goodsList != null) {
+					// 제외상품 설정
+					StringBuilder sb = new StringBuilder();
+					for (Goods goods : goodsList) {
+						sb.append(goods.getGoodsCd()).append(",");
+					}
+					if (sb != null && !sb.toString().equals("")) {
+						cate.setExceptGoodsArr(sb.toString().substring(0, sb.toString().length() - 1).split(","));
+					}
+				}
+				goodsList.addAll(goodsDao.getContentsCategoryNewGoodsList(cate));
+			}
+		} else if (cate.getContentsLoc().equals("SCM003")) { // 베스트상품인 경우
+			// TODO: 추천솔루션
+
+			// 추천솔루션 데이터가 없으면 베스트로 등록된 상품 조회
+			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
+		}
+
+		return goodsList;
+	}
+
 }
 }

+ 58 - 0
src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java

@@ -1,17 +1,21 @@
 package com.style24.front.biz.service;
 package com.style24.front.biz.service;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collection;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderChangeService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfOrderChangeDao;
 import com.style24.front.biz.dao.TsfOrderChangeDao;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Point;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -119,4 +123,58 @@ public class TsfOrderChangeService {
 		return orderChangeDao.getUsedPointInfo(order);
 		return orderChangeDao.getUsedPointInfo(order);
 	}
 	}
 
 
+	/**
+	 * 마이페이지 취소/반품 환불 사전 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author card007
+	 * @since 2021. 03. 25
+	 */
+	public GagaMap getRefundPreInfo(OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+		List<Order> cnclReqList = new ArrayList<>();
+
+		// 취소/반품 신청 정보 설정
+		int[] ordDtlNoArr = orderChange.getOrdDtlNoArr();
+		int[] cnclRtnReqQtyArr = orderChange.getCnclRtnReqQtyArr();
+		List<Integer> ordDtlNoList = Arrays.stream(ordDtlNoArr).boxed().collect(Collectors.toList());
+
+		// 환불 사전 정보 조회
+		Collection<Order> cnclRtnList = orderChangeDao.getRefundPreInfo(orderChange);
+		Order cnclRtn = cnclRtnList.iterator().next();
+
+		// 전체 취소여부 설정
+		String allCanYn = "Y";
+		for (Order order : cnclRtnList) {
+			int index = ordDtlNoList.indexOf(order.getOrdDtlNo());
+			if ("Y".equals(allCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != order.getOrdQty())) {
+				allCanYn = "N";
+			}
+		}
+
+		// 무통장입금 전 전체 취소여부 설정
+		String allCanYnBeforePayment = "N";
+		if ("Y".equals(allCanYn) && TscConstants.PayMeans.BANK_DEPOSIT.value().equals(cnclRtn.getPayMeans()) && TscConstants.PaymentStat.PAYMENT_WAIT.value().equals(cnclRtn.getPayStat())) {
+			allCanYnBeforePayment = "Y";
+		}
+		
+		// 전체 취소여부 및 취소/반품 수량 설정
+		for (Order order : cnclRtnList) {
+			// 변경 수량 설정
+			int index = ordDtlNoList.indexOf(order.getOrdDtlNo());
+			if (index >= 0) {
+				order.setOrdCanChgQty(cnclRtnReqQtyArr[index]);
+				order.setAllCanYn(allCanYn);
+				cnclReqList.add(order);
+			}
+		}
+		
+		
+		result.setString("allCanYn", allCanYnBeforePayment);
+		result.set("cnclReqList", cnclReqList);
+
+		return result;
+	}
+
 }
 }

+ 27 - 5
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -65,22 +65,43 @@ public class TsfOrderService {
 	 * @since 2021. 02. 04
 	 * @since 2021. 02. 04
 	 */
 	 */
 	public Collection<GagaMap> getOrderListForMypage(Order order) {
 	public Collection<GagaMap> getOrderListForMypage(Order order) {
-		int ordNo = 0;
-		int index = 0;
 		Collection<GagaMap> orderList = new ArrayList<>();
 		Collection<GagaMap> orderList = new ArrayList<>();
 		Collection<Order> ordDtlList = new ArrayList<>();
 		Collection<Order> ordDtlList = new ArrayList<>();
 		String allCanYn = "Y";
 		String allCanYn = "Y";
+		int ordNo = 0;
+		int index = 0;
+		int ordReqChgQty = 0;
 
 
 		for (Order tmpOrder : orderDao.getOrderListForMypage(order)) {
 		for (Order tmpOrder : orderDao.getOrderListForMypage(order)) {
+			// 세트상품 옵션별 배열로 담기
+			if (tmpOrder.getItemNm().contains("!@!")) {
+				tmpOrder.setItemNmArr(tmpOrder.getItemNm().split("!@!"));
+				tmpOrder.setColorNmArr(tmpOrder.getColorNm().split(","));
+				tmpOrder.setOptCd1Arr(tmpOrder.getOptCd1().split(","));
+				tmpOrder.setOptCd2Arr(tmpOrder.getOptCd2().split(","));
+			} else {
+				String[] arr = {tmpOrder.getItemNm()}, arr2 = {tmpOrder.getColorNm()}, arr3 = {tmpOrder.getOptCd1()}, arr4 = {tmpOrder.getOptCd2()};
+				tmpOrder.setItemNmArr(arr);
+				tmpOrder.setColorNmArr(arr2);
+				tmpOrder.setOptCd1Arr(arr3);
+				tmpOrder.setOptCd2Arr(arr4);
+			}
+
+			// 주문 목록 데이터 설정
 			if (index > 0 && ordNo != tmpOrder.getOrdNo()) {
 			if (index > 0 && ordNo != tmpOrder.getOrdNo()) {
-				orderList.add(setOrderMap(ordDtlList, allCanYn));
+				orderList.add(setOrderMap(ordDtlList, allCanYn, ordReqChgQty));
 
 
 				ordDtlList = new ArrayList<>();
 				ordDtlList = new ArrayList<>();
 				ordDtlList.add(tmpOrder);
 				ordDtlList.add(tmpOrder);
+				allCanYn = "Y";
+				ordReqChgQty = 0;
 			} else {
 			} else {
 				ordDtlList.add(tmpOrder);
 				ordDtlList.add(tmpOrder);
 			}
 			}
 
 
+			// 전체취소 가능 여부 설정
+			ordReqChgQty += tmpOrder.getOrdReqChgQty();
+
 			if ("Y".equals(allCanYn)
 			if ("Y".equals(allCanYn)
 				&& !tmpOrder.getOrdDtlStat().equals(TscConstants.OrderDetailStat.DEPOSIT_WAIT.value())
 				&& !tmpOrder.getOrdDtlStat().equals(TscConstants.OrderDetailStat.DEPOSIT_WAIT.value())
 				&& !tmpOrder.getOrdDtlStat().equals(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value())
 				&& !tmpOrder.getOrdDtlStat().equals(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value())
@@ -93,13 +114,13 @@ public class TsfOrderService {
 		}
 		}
 
 
 		if (ordDtlList.size() > 0) {
 		if (ordDtlList.size() > 0) {
-			orderList.add(setOrderMap(ordDtlList, allCanYn));
+			orderList.add(setOrderMap(ordDtlList, allCanYn, ordReqChgQty));
 		}
 		}
 		
 		
 		return orderList;
 		return orderList;
 	}
 	}
 	
 	
-	private GagaMap setOrderMap(Collection<Order> ordDtlList, String allCanYn) {
+	private GagaMap setOrderMap(Collection<Order> ordDtlList, String allCanYn, int ordReqChgQty) {
 		Order order = ordDtlList.iterator().next();
 		Order order = ordDtlList.iterator().next();
 
 
 		GagaMap map = new GagaMap();
 		GagaMap map = new GagaMap();
@@ -108,6 +129,7 @@ public class TsfOrderService {
 		map.set("ordDt", order.getOrdDt());
 		map.set("ordDt", order.getOrdDt());
 		map.set("freeGiftList", orderDao.getOrderFreeGiftListForMypage(order));
 		map.set("freeGiftList", orderDao.getOrderFreeGiftListForMypage(order));
 		map.set("allCanYn", allCanYn);
 		map.set("allCanYn", allCanYn);
+		map.set("ordReqChgQty", ordReqChgQty);
 		map.set("oneData", order);
 		map.set("oneData", order);
 		map.set("ordDtlList", ordDtlList);
 		map.set("ordDtlList", ordDtlList);
 
 

+ 19 - 0
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -10,11 +10,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfPlanningDao;
 import com.style24.front.biz.dao.TsfPlanningDao;
 import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Point;
@@ -35,6 +37,9 @@ public class TsfPlanningService {
 	@Autowired
 	@Autowired
 	private TsfPlanningDao planningDao;
 	private TsfPlanningDao planningDao;
 	
 	
+	@Autowired
+	private TsfCouponService couponService;
+	
 	/**
 	/**
 	 * 기획전 카테고리 1deth 조회
 	 * 기획전 카테고리 1deth 조회
 	 *
 	 *
@@ -182,6 +187,20 @@ public class TsfPlanningService {
 	public Collection<Plan> getPlanGoods1Info(Plan plan) {
 	public Collection<Plan> getPlanGoods1Info(Plan plan) {
 		return planningDao.getPlanGoods1Info(plan);
 		return planningDao.getPlanGoods1Info(plan);
 	}
 	}
+	
+	/**
+	 * 상품 쿠폰 다운 처리
+	 *
+	 * @param coupon
+	 * @return 
+	 * @author sowon
+	 * @since 2021.03.24
+	 */
+	@Transactional("shopTxnManager")
+	public int getPlanCouponDownInfo(Coupon coupon) {
+		return couponService.getPlanCouponInfo(coupon);
+	}
+
 
 
 
 
 	/**
 	/**

+ 37 - 0
src/main/java/com/style24/front/biz/service/TsfReviewService.java

@@ -66,4 +66,41 @@ public class TsfReviewService {
 		 return reviewDao.getReviewOptionList(goodsCd);
 		 return reviewDao.getReviewOptionList(goodsCd);
 	}
 	}
 	
 	
+	/**
+	 * 마이페이지 작성가능한 리뷰 건수
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public int getCompleteReviewCount(Review review) {
+		return reviewDao.getCompleteReviewCount(review);
+	}
+	
+	/**
+	 * 마이페이지 작성가능한 리뷰 목록
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public Collection<Review> getCompleteReviewList(Review review){
+		return reviewDao.getCompleteReviewList(review);
+	}
+	
+	/**
+	 * 마이페이지 리뷰 등록
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public void saveMypageReview(Review review) {
+		review.setDispYn("Y");
+		review.setDelYn("N");
+		review.setRegNo(review.getCustNo());
+		review.setUpdNo(review.getCustNo());
+		reviewDao.saveMypageReview(review);
+	}
+	
 }
 }

+ 35 - 15
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -109,38 +109,51 @@ public class TsfCartController extends TsfBaseController {
 	// @ResponseBody
 	// @ResponseBody
 	@PostMapping("/goods/list")
 	@PostMapping("/goods/list")
 	public String selectCartGoodsList(Order param, Model model) {
 	public String selectCartGoodsList(Order param, Model model) {
-		// 장바구니 정보 조회
-		Order order = cartService.getCartGoodsList(param);
+		log.info("CHECK INFO >>> {}", param.getShotDelvUseYn());
+
 
 
 		// 총알배송 가능 여부 체크
 		// 총알배송 가능 여부 체크
-		int shotCanYn = coreOrderService.getDailyDeliveryCheck(order);
+		int shotCanYn = coreOrderService.getDailyDeliveryCheck(param);
 
 
 		// 10시 이전에만 총알 배송 가능 여부 체크
 		// 10시 이전에만 총알 배송 가능 여부 체크
 		if(shotCanYn == 1) {
 		if(shotCanYn == 1) {
 			SimpleDateFormat format = new SimpleDateFormat ( "MM/dd");
 			SimpleDateFormat format = new SimpleDateFormat ( "MM/dd");
 			Date time = new Date();
 			Date time = new Date();
 
 
-			order.setShotCanYn("Y");
-			order.setShotDelvDt(format.format(time));
+			param.setShotCanYn("Y");
+			param.setShotDelvDt(format.format(time));
 		} else {
 		} else {
 			SimpleDateFormat format = new SimpleDateFormat ( "MM/dd");
 			SimpleDateFormat format = new SimpleDateFormat ( "MM/dd");
 			Date time = new Date();
 			Date time = new Date();
-			order.setShotDelvDt(format.format(time));
+			param.setShotCanYn("N");
+			param.setShotDelvDt(format.format(time));
+		}
+
+		// TODO 테스트 후 삭제할것.
+		// param.setShotCanYn("Y");
 
 
-			order.setShotCanYn("N");
-			order.setShotDelvYn("N");
+		if(param.getShotDelvUseYn() == null) {
+			param.setShotDelvUseYn(param.getShotCanYn());
 		}
 		}
 
 
+		// 장바구니 정보 조회
+		Order order = cartService.getCartGoodsList(param);
+		order.setShotDelvUseYn(param.getShotDelvUseYn());
+		order.setShotCanYn(param.getShotCanYn());
+		order.setShotDelvDt(param.getShotDelvDt());
+
 		model.addAttribute("loginInfo", TsfSession.getInfo());
 		model.addAttribute("loginInfo", TsfSession.getInfo());
 		model.addAttribute("order", order);
 		model.addAttribute("order", order);
-		model.addAttribute("shotCartList", order.getShotCartList());
-		model.addAttribute("wmsCartList", order.getWmsCartList());
-		model.addAttribute("delvCartList", order.getDelvCartList());
 		model.addAttribute("IMG_PATH", env.getProperty("upload.goods.view"));
 		model.addAttribute("IMG_PATH", env.getProperty("upload.goods.view"));
 
 
 		return super.getDeviceViewName("cart/CartListAjaxForm");
 		return super.getDeviceViewName("cart/CartListAjaxForm");
 	}
 	}
 
 
+	/**
+	 * 장바구니 체크박스 change시에 계산로직 진행
+	 * @param param
+	 * @return
+	 */
 	@ResponseBody
 	@ResponseBody
 	@PostMapping("/change/goods/list")
 	@PostMapping("/change/goods/list")
 	public Order selectCartGoodsJsonList(@RequestBody Order param) {
 	public Order selectCartGoodsJsonList(@RequestBody Order param) {
@@ -186,7 +199,7 @@ public class TsfCartController extends TsfBaseController {
 	}
 	}
 
 
 	/**
 	/**
-	 * 장바구니 삭제
+	 * 장바구니 옵션변경 팝업
 	 * @param param
 	 * @param param
 	 * @return String
 	 * @return String
 	 * @author xodud1202
 	 * @author xodud1202
@@ -211,8 +224,15 @@ public class TsfCartController extends TsfBaseController {
 	 */
 	 */
 	@ResponseBody
 	@ResponseBody
 	@PostMapping("/change/option")
 	@PostMapping("/change/option")
-	public GagaResponse updateCartOption(@RequestBody Cart param) {
-		cartService.updateCartOption(param);
-		return super.ok(message.getMessage("SUCC_0001"));
+	public GagaMap updateCartOption(@RequestBody Cart param) {
+		GagaMap result = new GagaMap();
+
+		result = cartService.updateCartOption(param);
+
+		if("SUCCESS".equals(result.get("status"))) {
+			result.put("message", message.getMessage("SUCC_0009"));
+		}
+
+		return result;
 	}
 	}
 }
 }

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

@@ -7,6 +7,14 @@ import java.util.HashMap;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
 
+import com.style24.core.biz.service.TscLookbookService;
+import com.style24.persistence.domain.Lookbook;
+import com.style24.persistence.domain.MainLayout;
+import com.style24.persistence.domain.Contents;
+import com.style24.persistence.domain.GnbTab;
+import com.style24.persistence.domain.Cate4Srch;
+import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.BrandGroup;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.mobile.device.Device;
@@ -20,14 +28,9 @@ import org.springframework.web.servlet.ModelAndView;
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfDisplayService;
 import com.style24.front.biz.service.TsfDisplayService;
+import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.front.support.security.session.TsfSession;
-import com.style24.persistence.domain.BrandGroup;
-import com.style24.persistence.domain.Cate4Srch;
-import com.style24.persistence.domain.Contents;
-import com.style24.persistence.domain.GnbTab;
-import com.style24.persistence.domain.GoodsSearch;
-import com.style24.persistence.domain.MainLayout;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 
 
@@ -51,6 +54,11 @@ public class TsfDisplayController extends TsfBaseController {
 	@Autowired
 	@Autowired
 	private TscEnvsetService envsetService;
 	private TscEnvsetService envsetService;
 
 
+	@Autowired
+	private TsfGoodsService goodsService;
+	@Autowired
+	private TscLookbookService coreLookbookService;
+
 	/**
 	/**
 	 * 몰 메인
 	 * 몰 메인
 	 * @return
 	 * @return
@@ -220,6 +228,16 @@ public class TsfDisplayController extends TsfBaseController {
 			if ("C".equals(brandMain.getContentsYn())) {
 			if ("C".equals(brandMain.getContentsYn())) {
 				brandMain.setContentsList(displayService.getContentsList(contents));
 				brandMain.setContentsList(displayService.getContentsList(contents));
 			}
 			}
+
+			// 룩북일때
+			if("SBM010".equals(brandMain.getContentsLoc()) || "SBMM010".equals(brandMain.getContentsLoc())){
+				Lookbook lookbookMst = new Lookbook();
+				Lookbook lookbook = new Lookbook();
+				lookbook.setBrandCd(paramMap.get("brandGroupNo"));
+				lookbook.setMainDispYn("Y");
+
+				brandMain.setLookbookList(coreLookbookService.getLookbookListForGoods(lookbook));
+			}
 			brandMainLayoutList.add(brandMain);
 			brandMainLayoutList.add(brandMain);
 		}
 		}
 		log.info("brandMainLayoutList::{}", brandMainLayoutList);
 		log.info("brandMainLayoutList::{}", brandMainLayoutList);
@@ -244,4 +262,35 @@ public class TsfDisplayController extends TsfBaseController {
 		return displayService.getGnbTabList(gnbTab);
 		return displayService.getGnbTabList(gnbTab);
 	}
 	}
 
 
+	/**
+	 * 카테고리 메인
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 25
+	 */
+	@GetMapping("/category/main/form")
+	public ModelAndView categoryMain(Cate4Srch cate) {
+		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/CategoryMainForm"));
+
+		// 기획전
+		Contents contents = new Contents();
+		contents.setContentsLoc("SCM001");
+		mav.addObject("planningList",displayService.getContentsList(contents));
+
+		// 신상품
+		cate.setContentsLoc("SCM002");
+		cate.setMaxRow(20);
+		mav.addObject("newGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+
+		// 베스트품
+		cate.setContentsLoc("SCM003");
+		cate.setMaxRow(20);
+		mav.addObject("bestGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+
+		mav.addObject("params", cate);
+
+		return mav;
+	}
+
 }
 }

+ 192 - 28
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1,5 +1,24 @@
 package com.style24.front.biz.web;
 package com.style24.front.biz.web;
 
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
 import com.gagaframework.web.rest.server.GagaResponse;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
@@ -24,6 +43,7 @@ import com.style24.front.biz.thirdparty.NiceCertify;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.Counsel;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustAccount;
 import com.style24.persistence.domain.CustAccount;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Customer;
@@ -31,25 +51,10 @@ import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.WishList;
 import com.style24.persistence.domain.WishList;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
 
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import lombok.extern.slf4j.Slf4j;
 
 
 /**
 /**
  * 마이페이지 Controller
  * 마이페이지 Controller
@@ -237,13 +242,9 @@ public class TsfMypageController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 
 
 		// 페이징 처리 설정
 		// 페이징 처리 설정
-		// order.setPageable(new TscPageRequest(order.getPageNo() - 1, 5));
 		TscPageRequest pageable = new TscPageRequest((order.getPageNo() > 0 ? order.getPageNo() - 1 : 0), order.getPageSize(), order.getPageUnit());
 		TscPageRequest pageable = new TscPageRequest((order.getPageNo() > 0 ? order.getPageNo() - 1 : 0), order.getPageSize(), order.getPageUnit());
 		pageable.setTotalCount(orderService.getPagingOrdNoListCount(order));
 		pageable.setTotalCount(orderService.getPagingOrdNoListCount(order));
 		order.setPageable(pageable);
 		order.setPageable(pageable);
-		log.info("pageable: {}", pageable);
-		log.info("totalCount {}", pageable.getTotalCount());
-		log.info("order >>> {}", order);
 
 
 		// 페이징 처리 및 주문정보 조회
 		// 페이징 처리 및 주문정보 조회
 		List<Integer> ordNoList = new ArrayList<>();
 		List<Integer> ordNoList = new ArrayList<>();
@@ -256,13 +257,9 @@ public class TsfMypageController extends TsfBaseController {
 			order.setOrdNoList(ordNoList.stream().mapToInt(Integer::intValue).toArray());
 			order.setOrdNoList(ordNoList.stream().mapToInt(Integer::intValue).toArray());
 		}
 		}
 
 
-		mav.addObject("orderList", orderService.getOrderListForMypage(order));
-		mav.addObject("orderInfo", order);
-
-		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderList"));
+		map.set("orderList", orderService.getOrderListForMypage(order));
+		map.set("orderInfo", order);
 
 
-		map.set("mav", mav);
-		map.set("pageable", order.getPageable());
 		return map;
 		return map;
 	}
 	}
 
 
@@ -610,6 +607,75 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 		return result;
 	}
 	}
 
 
+	/**
+	 * 마이페이지 전체취소신청
+	 *
+	 * @param Collection<Order>
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 22
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/cancel/all")
+	@ResponseBody
+	public GagaMap cancelAll(@RequestBody OrderChange orderChange) {
+		if (orderChange == null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// TODO
+		// @ 결품취소로직 추가
+		// @ 주문취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+
+		// 1. 세션회원조회
+		int custNo = TsfSession.getInfo().getCustNo();
+		orderChange.setCustNo(custNo);
+
+		// 2. 환불 사전 정보 조회
+		GagaMap refundPreInfo = orderChangeService.getRefundPreInfo(orderChange);
+		List<Order> cnclReqList = (List<Order>) refundPreInfo.get("cnclReqList");
+		String allCanYn = refundPreInfo.getString("allCanYn");
+		
+
+		// 2. 환불금액계산
+		// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
+		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
+
+		// 무통장입금전 전체취소 여부
+		
+
+		// 3. 주문변경 기본정보 설정
+		result.set("ordNo"			, orderChange.getOrdNo());				// 주문번호
+		result.set("ordChgSq"		, orderChange.getOrdChgSq());			// 주문변경번호
+		result.set("chgReason"		, orderChange.getChgReason());			// 변경사유
+		result.set("chgMemo"		, orderChange.getChgMemo());			// 변경메모
+
+		result.set("accountNo"		, orderChange.getAccountNo());			// 환불계좌번호
+		result.set("accountNm"		, orderChange.getAccountNm());			// 환불계좌예금주명
+		result.set("bankCd"			, orderChange.getBankCd());				// 환불계좌은행코드
+
+		result.set("allCanYn"		, allCanYn);							// 무통장입금전 전체취소 여부
+		result.set("isCustomer"		, orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
+
+		// 4. 주문변경 회수지정보 추가
+		result.set("chgerNm"		, orderChange.getChgerNm());			// 변경자명
+		result.set("chgerEmail"		, orderChange.getChgerEmail());			// 변경자이메일주소
+		result.set("chgerPhnno"		, orderChange.getChgerPhnno());			// 변경자핸드폰번호
+		result.set("chgerTelno"		, orderChange.getChgerTelno());			// 변경자전화번호
+
+		result.set("reqGbn"			, orderChange.getReqGbn());				// 신청구분
+
+		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
+		coreOrderChangeService.cnclComplete(result, custNo);
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", "취소 처리 되었습니다.");
+		// result.set("message", message.getMessage("SUCC_0004"));
+
+		return result;
+	}
+
 	/**
 	/**
 	 * 마이페이지 STYLE24 포인트화면
 	 * 마이페이지 STYLE24 포인트화면
 	 *
 	 *
@@ -720,7 +786,7 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 		return result;
 	}
 	}
 
 
-	/* 김소원 상품권 쿠폰 시작 */
+	/* 김소원 상품권 쿠폰 리뷰 시작 */
 	/**
 	/**
 	 * 마이페이지 상품권화면
 	 * 마이페이지 상품권화면
 	 *
 	 *
@@ -826,6 +892,104 @@ public class TsfMypageController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailPop"));
 		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailPop"));
 		return mav;
 		return mav;
 	}
 	}
+	
+	/**
+	 * 마이페이지 리뷰화면
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 24
+	 */
+	@GetMapping("/review/form")
+	public ModelAndView mypageReviewForm(Review review) {
+		ModelAndView mav = new ModelAndView();
+		
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+		review.setSiteCd(TscConstants.Site.STYLE24.value());
+		// 작성가능한 리뷰 카운트
+		mav.addObject("completeReviewCount", reviewService.getCompleteReviewCount(review));
+		// 작성가능한 리뷰 목록
+		//mav.addObject("completeReviewList", reviewService.getCompleteReviewList(review));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewForm"));
+
+		return mav;
+	}
+	
+	/**
+	 * 마이페이지 리뷰 목록
+	 * @param review
+	 * @return
+	 * @author sowon
+	 * @since 2021. 03. 25
+	 */
+	@PostMapping("/review/list")
+	@ResponseBody
+	public GagaMap getMypageReviewList(@RequestBody Review review) {
+
+		review.setSiteCd(TscConstants.Site.STYLE24.value());
+
+		GagaMap result = new GagaMap();
+
+		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
+		pageable.setTotalCount(reviewService.getCompleteReviewCount(review));
+		review.setPageable(pageable);
+		log.info("pageable: {}", pageable);
+		log.info("totalCount {}", pageable.getTotalCount());
+		
+
+		if (TsfSession.isLogin()) {
+			review.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+
+		result.set("paging", review);
+		result.set("completeReviewCount", reviewService.getCompleteReviewCount(review));
+		result.set("dataList", reviewService.getCompleteReviewList(review));
+
+		return result;
+	}
+	
+	/**
+	 * 마이페이지 리뷰작성화면
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 25
+	 */
+	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}")
+	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo,@PathVariable(value = "ordDtlNo") Integer ordDtlNo,@PathVariable(value = "goodsCd") String goodsCd) {
+		Review review = new Review();
+		ModelAndView mav = new ModelAndView();
+		
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+		review.setSiteCd(TscConstants.Site.STYLE24.value());
+		review.setOrdNo(ordNo);
+		review.setOrdDtlNo(ordDtlNo);
+		review.setGoodsCd(goodsCd);
+		
+		mav.addObject("completeReviewList", reviewService.getCompleteReviewList(review));
+		
+		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewCreateForm"));
+
+		return mav;
+	}
+	
+	/**
+	 * 마이페이지 리뷰 저장
+	 * @param review
+	 * @return
+	 * @author sowon
+	 * @since 2021. 03. 25
+	 */
+	@PostMapping("/review/save")
+	@ResponseBody
+	public GagaMap mypageReviewSave(@RequestBody Review review) {
+
+		GagaMap result = new GagaMap();
+		reviewService.saveMypageReview(review);
+		result.set("status", "200");
+
+		return result;
+	}
 
 
 	/*신주승 시작*/
 	/*신주승 시작*/
 
 

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

@@ -311,12 +311,11 @@ public class TsfOrderController extends TsfBaseController {
 		} else {
 		} else {
 			order.setJsessionId(TsfSession.getSessionId());
 			order.setJsessionId(TsfSession.getSessionId());
 		}
 		}
-		
-		// 2. 장바구니상품목록조회
-		Collection<Order> cartGoodsList = coreOrderService.getCartGoodsList(order);
-		
-		// 3. 배송정보조회(장바구니상품목록)
-		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(cartGoodsList, order);
+
+		Collection<Order> tmtbGoodsApplyList = cartService.getMoreBetterAmtList(order);
+
+		// 3.2 배송정보조회(장바구니상품목록)
+		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList, order);
 				
 				
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 		mav.addObject("delvAllCartList" 	, delvOrderMap.get("delvAllCartList"));		// 전체배송목록
 		mav.addObject("delvAllCartList" 	, delvOrderMap.get("delvAllCartList"));		// 전체배송목록

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

@@ -14,21 +14,21 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.ModelAndView;
 
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponse;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
+import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.controller.TsfBaseController;
-import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Customer;
-import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.Review;
 
 
@@ -51,6 +51,9 @@ public class TsfPlanningController extends TsfBaseController {
 	@Autowired
 	@Autowired
 	private TsfPlanningService planningService;
 	private TsfPlanningService planningService;
 	
 	
+	@Autowired
+	private TscCustomerService coreCustomerService;
+	
 	/**
 	/**
 	 * 기획전 메인 화면
 	 * 기획전 메인 화면
 	 * 
 	 * 
@@ -186,6 +189,48 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("planning/PlanningDetailForm"));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningDetailForm"));
 		return mav;
 		return mav;
 	}
 	}
+	
+	/**
+	 * 기획전 쿠폰 다운로드. 고객이 상품쿠폰 다운로드 시 발급됨.
+	 *
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 * @author sowon
+	 * @since 2021. 3. 24.
+	 */
+	@PostMapping(value = "/coupon/download")
+	@ResponseBody
+	public GagaMap createPlanCoupon(@RequestBody Coupon coupon) throws Exception {
+
+		GagaMap result = new GagaMap();
+
+		// 고객정보 조회
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCustNo(TsfSession.getInfo().getCustNo());
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		customer = coreCustomerService.getCustomerInfo(customer);
+
+		// 고객정보 설정
+		coupon.setCustGb(customer.getCustGb());
+		coupon.setCustGrade(customer.getCustGrade());
+		coupon.setCustNo(customer.getCustNo());
+		// 등급쿠폰 다운 처리
+		int count = planningService.getPlanCouponDownInfo(coupon);
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+		if (count == 0) {
+			result.set("message", message.getMessage("COUPON_0002"));
+		} else {
+			result.set("message", message.getMessage("COUPON_0001", new Object[] {count}));
+		}
+
+		return result;
+	}
+
+	
 	/**
 	/**
 	 * 이벤트 메인 화면
 	 * 이벤트 메인 화면
 	 * 
 	 * 

+ 7 - 1
src/main/java/com/style24/persistence/domain/Cate4Srch.java

@@ -35,8 +35,14 @@ public class Cate4Srch extends TscBaseDomain {
 	private String formalGb;
 	private String formalGb;
 	private String contentsLoc;
 	private String contentsLoc;
 
 
-	private Integer brandGroupNo;	// 브랜드그룹번호
+	private Integer brandGroupNo;		// 브랜드그룹번호
 
 
 	private String soldoutGoodsDispYn;
 	private String soldoutGoodsDispYn;
 
 
+	private Integer custNo;				// 고객번호
+	private String frontGb;				// 프론트구분
+	private String custGb;				// 고객구분
+	private int maxRow;					// 최대ROW수
+	private String[] exceptGoodsArr;	// 제외상품배열
+
 }
 }

+ 10 - 1
src/main/java/com/style24/persistence/domain/Goods.java

@@ -74,7 +74,7 @@ public class Goods extends TscBaseDomain {
 
 
 	private String colorCd;		//색상코드
 	private String colorCd;		//색상코드
 	private String colorNm;		//색상코드명
 	private String colorNm;		//색상코드명
-	private String brandnm;		//브랜드명
+	private String brandNm;		//브랜드명
 	private Integer brandGroupNo;	//브랜드그룹번호
 	private Integer brandGroupNo;	//브랜드그룹번호
 	private String brandGroupNm;	//브랜드그룹명
 	private String brandGroupNm;	//브랜드그룹명
 	private String goodsGbNm;		//상품구분명
 	private String goodsGbNm;		//상품구분명
@@ -155,6 +155,13 @@ public class Goods extends TscBaseDomain {
 	private String delvResDt;		// 예약판매 출고예정일
 	private String delvResDt;		// 예약판매 출고예정일
 	private int maxRownum;			// 조회건수
 	private int maxRownum;			// 조회건수
 
 
+	private String payDt;			// 구매일	
+	private String remainDt;		// 리뷰 남아있는시간
+	private String brandEnm;
+	private String brandKnm;
+	private Integer ordNo;			// 주문번호
+	private Integer ordDtlNo;		// 주문상세번호
+
 	//상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:상위컨텐츠-모바일,70:하위컨텐츠-모바일,80:상품상세(as-is,입점))
 	//상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:상위컨텐츠-모바일,70:하위컨텐츠-모바일,80:상품상세(as-is,입점))
 	private String goodsTitle; 			// 10:상품타이틀
 	private String goodsTitle; 			// 10:상품타이틀
 	private String goodsTitleDesc;		// 20:상품타이틀내용
 	private String goodsTitleDesc;		// 20:상품타이틀내용
@@ -170,4 +177,6 @@ public class Goods extends TscBaseDomain {
 
 
 	private String todayGoodsSql;	// 오늘본상품SQL
 	private String todayGoodsSql;	// 오늘본상품SQL
 
 
+	private String likeIt;			// 위시리스트에담긴상품
+
 }
 }

+ 2 - 0
src/main/java/com/style24/persistence/domain/MainLayout.java

@@ -29,4 +29,6 @@ public class MainLayout extends TscBaseDomain {
     private Cate4Srch cate4Srch;
     private Cate4Srch cate4Srch;
     private Collection<Contents> contentsList;
     private Collection<Contents> contentsList;
     private Collection<Goods> goodsList;
     private Collection<Goods> goodsList;
+    private Collection<Lookbook> lookbookList;
+
 }
 }

+ 7 - 3
src/main/java/com/style24/persistence/domain/Review.java

@@ -80,6 +80,9 @@ public class Review extends TscBaseDomain {
 	private String goodsNm;			// 상품이름
 	private String goodsNm;			// 상품이름
 	private int currPrice;		// 현재가
 	private int currPrice;		// 현재가
 	private String fileGb;			// 첨부파일 종류
 	private String fileGb;			// 첨부파일 종류
+	private int cnt;				// 리뷰 카운트
+	private String siteCd;
+	
 	// Masking
 	// Masking
 	public String getMaskingCustId() {
 	public String getMaskingCustId() {
 		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
 		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
@@ -93,8 +96,9 @@ public class Review extends TscBaseDomain {
 	@JsonInclude(JsonInclude.Include.NON_EMPTY)
 	@JsonInclude(JsonInclude.Include.NON_EMPTY)
 	private TscPageRequest pageable;
 	private TscPageRequest pageable;
 
 
-	private int pageNo = 1;
-	private int pageSize = 10;
-	private int pageUnit = 10;
+	private int pageNo = 1;							// 페이지번호
+	private int pageSize = 10;						// 페이지목록수
+	private int pageUnit = 10;						// 페이지번호수
+	
 	
 	
 }
 }

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

@@ -70,6 +70,7 @@
 		AND    C.CUST_NO = #{custNo}
 		AND    C.CUST_NO = #{custNo}
 		</if>
 		</if>
 		<if test="custNo == null or custNo == 0">
 		<if test="custNo == null or custNo == 0">
+		AND    C.CUST_NO = 0
 		AND    C.JSESSION_ID = #{jsessionId}
 		AND    C.JSESSION_ID = #{jsessionId}
 		</if>
 		</if>
 		AND    C.GOODS_CD = #{goodsCd}
 		AND    C.GOODS_CD = #{goodsCd}
@@ -513,7 +514,7 @@
 			 , Z.SUPPLY_COMP_CD
 			 , Z.SUPPLY_COMP_CD
 			 , Z.DELV_FEE_CD
 			 , Z.DELV_FEE_CD
 			 , Z.CART_DELV_FEE_CD
 			 , Z.CART_DELV_FEE_CD
-			 , (Z.CURR_PRICE + Z.OPT_ADD_PRICE) * Z.GOODS_QTY AS CURR_PRICE
+			 , (Z.CURR_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS CURR_PRICE
 			 , CASE WHEN Z.SOLDOUT_YN = 'N' AND Z.CUST_TODAY_ORD = 0 AND Z.NOCUST_TODAY_ORD = 0 THEN 'N' ELSE 'Y' END AS SOLDOUT_YN
 			 , CASE WHEN Z.SOLDOUT_YN = 'N' AND Z.CUST_TODAY_ORD = 0 AND Z.NOCUST_TODAY_ORD = 0 THEN 'N' ELSE 'Y' END AS SOLDOUT_YN
 			 , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
 			 , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
 					ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
 					ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
@@ -564,7 +565,9 @@
 					 , CASE WHEN C.CUST_NO = 0 AND C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END AS NOCUST_TODAY_ORD
 					 , CASE WHEN C.CUST_NO = 0 AND C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END AS NOCUST_TODAY_ORD
 					 /*, CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
 					 /*, CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
 							ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM*/
 							ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END 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 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 DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM */
+					 , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
+							ELSE (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' LIMIT 1) END AS SYS_IMG_NM
 				FROM   TB_CART C
 				FROM   TB_CART C
 				INNER  JOIN TB_CART_DETAIL CD
 				INNER  JOIN TB_CART_DETAIL CD
 				ON     C.CART_SQ = CD.CART_SQ
 				ON     C.CART_SQ = CD.CART_SQ
@@ -674,7 +677,6 @@
 			 , Z.CURR_PRICE
 			 , Z.CURR_PRICE
 			 , Z.PNT_PRATE
 			 , Z.PNT_PRATE
 			 , Z.PNT_MRATE
 			 , Z.PNT_MRATE
-			 , Z.OPT_ADD_PRICE
 			 , SYS_IMG_NM
 			 , SYS_IMG_NM
 		ORDER  BY Z.DELV_FEE_CD
 		ORDER  BY Z.DELV_FEE_CD
 			 , Z.CART_SQ DESC
 			 , Z.CART_SQ DESC
@@ -971,7 +973,6 @@
 		WHERE  G.SELF_MALL_YN = 'Y'
 		WHERE  G.SELF_MALL_YN = 'Y'
 		AND    G.GOODS_STAT = 'G008_90'
 		AND    G.GOODS_STAT = 'G008_90'
 		AND    GI.GOODS_CD = #{goodsCd}
 		AND    GI.GOODS_CD = #{goodsCd}
-		AND    GI.COLOR_CD = #{optCd1}
 		ORDER  BY GI.DISP_ORD
 		ORDER  BY GI.DISP_ORD
 	</select>
 	</select>
 
 

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

@@ -235,7 +235,7 @@
 		                     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
 		                     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
 		                FROM   TB_GOODS G
 		                FROM   TB_GOODS G
 		                     , TB_COUPON CP
 		                     , TB_COUPON CP
-		                WHERE  G.GOODS_CD = #{goodsCd}
+		                WHERE G.GOODS_CD = #{goodsCd}
 		                <if test="cpnId != null and cpnId != ''">
 		                <if test="cpnId != null and cpnId != ''">
 		                AND    CP.CPN_ID = #{cpnId}
 		                AND    CP.CPN_ID = #{cpnId}
 		                </if>
 		                </if>
@@ -585,4 +585,69 @@
 		 AND A.CPN_ID = #{cpnId}
 		 AND A.CPN_ID = #{cpnId}
 	</select>
 	</select>
 	
 	
+	<!-- 기획전 다운가능 쿠폰 정보 조회 -->
+	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
+		/* TsfCoupon.getPlanCouponInfo */
+		SELECT Z.CUST_NO
+		     , Z.CPN_ID
+		     , Z.AVAIL_STDT
+		     , Z.AVAIL_EDDT
+		     , Z.END_ALIM_YN
+		     , Z.DOWNLOAD_CNT
+		     , Z.OWN_COUPON
+		  FROM (SELECT A.*
+					 , CASE WHEN A.CNT <![CDATA[<=]]> 0 THEN 0
+							WHEN A.CNT > (A.DN_ABLE_CNT * A.ONE_PUB_QTY) THEN (A.DN_ABLE_CNT * A.ONE_PUB_QTY)
+							ELSE A.CNT
+						END AS DOWNLOAD_CNT
+				  FROM (SELECT #{custNo} AS CUST_NO
+							 , C.CPN_ID
+							 , C.CPN_NM
+							 , C.CUST_PUB_LIMIT_QTY
+							 , C.ONE_PUB_QTY
+							 , IF(C.PD_GB = 'P', C.AVAIL_STDT, NOW()) AS AVAIL_STDT
+							 , IF(C.PD_GB = 'P', C.AVAIL_EDDT, CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59')) AS AVAIL_EDDT
+				             , C.END_ALIM_YN
+							 , IFNULL(CC.CPN_CNT, 0) AS DN_CNT
+				             , IF(C.CUST_PUB_LIMIT_QTY = 0 OR C.CUST_PUB_LIMIT_QTY - CC.CPN_CNT > 0, 1, 0) AS DN_ABLE_CNT
+				             , IF(C.TOT_PUB_LIMIT_QTY > 0, C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT, 99999) AS CNT
+				             , (SELECT COUNT(*) FROM TB_CUST_COUPON TCC WHERE CPN_ID = #{cpnId} AND CUST_NO = #{custNo}) AS OWN_COUPON
+						  FROM TB_COUPON C
+						 INNER JOIN TB_COUPON_CUST_GBN CCGB
+							ON C.CPN_ID = CCGB.CPN_ID
+						   AND CCGB.USABLE_CUST_GB = #{custGb}
+						 INNER JOIN TB_COUPON_CUST_GRADE CCGR
+							ON C.CPN_ID = CCGR.CPN_ID
+						   AND CCGR.USABLE_CUST_GRADE = #{custGrade}
+						  LEFT OUTER JOIN (SELECT CPN_ID
+												, CUST_NO
+												, COUNT(*) AS CPN_CNT
+											 FROM TB_CUST_COUPON
+											GROUP BY CPN_ID, CUST_NO) CC
+							ON C.CPN_ID = CC.CPN_ID
+						   AND CC.CUST_NO = #{custNo}
+						  LEFT OUTER JOIN (SELECT CPN_ID
+												, COUNT(*) AS CPN_CNT
+											 FROM TB_CUST_COUPON
+											GROUP BY CPN_ID) CC2
+							ON C.CPN_ID = CC2.CPN_ID
+						 WHERE C.DOWN_ABL_YN = 'N'
+						    AND C.CPN_ID IN (
+						       					SELECT PCI.ITEM_VAL 
+						       					FROM TB_PLAN_CONTENTS_ITEM PCI 
+						       					WHERE PCI.ITEM_VAL = #{cpnId}
+						       				)
+						   AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
+						   AND C.CPN_STAT = 'G232_11'  -- 진행
+						   AND CASE WHEN C.TOT_PUB_LIMIT_QTY = 0 THEN 1
+									WHEN C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT > 0 THEN 1
+									ELSE 0
+								END = 1
+						   AND IF(C.NEW_CUST_YN = 'Y', (SELECT COUNT(*) FROM TB_CUSTOMER WHERE CUST_NO = #{custNo} AND REG_DT BETWEEN C.CUST_JOIN_STDT AND C.CUST_JOIN_EDDT), 1) = 1
+						   AND IF(C.FIRST_ORD_YN = 'Y', (SELECT COUNT(*) FROM TB_ORDER WHERE CUST_NO = #{custNo} AND ORD_DT BETWEEN C.BUY_STDT AND C.BUY_EDDT), 0) = 0
+						) A
+				) Z
+		 <!-- WHERE Z.DOWNLOAD_CNT <![CDATA[>=]]> 0 -->
+	
+	</select>
 </mapper>
 </mapper>

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

@@ -448,7 +448,7 @@
 		<if test="brandGroupNo != null and brandGroupNo !=''">
 		<if test="brandGroupNo != null and brandGroupNo !=''">
 			AND    BRAND_GROUP_NO  = #{brandGroupNo}
 			AND    BRAND_GROUP_NO  = #{brandGroupNo}
 		</if>
 		</if>
-		AND 	CONTENTS_LOC IN ('SMM001','SMM002','SMM005','SMM008','SBM004','SBM005','SBM006')
+		AND 	CONTENTS_LOC IN ('SMM001','SMM002','SMM005','SMM008','SBM004','SBM005','SBM006','SBM010')
 		ORDER BY DISP_ORD, COL_NO
 		ORDER BY DISP_ORD, COL_NO
 	</select>
 	</select>
 
 

+ 307 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -282,6 +282,7 @@
 		        END ) AS STOCK_QTY
 		        END ) AS STOCK_QTY
 		     , SOLDOUT_YN
 		     , SOLDOUT_YN
 		     , DISP_ORD
 		     , DISP_ORD
+		     , SELF_GOODS_YN
 		FROM (
 		FROM (
 		      SELECT O.GOODS_CD
 		      SELECT O.GOODS_CD
 		           , O.OPT_CD
 		           , O.OPT_CD
@@ -292,6 +293,7 @@
 		           , O.SOLDOUT_YN
 		           , O.SOLDOUT_YN
 		           , O.DISP_ORD
 		           , O.DISP_ORD
 		           , G.MIN_ORD_QTY
 		           , G.MIN_ORD_QTY
+		           , G.SELF_GOODS_YN
 		      FROM TB_GOODS G
 		      FROM TB_GOODS G
 		      INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD
 		      INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD
 		                             AND O.OPT_CD1 = #{optCd1}
 		                             AND O.OPT_CD1 = #{optCd1}
@@ -405,6 +407,7 @@
 		     , G.ORDER_MADE_YN
 		     , G.ORDER_MADE_YN
 		     , G.LIST_PRICE
 		     , G.LIST_PRICE
 		     , G.GOODS_STAT
 		     , G.GOODS_STAT
+		     , G.SELF_GOODS_YN
 		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
 		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
 		     , (CASE WHEN D.DISP_NM_LANG = 'EN' THEN D.BRAND_GROUP_ENM ELSE D.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
 		     , (CASE WHEN D.DISP_NM_LANG = 'EN' THEN D.BRAND_GROUP_ENM ELSE D.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD 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 = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
@@ -439,6 +442,7 @@
 		     , GC.GOODS_TYPE
 		     , GC.GOODS_TYPE
 		     , GC.QTY
 		     , GC.QTY
 		     , G.GOODS_STAT
 		     , G.GOODS_STAT
+			 , G.GOODS_NM
 		  FROM TB_GOODS_COMPOSE GC
 		  FROM TB_GOODS_COMPOSE GC
 		 INNER JOIN TB_GOODS G
 		 INNER JOIN TB_GOODS G
 		    ON GC.COMPS_GOODS_CD = G.GOODS_CD
 		    ON GC.COMPS_GOODS_CD = G.GOODS_CD
@@ -852,4 +856,307 @@
 		ORDER  BY A.DISP_ORD DESC
 		ORDER  BY A.DISP_ORD DESC
 	</select>
 	</select>
 	
 	
+	<!-- 컨텐츠카테고리상품 목록 -->
+	<select id="getContentsCategoryGoodsList"  parameterType="Cate4Srch" resultType="Goods">
+		/* TsfGoods.getContentsCategoryGoodsList */
+		WITH TAB_GOODS AS (
+		    SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		         , G.GOODS_CD           /*상품코드*/
+		         , G.GOODS_NM           /*상품명*/
+		         , G.GOODS_GB           /*상품구분*/
+		         , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		         , G.ORDER_MADE_YN      /*주문제작여부*/
+		         , G.GOODS_TNM          /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD      /*대표색상코드*/
+		         , G.LIST_PRICE         /*정상가(최초판매가)*/
+		         , G.CURR_PRICE         /*현재판매가*/
+		         , G.REG_DT             /*등록일시*/
+		         , G.NUMB
+		    FROM   (
+		            SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                            BG.BRAND_GROUP_ENM
+		                        ELSE
+		                            BG.BRAND_GROUP_KNM
+		                   END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		                 , G.GOODS_CD                                               /*상품코드*/
+		                 , G.GOODS_NM                                               /*상품명*/
+		                 , G.GOODS_GB                                               /*상품구분*/
+		                 , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                 , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                 , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                 , G.GOODS_TNM                                              /*상품타이틀명*/
+		                 , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                 , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                 , G.CURR_PRICE                                             /*현재판매가*/
+		                 , G.REG_DT                                                 /*등록일시*/
+		                 <choose>
+		                     <when test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		                 , ROW_NUMBER() OVER(ORDER BY GS.SELL_WEEK_QTY DESC
+		                                            , G.GOODS_CD) AS NUMB
+		                     </when>
+		                     <otherwise>
+		                 , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
+		                                            , G.REG_DT DESC
+		                                            , G.GOODS_CD) AS NUMB
+		                     </otherwise>
+		                 </choose>
+		            FROM   TB_CATE_4SRCH C4
+		                 , TB_CATE_GOODS CG
+		                 , TB_GOODS G
+		                 , TB_GOODS_STOCK S
+		                 , TB_BRAND B
+		                 , TB_BRAND_GROUP BG
+		            <if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		                 , TB_GOODS_SUMMARY GS
+		            </if> 
+		            WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		            <choose>
+		                <when test="brandGroupNo != null and brandGroupNo != ''">
+		            AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		                </when>
+		                <otherwise>
+		            AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		                </otherwise>
+		            </choose>
+		            AND    CG.GOODS_CD = G.GOODS_CD
+		            AND    CG.GOODS_CD = S.GOODS_CD
+		            AND    G.BRAND_CD = B.BRAND_CD
+		            AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		            <if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		            AND    CG.GOODS_CD = GS.GOODS_CD
+		            </if>
+		            AND    C4.SITE_CD = #{siteCd}
+		            AND    C4.CATE_GB = #{cateGb}
+		            AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
+		            AND    C4.CATE1_NO = #{cate1No}
+		            AND    C4.CONTENTS_LOC = #{contentsLoc}
+		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		            AND    G.FORMAL_GB = 'G009_10' /*정상상품*/
+		            AND    S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		            AND    B.USE_YN = 'Y'
+		            AND    BG.USE_YN = 'Y'
+		           ) G
+		    WHERE  G.NUMB <![CDATA[<=]]> #{maxRow}
+		)
+		, TAB_GOODS_IMG AS (
+		    /* 상품의 이미지 */
+		    SELECT G.BRAND_GROUP_NM
+		         , G.GOODS_CD
+		         , G.GOODS_NM
+		         , G.GOODS_GB
+		         , G.FOREIGN_BUY_YN
+		         , G.PARALLEL_IMPORT_YN
+		         , G.ORDER_MADE_YN
+		         , G.GOODS_TNM
+		         , G.MAIN_COLOR_CD
+		         , G.LIST_PRICE
+		         , G.CURR_PRICE
+		         , G.REG_DT
+		         , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		         , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		    FROM   TAB_GOODS G
+		         , TB_GOODS_IMG GI
+		    WHERE  G.GOODS_CD = GI.GOODS_CD
+		    AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		)
+		, TAB_GOODS_VIDEO AS (
+		    /* 상품의 동영상 목록 */
+		    SELECT GOODS_CD
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
+		    FROM   (
+		            SELECT G.GOODS_CD
+		                 , V.VIDEO_GB
+		                 , V.VIDEO_VAL
+		                 , VD.REG_DT
+		                 , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		            FROM   TAB_GOODS G
+		                 , TB_VIDEO_DISPLOC VD
+		                 , TB_VIDEO V
+		            WHERE  G.GOODS_CD = VD.DISPLOC_VAL
+		            AND    VD.VIDEO_SQ = V.VIDEO_SQ
+		            AND    VD.DISPLOC_GB = 'G' /*상품*/
+		            AND    VD.DISP_YN = 'Y'
+		            AND    V.DISP_YN ='Y'
+		           ) Z
+		    GROUP  BY GOODS_CD
+		)
+		SELECT G.BRAND_GROUP_NM
+		     , G.GOODS_CD
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , G.GOODS_TNM
+		     , G.MAIN_COLOR_CD
+		     , G.LIST_PRICE
+		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
+		     , G.SYS_IMG_NM
+		     , G.SYS_IMG_NM2
+		     , GV.VIDEO_GB_M
+		     , GV.VIDEO_VAL_M
+		     , GV.VIDEO_GB_S
+		     , GV.VIDEO_VAL_S
+		     <choose>
+		         <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		     , IF(W.GOODS_CD,'','','likeit')                                                                AS LIKE_IT       /*위시리스트담긴상품*/
+		         </when>
+		         <otherwise>
+		     , ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		         </otherwise>
+		     </choose>
+		FROM   TAB_GOODS_IMG G
+		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+		                             AND W.CUST_NO = #{custNo}
+		</if>
+	</select>
+	
+	<!-- 컨텐츠카테고리 신규상품 목록 -->
+	<select id="getContentsCategoryNewGoodsList"  parameterType="Cate4Srch" resultType="Goods">
+		/* TsfGoods.getContentsCategoryNewGoodsList */
+		WITH TAB_GOODS AS (
+		    SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		         , G.GOODS_CD           /*상품코드*/
+		         , G.GOODS_NM           /*상품명*/
+		         , G.GOODS_GB           /*상품구분*/
+		         , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		         , G.ORDER_MADE_YN      /*주문제작여부*/
+		         , G.GOODS_TNM          /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD      /*대표색상코드*/
+		         , G.LIST_PRICE         /*정상가(최초판매가)*/
+		         , G.CURR_PRICE         /*현재판매가*/
+		         , G.REG_DT             /*등록일시*/
+		         , G.NUMB
+		    FROM   (
+		            SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                            BG.BRAND_GROUP_ENM
+		                        ELSE
+		                            BG.BRAND_GROUP_KNM
+		                   END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		                 , G.GOODS_CD                                               /*상품코드*/
+		                 , G.GOODS_NM                                               /*상품명*/
+		                 , G.GOODS_GB                                               /*상품구분*/
+		                 , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                 , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                 , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                 , G.GOODS_TNM                                              /*상품타이틀명*/
+		                 , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                 , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                 , G.CURR_PRICE                                             /*현재판매가*/
+		                 , G.REG_DT                                                 /*등록일시*/
+		                 , ROW_NUMBER() OVER(ORDER BY G.REG_DT DESC
+		                                            , G.GOODS_CD) AS NUMB
+		            FROM   TB_CATE_4SRCH C4
+		                 , TB_CATE_GOODS CG
+		                 , TB_GOODS G
+		                 , TB_GOODS_STOCK GS
+		                 , TB_BRAND B
+		                 , TB_BRAND_GROUP BG
+		            WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		            <choose>
+		                <when test="brandGroupNo != null and brandGroupNo != ''">
+		            AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		                </when>
+		                <otherwise>
+		            AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		                </otherwise>
+		            </choose>
+		            AND    CG.GOODS_CD = G.GOODS_CD
+		            AND    CG.GOODS_CD = GS.GOODS_CD
+		            AND    G.BRAND_CD = B.BRAND_CD
+		            AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		            AND    C4.SITE_CD = #{siteCd}
+		            AND    C4.CATE_GB = #{cateGb}
+		            AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		            AND    C4.CATE1_NO = #{cate1No}
+		            <if test="exceptGoodsArr != null and exceptGoodsArr.length > 0">
+		            AND	   CG.GOODS_CD NOT IN
+		                <foreach collection="exceptGoodsArr" item="item" index="index"  open="(" close=")" separator=",">
+		                #{item}
+		                </foreach>
+		            </if>
+		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		            AND    G.FORMAL_GB = 'G009_10' /*정상상품*/
+		            AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		            AND    B.USE_YN = 'Y'
+		            AND    BG.USE_YN = 'Y'
+		           ) G
+		    WHERE  G.NUMB <![CDATA[<=]]> #{maxRow}
+		)
+		, TAB_GOODS_IMG AS (
+		    /* 상품의 이미지 */
+		    SELECT G.BRAND_GROUP_NM
+		         , G.GOODS_CD
+		         , G.GOODS_NM
+		         , G.GOODS_GB
+		         , G.FOREIGN_BUY_YN
+		         , G.PARALLEL_IMPORT_YN
+		         , G.ORDER_MADE_YN
+		         , G.GOODS_TNM
+		         , G.MAIN_COLOR_CD
+		         , G.LIST_PRICE
+		         , G.CURR_PRICE
+		         , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		         , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		    FROM   TAB_GOODS G
+		         , TB_GOODS_IMG GI
+		    WHERE  G.GOODS_CD = GI.GOODS_CD
+		    AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		)
+		, TAB_GOODS_VIDEO AS (
+		    /* 상품의 동영상 목록 */
+		    SELECT GOODS_CD
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
+		    FROM   (
+		            SELECT G.GOODS_CD
+		                 , V.VIDEO_GB
+		                 , V.VIDEO_VAL
+		                 , VD.REG_DT
+		                 , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		            FROM   TAB_GOODS G
+		                 , TB_VIDEO_DISPLOC VD
+		                 , TB_VIDEO V
+		            WHERE  G.GOODS_CD = VD.DISPLOC_VAL
+		            AND    VD.VIDEO_SQ = V.VIDEO_SQ
+		            AND    VD.DISPLOC_GB = 'G' /*상품*/
+		            AND    VD.DISP_YN = 'Y'
+		            AND    V.DISP_YN ='Y'
+		           ) Z
+		    GROUP  BY GOODS_CD
+		)
+		SELECT G.BRAND_GROUP_NM
+		     , G.GOODS_CD
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , G.GOODS_TNM
+		     , G.MAIN_COLOR_CD
+		     , G.LIST_PRICE
+		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
+		     , G.SYS_IMG_NM
+		     , G.SYS_IMG_NM2
+		     , GV.VIDEO_GB_M
+		     , GV.VIDEO_VAL_M
+		     , GV.VIDEO_GB_S
+		     , GV.VIDEO_VAL_S
+		     <choose>
+		         <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		     , IF(W.GOODS_CD,'','','likeit')                                                                AS LIKE_IT       /*위시리스트담긴상품*/
+		         </when>
+		         <otherwise>
+		     , ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
+		         </otherwise>
+		     </choose>
+		FROM   TAB_GOODS_IMG G
+		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+		                             AND W.CUST_NO = #{custNo}
+		</if>
+	</select>
+	
 </mapper>
 </mapper>

+ 157 - 87
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -18,81 +18,145 @@
 	<!-- 마이페이지 주문 목록 조회 -->
 	<!-- 마이페이지 주문 목록 조회 -->
 	<select id="getOrderListForMypage" parameterType="Order" resultType="Order">
 	<select id="getOrderListForMypage" parameterType="Order" resultType="Order">
 		/* TsfOrder.getOrderListForMypage */
 		/* TsfOrder.getOrderListForMypage */
-		SELECT O.ORD_NO
-		     , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
-		     , CASE OD.GIFT_PACK_YN WHEN 'Y' THEN DATE_FORMAT(O.ORD_DT + INTERVAL 3 DAY, '%Y.%m.%d')
-				END															AS GIFT_LIMIT_DT
-		     , CASE OD.GIFT_PACK_YN WHEN 'Y' THEN TIMESTAMPDIFF(DAY, NOW(), O.ORD_DT + INTERVAL 3 DAY)
-				END															AS GIFT_LIMIT_DAY
-		     , CASE OD.GIFT_PACK_YN WHEN 'Y' THEN DATE_FORMAT(DA.UPD_DT, '%Y.%m.%d')
-				END															AS GIFT_COMPLETE_DT
-		     , DATE_FORMAT(OD.DELV_EDDT, '%m/%d')							AS DELV_EDDT
-		     , OD.ORD_DTL_NO
-		     , OD.ORD_EXCH_GB
-		     , OD.GOODS_CD
-		     , G.GOODS_NM
-		     , G.LIST_PRICE
-		     , ODI.OPT_CD
-		     , ODI.OPT_CD1
-		     , ODI.OPT_CD2
-		     , GI.SYS_IMG_NM
-		     , OD.ORD_DTL_STAT
-		     , OD.ORD_QTY
-		     , OD.CNCL_RTN_QTY
-		     , OD.ORD_AMT
-		     , OD.REAL_ORD_AMT
-		     , OD.SAVE_PNT_AMT
-		     , OD.CNCL_RTN_AMT
-		     , OD.SHIP_COMP_CD
-		     , OD.GIFT_PACK_YN
-		     , (SELECT SHIP_COMP_NM
-				  FROM TB_SHIP_COMPANY Z
-				 WHERE Z.SHIP_COMP_CD = OD.SHIP_COMP_CD)					AS SHIP_COMP_NM
-		     , OD.INVOICE_NO
-		     , OD.SUPPLY_COMP_CD
-		     , OD.DELV_FEE_CD
-		     , OD.SHOT_DELV_YN
-		     , OD.CHANGEABLE_YN
-		     , OD.RETURNABLE_YN
-		     , G.SELF_GOODS_YN
-		     , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)						AS BRAND_NM
-		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)						AS ORD_DTL_STAT_NM
-		     , R.REVIEW_SQ
-		     , IF(NOW() <![CDATA[<]]> O.ORD_DT + INTERVAL 90 DAY, 'Y', 'N')	AS REVIEWABLE_YN
-		     , TIMESTAMPDIFF(DAY, NOW(), OD.DELV_EDDT + INTERVAL 2 WEEK)	AS PURCHASE_CONFIRM_DAY
-		     , DA.RECIP_NM
-		     , DA.RECIP_TELNO
-		     , DA.RECIP_PHNNO
-		     , DA.RECIP_ZIPCODE
-		     , DA.RECIP_BASE_ADDR
-		     , DA.RECIP_DTL_ADDR
-		     , DATE_FORMAT(GRS.DELV_RES_DT, '%Y.%m.%d')						AS DELV_RES_DT
-		  FROM TB_ORDER O
-		 INNER JOIN TB_ORDER_DETAIL OD
-		    ON O.ORD_NO = OD.ORD_NO
-		   AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25', 'G013_97', 'G013_98', 'G013_99')
-		 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
-		    ON OD.ORD_NO = ODI.ORD_NO
-		   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-		   AND ODI.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25', 'G013_97', 'G013_98', 'G013_99')
-		 INNER JOIN TB_GOODS G
-		    ON OD.GOODS_CD = G.GOODS_CD
-		 INNER JOIN TB_BRAND B
-		    ON B.BRAND_CD = G.BRAND_CD
-		  LEFT OUTER JOIN TB_REVIEW R
-		    ON R.ORD_NO = OD.ORD_NO
-		   AND R.ORD_DTL_NO = OD.ORD_DTL_NO
-		  LEFT OUTER JOIN TB_DELIVERY_ADDR DA
-		    ON DA.DELV_ADDR_SQ = OD.DELV_ADDR_SQ
-		  LEFT OUTER JOIN TB_GOODS_IMG GI
-		    ON OD.GOODS_CD = GI.GOODS_CD
-		   AND ODI.OPT_CD1 = GI.COLOR_CD
-		   AND GI.DEFAULT_IMG_YN = 'Y'
-		  LEFT OUTER JOIN TB_GOODS_RES_SELL GRS
-		    ON GRS.GOODS_CD = OD.GOODS_CD
+		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
+		     , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		     , GROUP_CONCAT(Z.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
+		     , Z.ORD_NO
+		     , Z.ORD_DT
+		     , Z.GIFT_LIMIT_DT
+		     , Z.GIFT_LIMIT_DAY
+		     , Z.GIFT_COMPLETE_DT
+		     , Z.GIFT_ADDR_INP_YN
+		     , Z.DELV_EDDT
+		     , Z.ORD_DTL_NO
+		     , Z.ORD_EXCH_GB
+		     , Z.GOODS_CD
+		     , Z.GOODS_NM
+		     , Z.LIST_PRICE
+		     , Z.GOODS_TYPE
+		     , Z.SYS_IMG_NM
+		     , Z.ORD_DTL_STAT
+		     , Z.ORD_QTY
+		     , Z.CNCL_RTN_QTY
+		     , Z.ORD_AMT
+		     , Z.REAL_ORD_AMT
+		     , Z.SAVE_PNT_AMT
+		     , Z.CNCL_RTN_AMT
+		     , Z.PNT_DC_AMT
+		     , Z.GFCD_USE_AMT
+		     , Z.SHIP_COMP_CD
+		     , Z.GIFT_PACK_YN
+		     , Z.SHIP_COMP_NM
+		     , Z.INVOICE_NO
+		     , Z.SUPPLY_COMP_CD
+		     , Z.DELV_FEE_CD
+		     , Z.SHOT_DELV_YN
+		     , Z.CHANGEABLE_YN
+		     , Z.RETURNABLE_YN
+		     , Z.SELF_GOODS_YN
+		     , Z.BRAND_NM
+		     , Z.ORD_DTL_STAT_NM
+		     , Z.REVIEW_SQ
+		     , Z.REVIEWABLE_YN
+		     , Z.PURCHASE_CONFIRM_DAY
+		     , Z.DELV_RES_DT
+		     , Z.ORD_REQ_CHG_QTY
+		     , Z.BANK_CD
+		     , Z.ACCOUNT_NO
+		     , Z.ACCOUNT_NM
+		  FROM (SELECT O.ORD_NO
+					 , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
+					 , CASE OD.GIFT_PACK_YN WHEN 'Y' THEN DATE_FORMAT(O.ORD_DT + INTERVAL 3 DAY, '%Y.%m.%d')
+						END																AS GIFT_LIMIT_DT
+					 , CASE OD.GIFT_PACK_YN WHEN 'Y' THEN TIMESTAMPDIFF(DAY, NOW(), O.ORD_DT + INTERVAL 3 DAY)
+						END																AS GIFT_LIMIT_DAY
+					 , CASE OD.GIFT_PACK_YN WHEN 'Y' THEN DATE_FORMAT(DA.UPD_DT, '%Y.%m.%d')
+						END																AS GIFT_COMPLETE_DT
+					 , DATE_FORMAT(OD.DELV_EDDT, '%m/%d')								AS DELV_EDDT
+					 , OD.ORD_DTL_NO
+					 , OD.ORD_EXCH_GB
+					 , OD.GOODS_CD
+		             , OD.GIFT_ADDR_INP_YN
+					 , G.GOODS_NM
+					 , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
+					 , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = ODI.ITEM_CD)		AS ITEM_NM
+		             , ODI.ORD_DTL_ITEM_SQ
+					 , ODI.OPT_CD1
+					 , ODI.OPT_CD2
+					 , G.LIST_PRICE
+		             , G.GOODS_TYPE
+					 , GI.SYS_IMG_NM
+					 , OD.ORD_DTL_STAT
+					 , OD.ORD_QTY
+					 , OD.CNCL_RTN_QTY
+					 , OD.ORD_AMT
+					 , OD.REAL_ORD_AMT
+					 , OD.SAVE_PNT_AMT
+					 , OD.CNCL_RTN_AMT
+					 , OD.PNT_DC_AMT
+					 , OD.GFCD_USE_AMT
+					 , OD.SHIP_COMP_CD
+					 , OD.GIFT_PACK_YN
+					 , (SELECT SHIP_COMP_NM
+						  FROM TB_SHIP_COMPANY Z
+						 WHERE Z.SHIP_COMP_CD = OD.SHIP_COMP_CD)						AS SHIP_COMP_NM
+					 , OD.INVOICE_NO
+					 , OD.SUPPLY_COMP_CD
+					 , OD.DELV_FEE_CD
+					 , OD.SHOT_DELV_YN
+					 , OD.CHANGEABLE_YN
+					 , OD.RETURNABLE_YN
+					 , G.SELF_GOODS_YN
+					 , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
+					 , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
+					 , R.REVIEW_SQ
+					 , IF(NOW() <![CDATA[<]]> O.ORD_DT + INTERVAL 90 DAY, 'Y', 'N')		AS REVIEWABLE_YN
+					 , TIMESTAMPDIFF(DAY, NOW(), OD.DELV_EDDT + INTERVAL 2 WEEK)		AS PURCHASE_CONFIRM_DAY
+					 , DATE_FORMAT(GRS.DELV_RES_DT, '%Y.%m.%d') AS DELV_RES_DT
+					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 , CA.BANK_CD
+					 , CA.ACCOUNT_NO
+					 , CA.ACCOUNT_NM
+				  FROM TB_ORDER O
+				 INNER JOIN TB_ORDER_DETAIL OD
+				    ON O.ORD_NO = OD.ORD_NO
+				   AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25', 'G013_97', 'G013_98', 'G013_99')
+				 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+				    ON OD.ORD_NO = ODI.ORD_NO
+				   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+				   AND ODI.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25', 'G013_97', 'G013_98', 'G013_99')
+				 INNER JOIN TB_GOODS G
+				    ON OD.GOODS_CD = G.GOODS_CD
+				 INNER JOIN TB_BRAND B
+				    ON B.BRAND_CD = G.BRAND_CD
+				  LEFT OUTER JOIN TB_REVIEW R
+				    ON R.ORD_NO = OD.ORD_NO
+				   AND R.ORD_DTL_NO = OD.ORD_DTL_NO
+				  LEFT OUTER JOIN TB_DELIVERY_ADDR DA
+				    ON DA.DELV_ADDR_SQ = OD.DELV_ADDR_SQ
+				  LEFT OUTER JOIN TB_GOODS_IMG GI
+				    ON OD.GOODS_CD = GI.GOODS_CD
+				   AND ODI.OPT_CD1 = GI.COLOR_CD
+				   AND GI.DEFAULT_IMG_YN = 'Y'
+				  LEFT OUTER JOIN TB_GOODS_RES_SELL GRS
+				    ON GRS.GOODS_CD = OD.GOODS_CD
+				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
+										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+									 FROM TB_ORDER_CHANGE_DETAIL OCD
+									INNER JOIN TB_ORDER_DETAIL OD
+									   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+									WHERE OD.ORD_NO = #{ordNo}
+									  AND OCD.DEL_YN = 'N'
+									  AND OCD.CHG_STAT IN ('G685_20', 'G685_30', 'G685_33', 'G685_40')
+									GROUP BY OCD.ORD_DTL_NO
+								  ) OCD
+				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				  LEFT OUTER JOIN TB_CUST_ACCOUNT CA
+				    ON O.CUST_NO = CA.CUST_NO
 		<where>
 		<where>
 			<choose>
 			<choose>
-				<when test='custNo != null and custNo != ""'>
+				<when test="custNo != null and custNo != ''">
 		   AND O.CUST_NO = #{custNo}
 		   AND O.CUST_NO = #{custNo}
 				</when>
 				</when>
 				<otherwise>
 				<otherwise>
@@ -103,31 +167,33 @@
 			<if test="ordNo != null and ordNo != ''">
 			<if test="ordNo != null and ordNo != ''">
 		   AND O.ORD_NO = #{ordNo}
 		   AND O.ORD_NO = #{ordNo}
 			</if>
 			</if>
-			<if test="ordNoList != null">
-		   AND O.ORD_NO IN
-				<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
-					#{item}
-				</foreach>
-			</if>
 			<if test="ordDtlNoArr != null">
 			<if test="ordDtlNoArr != null">
 		   AND OD.ORD_DTL_NO IN
 		   AND OD.ORD_DTL_NO IN
 				<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
 				<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
 					#{item}
 					#{item}
 				</foreach>
 				</foreach>
 			</if>
 			</if>
+			<if test="ordNoList != null">
+		   AND O.ORD_NO IN
+				<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
+					#{item}
+				</foreach>
+			</if>
 		   AND O.DISP_YN = 'Y'
 		   AND O.DISP_YN = 'Y'
+		   AND OD.ORD_QTY - OD.CNCL_RTN_QTY > 0
 		</where>
 		</where>
-		 ORDER BY OD.ORD_NO DESC
-				, OD.ORD_DTL_STAT
-				, G.SELF_GOODS_YN DESC
-				, OD.SHOT_DELV_YN DESC
-		 		, OD.SUPPLY_COMP_CD
-				, OD.DELV_FEE_CD
+				) Z
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.GIFT_LIMIT_DT, Z.GIFT_LIMIT_DAY, Z.GIFT_COMPLETE_DT, GIFT_ADDR_INP_YN, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
+				, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
+				, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.SHIP_COMP_CD, Z.GIFT_PACK_YN, Z.SHIP_COMP_NM, Z.INVOICE_NO
+				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.ORD_DTL_STAT_NM, Z.REVIEW_SQ
+				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM
+		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD
 	</select>
 	</select>
 
 
 	<!-- 마이페이지 주문목록 페이징 처리 주문번호 수 조회 -->
 	<!-- 마이페이지 주문목록 페이징 처리 주문번호 수 조회 -->
 	<select id="getPagingOrdNoListCount" parameterType="Order" resultType="int">
 	<select id="getPagingOrdNoListCount" parameterType="Order" resultType="int">
-		/* TsfOrder.getPagingOrdNoList */
+		/* TsfOrder.getPagingOrdNoListCount */
 		SELECT COUNT(*) AS CNT
 		SELECT COUNT(*) AS CNT
 		  FROM (SELECT O.ORD_NO
 		  FROM (SELECT O.ORD_NO
 				  FROM TB_ORDER O
 				  FROM TB_ORDER O
@@ -135,6 +201,8 @@
 				    ON O.ORD_NO = OD.ORD_NO
 				    ON O.ORD_NO = OD.ORD_NO
 				 WHERE O.CUST_NO = #{custNo}
 				 WHERE O.CUST_NO = #{custNo}
 				   AND O.DISP_YN = 'Y'
 				   AND O.DISP_YN = 'Y'
+				   AND OD.ORD_QTY - OD.CNCL_RTN_QTY > 0
+				   AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25', 'G013_97', 'G013_98', 'G013_99')
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 				   AND O.ORD_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
 				   AND O.ORD_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
 		</if>
 		</if>
@@ -156,6 +224,8 @@
 		    ON O.ORD_NO = OD.ORD_NO
 		    ON O.ORD_NO = OD.ORD_NO
 		 WHERE O.CUST_NO = #{custNo}
 		 WHERE O.CUST_NO = #{custNo}
 		   AND O.DISP_YN = 'Y'
 		   AND O.DISP_YN = 'Y'
+		   AND OD.ORD_QTY - OD.CNCL_RTN_QTY > 0
+		   AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25', 'G013_97', 'G013_98', 'G013_99')
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 		   AND O.ORD_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
 		   AND O.ORD_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
 		</if>
 		</if>
@@ -168,7 +238,7 @@
 	
 	
 	<!-- 마이페이지 주문목록 사은품 조회 -->
 	<!-- 마이페이지 주문목록 사은품 조회 -->
 	<select id="getOrderFreeGiftListForMypage" parameterType="Order" resultType="Order">
 	<select id="getOrderFreeGiftListForMypage" parameterType="Order" resultType="Order">
-		/* TsfOrder.getPagingOrdNoList */
+		/* TsfOrder.getOrderFreeGiftListForMypage */
 		SELECT FG.GOODS_NM
 		SELECT FG.GOODS_NM
 			 , OFV.USE_POINT
 			 , OFV.USE_POINT
 		  FROM TB_ORD_FREEGIFT OFG
 		  FROM TB_ORD_FREEGIFT OFG

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

@@ -70,6 +70,8 @@
 		     , OD.SHOT_DELV_YN
 		     , OD.SHOT_DELV_YN
 		     , G1.SELF_GOODS_YN
 		     , G1.SELF_GOODS_YN
 		     , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)			AS BRAND_NM
 		     , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)			AS BRAND_NM
+		     , P.PAY_MEANS
+		     , P.PAY_STAT
 		  FROM TB_ORDER O
 		  FROM TB_ORDER O
 		 INNER JOIN TB_ORDER_DETAIL OD
 		 INNER JOIN TB_ORDER_DETAIL OD
 		    ON O.ORD_NO = OD.ORD_NO
 		    ON O.ORD_NO = OD.ORD_NO
@@ -82,6 +84,10 @@
 		    ON ODI.ITEM_CD = G2.GOODS_CD
 		    ON ODI.ITEM_CD = G2.GOODS_CD
 		 INNER JOIN TB_BRAND B
 		 INNER JOIN TB_BRAND B
 		    ON B.BRAND_CD = G1.BRAND_CD
 		    ON B.BRAND_CD = G1.BRAND_CD
+		 INNER JOIN TB_PAYMENT P
+		    ON OD.ORD_NO = P.ORD_NO
+		   AND P.PAY_STAT IN ('G016_30', 'G016_00')
+		   AND P.PAY_GB = 'O'
 		  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 		  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 								, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 								, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 							 FROM TB_ORDER_CHANGE_DETAIL OCD
 							 FROM TB_ORDER_CHANGE_DETAIL OCD
@@ -265,6 +271,97 @@
 		 ORDER BY OD.ORD_DTL_NO
 		 ORDER BY OD.ORD_DTL_NO
 	</select>
 	</select>
 	
 	
+	<!-- 취소/반품 환불 사전 정보 조회 -->
+	<select id="getRefundPreInfo" parameterType="OrderChange" resultType="Order">
+		/* TscOrderChange.getRefundPreInfo */
+		SELECT O.ORD_NO
+			 , OD.ORD_DTL_NO
+			 , OD.GOODS_CD
+			 , G1.GOODS_NM
+			 , ODI.ORD_DTL_ITEM_SQ
+			 , ODI.ITEM_CD
+			 , G2.GOODS_NM									AS ITEM_NM
+			 , ODI.ITEM_QTY
+			 , OD.ORD_QTY
+			 , OD.CNCL_RTN_QTY
+			 , OCD.ORD_REQ_CHG_QTY
+			 , ODI.ITEM_PRICE
+			 , ODI.OPT_ADD_PRICE
+			 , ODI.ORD_AMT
+			 , ODI.OPT_CD1
+			 , ODI.OPT_CD2
+			 , ODI.CPN1_DC_AMT
+			 , ODI.TMTB1_DC_AMT
+			 , ODI.TMTB2_DC_AMT
+			 , ODI.GOODS_CPN_DC_AMT
+			 , ODI.CART_CPN_DC_AMT
+			 , ODI.PNT_DC_AMT
+			 , ODI.PRE_PNT_DC_AMT
+			 , ODI.SAVE_PNT_AMT
+			 , ODI.GFCD_USE_AMT
+			 , ODI.CNCL_RTN_AMT
+			 , FN_GET_CODE_NM('G056', OD.GOODS_TYPE)		AS GOODS_TYPE_NM
+			 , ODI.ORD_DTL_STAT
+			 , FN_GET_CODE_NM('G013', ODI.ORD_DTL_STAT)		AS ORD_DTL_STAT_NM
+			 , DF.DELV_FEE
+			 , DFP.MIN_ORD_AMT
+			 , DFP.DELV_FEE									AS ORG_DELV_FEE
+			 , DFP.RTN_DELV_FEE
+			 , DFP.DELV_FEE + DFP.RTN_DELV_FEE				AS EXC_DELV_FEE
+			 , DFP.SUPPLY_COMP_CD
+			 , DFP.DELV_FEE_CD
+			 , P.PAY_STAT
+			 , P.PAY_STAT
+		  FROM TB_ORDER O
+		 INNER JOIN TB_ORDER_DETAIL OD
+		    ON O.ORD_NO = OD.ORD_NO
+		 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+		    ON O.ORD_NO = ODI.ORD_NO
+		   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		 INNER JOIN TB_GOODS G1
+		    ON OD.GOODS_CD = G1.GOODS_CD
+		 INNER JOIN TB_GOODS G2
+		    ON ODI.ITEM_CD = G2.GOODS_CD
+		 INNER JOIN TB_PAYMENT P
+		    ON P.ORD_NO = O.ORD_NO
+		  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
+								, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+							 FROM TB_ORDER_CHANGE_DETAIL OCD
+							INNER JOIN TB_ORDER_DETAIL OD
+							   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+							WHERE OCD.DEL_YN = 'N'
+							  AND OCD.CHG_STAT IN ('G685_20', 'G685_30', 'G685_33', 'G685_40')
+							GROUP BY OCD.ORD_DTL_NO
+						  ) OCD
+		    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		  LEFT OUTER JOIN (SELECT X.DELV_FEE_CD
+								, SUM(X.DELV_FEE) AS DELV_FEE
+							 FROM TB_DELIVERY_FEE X
+							WHERE X.DELV_FEE_GB = 'G018_10'
+							GROUP BY X.DELV_FEE_CD
+						  ) DF
+		    ON OD.DELV_FEE_CD = DF.DELV_FEE_CD
+		  LEFT OUTER JOIN TB_DELV_FEE_POLICY DFP
+		    ON DF.DELV_FEE_CD = DFP.DELV_FEE_CD
+		   AND DFP.USE_YN = 'Y'
+		<where>
+			<choose>
+				<when test='custNo != null and custNo != ""'>
+		   AND O.CUST_NO = #{custNo}
+				</when>
+				<otherwise>
+		   AND O.ORD_NO = #{ordNo}
+		   AND O.ORD_NM = #{orderNm}
+				</otherwise>
+			</choose>
+			<if test="ordNo != null and ordNo != ''">
+		   AND O.ORD_NO = #{ordNo}
+			</if>
+		   AND O.DISP_YN = 'Y'
+		</where>
+
+	</select>
+	
 	<!-- 사용 상품권 정보 조회 -->
 	<!-- 사용 상품권 정보 조회 -->
 	<select id="getUsedGiftcardInfo" parameterType="Order" resultType="GiftCard">
 	<select id="getUsedGiftcardInfo" parameterType="Order" resultType="GiftCard">
 		/* TscOrderChange.getUsedGiftcardInfo */
 		/* TscOrderChange.getUsedGiftcardInfo */

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

@@ -276,4 +276,210 @@
 		WHERE R.GOODS_CD = #{goodsCd}
 		WHERE R.GOODS_CD = #{goodsCd}
 	</select>
 	</select>
 
 
+	<!-- 마이페이지 작성가능한 리뷰 -->
+	<select id="getCompleteReviewList" parameterType="Review" resultType="Goods">
+		/* TsfReivew.getCompleteReviewList */
+		SELECT F.*
+			  , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+		FROM
+		(
+			SELECT O.ORD_NO 
+			      ,O.ORD_NM
+			      ,DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+			      ,I.ITEMKIND_NM 
+			      ,I.ITEMKIND_CD 
+			      ,I.SIZE_GB 
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
+			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
+								 			 	AND OD.ORD_DTL_STAT = 'G013_70' -- 구매 확정인것만
+			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			                  	                 AND ODI.ORD_DTL_STAT = 'G013_70'
+			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
+			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
+			                LEFT JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD 
+			WHERE 1=1
+				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N')
+				AND O.CUST_NO = #{custNo}
+				AND O.DISP_YN = 'Y'
+				AND O.SITE_CD = #{siteCd}
+				<if test="ordNo!=null and ordNo != ''">
+				AND O.ORD_NO = #{ordNo}
+				</if>
+				<if test="ordDtlNo!=null and ordDtlNo != ''">
+				AND OD.ORD_DTL_NO = #{ordDtlNo}
+				</if>
+				<if test="goodsCd!=null and goodsCd!=''">
+				AND G.GOODS_CD = #{goodsCd}
+				</if>
+			GROUP BY O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+		)F
+		ORDER BY F.PAY_DT DESC
+	</select>
+	
+	<!-- 마이페이지 작성가능한 리뷰 -->
+	<select id="getCompleteReviewCount" parameterType="Review" resultType="int">
+		/* TsfReivew.getCompleteReviewCount */
+		SELECT  COUNT(*) AS CNT 
+		FROM
+		(
+			SELECT O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS DT -- 남은시간
+			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
+								 			 AND OD.ORD_DTL_STAT = 'G013_70'--  구매 확정인것만
+			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			                  	                 AND ODI.ORD_DTL_STAT = 'G013_70'
+			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
+			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
+			WHERE 1=1
+				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N')
+				AND O.CUST_NO = #{custNo}
+				AND O.DISP_YN = 'Y'
+				AND O.SITE_CD = #{siteCd}
+			GROUP BY O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+		)F
+		ORDER BY F.PAY_DT DESC
+	</select>
+	
+	<select id="saveMypageReview" parameterType="Review" resultType="Review">
+		/* TsfReivew.saveMypageReview */
+		INSERT INTO TB_REVIEW (
+						GOODS_CD
+					  , CUST_NO
+					  , ORD_NO
+					  , ORD_DTL_NO
+					  , REVIEW_TITLE
+					  , REVIEW_CONTENT
+					  , SCORE
+					  , HEIGHT
+					  , WEIGHT
+					  , SCORE_SIZE
+					  , SCORE_COLOR
+					  , SCORE_FIT
+					  , SCORE_THICK
+					  , SCORE_WEIGHT
+					  , SCORE_BALL
+					  , DISP_YN
+					  , DEL_YN
+					  , REG_NO
+					  , REG_DT
+					  , UPD_NO
+					  , UPD_DT
+					)
+					VALUES (
+					     	#{goodsCd}
+						  , #{custNo}
+						  , #{ordNo}
+						  , #{ordDtlNo}
+						  , #{reviewTitle}
+						  , #{reviewContent}
+						  , #{score}
+						  , #{height}
+						  , #{weight}
+						  , #{scoreSize}
+						  , #{scoreColor}
+						  , #{scoreFit}
+						  , #{scoreThick}
+						  , #{scoreWeight}
+						  , #{scoreBall}
+						  , #{dispYn}
+						  , #{delYn}
+						  , #{regNo}
+						  , now()
+						  , #{updNo}
+						  , now()
+					)
+					ON DUPLICATE KEY UPDATE
+					
+			                REVIEW_TITLE   =  #{reviewTitle}
+			               ,REVIEW_CONTENT =  #{reviewContent} 
+			               ,SCORE          =  #{score}           
+			               ,HEIGHT         =  #{height}          
+			               ,WEIGHT         =  #{weight}          
+			               ,SCORE_SIZE     =  #{scoreSize}       
+			               ,SCORE_COLOR    =  #{scoreColor}      
+			               ,SCORE_FIT      =  #{scoreFit}        
+			               ,SCORE_THICK    =  #{scoreThick}      
+			               ,SCORE_WEIGHT   =  #{scoreWeight}     
+			               ,SCORE_BALL     =  #{scoreBall}       
+			               ,UPD_DT         =  now()     
+			                           
+	</select>
 </mapper>
 </mapper>

+ 326 - 210
src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html

@@ -1,269 +1,385 @@
 <html lang="ko"
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org">
 	  xmlns:th="http://www.thymeleaf.org">
 <!-- 옵션변경 팝업 -->
 <!-- 옵션변경 팝업 -->
-<div class="modal-dialog cartOptionModal" role="document">
+<div id="cartOptionModal" class="modal-dialog cartOptionModal" role="document">
 	<div class="modal-content">
 	<div class="modal-content">
 		<div class="modal-header">
 		<div class="modal-header">
 			<h5 class="modal-title" id="optModifyLabel">옵션변경</h5>
 			<h5 class="modal-title" id="optModifyLabel">옵션변경</h5>
 			<div class="prod_title">
 			<div class="prod_title">
-				<span class="brand" th:text="|${cart.brandEnm + ' ' + cart.brandKnm}|"></span>
-				<span class="name" th:text="${cart.goodsNm}"></span>
+				<span class="name" th:text="${cart.goodsNm}">버카루 BUCKROO 남성 제기장 스웨이드 자켓</span>
 			</div>
 			</div>
 		</div>
 		</div>
-
 		<div class="modal-body">
 		<div class="modal-body">
 			<div class="pop_cont">
 			<div class="pop_cont">
-				<div class="prod_info">
-					<div class="prod_preview">
-						<div class="area_pic">
-							<ul class="pic_list">
-								<th:block th:if="${setType.equals(cart.goodsType) or cart.selfGoodsYn.equals('N')}">
-									<li th:each="img, index : ${cart.cartImgList}">
-										<span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
-									</li>
-								</th:block>
-								<th:block th:if="${!setType.equals(cart.goodsType) and cart.selfGoodsYn.equals('Y')}">
-									<th:block th:each="comp, status : ${cart.cartCompsList}">
-										<th:block th:each="color, index : ${comp.cartColorList}">
-											<th:block th:if="${color.cartOptCd1 != null and color.cartOptCd1.equals(color.optCd1)}">
-												<li th:each="img, index : ${color.cartImgList}">
-													<span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
-												</li>
-											</th:block>
-										</th:block>
+				<div class="area_pic">
+					<ul class="pic_list">
+						<th:block th:if="${setType.equals(cart.goodsType) or cart.selfGoodsYn.equals('N')}">
+							<li th:each="img, index : ${cart.cartImgList}">
+								<span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
+							</li>
+						</th:block>
+						<th:block th:if="${!setType.equals(cart.goodsType) and cart.selfGoodsYn.equals('Y')}">
+							<th:block th:each="comp, status : ${cart.cartCompsList}">
+								<th:block th:each="color, index : ${comp.cartColorList}">
+									<th:block th:if="${color.cartOptCd1 != null and color.cartOptCd1.equals(color.optCd1)}">
+										<li th:each="img, index : ${color.cartImgList}" th:if="${img.colorCd == color.cartOptCd1}">
+											<span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
+										</li>
 									</th:block>
 									</th:block>
 								</th:block>
 								</th:block>
-							</ul>
-						</div>
-						<div class="area_order">
-							<th:block th:each="comp, status : ${cart.cartCompsList}">
-								<!-- 세트상품 옵션 -->
-								<th:block th:if="${setType.equals(cart.goodsType)}">
-									<div class="opt_select setOption">
-										<div class="opt_header">
-											<span class="title" th:text="${comp.goodsNm}"></span>
-										</div>
+							</th:block>
+						</th:block>
+					</ul>
+				</div>
+				<div class="area_order">
+					<th:block th:each="comp, status : ${cart.cartCompsList}">
+						<!-- 세트상품 옵션 -->
+						<th:block th:if="${setType.equals(cart.goodsType)}">
+							<div class="opt_select">
+								<div class="opt_header">
+									<span class="title" th:text="${comp.goodsNm}"></span>
+								</div>
+								<div class="opt_header">
+									<span class="title">옵션1</span>
+									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+										<span class="text" th:text="${color.cartColorNm}"></span>
+									</th:block>
+								</div>
 
 
-										<!-- 컬러 변경시 만들어줄 size option -->
-										<th:block th:each="color, index : ${comp.cartColorList}">
-											<span style="display:none;">
-												<select th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
-													<th:block th:each="size, i : ${color.cartSizeList}">
-														<th:block th:if="${color.optCd1.equals(size.optCd1)}">
-															<option th:value="${size.optCd}" th:text="${size.optCd2}"></option>
-														</th:block>
-													</th:block>
-												</select>
-											</span>
-										</th:block>
+								<!-- 컬러 변경시 만들어줄 size option -->
+								<th:block th:each="color, index : ${comp.cartColorList}">
+									<span style="display:none;">
+										<select th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
+											<th:block th:each="size, i : ${color.cartSizeList}">
+												<th:block th:if="${color.optCd1.equals(size.optCd1)}">
+													<option th:value="${size.optCd}" th:text="${size.optCd2}"></option>
+												</th:block>
+											</th:block>
+										</select>
+									</span>
+								</th:block>
 
 
-										<div class="form_field">
-											<select class="setColorSelect">
-												<th:block th:each="color, index : ${comp.cartColorList}">
-													<option th:data="${comp.goodsCd}" th:value="${color.optCd1}" rel="icon-temperature" th:text="${color.colorNm}" th:selected="${color.cartColorNm != null}"></option>
+								<form class="form_wrap">
+									<div class="form_field">
+										<div class="select_custom item_opt1 setColorSelect">
+											<div class="combo">
+												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+													<div class="select" th:text="${color.cartColorNm}"></div>
 												</th:block>
 												</th:block>
-											</select>
+												<ul class="list">
+													<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+													<th:block th:each="color, index : ${comp.cartColorList}">
+														<li th:classappend="${color.cartColorNm != null} ? selected" th:text="${color.colorNm}"></li>
+													</th:block>
+													<!--<li class="selected">카키/95</li>
+													<li aria-disabled="true">옐로우/105</li>-->
+												</ul>
+											</div>
 										</div>
 										</div>
-										<div class="form_field">
-											<th:block th:each="color, index : ${comp.cartColorList}">
-											<select th:data="${color.goodsCd}" th:class="|size_${comp.goodsCd} setSizeSelect|">
-												<th:block th:each="size, i : ${color.cartSizeList}">
-													<th:block th:if="${color.optCd1.equals(size.optCd1)}">
-														<option th:data="${comp.cartDtlSq}" th:value="${size.optCd}" th:text="${size.optCd2}" th:selected="${size.cartOptCd != null}"></option>
+									</div>
+								</form>
+							</div>
+							<div class="opt_select">
+								<div class="opt_header">
+									<span class="title">옵션2</span>
+									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+										<th:block th:each="size, i : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
+											<span class="text" th:text="${size.optCd2}"></span>
+										</th:block>
+									</th:block>
+								</div>
+								<form class="form_wrap">
+									<div class="form_field">
+										<div class="select_custom item_opt2 setSizeSelect">
+											<div class="combo">
+												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+													<th:block th:each="size, i : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
+														<div class="select" th:classappend="|size_${comp.goodsCd}|" th:text="${size.optCd2}" th:data="${color.goodsCd}"></div>
 													</th:block>
 													</th:block>
+													<ul class="list">
+														<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
+															<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+															<li th:classappend="${size.cartOptCd != null} ? selected" th:data="${comp.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}"></li>
+															<!--<li class="selected">블랙/95</li>
+															<li aria-disabled="true">블랙/105</li>-->
+														</th:block>
+													</ul>
 												</th:block>
 												</th:block>
-											</select>
-											</th:block>
+											</div>
 										</div>
 										</div>
 									</div>
 									</div>
-								</th:block>
+								</form>
+							</div>
+						</th:block>
 
 
-								<!-- 자사 일반 상품 옵션 -->
-								<th:block th:if="${!setType.equals(cart.goodsType) and 'Y'.equals(cart.selfGoodsYn)}">
-									<div class="opt_color">
-										<div class="opt_header">
-											<span class="title">컬러</span>
-											<th:block th:each="color, index : ${comp.cartColorList}">
-												<th:block th:if="${color.cartColorNm != null}">
-													<span class="color" th:text="${color.cartColorNm}"></span>
-												</th:block>
+						<!-- 자사 일반 상품 옵션 -->
+						<th:block th:if="${!setType.equals(cart.goodsType) and 'Y'.equals(cart.selfGoodsYn)}">
+							<div class="opt_color">
+								<div class="opt_header">
+									<span class="title">컬러</span>
+									<th:block th:each="color, index : ${comp.cartColorList}">
+										<th:block th:if="${color.cartColorNm != null}">
+											<span class="color" th:text="${color.cartColorNm}"></span>
+										</th:block>
+									</th:block>
+								</div>
+								<ul>
+									<li th:each="color, index : ${comp.cartColorList}" class="selfGoodsColor">
+										<a href="" th:cartDtlSq="${color.cartDtlSq}" th:classappend="${color.cartColorNm != null} ? 'on'" class="selfGoodsColorSelect" th:data="${color.optCd1}">
+											<img th:src="${cart.imgPath + '/' + color.sysImgNm}" src="#" th:alt="${color.colorNm}" alt="" />
+										</a>
+									</li>
+								</ul>
+							</div>
+							<div class="opt_size">
+								<div class="opt_header">
+									<span class="title">사이즈</span>
+								</div>
+								<div class="form_field selfGoodsSize">
+									<th:block th:each="color, index : ${comp.cartColorList}">
+										<th:block th:if="${color.cartColorNm != null}">
+											<th:block th:each="size, index : ${color.cartSizeList}">
+												<div>
+													<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty > size.currStockQty}">
+													<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
+												</div>
 											</th:block>
 											</th:block>
-										</div>
-										<ul>
-											<li th:each="color, index : ${comp.cartColorList}" class="selfGoodsColor">
-												<a href="" th:cartDtlSq="${color.cartDtlSq}" th:classappend="${color.cartColorNm != null} ? 'on'" class="selfGoodsColorSelect" th:data="${color.optCd1}">
-													<img th:src="${cart.imgPath + '/' + color.sysImgNm}" src="#" th:alt="${color.colorNm}" alt="" />
-												</a>
-											</li>
-										</ul>
-									</div>
+										</th:block>
+									</th:block>
+								</div>
+							</div>
+						</th:block>
 
 
-									<div class="opt_size">
-										<div class="opt_header">
-											<span class="title">사이즈</span>
-										</div>
-										<div class="form_field selfGoodsSize">
-											<th:block th:each="color, index : ${comp.cartColorList}">
-												<th:block th:if="${color.cartColorNm != null}">
-													<th:block th:each="size, index : ${color.cartSizeList}">
-														<div>
-															<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty > size.currStockQty}">
-															<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
-														</div>
-													</th:block>
+						<!-- 입점업체 -->
+						<th:block th:if="${!setType.equals(cart.goodsType) and 'N'.equals(cart.selfGoodsYn)}">
+							<div class="opt_select">
+								<div class="opt_header">
+									<span class="title">옵션1</span>
+									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+										<span class="text" th:text="${color.cartColorNm}"></span>
+									</th:block>
+								</div>
+
+								<!-- 컬러 변경시 만들어줄 size option -->
+								<th:block th:each="color, index : ${comp.cartColorList}">
+									<span style="display:none;">
+										<select th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
+											<th:block th:each="size, i : ${color.cartSizeList}">
+												<th:block th:if="${color.optCd1.equals(size.optCd1)}">
+													<option th:value="${size.optCd}" th:text="${size.optCd2}"></option>
 												</th:block>
 												</th:block>
 											</th:block>
 											</th:block>
-										</div>
-									</div>
+										</select>
+									</span>
 								</th:block>
 								</th:block>
 
 
-								<!-- 입점업체 상품 옵션 -->
-								<th:block th:if="${!setType.equals(cart.goodsType) and !'Y'.equals(cart.selfGoodsYn)}">
-									<div class="opt_select">
-										<div class="opt_header">
-											<span class="title">옵션선택</span>
-										</div>
-										<div class="form_field">
-											<select class="selfGoodsColor">
-												<th:block th:each="color, index : ${comp.cartColorList}">
-												<option th:data="${color.cartDtlSq}" th:value="${color.optCd}" th:text="${color.optCd1 + '/' + color.optCd2}" th:selected="${color.cartOptCd != null}"></option>
+								<form class="form_wrap">
+									<div class="form_field">
+										<div class="select_custom item_opt1 setColorSelect">
+											<div class="combo">
+												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+													<div class="select" th:text="${color.cartColorNm}"></div>
 												</th:block>
 												</th:block>
-											</select>
+												<ul class="list">
+													<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+													<th:block th:each="color, index : ${comp.cartColorList}">
+														<li th:classappend="${color.cartColorNm != null} ? selected" th:text="${color.colorNm}"></li>
+													</th:block>
+													<!--<li class="selected">카키/95</li>
+													<li aria-disabled="true">옐로우/105</li>-->
+												</ul>
+											</div>
 										</div>
 										</div>
 									</div>
 									</div>
-								</th:block>
-							</th:block>
-							<div class="opt_count">
+								</form>
+							</div>
+							<div class="opt_select">
 								<div class="opt_header">
 								<div class="opt_header">
-									<span class="title">수량</span>
-								</div>
-								<div class="number_count">
-									<span class="minus"><span class="sr-only">감소</span></span>
-									<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}" />
-									<!-- <input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="2" /> -->
-									<span class="plus"><span class="sr-only">추가</span></span>
+									<span class="title">옵션2</span>
+									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+										<th:block th:each="size, i : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
+											<span class="text" th:text="${size.optCd2}"></span>
+										</th:block>
+									</th:block>
 								</div>
 								</div>
+								<form class="form_wrap">
+									<div class="form_field">
+										<div class="select_custom item_opt2 setSizeSelect">
+											<div class="combo">
+												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+													<th:block th:each="size, i : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
+														<div class="select" th:classappend="|size_${comp.goodsCd}|" th:text="${size.optCd2}" th:data="${color.goodsCd}"></div>
+													</th:block>
+													<ul class="list">
+														<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
+															<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+															<li th:classappend="${size.cartOptCd != null} ? selected" th:data="${color.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}"></li>
+															<!--<li class="selected">블랙/95</li>
+															<li aria-disabled="true">블랙/105</li>-->
+														</th:block>
+													</ul>
+												</th:block>
+											</div>
+										</div>
+									</div>
+								</form>
 							</div>
 							</div>
-							<div class="btn_group_block">
-								<button class="btn btn_dark btn_block" th:onclick="|fnChangeCartOption(${cart.cartSq})|"><span>옵션변경</span></button>
-							</div>
+						</th:block>
+					</th:block>
+					<div class="opt_count">
+						<div class="opt_header">
+							<span class="title">수량</span>
 						</div>
 						</div>
+						<div class="number_count">
+							<span class="minus"><em class="sr-only">감소</em></span>
+							<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}" />
+							<span class="plus"><em class="sr-only">추가</em></span>
+						</div>
+					</div>
+					<div class="btn_group_block">
+						<button class="btn btn_dark btn_block" th:onclick="|fnChangeCartOption(${cart.cartSq})|"><span>옵션변경</span></button>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
-<!-- //옵션변경 팝업 -->
 
 
+	<script th:inline="javascript">
+		$(document).ready(function() {
+			$(".select_custom").each(function() {
+				new sCombo(this);
+			});
+		});
+
+		// 세트상품 컬러 변경시
+		$(".setColorSelect").on("change", function(e) {
+			let goodsCd = $(this).find("option:checked").attr("data");
+			$(".setOption .size_" + goodsCd).html("");
+			$(".setOption .size_" + goodsCd).html($(".color_" + goodsCd + "_" + $(this).val()).html());
+		});
 
 
-<script th:inline="javascript">
-	// 세트상품 컬러 변경시
-	$(".setColorSelect").on("change", function(e) {
-		let goodsCd = $(this).find("option:checked").attr("data");
-		$(".setOption .size_" + goodsCd).html("");
-		$(".setOption .size_" + goodsCd).html($(".color_" + goodsCd + "_" + $(this).val()).html());
-	});
+		// 자사 일반 상품 컬러 선택시
+		$(".selfGoodsColorSelect").on("click", function(e) {
+			let sizeHtml = "";
+			let imgHtml = "";
+			let cart = [[${cart}]];
+			let color =  [[${cart.cartCompsList[0].cartColorList}]];
+			let optCd1 = $(this).attr("data");
 
 
-	// 자사 일반 상품 컬러 선택시
-	$(".selfGoodsColorSelect").on("click", function(e) {
-		let html = "";
-		let cart = [[${cart}]];
-		let color =  [[${cart.cartCompsList[0].cartColorList}]];
-		let optCd1 = $(this).attr("data");
+			for(let i = 0 ; i < color.length ; i++) {
+				let size = color[i].cartSizeList;
+				for(let j = 0 ; j < size.length ; j++) {
+					if(optCd1 == size[j].optCd1) {
+						sizeHtml += "<div>";
+						sizeHtml += "<input type='radio' name='rdi-optsize' id='" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
+						if(size[j].soldoutYn == "Y" || cart.goodsQty > size[j].currStockQty) {
+							sizeHtml += "disabled = 'disabled'";
+						}
+						sizeHtml += " />\n";
+						sizeHtml += "<label for='" + size[j].goodsCd + "-" + size[j].optCd + "'><span>" + size[j].optCd2 + "</span></label>\n"
+						sizeHtml += "</div>\n";
+					}
+				}
 
 
-		for(let i = 0 ; i < color.length ; i++) {
-			let size = color[i].cartSizeList;
-			for(let j = 0 ; j < size.length ; j++) {
-				if(optCd1 == size[j].optCd1) {
-					html += "<div>";
-					html += "<input type='radio' name='rdi-optsize' id='" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
-					if(size[j].soldoutYn == "Y" || cart.goodsQty > size[j].currStockQty) {
-						html += "disabled = 'disabled'";
+				if(optCd1 == color[i].optCd1) {
+					for (let j = 0; j < color[i].cartImgList.length; j++) {
+						let img = color[i].cartImgList[j];
+						if(optCd1 == img.colorCd) {
+							imgHtml += "<li>\n<span class='thumb'>\n";
+							imgHtml += "<img src='" + cart.imgPath + "/" + img.sysImgNm + "' alt='' />\n";
+							imgHtml += "</span>\n</li>\n";
+						}
 					}
 					}
-					html += " />\n";
-					html += "<label for='" + size[j].goodsCd + "-" + size[j].optCd + "'><span>" + size[j].optCd2 + "</span></label>\n"
-					html += "</div>\n";
 				}
 				}
 			}
 			}
-		}
 
 
-		$(".selfGoodsSize").html(html);
-	});
+			$(".cartOptionModal .pic_list").html(imgHtml);
+			$(".cartOptionModal .selfGoodsSize").html(sizeHtml);
+		});
 
 
-	function fnChangeCartOption(cartSq) {
-		let cart = [[${cart}]];
-		let cartDtlSqArr = [], itemCds = [], optCds = [];
-		let data;
+		function fnChangeCartOption(cartSq) {
+			let cart = [[${cart}]];
+			var cartDtlSqArr = [], itemCds = [], optCds = [];
+			var data;
 
 
-		if(cart.goodsType == "G056_S") {
-			$(".setSizeSelect").each(function() {
-				optCds.push($(this).val());
-				itemCds.push($(this).attr("data"));
-				cartDtlSqArr.push($(this).find("option:checked").attr("data"));
-			});
+			if(cart.goodsType == "G056_S") {
+				$(".setSizeSelect").each(function() {
+					$(this).find("ul.list > li").each(function() {
+						if($(this).hasClass("selected")) {
+							optCds.push($(this).attr("optCd"));
+							cartDtlSqArr.push($(this).attr("data"));
+						}
+					});
+					itemCds.push($(this).find("div.select").attr("data"));
+				});
 
 
-			data = {
-				  cartSq : cart.cartSq
-				, goodsCd : cart.goodsCd
-				, goodsType : cart.goodsType
-				, cartDtlSqArr : cartDtlSqArr
-				, itemCds : itemCds
-				, optCds : optCds
-				, goodsQty : $("input[name=goodsQty]").val()
-			}
-		} else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
-			optCds.push($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val());
-			itemCds.push(cart.goodsCd);
-			$(".selfGoodsColorSelect").each(function() {
-				if($(this).attr("cartDtlSq") > 0) {
-					cartDtlSqArr.push($(this).attr("cartDtlSq"));
+				data = {
+					  cartSq : cart.cartSq
+					, goodsCd : cart.goodsCd
+					, goodsType : cart.goodsType
+					, cartDtlSqArr : cartDtlSqArr
+					, itemCds : itemCds
+					, optCds : optCds
+					, goodsQty : $("input[name=goodsQty]").val()
 				}
 				}
-			});
+			} else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
+				optCds.push($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val());
+				itemCds.push(cart.goodsCd);
+				$(".selfGoodsColorSelect").each(function() {
+					if($(this).attr("cartDtlSq") > 0) {
+						cartDtlSqArr.push($(this).attr("cartDtlSq"));
+					}
+				});
 
 
-			data = {
-				  cartSq : cart.cartSq
-				, goodsCd : cart.goodsCd
-				, goodsType : cart.goodsType
-				, cartDtlSqArr : cartDtlSqArr
-				, itemCds : itemCds
-				, optCds : optCds
-				, goodsQty : $("input[name=goodsQty]").val()
-			}
-		} else {
-			optCds.push($(".selfGoodsColor").val());
-			itemCds.push(cart.goodsCd);
-			$(".selfGoodsColor option").each(function() {
-				if($(this).attr("data") > 0) {
-					cartDtlSqArr.push($(this).attr("data"));
+				data = {
+					  cartSq : cart.cartSq
+					, goodsCd : cart.goodsCd
+					, goodsType : cart.goodsType
+					, cartDtlSqArr : cartDtlSqArr
+					, itemCds : itemCds
+					, optCds : optCds
+					, goodsQty : $("input[name=goodsQty]").val()
 				}
 				}
-			});
-
-			data = {
-				cartSq : cart.cartSq
-				, goodsCd : cart.goodsCd
-				, goodsType : cart.goodsType
-				, cartDtlSqArr : cartDtlSqArr
-				, itemCds : itemCds
-				, optCds : optCds
-				, goodsQty : $("input[name=goodsQty]").val()
-			}
-		}
+			} else {
+				// optCds.push($(".selfGoodsColor").val());
+				itemCds.push(cart.goodsCd);
+				$(".setSizeSelect .selected").each(function() {
+					if($(this).attr("data") > 0) {
+						cartDtlSqArr.push($(this).attr("data"));
+						optCds.push($(this).attr("optCd"));
+					}
+				});
 
 
-		$.ajax( {
-			type: "POST",
-			url : '/cart/change/option',
-			contentType: 'application/json',
-			dataType : 'json',
-			data : JSON.stringify(data),
-			success : function(result) {
-				alert(result.message);
-				$(".closeCartOptionModal").trigger("click");
-				getCartList();
+				data = {
+					cartSq : cart.cartSq
+					, goodsCd : cart.goodsCd
+					, goodsType : cart.goodsType
+					, cartDtlSqArr : cartDtlSqArr
+					, itemCds : itemCds
+					, optCds : optCds
+					, goodsQty : $("input[name=goodsQty]").val()
+				}
 			}
 			}
-		});
-	}
-</script>
 
 
+			$.ajax( {
+				type: "POST",
+				url : '/cart/change/option',
+				contentType: 'application/json',
+				dataType : 'json',
+				data : JSON.stringify(data),
+				error : function(e) {
+					alert(e.message);
+				},
+				success : function(result) {
+					mcxDialog.alert(result.message);
+					$(".closeCartOptionModal").trigger("click");
+					let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
+					getCartList(data);
+				}
+			});
+		}
+	</script>
+	<a href="#close-modal" rel="modal:close" id="optModifyPop_close" class="close-modal closeCartOptionModal">Close</a>
 </div>
 </div>
-<a href="#close-modal" rel="modal:close" class="close-modal closeCartOptionModal">Close</a>
+<!-- //옵션변경 팝업 -->
 </html>
 </html>

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

@@ -65,7 +65,7 @@
 											</select>
 											</select>
 										</div>
 										</div>
 										<div class="form_field">
 										<div class="form_field">
-											<th:block th:each="color, index : ${comp.cartColorList}">
+											<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
 											<select th:data="${color.goodsCd}" th:class="|size_${comp.goodsCd} setSizeSelect|">
 											<select th:data="${color.goodsCd}" th:class="|size_${comp.goodsCd} setSizeSelect|">
 												<th:block th:each="size, i : ${color.cartSizeList}">
 												<th:block th:each="size, i : ${color.cartSizeList}">
 													<th:block th:if="${color.optCd1.equals(size.optCd1)}">
 													<th:block th:if="${color.optCd1.equals(size.optCd1)}">

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

@@ -13,1089 +13,1149 @@
  * 1.0  2021.02.02   xodud1202   최초 작성
  * 1.0  2021.02.02   xodud1202   최초 작성
  *******************************************************************************
  *******************************************************************************
  -->
  -->
-<form id="cartListForm" method="post" action="/order/noMember">
-	<!--<input type="hidden" name="cartCpnDcAmt" id="cartCpnDcAmt" th:value="${param.cartCpnDcAmt}" />-->
-
-	<!-- CONT-BODY -->
-	<div class="od_cont">
-		<div class="sec_head">
-			<div class="tbl type4">
-				<table>
-					<colgroup>
-						<col width="170">
-						<col width="*">
-					</colgroup>
-					<tbody>
-					<tr>
-						<th>
-							배송방법 선택
-						</th>
-						<td>
-							<div class="form_field">
-								<div>
-									<input type="radio" name="shotDelvUseYn" id="blt_ship1" value="Y" th:checked="${order.shotCanYn.equals('Y')}">
-									<label for="blt_ship1"><span><em class="tag primary_line">총알배송</em><span th:text="|${order.shotDelvDt}일 24:00 까지 도착|"></span></span></label>
-								</div>
-								<div>
-									<input type="radio" name="shotDelvUseYn" id="blt_ship2" value="N" th:checked="${!order.shotCanYn.equals('Y')}">
-									<label for="blt_ship2"><span>총알 배송 안함</span></label>
+<div id="cartAjaxArea">
+	<form id="cartListForm" method="post" action="/order/noMember">
+		<!--<input type="hidden" name="cartCpnDcAmt" id="cartCpnDcAmt" th:value="${param.cartCpnDcAmt}" />-->
+
+		<!-- CONT-BODY -->
+		<div class="od_cont">
+			<div class="sec_head shotDelvSelect">
+				<div class="tbl type4">
+					<table>
+						<colgroup>
+							<col width="170">
+							<col width="*">
+						</colgroup>
+						<tbody>
+						<tr>
+							<th>
+								배송방법 선택
+							</th>
+							<td>
+								<div class="form_field">
+									<div>
+										<input type="radio" name="shotDelvUseYn" id="blt_ship1" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y')}">
+										<label for="blt_ship1"><span><em class="tag primary_line">총알배송</em><span th:text="|${order.shotDelvDt}일 24:00 까지 도착|"></span></span></label>
+									</div>
+									<div>
+										<input type="radio" name="shotDelvUseYn" id="blt_ship2" value="N" th:checked="${order.shotDelvUseYn != null and !order.shotDelvUseYn.equals('Y')}">
+										<label for="blt_ship2"><span>총알 배송 안함</span></label>
+									</div>
 								</div>
 								</div>
-							</div>
-						</td>
-					</tr>
-					</tbody>
-				</table>
+							</td>
+						</tr>
+						</tbody>
+					</table>
+				</div>
 			</div>
 			</div>
-		</div>
-		<div class="sec_body">
-			<div class="sec_select">
-				<div>
-					<div class="form_field">
-						<input id="od_item_all" type="checkbox"><label for="od_item_all"><span>전체선택</span></label>
+			<div class="sec_body">
+				<div class="sec_select">
+					<div>
+						<div class="form_field">
+							<input id="od_item_all" type="checkbox" checked="checked"><label for="od_item_all"><span>전체선택</span></label>
+						</div>
+						<button type="button" class="btn btn_default btn_sm"><span>선택삭제</span></button>
 					</div>
 					</div>
-					<button type="button" class="btn btn_default btn_sm"><span>선택삭제</span></button>
 				</div>
 				</div>
-			</div>
-			<div class="sec_part" th:if="${shotCartList.size() > 0 or wmsCartList.size() > 0}">
-				<h3 class="subH2">
-					STYLE24 배송
-				</h3>
-				<div class="area_part" th:if="${shotCartList.size() > 0}">
-					<h4 class="subH2">
-						총알배송
-						<span class="tit_info">오늘 자정까지 도착</span>
-					</h4>
-					<div class="part_goods">
-						<div class="goods_cont">
-							<!-- 주문상품 -->
-							<th:block th:each="cart, status : ${shotCartList}">
-								<div class="cartInfo goods_info wmsCartInfo">
-									<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
-									<input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
-									<input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
-									<input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
-									<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
-									<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
-									<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
-									<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
-									<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
-									<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
-
-									<div class="order_desc">
-										<div class="form_box">
-											<div class="form_field">
-												<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}"/>
-												<label th:for="|od_item_${cart.cartSq}|">
-													<span class="sr-only">상품선택</span>
-												</label>
+				<div class="sec_part" th:if="${order.shotCartList.size() > 0 or order.wmsCartList.size() > 0}">
+					<h3 class="subH2">
+						STYLE24 배송
+					</h3>
+					<div class="area_part shotList" th:if="${order.shotCartList != null and order.shotCartList.size() > 0}">
+						<h4 class="subH2">
+							총알배송
+							<span class="tit_info">오늘 자정까지 도착</span>
+						</h4>
+						<div class="part_goods">
+							<div class="goods_cont">
+								<!-- 주문상품 -->
+								<th:block th:each="cart, status : ${order.shotCartList}">
+									<div class="cartInfo goods_info shotCartInfo">
+										<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
+										<input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
+										<input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
+										<input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
+										<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
+										<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
+										<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
+										<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
+										<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
+										<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
+
+										<div class="order_desc">
+											<div class="form_box">
+												<div class="form_field">
+													<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}"/>
+													<label th:for="|od_item_${cart.cartSq}|">
+														<span class="sr-only">상품선택</span>
+													</label>
+												</div>
 											</div>
 											</div>
-										</div>
-										<div class="goods_box">
-											<div class="gd_item">
-												<a href="">
-													<span class="thumb">
-														<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt="">
-													</span>
-													<p>
-														<span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
-													</p>
+											<div class="goods_box">
+												<div class="gd_item">
+													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+														<span class="thumb">
+															<img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt="">
+														</span>
+														<p>
+															<span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
+														</p>
+														<p>
+															<span class="name" th:text="${cart.goodsNm}"></span>
+														</p>
+													</a>
+												</div>
+												<div class="gd_opt">
+													<div class="option_wrap">
+														<span class="title sr-only">주문 옵션</span>
+														<th:block th:each="opt, index : ${cart.itemNmArr}">
+															<th:block th:if="${cart.goodsType.equals('G056_S')}">
+																<span class="option" th:text="${cart.itemNmArr[index.index]} + ' / ' + ${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+															</th:block>
+															<th:block th:if="${!cart.goodsType.equals('G056_S')}">
+																<span class="option" th:text="${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+															</th:block>
+														</th:block>
+													</div>
+												</div>
+												<div class="gd_calc">
 													<p>
 													<p>
-														<span class="name" th:text="${cart.goodsNm}"></span>
+														<span class="count">수량&nbsp;<em th:text="${cart.goodsQty}"></em>개</span>
 													</p>
 													</p>
-												</a>
-											</div>
-											<div class="gd_opt">
-												<div class="option_wrap">
-													<span class="title sr-only">주문 옵션</span>
-													<th:block th:each="opt, index : ${cart.itemNmArr}">
-														<th:block th:if="${cart.goodsType.equals('G056_S')}">
-															<span class="option" th:text="${cart.itemNmArr[index.index]} + ' / ' + ${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
-														</th:block>
-														<th:block th:if="${!cart.goodsType.equals('G056_S')}">
-															<span class="option" th:text="${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
-														</th:block>
-													</th:block>
+												</div>
+												<div class="gd_exinfo">
+													<p th:if="${!#strings.isEmpty(cart.delvResDt)}"><span class="tag primary_line">총알배송</span><span th:text="|${cart.delvResDt} 배송예정|"></span></p>
+													<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+													<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+													<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
 												</div>
 												</div>
 											</div>
 											</div>
-											<div class="gd_calc">
+											<div class="calc_box">
+												<th:block  th:if="${cart.tmtbDcAmt < cart.currPrice}">
+													<p><span class="price_org"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
+													<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.tmtbDcAmt, 1, 'COMMA')}"></em>원</span></p>
+												</th:block>
+												<th:block th:if="${cart.tmtbDcAmt == cart.currPrice}">
+													<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
+												</th:block>
 												<p>
 												<p>
-													<span class="count">수량&nbsp;<em th:text="${cart.goodsQty}"></em>개</span>
+													<span class="point">
+														<em th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정
+													</span>
 												</p>
 												</p>
 											</div>
 											</div>
-											<div class="gd_exinfo">
-												<p th:if="${!#strings.isEmpty(cart.delvResDt)}"><span class="tag primary_line">총알배송</span><span th:text="|${cart.delvResDt} 배송예정|"></span></p>
-												<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y'}"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-												<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-												<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-												<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-												<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
-											</div>
-										</div>
-										<div class="calc_box">
-											<th:block  th:if="${cart.tmtbDcAmt < cart.currPrice}">
-												<p><span class="price_org"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
-												<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.tmtbDcAmt, 1, 'COMMA')}"></em>원</span></p>
-											</th:block>
-											<th:block th:if="${cart.tmtbDcAmt == cart.currPrice}">
-												<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
-											</th:block>
-											<p>
-												<span class="point">
-													<em th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정
-												</span>
-											</p>
-										</div>
-										<div class="button_box">
-											<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
-											<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
-
-											<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|"><span>옵션 / 수량 변경</span></button></p>
-											<div class="util">
-												<span>
-													<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}">
-														<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
-													</button>
-												</span>
-												<span>
-													<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|">
-														<span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span>
-													</button>
-												</span>
+											<div class="button_box">
+												<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
+												<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
+
+												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|"><span>옵션 / 수량 변경</span></button></p>
+												<div class="util">
+													<span>
+														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}">
+															<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
+														</button>
+													</span>
+													<span>
+														<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|">
+															<span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span>
+														</button>
+													</span>
+												</div>
 											</div>
 											</div>
 										</div>
 										</div>
 									</div>
 									</div>
-								</div>
-							</th:block>
-							<!-- //주문상품 -->
+								</th:block>
+								<!-- //주문상품 -->
+							</div>
 						</div>
 						</div>
 					</div>
 					</div>
-				</div>
-				<div class="area_part" th:if="${wmsCartList.size() > 0}">
-					<h4 class="subH2">
-						일반배송
-					</h4>
-					<div class="part_goods">
-						<div class="goods_cont">
-							<!-- 주문상품 -->
-							<th:block th:each="cart, status : ${wmsCartList}">
-								<div class="goods_info goods_info wmsCartInfo">
-									<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
-									<input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
-									<input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
-									<input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
-									<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
-									<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
-									<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
-									<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
-									<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
-									<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
-
-									<div class="order_desc">
-										<div class="form_box">
-											<div class="form_field">
-												<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}">
-												<label th:for="|od_item_${cart.cartSq}|">
-													<span class="sr-only">상품선택</span>
-												</label>
-											</div>
-										</div>
-										<div class="goods_box">
-											<div class="gd_item">
-												<a href="">
-													<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt=""></span>
-													<p><span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span></p>
-													<p><span class="name" th:text="${cart.goodsNm}"></span></p>
-												</a>
+					<div class="area_part wmsList" th:if="${order.wmsCartList != null and order.wmsCartList.size() > 0}">
+						<h4 class="subH2">
+							일반배송
+						</h4>
+						<div class="part_goods">
+							<div class="goods_cont">
+								<!-- 주문상품 -->
+								<th:block th:each="cart, status : ${order.wmsCartList}">
+									<div class="cartInfo goods_info wmsCartInfo">
+										<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
+										<input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
+										<input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
+										<input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
+										<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
+										<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
+										<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
+										<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
+										<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
+										<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
+
+										<div class="order_desc">
+											<div class="form_box">
+												<div class="form_field">
+													<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}">
+													<label th:for="|od_item_${cart.cartSq}|">
+														<span class="sr-only">상품선택</span>
+													</label>
+												</div>
 											</div>
 											</div>
-											<div class="gd_opt">
-												<div class="option_wrap">
-													<span class="title sr-only">주문 옵션</span>
-													<th:block th:each="opt, index : ${cart.itemNmArr}">
-														<th:block th:if="${cart.goodsType.equals('G056_S')}">
-															<span class="option" th:text="${cart.itemNmArr[index.index]} + ' / ' + ${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
-														</th:block>
-														<th:block th:if="${!cart.goodsType.equals('G056_S')}">
-															<span class="option" th:text="${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+											<div class="goods_box">
+												<div class="gd_item">
+													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+														<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt=""></span>
+														<p><span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span></p>
+														<p><span class="name" th:text="${cart.goodsNm}"></span></p>
+													</a>
+												</div>
+												<div class="gd_opt">
+													<div class="option_wrap">
+														<span class="title sr-only">주문 옵션</span>
+														<th:block th:each="opt, index : ${cart.itemNmArr}">
+															<th:block th:if="${cart.goodsType.equals('G056_S')}">
+																<span class="option" th:text="${cart.itemNmArr[index.index]} + ' / ' + ${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+															</th:block>
+															<th:block th:if="${!cart.goodsType.equals('G056_S')}">
+																<span class="option" th:text="${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+															</th:block>
 														</th:block>
 														</th:block>
-													</th:block>
+													</div>
+												</div>
+												<div class="gd_calc">
+													<p><span class="count">수량&nbsp;<em th:text="${cart.goodsQty}"></em>개</span></p>
 												</div>
 												</div>
-											</div>
-											<div class="gd_calc">
-												<p><span class="count">수량&nbsp;<em th:text="${cart.goodsQty}"></em>개</span></p>
-											</div>
-											<div class="gd_exinfo">
 												<div class="gd_exinfo">
 												<div class="gd_exinfo">
-													<p th:if="${!#strings.isEmpty(cart.delvResDt)}" th:text="|${cart.delvResDt} 배송예정|"></p>
-													<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y'}"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-													<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-													<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
+													<div class="gd_exinfo">
+														<p th:if="${!#strings.isEmpty(cart.delvResDt)}" th:text="|${cart.delvResDt} 배송예정|"></p>
+														<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+														<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+														<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+														<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+														<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
+													</div>
 												</div>
 												</div>
 											</div>
 											</div>
-										</div>
-										<div class="calc_box">
-											<th:block  th:if="${cart.tmtbDcAmt < cart.currPrice}">
-												<p><span class="price_org"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
-												<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.tmtbDcAmt, 1, 'COMMA')}"></em>원</span></p>
-											</th:block>
-											<th:block th:if="${cart.tmtbDcAmt == cart.currPrice}">
-												<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
-											</th:block>
-											<p>
-												<span class="point">
-													<em th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정
-												</span>
-											</p>
-										</div>
-										<div class="button_box">
-											<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
-											<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
-
-											<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|"><span>옵션 / 수량 변경</span></button></p>
-											<div class="util">
-												<span>
-													<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}">
-														<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
-													</button>
-												</span>
-												<span>
-													<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|">
-														<span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span>
-													</button>
-												</span>
+											<div class="calc_box">
+												<th:block  th:if="${cart.tmtbDcAmt < cart.currPrice}">
+													<p><span class="price_org"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
+													<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.tmtbDcAmt, 1, 'COMMA')}"></em>원</span></p>
+												</th:block>
+												<th:block th:if="${cart.tmtbDcAmt == cart.currPrice}">
+													<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
+												</th:block>
+												<p>
+													<span class="point">
+														<em th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정
+													</span>
+												</p>
+											</div>
+											<div class="button_box">
+												<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
+												<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
+
+												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|"><span>옵션 / 수량 변경</span></button></p>
+												<div class="util">
+													<span>
+														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}">
+															<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
+														</button>
+													</span>
+													<span>
+														<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|">
+															<span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span>
+														</button>
+													</span>
+												</div>
 											</div>
 											</div>
 										</div>
 										</div>
 									</div>
 									</div>
-								</div>
-							</th:block>
-							<!-- //주문상품 -->
+								</th:block>
+								<!-- //주문상품 -->
+							</div>
 						</div>
 						</div>
 					</div>
 					</div>
-				</div>
 
 
-				<!-- 자사 배송비 -->
-				<div class="goods_foot" style="margin-top:40px;">
-					<div class="order_delivery" th:classappend="|delv_${order.cartDelvFeeCd}|">
-						<span class="dlvr_fee" th:if="${order.wmsDelvFee == 0}">배송비 무료</span>
-						<span class="dlvr_fee" th:if="${order.wmsDelvFee > 0}">배송비&nbsp;<em th:text="|배송비 ${#numbers.formatInteger(order.wmsDelvFee, 1, 'COMMA')}|"></em>원</span>
-						<a href="#" class="btn_popup_save" th:if="${order.wmsDelvFee > 0}">배송비 SAVE 상품 보기</a>
+					<!-- 자사 배송비 -->
+					<div class="goods_foot" style="margin-top:40px;">
+						<div class="order_delivery selfGoodsDelv" th:classappend="|delv_${order.cartDelvFeeCd}|">
+							<span class="dlvr_fee" th:if="${order.wmsDelvFee == 0}">배송비 무료</span>
+							<span class="dlvr_fee" th:if="${order.wmsDelvFee > 0}">배송비&nbsp;<em th:text="${#numbers.formatInteger(order.wmsDelvFee, 1, 'COMMA')}"></em>원</span>
+							<a href="#" class="btn_popup_save" th:if="${order.wmsDelvFee > 0}">배송비 SAVE 상품 보기</a>
+						</div>
 					</div>
 					</div>
 				</div>
 				</div>
-			</div>
 
 
 
 
-			<div class="sec_part" th:if="${delvCartList != null and delvCartList.size() > 0}">
-				<h3 class="subH2">업체직배송</h3>
-				<div class="area_part">
-					<th:block th:each="cart, status : ${delvCartList}">
-						<div class="part_goods">
-							<div class="goods_cont">
-								<!-- 주문상품 -->
-								<div class="goods_info cartInfo delvCartInfo">
-									<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
-									<input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
-									<input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
-									<input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
-									<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
-									<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
-									<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
-									<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
-									<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
-									<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
-
-									<div class="order_desc">
-										<div class="form_box">
-											<div class="form_field">
-												<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}">
-												<label th:for="|od_item_${cart.cartSq}|">
-													<span class="sr-only">상품선택</span>
-												</label>
-											</div>
-										</div>
-										<div class="goods_box">
-											<div class="gd_item">
-												<a href="">
-													<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt=""></span>
-													<p><span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span></p>
-													<p><span class="name" th:text="${cart.goodsNm}"></span></p>
-												</a>
+				<div class="sec_part delvList" th:if="${order.delvCartList != null and order.delvCartList.size() > 0}">
+					<h3 class="subH2">업체직배송</h3>
+					<div class="area_part">
+						<th:block th:each="cart, status : ${order.delvCartList}">
+							<div class="part_goods">
+								<div class="goods_cont">
+									<!-- 주문상품 -->
+									<div class="cartInfo goods_info delvCartInfo">
+										<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
+										<input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
+										<input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
+										<input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
+										<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
+										<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
+										<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
+										<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
+										<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
+										<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
+
+										<div class="order_desc">
+											<div class="form_box">
+												<div class="form_field">
+													<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}">
+													<label th:for="|od_item_${cart.cartSq}|">
+														<span class="sr-only">상품선택</span>
+													</label>
+												</div>
 											</div>
 											</div>
-											<div class="gd_opt">
-												<div class="option_wrap">
-													<span class="title sr-only">주문 옵션</span>
-													<th:block th:each="opt, index : ${cart.itemNmArr}">
-														<th:block th:if="${cart.goodsType.equals('G056_S')}">
-															<span class="option" th:text="${cart.itemNmArr[index.index]} + ' / ' + ${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
-														</th:block>
-														<th:block th:if="${!cart.goodsType.equals('G056_S')}">
-															<span class="option" th:text="${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+											<div class="goods_box">
+												<div class="gd_item">
+													<a th:href="|javascript:fnGoToGoodsDetail('${cart.goodsCd}')|">
+														<span class="thumb"><img th:src="${IMG_PATH} + '/' + ${cart.sysImgNm}" src="/" width="100%" alt=""></span>
+														<p><span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span></p>
+														<p><span class="name" th:text="${cart.goodsNm}"></span></p>
+													</a>
+												</div>
+												<div class="gd_opt">
+													<div class="option_wrap">
+														<span class="title sr-only">주문 옵션</span>
+														<th:block th:each="opt, index : ${cart.itemNmArr}">
+															<th:block th:if="${cart.goodsType.equals('G056_S')}">
+																<span class="option" th:text="${cart.itemNmArr[index.index]} + ' / ' + ${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+															</th:block>
+															<th:block th:if="${!cart.goodsType.equals('G056_S')}">
+																<span class="option" th:text="${cart.colorNmArr[index.index]} + ' / ' + ${cart.optCd2Arr[index.index]}"></span>
+															</th:block>
 														</th:block>
 														</th:block>
-													</th:block>
+													</div>
+												</div>
+												<div class="gd_calc">
+													<p><span class="count">수량&nbsp;<em th:text="${cart.goodsQty}"></em>개</span></p>
+												</div>
+												<div class="gd_exinfo">
+													<p th:if="${!#strings.isEmpty(cart.delvResDt)}" th:text="|${cart.delvResDt} 배송예정|"></p>
+													<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+													<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
+													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
+													<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
 												</div>
 												</div>
 											</div>
 											</div>
-											<div class="gd_calc">
-												<p><span class="count">수량&nbsp;<em th:text="${cart.goodsQty}"></em>개</span></p>
-											</div>
-											<div class="gd_exinfo">
-												<p th:if="${!#strings.isEmpty(cart.delvResDt)}" th:text="|${cart.delvResDt} 배송예정|"></p>
-												<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y'}"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-												<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
-												<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-												<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-												<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
+											<div class="calc_box">
+												<th:block  th:if="${cart.tmtbDcAmt < cart.currPrice}">
+													<p><span class="price_org"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
+													<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.tmtbDcAmt, 1, 'COMMA')}"></em>원</span></p>
+												</th:block>
+												<th:block th:if="${cart.tmtbDcAmt == cart.currPrice}">
+													<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
+												</th:block>
+												<p>
+													<span class="point">
+														<em th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정
+													</span>
+												</p>
 											</div>
 											</div>
-										</div>
-										<div class="calc_box">
-											<th:block  th:if="${cart.tmtbDcAmt < cart.currPrice}">
-												<p><span class="price_org"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
-												<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.tmtbDcAmt, 1, 'COMMA')}"></em>원</span></p>
-											</th:block>
-											<th:block th:if="${cart.tmtbDcAmt == cart.currPrice}">
-												<p><span class="price_sale"><em th:text="${#numbers.formatInteger(cart.currPrice, 1, 'COMMA')}"></em>원</span></p>
-											</th:block>
-											<p>
-												<span class="point">
-													<em th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정
-												</span>
-											</p>
-										</div>
-										<div class="button_box">
-											<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
-											<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
-
-											<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|"><span>옵션 / 수량 변경</span></button></p>
-											<div class="util">
-												<span>
-													<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}">
-														<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
-													</button>
-												</span>
-												<span>
-													<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|">
-														<span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span>
-													</button>
-												</span>
+											<div class="button_box">
+												<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
+												<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
+
+												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|"><span>옵션 / 수량 변경</span></button></p>
+												<div class="util">
+													<span>
+														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}">
+															<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
+														</button>
+													</span>
+													<span>
+														<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|">
+															<span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span>
+														</button>
+													</span>
+												</div>
 											</div>
 											</div>
 										</div>
 										</div>
 									</div>
 									</div>
+									<!-- //주문상품 -->
 								</div>
 								</div>
-								<!-- //주문상품 -->
-							</div>
 
 
-							<!-- 입점업체 배송비 -->
-							<div class="goods_foot" th:if="${'Y'.equals(cart.addDelvFeeYn)}">
-							<!-- <div class="goods_foot" th:if="${cart.compCnt == status.index + 1}"> -->
-								<div class="order_delivery" th:classappend="|delv_${cart.delvFeeCd}|">
-									<span class="dlvr_fee" th:if="${cart.delvFee == 0}">배송비 무료</span>
-									<span class="dlvr_fee" th:if="${cart.delvFee > 0}">배송비&nbsp;<em th:text="${#numbers.formatInteger(cart.delvFee, 1, 'COMMA')}"></em>원</span>
-									<span class="dlvr_shop"><em th:text="${cart.supplyCompNm}"></em>&nbsp;업체직배송</span>
-									<a href="#" class="btn_popup_save" th:if="${cart.delvFee > 0}">배송비 SAVE 상품 보기</a>
+								<!-- 입점업체 배송비 -->
+								<div class="goods_foot" th:if="${'Y'.equals(cart.addDelvFeeYn)}">
+								<!-- <div class="goods_foot" th:if="${cart.compCnt == status.index + 1}"> -->
+									<div class="order_delivery" th:classappend="|delv_${cart.delvFeeCd}|">
+										<span class="dlvr_fee" th:if="${cart.delvFee == 0}">배송비 무료</span>
+										<span class="dlvr_fee" th:if="${cart.delvFee > 0}">배송비&nbsp;<em th:text="${#numbers.formatInteger(cart.delvFee, 1, 'COMMA')}"></em>원</span>
+										<span class="dlvr_shop"><em th:text="${cart.supplyCompNm}"></em>&nbsp;업체직배송</span>
+										<a href="#" class="btn_popup_save" th:if="${cart.delvFee > 0}">배송비 SAVE 상품 보기</a>
+									</div>
 								</div>
 								</div>
 							</div>
 							</div>
-						</div>
-					</th:block>
+						</th:block>
+					</div>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
-	</div>
-	<div class="od_side">
-		<div class="area_order">
-			<div class="tit_box">
-				<h3>결제 정보</h3>
-				<span><em class="number" th:text="${order.totCartCnt}"></em>개의 상품</span>
+		<div class="od_side">
+			<div class="area_order">
+				<div class="tit_box">
+					<h3>결제 정보</h3>
+					<span><em class="number" th:text="${order.totCartCnt}"></em>개의 상품</span>
+				</div>
+				<div class="od_amount_box">
+					<dl>
+						<div>
+							<dt>상품금액</dt>
+							<dd><em class="sumCurrPrice" th:text="${#numbers.formatInteger(order.sumOrdAmt, 1, 'COMMA')}"></em>원</dd>
+						</div>
+						<div>
+							<dt>배송비</dt>
+							<dd><em class="totDelvFee" th:text="${#numbers.formatInteger(order.totDelvFee, 1, 'COMMA')}"></em> 원</dd>
+						</div>
+						<div>
+							<dt>할인금액</dt>
+							<dd><span class="disc_amount"><em class="totDcAmt" id="totDcAmt" th:text="${#numbers.formatInteger(order.totDcAmt, 1, 'COMMA')}"></em> 원</span></dd>
+						</div>
+					</dl>
+				</div>
+				<div class="totalprice_box">
+					<dl>
+						<dt>총 결제 예정 금액</dt>
+						<dd><span class="sumRealPayAmt" id="sumRealPayAmt" th:text="${#numbers.formatInteger(order.sumRealPayAmt + order.totDelvFee, 1, 'COMMA')}"></span> 원</dd>
+					</dl>
+				</div>
+				<div class="btn_box">
+					<button class="btn btn_primary btn_block btn_md" onclick="fnSubmitNoMember('all')"><span>구매하기</span></button>
+				</div>
 			</div>
 			</div>
-			<div class="od_amount_box">
-				<dl>
-					<div>
-						<dt>상품금액</dt>
-						<dd><em class="sumCurrPrice" th:text="${#numbers.formatInteger(order.sumOrdAmt, 1, 'COMMA')}"></em>원</dd>
+			<div class="area_salecoupon">
+				<h4>할인코드 입력</h4>
+				<div class="form_field">
+					<div class="input_wrap form_full">
+						<label class="input_label sr-only">할인코드입력</label>
+						<input type="text" id="serialCpnNm" class="form_control" placeholder="할인코드를 입력해주세요.">
 					</div>
 					</div>
-					<div>
-						<dt>배송비</dt>
-						<dd><em class="totDelvFee" th:text="${#numbers.formatInteger(order.totDelvFee, 1, 'COMMA')}"></em> 원</dd>
-					</div>
-					<div>
-						<dt>할인금액</dt>
-						<dd><span class="disc_amount"><em class="totDcAmt" id="totDcAmt" th:text="${#numbers.formatInteger(order.totDcAmt, 1, 'COMMA')}"></em> 원</span></dd>
-					</div>
-				</dl>
-			</div>
-			<div class="totalprice_box">
-				<dl>
-					<dt>총 결제 예정 금액</dt>
-					<dd><span class="sumRealPayAmt" id="sumRealPayAmt" th:text="${#numbers.formatInteger(order.sumRealPayAmt + order.totDelvFee, 1, 'COMMA')}"></span> 원</dd>
-				</dl>
-			</div>
-			<div class="btn_box">
-				<button class="btn btn_primary btn_block btn_md" onclick="fnSubmitNoMember('all')"><span>구매하기</span></button>
-			</div>
-		</div>
-		<div class="area_salecoupon">
-			<h4>할인코드 입력</h4>
-			<div class="form_field">
-				<div class="input_wrap form_full">
-					<label class="input_label sr-only">할인코드입력</label>
-					<input type="text" id="serialCpnNm" class="form_control" placeholder="할인코드를 입력해주세요.">
+					<button type="button" class="btn btn_dark btn_sm" onclick="serialCpnApply()"><span>적용</span></button>
 				</div>
 				</div>
-				<button type="button" class="btn btn_dark btn_sm" onclick="serialCpnApply()"><span>적용</span></button>
-			</div>
-			<div class="coupon_box">
-				<div class="coupon">
-					<div>
-						<p class="cp_name">
-							TBJ 시즌오프 20% 할인쿠폰
-						</p>
-						<p class="cp_cont">
-							<!--<span><em>12,399,900</em>원</span>
-							<span><em>40</em>%</span>-->
-							<span class="cp_dc_val"></span>
-						</p>
-						<p class="cp_condition">
-							<!--500,000원 이상 구매 시 최대 50,000원 할인
-							<span><em class="tag primary_line">99장 보유</em></span>-->
+				<div class="coupon_box">
+					<div class="coupon">
+						<div>
+							<p class="cp_name">
+								TBJ 시즌오프 20% 할인쿠폰
+							</p>
+							<p class="cp_cont">
+								<!--<span><em>12,399,900</em>원</span>
+								<span><em>40</em>%</span>-->
+								<span class="cp_dc_val"></span>
+							</p>
+							<p class="cp_condition">
+								<!--500,000원 이상 구매 시 최대 50,000원 할인
+								<span><em class="tag primary_line">99장 보유</em></span>-->
+							</p>
+						</div>
+						<p class="cp_date">
+							<span>2021.01.01</span>&nbsp;~&nbsp;<span>2021.12.30</span>
 						</p>
 						</p>
 					</div>
 					</div>
-					<p class="cp_date">
-						<span>2021.01.01</span>&nbsp;~&nbsp;<span>2021.12.30</span>
-					</p>
+					<button type="button" class="btn_underline" id="btn_couponInfo_pop">
+						<span>사용안내</span>
+					</button>
 				</div>
 				</div>
-				<button type="button" class="btn_underline" id="btn_couponInfo_pop">
-					<span>사용안내</span>
-				</button>
 			</div>
 			</div>
 		</div>
 		</div>
-	</div>
-	<div class="clear"></div>
-	<!-- // CONT-BODY -->
-</form>
-
-<!-- 옵션변경 팝업 -->
-<div class="modal fade od_pop opt_modify_pop" id="optModifyPop" tabindex="-1" role="dialog" aria-labelledby="optModifyLabel" aria-hidden="true"></div>
-<!-- //옵션변경 팝업 -->
-
-<!-- 즉시구매 form -->
-<form id="cartInfoForm" method="post" action="/order/noMember"></form>
-
-<script th:inline="javascript">
-	let sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
-	let totDcAmt = [[${order.totDcAmt}]];
-
-	function NotApplyTmtbCartList() {
-		let tmtbSq = 0;
-		let tmtbNm = "";
-		let goodsList = {
-			brandNm : "",
-			goodsNm : "",
-			currPrice : 0,
-			imgPath : ""
-		}
-	}
-
-	$(document).ready(function() {
-		/*let compsList = [];
-		let temp 			= new Object;
-		temp.goodsCd 		= "AOW13QDM76";
-		temp.optCd 			= "13256848-4";
-		temp.goodsQty 		= 1;
-		temp.goodsType 		= "G056_N";
-		temp.cartGb 		= "C";
-		temp.afLinkCd 		= "afLinkCd";
-		temp.ithrCd 		= "G027_ZZZ";
-		temp.contentsLoc 	= "G028_YYY";
-		temp.planDtlSq 		= "123";
-		compsList.push(temp);
-		cfnAddCart(compsList);*/
-
-		if([[${!order.shotCanYn.equals('Y')}]]) {
-			// $(".shotDelvSelect").hide();
-		}
-
-		$("#cartListForm .area_salecoupon .coupon_box").hide();
-
-		let loginInfo = [[${loginInfo}]];
-		if(!loginInfo || loginInfo.custNo == null || loginInfo.custNo == 0) {
-			$("#cartListForm .area_salecoupon").hide();
+		<div class="clear"></div>
+		<!-- // CONT-BODY -->
+	</form>
+
+	<!-- 옵션변경 팝업 -->
+	<div class="modal fade od_pop opt_modify_pop" id="optModifyPop" tabindex="-1" role="dialog" aria-labelledby="optModifyLabel" aria-hidden="true"></div>
+	<!-- //옵션변경 팝업 -->
+
+	<!-- 즉시구매 form -->
+	<form id="cartInfoForm" method="post" action="/order/noMember"></form>
+
+	<script th:inline="javascript">
+		let sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
+		let totDcAmt = [[${order.totDcAmt}]];
+
+		function NotApplyTmtbCartList() {
+			let tmtbSq = 0;
+			let tmtbNm = "";
+			let goodsList = {
+				brandNm : "",
+				goodsNm : "",
+				currPrice : 0,
+				imgPath : ""
+			}
 		}
 		}
 
 
-		// 다다익선 할인 대상(미적용) 리스트
-		notApplyTmtbAreaList();
-
-		/* 세트상품 장바구니 */
-		/*let compsList = [];
-		let temp = new Object;
-		temp.goodsCd = "STYS00000042";
-		temp.itemCd = "14373746";
-		temp.optCd = "베이지110";
-		temp.goodsQty = 1;
-		temp.goodsType = "G056_S";
-		temp.cartGb = "O";
-		temp.afLinkCd = "afLinkCd";
-		temp.ithrCd = "G027_ZZZ";
-		temp.contentsLoc = "G028_YYY";
-		temp.planDtlSq = "123";
-		compsList.push(temp);
-		temp = new Object;
-		temp.goodsCd = "STYS00000042";
-		temp.itemCd = "14373769";
-		temp.optCd = "블루110";
-		temp.goodsQty = 1;
-		temp.goodsType = "G056_S";
-		temp.cartGb = "O";
-		temp.afLinkCd = "afLinkCd";
-		temp.ithrCd = "G027_ZZZ";
-		temp.contentsLoc = "G028_YYY";
-		temp.planDtlSq = "123";
-		compsList.push(temp);
-		temp = new Object;
-		temp.goodsCd = "STYS00000042";
-		temp.itemCd = "14373770";
-		temp.optCd = "아이보리110";
-		temp.goodsQty = 1;
-		temp.goodsType = "G056_S";
-		temp.cartGb = "O";
-		temp.afLinkCd = "afLinkCd";
-		temp.ithrCd = "G027_ZZZ";
-		temp.contentsLoc = "G028_YYY";
-		temp.planDtlSq = "123";
-		compsList.push(temp);
-
-		cfnAddCart(compsList);*/
-
-		/*let compsList = [];
-		let temp = new Object;
-		temp.goodsCd = "14373686";
-		temp.optCd = "챠콜그레이150";
-		temp.goodsQty = 2;
-		temp.goodsType = "G056_D";
-		temp.dealGoodsCd = "STYD000000025"
-		temp.cartGb = "O";
-		temp.afLinkCd = "afLinkCd";
-		temp.ithrCd = "G027_ZZZ";
-		temp.contentsLoc = "G028_YYY";
-		temp.planDtlSq = "123";
-		compsList.push(temp);
-
-		temp = new Object;
-		temp.goodsCd = "14373710";
-		temp.optCd = "L핑크130";
-		temp.goodsQty = 3;
-		temp.goodsType = "G056_D";
-		temp.dealGoodsCd = "STYD000000025"
-		temp.cartGb = "O";
-		temp.afLinkCd = "afLinkCd";
-		temp.ithrCd = "G027_ZZZ";
-		temp.contentsLoc = "G028_YYY";
-		temp.planDtlSq = "123";
-		compsList.push(temp);
-
-		cfnAddCart(compsList);*/
-	});
-
-	function notApplyTmtbAreaList() {
-		let notApplyQtyTmtbList = new Array();
-		let notApplyAmtTmtbList = new Array();
-
-		// 수량 다다익선 조회
-		$("#cartListForm input[name=qtyTmtbSq]").each(function (index) {
-			if($(this).val() != "0" && $(this).parent().find("input[name=applyQtySectionYn]").val() == "N") {
-				let obj = new Object();
-				obj.tmtbSq = $(this).val();
-				obj.tmtbNm = $(this).parent().find("input[name=qtyTmtbNm]").val();
-				obj.currPrice = $(this).parent().find("input[name=currPrice]").val();
-				obj.goodsNm = $(this).parent().find(".info_box").find(".name").text();
-				obj.brandNm = $(this).parent().find(".info_box").find(".brand").text();
-				obj.imgPath = $(this).parent().find(".info_item").find(".thumb_box img").attr("src");
-
-				notApplyQtyTmtbList.push(obj);
+		$(document).ready(function() {
+			/*let compsList = [];
+			let temp 			= new Object;
+			temp.goodsCd 		= "AOW13QDM76";
+			temp.optCd 			= "13256848-4";
+			temp.goodsQty 		= 1;
+			temp.goodsType 		= "G056_N";
+			temp.cartGb 		= "C";
+			temp.afLinkCd 		= "afLinkCd";
+			temp.ithrCd 		= "G027_ZZZ";
+			temp.contentsLoc 	= "G028_YYY";
+			temp.planDtlSq 		= "123";
+			compsList.push(temp);
+			cfnAddCart(compsList);*/
+
+			if([[${!order.shotCanYn.equals('Y')}]]) {
+				$(".shotDelvSelect").hide();
 			}
 			}
 
 
-			if($(this).parent().find("input[name=applyAmtSectionYn]").val() == "N") {	   // 다다익선 금액은 기본상품만 가져오면됨 (N은 기본상품에 걸려있음)
-				let obj = new Object();
-				obj.tmtbSq = $(this).parent().find("input[name=amtTmtbSq]").val();
-				obj.tmtbNm = $(this).parent().find("input[name=amtTmtbNm]").val();
+			$("#cartListForm .area_salecoupon .coupon_box").hide();
 
 
-				notApplyAmtTmtbList.push(obj);
+			let loginInfo = [[${loginInfo}]];
+			if(!loginInfo || loginInfo.custNo == null || loginInfo.custNo == 0) {
+				$("#cartListForm .area_salecoupon").hide();
 			}
 			}
+
+			// 다다익선 할인 대상(미적용) 리스트
+			notApplyTmtbAreaList();
+
+			/* 세트상품 장바구니 */
+			/*let compsList = [];
+			let temp = new Object;
+			temp.goodsCd = "STYS00000002";
+			temp.itemCd = "CMW1GQJM91";
+			temp.optCd = "10127856-3";
+			temp.goodsQty = 1;
+			temp.goodsType = "G056_S";
+			temp.cartGb = "C";
+			temp.afLinkCd = "afLinkCd";
+			temp.ithrCd = "G027_ZZZ";
+			temp.contentsLoc = "G028_YYY";
+			temp.planDtlSq = "123";
+			compsList.push(temp);
+			temp = new Object;
+			temp.goodsCd = "STYS00000002";
+			temp.itemCd = "CMW0GQTS53";
+			temp.optCd = "10127620-2";
+			temp.goodsQty = 1;
+			temp.goodsType = "G056_S";
+			temp.cartGb = "C";
+			temp.afLinkCd = "afLinkCd";
+			temp.ithrCd = "G027_ZZZ";
+			temp.contentsLoc = "G028_YYY";
+			temp.planDtlSq = "123";
+			compsList.push(temp);
+			temp = new Object;
+			temp.goodsCd = "STYS00000002";
+			temp.itemCd = "CNF1GADN51";
+			temp.optCd = "11873201-4";
+			temp.goodsQty = 1;
+			temp.goodsType = "G056_S";
+			temp.cartGb = "C";
+			temp.afLinkCd = "afLinkCd";
+			temp.ithrCd = "G027_ZZZ";
+			temp.contentsLoc = "G028_YYY";
+			temp.planDtlSq = "123";
+			compsList.push(temp);
+
+			cfnAddCart(compsList);*/
+
+			/*let compsList = [];
+			let temp = new Object;
+			temp.goodsCd = "14373686";
+			temp.optCd = "챠콜그레이150";
+			temp.goodsQty = 2;
+			temp.goodsType = "G056_D";
+			temp.dealGoodsCd = "STYD000000025"
+			temp.cartGb = "O";
+			temp.afLinkCd = "afLinkCd";
+			temp.ithrCd = "G027_ZZZ";
+			temp.contentsLoc = "G028_YYY";
+			temp.planDtlSq = "123";
+			compsList.push(temp);
+
+			temp = new Object;
+			temp.goodsCd = "14373710";
+			temp.optCd = "L핑크130";
+			temp.goodsQty = 3;
+			temp.goodsType = "G056_D";
+			temp.dealGoodsCd = "STYD000000025"
+			temp.cartGb = "O";
+			temp.afLinkCd = "afLinkCd";
+			temp.ithrCd = "G027_ZZZ";
+			temp.contentsLoc = "G028_YYY";
+			temp.planDtlSq = "123";
+			compsList.push(temp);
+
+			cfnAddCart(compsList);*/
 		});
 		});
 
 
-		// 수량 다다익선 정렬
-		var t = new Object();
-		for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
-			for (let j = 0; j < notApplyQtyTmtbList.length - i - 1; j++) {
-				if (notApplyQtyTmtbList[j].tmtbSq > notApplyQtyTmtbList[j + 1].tmtbSq) {
-					t = notApplyQtyTmtbList[j];
-					notApplyQtyTmtbList[j] = notApplyQtyTmtbList[j + 1];
-					notApplyQtyTmtbList[j + 1] = t;
+		function notApplyTmtbAreaList() {
+			/*let notApplyQtyTmtbList = new Array();
+			let notApplyAmtTmtbList = new Array();
+
+			// 수량 다다익선 조회
+			$("#cartListForm input[name=qtyTmtbSq]").each(function (index) {
+				if($(this).val() != "0" && $(this).parent().find("input[name=applyQtySectionYn]").val() == "N") {
+					let obj = new Object();
+					obj.tmtbSq = $(this).val();
+					obj.tmtbNm = $(this).parent().find("input[name=qtyTmtbNm]").val();
+					obj.currPrice = $(this).parent().find("input[name=currPrice]").val();
+					obj.goodsNm = $(this).parent().find(".info_box").find(".name").text();
+					obj.brandNm = $(this).parent().find(".info_box").find(".brand").text();
+					obj.imgPath = $(this).parent().find(".info_item").find(".thumb_box img").attr("src");
+
+					notApplyQtyTmtbList.push(obj);
 				}
 				}
-			}
-		}
 
 
-		fnCreateNotApplyTmtbAreaList(notApplyQtyTmtbList, notApplyAmtTmtbList);
-	}
-
-	function fnCreateNotApplyTmtbAreaList(notApplyQtyTmtbList, notApplyAmtTmtbList) {
-		// 정렬 후 같은 다다익선 상품은 한 배열로 묶음
-		let tmtbQtyList = new Array();
-
-		for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
-			let goods = notApplyQtyTmtbList[i];
-			let tmtbInfo = new Object();
-			let chk = false;
-			for (let j = 0; j < tmtbQtyList.length; j++) {
-				let tmtb = tmtbQtyList[j];
-				if (goods.tmtbSq == tmtb.tmtbSq) {
-					tmtbInfo = tmtbQtyList[j];
-					chk = true;
-				}
-			}
+				if($(this).parent().find("input[name=applyAmtSectionYn]").val() == "N") {	   // 다다익선 금액은 기본상품만 가져오면됨 (N은 기본상품에 걸려있음)
+					let obj = new Object();
+					obj.tmtbSq = $(this).parent().find("input[name=amtTmtbSq]").val();
+					obj.tmtbNm = $(this).parent().find("input[name=amtTmtbNm]").val();
 
 
-			// 현재 상품 정보
-			let goodsInfo = new Object();
-			goodsInfo.brandNm = goods.brandNm;
-			goodsInfo.goodsNm = goods.goodsNm;
-			goodsInfo.imgPath = goods.imgPath;
-			goodsInfo.currPrice = goods.currPrice;
+					notApplyAmtTmtbList.push(obj);
+				}
+			});
 
 
-			// 현재 상품 정보 다다익선 정보에 세팅
-			if (chk) {
-				tmtbInfo.goodsList.push(goodsInfo);
-			} else {
-				let obj = new Object();
-				obj.tmtbSq = goods.tmtbSq;
-				obj.tmtbNm = goods.tmtbNm;
-				obj.goodsList = new Array();
-				obj.goodsList.push(goodsInfo);
-				tmtbQtyList.push(obj);
+			// 수량 다다익선 정렬
+			var t = new Object();
+			for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
+				for (let j = 0; j < notApplyQtyTmtbList.length - i - 1; j++) {
+					if (notApplyQtyTmtbList[j].tmtbSq > notApplyQtyTmtbList[j + 1].tmtbSq) {
+						t = notApplyQtyTmtbList[j];
+						notApplyQtyTmtbList[j] = notApplyQtyTmtbList[j + 1];
+						notApplyQtyTmtbList[j + 1] = t;
+					}
+				}
 			}
 			}
+
+			fnCreateNotApplyTmtbAreaList(notApplyQtyTmtbList, notApplyAmtTmtbList);*/
 		}
 		}
 
 
-		// 수량 다다익선 HTML 작성
-		let tmtbHtml = "";
-		for(let i = 0 ; i < tmtbQtyList.length ; i++) {
-			let tmtb = tmtbQtyList[i];
-			tmtbHtml += '<div class="more_sale qtyNotApplyTmtbList">';
-			for(let j = 0 ; j < tmtb.goodsList.length ; j++) {
-				let goods = tmtb.goodsList[j];
-				tmtbHtml += '<div class="item_gd">\n' +
-					'				<figure>\n' +
-					'					<a href="">\n' +
-					'						<span class="thumb"><img src="';
-				tmtbHtml += goods.imgPath;
-				tmtbHtml += '" alt=""></span>\n' +
-					'					</a>\n' +
-					'					<figcaption>\n' +
-					'						<a href="">\n' +
-					'							<div class="brand">';
-				tmtbHtml += goods.brandNm;
-				tmtbHtml += '</div>\n' +
-					'							<div class="name">';
-				tmtbHtml += goods.goodsNm;
-				tmtbHtml += '</div>\n' +
-					'							<div class="price">\n' +
-					'								<span class="selling_price">';
-				tmtbHtml += Number(goods.currPrice).toLocaleString();
-				tmtbHtml += '</span>\n' +
-					'							</div>\n' +
-					'						</a>\n' +
-					'					</figcaption>\n' +
-					'				</figure>\n' +
-					'			</div>';
+		/*function fnCreateNotApplyTmtbAreaList(notApplyQtyTmtbList, notApplyAmtTmtbList) {
+			// 정렬 후 같은 다다익선 상품은 한 배열로 묶음
+			let tmtbQtyList = new Array();
+
+			for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
+				let goods = notApplyQtyTmtbList[i];
+				let tmtbInfo = new Object();
+				let chk = false;
+				for (let j = 0; j < tmtbQtyList.length; j++) {
+					let tmtb = tmtbQtyList[j];
+					if (goods.tmtbSq == tmtb.tmtbSq) {
+						tmtbInfo = tmtbQtyList[j];
+						chk = true;
+					}
+				}
+
+				// 현재 상품 정보
+				let goodsInfo = new Object();
+				goodsInfo.brandNm = goods.brandNm;
+				goodsInfo.goodsNm = goods.goodsNm;
+				goodsInfo.imgPath = goods.imgPath;
+				goodsInfo.currPrice = goods.currPrice;
+
+				// 현재 상품 정보 다다익선 정보에 세팅
+				if (chk) {
+					tmtbInfo.goodsList.push(goodsInfo);
+				} else {
+					let obj = new Object();
+					obj.tmtbSq = goods.tmtbSq;
+					obj.tmtbNm = goods.tmtbNm;
+					obj.goodsList = new Array();
+					obj.goodsList.push(goodsInfo);
+					tmtbQtyList.push(obj);
+				}
 			}
 			}
 
 
-			tmtbHtml += '<div class="txt">\n' +
-				'				<a href="">\n' +
-				'					<i class="ico ico_saletag"></i>\n' +
-				'					<input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
-				'					<span>\n';
-			tmtbHtml += tmtb.tmtbNm;
-			tmtbHtml += '</span>\n' +
-				'				</a>\n' +
-				'			</div>\n' +
-				'		</div>';
-		}
+			// 수량 다다익선 HTML 작성
+			let tmtbHtml = "";
+			for(let i = 0 ; i < tmtbQtyList.length ; i++) {
+				let tmtb = tmtbQtyList[i];
+				tmtbHtml += '<div class="more_sale qtyNotApplyTmtbList">';
+				for(let j = 0 ; j < tmtb.goodsList.length ; j++) {
+					let goods = tmtb.goodsList[j];
+					tmtbHtml += '<div class="item_gd">\n' +
+						'				<figure>\n' +
+						'					<a href="">\n' +
+						'						<span class="thumb"><img src="';
+					tmtbHtml += goods.imgPath;
+					tmtbHtml += '" alt=""></span>\n' +
+						'					</a>\n' +
+						'					<figcaption>\n' +
+						'						<a href="">\n' +
+						'							<div class="brand">';
+					tmtbHtml += goods.brandNm;
+					tmtbHtml += '</div>\n' +
+						'							<div class="name">';
+					tmtbHtml += goods.goodsNm;
+					tmtbHtml += '</div>\n' +
+						'							<div class="price">\n' +
+						'								<span class="selling_price">';
+					tmtbHtml += Number(goods.currPrice).toLocaleString();
+					tmtbHtml += '</span>\n' +
+						'							</div>\n' +
+						'						</a>\n' +
+						'					</figcaption>\n' +
+						'				</figure>\n' +
+						'			</div>';
+				}
 
 
-		// 금액 다다익선 정보 HTML 작성
-		for(let i = 0 ; i < notApplyAmtTmtbList.length ; i++) {
-			if (notApplyAmtTmtbList[i].tmtbSq != 0) {
-				let tmtb = notApplyAmtTmtbList[i];
-				tmtbHtml += '<div class="more_sale amtNotApplyTmtbList">\n' +
-					'			<div class="txt">\n' +
+				tmtbHtml += '<div class="txt">\n' +
 					'				<a href="">\n' +
 					'				<a href="">\n' +
 					'					<i class="ico ico_saletag"></i>\n' +
 					'					<i class="ico ico_saletag"></i>\n' +
 					'					<input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
 					'					<input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
-					'					<span>';
+					'					<span>\n';
 				tmtbHtml += tmtb.tmtbNm;
 				tmtbHtml += tmtb.tmtbNm;
 				tmtbHtml += '</span>\n' +
 				tmtbHtml += '</span>\n' +
 					'				</a>\n' +
 					'				</a>\n' +
 					'			</div>\n' +
 					'			</div>\n' +
 					'		</div>';
 					'		</div>';
 			}
 			}
-		}
 
 
-		if(tmtbHtml != "") {
-			tmtbHtml = "<h4>다다익선 할인 대상이 있습니다.</h4>" + tmtbHtml;
-		}
+			// 금액 다다익선 정보 HTML 작성
+			for(let i = 0 ; i < notApplyAmtTmtbList.length ; i++) {
+				if (notApplyAmtTmtbList[i].tmtbSq != 0) {
+					let tmtb = notApplyAmtTmtbList[i];
+					tmtbHtml += '<div class="more_sale amtNotApplyTmtbList">\n' +
+						'			<div class="txt">\n' +
+						'				<a href="">\n' +
+						'					<i class="ico ico_saletag"></i>\n' +
+						'					<input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
+						'					<span>';
+					tmtbHtml += tmtb.tmtbNm;
+					tmtbHtml += '</span>\n' +
+						'				</a>\n' +
+						'			</div>\n' +
+						'		</div>';
+				}
+			}
 
 
-		$(".area_saleitem").html(tmtbHtml);
-	}
-
-	function cancelCartCpn() {
-		$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt).toLocaleString());
-		$("#cartListForm #totDcAmt").text(Number(totDcAmt).toLocaleString());
-		$("#cartListForm .area_salecoupon .coupon_box").hide();
-	}
-
-	function serialCpnApply() {
-		let cartArr = [];
-		let currPrices = [];
-		$("#cartListForm input[name=cartSqArr]:checked").each(function(index, item) {
-			cartArr.push($(this).val());
-			currPrices.push($(this).parents(".cartInfo").find("input[name=tmtbDcAmt]").val());
-		});
+			if(tmtbHtml != "") {
+				tmtbHtml = "<h4>다다익선 할인 대상이 있습니다.</h4>" + tmtbHtml;
+			}
+
+			$(".area_saleitem").html(tmtbHtml);
+		}*/
 
 
-		let data = {
-			rdCpnNm : $("#cartListForm #serialCpnNm").val(),
-			cartSqArr : cartArr,
-			currPrices : currPrices
+		function cancelCartCpn() {
+			$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt).toLocaleString());
+			$("#cartListForm #totDcAmt").text(Number(totDcAmt).toLocaleString());
+			$("#cartListForm .area_salecoupon .coupon_box").hide();
 		}
 		}
 
 
-		let jsonData = JSON.stringify(data);
-
-		$.ajax( {
-			type: "POST",
-			url : '/cart/list/serialCpnApply',
-			contentType: 'application/json',
-			dataType : 'json',
-			data : jsonData,
-			success : function(result) {
-				if(result.serialCpnInfo.result == "SUCCESS") {
-					$("#cartListForm .area_salecoupon .coupon_box").show();
-
-					// 합계 금액
-					$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt - result.serialCpnInfo.dcAmt).toLocaleString());
-					$("#cartListForm #totDcAmt").text(Number(totDcAmt - result.serialCpnInfo.dcAmt).toLocaleString());
-
-					// 쿠폰 정보
-					$("#cartListForm .area_salecoupon .cp_name").text(result.serialCpnInfo.cpnNm);
-					$("#cartListForm .area_salecoupon .cp_condition").html(result.serialCpnInfo.cpnDesc + "<span><em class='tag'>1장 보유</em></span>");
-					$("#cartListForm .area_salecoupon .availStdt").text(result.serialCpnInfo.availStdt);
-					$("#cartListForm .area_salecoupon .availEddt").text(result.serialCpnInfo.availEddt);
-					if (result.serialCpnInfo.dcWay == "G240_10") {
-						$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + Number(result.serialCpnInfo.dcVal).toLocaleString() + "</em> 원");
-					} else if (result.serialCpnInfo.dcWay == "G240_11") {
-						$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + result.serialCpnInfo.dcVal + "%</em>");
+		function serialCpnApply() {
+			let cartArr = [];
+			let currPrices = [];
+			$("#cartListForm input[name=cartSqArr]:checked").each(function(index, item) {
+				cartArr.push($(this).val());
+				currPrices.push($(this).parents(".cartInfo").find("input[name=tmtbDcAmt]").val());
+			});
+
+			let data = {
+				rdCpnNm : $("#cartListForm #serialCpnNm").val(),
+				cartSqArr : cartArr,
+				currPrices : currPrices
+			}
+
+			let jsonData = JSON.stringify(data);
+
+			$.ajax( {
+				type: "POST",
+				url : '/cart/list/serialCpnApply',
+				contentType: 'application/json',
+				dataType : 'json',
+				data : jsonData,
+				success : function(result) {
+					if(result.serialCpnInfo.result == "SUCCESS") {
+						$("#cartListForm .area_salecoupon .coupon_box").show();
+
+						// 합계 금액
+						$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt - result.serialCpnInfo.dcAmt).toLocaleString());
+						$("#cartListForm #totDcAmt").text(Number(totDcAmt - result.serialCpnInfo.dcAmt).toLocaleString());
+
+						// 쿠폰 정보
+						$("#cartListForm .area_salecoupon .cp_name").text(result.serialCpnInfo.cpnNm);
+						$("#cartListForm .area_salecoupon .cp_condition").html(result.serialCpnInfo.cpnDesc + "<span><em class='tag'>1장 보유</em></span>");
+						$("#cartListForm .area_salecoupon .availStdt").text(result.serialCpnInfo.availStdt);
+						$("#cartListForm .area_salecoupon .availEddt").text(result.serialCpnInfo.availEddt);
+						if (result.serialCpnInfo.dcWay == "G240_10") {
+							$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + Number(result.serialCpnInfo.dcVal).toLocaleString() + "</em> 원");
+						} else if (result.serialCpnInfo.dcWay == "G240_11") {
+							$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + result.serialCpnInfo.dcVal + "%</em>");
+						}
+					} else {
+						mcxDialog.alert(result.serialCpnInfo.result);
 					}
 					}
-				} else {
-					mcxDialog.alert(result.serialCpnInfo.result);
 				}
 				}
-			}
+			});
+		}
+
+		//다다익선 적용내역 보기
+		$(document).on('click','.shopping_bag .part_deliver .btn_moresale',function(e){
+			$(this).toggleClass('active');
+			$(this).parents('.od_moresale').find('.li_moresale').toggle();
+			return false;
 		});
 		});
-	}
-
-	//다다익선 적용내역 보기
-	$(document).on('click','.shopping_bag .part_deliver .btn_moresale',function(e){
-		$(this).toggleClass('active');
-		$(this).parents('.od_moresale').find('.li_moresale').toggle();
-		return false;
-	});
-
-	//관심상품 등록
-	$(document).on('click','.shopping_bag .part_deliver .btn_favorite',function(e){
-		$(this).toggleClass('active');
-		return false;
-	});
-
-	function deleteCartAjax(cartArr) {
-		if(cartArr.length < 1) {
-			mcxDialog.alert("삭제하실 상품을 선택해 주세요.");
+
+		//관심상품 등록
+		$(document).on('click','.shopping_bag .part_deliver .btn_favorite',function(e){
+			$(this).toggleClass('active');
 			return false;
 			return false;
-		}
+		});
+
+		function deleteCartAjax(cartArr) {
+			if(cartArr.length < 1) {
+				mcxDialog.alert("삭제하실 상품을 선택해 주세요.");
+				return false;
+			}
+
+			let data = {
+				cartSqArr : cartArr
+			}
 
 
-		let data = {
-			cartSqArr : cartArr
+			let jsonData = JSON.stringify(data);
+
+			$.ajax( {
+				type: "POST",
+				url : '/cart/deleteCart',
+				contentType: 'application/json',
+				dataType : 'json',
+				data : jsonData,
+				success : function(result) {
+					mcxDialog.alert("삭제 되었습니다.");
+					let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
+					getCartList(data);
+				}
+			});
 		}
 		}
 
 
-		let jsonData = JSON.stringify(data);
-
-		$.ajax( {
-			type: "POST",
-			url : '/cart/deleteCart',
-			contentType: 'application/json',
-			dataType : 'json',
-			data : jsonData,
-			success : function(result) {
-				mcxDialog.alert("삭제 되었습니다.");
-				getCartList();
+		function deleteCart(gbn) {
+			let cartArr = [];
+			let confirmMessage = "";
+			if(gbn == "WMS_SELECT") {
+				$("#cartListForm .wmsList input[name=cartSqArr]:checked").each(function () {
+					cartArr.push($(this).val());
+				});
+
+				confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
+			} else if(gbn == "DELV_SELECT") {
+				$("#cartListForm .delvList input[name=cartSqArr]:checked").each(function () {
+					cartArr.push($(this).val());
+				});
+
+				confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
+			} else if(gbn == "WMS_ALL") {
+				$("#cartListForm .wmsList input[name=cartSqArr]").each(function() {
+					cartArr.push($(this).val());
+				});
+
+				confirmMessage = "총알배송상품을 전부 삭제하시겠습니까?";
+			} else if(gbn == "DELV_ALL") {
+				$("#cartListForm .delvList input[name=cartSqArr]").each(function() {
+					cartArr.push($(this).val());
+				});
+
+				confirmMessage = "업체직배송 상품을 전부 삭제하시겠습니까?";
+			} else {
+				cartArr.push(gbn);
+				deleteCartAjax(cartArr);
+				return false;
 			}
 			}
-		});
-	}
 
 
-	function deleteCart(gbn) {
-		let cartArr = [];
-		let confirmMessage = "";
-		if(gbn == "WMS_SELECT") {
-			$("#cartListForm .wmsList input[name=cartSqArr]:checked").each(function () {
-				cartArr.push($(this).val());
+			mcxDialog.confirm(confirmMessage, {
+				cancelBtnText: "취소/닫기",		//취소 또는 닫기 버튼명
+				sureBtnText  : "확인",				//처리문 버튼명
+				sureBtnClick : function () {
+					deleteCartAjax(cartArr);
+				}
 			});
 			});
+		}
+
+		//쿠폰사용안내 팝업열기
+		$(document).on('click','#btn_cpinfo_pop',function(e){
+			$("#cpinfoPop").modal("show");
+			return false;
+		});
 
 
-			confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
-		} else if(gbn == "DELV_SELECT") {
-			$("#cartListForm .delvList input[name=cartSqArr]:checked").each(function () {
+		$("input[name=cartSqArr]").on("change", function(e) {
+			let cartArr = [];
+
+			// 선택된 장바구니 번호
+			$("#cartListForm input[name=cartSqArr]:checked").each(function () {
 				cartArr.push($(this).val());
 				cartArr.push($(this).val());
 			});
 			});
 
 
-			confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
-		} else if(gbn == "WMS_ALL") {
-			$("#cartListForm .wmsList input[name=cartSqArr]").each(function() {
-				cartArr.push($(this).val());
+			// 선택된 장바구니 정보 가공
+			let data = {	cartSqArr : cartArr }
+			let jsonData = JSON.stringify(data);
+
+			$.ajax( {
+				type: "POST",
+				url : '/cart/change/goods/list',
+				contentType: 'application/json',
+				dataType : 'json',
+				data : jsonData,
+				success : function(result) {
+					fnChangeCartListInfo(result);
+				}
 			});
 			});
+		});
 
 
-			confirmMessage = "총알배송상품을 전부 삭제하시겠습니까?";
-		} else if(gbn == "DELV_ALL") {
-			$("#cartListForm .delvList input[name=cartSqArr]").each(function() {
-				cartArr.push($(this).val());
+		function fnChangeCartListInfo(order) {
+			let shotList = order.shotCartList;
+			let wmsList = order.wmsCartList;
+			let delvList = order.delvCartList;
+			let cartList = new Array();
+
+			// 다다익선 정보 숨김
+			$("#cartListForm .applyTmtb").hide();
+			$("#cartListForm .notApplyTmtb").hide();
+
+			// 장바구니 각 상품 가격 정보 할인 전으로 변경
+			$("#cartListForm .cartInfo input[name=cartSq]").each(function() {
+				if($(this).parent().find(".calc_box .price_org").text() != "") {
+					$(this).parent().find(".calc_box .price_sale").text($(this).parent().find(".calc_box .price_org").text());
+					$(this).parent().find(".calc_box .price_org").remove();
+				}
 			});
 			});
 
 
-			confirmMessage = "업체직배송 상품을 전부 삭제하시겠습니까?";
-		} else {
-			cartArr.push(gbn);
-			deleteCartAjax(cartArr);
-			return false;
-		}
+			$("#cartListForm").find(".delvFeeArea").html("<div class='info_dlvr'><span class='dlvr_fee'>배송비 무료</span></div>");
+			for(let i = 0 ; i < shotList.length ; i++) {
+				cartList.push(shotList[i]);
+				$("#cartListForm .shotCartInfo input[name=cartSq]").each(function() {
+					if(shotList[i].cartSq == $(this).val()) {
+						let shot = shotList[i];
+						// $(this).parent().find(".thumb_box img").attr("src", result.imgPath1 + "/" + wms.sysImgNm);
+						$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
+						$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+
+						// 다다익선 적용 정보 생성성
+						if(shot.qtyTmtbSq > 0 && shot.applyQtySectionYn == "Y") {
+							//$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + shot.qtyTmtbNm + "</li>");
+							$(this).parent().find(".applyTmtb").show();
+						}
+						if(shot.amtTmtbSq > 0 && shot.applyAmtSectionYn == "Y") {
+							//$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + shot.amtTmtbNm + "</li>");
+							$(this).parent().find(".applyTmtb").show();
+						}
+						if(shot.qtyTmtbSq > 0 && shot.applyQtySectionYn == "N") {
+							//$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + shot.qtyTmtbNm + "<a href=''>대상 상품 보기</a></li>");
+							$(this).parent().find(".notApplyTmtb").show();
+						}
+						if(shot.amtTmtbSq > 0 && shot.applyAmtSectionYn == "N") {
+							//$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + shot.amtTmtbNm + "<a href=''>대상 상품 보기</a></li>");
+							$(this).parent().find(".notApplyTmtb").show();
+						}
+
+						// 다다익선 할인가 적용
+						if(shot.tmtbDcAmt < shot.currPrice) {
+							$(this).parent().find(".calc_box .price_sale").text(Number(shot.tmtbDcAmt).toLocaleString() + " 원");
+							$(this).parent().find(".calc_box").prepend("<p><span class='price_org'><em>" + Number(shot.currPrice).toLocaleString() + "</em>원</span></p>");
+							$(this).parent().find("input[name=tmtbDcAmt]").val(shot.tmtbDcAmt);
+							//$(this).parent().find(".calc_box .price").append("<del>" + Number(wms.currPrice).toLocaleString() + " 원</del>");
+						}
+					}
+				});
+			}
 
 
-		mcxDialog.confirm(confirmMessage, {
-			cancelBtnText: "취소/닫기",		//취소 또는 닫기 버튼명
-			sureBtnText  : "확인",				//처리문 버튼명
-			sureBtnClick : function () {
-				deleteCartAjax(cartArr);
+			for(let i = 0 ; i < wmsList.length ; i++) {
+				cartList.push(wmsList[i]);
+				$("#cartListForm .wmsCartInfo input[name=cartSq]").each(function() {
+					if(wmsList[i].cartSq == $(this).val()) {
+						let wms = wmsList[i];
+						// $(this).parent().find(".thumb_box img").attr("src", result.imgPath1 + "/" + wms.sysImgNm);
+						$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
+						$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+
+						// 다다익선 적용 정보 생성성
+						if(wms.qtyTmtbSq > 0 && wms.applyQtySectionYn == "Y") {
+							//$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + wms.qtyTmtbNm + "</li>");
+							$(this).parent().find(".applyTmtb").show();
+						}
+						if(wms.amtTmtbSq > 0 && wms.applyAmtSectionYn == "Y") {
+							//$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + wms.amtTmtbNm + "</li>");
+							$(this).parent().find(".applyTmtb").show();
+						}
+						if(wms.qtyTmtbSq > 0 && wms.applyQtySectionYn == "N") {
+							//$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + wms.qtyTmtbNm + "<a href=''>대상 상품 보기</a></li>");
+							$(this).parent().find(".notApplyTmtb").show();
+						}
+						if(wms.amtTmtbSq > 0 && wms.applyAmtSectionYn == "N") {
+							//$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + wms.amtTmtbNm + "<a href=''>대상 상품 보기</a></li>");
+							$(this).parent().find(".notApplyTmtb").show();
+						}
+
+						// 다다익선 할인가 적용
+						if(wms.tmtbDcAmt < wms.currPrice) {
+							$(this).parent().find(".calc_box .price_sale").text(Number(wms.tmtbDcAmt).toLocaleString() + " 원");
+							$(this).parent().find(".calc_box").prepend("<p><span class='price_org'><em>" + Number(wms.currPrice).toLocaleString() + "</em>원</span></p>");
+							$(this).parent().find("input[name=tmtbDcAmt]").val(wms.tmtbDcAmt);
+							//$(this).parent().find(".calc_box .price").append("<del>" + Number(wms.currPrice).toLocaleString() + " 원</del>");
+						}
+					}
+				});
 			}
 			}
-		});
-	}
 
 
-	//쿠폰사용안내 팝업열기
-	$(document).on('click','#btn_cpinfo_pop',function(e){
-		$("#cpinfoPop").modal("show");
-		return false;
-	});
+			// 자사 상품 배송비
+			if(order.wmsDelvFee == 0) {
+				$(".selfGoodsDelv").html("<span class='dlvr_fee'>배송비 무료</span>");
+			} else {
+				let html = "<span class='dlvr_fee'>배송비 <em>" + Number(order.wmsDelvFee).toLocaleString() + "</em> 원</span><a href='#' class='btn_popup_save'>배송비 SAVE 상품 보기</a>";
+				$(".selfGoodsDelv").html(html);
+				// $(".wmsList").find(".delv_" + wms.delvFeeCd).append("<span class='dlvr_shop'>" + wms.supplyCompNm + " 업체직배송</span>");
+			}
 
 
-	$("input[name=cartSqArr]").on("change", function(e) {
-		let cartArr = [];
+			for(let i = 0 ; i < delvList.length ; i++) {
+				cartList.push(delvList[i]);
+				$("#cartListForm .delvList .delvCartInfo input[name=cartSq]").each(function() {
+					if(delvList[i].cartSq == $(this).val()) {
+						let delv = delvList[i];
+						// $(this).parent().find(".thumb_box img").attr("src", result.imgPath1 + "/" + wms.sysImgNm);
+						$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
+						$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
+
+						// 다다익선 적용 정보 생성성
+						if(delv.qtyTmtbSq > 0 && delv.applyQtySectionYn == "Y") {
+							//$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + delv.qtyTmtbNm + "</li>");
+							$(this).parent().find(".applyTmtb").show();
+						}
+						if(delv.amtTmtbSq > 0 && delv.applyAmtSectionYn == "Y") {
+							//$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + delv.amtTmtbNm + "</li>");
+							$(this).parent().find(".applyTmtb").show();
+						}
+						if(delv.qtyTmtbSq > 0 && delv.applyQtySectionYn == "N") {
+							//$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + delv.qtyTmtbNm + "<a href=''>대상 상품 보기</a></li>");
+							$(this).parent().find(".notApplyTmtb").show();
+						}
+						if(delv.amtTmtbSq > 0 && delv.applyAmtSectionYn == "N") {
+							//$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + delv.amtTmtbNm + "<a href=''>대상 상품 보기</a></li>");
+							$(this).parent().find(".notApplyTmtb").show();
+						}
+
+						// 다다익선 할인가 적용
+						if(delv.tmtbDcAmt < delv.currPrice) {
+							$(this).parent().find(".calc_box .price_sale").text(Number(delv.tmtbDcAmt).toLocaleString() + " 원");
+							$(this).parent().find(".calc_box").prepend("<p><span class='price_org'><em>" + Number(delv.currPrice).toLocaleString() + "</em>원</span></p>");
+							$(this).parent().find("input[name=tmtbDcAmt]").val(delv.tmtbDcAmt);
+							//$(this).parent().find(".calc_box .price").append("<del>" + Number(delv.currPrice).toLocaleString() + " 원</del>");
+						}
+
+						if(delv.delvFee == 0) {
+							$(".delvList").find(".delv_" + delv.delvFeeCd).html("<span class='dlvr_fee'>배송비 무료</span>");
+						} else {
+							let html = "<div className='order_delivery'><span class='dlvr_fee'>배송비 <em>" + Number(delv.delvFee).toLocaleString() + "</em>원</span><span class='dlvr_shop'><em>" + delv.supplyCompNm + "</em> 업체직배송</span><a href='#' className='btn_popup_save'>배송비 SAVE 상품 보기</a></div>";
+							$(".delvList").find(".delv_" + delv.delvFeeCd).html(html);
+						}
+					}
+				});
+			}
 
 
-		// 선택된 장바구니 번호
-		$("#cartListForm input[name=cartSqArr]:checked").each(function () {
-			cartArr.push($(this).val());
-		});
+			// 결제 총액 영역 수정
+			$("#cartListForm .sumCurrPrice").text(Number(order.sumOrdAmt).toLocaleString());
+			$("#cartListForm .totDelvFee").text(Number(order.totDelvFee).toLocaleString());
+			sumRealPayAmt = order.sumRealPayAmt + order.totDelvFee;
+			totDcAmt = order.totDcAmt;
 
 
-		// 선택된 장바구니 정보 가공
-		let data = {	cartSqArr : cartArr }
-		let jsonData = JSON.stringify(data);
-
-		$.ajax( {
-			type: "POST",
-			url : '/cart/change/goods/list',
-			contentType: 'application/json',
-			dataType : 'json',
-			data : jsonData,
-			success : function(result) {
-				fnChangeCartListInfo(result);
-			}
-		});
-	});
-
-	function fnChangeCartListInfo(order) {
-		let wmsList = order.wmsCartList;
-		let delvList = order.delvCartList;
-		let cartList = new Array();
-
-		// 다다익선 정보 숨김
-		$("#cartListForm .applyTmtb").hide();
-		$("#cartListForm .notApplyTmtb").hide();
-
-		// 장바구니 각 상품 가격 정보 할인 전으로 변경
-		$("#cartListForm .cartInfo input[name=cartSq]").each(function() {
-			if($(this).parent().find(".info_calc .price > del").text() != "") {
-				$(this).parent().find(".info_calc .selling_price").text($(this).parent().find(".info_calc .price > del").text());
-				$(this).parent().find(".info_calc .price > del").remove();
+			// 할인코드 쿠폰 금액 재확인
+			if($("#cartListForm #serialCpnNm").val()) {
+				serialCpnApply();
+			} else {
+				$("#cartListForm .totDcAmt").text(Number(order.totDcAmt).toLocaleString());
+				$("#cartListForm .sumRealPayAmt").text(Number(order.sumRealPayAmt + order.totDelvFee).toLocaleString());
+				cancelCartCpn();
 			}
 			}
-		});
-		$("#cartListForm").find(".delvFeeArea").html("<div class='info_dlvr'><span class='dlvr_fee'>배송비 무료</span></div>");
-
-		for(let i = 0 ; i < wmsList.length ; i++) {
-			cartList.push(wmsList[i]);
-			$("#cartListForm .wmsCartInfo input[name=cartSq]").each(function() {
-				if(wmsList[i].cartSq == $(this).val()) {
-					let wms = wmsList[i];
-					// $(this).parent().find(".thumb_box img").attr("src", result.imgPath1 + "/" + wms.sysImgNm);
-					$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
-					$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
-
-					// 다다익선 적용 정보 생성성
-					if(wms.qtyTmtbSq > 0 && wms.applyQtySectionYn == "Y") {
-						$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + wms.qtyTmtbNm + "</li>");
-						$(this).parent().find(".applyTmtb").show();
-					}
-					if(wms.amtTmtbSq > 0 && wms.applyAmtSectionYn == "Y") {
-						$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + wms.amtTmtbNm + "</li>");
-						$(this).parent().find(".applyTmtb").show();
-					}
-					if(wms.qtyTmtbSq > 0 && wms.applyQtySectionYn == "N") {
-						$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + wms.qtyTmtbNm + "<a href=''>대상 상품 보기</a></li>");
-						$(this).parent().find(".notApplyTmtb").show();
-					}
-					if(wms.amtTmtbSq > 0 && wms.applyAmtSectionYn == "N") {
-						$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + wms.amtTmtbNm + "<a href=''>대상 상품 보기</a></li>");
-						$(this).parent().find(".notApplyTmtb").show();
-					}
 
 
-					// 다다익선 할인가 적용
-					if(wms.tmtbDcAmt < wms.currPrice) {
-						$(this).parent().find(".info_calc .selling_price").text(Number(wms.tmtbDcAmt).toLocaleString() + " 원");
-						$(this).parent().find(".info_calc .price").append("<del>" + Number(wms.currPrice).toLocaleString() + " 원</del>");
-					}
+			/*let notApplyQtyTmtbList = new Array();
+			let notApplyAmtTmtbList = new Array();
+			for(let i = 0 ; i < cartList.length ; i++) {
+				let cart = cartList[i];
+				if(cart.applyQtySectionYn == "N") {
+					let obj = new Object();
+					obj.tmtbSq = cart.qtyTmtbSq;
+					obj.tmtbNm = cart.qtyTmtbNm;
+					obj.currPrice = cart.currPrice;
+					obj.goodsNm = cart.goodsNm;
+					obj.brandNm = cart.brandEnm + " " + cart.brandKnm;
+					obj.imgPath = order.imgPath1 + "/" + cart.sysImgNm;
+
+					notApplyQtyTmtbList.push(obj);
+				}
 
 
-					if(wms.delvFee == 0) {
-						$(".wmsList").find(".delv_" + wms.delvFeeCd).html("<div class='info_dlvr'><span class='dlvr_fee'>배송비 무료</span></div>");
-					} else {
-						let html = "<div class='info_dlvr'><span class='dlvr_fee'>" + Number(wms.delvFee).toLocaleString() + " 원</span><a href='#' target='_black'>배송비 SAVE 상품 보기</a></div>";
-						$(".wmsList").find(".delv_" + wms.delvFeeCd).html(html);
-						// $(".wmsList").find(".delv_" + wms.delvFeeCd).append("<span class='dlvr_shop'>" + wms.supplyCompNm + " 업체직배송</span>");
+				if(cart.applyAmtSectionYn == "N") {
+					let obj = new Object();
+					obj.tmtbSq = cart.amtTmtbSq;
+					obj.tmtbNm = cart.amtTmtbNm;
 
 
-					}
+					notApplyAmtTmtbList.push(obj);
 				}
 				}
-			});
-		}
+			}
 
 
-		for(let i = 0 ; i < delvList.length ; i++) {
-			cartList.push(delvList[i]);
-			$("#cartListForm .delvCartInfo input[name=cartSq]").each(function() {
-				if(delvList[i].cartSq == $(this).val()) {
-					let delv = delvList[i];
-					// $(this).parent().find(".thumb_box img").attr("src", result.imgPath1 + "/" + wms.sysImgNm);
-					$(this).parent().find(".od_moresale .applyTmtbNm > ul").html("");
-					$(this).parent().find(".od_moresale .notApplyTmtbNm > ul").html("");
-
-					// 다다익선 적용 정보 생성성
-					if(delv.qtyTmtbSq > 0 && delv.applyQtySectionYn == "Y") {
-						$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + delv.qtyTmtbNm + "</li>");
-						$(this).parent().find(".applyTmtb").show();
-					}
-					if(delv.amtTmtbSq > 0 && delv.applyAmtSectionYn == "Y") {
-						$(this).parent().find(".applyTmtb .applyTmtbNm > ul").append("<li>" + delv.amtTmtbNm + "</li>");
-						$(this).parent().find(".applyTmtb").show();
-					}
-					if(delv.qtyTmtbSq > 0 && delv.applyQtySectionYn == "N") {
-						$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + delv.qtyTmtbNm + "<a href=''>대상 상품 보기</a></li>");
-						$(this).parent().find(".notApplyTmtb").show();
-					}
-					if(delv.amtTmtbSq > 0 && delv.applyAmtSectionYn == "N") {
-						$(this).parent().find(".notApplyTmtb .notApplyTmtbNm > ul").append("<li>" + delv.amtTmtbNm + "<a href=''>대상 상품 보기</a></li>");
-						$(this).parent().find(".notApplyTmtb").show();
+			// 수량 다다익선 정렬
+			var t = new Object();
+			for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
+				for (let j = 0; j < notApplyQtyTmtbList.length - i - 1; j++) {
+					if (notApplyQtyTmtbList[j].tmtbSq > notApplyQtyTmtbList[j + 1].tmtbSq) {
+						t = notApplyQtyTmtbList[j];
+						notApplyQtyTmtbList[j] = notApplyQtyTmtbList[j + 1];
+						notApplyQtyTmtbList[j + 1] = t;
 					}
 					}
+				}
+			}
 
 
-					// 다다익선 할인가 적용
-					if(delv.tmtbDcAmt < delv.currPrice) {
-						$(this).parent().find(".info_calc .selling_price").text(Number(delv.tmtbDcAmt).toLocaleString() + " 원");
-						$(this).parent().find(".info_calc .price").append("<del>" + Number(delv.currPrice).toLocaleString() + " 원</del>");
-					}
+			// 다다익선 적용 대상 상품 노출
+			fnCreateNotApplyTmtbAreaList(notApplyQtyTmtbList, notApplyAmtTmtbList);*/
+		}
 
 
-					if(delv.delvFee == 0) {
-						$(".delvList").find(".delv_" + delv.delvFeeCd).html("<div class='info_dlvr'><span class='dlvr_fee'>배송비 무료</span></div>");
-					} else {
-						let html = "<div class='info_dlvr'><span class='dlvr_fee'>" + Number(delv.delvFee).toLocaleString() + " 원</span><span class='dlvr_shop'>" + delv.supplyCompNm + " 업체직배송</span><a href='#' target='_black'>배송비 SAVE 상품 보기</a></div>";
-						$(".delvList").find(".delv_" + delv.delvFeeCd).html(html);
-					}
+		//옵션변경 팝업열기
+		function fnChangeCartOptCd(cartSq) {
+			$.ajax( {
+				type: "POST",
+				url : '/cart/goods/info',
+				dataType : 'html',
+				data : {cartSq : cartSq},
+				success : function(result) {
+					//fnChangeCartListInfo(result);
+					$("#cartOptionModal").remove();
+					$("#optModifyPop").html(result);
+					$("#optModifyPop").modal("show");
 				}
 				}
 			});
 			});
 		}
 		}
 
 
-		// 결제 총액 영역 수정
-		$("#cartListForm .sumCurrPrice").text(Number(order.sumOrdAmt).toLocaleString());
-		$("#cartListForm .totDelvFee").text(Number(order.totDelvFee).toLocaleString());
-		sumRealPayAmt = order.sumRealPayAmt + order.totDelvFee;
-		totDcAmt = order.totDcAmt;
-
-		// 할인코드 쿠폰 금액 재확인
-		if($("#cartListForm #serialCpnNm").val()) {
-			serialCpnApply();
-		} else {
-			$("#cartListForm .totDcAmt").text(Number(order.totDcAmt).toLocaleString());
-			$("#cartListForm .sumRealPayAmt").text(Number(order.sumRealPayAmt + order.totDelvFee).toLocaleString());
-			cancelCartCpn();
-		}
-
-		let notApplyQtyTmtbList = new Array();
-		let notApplyAmtTmtbList = new Array();
-		for(let i = 0 ; i < cartList.length ; i++) {
-			let cart = cartList[i];
-			if(cart.applyQtySectionYn == "N") {
-				let obj = new Object();
-				obj.tmtbSq = cart.qtyTmtbSq;
-				obj.tmtbNm = cart.qtyTmtbNm;
-				obj.currPrice = cart.currPrice;
-				obj.goodsNm = cart.goodsNm;
-				obj.brandNm = cart.brandEnm + " " + cart.brandKnm;
-				obj.imgPath = order.imgPath1 + "/" + cart.sysImgNm;
-
-				notApplyQtyTmtbList.push(obj);
-			}
-
-			if(cart.applyAmtSectionYn == "N") {
-				let obj = new Object();
-				obj.tmtbSq = cart.amtTmtbSq;
-				obj.tmtbNm = cart.amtTmtbNm;
+		// 상품상세 페이지 이동 처리
+		/*var fnGoToGoodsDetail = function(param) {
+			let goodsCd = $(param).attr('goodsCd');
+			cfnGoToPage(_PAGE_GOODS_DETAIL + goodsCd);
+		}*/
 
 
-				notApplyAmtTmtbList.push(obj);
+		// 주문하기
+		function fnSubmitNoMember(cartSq) {
+			if(cartSq == "all") {
+				$("#cartListForm").submit();
+			} else {
+				let html	 = "<input type='hidden' name='cartSqArr' value='" + cartSq + "' />";
+				html		+= "<input type='hidden' name='shotDelvUseYn' value='" + $("input[name=shotDelvUseYn]:checked").val() + "' />";
+				$("#cartInfoForm").html(html);
+				$("#cartInfoForm").submit();
 			}
 			}
 		}
 		}
 
 
-		// 수량 다다익선 정렬
-		var t = new Object();
-		for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
-			for (let j = 0; j < notApplyQtyTmtbList.length - i - 1; j++) {
-				if (notApplyQtyTmtbList[j].tmtbSq > notApplyQtyTmtbList[j + 1].tmtbSq) {
-					t = notApplyQtyTmtbList[j];
-					notApplyQtyTmtbList[j] = notApplyQtyTmtbList[j + 1];
-					notApplyQtyTmtbList[j + 1] = t;
-				}
-			}
+		function fnGoToGoodsDetail(goodsCd) {
+			cfnGoToPage(_PAGE_GOODS_DETAIL + goodsCd);
 		}
 		}
 
 
-		// 다다익선 적용 대상 상품 노출
-		fnCreateNotApplyTmtbAreaList(notApplyQtyTmtbList, notApplyAmtTmtbList);
-	}
-
-	//옵션변경 팝업열기
-	function fnChangeCartOptCd(cartSq) {
-		$.ajax( {
-			type: "POST",
-			url : '/cart/goods/info',
-			dataType : 'html',
-			data : {cartSq : cartSq},
-			success : function(result) {
-				//fnChangeCartListInfo(result);
-				$("#optModifyPop").html(result);
-				$("#optModifyPop").modal("show");
+		$("#od_item_all").on("change", function() {
+			if($("#od_item_all").is(":checked")) {
+				$("input[name=cartSqArr]").prop("checked", true);
+			} else {
+				$("input[name=cartSqArr]").prop("checked", false);
 			}
 			}
+
 		});
 		});
-	}
-
-	// 상품상세 페이지 이동 처리
-	var fnGoToGoodsDetail = function(param) {
-		let goodsCd = $(param).attr('goodsCd');
-		cfnGoToPage(_PAGE_GOODS_DETAIL + goodsCd);
-	}
-
-	// 주문하기
-	function fnSubmitNoMember(cartSq) {
-		if(cartSq == "all") {
-			$("#cartListForm").submit();
-		} else {
-			let html	 = "<input type='hidden' name='cartSqArr' value='" + cartSq + "' />";
-			html		+= "<input type='hidden' name='shotDelvUseYn' value='" + $("input[name=shotDelvUseYn]:checked").val() + "' />";
-			$("#cartInfoForm").html(html);
-			$("#cartInfoForm").submit();
-		}
-	}
-</script>
+	</script>
+</div>
 </html>
 </html>

+ 10 - 2
src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html

@@ -278,26 +278,34 @@
 <script src="/ux/pc/js/swiper.min.js"></script>
 <script src="/ux/pc/js/swiper.min.js"></script>
 <link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
 <link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
 
 
-<script type="text/javascript">
+<script th:inline="javascript">
     $(document).ready(function() {
     $(document).ready(function() {
         // 장바구니 상품 정보 select
         // 장바구니 상품 정보 select
         getCartList();
         getCartList();
     });
     });
 
 
-    function getCartList() {
+    function getCartList(parameter) {
         // 장바구니 정보 조회
         // 장바구니 정보 조회
         $.ajax( {
         $.ajax( {
             type: "POST",
             type: "POST",
             url : '/cart/goods/list',
             url : '/cart/goods/list',
+			data : parameter,
             dataType : 'html',
             dataType : 'html',
             success : function(result) {
             success : function(result) {
                 if (result != null) {
                 if (result != null) {
+                	$("#cartListForm").remove();
                     $("#cartAjaxList").html(result);
                     $("#cartAjaxList").html(result);
                 }
                 }
             }
             }
         });
         });
     }
     }
 
 
+	//상품옵션변경 팝업 > 컬러선택 표기
+	$(document).on('change','input[name=shotDelvUseYn]',function(e){
+		let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
+		getCartList(data);
+	});
+
     //상품옵션변경 팝업 > 수량조절
     //상품옵션변경 팝업 > 수량조절
     $(document).on('click','.opt_modify_pop .number_count .minus',function(e){
     $(document).on('click','.opt_modify_pop .number_count .minus',function(e){
         var $input = $(this).parent().find('input');
         var $input = $(this).parent().find('input');

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

@@ -187,12 +187,12 @@
 			let tag = '';
 			let tag = '';
 			if (cate1 != null) {
 			if (cate1 != null) {
 				tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
 				tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
-				tag += '	<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate1.cate1Gb + '\',' + cate1.cate1No + ');">' + cate1.cate1Nm + '</a>\n';
+				tag += '	<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');">' + cate1.cate1Nm + '</a>\n';
 				tag += '	<div class="depth_menu category">\n';
 				tag += '	<div class="depth_menu category">\n';
 				tag += '		<div class="head_category">\n';
 				tag += '		<div class="head_category">\n';
 				tag += '			<div class="tit">\n';
 				tag += '			<div class="tit">\n';
 				tag += '				<p>' + cate1.cate1Nm + '</p>\n';
 				tag += '				<p>' + cate1.cate1Nm + '</p>\n';
-				tag += '				<a href="javascript:void(0);" onclick="cfnGoToItemkindMain(\'' + cate1.cate1Gb + '\',' + cate1.cate1No + ');" class="more">전체보기</a>\n';
+				tag += '				<a href="javascript:void(0);" onclick="cfnGoToItemkindMain(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');" class="more">전체보기</a>\n';
 				tag += '			</div>\n';
 				tag += '			</div>\n';
 				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 					tag += '			<div class="menu">\n';
 					tag += '			<div class="menu">\n';

+ 6 - 4
src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html

@@ -49,16 +49,18 @@
 	<link rel="icon" href="/images/favicon-32x32.png" sizes="32x32" type="image/png"/>
 	<link rel="icon" href="/images/favicon-32x32.png" sizes="32x32" type="image/png"/>
 	<link rel="icon" href="/images/favicon-16x16.png" sizes="16x16" type="image/png"/>
 	<link rel="icon" href="/images/favicon-16x16.png" sizes="16x16" type="image/png"/>
 
 
+	<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css">
+	<link rel="stylesheet" type="text/css" href="http://ldfront.style24.com/ux/pc/css/slick.css"/>
+	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/swiper.min.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/swiper.min.css"/>
+	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/jquery-ui.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/jquery-ui.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/reset.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/reset.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/reset.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/reset.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/font.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/font.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/font.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/font.css"/>
-	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/layout.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/layout.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/common.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/common.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/common.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/common.css"/>
-	
+	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/layout.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/layout.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/main.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/main.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/main.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/main.css"/>
-	<link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
 	
 	
 	<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
 	<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
-	<!-- <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> -->
+	<!--<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>-->
 	<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
 	<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
 	<script src="/ux/pc/js/jquery.modal.min.js"></script>
 	<script src="/ux/pc/js/jquery.modal.min.js"></script>

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

@@ -113,16 +113,97 @@
 					</div>
 					</div>
 				</th:block>
 				</th:block>
 
 
+				<!-- LOOKBOOK -->
+				<th:block th:if="${contentsLoc=='010'}">
+					<div class="content br_lookbook" th:if="${brandMainLayoutData.lookbookList != null and !brandMainLayoutData.lookbookList.empty}">
+						<div class="cont_head">
+							<p class="displayH t_c" th:text="${contentsTitle}"></p>
+						</div>
+						<div class="cont_body">
+							<div class="swiper-container">
+								<div class="swiper-wrapper">
+									<th:block th:each="LookbookData, LookbookStat : ${brandMainLayoutData.lookbookList}">
+										<form >
+										</form>
+
+										<div class="swiper-slide">
+											<div class="bt_lb_item">
+												<img class="vLHTC lb_img" th:src="${@environment.getProperty('domain.image')+LookbookData.sysFileNm}" alt="BLUE-a" />
+												<th:block th:if="${LookbookData.lookbookGoodsList != null and !LookbookData.lookbookGoodsList.empty}" th:each="lookbookGoods, status : ${LookbookData.lookbookGoodsList}">
+													<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
+														<!--<button type="button" id="btn_lookbook_picker01" ><span class="ico ico_picker"></span></button>-->
+														<button type="button" th:onclick="fnGoodsPopup([[${lookbookGoods.sysImgNm}]],[[${lookbookGoods.brandGroupNm}]],[[${lookbookGoods.goodsNm}]],[[${lookbookGoods.listPrice}]],[[${lookbookGoods.currPrice}]],[[${lookbookGoods.dcRate}]],[[${lookbookGoods.goodsCd}]])"><span class="ico ico_picker"></span></button>
+														<!--id="btn_lookbook_picker01" <div class="pick_descr">
+															<a href="" th:text="${lookbookGoods.goodsNm}">
+															</a>
+														</div>-->
+													</div>
+												</th:block>
+											</div>
+										</div>
+									</th:block>
+								</div>
+								<div class="swiper-button-prev"></div>
+								<div class="swiper-button-next"></div>
+							</div>
+							<div class="swiper-pagination"></div>
+
+						</div>
+					</div>
+				</th:block>
+
 			</th:block>
 			</th:block>
 		</th:block>
 		</th:block>
 	</div>
 	</div>
 </div>
 </div>
 
 
+	<!-- lookbook_picker_상품_팝업 -->
+	<div class="modal fade br_lookbook_popup" id="brLookbookPopup" tabindex="-1" role="dialog" aria-labelledby="br_lookbook_label" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<div class="modal-header">
+					<h5 class="modal-title sr-only" id="br_lookbook_label">상품정보</h5>
+				</div>
+				<div class="modal-body">
+					<div class="itemsGrp">
+						<div class="item_prod"> <!-- 품절일때 sold_out 클래스 추가 요청 -->
+							<div class="item_state">
+								<div class="itemLink">
+									<div class="itemPic">
+										<img alt="BLACK-a" class=" vLHTC pd_img" src="">
+									</div>
+									<p class="itemBrand"></p>
+									<div class="itemName"></div>
+									<span class="itemPrice_original"></span>
+									<p class="itemPrice">
+										<span class="itemPercent"></span>
+									</p>
+									<button type="button" class="btn btn_default"><span>자세히 보기</span></button>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- //lookbook_picker_상품_팝업 -->
+
 <script th:inline="javascript">
 <script th:inline="javascript">
 /*<![CDATA[*/
 /*<![CDATA[*/
 var brandMainLayoutList = [[${brandMainLayoutList}]];
 var brandMainLayoutList = [[${brandMainLayoutList}]];
-console.log('brandMainLayoutList::'+brandMainLayoutList);
-
+//console.log('brandMainLayoutList::'+brandMainLayoutList);
+var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
+var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
+	$("#brLookbookPopup").modal("show");
+	$("#brLookbookPopup").find(".pd_img").attr('src',goodsImgUrl+'/'+obj1);
+	$("#brLookbookPopup").find(".itemBrand").text(obj2);
+	$("#brLookbookPopup").find(".itemName").text(obj3);
+	$("#brLookbookPopup").find(".itemPrice_original").text(obj4);
+	$("#brLookbookPopup").find(".itemPrice").text(obj5);
+	$("#brLookbookPopup").find(".itemPercent").text(obj6+'%');
+	$("#brLookbookPopup").find(".btn_default").attr('onclick','cfnGoToPage(_PAGE_GOODS_DETAIL+"'+obj7+'");');
+}
 $(document).ready( function() {
 $(document).ready( function() {
 
 
 	// 컨텐츠 호출
 	// 컨텐츠 호출

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

@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MallMainFormWeb.html
+ * @desc    : 몰메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.25   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+
+<div id="container" class="container dp"> 
+	<div class="breadcrumb"> 
+		<ul>
+			<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+			<li class="bread_2depth cate1Nm">여성1</li>
+		</ul> 
+	</div>
+
+	<div class="wrap">
+		<div class="content dp_submain"> <!-- 페이지특정 클래스 = dp_list -->
+			<div class="cont_head">
+				<div>
+					<h3 class="cate1Nm">여성</h3>
+				</div>
+			</div>
+			<div class="cont_body" th:if="${planningList != null}">
+				<div class="dp_sum_slide dp_inner">
+					<div class="swiper-container">
+						<div class="swiper-wrapper">
+							<div class="swiper-slide" th:each="item, status : ${planningList}">
+								<a th:href="${item.strVar1}">
+									<div class="img">
+										<img  th:src="${@environment.getProperty('domain.image') + '/' + item.imgPath1}" alt="서브메인 썸네일"/>
+									</div>
+									<div class="txt">
+										<p class="subject" th:text="${item.strTitle1}"></p>
+										<span th:text="${item.subText1}"></span>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="swiper-controls">
+							<div class="swiper-scrollbar"></div>
+						</div>
+					</div>
+					<!-- Add Arrows -->
+					<div class="swiper-button-next"></div>
+					<div class="swiper-button-prev"></div>
+				</div>
+			</div>
+		</div>
+		
+		<div class="content wide dp_category">
+			<div class="cont_head">
+				<h3 class="displayH">카테고리 바로가기</h3>
+			</div>
+			<div class="cont_body">
+				<div class="">
+					<div class="dp_cate_list">
+					</div>
+				</div>
+			</div>
+		</div>
+		
+		<!-- 신상품 -->
+		<div class="content wide new_item" th:if="${newGoodsList != null}">
+			<div class="cont_head">
+				<h3 class="displayH">신상품</h3>
+			</div>
+			<div class="cont_body">
+				<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_state">
+									<button type="button" class="itemLike" th:classappend="${item.likeIt}">관심상품 추가</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}"/>
+										</div>
+										<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+										<div class="itemName" th:text="${item.goodsFullNm}">스타 착용 여성 퍼 아플리케 오버핏 투마일 웨어링 점퍼</div>
+										<p class="itemPrice" th:text="${#numbers.formatInteger(item.currPrice,3,'POINT') + '원'}">488,000원</p>
+										<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#가을느낌 물씬!</div>
+									</a>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="swiper-pagination"></div>
+				<div class="swiper-button-prev"></div>
+				<div class="swiper-button-next"></div>
+			</div>
+		</div>
+		<!-- //신상품 -->
+		
+		<div class="content main_recomm" th:if="${bestGoodsList != null}">
+			<div class="cont_head">
+				<h3 class="displayH">베스트</h3>
+			</div>
+			<div class="cont_body">
+				<div class="list_content">
+					<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>
+								<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="itemPic">
+										<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" th:alt="${item.goodsCd}"/>
+									</div>
+									<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+									<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+									<p class="itemPrice">
+										<span th:text="${#numbers.formatInteger(item.currPrice,3,'POINT') + '원'}">80,100</span>
+										<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'POINT') + '원'}">89,000</span>
+										<span class="itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+									</p>
+									<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+								</a>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		fnSetCategory1Depts();
+	});
+	
+	var submain_slide = new Swiper('.dp_sum_slide .swiper-container', {
+		slidesPerView: 4,
+		spaceBetween: 20,
+		freeMode:true,
+		scrollbar: {
+			el: '.dp_sum_slide .swiper-scrollbar',
+			hide: false,
+		},
+		navigation: {
+			nextEl: '.dp_sum_slide .swiper-button-next',
+			prevEl: '.dp_sum_slide .swiper-button-prev'
+		}
+	});
+
+	/* SLIDE - NEW ITEMS */
+	var dp_submain_newitem = new Swiper('.dp .new_item .swiper-container', {
+		watchSlidesProgress: true,
+		watchSlidesVisibility: true,
+		allowTouchMove: false,
+		speed : 1000,
+		autoplay: {
+			delay: 3000,
+			disableOnInteraction:false
+		},
+		navigation: {
+			nextEl: '.dp .new_item .swiper-button-next',
+			prevEl: '.dp .new_item .swiper-button-prev'
+		},
+		pagination: {
+			el: '.dp .new_item .swiper-pagination',
+			clickable: true
+		},
+		slidesPerView: 'auto',
+		spaceBetween: 22
+	});
+	
+	dp_submain_newitem.on('slideChange', function () {
+		var newitemIndex = dp_submain_newitem.activeIndex;
+		var slideWidth = $(".dp .new_item .swiper-slide-visible").eq(0).width() + 22;
+
+		$(".dp .new_item .swiper-slide").removeClass('scaleBig');
+		$(".dp .new_item .swiper-slide-visible").eq(0).addClass('scaleBig');
+		$(".dp .new_item .swiper-slide-visible").eq(3).addClass('scaleBig');
+		
+		$(".dp .new_item .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
+	});
+
+	dp_submain_newitem.on('reachEnd', function () {
+		var newitemIndex = dp_submain_newitem.activeIndex + 1;
+		var slideWidth = $(".dp .new_item .swiper-slide-visible").eq(0).width() + 22;
+		
+		$(".dp .new_item .swiper-slide").removeClass('scaleBig');
+		$(".dp .new_item .swiper-slide-visible").eq(1).addClass('scaleBig');
+		$(".dp .new_item .swiper-slide-visible").eq(4).addClass('scaleBig');
+
+		$(".dp .new_item .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
+	});
+	
+	// 카테고리1Depts 설정
+	var fnSetCategory1Depts = function() {
+		let allCate = [[${allCateList}]];
+		$.each(allCate, function(idx1, cate1) {
+			if ([[${params.cate1No}]] == cate1.cate1No) {
+				let tag = '<a href="javascript:void(0);" onclick="cfnGoToItemkindMain(\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
+				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+					$.each(cate1.cate2List, function(idx2, cate2) {
+						tag += '<a href="javascript:void(0);" onclick="cfnGoToItemkindMain(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					});
+				}
+				$('.dp_cate_list').html(tag);
+				$('.cate1Nm').html(cate1.cate1Nm);
+			}
+		});
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 312 - 285
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -92,7 +92,7 @@
 							<div class="descript_box">
 							<div class="descript_box">
 								<div class="desc_top">
 								<div class="desc_top">
 									<button type="button" class="itemShare">상품 공유하기</button>
 									<button type="button" class="itemShare">상품 공유하기</button>
-									<button type="button" class="itemLike">관심상품 추가</button>
+									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								</div>
 								<div class="desc_info">
 								<div class="desc_info">
 									<div class="title_blk">
 									<div class="title_blk">
@@ -147,84 +147,68 @@
 							</div>
 							</div>
 							<div class="option_box">
 							<div class="option_box">
 								<div class="opt_select">
 								<div class="opt_select">
-									<form class="form_wrap">
-										<div class="form_field">
-											<div class="select_custom deal_opt_item">
-												<div class="combo">
-													<div class="select">
+									<div class="form_field">
+										<div class="select_custom deal_opt_item">
+											<div class="combo">
+												<div class="select">
+													<div class="item_prod">
+														<div class="item_state">
+															<a href="javascript:void(0);" class="itemLink">
+																<div class="itemPic">
+																	<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+																</div>
+																<div class="itemName">선택</div>
+															</a>
+														</div>
+													</div>
+												</div>
+												<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+													<th:block th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
+													<li th:onclick="fnOption1('Up', [[${goodsInfo.compsGoodsCd}]], [[${goodsInfo.currPrice}]] , [[${goodsInfo.selfGoodsYn}]]);">
 														<div class="item_prod">
 														<div class="item_prod">
-															<div class="item_state">
-																<a href="javascript:void(0);" class="itemLink">
+															<div class="item_state" >
+																<a href="javascript:void(0);" class="itemLink" >
 																	<div class="itemPic">
 																	<div class="itemPic">
 																		<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																		<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 																	</div>
 																	</div>
-																	<div class="itemName">선택</div>
+																	<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
+																	<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></div>
+																	<p class="itemPrice" ><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+																		<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+																		<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+																	</p>
 																</a>
 																</a>
+																<input type="hidden" name="selectGoods" th:attr="goodsNm=${'[상품'+status.count+']' +goodsInfo.goodsFullNm}, currPrice=${goodsInfo.currPrice}" />
 															</div>
 															</div>
 														</div>
 														</div>
-													</div>
-													<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
-														<th:block th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
-														<li th:onclick="fnOption1('Up', [[${goodsInfo.compsGoodsCd}]]);">
-															<div class="item_prod">
-																<div class="item_state" >
-																	<a href="javascript:void(0);" class="itemLink" >
-																		<div class="itemPic">
-																			<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
-																		</div>
-																		<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
-																		<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></div>
-																		<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
-																			<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
-																			<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-																		</p>
-																	</a>
-																</div>
-															</div>
-														</li>
-														</th:block> 
-													</ul>
-												</div>
+													</li>
+													</th:block> 
+												</ul>
 											</div>
 											</div>
 										</div>
 										</div>
-										<div class="form_field">
-											<div class="select_custom deal_opt1" disabled>
-												<div class="combo">
-													<div class="select">선택</div>
-													<ul class="list" id="goodsDealOptUp1">
-														<!--  옵션 1 -->
-													</ul>
-												</div>
+									</div>
+									<div class="form_field">
+										<div class="select_custom deal_opt1" disabled>
+											<div class="combo">
+												<div class="select">선택</div>
+												<ul class="list" id="goodsDealOptUp1">
+													<!--  옵션 1 -->
+												</ul>
 											</div>
 											</div>
 										</div>
 										</div>
-										<div class="form_field">
-											<div class="select_custom deal_opt2" disabled>
-												<div class="combo">
-													<div class="select">선택</div>
-													<ul class="list" id="goodsDealOptUp2">
-														<!--  옵션 2 -->
-													</ul>
-												</div>
+									</div>
+									<div class="form_field">
+										<div class="select_custom deal_opt2" disabled>
+											<div class="combo">
+												<div class="select">선택</div>
+												<ul class="list" id="goodsDealOptUp2">
+													<!--  옵션 2 -->
+												</ul>
 											</div>
 											</div>
 										</div>
 										</div>
-									</form>
+									</div>
 								</div>
 								</div>
 								<div class="opt_result">
 								<div class="opt_result">
-									<div class="result_item">
-										<div class="opt_header">
-											<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-											<span class="item_option">다크그레이/XXL</span>
-										</div>
-										<div class="number_count">
-											<span class="minus"><em class="sr-only">감소</em></span>
-											<input type="text" name="" maxlength="3" style='ime-mode:disabled' value="1" />
-											<span class="plus"><em class="sr-only">추가</em></span>
-										</div>
-										<div class="item_price">
-											<p><em>99,999,999</em>원</p>
-										</div>
-										<button type="button" class="btn_delete_item"><span>삭제</span></button>
-									</div>
 								</div>
 								</div>
 							</div>
 							</div>
 							<div class="price_box">
 							<div class="price_box">
@@ -239,17 +223,19 @@
 							</div>
 							</div>
 							<div class="btn_box">
 							<div class="btn_box">
 								<div class="btn_group_block ui_row">
 								<div class="btn_group_block ui_row">
+								<th:block  th:if="${goodsInfo.stockQty > 0}">
 									<div class="ui_col_6">
 									<div class="ui_col_6">
 										<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 										<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 									</div>
 									</div>
 									<div class="ui_col_6">
 									<div class="ui_col_6">
 										<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 										<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 									</div>
 									</div>
-								</div>
-								<div class="btn_group_block ui_row">
+								</th:block>
+								<th:block  th:unless="${goodsInfo.stockQty > 0}">
 									<div class="ui_col_12">
 									<div class="ui_col_12">
-										<button type="button" class="btn btn_dark btn_block" disabled><span>SOLD OUT</span></button>
+										<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 									</div>
 									</div>
+								</th:block>
 								</div>
 								</div>
 							</div>
 							</div>
 						</div>
 						</div>
@@ -293,54 +279,84 @@
 	}
 	}
 	
 	
 	// 옵션1 조회
 	// 옵션1 조회
-	var fnOption1 = function(flag, goodsCd){
-		let selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
+	var fnOption1 = function(flag, goodsCd, currPrice, selfGoodsYn){
 		let data = {goodsCd : goodsCd
 		let data = {goodsCd : goodsCd
 					};
 					};
 		let jsonData = JSON.stringify(data);
 		let jsonData = JSON.stringify(data);
-	
+		
+		$('.form_field .select_custom.deal_opt1').find('.combo .select').html('선택');
+		$('.form_field .select_custom.deal_opt2').attr('disabled', true);
+		$('.form_field .select_custom.deal_opt2').find('.combo .select').html('선택');
+		
 		gagajf.ajaxJsonSubmit('/goods/detail/option1/list', jsonData, function(result) {
 		gagajf.ajaxJsonSubmit('/goods/detail/option1/list', jsonData, function(result) {
 			
 			
 			if (result.dataList != null && result.dataList.length > 0) {
 			if (result.dataList != null && result.dataList.length > 0) {
-				let tag = "";
+				
+				let tagUpS = "";
+				let tagDownS = "";
+				let tagUp = "";
+				let tagDown = "";
 				let $objUp = null;
 				let $objUp = null;
 				let $objDown = null;
 				let $objDown = null;
 				let qty = 1;
 				let qty = 1;
 				$.each(result.dataList, function(idx, item) {
 				$.each(result.dataList, function(idx, item) {
+					let tag1 = "";
+					let tag2 = "";
 					if (idx == 0){
 					if (idx == 0){
-						$objUp = $('#goodsDealOptUp1');
-						$objUp.append('');
-						$objDown = $('#goodsDealOptDown1');
-						$objDown.append('');
+						$objUp = $('.pd_detail .opt_select .select_custom.deal_opt1');
+						//$objUp = $('.form_field .select_custom.deal_opt1');
+						$objUp.html('');
+						$objDown = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
+						$objDown.html('');
+						$('.form_field .select_custom.deal_opt1').attr('disabled', false);
 						
 						
-						$('.form_field .select_custom.deal_opt1').attr('disabled', false)
-						tag += '<li class="selected" id="goodsOpt1">선택</li>\n';	
+						//------
+						tag1 += '<div class="combo">\n';
+						tag1 += '<div class="select">선택</div>\n';
+						tag1 += '<ul class="list">\n';
+						//------
+						tag1 += '<li class="selected" id="goodsOpt1">선택</li>\n';	
 					}
 					}
 					let soldoutYn = ""; 
 					let soldoutYn = ""; 
 					if (item.stockQty <= 0) soldoutYn = "true";
 					if (item.stockQty <= 0) soldoutYn = "true";
-					tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(\''+flag+'\', \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ qty+'\', \''+ item.minOrdQty+'\', \''+ item.maxOrdQty+'\')">\n';
-					tag += '<div>'+ item.optCd1+'</div>\n';
+					tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Up\')">\n';
+					tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Down\')">\n';
+					tag2 += '<div>'+ item.optCd1+'</div>\n';
 					if (item.addPrice > 0){
 					if (item.addPrice > 0){
-						tag += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
+						tag2 += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
 					}
 					}
-					tag += '<input type="hidden" name="opt1" value="'+ item.goodsCd+'|'+item.optCd1 +'|'+qty +'" addPrice="'+item.addPrice+'"  optCd1="'+item.optCd1+'" />\n';
-					tag += '</li>\n';
+					tag2 += '<input type="hidden" name="opt1" value="'+ goodsCd +'" currPrice="'+ currPrice+'" optCd1="'+item.optCd1+'"  minOrdQty="'+item.minOrdQty+'"  maxOrdQty="'+item.maxOrdQty+'"   selfGoodsYn="'+selfGoodsYn+'" />\n';
+					tag2 += '</li>\n';
+					
+					tagUpS += tag1+tagUp+tag2;
+					tagDownS += tag1+tagDown+tag2;
 				});
 				});
 				
 				
-				$objUp.append(tag);
-				$objDown.append(tag);
+				if (!gagajf.isNull(tagUpS)){
+					//------
+					tagUpS += '</ul>\n';
+					tagUpS += '</div>\n';
+					tagDownS += '</ul>\n';
+					tagDownS += '</div>\n';
+					//------	
+				}
+				
+				
+				$objUp.append(tagUpS);
+				$objDown.append(tagDownS);
 				var detail_deal_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
 				var detail_deal_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
 				var desc_option02 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
 				var desc_option02 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
 				//var pop_desc_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
 				//var pop_desc_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
 			}
 			}
 			
 			
+			// 상품 선태값 적용
 			let $obj = null;
 			let $obj = null;
 			let $taget = null;
 			let $taget = null;
 			// 하단 우측 상품선택영역  Up/ Down
 			// 하단 우측 상품선택영역  Up/ Down
 			if (flag  == "Up"){
 			if (flag  == "Up"){
 				$obj = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select'); 
 				$obj = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select'); 
 				$taget = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
 				$taget = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
-			}else if (flag  == "Down"){
+			}else{
 				$taget = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select');
 				$taget = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select');
 				$obj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
 				$obj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
 			}
 			}
@@ -352,176 +368,213 @@
 	}
 	}
 	
 	
 	// 옵션2 조회
 	// 옵션2 조회
-	var fnOption2 = function(flag, goodsCd, optCd1, qty, minOrdQty, maxOrdQty ){
-		let selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
+	var fnOption2 = function(obj, flag){
+		let $obj = $(obj);
+		let $target = $obj.find('input[name="opt1"]');
+		let goodsCd = $target.val();
+		let currPrice = $target.attr("currPrice");
+		let optCd1 = $target.attr("optCd1");
+		let minOrdQty = $target.attr("minOrdQty");
+		let maxOrdQty = $target.attr("maxOrdQty");
+		let selfGoodsYn = $target.attr("selfGoodsYn");
+		
 		let data = {goodsCd : goodsCd
 		let data = {goodsCd : goodsCd
 					,optCd1 : optCd1
 					,optCd1 : optCd1
 					};
 					};
 		let jsonData = JSON.stringify(data);
 		let jsonData = JSON.stringify(data);
-	
+		
 		gagajf.ajaxJsonSubmit('/goods/detail/option2/list', jsonData, function(result) {
 		gagajf.ajaxJsonSubmit('/goods/detail/option2/list', jsonData, function(result) {
 			
 			
 			if (result.dataList != null && result.dataList.length > 0) {
 			if (result.dataList != null && result.dataList.length > 0) {
-				let tag = "";
+				let tagUpS = "";
+				let tagDownS = "";
+				let tagUp = "";
+				let tagDown = "";
 				let $objUp = null;
 				let $objUp = null;
 				let $objDown = null;
 				let $objDown = null;
 				$.each(result.dataList, function(idx, item) {
 				$.each(result.dataList, function(idx, item) {
+					let tag1 = "";
+					let tag2 = "";
 					if (idx == 0){
 					if (idx == 0){
-						$objUp = $('#goodsDealOptUp2');
-						$objUp.append('');
-						$objDown = $('#goodsDealOptDown2');
-						$objDown.append('');
-						$('.form_field .select_custom.deal_opt2').attr('disabled', false)
-						tag += '<li class="selected" id="goodsOpt2">선택</li>\n';	
+						//$objUp = $('#goodsDealOptUp2');
+						$objUp = $('.pd_detail .form_field .select_custom.deal_opt2');
+						$objUp.html('');
+						$objDown = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
+						$objDown.html('');
+						$('.form_field .select_custom.deal_opt2').attr('disabled', false);
+						//------
+						tag1 += '<div class="combo">\n';
+						tag1 += '<div class="select">선택</div>\n';
+						tag1 += '<ul class="list">\n';
+						//------
+						tag1 += '<li class="selected" id="goodsOpt2">선택</li>\n';	
 					}
 					}
 					let soldoutYn = ""; 
 					let soldoutYn = ""; 
 					if ("Y" == item.soldoutYn || item.stockQty <= 0)soldoutYn = "true";
 					if ("Y" == item.soldoutYn || item.stockQty <= 0)soldoutYn = "true";
-					tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \''+ flag +'\' , \''+ item.goodsCd+'\' , \''+ item.optCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';
-					tag += '<div>'+ item.optCd2+'</div>\n';
+					tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'Up\' )">\n';
+					tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'Down\' )">\n';
+					tag2 += '<div>'+ item.optCd2+'</div>\n';
 					if (item.addPrice > 0){
 					if (item.addPrice > 0){
-						tag += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
+						tag2 += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
 					}
 					}
-					tag += '<input type="hidden" name="opt2" value="'+ item.goodsCd+'|'+item.optCd +'|'+qty +'" id="'+item.optCd+'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'"  optCd2="'+item.optCd2+'"  />\n';
-					tag += '</li>\n';
+					tag2 += '<input type="hidden" name="opt2" value="'+ goodsCd +'" currPrice="'+ currPrice+'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
+					tag2 += '</li>\n';
+					
+					tagUpS += tag1+tagUp+tag2;
+					tagDownS += tag1+tagDown+tag2;
 				});
 				});
 				
 				
-				$objUp.append(tag);
-				$objDown.append(tag);
+				if (!gagajf.isNull(tagUpS)){
+					//------
+					tagUpS += '</ul>\n';
+					tagUpS += '</div>\n';
+					tagDownS += '</ul>\n';
+					tagDownS += '</div>\n';
+					//------	
+				}
+				
+				
+				$objUp.append(tagUpS);
+				$objDown.append(tagDownS);
 				var detail_deal_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
 				var detail_deal_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
 				var desc_option03 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
 				var desc_option03 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
 				//var pop_desc_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
 				//var pop_desc_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
 				
 				
 			}
 			}
 			
 			
-			let $obj = null;
-			let $taget = null;
+			// 옵션 1 선태값 적용
+			let $obj2 = null;
+			let $taget2 = null;
 			// 하단 우측 상품선택영역  Up/ Down
 			// 하단 우측 상품선택영역  Up/ Down
 			if (flag  == "Up"){
 			if (flag  == "Up"){
-				$obj = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select'); 
-				$taget = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
-			}else if (flag  == "Down"){
-				$taget = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select');
-				$obj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
+				$obj2 = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select'); 
+				$taget2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
+			}else{
+				$obj2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
+				$taget2 = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select');
 			}
 			}
 			
 			
-			let goodsDealInfo = $obj.html();
-			$taget.html(goodsDealInfo);
+			let goodsDealInfo = $obj2.html();
+			$taget2.html(goodsDealInfo);
 			
 			
 		});	
 		});	
 	}
 	}
 	
 	
 	//사이즈 클릭시 - 단품
 	//사이즈 클릭시 - 단품
-	var fnViewStock = function(obj, flag, goodsCd, optCd, optCd1, optCd2,  minOrdQty, maxOrdQty) {
+	var fnViewStock = function(obj, flag ) {
+		
 		let $obj = $(obj);
 		let $obj = $(obj);
-		let selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
-		let $target = null;
-		if (selfGoodsYn == "Y"){
-			$target = $obj.parent().parent().children('input[name="opt"]');
-			$target.prop("checked",true);
-			$("#selectOptCd1").html(optCd2);
-		}else{
-			$target = $obj.find('input[name="opt2"]');
-		}
+		let $target = $obj.find('input[name="opt2"]');
+		let goodsCd = $target.val();
+		let currPrice = $target.attr("currPrice");
+		let optCd = $target.attr("optCd");
+		let optCd1 = $target.attr("optCd1");
+		let optCd2 = $target.attr("optCd2");
+		let minOrdQty = $target.attr("minOrdQty");
+		let maxOrdQty = $target.attr("maxOrdQty");
 		let addPrice  = $target.attr("addPrice");
 		let addPrice  = $target.attr("addPrice");
-		$("#selectOptCd1addPrice").html('');
-		if (Number(addPrice) > 0) $("#selectOptCd1addPrice").html("(+" + addPrice.addComma() + ")");
-		
-		$("#cartForm  input[name=optCd]").val(optCd);
-		$("#cartForm  input[name=optCd1]").val(optCd1);
-		$("#cartForm  input[name=optCd2]").val(optCd2);
-		$("#cartForm  input[name=addPrice]").val(addPrice);
-		$("#cartForm  input[name=ordQty]").val("");
-		
+		let selfGoodsYn  = $target.attr("selfGoodsYn");
+		let optQty = minOrdQty;
 		let maxCnt = maxOrdQty;
 		let maxCnt = maxOrdQty;
+		
 		let params = new Object();
 		let params = new Object();
 		params.goodsCd = goodsCd;
 		params.goodsCd = goodsCd;
 		params.optCd = optCd;
 		params.optCd = optCd;
 		params.optCd1 = optCd1;
 		params.optCd1 = optCd1;
 		params.optCd2 = optCd2;
 		params.optCd2 = optCd2;
 		params.selfGoodsYn = selfGoodsYn;
 		params.selfGoodsYn = selfGoodsYn;
+		debugger;
+		// 중복선택 확인  opt_result
+		var overlap = 0;
+		$('.pd_detail .opt_result .number_count').each(function() {
+			if ($('input[name="coption"]', this).val() == optCd) {
+				++overlap;
+			}
+		});
+		if (overlap > 0) {
+			mcxDialog.alert("이미 선택하신 옵션입니다.");
+			return false;
+		}
 		
 		
 		$.get("/goods/detail/ajaxGoodsStockQty", $.param(params), function(result) {
 		$.get("/goods/detail/ajaxGoodsStockQty", $.param(params), function(result) {
 			let itemCnt = eval(result); //해당 아이템에 선택되어진 사이즈의 수량
 			let itemCnt = eval(result); //해당 아이템에 선택되어진 사이즈의 수량
-
+			
 			if (maxCnt > itemCnt) {
 			if (maxCnt > itemCnt) {
 				maxCnt = itemCnt;
 				maxCnt = itemCnt;
 			}
 			}
 
 
 			if (minOrdQty > itemCnt) {
 			if (minOrdQty > itemCnt) {
-				$target.prop("disabled", true);
+				alert("무슨작업을 해야할가요?");
+				return false; 		//무슨작업을 해야하나?
+			}
+			
+			//상품정보
+			let $selObj = null;
+			if (flag  == "Up"){
+				$selObj = $('.pd_detail .opt_select .select_custom.deal_opt_item');
 			}else{
 			}else{
-				$("#cartForm  input[name=ordQty]").val(minOrdQty);
-				$("#cartForm  input[name=maxOrdQty]").val(maxCnt);
-				$("#cartForm  input[name=minOrdQty]").val(minOrdQty);
-				$("#cartForm  input[name=cea]").val(minOrdQty);
-				$("#cartForm  input[name=cea]").attr("readonly",false);
-				$("#cartForm  input[name=stock]").val(itemCnt);
-
-				fnSetTotalPrice();
+				$selObj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item');
 			}
 			}
+			let $goodsObj =$selObj.find('.combo .select').find('input[name=selectGoods]');
+			let goodsNm =  $goodsObj.attr('goodsnm');
+			let price = parseInt(currPrice)+ parseInt(addPrice);
 			
 			
+			let tag = "";
+			tag += '<div class="result_item result_'+optCd+'">\n';
+			tag += '	<div class="opt_header">\n';
+			tag += '		<span class="item_name">'+goodsNm+'</span>\n';
+			tag += '		<span class="item_option">'+optCd1+'/'+optCd2+'</span>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="number_count">\n';
+			tag += '		<span class="minus min_val" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>\n';
+			tag += '		<input type="text" name="cea" optCd="'+optCd+'" maxlength="3" style="ime-mode:disabled" value="' +optQty+'" onblur="fnChangeOrderEa(this)" minOrdQty="'+minOrdQty+'" maxOrdQty="'+maxOrdQty+'" data-valid-type="numeric">\n';
+			tag += '		<input type="hidden" name="coption" value="'+optCd+'"  price="'+currPrice+'"  addPrice="'+addPrice+'">\n';
+			tag += '		<span class="plus" onclick="fnAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="item_price">\n';
+			tag += '		<p><em id="goodsPrice">'+price.addComma() +'</em>원</p>\n';
+			tag += '	</div>\n';
+			tag += '	<button type="button" class="btn_delete_item" onclick="fnSelectGoodsDel(\''+optCd+'\')"><span>삭제</span></button>\n';
+			tag += '</div>\n';
 			
 			
-			// opt_result
-			/* <div class="result_item">
-				<div class="opt_header">
-					<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-					<span class="item_option">다크그레이/XXL</span>
-				</div>
-				<div class="number_count">
-					<span class="minus min_val"><em class="sr-only">감소</em></span>
-					<input type="text" name="" maxlength="3" style="ime-mode:disabled" value="1">
-					<span class="plus"><em class="sr-only">추가</em></span>
-				</div>
-				<div class="item_price">
-					<p><em>99,999,999</em>원</p>
-				</div>
-				<button type="button" class="btn_delete_item"><span>삭제</span></button>
-			</div> */
-			let $obj = null;
-			let $taget = null;
+			
+			let $objUp = null;
+			let $objDown = null;
+			// 하단 우측 상품선택영역  Up/ Down
+			$objUp = $('.pd_detail .opt_result'); 
+			$objDown = $('.pd_desc_wrap .opt_result');
+			
+			$objUp.append(tag);
+			$objDown.append(tag);
+			
+			// 옵션 2 선태값 적용
+			let $obj2 = null;
+			let $taget2 = null;
 			// 하단 우측 상품선택영역  Up/ Down
 			// 하단 우측 상품선택영역  Up/ Down
 			if (flag  == "Up"){
 			if (flag  == "Up"){
-				$obj = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select'); 
-				$taget = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
-			}else if (flag  == "Down"){
-				$taget = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select');
-				$obj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
+				$obj2 = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select'); 
+				$taget2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
+			}else{
+				$obj2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
+				$taget2 = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select');
+				
 			}
 			}
 			
 			
-			let goodsDealInfo = $obj.html();
-			$taget.html(goodsDealInfo);
+			let goodsDealInfo = $obj2.html();
+			$taget2.html(goodsDealInfo);
 			
 			
+			fnSetTotalPrice();
 			
 			
 		}, "text");
 		}, "text");
 	}
 	}
 	
 	
 	// 수량 변경 클릭
 	// 수량 변경 클릭
 	var fnAdjustOrderEa = function(obj) {
 	var fnAdjustOrderEa = function(obj) {
-
-		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
-			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택하세요.");
-				return false;
-			}
-		}else{
-			let target=$('.select_custom.item_opt2');
-			let targetSize = target.length;	//구성품 갯수
-			let itemSize = 0;
-			target.each(function(){
-				if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' &&  !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
-					itemSize ++;
-				}
-			});
-			
-			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
-				return false;
-			}
-		}
-
+		
 		let $obj = $(obj);
 		let $obj = $(obj);
 		let $target = $obj.parent().children('input[name="cea"]');
 		let $target = $obj.parent().children('input[name="cea"]');
-		let minOrdQty = parseInt($("#cartForm  input[name=minOrdQty]").val());
+		let minOrdQty = parseInt( $target.attr('minOrdQty'));
+		let maxOrdQty = parseInt( $target.attr('maxOrdQty'));
 		let ea =parseInt($target.val());
 		let ea =parseInt($target.val());
 
 
 		if ($obj.attr('adjust') == '-') --ea;
 		if ($obj.attr('adjust') == '-') --ea;
@@ -530,62 +583,53 @@
 		//var maxOrdQty = $("#cartForm  input[name=maxOrdQty]").val();
 		//var maxOrdQty = $("#cartForm  input[name=maxOrdQty]").val();
 
 
 		//if (maxOrdQty && ea > maxOrdQty) ea = maxOrdQty;
 		//if (maxOrdQty && ea > maxOrdQty) ea = maxOrdQty;
-		if (ea.toString().length > parseInt($target.attr('maxlength'))) --ea;
+		if (ea.toString().length > maxOrdQty) --ea;
 		if (ea < 1) ea = minOrdQty;
 		if (ea < 1) ea = minOrdQty;
 
 
 		$target.val(ea);
 		$target.val(ea);
 
 
-		fnChangeOrderEa();
+		fnChangeOrderEa($target[0]);
 	}
 	}
 
 
 	//옵션 갯수 변경
 	//옵션 갯수 변경
-	var fnChangeOrderEa = function() {
-
-		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
-			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택하세요.");
-				return false;
-			}
-		}else{
-			
-			let target=$('.select_custom.item_opt2');
-			let targetSize = target.length;	//구성품 갯수
-			let itemSize = 0;
-			target.each(function(){
-				if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' &&  !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
-					itemSize ++;
-				}
-			});
-			
-			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
-				return false;
-			}
-		}
-
-		//let f = document.cartForm;
-		let ea = parseInt($("#cartForm  input[name=cea]").val());
-		let buymin = parseInt($("#cartForm  input[name=minOrdQty]").val());
-		let buymax = parseInt($("#cartForm  input[name=maxOrdQty]").val());
+	var fnChangeOrderEa = function(obj) { 
+		let $obj = $(obj);
+		let ea = parseInt($obj.val());
+		let maxOrdQty = parseInt($(obj).attr('maxOrdQty'));
+		let minOrdQty = parseInt($(obj).attr('minOrdQty'));
+		let optCd =  parseInt($(obj).attr('optCd'));
 		let alertMsg = '';
 		let alertMsg = '';
-		if (ea < buymin) {
-			alertMsg ="최소 주문 가능 수량은 "+buymin+"개 입니다.";
-			ea = buymin;
+		if (ea < minOrdQty) {
+			mcxDialog.alert("최소 주문 가능 수량은 "+minOrdQty+"개 입니다.");
+			ea = minOrdQty;
 		}
 		}
 
 
-		if (ea > buymax) {
-			alertMsg = "최대 주문 가능 수량은 "+buymax+"개 입니다.";
-			ea = buymax;
+		if (ea > maxOrdQty) {
+			mcxDialog.alert("최대 주문 가능 수량은 "+maxOrdQty+"개 입니다.");
+			ea = maxOrdQty;
 		}
 		}
 
 
-		$("#cartForm  input[name=cea]").val(ea);
-		$("#cartForm  input[name=ordQty]").val(ea);
-
+		obj.value = ea;
+		
 		if (alertMsg != ''){
 		if (alertMsg != ''){
 			mcxDialog.alert(alertMsg);
 			mcxDialog.alert(alertMsg);
-			//return;
+			return false;
 		}
 		}
-
+		
+		if (ea <= 1){
+			$('.number_count').find('.minus').addClass('min_val');	
+		}else{
+			$('.number_count').find('.minus').removeClass('min_val');
+		}
+		
+		let addPrice = parseInt($obj.parent().find('input[name="coption"]').attr('addprice'));
+		let goodsPrice = parseInt($obj.parent().find('input[name="coption"]').attr('price'));
+		let totalPrice = ((goodsPrice+addPrice) * ea);
+		//$obj.parent().parent().find('#goodsPrice').text(totalPrice.addComma());
+		
+		$('.opt_result .result_'+optCd+' .number_count').find('input[name=cea]').val(ea);
+		$('.opt_result .result_'+optCd+' .item_price').find('em').text(totalPrice.addComma());
+		
 		fnSetTotalPrice();
 		fnSetTotalPrice();
 	}
 	}
 	
 	
@@ -596,16 +640,10 @@
 		let totalEa = 0;
 		let totalEa = 0;
 		let totalPrice = 0;
 		let totalPrice = 0;
 		
 		
-		$('input[name="cea"]').each(function() {
+		$('input[name="cea"]', document.cartForm).each(function() {
 			let ea = parseInt($(this).val());
 			let ea = parseInt($(this).val());
-			let addPrice = 0;
 			let target=$('.select_custom.item_opt2');
 			let target=$('.select_custom.item_opt2');
-			target.each(function() {
-				if (typeof ($(this).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('input[name=opt2]').val())){
-					addPrice += Number($(this).find('input[name=opt2]').attr('addPrice'));	
-				}
-			});	
-			
+			let addPrice = parseInt($(this).parent().find('input[name="coption"]').attr('addprice'));
 			let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
 			let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
 
 
 			totalEa += ea;
 			totalEa += ea;
@@ -614,8 +652,8 @@
 			}
 			}
 		});
 		});
 
 
-		$('#goodsTotalQty').html(totalEa.addComma());
-		$('#goodsTotalPrice').html(totalPrice.addComma());
+		$('.price_box .number > span').html(totalEa.addComma());
+		$('.price_box .price > span').html(totalPrice.addComma());
 		
 		
 	}
 	}
 	
 	
@@ -641,65 +679,54 @@
 		}
 		}
 		
 		
 		let params = [];
 		let params = [];
-		let goodsType = $("#cartForm  input[name=goodsType]").val();
+		
+		let target = $('cartForm input[name=cea]');
+		let targetSize = target.length;	//선택성품 갯수
+		if (target.length <= 0){
+			mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
+			return false;
+		}
+		
+		target.each(function() {
+			
+			let ea = parseInt($(this).val());
+			let target=$('.select_custom.item_opt2');
+			let addPrice = parseInt($(this).parent().find('input[name="coption"]').attr('addprice'));
+			let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
 
 
-		if (goodsType == 'G056_N'){
-			if (gagajf.isNull($("#cartForm  input[name=optCd2]").val())) {
-				mcxDialog.alert("사이즈를 선택하세요.");
-				return;
+			totalEa += ea;
+			if (goodsPrice > 0) {
+				totalPrice += ((goodsPrice+addPrice) * ea);
 			}
 			}
-		
-			let obj = new Object();
+			
+			var arrInfo = $(this).find('input[name=opt2]').val().split('|');	// 상품코드|사이즈|구성수량
+			
+			var obj = new Object();
+			obj.cartGb = btnType;
+			obj.goodsType = $("#cartForm  input[name=goodsType]").val();
 			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
 			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
-			obj.optCd = $("#cartForm  input[name=optCd]").val();
+			obj.itemCd = arrInfo[0];
+			obj.optCd = arrInfo[1];
 			obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
 			obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
-			obj.goodsType = $("#cartForm  input[name=goodsType]").val();
-			obj.cartGb = btnType;
 			obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
 			obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
 			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
 			params.push(obj);
 			params.push(obj);
-
-		}else if (goodsType == 'G056_S'){  //수정요
-		
-			let target=$('.select_custom.item_opt2');
-			let targetSize = target.length;	//구성품 갯수
-			let itemSize = 0;
-			target.each(function(){
-				if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' &&  !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
-					itemSize ++;
-				}
-			});
 			
 			
-			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
-				return false;
-			}
-			
-			target.each(function() {
-				var arrInfo = $(this).find('input[name=opt2]').val().split('|');	// 상품코드|사이즈|구성수량
-				
-				var obj = new Object();
-				obj.cartGb = btnType;
-				obj.goodsType = $("#cartForm  input[name=goodsType]").val();
-				obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
-				obj.itemCd = arrInfo[0];
-				obj.optCd = arrInfo[1];
-				obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
-				obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
-				obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
-				obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
-				obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-				params.push(obj);
-				
-			});
-		}
+		});
 		
 		
 		// 장바구니담기
 		// 장바구니담기
 		cfnAddCart(params);
 		cfnAddCart(params);
 	}
 	}
 	
 	
+	
+	// 선택상품 삭제
+	var fnSelectGoodsDel = function(optCd){
+		$('.result_'+optCd).remove();
+		fnSetTotalPrice();
+	}
+	
 	$(document).ready( function() {
 	$(document).ready( function() {
 		
 		
 		$('.timer_box').css('display', 'none');
 		$('.timer_box').css('display', 'none');
@@ -811,8 +838,8 @@
 			//$('.pd_delivery .cont_body').load('pd_delivery_pop.html');
 			//$('.pd_delivery .cont_body').load('pd_delivery_pop.html');
 			
 			
 			return false;
 			return false;
-		});						
-					
+		});
+		
 		//슬라이드 - 이 상품과 함께 본 상품 
 		//슬라이드 - 이 상품과 함께 본 상품 
 		var otherItemSwiper = new Swiper('.pd .pd_clickother .area_slider .swiper-container', {
 		var otherItemSwiper = new Swiper('.pd .pd_clickother .area_slider .swiper-container', {
 			slidesPerView: 5,
 			slidesPerView: 5,

+ 56 - 15
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -94,7 +94,7 @@
 								<div class="desc_top">
 								<div class="desc_top">
 									<a href="javascript:void(0);" class="btn_brand" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</a>
 									<a href="javascript:void(0);" class="btn_brand" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</a>
 									<button type="button" class="itemShare">상품 공유하기</button>
 									<button type="button" class="itemShare">상품 공유하기</button>
-									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
+									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								</div>
 								<div class="desc_info">
 								<div class="desc_info">
 									<div class="title_blk">
 									<div class="title_blk">
@@ -987,6 +987,12 @@
 			mcxDialog.alert(alertMsg);
 			mcxDialog.alert(alertMsg);
 			//return;
 			//return;
 		}
 		}
+		
+		if (ea <= 1){
+			$('.number_count').find('.minus').addClass('min_val');	
+		}else{
+			$('.number_count').find('.minus').removeClass('min_val');
+		}
 
 
 		fnSetTotalPrice();
 		fnSetTotalPrice();
 	}
 	}
@@ -1152,6 +1158,7 @@
 		}
 		}
 	}
 	}
 	
 	
+
 	// 옵션2 조회
 	// 옵션2 조회
 	var fnOption2 = function(ridx, goodsCd, optCd1, qty, minOrdQty, maxOrdQty ){
 	var fnOption2 = function(ridx, goodsCd, optCd1, qty, minOrdQty, maxOrdQty ){
 		let selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
 		let selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
@@ -1166,11 +1173,36 @@
 			if (result.dataList != null && result.dataList.length > 0) {
 			if (result.dataList != null && result.dataList.length > 0) {
 				let tag = "";
 				let tag = "";
 				let $obj = null;
 				let $obj = null;
-				$.each(result.dataList, function(idx, item) {
+				
+				if (selfGoodsYn == "Y"){
+					if (ridx == 1){
+						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_1');	
+					}else if (ridx == 2){
+						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_2');	
+					}else if (ridx == 3){
+						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_3');
+					}else if (ridx == 4){
+						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_4');
+					}else{
+						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_5');
+					}
+					
+				}else{
+					$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
+				}	
+				
+				$.each(result.dataList, function(idx, item) {debugger;
 					if (idx == 0){
 					if (idx == 0){
-						$obj = $('#goodsOpt2'+item.goodsCd);
-						$obj.append('');
+						//$obj = $('#goodsOpt2'+item.goodsCd);
+						//$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
+						
+						$obj.html('');
 						$('.form_field .select_custom.item_opt2.' +item.goodsCd ).attr('disabled', false)
 						$('.form_field .select_custom.item_opt2.' +item.goodsCd ).attr('disabled', false)
+						//------
+						tag += '<div class="combo">\n';
+						tag += '<div class="select">선택</div>\n';
+						tag += '<ul class="list">\n';
+						//------
 						tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
 						tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
 					}
 					}
 					let soldoutYn = ""; 
 					let soldoutYn = ""; 
@@ -1188,22 +1220,31 @@
 					tag += '</li>\n';
 					tag += '</li>\n';
 				});
 				});
 				
 				
+				if (!gagajf.isNull(tag)){
+					//------
+					tag += '</ul>\n';
+					tag += '</div>\n';
+					//------	
+				}
+				
+				
 				$obj.append(tag);
 				$obj.append(tag);
-				if (ridx == 1){
-					if (selfGoodsYn == "Y"){
+				if (selfGoodsYn == "Y"){
+					if (ridx == 1){
 						var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');	
 						var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');	
+					}else if (ridx == 2){
+						var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');	
+					}else if (ridx == 3){
+						var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
+					}else if (ridx == 4){
+						var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
 					}else{
 					}else{
-						var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
+						var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
 					}
 					}
-				}else if (ridx == 2){
-					var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');	
-				}else if (ridx == 3){
-					var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
-				}else if (ridx == 4){
-					var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
+					
 				}else{
 				}else{
-					var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
-				}
+					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
+				}	
 			}
 			}
 			
 			
 		});
 		});

+ 11 - 38
src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html

@@ -288,7 +288,7 @@
 											</div>
 											</div>
 											<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
 											<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
 												<th:block th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
 												<th:block th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
-												<li  th:onclick="fnOption1('Down', [[${goodsInfo.compsGoodsCd}]]);">
+												<li  th:onclick="fnOption1('Down', [[${goodsInfo.compsGoodsCd}]], [[${goodsInfo.currPrice}]] , [[${goodsInfo.selfGoodsYn}]]);">
 													<div class="item_prod">
 													<div class="item_prod">
 														<div class="item_state">
 														<div class="item_state">
 															<a href="javascript:void(0);" class="itemLink">
 															<a href="javascript:void(0);" class="itemLink">
@@ -302,6 +302,7 @@
 																	<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
 																	<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
 																</p>
 																</p>
 															</a>
 															</a>
+															<input type="hidden" name="selectGoods" th:attr="goodsNm=${'[상품'+status.count+']' +goodsInfo.goodsFullNm}, currPrice=${goodsInfo.currPrice}" />
 														</div>
 														</div>
 													</div>
 													</div>
 												</li>
 												</li>
@@ -332,61 +333,33 @@
 								</div>
 								</div>
 						</div>
 						</div>
 						<div class="opt_result">
 						<div class="opt_result">
-							<div class="result_item">
-								<div class="opt_header">
-									<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-									<span class="item_option">다크그레이/XXL</span>
-								</div>
-								<div class="number_count">
-									<span class="minus min_val"><em class="sr-only">감소</em></span>
-									<input type="text" name="" maxlength="3" style="ime-mode:disabled" value="1">
-									<span class="plus"><em class="sr-only">추가</em></span>
-								</div>
-								<div class="item_price">
-									<p><em>99,999,999</em>원</p>
-								</div>
-								<button type="button" class="btn_delete_item"><span>삭제</span></button>
-							</div>
-							<div class="result_item">
-								<div class="opt_header">
-									<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-									<span class="item_option">블루그레이/S</span>
-								</div>
-								<div class="number_count">
-									<span class="minus min_val"><em class="sr-only">감소</em></span>
-									<input type="text" name="" maxlength="3" style="ime-mode:disabled" value="1">
-									<span class="plus"><em class="sr-only">추가</em></span>
-								</div>
-								<div class="item_price">
-									<p><em>99,999,999</em>원</p>
-								</div>
-								<button type="button" class="btn_delete_item"><span>삭제</span></button>
-							</div>
 						</div>
 						</div>
 					</div>
 					</div>
 					<div class="price_box">
 					<div class="price_box">
 						<p class="number">
 						<p class="number">
-							총&nbsp;<span>99</span>개
+							총&nbsp;<span>0</span>개
 						</p>
 						</p>
 						<p class="price">
 						<p class="price">
 							<span>
 							<span>
-								99,999,999<em>원</em>
+								0<em>원</em>
 							</span>
 							</span>
 						</p>
 						</p>
 					</div>
 					</div>
 					<div class="btn_box">
 					<div class="btn_box">
 						<div class="btn_group_block ui_row">
 						<div class="btn_group_block ui_row">
+						<th:block  th:if="${goodsInfo.stockQty > 0}">
 							<div class="ui_col_6">
 							<div class="ui_col_6">
-								<button type="button" id="btn_add_cart" class="btn btn_dark btn_block"><span>쇼핑백</span></button>
+								<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 							</div>
 							</div>
 							<div class="ui_col_6">
 							<div class="ui_col_6">
-								<button type="button"  class="btn btn_primary btn_block" id=""><span>바로구매</span></button>
+								<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 							</div>
 							</div>
-						</div>
-						<div class="btn_group_block ui_row">
+						</th:block>
+						<th:block  th:unless="${goodsInfo.stockQty > 0}">
 							<div class="ui_col_12">
 							<div class="ui_col_12">
-								<button type="button" class="btn btn_dark btn_block" id="" disabled=""><span>SOLD OUT</span></button>
+								<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 							</div>
 							</div>
+						</th:block>
 						</div>
 						</div>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -36,21 +36,18 @@
                		</th:block>
                		</th:block>
                 </p>
                 </p>
                 
                 
-                
                 <p><strong>카테고리</strong>
                 <p><strong>카테고리</strong>
                 	<th:block th:each="CateData, CateStat : ${cpnDtlRefvalCateList}">
                 	<th:block th:each="CateData, CateStat : ${cpnDtlRefvalCateList}">
                 		[[${CateData.cateNm}]],
                 		[[${CateData.cateNm}]],
                 	</th:block>
                 	</th:block>
                 </p>
                 </p>
                 
                 
-                
                 <p><strong>상품</strong>
                 <p><strong>상품</strong>
                 	<th:block th:each="GoodsData, GoodsStat : ${cpnDtlRefvalApplyGoodsList}">
                 	<th:block th:each="GoodsData, GoodsStat : ${cpnDtlRefvalApplyGoodsList}">
                 		[[${GoodsData.goodsNm}]],
                 		[[${GoodsData.goodsNm}]],
                 	</th:block>
                 	</th:block>
                 </p>
                 </p>
                 
                 
-                
                 <p><strong>제외상품</strong>
                 <p><strong>제외상품</strong>
                 	<th:block th:each="ExceptData, ExceptStat : ${cpnDtlRefvalExceptGoodsList}">
                 	<th:block th:each="ExceptData, ExceptStat : ${cpnDtlRefvalExceptGoodsList}">
                 		[[${ExceptData.goodsNm}]],
                 		[[${ExceptData.goodsNm}]],

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

@@ -26,10 +26,11 @@
 				<div class="lnb">
 				<div class="lnb">
 							<div class="lnb_tit">
 							<div class="lnb_tit">
 						<h2>마이페이지</h2>
 						<h2>마이페이지</h2>
-					</div>
-					<div class="lnb_list">
+						<div class="lnb_list">
 						<ul id="mypageLnbList"></ul>
 						<ul id="mypageLnbList"></ul>
 					</div>
 					</div>
+					</div>
+					
 				</div>
 				</div>
 				<div class="cont">
 				<div class="cont">
 					<div class="sec_head">
 					<div class="sec_head">

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

@@ -14,6 +14,7 @@
  * VER  DATE         AUTHOR      DESCRIPTION
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
  * ===  ===========  ==========  =============================================
  * 1.0  2021.02.16   card007     최초 작성
  * 1.0  2021.02.16   card007     최초 작성
+ * 1.1  2021.03.23   card007     퍼블 수정
  *******************************************************************************
  *******************************************************************************
  -->
  -->
 <body>
 <body>
@@ -38,11 +39,14 @@
 				</div>
 				</div>
 				<div class="sec_body">
 				<div class="sec_body">
 					<th:block th:if="${orderList}" th:each="order, status : ${orderList}">
 					<th:block th:if="${orderList}" th:each="order, status : ${orderList}">
+						<input type="hidden" name="accountNo" th:value="${order.oneData.accountNo}"/>
+						<input type="hidden" name="accountNm" th:value="${order.oneData.accountNm}"/>
+						<input type="hidden" name="bankCd" th:value="${order.oneData.bankCd}"/>
 						<div class="part_goods">
 						<div class="part_goods">
 							<div class="goods_head">
 							<div class="goods_head">
 								<p th:unless="${order.giftPackYn == 'Y'}">주문일 <span th:text="${order.ordDt}"></span></p>
 								<p th:unless="${order.giftPackYn == 'Y'}">주문일 <span th:text="${order.ordDt}"></span></p>
 								<p th:if="${order.giftPackYn == 'Y'}">선물일 <span th:text="${order.ordDt}"></span></p>
 								<p th:if="${order.giftPackYn == 'Y'}">선물일 <span th:text="${order.ordDt}"></span></p>
-								<a href="javascript:void(0)" th:if="${allCanYn == 'Y'}" th:onclick="fnAllCancel([[${order.ordNo}]])">주문전체취소</a>
+								<li><a href="javascript:void(0)" th:if="${order.allCanYn == 'Y' and order.ordReqChgQty == 0}" onclick="fnAllCancel();">주문전체취소</a></li>
 							</div>
 							</div>
 							<div class="goods_cont">
 							<div class="goods_cont">
 								<!-- 주문상품 -->
 								<!-- 주문상품 -->
@@ -50,6 +54,8 @@
 									<div class="goods_info">
 									<div class="goods_info">
 										<div class="order_desc">
 										<div class="order_desc">
 											<div class="goods_box">
 											<div class="goods_box">
+												<input type="hidden" name="ordDtlNoArr" th:value="${ordDtl.ordDtlNo}"/>
+												<input type="hidden" name="cnclRtnReqQtyArr" th:value="${ordDtl.ordQty - ordDtl.cnclRtnQty}"/>
 												<div class="gd_item">
 												<div class="gd_item">
 													<a href="javascript:void(0)" th:attr="goodsCd=${ordDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 													<a href="javascript:void(0)" th:attr="goodsCd=${ordDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 														<span class="thumb">
 														<span class="thumb">
@@ -69,7 +75,8 @@
 												<div class="gd_opt">
 												<div class="gd_opt">
 													<div class="option_wrap">
 													<div class="option_wrap">
 														<span class="title sr-only">주문 옵션</span>
 														<span class="title sr-only">주문 옵션</span>
-														<span class="option" th:text="|${ordDtl.optCd1} / ${ordDtl.optCd2}|"></span>
+														<span class="option" th:if="${ordDtl.goodsType == 'G056_S'}" th:each="option, status : ${ordDtl.colorNmArr}" th:text="|${ordDtl.itemNmArr[status.index]} / ${option} / ${ordDtl.optCd2Arr[status.index]}|"></span>
+														<span class="option" th:unless="${ordDtl.goodsType == 'G056_S'}" th:text="|${ordDtl.colorNm} / ${ordDtl.optCd2}|"></span>
 													</div>
 													</div>
 												</div>
 												</div>
 												<div class="gd_calc">
 												<div class="gd_calc">
@@ -77,8 +84,8 @@
 														<span class="count"><em th:text="${ordDtl.ordQty - ordDtl.cnclRtnQty}"></em>개</span>
 														<span class="count"><em th:text="${ordDtl.ordQty - ordDtl.cnclRtnQty}"></em>개</span>
 													</p>
 													</p>
 													<p>
 													<p>
-														<span class="price_org"><em th:text="${#numbers.formatInteger(ordDtl.listPrice * (ordDtl.ordQty - ordDtl.cnclRtnQty), 1, 'COMMA')}"></em>원</span>
-														<span class="price_sale"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt, 1, 'COMMA')}"></em>원</span>
+														<span class="price_org"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+														<span class="price_sale"><em th:text="${#numbers.formatInteger(ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
 													</p>
 													</p>
 													<p>
 													<p>
 														<span class="point"><em th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정</span>
 														<span class="point"><em th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></em><stong>P</stong>&nbsp;적립예정</span>
@@ -436,395 +443,14 @@
 				<input type="hidden" name="ordNo"/>
 				<input type="hidden" name="ordNo"/>
 				<input type="hidden" name="ordDtlNo"/>
 				<input type="hidden" name="ordDtlNo"/>
 			</form>
 			</form>
-			<!--<div class="my_cont">
-				<div class="sec_head">
-					<h3>주문상세</h3>
-					<div class="od_detail">
-						(주문번호 : <span class="num" th:text="${ordNo}"></span>)
-					</div>
-					<button type="button" class="btn btn_default od_del_btn" onclick="fnDeleteOrder()"><span>주문 내역 삭제</span></button>
-				</div>
-				<div class="sec_body">
-					<div class="order_list" id="orderList">
-						<section class="order_row">
-							<th:block th:if="${orderList}" th:each="oneData, status : ${orderList}">
-								<div class="part_deliver">
-									<div class="tbl_tit">
-										&lt;!&ndash; 주문일/선물일 설정 &ndash;&gt;
-										<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
-										<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
-										&lt;!&ndash; //주문일/선물일 설정 &ndash;&gt;
-		
-										<span class="order_date" th:text="${oneData.ordDt}"></span>
-		
-										&lt;!&ndash; 배송구분 설정 &ndash;&gt;
-										<span class="order_label02" th:if="${oneData.shotDelv}">총알배송</span>
-										<span class="order_label01" th:if="${oneData.selfMall}">STYLE24 일반배송</span>
-										<span class="order_label01" th:if="${oneData.supplyMall}">업체직배송</span>
-										&lt;!&ndash; //배송구분 설정 &ndash;&gt;
-		&lt;!&ndash;								<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>&ndash;&gt;
-									</div>
-									<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}">
-										<div class="tbl type2">
-											<table>
-												<colgroup>
-													<col width="1020">
-													<col width="180">
-												</colgroup>
-												<tbody>
-												<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-													<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
-													<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
-													<input type="hidden" name="reviewSq" th:value="${ordDtl.reviewSq}"/>
-													<tr class="bundle_row">
-														<td>
-															<div class="info_item">
-																<div class="thumb_box">
-																	<a href="">
-																		<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
-																	</a>
-																</div>
-																<div class="info_box">
-																	<p class="od_name">
-																		<a href="">
-																			<span class="brand" th:text="${ordDtl.brandNm}"></span>
-																			<span class="name" th:text="${ordDtl.goodsNm}"></span>
-																		</a>
-																	</p>
-																	<p class="od_opt">
-																		<span class="option"><em th:text="${ordDtl.optCd1}"></em><em th:text="${ordDtl.optCd2}"></em></span>
-																		<span class="count">수량 <em th:text="${ordDtl.ordQty}"></em>개</span>
-																	</p>
-																	<button type="button" class="btn btn_dark cart_btn" onclick="fnCreateCart(this);">쇼핑백 담기</button>
-																</div>
-																<div class="info_calc">
-																	<p class="price">
-																		<span class="selling_price" th:text="|${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}원|"></span>
-																	</p>
-																	<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>p</p>
-																</div>
-															</div>
-														</td>
-														&lt;!&ndash; 주문 &ndash;&gt;
-														<td class="merge_row" th:unless="${oneData.giftPackYn == 'Y'}">
-															<div class="delivery">
-																<p class="dlvr_staus" th:text="${ordDtl.ordDtlStatNm}"></p>
-																<p class="dlvr_desc" th:if="${ordDtl.delvEddt}" th:text="|${ordDtl.delvEddt}일 도착|"></p>
-															</div>
-															<div class="tbl_btn_wrap case02">
-																<button type="button" class="btn btn_default btn_sm" onclick="fnCreateExchange(this, 'exchange');"><span>교환</span></button>
-																<button type="button" class="btn btn_default btn_sm" onclick="fnCreateCancel(this, 'cancel');"><span>반품/취소</span></button>
-		&lt;!&ndash;														<button type="button" class="btn btn_default btn_sm" th:if="${ordDtl.reviewSq == 0}" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰작성</span></button>&ndash;&gt;
-																<button type="button" class="btn btn_default btn_sm" th:if="${!order.review}" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰작성</span></button>
-															</div>
-														</td>
-														<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and #strings.isEmpty(ordDtl.recipBaseAddr)}">
-															<div class="delivery">
-																<p class="dlvr_staus c_primary">주소 입력 대기</p>
-																<p class="dlvr_desc" th:text="|남은 기간 ${ordDtl.giftLimitDay}일|"></p>
-																<p class="dlvr_desc" th:text="|(${ordDtl.giftLimitDt}까지)|"></p>
-															</div>
-															<div class="tbl_btn_wrap case02">
-																<button type="button" class="btn btn_dark btn_sm" onclick="fnReSendSms(this);"><span>SMS 재전송</span></button>
-															</div>
-														</td>
-														<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and !#strings.isEmpty(ordDtl.recipBaseAddr)}">
-															<div class="delivery">
-																<p class="dlvr_staus c_primary">선물 완료</p>
-																<p class="dlvr_desc" th:text="|(${ordDtl.giftCompleteDt})|"></p>
-															</div>
-															<div class="tbl_btn_wrap case02">
-															</div>
-														</td>
-													</tr>
-												</th:block>
-												</tbody>
-											</table>
-										</div>
-										&lt;!&ndash; 주문 &ndash;&gt;
-										<th:block th:unless="${oneData.giftPackYn == 'Y'}">
-											<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_00' or order.ordDtlStat == 'G013_10' or order.ordDtlStat == 'G013_11'}">
-												<span class="cf_txt">주문 완료 / 결제를 기다리고 있습니다.</span>
-											</div>
-											<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_20' or order.ordDtlStat == 'G013_30' or order.ordDtlStat == 'G013_35'}">
-												<span class="cf_txt">배송할 상품을 준비 중입니다.</span>
-											</div>
-											<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_40'}">
-												<span class="cf_txt">상품준비가 완료되어 곧 배송될 예정입니다.</span>
-											</div>
-											<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}">
-												<span class="cf_txt" th:text="|${order.shipCompNm} / ${order.invoiceNo}|"></span>
-												<button type="button" class="btn btn_primary" th:attr="ordNo=${oneData.ordNo}, invoiceNo=${order.invoiceNo}, shipCompCd=${order.shipCompCd}" onclick="fnGetDeliveryInfo(this)">배송조회</button>
-											</div>
-											<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_60'}">
-												<span class="cf_txt" th:text="|${order.purchaseConfirmDay}일 후 자동으로 구매확정|"></span>
-												<button type="button" class="btn btn_primary" onclick="fnDecideOrder(this);">구매확정 하기</button>
-											</div>
-											<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq == 0}">
-												<span class="cf_txt">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</span>
-												<button type="button" class="btn btn_primary" banner="banner" onclick="fnCreateReview(this, 'Y');">리뷰작성</button>
-											</div>
-											<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq > 0}">
-												<span class="cf_txt">주문내역 다시 구매하기 위해</span>
-												<button type="button" class="btn btn_primary" onclick="fnCreateCart(this, 'Y');">장바구니 담기</button>
-											</div>
-										</th:block>
-		
-										&lt;!&ndash; 선물 &ndash;&gt;
-										<th:block th:if="${oneData.giftPackYn == 'Y'}">
-											<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay >= 0}">
-												<span class="cf_txt" th:text="|${order.recipNm}님이 주소를 입력하기 전입니다. (입력기한 ${order.giftLimitDt})|"></span>
-											</div>
-											<div class="order_confirm" th:unless="${#strings.isEmpty(order.recipBaseAddr)}">
-												<span class="cf_txt" th:text="|${order.recipNm}님께 선물이 발송되었습니다.|"></span>
-											</div>
-											<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay < 0}">
-												<span class="cf_txt">주소입력 기한이 경과되어 선물이 취소 되었습니다.</span>
-											</div>
-										</th:block>
-									</th:block>
-								</div>
-							</th:block>
-		
-							&lt;!&ndash; 주문 없을 때 &ndash;&gt;
-							<th:block th:unless="${orderList}" th:each="oneData, status : ${orderList}">
-		
-							</th:block>
-						</section>
-						<section class="order_row" th:if="${paymentInfo.payMeans == 'G014_20'}">
-							<div class="order_tit">
-								<h3 class="subH3">무통장 입금 정보</h3>
-							</div>
-							<div class="tbl type1 row_tbl">
-								<table>
-									<colgroup>
-										<col width="*">
-									</colgroup>
-									<tbody>
-										<tr>
-											<td>
-												<div>
-													<span th:text="${paymentInfo.vaBank}"></span>(<span th:text="${paymentInfo.vaNm}"></span>)
-												</div>
-												<div>
-													<span th:text="${paymentInfo.vaNo}"></span>
-												</div>
-												<div>
-													<span th:text="${paymentInfo.vaDeadlineYmd}"></span><span th:text="${paymentInfo.vaDeadlineHms}"></span> 까지
-												</div>
-											</td>
-										</tr>
-									</tbody>
-								</table>
-							</div>
-						</section>
-						<section class="order_row">
-							<div class="order_tit">
-								<h3 class="subH3">주문 고객</h3>
-							</div>
-							<div class="tbl type1 row_tbl">
-								<table>
-									<colgroup>
-										<col width="*">
-									</colgroup>
-									<tbody>
-										<tr>
-											<td>
-												<div>
-													<span th:text="${orderInfo.ordNm}"></span>
-												</div>
-												<div>
-													<span th:text="${orderInfo.ordEmail}"></span>
-												</div>
-												<div>
-													<span th:text="${orderInfo.ordPhnno}"></span>
-												</div>
-											</td>
-										</tr>
-									</tbody>
-								</table>
-							</div>
-						</section>
-						<section class="order_row">
-							<div class="order_tit">
-								<h3 class="subH3">배송지 정보</h3>
-							</div>
-							<div class="tbl type1 row_tbl">
-								<table>
-									<colgroup>
-										<col width="*">
-									</colgroup>
-									<tbody>
-									<tr th:if="${deliveryAddrInfo.recipNm}">
-										<td th:text="${deliveryAddrInfo.recipNm}"><span class="sr-only">배송지명</span></td>
-									</tr>
-									<tr th:if="${${deliveryAddrInfo.recipBaseAddr}}">
-										<td th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"><span class="sr-only">배송 주소</span></td>
-									</tr>
-									<tr>
-										<td th:text="${deliveryAddrInfo.recipPhnno}"><span class="sr-only">휴대폰 번호</span></td>
-									</tr>
-									<tr>
-										<td>
-											<span class="tit c_primary">배송요청 사항</span>
-											<th:block th:text="${deliveryAddrInfo.delvMemo}"></th:block>
-											<button type="button" class="btn_popup" id="btn_rqstModify_pop" onclick="fnChangeDelvMemo();"><span>변경하기</span></button>
-										</td>
-									</tr>
-									</tbody>
-								</table>
-							</div>
-						</section>
-						<section class="order_row">
-							<div class="order_tit">
-								<h3 class="subH3">결제정보</h3>
-							</div>
-							<div class="order_amount">
-								<div class="tbl type3">
-									<table>
-										<colgroup>
-											<col width="33.33%">
-											<col width="33.33%">
-											<col width="*">
-										</colgroup>
-										<thead>
-										<tr>
-											<th>
-												<dl>
-													<dt>총 주문금액</dt>
-													<dd class="price" th:text="|${#numbers.formatInteger(orderAmtInfo.ordAmt + orderAmtInfo.delvFee, 1, 'COMMA')}원|"></dd>
-												</dl>
-												<i class="ico_calc minus"></i>
-											</th>
-											<th>
-												<dl>
-													<dt>총 할인금액</dt>
-													<dd class="price" th:text="|- ${#numbers.formatInteger(orderAmtInfo.totalDcAmt, 1, 'COMMA')}원|"></dd>
-												</dl>
-												<i class="ico_calc result"></i>
-											</th>
-											<th>
-												<dl>
-													<dt>결제금액</dt>
-													<dd class="price" data-weight="price" data-font="lato">
-														<span class="oder_total_price" th:text="${#numbers.formatInteger(orderAmtInfo.realOrdAmt, 1, 'COMMA')}"></span>원
-													</dd>
-												</dl>
-											</th>
-										</tr>
-										</thead>
-										<tbody>
-										<tr>
-											<td>
-												<dl>
-													<div>
-														<dt>상품금액</dt>
-														<dd th:text="|${#numbers.formatInteger(orderAmtInfo.ordAmt, 1, 'COMMA')}원|"></dd>
-													</div>
-													<div th:if="${orderAmtInfo.delvFee > 0}">
-														<dt>배송비</dt>
-														<dd th:text="|${#numbers.formatInteger(orderAmtInfo.delvFee, 1, 'COMMA')}원|"></dd>
-													</div>
-												</dl>
-											</td>
-											<td>
-												<dl>
-													<div th:if="${orderAmtInfo.cpn1DcAmt > 0}">
-														<dt>상품 할인(즉시 할인)</dt>
-														<dd th:text="|- ${#numbers.formatInteger(orderAmtInfo.cpn1DcAmt, 1, 'COMMA')}원|"></dd>
-													</div>
-													<div th:if="${orderAmtInfo.tmtb1DcAmt + orderAmtInfo.tmtb2DcAmt > 0}">
-														<dt>다다익선 할인</dt>
-														<dd th:text="|- ${#numbers.formatInteger(orderAmtInfo.tmtb1DcAmt + orderAmtInfo.tmtb2DcAmt, 1, 'COMMA')}원|"></dd>
-													</div>
-													<div th:if="${orderAmtInfo.cartCpnDcAmt + orderAmtInfo.goodsCpnDcAmt > 0}">
-														<dt>쿠폰 할인</dt>
-														<dd th:text="|- ${#numbers.formatInteger(orderAmtInfo.cartCpnDcAmt + orderAmtInfo.goodsCpnDcAmt, 1, 'COMMA')}원|">- 30,000원</dd>
-													</div>
-													<div th:if="${orderAmtInfo.prePntDcAmt > 0}">
-														<dt>선 포인트 할인</dt>
-														<dd th:text="|- ${#numbers.formatInteger(orderAmtInfo.prePntDcAmt, 1, 'COMMA')}원|"></dd>
-													</div>
-													<div th:if="${orderAmtInfo.pntDcAmt > 0}">
-														<dt>포인트 사용</dt>
-														<dd th:text="|- ${#numbers.formatInteger(orderAmtInfo.pntDcAmt, 1, 'COMMA')}원|"></dd>
-													</div>
-													<div th:if="${orderAmtInfo.gfcdUseAmt > 0}">
-														<dt>상품권 사용</dt>
-														<dd th:text="|- ${#numbers.formatInteger(orderAmtInfo.gfcdUseAmt, 1, 'COMMA')}원|"></dd>
-													</div>
-													&lt;!&ndash; 
-													<div th:if="${}">
-														<dt>마일리지 사용</dt>
-														<dd></dd>
-													</div>
-													<div th:if="${}">
-														<dt>제휴 할인</dt>
-														<dd></dd>
-													</div>
-													&ndash;&gt;
-												</dl>
-											</td>
-											<td>
-												<dl>
-													<div th:if="${orderAmtInfo.savePntAmt > 0}">
-														<dt>적립 예정 포인트</dt>
-														<dd th:text="|${#numbers.formatInteger(orderAmtInfo.savePntAmt, 1, 'COMMA')}P|"></dd>
-													</div>
-													<div>
-														<dt>결제방법</dt>
-														<dd>
-															&lt;!&ndash; TODO &ndash;&gt;
-															&lt;!&ndash; Style24 간편결제 처리 (STYLE24 간편결제 : STYLE24 간편결제명 / 카드사명 / 할부개월(일시불)) &ndash;&gt;
-															&lt;!&ndash; 실시간계좌이체, 무통장입금 현금영수증 신청여부 추가 &ndash;&gt;
-															&lt;!&ndash; 네이버페이 처리 (네이버 페이 : 네이버 페이) &ndash;&gt;
-															&lt;!&ndash; 카카오페이 처리 (카카오 페이 : 카카오 페이) &ndash;&gt;
-															&lt;!&ndash; PAYCO 처리 (PAYCO : PAYCO) &ndash;&gt;
-															<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_10'}" th:text="|실시간계좌이체|"></span>
-															<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_20'}" th:text="|무통장입금|"></span>
-															<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_30'}" th:text="|${paymentInfo.cardNm}/${paymentInfo.cardMips}|"></span>
-															<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_60'}">휴대폰결제</span>
-														</dd>
-													</div>
-													<th:block th:if="${paymentInfo.pgGb == 'KCP'}">
-														&lt;!&ndash; 신용카드 결제시 &ndash;&gt;
-														<div th:if="${paymentInfo.payMeans == 'G014_30'}">
-															<dt>&nbsp;</dt>
-															<dd>
-																<button type="button" class="btn btn_default" onclick="fnReceipt('card');"><span>신용카드 전표</span></button>
-															</dd>
-														</div>
-														&lt;!&ndash; //무통장 결제시 &ndash;&gt;
-														&lt;!&ndash; 무통장 결제시 &ndash;&gt;
-														<div th:if="${paymentInfo.payMeans == 'G014_10' or paymentInfo.payMeans == 'G014_20'}">
-															<dt>&nbsp;</dt>
-															<dd>
-																<button type="button" class="btn btn_default" onclick="fnReceipt('cash');"><span>현금영수증</span></button>
-															</dd>
-														</div>
-														&lt;!&ndash; //무통장 결제시 &ndash;&gt;
-													</th:block>
-													<th:block th:unless="${paymentInfo.pgGb == 'KCP'}">
-														<dt></dt>
-														<dd>NPAY등의 대체결제수단으로 결제시 해당 결제 플롯폼에서 영수증 확인이 가능합니다.</dd>
-													</th:block>
-												</dl>
-											</td>
-										</tr>
-										</tbody>
-									</table>
-								</div>
-							</div>
-						</section>
-					</div>
-				</div>
-			</div>-->
 			<!-- // CONT-BODY -->
 			<!-- // CONT-BODY -->
 		</div>
 		</div>
 	</div>
 	</div>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 <script th:inline="javascript">
 	let ordNo = [[${ordNo}]];
 	let ordNo = [[${ordNo}]];
+	let orderList = [[${orderList}]];
+	let paymentInfo = [[${paymentInfo}]];
 
 
 	$(document).ready(function() {
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
 		// 마이페이지 LNB 설정
@@ -834,6 +460,53 @@
 		fnSetMypageLocation('주문확인/배송조회', '_PAGE_MYPAGE_ORDER_LIST', '주문상세');
 		fnSetMypageLocation('주문확인/배송조회', '_PAGE_MYPAGE_ORDER_LIST', '주문상세');
 	});
 	});
 	
 	
+	// 전체취소 버튼 클릭 이벤트
+	var fnAllCancel = function() {
+		// 환불계좌 체크
+		let accountNo = $('input[name=accountNo]').val();
+		let accountNm = $('input[name=accountNm]').val();
+		let bankCd = $('input[name=bankCd]').val();
+
+		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_00' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+			// TODO
+			// 환불계좌 등록 팝업
+			
+			return false;
+		}
+
+		// 취소요청 데이터 설정
+		let url = '/mypage/cancel/all';
+		
+		// 주문상세번호 설정
+		let ordDtlNoArr = [];
+		$.each($('input[name=ordDtlNoArr]'), function(idx, item) {
+			ordDtlNoArr.push($(item).val());
+		});
+		
+		// 취소 수량 설정
+		let cnclRtnReqQtyArr = [];
+		$.each($('input[name=cnclRtnReqQtyArr]'), function(idx, item) {
+			cnclRtnReqQtyArr.push($(item).val());
+		});
+
+		// 전체 취소 처리
+		let data = {};
+		data.ordNo = ordNo;
+		data.chgReason = 'G686_10';
+		data.accountNo = accountNo;
+		data.accountNm = accountNm;
+		data.bankCd = bankCd;
+		data.isCustomer = 'Y';
+		data.reqGbn = 'cnclComplete';
+		data.ordDtlNoArr = ordDtlNoArr;
+		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
+		
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
+		});
+	}
 </script>
 </script>
 
 
 </th:block>
 </th:block>

+ 14 - 6
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -140,13 +140,13 @@
 								<div class="form_field">
 								<div class="form_field">
 									<label class="input_label sr-only">선택기간 시작</label>
 									<label class="input_label sr-only">선택기간 시작</label>
 									<div class="input_wrap">
 									<div class="input_wrap">
-										<input type="text" class="form_control period_datepicker hasDatepicker" value="" id="stDate" onchange="fnCheckPeriod(this);">
+										<input type="text" class="form_control period_datepicker" value="" id="stDate" onchange="fnCheckPeriod(this);">
 									</div>
 									</div>
 								</div>
 								</div>
 								<div class="form_field">
 								<div class="form_field">
 									<label class="input_label sr-only">선택기간 끝</label>
 									<label class="input_label sr-only">선택기간 끝</label>
 									<div class="input_wrap">
 									<div class="input_wrap">
-										<input type="text" class="form_control n_input period_datepicker hasDatepicker" value="" id="edDate" onchange="fnCheckPeriod(this);">
+										<input type="text" class="form_control n_input period_datepicker" value="" id="edDate" onchange="fnCheckPeriod(this);">
 									</div>
 									</div>
 								</div>
 								</div>
 								<button type="button" class="btn btn_dark btn_sm" onclick="fnSearchOrderList();"><span>조회</span></button>
 								<button type="button" class="btn btn_dark btn_sm" onclick="fnSearchOrderList();"><span>조회</span></button>
@@ -325,7 +325,7 @@
 		
 		
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 			$('#couponCnt').text(result.couponCnt);
 			$('#couponCnt').text(result.couponCnt);
-			$('#expiredSoonCouponCnt').text(result.expiredSoonCouponCnt + '장');
+			$('#expiredSoonCouponCnt').text(result.expiredSoonCouponCnt);
 		});
 		});
 	}
 	}
 	
 	
@@ -364,6 +364,7 @@
 	var fnCreateOrderList = function(param) {
 	var fnCreateOrderList = function(param) {
 		let tag = '';
 		let tag = '';
 		let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
 		let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
+		console.log(param);
 
 
 		if (param.orderList != null && param.orderList.length > 0) {
 		if (param.orderList != null && param.orderList.length > 0) {
 			$.each(param.orderList, function (idx, order) {
 			$.each(param.orderList, function (idx, order) {
@@ -405,7 +406,14 @@
 					tag += '					<div class="gd_opt">\n';
 					tag += '					<div class="gd_opt">\n';
 					tag += '						<div class="option_wrap">\n';
 					tag += '						<div class="option_wrap">\n';
 					tag += '							<span class="title sr-only">주문 옵션</span>\n';
 					tag += '							<span class="title sr-only">주문 옵션</span>\n';
-					tag += '							<span class="option">' + ordDtl.optCd1 + ' / ' + ordDtl.optCd2 + '</span>\n';
+					// 세트아이템 옵션 처리
+					if (ordDtl.goodsType == 'G056_S') {
+						$.each(ordDtl.colorNmArr, function (index2, option) {
+							tag += '							<span class="option">' + ordDtl.itemNmArr[index2] + ' / ' + option + ' / ' + ordDtl.optCd2Arr[index2] + '</span>\n';
+						});
+					} else {
+						tag += '							<span class="option">' + ordDtl.colorNm + ' / ' + ordDtl.optCd2 + '</span>\n';
+					}
 					tag += '						</div>\n';
 					tag += '						</div>\n';
 					tag += '					</div>\n';
 					tag += '					</div>\n';
 					tag += '					<div class="gd_calc">\n';
 					tag += '					<div class="gd_calc">\n';
@@ -413,8 +421,8 @@
 					tag += '							<span class="count"><em>' + (ordDtl.ordQty - ordDtl.cnclRtnQty) + '</em>개</span>\n';
 					tag += '							<span class="count"><em>' + (ordDtl.ordQty - ordDtl.cnclRtnQty) + '</em>개</span>\n';
 					tag += '						</p>\n';
 					tag += '						</p>\n';
 					tag += '						<p>\n';
 					tag += '						<p>\n';
-					tag += '							<span class="price_org"><em>' + (ordDtl.listPrice * (ordDtl.ordQty - ordDtl.cnclRtnQty)).addComma() + '</em>원</span>\n';
-					tag += '							<span class="price_sale"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt).addComma() + '</em>원</span>\n';
+					tag += '							<span class="price_org"><em>' + (ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt).addComma() + '</em>원</span>\n';
+					tag += '							<span class="price_sale"><em>' + (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt).addComma() + '</em>원</span>\n';
 					tag += '						</p>\n';
 					tag += '						</p>\n';
 					tag += '					</div>\n';
 					tag += '					</div>\n';
 					tag += '				</div>\n';
 					tag += '				</div>\n';

+ 562 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -0,0 +1,562 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MypageReviewFormWeb.html
+ * @desc    : 마이페이지 > 리뷰 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.24   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+		<div class="content myReviewWrite"> <!-- 페이지특정 클래스 = myReviewWrite -->
+				<div class="cont_body">
+					<!-- CONT-BODY -->
+					<div class="lnb">
+						<div class="lnb_tit">
+							<h2>마이페이지</h2>
+						</div>
+						<div class="lnb_list">
+							<ul id="mypageLnbList"></ul>
+						</div>
+					</div>
+					<div class="cont">
+						<div class="sec_head">
+							<h3 class="subH1">리뷰</h3>
+						</div>
+						<div class="sec_body">
+							<div class="com_info_txt">
+								<p class="tit">리뷰 안내</p>
+								<ul>
+									<li>일반 리뷰 작성 시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다!</li>
+									<li>월 최대 10,000 P까지 적립 가능합니다.(합산 후 월 1회 지급)</li>
+									<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다!</li>
+									<li>리뷰 작성시 욕설, 비방, 선정적인 내용등이 있을 경우 통보 없이 관리자에 의해 삭제 될 수 있습니다.</li>
+								</ul>
+							</div>
+							<th:block th:each="review, status : ${completeReviewList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+							<form class="form_wrap" id="reviewForm" th:action="@{'/mypage/review/save'}">
+								<input type="hidden" name="ordNo" th:value="${review.ordNo}">
+								<input type="hidden" name="ordDtlNo" th:value="${review.ordDtlNo}">
+								<input type="hidden" name="goodsCd" th:value="${review.goodsCd}">
+								<input type="hidden" name="custNo" th:value="${review.custNo}">
+								<h4 class="subH3">리뷰쓰기</h4>
+								<div class="part_goods">
+									<div class="goods_cont">
+										<!-- 주문상품 -->
+										
+										<div class="goods_info">
+											<div class="order_desc">
+												<div class="goods_box">
+													<div class="gd_item">	
+														<a href="">
+															<span class="thumb">
+																<img th:src="${imageUrl + '/' + review.sysImgNm}" width="100%" alt="">
+															</span>
+															<p>
+																<span class="buy_date"><em th:text="${review.payDt}"></em>&nbsp;구매</span>
+															</p>
+															<p>
+																<span class="brand" th:text="${review.brandEnm}"></span>
+																<!-- <span class="tag">STYLE24 일반배송</span> -->
+															</p>
+															<p>
+																<span class="name" th:text="${review.goodsNm}"></span>																
+															</p>
+														</a>
+													</div>
+													<div class="gd_opt">
+														<div class="option_wrap">
+															<span class="title sr-only">주문 옵션</span>
+															<span class="option">[[${review.optCd1}]]K&nbsp;/&nbsp;[[${review.optCd2}]]</span>
+														</div>
+													</div>
+												</div>
+											</div>
+										</div>
+										
+										<!-- //주문상품 -->
+									</div>
+								</div>			
+
+								<h4 class="subH3">별점 선택</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>   
+										<tr>
+											<th>
+												별점
+											</th>
+											<td>
+												<div class="input_starscore" id="star">
+													<input type="hidden" id="score" name="score">
+													<button type="button" id="starBtn"></button>
+													<button type="button" id="starBtn"></button>
+													<button type="button" id="starBtn"></button>
+													<button type="button" id="starBtn"></button>
+													<button type="button" id="starBtn"></button>
+												</div>
+											</td>
+										</tr>
+									</table>
+								</div>
+
+								<h4 class="subH3">키 / 몸무게</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>   
+										<tr>
+											<th>
+												키
+											</th>
+											<td>
+												<div class="input_my_physical">
+													<div class="form_field">
+														<div class="input_wrap">
+															<input type="text" class="form_control" placeholder="숫자만 입력해 주세요." data-valid-type="numeric" maxlength="3" id="height" name="height">
+															<span class="unit">cm</span>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												몸무게
+											</th>
+											<td>
+												<div class="input_my_physical">
+													<div class="form_field">
+														<div class="input_wrap">
+															<input type="text" class="form_control" placeholder="숫자만 입력해 주세요." data-valid-type="numeric" maxlength="3" id="weight" name="weight">
+															<span class="unit">kg</span>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+									</table>
+								</div>
+								
+								<!-- <th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B' or review.sizeGb == 'S'}"> --> 
+								<h4 class="subH3">상품 평가</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>  
+										<!-- <th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B' or review.sizeGb == 'S'}"> --> 
+										<tr>
+											<th>
+												사이즈
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="scoreSize" id="rdi_review_size1" value="1">
+															<label for="rdi_review_size1"><span>작음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreSize" id="rdi_review_size2" value="2">
+															<label for="rdi_review_size2"><span>딱맞음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreSize" id="rdi_review_size3" value="3">
+															<label for="rdi_review_size3"><span>큼</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												컬러
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="scoreColor" id="rdi_review_color1" value="1">
+															<label for="rdi_review_color1"><span>밝음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreColor" id="rdi_review_color2" value="2">
+															<label for="rdi_review_color2"><span>똑같음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreColor" id="rdi_review_color3" value="3">
+															<label for="rdi_review_color3"><span>어두움</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<!-- </th:block>
+										<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}"> --> 
+										<tr>
+											<th>
+												핏
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="scoreFit" id="rdi_review_fit1" value="1">
+															<label for="rdi_review_fit1"><span>슬림</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreFit" id="rdi_review_fit2" value="2">
+															<label for="rdi_review_fit2"><span>레귤러</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreFit" id="rdi_review_fit3" value="3">
+															<label for="rdi_review_fit3"><span>오버</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												두께감
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="scoreThick" id="rdi_review_thick1" value="1">
+															<label for="rdi_review_thick1"><span>얇음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreThick" id="rdi_review_thick2" value="2">
+															<label for="rdi_review_thick2"><span>적당함</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreThick" id="rdi_review_thick3" value="3">
+															<label for="rdi_review_thick3"><span>도톰함</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<!-- </th:block>
+										<th:block th:if="${review.sizeGb == 'S'}">  -->
+										<tr>
+											<th>
+												무게감
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="scoreWeight" id="rdi_review_weight1" value="1">
+															<label for="rdi_review_weight1"><span>가벼움</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreWeight" id="rdi_review_weight2" value="2">
+															<label for="rdi_review_weight2"><span>적당함</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreWeight" id="rdi_review_weight3" value="3">
+															<label for="rdi_review_weight3"><span>무거움</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												볼너비
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="scoreBall" id="rdi_review_width1" value="1">
+															<label for="rdi_review_width1"><span>작음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreBall" id="rdi_review_width2" value="2">
+															<label for="rdi_review_width2"><span>딱맞음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="scoreBall" id="rdi_review_width3" value="3">
+															<label for="rdi_review_width3"><span>큼</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<!-- </th:block> -->
+									</table>
+								</div>
+								<!-- </th:block> -->
+								<h4 class="subH3">고객님의 리뷰가 다른 고객들에게 도움이 될 수 있어요!</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>   
+										<tr>
+											<th>
+												리뷰내용
+											</th>
+											<td>
+												<div class="input_txt_review">
+													<div class="form_field">
+														<div class="input_wrap">
+															<textarea class="doc_review" name="reviewContent" id="reviewContent" cols="30" rows="10" placeholder="·&nbsp;리뷰 내용은 최소 10자 이상 입력해 주세요.&#13;&#10;·&nbsp;상품과 무관하거나 스팸, 음란, 불법적인 내용의 리뷰는 통보 없이 삭제되며, 지급한 포인트는 회수 될 수 있습니다.&#13;&#10;·&nbsp;리뷰 등록 후 관리자 승인이 필요한 경우 바로 노출이 되지 않을 수 있습니다." style="resize: none;"></textarea>
+															<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/500</p>			
+														</div> 
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												포토/영상 첨부
+											</th>
+											<td>
+												<div class="form_field">
+													<div class="input_wrap">
+														<!-- 이미지첨부 -->
+														<div class="form_field">
+															<div class="imgUpload">
+																<label for="fileAdd" class="fileAdd">첫번째업로드</label>
+																<input type="file" id="fileAdd" name="files[]">
+																<input type="hidden" name="file1OrgFileNm"/>
+																<input type="hidden" name="file1SysFileNm"/>
+																<input type="hidden" name="file2OrgFileNm"/>
+																<input type="hidden" name="file2SysFileNm"/>
+																<input type="hidden" name="file3OrgFileNm"/>
+																<input type="hidden" name="file3SysFileNm"/>
+																<input type="hidden" name="file4OrgFileNm"/>
+																<input type="hidden" name="file4SysFileNm"/>
+																<input type="hidden" name="file5OrgFileNm"/>
+																<input type="hidden" name="file5SysFileNm"/>
+																<input type="hidden" name="file6OrgFileNm"/>
+																<input type="hidden" name="file6SysFileNm"/>
+																<input type="hidden" name="file7OrgFileNm"/>
+																<input type="hidden" name="file7SysFileNm"/>
+																<input type="hidden" name="file8OrgFileNm"/>
+																<input type="hidden" name="file8SysFileNm"/>
+																<input type="hidden" name="file9OrgFileNm"/>
+																<input type="hidden" name="file9SysFileNm"/>
+																<input type="hidden" name="file10OrgFileNm"/>
+																<input type="hidden" name="file10SysFileNm"/>
+																
+															</div>
+														</div>
+														<!-- //이미지첨부 -->
+													</div> 
+												</div>
+												<div class="txt_info">
+													<ul>
+														<li>
+															최대 10개까지 등록 가능
+														</li>
+													</ul>
+												</div>
+											</td>
+										</tr>
+									</table>
+								</div>							
+
+								<div class="btn_footer_area">
+									<button type="button" class="btn btn_default btn_md" onclick="reviewCancel()"><span>취소</span></button>
+									<button type="button" id="btn_review_registration" class="btn btn_dark btn_md" onclick="reviewCreate()"><span>리뷰 등록</span></button>
+								</div>		
+							</form>	
+							</th:block>						
+						</div>
+					</div>
+					<!-- // CONT-BODY -->					
+				</div>
+			</div>
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+let reviewList = [[${completeReviewList}]];
+// 별점 class="on"
+var $starEls = $('#star button#starBtn');
+var rate = 0;
+
+$starEls.each(function (index, el) {
+    $(el).on('click', function () {
+        rating(index);
+        $("#score").attr("value",index+1);
+    });
+});
+
+function rating(score) {
+    $starEls.each(function (i, el) {
+        if (i <= score) {
+            $(el).addClass('on');
+        } else {
+            $(el).removeClass('on');
+        }
+    });
+
+    rate = score + 1;
+}
+
+// 리뷰  취소
+var reviewCancel = function() {
+	
+	mcxDialog.confirm('취소하시겠습니까"?', {
+        cancelBtnText: "취소",
+        sureBtnText: "확인",
+        sureBtnClick: function(){
+        	cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+        }
+    });
+}
+
+// 리뷰 등록
+var reviewCreate = function () {
+	
+	if($("#score").val()=='' || $("#score").val()==null){
+		mcxDialog.alert('별점을 선택하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=height]").val() == '' || $("#reviewForm input[name=height]").val() == null){
+		mcxDialog.alert('키를 입력하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=weight]").val() == '' || $("#reviewForm input[name=weight]").val() == null){
+		mcxDialog.alert('몸무게를 입력하세요.');
+		return;
+	}
+	
+	
+	if(reviewList[0].sizeGb == 'T' || reviewList[0].sizeGb == 'B' || reviewList[0].sizeGb == 'S'){
+		if($('#reviewForm input:radio[name=scoreSize]').prop('checked') == false){
+			mcxDialog.alert('상품 사이즈를 평가해주세요.');
+			return;
+		}
+		
+		if($('#reviewForm input:radio[name=scoreColor]').prop('checked') == false){
+			mcxDialog.alert('상품 컬러를 평가해주세요.');
+			return;
+		}
+	}
+	
+	if(reviewList[0].sizeGb == 'T' || reviewList[0].sizeGb == 'B'){
+		if($('#reviewForm input:radio[name=scoreFit]').prop('checked') == false){
+			mcxDialog.alert('상품 핏을 평가해주세요.');
+			return;
+		}
+		if($('#reviewForm input:radio[name=scoreThick]').prop('checked') == false){
+			mcxDialog.alert('상품 두께감을 평가해주세요.');
+			return;
+		}	
+	}
+	
+	if(reviewList[0].sizeGb == 'S' ){
+		if($('#reviewForm input:radio[name=scoreWeight]').prop('checked') == false){
+			mcxDialog.alert('상품 무게감을 평가해주세요.');
+			return;
+		}
+		
+		if($('#reviewForm input:radio[name=scoreBall]').prop('checked') == false){
+			mcxDialog.alert('상품 볼넓이를 평가해주세요.');
+			return;
+		}
+	}
+
+	if($('#reviewContent').val().length<10){
+		mcxDialog.alert("리뷰 내용을 10자 이상 입력해주세요.");
+		return;
+	}
+	
+	mcxDialog.confirm('리뷰를 등록하시겠습니까"?', {
+        cancelBtnText: "취소",
+        sureBtnText: "확인",
+        sureBtnClick: function(){
+        	gagajf.ajaxFormSubmit($('#reviewForm').prop('action'), '#reviewForm', fnSaveCallback);
+        }
+    });
+	
+}
+var fnSaveCallback = function (result) {
+	if(result.status == "200"){
+		mcxDialog.alert("상품 리뷰를 등록하였습니다.");
+		//포인트 예정금액 고지해야함
+		cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+	}
+}
+
+
+// 글자 카운팅
+$('#reviewContent').keyup(function (e){
+    var content = $(this).val();
+    $('.txt_cnt').html('<span id="review_cnt" class="c_primary">'+content.length+'</span>/500');    //글자수 실시간 카운팅
+    
+
+    if (content.length > 500){
+    	mcxDialog.alert("최대 500자까지 입력 가능합니다.");
+        $(this).val(content.substring(0, 500));
+        $('.txt_cnt').html('<span id="review_cnt" class="c_primary">500</span>/500');
+    }
+});
+
+$('#fileAdd').on('change', function() { fnChooseFile(this); });
+
+var fnChooseFile = function(obj) {
+	// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
+	var file = obj.files[0];
+	
+	if (!gagajf.isNull(file.size) && Number(file.size) > 10 * 1000000) {
+		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				$(obj).parent('.imgUpload').find('.removes').trigger('click');
+			}
+		});
+		return false;
+	}
+	
+	// 파일 업로드
+	gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+			, file
+			, function(result) {
+				// 업로드한 파일명 설정
+				$('input[name=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
+				$('input[name=' + obj.name + 'SysFileNm]').val(result.newFileName);
+			}
+	);
+}
+
+$(document).ready(function() {
+	
+	// 마이페이지 LNB 설정
+	fnSetMypageLnbList(7);
+
+	// 마이페이지 location 설정
+	fnSetMypageLocation('리뷰', '_PAGE_MYPAGE_REVIEW');
+	
+});
+</script>
+</th:block>
+
+</body>
+</html>

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

@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MypageReviewFormWeb.html
+ * @desc    : 마이페이지 > 리뷰 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.24   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+	<th:block layout:fragment="content">
+			<div class="content myReviewList"> <!-- 페이지특정 클래스 = myReviewList -->
+				<div class="cont_body">
+					<!-- CONT-BODY -->
+					<div class="lnb">
+					<div class="lnb_tit">
+						<h2>마이페이지</h2>
+					</div>
+					<div class="lnb_list">
+						<ul id="mypageLnbList"></ul>
+					</div>
+				</div>
+					<!-- <div class="lnb_list">
+						<ul id="mypageLnbList"></ul>
+					</div> -->
+					<div class="cont">
+						<div class="sec_head">
+							<h3 class="subH1">리뷰</h3>
+						</div>
+						<div class="sec_body">
+							<div class="com_info_txt">
+								<p class="tit">리뷰 안내</p>
+								<ul>
+									<li>일반 리뷰 작성 시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다!</li>
+									<li>월 최대 10,000 P까지 적립 가능합니다.(합산 후 월 1회 지급)</li>
+									<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다!</li>
+									<li>리뷰는 주문일 기준 90일간 작성이 가능합니다.</li>
+								</ul>
+							</div>
+							<div class="taps" id="tpasReview">
+								<div>
+									<ul>
+										<li id="completeReview"><a href="javascript:void(0);" >작성 가능한 리뷰<span th:text="'('+${#numbers.formatInteger(completeReviewCount,0,'COMMA')}+')'"></span></a></li>
+										<li id="alreadyReview"><a href="javascript:void(0);" >내가 쓴 리뷰<span>(2,405)</span></a></li>
+									</ul>
+								</div>
+							</div>
+							<div class="area_list" id="completeList">
+			
+								<!-- //주문번호 기준 상품 내역 -->	
+								<!-- 데이터 없을 시 -->
+																											
+							</div>
+									<div class="nodata">
+									<div class="txt_box">
+										<p>
+											작성 가능한 리뷰가 없습니다.<br>
+										</p>
+									</div>
+								</div>
+								<!-- //데이터 없을 시 -->		
+						</div>
+						<div class="sec_foot">
+							<div class="ui_row">
+								<ul class="pageNav" id="paging">
+								
+								</ul>
+							</div>
+						</div>
+						<form id="searchForm" name="searchForm" th:action="@{'/mypage/review/list'}" th:method="post">
+							<input type="hidden" name="pageNo" value="1" />
+							<input type="hidden" name="pageSize" value="10" />
+						</form>
+					</div>
+					<!-- // CONT-BODY -->					
+				</div>
+			</div>
+
+	<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+	<script th:inline="javascript">
+	// 작성가능한 리뷰 클릭 시 
+	$("#completeReview").click(function() {
+		$("#alreadyReview").removeClass("active");
+		$("#completeReview").addClass("active");
+		
+	})
+	
+	$("#alreadyReview").click(function() {
+		$("#completeReview").removeClass("active");
+		$("#alreadyReview").addClass("active");
+		
+	})
+	
+	$(document).ready(function() {
+
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(7);
+
+		// 마이페이지 location 설정
+		fnSetMypageLocation('리뷰', '_PAGE_MYPAGE_REVIEW');
+		
+		// Initialize a pagination
+		gagaPaging.init('searchForm', fnSearchCallback, 'paging', 10);
+		
+		// Load data
+		gagaPaging.load(1);
+		
+		// 작성가능한 리뷰표시
+		$("#completeReview").trigger('click');
+
+	
+	});
+	
+	// 주문 목록 조회 콜백
+	var fnSearchCallback = function(result) {
+		$('.nodata').css("display","none");
+		let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
+		$('#completeList').html('');
+		if (result.dataList != null && result.dataList.length > 0) {
+			$.each(result.dataList, function(idx, item) {
+				let html = '';
+				html += '<div class="part_goods">                                                                                                  ';
+				html += '	<div class="goods_cont">                                                                                              ';
+				html += '		<div class="goods_info">                                                                                          ';
+				html += '			<div class="order_desc">                                                                                      ';
+				html += '				<div class="goods_box">                                                                                   ';
+				html += '					<div class="gd_item">	                                                                              ';
+				html += '						<a href="">                                                                                       ';
+				html += '							<span class="thumb">                                                                          ';
+				html += '								<img th:src="' + imageUrl + '/' + item.sysImgNm + '"  width="100%" alt="">  ';
+				html += '							</span>                                                                                       ';
+				html += '							<p>                                                                                           ';
+				html += '								<span class="buy_date"><em>'+item.payDt+'</em>&nbsp;구매</span>             ';
+				html += '							</p>                                                                                          ';
+				html += '							<p>                                                                                           ';
+				html += '								<span class="brand">'+item.brandEnm+'</span>                               ';
+				html += '							</p>                                                                                          ';
+				html += '							<p>                                                                                           ';
+				html += '								<span class="name">'+item.goodsNm+'</span>									';
+				html += '							</p>                                                                                          ';
+				html += '						</a>                                                                                              ';
+				html += '					</div>                                                                                                ';
+				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 += '						</div>                                                                                            ';
+				html += '					</div>                                                                                                ';
+				html += '				</div>                                                                                                    ';
+				html += '				<div class="status_box">                                                                                  ';
+				html += '					<p>'+item.remainDt+'일 남음</p>                                                                                                  ';
+				html += '				</div>                                                                                                    ';
+				html += '				<div class="button_box">                                                                                  ';
+				html += '					<p><button type="button" class="btn btn_primary_line btn_sm" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+','+item.goodsCd+')"><span>리뷰쓰기</span></button></p>           ';
+				html += '				</div>                                                                                                    ';
+				html += '			</div>                                                                                                        ';
+				html += '		</div>                                                                                                            ';
+				html += '	</div>                                                                                                                ';
+				html += '</div>                                                                                                                    ';
+				$('#completeList').append(html);
+			})
+		}else{
+			$('.nodata').css("display","block");
+		}
+
+		// Create pagination
+		gagaPaging.createPagination(result.paging.pageable);
+	}
+	
+	var fnReviewCreate = function(obj1,obj2,obj3) {
+		let ordNo = obj1;
+		let ordDtlNo = obj2;
+		let goodsCd = obj3;
+		
+
+		
+		cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd);
+		
+	}
+	</script>
+	</th:block>
+
+</body>
+</html>

+ 104 - 69
src/main/webapp/WEB-INF/views/web/order/OrderCouponApplyPopWeb.html

@@ -8,84 +8,106 @@
 		</div>
 		</div>
 		<div class="modal-body">
 		<div class="modal-body">
 			<div class="pop_cont">
 			<div class="pop_cont">
-				<h6>상품쿠폰</h6>
-				<div class="area_item_coupon">
-					<th:block th:each="goods, i : ${goodsApplyCpnList}">
-						<th:block th:if="${goods.goodsCpnList.size() > 0}">
-							<div id="item1" class="apply_item">
-								<div class="item_gd">
-									<figure>
-										<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
-										<figcaption>
-											<div class="brand" th:text="${goods.brandEnm}+' '+${goods.brandKnm}"></div>
-											<div class="name" th:text="${goods.goodsNm}"></div>
-											<div class="option" th:each="opt, index : ${goods.itemNmArr}"></div>
-										</figcaption>
-									</figure>
-								</div>
-								<div class="form_field">
-									<div class="select_custom coupon_list">
-										<div class="combo">
-											<div class="select">
-												<div class="item_coupon"><p class="empty">선택</p></div>
-											</div>
-											<ul class="list">
-												<input type="hidden" name="cpnType" value="goodsCpn"/>
-												<input type="hidden" name="cpnCartSq" th:value="${goods.cartSq}"/>
-												<input type="hidden" name="custCpnSq" value="0"/>
-												<input type="hidden" name="cpnDcAmt" value="0"/>
-														
-												<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true"추가  -->
-												<th:block th:each="goodsCpn, k : ${goods.goodsCpnList}">
-													<li class="selected">
-														<div class="item_coupon">
-															<p class="name" th:text="${goodsCpn.cpnNm}"></p>
-															<p class="txt">
-																<th:block th:if="${goodsCpn.buyLimitAmt} > 0">
-																	<span th:text="${#numbers.formatInteger(goodsCpn.buyLimitAmt, 1, 'COMMA')}"></span>원 이상 구매시
-																</th:block> 
-																최대 <span th:text="${#numbers.formatInteger(goodsCpn.maxDcAmt, 1, 'COMMA')}"></span>원 할인
-															</p>
-															<p class="discount">
-																<span th:text="${#numbers.formatInteger(goodsCpn.cpnDcAmt, 1, 'COMMA')}"></span>원 할인
-															</p>
-														</div>
+				<!-- 상품쿠폰적용 -->
+				<th:block th:if="${goodsApplyCpnList.size() > 0}">
+					<h6>상품쿠폰</h6>
+					<div class="area_item_coupon">
+						<th:block th:each="goods, i : ${goodsApplyCpnList}">
+							<th:block th:if="${goods.goodsCpnList.size() > 0}">
+								<div class="apply_item goodsCpn">
+									<div class="item_gd">
+										<figure>
+											<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
+											<figcaption>
+												<div class="brand" th:text="${goods.brandEnm}+' '+${goods.brandKnm}"></div>
+												<div class="name" th:text="${goods.goodsNm}"></div>
+												<div class="option" th:each="colorNm, index : ${goods.colorNmArr}" th:text="${colorNm}+'/'+${goods.optCd2Arr[index.index]}"></div>
+											</figcaption>
+										</figure>
+									</div>
+									<div class="form_field">
+										<div class="select_custom coupon_list">
+											<div class="combo">
+												<div class="select">
+													<div class="item_coupon"></div>
+												</div>
+												<ul class="list">
+													<input type="hidden" name="cpnType" value="goodsCpn"/>
+													<input type="hidden" name="cpnCartSq" th:value="${goods.cartSq}"/>
+													<input type="hidden" name="custCpnSq" value="0"/>
+													<input type="hidden" name="cpnDcAmt" value="0"/>
+															
+													<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true"추가  -->
+													<th:block th:each="goodsCpn, k : ${goods.goodsCpnList}">
+														<li th:value="${goodsCpn.custCpnSq}" th:data="${goodsCpn.cpnDcAmt}">
+															<div class="item_coupon">
+																<p class="name" th:text="${goodsCpn.cpnNm}"></p>
+																<p class="txt">
+																	<th:block th:if="${goodsCpn.buyLimitAmt} > 0">
+																		<span th:text="${#numbers.formatInteger(goodsCpn.buyLimitAmt, 1, 'COMMA')}"></span>원 이상 구매시
+																	</th:block>
+																	<th:block th:if="${goodsCpn.maxDcAmt} > 0"> 
+																		최대 <span th:text="${#numbers.formatInteger(goodsCpn.maxDcAmt, 1, 'COMMA')}"></span>원 할인
+																	</th:block>
+																</p>
+																<p class="discount">
+																	<span th:text="${#numbers.formatInteger(goodsCpn.cpnDcAmt, 1, 'COMMA')}"></span>원 할인
+																</p>
+															</div>
+														</li>
+													</th:block>
+													<li value="">
+														<div class="item_coupon empty"><p class="empty">적용 안함</p></div>
 													</li>
 													</li>
-												</th:block>
-												<li>
-													<div class="item_coupon">
-														<p class="empty">적용 안함</p>
-													</div>
-												</li>
-											</ul>
+												</ul>
+											</div>
 										</div>
 										</div>
 									</div>
 									</div>
 								</div>
 								</div>
-							</div>
+							</th:block>
 						</th:block>
 						</th:block>
-					</th:block>
-				</div>
+					</div>
+				</th:block>
+				<!-- //상품쿠폰적용 -->
 				
 				
-				<h6>장바구니 쿠폰</h6>
-				<div class="area_cart_coupon">
-					<div class="form_field">
-						<div>
-							<input type="radio" name="rdi-cart-coupon" id="rdi-cart-coupon1"
-								value="" checked=""> <label for="rdi-cart-coupon1">
-								<div class="cart_coupon">
-									<p class="name">장바구니 쿠폰명1</p>
-									<p class="txt">
-										<span>30,000</span>원 이상 구매시 최대 <span>3,000</span>원 할인
-									</p>
-									<p class="discount">
-										<span>15,000</span>원 할인
-									</p>
+				<!-- 장바구니쿠폰적용 -->
+				<th:block th:if="${cartCpnList.size() > 0}">
+					<h6>장바구니 쿠폰</h6>
+					<div class="area_cart_coupon">
+						<div class="form_field">
+							<input type="hidden" name="cpnType" value="cartCpn"/>
+							<input type="hidden" name="custCpnSq" value="0"/>
+							<input type="hidden" name="cpnDcAmt" value="0"/>
+							
+							<th:block th:each="cartCpn, k : ${cartCpnList}">
+								<div class="cartCpn" th:value="${cartCpn.custCpnSq}">
+									<input type="hidden" name="dcWay" th:value="${cartCpn.dcWay}"/>
+									<input type="hidden" name="dcVal" th:value="${cartCpn.dcVal}"/>
+									<th:block th:each="cartCpnCartSq, kokok : ${cartCpn.cartCpnCartSqArr}"> 
+										<input type="hidden" name="cartCpnCartSq" th:value="${cartCpnCartSq}" />
+									</th:block>
+									
+									<input type="radio" name="rdi-cart-coupon" id="rdi-cart-coupon1" value="">
+									<label for="rdi-cart-coupon1">
+										<div class="cart_coupon">
+											<p class="name" th:text="${cartCpn.cpnNm}"></p>
+											<p class="txt">
+												<th:block th:if="${cartCpn.buyLimitAmt} > 0">
+													<span th:text="${#numbers.formatInteger(cartCpn.buyLimitAmt, 1, 'COMMA')}"></span>원 이상 구매시 
+												</th:block>
+												<th:block th:if="${cartCpn.maxDcAmt} > 0">
+													최대 <span th:text="${#numbers.formatInteger(cartCpn.maxDcAmt, 1, 'COMMA')}"></span>원 할인
+												</th:block>
+											</p>
+											<p class="discount"><span th:text="${#numbers.formatInteger(cartCpn.cpnDcAmt, 1, 'COMMA')}"></span>원 할인</p>
+										</div>
+									</label>
 								</div>
 								</div>
-							</label>
+							</th:block>
 						</div>
 						</div>
 					</div>
 					</div>
-				</div>
-				
+				</th:block>
+				<!-- //장바구니쿠폰적용 -->
 			</div>
 			</div>
 		</div>
 		</div>
 		<div class="modal-footer">
 		<div class="modal-footer">
@@ -98,4 +120,17 @@
 </div>
 </div>
 <a href="#close-modal" rel="modal:close" id="couponModifyPop_close" class="close-modal">Close</a>
 <a href="#close-modal" rel="modal:close" id="couponModifyPop_close" class="close-modal">Close</a>
 
 
+<script th:inline="javascript">
+//컨텐츠 호출
+$(document).ready( function() {
+	//상품쿠폰 combo 리스트 설정
+	$(".goodsCpn .select_custom.coupon_list").each(function(){
+		var od_coupon_modify_selecter1 = new sCombo($(this));
+	});
+});
+//팝업 - 할인혜택 > 상품쿠폰변경 선택           
+//var od_coupon_modify_selecter1 = new sCombo('.od_pop.couponModify_pop #item1 .select_custom.coupon_list');
+//var od_coupon_modify_selecter2 = new sCombo('.od_pop.couponModify_pop #item2 .select_custom.coupon_list');
+</script>
+
 </html>
 </html>

+ 9 - 6
src/main/webapp/WEB-INF/views/web/order/OrderDcAmtInfoWeb.html

@@ -58,6 +58,7 @@
 				</dd>
 				</dd>
 			</div>
 			</div>
 			
 			
+			<!-- 배송비쿠폰 -->
 			<th:block th:if="${delvCpnList.size() > 0}">
 			<th:block th:if="${delvCpnList.size() > 0}">
 				<div>
 				<div>
 					<dt>배송비 쿠폰</dt>
 					<dt>배송비 쿠폰</dt>
@@ -79,13 +80,11 @@
 												<!-- <li class="selected"> -->
 												<!-- <li class="selected"> -->
 												<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.dcVal}" th:delvfeecd="${delvCpn.delvFeeCd}" th:delvfee="${delvCpn.delvFee}">
 												<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.dcVal}" th:delvfeecd="${delvCpn.delvFeeCd}" th:delvfee="${delvCpn.delvFee}">
 													<div class="dlvr_coupon">
 													<div class="dlvr_coupon">
-														<input type="hidden" name="dcWay" th:value="${cartCpn.dcWay}"/>
-														<input type="hidden" name="dcVal" th:value="${cartCpn.dcVal}"/>
+														<input type="hidden" name="dcWay" th:value="${delvCpn.dcWay}"/>
+														<input type="hidden" name="dcVal" th:value="${delvCpn.dcVal}"/>
+														
 														<p class="name" th:text="${delvCpn.cpnNm}"></p>
 														<p class="name" th:text="${delvCpn.cpnNm}"></p>
-														<!-- 
-														<p class="txt"><span th:text="${cartCpn.buyLimitAmt}">30,000</span>원 이상 구매시 최대 <span th:text="${cartCpn.maxDcAmt}">3,000</span>원 할인</p>
-														 -->
-														<p class="discount"><span th:text="${delvCpn.dcVal}"></span>원 할인</p>
+														<p class="discount"><span th:text="${#numbers.formatInteger(delvCpn.dcVal, 1, 'COMMA')}"></span>원 할인</p>
 													</div>
 													</div>
 												</li>
 												</li>
 											</th:block>
 											</th:block>
@@ -100,6 +99,7 @@
 					</dd>
 					</dd>
 				</div>
 				</div>
 			</th:block>
 			</th:block>
+			<!-- //배송비쿠폰 -->
 		</dl>
 		</dl>
 	</div>
 	</div>
 	
 	
@@ -221,6 +221,9 @@ $(document).ready( function() {
 		}
 		}
 		
 		
 	}
 	}
+	
+	//할인쿠폰(배송비) 선택           
+    var od_dlvrfee_coupon_selecter = new sCombo('.od .odPayment .dlvr_fee_box .select_custom.coupon_list');
 });
 });
 </script>
 </script>
 </html>
 </html>

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

@@ -497,7 +497,7 @@ $(document).ready( function() {
 	custemerInfoSet();
 	custemerInfoSet();
 	
 	
 	// 999. 개발화면정보설정
 	// 999. 개발화면정보설정
-	var devTemp = false;
+	var devTemp = true;
 	var arr = []
 	var arr = []
 	arr[0] = "orderInfo";
 	arr[0] = "orderInfo";
 	arr[1] = "freegiftInfo";
 	arr[1] = "freegiftInfo";
@@ -984,6 +984,9 @@ var dcAmtInfoSet = function() {
 					},
 					},
 					success 	: function(result) {
 					success 	: function(result) {
 						$("#couponModifyPop").html(result);
 						$("#couponModifyPop").html(result);
+						
+						// 1.8.2 쿠폰적용초기화(할인율최고)
+						custCpnInit();
 					}
 					}
 				});
 				});
 				
 				
@@ -991,12 +994,10 @@ var dcAmtInfoSet = function() {
 				$("#btn_couponModify_pop").on("click", function(){
 				$("#btn_couponModify_pop").on("click", function(){
 					$("#couponModifyPop").modal("show");
 					$("#couponModifyPop").modal("show");
 				});
 				});
+
 				
 				
 				
 				
 				/*
 				/*
-				// 1.8.2 쿠폰적용초기화(할인율최고)
-				custCpnInit();
-				
 				// 1.8.3 쿠폰 SELECT BOX 기능 설정(js적용)
 				// 1.8.3 쿠폰 SELECT BOX 기능 설정(js적용)
 				$('.select_custom.type1').each(function(index){
 				$('.select_custom.type1').each(function(index){
 					var selecter01 	= new sCombo($(this));
 					var selecter01 	= new sCombo($(this));
@@ -1176,7 +1177,7 @@ var dcAmtInfoSet = function() {
 var custCpnInit = function() {
 var custCpnInit = function() {
 	
 	
 	// 쿠폰적용없음적용
 	// 쿠폰적용없음적용
-	$(".select_custom.type1").each(function(index){
+	$(".goodsCpn").each(function(index){
 		// select box 쿠폰 적용
 		// select box 쿠폰 적용
 		var cpnCartSq = $(this).find("input[name='cpnCartSq']").val();
 		var cpnCartSq = $(this).find("input[name='cpnCartSq']").val();
 		
 		
@@ -1191,35 +1192,38 @@ var custCpnInit = function() {
 		$(this).find("input[name='custCpnSq']").val("0");
 		$(this).find("input[name='custCpnSq']").val("0");
 		$(this).find("input[name='cpnDcAmt']").val("0");
 		$(this).find("input[name='cpnDcAmt']").val("0");
 		
 		
-		$(this).find(".select").text("선택없음");
-		$(this).find(".cp_discount").css("display", "none");
+		// 적용안함 적용
+		var emptyHtml = $(this).find("ul li .item_coupon.empty").html();
+		$(this).find(".select .item_coupon").html(emptyHtml);
 	});
 	});
 	
 	
 	// 최대할인율 쿠폰적용
 	// 최대할인율 쿠폰적용
-	$('.select_custom.type1').each(function(index){
-		cpnIndex 		= 0;
+	$('.goodsCpn').each(function(index){
 		cpnApplyTemp 	= false;
 		cpnApplyTemp 	= false;
 		
 		
 		// select 박스 반복문 실행
 		// select 박스 반복문 실행
 		$(this).find("ul li").each(function(i){
 		$(this).find("ul li").each(function(i){
-			cpnIndex++;
-			
-			// 1이상부터 중복 체크
 			if (cpnApplyTemp == false) {
 			if (cpnApplyTemp == false) {
-				if (cpnIndex > 1) {
-					if (custCpnDuplicationCheck($(this).prop("value"), index)) {
-						// 쿠폰적용
-						custCpnApply($(this));
-						// 쿠폰할인적용
-						cpnApplyTemp = true;
-					}
+				if (custCpnDuplicationCheck($(this).prop("value"), index)) {
+					// 쿠폰적용
+					custCpnApply($(this));
+					// 쿠폰할인적용
+					cpnApplyTemp = true;
 				}
 				}
 			}
 			}
 		});
 		});
 	});
 	});
 	
 	
+	// 장바구니쿠폰 초기화 적용
+	$(".cartCpn").each(function(index) {
+		if (index == 0) {
+			// 쿠폰적용
+			custCpnApply($(this));
+		}
+	});
+	
 	// 포인트기능 리렛
 	// 포인트기능 리렛
-	pntDcAmtReset();
+	//pntDcAmtReset();
 }
 }
 
 
 // 1.10 쿠폰중복사용체크
 // 1.10 쿠폰중복사용체크
@@ -1228,7 +1232,7 @@ var custCpnDuplicationCheck = function(custCpnSq, index) {
 	var cnt 		= 0;
 	var cnt 		= 0;
 
 
 	// 쿠폰중본사용체크
 	// 쿠폰중본사용체크
-	$("input[name='custCpnSq']").each(function(i){
+	$(".goodsCpn input[name='custCpnSq']").each(function(i){
 		if (index != i) {
 		if (index != i) {
 			selCustSq = $(this).val();
 			selCustSq = $(this).val();
 			if (selCustSq == custCpnSq) {
 			if (selCustSq == custCpnSq) {
@@ -1250,30 +1254,20 @@ var custCpnDuplicationCheck = function(custCpnSq, index) {
 // 1.11 쿠폰중복체크 후 적용가능
 // 1.11 쿠폰중복체크 후 적용가능
 var custCpnApply = function(obj) {
 var custCpnApply = function(obj) {
 	// select box 쿠폰 적용
 	// select box 쿠폰 적용
-	var cpnType 	= obj.parent().parent().find("input[name='cpnType']").val();
+	var cpnType 	= obj.parent().find("input[name='cpnType']").val();
 	
 	
 	// 상품쿠폰적용
 	// 상품쿠폰적용
 	if (cpnType == "goodsCpn") {
 	if (cpnType == "goodsCpn") {
-		// 적용된 할인금액 text 설정 
-		var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
-		obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
-		
-		var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
-		
-		// 장바구니시퀀스 체크
-		$(".cartSq").each(function(){
-			if (cpnCartSq == $(this).text()) {
-				$(this).parent().find(".goodsCpnSq").text(obj.prop("value"));			// 상품쿠폰시퀀스
-				$(this).parent().find(".goodsCpnDcAmt").text(obj.attr("data"));			// 상품쿠폰할인금액
-			}
-		});
-		
-		obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+		// 적용안함 적용
+		var itemHtml = obj.find(".item_coupon").html();
+		obj.parent().parent().find(".select .item_coupon").html(itemHtml);
+		obj.parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+		obj.parent().find("input[name='custCpnSq']").val(obj.attr("value"));
 	} 
 	} 
 	// 장바구니쿠폰적용
 	// 장바구니쿠폰적용
 	else if (cpnType == "cartCpn") {
 	else if (cpnType == "cartCpn") {
-		var dcWay 				= obj.parent().find("input[name='dcWay']").val();
-		var dcVal 				= obj.parent().find("input[name='dcVal']").val();
+		var dcWay 				= obj.find("input[name='dcWay']").val();
+		var dcVal 				= obj.find("input[name='dcVal']").val();
 		var cartCpnDcSumAmt		= 0;
 		var cartCpnDcSumAmt		= 0;
 		var tempSumAmt			= 0;
 		var tempSumAmt			= 0;
 		var cartSqLen			= $(".cartSq").length;
 		var cartSqLen			= $(".cartSq").length;
@@ -1297,7 +1291,7 @@ var custCpnApply = function(obj) {
 					tempSumAmt			= tempSumAmt + tempAmt; 
 					tempSumAmt			= tempSumAmt + tempAmt; 
 					
 					
 					// 할인율일때 할인금액 
 					// 할인율일때 할인금액 
-					if (dcWay == "G240_20") {
+					if (dcWay == "G240_11") {
 						cartCpnDcAmt = (tempAmt * dcVal) / 100;
 						cartCpnDcAmt = (tempAmt * dcVal) / 100;
 						cartCpnDcSumAmt = cartCpnDcSumAmt + cartCpnDcAmt;
 						cartCpnDcSumAmt = cartCpnDcSumAmt + cartCpnDcAmt;
 						
 						
@@ -1338,20 +1332,20 @@ var custCpnApply = function(obj) {
 							leftAmt 		= leftAmt - cartCpnDcAmt;
 							leftAmt 		= leftAmt - cartCpnDcAmt;
 						}
 						}
 						
 						
-						$(this).parent().find(".cartCpnSq").text(obj.prop("value"));
+						$(this).parent().find(".cartCpnSq").text(obj.attr("value"));
 						$(this).parent().find(".cartCpnDcAmt").text(cartCpnDcAmt);
 						$(this).parent().find(".cartCpnDcAmt").text(cartCpnDcAmt);
 						
 						
 						index++;
 						index++;
 					}
 					}
 				});
 				});
 			});
 			});
-		} 
-		
-		obj.parent().parent().find("input[name='cpnDcAmt']").val(cartCpnDcSumAmt);
+		}
 		
 		
-		var dcAmtStr = "- " + cartCpnDcSumAmt.addComma() + " 원 할인적용";
-		obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+		obj.find("input[name=rdi-cart-coupon]").prop("checked", true);
+		obj.parent().find("input[name=cpnDcAmt]").val(cartCpnDcSumAmt);
+		obj.parent().find("input[name=custCpnSq]").val(obj.attr("value"));
 	}
 	}
+	/*
 	// 배송비쿠폰적용
 	// 배송비쿠폰적용
 	else if (cpnType == "delvCpn") {
 	else if (cpnType == "delvCpn") {
 		var delvFee 		= parseInt(obj.attr("delvfee"));
 		var delvFee 		= parseInt(obj.attr("delvfee"));
@@ -1376,7 +1370,6 @@ var custCpnApply = function(obj) {
 		$(".delvCpnDcSumAmt").text(obj.attr("data"));
 		$(".delvCpnDcSumAmt").text(obj.attr("data"));
 				
 				
 		// 배송비쿠폰 테이블 적용
 		// 배송비쿠폰 테이블 적용
-		
 		$(".delvFeeCd").each(function(){
 		$(".delvFeeCd").each(function(){
 			if ($(this).text() == delvFeeCd) {
 			if ($(this).text() == delvFeeCd) {
 				$(this).parent().find(".delvCpnSq").text(obj.prop("value"));
 				$(this).parent().find(".delvCpnSq").text(obj.prop("value"));
@@ -1384,20 +1377,22 @@ var custCpnApply = function(obj) {
 			}
 			}
 		});
 		});
 	}
 	}
+	*/
 	
 	
 	// select box 쿠폰 적용 (공통적용)
 	// select box 쿠폰 적용 (공통적용)
-	obj.parent().parent().find("input[name='custCpnSq']").val(obj.prop("value"));
-	obj.parent().parent().find(".select").text(obj.text());
+	obj.parent().find("input[name='custCpnSq']").val(obj.prop("value"));
 	
 	
 	// 선택된 할인금액 노출
 	// 선택된 할인금액 노출
-	obj.parent().parent().parent().parent().parent().find(".cp_discount").css("display", "block");
+	//obj.parent().parent().parent().parent().parent().find(".cp_discount").css("display", "block");
 	
 	
 	// 포인트기능 리렛
 	// 포인트기능 리렛
-	pntDcAmtReset();
+	//pntDcAmtReset();
+	
 }
 }
 
 
 // 1.12 쿠폰중복체크 후 적용불가
 // 1.12 쿠폰중복체크 후 적용불가
 var custCpnNotApply = function(obj) {
 var custCpnNotApply = function(obj) {
+	/*
 	// 이전에 등록된 쿠폰시퀀스  
 	// 이전에 등록된 쿠폰시퀀스  
 	var custCpnSq = obj.parent().parent().find("input[name='custCpnSq']").val();
 	var custCpnSq = obj.parent().parent().find("input[name='custCpnSq']").val();
 
 
@@ -1416,10 +1411,12 @@ var custCpnNotApply = function(obj) {
 	
 	
 	// 포인트기능 리렛
 	// 포인트기능 리렛
 	pntDcAmtReset();
 	pntDcAmtReset();
+	*/
 }
 }
 
 
 // 1.13 쿠폰 선택없음 기능 구현
 // 1.13 쿠폰 선택없음 기능 구현
 var cpnApplyDel = function(obj) {
 var cpnApplyDel = function(obj) {
+	/*
 	// 쿠폰타입(상품쿠폰, 장바구니쿠폰, 배송비쿠폰)
 	// 쿠폰타입(상품쿠폰, 장바구니쿠폰, 배송비쿠폰)
 	var cpnType = obj.parent().parent().find("input[name='cpnType']").val();
 	var cpnType = obj.parent().parent().find("input[name='cpnType']").val();
 	
 	
@@ -1468,6 +1465,7 @@ var cpnApplyDel = function(obj) {
 	if ($("#chk-maxdisc").is(":checked")) {
 	if ($("#chk-maxdisc").is(":checked")) {
 		$("#chk-maxdisc").attr("checked", false);
 		$("#chk-maxdisc").attr("checked", false);
 	}
 	}
+	*/
 }
 }
 
 
 // 1.14 선포인트리셋기능 (사용안함)
 // 1.14 선포인트리셋기능 (사용안함)

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

@@ -46,9 +46,11 @@
 									src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
 									src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
 								<figcaption>
 								<figcaption>
 									<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
 									<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
-									<div class="name" th:text="${goods.goodsNm}"></div>
-									<div class="option" th:each="opt, index : ${goods.itemNmArr}">
-										<span th:text="${goods.optCdArr[index.index]}"></span> 
+									<div class="name" th:text="${goods.goodsNm}"></div>									
+									<div class="option" th:each="colorNm, index : ${goods.colorNmArr}">
+										<span th:text="${colorNm}+'/'+${goods.optCd2Arr[index.index]}"></span> 
+									</div>
+									<div class="option">
 										<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
 										<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
 									</div>
 									</div>
 									<div class="price">
 									<div class="price">
@@ -56,7 +58,7 @@
 											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
 											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
 										</th:block>
 										</th:block>
 										<th:block th:if="${goods.tmtbDcAmt} < 1">
 										<th:block th:if="${goods.tmtbDcAmt} < 1">
-											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+											<span class="selling_price"  th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.goodsQty, 1, 'COMMA')}"></span>
 										</th:block>
 										</th:block>
 									</div>
 									</div>
 								</figcaption>
 								</figcaption>

+ 41 - 5
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -193,7 +193,7 @@
 									<div class="swiper-slide">
 									<div class="swiper-slide">
 										<a th:onclick="planDetailSearch([[${PlanData.planSq}]])">
 										<a th:onclick="planDetailSearch([[${PlanData.planSq}]])">
 											<div class="thumb">
 											<div class="thumb">
-												<img th:src="${@environment.getProperty('domain.image')+'/planning/'+PlanData.mainPimg}" alt="${PlanData.planNm}">
+												<img th:src="${@environment.getProperty('domain.image')+PlanData.mainPimg}" alt="${PlanData.planNm}">
 											</div>
 											</div>
 											<div class="txt">
 											<div class="txt">
 												<span class="brand" th:if="${PlanData.cnt > 1}" th:text="${PlanData.brand}+' 외'"></span>
 												<span class="brand" th:if="${PlanData.cnt > 1}" th:text="${PlanData.brand}+' 외'"></span>
@@ -212,6 +212,8 @@
 				</th:block>
 				</th:block>
 			</div>
 			</div>
 		</div>
 		</div>
+		
+	<div class="modal fade dp_coupon_pop"  id="coupon_modal_02" tabindex="-1" role="dialog"	aria-labelledby="PopupBasicLabel" aria-hidden="true"></div>
 		<!-- // container -->
 		<!-- // container -->
 <script th:inline="javascript">
 <script th:inline="javascript">
 let review = [[${reviewInfo}]];
 let review = [[${reviewInfo}]];
@@ -327,8 +329,7 @@ if(coupon != null || coupon != ''){
 		html += '						</p>';
 		html += '						</p>';
 		html += '					</div>';
 		html += '					</div>';
 		if (coupon[i].couponStat == '쿠폰받기') {
 		if (coupon[i].couponStat == '쿠폰받기') {
-			html += '					<button type="button"';
-			html += '						class="btn btn_dark btn_block btn_coupon_down">';  /* btn_coupon_done */
+			html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+coupon[i].cpnId+')">';  /* btn_coupon_done */
 			html += '						<span>쿠폰받기</span>';								/* 받기완료  */
 			html += '						<span>쿠폰받기</span>';								/* 받기완료  */
 			html += '					</button>';			
 			html += '					</button>';			
 		}else{
 		}else{
@@ -376,7 +377,7 @@ if(image != null || image != ''){
 	
 	
 	for (var i = 0; i < image.length; i++) {
 	for (var i = 0; i < image.length; i++) {
 		html += '                	<div class="swiper-slide">';
 		html += '                	<div class="swiper-slide">';
-		html += '                    	<img alt="" src="'+ imgUrl +'/planning/'+image[i].itemVal +'">';
+		html += '                    	<img alt="" src="'+ imgUrl + image[i].itemVal +'">';
 		html += '                	</div>';
 		html += '                	</div>';
 	}
 	}
 	html += '            	</div>';
 	html += '            	</div>';
@@ -527,9 +528,44 @@ if(goods2 != null || goods2 != ''){
 		
 		
 }
 }
 
 
+//사용안내 모달
+var useInfoCoupon = function (id) {
+	 $.ajax( {
+		type		: "GET",
+		url 		: '/mypage/coupon/detailPop?cpnId='+ id,
+		dataType 	: 'html',
+		success 	: function(result) {
+			if (result != null) {
+				$("#coupon_modal_02").html(result);
+				$("#coupon_modal_02").modal("show");
+			}
+		}
+	});
+	
+	return false; 
+}
+
+// 쿠폰 다운로드
+	var fnPlanCouponDown = function(obj){
+	
+		if (!cfCheckLogin()) {
+			cfnGoToPage(_PAGE_LOGIN);
+			return false;
+		}
+		
+		let cpnId = obj;
+		gagajf.ajaxJsonSubmit(_PAGE_PLANNING_CPN_DOWNLOAD, JSON.stringify({cpnId: cpnId}), fnPlanCouponCallBack);
+	}
+	
+	// 쿠폰다운로드 콜백
+	var fnPlanCouponCallBack = function(result){
+		
+		// 화면 전환 필요		
+	}
+
 //세번째 자리 콤마찍기 (숫자만 포함, 소수점자리 구분)
 //세번째 자리 콤마찍기 (숫자만 포함, 소수점자리 구분)
 function comma(num){
 function comma(num){
-return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
+	return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
 }
 }
 
 
 
 

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

@@ -352,7 +352,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 #quick_menu .shopingbag .itemsGrp .item_state.soldout .itemPic:before {content:'SOLD OUT'; position: absolute; top: 50%; left: 50%; font-size: 20px; color:#fff; background: rgba(0,0,0,.5); width: 100%; height: 100%; transform:translate(-50%, -50%); line-height: 420px; z-index: 1; text-align: center;}
 #quick_menu .shopingbag .itemsGrp .item_state.soldout .itemPic:before {content:'SOLD OUT'; position: absolute; top: 50%; left: 50%; font-size: 20px; color:#fff; background: rgba(0,0,0,.5); width: 100%; height: 100%; transform:translate(-50%, -50%); line-height: 420px; z-index: 1; text-align: center;}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemBrand {margin:0px 0 15px; font-size: 14px; font-weight: 300;}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemBrand {margin:0px 0 15px; font-size: 14px; font-weight: 300;}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemComment {}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemComment {}
-#quick_menu .shopingbag .itemsGrp .item_prod .itemName {margin:0px 0 13px; font-size: 14px; font-weight: 300; lin e-height: 1.5; max-height:44px; overflow:hidden;}
+#quick_menu .shopingbag .itemsGrp .item_prod .itemName {margin:0px 0 13px; font-size: 14px; font-weight: 300; line-height: 1.5; max-height:44px; overflow:hidden;}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemSize {font-size: 12px; margin-bottom: 20px; color: #888;}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemSize {font-size: 12px; margin-bottom: 20px; color: #888;}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemPrice {font-size: 16px; line-height: 1; font-weight: 500; margin:0 0 10px}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemPrice {font-size: 16px; line-height: 1; font-weight: 500; margin:0 0 10px}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemPrice_original {display: inline-block; font-size: 14px; font-weight: 200;}
 #quick_menu .shopingbag .itemsGrp .item_prod .itemPrice_original {display: inline-block; font-size: 14px; font-weight: 200;}
@@ -1832,7 +1832,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.dp .itemsGrp.rowtype .item_prod .itemPic .pd_img {z-index: 88;}
 	.dp .itemsGrp.rowtype .item_prod .itemPic .pd_img {z-index: 88;}
 	.dp .itemsGrp.rowtype .item_prod.soldout .itemPic:before {content:'SOLD OUT'; position: absolute; top: 50%; left: 50%; font-size: 20px; color:#fff; background: rgba(0,0,0,.5); width: 100%; height: 100%; transform:translate(-50%, -50%); line-height: 420px; z-index: 99; text-align: center;}
 	.dp .itemsGrp.rowtype .item_prod.soldout .itemPic:before {content:'SOLD OUT'; position: absolute; top: 50%; left: 50%; font-size: 20px; color:#fff; background: rgba(0,0,0,.5); width: 100%; height: 100%; transform:translate(-50%, -50%); line-height: 420px; z-index: 99; text-align: center;}
 	.dp .itemsGrp.rowtype .item_prod .itemBrand {margin:0px 6px 65px; font-size: 16px; font-weight: 300;}
 	.dp .itemsGrp.rowtype .item_prod .itemBrand {margin:0px 6px 65px; font-size: 16px; font-weight: 300;}
-	.dp .itemsGrp.rowtype .item_prod .itemComment {position: static; left: 340px; top: 150px; font-size: 16px; font-weight: 300; margin:0;} */
+	.dp .itemsGrp.rowtype .item_prod .itemComment {position: static; left: 340px; top: 150px; font-size: 16px; font-weight: 300; margin:0;}
 	.dp .itemsGrp.rowtype .item_prod .itemName {margin:0px 6px 40px; font-size: 30px; font-weight: 200; line-height: 1.2; max-height:70px; height: 70px;}
 	.dp .itemsGrp.rowtype .item_prod .itemName {margin:0px 6px 40px; font-size: 30px; font-weight: 200; line-height: 1.2; max-height:70px; height: 70px;}
 	.dp .itemsGrp.rowtype .item_prod .itemPrice {font-size: 30px; line-height: 1; font-weight: 500;}
 	.dp .itemsGrp.rowtype .item_prod .itemPrice {font-size: 30px; line-height: 1; font-weight: 500;}
 	.dp .itemsGrp.rowtype .item_prod .itemPrice_original {font-size: 20px; font-weight: 200;}
 	.dp .itemsGrp.rowtype .item_prod .itemPrice_original {font-size: 20px; font-weight: 200;}

+ 11 - 17
src/main/webapp/ux/pc/js/mypage.js

@@ -1,17 +1,17 @@
 // 마이페이지 LNB 처리
 // 마이페이지 LNB 처리
 var fnSetMypageLnbList = function(lnbLvl) {
 var fnSetMypageLnbList = function(lnbLvl) {
 	let tag = '';
 	let tag = '';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"' + (lnbLvl == 1 ? ' class="on"' : '') + '>주문확인/배송조회</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST);"' + (lnbLvl == 2 ? ' class="on"' : '') + '>취소/반품/환불내역</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_RESTOCK);"' + (lnbLvl == 3 ? ' class="on"' : '') + '>재입고 알림 내역</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_COUPON);"' + (lnbLvl == 4 ? ' class="on"' : '') + '>쿠폰</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_POINT);"' + (lnbLvl == 5 ? ' class="on"' : '') + '>STYLE24 포인트</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);"' + (lnbLvl == 6 ? ' class="on"' : '') + '>상품권</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_REVIEW);"' + (lnbLvl == 7 ? ' class="on"' : '') + '>리뷰</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_DELIVERY_ADDR);"' + (lnbLvl == 8 ? ' class="on"' : '') + '>배송지 관리</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_WISHLIST);"' + (lnbLvl == 9 ? ' class="on"' : '') + '>위시리스트</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_CUSTOMER);"' + (lnbLvl == 10 ? ' class="on"' : '') + '>내정보 관리</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_SECEDE);"' + (lnbLvl == 11 ? ' class="on"' : '') + '>회원 탈퇴</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"' + (lnbLvl == 1 ? ' class="on"' : '') + '>주문확인/배송조회</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST);"' + (lnbLvl == 2 ? ' class="on"' : '') + '>취소/반품/환불내역</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_RESTOCK);"' + (lnbLvl == 3 ? ' class="on"' : '') + '>재입고 알림 내역</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_COUPON);"' + (lnbLvl == 4 ? ' class="on"' : '') + '>쿠폰</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_POINT);"' + (lnbLvl == 5 ? ' class="on"' : '') + '>STYLE24 포인트</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);"' + (lnbLvl == 6 ? ' class="on"' : '') + '>상품권</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_REVIEW);"' + (lnbLvl == 7 ? ' class="on"' : '') + '>리뷰</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_DELIVERY_ADDR);"' + (lnbLvl == 8 ? ' class="on"' : '') + '>배송지 관리</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_WISHLIST);"' + (lnbLvl == 9 ? ' class="on"' : '') + '>위시리스트</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_CUSTOMER);"' + (lnbLvl == 10 ? ' class="on"' : '') + '>내정보 관리</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_SECEDE);"' + (lnbLvl == 11 ? ' class="on"' : '') + '>회원 탈퇴</a></li>\n';
 	tag += '</ul>';
 	tag += '</ul>';
 	$('#mypageLnbList').html(tag);
 	$('#mypageLnbList').html(tag);
 }
 }
@@ -129,12 +129,6 @@ var fnReSendSms = function(param) {
 	// 선물하기 SMS 재발송 처리
 	// 선물하기 SMS 재발송 처리
 }
 }
 
 
-// 주문전체취소 버튼 클릭 이벤트
-var fnAllCancel = function(ordNo) {
-	// TODO
-	// 주문전체취소 처리
-}
-
 // 반품/취소/교환 버튼 클릭 이벤트
 // 반품/취소/교환 버튼 클릭 이벤트
 var fnCreateChange = function(param, gubun) {
 var fnCreateChange = function(param, gubun) {
 	let ordNo = $(param).attr('ordNo');
 	let ordNo = $(param).attr('ordNo');

+ 3 - 9
src/main/webapp/ux/style24_link.js

@@ -60,6 +60,7 @@ const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";					// 마이페
 const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 포인트
 const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 포인트
 const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";				// 마이페이지 > 상품권
 const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";				// 마이페이지 > 상품권
 const _PAGE_MYPAGE_REVIEW = _frontUrl + "/mypage/review/form";					// 마이페이지 > 리뷰
 const _PAGE_MYPAGE_REVIEW = _frontUrl + "/mypage/review/form";					// 마이페이지 > 리뷰
+const _PAGE_MYPAGE_CREATE_REVIEW = _frontUrl + "/mypage/review/create/form/";	// 마이페이지 > 리뷰 > 리뷰작성
 const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	// 마이페이지 > 배송지 관리
 const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	// 마이페이지 > 배송지 관리
 const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
 const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
 const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/confirm/form";		// 마이페이지 > 내정보 관리 > 회원정보 확인
 const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/confirm/form";		// 마이페이지 > 내정보 관리 > 회원정보 확인
@@ -75,6 +76,7 @@ const _PAGE_WISHLIST_DEL = _frontUrl + "/mypage/wish/list/delete";				// 위시
 //== 기획전 ==/
 //== 기획전 ==/
 const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 					// 기획전 메인
 const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 					// 기획전 메인
 const _PAGE_PLANNING_DETAIL = _frontUrl + "/planning/detail/form";				// 기획전 상세
 const _PAGE_PLANNING_DETAIL = _frontUrl + "/planning/detail/form";				// 기획전 상세
+const _PAGE_PLANNING_CPN_DOWNLOAD = "/planning/coupon/download";			    // 상품쿠폰다운로드
 
 
 //== 핫딜==/
 //== 핫딜==/
 const _PAGE_SOCIAL_MAIN = _frontUrl + "/social/main/form";						// 소설(핫딜) 메인
 const _PAGE_SOCIAL_MAIN = _frontUrl + "/social/main/form";						// 소설(핫딜) 메인
@@ -847,19 +849,11 @@ function cfnPutWishList(a) {
  * </pre>
  * </pre>
  * @param  : cateGb - 카테고리구분. 필수
  * @param  : cateGb - 카테고리구분. 필수
  * @param  : cate1No - 카테고리1번호. 필수
  * @param  : cate1No - 카테고리1번호. 필수
- * @param  : cate2No - 카테고리2번호. 옵션
- * @param  : cate3No - 카테고리3번호. 옵션
- * @param  : cate4No - 카테고리4번호. 옵션
- * @param  : cate5No - 카테고리5번호. 옵션
  * @since  : 2021/03/22
  * @since  : 2021/03/22
  * @author : gagamel
  * @author : gagamel
  */
  */
-var cfnGoToCategoryMain = function(cateGb, cate1No, cate2No, cate3No, cate4No, cate5No) {
+var cfnGoToCategoryMain = function(cateGb, cate1No) {
 	var params = '?cateGb=' + cateGb + '&cate1No=' + cate1No;
 	var params = '?cateGb=' + cateGb + '&cate1No=' + cate1No;
-	if (typeof (cate2No) != 'undefined') params += '&cate2No=' + cate2No;
-	if (typeof (cate3No) != 'undefined') params += '&cate3No=' + cate3No;
-	if (typeof (cate4No) != 'undefined') params += '&cate4No=' + cate4No;
-	if (typeof (cate5No) != 'undefined') params += '&cate5No=' + cate5No;
 	cfnGoToPage(_PAGE_CATE_MAIN + params);
 	cfnGoToPage(_PAGE_CATE_MAIN + params);
 }
 }