Bläddra i källkod

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

xodud1202 5 år sedan
förälder
incheckning
d636698d26
54 ändrade filer med 2647 tillägg och 1379 borttagningar
  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. 22 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  6. 80 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  7. 41 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  8. 40 5
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  9. 41 1
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  10. 8 3
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  11. 80 8
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  12. 30 0
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  13. 7 0
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  14. 22 7
      src/main/java/com/style24/persistence/domain/Plan.java
  15. 24 0
      src/main/java/com/style24/persistence/domain/Review.java
  16. 45 11
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  17. 29 39
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  18. 1 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  19. 144 8
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  20. 64 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  21. 336 143
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  22. 1 1
      src/main/resources/config/application-locp.yml
  23. 4 4
      src/main/resources/config/application-run.yml
  24. 5 5
      src/main/resources/config/application-tsit.yml
  25. 14 0
      src/main/resources/i18n/messages/message_ko_KR.properties
  26. 5 3
      src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html
  27. 167 750
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  28. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  29. 845 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailReviewFormMob.html
  30. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  31. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  32. 63 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewFormMob.html
  33. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  34. 1 1
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  35. 20 6
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  36. 37 96
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  37. 17 5
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  38. 17 22
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  39. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  40. 12 13
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  41. 3 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  42. 77 55
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html
  43. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb_20210330.html
  44. 42 5
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  45. 14 9
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  46. 7 15
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  47. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb_20210329.html
  48. 10 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  49. 13 4
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  50. 5 3
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  51. 104 54
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  52. 28 22
      src/main/webapp/WEB-INF/views/web/popup/RefundAccountAddPopupFormWeb.html
  53. 4 57
      src/main/webapp/biz/mypage.js
  54. 31 6
      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);
 	
 	/**
 	 * 마이페이지 리뷰 등록

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

+ 41 - 1
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;
 	}
 
@@ -473,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;
 	}

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

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

+ 167 - 750
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>
@@ -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>
-											<!-- //상품피커 -->								   
+											</th:block>
 										</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>
 							</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="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">
-										<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="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>   
-							</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 swiper-slide-next">
-										<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>
-								</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(){
+		
 	});
 
 /*]]>*/

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

@@ -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';	

+ 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

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

@@ -27,7 +27,7 @@
 				<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>
+							<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'}+'\';'">

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

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

+ 37 - 96
src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html

@@ -42,7 +42,7 @@
 											<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="fnGoodsPopup([[${goodsItem.sysImgNm}]],[[${goodsItem.brandGroupNm}]],[[${goodsItem.goodsNm}]],[[${goodsItem.listPrice}]],[[${goodsItem.currPrice}]],[[${goodsItem.dcRate}]],[[${goodsItem.goodsCd}]])"><span class="ico ico_picker"></span></button>
+													<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>
@@ -53,6 +53,12 @@
 							<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)원사로 의상을 제작하고, 동물친화적 비건 소재를 활용해 가치소비가 가능할 수 있도록 구성했다.
@@ -60,18 +66,7 @@
 				</div>
 			</div>
 			<div class="content br_lookbook_view cont_items" th:if="${lookbookDetailList != null}">
-				<th:block th:each="item, stat : ${lookbookDetailList}">
-					<th:block th:if="${item.lookbookGoodsList != null and !item.lookbookGoodsList.empty}" th:each="goodsItem, goodsStatus : ${item.lookbookGoodsList}">
-						<div class="cont_head">
-							<h3>룩북 속 상품<span class="number" th:attr="data-idx=${goodsStatus.size}" th:text="${goodsItem.goodsCd}">(9,999)</span></h3>
-							<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
-						</div>
-					</th:block>
-					<div class="cont_head">
-						<h3>룩북 속 상품<span class="number" th:text="${stat.size}">(9,999)</span></h3>
-						<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
-					</div>
-				</th:block>
+
 				<div class="cont_head">
 					<h3>룩북 속 상품<span class="number">(9,999)</span></h3>
 					<button class="btn btn_primary"><span>모두 쇼핑백 담기</span></button>
@@ -223,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 -->
@@ -357,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 */
@@ -377,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: {

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

+ 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

+ 31 - 6
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";					// 마이페이지 > 포인트
@@ -745,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);
+	
 }
 
 /**
@@ -1039,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
@@ -1050,8 +1075,8 @@ var cfnGoToPlanDetail = function (planSq) {
  * @since  : 2021/04/06
  * @author : bin2107
  */
-var cfnGoToLookbookDetail = function (lookbookSq, brandGroupNo) {
-	var params = '?lookbookSq=' + lookbookSq;
+var cfnGoToLookbookDetail = function (lookbookGb, lookbookSq, brandGroupNo) {
+	var params = '?lookbookGb='+lookbookGb+'lookbookSq=' + lookbookSq;
 	if (typeof (brandGroupNo) != 'undefined') params += '&brandCd=' + brandGroupNo;
 
 	cfnGoToPage(_PAGE_LOOKBOOK_DETAIL + params);