Forráskód Böngészése

Merge branch 'sowon' into develop

sowon4187 5 éve
szülő
commit
cdff10c904

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

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

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

@@ -66,4 +66,26 @@ public class TsfReviewService {
 		 return reviewDao.getReviewOptionList(goodsCd);
 	}
 	
+	/**
+	 * 마이페이지 작성가능한 리뷰 건수
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public int getCompleteReviewCount(Review review) {
+		return reviewDao.getCompleteReviewCount(review);
+	}
+	
+	/**
+	 * 마이페이지 작성가능한 리뷰 목록
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public Collection<Review> getCompleteReviewList(Review review){
+		return reviewDao.getCompleteReviewList(review);
+	}
+	
 }

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

@@ -24,6 +24,7 @@ import com.style24.front.biz.thirdparty.NiceCertify;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.Counsel;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustAccount;
 import com.style24.persistence.domain.Customer;
@@ -31,6 +32,7 @@ import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.WishList;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -720,7 +722,7 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 
-	/* 김소원 상품권 쿠폰 시작 */
+	/* 김소원 상품권 쿠폰 리뷰 시작 */
 	/**
 	 * 마이페이지 상품권화면
 	 *
@@ -826,6 +828,86 @@ public class TsfMypageController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailPop"));
 		return mav;
 	}
+	
+	/**
+	 * 마이페이지 리뷰화면
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 24
+	 */
+	@GetMapping("/review/form")
+	public ModelAndView mypageReviewForm(Review review) {
+		ModelAndView mav = new ModelAndView();
+		
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+		review.setSiteCd(TscConstants.Site.STYLE24.value());
+		// 작성가능한 리뷰 카운트
+		mav.addObject("completeReviewCount", reviewService.getCompleteReviewCount(review));
+		// 작성가능한 리뷰 목록
+		//mav.addObject("completeReviewList", reviewService.getCompleteReviewList(review));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewForm"));
+
+		return mav;
+	}
+	
+	/**
+	 * 마이페이지 리뷰 목록
+	 * @param review
+	 * @return
+	 * @author sowon
+	 * @since 2021. 03. 25
+	 */
+	@PostMapping("/review/list")
+	@ResponseBody
+	public GagaMap getMypageReviewList(@RequestBody Review review) {
+
+		review.setSiteCd(TscConstants.Site.STYLE24.value());
+
+		GagaMap result = new GagaMap();
+
+		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
+		pageable.setTotalCount(reviewService.getCompleteReviewCount(review));
+		review.setPageable(pageable);
+		log.info("pageable: {}", pageable);
+		log.info("totalCount {}", pageable.getTotalCount());
+		
+
+		if (TsfSession.isLogin()) {
+			review.setCustNo(TsfSession.getInfo().getCustNo());
+		}
+
+		result.set("paging", review);
+		result.set("completeReviewCount", reviewService.getCompleteReviewCount(review));
+		result.set("dataList", reviewService.getCompleteReviewList(review));
+
+		return result;
+	}
+	
+	/**
+	 * 마이페이지 리뷰작성화면
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 25
+	 */
+	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}")
+	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo,@PathVariable(value = "ordDtlNo") Integer ordDtlNo,@PathVariable(value = "goodsCd") String goodsCd) {
+		Review review = new Review();
+		ModelAndView mav = new ModelAndView();
+		
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+		review.setSiteCd(TscConstants.Site.STYLE24.value());
+		review.setOrdNo(ordNo);
+		review.setOrdDtlNo(ordDtlNo);
+		review.setGoodsCd(goodsCd);
+		
+		mav.addObject("completeReviewList", reviewService.getCompleteReviewList(review));
+		
+		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewCreateForm"));
+
+		return mav;
+	}
 
 	/*신주승 시작*/
 

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

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

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

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

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

@@ -276,4 +276,139 @@
 		WHERE R.GOODS_CD = #{goodsCd}
 	</select>
 
