Просмотр исходного кода

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

gagamel 5 лет назад
Родитель
Сommit
1534090199

+ 8 - 0
src/main/java/com/style24/front/biz/service/TsfSocialService.java

@@ -58,4 +58,12 @@ public class TsfSocialService {
 		return socialDao.getSocialGoodsList(social);
 	}
 
+	public Social getSocialForGoods(Social social){
+		Social socialInfo = socialDao.getSocialInfo(social);
+
+		social.setSocialSq(socialInfo.getSocialSq());
+		socialInfo.setSocialGoodsList(socialDao.getSocialGoodsList(social));
+
+		return socialInfo;
+	}
 }

+ 18 - 8
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -7,6 +7,15 @@ import java.util.HashMap;
 
 import javax.servlet.http.HttpServletResponse;
 
+import com.style24.persistence.domain.BrandGroup;
+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.Lookbook;
+import com.style24.persistence.domain.MainLayout;
+import com.style24.persistence.domain.Plan;
+import com.style24.persistence.domain.Social;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
@@ -17,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.style24.front.biz.service.TsfSocialService;
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.biz.service.TscLookbookService;
 import com.style24.core.support.message.TscMessageByLocale;
@@ -24,14 +34,6 @@ import com.style24.front.biz.service.TsfDisplayService;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.support.controller.TsfBaseController;
-import com.style24.persistence.domain.BrandGroup;
-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.Lookbook;
-import com.style24.persistence.domain.MainLayout;
-import com.style24.persistence.domain.Plan;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -64,6 +66,8 @@ public class TsfDisplayController extends TsfBaseController {
 	@Autowired
 	private TsfPlanningService planningService;
 
+	@Autowired
+	private TsfSocialService socialService;
 
 	/**
 	 * 몰 메인
@@ -120,6 +124,12 @@ public class TsfDisplayController extends TsfBaseController {
 				}
 			}
 
+			if(contentsLoc.equals("SMM006")){
+				Social social = new Social();
+				social.setSiteCd("G000_10");
+				social.setFrontGb("P");
+				mainLayout.setSocialInfo(socialService.getSocialForGoods(social));
+			}
 
 			mainLayoutList.add(mainLayout);
 		}

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

@@ -131,6 +131,11 @@ public class TsfPlanningController extends TsfBaseController {
 		Review review = new Review();
 		Coupon coupon = new Coupon();
 
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
+		plan.setCustGb(TsfSession.getCustGb());
+		plan.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+		
 		// 기본 set
 		plan.setPlanSq(planSq);
 		review.setPlanSq(planSq);
@@ -256,17 +261,30 @@ public class TsfPlanningController extends TsfBaseController {
 	public ModelAndView PlanningEventMainForm(Plan plan) throws Exception {
 		ModelAndView mav = new ModelAndView();
 
-		// 디바이스 set
-		//plan.setFrontGb(TsfSession.getFrontGb());
-
-		// 이벤트 갯수
-		mav.addObject("cnt", planningService.getEvnetAllCount(plan));
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
 
-		// 이벤트 목록
-		mav.addObject("evnetList", planningService.getPlanEventList(plan));
 
 		mav.setViewName(super.getDeviceViewName("planning/PlanningEventMainForm"));
 		return mav;
 	}
+	
+	/**
+	 * 이벤트 메인 목록
+	 * @param plan - 이벤트 정보
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 29
+	 */
+	@GetMapping("/event/main/list")
+	@ResponseBody
+	public Collection<Plan> getPlanningEventMainList(Plan plan) {
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
+		plan.setCustGb(TsfSession.getCustGb());
+		plan.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+
+		return planningService.getPlanEventList(plan);
+	}
 
 }

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

@@ -271,12 +271,12 @@
 		SELECT COUNT(*) AS CNT
 		FROM   TB_COUNSEL A
 		     , TB_GOODS G
-		<if test="goodsType != null and goodsType = 'G056_D'">
+		<if test="goodsType != null and goodsType == 'G056_D'">
 		     , TB_GOODS_COMPOSE C
 		</if>
 		WHERE  1 = 1
 		<choose>
-		    <when test="goodsType != null and goodsType = 'G056_D'">
+		    <when test="goodsType != null and goodsType == 'G056_D'">
 		AND    A.REL_GOODS_CD = G.GOODS_CD
 		AND    G.GOODS_CD = C.COMPS_GOODS_CD
 		AND    C.GOODS_CD = #{relGoodsCd}

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

@@ -303,52 +303,52 @@
 	
 	<select id="getPlanEventList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanEventList*/
