Browse Source

Merge branch 'develop' into jsshin

jsshin 5 years ago
parent
commit
c77e154f06
20 changed files with 912 additions and 94 deletions
  1. 10 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  2. 15 15
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  3. 11 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  4. 4 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  5. 27 7
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  6. 1 0
      src/main/java/com/style24/persistence/domain/Goods.java
  7. 7 0
      src/main/java/com/style24/persistence/domain/Plan.java
  8. 30 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  9. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  10. 2 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  11. 262 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  12. 112 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html
  13. 134 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html
  14. 92 14
      src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html
  15. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  16. 174 28
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  17. 25 22
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  18. 1 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  19. 1 0
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  20. 1 0
      src/main/webapp/ux/mo/css/style24_m.css

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

@@ -342,4 +342,14 @@ public interface TsfPlanningDao {
 	 */
 	Collection<Plan> getCustAttendEntryList(Plan plan);
 	
+	/**
+	 * 기획전/이벤트 댓글
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 8
+	 */
+	Collection<Plan> getReplyList(Plan plan);
+	
 }

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

@@ -20,10 +20,10 @@ import com.style24.persistence.domain.Cate4;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
+import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Popup;
-import com.style24.persistence.domain.GoodsSearch;
-import com.style24.persistence.domain.Goods;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -76,7 +76,7 @@ public class TsfDisplayService {
 	 * @author gagamel
 	 * @date 2021. 3. 11
 	 */
-	@Cacheable(value = "commonGnb", key = "'gnbTab-'.concat(#gnbTab.gtabGb)")
+//	@Cacheable(value = "commonGnb", key = "'gnbTab-'.concat(#gnbTab.gtabGb)")
 	public Collection<GnbTab> getGnbTabList(GnbTab gnbTab) {
 		return displayDao.getGnbTabList(gnbTab);
 	}
@@ -270,7 +270,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 16
 	 */
-	public Collection<MainLayout> getMainLayout(MainLayout mainLayout){
+	public Collection<MainLayout> getMainLayout(MainLayout mainLayout) {
 		return displayDao.getMainLayout(mainLayout);
 	}
 
@@ -281,10 +281,10 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 16
 	 */
-	public Cate4Srch getCate4srch(Cate4Srch cate4Srch){
+	public Cate4Srch getCate4srch(Cate4Srch cate4Srch) {
 		return displayDao.getCate4srch(cate4Srch);
 	}
-	
+
 	/**
 	 * 팝업 목록
 	 *
@@ -296,7 +296,7 @@ public class TsfDisplayService {
 	public Collection<Popup> getPopupList(Popup popup) {
 		popup.setSiteCd(TscConstants.Site.STYLE24.value());
 		return displayDao.getPopupList(popup);
-	} 
+	}
 
 	/**
 	 * 몰메인 MD PICK 목록
@@ -305,21 +305,21 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 3. 30
 	 */
-	public Collection<Contents> getContentsForGoods(Contents contents){
+	public Collection<Contents> getContentsForGoods(Contents contents) {
 		Collection<Contents> contentsList = displayDao.getContentsList(contents);
 		Cate4Srch tempContents = new Cate4Srch();
-		for(Contents data : contentsList){
+		for (Contents data : contentsList) {
 			tempContents.setContentsLoc(data.getContentsLoc());
 			tempContents.setDispOrd(data.getDispOrd());
 			tempContents.setMaxRow(20);
 			tempContents.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
-			if("SMM007".equals(data.getContentsLoc())){
+			if ("SMM007".equals(data.getContentsLoc())) {
 				data.setBannerList(displayDao.getContentsBannerList(data));
 			}
 			data.setGoodsList(goodsDao.getContentsCategoryGoodsList(tempContents));
 		}
 
-		log.info("getContentsForGoods contentsList.size()::{}",contentsList.size());
+		log.info("getContentsForGoods contentsList.size()::{}", contentsList.size());
 
 		return contentsList;
 
@@ -332,7 +332,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 5
 	 */
-	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb){
+	public Collection<GoodsSearch> getCategoryFilter(Cate4Srch cate4Srch, String filterGb) {
 		cate4Srch.setFilterGb(filterGb);
 		return displayDao.getCategoryFilter(cate4Srch);
 	}
@@ -344,7 +344,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 7
 	 */
-	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch){
+	public Collection<GoodsSearch> getCategoryFilterBenefit(Cate4Srch cate4Srch) {
 		return displayDao.getCategoryFilterBenefit(cate4Srch);
 	}
 
@@ -355,7 +355,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 7
 	 */
-	public int getCategoryGoodsCount(GoodsSearch goodsSearch){
+	public int getCategoryGoodsCount(GoodsSearch goodsSearch) {
 		return displayDao.getCategoryGoodsCount(goodsSearch);
 	}
 
@@ -366,7 +366,7 @@ public class TsfDisplayService {
 	 * @author bin2107
 	 * @date 2021. 4. 8
 	 */
-	public Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch){
+	public Collection<Goods> getCategoryGoodsList(GoodsSearch goodsSearch) {
 		Collection<Goods> goodsList = displayDao.getCategoryGoodsList(goodsSearch);
 		return goodsList;
 	}

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

@@ -510,5 +510,16 @@ public class TsfPlanningService {
 		return planningDao.getCustAttendEntryList(plan);
 	}
 
+	/**
+	 * 기획전/이벤트 댓글
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 8
+	 */
+	public Collection<Plan> getReplyList(Plan plan){
+		return planningDao.getReplyList(plan);
+	}
 
 }

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

@@ -6,6 +6,7 @@ import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -1185,7 +1186,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 03. 24
 	 */
 	@GetMapping("/review/form")
-	public ModelAndView mypageReviewForm(Review review) {
+	public ModelAndView mypageReviewForm(Review review, Device device) {
 		ModelAndView mav = new ModelAndView();
 		
 		review.setCustNo(TsfSession.getInfo().getCustNo());
@@ -1282,7 +1283,7 @@ public class TsfMypageController extends TsfBaseController {
 	 */
 	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}/{reviewStat}")
 	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo,@PathVariable(value = "ordDtlNo") Integer ordDtlNo
-			,@PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat) {
+			,@PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat, Device device) {
 		Review review = new Review();
 		ModelAndView mav = new ModelAndView();
 		
@@ -1351,7 +1352,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 03. 29
 	 */
 	@GetMapping("/wish/list/form")
-	public ModelAndView mypageWishListForm(WishList wishList) {
+	public ModelAndView mypageWishListForm(WishList wishList, Device device) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("mypage/MypageWishListForm"));
 		wishList.setSiteCd(TscConstants.Site.STYLE24.value());
 		wishList.setFrontGb(TsfSession.getFrontGb());

+ 27 - 7
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -1,5 +1,6 @@
 package com.style24.front.biz.web;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
@@ -27,13 +28,14 @@ import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Poll;
 import com.style24.persistence.domain.Review;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 
@@ -185,13 +187,11 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setTmplType("G082_51");
 		mav.addObject("goods2Info", planningService.getPlanGoodsDisplayList(plan));
 
-		//상품4열 전시
+		// 상품4열 전시
 		plan.setTmplType("G082_52");
 		mav.addObject("goods4Info", planningService.getPlanGoodsDisplayList(plan));
-
-//		mav.addObject("couponList", planningService.getPlusCouponList(plan));
-//
-//		// 코너 목록
+		
+		// 코너 목록
 		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
 		mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
 		
@@ -231,6 +231,26 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 기획전/이벤트 댓글 리스트
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 04. 08
+	 */
+	@GetMapping("/reply/list")
+	@ResponseBody
+	public GagaMap getReplyList(@RequestParam(value="planSq")Integer planSq) {
+		GagaMap result = new GagaMap();
+		Plan plan = new Plan();
+		plan.setPlanSq(planSq);
+		
+		result.set("replyList",planningService.getReplyList(plan));
+		result.set("custNo",TsfSession.getInfo().getCustNo());
+		return result;
+	}
+
+	
 	/**
 	 * 기획전 쿠폰 상세보기 모달
 	 *
@@ -325,7 +345,7 @@ public class TsfPlanningController extends TsfBaseController {
 	 */
 	@GetMapping("/event/main/list")
 	@ResponseBody
-	public Collection<Plan> getPlanningEventMainList(Plan plan) {
+	public Collection<Plan> getPlanningEventMainList(Plan plan, Device device) {
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setFrontGb(TsfSession.getFrontGb());
 		plan.setCustGb(TsfSession.getCustGb());

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

@@ -150,6 +150,7 @@ public class Goods extends TscBaseDomain {
 	private int weight;				// 몸무게
 	private Integer reviewSq;
 	private String goodsStatNm;
+	private String regDtMonth;
 
 	private String sizeGb;		// 사이즈구분(T:상의, B:하의, S:신발)
 

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

@@ -4,6 +4,7 @@ import java.util.Collection;
 import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 
@@ -340,5 +341,11 @@ public class Plan extends TscBaseDomain {
 	private String likeIt;			// 위시리스트담은상품
 	private int maxRow;				// 최대ROW수
 	private Integer exceptPlanSq;	// 제외할기획전번호
+	private String custId;			// 고객ID
+	// Masking
+	public String getMaskingCustId() {
+		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
+	}
+		
 
 }

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

@@ -1200,4 +1200,34 @@
 		AND PLAN_SQ = #{planSq}
 		AND ENTRY_CUST_NO = #{custNo}
 	</select>
+	
+	<!-- 댓글 리스트  (수정필)-->
+	<select id="getReplyList" resultType="Plan" parameterType="Plan">
+		/* TsfPlanning.getReplyList */	
+		SELECT Z.*
+		      ,(SELECT CUST_ID FROM TB_CUSTOMER WHERE CUST_NO = Z.ENTRY_CUST_NO) AS CUST_ID
+		FROM 
+		(		
+			SELECT PE.PLAN_ENTRY_SQ
+			     , PE.PLAN_SQ
+			     , PE.ENTRY_CUST_NO
+			     , DATE_FORMAT(PE.ENTRY_DT,'%Y-%m-%d') AS ENTRY_DT
+			     , PE.ENTRY_VAL1
+			     , PE.ENTRY_VAL2
+			     , PE.ENTRY_VAL3
+			     , PE.ENTRY_VAL4
+			     , PE.ENTRY_VAL5
+			     , PE.ENTRY_VAL6
+			     , PE.ENTRY_VAL7
+			     , PE.ENTRY_VAL8
+			     , PE.REG_NO
+			     , PE.REG_DT
+			     , PE.UPD_NO
+			     , PE.UPD_DT
+			FROM TB_PLAN_ENTRY PE
+			WHERE 1=1
+		    AND PE.PLAN_SQ = #{planSq}
+		    ORDER BY REG_NO DESC
+		)Z
+	</select>
 </mapper>

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

@@ -610,7 +610,7 @@
 				  FROM TB_ORDER O
 				 INNER JOIN TB_ORDER_DETAIL OD
 				    ON O.ORD_NO = OD.ORD_NO
-				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60) -- 구매 확정인것만
+				   AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') -- 구매 확정인것만
 				 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
 				    ON OD.ORD_NO = ODI.ORD_NO
 				   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
@@ -646,7 +646,7 @@
 					</otherwise>
 				</choose>
 				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
-				AND O.CUST_NO = 100000
+				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = 'G000_10'
      			<if test="ordNo!=null and ordNo != ''">

+ 2 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml

@@ -30,13 +30,14 @@
 		/* TsfWishlist.getWishListGoodsList*/
 		SELECT Z.*
 			      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
+			      ,DATE_FORMAT(Z.REG_DT,'%Y.%m') AS REG_DT_MONTH 
 			FROM
 			(
 			WITH TAB_PLAN_GOODS AS (
 			    SELECT W.AF_LINK_CD 
 			          ,W.CONTENTS_LOC 
 			          ,W.CUST_NO 
-			          ,DATE_FORMAT(W.REG_DT,'%Y.%m') AS REG_DT 
+			          ,W.REG_DT
 			          ,CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
 			                    BG.BRAND_GROUP_ENM
 			                ELSE

+ 262 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -0,0 +1,262 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageWishListFormMob.html
+ * @desc    : 마이페이지 > 리뷰 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<!-- 상단헤드 //? -->
+<th:block layout:fragment="content">
+		<main role="" id="" class="container my">
+			<section class="content review">
+				<div class="inner">
+					<div class="ADwrap">
+						<span class="adcopy">일반 리뷰 150P, 포토/영상 리뷰 350P 적립!</span>
+
+						<div class="tip_wrap tip1" >
+							<div class="tip_tit">?</div>
+							<div class="tip_contents">
+								<a href="javascript:;" class="tip_close"><span class="sr-only">팁 닫기</span></a> <!-- 210407_tip_close 요소 추가 -->
+								<p class="tip_txt">
+									<ul>
+										<li>일반 리뷰 작성시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다.</li>
+										<li>월 최대 10,000P까지 적립 가능합니다. <br> (합산 후 월 1회 지급)</li>
+										<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다.</li>
+										<li>리뷰는 주문일 기준 90일간 작성이 가능합니다.</li>
+									</ul>
+								</p>
+							</div>
+						</div>
+					</div>
+
+				</div>
+				<div class="inner wide">
+					<div class="tabWrap">
+						<ul class="tabIndex">
+							<li id="completeReview"><a href="javascript:void(0);">작성 가능한 리뷰<span class="count" th:text="'('+${#numbers.formatInteger(completeReviewCount,0,'COMMA')}+')'"></span></a></li>
+							<li id="alreadyReview"><a href="javascript:void(0);" >내가 쓴 리뷰<span class="count" th:text="'('+${#numbers.formatInteger(alreadyReviewCount,0,'COMMA')}+')'" ></span></a></li>
+						</ul>
+						<div class="tabContents">
+							<div class="tab_cont active">
+								<!-- 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 class="goods_btn_wrap btn_group_flex">
+												<div><button type="button" class="btn btn_default"><span>리뷰쓰기(</span><em>15</em><span>일 남음)</span></button></div>
+											</div>
+										</div>
+										<!-- //굿즈_리뷰 -->
+									</div>
+									
+								</div>
+								<!-- // tab_cont End -->
+							</div>
+							<div class="tab_cont ">
+								<!-- tab_cont Start -->
+
+								<div class="once">
+									<div class="alert" role="alert">
+										<p>관리자가 댓글을 남긴 상품평이 있습니다.</p>
+										<p class="formOnly">바로확인</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>
+										<!--
+											.reply_box(관리자댓글)가 추가된 
+											부모, class="reviewMy"의 
+											id="newreply2"로 이동 됩니다.
+										 -->
+									</div>
+								</div>
+
+								<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>
+
+								<!-- // tab_cont End -->
+							</div>
+						</div>
+					</div>
+				</div>
+			</section>
+		</main>
+<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();
+		gagaPaging.init('searchForm1', fnSearchCallback1, 'paging', 10);
+		gagaPaging.load(1);
+	})
+	
+	$("#alreadyReview").click(function() {
+		$("#completeReview").removeClass("active");
+		$("#alreadyReview").addClass("active");
+		$(".check_notice").show();
+		gagaPaging.init('searchForm2', fnSearchCallback2, 'paging2', 10);
+		gagaPaging.load(1);
+	})
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

+ 112 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html

@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageWishListFormMob.html
+ * @desc    : 마이페이지 > 위시리스트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<!-- 상단헤드 //? -->
+<th:block layout:fragment="content">
+	<main role="" id="" class="container my">
+			<section class="content my_wishlist">
+				<div class="inner">
+					<div class="wishlist" id="wishList">
+					</div>
+				</div>
+			</section>
+		</main>
+<script th:inline="javascript">
+/*<![CDATA[*/
+let month = [[${wishMonth}]];
+
+var wishlistDelete = function(obj) {
+	mcxDialog.confirm("위시리스트를 해제하시겠습니까?", {
+		cancelBtnText : "취소",
+		sureBtnText : "확인",
+		sureBtnClick : function() {
+			cfnPutWishList(obj);
+			ajaxWishList();
+		}
+	});
+}	
+//마이페이지 위시리스트 
+var ajaxWishList = function () {
+	 $.getJSON('/mypage/wish/list', function(result, status) {
+		if (status == 'success') {
+			$('#wishList').html('');
+			html = '';
+			for (var i = 0; i < month.length; i++) {
+				html += '<div class="monthly_wish_wrap">\n';
+				html += '	<div class="date">\n';
+				html += '		<span>'+month[i].regDt+'</span>\n';
+				html += '	</div>\n';
+				html += '	<div class="itemsGrp">\n';
+				
+				$.each(result, function (idx, item) {
+					if (item.regDtMonth == month[i].regDt) {
+						html += '		<div class="item_prod">\n';
+						html += '			<div class="item_state">\n';
+						html += '				<button type="button" class="itemLike likeit" goodsCd="'+item.goodsCd+'" onclick="wishlistDelete(this)">관심상품 추가</button>\n';
+						html += '				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail('+item.goodsCd+')">\n';
+						html += '					<div class="itemPic">\n';
+						html += '						<img class="vLHTC pd_img"  src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">\n';
+						html += '					</div>\n';
+						html += '					<p class="itemBrand">'+item.brandGroupNm+'</p>\n';
+						html += '					<div class="itemName">'+item.goodsNm+'</div>\n';
+						html += '					<p class="itemPrice">\n';
+						
+						if (item.currPrice != item.listPrice) {
+							html+='						<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>\n';
+						}
+						html += item.currPrice.addComma();
+						if (item.dcRate>0) {
+							html+='						<span class=" itemPercent">'+item.dcRate+'%</span>\n';
+						}
+						html += '					</p>\n';
+						html += '					<div class="itemcolorchip">\n';
+						html += '						<span class="chip_color35" value="ABM">BEIGE</span>\n';
+						html += '						<span class="chip_color54" value="BDS">BLACK</span>\n';
+						html += '						<span class="chip_color40" value="YBR">WHITE</span>\n';
+						html += '					</div>\n';
+						html += '					<p class="itemBadge">\n';
+						html += '						<span class="badge13">베스트 </span>\n';
+						html += '					</p>\n';
+						if (item.goodsTnm != null && item.goodsTnm != '') {
+							html+='					<div class="itemComment">'+item.goodsTnm+'</div>\n';
+						}
+						html += '				</a>\n';
+						html += '			</div>\n';
+						html += '		</div>\n';
+						
+					}
+				});
+				
+				html += '	</div>\n';
+				html += '</div>\n';
+				$('#wishList').html(html);
+			}
+		}
+	});
+}
+
+$(document).ready(function() {
+	ajaxWishList();
+});
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

+ 134 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningEventMainFormMob.html

@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : PlanningEventMainFormMob.html
+ * @desc    : 이벤트메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.08   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<!--  container -->
+		<main role="" id="" class="container ev">
+			<section class="content ev_list">
+				<div class="inner bg_gray">
+					<div class="ev_mem_rank">
+						<div class="txt">
+							<p>
+								STYLE24 회원등급에 따라<br>제공되는 혜택 정보를 확인해 보세요.
+							</p>
+							<a href="javascript:;" class="btn btn_dark">회원등급 혜택 보기</a>
+						</div>
+					</div>
+				</div>
+				<div class="inner">
+					<div class="event_list">
+						<div class="event_top">
+							<div class="count"id="eventTotCnt">
+								<!-- <span>9,999</span>개의 이벤트 -->
+							</div>
+							<div class="event_btn">
+								<a href="javascript:void(0);" th:onclick="cfnGoToPage(_PAGE_NOTICE)">당첨자 발표</a>
+							</div>
+						</div>
+						<div class="list" id="divEventList">
+							<!-- <ul class="event_con">
+								<li><a href="">
+										<div class="ev_img">
+											<div class="shape ranker">
+												<span>NEW</span>
+											</div>
+											<img src="/images/mo/thumb/ev_list_img01.jpg"
+												alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션">
+										</div>
+										<div class="txt">
+											<p class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ
+												컬렉션</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+								</a></li>
+							</ul> -->
+							 <div class="nodata" id="divEventNoData" style="display:none;">
+								<p><img src="/images/mo/ico_content_find02.png" alt="등록된 이벤트가 없습니다."></p>
+								<span>등록된 이벤트가 없습니다.</span>
+								
+							</div> 
+
+						</div>
+					</div>
+				</div>
+
+			</section>
+		</main>
+<script th:inline="javascript">
+
+/*<![CDATA[*/
+let fnGetEventList = function() {
+	let actionUrl = '/planning/event/main/list';
+	
+	$.getJSON(actionUrl
+		, function(result, status) {
+			if (status == 'success') {
+				if (result.length > 0) {
+					$('#eventTotCnt').html('<span>' + result.length.addComma() + '</span>개의 이벤트');
+					$('#divEventList').html('');
+					let tag = '';
+					tag += '<ul class="event_con">\n';
+					$.each(result, function(idx, item) {
+						tag += '	<li>\n';
+						tag += '        <a onclick="cfnGoToPlanDetail(\'' + item.planSq + '\')">\n'
+						tag += '			<div class="ev_img">\n';
+						if (item.newYn == 'Y') {
+							tag += '				<div class="shape ranker">\n';
+							tag += '					<span>NEW</span>\n';
+							tag += '				</div>\n';
+						}
+						tag += '				<img src="' + _uploadImageUrl + item.mainImg + '" alt="">\n';
+						tag += '			</div>\n';
+						tag += '			<div class="txt">\n';
+						tag += '				<p class="tit">'+item.planNm+'</p>\n';
+						tag += '				<div class="date">\n';
+						tag += '					<span>'+item.dispStdt+'</span> - <span>'+item.dispEddt+'</span>\n';
+						tag += '				</div>\n';
+						tag += '			</div>\n';
+						tag += '        </a>\n';
+						tag += '	</li>\n';
+					});
+					
+					tag += '</ul>\n';
+					
+					
+					$('#divEventList').html(tag);
+					
+					$('#divEventNoData').hide();
+					$('#divEventList').show();
+				} else {
+					$('#eventTotCnt').html('<span>0</span>개의 이벤트');
+					$('#divEventNoData').show();
+					$('#divEventList').hide();
+				}
+			}
+		});
+}
+
+$(document).ready(function() {
+	fnGetEventList();
+});
+/*]]>*/
+</script>
+	</th:block>
+
+</body>
+</html>

+ 92 - 14
src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html

@@ -20,7 +20,10 @@
 		<div class="area">
 			<div class="logo">
 				<a href="#none">
-					<h1><img th:src="${@environment.getProperty('domain.image') + brandGroupInfo.logoFileNm}" src="/images/pc/thumb/br_tbj_logo.png" alt="TBJ nearby"/></h1>
+					<h1>
+						<!-- <img th:src="${@environment.getProperty('domain.image') + brandGroupInfo.logoFileNm}" src="/images/pc/thumb/br_tbj_logo.png" alt="TBJ nearby"/> -->
+						<p th:text="${brandGroupInfo.brandGroupNm}"></p>
+					</h1>
 				</a>
 			</div>
 			<div class="util_group">
@@ -35,10 +38,21 @@
 			<!-- nav -->
 			<div class="nav">
 				<ul class="bundle" id="ulGnbTab">
-					<li><a href="#">상품</a></li>
-					<li><a href="#">룩북</a></li>
-					<li><a href="#">20S/S시즌오프</a></li>
-					<li><a href="#">이벤트</a></li>
+					<li class="home"><a href="javascript:void(0);" onclick="cfnGoToBrandMain([[${brandGroupInfo.brandGroupNo}]]);">브랜드 홈</a></li>
+					<li class="has_depth"><!-- depth_menu 있을 시 has_depth 클래스 추가 -->
+						<a href="#">상품</a>
+						<!-- 상품 depth -->
+						<div class="depth_menu category">
+							<div class="head_category">
+								<div class="menu">
+									<ul class="maintabs" id="ulGnbCate">
+									</ul>
+								</div>
+							</div>
+							<div class="head_banner" id="divGnbBrandBanner">
+							</div>
+						</div>
+					</li>
 				</ul>
 			</div>
 			<!-- // nav -->
@@ -59,21 +73,57 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	// GNB탭 > 카테고리
+	let fnGetGnbCategory = function(cate1) {
+		let tag = '';
+		if (cate1 != null) {
+			tag += '<li>\n';
+			tag += '	<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate1.cateGb + '\',' + cate1.cate1No + ');">' + cate1.cate1Nm + '</a>\n';
+			if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+				tag += '	<ul class="box_depth2">\n';
+				$.each(cate1.cate2List, function(idx2, cate2) {
+					tag += '		<li>\n';
+					tag += '			<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+						tag += '			<ul class="box_depth3">\n';
+						$.each(cate2.cate3List, function(idx3, cate3) {
+							tag += '				<li>\n';
+							tag += '					<a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate3.cateGb + '\',' + cate3.cate1No + ',' + cate3.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>\n';
+							if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+								tag += '					<ul class="box_depth3">\n';
+								$.each(cate3.cate4List, function(idx4, cate4) {
+									tag += '						<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(\'' + cate4.cateGb + '\',' + cate4.cate1No + ',' + cate4.cate2No + ',' + cate4.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a></li>\n';
+								});
+								tag += '					</ul>\n';
+							}
+							tag += '				</li>\n';
+						});
+						tag += '			</ul>\n';
+					}
+					tag += '		</li>\n';
+				});
+				tag += '	</ul>\n';
+			}
+			tag += '</li>\n';
+		}
+		return tag;
+	}
+	
 	// GNB탭 생성
 	let fnCreateGnbTab = function() {
-		$.getJSON('/display/brand/gnb/tab/list/' + [[${brandGroupInfo.brandGroupNo}]]
+		$('#ulGnbCate').html('');
+		let allCate = [[${allCateList}]];
+		$.each(allCate, function(allCateIdx, allCateItem) {
+			let gnbCate = fnGetGnbCategory(allCateItem);
+			$('#ulGnbCate').append(gnbCate);
+		});
+		
+		$.getJSON('/display/brand/gnb/tab/list?brandGroupNo=' + [[${brandGroupInfo.brandGroupNo}]]
 			, function(result, status) {
 				if (status == 'success') {
 					if (result.length > 0) {
-						$('#ulGnbTab').html('');
 						$.each(result, function(idx, item) {
-							/* if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
-								$.each(allCate, function(allCateIdx, allCateItem) {
-									if (item.cate1No == allCateItem.cate1No) {
-										$('#ulGnbTab').append(gnbCate);
-									}
-								});
-							} else  */if (item.contentsType == 'L') { // 컨텐츠유형:링크
+							if (item.contentsType == 'L') { // 컨텐츠유형:링크
 								$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
 							}
 						});
@@ -86,6 +136,34 @@
 		//검색창 호출
 		$(".common_search").load("sch_layer_pop.html");
 
+		// GNB toggle
+		$(document).on('mouseenter','.common_header.br_header .gnb .nav > ul > li',function(e){
+			$(this).parents('.nav').find('.bundle > li > a').removeClass('active');
+			$(this).children('a').addClass('active');
+			if(!$(this).hasClass('has_depth')){
+				$('.black_screen').hide();
+				$('.common_header.br_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+			} else if($(this).hasClass('has_depth')){
+				$('.black_screen').show();
+				$(this).find('.depth_menu').show();
+				$(this).parents('ul').siblings('ul').find('li.has_depth .depth_menu').hide();
+				$(this).siblings('li.has_depth').find('.depth_menu').hide();
+			}
+		}).on('mouseleave','.common_header.br_header .gnb',function(e){
+			$(this).find('.bundle > li > a').removeClass('active');
+			$('.black_screen').hide();
+			$('.common_header.br_header .gnb .depth_menu, .box_depth2, .box_depth3, .box_depth4').hide();
+		});
+
+		// GNB 하위메뉴
+		$(document).on('mouseenter','.common_header.br_header .maintabs li',function(e){
+			if($(this).find('> ul').length > 0){
+				$(this).addClass('on');
+			}
+			$(this).find('> ul').show();
+			$(this).siblings('li').find('> ul').hide();
+		});
+		
 		// GNB탭 생성
 		fnCreateGnbTab();
 	});

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

@@ -82,7 +82,7 @@ var ajaxWishList = function () {
 				html+='	<div class="itemsGrp">';
 				
 				$.each(result, function (idx, item) {
-					if (item.regDt == month[i].regDt) {
+					if (item.regDtMonth == month[i].regDt) {
 						html+='		<div class="item_prod">';
 						html+='			<div class="item_state">';
 						html+='				<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" onclick="wishlistDelete(this)">관심상품 추가</button>';

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

@@ -33,6 +33,9 @@
 					<div class="cont_head">
 						<div>
 							<h3 th:text="${planInfo.planNm}"></h3>
+							<div class="period">
+								<span th:text="${planInfo.dispStdt}"></span> ~ <span th:text="${planInfo.dispEddt}"></span>
+							</div>
 							<div class="shareSet">
 								<button class="btn_share" data-name="openShare">공유하기</button>
 								<div class="shareWrap">
@@ -59,7 +62,6 @@
 							</div>
 						</div>
 					</div>
-				</div>
 				<div class="cont_body" th:if="${fsrcInfoTop != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
                     <!-- 프로모션배너 type1 --> 
                     <!-- <div class="promotion_visual type1" th:if="${fsrcInfoTop != null and planInfo.planGb == 'P'}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"></div> -->
@@ -83,6 +85,7 @@
                     </div> -->
                     <!-- 프로모션배너 type2 -->                    
                 </div>
+            </div>
             <!-- //상단 프로모션 배너 -->
             
             <th:block th:each="a, template : ${templateOrd}">
@@ -108,6 +111,85 @@
 						<div class="content dp_special" th:id="${a.tmplType + a.planContSq}"></div>
 				</th:block>
 			</th:block>
+			
+			 <!-- 댓글리스트 -->
+			<th:block th:if="${planInfo.replyYn == 'Y'}">
+			<div class="content wide cmt">
+				<div class="cont_body">
+					<div class="cmt_wrap">
+						<div class="cmt_write">
+							<form class="form_wrap">
+								<div class="cmt_tarea">
+									<textarea class="cmt_ans" name="replyText" id="replyText" placeholder="댓글을 입력해주세요.(500자 이내)" onclick="fnTextConfirm()"></textarea>
+									<p class="txt_cnt"><span id="cmt_cnt" class="c_primary">0</span>/500</p>
+								</div>
+								<div class="cmt_thumb">
+									<div class="form_field">
+										<div class="imgUpload">
+											<label for="fileAdd" class="fileAdd" >업로드</label>
+											<input type="file" id="fileAdd" name="files[]" />
+										</div>
+									</div>
+								</div>
+								<button type="submit" class="btn btn_dark"><span>등록</span></button>
+							</form>
+						</div>
+						<div class="cmt_group" id="replyList">
+					   <!-- <div class="cmt_list_tit">
+								<strong>댓글</strong><span class="cnt">(9,999)</span>
+							</div>
+							데이터 있을 시
+							<ul class="cmt_list">
+								<li>
+									<div class="cmt_top">
+										<span class="writer">DI2****</span>
+										<span class="date">2020.12.30</span>
+									</div>
+									<div class="cmt_cont">
+										<p>
+											애용하는 회원으로서 스타일24의 리뉴얼은 저의 일처럼 기쁘네요 ^^ 깔끔하고 세련된 느낌으로 단장해서 사이트 들어왔을 때 기분이 좋답니다! 사이트 리뉴얼 겸 겨울옷을  사려고 한창 둘러보았어요. <br/>
+											따뜻한 느낌 풀풀 내는아이템들로 찜꽁 해놓았답니다! 이왕 이벤트도 당첨되어서 포인트도 얻고, 또 구매도 하고 싶네요ㅋㅋㅋ <br/>
+											리뉴얼 하신거  축하드려요!!!  당첨되길 바랍니다.^^ 
+										</p>
+									</div>
+								</li>
+								<li>
+									<div class="cmt_top">
+										<span class="writer">ety****</span>
+										<span class="date">2020.12.30</span>
+									</div>
+									<div class="cmt_cont">
+										<div class="img_wrap clear">
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>
+											<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>
+										</div>
+										<p>모처럼 스타일24를 다시 애용해야 겠어요! 축하축하 ^^</p>
+										<button class="btn btn_default btn_del"><span>삭제</span></button>
+									</div>
+								</li>
+							</ul> -->
+							<!-- 데이터 있을 시 -->
+							<!-- 데이터 없을 시 -->
+							<div class="nodata" style="display:none;">
+								<div class="txt_box">
+									<p>
+										등록된 댓글이 없습니다.
+									</p>
+								</div>
+							</div>
+							<!-- //데이터 없을 시 -->
+						</div>
+						<div class="paging_wrap">
+							<ul class="pageNav" id="paging">
+								
+							</ul>
+						</div>
+					</div>
+				</div>
+			</div>
+			</th:block>            
             
             <!-- 관련상품 리스트 -->
 			<div class="content sticky_nav_list" th:if="${planCornerListLength>0}">
@@ -157,17 +239,16 @@
                                     </div>
                                 </div>  
                                 </th:block>          
-                            </div>
-                            </th:block>
-                        </div>                
-                    </div>
-                </div>
-		    </div>
+                          	</div>
+                          </div>
+                      </th:block>
+                  </div>         
+              </div>
+          </div>
 		  
             <!-- //관련상품 리스트 -->  
-
-            <!-- 다른 기획전 보기 -->
-            <div class="content other_dp_slide" th:if="${listSize > 0}">
+             <!-- 다른 기획전,이벤트 보기 -->
+            <div class="content other_promotion_slide">
                 <div class="cont_head">
                     <div>
                         <h4 th:if="${planInfo.planGb == 'P'}">다른 기획전 보기</h4>
@@ -179,7 +260,7 @@
                 <div class="cont_body">
                     <div class="swiper-container">
                         <div class="swiper-wrapper">
-                        	<th:block th:each="PlanData, PlanStat : ${planList}">
+                           <th:block th:each="PlanData, PlanStat : ${planList}">
                             <div class="swiper-slide">                   
                                 <a th:onclick="cfnGoToPlanDetail([[${PlanData.planSq}]])">
                                     <div class="thumb">
@@ -197,14 +278,15 @@
                     <div class="swiper-button-next"></div>
                 </div>
             </div>
-            <!-- //다른 기획전 보기 -->
-        </div>
-        <form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
-				<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
-		</form>
-<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
-
-</div>
+       </div>
+  </div>       
+  
+
+<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true"></div>
+<form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
+	<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
+</form>
+
 <script th:inline="javascript">
 
 let review = [[${reviewInfo}]];
@@ -215,6 +297,7 @@ let goods1 = [[${goods1Info}]];
 let goods2 = [[${goods2Info}]];
 let goods4 = [[${goods4Info}]];
 let template =[[${templateOrd}]];
+let replyList = [[${replyList}]];
 let _mall = [[${@environment.getProperty('domain.front')}]];
 let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
 let imgUrl=[[${@environment.getProperty('upload.image.view')}]];
@@ -652,15 +735,56 @@ var fnJoinConfirm = function () {
 			document.pollListForm.submit();
 		}
 	})
-		
-	
-
 }
 
+// 댓글 입력 확인
+var fnTextConfirm = function() {
+	//로그인 확인
+	if (!cfCheckLogin()) {
+		mcxDialog.alert("로그인 후 참여 가능합니다.");
+		$("#replyText").val('');
+		return false;
+	}
+}
 
+var ajaxReplyList = function () {
+	 $.getJSON('/planning/reply/list?planSq='+plan.planSq, function(result, status) {
+		 console.log(result);
+		 if (status == 'success') {
+			 $("#replyList").html('');
+			 var html = '';
+			 html += '<div class="cmt_list_tit">';
+			 html += '	<strong>댓글</strong><span class="cnt">('+result.replyList.length.addComma()+')</span>';
+			 html += '</div>';
+			 html += '<ul class="cmt_list">';
+			 $.each(result.replyList, function (idx, item) {
+				 html += '	<li>';
+				 html += '		<div class="cmt_top">';
+				 html += '			<span class="writer">'+item.maskingCustId+'</span>';
+				 html += '			<span class="date">'+item.entryDt+'</span>';
+				 html += '		</div>';
+				 html += '		<div class="cmt_cont">';
+				 html += '			<div class="img_wrap clear">';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img01.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img02.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img03.jpg" alt="썸네일"></span>';
+				 html += '				<span class="pics"><img class="picsThumbs" src="/images/pc/thumb/ev_list_img04.jpg" alt="썸네일"></span>';
+				 html += '			</div>';
+				 html += '			<p>'+item.entryVal1+'</p>';
+				 if (item.entryCustNo == result.custNo) {
+					 html += '			<button class="btn btn_default btn_del"><span>삭제</span></button>';
+				}
+				 html += '		</div>';
+				 html += '	</li>';
+			 });
+			 html += '</ul>';
+		 }
+		 $("#replyList").append(html);
+	 });
+}
 
 $(document).ready( function() {
-
+	ajaxReplyList();
 	//공유 버튼 토글 
 	$("button[data-name=openShare]").on("click", function(){
 		$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
@@ -761,16 +885,38 @@ $(document).ready( function() {
             clickable: true,
         },
     });
-
-    /* SLIDE - 다른 기획전 보기 */
-    var other_dp_slide_slide = new Swiper ('.other_dp_slide .swiper-container', {
+    /* SLIDE - 다른 기획전,이벤트 보기 */
+    var other_slide_slide = new Swiper ('.other_promotion_slide .swiper-container', {
 		slidesPerView: 5,
         spaceBetween: 20,
 		navigation: {
-			nextEl: '.other_dp_slide .swiper-button-next',
-			prevEl: '.other_dp_slide .swiper-button-prev',
+			nextEl: '.other_promotion_slide .swiper-button-next',
+			prevEl: '.other_promotion_slide .swiper-button-prev',
 		},
 	});            
+    
+	 // 첨부파일 갯수제한
+	$('.imgUpload .fileAdd').click(function(){
+		var maxFileLength = 10; /* 최대 파일 갯수를 입력해 주세요 */
+		var imgFiles=$('.imgUpload .pics');
+		if (imgFiles.length >= maxFileLength) {
+			alert('이미지는 최대' + maxFileLength +'장 까지 첨부 가능합니다.');
+			$('#fileAdd').attr("disabled",true);
+		} else if(imgFiles.length < maxFileLength){
+			$('#fileAdd').removeAttr("disabled");
+		}
+	});			
+
+	//댓글 작성시 글자 카운트
+	$('.cmt_ans').keyup(function (e){
+		var content = $(this).val();
+		$('#cmt_cnt').html(content.length);
+		if (content.length > 500){
+			alert("최대 500자까지 입력 가능합니다.");
+			$(this).val(content.substring(0, 500));
+			$('#cmt_cnt').html("500");
+		}
+	});
 
 });
 </script>

+ 25 - 22
src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html

@@ -66,7 +66,7 @@
 						<div class="event_calander">
 							<div class="check_title">
 								<p>출석할수록 늘어나는 혜택!</p>
-								<div class="title"><strong>1월</strong> 출석체크</div>
+								<div class="title"><strong></strong> 출석체크</div>
 							</div>
 							<div class="check_info">
 								<span class="today">오늘</span>
@@ -76,7 +76,7 @@
 								<div class="my_attend_day">
 									<p>나의 출석 일수는?</p>
 									<span class="day">
-										<span>11</span>일
+										<span></span>일
 									</span>
 								</div>
 								<div class="tbl">
@@ -155,12 +155,12 @@
 							<img src="/images/pc/ico_content_find.png" alt="유의사항">
 							<p>유의사항</p>
 						</div>
-						<div class="announce_list">
-							<ul>
+						<div class="announce_list" th:if="${fsrcInfoTop != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
+							<!-- <ul>
 								<li>본 이벤트는 ID당 1회만 참여 가능합니다.</li>
 								<li>설문조사 참여 시 포인트를 지급해드립니다. (이벤트 종료 후, 일괄 지급)</li>
 								<li>지급된 포인트는 [ 마이페이지 > 나의 지갑 ] 메뉴에서 확인할 수 있습니다.</li>
-							</ul>
+							</ul> -->
 						</div>
 					</div> 
 				</div>
@@ -283,14 +283,15 @@ var appendHtml = function () {
 		html += '</tr>\n';
 
 		$("#monthTbody").append(html);
-		
-		$.each(custAttendList, function(idx1, item1) {
-			if(item1.entryDt == item.sun || item1.entryDt == item.mon || item1.entryDt == item.tue|| item1.entryDt == item.wed
-					|| item1.entryDt == item.thu || item1.entryDt == item.fri || item1.entryDt == item.sat){
-				$("#td_"+item.tue).attr("class","complete");
-			}
-		})
-	
+		if (cfCheckLogin()) {
+			$.each(custAttendList, function(idx1, item1) {
+				$('.day').html('<span>' + custAttendList.length + '</span>일');
+				if(item1.entryDt == item.sun || item1.entryDt == item.mon || item1.entryDt == item.tue|| item1.entryDt == item.wed
+						|| item1.entryDt == item.thu || item1.entryDt == item.fri || item1.entryDt == item.sat){
+					$("#td_"+item1.entryDt).attr("class","complete");
+				}
+			})
+		}
 	})    
 } 
 
@@ -315,19 +316,21 @@ var fnInfoConfirmCallBack = function(result) {
 };
 
 $(document).ready(function() {
+	appendHtml();
+	
 	if (!cfCheckLogin()) {
 		$(".day").html("<span>0</span>일");
+	}else{
+		$.each(custAttendList, function(idx, item) {
+			$('.day').html('<span>' + custAttendList.length + '</span>일');
+			if(item.entryDt == date){
+				$("#td_"+date).attr("class","complete");
+			}else{
+				$("#td_"+date).attr("class","today"); 
+			}
+		})
 	}
 	
-	appendHtml();
-	
-	$.each(custAttendList, function(idx, item) {
-		if(item.entryDt == date){
-			$("#td_"+date).attr("class","complete");
-		}else{
-			$("#td_"+date).attr("class","today"); 
-		}
-	})
 	
 	
 	

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

@@ -104,7 +104,7 @@ let fnGetEventList = function() {
 				if (result.length > 0) {
 					$('#eventTotCnt').html('<span>' + result.length.addComma() + '</span>개의 이벤트');
 					
-					$('#eventList').html('');
+					$("#divEventList").html('');
 					let tag = '';
 					tag += '<div  class="thumb_list">';
 					tag += '	<ul>';

+ 1 - 0
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -30,6 +30,7 @@
 			<div class="content wide dp_hotdeal"> <!-- 페이지특정 클래스 = dp_hotdeal -->
 				<div class="cont_body">
                     <div class="hotdeal">
+                    <img src="/images/pc/thumb/hotdeal_bg2.jpg" alt="핫한 아이템을 핫한 가격에 LAST DAY DEAL">
                         <div id="countdown">
                             <span id="h-hours"></span>
                             <span id="h-minutes"></span>

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

@@ -2208,6 +2208,7 @@ main.container .shopping_bag .inner:last-child {padding-bottom: 0;}
 
 .shopping_bag .part_goods .goods_btn_wrap {margin: 1.8rem 0 0; padding-left: 3rem;}
 .goods_btn_wrap > div > .btn.btn_primary_line {border:1px solid #fd4802;}
+.goods_btn_wrap > div > button[disabled] {background: #000;color: #fff;border: 1px solid #000000 !important;}
 .shopping_bag .goods_dlvr_save {margin-top: 1.8rem; text-align: center;}
 .shopping_bag .goods_dlvr_save a.btn_popup_save {display:inline-block; padding-right:20px; text-align: center; color:#fd4802; font-size:1.1rem; font-weight:200; line-height:14px; text-decoration:underline; background:url('/images/mo/ico_go_save.png') no-repeat 98% 45%; background-size:1.1rem;}