+	<!-- 마이페이지 작성가능한 리뷰 -->
+	<select id="getCompleteReviewList" parameterType="Review" resultType="Goods">
+		SELECT F.*
+			  , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+		FROM
+		(
+			SELECT O.ORD_NO 
+			      ,O.ORD_NM
+			      ,DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
+			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
+								 			<!--  AND OD.ORD_DTL_STAT = 'G013_70' 구매 확정인것만 -->
+			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			                  	              <!--    AND ODI.ORD_DTL_STAT = 'G013_70' -->
+			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
+			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
+			WHERE 1=1
+				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N')
+				AND O.CUST_NO = 100011
+				AND O.DISP_YN = 'Y'
+				AND O.SITE_CD = #{siteCd}
+				<if test="ordNo!=null and ordNo != ''">
+				AND O.ORD_NO = #{ordNo}
+				</if>
+				<if test="ordDtlNo!=null and ordDtlNo != ''">
+				AND OD.ORD_DTL_NO = #{ordDtlNo}
+				</if>
+				<if test="goodsCd!=null and goodsCd!=''">
+				AND G.GOODS_CD = #{goodsCd}
+				</if>
+			GROUP BY O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+		)F
+		ORDER BY F.PAY_DT DESC
+	</select>
+	
+	<!-- 마이페이지 작성가능한 리뷰 -->
+	<select id="getCompleteReviewCount" parameterType="Review" resultType="int">
+		SELECT  COUNT(*) AS CNT 
+		FROM
+		(
+			SELECT O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS DT -- 남은시간
+			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
+								 			<!--  AND OD.ORD_DTL_STAT = 'G013_70' 구매 확정인것만 -->
+			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			                  	              <!--    AND ODI.ORD_DTL_STAT = 'G013_70' -->
+			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
+			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
+			WHERE 1=1
+				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N')
+				AND O.CUST_NO = 100011
+				AND O.DISP_YN = 'Y'
+				AND O.SITE_CD = #{siteCd}
+			GROUP BY O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+		)F
+		ORDER BY F.PAY_DT DESC
+	</select>
 </mapper>

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

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

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