-		SELECT P1.*
-		FROM 
-		(
-			 SELECT
-			       P.PLAN_SQ
-			      ,P.PLAN_NM
-			      ,P.PLAN_GB
-			      ,P.SITE_CD
-			      ,P.FRONT_GB
-			      ,SUBSTRING_INDEX(P.DISP_STDT , ' ', +1) AS DISP_STDT
-			      ,SUBSTRING_INDEX(P.DISP_EDDT , ' ', +1) AS DISP_EDDT
-			      ,CASE WHEN DATE(P.REG_DT) BETWEEN DATE_ADD(NOW(),INTERVAL -3 DAY ) AND NOW() THEN 'NEW' END AS 'NEW_PLAN'   /*등록일 기준 3일 */
-			      ,P.MAIN_PIMG
-			      ,P.MAIN_MIMG
-			      ,P.DTL_PIMG
-			      ,P.DTL_MIMG
-			      ,P.DTL_TITLE1
-			      ,P.DTL_TITLE2
-			      ,P.REPLY_YN
-			      ,P.REPLY_LOC
-			      ,P.REPLY_IMG
-			      ,P.REPLY_TITLE1
-			      ,P.REPLY_TITLE2
-			      ,P.CORNER_NM_DISP_YN
-			      ,P.GOODS_LIMIT_YN
-			      ,P.GOODS_LIMIT_QTY
-			      ,P.DEL_YN, OPEN_YN
-			      ,P.DISP_ORD
-			      ,P.READ_CNT
-			      ,P.DEV_URL
-			      ,P.BADGE_NM
-			      ,P.BADGE_FCOLOR
-			      ,P.BADGE_BCOLOR
-			      ,P.POLL_SQ
-			      ,P.REG_NO
-			      ,P.REG_DT
-			      ,P.UPD_NO
-			      ,P.UPD_DT
-			 FROM TB_PLAN P 
-			 WHERE 1=1 
-			 	AND P.PLAN_GB = 'E' /*이벤트 경우*/
-			 	AND NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT /*진행기간*/
-			 	AND P.DEL_YN = 'N'
-			 	AND P.OPEN_YN = 'Y'
-		)P1
-		ORDER BY P1.NEW_PLAN DESC , ABS(DATEDIFF(P1.DISP_EDDT,NOW()))  
+		SELECT PLAN_SQ
+		     , PLAN_NM
+		     , DTL_TITLE1
+		     , MAIN_IMG
+		     , NEW_YN
+		     , END_DAYS
+		     , DISP_STDT
+		     , DISP_EDDT
+		FROM   (
+		        SELECT P.PLAN_SQ                                        /*기획전번호*/
+		             , P.PLAN_NM                                        /*기획전명*/
+		             , P.DTL_TITLE1                                     /*상세제목1*/
+		             , SUBSTRING_INDEX(P.DISP_STDT , ' ', +1) AS DISP_STDT
+		             , SUBSTRING_INDEX(P.DISP_EDDT , ' ', +1) AS DISP_EDDT
+		             , CASE WHEN #{frontGb} IN ('A','M') THEN P.MAIN_MIMG
+		                    ELSE P.MAIN_PIMG
+		               END                                  AS MAIN_IMG /*메인이미지*/
+		             , CASE WHEN TIMESTAMPDIFF(DAY,P.REG_DT,NOW()) <![CDATA[<=]]> 3 THEN
+		                        'Y'
+		                    ELSE
+		                        'N'
+		               END                                  AS NEW_YN   /*신규여부(등록일기준3일)*/
+		             , TIMESTAMPDIFF(DAY,NOW(),P.DISP_EDDT) AS END_DAYS /*종료임박일수*/
+		        FROM   TB_PLAN P
+		        WHERE  P.PLAN_GB = 'E' /*이벤트*/
+		        AND    P.SITE_CD = #{siteCd}
+		        <if test="frontGb != null and frontGb != ''">
+		            <if test='frontGb == "P"'> <!-- PC웹 -->
+		        AND    P.FRONT_GB IN ('A','P')
+		            </if>
+		            <if test='frontGb == "A" or frontGb == "M"'> <!-- 모바일 -->
+		        AND    P.FRONT_GB IN ('A','M')
+		            </if>
+		        </if>
+		        AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		        AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
+		        AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
+		        <if test="brandGroupNo != null and brandGroupNo != ''"> <!-- 브랜드메인에서 사용 -->
+		        AND    P.PLAN_SQ IN (SELECT PLAN_SQ
+		                             FROM   TB_PLAN_BRAND
+		                             WHERE  BRAND_GROUP_NO = #{brandGroupNo}
+		                             AND    DISP_YN = 'Y' /*전시하는브랜드기획전*/
+		                            )
+		        </if>
+		       ) Z
+		ORDER  BY NEW_YN DESC, END_DAYS
 	</select>
 	
 	<select id="accessCustGrade"  parameterType="Plan" resultType="Plan">

+ 6 - 0
src/main/resources/config/application-locd.yml

@@ -78,3 +78,9 @@ naverPay:
     payUrl:
         web : test-pay.naver.com
         mob : test-m.pay.naver.com
+
+# ERP (한세드림)
+erp:
+   api:
+       stock.url: http://erp.hansaemk.com:96/api/hsdr/Shop/GoodsInfo
+       goods.url: http://erp.hansaemk.com:96/api/hsdr/Shop

+ 5 - 0
src/main/resources/config/application.yml

@@ -121,3 +121,8 @@ app.down.url:
     ios: https://apps.apple.com/kr/app/WIVISMALL/id1517275108
     aos: https://play.google.com/store/apps/details?id=com.wivis.wivismal
 
+# ERP (한세드림)
+erp:
+   api:
+       stock.url: http://erp.hansaemk.com:96/api/hsdr/Shop/GoodsInfo
+       goods.url: http://erp.hansaemk.com:96/api/hsdr/Shop

+ 27 - 135
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -170,8 +170,8 @@
 				</th:block>
 
 				<!-- 6. 타임딜 : 슬라이드 -->
-				<th:block th:if="${contentsLoc=='002'}">
-					<div class="content wide main_deal" th:if="${mainLayoutData.socialInfo != null}">
+				<th:block th:if="${contentsLoc=='006'}">
+					<div class="content wide main_deal">
 						<div class="cont_head">
 							<p class="displayH" th:text="${mainLayoutData.contentsTitle}">오늘만<br>이 가격에 만나요</p>
 							<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_SOCIAL_MAIN);"><span>전체보기</span></a>
@@ -179,10 +179,12 @@
 								<div class="bar_current" style="width:33.333%"><span>HERE</span></div>
 								<div class="bar_bg"></div>
 							</div>
-							<div class="count" >
+							<th:block th:each="socialData, socialStat : ${mainLayoutData.socialInfo}">
 								<form name="socailForm">
-									<input type="hidden" name="targetTime" th:value="${mainLayoutData.socialInfo.socialEddt}">
+									<input type="hidden" name="targetTime" th:value="${socialData.socialEddt}">
 								</form>
+							</th:block>
+							<div class="count" >
 								<span class="count_tit">남은 시간</span>
 								<div class="hotdeal">
 									<div id="countdown">
