Преглед на файлове

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

swkim преди 5 години
родител
ревизия
24b8170430
променени са 30 файла, в които са добавени 1047 реда и са изтрити 583 реда
  1. 10 0
      src/main/java/com/style24/front/biz/dao/TsfWishlistDao.java
  2. 36 12
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  3. 1 1
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  4. 14 0
      src/main/java/com/style24/front/biz/service/TsfWishlistService.java
  5. 24 5
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  6. 1 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  7. 14 20
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  8. 13 10
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  9. 1 0
      src/main/java/com/style24/persistence/domain/Goods.java
  10. 53 64
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  11. 27 12
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  12. 15 10
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  13. 116 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  14. 106 76
      src/main/webapp/WEB-INF/views/mob/display/CategoryGoodsListFormMob.html
  15. 15 9
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html
  16. 184 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewDetailFormMob.html
  17. 178 221
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  18. 4 5
      src/main/webapp/WEB-INF/views/mob/social/SocialMainFormMob.html
  19. 5 4
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  20. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  21. 1 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  22. 28 66
      src/main/webapp/WEB-INF/views/web/planning/PlanningCouponDetailFormWeb.html
  23. 17 9
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  24. 13 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  25. 95 0
      src/main/webapp/biz/goods.js
  26. 1 1
      src/main/webapp/ux/mo/css/common_m.css
  27. 39 19
      src/main/webapp/ux/mo/css/layout_m.css
  28. 1 0
      src/main/webapp/ux/mo/css/style24_m.css
  29. 1 1
      src/main/webapp/ux/mo/js/common_m.js
  30. 33 32
      src/main/webapp/ux/style24_link.js

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

@@ -33,4 +33,14 @@ public interface TsfWishlistDao {
 	 * @date 2021. 3. 29
 	 */
 	Collection<Goods> getWishListGoodsList(WishList wishList);
+	
+	/**
+	 * 위시리스트 퀵 상품목록
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 5. 13
+	 */
+	Collection<Goods> getQuickWishList(WishList wishList);
 }