@@ -0,0 +1,375 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MypageReviewFormWeb.html
+ * @desc    : 마이페이지 > 리뷰 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.24   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+		<div class="content myReviewWrite"> <!-- 페이지특정 클래스 = myReviewWrite -->
+				<div class="cont_body">
+					<!-- CONT-BODY -->
+					<div class="lnb">
+						<div class="lnb_tit">
+							<h2>마이페이지</h2>
+						</div>
+						<div class="lnb_list">
+							<ul id="mypageLnbList"></ul>
+						</div>
+					</div>
+					<div class="cont">
+						<div class="sec_head">
+							<h3 class="subH1">리뷰</h3>
+						</div>
+						<div class="sec_body">
+							<div class="com_info_txt">
+								<p class="tit">리뷰 안내</p>
+								<ul>
+									<li>일반 리뷰 작성 시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다!</li>
+									<li>월 최대 10,000 P까지 적립 가능합니다.(합산 후 월 1회 지급)</li>
+									<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다!</li>
+									<li>리뷰 작성시 욕설, 비방, 선정적인 내용등이 있을 경우 통보 없이 관리자에 의해 삭제 될 수 있습니다.</li>
+								</ul>
+							</div>
+							
+							<form class="form_wrap">
+								<h4 class="subH3">리뷰쓰기</h4>
+								<div class="part_goods">
+									<div class="goods_cont">
+										<!-- 주문상품 -->
+										<th:block th:each="review, status : ${completeReviewList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+										<div class="goods_info">
+											<div class="order_desc">
+												<div class="goods_box">
+													<div class="gd_item">	
+														<a href="">
+															<span class="thumb">
+																<img th:src="${imageUrl + '/' + review.sysImgNm}" width="100%" alt="">
+															</span>
+															<p>
+																<span class="buy_date"><em th:text="${review.payDt}"></em>&nbsp;구매</span>
+															</p>
+															<p>
+																<span class="brand" th:text="${review.brandEnm}"></span>
+																<!-- <span class="tag">STYLE24 일반배송</span> -->
+															</p>
+															<p>
+																<span class="name" th:text="${review.goodsNm}"></span>																
+															</p>
+														</a>
+													</div>
+													<div class="gd_opt">
+														<div class="option_wrap">
+															<span class="title sr-only">주문 옵션</span>
+															<span class="option">[[${review.optCd1}]]K&nbsp;/&nbsp;[[${review.optCd2}]]</span>
+														</div>
+													</div>
+												</div>
+											</div>
+										</div>
+										</th:block>
+										<!-- //주문상품 -->
+									</div>
+								</div>			
+
+								<h4 class="subH3">별점 선택</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>   
+										<tr>
+											<th>
+												별점
+											</th>
+											<td>
+												<div class="input_starscore">
+													<button type="button"></button>
+													<button type="button"></button>
+													<button type="button"></button>
+													<button type="button"></button>
+													<button type="button"></button>
+												</div>
+											</td>
+										</tr>
+									</table>
+								</div>
+
+								<h4 class="subH3">키 / 몸무게</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>   
+										<tr>
+											<th>
+												키
+											</th>
+											<td>
+												<div class="input_my_physical">
+													<div class="form_field">
+														<div class="input_wrap">
+															<input type="text" class="form_control" placeholder="숫자만 입력해 주세요.">
+															<span class="unit">cm</span>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												몸무게
+											</th>
+											<td>
+												<div class="input_my_physical">
+													<div class="form_field">
+														<div class="input_wrap">
+															<input type="text" class="form_control" placeholder="숫자만 입력해 주세요.">
+															<span class="unit">cm</span>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+									</table>
+								</div>
+								
+								<h4 class="subH3">상품 평가</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>   
+										<tr>
+											<th>
+												사이즈
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="rdi_review_size" id="rdi_review_size1" value="" checked="">
+															<label for="rdi_review_size1"><span>작음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_size" id="rdi_review_size2" value="">
+															<label for="rdi_review_size2"><span>딱맞음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_size" id="rdi_review_size3" value="">
+															<label for="rdi_review_size3"><span>큼</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												컬러
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="rdi_review_color" id="rdi_review_color1" value="" checked="">
+															<label for="rdi_review_color1"><span>밝음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_color" id="rdi_review_color2" value="">
+															<label for="rdi_review_color2"><span>똑같음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_color" id="rdi_review_color3" value="">
+															<label for="rdi_review_color3"><span>큼</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												핏
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="rdi_review_fit" id="rdi_review_fit1" value="" checked="">
+															<label for="rdi_review_fit1"><span>슬림</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_fit" id="rdi_review_fit2" value="">
+															<label for="rdi_review_fit2"><span>레귤러</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_fit" id="rdi_review_fit3" value="">
+															<label for="rdi_review_fit3"><span>오버</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												두께감
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="rdi_review_thick" id="rdi_review_thick1" value="" checked="">
+															<label for="rdi_review_thick1"><span>얇음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_thick" id="rdi_review_thick2" value="">
+															<label for="rdi_review_thick2"><span>적당함</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_thick" id="rdi_review_thick3" value="">
+															<label for="rdi_review_thick3"><span>도톰함</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												무게감
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="rdi_review_weight" id="rdi_review_weight1" value="" checked="">
+															<label for="rdi_review_weight1"><span>가벼움</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_weight" id="rdi_review_weight2" value="">
+															<label for="rdi_review_weight2"><span>적당함</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_weight" id="rdi_review_weight3" value="">
+															<label for="rdi_review_weight3"><span>무거움</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												볼너비
+											</th>
+											<td>
+												<div class="input_simple_review">
+													<div class="form_field">
+														<div>
+															<input type="radio" name="rdi_review_width" id="rdi_review_width1" value="" checked="">
+															<label for="rdi_review_width1"><span>작음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_width" id="rdi_review_width2" value="">
+															<label for="rdi_review_width2"><span>딱맞음</span></label>
+														</div>
+														<div>
+															<input type="radio" name="rdi_review_width" id="rdi_review_width3" value="">
+															<label for="rdi_review_width3"><span>큼</span></label>
+														</div>
+													</div>
+												</div>
+											</td>
+										</tr>
+									</table>
+								</div>
+
+								<h4 class="subH3">고객님의 리뷰가 다른 고객들에게 도움이 될 수 있어요!</h4>
+								<div class="tbl type1">
+									<table>
+										<colgroup>
+											<col width="170">
+											<col width="*">
+										</colgroup>   
+										<tr>
+											<th>
+												리뷰내용
+											</th>
+											<td>
+												<div class="input_txt_review">
+													<div class="form_field">
+														<div class="input_wrap">
+															<textarea class="doc_review" name="" id="" cols="30" rows="10" placeholder="·&nbsp;리뷰 내용은 최소 10자 이상 입력해 주세요.&#13;&#10;·&nbsp;상품과 무관하거나 스팸, 음란, 불법적인 내용의 리뷰는 통보 없이 삭제되며, 지급한 포인트는 회수 될 수 있습니다.&#13;&#10;·&nbsp;리뷰 등록 후 관리자 승인이 필요한 경우 바로 노출이 되지 않을 수 있습니다." style="resize: none;"></textarea>
+															<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/500</p>			
+														</div> 
+													</div>
+												</div>
+											</td>
+										</tr>
+										<tr>
+											<th>
+												포토/영상 첨부
+											</th>
+											<td>
+												<div class="form_field">
+													<div class="input_wrap">
+														<!-- 이미지첨부 -->
+														<div class="form_field">
+															<div class="imgUpload">
+																<label for="fileAdd" class="fileAdd">첫번째업로드</label>
+																<input type="file" id="fileAdd" name="files[]">
+															</div>
+														</div>
+														<!-- //이미지첨부 -->
+													</div> 
+												</div>
+												<div class="txt_info">
+													<ul>
+														<li>
+															최대 10개까지 등록 가능
+														</li>
+													</ul>
+												</div>
+											</td>
+										</tr>
+									</table>
+								</div>							
+
+								<div class="btn_footer_area">
+									<button type="button" class="btn btn_default btn_md"><span>취소</span></button>
+									<button type="button" id="btn_review_registration" class="btn btn_dark btn_md"><span>리뷰 등록</span></button>
+								</div>		
+							</form>							
+						</div>
+					</div>
+					<!-- // CONT-BODY -->					
+				</div>
+			</div>
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+$(document).ready(function() {
+
+	// 마이페이지 LNB 설정
+	fnSetMypageLnbList(7);
+
+	// 마이페이지 location 설정
+	fnSetMypageLocation('리뷰', '_PAGE_MYPAGE_REVIEW');
+	
+});
+</script>
+</th:block>
+
+</body>
+</html>

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

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

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