@@ -235,139 +237,29 @@
 						<div class="cont_body">
 							<div class="swiper-container post-deal">
 								<div class="swiper-wrapper">
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img alt="" class="pd_img" src="/images/pc/thumb/main_hotdeal01.jpg">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-													<p class="itemPrice">80,100
-														<span class="itemPrice_original">89,000</span>
-														<span class="itemPercent">10%</span>
-													</p>
-													<div class="itemComment">#데일리웨어로 매일입고싶은</div>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img alt="" class="pd_img" src="/images/pc/thumb/main_hotdeal02.jpg">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-													<p class="itemPrice">80,100
-														<span class="itemPrice_original">89,000</span>
-														<span class="itemPercent">10%</span>
-													</p>
-													<div class="itemComment">#데일리웨어로 매일입고싶은</div>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img alt="" class="pd_img" src="/images/pc/thumb/main_hotdeal03.jpg">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-													<p class="itemPrice">80,100
-														<span class="itemPrice_original">89,000</span>
-														<span class="itemPercent">10%</span>
-													</p>
-													<div class="itemComment">#데일리웨어로 매일입고싶은</div>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img alt="" class="pd_img" src="/images/pc/thumb/main_hotdeal04.jpg">
+									<th:block th:each="socialData, socialStat : ${mainLayoutData.socialInfo}">
+										<th:block th:each="goodsData, goodsStat : ${socialData.socialGoodsList}">
+											<div class="swiper-slide">
+												<div class="item_prod">
+													<div class="item_state">
+														<button type="button" class="itemLike">관심상품 추가</button>
+														<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsData.goodsCd}]], '', '', 'SMM006');">
+															<div class="itemPic">
+																<img alt="" class="pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsData.sysImgNm}">
+															</div>
+															<p class="itemBrand" th:text="${goodsData.brandEnm}">BRAND NAME</p>
+															<div class="itemName" th:text="${goodsData.goodsNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
+															<p class="itemPrice" th:text="${#numbers.formatInteger(goodsData.currPrice,1,'COMMA')}">80,100
+																<span class="itemPrice_original" th:text="${#numbers.formatInteger(planningGoods.listPrice,1,'COMMA')}">89,000</span>
+																<span class="itemPercent" th:if="${planningGoods.currPrice != planningGoods.listPrice}" th:text="${(planningGoods.listPrice == 0 ? 0 : #numbers.formatDecimal((planningGoods.listPrice - planningGoods.currPrice) / (planningGoods.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+															</p>
+															<div class="itemComment">#데일리웨어로 매일입고싶은</div>
+														</a>
 													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-													<p class="itemPrice">80,100
-														<span class="itemPrice_original">89,000</span>
-														<span class="itemPercent">10%</span>
-													</p>
-													<div class="itemComment">#데일리웨어로 매일입고싶은</div>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img alt="" class="pd_img" src="/images/pc/thumb/main_hotdeal04.jpg">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-													<p class="itemPrice">80,100
-														<span class="itemPrice_original">89,000</span>
-														<span class="itemPercent">10%</span>
-													</p>
-													<div class="itemComment">#데일리웨어로 매일입고싶은</div>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img alt="" class="pd_img" src="/images/pc/thumb/main_hotdeal04.jpg">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-													<p class="itemPrice">80,100
-														<span class="itemPrice_original">89,000</span>
-														<span class="itemPercent">10%</span>
-													</p>
-													<div class="itemComment">#데일리웨어로 매일입고싶은</div>
-												</a>
-											</div>
-										</div>
-									</div>
-									<div class="swiper-slide">
-										<div class="item_prod">
-											<div class="item_state">
-												<button type="button" class="itemLike">관심상품 추가</button>
-												<a href="#none" class="itemLink">
-													<div class="itemPic">
-														<img alt="" class="pd_img" src="/images/pc/thumb/main_hotdeal04.jpg">
-													</div>
-													<p class="itemBrand">BRAND NAME</p>
-													<div class="itemName">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-													<p class="itemPrice">80,100
-														<span class="itemPrice_original">89,000</span>
-														<span class="itemPercent">10%</span>
-													</p>
-													<div class="itemComment">#데일리웨어로 매일입고싶은</div>
-												</a>
+												</div>
 											</div>
-										</div>
-									</div>
+										</th:block>
+									</th:block>
 								</div>
 								<div class="swiper-controls">
 									<div class="swiper-scrollbar"></div>

+ 25 - 8
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -11,14 +11,15 @@
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
- * VER  DATE		 AUTHOR	     DESCRIPTION
+ * VER  DATE		 AUTHOR		 DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021.03.02   eskim       최초 작성
+ * 1.0  2021.03.02   eskim	   최초 작성
  *******************************************************************************
  -->
 <body>
 <th:block layout:fragment="content">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
+<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 <div id="container" class="container pd deal" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="wrap">
 		<!-- 상품 대표설명 -->
@@ -91,7 +92,10 @@
 							</div>
 							<div class="descript_box">
 								<div class="desc_top">
-									<button type="button" class="itemShare">상품 공유하기</button>
+									<div class="shareSet">
+										<button class="btn_share" data-name="openShare">공유하기</button>
+										<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsSnsForm}"></th:block>
+									</div>
 									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								<div class="desc_info">
