Selaa lähdekoodia

Merge remote-tracking branch 'origin/order' into jsh77b

Conflicts:
	src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html
	src/main/webapp/WEB-INF/views/mob/order/OrderDeliveryAddrInfoMob.html
	src/main/webapp/WEB-INF/views/mob/order/OrderEntryInfoMob.html
	src/main/webapp/WEB-INF/views/mob/order/OrderFreegiftInfoMob.html
	src/main/webapp/WEB-INF/views/mob/order/OrderMadeInfoMob.html
	src/main/webapp/WEB-INF/views/mob/order/OrderPaymentInfoMob.html
	src/main/webapp/WEB-INF/views/mob/popup/DelvAddrAddPopMob.html
	src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html
	src/main/webapp/WEB-INF/views/mob/popup/DelvAddrModifyPopMob.html
jsh77b 5 vuotta sitten
vanhempi
commit
869d9b0cba
78 muutettua tiedostoa jossa 4969 lisäystä ja 2058 poistoa
  1. 18 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 30 0
      src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java
  3. 28 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  4. 1 1
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  5. 201 109
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  6. 22 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  7. 80 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  8. 41 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  9. 40 5
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  10. 4 3
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  11. 55 9
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  12. 8 3
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  13. 80 8
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  14. 2 2
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  15. 30 0
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  16. 2 0
      src/main/java/com/style24/persistence/domain/Cart.java
  17. 7 0
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  18. 22 7
      src/main/java/com/style24/persistence/domain/Plan.java
  19. 24 0
      src/main/java/com/style24/persistence/domain/Review.java
  20. 45 11
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  21. 29 39
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  22. 1 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  23. 144 8
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  24. 64 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  25. 336 143
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  26. 1 1
      src/main/resources/config/application-locp.yml
  27. 4 4
      src/main/resources/config/application-run.yml
  28. 5 5
      src/main/resources/config/application-tsit.yml
  29. 14 0
      src/main/resources/i18n/messages/message_ko_KR.properties
  30. 5 3
      src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html
  31. 61 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDeliveryFormMob.html
  32. 101 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html
  33. 173 756
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  34. 5 8
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  35. 845 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  36. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  37. 79 79
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  38. 63 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewFormMob.html
  39. 74 74
      src/main/webapp/WEB-INF/views/mob/order/OrderCustemerInfoMob.html
  40. 216 0
      src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html
  41. 165 0
      src/main/webapp/WEB-INF/views/mob/order/OrderDeliveryAddrInfoMob.html
  42. 101 0
      src/main/webapp/WEB-INF/views/mob/order/OrderEntryInfoMob.html
  43. 186 0
      src/main/webapp/WEB-INF/views/mob/order/OrderFreegiftInfoMob.html
  44. 176 176
      src/main/webapp/WEB-INF/views/mob/order/OrderListInfoMob.html
  45. 74 0
      src/main/webapp/WEB-INF/views/mob/order/OrderMadeInfoMob.html
  46. 110 0
      src/main/webapp/WEB-INF/views/mob/order/OrderPaymentInfoMob.html
  47. 149 0
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html
  48. 298 0
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrModifyPopMob.html
  49. 57 34
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  50. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  51. 1 1
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  52. 20 6
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  53. 50 169
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  54. 17 5
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  55. 17 22
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  56. 4 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  57. 3 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailDeliveryFormWeb.html
  58. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  59. 12 13
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  60. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewFormWeb.html
  61. 3 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  62. 77 55
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html
  63. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb_20210330.html
  64. 42 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  65. 14 9
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  66. 7 15
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  67. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb_20210329.html
  68. 10 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  69. 13 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  70. 5 3
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  71. 104 54
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  72. 28 22
      src/main/webapp/WEB-INF/views/web/popup/RefundAccountAddPopupFormWeb.html
  73. 4 57
      src/main/webapp/biz/mypage.js
  74. 73 36
      src/main/webapp/ux/mo/css/common_m.css
  75. 40 16
      src/main/webapp/ux/mo/css/layout_m.css
  76. 29 11
      src/main/webapp/ux/mo/css/style24_m.css
  77. 21 5
      src/main/webapp/ux/mo/js/common_m.js
  78. 90 39
      src/main/webapp/ux/style24_link.js

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

@@ -153,4 +153,22 @@ public interface TsfDisplayDao {
 	 * @date 2021. 4. 5
 	 */
 	Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch);
+
+	/**
+	 * 상품카테고리 필터 혜택 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch);
+
+	/**
+	 * 카테고리 별 상품 수
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	int getCategoryGoodsCount(GoodsSearch goodsSearch);
 }

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

@@ -78,4 +78,34 @@ public interface TsfOrderChangeDao {
 	 */
 	Collection<OrderChange> getExchangeOptionInfo(OrderChange orderChange);
 
+	/**
+	 * 마이페이지 취반교 내역 조회
+	 *
+	 * @param OrderChange
+	 * @return Collection<OrderChange>
+	 * @author card007
+	 * @since 2021. 04. 07
+	 */
+	Collection<OrderChange> getCreList(OrderChange orderChange);
+
+	/**
+	 * 마이페이지 취반교 목록 페이징 처리 주문변경번호 수 조회
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 04. 07
+	 */
+	int getPagingCreListCount(OrderChange orderChange);
+
+	/**
+	 * 마이페이지 취반교 목록 페이징 처리 주문변경번호 조회
+	 *
+	 * @param OrderChange
+	 * @return Collection<OrderChange>
+	 * @author card007
+	 * @since 2021. 04. 07
+	 */
+	Collection<OrderChange> getPagingCreList(OrderChange orderChange);
+
 }

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

@@ -312,6 +312,34 @@ public interface TsfPlanningDao {
 	 */
 	Collection<Plan> getAttendMonth(Plan plan);
 	
+	/**
+	 * 출석체크 
+	 *
+	 * @param Plan
+	 * @return 
+	 * @author sowon
+	 * @date 2021. 4. 7
+	 */
+	void saveAttendEntry(Plan plan);
+	
+	/**
+	 * 출석체크 확인
+	 *
+	 * @param Plan
+	 * @return int
+	 * @author sowon
+	 * @date 2021. 4. 7
+	 */
+	int getAttendEntryCount(Plan plan);
 	
+	/**
+	 * 고객이 출석한 일 리스트
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 7
+	 */
+	Collection<Plan> getCustAttendEntryList(Plan plan);
 	
 }

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

@@ -95,7 +95,7 @@ public interface TsfReviewDao {
 	 * @author sowon
 	 * @since 2021. 3. 25
 	 */
-	Goods getReviewGoodsInfo(Review review);
+	Review getReviewGoodsInfo(Review review);
 	
 	/**
 	 * 마이페이지 리뷰 등록

+ 201 - 109
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -60,7 +60,10 @@ public class TsfCartService {
 	 * 세트 : goodsCd,
 	 * @param params
 	 */
-	public void saveCartInfo(Collection<Cart> params) {
+	public GagaMap saveCartInfo(Collection<Cart> params) {
+		GagaMap result = new GagaMap();
+		List<Integer> cartSqList = new ArrayList<>();
+
 		// 로그인 유무 확인 (로그인이 되어 있지 않으면 regNo 를 0으로 장바구니에 저장한다.)
 		Login login = new Login();
 		if(TsfSession.isLogin()) {
@@ -69,68 +72,153 @@ public class TsfCartService {
 			login.setCustNo(0);
 		}
 
+		String goodsType = params.iterator().next().getGoodsType();
+		String cartGb = params.iterator().next().getCartGb();
+		if(StringUtils.isEmpty(goodsType)) {
+			goodsType = params.iterator().next().getCartCompsList().iterator().next().getGoodsType();
+			cartGb    = params.iterator().next().getCartCompsList().iterator().next().getCartGb();
+		}
+
+		log.info("CHECK GOODS_TYPE ::::: {}", goodsType);
+
 		// 장바구니 상품 및 재고 가능 여부 체크
-		for (Cart param : params) {
-			param.setCustNo(login.getCustNo());
-			// 상품 마스터 정보 확인
-			Goods goods = new Goods();
-			goods.setGoodsCd(param.getGoodsCd());
-			goods.setFrontGb(TsfSession.getFrontGb());
-			goods.setSiteCd(TscConstants.Site.STYLE24.value());
-
-			goods = goodsService.getGoodsInfo(goods);
-
-			if (goods == null) {
-				throw new IllegalArgumentException("상품 정보가 존재하지 않습니다.");
-			}
-			if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
-				throw new IllegalArgumentException("품절입니다.");
-			} else if (!TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat()) && !TscConstants.GoodsStat.APPR.value().equals(goods.getGoodsStat())) {
-				throw new IllegalArgumentException("판매중인 상품이 아닙니다.");
-			} else if (param.getGoodsQty() > goods.getMaxOrdQty()) {
-				throw new IllegalArgumentException(goods.getGoodsNm() + " 상품의 최대 구매 수량은 " + goods.getMaxOrdQty() + " 입니다.");
-			} else if (param.getGoodsQty() < goods.getMinOrdQty()) {
-				throw new IllegalArgumentException(goods.getGoodsNm() + " 상품의 최소 구매 수량은 " + goods.getMinOrdQty() + " 입니다.");
-			}
+		if(TscConstants.GoodsType.SET.value().equals(goodsType)) {
+			for (Cart goodsParams : params) {
+				for (Cart param : goodsParams.getCartCompsList()) {
+					param.setCustNo(login.getCustNo());
+					// 상품 마스터 정보 확인
+					Goods goods = new Goods();
+					goods.setGoodsCd(param.getGoodsCd());
+					goods.setFrontGb(TsfSession.getFrontGb());
+					goods.setSiteCd(TscConstants.Site.STYLE24.value());
+
+					goods = goodsService.getGoodsInfo(goods);
+
+					if (goods == null) {
+						result.put("message", "상품 정보가 존재하지 않습니다.");
+						return result;
+					} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
+						result.put("message", "품절입니다.");
+						return result;
+					} else if (!TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat()) && !TscConstants.GoodsStat.APPR.value().equals(goods.getGoodsStat())) {
+						result.put("message", "판매중인 상품이 아닙니다.");
+						return result;
+					} else if (param.getGoodsQty() > goods.getMaxOrdQty()) {
+						result.put("message", goods.getGoodsNm() + " 상품의 최대 구매 수량은 " + goods.getMaxOrdQty() + " 입니다.");
+						return result;
+					} else if (param.getGoodsQty() < goods.getMinOrdQty()) {
+						result.put("message", goods.getGoodsNm() + " 상품의 최소 구매 수량은 " + goods.getMinOrdQty() + " 입니다.");
+						return result;
+					}
 
-			// 상품 재고 확인
-			GoodsStock checkParam = new GoodsStock();
-			checkParam.setGoodsCd(param.getGoodsCd());
-			checkParam.setItemCd(param.getItemCd());
-			checkParam.setOptCd(param.getOptCd());
-			checkParam.setGoodsQty(param.getGoodsQty());
-			checkParam.setGoodsType(param.getGoodsType());
-			String stockResult = goodsService.getCheckStock(checkParam);
+					// 상품 재고 확인
+					GoodsStock checkParam = new GoodsStock();
+					checkParam.setGoodsCd(param.getGoodsCd());
+					checkParam.setItemCd(param.getItemCd());
+					checkParam.setOptCd(param.getOptCd());
+					checkParam.setGoodsQty(param.getGoodsQty());
+					checkParam.setGoodsType(param.getGoodsType());
+					String stockResult = goodsService.getCheckStock(checkParam);
+
+					if (!"SUCCESS".equals(stockResult)) {
+						result.put("message", stockResult);
+						return result;
+					}
 
-			if (!"SUCCESS".equals(stockResult)) {
-				throw new IllegalArgumentException(stockResult);
+					// 금일 주문 수량 체크
+					if (!StringUtils.isEmpty(param.getCartGb()) && "O".equals(param.getCartGb())) {
+						int goodsCartCnt = 0;
+						if(param.getCustNo() != 0) {
+							goodsCartCnt = cartDao.getGoodsTodayOrderCnt(param);
+						}
+
+						if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
+							result.put("message", "1일 구매한도 수량이 초과되었습니다.");
+							return result;
+						}
+					}
+				}
+
+				saveSetTypeCartInfo(params, cartSqList);
 			}
+		} else {
+			for (Cart param : params) {
+				param.setCustNo(login.getCustNo());
+				// 상품 마스터 정보 확인
+				Goods goods = new Goods();
+				goods.setGoodsCd(param.getGoodsCd());
+				goods.setFrontGb(TsfSession.getFrontGb());
+				goods.setSiteCd(TscConstants.Site.STYLE24.value());
+
+				goods = goodsService.getGoodsInfo(goods);
 
-			// 금일 주문 수량 체크
-			if (!StringUtils.isEmpty(param.getCartGb()) && "O".equals(param.getCartGb())) {
-				int goodsCartCnt = 0;
-				if(param.getCustNo() != 0) {
-					goodsCartCnt = cartDao.getGoodsTodayOrderCnt(param);
+				log.info("CHECK :::::::::::::::: 0 ::::::::::::::::::::::");
+
+				if (goods == null) {
+					log.info("CHECK :::::::::::::::: 1 ::::::::::::::::::::::");
+					result.put("message", "상품 정보가 존재하지 않습니다.");
+					return result;
+				} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
+					log.info("CHECK :::::::::::::::: 2 ::::::::::::::::::::::");
+					result.put("message", "품절입니다");
+					return result;
+				} else if (!TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat()) && !TscConstants.GoodsStat.APPR.value().equals(goods.getGoodsStat())) {
+					log.info("CHECK :::::::::::::::: 3 ::::::::::::::::::::::");
+					result.put("message", "판매중인 상품이 아닙니다.");
+					return result;
+				} else if (param.getGoodsQty() > goods.getMaxOrdQty()) {
+					log.info("CHECK :::::::::::::::: 4 ::::::::::::::::::::::");
+					result.put("message", goods.getGoodsNm() + " 상품의 최대 구매 수량은 " + goods.getMaxOrdQty() + " 입니다.");
+					return result;
+				} else if (param.getGoodsQty() < goods.getMinOrdQty()) {
+					log.info("CHECK :::::::::::::::: 5 ::::::::::::::::::::::");
+					result.put("message", goods.getGoodsNm() + " 상품의 최소 구매 수량은 " + goods.getMinOrdQty() + " 입니다.");
+					return result;
 				}
 
-				if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
-					throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
+				log.info("CHECK :::::::::::::::: 6 ::::::::::::::::::::::");
+
+				// 상품 재고 확인
+				GoodsStock checkParam = new GoodsStock();
+				checkParam.setGoodsCd(param.getGoodsCd());
+				checkParam.setItemCd(param.getItemCd());
+				checkParam.setOptCd(param.getOptCd());
+				checkParam.setGoodsQty(param.getGoodsQty());
+				checkParam.setGoodsType(param.getGoodsType());
+				String stockResult = goodsService.getCheckStock(checkParam);
+
+				if (!"SUCCESS".equals(stockResult)) {
+					result.put("message", stockResult);
+					return result;
+				}
+
+				// 금일 주문 수량 체크
+				if (!StringUtils.isEmpty(param.getCartGb()) && "O".equals(param.getCartGb())) {
+					int goodsCartCnt = 0;
+					if(param.getCustNo() != 0) {
+						goodsCartCnt = cartDao.getGoodsTodayOrderCnt(param);
+					}
+
+					if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
+						result.put("message", "1일 구매한도 수량이 초과되었습니다.");
+						return result;
+					}
 				}
 			}
-		}
 
-		// 장바구니 정보 수정
-		if (TscConstants.GoodsType.SET.value().equals(params.iterator().next().getGoodsType())) {
-			// 세트상품일 경우
-			saveSetTypeCartInfo(params);
-		} else {
-			// 세트 상품이 아닐 경우
-			saveNormalDealCartInfo(params);
+			saveNormalDealCartInfo(params, cartSqList);
 		}
+
+		result.put("cartSqList", cartSqList);
+		result.put("goodsType", goodsType);
+		result.put("cartGb", cartGb);
+		result.put("message", "SUCCESS");
+
+		return result;
 	}
 
 	@Transactional("shopTxnManager")
-	public void saveSetTypeCartInfo(Collection<Cart> params) {
+	public void saveSetTypeCartInfo(Collection<Cart> params, List<Integer> cartSqs) {
 		Cart cart = new Cart();
 		StringBuilder sb = new StringBuilder();
 
@@ -149,80 +237,82 @@ public class TsfCartService {
 		cart.setJsessionId(TscSession.getSessionId());
 
 		// 장바구니 보유 CART_SQ 쿼리
-		int i = 1;
-		for (Cart param : params) {
-			sb.append("SELECT CD.CART_SQ \n FROM TB_CART_DETAIL CD \n INNER JOIN TB_CART C \n ON CD.CART_SQ = C.CART_SQ \n WHERE C.CUST_NO = ");
-
-			if (cart.getCustNo() == 0) {
-				sb.append(cart.getCustNo()).append("\n AND JSESSION_ID = '").append(cart.getJsessionId()).append("'");
-			} else {
-				sb.append(cart.getCustNo());
-			}
-			sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCd()).append("' \n AND CD.OPT_CD = '").append(param.getOptCd()).append("'");
-			if (i < params.size()) {
-				i++;
-				sb.append("\n UNION ALL \n");
+		for (Cart carts : params) {
+			int i = 1;
+			Collection<Cart> cartInfos = carts.getCartCompsList();
+			sb = new StringBuilder();
+			for(Cart param : cartInfos) {
+				sb.append("SELECT CD.CART_SQ \n FROM TB_CART_DETAIL CD \n INNER JOIN TB_CART C \n ON CD.CART_SQ = C.CART_SQ \n WHERE C.CUST_NO = ");
+
+				if (cart.getCustNo() == 0) {
+					sb.append(cart.getCustNo()).append("\n AND JSESSION_ID = '").append(cart.getJsessionId()).append("'");
+				} else {
+					sb.append(cart.getCustNo());
+				}
+				sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCd()).append("' \n AND CD.OPT_CD = '").append(param.getOptCd()).append("'");
+				if (i < cartInfos.size()) {
+					i++;
+					sb.append("\n UNION ALL \n");
+				}
 			}
-		}
-
-		// cart 정보 세팅
-		cart.setContentsLoc(params.iterator().next().getContentsLoc());
-		cart.setAfLinkCd(params.iterator().next().getAfLinkCd());
-		cart.setIthrCd(params.iterator().next().getIthrCd());
-		cart.setPlanDtlSq(params.iterator().next().getPlanDtlSq());
-		cart.setGoodsCd(params.iterator().next().getGoodsCd());
-		cart.setGoodsQty(params.iterator().next().getGoodsQty());
-		cart.setGoodsType(params.iterator().next().getGoodsType());
-		cart.setItemCdSql(sb.toString());
 
-		Collection<Cart> cartSqList = null;
-
-		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "C".equals(params.iterator().next().getCartGb())) {
-			cart.setCartGb(TscConstants.CartGb.CART.value());
-			// 같은 장바구니 상품 확인
-			cartSqList = cartDao.selectHasSetItemCartList(cart);
-		} else if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "O".equals(params.iterator().next().getCartGb())) {
-			if ("P".equals(TsfSession.getFrontGb())) {
-				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
+			// cart 정보 세팅
+			cart.setContentsLoc(cartInfos.iterator().next().getContentsLoc());
+			cart.setAfLinkCd(cartInfos.iterator().next().getAfLinkCd());
+			cart.setIthrCd(cartInfos.iterator().next().getIthrCd());
+			cart.setPlanDtlSq(cartInfos.iterator().next().getPlanDtlSq());
+			cart.setGoodsCd(cartInfos.iterator().next().getGoodsCd());
+			cart.setGoodsQty(cartInfos.iterator().next().getGoodsQty());
+			cart.setGoodsType(cartInfos.iterator().next().getGoodsType());
+			cart.setItemCdSql(sb.toString());
+
+			Collection<Cart> cartSqList = null;
+
+			if (!StringUtils.isEmpty(cartInfos.iterator().next().getCartGb()) && "C".equals(cartInfos.iterator().next().getCartGb())) {
+				cart.setCartGb(TscConstants.CartGb.CART.value());
+				// 같은 장바구니 상품 확인
+				cartSqList = cartDao.selectHasSetItemCartList(cart);
+			} else if (!StringUtils.isEmpty(cartInfos.iterator().next().getCartGb()) && "O".equals(cartInfos.iterator().next().getCartGb())) {
+				if ("P".equals(TsfSession.getFrontGb())) {
+					cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
+				} else {
+					cart.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
+				}
 			} else {
-				cart.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
+				cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
 			}
-		} else {
-			cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
-		}
 
-		if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
-			if (cartSqList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
-				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+			if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
+				if (cartSqList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
+					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+				} else {
+					cart.setCartSq(cartSqList.iterator().next().getCartSq());
+					cartSqs.add(cart.getCartSq());
+					cartDao.updateCartInfo(cart);               // 장바구니 정보 수정
+					cartDao.insertCartHst(cart);                // 장바구니 수정 이력 저장
+				}
 			} else {
-				cart.setCartSq(cartSqList.iterator().next().getCartSq());
-				cartDao.updateCartInfo(cart);               // 장바구니 정보 수정
-				cartDao.insertCartHst(cart);                // 장바구니 수정 이력 저장
-			}
+				cartDao.insertCartInfo(cart);					// 장바구니 마스터 정보 저장
+				cartDao.insertCartHst(cart);                    // 장바구니 이력 정보 저장
 
-			for (Cart param : params) {
-				param.setCartSq(cart.getCartSq());
-			}
-		} else {
-			cartDao.insertCartInfo(cart);					// 장바구니 마스터 정보 저장
-			cartDao.insertCartHst(cart);                    // 장바구니 이력 정보 저장
-
-			TsfSession.setAttribute("cartSqArr", cart.getCartSq()+"");
+				cartSqs.add(cart.getCartSq());
+				TsfSession.setAttribute("cartSqArr", cart.getCartSq()+"");
 
-			for (Cart param : params) {
-				param.setCartSq(cart.getCartSq());
-				param.setRegNo(cart.getRegNo());
-				param.setCustNo(cart.getCustNo());
-				param.setUpdNo(cart.getUpdNo());
+				for (Cart param : cartInfos) {
+					param.setCartSq(cart.getCartSq());
+					param.setRegNo(cart.getRegNo());
+					param.setCustNo(cart.getCustNo());
+					param.setUpdNo(cart.getUpdNo());
 
-				cartDao.insertCartDetailInfo(param);		// 장바구니 상세 저장
-				cartDao.insertCartDetailHst(param);         // 장바구니 상세 이력 저장
+					cartDao.insertCartDetailInfo(param);		// 장바구니 상세 저장
+					cartDao.insertCartDetailHst(param);         // 장바구니 상세 이력 저장
+				}
 			}
 		}
 	}
 
 	@Transactional("shopTxnManager")
-	public void saveNormalDealCartInfo(Collection<Cart> params) {
+	public void saveNormalDealCartInfo(Collection<Cart> params, List<Integer> cartSqs) {
 		Cart cart = new Cart();
 		// 로그인 정보
 		if(TsfSession.isLogin()) {
@@ -265,6 +355,7 @@ public class TsfCartService {
 					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
 				} else {
 					item.setCartSq(cartSqList.iterator().next());
+					cartSqs.add(item.getCartSq());
 					cartDao.updateCartInfo(item);
 					cartDao.insertCartHst(item);                // 장바구니 수정 이력 저장
 				}
@@ -274,6 +365,7 @@ public class TsfCartService {
 				cartDao.insertCartDetailInfo(item);				// 장바구니 상세 저장
 				cartDao.insertCartDetailHst(item);				// 장바구니 수정 이력 저장
 
+				cartSqs.add(item.getCartSq());
 				sendCartSqList.add(item.getCartSq() + "");
 			}
 		}

+ 22 - 0
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -336,4 +336,26 @@ public class TsfDisplayService {
 		return displayDao.getCategoryFilter(cate4Srch);
 	}
 
+	/**
+	 * 상품카테고리 필터 혜택 목록
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch){
+		return displayDao.getCategoryFilterBenefit(cate4Srch);
+	}
+
+	/**
+	 * 카테고리 별 상품 수
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @date 2021. 4. 7
+	 */
+	public int getCategoryGoodsCount(GoodsSearch goodsSearch){
+	return displayDao.getCategoryGoodsCount(goodsSearch);
+	}
+
 }

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

@@ -217,4 +217,84 @@ public class TsfOrderChangeService {
 		return exchangeOptionInfo;
 	}
 
+	/**
+	 * 마이페이지 취반교 목록 페이징 처리 주문변경번호 수 조회
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 04. 07
+	 */
+	public int getPagingCreListCount(OrderChange orderChange) { return orderChangeDao.getPagingCreListCount(orderChange); }
+
+	/**
+	 * 마이페이지 취반교 목록 페이징 처리 주문변경번호 조회
+	 *
+	 * @param OrderChange
+	 * @return Collection<OrderChange>
+	 * @author card007
+	 * @since 2021. 04. 07
+	 */
+	public Collection<OrderChange> getPagingCreList(OrderChange orderChange) { return orderChangeDao.getPagingCreList(orderChange); }
+
+	/**
+	 * 마이페이지 취반교 목록 조회
+	 *
+	 * @param OrderChange
+	 * @return Collection<OrderChange>
+	 * @author card007
+	 * @since 2021. 04. 07
+	 */
+	public Collection<GagaMap> getCreList(OrderChange orderChange) {
+		Collection<GagaMap> creList = new ArrayList<>();
+		Collection<OrderChange> orderChangeList = new ArrayList<>();
+		int ordChgSq = 0;
+		int index = 0;
+
+		for (OrderChange tmpOrderChange : orderChangeDao.getCreList(orderChange)) {
+			// 세트상품 옵션별 배열로 담기
+			if (tmpOrderChange.getItemNm().contains("!@!")) {
+				tmpOrderChange.setItemNmArr(tmpOrderChange.getItemNm().split("!@!"));
+				tmpOrderChange.setColorNmArr(tmpOrderChange.getColorNm().split(","));
+				tmpOrderChange.setOptCd1Arr(tmpOrderChange.getOptCd1().split(","));
+				tmpOrderChange.setOptCd2Arr(tmpOrderChange.getOptCd2().split(","));
+			} else {
+				String[] arr = {tmpOrderChange.getItemNm()}, arr2 = {tmpOrderChange.getColorNm()}, arr3 = {tmpOrderChange.getOptCd1()}, arr4 = {tmpOrderChange.getOptCd2()};
+				tmpOrderChange.setItemNmArr(arr);
+				tmpOrderChange.setColorNmArr(arr2);
+				tmpOrderChange.setOptCd1Arr(arr3);
+				tmpOrderChange.setOptCd2Arr(arr4);
+			}
+
+			// 취반교 목록 데이터 설정
+			if (index > 0 && ordChgSq != tmpOrderChange.getOrdChgSq()) {
+				creList.add(setOrderChangeMap(orderChangeList));
+				orderChangeList = new ArrayList<>();
+			}
+
+			orderChangeList.add(tmpOrderChange);
+			ordChgSq = tmpOrderChange.getOrdChgSq();
+			index++;
+		}
+
+		if (orderChangeList.size() > 0) {
+			creList.add(setOrderChangeMap(orderChangeList));
+		}
+
+		return creList;
+	}
+
+	private GagaMap setOrderChangeMap(Collection<OrderChange> ordCreList) {
+		OrderChange orderChange = ordCreList.iterator().next();
+
+		GagaMap map = new GagaMap();
+		map.set("giftPackYn", orderChange.getGiftPackYn());
+		map.set("ordChgSq", orderChange.getOrdChgSq());
+		map.set("chgDt", orderChange.getChgDt());
+		map.set("oneData", orderChange);
+		map.set("ordCreList", ordCreList);
+
+		return map;
+	}
+
 }

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

@@ -468,6 +468,47 @@ public class TsfPlanningService {
 		return planningDao.getAttendMonth(plan);
 	}
 	
+	/**
+	 * 출석체크 
+	 *
+	 * @param Plan
+	 * @return 
+	 * @author sowon
+	 * @date 2021. 4. 7
+	 */
+	public void saveAttendEntry(Plan plan) {
+		int custNo = TsfSession.getInfo().getCustNo();
+		plan.setCustNo(custNo);
+		plan.setEntryCustNo(custNo);
+		plan.setEntryVal1("Y");
+		planningDao.saveAttendEntry(plan);
+	}
+
+	/**
+	 * 출석체크 확인
+	 *
+	 * @param Plan
+	 * @return int
+	 * @author sowon
+	 * @date 2021. 4. 7
+	 */
+	public int getAttendEntryCount(Plan plan) {
+		plan.setCustNo(TsfSession.getInfo().getCustNo());
+		return planningDao.getAttendEntryCount(plan);
+	}
+	
+	/**
+	 * 고객이 출석한 일 리스트
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 7
+	 */
+	public Collection<Plan> getCustAttendEntryList(Plan plan){
+		plan.setCustNo(TsfSession.getInfo().getCustNo());
+		return planningDao.getCustAttendEntryList(plan);
+	}
 
 
 }

+ 40 - 5
src/main/java/com/style24/front/biz/service/TsfReviewService.java

@@ -7,9 +7,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.front.biz.dao.TsfReviewDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Review;
 
 import lombok.extern.slf4j.Slf4j;
@@ -68,9 +70,9 @@ public class TsfReviewService {
 	public Collection<Goods> getReviewOptionList(Goods goods) {
 		Collection<Goods> result = new ArrayList<Goods>();
 		if ("Y".equals(goods.getSelfGoodsYn())) {
-			result = reviewDao.getReviewOption1List(goods.getGoodsCd());
-		}else {
 			result = reviewDao.getReviewOption2List(goods.getGoodsCd());
+		}else {
+			result = reviewDao.getReviewOption1List(goods.getGoodsCd());
 		}
 		 return result;
 	}
@@ -94,7 +96,26 @@ public class TsfReviewService {
 	 * @since 2021. 3. 25
 	 */
 	public Collection<Review> getCompleteReviewList(Review review){
-		return reviewDao.getCompleteReviewList(review);
+		Collection<Review> reviewList = new ArrayList<>();
+		
+		for (Review tmpReview : reviewDao.getCompleteReviewList(review)) {
+			// 세트상품 옵션별 배열로 담기
+			if (tmpReview.getItemNm().contains("!@!")) {
+				tmpReview.setItemNmArr(tmpReview.getItemNm().split("!@!"));
+				tmpReview.setColorNmArr(tmpReview.getColorNm().split(","));
+				tmpReview.setOptCd1Arr(tmpReview.getOptCd1().split(","));
+				tmpReview.setOptCd2Arr(tmpReview.getOptCd2().split(","));
+			} else {
+				String[] arr = {tmpReview.getItemNm()}, arr2 = {tmpReview.getColorNm()}, arr3 = {tmpReview.getOptCd1()}, arr4 = {tmpReview.getOptCd2()};
+				tmpReview.setItemNmArr(arr);
+				tmpReview.setColorNmArr(arr2);
+				tmpReview.setOptCd1Arr(arr3);
+				tmpReview.setOptCd2Arr(arr4);
+			}
+			reviewList.add(tmpReview);
+		}
+		
+		return reviewList;
 	}
 	
 	/**
@@ -104,8 +125,22 @@ public class TsfReviewService {
 	 * @author sowon
 	 * @since 2021. 3. 25
 	 */
-	public Goods getReviewGoodsInfo(Review review){
-		return reviewDao.getReviewGoodsInfo(review);
+	public Review getReviewGoodsInfo(Review review){
+		Review tmpReview = reviewDao.getReviewGoodsInfo(review);
+		// 세트상품 옵션별 배열로 담기
+		if (tmpReview.getItemNm().contains("!@!")) {
+			tmpReview.setItemNmArr(tmpReview.getItemNm().split("!@!"));
+			tmpReview.setColorNmArr(tmpReview.getColorNm().split(","));
+			tmpReview.setOptCd1Arr(tmpReview.getOptCd1().split(","));
+			tmpReview.setOptCd2Arr(tmpReview.getOptCd2().split(","));
+		} else {
+			String[] arr = {tmpReview.getItemNm()}, arr2 = {tmpReview.getColorNm()}, arr3 = {tmpReview.getOptCd1()}, arr4 = {tmpReview.getOptCd2()};
+			tmpReview.setItemNmArr(arr);
+			tmpReview.setColorNmArr(arr2);
+			tmpReview.setOptCd1Arr(arr3);
+			tmpReview.setOptCd2Arr(arr4);
+		}
+		return tmpReview;
 	}
 	
 	/**

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

@@ -100,15 +100,16 @@ public class TsfCartController extends TsfBaseController {
 	 */
 	@ResponseBody
 	@PostMapping("/save")
-	public Collection<Cart> createCart(@RequestBody Collection<Cart> params) {
+	public GagaMap createCart(@RequestBody Collection<Cart> params) {
+		GagaMap result = new GagaMap();
 		try {
-			cartService.saveCartInfo(params);
+			result = cartService.saveCartInfo(params);
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw new IllegalArgumentException();
 		}
 
-		return params;
+		return result;
 	}
 
 	// @ResponseBody

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

@@ -7,11 +7,13 @@ import java.util.HashMap;
 
 import javax.servlet.http.HttpServletResponse;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.support.env.TscConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -27,6 +29,7 @@ import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.biz.service.TsfSocialService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.BrandGroup;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
@@ -364,7 +367,7 @@ public class TsfDisplayController extends TsfBaseController {
 	@GetMapping("/lookbook/main/form")
 	public ModelAndView lookbookMain(Lookbook lookbook) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/LookbookMainForm"));
-
+		mav.addObject("lbInfo", lookbook);
 		return mav;
 	}
 
@@ -390,19 +393,25 @@ public class TsfDisplayController extends TsfBaseController {
 	 * @since 2021. 4. 6
 	 */
 	@GetMapping("/lookbook/detail/form")
-	public ModelAndView lookbookDetail(Device device, @RequestParam HashMap<String, String> paramMap) {
+	public ModelAndView lookbookDetail(Lookbook lookbook) {
 		ModelAndView mav = new ModelAndView();
 
-		Lookbook lookbook = new Lookbook();
-		lookbook.setLookbookSq(Integer.parseInt(paramMap.get("lookbookSq")));
-		lookbook.setBrandCd(paramMap.get("brandGroupNo"));
-
-		mav.addObject("lookbookSq", paramMap.get("lookbookSq"));
-
 		lookbook.setFrontGb(TsfSession.getFrontGb());
-		mav.addObject("lookbookDetailList", coreLookbookService.getLookbookListForGoods(lookbook));
+		Collection<Lookbook> lookbookList = coreLookbookService.getLookbookListForGoods(lookbook);
+		String brandNm = "";
+		String lookbookTitle = "";
+		if(lookbookList != null){
+			for(Lookbook lbInfo : lookbookList){
+				brandNm = lbInfo.getBrandNm();
+				lookbookTitle = lbInfo.getTitle();
+			}
+			lookbook.setBrandNm(brandNm);
+			lookbook.setTitle(lookbookTitle);
+		}
 
+		mav.addObject("lookbookDetailList", lookbookList);
 		mav.addObject("otherLookbookList", coreLookbookService.getOtherLookbookList(lookbook));
+		mav.addObject("lookbookInfo", lookbook);
 
 		mav.setViewName(super.getDeviceViewName("display/LookbookDetailForm"));
 		return mav;
@@ -467,8 +476,45 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("filterSeasonList", displayService.getCategoryFilter(cate4Srch, "SEASON"));
 		mav.addObject("filterColorList", displayService.getCategoryFilter(cate4Srch, "COLOR"));
 		mav.addObject("filterBenefitList", displayService.getCategoryFilter(cate4Srch, "BENEFIT"));
+		//mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
 		mav.addObject("cateInfo", cate4Srch);
 
 		return mav;
 	}
+
+	/**
+	 * 카테고리 상품 리스트 조회
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 7
+	 */
+	@PostMapping("/category/goods/list")
+	@ResponseBody
+	public GagaMap getGoodsList(GoodsSearch goodsSearch){
+		GagaMap result = new GagaMap();
+		TscPageRequest pageable = new TscPageRequest((goodsSearch.getPageNo() > 0 ? goodsSearch.getPageNo() - 1 : 0), goodsSearch.getPageSize(), goodsSearch.getPageUnit());
+
+		goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
+		goodsSearch.setFormalGb("G009_10");
+		goodsSearch.setFrontGb(TsfSession.getFrontGb());
+		goodsSearch.setCustGb(TsfSession.getCustGb());
+		if(goodsSearch.getBrandGroupNo()==null || goodsSearch.getBrandGroupNo().equals("")){
+			goodsSearch.setBrandGroupNo(0);
+		}
+		if(goodsSearch.getCate4No()!=null && !goodsSearch.getCate4No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate4No());
+		} else if(goodsSearch.getCate3No()!=null && !goodsSearch.getCate3No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate3No());
+		} else if(goodsSearch.getCate2No()!=null && !goodsSearch.getCate2No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate2No());
+		} else if(goodsSearch.getCate1No()!=null && !goodsSearch.getCate1No().equals("")){
+			goodsSearch.setCateNo(goodsSearch.getCate1No());
+		}
+
+		int totalCnt = displayService.getCategoryGoodsCount(goodsSearch);
+		log.info("totalCnt::::::::::{}",totalCnt);
+		pageable.setTotalCount(0);
+		return result;
+	}
 }

+ 8 - 3
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -218,6 +218,7 @@ public class TsfGoodsController extends TsfBaseController {
 				// 룩북
 				Lookbook lookbook = new Lookbook();
 				lookbook.setGoodsCd(paramsGoods.getGoodsCd());
+				lookbook.setCustNo(paramsGoods.getCustNo());
 				mav.addObject("lookbookList", coreLookbookService.getLookbookListForGoods(lookbook));
 
 			} else if (TscConstants.GoodsType.SET.value().equals(goods.getGoodsType())) {		// 셋트상품
@@ -231,8 +232,10 @@ public class TsfGoodsController extends TsfBaseController {
 			Review review = new Review();
 			review.setGoodsCd(goods.getGoodsCd());
 			review.setBestYn("Y");
-			review.setRownum(1);
 			review.setGoodsType(goods.getGoodsType());
+			if ("P".equals(paramsGoods.getFrontGb())) {
+				review.setRownum(1);	
+			}
 			mav.addObject("bestReviewList", reviewService.getReviewList(review));
 		}
 
@@ -1184,9 +1187,11 @@ public class TsfGoodsController extends TsfBaseController {
 
 		Review review = new Review();
 		review.setGoodsCd(goods.getGoodsCd());
-		mav.addObject("reviewCount", reviewService.getReviewTotalCount(review));	// 전체상품평 건수 
-		review.setRownum(1);
 		review.setGoodsType(goods.getGoodsType());
+		log.info("review {}", review);
+		mav.addObject("reviewCount", reviewService.getReviewTotalCount(review));	// 전체상품평 건수
+		
+		review.setRownum(1);
 		mav.addObject("reviewList", reviewService.getReviewList(review));	// 전체상품평 유무 확인
 		review.setBestYn("Y");
 		review.setRownum(0);	// 전체 조회

+ 80 - 8
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -253,7 +253,6 @@ public class TsfMypageController extends TsfBaseController {
 	@ResponseBody
 	public GagaMap getOrderList(@RequestBody Order order) {
 		GagaMap map = new GagaMap();
-		ModelAndView mav = new ModelAndView();
 
 		// 페이징 처리 설정
 		TscPageRequest pageable = new TscPageRequest((order.getPageNo() > 0 ? order.getPageNo() - 1 : 0), order.getPageSize(), order.getPageUnit());
@@ -450,7 +449,7 @@ public class TsfMypageController extends TsfBaseController {
 
 		// 처리 결과 코드에 따른 메세지 설정
 		if (result.get("status").equals(GagaResponseStatus.SUCCESS.getCode())) {
-			result.set("message", message.getMessage("SUCC_0004"));
+			result.set("message", message.getMessage("EXCHANGE_0001"));
 		} else {
 			result.set("message", message.getMessage("FAIL_0004"));
 		}
@@ -642,6 +641,7 @@ public class TsfMypageController extends TsfBaseController {
 		result.set("allCanYn"		, allCanYn);							// 무통장입금전 전체취소 여부 
 		result.set("isCustomer"		, orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
 		result.set("wdGb"			, orderChange.getWdGb());				// 회수방법
+		result.set("wdInvoiceNo"	, orderChange.getWdInvoiceNo());		// 회수송장번호
 
 		// 4. 주문변경 회수지정보 추가
 		result.set("chgerNm"		, orderChange.getChgerNm());			// 변경자명
@@ -657,7 +657,7 @@ public class TsfMypageController extends TsfBaseController {
 		coreOrderChangeService.rtnReq(result, custNo);
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-		result.set("message", "반품 신청이 접수되었습니다.");
+		result.set("message", message.getMessage("RETURN_0001"));
 
 		return result;
 	}
@@ -762,7 +762,7 @@ public class TsfMypageController extends TsfBaseController {
 		coreOrderChangeService.cnclComplete(result, custNo);
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-		result.set("message", "취소 처리 되었습니다.");
+		result.set("message", message.getMessage("CANCEL_0001"));
 		// result.set("message", message.getMessage("SUCC_0004"));
 
 		return result;
@@ -809,6 +809,78 @@ public class TsfMypageController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 마이페이지 취반교 목록 화면
+	 *
+	 * @return
+	 * @author card007
+	 * @since 2021. 02. 04
+	 */
+	@GetMapping({"/cre/list/form"})
+	public ModelAndView mypageCreListForm(@RequestBody(required = false) OrderChange orderChange) {
+		ModelAndView mav = new ModelAndView();
+
+		if (orderChange == null) {
+			orderChange = new OrderChange();
+		}
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		orderChange.setCustNo(custNo);
+
+		// 고객정보 조회
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCustNo(custNo);
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
+
+		// 주문 상태 별 수량 조회
+		// mav.addObject("orderCount", coreOrderService.getOrderStatCount(orderChange));
+
+		// 주문상세상태코드 설정
+		mav.addObject("ordDtlStatList", rendererService.getCommonCodeList("G013", "Y", new String[] {"G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderListForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 취반교 목록 조회
+	 *
+	 * @param OrderChange
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 02. 18
+	 */
+	@PostMapping("/cre/list")
+	@ResponseBody
+	public GagaMap getCreList(@RequestBody OrderChange orderChange) {
+		GagaMap map = new GagaMap();
+
+		// 페이징 처리 설정
+		TscPageRequest pageable = new TscPageRequest((orderChange.getPageNo() > 0 ? orderChange.getPageNo() - 1 : 0), orderChange.getPageSize(), orderChange.getPageUnit());
+		pageable.setTotalCount(orderChangeService.getPagingCreListCount(orderChange));
+		orderChange.setPageable(pageable);
+
+		// 페이징 처리 및 주문정보 조회
+		List<Integer> ordChgSqList = new ArrayList<>();
+
+		for (OrderChange tmpOrderChange : orderChangeService.getPagingCreList(orderChange)) {
+			ordChgSqList.add(tmpOrderChange.getOrdChgSq());
+		}
+
+		if (ordChgSqList.size() > 0) {
+			orderChange.setOrdChgSqArr(ordChgSqList.stream().mapToInt(Integer::intValue).toArray());
+		}
+
+		map.set("creList", orderChangeService.getCreList(orderChange));
+		map.set("creInfo", orderChange);
+
+		return map;
+	}
+
 	/**
 	 * 마이페이지 STYLE24 포인트화면
 	 *
@@ -915,11 +987,11 @@ public class TsfMypageController extends TsfBaseController {
 			// WMS IF TABLE 내 정보 업데이트 처리 필요
 		} catch (Exception e) {
 			result.set("status", GagaResponseStatus.FAIL.getCode());
-			result.set("message", "배송지 수정에 실패했습니다.");
+			result.set("message", message.getMessage("FAIL_0002"));
 		}
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-		result.set("message", "정상적으로 배송지가 수정되었습니다.");
+		result.set("message", message.getMessage("DELV_0002"));
 
 		return result;
 	}
@@ -947,11 +1019,11 @@ public class TsfMypageController extends TsfBaseController {
 			commonService.updateDeliverAddrDelvMemo(order);
 		} catch (Exception e) {
 			result.set("status", GagaResponseStatus.FAIL.getCode());
-			result.set("message", "배송메모 수정에 실패했습니다.");
+			result.set("message", message.getMessage("FAIL_0002"));
 		}
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-		result.set("message", "정상적으로 배송메모가 수정되었습니다.");
+		result.set("message", message.getMessage("DELV_0002"));
 
 		return result;
 	}

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

@@ -141,9 +141,9 @@ public class TsfOrderController extends TsfBaseController {
 		}
 		
 		// TODO
-		int[] arr = {1,2,158,150,149,159,148,153,20,12};
+		/*int[] arr = {1,2,158,150,149,159,148,153,20,12};
 		order.setCartSqArr(arr);		// 장바구니시퀀스
-		order.setShotDelvUseYn("Y");	// 장바구니총알배송사용여부
+		order.setShotDelvUseYn("Y");	// 장바구니총알배송사용여부*/
 		
 		// 1.1 카트시퀀스가 정보가 없을때 처리 장바구니로 이동 
 		if (order.getCartSqArr() == null) {

+ 30 - 0
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -219,6 +219,9 @@ public class TsfPlanningController extends TsfBaseController {
 			mav.addObject("planList", planningService.getPlanEventList(plan));
 			mav.addObject("listSize", planningService.getPlanEventList(plan).size());
 			mav.addObject("month", planningService.getAttendMonth(planInfo));
+			if (TsfSession.isLogin()) {
+				mav.addObject("custAttendList",planningService.getCustAttendEntryList(plan));
+			}
 			mav.setViewName(super.getDeviceViewName("planning/PlanningEventAttendForm"));
 			return mav;
 		}
@@ -453,6 +456,7 @@ public class TsfPlanningController extends TsfBaseController {
 		return result;
 	}
 
+
 	/**
 	 * 회원등급 혜택
 	 *
@@ -479,4 +483,30 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("planning/PlanningCustGradeBenefitForm"));
 		return mav;
 	}
+
+	
+	/**
+	 * 출석체크
+	 * 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 4. 7
+	 */
+	@PostMapping("/event/attend/entry")
+	@ResponseBody
+	public GagaMap planningAttendEntry(@RequestBody Plan plan) throws Exception {
+		GagaMap result = new GagaMap();
+		int count = planningService.getAttendEntryCount(plan);
+		if (count > 0) {
+			result.set("msg", "이미 출석체크 되었습니다.");
+		}else {
+			planningService.saveAttendEntry(plan);
+			result.set("msg", "출석체크 되었습니다.");
+			result.set("custAttendList",planningService.getCustAttendEntryList(plan));
+			
+		}
+		
+		return result;
+
+	}
 }

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

@@ -88,4 +88,6 @@ public class Cart extends TscBaseDomain {
 	private Integer updCartSq;	// 업데이트할 장바구니번호
 	private Integer delCartSq;	// 삭제할 장바구니번호(0이면 삭제할 장바구니번호 없음)
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private Cart[] cartGoodsList;		// 장바구니 단품코드
 }

+ 7 - 0
src/main/java/com/style24/persistence/domain/GoodsSearch.java

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -57,4 +58,10 @@ public class GoodsSearch extends TscBaseDomain {
     private String  filterCd;
     private String  filterNm;
 
+    private TscPageRequest pageable;				// 페이징
+    private int pageNo;
+    private int pageSize;
+    private int pageUnit = 10;
+    private String sortGb;
+
 }

+ 22 - 7
src/main/java/com/style24/persistence/domain/Plan.java

@@ -245,13 +245,28 @@ public class Plan extends TscBaseDomain {
 
 	private String sysImgNm;			// 상품 이미지
 	
-	private String sun;
-	private String mon;
-	private String tue;
-	private String wed;
-	private String thu;
-	private String fri;
-	private String sat;
+	
+	// 출석체크 주
+	private String sun;			//일요일
+	private String mon;			//월요일
+	private String tue;			//화요일
+	private String wed;			//수요일
+	private String thu;			//목요일
+	private String fri;			//금요일
+	private String sat;			//토요일
+	
+	// 이벤트 참여
+	private Integer entryCustNo;		//참여자 고객번호
+	private String entryDt;				//참여일시
+	private String entryVal1;			//참여값1
+	private String entryVal2;			//참여값2
+	private String entryVal3;			//참여값3
+	private String entryVal4;			//참여값4
+	private String entryVal5;			//참여값5
+	private String entryVal6;			//참여값6
+	private String entryVal7;			//참여값7
+	private String entryVal8;			//참여값8
+	
 	
 	
 	

+ 24 - 0
src/main/java/com/style24/persistence/domain/Review.java

@@ -2,6 +2,7 @@ package com.style24.persistence.domain;
 
 import java.util.Collection;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
@@ -63,6 +64,7 @@ public class Review extends TscBaseDomain {
 	private String scoreBallNm;		// 볼넓이점수(공통코드G041)
 	private String photoYn;			// 포토상품평유무
 	private String goodsType;		// 상품유형
+	private String selfGoodsYn;		// 자사상품여부
 	private int rownum;
 	
 	private String reviewScore;		// 상품평 검색조건 평점
@@ -89,6 +91,28 @@ public class Review extends TscBaseDomain {
 	private String siteCd;
 	private String reviewStat;		// 리뷰상태(수정or등록)
 	
+	private String payDt;
+	private String brandEnm;
+	private String optCd1;
+	private String optCd2;
+	private String remainDt;
+	private String itemNm;
+	private String colorNm;	
+	
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] itemNmArr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCdArr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] colorNmArr;	// 컬러명
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCd1Arr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCd2Arr;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] itemQtyArr;	// 구성상품번호
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	
 	// Masking
 	public String getMaskingCustId() {
 		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;

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

@@ -594,21 +594,55 @@
 		SELECT
 		<choose>
 			<when test="filterGb != null and filterGb =='SIZE'">
-		       SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
+		SUBSTRING_INDEX(FILTER_CD,'|',1) AS FILTER_CD
 			</when>
 			<otherwise>
-		       FILTER_CD
+		FILTER_CD
 			</otherwise>
 		</choose>
-			 , FILTER_NM
-		FROM	TB_CATE_FILTER
-		WHERE	1=1
-		  AND	SITE_CD = #{siteCd}
-		  AND 	CATE_GB = #{cateGb}
-		  AND 	FORMAL_GB = #{formalGb}
-		  AND 	BRAND_GROUP_NO = #{brandGroupNo}
-		  AND 	CATE_NO = #{cateNo}
-		  AND 	FILTER_GB = #{filterGb}
+		, FILTER_NM
+		FROM TB_CATE_FILTER
+		WHERE 1=1
+		AND SITE_CD = #{siteCd}
+		AND CATE_GB = #{cateGb}
+		AND FORMAL_GB = #{formalGb}
+		AND BRAND_GROUP_NO = #{brandGroupNo}
+		AND CATE_NO = #{cateNo}
+		AND FILTER_GB = #{filterGb}
 		ORDER BY DISP_ORD
 	</select>
+
+	<!-- 카테고리별 상품 총 수 -->
+	<select id="getCategoryGoodsCount" parameterType="GoodsSearch" resultType="int">
+		/* TsfDisplay.getCategoryGoodsCount */
+		SELECT COUNT(1) AS TOTCNT
+		FROM (SELECT A.GOODS_CD
+		           , A.CATE_NO
+		           , A.DISP_ORD
+		           , A.REG_NO
+		           , A.REG_DT
+		      FROM TB_CATE_GOODS A
+		      WHERE 1 = 1
+		        AND EXISTS(SELECT 1
+		                    FROM TB_CATE_4SRCH
+		                    WHERE 1 = 1
+		                      AND LEAF_CATE_NO = A.CATE_NO
+		                      AND CATE1_NO = #{cate1No}
+		                    <if test="cate2No != null and cate2No != ''">
+		                     AND CATE2_NO = #{cate2No}
+							</if>
+		                    <if test="cate3No != null and cate3No != ''">
+		                    AND CATE3_NO = #{cate3No}
+							</if>
+		                    <if test="cate4No != null and cate4No != ''">
+		                    AND CATE4_NO = #{cate4No}
+							</if>
+		                    <if test="cate5No != null and cate5No != ''">
+		                    AND CATE5_NO = #{cate5No}
+		                    </if>
+				  )
+		) A
+		   , TB_GOODS C
+		WHERE A.GOODS_CD = C.GOODS_CD
+	</select>
 </mapper>

+ 29 - 39
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -82,15 +82,15 @@
 		SELECT Z.*
 		     , 100 - ROUND((CURR_PRICE / LIST_PRICE) * 100 ,0) AS DC_RATE 
 		     , ((PNT_RATE * CURR_PRICE) / 100) AS PNT_AMT
+		     , FN_GET_GOODS_NM(GOODS_NM,GOODS_GB,FOREIGN_BUY_YN,PARALLEL_IMPORT_YN,ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
 		FROM (
 		SELECT G.GOODS_CD
 		     , G.GOODS_NM
 		     , G.GOODS_TNM
-		     , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
-		             ,IF(G.FOREIGN_BUY_YN='Y','[해외구매대행]','' )
-		             ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
-		             ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
-		             ,G.GOODS_NM ) AS GOODS_FULL_NM
+		     , G.GOODS_GB
+		     , G.FOREIGN_BUY_YN
+		     , G.PARALLEL_IMPORT_YN
+		     , G.ORDER_MADE_YN
 		     , G.BRAND_CD
 		     , (CASE WHEN D.DISP_NM_LANG = 'EN' THEN D.BRAND_GROUP_ENM ELSE D.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
 		     , D.BRAND_GROUP_NO
@@ -113,7 +113,6 @@
 		     , E.DELV_FEE
 		     , E.MIN_ORD_AMT
 		     , E.DELV_FEE_CRITE
-		     , G.GOODS_GB
 		     , FN_GET_CODE_NM('G073',G.GOODS_GB) AS GOODS_GB_NM
 		     , (SELECT NI_CLSF_CD
 		        FROM TB_ITEMKIND
@@ -399,11 +398,7 @@
 		/* TsfGoods.getGoodsDealComposeList */
 		SELECT Z.* 
 		     , 100 - ROUND((CURR_PRICE / LIST_PRICE) * 100 ,0) AS DC_RATE 
-		     , CONCAT(IF(IFNULL(GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',GOODS_GB),']'),'') )
-		             ,IF(FOREIGN_BUY_YN='Y','[해외구매대행]','' )
-		             ,IF(PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
-		             ,IF(ORDER_MADE_YN='Y','[주문제작]','')
-		             ,GOODS_NM ) AS GOODS_FULL_NM
+		     , FN_GET_GOODS_NM(GOODS_NM,GOODS_GB,FOREIGN_BUY_YN,PARALLEL_IMPORT_YN,ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
 		FROM (
 		SELECT C.GOODS_CD
 		     , C.COMPS_GOODS_CD
@@ -630,31 +625,31 @@
 		/* TsfGoods.getTmtbGoodsList */
 		SELECT Z.*
 		     , 100 - ROUND((CURR_PRICE / LIST_PRICE) * 100 ,0) AS DC_RATE
+		     , FN_GET_GOODS_NM(GOODS_NM,GOODS_GB,FOREIGN_BUY_YN,PARALLEL_IMPORT_YN,ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
 		FROM (
 		      SELECT B.GOODS_CD 
 		           , G.GOODS_NM
-		           , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
-		                   ,IF(G.FOREIGN_BUY_YN='Y','[해외구매대행]','' )
-		                   ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
-		                   ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
-		                   ,G.GOODS_NM ) AS GOODS_FULL_NM
-		          , G.GOODS_STAT
-		          , G.GOODS_TYPE
-		          , G.MIN_ORD_QTY 
-		          , (CASE WHEN E.DISP_NM_LANG = 'EN' THEN E.BRAND_GROUP_ENM ELSE E.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
-		          , G.LIST_PRICE
-		          , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
-		          , G.MAIN_COLOR_CD
-		          , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-		          , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
-		          , S.STOCK_QTY
-		          , S.SOLDOUT_YN
-		          , S.OPT_CD
-		          , V.VIDEO_GB_M
-		          , V.VIDEO_VAL_M
-		          , V.VIDEO_GB_S
-		          , V.VIDEO_VAL_S
-		          , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
+		           , G.GOODS_GB
+		           , G.FOREIGN_BUY_YN
+		           , G.PARALLEL_IMPORT_YN
+		           , G.ORDER_MADE_YN
+		           , G.GOODS_STAT
+		           , G.GOODS_TYPE
+		           , G.MIN_ORD_QTY 
+		           , (CASE WHEN E.DISP_NM_LANG = 'EN' THEN E.BRAND_GROUP_ENM ELSE E.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
+		           , G.LIST_PRICE
+		           , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
+		           , G.MAIN_COLOR_CD
+		           , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
+		           ,  (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
+		           , S.STOCK_QTY
+		           , S.SOLDOUT_YN
+		           , S.OPT_CD
+		           , V.VIDEO_GB_M
+		           , V.VIDEO_VAL_M
+		           , V.VIDEO_GB_S
+		           , V.VIDEO_VAL_S
+		           , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		      FROM TB_TMTB A
 		      INNER JOIN TB_TMTB_APPLY_GOODS B ON a.TMTB_SQ  = B.TMTB_SQ
 		      INNER JOIN TB_GOODS G ON B.GOODS_CD = G.GOODS_CD
@@ -822,11 +817,7 @@
 		SELECT A.GOODS_CD
 		     , A.COMPS_GOODS_CD
 		     , G.GOODS_NM AS COMPS_GOODS_NM
-		     , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
-		             ,IF(G.FOREIGN_BUY_YN='Y','[해외구매대행]','' )
-		             ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
-		             ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
-		             ,G.GOODS_NM ) AS COMPS_GOODS_FULL_NM
+		     , 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명*/
 		     , A.QTY
 		     , G.BRAND_CD
 		     , G.GOODS_STAT
@@ -971,7 +962,6 @@
 						</otherwise>
 					</choose>
 		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		            AND    G.FORMAL_GB = 'G009_10' /*정상상품*/
 		            AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
 		            AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
 		            AND    S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/

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

@@ -316,9 +316,7 @@
 		     , CARD_KIND
 		     , CARD_BANK
 		     , CARD_NM
-		     , CASE CARD_MIPS WHEN 0 THEN '일시불'
-							  ELSE CONCAT(CARD_MIPS, '개월')
-				END									AS CARD_MIPS
+		     , IF(CARD_MIPS = 0, '일시불', CONCAT(CARD_MIPS, '개월')) AS CARD_MIPS
 		     , CARD_PCABLE_YN
 		     , VA_NO
 		     , VA_NM

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

@@ -95,10 +95,8 @@
 		             , OD.RETURNABLE_YN
 		             , G.SELF_GOODS_YN
 		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
-		             , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL THEN 0
-		                    ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
-		                END                                                             AS ORD_REQ_CHG_QTY
-		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IF(OCD.ORD_REQ_CHG_QTY IS NULL, 0, OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY) AS ORD_CAN_CHG_QTY
+		             , IFNULL(OCD.ORD_REQ_CHG_QTY, 0)                                   AS ORD_REQ_CHG_QTY
+		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
 		             , CA.BANK_CD
 		             , CA.ACCOUNT_NO
 		             , IFNULL(CA.ACCOUNT_NM, O.ORD_NM)                                  AS ACCOUNT_NM
@@ -231,10 +229,8 @@
 		             , OD.RETURNABLE_YN
 		             , G.SELF_GOODS_YN
 		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                                  AS BRAND_NM
-		             , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL THEN 0
-		                    ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
-		                END                                                                   AS ORD_REQ_CHG_QTY
-		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IF(OCD.ORD_REQ_CHG_QTY IS NULL, 0, OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY) AS ORD_CAN_CHG_QTY
+		             , IFNULL(OCD.ORD_REQ_CHG_QTY, 0)                                         AS ORD_REQ_CHG_QTY
+		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)          AS ORD_CAN_CHG_QTY
 		             , CA.BANK_CD
 		             , CA.ACCOUNT_NO
 		             , IFNULL(CA.ACCOUNT_NM, O.ORD_NM)                                        AS ACCOUNT_NM
@@ -492,4 +488,144 @@
 		 GROUP BY Z.ORD_NO, Z.ORD_DTL_NO, Z.ORD_DTL_ITEM_SQ, Z.ITEM_CD, Z.OPT_CD1, Z.OPT_CD2
 				, Z.COLOR_NM, Z.GOODS_TYPE, Z.SELF_GOODS_YN, Z.ITEM_NM, Z.GOODS_STAT
 	</select>
+	
+	<!-- 마이페이지 취반교 내역 조회 -->
+	<select id="getCreList" parameterType="OrderChange" resultType="OrderChange">
+		/* TsfOrderChange.getCreList */
+		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_CHG_SQ
+		     , Z.CHG_DT
+		     , Z.CHG_ORD_DTL_NO
+		     , Z.CHG_STAT
+		     , Z.ORD_NO
+		     , Z.ORD_DTL_NO
+		     , Z.GOODS_CD
+		     , Z.BRAND_NM
+		     , Z.SHOT_DELV_YN
+		     , Z.SELF_GOODS_YN
+		     , Z.GOODS_NM
+		     , Z.LIST_PRICE
+		     , Z.SYS_IMG_NM
+		     , Z.GIFT_PACK_YN
+		  FROM (SELECT OC.ORD_CHG_SQ
+		             , OC.REG_DT                                                        AS CHG_DT
+		             , OCD.CHG_ORD_DTL_NO
+		             , OCD.CHG_STAT
+		             , OD.ORD_NO
+		             , OCD.ORD_DTL_NO
+		             , G1.GOODS_CD
+		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
+		             , OD.SHOT_DELV_YN
+		             , G1.SELF_GOODS_YN
+		             , G1.GOODS_NM
+		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1)                                 AS COLOR_NM
+		             , G2.GOODS_NM AS ITEM_NM
+		             , ODI.ORD_DTL_ITEM_SQ
+		             , ODI.OPT_CD1
+		             , ODI.OPT_CD2
+		             , G1.LIST_PRICE
+		             , CASE WHEN G1.GOODS_TYPE != 'G056_S' AND G1.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                    ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = IFNULL(G1.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM
+		             , OD.GIFT_PACK_YN
+		          FROM TB_ORDER_CHANGE OC
+		         INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		            ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+		         INNER JOIN TB_ORDER_DETAIL OD
+		            ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+		           AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25')
+		         INNER JOIN TB_ORDER O
+		            ON OD.ORD_NO = O.ORD_NO
+		         INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+		            ON OD.ORD_NO = ODI.ORD_NO
+		           AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		           AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25')
+		         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_BRAND B
+		            ON G1.BRAND_CD = B.BRAND_CD
+		          LEFT OUTER JOIN TB_COLOR C
+		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD)
+		           AND C.USE_YN = 'Y'
+		         WHERE OCD.DEL_YN = 'N'
+		           AND O.DISP_YN = 'Y'
+		<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="ordChgSq != null and ordChgSq != ''">
+			AND OC.ORD_CHG_SQ = #{ordChgSq}
+		</if>
+		<if test="ordDtlNoArr != null">
+			AND OD.ORD_DTL_NO IN
+			<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		<if test="ordChgSqList != null">
+			AND OC.ORD_CHG_SQ IN
+			<foreach collection="ordChgSqList" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		<if test="chgStat != null and chgStat != ''">
+			AND OCD.CHG_STAT = #{chgStat}
+		</if>
+		  ) Z
+		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_DT, Z.CHG_ORD_DTL_NO, Z.CHG_STAT, Z.ORD_NO, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM
+		        , Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.GIFT_PACK_YN
+	</select>
+
+	<!-- 마이페이지 취반교 조회 페이징 처리 주문변경번호 수 조회 -->
+	<select id="getPagingCreListCount" parameterType="OrderChange" resultType="int">
+		/* TsfOrderChange.getPagingCreListCount */
+		SELECT COUNT(*) AS CNT
+		  FROM (SELECT OCD.ORD_CHG_SQ
+		          FROM TB_ORDER O
+		         INNER JOIN TB_ORDER_DETAIL OD
+		            ON O.ORD_NO = OD.ORD_NO
+		          LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		            ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		         WHERE O.DISP_YN = 'Y'
+		           AND OCD.ORD_CHG_SQ IS NOT NULL
+		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
+		           AND OCD.REG_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
+		</if>
+		<if test="ordDtlStat != null and ordDtlStat != ''">
+		           AND OCD.CHG_STAT = #{chgStat}
+		</if>
+		         GROUP BY OCD.CHG_STAT
+		       ) Z
+	</select>
+
+	<!-- 마이페이지 취반교 조회 페이징 처리 주문변경번호 조회 -->
+	<select id="getPagingCreList" parameterType="OrderChange" resultType="OrderChange">
+		/* TsfOrderChange.getPagingCreList */
+		<include refid="selectForPagingHeader"/>
+		SELECT OCD.ORD_CHG_SQ
+		  FROM TB_ORDER O
+		 INNER JOIN TB_ORDER_DETAIL OD
+		    ON O.ORD_NO = OD.ORD_NO
+		  LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		 WHERE O.DISP_YN = 'Y'
+		   AND OCD.ORD_CHG_SQ IS NOT NULL
+		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
+		   AND OCD.REG_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
+		</if>
+		<if test="ordDtlStat != null and ordDtlStat != ''">
+		   AND OCD.CHG_STAT = #{chgStat}
+		</if>
+		 GROUP BY OCD.CHG_STAT
+		<include refid="selectForPagingFooter"/>
+	</select>
 </mapper>

+ 64 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1103,6 +1103,7 @@
 	
 	<!-- 달력 출력 -->
 	<select id="getAttendMonth" resultType="Plan" parameterType="Plan">
+		/* TsfPlanning.getAttendMonth" */
 		SELECT
 		      MIN(CASE WHEN WEEKDAY = '1' THEN DAY END ) AS 'sun'
 		      ,MIN(CASE WHEN WEEKDAY = '2' THEN DAY END )AS 'mon'
@@ -1136,4 +1137,67 @@
 		)AS TEMP2
 		GROUP BY WEEK
 	</select>
+	
+	<!-- 출석체크 insert -->
+	<insert id="saveAttendEntry" parameterType="Plan">
+		/* TsfPlanning.saveAttendEntry */	
+		INSERT INTO TB_PLAN_ENTRY
+		        (PLAN_SQ
+		        , ENTRY_CUST_NO
+		        , ENTRY_DT
+		        , ENTRY_VAL1
+		        , ENTRY_VAL2
+		        , ENTRY_VAL3
+		        , ENTRY_VAL4
+		        , ENTRY_VAL5
+		        , ENTRY_VAL6
+		        , ENTRY_VAL7
+		        , ENTRY_VAL8
+		        , REG_NO
+		        , REG_DT
+		        , UPD_NO
+		        , UPD_DT
+		        )
+		VALUES
+		        ( #{planSq}
+		        , #{custNo}
+		        , CURRENT_TIMESTAMP
+		        , #{entryVal1}
+		        , #{entryVal2}
+		        , #{entryVal3}
+		        , #{entryVal4}
+		        , #{entryVal5}
+		        , #{entryVal6}
+		        , #{entryVal7}
+		        , #{entryVal8}
+		        , #{custNo}
+		        , CURRENT_TIMESTAMP
+		        , #{custNo}
+		        , CURRENT_TIMESTAMP
+		        )
+	</insert>
+	
+	<!-- 출석 여부 -->
+	<select id="getAttendEntryCount" resultType="int" parameterType="Plan">
+		/* TsfPlanning.getAttendEntryCount */	
+		SELECT COUNT(*) AS COUNT
+		FROM TB_PLAN_ENTRY
+		WHERE 1=1 
+		 AND PLAN_SQ = #{planSq}
+		 AND DATE_FORMAT(ENTRY_DT, '%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
+		 AND ENTRY_CUST_NO = #{custNo}
+	</select>
+	
+	<!-- 출석한 리스트 -->
+	<select id="getCustAttendEntryList" resultType="Plan" parameterType="Plan">
+		/* TsfPlanning.getCustAttendEntryList */	
+		SELECT PLAN_ENTRY_SQ 
+		      ,PLAN_SQ 
+		      ,ENTRY_CUST_NO 
+		      ,DATE_FORMAT(ENTRY_DT,'%e') AS ENTRY_DT 
+		FROM TB_PLAN_ENTRY
+		WHERE 1=1 
+		AND PLAN_SQ = #{planSq}
+		AND ENTRY_CUST_NO = #{custNo}
+	</select>
 </mapper>

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

@@ -31,12 +31,12 @@
 		                              AND R.ORD_DTL_NO  = OD.ORD_DTL_NO
 		                              AND R.GOODS_CD = OD.GOODS_CD
 		INNER JOIN TB_CUSTOMER C ON R.REG_NO  = C.CUST_NO
-		<if test="goodsType != null and goodsType = 'G056_D'">
+		<if test="goodsType != null and goodsType == 'G056_D'">
 		INNER JOIN TB_GOODS_COMPOSE GC ON R.GOODS_CD  = GC.COMPS_GOODS_CD
 		</if>
 		WHERE 1 = 1
 		<choose>
-		    <when test="goodsType != null and goodsType = 'G056_D'">
+		    <when test="goodsType != null and goodsType == 'G056_D'">
 		AND    R.GOODS_CD = GC.COMPS_GOODS_CD
 		AND    GC.GOODS_CD = #{goodsCd}
 		    </when>
@@ -63,12 +63,24 @@
 		AND R.SCORE = #{reviewScore}
 		</if>
 		<if test="reviewOption != null and reviewOption != ''">
+		<choose>
+		    <when test='selfGoodsYn != null and selfGoodsYn == "Y"'>
 		AND EXISTS (SELECT 1
 		            FROM TB_ORDER_DETAIL_ITEM ODI 
 		            WHERE ODI.ORD_NO = R.ORD_NO 
 		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
 		            AND ODI.OPT_CD2 = #{reviewOption}
 		           )
+		    </when>
+		    <otherwise>
+		AND EXISTS (SELECT 1
+		            FROM TB_ORDER_DETAIL_ITEM ODI 
+		            WHERE ODI.ORD_NO = R.ORD_NO 
+		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
+		            AND ODI.OPT_CD1 = #{reviewOption}
+		           )
+		    </otherwise>
+		</choose>
 		</if>
 		<if test="reviewHeight != null and reviewHeight != ''">
 		 <![CDATA[
@@ -207,12 +219,24 @@
 		AND R.SCORE = #{reviewScore}
 		</if>
 		<if test="reviewOption != null and reviewOption != ''">
+		<choose>
+		    <when test='selfGoodsYn != null and selfGoodsYn == "Y"'>
 		AND EXISTS (SELECT 1
 		            FROM TB_ORDER_DETAIL_ITEM ODI 
 		            WHERE ODI.ORD_NO = R.ORD_NO 
 		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
 		            AND ODI.OPT_CD2 = #{reviewOption}
 		           )
+		    </when>
+		    <otherwise>
+		AND EXISTS (SELECT 1
+		            FROM TB_ORDER_DETAIL_ITEM ODI 
+		            WHERE ODI.ORD_NO = R.ORD_NO 
+		            AND ODI.ORD_DTL_NO  = R.ORD_DTL_NO
+		            AND ODI.OPT_CD1 = #{reviewOption}
+		           )
+		    </otherwise>
+		</choose>
 		</if>
 		<if test="reviewHeight != null and reviewHeight != ''">
 		 <![CDATA[
@@ -310,152 +334,309 @@
 	</select>
 
 	<!-- 마이페이지 작성가능한 리뷰 -->
-	<select id="getCompleteReviewList" parameterType="Review" resultType="Goods">
+	<select id="getCompleteReviewList" parameterType="Review" resultType="Review">
 		/* 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 IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
-			                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 IN ('G013_70','G013_50','G013_60')
-			                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 일이내것만 -->
+		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.PAY_DT
+		     , 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.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.BRAND_ENM
+		     , Z.ORD_DTL_STAT_NM
+		     , Z.ORD_REQ_CHG_QTY
+		     , Z.ORD_CAN_CHG_QTY
+		     , Z.ITEMKIND_NM 
+		   	 , Z.ITEMKIND_CD 
+             , Z.SIZE_GB 
+             , Z.REMAIN_DT
+		  FROM (SELECT O.ORD_NO
+					 , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
+					 , DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_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
+		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                    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') END AS 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.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
+			         , B.BRAND_ENM
+					 , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
+					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
+					 , 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 IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
+				 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 IN('G013_70','G013_50','G013_60') -- 구매 확정인것만
+				 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 JOIN TB_ITEMKIND I 
+				    ON G.ITEMKIND_CD = I.ITEMKIND_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 OCD.DEL_YN = 'N'
+									GROUP BY OCD.ORD_DTL_NO
+								  ) OCD
+				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				  WHERE 1=1
+				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') 
 				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 				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
+			 	AND O.SITE_CD = #{siteCd}
+				) Z
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, 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.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.BRAND_ENM, Z.ORD_DTL_STAT_NM
+				, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
+		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
 	</select>
 	
 	<!-- 마이페이지 리뷰작성 상품데이타 -->
-	<select id="getReviewGoodsInfo" parameterType="Review" resultType="Goods">
+	<select id="getReviewGoodsInfo" parameterType="Review" resultType="Review">
 		/* TsfReivew.getReviewGoodsInfo */
-		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 
-			      <if test="reviewStat == 'u'.toString()">
-			      ,R.REVIEW_SQ        
-			      ,R.REVIEW_GB        
-				  ,R.REVIEW_TITLE     
-			      ,R.REVIEW_CONTENT   
-				  ,R.SCORE            
-				  ,R.HEIGHT           
-				  ,R.WEIGHT           
-				  ,R.SCORE_SIZE       
-				  ,R.SCORE_COLOR      
-				  ,R.SCORE_FIT        
-				  ,R.SCORE_THICK      
-				  ,R.SCORE_WEIGHT     
-				  ,R.SCORE_BALL       
-				  ,R.GIVE_DUE_PNT     
-				  ,R.PNT_GIVE_STAT    
-				  ,R.BEST_YN          
-				  ,R.GIVE_DUE_BPNT    
-				  ,R.BPNT_GIVE_YN     
-				  ,R.DISP_YN          
-				  ,R.DEL_YN           
-				  ,R.CONFIRM_YN       
-				  ,R.CONFIRM_UNO      
-				  ,R.CONFIRM_DT       
-				  ,R.REG_NO           
-				  ,R.REG_DT           
-				  ,R.UPD_NO           
-				  ,R.UPD_DT           
-				  ,R.ADM_RPL          
-				  ,R.ADM_RPL_REG_NO   
-				  ,R.ADM_RPL_DT       
-				  </if>
-			      ,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 IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
-			                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 IN ('G013_70','G013_50','G013_60')
-			                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
-			               <if test="reviewStat == 'u'.toString()">
-			                INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
+		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.PAY_DT
+		     , 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.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.BRAND_ENM
+		     , Z.ORD_DTL_STAT_NM
+		     , Z.ORD_REQ_CHG_QTY
+		     , Z.ORD_CAN_CHG_QTY
+		     , Z.ITEMKIND_NM 
+		   	 , Z.ITEMKIND_CD 
+             , Z.SIZE_GB 
+             , Z.REMAIN_DT
+             <if test="reviewStat == 'u'.toString()">
+             , Z.REVIEW_SQ        
+			 , Z.REVIEW_GB        
+			 , Z.REVIEW_TITLE     
+			 , Z.REVIEW_CONTENT   
+			 , Z.SCORE            
+			 , Z.HEIGHT           
+			 , Z.WEIGHT           
+			 , Z.SCORE_SIZE       
+			 , Z.SCORE_COLOR      
+			 , Z.SCORE_FIT        
+			 , Z.SCORE_THICK      
+			 , Z.SCORE_WEIGHT     
+			 , Z.SCORE_BALL       
+			 , Z.GIVE_DUE_PNT     
+			 , Z.PNT_GIVE_STAT    
+			 , Z.BEST_YN          
+			 , Z.GIVE_DUE_BPNT    
+			 , Z.BPNT_GIVE_YN     
+			 , Z.DISP_YN          
+			 , Z.DEL_YN           
+			 , Z.CONFIRM_YN       
+			 , Z.CONFIRM_UNO      
+			 , Z.CONFIRM_DT       
+			 , Z.REG_NO           
+			 , Z.REG_DT           
+			 , Z.UPD_NO           
+			 , Z.UPD_DT           
+			 , Z.ADM_RPL          
+			 , Z.ADM_RPL_REG_NO   
+			 , Z.ADM_RPL_DT 
+			 </if>
+		  FROM (SELECT O.ORD_NO
+					 , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d') AS ORD_DT
+					 , DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_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
+		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                    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') END AS 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.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
+				     , B.BRAND_ENM
+				     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
+					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
+					 , I.ITEMKIND_NM 
+		   	         , I.ITEMKIND_CD 
+			         , I.SIZE_GB 
+			         ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
+			          <if test="reviewStat == 'u'.toString()">
+			         , R.REVIEW_SQ        
+			         , R.REVIEW_GB        
+				     , R.REVIEW_TITLE     
+			         , R.REVIEW_CONTENT   
+				     , R.SCORE            
+				     , R.HEIGHT           
+				     , R.WEIGHT           
+				     , R.SCORE_SIZE       
+				     , R.SCORE_COLOR      
+				     , R.SCORE_FIT        
+				     , R.SCORE_THICK      
+				     , R.SCORE_WEIGHT     
+				     , R.SCORE_BALL       
+				     , R.GIVE_DUE_PNT     
+				     , R.PNT_GIVE_STAT    
+				     , R.BEST_YN          
+				     , R.GIVE_DUE_BPNT    
+				     , R.BPNT_GIVE_YN     
+				     , R.DISP_YN          
+				     , R.DEL_YN           
+				     , R.CONFIRM_YN       
+				     , R.CONFIRM_UNO      
+				     , R.CONFIRM_DT       
+				     , R.REG_NO           
+				     , R.REG_DT           
+				     , R.UPD_NO           
+				     , R.UPD_DT           
+				     , R.ADM_RPL          
+				     , R.ADM_RPL_REG_NO   
+				     , R.ADM_RPL_DT   
+				     </if>
+				  FROM TB_ORDER O
+				 INNER JOIN TB_ORDER_DETAIL OD
+				    ON O.ORD_NO = OD.ORD_NO
+				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60) -- 구매 확정인것만
+				 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 IN('G013_70','G013_50','G013_60') -- 구매 확정인것만
+				 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 JOIN TB_ITEMKIND I 
+				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
+				 <if test="reviewStat == 'u'.toString()">
+				 INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
 			                                      AND R.ORD_NO = O.ORD_NO
 			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
-			               </if> 
-			WHERE 1=1
-				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+			      </if>                          
+				  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'
+									GROUP BY OCD.ORD_DTL_NO
+								  ) OCD
+				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				  WHERE 1=1
+				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') 
 				<choose>
 					<when test="reviewStat == 'u'.toString()">
 					AND O.ORD_NO IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
@@ -464,10 +645,11 @@
 					AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 					</otherwise>
 				</choose>
-				AND O.CUST_NO = #{custNo}
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+				AND O.CUST_NO = 100000
 				AND O.DISP_YN = 'Y'
-				AND O.SITE_CD = #{siteCd}
-				<if test="ordNo!=null and ordNo != ''">
+			 	AND O.SITE_CD = 'G000_10'
+     			<if test="ordNo!=null and ordNo != ''">
 				AND O.ORD_NO = #{ordNo}
 				</if>
 				<if test="ordDtlNo!=null and ordDtlNo != ''">
@@ -476,8 +658,19 @@
 				<if test="goodsCd!=null and goodsCd!=''">
 				AND G.GOODS_CD = #{goodsCd}
 				</if>
-		)F
-		ORDER BY F.PAY_DT DESC
+				) Z
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, 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.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.BRAND_ENM,Z.ORD_DTL_STAT_NM
+				, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
+				 <if test="reviewStat == 'u'.toString()">
+				, Z.REVIEW_SQ , Z.REVIEW_SQ , Z.REVIEW_GB , Z.REVIEW_TITLE , Z.REVIEW_CONTENT , Z.SCORE , Z.HEIGHT           
+				, Z.WEIGHT  , Z.SCORE_SIZE , Z.SCORE_COLOR , Z.SCORE_FIT , Z.SCORE_THICK , Z.SCORE_WEIGHT , Z.SCORE_BALL , Z.GIVE_DUE_PNT , Z.PNT_GIVE_STAT    
+			    , Z.BEST_YN, Z.GIVE_DUE_BPNT , Z.BPNT_GIVE_YN , Z.DISP_YN , Z.DEL_YN, Z.CONFIRM_YN, Z.CONFIRM_UNO, Z.CONFIRM_DT, Z.REG_NO, Z.REG_DT      
+			    , Z.UPD_NO, Z.UPD_DT, Z.ADM_RPL, Z.ADM_RPL_REG_NO, Z.ADM_RPL_DT  
+			    </if>          
+		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
 	</select>
 	
 	<!-- 마이페이지 작성가능한 리뷰 -->

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

@@ -20,7 +20,7 @@ logging:
 has-ssl: false
 
 domain:
-    wivis: //lpfront.style24.com
+    front: //lpfront.style24.com
     image: //image.style24.com/speedy_image-wivismall
     uximage: //lpfront.style24.com
 

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

@@ -16,8 +16,8 @@ spring:
 logging.config: classpath:log/logback-run.xml
 
 domain:
-    wivis: //www.style24.com
-    image: //image.style24.com/speedy_image-wivismall
+    front: //www.style24.com
+    image: //image.style24.com
     uximage: //www.style24.com
 
 # SSL Server
@@ -33,12 +33,12 @@ upload:
         target.path: /app/was/deploy/wivismall.front/data/goods
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall/goods
+        view: //image.istyle24.com/Upload/ProductImage
     image:
         target.path: /app/was/deploy/wivismall.front/data
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall
+        view: //image.istyle24.com/Upload
     excel:
         target.path: /app/was/deploy/wivismall.front/data/excel
         max.size: 10

+ 5 - 5
src/main/resources/config/application-tsit.yml

@@ -28,27 +28,27 @@ domain:
 
 upload:
     default:
-        target.path: /TSIT/servers/files/data
+        target.path: /TSIT/servers/files/data/style24
         max.size: 10
         allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
         view: //tdimage.style24.com
     goods:
-        target.path: /TSIT/servers/files/data/goods
+        target.path: /TSIT/servers/files/data/style24/Upload/ProductImage
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
         view: //image.istyle24.com/Upload/ProductImage
     image:
-        target.path: /TSIT/servers/files/data
+        target.path: /TSIT/servers/files/data/style24
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
         view: //tdimage.style24.com
     excel:
-        target.path: /TSIT/servers/files/data/excel
+        target.path: /TSIT/servers/files/data/style24/excel
         max.size: 10
         allow.extension: xls|xlsx
         view: //tdimage.style24.com/excel
     sample:
-        target.path: /WIDE/workspace/files/data
+        target.path: /WIDE/workspace/files/data/style24/sample
         max.size: 10
         allow.extension: txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
         view: //tdimage.style24.com/sample

+ 14 - 0
src/main/resources/i18n/messages/message_ko_KR.properties

@@ -92,3 +92,17 @@ SABANGNET_0010=\uCD9C\uACE0\uB97C \uC704\uD574 ERP\uB85C \uC804\uC1A1\uD558\uC60
 #\uCFE0\uD3F0
 COUPON_0001=\uCD1D {0}\uC7A5\uC758 \uCFE0\uD3F0\uC744 \uB2E4\uC6B4\uB85C\uB4DC \uD558\uC600\uC2B5\uB2C8\uB2E4.
 COUPON_0002=\uC774\uBBF8 \uB2E4\uC6B4\uB85C\uB4DC\uB97C \uC644\uB8CC \uD558\uC168\uC2B5\uB2C8\uB2E4.
+
+#\uAD50\uD658
+EXCHANGE_0001=\uAD50\uD658 \uC2E0\uCCAD\uC774 \uC811\uC218\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
+
+#\uBC18\uD488
+RETURN_0001=\uBC18\uD488 \uC2E0\uCCAD\uC774 \uC811\uC218\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
+
+#\uCDE8\uC18C
+CANCEL_0001=\uC8FC\uBB38 \uCDE8\uC18C\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
+
+#\uBC30\uC1A1
+DELV_0001=\uC815\uC0C1\uC801\uC73C\uB85C \uBC30\uC1A1\uC9C0\uAC00 \uC218\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
+DELV_0002=\uC815\uC0C1\uC801\uC73C\uB85C \uBC30\uC1A1\uBA54\uBAA8\uAC00 \uC218\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
+

+ 5 - 3
src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html

@@ -11,16 +11,18 @@
 	
 	<div class="app">
 		<!-- GNB -->
+			
 		<header class=" "> <!-- 서브페이지에서는 <header>의 클래스.main 제거 -->
-			<section class="htop" id="htopSub" style="background: #fff;">
-				<button type="button" class="btn_back" title="이전페이지로">
+			<section class="htop trans" id="htopSub" style="background: #fff;">
+				<button class="btn_back" title="이전페이지로">
 					<span>
 						<i class="gl1"></i>
 						<i class="gl2"></i>
 						<i class="gl3"></i>
 					</span>
 				</button>
-				<h1 id="htopTitle">상품상세</h1>
+				<!-- 210405_타이틀 수정 -->
+				<!--<h1 id="htopTitle">PAGE TITLE</h1>-->
 			</section>
 		</header>
 

+ 61 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsDeliveryFormMob.html

@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  :GoodsDeliveryFormMob.html
+ * @desc	: 상품 배송안내 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.06   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<!-- 해당상품 -->
+			<div class="item_blk">
+				<div class="item_prod" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+					<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" th:text="${goodsInfo.goodsFullNm}">남성</div>
+						</a>
+					</div>
+				</div>
+			</div>
+			<!-- //해당상품 -->
+		</div>
+		<div class="modal-body" id="goodsDealDelivery">
+		</div>
+	</div>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_goods_delivery')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+		
+	// 구성 상품 상세 배송정보
+	var fnGoodsDetailDelivery = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/delivery/frame", "html", "goodsDealDelivery", params);
+	}
+	
+	$(document).ready( function() {
+
+		// 배송정보 
+		var params = new Object();
+		let goodsCd = [[${goodsInfo.goodsCd}]]
+		params.goodsCd = goodsCd;
+		fnGoodsDetailDelivery(params);  // ajax html
+		
+	});
+	
+/*]]>*/
+</script>
+ </html>

+ 101 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html

@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsDetailDeliveryFormMob.html
+ * @desc	: 딜 구상상품 배송정보 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR		 DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim	   최초 작성
+ *******************************************************************************
+ -->
+ <div class="pd_delivery">
+	<div class="inner">
+		<div class="delivery">
+			<div class="pop_cont">
+				<h2>배송안내</h2>
+				<h3>구분</h3>
+				<th:block th:if="${goodsInfo.quikDelvYn = 'Y'}" ><p class="dot">총알배송(오전 10시까지 주문 시)</p></th:block>
+				<th:block th:unless="${goodsInfo.quikDelvYn = 'Y'}" ><p class="dot">일반배송</p></th:block>
+			</div>
+			<div class="pop_cont">
+				<h3>배송비</h3>
+				<p class="dot">
+					<th:block th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
+					<th:block th:if="${goodsInfo.delvFee > 0}" th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>원
+					<th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
+				</p>
+			</div>
+			<div class="pop_cont">
+				<h3>배송업체</h3>
+				<p class="dot"><th:block th:if="${deliveryInfo != null}" th:text="${deliveryInfo.shipCompNm}" ></th:block></p>
+			</div>
+			<div class="pop_cont">
+				<h3>기간</h3>
+				<p class="dot">총알배송 : 오늘 밤 12시까지 도착 (토/일/공휴일 제외)</p>
+				<p class="dot">일반배송 : 결제 완료 후 2~3일 이내 (일/공휴일 제외)</p>
+				<p class="dot">단, 제주도나 도서 지방은 별도요금이 부과될 수 있습니다. 날씨나 택배사 사정에 따라 배송이 지연될 수 있습니다.</p>
+			</div>
+		</div>
+	</div>
+	<div class="inner wide">
+		<div class="pop_board"></div>
+	</div>
+	<div class="inner">
+		<div class="change">
+			<div class="pop_cont">
+				<h2>반품/교환안내</h2>
+				<table class="pop_table">
+					<tbody>
+					<tr>
+						<th>반품/교환<br>배송업체</th>
+						<td><th:block  th:if="${deliveryInfo != null}" th:text="${deliveryInfo.shipCompNm}" ></th:block></td>
+					</tr>
+					<tr>
+						<th>반품배송비</th>
+						<td><th:block  th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null}" th:text="${#numbers.formatInteger(deliveryInfo.rtnDelvFee, 0,'COMMA')}" ></th:block>원(최소 배송비가 무료인 경우 왕복 배송비 <th:block th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null}" th:text="${#numbers.formatInteger((deliveryInfo.rtnDelvFee+deliveryInfo.delvFee), 0,'COMMA')}" ></th:block>원 부과)
+						</td>
+					</tr>
+					<tr>
+						<th>교환배송비</th>
+						<td><th:block  th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null}" th:text="${#numbers.formatInteger((deliveryInfo.rtnDelvFee+deliveryInfo.delvFee), 0,'COMMA')}" ></th:block>원</td>
+					</tr>
+					<tr>
+						<th>반품/교환 주소</th>
+						<td><th:block th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null}" th:text="${deliveryInfo.rtnLocZipcode +' '+ deliveryInfo.rtnLocBaseAddr +'<br/>'+ deliveryInfo.rtnLocDtlAddr }"></th:block></td>
+					</tr>
+				</tbody></table>
+			</div>
+			<div class="pop_cont">
+				<h3>반품/교환 신청</h3>
+				<p class="dot">반품/교환 시 먼저 고객센터(1544-5336)나 일대일 문의로 반품/교환 신청 후 상품을 발송 해 주시기 바랍니다.</p>
+				<p class="dot">마이페이지 &gt; 나의쇼핑 &gt; 정상주문내역에서 하실 수 있습니다.</p>
+				<p class="dot">반품/교환 신청시 상품의 반송입고 확인 후 환불/교환 처리해 드립니다.</p>
+			</div>
+			<div class="pop_cont">
+				<h3>반품시기</h3>
+				<p class="dot">상품의 반품/교환은 상품 수령 후 7일 이내 가능합니다. 단, 상품을 수령하셨을 때의 상태를 그대로 보존해 주셔야 합니다.</p>
+			</div>
+			<div class="pop_cont">
+				<h3>반품/교환 불가사유</h3>
+				<p class="dot">반품/교환 가능기간을 초과하였을 경우.</p>
+				<p class="dot">상품 및 구성품을 분실하였거나 취급 부주의로 인한 파손/고장/오염된 경우.</p>
+				<p class="dot">고객님의 요청에 따른 주문제작 상품의 경우.</p>
+				<p class="dot">상품을 착용 또는 설치하였거나, 상품의 일부를 소비하였을 경우.</p>
+				<p class="dot">상품의 포장을 개봉하여 사용 및 설치가 완료 되거나 상품의 가치가 훼손되었을 경우.</p>
+				<p class="dot">구매한 상품의 구성품(세트, 기프트상품, 부속품, 의류부착 악세사리 등)이 누락 된 경우.</p>
+				<p class="dot">신발, 그릇류의 박스포장을 포함, 상품이 판매할 수 없게 훼손 된 경우(신발박스 등의 파손, 박스포장 위 송장 부착, 박스 훼손/파손/찢어집, 택 분실 등)</p>
+			</div>
+			<div class="pop_cont" th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null and not #strings.isEmpty(deliveryInfo.note)}">
+				<h3>기타사항</h3>
+				<th:block th:if="${not #strings.isEmpty(deliveryInfo.note)}" th:utext="${#strings.unescapeJava(#strings.escapeJava(deliveryInfo.note))}"></th:block>
+			</div>
+		</div>
+	</div>
+</div>	
+</html>

+ 173 - 756
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -165,7 +165,7 @@
 			</div>
 		</div>
 
-		<div class="inner">
+		<div class="inner tmtb">
 			<div class="pd_together" id="goodsTmtbArea">
 			</div>
 		</div>
@@ -389,109 +389,37 @@
 			<!-- 리뷰영역 -->
 			<div class="riview_box">
 				<div class="ex_review">
-					<a href="#none" id="btn_pdReview_pop">	
-						<span class="tit">리뷰 <em class="number">(9,999+)</em></span>
-						<div class="star_score">
-							<span class="star">
-								<em class="progbar" style="width:86%;"></em> <!-- 평점 style로 표기 -->
+					<a href="javascript:void(0);" id="btn_pdReview_pop" th:onclick="cfGoodsReview([[${goodsInfo.goodsCd}]])">	
+						<span class="tit">리뷰 <em class="number">(<th:block  th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</em></span>
+						<div class="star_score" th:if="${goodsInfo.reviewRegCnt  > 0 }">
+							<span class="star" th:with="starScore=${#numbers.formatDecimal((goodsInfo.score*100/5), 0,0)}">
+								<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
 							</span>
-							<span class="score">4.3점</span>
+							<span class="score" th:text="|${goodsInfo.score}점|">4.3점</span>
 						</div>
 					</a>
 				</div>
-				<div class="area_slider" id="btn_pdBestReview_pop">
+				<div class="area_slider" id="btn_pdBestReview_pop" th:if="${bestReviewList != null and !bestReviewList.empty}">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">
-							<div class="swiper-slide">
-								<!-- 베스트 리뷰 등록시 노출 -->
-								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
-											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
-											</span>
-											<em class="ico ico_besttag"></em>
-										</div>
-										<div class="lap">
-											<div class="pic">
-												<span class="thumb mov" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-											</div>
-											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
-											</div>
-										</div>
-									</a>
-								</div>
-								<!-- //베스트 리뷰 등록시 노출 -->
-							</div>
-							<div class="swiper-slide">
-								<!-- 베스트 리뷰 등록시 노출 -->
-								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
-											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
-											</span>
-											<em class="ico ico_besttag"></em>
-										</div>
-										<div class="lap">
-											<div class="pic">
-												<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span>
-											</div>
-											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
-											</div>
-										</div>
-									</a>
-								</div>
-								<!-- //베스트 리뷰 등록시 노출 -->
-							</div>
-							<div class="swiper-slide">
+							<div class="swiper-slide"  th:each="bestReview, status : ${bestReviewList}"  >
 								<!-- 베스트 리뷰 등록시 노출 -->
 								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
+									<a href="javascript:void(0);">
+										<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">
 											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
+												<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
 											</span>
 											<em class="ico ico_besttag"></em>
 										</div>
 										<div class="lap">
-											<div class="pic">
-												<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span>
+											<div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
+												<th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
+												<span class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}"  th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+												</th:block>
 											</div>
 											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
-											</div>
-										</div>
-									</a>
-								</div>
-								<!-- //베스트 리뷰 등록시 노출 -->
-							</div>
-							<div class="swiper-slide">
-								<!-- 베스트 리뷰 등록시 노출 -->
-								<div class="best_review">
-									<a href="#none">
-										<div class="star_score">
-											<span class="star">
-												<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
-											</span>
-											<em class="ico ico_besttag"></em>
-										</div>
-										<div class="lap">
-											<div class="pic">
-												<span class="thumb mov" style="background-image:url('/images/mo/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-											</div>
-											<div class="txt_best_review">
-												<p>
-													옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-												</p>
+												<p th:text="${bestReview.reviewContent}">옷</p>
 											</div>
 										</div>
 									</a>
@@ -524,16 +452,16 @@
 					</li>
 					<li>
 						<div class="ex_shipping">
-							<a href="#none" id="btn_pdDelivery_Pop">
+							<a href="javascript:void(0)" id="btn_pdDelivery_Pop" th:onclick="cfGoodsDelivery([[${goodsInfo.goodsCd}]])">
 								<span class="tit">배송/교환/반품</span>
 							</a>
 							<!-- 해당 배송정보 선택노출 -->
-							<span class="txt_shippingfee">배송비 2,500원</span>
-							<span class="txt_shippingfee">배송비 2,500원 (4,000원 이상 무료배송)</span>
-							<span class="txt_shippingfee">무료배송</span>
-							<span class="txt_shippingfee">총알배송(오전 10시까지 주문 시)</span>
+							<span class="txt_shippingfee" th:if="${goodsInfo.delvFee > 0}">배송비 <th:block th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>원
+													<th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
+							</span>
+							<span class="txt_shippingfee" th:if="${goodsInfo.delvFee <= 0}">무료배송</span>
+							<span class="txt_shippingfee" th:if="${goodsInfo.quikDelvYn = 'Y'}">총알배송(오전 10시까지 주문 시)</span>
 							<!-- //해당 배송정보 선택노출 -->
-							
 						</div>
 					</li>
 				</ul>
@@ -548,183 +476,31 @@
 				</div>
 				<!-- //이상품과 함께 본 상품영역-->
 				<!-- STYLE24의 스타일링 추천 -->
-				<div class="pd_recommend">
+				<div class="pd_recommend" th:if="${lookbookList != null and !lookbookList.empty}">
 					<h3 class="tit">STYLE24의 스타일링 추천</h3>
 					<!-- 상품이미지pic -->
-					<div class="area_slider pic_img">
+					<div class="area_slider pic_img" >
 						<div class="swiper-container">
 							<div class="swiper-wrapper">
-								<div class="swiper-slide">
-									<div class="page">
-										<div class="pic">
-											<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook1.jpg');"></span>
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:15.83%; top:68.33%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr">
-														<a href="">
-															상품명11
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:45%; top:40%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr">
-														<a href="">
-															상품명12
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->	   
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:85%; top:62%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr" style="display: none;">
-														<a href="">
-															상품명13
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->								   
-										</div>
-									</div>									
-								</div>
-								<div class="swiper-slide">
-									<div class="page">
-										<div class="pic">
-											<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook1.jpg');"></span>
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:15.83%; top:68.33%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr">
-														<a href="">
-															상품명11
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:45%; top:40%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr">
-														<a href="">
-															상품명12
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->	   
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:85%; top:62%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr" style="display: none;">
-														<a href="">
-															상품명13
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->								   
-										</div>
-									</div>									
-								</div>
-								<div class="swiper-slide">
+								<div class="swiper-slide" th:each="lookbook, status : ${lookbookList}">
 									<div class="page">
 										<div class="pic">
-											<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook1.jpg');"></span>
+											<span class="thumb" th:style="${'background-image:url(' + imgUrl+ lookbook.sysFileNm+');'}"></span>
 											<!-- 상품피커 -->
-											<div class="item_picker" style="left:15.83%; top:68.33%;">
+											<th:block th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}"
+														th:each="lookbookGoods, goodsStatus : ${lookbook.lookbookGoodsList}">
+											<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}" >
 												<div>
 													<button type="button"><span class="ico ico_picker"></span></button>
 													<div class="pick_descr">
-														<a href="">
-															상품명11
-														</a>
+														<a href="javascript:void(0)"><th:block th:text="${lookbookGoods.goodsFullNm}"></th:block></a>
 													</div>
 												</div>
 											</div>
 											<!-- //상품피커 -->
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:45%; top:40%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr">
-														<a href="">
-															상품명12
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->	   
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:85%; top:62%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr" style="display: none;">
-														<a href="">
-															상품명13
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->								   
-										</div>
-									</div>									
-								</div>
-								<div class="swiper-slide">
-									<div class="page">
-										<div class="pic">
-											<span class="thumb" style="background-image:url('/images/mo/thumb/tmp_pdLookbook1.jpg');"></span>
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:15.83%; top:68.33%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr">
-														<a href="">
-															상품명11
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:45%; top:40%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr">
-														<a href="">
-															상품명12
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->	   
-											<!-- 상품피커 -->
-											<div class="item_picker" style="left:85%; top:62%;">
-												<div>
-													<button type="button"><span class="ico ico_picker"></span></button>
-													<div class="pick_descr" style="display: none;">
-														<a href="">
-															상품명13
-														</a>
-													</div>
-												</div>
-											</div>
-											<!-- //상품피커 -->								   
+											</th:block>
 										</div>
-									</div>									
+									</div>
 								</div>
 							</div>
 							<!-- Add Pagination -->
@@ -733,388 +509,31 @@
 					</div>
 					<!-- //상품이미지pic -->
 					<!-- 상품이미지pic 리스트 -->
-					<div class="area_slider pic_list">
-						<div class="box">
-							<div class="swiper-container">
-								<div class="swiper-wrapper">
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-								</div>   
-							</div>
-							<div class="btn_group_flex">
-								<div>
-									<button type="button" class="btn btn_default"><span>모두 쇼핑백 담기</span></button>
-								</div>
-							</div>
-						</div>
-						<div class="box">
-							<div class="swiper-container">
+					<div class="area_slider pic_list"  th:with="ithrCd=aa , contentsLoc=bb ">
+						<div class="box"  th:each="lookbook, status : ${lookbookList}">
+							<div class="swiper-container"  th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}">
 								<div class="swiper-wrapper">
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide swiper-slide-next">
-										<div class="item_prod">
+									<div class="swiper-slide" th:each="lookbookGoods, goodsStatus : ${lookbook.lookbookGoodsList}" >
+										<div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''" 
+																th:attr="goodsCd=${lookbookGoods.goodsCd}, optCd=${lookbookGoods.optCd}, minOrdQty=${lookbookGoods.minOrdQty},  goodsType=${lookbookGoods.goodsType}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}">
 											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
+												<button type="button" class="itemLike" th:classappend="${lookbookGoods.wishYn == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${lookbookGoods.goodsCd}, ithrCd=${ithrCd}, contentsLoc=${contentsLoc}, planDtlSq=''">관심상품 추가</button>
+												<a href="javascript:void(0)" class="itemLink">
 													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
+														<img class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
+													<p class="itemBrand" th:text="${lookbookGoods.brandGroupNm}">BRAND NAME</p>
+													<div class="itemName" th:text="${lookbookGoods.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+													<p class="itemPrice" th:text="${#numbers.formatInteger(lookbookGoods.currPrice, 0,'COMMA')}">80,100</p>
 												</a>
 											</div>
 										</div>
 									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-								</div>   
-							</div>
-							<div class="btn_group_flex">
-								<div>
-									<button type="button" class="btn btn_default"><span>모두 쇼핑백 담기</span></button>
 								</div>
 							</div>
-						</div>
-						<div class="box">
-							<div class="swiper-container">
-								<div class="swiper-wrapper">
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-								</div>   
-							</div>
 							<div class="btn_group_flex">
 								<div>
-									<button type="button" class="btn btn_default"><span>모두 쇼핑백 담기</span></button>
-								</div>
-							</div>
-						</div>
-						<div class="box">
-							<div class="swiper-container">
-								<div class="swiper-wrapper">
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img class="vLHTC pd_img" src="/images/mo/thumb/tmp_cartColor1.jpg" alt="">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-													<p class="itemPrice">
-														80,100
-													</p>
-												</a>
-											</div>
-										</div>
-									</div>
-								</div>   
-							</div>
-							<div class="btn_group_flex">
-								<div>
-									<button type="button" class="btn btn_default"><span>모두 쇼핑백 담기</span></button>
+									<button type="button" class="btn btn_default" onclick="fnAddCartLookBookGoods(this);"><span>모두 쇼핑백 담기</span></button>
 								</div>
 							</div>
 						</div>
@@ -1405,7 +824,7 @@
 	<div class="product_floormenu"><!--  ☞☞ 제품이 품절되면 soldout클래스 추가 -->
 		<div class="share_like">
 			<button type="button" class="share">공유하기</button>
-			<!-- <th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsSnsForm}"></th:block> -->
+			<!-- <th:block th:include="~{web/goods/GoodsIncludeFormMob :: goodsSnsForm}"></th:block> -->
 			<button type="button" class="like" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  
 					onclick="cfnPutWishList(this);" 
 					th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">위시리스트</button>
@@ -2019,6 +1438,39 @@
 		cfnAddCart(params);
 	}
 
+	// 룩북속 상품 쇼핑백 담기
+	var fnAddCartLookBookGoods = function(obj){
+		
+		let $obj = $(obj);
+		let $target = $obj.parent().parent().parent().find('.swiper-container').find('.item_prod');
+		let btnType = "C";
+		let params = [];
+		
+		$target.each(function(){
+			if ($(this).hasClass('unable')) {
+				
+			}else{
+				
+				let obj = new Object();
+				obj.goodsCd = $(this).attr("goodsCd");
+				obj.optCd = $(this).attr("optCd");
+				obj.goodsQty = $(this).attr("minOrdQty");
+				obj.goodsType = $(this).attr("goodsType");
+				obj.cartGb = btnType;
+				obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
+				obj.ithrCd = $(this).attr("ithrCd");
+				obj.contentsLoc = $(this).attr("contentsLoc");
+				obj.planDtlSq = '';
+				params.push(obj);
+			}
+		});
+		
+		// 장바구니담기
+		if (params.length > 0){
+			cfnAddCart(params);	
+		}
+	}
+	
 	
 	$(document).ready( function() {
 		
@@ -2038,25 +1490,25 @@
 		params.goodsOtherGb = "tmtb";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsTmtbSearch(params);
+		fnGoodsTmtbSearch(params);
 		
 		// 함께본 상품(ajax html)
 		params.goodsOtherGb = "together";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsTogetherSearch(params);
+		fnGoodsTogetherSearch(params);
 		
 		// 추천 상품(ajax html)
 		params.goodsOtherGb = "recommend";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsRecommendSearch(params);
+		fnGoodsRecommendSearch(params);
 		
 		// 비슷한 상품(ajax html)
 		params.goodsOtherGb = "like";
 		params.ithrCd = "tmtb";
 		params.contentsLoc = "tmtb";
-		//fnGoodsLikeSearch(params);
+		fnGoodsLikeSearch(params);
 	
 		// selecter
 		$(function(){
@@ -2099,92 +1551,6 @@
 			setInterval(function() { promotionTimer(); }, 1000);
 		}
 		
-		fnOptionSoldout();
-		
-		// 광고 스크립트용
-		var goodsNavigation = [[${goodsNavigation}]];
-		var cate1Nm = "";
-		var cate2Nm = "";
-		var cate3Nm = "";
-		var cate4Nm = "";
-		var cate5Nm = "";
-		if (!gagajf.isNull(goodsNavigation)) {
-			cate1Nm = goodsNavigation.cate1Nm;
-			cate2Nm = goodsNavigation.cate2Nm;
-			cate3Nm = goodsNavigation.cate3Nm;
-			cate4Nm = goodsNavigation.cate4Nm;
-			cate5Nm = goodsNavigation.cate3Nm;
-			
-			if (!gagajf.isNull(cate1Nm)) {
-				cateNm += cate1Nm;
-			}
-			if (!gagajf.isNull(cate2Nm)) {
-				cateNm += ' > ' + cate2Nm;
-			}
-			if (!gagajf.isNull(cate3Nm)) {
-				cateNm += ' > ' + cate3Nm;
-			}
-			if (!gagajf.isNull(cate4Nm)) {
-				cateNm += ' > ' + cate4Nm;
-			}
-			if (!gagajf.isNull(cate5Nm)) {
-				cateNm += ' > ' + cate5Nm;
-			}
-		}
-		// 광고 스크립트용
-		
-		var snsGoodsImg = _uploadGoodsUrl + [[${goodsInfo.sysImgNm}]];
-		var snsUrl = location.protocol + _PAGE_GOODS_DETAIL + params.goodsCd +'&colorCd =' + params.colorCd  ;
-		var snsGoodsFullNm = [[${goodsInfo.goodsFullNm}]];
-		
-		<!-- 페이스북 카카오스토리 연동 관련 메타태그 -->
-		$("meta[property='og:url']").attr('content', snsUrl);
-		$("meta[property='og:title']").attr('content', snsGoodsFullNm);
-		$("meta[property='og:description']").attr('content', snsGoodsFullNm);
-		$("meta[property='og:image']").attr('content', snsGoodsImg);
-
-		<!-- 트위터 관련 메타태그 -->
-		$("meta[name='twitter:url']").attr('content', snsUrl);
-		$("meta[name='twitter:title']").attr('content', snsGoodsFullNm);
-		$("meta[name='twitter:description']").attr('content', snsGoodsFullNm);
-		$("meta[name='twitter:image']").attr('content', snsGoodsImg);
-
-		// 추천솔류션 meta 설정
-		$("meta[property='eg:type']").attr('content',"product");
-		$("meta[property='eg:cuid']").attr('content',eglqueueCuid);
-		$("meta[property='eg:itemId']").attr('content', [[${goodsInfo.goodsCd}]] );
-		$("meta[property='eg:itemName']").attr('content',[[${goodsInfo.goodsFullNm}]] );
-		$("meta[property='eg:itemImage']").attr('content', snsGoodsImg);
-		$("meta[property='eg:itemUrl']").attr('content',snsUrl);
-		$("meta[property='eg:originalPrice']").attr('content',[[${goodsInfo.listPrice}]]);
-		$("meta[property='eg:salePrice']").attr('content',[[${goodsInfo.currPrice}]]);
-		$("meta[property='eg:category1']").attr('content',cate1Nm);
-		$("meta[property='eg:category2']").attr('content',cate2Nm);
-		$("meta[property='eg:category3']").attr('content',cate3Nm);
-		$("meta[property='eg:category4']").attr('content',cate4Nm);
-		$("meta[property='eg:category5']").attr('content',cate5Nm);
-		$("meta[property='eg:brandId']").attr('content',[[${goodsInfo.brandGroupNo}]]);
-		$("meta[property='eg:brandName']").attr('content',[[${goodsInfo.brandGroupNm}]]);
-		$("meta[property='eg:regDate']").attr('content',[[${goodsInfo.regDt}]].toDate("YYYYMMDDHHmmss").format("YYYY-MM-DDTHH:mm:ssZ"));
-		$("meta[property='eg:updateDate']").attr('content',[[${goodsInfo.updDt}]].toDate("YYYYMMDDHHmmss").format("YYYY-MM-DDTHH:mm:ssZ"));
-		$("meta[property='eg:stock']").attr('content',"");
-		$("meta[property='eg:state']").attr('content',[[${goodsInfo.goodsStatNm}]]);
-		$("meta[property='eg:description']").attr('content',null);
-		$("meta[property='eg:extraImage']").attr('content',null);
-		$("meta[property='eg:locale']").attr('content',"KR");
-		$("meta[property='eg:isNew']").attr('content',([[${goodsInfo.formalGb}]] == 'G009_10')? 'True' :'False');
-		$("meta[property='eg:etc1']").attr('content', [[${goodsInfo.selfGoodsYn}]]);
-		
-		
-		$('.btn_copy').bind('click', function() {
-			copyToClipboard();
-		});
-		
-	});
-	
-	// 상품 대표설명 > 좌측 상품썸네일 navi, 우측 상품정보 고정 
-	$(window).scroll(function(){
-		
 		//상품상세정보 더보기   
 		$(document).on('click','.pd_descrp .btn_more_box button',function(e){
 			$('.pd_descrp .cont_body').toggleClass('on'); 
@@ -2264,13 +1630,6 @@
 			},
 		});
 
-		//팝업 - 배송교환반품 안내
-		$(document).on('click','#btn_pdDelivery_Pop',function(e){
-			$("#pdDeliveryPop").modal("show");
-			$('#pdDeliveryPop .modal-body').load('pd_delivery_pop.html');
-			return false;
-		})
-
 		//팝업 - 리뷰
 		$(document).on('click','#btn_pdReview_pop',function(e){
 			$("#pdReviewPop").modal("show");
@@ -2296,37 +1655,6 @@
 			return false;
 		})
 
-		//팝업 - 제품리뷰 > 카테고리팝오픈
-		// 오픈
-		$(document).on('click','.pd_review .category_open > li',function(e){
-			var dataName=$(this).attr("data_name");
-			$(".pd_review .category_box").show();
-			$(".pd_review .category_list").find(".category").hide();
-			$(".pd_review .category_list").find("#"+dataName).show();
-			return false;
-		});
-		// 닫기
-		$(document).on('click','.pd_review .category_box .category_close',function(e){
-			$(".pd_review .category_box").hide();
-			return false;
-		});
-		// 변경
-		$(document).on('click','.pd_review .category ul > li',function(e){
-			var num=$(".pd_review .category_open > li").length;
-			var value=$(this).find("a").attr("data");
-			var name=$(this).parent().parent().attr("id");
-			$(this).parent().find("li").removeClass("active");
-			$(this).addClass("active");
-			for(var i=0; i < num; i++){
-				var dataname=$(".pd_review .category_open > li").eq(i).attr("data_name");
-				if(name==dataname){
-					$(".pd_review .category_open > li").eq(i).find("span").text(value);
-				}
-			}
-			return false;
-		});
-
-
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
 			$(".Purchase_pop .pop_option_select").show();
@@ -2345,6 +1673,95 @@
 			$(this).next(".review_list").toggleClass('active');
 			return false;
 		});
+		
+		fnOptionSoldout();
+		
+		// 광고 스크립트용
+		var goodsNavigation = [[${goodsNavigation}]];
+		var cate1Nm = "";
+		var cate2Nm = "";
+		var cate3Nm = "";
+		var cate4Nm = "";
+		var cate5Nm = "";
+		if (!gagajf.isNull(goodsNavigation)) {
+			cate1Nm = goodsNavigation.cate1Nm;
+			cate2Nm = goodsNavigation.cate2Nm;
+			cate3Nm = goodsNavigation.cate3Nm;
+			cate4Nm = goodsNavigation.cate4Nm;
+			cate5Nm = goodsNavigation.cate3Nm;
+			
+			if (!gagajf.isNull(cate1Nm)) {
+				cateNm += cate1Nm;
+			}
+			if (!gagajf.isNull(cate2Nm)) {
+				cateNm += ' > ' + cate2Nm;
+			}
+			if (!gagajf.isNull(cate3Nm)) {
+				cateNm += ' > ' + cate3Nm;
+			}
+			if (!gagajf.isNull(cate4Nm)) {
+				cateNm += ' > ' + cate4Nm;
+			}
+			if (!gagajf.isNull(cate5Nm)) {
+				cateNm += ' > ' + cate5Nm;
+			}
+		}
+		// 광고 스크립트용
+		
+		var snsGoodsImg = _uploadGoodsUrl + [[${goodsInfo.sysImgNm}]];
+		var snsUrl = location.protocol + _PAGE_GOODS_DETAIL + params.goodsCd +'&colorCd =' + params.colorCd  ;
+		var snsGoodsFullNm = [[${goodsInfo.goodsFullNm}]];
+		
+		<!-- 페이스북 카카오스토리 연동 관련 메타태그 -->
+		$("meta[property='og:url']").attr('content', snsUrl);
+		$("meta[property='og:title']").attr('content', snsGoodsFullNm);
+		$("meta[property='og:description']").attr('content', snsGoodsFullNm);
+		$("meta[property='og:image']").attr('content', snsGoodsImg);
+
+		<!-- 트위터 관련 메타태그 -->
+		$("meta[name='twitter:url']").attr('content', snsUrl);
+		$("meta[name='twitter:title']").attr('content', snsGoodsFullNm);
+		$("meta[name='twitter:description']").attr('content', snsGoodsFullNm);
+		$("meta[name='twitter:image']").attr('content', snsGoodsImg);
+
+		// 추천솔류션 meta 설정
+		$("meta[property='eg:type']").attr('content',"product");
+		$("meta[property='eg:cuid']").attr('content',eglqueueCuid);
+		$("meta[property='eg:itemId']").attr('content', [[${goodsInfo.goodsCd}]] );
+		$("meta[property='eg:itemName']").attr('content',[[${goodsInfo.goodsFullNm}]] );
+		$("meta[property='eg:itemImage']").attr('content', snsGoodsImg);
+		$("meta[property='eg:itemUrl']").attr('content',snsUrl);
+		$("meta[property='eg:originalPrice']").attr('content',[[${goodsInfo.listPrice}]]);
+		$("meta[property='eg:salePrice']").attr('content',[[${goodsInfo.currPrice}]]);
+		$("meta[property='eg:category1']").attr('content',cate1Nm);
+		$("meta[property='eg:category2']").attr('content',cate2Nm);
+		$("meta[property='eg:category3']").attr('content',cate3Nm);
+		$("meta[property='eg:category4']").attr('content',cate4Nm);
+		$("meta[property='eg:category5']").attr('content',cate5Nm);
+		$("meta[property='eg:brandId']").attr('content',[[${goodsInfo.brandGroupNo}]]);
+		$("meta[property='eg:brandName']").attr('content',[[${goodsInfo.brandGroupNm}]]);
+		$("meta[property='eg:regDate']").attr('content',[[${goodsInfo.regDt}]].toDate("YYYYMMDDHHmmss").format("YYYY-MM-DDTHH:mm:ssZ"));
+		$("meta[property='eg:updateDate']").attr('content',[[${goodsInfo.updDt}]].toDate("YYYYMMDDHHmmss").format("YYYY-MM-DDTHH:mm:ssZ"));
+		$("meta[property='eg:stock']").attr('content',"");
+		$("meta[property='eg:state']").attr('content',[[${goodsInfo.goodsStatNm}]]);
+		$("meta[property='eg:description']").attr('content',null);
+		$("meta[property='eg:extraImage']").attr('content',null);
+		$("meta[property='eg:locale']").attr('content',"KR");
+		$("meta[property='eg:isNew']").attr('content',([[${goodsInfo.formalGb}]] == 'G009_10')? 'True' :'False');
+		$("meta[property='eg:etc1']").attr('content', [[${goodsInfo.selfGoodsYn}]]);
+		
+		
+		$('.btn_copy').bind('click', function() {
+			copyToClipboard();
+		});
+		
+		
+		
+	});
+	
+	// 상품 대표설명 > 좌측 상품썸네일 navi, 우측 상품정보 고정 
+	$(window).scroll(function(){
+		
 	});
 
 /*]]>*/

+ 5 - 8
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -15,6 +15,10 @@
  *******************************************************************************
  -->
 <!-- 상품문의 리스트 내용 -->
+<form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
+<input type="hidden" name="pageNo"  value ="1"/>
+<input type="hidden" name="pageSize" value ="20"/>
+<input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 <div class="pd_qnalist">
 	<div class="info_txt">
 		<ul>
@@ -56,10 +60,6 @@
 		<div><button type="button" class="btn btn_dark" id="btn_pdQnaWrite_pop" th:onclick="cfGoodsQngCreate([[${goodsInfo.goodsCd}]] )"><span>상품 문의하기</span></button></div>
 	</div>
 </div>
-<form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
-<input type="hidden" name="pageNo"  value ="1"/>
-<input type="hidden" name="pageSize" value ="20"/>
-<input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 </form>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>
 <script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
@@ -100,7 +100,7 @@
 
 		let tag = '';
 		$.each(result.dataList, function(idx, item) {
-			
+			$('#goodsQnaForm').find('.nodata').hide();
 			tag += '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
 			if (item.selfGb == 1){
 				tag += ' my_qna';	
@@ -149,11 +149,8 @@
 			tag += '</li>\n';
 			
 		});
-		
-		
 		return tag;
 	}
-	
 
 	// 인피니트 스크롤 초기화
 	var fnGoodsQnaInfiniteScrollInit = function(){

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

@@ -0,0 +1,845 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsDetailReviewFormMob.html
+ * @desc	: 상품평 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR		 DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim	   최초 작성
+ *******************************************************************************
+ -->
+<div class="pd_review" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<!-- 등록리뷰 없을 시 -->
+	<div class="area_rv_empty" th:if="${reviewList == null or reviewList.empty}">
+		<div class="txt_box">
+			<p>
+				지금 첫 리뷰를 작성하고<br>
+				<span class="c_primary">스타일포인트 적립</span> 받으세요!
+			</p>
+			<div>
+				<dl>
+					<dt>일반 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.textReviewPoint, 0,'COMMA')}P|">150P</dd>
+				</dl>
+				<dl>
+					<dt>포토/영상 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.photoReviewPoint, 0,'COMMA')}P|">350P</dd>
+				</dl>
+				<dl>
+					<dt>베스트 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.bestReviewPoint, 0,'COMMA')}P|">10,000P</dd>
+				</dl>
+			</div>
+		</div>
+		<div class="btn_group_flex">
+			<div><button type="button" class="btn btn_dark" onclick="cfnGoToMypageReview();"><span>지금 리뷰 작성하기</span></button></div>
+		</div>
+	</div>
+	<!-- //등록리뷰 없을 시 -->
+	<!-- 등록리뷰 있을 시 -->
+	<div class="area_rv_average" th:if="${reviewList != null and !reviewList.empty}">
+		<h6 class="sr-only">구매평점</h6>
+		<div class="star_score">
+			<span class="tit">구매평점</span>
+			<span class="score" th:text="${goodsInfo.score}">4.3</span>
+			<span class="star" th:with="starScore=${#numbers.formatDecimal((goodsInfo.score*100/5), 0,0)}">
+				<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+			</span>
+		</div>
+		<!-- 착용정보 있을 시 노출 -->
+		<th:block th:if="${not #strings.isEmpty(goodsInfo.sizeGb)}">
+		<div class="average">
+			<div class="part_average" th:with="scoreSize1=${#numbers.formatDecimal((goodsInfo.scoreSize1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreSize2=${#numbers.formatDecimal((goodsInfo.scoreSize2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreSize3=${#numbers.formatDecimal((goodsInfo.scoreSize3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">사이즈</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreSize1 >= scoreSize2 and scoreSize1 >= scoreSize3}">작음</th:block>
+							<th:block th:if="${scoreSize2 > scoreSize1 and scoreSize2 >= scoreSize3}">딱맞음</th:block>
+							<th:block th:if="${scoreSize3 > scoreSize1 and scoreSize3 > scoreSize2}">큼</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreSize1 >= scoreSize2 and scoreSize1 >= scoreSize3}" th:text="|${scoreSize1}%|">작음</th:block>
+								<th:block th:if="${scoreSize2 > scoreSize1 and scoreSize2 >= scoreSize3}" th:text="|${scoreSize2}%|">딱맞음</th:block>
+								<th:block th:if="${scoreSize3 > scoreSize1 and scoreSize3 > scoreSize2}" th:text="|${scoreSize3}%|">큼</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>작음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreSize1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreSize1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl class="on">
+						<dt>딱맞음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreSize2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreSize2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl>
+						<dt>큼</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreSize3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreSize3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			<div class="part_average" th:with="scoreColor1=${#numbers.formatDecimal((goodsInfo.scoreColor1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreColor2=${#numbers.formatDecimal((goodsInfo.scoreColor2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreColor3=${#numbers.formatDecimal((goodsInfo.scoreColor3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">컬러</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreColor1 >= scoreColor2 and scoreColor1 >= scoreColor3}">밝음</th:block>
+							<th:block th:if="${scoreColor2 > scoreColor1 and scoreColor2 >= scoreColor3}">똑같음</th:block>
+							<th:block th:if="${scoreColor3 > scoreColor1 and scoreColor3 > scoreColor2}">어두움</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreColor1 >= scoreColor2 and scoreColor1 >= scoreColor3}" th:text="|${scoreColor1}%|">밝음</th:block>
+								<th:block th:if="${scoreColor2 > scoreColor1 and scoreColor2 >= scoreColor3}" th:text="|${scoreColor2}%|">똑같음</th:block>
+								<th:block th:if="${scoreColor3 > scoreColor1 and scoreColor3 > scoreColor2}" th:text="|${scoreColor3}%|">어두움</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl class="on">
+						<dt>밝음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreColor1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreColor1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>똑같음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreColor2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreColor2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl>
+						<dt>어두움</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreColor3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreColor3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			<th:block th:if="${goodsInfo.sizeGb == 'T' or goodsInfo.sizeGb == 'B'}">
+			<div class="part_average" th:with="scoreFit1=${#numbers.formatDecimal((goodsInfo.scoreFit1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreFit2=${#numbers.formatDecimal((goodsInfo.scoreFit2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreFit3=${#numbers.formatDecimal((goodsInfo.scoreFit3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">핏</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreFit1 >= scoreFit2 and scoreFit1 >= scoreFit3}">슬림</th:block>
+							<th:block th:if="${scoreFit2 > scoreFit1 and scoreFit2 >= scoreFit3}">레귤러</th:block>
+							<th:block th:if="${scoreFit3 > scoreFit1 and scoreFit3 > scoreFit2}">오버</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreFit1 >= scoreFit2 and scoreFit1 >= scoreFit3}" th:text="|${scoreFit1}%|">슬림</th:block>
+								<th:block th:if="${scoreFit2 > scoreFit1 and scoreFit2 >= scoreFit3}" th:text="|${scoreFit2}%|">레귤러</th:block>
+								<th:block th:if="${scoreFit3 > scoreFit1 and scoreFit3 > scoreFit2}" th:text="|${scoreFit3}%|">오버</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl class="on">
+						<dt>슬림</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreFit1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreFit1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>레귤러</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreFit2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreFit2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl>
+						<dt>오버</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreFit3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreFit3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>	
+			</div>
+			<div class="part_average" th:with="scoreThick1=${#numbers.formatDecimal((goodsInfo.scoreThick1*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreThick2=${#numbers.formatDecimal((goodsInfo.scoreThick2*100/goodsInfo.reviewRegCnt), 0,0)}
+												, scoreThick3=${#numbers.formatDecimal((goodsInfo.scoreThick3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">두께감</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreThick1 >= scoreThick2 and scoreThick1 >= scoreThick3}">얇음</th:block>
+							<th:block th:if="${scoreThick2 > scoreThick1 and scoreThick2 >= scoreThick3}">적당함</th:block>
+							<th:block th:if="${scoreThick3 > scoreThick1 and scoreThick3 > scoreThick2}">도톰함</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreThick1 >= scoreThick2 and scoreThick1 >= scoreThick3}" th:text="|${scoreThick1}%|">얇음</th:block>
+								<th:block th:if="${scoreThick2 > scoreThick1 and scoreThick2 >= scoreThick3}" th:text="|${scoreThick2}%|">적당함</th:block>
+								<th:block th:if="${scoreThick3 > scoreThick1 and scoreThick3 > scoreThick2}" th:text="|${scoreThick3}%|">도톰함</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>얇음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreThick1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreThick1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>적당함</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreThick2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreThick2}"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl class="on">
+						<dt>도톰함</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreThick3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreThick3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			</th:block>
+			<th:block  th:if="${goodsInfo.sizeGb == 'S'}">
+			<div class="part_average" th:with="scoreWeight1=${#numbers.formatDecimal((goodsInfo.scoreWeight1*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreWeight2=${#numbers.formatDecimal((goodsInfo.scoreWeight2*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreWeight3=${#numbers.formatDecimal((goodsInfo.scoreWeight3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">무게감</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreWeight1 >= scoreWeight2 and scoreWeight1 >= scoreWeight3}">가벼움</th:block>
+							<th:block th:if="${scoreWeight2 > scoreWeight1 and scoreWeight2 >= scoreWeight3}">적당함</th:block>
+							<th:block th:if="${scoreWeight3 > scoreWeight1 and scoreWeight3 > scoreWeight2}">무거움</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreWeight1 >= scoreWeight2 and scoreWeight1 >= scoreWeight3}" th:text="|${scoreWeight1}%|">가벼움</th:block>
+								<th:block th:if="${scoreWeight2 > scoreWeight1 and scoreWeight2 >= scoreWeight3}" th:text="|${scoreWeight2}%|">적당함</th:block>
+								<th:block th:if="${scoreWeight3 > scoreWeight1 and scoreWeight3 > scoreWeight2}" th:text="|${scoreWeight3}%|">무거움</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>가벼움</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreWeight1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreWeight1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>적당함</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreWeight2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreWeight2"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl class="on">
+						<dt>무거움</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreWeight3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreWeight3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			<div class="part_average" th:with="scoreBall1=${#numbers.formatDecimal((goodsInfo.scoreBall1*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreBall2=${#numbers.formatDecimal((goodsInfo.scoreBall2*100/goodsInfo.reviewRegCnt), 0,0)}
+											, scoreBall3=${#numbers.formatDecimal((goodsInfo.scoreBall3*100/goodsInfo.reviewRegCnt), 0,0)}">
+				<div class="pa_head">
+					<span class="tit">볼너비</span>
+					<dl>
+						<dt>
+							<th:block th:if="${scoreBall1 >= scoreBall2 and scoreBall1 >= scoreBall3}">작음</th:block>
+							<th:block th:if="${scoreBall2 > scoreBall1 and scoreBall2 >= scoreBall3}">딱맞음</th:block>
+							<th:block th:if="${scoreBall3 > scoreBall1 and scoreBall3 > scoreBall2}">큼</th:block>
+						</dt>
+						<dd>
+							<span class="line"></span>
+							<span class="percent">
+								<th:block th:if="${scoreBall1 >= scoreBall2 and scoreBall1 >= scoreBall3}" th:text="|${scoreBall1}%|">작음</th:block>
+								<th:block th:if="${scoreBall2 > scoreBall1 and scoreBall2 >= scoreBall3}" th:text="|${scoreBall2}%|">딱맞음</th:block>
+								<th:block th:if="${scoreBall3 > scoreBall1 and scoreBall3 > scoreBall2}" th:text="|${scoreBall3}%|">큼</th:block>
+							</span>
+						</dd>
+					</dl> 
+				</div>
+				<div class="pa_body">
+					<dl>
+						<dt>작음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreBall1+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreBall1}"></th:block>%</span>
+						</dd>
+					</dl> 
+					<dl>
+						<dt>딱맞음</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreBall2+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreBall2"></th:block>%</span>
+						</dd>
+					</dl>
+					<dl class="on">
+						<dt>큼</dt>
+						<dd>
+							<span class="ratio">
+								<em class="progbar" th:style="${'width:'+scoreBall3+'%;' }"></em>
+							</span>
+							<span class="percent"><th:block th:text="${scoreBall3}"></th:block>%</span>
+						</dd>
+					</dl>
+				</div>
+			</div>
+			</th:block>
+			<div class="btn_group_flex">
+				<div>
+					<button type="button" class="btn btn_default">
+						<span></span>
+					</button>
+				</div>
+			</div>
+			<script>
+				function averag(){
+					var averagBtn=$(".average .btn_group_flex button");
+					var averag=$(".average .pa_body");
+					averagBtn.on('click',function(e){
+						averag.slideToggle();
+						$(this).toggleClass("active")	
+					});  
+				}
+				averag();
+			</script>
+		</div>
+		</th:block>
+		<!-- //착용정보 있을 시 노출 -->
+		<div class="info_review">
+			<p>
+				<i class="ico_point"></i>상품 리뷰 작성 시 <span>스타일포인트 추가 적립!</span>
+			</p>
+			<div>
+				<dl>
+					<dt>일반리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.textReviewPoint, 0,'COMMA')}P|">150P</dd>
+				</dl>
+				<dl>
+					<dt>포토/영상 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.photoReviewPoint, 0,'COMMA')}P|">350P</dd>
+				</dl>
+				<dl>
+					<dt>베스트 리뷰</dt>
+					<dd th:text="|${#numbers.formatInteger(reviewPoint.bestReviewPoint, 0,'COMMA')}P|">10,000P</dd>
+				</dl>
+			</div>
+		</div>
+	</div>
+	<div class="area_rv_best" th:if="${bestReviewList != null and !bestReviewList.empty}">
+		<div class="riview_box">
+			<h6>베스트 리뷰</h6>
+			<div class="area_slider" id="btn_pdBestReview_pop">
+				<div class="swiper-container">
+					<div class="swiper-wrapper">
+						<div class="swiper-slide" th:each="bestReview, status : ${bestReviewList}">
+							<div class="best_review">
+								<a href="javascript:void(0);">
+									<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.score*100/5), 0,0)}">
+										<span class="star">
+											<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+										</span>
+										<em class="ico ico_besttag"></em>
+									</div>
+									<div class="lap">
+										<div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
+											<th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
+											<span class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}"  th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+											</th:block>
+										</div>
+										<div class="txt_best_review">
+											<p th:text="${bestReview.reviewContent}">옷</p>
+										</div>
+									</div>
+								</a>
+							</div>
+						</div>
+					</div>
+					<!-- Add Pagination -->
+					<div class="swiper-pagination"></div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="area_rv_photo" th:if="${photoReviewList != null and !photoReviewList.empty}">
+		<h6>포토/영상 리뷰</h6>
+		<div class="photo_list">
+			<ul>
+				<li  th:each="photoReview, status : ${photoReviewList}" >
+					<th:block th:if="${photoReview.reviewAttachList != null and !photoReview.reviewAttachList.empty}">
+					<th:block th:each="reviewAttach, attachStatus : ${photoReview.reviewAttachList}" th:if="${attachStatus.first}">
+					<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]], '', 'Y', [[${photoReview.reviewSq}]])">
+						<div class="pic">
+							<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+						</div>
+					</a>
+					</th:block>
+					</th:block>
+				</li>
+			</ul>
+			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
+			<div th:if="${#lists.size(photoReviewList) >= 8}">
+				<div>
+					<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])"><span>더 보기</span></button>
+				</div>	
+			</div>
+			<!-- //포토영상 게시글 최대 7개 & 버튼노출 -->
+		</div>
+	</div>
+	<div class="area_rv_all">
+	<form id="goodsReviewForm" name="goodsReviewForm" action="#" th:action="@{'/goods/review/list'}">
+	<input type="hidden" name="pageNo" value ="1"/>
+	<input type="hidden" name="pageSize" value ="20"/>
+	<input type="hidden" name="goodsCd" th:value ="${goodsInfo.goodsCd}"/>
+	<input type="hidden" name="goodsType" th:value ="${goodsInfo.goodsType}"/>
+	<input type="hidden" name="selfGoodsYn" th:value ="${goodsInfo.selfGoodsYn}"/>
+	<input type="hidden" name="reviewScore" />
+	<input type="hidden" name="reviewOption" />
+	<input type="hidden" name="reviewHeight" />
+	<input type="hidden" name="reviewWeight" />
+	
+		<h6>전체리뷰<span>(<span id="reviewCount" th:text="${(reviewCount <= 9999) ? #numbers.formatInteger(reviewCount, 0,'COMMA') : '9,999+'}">9,999+</span>)</span></h6>
+		<div class="selection">
+			<ul class="category_open">
+				<li data_name="grade"><span>평점 전체</span></li>
+				<th:block th:if="${reviewOptionList != null and !reviewOptionList.empty}">
+				<li data_name="size"><span th:text="${(goodsInfo.selfGoodsYn == 'Y')? '사이즈 전체':'옵션 전체'}">사이즈 전체</span></li>
+				</th:block>
+				<li data_name="height" th:if="${reviewHeightList != null and !reviewHeightList.empty}"><span>키 전체</span></li>
+				<li data_name="weight"><span>몸무게 전체</span></li>
+			</ul>
+			<div class="category_box">
+				<div class="lap">
+					<div class="category_close" onclick="fnReviewCateClose();">카테고리닫기</div>
+					<div class="category_list">
+						<!-- 평점,사이즈,키,몸무게 카테고리 -->
+						<div class="category" id="grade">
+							<ul class="n1">
+								<li><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('A','');">전체</a></li>
+								<li><a href="javascript:void(0)" data="5점" onclick="fnReviewSearch('A','5');">5점&nbsp;★★★★★</a></li>
+								<li><a href="javascript:void(0)" data="4점" onclick="fnReviewSearch('A','4');">4점&nbsp;★★★★</a></li>
+								<li><a href="javascript:void(0)" data="3점" onclick="fnReviewSearch('A','3');">3점&nbsp;★★★</a></li>
+								<li><a href="javascript:void(0)" data="2점" onclick="fnReviewSearch('A','2');">2점&nbsp;★★</a></li>
+								<li><a href="javascript:void(0)" data="1점" onclick="fnReviewSearch('A','1');">1점&nbsp;★</a></li>
+							</ul>
+						</div>
+						<div class="category" id="size" th:if="${reviewOptionList != null and !reviewOptionList.empty}">
+							<ul class="n2">
+								<li class="active"><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('O','');">전체</a></li>
+								<li th:each="reviewOption, status : ${reviewOptionList}">
+									<a href="javascript:void(0)" th:attr="data=${reviewOption.optCd}" th:onclick="fnReviewSearch('O',[[${reviewOption.optCd}]]);"><th:block th:text="${reviewOption.optCd}"></th:block></a>
+									<input type="hidden" name="selOption" th:value="${reviewOption.optCd}"/>
+								</li>
+							</ul>
+						</div>
+						<div class="category" id="height" th:if="${reviewHeightList != null and !reviewHeightList.empty}">
+							<ul class="n2">
+								<li class="active"><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('H','');">전체</a></li>
+								<li th:each="reviewHeight, status : ${reviewHeightList}">
+									<a href="javascript:void(0)" th:attr="data=${reviewHeight.cdNm}" th:onclick="fnReviewSearch('H',[[${reviewHeight.cd}]]);"><th:block th:text="${reviewHeight.cdNm}"></th:block></a>
+									<input type="hidden" name="selHeight" th:value="${reviewHeight.cd}"/>
+								</li>
+							</ul>
+						</div>
+						<div class="category" id="weight" th:if="${reviewWeightList != null and !reviewWeightList.empty}">
+							<ul class="n2">
+								<li class="active"><a href="javascript:void(0)" data="평점 전체" onclick="fnReviewSearch('W','');">전체</a></li>
+								<li th:each="reviewWeight, status : ${reviewWeightList}">
+									<a href="javascript:void(0)" th:attr="data=${reviewWeight.cdNm}" th:onclick="fnReviewSearch('W',[[${reviewWeight.cd}]]);"><th:block th:text="${reviewWeight.cdNm}"></th:block></a>
+									<input type="hidden" name="selWeight" th:value="${reviewWeight.cd}"/>
+								</li>
+							</ul>
+						</div>
+						<!-- //평점,사이즈,키,몸무게 카테고리 -->
+					</div>
+				</div>
+			</div>
+		</div>
+		<!-- 나열조건결과 있을 때 노출 내용 -->
+		<div class="review_list" id="listBoxOuter">
+			<ul  id="listBox">
+			</ul>
+		</div>
+		<div class="review_last"  style="display:none;">
+			마지막 게시글입니다.
+		</div>
+		<!-- //나열조건결과 있을 때 노출 내용 -->
+		<!-- 나열조건결과 없을 때 노출 내용 -->
+		<div class="nodata"  style="display:none;">
+			<div class="txt_box">
+				<p>
+					선택하신 조건에 맞는 리뷰가 없습니다.<br>
+					조건을 변경해 보세요.
+				</p>
+			</div>
+			<div class="btn_group_flex">
+				<div><button type="button" class="btn btn_default"  onclick="fnReviewSearchInit();"><span>선택한 조건 초기화</span></button></div>
+			</div>
+		</div>
+		<!-- //나열조건결과 없을 때 노출 내용 -->
+	</form>	
+	</div>
+	<!-- //등록리뷰 있을 시 -->
+</div>
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	// 상품펴 검색
+	var fnGetInfiniteScrollDataList = function(pageNum) {
+	
+		$("#goodsReviewForm input[name=pageNo]").val(pageNum+1);
+		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+		gagajf.ajaxFormSubmit("/goods/review/list", document.goodsReviewForm,  gagaInfiniteScroll.jsonToHtml);
+	}
+	
+	var fnDrawInfiniteScrollData = function(result, pageNum){
+
+		if (result.dataList != null && result.dataList.length > 0) {
+			var htm = fnCreateGoodsReviewList(result);
+			gagaInfiniteScroll.draw(htm);
+		}else {
+			if($("#goodsReviewForm input[name=pageNo]").val()==1){
+				$('#goodsReviewForm').find('.nodata').show();
+			}
+			gagaInfiniteScroll.draw('not');
+		}
+	}
+
+	var fnGoodsReviewListSearch = function() {
+		gagaInfiniteScroll.getHistory();
+	}
+	
+	// 상품평 검색조건 클릭시
+	var fnReviewSearch = function(flag, val){
+		
+		let reviewScore = $('#goodsReviewForm input[name=reviewScore]').val();
+		let reviewOption = $('#goodsReviewForm input[name=reviewOption]').val();
+		let reviewHeight = $('#goodsReviewForm input[name=reviewHeight]').val();
+		let reviewWeight = $('#goodsReviewForm input[name=reviewWeight]').val();
+		
+		if (flag == 'A'){ //평점
+			reviewScore = val;
+		}else if (flag == 'O'){ //옵션
+			reviewOption = val;
+		}else if (flag == 'H'){ //키
+			reviewHeight = val;
+		}else{ //무게
+			reviewWeight = val;
+		}
+		
+		let changFlag = false;
+		if ($('#goodsReviewForm input[name=reviewScore]').val() != reviewScore){
+			changFlag = true;
+		}else if ($('#goodsReviewForm input[name=reviewOption]').val() != reviewOption){
+			changFlag = true;
+		}else if ($('#goodsReviewForm input[name=reviewHeight]').val() != reviewHeight){
+			changFlag = true;
+		}else if ($('#goodsReviewForm input[name=reviewWeight]').val() != reviewWeight){
+			changFlag = true;
+		}
+		
+		$('#goodsReviewForm input[name=reviewScore]').val(reviewScore);
+		$('#goodsReviewForm input[name=reviewOption]').val(reviewOption);
+		$('#goodsReviewForm input[name=reviewHeight]').val(reviewHeight);
+		$('#goodsReviewForm input[name=reviewWeight]').val(reviewWeight);
+		
+		if (changFlag) {
+			fnReviewCateClose();
+			fnGoodsReviewInfiniteScrollInit();
+			fnGoodsReviewListSearch();
+		}
+		
+	}
+	
+	var fnCreateGoodsReviewList = function(result) {
+
+		let tag = '';
+		$.each(result.dataList, function(idx, item) {
+			$('#goodsReviewForm').find('.nodata').hide();
+			tag += '<li>\n';
+			tag += '<div class="review">\n';
+			tag += '	<div class="info_box">\n';
+			tag += '		<div class="star_score">\n';
+			tag += '			<span class="star">\n';
+			tag += '				<em class="progbar" style="width:'+(item.score*20)+'%;"></em>\n'; //<!-- 평점 style로 표기 -->
+			tag += '			</span>\n';
+			tag += '		</div>\n';
+			tag += '		<div class="writer">\n';
+			tag += '			<span class="wr_id">'+ item.maskingCustId +'</span>\n';
+			tag += '			<span class="wr_date">' + item.regDt + '</span>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="response_box">\n';
+			tag += '		<div>\n';
+			tag += '			<dl>\n';
+			tag += '				<div>\n';
+			tag += '					<dt>구매옵션</dt>\n';
+			if (item.goodsOptionList != null && item.goodsOptionList.length > 0){
+				$.each(item.goodsOptionList, function(gIdx, goodsOption){
+			tag += '					<dd>'+ goodsOption.optCd1 +' / '+ goodsOption.optCd2 +'</dd>\n';		
+				});
+			}
+			tag += '				</div>\n';
+			tag += '				<div>\n';
+			tag += '					<dt>키/몸무게</dt>\n';
+			tag += '					<dd>'+ item.height +'cm/'+ item.weight +'kg</dd>\n';
+			tag += '				</div>\n';
+			tag += '			</dl>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="photo_box">\n';
+			tag += '		<div class="photo_list">\n';
+			tag += '			<ul>\n';
+			if (item.reviewAttachList != null && item.reviewAttachList.length > 0){
+				var fileGbClass = '';
+				$.each(item.reviewAttachList, function(aIdx, reviewAttach){
+					fileGbClass = '';
+					if (reviewAttach == "M") fileGbClass = "mov";
+			tag += '				<li>\n';
+			tag += '					<a href="javascript:void();" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">\n';
+			tag += '						<div class="pic">\n';
+			tag += '							<span class="thumb '+ fileGbClass +'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');"></span>\n'; //<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+			tag += '						</div>\n';
+			tag += '					</a>\n';
+			tag += '				</li>\n';		
+				});	
+			}
+			tag += '			</ul>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '	<div class="txt_review_box">\n';
+			tag += '		<p>' + item.reviewContent.replaceAll("\n", "</br>") +'</p>\n';
+			tag += '	</div>\n';
+			
+			tag += '	<div class="response_box2">\n';
+			tag += '		<div>\n';
+			tag += '			<dl>\n';
+			if (!gagajf.isNull(item.sizeGb) ){	// 사이즈구분값이 있을경우 노출
+				tag += '				<div>\n';
+				tag += '					<dt>사이즈</dt>\n';
+				tag += '					<dd>'+ item.scoreSizeNm +'</dd>\n';
+				tag += '				</div>\n';
+				tag += '				<div>\n';
+				tag += '					<dt>컬러</dt>\n';
+				tag += '					<dd>'+ item.scoreColorNm +'</dd>\n';
+				tag += '				</div>\n';
+			if (item.sizeGb == 'T' || item.sizeGb == 'B'){
+				tag += '				<div>\n';
+				tag += '					<dt>핏</dt>\n';
+				tag += '					<dd>'+ item.scoreFitNm +'</dd>\n';
+				tag += '				</div>\n';
+				tag += '				<div>\n';
+				tag += '					<dt>두께감</dt>\n';
+				tag += '					<dd>'+ item.scoreThickNm +'</dd>\n';
+				tag += '				</div>\n';	
+			}
+			if (item.sizeGb == 'S' ){
+				tag += '				<div>\n';
+				tag += '					<dt>무게감</dt>\n';
+				tag += '					<dd>'+ item.scoreWeightNm +'</dd>\n';
+				tag += '				</div>\n';
+				tag += '				<div>\n';
+				tag += '					<dt>볼너비</dt>\n';
+				tag += '					<dd>'+ item.scoreBallNm +'</dd>\n';
+				tag += '				</div>\n';	
+			}
+			}
+			tag += '			</dl>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			if (!gagajf.isNull(item.admRpl)){
+				tag += '	<div class="reply_box">\n';
+				tag += '		<div class="reply">\n';
+				tag += '			<div class="reply_writer">\n';
+				tag += '				<span class="wr_name">관리자</span>\n';
+				tag += '				<span class="wr_date">'+item.admRplDt+'</span>\n';
+				tag += '			</div>\n';
+				tag += '			<div class="reply_txt">\n';
+				tag += '				<p>' + item.admRpl.replaceAll("\n", "</br>")+'</p>\n';
+				tag += '			</div>\n';
+				tag += '		</div>\n';
+				tag += '	</div>\n';	
+			}
+			tag += '</div>\n';
+			tag += '</li>\n';
+			
+		});
+		return tag;
+	}
+	
+	// 인피니트 스크롤 초기화
+	var fnGoodsReviewInfiniteScrollInit = function(){
+		 sessionStorage.removeItem(document.location.href);
+		//History 초기화
+		$("#listBox").html("");
+	}
+	
+	// 왜 안될가?
+	// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
+	$(window).on("pageshow", function(event) {
+		if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
+			var historyData = sessionStorage.getItem(document.location.href);
+			if(historyData!=null){
+				historyData = JSON.parse(historyData);
+			}else{
+				historyData = {};
+			}
+			fnGoodsReviewListSearch();
+		}else{
+			fnGoodsReviewInfiniteScrollInit();
+			fnGoodsReviewListSearch();
+		}
+
+	});
+	
+	// 상품평 초기화
+	var fnReviewSearchInit = function(){
+		
+		$('#goodsReviewForm').find('.select_custom.sort_opt1').find('.list li').eq(0).trigger('click')
+		$('#goodsReviewForm').find('.select_custom.sort_opt2').find('.list li').eq(0).trigger('click')
+		$('#goodsReviewForm').find('.select_custom.sort_opt3').find('.list li').eq(0).trigger('click')
+		$('#goodsReviewForm').find('.select_custom.sort_opt4').find('.list li').eq(0).trigger('click')
+		
+		$('#goodsReviewForm input[name=reviewScore]').val('');
+		$('#goodsReviewForm input[name=reviewOption]').val('');
+		$('#goodsReviewForm input[name=reviewHeight]').val('');
+		$('#goodsReviewForm input[name=reviewWeight]').val('');
+		
+		fnGetList();
+	}
+	
+	var fnReviewCateClose = function(){
+		$(".pd_review .category_box").hide();
+	}
+	
+	$(document).ready( function() {
+
+		//슬라이드 - 베스트리뷰
+		var riviewSwiper = new Swiper('.riview_box .area_slider .swiper-container', {
+			observer: true,
+			observeParents: true,
+			slidesPerView: 1,
+			spaceBetween: 8,
+			loop: true,
+			pagination: {
+				el: '.swiper-pagination',
+				type: 'fraction',
+			},
+		});	
+		
+		//팝업 - 제품리뷰 > 카테고리팝오픈
+		// 오픈
+		$(document).on('click','.pd_review .category_open > li',function(e){
+			var dataName=$(this).attr("data_name");
+			$(".pd_review .category_box").show();
+			$(".pd_review .category_list").find(".category").hide();
+			$(".pd_review .category_list").find("#"+dataName).show();
+			return false;
+		});
+		
+		// 변경
+		$(document).on('click','.pd_review .category ul > li',function(e){
+			var num=$(".pd_review .category_open > li").length;
+			var value=$(this).find("a").attr("data");
+			var name=$(this).parent().parent().attr("id");
+			$(this).parent().find("li").removeClass("active");
+			$(this).addClass("active");
+			for(var i=0; i < num; i++){
+				var dataname=$(".pd_review .category_open > li").eq(i).attr("data_name");
+				if(name==dataname){
+					$(".pd_review .category_open > li").eq(i).find("span").text(value);
+				}
+			}
+			return false;
+		});
+
+		
+		fnGoodsReviewListSearch();
+		
+	});
+	
+/*]]>*/
+</script>
+ </html>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormWeb.html → src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html

@@ -2,7 +2,7 @@
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsIncludeFormWeb.html
+ * @source  : GoodsIncludeFormMob.html
  * @desc    : 상품상세 Include Page - 공용
  *============================================================================
  * STYLE24

+ 79 - 79
src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html

@@ -1,80 +1,80 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : GoodsOtherFormMob.html
- * @desc    : 상품 안내
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.04.05   eskim        최초 작성
- *******************************************************************************
- -->
-<th:block th:if="${goodsList != null and !goodsList.empty}" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
-	<h3 class="tit">
-	<th:block th:if="${params.goodsOtherGb =='tmtb'}" th:text="${'함께하면 할인되는 다다익선 상품'}"></th:block>
-	<th:block th:if="${params.goodsOtherGb =='together'}" th:text="${'이 상품과 함께 본 상품'}"></th:block>
-	<th:block th:if="${params.goodsOtherGb =='recommend'}" th:text="${params.brandGroupNm +' 추천상품'}"></th:block>
-	<th:block th:if="${params.goodsOtherGb =='like'}" th:text="${'이 상품과 비슷한 상품'}"></th:block>
-	</h3>
-	<div class="area_slider">
-		<div class="swiper-container swiper-container-initialized swiper-container-horizontal">
-			<div class="swiper-wrapper">
-				<div class="swiper-slide" th:each="goodsInfo, status : ${goodsList}">
-					<div class="item_prod">
-						<div class="item_state">
-							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
-							<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'[[${params.contentsLoc}]]','','pc_detail');" 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}">BRAND NAME1</p>
-								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
-								<p class="itemPrice">
-									<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
-									<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
-									<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-								</p>
-							</a>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-
-	//슬라이드 - 함께하면 할인되는 다다익선 상품
-	var togetherItemSwiper = new Swiper('.pd .pd_together .area_slider .swiper-container', {
-		slidesPerView: 3,
-		spaceBetween: 8,
-	});  
-
-	//슬라이드 - 이 상품과 함께 본 상품 
-	var otherItemSwiper = new Swiper('.pd .pd_clickother .area_slider .swiper-container', {
-		slidesPerView: 2,
-		spaceBetween: 8,
-	});	
-	//슬라이드 - 동일브랜드 상품 추천
-	var rcmdItemSwiper = new Swiper('.pd .pd_samebrand .area_slider .swiper-container', {
-		slidesPerView: 3,
-		spaceBetween: 8,
-	}); 
-
-	//슬라이드 - 이 상품과 비슷한 상품 
-	var relateItemSwiper = new Swiper('.pd .pd_relate .area_slider .swiper-container', {
-		slidesPerView: 3,
-		spaceBetween: 8,
-	});	 
-	
-/*]]>*/
-</script>	
-
-</th:block>
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsOtherFormMob.html
+ * @desc    : 상품 안내
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.05   eskim        최초 작성
+ *******************************************************************************
+ -->
+<th:block th:if="${goodsList != null and !goodsList.empty}" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+	<h3 class="tit">
+	<th:block th:if="${params.goodsOtherGb =='tmtb'}" th:text="${'함께하면 할인되는 다다익선 상품'}"></th:block>
+	<th:block th:if="${params.goodsOtherGb =='together'}" th:text="${'이 상품과 함께 본 상품'}"></th:block>
+	<th:block th:if="${params.goodsOtherGb =='recommend'}" th:text="${params.brandGroupNm +' 추천상품'}"></th:block>
+	<th:block th:if="${params.goodsOtherGb =='like'}" th:text="${'이 상품과 비슷한 상품'}"></th:block>
+	</h3>
+	<div class="area_slider">
+		<div class="swiper-container swiper-container-initialized swiper-container-horizontal">
+			<div class="swiper-wrapper">
+				<div class="swiper-slide" th:each="goodsInfo, status : ${goodsList}">
+					<div class="item_prod">
+						<div class="item_state">
+							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
+							<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'[[${params.contentsLoc}]]','','pc_detail');" 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}">BRAND NAME1</p>
+								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+								<p class="itemPrice">
+									<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
+									<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
+									<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+								</p>
+							</a>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+
+	//슬라이드 - 함께하면 할인되는 다다익선 상품
+	var togetherItemSwiper = new Swiper('.pd .pd_together .area_slider .swiper-container', {
+		slidesPerView: 3,
+		spaceBetween: 8,
+	});  
+
+	//슬라이드 - 이 상품과 함께 본 상품 
+	var otherItemSwiper = new Swiper('.pd .pd_clickother .area_slider .swiper-container', {
+		slidesPerView: 2,
+		spaceBetween: 8,
+	});	
+	//슬라이드 - 동일브랜드 상품 추천
+	var rcmdItemSwiper = new Swiper('.pd .pd_samebrand .area_slider .swiper-container', {
+		slidesPerView: 3,
+		spaceBetween: 8,
+	}); 
+
+	//슬라이드 - 이 상품과 비슷한 상품 
+	var relateItemSwiper = new Swiper('.pd .pd_relate .area_slider .swiper-container', {
+		slidesPerView: 3,
+		spaceBetween: 8,
+	});	 
+	
+/*]]>*/
+</script>	
+
+</th:block>
 </html>

+ 63 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewFormMob.html

@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsReviewFormMob.html
+ * @desc	: 상품 상품평 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.07   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<!-- 해당상품 -->
+			<div class="item_blk">
+				<div class="item_prod" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+					<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" th:text="${goodsInfo.goodsFullNm}">남성</div>
+						</a>
+					</div>
+				</div>
+			</div>
+			<!-- //해당상품 -->
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont" id="goodsDealReview">
+			</div>
+		</div>
+	</div>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_goods_review')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	// 구성 상품 상세 상품평
+	var fnGoodsDetailReview = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/review/frame", "html", "goodsDealReview", params);
+	}
+	
+	$(document).ready( function() {
+
+		// 상품평정보 
+		var params = new Object();
+		let goodsCd = [[${goodsInfo.goodsCd}]]
+		params.goodsCd = goodsCd;
+		fnGoodsDetailReview(params);  // ajax html
+		
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 74 - 74
src/main/webapp/WEB-INF/views/mob/order/OrderCustemerInfoMob.html

@@ -1,74 +1,74 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderCustemerInfoMob.html
- * @desc    : 고객정보 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.04.05   jsh77b     최초 작성
- *******************************************************************************
- -->
-<input type="hidden" name="custNm" 		th:value="${custemerInfo.custNm}"/>
-<input type="hidden" name="email" 		th:value="${custemerInfo.email}"/>
-<input type="hidden" name="cellPhnno" 	th:value="${custemerInfo.cellPhnno}"/>
-	
-<!-- 주문고객 -->
-<div class="foldGroup">
-	<ul>
-		<li class="fold_mbinfo">
-			<!-- 주문고객정보 -->
-			<div class="fold_head">
-				<a href="javascript:void(0)">
-					<div>
-						<div class="fold_tit">
-							<span>주문고객</span>
-						</div>
-						<div class="data">
-							<span th:text="${custemerInfo.custNm}"></span> 
-							<span th:text="${custemerInfo.cellPhnno}"></span>
-						</div>
-					</div>
-				</a>
-			</div>
-			<div class="fold_cont" style="display: none;">
-				<div class="area_mbinfo">
-					<dl>
-						<div>
-							<dt><span class="sr-only">주문자명</span></dt>
-							<dd th:text="${custemerInfo.custNm}"></dd>
-						</div>
-						<div>
-							<dt><span class="sr-only">이메일</span></dt>
-							<dd th:text="${custemerInfo.email}"></dd>
-						</div>
-						<div>
-							<dt><span class="sr-only">휴대폰 번호</span></dt>
-							<dd th:text="${custemerInfo.cellPhnno}"></dd>
-						</div>
-					</dl>
-				</div>
-			</div> <!-- //주문고객정보 -->
-		</li>
-	</ul>
-</div>
-<!-- //주문고객 -->
-
-<script th:inline="javascript">
-var dispYn = [[${order.dispYn}]]; // 노출여부
-
-//컨텐츠 호출
-$(document).ready( function() {
-	// 화면펼침
-	if (dispYn == "Y") {
-		$("#custemerInfo .fold_head").addClass("on");
-		$("#custemerInfo .fold_cont").css("display", "block");
-	}
-});
-</script>
-
-</html>
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderCustemerInfoMob.html
+ * @desc    : 고객정보 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.05   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<input type="hidden" name="custNm" 		th:value="${custemerInfo.custNm}"/>
+<input type="hidden" name="email" 		th:value="${custemerInfo.email}"/>
+<input type="hidden" name="cellPhnno" 	th:value="${custemerInfo.cellPhnno}"/>
+	
+<!-- 주문고객 -->
+<div class="foldGroup">
+	<ul>
+		<li class="fold_mbinfo">
+			<!-- 주문고객정보 -->
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit">
+							<span>주문고객</span>
+						</div>
+						<div class="data">
+							<span th:text="${custemerInfo.custNm}"></span> 
+							<span th:text="${custemerInfo.cellPhnno}"></span>
+						</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont" style="display: none;">
+				<div class="area_mbinfo">
+					<dl>
+						<div>
+							<dt><span class="sr-only">주문자명</span></dt>
+							<dd th:text="${custemerInfo.custNm}"></dd>
+						</div>
+						<div>
+							<dt><span class="sr-only">이메일</span></dt>
+							<dd th:text="${custemerInfo.email}"></dd>
+						</div>
+						<div>
+							<dt><span class="sr-only">휴대폰 번호</span></dt>
+							<dd th:text="${custemerInfo.cellPhnno}"></dd>
+						</div>
+					</dl>
+				</div>
+			</div> <!-- //주문고객정보 -->
+		</li>
+	</ul>
+</div>
+<!-- //주문고객 -->
+
+<script th:inline="javascript">
+var dispYn = [[${order.dispYn}]]; // 노출여부
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 화면펼침
+	if (dispYn == "Y") {
+		$("#custemerInfo .fold_head").addClass("on");
+		$("#custemerInfo .fold_cont").css("display", "block");
+	}
+});
+</script>
+
+</html>

+ 216 - 0
src/main/webapp/WEB-INF/views/mob/order/OrderDcAmtInfoMob.html

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <!DOCTYPE html>
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
@@ -221,4 +222,219 @@ $(document).ready( function() {
 	}
 });
 </script>
+=======
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDcAmtInfoWeb.html
+ * @desc    : 할인혜택 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+
+<!-- 할인/혜택 사용 -->
+<div class="foldGroup">
+	<ul>
+		<li>
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit">
+							<span>할인/혜택 사용</span>
+						</div>
+						<div class="data maxdisc">
+							<div class="form_field">
+								<input id="chk-maxdisc" type="checkbox" checked="">
+								<label for="chk-maxdisc"><span>최대 할인혜택을 바로
+										적용하세요!</span><br>
+								<span class="maxdisc_amount">(<em>3,000</em>원 할인)
+								</span></label>
+							</div>
+						</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont">
+				<div class="area_seldiscount">
+					<dl>
+						<div>
+							<dt class="sr-only">할인혜택 바로 적용</dt>
+							<dd>
+								<div class="form_field">
+									<input id="chk-maxdisc01" type="checkbox" checked="">
+									<label for="chk-maxdisc01"><span>최대 할인혜택을 바로
+											적용하세요!</span>&nbsp;<span class="maxdisc_amount">(<em>3,000</em>원
+											할인)
+									</span></label>
+								</div>
+							</dd>
+						</div>
+						<div>
+							<dt>
+								할인쿠폰 <span class="maxdisc_amount">총&nbsp;<em>3,000</em>원
+									할인
+								</span>
+							</dt>
+							<dd>
+								<div class="sale_coupon_box">
+									<div>
+										<button type="button" id="btn_couponModify_pop"
+											class="btn btn_default btn_sm">
+											<span>쿠폰변경</span>
+										</button>
+									</div>
+									<div class="form_field">
+										<div class="input_wrap">
+											<input type="text" class="form_control" maxlength="13"
+												placeholder="할인코드를 입력해주세요.">
+											<button type="button" class="btn btn_dark btn_sm">
+												<span>적용</span>
+											</button>
+										</div>
+									</div>
+								</div>
+							</dd>
+						</div>
+						<div>
+							<dt>배송비 쿠폰</dt>
+							<dd>
+								<div class="dlvr_fee_box">
+									<div class="form_field">
+										<div class="select_custom coupon_list">
+											<!-- 비활성화시 disabled 추가 -->
+											<div class="combo">
+												<div class="select">
+													<div class="dlvr_coupon">
+														<p class="empty">선택</p>
+													</div>
+												</div>
+											</div>
+										</div>
+									</div>
+									<div class="form_field">
+										<div class="select_custom" disabled>
+											<div class="combo">
+												<div class="select">
+													<div class="dlvr_coupon">
+														<p class="empty">적용 가능한 쿠폰이 없습니다</p>
+													</div>
+												</div>
+												<ul class="list">
+													<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true"추가  -->
+													<li class="selected">
+														<div class="dlvr_coupon">
+															<p class="empty">적용 가능한 쿠폰이 없습니다</p>
+														</div>
+													</li>
+												</ul>
+											</div>
+										</div>
+									</div>
+								</div>
+							</dd>
+						</div>
+					</dl>
+				</div>
+				<div class="area_selpoint">
+					<dl>
+						<div>
+							<dt>선 포인트 사용</dt>
+							<dd>
+								<div class="form_field">
+									<div>
+										<input type="radio" name="rdi-beforpoint"
+											id="rdi-beforpoint1" value="" checked=""> <label
+											for="rdi-beforpoint1"><span>사용 안함</span></label>
+									</div>
+									<div>
+										<input type="radio" name="rdi-beforpoint"
+											id="rdi-beforpoint2" value=""> <label
+											for="rdi-beforpoint2"><span>사용함</span></label> <span
+											class="useable_point">(<em>1,500P</em>&nbsp;사용 가능)
+										</span>
+									</div>
+								</div>
+							</dd>
+						</div>
+						<div>
+							<dt>
+								STYLE24 포인트 <span>결제금액의 최대 40%까지 사용가능</span>
+							</dt>
+							<dd>
+								<div class="form_field">
+									<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+									<div class="input_wrap">
+										<input type="text" class="form_control" maxlength=""
+											placeholder="사용할 포인트를 입력해주세요.">
+										<button type="button" class="btn btn_dark btn_sm">
+											<span>적용</span>
+										</button>
+									</div>
+									<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+									<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
+									<div class="input_wrap">
+										<input type="text" class="form_control" maxlength=""
+											placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다."
+											readonly="readonly" onfocus="this.blur();">
+										<button type="button" class="btn btn_dark btn_sm">
+											<span>적용</span>
+										</button>
+									</div>
+									<!-- //스타일 포인트 3만원 미만 결제시 노출 -->
+									<p>
+										<span class="remain_point">보유:&nbsp;<em>25,500</em>P
+										</span>
+									</p>
+								</div>
+							</dd>
+						</div>
+						<div>
+							<dt>상품권</dt>
+							<dd>
+								<div class="form_field">
+									<div class="input_wrap">
+										<input type="text" class="form_control" maxlength=""
+											placeholder="사용할 금액을 입력해주세요.">
+										<button type="button" class="btn btn_dark btn_sm">
+											<span>적용</span>
+										</button>
+									</div>
+									<p>
+										<span class="remain_point">보유:&nbsp;<em>25,500</em>원
+										</span>
+									</p>
+								</div>
+							</dd>
+						</div>
+					</dl>
+				</div>
+			</div>
+		</li>
+	</ul>
+</div>
+<!-- //할인/혜택 사용 -->
+
+<script th:inline="javascript">
+var dispYn = [[${order.dispYn}]]; // 노출여부
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 화면펼침
+	if (dispYn == "Y") {
+		$("#dcAmtInfo .fold_head").addClass("on");
+		$("#dcAmtInfo .fold_cont").show();
+	}
+	
+	//할인쿠폰(배송비) 선택
+    var od_dlvrfee_coupon_selecter = new sCombo('.od .odPayment .dlvr_fee_box .select_custom.coupon_list');
+});
+</script>
+>>>>>>> refs/remotes/origin/order
 </html>

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

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <!DOCTYPE html>
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
@@ -160,4 +161,168 @@ $(document).ready( function() {
 });
 </script>
 
+=======
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDeliveryAddrInfoMob.html
+ * @desc    : 배송정보 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.05   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<!-- 배송지정보 -->
+<input type="hidden" name="recipNm" 		th:value="${deliveryAddrInfo.recipNm}"/>
+<input type="hidden" name="recipPhnno" 		th:value="${deliveryAddrInfo.recipPhnno}"/>
+<input type="hidden" name="recipZipcode" 	th:value="${deliveryAddrInfo.recipZipcode}"/>
+<input type="hidden" name="recipBaseAddr" 	th:value="${deliveryAddrInfo.recipBaseAddr}"/>
+<input type="hidden" name="recipDtlAddr" 	th:value="${deliveryAddrInfo.recipDtlAddr}"/>
+<input type="hidden" name="delvMemo" 		th:value="${deliveryAddrInfo.delvMemo}"/>
+<input type="hidden" name="foreignBuyYn" 	th:value="${order.foreignBuyYn}"/>
+<input type="hidden" name="orderMadeYn" 	th:value="${order.orderMadeYn}"/>
+
+<div class="foldGroup shipfold">
+	<ul>
+		<li>
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit"><span>배송지 정보</span></div>
+						<div class="data">
+							<span id="recipAddr" th:text="${deliveryAddrInfo.recipBaseAddr} + '   ' + ${deliveryAddrInfo.recipDtlAddr}"></span>
+						</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont">
+				<!-- 배송지 정보 변경가능 -->
+				<div class="ship_info ship_edit">
+					<button type="button" id="btn_adrsChange_pop" class="btn_popup">
+						<span>배송지 변경</span>
+					</button>
+					<dl>
+						<div class="company">
+							<dt><span class="sr-only">배송지명</span></dt>
+							<dd>
+								<th:block th:text="${deliveryAddrInfo.recipNm}"></th:block> 
+								<span class="icon_tag"> 
+									<th:block th:if="${deliveryAddrInfo.defaultYn} == 'Y'">
+										<em class="tag_stype1">기본배송지</em> 
+									</th:block>
+									<em class="tag_stype2 shotDelv">총알배송</em>
+								</span>
+							</dd>
+						</div>
+						<div class="phone">
+							<dt><span class="sr-only">휴대폰 번호</span></dt>
+							<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
+						</div>
+						<div class="addr">
+							<dt><span class="sr-only">배송주소</span></dt>
+							<dd th:text="${deliveryAddrInfo.recipBaseAddr} + '    ' + ${deliveryAddrInfo.recipDtlAddr}"></dd>
+						</div>
+						
+						<div class="ship_request ship_select">
+							<span>배송요청 사항</span>
+							<div class="ship_option">
+								<div class="form_field">
+									<div class="select_custom delivery_list"> <!-- 비활성화시 disabled 추가 -->
+										<div class="combo">
+											<div class="select" th:text="${deliveryAddrInfo.delvMemo}">선택</div>
+											<ul class="list">
+												<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true"추가  -->
+												<li>문 앞</li> 
+												<li>직접 받고 부재 시 문 앞</li>
+												<li>경비실</li> 
+												<li>택배함</li>
+												<li class="select_etc">기타사항</li>
+											</ul>
+										</div>
+									</div>
+								</div>
+							</div>
+							<div class="ship_etc">
+								<div class="form_text etc">
+									<input type="text" name="delvMemoText" placeholder="보관 장소만 입력 (필수)" maxlength="30" disabled>
+									<p class="desc_txt">보관 장소 외 다른 내용 입력시 통보 없이 삭제 될 수 있습니다.</p>
+								</div>
+							</div>
+						</div>
+					</dl>
+				</div>
+				<!-- //배송지 정보 변경가능 -->
+			</div>
+		</li>
+	</ul>
+</div>
+<!-- //배송지정보 -->
+
+<script th:inline="javascript">
+var dispYn = [[${order.dispYn}]]; // 노출여부
+var delvMemo = [[${deliveryAddrInfo.delvMemo}]]; // 노출여부
+
+//화면노출
+var deliveryAddrInfoDispYn = function(temp) {
+	if (temp == "Y") {
+		$("#deliveryAddrInfo .fold_head").addClass("on");
+		$("#deliveryAddrInfo .fold_cont").show();
+	} else {
+		$("#deliveryAddrInfo .fold_head").removeClass("on");
+		$("#deliveryAddrInfo .fold_cont").hide();
+	}
+}
+
+//컨텐츠 호출
+$(document).ready( function() {
+	var delvMemoArr = ["문 앞", "직접받고 부재시 문 앞", "경비실", "택배함"];
+	var tempMemo = true;
+	
+	$("#orderForm .ship_request .delivery_list li").removeClass("selected");
+	
+	// 배송요청사항설정
+	for (i=0 ; i<delvMemoArr.length ; i++) {
+		if (delvMemoArr[i] == delvMemo) {
+			tempMemo = false;
+		}
+	}
+
+	// 배송메모설정
+	$("#orderForm .ship_request .delivery_list li").each(function(){
+		if (delvMemo == $(this).text()) {
+			$(this).addClass("selected");
+		}
+	});
+	
+	if (tempMemo) {
+		$("#orderForm .ship_request .delivery_list .select").text("기타사항");
+		$("#orderForm input[name=delvMemoText]").attr("disabled", false);
+		$("#orderForm input[name=delvMemoText]").val(delvMemo);
+		$("#orderForm .delvMemo li").eq(4).addClass("selected");
+		$(".ship_etc").show();
+	}
+	
+	// 화면펼침
+	deliveryAddrInfoDispYn(dispYn);
+	
+	// 콤보박스 
+	var od_delivery_list = new sCombo('#orderForm .ship_select .select_custom.delivery_list');
+	
+	// 210405_배송요청 사항 기타사항 selected시 기타사항 input 구현
+	$("#orderForm .select_custom.delivery_list .combo .list > li").on("click", function(){
+		if ($("#orderForm .select_etc").hasClass("selected")){
+			$(".ship_etc").show();
+		} else {
+			$(".ship_etc").hide();
+		}
+	});
+});
+</script>
+
+>>>>>>> refs/remotes/origin/order
 </html>

+ 101 - 0
src/main/webapp/WEB-INF/views/mob/order/OrderEntryInfoMob.html

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <!DOCTYPE html>
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
@@ -105,3 +106,103 @@ $("#orderForm input[name=entryNo]").on("change", function(){
 </script>
 
 </html>
+=======
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderEntryInfoMob.html
+ * @desc    : 개인통관부호 정보 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.05   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+ 
+ <!-- 개인통관부호 정보 -->
+<div class="foldGroup">
+	<ul>
+		<li>
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit">
+							<span>개인통관고유부호</span>
+						</div>
+						<div class="data">
+							<span>P123456789</span>
+						</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont">
+				<div class="area_overseas">
+					<div class="info_txt">
+						<ul>
+							<li>물품가액이 $150 초과할 경우 관/부가세가 발생 할 수 있으며, 물품 종류와 해외공급자
+								관계없이 같은 날 입항하게 되면 합산과세 대상이 됩니다.</li>
+						</ul>
+					</div>
+					<div class="form_field">
+						<div>
+							<input type="radio" name="rdi-overseas" id="rdi-overs1" value="" checked=""> 
+							<label for="rdi-overs1"><span>받는사람 개인통관고유부호</span></label>
+						</div>
+						<div>
+							<input type="radio" name="rdi-overseas" id="rdi-overs2" value=""> 
+							<label for="rdi-overs2"><span>입력 안 함</span></label>
+						</div>
+						<div class="info_box overs1">
+							<div class="input_wrap">
+								<input type="text" class="form_control err" maxlength="13" placeholder="P로 시작하는 13자리">
+								<!-- 유효하지 않은 개인통관고유부호 일때 class명 'err' 추가 -->
+							</div>
+							<div class="t_err">개인통관고유부호가 유효하지 않습니다.</div>
+							<!-- 유효하지 않은 개인통관고유부호 일때 노출 -->
+							<div class="agree_overs">
+								<input id="chk-overs-agr" type="checkbox" checked="">
+								<label for="chk-overs-agr">
+									<span>위 정보는 원활한 통관을 위해 수집 및 판매자에게 제공하며,계속 사용하도록 안전하게 STYLE24에서 저장 / 관리 합니다.&nbsp;&nbsp;<em class="tmark_required">(필수)</em></span>
+								</label>
+							</div>
+							<div class="btn_group btn_group_flex">
+								<div>
+									<button type="button" class="btn btn_dark">입력완료</button>
+								</div>
+							</div>
+						</div>
+						<div class="info_box overs2" style="display: none;">
+							<div class="info_txt type2">
+								<ul>
+									<li>개인통관고유부호를 입력하지 않아도 관세사무소에서 개인정보 확인을 위해 별도 연락을 드릴
+										예정입니다.</li>
+								</ul>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</li>
+	</ul>
+</div>
+<!-- //개인통관부호 정보 -->
+
+<script th:inline="javascript">
+var dispYn = [[${order.dispYn}]]; // 노출여부
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 화면펼침
+	if (dispYn == "Y") {
+		$("#custemerInfo .fold_head").addClass("on");
+		$("#custemerInfo .fold_cont").css("display", "block");
+	}
+});
+</script>
+
+</html>
+>>>>>>> refs/remotes/origin/order

+ 186 - 0
src/main/webapp/WEB-INF/views/mob/order/OrderFreegiftInfoMob.html

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <!DOCTYPE html>
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
@@ -189,3 +190,188 @@ $(document).on('click','#btn_infoGift_btn',function(e){
 
 
 
+=======
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderFormWeb.html
+ * @desc    : 주문/결제 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+
+<th:block th:if="${freegiftList != null && #lists.size(freegiftList) > 0}">
+<div class="foldGroup">
+	<ul>
+		<li>
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit">
+							<span>사은품</span>
+						</div>
+						<div class="data">
+							<span>사은품 총 <em class="total_gift">0</em>개 선택</span> 
+							<span><em class="total_deduct">0</em>P 차감</span>
+						</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont">
+				<div class="area_selgift">
+					<th:block th:each="freegift, i : ${freegiftList}">
+						<th:block th:if="${freegift.allYn} == 'Y'">
+							<div class="gift_box necessary_gift_box">
+						</th:block>
+						<th:block th:if="${freegift.allYn} == 'N'">
+							<div class="gift_box">
+						</th:block>
+							<p class="txt">
+								<th:block th:if="${freegift.allYn} == 'Y'">
+									<span th:text="|사은품필수 ${i.count}|"></span>
+								</th:block>
+								<th:block th:if="${freegift.allYn} == 'N'">
+									<span th:text="|사은품선택 ${i.count}|"></span>
+								</th:block>
+								<th:block th:text="${freegift.freegiftNm}"></th:block>
+							</p>
+							<div class="form_field">
+								<!-- 전체지급 사음품(필수) -->
+								<th:block th:if="${freegift.allYn} == 'Y'">
+									<th:block th:each="freegiftGoods, k : ${freegiftGoodsList}">
+										<th:block th:if="${freegift.freegiftSq} == ${freegiftGoods.freegiftSq}">
+											<div class="gift">
+												<input type="checkbox" th:name="'rdi-gift'+${i.count}" th:id="'rdi-gift'+${i.count}+${k.count}" class="chk_img freegiftRdo" th:value="${freegiftGoods.freegiftValSq}" usepoint="0" allYn="Y" checked onclick="return(false);">
+												<label for="rdi-gift11"> 
+													<span class="thumb"><img src="/images/pc/thumb/tmp_gift1.jpg" width="" alt=""></span>
+													<span class="name" th:text="${freegiftGoods.goodsNm}"></span> 
+													<span class="deduct">무료</span>
+												</label>
+											</div>
+										</th:block>
+									</th:block>
+								</th:block>
+								<!-- //전체지급 사음품(필수) -->
+								
+								<!-- 선택지급 사음품(선택) -->
+								<th:block th:if="${freegift.allYn} == 'N'">
+									<th:block th:each="freegiftGoods, k : ${freegiftGoodsList}">
+										<th:block th:if="${freegift.freegiftSq} == ${freegiftGoods.freegiftSq}">
+											<div class="gift">
+												<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="'rdi-gift'+${i.count}+${k.count}" class="chk_img freegiftRdo" th:value="${freegiftGoods.freegiftValSq}" th:usepoint="${freegiftGoods.usePoint}" allYn="N">
+												<label for="rdi-gift1">
+													<span class="thumb"><img src="/images/pc/thumb/tmp_gift1.jpg" width="" alt=""></span>
+													<span class="name" th:text="${freegiftGoods.goodsNm}"></span> 
+													<span th:if="${freegiftGoods.usePoint} < 1" class="deduct" th:text="무료"></span>
+													<span th:if="${freegiftGoods.usePoint} > 0" class="deduct" th:text="|${#numbers.formatInteger(freegiftGoods.usePoint, 1, 'COMMA')} P|"></span>
+												</label>
+											</div>
+										
+										</th:block>
+									</th:block>
+									<div class="gift">
+										<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="${i.count}+'0'" class="chk_img freegiftRdo" value="noSel" usepoint="0" allYn="N"> 
+										<label for="rdi-gift4">
+											<span class="thumb"><img src="/images/pc/thumb/tmp_gift_empty.jpg" width="" alt=""></span>
+											<span class="name">사은품 수령안함</span> <span class="deduct">수령거부</span>
+										</label>
+									</div>
+								</th:block>
+								<!-- //선택지급 사음품(선택) -->
+							</div>
+						</div>
+					</th:block>
+
+					<div class="form_field">
+						<div class="agree_gift">
+							<p>
+								<input id="chk-agree_gift" type="checkbox">
+								<labelfor="chk-agree_gift"><span>동의합니다</span></label>
+							</p>
+							<p class="txt">사은품 지금에 대한 내용을 확인하였으며, 이에 동의합니다.</p>
+							<button type="button" class="btn_link_popup" id="btn_infoGift_btn">
+								<span>보기</span>
+							</button>
+						</div>
+						<div class="agree_gift_con">
+							<p>제1장 총칙 제1조(목적) 본 약관은 정부24 (이하 "당 사이트")가 제공하는 모든 서비스(이하
+								"서비스")의 이용조건 및 절차, 이용자와 당 사이트의 권리, 의무, 책임사항과 기타 필요한 사항을 규정함을
+								제1장 총칙 제1조(목적) 본 약관은 정부24 (이하 "당 사이트")가 제공하는 모든 서비스(이하
+								"서비스")의 이용조건 및 절차, 이용자와 당 사이트의 권리, 의무, 책임사항과 기타 필요한 사항을 규정함을
+								제1장 총칙 제1조(목적) 본 약관은 정부24 (이하 "당 사이트")가 제공하는 모든 서비스(이하
+								"서비스")의 이용조건 및 절차, 이용자와 당 사이트의 권리, 의무, 책임사항과 기타 필요한 사항을 규정함을
+								제1장 총칙 제1조(목적) 본 약관은 정부24 (이하 "당 사이트")가 제공하는 모든 서비스(이하
+								"서비스")의 이용조건 및 절차, 이용자와 당 사이트의 권리, 의무, 책임사항과 기타 필요한 사항을 규정함을
+							</p>
+						</div>
+					</div>
+				</div>
+			</div>
+		</li>
+	</ul>
+</div>
+
+<script th:inline="javascript">
+//할인관련정보 변수선언
+var freegiftApplyAmtList	= [[${freegiftApplyAmtList}]];		// 사은품장바구니목록
+var freegiftList			= [[${freegiftList}]];				// 사은품 프로모션 목록
+var freegiftGoodsList		= [[${freegiftGoodsList}]];			// 사은품 프로모션 상품 목록
+var dispYn 					= [[${order.dispYn}]]; 				// 노출여부
+
+var freegiftInfoDispYn = function(temp) {
+	if (temp == "Y") {
+		$("#freegiftInfo .fold_head").addClass("on");
+		$("#freegiftInfo .fold_cont").show();
+	} else {
+		$("#freegiftInfo .fold_head").removeClass("on");
+		$("#freegiftInfo .fold_cont").hide();
+	}
+}
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 사은품 화면 노출여부 체크
+	if (freegiftList.length == null || freegiftList.length < 1) {
+		$("#freegiftInfo").css("display", "none");
+	} else {
+		$("#freegiftInfo").css("display", "block");
+	}
+	
+	//사은품노출여부
+	freegiftInfoDispYn(dispYn);
+	
+	// 사은품시퀀스배열, 
+	var freegiftSqArr 		= [];
+	var freegiftGoodsArr 	= [];
+	
+	// 사은품 장바구니 상품 뿌리기
+	for (i=0 ; i<freegiftApplyAmtList.length ; i++) {
+		var obj = freegiftApplyAmtList[i];
+		freegiftSqArr.push(obj.freegiftSq);
+		freegiftGoodsArr.push(obj.goodsCd);
+	}
+	
+	$(".freegiftSqArr").text(freegiftSqArr);
+	$(".freegiftGoodsArr").text(freegiftGoodsArr);
+	
+});
+</script>
+</th:block>
+
+
+
+
+
+
+
+
+
+
+>>>>>>> refs/remotes/origin/order

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

@@ -1,176 +1,176 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderCustemerInfoWeb.html
- * @desc    : 고객정보 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.02.01   jsh77b     최초 작성
- *******************************************************************************
- -->
-<input type="hidden" name="delvFeeCdCnt" th:value="${delvFeeCdCnt}"/>
-<input type="hidden" name="shotCnt" th:value="${shotCnt}"/>
-<input type="hidden" name="wmsCnt" 	th:value="${wmsCnt}"/>
-
-<div class="foldGroup">
-	<ul>
-		<li class="fold_mbinfo">
-			<div class="fold_head">
-				<a href="javascript:void(0)">
-					<div>
-						<div class="fold_tit"><span>주문내역</span></div>
-						<div class="data"><em class="c_primary" th:text="${goodsTotCnt}"></em>개의 상품</div>
-					</div>
-				</a>
-			</div>
-			<div class="fold_cont" style="display: none;">
-				<div class="od_item_box">	
-					<th:block th:each="delvAllCart, i : ${delvAllCartList}">
-						<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-							<div class="part_goods">
-								<th:block th:if="${i.index} == 0">
-									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-										<div class="goods_top">
-											<div class="goods_date">STYLE24 총알배송<span class="date">오늘 자정까지 도착</span></div>
-										</div>
-									</th:block>
-								</th:block>
-								<th:block th:if="${i.index} == 1">
-									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-										<div class="goods_top">
-											<div class="goods_date">STYLE24 일반배송</div>
-										</div>
-									</th:block>
-								</th:block>
-								<th:block th:if="${i.index} == 2">
-									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-										<div class="goods_top">
-											<div class="goods_date">업체직배송</div>
-										</div>
-									</th:block>
-								</th:block>
-								<th:block th:if="${i.index} == 3">
-									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
-										<div class="goods_top">
-											<div class="goods_date">예약배송</div>
-										</div>
-									</th:block>
-								</th:block>
-								<!-- 주문 접수 -->
-								<th:block th:each="goods, i : ${delvAllCart}">
-									<div class="goods_section">
-										<div class="goods_detail">
-											<a href="">
-												<div class="thumb_box">
-													<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
-												</div>
-												<div class="info_box">
-													<div class="od_name">
-														<div class="brand"><span th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></span></div>
-														<div class="name" th:text="${goods.goodsNm}"></div>
-													</div>
-													<div class="od_opt" >
-														<div class="option" th:each="colorNm, index : ${goods.colorNmArr}">
-															<em th:text="${colorNm}"></em>
-															<em th:text="${goods.optCd2Arr[index.index]}"></em>
-														</div>
-													</div>
-													<div class="od_point">
-														<p class="point"><span th:text="${#numbers.formatInteger(goods.savePntAmt, 1, 'COMMA')}"></span>P 적립예정</p>
-													</div>
-												</div>
-											</a>
-										</div>
-										<div class="od_calc">
-											<p class="count">수량 <em th:text="${goods.goodsQty}"></em>개</p>
-											<p class="price">
-												<!-- 다다익선할인금액없으면 즉시할인가 까지만 표현 -->
-												<th:block th:if="${goods.tmtbDcAmt} < 1">
-													<span class="selling_price"><em th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.goodsQty, 1, 'COMMA')}"></em>원</span>
-												</th:block>
-												<!-- 다다익선할인금액있으면 즉시할인가, 다다익선할인가 표현 -->
-												<th:block th:if="${goods.tmtbDcAmt} > 0">
-													<span class="sale_price"><del><em th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.goodsQty, 1, 'COMMA')}"></em>원</del></span>
-													<span class="selling_price"><em th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></em>원</span>
-												</th:block>
-
-											</p>
-										</div>
-										<th:block th:if="${goods.delvResDt}">
-											<p class="info_reserv">
-												<i class="ico ico_calender"></i><span th:text="${goods.delvResDt}"></span> 배송예정상품
-											</p>
-										</th:block>
-									</div>
-								</th:block>
-							</div>
-						</div>
-					</th:block>
-				</th:block>
-				
-				<div class="od_amount_box">
-					<dl>
-						<div>
-							<dt>상품금액</dt>
-							<dd><em id="orgGoodsSumAmt"></em>원</dd>
-						</div>
-						<div>
-							<dt>배송비</dt>
-							<dd><em id="delvSumAmt"></em>원</dd>
-						</div>
-						<div>
-							<dt>상품할인(즉시할인)</dt>
-							<dd>
-								<span class="disc_amount"><em id="cpn1DcSumAmt"></em>원</span>
-							</dd>
-						</div>
-						<div>
-							<dt>다다익선할인</dt>
-							<dd>
-								<span class="disc_amount"><em id="tmtbDcSumAmt"></em>원</span>
-							</dd>
-						</div>
-						<div>
-							<dt>쿠폰할인</dt>
-							<dd>
-								<span class="disc_amount"><em id="couponDcSumAmt"></em>원</span>
-							</dd>
-						</div>
-						<div>
-							<dt>선포인트 사용</dt>
-							<dd>
-								<span class="disc_amount"><em id="prePntDcAmt"></em>P</span>
-							</dd>
-						</div>
-						<div>
-							<dt>포인트 사용</dt>
-							<dd>
-								<span class="disc_amount"><em id="pntDcAmt"></em>P</span>
-							</dd>
-						</div>
-						<div>
-							<dt>상품권 사용</dt>
-							<dd>
-								<span class="disc_amount"><em id="gfcdUseAmt"></em>원</span>
-							</dd>
-						</div>
-					</dl>
-				</div>
-				<div class="totalprice_box">
-					<dl>
-						<dt>총 결제 예정 금액</dt>
-						<dd data-weight="price" data-font="lato"><span id="savePntSumAmt"></span>원</dd>
-					</dl>
-					<p class="info_point"><span class="save_point" id="savePntSumAmt">P</span> 적립예정
-					</p>
-					<p class="info_delivery">총 <span id="delvFeeCdCnt" th:text="${delvFeeCdCnt}"></span>건으로 나뉘어 배송 예정</p>
-				</div>
-			</div> 
-		</li>
-	</ul>
-</div>
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderCustemerInfoWeb.html
+ * @desc    : 고객정보 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<input type="hidden" name="delvFeeCdCnt" th:value="${delvFeeCdCnt}"/>
+<input type="hidden" name="shotCnt" th:value="${shotCnt}"/>
+<input type="hidden" name="wmsCnt" 	th:value="${wmsCnt}"/>
+
+<div class="foldGroup">
+	<ul>
+		<li class="fold_mbinfo">
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit"><span>주문내역</span></div>
+						<div class="data"><em class="c_primary" th:text="${goodsTotCnt}"></em>개의 상품</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont" style="display: none;">
+				<div class="od_item_box">	
+					<th:block th:each="delvAllCart, i : ${delvAllCartList}">
+						<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+							<div class="part_goods">
+								<th:block th:if="${i.index} == 0">
+									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+										<div class="goods_top">
+											<div class="goods_date">STYLE24 총알배송<span class="date">오늘 자정까지 도착</span></div>
+										</div>
+									</th:block>
+								</th:block>
+								<th:block th:if="${i.index} == 1">
+									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+										<div class="goods_top">
+											<div class="goods_date">STYLE24 일반배송</div>
+										</div>
+									</th:block>
+								</th:block>
+								<th:block th:if="${i.index} == 2">
+									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+										<div class="goods_top">
+											<div class="goods_date">업체직배송</div>
+										</div>
+									</th:block>
+								</th:block>
+								<th:block th:if="${i.index} == 3">
+									<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+										<div class="goods_top">
+											<div class="goods_date">예약배송</div>
+										</div>
+									</th:block>
+								</th:block>
+								<!-- 주문 접수 -->
+								<th:block th:each="goods, i : ${delvAllCart}">
+									<div class="goods_section">
+										<div class="goods_detail">
+											<a href="">
+												<div class="thumb_box">
+													<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
+												</div>
+												<div class="info_box">
+													<div class="od_name">
+														<div class="brand"><span th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></span></div>
+														<div class="name" th:text="${goods.goodsNm}"></div>
+													</div>
+													<div class="od_opt" >
+														<div class="option" th:each="colorNm, index : ${goods.colorNmArr}">
+															<em th:text="${colorNm}"></em>
+															<em th:text="${goods.optCd2Arr[index.index]}"></em>
+														</div>
+													</div>
+													<div class="od_point">
+														<p class="point"><span th:text="${#numbers.formatInteger(goods.savePntAmt, 1, 'COMMA')}"></span>P 적립예정</p>
+													</div>
+												</div>
+											</a>
+										</div>
+										<div class="od_calc">
+											<p class="count">수량 <em th:text="${goods.goodsQty}"></em>개</p>
+											<p class="price">
+												<!-- 다다익선할인금액없으면 즉시할인가 까지만 표현 -->
+												<th:block th:if="${goods.tmtbDcAmt} < 1">
+													<span class="selling_price"><em th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.goodsQty, 1, 'COMMA')}"></em>원</span>
+												</th:block>
+												<!-- 다다익선할인금액있으면 즉시할인가, 다다익선할인가 표현 -->
+												<th:block th:if="${goods.tmtbDcAmt} > 0">
+													<span class="sale_price"><del><em th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.goodsQty, 1, 'COMMA')}"></em>원</del></span>
+													<span class="selling_price"><em th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></em>원</span>
+												</th:block>
+
+											</p>
+										</div>
+										<th:block th:if="${goods.delvResDt}">
+											<p class="info_reserv">
+												<i class="ico ico_calender"></i><span th:text="${goods.delvResDt}"></span> 배송예정상품
+											</p>
+										</th:block>
+									</div>
+								</th:block>
+							</div>
+						</div>
+					</th:block>
+				</th:block>
+				
+				<div class="od_amount_box">
+					<dl>
+						<div>
+							<dt>상품금액</dt>
+							<dd><em id="orgGoodsSumAmt"></em>원</dd>
+						</div>
+						<div>
+							<dt>배송비</dt>
+							<dd><em id="delvSumAmt"></em>원</dd>
+						</div>
+						<div>
+							<dt>상품할인(즉시할인)</dt>
+							<dd>
+								<span class="disc_amount"><em id="cpn1DcSumAmt"></em>원</span>
+							</dd>
+						</div>
+						<div>
+							<dt>다다익선할인</dt>
+							<dd>
+								<span class="disc_amount"><em id="tmtbDcSumAmt"></em>원</span>
+							</dd>
+						</div>
+						<div>
+							<dt>쿠폰할인</dt>
+							<dd>
+								<span class="disc_amount"><em id="couponDcSumAmt"></em>원</span>
+							</dd>
+						</div>
+						<div>
+							<dt>선포인트 사용</dt>
+							<dd>
+								<span class="disc_amount"><em id="prePntDcAmt"></em>P</span>
+							</dd>
+						</div>
+						<div>
+							<dt>포인트 사용</dt>
+							<dd>
+								<span class="disc_amount"><em id="pntDcAmt"></em>P</span>
+							</dd>
+						</div>
+						<div>
+							<dt>상품권 사용</dt>
+							<dd>
+								<span class="disc_amount"><em id="gfcdUseAmt"></em>원</span>
+							</dd>
+						</div>
+					</dl>
+				</div>
+				<div class="totalprice_box">
+					<dl>
+						<dt>총 결제 예정 금액</dt>
+						<dd data-weight="price" data-font="lato"><span id="savePntSumAmt"></span>원</dd>
+					</dl>
+					<p class="info_point"><span class="save_point" id="savePntSumAmt">P</span> 적립예정
+					</p>
+					<p class="info_delivery">총 <span id="delvFeeCdCnt" th:text="${delvFeeCdCnt}"></span>건으로 나뉘어 배송 예정</p>
+				</div>
+			</div> 
+		</li>
+	</ul>
+</div>

+ 74 - 0
src/main/webapp/WEB-INF/views/mob/order/OrderMadeInfoMob.html

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <!DOCTYPE html>
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
@@ -86,3 +87,76 @@ $("#orderForm #chk-custom-agr1").on("click", function(){
 </script>
 
 </html>
+=======
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderMadeInfoMob.html
+ * @desc    : 주문제작상품동의여부 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.05   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<!-- 주문제작상품동의여부 -->
+<div class="foldGroup">
+	<ul>
+		<li>
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit">
+							<span>주문제작상품동의</span>
+						</div>
+						<div class="data custom_disc">
+							<div class="form_field">
+								<input id="chk-custom" type="checkbox" checked=""> <label
+									for="chk-custom"><span>동의합니다.</span></label>
+							</div>
+						</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont">
+				<div class="area_customitem">
+					<p>고객님께서 주문하신 상품에는 주문제작상품이 포함되어 있습니다.</p>
+					<div class="form_field">
+						<div class="agree_custom">
+							<input id="chk-custom-agr1" type="checkbox" checked="">
+							<label for="chk-custom-agr1"><span>주문제작상품에 대한
+									안내를 확인하였으며 배송에 동의합니다.</span></label>
+						</div>
+					</div>
+					<div class="info_txt">
+						<ul>
+							<li>주문 제작 상품은 주문 후 제작이 진행되며, 제작 완료 후 배송이 시작됩니다.</li>
+							<li>주문 제작 상품의 특성상 주문 완료 후 취소/교환이 불가능합니다. (상품 하자에 한해 가능)</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</li>
+	</ul>
+</div>
+<!-- //주문제작상품동의여부 -->
+				
+<script th:inline="javascript">
+var dispYn = [[${order.dispYn}]]; // 노출여부
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 화면펼침
+	if (dispYn == "Y") {
+		$("#custemerInfo .fold_head").addClass("on");
+		$("#custemerInfo .fold_cont").css("display", "block");
+	}
+});
+</script>
+
+</html>
+>>>>>>> refs/remotes/origin/order

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

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <!DOCTYPE html>
 <html lang="ko" xmlns:th="http://www.thymeleaf.org">
 <!--
@@ -129,4 +130,113 @@ $(document).ready( function() {
 
 </script>
 
+=======
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderPaymentInfoWeb.html
+ * @desc    : 결제정보 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<!-- 결제수단 선택 -->
+<div class="foldGroup">
+	<ul>
+		<li>
+			<div class="fold_head">
+				<a href="javascript:void(0)">
+					<div>
+						<div class="fold_tit">
+							<span>결제수단</span>
+						</div>
+						<div class="data">
+							<span>신용카드</span>
+						</div>
+					</div>
+				</a>
+			</div>
+			<div class="fold_cont">
+				<div class="area_paymethod">
+					<div class="paymethod_box">
+						<div class="form_field">
+							<ul class="sel_method">
+								<li><input type="radio" name="rdi-paynormal"
+									id="payCreditCard" value=""> <label
+									for="payCreditCard"><span>신용카드</span></label></li>
+								<li><input type="radio" name="rdi-paynormal"
+									id="payKakao" value=""> <label for="payKakao"><span><em
+											class="sr-only">카카오페이 결제</em><em class="payimg kakao"></em></span></label>
+								</li>
+								<li><input type="radio" name="rdi-paynormal"
+									id="payRealBank" value=""> <label for="payRealBank"><span>실시간계좌이체</span></label>
+								</li>
+								<li><input type="radio" name="rdi-paynormal"
+									id="payNaver" value=""> <label for="payNaver"><span><em
+											class="sr-only">네이버페이 결제</em><em class="payimg naver"></em></span></label>
+								</li>
+								<li><input type="radio" name="rdi-paynormal"
+									id="payVirtualBank" value=""> <label
+									for="payVirtualBank"><span>무통장입금</span></label></li>
+								<li><input type="radio" name="rdi-paynormal"
+									id="payPayco" value=""> <label for="payPayco"><span><em
+											class="sr-only">페이코 결제</em><em class="payimg payco"></em></span></label>
+								</li>
+								<li><input type="radio" name="rdi-paynormal"
+									id="payCellphone" value=""> <label
+									for="payCellphone"><span>휴대폰 결제</span></label></li>
+							</ul>
+						</div>
+						<div class="form_field">
+							<div class="agree_insurance">
+								<input id="chk-insurance" type="checkbox"> <label
+									for="chk-insurance"> <span>소비자 피해 보상보험
+										신청&nbsp;&nbsp;<em class="tmark_optional">(선택)</em>
+								</span>
+								</label>
+								<p>
+									‘전자상거래 등에서의 소비자보호에 관한 법률‘에 따라 현금 결제 시 서울보증보험㈜가 제공하는 소비자
+									피해보상보험을<br>신청할 수 있도록 해드리고 있습니다. (2013.11.28부터 시행)
+								</p>
+								<a href="" class="btn btn_default"><span>FAQ확인</span></a>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</li>
+	</ul>
+</div><!-- //결제수단 선택 -->
+
+
+<script th:inline="javascript">
+var dispYn = [[${order.dispYn}]]; // 노출여부
+
+//화면노출
+var paymentInfoDispYn = function(temp) {
+	if (temp == "Y") {
+		$("#paymentInfo .fold_head").addClass("on");
+		$("#paymentInfo .fold_cont").show();
+	} else {
+		$("#paymentInfo .fold_head").removeClass("on");
+		$("#paymentInfo .fold_cont").hide();
+	}
+}
+
+//컨텐츠 호출
+$(document).ready( function() {
+	// 화면펼침
+	paymentInfoDispYn(dispYn);
+});
+
+
+</script>
+
+>>>>>>> refs/remotes/origin/order
 </html>

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

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <!-- 배송지변경 팝업 -->
 <form name="delvAddrChangeForm" id="delvAddrChangeForm">
 	<div class="modal-header htop">
@@ -144,3 +145,151 @@ $('#btn_adrsAdd_pop').on("click", function(){
 
 
 </script>
+=======
+<!-- 배송지변경 팝업 -->
+<form name="delvAddrChangeForm" id="delvAddrChangeForm">
+	<div class="modal-header htop">
+		<h5 class="modal-title" id="adrsChangeLabel">배송지 관리</h5>
+	</div>
+	<div class="modal-body">
+		<div class="pop_cont">
+			<div class="inner wide">
+				<div class="delivery_list">
+					<!-- 배송지목록 -->
+					<th:block th:each="deliveryAddr, index : ${deliveryAddrList}">
+						<div class="ship_info">
+							<dl>
+								<div class="name">
+									<dt><span class="sr-only">배송지명</span></dt>
+									<dd>
+										<th:block th:text="${deliveryAddr.recipNm}"></th:block>
+										<div class="badge_wrap">
+											<th:block th:if="${deliveryAddr.defaultYn} == 'Y'">
+												<em class="order_badge">기본배송지</em> 
+											</th:block>
+											<th:block th:if="${deliveryAddr.shotDelvUseYn} == 'Y'">
+												<em class="order_badge order_bullet_badge">총알배송</em>
+											</th:block>
+										</div>
+									</dd>
+								</div>
+								<div class="phone">
+									<dt><span class="sr-only">휴대폰 번호</span></dt>
+									<dd th:text="${deliveryAddr.recipPhnno}"></dd>
+								</div>
+								<div class="addr">
+									<dt><span class="sr-only">배송주소</span></dt>
+									<dd th:text="${deliveryAddr.recipBaseAddr} + ' ' + ${deliveryAddr.recipDtlAddr}"></dd>
+								</div>
+								<div class="ship_request">
+									<dl>
+										<dt>배송요청 사항</dt>
+										<dd th:text="${deliveryAddr.delvMemo}"></dd>
+									</dl>
+								</div>
+							</dl>
+							<div class="btn_group btn_group_flex">
+								<div><button type="button" class="btn btn_gost btn_addrModify_pop" th:value="${deliveryAddr.custDelvAddrSq}" id="btn_addrModify_pop"><span>수정</span></button></div>
+								<div><button type="button" class="btn btn_dark btn_sel_delvAddr" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button></div>
+							</div>
+							
+							<input type="hidden" name="recipNm" 			th:value="${deliveryAddr.recipNm}"/>
+							<input type="hidden" name="recipPhnno" 			th:value="${deliveryAddr.recipPhnno}"/>
+							<input type="hidden" name="recipZipcode" 		th:value="${deliveryAddr.recipZipcode}"/>
+							<input type="hidden" name="recipBaseAddr" 		th:value="${deliveryAddr.recipBaseAddr}"/>
+							<input type="hidden" name="recipDtlAddr" 		th:value="${deliveryAddr.recipDtlAddr}"/>
+							<input type="hidden" name="delvMemo" 			th:value="${deliveryAddr.delvMemo}"/>
+						</div>
+					</th:block>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="modal-footer">
+		<button type="button" class="btn btn_dark" id="btn_adrsAdd_pop">
+			<span>배송지 추가</span>
+		</button>
+	</div>
+</form>
+
+<script th:inline="javascript">
+//컨텐츠 호출
+$(document).ready( function() {
+});
+
+// 2. 버튼기능구현
+// 2.1 배송지선택버튼
+$(".btn_sel_delvAddr").on("click", function(){
+	
+	// custDelvAddrSq 부모창으로 전달
+	var delvObj = {
+		"custDelvAddrSq"	: $(this).attr("value")
+		, "dispYn"			: "Y"
+		, "recipNm"			: $(this).parent().find("input[name=recipNm]").val()
+		, "recipPhnno"		: $(this).parent().find("input[name=recipPhnno]").val()
+		, "recipZipcode"	: $(this).parent().find("input[name=recipZipcode]").val()
+		, "recipBaseAddr"	: $(this).parent().find("input[name=recipBaseAddr]").val()
+		, "recipDtlAddr"	: $(this).parent().find("input[name=recipDtlAddr]").val()
+		, "delvMemo"		: $(this).parent().find("input[name=delvMemo]").val()
+	}
+	
+	// 부모장으로 값 전닫
+	deliveryAddrInfoSet(delvObj);
+	
+	// 팝업닫기
+	$(".close-modal").trigger("click");
+});
+
+// 2.2 배송지수정버튼
+$(".btn_addrModify_pop").on("click", function(){
+		
+	var obj = {
+		"custDelvAddrSq" : $(this).attr("value")
+	} 
+	
+	$.ajax( {
+		type		: "POST",
+		url 		: '/common/delvAddrModifyPop',
+		data		: JSON.stringify(obj),
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			$("#adrsModifyPop .modal-dialog .modal-content").html(result);
+			$("#adrsModifyPop").modal("show");
+		}
+	});	
+});
+
+
+// 2.3 배송지추가 팝업열기
+$('#btn_adrsAdd_pop').on("click", function(){
+	$.ajax( {
+		type		: "POST",
+		url 		: '/common/delvAddrAddPop',
+		data		: JSON.stringify(jsonObj),
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			$("#adrsAddPop .modal-dialog .modal-content").html(result);
+			$("#adrsAddPop").modal("show");
+		}
+	});	
+});
+
+
+
+
+
+
+</script>
+>>>>>>> refs/remotes/origin/order

+ 298 - 0
src/main/webapp/WEB-INF/views/mob/popup/DelvAddrModifyPopMob.html

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 <form name="deliveryModifyForm" id="deliveryModifyForm">
 	<input type="hidden" class="form_control" name="custDelvAddrSq" th:value="${deliveryAddrInfo.custDelvAddrSq}">
 	
@@ -293,3 +294,300 @@ var fnOpenDaumAddr = function() {
 	cfnOpenDaumAddr(daumZip);
 }
 </script>
+=======
+<form name="deliveryModifyForm" id="deliveryModifyForm">
+	<input type="hidden" class="form_control" name="custDelvAddrSq" th:value="${deliveryAddrInfo.custDelvAddrSq}">
+	
+	<div class="modal-header htop">
+		<h5 class="modal-title" id="adrsModifyLabel">배송지 수정</h5>
+	</div>
+	<div class="modal-body">
+		<div class="pop_cont">
+			<div class="inner wide">
+				<div class="tbl_wrap">
+					<div class="tbl tbl_dlvr">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<td>
+										<span class="sr-only">받는분</span>
+										<input type="text"class="form_control" name="recipNm" placeholder="받는분" th:value="${deliveryAddrInfo.recipNm}">
+									</td>
+								</tr>
+								<tr>
+									<td>
+										<span class="sr-only">휴대폰 번호</span>
+										<input type="text" class="form_control" name="recipPhnno" placeholder="휴대폰 번호" th:value="${deliveryAddrInfo.recipPhnno}">
+									</td>
+								</tr>
+								<tr>
+									<td>
+										<span class="sr-only">배송 주소</span>
+										<div class="input_wrap">
+											<input type="hidden" name="recipZipcode" placeholder="우편번호" th:value="${deliveryAddrInfo.recipZipcode}" readonly="readonly">
+											<input type="hidden" class="form_control" name="recipBaseAddr" placeholder="기본주소"th:value="${deliveryAddrInfo.recipBaseAddr}" readonly="readonly">
+							
+											<input type="text" class="form_control" placeholder="배송주소" name="recipAddr" th:value="${deliveryAddrInfo.recipZipcode} + '    '+ ${deliveryAddrInfo.recipBaseAddr}" readonly="readonly">
+											<input type="text" class="form_control" placeholder="상세주소" name="recipDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+											<button type="button" class="btn btn_sch" onclick="fnOpenDaumAddr();">
+												<span class="sr-only">우편번호 찾기</span>
+											</button>
+										</div>
+										<div class="default_addrs">
+											<div class="form_field">
+												<th:block th:if="${deliveryAddrInfo.defaultYn} == 'Y'">
+													<input id="chk-default-addrs" type="checkbox" name="defaultYn" checked>
+												</th:block>
+												<th:block th:if="${deliveryAddrInfo.defaultYn} == 'N'">
+													<input id="chk-default-addrs" type="checkbox" name="defaultYn">
+												</th:block>
+												<label for="chk-default-addrs"><span>기본배송지로 등록</span></label>
+											</div>
+										</div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<div class="tbl_wrap">
+					<div class="tbl_tit">
+						<h3>배송 요청사항</h3>
+					</div>
+					<div class="tbl tbl_request">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th class="sr-only">문 앞</th>
+									<td>
+										<div class="form_field">
+											<input type="radio" name="rdi-request1" id="rdi-1" value="문 앞">
+											<label for="rdi-1"><span>문 앞</span></label>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th class="sr-only">직접 받고 부재 시 문 앞</th>
+									<td>
+										<div class="form_field">
+											<input type="radio" name="rdi-request1" id="rdi-2" value="직접 받고 부재 시 문 앞">
+											<label for="rdi-2"><span>직접 받고 부재 시 문 앞</span></label>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th class="sr-only">경비실</th>
+									<td>
+										<div class="form_field">
+											<input type="radio" name="rdi-request1" id="rdi-3" value="경비실"><label
+												for="rdi-3"><span>경비실</span></label>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th class="sr-only">택배함</th>
+									<td>
+										<div class="form_field">
+											<input type="radio" name="rdi-request1" id="rdi-4" value="택배함">
+											<label for="rdi-4"><span>택배함</span></label>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th class="sr-only">기타사항</th>
+									<td>
+										<div class="form_field">
+											<input type="radio" name="rdi-request1" id="rdi-5" value="5">
+											<label for="rdi-5"><span>기타사항</span></label>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th class="sr-only">보관 장소만 입력(필수)</th>
+									<td>
+										<div class="form_text">
+											<input type="text" name="delvMemoText"  placeholder="보관 장소만 입력 (필수)" maxlength="30" disabled>
+											<p class="desc_txt">보관 장소 외 다른 내용 입력시 통보 없이 삭제 될 수 있습니다.</p>
+										</div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="modal-footer">
+		<button type="button" class="btn btn_dark" id="btn_delivery_modi_save"><span>배송지 등록</span></button>
+	</div>
+</form>
+
+<script th:inline="javascript">
+var delvMemo = [[${deliveryAddrInfo.delvMemo}]];
+//컨텐츠 호출
+$(document).ready( function() {
+	
+	var delvMemoArr = ["문 앞", "직접받고 부재시 문 앞", "경비실", "택배함"];
+	var tempMemo = true;
+	
+	// 배송요청사항설정
+	for (i=0 ; i<delvMemoArr.length ; i++) {
+		if (delvMemoArr[i] == delvMemo) {
+			tempMemo = false;
+		}
+	}
+	
+	if (tempMemo) {
+		$("#deliveryModifyForm input[name=rdi-request1]").eq(4).attr("checked", true);
+		$("#deliveryModifyForm input[name=delvMemoText]").attr("disabled", false);
+		$("#deliveryModifyForm input[name=delvMemoText]").val(delvMemo);
+	}
+	
+	$("#deliveryModifyForm input[name=rdi-request1]").each(function(){
+		var temp = $(this).parent().find('span').text();
+		if (delvMemo == temp) {
+			$(this).attr("checked", true);
+		}
+	});
+	
+	// 배송요청사항 버튼기능
+	$("#deliveryModifyForm input[name=rdi-request1]").each(function(){
+		// 버튼기능
+		$(this).on("click", function(){
+			var temp = $(this).parent().find('span').text();
+			$("#deliveryModifyForm input[name=delvMemoText]").val("");
+			if (temp == "기타사항") {
+				$("#deliveryModifyForm input[name=delvMemoText]").attr("disabled", false);
+			} else {
+				$("#deliveryModifyForm input[name=delvMemoText]").attr("disabled", true);
+			}
+		});
+	});
+});
+
+// 배송지등록버튼
+$("#btn_delivery_modi_save").on("click", function(){
+	
+	// 유효성체크
+	if (!deliveryModifyFormCheck()){
+		return false;
+	}
+	
+	// 기본배송지여부
+	var defaultYn = "N";
+	if ($("#deliveryModifyForm input[name=defaultYn]").is(":checked")) {
+		defaultYn = "Y";
+	}
+	
+	// 기타사항일때 텍스트 등록
+	var delvMemo = $("#deliveryModifyForm input[name=rdi-request1]:checked").parent().find('span').text();
+	if ("기타사항" == delvMemo) {
+		delvMemo = $("#deliveryModifyForm input[name=delvMemoText]").val();
+	}
+	
+	// 배송지정보설정
+	var jsonObj = {
+		"defaultYn"			: defaultYn
+		, "custDelvAddrSq"	: parseInt($("#deliveryModifyForm input[name=custDelvAddrSq]").val())
+		, "recipNm"			: $("#deliveryModifyForm input[name=recipNm]").val()
+		, "recipPhnno"		: $("#deliveryModifyForm input[name=recipPhnno]").val()
+		, "recipZipcode"	: $("#deliveryModifyForm input[name=recipZipcode]").val()
+		, "recipBaseAddr"	: $("#deliveryModifyForm input[name=recipBaseAddr]").val()
+		, "recipDtlAddr"	: $("#deliveryModifyForm input[name=recipDtlAddr]").val()
+		, "delvMemo"		: delvMemo
+	}
+	
+	var jsonData = JSON.stringify(jsonObj);
+	
+	$.ajax( {
+		type		: "POST",
+		url 		: '/common/updateCustDeliveryAddr',
+		data		: jsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			// custDelvAddrSq 부모창으로 전달
+			var delvObj = {
+				"custDelvAddrSq"	: parseInt($("#deliveryModifyForm input[name=custDelvAddrSq]").val())
+				, "dispYn"			: "Y"
+				, "recipNm"			: $("#deliveryModifyForm input[name=recipNm]").val()
+				, "recipPhnno"		: $("#deliveryModifyForm input[name=recipPhnno]").val()
+				, "recipZipcode"	: $("#deliveryModifyForm input[name=recipZipcode]").val()
+				, "recipBaseAddr"	: $("#deliveryModifyForm input[name=recipBaseAddr]").val()
+				, "recipDtlAddr"	: $("#deliveryModifyForm input[name=recipDtlAddr]").val()
+				, "delvMemo"		: delvMemo
+			}
+			
+			// 부모장으로 값 전닫
+			delvAddrSet(delvObj);
+			
+			// 팝업닫기
+			$(".close-modal").trigger("click");
+		}
+	});
+});
+
+// 유효성체크 함수
+var deliveryModifyFormCheck = function() {
+	// TODO 유효성 체크 추가
+	if (gagajf.isNull($("#deliveryModifyForm input[name=recipNm]").val())) {
+		mcxDialog.alert("이름을 입력해주세요.");
+		$('#deliveryModifyForm input[name=custNm]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryModifyForm input[name=recipZipcode]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#deliveryModifyForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryModifyForm input[name=recipBaseAddr]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#deliveryModifyForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryModifyForm input[name=recipDtlAddr]").val())) {
+		mcxDialog.alert("상세주소를 입력해주세요.");
+		$('#deliveryModifyForm input[name=recipDtlAddr]').focus();
+		return false;
+	}
+	
+	return true;
+}
+
+// 우편번호 DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function() {
+	$("body").css("overflow", "hidden");
+	
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			$('#deliveryModifyForm input[name=recipAddr]').val(data.zonecode + '    ' + cfnGetDaumRoadAddr(data));
+			$('#deliveryModifyForm input[name=recipZipcode]').val(data.zonecode);
+			$('#deliveryModifyForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#deliveryModifyForm input[name=recipDtlAddr]').focus();
+			
+			cfnCloseDaumAddr();
+			
+			$("#adrsModifyPop").modal("show");
+		},
+		width: '100%'
+	});
+	
+	cfnOpenDaumAddr(daumZip);
+}
+</script>
+>>>>>>> refs/remotes/origin/order

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

@@ -571,10 +571,22 @@
 			/*let compsList = [];
 			let temp 			= new Object;
 			temp.goodsCd 		= "AOW13QDM76";
-			temp.optCd 			= "13256848-4";
-			temp.goodsQty 		= 1;
+			temp.optCd 			= "13256848-2";
+			temp.goodsQty 		= 3;
 			temp.goodsType 		= "G056_N";
-			temp.cartGb 		= "C";
+			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 		= "AOW13QDM76";
+			temp.optCd 			= "13256848-6";
+			temp.goodsQty 		= 3;
+			temp.goodsType 		= "G056_N";
+			temp.cartGb 		= "O";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.contentsLoc 	= "G028_YYY";
@@ -593,12 +605,17 @@
 			}
 
 			/* 세트상품 장바구니 */
-			/*let compsList = [];
+			/*let goodsList = {
+				cartCompsList : new Array()
+			}
+			let cartGoodsList = [];
+
+			let compsList = [];
 			let temp = new Object;
 			temp.goodsCd = "STYS00000005";
 			temp.itemCd = "A83F-DP568S";
-			temp.optCd = "14019445-2";
-			temp.goodsQty = 1;
+			temp.optCd = "14019445-1";
+			temp.goodsQty = 3;
 			temp.goodsType = "G056_S";
 			temp.cartGb = "C";
 			temp.afLinkCd = "aaaa";
@@ -609,8 +626,8 @@
 			temp = new Object;
 			temp.goodsCd = "STYS00000005";
 			temp.itemCd = "A83F-TS517S";
-			temp.optCd = "11867579-2";
-			temp.goodsQty = 1;
+			temp.optCd = "11867579-1";
+			temp.goodsQty = 3;
 			temp.goodsType = "G056_S";
 			temp.cartGb = "C";
 			temp.afLinkCd = "aaaa";
@@ -619,36 +636,42 @@
 			temp.planDtlSq = "44";
 			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);
+			goodsList.cartCompsList = compsList;
+			cartGoodsList.push(goodsList);
 
+			let compsList2 = [];
+			let goodsList2 = {
+				cartCompsList : new Array()
+			}
+			temp = new Object;
+			temp.goodsCd = "STYS00000005";
+			temp.itemCd = "A83F-DP568S";
+			temp.optCd = "14019445-3";
+			temp.goodsQty = 3;
+			temp.goodsType = "G056_S";
+			temp.cartGb = "C";
+			temp.afLinkCd = "aaaa";
+			temp.ithrCd = "12311";
+			temp.contentsLoc = "afasd";
+			temp.planDtlSq = "44";
+			compsList2.push(temp);
 			temp = new Object;
-			temp.goodsCd = "14373710";
-			temp.optCd = "L핑크130";
+			temp.goodsCd = "STYS00000005";
+			temp.itemCd = "A83F-TS517S";
+			temp.optCd = "14024048-1";
 			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);
+			temp.goodsType = "G056_S";
+			temp.cartGb = "C";
+			temp.afLinkCd = "aaaa";
+			temp.ithrCd = "12311";
+			temp.contentsLoc = "afasd";
+			temp.planDtlSq = "44";
+			compsList2.push(temp);
 
-			cfnAddCart(compsList);*/
+			goodsList2.cartCompsList = compsList2;
+			cartGoodsList.push(goodsList2);
+
+			cfnAddCart(cartGoodsList);*/
 		});
 
 		function cancelCartCpn() {

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

@@ -19,7 +19,7 @@
 	<!-- head start -->
 	<div class="common_header">
 		<!-- 프로모션 띠 배너 등록 시 노출 -->
-		<div class="hd_top_banner" style="background-color:#fd4801;">
+		<div class="hd_top_banner" style="background-color:#fd4801;display:none;">
 			<a href="" class="t_bnr">
 				<span style="margin:0 auto;height:60px;line-height:60px;font-size: 20px;font-weight: 600;letter-spacing: -.025em; color:#fff;">APP 수신동의 하면 1만 포인트 증정!</span>
 				<!--<img src="ABC.jpg" alt="프로모션"/>-->

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

@@ -331,7 +331,7 @@
 
 				<!-- brand_product -->
 				<th:block th:if="${contentsLoc=='013'}">
-					<div class="content brand_product">
+					<div class="content brand_product" style="display: none;">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>

+ 20 - 6
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -441,6 +441,9 @@
 		<input type="hidden" name="sortGb"/>
 	</form>
 
+	<script type="text/javascript" src="/ux/plugins/jquery.history.min.js"></script>
+	<script type="text/javascript" src="/ux/plugins/gaga.infinite.scroll.js"></script>
+
 	<script th:inline="javascript">
 		/*<![CDATA[*/
 		var filterPriceList = [[${filterPriceList}]];
@@ -452,12 +455,7 @@
 			if(!gagajf.isNull(filterPriceList)){
 				var custom_values = [];
 				$.each(filterPriceList, function (priceIdx, priceItem){
-					custom_values[0] = priceItem.price1;
-					custom_values[1] = priceItem.price2;
-					custom_values[2] = priceItem.price3;
-					custom_values[3] = priceItem.price4;
-					custom_values[4] = priceItem.price5;
-					custom_values[5] = priceItem.price6;
+					custom_values[priceIdx] = priceItem.filterNm;
 				});
 
 				var my_from = custom_values.indexOf(custom_values[0]); //custom_values.indexOf('9,000원');
@@ -497,8 +495,24 @@
 			});
 
 			fnCreateCategoryList();
+
+			fnGoodsListSearch();
 		});
 
+		var fnGoodsListSearch = function (){
+			gagaInfiniteScroll.getHistory();
+		}
+
+		// 상품 검색
+		var fnGetInfiniteScrollDataList = function (pageNum){
+			$("#searchForm input[name=pageNo]").val(pageNum+1);
+			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchForm,  gagaInfiniteScroll.jsonToHtml);
+		}
+
+		var fnDrawInfiniteScrollData = function (result){
+			console.log('nn');
+		}
+
 		var fnCreateCategoryList = function (){
 			$.getJSON('/display/gnb/tab/list'
 					, function(result, status) {

+ 50 - 169
src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html

@@ -23,115 +23,50 @@
 		<div class="breadcrumb">
 			<ul>
 				<li class="bread_home"><a href="index.html">홈</a></li>
-				<li class="bread_2depth">TBJ</li>
+				<li class="bread_2depth" th:text="${lookbookInfo.brandNm}">TBJ</li>
 				<li class="bread_3depth">룩북</li>
 			</ul>
 		</div>
 		<div class="wrap">
-			<div class="content br_lookbook_view cont_visual"> <!-- 페이지특정 클래스 = br_lookbook_view -->
+			<div class="content br_lookbook_view cont_visual" th:if="${lookbookDetailList != null}"> <!-- 페이지특정 클래스 = br_lookbook_view -->
 				<div class="cont_head">
-					<h3 class="displayH t_c">2020 F/W COLLECTION</h3>
+					<h3 class="displayH t_c" th:text="${lookbookInfo.title}">2020 F/W COLLECTION</h3>
 				</div>
 				<div class="cont_body">
 					<div class="area_slider">
 						<div class="swiper-container">
 							<div class="swiper-wrapper">
-								<div class="swiper-slide">
-									<div class="bt_lb_item">
-										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img01.jpg" alt="BLUE-a" />
-										<div class="item_picker" style="left:20%; top:44%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명11
-												</a>
-											</div>
-										</div>
-										<div class="item_picker" style="left:60%; top:30%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명12
-												</a>
-											</div>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="bt_lb_item">
-										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img02.jpg" alt="BLUE-a" />
-										<div class="item_picker" style="left:20%; top:44%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명21
-												</a>
-											</div>
-										</div>
-										<div class="item_picker" style="left:60%; top:30%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명22
-												</a>
-											</div>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="bt_lb_item">
-										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img03.jpg" alt="BLUE-a" />
-										<div class="item_picker" style="left:20%; top:44%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명31
-												</a>
-											</div>
-										</div>
-										<div class="item_picker" style="left:60%; top:30%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명32
-												</a>
-											</div>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="bt_lb_item">
-										<img class="vLHTC lb_img" src="/images/pc/thumb/br_lookbook_img04.jpg" alt="BLUE-a" />
-										<div class="item_picker" style="left:20%; top:44%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명41
-												</a>
-											</div>
-										</div>
-										<div class="item_picker" style="left:60%; top:30%;">
-											<button type="button" id="btn_picker_item01"><span class="ico ico_picker"></span></button>
-											<div class="pick_descr">
-												<a href="">
-													상품명42
-												</a>
-											</div>
+								<th:block th:each="item, stat : ${lookbookDetailList}">
+									<div class="swiper-slide">
+										<div class="bt_lb_item">
+											<img class="vLHTC lb_img" th:src="${@environment.getProperty('domain.image')+item.sysFileNm}" alt="BLUE-a" />
+											<th:block th:if="${item.lookbookGoodsList != null and !item.lookbookGoodsList.empty}" th:each="goodsItem, goodsStatus : ${item.lookbookGoodsList}">
+												<div class="item_picker" th:style="${'left:'+goodsItem.xlim+'%; top:'+goodsItem.ylim+'%;'}">
+													<button type="button" th:onclick="fnLookbookGoodsPopup([[${goodsItem.sysImgNm}]],[[${goodsItem.brandGroupNm}]],[[${goodsItem.goodsNm}]],[[${goodsItem.listPrice}]],[[${goodsItem.currPrice}]],[[${goodsItem.dcRate}]],[[${goodsItem.goodsCd}]])"><span class="ico ico_picker"></span></button>
+												</div>
+											</th:block>
 										</div>
 									</div>
-								</div>
+								</th:block>
 							</div>
 							<div class="swiper-button-prev"></div>
 							<div class="swiper-button-next"></div>
 						</div>
 					</div>
+					<!--<th:block th:each="item, stat : ${lookbookDetailList}">
+					<div class="text_cont" th:text="${item.imgDesc}">
+						국내 대표 패션기업 한세엠케이의 스타일리시 어반 캐주얼 브랜드 앤듀(ANDEW)가 중성적이고 시크한 감각을 극대화한 2020 F/W 시즌 룩북을 공개했다.<br>
+						앤듀는 올 하반기 정소현, 안재형, 고웅호 등 글로벌 런웨이 무대에서 활약중인 전문 패션 모델들과 함께 성별의 경계를 뛰어넘어 개개인의 개성을 드러내는 젠더뉴트럴 패션을 앤듀만의 감각으로 새롭게 전개한다. 중성적인 매력을 자아내는 3명의 모델들은 각자의 개성과 매력을 뽐내며 세련미를 더한 젠더리스 감성을 한층 더 완성도 있게 소화해 눈길을 끈다. 공개된 룩북에서는 따뜻하고 부드러운 파스텔톤, 차분한 모노크롬 컬러로 극명하게 상반된 분위기를  연출하며 각기 다른 유니섹스 스타일을 선보였다. 격식을 갖추되 포멀하진 않게 자연스럽게 떨어지는 핏과 힙한 디자인을 통해 앤듀만의 젠더뉴트럴 캐주얼룩을 연출한 것. 또한, 이번 시즌에도 패션업계에 불고 있는 ‘필(必)환경’  트렌드에 따라 그린슈머들을 사로잡을 다양한 친환경적인 제품들을 주력으로 출시하며 지속가능한 패션을 실천할 계획이다. 버려진 페트병이나 플라스틱을 활용해 친환경 재생 섬유인 리사이클 페트(PET)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
+					</div>
+					</th:block>-->
 					<div class="text_cont">
 						국내 대표 패션기업 한세엠케이의 스타일리시 어반 캐주얼 브랜드 앤듀(ANDEW)가 중성적이고 시크한 감각을 극대화한 2020 F/W 시즌 룩북을 공개했다.<br>
 						앤듀는 올 하반기 정소현, 안재형, 고웅호 등 글로벌 런웨이 무대에서 활약중인 전문 패션 모델들과 함께 성별의 경계를 뛰어넘어 개개인의 개성을 드러내는 젠더뉴트럴 패션을 앤듀만의 감각으로 새롭게 전개한다. 중성적인 매력을 자아내는 3명의 모델들은 각자의 개성과 매력을 뽐내며 세련미를 더한 젠더리스 감성을 한층 더 완성도 있게 소화해 눈길을 끈다. 공개된 룩북에서는 따뜻하고 부드러운 파스텔톤, 차분한 모노크롬 컬러로 극명하게 상반된 분위기를  연출하며 각기 다른 유니섹스 스타일을 선보였다. 격식을 갖추되 포멀하진 않게 자연스럽게 떨어지는 핏과 힙한 디자인을 통해 앤듀만의 젠더뉴트럴 캐주얼룩을 연출한 것. 또한, 이번 시즌에도 패션업계에 불고 있는 ‘필(必)환경’  트렌드에 따라 그린슈머들을 사로잡을 다양한 친환경적인 제품들을 주력으로 출시하며 지속가능한 패션을 실천할 계획이다. 버려진 페트병이나 플라스틱을 활용해 친환경 재생 섬유인 리사이클 페트(PET)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
 					</div>
 				</div>
 			</div>
-			<div class="content br_lookbook_view cont_items">
+			<div class="content br_lookbook_view cont_items" th:if="${lookbookDetailList != null}">
+
 				<div class="cont_head">
 					<h3>룩북 속 상품<span class="number">(9,999)</span></h3>
 					<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
@@ -283,95 +218,27 @@
 					</div>
 				</div>
 			</div>
-			<div class="content br_lookbook_view cont_others">
+			<div class="content br_lookbook_view cont_others" th:if="${otherLookbookList}">
 				<div class="cont_head">
 					<h3 class="subH1 t_c mb40">다른 룩북 보기</h3>
-					<button><span>전체보기</span></button>
+					<button onclick="cfnGoToLookbookList();"><span>전체보기</span></button>
 				</div>
 				<div class="cont_body">
 					<div class="area_slider">
 						<div class="swiper-container">
 							<div class="swiper-wrapper">
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img01.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2020 F/W COLLECTION 2020</p>
-										</div>
-									</a>
-								</div>
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img02.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2020 S/S COLLECTION</p>
-										</div>
-									</a>
-								</div>
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img03.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2019 F/W COLLECTION 2019 F/W COLLECTION</p>
-										</div>
-									</a>
-								</div>
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img04.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2019 S/S COLLECTION</p>
-										</div>
-									</a>
-								</div>
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img05.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2018 F/W COLLECTION</p>
-										</div>
-									</a>
-								</div>
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img06.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2018 S/S COLLECTION</p>
-										</div>
-									</a>
-								</div>
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img07.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2017 F/W COLLECTION</p>
-										</div>
-									</a>
-								</div>
-								<div class="swiper-slide">
-									<a href="">
-										<div class="thumb">
-											<img src="/images/pc/thumb/ev_list_img08.jpg" alt="">
-										</div>
-										<div class="txt">
-											<p class="title">2017 S/S COLLECTION 2017 S/S COLLECTION</p>
-										</div>
-									</a>
-								</div>
+								<th:block th:if="${otherLookbookList}" th:each="oneData, status : ${otherLookbookList}">
+									<div class="swiper-slide">
+										<a th:href="|javascript:cfnGoToLookbookDetail('${oneData.lookbookSq}','${oneData.brandCd}')|">
+											<div class="thumb">
+												<img th:src="${@environment.getProperty('domain.image')+oneData.sysFileNm}" alt="" style="height:307px;">
+											</div>
+											<div class="txt">
+												<p class="title" th:text="${oneData.title}">2020 F/W COLLECTION 2020</p>
+											</div>
+										</a>
+									</div>
+								</th:block>
 							</div>
 						</div>
 						<!-- Add Arrows -->
@@ -417,6 +284,20 @@
 
 	<script th:inline="javascript">
 /*<![CDATA[*/
+	var fnTest = function (){
+		console.log('18');
+	}
+	var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
+	var fnLookbookGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
+	$("#lookbookItemPop").modal("show");
+	$("#lookbookItemPop").find(".pd_img").attr('src',goodsImgUrl+'/'+obj1);
+	$("#lookbookItemPop").find(".itemBrand").text(obj2);
+	$("#lookbookItemPop").find(".itemName").text(obj3);
+	$("#lookbookItemPop").find(".itemPrice_original").text(obj4);
+	$("#lookbookItemPop").find(".itemPrice").text(obj5);
+	$("#lookbookItemPop").find(".itemPercent").text(obj6+'%');
+	$("#lookbookItemPop").find(".btn_default").attr('onclick','cfnGoToPage(_PAGE_GOODS_DETAIL+"'+obj7+'");');
+}
 	// 컨텐츠 호출
 	$(document).ready( function() {
 		/* 슬라이드 - 상단_LOOKBOOK */
@@ -437,7 +318,7 @@
 				el: '.br_lookbook_view.cont_visual .swiper-pagination',
 				clickable: true,
 			},
-		});
+		}, fnTest());
 
 		/* 슬라이드 - 룩북 속 상품 */
 		var togetherItemSwiper = new Swiper('.br_lookbook_view.cont_items .swiper-container', {

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

@@ -23,6 +23,7 @@
 		<div class="breadcrumb">
 			<ul>
 				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_home" id="brandLi" style="display: none;"></li>
 				<li class="bread_2depth">룩북</li>
 			</ul>
 		</div>
@@ -78,9 +79,13 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	let fnGetLookbookList = function (brandGroupNo){
-		let actionUrl = '/display/lookbook/main/list';
-		if (!gagajf.isNull(brandGroupNo)) actionUrl += '?multiBrandCd=' + brandGroupNo;
+	var lookbookGb = [[${lbInfo.lookbookGb}]];
+	var brandCd = [[${lbInfo.brandCd}]];
+	var navBrandNm = "";
+
+	let fnGetLookbookList = function (lookbookGb, brandGroupNo){
+		let actionUrl = '/display/lookbook/main/list?lookbookGb='+lookbookGb;
+		if (!gagajf.isNull(brandGroupNo)) actionUrl += '&multiBrandCd=' + brandGroupNo;
 
 		$.getJSON(actionUrl
 			, function (result, status){
@@ -120,6 +125,8 @@
 							tag2 += '		</div>';
 							tag2 += '	</a>';
 							tag2 += '</li>';
+							navBrandNm = item.brandNm;
+							$("#brandLi").text(navBrandNm);
 						});
 						tag2 += '</ul>';
 
@@ -144,12 +151,17 @@
 			multiBrandCd.push($(this).val());
 		});
 
-		fnGetLookbookList(multiBrandCd);
+		fnGetLookbookList(lookbookGb,multiBrandCd);
 	}
 
 	$(document).ready(function() {
 		//$("#container .wrap .content .cont_body .event_list .event_top .ui_row .count").find('span').text(totalCnt.addComma());
-		fnGetLookbookList();
+		fnGetLookbookList(lookbookGb,brandCd);
+
+		if(lookbookGb=='BL'){
+			$("#brandBox").hide();
+			$("#brandLi").show();
+		}
 	});
 
 /*]]>*/

+ 17 - 22
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -36,24 +36,22 @@
 									<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
 										<div class="swiper-slide">
 											<th:block th:if="${ContentsData.imgPath1!=null && ContentsData.imgPath1!=''}">
-												<th:block th:if="${ContentsData.strVar1!=null && ContentsData.strVar1!='' }">
-													<div class="txtWrap">
-														<th:block th:if="${ContentsData.strVar5!=null && ContentsData.strVar5!=''}">
-															<p class="vrt_txt" th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></p>
-															<p class="vrt_txt" th:if="${ContentsData.strVar5!='P'}">EVENT</p>
-														</th:block>
-														<dl th:class="${ContentsData.strVar7=='BLACK'?'':'w'}">
-															<dt th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></dt>
-															<dt th:if="${ContentsData.strVar5!='P'}" >EVENT</dt>
-															<dd th:text="${ContentsData.strTitle1}"></dd>
-															<!--<dd>NEW ARRIVAL</dd>-->
-															<dd class="txt_xs" th:text="${ContentsData.subText1}"></dd>
-														</dl>
-														<button type="button" class="btn"><span>자세히 보기</span></button>
-													</div>
-													<!--<img src="/images/pc/thumb/main_visual01.jpg" alt="">-->
-													<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
-												</th:block>
+												<div class="txtWrap">
+													<th:block th:if="${ContentsData.strVar5!=null && ContentsData.strVar5!=''}">
+														<p class="vrt_txt" th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></p>
+														<p class="vrt_txt" th:if="${ContentsData.strVar5!='P'}">EVENT</p>
+													</th:block>
+													<dl th:class="${ContentsData.strVar7=='BLACK'?'':'w'}">
+														<dt th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></dt>
+														<dt th:if="${ContentsData.strVar5!='P'}" >EVENT</dt>
+														<dd th:text="${ContentsData.strTitle1}"></dd>
+														<!--<dd>NEW ARRIVAL</dd>-->
+														<dd class="txt_xs" th:text="${ContentsData.subText1}"></dd>
+													</dl>
+													<button type="button" class="btn"><span>자세히 보기</span></button>
+												</div>
+												<!--<img src="/images/pc/thumb/main_visual01.jpg" alt="">-->
+												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
 											</th:block>
 										</div>
 									</th:block>
@@ -405,9 +403,6 @@
 	<!-- End Of Main Contents -->
 	</div>
 </div>
-	<link rel="stylesheet" type="text/css" href="/ux/pc/css/main.css" />
-	<link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 
@@ -701,7 +696,7 @@ var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container',
 	loop: true,
 	effect: 'fade',
 	autoplay: {
-		delay: 10000,
+		delay: 5000,
 		disableOnInteraction: false,
 	},
 	pagination: {

+ 4 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -274,8 +274,10 @@
 	<!-- //상품썸네일 크게보기 팝업 -->
 	
 	<!-- **************** 개별상품 상세정보 팝업 **************** -->
-	
- 
+
+
+	<!-- 바로구매 장바구니 등록 정보 저장을 위한 form -->
+	<form id="directOrderForm" method="POST" action="/order/noMember"></form>
 </div>
  
 <script th:inline="javascript">

+ 3 - 5
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailDeliveryFormWeb.html

@@ -31,8 +31,6 @@
 						<td>
 							<th:block th:if="${goodsInfo.quikDelvYn = 'Y'}" >총알배송(오전 10시까지 주문 시)</th:block>
 							<th:block th:unless="${goodsInfo.quikDelvYn = 'Y'}" >일반배송</th:block>
-							
-							 
 						</td>
 					</tr>
 					<tr>
@@ -40,9 +38,9 @@
 							배송비
 						</th>
 						<td>
-							<th:block th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>원
+							<th:block th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
+							<th:block th:if="${goodsInfo.delvFee > 0}" th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>원
 							<th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
-							<th:block  th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
 						</td>
 					</tr>
 					<tr>
@@ -141,7 +139,7 @@
 							신발, 그릇류의 박스포장을 포함, 상품이 판매할 수 없게 훼손 된 경우(신발박스 등의 파손, 박스포장 위 송장 부착, 박스 훼손/파손/찢어짐, 택 분실 등)
 						</td>
 					</tr>
-					<tr th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null}">
+					<tr th:if="${deliveryInfo != null and deliveryInfo.delvFeeCd != null and not #strings.isEmpty(deliveryInfo.note)}">
 						<th>
 							기타사항
 						</th>

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

@@ -627,10 +627,10 @@
 								<div class="swiper-slide" th:each="lookbook, status : ${lookbookList}">
 									<div class="page">
 										<div class="pic">
-											<span class="thumb" style="background-image:url('/images/pc/thumb/tmp_pdLookbook1.jpg');"></span>
+											<span class="thumb" th:style="${'background-image:url(' + imgUrl+ lookbook.sysFileNm+');'}"></span>
 											<!-- 상품피커 -->
 											<th:block th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}"
-														th:each="lookbookGoods, status : ${lookbook.lookbookGoodsList}">
+														th:each="lookbookGoods, goodsStatus : ${lookbook.lookbookGoodsList}">
 											<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
 												<button type="button"><span class="ico ico_picker"></span></button>
 												<div class="pick_descr">

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

@@ -15,7 +15,7 @@
  *******************************************************************************
  -->
 <!-- 상품리뷰 리스트 내용 -->
- <div class="pd_review">
+ <div class="pd_review" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<!-- 등록리뷰 없을 시 -->
 	<div class="area_rv_empty" th:if="${reviewList == null or reviewList.empty}">
 		<div class="txt_box">
@@ -339,10 +339,9 @@
 					</th:block>
 					</th:block>
 				</li>
-				
 			</ul>
 			<!-- 포토영상 게시글 최대 7개 & 버튼노출 -->
-			<th:block th:if="${#lists.size(photoReviewList) >= 1}"> <!-- 나중에 8로 수정 -->
+			<th:block th:if="${#lists.size(photoReviewList) >= 8}"> <!-- 나중에 8로 수정 -->
 			<button type="button" id="btn_more_photoreview" th:onclick="cfGoodsReviewPhoto([[${goodsInfo.goodsCd}]])" ><span>더 보기</span></button>
 			<!-- //포토영상 게시글 최대 7개 & 버튼노출 -->
 			</th:block>
@@ -351,7 +350,7 @@
 	<div class="area_rv_all">
 	<form id="goodsReviewForm" name="goodsReviewForm" action="#" th:action="@{'/goods/review/list'}">
 	<input type="hidden" name="pageNo" value ="1"/>
-	<input type="hidden" name="pageSize" value ="1"/>
+	<input type="hidden" name="pageSize" value ="20"/>
 	<input type="hidden" name="goodsCd" th:value ="${goodsInfo.goodsCd}"/>
 	<input type="hidden" name="goodsType" th:value ="${goodsInfo.goodsType}"/>
 	<input type="hidden" name="reviewScore" />
@@ -365,7 +364,7 @@
 				<div class="select_custom sort_opt1">
 					<div class="combo">
 						<div class="select">평점 전체<input type="hidden" name="selScore" value=""/></div>
-						<ul class="list" onclick="jfReviewSearch();" >
+						<ul class="list" onclick="fnReviewSearch();" >
 							<!-- 선택처리 class="selected" -->
 							<li class="selected" >평점 전체<input type="hidden" name="selScore" value=""/></li> 
 							<li>5점&nbsp;&starf;&starf;&starf;&starf;&starf;<input type="hidden" name="selScore" value="5"/></li>
@@ -384,12 +383,12 @@
 						<th:block th:unless="${(goodsInfo.selfGoodsYn == 'Y')}">
 						<div class="select">옵션 전체<input type="hidden" name="selOption" value=""/></div>
 						</th:block>
-						<ul class="list" onclick="jfReviewSearch();">
+						<ul class="list" onclick="fnReviewSearch();">
 							<!-- 선택처리 class="selected" -->
 							<li class="selected" th:text="${(goodsInfo.selfGoodsYn == 'Y')? '사이즈 전체' :'옵션 전체'}">사이즈 전체</li> 
 							<li th:each="reviewOption, status : ${reviewOptionList}" >
-							<th:block th:text="${reviewOption.optCd2}"></th:block>
-							<input type="hidden" name="selOption" th:value="${reviewOption.optCd2}"/>
+							<th:block th:text="${reviewOption.optCd}"></th:block>
+							<input type="hidden" name="selOption" th:value="${reviewOption.optCd}"/>
 							</li>
 						</ul>
 					</div>
@@ -397,7 +396,7 @@
 				<div class="select_custom sort_opt3" th:if="${reviewHeightList != null and !reviewHeightList.empty}">
 					<div class="combo">
 						<div class="select">키 전체<input type="hidden" name="selHeight" value=""/></div>
-						<ul class="list" onclick="jfReviewSearch();">
+						<ul class="list" onclick="fnReviewSearch();">
 							<!-- 선택처리 class="selected" -->
 							<li class="selected">키 전체<input type="hidden" name="selHeight" value=""/></li> 
 							<li th:each="reviewHeight, status : ${reviewHeightList}" >
@@ -410,7 +409,7 @@
 				<div class="select_custom sort_opt4" th:if="${reviewWeightList != null and !reviewWeightList.empty}">
 					<div class="combo">
 						<div class="select">몸무게 전체<input type="hidden" name="selWeight" value=""/></div>
-						<ul class="list" onclick="jfReviewSearch();">
+						<ul class="list" onclick="fnReviewSearch();">
 							<!-- 선택처리 class="selected" -->
 							<li class="selected">몸무게 전체<input type="hidden" name="selWeight" value=""/></li> 
 							<li th:each="reviewWeight, status : ${reviewWeightList}" >
@@ -442,7 +441,7 @@
 				</p>
 			</div>
 			<div class="btn_box" th:if="${reviewCount> 0}">
-				<button type="button" class="btn btn_default" onclick="jfReviewSearchInit();"><span>선택한 조건 초기화</span></button>
+				<button type="button" class="btn btn_default" onclick="fnReviewSearchInit();"><span>선택한 조건 초기화</span></button>
 			</div>
 		</div>
 		<!-- //나열조건결과 없을 때 노출 내용 -->
@@ -591,7 +590,7 @@
 	}
 	
 	// 상품평 검색조건 클릭시
-	var jfReviewSearch = function(){
+	var fnReviewSearch = function(){
 		let reviewScore = $('#goodsReviewForm').find('.select_custom.sort_opt1').find('.select input[name=selScore]').val();
 		let reviewOption = $('#goodsReviewForm').find('.select_custom.sort_opt2').find('.select input[name=selOption]').val();
 		let reviewHeight = $('#goodsReviewForm').find('.select_custom.sort_opt3').find('.select input[name=selHeight]').val();
@@ -618,7 +617,7 @@
 	}
 	
 	// 상품평 초기화
-	var jfReviewSearchInit = function(){
+	var fnReviewSearchInit = function(){
 		
 		$('#goodsReviewForm').find('.select_custom.sort_opt1').find('.list li').eq(0).trigger('click')
 		$('#goodsReviewForm').find('.select_custom.sort_opt2').find('.list li').eq(0).trigger('click')

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

@@ -14,7 +14,7 @@
  * 1.0  2021.03.05   eskim		최초 작성
  *******************************************************************************
  -->
- <div class="full_popup_wrap" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+ <div class="full_popup_wrap" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<h5 class="sr-only">상품리뷰</h5>
 	<div class="btn_close">
 		<a href="javascript:void(0)" onclick="cfCloseFullLayer('layer_goods_review');">닫기버튼</a>

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

@@ -223,7 +223,7 @@
 		fnSetMypageLnbList(2);
 
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '취소 신청');
+		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '취소 신청');
 
 		// 셀렉트박스 활성화
 		$(".myOrderView .part_goods .select_custom.select_count").each(function() {
@@ -311,7 +311,7 @@
 		let jsonData = JSON.stringify(data);
 
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
+			cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
 		});
 	}
 	
@@ -364,7 +364,7 @@
 			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
 
 			// 추가배송비 영역 설정
-			if (refundPayAmt > 0) {
+			if (refundPayAmt < 0) {
 				refundPayAmt = spanRefundAmt;
 				$('#addDeliveryFee').css('display', '');
 				$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');

+ 77 - 55
src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html

@@ -287,7 +287,7 @@
 							</p>
 						</div>
 						<div class="btn_footer_area">
-							<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>취소</span></button>
+							<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_CRE_LIST)"><span>취소</span></button>
 							<button type="button" id="btn_confirm_exchange" class="btn btn_dark btn_md" onclick="fnExchange()"><span>교환 신청</span></button>
 						</div>
 					</div>
@@ -299,9 +299,8 @@
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	var isLogin = [[${isLogin}]];
-	//let ordNo = [[${oneData.ordNo}]];
 	let oneData = [[${oneData}]];
-	let isCustomer = true;
+	let isCustomer = false;
 	let addrGb = '';
 
 	$(document).ready(function() {
@@ -309,16 +308,16 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '교환 신청');
+		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '교환 신청');
 		
 		// 셀렉트박스 활성화
 		$('.select_custom').each(function() {
 			new sCombo($(this));
 		});
 
-		// 입점업체의 경우 회수방식 직접배송 처리
+		// 입점업체의 경우 회수방식 방문회수 처리
 		if (oneData.selfGoodsYn != 'Y') {
-			$('#direct').click();
+			$('#withdraw').click();
 			$('.wdGb').css('display','none');
 		}
 	});
@@ -402,39 +401,64 @@
 
 	// 교환 처리
 	var fnExchange = function() {
-		// TODO
-		// 교환신청 처리
-
 		let url = '/mypage/exchange';
 		let delvFeeCd = oneData.delvFeeCd;
 		let ordDtlNo = oneData.ordDtlNo;
 		let supplyCompCd = oneData.supplyCompCd;
 		let excDelvFee = oneData.excDelvFee;
 		let rtnDelvFee = oneData.rtnDelvFee;
+		let chgReason = $('#exchangeForm input[name=chgReason]').val();
+		
+		// 교환 사유 체크
+		if (gagajf.isNull(chgReason)) {
+			mcxDialog.alert('교환 사유를 선택해주세요.');
+			return false;
+		}
+
+		// 교환 상품 설정
+		let chgOrdDtlNoArr = [];
+		$.each($('#exchangeForm input[name=chgQty]'), function(idx, item) {
+			if (Number($(item).val()) > 0) {
+				chgOrdDtlNoArr.push($(item).attr('ordDtlNo'));
+			}
+		});
 
-		// 교환옵션 값 파싱 처리 예제
+		// 교환옵션 설정
 		let cancelReqList = [];
 		$.each($('#exchangeForm input[name=chgOptionList]'), function(idx, item) {
-			let json = $(item).val();
-			let jsonData = JSON.parse(json);
-			$.each(jsonData, function(index, chgOpt) {
-				let cancelReq = {};
-				cancelReq.ordDtlNo = ordDtlNo;
-				cancelReq.ordDtlItemSq = chgOpt.ordDtlItemSq;
-				cancelReq.delvFeeCd = delvFeeCd;
-				cancelReq.supplyCompCd = supplyCompCd;
-				cancelReq.excDelvFee = excDelvFee;
-				cancelReq.rtnDelvFee = rtnDelvFee;
-				cancelReq.ordChgOpt = chgOpt.chgOptCd2;
-				cancelReq.chgQty = chgOpt.chgQty;
-				cancelReqList.push(cancelReq);
-			});
+			if (chgOrdDtlNoArr.includes($(item).attr('ordDtlNo')) && !gagajf.isNull($(item).val())) {
+				let json = $(item).val();
+				let jsonData = JSON.parse(json);
+				$.each(jsonData, function (index, chgOpt) {
+					let cancelReq = {};
+					cancelReq.ordDtlNo = ordDtlNo;
+					cancelReq.ordDtlItemSq = chgOpt.ordDtlItemSq;
+					cancelReq.delvFeeCd = delvFeeCd;
+					cancelReq.supplyCompCd = supplyCompCd;
+					cancelReq.excDelvFee = excDelvFee;
+					cancelReq.rtnDelvFee = rtnDelvFee;
+					cancelReq.ordChgOpt = chgOpt.chgOptCd2;
+					cancelReq.chgQty = chgOpt.chgQty;
+					cancelReqList.push(cancelReq);
+				});
+			}
 		});
-		
+
+		// 교환 수량 및 변경 옵션 체크
+		if (chgOrdDtlNoArr.length > cancelReqList.length) {
+			mcxDialog.alert('교환하실 상품의 변경 옵션을 선택해주세요.');
+			return false;
+		} else if (chgOrdDtlNoArr.length < cancelReqList.length || chgOrdDtlNoArr.length == 0) {
+			mcxDialog.alert('교환하실 상품의 수량을 선택해주세요.');
+			return false;
+		}
+
+		// 교환 필요 데이터 설정
 		let data = {};
 		data.ordNo = oneData.ordNo;
 		data.isCustomer = isCustomer;
 		data.wdGb = $('#exchangeForm input[name=wdGb]:radio:checked').val();
+		data.wdInvoiceNo = $('#exchangeForm input[name=wdInvoiceNo]').val();
 		data.recipNm = $('#exchangeForm input[name=recipNm]').val();
 		data.recipPhnno = $('#exchangeForm input[name=recipPhnno]').val();
 		data.recipTelno = $('#exchangeForm input[name=recipTelno]').val();
@@ -454,11 +478,12 @@
 		data.chgerRtnMemo = $('#exchangeForm input[name=chgerRtnMemo]').val();
 		data.addPayAmt = 0;
 		data.cancelReqList = cancelReqList;
-		
+
 		let jsonData = JSON.stringify(data);
 
+		// 교환 처리
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			console.log(result);
+			cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
 		});
 	}
 
@@ -505,35 +530,32 @@
 
 	// 추가 배송비 계산
 	var fnAddCost = function() {
-		// 자사상품만 처리, 입점업체는 SCM에서 별도 처리
-		if (oneData.selfGoodsYn == 'Y') {
-			let addPayCost = 0;
-			let delvFee = oneData.delvFee;
-			let rtnDelvFee = oneData.rtnDelvFee;
-
-			// 교환 수량 체크
-			let qty = 0;
-			$.each($('#exchangeForm input[name=chgQty]'), function (idx, item) {
-				qty += Number($(item).val());
-			});
-
-			// 교환 수량이 있고 고객 귀책 사유 시 추가 배송비 계산
-			if (isCustomer && qty > 0) {
-				addPayCost = delvFee;
-
-				// 회수 요청 시 반품배송비 추가
-				if ($('#exchangeForm input[name=wdGb]:radio:checked').val() == 'W') {
-					addPayCost += rtnDelvFee;
-				}
+		let addPayCost = 0;
+		let delvFee = oneData.delvFee;
+		let rtnDelvFee = oneData.rtnDelvFee;
 
-				// 추가배송비 영역 설정
-				$('#addDeliveryFee').css('display', '');
-				$('#addPayCost').text(addPayCost.addComma() + '원');
-				$('#exchangeForm input[name=addPayCost]').val(addPayCost);
-			} else {
-				$('#addDeliveryFee').css('display', 'none');
-				$('#exchangeForm input[name=addPayCost]').val(0);
+		// 교환 수량 체크
+		let qty = 0;
+		$.each($('#exchangeForm input[name=chgQty]'), function (idx, item) {
+			qty += Number($(item).val());
+		});
+
+		// 교환 수량이 있고 고객 귀책 사유 시 추가 배송비 계산
+		if (isCustomer && qty > 0) {
+			addPayCost = delvFee;
+
+			// 회수 요청 시 반품배송비 추가
+			if ($('#exchangeForm input[name=wdGb]:radio:checked').val() == 'W') {
+				addPayCost += rtnDelvFee;
 			}
+
+			// 추가배송비 영역 설정
+			$('#addDeliveryFee').css('display', '');
+			$('#addPayCost').text(addPayCost.addComma() + '원');
+			$('#exchangeForm input[name=addPayCost]').val(addPayCost);
+		} else {
+			$('#addDeliveryFee').css('display', 'none');
+			$('#exchangeForm input[name=addPayCost]').val(0);
 		}
 	}
 
@@ -558,7 +580,7 @@
 			$('#exchangeForm input[name=recipBaseAddr]').val(recipBaseAddr);
 			$('#exchangeForm input[name=recipDtlAddr]').val(recipDtlAddr);
 			$('#exchangeForm input[name=delvMemo]').val(delvMemo);
-		} else {
+		} else if (addrGb == 'chger') {
 			let chgerAddr = recipBaseAddr + ' ' + recipDtlAddr + '\n';
 			chgerAddr += '<button type="button" class="btn btn_default btn_sm" onclick="fnChangeAddr(\'chger\');"><span>회수지 변경</span></button>';
 

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

@@ -238,7 +238,7 @@
 					</div>
 				</section>
 				<div class="btn_wrap">
-					<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>교환 취소</span></button>
+					<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_CRE_LIST)"><span>교환 취소</span></button>
 					<button tyep="submit" class="btn btn_primary submit_btn" onclick="fnExchange()"><span id="exchangeButton">교환 신청</span></button>
 				</div>
 			</div>
@@ -251,7 +251,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '교환 신청');
+		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '교환 신청');
 	});
 
 	// 교환 옵션 변경 팝업

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

@@ -113,10 +113,20 @@
 														<th:block th:if="${#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.giftLimitDay >= 0}">
 															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>
 														</th:block>
+
+														<!-- 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
+														<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35' or ordDtl.ordDtlStat == 'G013_40'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
+														</th:block>
 														
 														<!-- 리뷰 쓰기 버튼 -->
 														<th:block th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99' and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
-															<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+															<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+														</th:block>
+
+														<!-- 쇼핑백담기 버튼(구매확정) -->
+														<th:block th:if="${!#strings.isEmpty(ordDtl.recipBaseAddr) and ordDtl.ordDtlStat != 'G013_98' and ordDtl.ordDtlStat != 'G013_99'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>
 														</th:block>
 													</th:block>
 													<!-- 주문 -->
@@ -164,7 +174,7 @@
 	
 														<!-- 리뷰작성 버튼(구매확정) -->
 														<th:block th:if="${(ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60' or ordDtl.ordDtlStat == 'G013_70') and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == null}">
-															<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+															<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
 														</th:block>
 	
 														<!-- 쇼핑백담기 버튼(구매확정) -->
@@ -277,7 +287,10 @@
 									</tbody></table>
 							</div>
 						</th:block>
-						<h4 class="subH3">주문자/배송지 정보</h4>
+						<!-- 선물 -->
+						<h4 class="subH3" th:if="${oneData.giftPackYn == 'Y'}">주문자 정보</h4>
+						<!-- 주문 -->
+						<h4 class="subH3" th:unless="${oneData.giftPackYn == 'Y'}">주문자/배송지 정보</h4>
 						<div class="tbl type1">
 							<table>
 								<colgroup>
@@ -299,7 +312,30 @@
 											</div>
 										</td>
 									</tr>
-									<tr>
+									<!-- 선물 -->
+									<tr th:if="${oneData.giftPackYn == 'Y'}">
+										<th>
+											선물 받으실 분
+										</th>
+										<td>
+											<div class="single_line">
+												<ul>
+													<li><span th:text="${deliveryAddrInfo.recipNm}"></span></li>
+													<li><span th:text="${deliveryAddrInfo.recipPhnno}"></span></li>
+												</ul>
+											</div>
+										</td>
+									</tr>
+									<tr th:if="${oneData.giftPackYn == 'Y'}">
+										<th>
+											선물 메세지
+										</th>
+										<!-- TODO -->
+										<!-- 선물 메세지 처리 -->
+										<td></td>
+									</tr>
+									<!-- 주문 -->
+									<tr th:unless="${oneData.giftPackYn == 'Y'}">
 										<th>
 											배송지 정보
 										</th>
@@ -420,7 +456,8 @@
 										</dl>
 									</td>
 								</tr>
-								</tbody></table>
+								</tbody>
+							</table>
 						</div>
 						<div class="btn_footer_area">
 							<button type="button" class="btn btn_dark btn_md"><span>확인</span></button>

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

@@ -111,7 +111,7 @@
 						</div>
 						<div class="invalid">
 							<p class="txt">취소/교환/반품</p>
-							<p class="count"><span id="orderCrsCount" th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount}">0</span></p>
+							<p class="count"><span id="orderCreCount" th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount}">0</span></p>
 						</div>
 					</div>
 				</div>
@@ -200,10 +200,6 @@
 					<input type="hidden" name="ordNo"/>
 					<input type="hidden" name="ordDtlNo"/>
 				</form>
-				<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="get">
-					<input type="hidden" name="ordNo"/>
-					<input type="hidden" name="ordDtlNo"/>
-				</form>
 			</div>
 			<!-- // CONT-BODY -->
 		</div>
@@ -345,7 +341,7 @@
 			$('#shipPrepareCount').text(result.orderCount.shipPrepareCount);
 			$('#shippingCount').text(result.orderCount.shippingCount);
 			$('#shipCompleteCount').text(result.orderCount.shipCompleteCount);
-			$('#orderCrsCount').text(result.orderCount.cancelCount + result.orderCount.returnCount + result.orderCount.exchangeCount);
+			$('#orderCreCount').text(result.orderCount.cancelCount + result.orderCount.returnCount + result.orderCount.exchangeCount);
 		});
 	}
 
@@ -364,7 +360,6 @@
 	var fnCreateOrderList = function(param) {
 		let tag = '';
 		let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
-		console.log(param);
 
 		if (param.orderList != null && param.orderList.length > 0) {
 			$.each(param.orderList, function (idx, order) {
@@ -450,9 +445,19 @@
 							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>\n';
 						}
 
+						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
+						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35' || ordDtl.ordDtlStat == 'G013_40') {
+							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
+						}
+
 						// 리뷰 쓰기 버튼
 						if (!gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.ordDtlStat != 'G013_98' && ordDtl.ordDtlStat != 'G013_99' && ordDtl.reviewableYn == 'Y' && ordDtl.reviewSq == null) {
-							tag += '					<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
+							tag += '					<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" goodsCd="' + ordDtl.goodsCd + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
+						}
+
+						// 쇼핑백담기 버튼(구매확정)
+						if (!gagajf.isNull(ordDtl.recipBaseAddr) && ordDtl.ordDtlStat != 'G013_98' && ordDtl.ordDtlStat != 'G013_99') {
+							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>\n';
 						}
 					} else {
 						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
@@ -495,7 +500,7 @@
 
 						// 리뷰작성 버튼(배송중, 배송완료, 구매확정)
 						if ((ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55' || ordDtl.ordDtlStat == 'G013_60' || ordDtl.ordDtlStat == 'G013_70') && ordDtl.reviewableYn == 'Y' && ordDtl.reviewSq == null) {
-							tag += '					<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
+							tag += '					<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" goodsCd="' + ordDtl.goodsCd + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
 						}
 
 						// 쇼핑백담기 버튼(구매확정)

+ 7 - 15
src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html

@@ -319,7 +319,7 @@
 							</p>
 						</div>
 						<div class="btn_footer_area">
-							<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>취소</span></button>
+							<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_CRE_LIST)"><span>취소</span></button>
 							<button type="button" id="btn_refund_pop" class="btn btn_dark btn_md" onclick="fnReturn()"><span>반품 신청</span></button>
 						</div>
 					</div>
@@ -355,7 +355,7 @@
 		fnSetMypageLnbList(2);
 
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '반품 신청');
+		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 신청');
 
 		// 반품상품 수량 셀렉트박스 활성화
 		var goods_count_selecter = new sCombo('.myOrderView .part_goods .select_custom.select_count');
@@ -365,7 +365,7 @@
 
 		// 입점업체의 경우 회수방식 직접배송 처리
 		if (oneData.selfGoodsYn != 'Y') {
-			$('#direct').click();
+			$('#withdraw').click();
 			$('.wdGb').css('display','none');
 		}
 	});
@@ -381,14 +381,6 @@
 			return false;
 		}
 
-		// 반송 송장번호 체크
-		let wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
-		let wdInvoiceNo = $('#returnForm input[name=chgReason]').val();
-		if (wdGb == 'D' && gagajf.isNull(wdInvoiceNo)) {
-			mcxDialog.alert('직접 반송하신 송장번호를 입력해주세요.');
-			return false;
-		}
-
 		// 주문상세번호 및 반품 수량 설정
 		let ordDtlNoArr = [];
 		let cnclRtnReqQtyArr = [];
@@ -456,7 +448,7 @@
 		data.accountNm = $('#returnForm input[name=accountNm]').val();
 		data.bankCd = $('#returnForm input[name=bankCd]').val();
 		data.isCustomer = isCustomer;
-		data.wdGb = wdGb;
+		data.wdGb = $('#returnForm input[name=wdGb]:radio:checked').val();
 		data.chgerNm = $('#chgerNm').text();
 		data.chgerZipcode = $('#returnForm input[name=chgerZipcode]').val();
 		data.chgerBaseAddr = $('#returnForm input[name=chgerBaseAddr]').val();
@@ -464,12 +456,13 @@
 		data.chgerPhnno = $('#returnForm input[name=chgerPhnno]').val();
 		data.chgerRtnMemo = $('#returnForm input[name=chgerRtnMemo]').val();
 		data.ordDtlNoArr = ordDtlNoArr;
+		data.wdInvoiceNo = $('#returnForm input[name=wdInvoiceNo]').val();
 		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
 
 		let jsonData = JSON.stringify(data);
 
 		gagajf.ajaxJsonSubmit(url, jsonData, function() {
-			cfnGoToPage(_PAGE_MYPAGE_CRS_LIST);
+			cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);
 		});
 	}
 
@@ -548,11 +541,9 @@
 					$('#addDeliveryFee').css('display', '');
 					$('#addPayCost').text(addDelvFee.addComma() + '원');
 					$('#returnForm input[name=addPayCost]').val(addDelvFee);
-					//addPayCost = addDelvFee;
 				} else {
 					$('#addDeliveryFee').css('display', 'none');
 					$('#returnForm input[name=addPayCost]').val(0);
-					//addPayCost = 0;
 				}
 
 				// 금액 설정
@@ -656,6 +647,7 @@
 		$('#returnForm input[name=chgerZipcode]').val(chgerZipcode);
 		$('#returnForm input[name=chgerBaseAddr]').val(chgerBaseAddr);
 		$('#returnForm input[name=chgerDtlAddr]').val(chgerDtlAddr);
+		$('#returnForm input[name=chgerRtnMemo]').val(delvMemo);
 		
 		$('#chgerNm').text(chgerNm);
 		$('#chgerPhnno').text(chgerPhnno);

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

@@ -318,7 +318,7 @@
 								</div>
 							</section>
 							<div class="btn_wrap">
-								<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>반품 취소</span></button>
+								<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_CRE_LIST)"><span>반품 취소</span></button>
 								<button tyep="submit" class="btn btn_primary submit_btn" onclick="fnReturn()"><span id="returnButton">반품 신청</span></button>
 							</div>
 						</div>
@@ -340,7 +340,7 @@
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '반품 신청');
+		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 신청');
 		
 		// 셀렉트박스 활성화
 		$('.select_custom.type1').each(function(index) {

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

@@ -77,7 +77,8 @@
 													<div class="gd_opt">
 														<div class="option_wrap">
 															<span class="title sr-only">주문 옵션</span>
-															<span class="option">[[${reviewInfo.optCd1}]]K&nbsp;/&nbsp;[[${reviewInfo.optCd2}]]</span>
+															<div id="optionDiv"><span class="option"></span></div>
+															
 														</div>
 													</div>
 												</div>
@@ -575,6 +576,14 @@ var fnChooseFile = function(obj) {
 }
 
 $(document).ready(function() {
+	if (reviewList.goodsType == 'G056_S') {
+		$.each(reviewList.colorNmArr, function(index, option) {
+			$("#optionDiv").append('<span class="option">'+reviewList.itemNmArr[index] + ' / ' + option + ' / ' + reviewList.optCd2Arr[index]+'</span>');
+		});
+	}else{
+		$(".option").append(reviewList.optCd1+"&nbsp;/&nbsp;"+reviewList.optCd2);
+	}
+	
 	 if(reviewStat=='u'){
 		 var reviewScore = reviewList.score -1;
 		 $("#score").val(reviewScore);

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

@@ -76,14 +76,14 @@
 									</ul>
 								</div>																					
 							</div>
-							<div class="nodata" id="nodata1">
+							<div class="nodata" id="nodata1" style="display:none;">
 								<div class="txt_box">
 									<p>
 										작성 가능한 리뷰가 없습니다.<br>
 									</p>
 								</div>
 							</div>
-							<div class="nodata" id="nodata2">
+							<div class="nodata" id="nodata2" style="display:none;">
 								<div class="txt_box">
 									<p>
 										작성한 리뷰가 없습니다.<br>
@@ -152,6 +152,7 @@
 		$('#nodata2').hide();
 		
 		$('#reviewList').html('');
+
 		
 		if (result.dataList1 != null && result.dataList1.length > 0) {
 			$.each(result.dataList1, function(idx, item) {
@@ -180,7 +181,15 @@
 				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>     ';
+				if (item.goodsType =='G056_S') {
+					$.each(item.colorNmArr, function (index2, option) {
+						html += '							<span class="option">' + item.itemNmArr[index2] + ' / ' + option + ' / ' + item.optCd2Arr[index2] + '</span>\n';
+					})
+				}else{
+					html += '							<span class="option">'+item.optCd1+'&nbsp;/&nbsp;'+item.optCd2+'</span>     ';
+				}
+				
+				
 				html += '						</div>                                                                                            ';
 				html += '					</div>                                                                                                ';
 				html += '				</div>                                                                                                    ';
@@ -188,7 +197,7 @@
 				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 += '					<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>                                                                                                            ';

+ 5 - 3
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -108,7 +108,7 @@
 										<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
 									</p>
 									<p id="vipGrade" style="display: none;">
-										<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
+										다음달에<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
 									</p>
 								</div>
 							</div>
@@ -223,7 +223,7 @@
 										<p>최대 2만원 할인</p>
 									</td>
 									<td>
-										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="10% 할인 쿠폰"></div>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="15% 할인 쿠폰"></div>
 										<p>최대 1만원 할인</p>
 									</td>
 									<td>
@@ -231,7 +231,7 @@
 										<p>최대 1만원 할인</p>
 									</td>
 									<td>
-										<div class="cou_img"><img src="/images/pc/ico_coupon_15.png" alt="15% 할인 쿠폰"></div>
+										<div class="cou_img"><img src="/images/pc/ico_coupon_10.png" alt="10% 할인 쿠폰"></div>
 										<p>최대 1만원 할인</p>
 									</td>
 								</tr>
@@ -251,12 +251,14 @@
 								<li>주문 취소/반품 건에 대한 결제금액은 등급산정에서 제외됩니다.</li>
 								<li>구매금액은 구매확정건에 대한 순수주문금액(할인쿠폰, 스타일포인트, 배송비, 취소/반품 내역을 제외한 실결제금액)을 의미합니다.</li>
 								<li>신규회원 한정 할인쿠폰을 제외한 회원등급 쿠폰은 매월 1일 다운로드 가능합니다.</li>
+								<li>입점상품은 적용 불가 합니다.</li>
 							</ul>
 							<p class="tit">생일쿠폰 안내사항</p>
 							<ul>
 								<li>등급 별 생일 쿠폰은 생일 당월 1일부터 말일까지 다운로드 가능합니다. (생일 당월의 기준은 회원정보 내 생년월일 정보를 기준으로 합니다.)</li>
 								<li>쿠폰이 지급되는 당월 말일까지 사용 가능합니다.</li>
 								<li>쿠폰 사용가능기간 내 미사용 시 소멸됩니다.</li>
+								<li>입점상품은 적용 불가 합니다.</li>
 							</ul>
 						</div>
 					</div>

+ 104 - 54
src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html

@@ -131,7 +131,7 @@
 									</table>
 								</div>
 							</div>
-							<button type="button" class="btn btn_primary"><span>출석 체크</span></button>
+							<button type="button" class="btn btn_primary" onclick="fnAttendEntry()"><span>출석 체크</span></button>
 						</div>
                         <div class="event_benefit">
                             <p class="title">출석 일수에 따라 달라지는 혜택</p>
@@ -170,23 +170,24 @@
                 <div class="cont_head">
                     <div>
                         <h4>다른 이벤트 보기</h4>
-                        <a href="">전체보기</a>
+                        <a href="javascript:void(0);" th:if="${planInfo.planGb == 'E'}" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">전체보기</a>
                     </div>
                 </div>
                 <div class="cont_body">
                     <div class="swiper-container">
                         <div class="swiper-wrapper">
+                           <th:block th:each="PlanData, PlanStat : ${planList}">
                             <div class="swiper-slide">                   
-                                <a href="">
+                                <a th:onclick="cfnGoToPlanDetail([[${PlanData.planSq}]])">
                                     <div class="thumb">
-                                        <img src="/images/pc/thumb/ev_list_img06.jpg" alt="스타일24만의 스타일로, tbj 하이 스타일링">
+                                        <img th:src="${@environment.getProperty('upload.image.view')+PlanData.mainImg}" alt="${PlanData.planNm}">
                                     </div>
                                     <div class="txt">
-                                        <span class="brand">BUCKAROO</span>
-                                        <p class="tit">스타일24만의 스타일로, TBJ 하이 스타일링</p>
+                                        <p class="tit" th:text="${PlanData.planNm}"></p>
                                     </div>
                                 </a>
                             </div>
+                            </th:block>   
                         </div>
                     </div>
                     <div class="swiper-button-prev"></div>
@@ -199,85 +200,134 @@
 </div>
 <script th:inline="javascript">
 let today = new Date();   
+let year = today.getFullYear();
 let date = today.getDate();
-let month = [[${month}]];
-
+let month =today.getMonth()+1;
+let calendar = [[${month}]];
+let planInfo = [[${planInfo}]];
+var custAttendList = [[${custAttendList}]];
 var appendHtml = function () {
-	$.each(month, function(idx, item)  { 
-		html = '';
-		html += '<tr>';
+	$("#monthTbody").html('');
+	$.each(calendar, function(idx, item)  { 
+		
+		html = '<tr>\n';
 		
 		if (item.sun!=null && item.sun!='') {
-			html += '	<td>';
-			html += '		<div class="date">'+item.sun+'</div>';
-			html += '	</td>	';
+			html += '	<td id="td_'+item.sun+'">\n';
+			html += '		<div class="date" id="'+item.sun+'">'+item.sun+'</div>\n';
+			html += '	</td>\n	';
 		}else{
-			html += '	<td>';
-			html += '		<div class="date"></div>';
-			html += '	</td>	';
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
 		}
+		
 		if (item.mon!=null && item.mon!='') {
-			html += '	<td>';
-			html += '		<div class="date">'+item.mon+'</div>';
-			html += '	</td>	';
+			html += '	<td id="td_'+item.mon+'">\n';
+			html += '		<div class="date" id="'+item.mon+'">'+item.mon+'</div>\n';
+			html += '	</td>\n	';
 		}else{
-			html += '	<td>';
-			html += '		<div class="date"></div>';
-			html += '	</td>	';
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
 		}
 		if (item.tue!=null && item.tue!='') {
-			html += '	<td>';
-			html += '		<div class="date">'+item.tue+'</div>';
-			html += '	</td>	';
+			html += '	<td id="td_'+item.tue+'">\n';
+			html += '		<div class="date"  id="'+item.tue+'">'+item.tue+'</div>\n';
+			html += '	</td>\n	';
 		}else{
-			html += '	<td>';
-			html += '		<div class="date"></div>';
-			html += '	</td>	';
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
 		}
 		if (item.wed!=null && item.wed!='') {
-			html += '	<td>';
-			html += '		<div class="date">'+item.wed+'</div>';
-			html += '	</td>	';
+			html += '	<td id="td_'+item.wed+'">\n';
+			html += '		<div class="date" id="'+item.wed+'">'+item.wed+'</div>\n';
+			html += '	</td>\n	';
 		}else{
-			html += '	<td>';
-			html += '		<div class="date"></div>';
-			html += '	</td>	';
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
 		}
 		if (item.thu!=null && item.thu!='') {
-			html += '	<td>';
-			html += '		<div class="date">'+item.thu+'</div>';
-			html += '	</td>	';
+			if (item.thu == item1.entryDt) {
+			html += '	<td id="td_'+item.thu+'">\n';
+			html += '		<div class="date" id="'+item.thu+'">'+item.thu+'</div>\n';
+			html += '	</td>\n	';
 		}else{
-			html += '	<td>';
-			html += '		<div class="date"></div>';
-			html += '	</td>	';
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
 		}
 		if (item.fri!=null && item.fri!='') {
-			html += '	<td>';
-			html += '		<div class="date">'+item.fri+'</div>';
-			html += '	</td>	';
+			html += '	<td id="td_'+item.fri+'">\n';
+			html += '		<div class="date" id="'+item.fri+'">'+item.fri+'</div>\n';
+			html += '	</td>\n	';
 		}else{
-			html += '	<td>';
-			html += '		<div class="date"></div>';
-			html += '	</td>	';
+			html += '	<td>\n';
+			html += '		<div class="date" ></div>\n';
+			html += '	</td>\n	';
 		}
 		if (item.sat!=null && item.sat!='') {
-			html += '	<td>';
-			html += '		<div class="date">'+item.sat+'</div>';
-			html += '	</td>	';
+			html += '	<td id="td_'+item.sat+'">\n';
+			html += '		<div class="date" id="'+item.sat+'">'+item.sat+'</div>\n';
+			html += '	</td>\n	';
 		}else{
-			html += '	<td>';
-			html += '		<div class="date"></div>';
-			html += '	</td>	';
+			html += '	<td>\n';
+			html += '		<div class="date"></div>\n';
+			html += '	</td>\n	';
 		}
 		
-		html += '</tr>'
+		html += '</tr>\n'
 		$("#monthTbody").append(html);
+	
 	})    
 } 
+
+
+var fnAttendEntry = function () {
+	if (!cfCheckLogin()) {
+		mcxDialog.alert("로그인 후 참여 가능합니다.");
+		return false;
+	}
+	
+	let data = {planSq : planInfo.planSq};
+	let jsonData = JSON.stringify(data);
+	gagajf.ajaxJsonSubmit('/planning/event/attend/entry', jsonData, fnInfoConfirmCallBack);
+	
+}
+
+var fnInfoConfirmCallBack = function(result) {
+	mcxDialog.alert(result.msg);
+	custAttendList = result.custAttendList; 
+	
+	$.each(custAttendList, function(idx, item)  {
+		if(item.entryDt == date){
+			$("#td_"+date).attr("class","complete");
+		}else{
+			
+		}
+	}) 
+	
+	appendHtml();
+};
+
 $(document).ready(function() {
+	if (!cfCheckLogin()) {
+		$(".day").html("<span>0</span>일");
+	}
 	 
 	appendHtml();
+	$("#td_"+date).attr("class","today");
+	$.each(custAttendList, function(idx, item)  {
+		if(item.entryDt == date){
+			$("#td_"+date).attr("class","complete");
+		}else{
+			
+		}
+	}) 
+	
+	$(".title").html("<strong>"+month+"월</strong> 출석체크");
 	
 	//공유 버튼 토글 
 	$("button[data-name=openShare]").on("click", function(){

+ 28 - 22
src/main/webapp/WEB-INF/views/web/popup/RefundAccountAddPopupFormWeb.html

@@ -80,7 +80,7 @@
 
 <script th:inline="javascript">
 	let ordNo = [[${ordNo}]];
-	let isValid;
+	let isValid = false;
 
 	$(document).ready( function() {
 		var bank_selector = new sCombo('.select_custom.select_bank');
@@ -88,27 +88,33 @@
 
 	// 계좌인증 버튼 클릭 이벤트
 	$('#confirmAccount').click(function() {
-		let url = '/mypage/account/check';
-		let accountNm = $('#refundAccountForm input[name=accountNm]').val();
-		let accountNo = $('#refundAccountForm input[name=accountNo]').val();
-		let bankCd = $('#refundAccountForm input[name=bankCd]').val();
-
-		let data = {};
-		data.accountNm = accountNm;
-		data.accountNo = accountNo;
-		data.bankCd = bankCd;
-		data.ordNo = ordNo;
-
-		let jsonData = JSON.stringify(data);
+		if (!isValid) {
+			let url = '/mypage/account/check';
+			let accountNm = $('#refundAccountForm input[name=accountNm]').val();
+			let accountNo = $('#refundAccountForm input[name=accountNo]').val();
+			let bankCd = $('#refundAccountForm input[name=bankCd]').val();
+			
+			let data = {};
+			data.accountNm = accountNm;
+			data.accountNo = accountNo;
+			data.bankCd = bankCd;
+			data.ordNo = ordNo;
+			
+			let jsonData = JSON.stringify(data);
+			
+			gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+				isValid = result.isValid;
+				if (isValid) {
+					mcxDialog.alert('계좌인증에 성공했습니다.');
 
-		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			isValid = result.isValid;
-			if (isValid) {
-				mcxDialog.alert('계좌인증에 성공했습니다.')
-			} else {
-				mcxDialog.alert('계좌정보를 다시 확인해주세요.');
-			}
-		});
+					// 계좌인증 성공 시 Disabled 처리
+					$('#refundAccountForm .select_custom.select_bank').attr('disabled', true);
+					$('#refundAccountForm input[name=accountNo]').attr('disabled', true);
+				} else {
+					mcxDialog.alert('계좌정보를 다시 확인해주세요.');
+				}
+			});
+		}
 	});
 
 	// 계좌등록 후 환불신청 버튼 클릭 이벤트
@@ -129,7 +135,7 @@
 			// 팝업 닫기
 			$(".close-modal").trigger("click");
 		} else {
-			mcxDialog.alert('계좌인증을 해주세요.');
+			mcxDialog.alert('계좌인증이 필요합니다.');
 		}
 	});
 </script>

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

@@ -2,7 +2,7 @@
 var fnSetMypageLnbList = function(lnbLvl) {
 	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_CRE_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';
@@ -63,7 +63,7 @@ var fnDecideOrder = function(param) {
 		return false;
 	}
 
-	mcxDialog.confirm('구매확정 처리를 하시겠습니까?', {
+	mcxDialog.confirm('구매확정 후에는 반품/교환이 불가합니다. 구매확정하시겠습니까?', {
 		cancelBtnText: "취소",
 		sureBtnText: "확인",
 		sureBtnClick: function(){
@@ -90,11 +90,9 @@ var fnDecideOrder = function(param) {
 var fnCreateReview = function(param) {
 	let ordNo = $(param).attr('ordNo');
 	let ordDtlNo = $(param).attr('ordDtlNo');
+	let goodsCd = $(param).attr('goodsCd');
 
-	$('#reviewForm input[name=ordNo]').val(ordNo);
-	$('#reviewForm input[name=ordDtlNo]').val(ordDtlNo);
-	
-	document.reviewForm.submit();
+	fnReviewCreate(ordNo, ordDtlNo, goodsCd);
 }
 
 // 장바구니 담기 버튼 클릭 이벤트
@@ -243,50 +241,6 @@ var fnChangeDeliveryAddr = function(param) {
 	}
 }
 
-// 배송지추가 팝업열기
-//$(document).on('click','#btn_addrAdd_pop',function(e){
-//	$("#adrsAddPop").modal("show");
-//	return false;
-//});
-
-// 배송지수정 팝업열기
-//$(document).on('click','#btn_addrModify_pop',function(e){
-//	$("#adrsModifyPop").modal("show");
-//	return false;
-//});
-
-// 배송요청사항 팝업열기
-//$("#btn_rqstModify_pop").on("click", function(e){
-//	let data = {};
-//	data.delvMemo = $("input[name='delvMemo']").val();
-//
-//	$.ajax({
-//		type		: "POST",
-//		url 		: "/common/delvMemoChangePop",
-//		data		: JSON.stringify(data),
-//		dataType 	: "html",
-//		beforeSend 	: function(xhr, settings) {
-//			xhr.setRequestHeader("AJAX"			, "true");
-//			xhr.setRequestHeader('Accept'		, 'application/json');
-//			xhr.setRequestHeader('Content-Type'	, 'application/json');
-//			gagajf.showProgressbar(true);
-//		},
-//		success 	: function(result) {
-//			if (result != null) {
-//				$("#rqstModifyPop .modal-dialog .modal-content").html(result);
-//				$("#rqstModifyPop").modal("show");
-//			}
-//		}
-//	});
-//});
-
-// 회수지, 교환지, 배송지 선택 처리
-//var deliveryAddrInfoSet = function(temp) {
-//	// TODO
-//	// 배송지 변경 처리
-//	
-//}
-
 // 배송메모 설정 팝업
 var fnChangeDeliveryMemo = function() {
 	var data = {};
@@ -313,13 +267,6 @@ var fnChangeDeliveryMemo = function() {
 	});
 }
 
-// 배송메모 선택 처리
-//var fnChangeDelvMemo = function(delvMemo) {
-//	// TODO
-//	// 배송메모 변경 처리
-//	console.log(delvMemo);
-//}
-
 // 신용카드 전표 및 현금영수증 버튼 클릭 이벤트
 var fnReceipt = function(param) {
 	// TODO

+ 73 - 36
src/main/webapp/ux/mo/css/common_m.css

@@ -661,11 +661,15 @@ header {
   position: fixed;left: 0;top: 0;width: 100%;z-index: 80;
   position: sticky;left: 0;top: 0;width: 100%;transition: top 0.3s;/* background-color: #fff; */
 }
+header::after{content: '';display: block;clear: both;}
 header .htop {position: relative;height: 55px;-webkit-box-sizing: border-box;box-sizing: border-box;/*border: rgba(0, 0, 0, 0.1) solid 1px;*/ border-bottom: 1px solid rgba(0, 0, 0, 0.1); background-color: #fff;}
+header .htop:after {content: '';display: block; clear: both;}
 header #htopSub{border-bottom: 0px solid #e5e5e5;box-sizing: border-box;}
-header #htopSubs{border-bottom: 1px solid #000000;box-sizing: border-box;}
-header .htop h1 {display: inline-block;position: relative;height: 40px;line-height: 4.0rem;vertical-align: top;margin: 10px 0 0 10px;font-size: 1.8rem;color: #222;}
-header .htop h1 img {position: relative;top: 50%;left: 0;right: 0;transform: translate(0, -50%);margin: 0px 0;}
+header #htopSubs{border-bottom: 0px solid #000000;box-sizing: border-box;}
+header .htop h1 {display: inline-block;position: relative;width: 10.666rem;height: 100%;line-height: 4.5rem;vertical-align: middle;margin: 0px 0 0 2.0rem;font-size: 1.8rem;color: #222;}
+header .htop h1#htopTitle {display: inline-block;position: relative;max-width: 18rem;width: auto;height: 100%;line-height: 4.5rem;vertical-align: middle;padding: 0px 1.5rem 0px 0rem;font-size: 1.8rem;color: #222;}
+header .htop h1 a {height: 100%;width: 100%;display: block;}
+header .htop h1 img {position: absolute;top: 50%;left: 0;right: 0;transform: translate(0, -50%);margin: 0px 0;width: 10.666rem;height: auto;line-height: 1.6rem;vertical-align: middle;}
 header .htop .btn_back {margin: 10px 0 0 15px;width: 35px;height: 35px;}
 header .htop .btn_back span {display: block;width: 24px;height: 24px;margin: 0 auto;position: relative;}
 header .htop .btn_back span i {display: block;position: absolute;background: #222;-webkit-transition: all 0.3s ease-out;transition: all 0.3s ease-out;}
@@ -673,35 +677,52 @@ header .htop .btn_back span i.gl1 {left: 0;top: 6px;width: 12px;height: 2px;-web
 header .htop .btn_back span i.gl2 {left: 0;top: 50%;-webkit-transform: translateY(-50%);transform: translateY(-50%);width: 24px;height: 2px;}
 header .htop .btn_back span i.gl3 {left: 0;bottom: 6px;width: 12px;height: 2px;-webkit-transform: rotate(45deg);transform: rotate(45deg);}
 header .htop .btn_back:active span i {left: -20px;}
+
+
+header .htop .button_wrap {height: 5.5rem; float: right; padding: 1.6rem 0 0; margin: 0 2.5rem 0 0; box-sizing: border-box;}
+header .htop .button_wrap .search { margin:0 1.1666rem 0 0; }
+header .htop .button_wrap .search img{width: 2.0rem;}
+header .htop .button_wrap .store img{width: 1.6rem;}
+header .htop .button_wrap .store img:nth-child(1) { height: 2rem; }
+header .htop .button_wrap .store span { width: 2.1rem; height: 1.4rem; position: absolute; top: 1.2rem; right: 1.5rem; background: #fd4802; border-radius: 0.8rem; font-size: 0.8rem; color: #fff; line-height: 1.6rem;}
+
+
 header .subs {}
 
-header .btn_gnb {position: absolute;top: 0px;right: -45px;width: 35px;height: 35px;z-index: 10;}
+
+header .btn_gnb {position: absolute;top: 0px;right: -4.5rem;width: 3.5rem;height: 100%;z-index: 10;}
 header .btn_gnb span {display: block;width: 24px;height: 24px;margin: 0 auto;position: relative;}
-header .btn_gnb span i {display: block;position: absolute;left: 0;width: 24px;height: 2px;background: #222;-webkit-transition: all 0.15s ease-out;transition: all 0.15s ease-out;}
-header .btn_gnb span i.gl1 {top: 6px;}
-header .btn_gnb span i.gl2 {bottom: 6px;}
-header .btn_gnb.on span i {width: 24px;top: 10px;background: #222;}
-header .btn_gnb.on span i.gl1 {transform: rotate(45deg);-webkit-transform: rotate(45deg);}
-header .btn_gnb.on span i.gl2 {transform: rotate(-45deg);-webkit-transform: rotate(-45deg);}
-
-header .subs .btn_gnbs {position: absolute;top: 0px;right: -45px;width: 35px;height: 35px;z-index: 10;}
+header .btn_gnb span i {display: block;position: absolute;left: 0;width:100%;height: 100%;-webkit-transition: all 0.5s ease-out;transition: all 0.5s ease-out;}
+/* header .btn_gnb span i.gl1 {top: 6px;} */
+/* header .btn_gnb span i.gl2 {bottom: 6px;} */
+/* header .btn_gnb.on span i {width: 24px;top: 10px;background: #222;} */
+/* header .btn_gnb.on span i.gl1 {transform: rotate(45deg);-webkit-transform: rotate(45deg);} */
+/* header .btn_gnb.on span i.gl2 {transform: rotate(-45deg);-webkit-transform: rotate(-45deg);} */
+
+header .subs .btn_gnbs {position: absolute;top: 0px;right: -2.0rem;width: 3.5rem;height: 4.5rem;z-index: 10;}
+header .subs .btn_gnbs span i {display: block;position: absolute;left: 0;width: 100%;height: 100%;-webkit-transition: all 0.5s ease-out;transition: all 0.5s ease-out;}
+/* header .subs .btn_gnbs span {display: block;width: 24px;height: 24px;margin: 0 auto;position: relative;} */
+/* header .subs .btn_gnbs span i {display: block;position: absolute;left: 0;width: 24px;height: 2px;background: #222;-webkit-transition: all 0.15s ease-out;transition: all 0.15s ease-out;} */
 header .subs .btn_gnbs span {display: block;width: 24px;height: 24px;margin: 0 auto;position: relative;}
-header .subs .btn_gnbs span i {display: block;position: absolute;left: 0;width: 24px;height: 2px;background: #222;-webkit-transition: all 0.15s ease-out;transition: all 0.15s ease-out;}
-header .subs .btn_gnbs span i.gl1 {top: 6px;background: #222;}
-header .subs .btn_gnbs span i.gl2 {bottom: 6px;background: #222;}
-header .subs .btn_gnbs.on span i {width: 24px;top: 10px;background: #222;}
-header .subs .btn_gnbs.on span i.gl1 {transform: rotate(45deg);-webkit-transform: rotate(45deg);}
-header .subs .btn_gnbs.on span i.gl2 {transform: rotate(-45deg);-webkit-transform: rotate(-45deg);}
+header .subs .btn_gnbs span i {background: url(/images/mo/ico_btn_more.png) no-repeat;background-size: 1.3rem 0.733rem;background-position: 50% 50%;}
+/* header .subs .btn_gnbs span i.gl1 {top: 6px;background: #222;} */
+/* header .subs .btn_gnbs span i.gl2 {bottom: 6px;background: #222;} */
+/* header .subs .btn_gnbs.on span i {width: 24px;top: 10px;background: #222;} */
+header .subs .btn_gnbs.on span i {transform: rotate(-180deg);-webkit-transform: rotate(-180deg);}
+/* header .subs .btn_gnbs.on span i.gl1 {transform: rotate(45deg);-webkit-transform: rotate(45deg);} */
+/* header .subs .btn_gnbs.on span i.gl2 {transform: rotate(-45deg);-webkit-transform: rotate(-45deg);} */
 
 header.hide {display: none;}
 header.main .htop {border: rgba(255, 255, 255, 0.2) solid 1px;background-color: #222222;}
 header.main .htop.bright {background-color: transparent;}
-header.main .htop h1 {margin: 10px 0 0 20px;width: 95px;}
-header.main .btn_gnb span i {background: #fff;}
-header.main .btn_gnb.on span i {background: #222;}
-
-header .hmenu {position: absolute;left: 0;bottom: 100%;background-color: rgba(0, 0, 0, 0.5);padding: 0 0 0 0;-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;height: 100vh;-webkit-transition: all 0 ease-out;transition: all 0 ease-out;}
-header .hmenu .inner {padding: 0 25px;background-color: #fff;position: relative;top: 0;-webkit-transition: all 0.5s ease-out;transition: all 0.5s ease-out;}
+/* header.main .htop h1 {margin: 10px 0 0 20px;width: 95px;} */
+header.main .btn_gnb span i {background: url(/images/mo/ico_btn_more_w.png) no-repeat;background-size: 1.3rem 0.733rem;background-position: 50% 50%;}
+header.main .btn_gnb.on span i {transform: rotate(-180deg);-webkit-transform: rotate(-180deg);}
+/* header.main .btn_gnb span i {background: #fff;} */
+/* header.main .btn_gnb.on span i {background: #222;} */
+
+header .hmenu {position: absolute;left: 0;bottom: 100%;background-color: rgba(0, 0, 0, 0.0);padding: 0 0 0 0;-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;height: 100vh;-webkit-transition: all 0 ease-out;transition: all 0 ease-out;}
+header .hmenu .inner {padding: 0;background-color: #fff;position: relative;top: 0;-webkit-transition: all 0.5s ease-out;transition: all 0.5s ease-out;}
 header .hmenu.on {bottom: 0;}
 header .hmenu.on .inner {top: 100%;}
 header .hmenu .scrollWrap {height: calc(100vh - 50px);-webkit-box-sizing: border-box;box-sizing: border-box;overflow-y: auto;}
@@ -716,9 +737,12 @@ header .hmenu .tnb ul > li a{display: block; padding: 5px 0; color: #888; font-w
 header .hmenu .tnb ul > li a.on{color: #222; font-weight: 400; border-bottom: #9f7952 solid 2px;}
 */
 
-header .hmenu .bng{background: #ffffff; padding-top: 40px;}
-header .hmenu .bng .d1 > li{position: relative;}
-header .hmenu .bng .d1 > li > a{display: block; padding: 8px 0; font-size: 2.8rem; font-family: 'Lato'; color: #222;}
+header .hmenu .bng{background: #ffffff;}
+header .hmenu .bng .d1 > li{position: relative;height: 7.2rem;border-bottom: 0.1rem solid #eeeeee;}
+header .hmenu .bng .d1 > li > a{display: block;padding: 0 2.0rem;line-height: 7.2rem;font-size: 1.8rem;font-weight: 400; font-family: 'Lato'; color: #222;}
+header .hmenu .bng .d1 > li > a::after{content: '';display: block; clear:both;}
+header .hmenu .bng .d1 > li > a span{float: right;}
+header .hmenu .bng .d1 > li > a span img{opacity: 0.3;max-width: 8.333rem;max-height: 4.533rem;width: auto;height: auto;vertical-align: middle;}
 header .hmenu .bng .d1 > li.folder::before{content: ''; display: block; position: absolute; right: 5px; top: 15px; width: 1px; height: 12px; background-color: #222;}
 header .hmenu .bng .d1 > li.folder::after{content: ''; display: block; position: absolute; right: 0; top: 20px; width: 12px; height: 1px; background-color: #222;}
 header .hmenu .bng .d1 > li.folder.on::before{display: none;}
@@ -737,13 +761,13 @@ header .hmenu .bng .d3 > li{position: relative; padding-left: 15px;}
 header .hmenu .bng .d3 > li::before{content: ''; display: block; position: absolute; left: 2px; top: 15px; width: 4px; height: 4px; background-color: #999;}
 header .hmenu .bng .d3 > li > a{display: block; padding: 8px 0; font-size: 1.5rem; color: #222;}
 
-header .hmenu .bnb{background-color: #f5f5f5; margin: 30px -25px 0 -25px; padding: 30px 25px; position: relative;}
+header .hmenu .bnb{background-color: #f5f5f5; position: relative;}
 header .hmenu .bnb ul > li{position: relative;}
 header .hmenu .bnb ul > li::after{content: ''; display: block; position: absolute; right: 2px; top: 20px; width: 10px; height: 10px; border: #9f7952 solid; border-width: 1px 1px 0 0; -webkit-transform: translateY(-50%) rotate(45deg); transform: translateY(-50%) rotate(45deg);}
 header .hmenu .bnb ul > li > a{display: block; padding: 8px 0; font-size: 1.5rem; color: #9f7952;}
 
 
-header .hmenus {position: absolute;left: 0;bottom: 100%;background-color: rgba(0, 0, 0, 0.5);padding: 0 0 0 0;-webkit-box-sizing: border-box;box-sizing: border-box;width: 100vw;height: 100vh;-webkit-transition: all 0 ease-out;transition: all 0 ease-out;}
+header .hmenus {position: absolute;left: 0;bottom: 100%;background-color: rgba(0, 0, 0, 0.0);padding: 0 0 0 0;-webkit-box-sizing: border-box;box-sizing: border-box;width: 100vw;height: 100vh;-webkit-transition: all 0 ease-out;transition: all 0 ease-out;}
 header .hmenus .inner {padding: 0 25px;background-color: #fff;position: relative;top: 0;-webkit-transition: all 0.5s ease-out;transition: all 0.5s ease-out;}
 header .hmenus.on {bottom: 0;}
 header .hmenus.on .inner {top: 100%;}
@@ -759,7 +783,7 @@ header .hmenus .tnb ul > li a{display: block; padding: 5px 0; color: #888; font-
 header .hmenus .tnb ul > li a.on{color: #222; font-weight: 400; border-bottom: #9f7952 solid 2px;}
 */
 
-header .hmenus .bng{background: #ffffff; padding-top: 40px;}
+header .hmenus .bng{background: #ffffff;}
 header .hmenus .bng .d1 > li{position: relative;}
 header .hmenus .bng .d1 > li > a{display: block; padding: 8px 0; font-size: 2.8rem; font-family: 'Lato'; color: #222;}
 header .hmenus .bng .d1 > li.folder::before{content: ''; display: block; position: absolute; right: 5px; top: 15px; width: 1px; height: 12px; background-color: #222;}
@@ -780,12 +804,25 @@ header .hmenus .bng .d3 > li{position: relative; padding-left: 15px;}
 header .hmenus .bng .d3 > li::before{content: ''; display: block; position: absolute; left: 2px; top: 15px; width: 4px; height: 4px; background-color: #999;}
 header .hmenus .bng .d3 > li > a{display: block; padding: 8px 0; font-size: 1.5rem; color: #222;}
 
+header .hmenus .bng{position: relative; width:100%; height:100%;background:rgba(0,0,0,.0); z-index:600;}
+/* header .hmenus .bng .nav_box.active{visibility:visible;} */
+header .hmenus .bng .lap{position:absolute; top:0; left:0; padding:0; width:100%; background:#fff;}
+header .hmenus .bng .nav_list{min-height:15rem; max-height:40rem; overflow-y:auto;}
+/* header .hmenus .bng .nav_box .nav_close{position:absolute; bottom:-3.8rem; left:50%; width:1.6rem; height:1.6rem; background-image: url(/images/mo/ico_pop_cls_w.png); background-repeat:no-repeat; background-position:center center; font-size:0; text-indent:-999999px; background-size: contain; -webkit-transform:translateX(-50%); transform:translateX(-50%);} */
+header .hmenus .bng .nav_list {padding:0;}
+header .hmenus .bng .nav ul {}
+header .hmenus .bng .nav ul > li {}
+header .hmenus .bng .nav ul > li .daps1{display:block; font-size:1.4rem; color:#666; font-weight:300; line-height:5rem; border-bottom:1px solid #ddd;}
+header .hmenus .bng .nav ul > li .daps2 li > a{display:block; font-size:1.4rem; font-weight:300; color:#222; line-height:4rem;}
+header .hmenus .bng .nav ul > li .daps2 li.on > a{color:#fd4802; font-weight:500; line-height:5rem;}
+
 header .hmenus .bnb{background-color: #f5f5f5; margin: 30px -25px 0 -25px; padding: 30px 25px; position: relative;}
 header .hmenus .bnb ul > li{position: relative;}
 header .hmenus .bnb ul > li::after{content: ''; display: block; position: absolute; right: 2px; top: 20px; width: 10px; height: 10px; border: #9f7952 solid; border-width: 1px 1px 0 0; -webkit-transform: translateY(-50%) rotate(45deg); transform: translateY(-50%) rotate(45deg);}
 header .hmenus .bnb ul > li > a{display: block; padding: 8px 0; font-size: 1.5rem; color: #9f7952;}
 
 
+
 /* gnb */
 body.header-show .app .gnb{top: 50px;}
 .app .gnb {position: -webkit-sticky; position: sticky; top: 0px; padding-right: 50px; background-color: #000; z-index: 9; transition: top 0.3s; width: 100%;}
@@ -907,7 +944,7 @@ footer .collapse .infos > li.fn{clear: both; padding-left: 0;}
 footer .collapse .infos.on{padding: 0px 0px 20px 0; height: auto;}
 
 /* sub page slide nav */
-.lnb{padding: 1.46rem 2.0rem 1.3rem 2.0rem; border-bottom: #e5e5e5 solid 1px; box-sizing: border-box;}
+.lnb{padding: 1.46rem 2.0rem 1.0rem 2.0rem; border-bottom: #e5e5e5 solid 1px; box-sizing: border-box;}
 .lnb .swiper-wrapper{transform: translate3d(0px, 0px, 0px);}
 .lnb ul > li{width: auto; text-align: center;}
 .lnb ul > li button,
@@ -938,8 +975,8 @@ footer .collapse .infos.on{padding: 0px 0px 20px 0; height: auto;}
 /* page nav */
 .pnb ul{border-bottom: #e5e5e5 solid 1px;}
 .pnb ul::after{content: ''; display: block; clear: both;}
-.pnb ul > li{float: left; width: auto; padding: 0 2.6rem;}
-.pnb ul > li:first-child{padding: 0 2.6rem 0 2.0rem;}
+.pnb ul > li{float: left; width: auto; padding: 0 1.6rem;}
+.pnb ul > li:first-child{padding: 0 1.6rem 0 1.0rem;}
 .pnb ul > li a{display: block; width: 100%; padding: 1.46rem 0 1.3rem 0; text-align: center; position: relative;}
 .pnb ul > li a.on{color: #fd4802;}
 .pnb ul > li a.on::after{content: ''; display: block; width: 100%; height: 3px; background-color: #fd4802; color: #fd4802; position: absolute; bottom: 0; left: 50%; right: 50%; transform: translate(-50%);}
@@ -1241,7 +1278,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 	position: fixed;
 	top: 0;
 	left: 0;
-	z-index: 19;
+	z-index: 1000;
 	width: 100%;
 	height: 100%;
 	background-color: rgba(0, 0, 0, 0.3);
@@ -1257,7 +1294,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 	position: fixed;
 	top: 50%;
 	left: 0;
-	z-index: 20;
+	z-index: 1001;
 	min-width:13.3rem;
 	max-width: 95%;
 	background-color: rgba(255, 255, 255,1);
@@ -1598,7 +1635,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 
 /* modal */
 /*  modal popup  */
-.blocker{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:auto;z-index:999999;padding:0px;box-sizing:border-box;background-color:#000;background-color:rgba(0,0,0,0.75);text-align:center;}
+.blocker{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:auto;z-index:999;padding:0px;box-sizing:border-box;background-color:#000;background-color:rgba(0,0,0,0.75);text-align:center;}
 .blocker:before{content:"";display:inline-block;height:100%;vertical-align:middle;margin-right:-0.05em;}
 .blocker.behind{background-color:transparent;}
 .modal{display:none; vertical-align:middle;position:relative;z-index:2;max-width:960px;box-sizing:border-box;width:90%;background:#fff;padding:0;text-align:left; -webkit-box-shadow:0 0 10px #000;-moz-box-shadow:0 0 10px #000;-o-box-shadow:0 0 10px #000;-ms-box-shadow:0 0 10px #000;box-shadow:0 0 10px #000;}

+ 40 - 16
src/main/webapp/ux/mo/css/layout_m.css

@@ -441,13 +441,13 @@
 .pd_detail .option_box > [class^="opt_"] .opt_header {margin-bottom:0.5rem;}
 .pd_detail .option_box > [class^="opt_"] .opt_header .title {margin-right:1rem; font-weight:500; color:#222;}
 .pd_detail .option_box > [class^="opt_"] .opt_header .color {color:#666666; font-weight:300;}
-.pd_detail .option_box .opt_size .form_field {display:block;}
+.pd_detail .option_box .opt_size .form_field {display:block; margin-left: -0.8rem !important;}
 .pd_detail .option_box .opt_size .form_field .lap{margin:-0.25rem -0.25rem 0; overflow:hidden;}
 .pd_detail .option_box .opt_size .form_field .lap > div {margin:0.25rem; float:left; width:auto;}
 .pd_detail .option_box .opt_size .form_field input[type="radio"] + label {display:block; width:6rem; height:3.4rem; padding:0; line-height:3.4rem; text-align:center; background:#fff; box-sizing:border-box; border:1px solid #ddd; color:#222; font-weight:200; font-size:1.2rem;}
 .pd_detail .option_box .opt_size .form_field input[type="radio"] + label::before,
 .pd_detail .option_box .opt_size .form_field input[type="radio"] + label::after {display:none;}
-.pd_detail .option_box .opt_size .form_field input[type="radio"]:checked + label {border:1px solid #222;}
+.pd_detail .option_box .opt_size .form_field input[type="radio"]:checked + label {border:1px solid #fd4802;}
 .pd_detail .option_box .opt_size .form_field input[type="radio"]:disabled + label {text-decoration:line-through; background:#f5f5f5; border-color:#f5f5f5; color:#bbb; opacity:1;}
 .pd_detail .option_box .opt_count {padding-bottom:0;}
 .pd_detail .option_box .opt_result {}
@@ -476,7 +476,7 @@
 .option_box .opt_size .form_field2 .lap > div {margin:0.25rem; float:left; width:auto;}
 .option_box .opt_size .form_field2 label > span{position:relative; display:block; width:6rem; height:3.4rem; padding:0; line-height:3.4rem; text-align:center; background:#fff; box-sizing:border-box; color:#222; font-weight:200; font-size:1.2rem; border:1px solid #ddd; cursor: pointer;}
 .option_box .opt_size .form_field2 label input[type="radio"]{position:absolute; width:0; height:0; visibility:hidden;}
-.option_box .opt_size .form_field2 label input[type="radio"]:checked + span{border:1px solid #000;}
+.option_box .opt_size .form_field2 label input[type="radio"]:checked + span{border:1px solid #fd4802;}
 .option_box .opt_size .form_field2 label input[type="radio"]:disabled + span{text-decoration:line-through; background:#f5f5f5; border-color:#f5f5f5; color:#bbb; opacity:1;}
 .pd_detail .option_box .info_restock{margin-top:1rem;}
 .pd_detail .option_box .info_restock a.btn_popup {position:relative; padding-left:1.9rem; padding-right:1.2rem; color:#666; font-size:1.3rem; font-weight:300; border:none;}
@@ -541,7 +541,8 @@
 [class*="pd_descrp"] [class^="view_"]:first-of-type {margin-top:0;}
 [class*="pd_descrp"] [class^="view_"] .tit_view {display:block; color:#222; font-size:2.1rem; font-weight:400; text-align:center;}
 [class*="pd_descrp"] [class^="view_"] .model_info {display:block; margin-top:1rem; color:#666; font-size:1.2rem; font-weight:200; text-align:center;}
-[class*="pd_descrp"] [class^="view_"] .view {margin-top:2rem}
+[class*="pd_descrp"] [class^="view_"] .view {margin-top:2rem; margin:0 -2rem;}
+[class*="pd_descrp"] .view_label_box .view{margin:0;}
 [class*="pd_descrp"] [class^="view_"] .view img {display:block; margin:0.5rem auto 0}
 [class*="pd_descrp"] [class^="view_"] .view img:first-child {margin-top:0}
 [class*="pd_descrp"] .view_label_box .view span {display:block; margin:0 -0.5rem; overflow:hidden;}
@@ -569,8 +570,9 @@
 [class*="pd_descrp"] .required_box .tbl.type1 {border-top:1px solid #000; border-bottom:1px solid #ddd;} 
 [class*="pd_descrp"] .required_box .tbl.type1 table {width:100%; text-align:left; word-break:keep-all;}
 [class*="pd_descrp"] .required_box .tbl.type1 table th,
-[class*="pd_descrp"] .required_box .tbl.type1 table td {position:relative; padding:1.4rem 1.2rem; font-weight:300; font-size:1.3rem; letter-spacing:-0.025em;}
+[class*="pd_descrp"] .required_box .tbl.type1 table td {position:relative; padding:0.4rem 1.2rem; font-weight:300; font-size:1.3rem; letter-spacing:-0.025em;}
 [class*="pd_descrp"] .required_box .tbl.type1 table th {font-weight:400;}
+[class*="pd_descrp"] .required_box .tbl.type1 table td {color:#666666}
 [class*="pd_descrp"] .required_box .tbl.type2 {padding:0; border-top:1px solid #000;} 
 [class*="pd_descrp"] .required_box .tbl.type2 table {width:100%; word-break:keep-all;}
 [class*="pd_descrp"] .required_box .tbl.type2 table th,
@@ -667,7 +669,26 @@
 .pd_detail .pd_relate .area_slider .itemName {height:3.2rem}
 /* 210405 */
 header .htop.trans{position:absolute; background:transparent !important;}
-.pd_qnalist_pop .btn_group_flex > div > .btn{height:5.5rem;}
+.pd_qnalist_pop .btn_group_flex > div > .btn{height:5.3rem;}
+/* 210406 */
+.push_restock_pop .btn_group_flex > div > .btn{height:5.3rem;}
+.pd_review_pop .btn_group_flex > div > .btn{height:5.3rem;}
+.modal.pd_pop.pd_qnawrite_pop .modal-footer button{height:5.3rem;}
+.modal.pd_pop.pd_qnawrite_pop .modal-header{border-bottom:0px none;}
+.modal.pd_pop.push_restock_pop .item_blk .item_prod .item_state .itemLink .itemBrand {display:block; font-size:1rem; color:#888888; font-weight:300; margin-left:0; margin-right:0; text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;width:30rem;overflow:hidden;}
+.modal.pd_pop.push_restock_pop .item_blk .item_prod .item_state .itemLink .itemName {display:block; margin-top:0.5rem; font-size:1.3rem; max-height: 3.3rem; margin-left:0; margin-right:0; display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; max-height: 3.3rem; overflow: hidden; white-space: normal; overflow-wrap: break-word; width:30rem;}
+.select_custom .combo .list>li[aria-disabled="true"]{background:#fff;}
+.Purchase_pop .select_custom.on .combo .select{border-bottom:1px solid #dcdcdc}
+.pd_qnalist_pop .foldGroup > ul > li{border-bottom:0px none;}
+.pd_qnalist_pop .fold_cont .fold_answer{border-top:0px none;}
+.pd_qnalist_pop .fold_cont > div:first-of-type{border-bottom:1px solid #dcdcdc}
+.pd [class*="pd_descrp"] .cont_body.on{overflow: visible;}
+.pd .mdhtml_box a{margin:0 -2rem; display:block;}
+
+.option_box .opt_size .form_field > div {margin-left:8px; margin-top:8px;}
+/*.option_box .opt_size .form_field > div:nth-child(7n-6) {margin-left:0px;}*/
+.option_box .opt_size .form_field > div {float:left; width:auto;}
+
 
 /* 플롯팅 메뉴 > 구매하기 */
 .product_floormenu{position:fixed; bottom:0; left:0; width:100%; height:5.8rem; line-height:5.8rem; z-index:20;}
@@ -904,6 +925,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .modal.pd_pop.info_size_pop .tbl.type2 table th,
 .modal.pd_pop.info_size_pop .tbl.type2 table td {position:relative; padding:1.5rem 0; border-bottom:1px solid #ddd; font-weight:200; font-size:1.3rem; letter-spacing:-0.025em; text-align:center;}
 .modal.pd_pop.info_size_pop .tbl.type2 table th {font-weight:300; color:#222;}
+.modal.pd_pop.info_size_pop .tbl.type2 table thead tr{background:#f5f5f5;}
 
 /* pd_popup > 재입고 알림 신청 */
 .modal.pd_pop.push_restock_pop {max-width:none;}
@@ -943,7 +965,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_qnalist .qna_list .form_field input[type="checkbox"] + label {line-height:1;}
 .pd_qnalist .qna_list .form_field input[type="checkbox"] + label:before,
 .pd_qnalist .qna_list .form_field input[type="checkbox"] + label:after {top:50%; transform:translateY(-50%); margin-top:0;}
-.pd_qnalist .qna_list .foldGroup .fold_head a{padding: 1.4rem 1.33rem;}
+.pd_qnalist .qna_list .foldGroup .fold_head a{padding: 1.4rem 1.33rem; border-bottom:0.1rem solid #E5E5E5;}
 .pd_qnalist .qna_list .foldGroup .fold_head .fold_tit .ico {display:inline-block; width:auto; height:auto; vertical-align:middle;}
 .pd_qnalist .qna_list .foldGroup .fold_head .fold_tit .ico_myqna::after {content:'내문의'; display:inline-block; margin-right:1rem; color:#fd4802; font-size:1.1rem; text-align:center; box-sizing:border-box; line-height:20px;}
 .pd_qnalist .qna_list .foldGroup .fold_head .fold_tit .ico_secret::after {content:''; display:inline-block; margin-right:1rem; width:1.2rem; height:1.2rem; background:url('/images/mo/ico_secret.png') no-repeat 50% 50%; background-size:contain;}
@@ -1030,8 +1052,8 @@ header .htop.trans{position:absolute; background:transparent !important;}
     .pd_review .area_rv_empty .txt_box div dl {margin-left:5vw;}
   }
 .pd_review .area_rv_empty .txt_box div dl:first-child {margin-left:0}
-.pd_review .area_rv_empty .txt_box div dl dt {color:#666; font-weight:200; line-height:1.4;} 
-.pd_review .area_rv_empty .txt_box div dl dd {color:#fd4802; font-weight:300;}
+.pd_review .area_rv_empty .txt_box div dl dt {color:#666; font-weight:200; line-height:1.4; font-size:1.3rem;} 
+.pd_review .area_rv_empty .txt_box div dl dd {color:#000; font-weight:300;font-size:1.7rem;}
 .pd_review .area_rv_empty .btn_box .review_go{margin-top:3rem;}
 .pd_review .area_rv_average {margin-bottom:0!important; padding-bottom:0!important; text-align:center;}
 .pd_review .area_rv_average .star_score {margin-bottom:2rem;}
@@ -1047,7 +1069,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_review .area_rv_average .average .part_average .pa_head .tit{position:absolute; left:0; display:block; padding-top:0.5rem; width:6rem; height:2.4rem; border:1px solid #fd4802; font-size: 1.3rem; color:#fd4802; font-weight:300; line-height:1; border-radius:2.2rem; text-align:center;}
 .pd_review .area_rv_average .average .part_average .pa_head dl dt {padding-left:0; width:5.2rem; font-size:1.5rem; font-weight:300; color:#222;}
 .pd_review .area_rv_average .average .part_average .pa_head dl dd {width:calc(100% - 5.2rem);}
-.pd_review .area_rv_average .average .part_average .pa_head dl dd .percent{font-size:1.4rem; font-weight:500; color:#222;}
+.pd_review .area_rv_average .average .part_average .pa_head dl dd .percent{font-size:1.5rem; font-weight:500; color:#222;}
 .pd_review .area_rv_average .average .part_average .pa_body{display:none; margin-top:1.3rem;}
 .pd_review .area_rv_average .average .btn_group_flex{margin-top:2.4rem;}
 .pd_review .area_rv_average .average .btn_group_flex button{border:1px solid #a7a7a7; color:#222;}
@@ -1055,11 +1077,11 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_review .area_rv_average .average .btn_group_flex button span:before{display:"inline-block"; content:'자세히보기'; vertical-align:middle;}
 .pd_review .area_rv_average .average .btn_group_flex button.active span:before{display:"inline-block"; content:'접기'; }
 .pd_review .area_rv_average .average .btn_group_flex button.active span:after{transform:rotate(180deg);}
-.pd_review .area_rv_average .average .part_average dl{margin-bottom:0.1rem;}
+.pd_review .area_rv_average .average .part_average dl{margin-bottom:0.5rem;}
 .pd_review .area_rv_average .average .part_average dl:last-child{margin-bottom:1rem;}
 .pd_review .area_rv_average .average .part_average:last-child dl:last-child{margin-bottom:0;}
 .pd_review .area_rv_average .average .part_average dl dt {float:left; padding-left:0.7rem; width:7.2rem; font-size:1.2rem; box-sizing:border-box;}
-.pd_review .area_rv_average .average .part_average dl dd {position:relative; float:left; width:calc(100% - 7.2rem); padding-right:4.2rem; box-sizing:border-box;}
+.pd_review .area_rv_average .average .part_average dl dd {position:relative; float:left; width:calc(100% - 7.2rem); padding-right:4.7rem; box-sizing:border-box;}
 .pd_review .area_rv_average .average .part_average dl dd::after {content:''; clear:both; display:block;}
 .pd_review .area_rv_average .average .part_average dl dd span {float:left; display:inline-block;}
 .pd_review .area_rv_average .average .part_average dl dd .ratio {width:100%; height:5px; margin-top:6px; background:#f5f5f5; overflow:hidden;}
@@ -1071,7 +1093,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_review .area_rv_average .average .part_average dl.on dd {color:#222; font-weight:300;}
 .pd_review .area_rv_average .average .part_average dl.on dd .ratio .progbar {background:#222;}
 .pd_review .area_rv_average .average .part_average dl.on dd .ratio .progbar::after {border:4px solid #222; border-bottom-color:transparent;border-right-color:transparent;}
-.pd_review .area_rv_average .info_review {color:#222; font-size:1.3rem; font-weight:500; background:#fff6f2; padding:2.4rem 2rem; vertical-align:middle;}
+.pd_review .area_rv_average .info_review {color:#222; font-size:1.3rem; font-weight:500; background:#fff6f2; padding:2.4rem 2rem; vertical-align:middle; margin: 0 -1.4rem;}
 .pd_review .area_rv_average .info_review p {position:relative; text-align:left; padding-left:2rem; font-weight:300; display: inline-block;}
 .pd_review .area_rv_average .info_review p i.ico_point {position:absolute; left:0; top:2px; display:inline-block; width:1.5rem; height:1.5rem; background:url('/images/mo/ico_point3.png') no-repeat 50% 50%; background-size:100% 100%;}
 .pd_review .area_rv_average .info_review p span {font-weight:500;}
@@ -1090,7 +1112,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_review .area_rv_photo .photo_list > div > div{position:relative; width:100%; padding-bottom:100%;}
 .pd_review .area_rv_photo .photo_list button {position:absolute; width:100%; height:100%; background:rgba(0,0,0,0.6); color:#fff; font-size:1.4rem; z-index:1; text-align:center; box-sizing:border-box; z-index:2;}
 .pd_review .area_rv_photo .photo_list button::before {content:''; display:block; margin:0 auto; width:2rem; height:2rem; background:url('/images/mo/ico_plus_white.png') no-repeat 50% 50%; z-index:1;}
-.pd_review .area_rv_photo .photo_list button span{margin-top:0.5vw; display:block; font-size:1rem;}
+.pd_review .area_rv_photo .photo_list button span{margin-top:0.5vw; display:block; font-size:1.2rem; position:relative; top:0.6rem}
 .pd_review .area_rv_all {}
 .pd_review .area_rv_all h6 span {display:inline-block; margin-left:5px; color:#666; font-weight:200;}
 .pd_review .area_rv_all .review_list {border-top:1px solid #ddd;}
@@ -1123,7 +1145,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_review .area_rv_all .review_list .review .photo_box .photo_list > ul li {display:inline-block; margin-left:0.8rem; width:7.5rem; height:7.5rem;}
 .pd_review .area_rv_all .review_list .review .photo_box .photo_list > ul li:first-child{margin-left:1.33rem;}
 .pd_review .area_rv_all .review_list .review .photo_box .photo_list > ul li:last-child{margin-right:1.33rem;}
-.pd_review .area_rv_all .review_list .review .txt_review_box {margin-top:1.6rem; font-size:1.3rem; overflow:hidden;}
+.pd_review .area_rv_all .review_list .review .txt_review_box {margin-top:1.6rem; font-size:1.4rem; overflow:hidden; color:#000}
 .pd_review .area_rv_all .review_list .review .reply_box {margin-top:1.5rem; padding-top:1.5rem;}
 .pd_review .area_rv_all .review_list .review .reply_box .reply {position:relative; padding:2rem; background:#f5f5f5;}
 .pd_review .area_rv_all .review_list .review .reply_box .reply::after {content:''; position:absolute; left:0px; top:-1.5rem; width:0px; height:0px; border:1.5rem solid #f5f5f5; border-top-color:transparent; border-right-color:transparent;}
@@ -1314,7 +1336,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .item_blk .item_prod .itemLink{position: relative; display:table-cell; width: 100%; height:60px; padding-left:56px; vertical-align: middle;}
 .item_blk .item_prod .item_state .itemLink .itemPic {position:absolute; left:0; top:0; padding: 0; width:40px; height:60px; z-index:2;}
 .item_blk .item_prod .item_state .itemLink .itemBrand {display:block; font-size:1rem; color:#888888; font-weight:300; margin-left:0; margin-right:0; text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;width:30rem;overflow:hidden;}
-.item_blk .item_prod .item_state .itemLink .itemName {display:block; margin-top:0.5rem; font-size:1.3rem; max-height: 3.3rem; margin-left:0; margin-right:0; display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; max-height: 3.3rem; overflow: hidden; white-space: normal; overflow-wrap: break-word;}
+.item_blk .item_prod .item_state .itemLink .itemName {display:block; margin-top:0.5rem; font-size:1.3rem; max-height: 3.3rem; margin-left:0; margin-right:0; display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; max-height: 3.3rem; overflow: hidden; white-space: normal; overflow-wrap: break-word; width:30rem;}
 .item_blk .item_prod .item_state .itemLink .itemPrice{margin-left:0; margin-right:0;}
 /*select_custom > item_prod*/
 .select_custom .select .item_prod{margin:0; padding-right:0; overflow:hidden;}
@@ -1674,6 +1696,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 
 
 /* 전시제품메뉴 공통 */
+/* 제거예정/ 공통 헤더로 교체 */
 .dp .nav_box{position:fixed; width:100%; height:100%; top:5.5rem; left:0; background:rgba(0,0,0,.5); z-index:600;}
 .dp .nav_box.active{visibility:visible;}
 .dp .nav_box .lap{position:absolute; top:0; left:0; padding:0 2rem 0; width:100%; background:#fff;}
@@ -2078,6 +2101,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .br_search_wrap .brand.nodata .btn { font-size: 1.2rem; border: 0.1rem solid #888; height: 3rem; padding: 0 1rem;}
 /* 브랜드 - br_search */
 .htop.br { overflow: hidden;}
+/* 제거 예정/ 공통으로 교체 */
 .htop.br .button_wrap {height: 5.5rem; display: inline-block; float: right; padding: 1.6rem 0 0; margin: 0 2.5rem 0 0; box-sizing: border-box;}
 .htop.br .button_wrap .br_search { margin: 0 2.5rem 0 0; }
 .htop.br .button_wrap .br_store img:nth-child(1) { height: 2rem; }

+ 29 - 11
src/main/webapp/ux/mo/css/style24_m.css

@@ -848,6 +848,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 
 /* mypage_공통 */
 .my {background: #f5f5f5;}
+.my .pnb{background: #ffffff;}
 .my .mypage {background: #f5f5f5;}
 .my .inner {padding-bottom: 0; background: #fff;}
 .my .inner.bg_gray {background: #f5f5f5;}
@@ -904,6 +905,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .goods_btn_wrap > div > .btn.btn_primary {background-color:#fff; border-color:#fd4802; color: #fd4802;}
 
 /* my_index */
+main.container.my .inner:last-child {padding-bottom: 0;}
 .my .lnb_list {margin-top: 1.2rem; padding-bottom: 6rem;}
 .my .lnb_list li { border-bottom: 1px solid #ddd;}
 .my .lnb_list li a {display: block; padding: 2rem; background: url(/images/mo/ico_lnb_arrow.png) no-repeat right 2rem center; background-size:0.7rem 1.26rem;}
@@ -950,8 +952,8 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .my .goods_top .delete_btn {position: absolute; bottom: 1.5rem; right: 0; font-size: 1.3rem; color: #8d8d8d; padding-right: 1.4rem; background: url(/images/mo/ico_btn_cls.png) no-repeat right top 3px; background-size:0.9rem 0.9rem;}
 .my .goods_top .purchase_btn {position: absolute; bottom: 1.5rem; right: 0; font-size: 1.3rem; color: #8d8d8d; padding-right: 1.6rem; background: url(/images/mo/ico_check01.png) no-repeat right top 3px; background-size:1.06rem 0.8rem;}
 .my .badge_wrap {display: inline-block;}
-.my .order_badge {font-size: 0.9rem; color: #666; font-weight: 300; border:1px solid #888; padding:0.5rem 0.4rem; margin-left: 1px; vertical-align: top;}
-.my .order_bullet_badge {color: #fd4802; border:1px solid #fd4802;}
+.my .order_badge {font-size: 1rem; border-radius: 0.1rem; color: #666; font-weight: 300; border:1px solid #888; padding:0.4rem 0.4rem 0.25rem; margin-left: 1px; vertical-align: top;}
+.my .order_bullet_badge {background: #fff6f2; color: #fd4802; border:1px solid #fd4802;}
 
 .my .part_goods {position:relative;}
 .my .part_goods:first-child {margin-top: -1.2rem; padding-top:3rem}
@@ -1018,7 +1020,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 
 
 /* my_review_1 */
-.my .review {}
+.my .review .inner {margin-bottom: 0;}
 .my .review .inner.wide {background: #f5f5f5;}
 /* .my .review .inner .tabWrap .inner{margin-bottom:1.3rem;} */
 .my .review .tabIndex{margin-bottom: 0.85em;}
@@ -1032,7 +1034,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .my .review .tip2 .tip_contents:after{left: 64.5%;}
 .my .review .tip_wrap ul li{position: relative;padding-left: 1.0rem;font-weight: 200;}
 .my .review .tip_wrap ul li::before{content: '';position: absolute;top: 7px;left: 0;background: #858585;width: 3px;height: 3px;}
-.my .review .part_goods .goods_section:last-of-type {margin-bottom: 2.4rem;border-bottom: 1px solid #ddd;}
+.my .review .part_goods .goods_section:last-of-type {margin-bottom: 0;border-bottom: 1px solid #ddd;}
 .my .review .part_goods .goods_detail .info_box .od_name .name{-webkit-line-clamp: 1;}
 
 /* my_review_2 */
@@ -1095,7 +1097,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 /* .my .tbl.review_tbl .form_field input[type="radio"] + label:before {background-position: 0 0;} */
 .my .review .tbl_wrap {padding:3rem 0 0 0;}
 .my .review .tbl_wrap:last-child {padding: 0;}
-.my .review .tbl_wrap .tbl:last-child {border-top: 0;}
+.my .review .tbl_wrap:last-child .tbl {border-top: 0;}
 .my .review .tbl_wrap .tbl .tbl_row {padding:0 0 2rem; border-bottom: 1px solid #ddd;}
 /* .my .review .tbl_wrap .tbl .tbl_row:first-child {margin-bottom: 2rem;} */
 .my .review .tbl_wrap .tbl .tbl_row:last-child { border-bottom: 0;}
@@ -1112,7 +1114,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 
 .my .review .tbl_wrap .tbl th.ver_top {vertical-align: top; padding-top: 25px;}
 .my .review .tbl_wrap .tbl th.ver_top02 {vertical-align: top;}
-.my .review .tbl_wrap .tbl td textarea {width: 100%; resize:none; height: 82px; padding: 15px; font-size: 14px; color: #868686;}
+.my .review .tbl_wrap .tbl td textarea {width: 100%; resize:none; height: 15rem; padding: 15px; font-size: 14px; color: #868686;}
 .my .review .tbl_wrap .tbl.review_tbl td {padding-left: 0;}
 .my .review .tbl_wrap .tbl.review_tbl td textarea {height: 200px;}
 .my .review .tbl_wrap .tbl td .select {width: 400px;}
@@ -1344,6 +1346,8 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 
 /* my_delivery_1 */
 .my .my_delivery {}
+.my .my_delivery .inner > .btn_group {position: fixed; left: 0; bottom: 0; width: 100%; z-index: 99; transition:all 0.3s;}
+.my .my_delivery .inner > .btn_group.active {transform: translate(0, -4.3rem);}
 .my .my_delivery .inner:last-child {padding-bottom: 0;}
 .my .my_delivery .ship_info {padding:3rem 2rem; border-bottom: 1px solid #eee;}
 .my .my_delivery .ship_info.active {background: #fff6f2;}
@@ -1390,10 +1394,10 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .my .myMbLeave .tbl.type5 th p {font-size: 1.3rem; color: #888888;}
 .my .myMbLeave .announce_txt .announce_list{padding: 1.0rem 0 3rem;}
 .my .myMbLeave .announce_txt + .check_box {padding: 3.0rem 0;border-top: 1px dashed #dcdcdc;}
-.my .message { width: 100%; display: inline-table;position: relative; border:1px solid #ffe4d9; padding:0 1.5rem; margin-top: 1.2rem;background: #fff6f2;}
-.my .message .msg_tit {font-size: 1.3rem; color: #fd4802; margin-bottom: 1rem; font-weight: 500; padding-top: 1.5rem;   padding-left: 2rem;}
-.my .message .msg_tit.t_err {text-indent: -2rem;}
-.my .message .content {font-size: 1.3rem; padding-bottom: 1.5rem;padding-left: 2rem;color: #888888;}
+.my .myMbLeave .message { width: 100%; display: inline-table;position: relative; border:1px solid #ffe4d9; padding:0 1.5rem; margin-top: 1.2rem;background: #fff6f2;}
+.my .myMbLeave .message .msg_tit {font-size: 1.3rem; color: #fd4802; margin-bottom: 1rem; font-weight: 500; padding-top: 1.5rem;   padding-left: 2rem;}
+.my .myMbLeave .message .msg_tit.t_err {text-indent: -2rem;}
+.my .myMbLeave .message .content {font-size: 1.3rem; padding-bottom: 1.5rem;padding-left: 2rem;color: #888888;}
 
 
 /* my_point */
@@ -1656,7 +1660,7 @@ background-size:100%;}
 .od .foldGroup .fold_head a {padding: 0;}
 .od .foldGroup .fold_head .data {position:absolute; top:50%; right:50px; transform:translateY(-50%); color:#000; font-size:1.3rem; font-weight:300; z-index:-1; padding-right: 0; width: 40%; white-space: nowrap; overflow:hidden; text-overflow: ellipsis; text-align: right;}
 .od .foldGroup .fold_head .data.fixed {display: block;}
-.od .foldGroup .fold_head .data.custom_disc {}
+.od .foldGroup .fold_head .data.custom_disc {z-index: 2;}
 .od .foldGroup .fold_head .data.custom_disc label {line-height: 2rem;}
 .od .foldGroup .fold_head .data.maxdisc {z-index:2; text-align: center; width:auto;}
 .od .foldGroup .fold_head .data.maxdisc span {padding-left: 0; margin-left: 0;}
@@ -2037,6 +2041,14 @@ background-size:100%;}
 .od .completed .btn_group_md::after {}
 .od .completed .btn_group_md .btn {margin:0px 3px; width:230px;}
 
+.od .completed .gift_wrap {padding:3rem 0;}
+.od .completed .gift_wrap h3 {font-size: 1.6rem; border-bottom: 1px solid #000; padding-bottom: 1.5rem;}
+.od .completed .gift_wrap .gift_con {padding:2rem 0 0;}
+.od .completed .gift_wrap .gift_con .gift_info {font-size: 1.3rem; margin-bottom: 1.5rem; font-weight: 500;}
+.od .completed .gift_wrap .gift_con .message {border:1px solid #ffe4d9; padding:1.5rem; background: #fff6f2;}
+.od .completed .gift_wrap .gift_con .message .gift_tit {font-size: 1.3rem; color: #fd4802; margin-bottom: 1rem; font-weight: 500;}
+.od .completed .gift_wrap .gift_con .message .content {font-size: 1.3rem;}
+
 .od .my_order .inner {margin-bottom: 1.2rem;}
 .od .my_order .inner:last-child {margin-bottom: 0;}
 .od .inner.bg_beige {background: #fff6f2;}
@@ -2130,6 +2142,10 @@ background-size:100%;}
 
 /* 쇼핑백 */
 main.container .shopping_bag .inner:last-child {padding-bottom: 0;}
+.shopping_bag .od_method label span {vertical-align: bottom;}
+.shopping_bag .tbl_radio {} 
+.shopping_bag .tbl_radio table {width: 100%;}
+.shopping_bag .tbl_radio th, .shopping_bag .tbl_radio td {padding-top: 1.5rem;}
 .shopping_bag .sec_select {position: relative;}
 .shopping_bag .sec_select .form_field input[type="checkbox"] + label {font-size: 1.3rem;}
 .shopping_bag .sec_select .btn {position: absolute; top: 0; right: 0; width: 5.8rem; height: 2.5rem; padding: 0; font-size: 1.1rem;}
@@ -2137,6 +2153,8 @@ main.container .shopping_bag .inner:last-child {padding-bottom: 0;}
 .shopping_bag .inner.wide {padding: 0;}
 .shopping_bag .btn_delete {position: absolute; top: 0; right: 0; z-index: 9; width: 4rem; height: 4rem; background: url(/images/mo/ico_itemdelete_btn.png) no-repeat center/1.2rem; background-position: center;}
 .shopping_bag .inner:nth-child(2) {padding:1.5rem 2rem;}
+.shopping_bag .nodata {min-height:13rem; line-height:13rem; text-align: center;}
+.shopping_bag .nodata p {color: #888;}
 .shopping_bag .goods_top {padding-top: 0; border-bottom: 1px solid #000;}
 
 .shopping_bag .area_salecoupon h4 {margin-bottom: 1.5rem; font-size: 1.6rem;}

+ 21 - 5
src/main/webapp/ux/mo/js/common_m.js

@@ -683,13 +683,13 @@ $(document).ready(function () {
             return false;
         });
 
-        //let autome = document.querySelector('.btPopAuto'); 
-        //let headsize = this.querySelector('.btPopAuto .btPopAuto_head');
-        //let bodysize = this.querySelector('.btPopAuto .btPopAuto_body');
+        let autome = document.querySelector('.btPopAuto'); 
+        let headsize = this.querySelector('.btPopAuto .btPopAuto_head');
+        let bodysize = this.querySelector('.btPopAuto .btPopAuto_body');
         //console.log('★ btPop_auto헤더 높이 : ' + headsize.offsetHeight);
         //console.log('★ btPop_auto바디 높이 : ' + bodysize.clientHeight);
-		
-        //let autotop = appHeight - (headsize.offsetHeight + bodysize.offsetHeight);
+
+        let autotop = appHeight - (headsize.offsetHeight + bodysize.offsetHeight);
         //console.log('★ btPopAuto전체 높이 - 컨텐츠 높이 : ' + autotop);
         //console.log('★ btPopAuto전체 높이 - 컨텐츠 높이 /10 : ' + autotop /10);
 
@@ -704,6 +704,20 @@ $(document).ready(function () {
             }
             return false;
         });
+        // 210405_사이즈 선택시 구매하기 팝업 추가
+        $('.opt_size .form_field div').click(function(){
+            popOpenScroll();
+            //$('.btPop_body .lap span').css('color', 'red')
+            //console.log($(this)[0]);
+            $('.container').addClass('btPop_open');
+            // autome.style.top  = autotop /10 + "vh";
+            if (autotop > 251) {
+                autome.style.top = 25.0 + "vh";
+            }else{
+                autome.style.top  = pxtop/10 + "vh";
+            }
+            return false;
+        });
 
 
         // 쇼핑백팝업
@@ -742,6 +756,8 @@ $( document ).ready( function() {
 
         /* 상품문의_accordion */
         $(document).on('click','.pd_qnalist .fold_head .fold_tit',function(e){	
+            $('.fold_head').removeClass('on');
+            $('.fold_cont').slideUp(100);
             $(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
             $(this).parents('.fold_head').toggleClass('on');
             return false;

+ 90 - 39
src/main/webapp/ux/style24_link.js

@@ -57,7 +57,7 @@ const _PAGE_CART = _frontUrl + "/cart/list/form";								// 장바구니
 const _PAGE_MYPAGE = _frontUrl + "/mypage/main/form";							// 마이페이지 > 메인
 const _PAGE_MYPAGE_ORDER_LIST = _frontUrl + "/mypage/order/list/form";			// 마이페이지 > 주문확인/배송조회
 const _PAGE_MYPAGE_ORDER_DETAIL = _frontUrl + "/mypage/order/detail/form/";		// 마이페이지 > 주문/배송 상세
-const _PAGE_MYPAGE_CRS_LIST = _frontUrl + "/mypage/crs/list/form";				// 마이페이지 > 취소/교환/반품 목록
+const _PAGE_MYPAGE_CRE_LIST = _frontUrl + "/mypage/cre/list/form";				// 마이페이지 > 취소/교환/반품 목록
 const _PAGE_MYPAGE_RESTOCK = _frontUrl + "/mypage/restock/form";				// 마이페이지 > 재입고 알림 내역
 const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";					// 마이페이지 > 쿠폰
 const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 포인트
@@ -208,22 +208,34 @@ var cfnOpenIpinCertify = function (redirectUrl) {
  *			cfnAddCart(compsList);
  *
  *		ex) 세트상품 장바구니 등록
- *			let compsList = [];
- *			for(let j = 0 ; j < length ; j++) {		// 구성품 수량 만큼 for
- *				let temp = new Object;
- *				temp.goodsCd = "STYS000000016";
- *				temp.itemCd = '14373757';
- *				temp.optCd = "핑크120";
- *				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);
+ *			let cartGoodsList = [];
+ *			for(let i = 0 ; i < 세트상품수 ; i++) {
+ *				let compsList = [];
+ *				let goodsList = {
+ *					cartCompsList : new Array()
+ *				}
+ *
+ *				for(let j = 0 ; j < 세트구성품수 ; j++) {
+ *					let temp = new Object;
+ *					temp.goodsCd = "STYS00000005";
+ *					temp.itemCd = "A83F-DP568S";
+ *					temp.optCd = "14019445-1";
+ *					temp.goodsQty = 3;
+ *					temp.goodsType = "G056_S";
+ *					temp.cartGb = "C";
+ *					temp.afLinkCd = "aaaa";
+ *					temp.ithrCd = "12311";
+ *					temp.contentsLoc = "afasd";
+ *					temp.planDtlSq = "44";
+ *					compsList.push(temp);
+ *				}
+ *
+ *				goodsList.cartCompsList = compsList;
+ *				cartGoodsList.push(goodsList);
  *			}
- *			cfnAddCart(compsList);
+ *
+ *			cfnAddCart(cartGoodsList);
+ *
  * </pre>
  * @since  : 2021/02/24
  * @author : xodud1202
@@ -238,25 +250,30 @@ function cfnAddCart(cartList) {
 		contentType: 'application/json',
 		dataType : 'json',
 		success : function(result) {
-			if(cartList[0].cartGb == "C") {
-				mcxDialog.confirm("<div class="+"dialog-title"+">"+"상품이 쇼핑백에 추가되었습니다.</div><p>쇼핑백으로 이동하시겠습니까?</p>", {
-					cancelBtnText: "계속 쇼핑하기",
-					sureBtnText: "쇼핑백 가기",
-					sureBtnClick: function(){
-						location.href='/cart/list/form'; 	//내 쇼핑백 이동url
+			if(result.message == "SUCCESS") {
+				if(result.cartGb == "C") {
+					mcxDialog.confirm("<div class="+"dialog-title"+">"+"상품이 쇼핑백에 추가되었습니다.</div><p>쇼핑백으로 이동하시겠습니까?</p>", {
+						cancelBtnText: "계속 쇼핑하기",
+						sureBtnText: "쇼핑백 가기",
+						sureBtnClick: function(){
+							location.href='/cart/list/form'; 	//내 쇼핑백 이동url
+						}
+					});
+				} else if (result.cartGb == "O"){
+					let orderHtml = "";
+					for(let i = 0 ; i < result.cartSqList.length ; i++) {
+						orderHtml += '<input type="hidden" name="cartSqArr" value="' + result.cartSqList[i] + '" />';
 					}
-				});
-			} else if (cartList[0].cartGb == "O"){
-				let orderHtml = "";
-				for(let i = 0 ; i < result.length ; i++) {
-					orderHtml += '<input type="hidden" name="cartSqArr" value="' + result[i].cartSq + '" />';
+					$("#directOrderForm").html(orderHtml);
+					
+					$("#directOrderForm").submit();
+					
+					//location.href='/cart/list/form';
+				} else {
+					mcxDialog.alert("쇼핑백담기, 바로구매가 아닌 상태입니다. 해당 요청이 맞다면 새로고침 후 다시시도해주세요.");
 				}
-				$("#directOrderForm").html(orderHtml);
-				$("#directOrderForm").submit();
-				
-				//location.href='/cart/list/form';
 			} else {
-				mcxDialog.alert("쇼핑백담기, 바로구매가 아닌 상태입니다. 해당 요청이 맞다면 새로고침 후 다시시도해주세요.");
+				mcxDialog.alert(result.message);
 			}
 		}
 	});
@@ -700,12 +717,21 @@ function cfGoodsQngCreate(goodsCd) {
 function cfGoodsDelivery(goodsCd) {
 	var Param = new Object();
 	var str = '<div class="pd_pop full_pop pd_delivery_pop" id="layer_goods_delivery"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_delivery_pop" id="layer_goods_delivery" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
 
 	if ($('#layer_goods_delivery').length == 0) {
 		$('body').append(str);
 	}
 
-	cfOpenFullLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
+	if ("P" == _frontGb){
+		cfOpenFullLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
+	}else{
+		cfOpenLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
+	}
+	
+	
 }
 
 /**
@@ -719,13 +745,20 @@ function cfGoodsDelivery(goodsCd) {
 function cfGoodsReview(goodsCd) {
 	var Param = new Object();
 	var str = '<div class="pd_pop full_pop pd_review_pop" id="layer_goods_review"></div>';
-
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_review_pop" id="layer_goods_review" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
 	if ($('#layer_goods_review').length == 0) {
 		$('body').append(str);
-		
+	}
+	
+	if ("P" == _frontGb){
+		cfOpenFullLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review',null , fnReviewLayerCollBack);
+	}else{
+		cfOpenLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review');
 	}
 
-	cfOpenFullLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review',null , fnReviewLayerCollBack);
+	
 }
 
 /**
@@ -1013,6 +1046,24 @@ var cfnGoToPlanDetail = function (planSq) {
     cfnGoToPage(_PAGE_PLANNING_DETAIL + '?planSq=' + planSq);
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 룩북리스트로 이동
+ * <pre>
+ *        cfnGoToLookbookList();
+ * </pre>cfnOpenGoodsPopup
+ * @param  : brandGroupNo - 브랜드그룹번호 , lookbookGb - 룩북(L) or 브랜드룩북(BL)
+ * @since  : 2021/04/06
+ * @author : bin2107
+ */
+var cfnGoToLookbookList = function (lookbookGb, brandGroupNo) {
+	var params = '?lookbookGb='+lookbookGb;
+	if (typeof (brandGroupNo) != 'undefined') params += '?brandCd=' + brandGroupNo;
+
+	cfnGoToPage(_PAGE_LOOKBOOK_MAIN + params);
+}
+
 /**
  * @type   : function
  * @access : public
@@ -1024,9 +1075,9 @@ var cfnGoToPlanDetail = function (planSq) {
  * @since  : 2021/04/06
  * @author : bin2107
  */
-var cfnGoToLookbookDetail = function (lookbookSq, brandGroupNo) {
-	var params = '?lookbookSq=' + lookbookSq;
-	if (typeof (brandGroupNo) != 'undefined') params += '&brandGroupNo=' + brandGroupNo;
+var cfnGoToLookbookDetail = function (lookbookGb, lookbookSq, brandGroupNo) {
+	var params = '?lookbookGb='+lookbookGb+'lookbookSq=' + lookbookSq;
+	if (typeof (brandGroupNo) != 'undefined') params += '&brandCd=' + brandGroupNo;
 
 	cfnGoToPage(_PAGE_LOOKBOOK_DETAIL + params);
 }