+ 36 - 12
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -499,34 +499,59 @@ public class TsfCouponService {
 	 * @since 2021.02.25
 	 */
 	@Transactional("shopTxnManager")
-	public int getPlanCouponInfo(Coupon coupon) {
-		int count = 0;
-
+	public String getPlanCouponInfo(Coupon coupon) {
+		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
+		coupon.setFrontGb(TsfSession.getFrontGb());
+		coupon.setCustGb(TsfSession.getCustGb());
+		coupon.setCustNo(TsfSession.getInfo().getCustNo());
+		coupon.setCustGrade(TsfSession.getInfo().getCustGrade());
+		String result = "SUCESS";
 		Collection<Coupon> couponList = couponDao.getPlanCouponInfo(coupon);
+		
+		
+		if (couponList == null || couponList.isEmpty()) {
+			result = "ERROR_10";
+			return result;
+		}
+		Coupon temp = couponList.iterator().next();
+		temp.setCustNo(TsfSession.getInfo().getCustNo());
+		
+		
+		if (temp.getTotPubLimitQty() > 0) {
+			if (temp.getCustPubLimitQty() <= temp.getCustCouponCnt()) {
+				result = "ERROR_30";
+				return result;
+			}
+		}
+		// 첫구매여부 (Y:구매이력이없음 | N:구매이력있음) - 구매기간일자 해당기간에 구매이력이 없으면 다운로드 가능
+		if ("Y".equals(temp.getFirstOrdYn())) {
+			int firstOrdcnt = orderService.getCustFirstOrderCount(temp);
+			if (firstOrdcnt > 0) {
+				//log.info("상품쿠폰 다운  skip: 쿠폰첫구매정보 : {}, {} ~ {} ", coupon.getFirstOrdYn(), coupon.getBuyStdt(), coupon.getBuyEddt());
+				result = "ERROR_20";
+				return result;
+			}
+		}
 
 		for (Coupon tmpCoupon : couponList) {
 			//int downloadCnt = tmpCoupon.getDownloadCnt();
 			for (int i = 0; i < couponList.size(); i++) {
 				if (couponList.iterator().next().getOwnCoupon() == 0) {
 					CustCoupon custCoupon = new CustCoupon();
-					custCoupon.setCustNo(tmpCoupon.getCustNo());
+					custCoupon.setCustNo(TsfSession.getInfo().getCustNo());
 					custCoupon.setCpnId(tmpCoupon.getCpnId());
 					custCoupon.setAvailStdt(tmpCoupon.getAvailStdt());
 					custCoupon.setAvailEddt(tmpCoupon.getAvailEddt());
 					custCoupon.setPubReason(TscConstants.PubReason.DOWNLOAD.value());
 					custCoupon.setEndAlimSendYn("N");		// 알림 발송 여부(발송되면 Y)
-					custCoupon.setRegNo(tmpCoupon.getCustNo());
-					custCoupon.setUpdNo(tmpCoupon.getCustNo());
+					custCoupon.setRegNo(TsfSession.getInfo().getCustNo());
+					custCoupon.setUpdNo(TsfSession.getInfo().getCustNo());
 
 					coreCouponDao.saveCouponCustPub(custCoupon);
-
-					count++;
-
 				}
 			}
 		}
-
-		return count;
+		return result;
 	}
 
 	/*
@@ -769,7 +794,6 @@ public class TsfCouponService {
 		Collection<Coupon> quickCouponList = couponDao.getQuickCouponDownList(coupon);
 		
 		Coupon temp = quickCouponList.iterator().next();
-		System.out.println(temp);
 		String result = "SUCESS";
 
 		if (quickCouponList == null || quickCouponList.isEmpty()) {

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

@@ -291,7 +291,7 @@ public class TsfPlanningService {
 	 * @since 2021.03.24
 	 */
 	@Transactional("shopTxnManager")
-	public int getPlanCouponDownInfo(Coupon coupon) {
+	public String getPlanCouponDownInfo(Coupon coupon) {
 		return couponService.getPlanCouponInfo(coupon);
 	}
 

+ 14 - 0
src/main/java/com/style24/front/biz/service/TsfWishlistService.java

@@ -53,4 +53,18 @@ public class TsfWishlistService {
 		wishList.setCustNo(login.getCustNo());
 		return wishListDao.getWishListGoodsList(wishList);
 	}
+	
+	/**
+	 * 위시리스트 퀵 상품목록
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 5. 13
+	 */
+	public Collection<Goods> getQuickWishList(WishList wishList){
+		Login login = TsfSession.getInfo();
+		wishList.setCustNo(login.getCustNo());
+		return wishListDao.getQuickWishList(wishList);
+	}
 }

+ 24 - 5
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -29,6 +29,7 @@ import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.biz.service.TsfSocialService;
 import com.style24.front.biz.thirdparty.SearchEngineDiquest;
 import com.style24.front.support.controller.TsfBaseController;
+import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.BrandGroup;
@@ -49,6 +50,7 @@ import com.style24.persistence.domain.searchengine.SearchEngine;
 import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.util.GagaCookieUtil;
 
 /**
  * 전시 Controller
@@ -322,9 +324,9 @@ public class TsfDisplayController extends TsfBaseController {
 			if ("SBM011".equals(brandMain.getContentsLoc()) || "SBMM011".equals(brandMain.getContentsLoc())) {
 				Plan plan = new Plan();
 				plan.setBrandGroupNo(Integer.parseInt(paramMap.get("brandGroupNo")));
-				if("SBM011".equals(brandMain.getContentsLoc())){
+				if ("SBM011".equals(brandMain.getContentsLoc())) {
 					plan.setMaxRow(6);
-				}else{
+				} else {
 					plan.setMaxRow(2);
 				}
 				plan.setFrontGb(TsfSession.getFrontGb());
@@ -931,11 +933,28 @@ public class TsfDisplayController extends TsfBaseController {
 	public ModelAndView searchLayerForm() {
 		ModelAndView mav = new ModelAndView();
 
-		//TODO : 이걸로 적용해야함
-//		mav.addObject("trendKeywordList",diquest.getTrendKeywordList());
-		mav.addObject("trendKeywordList",null);
+		// 최근검색어 목록
+		Collection<String> recentlyKeywordList = new ArrayList<>();
+		String ckKeywords = GagaCookieUtil.getCookie(TsfSession.getHttpServletRequest(), TsfConstants.CK_PREFIX + "_today_keyword");
+		if (StringUtils.isNotBlank(ckKeywords)) {
+			String[] arrKeywords = ckKeywords.split("\\,");
+			StringBuilder sql = new StringBuilder();
+			if (arrKeywords.length > 0) {
+				for (String keyword : arrKeywords) {
+					if (!StringUtils.isBlank(keyword)) {
+						recentlyKeywordList.add(keyword);
+					}
+				}
+			}
+		}
+		mav.addObject("recentlyKeywordList", recentlyKeywordList);
+
+		// 인기검색어: TODO 아래 주석된 것으로 적용해야 함
+//		mav.addObject("trendKeywordList", diquest.getTrendKeywordList());
+		mav.addObject("trendKeywordList", null);
 
 		mav.setViewName(super.getDeviceViewName("display/SearchLayer"));
 		return mav;
 	}
+
 }

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

@@ -1503,7 +1503,7 @@ public class TsfGoodsController extends TsfBaseController {
 		wish.setCustGb(TsfSession.getCustGb());
 		wish.setQuickYn("Y");
 		// 위시리스트 상품목록
-		wishList = wishListService.getWishListGoodsList(wish);
+		wishList = wishListService.getQuickWishList(wish);
 		return wishList;
 	}
 

+ 14 - 20
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1650,9 +1650,7 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/complete/review/list")
 	@ResponseBody
 	public GagaMap getMypageCompleteReviewList(@RequestBody Review review) {
-		String frontGb = TsfSession.getFrontGb();
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
-		review.setFrontGb(frontGb);
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
 		}
@@ -1661,15 +1659,13 @@ public class TsfMypageController extends TsfBaseController {
 		review.setReviewExpireDay(reviewExpireDay);
 		result.set("completeReviewCount", reviewService.getCompleteReviewList(review).size());
 		
-		if (frontGb == "P") {
-			TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
-			pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
-			review.setPageable(pageable);
-			
-			result.set("paging1", review);
-		}
-		
-		
+		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
+		int totalCnt = reviewService.getCompleteReviewList(review).size();
+		pageable.setTotalCount(totalCnt);
+		review.setPageable(pageable);
+		result.set("paging1", review);
+		result.set("totalCnt", totalCnt);
+		result.set("endRow", pageable.getEndRow());
 		result.set("dataList1", reviewService.getCompleteReviewList(review));
 
 		return result;
@@ -1685,9 +1681,7 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/already/review/list")
 	@ResponseBody
 	public GagaMap getMypageAlreadyReviewList(@RequestBody Review review) {
-		String frontGb = TsfSession.getFrontGb();
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
-		review.setFrontGb(frontGb);
 		GagaMap result = new GagaMap();
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
@@ -1695,13 +1689,13 @@ public class TsfMypageController extends TsfBaseController {
 		
 		review.setReviewExpireDay(eventService.getGoodsReviewPointExpireDays(TscConstants.Site.STYLE24.value()));
 		result.set("alreadyReviewCount", reviewService.getAlreadyReviewList(review).size());
-		if (frontGb == "P") {
-			TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
-			pageable2.setTotalCount(reviewService.getAlreadyReviewList(review).size());
-			review.setPageable2(pageable2);
-			result.set("paging2", review);
-		}
-		
+		TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
+		int totalCnt = reviewService.getAlreadyReviewList(review).size();
+		pageable2.setTotalCount(totalCnt);
+		review.setPageable2(pageable2);
+		result.set("paging2", review);
+		result.set("totalCnt", totalCnt);
+		result.set("endRow", pageable2.getEndRow());
 		result.set("dataList2", reviewService.getAlreadyReviewList(review));
 
 		return result;

+ 13 - 10
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -261,14 +261,14 @@ public class TsfPlanningController extends TsfBaseController {
 	 * @author sowon	
 	 * @since 2021. 04. 14
 	 */
-	@PostMapping(value = "/coupon/detailPop")
+	@PostMapping(value = "/coupon/detailpop")
 	public ModelAndView planningCouponDetailPop(@RequestBody Coupon coupon) {
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 - 기본정보
 		mav.addObject("couponDetailInfo", couponService.getPlanCouponDetailInfo(coupon));
 		
-		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailForm"));
+		mav.setViewName(super.getDeviceViewName("planning/PlanningCouponDetailForm"));
 		return mav;
 	}
 	
@@ -374,18 +374,21 @@ public class TsfPlanningController extends TsfBaseController {
 		coupon.setCustGrade(customer.getCustGrade());
 		coupon.setCustNo(customer.getCustNo());
 		// 등급쿠폰 다운 처리
-		int count = planningService.getPlanCouponDownInfo(coupon);
+		String couponResult = planningService.getPlanCouponDownInfo(coupon);
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
-		if (count == 0) {
-			result.set("message", message.getMessage("COUPON_0002"));
-			result.set("cpnId", coupon.getCpnId());
-		} else {
-			result.set("message", message.getMessage("COUPON_0001", new Object[] {count}));
-			result.set("cpnId", coupon.getCpnId());
+		if ("ERROR_10".equals(couponResult)) {
+			result.set("message", "발급가능 쿠폰이 없습니다.");
+		}else if("ERROR_20".equals(couponResult)){
+			result.set("message", "죄송합니다. 해당 쿠폰은 다운로드가 불가합니다.");
+		}else if("ERROR_30".equals(couponResult)){
+			result.set("message", "죄송합니다. 해당 쿠폰은 다운로드가 불가합니다.");
+		}else {
+			result.set("message", "쿠폰이 발급되었습니다.");
 		}
-
+		
+		result.set("couponList", planningService.getPlanCouponInfo(coupon));
 		return result;
 	}
 

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

@@ -107,6 +107,7 @@ public class Goods extends TscBaseDomain {
 	private String sysImgNm2;	//상품마우스오버이미지
 	private String logoFileNm;	//브랜드로고이미지
 	private int stockQty;		//재고
+	private int stockQtySum;		//재고
 	private String soldoutYn;	//품절여부
 	private String wishYn;		//위시리스트여부
 	private String goodsComposeSearchYn;	//구성상품 조회여부

+ 53 - 64
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -998,11 +998,6 @@
 		                       END)                              AS EXPIRE_YN /*만료여부*/
 		            FROM   TB_CUST_COUPON CC
 		            WHERE  1 = 1
-		          <!--   <if test="planCouponStat == null and planCouponStat == ''"> -->
-		            AND    CC.CUST_NO = #{custNo}
-		            <!-- </if> -->
-		            AND    CC.USED_DT IS NULL /*사용하지않은쿠폰만*/
-		            AND    CC.AVAIL_EDDT >= DATE_ADD(NOW(), INTERVAL -3 MONTH) /*최근3개월쿠폰만*/
 		            GROUP  BY CC.CPN_ID, DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i'), DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i')
 		           ) CC
 		         , TB_COUPON C
@@ -1189,65 +1184,59 @@
 	<!-- 기획전 다운가능 쿠폰 정보 조회 -->
 	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
 		/* TsfCoupon.getPlanCouponInfo */
-		SELECT Z.CUST_NO
-		     , Z.CPN_ID
-		     , Z.AVAIL_STDT
-		     , Z.AVAIL_EDDT
-		     , Z.END_ALIM_YN
-		     , Z.DOWNLOAD_CNT
-		     , Z.OWN_COUPON
-		  FROM (SELECT A.*
-		            , CASE WHEN A.CNT <![CDATA[<=]]> 0 THEN 0
-		                   WHEN A.CNT > (A.DN_ABLE_CNT * A.ONE_PUB_QTY) THEN (A.DN_ABLE_CNT * A.ONE_PUB_QTY)
-		                   ELSE A.CNT
-		               END AS DOWNLOAD_CNT
-		        FROM (SELECT #{custNo} AS CUST_NO
-		                  , C.CPN_ID
-		                   , C.CPN_NM
-		                   , C.CUST_PUB_LIMIT_QTY
-		                   , C.ONE_PUB_QTY
-		                   , IF(C.PD_GB = 'P', C.AVAIL_STDT, NOW()) AS AVAIL_STDT
-		                   , IF(C.PD_GB = 'P', C.AVAIL_EDDT, CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59')) AS AVAIL_EDDT
-		                   , C.END_ALIM_YN
-		                   , IFNULL(CC.CPN_CNT, 0) AS DN_CNT
-		                   , IF(C.CUST_PUB_LIMIT_QTY = 0 OR C.CUST_PUB_LIMIT_QTY - CC.CPN_CNT > 0, 1, 0) AS DN_ABLE_CNT
-		                   , IF(C.TOT_PUB_LIMIT_QTY > 0, C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT, 99999) AS CNT
-		                   , (SELECT COUNT(*) FROM TB_CUST_COUPON TCC WHERE CPN_ID = #{cpnId} AND CUST_NO = #{custNo}) AS OWN_COUPON
-		                FROM TB_COUPON C
-		               INNER JOIN TB_COUPON_CUST_GBN CCGB
-		                ON C.CPN_ID = CCGB.CPN_ID
-		               AND CCGB.USABLE_CUST_GB = #{custGb}
-		               INNER JOIN TB_COUPON_CUST_GRADE CCGR
-		                ON C.CPN_ID = CCGR.CPN_ID
-		               AND CCGR.USABLE_CUST_GRADE = #{custGrade}
-		                LEFT OUTER JOIN (SELECT CPN_ID
-		                                     , CUST_NO
-		                                     , COUNT(*) AS CPN_CNT
-		                                  FROM TB_CUST_COUPON
-		                                 GROUP BY CPN_ID, CUST_NO) CC
-		                    ON C.CPN_ID = CC.CPN_ID
-		                     AND CC.CUST_NO = #{custNo}
-		                    LEFT OUTER JOIN (SELECT CPN_ID
-		                                          , COUNT(*) AS CPN_CNT
-		                                     FROM TB_CUST_COUPON
-		                                    GROUP BY CPN_ID) CC2
-		                    ON C.CPN_ID = CC2.CPN_ID
-		               WHERE C.CPN_ID IN (
-		                                    SELECT PCI.ITEM_VAL 
-		                                    FROM TB_PLAN_CONTENTS_ITEM PCI 
-		                                    WHERE PCI.ITEM_VAL = #{cpnId}
-		                                  ) 
-		                 AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
-		                 AND C.CPN_STAT = 'G232_11'  -- 진행
-		                 AND CASE WHEN C.TOT_PUB_LIMIT_QTY = 0 THEN 1
-		                          WHEN C.TOT_PUB_LIMIT_QTY - CC2.CPN_CNT > 0 THEN 1
-		                          ELSE 0
-		                            END = 1
-		                 AND IF(C.NEW_CUST_YN = 'Y', (SELECT COUNT(*) FROM TB_CUSTOMER WHERE CUST_NO = #{custNo} AND REG_DT BETWEEN C.CUST_JOIN_STDT AND C.CUST_JOIN_EDDT), 1) = 1
-		                 AND IF(C.FIRST_ORD_YN = 'Y', (SELECT COUNT(*) FROM TB_ORDER WHERE CUST_NO = #{custNo} AND ORD_DT BETWEEN C.BUY_STDT AND C.BUY_EDDT), 0) = 0
-		              ) A
-		     ) Z
-		 <!-- WHERE Z.DOWNLOAD_CNT <![CDATA[>=]]> 0 -->
+		SELECT C.CPN_ID 
+		      ,C.CPN_NM 
+		      ,C.CPN_DESC       
+		      ,C.CPN_TYPE 
+		      ,C.BUY_LIMIT_AMT 
+		      ,C.CUST_PUB_LIMIT_QTY 
+		      ,C.TOT_PUB_LIMIT_QTY
+		      ,C.MAX_DC_AMT 
+		      ,C.FIRST_ORD_YN
+		      , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
+		      , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
+		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
+		              END
+		             ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
+		                   ELSE CONCAT('최대 ',FORMAT(C.MAX_DC_AMT , 0),'원 할인')
+		              END)     AS USE_CONDITION  /*사용조건*/
+		     , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
+		            ELSE CONCAT('1인당 최대',C.CUST_PUB_LIMIT_QTY,'매')
+		       END             AS ISSUE_CONDITION /*발급수량*/
+		      ,CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
+		            WHEN #{frontGb} = 'M' THEN C.DC_MVAL
+		            WHEN #{frontGb} = 'A' THEN C.DC_AVAL
+		            ELSE C.DC_AVAL
+		            END                                       AS DC_VAL
+		      ,CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
+		                    ELSE '%'
+		                    END                                      AS DC_WAY    /*할인방법*/
+		      ,C.PD_GB 
+		      ,IF (C.PD_GB = 'D', NOW(), C.AVAIL_STDT) AS AVAIL_STDT
+		      ,IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT) AS AVAIL_EDDT
+		FROM TB_COUPON C
+		WHERE 1=1
+		AND C.CPN_STAT = 'G232_11'
+		AND C.CPN_ID = #{cpnId}
+		AND C.SITE_CD = #{siteCd}
+		AND C.CPN_TYPE IN ('G230_11','G230_12','G230_13','G230_14','G230_20','G230_30')
+		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
+		AND NOW()  <![CDATA[<=]]> IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
+		AND (CASE WHEN 'P' = 'P' THEN C.DC_PVAL
+		         WHEN 'M' = 'P' THEN C.DC_MVAL
+		     ELSE C.DC_AVAL END) > 0                  -- PC, MOBILE,APP 별로 0 보다 큰 쿠폰
+		AND IF (C.TOT_PUB_LIMIT_QTY = 0, 9999999999,C.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID) -- 총발행제한수
+		AND IF (C.CUST_PUB_LIMIT_QTY = 0, 9999999999,C.CUST_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO= #{custNo}) -- 고객당발행제한수량
+		AND (SELECT COUNT(1)
+		     FROM TB_COUPON_CUST_GBN
+		     WHERE CPN_ID = C.CPN_ID
+		     AND USABLE_CUST_GB IN (#{custGb})              -- 사용가능고객구분
+		     ) <![CDATA[>=]]> 1
+		AND (SELECT COUNT(1)
+		     FROM TB_COUPON_CUST_GRADE
+		     WHERE CPN_ID = C.CPN_ID
+		     AND USABLE_CUST_GRADE IN (#{custGrade})              -- 사용가능고객구분
+		     ) <![CDATA[>=]]> 1
 	</select>
 
 	<!--회원등급쿠폰 정보-->

+ 27 - 12
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -755,6 +755,13 @@
 	
 	<select id="getPlanCouponInfo" parameterType="Coupon" resultType="Coupon">
 		/* TsfPlanning.getPlanCouponInfo*/
+		SELECT  Z.*
+		       ,CASE CUST_PUB_LIMIT_QTY WHEN 0 THEN '쿠폰받기'
+		                                WHEN CUST_PUB_LIMIT_QTY > CUST_COUPON_CNT THEN '쿠폰받기' 
+		                                WHEN CUST_PUB_LIMIT_QTY = CUST_COUPON_CNT THEN '받기완료'
+		        ELSE '쿠폰받기' END AS COUPON_STAT
+		FROM 
+		(
 		SELECT C.CPN_ID 
 		      ,C.CPN_NM 
 		      ,C.CPN_DESC       
@@ -763,8 +770,11 @@
 		      ,C.CUST_PUB_LIMIT_QTY 
 		      ,C.TOT_PUB_LIMIT_QTY
 		      ,C.MAX_DC_AMT 
+		      ,C.CPN_STAT 
+		      ,C.REG_DT
 		      ,PC.NOTE 
 		      ,PC.TITLE
+		      , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
 		      , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
 		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
 		              END
@@ -785,25 +795,27 @@
 		      ,C.PD_GB 
 		      ,IF (C.PD_GB = 'D', NOW(), C.AVAIL_STDT) AS AVAIL_STDT
 		      ,IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT) AS AVAIL_EDDT
-		      ,(CASE WHEN CC.CPN_ID IS NULL THEN '쿠폰받기' ELSE '받기완료' END ) AS COUPON_STAT
 		FROM TB_PLAN_CONTENTS PC 
-		                 INNER JOIN TB_PLAN_CONTENTS_ITEM PCI ON PC.PLAN_CONT_SQ = PCI.PLAN_CONT_SQ 
-		                 INNER JOIN TB_COUPON C ON PCI.ITEM_VAL = C.CPN_ID 
-		                 LEFT JOIN TB_CUST_COUPON CC ON C.CPN_ID = CC.CPN_ID 
+		             INNER JOIN TB_PLAN_CONTENTS_ITEM PCI ON PC.PLAN_CONT_SQ = PCI.PLAN_CONT_SQ 
+		             INNER JOIN TB_COUPON C ON PCI.ITEM_VAL = C.CPN_ID 
+		             LEFT JOIN TB_CUST_COUPON CC ON C.CPN_ID = CC.CPN_ID 
 		WHERE 1=1
-		AND C.CPN_STAT = 'G232_11'
+		<if test="planSq != null and planSq != ''">
+		AND PC.PLAN_SQ = #{planSq}
+		</if>
+		AND C.CPN_STAT ='G232_11'
 		AND C.SITE_CD = #{siteCd}
+		<if test="cpnId != null and cpnId != ''">
+		AND C.CPN_ID  = #{cpnId}
+		</if>
+		AND C.CPN_TYPE IN ('G230_11','G230_12','G230_13','G230_14','G230_20','G230_30')
 		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
-		AND NOW()   <![CDATA[<=]]>  IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
-		AND (CASE WHEN 'P' = 'P' THEN C.DC_PVAL
-		         WHEN 'M' = 'P' THEN C.DC_MVAL
+		AND NOW()  <![CDATA[<=]]>  IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
+		AND (CASE WHEN 'P' = #{frontGb} THEN C.DC_PVAL
+		          WHEN 'M' = #{frontGb} THEN C.DC_MVAL
 		     ELSE C.DC_AVAL END) > 0                  -- PC, MOBILE,APP 별로 0 보다 큰 쿠폰
-		AND PC.PLAN_SQ = #{planSq}
 		AND PC.DISP_YN ='Y'
 		AND IF (C.TOT_PUB_LIMIT_QTY = 0, 9999999999,C.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID) -- 총발행제한수
-		<if test="custNo != null and custNo > 0">
-		AND IF (C.CUST_PUB_LIMIT_QTY = 0, 9999999999,C.CUST_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO=  #{custNo}) -- 고객당발행제한수량
-		</if>
 		GROUP BY    C.CPN_ID 
 		           ,C.CPN_NM 
 		           ,C.CPN_DESC       
@@ -812,8 +824,11 @@
 		           ,C.CUST_PUB_LIMIT_QTY 
 		           ,C.TOT_PUB_LIMIT_QTY
 		           ,C.MAX_DC_AMT
+		           ,C.REG_DT
 		           ,PC.NOTE 
 		           ,PC.TITLE
+		)Z
+	  ORDER BY  Z.REG_DT DESC ,Z.AVAIL_EDDT ASC LIMIT 10
 	</select>
 	
 	<select id="getPlanImageInfo" parameterType="Plan" resultType="Plan">

+ 15 - 10
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -21,6 +21,19 @@
 		</choose>
 	</sql>
 	
+		<sql id="selectForPagingFooter2">
+		<choose>
+		<when test="pageable2 != null">
+		    ) ORIGINAL
+		WHERE RNUM BETWEEN  #{pageable2.startRow} AND #{pageable2.endRow}
+		</when>
+		<otherwise>
+		    ) ORIGINAL
+		</otherwise>
+		</choose>
+	</sql>
+	
+	
 	<!-- 상품 리뷰 목록 count -->
 	<select id="getReviewTotalCount" parameterType="Review" resultType="int">
 		/* TsfReivew.getReviewTotalCount */
@@ -346,9 +359,7 @@
 	<!-- 마이페이지 작성가능한 리뷰 -->
 	<select id="getCompleteReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getCompleteReviewList */
-		<if test='frontGb == "P"'>
 		<include refid="selectForPagingHeader"/>
-		</if>
 		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(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
@@ -480,9 +491,7 @@
 				, 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
-		<if test='frontGb == "P"'>
 		<include refid="selectForPagingFooter"/>
-		</if>
 	</select>
 	
 	<!-- 마이페이지 리뷰작성 상품데이타 -->
@@ -930,9 +939,7 @@
 	
 	<select id="getAlreadyReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getAlreadyReviewList */
-		<if test='frontGb == "P"'>
 		<include refid="selectForPagingHeader"/>
-		</if>
 		        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(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
@@ -1144,9 +1151,7 @@
 		        , 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, Z.REVIEW_SQ 
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
-		<if test='frontGb == "P"'>
-		<include refid="selectForPagingFooter"/>
-		</if>
+		<include refid="selectForPagingFooter2"/>
 		</select>
 	
 	<select id="getReviewAttach" parameterType="Review" resultType="Review">
@@ -1297,7 +1302,7 @@
 		SELECT COUNT(*) AS COUNT
 		FROM TB_REVIEW 
 		WHERE CUST_NO = #{custNo}
-		AND DEL_YN = 'Y'
+		-- AND DEL_YN = 'Y'
 		AND PNT_GIVE_STAT = 'G043_30'
 		AND ORD_NO        = #{ordNo}
 		AND ORD_DTL_NO    = #{ordDtlNo}

+ 116 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml

@@ -166,9 +166,122 @@
 		    LEFT OUTER JOIN TAB_GOODS_BENEFIT GB ON PG.GOODS_CD = GB.GOODS_CD
 		    )Z
 		ORDER BY Z.REG_DT DESC
-		<if test="quickYn != null and quickYn != ''">
-			,Z.STOCK_QTY
-		</if>
+	</select>
+	
+	<select id="getQuickWishList" parameterType="WishList" resultType="Goods">
+		/* TsfWishlist.getQuickWishList*/
+		SELECT Z.*
+		FROM
+		(
+		WITH TAB_PLAN_GOODS AS (
+		    SELECT W.AF_LINK_CD 
+		          ,W.CONTENTS_LOC 
+		          ,W.CUST_NO 
+		          ,W.REG_DT
+		          ,CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                    BG.BRAND_GROUP_ENM
+		                ELSE
+		                    BG.BRAND_GROUP_KNM
+		           END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		         , G.GOODS_CD                                               /*상품코드*/
+		         , G.GOODS_NM                                               /*상품명*/
+		         , G.GOODS_GB                                               /*상품구분*/
+		         , G.GOODS_TYPE 											/*상품타입*/
+		         , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		         , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		         , G.GOODS_TNM                                              /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		         , G.CURR_PRICE                                             /*현재판매가*/
+		         , G.MIN_ORD_QTY                                            /*최소주문수량*/  				
+		    FROM   TB_WISHlIST W
+		         , TB_GOODS G 
+		         , TB_GOODS_STOCK GS
+		         , TB_BRAND B
+		         , TB_BRAND_GROUP BG
+		    WHERE  W.GOODS_CD = G.GOODS_CD 
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
+		    AND    B.USE_YN = 'Y'
+		    AND    BG.USE_YN = 'Y'
+		    AND    W.CUST_NO =  #{custNo}
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT
+		    GROUP BY W.AF_LINK_CD 
+		          ,W.CONTENTS_LOC 
+		          ,W.CUST_NO 
+		          ,W.REG_DT
+		         , G.GOODS_CD                                               /*상품코드*/
+		         , G.GOODS_NM                                               /*상품명*/
+		         , G.GOODS_GB                                               /*상품구분*/
+		         , G.GOODS_TYPE 											/*상품타입*/
+		         , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		         , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		         , G.GOODS_TNM                                              /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		         , G.CURR_PRICE                                             /*현재판매가*/
+		         , G.MIN_ORD_QTY                                            /*최소주문수량*/  				
+		)
+		, TAB_GOODS_IMG AS (
+		    SELECT PG.GOODS_CD
+		         , MAX(CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END)   AS SYS_IMG_NM
+		    FROM   TAB_PLAN_GOODS PG
+		         , TB_GOODS_IMG GI
+		    WHERE  PG.GOODS_CD = GI.GOODS_CD
+		    AND    PG.MAIN_COLOR_CD = GI.COLOR_CD
+		    AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
+		    GROUP  BY PG.GOODS_CD
+		)
+		, TAB_STOCK AS (
+		   SELECT PG.GOODS_CD
+		         , SUM(case WHEN S.SOLDOUT_YN = 'Y' THEN 0
+		                    ELSE S.CURR_STOCK_QTY - S.BASE_STOCK_QTY END ) AS STOCK_QTY_SUM
+		         , MIN(CASE WHEN S.SOLDOUT_YN = 'N' THEN S.OPT_CD ELSE 'XXX' END) AS OPT_CD 
+		    FROM   TAB_PLAN_GOODS PG
+		         , VW_STOCK S
+		    WHERE  PG.GOODS_CD = S.GOODS_CD
+		    AND    PG.GOODS_TYPE = 'G056_N'
+		    AND    S.DISP_YN = 'Y' /*노출하는상품만*/
+		    GROUP  BY PG.GOODS_CD
+		    UNION ALL 
+		    SELECT PG.GOODS_CD
+		         , SUM(CASE WHEN S.SOLDOUT_YN = 'Y' THEN 0
+		                    ELSE S.CURR_STOCK_QTY - S.BASE_STOCK_QTY END ) AS STOCK_QTY_SUM
+		         , MIN(CASE WHEN S.SOLDOUT_YN = 'N' THEN S.OPT_CD ELSE 'XXX' END) AS OPT_CD 
+		    FROM   TAB_PLAN_GOODS PG
+		         , VW_STOCK_COMPOSE S
+		    WHERE  PG.GOODS_CD = S.GOODS_CD
+		    AND    PG.GOODS_TYPE != 'G056_N'
+		    AND    S.DISP_YN = 'Y' /*노출하는상품만*/
+		    GROUP  BY PG.GOODS_CD		
+		  )
+		    SELECT 
+		           PG.BRAND_GROUP_NM
+		         , PG.GOODS_CD
+		         , PG.MIN_ORD_QTY
+		         , PG.GOODS_TYPE
+		         , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		         , PG.GOODS_NM
+		         , PG.GOODS_TNM
+		         , PG.MAIN_COLOR_CD
+		         , PG.LIST_PRICE
+		         , PG.AF_LINK_CD 
+		         , PG.CONTENTS_LOC 
+		         , PG.CUST_NO 
+		         , PG.REG_DT
+		         , FN_GET_BENEFIT_PRICE( 'P' /**P*/,PG.GOODS_CD,PG.CURR_PRICE, 'G100_10' /**P*/)                     AS CURR_PRICE    /*현재판매가*/
+		         , GI.SYS_IMG_NM
+		         , S.STOCK_QTY_SUM
+		         , S.OPT_CD 
+		    	FROM   TAB_PLAN_GOODS PG
+		    INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
+		    LEFT OUTER JOIN TAB_STOCK S ON PG.GOODS_CD = S.GOODS_CD
+		    )Z
+		ORDER BY Z.STOCK_QTY_SUM ASC,Z.REG_DT DESC
 	</select>
 	
 

+ 106 - 76
src/main/webapp/WEB-INF/views/mob/display/CategoryGoodsListFormMob.html

@@ -194,82 +194,82 @@
 										</ul>
 									</div>
 								</li>
-								<li class="price">
+								<li class="price" id="priceFilterDiv">
 									<a href="javascript:void(0)" class="daps1">가격<!--<span class="pic">230,000원~487,000원, 700,000원~990,000원</span>--></a>
-									<ul class="daps2">
-										<li>
-											<a href="javascript:void(0)">
-												<div class="form_field">
-													<div>
-														<input id="price1" type="checkbox"><label for="price1"> <span>9천원 이하</span> </label>
-													</div>
-												</div>
-											</a>
-										</li>
-										<li>
-											<a href="javascript:void(0)">
-												<div class="form_field">
-													<div>
-														<input id="price2" type="checkbox"><label for="price2"> <span>9천원 ~ 23만원</span> </label>
-													</div>
-												</div>
-											</a>
-										</li>
-										<li>
-											<a href="javascript:void(0)">
-												<div class="form_field">
-													<div>
-														<input id="price3" type="checkbox" checked><label for="price3"> <span>23만원 ~ 48만원 7천원</span> </label>
-													</div>
-												</div>
-											</a>
-										</li>
-										<li>
-											<a href="javascript:void(0)">
-												<div class="form_field">
-													<div>
-														<input id="price4" type="checkbox" ><label for="price4"> <span>48만원 7천원 ~ 79만원</span> </label>
-													</div>
-												</div>
-											</a>
-										</li>
-										<li>
-											<a href="javascript:void(0)">
-												<div class="form_field">
-													<div>
-														<input id="price5" type="checkbox" checked><label for="price5"> <span>70만원 ~ 99만원</span> </label>
-													</div>
-												</div>
-											</a>
-										</li>
-										<li>
-											<a href="javascript:void(0)">
-												<div class="form_field">
-													<div>
-														<input id="price6" type="checkbox"><label for="price6"> <span>99만원 ~ 136만원</span> </label>
-													</div>
-												</div>
-											</a>
-										</li>
-										<li>
-											<a href="javascript:void(0)">
-												<div class="form_field">
-													<div>
-														<input id="price7" type="checkbox"><label for="price7"> <span>136만원 ~ 179만원 9천원</span> </label>
-													</div>
-												</div>
-											</a>
-										</li>
+									<ul class="daps2" id="priceArea">
+<!--										<li>-->
+<!--											<a href="javascript:void(0)">-->
+<!--												<div class="form_field">-->
+<!--													<div>-->
+<!--														<input id="price1" type="checkbox"><label for="price1"> <span>9천원 이하</span> </label>-->
+<!--													</div>-->
+<!--												</div>-->
+<!--											</a>-->
+<!--										</li>-->
+<!--										<li>-->
+<!--											<a href="javascript:void(0)">-->
+<!--												<div class="form_field">-->
+<!--													<div>-->
+<!--														<input id="price2" type="checkbox"><label for="price2"> <span>9천원 ~ 23만원</span> </label>-->
+<!--													</div>-->
+<!--												</div>-->
+<!--											</a>-->
+<!--										</li>-->
+<!--										<li>-->
+<!--											<a href="javascript:void(0)">-->
+<!--												<div class="form_field">-->
+<!--													<div>-->
+<!--														<input id="price3" type="checkbox" checked><label for="price3"> <span>23만원 ~ 48만원 7천원</span> </label>-->
+<!--													</div>-->
+<!--												</div>-->
+<!--											</a>-->
+<!--										</li>-->
+<!--										<li>-->
+<!--											<a href="javascript:void(0)">-->
+<!--												<div class="form_field">-->
+<!--													<div>-->
+<!--														<input id="price4" type="checkbox" ><label for="price4"> <span>48만원 7천원 ~ 79만원</span> </label>-->
+<!--													</div>-->
+<!--												</div>-->
+<!--											</a>-->
+<!--										</li>-->
+<!--										<li>-->
+<!--											<a href="javascript:void(0)">-->
+<!--												<div class="form_field">-->
+<!--													<div>-->
+<!--														<input id="price5" type="checkbox" checked><label for="price5"> <span>70만원 ~ 99만원</span> </label>-->
+<!--													</div>-->
+<!--												</div>-->
+<!--											</a>-->
+<!--										</li>-->
+<!--										<li>-->
+<!--											<a href="javascript:void(0)">-->
+<!--												<div class="form_field">-->
+<!--													<div>-->
+<!--														<input id="price6" type="checkbox"><label for="price6"> <span>99만원 ~ 136만원</span> </label>-->
+<!--													</div>-->
+<!--												</div>-->
+<!--											</a>-->
+<!--										</li>-->
+<!--										<li>-->
+<!--											<a href="javascript:void(0)">-->
+<!--												<div class="form_field">-->
+<!--													<div>-->
+<!--														<input id="price7" type="checkbox"><label for="price7"> <span>136만원 ~ 179만원 9천원</span> </label>-->
+<!--													</div>-->
+<!--												</div>-->
+<!--											</a>-->
+<!--										</li>-->
 									</ul>
 								</li>
-								<li class="discount">
+								<li class="discount" id="dcRateFilterDiv">
 									<a href="javascript:void(0)" class="daps1">할인율</a>
 									<ul class="daps2">
 										<li>
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount1" type="checkbox"><label for="discount1"> <span>10% 이하</span> </label>
+														<input id="discount1" name="dcRate" type="checkbox" value="0,10" onclick="filterDcRateMob(this,'dcRate','off','1');"><label for="discount1"> <span id="dcRateText1">10% 이하</span> </label>
 													</div>
 												</div>
 											</a>
@@ -278,7 +278,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount2" type="checkbox"><label for="discount2"> <span>10~20%</span> </label>
+														<input id="discount2" name="dcRate" type="checkbox" value="10,20" onclick="filterDcRateMob(this,'dcRate','off','2');"><label for="discount2"> <span id="dcRateText2">10~20%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -287,7 +287,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount3" type="checkbox"><label for="discount3"> <span>20~30%</span> </label>
+														<input id="discount3" name="dcRate" type="checkbox" value="20,30" onclick="filterDcRateMob(this,'dcRate','off','3');"><label for="discount3"> <span id="dcRateText3">20~30%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -296,7 +296,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount4" type="checkbox"><label for="discount4"> <span>30~40%</span> </label>
+														<input id="discount4" name="dcRate" type="checkbox" value="30,40" onclick="filterDcRateMob(this,'dcRate','off','4');"><label for="discount4"> <span id="dcRateText4">30~40%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -305,7 +305,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount5" type="checkbox"><label for="discount5"> <span>40~50%</span> </label>
+														<input id="discount5" name="dcRate" type="checkbox" value="40,50" onclick="filterDcRateMob(this,'dcRate','off','5');"><label for="discount5"> <span id="dcRateText5">40~50%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -314,7 +314,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount6" type="checkbox"><label for="discount6"> <span>50~60%</span> </label>
+														<input id="discount6" name="dcRate" type="checkbox" value="50,60" onclick="filterDcRateMob(this,'dcRate','off','6');"><label for="discount6"> <span id="dcRateText6">50~60%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -323,7 +323,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount7" type="checkbox"><label for="discount7"> <span>60~70%</span> </label>
+														<input id="discount7" name="dcRate" type="checkbox" value="60,70" onclick="filterDcRateMob(this,'dcRate','off','7');"><label for="discount7"> <span id="dcRateText7">60~70%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -332,7 +332,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount8" type="checkbox"><label for="discount8"> <span>70~80%</span> </label>
+														<input id="discount8" name="dcRate" type="checkbox" value="70,80" onclick="filterDcRateMob(this,'dcRate','off','8');"><label for="discount8"> <span id="dcRateText8">70~80%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -341,7 +341,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount9" type="checkbox"><label for="discount9"> <span>80~90%</span> </label>
+														<input id="discount9" name="dcRate" type="checkbox" value="80,90" onclick="filterDcRateMob(this,'dcRate','off','9');"><label for="discount9"> <span id="dcRateText9">80~90%</span> </label>
 													</div>
 												</div>
 											</a>
@@ -350,7 +350,7 @@
 											<a href="javascript:void(0)">
 												<div class="form_field">
 													<div>
-														<input id="discount10" type="checkbox"><label for="discount10"> <span>90이상</span> </label>
+														<input id="discount10" name="dcRate" type="checkbox" value="90,0" onclick="filterDcRateMob(this,'dcRate','off','10');"><label for="discount10"> <span id="dcRateText10">90이상</span> </label>
 													</div>
 												</div>
 											</a>
@@ -466,7 +466,37 @@
 	<script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
 
 	<script th:inline="javascript">
+		var filterPriceList = [[${filterPriceList}]];
+
 		$(document).ready(function(){
+			console.log('filterPriceList len:::'+filterPriceList.length);
+			if(filterPriceList.length > 0){
+				$("#priceArea").html('');
+				var priceHtml = '';
+				var minPrice;
+				var maxPrice;
+				for(let i=0; i<filterPriceList.length; i++){
+					if(i<1){
+						minPrice = 0;
+						maxPrice = filterPriceList[i].filterNm;
+					}else{
+						minPrice = filterPriceList[i-1].filterNm;
+						maxPrice = filterPriceList[i].filterNm;
+					}
+					priceHtml += '<li>\n';
+					priceHtml += '	<a href="javascript:void(0)">\n';
+					priceHtml += '		<div class="form_field">\n';
+					priceHtml += '			<div>\n';
+					priceHtml += '				<input type="checkbox" id="price'+(i+1)+'" name="price" value="'+minPrice+','+maxPrice+'" onclick="filterPriceMob(this,\'price\',\'off\',\''+(i+1)+'\');"><label for="price'+(i+1)+'">\n';
+					priceHtml += '				<span id="pricdSpan'+(i+1)+'">'+minPrice.addComma()+'원 ~ '+maxPrice.addComma()+'원</span> </label>\n';
+					priceHtml += '			</div>\n';
+					priceHtml += '		</div>\n';
+					priceHtml += '	</a>\n';
+					priceHtml += '</li>\n';
+				}
+				$("#priceArea").append(priceHtml);
+			}
+
 			fnCreateCategoryList();
 
 			if ($('#sizeLi1').find('label').length == 0) $('#sizeLi1').hide();

+ 15 - 9
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html

@@ -261,12 +261,18 @@
 												</th>
 												<td>
 													<div class="form_field">
-														<div class="imgUpload">
-															<label for="fileAdd" class="fileAdd" id="fileAdd_reply">업로드</label>
-															<input type="file" id="fileAdd" name="files" multiple="">
-															<!-- 첨부한 이미지가 반영될 곳, 실제 반영 시 해당 구역은 제거할 것 -->
-														</div>
+														<div class="input_wrap">
+															<!-- 이미지첨부 -->
+															<div class="form_field">
+																<div class="imgUpload">
+																	<label for="fileAdd" class="fileAdd" id="fileAdd_reply">첫번째업로드</label>
+																	<input type="file" id="fileAdd" name="files" accept=".jpeg, .jpg, .png, .mp4"> <!-- 210507_추가 : accept 속성 추가 -->
+																</div>
+															</div>
+															<!-- //이미지첨부 -->
+														</div> 
 													</div>
+
 													<p class="review_desc">최대 10개까지 등록 가능</p>
 													<p class="review_desc">동영상 첨부 시 관리자 승인이 필요하여 바로 노출이 되지 않을 수 있습니다.</p>					
 												</td>
@@ -548,14 +554,14 @@ $(function(){
 								"<input type='hidden' name='orgFileNmArr' value='"+reviewAttach[i].orgFileNm+"'>" +
 								"<input type='hidden' name='sysFileNmArr' value='"+reviewAttach[i].sysFileNm+"'>" +
 								"<br/><span class=\"removes\">Removes image</span>" +
-								"</span>").insertAfter("#fileAdd");
+								"</span>").insertBefore(".fileAdd");
 					}else{
 						$("<span class=\"pics\">" +
 								"<img class=\"picsThumbs\" />" +
 								"<input type='hidden' name='kmcKeyArr' value='" + reviewAttach[i].kmcKey + "'>" + 
 								"<input type='hidden' name='kufKeyArr' value='" + reviewAttach[i].kufKey + "'>" + 
 								"<br/><span class=\"removes\">Removes image</span>" +
-								"</span>").insertAfter("#fileAdd");
+								"</span>").insertBefore(".fileAdd");
 					}
 				}
 				
@@ -622,8 +628,8 @@ var fnChooseFile = function(obj) {
 						, file
 						, function(result) {
 							// 업로드한 파일명 설정
-							$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
-							$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
+							$(".pics").children().last().append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
+							$(".pics").children().last().append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
 						}
 				); 
 		}else if((new RegExp("mp4", "i")).test(file.name)){

+ 184 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewDetailFormMob.html

@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MypageDetailReviewFormMob.html
+ * @desc	: 상품평 - 포토/영상 리스트 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.13   sowon		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="modal-content">
+		<div class="modal-header">
+			<th:block th:if="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">베스트 리뷰</h5>
+			</th:block>
+			<th:block th:unless="${review.bestYn == 'Y'}">
+			<h5 class="modal-title" id="exampleFullLabel">
+				<button type="button" id="btn_more_photoreview"></button>
+				포토/영상리뷰
+			</h5>
+			</th:block>
+		</div>
+		<div class="modal-body" th:if="${reviewList != null and !reviewList.empty}">
+			<div class="pop_cont" th:each="review, status : ${reviewList}" >
+				<!-- 리뷰사진영역 -->
+					<div class="area_slider">
+						<div class="swiper-container thumb_list">
+							<div class="swiper-wrapper">
+								<th:block th:if="${review.reviewAttachList != null and !review.reviewAttachList.empty}" >
+								<th:block th:each="reviewAttach, attachStatus : ${review.reviewAttachList}">
+								<div class="swiper-slide">
+									<div class="thumb " th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}">
+										<th:block th:if="${reviewAttach.fileGb == 'M'}">
+											<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">
+												<source src="http://snsvideo.11st.co.kr/movie/item/www/675/67518524_06_1_C1.mp4" type="video/mp4">
+											</video>
+										</th:block>
+										<th:block th:unless="${reviewAttach.fileGb == 'M'}">
+											<img th:src="${imgUrl+'/'+reviewAttach.sysFileNm}" alt="">
+										</th:block>
+									</div>
+								</div>
+								</th:block>
+								</th:block>
+								<th:block th:unless="${review.reviewAttachList != null and !review.reviewAttachList.empty}">
+									<div class="swiper-slide"><div class="thumb nodata"><img th:src="${imgGoodsUrl+'/'+review.sysImgNm+'?RS=358'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'" alt=""></div></div><!-- 이미지 없으면 calss .nodata  -->
+								</th:block>
+							</div>
+							<!-- Add Pagination -->
+							<div class="swiper-pagination"></div>
+						</div>
+					</div>
+				<!-- //리뷰사진영역 -->
+				<!-- 리뷰내용 -->
+				<div class="pd_review best">
+					<div class="area_rv_all">
+						<div class="btn_review_open">리뷰오픈</div>
+						<div class="review_list">
+							<ul>
+								<li>
+									<div class="review">
+										<div class="info_box">
+											<div class="star_score" th:with="starScore=${#numbers.formatDecimal((review.iscore*100/5), 0,0)}">
+												<span class="star">
+													<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+												</span>
+											</div>
+											<div class="writer">
+												<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
+												<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
+											</div>
+										</div>
+										<div class="response_box">
+											<div>
+												<dl>
+													<div th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}" th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}">
+														<dt >구매옵션</dt>
+														<dd th:text="${reviewGoods.optCd1 +' / '+ reviewGoods.optCd2}">베이지 / 100</dd>
+													</div>
+													<div>
+														<dt>키/몸무게</dt>
+														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
+															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
+														</dd>
+													</div>
+												</dl>
+											</div>
+										</div>
+										<div class="txt_review_box">
+											<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">옷</p>
+										</div>
+										<div class="response_box2"  th:if="${not #strings.isEmpty(review.sizeGb)}">
+											<div>
+												<dl>
+													<div>
+														<dt>사이즈</dt>
+														<dd th:text="${review.scoreSizeNm}">작음</dd>
+													</div>
+													<div>
+														<dt>컬러</dt>
+														<dd th:text="${review.scoreColorNm}">밝음</dd>
+													</div>
+													<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>핏</dt>
+														<dd th:text="${review.scoreFitNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>두께감</dt>
+														<dd th:text="${review.scoreThickNm}">적당함</dd>
+													</div>
+													</th:block>
+													<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+													<div>
+														<dt>무게감</dt>
+														<dd th:text="${review.scoreWeightNm}">레귤러</dd>
+													</div>
+													<div>
+														<dt>볼너비</dt>
+														<dd th:text="${review.scoreBallNm}">적당함</dd>
+													</div>
+													</th:block>
+												</dl>
+											</div>
+										</div>
+										<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
+											<div class="reply">
+												<div class="reply_writer">
+													<span class="wr_name">관리자</span>
+													<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
+												</div>
+												<div class="reply_txt">
+													<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
+														안녕하세요, 스타일24 관리자입니다.
+													</p>
+												</div>
+											</div>
+										</div>
+									</div>
+								</li>
+							</ul>
+						</div>
+					</div>
+				</div>
+				<!-- //리뷰내용 -->
+			</div>
+		</div>
+	</div>
+</div>
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	$(document).ready( function() {
+		 //슬라이드 - 포토,영상리뷰팝업 
+        var photoreviewdetailSwiper = new Swiper('.pd_photoreviewdetail_pop .area_slider .swiper-container', {
+            observer: true,
+            observeParents: true,
+            slidesPerView: 1,
+            pagination: {
+                el: '.swiper-pagination',
+                type: 'fraction',
+            },
+        });
+        // 포토,베스트리뷰숨김
+        var review_open=$(".btn_review_open");
+        $(document).on('click','.btn_review_open',function(e){
+            $(this).toggleClass('active');
+            $(this).next(".review_list").toggleClass('active');
+            return false;
+        });
+
+	});
+	
+/*]]>*/
+</script>	
+ </html>

+ 178 - 221
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -54,235 +54,61 @@
 								<div class="once" th:if="${adminCount != null}" id="check_notice">
 									<div class="alert" role="alert">
 										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
-										<p class="formOnly" th:onclick="fnMove([[${adminCount.reviewSq}]])">바로확인</p>
-										<button type="button" class="alertCls" onclick="location.href='#newreply2'" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
+										<p class="formOnly" >바로확인</p>
+										<button type="button" class="alertCls" th:onclick="fnMove([[${adminCount.reviewSq}]])" data-dismiss="alert"><span aria-hidden="true">바로 확인</span><span class="sr-only">move and Close</span></button>
 									</div>
 								</div>
 								<!-- tab_cont Start -->
+							<div>
 								<div class="inner" id="reviewList">
 
-									<div class="nodata" id="nodata1" style="display: none;">
-										<div class="txt_box">
-											<p>
-												작성 가능한 리뷰가 없습니다.<br>
-											</p>
-										</div>
-									</div>
-									<div class="nodata" id="nodata2" style="display: none;">
-										<div class="txt_box">
-											<p>
-												작성한 리뷰가 없습니다.<br>
-											</p>
-										</div>
-									</div>
 								</div>
-								<!-- // tab_cont End -->
-							</div>
-<!-- 							<div class="tab_cont ">
-								tab_cont Start
-								<div class="inner">
-									<div class="part_goods">
-										굿즈_리뷰
-										<div class="goods_section">
-											<div class="goods_detail">
-												<a href="">
-													<div class="thumb_box">
-														<img src="/images/mo/thumb/tmp_pdClickother1.jpg" alt="tmp_pdClickother1">
-													</div>
-													<div class="info_box">
-														<div class="od_name">
-															<div class="goods_date"><span class="date">2020.10.25</span>구매</div>
-															<div class="brand">
-																<span>Mollimelli 몰리멜리</span>
-															</div>
-															<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
-														</div>
-														<div class="od_opt">
-															<div class="option">
-																<em>Black</em><em>XXL</em>
-															</div>
-														</div>
-													</div>
-												</a>
-											</div>											
-										</div>
-										//굿즈_리뷰
-									</div>
-									<div class="reviewMy">
-										<div class="info_box">
-											<div class="star_score">
-												<span class="star">
-													<em class="progbar" style="width:70%;"></em> 평점 style로 표기
-												</span>
-											</div>
-											<div class="writer">
-												<span class="wr_date">2020.07.15</span>
-											</div>
-										</div>
-										<div class="response_box">
-											<div>
-												<dl>
-													<div>
-														<dt>구매옵션</dt>
-														<dd>베이지 / 100</dd>
-													</div>
-													<div>
-														<dt>키/몸무게</dt>
-														<dd>178cm/71kg</dd>
-													</div>
-												</dl>
-											</div>
-										</div>
-										<div class="photo_box">
-											<div class="photo_list">
-												<ul>
-													<li>
-														<a href="">
-															<div class="pic">
-																<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span>동영상의 썸네일일 경우 mov 클래스 추가
-															</div>
-														</a>
-													</li>
-													<li>
-														<a href="">
-															<div class="pic">
-																<span class="thumb" style="background-image:url('/images/pc/thumb/tmp_pdDetail4.jpg');"></span>
-															</div>
-														</a>
-													</li>
-												</ul>
-											</div>
-										</div>
-										<div class="txt_review_box">
-											<p>
-												옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요. 옷이 부들부들 촉감이 너무 좋습니다~ 보는 것 보다 실제 입으니깐 더 멋스러운 것 같아요! 차분한 그레이 라서 지금 가을가을한 계절에 잘 어울리는 같아요.
-											</p>
-										</div>
-										<div  class="response_box2">
-											<div>
-												<dl class="clear">
-													<div>
-														<dt>사이즈</dt>
-														<dd>작음</dd>
-													</div>
-													<div>
-														<dt>핏</dt>
-														<dd>레귤러</dd>
-													</div>
-													<div>
-														<dt>컬러</dt>
-														<dd>밝음</dd>
-													</div>
-													<div>
-														<dt>두께감</dt>
-														<dd>적당함</dd>
-													</div>
-												</dl>
-											</div>
-										</div>
-										<div class="reply_box">
-											<div class="reply">
-												<div class="reply_writer">
-													<span class="wr_name">관리자</span>
-													<span class="wr_date">2020.07.15</span>
-												</div>
-												<div class="reply_txt">
-													<p>
-														안녕하세요, 스타일24 관리자입니다.<br>
-														최대한 검수작업을 하고 있으나, 상품 출고량이 많은 경우 간혹 검수가 누락되는 경우가 있습니다.<br>
-														만약, 받아보시고 문제가 있을 경우 텍 제거하지마시고 고객센터로 접수 해주시면 처리 도와드리겠습니다.<br>
-														구매해주셔서 감사합니다.                                                 
-													</p>
-												</div>
-											</div>
-										</div>
-										.reply_box가 노출될 경우, 삭제만
-										<div class="goods_btn_wrap btn_group_flex">
-											<div><button type="button" class="btn btn_default"><span>리뷰 삭제</span></button></div>
-										</div>
-									</div>
+								<div class="ui_foot" style="display:none;">
+									<button class="btn btnIcon_more" id="btnMore"  style="width: 100%;">더보기</button>
+								</div>
+								<div class="ui_foot" style="display:none;">
+									<button class="btn btnIcon_more" id="btnMore2"  style="width: 100%;">더보기</button>
 								</div>
-							</div> -->
+							</div>
+							<!-- // tab_cont End -->
+							</div>
+
 						</div>
 					</div>
 				</div>
 			</section>
 		</main>
+<form id="searchForm1" name="searchForm1" th:action="@{'/mypage/complete/review/list'}" th:method="post">
+	<input type="hidden" name="pageNo" value="1" />
+	<input type="hidden" name="pageSize" value="10" />
+</form>
+<form id="searchForm2" name="searchForm2" th:action="@{'/mypage/already/review/list'}" th:method="post">
+	<input type="hidden" name="pageNo2" value="1" />
+	<input type="hidden" name="pageSize2" value="10" />
+</form>
+
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-<script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
 	let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
 	let attachList = [[${alreadyReviewAttach}]];
 	// 작성가능한 리뷰 클릭 시 
-	$("#completeReview").click(function() {
-		$("#alreadyReview").removeClass("active");
-		$("#completeReview").addClass("active");
-		$("#check_notice").hide();
-		$('#reviewList').html('');
-		var data = {};
-		var jsonData = JSON.stringify(data);
-		
-		gagajf.ajaxJsonSubmit('/mypage/complete/review/list', jsonData,	function(result) {
-			if (result.dataList1 != null && result.dataList1.length > 0) {
-				
-				let html = '';
-				html += '	<div class="part_goods">';
-				$.each(result.dataList1, function(idx, item) {
-					html += '		<div class="goods_section">';
-					html += '			<div class="goods_detail">';
-					html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">';
-					html += '					<div class="thumb_box">';
-					html += '						<img src="' + imageUrl + '/' + item.sysImgNm + '" alt="tmp_pdClickother1">';
-					html += '					</div>';
-					html += '					<div class="info_box">';
-					html += '						<div class="od_name">';
-					html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span> 구매</div>';
-					html += '							<div class="brand">';
-					html += '								<span>'+item.brandNm+'</span>';
-					html += '							</div>';
-					html += '							<div class="name">'+item.goodsNm+'</div>';
-					html += '						</div>';
-					html += '						<div class="od_opt">';
-					html += '							<div class="option">';
-					if (item.goodsType =='G056_S') {
-						$.each(item.colorNmArr, function (index2, option) {
-							html += '							<em>' + item.itemNmArr[index2] + ' / ' + option + '</em\n';
-						})
-					}else{
-						html += '							<em>'+item.colorNm+'</em>     ';
-					}
-					html += '							</div>';
-					html += '						</div>';
-					html += '					</div>';
-					html += '				</a>';
-					html += '			</div>';
-					html += '			<div class="goods_btn_wrap btn_group_flex">';
-					html += '				<div><button type="button" class="btn btn_default" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기(</span><em>'+item.remainDt+'</em><span>일 남음)</span></button></div>';
-					html += '			</div>';
-					html += '		</div>';
-				});
-				html += '	</div>';
-				$('#reviewList').append(html);
-			}else{
-				$('#nodata1').show();
-			}
-		});
 	
-	})
+	var fnCompleteList = function () {
+		gagajf.ajaxFormSubmit($('#searchForm1').prop('action'), '#searchForm1', fnGetCompleteCallback);
+	}
 	
+	var fnAlreadyList = function () {
+		gagajf.ajaxFormSubmit($('#searchForm2').prop('action'), '#searchForm2', fnGetAlreadyCallback);
+	}
 	
-	$("#alreadyReview").click(function() {
-		$("#completeReview").removeClass("active");
-		$("#alreadyReview").addClass("active");
-		$("#check_notice").show();
-		$('#reviewList').html('');
-		var data = {};
-		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/mypage/already/review/list', jsonData,	function(result) {
+	var fnGetAlreadyCallback = function (result) {
 			if (result.dataList2 != null && result.dataList2.length > 0) {
-				let html = '';
+				if (result.paging2.pageable2.pageNo == 1){
+					$('#reviewList').html('');
+				}	
+				var html = '';
 				$.each(result.dataList2, function(idx, item) {
 					html += '	<div class="part_goods">';
 					html += '		<div class="goods_section">';
@@ -345,18 +171,20 @@
 						html += '			<div class="photo_list">';
 						html += '				<ul>';
 						for (var i = 0; i < attachList.length; i++) {
-							html += '					<li>';
-							html += '						<a>';
-							html += '							<div class="pic">';
-							if (attachList[i].fileGb == 'M') {
-								html += '								<span class="thumb mov" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');"  style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
-							}else{
-								html += '								<span class="thumb" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
+							if (attachList[i].reviewSq == item.reviewSq) {
+								html += '					<li>';
+								html += '						<a>';
+								html += '							<div class="pic">';
+								if (attachList[i].fileGb == 'M') {
+									html += '								<span class="thumb mov" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');"  style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
+								}else{
+									html += '								<span class="thumb" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
+								}
+								
+								html += '							</div>';
+								html += '						</a>';
+								html += '					</li>';
 							}
-							
-							html += '							</div>';
-							html += '						</a>';
-							html += '					</li>';
 						}
 						html += '				</ul>';
 						html += '			</div>';
@@ -416,7 +244,7 @@
 					}
 					html += '		<div class="goods_btn_wrap btn_group_flex">';
 					if (item.admRpl == null || item.admRpl == '') {
-						html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+',\''+item.goodsCd+'\','+item.reviewSq+')"><span>리뷰 수정</span></button></div> ';
+						html += '			<div><button type="button" id="btn_review_delete" class="btn btn_dark" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+',\''+item.goodsCd+'\','+item.reviewSq+')"><span>리뷰 수정</span></button></div> ';
 					}
 					html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnDeleteReview('+item.reviewSq+')"><span>리뷰 삭제</span></button></div> ';
 					html += '		</div>';
@@ -424,11 +252,115 @@
 				});
 				
 				$('#reviewList').append(html);
+				if (result.paging2.pageable2.totalPage > result.paging2.pageable2.pageNo) {
+					$('#btnMore').parent().hide();
+					$('#btnMore2').parent().show();
+					$('#searchForm2 input[name=pageNo2]').val(result.paging2.pageable2.pageNo + 1);
+				}else{
+					$('#btnMore2').parent().hide();
+					$('#btnMore').parent().hide();
+				}
+				
 			}else{
-				$('#nodata2').show();
+				var html = '';
+				html += '<div class="nodata" id="nodata1">';
+				html += '	<div class="txt_box">';
+				html += '		<p>';
+				html += '			작성한 리뷰가 없습니다.<br>';
+				html += '		</p>';
+				html += '	</div>';
+				html += '</div>';
+				$('#btnMore2').parent().hide();
+				$('#btnMore').parent().hide();
+				$('#reviewList').append(html);
 			}
-		});
+	}
+	
+	var fnGetCompleteCallback = function (result) {
+		
+		if (result.dataList1 != null && result.dataList1.length > 0) {
+			if (result.paging1.pageable.pageNo == 1){
+				$('#reviewList').html('');
+			}	
+			var html = '	<div class="part_goods">';
+			$.each(result.dataList1, function(idx, item) {
+				html += '		<div class="goods_section">';
+				html += '			<div class="goods_detail">';
+				html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">';
+				html += '					<div class="thumb_box">';
+				html += '						<img src="' + imageUrl + '/' + item.sysImgNm + '" alt="tmp_pdClickother1">';
+				html += '					</div>';
+				html += '					<div class="info_box">';
+				html += '						<div class="od_name">';
+				html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span> 구매</div>';
+				html += '							<div class="brand">';
+				html += '								<span>'+item.brandNm+'</span>';
+				html += '							</div>';
+				html += '							<div class="name">'+item.goodsNm+'</div>';
+				html += '						</div>';
+				html += '						<div class="od_opt">';
+				html += '							<div class="option">';
+				if (item.goodsType =='G056_S') {
+					$.each(item.colorNmArr, function (index2, option) {
+						html += '							<em>' + item.itemNmArr[index2] + ' / ' + option + '</em\n';
+					})
+				}else{
+					html += '							<em>'+item.colorNm+'</em>     ';
+				}
+				html += '							</div>';
+				html += '						</div>';
+				html += '					</div>';
+				html += '				</a>';
+				html += '			</div>';
+				html += '			<div class="goods_btn_wrap btn_group_flex">';
+				html += '				<div><button type="button" class="btn btn_default" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기(</span><em>'+item.remainDt+'</em><span>일 남음)</span></button></div>';
+				html += '			</div>';
+				html += '		</div>';
+			});
+			html += '	</div>';
+			$('#reviewList').append(html);
+			if (result.paging1.pageable.totalPage > result.paging1.pageable.pageNo) {
+				$('#btnMore').parent().show();
+				$('#searchForm1 input[name=pageNo]').val(result.paging1.pageable.pageNo + 1);
+			}else{
+				$('#btnMore').parent().hide();
+			}
+		}else{
+			var html = '';
+			html += '<div class="nodata" id="nodata1">';
+			html += '	<div class="txt_box">';
+			html += '		<p>';
+			html += '			작성 가능한 리뷰가 없습니다.<br>';
+			html += '		</p>';
+			html += '	</div>';
+			html += '</div>';
+			
+			$('#reviewList').append(html);
+			$('#btnMore').parent().hide();
+		}
+	}
+	
+	$("#completeReview").click(function() {
+		$("#alreadyReview").removeClass("active");
+		$("#completeReview").addClass("active");
+		$("#check_notice").hide();
+		$('#btnMore2').hide();
+		$('#btnMore').show();
+		$('#reviewList').html('');
+		
+		fnCompleteList();
+	})
 	
+	
+	$("#alreadyReview").click(function() {
+		$("#completeReview").removeClass("active");
+		$("#alreadyReview").addClass("active");
+		$("#check_notice").show();
+		$('#btnMore').hide();
+		$('#btnMore2').show();
+		$('#reviewList').html('');
+		fnAlreadyList();
+		
 	});
 	// 리뷰 수정
 	var fnReviewUpdate = function(obj1,obj2,obj3) {
@@ -467,10 +399,35 @@
 		});
 	}
 	
+	// 스크롤 이동
+	var fnMove = function(obj) {
+        var data = {};
+        var jsonData = JSON.stringify(data);
+        // 고객 확인 여부 업데이트
+    	gagajf.ajaxJsonSubmit('/mypage/review/customer/confirm', jsonData,function() {
+    		$(".check_notice").html('');
+    		$(".check_notice").css("background-color","#ffffff");
+    		
+		});
+        
+    	 var offset = $("#admin_" + obj).offset();
+         $('html, body').animate({scrollTop : offset.top}, 300); 
+         
+	}
+	
+	// 더보기
+	$('#btnMore').on('click', function() {
+		fnCompleteList();
+	});
+	
+	$('#btnMore2').on('click', function() {
+		fnAlreadyList();
+	});
+	
 /*]]>*/
  
  $(document).ready(function() {
-	 $("#completeReview").trigger('click');
+	$("#completeReview").trigger("click");
  	$('#htopTitle').text('리뷰');
 
  });

+ 4 - 5
src/main/webapp/WEB-INF/views/mob/social/SocialMainFormMob.html

@@ -123,12 +123,11 @@ let fnGetSocialList = function(result) {
 		if(item.goodsTnm != null){
 			html += '           <div class="itemComment">'+item.goodsTnm+'</div>';
 		}
-		html += '			<div class="itemEt">';
-		html += '				<div class="shopBag">';
-		html += '					<button class="btn btn_default" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'"><span>쇼핑백담기</span></button>';
-		html += '				</div>';
-		html += '			</div>';
+		
 		html += '		</a>';
+		html += '			<div class="shopBag">';
+		html += '				<button class="btn btn_default" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'"><span>쇼핑백담기</span></button>';
+		html += '			</div>';
 		html += '	</div>';
 		html += '</div>';
 

+ 5 - 4
src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html

@@ -1179,10 +1179,10 @@
 							$.each(result, function (idx, item) {
 								tag += '	<div class="item_prod">';	
 								tag += '		<div class="item_state">';	
-								if (item.stockQty>0 && item.stockQty<=5) {
+								if (item.stockQtySum>0 && item.stockQtySum<=5) {
 									tag += '			<div class="shape"><span>곧 품절돼요!</span></div>';
 								}
-								if (item.stockQty<=0) {
+								if (item.stockQtySum<=0) {
 									tag += '			<div class="shape"><span>품절</span></div>';
 								}
 								tag += '			<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" onclick="fnWishDelete(this);">관심상품 추가</button>';
@@ -1192,8 +1192,9 @@
 								tag += '				</div>';	
 								tag += '			</a>';	
 								tag += '			<div class="hover_con">';
-								if (item.stockQty>0) {
-									tag += '				<button type="button" class="btn btn_sm cart_btn on" afLinkCd="'+item.afLinkCd+'" goodsCd="'+item.goodsCd+'" optCd="'+item.optCd+'" minOrdQty="'+item.minOrdQty+'" goodsType="'+item.goodsType+'" contentsLoc="'+item.contentLoc+'" onclick="wishCardAdd(this)"><span>쇼핑백 담기</span></button>';
+								console.log(item.stockQtySum);
+								if (item.stockQtySum>0) {
+									tag += '			<button type="button" class="btn btn_sm cart_btn on" afLinkCd="'+item.afLinkCd+'" goodsCd="'+item.goodsCd+'" optCd="'+item.optCd+'" minOrdQty="'+item.minOrdQty+'" goodsType="'+item.goodsType+'" contentsLoc="'+item.contentLoc+'" onclick="wishCardAdd(this)"><span>쇼핑백 담기</span></button>';
 								}
 								tag += '			</div>';	    
 								tag += '		</div>';	    

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

@@ -110,7 +110,7 @@
 				<!-- 프로모션 문구 노출 검색용-->
 				<div class="area">
 					<p class="promotion_search">모이몰론, 남들보다 빠르게! 신상 check</p>
-					<button type="button" class="btn_sch_promotion" id="btnGnbSearch" onclick="cfSearchLayer();"><i class="ico ico_search"><em>프로모션 검색 바로가기</em></i></button>
+					<button type="button" class="btn_sch_promotion" id="btnGnbSearch" onclick="cfnSearchLayer();"><i class="ico ico_search"><em>프로모션 검색 바로가기</em></i></button>
 				</div>
 				<!-- //프로모션 문구 노출 검색용-->
 				<!-- 통합검색 -->

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

@@ -364,6 +364,7 @@
 			$('#nodata2').show();
 		}
 		// Create pagination
+		console.log(result.paging2.pageable2);
 		gagaPaging.createPagination(result.paging2.pageable2);
 		
 	}

+ 28 - 66
src/main/webapp/WEB-INF/views/web/planning/PlanningCouponDetailFormWeb.html

@@ -13,70 +13,32 @@
  * 1.0  2021.04.01   sowon		최초 작성
  *******************************************************************************
  -->
-<div class="modal-dialog" role="document">
-	<div class="modal-content">
-		<div class="modal-body">
-			<div class="modal-header">
-				<h5 class="modal-title" id="couponInfoLabel" th:text="${couponDetailInfo.cpnNm}"></h5>
-			</div>
-			<div class="modal-body">
-				<div class="pop_cont">
-					<dl>
-						<div>
-							<dt>사용조건</dt>
-							<dd th:if="${couponDetailInfo.buyLimitAmt < 1}">
-								<span>제한없음</span>
-							</dd>
-							<dd th:unless="${couponDetailInfo.buyLimitAmt < 1}"> 
-								<span th:text="${#numbers.formatInteger(couponDetailInfo.buyLimitAmt,0,'COMMA')}"></span>원 이상 구매 시 최대 <span th:text="${#numbers.formatInteger(couponDetailInfo.maxDcAmt,0,'COMMA')}"></span>원 할인
-							</dd>
-						</div>
-						<div>
-							<dt>발급수량</dt>
-							<dd th:if="${couponDetailInfo.custPubLimitQty < 1}">
-								<span>제한없음</span>
-							</dd>
-							<dd th:unless="${couponDetailInfo.custPubLimitQty < 1}">
-								1인 최대<span th:text="${#numbers.formatInteger(couponDetailInfo.custPubLimitQty,0,'COMMA')}"></span>매
-							</dd>
-						</div>
-						<div>
-							<dt>유효기간</dt>
-							<dd>
-								<span th:text="${couponDetailInfo.availStdt}"></span>&nbsp;~&nbsp;<span  th:text="${couponDetailInfo.availEddt}"></span>
-							</dd>
-						</div>
-						<div>
-							<dt>브랜드</dt>
-							<th:block th:each="BrandData, BrandStat : ${cpnDtlRefvalBrandList}">
-                				<dd th:text="${BrandData.brandEnm == ''? '제한없음' :BrandData.brandEnm}"></dd>
-               				</th:block>
-						</div>
-						<div>
-							<dt>카테고리</dt>
-							<th:block th:each="CateData, CateStat : ${cpnDtlRefvalCateList}">
-                				<dd th:text="${CateData.cateNm} + ' '"></dd>
-               				</th:block>
-						</div>
-						<div>
-							<dt>젹용상품</dt>
-							<th:block th:each="GoodsData, GoodsStat : ${cpnDtlRefvalApplyGoodsList}">
-                				<dd th:text="${GoodsData.goodsNm} + ' '"></dd>
-               				</th:block>
-						</div>
-						<div>
-							<dt>제외상품</dt>
-							<th:block th:each="ExceptData, ExceptStat : ${cpnDtlRefvalExceptGoodsList}">
-                				<dd th:text="${ExceptData.goodsNm} + ' '"></dd>
-               				</th:block>
-						</div>
-					</dl>
-				</div>
-			</div>
-		</div>
-		<div class="modal-footer">
-			<p>본 쿠폰은 특정 상품&#47;행사에 적용되는 쿠폰이며,적용가능여부는 상품별 상이할 수 있습니다.</p>
-			<p>본 이벤트는 당사 사정에 따라 사전고지 없이 변경 또는 조기종료 될 수 있습니다.</p>
-		</div>
-	</div>
+<div class="modal-header">
+    <h5 class="modal-title" id="couponInfoLabel" th:text="${couponDetailInfo.cpnNm}"></h5>
+</div>
+<div class="modal-body">
+    <div class="pop_cont">
+        <dl>
+            <div th:if="${couponDetailInfo.useCondition!=null && couponDetailInfo.useCondition!=''}">
+                <dt>사용조건</dt>
+                <dd  th:text="${couponDetailInfo.useCondition}"></dd>
+            </div>
+            <div>
+                <dt>발급수량</dt>
+                <dd th:if="${couponDetailInfo.issueCondition!=null && couponDetailInfo.issueCondition!=''}"th:text="${couponDetailInfo.issueCondition}"></dd>
+                <dd th:unless="${couponDetailInfo.issueCondition!=null && couponDetailInfo.issueCondition!=''}">제한없음</dd>
+            </div>
+            <div>
+                <dt>유효기간</dt>
+                <dd>
+                    <span th:text="${couponDetailInfo.availStdt}"></span>&nbsp;~&nbsp;<span th:text="${couponDetailInfo.availEddt}"></span>
+                </dd>
+            </div>
+            <div th:if="${couponDetailInfo.tgtCondition!=null}">
+                <dt>대상조건</dt>
+                <dd th:text="${couponDetailInfo.tgtCondition}"> 
+                </dd>
+            </div>
+        </dl>
+    </div>
 </div>

+ 17 - 9
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -701,15 +701,15 @@ if(coupon.length>0){
 		html += '					<div>';
 		html += '						<p class="cp_name">'+item.cpnNm+'</p>';
 		html += '						<p class="cp_cont">';
-		html += '							<span><em>'+item.dcVal+'</em>'+item.dcWay+'</span>';
+		html += '							<span><em>'+item.dcVal.addComma()+'</em>'+item.dcWay+'</span>';
 		html += '						</p>';
 		html += '						<p class="cp_condition">'+item.useCondition;
 		html += '								<span>'+item.issueCondition+'</span>';	
 		html += '						</p>';
 		html += '					</div>';
 		if (item.couponStat == '쿠폰받기') {
-			html += '					<button type="button" id="coupon_'+item.cpnId+'" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
-			html += '						<span>쿠폰받기</span>';								/* 받기완료  */
+			html += '					<button type="button" id="coupon_'+item.cpnId+'" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">'; 
+			html += '						<span>쿠폰받기</span>';								
 			html += '					</button>';			
 		}else{
 			html += '					<button type="button"';
@@ -718,7 +718,7 @@ if(coupon.length>0){
 			html += '					</button>';			
 		}
 		html += '				</div>';
-		html += '				<button type="button" class="btn_underline"	id="btn_couponInfo_pop" onclick="useInfoCoupon('+item.cpnId+')">';
+		html += '				<button type="button" class="btn_underline"	id="btn_couponInfo_pop" onclick="usePlanInfoCoupon('+item.cpnId+')">';
 		html += '					<span>사용안내</span>';
 		html += '				</button>';
 		html += '			</li>';
@@ -750,13 +750,14 @@ if(coupon.length>0){
 }
 
 //사용안내 모달
-var useInfoCoupon = function (id) {
-	var data = {cpnId : id};
+var usePlanInfoCoupon = function (id) {
+	var data = {cpnId : id
+			    ,planSq : plan.planSq};
 	var jsonData = JSON.stringify(data);
 	
 	 $.ajax( {
 		type		: "POST",
-		url 		: '/planning/coupon/detailPop',
+		url 		: '/planning/coupon/detailpop',
 		data		: jsonData,
 		contentType: 'application/json',
 		dataType 	: 'html',
@@ -784,8 +785,15 @@ var fnPlanCouponDown = function(obj){
 
 // 쿠폰다운로드 콜백
 var fnPlanCouponCallBack = function(result){
-	$('#coupon_'+ result.cpnId).html('<span>받기완료</span>');
-	$('#coupon_'+ result.cpnId).attr('disabled', true);
+	console.log(result);
+	$.each(result.couponList, function (idx, item) {
+		if (Number(item.custPubLimitQty) > 0){
+			if (Number(item.custPubLimitQty) <= Number(item.custCouponCnt)){
+				$('#coupon_'+ item.cpnId).html('<span>받기완료</span>');
+				$('#coupon_'+ item.cpnId).attr('disabled', true);
+			}
+		}
+	});
 }
 
 // 설문조사 참여 버튼 클릭

+ 13 - 1
src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

@@ -171,7 +171,19 @@ if(planCornerList.length>0){
 		html += '             <div class="item_header">';
 		html += '                 <h4>'+item.cornerNm+'</h4>';
 		html += '             </div>';
-		html += '             <div class="itemsGrp">';
+		html += '             <div class="itemsGrp';
+		if (item.cornerDispType == 'G045_1') {
+			html += ' cut1';
+		}else if(item.cornerDispType == 'G045_2'){
+			html += ' cut2';
+		}else if(item.cornerDispType == 'G045_3'){
+			html += ' cut3';
+		}else if(item.cornerDispType == 'G045_4'){
+			html += ' cut4';
+		}else if(item.cornerDispType == 'G045_5'){
+			html += ' cut5';
+		}
+		html += '">';
 		$.each(planCornerGoodsList, function(idx2, item2)  {
 			if (item2.cornerNm == item.cornerNm) {
 				html += '                 <div class="item_prod">';

+ 95 - 0
src/main/webapp/biz/goods.js

@@ -631,4 +631,99 @@ var fnSortingChange = function (obj, sortingType, stat, appGb){
 	fnGoodsListSearch();
 }
 
+// 모바일 가격 필터
+var filterPriceMob = function (obj, gubun, staus, idx){
+	$("#searchGoodsForm input:hidden[name=priceFrom]").remove();
+	$("#searchGoodsForm input:hidden[name=priceTo]").remove();
+
+	if(staus=='on'){
+		$(obj).attr('onclick','filterPriceMob(this,\''+gubun+'\',\'off\',\''+idx+'\');');
+	}else{
+		$(obj).attr('onclick','filterPriceMob(this,\''+gubun+'\',\'on\',\''+idx+'\');');
+	}
+
+	$('#filterForm input[name=price]').each(function (ind){
+		$(this).prop("checked",false);
+	});
+
+	let price = $(obj).val().split(",");
+	let min = price[0];
+	let max = price[1];
+	var tag2 = '';
+
+	if(staus=='off'){
+		$("#price"+idx).prop("checked",true);
+		if(max<1){
+			tag2 += '<input type="hidden" name="priceFrom" value="'+min.replace(",", "")+'"/>\n';
+		}else{
+			tag2 += '<input type="hidden" name="priceFrom" value="'+min.replace(",", "")+'"/>\n';
+			tag2 += '<input type="hidden" name="priceTo" value="'+max.replace(",", "")+'"/>\n';
+		}
+	}else{
+		$("#searchGoodsForm input:hidden[name=priceFrom]").remove();
+		$("#searchGoodsForm input:hidden[name=priceTo]").remove();
+	}
+
+	$('#priceFilterDiv').find('.daps1').find('span').html('');
+	$('#filterForm input[name=price]:checked').each(function(index){
+		$("#priceFilterDiv").find('.daps1').append('<span class="pic">'+$("#pricdSpan"+idx).text()+'</span>');
+	});
+
+	$("#searchGoodsForm").append(tag2);
+	filterHtml += tag2;
+	fnCategoryGoodsInfiniteScrollInit();
+
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+	fnGoodsListSearch();
+}
+
+// 모바일 할인 필터
+var filterDcRateMob = function (obj, gubun, staus, idx){
+	$("#searchGoodsForm input:hidden[name=dcRateFrom]").remove();
+	$("#searchGoodsForm input:hidden[name=dcRateTo]").remove();
+
+	if(staus=='on'){
+		$(obj).attr('onclick','filterDcRateMob(this,\''+gubun+'\',\'off\',\''+idx+'\');');
+	}else{
+		$(obj).attr('onclick','filterDcRateMob(this,\''+gubun+'\',\'on\',\''+idx+'\');');
+	}
+
+	$('#filterForm input[name=dcRate]').each(function (ind){
+		$(this).prop("checked",false);
+	});
+
+	let dcRate = $(obj).val().split(",");
+	let min = dcRate[0];
+	let max = dcRate[1];
+	var tag2 = '';
+
+	if(staus=='off') {
+		$("#discount" + idx).prop("checked", true);
+		if(max<1){
+			tag2 += '<input type="hidden" name="dcRateFrom" value="'+min.replace(",", "")+'"/>\n';
+		}else{
+			tag2 += '<input type="hidden" name="dcRateFrom" value="'+min.replace(",", "")+'"/>\n';
+			tag2 += '<input type="hidden" name="dcRateTo" value="'+max.replace(",", "")+'"/>\n';
+		}
+	}else{
+		$("#searchGoodsForm input:hidden[name=dcRateFrom]").remove();
+		$("#searchGoodsForm input:hidden[name=dcRateTo]").remove();
+	}
+
+	$('#dcRateFilterDiv').find('.daps1').find('span').html('');
+	$('#filterForm input[name=dcRate]:checked').each(function(index){
+		$("#dcRateFilterDiv").find('.daps1').append('<span class="pic">'+$("#dcRateText"+idx).text()+'</span>');
+	});
+
+	$("#searchGoodsForm").append(tag2);
+	filterHtml += tag2;
+	fnCategoryGoodsInfiniteScrollInit();
+
+	gagaInfiniteScroll.pageStatus.filterHtml = filterHtml;
+	gagaInfiniteScroll.pageStatus.filterStatHtml = filterStatHtml;
+	fnGoodsListSearch();
+
+}
+
 //****************상품리스트  end **********************************

+ 1 - 1
src/main/webapp/ux/mo/css/common_m.css

@@ -83,7 +83,7 @@ button,input,optgroup,select,textarea {margin: 0;font: inherit;color: inherit;}
 button {overflow: visible;background: none;border: none;padding: 0;}
 button,select {text-transform: none;}
 button,html input[type="button"],input[type="reset"],input[type="submit"] {-webkit-appearance: button;cursor: pointer;}
-button[disabled],html input[disabled] {cursor: default;}
+button[disabled],html input[disabled] {cursor: default;pointer-events: none;}
 button:focus {outline: #007bce dotted thin;}
 button::-moz-focus-inner,input::-moz-focus-inner {padding: 0;border: 0;}
 input {line-height: normal;}

+ 39 - 19
src/main/webapp/ux/mo/css/layout_m.css

@@ -227,7 +227,7 @@
 .mb .tab_btn > li.active:after{width:100%;}
 .mb .radio_tab{margin-bottom:2rem;}
 .mb .radio_nav{margin-bottom:2.4rem;}
-.mb .form_sign_up{margin-top:4rem;}
+.mb .form_sign_up{}
 .mb .form_sign_up p:last-child {color:#888; margin-top: 1rem;}
 .mb .form_sign_up .c_primary{font-size:1.6rem; font-weight:500;}
 .mb .form_wrap .form_info {text-align:center;}
@@ -325,6 +325,21 @@
 /* mb_join_1 */
 .mb_join_1 .btn_group_flex > div > .btn {width:100%; height:4.5rem;}
 
+/* mb_join_1 popup_로그인 정보 이용동의 팝업 */
+.modal.mbAgree_pop {}
+.modal.mbAgree_pop .modal-header {}
+.modal.mbAgree_pop .modal-body {margin-top: 5.2rem;}
+.modal.mbAgree_pop .agree_info h5 {font-size: 2rem; text-align: center;}
+.modal.mbAgree_pop .agree_info p {text-align: center; margin:3rem 0; font-size:1.4rem; font-weight:300; line-height:1.3; letter-spacing:-0.8px;}
+.modal.mbAgree_pop .info_txt {padding:1.8rem; background:#f5f5f5;}
+.modal.mbAgree_pop .info_txt ul li {position:relative; padding-left:0.8rem; margin-bottom:0.8rem; color:#888; font-size:1.1rem; font-weight:200; line-height:1.4;}
+.modal.mbAgree_pop .info_txt ul li:last-child {margin-bottom:0;}
+.modal.mbAgree_pop .info_txt ul li:after {content:''; position:absolute; top:0.6rem; left:0; background:#888; width:0.2rem; height:0.2rem;}
+.modal.mbAgree_pop .info_txt ul li .mb_name {font-weight:300;}
+.modal.mbAgree_pop .info_txt ul li em {font-weight:300;}
+.modal.mbAgree_pop .modal-footer {}
+.modal.mbAgree_pop .modal-footer .btn_group_flex {padding:0 2rem;}
+
 /* mb_join_2 */
 .mb .mb_join_2 .form_field{display:block;}
 .mb .mb_join_2 .form_wrap .desc_wrap p {font-size:1.2rem; line-height:1.75; font-weight:200; color:#888;}
@@ -662,7 +677,7 @@
 .riview_box .best_review a .lap > div.pic.none{display: none;}
 .riview_box .best_review a .lap > .pic.none + div.txt_best_review{padding-left:0;}
 .riview_box .best_review a .lap > .pic + div.txt_best_review{padding-left:1.6rem;}
-.riview_box .best_review a .lap > div.txt_best_review p{height:6.4rem; margin-top: 0.8rem; overflow:hidden; line-height:2.1333rem; color:#666; font-size:1.3rem; font-weight:200; display:-webkit-box; text-overflow:ellipsis; -webkit-line-clamp:3; -webkit-box-orient:vertical;}
+.riview_box .best_review a .lap > div.txt_best_review p{height:6.4rem; margin-top: 0.8rem; overflow:hidden; line-height:2.1333rem; color:#666; font-size:1.3rem; font-weight:200; display:-webkit-box; text-overflow:ellipsis; -webkit-line-clamp:3; -webkit-box-orient:vertical; word-break:break-all;}
 .riview_box .best_review a .star_score {display:block; margin-bottom:0.7rem; image-rendering:pixelated;}
 .riview_box .best_review a .star_score .star{vertical-align:middle;}
 .riview_box .best_review a .pic .thumb {display:block; padding-top:100%; background-repeat:no-repeat; background-position:50% 50%; background-size:cover;}
@@ -818,12 +833,12 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .Purchase_pop .select_custom .combo .list>li{padding:1.2rem 4.2rem 1.2rem 1.2rem; line-height:2rem; word-wrap: break-word;}
 /* 210415 */
 .dp .popup_box .button_list.clear button{width:100% !important;}
-.dp .open_categori a{display: inline-block;font-size: 1.2rem;font-weight: 300;padding-right: 1.4rem;background: url(/images/mo/ico_sort_arrow.png) no-repeat right center;background-size: 0.7rem 0.43rem;}
+.dp .open_categori a{display: inline-block;font-size: 1.2rem;font-weight: 300;padding-right: 1.4rem;background: url(/images/mo/ico_sort_arrow.png) no-repeat;background-position: 97% 50%; background-size: 0.7rem 0.43rem;}
 .dp .Bulletship_foot .clear{background:#f5f5f5; margin:4rem -2rem; padding:4rem 0 0rem 2rem;}
-.dp .items_option{padding-top:0; margin:0 -2.1rem;}
+.dp .items_option{margin:0 -2.1rem;}
 .dp .items_option #filter{height:4.5rem; border:0.1rem solid #dddddd; font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
 .dp .items_option.fix{position:fixed; top:0; z-index:999; width:100%; left:0; margin:0; box-shadow:rgb(0 0 0 / 30%) 0px 3px 15px 0px;}
-.dp .dp_listItems_wrap .items_option #filter{font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
+.dp .items_option #filter{font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
 .Purchase_pop .select_custom .combo .list>li[data-soldout="true"]::after{top:1rem}
 /* 210416 */
 .dp .filter_box .filter_body .daps1{position:sticky; top:0; background-color:#fff; z-index: 9999;}
@@ -862,7 +877,7 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .brand_floormenu.soldout .prd_buy > .buying{display:none;}
 .brand_floormenu.soldout .prd_buy > .cantbuying{display:block; background-color:#ddd;}
 .dp_lookbook ~ .popup_box .popup_con{margin-bottom:5rem}
-.dp_listItems_wrap.type1 .open_categori{background-color:#fff; padding: 1.6rem 2rem;}
+.dp .open_categori{background-color:#fff; padding: 1.6rem 2rem;}
 /* 210423 */
 .br .brand_si{margin-top:0.1rem}
 .br .brand_si .swiper-wrapper{height:0;}
@@ -936,6 +951,8 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .dp .dp_listItems_cont.type1{padding-bottom:3rem;}
 .dp .dp_listItems_cont.type2{padding-bottom:3rem;}
 .dp .dp_listItems_wrap{padding-bottom:3rem;}
+.dp .dp_listItems_wrap.typeSelector{padding-bottom:3rem;margin-bottom: -1.2rem;}
+.dp .dp_listItems_wrap.type1 .dp_subtitle{margin-top: -4rem;}
 .dp .other_promotion_slide{padding-top:0}
 .dp .dp_lookbook ~ .popup_box.nodata .popup_con{margin-bottom:0;}
 /* 210512 */
@@ -946,14 +963,10 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .pd_detail .riview_box [class^="ex_"] > a .tit em.number {margin-left:0.4rem; color:#666; font-weight:200;}
 .dp .dp_detail_visual .fileAdd{margin-right:1rem}
 .dp .dp_detail_visual .pics{margin-bottom:1rem}
-/*.dp .dp_detail_visual .pics:nth-of-type(4){margin-right:0;}
-.dp .dp_detail_visual .pics:nth-of-type(8){margin-right:0;}*/
-/*.dp .dp_detail_visual .cmt_wrap .cmt_thumb .imgUpload{margin:0}*/
 .my .review .fileAdd{margin-right:1rem}
 .my .review .pics{margin-bottom:1rem}
-/*.my .review .pics:nth-of-type(4){margin-right:0;}
-.my .review .pics:nth-of-type(8){margin-right:0;}*/
-/*.my .review .cmt_wrap .cmt_thumb .imgUpload{margin:0}*/
+.dp .dp_listItems_cont.type2 .swiper-container{overflow: initial;}
+.dp .dp_listItems_cont.type2 .swiper-wrapper{width:43%}
 
 
 
@@ -974,6 +987,7 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .product_floormenu.soldout .prd_buy > .buying{display:none;}
 .product_floormenu.soldout .prd_buy > .cantbuying{display:block; background-color:#ddd;}
 
+.dp_listItems_wrap .open_categori{background-color:#fff; padding: 1.6rem 2rem;}
 /* 토스트팝업 > 구매하기 */
 
 .container.btPop_full.pd_open::after, 
@@ -1798,8 +1812,8 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .dp_hotdeal .itemsGrp.rowtype .item_prod:nth-child(2n) {margin-right: 0;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemBadge, 
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemcolorchip {display: none;}
-.dp_hotdeal .itemsGrp.rowtype .item_prod .item_state {display: table; padding-left:17.6rem; padding-bottom: 0; height:23.4rem; width: 100%;}
-.dp_hotdeal .itemsGrp.rowtype .item_prod .itemLink {display: table-cell; position: static; vertical-align: middle;}
+.dp_hotdeal .itemsGrp.rowtype .item_prod .item_state {display: table;  padding-bottom: 0; height:23.4rem; width: 100%;}
+.dp_hotdeal .itemsGrp.rowtype .item_prod .itemLink {display: table-cell; position: static; vertical-align: top; padding-top: 1.8rem; padding-left:17.6rem;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemLike {right:auto; left:13rem; z-index: 99;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemPic {position: absolute; top: 0; left: 0; margin-bottom: 0; padding-top: 0; width:15.6rem; height:23.4rem;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .shape {padding:0.3rem 1rem; width:auto; height:auto; max-width:4rem; min-height:auto; border-radius:2rem;}
@@ -1808,11 +1822,11 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemPic::after {background: #f5f5f5; opacity:1; z-index: 87;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemPic .pd_img {z-index: 78;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod.sold_out .itemPic:before {content:'SOLD OUT'; position: absolute; top: 50%; left: 50%; font-size:1.4rem; color:#fff; font-weight:bold; background: rgba(0,0,0,.5); width: 100%; height: 100%; transform:translate(-50%, -50%); line-height:23.4rem;; z-index: 99; text-align: center;}
-.dp_hotdeal .itemsGrp.rowtype .item_prod .shape{position:absolute; left:17.6rem; top:3rem;}
-.dp_hotdeal .itemsGrp.rowtype .item_prod .itemBrand {margin:3rem 0 0.5rem;}
-.dp_hotdeal .itemsGrp.rowtype .item_prod .itemComment {position: absolute; left:17.6rem; top:10rem; margin:0;}
-.dp_hotdeal .itemsGrp.rowtype .item_prod .itemName {margin:0;}
-.dp_hotdeal .itemsGrp.rowtype .item_prod .itemPrice {margin:4rem 0 0;}
+.dp_hotdeal .itemsGrp.rowtype .item_prod .shape{position:relative;}
+.dp_hotdeal .itemsGrp.rowtype .item_prod .itemBrand {margin:1.5rem 0 0.5rem;}
+.dp_hotdeal .itemsGrp.rowtype .item_prod .itemComment {position: relative; top:-6rem; margin:0;}
+.dp_hotdeal .itemsGrp.rowtype .item_prod .itemName {margin:0 0 4rem;}
+.dp_hotdeal .itemsGrp.rowtype .item_prod .itemPrice {margin:0;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemPrice_original {margin:0 0 0.7rem;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemPercent {margin:0; font-size:1.8rem; font-weight:bold;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemEt{margin-top:1rem;}
@@ -1820,6 +1834,11 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemEt .shopBag button span{position:relative; padding-left:1.6rem;}
 .dp_hotdeal .itemsGrp.rowtype .item_prod .itemEt .shopBag button span:after{content:''; position:absolute; left:0; top:50%; width:1rem; height:1.2rem; background:url(/images/mo/ico_shopbag.png) center center no-repeat; background-size:contain; -webkit-transform:translateY(-50%); transform:translateY(-50%);}
 
+.itemsGrp.rowtype .item_prod .shopBag {width: calc(100% - 17.6rem); margin-top: 0;position: absolute;bottom: 1.8rem;left: 17.6rem; z-index: 50;}
+.itemsGrp.rowtype .item_prod .shopBag .btn {width:100%; height:3rem; line-height:3rem; font-size:1.1rem;}
+.itemsGrp.rowtype .item_prod .shopBag .btn span {position:relative; padding-left:25px; line-height:1;}
+.itemsGrp.rowtype .item_prod .shopBag .btn span::before {content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); width:15px; height:18px; background: url('/images/pc/ico_shopbag.png') no-repeat 50% 50%;}
+
 /* 기획전 - dp_exhibition */
 .dp .dp_exhibition .list_content .itemsGrp.n3{margin-bottom:0; padding-bottom:0;}
 .dp .dp_exhibition .list_content .itemsGrp.n3 .item_prod {width: 31.666%; float: left; margin-right: 2.5%; margin-top:0;}
@@ -1844,6 +1863,7 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .dp .dp_listItems_wrap .items_option .select{display:block;}
 /*.dp .promotion_visual.type1{margin-bottom:-5.3rem;}*/
 .dp .promotion_visual.type1 .mid_banner{background-color:#fff;}
+.dp .dp_listItems_cont .item_prod {width: 100%;}
 .dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-slide{padding:0 14%}
 .dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-slide .item_prod .itemPercent{font-size:2.4rem;}
 .dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-slide .item_prod .itemName{font-size:1.3rem; max-height:3.5rem;}

+ 1 - 0
src/main/webapp/ux/mo/css/style24_m.css

@@ -1016,6 +1016,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .part_goods .goods_detail {position: relative; padding:0 0 0 11rem;}
 .part_goods .goods_detail .thumb_box {background: #f5f5f5; width:9rem; height:13.5rem; position: absolute; left: 0; top: 0;}
 .part_goods .goods_detail .thumb_box a {display:block; background:#f5f5f5;}
+.part_goods .goods_detail .thumb_box img {position: relative; top: 50%; transform: translateY(-50%); width: 100%;}
 
 .part_goods .goods_detail .info_box {min-height:13.5rem; padding-top: 1rem;}
 .part_goods .goods_detail .info_box .od_name a {display:block;}

+ 1 - 1
src/main/webapp/ux/mo/js/common_m.js

@@ -732,7 +732,7 @@ $(document).ready(function () {
         });
 
         // 210405_사이즈 선택시 구매하기 팝업 추가
-        $('.opt_size .form_field div').click(function(){
+        $('.opt_size .form_field div input').click(function(){
             popOpenScroll();
             //$('.btPop_body .lap span').css('color', 'red')
             //console.log($(this)[0]);

+ 33 - 32
src/main/webapp/ux/style24_link.js

@@ -461,14 +461,14 @@ var cfnGoToGoodsDetail = function (goodsCd, colorCd, ithrCd, contentsLoc, planDt
  * @access : public
  * @desc   : 공통 레이어 띄우기
  * <pre>
- *	 cfOpenLayer(_PAGE_CARD_LAYER, 'layer_card_benefit');
+ *	 cfnOpenLayer(_PAGE_CARD_LAYER, 'layer_card_benefit');
  * </pre>
  * @param  : page - page. 필수
  * @param  : tgt - 레이어가 표시될 위치(예, div 태크의 ID). 필수
  * @param  : oParam - Parameter Object. 옵션
  * @param  : callbackFnc - 콜백함수. 옵션
  */
-function cfOpenLayer(page, tgt, oParam, callbackFnc) {
+function cfnOpenLayer(page, tgt, oParam, callbackFnc) {
 	if (!oParam) oParam = new Object();
 
 	$.post(page
@@ -537,7 +537,7 @@ function cfCardInfo() {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_CARD_PRMT_LAYER, 'layer_card_benefit');
+	cfnOpenLayer(_PAGE_CARD_PRMT_LAYER, 'layer_card_benefit');
 }
 
 /**
@@ -565,7 +565,7 @@ function cfGoodsCouponInfo(goodsCd, goodsType) {
 	}
 	var params = goodsCd;
 	if (typeof (goodsType) != 'undefined') params += "&goodsType=" + goodsType;
-	cfOpenLayer(_PAGE_GOODS_COUPON_LAYER + params, 'layer_goods_coupon');
+	cfnOpenLayer(_PAGE_GOODS_COUPON_LAYER + params, 'layer_goods_coupon');
 }
 
 /**
@@ -586,7 +586,7 @@ function cfGoodsShopBenefitInfo(goodsCd) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_GOODS_SHOP_BENEFIT_LAYER+goodsCd, 'layer_shopping_benefit');
+	cfnOpenLayer(_PAGE_GOODS_SHOP_BENEFIT_LAYER+goodsCd, 'layer_shopping_benefit');
 }
 
 /**
@@ -607,7 +607,7 @@ function cfGoodsSizeInfo(goodsCd, colorCd) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_GOODS_SIZEINFO_LAYER+goodsCd +'/'+colorCd, 'layer_size_info');
+	cfnOpenLayer(_PAGE_GOODS_SIZEINFO_LAYER+goodsCd +'/'+colorCd, 'layer_size_info');
 }
 
 /**
@@ -633,7 +633,7 @@ function cfGoodsInstockAlarmInfo(goodsCd, colorCd) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_GOODS_INSTOCK_ALARM_LAYER+goodsCd+'/'+colorCd, 'layer_instock_alarm');
+	cfnOpenLayer(_PAGE_GOODS_INSTOCK_ALARM_LAYER+goodsCd+'/'+colorCd, 'layer_instock_alarm');
 }
 
 /**
@@ -660,7 +660,7 @@ function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq) {
 	params += '&photoYn=' + photoYn;
 	if (typeof (attachSq) != 'undefined') params += "&attachSq=" + attachSq;
 	
-	cfOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
+	cfnOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
 }
 
 /**
@@ -681,7 +681,7 @@ function cfGoodsReviewPhoto(goodsCd) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_GOODS_REVIEW_PHTO_LIST_LAYER+goodsCd, 'layer_review_photo');
+	cfnOpenLayer(_PAGE_GOODS_REVIEW_PHTO_LIST_LAYER+goodsCd, 'layer_review_photo');
 }
 
 /**
@@ -689,14 +689,14 @@ function cfGoodsReviewPhoto(goodsCd) {
  * @access : public
  * @desc   : 공통 full 레이어 띄우기
  * <pre>
- *	 cfOpenFullLayer(_PAGE_CARD_LAYER, 'layer_card_benefit');
+ *	 cfnOpenFullLayer(_PAGE_CARD_LAYER, 'layer_card_benefit');
  * </pre>
  * @param  : page - page. 필수
  * @param  : tgt - 레이어가 표시될 위치(예, div 태크의 ID). 필수
  * @param  : oParam - Parameter Object. 옵션
  * @param  : callbackFnc - 콜백함수. 옵션
  */
-function cfOpenFullLayer(page, tgt, oParam, callbackFnc) {
+function cfnOpenFullLayer(page, tgt, oParam, callbackFnc) {
 	if (!oParam) oParam = new Object();
 
 	$.post(page
@@ -753,9 +753,9 @@ function cfGoodsQng(goodsCd) {
 	}
 
 	if ("P" == _frontGb){
-		cfOpenFullLayer(_PAGE_GOODS_QNA_LAYER + goodsCd, 'layer_goods_qna');
+		cfnOpenFullLayer(_PAGE_GOODS_QNA_LAYER + goodsCd, 'layer_goods_qna');
 	}else{
-		cfOpenLayer(_PAGE_GOODS_QNA_LAYER + goodsCd, 'layer_goods_qna');
+		cfnOpenLayer(_PAGE_GOODS_QNA_LAYER + goodsCd, 'layer_goods_qna');
 	}
 }
 
@@ -784,7 +784,7 @@ function cfGoodsQngCreate(goodsCd) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_GOODS_QNA_CREATE_LAYER + goodsCd, 'layer_goods_qna_reg');
+	cfnOpenLayer(_PAGE_GOODS_QNA_CREATE_LAYER + goodsCd, 'layer_goods_qna_reg');
 }
 
 /**
@@ -807,9 +807,9 @@ function cfGoodsDelivery(goodsCd) {
 	}
 
 	if ("P" == _frontGb){
-		cfOpenFullLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
+		cfnOpenFullLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
 	}else{
-		cfOpenLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
+		cfnOpenLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
 	}
 	
 	
@@ -834,9 +834,9 @@ function cfGoodsReview(goodsCd) {
 	}
 	
 	if ("P" == _frontGb){
-		cfOpenFullLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review',null , fnReviewLayerCollBack);
+		cfnOpenFullLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review',null , fnReviewLayerCollBack);
 	}else{
-		cfOpenLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review');
+		cfnOpenLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review');
 	}
 
 	
@@ -859,7 +859,7 @@ function cfnConsentUseInfo(custNm) {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_CUSTOMER_CONSENT_USERINFO, 'layer_consent_useinfo',params);
+	cfnOpenLayer(_PAGE_CUSTOMER_CONSENT_USERINFO, 'layer_consent_useinfo',params);
 }
 
 
@@ -883,7 +883,7 @@ function cfnPasswordModify() {
 		$('body').append(str);
 	}
 
-	cfOpenLayer(_PAGE_PASSWORD_MODIFY, 'pswordModifyPop');
+	cfnOpenLayer(_PAGE_PASSWORD_MODIFY, 'pswordModifyPop');
 }
 
 /**
@@ -905,7 +905,7 @@ function cfnUseTermsLayer() {
 	if ($('#policiesTermsPop').length == 0) {
 		$('body').append(str);
 	}
-	cfOpenLayer(_PAGE_USE_TERMS_LAYER, 'policiesTermsPop');
+	cfnOpenLayer(_PAGE_USE_TERMS_LAYER, 'policiesTermsPop');
 }
 
 /**
@@ -926,7 +926,7 @@ function cfnPrivacyPolicyLayer() {
 	if ($('#policiesPrivacyPop').length == 0) {
 		$('body').append(str);
 	}
-	cfOpenLayer(_PAGE_PRIVACY_POLICY_LAYER, 'policiesPrivacyPop');
+	cfnOpenLayer(_PAGE_PRIVACY_POLICY_LAYER, 'policiesPrivacyPop');
 }
 
 /**
@@ -948,7 +948,7 @@ function cfnPrivacyTrustLayer() {
 	if ($('#trustPrivacy_pop').length == 0) {
 		$('body').append(str);
 	}
-	cfOpenLayer(_PAGE_PRIVACY_TRUST_LAYER, 'trustPrivacyPop');
+	cfnOpenLayer(_PAGE_PRIVACY_TRUST_LAYER, 'trustPrivacyPop');
 }
 
 /**
@@ -1263,10 +1263,10 @@ var cfnGoToMypageReview = function (ordNo,ordDtlNo,goodsCd) {
 * @access : public
 * @desc   : 상품평- 베스트 리뷰 보기
 * <pre>
-*		cfMypageReviewDetail(goodsCd, photoYn, reviewSq);
+*		cfMypageReviewDetail(goodsCd, photoYn, reviewSq, attachSq);
 * </pre>
 */
-function cfMypageReviewDetail(goodsCd, photoYn, reviewSq) {
+function cfMypageReviewDetail(goodsCd, photoYn, reviewSq, attachSq) {
 	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
 	if ("P" != _frontGb){
 		str = '<div class="modal pop_full fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
@@ -1279,8 +1279,9 @@ function cfMypageReviewDetail(goodsCd, photoYn, reviewSq) {
 	var params = '?goodsCd=' + goodsCd;
 	params += '&reviewSq=' + reviewSq;
 	params += '&photoYn=' + photoYn;
+	if (typeof (attachSq) != 'undefined') params += "&attachSq=" + attachSq;
 	
-	cfOpenLayer(_PAGE_MYPAGE_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
+	cfnOpenLayer(_PAGE_MYPAGE_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
 }
 
 /**
@@ -1309,10 +1310,10 @@ function copyToClipboard() {
  * @access : public
  * @desc   : 검색 full 팝업
  * <pre>
- *		cfSearchLayer();
+ *		cfnSearchLayer();
  * </pre>
  */
-function cfSearchLayer() {
+function cfnSearchLayer() {
 	var Param = new Object();
 	var str = '<div class="common_search active" id="layer_search"></div>';
 	if ("P" != _frontGb){
@@ -1323,10 +1324,10 @@ function cfSearchLayer() {
 		$('body').append(str);
 	}
 
-	if ("P" == _frontGb){
-		cfOpenFullLayer(_PAGE_SEARCH_LAYER, 'layer_search');
-	}else{
-		cfOpenLayer(_PAGE_SEARCH_LAYER, 'layer_search');
+	if ("P" == _frontGb) {
+		cfnOpenFullLayer(_PAGE_SEARCH_LAYER, 'layer_search');
+	} else {
+		cfnOpenLayer(_PAGE_SEARCH_LAYER, 'layer_search');
 	}
 }