@@ -286,7 +290,7 @@
 	
 	// 옵션1 조회
 	var fnOption1 = function(flag, goodsCd, currPrice, selfGoodsYn){
-		debugger;
+		
 		let data = {goodsCd : goodsCd
 					};
 		let jsonData = JSON.stringify(data);
@@ -390,7 +394,7 @@
 	
 	// 옵션2 조회
 	var fnOption2 = function(obj, flag){
-		debugger;
+		
 		let $obj = $(obj);
 		let $target = $obj.find('input[name="opt1"]');
 		let goodsCd = $target.val();
@@ -405,9 +409,9 @@
 					};
 		let jsonData = JSON.stringify(data);
 		
-		gagajf.ajaxJsonSubmit('/goods/detail/option2/list', jsonData, function(result) {debugger;
+		gagajf.ajaxJsonSubmit('/goods/detail/option2/list', jsonData, function(result) {
 			
-			if (result.dataList != null && result.dataList.length > 0) {debugger;
+			if (result.dataList != null && result.dataList.length > 0) {
 				let tagUpS = "";
 				let tagDownS = "";
 				let tagUp = "";
@@ -542,7 +546,7 @@
 
 			if (minOrdQty > itemCnt) {
 				alert("무슨작업을 해야할가요?");
-				return false; 		//무슨작업을 해야하나?
+				return false;		 //무슨작업을 해야하나?
 			}
 			
 			//상품정보
@@ -775,6 +779,19 @@
 		
 		$('.timer_box').css('display', 'none');
 		
+		//공유 버튼 토글 
+		$("button[data-name=openShare]").on("click", function(){
+			$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
+			return false;
+		});
+		//영역밖 클릭으로 공유토글 닫기
+		$("body").on('click', function(e) { 
+			if(!$(".shareWrap.on").parent().has(e.target).length) {
+				$("button[data-name=openShare]").removeClass("on");
+				$(".shareWrap").removeClass("on");
+			};
+		});
+		
 		var params = new Object();
 		params.goodsCd = [[${params.goodsCd}]];
 		params.viewDt = [[${params.viewDt}]];

+ 24 - 19
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -19,6 +19,7 @@
 <body>
 <th:block layout:fragment="content">
 <div id="container" class="container pd" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 	<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsNaviForm}"></th:block>
 	
 	<div class="wrap">
@@ -93,7 +94,10 @@
 							<div class="descript_box">
 								<div class="desc_top">
 									<a href="javascript:void(0);" class="btn_brand" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</a>
-									<button type="button" class="itemShare">상품 공유하기</button>
+									<div class="shareSet">
+										<button class="btn_share" data-name="openShare">공유하기</button>
+										<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsSnsForm}"></th:block>
+									</div>
 									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								<div class="desc_info">
@@ -1191,7 +1195,7 @@
 					$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
 				}	
 				
-				$.each(result.dataList, function(idx, item) {debugger;
+				$.each(result.dataList, function(idx, item) {
 					if (idx == 0){
 						//$obj = $('#goodsOpt2'+item.goodsCd);
 						//$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
@@ -1255,6 +1259,19 @@
 		
 		$('.timer_box').css('display', 'none');
 		
+		//공유 버튼 토글 
+		$("button[data-name=openShare]").on("click", function(){
+			$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
+			return false;
+		});
+		//영역밖 클릭으로 공유토글 닫기
+		$("body").on('click', function(e) { 
+			if(!$(".shareWrap.on").parent().has(e.target).length) {
+				$("button[data-name=openShare]").removeClass("on");
+				$(".shareWrap").removeClass("on");
+			};
+		});
+		
 		var params = new Object();
 		params.goodsCd = [[${params.goodsCd}]];
 		params.viewDt = [[${params.viewDt}]];
@@ -1367,27 +1384,12 @@
 			return false;
 		});
 
-		//상품 대표설명 > 우측 상품정보 
-		/* 1차 옵션선택 후 2차 옵션 활성화 */
-		//var opt_selecter01 = new sCombo('.opt_select .select_custom.item_opt1');
-		//var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2');
-		//$('.opt_select .select_custom .combo .list > li').click(function(e) {
-		//	$(this).parents('.form_field').next('.form_field').find('.select_custom').attr('disabled', false);
-		//	return false;
-		//});
-		
 		var opt_selecter01 = new sCombo('.opt_select .select_custom.item_opt1.item_opt1_1');
-		
 		var opt_selecter01_1 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_1');
-		//var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');
 		var opt_selecter01_2 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_2');
-		//var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');
 		var opt_selecter01_3 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_3');
-		//var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
 		var opt_selecter01_4 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_4');
-		//var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
 		var opt_selecter01_5 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_5');
-		//var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
 
 		if (!gagajf.isNull([[${goodsInfo.socialSq}]])){
 			$('.timer_box').css('display', 'block');
@@ -1533,6 +1535,11 @@
 		$("meta[property='eg:isNew']").attr('content',([[${goodsInfo.formalGb}]] == 'G009_10')? 'True' :'False');
 		$("meta[property='eg:etc1']").attr('content', [[${goodsInfo.selfGoodsYn}]]);
 		
+		
+		$('.btn_copy').bind('click', function() {
+			copyToClipboard();
+		});
+		
 	});
 	
 	// 상품평 레이어 호출후 콜백에서 호출하므로 여기에 있어야함
@@ -1553,8 +1560,6 @@
 		
 	}
 	
-	
-	
 /*]]>*/
 </script>
 

+ 7 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html

@@ -85,7 +85,13 @@
 		if (result.dataList != null && result.dataList.length > 0) {
 			
 			$.each(result.dataList, function(idx, item) {
-				let tag = '<li class="'+ (item.selfGb == 1 ? "my_qna" : "") +'">\n';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
+				let tag = '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
+				if (item.selfGb == 1){
+					tag += ' my_qna';	
+				}else if (item.secretYn == "Y"){
+					tag += ' secret_qna';
+				}
+				tag += ' ">\n';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
 				tag += '	<div class="fold_head">\n';
 				tag += '		<a href="javascript:void(0)">\n';
 				tag += '			<div>\n';

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html

@@ -39,7 +39,7 @@
 			</dl>
 		</div>
 		<div class="btn_box">
-			<button class="btn btn_dark"><span>지금 리뷰 작성하기</span></button>
+			<button type="button" class="btn btn_dark" onclick="cfnGoToMypageReview();"><span>지금 리뷰 작성하기</span></button>
 		</div>
 	</div>
 	<!-- //등록리뷰 없을 시 -->

+ 15 - 12
src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html

@@ -62,15 +62,18 @@
 
 <!-- 상품상세 SNS  -->
 <th:block  th:fragment="goodsSnsForm" >
-<div class="sns_list" th:with="pastelUrl=${@environment.getProperty('domain.pastel')}, goodsView=${@environment.getProperty('upload.goods.view')}">
-	<ul>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('kakaostory', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull}', '', '');|"></a></li>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('facebook', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull}', '', '');|"></a></li>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('twitter', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull+ '#파스텔몰'}', '', '');|"></a></li>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('pinterest', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull}', '${goodsInfo.imgType == 'A' ? goodsView + goodsInfo.imgPath1 : goodsInfo.imgPath1}', '${goodsInfo.goodsTnmFull}');|"></a></li>
-		<li><a href="javascript:void(0)" class="btn_copy"></a></li>
-	</ul>
+<!-- toggle contents -->
+<div class="shareWrap" th:with="stylelUrl=${@environment.getProperty('domain.front')}, imgGoodsUrl=${@environment.getProperty('upload.goods.view')}">
+	<div id="layerShare" class="setShare open">
+		<span>
+			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm}');|"><span>카카오톡</span></button>
+			<button type="button" class="fb" th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '', '');|"><span>페이스북</span></button>
+			<button type="button" class="tw" th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm+ '#style24몰'}', '', '');|"><span>트위터</span></button>
+			<button type="button" class="url btn_copy"><span>URL</span></button>
+		</span>
+	</div>
 </div>
+
 </th:block>
 
 <!-- 딜 상품 상품소개영역 -->
@@ -532,11 +535,11 @@
 		let selfGoodsYn = '';
 		let currPrice = 0;
 		let soldoutYn = "N";
-		$selObj.find('.combo .list li').each(function() { debugger;
+		$selObj.find('.combo .list li').each(function() { 
 			if ($(this).find('input[name=selectGoods]').val() == compsGoodsCd){
 				selfGoodsYn = $(this).find('input[name=selectGoods]').attr('selfGoodsYn');
 				currPrice = $(this).find('input[name=selectGoods]').attr('currPrice');
-				if ($(this).find('.item_prod').hasClass('soldout')) soldout = "Y";
+				if ($(this).find('.item_prod').hasClass('soldout')) soldoutYn = "Y";
 				return false;
 			}
 			selIdx ++;
@@ -545,8 +548,8 @@
 		$selObj.find('.combo .list li').eq(selIdx).trigger("click");
 		
 		// 상세노출
-		fnGoodsDealDesc(compsGoodsCd, currPrice, selfGoodsYn, soldout);
-/* 		debugger;
+		fnGoodsDealDesc(compsGoodsCd, currPrice, selfGoodsYn, soldoutYn);
+/* 		
 		if (!soldout){
 			// 옵션1 처리
 			fnOption1("layer", compsGoodsCd, currPrice, selfGoodsYn);	

+ 1 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html

@@ -182,7 +182,7 @@
 
 	   /* $('.pd_bestreviewdetail_pop .swiper-slide').each(function(index, element){
 		   var $this = $(this);
-		   debugger;
+		   
 		   var thumbCount = $this.find('.thumblist ul li').length;
 		   var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
 		   var thumbMargin = 8 * thumbCount;

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

@@ -36,46 +36,12 @@
 				<ul id="mypageLnbList"></ul>
 			</div>
 			<div class="sec_body" id="wishList">
-				<!-- 월별 관심상품 -->
-				<!-- <div class="monthly_wish_wrap">
-					<div class="date">
-						<span></span>
-					</div>
-					<div class="itemsGrp">
-						<div class="item_prod">
-							<div class="item_state">
-								<button type="button" class="itemLike">관심상품 추가</button>
-								<a href="#none" class="itemLink">
-									<div class="itemPic">
-										<img alt="" class=" vLHTC pd_img" src="/images/pc/thumb/prod5.jpg">
-									</div>
-									<p class=" itemBrand">BRAND NAME</p>
-									<div class=" itemName">[온라인 단독] 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼 여성 니트 후드 경량 다운 점퍼</div>
-									<p class="itemPrice">80,100
-										<span class="itemPrice_original">89,000</span>
-										<span class=" itemPercent">10%</span>
-									</p>
-									<div class="itemcolorchip">
-										<span class="chip_color35" value="ABM">BEIGE</span>
-										<span class="chip_color54" value="BDS">BLACK</span>
-										<span class="chip_color40" value="YBR">WHITE</span>
-									</div>
-									 <p class="itemBadge">
-										<span class="badge13">베스트 </span>
-									</p>
-									<div class="itemComment">★ [NEW] 20FW 빅웨이브 단독발매!</div>
-								</a>
-							</div>
-						</div>	
-					</div>
-				</div> -->
-				<!-- //월별 관심상품 -->
 				<!-- 데이터 없을 시 -->
 				 <div class="nodata" style="display:none;">
 					<div class="txt_box">
 						<p>
-							현재 노출 할 수 있는 데이터가 없습니다.<br>
-							(문구수정)
+							등록된 위시리스트가 없습니다.<br>
+							
 						</p>
 					</div>
 				</div> 
@@ -107,7 +73,7 @@ var wishListForm = function() {
 				html += '		<div class="item_prod">                                                                                       ';
 				html += '			<div class="item_state">                                                                                  ';
 				html += '				<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" planDtlSq="" onclick="wishlistDelete(this)">관심상품 추가</button>                                               ';
-				html += '				<a href="'+_mall+'/goods/detail/form?goodsCd='+item.goodsCd+'"  class="itemLink" >                                                                     ';
+				html += '				<a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\');"  class="itemLink" >                                                                     ';
 				html += '					<div class="itemPic">                                                                             ';
 				html += '						<img alt="" class=" vLHTC pd_img" src="/images/pc/thumb/prod5.jpg">                           ';
 				html += '					</div>                                                                                            ';

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

@@ -191,9 +191,9 @@
 								<div class="swiper-wrapper">
 								 <th:block th:each="PlanData, PlanStat : ${planList}">
 									<div class="swiper-slide">
-										<a th:onclick="planDetailSearch([[${PlanData.planSq}]])">
+										<a th:onclick="cfnGoToPlanDetail([[${PlanData.planSq}]])">
 											<div class="thumb">
-												<img th:src="${@environment.getProperty('domain.image')+PlanData.mainPimg}" alt="${PlanData.planNm}">
+												<img th:src="${@environment.getProperty('domain.image')+PlanData.mainImg}" alt="${PlanData.planNm}">
 											</div>
 											<div class="txt">
 												<span class="brand" th:if="${PlanData.cnt > 1}" th:text="${PlanData.brand}+' 외'"></span>
@@ -239,34 +239,34 @@ if(review != null || review != ''){
 	html += '		<div class="review_list">';
 	
 	
-	for (var i = 0; i < review.length; i++) {
+	$.each(review, function(idx, item)  {
 		html += '			<div>';
 		html += '				<div class="best_review">';
-		html += '					<a href="javascript:void();" onclick="fnPlanReviewDetail(\''+review[i].reviewSq+'\');">';
+		html += '					<a href="javascript:void();" onclick="fnPlanReviewDetail(\''+item.reviewSq+'\');">';
 		html += '						<div class="lap">';
 		html += '							<div class="pic">';
-		if (review[i].fileGb == 'M') { 
-			html += '								<span class="thumb mov" style="background-image: url('+ imgUrl +'/'+review[i].reviewSysImg +');"></span>';	
+		if (item.fileGb == 'M') { 
+			html += '								<span class="thumb mov" style="background-image: url('+ imgUrl +'/'+item.reviewSysImg +');"></span>';	
 		}else{
-			html += '								<span class="thumb" style="background-image: url('+ imgUrl +'/'+review[i].reviewSysImg +');"></span>';			
+			html += '								<span class="thumb" style="background-image: url('+ imgUrl +'/'+item.reviewSysImg +');"></span>';			
 		}
 		html += '							</div>';
 		html += '							<div class="info">';
 		html += '								<div>';
 		html += '									<div class="star_score">';
 		html += '										<span class="star"> <em class="progbar"';
-		html += '											style="width:'+(review[i].score*20)+'%;"></em> <!-- 평점 style로 표기 -->';
+		html += '											style="width:'+(item.score*20)+'%;"></em> <!-- 평점 style로 표기 -->';
 		html += '										</span>'; 
-		if(review[i].bestYn == 'Y'){
+		if(item.bestYn == 'Y'){
 			html += '<em class="ico ico_besttag"></em>';	
 		}
 		html += '									</div>';
 		html += '									<div class="txt_best_review">';
-		html += '										<p>'+review[i].reviewContent+'</p>';
+		html += '										<p>'+item.reviewContent+'</p>';
 		html += '									</div>';
 		html += '									<div class="writer">';
-		html += '										<span class="wr_id">'+review[i].maskingCustId+'</span><span';
-		html += '											class="wr_date">'+review[i].regDt+'</span>';
+		html += '										<span class="wr_id">'+item.maskingCustId+'</span><span';
+		html += '											class="wr_date">'+item.regDt+'</span>';
 		html += '									</div>';
 		html += '								</div>';
 		html += '							</div>';
@@ -278,17 +278,16 @@ if(review != null || review != ''){
 		html += '						<div class="item_state">';
 		html += '							<a href="#none" class="itemLink">';
 		html += '								<div class="itemPic">';
-		html += '									<img alt="" class="vLHTC pd_img" src="'+ _imgUrl +'/'+review[i].sysImgNm +'">';
+		html += '									<img alt="" class="vLHTC pd_img" src="'+ _imgUrl +'/'+item.sysImgNm +'">';
 		html += '								</div>';
-		html += '								<div class="itemName">'+review[i].goodsNm+'</div>';
-		html += '								<p class="itemPrice">'+comma(review[i].currPrice)+'원</p>';
+		html += '								<div class="itemName">'+item.goodsNm+'</div>';
+		html += '								<p class="itemPrice">'+comma(item.currPrice)+'원</p>';
 		html += '							</a>';
 		html += '						</div>';
 		html += '					</div>';
 		html += '				</div>';
 		html += '			</div>';
-	}
-	
+	});
 	html += '			</div>';
 	html += '		</div>';
 	html += '	</div>';
@@ -307,29 +306,27 @@ if(coupon != null || coupon != ''){
 	html += '	</div>';
 	html += '	<div class="coupon_list inner">';
 	html += '		<ul class="clear">';
-	for (var i = 0; i < coupon.length; i++) {
+	$.each(coupon, function(idx, item) {
 		html += '			<li>';
 		html += '				<div class="coupon">';
 		html += '					<div>';
-		html += '						<p class="cp_name">'+coupon[i].cpnNm+'</p>';
+		html += '						<p class="cp_name">'+item.cpnNm+'</p>';
 		html += '						<p class="cp_cont">';
-		if (coupon[i].dcWay == '할인율') {
-			html += '							<span> <span><em>'+coupon[i].dcPval+'%</em></span>';
+		if (item.dcWay == '할인율') {
+			html += '							<span> <span><em>'+item.dcPval+'%</em></span>';
 		}else{
-			html += '							<span><em>'+comma(coupon[i].dcPval)+'</em>원</span>'; 
+			html += '							<span><em>'+comma(item.dcPval)+'</em>원</span>'; 
 		}
-		
-		
 		html += '						</p>';
-		html += '						<p class="cp_condition">'+comma(coupon[i].buyLimitAmt)+'원 이상 구매 시 최대 ' +comma(coupon[i].maxDcAmt) +'원 할인';
-		if (coupon[i].custPubLimitQty != 0) {
-			html += '								<span>1인 최대 '+coupon[i].custPubLimitQty+'장</span>';	
+		html += '						<p class="cp_condition">'+comma(item.buyLimitAmt)+'원 이상 구매 시 최대 ' +comma(item.maxDcAmt)+'원 할인';
+		if (item.custPubLimitQty != 0) {
+			html += '								<span>1인 최대 '+item.custPubLimitQty+'장</span>';	
 		}
 		
 		html += '						</p>';
 		html += '					</div>';
-		if (coupon[i].couponStat == '쿠폰받기') {
-			html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+coupon[i].cpnId+')">';  /* btn_coupon_done */
+		if (item.couponStat == '쿠폰받기') {
+			html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
 			html += '						<span>쿠폰받기</span>';								/* 받기완료  */
 			html += '					</button>';			
 		}else{
@@ -339,11 +336,11 @@ if(coupon != null || coupon != ''){
 			html += '					</button>';			
 		}
 		html += '				</div>';
-		html += '				<button type="button" class="btn_underline"	id="btn_cpinfo_pop" onclick="useInfoCoupon('+coupon[i].cpnId+')">';
+		html += '				<button type="button" class="btn_underline"	id="btn_cpinfo_pop" onclick="useInfoCoupon('+item.cpnId+')">';
 		html += '					<span>사용안내</span>';
 		html += '				</button>';
 		html += '			</li>';
-	}
+	});
 	html += '		</ul>';
 	html += '	</div>';
 	html += '	<div class="announce_txt inner">';
@@ -416,34 +413,34 @@ if(goods1 != null || goods1 != ''){
 			html += '    <div class="dp_listItems_cont">';
 			html += '        <ul>';
 			
-			for (var j = 0; j < goods1.length; j++) {
-				if (goods1[j].planContSq == template[i].planContSq) {
+			$.each(goods1, function(idx, item)  {
+				if (item.planContSq == template[i].planContSq) {
 					html += '            <li>';
 					html += '                <div class="dp_listItems">';
 					html += '                    <div class="dp_listItems_img">';
-					html += '                        <img src="'+ goodsView +'/'+goods1[j].sysImgNm +'" alt="">';
+					html += '                        <img src="'+ goodsView +'/'+item.sysImgNm +'" alt="">';
 					html += '                    </div>';
 					html += '                    <div class="dp_listItems_info">';
-					html += '                        <div class="dp_listItems_brand">'+goods1[j].brandKnm+'</div>';
-					html += '                        <div class="dp_listItems_name">'+goods1[j].goodsNm+'</div>';
+					html += '                        <div class="dp_listItems_brand">'+item.brandKnm+'</div>';
+					html += '                        <div class="dp_listItems_name">'+item.goodsNm+'</div>';
 					html += '                        <div class="dp_listItems_price">';
-					html += '                            <span class="price">'+comma(goods1[j].currPrice)+'</span>';
-					if (goods1[j].currPrice != goods1[j].listPrice) {
-						html += '                            <del>'+comma(goods1[j].listPrice)+'</del>';
-						html += '                            <span class="percent">'+Math.floor(goods1[j].dcRate)+'%</span>';
+					html += '                            <span class="price">'+comma(item.currPrice)+'</span>';
+					if (item.currPrice != item.listPrice) {
+						html += '                            <del>'+comma(item.listPrice)+'</del>';
+						html += '                            <span class="percent">'+Math.floor(item.dcRate)+'%</span>';
 					}
 					
 					html += '                        </div>';
 					//html += '                        <div class="itemComment">#주문 폭주 상품</div>';
 					html += '                        <div class="ui_row">';
-					html += '                            <button type="button" class="btn btn_default" onclick="location.href=\''+_mall+'/goods/detail/form?goodsCd='+goods1[j].goodsCd+'\'"><span>자세히 보기</span></button>';
+					html += '                            <button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\'"><span>자세히 보기</span></button>';
 					html += '                        </div>';
 					html += '                    </div>';
 					html += '                </div>';
 					html += '            </li>';
 						
 				}
-			}
+			});
 			html += '        </ul>';
 			html += '    </div>';
 			html += '</div>';
@@ -483,21 +480,21 @@ if(goods2 != null || goods2 != ''){
 			html+='        <div class="swiper-container dp_lookbook_case2">';
 			html+='            <div class="swiper-wrapper ">';
 			
-	  	  for (var j = 0; j < goods2.length; j++) {
-				if (goods2[j].planContSq == template[i].planContSq) {
+			$.each(goods2, function(idx, item) {
+				if (item.planContSq == template[i].planContSq) {
 					html+='                <div class="swiper-slide">';
 					html+='                    <div class="item_prod">';
 					html+='                        <div class="item_state">';
-					html+='                            <a href="'+_mall+'/goods/detail/form?goodsCd='+goods2[j].goodsCd+'" class="itemLink">';
+					html+='                            <a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\'" class="itemLink">';
 					html+='                                <div class="itemPic">';
-					html+='                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+goods2[j].sysImgNm +'">';
+					html+='                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item.sysImgNm +'">';
 					html+='                                </div>';
-					html+='                                <p class="itemBrand">'+goods2[j].brandKnm+'</p>';
-					html+='                                <div class="itemName">'+goods2[j].goodsNm+'</div>';
-					html+='                               <p class="itemPrice">'+comma(goods2[j].currPrice);
-					if (goods2[j].currPrice != goods2[j].listPrice) {
-						html+='                                    <span class="itemPrice_original">'+comma(goods2[j].listPrice)+'</span>';
-						html+='                                    <span class=" itemPercent">'+Math.floor(goods2[j].dcRate)+'%</span>';
+					html+='                                <p class="itemBrand">'+item.brandKnm+'</p>';
+					html+='                                <div class="itemName">'+item.goodsNm+'</div>';
+					html+='                               <p class="itemPrice">'+comma(item.currPrice);
+					if (item.currPrice != item.listPrice) {
+						html+='                                    <span class="itemPrice_original">'+comma(item.listPrice)+'</span>';
+						html+='                                    <span class=" itemPercent">'+Math.floor(item.dcRate)+'%</span>';
 					}
 					
 					html+='                                </p>';
@@ -507,7 +504,7 @@ if(goods2 != null || goods2 != ''){
 					html+='                    </div>';
 					html+='                </div>                ';
 				}
-			} 
+			});
 		 
 			html+='            </div>';
 			html+='        </div>';

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

@@ -64,38 +64,16 @@
 						</div>
 					</div>
 					<div class="area_top_list_info">
-						<div class="total_count">
-							<span th:text="${cnt}"></span>개의 이벤트
+						<div class="total_count" id="eventTotCnt">
+							<span ></span>개의 이벤트
 						</div>
 						<div class="ui_right">
 							<button class="btn btn_default" th:onclick="cfnGoToPage(_PAGE_NOTICE)"><span>당첨자 발표</span></button>
 						</div>
 					</div>
-					<div class="area_thumb_list">
-						<div  th:if="${cnt > 0}" class="thumb_list nodata">
-							<ul>
-								<th:block th:each="EventData, EventStat : ${evnetList}">
-								<li>
-									<a href="">
-										<th:block th:if="${EventData.newPlan != null}">
-										<div class="rank ranker"><span>NEW</span></div>
-										</th:block>
-										<div class="thumb">
-											<img th:src="${@environment.getProperty('domain.image')+'/planning/'+EventData.mainPimg}">
-										</div>
-										<div class="txt">
-											<p class="title" th:text="${EventData.planNm}"></p>
-											<p class="date">
-												<span th:text="${EventData.dispStdt}"></span> - <span th:text="${EventData.dispEddt}"></span>
-											</p>
-										</div>
-									</a>
-								</li>
-								</th:block>
-							</ul>	
-						</div>
+					<div class="area_thumb_list" id="divEventList" style="display:none;">
 						<!-- 등록된 이벤트가 없을 때 노출 -->
-						<div th:unless="${cnt > 0}" class="nodata">
+						<div class="nodata" id="divEventNoData" style="display:none;">
 							<div class="txt_box">
 								<p>
 									등록된 이벤트가 없습니다.
@@ -115,7 +93,57 @@
 	<!-- // container -->	
 
 <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>개의 이벤트');
+					
+					$('#eventList').html('');
+					let tag = '';
+					tag += '<div  class="thumb_list">';
+					tag += '	<ul>';
+					$.each(result, function(idx, item) {
+						tag += '		<li>';
+						tag += '			<a href="">';
+						if (item.newYn == 'Y') {
+							tag += '				<div class="rank ranker"><span>NEW</span></div>\n';
+						}
+						tag += '				<div class="thumb">';
+						tag += '					<img src="' + _uploadImageUrl + item.mainImg + '" alt="">';
+						tag += '				</div>';
+						tag += '				<div class="txt">';
+						tag += '					<p class="title">'+item.planNm+'</p>';
+						tag += '					<p class="date">';
+						tag += '						<span>'+item.dispStdt+'</span> - <span>'+item.dispEddt+'</span>';
+						tag += '					</p>';
+						tag += '				</div>';
+						tag += '			</a>';
+						tag += '		</li>';
+					});
+					tag += '	</ul>	';
+					tag += '</div>';
+					
+					$('#divEventList').html(tag);
+					
+					$('#divEventNoData').hide();
+					$('#divEventList').show();
+				} else {
+					$('#divEventNoData').show();
+					$('#divEventList').hide();
+				}
+			}
+		});
+}
 
+$(document).ready(function() {
+	fnGetEventList();
+});
+/*]]>*/
 </script>
 
 </th:block>

+ 3 - 0
src/main/webapp/ux/pc/css/common.css

@@ -502,6 +502,9 @@ content: "〉";font-size: 12px;padding-left: 8px;
 }
 
 /* toggle - Share */
+.shareSet {position: absolute; width:28px; height: 30px; top:0; right:70px; background: url(/images/pc/ico_sns_share.png)no-repeat;}
+.shareSet a {display: inline-block; width:100%; height: 100%; text-indent: -9999px;}
+
 .shareWrap {display: block;opacity: 0;background-color: #ffffff;border: 1px solid #000000;position: absolute;top: -50%;left: -267px;right: 0;padding: 22px 30px;border-radius: 0;z-index: -1;font-size: inherit;width: 240px;height: 70px;}
 .shareWrap p { text-align:left; color:#000000; font-size:12px; word-break:break-all; word-wrap:break-word;} 
 .on.shareWrap {opacity:1; border: 1px solid #000000; z-index:100;} 

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

@@ -928,3 +928,94 @@ var cfnGoToMypageReview = function (ordNo,ordDtlNo,goodsCd) {
     
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 클립보드 복사
+ * <pre>
+ *        copyToClipboard();
+ * </pre>
+ * @param  : 
+ * @since  : 2021/03/29
+ * @author : eskim
+ */
+function copyToClipboard() {
+	var t = document.createElement("textarea");
+	document.body.appendChild(t);
+	t.value = window.location.href;
+	t.select();
+	document.execCommand('copy');
+	document.body.removeChild(t);
+	mcxDialog.alert("URL이 복사 되었습니다.");
+}
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : SNS 공유 기능
+ * <pre>
+ *        copyToClipboard(sns, url, txt, media, description);
+ * </pre>
+ * @param  : 
+ * @since  : 2021/03/29
+ * @author : eskim
+ */
+function sendSns(sns, url, txt, media, description)
+{
+	var o;
+	var _txt = encodeURIComponent(txt);
+	var _br  = encodeURIComponent('\r\n');
+	var _media = encodeURIComponent(media);
+	var _description = encodeURIComponent(description);
+	
+	_url = location.protocol + encodeURIComponent(url);
+	
+	switch(sns)
+	{
+		case 'facebook':
+			window.open('http://www.facebook.com/sharer/sharer.php?u=' + _url, "_blank", 'width=600,height=400,resizable=yes,scrollbars=yes');
+			break;
+		case 'twitter':
+			window.open('http://twitter.com/intent/tweet?text=' + _txt + '&url=' + _url, "_blank", 'width=600,height=400,resizable=yes,scrollbars=yes');
+			break;
+		default:
+			mcxDialog.alert('지원하지 않는 SNS입니다.');
+			return false;
+	}
+}
+
+var kakaoInitCnt = 0; //카카오 초기화 카운트, 재실행 방지를 위해 사용함
+var kakaoDomainKey = '06cab652ad5d25be2190388d11a88fa4';
+function cfnSendToKakao(linkUrl, linkNm, linkImg) {
+
+	// Kakao Key
+	if ( kakaoInitCnt == 0 ) {
+		Kakao.init(kakaoDomainKey);
+		kakaoInitCnt++;
+	}
+
+	Kakao.Link.sendDefault({
+	  objectType: 'feed',
+	  content: {
+	    title: "[STYLE24]\n" + linkNm,
+	    imageUrl: linkImg,
+	    link: {
+	      webUrl: linkUrl,
+	      mobileWebUrl: linkUrl,
+	    },
+//	    description: page,
+	    imageWidth: 800,
+	    imageHeight: 800
+	  },
+	  buttons: [
+	    {
+	      title: 'style24.com',
+	      link: {
+	        webUrl: linkUrl,
+	        mobileWebUrl: linkUrl,
+	      }
+	    }
+	  ]
+	})
+}
+