Browse Source

[web]기획전 쿠폰 수정,[mo]핫딜, 리뷰 수정

sowon4187 5 years ago
parent
commit
c0a2d085c1

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

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

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

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

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

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

@@ -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,6 +1279,7 @@ 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');
 }