@@ -193,7 +193,7 @@
 									<div class="swiper-slide">
 										<a th:onclick="planDetailSearch([[${PlanData.planSq}]])">
 											<div class="thumb">
-												<img th:src="${@environment.getProperty('domain.image')+'/planning/'+PlanData.mainPimg}" alt="${PlanData.planNm}">
+												<img th:src="${@environment.getProperty('domain.image')+PlanData.mainPimg}" alt="${PlanData.planNm}">
 											</div>
 											<div class="txt">
 												<span class="brand" th:if="${PlanData.cnt > 1}" th:text="${PlanData.brand}+' 외'"></span>
@@ -377,7 +377,7 @@ if(image != null || image != ''){
 	
 	for (var i = 0; i < image.length; i++) {
 		html += '                	<div class="swiper-slide">';
-		html += '                    	<img alt="" src="'+ imgUrl +'/planning/'+image[i].itemVal +'">';
+		html += '                    	<img alt="" src="'+ imgUrl + image[i].itemVal +'">';
 		html += '                	</div>';
 	}
 	html += '            	</div>';

+ 1 - 0
src/main/webapp/ux/style24_link.js

@@ -59,6 +59,7 @@ const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";					// 마이페
 const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 포인트
 const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";				// 마이페이지 > 상품권
 const _PAGE_MYPAGE_REVIEW = _frontUrl + "/mypage/review/form";					// 마이페이지 > 리뷰
+const _PAGE_MYPAGE_CREATE_REVIEW = _frontUrl + "/mypage/review/create/form/";	// 마이페이지 > 리뷰 > 리뷰작성
 const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	// 마이페이지 > 배송지 관리
 const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
 const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/confirm/form";		// 마이페이지 > 내정보 관리 > 회원정보 확인